From 5df497787a6bd99fce4fad8a6b6a692441de467f Mon Sep 17 00:00:00 2001 From: WarrentyExpired Date: Sat, 4 Jul 2026 10:35:30 -0400 Subject: [PATCH] #W# Initial Commit: Avatars Conquest --- .gitignore | 6 + ChangeLog.txt | 1 + Compile.sh | 5 + Data/Binary/Bounds.bin | Bin 0 -> 131072 bytes Data/Components/doors.txt | 39 + Data/Components/floors.txt | 57 + Data/Components/misc.txt | 91 + Data/Components/roof.txt | 36 + Data/Components/stairs.txt | 17 + Data/Components/suppinfo.txt | 1709 +++ Data/Components/teleprts.txt | 3 + Data/Components/walls.txt | 164 + Data/Config/Assemblies.cfg | 6 + Data/Config/Common.map | 864 ++ Data/Config/Regions.xml | 1028 ++ Data/Config/SpawnDefinitions.xml | 22 + Data/Config/bodyNames.txt | 355 + Data/Config/bodyTable.cfg | 1049 ++ Data/Config/containers.cfg | 31 + Data/Config/entrances.cfg | 9 + Data/Config/go.xml | 133 + Data/Config/items.cfg | 143 + Data/Config/mobiles.cfg | 58 + Data/Config/names.xml | 1208 ++ Data/Config/objects.xml | 2643 ++++ Data/Config/pageresponse.cfg | 10 + Data/Config/shrink.cfg | 356 + Data/Config/treasure.cfg | 0 .../Decoration/Britannia/Castle - Britain.cfg | 2 + Data/Decoration/Britannia/Cave Entrances.cfg | 50 + .../Britannia/Dungeon Entrances.cfg | 54 + Data/Decoration/Britannia/Places.cfg | 31 + Data/Decoration/Britannia/Town - Britain.cfg | 246 + Data/Decoration/Britannia/Town - Bucs Den.cfg | 215 + Data/Decoration/Britannia/Town - Cove.cfg | 234 + Data/Decoration/Britannia/Town - Jhelom.cfg | 260 + Data/Decoration/Britannia/Town - Magincia.cfg | 203 + Data/Decoration/Britannia/Town - Minoc.cfg | 239 + Data/Decoration/Britannia/Town - Moonglow.cfg | 264 + Data/Decoration/Britannia/Town - Paws.cfg | 228 + .../Britannia/Town - Skara Brae.cfg | 272 + Data/Decoration/Britannia/Town - Trinsic.cfg | 437 + Data/Decoration/Britannia/Town - Yew.cfg | 434 + Data/Decoration/Britannia/moongates.cfg | 23 + Data/Decoration/Underworld/Caves.cfg | 253 + .../Underworld/Dungeon - Covetous.cfg | 506 + .../Underworld/Dungeon - Despise.cfg | 60 + .../Underworld/Dungeon - Destard.cfg | 57 + .../Underworld/Labyrinth - Silent Tomb.cfg | 399 + .../Underworld/Labyrinth - Wailing Hall.cfg | 582 + .../Underworld/Maze - Caverns of Ice.cfg | 204 + .../Underworld/Maze - Halls of Stone.cfg | 78 + Data/Decoration/Underworld/Places.cfg | 20 + Data/Spawns/citizens.map | 410 + Data/Spawns/dungeons.map | 96 + Data/Spawns/graveyards.map | 107 + Data/Spawns/labyrinths.map | 232 + Data/Spawns/land.map | 3 + Data/Spawns/mazes.map | 55 + Data/Spawns/towns.map | 572 + Docs/bodies.html | 11 + Docs/bods/bod_smith_rewards.html | 1764 +++ Docs/bods/bod_tailor_rewards.html | 1026 ++ Docs/commands.html | 189 + Docs/index.html | 15 + Docs/keywords.html | 392 + Docs/namespaces/Server.Accounting.html | 16 + Docs/namespaces/Server.Chat.html | 10 + Docs/namespaces/Server.Commands.Generic.html | 71 + Docs/namespaces/Server.Commands.html | 49 + Docs/namespaces/Server.ContextMenus.html | 22 + Docs/namespaces/Server.Diagnostics.html | 16 + .../namespaces/Server.Engines.BulkOrders.html | 42 + .../namespaces/Server.Engines.CannedEvil.html | 21 + Docs/namespaces/Server.Engines.Chat.html | 17 + Docs/namespaces/Server.Engines.Craft.html | 53 + Docs/namespaces/Server.Engines.Doom.html | 19 + Docs/namespaces/Server.Engines.Harvest.html | 21 + Docs/namespaces/Server.Engines.Help.html | 25 + Docs/namespaces/Server.Engines.Mahjong.html | 28 + Docs/namespaces/Server.Engines.MyRunUO.html | 14 + .../Server.Engines.PartySystem.html | 20 + Docs/namespaces/Server.Engines.Plants.html | 27 + .../Server.Engines.Quests.Ambitious.html | 25 + .../Server.Engines.Quests.Collector.html | 67 + .../Server.Engines.Quests.Doom.html | 23 + .../namespaces/Server.Engines.Quests.Hag.html | 41 + .../Server.Engines.Quests.Haven.html | 63 + .../Server.Engines.Quests.Matriarch.html | 28 + .../Server.Engines.Quests.Naturalist.html | 20 + .../Server.Engines.Quests.Necro.html | 60 + .../Server.Engines.Quests.Ninja.html | 56 + .../Server.Engines.Quests.Samurai.html | 60 + .../Server.Engines.Quests.Zento.html | 19 + Docs/namespaces/Server.Engines.Quests.html | 34 + Docs/namespaces/Server.Engines.Reports.html | 53 + .../Server.Engines.VeteranRewards.html | 17 + Docs/namespaces/Server.Ethics.Evil.html | 18 + Docs/namespaces/Server.Ethics.Hero.html | 18 + Docs/namespaces/Server.Ethics.html | 16 + Docs/namespaces/Server.Factions.AI.html | 13 + Docs/namespaces/Server.Factions.html | 113 + Docs/namespaces/Server.Guilds.html | 32 + Docs/namespaces/Server.Gumps.html | 150 + Docs/namespaces/Server.HuePickers.html | 10 + Docs/namespaces/Server.Items.html | 2577 ++++ Docs/namespaces/Server.Menus.ItemLists.html | 11 + Docs/namespaces/Server.Menus.Questions.html | 12 + Docs/namespaces/Server.Menus.html | 10 + Docs/namespaces/Server.Misc.html | 72 + Docs/namespaces/Server.Mobiles.html | 674 + Docs/namespaces/Server.Movement.html | 12 + Docs/namespaces/Server.Multis.Deeds.html | 31 + Docs/namespaces/Server.Multis.html | 90 + Docs/namespaces/Server.Network.html | 201 + .../Server.PathAlgorithms.FastAStar.html | 11 + .../Server.PathAlgorithms.SlowAStar.html | 11 + Docs/namespaces/Server.PathAlgorithms.html | 10 + Docs/namespaces/Server.Prompts.html | 11 + Docs/namespaces/Server.Regions.html | 28 + Docs/namespaces/Server.RemoteAdmin.html | 20 + Docs/namespaces/Server.SkillHandlers.html | 38 + Docs/namespaces/Server.Spells.Bushido.html | 16 + Docs/namespaces/Server.Spells.Chivalry.html | 20 + Docs/namespaces/Server.Spells.Eighth.html | 17 + Docs/namespaces/Server.Spells.Fifth.html | 17 + Docs/namespaces/Server.Spells.First.html | 18 + Docs/namespaces/Server.Spells.Fourth.html | 17 + Docs/namespaces/Server.Spells.Necromancy.html | 32 + Docs/namespaces/Server.Spells.Ninjitsu.html | 20 + Docs/namespaces/Server.Spells.Second.html | 17 + Docs/namespaces/Server.Spells.Seventh.html | 17 + Docs/namespaces/Server.Spells.Sixth.html | 17 + .../Server.Spells.Spellweaving.html | 24 + Docs/namespaces/Server.Spells.Third.html | 17 + Docs/namespaces/Server.Spells.html | 28 + Docs/namespaces/Server.Targeting.html | 16 + Docs/namespaces/Server.Targets.html | 13 + Docs/namespaces/Server.html | 340 + Docs/objects.html | 2812 ++++ Docs/overview.html | 82 + Docs/styles.css | 23 + .../(Anonymous-Type)--c__DisplayClass1.html | 11 + .../(Anonymous-Type)--c__DisplayClass2.html | 11 + .../(Anonymous-Type)--c__DisplayClass3.html | 11 + .../(Anonymous-Type)--c__DisplayClass4.html | 11 + .../(Anonymous-Type)--c__DisplayClass6.html | 11 + .../(Anonymous-Type)--c__DisplayClass7.html | 12 + .../(Anonymous-Type)-GetEnumerator-d__2.html | 15 + Docs/types/AIControlMobileTarget.html | 13 + Docs/types/AITimer.html | 11 + Docs/types/AIType.html | 19 + Docs/types/ALRReason.html | 15 + Docs/types/ANecromancerShroud.html | 18 + Docs/types/AOS.html | 19 + Docs/types/AbandonEscortEntry.html | 11 + Docs/types/AbbatoirAddon.html | 15 + Docs/types/AbbatoirDeed.html | 15 + Docs/types/AbbrevComparer.html | 11 + Docs/types/AbysmalHorror.html | 22 + Docs/types/AcceptConversation.html | 12 + Docs/types/AcceptEscortEntry.html | 11 + Docs/types/AcceptProtectorGump.html | 11 + Docs/types/AccessException.html | 11 + Docs/types/AccessLevel.html | 16 + Docs/types/AccessRestrictions.html | 12 + Docs/types/Account.html | 68 + Docs/types/AccountAttackLimiter.html | 15 + Docs/types/AccountComment.html | 15 + Docs/types/AccountComparer.html | 11 + Docs/types/AccountHandler.html | 19 + Docs/types/AccountLoginAck.html | 10 + Docs/types/AccountLoginEventArgs.html | 15 + Docs/types/AccountLoginEventHandler.html | 13 + Docs/types/AccountLoginRej.html | 10 + Docs/types/AccountPrompt.html | 11 + Docs/types/AccountSearchResults.html | 10 + Docs/types/AccountTag.html | 14 + Docs/types/Accounts.html | 18 + Docs/types/AcctSearchType.html | 11 + Docs/types/AcidProofRobe.html | 18 + Docs/types/AcidSlime.html | 19 + Docs/types/AckPartyLocations.html | 10 + Docs/types/ActionType.html | 15 + Docs/types/ActivateEntry.html | 11 + Docs/types/Actor.html | 14 + Docs/types/Add.html | 36 + Docs/types/AddBuffPacket.html | 11 + Docs/types/AddCommand.html | 12 + Docs/types/AddCommentPrompt.html | 12 + Docs/types/AddDoorGump.html | 15 + Docs/types/AddGump.html | 16 + Docs/types/AddPartyTarget.html | 11 + Docs/types/AddTagNamePrompt.html | 12 + Docs/types/AddTagValuePrompt.html | 12 + Docs/types/AddTarget.html | 11 + Docs/types/AddToPackCommand.html | 11 + Docs/types/AddToPartyEntry.html | 11 + Docs/types/AddToSpellbookEntry.html | 12 + Docs/types/AddonComponent.html | 26 + Docs/types/AddonContainerComponent.html | 26 + Docs/types/AddonFitResult.html | 15 + Docs/types/AddressComparer.html | 11 + Docs/types/AdminCompressedPacket.html | 10 + Docs/types/AdminGump.html | 41 + Docs/types/AdminGumpPage.html | 33 + Docs/types/AdminNetwork.html | 21 + Docs/types/AdminRobe.html | 13 + Docs/types/AdmiralsHeartyRum.html | 14 + Docs/types/Aegis.html | 18 + Docs/types/AegisOfGrace.html | 22 + Docs/types/AffixType.html | 12 + Docs/types/Afro.html | 14 + Docs/types/AgapiteElemental.html | 18 + Docs/types/AgapiteGranite.html | 13 + Docs/types/AgapiteIngot.html | 14 + Docs/types/AgapiteOre.html | 15 + Docs/types/AggressiveActionEventArgs.html | 15 + Docs/types/AggressiveActionEventHandler.html | 13 + Docs/types/AggressorInfo.html | 22 + Docs/types/AgilityPotion.html | 15 + Docs/types/AgilityScroll.html | 14 + Docs/types/AgilitySpell.html | 14 + Docs/types/AirElemental.html | 18 + Docs/types/AirElementalSpell.html | 13 + .../AlbertaAfterPaintingConversation.html | 12 + .../types/AlbertaEndPaintingConversation.html | 12 + Docs/types/AlbertaGiacco.html | 17 + Docs/types/AlbertaPaintingConversation.html | 12 + Docs/types/AlbertaStoolConversation.html | 12 + Docs/types/Alchemist.html | 18 + Docs/types/AlchemistTableEastAddon.html | 14 + Docs/types/AlchemistTableEastDeed.html | 15 + Docs/types/AlchemistTableSouthAddon.html | 14 + Docs/types/AlchemistTableSouthDeed.html | 15 + Docs/types/AlchemistsBauble.html | 14 + Docs/types/AlchemyBag.html | 15 + Docs/types/AlchemyStone.html | 15 + Docs/types/AliasedSetCommand.html | 11 + Docs/types/AliasesAttribute.html | 11 + Docs/types/AllSkillsTarget.html | 11 + Docs/types/Allegiance.html | 12 + Docs/types/AllianceInfo.html | 40 + Docs/types/AllianceRosterGump.html | 14 + Docs/types/Alligator.html | 17 + Docs/types/AllowBeneficialHandler.html | 13 + Docs/types/AllowHarmfulHandler.html | 13 + Docs/types/AllowedPlacing.html | 13 + Docs/types/AlreadyBoundException.html | 10 + Docs/types/Amber.html | 15 + Docs/types/AmbitiousQueenQuest.html | 22 + Docs/types/Amethyst.html | 15 + Docs/types/Anatomy.html | 13 + Docs/types/AncientFarmersKasa.html | 17 + Docs/types/AncientLich.html | 24 + Docs/types/AncientSamuraiDo.html | 21 + Docs/types/AncientSmithyHammer.html | 20 + Docs/types/AncientUrn.html | 19 + Docs/types/AncientWyrm.html | 27 + Docs/types/AniLargeVioletFlask.html | 13 + Docs/types/AniRedRibbedFlask.html | 13 + Docs/types/AniSmallBlueFlask.html | 13 + Docs/types/AnimTimer.html | 11 + Docs/types/AnimalAI.html | 14 + Docs/types/AnimalBuyInfo.html | 12 + Docs/types/AnimalForm.html | 32 + Docs/types/AnimalFormContext.html | 15 + Docs/types/AnimalFormEntry.html | 22 + Docs/types/AnimalFormGump.html | 11 + Docs/types/AnimalFormTimer.html | 13 + Docs/types/AnimalLore.html | 13 + Docs/types/AnimalLoreGump.html | 16 + Docs/types/AnimalTaming.html | 19 + Docs/types/AnimalTrainer.html | 33 + Docs/types/AnimateDeadScroll.html | 14 + Docs/types/AnimateDeadSpell.html | 22 + Docs/types/AnimateMaabusCorpseObjective.html | 13 + Docs/types/AnimateRequestEventArgs.html | 12 + Docs/types/AnimateRequestEventHandler.html | 13 + Docs/types/AnimateTimer.html | 11 + Docs/types/Animations.html | 12 + Docs/types/AnkhNorth.html | 23 + Docs/types/AnkhOfSacrificeAddon.html | 17 + Docs/types/AnkhOfSacrificeComponent.html | 18 + Docs/types/AnkhOfSacrificeDeed.html | 21 + Docs/types/AnkhResurrectGump.html | 11 + Docs/types/AnkhWest.html | 23 + Docs/types/Ankhs.html | 13 + Docs/types/AnsellaGryen.html | 18 + Docs/types/AntLion.html | 19 + Docs/types/AnthropomorphistGlasses.html | 21 + Docs/types/Anvil.html | 13 + Docs/types/AnvilAttribute.html | 10 + Docs/types/AnvilComponent.html | 13 + Docs/types/AnvilEastAddon.html | 14 + Docs/types/AnvilEastDeed.html | 15 + Docs/types/AnvilSouthAddon.html | 14 + Docs/types/AnvilSouthDeed.html | 15 + Docs/types/AosArmorAttribute.html | 13 + Docs/types/AosArmorAttributes.html | 19 + Docs/types/AosAttribute.html | 32 + Docs/types/AosAttributes.html | 40 + Docs/types/AosElementAttribute.html | 16 + Docs/types/AosElementAttributes.html | 21 + Docs/types/AosSkillBonuses.html | 33 + Docs/types/AosWeaponAttribute.html | 34 + Docs/types/AosWeaponAttributes.html | 40 + Docs/types/Apple.html | 14 + Docs/types/ApplePie.html | 14 + Docs/types/AppleTreeAddon.html | 15 + Docs/types/AppleTreeDeed.html | 15 + Docs/types/AppleTrunkAddon.html | 14 + Docs/types/AppleTrunkDeed.html | 15 + Docs/types/ApplyPoisonResult.html | 13 + Docs/types/ApprenticeCorpseConversation.html | 12 + Docs/types/ArcaneBookshelfEastAddon.html | 14 + Docs/types/ArcaneBookshelfEastDeed.html | 15 + Docs/types/ArcaneBookshelfSouthAddon.html | 14 + Docs/types/ArcaneBookshelfSouthDeed.html | 15 + Docs/types/ArcaneCircleAddon.html | 14 + Docs/types/ArcaneCircleDeed.html | 15 + Docs/types/ArcaneCircleScroll.html | 14 + Docs/types/ArcaneCircleSpell.html | 20 + Docs/types/ArcaneDaemon.html | 16 + Docs/types/ArcaneEmpowermentScroll.html | 14 + Docs/types/ArcaneFey.html | 17 + Docs/types/ArcaneFiend.html | 17 + Docs/types/ArcaneFocus.html | 18 + Docs/types/ArcaneForm.html | 24 + Docs/types/ArcaneGem.html | 18 + Docs/types/ArcaneShield.html | 17 + Docs/types/ArcaneSummon-T-.html | 13 + Docs/types/ArcanistSpell.html | 29 + Docs/types/ArcanistStatueEastAddon.html | 14 + Docs/types/ArcanistStatueEastDeed.html | 15 + Docs/types/ArcanistStatueSouthAddon.html | 14 + Docs/types/ArcanistStatueSouthDeed.html | 15 + Docs/types/ArchCureScroll.html | 14 + Docs/types/ArchCureSpell.html | 19 + Docs/types/ArchProtectionScroll.html | 14 + Docs/types/ArchProtectionSpell.html | 14 + Docs/types/ArcherAI.html | 13 + Docs/types/ArcherGuard.html | 18 + Docs/types/ArcheryButte.html | 25 + Docs/types/ArcheryButteAddon.html | 14 + Docs/types/ArcheryButteDeed.html | 15 + Docs/types/Architect.html | 16 + Docs/types/ArcticDeathDealer.html | 17 + Docs/types/ArcticOgreLord.html | 16 + Docs/types/AreaCommandImplementor.html | 13 + Docs/types/Armoire.html | 14 + Docs/types/ArmorBodyType.html | 16 + Docs/types/ArmorDurabilityLevel.html | 15 + Docs/types/ArmorIgnore.html | 13 + Docs/types/ArmorMaterialType.html | 20 + Docs/types/ArmorMeditationAllowance.html | 12 + Docs/types/ArmorOfFortune.html | 17 + Docs/types/ArmorPierce.html | 15 + Docs/types/ArmorProtectionLevel.html | 15 + Docs/types/ArmorQuality.html | 12 + Docs/types/Armorer.html | 17 + Docs/types/ArmsAndWeaponsPrimer.html | 14 + Docs/types/ArmsLore.html | 13 + Docs/types/ArmsOfTacticalExcellence.html | 19 + Docs/types/Arrow.html | 17 + Docs/types/ArtifactLargeVase.html | 13 + Docs/types/ArtifactVase.html | 13 + Docs/types/Artist.html | 15 + Docs/types/ArtsGlasses.html | 21 + Docs/types/AsciiMessage.html | 10 + Docs/types/AshBoard.html | 14 + Docs/types/AshLog.html | 15 + Docs/types/AskDestinationEntry.html | 11 + Docs/types/AssassinSpike.html | 29 + Docs/types/AssemblyEmitter.html | 12 + Docs/types/AssistVersionReq.html | 10 + Docs/types/AsyncState.html | 11 + Docs/types/AsyncWriter.html | 67 + Docs/types/AttackMessage.html | 13 + Docs/types/AttackTimer.html | 16 + Docs/types/AttributeNormalizer.html | 13 + Docs/types/AttuneWeaponScroll.html | 14 + Docs/types/AttuneWeaponSpell.html | 19 + Docs/types/AuthIDPersistence.html | 10 + Docs/types/AutoManifestTimer.html | 11 + Docs/types/AutoRestart.html | 16 + Docs/types/AutoSave.html | 21 + Docs/types/AutokillTimer.html | 11 + Docs/types/AvengeTimer.html | 11 + Docs/types/AwaseMisoSoup.html | 13 + .../types/AwesomeDisturbingPortraitAddon.html | 14 + .../AwesomeDisturbingPortraitComponent.html | 19 + Docs/types/AwesomeDisturbingPortraitDeed.html | 15 + Docs/types/Axe.html | 26 + Docs/types/AxeOfTheHeavens.html | 17 + Docs/types/Axle.html | 14 + Docs/types/AxleGears.html | 14 + Docs/types/BBDisplayBoard.html | 10 + Docs/types/BBMessageContent.html | 12 + Docs/types/BBMessageHeader.html | 12 + Docs/types/BGTClassifier.html | 11 + Docs/types/BOBFilter.html | 18 + Docs/types/BOBFilterGump.html | 12 + Docs/types/BOBGump.html | 20 + Docs/types/BOBLargeEntry.html | 20 + Docs/types/BOBLargeSubEntry.html | 16 + Docs/types/BOBSmallEntry.html | 22 + Docs/types/BODBuyGump.html | 11 + Docs/types/BODType.html | 11 + Docs/types/Backgammon.html | 14 + Docs/types/Backpack.html | 16 + Docs/types/BackpackArtifact.html | 14 + Docs/types/Backstab.html | 20 + Docs/types/Bacon.html | 14 + Docs/types/BadCard.html | 14 + Docs/types/BadStartMessage.html | 11 + Docs/types/Bag.html | 15 + Docs/types/BagOfAllReagents.html | 14 + Docs/types/BagOfNecroReagents.html | 14 + Docs/types/BagOfReagents.html | 14 + Docs/types/BagOfSending.html | 27 + Docs/types/BagOfSendingHue.html | 12 + Docs/types/BagOfingots.html | 14 + Docs/types/BakeKitsune.html | 33 + Docs/types/Baker.html | 15 + Docs/types/BallCallback.html | 13 + Docs/types/BallEntry.html | 11 + Docs/types/BallOfSummoning.html | 31 + Docs/types/BallotBox.html | 25 + Docs/types/BallotBoxAddon.html | 14 + Docs/types/BallotBoxDeed.html | 15 + Docs/types/Balron.html | 18 + Docs/types/BambooChair.html | 13 + Docs/types/BambooFlute.html | 14 + Docs/types/BambooScreen.html | 13 + Docs/types/BanDurationGump.html | 16 + Docs/types/Banana.html | 14 + Docs/types/Bananas.html | 14 + Docs/types/Bandage.html | 19 + Docs/types/BandageContext.html | 22 + Docs/types/Bandana.html | 22 + Docs/types/BankBox.html | 26 + Docs/types/BankCheck.html | 19 + Docs/types/BankTarget.html | 11 + Docs/types/Banker.html | 26 + Docs/types/BankerCamp.html | 14 + Docs/types/BankerConversation.html | 12 + Docs/types/Banner.html | 21 + Docs/types/BannerDeed.html | 18 + Docs/types/BarGraph.html | 26 + Docs/types/BarGraphRenderMode.html | 11 + Docs/types/BarGraphRenderer.html | 41 + Docs/types/BarRegion.html | 10 + Docs/types/BarbedHides.html | 15 + Docs/types/BarbedLeather.html | 14 + Docs/types/Bard.html | 16 + Docs/types/BardGuildmaster.html | 14 + Docs/types/Bardiche.html | 27 + Docs/types/BarkFragment.html | 15 + Docs/types/BarkeepContract.html | 15 + Docs/types/Barkeeper.html | 17 + Docs/types/BarkeeperGump.html | 21 + Docs/types/BarkeeperRumor.html | 14 + Docs/types/BarkeeperTitleGump.html | 14 + Docs/types/Barracoon.html | 34 + Docs/types/BarredMetalDoor.html | 13 + Docs/types/BarredMetalDoor2.html | 13 + Docs/types/Barrel.html | 13 + Docs/types/BarrelHoops.html | 14 + Docs/types/BarrelLid.html | 13 + Docs/types/BarrelStaves.html | 13 + Docs/types/BarrelTap.html | 13 + Docs/types/Bascinet.html | 24 + Docs/types/BaseAI.html | 66 + Docs/types/BaseAddon.html | 31 + Docs/types/BaseAddonContainer.html | 36 + Docs/types/BaseAddonContainerDeed.html | 20 + Docs/types/BaseAddonDeed.html | 17 + Docs/types/BaseAgilityPotion.html | 18 + Docs/types/BaseAmbitiousSolenQueen.html | 20 + Docs/types/BaseArmor.html | 114 + Docs/types/BaseAttributes.html | 19 + Docs/types/BaseAxe.html | 28 + Docs/types/BaseBagBall.html | 15 + Docs/types/BaseBashing.html | 21 + Docs/types/BaseBeverage.html | 45 + Docs/types/BaseBoard.html | 26 + Docs/types/BaseBoat.html | 91 + Docs/types/BaseBoatDeed.html | 20 + Docs/types/BaseBook.html | 33 + Docs/types/BaseBracelet.html | 15 + Docs/types/BaseBulletinBoard.html | 29 + Docs/types/BaseCamp.html | 26 + Docs/types/BaseChampion.html | 29 + Docs/types/BaseCloak.html | 15 + Docs/types/BaseClothMaterial.html | 18 + Docs/types/BaseClothing.html | 78 + Docs/types/BaseCommand.html | 27 + Docs/types/BaseCommandImplementor.html | 30 + Docs/types/BaseConfirmGump.html | 17 + Docs/types/BaseConflagrationPotion.html | 25 + Docs/types/BaseConfusionBlastPotion.html | 26 + Docs/types/BaseContainer.html | 24 + Docs/types/BaseCreature.html | 401 + Docs/types/BaseCurePotion.html | 17 + Docs/types/BaseDecorationArtifact.html | 17 + .../BaseDecorationContainerArtifact.html | 17 + Docs/types/BaseDockedBoat.html | 23 + Docs/types/BaseDoor.html | 44 + Docs/types/BaseEarrings.html | 15 + Docs/types/BaseEnraged.html | 18 + Docs/types/BaseEquipableLight.html | 16 + Docs/types/BaseEscortable.html | 38 + Docs/types/BaseExplosionPotion.html | 23 + Docs/types/BaseExtension.html | 20 + Docs/types/BaseFactionGuard.html | 48 + Docs/types/BaseFactionTrap.html | 37 + Docs/types/BaseFactionTrapDeed.html | 20 + Docs/types/BaseFactionVendor.html | 23 + Docs/types/BaseFamiliar.html | 23 + Docs/types/BaseFloor.html | 14 + Docs/types/BaseFormTalisman.html | 18 + Docs/types/BaseFruitTreeAddon.html | 19 + Docs/types/BaseGlovesOfMining.html | 18 + Docs/types/BaseGranite.html | 18 + Docs/types/BaseGridGump.html | 40 + Docs/types/BaseGuard.html | 18 + Docs/types/BaseGuild.html | 28 + Docs/types/BaseGuildGump.html | 22 + Docs/types/BaseGuildListGump-T-.html | 21 + Docs/types/BaseGuildmaster.html | 31 + Docs/types/BaseHairInfo.html | 16 + Docs/types/BaseHarvestTool.html | 31 + Docs/types/BaseHat.html | 19 + Docs/types/BaseHealPotion.html | 20 + Docs/types/BaseHealer.html | 26 + Docs/types/BaseHides.html | 21 + Docs/types/BaseHouse.html | 174 + Docs/types/BaseHouseDoor.html | 23 + Docs/types/BaseImageTileButtonsGump.html | 18 + Docs/types/BaseImprisonedMobile.html | 17 + Docs/types/BaseInfo.html | 19 + Docs/types/BaseIngot.html | 22 + Docs/types/BaseInstrument.html | 51 + Docs/types/BaseJewel.html | 36 + Docs/types/BaseKnife.html | 21 + Docs/types/BaseLeather.html | 21 + Docs/types/BaseLight.html | 32 + Docs/types/BaseMagicFish.html | 19 + Docs/types/BaseMeleeWeapon.html | 15 + Docs/types/BaseMiddleTorso.html | 15 + Docs/types/BaseMonolith.html | 23 + Docs/types/BaseMount.html | 35 + Docs/types/BaseMulti.html | 26 + Docs/types/BaseNecklace.html | 15 + Docs/types/BaseOre.html | 24 + Docs/types/BaseOuterLegs.html | 15 + Docs/types/BaseOuterTorso.html | 15 + Docs/types/BasePacketProfile.html | 15 + Docs/types/BasePants.html | 15 + Docs/types/BasePiece.html | 23 + Docs/types/BasePigmentsOfTokuno.html | 25 + Docs/types/BasePlayerBB.html | 22 + Docs/types/BasePoisonPotion.html | 19 + Docs/types/BasePoleArm.html | 25 + Docs/types/BasePotion.html | 29 + Docs/types/BaseProfile.html | 21 + Docs/types/BaseQuestGump.html | 17 + Docs/types/BaseQuester.html | 32 + Docs/types/BaseQuiver.html | 43 + Docs/types/BaseRanged.html | 29 + Docs/types/BaseReagent.html | 16 + Docs/types/BaseRefreshPotion.html | 16 + Docs/types/BaseRegion.html | 31 + Docs/types/BaseRejuvinationAnkh.html | 16 + Docs/types/BaseRing.html | 15 + Docs/types/BaseRunicTool.html | 44 + Docs/types/BaseScales.html | 20 + Docs/types/BaseShield.html | 17 + Docs/types/BaseShieldGuard.html | 20 + Docs/types/BaseShirt.html | 15 + Docs/types/BaseShoes.html | 16 + Docs/types/BaseSign.html | 14 + Docs/types/BaseSolenMatriarch.html | 23 + Docs/types/BaseSpear.html | 20 + Docs/types/BaseStaff.html | 20 + Docs/types/BaseStrengthPotion.html | 18 + Docs/types/BaseSuit.html | 20 + Docs/types/BaseSword.html | 19 + Docs/types/BaseSystemController.html | 18 + Docs/types/BaseTalisman.html | 65 + Docs/types/BaseTalismanSummon.html | 19 + Docs/types/BaseTool.html | 30 + Docs/types/BaseTrap.html | 24 + Docs/types/BaseTreasureChest.html | 27 + Docs/types/BaseVendor.html | 72 + Docs/types/BaseVendorRentalGump.html | 22 + Docs/types/BaseWaist.html | 15 + Docs/types/BaseWall.html | 14 + Docs/types/BaseWand.html | 39 + Docs/types/BaseWarHorse.html | 15 + Docs/types/BaseWaterContainer.html | 25 + Docs/types/BaseWeapon.html | 166 + Docs/types/BaseWindChimes.html | 22 + Docs/types/Basket.html | 13 + Docs/types/Basket1Artifact.html | 14 + Docs/types/Basket2Artifact.html | 14 + Docs/types/Basket3NorthArtifact.html | 14 + Docs/types/Basket3WestArtifact.html | 14 + Docs/types/Basket4Artifact.html | 14 + Docs/types/Basket5NorthArtifact.html | 14 + Docs/types/Basket5WestArtifact.html | 14 + Docs/types/Basket6Artifact.html | 14 + Docs/types/BatWing.html | 16 + Docs/types/Batch.html | 17 + Docs/types/BatchCommand.html | 13 + Docs/types/BatchGump.html | 12 + Docs/types/BatchScopeGump.html | 12 + Docs/types/BattleAxe.html | 26 + Docs/types/Beads.html | 13 + Docs/types/BearMask.html | 23 + Docs/types/Beard.html | 18 + Docs/types/BedOfNailsAddon.html | 17 + Docs/types/BedOfNailsComponent.html | 15 + Docs/types/BedOfNailsDeed.html | 15 + Docs/types/Bedroll.html | 15 + Docs/types/Beekeeper.html | 16 + Docs/types/Beeswax.html | 14 + Docs/types/Beetle.html | 32 + Docs/types/Begging.html | 13 + Docs/types/BeginHouseCustomization.html | 10 + Docs/types/BellOfTheDead.html | 20 + Docs/types/BentoBox.html | 14 + Docs/types/BerserkAI.html | 13 + Docs/types/Betrayer.html | 26 + Docs/types/BeverageBottle.html | 18 + Docs/types/BeverageBuyInfo.html | 13 + Docs/types/BeverageType.html | 15 + Docs/types/BigElvenChair.html | 13 + Docs/types/BigFish.html | 17 + Docs/types/BinaryFileReader.html | 54 + Docs/types/BinaryFileWriter.html | 67 + Docs/types/BinaryMemoryWriter.html | 12 + Docs/types/BindTarget.html | 11 + Docs/types/BindingException.html | 11 + Docs/types/Bird.html | 17 + Docs/types/BirdsOfBritannia.html | 14 + Docs/types/BlackAmbitiousSolenQueen.html | 14 + Docs/types/BlackBear.html | 17 + Docs/types/BlackDyeTub.html | 13 + Docs/types/BlackLotusHood.html | 21 + Docs/types/BlackPearl.html | 16 + Docs/types/BlackScales.html | 14 + Docs/types/BlackSolenInfiltratorQueen.html | 21 + Docs/types/BlackSolenInfiltratorWarrior.html | 21 + Docs/types/BlackSolenMatriarch.html | 14 + Docs/types/BlackSolenQueen.html | 23 + Docs/types/BlackSolenWarrior.html | 23 + Docs/types/BlackSolenWorker.html | 21 + Docs/types/BlackStaff.html | 27 + Docs/types/Blackheart.html | 17 + Docs/types/BlackheartFirstConversation.html | 12 + .../types/BlackheartNoPirateConversation.html | 15 + Docs/types/BlackheartPirateConversation.html | 15 + Docs/types/Blacksmith.html | 23 + Docs/types/BlacksmithGuildmaster.html | 19 + Docs/types/BlackthornWelcomeBook.html | 14 + Docs/types/BladeDance.html | 16 + Docs/types/BladeOfInsanity.html | 17 + Docs/types/BladeOfTheRighteous.html | 17 + Docs/types/BladeSpirits.html | 24 + Docs/types/BladeSpiritsScroll.html | 14 + Docs/types/BladeSpiritsSpell.html | 16 + Docs/types/BladedItemTarget.html | 12 + Docs/types/BladedStaff.html | 27 + Docs/types/BlankMap.html | 14 + Docs/types/BlankScroll.html | 16 + Docs/types/BlazeDyeTub.html | 13 + Docs/types/BlazeOfDeath.html | 17 + Docs/types/BleedAttack.html | 17 + Docs/types/Bless.html | 12 + Docs/types/BlessScroll.html | 14 + Docs/types/BlessSpell.html | 14 + Docs/types/Blight.html | 14 + Docs/types/BlightGrippedLongbow.html | 14 + Docs/types/Block.html | 17 + Docs/types/BlockEntry.html | 11 + Docs/types/BlockInfo.html | 10 + Docs/types/BlockMountType.html | 13 + Docs/types/Blocker.html | 16 + Docs/types/Blood.html | 15 + Docs/types/BloodElemental.html | 15 + Docs/types/BloodOathScroll.html | 14 + Docs/types/BloodOathSpell.html | 18 + Docs/types/BloodPentagram.html | 13 + Docs/types/Bloodmoss.html | 16 + Docs/types/BloodwoodBoard.html | 14 + Docs/types/BloodwoodLog.html | 15 + Docs/types/BloodwoodSpirit.html | 15 + Docs/types/BloodyPentagramAddon.html | 15 + Docs/types/BloodyPentagramComponent.html | 15 + Docs/types/BloodyPentagramDeed.html | 18 + Docs/types/BloodyWaterArtifact.html | 14 + Docs/types/Blowpipe.html | 16 + Docs/types/BlueBeaker.html | 13 + Docs/types/BlueBook.html | 17 + Docs/types/BlueCurvedFlask.html | 13 + Docs/types/BlueDecorativeRugAddon.html | 14 + Docs/types/BlueDecorativeRugDeed.html | 15 + Docs/types/BlueDiamond.html | 15 + Docs/types/BlueFancyRugAddon.html | 14 + Docs/types/BlueFancyRugDeed.html | 15 + Docs/types/BlueNinjaQuestTeleporter.html | 16 + Docs/types/BluePlainRugAddon.html | 14 + Docs/types/BluePlainRugDeed.html | 15 + Docs/types/BlueScales.html | 15 + Docs/types/BlueSlateFloorCenter.html | 13 + Docs/types/BlueSnowflake.html | 13 + Docs/types/BlueSoulstone.html | 15 + Docs/types/Boar.html | 15 + Docs/types/Board.html | 21 + Docs/types/BoatOrder.html | 12 + Docs/types/Body.html | 24 + Docs/types/BodyAttribute.html | 10 + Docs/types/BodyEntry.html | 15 + Docs/types/BodyEntrySorter.html | 11 + Docs/types/BodySash.html | 15 + Docs/types/BodyType.html | 15 + Docs/types/BogThing.html | 19 + Docs/types/Bogle.html | 17 + Docs/types/Bogling.html | 16 + Docs/types/BoilingCauldronAddon.html | 17 + Docs/types/BoilingCauldronDeed.html | 15 + Docs/types/Bokuto.html | 29 + Docs/types/Bola.html | 18 + Docs/types/BolaBall.html | 14 + Docs/types/BolaTarget.html | 11 + Docs/types/BoldStranger.html | 14 + Docs/types/Bolt.html | 17 + Docs/types/BoltEffect.html | 10 + Docs/types/BoltOfCloth.html | 19 + Docs/types/BondedStatus.html | 10 + Docs/types/Bone.html | 16 + Docs/types/BoneArms.html | 28 + Docs/types/BoneChest.html | 28 + Docs/types/BoneCouchAddon.html | 15 + Docs/types/BoneCouchComponent.html | 15 + Docs/types/BoneCouchDeed.html | 15 + Docs/types/BoneCrusher.html | 17 + Docs/types/BoneDemon.html | 19 + Docs/types/BoneGloves.html | 27 + Docs/types/BoneHarvester.html | 29 + Docs/types/BoneHelm.html | 25 + Docs/types/BoneKnight.html | 16 + Docs/types/BoneLegs.html | 27 + Docs/types/BoneMagi.html | 17 + Docs/types/BonePile.html | 14 + Docs/types/BoneTableAddon.html | 14 + Docs/types/BoneTableDeed.html | 15 + Docs/types/BoneThroneAddon.html | 14 + Docs/types/BoneThroneComponent.html | 15 + Docs/types/BoneThroneDeed.html | 15 + Docs/types/Bonesmasher.html | 16 + Docs/types/Bonnet.html | 21 + Docs/types/BonusHarvestResource.html | 15 + Docs/types/BookContent.html | 15 + Docs/types/BookHeader.html | 10 + Docs/types/BookOfBushido.html | 17 + Docs/types/BookOfChivalry.html | 17 + Docs/types/BookOfNinjitsu.html | 17 + Docs/types/BookPageDetails.html | 10 + Docs/types/BookPageInfo.html | 14 + Docs/types/BooksFaceDownArtifact.html | 14 + Docs/types/BooksNorthArtifact.html | 14 + Docs/types/BooksWestArtifact.html | 14 + Docs/types/Boomstick.html | 17 + Docs/types/Boots.html | 16 + Docs/types/Bottle.html | 16 + Docs/types/BottleArtifact.html | 14 + Docs/types/BounceInfo.html | 13 + Docs/types/BoundingBoxCallback.html | 13 + Docs/types/BoundingBoxPicker.html | 12 + Docs/types/Bow.html | 32 + Docs/types/BowOfTheJukaKing.html | 16 + Docs/types/BowlArtifact.html | 14 + Docs/types/BowlFlour.html | 13 + Docs/types/BowlsHorizontalArtifact.html | 14 + Docs/types/BowlsVerticalArtifact.html | 14 + Docs/types/Bowyer.html | 18 + Docs/types/BraceletCallback.html | 13 + Docs/types/BraceletEntry.html | 11 + Docs/types/BraceletOfBinding.html | 30 + Docs/types/BraceletOfHealth.html | 15 + Docs/types/BrambleCoat.html | 19 + Docs/types/BraveKnightOfTheBritannia.html | 18 + Docs/types/Brazier.html | 14 + Docs/types/BrazierArtifact.html | 14 + Docs/types/BrazierTall.html | 14 + Docs/types/BreadLoaf.html | 14 + Docs/types/BreathOfTheDead.html | 17 + Docs/types/BrickHouseDeed.html | 16 + Docs/types/BricksFloor1.html | 13 + Docs/types/BricksFloor2.html | 13 + Docs/types/BrideGroom.html | 17 + Docs/types/Brigand.html | 16 + Docs/types/BrigandCamp.html | 20 + Docs/types/BrightlyColoredEggs.html | 15 + Docs/types/BrilliantAmber.html | 15 + Docs/types/BringToPackCommand.html | 11 + Docs/types/Britain.html | 10 + Docs/types/BritannianFlora.html | 14 + Docs/types/BroadcastCrystal.html | 24 + Docs/types/BroadcastPrompt.html | 11 + Docs/types/Broadcasts.html | 13 + Docs/types/Broadsword.html | 28 + Docs/types/BrocadeGozaMatEastAddon.html | 16 + Docs/types/BrocadeGozaMatEastDeed.html | 15 + Docs/types/BrocadeGozaMatSouthAddon.html | 16 + Docs/types/BrocadeGozaMatSouthDeed.html | 15 + Docs/types/BrocadeSquareGozaMatEastAddon.html | 16 + Docs/types/BrocadeSquareGozaMatEastDeed.html | 15 + .../types/BrocadeSquareGozaMatSouthAddon.html | 16 + Docs/types/BrocadeSquareGozaMatSouthDeed.html | 15 + Docs/types/BrokenArmoireAddon.html | 14 + Docs/types/BrokenArmoireComponent.html | 14 + Docs/types/BrokenArmoireDeed.html | 15 + Docs/types/BrokenBedAddon.html | 14 + Docs/types/BrokenBedDeed.html | 18 + Docs/types/BrokenBookcaseAddon.html | 14 + Docs/types/BrokenBookcaseComponent.html | 14 + Docs/types/BrokenBookcaseDeed.html | 15 + Docs/types/BrokenChair.html | 13 + Docs/types/BrokenChestOfDrawersAddon.html | 14 + Docs/types/BrokenChestOfDrawersComponent.html | 14 + Docs/types/BrokenChestOfDrawersDeed.html | 15 + Docs/types/BrokenCoveredChairAddon.html | 14 + Docs/types/BrokenCoveredChairComponent.html | 14 + Docs/types/BrokenCoveredChairDeed.html | 15 + Docs/types/BrokenFallenChairAddon.html | 14 + Docs/types/BrokenFallenChairComponent.html | 14 + Docs/types/BrokenFallenChairDeed.html | 15 + Docs/types/BrokenVanityAddon.html | 14 + Docs/types/BrokenVanityDeed.html | 18 + Docs/types/BronzeElemental.html | 18 + Docs/types/BronzeGranite.html | 13 + Docs/types/BronzeIngot.html | 14 + Docs/types/BronzeOre.html | 15 + Docs/types/BronzeShield.html | 22 + Docs/types/BronzeStatueMaker.html | 13 + Docs/types/BrownBear.html | 17 + Docs/types/BrownBearRugEastAddon.html | 14 + Docs/types/BrownBearRugEastDeed.html | 15 + Docs/types/BrownBearRugSouthAddon.html | 14 + Docs/types/BrownBearRugSouthDeed.html | 15 + Docs/types/BrownBook.html | 16 + Docs/types/Bucket.html | 17 + Docs/types/Buckler.html | 22 + Docs/types/BuffIcon.html | 55 + Docs/types/BuffInfo.html | 38 + Docs/types/BufferPool.html | 15 + Docs/types/BulkGenericType.html | 12 + Docs/types/BulkMaterialType.html | 21 + Docs/types/BulkOrderBook.html | 27 + Docs/types/BulkOrderInfoEntry.html | 11 + Docs/types/Bull.html | 17 + Docs/types/BullFrog.html | 17 + Docs/types/BulletinBoard.html | 13 + Docs/types/BulletinEquip.html | 10 + Docs/types/BulletinMessage.html | 26 + Docs/types/BunnyHole.html | 13 + Docs/types/BunsHair.html | 14 + Docs/types/BurglarsBandana.html | 21 + Docs/types/BurningOfTrinsic.html | 14 + Docs/types/BustEast.html | 14 + Docs/types/BustSouth.html | 14 + Docs/types/Butcher.html | 16 + Docs/types/ButcherKnife.html | 26 + Docs/types/Buttons.html | 12 + Docs/types/BuyEntry.html | 12 + Docs/types/BuyItemResponse.html | 12 + Docs/types/BuyItemState.html | 17 + Docs/types/BuyItemStateComparer.html | 11 + Docs/types/ByteQueue.html | 17 + Docs/types/CAGCategory.html | 18 + Docs/types/CAGNode.html | 13 + Docs/types/CAGObject.html | 16 + Docs/types/CIDRFirewallEntry.html | 14 + Docs/types/CMEFlags.html | 12 + Docs/types/Cabbage.html | 14 + Docs/types/Cake.html | 13 + Docs/types/CakeMix.html | 15 + Docs/types/CallInfo.html | 10 + Docs/types/CallPriorityAttribute.html | 11 + Docs/types/CallPriorityComparer.html | 12 + Docs/types/CallToAnarchy.html | 14 + Docs/types/Callback.html | 13 + Docs/types/CallbackEntry.html | 12 + Docs/types/CallingTimer.html | 11 + Docs/types/Calm.html | 17 + Docs/types/Campfire.html | 20 + Docs/types/CampfireEntry.html | 15 + Docs/types/CampfireStatus.html | 12 + Docs/types/CancelArrow.html | 10 + Docs/types/CancelArrowHS.html | 10 + Docs/types/CancelQuestRegion.html | 12 + .../CancelRenewInventoryInsuranceGump.html | 11 + Docs/types/CancelTarget.html | 10 + Docs/types/Candelabra.html | 18 + Docs/types/CandelabraOfSouls.html | 14 + Docs/types/CandelabraStand.html | 15 + Docs/types/Candidate.html | 16 + Docs/types/Candle.html | 15 + Docs/types/CandleLarge.html | 15 + Docs/types/CandleLong.html | 16 + Docs/types/CandleShort.html | 15 + Docs/types/CandleSkull.html | 15 + Docs/types/CandyCane.html | 17 + Docs/types/CandyCaneTimer.html | 13 + Docs/types/Cannon.html | 19 + Docs/types/CannonAddon.html | 22 + Docs/types/CannonAddonComponent.html | 15 + Docs/types/CannonComponent.html | 14 + Docs/types/CannonDeed.html | 21 + Docs/types/CannonDirection.html | 13 + Docs/types/Cantaloupe.html | 14 + Docs/types/Cap.html | 21 + Docs/types/CapacityExceededException.html | 10 + Docs/types/CaptainJohnsHat.html | 22 + Docs/types/CaptainQuacklebushsCutlass.html | 16 + Docs/types/CaptureImagesObjective.html | 19 + Docs/types/CaptureResponse.html | 12 + Docs/types/CapturedEssence.html | 14 + Docs/types/CapturedHordeMinion.html | 15 + Docs/types/Cards.html | 13 + Docs/types/Cards2.html | 13 + Docs/types/Cards3.html | 13 + Docs/types/Cards4.html | 13 + Docs/types/Carpenter.html | 17 + Docs/types/Carrot.html | 14 + Docs/types/CashBankCheckObjective.html | 12 + Docs/types/CastSpellRequestEventArgs.html | 13 + Docs/types/CastSpellRequestEventHandler.html | 13 + Docs/types/CastTimer.html | 11 + Docs/types/Castle.html | 17 + Docs/types/CastleDeed.html | 16 + Docs/types/Cat.html | 16 + Docs/types/Categorization.html | 23 + Docs/types/CategorizedAddGump.html | 13 + Docs/types/CategoryEntry.html | 18 + Docs/types/CategoryLine.html | 13 + Docs/types/CategorySorter.html | 11 + Docs/types/CategoryTypeEntry.html | 12 + Docs/types/Cauldron.html | 14 + Docs/types/CaveFloorCenter.html | 13 + Docs/types/CaveFloorEast.html | 13 + Docs/types/CaveFloorNorth.html | 13 + Docs/types/CaveFloorSouth.html | 13 + Docs/types/CaveFloorWest.html | 13 + Docs/types/CavortingClub.html | 16 + Docs/types/Centaur.html | 18 + Docs/types/CeramicMug.html | 17 + Docs/types/ChainChest.html | 26 + Docs/types/ChainCoif.html | 24 + Docs/types/ChainHatsuburi.html | 24 + Docs/types/ChainLegs.html | 26 + Docs/types/ChainLightningScroll.html | 14 + Docs/types/ChainLightningSpell.html | 15 + Docs/types/ChampionAltar.html | 14 + Docs/types/ChampionPlatform.html | 15 + Docs/types/ChampionSkull.html | 15 + Docs/types/ChampionSkullBrazier.html | 21 + Docs/types/ChampionSkullPlatform.html | 16 + Docs/types/ChampionSkullType.html | 15 + Docs/types/ChampionSpawn.html | 61 + Docs/types/ChampionSpawnInfo.html | 16 + Docs/types/ChampionSpawnRegion.html | 14 + Docs/types/ChampionSpawnType.html | 18 + Docs/types/ChampionTitleInfo.html | 33 + Docs/types/ChangeCharacter.html | 10 + Docs/types/ChangeCombatant.html | 10 + Docs/types/ChangeHairHueEntry.html | 13 + Docs/types/ChangeHairHueGump.html | 11 + Docs/types/ChangeHairstyleEntry.html | 14 + Docs/types/ChangeHairstyleGump.html | 11 + Docs/types/ChangeProfileRequestEventArgs.html | 13 + .../ChangeProfileRequestEventHandler.html | 13 + Docs/types/ChangeRumorKeywordPrompt.html | 12 + Docs/types/ChangeRumorMessagePrompt.html | 12 + Docs/types/ChangeTipMessagePrompt.html | 12 + Docs/types/ChangeUpdateRange.html | 11 + Docs/types/Channel.html | 62 + Docs/types/ChaosDaemon.html | 15 + Docs/types/ChaosDragoon.html | 26 + Docs/types/ChaosDragoonElite.html | 26 + Docs/types/ChaosGuard.html | 18 + Docs/types/ChaosShield.html | 25 + Docs/types/CharacterCreatedEventArgs.html | 29 + Docs/types/CharacterCreatedEventHandler.html | 13 + Docs/types/CharacterCreation.html | 39 + Docs/types/CharacterList.html | 11 + Docs/types/CharacterListFlags.html | 33 + Docs/types/CharacterListOld.html | 10 + Docs/types/CharacterListUpdate.html | 10 + Docs/types/CharacterPlinthGump.html | 11 + Docs/types/CharacterStatue.html | 39 + Docs/types/CharacterStatueDeed.html | 20 + Docs/types/CharacterStatueGump.html | 16 + Docs/types/CharacterStatueMaker.html | 20 + Docs/types/CharacterStatuePlinth.html | 22 + Docs/types/CharacterStatueTarget.html | 13 + Docs/types/ChargerOfTheFallen.html | 15 + Docs/types/Chart.html | 18 + Docs/types/ChartItem.html | 17 + Docs/types/ChartItemCollection.html | 19 + Docs/types/ChartItemCollectionEnumerator.html | 14 + Docs/types/ChartItemsCollection.html | 15 + Docs/types/ChartRenderer.html | 15 + Docs/types/ChatActionHandler.html | 13 + Docs/types/ChatActionHandlers.html | 40 + Docs/types/ChatCommand.html | 18 + Docs/types/ChatMessagePacket.html | 10 + Docs/types/ChatRequestEventArgs.html | 11 + Docs/types/ChatRequestEventHandler.html | 13 + Docs/types/ChatSystem.html | 18 + Docs/types/ChatUser.html | 39 + Docs/types/CheckItemGroup.html | 13 + Docs/types/CheckSlayerResult.html | 12 + Docs/types/CheckerBoard.html | 15 + Docs/types/Checkers.html | 13 + Docs/types/Checkers2.html | 13 + Docs/types/CheesePizza.html | 14 + Docs/types/CheeseSlice.html | 15 + Docs/types/CheeseWedge.html | 15 + Docs/types/CheeseWheel.html | 15 + Docs/types/CherryArmoire.html | 13 + Docs/types/CherryBlossomTreeAddon.html | 14 + Docs/types/CherryBlossomTreeDeed.html | 15 + Docs/types/CherryBlossomTrunkAddon.html | 14 + Docs/types/CherryBlossomTrunkDeed.html | 15 + Docs/types/Chessboard.html | 15 + Docs/types/Chessmen.html | 13 + Docs/types/Chessmen2.html | 13 + Docs/types/Chessmen3.html | 13 + Docs/types/ChestOfHeirlooms.html | 14 + Docs/types/Chicken.html | 17 + Docs/types/ChickenLeg.html | 14 + Docs/types/ChildNode.html | 14 + Docs/types/ChildrenTalesVol2.html | 14 + Docs/types/ChiselsNorth.html | 13 + Docs/types/ChiselsWest.html | 13 + Docs/types/Chunk.html | 14 + Docs/types/Chyloth.html | 27 + Docs/types/ChylothPartyGump.html | 11 + Docs/types/ChylothShroud.html | 13 + Docs/types/ChylothStaff.html | 14 + Docs/types/CinnamonFancyRugAddon.html | 14 + Docs/types/CinnamonFancyRugDeed.html | 15 + Docs/types/CirclePoint.html | 13 + Docs/types/Circlet.html | 26 + Docs/types/Citrine.html | 15 + Docs/types/CityInfo.html | 21 + Docs/types/CityMap.html | 15 + Docs/types/ClaimAllEntry.html | 11 + Docs/types/ClaimListGump.html | 11 + Docs/types/CleanseByFireSpell.html | 18 + Docs/types/Cleanup.html | 13 + Docs/types/ClearWeaponAbility.html | 10 + Docs/types/ClearanceException.html | 13 + Docs/types/Cleaver.html | 27 + Docs/types/ClientFlags.html | 19 + Docs/types/ClientGump.html | 15 + Docs/types/ClientTarget.html | 11 + Docs/types/ClientType.html | 13 + Docs/types/ClientVerification.html | 19 + Docs/types/ClientVersion.html | 25 + Docs/types/ClientVersionReceivedArgs.html | 12 + Docs/types/ClientVersionReceivedHandler.html | 13 + Docs/types/ClientVersionReq.html | 10 + Docs/types/Cloak.html | 21 + Docs/types/Clock.html | 24 + Docs/types/ClockFrame.html | 14 + Docs/types/ClockLeft.html | 13 + Docs/types/ClockParts.html | 14 + Docs/types/ClockRight.html | 13 + Docs/types/ClockworkAssembly.html | 15 + Docs/types/Clone.html | 22 + Docs/types/CloneAI.html | 12 + Docs/types/CloseGump.html | 10 + Docs/types/CloseHelm.html | 24 + Docs/types/CloseSecureTrade.html | 10 + Docs/types/CloseTimer.html | 11 + Docs/types/CloseWoundsSpell.html | 18 + Docs/types/ClosedBarrel.html | 14 + Docs/types/Cloth.html | 20 + Docs/types/ClothNinjaHood.html | 22 + Docs/types/ClothNinjaJacket.html | 14 + Docs/types/ClothingBlessDeed.html | 16 + Docs/types/ClothingBlessTarget.html | 11 + Docs/types/ClothingQuality.html | 12 + Docs/types/Club.html | 27 + Docs/types/ClumsyScroll.html | 14 + Docs/types/ClumsySpell.html | 14 + Docs/types/ClumsyWand.html | 14 + Docs/types/CoMWarHorse.html | 13 + Docs/types/CoOwnerTarget.html | 11 + Docs/types/Coal.html | 14 + Docs/types/Cobbler.html | 16 + Docs/types/CobblestonesFloor.html | 13 + Docs/types/Coconut.html | 14 + Docs/types/CocoonArtifact.html | 14 + Docs/types/ColdBlood.html | 17 + Docs/types/ColdForgedBlade.html | 15 + Docs/types/CollectBonesObjective.html | 15 + Docs/types/CollectGoldPrompt.html | 13 + Docs/types/CollectRentEntry.html | 11 + Docs/types/CollectorQuest.html | 19 + Docs/types/ColoredAnvil.html | 14 + Docs/types/ColumnInfo.html | 10 + Docs/types/CombatTimer.html | 11 + Docs/types/ComboEntry.html | 15 + Docs/types/CommandEntry.html | 14 + Docs/types/CommandEntrySorter.html | 11 + Docs/types/CommandEventArgs.html | 20 + Docs/types/CommandEventHandler.html | 13 + Docs/types/CommandHandlers.html | 44 + Docs/types/CommandInfoGump.html | 13 + Docs/types/CommandListGump.html | 11 + Docs/types/CommandLogging.html | 20 + Docs/types/CommandPropertyAttribute.html | 15 + Docs/types/CommandSupport.html | 23 + Docs/types/CommandSystem.html | 16 + Docs/types/CommodityDeed.html | 22 + Docs/types/CommodityDeedBox.html | 18 + Docs/types/CompactInfo.html | 10 + Docs/types/ComparisonCondition.html | 13 + Docs/types/ComparisonOperator.html | 15 + Docs/types/CompassionVirtue.html | 13 + Docs/types/Compiler.html | 13 + Docs/types/ComponentVerification.html | 17 + Docs/types/CompositeBow.html | 31 + Docs/types/Compression.html | 14 + Docs/types/Compressor32.html | 18 + Docs/types/Compressor64.html | 18 + Docs/types/CompressorUnix32.html | 18 + Docs/types/CompressorUnix64.html | 18 + Docs/types/ConcussionBlow.html | 12 + Docs/types/ConditionCommand.html | 11 + Docs/types/ConditionalCompiler.html | 10 + Docs/types/Confidence.html | 22 + Docs/types/Config.html | 11 + Docs/types/ConfirmBreakCrystalGump.html | 12 + Docs/types/ConfirmCommitGump.html | 11 + Docs/types/ConfirmDryDockGump.html | 11 + Docs/types/ConfirmGump.html | 12 + Docs/types/ConfirmHeritageGump.html | 12 + Docs/types/ConfirmHouseResize.html | 11 + Docs/types/ConfirmReleaseGump.html | 11 + Docs/types/ConfirmRemovalGump.html | 11 + Docs/types/ConfirmSkillGump.html | 11 + Docs/types/ConfirmTransferGump.html | 11 + Docs/types/ConfirmationMoongate.html | 23 + Docs/types/ConflagrationPotion.html | 16 + Docs/types/ConfusionBlastPotion.html | 15 + Docs/types/ConnectedEventArgs.html | 11 + Docs/types/ConnectedEventHandler.html | 13 + Docs/types/ConsecrateWeaponSpell.html | 18 + Docs/types/ConsoleData.html | 11 + Docs/types/ConsoleEventHandler.html | 13 + Docs/types/ConsoleEventType.html | 14 + Docs/types/ConstructCallback.html | 13 + Docs/types/ConstructableAttribute.html | 12 + Docs/types/ConsumableEntry.html | 9 + Docs/types/ConsumeType.html | 12 + Docs/types/Consumer.html | 12 + Docs/types/ContainedCommandImplementor.html | 12 + Docs/types/ContainedMenu.html | 12 + Docs/types/Container.html | 109 + Docs/types/ContainerContent.html | 10 + Docs/types/ContainerContent6017.html | 10 + Docs/types/ContainerContentUpdate.html | 10 + Docs/types/ContainerContentUpdate6017.html | 10 + Docs/types/ContainerData.html | 15 + Docs/types/ContainerDisplay.html | 10 + Docs/types/ContainerDisplayHS.html | 10 + Docs/types/ContainerSnoopHandler.html | 13 + Docs/types/ContainerTarget.html | 13 + Docs/types/ContestMiniHouse.html | 16 + Docs/types/ContestMiniHouseDeed.html | 18 + Docs/types/ContextCallback.html | 13 + Docs/types/ContextMenu.html | 13 + Docs/types/ContextMenuEntry.html | 20 + .../ContinueSlayHenchmenConversation.html | 12 + Docs/types/ContractOfEmployment.html | 15 + Docs/types/ContractOptionEntry.html | 11 + Docs/types/ContractOptionsEntry.html | 11 + Docs/types/ContractRenewalPricePrompt.html | 12 + Docs/types/ControlPanel.html | 21 + Docs/types/ConvertPlayers.html | 13 + Docs/types/Cook.html | 17 + Docs/types/CookableFood.html | 18 + Docs/types/CookedBird.html | 14 + Docs/types/CookieMix.html | 14 + Docs/types/Cookies.html | 13 + Docs/types/CopperElemental.html | 19 + Docs/types/CopperGranite.html | 13 + Docs/types/CopperIngot.html | 14 + Docs/types/CopperOre.html | 15 + Docs/types/CopperWire.html | 14 + Docs/types/CopyTarget.html | 11 + Docs/types/Core.html | 58 + Docs/types/Corpse.html | 70 + Docs/types/CorpseContent.html | 10 + Docs/types/CorpseEquip.html | 10 + Docs/types/CorpseFlag.html | 17 + Docs/types/CorpseNameAttribute.html | 11 + Docs/types/CorpseSkinScroll.html | 14 + Docs/types/CorpseSkinSpell.html | 17 + Docs/types/CorpseTarget.html | 11 + Docs/types/Corpser.html | 16 + Docs/types/CorrosiveSlime.html | 17 + Docs/types/CorruptedSoul.html | 19 + Docs/types/Corruption.html | 15 + Docs/types/Cotton.html | 18 + Docs/types/Cougar.html | 17 + Docs/types/CouncilOfMages.html | 11 + Docs/types/CounselorRobe.html | 13 + Docs/types/CountAndTimeStamp.html | 12 + Docs/types/CountCommand.html | 11 + Docs/types/CountSorter.html | 12 + Docs/types/CounterAttack.html | 20 + Docs/types/CoveredChair.html | 13 + Docs/types/Cow.html | 21 + Docs/types/CraftAttributeInfo.html | 33 + Docs/types/CraftContext.html | 18 + Docs/types/CraftECA.html | 12 + Docs/types/CraftGroup.html | 14 + Docs/types/CraftGroupCol.html | 14 + Docs/types/CraftGump.html | 19 + Docs/types/CraftGumpItem.html | 15 + Docs/types/CraftItem.html | 53 + Docs/types/CraftItemCol.html | 15 + Docs/types/CraftItemIDAttribute.html | 11 + Docs/types/CraftMarkOption.html | 12 + Docs/types/CraftPage.html | 12 + Docs/types/CraftRes.html | 18 + Docs/types/CraftResCol.html | 13 + Docs/types/CraftResource.html | 36 + Docs/types/CraftResourceInfo.html | 16 + Docs/types/CraftResourceType.html | 14 + Docs/types/CraftResources.html | 22 + Docs/types/CraftSkill.html | 13 + Docs/types/CraftSkillCol.html | 13 + Docs/types/CraftSubRes.html | 17 + Docs/types/CraftSubResCol.html | 18 + Docs/types/CraftSystem.html | 65 + Docs/types/Crane.html | 20 + Docs/types/CrashGuard.html | 22 + Docs/types/CrashedEventArgs.html | 12 + Docs/types/CrashedEventHandler.html | 13 + Docs/types/CreateCorpseHandler.html | 13 + Docs/types/CreateFoodScroll.html | 14 + Docs/types/CreateFoodSpell.html | 12 + Docs/types/CreateGuildEventArgs.html | 11 + Docs/types/CreateGuildGump.html | 12 + Docs/types/CreateGuildHandler.html | 13 + Docs/types/CreatureBackpack.html | 18 + Docs/types/CreatureGroup.html | 10 + Docs/types/CreepyPortraitAddon.html | 14 + Docs/types/CreepyPortraitComponent.html | 19 + Docs/types/CreepyPortraitDeed.html | 15 + Docs/types/CrescentBlade.html | 28 + Docs/types/CrimsonCincture.html | 14 + Docs/types/Crossbow.html | 30 + Docs/types/CrossbowBolts.html | 13 + Docs/types/CrownOfTalKeesh.html | 22 + Docs/types/CrushingBlow.html | 13 + Docs/types/CrystalCaveBarrier.html | 14 + Docs/types/CrystalElemental.html | 18 + Docs/types/CrystalRechargeInfo.html | 13 + Docs/types/CuSidhe.html | 29 + Docs/types/CuSidheFormTalisman.html | 14 + Docs/types/CunningScroll.html | 14 + Docs/types/CunningSpell.html | 14 + Docs/types/CupsArtifact.html | 14 + Docs/types/CureLevelInfo.html | 12 + Docs/types/CurePotion.html | 14 + Docs/types/CureScroll.html | 14 + Docs/types/CureSpell.html | 14 + Docs/types/CurrentExpansion.html | 11 + Docs/types/CurrentTime.html | 10 + Docs/types/CurseScroll.html | 14 + Docs/types/CurseSpell.html | 16 + Docs/types/CurseWeaponScroll.html | 14 + Docs/types/CurseWeaponSpell.html | 15 + Docs/types/Cursed.html | 18 + Docs/types/CursedSoul.html | 13 + Docs/types/CurtainsAddon.html | 15 + Docs/types/CurtainsComponent.html | 18 + Docs/types/CurtainsDeed.html | 18 + Docs/types/CurvedFlask.html | 13 + Docs/types/CustomCategory.html | 14 + Docs/types/CustomCraft.html | 19 + Docs/types/CustomEnumAttribute.html | 11 + Docs/types/CustomHairstylist.html | 23 + Docs/types/CustomHueGroup.html | 14 + Docs/types/CustomHuePicker.html | 16 + Docs/types/CustomHuePickerCallback.html | 13 + Docs/types/CustomHuePickerGump.html | 14 + Docs/types/CustomItem.html | 20 + Docs/types/Cutlass.html | 29 + Docs/types/Cyclops.html | 16 + Docs/types/DFAlgorithm.html | 11 + Docs/types/Daemon.html | 22 + Docs/types/DaemonArms.html | 27 + Docs/types/DaemonBlood.html | 16 + Docs/types/DaemonBloodChest.html | 14 + Docs/types/DaemonBone.html | 15 + Docs/types/DaemonChest.html | 27 + Docs/types/DaemonGloves.html | 27 + Docs/types/DaemonHelm.html | 26 + Docs/types/DaemonLegs.html | 27 + Docs/types/Dagger.html | 30 + Docs/types/DaimyosHelm.html | 17 + Docs/types/Daisho.html | 29 + Docs/types/DamageEntry.html | 16 + Docs/types/DamagePacket.html | 10 + Docs/types/DamagePacketOld.html | 10 + Docs/types/DamageStore.html | 11 + Docs/types/DamageTimer.html | 12 + Docs/types/DamagedBooksArtifact.html | 14 + Docs/types/DarkFlowerTapestryEastAddon.html | 14 + Docs/types/DarkFlowerTapestryEastDeed.html | 15 + Docs/types/DarkFlowerTapestrySouthAddon.html | 14 + Docs/types/DarkFlowerTapestrySouthDeed.html | 15 + Docs/types/DarkSandstoneFloorN.html | 13 + Docs/types/DarkSandstoneFloorW.html | 13 + Docs/types/DarkSapphire.html | 15 + Docs/types/DarkSource.html | 13 + Docs/types/DarkTidesHorn.html | 14 + Docs/types/DarkTidesQuest.html | 20 + Docs/types/DarkTidesTeleporter.html | 14 + Docs/types/DarkWisp.html | 18 + Docs/types/DarkWolfFamiliar.html | 14 + Docs/types/DarkWoodDoor.html | 13 + Docs/types/DarkWoodGate.html | 13 + Docs/types/DarkWoodHouseDoor.html | 13 + Docs/types/DarkWoodWall.html | 13 + Docs/types/DarkWoodWallTypes.html | 29 + Docs/types/DarkYarn.html | 14 + Docs/types/DarkenedSky.html | 17 + Docs/types/DarknightCreeper.html | 23 + Docs/types/DartBoard.html | 19 + Docs/types/DartBoardEastAddon.html | 14 + Docs/types/DartBoardEastDeed.html | 15 + Docs/types/DartBoardSouthAddon.html | 14 + Docs/types/DartBoardSouthDeed.html | 15 + Docs/types/DartTrapCraft.html | 11 + Docs/types/DataItem.html | 17 + Docs/types/DataPath.html | 12 + Docs/types/DataRecord.html | 18 + Docs/types/DatabaseCommandQueue.html | 14 + Docs/types/Dates.html | 14 + Docs/types/DawnsMusicBox.html | 27 + Docs/types/DawnsMusicBoxGump.html | 11 + Docs/types/DawnsMusicGear.html | 21 + Docs/types/DawnsMusicInfo.html | 12 + Docs/types/DawnsMusicRarity.html | 12 + Docs/types/DeadWood.html | 16 + Docs/types/DeadlyImp.html | 14 + Docs/types/DeadlyPoisonPotion.html | 16 + Docs/types/DeathAdder.html | 14 + Docs/types/DeathAdderCharmTarget.html | 11 + Docs/types/DeathAnimation.html | 10 + Docs/types/DeathMoveResult.html | 12 + Docs/types/DeathRobe.html | 20 + Docs/types/DeathShroud.html | 13 + Docs/types/DeathStatus.html | 11 + Docs/types/DeathStrike.html | 18 + Docs/types/DeathStrikeInfo.html | 10 + Docs/types/DeathwatchBeetle.html | 24 + Docs/types/DeathwatchBeetleHatchling.html | 20 + Docs/types/DecayLevel.html | 18 + Docs/types/DecayTimer.html | 11 + Docs/types/DecayType.html | 13 + Docs/types/DecayedCorpse.html | 20 + Docs/types/DeceitBrazier.html | 25 + Docs/types/DeceitDungeonOfHorror.html | 14 + Docs/types/DeclareFealtyGump.html | 12 + Docs/types/DeclineConversation.html | 12 + Docs/types/DeclineTimer.html | 12 + Docs/types/DecoArrowShafts.html | 13 + Docs/types/DecoBlackmoor.html | 13 + Docs/types/DecoBloodspawn.html | 13 + Docs/types/DecoBottlesOfLiquor.html | 13 + Docs/types/DecoBridle.html | 13 + Docs/types/DecoBridle2.html | 13 + Docs/types/DecoBrimstone.html | 13 + Docs/types/DecoCards5.html | 13 + Docs/types/DecoCrystalBall.html | 13 + Docs/types/DecoDeckOfTarot.html | 13 + Docs/types/DecoDeckOfTarot2.html | 13 + Docs/types/DecoDragonsBlood.html | 13 + Docs/types/DecoDragonsBlood2.html | 13 + Docs/types/DecoEyeOfNewt.html | 13 + Docs/types/DecoFlower.html | 13 + Docs/types/DecoFlower2.html | 13 + Docs/types/DecoFullJar.html | 13 + Docs/types/DecoFullJars3.html | 13 + Docs/types/DecoFullJars4.html | 13 + Docs/types/DecoGarlic.html | 13 + Docs/types/DecoGarlic2.html | 13 + Docs/types/DecoGarlicBulb.html | 13 + Docs/types/DecoGarlicBulb2.html | 13 + Docs/types/DecoGinseng.html | 13 + Docs/types/DecoGinseng2.html | 13 + Docs/types/DecoGinsengRoot.html | 13 + Docs/types/DecoGinsengRoot2.html | 13 + Docs/types/DecoGoldIngot.html | 13 + Docs/types/DecoGoldIngot2.html | 13 + Docs/types/DecoGoldIngots.html | 13 + Docs/types/DecoGoldIngots2.html | 13 + Docs/types/DecoGoldIngots3.html | 13 + Docs/types/DecoGoldIngots4.html | 13 + Docs/types/DecoHay.html | 13 + Docs/types/DecoHay2.html | 13 + Docs/types/DecoHorseDung.html | 13 + Docs/types/DecoIronIngot.html | 13 + Docs/types/DecoIronIngot2.html | 13 + Docs/types/DecoIronIngots.html | 13 + Docs/types/DecoIronIngots2.html | 13 + Docs/types/DecoIronIngots3.html | 13 + Docs/types/DecoIronIngots4.html | 13 + Docs/types/DecoIronIngots5.html | 13 + Docs/types/DecoIronIngots6.html | 13 + Docs/types/DecoMagicalCrystal.html | 13 + Docs/types/DecoMandrake.html | 13 + Docs/types/DecoMandrake2.html | 13 + Docs/types/DecoMandrake3.html | 13 + Docs/types/DecoMandrakeRoot.html | 13 + Docs/types/DecoMandrakeRoot2.html | 13 + Docs/types/DecoNightshade.html | 13 + Docs/types/DecoNightshade2.html | 13 + Docs/types/DecoNightshade3.html | 13 + Docs/types/DecoObsidian.html | 13 + Docs/types/DecoPumice.html | 13 + Docs/types/DecoRock.html | 13 + Docs/types/DecoRock2.html | 13 + Docs/types/DecoRocks.html | 13 + Docs/types/DecoRocks2.html | 13 + Docs/types/DecoRoseOfTrinsic.html | 13 + Docs/types/DecoRoseOfTrinsic2.html | 13 + Docs/types/DecoRoseOfTrinsic3.html | 13 + Docs/types/DecoSilverIngot.html | 13 + Docs/types/DecoSilverIngot2.html | 13 + Docs/types/DecoSilverIngots.html | 13 + Docs/types/DecoSilverIngots2.html | 13 + Docs/types/DecoSilverIngots3.html | 13 + Docs/types/DecoSilverIngots4.html | 13 + Docs/types/DecoSilverIngots5.html | 13 + Docs/types/DecoSpittoon.html | 13 + Docs/types/DecoTarot.html | 13 + Docs/types/DecoTarot2.html | 13 + Docs/types/DecoTarot3.html | 13 + Docs/types/DecoTarot4.html | 13 + Docs/types/DecoTarot5.html | 13 + Docs/types/DecoTarot6.html | 13 + Docs/types/DecoTarot7.html | 13 + Docs/types/DecoTray.html | 13 + Docs/types/DecoTray2.html | 13 + Docs/types/DecoWyrmsHeart.html | 13 + Docs/types/DecodeMapEntry.html | 11 + Docs/types/Decorate.html | 13 + Docs/types/DecorateCommand.html | 13 + Docs/types/DecorateMag.html | 13 + Docs/types/DecorationEntry.html | 13 + Docs/types/DecorationEntryMag.html | 13 + Docs/types/DecorationList.html | 15 + Docs/types/DecorationListMag.html | 15 + Docs/types/DecorativeAxeNorth.html | 13 + Docs/types/DecorativeAxeWest.html | 13 + Docs/types/DecorativeBowNorth.html | 13 + Docs/types/DecorativeBowWest.html | 13 + Docs/types/DecorativeDAxeNorth.html | 17 + Docs/types/DecorativeDAxeWest.html | 17 + Docs/types/DecorativePlateKabuto.html | 24 + Docs/types/DecorativeShield.html | 21 + Docs/types/DecorativeShield1.html | 13 + Docs/types/DecorativeShield10.html | 13 + Docs/types/DecorativeShield11.html | 13 + Docs/types/DecorativeShield2.html | 13 + Docs/types/DecorativeShield3.html | 13 + Docs/types/DecorativeShield4.html | 13 + Docs/types/DecorativeShield5.html | 13 + Docs/types/DecorativeShield6.html | 13 + Docs/types/DecorativeShield7.html | 13 + Docs/types/DecorativeShield8.html | 13 + Docs/types/DecorativeShield9.html | 13 + Docs/types/DecorativeShieldDeed.html | 19 + Docs/types/DecorativeShieldSword1North.html | 13 + Docs/types/DecorativeShieldSword1West.html | 13 + Docs/types/DecorativeShieldSword2North.html | 13 + Docs/types/DecorativeShieldSword2West.html | 13 + Docs/types/DecorativeSwordNorth.html | 17 + Docs/types/DecorativeSwordWest.html | 17 + Docs/types/DecorativeTopiary.html | 15 + Docs/types/DeepSeaSerpent.html | 18 + Docs/types/DeerMask.html | 23 + Docs/types/DefAlchemy.html | 19 + Docs/types/DefBlacksmithy.html | 21 + Docs/types/DefBowFletching.html | 19 + Docs/types/DefCarpentry.html | 18 + Docs/types/DefCartography.html | 18 + Docs/types/DefCooking.html | 19 + Docs/types/DefGlassblowing.html | 19 + Docs/types/DefInscription.html | 21 + Docs/types/DefMasonry.html | 20 + Docs/types/DefTailoring.html | 21 + Docs/types/DefTinkering.html | 21 + Docs/types/DefaultEntry.html | 11 + Docs/types/DefaultSkillMod.html | 11 + Docs/types/DefenseMastery.html | 16 + Docs/types/DefenseMasteryInfo.html | 10 + Docs/types/DefenseTimer.html | 11 + Docs/types/DefensiveSpell.html | 12 + Docs/types/DelayCallTimer.html | 14 + Docs/types/DelayStateCallTimer-T-.html | 14 + Docs/types/DelayStateCallTimer.html | 14 + Docs/types/DelayTimer.html | 11 + Docs/types/DelayedDamageContextWrapper.html | 12 + Docs/types/DeleteCommand.html | 13 + Docs/types/DeleteRequestEventArgs.html | 12 + Docs/types/DeleteRequestEventHandler.html | 13 + Docs/types/DeleteResult.html | 10 + Docs/types/DeleteResultType.html | 15 + Docs/types/DeleteTimer.html | 11 + Docs/types/DeltaState.html | 10 + Docs/types/DemolishEntry.html | 11 + Docs/types/DemonForks.html | 16 + Docs/types/DemonKnight.html | 34 + Docs/types/DemonSkull.html | 13 + Docs/types/DescriptionAttribute.html | 11 + Docs/types/DesertOstard.html | 17 + Docs/types/DesignContext.html | 18 + Docs/types/DesignInsertTarget.html | 12 + Docs/types/DesignState.html | 24 + Docs/types/DesignStateDetailed.html | 19 + Docs/types/DesignStateGeneral.html | 10 + Docs/types/DetectHidden.html | 13 + Docs/types/DetectiveBoots.html | 18 + Docs/types/Devourer.html | 16 + Docs/types/Diamond.html | 15 + Docs/types/DiamondMace.html | 27 + Docs/types/Dices.html | 16 + Docs/types/DigEntry.html | 11 + Docs/types/DigTarget.html | 11 + Docs/types/DigTimer.html | 13 + Docs/types/DimensionalTravel.html | 14 + Docs/types/DireWolf.html | 18 + Docs/types/Direction.html | 20 + Docs/types/DirectionConversation.html | 12 + Docs/types/DirtGreenThornsEffect.html | 12 + Docs/types/DirtPatch.html | 13 + Docs/types/DirtyFrypan.html | 13 + Docs/types/DirtyKettle.html | 13 + Docs/types/DirtyPan.html | 13 + Docs/types/DirtyPot.html | 13 + Docs/types/DirtyRoundPot.html | 13 + Docs/types/DirtySmallPot.html | 13 + Docs/types/DirtySmallRoundPot.html | 13 + Docs/types/DisappearingRaiseSwitch.html | 21 + Docs/types/Disarm.html | 13 + Docs/types/DisarmRequestEventArgs.html | 11 + Docs/types/DisarmRequestEventHandler.html | 13 + Docs/types/DisassembleEntry.html | 11 + Docs/types/DisconnectedEventArgs.html | 11 + Docs/types/DisconnectedEventHandler.html | 13 + Docs/types/Discordance.html | 16 + Docs/types/DiscordanceInfo.html | 12 + Docs/types/DiscordanceTarget.html | 11 + Docs/types/DiseasedBark.html | 15 + Docs/types/DiseasedCat.html | 14 + Docs/types/DisguiseEntry.html | 10 + Docs/types/DisguiseGump.html | 13 + Docs/types/DisguiseKit.html | 16 + Docs/types/DisguisePersistance.html | 16 + Docs/types/DisguiseTimers.html | 19 + Docs/types/Dismount.html | 13 + Docs/types/DismountCommand.html | 11 + Docs/types/DismountTarget.html | 11 + Docs/types/DispelEvilSpell.html | 19 + Docs/types/DispelFieldScroll.html | 14 + Docs/types/DispelFieldSpell.html | 14 + Docs/types/DispelScroll.html | 14 + Docs/types/DispelSpell.html | 13 + Docs/types/DispellableAttribute.html | 10 + Docs/types/DispellableFieldAttribute.html | 10 + Docs/types/DisplayBuyList.html | 10 + Docs/types/DisplayBuyListHS.html | 10 + Docs/types/DisplayCache.html | 17 + Docs/types/DisplayContextMenu.html | 10 + Docs/types/DisplayEquipmentInfo.html | 10 + Docs/types/DisplayGump.html | 10 + Docs/types/DisplayGumpFast.html | 19 + Docs/types/DisplayGumpPacked.html | 20 + Docs/types/DisplayHelpTopic.html | 10 + Docs/types/DisplayHuePicker.html | 10 + Docs/types/DisplayItemListMenu.html | 10 + Docs/types/DisplayPaperdoll.html | 10 + Docs/types/DisplayProfile.html | 10 + Docs/types/DisplayQuestionMenu.html | 10 + Docs/types/DisplaySecureTrade.html | 10 + Docs/types/DisplaySignGump.html | 10 + Docs/types/DisplaySpellbook.html | 10 + Docs/types/DisplaySpellbookHS.html | 10 + Docs/types/Disrobe.html | 12 + Docs/types/DistinctCompiler.html | 11 + Docs/types/DistinctExtension.html | 16 + Docs/types/DisturbType.html | 15 + Docs/types/DisturbingPortraitAddon.html | 14 + Docs/types/DisturbingPortraitComponent.html | 17 + Docs/types/DisturbingPortraitDeed.html | 15 + Docs/types/DiversityOfOurLand.html | 14 + Docs/types/DivineCountenance.html | 21 + Docs/types/DivineFurySpell.html | 19 + Docs/types/DjinnisRing.html | 16 + Docs/types/DoEffect_Callback.html | 13 + Docs/types/DocCommandEntry.html | 15 + Docs/types/Docs.html | 58 + Docs/types/Dog.html | 16 + Docs/types/Dolphin.html | 17 + Docs/types/DolphinLeftArtifact.html | 14 + Docs/types/DolphinRightArtifact.html | 14 + Docs/types/DontOfferConversation.html | 12 + Docs/types/DoorFacing.html | 21 + Docs/types/DoorGenerator.html | 22 + Docs/types/DoorInfo.html | 10 + Docs/types/Doppleganger.html | 16 + Docs/types/DoubleAxe.html | 27 + Docs/types/DoubleBladedStaff.html | 26 + Docs/types/DoubleShot.html | 16 + Docs/types/DoubleStrike.html | 13 + Docs/types/Doublet.html | 14 + Docs/types/Dough.html | 14 + Docs/types/DovetailSaw.html | 15 + Docs/types/DragEffect.html | 10 + Docs/types/Dragon.html | 25 + Docs/types/DragonArms.html | 26 + Docs/types/DragonBardingDeed.html | 21 + Docs/types/DragonChest.html | 26 + Docs/types/DragonGloves.html | 26 + Docs/types/DragonHelm.html | 27 + Docs/types/DragonLegs.html | 26 + Docs/types/DragonNunchaku.html | 16 + Docs/types/DrainTimer.html | 11 + Docs/types/Drake.html | 23 + Docs/types/DrakovsJournal.html | 14 + Docs/types/DrawKnife.html | 15 + Docs/types/Drawer.html | 13 + Docs/types/DreadHornMane.html | 15 + Docs/types/DreadPirateHat.html | 18 + Docs/types/DreadSpider.html | 17 + Docs/types/Dressform.html | 13 + Docs/types/DriedHerbs.html | 14 + Docs/types/DriedOnions.html | 14 + Docs/types/Drums.html | 13 + Docs/types/DryDockResult.html | 17 + Docs/types/Dryad.html | 24 + Docs/types/DryadAllureScroll.html | 14 + Docs/types/DryadAppleConversation.html | 12 + Docs/types/DryadConversation.html | 12 + Docs/types/DualSaveStrategy.html | 13 + Docs/types/DualWield.html | 15 + Docs/types/DualWieldTimer.html | 12 + Docs/types/DullCopperElemental.html | 18 + Docs/types/DullCopperGranite.html | 13 + Docs/types/DullCopperIngot.html | 14 + Docs/types/DullCopperOre.html | 15 + Docs/types/Dummy.html | 18 + Docs/types/DummyAssassin.html | 13 + Docs/types/DummyFence.html | 13 + Docs/types/DummyHealer.html | 13 + Docs/types/DummyMace.html | 13 + Docs/types/DummyNox.html | 13 + Docs/types/DummyStun.html | 13 + Docs/types/DummySuper.html | 13 + Docs/types/DummySword.html | 13 + Docs/types/DummyTheif.html | 13 + Docs/types/DungeonRegion.html | 16 + Docs/types/Dupe.html | 15 + Docs/types/DupeTarget.html | 11 + Docs/types/DupreSuit.html | 13 + Docs/types/DupresShield.html | 23 + .../DuringFungiGatheringConversation.html | 12 + .../types/DuringFungiProcessConversation.html | 12 + .../DuringKillInfiltratorsConversation.html | 12 + Docs/types/DuringKillQueensConversation.html | 12 + .../DuringWaterGatheringConversation.html | 12 + Docs/types/DyeTub.html | 28 + Docs/types/Dyes.html | 15 + Docs/types/DynamicFlipingAttribute.html | 10 + Docs/types/DynamicFurniture.html | 12 + Docs/types/DynamicTeleporter.html | 19 + Docs/types/ECEffectType.html | 14 + Docs/types/Eagle.html | 17 + Docs/types/EarOfCorn.html | 14 + Docs/types/EarnGiftsConversation.html | 12 + Docs/types/EarnLessGiftsConversation.html | 12 + Docs/types/EarringBoxSet.html | 13 + Docs/types/EarringsOfProtection.html | 20 + Docs/types/EarthElemental.html | 18 + Docs/types/EarthElementalSpell.html | 13 + Docs/types/EarthquakeScroll.html | 14 + Docs/types/EarthquakeSpell.html | 13 + Docs/types/Easle.html | 13 + Docs/types/EasterEggs.html | 15 + Docs/types/EatEntry.html | 11 + Docs/types/EcruCitrine.html | 15 + Docs/types/EditEntry.html | 11 + Docs/types/EditSkillGump.html | 11 + Docs/types/EffectController.html | 48 + Docs/types/EffectItem.html | 17 + Docs/types/EffectLayer.html | 16 + Docs/types/EffectTimer.html | 11 + Docs/types/EffectTriggerType.html | 13 + Docs/types/EffectType.html | 13 + Docs/types/Effects.html | 37 + Docs/types/Efreet.html | 15 + Docs/types/EggBomb.html | 15 + Docs/types/EggCaseArtifact.html | 14 + Docs/types/Eggs.html | 15 + Docs/types/Eggshells.html | 13 + Docs/types/EjectPlayerEntry.html | 11 + Docs/types/ElderGazer.html | 15 + Docs/types/Election.html | 29 + Docs/types/ElectionGump.html | 11 + Docs/types/ElectionManagementGump.html | 16 + Docs/types/ElectionState.html | 12 + Docs/types/ElegantArmoire.html | 13 + Docs/types/ElegantLowTable.html | 13 + Docs/types/Elf.html | 18 + Docs/types/EliteNinja.html | 18 + Docs/types/ElvenBedEastAddon.html | 14 + Docs/types/ElvenBedEastDeed.html | 15 + Docs/types/ElvenBedSouthAddon.html | 14 + Docs/types/ElvenBedSouthDeed.html | 15 + Docs/types/ElvenBoots.html | 17 + Docs/types/ElvenCompositeLongbow.html | 32 + Docs/types/ElvenDarkShirt.html | 15 + Docs/types/ElvenDresserEastAddon.html | 14 + Docs/types/ElvenDresserEastDeed.html | 15 + Docs/types/ElvenDresserSouthAddon.html | 14 + Docs/types/ElvenDresserSouthDeed.html | 15 + Docs/types/ElvenForgeAddon.html | 14 + Docs/types/ElvenForgeDeed.html | 15 + Docs/types/ElvenGlasses.html | 33 + Docs/types/ElvenLoveseatEastAddon.html | 14 + Docs/types/ElvenLoveseatEastDeed.html | 15 + Docs/types/ElvenLoveseatSouthAddon.html | 14 + Docs/types/ElvenLoveseatSouthDeed.html | 15 + Docs/types/ElvenMachete.html | 29 + Docs/types/ElvenPants.html | 15 + Docs/types/ElvenQuiver.html | 15 + Docs/types/ElvenReadingChair.html | 13 + Docs/types/ElvenShirt.html | 15 + Docs/types/ElvenSpellblade.html | 28 + Docs/types/ElvenSpinningwheelEastAddon.html | 19 + Docs/types/ElvenSpinningwheelEastDeed.html | 15 + Docs/types/ElvenSpinningwheelSouthAddon.html | 19 + Docs/types/ElvenSpinningwheelSouthDeed.html | 15 + Docs/types/ElvenStoveEastAddon.html | 14 + Docs/types/ElvenStoveEastDeed.html | 15 + Docs/types/ElvenStoveSouthAddon.html | 14 + Docs/types/ElvenStoveSouthDeed.html | 15 + Docs/types/ElvenWashBasinEastAddon.html | 14 + Docs/types/ElvenWashBasinEastDeed.html | 15 + Docs/types/ElvenWashBasinSouthAddon.html | 14 + Docs/types/ElvenWashBasinSouthDeed.html | 15 + .../ElwoodDuringAutograph1Conversation.html | 12 + .../ElwoodDuringAutograph2Conversation.html | 12 + .../ElwoodDuringAutograph3Conversation.html | 12 + Docs/types/ElwoodDuringFishConversation.html | 12 + .../ElwoodDuringPainting1Conversation.html | 12 + .../ElwoodDuringPainting2Conversation.html | 12 + Docs/types/ElwoodDuringToys1Conversation.html | 12 + Docs/types/ElwoodDuringToys2Conversation.html | 12 + Docs/types/ElwoodDuringToys3Conversation.html | 12 + Docs/types/ElwoodMcCarrin.html | 17 + Docs/types/Email.html | 15 + Docs/types/EmbroideredOakLeafCloak.html | 17 + Docs/types/Emerald.html | 15 + Docs/types/Emino.html | 19 + Docs/types/EminosKatana.html | 15 + Docs/types/EminosKatanaChest.html | 20 + Docs/types/EminosUndertakingQuest.html | 23 + Docs/types/EmptyBentoBox.html | 13 + Docs/types/EmptyBookcase.html | 13 + Docs/types/EmptyCurvedFlaskE.html | 13 + Docs/types/EmptyCurvedFlaskW.html | 13 + Docs/types/EmptyJar.html | 13 + Docs/types/EmptyJars.html | 13 + Docs/types/EmptyJars2.html | 13 + Docs/types/EmptyJars3.html | 13 + Docs/types/EmptyJars4.html | 13 + Docs/types/EmptyPewterBowl.html | 13 + Docs/types/EmptyPewterTub.html | 13 + Docs/types/EmptyRibbedFlask.html | 13 + Docs/types/EmptyTheBowlGump.html | 13 + Docs/types/EmptyTimer.html | 11 + Docs/types/EmptyToolKit.html | 13 + Docs/types/EmptyToolKit2.html | 13 + Docs/types/EmptyVial.html | 13 + Docs/types/EmptyVialsWRack.html | 13 + Docs/types/EmptyWoodenBowl.html | 13 + Docs/types/EmptyWoodenTub.html | 13 + Docs/types/EnchantedPaints.html | 16 + Docs/types/EnchantedSextant.html | 15 + Docs/types/EnchantedSwitch.html | 14 + Docs/types/EnchantedTitanLegBone.html | 16 + Docs/types/EncodedPacketHandler.html | 13 + Docs/types/EncodedReader.html | 16 + Docs/types/End2Conversation.html | 12 + Docs/types/EndActionTimer.html | 11 + Docs/types/EndConversation.html | 12 + Docs/types/EndHouseCustomization.html | 10 + Docs/types/EndVendorBuy.html | 10 + Docs/types/EndVendorSell.html | 10 + Docs/types/EnemyOfOneSpell.html | 18 + Docs/types/EnergyBoltScroll.html | 14 + Docs/types/EnergyBoltSpell.html | 15 + Docs/types/EnergyFieldScroll.html | 14 + Docs/types/EnergyFieldSpell.html | 14 + Docs/types/EnergyVortex.html | 23 + Docs/types/EnergyVortexScroll.html | 14 + Docs/types/EnergyVortexSpell.html | 15 + Docs/types/Enhance.html | 14 + Docs/types/EnhanceResult.html | 19 + Docs/types/EnhancedBandage.html | 17 + Docs/types/EnragedBlackBear.html | 13 + Docs/types/EnragedEagle.html | 13 + Docs/types/EnragedHart.html | 16 + Docs/types/EnragedHind.html | 16 + Docs/types/EnragedRabbit.html | 16 + Docs/types/EnshroudedFigure.html | 17 + Docs/types/EnslavedGargoyle.html | 16 + Docs/types/EnterCaveConversation.html | 12 + Docs/types/EnterCaveObjective.html | 13 + Docs/types/Entity.html | 21 + Docs/types/Entry.html | 12 + Docs/types/EquipDetailsMenu.html | 12 + Docs/types/EquipInfoAttribute.html | 13 + Docs/types/EquipMenu.html | 12 + Docs/types/EquipUpdate.html | 10 + Docs/types/EquipedSkillMod.html | 11 + Docs/types/EquipmentInfo.html | 14 + Docs/types/ErrorGump.html | 11 + Docs/types/EscortDestinationInfo.html | 15 + Docs/types/EscortableMage.html | 17 + Docs/types/EssenceOfBattle.html | 14 + Docs/types/EssenceOfWindInfo.html | 14 + Docs/types/EssenceOfWindScroll.html | 14 + Docs/types/EssenceOfWindSpell.html | 19 + Docs/types/EtherealBeetle.html | 14 + Docs/types/EtherealCuSidhe.html | 14 + Docs/types/EtherealHiryu.html | 14 + Docs/types/EtherealHorse.html | 14 + Docs/types/EtherealKirin.html | 14 + Docs/types/EtherealLlama.html | 14 + Docs/types/EtherealMount.html | 36 + Docs/types/EtherealOstard.html | 14 + Docs/types/EtherealReptalon.html | 14 + Docs/types/EtherealRidgeback.html | 14 + Docs/types/EtherealSpell.html | 24 + Docs/types/EtherealSwampDragon.html | 14 + Docs/types/EtherealUnicorn.html | 14 + Docs/types/EtherealVoyageScroll.html | 14 + Docs/types/EtherealVoyageSpell.html | 21 + Docs/types/EtherealWarrior.html | 26 + Docs/types/Ethic.html | 26 + Docs/types/EthicDefinition.html | 15 + Docs/types/EthicalHedonism.html | 14 + Docs/types/EthicsPersistance.html | 16 + Docs/types/Ettin.html | 17 + Docs/types/EvalInt.html | 13 + Docs/types/Evasion.html | 25 + Docs/types/EventLog.html | 15 + Docs/types/EventSink.html | 52 + Docs/types/EventTextWriter.html | 15 + Docs/types/EvilEthic.html | 11 + Docs/types/EvilHealer.html | 19 + Docs/types/EvilIdolSkull.html | 14 + Docs/types/EvilMage.html | 18 + Docs/types/EvilMageLord.html | 18 + Docs/types/EvilOmenScroll.html | 14 + Docs/types/EvilOmenSpell.html | 18 + Docs/types/EvilWanderingHealer.html | 18 + Docs/types/Executioner.html | 15 + Docs/types/ExecutionersAxe.html | 27 + Docs/types/ExecutionersCap.html | 13 + Docs/types/Exiler.html | 17 + Docs/types/ExodusMinion.html | 33 + Docs/types/ExodusOverseer.html | 33 + Docs/types/ExorcismScroll.html | 14 + Docs/types/ExorcismSpell.html | 19 + Docs/types/ExpandFlag.html | 18 + Docs/types/Expansion.html | 18 + Docs/types/ExpansionInfo.html | 23 + Docs/types/ExpireAggressorsTimer.html | 11 + Docs/types/ExpireCombatantTimer.html | 11 + Docs/types/ExpireCriminalTimer.html | 11 + Docs/types/ExpirePolymorphTimer.html | 11 + Docs/types/ExpireTimer.html | 12 + Docs/types/ExplosionPotion.html | 15 + Docs/types/ExplosionScroll.html | 14 + Docs/types/ExplosionSpell.html | 16 + Docs/types/ExplosionTrapCraft.html | 11 + Docs/types/ExportCommand.html | 12 + Docs/types/ExtensionConstructor.html | 13 + Docs/types/ExtensionInfo.html | 17 + Docs/types/Extensions.html | 14 + Docs/types/EyeOfTheTravesty.html | 15 + Docs/types/FKEntry.html | 10 + Docs/types/FabledFishingNet.html | 16 + Docs/types/FacialHairEquipUpdate.html | 10 + Docs/types/FacialHairInfo.html | 13 + Docs/types/FacingGump.html | 12 + Docs/types/Faction.html | 78 + Docs/types/FactionBerserker.html | 14 + Docs/types/FactionBoardVendor.html | 15 + Docs/types/FactionBottleVendor.html | 16 + Docs/types/FactionDeathKnight.html | 14 + Docs/types/FactionDefinition.html | 35 + Docs/types/FactionDragoon.html | 14 + Docs/types/FactionExplosionTrap.html | 23 + Docs/types/FactionExplosionTrapDeed.html | 15 + Docs/types/FactionGasTrap.html | 23 + Docs/types/FactionGasTrapDeed.html | 15 + Docs/types/FactionGuardAI.html | 27 + Docs/types/FactionGump.html | 16 + Docs/types/FactionHenchman.html | 14 + Docs/types/FactionHorseVendor.html | 21 + Docs/types/FactionImbueGump.html | 11 + Docs/types/FactionItem.html | 23 + Docs/types/FactionItemDefinition.html | 13 + Docs/types/FactionKickCommand.html | 11 + Docs/types/FactionKickType.html | 12 + Docs/types/FactionKnight.html | 14 + Docs/types/FactionMercenary.html | 14 + Docs/types/FactionNecromancer.html | 14 + Docs/types/FactionOreVendor.html | 15 + Docs/types/FactionPaladin.html | 14 + Docs/types/FactionPersistance.html | 17 + Docs/types/FactionReagentVendor.html | 16 + Docs/types/FactionSawTrap.html | 23 + Docs/types/FactionSawTrapDeed.html | 15 + Docs/types/FactionSorceress.html | 14 + Docs/types/FactionSpikeTrap.html | 23 + Docs/types/FactionSpikeTrapDeed.html | 15 + Docs/types/FactionState.html | 24 + Docs/types/FactionStone.html | 17 + Docs/types/FactionStoneGump.html | 12 + Docs/types/FactionTrapRemovalKit.html | 17 + Docs/types/FactionWarHorse.html | 17 + Docs/types/FactionWizard.html | 14 + Docs/types/FameEntry.html | 10 + Docs/types/FanDancer.html | 20 + Docs/types/FanNorthArtifact.html | 14 + Docs/types/FanWestArtifact.html | 14 + Docs/types/FancyArmoire.html | 14 + Docs/types/FancyDrawer.html | 13 + Docs/types/FancyDress.html | 14 + Docs/types/FancyElvenTableEastAddon.html | 14 + Docs/types/FancyElvenTableEastDeed.html | 15 + Docs/types/FancyElvenTableSouthAddon.html | 14 + Docs/types/FancyElvenTableSouthDeed.html | 15 + Docs/types/FancyShirt.html | 14 + Docs/types/FancyWindChimes.html | 14 + Docs/types/FancyWoodenChairCushion.html | 13 + Docs/types/FangOfRactus.html | 17 + Docs/types/FarmableCabbage.html | 16 + Docs/types/FarmableCarrot.html | 16 + Docs/types/FarmableCotton.html | 16 + Docs/types/FarmableCrop.html | 19 + Docs/types/FarmableFlax.html | 16 + Docs/types/FarmableLettuce.html | 16 + Docs/types/FarmableOnion.html | 16 + Docs/types/FarmablePumpkin.html | 16 + Docs/types/FarmableTurnip.html | 16 + Docs/types/FarmableWheat.html | 16 + Docs/types/Farmer.html | 18 + Docs/types/FastAStarAlgorithm.html | 18 + Docs/types/FastWalkEventArgs.html | 12 + Docs/types/FastWalkEventHandler.html | 13 + Docs/types/Fastwalk.html | 12 + Docs/types/Feather.html | 17 + Docs/types/FeatheredHat.html | 21 + Docs/types/FeatureFlags.html | 36 + Docs/types/FeebleWand.html | 14 + Docs/types/FeeblemindScroll.html | 14 + Docs/types/FeeblemindSpell.html | 14 + Docs/types/Feint.html | 15 + Docs/types/FeintTimer.html | 12 + Docs/types/FemaleElvenPlateChest.html | 25 + Docs/types/FemaleElvenRobe.html | 16 + Docs/types/FemaleKimono.html | 15 + Docs/types/FemaleLeafChest.html | 27 + Docs/types/FemaleLeatherChest.html | 27 + Docs/types/FemalePlateChest.html | 27 + Docs/types/FemaleStuddedChest.html | 27 + Docs/types/FerelTreefellow.html | 20 + Docs/types/Ferret.html | 20 + Docs/types/FerretFormTalisman.html | 14 + Docs/types/FertileDirt.html | 14 + Docs/types/FestiveCactus.html | 15 + Docs/types/FetchAbraxusScrollObjective.html | 13 + Docs/types/FetidEssence.html | 19 + Docs/types/FewReagentsConversation.html | 12 + Docs/types/FeyLeggings.html | 22 + Docs/types/FieldStoneHouseDeed.html | 16 + Docs/types/FierceDragon.html | 19 + Docs/types/FifthTrialIntroConversation.html | 15 + Docs/types/FifthTrialIntroObjective.html | 15 + Docs/types/FifthTrialReturnConversation.html | 12 + Docs/types/FifthTrialReturnObjective.html | 11 + Docs/types/FightMode.html | 15 + Docs/types/FileCommitCallback.html | 13 + Docs/types/FileLogger.html | 16 + Docs/types/FileOperations.html | 17 + Docs/types/FileQueue.html | 17 + Docs/types/FillableBarrel.html | 14 + Docs/types/FillableBvrge.html | 13 + Docs/types/FillableContainer.html | 32 + Docs/types/FillableContent.html | 17 + Docs/types/FillableContentType.html | 45 + Docs/types/FillableEntry.html | 18 + Docs/types/FillableLargeCrate.html | 13 + Docs/types/FillableMetalBox.html | 13 + Docs/types/FillableMetalChest.html | 13 + Docs/types/FillableMetalGoldenChest.html | 13 + Docs/types/FillableSmallCrate.html | 13 + Docs/types/FillableWoodenBox.html | 13 + Docs/types/FillableWoodenChest.html | 13 + Docs/types/FinanceGump.html | 12 + Docs/types/FindAlbertaObjective.html | 12 + Docs/types/FindApprenticeObjective.html | 12 + Docs/types/FindBankObjective.html | 13 + Docs/types/FindCallingScrollObjective.html | 17 + Docs/types/FindCityOfLightObjective.html | 13 + Docs/types/FindCrystalCaveObjective.html | 12 + Docs/types/FindDryadObjective.html | 12 + Docs/types/FindEminoBeginObjective.html | 12 + Docs/types/FindGabrielObjective.html | 12 + .../FindGrizeldaAboutMurderObjective.html | 12 + Docs/types/FindHaochiObjective.html | 12 + Docs/types/FindHorusAboutRewardObjective.html | 12 + Docs/types/FindIngredientObjective.html | 25 + Docs/types/FindMaabusCorpseObjective.html | 13 + Docs/types/FindMaabusTombObjective.html | 13 + .../FindMardothAboutKronusObjective.html | 12 + .../types/FindMardothAboutVaultObjective.html | 12 + Docs/types/FindMardothEndObjective.html | 15 + Docs/types/FindSchmendrickObjective.html | 13 + Docs/types/FindSheetMusicObjective.html | 17 + Docs/types/FindTomasObjective.html | 12 + .../FindUzeraanAboutReportObjective.html | 12 + Docs/types/FindUzeraanBeginObjective.html | 12 + Docs/types/FindUzeraanFirstTaskObjective.html | 12 + Docs/types/FindVaultOfSecretsObjective.html | 14 + Docs/types/FindWellOfTearsObjective.html | 13 + Docs/types/FindZeefzorpulObjective.html | 17 + Docs/types/FindZoelConversation.html | 12 + Docs/types/FindZoelObjective.html | 12 + Docs/types/FinishedWoodenChest.html | 13 + Docs/types/FireBeetle.html | 28 + Docs/types/FireColumnAddon.html | 15 + Docs/types/FireColumnTrap.html | 22 + Docs/types/FireElemental.html | 18 + Docs/types/FireElementalSpell.html | 13 + Docs/types/FireFieldItem.html | 18 + Docs/types/FireFieldScroll.html | 14 + Docs/types/FireFieldSpell.html | 14 + Docs/types/FireGargoyle.html | 17 + Docs/types/FireHorn.html | 19 + Docs/types/FireRuby.html | 15 + Docs/types/FireSteed.html | 18 + Docs/types/FireballScroll.html | 14 + Docs/types/FireballSpell.html | 15 + Docs/types/FireballWand.html | 14 + Docs/types/Firebomb.html | 18 + Docs/types/FirebombField.html | 15 + Docs/types/Firewall.html | 22 + Docs/types/FirewallCommand.html | 11 + Docs/types/FireworksWand.html | 20 + Docs/types/FirstHit.html | 12 + Docs/types/FirstKillObjective.html | 14 + Docs/types/FirstTrialIntroConversation.html | 12 + Docs/types/FirstTrialIntroObjective.html | 12 + Docs/types/FirstTrialKillConversation.html | 12 + Docs/types/FirstTrialKillObjective.html | 16 + Docs/types/FirstTrialReturnObjective.html | 15 + Docs/types/Fish.html | 15 + Docs/types/FishPearlsObjective.html | 14 + Docs/types/FishSteak.html | 15 + Docs/types/FisherGuildmaster.html | 14 + Docs/types/Fisherman.html | 17 + Docs/types/Fishing.html | 27 + Docs/types/FishingPole.html | 15 + Docs/types/Fists.html | 38 + Docs/types/FixColumnTimer.html | 11 + Docs/types/FlameSpurtTrap.html | 24 + Docs/types/FlameStrikeSpell.html | 15 + Docs/types/FlamestrikeScroll.html | 14 + Docs/types/FlamingHead.html | 21 + Docs/types/FlamingHeadDeed.html | 18 + Docs/types/Flax.html | 17 + Docs/types/FleshGolem.html | 17 + Docs/types/FleshRenderer.html | 28 + Docs/types/FleshRipper.html | 16 + Docs/types/FletcherTools.html | 15 + Docs/types/FlipCommandHandlers.html | 13 + Docs/types/FlipTarget.html | 11 + Docs/types/FlipableAddonAttribute.html | 13 + Docs/types/FlipableAttribute.html | 13 + Docs/types/FloppyHat.html | 21 + Docs/types/FlourMillEastAddon.html | 25 + Docs/types/FlourMillEastDeed.html | 15 + Docs/types/FlourMillSouthAddon.html | 25 + Docs/types/FlourMillSouthDeed.html | 15 + Docs/types/FlourMillStage.html | 12 + Docs/types/FlourSifter.html | 15 + Docs/types/FlowerGarland.html | 21 + Docs/types/FlowersArtifact.html | 14 + Docs/types/FluteOfRenewal.html | 16 + Docs/types/FocusAttack.html | 18 + Docs/types/FoldedSteelGlasses.html | 21 + Docs/types/FollowMessage.html | 10 + Docs/types/Food.html | 22 + Docs/types/FoodDecayTimer.html | 15 + Docs/types/FoodInfo.html | 13 + Docs/types/FoodType.html | 16 + Docs/types/FootStool.html | 13 + Docs/types/ForensicEvaluation.html | 13 + Docs/types/ForensicTarget.html | 11 + Docs/types/ForestOstard.html | 17 + Docs/types/Forge.html | 13 + Docs/types/ForgeAttribute.html | 10 + Docs/types/ForgeComponent.html | 13 + Docs/types/ForgedMetal.html | 13 + Docs/types/Fork.html | 13 + Docs/types/ForkLeft.html | 13 + Docs/types/ForkRight.html | 13 + Docs/types/FormalShirt.html | 14 + Docs/types/FortuneTeller.html | 20 + Docs/types/FoundationType.html | 18 + Docs/types/FountainAddon.html | 14 + Docs/types/FountainDeed.html | 15 + Docs/types/FountainOfLife.html | 28 + Docs/types/FountainOfLifeDeed.html | 17 + Docs/types/FourthTrialCatsConversation.html | 12 + Docs/types/FourthTrialCatsObjective.html | 12 + Docs/types/FourthTrialIntroConversation.html | 12 + Docs/types/FourthTrialIntroObjective.html | 12 + Docs/types/FourthTrialReturnObjective.html | 16 + Docs/types/FreeTimer.html | 11 + Docs/types/FrenchBread.html | 14 + Docs/types/FrenziedOstard.html | 17 + Docs/types/FrenziedWhirlwind.html | 16 + Docs/types/FriedEggs.html | 14 + Docs/types/FriendlyNameAttribute.html | 12 + Docs/types/Froe.html | 15 + Docs/types/FropozJournal.html | 16 + Docs/types/FrostOoze.html | 14 + Docs/types/FrostSpider.html | 16 + Docs/types/FrostTroll.html | 16 + Docs/types/Frostbringer.html | 18 + Docs/types/FrostwoodBoard.html | 14 + Docs/types/FrostwoodLog.html | 15 + Docs/types/FrozenTimer.html | 11 + Docs/types/FruitBasket.html | 14 + Docs/types/FruitPie.html | 14 + Docs/types/Fukiya.html | 30 + Docs/types/FukiyaDarts.html | 20 + Docs/types/FullApron.html | 14 + Docs/types/FullBackpackConversation.html | 12 + Docs/types/FullBookcase.html | 13 + Docs/types/FullEndConversation.html | 14 + Docs/types/FullVialsWRack.html | 13 + Docs/types/FurBoots.html | 15 + Docs/types/FurCape.html | 14 + Docs/types/FurSarong.html | 14 + Docs/types/FurnitureAttribute.html | 11 + Docs/types/FurnitureDyeTub.html | 21 + Docs/types/FurnitureTimer.html | 11 + Docs/types/FurrowsGreenThornsEffect.html | 11 + Docs/types/Furtrader.html | 15 + Docs/types/Futon.html | 14 + Docs/types/GMItemPacket.html | 10 + Docs/types/GMRobe.html | 13 + Docs/types/GQCount.html | 10 + Docs/types/GQRequest.html | 10 + Docs/types/GabrielAutographConversation.html | 12 + Docs/types/GabrielIgnoreConversation.html | 12 + .../GabrielNoSheetMusicConversation.html | 12 + Docs/types/GabrielPiete.html | 17 + Docs/types/GabrielSheetMusicConversation.html | 12 + .../types/GainInnInformationConversation.html | 12 + Docs/types/GainInnInformationObjective.html | 13 + Docs/types/GainKarmaConversation.html | 15 + Docs/types/Gaman.html | 21 + Docs/types/GamblingStone.html | 18 + Docs/types/GameGump.html | 13 + Docs/types/GameLoginEventArgs.html | 15 + Docs/types/GameLoginEventHandler.html | 13 + Docs/types/Gargoyle.html | 16 + Docs/types/GargoyleDestroyer.html | 19 + Docs/types/GargoyleEnforcer.html | 16 + Docs/types/GargoylesPickaxe.html | 30 + Docs/types/Garlic.html | 16 + Docs/types/GasTrap.html | 24 + Docs/types/GasTrapType.html | 12 + Docs/types/GateTravelScroll.html | 14 + Docs/types/GateTravelSpell.html | 17 + Docs/types/GatherFungiConversation.html | 12 + Docs/types/GatherFungiObjective.html | 12 + Docs/types/GatherWaterConversation.html | 12 + Docs/types/GatherWaterObjective.html | 14 + Docs/types/GauntletRegion.html | 13 + Docs/types/GauntletSpawner.html | 44 + Docs/types/GauntletSpawnerState.html | 12 + Docs/types/GauntletsOfNobility.html | 19 + Docs/types/Gazer.html | 16 + Docs/types/GazerLarva.html | 15 + Docs/types/Gears.html | 14 + Docs/types/GemType.html | 19 + Docs/types/GemmedCirclet.html | 26 + Docs/types/GenKhaldun.html | 19 + Docs/types/GenTeleporter.html | 13 + Docs/types/Generator.html | 15 + Docs/types/GenericBeard.html | 14 + Docs/types/GenericBuyInfo.html | 33 + Docs/types/GenericHair.html | 14 + Docs/types/GenericHouseDoor.html | 14 + Docs/types/GenericReader.html | 52 + Docs/types/GenericSellInfo.html | 19 + Docs/types/GenericWriter.html | 62 + Docs/types/Geometry.html | 19 + Docs/types/GetCommand.html | 11 + Docs/types/GetDaemonBloodObjective.html | 15 + Docs/types/GetDaemonBoneObjective.html | 18 + Docs/types/GetRewardObjective.html | 12 + Docs/types/GetSheetMusicConversation.html | 12 + Docs/types/GetTypeCommand.html | 11 + Docs/types/GhostShipAnchor.html | 14 + Docs/types/Ghoul.html | 17 + Docs/types/GiantBlackWidow.html | 17 + Docs/types/GiantIceWorm.html | 17 + Docs/types/GiantRat.html | 17 + Docs/types/GiantSerpent.html | 20 + Docs/types/GiantSpider.html | 18 + Docs/types/GiantSpikeTrap.html | 18 + Docs/types/GiantToad.html | 17 + Docs/types/GiantWeb1.html | 13 + Docs/types/GiantWeb2.html | 13 + Docs/types/GiantWeb3.html | 13 + Docs/types/GiantWeb4.html | 13 + Docs/types/GiantWeb5.html | 13 + Docs/types/GiantWeb6.html | 13 + Docs/types/Gibberling.html | 16 + Docs/types/GiftBox.html | 15 + Docs/types/GiftBoxAngel.html | 14 + Docs/types/GiftBoxCube.html | 14 + Docs/types/GiftBoxCylinder.html | 14 + Docs/types/GiftBoxHues.html | 12 + Docs/types/GiftBoxNeon.html | 13 + Docs/types/GiftBoxOctogon.html | 14 + Docs/types/GiftBoxRectangle.html | 14 + Docs/types/GiftGiver.html | 18 + Docs/types/GiftGiving.html | 13 + Docs/types/GiftOfLifeScroll.html | 14 + Docs/types/GiftOfLifeSpell.html | 22 + Docs/types/GiftOfRenewalInfo.html | 10 + Docs/types/GiftOfRenewalScroll.html | 14 + Docs/types/GiftOfRenewalSpell.html | 17 + Docs/types/GiftResult.html | 11 + Docs/types/GildedDress.html | 14 + Docs/types/GildedWoodenChest.html | 13 + Docs/types/GingerBreadCookie.html | 14 + Docs/types/GingerBreadHouseAddon.html | 14 + Docs/types/GingerBreadHouseDeed.html | 15 + Docs/types/Ginseng.html | 16 + Docs/types/GiveEminoSwordConversation.html | 12 + Docs/types/GiveEminoSwordObjective.html | 12 + Docs/types/GiveZoelNoteConversation.html | 12 + Docs/types/GiveZoelNoteObjective.html | 12 + Docs/types/GlacialStaff.html | 14 + Docs/types/GladiatorsCollar.html | 22 + Docs/types/Glass.html | 13 + Docs/types/GlassBottle.html | 13 + Docs/types/GlassMug.html | 18 + Docs/types/Glassblower.html | 16 + Docs/types/GlassblowingBook.html | 15 + Docs/types/GlobalCommandImplementor.html | 11 + Docs/types/GlobalLightLevel.html | 11 + Docs/types/GlobalTownCrierEntryList.html | 18 + Docs/types/Globe.html | 13 + Docs/types/GlovesOfThePugilist.html | 17 + Docs/types/GlovesOfTheSun.html | 17 + Docs/types/GnarledStaff.html | 27 + Docs/types/GoGump.html | 12 + Docs/types/Goat.html | 16 + Docs/types/Goatee.html | 14 + Docs/types/Goblet.html | 17 + Docs/types/GodModeReply.html | 10 + Docs/types/Gold.html | 19 + Docs/types/GoldBeadNecklace.html | 13 + Docs/types/GoldBracelet.html | 14 + Docs/types/GoldBricks.html | 14 + Docs/types/GoldEarrings.html | 13 + Docs/types/GoldGranite.html | 13 + Docs/types/GoldIngot.html | 14 + Docs/types/GoldNecklace.html | 14 + Docs/types/GoldOre.html | 15 + Docs/types/GoldRing.html | 14 + Docs/types/GoldWire.html | 14 + Docs/types/GoldenDecorativeRugAddon.html | 14 + Docs/types/GoldenDecorativeRugDeed.html | 15 + Docs/types/GoldenElemental.html | 18 + Docs/types/GoldenSkull.html | 14 + Docs/types/Golem.html | 32 + Docs/types/GolemController.html | 18 + Docs/types/GolemCrafter.html | 15 + Docs/types/GoodiesTimer.html | 11 + Docs/types/GoreFiend.html | 16 + Docs/types/Gorilla.html | 16 + Docs/types/GozaMatEastAddon.html | 16 + Docs/types/GozaMatEastDeed.html | 15 + Docs/types/GozaMatSouthAddon.html | 16 + Docs/types/GozaMatSouthDeed.html | 15 + Docs/types/Gram.html | 17 + Docs/types/GrammarOfOrcish.html | 14 + Docs/types/GrandGrimoire.html | 14 + Docs/types/Granite.html | 13 + Docs/types/GrantGuildTitleGump.html | 12 + Docs/types/Grapes.html | 14 + Docs/types/GraveDust.html | 16 + Docs/types/GrayBrickFireplaceEastAddon.html | 14 + Docs/types/GrayBrickFireplaceEastDeed.html | 15 + Docs/types/GrayBrickFireplaceSouthAddon.html | 14 + Docs/types/GrayBrickFireplaceSouthDeed.html | 15 + Docs/types/GreatHart.html | 19 + Docs/types/GreaterAgilityPotion.html | 15 + Docs/types/GreaterConflagrationPotion.html | 16 + Docs/types/GreaterConfusionBlastPotion.html | 15 + Docs/types/GreaterCurePotion.html | 14 + Docs/types/GreaterDragon.html | 27 + Docs/types/GreaterExplosionPotion.html | 15 + Docs/types/GreaterHealPotion.html | 16 + Docs/types/GreaterHealScroll.html | 14 + Docs/types/GreaterHealSpell.html | 14 + Docs/types/GreaterHealWand.html | 14 + Docs/types/GreaterMongbat.html | 17 + Docs/types/GreaterPoisonPotion.html | 16 + Docs/types/GreaterStrengthPotion.html | 15 + Docs/types/GreenAcres.html | 12 + Docs/types/GreenBeaker.html | 13 + Docs/types/GreenBottle.html | 13 + Docs/types/GreenCurvedFlask.html | 13 + Docs/types/GreenDriedFlowers.html | 14 + Docs/types/GreenGourd.html | 14 + Docs/types/GreenMarbleFloor.html | 13 + Docs/types/GreenNinjaQuestTeleporter.html | 16 + Docs/types/GreenScales.html | 14 + Docs/types/GreenStocking.html | 13 + Docs/types/GreenTea.html | 13 + Docs/types/GreenTeaBasket.html | 13 + Docs/types/GreenThorns.html | 17 + Docs/types/GreenThornsEffect.html | 20 + Docs/types/GreenThornsSHTeleporter.html | 17 + Docs/types/GreyFlagstones.html | 13 + Docs/types/GreyMarbleFloor.html | 13 + Docs/types/GreySlateFloor.html | 13 + Docs/types/GreyWolf.html | 17 + Docs/types/GrimmochDrummel.html | 22 + Docs/types/GrimmochJournal1.html | 14 + Docs/types/GrimmochJournal11.html | 14 + Docs/types/GrimmochJournal14.html | 14 + Docs/types/GrimmochJournal17.html | 14 + Docs/types/GrimmochJournal2.html | 14 + Docs/types/GrimmochJournal23.html | 14 + Docs/types/GrimmochJournal3.html | 14 + Docs/types/GrimmochJournal6.html | 14 + Docs/types/GrimmochJournal7.html | 14 + Docs/types/Grizelda.html | 17 + Docs/types/GrizzledBones.html | 15 + Docs/types/GrizzledMare.html | 16 + Docs/types/GrizzledMareStatuette.html | 15 + Docs/types/GrizzlyBear.html | 17 + Docs/types/GroupComparer.html | 11 + Docs/types/GruesomeStandardArtifact.html | 14 + Docs/types/GuantletsOfAnger.html | 22 + Docs/types/GuardAI.html | 14 + Docs/types/GuardDefinition.html | 17 + Docs/types/GuardList.html | 13 + Docs/types/GuardTimer.html | 11 + Docs/types/GuardedRegion.html | 36 + Docs/types/Guardian.html | 13 + Docs/types/GuardianBarrier.html | 14 + Docs/types/GuideToGuilds.html | 14 + Docs/types/Guild.html | 86 + Docs/types/GuildAbbrvPrompt.html | 12 + Docs/types/GuildAcceptWarGump.html | 12 + Docs/types/GuildAdminCandidatesGump.html | 12 + Docs/types/GuildAdvancedSearchGump.html | 12 + Docs/types/GuildCandidatesGump.html | 12 + Docs/types/GuildChangeTypeGump.html | 11 + Docs/types/GuildCharterGump.html | 11 + Docs/types/GuildCharterPrompt.html | 12 + Docs/types/GuildCompareStatus.html | 12 + Docs/types/GuildDeclarePeaceGump.html | 12 + Docs/types/GuildDeclareWarGump.html | 12 + Docs/types/GuildDeclareWarPrompt.html | 12 + Docs/types/GuildDeed.html | 16 + Docs/types/GuildDiplomacyGump.html | 27 + Docs/types/GuildDismissGump.html | 12 + Docs/types/GuildDisplayType.html | 12 + Docs/types/GuildEntry.html | 15 + Docs/types/GuildGump.html | 14 + Docs/types/GuildGumpRequestArgs.html | 11 + Docs/types/GuildGumpRequestHandler.html | 13 + Docs/types/GuildHouse.html | 20 + Docs/types/GuildInfoGump.html | 15 + Docs/types/GuildInvitationRequest.html | 12 + Docs/types/GuildListGump.html | 12 + Docs/types/GuildMemberInfoGump.html | 13 + Docs/types/GuildMobileListGump.html | 12 + Docs/types/GuildNamePrompt.html | 12 + Docs/types/GuildPropsTarget.html | 11 + Docs/types/GuildRecruitTarget.html | 12 + Docs/types/GuildRejectWarGump.html | 12 + Docs/types/GuildRescindDeclarationGump.html | 12 + Docs/types/GuildRosterGump.html | 12 + Docs/types/GuildStatus.html | 12 + Docs/types/GuildTeleporter.html | 17 + Docs/types/GuildTitlePrompt.html | 12 + Docs/types/GuildType.html | 12 + Docs/types/GuildWarAdminGump.html | 11 + Docs/types/GuildWarGump.html | 11 + Docs/types/GuildWebsitePrompt.html | 12 + Docs/types/GuildmasterGump.html | 11 + Docs/types/Guildstone.html | 24 + Docs/types/GuildstoneDeed.html | 17 + Docs/types/Guillotine.html | 17 + Docs/types/GuillotineAddon.html | 18 + Docs/types/GuillotineComponent.html | 14 + Docs/types/GuillotineDeed.html | 15 + Docs/types/Gump.html | 54 + Docs/types/GumpAlphaRegion.html | 16 + Docs/types/GumpBackground.html | 17 + Docs/types/GumpButton.html | 19 + Docs/types/GumpButtonType.html | 11 + Docs/types/GumpCheck.html | 18 + Docs/types/GumpEntry.html | 17 + Docs/types/GumpGroup.html | 13 + Docs/types/GumpHtml.html | 19 + Docs/types/GumpHtmlLocalized.html | 24 + Docs/types/GumpHtmlLocalizedType.html | 12 + Docs/types/GumpImage.html | 18 + Docs/types/GumpImageTileButton.html | 25 + Docs/types/GumpImageTiled.html | 17 + Docs/types/GumpItem.html | 17 + Docs/types/GumpLabel.html | 16 + Docs/types/GumpLabelCropped.html | 18 + Docs/types/GumpPage.html | 13 + Docs/types/GumpProfile.html | 12 + Docs/types/GumpRadio.html | 18 + Docs/types/GumpTextEntry.html | 19 + Docs/types/GumpTextEntryLimited.html | 20 + Docs/types/GumpTimer.html | 11 + Docs/types/GumpTooltip.html | 13 + Docs/types/GumpType.html | 14 + Docs/types/GwennosHarp.html | 16 + Docs/types/Gypsy.html | 15 + Docs/types/GypsyAnimalTrainer.html | 16 + Docs/types/GypsyBanker.html | 17 + Docs/types/GypsyMaiden.html | 17 + Docs/types/HagApprenticeCorpse.html | 18 + Docs/types/HagCauldron.html | 13 + .../HagDuringCorpseSearchConversation.html | 12 + .../types/HagDuringImpSearchConversation.html | 12 + .../HagDuringIngredientsConversation.html | 12 + Docs/types/HagStew.html | 15 + Docs/types/Hair.html | 18 + Docs/types/HairDye.html | 15 + Docs/types/HairDyeEntry.html | 13 + Docs/types/HairDyeGump.html | 12 + Docs/types/HairEquipUpdate.html | 10 + Docs/types/HairInfo.html | 13 + Docs/types/HairOrBeard.html | 12 + Docs/types/HairRestylingDeed.html | 16 + Docs/types/HairStylist.html | 15 + Docs/types/HairstylistBuyGump.html | 11 + Docs/types/HairstylistBuyInfo.html | 17 + Docs/types/Hakama.html | 14 + Docs/types/HakamaShita.html | 14 + Docs/types/Halberd.html | 27 + Docs/types/HalfApron.html | 15 + Docs/types/HalfEmptyJar.html | 13 + Docs/types/HalfEmptyJars.html | 13 + Docs/types/HallwayWalkConversation.html | 12 + Docs/types/HallwayWalkObjective.html | 15 + Docs/types/Ham.html | 14 + Docs/types/Hammer.html | 15 + Docs/types/HammerPick.html | 26 + Docs/types/HangingAxesAddon.html | 14 + Docs/types/HangingAxesDeed.html | 18 + Docs/types/HangingLantern.html | 15 + Docs/types/HangingSkeleton.html | 21 + Docs/types/HangingSkeletonDeed.html | 19 + Docs/types/HangingSwordsAddon.html | 14 + Docs/types/HangingSwordsDeed.html | 18 + Docs/types/HangoverCure.html | 16 + Docs/types/HanzosBow.html | 16 + Docs/types/Haochi.html | 18 + Docs/types/HaochisGuardsman.html | 17 + Docs/types/HaochisKatana.html | 15 + Docs/types/HaochisKatanaGenerator.html | 14 + Docs/types/HaochisTreasureChest.html | 19 + Docs/types/HaochisTrialsQuest.html | 22 + Docs/types/HarborMaster.html | 15 + Docs/types/HardwareInfo.html | 40 + Docs/types/HarmScroll.html | 14 + Docs/types/HarmSpell.html | 16 + Docs/types/HarmWand.html | 14 + Docs/types/Harp.html | 13 + Docs/types/Harpy.html | 23 + Docs/types/Harrower.html | 38 + Docs/types/HarrowerGate.html | 14 + Docs/types/HarrowerTentacles.html | 28 + Docs/types/HarvestBank.html | 16 + Docs/types/HarvestDefinition.html | 47 + Docs/types/HarvestResource.html | 16 + Docs/types/HarvestSoundTimer.html | 11 + Docs/types/HarvestSystem.html | 39 + Docs/types/HarvestTarget.html | 12 + Docs/types/HarvestTimer.html | 11 + Docs/types/HarvestVein.html | 14 + Docs/types/HatOfTheMagi.html | 19 + Docs/types/Hatchet.html | 27 + Docs/types/HaunterMirrorAddon.html | 14 + Docs/types/HaunterMirrorComponent.html | 16 + Docs/types/HaunterMirrorDeed.html | 15 + Docs/types/Head.html | 18 + Docs/types/HeadType.html | 12 + Docs/types/HeadlessOne.html | 16 + Docs/types/HealConversation.html | 11 + Docs/types/HealPotion.html | 16 + Docs/types/HealScroll.html | 14 + Docs/types/HealSpell.html | 14 + Docs/types/HealWand.html | 14 + Docs/types/Healer.html | 19 + Docs/types/HealerAI.html | 17 + Docs/types/HealerCamp.html | 14 + Docs/types/HealerGuildmaster.html | 16 + Docs/types/HealthbarPoison.html | 10 + Docs/types/HealthbarYellow.html | 10 + Docs/types/HeartOfTheLion.html | 21 + Docs/types/HearthOfHomeFire.html | 15 + Docs/types/HearthOfHomeFireDeed.html | 18 + Docs/types/HeartwoodBoard.html | 14 + Docs/types/HeartwoodLog.html | 15 + Docs/types/HeaterShield.html | 23 + Docs/types/HeatingStand.html | 17 + Docs/types/HeaveTimer.html | 11 + Docs/types/HeavyCrossbow.html | 31 + Docs/types/HeavyPlateJingasa.html | 24 + Docs/types/HellCat.html | 19 + Docs/types/HellHound.html | 18 + Docs/types/HellSteed.html | 15 + Docs/types/HelmOfInsight.html | 18 + Docs/types/HelmOfSwiftness.html | 21 + Docs/types/Helmet.html | 24 + Docs/types/HelpGump.html | 15 + Docs/types/HelpInfo.html | 16 + Docs/types/HelpRequestEventArgs.html | 11 + Docs/types/HelpRequestEventHandler.html | 13 + Docs/types/Henchman.html | 14 + Docs/types/Herbalist.html | 17 + Docs/types/HerdingTarget.html | 13 + Docs/types/HeritageToken.html | 16 + Docs/types/HeritageTokenGump.html | 11 + Docs/types/HeroEthic.html | 11 + Docs/types/HiddenFigure.html | 19 + Docs/types/HideChest.html | 27 + Docs/types/HideCommand.html | 11 + Docs/types/HideFemaleChest.html | 28 + Docs/types/HideGloves.html | 27 + Docs/types/HideGorget.html | 27 + Docs/types/HidePants.html | 27 + Docs/types/HidePauldrons.html | 27 + Docs/types/HideType.html | 13 + Docs/types/Hides.html | 15 + Docs/types/Hiding.html | 13 + Docs/types/Hind.html | 19 + Docs/types/Hinge.html | 14 + Docs/types/HintItem.html | 18 + Docs/types/Hiryu.html | 31 + Docs/types/HitLower.html | 17 + Docs/types/HitsTimer.html | 11 + Docs/types/Hold.html | 21 + Docs/types/HolidayBell.html | 18 + Docs/types/HolidayTree.html | 23 + Docs/types/HolidayTreeChoiceGump.html | 11 + Docs/types/HolidayTreeDeed.html | 19 + Docs/types/HolidayTreeType.html | 11 + Docs/types/HollowPrism.html | 14 + Docs/types/HolyBlade.html | 11 + Docs/types/HolyFamiliar.html | 20 + Docs/types/HolyItem.html | 12 + Docs/types/HolyKnightsBreastplate.html | 18 + Docs/types/HolyLightSpell.html | 18 + Docs/types/HolyMage.html | 17 + Docs/types/HolySense.html | 11 + Docs/types/HolyShield.html | 11 + Docs/types/HolySteed.html | 20 + Docs/types/HolySword.html | 16 + Docs/types/HolyWord.html | 11 + Docs/types/HoneydewMelon.html | 14 + Docs/types/HonorCandle.html | 18 + Docs/types/HonorContext.html | 25 + Docs/types/HonorSelf.html | 11 + Docs/types/HonorVirtue.html | 17 + Docs/types/HonorableExecution.html | 20 + Docs/types/HonorableExecutionInfo.html | 14 + Docs/types/HonorableSwords.html | 18 + Docs/types/HoodedShroudOfShadows.html | 15 + Docs/types/HordeMinion.html | 19 + Docs/types/HordeMinionFamiliar.html | 25 + Docs/types/HornOfRetreat.html | 22 + Docs/types/HornOfRetreatMoongate.html | 16 + Docs/types/HornedHides.html | 15 + Docs/types/HornedLeather.html | 14 + Docs/types/HornedTribalMask.html | 23 + Docs/types/HorrificBeastScroll.html | 14 + Docs/types/HorrificBeastSpell.html | 16 + Docs/types/Horse.html | 17 + Docs/types/HorseBreederGump.html | 11 + Docs/types/HorseShoes.html | 13 + Docs/types/Horus.html | 22 + Docs/types/HorusConversation.html | 12 + Docs/types/HorusRewardConversation.html | 12 + Docs/types/Hourglass.html | 13 + Docs/types/HourglassAni.html | 13 + Docs/types/HouseAccessTarget.html | 11 + Docs/types/HouseBanTarget.html | 11 + Docs/types/HouseComparer.html | 11 + Docs/types/HouseDeed.html | 20 + Docs/types/HouseDemolishGump.html | 11 + Docs/types/HouseFoundation.html | 78 + Docs/types/HouseFriendTarget.html | 11 + Docs/types/HouseGump.html | 13 + Docs/types/HouseGumpAOS.html | 26 + Docs/types/HouseGumpPageAOS.html | 27 + Docs/types/HouseKickTarget.html | 11 + Docs/types/HouseLadderAddon.html | 14 + Docs/types/HouseLadderDeed.html | 18 + Docs/types/HouseListGump.html | 11 + Docs/types/HouseOwnerTarget.html | 11 + Docs/types/HousePlacement.html | 11 + Docs/types/HousePlacementCategoryGump.html | 11 + Docs/types/HousePlacementEntry.html | 26 + Docs/types/HousePlacementListGump.html | 11 + Docs/types/HousePlacementResult.html | 18 + Docs/types/HousePlacementTarget.html | 11 + Docs/types/HousePlacementTool.html | 15 + Docs/types/HouseRaffleDeed.html | 21 + Docs/types/HouseRaffleManagementGump.html | 16 + Docs/types/HouseRaffleRegion.html | 12 + Docs/types/HouseRaffleState.html | 12 + Docs/types/HouseRaffleStone.html | 43 + Docs/types/HouseRegion.html | 23 + Docs/types/HouseRemoveGump.html | 11 + Docs/types/HouseSign.html | 27 + Docs/types/HouseTeleporter.html | 20 + Docs/types/HouseTransferGump.html | 11 + Docs/types/HtmlRenderer.html | 24 + Docs/types/HueAttribute.html | 10 + Docs/types/HuePicker.html | 15 + Docs/types/HuedEffect.html | 12 + Docs/types/Human.html | 18 + Docs/types/HungerChangedEventArgs.html | 12 + Docs/types/HungerChangedEventHandler.html | 13 + Docs/types/HuntersHeaddress.html | 18 + Docs/types/IAccount.html | 19 + Docs/types/IAddon.html | 12 + Docs/types/IArcaneEquip.html | 13 + Docs/types/IAxe.html | 11 + Docs/types/IBuyItemInfo.html | 21 + Docs/types/ICarvable.html | 11 + Docs/types/IChopable.html | 11 + Docs/types/ICommodity.html | 12 + Docs/types/ICompressor.html | 14 + Docs/types/ICondition.html | 12 + Docs/types/IConditional.html | 10 + Docs/types/ICraftable.html | 11 + Docs/types/IDWand.html | 15 + Docs/types/IDevourer.html | 11 + Docs/types/IDurability.html | 17 + Docs/types/IDyable.html | 11 + Docs/types/IEntity.html | 15 + Docs/types/IEntityEntry.html | 14 + Docs/types/IFactionItem.html | 11 + Docs/types/IFirewallEntry.html | 11 + Docs/types/IFlourMill.html | 12 + Docs/types/IGumpWriter.html | 19 + Docs/types/IHSFlags.html | 15 + Docs/types/IHasQuantity.html | 11 + Docs/types/IHonorTarget.html | 11 + Docs/types/IHued.html | 11 + Docs/types/ILockable.html | 12 + Docs/types/ILockpickable.html | 16 + Docs/types/ILoom.html | 11 + Docs/types/IMenu.html | 15 + Docs/types/IMount.html | 12 + Docs/types/IMountItem.html | 11 + Docs/types/IMovementImpl.html | 12 + Docs/types/INativeReader.html | 11 + Docs/types/INinjaAmmo.html | 12 + Docs/types/INinjaWeapon.html | 22 + Docs/types/IPFirewallEntry.html | 14 + Docs/types/IPLimiter.html | 12 + Docs/types/IPacketEncoder.html | 11 + Docs/types/IParty.html | 13 + Docs/types/IPoint2D.html | 12 + Docs/types/IPoint3D.html | 11 + Docs/types/IPooledEnumerable.html | 11 + Docs/types/IPooledEnumerator.html | 12 + Docs/types/IRewardItem.html | 11 + Docs/types/IRewardOption.html | 12 + Docs/types/IScissorable.html | 11 + Docs/types/ISecurable.html | 11 + Docs/types/ISerializable.html | 13 + Docs/types/IShipwreckedItem.html | 11 + Docs/types/IShopSellInfo.html | 16 + Docs/types/ISlayer.html | 12 + Docs/types/ISpawnable.html | 14 + Docs/types/ISpawner.html | 14 + Docs/types/ISpell.html | 18 + Docs/types/ISpinningWheel.html | 12 + Docs/types/ITelekinesisable.html | 11 + Docs/types/ITokunoDyable.html | 10 + Docs/types/ITownCrierEntryList.html | 14 + Docs/types/ITransformationSpell.html | 21 + Docs/types/IUsesRemaining.html | 12 + Docs/types/IVendor.html | 15 + Docs/types/IWaterSource.html | 10 + Docs/types/IWeapon.html | 14 + Docs/types/IWearableDurability.html | 11 + Docs/types/IceElemental.html | 15 + Docs/types/IceFiend.html | 16 + Docs/types/IceSerpent.html | 18 + Docs/types/IceSnake.html | 16 + Docs/types/IcicleLargeEast.html | 13 + Docs/types/IcicleLargeSouth.html | 13 + Docs/types/IcicleMedEast.html | 13 + Docs/types/IcicleMedSouth.html | 13 + Docs/types/IcicleSmallEast.html | 13 + Docs/types/IcicleSmallSouth.html | 13 + Docs/types/IcyPatch.html | 21 + Docs/types/IdleTimer.html | 11 + Docs/types/IdolOfTheChampion.html | 16 + Docs/types/IharaSoko.html | 24 + Docs/types/Ilhenir.html | 42 + Docs/types/ImageTileButtonInfo.html | 16 + Docs/types/ImageType.html | 30 + Docs/types/ImageTypeInfo.html | 17 + Docs/types/ImmolatingWeaponScroll.html | 14 + Docs/types/Imp.html | 19 + Docs/types/ImpDeathConversation.html | 15 + Docs/types/Impaler.html | 24 + Docs/types/ImplFlag.html | 18 + Docs/types/Impresario.html | 17 + Docs/types/IncognitoScroll.html | 14 + Docs/types/IncognitoSpell.html | 15 + Docs/types/IncreaseCommand.html | 11 + Docs/types/IndecipherableMap.html | 15 + Docs/types/IndexInfo.html | 9 + Docs/types/InfectiousStrike.html | 13 + Docs/types/InfoField-T-.html | 13 + Docs/types/IngotStone.html | 15 + Docs/types/Ingredient.html | 24 + Docs/types/IngredientInfo.html | 15 + Docs/types/InhumanSpeech.html | 31 + Docs/types/Initializer.html | 12 + Docs/types/InjuredWolf.html | 14 + Docs/types/InnKeeper.html | 16 + Docs/types/InquisitorsResolution.html | 19 + Docs/types/Inscribe.html | 18 + Docs/types/InscribePrompt.html | 12 + Docs/types/Insensitive.html | 15 + Docs/types/Inshave.html | 15 + Docs/types/InstancedItemInfo.html | 12 + Docs/types/InstrumentPickedCallback.html | 13 + Docs/types/InstrumentQuality.html | 12 + Docs/types/InterfaceCommand.html | 11 + Docs/types/InterfaceGump.html | 12 + Docs/types/InterfaceItemGump.html | 13 + Docs/types/InterfaceMobileGump.html | 13 + Docs/types/InteriorDecorator.html | 20 + Docs/types/InternalAccessException.html | 10 + Docs/types/InternalBuyInfo.html | 10 + Docs/types/InternalComparer.html | 11 + Docs/types/InternalEntry.html | 11 + Docs/types/InternalEnumerator.html | 13 + Docs/types/InternalFirstTarget.html | 11 + Docs/types/InternalGump.html | 12 + Docs/types/InternalItem.html | 17 + Docs/types/InternalItem2.html | 16 + Docs/types/InternalPicker.html | 11 + Docs/types/InternalPrompt.html | 12 + Docs/types/InternalSecondTarget.html | 11 + Docs/types/InternalSellInfo.html | 10 + Docs/types/InternalSorter.html | 11 + Docs/types/InternalTarget.html | 12 + Docs/types/InternalTargetDst.html | 13 + Docs/types/InternalTargetPoison.html | 12 + Docs/types/InternalTargetSrc.html | 12 + Docs/types/InternalTimer.html | 11 + Docs/types/InternalizeTimer.html | 11 + Docs/types/InternationalCode.html | 17 + Docs/types/InternationalCodeComparer.html | 11 + Docs/types/InternationalCodeCounter.html | 13 + Docs/types/InterredGrizzle.html | 19 + Docs/types/InvalidAccountAccessLog.html | 15 + Docs/types/InvalidMapEnable.html | 10 + Docs/types/InvisibilityScroll.html | 14 + Docs/types/InvisibilitySpell.html | 16 + Docs/types/IolosLute.html | 16 + Docs/types/IronGate.html | 13 + Docs/types/IronGateShort.html | 13 + Docs/types/IronIngot.html | 14 + Docs/types/IronMaidenAddon.html | 18 + Docs/types/IronMaidenDeed.html | 15 + Docs/types/IronOre.html | 15 + Docs/types/IronWire.html | 14 + Docs/types/IronWorker.html | 17 + Docs/types/IronwoodCrown.html | 19 + Docs/types/Item.html | 259 + Docs/types/ItemBounds.html | 10 + Docs/types/ItemData.html | 21 + Docs/types/ItemDelta.html | 13 + Docs/types/ItemEntry.html | 16 + Docs/types/ItemIdentification.html | 13 + Docs/types/ItemListEntry.html | 14 + Docs/types/ItemListMenu.html | 18 + Docs/types/ItemTileButtonInfo.html | 11 + Docs/types/ItemValue.html | 18 + Docs/types/ItemValueCollection.html | 20 + Docs/types/ItemValueCollectionEnumerator.html | 14 + Docs/types/JackOLantern.html | 17 + Docs/types/JackRabbit.html | 19 + Docs/types/JackalsCollar.html | 19 + Docs/types/JadeStatueMaker.html | 13 + Docs/types/Jail.html | 17 + Docs/types/JarHoney.html | 14 + Docs/types/Jars2.html | 13 + Docs/types/Jars3.html | 13 + Docs/types/Jars4.html | 13 + Docs/types/JedahEntille.html | 17 + Docs/types/JesterHat.html | 21 + Docs/types/JesterHatofChuckles.html | 22 + Docs/types/JesterSuit.html | 14 + Docs/types/JeweledFiligree.html | 14 + Docs/types/Jeweler.html | 15 + Docs/types/JinBaori.html | 14 + Docs/types/JoinStone.html | 17 + Docs/types/JoinStoneGump.html | 11 + Docs/types/JointingPlane.html | 15 + Docs/types/Jug.html | 17 + Docs/types/Juggernaut.html | 26 + Docs/types/JukaBow.html | 20 + Docs/types/JukaLord.html | 23 + Docs/types/JukaMage.html | 23 + Docs/types/JukaWarrior.html | 22 + Docs/types/JusticeVirtue.html | 19 + Docs/types/Jwilson.html | 18 + Docs/types/KaburJournal.html | 16 + Docs/types/Kama.html | 32 + Docs/types/Kamishimo.html | 14 + Docs/types/Kappa.html | 27 + Docs/types/KarmaEntry.html | 10 + Docs/types/Kasa.html | 22 + Docs/types/KasaOfTheRajin.html | 21 + Docs/types/Katana.html | 29 + Docs/types/KazeKemono.html | 17 + Docs/types/Keep.html | 17 + Docs/types/KeepDeed.html | 16 + Docs/types/KeeperOfChivalry.html | 16 + Docs/types/Keg.html | 13 + Docs/types/Key.html | 30 + Docs/types/KeyRing.html | 23 + Docs/types/KeyType.html | 13 + Docs/types/KeywordList.html | 14 + Docs/types/KeywordTeleporter.html | 20 + Docs/types/Keywords.html | 12 + Docs/types/KhaldunPitTeleporter.html | 20 + Docs/types/KhaldunRevenant.html | 29 + Docs/types/KhaldunSummoner.html | 22 + Docs/types/KhaldunZealot.html | 23 + Docs/types/KiAttack.html | 21 + Docs/types/KiAttackInfo.html | 10 + Docs/types/KickCommand.html | 11 + Docs/types/KillCommand.html | 11 + Docs/types/KillHordeMinionsObjective.html | 22 + Docs/types/KillHordeMinionsStep.html | 12 + Docs/types/KillImpsObjective.html | 18 + Docs/types/KillInfiltratorsObjective.html | 16 + Docs/types/KillQueensObjective.html | 16 + Docs/types/Kilt.html | 14 + Docs/types/Kindling.html | 17 + Docs/types/Kirin.html | 26 + Docs/types/Knife.html | 13 + Docs/types/KnifeLeft.html | 13 + Docs/types/KnifeRight.html | 13 + Docs/types/Kraken.html | 15 + Docs/types/KrisnaHair.html | 14 + Docs/types/KronusScroll.html | 17 + Docs/types/KronusScrollBox.html | 14 + Docs/types/Kryss.html | 32 + Docs/types/LOSBlocker.html | 17 + Docs/types/LRReason.html | 15 + Docs/types/LadyOfTheSnow.html | 20 + Docs/types/LadyPortrait1.html | 13 + Docs/types/LadyPortrait2.html | 13 + Docs/types/Lajatang.html | 31 + Docs/types/LambLeg.html | 14 + Docs/types/LampPost1.html | 15 + Docs/types/LampPost2.html | 15 + Docs/types/LampPost3.html | 15 + Docs/types/LampPostArtifact.html | 14 + Docs/types/LampRoomBox.html | 16 + Docs/types/LampRoomKickTimer.html | 11 + Docs/types/LampRoomRegion.html | 16 + Docs/types/LampRoomTeleporter.html | 15 + Docs/types/LampRoomTimer.html | 11 + Docs/types/Lance.html | 32 + Docs/types/LandData.html | 12 + Docs/types/LandTarget.html | 17 + Docs/types/LandTile.html | 15 + Docs/types/LandlordVendorRentalGump.html | 14 + Docs/types/LanguageStatistics.html | 14 + Docs/types/Lantern.html | 16 + Docs/types/LanternOfSouls.html | 14 + Docs/types/LapHarp.html | 14 + Docs/types/LardOfParoxysmus.html | 15 + Docs/types/LargeBOD.html | 30 + Docs/types/LargeBODAcceptGump.html | 12 + Docs/types/LargeBODGump.html | 12 + Docs/types/LargeBODTarget.html | 11 + Docs/types/LargeBagBall.html | 13 + Docs/types/LargeBattleAxe.html | 26 + Docs/types/LargeBedEastAddon.html | 14 + Docs/types/LargeBedEastDeed.html | 15 + Docs/types/LargeBedSouthAddon.html | 14 + Docs/types/LargeBedSouthDeed.html | 15 + Docs/types/LargeBoat.html | 23 + Docs/types/LargeBoatDeed.html | 15 + Docs/types/LargeBulkEntry.html | 39 + Docs/types/LargeCrate.html | 13 + Docs/types/LargeDockedBoat.html | 14 + Docs/types/LargeDockedDragonBoat.html | 14 + Docs/types/LargeDragonBoat.html | 23 + Docs/types/LargeDragonBoatDeed.html | 15 + Docs/types/LargeEmptyFlask.html | 13 + Docs/types/LargeEmptyPot.html | 13 + Docs/types/LargeFishingNetAddon.html | 14 + Docs/types/LargeFishingNetComponent.html | 14 + Docs/types/LargeFishingNetDeed.html | 15 + Docs/types/LargeFlask.html | 13 + Docs/types/LargeForgeEast.html | 17 + Docs/types/LargeForgeEastAddon.html | 14 + Docs/types/LargeForgeEastDeed.html | 15 + Docs/types/LargeForgeSouthAddon.html | 14 + Docs/types/LargeForgeSouthDeed.html | 15 + Docs/types/LargeForgeWest.html | 17 + Docs/types/LargeMarbleDeed.html | 16 + Docs/types/LargeMarbleHouse.html | 19 + Docs/types/LargePainting.html | 13 + Docs/types/LargePatioDeed.html | 16 + Docs/types/LargePatioHouse.html | 19 + Docs/types/LargeSmithBOD.html | 17 + Docs/types/LargeStoneTableEastAddon.html | 16 + Docs/types/LargeStoneTableEastDeed.html | 15 + Docs/types/LargeStoneTableSouthAddon.html | 16 + Docs/types/LargeStoneTableSouthDeed.html | 15 + Docs/types/LargeTable.html | 13 + Docs/types/LargeTailorBOD.html | 17 + Docs/types/LargeVase.html | 13 + Docs/types/LargeVioletFlask.html | 13 + Docs/types/LargeYellowFlask.html | 13 + Docs/types/LastOnComparer.html | 11 + Docs/types/LaunchBrowser.html | 10 + Docs/types/LavaLizard.html | 17 + Docs/types/LavaSerpent.html | 19 + Docs/types/LavaSnake.html | 17 + Docs/types/LavaTile.html | 13 + Docs/types/Layer.html | 42 + Docs/types/LayerComparer.html | 14 + Docs/types/LeafArms.html | 28 + Docs/types/LeafChest.html | 27 + Docs/types/LeafGloves.html | 35 + Docs/types/LeafGorget.html | 27 + Docs/types/LeafLegs.html | 28 + Docs/types/LeafTonlet.html | 27 + Docs/types/Leafblade.html | 27 + Docs/types/Leather.html | 14 + Docs/types/LeatherArms.html | 26 + Docs/types/LeatherBustierArms.html | 27 + Docs/types/LeatherCap.html | 26 + Docs/types/LeatherChest.html | 26 + Docs/types/LeatherDo.html | 26 + Docs/types/LeatherDyeTub.html | 22 + Docs/types/LeatherGloves.html | 34 + Docs/types/LeatherGlovesOfMining.html | 27 + Docs/types/LeatherGorget.html | 27 + Docs/types/LeatherHaidate.html | 26 + Docs/types/LeatherHiroSode.html | 27 + Docs/types/LeatherJingasa.html | 26 + Docs/types/LeatherLegs.html | 27 + Docs/types/LeatherMempo.html | 27 + Docs/types/LeatherNinjaBelt.html | 32 + Docs/types/LeatherNinjaHood.html | 26 + Docs/types/LeatherNinjaJacket.html | 26 + Docs/types/LeatherNinjaMitts.html | 27 + Docs/types/LeatherNinjaPants.html | 26 + Docs/types/LeatherShorts.html | 27 + Docs/types/LeatherSkirt.html | 27 + Docs/types/LeatherSuneate.html | 26 + Docs/types/LeatherTunicArtifact.html | 14 + Docs/types/LeatherWorker.html | 15 + Docs/types/LeaveFactionGump.html | 11 + Docs/types/LeftArm.html | 13 + Docs/types/LeftLeg.html | 13 + Docs/types/LegacyOfTheDreadLord.html | 17 + Docs/types/LeggingsOfBane.html | 18 + Docs/types/LeggingsOfEmbers.html | 21 + Docs/types/LegsOfStability.html | 18 + Docs/types/Lemon.html | 14 + Docs/types/Lemons.html | 14 + Docs/types/LesserCurePotion.html | 14 + Docs/types/LesserExplosionPotion.html | 15 + Docs/types/LesserHealPotion.html | 16 + Docs/types/LesserHiryu.html | 33 + Docs/types/LesserPigmentType.html | 20 + Docs/types/LesserPigmentsOfTokuno.html | 16 + Docs/types/LesserPoisonPotion.html | 16 + Docs/types/Lettuce.html | 14 + Docs/types/LeurociansMempoOfFortune.html | 21 + Docs/types/LeverPuzzleController.html | 48 + Docs/types/LeverPuzzleLever.html | 16 + Docs/types/LeverPuzzleRegion.html | 13 + Docs/types/LeverPuzzleStatue.html | 14 + Docs/types/Leviathan.html | 30 + Docs/types/LibraryBookcase.html | 17 + Docs/types/Lich.html | 19 + Docs/types/LichFormScroll.html | 14 + Docs/types/LichFormSpell.html | 20 + Docs/types/LichLord.html | 19 + .../LieutenantOfTheBritannianRoyalGuard.html | 17 + Docs/types/LifeOfATravellingMinstrel.html | 14 + Docs/types/LiftRej.html | 10 + Docs/types/LightCycle.html | 16 + Docs/types/LightCycleTimer.html | 11 + Docs/types/LightEntry.html | 10 + Docs/types/LightFlowerTapestryEastAddon.html | 14 + Docs/types/LightFlowerTapestryEastDeed.html | 15 + Docs/types/LightFlowerTapestrySouthAddon.html | 14 + Docs/types/LightFlowerTapestrySouthDeed.html | 15 + Docs/types/LightOfTheWinterSolstice.html | 17 + Docs/types/LightOfWayGlasses.html | 21 + Docs/types/LightPlateJingasa.html | 24 + Docs/types/LightSource.html | 13 + Docs/types/LightType.html | 65 + Docs/types/LightWoodDoor.html | 13 + Docs/types/LightWoodGate.html | 13 + Docs/types/LightYarn.html | 14 + Docs/types/LightYarnUnraveled.html | 14 + Docs/types/LightningScroll.html | 14 + Docs/types/LightningSpell.html | 15 + Docs/types/LightningStrike.html | 21 + Docs/types/LightningWand.html | 14 + Docs/types/Lime.html | 14 + Docs/types/Limes.html | 14 + Docs/types/LimitExtension.html | 16 + Docs/types/Listener.html | 19 + Docs/types/Lizardman.html | 19 + Docs/types/LizardmenCamp.html | 19 + Docs/types/Llama.html | 16 + Docs/types/LoadEntry.html | 11 + Docs/types/LocalMap.html | 15 + Docs/types/LocalizedAddonComponent.html | 15 + Docs/types/LocalizedContainerComponent.html | 14 + Docs/types/LocalizedSign.html | 16 + Docs/types/LocalizedStatic.html | 16 + Docs/types/LocationComparer.html | 14 + Docs/types/LocationEffect.html | 10 + Docs/types/LocationParticleEffect.html | 10 + Docs/types/LocationTree.html | 14 + Docs/types/LockKarmaEntry.html | 11 + Docs/types/LockableBarrel.html | 13 + Docs/types/LockableContainer.html | 38 + Docs/types/LockdownTarget.html | 12 + Docs/types/Lockpick.html | 16 + Docs/types/Lockpicks.html | 13 + Docs/types/Log.html | 23 + Docs/types/LogCabin.html | 18 + Docs/types/LogCabinDeed.html | 16 + Docs/types/Login.html | 10 + Docs/types/LoginComplete.html | 10 + Docs/types/LoginConfirm.html | 10 + Docs/types/LoginEventArgs.html | 11 + Docs/types/LoginEventHandler.html | 13 + Docs/types/LoginResponse.html | 14 + Docs/types/LoginStats.html | 12 + Docs/types/LoginTimer.html | 11 + Docs/types/LogoutAck.html | 10 + Docs/types/LogoutEventArgs.html | 11 + Docs/types/LogoutEventHandler.html | 13 + Docs/types/LogoutGump.html | 12 + Docs/types/LogoutTimer.html | 11 + Docs/types/LongBeard.html | 14 + Docs/types/LongFlask.html | 13 + Docs/types/LongHair.html | 14 + Docs/types/LongPants.html | 14 + Docs/types/Longsword.html | 29 + Docs/types/LoomEastAddon.html | 15 + Docs/types/LoomEastDeed.html | 15 + Docs/types/LoomSouthAddon.html | 15 + Docs/types/LoomSouthDeed.html | 15 + Docs/types/Loot.html | 87 + Docs/types/LootPack.html | 21 + Docs/types/LootPackDice.html | 15 + Docs/types/LootPackEntry.html | 25 + Docs/types/LootPackItem.html | 14 + Docs/types/LootType.html | 13 + Docs/types/LordBlackthorneSuit.html | 13 + Docs/types/LordBritishSuit.html | 13 + Docs/types/LordOaks.html | 35 + Docs/types/LostCallingScrollConversation.html | 15 + Docs/types/LostDaemonBloodConversation.html | 12 + Docs/types/LostDaemonBoneConversation.html | 12 + Docs/types/LostFertileDirtConversation.html | 15 + Docs/types/LostNoteConversation.html | 12 + Docs/types/LostScrollOfPowerConversation.html | 15 + Docs/types/LostSwordConversation.html | 12 + Docs/types/LoyaltyTimer.html | 12 + Docs/types/LtBlueCurvedFlask.html | 13 + Docs/types/LuckyNecklace.html | 15 + Docs/types/Lumberjacking.html | 17 + Docs/types/LuminescentFungi.html | 14 + Docs/types/LuminousRuneBlade.html | 15 + Docs/types/LunaLance.html | 16 + Docs/types/Lute.html | 14 + Docs/types/LyricalGlasses.html | 21 + Docs/types/LysanderGathenwale.html | 23 + Docs/types/LysanderNotebook1.html | 14 + Docs/types/LysanderNotebook11.html | 14 + Docs/types/LysanderNotebook2.html | 14 + Docs/types/LysanderNotebook3.html | 14 + Docs/types/LysanderNotebook7.html | 14 + Docs/types/LysanderNotebook8.html | 14 + Docs/types/MLDryad.html | 22 + Docs/types/MRBucket.html | 10 + Docs/types/MRExpireTimer.html | 13 + Docs/types/MaabasConversation.html | 13 + Docs/types/Maabus.html | 16 + Docs/types/MaabusCoffin.html | 18 + Docs/types/MaabusCoffinComponent.html | 17 + Docs/types/Mace.html | 26 + Docs/types/MaceShieldGlasses.html | 21 + Docs/types/Mage.html | 18 + Docs/types/MageAI.html | 41 + Docs/types/MageCamp.html | 14 + Docs/types/MageGuildmaster.html | 16 + Docs/types/MagerySpell.html | 21 + Docs/types/MagicArrowScroll.html | 14 + Docs/types/MagicArrowSpell.html | 16 + Docs/types/MagicArrowWand.html | 14 + Docs/types/MagicFlute.html | 15 + Docs/types/MagicLockScroll.html | 14 + Docs/types/MagicLockSpell.html | 14 + Docs/types/MagicReflectScroll.html | 14 + Docs/types/MagicReflectSpell.html | 14 + Docs/types/MagicTrapScroll.html | 14 + Docs/types/MagicTrapSpell.html | 14 + Docs/types/MagicUnTrapScroll.html | 14 + Docs/types/MagicWand.html | 27 + Docs/types/MagicWizardsHat.html | 25 + Docs/types/MagicalShortbow.html | 31 + Docs/types/Magincia.html | 10 + Docs/types/MahjongDealerIndicator.html | 19 + Docs/types/MahjongDices.html | 16 + Docs/types/MahjongGame.html | 31 + Docs/types/MahjongGeneralInfo.html | 10 + Docs/types/MahjongJoinGame.html | 10 + Docs/types/MahjongPacketHandlers.html | 28 + Docs/types/MahjongPieceDim.html | 16 + Docs/types/MahjongPieceDirection.html | 13 + Docs/types/MahjongPlayers.html | 47 + Docs/types/MahjongPlayersInfo.html | 10 + Docs/types/MahjongRelieve.html | 10 + Docs/types/MahjongTile.html | 23 + Docs/types/MahjongTileInfo.html | 10 + Docs/types/MahjongTileType.html | 43 + Docs/types/MahjongTileTypeGenerator.html | 12 + Docs/types/MahjongTilesInfo.html | 10 + Docs/types/MahjongWallBreakIndicator.html | 17 + Docs/types/MahjongWind.html | 13 + Docs/types/MainPlantGump.html | 19 + Docs/types/MajorTradeAssociation.html | 14 + Docs/types/MakeRoomObjective.html | 11 + Docs/types/MaleElvenRobe.html | 15 + Docs/types/MaleKimono.html | 15 + Docs/types/MalletAndChisel.html | 15 + Docs/types/ManPortrait1.html | 13 + Docs/types/ManPortrait2.html | 13 + Docs/types/ManStatuetteEastArtifact.html | 14 + Docs/types/ManStatuetteSouthArtifact.html | 14 + Docs/types/ManaDrainScroll.html | 14 + Docs/types/ManaDrainSpell.html | 16 + Docs/types/ManaDrainWand.html | 14 + Docs/types/ManaTimer.html | 11 + Docs/types/ManaVampireScroll.html | 14 + Docs/types/ManaVampireSpell.html | 15 + Docs/types/ManageBarkeeperEntry.html | 11 + Docs/types/ManagementEntry.html | 11 + Docs/types/MandrakeRoot.html | 16 + Docs/types/MansionGuard.html | 18 + Docs/types/Map.html | 99 + Docs/types/MapAddPin.html | 10 + Docs/types/MapChange.html | 10 + Docs/types/MapCommand.html | 11 + Docs/types/MapDefinitions.html | 12 + Docs/types/MapDetails.html | 10 + Docs/types/MapDisplay.html | 10 + Docs/types/MapItem.html | 44 + Docs/types/MapPatches.html | 10 + Docs/types/MapRules.html | 16 + Docs/types/MapSetEditable.html | 10 + Docs/types/MapleArmoire.html | 13 + Docs/types/Mapmaker.html | 15 + Docs/types/MapmakersPen.html | 16 + Docs/types/MarbleFloor.html | 13 + Docs/types/MarblePavers.html | 13 + Docs/types/MarbleStatueMaker.html | 13 + Docs/types/MarbleWorkshopDeed.html | 16 + Docs/types/Mardoth.html | 20 + Docs/types/MardothEndConversation.html | 12 + Docs/types/MardothKronusConversation.html | 12 + Docs/types/MardothVaultConversation.html | 12 + Docs/types/MaritimeGlasses.html | 21 + Docs/types/MarkContainer.html | 31 + Docs/types/MarkScroll.html | 14 + Docs/types/MarkSpell.html | 15 + Docs/types/MasonryBook.html | 15 + Docs/types/MassCurseScroll.html | 14 + Docs/types/MassCurseSpell.html | 14 + Docs/types/MassDispelScroll.html | 14 + Docs/types/MassDispelSpell.html | 14 + Docs/types/Maul.html | 27 + Docs/types/MeatPie.html | 14 + Docs/types/MeatType.html | 12 + Docs/types/Meditation.html | 13 + Docs/types/MediumBoat.html | 23 + Docs/types/MediumBoatDeed.html | 15 + Docs/types/MediumCrate.html | 13 + Docs/types/MediumDockedBoat.html | 14 + Docs/types/MediumDockedDragonBoat.html | 14 + Docs/types/MediumDragonBoat.html | 23 + Docs/types/MediumDragonBoatDeed.html | 15 + Docs/types/MediumFlask.html | 13 + Docs/types/MediumLongBeard.html | 14 + Docs/types/MediumShortBeard.html | 14 + Docs/types/MediumStoneTableEastAddon.html | 16 + Docs/types/MediumStoneTableEastDeed.html | 15 + Docs/types/MediumStoneTableSouthAddon.html | 16 + Docs/types/MediumStoneTableSouthDeed.html | 15 + Docs/types/MediumStretchedHideEastAddon.html | 14 + Docs/types/MediumStretchedHideEastDeed.html | 15 + Docs/types/MediumStretchedHideSouthAddon.html | 14 + Docs/types/MediumStretchedHideSouthDeed.html | 15 + Docs/types/MediumWoodDoor.html | 13 + Docs/types/MeerCaptain.html | 21 + Docs/types/MeerEternal.html | 29 + Docs/types/MeerMage.html | 26 + Docs/types/MeerWarrior.html | 20 + Docs/types/MeleeAI.html | 14 + Docs/types/MelisandesCorrodedHatchet.html | 14 + Docs/types/MeltedWax.html | 14 + Docs/types/MemberComparer.html | 13 + Docs/types/Mephitis.html | 22 + Docs/types/Meraktus.html | 39 + Docs/types/Merchant.html | 17 + Docs/types/MerchantGuildmaster.html | 14 + Docs/types/MerchantTitle.html | 15 + Docs/types/MerchantTitleInfo.html | 15 + Docs/types/MerchantTitles.html | 15 + Docs/types/MessageBoxMessage.html | 10 + Docs/types/MessageEntry.html | 14 + Docs/types/MessageGump.html | 10 + Docs/types/MessageHelper.html | 12 + Docs/types/MessageInABottle.html | 20 + Docs/types/MessageLocalized.html | 11 + Docs/types/MessageLocalizedAffix.html | 10 + Docs/types/MessagePump.html | 16 + Docs/types/MessageSentGump.html | 11 + Docs/types/MessageType.html | 21 + Docs/types/Messenger.html | 17 + Docs/types/MetalBox.html | 14 + Docs/types/MetalChest.html | 14 + Docs/types/MetalDoor.html | 13 + Docs/types/MetalDoor2.html | 13 + Docs/types/MetalGoldenChest.html | 13 + Docs/types/MetalGoldenPuzzleChest.html | 13 + Docs/types/MetalGoldenTreasureChest.html | 13 + Docs/types/MetalHouseDoor.html | 13 + Docs/types/MetalKiteShield.html | 23 + Docs/types/MetalPigmentsOfTokuno.html | 14 + Docs/types/MetalShield.html | 22 + Docs/types/MetalTreasureChest.html | 13 + Docs/types/MeteorSwarmScroll.html | 14 + Docs/types/MeteorSwarmSpell.html | 15 + Docs/types/MethodEmitter.html | 54 + Docs/types/MidnightBracers.html | 18 + Docs/types/MilitiaCanoneer.html | 20 + Docs/types/MilitiaFighter.html | 15 + Docs/types/MilitiaFighterCorpse.html | 16 + Docs/types/Miller.html | 15 + Docs/types/Minax.html | 11 + Docs/types/MinaxWarHorse.html | 13 + Docs/types/MindBlastScroll.html | 14 + Docs/types/MindBlastSpell.html | 17 + Docs/types/MindRotScroll.html | 14 + Docs/types/MindRotSpell.html | 20 + Docs/types/Miner.html | 16 + Docs/types/MinerGuildmaster.html | 14 + Docs/types/MiniHouseAddon.html | 18 + Docs/types/MiniHouseDeed.html | 19 + Docs/types/MiniHouseInfo.html | 14 + Docs/types/MiniHouseType.html | 31 + Docs/types/Mining.html | 22 + Docs/types/MiningCart.html | 20 + Docs/types/MiningCartDeed.html | 22 + Docs/types/MiningCartType.html | 13 + Docs/types/Minoc.html | 10 + Docs/types/Minotaur.html | 20 + Docs/types/MinotaurCaptain.html | 20 + Docs/types/MinotaurHedge.html | 13 + Docs/types/MinotaurScout.html | 20 + Docs/types/MinotaurStatue.html | 15 + Docs/types/MinotaurStatueDeed.html | 20 + Docs/types/MinotaurStatueType.html | 13 + Docs/types/Minter.html | 14 + Docs/types/MirrorImage.html | 21 + Docs/types/MisoSoup.html | 13 + Docs/types/MistletoeAddon.html | 20 + Docs/types/MistletoeAddonGump.html | 11 + Docs/types/MistletoeDeed.html | 21 + Docs/types/MistletoeDeedGump.html | 11 + Docs/types/Mobile.html | 636 + Docs/types/MobileAnimation.html | 10 + Docs/types/MobileAttributes.html | 10 + Docs/types/MobileAttributesN.html | 10 + Docs/types/MobileDelta.html | 36 + Docs/types/MobileEntry.html | 16 + Docs/types/MobileHits.html | 10 + Docs/types/MobileHitsN.html | 10 + Docs/types/MobileIncoming.html | 10 + Docs/types/MobileIncomingOld.html | 10 + Docs/types/MobileMana.html | 10 + Docs/types/MobileManaN.html | 10 + Docs/types/MobileMoving.html | 10 + Docs/types/MobileMovingOld.html | 10 + Docs/types/MobileName.html | 10 + Docs/types/MobileNotConnectedException.html | 10 + Docs/types/MobileStam.html | 10 + Docs/types/MobileStamN.html | 10 + Docs/types/MobileStatus.html | 13 + Docs/types/MobileStatusCompact.html | 10 + Docs/types/MobileStatusExtended.html | 11 + Docs/types/MobileUpdate.html | 10 + Docs/types/MobileUpdateOld.html | 10 + Docs/types/ModelBodyType.html | 15 + Docs/types/Mohawk.html | 14 + Docs/types/Moloch.html | 16 + Docs/types/MomentumStrike.html | 15 + Docs/types/Mongbat.html | 16 + Docs/types/Monk.html | 16 + Docs/types/MonkRobe.html | 17 + Docs/types/MonsterStatuette.html | 26 + Docs/types/MonsterStatuetteInfo.html | 15 + Docs/types/MonsterStatuetteType.html | 46 + Docs/types/MoonPhase.html | 17 + Docs/types/MoonfireBrew.html | 14 + Docs/types/Moongate.html | 31 + Docs/types/MoongateConfirmGump.html | 11 + Docs/types/MoongateGump.html | 12 + Docs/types/Moonglow.html | 10 + Docs/types/Moonstone.html | 19 + Docs/types/MoonstoneGate.html | 16 + Docs/types/MoonstoneType.html | 11 + Docs/types/MorgBergen.html | 22 + Docs/types/MorphItem.html | 24 + Docs/types/MorphResult.html | 12 + Docs/types/MortalStrike.html | 16 + Docs/types/MortarPestle.html | 15 + Docs/types/MouldingPlane.html | 15 + Docs/types/MoundOfMaggots.html | 16 + Docs/types/MountItem.html | 17 + Docs/types/MountainGoat.html | 16 + Docs/types/MountedPixieBlueAddon.html | 14 + Docs/types/MountedPixieBlueComponent.html | 15 + Docs/types/MountedPixieBlueDeed.html | 15 + Docs/types/MountedPixieGreenAddon.html | 14 + Docs/types/MountedPixieGreenComponent.html | 15 + Docs/types/MountedPixieGreenDeed.html | 15 + Docs/types/MountedPixieLimeAddon.html | 14 + Docs/types/MountedPixieLimeComponent.html | 15 + Docs/types/MountedPixieLimeDeed.html | 15 + Docs/types/MountedPixieOrangeAddon.html | 14 + Docs/types/MountedPixieOrangeComponent.html | 15 + Docs/types/MountedPixieOrangeDeed.html | 15 + Docs/types/MountedPixieWhiteAddon.html | 14 + Docs/types/MountedPixieWhiteComponent.html | 15 + Docs/types/MountedPixieWhiteDeed.html | 15 + Docs/types/MoveDelayTimer.html | 11 + Docs/types/MoveMethod.html | 13 + Docs/types/MoveResult.html | 13 + Docs/types/MoveTarget.html | 11 + Docs/types/MoveTimer.html | 11 + Docs/types/Movement.html | 13 + Docs/types/MovementAck.html | 11 + Docs/types/MovementEventArgs.html | 15 + Docs/types/MovementEventHandler.html | 13 + Docs/types/MovementImpl.html | 20 + Docs/types/MovementPath.html | 21 + Docs/types/MovementRecord.html | 12 + Docs/types/MovementRej.html | 10 + Docs/types/MovementType.html | 12 + Docs/types/MovingCrate.html | 28 + Docs/types/MovingEffect.html | 10 + Docs/types/MovingParticleEffect.html | 10 + Docs/types/MovingShot.html | 16 + Docs/types/Muculent.html | 15 + Docs/types/Muffins.html | 13 + Docs/types/MultiCommandImplementor.html | 12 + Docs/types/MultiComponentList.html | 26 + Docs/types/MultiData.html | 11 + Docs/types/MultiTarget.html | 15 + Docs/types/MultiTargetReq.html | 10 + Docs/types/MultiTargetReqHS.html | 10 + Docs/types/MultiTextWriter.html | 16 + Docs/types/MultiTileEntry.html | 10 + Docs/types/MultiTileEnumerator.html | 17 + Docs/types/Mummy.html | 17 + Docs/types/MurderConversation.html | 12 + Docs/types/MushroomTrap.html | 19 + Docs/types/MusicName.html | 77 + Docs/types/Mustache.html | 14 + Docs/types/MutateEntry.html | 10 + Docs/types/MyRunUO.html | 38 + Docs/types/MyRunUOStatus.html | 13 + Docs/types/MyStory.html | 14 + Docs/types/Nails.html | 15 + Docs/types/NameBookEntry.html | 11 + Docs/types/NameBookPrompt.html | 12 + Docs/types/NameChangeDeed.html | 15 + Docs/types/NameComparer.html | 11 + Docs/types/NameList.html | 17 + Docs/types/NameVerification.html | 16 + Docs/types/NativeReader.html | 10 + Docs/types/NativeReaderUnix.html | 12 + Docs/types/NativeReaderWin32.html | 12 + Docs/types/Naturalist.html | 16 + .../NaturalistDuringStudyConversation.html | 12 + Docs/types/NatureFury.html | 25 + Docs/types/NatureFuryScroll.html | 14 + Docs/types/NatureFurySpell.html | 18 + Docs/types/Necklace.html | 13 + Docs/types/NecromancerSpell.html | 21 + Docs/types/NecromancerSpellbook.html | 18 + Docs/types/NecromanticGlasses.html | 21 + Docs/types/NeedDelegate.html | 13 + Docs/types/NeedToHideConversation.html | 11 + Docs/types/Neira.html | 34 + Docs/types/NerveStrike.html | 14 + Docs/types/NestArea.html | 16 + Docs/types/NetState.html | 97 + Docs/types/NetStateComparer.html | 11 + Docs/types/NetStateCreatedCallback.html | 13 + Docs/types/NewHousePlacementTarget.html | 12 + Docs/types/NewMobileAnimation.html | 10 + Docs/types/NewPlayerTicket.html | 19 + Docs/types/NewPlayerVendorCustomizeGump.html | 12 + Docs/types/NewPlayerVendorOwnerGump.html | 11 + Docs/types/NewPolymorphGump.html | 11 + Docs/types/NewSpellbookContent.html | 10 + Docs/types/NextPointTarget.html | 11 + Docs/types/NightSightPotion.html | 14 + Docs/types/NightSightScroll.html | 14 + Docs/types/NightSightSpell.html | 13 + Docs/types/NightSightTarget.html | 12 + Docs/types/NightSightTimer.html | 11 + Docs/types/Nightmare.html | 22 + Docs/types/NightsKiss.html | 16 + Docs/types/Nightshade.html | 16 + Docs/types/Nightstand.html | 13 + Docs/types/Ninja.html | 15 + Docs/types/NinjaMove.html | 13 + Docs/types/NinjaSpell.html | 25 + Docs/types/NinjaTabi.html | 14 + Docs/types/NinjaWeapon.html | 22 + Docs/types/NoDachi.html | 29 + Docs/types/NoHousingRegion.html | 12 + Docs/types/NoSheetMusicConversation.html | 12 + Docs/types/NoSortAttribute.html | 10 + Docs/types/Noble.html | 17 + Docs/types/NobleSacrificeSpell.html | 17 + Docs/types/Node.html | 12 + Docs/types/NodeHue.html | 12 + Docs/types/NorseHelm.html | 24 + Docs/types/NotYetBoundException.html | 10 + Docs/types/NoteForZoel.html | 15 + Docs/types/NoticeGump.html | 11 + Docs/types/NoticeGumpCallback.html | 13 + Docs/types/Notoriety.html | 13 + Docs/types/NotorietyHandler.html | 13 + Docs/types/NotorietyHandlers.html | 24 + Docs/types/NoxCrystal.html | 16 + Docs/types/NoxRangersHeavyCrossbow.html | 17 + Docs/types/NpcGuild.html | 22 + Docs/types/NullEnumerable.html | 13 + Docs/types/NullFastwalkStack.html | 10 + Docs/types/Nunchaku.html | 29 + Docs/types/OPLInfo.html | 10 + Docs/types/OakBoard.html | 14 + Docs/types/OakLog.html | 15 + Docs/types/Obelisk.html | 14 + Docs/types/Obi.html | 14 + Docs/types/ObjectCollection.html | 19 + Docs/types/ObjectCollectionEnumerator.html | 14 + Docs/types/ObjectConditional.html | 18 + Docs/types/ObjectEnumerator.html | 17 + Docs/types/ObjectHelpResponse.html | 10 + Docs/types/ObjectPropertyList.html | 29 + Docs/types/ObjectTypes.html | 13 + Docs/types/OblivionsNeedle.html | 17 + Docs/types/Obsidian.html | 22 + Docs/types/OfferContractTarget.html | 12 + Docs/types/OfferExpireTimer.html | 11 + Docs/types/Ogre.html | 17 + Docs/types/OgreLord.html | 20 + Docs/types/OilCloth.html | 19 + Docs/types/OldClientResponse.html | 14 + Docs/types/OnChatAction.html | 13 + Docs/types/OnConsoleChar.html | 13 + Docs/types/OnConsoleLine.html | 13 + Docs/types/OnConsoleStr.html | 13 + Docs/types/OnEncodedPacketReceive.html | 13 + Docs/types/OnItemConsumed.html | 13 + Docs/types/OnMahjongPacketReceive.html | 13 + Docs/types/OnOffGump.html | 11 + Docs/types/OnPacketReceive.html | 13 + Docs/types/OnVirtueUsed.html | 13 + Docs/types/Oni.html | 21 + Docs/types/Onion.html | 14 + Docs/types/OnlineCommandImplementor.html | 11 + Docs/types/OpenBackpackEntry.html | 11 + Docs/types/OpenBankEntry.html | 11 + Docs/types/OpenBrowserCommand.html | 12 + Docs/types/OpenCoconut.html | 14 + Docs/types/OpenCorpseEntry.html | 11 + Docs/types/OpenDoorMacroEventArgs.html | 11 + Docs/types/OpenDoorMacroEventHandler.html | 13 + Docs/types/OpenMapEntry.html | 11 + Docs/types/OpenSpellbookRequestEventArgs.html | 12 + .../OpenSpellbookRequestEventHandler.html | 13 + Docs/types/OphidianArchmage.html | 16 + Docs/types/OphidianKnight.html | 19 + Docs/types/OphidianMage.html | 17 + Docs/types/OphidianMatriarch.html | 17 + Docs/types/OphidianWarrior.html | 17 + Docs/types/OppositionGroup.html | 15 + Docs/types/OrangePetals.html | 24 + Docs/types/OrangePetalsContext.html | 11 + Docs/types/OrangePetalsTimer.html | 11 + Docs/types/Orc.html | 21 + Docs/types/OrcBomber.html | 22 + Docs/types/OrcBrute.html | 24 + Docs/types/OrcCamp.html | 19 + Docs/types/OrcCaptain.html | 20 + Docs/types/OrcChieftainHelm.html | 22 + Docs/types/OrcHelm.html | 28 + Docs/types/OrcishKinMask.html | 25 + Docs/types/OrcishLord.html | 22 + Docs/types/OrcishMage.html | 21 + Docs/types/OrcishVisage.html | 21 + Docs/types/OrderGuard.html | 18 + Docs/types/OrderInfo.html | 14 + Docs/types/OrderShield.html | 26 + Docs/types/OrderType.html | 22 + Docs/types/Orders.html | 17 + Docs/types/OreInfo.html | 13 + Docs/types/OrigamiButterfly.html | 14 + Docs/types/OrigamiFish.html | 14 + Docs/types/OrigamiFrog.html | 14 + Docs/types/OrigamiPaper.html | 15 + Docs/types/OrigamiShape.html | 14 + Docs/types/OrigamiSongbird.html | 14 + Docs/types/OrigamiSwan.html | 14 + Docs/types/Ornament.html | 14 + Docs/types/OrnamentOfTheMagician.html | 15 + Docs/types/OrnateAxe.html | 28 + Docs/types/OrnateCrownOfTheHarrower.html | 18 + Docs/types/OrnateElvenChair.html | 13 + Docs/types/OrnateElvenTableEastAddon.html | 14 + Docs/types/OrnateElvenTableEastDeed.html | 15 + Docs/types/OrnateElvenTableSouthAddon.html | 14 + Docs/types/OrnateElvenTableSouthDeed.html | 15 + Docs/types/OrnateWoodenChest.html | 13 + Docs/types/OssianGrimoire.html | 14 + Docs/types/OtherGuildInfo.html | 14 + Docs/types/OverseerSunderedBlade.html | 15 + Docs/types/PMEntry.html | 12 + Docs/types/PMList.html | 14 + Docs/types/PMMessage.html | 14 + Docs/types/PVBuyTarget.html | 11 + Docs/types/PVHuePicker.html | 11 + Docs/types/Pacify.html | 17 + Docs/types/PackAnimal.html | 14 + Docs/types/PackAnimalBackpackEntry.html | 11 + Docs/types/PackHorse.html | 24 + Docs/types/PackInstinct.html | 18 + Docs/types/PackLlama.html | 23 + Docs/types/Packet.html | 31 + Docs/types/PacketHandler.html | 15 + Docs/types/PacketHandlers.html | 121 + Docs/types/PacketReader.html | 36 + Docs/types/PacketReceiveProfile.html | 12 + Docs/types/PacketSendProfile.html | 14 + Docs/types/PacketWriter.html | 35 + Docs/types/PackingBox.html | 22 + Docs/types/PadsOfTheCuSidhe.html | 14 + Docs/types/Page.html | 9 + Docs/types/PageEntry.html | 22 + Docs/types/PageEntryGump.html | 12 + Docs/types/PageInfo.html | 33 + Docs/types/PageInfoCollection.html | 18 + Docs/types/PageInfoCollectionEnumerator.html | 14 + Docs/types/PagePrompt.html | 12 + Docs/types/PagePromptGump.html | 11 + Docs/types/PageQueue.html | 25 + Docs/types/PageQueueGump.html | 11 + Docs/types/PageResolution.html | 14 + Docs/types/PageResponseGump.html | 11 + Docs/types/PageType.html | 17 + Docs/types/PageboyHair.html | 14 + Docs/types/PainSpikeScroll.html | 14 + Docs/types/PainSpikeSpell.html | 17 + Docs/types/PaintedImage.html | 18 + Docs/types/Painting1NorthArtifact.html | 14 + Docs/types/Painting1WestArtifact.html | 14 + Docs/types/Painting2NorthArtifact.html | 14 + Docs/types/Painting2WestArtifact.html | 14 + Docs/types/Painting3Artifact.html | 14 + Docs/types/Painting4NorthArtifact.html | 14 + Docs/types/Painting4WestArtifact.html | 14 + Docs/types/Painting5NorthArtifact.html | 14 + Docs/types/Painting5WestArtifact.html | 14 + Docs/types/Painting6NorthArtifact.html | 14 + Docs/types/Painting6WestArtifact.html | 14 + Docs/types/PaintsAndBrush.html | 13 + Docs/types/PaladinSpell.html | 31 + Docs/types/Panther.html | 17 + Docs/types/PaperLantern.html | 15 + Docs/types/Paperdoll.html | 12 + Docs/types/PaperdollEntry.html | 11 + Docs/types/PaperdollRequestEventArgs.html | 12 + Docs/types/PaperdollRequestEventHandler.html | 13 + Docs/types/Paragon.html | 16 + Docs/types/ParagonChest.html | 18 + Docs/types/ParallelSaveStrategy.html | 27 + Docs/types/ParalyzeFieldScroll.html | 14 + Docs/types/ParalyzeFieldSpell.html | 14 + Docs/types/ParalyzeScroll.html | 14 + Docs/types/ParalyzeSpell.html | 14 + Docs/types/ParalyzedTimer.html | 11 + Docs/types/ParalyzingBlow.html | 18 + Docs/types/ParasiticPlant.html | 15 + Docs/types/ParentNode.html | 14 + Docs/types/Parrot.html | 18 + Docs/types/ParrotPerchAddon.html | 14 + Docs/types/ParrotPerchDeed.html | 15 + Docs/types/ParsableAttribute.html | 10 + Docs/types/ParticleEffect.html | 12 + Docs/types/ParticleSupportType.html | 12 + Docs/types/Party.html | 44 + Docs/types/PartyCommandHandlers.html | 18 + Docs/types/PartyCommands.html | 19 + Docs/types/PartyEmptyList.html | 10 + Docs/types/PartyInvitation.html | 10 + Docs/types/PartyMemberInfo.html | 12 + Docs/types/PartyMemberList.html | 10 + Docs/types/PartyRemoveMember.html | 10 + Docs/types/PartyTextMessage.html | 10 + Docs/types/PasswordProtection.html | 12 + Docs/types/PatchworkSkeleton.html | 18 + Docs/types/PathAlgorithm.html | 14 + Docs/types/PathDirection.html | 13 + Docs/types/PathFollower.html | 19 + Docs/types/PathNode.html | 9 + Docs/types/PathfindMessage.html | 10 + Docs/types/PayTimer.html | 12 + Docs/types/Peacemaking.html | 14 + Docs/types/Peach.html | 14 + Docs/types/PeachCobbler.html | 14 + Docs/types/PeachTreeAddon.html | 15 + Docs/types/PeachTreeDeed.html | 15 + Docs/types/PeachTrunkAddon.html | 14 + Docs/types/PeachTrunkDeed.html | 15 + Docs/types/Pear.html | 14 + Docs/types/Peasant.html | 17 + Docs/types/PeasantsBokuto.html | 16 + Docs/types/PeculiarFish.html | 15 + Docs/types/PenAndInk.html | 13 + Docs/types/PendantOfTheMagi.html | 14 + Docs/types/PentagramAddon.html | 15 + Docs/types/PentagramDeed.html | 15 + Docs/types/PerfectEmerald.html | 15 + Docs/types/PersistableObject.html | 18 + Docs/types/PersistableType.html | 12 + Docs/types/PersistableTypeRegistry.html | 12 + Docs/types/PersistanceReader.html | 21 + Docs/types/PersistanceWriter.html | 21 + Docs/types/PersistedType.html | 12 + Docs/types/PersonalLightLevel.html | 11 + Docs/types/PersonalLightLevelZero.html | 10 + Docs/types/PestilentBandage.html | 16 + Docs/types/PetLinkTarget.html | 11 + Docs/types/PetResurrectGump.html | 12 + Docs/types/PetSummoningSpell.html | 24 + Docs/types/PewterBowlOfCarrots.html | 14 + Docs/types/PewterBowlOfCorn.html | 14 + Docs/types/PewterBowlOfLettuce.html | 14 + Docs/types/PewterBowlOfPeas.html | 14 + Docs/types/PewterBowlOfPotatos.html | 14 + Docs/types/PewterMug.html | 17 + Docs/types/PhantomStaff.html | 15 + Docs/types/PhillipsWoodenSteed.html | 14 + Docs/types/Phoenix.html | 17 + Docs/types/PickLoomTarget.html | 11 + Docs/types/PickMoveTarget.html | 11 + Docs/types/PickTarget.html | 12 + Docs/types/PickWheelTarget.html | 11 + Docs/types/Pickaxe.html | 28 + Docs/types/PickpocketDip.html | 22 + Docs/types/PickpocketDipEastAddon.html | 14 + Docs/types/PickpocketDipEastDeed.html | 15 + Docs/types/PickpocketDipSouthAddon.html | 14 + Docs/types/PickpocketDipSouthDeed.html | 15 + Docs/types/PicnicBasket.html | 13 + Docs/types/PieChart.html | 16 + Docs/types/PieChartRenderer.html | 15 + Docs/types/PieceBlackBishop.html | 14 + Docs/types/PieceBlackChecker.html | 14 + Docs/types/PieceBlackKing.html | 14 + Docs/types/PieceBlackKnight.html | 14 + Docs/types/PieceBlackPawn.html | 14 + Docs/types/PieceBlackQueen.html | 14 + Docs/types/PieceBlackRook.html | 14 + Docs/types/PieceWhiteBishop.html | 14 + Docs/types/PieceWhiteChecker.html | 14 + Docs/types/PieceWhiteKing.html | 14 + Docs/types/PieceWhiteKnight.html | 14 + Docs/types/PieceWhitePawn.html | 14 + Docs/types/PieceWhiteQueen.html | 14 + Docs/types/PieceWhiteRook.html | 14 + Docs/types/Pier.html | 14 + Docs/types/Pig.html | 15 + Docs/types/PigIron.html | 16 + Docs/types/PigmentType.html | 29 + Docs/types/PigmentsOfTokuno.html | 18 + Docs/types/PigmentsTileButtonInfo.html | 11 + Docs/types/Pike.html | 27 + Docs/types/PileOfGlacialSnow.html | 18 + Docs/types/PilferedDancerFans.html | 16 + Docs/types/PingAck.html | 11 + Docs/types/PinkFancyRugAddon.html | 14 + Docs/types/PinkFancyRugDeed.html | 15 + Docs/types/Pitcher.html | 17 + Docs/types/Pitchfork.html | 26 + Docs/types/Pixie.html | 19 + Docs/types/PixieSwatter.html | 17 + Docs/types/PlagueBeast.html | 29 + Docs/types/PlagueBeastBackpack.html | 22 + Docs/types/PlagueBeastBackupOrgan.html | 21 + Docs/types/PlagueBeastBlood.html | 18 + Docs/types/PlagueBeastComponent.html | 25 + Docs/types/PlagueBeastGland.html | 13 + Docs/types/PlagueBeastHeart.html | 15 + Docs/types/PlagueBeastInnard.html | 19 + Docs/types/PlagueBeastLord.html | 35 + Docs/types/PlagueBeastMaidenOrgan.html | 15 + Docs/types/PlagueBeastMainOrgan.html | 18 + Docs/types/PlagueBeastMutationCore.html | 16 + Docs/types/PlagueBeastOrgan.html | 26 + Docs/types/PlagueBeastRockOrgan.html | 17 + Docs/types/PlagueBeastRubbleOrgan.html | 18 + Docs/types/PlagueBeastVein.html | 17 + Docs/types/PlagueSpawn.html | 21 + Docs/types/PlainDress.html | 14 + Docs/types/PlainLowTable.html | 13 + Docs/types/PlainWoodenChest.html | 13 + Docs/types/Plank.html | 27 + Docs/types/PlankSide.html | 11 + Docs/types/PlantBowl.html | 17 + Docs/types/PlantGrowthIndicator.html | 15 + Docs/types/PlantHealth.html | 13 + Docs/types/PlantHue.html | 31 + Docs/types/PlantHueInfo.html | 26 + Docs/types/PlantItem.html | 37 + Docs/types/PlantPourTarget.html | 12 + Docs/types/PlantResourceInfo.html | 15 + Docs/types/PlantStatus.html | 25 + Docs/types/PlantSystem.html | 55 + Docs/types/PlantType.html | 51 + Docs/types/PlantTypeInfo.html | 28 + Docs/types/Plate.html | 13 + Docs/types/PlateArms.html | 25 + Docs/types/PlateBattleKabuto.html | 25 + Docs/types/PlateChest.html | 26 + Docs/types/PlateDo.html | 25 + Docs/types/PlateGloves.html | 26 + Docs/types/PlateGorget.html | 26 + Docs/types/PlateHaidate.html | 24 + Docs/types/PlateHatsuburi.html | 24 + Docs/types/PlateHelm.html | 26 + Docs/types/PlateHiroSode.html | 24 + Docs/types/PlateLegs.html | 26 + Docs/types/PlateMempo.html | 24 + Docs/types/PlateSuneate.html | 25 + Docs/types/PlayMusic.html | 11 + Docs/types/PlayServerAck.html | 10 + Docs/types/PlaySound.html | 10 + Docs/types/Player.html | 26 + Docs/types/PlayerBBEast.html | 14 + Docs/types/PlayerBBGump.html | 11 + Docs/types/PlayerBBMessage.html | 15 + Docs/types/PlayerBBSouth.html | 14 + Docs/types/PlayerBarkeeper.html | 50 + Docs/types/PlayerCollection.html | 10 + Docs/types/PlayerDeathEventArgs.html | 11 + Docs/types/PlayerDeathEventHandler.html | 13 + Docs/types/PlayerFlag.html | 24 + Docs/types/PlayerMobile.html | 235 + Docs/types/PlayerMove.html | 10 + Docs/types/PlayerState.html | 32 + Docs/types/PlayerVendor.html | 68 + Docs/types/PlayerVendorBuyGump.html | 11 + Docs/types/PlayerVendorCustomizeGump.html | 12 + Docs/types/PlayerVendorOwnerGump.html | 11 + Docs/types/PlayerVendorPlaceholder.html | 18 + Docs/types/PlayerVendorTargetAttribute.html | 10 + Docs/types/PlayingCards.html | 13 + Docs/types/PlayingCards2.html | 13 + Docs/types/Point2D.html | 19 + Docs/types/Point3D.html | 21 + Docs/types/Point3DList.html | 17 + Docs/types/Poison.html | 27 + Docs/types/PoisonElemental.html | 19 + Docs/types/PoisonFieldScroll.html | 14 + Docs/types/PoisonFieldSpell.html | 14 + Docs/types/PoisonImpl.html | 16 + Docs/types/PoisonPotion.html | 16 + Docs/types/PoisonScroll.html | 14 + Docs/types/PoisonSpell.html | 14 + Docs/types/PoisonStrikeScroll.html | 14 + Docs/types/PoisonStrikeSpell.html | 17 + Docs/types/PoisonTimer.html | 12 + Docs/types/PoisonTrapCraft.html | 11 + Docs/types/PoisonedGlasses.html | 21 + Docs/types/Poisoning.html | 13 + Docs/types/PolarBear.html | 17 + Docs/types/PolarBearMask.html | 18 + Docs/types/PolarBearRugEastAddon.html | 14 + Docs/types/PolarBearRugEastDeed.html | 15 + Docs/types/PolarBearRugSouthAddon.html | 14 + Docs/types/PolarBearRugSouthDeed.html | 15 + Docs/types/PollinateTarget.html | 12 + Docs/types/PolymorphCategory.html | 12 + Docs/types/PolymorphEntry.html | 15 + Docs/types/PolymorphGump.html | 12 + Docs/types/PolymorphScroll.html | 14 + Docs/types/PolymorphSpell.html | 17 + Docs/types/PonyTail.html | 14 + Docs/types/PoolOfAcid.html | 19 + Docs/types/PooledEnumerable.html | 14 + Docs/types/PopupMessage.html | 10 + Docs/types/PortcullisEW.html | 14 + Docs/types/PortcullisNS.html | 14 + Docs/types/PostPrompt.html | 12 + Docs/types/PotionEffect.html | 35 + Docs/types/PotionKeg.html | 24 + Docs/types/PottedCactus.html | 13 + Docs/types/PottedCactus1.html | 13 + Docs/types/PottedCactus2.html | 13 + Docs/types/PottedCactus3.html | 13 + Docs/types/PottedCactus4.html | 13 + Docs/types/PottedCactus5.html | 13 + Docs/types/PottedCactusDeed.html | 18 + Docs/types/PottedPlant.html | 13 + Docs/types/PottedPlant1.html | 13 + Docs/types/PottedPlant2.html | 13 + Docs/types/PottedTree.html | 13 + Docs/types/PottedTree1.html | 13 + Docs/types/Pouch.html | 13 + Docs/types/PowderOfTemperament.html | 22 + Docs/types/PowderOfTranslocation.html | 16 + Docs/types/Power.html | 15 + Docs/types/PowerCrystal.html | 15 + Docs/types/PowerDefinition.html | 14 + Docs/types/PowerGenerator.html | 16 + Docs/types/PowerScroll.html | 24 + Docs/types/PredatorAI.html | 13 + Docs/types/PredatorHellCat.html | 19 + Docs/types/PredefGump.html | 14 + Docs/types/PredefinedResponse.html | 16 + Docs/types/PresetMap.html | 16 + Docs/types/PresetMapBuyInfo.html | 12 + Docs/types/PresetMapEntry.html | 15 + Docs/types/PresetMapType.html | 37 + Docs/types/PreviewHouse.html | 18 + Docs/types/PricePerRentalPrompt.html | 12 + Docs/types/PricedHealer.html | 20 + Docs/types/PristineDreadHorn.html | 13 + Docs/types/PrivSoundCommand.html | 11 + Docs/types/PrizedFish.html | 16 + Docs/types/ProcessFungiConversation.html | 15 + Docs/types/ProcessFungiObjective.html | 12 + Docs/types/ProcessFungiTarget.html | 12 + Docs/types/ProcessZoogiFungusEntry.html | 11 + Docs/types/Producer.html | 13 + Docs/types/ProfanityAction.html | 15 + Docs/types/ProfanityProtection.html | 16 + Docs/types/Profile.html | 15 + Docs/types/ProfileRequestEventArgs.html | 12 + Docs/types/ProfileRequestEventHandler.html | 13 + Docs/types/Profiling.html | 20 + Docs/types/PromotionalToken.html | 23 + Docs/types/PromotionalTokenGump.html | 11 + Docs/types/Prompt.html | 14 + Docs/types/PromptCallback.html | 13 + Docs/types/PromptStateCallback-T-.html | 13 + Docs/types/PromptStateCallback.html | 13 + Docs/types/Properties.html | 36 + Docs/types/PropertiesGump.html | 30 + Docs/types/Property.html | 20 + Docs/types/PropertyAccess.html | 12 + Docs/types/PropertyCondition.html | 13 + Docs/types/PropertyException.html | 12 + Docs/types/PropertyObjectAttribute.html | 10 + Docs/types/PropertySorter.html | 11 + Docs/types/PropertyValue.html | 16 + Docs/types/PropsConfig.html | 10 + Docs/types/PropsTarget.html | 11 + Docs/types/ProspectorsTool.html | 29 + Docs/types/ProtectionScroll.html | 14 + Docs/types/ProtectionSpell.html | 17 + Docs/types/ProtocolChanges.html | 31 + Docs/types/ProtocolExtension.html | 11 + Docs/types/ProtocolExtensions.html | 15 + Docs/types/Provisioner.html | 15 + Docs/types/Provocation.html | 14 + Docs/types/PublicMoongate.html | 23 + Docs/types/Pumpkin.html | 14 + Docs/types/PumpkinPie.html | 14 + Docs/types/Putrefication.html | 15 + Docs/types/PuzzleChest.html | 31 + Docs/types/PuzzleChestCylinder.html | 18 + Docs/types/PuzzleChestSolution.html | 23 + Docs/types/PuzzleChestSolutionAndTime.html | 13 + Docs/types/PuzzleGump.html | 15 + Docs/types/PyramidAddon.html | 14 + Docs/types/Quagmire.html | 18 + Docs/types/QuarterStaff.html | 26 + Docs/types/Quell.html | 17 + Docs/types/QueryMakersMarkGump.html | 11 + Docs/types/QuestArrow.html | 21 + Docs/types/QuestCallback.html | 13 + Docs/types/QuestCallbackEntry.html | 12 + Docs/types/QuestCancelGump.html | 11 + Docs/types/QuestCompleteObjectiveRegion.html | 13 + Docs/types/QuestConversation.html | 21 + Docs/types/QuestConversationsGump.html | 12 + Docs/types/QuestDaemonBlood.html | 14 + Docs/types/QuestDaemonBone.html | 14 + Docs/types/QuestFertileDirt.html | 14 + Docs/types/QuestGumpRequestArgs.html | 11 + Docs/types/QuestGumpRequestHandler.html | 13 + Docs/types/QuestItem.html | 20 + Docs/types/QuestItemInfo.html | 12 + Docs/types/QuestItemInfoGump.html | 10 + Docs/types/QuestLogUpdatedGump.html | 11 + Docs/types/QuestNoEntryRegion.html | 15 + Docs/types/QuestObjective.html | 35 + Docs/types/QuestObjectivesGump.html | 12 + Docs/types/QuestOfVirtues.html | 14 + Docs/types/QuestOfferGump.html | 11 + Docs/types/QuestOfferRegion.html | 12 + Docs/types/QuestRestartInfo.html | 14 + Docs/types/QuestSerializer.html | 19 + Docs/types/QuestSystem.html | 50 + Docs/types/QuestionMenu.html | 18 + Docs/types/QueueStatus.html | 17 + Docs/types/QueueStatusCollection.html | 18 + .../QueueStatusCollectionEnumerator.html | 14 + Docs/types/QueuedMemoryWriter.html | 14 + Docs/types/Quiche.html | 14 + Docs/types/QuiverOfBlight.html | 15 + Docs/types/QuiverOfElements.html | 15 + Docs/types/QuiverOfFire.html | 15 + Docs/types/QuiverOfIce.html | 15 + Docs/types/QuiverOfInfinity.html | 14 + Docs/types/QuiverOfLightning.html | 15 + Docs/types/QuiverOfRage.html | 15 + Docs/types/Rabbit.html | 19 + Docs/types/Race.html | 47 + Docs/types/RaceDefinitions.html | 13 + Docs/types/RadarConversation.html | 12 + Docs/types/RadiantScimitar.html | 29 + Docs/types/RaedsGlory.html | 16 + Docs/types/RaffleContextMenuEntry.html | 11 + Docs/types/RaffleEntry.html | 15 + Docs/types/RagingGrizzlyBear.html | 16 + Docs/types/RaiJu.html | 18 + Docs/types/RaisableItem.html | 22 + Docs/types/RaiseSwitch.html | 22 + Docs/types/RaiseTimer.html | 11 + Docs/types/Rancher.html | 15 + Docs/types/RandomTalisman.html | 13 + Docs/types/RandomWand.html | 12 + Docs/types/Ranger.html | 16 + Docs/types/RangerArms.html | 26 + Docs/types/RangerChest.html | 26 + Docs/types/RangerGloves.html | 26 + Docs/types/RangerGorget.html | 26 + Docs/types/RangerGuildmaster.html | 14 + Docs/types/RangerLegs.html | 26 + Docs/types/RankComparer.html | 11 + Docs/types/RankDefinition.html | 18 + Docs/types/RankFlags.html | 21 + Docs/types/RankingsOfTrades.html | 14 + Docs/types/Rat.html | 16 + Docs/types/RatCamp.html | 19 + Docs/types/Ratman.html | 18 + Docs/types/RatmanArcher.html | 18 + Docs/types/RatmanMage.html | 19 + Docs/types/RattanDoor.html | 13 + Docs/types/Ravager.html | 15 + Docs/types/RavenHelm.html | 26 + Docs/types/RawBird.html | 15 + Docs/types/RawChickenLeg.html | 14 + Docs/types/RawFishSteak.html | 16 + Docs/types/RawLambLeg.html | 15 + Docs/types/RawRibs.html | 15 + Docs/types/Reaction.html | 14 + Docs/types/ReactionType.html | 12 + Docs/types/ReactiveArmorScroll.html | 14 + Docs/types/ReactiveArmorSpell.html | 14 + Docs/types/ReadAbraxusScrollConversation.html | 12 + Docs/types/ReadAbraxusScrollObjective.html | 12 + Docs/types/ReadAccessException.html | 10 + Docs/types/ReadOnlyException.html | 10 + Docs/types/Reagent.html | 24 + Docs/types/RealEstateBroker.html | 21 + Docs/types/ReanimateMaabusConversation.html | 13 + Docs/types/Reaper.html | 17 + Docs/types/ReaperFormScroll.html | 14 + Docs/types/ReaperFormSpell.html | 25 + Docs/types/RecallRune.html | 24 + Docs/types/RecallScroll.html | 14 + Docs/types/RecallSpell.html | 17 + Docs/types/ReceedingHair.html | 14 + Docs/types/ReceiverCrystal.html | 21 + Docs/types/RecentlyFinishedConversation.html | 12 + Docs/types/RechargeEntry.html | 11 + Docs/types/Recipe.html | 20 + Docs/types/RecipeConversation.html | 12 + Docs/types/RecipeScroll.html | 19 + Docs/types/ReclaimVendorGump.html | 11 + Docs/types/ReclaimVendorInventoryEntry.html | 11 + Docs/types/Rectangle2D.html | 24 + Docs/types/Rectangle3D.html | 18 + Docs/types/RedAmbitiousSolenQueen.html | 14 + Docs/types/RedArmoire.html | 13 + Docs/types/RedBeaker.html | 13 + Docs/types/RedBook.html | 17 + Docs/types/RedBottle.html | 13 + Docs/types/RedCurvedFlask.html | 13 + Docs/types/RedHangingLantern.html | 16 + Docs/types/RedLeaves.html | 18 + Docs/types/RedMisoSoup.html | 13 + Docs/types/RedPlainRugAddon.html | 14 + Docs/types/RedPlainRugDeed.html | 15 + Docs/types/RedPoinsettia.html | 13 + Docs/types/RedRibbedFlask.html | 13 + Docs/types/RedScales.html | 14 + Docs/types/RedSolenInfiltratorQueen.html | 21 + Docs/types/RedSolenInfiltratorWarrior.html | 21 + Docs/types/RedSolenMatriarch.html | 14 + Docs/types/RedSolenQueen.html | 23 + Docs/types/RedSolenWarrior.html | 23 + Docs/types/RedSolenWorker.html | 21 + Docs/types/RedSoulstone.html | 16 + Docs/types/RedStocking.html | 13 + Docs/types/RedVelvetGiftBox.html | 18 + Docs/types/Reflector.html | 18 + Docs/types/RefreshHouseCommand.html | 11 + Docs/types/RefreshPotion.html | 14 + Docs/types/RefundOfferPrompt.html | 11 + Docs/types/Reg.html | 17 + Docs/types/RegStone.html | 15 + Docs/types/RegardingLlamas.html | 14 + Docs/types/RegenRateHandler.html | 13 + Docs/types/RegenRates.html | 19 + Docs/types/RegenTimer.html | 11 + Docs/types/Region.html | 117 + Docs/types/RegionCommandImplementor.html | 11 + Docs/types/RegionRect.html | 14 + Docs/types/RejoinTimer.html | 11 + Docs/types/RejuvinationAddonComponent.html | 15 + Docs/types/RejuvinationAnkhNorth.html | 13 + Docs/types/RejuvinationAnkhWest.html | 13 + Docs/types/RelayInfo.html | 15 + Docs/types/ReleaseEntry.html | 11 + Docs/types/Relnia.html | 18 + Docs/types/RelocatedEntity.html | 12 + Docs/types/RemoteAdminHandlers.html | 17 + Docs/types/RemoveBuffPacket.html | 11 + Docs/types/RemoveCurseSpell.html | 18 + Docs/types/RemoveEntry.html | 11 + Docs/types/RemoveFacialHair.html | 10 + Docs/types/RemoveFromPartyEntry.html | 11 + Docs/types/RemoveGump.html | 11 + Docs/types/RemoveHair.html | 10 + Docs/types/RemoveItem.html | 10 + Docs/types/RemoveMobile.html | 10 + Docs/types/RemovePartyTarget.html | 11 + Docs/types/RemoveTrap.html | 13 + Docs/types/RemoveTrapSpell.html | 14 + Docs/types/RenameBoatPrompt.html | 11 + Docs/types/RenamePrompt.html | 11 + Docs/types/RenameRequestEventArgs.html | 13 + Docs/types/RenameRequestEventHandler.html | 13 + Docs/types/RenameRequests.html | 12 + Docs/types/RenounceYoungGump.html | 11 + Docs/types/RentTarget.html | 12 + Docs/types/RentalExpireTimer.html | 11 + Docs/types/RentedVendor.html | 30 + Docs/types/RenterVendorRentalGump.html | 12 + Docs/types/Repair.html | 13 + Docs/types/RepairDeed.html | 29 + Docs/types/RepairSkillInfo.html | 17 + Docs/types/RepairSkillType.html | 14 + Docs/types/RepeatingCrossbow.html | 31 + Docs/types/Report.html | 21 + Docs/types/ReportColumn.html | 19 + Docs/types/ReportColumnCollection.html | 20 + .../ReportColumnCollectionEnumerator.html | 14 + Docs/types/ReportItem.html | 15 + Docs/types/ReportItemCollection.html | 20 + .../types/ReportItemCollectionEnumerator.html | 14 + Docs/types/ReportMurdererGump.html | 17 + Docs/types/Reports.html | 29 + Docs/types/ReproductionGump.html | 15 + Docs/types/Reptalon.html | 22 + Docs/types/ReptalonFormTalisman.html | 14 + Docs/types/ResGate.html | 15 + Docs/types/ResetEquipTimer.html | 11 + Docs/types/ResetGameEntry.html | 11 + Docs/types/ResetTimer.html | 11 + Docs/types/ResilientBracer.html | 15 + Docs/types/ResistanceMod.html | 13 + Docs/types/ResistanceType.html | 14 + Docs/types/Resmelt.html | 12 + Docs/types/ResponseInfo.html | 18 + Docs/types/ResponseInfoCollection.html | 19 + .../ResponseInfoCollectionEnumerator.html | 14 + Docs/types/RestartTimer.html | 11 + Docs/types/RestlessSoul.html | 22 + Docs/types/RestockCommand.html | 11 + Docs/types/ResurrectEntry.html | 11 + Docs/types/ResurrectGump.html | 20 + Docs/types/ResurrectMessage.html | 13 + Docs/types/ResurrectionScroll.html | 14 + Docs/types/ResurrectionSpell.html | 14 + .../types/RetrieveAbraxusScrollObjective.html | 12 + Docs/types/ReturnAfterKillsObjective.html | 12 + Docs/types/ReturnAfterWaterObjective.html | 12 + Docs/types/ReturnAutographConversation.html | 12 + Docs/types/ReturnAutographObjective.html | 12 + Docs/types/ReturnDaemonBloodObjective.html | 12 + Docs/types/ReturnDaemonBoneObjective.html | 12 + Docs/types/ReturnFertileDirtObjective.html | 12 + Docs/types/ReturnFromInnConversation.html | 12 + Docs/types/ReturnFromInnObjective.html | 12 + Docs/types/ReturnImagesConversation.html | 12 + Docs/types/ReturnImagesObjective.html | 12 + Docs/types/ReturnIngredientsObjective.html | 12 + Docs/types/ReturnObjective.html | 12 + Docs/types/ReturnPaintingConversation.html | 12 + Docs/types/ReturnPaintingObjective.html | 12 + Docs/types/ReturnPearlsConversation.html | 12 + Docs/types/ReturnPearlsObjective.html | 12 + Docs/types/ReturnRecipeObjective.html | 12 + Docs/types/ReturnScrollOfPowerObjective.html | 12 + Docs/types/ReturnSheetMusicObjective.html | 12 + Docs/types/ReturnSwordConversation.html | 12 + Docs/types/ReturnSwordObjective.html | 13 + Docs/types/ReturnToCrystalCaveObjective.html | 13 + Docs/types/ReturnToNaturalistObjective.html | 12 + Docs/types/ReturnToysObjective.html | 11 + Docs/types/ReturnVendorEntry.html | 11 + Docs/types/RevealScroll.html | 14 + Docs/types/RevealSpell.html | 15 + Docs/types/Revenant.html | 24 + Docs/types/RevenantLion.html | 23 + Docs/types/RewardBlackDyeTub.html | 17 + Docs/types/RewardBrazier.html | 22 + Docs/types/RewardBrazierDeed.html | 18 + Docs/types/RewardCake.html | 16 + Docs/types/RewardCalculator.html | 22 + Docs/types/RewardCategory.html | 14 + Docs/types/RewardChoiceGump.html | 16 + Docs/types/RewardCloak.html | 24 + Docs/types/RewardConfirmGump.html | 11 + Docs/types/RewardDemolitionGump.html | 12 + Docs/types/RewardDress.html | 24 + Docs/types/RewardEntry.html | 21 + Docs/types/RewardGroup.html | 13 + Docs/types/RewardItem.html | 15 + Docs/types/RewardList.html | 12 + Docs/types/RewardNoticeGump.html | 11 + Docs/types/RewardOption.html | 12 + Docs/types/RewardOptionGump.html | 13 + Docs/types/RewardOptionList.html | 11 + Docs/types/RewardPottedCactus.html | 16 + Docs/types/RewardRobe.html | 24 + Docs/types/RewardSystem.html | 28 + Docs/types/RewardType.html | 13 + Docs/types/RibCage.html | 14 + Docs/types/Ribs.html | 14 + Docs/types/RidableLlama.html | 17 + Docs/types/RideablePolarBear.html | 15 + Docs/types/Ridgeback.html | 19 + Docs/types/RidingSwipe.html | 14 + Docs/types/RightArm.html | 13 + Docs/types/RightLeg.html | 13 + Docs/types/RighteousAnger.html | 16 + Docs/types/Rikktor.html | 29 + Docs/types/RingOfTheElements.html | 15 + Docs/types/RingOfTheVile.html | 15 + Docs/types/RingmailArms.html | 25 + Docs/types/RingmailChest.html | 25 + Docs/types/RingmailGloves.html | 26 + Docs/types/RingmailGlovesOfMining.html | 26 + Docs/types/RingmailLegs.html | 25 + Docs/types/RoastPig.html | 14 + Docs/types/Robe.html | 22 + Docs/types/RobeOfTheEclipse.html | 14 + Docs/types/RobeOfTheEquinox.html | 14 + Docs/types/RockArtifact.html | 14 + Docs/types/RockTimer.html | 12 + Docs/types/RollingPin.html | 15 + Docs/types/Ronin.html | 19 + Docs/types/Rope.html | 14 + Docs/types/RoseInAVase.html | 14 + Docs/types/RoseOfTrinsic.html | 22 + Docs/types/RoseOfTrinsicPetal.html | 16 + Docs/types/RottingCorpse.html | 19 + Docs/types/RoundPaperLantern.html | 15 + Docs/types/RoyalCirclet.html | 26 + Docs/types/RoyalGuardSurvivalKnife.html | 17 + Docs/types/Ruby.html | 15 + Docs/types/RuinedArmoire.html | 13 + Docs/types/RuinedBookcase.html | 13 + Docs/types/RuinedBooks.html | 13 + Docs/types/RuinedChair.html | 13 + Docs/types/RuinedClock.html | 13 + Docs/types/RuinedDrawers.html | 13 + Docs/types/RuinedFallenChairA.html | 13 + Docs/types/RuinedFallenChairB.html | 13 + Docs/types/RuinedPainting.html | 13 + Docs/types/RuinedPaintingArtifact.html | 14 + Docs/types/RuneBeetle.html | 26 + Docs/types/RuneBeetleCarapace.html | 18 + Docs/types/RuneBlade.html | 29 + Docs/types/RuneCarvingKnife.html | 14 + Docs/types/Runebook.html | 38 + Docs/types/RunebookDyeTub.html | 22 + Docs/types/RunebookEntry.html | 16 + Docs/types/RunebookGump.html | 19 + Docs/types/RunedPrism.html | 14 + Docs/types/RunedSwitch.html | 16 + Docs/types/RunicDovetailSaw.html | 17 + Docs/types/RunicHammer.html | 17 + Docs/types/RunicSewingKit.html | 17 + Docs/types/SBAlchemist.html | 13 + Docs/types/SBAnimalTrainer.html | 13 + Docs/types/SBArchitect.html | 13 + Docs/types/SBAxeWeapon.html | 13 + Docs/types/SBBaker.html | 13 + Docs/types/SBBanker.html | 13 + Docs/types/SBBard.html | 13 + Docs/types/SBBarkeeper.html | 13 + Docs/types/SBBeekeeper.html | 13 + Docs/types/SBBlacksmith.html | 13 + Docs/types/SBBowyer.html | 13 + Docs/types/SBButcher.html | 13 + Docs/types/SBCarpenter.html | 13 + Docs/types/SBChainmailArmor.html | 13 + Docs/types/SBCobbler.html | 13 + Docs/types/SBCook.html | 13 + Docs/types/SBDryad.html | 13 + Docs/types/SBFactionBoard.html | 13 + Docs/types/SBFactionBottle.html | 13 + Docs/types/SBFactionOre.html | 13 + Docs/types/SBFactionReagent.html | 13 + Docs/types/SBFarmer.html | 13 + Docs/types/SBFisherman.html | 13 + Docs/types/SBFortuneTeller.html | 13 + Docs/types/SBFurtrader.html | 13 + Docs/types/SBGlassblower.html | 13 + Docs/types/SBHairStylist.html | 13 + Docs/types/SBHealer.html | 13 + Docs/types/SBHelmetArmor.html | 13 + Docs/types/SBHerbalist.html | 13 + Docs/types/SBHolyMage.html | 13 + Docs/types/SBHouseDeed.html | 13 + Docs/types/SBInfo.html | 13 + Docs/types/SBInnKeeper.html | 13 + Docs/types/SBJewel.html | 13 + Docs/types/SBKeeperOfChivalry.html | 13 + Docs/types/SBKnifeWeapon.html | 13 + Docs/types/SBLeatherArmor.html | 13 + Docs/types/SBLeatherWorker.html | 13 + Docs/types/SBMaceWeapon.html | 13 + Docs/types/SBMage.html | 13 + Docs/types/SBMapmaker.html | 13 + Docs/types/SBMetalShields.html | 13 + Docs/types/SBMiller.html | 13 + Docs/types/SBMiner.html | 13 + Docs/types/SBMonk.html | 13 + Docs/types/SBPlateArmor.html | 13 + Docs/types/SBPlayerBarkeeper.html | 13 + Docs/types/SBPoleArmWeapon.html | 13 + Docs/types/SBProvisioner.html | 13 + Docs/types/SBRancher.html | 13 + Docs/types/SBRangedWeapon.html | 13 + Docs/types/SBRanger.html | 13 + Docs/types/SBRealEstateBroker.html | 13 + Docs/types/SBRingmailArmor.html | 13 + Docs/types/SBSEArmor.html | 13 + Docs/types/SBSEBowyer.html | 13 + Docs/types/SBSECarpenter.html | 13 + Docs/types/SBSECook.html | 13 + Docs/types/SBSEFood.html | 13 + Docs/types/SBSEHats.html | 13 + Docs/types/SBSELeatherArmor.html | 13 + Docs/types/SBSEWeapons.html | 13 + Docs/types/SBScribe.html | 13 + Docs/types/SBShipwright.html | 13 + Docs/types/SBSmithTools.html | 13 + Docs/types/SBSpearForkWeapon.html | 13 + Docs/types/SBStavesWeapon.html | 13 + Docs/types/SBStoneCrafter.html | 13 + Docs/types/SBStuddedArmor.html | 13 + Docs/types/SBSwordWeapon.html | 13 + Docs/types/SBTailor.html | 13 + Docs/types/SBTanner.html | 13 + Docs/types/SBTavernKeeper.html | 13 + Docs/types/SBThief.html | 13 + Docs/types/SBTinker.html | 13 + Docs/types/SBVagabond.html | 13 + Docs/types/SBVarietyDealer.html | 13 + Docs/types/SBVeterinarian.html | 13 + Docs/types/SBWaiter.html | 13 + Docs/types/SBWeaponSmith.html | 13 + Docs/types/SBWeaver.html | 13 + Docs/types/SBWoodenShields.html | 13 + Docs/types/SHTeleComponent.html | 22 + Docs/types/SHTeleporter.html | 26 + Docs/types/SHTeleporterCreator.html | 16 + Docs/types/SLWarHorse.html | 13 + Docs/types/SOS.html | 26 + Docs/types/SackFlour.html | 15 + Docs/types/SacredJourneySpell.html | 21 + Docs/types/SacrificeTarget.html | 11 + Docs/types/SacrificeVirtue.html | 17 + Docs/types/SacrificialAltarAddon.html | 22 + Docs/types/SacrificialAltarDeed.html | 15 + Docs/types/SaddleArtifact.html | 14 + Docs/types/Sai.html | 32 + Docs/types/SakeArtifact.html | 14 + Docs/types/SalvageAllEntry.html | 11 + Docs/types/SalvageBag.html | 23 + Docs/types/SalvageClothEntry.html | 11 + Docs/types/SalvageIngotsEntry.html | 11 + Docs/types/SamaritanRobe.html | 18 + Docs/types/Samurai.html | 15 + Docs/types/SamuraiHelm.html | 22 + Docs/types/SamuraiMove.html | 13 + Docs/types/SamuraiSpell.html | 27 + Docs/types/SamuraiTabi.html | 14 + Docs/types/Sand.html | 17 + Docs/types/SandFlagstones.html | 13 + Docs/types/SandGreenThornsEffect.html | 11 + Docs/types/SandMiningBook.html | 15 + Docs/types/SandStonePatio.html | 19 + Docs/types/SandVortex.html | 17 + Docs/types/Sandals.html | 16 + Docs/types/SandstoneFireplaceEastAddon.html | 14 + Docs/types/SandstoneFireplaceEastDeed.html | 15 + Docs/types/SandstoneFireplaceSouthAddon.html | 14 + Docs/types/SandstoneFireplaceSouthDeed.html | 15 + Docs/types/SandstoneFloorN.html | 13 + Docs/types/SandstoneFloorW.html | 13 + Docs/types/SandstoneFountainAddon.html | 13 + Docs/types/SandstonePatioDeed.html | 16 + Docs/types/Sapphire.html | 15 + Docs/types/Satyr.html | 23 + Docs/types/Sausage.html | 14 + Docs/types/SausagePizza.html | 14 + Docs/types/Savage.html | 21 + Docs/types/SavageMask.html | 23 + Docs/types/SavageRider.html | 22 + Docs/types/SavageRidgeback.html | 19 + Docs/types/SavageShaman.html | 24 + Docs/types/SaveFlag.html | 18 + Docs/types/SaveFlags.html | 14 + Docs/types/SaveMetrics.html | 15 + Docs/types/SaveOption.html | 11 + Docs/types/SaveStrategy.html | 15 + Docs/types/Saw.html | 15 + Docs/types/SawTrap.html | 21 + Docs/types/SawTrapType.html | 13 + Docs/types/ScaleType.html | 16 + Docs/types/ScaledSwampDragon.html | 17 + Docs/types/Scales.html | 15 + Docs/types/ScarecrowAddon.html | 14 + Docs/types/ScarecrowComponent.html | 14 + Docs/types/ScarecrowDeed.html | 15 + Docs/types/Scepter.html | 27 + Docs/types/Schmendrick.html | 20 + Docs/types/SchmendrickApprenticeCorpse.html | 23 + Docs/types/SchmendrickConversation.html | 13 + Docs/types/SchmendrickScrollOfPower.html | 15 + Docs/types/Scimitar.html | 28 + Docs/types/Scissors.html | 15 + Docs/types/ScoreEntry.html | 13 + Docs/types/Scorp.html | 15 + Docs/types/Scorpion.html | 19 + Docs/types/Scourge.html | 15 + Docs/types/Scribe.html | 18 + Docs/types/ScribeBag.html | 15 + Docs/types/ScribeStone.html | 15 + Docs/types/ScribesPen.html | 16 + Docs/types/ScriptCompiler.html | 36 + Docs/types/ScrollMessage.html | 10 + Docs/types/ScrollOfAbraxus.html | 17 + Docs/types/ScrollOfAbraxusGump.html | 10 + Docs/types/ScrollofAlacrity.html | 21 + Docs/types/ScrollofTranscendence.html | 21 + Docs/types/Sculptor.html | 14 + Docs/types/Sculpture1Artifact.html | 14 + Docs/types/Sculpture2Artifact.html | 14 + Docs/types/Scythe.html | 28 + Docs/types/SeaChart.html | 15 + Docs/types/SeaHorse.html | 14 + Docs/types/SeaSerpent.html | 20 + Docs/types/SeahorseStatuette.html | 13 + Docs/types/SearchForSwordConversation.html | 12 + Docs/types/SearchForSwordObjective.html | 12 + Docs/types/SearchSelectionCallback.html | 13 + Docs/types/SeasonChange.html | 13 + Docs/types/SecondHorusConversation.html | 12 + Docs/types/SecondKillObjective.html | 14 + Docs/types/SecondTrialAttackConversation.html | 12 + Docs/types/SecondTrialAttackObjective.html | 11 + Docs/types/SecondTrialIntroConversation.html | 15 + Docs/types/SecondTrialIntroObjective.html | 12 + Docs/types/SecondTrialReturnObjective.html | 16 + Docs/types/SecretDungeonDoor.html | 13 + Docs/types/SecretLightWoodDoor.html | 13 + Docs/types/SecretStoneDoor1.html | 13 + Docs/types/SecretStoneDoor2.html | 13 + Docs/types/SecretStoneDoor3.html | 13 + Docs/types/SecretWoodenDoor.html | 13 + Docs/types/Sector.html | 35 + Docs/types/SectorEnumerator.html | 18 + Docs/types/SectorEnumeratorType.html | 12 + Docs/types/SecureAccessResult.html | 12 + Docs/types/SecureInfo.html | 14 + Docs/types/SecureLevel.html | 14 + Docs/types/SecureTarget.html | 12 + Docs/types/SecureTrade.html | 18 + Docs/types/SecureTradeContainer.html | 22 + Docs/types/SecureTradeEquip.html | 10 + Docs/types/SecureTradeEquip6017.html | 10 + Docs/types/SecureTradeInfo.html | 14 + Docs/types/Seed.html | 26 + Docs/types/SeekerOfAdventure.html | 17 + Docs/types/SeerRobe.html | 13 + Docs/types/SelectSkillGump.html | 11 + Docs/types/SelfCommandImplementor.html | 11 + Docs/types/SellItemResponse.html | 12 + Docs/types/SellItemState.html | 13 + Docs/types/Semidar.html | 26 + Docs/types/SendQueue.html | 21 + Docs/types/SendQueueEntry.html | 10 + Docs/types/SendTarget.html | 11 + Docs/types/Sequence.html | 10 + Docs/types/SequentialFileWriter.html | 23 + Docs/types/Serado.html | 31 + Docs/types/Serial.html | 23 + Docs/types/SerialCommandImplementor.html | 11 + Docs/types/SerpentPillar.html | 20 + Docs/types/SerpentPillarAddon.html | 13 + Docs/types/SerpentineDragon.html | 30 + Docs/types/SerpentsFang.html | 18 + Docs/types/ServantOfSemidar.html | 17 + Docs/types/ServerChange.html | 10 + Docs/types/ServerInfo.html | 10 + Docs/types/ServerList.html | 17 + Docs/types/ServerListEventArgs.html | 16 + Docs/types/ServerListEventHandler.html | 13 + Docs/types/ServerStartedEventHandler.html | 13 + Docs/types/SetAbilityEventArgs.html | 12 + Docs/types/SetAbilityEventHandler.html | 13 + Docs/types/SetArrow.html | 10 + Docs/types/SetArrowHS.html | 10 + Docs/types/SetBodyGump.html | 17 + Docs/types/SetCommand.html | 11 + Docs/types/SetCustomEnumGump.html | 11 + Docs/types/SetGump.html | 12 + Docs/types/SetListOptionGump.html | 13 + Docs/types/SetObjectGump.html | 12 + Docs/types/SetObjectTarget.html | 12 + Docs/types/SetPoint2DGump.html | 12 + Docs/types/SetPoint3DGump.html | 12 + Docs/types/SetPricePrompt.html | 11 + Docs/types/SetSecureLevelEntry.html | 13 + Docs/types/SetSecureLevelGump.html | 13 + Docs/types/SetTimeSpanGump.html | 12 + Docs/types/SetTitlePrompt.html | 12 + Docs/types/SetToDecorativeGump.html | 12 + Docs/types/SetWarMode.html | 11 + Docs/types/SettleTimer.html | 11 + Docs/types/SeventhTrialIntroConversation.html | 12 + Docs/types/SeventhTrialIntroObjective.html | 14 + Docs/types/SeventhTrialReturnObjective.html | 12 + Docs/types/Sewerrat.html | 16 + Docs/types/SewingKit.html | 15 + Docs/types/Sextant.html | 17 + Docs/types/SextantParts.html | 14 + Docs/types/Shade.html | 17 + Docs/types/ShadowDancerLeggings.html | 20 + Docs/types/ShadowFiend.html | 23 + Docs/types/ShadowIronElemental.html | 23 + Docs/types/ShadowIronGranite.html | 13 + Docs/types/ShadowIronIngot.html | 14 + Docs/types/ShadowIronOre.html | 15 + Docs/types/ShadowKnight.html | 30 + Docs/types/ShadowStrike.html | 15 + Docs/types/ShadowWisp.html | 14 + Docs/types/ShadowWispFamiliar.html | 15 + Docs/types/ShadowWyrm.html | 27 + Docs/types/Shadowjump.html | 19 + Docs/types/Shadowlords.html | 11 + Docs/types/Shaft.html | 17 + Docs/types/ShaminoCrossbow.html | 16 + Docs/types/ShardPollGump.html | 15 + Docs/types/ShardPollOption.html | 20 + Docs/types/ShardPollPrompt.html | 14 + Docs/types/ShardPoller.html | 31 + Docs/types/ShardThrasher.html | 14 + Docs/types/SharedAccountComparer.html | 11 + Docs/types/SheafOfHay.html | 13 + Docs/types/Sheep.html | 20 + Docs/types/SheetMusicOfferGump.html | 11 + Docs/types/ShepherdsCrook.html | 28 + Docs/types/SheriffGump.html | 12 + Docs/types/ShieldOfInvulnerability.html | 22 + Docs/types/ShipModelOfTheHMSCape.html | 14 + Docs/types/ShipwreckedItem.html | 17 + Docs/types/Shipwright.html | 16 + Docs/types/Shirt.html | 14 + Docs/types/Shoes.html | 15 + Docs/types/ShojiLantern.html | 15 + Docs/types/ShojiScreen.html | 13 + Docs/types/ShopFlags.html | 20 + Docs/types/ShopInfo.html | 10 + Docs/types/ShopNamePrompt.html | 11 + Docs/types/ShortBeard.html | 14 + Docs/types/ShortCabinet.html | 13 + Docs/types/ShortHair.html | 14 + Docs/types/ShortMusicStand.html | 13 + Docs/types/ShortPants.html | 14 + Docs/types/ShortSpear.html | 28 + Docs/types/Shovel.html | 15 + Docs/types/ShowStew.html | 11 + Docs/types/ShrineOfWisdomAddon.html | 13 + Docs/types/ShrineOfWisdomComponent.html | 14 + Docs/types/ShrinkTable.html | 15 + Docs/types/ShroudOfDeciet.html | 22 + Docs/types/Shuriken.html | 20 + Docs/types/ShutdownEventArgs.html | 10 + Docs/types/ShutdownEventHandler.html | 13 + Docs/types/Sigil.html | 43 + Docs/types/Sign.html | 15 + Docs/types/SignEntry.html | 10 + Docs/types/SignFacing.html | 11 + Docs/types/SignParser.html | 15 + Docs/types/SignType.html | 70 + Docs/types/Silvani.html | 22 + Docs/types/SilvanisFeywoodBow.html | 15 + Docs/types/Silver.html | 17 + Docs/types/SilverBeadNecklace.html | 13 + Docs/types/SilverBracelet.html | 13 + Docs/types/SilverEarrings.html | 13 + Docs/types/SilverGivenEntry.html | 13 + Docs/types/SilverNecklace.html | 13 + Docs/types/SilverRing.html | 14 + Docs/types/SilverSerpent.html | 20 + Docs/types/SilverSteed.html | 14 + Docs/types/SilverWire.html | 14 + Docs/types/SimplePrompt.html | 14 + Docs/types/SimpleStatePrompt-T-.html | 14 + Docs/types/SimpleStatePrompt.html | 14 + Docs/types/SimpleStateTarget-T-.html | 11 + Docs/types/SimpleStateTarget.html | 11 + Docs/types/SimpleTarget.html | 11 + Docs/types/SingleCommandImplementor.html | 14 + Docs/types/SitOnTheStoolObjective.html | 13 + Docs/types/SixthTrialIntroConversation.html | 15 + Docs/types/SixthTrialIntroObjective.html | 12 + Docs/types/SixthTrialReturnObjective.html | 12 + Docs/types/SkaraBrae.html | 10 + Docs/types/SkeletalDragon.html | 26 + Docs/types/SkeletalKnight.html | 16 + Docs/types/SkeletalMage.html | 17 + Docs/types/SkeletalMount.html | 16 + Docs/types/Skeleton.html | 17 + Docs/types/Skill.html | 29 + Docs/types/SkillChange.html | 10 + Docs/types/SkillCheck.html | 23 + .../SkillCheckDirectLocationHandler.html | 13 + Docs/types/SkillCheckDirectTargetHandler.html | 13 + Docs/types/SkillCheckLocationHandler.html | 13 + Docs/types/SkillCheckTargetHandler.html | 13 + Docs/types/SkillDistribution.html | 11 + Docs/types/SkillInfo.html | 23 + Docs/types/SkillLock.html | 12 + Docs/types/SkillLossContext.html | 10 + Docs/types/SkillMod.html | 19 + Docs/types/SkillName.html | 67 + Docs/types/SkillNameComparer.html | 11 + Docs/types/SkillNameValue.html | 12 + Docs/types/SkillTarget.html | 12 + Docs/types/SkillTeleporter.html | 20 + Docs/types/SkillUpdate.html | 10 + Docs/types/SkillUseCallback.html | 13 + Docs/types/Skillet.html | 16 + Docs/types/Skills.html | 14 + Docs/types/SkillsCommand.html | 15 + Docs/types/SkillsGump.html | 13 + Docs/types/SkillsGumpGroup.html | 14 + Docs/types/SkillsTarget.html | 11 + Docs/types/SkinnedDeerArtifact.html | 14 + Docs/types/SkinnedGoatArtifact.html | 14 + Docs/types/SkinningKnife.html | 27 + Docs/types/Skirt.html | 14 + Docs/types/SkitteringHopper.html | 15 + Docs/types/SkullCandleArtifact.html | 14 + Docs/types/SkullCap.html | 21 + Docs/types/SkullPileAddon.html | 13 + Docs/types/SkullPole.html | 13 + Docs/types/SlabOfBacon.html | 14 + Docs/types/SlayHenchmenConversation.html | 12 + Docs/types/SlayHenchmenObjective.html | 15 + Docs/types/SlayerEntry.html | 15 + Docs/types/SlayerGroup.html | 20 + Docs/types/SlayerName.html | 37 + Docs/types/SledgeHammer.html | 15 + Docs/types/Slice.html | 13 + Docs/types/SliceTimer.html | 11 + Docs/types/Slime.html | 17 + Docs/types/SlowAStarAlgorithm.html | 13 + Docs/types/SmallBOD.html | 34 + Docs/types/SmallBODAcceptGump.html | 12 + Docs/types/SmallBODGump.html | 12 + Docs/types/SmallBODTarget.html | 11 + Docs/types/SmallBagBall.html | 13 + Docs/types/SmallBedEastAddon.html | 14 + Docs/types/SmallBedEastDeed.html | 15 + Docs/types/SmallBedSouthAddon.html | 14 + Docs/types/SmallBedSouthDeed.html | 15 + Docs/types/SmallBlueBottle.html | 13 + Docs/types/SmallBlueFlask.html | 13 + Docs/types/SmallBoat.html | 23 + Docs/types/SmallBoatDeed.html | 15 + Docs/types/SmallBrickHouseDeed.html | 16 + Docs/types/SmallBrownBottle.html | 13 + Docs/types/SmallBulkEntry.html | 20 + Docs/types/SmallCrate.html | 13 + Docs/types/SmallDockedBoat.html | 14 + Docs/types/SmallDockedDragonBoat.html | 14 + Docs/types/SmallDragonBoat.html | 23 + Docs/types/SmallDragonBoatDeed.html | 15 + Docs/types/SmallEmptyFlask.html | 13 + Docs/types/SmallEmptyPot.html | 13 + Docs/types/SmallFishingNetAddon.html | 14 + Docs/types/SmallFishingNetComponent.html | 14 + Docs/types/SmallFishingNetDeed.html | 15 + Docs/types/SmallFlask.html | 13 + Docs/types/SmallForgeAddon.html | 14 + Docs/types/SmallForgeDeed.html | 15 + Docs/types/SmallGreenBottle.html | 13 + Docs/types/SmallGreenBottle2.html | 13 + Docs/types/SmallOldHouse.html | 18 + Docs/types/SmallPlateJingasa.html | 24 + Docs/types/SmallPumpkin.html | 14 + Docs/types/SmallRedFlask.html | 13 + Docs/types/SmallShop.html | 18 + Docs/types/SmallSmithBOD.html | 19 + Docs/types/SmallStretchedHideEastAddon.html | 14 + Docs/types/SmallStretchedHideEastDeed.html | 15 + Docs/types/SmallStretchedHideSouthAddon.html | 14 + Docs/types/SmallStretchedHideSouthDeed.html | 15 + Docs/types/SmallTailorBOD.html | 19 + Docs/types/SmallTower.html | 18 + Docs/types/SmallTowerDeed.html | 16 + Docs/types/SmallTowerSculpture.html | 13 + Docs/types/SmallUrn.html | 13 + Docs/types/SmallVioletBottle.html | 13 + Docs/types/SmallWatermelon.html | 14 + Docs/types/SmallYellowFlask.html | 13 + Docs/types/SmeltResult.html | 12 + Docs/types/SmithBag.html | 14 + Docs/types/SmithHammer.html | 15 + Docs/types/SmithRewardCalculator.html | 23 + Docs/types/SmithStone.html | 15 + Docs/types/SmokeBomb.html | 14 + Docs/types/SmoothingPlane.html | 15 + Docs/types/Snake.html | 18 + Docs/types/Snapshot.html | 18 + Docs/types/SnapshotCollection.html | 18 + Docs/types/SnapshotCollectionEnumerator.html | 14 + Docs/types/SnapshotHistory.html | 17 + .../types/SneakPastGuardiansConversation.html | 12 + Docs/types/SneakPastGuardiansObjective.html | 16 + Docs/types/Snooping.html | 13 + Docs/types/SnowElemental.html | 16 + Docs/types/SnowGreenThornsEffect.html | 11 + Docs/types/SnowLeopard.html | 17 + Docs/types/SnowPile.html | 16 + Docs/types/SnowPileDeco.html | 16 + Docs/types/SnowTarget.html | 11 + Docs/types/Snowman.html | 20 + Docs/types/SnowyTree.html | 15 + Docs/types/SocketConnectEventArgs.html | 12 + Docs/types/SocketConnectEventHandler.html | 13 + Docs/types/SocketOptions.html | 12 + Docs/types/SolenAntHole.html | 20 + Docs/types/SolenAntHoleComponent.html | 14 + Docs/types/SolenFriendship.html | 12 + Docs/types/SolenHelper.html | 15 + Docs/types/SolenMatriarchQuest.html | 23 + Docs/types/SongOfSamlethe.html | 14 + Docs/types/SongWovenMantle.html | 17 + Docs/types/SortCompiler.html | 11 + Docs/types/SortExtension.html | 16 + Docs/types/SortMethod.html | 13 + Docs/types/SoulSeeker.html | 17 + Docs/types/SoulStone.html | 31 + Docs/types/SoulstoneFragment.html | 21 + Docs/types/SoulstoneFragmentToken.html | 17 + Docs/types/SoundEffectTimer.html | 11 + Docs/types/SoundTimer.html | 11 + Docs/types/Spam.html | 13 + Docs/types/SpawnDefinition.html | 14 + Docs/types/SpawnEntry.html | 53 + Docs/types/SpawnGroup.html | 16 + Docs/types/SpawnGroupElement.html | 12 + Docs/types/SpawnItem.html | 18 + Docs/types/SpawnMobile.html | 17 + Docs/types/SpawnPersistence.html | 16 + Docs/types/SpawnTimer.html | 11 + Docs/types/SpawnTreasureChest.html | 14 + Docs/types/SpawnType.html | 20 + Docs/types/SpawnZLevel.html | 12 + Docs/types/SpawnedOrcishLord.html | 14 + Docs/types/Spawner.html | 58 + Docs/types/SpawnerGump.html | 12 + Docs/types/SpawnerType.html | 11 + Docs/types/SpeakCavePasswordObjective.html | 12 + Docs/types/SpeakPasswordEntry.html | 11 + Docs/types/Spear.html | 26 + Docs/types/SpecialBeardDye.html | 15 + Docs/types/SpecialBeardDyeEntry.html | 13 + Docs/types/SpecialBeardDyeGump.html | 12 + Docs/types/SpecialDyeTub.html | 18 + Docs/types/SpecialEndConversation.html | 12 + Docs/types/SpecialFishingNet.html | 24 + Docs/types/SpecialHairDye.html | 15 + Docs/types/SpecialHairDyeEntry.html | 13 + Docs/types/SpecialHairDyeGump.html | 12 + Docs/types/SpecialMove.html | 44 + Docs/types/SpecialMoveContext.html | 12 + Docs/types/SpecialMoveTimer.html | 11 + Docs/types/SpecialScroll.html | 26 + Docs/types/SpectralArmour.html | 18 + Docs/types/Spectre.html | 17 + Docs/types/SpeechEntry.html | 12 + Docs/types/SpeechEntrySorter.html | 11 + Docs/types/SpeechEventArgs.html | 18 + Docs/types/SpeechEventHandler.html | 13 + Docs/types/SpeechLog.html | 20 + Docs/types/SpeechLogEntry.html | 13 + Docs/types/SpeechLogGump.html | 13 + Docs/types/SpeechLogTarget.html | 11 + Docs/types/SpeedControl.html | 10 + Docs/types/SpeedInfo.html | 16 + Docs/types/Spell.html | 85 + Docs/types/SpellCircle.html | 17 + Docs/types/SpellCombo.html | 13 + Docs/types/SpellDamageTimer.html | 11 + Docs/types/SpellDamageTimerAOS.html | 11 + Docs/types/SpellHelper.html | 76 + Docs/types/SpellInfo.html | 24 + Docs/types/SpellRegistry.html | 20 + Docs/types/SpellScroll.html | 20 + Docs/types/SpellState.html | 12 + Docs/types/SpellWovenBritches.html | 16 + Docs/types/Spellbook.html | 59 + Docs/types/SpellbookContent.html | 10 + Docs/types/SpellbookContent6017.html | 10 + Docs/types/SpellbookType.html | 16 + Docs/types/SpellweavingBook.html | 17 + Docs/types/SpidersSilk.html | 16 + Docs/types/SpikeTrap.html | 26 + Docs/types/SpikeTrapType.html | 13 + Docs/types/SpinCallback.html | 13 + Docs/types/SpinTimer.html | 11 + Docs/types/SpinedHides.html | 15 + Docs/types/SpinedLeather.html | 14 + Docs/types/SpinningHourglass.html | 13 + Docs/types/SpinningwheelEastAddon.html | 19 + Docs/types/SpinningwheelEastDeed.html | 15 + Docs/types/SpinningwheelSouthAddon.html | 19 + Docs/types/SpinningwheelSouthDeed.html | 15 + Docs/types/SpiritOfTheTotem.html | 18 + Docs/types/SpiritSpeak.html | 13 + Docs/types/SpiritSpeakSpell.html | 23 + Docs/types/SpiritSpeakTimer.html | 11 + Docs/types/SplitCoconut.html | 14 + Docs/types/SpoolOfThread.html | 14 + Docs/types/Spoon.html | 13 + Docs/types/SpoonLeft.html | 13 + Docs/types/SpoonRight.html | 13 + Docs/types/Spreadsheet.html | 14 + Docs/types/Springs.html | 14 + Docs/types/Spyglass.html | 14 + Docs/types/SquareGozaMatEastAddon.html | 17 + Docs/types/SquareGozaMatEastDeed.html | 15 + Docs/types/SquareGozaMatSouthAddon.html | 16 + Docs/types/SquareGozaMatSouthDeed.html | 15 + Docs/types/Squash.html | 14 + Docs/types/Squirrel.html | 15 + Docs/types/SquirrelFormTalisman.html | 14 + Docs/types/SquirrelStatueEastAddon.html | 14 + Docs/types/SquirrelStatueEastDeed.html | 15 + Docs/types/SquirrelStatueSouthAddon.html | 14 + Docs/types/SquirrelStatueSouthDeed.html | 15 + Docs/types/StableEntry.html | 11 + Docs/types/StableTarget.html | 11 + Docs/types/StackEntry.html | 10 + Docs/types/StaffHistory.html | 32 + Docs/types/StaffInfo.html | 10 + Docs/types/StaffOfPower.html | 16 + Docs/types/StaffOfTheMagi.html | 18 + Docs/types/Stage.html | 14 + Docs/types/StainedOoze.html | 26 + Docs/types/StamTimer.html | 11 + Docs/types/StandardPlateKabuto.html | 24 + Docs/types/StandardSaveStrategy.html | 19 + Docs/types/StandingBrokenChairAddon.html | 14 + Docs/types/StandingBrokenChairComponent.html | 14 + Docs/types/StandingBrokenChairDeed.html | 15 + Docs/types/StarRoomGate.html | 18 + Docs/types/StarSapphire.html | 15 + Docs/types/Stat.html | 12 + Docs/types/StatCapScroll.html | 21 + Docs/types/StatLockInfo.html | 10 + Docs/types/StatLockType.html | 12 + Docs/types/StatMod.html | 14 + Docs/types/StatType.html | 13 + Docs/types/State.html | 15 + Docs/types/StateInfo.html | 10 + Docs/types/Static.html | 16 + Docs/types/StaticTarget.html | 17 + Docs/types/StaticTile.html | 19 + Docs/types/Statics.html | 29 + Docs/types/StatueEast.html | 14 + Docs/types/StatueEast2.html | 14 + Docs/types/StatueMaterial.html | 13 + Docs/types/StatueNorth.html | 14 + Docs/types/StatuePegasus.html | 14 + Docs/types/StatuePegasus2.html | 14 + Docs/types/StatuePose.html | 15 + Docs/types/StatueSouth.html | 14 + Docs/types/StatueSouth2.html | 14 + Docs/types/StatueSouthEast.html | 14 + Docs/types/StatueType.html | 12 + Docs/types/StatueWest.html | 14 + Docs/types/StatuetteDyeTub.html | 22 + Docs/types/StatusComparer.html | 12 + Docs/types/StatusGump.html | 10 + Docs/types/StatusPage.html | 13 + Docs/types/StealableArtifactsSpawner.html | 27 + Docs/types/StealableEntry.html | 18 + Docs/types/StealableInstance.html | 15 + Docs/types/Stealing.html | 16 + Docs/types/StealingTarget.html | 12 + Docs/types/Stealth.html | 14 + Docs/types/StitchersMittens.html | 16 + Docs/types/StolenItem.html | 20 + Docs/types/StoneAnkh.html | 19 + Docs/types/StoneAnkhComponent.html | 15 + Docs/types/StoneAnkhDeed.html | 20 + Docs/types/StoneChair.html | 13 + Docs/types/StoneCrafter.html | 16 + Docs/types/StoneFaceTrap.html | 25 + Docs/types/StoneFaceTrapNoDamage.html | 15 + Docs/types/StoneFaceTrapType.html | 12 + Docs/types/StoneFireplaceEastAddon.html | 14 + Docs/types/StoneFireplaceEastDeed.html | 15 + Docs/types/StoneFireplaceSouthAddon.html | 14 + Docs/types/StoneFireplaceSouthDeed.html | 15 + Docs/types/StoneFountainAddon.html | 14 + Docs/types/StoneGargoyle.html | 15 + Docs/types/StoneHarpy.html | 21 + Docs/types/StoneMiningBook.html | 15 + Docs/types/StoneOvenEastAddon.html | 14 + Docs/types/StoneOvenEastDeed.html | 15 + Docs/types/StoneOvenSouthAddon.html | 14 + Docs/types/StoneOvenSouthDeed.html | 15 + Docs/types/StonePaversDark.html | 13 + Docs/types/StonePaversLight.html | 13 + Docs/types/StonePaversMedium.html | 13 + Docs/types/StonePlasterHouseDeed.html | 16 + Docs/types/StoneStatueAddon.html | 14 + Docs/types/StoneStatueDeed.html | 18 + Docs/types/StoneWorkshopDeed.html | 16 + Docs/types/Stool.html | 13 + Docs/types/StopMusic.html | 10 + Docs/types/Stormgrip.html | 19 + Docs/types/Strandedness.html | 13 + Docs/types/StrangleScroll.html | 14 + Docs/types/StrangleSpell.html | 17 + Docs/types/StrawHat.html | 21 + Docs/types/StrengthPotion.html | 15 + Docs/types/StrengthScroll.html | 14 + Docs/types/StrengthSpell.html | 14 + Docs/types/StretchedHideArtifact.html | 14 + Docs/types/StringCondition.html | 12 + Docs/types/StringOperator.html | 14 + Docs/types/StrongBackpack.html | 16 + Docs/types/StrongBox.html | 26 + Docs/types/StrongBoxPuzzle.html | 13 + Docs/types/StrongMongbat.html | 17 + Docs/types/StrongWoodDoor.html | 13 + Docs/types/StrongholdDefinition.html | 14 + Docs/types/StrongholdMonolith.html | 16 + Docs/types/StrongholdRegion.html | 13 + Docs/types/StuckMenu.html | 16 + Docs/types/StuckMenuEntry.html | 12 + Docs/types/StuckMenuTarget.html | 11 + Docs/types/StuddedArms.html | 26 + Docs/types/StuddedBustierArms.html | 27 + Docs/types/StuddedChest.html | 27 + Docs/types/StuddedDo.html | 25 + Docs/types/StuddedGloves.html | 26 + Docs/types/StuddedGlovesOfMining.html | 26 + Docs/types/StuddedGorget.html | 26 + Docs/types/StuddedHaidate.html | 25 + Docs/types/StuddedHiroSode.html | 25 + Docs/types/StuddedLeggingsArtifact.html | 14 + Docs/types/StuddedLegs.html | 26 + Docs/types/StuddedMempo.html | 25 + Docs/types/StuddedSuneate.html | 25 + Docs/types/StuddedTunicArtifact.html | 14 + Docs/types/StudyNestsObjective.html | 20 + Docs/types/StudyOfSolenQuest.html | 21 + Docs/types/StudyState.html | 12 + Docs/types/StunRequestEventArgs.html | 11 + Docs/types/StunRequestEventHandler.html | 13 + Docs/types/SturdyPickaxe.html | 28 + Docs/types/SturdyShovel.html | 16 + Docs/types/Subdue.html | 17 + Docs/types/Succubus.html | 19 + Docs/types/SuitOfGoldArmorAddon.html | 14 + Docs/types/SuitOfGoldArmorComponent.html | 14 + Docs/types/SuitOfGoldArmorDeed.html | 15 + Docs/types/SuitOfSilverArmorAddon.html | 14 + Docs/types/SuitOfSilverArmorComponent.html | 14 + Docs/types/SuitOfSilverArmorDeed.html | 15 + Docs/types/SulfurousAsh.html | 16 + Docs/types/SummonAirElementalScroll.html | 14 + Docs/types/SummonCreatureScroll.html | 14 + Docs/types/SummonCreatureSpell.html | 14 + Docs/types/SummonDaemonScroll.html | 14 + Docs/types/SummonDaemonSpell.html | 13 + Docs/types/SummonEarthElementalScroll.html | 14 + Docs/types/SummonEntry.html | 10 + Docs/types/SummonFamiliar.html | 11 + Docs/types/SummonFamiliarEntry.html | 14 + Docs/types/SummonFamiliarGump.html | 11 + Docs/types/SummonFamiliarScroll.html | 14 + Docs/types/SummonFamiliarSpell.html | 17 + Docs/types/SummonFeyScroll.html | 14 + Docs/types/SummonFeySpell.html | 14 + Docs/types/SummonFiendScroll.html | 14 + Docs/types/SummonFiendSpell.html | 14 + Docs/types/SummonFireElementalScroll.html | 14 + Docs/types/SummonTimer.html | 11 + Docs/types/SummonWaterElementalScroll.html | 14 + Docs/types/SummonedAirElemental.html | 15 + Docs/types/SummonedAntLion.html | 13 + Docs/types/SummonedArcticOgreLord.html | 13 + Docs/types/SummonedBakeKitsune.html | 13 + Docs/types/SummonedBogling.html | 13 + Docs/types/SummonedBullFrog.html | 13 + Docs/types/SummonedChicken.html | 13 + Docs/types/SummonedCow.html | 13 + Docs/types/SummonedDaemon.html | 16 + Docs/types/SummonedDoppleganger.html | 13 + Docs/types/SummonedEarthElemental.html | 15 + Docs/types/SummonedFireElemental.html | 15 + Docs/types/SummonedFrostSpider.html | 13 + Docs/types/SummonedGreatHart.html | 13 + Docs/types/SummonedLavaSerpent.html | 15 + Docs/types/SummonedOrcBrute.html | 13 + Docs/types/SummonedPaladin.html | 20 + Docs/types/SummonedPaladinMoongate.html | 13 + Docs/types/SummonedPanther.html | 13 + Docs/types/SummonedSheep.html | 13 + Docs/types/SummonedSkeletalKnight.html | 13 + Docs/types/SummonedVorpalBunny.html | 14 + Docs/types/SummonedWailingBanshee.html | 13 + Docs/types/SummonedWaterElemental.html | 15 + Docs/types/SummoningAltar.html | 15 + Docs/types/SupportedFeatures.html | 12 + Docs/types/Surcoat.html | 14 + Docs/types/SurpriseAttack.html | 21 + Docs/types/SurpriseAttackInfo.html | 10 + Docs/types/SushiPlatter.html | 13 + Docs/types/SushiRolls.html | 13 + Docs/types/SwampDragon.html | 35 + Docs/types/SwampGreenThornsEffect.html | 11 + Docs/types/SwampTentacle.html | 15 + Docs/types/SwampTile.html | 13 + Docs/types/SwarmOfFlies.html | 14 + Docs/types/SweetDough.html | 15 + Docs/types/Swing.html | 10 + Docs/types/SwitchItem.html | 15 + Docs/types/SwordDisplay1NorthArtifact.html | 14 + Docs/types/SwordDisplay1WestArtifact.html | 14 + Docs/types/SwordDisplay2NorthArtifact.html | 14 + Docs/types/SwordDisplay2WestArtifact.html | 14 + Docs/types/SwordDisplay3EastArtifact.html | 14 + Docs/types/SwordDisplay3SouthArtifact.html | 14 + Docs/types/SwordDisplay4NorthArtifact.html | 14 + Docs/types/SwordDisplay4WestArtifact.html | 14 + Docs/types/SwordDisplay5NorthArtifact.html | 14 + Docs/types/SwordDisplay5WestArtifact.html | 14 + Docs/types/SwordOfTheStampede.html | 17 + Docs/types/SwordsOfProsperity.html | 17 + Docs/types/TBWarHorse.html | 13 + Docs/types/TCHelpGump.html | 11 + Docs/types/TableWithBlueClothAddon.html | 14 + Docs/types/TableWithBlueClothDeed.html | 15 + Docs/types/TableWithOrangeClothAddon.html | 14 + Docs/types/TableWithOrangeClothDeed.html | 15 + Docs/types/TableWithPurpleClothAddon.html | 14 + Docs/types/TableWithPurpleClothDeed.html | 15 + Docs/types/TableWithRedClothAddon.html | 14 + Docs/types/TableWithRedClothDeed.html | 15 + Docs/types/Tailor.html | 22 + Docs/types/TailorBag.html | 15 + Docs/types/TailorGuildmaster.html | 14 + Docs/types/TailorRewardCalculator.html | 20 + Docs/types/TailorStone.html | 15 + Docs/types/Taint.html | 15 + Docs/types/TaintedWool.html | 15 + Docs/types/TakeCareConversation.html | 12 + Docs/types/TaleOfThreeTribes.html | 14 + Docs/types/TalesOfVesperVol1.html | 14 + Docs/types/TalismanAttribute.html | 25 + Docs/types/TalismanForm.html | 13 + Docs/types/TalismanReleaseEntry.html | 11 + Docs/types/TalismanRemoval.html | 14 + Docs/types/TalismanSlayer.html | 11 + Docs/types/TalismanSlayerName.html | 19 + Docs/types/TalismanTarget.html | 11 + Docs/types/TalkEntry.html | 11 + Docs/types/TalkingToWisps.html | 14 + Docs/types/TallCabinet.html | 13 + Docs/types/TallElvenBedEastAddon.html | 14 + Docs/types/TallElvenBedEastDeed.html | 15 + Docs/types/TallElvenBedSouthAddon.html | 14 + Docs/types/TallElvenBedSouthDeed.html | 15 + Docs/types/TallMusicStand.html | 13 + Docs/types/TallStrawHat.html | 21 + Docs/types/TalonBite.html | 16 + Docs/types/TalonStrike.html | 16 + Docs/types/Tambourine.html | 13 + Docs/types/TambourineTassel.html | 13 + Docs/types/TameEntry.html | 11 + Docs/types/TamingDragons.html | 14 + Docs/types/TanBook.html | 16 + Docs/types/Tanner.html | 15 + Docs/types/Tapestry1N.html | 17 + Docs/types/Tapestry2N.html | 17 + Docs/types/Tapestry2W.html | 17 + Docs/types/Tapestry3N.html | 17 + Docs/types/Tapestry3W.html | 17 + Docs/types/Tapestry4N.html | 17 + Docs/types/Tapestry4W.html | 17 + Docs/types/Tapestry5N.html | 17 + Docs/types/Tapestry5W.html | 17 + Docs/types/Tapestry6N.html | 17 + Docs/types/Tapestry6W.html | 17 + Docs/types/TapestryOfSosaria.html | 18 + Docs/types/Target.html | 38 + Docs/types/TargetCallback.html | 13 + Docs/types/TargetCancelType.html | 13 + Docs/types/TargetCommands.html | 13 + Docs/types/TargetEffect.html | 10 + Docs/types/TargetFlags.html | 12 + Docs/types/TargetParticleEffect.html | 10 + Docs/types/TargetProfile.html | 12 + Docs/types/TargetReq.html | 10 + Docs/types/TargetStateCallback-T-.html | 13 + Docs/types/TargetStateCallback.html | 13 + Docs/types/TargetWeapon.html | 11 + Docs/types/TarotCardsArtifact.html | 14 + Docs/types/TasteID.html | 13 + Docs/types/TatteredAncientMummyWrapping.html | 14 + Docs/types/TattsukeHakama.html | 14 + Docs/types/TavaraSewel.html | 22 + Docs/types/TavarasJournal1.html | 14 + Docs/types/TavarasJournal11.html | 14 + Docs/types/TavarasJournal14.html | 14 + Docs/types/TavarasJournal16.html | 14 + Docs/types/TavarasJournal16b.html | 14 + Docs/types/TavarasJournal17.html | 14 + Docs/types/TavarasJournal19.html | 14 + Docs/types/TavarasJournal2.html | 14 + Docs/types/TavarasJournal3.html | 14 + Docs/types/TavarasJournal6.html | 14 + Docs/types/TavarasJournal7.html | 14 + Docs/types/TavarasJournal8.html | 14 + Docs/types/TavarasJournal9.html | 14 + Docs/types/TavernKeeper.html | 16 + Docs/types/TaxidermyKit.html | 16 + Docs/types/TeachEntry.html | 11 + Docs/types/TeachResult.html | 15 + Docs/types/TeapotNorthArtifact.html | 14 + Docs/types/TeapotWestArtifact.html | 14 + Docs/types/Tekagi.html | 31 + Docs/types/TeleCommand.html | 11 + Docs/types/TelekinesisSpell.html | 15 + Docs/types/TelekinisisScroll.html | 14 + Docs/types/TeleportScroll.html | 14 + Docs/types/TeleportSpell.html | 15 + Docs/types/TeleportTimer.html | 11 + Docs/types/Teleporter.html | 32 + Docs/types/TeleportersCreator.html | 22 + Docs/types/Telescope.html | 13 + Docs/types/TellCommand.html | 11 + Docs/types/TempNoHousingRegion.html | 12 + Docs/types/TerathanAvenger.html | 19 + Docs/types/TerathanDrone.html | 16 + Docs/types/TerathanMatriarch.html | 16 + Docs/types/TerathanWarrior.html | 17 + Docs/types/TerminateContractEntry.html | 11 + Docs/types/TerribleHatchlingsQuest.html | 18 + Docs/types/Tessen.html | 30 + Docs/types/TestCenter.html | 18 + Docs/types/Tetsubo.html | 30 + Docs/types/TextDefinition.html | 21 + Docs/types/TextRelay.html | 12 + Docs/types/ThatchedRoofCottageDeed.html | 16 + Docs/types/TheBeserkersMaul.html | 17 + Docs/types/TheDestroyer.html | 16 + Docs/types/TheDragonSlayer.html | 18 + Docs/types/TheDryadBow.html | 17 + Docs/types/TheFight.html | 14 + Docs/types/TheHorselord.html | 16 + Docs/types/TheMostKnowledgePerson.html | 18 + Docs/types/TheNightReaper.html | 14 + Docs/types/TheRobeOfBritanniaAri.html | 18 + Docs/types/TheSummoningQuest.html | 25 + Docs/types/TheTaskmaster.html | 18 + Docs/types/Theater.html | 12 + Docs/types/ThickGrayStoneWall.html | 13 + Docs/types/ThickGrayStoneWallTypes.html | 31 + Docs/types/Thief.html | 16 + Docs/types/ThiefAI.html | 14 + Docs/types/ThiefGuildmaster.html | 21 + Docs/types/ThighBoots.html | 22 + Docs/types/ThinBrickWall.html | 13 + Docs/types/ThinBrickWallTypes.html | 45 + Docs/types/ThinLongsword.html | 26 + Docs/types/ThinStoneWall.html | 13 + Docs/types/ThinStoneWallTypes.html | 34 + Docs/types/ThirdKillObjective.html | 16 + Docs/types/ThirdTrialIntroConversation.html | 15 + Docs/types/ThirdTrialIntroObjective.html | 12 + Docs/types/ThirdTrialKillConversation.html | 12 + Docs/types/ThirdTrialKillObjective.html | 13 + Docs/types/ThirdTrialReturnObjective.html | 12 + Docs/types/Throne.html | 13 + Docs/types/ThrottlePacketCallback.html | 13 + Docs/types/ThrowTarget.html | 12 + Docs/types/ThrowingDagger.html | 16 + Docs/types/ThunderstormScroll.html | 14 + Docs/types/ThunderstormSpell.html | 16 + Docs/types/TileData.html | 14 + Docs/types/TileFlag.html | 42 + Docs/types/TileList.html | 14 + Docs/types/TileMatrix.html | 33 + Docs/types/TileMatrixPatch.html | 15 + Docs/types/TileState.html | 12 + Docs/types/TilesAndEffect.html | 12 + Docs/types/TillerMan.html | 22 + Docs/types/TimberWolf.html | 17 + Docs/types/TimedSkillMod.html | 12 + Docs/types/TimeoutTimer.html | 11 + Docs/types/Timer.html | 40 + Docs/types/TimerCallback.html | 13 + Docs/types/TimerChangeEntry.html | 12 + Docs/types/TimerPriority.html | 17 + Docs/types/TimerProfile.html | 16 + Docs/types/TimerStateCallback-T-.html | 13 + Docs/types/TimerStateCallback.html | 13 + Docs/types/TimerThread.html | 19 + Docs/types/Tinker.html | 16 + Docs/types/TinkerGuildmaster.html | 16 + Docs/types/TinkerTools.html | 15 + Docs/types/TinkersTools.html | 15 + Docs/types/TinyRedBottle.html | 13 + Docs/types/TinyYellowBottle.html | 13 + Docs/types/Titan.html | 17 + Docs/types/TitansHammer.html | 17 + Docs/types/TitheEntry.html | 11 + Docs/types/TitheGoldObjective.html | 13 + Docs/types/TithingGump.html | 11 + Docs/types/TitleComparer.html | 11 + Docs/types/TitleInfo.html | 14 + Docs/types/Titles.html | 18 + Docs/types/ToTAdminGump.html | 14 + Docs/types/ToTRedeemGump.html | 15 + Docs/types/ToTTurnInGump.html | 14 + Docs/types/ToggleMiningStoneEntry.html | 11 + Docs/types/ToggleSpecialAbility.html | 10 + .../TomasDuringCollectingConversation.html | 12 + Docs/types/TomasONeerlan.html | 17 + Docs/types/TomasToysConversation.html | 12 + Docs/types/TomeOfEnlightenment.html | 14 + Docs/types/TomeOfLostKnowledge.html | 14 + Docs/types/Tongs.html | 15 + Docs/types/ToolKit.html | 13 + Docs/types/ToolQuality.html | 12 + Docs/types/TopicPrompt.html | 12 + Docs/types/Torch.html | 19 + Docs/types/TormentedChains.html | 13 + Docs/types/TormentedMinotaur.html | 22 + Docs/types/Torso.html | 13 + Docs/types/TotalRefreshPotion.html | 14 + Docs/types/TotalType.html | 12 + Docs/types/TotemOfVoid.html | 16 + Docs/types/Tourmaline.html | 15 + Docs/types/Tower.html | 19 + Docs/types/TowerDeed.html | 16 + Docs/types/TowerLanternArtifact.html | 16 + Docs/types/Town.html | 55 + Docs/types/TownCrier.html | 26 + Docs/types/TownCrierDurationPrompt.html | 12 + Docs/types/TownCrierEntry.html | 13 + Docs/types/TownCrierGump.html | 11 + Docs/types/TownCrierLinesPrompt.html | 12 + Docs/types/TownDefinition.html | 23 + Docs/types/TownMonolith.html | 16 + Docs/types/TownRegion.html | 10 + Docs/types/TownState.html | 20 + Docs/types/TownStone.html | 17 + Docs/types/TownStoneGump.html | 13 + Docs/types/ToxicElemental.html | 18 + Docs/types/TrackArrow.html | 12 + Docs/types/TrackTimer.html | 11 + Docs/types/TrackTypeDelegate.html | 13 + Docs/types/TrackWhatGump.html | 11 + Docs/types/TrackWhoGump.html | 18 + Docs/types/Tracking.html | 16 + Docs/types/TrackingInfo.html | 10 + Docs/types/TradeGlasses.html | 21 + Docs/types/TrainingDummy.html | 24 + Docs/types/TrainingDummyEastAddon.html | 14 + Docs/types/TrainingDummyEastDeed.html | 15 + Docs/types/TrainingDummySouthAddon.html | 14 + Docs/types/TrainingDummySouthDeed.html | 15 + Docs/types/TransferItem.html | 17 + Docs/types/TransformContext.html | 14 + Docs/types/TransformTimer.html | 11 + Docs/types/TransformationSpell.html | 25 + Docs/types/TransformationSpellHelper.html | 18 + Docs/types/TransientItem.html | 24 + Docs/types/TranslatedGargoyleJournal.html | 16 + Docs/types/TranslocationItem.html | 15 + Docs/types/TransportTimer.html | 11 + Docs/types/TrapCraft.html | 18 + Docs/types/TrapType.html | 14 + Docs/types/TrapableContainer.html | 23 + Docs/types/TrashBarrel.html | 21 + Docs/types/TrashChest.html | 17 + Docs/types/TravelCheckType.html | 16 + Docs/types/TravelValidator.html | 13 + Docs/types/TreasureChestDirt.html | 15 + Docs/types/TreasureLevel.html | 15 + Docs/types/TreasureMap.html | 38 + Docs/types/TreasureMapChest.html | 35 + Docs/types/TreasureRegion.html | 14 + Docs/types/TreasureResetTimer.html | 11 + Docs/types/TreasureTrinketGlasses.html | 21 + Docs/types/TreasuresOfTokuno.html | 17 + Docs/types/TreasuresOfTokunoEra.html | 13 + Docs/types/TreasuresOfTokunoPersistance.html | 17 + Docs/types/TreatiseOnAlchemy.html | 14 + Docs/types/TreeStump.html | 18 + Docs/types/TreeStumpDeed.html | 21 + Docs/types/TreeTrunk.html | 15 + Docs/types/Treefellow.html | 20 + Docs/types/TribalBerry.html | 15 + Docs/types/TribalMask.html | 22 + Docs/types/TribalPaint.html | 15 + Docs/types/TribalSpear.html | 28 + Docs/types/TricorneHat.html | 22 + Docs/types/Trinsic.html | 10 + Docs/types/TripTimeResponse.html | 10 + Docs/types/TripleFanNorthArtifact.html | 14 + Docs/types/TripleFanWestArtifact.html | 14 + Docs/types/Troglodyte.html | 15 + Docs/types/Troll.html | 17 + Docs/types/TrophyAddon.html | 25 + Docs/types/TrophyDeed.html | 24 + Docs/types/TrophyInfo.html | 14 + Docs/types/TropicalBird.html | 17 + Docs/types/TrueBritannians.html | 11 + Docs/types/TrulyRareFish.html | 16 + Docs/types/TsukiWolf.html | 24 + Docs/types/Tub.html | 17 + Docs/types/Tunic.html | 14 + Docs/types/TunicOfFire.html | 19 + Docs/types/TurnTimer.html | 11 + Docs/types/Turnip.html | 14 + Docs/types/Turquoise.html | 15 + Docs/types/Twaulo.html | 30 + Docs/types/TwoHandedAxe.html | 26 + Docs/types/TwoPigTails.html | 14 + Docs/types/TwoStoryHouse.html | 17 + Docs/types/TwoStoryStonePlasterHouseDeed.html | 16 + Docs/types/TwoStoryVilla.html | 18 + Docs/types/TwoStoryWoodPlasterHouseDeed.html | 16 + Docs/types/TypeAliasAttribute.html | 11 + Docs/types/TypeCache.html | 15 + Docs/types/TypeComparer.html | 11 + Docs/types/TypeCondition.html | 12 + Docs/types/TypeInfo.html | 13 + Docs/types/TypeNameComparer.html | 11 + Docs/types/TypeTable.html | 12 + Docs/types/TypeTileButtonInfo.html | 13 + Docs/types/TypedEnumerator.html | 17 + Docs/types/UOAMVendorGenerator.html | 17 + Docs/types/UOGInfo.html | 10 + Docs/types/UTripTimeResponse.html | 10 + Docs/types/UnbakedApplePie.html | 15 + Docs/types/UnbakedFruitPie.html | 15 + Docs/types/UnbakedMeatPie.html | 15 + Docs/types/UnbakedPeachCobbler.html | 15 + Docs/types/UnbakedPumpkinPie.html | 15 + Docs/types/UnbakedQuiche.html | 15 + Docs/types/UnbufferedFileStream.html | 13 + Docs/types/UncookedCheesePizza.html | 15 + Docs/types/UncookedSausagePizza.html | 15 + Docs/types/UncutCloth.html | 20 + Docs/types/UnfinishedBarrel.html | 13 + Docs/types/UnhideTimer.html | 11 + Docs/types/UnholyBone.html | 16 + Docs/types/UnholyFamiliar.html | 20 + Docs/types/UnholyItem.html | 12 + Docs/types/UnholySense.html | 11 + Docs/types/UnholyShield.html | 11 + Docs/types/UnholySteed.html | 20 + Docs/types/UnholyWord.html | 11 + Docs/types/UnicodeMessage.html | 10 + Docs/types/UnicodePrompt.html | 10 + Docs/types/Unicorn.html | 27 + Docs/types/UnkD3.html | 10 + Docs/types/UnknownPropertyException.html | 10 + Docs/types/UnloadEntry.html | 11 + Docs/types/UnlockScroll.html | 14 + Docs/types/UnlockSpell.html | 13 + Docs/types/UnlockTarget.html | 11 + Docs/types/UnmadeBedAddon.html | 14 + Docs/types/UnmadeBedDeed.html | 18 + Docs/types/UnsettlingPortraitAddon.html | 14 + Docs/types/UnsettlingPortraitComponent.html | 17 + Docs/types/UnsettlingPortraitDeed.html | 15 + Docs/types/UnsummonTimer.html | 11 + Docs/types/UpdateAllTimer.html | 11 + Docs/types/UpdateSecureTrade.html | 10 + Docs/types/UpdateStatueAnimation.html | 10 + Docs/types/Urn1Artifact.html | 14 + Docs/types/Urn2Artifact.html | 14 + Docs/types/UsageAttribute.html | 11 + Docs/types/UseBagEntry.html | 11 + Docs/types/UseCallingScrollObjective.html | 11 + Docs/types/UseTeleporterConversation.html | 12 + Docs/types/UseTeleporterObjective.html | 12 + Docs/types/UserInfo.html | 10 + Docs/types/Utility.html | 94 + Docs/types/UtilityItem.html | 11 + Docs/types/Uzeraan.html | 20 + .../types/UzeraanDaemonBloodConversation.html | 13 + Docs/types/UzeraanDaemonBoneConversation.html | 12 + .../types/UzeraanFertileDirtConversation.html | 13 + Docs/types/UzeraanFirstTaskConversation.html | 13 + Docs/types/UzeraanReportConversation.html | 13 + .../UzeraanScrollOfPowerConversation.html | 13 + Docs/types/UzeraanTitheConversation.html | 12 + Docs/types/UzeraanTurmoilHorn.html | 14 + Docs/types/UzeraanTurmoilQuest.html | 25 + Docs/types/UzeraanTurmoilTeleporter.html | 14 + Docs/types/Vagabond.html | 16 + Docs/types/ValentinesCard.html | 19 + Docs/types/ValentinesCardEast.html | 13 + Docs/types/ValentinesCardSouth.html | 13 + Docs/types/ValorVirtue.html | 15 + Docs/types/ValoriteElemental.html | 20 + Docs/types/ValoriteGranite.html | 13 + Docs/types/ValoriteIngot.html | 14 + Docs/types/ValoriteOre.html | 15 + Docs/types/VampireBat.html | 15 + Docs/types/VampireBatFamiliar.html | 13 + Docs/types/VampiricEmbraceScroll.html | 14 + Docs/types/VampiricEmbraceSpell.html | 18 + Docs/types/Vandyke.html | 14 + Docs/types/VanityAddon.html | 17 + Docs/types/VanityDeed.html | 18 + Docs/types/VanquishDaemonConversation.html | 12 + Docs/types/VanquishDaemonObjective.html | 17 + Docs/types/VarietyDealer.html | 15 + Docs/types/Vase.html | 13 + Docs/types/VaultOfSecretsBarrier.html | 14 + Docs/types/VaultOfSecretsConversation.html | 13 + Docs/types/VendorAI.html | 15 + Docs/types/VendorBackpack.html | 23 + Docs/types/VendorBuyContent.html | 10 + Docs/types/VendorBuyContent6017.html | 10 + Docs/types/VendorBuyEntry.html | 11 + Docs/types/VendorBuyList.html | 10 + Docs/types/VendorDefinition.html | 18 + Docs/types/VendorGenerator.html | 29 + Docs/types/VendorInventory.html | 22 + Docs/types/VendorInventoryGump.html | 11 + Docs/types/VendorItem.html | 19 + Docs/types/VendorList.html | 13 + Docs/types/VendorNamePrompt.html | 11 + Docs/types/VendorPricePrompt.html | 13 + Docs/types/VendorRentalContract.html | 25 + Docs/types/VendorRentalContractGump.html | 16 + Docs/types/VendorRentalDuration.html | 13 + Docs/types/VendorRentalOfferGump.html | 13 + Docs/types/VendorRentalRefundGump.html | 11 + Docs/types/VendorSellEntry.html | 11 + Docs/types/VendorSellList.html | 10 + Docs/types/VendorShoeType.html | 14 + Docs/types/VendorsEntry.html | 11 + Docs/types/VengefulSpiritScroll.html | 14 + Docs/types/VengefulSpiritSpell.html | 17 + Docs/types/VeriteElemental.html | 18 + Docs/types/VeriteGranite.html | 13 + Docs/types/VeriteIngot.html | 14 + Docs/types/VeriteOre.html | 15 + Docs/types/Vesper.html | 10 + Docs/types/Veterinarian.html | 15 + Docs/types/Victoria.html | 24 + Docs/types/ViewEqTarget.html | 13 + Docs/types/ViewHousesGump.html | 21 + Docs/types/VikingSword.html | 28 + Docs/types/VileBlade.html | 11 + Docs/types/VillaDeed.html | 16 + Docs/types/Vines.html | 15 + Docs/types/VioletCourage.html | 21 + Docs/types/VioletRibbedFlask.html | 13 + Docs/types/VirtualMount.html | 12 + Docs/types/VirtualMountItem.html | 15 + Docs/types/VirtueBook.html | 14 + Docs/types/VirtueGump.html | 18 + Docs/types/VirtueGumpRequestEventArgs.html | 12 + Docs/types/VirtueGumpRequestEventHandler.html | 13 + Docs/types/VirtueHelper.html | 20 + Docs/types/VirtueInfo.html | 24 + Docs/types/VirtueInfoGump.html | 12 + Docs/types/VirtueItemRequestEventArgs.html | 13 + Docs/types/VirtueItemRequestEventHandler.html | 13 + Docs/types/VirtueLevel.html | 13 + Docs/types/VirtueMacroRequestEventArgs.html | 12 + .../types/VirtueMacroRequestEventHandler.html | 13 + Docs/types/VirtueName.html | 17 + Docs/types/VirtueStatusGump.html | 11 + Docs/types/VisTarget.html | 11 + Docs/types/VisibilityList.html | 16 + Docs/types/VisibleDamageType.html | 12 + Docs/types/VoiceOfTheFallenKing.html | 19 + Docs/types/VorpalBunny.html | 23 + Docs/types/VoteGump.html | 11 + Docs/types/Voter.html | 17 + Docs/types/VultureHelm.html | 25 + Docs/types/WailingBanshee.html | 16 + Docs/types/Waiter.html | 16 + Docs/types/Wakizashi.html | 28 + Docs/types/WallBanner.html | 16 + Docs/types/WallBannerComponent.html | 17 + Docs/types/WallBannerDeed.html | 20 + Docs/types/WallBlood.html | 13 + Docs/types/WallOfStoneScroll.html | 14 + Docs/types/WallOfStoneSpell.html | 14 + Docs/types/WallSconce.html | 16 + Docs/types/WallTorch.html | 16 + Docs/types/WallTorchAddon.html | 14 + Docs/types/WallTorchComponent.html | 15 + Docs/types/WallTorchDeed.html | 15 + Docs/types/Walrus.html | 16 + Docs/types/WandEffect.html | 20 + Docs/types/WandTarget.html | 12 + Docs/types/Wanderer.html | 15 + Docs/types/WandererOfTheVoid.html | 17 + Docs/types/WanderingHealer.html | 17 + Docs/types/WarAxe.html | 32 + Docs/types/WarCleaver.html | 32 + Docs/types/WarDeclaration.html | 20 + Docs/types/WarDeclarationGump.html | 11 + Docs/types/WarFork.html | 30 + Docs/types/WarHammer.html | 28 + Docs/types/WarMace.html | 27 + Docs/types/WarStatus.html | 14 + Docs/types/WarTimer.html | 12 + Docs/types/Waraji.html | 14 + Docs/types/WarmodeTimer.html | 12 + Docs/types/WarnEntry.html | 10 + Docs/types/WarnTimer.html | 13 + Docs/types/WarningGump.html | 12 + Docs/types/WarningGumpCallback.html | 13 + Docs/types/WarningItem.html | 26 + Docs/types/WarriorGuard.html | 18 + Docs/types/WarriorGuildmaster.html | 14 + Docs/types/WarriorStatueEastAddon.html | 14 + Docs/types/WarriorStatueEastDeed.html | 15 + Docs/types/WarriorStatueSouthAddon.html | 14 + Docs/types/WarriorStatueSouthDeed.html | 15 + Docs/types/Wasabi.html | 13 + Docs/types/WasabiClumps.html | 13 + Docs/types/WaterBarrel.html | 18 + Docs/types/WaterElemental.html | 18 + Docs/types/WaterElementalSpell.html | 13 + Docs/types/WaterTile.html | 13 + Docs/types/WaterTroughEastAddon.html | 15 + Docs/types/WaterTroughEastDeed.html | 15 + Docs/types/WaterTroughSouthAddon.html | 15 + Docs/types/WaterTroughSouthDeed.html | 15 + Docs/types/WaterVatEast.html | 13 + Docs/types/WaterVatSouth.html | 13 + Docs/types/Watermelon.html | 14 + Docs/types/WayPoint.html | 20 + Docs/types/WayPointSeqTarget.html | 11 + Docs/types/WeakenScroll.html | 14 + Docs/types/WeakenSpell.html | 14 + Docs/types/WeaknessWand.html | 14 + Docs/types/WeaponAbility.html | 41 + Docs/types/WeaponAbilityContext.html | 11 + Docs/types/WeaponAbilityTimer.html | 11 + Docs/types/WeaponAccuracyLevel.html | 15 + Docs/types/WeaponAnimation.html | 18 + Docs/types/WeaponDamageLevel.html | 15 + Docs/types/WeaponDurabilityLevel.html | 15 + Docs/types/WeaponEngravingTool.html | 23 + Docs/types/WeaponQuality.html | 12 + Docs/types/WeaponType.html | 17 + Docs/types/Weaponsmith.html | 23 + Docs/types/Weather.html | 10 + Docs/types/WeatherMap.html | 15 + Docs/types/Weaver.html | 22 + Docs/types/Web.html | 14 + Docs/types/WeightOverloading.html | 17 + Docs/types/WelcomeTimer.html | 12 + Docs/types/WheatSheaf.html | 16 + Docs/types/WhereExtension.html | 17 + Docs/types/Whip.html | 13 + Docs/types/WhippingVine.html | 15 + Docs/types/WhirlwindAttack.html | 12 + Docs/types/WhiteDriedFlowers.html | 14 + Docs/types/WhiteHangingLantern.html | 16 + Docs/types/WhiteMisoSoup.html | 13 + Docs/types/WhiteNinjaQuestTeleporter.html | 16 + Docs/types/WhitePearl.html | 15 + Docs/types/WhitePoinsettia.html | 13 + Docs/types/WhiteScales.html | 14 + Docs/types/WhiteSnowflake.html | 13 + Docs/types/WhiteStoneWall.html | 13 + Docs/types/WhiteStoneWallTypes.html | 44 + Docs/types/WhiteWolf.html | 17 + Docs/types/WhiteWyrm.html | 23 + Docs/types/WhoGump.html | 18 + Docs/types/WideBrimHat.html | 21 + Docs/types/WildGirlOfTheForest.html | 14 + Docs/types/WildStaff.html | 27 + Docs/types/WildcardIPFirewallEntry.html | 14 + Docs/types/WildfireBow.html | 17 + Docs/types/WildfireScroll.html | 14 + Docs/types/WindChimes.html | 14 + Docs/types/WindSpirit.html | 14 + Docs/types/WindsEdge.html | 17 + Docs/types/Windsong.html | 16 + Docs/types/WingedHelm.html | 26 + Docs/types/WinterGiftGiver2004.html | 14 + Docs/types/WinterGiftPackage2003.html | 13 + Docs/types/Wipe.html | 19 + Docs/types/WipeType.html | 13 + Docs/types/Wisp.html | 19 + Docs/types/WitchApprenticeQuest.html | 19 + Docs/types/WitherScroll.html | 14 + Docs/types/WitherSpell.html | 15 + Docs/types/WizardsGlasses.html | 21 + Docs/types/WizardsHat.html | 22 + Docs/types/WomanPortrait1.html | 13 + Docs/types/WomanPortrait2.html | 13 + Docs/types/WondrousFish.html | 16 + Docs/types/WoodDebris.html | 13 + Docs/types/WoodHouseDeed.html | 16 + Docs/types/WoodPlasterHouseDeed.html | 16 + Docs/types/WoodenBench.html | 13 + Docs/types/WoodenBowl.html | 13 + Docs/types/WoodenBowlOfCarrots.html | 14 + Docs/types/WoodenBowlOfCorn.html | 14 + Docs/types/WoodenBowlOfLettuce.html | 14 + Docs/types/WoodenBowlOfPeas.html | 14 + Docs/types/WoodenBowlOfStew.html | 14 + Docs/types/WoodenBowlOfTomatoSoup.html | 14 + Docs/types/WoodenBox.html | 13 + Docs/types/WoodenChair.html | 13 + Docs/types/WoodenChairCushion.html | 13 + Docs/types/WoodenChest.html | 14 + Docs/types/WoodenCoffinAddon.html | 14 + Docs/types/WoodenCoffinComponent.html | 14 + Docs/types/WoodenCoffinDeed.html | 18 + Docs/types/WoodenFootLocker.html | 14 + Docs/types/WoodenKiteShield.html | 23 + Docs/types/WoodenShield.html | 22 + Docs/types/WoodenThrone.html | 13 + Docs/types/WoodenTreasureChest.html | 13 + Docs/types/WoodlandArms.html | 25 + Docs/types/WoodlandBelt.html | 17 + Docs/types/WoodlandChest.html | 26 + Docs/types/WoodlandGloves.html | 25 + Docs/types/WoodlandGorget.html | 25 + Docs/types/WoodlandLegs.html | 25 + Docs/types/Wool.html | 19 + Docs/types/WordOfDeathScroll.html | 14 + Docs/types/WordOfDeathSpell.html | 16 + Docs/types/WorkerThread.html | 11 + Docs/types/World.html | 35 + Docs/types/WorldItem.html | 10 + Docs/types/WorldItemHS.html | 10 + Docs/types/WorldItemSA.html | 10 + Docs/types/WorldLoadEventHandler.html | 13 + Docs/types/WorldMap.html | 15 + Docs/types/WorldSaveEventArgs.html | 11 + Docs/types/WorldSaveEventHandler.html | 13 + Docs/types/Wraith.html | 17 + Docs/types/WraithFormScroll.html | 14 + Docs/types/WraithFormSpell.html | 22 + Docs/types/WrathOfTheDryad.html | 17 + Docs/types/WreathAddon.html | 20 + Docs/types/WreathAddonGump.html | 11 + Docs/types/WreathDeed.html | 19 + Docs/types/WreathDeedGump.html | 11 + Docs/types/WriteAccessException.html | 10 + Docs/types/WriteOnlyException.html | 10 + Docs/types/WritingTable.html | 13 + Docs/types/Wyvern.html | 26 + Docs/types/XmlPersistanceReader.html | 20 + Docs/types/XmlPersistanceWriter.html | 20 + Docs/types/Yamandon.html | 28 + Docs/types/YellowBeaker.html | 13 + Docs/types/YellowGourd.html | 14 + Docs/types/YellowScales.html | 14 + Docs/types/Yew.html | 10 + Docs/types/YewBoard.html | 14 + Docs/types/YewLog.html | 15 + Docs/types/YewWoodTable.html | 13 + Docs/types/YomotsuElder.html | 24 + Docs/types/YomotsuPriest.html | 23 + Docs/types/YomotsuWarrior.html | 24 + Docs/types/YoungDeathNotice.html | 10 + Docs/types/YoungDungeonWarning.html | 10 + Docs/types/YoungNinja.html | 14 + Docs/types/YoungRonin.html | 14 + Docs/types/YoungTimer.html | 11 + Docs/types/Yumi.html | 32 + Docs/types/ZComparer.html | 11 + Docs/types/ZLibError.html | 18 + Docs/types/ZLibQuality.html | 13 + Docs/types/Zeefzorpul.html | 16 + Docs/types/ZeefzorpulConversation.html | 12 + Docs/types/ZenRock1Artifact.html | 14 + Docs/types/ZenRock2Artifact.html | 14 + Docs/types/ZenRock3Artifact.html | 14 + Docs/types/Zoel.html | 21 + Docs/types/Zombie.html | 17 + Docs/types/ZoogiFungus.html | 16 + Docs/types/ZyronicClaw.html | 18 + README.md | 1 + Scripts/Accounting/AccessRestrictions.cs | 46 + Scripts/Accounting/Account.cs | 1094 ++ Scripts/Accounting/AccountAttackLimiter.cs | 148 + Scripts/Accounting/AccountComment.cs | 77 + Scripts/Accounting/AccountHandler.cs | 372 + Scripts/Accounting/AccountTag.cs | 61 + Scripts/Accounting/Accounts.cs | 110 + Scripts/Accounting/Firewall.cs | 344 + Scripts/Accounting/IPLimiter.cs | 59 + Scripts/Commands/Add.cs | 604 + Scripts/Commands/Admin/AddonGenerator.cs | 907 ++ Scripts/Commands/Admin/AreaLog.cs | 47 + Scripts/Commands/Admin/BodyTypes.cs | 39 + Scripts/Commands/Admin/BuildWorld.cs | 43 + Scripts/Commands/Admin/FaceLog.cs | 57 + Scripts/Commands/Admin/FullExport.cs | 331 + Scripts/Commands/Admin/GetLevel.cs | 54 + Scripts/Commands/Admin/GoLog.cs | 45 + Scripts/Commands/Admin/PointLog.cs | 59 + Scripts/Commands/Admin/StaticExport.cs | 339 + Scripts/Commands/Admin/TargetLog.cs | 82 + Scripts/Commands/Attributes.cs | 40 + Scripts/Commands/Batch.cs | 458 + Scripts/Commands/BoundingBoxPicker.cs | 68 + Scripts/Commands/ConvertPlayers.cs | 92 + Scripts/Commands/Decorate.cs | 1005 ++ Scripts/Commands/Docs.cs | 1858 +++ Scripts/Commands/Dupe.cs | 147 + Scripts/Commands/GenCategorization.cs | 426 + .../Commands/Generic/Commands/BaseCommand.cs | 205 + Scripts/Commands/Generic/Commands/Commands.cs | 1039 ++ .../Commands/Generic/Commands/Interface.cs | 570 + .../Generic/Extensions/BaseExtension.cs | 184 + .../Compilers/ConditionalCompiler.cs | 569 + .../Extensions/Compilers/DistinctCompiler.cs | 249 + .../Extensions/Compilers/SortCompiler.cs | 172 + .../Generic/Extensions/DistinctExtension.cs | 89 + .../Generic/Extensions/LimitExtension.cs | 46 + .../Generic/Extensions/SortExtension.cs | 109 + .../Generic/Extensions/WhereExtension.cs | 55 + .../Implementors/AreaCommandImplementor.cs | 128 + .../Implementors/BaseCommandImplementor.cs | 338 + .../ContainedCommandImplementor.cs | 85 + .../Implementors/GlobalCommandImplementor.cs | 60 + .../Implementors/MultiCommandImplementor.cs | 77 + .../Generic/Implementors/ObjectConditional.cs | 266 + .../Implementors/OnlineCommandImplementor.cs | 67 + .../Implementors/RegionCommandImplementor.cs | 61 + .../Implementors/SelfCommandImplementor.cs | 27 + .../Implementors/SerialCommandImplementor.cs | 67 + .../Implementors/SingleCommandImplementor.cs | 96 + Scripts/Commands/Handlers.cs | 1018 ++ Scripts/Commands/HelpInfo.cs | 422 + Scripts/Commands/Logging.cs | 147 + Scripts/Commands/Profiling.cs | 400 + Scripts/Commands/Properties.cs | 837 ++ Scripts/Commands/Skills.cs | 152 + Scripts/Commands/SkillsMenu.cs | 40 + Scripts/Commands/Statics.cs | 570 + Scripts/Commands/VisibilityList.cs | 155 + Scripts/Commands/Wipe.cs | 106 + Scripts/Context Menus/AddToParty.cs | 39 + Scripts/Context Menus/AddToSpellbookEntry.cs | 64 + Scripts/Context Menus/EatEntry.cs | 25 + Scripts/Context Menus/EjectPlayer.cs | 31 + Scripts/Context Menus/OpenInnEntry.cs | 30 + Scripts/Context Menus/TeachEntry.cs | 30 + Scripts/Engines/Chat/Channel.cs | 548 + Scripts/Engines/Chat/Chat.cs | 174 + Scripts/Engines/Chat/ChatActionHandler.cs | 24 + Scripts/Engines/Chat/ChatActionHandlers.cs | 359 + Scripts/Engines/Chat/ChatCommand.cs | 44 + Scripts/Engines/Chat/ChatUser.cs | 321 + Scripts/Engines/Chat/Chatold.cs | 20 + Scripts/Engines/Chat/Packets.cs | 30 + Scripts/Engines/Craft/Core/CraftContext.cs | 56 + Scripts/Engines/Craft/Core/CraftGroup.cs | 39 + Scripts/Engines/Craft/Core/CraftGroupCol.cs | 48 + Scripts/Engines/Craft/Core/CraftGump.cs | 539 + Scripts/Engines/Craft/Core/CraftGumpItem.cs | 244 + Scripts/Engines/Craft/Core/CraftItem.cs | 1161 ++ Scripts/Engines/Craft/Core/CraftItemCol.cs | 58 + .../Craft/Core/CraftItemIDAttribute.cs | 18 + Scripts/Engines/Craft/Core/CraftRes.cs | 71 + Scripts/Engines/Craft/Core/CraftResCol.cs | 32 + Scripts/Engines/Craft/Core/CraftSkill.cs | 34 + Scripts/Engines/Craft/Core/CraftSkillCol.cs | 32 + Scripts/Engines/Craft/Core/CraftSubRes.cs | 58 + Scripts/Engines/Craft/Core/CraftSubResCol.cs | 75 + Scripts/Engines/Craft/Core/CraftSystem.cs | 283 + Scripts/Engines/Craft/Core/CustomCraft.cs | 36 + .../Engines/Craft/Core/QueryMakersMarkGump.cs | 54 + Scripts/Engines/Craft/Core/Repair.cs | 230 + Scripts/Engines/Craft/Core/Resmelt.cs | 147 + Scripts/Engines/Craft/DefAlchemy.cs | 159 + Scripts/Engines/Craft/DefBlacksmithy.cs | 307 + Scripts/Engines/Craft/DefBowFletching.cs | 111 + Scripts/Engines/Craft/DefCarpentry.cs | 289 + Scripts/Engines/Craft/DefCartography.cs | 89 + Scripts/Engines/Craft/DefCooking.cs | 203 + Scripts/Engines/Craft/DefInscription.cs | 298 + Scripts/Engines/Craft/DefTailoring.cs | 226 + Scripts/Engines/Craft/DefTinkering.cs | 454 + Scripts/Engines/Guilds/DeclareFealtyGump.cs | 54 + Scripts/Engines/Guilds/GrantGuildTitleGump.cs | 57 + Scripts/Engines/Guilds/Guild.cs | 1880 +++ Scripts/Engines/Guilds/GuildAbbrvPrompt.cs | 55 + Scripts/Engines/Guilds/GuildAcceptWarGump.cs | 67 + .../Guilds/GuildAdminCandidatesGump.cs | 99 + Scripts/Engines/Guilds/GuildCandidatesGump.cs | 34 + Scripts/Engines/Guilds/GuildChangeTypeGump.cs | 76 + Scripts/Engines/Guilds/GuildCharterGump.cs | 73 + Scripts/Engines/Guilds/GuildCharterPrompt.cs | 48 + .../Engines/Guilds/GuildDeclarePeaceGump.cs | 64 + Scripts/Engines/Guilds/GuildDeclareWarGump.cs | 83 + .../Engines/Guilds/GuildDeclareWarPrompt.cs | 59 + Scripts/Engines/Guilds/GuildDeed.cs | 143 + Scripts/Engines/Guilds/GuildDismissGump.cs | 62 + Scripts/Engines/Guilds/GuildGump.cs | 225 + Scripts/Engines/Guilds/GuildListGump.cs | 67 + Scripts/Engines/Guilds/GuildMobileListGump.cs | 68 + Scripts/Engines/Guilds/GuildNamePrompt.cs | 55 + Scripts/Engines/Guilds/GuildRejectWarGump.cs | 64 + .../Guilds/GuildRescindDeclarationGump.cs | 64 + Scripts/Engines/Guilds/GuildRosterGump.cs | 34 + Scripts/Engines/Guilds/GuildTeleporter.cs | 105 + Scripts/Engines/Guilds/GuildTitlePrompt.cs | 50 + Scripts/Engines/Guilds/GuildWarAdminGump.cs | 121 + Scripts/Engines/Guilds/GuildWarGump.cs | 116 + Scripts/Engines/Guilds/GuildWebsitePrompt.cs | 45 + Scripts/Engines/Guilds/GuildmasterGump.cs | 184 + Scripts/Engines/Guilds/Guildstone.cs | 364 + .../Guilds/New Guild System/AdvancedSearch.cs | 75 + .../Guilds/New Guild System/BaseGuildGump.cs | 143 + .../New Guild System/BaseGuildListGump.cs | 209 + .../New Guild System/Create Guild Gump.cs | 101 + .../Guilds/New Guild System/DiplomacyGump.cs | 291 + .../Guilds/New Guild System/GuildInfoGump.cs | 165 + .../GuildInvitationRequest.cs | 63 + .../New Guild System/GuildMemberInfoGump.cs | 231 + .../New Guild System/GuildRosterGump.cs | 239 + .../Guilds/New Guild System/OtherGuildInfo.cs | 622 + .../New Guild System/War Declaration gump.cs | 130 + Scripts/Engines/Guilds/RecruitTarget.cs | 72 + Scripts/Engines/Harvest/Core/HarvestBank.cs | 100 + .../Engines/Harvest/Core/HarvestDefinition.cs | 159 + .../Engines/Harvest/Core/HarvestResource.cs | 34 + .../Engines/Harvest/Core/HarvestSoundTimer.cs | 33 + Scripts/Engines/Harvest/Core/HarvestSystem.cs | 498 + Scripts/Engines/Harvest/Core/HarvestTarget.cs | 80 + Scripts/Engines/Harvest/Core/HarvestTimer.cs | 31 + Scripts/Engines/Harvest/Core/HarvestVein.cs | 25 + Scripts/Engines/Harvest/Fishing.cs | 527 + Scripts/Engines/Harvest/Lumberjacking.cs | 161 + Scripts/Engines/Harvest/Mining.cs | 211 + Scripts/Engines/Help/HelpGump.cs | 241 + Scripts/Engines/Help/Index/HelpPageBasics.cs | 28 + Scripts/Engines/Help/Index/HelpPageGuilds.cs | 73 + Scripts/Engines/Help/Index/HelpPageHomes.cs | 86 + Scripts/Engines/Help/Index/HelpPageShips.cs | 60 + Scripts/Engines/Help/Index/HelpPageSkills.cs | 107 + Scripts/Engines/Help/Index/HelpPageTrades.cs | 86 + Scripts/Engines/Help/PagePrompt.cs | 30 + Scripts/Engines/Help/PagePromptGump.cs | 61 + Scripts/Engines/Help/PageQueue.cs | 395 + Scripts/Engines/Help/PageQueueGump.cs | 834 ++ Scripts/Engines/Help/PageResponseGump.cs | 39 + Scripts/Engines/Help/SpeechLog.cs | 148 + Scripts/Engines/Help/SpeechLogGump.cs | 112 + Scripts/Engines/Help/StuckMenu.cs | 237 + Scripts/Engines/Party/AddPartyTarget.cs | 47 + Scripts/Engines/Party/DeclineTimer.cs | 38 + Scripts/Engines/Party/Packets.cs | 79 + Scripts/Engines/Party/Party.cs | 461 + Scripts/Engines/Party/PartyCommands.cs | 123 + Scripts/Engines/Party/PartyMemberInfo.cs | 20 + Scripts/Engines/Party/RemoveFromParty.cs | 31 + Scripts/Engines/Party/RemovePartyTarget.cs | 30 + Scripts/Engines/Pathing/FastAStarAlgorithm.cs | 292 + Scripts/Engines/Pathing/MoveResult.cs | 14 + Scripts/Engines/Pathing/Movement.cs | 529 + Scripts/Engines/Pathing/MovementPath.cs | 165 + Scripts/Engines/Pathing/PathAlgorithm.cs | 35 + Scripts/Engines/Pathing/PathFollower.cs | 204 + Scripts/Engines/Pathing/SlowAStarAlgorithm.cs | 260 + .../Reports/Objects/Charts/BarGraph.cs | 311 + .../Engines/Reports/Objects/Charts/Chart.cs | 44 + .../Reports/Objects/Charts/ChartItem.cs | 46 + .../Objects/Charts/ChartItemCollection.cs | 205 + .../Reports/Objects/Charts/PieChart.cs | 47 + .../Reports/Objects/Reports/ItemValue.cs | 53 + .../Objects/Reports/ItemValueCollection.cs | 210 + .../Engines/Reports/Objects/Reports/Report.cs | 74 + .../Reports/Objects/Reports/ReportColumn.cs | 55 + .../Objects/Reports/ReportColumnCollection.cs | 210 + .../Reports/Objects/Reports/ReportItem.cs | 39 + .../Objects/Reports/ReportItemCollection.cs | 215 + .../Reports/Objects/Snapshots/Snapshot.cs | 52 + .../Objects/Snapshots/SnapshotCollection.cs | 200 + .../Objects/Snapshots/SnapshotHistory.cs | 65 + .../Engines/Reports/Objects/Staffing/Info.cs | 103 + .../Reports/Objects/Staffing/PageInfo.cs | 257 + .../Objects/Staffing/PageInfoCollection.cs | 200 + .../Reports/Objects/Staffing/QueueStatus.cs | 50 + .../Objects/Staffing/QueueStatusCollection.cs | 200 + .../Reports/Objects/Staffing/ResponseInfo.cs | 59 + .../Staffing/ResponseInfoCollection.cs | 205 + .../Reports/Objects/Staffing/StaffHistory.cs | 406 + .../Reports/Persistance/PersistableObject.cs | 51 + .../PersistableObjectCollection.cs | 205 + .../Reports/Persistance/PersistableType.cs | 58 + .../Reports/Persistance/PersistanceReader.cs | 122 + .../Reports/Persistance/PersistanceWriter.cs | 129 + .../Reports/Rendering/BarGraphRenderer.cs | 923 ++ .../Reports/Rendering/ChartRenderer.cs | 71 + Scripts/Engines/Reports/Rendering/DataItem.cs | 110 + .../Engines/Reports/Rendering/HtmlRenderer.cs | 541 + .../Reports/Rendering/PieChartRenderer.cs | 252 + Scripts/Engines/Reports/Reports.cs | 230 + Scripts/Engines/Spawner/PSCount.cs | 45 + Scripts/Engines/Spawner/PremiumSpawner.cs | 1912 +++ Scripts/Engines/Spawner/PremiumSpawnerGump.cs | 495 + .../Engines/Spawner/PremiumSpawnerGumps.cs | 419 + .../Engines/Spawner/PremiumSpawnerMainGump.cs | 288 + .../Engines/Spawner/RunUOSpawnerExporter.cs | 156 + Scripts/Engines/Spawner/SpawnEditor.cs | 1017 ++ Scripts/Engines/Spawner/SpawnGen.cs | 646 + Scripts/Engines/Spawner/SpawnMaps.cs | 412 + Scripts/Engines/Spawner/Spawner.cs | 887 ++ Scripts/Engines/Spawner/SpawnerGump.cs | 140 + Scripts/Engines/Spawner/SpawnerHowTo.txt | 613 + Scripts/Engines/Spawner/SpawnerType.cs | 14 + Scripts/Engines/Spawner/SpawnsOverseer.cs | 340 + .../Engines/Spawner/SpawnsOverseerCommand.cs | 458 + Scripts/Gumps/AddDoorGump.cs | 140 + Scripts/Gumps/AddGump.cs | 257 + Scripts/Gumps/AdminGump.cs | 2896 ++++ Scripts/Gumps/BanDurationGump.cs | 260 + Scripts/Gumps/BaseConfirmGump.cs | 79 + Scripts/Gumps/BaseGridGump.cs | 197 + Scripts/Gumps/BaseImageTileButtonsGump.cs | 131 + Scripts/Gumps/CategorizedAddGump.cs | 386 + Scripts/Gumps/ClientGump.cs | 298 + Scripts/Gumps/ConfirmHouseResize.cs | 154 + Scripts/Gumps/ConfirmReleaseGump.cs | 48 + Scripts/Gumps/Go/ChildNode.cs | 81 + Scripts/Gumps/Go/GoGump.cs | 235 + Scripts/Gumps/Go/LocationTree.cs | 57 + Scripts/Gumps/Go/ParentNode.cs | 79 + Scripts/Gumps/HouseDemolishGump.cs | 148 + Scripts/Gumps/HouseGump.cs | 755 ++ Scripts/Gumps/HouseGumpAOS.cs | 1375 ++ Scripts/Gumps/HouseTransferGump.cs | 66 + Scripts/Gumps/NoticeGump.cs | 48 + Scripts/Gumps/PetResurrectGump.cs | 79 + Scripts/Gumps/PlayerVendorGumps.cs | 977 ++ Scripts/Gumps/PolymorphGump.cs | 243 + Scripts/Gumps/Properties/PropsConfig.cs | 42 + Scripts/Gumps/Properties/PropsGump.cs | 761 ++ Scripts/Gumps/Properties/SetBodyGump.cs | 295 + Scripts/Gumps/Properties/SetCustomEnumGump.cs | 50 + Scripts/Gumps/Properties/SetGump.cs | 279 + Scripts/Gumps/Properties/SetListOptionGump.cs | 187 + Scripts/Gumps/Properties/SetObjectGump.cs | 308 + Scripts/Gumps/Properties/SetObjectTarget.cs | 66 + Scripts/Gumps/Properties/SetPoint2DGump.cs | 237 + Scripts/Gumps/Properties/SetPoint3DGump.cs | 243 + Scripts/Gumps/Properties/SetTimeSpanGump.cs | 238 + Scripts/Gumps/ReclaimVendorGump.cs | 79 + Scripts/Gumps/ReportMurderer.cs | 187 + Scripts/Gumps/ResurrectGump.cs | 193 + Scripts/Gumps/SetSecureLevelGump.cs | 93 + Scripts/Gumps/SkillsGump.cs | 507 + Scripts/Gumps/VendorInventoryGump.cs | 119 + Scripts/Gumps/VendorRentalGumps.cs | 616 + Scripts/Gumps/WarningGump.cs | 64 + Scripts/Gumps/WhoGump.cs | 300 + Scripts/Items/Addons/AbbatoirAddon.cs | 71 + Scripts/Items/Addons/AddonComponent.cs | 285 + .../Items/Addons/AddonContainerComponent.cs | 171 + Scripts/Items/Addons/AnvilEastAddon.cs | 63 + Scripts/Items/Addons/AnvilSouthAddon.cs | 63 + Scripts/Items/Addons/ArcheryButteAddon.cs | 371 + Scripts/Items/Addons/BaseAddon.cs | 277 + Scripts/Items/Addons/BaseAddonContainer.cs | 307 + .../Items/Addons/BaseAddonContainerDeed.cs | 162 + Scripts/Items/Addons/BaseAddonDeed.cs | 105 + Scripts/Items/Addons/BearRugs.cs | 269 + Scripts/Items/Addons/BloodPentagram.cs | 70 + Scripts/Items/Addons/DartBoard.cs | 218 + Scripts/Items/Addons/FlourMillEastAddon.cs | 230 + Scripts/Items/Addons/FlourMillSouthAddon.cs | 216 + Scripts/Items/Addons/FlowerTapestries.cs | 241 + Scripts/Items/Addons/GiantWebs.cs | 207 + .../Addons/GrayBrickFireplaceEastAddon.cs | 64 + .../Addons/GrayBrickFireplaceSouthAddon.cs | 64 + Scripts/Items/Addons/LargeBedEastAddon.cs | 66 + Scripts/Items/Addons/LargeBedSouthAddon.cs | 66 + Scripts/Items/Addons/LargeForgeEastAddon.cs | 66 + Scripts/Items/Addons/LargeForgeSouthAddon.cs | 66 + .../Items/Addons/LargeStoneTableEastAddon.cs | 73 + .../Items/Addons/LargeStoneTableSouthAddon.cs | 73 + Scripts/Items/Addons/LoomEastAddon.cs | 86 + Scripts/Items/Addons/LoomSouthAddon.cs | 81 + .../Items/Addons/MediumStoneTableEastAddon.cs | 72 + .../Addons/MediumStoneTableSouthAddon.cs | 72 + Scripts/Items/Addons/PentagramAddon.cs | 71 + Scripts/Items/Addons/PickpocketDips.cs | 286 + .../Addons/SandstoneFireplaceEastAddon.cs | 64 + .../Addons/SandstoneFireplaceSouthAddon.cs | 64 + .../Items/Addons/SandstoneFountainAddon.cs | 54 + Scripts/Items/Addons/SmallBedEastAddon.cs | 64 + Scripts/Items/Addons/SmallBedSouthAddon.cs | 64 + Scripts/Items/Addons/SmallForgeAddon.cs | 63 + .../Items/Addons/SpinningwheelEastAddon.cs | 149 + .../Items/Addons/SpinningwheelSouthAddon.cs | 141 + .../Items/Addons/StoneFireplaceEastAddon.cs | 64 + .../Items/Addons/StoneFireplaceSouthAddon.cs | 64 + Scripts/Items/Addons/StoneFountainAddon.cs | 54 + Scripts/Items/Addons/StoneOvenEastAddon.cs | 64 + Scripts/Items/Addons/StoneOvenSouthAddon.cs | 64 + Scripts/Items/Addons/StretchedHides.cs | 237 + Scripts/Items/Addons/Telescope.cs | 106 + Scripts/Items/Addons/TrainingDummies.cs | 286 + Scripts/Items/Addons/WaterTroughEastAddon.cs | 70 + Scripts/Items/Addons/WaterTroughSouthAddon.cs | 70 + Scripts/Items/Addons/WaterVat.cs | 87 + Scripts/Items/Armor/ArmorEnums.cs | 61 + Scripts/Items/Armor/BaseArmor.cs | 1179 ++ Scripts/Items/Armor/Bone/BoneArms.cs | 47 + Scripts/Items/Armor/Bone/BoneChest.cs | 47 + Scripts/Items/Armor/Bone/BoneGloves.cs | 47 + Scripts/Items/Armor/Bone/BoneHelm.cs | 43 + Scripts/Items/Armor/Bone/BoneLegs.cs | 44 + Scripts/Items/Armor/Bone/OrcHelm.cs | 48 + Scripts/Items/Armor/Chain/ChainChest.cs | 42 + Scripts/Items/Armor/Chain/ChainCoif.cs | 40 + Scripts/Items/Armor/Chain/ChainLegs.cs | 42 + Scripts/Items/Armor/DaemonBone/DaemonArms.cs | 48 + Scripts/Items/Armor/DaemonBone/DaemonChest.cs | 48 + .../Items/Armor/DaemonBone/DaemonGloves.cs | 48 + Scripts/Items/Armor/DaemonBone/DaemonHelm.cs | 46 + Scripts/Items/Armor/DaemonBone/DaemonLegs.cs | 46 + .../Items/Armor/Leather/FemaleLeatherChest.cs | 45 + Scripts/Items/Armor/Leather/LeatherArms.cs | 46 + .../Items/Armor/Leather/LeatherBustierArms.cs | 45 + Scripts/Items/Armor/Leather/LeatherCap.cs | 46 + Scripts/Items/Armor/Leather/LeatherChest.cs | 46 + Scripts/Items/Armor/Leather/LeatherGloves.cs | 132 + Scripts/Items/Armor/Leather/LeatherGorget.cs | 42 + Scripts/Items/Armor/Leather/LeatherLegs.cs | 43 + Scripts/Items/Armor/Leather/LeatherShorts.cs | 45 + Scripts/Items/Armor/Leather/LeatherSkirt.cs | 48 + Scripts/Items/Armor/Metal/Bascinet.cs | 42 + Scripts/Items/Armor/Metal/CloseHelm.cs | 42 + Scripts/Items/Armor/Metal/Helmet.cs | 42 + Scripts/Items/Armor/Metal/NorseHelm.cs | 42 + Scripts/Items/Armor/Plate/FemalePlateChest.cs | 47 + Scripts/Items/Armor/Plate/PlateArms.cs | 45 + Scripts/Items/Armor/Plate/PlateChest.cs | 45 + Scripts/Items/Armor/Plate/PlateGloves.cs | 45 + Scripts/Items/Armor/Plate/PlateGorget.cs | 41 + Scripts/Items/Armor/Plate/PlateHelm.cs | 44 + Scripts/Items/Armor/Plate/PlateLegs.cs | 42 + Scripts/Items/Armor/Ranger/RangerArms.cs | 47 + Scripts/Items/Armor/Ranger/RangerChest.cs | 47 + Scripts/Items/Armor/Ranger/RangerGloves.cs | 44 + Scripts/Items/Armor/Ranger/RangerGorget.cs | 43 + Scripts/Items/Armor/Ranger/RangerLegs.cs | 47 + Scripts/Items/Armor/Ring/RingmailArms.cs | 45 + Scripts/Items/Armor/Ring/RingmailChest.cs | 45 + Scripts/Items/Armor/Ring/RingmailGloves.cs | 45 + Scripts/Items/Armor/Ring/RingmailLegs.cs | 42 + .../Items/Armor/Studded/FemaleStuddedChest.cs | 48 + Scripts/Items/Armor/Studded/StuddedArms.cs | 46 + .../Items/Armor/Studded/StuddedBustierArms.cs | 45 + Scripts/Items/Armor/Studded/StuddedChest.cs | 46 + Scripts/Items/Armor/Studded/StuddedGloves.cs | 46 + Scripts/Items/Armor/Studded/StuddedGorget.cs | 45 + Scripts/Items/Armor/Studded/StuddedLegs.cs | 46 + Scripts/Items/Body Parts/BonePile.cs | 45 + Scripts/Items/Body Parts/Head.cs | 128 + Scripts/Items/Body Parts/LeftArm.cs | 31 + Scripts/Items/Body Parts/LeftLeg.cs | 31 + Scripts/Items/Body Parts/RibCage.cs | 45 + Scripts/Items/Body Parts/RightArm.cs | 31 + Scripts/Items/Body Parts/RightLeg.cs | 31 + Scripts/Items/Body Parts/Torso.cs | 32 + Scripts/Items/Books/BaseBook.cs | 510 + Scripts/Items/Books/BlueBook.cs | 47 + Scripts/Items/Books/BookContent.cs | 61 + Scripts/Items/Books/BrownBook.cs | 47 + Scripts/Items/Books/Codex.cs | 44 + Scripts/Items/Books/Diary.cs | 45 + Scripts/Items/Books/Grimoire.cs | 45 + Scripts/Items/Books/Journal.cs | 45 + Scripts/Items/Books/Lexicon.cs | 45 + Scripts/Items/Books/RedBook.cs | 47 + Scripts/Items/Books/TanBook.cs | 47 + Scripts/Items/Books/Tome.cs | 45 + Scripts/Items/Clothing/AdminBoots.cs | 48 + Scripts/Items/Clothing/BaseClothing.cs | 561 + Scripts/Items/Clothing/Cloaks.cs | 156 + Scripts/Items/Clothing/Hats.cs | 633 + Scripts/Items/Clothing/MiddleTorso.cs | 234 + Scripts/Items/Clothing/OuterLegs.cs | 99 + Scripts/Items/Clothing/OuterTorso.cs | 354 + Scripts/Items/Clothing/Pants.cs | 99 + Scripts/Items/Clothing/Shirts.cs | 102 + Scripts/Items/Clothing/Shoes.cs | 289 + Scripts/Items/Clothing/Waist.cs | 66 + Scripts/Items/Construction/Ankhs.cs | 428 + Scripts/Items/Construction/Chairs/Benchs.cs | 33 + Scripts/Items/Construction/Chairs/Chairs.cs | 161 + Scripts/Items/Construction/Chairs/Stools.cs | 66 + Scripts/Items/Construction/Chairs/Thrones.cs | 69 + .../Decorative/DecorativeShield.cs | 426 + .../Decorative/DecorativeWeapon.cs | 546 + .../Decorative/PaintingPortraits.cs | 200 + .../Items/Construction/Decorative/Tapestry.cs | 1192 ++ Scripts/Items/Construction/Doors/BaseDoor.cs | 829 ++ Scripts/Items/Construction/Doors/Doors.cs | 358 + .../Items/Construction/Doors/HouseDoors.cs | 253 + .../Items/Construction/Doors/Portcullis.cs | 60 + .../Items/Construction/Doors/SecretDoors.cs | 186 + Scripts/Items/Construction/Doors/ThruDoors.cs | 228 + Scripts/Items/Construction/Floors/Floors.cs | 628 + .../Items/Construction/Misc/BarrelParts.cs | 115 + Scripts/Items/Construction/Misc/Easle.cs | 36 + Scripts/Items/Construction/Misc/MeltedWax.cs | 34 + Scripts/Items/Construction/Misc/MusicStand.cs | 68 + Scripts/Items/Construction/Misc/Statues.cs | 323 + Scripts/Items/Construction/Misc/Vase.cs | 58 + Scripts/Items/Construction/Misc/Vines.cs | 42 + .../Construction/Ruined/RuinedItemSingle.cs | 315 + Scripts/Items/Construction/Signs/BaseSign.cs | 31 + .../Items/Construction/Signs/LocalizedSign.cs | 56 + Scripts/Items/Construction/Signs/Sign.cs | 107 + Scripts/Items/Construction/Tables/Tables.cs | 100 + .../Items/Construction/Tables/WritingTable.cs | 36 + Scripts/Items/Construction/Walls/BaseWall.cs | 30 + .../Items/Construction/Walls/DarkWoodWall.cs | 54 + .../Construction/Walls/ThickGrayStoneWall.cs | 64 + .../Items/Construction/Walls/ThinBrickWall.cs | 70 + .../Items/Construction/Walls/ThinStoneWall.cs | 59 + .../Construction/Walls/WhiteStoneWall.cs | 77 + Scripts/Items/Containers/Container.cs | 774 ++ .../Items/Containers/FurnitureContainer.cs | 267 + Scripts/Items/Containers/HouseCrates.cs | 677 + Scripts/Items/Containers/InnChest.cs | 50 + Scripts/Items/Containers/LockableContainer.cs | 414 + Scripts/Items/Containers/Strongbox.cs | 170 + Scripts/Items/Containers/TrapableContainer.cs | 272 + Scripts/Items/Deeds/BarkeepContract.cs | 95 + Scripts/Items/Deeds/HairRestylingDeed.cs | 157 + Scripts/Items/Deeds/NameChangeDeed.cs | 46 + Scripts/Items/Deeds/PlayerVendorDeed.cs | 103 + Scripts/Items/Deeds/VendorRentalContract.cs | 368 + Scripts/Items/Facial/Beard.cs | 330 + Scripts/Items/Facial/Hair.cs | 491 + Scripts/Items/Farming/FarmableCabbage.cs | 52 + Scripts/Items/Farming/FarmableCantaloupe.cs | 52 + Scripts/Items/Farming/FarmableCarrot.cs | 53 + Scripts/Items/Farming/FarmableCorn.cs | 52 + Scripts/Items/Farming/FarmableCotton.cs | 48 + Scripts/Items/Farming/FarmableCrop.cs | 115 + Scripts/Items/Farming/FarmableEggs.cs | 52 + Scripts/Items/Farming/FarmableFlax.cs | 52 + Scripts/Items/Farming/FarmableGarlic.cs | 48 + Scripts/Items/Farming/FarmableGinseng.cs | 48 + Scripts/Items/Farming/FarmableGrape.cs | 56 + Scripts/Items/Farming/FarmableGreenGourd.cs | 53 + .../Items/Farming/FarmableHoneydewMelon.cs | 52 + Scripts/Items/Farming/FarmableLettuce.cs | 52 + Scripts/Items/Farming/FarmableMandrakeRoot.cs | 48 + Scripts/Items/Farming/FarmableNightshade.cs | 48 + Scripts/Items/Farming/FarmableOnion.cs | 53 + Scripts/Items/Farming/FarmablePumpkin.cs | 53 + Scripts/Items/Farming/FarmableSquash.cs | 52 + Scripts/Items/Farming/FarmableTomato.cs | 53 + Scripts/Items/Farming/FarmableTurnip.cs | 52 + Scripts/Items/Farming/FarmableWatermelon.cs | 52 + Scripts/Items/Farming/FarmableWheat.cs | 48 + Scripts/Items/Farming/FarmableYellowGourd.cs | 53 + Scripts/Items/Food/Beverage.cs | 1191 ++ Scripts/Items/Food/BeverageEmpty.cs | 59 + Scripts/Items/Food/Bowls.cs | 532 + Scripts/Items/Food/CookableFood.cs | 912 ++ Scripts/Items/Food/Cooking.cs | 643 + Scripts/Items/Food/Food.cs | 1286 ++ Scripts/Items/Food/Fruits.cs | 632 + Scripts/Items/Food/MagicDrink.cs | 140 + Scripts/Items/Food/Vegetables.cs | 243 + Scripts/Items/Games/Backgammon.cs | 57 + Scripts/Items/Games/BaseBoard.cs | 169 + Scripts/Items/Games/BasePiece.cs | 105 + Scripts/Items/Games/CheckerBoard.cs | 44 + Scripts/Items/Games/CheckersPieces.cs | 61 + Scripts/Items/Games/ChessPieces.cs | 341 + Scripts/Items/Games/Chessboard.cs | 69 + Scripts/Items/Games/Dices.cs | 52 + Scripts/Items/Gems/Amber.cs | 45 + Scripts/Items/Gems/Amethyst.cs | 45 + Scripts/Items/Gems/Citrine.cs | 45 + Scripts/Items/Gems/Diamond.cs | 45 + Scripts/Items/Gems/Emerald.cs | 45 + Scripts/Items/Gems/Ruby.cs | 45 + Scripts/Items/Gems/Sapphire.cs | 45 + Scripts/Items/Gems/StarSapphire.cs | 45 + Scripts/Items/Gems/Tourmaline.cs | 45 + Scripts/Items/Home/HouseSigns.cs | 476 + Scripts/Items/Home/InteriorDecorator.cs | 683 + Scripts/Items/Home/LadderEastAddon.cs | 107 + Scripts/Items/Home/LadderSouthAddon.cs | 107 + Scripts/Items/Home/Tents.cs | 446 + Scripts/Items/Jewels/BaseJewel.cs | 358 + Scripts/Items/Jewels/Beads.cs | 31 + Scripts/Items/Jewels/Bracelet.cs | 85 + Scripts/Items/Jewels/Earrings.cs | 85 + Scripts/Items/Jewels/Necklace.cs | 167 + Scripts/Items/Jewels/Ring.cs | 85 + Scripts/Items/Lights/BaseEquipableLight.cs | 64 + Scripts/Items/Lights/BaseLight.cs | 233 + Scripts/Items/Lights/Bonfire.cs | 37 + Scripts/Items/Lights/Brazier.cs | 36 + Scripts/Items/Lights/BrazierTall.cs | 36 + Scripts/Items/Lights/Candelabra.cs | 75 + Scripts/Items/Lights/CandelabraStand.cs | 36 + Scripts/Items/Lights/Candle.cs | 40 + Scripts/Items/Lights/CandleLarge.cs | 36 + Scripts/Items/Lights/CandleLong.cs | 36 + Scripts/Items/Lights/CandleMedium.cs | 36 + Scripts/Items/Lights/CandleShort.cs | 36 + Scripts/Items/Lights/CandleSkull.cs | 55 + Scripts/Items/Lights/DarkSource.cs | 30 + Scripts/Items/Lights/HangingLantern.cs | 37 + Scripts/Items/Lights/HeatingStand.cs | 60 + Scripts/Items/Lights/IronBrazier.cs | 37 + Scripts/Items/Lights/IronBrazierShort.cs | 37 + Scripts/Items/Lights/IronBrazierStand.cs | 37 + Scripts/Items/Lights/IronCandelabra.cs | 38 + Scripts/Items/Lights/IronCandelabraStand.cs | 38 + Scripts/Items/Lights/IronCandle.cs | 38 + Scripts/Items/Lights/LampPost1.cs | 37 + Scripts/Items/Lights/LampPost2.cs | 37 + Scripts/Items/Lights/LampPost3.cs | 37 + Scripts/Items/Lights/Lantern.cs | 86 + Scripts/Items/Lights/LightSource.cs | 55 + Scripts/Items/Lights/Torch.cs | 46 + Scripts/Items/Lights/WallSconce.cs | 74 + Scripts/Items/Lights/WallTorch.cs | 74 + Scripts/Items/Maps/BlankMap.cs | 36 + Scripts/Items/Maps/CityMap.cs | 53 + Scripts/Items/Maps/IndecipherableMap.cs | 42 + Scripts/Items/Maps/LocalMap.cs | 43 + Scripts/Items/Maps/MapItem.cs | 385 + Scripts/Items/Maps/PresetMap.cs | 151 + Scripts/Items/Maps/SeaChart.cs | 53 + Scripts/Items/Maps/TreasureMap.cs | 862 ++ Scripts/Items/Maps/WorldMap.cs | 51 + Scripts/Items/Misc/AcidSlime.cs | 99 + Scripts/Items/Misc/ArcaneGem.cs | 228 + Scripts/Items/Misc/Beeswax.cs | 40 + Scripts/Items/Misc/Blocker.cs | 106 + Scripts/Items/Misc/Blood.cs | 57 + Scripts/Items/Misc/BulletinBoards.cs | 620 + Scripts/Items/Misc/Corpses/Corpse.cs | 904 ++ .../Items/Misc/Corpses/CorpseNameAttribute.cs | 20 + Scripts/Items/Misc/Corpses/DecayedCorpse.cs | 115 + Scripts/Items/Misc/Corpses/Packets.cs | 125 + Scripts/Items/Misc/EffectController.cs | 339 + Scripts/Items/Misc/EffectItem.cs | 95 + Scripts/Items/Misc/FlipableAddonAttribute.cs | 130 + Scripts/Items/Misc/FlipableAttribute.cs | 118 + Scripts/Items/Misc/GlassItems.cs | 1218 ++ Scripts/Items/Misc/Gold.cs | 74 + Scripts/Items/Misc/GoldDeed.cs | 134 + Scripts/Items/Misc/Guillotine.cs | 115 + Scripts/Items/Misc/HairDye.cs | 193 + Scripts/Items/Misc/IDurability.cs | 22 + Scripts/Items/Misc/Key.cs | 469 + Scripts/Items/Misc/KeyRing.cs | 207 + Scripts/Items/Misc/LOSBlocker.cs | 119 + Scripts/Items/Misc/Moongate.cs | 63 + Scripts/Items/Misc/MorphItem.cs | 146 + Scripts/Items/Misc/OilCloth.cs | 111 + Scripts/Items/Misc/Plants.cs | 437 + Scripts/Items/Misc/PlayerBulletinBoards.cs | 640 + Scripts/Items/Misc/PoolOfAcid.cs | 101 + Scripts/Items/Misc/Scales.cs | 93 + Scripts/Items/Misc/SpecialBeardDye.cs | 185 + Scripts/Items/Misc/SpecialHairDye.cs | 190 + Scripts/Items/Misc/Static.cs | 98 + Scripts/Items/Misc/Teleporter.cs | 517 + Scripts/Items/Misc/TrashBarrel.cs | 150 + Scripts/Items/Misc/WarningItem.cs | 242 + Scripts/Items/Misc/Waypoint.cs | 161 + Scripts/Items/Rares/BottleOfAcid.cs | 142 + Scripts/Items/Rares/Elixirs/BaseManaElixir.cs | 67 + .../Items/Rares/Elixirs/BaseVigorElixir.cs | 74 + .../Items/Rares/Elixirs/InvisibilityElixir.cs | 138 + Scripts/Items/Rares/Elixirs/ManaElixir.cs | 35 + .../Rares/Elixirs/StrongInvisibilityElixir.cs | 144 + .../Items/Rares/Elixirs/StrongManaElixir.cs | 41 + .../Items/Rares/Elixirs/StrongVigorElixir.cs | 41 + Scripts/Items/Rares/Elixirs/VigorElixir.cs | 35 + .../Rares/Elixirs/WeakInvisibilityElixir.cs | 144 + Scripts/Items/Rares/Elixirs/WeakManaElixir.cs | 41 + .../Items/Rares/Elixirs/WeakVigorElixir.cs | 41 + Scripts/Items/Rares/SkeletonKeys.cs | 180 + Scripts/Items/Resources/Arrows/Arrow.cs | 44 + Scripts/Items/Resources/Arrows/Bolt.cs | 44 + Scripts/Items/Resources/Arrows/Feather.cs | 45 + Scripts/Items/Resources/Arrows/Shaft.cs | 45 + .../Items/Resources/Blacksmithing/Ingot.cs | 134 + Scripts/Items/Resources/Blacksmithing/Ore.cs | 377 + Scripts/Items/Resources/Fishing/BigFish.cs | 79 + Scripts/Items/Resources/Fishing/Fish.cs | 47 + Scripts/Items/Resources/Fishing/MagicFish.cs | 203 + .../Items/Resources/Reagents/BaseReagent.cs | 41 + .../Items/Resources/Reagents/BlackPearl.cs | 37 + Scripts/Items/Resources/Reagents/Bloodmoss.cs | 39 + Scripts/Items/Resources/Reagents/Garlic.cs | 39 + Scripts/Items/Resources/Reagents/Ginseng.cs | 39 + .../Items/Resources/Reagents/MandrakeRoot.cs | 39 + .../Items/Resources/Reagents/Nightshade.cs | 37 + .../Items/Resources/Reagents/SpidersSilk.cs | 39 + .../Items/Resources/Reagents/SulfurousAsh.cs | 39 + Scripts/Items/Resources/Supplies.cs | 604 + Scripts/Items/Resources/Tailor/BoltOfCloth.cs | 65 + Scripts/Items/Resources/Tailor/Bone.cs | 41 + Scripts/Items/Resources/Tailor/Cloth.cs | 72 + Scripts/Items/Resources/Tailor/Cotton.cs | 122 + Scripts/Items/Resources/Tailor/Flax.cs | 110 + Scripts/Items/Resources/Tailor/Hides.cs | 120 + Scripts/Items/Resources/Tailor/Leathers.cs | 106 + Scripts/Items/Resources/Tailor/UncutCloth.cs | 72 + Scripts/Items/Resources/Tailor/Wool.cs | 165 + .../Items/Resources/Tailor/YarnsAndThreads.cs | 291 + .../Resources/Tinkering/CrystalPowder.cs | 40 + Scripts/Items/Shields/BaseShield.cs | 116 + Scripts/Items/Shields/BronzeShield.cs | 37 + Scripts/Items/Shields/Buckler.cs | 37 + Scripts/Items/Shields/ChaosShield.cs | 37 + Scripts/Items/Shields/HeaterShield.cs | 37 + Scripts/Items/Shields/MetalKiteShield.cs | 50 + Scripts/Items/Shields/MetalShield.cs | 37 + Scripts/Items/Shields/OrderShield.cs | 37 + Scripts/Items/Shields/WoodenKiteShield.cs | 43 + Scripts/Items/Shields/WoodenShield.cs | 40 + .../Blacksmith Items/AnvilForge.cs | 61 + .../Blacksmith Items/LargeForge.cs | 357 + .../Items/Skill Items/Camping/BedRolled.cs | 144 + Scripts/Items/Skill Items/Camping/Bedroll.cs | 139 + Scripts/Items/Skill Items/Camping/Campfire.cs | 160 + Scripts/Items/Skill Items/Camping/Kindling.cs | 183 + .../Carpenter Items/TrophyBoard.cs | 545 + .../Items/Skill Items/Fishing/FishingPole.cs | 53 + .../Skill Items/Fishing/MessageInABottle.cs | 69 + Scripts/Items/Skill Items/Fishing/SOS.cs | 178 + Scripts/Items/Skill Items/Fishing/Sextant.cs | 155 + .../Skill Items/Fishing/ShipwreckedItem.cs | 81 + .../Skill Items/Fishing/SpecialFishingNet.cs | 352 + .../Harvest Tools/BaseHarvestTool.cs | 159 + .../Items/Skill Items/Harvest Tools/Shovel.cs | 40 + .../Skill Items/Instruments/BaseInstrument.cs | 574 + .../Items/Skill Items/Instruments/Drums.cs | 35 + .../Items/Skill Items/Instruments/Flute.cs | 33 + Scripts/Items/Skill Items/Instruments/Harp.cs | 34 + Scripts/Items/Skill Items/Instruments/Horn.cs | 31 + .../Items/Skill Items/Instruments/LapHarp.cs | 36 + Scripts/Items/Skill Items/Instruments/Lute.cs | 36 + .../Skill Items/Instruments/MagicHorn.cs | 31 + .../Items/Skill Items/Instruments/Pipes.cs | 35 + .../Skill Items/Instruments/Tambourine.cs | 35 + .../Instruments/TambourineTassel.cs | 35 + .../Items/Skill Items/Lumberjack/WoodBoard.cs | 115 + .../Items/Skill Items/Magical/BlankScroll.cs | 38 + Scripts/Items/Skill Items/Magical/Bottle.cs | 40 + .../Items/Skill Items/Magical/MagicRune.cs | 236 + .../Items/Skill Items/Magical/Magicgate.cs | 412 + .../Items/Skill Items/Magical/PotionKeg.cs | 344 + Scripts/Items/Skill Items/Misc/Bandage.cs | 464 + Scripts/Items/Skill Items/Misc/FireHorn.cs | 199 + .../Potions/Agility Potions/AgilityPotion.cs | 34 + .../Agility Potions/BaseAgilityPotion.cs | 57 + .../Agility Potions/GreaterAgilityPotion.cs | 34 + .../Items/Skill Items/Potions/BasePotion.cs | 235 + .../Potions/Cure Potions/BaseCurePotion.cs | 104 + .../Potions/Cure Potions/CurePotion.cs | 41 + .../Potions/Cure Potions/GreaterCurePotion.cs | 42 + .../Potions/Cure Potions/LesserCurePotion.cs | 40 + .../Explosion Potions/BaseExplosionPotion.cs | 296 + .../Explosion Potions/ExplosionPotion.cs | 34 + .../GreaterExplosionPotion.cs | 34 + .../LesserExplosionPotion.cs | 34 + .../Potions/Heal Potions/BaseHealPotion.cs | 84 + .../Potions/Heal Potions/GreaterHealPotion.cs | 35 + .../Potions/Heal Potions/HealPotion.cs | 35 + .../Potions/Heal Potions/LesserHealPotion.cs | 35 + .../Items/Skill Items/Potions/NightSight.cs | 51 + .../Poison Potions/BasePoisonPotion.cs | 49 + .../Poison Potions/DeadlyPoisonPotion.cs | 36 + .../Poison Potions/GreaterPoisonPotion.cs | 36 + .../Poison Potions/LesserPoisonPotion.cs | 36 + .../Potions/Poison Potions/PoisonPotion.cs | 36 + .../Refresh Potions/BaseRefreshPotion.cs | 48 + .../Potions/Refresh Potions/RefreshPotion.cs | 33 + .../Refresh Potions/TotalRefreshPotion.cs | 33 + .../Strength Potions/BaseStrengthPotion.cs | 57 + .../Strength Potions/GreaterStrengthPotion.cs | 34 + .../Strength Potions/StrengthPotion.cs | 34 + .../Skill Items/Tailor Items/Dressform.cs | 32 + .../Items/Skill Items/Tailor Items/DyeTub.cs | 291 + .../Items/Skill Items/Tailor Items/Dyes.cs | 97 + .../Tailor Items/FurnitureDyeTub.cs | 36 + .../Skill Items/Tailor Items/PigmentTub.cs | 159 + .../Skill Items/Tailor Items/Scissors.cs | 75 + .../Items/Skill Items/Thief/DisguiseKit.cs | 352 + .../Skill Items/Thief/DisguisePersistance.cs | 83 + Scripts/Items/Skill Items/Thief/LockPick.cs | 189 + Scripts/Items/Skill Items/Tinkering/Axle.cs | 39 + .../Items/Skill Items/Tinkering/AxleGears.cs | 39 + .../Items/Skill Items/Tinkering/ClockFrame.cs | 39 + .../Items/Skill Items/Tinkering/ClockParts.cs | 39 + Scripts/Items/Skill Items/Tinkering/Clocks.cs | 220 + Scripts/Items/Skill Items/Tinkering/Gears.cs | 39 + Scripts/Items/Skill Items/Tinkering/Globe.cs | 32 + Scripts/Items/Skill Items/Tinkering/Hinge.cs | 39 + .../Skill Items/Tinkering/SextantParts.cs | 39 + .../Items/Skill Items/Tinkering/Springs.cs | 39 + .../Items/Skill Items/Tinkering/Spyglass.cs | 52 + .../Items/Skill Items/Tinkering/Utensils.cs | 277 + Scripts/Items/Skill Items/Tools/BaseTool.cs | 197 + .../Items/Skill Items/Tools/DovetailSaw.cs | 45 + Scripts/Items/Skill Items/Tools/DrawKnife.cs | 41 + .../Items/Skill Items/Tools/FletcherTools.cs | 45 + .../Items/Skill Items/Tools/FlourSifter.cs | 41 + Scripts/Items/Skill Items/Tools/Froe.cs | 41 + Scripts/Items/Skill Items/Tools/Hammer.cs | 41 + Scripts/Items/Skill Items/Tools/Inshave.cs | 41 + .../Items/Skill Items/Tools/JointingPlane.cs | 45 + .../Items/Skill Items/Tools/MapmakersPen.cs | 47 + .../Items/Skill Items/Tools/MortarPestle.cs | 74 + .../Items/Skill Items/Tools/MouldingPlane.cs | 42 + Scripts/Items/Skill Items/Tools/Nails.cs | 42 + Scripts/Items/Skill Items/Tools/RollingPin.cs | 41 + Scripts/Items/Skill Items/Tools/Saw.cs | 42 + Scripts/Items/Skill Items/Tools/Scorp.cs | 41 + Scripts/Items/Skill Items/Tools/ScribesPen.cs | 47 + Scripts/Items/Skill Items/Tools/SewingKit.cs | 41 + Scripts/Items/Skill Items/Tools/Skillet.cs | 43 + .../Items/Skill Items/Tools/SledgeHammer.cs | 42 + .../Items/Skill Items/Tools/SmithHammer.cs | 44 + .../Items/Skill Items/Tools/SmoothingPlane.cs | 42 + .../Items/Skill Items/Tools/TinkerTools.cs | 80 + Scripts/Items/Skill Items/Tools/Tongs.cs | 42 + Scripts/Items/Traps/AxeTrap.cs | 150 + Scripts/Items/Traps/BaseTrap.cs | 204 + Scripts/Items/Traps/DartTrap.cs | 117 + Scripts/Items/Traps/FireColumnTrap.cs | 114 + Scripts/Items/Traps/GasTrap.cs | 123 + Scripts/Items/Traps/GiantSpikeTrap.cs | 50 + Scripts/Items/Traps/MushroomTrap.cs | 68 + Scripts/Items/Traps/SawTrap.cs | 97 + Scripts/Items/Traps/SpikeTrap.cs | 150 + Scripts/Items/Traps/StoneFaceTrap.cs | 163 + Scripts/Items/Treasure/Loot.cs | 630 + Scripts/Items/Treasure/LootChest.cs | 373 + Scripts/Items/Treasure/LootChests.cs | 350 + Scripts/Items/Treasure/LootPack.cs | 631 + Scripts/Items/Treasure/OtherChests.cs | 63 + Scripts/Items/Treasure/SunkenShip.cs | 74 + Scripts/Items/Treasure/TreasureMapChest.cs | 426 + Scripts/Items/Wands/BaseWand.cs | 244 + Scripts/Items/Wands/ClumsyWand.cs | 38 + Scripts/Items/Wands/FeebleWand.cs | 38 + Scripts/Items/Wands/FireballWand.cs | 38 + Scripts/Items/Wands/GreaterHealWand.cs | 38 + Scripts/Items/Wands/HarmWand.cs | 38 + Scripts/Items/Wands/HealWand.cs | 38 + Scripts/Items/Wands/LightningWand.cs | 38 + Scripts/Items/Wands/MagicArrowWand.cs | 38 + Scripts/Items/Wands/ManaDrainWand.cs | 38 + Scripts/Items/Wands/MarkWand.cs | 38 + Scripts/Items/Wands/RecallWand.cs | 38 + Scripts/Items/Wands/RemoveTrapWand.cs | 38 + Scripts/Items/Wands/ResurrectionWand.cs | 38 + Scripts/Items/Wands/UnlockWand.cs | 38 + Scripts/Items/Wands/WandTarget.cs | 26 + Scripts/Items/Wands/WeaknessWand.cs | 38 + Scripts/Items/Weapons/Axes/Axe.cs | 42 + Scripts/Items/Weapons/Axes/BaseAxe.cs | 163 + Scripts/Items/Weapons/Axes/BattleAxe.cs | 43 + Scripts/Items/Weapons/Axes/DoubleAxe.cs | 42 + Scripts/Items/Weapons/Axes/ExecutionersAxe.cs | 42 + Scripts/Items/Weapons/Axes/Hatchet.cs | 42 + Scripts/Items/Weapons/Axes/LargeBattleAxe.cs | 42 + Scripts/Items/Weapons/Axes/Pickaxe.cs | 50 + Scripts/Items/Weapons/Axes/TwoHandedAxe.cs | 42 + Scripts/Items/Weapons/Axes/WarAxe.cs | 52 + Scripts/Items/Weapons/BaseMeleeWeapon.cs | 60 + Scripts/Items/Weapons/BaseWeapon.cs | 1866 +++ Scripts/Items/Weapons/Fists.cs | 281 + Scripts/Items/Weapons/Knives/BaseKnife.cs | 59 + Scripts/Items/Weapons/Knives/ButcherKnife.cs | 42 + Scripts/Items/Weapons/Knives/Cleaver.cs | 45 + Scripts/Items/Weapons/Knives/Dagger.cs | 47 + Scripts/Items/Weapons/Knives/SkinningKnife.cs | 42 + .../Items/Weapons/Knives/ThrowingDagger.cs | 125 + Scripts/Items/Weapons/Maces/BaseBashing.cs | 60 + Scripts/Items/Weapons/Maces/Club.cs | 43 + Scripts/Items/Weapons/Maces/HammerPick.cs | 43 + Scripts/Items/Weapons/Maces/Mace.cs | 42 + Scripts/Items/Weapons/Maces/Maul.cs | 45 + Scripts/Items/Weapons/Maces/WarHammer.cs | 45 + Scripts/Items/Weapons/Maces/WarMace.cs | 42 + Scripts/Items/Weapons/Maces/Whip.cs | 46 + Scripts/Items/Weapons/PoleArms/Bardiche.cs | 42 + Scripts/Items/Weapons/PoleArms/BasePoleArm.cs | 117 + Scripts/Items/Weapons/PoleArms/Halberd.cs | 42 + Scripts/Items/Weapons/PoleArms/Scythe.cs | 48 + Scripts/Items/Weapons/Ranged/BaseRanged.cs | 111 + Scripts/Items/Weapons/Ranged/Bow.cs | 54 + Scripts/Items/Weapons/Ranged/Crossbow.cs | 49 + Scripts/Items/Weapons/Ranged/HeavyCrossbow.cs | 49 + Scripts/Items/Weapons/SlayerEntry.cs | 81 + Scripts/Items/Weapons/SlayerGroup.cs | 667 + Scripts/Items/Weapons/SlayerName.cs | 40 + .../Items/Weapons/SpearsAndForks/BaseSpear.cs | 60 + Scripts/Items/Weapons/SpearsAndForks/Pike.cs | 42 + .../Items/Weapons/SpearsAndForks/Pitchfork.cs | 45 + Scripts/Items/Weapons/SpearsAndForks/Spear.cs | 42 + .../Items/Weapons/SpearsAndForks/WarFork.cs | 47 + Scripts/Items/Weapons/Staves/BaseStaff.cs | 45 + Scripts/Items/Weapons/Staves/BlackStaff.cs | 42 + Scripts/Items/Weapons/Staves/GlacialStaff.cs | 35 + Scripts/Items/Weapons/Staves/GnarledStaff.cs | 43 + Scripts/Items/Weapons/Staves/QuarterStaff.cs | 43 + .../Items/Weapons/Staves/ShepherdsCrook.cs | 45 + Scripts/Items/Weapons/Swords/BaseSword.cs | 56 + Scripts/Items/Weapons/Swords/Broadsword.cs | 45 + Scripts/Items/Weapons/Swords/Cutlass.cs | 45 + Scripts/Items/Weapons/Swords/Katana.cs | 45 + Scripts/Items/Weapons/Swords/Kryss.cs | 52 + Scripts/Items/Weapons/Swords/Longsword.cs | 45 + Scripts/Items/Weapons/Swords/Rapier.cs | 47 + Scripts/Items/Weapons/Swords/Scimitar.cs | 45 + Scripts/Items/Weapons/Swords/ThinLongsword.cs | 45 + Scripts/Items/Weapons/Swords/VikingSword.cs | 45 + Scripts/Items/Weapons/WeaponEnums.cs | 66 + Scripts/Misc/AccountPrompt.cs | 40 + Scripts/Misc/Animations.cs | 30 + Scripts/Misc/AttackMessage.cs | 62 + Scripts/Misc/AutoRestart.cs | 88 + Scripts/Misc/AutoSave.cs | 187 + Scripts/Misc/Broadcasts.cs | 36 + Scripts/Misc/CharacterCreation.cs | 495 + Scripts/Misc/Cleanup.cs | 150 + Scripts/Misc/ClientVerification.cs | 221 + Scripts/Misc/CrashGuard.cs | 263 + Scripts/Misc/DataPath.cs | 64 + Scripts/Misc/DispellableAttribute.cs | 10 + Scripts/Misc/DispellableFieldAttribute.cs | 10 + Scripts/Misc/Email.cs | 78 + Scripts/Misc/Emitter.cs | 740 + Scripts/Misc/Fastwalk.cs | 32 + Scripts/Misc/FoodDecay.cs | 150 + Scripts/Misc/Geometry.cs | 224 + Scripts/Misc/HardwareInfo.cs | 189 + Scripts/Misc/InhumanSpeech.cs | 595 + Scripts/Misc/Keywords.cs | 44 + Scripts/Misc/LanguageStatistics.cs | 375 + Scripts/Misc/LightCycle.cs | 140 + Scripts/Misc/LoginStats.cs | 32 + Scripts/Misc/MapDefinitions.cs | 52 + Scripts/Misc/NameList.cs | 109 + Scripts/Misc/NameVerification.cs | 207 + Scripts/Misc/Notoriety.cs | 361 + Scripts/Misc/Paperdoll.cs | 36 + Scripts/Misc/Poison.cs | 113 + Scripts/Misc/ProfanityProtection.cs | 124 + Scripts/Misc/Profile.cs | 98 + Scripts/Misc/ProtocolExtensions.cs | 107 + Scripts/Misc/RaceDefinitions.cs | 223 + Scripts/Misc/RegenRates.cs | 130 + Scripts/Misc/RenameRequests.cs | 34 + Scripts/Misc/ResourceInfo.cs | 302 + Scripts/Misc/ServerList.cs | 176 + Scripts/Misc/ShardPoller.cs | 643 + Scripts/Misc/ShrinkTable.cs | 86 + Scripts/Misc/SocketOptions.cs | 42 + Scripts/Misc/Tasks.cs | 147 + Scripts/Misc/TextDefinition.cs | 125 + Scripts/Misc/Titles.cs | 343 + Scripts/Misc/TreasureMapProtection.cs | 77 + Scripts/Misc/Ultima.cs | 57 + Scripts/Misc/Weather.cs | 387 + Scripts/Misc/WebStatus.cs | 119 + Scripts/Misc/WeightOverloading.cs | 126 + Scripts/Misc/WelcomeTimer.cs | 38 + Scripts/Mobiles/Animals/Ape.cs | 56 + Scripts/Mobiles/Animals/Bears/BlackBear.cs | 58 + Scripts/Mobiles/Animals/Bears/BrownBear.cs | 56 + Scripts/Mobiles/Animals/Bears/CaveBear.cs | 54 + Scripts/Mobiles/Animals/Bears/GrizzlyBear.cs | 57 + Scripts/Mobiles/Animals/Bears/KodiakBear.cs | 54 + Scripts/Mobiles/Animals/Bears/PandaBear.cs | 56 + Scripts/Mobiles/Animals/Bears/PolarBear.cs | 57 + Scripts/Mobiles/Animals/Bears/SnowBear.cs | 54 + Scripts/Mobiles/Animals/Birds/AxeBeak.cs | 56 + Scripts/Mobiles/Animals/Birds/Bird.cs | 74 + Scripts/Mobiles/Animals/Birds/Chicken.cs | 58 + Scripts/Mobiles/Animals/Birds/Eagle.cs | 58 + Scripts/Mobiles/Animals/Birds/GiantHawk.cs | 58 + Scripts/Mobiles/Animals/Birds/GiantRaven.cs | 58 + Scripts/Mobiles/Animals/Birds/Phoenix.cs | 65 + Scripts/Mobiles/Animals/Birds/Roc.cs | 61 + Scripts/Mobiles/Animals/Birds/Turkey.cs | 58 + Scripts/Mobiles/Animals/Boar.cs | 56 + Scripts/Mobiles/Animals/Canines/DireWolf.cs | 58 + Scripts/Mobiles/Animals/Canines/Dog.cs | 56 + Scripts/Mobiles/Animals/Canines/GreyWolf.cs | 58 + Scripts/Mobiles/Animals/Canines/TimberWolf.cs | 57 + Scripts/Mobiles/Animals/Canines/Werewolf.cs | 54 + Scripts/Mobiles/Animals/Canines/WhiteWolf.cs | 60 + Scripts/Mobiles/Animals/Cows/Bull.cs | 59 + Scripts/Mobiles/Animals/Cows/Cow.cs | 127 + Scripts/Mobiles/Animals/Deer.cs | 70 + Scripts/Mobiles/Animals/Felines/Cat.cs | 57 + Scripts/Mobiles/Animals/Felines/Cougar.cs | 56 + Scripts/Mobiles/Animals/Felines/Lion.cs | 56 + Scripts/Mobiles/Animals/Felines/Panther.cs | 57 + .../Mobiles/Animals/Felines/SnowLeopard.cs | 58 + Scripts/Mobiles/Animals/Felines/Tiger.cs | 56 + Scripts/Mobiles/Animals/Goat.cs | 57 + Scripts/Mobiles/Animals/Gorilla.cs | 56 + Scripts/Mobiles/Animals/GreatDeer.cs | 71 + Scripts/Mobiles/Animals/MountainGoat.cs | 57 + Scripts/Mobiles/Animals/Pets/BaseMount.cs | 462 + Scripts/Mobiles/Animals/Pets/Horse.cs | 72 + Scripts/Mobiles/Animals/Pets/Llama.cs | 60 + Scripts/Mobiles/Animals/Pets/PackHorse.cs | 202 + Scripts/Mobiles/Animals/Pets/PackLlama.cs | 129 + Scripts/Mobiles/Animals/Pig.cs | 56 + Scripts/Mobiles/Animals/Rodents/Bat.cs | 61 + Scripts/Mobiles/Animals/Rodents/CaveBat.cs | 80 + Scripts/Mobiles/Animals/Rodents/GiantRat.cs | 62 + Scripts/Mobiles/Animals/Rodents/Rabbit.cs | 64 + Scripts/Mobiles/Animals/Rodents/Raccoon.cs | 59 + Scripts/Mobiles/Animals/Rodents/Rat.cs | 60 + Scripts/Mobiles/Animals/Rodents/Squirrel.cs | 59 + Scripts/Mobiles/Animals/Rodents/VampireBat.cs | 79 + Scripts/Mobiles/Animals/Sheep.cs | 102 + Scripts/Mobiles/Animals/Walrus.cs | 56 + Scripts/Mobiles/Animals/WoolyBanta.cs | 60 + .../Mobiles/Base/AI/AIControlMobileTarget.cs | 43 + Scripts/Mobiles/Base/AI/AnimalAI.cs | 157 + Scripts/Mobiles/Base/AI/ArcherAI.cs | 131 + Scripts/Mobiles/Base/AI/BaseAI.cs | 2594 ++++ Scripts/Mobiles/Base/AI/BerserkAI.cs | 87 + Scripts/Mobiles/Base/AI/CitizenAI.cs | 34 + Scripts/Mobiles/Base/AI/HealerAI.cs | 176 + Scripts/Mobiles/Base/AI/MageAI.cs | 1020 ++ Scripts/Mobiles/Base/AI/MeleeAI.cs | 183 + Scripts/Mobiles/Base/AI/PredatorAI.cs | 100 + Scripts/Mobiles/Base/AI/SpeedInfo.cs | 458 + Scripts/Mobiles/Base/AI/ThiefAI.cs | 194 + Scripts/Mobiles/Base/AI/TimidAI.cs | 121 + Scripts/Mobiles/Base/AI/VendorAI.cs | 149 + Scripts/Mobiles/Base/AnimalBuy.cs | 28 + Scripts/Mobiles/Base/BaseCreature.cs | 4127 ++++++ Scripts/Mobiles/Base/BaseGuildmaster.cs | 233 + Scripts/Mobiles/Base/BaseHealer.cs | 107 + Scripts/Mobiles/Base/BaseVendor.cs | 1375 ++ Scripts/Mobiles/Base/BeverageBuy.cs | 34 + Scripts/Mobiles/Base/GenericBuy.cs | 347 + Scripts/Mobiles/Base/GenericSell.cs | 148 + Scripts/Mobiles/Base/PlayerBarkeeper.cs | 1064 ++ Scripts/Mobiles/Base/PlayerMobile.cs | 2173 +++ Scripts/Mobiles/Base/PlayerVendor.cs | 1687 +++ Scripts/Mobiles/Base/PresetMapBuy.cs | 23 + Scripts/Mobiles/Base/RentedVendor.cs | 426 + Scripts/Mobiles/Base/VendorInventory.cs | 179 + Scripts/Mobiles/Bugs/AntLion.cs | 91 + Scripts/Mobiles/Bugs/AntaurLord.cs | 61 + Scripts/Mobiles/Bugs/AntaurQueen.cs | 55 + Scripts/Mobiles/Bugs/AntaurSoldier.cs | 58 + Scripts/Mobiles/Bugs/AntaurWorker.cs | 58 + Scripts/Mobiles/Bugs/ArcaneScarab.cs | 78 + Scripts/Mobiles/Bugs/Beetle.cs | 63 + Scripts/Mobiles/Bugs/BloodSpider.cs | 88 + Scripts/Mobiles/Bugs/CarcassWorm.cs | 59 + Scripts/Mobiles/Bugs/DeadlyScorpion.cs | 65 + Scripts/Mobiles/Bugs/DreadSpider.cs | 67 + Scripts/Mobiles/Bugs/FireBeetle.cs | 65 + Scripts/Mobiles/Bugs/FlameCrawler.cs | 66 + Scripts/Mobiles/Bugs/FrostSpider.cs | 61 + Scripts/Mobiles/Bugs/GiantBlackWidow.cs | 65 + Scripts/Mobiles/Bugs/GiantScarab.cs | 66 + Scripts/Mobiles/Bugs/GiantSpider.cs | 64 + Scripts/Mobiles/Bugs/GoraxHorned.cs | 64 + Scripts/Mobiles/Bugs/GoraxSlicer.cs | 70 + Scripts/Mobiles/Bugs/IronBeetle.cs | 63 + Scripts/Mobiles/Bugs/Kith.cs | 65 + Scripts/Mobiles/Bugs/Mantis.cs | 65 + Scripts/Mobiles/Bugs/SandScorpion.cs | 65 + Scripts/Mobiles/Bugs/SandSpider.cs | 61 + Scripts/Mobiles/Bugs/Scarab.cs | 66 + Scripts/Mobiles/Bugs/Scorpion.cs | 65 + Scripts/Mobiles/Bugs/Shaclaw.cs | 71 + Scripts/Mobiles/Bugs/Swarm.cs | 85 + Scripts/Mobiles/Bugs/TerathanAvenger.cs | 68 + Scripts/Mobiles/Bugs/TerathanDrone.cs | 67 + Scripts/Mobiles/Bugs/TerathanMatriarch.cs | 64 + Scripts/Mobiles/Bugs/TerathanWarrior.cs | 61 + Scripts/Mobiles/Bugs/WidowQueen.cs | 66 + Scripts/Mobiles/Demons/Balron.cs | 69 + Scripts/Mobiles/Demons/Daemon.cs | 73 + Scripts/Mobiles/Demons/DemonClaw.cs | 65 + Scripts/Mobiles/Demons/Demoness.cs | 65 + Scripts/Mobiles/Demons/DemonicSpirit.cs | 67 + Scripts/Mobiles/Demons/Deviless.cs | 71 + Scripts/Mobiles/Demons/FireMephit.cs | 67 + Scripts/Mobiles/Demons/HornedDevil.cs | 70 + Scripts/Mobiles/Demons/IceDevil.cs | 70 + Scripts/Mobiles/Demons/IceFiend.cs | 63 + Scripts/Mobiles/Demons/IceMephit.cs | 67 + Scripts/Mobiles/Demons/Imp.cs | 64 + Scripts/Mobiles/Demons/Minion.cs | 65 + Scripts/Mobiles/Demons/MinionWarrior.cs | 65 + Scripts/Mobiles/Demons/MinionWizard.cs | 69 + Scripts/Mobiles/Demons/ShadowDemon.cs | 69 + Scripts/Mobiles/Demons/Succubus.cs | 111 + Scripts/Mobiles/Demons/SuccubusQueen.cs | 112 + Scripts/Mobiles/Dragons/AncientWyrm.cs | 79 + Scripts/Mobiles/Dragons/AncientWyvern.cs | 91 + Scripts/Mobiles/Dragons/Dragon.cs | 66 + Scripts/Mobiles/Dragons/Drake.cs | 61 + Scripts/Mobiles/Dragons/Drakkhen.cs | 65 + Scripts/Mobiles/Dragons/LavaDrake.cs | 65 + Scripts/Mobiles/Dragons/SeaDragon.cs | 66 + Scripts/Mobiles/Dragons/SeaDrake.cs | 61 + Scripts/Mobiles/Dragons/ShadowWyrm.cs | 79 + Scripts/Mobiles/Dragons/SwampDragon.cs | 67 + Scripts/Mobiles/Dragons/WhiteWyrm.cs | 65 + Scripts/Mobiles/Dragons/Wyvern.cs | 92 + Scripts/Mobiles/Elemental/AcidElemental.cs | 67 + Scripts/Mobiles/Elemental/AirElemental.cs | 71 + Scripts/Mobiles/Elemental/BloodElemental.cs | 65 + .../Mobiles/Elemental/BloodElementalElder.cs | 64 + Scripts/Mobiles/Elemental/DeepSeaElemental.cs | 67 + Scripts/Mobiles/Elemental/EarthElemental.cs | 71 + Scripts/Mobiles/Elemental/Efreet.cs | 78 + Scripts/Mobiles/Elemental/FireElemental.cs | 73 + Scripts/Mobiles/Elemental/GasCloud.cs | 67 + Scripts/Mobiles/Elemental/Genie.cs | 71 + Scripts/Mobiles/Elemental/Goliath.cs | 74 + Scripts/Mobiles/Elemental/IceElemental.cs | 67 + .../Mobiles/Elemental/LightningElemental.cs | 70 + Scripts/Mobiles/Elemental/MagmaElemental.cs | 74 + Scripts/Mobiles/Elemental/MeteorElemental.cs | 69 + Scripts/Mobiles/Elemental/MudElemental.cs | 63 + Scripts/Mobiles/Elemental/PoisonElemental.cs | 74 + .../Mobiles/Elemental/PoisonElementalElder.cs | 73 + Scripts/Mobiles/Elemental/SandVortex.cs | 103 + Scripts/Mobiles/Elemental/SnowElemental.cs | 66 + Scripts/Mobiles/Elemental/StoneGolem.cs | 66 + Scripts/Mobiles/Elemental/StoneStatue.cs | 80 + Scripts/Mobiles/Elemental/StormCloud.cs | 66 + Scripts/Mobiles/Elemental/Typhoon.cs | 71 + Scripts/Mobiles/Elemental/WaterElemental.cs | 69 + .../Mobiles/Elemental/WaterElementalElder.cs | 68 + Scripts/Mobiles/Elemental/WoodElemental.cs | 67 + Scripts/Mobiles/Fey/Centaur.cs | 69 + Scripts/Mobiles/Fey/DreadHorn.cs | 66 + Scripts/Mobiles/Fey/Fairy.cs | 63 + Scripts/Mobiles/Fey/Pixie.cs | 65 + Scripts/Mobiles/Fey/Satyr.cs | 112 + Scripts/Mobiles/Fey/Unicorn.cs | 67 + Scripts/Mobiles/Fey/Wisp.cs | 65 + Scripts/Mobiles/Gargoyles/FireGargoyle.cs | 63 + Scripts/Mobiles/Gargoyles/Gargoyle.cs | 62 + Scripts/Mobiles/Gargoyles/GargoyleCrimson.cs | 62 + Scripts/Mobiles/Gargoyles/GargoyleIce.cs | 60 + Scripts/Mobiles/Gargoyles/GargoyleKnight.cs | 62 + Scripts/Mobiles/Gargoyles/GargoyleMage.cs | 64 + Scripts/Mobiles/Gargoyles/GargoyleStone.cs | 60 + Scripts/Mobiles/Gargoyles/GargoyleUndead.cs | 59 + Scripts/Mobiles/Gargoyles/GargoyleWizard.cs | 65 + Scripts/Mobiles/Gargoyles/StoneGargoyle.cs | 62 + Scripts/Mobiles/Gargoyles/ZombieGargoyle.cs | 59 + Scripts/Mobiles/Giants/ArcticOgreLord.cs | 64 + Scripts/Mobiles/Giants/Cyclops.cs | 62 + Scripts/Mobiles/Giants/CyclopsChief.cs | 63 + Scripts/Mobiles/Giants/CyclopsLord.cs | 63 + Scripts/Mobiles/Giants/Ettin.cs | 62 + Scripts/Mobiles/Giants/ForestGiant.cs | 64 + Scripts/Mobiles/Giants/FrostGiant.cs | 67 + Scripts/Mobiles/Giants/HillGiant.cs | 64 + Scripts/Mobiles/Giants/JungleGiant.cs | 65 + Scripts/Mobiles/Giants/MountainGiant.cs | 69 + Scripts/Mobiles/Giants/Ogre.cs | 62 + Scripts/Mobiles/Giants/OgreLord.cs | 64 + Scripts/Mobiles/Giants/OgreMagi.cs | 66 + Scripts/Mobiles/Giants/SandGiant.cs | 65 + Scripts/Mobiles/Giants/SeaGiant.cs | 63 + Scripts/Mobiles/Giants/ShadowTitan.cs | 65 + Scripts/Mobiles/Giants/SnowEttin.cs | 62 + Scripts/Mobiles/Giants/StormGiant.cs | 65 + Scripts/Mobiles/Giants/Titan.cs | 63 + Scripts/Mobiles/Hellish/Cerberus.cs | 64 + Scripts/Mobiles/Hellish/Haderus.cs | 68 + Scripts/Mobiles/Hellish/HellCat.cs | 62 + Scripts/Mobiles/Hellish/HellHound.cs | 59 + Scripts/Mobiles/Hellish/Manticore.cs | 61 + Scripts/Mobiles/Hellish/Nightmare.cs | 79 + Scripts/Mobiles/Hellish/Serperus.cs | 64 + Scripts/Mobiles/Humanoid/BlackKnight.cs | 91 + Scripts/Mobiles/Humanoid/Brigand.cs | 89 + Scripts/Mobiles/Humanoid/Bugbear.cs | 63 + Scripts/Mobiles/Humanoid/Caveman.cs | 62 + Scripts/Mobiles/Humanoid/Dwarf.cs | 80 + Scripts/Mobiles/Humanoid/DwarfKnight.cs | 80 + Scripts/Mobiles/Humanoid/DwarfWarrior.cs | 79 + Scripts/Mobiles/Humanoid/EvilMage.cs | 83 + Scripts/Mobiles/Humanoid/EvilMageLord.cs | 84 + Scripts/Mobiles/Humanoid/Executioner.cs | 88 + Scripts/Mobiles/Humanoid/FrostTroll.cs | 62 + Scripts/Mobiles/Humanoid/Goblin.cs | 65 + Scripts/Mobiles/Humanoid/GoblinArcher.cs | 66 + Scripts/Mobiles/Humanoid/GoblinWarrior.cs | 66 + Scripts/Mobiles/Humanoid/Hobgoblin.cs | 74 + Scripts/Mobiles/Humanoid/HobgoblinArcher.cs | 73 + Scripts/Mobiles/Humanoid/HobgoblinChief.cs | 75 + Scripts/Mobiles/Humanoid/HobgoblinShaman.cs | 67 + Scripts/Mobiles/Humanoid/MindFlayer.cs | 90 + Scripts/Mobiles/Humanoid/Minotaur.cs | 61 + Scripts/Mobiles/Humanoid/MinotaurChief.cs | 61 + Scripts/Mobiles/Humanoid/MinotaurLord.cs | 61 + Scripts/Mobiles/Humanoid/Orc.cs | 84 + Scripts/Mobiles/Humanoid/OrcCaptain.cs | 77 + Scripts/Mobiles/Humanoid/OrcishLord.cs | 76 + Scripts/Mobiles/Humanoid/OrcishMage.cs | 69 + Scripts/Mobiles/Humanoid/Pharaoh.cs | 66 + Scripts/Mobiles/Humanoid/Pirate.cs | 143 + Scripts/Mobiles/Humanoid/Ratman.cs | 65 + Scripts/Mobiles/Humanoid/RatmanArcher.cs | 75 + Scripts/Mobiles/Humanoid/RatmanMage.cs | 77 + Scripts/Mobiles/Humanoid/Savage.cs | 72 + Scripts/Mobiles/Humanoid/SavageLeader.cs | 68 + Scripts/Mobiles/Humanoid/SavageShaman.cs | 233 + Scripts/Mobiles/Humanoid/Troll.cs | 60 + Scripts/Mobiles/Humanoid/Yeti.cs | 62 + Scripts/Mobiles/Monsters/AncientGazer.cs | 62 + Scripts/Mobiles/Monsters/AncientSphinx.cs | 79 + Scripts/Mobiles/Monsters/CaveDweller.cs | 60 + Scripts/Mobiles/Monsters/ElderGazer.cs | 62 + Scripts/Mobiles/Monsters/ElderHarpy.cs | 87 + Scripts/Mobiles/Monsters/FrostOoze.cs | 58 + Scripts/Mobiles/Monsters/Gazer.cs | 63 + Scripts/Mobiles/Monsters/Golem.cs | 88 + Scripts/Mobiles/Monsters/Griffon.cs | 61 + Scripts/Mobiles/Monsters/Harpy.cs | 87 + Scripts/Mobiles/Monsters/HeadlessOne.cs | 62 + Scripts/Mobiles/Monsters/Hippogriff.cs | 61 + Scripts/Mobiles/Monsters/LargeSlime.cs | 62 + Scripts/Mobiles/Monsters/Mongbat.cs | 60 + Scripts/Mobiles/Monsters/Owlbear.cs | 56 + Scripts/Mobiles/Monsters/RoyalSphinx.cs | 80 + Scripts/Mobiles/Monsters/Sasquatch.cs | 56 + Scripts/Mobiles/Monsters/Slime.cs | 64 + Scripts/Mobiles/Monsters/Sludge.cs | 62 + Scripts/Mobiles/Monsters/Sphinx.cs | 109 + Scripts/Mobiles/Monsters/Stalker.cs | 60 + Scripts/Mobiles/Monsters/Stirge.cs | 80 + Scripts/Mobiles/Monsters/StoneHarpy.cs | 89 + Scripts/Mobiles/Monsters/Xorn.cs | 107 + Scripts/Mobiles/Plants/BloodLotus.cs | 87 + Scripts/Mobiles/Plants/Corpser.cs | 68 + Scripts/Mobiles/Plants/Ent.cs | 66 + Scripts/Mobiles/Plants/Fungal.cs | 88 + Scripts/Mobiles/Plants/FungalMage.cs | 91 + Scripts/Mobiles/Plants/Reaper.cs | 66 + Scripts/Mobiles/Plants/Shambler.cs | 57 + Scripts/Mobiles/Plants/ShamblingMound.cs | 62 + Scripts/Mobiles/Plants/SwampTentacle.cs | 61 + Scripts/Mobiles/Plants/SwampThing.cs | 69 + Scripts/Mobiles/Plants/WhippingVine.cs | 58 + Scripts/Mobiles/Reptilians/Alligator.cs | 60 + Scripts/Mobiles/Reptilians/BullFrog.cs | 63 + .../Reptilians/Dinosaurs/Gorceratops.cs | 60 + .../Mobiles/Reptilians/Dinosaurs/Meglasaur.cs | 56 + .../Mobiles/Reptilians/Dinosaurs/Raptor.cs | 55 + .../Reptilians/Dinosaurs/Stegosaurus.cs | 56 + .../Reptilians/Dinosaurs/Teradactyl.cs | 63 + .../Reptilians/Dinosaurs/Tyranasaur.cs | 58 + Scripts/Mobiles/Reptilians/DragonTurtle.cs | 69 + Scripts/Mobiles/Reptilians/Drasolisk.cs | 69 + Scripts/Mobiles/Reptilians/FireSalamander.cs | 64 + Scripts/Mobiles/Reptilians/FireToad.cs | 64 + Scripts/Mobiles/Reptilians/GiantLizard.cs | 62 + Scripts/Mobiles/Reptilians/GiantToad.cs | 66 + Scripts/Mobiles/Reptilians/Hydra.cs | 69 + Scripts/Mobiles/Reptilians/IceSalamander.cs | 63 + Scripts/Mobiles/Reptilians/IceToad.cs | 61 + Scripts/Mobiles/Reptilians/LavaLizard.cs | 67 + Scripts/Mobiles/Reptilians/Lizardman.cs | 70 + Scripts/Mobiles/Reptilians/Sakkhra.cs | 76 + Scripts/Mobiles/Reptilians/SakkhraShaman.cs | 69 + Scripts/Mobiles/Reptilians/Seeker.cs | 60 + Scripts/Mobiles/Reptilians/Serpents/Cobra.cs | 73 + .../Mobiles/Reptilians/Serpents/FireNaga.cs | 69 + .../Reptilians/Serpents/GiantSerpent.cs | 73 + .../Mobiles/Reptilians/Serpents/IceSerpent.cs | 86 + Scripts/Mobiles/Reptilians/Serpents/Kobra.cs | 67 + .../Reptilians/Serpents/LavaSerpent.cs | 73 + Scripts/Mobiles/Reptilians/Serpents/Medusa.cs | 105 + Scripts/Mobiles/Reptilians/Serpents/Naga.cs | 75 + .../Mobiles/Reptilians/Serpents/NagaQueen.cs | 70 + .../Reptilians/Serpents/NagaWarrior.cs | 67 + .../Reptilians/Serpents/OphidianArchmage.cs | 72 + .../Reptilians/Serpents/OphidianKnight.cs | 73 + .../Reptilians/Serpents/OphidianMage.cs | 72 + .../Reptilians/Serpents/OphidianMatriarch.cs | 64 + .../Reptilians/Serpents/OphidianWarrior.cs | 68 + .../Reptilians/Serpents/SilverSerpent.cs | 68 + Scripts/Mobiles/Reptilians/Serpents/Snake.cs | 59 + Scripts/Mobiles/Reptilians/Serpents/Viper.cs | 73 + Scripts/Mobiles/Reptilians/Silisk.cs | 71 + Scripts/Mobiles/Reptilians/Torax.cs | 59 + Scripts/Mobiles/Reptilians/Turtle.cs | 55 + Scripts/Mobiles/Sea/Dagon.cs | 69 + Scripts/Mobiles/Sea/DeepSeaSerpent.cs | 70 + Scripts/Mobiles/Sea/Dolphin.cs | 78 + Scripts/Mobiles/Sea/GiantCrab.cs | 61 + Scripts/Mobiles/Sea/GiantEel.cs | 106 + Scripts/Mobiles/Sea/GiantSquid.cs | 67 + Scripts/Mobiles/Sea/GreatWhite.cs | 66 + Scripts/Mobiles/Sea/Kraken.cs | 64 + Scripts/Mobiles/Sea/Krakoa.cs | 65 + Scripts/Mobiles/Sea/Ktulu.cs | 71 + Scripts/Mobiles/Sea/Leviathan.cs | 84 + Scripts/Mobiles/Sea/Lobstran.cs | 65 + Scripts/Mobiles/Sea/Lochasaur.cs | 66 + Scripts/Mobiles/Sea/Lurker.cs | 68 + Scripts/Mobiles/Sea/Megalodon.cs | 67 + Scripts/Mobiles/Sea/Sahuagin.cs | 64 + Scripts/Mobiles/Sea/SahuaginMage.cs | 68 + Scripts/Mobiles/Sea/SeaDevil.cs | 71 + Scripts/Mobiles/Sea/SeaHydra.cs | 70 + Scripts/Mobiles/Sea/SeaSerpent.cs | 71 + Scripts/Mobiles/Sea/Seahorse.cs | 70 + Scripts/Mobiles/Sea/Shark.cs | 65 + Scripts/Mobiles/Summoned/BladeSpirits.cs | 91 + Scripts/Mobiles/Summoned/EnergyVortex.cs | 90 + Scripts/Mobiles/Towns/Actions.cs | 723 + Scripts/Mobiles/Towns/Citizens/CampAAddon.cs | 221 + Scripts/Mobiles/Towns/Citizens/CampBAddon.cs | 221 + Scripts/Mobiles/Towns/Citizens/CampCAddon.cs | 221 + Scripts/Mobiles/Towns/Citizens/CampDAddon.cs | 222 + Scripts/Mobiles/Towns/Citizens/Citizen.cs | 307 + .../Mobiles/Towns/Citizens/CitizenDress.cs | 463 + Scripts/Mobiles/Towns/Citizens/CitizenTalk.cs | 165 + .../Mobiles/Towns/Citizens/CitizenTitles.cs | 264 + Scripts/Mobiles/Towns/Guard.cs | 202 + .../Guildmasters/AlchemistGuildmaster.cs | 45 + .../Towns/Guildmasters/AssassinGuildmaster.cs | 74 + .../Towns/Guildmasters/BardGuildmaster.cs | 52 + .../Guildmasters/BlacksmithGuildmaster.cs | 49 + .../Guildmasters/CarpentryGuildmaster.cs | 44 + .../Towns/Guildmasters/HealerGuildmaster.cs | 50 + .../Towns/Guildmasters/LibraryGuildmaster.cs | 53 + .../Towns/Guildmasters/MageGuildmaster.cs | 52 + .../Towns/Guildmasters/MarinerGuildmaster.cs | 48 + .../Towns/Guildmasters/RangerGuildmaster.cs | 71 + .../Towns/Guildmasters/TailorGuildmaster.cs | 41 + .../Towns/Guildmasters/ThiefGuildmaster.cs | 68 + .../Towns/Guildmasters/TinkerGuildmaster.cs | 45 + .../Towns/Guildmasters/WarriorGuildmaster.cs | 76 + Scripts/Mobiles/Towns/Healer.cs | 70 + .../Towns/Sales/Armors/SBChainmailArmor.cs | 39 + .../Towns/Sales/Armors/SBHelmetArmor.cs | 47 + .../Towns/Sales/Armors/SBLeatherArmor.cs | 57 + .../Towns/Sales/Armors/SBMetalShields.cs | 44 + .../Towns/Sales/Armors/SBPlateArmor.cs | 47 + .../Towns/Sales/Armors/SBRingmailArmor.cs | 42 + .../Towns/Sales/Armors/SBStuddedArmor.cs | 47 + .../Towns/Sales/Armors/SBWoodenShields.cs | 37 + Scripts/Mobiles/Towns/Sales/SBAlchemist.cs | 80 + Scripts/Mobiles/Towns/Sales/SBArchitect.cs | 103 + Scripts/Mobiles/Towns/Sales/SBAssassin.cs | 45 + Scripts/Mobiles/Towns/Sales/SBBaker.cs | 58 + Scripts/Mobiles/Towns/Sales/SBBard.cs | 47 + Scripts/Mobiles/Towns/Sales/SBBarkeeper.cs | 100 + Scripts/Mobiles/Towns/Sales/SBBeekeeper.cs | 44 + Scripts/Mobiles/Towns/Sales/SBBlacksmith.cs | 198 + Scripts/Mobiles/Towns/Sales/SBBowyer.cs | 35 + Scripts/Mobiles/Towns/Sales/SBButcher.cs | 57 + Scripts/Mobiles/Towns/Sales/SBCarpenter.cs | 88 + Scripts/Mobiles/Towns/Sales/SBCobbler.cs | 42 + Scripts/Mobiles/Towns/Sales/SBCook.cs | 89 + Scripts/Mobiles/Towns/Sales/SBFarmer.cs | 76 + Scripts/Mobiles/Towns/Sales/SBFisherman.cs | 45 + Scripts/Mobiles/Towns/Sales/SBGuilds.cs | 171 + Scripts/Mobiles/Towns/Sales/SBGypsy.cs | 48 + Scripts/Mobiles/Towns/Sales/SBHairStylist.cs | 39 + Scripts/Mobiles/Towns/Sales/SBHealer.cs | 42 + Scripts/Mobiles/Towns/Sales/SBHerbalist.cs | 79 + Scripts/Mobiles/Towns/Sales/SBInfo.cs | 16 + Scripts/Mobiles/Towns/Sales/SBInnKeeper.cs | 113 + Scripts/Mobiles/Towns/Sales/SBJester.cs | 54 + Scripts/Mobiles/Towns/Sales/SBJewel.cs | 71 + .../Mobiles/Towns/Sales/SBLeatherWorker.cs | 39 + Scripts/Mobiles/Towns/Sales/SBMage.cs | 87 + Scripts/Mobiles/Towns/Sales/SBMapmaker.cs | 43 + Scripts/Mobiles/Towns/Sales/SBMiller.cs | 37 + Scripts/Mobiles/Towns/Sales/SBMiner.cs | 45 + .../Mobiles/Towns/Sales/SBPlayerBarkeeper.cs | 48 + Scripts/Mobiles/Towns/Sales/SBProvisioner.cs | 156 + Scripts/Mobiles/Towns/Sales/SBRanger.cs | 35 + Scripts/Mobiles/Towns/Sales/SBScribe.cs | 44 + Scripts/Mobiles/Towns/Sales/SBShipwright.cs | 41 + Scripts/Mobiles/Towns/Sales/SBSmithTools.cs | 38 + Scripts/Mobiles/Towns/Sales/SBStableMaster.cs | 37 + Scripts/Mobiles/Towns/Sales/SBTailor.cs | 102 + Scripts/Mobiles/Towns/Sales/SBTanner.cs | 95 + Scripts/Mobiles/Towns/Sales/SBTavernKeeper.cs | 103 + Scripts/Mobiles/Towns/Sales/SBThief.cs | 50 + Scripts/Mobiles/Towns/Sales/SBTinker.cs | 119 + Scripts/Mobiles/Towns/Sales/SBWaiter.cs | 62 + Scripts/Mobiles/Towns/Sales/SBWeaponSmith.cs | 152 + Scripts/Mobiles/Towns/Sales/SBWeaver.cs | 69 + .../Towns/Sales/Weapons/SBAxeWeapon.cs | 50 + .../Towns/Sales/Weapons/SBKnifeWeapon.cs | 41 + .../Towns/Sales/Weapons/SBMaceWeapon.cs | 45 + .../Towns/Sales/Weapons/SBPoleArmWeapon.cs | 37 + .../Towns/Sales/Weapons/SBRangedWeapon.cs | 48 + .../Towns/Sales/Weapons/SBSpearForkWeapon.cs | 39 + .../Towns/Sales/Weapons/SBStavesWeapon.cs | 41 + .../Towns/Sales/Weapons/SBSwordWeapon.cs | 53 + Scripts/Mobiles/Towns/TownCrier.cs | 560 + Scripts/Mobiles/Towns/Vendors/Alchemist.cs | 42 + Scripts/Mobiles/Towns/Vendors/Architect.cs | 42 + Scripts/Mobiles/Towns/Vendors/Armorer.cs | 86 + Scripts/Mobiles/Towns/Vendors/Baker.cs | 40 + Scripts/Mobiles/Towns/Vendors/Barber.cs | 577 + Scripts/Mobiles/Towns/Vendors/Bard.cs | 48 + Scripts/Mobiles/Towns/Vendors/Barkeeper.cs | 52 + Scripts/Mobiles/Towns/Vendors/Beekeeper.cs | 40 + Scripts/Mobiles/Towns/Vendors/Blacksmith.cs | 54 + Scripts/Mobiles/Towns/Vendors/Bowyer.cs | 50 + Scripts/Mobiles/Towns/Vendors/Butcher.cs | 48 + Scripts/Mobiles/Towns/Vendors/Carpenter.cs | 51 + Scripts/Mobiles/Towns/Vendors/Cobbler.cs | 40 + Scripts/Mobiles/Towns/Vendors/Cook.cs | 47 + Scripts/Mobiles/Towns/Vendors/Farmer.cs | 51 + Scripts/Mobiles/Towns/Vendors/Fighter.cs | 96 + Scripts/Mobiles/Towns/Vendors/Fisherman.cs | 52 + Scripts/Mobiles/Towns/Vendors/Gypsy.cs | 113 + Scripts/Mobiles/Towns/Vendors/HairStylist.cs | 40 + Scripts/Mobiles/Towns/Vendors/Herbalist.cs | 42 + Scripts/Mobiles/Towns/Vendors/Innkeeper.cs | 449 + Scripts/Mobiles/Towns/Vendors/IronWorker.cs | 68 + Scripts/Mobiles/Towns/Vendors/Jester.cs | 76 + Scripts/Mobiles/Towns/Vendors/Jeweler.cs | 40 + .../Mobiles/Towns/Vendors/LeatherWorker.cs | 40 + Scripts/Mobiles/Towns/Vendors/Lumberjack.cs | 50 + Scripts/Mobiles/Towns/Vendors/Mage.cs | 47 + Scripts/Mobiles/Towns/Vendors/Mapmaker.cs | 40 + Scripts/Mobiles/Towns/Vendors/Miller.cs | 47 + Scripts/Mobiles/Towns/Vendors/Miner.cs | 46 + Scripts/Mobiles/Towns/Vendors/Minstrel.cs | 56 + Scripts/Mobiles/Towns/Vendors/Provisioner.cs | 41 + Scripts/Mobiles/Towns/Vendors/Ranger.cs | 65 + Scripts/Mobiles/Towns/Vendors/Scribe.cs | 43 + Scripts/Mobiles/Towns/Vendors/Shipwright.cs | 52 + Scripts/Mobiles/Towns/Vendors/StableMaster.cs | 487 + Scripts/Mobiles/Towns/Vendors/Tailor.cs | 43 + Scripts/Mobiles/Towns/Vendors/Tanner.cs | 40 + Scripts/Mobiles/Towns/Vendors/TavernKeeper.cs | 47 + Scripts/Mobiles/Towns/Vendors/Thief.cs | 54 + Scripts/Mobiles/Towns/Vendors/Tinker.cs | 44 + Scripts/Mobiles/Towns/Vendors/Waiter.cs | 48 + Scripts/Mobiles/Towns/Vendors/Weaponsmith.cs | 53 + Scripts/Mobiles/Towns/Vendors/Weaver.cs | 42 + Scripts/Mobiles/Undead/AncientLich.cs | 95 + Scripts/Mobiles/Undead/AncientVampire.cs | 68 + Scripts/Mobiles/Undead/BoneClaw.cs | 72 + Scripts/Mobiles/Undead/BoneDrake.cs | 66 + Scripts/Mobiles/Undead/BoneKnight.cs | 76 + Scripts/Mobiles/Undead/BoneMagi.cs | 67 + Scripts/Mobiles/Undead/CorpseGolem.cs | 67 + Scripts/Mobiles/Undead/Demilich.cs | 69 + Scripts/Mobiles/Undead/FleshGolem.cs | 67 + Scripts/Mobiles/Undead/FleshGoliath.cs | 68 + Scripts/Mobiles/Undead/Ghoul.cs | 86 + Scripts/Mobiles/Undead/Lich.cs | 67 + Scripts/Mobiles/Undead/LichLord.cs | 67 + Scripts/Mobiles/Undead/Mummy.cs | 66 + Scripts/Mobiles/Undead/MummyLord.cs | 66 + Scripts/Mobiles/Undead/Nazghoul.cs | 65 + Scripts/Mobiles/Undead/RottingCorpse.cs | 64 + Scripts/Mobiles/Undead/RottingDrake.cs | 63 + Scripts/Mobiles/Undead/Shade.cs | 66 + Scripts/Mobiles/Undead/SkeletalDragon.cs | 73 + Scripts/Mobiles/Undead/SkeletalKnight.cs | 76 + Scripts/Mobiles/Undead/SkeletalMage.cs | 66 + Scripts/Mobiles/Undead/Skeleton.cs | 75 + Scripts/Mobiles/Undead/SkeletonArcher.cs | 76 + Scripts/Mobiles/Undead/Spectre.cs | 66 + Scripts/Mobiles/Undead/Vampire.cs | 66 + Scripts/Mobiles/Undead/VampireLord.cs | 68 + Scripts/Mobiles/Undead/VampiricDragon.cs | 79 + Scripts/Mobiles/Undead/VampiricDrake.cs | 66 + Scripts/Mobiles/Undead/Wight.cs | 88 + Scripts/Mobiles/Undead/Wraith.cs | 65 + Scripts/Mobiles/Undead/Zombie.cs | 74 + Scripts/Mobiles/Undead/ZombieDragon.cs | 63 + Scripts/Multis/BaseHouse.cs | 3865 ++++++ Scripts/Multis/Boats/BaseBoat.cs | 1733 +++ Scripts/Multis/Boats/BaseBoatDeed.cs | 173 + Scripts/Multis/Boats/BaseDockedBoat.cs | 196 + Scripts/Multis/Boats/BoatNavigation.cs | 869 ++ Scripts/Multis/Boats/ConfirmDryDockGump.cs | 40 + Scripts/Multis/Boats/Hold.cs | 147 + Scripts/Multis/Boats/LargeBoat.cs | 103 + Scripts/Multis/Boats/LargeDragonBoat.cs | 103 + Scripts/Multis/Boats/MediumBoat.cs | 103 + Scripts/Multis/Boats/MediumDragonBoat.cs | 103 + Scripts/Multis/Boats/Plank.cs | 310 + Scripts/Multis/Boats/RenameBoatPrompt.cs | 21 + Scripts/Multis/Boats/SmallBoat.cs | 103 + Scripts/Multis/Boats/SmallDragonBoat.cs | 103 + Scripts/Multis/Boats/Strandedness.cs | 166 + Scripts/Multis/Boats/TillerMan.cs | 136 + Scripts/Multis/Boats/Vessels.cs | 57 + Scripts/Multis/ComponentVerification.cs | 254 + Scripts/Multis/Deeds.cs | 959 ++ Scripts/Multis/HouseFoundation.cs | 2503 ++++ Scripts/Multis/HousePlacement.cs | 367 + Scripts/Multis/HousePlacementTool.cs | 627 + Scripts/Multis/HouseSign.cs | 293 + Scripts/Multis/HouseTeleporter.cs | 187 + Scripts/Multis/Houses.cs | 658 + Scripts/Multis/MovingCrate.cs | 329 + Scripts/Multis/NewHouses.cs | 1760 +++ Scripts/Multis/PreviewHouse.cs | 145 + Scripts/Multis/ViewHousesGump.cs | 287 + Scripts/Quests/BookOfLore.cs | 41 + Scripts/Quests/ChestOfSecrets.cs | 41 + Scripts/Quests/QuestFunctions.cs | 30 + Scripts/Regions/BaseRegion.cs | 699 + Scripts/Regions/BuildingRegion.cs | 28 + Scripts/Regions/CaveRegion.cs | 30 + Scripts/Regions/DangerRegion.cs | 18 + Scripts/Regions/DungeonRegion.cs | 81 + Scripts/Regions/GardenRegion.cs | 20 + Scripts/Regions/GateRegion.cs | 28 + Scripts/Regions/GraveRegion.cs | 18 + Scripts/Regions/HouseRegion.cs | 402 + Scripts/Regions/InnRegion.cs | 38 + Scripts/Regions/LandMap.cs | 304 + Scripts/Regions/MountlessRegion.cs | 25 + Scripts/Regions/NoHousingRegion.cs | 26 + Scripts/Regions/OutskirtRegion.cs | 23 + Scripts/Regions/PirateRegion.cs | 18 + Scripts/Regions/RegionMusic.cs | 141 + Scripts/Regions/ShrineRegion.cs | 28 + Scripts/Regions/ShrinesRegion.cs | 20 + Scripts/Regions/Spawning/SpawnDefinition.cs | 373 + Scripts/Regions/Spawning/SpawnEntry.cs | 465 + Scripts/Regions/Spawning/SpawnPersistence.cs | 69 + Scripts/Regions/TownRegion.cs | 34 + Scripts/Regions/UnderworldEntrance.cs | 77 + Scripts/Settings.cs | 206 + Scripts/Skills/Discordance.cs | 232 + Scripts/Skills/Hiding.cs | 109 + Scripts/Skills/Meditation.cs | 74 + Scripts/Skills/Peacemaking.cs | 199 + Scripts/Skills/Poisoning.cs | 154 + Scripts/Skills/Provocation.cs | 160 + Scripts/Skills/RemoveTrap.cs | 98 + Scripts/Skills/Searching.cs | 134 + Scripts/Skills/SkillCheck.cs | 574 + Scripts/Skills/Stealing.cs | 457 + Scripts/Skills/Stealth.cs | 67 + Scripts/Skills/Tracking.cs | 428 + Scripts/Skills/TradesGump.cs | 80 + Scripts/Spells/1st/Clumsy.cs | 79 + Scripts/Spells/1st/CreateFood.cs | 95 + Scripts/Spells/1st/Feeblemind.cs | 79 + Scripts/Spells/1st/Heal.cs | 89 + Scripts/Spells/1st/MagicArrow.cs | 88 + Scripts/Spells/1st/NightSight.cs | 74 + Scripts/Spells/1st/ReactiveArmor.cs | 79 + Scripts/Spells/1st/Weaken.cs | 79 + Scripts/Spells/2nd/Agility.cs | 70 + Scripts/Spells/2nd/Cunning.cs | 70 + Scripts/Spells/2nd/Cure.cs | 92 + Scripts/Spells/2nd/Harm.cs | 97 + Scripts/Spells/2nd/MagicTrap.cs | 172 + Scripts/Spells/2nd/Protection.cs | 105 + Scripts/Spells/2nd/RemoveTrap.cs | 139 + Scripts/Spells/2nd/Strength.cs | 70 + Scripts/Spells/3rd/Bless.cs | 72 + Scripts/Spells/3rd/Fireball.cs | 84 + Scripts/Spells/3rd/MagicLock.cs | 124 + Scripts/Spells/3rd/Poison.cs | 103 + Scripts/Spells/3rd/Telekinesis.cs | 112 + Scripts/Spells/3rd/Teleport.cs | 121 + Scripts/Spells/3rd/Unlock.cs | 104 + Scripts/Spells/3rd/WallOfStone.cs | 213 + Scripts/Spells/4th/ArchCure.cs | 167 + Scripts/Spells/4th/ArchProtection.cs | 143 + Scripts/Spells/4th/Curse.cs | 103 + Scripts/Spells/4th/FireField.cs | 312 + Scripts/Spells/4th/GreaterHeal.cs | 92 + Scripts/Spells/4th/Lightning.cs | 82 + Scripts/Spells/4th/ManaDrain.cs | 89 + Scripts/Spells/4th/Recall.cs | 131 + Scripts/Spells/5th/BladeSpirits.cs | 102 + Scripts/Spells/5th/DispelField.cs | 88 + Scripts/Spells/5th/Incognito.cs | 176 + Scripts/Spells/5th/MagicReflect.cs | 77 + Scripts/Spells/5th/MindBlast.cs | 116 + Scripts/Spells/5th/Paralyze.cs | 85 + Scripts/Spells/5th/PoisonField.cs | 285 + Scripts/Spells/5th/SummonCreature.cs | 90 + Scripts/Spells/6th/Dispel.cs | 84 + Scripts/Spells/6th/EnergyBolt.cs | 88 + Scripts/Spells/6th/Explosion.cs | 121 + Scripts/Spells/6th/Invisibility.cs | 125 + Scripts/Spells/6th/Mark.cs | 99 + Scripts/Spells/6th/MassCurse.cs | 108 + Scripts/Spells/6th/ParalyzeField.cs | 224 + Scripts/Spells/6th/Reveal.cs | 121 + Scripts/Spells/7th/ChainLightning.cs | 125 + Scripts/Spells/7th/EnergyField.cs | 193 + Scripts/Spells/7th/FlameStrike.cs | 85 + Scripts/Spells/7th/GateTravel.cs | 192 + Scripts/Spells/7th/ManaVampire.cs | 97 + Scripts/Spells/7th/MassDispel.cs | 116 + Scripts/Spells/7th/MeteorSwarm.cs | 124 + Scripts/Spells/7th/Polymorph.cs | 178 + Scripts/Spells/8th/AirElemental.cs | 54 + Scripts/Spells/8th/EarthElemental.cs | 54 + Scripts/Spells/8th/Earthquake.cs | 66 + Scripts/Spells/8th/EnergyVortex.cs | 98 + Scripts/Spells/8th/FireElemental.cs | 55 + Scripts/Spells/8th/Resurrection.cs | 180 + Scripts/Spells/8th/SummonDaemon.cs | 57 + Scripts/Spells/8th/WaterElemental.cs | 54 + Scripts/Spells/BagOfReagents.cs | 54 + Scripts/Spells/Base/DisturbType.cs | 15 + Scripts/Spells/Base/Initializer.cs | 96 + Scripts/Spells/Base/MagerySpell.cs | 113 + Scripts/Spells/Base/Spell.cs | 732 + Scripts/Spells/Base/SpellCircle.cs | 16 + Scripts/Spells/Base/SpellHelper.cs | 991 ++ Scripts/Spells/Base/SpellInfo.cs | 66 + Scripts/Spells/Base/SpellRegistry.cs | 131 + Scripts/Spells/Base/SpellState.cs | 11 + Scripts/Spells/Base/UnsummonTimer.cs | 24 + Scripts/Spells/Reagent.cs | 73 + .../Scrolls/Eighth Circle/EarthquakeScroll.cs | 39 + .../Eighth Circle/EnergyVortexScroll.cs | 39 + .../Eighth Circle/ResurrectionScroll.cs | 39 + .../Eighth Circle/SummonAirElementalScroll.cs | 39 + .../Eighth Circle/SummonDaemonScroll.cs | 39 + .../SummonEarthElementalScroll.cs | 39 + .../SummonFireElementalScroll.cs | 39 + .../SummonWaterElementalScroll.cs | 39 + .../Fifth Circle/BladeSpiritsScroll.cs | 39 + .../Scrolls/Fifth Circle/DispelFieldScroll.cs | 39 + .../Scrolls/Fifth Circle/IncognitoScroll.cs | 39 + .../Fifth Circle/MagicReflectScroll.cs | 39 + .../Scrolls/Fifth Circle/MindBlastScroll.cs | 39 + .../Scrolls/Fifth Circle/ParalyzeScroll.cs | 39 + .../Scrolls/Fifth Circle/PoisonFieldScroll.cs | 39 + .../Fifth Circle/SummonCreatureScroll.cs | 39 + .../Scrolls/First Circle/ClumsyScroll.cs | 39 + .../Scrolls/First Circle/CreateFoodScroll.cs | 39 + .../Scrolls/First Circle/FeeblemindScroll.cs | 39 + .../Spells/Scrolls/First Circle/HealScroll.cs | 39 + .../Scrolls/First Circle/MagicArrowScroll.cs | 39 + .../Scrolls/First Circle/NightSightScroll.cs | 39 + .../First Circle/ReactiveArmorScroll.cs | 39 + .../Scrolls/First Circle/WeakenScroll.cs | 39 + .../Fourth Circle/ArchProtectionScroll.cs | 39 + .../Scrolls/Fourth Circle/ArchcureScroll.cs | 39 + .../Scrolls/Fourth Circle/CurseScroll.cs | 39 + .../Scrolls/Fourth Circle/FireFieldScroll.cs | 39 + .../Fourth Circle/GreaterHealScroll.cs | 39 + .../Scrolls/Fourth Circle/LightningScroll.cs | 39 + .../Scrolls/Fourth Circle/ManaDrainScroll.cs | 39 + .../Scrolls/Fourth Circle/RecallScroll.cs | 39 + .../Scrolls/Second Circle/AgilityScroll.cs | 39 + .../Scrolls/Second Circle/CunningScroll.cs | 39 + .../Scrolls/Second Circle/CureScroll.cs | 39 + .../Scrolls/Second Circle/HarmScroll.cs | 39 + .../Scrolls/Second Circle/MagicTrapScroll.cs | 39 + .../Second Circle/MagicUnTrapScroll.cs | 39 + .../Scrolls/Second Circle/ProtectionScroll.cs | 39 + .../Scrolls/Second Circle/StrengthScroll.cs | 39 + .../Seventh Circle/ChainLightningScroll.cs | 39 + .../Seventh Circle/EnergyFieldScroll.cs | 39 + .../Seventh Circle/FlamestrikeScroll.cs | 39 + .../Seventh Circle/GateTravelScroll.cs | 39 + .../Seventh Circle/ManaVampireScroll.cs | 39 + .../Seventh Circle/MassDispelScroll.cs | 39 + .../Seventh Circle/MeteorStormScroll.cs | 39 + .../Scrolls/Seventh Circle/PolymorphScroll.cs | 39 + .../Scrolls/Sixth Circle/DispelScroll.cs | 39 + .../Scrolls/Sixth Circle/EnergyBoltScroll.cs | 39 + .../Scrolls/Sixth Circle/ExplosionScroll.cs | 39 + .../Sixth Circle/InvisibilityScroll.cs | 39 + .../Spells/Scrolls/Sixth Circle/MarkScroll.cs | 39 + .../Scrolls/Sixth Circle/MassCurseScroll.cs | 39 + .../Sixth Circle/ParalyzeFieldSpell.cs | 39 + .../Scrolls/Sixth Circle/RevealScroll.cs | 39 + Scripts/Spells/Scrolls/SpellScroll.cs | 93 + .../Scrolls/Third Circle/BlessScroll.cs | 39 + .../Scrolls/Third Circle/FireballScroll.cs | 39 + .../Scrolls/Third Circle/MagicLockScroll.cs | 39 + .../Scrolls/Third Circle/PoisonScroll.cs | 39 + .../Scrolls/Third Circle/TelekinisisScroll.cs | 39 + .../Scrolls/Third Circle/TeleportScroll.cs | 39 + .../Scrolls/Third Circle/UnlockScroll.cs | 39 + .../Scrolls/Third Circle/WallOfStoneScroll.cs | 39 + Scripts/Spells/Spellbook.cs | 523 + Scripts/Targets/BladedItemTarget.cs | 165 + Scripts/Targets/MoveTarget.cs | 52 + Scripts/Targets/PickMoveTarget.cs | 27 + Scripts/_QuestButtonGump.cs | 50 + Source/AggressorInfo.cs | 212 + Source/AssemblyInfo.cs | 81 + Source/Attributes.cs | 224 + Source/BaseVendor.cs | 214 + Source/Body.cs | 269 + Source/ClientVersion.cs | 300 + Source/Commands.cs | 347 + Source/ContextMenus/ContextMenu.cs | 98 + Source/ContextMenus/ContextMenuEntry.cs | 139 + Source/ContextMenus/OpenBackpackEntry.cs | 40 + Source/ContextMenus/PaperdollEntry.cs | 40 + Source/Diagnostics/BaseProfile.cs | 112 + Source/Diagnostics/GumpProfile.cs | 53 + Source/Diagnostics/PacketProfile.cs | 131 + Source/Diagnostics/TargetProfile.cs | 53 + Source/Diagnostics/TimerProfile.cs | 89 + Source/Effects.cs | 405 + Source/EventLog.cs | 67 + Source/EventSink.cs | 1059 ++ Source/ExpansionInfo.cs | 192 + Source/Geometry.cs | 638 + Source/Guild.cs | 145 + Source/Gumps/Gump.cs | 423 + Source/Gumps/GumpAlphaRegion.cs | 103 + Source/Gumps/GumpBackground.cs | 118 + Source/Gumps/GumpButton.cs | 164 + Source/Gumps/GumpCheck.cs | 135 + Source/Gumps/GumpEntry.cs | 98 + Source/Gumps/GumpGroup.cs | 60 + Source/Gumps/GumpHtml.cs | 147 + Source/Gumps/GumpHtmlLocalized.cs | 287 + Source/Gumps/GumpImage.cs | 117 + Source/Gumps/GumpImageTileButton.cs | 251 + Source/Gumps/GumpImageTiled.cs | 118 + Source/Gumps/GumpItem.cs | 114 + Source/Gumps/GumpLabel.cs | 104 + Source/Gumps/GumpLabelCropped.cs | 133 + Source/Gumps/GumpPage.cs | 60 + Source/Gumps/GumpRadio.cs | 135 + Source/Gumps/GumpTextEntry.cs | 150 + Source/Gumps/GumpTextEntryLimited.cs | 136 + Source/Gumps/GumpTooltip.cs | 60 + Source/Gumps/RelayInfo.cs | 116 + Source/HuePicker.cs | 69 + Source/IAccount.cs | 39 + Source/IEntity.cs | 113 + Source/Insensitive.cs | 77 + Source/Interfaces.cs | 116 + Source/Item.cs | 4770 +++++++ Source/ItemBounds.cs | 69 + Source/Items/BaseMulti.cs | 174 + Source/Items/Container.cs | 1826 +++ Source/Items/Containers.cs | 166 + Source/Items/SecureTradeContainer.cs | 119 + Source/Items/VirtualHair.cs | 177 + Source/KeywordList.cs | 85 + Source/Main.cs | 781 ++ Source/Map.cs | 2090 +++ Source/Menus/IMenu.cs | 34 + Source/Menus/ItemListMenu.cs | 140 + Source/Menus/QuestionMenu.cs | 96 + Source/Mobile.cs | 11247 ++++++++++++++++ Source/Movement.cs | 75 + Source/MultiData.cs | 596 + Source/NativeReader.cs | 68 + Source/Network/BufferPool.cs | 102 + Source/Network/ByteQueue.cs | 153 + Source/Network/Compression.cs | 388 + Source/Network/EncodedPacketHandler.cs | 64 + Source/Network/EncodedReader.cs | 85 + Source/Network/Listener.cs | 279 + Source/Network/MessagePump.cs | 282 + Source/Network/NetState.cs | 1221 ++ Source/Network/PacketHandler.cs | 82 + Source/Network/PacketHandlers.cs | 2464 ++++ Source/Network/PacketReader.cs | 457 + Source/Network/PacketWriter.cs | 470 + Source/Network/Packets.cs | 4284 ++++++ Source/Network/SendQueue.cs | 237 + Source/Notoriety.cs | 80 + Source/ObjectPropertyList.cs | 198 + Source/Party.cs | 39 + Source/Persistence/BinaryMemoryWriter.cs | 86 + Source/Persistence/DualSaveStrategy.cs | 60 + Source/Persistence/DynamicSaveStrategy.cs | 314 + Source/Persistence/FileOperations.cs | 141 + Source/Persistence/FileQueue.cs | 251 + Source/Persistence/ParallelSaveStrategy.cs | 345 + Source/Persistence/QueuedMemoryWriter.cs | 126 + Source/Persistence/SaveMetrics.cs | 131 + Source/Persistence/SaveStrategy.cs | 58 + Source/Persistence/SequentialFileWriter.cs | 141 + Source/Persistence/StandardSaveStrategy.cs | 204 + Source/Point3DList.cs | 113 + Source/Poison.cs | 144 + Source/Prompt.cs | 55 + Source/QuestArrow.cs | 123 + Source/Race.cs | 211 + Source/Region.cs | 1277 ++ Source/ScriptCompiler.cs | 649 + Source/Sector.cs | 319 + Source/SecureTrade.cs | 297 + Source/Serial.cs | 172 + Source/Serialization.cs | 1721 +++ Source/Skills.cs | 946 ++ Source/Targeting/LandTarget.cs | 104 + Source/Targeting/MultiTarget.cs | 76 + Source/Targeting/StaticTarget.cs | 100 + Source/Targeting/Target.cs | 376 + Source/Targeting/TargetCancelType.cs | 32 + Source/Targeting/TargetFlags.cs | 31 + Source/TileData.cs | 372 + Source/TileList.cs | 92 + Source/TileMatrix.cs | 627 + Source/TileMatrixPatch.cs | 207 + Source/Timer.cs | 664 + Source/Utility.cs | 1283 ++ Source/VirtueInfo.txt | 147 + Source/World.cs | 877 ++ Source/icon.ico | Bin 0 -> 4286 bytes zlib32.dll | Bin 0 -> 57344 bytes zlib64.dll | Bin 0 -> 74240 bytes 7510 files changed, 416048 insertions(+) create mode 100644 .gitignore create mode 100644 ChangeLog.txt create mode 100755 Compile.sh create mode 100644 Data/Binary/Bounds.bin create mode 100644 Data/Components/doors.txt create mode 100644 Data/Components/floors.txt create mode 100644 Data/Components/misc.txt create mode 100644 Data/Components/roof.txt create mode 100644 Data/Components/stairs.txt create mode 100644 Data/Components/suppinfo.txt create mode 100644 Data/Components/teleprts.txt create mode 100644 Data/Components/walls.txt create mode 100644 Data/Config/Assemblies.cfg create mode 100644 Data/Config/Common.map create mode 100644 Data/Config/Regions.xml create mode 100644 Data/Config/SpawnDefinitions.xml create mode 100644 Data/Config/bodyNames.txt create mode 100644 Data/Config/bodyTable.cfg create mode 100644 Data/Config/containers.cfg create mode 100644 Data/Config/entrances.cfg create mode 100644 Data/Config/go.xml create mode 100644 Data/Config/items.cfg create mode 100644 Data/Config/mobiles.cfg create mode 100644 Data/Config/names.xml create mode 100644 Data/Config/objects.xml create mode 100644 Data/Config/pageresponse.cfg create mode 100644 Data/Config/shrink.cfg create mode 100644 Data/Config/treasure.cfg create mode 100644 Data/Decoration/Britannia/Castle - Britain.cfg create mode 100644 Data/Decoration/Britannia/Cave Entrances.cfg create mode 100644 Data/Decoration/Britannia/Dungeon Entrances.cfg create mode 100644 Data/Decoration/Britannia/Places.cfg create mode 100644 Data/Decoration/Britannia/Town - Britain.cfg create mode 100644 Data/Decoration/Britannia/Town - Bucs Den.cfg create mode 100644 Data/Decoration/Britannia/Town - Cove.cfg create mode 100644 Data/Decoration/Britannia/Town - Jhelom.cfg create mode 100644 Data/Decoration/Britannia/Town - Magincia.cfg create mode 100644 Data/Decoration/Britannia/Town - Minoc.cfg create mode 100644 Data/Decoration/Britannia/Town - Moonglow.cfg create mode 100644 Data/Decoration/Britannia/Town - Paws.cfg create mode 100644 Data/Decoration/Britannia/Town - Skara Brae.cfg create mode 100644 Data/Decoration/Britannia/Town - Trinsic.cfg create mode 100644 Data/Decoration/Britannia/Town - Yew.cfg create mode 100644 Data/Decoration/Britannia/moongates.cfg create mode 100644 Data/Decoration/Underworld/Caves.cfg create mode 100644 Data/Decoration/Underworld/Dungeon - Covetous.cfg create mode 100644 Data/Decoration/Underworld/Dungeon - Despise.cfg create mode 100644 Data/Decoration/Underworld/Dungeon - Destard.cfg create mode 100644 Data/Decoration/Underworld/Labyrinth - Silent Tomb.cfg create mode 100644 Data/Decoration/Underworld/Labyrinth - Wailing Hall.cfg create mode 100644 Data/Decoration/Underworld/Maze - Caverns of Ice.cfg create mode 100644 Data/Decoration/Underworld/Maze - Halls of Stone.cfg create mode 100644 Data/Decoration/Underworld/Places.cfg create mode 100644 Data/Spawns/citizens.map create mode 100644 Data/Spawns/dungeons.map create mode 100644 Data/Spawns/graveyards.map create mode 100644 Data/Spawns/labyrinths.map create mode 100644 Data/Spawns/land.map create mode 100644 Data/Spawns/mazes.map create mode 100644 Data/Spawns/towns.map create mode 100644 Docs/bodies.html create mode 100644 Docs/bods/bod_smith_rewards.html create mode 100644 Docs/bods/bod_tailor_rewards.html create mode 100644 Docs/commands.html create mode 100644 Docs/index.html create mode 100644 Docs/keywords.html create mode 100644 Docs/namespaces/Server.Accounting.html create mode 100644 Docs/namespaces/Server.Chat.html create mode 100644 Docs/namespaces/Server.Commands.Generic.html create mode 100644 Docs/namespaces/Server.Commands.html create mode 100644 Docs/namespaces/Server.ContextMenus.html create mode 100644 Docs/namespaces/Server.Diagnostics.html create mode 100644 Docs/namespaces/Server.Engines.BulkOrders.html create mode 100644 Docs/namespaces/Server.Engines.CannedEvil.html create mode 100644 Docs/namespaces/Server.Engines.Chat.html create mode 100644 Docs/namespaces/Server.Engines.Craft.html create mode 100644 Docs/namespaces/Server.Engines.Doom.html create mode 100644 Docs/namespaces/Server.Engines.Harvest.html create mode 100644 Docs/namespaces/Server.Engines.Help.html create mode 100644 Docs/namespaces/Server.Engines.Mahjong.html create mode 100644 Docs/namespaces/Server.Engines.MyRunUO.html create mode 100644 Docs/namespaces/Server.Engines.PartySystem.html create mode 100644 Docs/namespaces/Server.Engines.Plants.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Ambitious.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Collector.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Doom.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Hag.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Haven.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Matriarch.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Naturalist.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Necro.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Ninja.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Samurai.html create mode 100644 Docs/namespaces/Server.Engines.Quests.Zento.html create mode 100644 Docs/namespaces/Server.Engines.Quests.html create mode 100644 Docs/namespaces/Server.Engines.Reports.html create mode 100644 Docs/namespaces/Server.Engines.VeteranRewards.html create mode 100644 Docs/namespaces/Server.Ethics.Evil.html create mode 100644 Docs/namespaces/Server.Ethics.Hero.html create mode 100644 Docs/namespaces/Server.Ethics.html create mode 100644 Docs/namespaces/Server.Factions.AI.html create mode 100644 Docs/namespaces/Server.Factions.html create mode 100644 Docs/namespaces/Server.Guilds.html create mode 100644 Docs/namespaces/Server.Gumps.html create mode 100644 Docs/namespaces/Server.HuePickers.html create mode 100644 Docs/namespaces/Server.Items.html create mode 100644 Docs/namespaces/Server.Menus.ItemLists.html create mode 100644 Docs/namespaces/Server.Menus.Questions.html create mode 100644 Docs/namespaces/Server.Menus.html create mode 100644 Docs/namespaces/Server.Misc.html create mode 100644 Docs/namespaces/Server.Mobiles.html create mode 100644 Docs/namespaces/Server.Movement.html create mode 100644 Docs/namespaces/Server.Multis.Deeds.html create mode 100644 Docs/namespaces/Server.Multis.html create mode 100644 Docs/namespaces/Server.Network.html create mode 100644 Docs/namespaces/Server.PathAlgorithms.FastAStar.html create mode 100644 Docs/namespaces/Server.PathAlgorithms.SlowAStar.html create mode 100644 Docs/namespaces/Server.PathAlgorithms.html create mode 100644 Docs/namespaces/Server.Prompts.html create mode 100644 Docs/namespaces/Server.Regions.html create mode 100644 Docs/namespaces/Server.RemoteAdmin.html create mode 100644 Docs/namespaces/Server.SkillHandlers.html create mode 100644 Docs/namespaces/Server.Spells.Bushido.html create mode 100644 Docs/namespaces/Server.Spells.Chivalry.html create mode 100644 Docs/namespaces/Server.Spells.Eighth.html create mode 100644 Docs/namespaces/Server.Spells.Fifth.html create mode 100644 Docs/namespaces/Server.Spells.First.html create mode 100644 Docs/namespaces/Server.Spells.Fourth.html create mode 100644 Docs/namespaces/Server.Spells.Necromancy.html create mode 100644 Docs/namespaces/Server.Spells.Ninjitsu.html create mode 100644 Docs/namespaces/Server.Spells.Second.html create mode 100644 Docs/namespaces/Server.Spells.Seventh.html create mode 100644 Docs/namespaces/Server.Spells.Sixth.html create mode 100644 Docs/namespaces/Server.Spells.Spellweaving.html create mode 100644 Docs/namespaces/Server.Spells.Third.html create mode 100644 Docs/namespaces/Server.Spells.html create mode 100644 Docs/namespaces/Server.Targeting.html create mode 100644 Docs/namespaces/Server.Targets.html create mode 100644 Docs/namespaces/Server.html create mode 100644 Docs/objects.html create mode 100644 Docs/overview.html create mode 100644 Docs/styles.css create mode 100644 Docs/types/(Anonymous-Type)--c__DisplayClass1.html create mode 100644 Docs/types/(Anonymous-Type)--c__DisplayClass2.html create mode 100644 Docs/types/(Anonymous-Type)--c__DisplayClass3.html create mode 100644 Docs/types/(Anonymous-Type)--c__DisplayClass4.html create mode 100644 Docs/types/(Anonymous-Type)--c__DisplayClass6.html create mode 100644 Docs/types/(Anonymous-Type)--c__DisplayClass7.html create mode 100644 Docs/types/(Anonymous-Type)-GetEnumerator-d__2.html create mode 100644 Docs/types/AIControlMobileTarget.html create mode 100644 Docs/types/AITimer.html create mode 100644 Docs/types/AIType.html create mode 100644 Docs/types/ALRReason.html create mode 100644 Docs/types/ANecromancerShroud.html create mode 100644 Docs/types/AOS.html create mode 100644 Docs/types/AbandonEscortEntry.html create mode 100644 Docs/types/AbbatoirAddon.html create mode 100644 Docs/types/AbbatoirDeed.html create mode 100644 Docs/types/AbbrevComparer.html create mode 100644 Docs/types/AbysmalHorror.html create mode 100644 Docs/types/AcceptConversation.html create mode 100644 Docs/types/AcceptEscortEntry.html create mode 100644 Docs/types/AcceptProtectorGump.html create mode 100644 Docs/types/AccessException.html create mode 100644 Docs/types/AccessLevel.html create mode 100644 Docs/types/AccessRestrictions.html create mode 100644 Docs/types/Account.html create mode 100644 Docs/types/AccountAttackLimiter.html create mode 100644 Docs/types/AccountComment.html create mode 100644 Docs/types/AccountComparer.html create mode 100644 Docs/types/AccountHandler.html create mode 100644 Docs/types/AccountLoginAck.html create mode 100644 Docs/types/AccountLoginEventArgs.html create mode 100644 Docs/types/AccountLoginEventHandler.html create mode 100644 Docs/types/AccountLoginRej.html create mode 100644 Docs/types/AccountPrompt.html create mode 100644 Docs/types/AccountSearchResults.html create mode 100644 Docs/types/AccountTag.html create mode 100644 Docs/types/Accounts.html create mode 100644 Docs/types/AcctSearchType.html create mode 100644 Docs/types/AcidProofRobe.html create mode 100644 Docs/types/AcidSlime.html create mode 100644 Docs/types/AckPartyLocations.html create mode 100644 Docs/types/ActionType.html create mode 100644 Docs/types/ActivateEntry.html create mode 100644 Docs/types/Actor.html create mode 100644 Docs/types/Add.html create mode 100644 Docs/types/AddBuffPacket.html create mode 100644 Docs/types/AddCommand.html create mode 100644 Docs/types/AddCommentPrompt.html create mode 100644 Docs/types/AddDoorGump.html create mode 100644 Docs/types/AddGump.html create mode 100644 Docs/types/AddPartyTarget.html create mode 100644 Docs/types/AddTagNamePrompt.html create mode 100644 Docs/types/AddTagValuePrompt.html create mode 100644 Docs/types/AddTarget.html create mode 100644 Docs/types/AddToPackCommand.html create mode 100644 Docs/types/AddToPartyEntry.html create mode 100644 Docs/types/AddToSpellbookEntry.html create mode 100644 Docs/types/AddonComponent.html create mode 100644 Docs/types/AddonContainerComponent.html create mode 100644 Docs/types/AddonFitResult.html create mode 100644 Docs/types/AddressComparer.html create mode 100644 Docs/types/AdminCompressedPacket.html create mode 100644 Docs/types/AdminGump.html create mode 100644 Docs/types/AdminGumpPage.html create mode 100644 Docs/types/AdminNetwork.html create mode 100644 Docs/types/AdminRobe.html create mode 100644 Docs/types/AdmiralsHeartyRum.html create mode 100644 Docs/types/Aegis.html create mode 100644 Docs/types/AegisOfGrace.html create mode 100644 Docs/types/AffixType.html create mode 100644 Docs/types/Afro.html create mode 100644 Docs/types/AgapiteElemental.html create mode 100644 Docs/types/AgapiteGranite.html create mode 100644 Docs/types/AgapiteIngot.html create mode 100644 Docs/types/AgapiteOre.html create mode 100644 Docs/types/AggressiveActionEventArgs.html create mode 100644 Docs/types/AggressiveActionEventHandler.html create mode 100644 Docs/types/AggressorInfo.html create mode 100644 Docs/types/AgilityPotion.html create mode 100644 Docs/types/AgilityScroll.html create mode 100644 Docs/types/AgilitySpell.html create mode 100644 Docs/types/AirElemental.html create mode 100644 Docs/types/AirElementalSpell.html create mode 100644 Docs/types/AlbertaAfterPaintingConversation.html create mode 100644 Docs/types/AlbertaEndPaintingConversation.html create mode 100644 Docs/types/AlbertaGiacco.html create mode 100644 Docs/types/AlbertaPaintingConversation.html create mode 100644 Docs/types/AlbertaStoolConversation.html create mode 100644 Docs/types/Alchemist.html create mode 100644 Docs/types/AlchemistTableEastAddon.html create mode 100644 Docs/types/AlchemistTableEastDeed.html create mode 100644 Docs/types/AlchemistTableSouthAddon.html create mode 100644 Docs/types/AlchemistTableSouthDeed.html create mode 100644 Docs/types/AlchemistsBauble.html create mode 100644 Docs/types/AlchemyBag.html create mode 100644 Docs/types/AlchemyStone.html create mode 100644 Docs/types/AliasedSetCommand.html create mode 100644 Docs/types/AliasesAttribute.html create mode 100644 Docs/types/AllSkillsTarget.html create mode 100644 Docs/types/Allegiance.html create mode 100644 Docs/types/AllianceInfo.html create mode 100644 Docs/types/AllianceRosterGump.html create mode 100644 Docs/types/Alligator.html create mode 100644 Docs/types/AllowBeneficialHandler.html create mode 100644 Docs/types/AllowHarmfulHandler.html create mode 100644 Docs/types/AllowedPlacing.html create mode 100644 Docs/types/AlreadyBoundException.html create mode 100644 Docs/types/Amber.html create mode 100644 Docs/types/AmbitiousQueenQuest.html create mode 100644 Docs/types/Amethyst.html create mode 100644 Docs/types/Anatomy.html create mode 100644 Docs/types/AncientFarmersKasa.html create mode 100644 Docs/types/AncientLich.html create mode 100644 Docs/types/AncientSamuraiDo.html create mode 100644 Docs/types/AncientSmithyHammer.html create mode 100644 Docs/types/AncientUrn.html create mode 100644 Docs/types/AncientWyrm.html create mode 100644 Docs/types/AniLargeVioletFlask.html create mode 100644 Docs/types/AniRedRibbedFlask.html create mode 100644 Docs/types/AniSmallBlueFlask.html create mode 100644 Docs/types/AnimTimer.html create mode 100644 Docs/types/AnimalAI.html create mode 100644 Docs/types/AnimalBuyInfo.html create mode 100644 Docs/types/AnimalForm.html create mode 100644 Docs/types/AnimalFormContext.html create mode 100644 Docs/types/AnimalFormEntry.html create mode 100644 Docs/types/AnimalFormGump.html create mode 100644 Docs/types/AnimalFormTimer.html create mode 100644 Docs/types/AnimalLore.html create mode 100644 Docs/types/AnimalLoreGump.html create mode 100644 Docs/types/AnimalTaming.html create mode 100644 Docs/types/AnimalTrainer.html create mode 100644 Docs/types/AnimateDeadScroll.html create mode 100644 Docs/types/AnimateDeadSpell.html create mode 100644 Docs/types/AnimateMaabusCorpseObjective.html create mode 100644 Docs/types/AnimateRequestEventArgs.html create mode 100644 Docs/types/AnimateRequestEventHandler.html create mode 100644 Docs/types/AnimateTimer.html create mode 100644 Docs/types/Animations.html create mode 100644 Docs/types/AnkhNorth.html create mode 100644 Docs/types/AnkhOfSacrificeAddon.html create mode 100644 Docs/types/AnkhOfSacrificeComponent.html create mode 100644 Docs/types/AnkhOfSacrificeDeed.html create mode 100644 Docs/types/AnkhResurrectGump.html create mode 100644 Docs/types/AnkhWest.html create mode 100644 Docs/types/Ankhs.html create mode 100644 Docs/types/AnsellaGryen.html create mode 100644 Docs/types/AntLion.html create mode 100644 Docs/types/AnthropomorphistGlasses.html create mode 100644 Docs/types/Anvil.html create mode 100644 Docs/types/AnvilAttribute.html create mode 100644 Docs/types/AnvilComponent.html create mode 100644 Docs/types/AnvilEastAddon.html create mode 100644 Docs/types/AnvilEastDeed.html create mode 100644 Docs/types/AnvilSouthAddon.html create mode 100644 Docs/types/AnvilSouthDeed.html create mode 100644 Docs/types/AosArmorAttribute.html create mode 100644 Docs/types/AosArmorAttributes.html create mode 100644 Docs/types/AosAttribute.html create mode 100644 Docs/types/AosAttributes.html create mode 100644 Docs/types/AosElementAttribute.html create mode 100644 Docs/types/AosElementAttributes.html create mode 100644 Docs/types/AosSkillBonuses.html create mode 100644 Docs/types/AosWeaponAttribute.html create mode 100644 Docs/types/AosWeaponAttributes.html create mode 100644 Docs/types/Apple.html create mode 100644 Docs/types/ApplePie.html create mode 100644 Docs/types/AppleTreeAddon.html create mode 100644 Docs/types/AppleTreeDeed.html create mode 100644 Docs/types/AppleTrunkAddon.html create mode 100644 Docs/types/AppleTrunkDeed.html create mode 100644 Docs/types/ApplyPoisonResult.html create mode 100644 Docs/types/ApprenticeCorpseConversation.html create mode 100644 Docs/types/ArcaneBookshelfEastAddon.html create mode 100644 Docs/types/ArcaneBookshelfEastDeed.html create mode 100644 Docs/types/ArcaneBookshelfSouthAddon.html create mode 100644 Docs/types/ArcaneBookshelfSouthDeed.html create mode 100644 Docs/types/ArcaneCircleAddon.html create mode 100644 Docs/types/ArcaneCircleDeed.html create mode 100644 Docs/types/ArcaneCircleScroll.html create mode 100644 Docs/types/ArcaneCircleSpell.html create mode 100644 Docs/types/ArcaneDaemon.html create mode 100644 Docs/types/ArcaneEmpowermentScroll.html create mode 100644 Docs/types/ArcaneFey.html create mode 100644 Docs/types/ArcaneFiend.html create mode 100644 Docs/types/ArcaneFocus.html create mode 100644 Docs/types/ArcaneForm.html create mode 100644 Docs/types/ArcaneGem.html create mode 100644 Docs/types/ArcaneShield.html create mode 100644 Docs/types/ArcaneSummon-T-.html create mode 100644 Docs/types/ArcanistSpell.html create mode 100644 Docs/types/ArcanistStatueEastAddon.html create mode 100644 Docs/types/ArcanistStatueEastDeed.html create mode 100644 Docs/types/ArcanistStatueSouthAddon.html create mode 100644 Docs/types/ArcanistStatueSouthDeed.html create mode 100644 Docs/types/ArchCureScroll.html create mode 100644 Docs/types/ArchCureSpell.html create mode 100644 Docs/types/ArchProtectionScroll.html create mode 100644 Docs/types/ArchProtectionSpell.html create mode 100644 Docs/types/ArcherAI.html create mode 100644 Docs/types/ArcherGuard.html create mode 100644 Docs/types/ArcheryButte.html create mode 100644 Docs/types/ArcheryButteAddon.html create mode 100644 Docs/types/ArcheryButteDeed.html create mode 100644 Docs/types/Architect.html create mode 100644 Docs/types/ArcticDeathDealer.html create mode 100644 Docs/types/ArcticOgreLord.html create mode 100644 Docs/types/AreaCommandImplementor.html create mode 100644 Docs/types/Armoire.html create mode 100644 Docs/types/ArmorBodyType.html create mode 100644 Docs/types/ArmorDurabilityLevel.html create mode 100644 Docs/types/ArmorIgnore.html create mode 100644 Docs/types/ArmorMaterialType.html create mode 100644 Docs/types/ArmorMeditationAllowance.html create mode 100644 Docs/types/ArmorOfFortune.html create mode 100644 Docs/types/ArmorPierce.html create mode 100644 Docs/types/ArmorProtectionLevel.html create mode 100644 Docs/types/ArmorQuality.html create mode 100644 Docs/types/Armorer.html create mode 100644 Docs/types/ArmsAndWeaponsPrimer.html create mode 100644 Docs/types/ArmsLore.html create mode 100644 Docs/types/ArmsOfTacticalExcellence.html create mode 100644 Docs/types/Arrow.html create mode 100644 Docs/types/ArtifactLargeVase.html create mode 100644 Docs/types/ArtifactVase.html create mode 100644 Docs/types/Artist.html create mode 100644 Docs/types/ArtsGlasses.html create mode 100644 Docs/types/AsciiMessage.html create mode 100644 Docs/types/AshBoard.html create mode 100644 Docs/types/AshLog.html create mode 100644 Docs/types/AskDestinationEntry.html create mode 100644 Docs/types/AssassinSpike.html create mode 100644 Docs/types/AssemblyEmitter.html create mode 100644 Docs/types/AssistVersionReq.html create mode 100644 Docs/types/AsyncState.html create mode 100644 Docs/types/AsyncWriter.html create mode 100644 Docs/types/AttackMessage.html create mode 100644 Docs/types/AttackTimer.html create mode 100644 Docs/types/AttributeNormalizer.html create mode 100644 Docs/types/AttuneWeaponScroll.html create mode 100644 Docs/types/AttuneWeaponSpell.html create mode 100644 Docs/types/AuthIDPersistence.html create mode 100644 Docs/types/AutoManifestTimer.html create mode 100644 Docs/types/AutoRestart.html create mode 100644 Docs/types/AutoSave.html create mode 100644 Docs/types/AutokillTimer.html create mode 100644 Docs/types/AvengeTimer.html create mode 100644 Docs/types/AwaseMisoSoup.html create mode 100644 Docs/types/AwesomeDisturbingPortraitAddon.html create mode 100644 Docs/types/AwesomeDisturbingPortraitComponent.html create mode 100644 Docs/types/AwesomeDisturbingPortraitDeed.html create mode 100644 Docs/types/Axe.html create mode 100644 Docs/types/AxeOfTheHeavens.html create mode 100644 Docs/types/Axle.html create mode 100644 Docs/types/AxleGears.html create mode 100644 Docs/types/BBDisplayBoard.html create mode 100644 Docs/types/BBMessageContent.html create mode 100644 Docs/types/BBMessageHeader.html create mode 100644 Docs/types/BGTClassifier.html create mode 100644 Docs/types/BOBFilter.html create mode 100644 Docs/types/BOBFilterGump.html create mode 100644 Docs/types/BOBGump.html create mode 100644 Docs/types/BOBLargeEntry.html create mode 100644 Docs/types/BOBLargeSubEntry.html create mode 100644 Docs/types/BOBSmallEntry.html create mode 100644 Docs/types/BODBuyGump.html create mode 100644 Docs/types/BODType.html create mode 100644 Docs/types/Backgammon.html create mode 100644 Docs/types/Backpack.html create mode 100644 Docs/types/BackpackArtifact.html create mode 100644 Docs/types/Backstab.html create mode 100644 Docs/types/Bacon.html create mode 100644 Docs/types/BadCard.html create mode 100644 Docs/types/BadStartMessage.html create mode 100644 Docs/types/Bag.html create mode 100644 Docs/types/BagOfAllReagents.html create mode 100644 Docs/types/BagOfNecroReagents.html create mode 100644 Docs/types/BagOfReagents.html create mode 100644 Docs/types/BagOfSending.html create mode 100644 Docs/types/BagOfSendingHue.html create mode 100644 Docs/types/BagOfingots.html create mode 100644 Docs/types/BakeKitsune.html create mode 100644 Docs/types/Baker.html create mode 100644 Docs/types/BallCallback.html create mode 100644 Docs/types/BallEntry.html create mode 100644 Docs/types/BallOfSummoning.html create mode 100644 Docs/types/BallotBox.html create mode 100644 Docs/types/BallotBoxAddon.html create mode 100644 Docs/types/BallotBoxDeed.html create mode 100644 Docs/types/Balron.html create mode 100644 Docs/types/BambooChair.html create mode 100644 Docs/types/BambooFlute.html create mode 100644 Docs/types/BambooScreen.html create mode 100644 Docs/types/BanDurationGump.html create mode 100644 Docs/types/Banana.html create mode 100644 Docs/types/Bananas.html create mode 100644 Docs/types/Bandage.html create mode 100644 Docs/types/BandageContext.html create mode 100644 Docs/types/Bandana.html create mode 100644 Docs/types/BankBox.html create mode 100644 Docs/types/BankCheck.html create mode 100644 Docs/types/BankTarget.html create mode 100644 Docs/types/Banker.html create mode 100644 Docs/types/BankerCamp.html create mode 100644 Docs/types/BankerConversation.html create mode 100644 Docs/types/Banner.html create mode 100644 Docs/types/BannerDeed.html create mode 100644 Docs/types/BarGraph.html create mode 100644 Docs/types/BarGraphRenderMode.html create mode 100644 Docs/types/BarGraphRenderer.html create mode 100644 Docs/types/BarRegion.html create mode 100644 Docs/types/BarbedHides.html create mode 100644 Docs/types/BarbedLeather.html create mode 100644 Docs/types/Bard.html create mode 100644 Docs/types/BardGuildmaster.html create mode 100644 Docs/types/Bardiche.html create mode 100644 Docs/types/BarkFragment.html create mode 100644 Docs/types/BarkeepContract.html create mode 100644 Docs/types/Barkeeper.html create mode 100644 Docs/types/BarkeeperGump.html create mode 100644 Docs/types/BarkeeperRumor.html create mode 100644 Docs/types/BarkeeperTitleGump.html create mode 100644 Docs/types/Barracoon.html create mode 100644 Docs/types/BarredMetalDoor.html create mode 100644 Docs/types/BarredMetalDoor2.html create mode 100644 Docs/types/Barrel.html create mode 100644 Docs/types/BarrelHoops.html create mode 100644 Docs/types/BarrelLid.html create mode 100644 Docs/types/BarrelStaves.html create mode 100644 Docs/types/BarrelTap.html create mode 100644 Docs/types/Bascinet.html create mode 100644 Docs/types/BaseAI.html create mode 100644 Docs/types/BaseAddon.html create mode 100644 Docs/types/BaseAddonContainer.html create mode 100644 Docs/types/BaseAddonContainerDeed.html create mode 100644 Docs/types/BaseAddonDeed.html create mode 100644 Docs/types/BaseAgilityPotion.html create mode 100644 Docs/types/BaseAmbitiousSolenQueen.html create mode 100644 Docs/types/BaseArmor.html create mode 100644 Docs/types/BaseAttributes.html create mode 100644 Docs/types/BaseAxe.html create mode 100644 Docs/types/BaseBagBall.html create mode 100644 Docs/types/BaseBashing.html create mode 100644 Docs/types/BaseBeverage.html create mode 100644 Docs/types/BaseBoard.html create mode 100644 Docs/types/BaseBoat.html create mode 100644 Docs/types/BaseBoatDeed.html create mode 100644 Docs/types/BaseBook.html create mode 100644 Docs/types/BaseBracelet.html create mode 100644 Docs/types/BaseBulletinBoard.html create mode 100644 Docs/types/BaseCamp.html create mode 100644 Docs/types/BaseChampion.html create mode 100644 Docs/types/BaseCloak.html create mode 100644 Docs/types/BaseClothMaterial.html create mode 100644 Docs/types/BaseClothing.html create mode 100644 Docs/types/BaseCommand.html create mode 100644 Docs/types/BaseCommandImplementor.html create mode 100644 Docs/types/BaseConfirmGump.html create mode 100644 Docs/types/BaseConflagrationPotion.html create mode 100644 Docs/types/BaseConfusionBlastPotion.html create mode 100644 Docs/types/BaseContainer.html create mode 100644 Docs/types/BaseCreature.html create mode 100644 Docs/types/BaseCurePotion.html create mode 100644 Docs/types/BaseDecorationArtifact.html create mode 100644 Docs/types/BaseDecorationContainerArtifact.html create mode 100644 Docs/types/BaseDockedBoat.html create mode 100644 Docs/types/BaseDoor.html create mode 100644 Docs/types/BaseEarrings.html create mode 100644 Docs/types/BaseEnraged.html create mode 100644 Docs/types/BaseEquipableLight.html create mode 100644 Docs/types/BaseEscortable.html create mode 100644 Docs/types/BaseExplosionPotion.html create mode 100644 Docs/types/BaseExtension.html create mode 100644 Docs/types/BaseFactionGuard.html create mode 100644 Docs/types/BaseFactionTrap.html create mode 100644 Docs/types/BaseFactionTrapDeed.html create mode 100644 Docs/types/BaseFactionVendor.html create mode 100644 Docs/types/BaseFamiliar.html create mode 100644 Docs/types/BaseFloor.html create mode 100644 Docs/types/BaseFormTalisman.html create mode 100644 Docs/types/BaseFruitTreeAddon.html create mode 100644 Docs/types/BaseGlovesOfMining.html create mode 100644 Docs/types/BaseGranite.html create mode 100644 Docs/types/BaseGridGump.html create mode 100644 Docs/types/BaseGuard.html create mode 100644 Docs/types/BaseGuild.html create mode 100644 Docs/types/BaseGuildGump.html create mode 100644 Docs/types/BaseGuildListGump-T-.html create mode 100644 Docs/types/BaseGuildmaster.html create mode 100644 Docs/types/BaseHairInfo.html create mode 100644 Docs/types/BaseHarvestTool.html create mode 100644 Docs/types/BaseHat.html create mode 100644 Docs/types/BaseHealPotion.html create mode 100644 Docs/types/BaseHealer.html create mode 100644 Docs/types/BaseHides.html create mode 100644 Docs/types/BaseHouse.html create mode 100644 Docs/types/BaseHouseDoor.html create mode 100644 Docs/types/BaseImageTileButtonsGump.html create mode 100644 Docs/types/BaseImprisonedMobile.html create mode 100644 Docs/types/BaseInfo.html create mode 100644 Docs/types/BaseIngot.html create mode 100644 Docs/types/BaseInstrument.html create mode 100644 Docs/types/BaseJewel.html create mode 100644 Docs/types/BaseKnife.html create mode 100644 Docs/types/BaseLeather.html create mode 100644 Docs/types/BaseLight.html create mode 100644 Docs/types/BaseMagicFish.html create mode 100644 Docs/types/BaseMeleeWeapon.html create mode 100644 Docs/types/BaseMiddleTorso.html create mode 100644 Docs/types/BaseMonolith.html create mode 100644 Docs/types/BaseMount.html create mode 100644 Docs/types/BaseMulti.html create mode 100644 Docs/types/BaseNecklace.html create mode 100644 Docs/types/BaseOre.html create mode 100644 Docs/types/BaseOuterLegs.html create mode 100644 Docs/types/BaseOuterTorso.html create mode 100644 Docs/types/BasePacketProfile.html create mode 100644 Docs/types/BasePants.html create mode 100644 Docs/types/BasePiece.html create mode 100644 Docs/types/BasePigmentsOfTokuno.html create mode 100644 Docs/types/BasePlayerBB.html create mode 100644 Docs/types/BasePoisonPotion.html create mode 100644 Docs/types/BasePoleArm.html create mode 100644 Docs/types/BasePotion.html create mode 100644 Docs/types/BaseProfile.html create mode 100644 Docs/types/BaseQuestGump.html create mode 100644 Docs/types/BaseQuester.html create mode 100644 Docs/types/BaseQuiver.html create mode 100644 Docs/types/BaseRanged.html create mode 100644 Docs/types/BaseReagent.html create mode 100644 Docs/types/BaseRefreshPotion.html create mode 100644 Docs/types/BaseRegion.html create mode 100644 Docs/types/BaseRejuvinationAnkh.html create mode 100644 Docs/types/BaseRing.html create mode 100644 Docs/types/BaseRunicTool.html create mode 100644 Docs/types/BaseScales.html create mode 100644 Docs/types/BaseShield.html create mode 100644 Docs/types/BaseShieldGuard.html create mode 100644 Docs/types/BaseShirt.html create mode 100644 Docs/types/BaseShoes.html create mode 100644 Docs/types/BaseSign.html create mode 100644 Docs/types/BaseSolenMatriarch.html create mode 100644 Docs/types/BaseSpear.html create mode 100644 Docs/types/BaseStaff.html create mode 100644 Docs/types/BaseStrengthPotion.html create mode 100644 Docs/types/BaseSuit.html create mode 100644 Docs/types/BaseSword.html create mode 100644 Docs/types/BaseSystemController.html create mode 100644 Docs/types/BaseTalisman.html create mode 100644 Docs/types/BaseTalismanSummon.html create mode 100644 Docs/types/BaseTool.html create mode 100644 Docs/types/BaseTrap.html create mode 100644 Docs/types/BaseTreasureChest.html create mode 100644 Docs/types/BaseVendor.html create mode 100644 Docs/types/BaseVendorRentalGump.html create mode 100644 Docs/types/BaseWaist.html create mode 100644 Docs/types/BaseWall.html create mode 100644 Docs/types/BaseWand.html create mode 100644 Docs/types/BaseWarHorse.html create mode 100644 Docs/types/BaseWaterContainer.html create mode 100644 Docs/types/BaseWeapon.html create mode 100644 Docs/types/BaseWindChimes.html create mode 100644 Docs/types/Basket.html create mode 100644 Docs/types/Basket1Artifact.html create mode 100644 Docs/types/Basket2Artifact.html create mode 100644 Docs/types/Basket3NorthArtifact.html create mode 100644 Docs/types/Basket3WestArtifact.html create mode 100644 Docs/types/Basket4Artifact.html create mode 100644 Docs/types/Basket5NorthArtifact.html create mode 100644 Docs/types/Basket5WestArtifact.html create mode 100644 Docs/types/Basket6Artifact.html create mode 100644 Docs/types/BatWing.html create mode 100644 Docs/types/Batch.html create mode 100644 Docs/types/BatchCommand.html create mode 100644 Docs/types/BatchGump.html create mode 100644 Docs/types/BatchScopeGump.html create mode 100644 Docs/types/BattleAxe.html create mode 100644 Docs/types/Beads.html create mode 100644 Docs/types/BearMask.html create mode 100644 Docs/types/Beard.html create mode 100644 Docs/types/BedOfNailsAddon.html create mode 100644 Docs/types/BedOfNailsComponent.html create mode 100644 Docs/types/BedOfNailsDeed.html create mode 100644 Docs/types/Bedroll.html create mode 100644 Docs/types/Beekeeper.html create mode 100644 Docs/types/Beeswax.html create mode 100644 Docs/types/Beetle.html create mode 100644 Docs/types/Begging.html create mode 100644 Docs/types/BeginHouseCustomization.html create mode 100644 Docs/types/BellOfTheDead.html create mode 100644 Docs/types/BentoBox.html create mode 100644 Docs/types/BerserkAI.html create mode 100644 Docs/types/Betrayer.html create mode 100644 Docs/types/BeverageBottle.html create mode 100644 Docs/types/BeverageBuyInfo.html create mode 100644 Docs/types/BeverageType.html create mode 100644 Docs/types/BigElvenChair.html create mode 100644 Docs/types/BigFish.html create mode 100644 Docs/types/BinaryFileReader.html create mode 100644 Docs/types/BinaryFileWriter.html create mode 100644 Docs/types/BinaryMemoryWriter.html create mode 100644 Docs/types/BindTarget.html create mode 100644 Docs/types/BindingException.html create mode 100644 Docs/types/Bird.html create mode 100644 Docs/types/BirdsOfBritannia.html create mode 100644 Docs/types/BlackAmbitiousSolenQueen.html create mode 100644 Docs/types/BlackBear.html create mode 100644 Docs/types/BlackDyeTub.html create mode 100644 Docs/types/BlackLotusHood.html create mode 100644 Docs/types/BlackPearl.html create mode 100644 Docs/types/BlackScales.html create mode 100644 Docs/types/BlackSolenInfiltratorQueen.html create mode 100644 Docs/types/BlackSolenInfiltratorWarrior.html create mode 100644 Docs/types/BlackSolenMatriarch.html create mode 100644 Docs/types/BlackSolenQueen.html create mode 100644 Docs/types/BlackSolenWarrior.html create mode 100644 Docs/types/BlackSolenWorker.html create mode 100644 Docs/types/BlackStaff.html create mode 100644 Docs/types/Blackheart.html create mode 100644 Docs/types/BlackheartFirstConversation.html create mode 100644 Docs/types/BlackheartNoPirateConversation.html create mode 100644 Docs/types/BlackheartPirateConversation.html create mode 100644 Docs/types/Blacksmith.html create mode 100644 Docs/types/BlacksmithGuildmaster.html create mode 100644 Docs/types/BlackthornWelcomeBook.html create mode 100644 Docs/types/BladeDance.html create mode 100644 Docs/types/BladeOfInsanity.html create mode 100644 Docs/types/BladeOfTheRighteous.html create mode 100644 Docs/types/BladeSpirits.html create mode 100644 Docs/types/BladeSpiritsScroll.html create mode 100644 Docs/types/BladeSpiritsSpell.html create mode 100644 Docs/types/BladedItemTarget.html create mode 100644 Docs/types/BladedStaff.html create mode 100644 Docs/types/BlankMap.html create mode 100644 Docs/types/BlankScroll.html create mode 100644 Docs/types/BlazeDyeTub.html create mode 100644 Docs/types/BlazeOfDeath.html create mode 100644 Docs/types/BleedAttack.html create mode 100644 Docs/types/Bless.html create mode 100644 Docs/types/BlessScroll.html create mode 100644 Docs/types/BlessSpell.html create mode 100644 Docs/types/Blight.html create mode 100644 Docs/types/BlightGrippedLongbow.html create mode 100644 Docs/types/Block.html create mode 100644 Docs/types/BlockEntry.html create mode 100644 Docs/types/BlockInfo.html create mode 100644 Docs/types/BlockMountType.html create mode 100644 Docs/types/Blocker.html create mode 100644 Docs/types/Blood.html create mode 100644 Docs/types/BloodElemental.html create mode 100644 Docs/types/BloodOathScroll.html create mode 100644 Docs/types/BloodOathSpell.html create mode 100644 Docs/types/BloodPentagram.html create mode 100644 Docs/types/Bloodmoss.html create mode 100644 Docs/types/BloodwoodBoard.html create mode 100644 Docs/types/BloodwoodLog.html create mode 100644 Docs/types/BloodwoodSpirit.html create mode 100644 Docs/types/BloodyPentagramAddon.html create mode 100644 Docs/types/BloodyPentagramComponent.html create mode 100644 Docs/types/BloodyPentagramDeed.html create mode 100644 Docs/types/BloodyWaterArtifact.html create mode 100644 Docs/types/Blowpipe.html create mode 100644 Docs/types/BlueBeaker.html create mode 100644 Docs/types/BlueBook.html create mode 100644 Docs/types/BlueCurvedFlask.html create mode 100644 Docs/types/BlueDecorativeRugAddon.html create mode 100644 Docs/types/BlueDecorativeRugDeed.html create mode 100644 Docs/types/BlueDiamond.html create mode 100644 Docs/types/BlueFancyRugAddon.html create mode 100644 Docs/types/BlueFancyRugDeed.html create mode 100644 Docs/types/BlueNinjaQuestTeleporter.html create mode 100644 Docs/types/BluePlainRugAddon.html create mode 100644 Docs/types/BluePlainRugDeed.html create mode 100644 Docs/types/BlueScales.html create mode 100644 Docs/types/BlueSlateFloorCenter.html create mode 100644 Docs/types/BlueSnowflake.html create mode 100644 Docs/types/BlueSoulstone.html create mode 100644 Docs/types/Boar.html create mode 100644 Docs/types/Board.html create mode 100644 Docs/types/BoatOrder.html create mode 100644 Docs/types/Body.html create mode 100644 Docs/types/BodyAttribute.html create mode 100644 Docs/types/BodyEntry.html create mode 100644 Docs/types/BodyEntrySorter.html create mode 100644 Docs/types/BodySash.html create mode 100644 Docs/types/BodyType.html create mode 100644 Docs/types/BogThing.html create mode 100644 Docs/types/Bogle.html create mode 100644 Docs/types/Bogling.html create mode 100644 Docs/types/BoilingCauldronAddon.html create mode 100644 Docs/types/BoilingCauldronDeed.html create mode 100644 Docs/types/Bokuto.html create mode 100644 Docs/types/Bola.html create mode 100644 Docs/types/BolaBall.html create mode 100644 Docs/types/BolaTarget.html create mode 100644 Docs/types/BoldStranger.html create mode 100644 Docs/types/Bolt.html create mode 100644 Docs/types/BoltEffect.html create mode 100644 Docs/types/BoltOfCloth.html create mode 100644 Docs/types/BondedStatus.html create mode 100644 Docs/types/Bone.html create mode 100644 Docs/types/BoneArms.html create mode 100644 Docs/types/BoneChest.html create mode 100644 Docs/types/BoneCouchAddon.html create mode 100644 Docs/types/BoneCouchComponent.html create mode 100644 Docs/types/BoneCouchDeed.html create mode 100644 Docs/types/BoneCrusher.html create mode 100644 Docs/types/BoneDemon.html create mode 100644 Docs/types/BoneGloves.html create mode 100644 Docs/types/BoneHarvester.html create mode 100644 Docs/types/BoneHelm.html create mode 100644 Docs/types/BoneKnight.html create mode 100644 Docs/types/BoneLegs.html create mode 100644 Docs/types/BoneMagi.html create mode 100644 Docs/types/BonePile.html create mode 100644 Docs/types/BoneTableAddon.html create mode 100644 Docs/types/BoneTableDeed.html create mode 100644 Docs/types/BoneThroneAddon.html create mode 100644 Docs/types/BoneThroneComponent.html create mode 100644 Docs/types/BoneThroneDeed.html create mode 100644 Docs/types/Bonesmasher.html create mode 100644 Docs/types/Bonnet.html create mode 100644 Docs/types/BonusHarvestResource.html create mode 100644 Docs/types/BookContent.html create mode 100644 Docs/types/BookHeader.html create mode 100644 Docs/types/BookOfBushido.html create mode 100644 Docs/types/BookOfChivalry.html create mode 100644 Docs/types/BookOfNinjitsu.html create mode 100644 Docs/types/BookPageDetails.html create mode 100644 Docs/types/BookPageInfo.html create mode 100644 Docs/types/BooksFaceDownArtifact.html create mode 100644 Docs/types/BooksNorthArtifact.html create mode 100644 Docs/types/BooksWestArtifact.html create mode 100644 Docs/types/Boomstick.html create mode 100644 Docs/types/Boots.html create mode 100644 Docs/types/Bottle.html create mode 100644 Docs/types/BottleArtifact.html create mode 100644 Docs/types/BounceInfo.html create mode 100644 Docs/types/BoundingBoxCallback.html create mode 100644 Docs/types/BoundingBoxPicker.html create mode 100644 Docs/types/Bow.html create mode 100644 Docs/types/BowOfTheJukaKing.html create mode 100644 Docs/types/BowlArtifact.html create mode 100644 Docs/types/BowlFlour.html create mode 100644 Docs/types/BowlsHorizontalArtifact.html create mode 100644 Docs/types/BowlsVerticalArtifact.html create mode 100644 Docs/types/Bowyer.html create mode 100644 Docs/types/BraceletCallback.html create mode 100644 Docs/types/BraceletEntry.html create mode 100644 Docs/types/BraceletOfBinding.html create mode 100644 Docs/types/BraceletOfHealth.html create mode 100644 Docs/types/BrambleCoat.html create mode 100644 Docs/types/BraveKnightOfTheBritannia.html create mode 100644 Docs/types/Brazier.html create mode 100644 Docs/types/BrazierArtifact.html create mode 100644 Docs/types/BrazierTall.html create mode 100644 Docs/types/BreadLoaf.html create mode 100644 Docs/types/BreathOfTheDead.html create mode 100644 Docs/types/BrickHouseDeed.html create mode 100644 Docs/types/BricksFloor1.html create mode 100644 Docs/types/BricksFloor2.html create mode 100644 Docs/types/BrideGroom.html create mode 100644 Docs/types/Brigand.html create mode 100644 Docs/types/BrigandCamp.html create mode 100644 Docs/types/BrightlyColoredEggs.html create mode 100644 Docs/types/BrilliantAmber.html create mode 100644 Docs/types/BringToPackCommand.html create mode 100644 Docs/types/Britain.html create mode 100644 Docs/types/BritannianFlora.html create mode 100644 Docs/types/BroadcastCrystal.html create mode 100644 Docs/types/BroadcastPrompt.html create mode 100644 Docs/types/Broadcasts.html create mode 100644 Docs/types/Broadsword.html create mode 100644 Docs/types/BrocadeGozaMatEastAddon.html create mode 100644 Docs/types/BrocadeGozaMatEastDeed.html create mode 100644 Docs/types/BrocadeGozaMatSouthAddon.html create mode 100644 Docs/types/BrocadeGozaMatSouthDeed.html create mode 100644 Docs/types/BrocadeSquareGozaMatEastAddon.html create mode 100644 Docs/types/BrocadeSquareGozaMatEastDeed.html create mode 100644 Docs/types/BrocadeSquareGozaMatSouthAddon.html create mode 100644 Docs/types/BrocadeSquareGozaMatSouthDeed.html create mode 100644 Docs/types/BrokenArmoireAddon.html create mode 100644 Docs/types/BrokenArmoireComponent.html create mode 100644 Docs/types/BrokenArmoireDeed.html create mode 100644 Docs/types/BrokenBedAddon.html create mode 100644 Docs/types/BrokenBedDeed.html create mode 100644 Docs/types/BrokenBookcaseAddon.html create mode 100644 Docs/types/BrokenBookcaseComponent.html create mode 100644 Docs/types/BrokenBookcaseDeed.html create mode 100644 Docs/types/BrokenChair.html create mode 100644 Docs/types/BrokenChestOfDrawersAddon.html create mode 100644 Docs/types/BrokenChestOfDrawersComponent.html create mode 100644 Docs/types/BrokenChestOfDrawersDeed.html create mode 100644 Docs/types/BrokenCoveredChairAddon.html create mode 100644 Docs/types/BrokenCoveredChairComponent.html create mode 100644 Docs/types/BrokenCoveredChairDeed.html create mode 100644 Docs/types/BrokenFallenChairAddon.html create mode 100644 Docs/types/BrokenFallenChairComponent.html create mode 100644 Docs/types/BrokenFallenChairDeed.html create mode 100644 Docs/types/BrokenVanityAddon.html create mode 100644 Docs/types/BrokenVanityDeed.html create mode 100644 Docs/types/BronzeElemental.html create mode 100644 Docs/types/BronzeGranite.html create mode 100644 Docs/types/BronzeIngot.html create mode 100644 Docs/types/BronzeOre.html create mode 100644 Docs/types/BronzeShield.html create mode 100644 Docs/types/BronzeStatueMaker.html create mode 100644 Docs/types/BrownBear.html create mode 100644 Docs/types/BrownBearRugEastAddon.html create mode 100644 Docs/types/BrownBearRugEastDeed.html create mode 100644 Docs/types/BrownBearRugSouthAddon.html create mode 100644 Docs/types/BrownBearRugSouthDeed.html create mode 100644 Docs/types/BrownBook.html create mode 100644 Docs/types/Bucket.html create mode 100644 Docs/types/Buckler.html create mode 100644 Docs/types/BuffIcon.html create mode 100644 Docs/types/BuffInfo.html create mode 100644 Docs/types/BufferPool.html create mode 100644 Docs/types/BulkGenericType.html create mode 100644 Docs/types/BulkMaterialType.html create mode 100644 Docs/types/BulkOrderBook.html create mode 100644 Docs/types/BulkOrderInfoEntry.html create mode 100644 Docs/types/Bull.html create mode 100644 Docs/types/BullFrog.html create mode 100644 Docs/types/BulletinBoard.html create mode 100644 Docs/types/BulletinEquip.html create mode 100644 Docs/types/BulletinMessage.html create mode 100644 Docs/types/BunnyHole.html create mode 100644 Docs/types/BunsHair.html create mode 100644 Docs/types/BurglarsBandana.html create mode 100644 Docs/types/BurningOfTrinsic.html create mode 100644 Docs/types/BustEast.html create mode 100644 Docs/types/BustSouth.html create mode 100644 Docs/types/Butcher.html create mode 100644 Docs/types/ButcherKnife.html create mode 100644 Docs/types/Buttons.html create mode 100644 Docs/types/BuyEntry.html create mode 100644 Docs/types/BuyItemResponse.html create mode 100644 Docs/types/BuyItemState.html create mode 100644 Docs/types/BuyItemStateComparer.html create mode 100644 Docs/types/ByteQueue.html create mode 100644 Docs/types/CAGCategory.html create mode 100644 Docs/types/CAGNode.html create mode 100644 Docs/types/CAGObject.html create mode 100644 Docs/types/CIDRFirewallEntry.html create mode 100644 Docs/types/CMEFlags.html create mode 100644 Docs/types/Cabbage.html create mode 100644 Docs/types/Cake.html create mode 100644 Docs/types/CakeMix.html create mode 100644 Docs/types/CallInfo.html create mode 100644 Docs/types/CallPriorityAttribute.html create mode 100644 Docs/types/CallPriorityComparer.html create mode 100644 Docs/types/CallToAnarchy.html create mode 100644 Docs/types/Callback.html create mode 100644 Docs/types/CallbackEntry.html create mode 100644 Docs/types/CallingTimer.html create mode 100644 Docs/types/Calm.html create mode 100644 Docs/types/Campfire.html create mode 100644 Docs/types/CampfireEntry.html create mode 100644 Docs/types/CampfireStatus.html create mode 100644 Docs/types/CancelArrow.html create mode 100644 Docs/types/CancelArrowHS.html create mode 100644 Docs/types/CancelQuestRegion.html create mode 100644 Docs/types/CancelRenewInventoryInsuranceGump.html create mode 100644 Docs/types/CancelTarget.html create mode 100644 Docs/types/Candelabra.html create mode 100644 Docs/types/CandelabraOfSouls.html create mode 100644 Docs/types/CandelabraStand.html create mode 100644 Docs/types/Candidate.html create mode 100644 Docs/types/Candle.html create mode 100644 Docs/types/CandleLarge.html create mode 100644 Docs/types/CandleLong.html create mode 100644 Docs/types/CandleShort.html create mode 100644 Docs/types/CandleSkull.html create mode 100644 Docs/types/CandyCane.html create mode 100644 Docs/types/CandyCaneTimer.html create mode 100644 Docs/types/Cannon.html create mode 100644 Docs/types/CannonAddon.html create mode 100644 Docs/types/CannonAddonComponent.html create mode 100644 Docs/types/CannonComponent.html create mode 100644 Docs/types/CannonDeed.html create mode 100644 Docs/types/CannonDirection.html create mode 100644 Docs/types/Cantaloupe.html create mode 100644 Docs/types/Cap.html create mode 100644 Docs/types/CapacityExceededException.html create mode 100644 Docs/types/CaptainJohnsHat.html create mode 100644 Docs/types/CaptainQuacklebushsCutlass.html create mode 100644 Docs/types/CaptureImagesObjective.html create mode 100644 Docs/types/CaptureResponse.html create mode 100644 Docs/types/CapturedEssence.html create mode 100644 Docs/types/CapturedHordeMinion.html create mode 100644 Docs/types/Cards.html create mode 100644 Docs/types/Cards2.html create mode 100644 Docs/types/Cards3.html create mode 100644 Docs/types/Cards4.html create mode 100644 Docs/types/Carpenter.html create mode 100644 Docs/types/Carrot.html create mode 100644 Docs/types/CashBankCheckObjective.html create mode 100644 Docs/types/CastSpellRequestEventArgs.html create mode 100644 Docs/types/CastSpellRequestEventHandler.html create mode 100644 Docs/types/CastTimer.html create mode 100644 Docs/types/Castle.html create mode 100644 Docs/types/CastleDeed.html create mode 100644 Docs/types/Cat.html create mode 100644 Docs/types/Categorization.html create mode 100644 Docs/types/CategorizedAddGump.html create mode 100644 Docs/types/CategoryEntry.html create mode 100644 Docs/types/CategoryLine.html create mode 100644 Docs/types/CategorySorter.html create mode 100644 Docs/types/CategoryTypeEntry.html create mode 100644 Docs/types/Cauldron.html create mode 100644 Docs/types/CaveFloorCenter.html create mode 100644 Docs/types/CaveFloorEast.html create mode 100644 Docs/types/CaveFloorNorth.html create mode 100644 Docs/types/CaveFloorSouth.html create mode 100644 Docs/types/CaveFloorWest.html create mode 100644 Docs/types/CavortingClub.html create mode 100644 Docs/types/Centaur.html create mode 100644 Docs/types/CeramicMug.html create mode 100644 Docs/types/ChainChest.html create mode 100644 Docs/types/ChainCoif.html create mode 100644 Docs/types/ChainHatsuburi.html create mode 100644 Docs/types/ChainLegs.html create mode 100644 Docs/types/ChainLightningScroll.html create mode 100644 Docs/types/ChainLightningSpell.html create mode 100644 Docs/types/ChampionAltar.html create mode 100644 Docs/types/ChampionPlatform.html create mode 100644 Docs/types/ChampionSkull.html create mode 100644 Docs/types/ChampionSkullBrazier.html create mode 100644 Docs/types/ChampionSkullPlatform.html create mode 100644 Docs/types/ChampionSkullType.html create mode 100644 Docs/types/ChampionSpawn.html create mode 100644 Docs/types/ChampionSpawnInfo.html create mode 100644 Docs/types/ChampionSpawnRegion.html create mode 100644 Docs/types/ChampionSpawnType.html create mode 100644 Docs/types/ChampionTitleInfo.html create mode 100644 Docs/types/ChangeCharacter.html create mode 100644 Docs/types/ChangeCombatant.html create mode 100644 Docs/types/ChangeHairHueEntry.html create mode 100644 Docs/types/ChangeHairHueGump.html create mode 100644 Docs/types/ChangeHairstyleEntry.html create mode 100644 Docs/types/ChangeHairstyleGump.html create mode 100644 Docs/types/ChangeProfileRequestEventArgs.html create mode 100644 Docs/types/ChangeProfileRequestEventHandler.html create mode 100644 Docs/types/ChangeRumorKeywordPrompt.html create mode 100644 Docs/types/ChangeRumorMessagePrompt.html create mode 100644 Docs/types/ChangeTipMessagePrompt.html create mode 100644 Docs/types/ChangeUpdateRange.html create mode 100644 Docs/types/Channel.html create mode 100644 Docs/types/ChaosDaemon.html create mode 100644 Docs/types/ChaosDragoon.html create mode 100644 Docs/types/ChaosDragoonElite.html create mode 100644 Docs/types/ChaosGuard.html create mode 100644 Docs/types/ChaosShield.html create mode 100644 Docs/types/CharacterCreatedEventArgs.html create mode 100644 Docs/types/CharacterCreatedEventHandler.html create mode 100644 Docs/types/CharacterCreation.html create mode 100644 Docs/types/CharacterList.html create mode 100644 Docs/types/CharacterListFlags.html create mode 100644 Docs/types/CharacterListOld.html create mode 100644 Docs/types/CharacterListUpdate.html create mode 100644 Docs/types/CharacterPlinthGump.html create mode 100644 Docs/types/CharacterStatue.html create mode 100644 Docs/types/CharacterStatueDeed.html create mode 100644 Docs/types/CharacterStatueGump.html create mode 100644 Docs/types/CharacterStatueMaker.html create mode 100644 Docs/types/CharacterStatuePlinth.html create mode 100644 Docs/types/CharacterStatueTarget.html create mode 100644 Docs/types/ChargerOfTheFallen.html create mode 100644 Docs/types/Chart.html create mode 100644 Docs/types/ChartItem.html create mode 100644 Docs/types/ChartItemCollection.html create mode 100644 Docs/types/ChartItemCollectionEnumerator.html create mode 100644 Docs/types/ChartItemsCollection.html create mode 100644 Docs/types/ChartRenderer.html create mode 100644 Docs/types/ChatActionHandler.html create mode 100644 Docs/types/ChatActionHandlers.html create mode 100644 Docs/types/ChatCommand.html create mode 100644 Docs/types/ChatMessagePacket.html create mode 100644 Docs/types/ChatRequestEventArgs.html create mode 100644 Docs/types/ChatRequestEventHandler.html create mode 100644 Docs/types/ChatSystem.html create mode 100644 Docs/types/ChatUser.html create mode 100644 Docs/types/CheckItemGroup.html create mode 100644 Docs/types/CheckSlayerResult.html create mode 100644 Docs/types/CheckerBoard.html create mode 100644 Docs/types/Checkers.html create mode 100644 Docs/types/Checkers2.html create mode 100644 Docs/types/CheesePizza.html create mode 100644 Docs/types/CheeseSlice.html create mode 100644 Docs/types/CheeseWedge.html create mode 100644 Docs/types/CheeseWheel.html create mode 100644 Docs/types/CherryArmoire.html create mode 100644 Docs/types/CherryBlossomTreeAddon.html create mode 100644 Docs/types/CherryBlossomTreeDeed.html create mode 100644 Docs/types/CherryBlossomTrunkAddon.html create mode 100644 Docs/types/CherryBlossomTrunkDeed.html create mode 100644 Docs/types/Chessboard.html create mode 100644 Docs/types/Chessmen.html create mode 100644 Docs/types/Chessmen2.html create mode 100644 Docs/types/Chessmen3.html create mode 100644 Docs/types/ChestOfHeirlooms.html create mode 100644 Docs/types/Chicken.html create mode 100644 Docs/types/ChickenLeg.html create mode 100644 Docs/types/ChildNode.html create mode 100644 Docs/types/ChildrenTalesVol2.html create mode 100644 Docs/types/ChiselsNorth.html create mode 100644 Docs/types/ChiselsWest.html create mode 100644 Docs/types/Chunk.html create mode 100644 Docs/types/Chyloth.html create mode 100644 Docs/types/ChylothPartyGump.html create mode 100644 Docs/types/ChylothShroud.html create mode 100644 Docs/types/ChylothStaff.html create mode 100644 Docs/types/CinnamonFancyRugAddon.html create mode 100644 Docs/types/CinnamonFancyRugDeed.html create mode 100644 Docs/types/CirclePoint.html create mode 100644 Docs/types/Circlet.html create mode 100644 Docs/types/Citrine.html create mode 100644 Docs/types/CityInfo.html create mode 100644 Docs/types/CityMap.html create mode 100644 Docs/types/ClaimAllEntry.html create mode 100644 Docs/types/ClaimListGump.html create mode 100644 Docs/types/CleanseByFireSpell.html create mode 100644 Docs/types/Cleanup.html create mode 100644 Docs/types/ClearWeaponAbility.html create mode 100644 Docs/types/ClearanceException.html create mode 100644 Docs/types/Cleaver.html create mode 100644 Docs/types/ClientFlags.html create mode 100644 Docs/types/ClientGump.html create mode 100644 Docs/types/ClientTarget.html create mode 100644 Docs/types/ClientType.html create mode 100644 Docs/types/ClientVerification.html create mode 100644 Docs/types/ClientVersion.html create mode 100644 Docs/types/ClientVersionReceivedArgs.html create mode 100644 Docs/types/ClientVersionReceivedHandler.html create mode 100644 Docs/types/ClientVersionReq.html create mode 100644 Docs/types/Cloak.html create mode 100644 Docs/types/Clock.html create mode 100644 Docs/types/ClockFrame.html create mode 100644 Docs/types/ClockLeft.html create mode 100644 Docs/types/ClockParts.html create mode 100644 Docs/types/ClockRight.html create mode 100644 Docs/types/ClockworkAssembly.html create mode 100644 Docs/types/Clone.html create mode 100644 Docs/types/CloneAI.html create mode 100644 Docs/types/CloseGump.html create mode 100644 Docs/types/CloseHelm.html create mode 100644 Docs/types/CloseSecureTrade.html create mode 100644 Docs/types/CloseTimer.html create mode 100644 Docs/types/CloseWoundsSpell.html create mode 100644 Docs/types/ClosedBarrel.html create mode 100644 Docs/types/Cloth.html create mode 100644 Docs/types/ClothNinjaHood.html create mode 100644 Docs/types/ClothNinjaJacket.html create mode 100644 Docs/types/ClothingBlessDeed.html create mode 100644 Docs/types/ClothingBlessTarget.html create mode 100644 Docs/types/ClothingQuality.html create mode 100644 Docs/types/Club.html create mode 100644 Docs/types/ClumsyScroll.html create mode 100644 Docs/types/ClumsySpell.html create mode 100644 Docs/types/ClumsyWand.html create mode 100644 Docs/types/CoMWarHorse.html create mode 100644 Docs/types/CoOwnerTarget.html create mode 100644 Docs/types/Coal.html create mode 100644 Docs/types/Cobbler.html create mode 100644 Docs/types/CobblestonesFloor.html create mode 100644 Docs/types/Coconut.html create mode 100644 Docs/types/CocoonArtifact.html create mode 100644 Docs/types/ColdBlood.html create mode 100644 Docs/types/ColdForgedBlade.html create mode 100644 Docs/types/CollectBonesObjective.html create mode 100644 Docs/types/CollectGoldPrompt.html create mode 100644 Docs/types/CollectRentEntry.html create mode 100644 Docs/types/CollectorQuest.html create mode 100644 Docs/types/ColoredAnvil.html create mode 100644 Docs/types/ColumnInfo.html create mode 100644 Docs/types/CombatTimer.html create mode 100644 Docs/types/ComboEntry.html create mode 100644 Docs/types/CommandEntry.html create mode 100644 Docs/types/CommandEntrySorter.html create mode 100644 Docs/types/CommandEventArgs.html create mode 100644 Docs/types/CommandEventHandler.html create mode 100644 Docs/types/CommandHandlers.html create mode 100644 Docs/types/CommandInfoGump.html create mode 100644 Docs/types/CommandListGump.html create mode 100644 Docs/types/CommandLogging.html create mode 100644 Docs/types/CommandPropertyAttribute.html create mode 100644 Docs/types/CommandSupport.html create mode 100644 Docs/types/CommandSystem.html create mode 100644 Docs/types/CommodityDeed.html create mode 100644 Docs/types/CommodityDeedBox.html create mode 100644 Docs/types/CompactInfo.html create mode 100644 Docs/types/ComparisonCondition.html create mode 100644 Docs/types/ComparisonOperator.html create mode 100644 Docs/types/CompassionVirtue.html create mode 100644 Docs/types/Compiler.html create mode 100644 Docs/types/ComponentVerification.html create mode 100644 Docs/types/CompositeBow.html create mode 100644 Docs/types/Compression.html create mode 100644 Docs/types/Compressor32.html create mode 100644 Docs/types/Compressor64.html create mode 100644 Docs/types/CompressorUnix32.html create mode 100644 Docs/types/CompressorUnix64.html create mode 100644 Docs/types/ConcussionBlow.html create mode 100644 Docs/types/ConditionCommand.html create mode 100644 Docs/types/ConditionalCompiler.html create mode 100644 Docs/types/Confidence.html create mode 100644 Docs/types/Config.html create mode 100644 Docs/types/ConfirmBreakCrystalGump.html create mode 100644 Docs/types/ConfirmCommitGump.html create mode 100644 Docs/types/ConfirmDryDockGump.html create mode 100644 Docs/types/ConfirmGump.html create mode 100644 Docs/types/ConfirmHeritageGump.html create mode 100644 Docs/types/ConfirmHouseResize.html create mode 100644 Docs/types/ConfirmReleaseGump.html create mode 100644 Docs/types/ConfirmRemovalGump.html create mode 100644 Docs/types/ConfirmSkillGump.html create mode 100644 Docs/types/ConfirmTransferGump.html create mode 100644 Docs/types/ConfirmationMoongate.html create mode 100644 Docs/types/ConflagrationPotion.html create mode 100644 Docs/types/ConfusionBlastPotion.html create mode 100644 Docs/types/ConnectedEventArgs.html create mode 100644 Docs/types/ConnectedEventHandler.html create mode 100644 Docs/types/ConsecrateWeaponSpell.html create mode 100644 Docs/types/ConsoleData.html create mode 100644 Docs/types/ConsoleEventHandler.html create mode 100644 Docs/types/ConsoleEventType.html create mode 100644 Docs/types/ConstructCallback.html create mode 100644 Docs/types/ConstructableAttribute.html create mode 100644 Docs/types/ConsumableEntry.html create mode 100644 Docs/types/ConsumeType.html create mode 100644 Docs/types/Consumer.html create mode 100644 Docs/types/ContainedCommandImplementor.html create mode 100644 Docs/types/ContainedMenu.html create mode 100644 Docs/types/Container.html create mode 100644 Docs/types/ContainerContent.html create mode 100644 Docs/types/ContainerContent6017.html create mode 100644 Docs/types/ContainerContentUpdate.html create mode 100644 Docs/types/ContainerContentUpdate6017.html create mode 100644 Docs/types/ContainerData.html create mode 100644 Docs/types/ContainerDisplay.html create mode 100644 Docs/types/ContainerDisplayHS.html create mode 100644 Docs/types/ContainerSnoopHandler.html create mode 100644 Docs/types/ContainerTarget.html create mode 100644 Docs/types/ContestMiniHouse.html create mode 100644 Docs/types/ContestMiniHouseDeed.html create mode 100644 Docs/types/ContextCallback.html create mode 100644 Docs/types/ContextMenu.html create mode 100644 Docs/types/ContextMenuEntry.html create mode 100644 Docs/types/ContinueSlayHenchmenConversation.html create mode 100644 Docs/types/ContractOfEmployment.html create mode 100644 Docs/types/ContractOptionEntry.html create mode 100644 Docs/types/ContractOptionsEntry.html create mode 100644 Docs/types/ContractRenewalPricePrompt.html create mode 100644 Docs/types/ControlPanel.html create mode 100644 Docs/types/ConvertPlayers.html create mode 100644 Docs/types/Cook.html create mode 100644 Docs/types/CookableFood.html create mode 100644 Docs/types/CookedBird.html create mode 100644 Docs/types/CookieMix.html create mode 100644 Docs/types/Cookies.html create mode 100644 Docs/types/CopperElemental.html create mode 100644 Docs/types/CopperGranite.html create mode 100644 Docs/types/CopperIngot.html create mode 100644 Docs/types/CopperOre.html create mode 100644 Docs/types/CopperWire.html create mode 100644 Docs/types/CopyTarget.html create mode 100644 Docs/types/Core.html create mode 100644 Docs/types/Corpse.html create mode 100644 Docs/types/CorpseContent.html create mode 100644 Docs/types/CorpseEquip.html create mode 100644 Docs/types/CorpseFlag.html create mode 100644 Docs/types/CorpseNameAttribute.html create mode 100644 Docs/types/CorpseSkinScroll.html create mode 100644 Docs/types/CorpseSkinSpell.html create mode 100644 Docs/types/CorpseTarget.html create mode 100644 Docs/types/Corpser.html create mode 100644 Docs/types/CorrosiveSlime.html create mode 100644 Docs/types/CorruptedSoul.html create mode 100644 Docs/types/Corruption.html create mode 100644 Docs/types/Cotton.html create mode 100644 Docs/types/Cougar.html create mode 100644 Docs/types/CouncilOfMages.html create mode 100644 Docs/types/CounselorRobe.html create mode 100644 Docs/types/CountAndTimeStamp.html create mode 100644 Docs/types/CountCommand.html create mode 100644 Docs/types/CountSorter.html create mode 100644 Docs/types/CounterAttack.html create mode 100644 Docs/types/CoveredChair.html create mode 100644 Docs/types/Cow.html create mode 100644 Docs/types/CraftAttributeInfo.html create mode 100644 Docs/types/CraftContext.html create mode 100644 Docs/types/CraftECA.html create mode 100644 Docs/types/CraftGroup.html create mode 100644 Docs/types/CraftGroupCol.html create mode 100644 Docs/types/CraftGump.html create mode 100644 Docs/types/CraftGumpItem.html create mode 100644 Docs/types/CraftItem.html create mode 100644 Docs/types/CraftItemCol.html create mode 100644 Docs/types/CraftItemIDAttribute.html create mode 100644 Docs/types/CraftMarkOption.html create mode 100644 Docs/types/CraftPage.html create mode 100644 Docs/types/CraftRes.html create mode 100644 Docs/types/CraftResCol.html create mode 100644 Docs/types/CraftResource.html create mode 100644 Docs/types/CraftResourceInfo.html create mode 100644 Docs/types/CraftResourceType.html create mode 100644 Docs/types/CraftResources.html create mode 100644 Docs/types/CraftSkill.html create mode 100644 Docs/types/CraftSkillCol.html create mode 100644 Docs/types/CraftSubRes.html create mode 100644 Docs/types/CraftSubResCol.html create mode 100644 Docs/types/CraftSystem.html create mode 100644 Docs/types/Crane.html create mode 100644 Docs/types/CrashGuard.html create mode 100644 Docs/types/CrashedEventArgs.html create mode 100644 Docs/types/CrashedEventHandler.html create mode 100644 Docs/types/CreateCorpseHandler.html create mode 100644 Docs/types/CreateFoodScroll.html create mode 100644 Docs/types/CreateFoodSpell.html create mode 100644 Docs/types/CreateGuildEventArgs.html create mode 100644 Docs/types/CreateGuildGump.html create mode 100644 Docs/types/CreateGuildHandler.html create mode 100644 Docs/types/CreatureBackpack.html create mode 100644 Docs/types/CreatureGroup.html create mode 100644 Docs/types/CreepyPortraitAddon.html create mode 100644 Docs/types/CreepyPortraitComponent.html create mode 100644 Docs/types/CreepyPortraitDeed.html create mode 100644 Docs/types/CrescentBlade.html create mode 100644 Docs/types/CrimsonCincture.html create mode 100644 Docs/types/Crossbow.html create mode 100644 Docs/types/CrossbowBolts.html create mode 100644 Docs/types/CrownOfTalKeesh.html create mode 100644 Docs/types/CrushingBlow.html create mode 100644 Docs/types/CrystalCaveBarrier.html create mode 100644 Docs/types/CrystalElemental.html create mode 100644 Docs/types/CrystalRechargeInfo.html create mode 100644 Docs/types/CuSidhe.html create mode 100644 Docs/types/CuSidheFormTalisman.html create mode 100644 Docs/types/CunningScroll.html create mode 100644 Docs/types/CunningSpell.html create mode 100644 Docs/types/CupsArtifact.html create mode 100644 Docs/types/CureLevelInfo.html create mode 100644 Docs/types/CurePotion.html create mode 100644 Docs/types/CureScroll.html create mode 100644 Docs/types/CureSpell.html create mode 100644 Docs/types/CurrentExpansion.html create mode 100644 Docs/types/CurrentTime.html create mode 100644 Docs/types/CurseScroll.html create mode 100644 Docs/types/CurseSpell.html create mode 100644 Docs/types/CurseWeaponScroll.html create mode 100644 Docs/types/CurseWeaponSpell.html create mode 100644 Docs/types/Cursed.html create mode 100644 Docs/types/CursedSoul.html create mode 100644 Docs/types/CurtainsAddon.html create mode 100644 Docs/types/CurtainsComponent.html create mode 100644 Docs/types/CurtainsDeed.html create mode 100644 Docs/types/CurvedFlask.html create mode 100644 Docs/types/CustomCategory.html create mode 100644 Docs/types/CustomCraft.html create mode 100644 Docs/types/CustomEnumAttribute.html create mode 100644 Docs/types/CustomHairstylist.html create mode 100644 Docs/types/CustomHueGroup.html create mode 100644 Docs/types/CustomHuePicker.html create mode 100644 Docs/types/CustomHuePickerCallback.html create mode 100644 Docs/types/CustomHuePickerGump.html create mode 100644 Docs/types/CustomItem.html create mode 100644 Docs/types/Cutlass.html create mode 100644 Docs/types/Cyclops.html create mode 100644 Docs/types/DFAlgorithm.html create mode 100644 Docs/types/Daemon.html create mode 100644 Docs/types/DaemonArms.html create mode 100644 Docs/types/DaemonBlood.html create mode 100644 Docs/types/DaemonBloodChest.html create mode 100644 Docs/types/DaemonBone.html create mode 100644 Docs/types/DaemonChest.html create mode 100644 Docs/types/DaemonGloves.html create mode 100644 Docs/types/DaemonHelm.html create mode 100644 Docs/types/DaemonLegs.html create mode 100644 Docs/types/Dagger.html create mode 100644 Docs/types/DaimyosHelm.html create mode 100644 Docs/types/Daisho.html create mode 100644 Docs/types/DamageEntry.html create mode 100644 Docs/types/DamagePacket.html create mode 100644 Docs/types/DamagePacketOld.html create mode 100644 Docs/types/DamageStore.html create mode 100644 Docs/types/DamageTimer.html create mode 100644 Docs/types/DamagedBooksArtifact.html create mode 100644 Docs/types/DarkFlowerTapestryEastAddon.html create mode 100644 Docs/types/DarkFlowerTapestryEastDeed.html create mode 100644 Docs/types/DarkFlowerTapestrySouthAddon.html create mode 100644 Docs/types/DarkFlowerTapestrySouthDeed.html create mode 100644 Docs/types/DarkSandstoneFloorN.html create mode 100644 Docs/types/DarkSandstoneFloorW.html create mode 100644 Docs/types/DarkSapphire.html create mode 100644 Docs/types/DarkSource.html create mode 100644 Docs/types/DarkTidesHorn.html create mode 100644 Docs/types/DarkTidesQuest.html create mode 100644 Docs/types/DarkTidesTeleporter.html create mode 100644 Docs/types/DarkWisp.html create mode 100644 Docs/types/DarkWolfFamiliar.html create mode 100644 Docs/types/DarkWoodDoor.html create mode 100644 Docs/types/DarkWoodGate.html create mode 100644 Docs/types/DarkWoodHouseDoor.html create mode 100644 Docs/types/DarkWoodWall.html create mode 100644 Docs/types/DarkWoodWallTypes.html create mode 100644 Docs/types/DarkYarn.html create mode 100644 Docs/types/DarkenedSky.html create mode 100644 Docs/types/DarknightCreeper.html create mode 100644 Docs/types/DartBoard.html create mode 100644 Docs/types/DartBoardEastAddon.html create mode 100644 Docs/types/DartBoardEastDeed.html create mode 100644 Docs/types/DartBoardSouthAddon.html create mode 100644 Docs/types/DartBoardSouthDeed.html create mode 100644 Docs/types/DartTrapCraft.html create mode 100644 Docs/types/DataItem.html create mode 100644 Docs/types/DataPath.html create mode 100644 Docs/types/DataRecord.html create mode 100644 Docs/types/DatabaseCommandQueue.html create mode 100644 Docs/types/Dates.html create mode 100644 Docs/types/DawnsMusicBox.html create mode 100644 Docs/types/DawnsMusicBoxGump.html create mode 100644 Docs/types/DawnsMusicGear.html create mode 100644 Docs/types/DawnsMusicInfo.html create mode 100644 Docs/types/DawnsMusicRarity.html create mode 100644 Docs/types/DeadWood.html create mode 100644 Docs/types/DeadlyImp.html create mode 100644 Docs/types/DeadlyPoisonPotion.html create mode 100644 Docs/types/DeathAdder.html create mode 100644 Docs/types/DeathAdderCharmTarget.html create mode 100644 Docs/types/DeathAnimation.html create mode 100644 Docs/types/DeathMoveResult.html create mode 100644 Docs/types/DeathRobe.html create mode 100644 Docs/types/DeathShroud.html create mode 100644 Docs/types/DeathStatus.html create mode 100644 Docs/types/DeathStrike.html create mode 100644 Docs/types/DeathStrikeInfo.html create mode 100644 Docs/types/DeathwatchBeetle.html create mode 100644 Docs/types/DeathwatchBeetleHatchling.html create mode 100644 Docs/types/DecayLevel.html create mode 100644 Docs/types/DecayTimer.html create mode 100644 Docs/types/DecayType.html create mode 100644 Docs/types/DecayedCorpse.html create mode 100644 Docs/types/DeceitBrazier.html create mode 100644 Docs/types/DeceitDungeonOfHorror.html create mode 100644 Docs/types/DeclareFealtyGump.html create mode 100644 Docs/types/DeclineConversation.html create mode 100644 Docs/types/DeclineTimer.html create mode 100644 Docs/types/DecoArrowShafts.html create mode 100644 Docs/types/DecoBlackmoor.html create mode 100644 Docs/types/DecoBloodspawn.html create mode 100644 Docs/types/DecoBottlesOfLiquor.html create mode 100644 Docs/types/DecoBridle.html create mode 100644 Docs/types/DecoBridle2.html create mode 100644 Docs/types/DecoBrimstone.html create mode 100644 Docs/types/DecoCards5.html create mode 100644 Docs/types/DecoCrystalBall.html create mode 100644 Docs/types/DecoDeckOfTarot.html create mode 100644 Docs/types/DecoDeckOfTarot2.html create mode 100644 Docs/types/DecoDragonsBlood.html create mode 100644 Docs/types/DecoDragonsBlood2.html create mode 100644 Docs/types/DecoEyeOfNewt.html create mode 100644 Docs/types/DecoFlower.html create mode 100644 Docs/types/DecoFlower2.html create mode 100644 Docs/types/DecoFullJar.html create mode 100644 Docs/types/DecoFullJars3.html create mode 100644 Docs/types/DecoFullJars4.html create mode 100644 Docs/types/DecoGarlic.html create mode 100644 Docs/types/DecoGarlic2.html create mode 100644 Docs/types/DecoGarlicBulb.html create mode 100644 Docs/types/DecoGarlicBulb2.html create mode 100644 Docs/types/DecoGinseng.html create mode 100644 Docs/types/DecoGinseng2.html create mode 100644 Docs/types/DecoGinsengRoot.html create mode 100644 Docs/types/DecoGinsengRoot2.html create mode 100644 Docs/types/DecoGoldIngot.html create mode 100644 Docs/types/DecoGoldIngot2.html create mode 100644 Docs/types/DecoGoldIngots.html create mode 100644 Docs/types/DecoGoldIngots2.html create mode 100644 Docs/types/DecoGoldIngots3.html create mode 100644 Docs/types/DecoGoldIngots4.html create mode 100644 Docs/types/DecoHay.html create mode 100644 Docs/types/DecoHay2.html create mode 100644 Docs/types/DecoHorseDung.html create mode 100644 Docs/types/DecoIronIngot.html create mode 100644 Docs/types/DecoIronIngot2.html create mode 100644 Docs/types/DecoIronIngots.html create mode 100644 Docs/types/DecoIronIngots2.html create mode 100644 Docs/types/DecoIronIngots3.html create mode 100644 Docs/types/DecoIronIngots4.html create mode 100644 Docs/types/DecoIronIngots5.html create mode 100644 Docs/types/DecoIronIngots6.html create mode 100644 Docs/types/DecoMagicalCrystal.html create mode 100644 Docs/types/DecoMandrake.html create mode 100644 Docs/types/DecoMandrake2.html create mode 100644 Docs/types/DecoMandrake3.html create mode 100644 Docs/types/DecoMandrakeRoot.html create mode 100644 Docs/types/DecoMandrakeRoot2.html create mode 100644 Docs/types/DecoNightshade.html create mode 100644 Docs/types/DecoNightshade2.html create mode 100644 Docs/types/DecoNightshade3.html create mode 100644 Docs/types/DecoObsidian.html create mode 100644 Docs/types/DecoPumice.html create mode 100644 Docs/types/DecoRock.html create mode 100644 Docs/types/DecoRock2.html create mode 100644 Docs/types/DecoRocks.html create mode 100644 Docs/types/DecoRocks2.html create mode 100644 Docs/types/DecoRoseOfTrinsic.html create mode 100644 Docs/types/DecoRoseOfTrinsic2.html create mode 100644 Docs/types/DecoRoseOfTrinsic3.html create mode 100644 Docs/types/DecoSilverIngot.html create mode 100644 Docs/types/DecoSilverIngot2.html create mode 100644 Docs/types/DecoSilverIngots.html create mode 100644 Docs/types/DecoSilverIngots2.html create mode 100644 Docs/types/DecoSilverIngots3.html create mode 100644 Docs/types/DecoSilverIngots4.html create mode 100644 Docs/types/DecoSilverIngots5.html create mode 100644 Docs/types/DecoSpittoon.html create mode 100644 Docs/types/DecoTarot.html create mode 100644 Docs/types/DecoTarot2.html create mode 100644 Docs/types/DecoTarot3.html create mode 100644 Docs/types/DecoTarot4.html create mode 100644 Docs/types/DecoTarot5.html create mode 100644 Docs/types/DecoTarot6.html create mode 100644 Docs/types/DecoTarot7.html create mode 100644 Docs/types/DecoTray.html create mode 100644 Docs/types/DecoTray2.html create mode 100644 Docs/types/DecoWyrmsHeart.html create mode 100644 Docs/types/DecodeMapEntry.html create mode 100644 Docs/types/Decorate.html create mode 100644 Docs/types/DecorateCommand.html create mode 100644 Docs/types/DecorateMag.html create mode 100644 Docs/types/DecorationEntry.html create mode 100644 Docs/types/DecorationEntryMag.html create mode 100644 Docs/types/DecorationList.html create mode 100644 Docs/types/DecorationListMag.html create mode 100644 Docs/types/DecorativeAxeNorth.html create mode 100644 Docs/types/DecorativeAxeWest.html create mode 100644 Docs/types/DecorativeBowNorth.html create mode 100644 Docs/types/DecorativeBowWest.html create mode 100644 Docs/types/DecorativeDAxeNorth.html create mode 100644 Docs/types/DecorativeDAxeWest.html create mode 100644 Docs/types/DecorativePlateKabuto.html create mode 100644 Docs/types/DecorativeShield.html create mode 100644 Docs/types/DecorativeShield1.html create mode 100644 Docs/types/DecorativeShield10.html create mode 100644 Docs/types/DecorativeShield11.html create mode 100644 Docs/types/DecorativeShield2.html create mode 100644 Docs/types/DecorativeShield3.html create mode 100644 Docs/types/DecorativeShield4.html create mode 100644 Docs/types/DecorativeShield5.html create mode 100644 Docs/types/DecorativeShield6.html create mode 100644 Docs/types/DecorativeShield7.html create mode 100644 Docs/types/DecorativeShield8.html create mode 100644 Docs/types/DecorativeShield9.html create mode 100644 Docs/types/DecorativeShieldDeed.html create mode 100644 Docs/types/DecorativeShieldSword1North.html create mode 100644 Docs/types/DecorativeShieldSword1West.html create mode 100644 Docs/types/DecorativeShieldSword2North.html create mode 100644 Docs/types/DecorativeShieldSword2West.html create mode 100644 Docs/types/DecorativeSwordNorth.html create mode 100644 Docs/types/DecorativeSwordWest.html create mode 100644 Docs/types/DecorativeTopiary.html create mode 100644 Docs/types/DeepSeaSerpent.html create mode 100644 Docs/types/DeerMask.html create mode 100644 Docs/types/DefAlchemy.html create mode 100644 Docs/types/DefBlacksmithy.html create mode 100644 Docs/types/DefBowFletching.html create mode 100644 Docs/types/DefCarpentry.html create mode 100644 Docs/types/DefCartography.html create mode 100644 Docs/types/DefCooking.html create mode 100644 Docs/types/DefGlassblowing.html create mode 100644 Docs/types/DefInscription.html create mode 100644 Docs/types/DefMasonry.html create mode 100644 Docs/types/DefTailoring.html create mode 100644 Docs/types/DefTinkering.html create mode 100644 Docs/types/DefaultEntry.html create mode 100644 Docs/types/DefaultSkillMod.html create mode 100644 Docs/types/DefenseMastery.html create mode 100644 Docs/types/DefenseMasteryInfo.html create mode 100644 Docs/types/DefenseTimer.html create mode 100644 Docs/types/DefensiveSpell.html create mode 100644 Docs/types/DelayCallTimer.html create mode 100644 Docs/types/DelayStateCallTimer-T-.html create mode 100644 Docs/types/DelayStateCallTimer.html create mode 100644 Docs/types/DelayTimer.html create mode 100644 Docs/types/DelayedDamageContextWrapper.html create mode 100644 Docs/types/DeleteCommand.html create mode 100644 Docs/types/DeleteRequestEventArgs.html create mode 100644 Docs/types/DeleteRequestEventHandler.html create mode 100644 Docs/types/DeleteResult.html create mode 100644 Docs/types/DeleteResultType.html create mode 100644 Docs/types/DeleteTimer.html create mode 100644 Docs/types/DeltaState.html create mode 100644 Docs/types/DemolishEntry.html create mode 100644 Docs/types/DemonForks.html create mode 100644 Docs/types/DemonKnight.html create mode 100644 Docs/types/DemonSkull.html create mode 100644 Docs/types/DescriptionAttribute.html create mode 100644 Docs/types/DesertOstard.html create mode 100644 Docs/types/DesignContext.html create mode 100644 Docs/types/DesignInsertTarget.html create mode 100644 Docs/types/DesignState.html create mode 100644 Docs/types/DesignStateDetailed.html create mode 100644 Docs/types/DesignStateGeneral.html create mode 100644 Docs/types/DetectHidden.html create mode 100644 Docs/types/DetectiveBoots.html create mode 100644 Docs/types/Devourer.html create mode 100644 Docs/types/Diamond.html create mode 100644 Docs/types/DiamondMace.html create mode 100644 Docs/types/Dices.html create mode 100644 Docs/types/DigEntry.html create mode 100644 Docs/types/DigTarget.html create mode 100644 Docs/types/DigTimer.html create mode 100644 Docs/types/DimensionalTravel.html create mode 100644 Docs/types/DireWolf.html create mode 100644 Docs/types/Direction.html create mode 100644 Docs/types/DirectionConversation.html create mode 100644 Docs/types/DirtGreenThornsEffect.html create mode 100644 Docs/types/DirtPatch.html create mode 100644 Docs/types/DirtyFrypan.html create mode 100644 Docs/types/DirtyKettle.html create mode 100644 Docs/types/DirtyPan.html create mode 100644 Docs/types/DirtyPot.html create mode 100644 Docs/types/DirtyRoundPot.html create mode 100644 Docs/types/DirtySmallPot.html create mode 100644 Docs/types/DirtySmallRoundPot.html create mode 100644 Docs/types/DisappearingRaiseSwitch.html create mode 100644 Docs/types/Disarm.html create mode 100644 Docs/types/DisarmRequestEventArgs.html create mode 100644 Docs/types/DisarmRequestEventHandler.html create mode 100644 Docs/types/DisassembleEntry.html create mode 100644 Docs/types/DisconnectedEventArgs.html create mode 100644 Docs/types/DisconnectedEventHandler.html create mode 100644 Docs/types/Discordance.html create mode 100644 Docs/types/DiscordanceInfo.html create mode 100644 Docs/types/DiscordanceTarget.html create mode 100644 Docs/types/DiseasedBark.html create mode 100644 Docs/types/DiseasedCat.html create mode 100644 Docs/types/DisguiseEntry.html create mode 100644 Docs/types/DisguiseGump.html create mode 100644 Docs/types/DisguiseKit.html create mode 100644 Docs/types/DisguisePersistance.html create mode 100644 Docs/types/DisguiseTimers.html create mode 100644 Docs/types/Dismount.html create mode 100644 Docs/types/DismountCommand.html create mode 100644 Docs/types/DismountTarget.html create mode 100644 Docs/types/DispelEvilSpell.html create mode 100644 Docs/types/DispelFieldScroll.html create mode 100644 Docs/types/DispelFieldSpell.html create mode 100644 Docs/types/DispelScroll.html create mode 100644 Docs/types/DispelSpell.html create mode 100644 Docs/types/DispellableAttribute.html create mode 100644 Docs/types/DispellableFieldAttribute.html create mode 100644 Docs/types/DisplayBuyList.html create mode 100644 Docs/types/DisplayBuyListHS.html create mode 100644 Docs/types/DisplayCache.html create mode 100644 Docs/types/DisplayContextMenu.html create mode 100644 Docs/types/DisplayEquipmentInfo.html create mode 100644 Docs/types/DisplayGump.html create mode 100644 Docs/types/DisplayGumpFast.html create mode 100644 Docs/types/DisplayGumpPacked.html create mode 100644 Docs/types/DisplayHelpTopic.html create mode 100644 Docs/types/DisplayHuePicker.html create mode 100644 Docs/types/DisplayItemListMenu.html create mode 100644 Docs/types/DisplayPaperdoll.html create mode 100644 Docs/types/DisplayProfile.html create mode 100644 Docs/types/DisplayQuestionMenu.html create mode 100644 Docs/types/DisplaySecureTrade.html create mode 100644 Docs/types/DisplaySignGump.html create mode 100644 Docs/types/DisplaySpellbook.html create mode 100644 Docs/types/DisplaySpellbookHS.html create mode 100644 Docs/types/Disrobe.html create mode 100644 Docs/types/DistinctCompiler.html create mode 100644 Docs/types/DistinctExtension.html create mode 100644 Docs/types/DisturbType.html create mode 100644 Docs/types/DisturbingPortraitAddon.html create mode 100644 Docs/types/DisturbingPortraitComponent.html create mode 100644 Docs/types/DisturbingPortraitDeed.html create mode 100644 Docs/types/DiversityOfOurLand.html create mode 100644 Docs/types/DivineCountenance.html create mode 100644 Docs/types/DivineFurySpell.html create mode 100644 Docs/types/DjinnisRing.html create mode 100644 Docs/types/DoEffect_Callback.html create mode 100644 Docs/types/DocCommandEntry.html create mode 100644 Docs/types/Docs.html create mode 100644 Docs/types/Dog.html create mode 100644 Docs/types/Dolphin.html create mode 100644 Docs/types/DolphinLeftArtifact.html create mode 100644 Docs/types/DolphinRightArtifact.html create mode 100644 Docs/types/DontOfferConversation.html create mode 100644 Docs/types/DoorFacing.html create mode 100644 Docs/types/DoorGenerator.html create mode 100644 Docs/types/DoorInfo.html create mode 100644 Docs/types/Doppleganger.html create mode 100644 Docs/types/DoubleAxe.html create mode 100644 Docs/types/DoubleBladedStaff.html create mode 100644 Docs/types/DoubleShot.html create mode 100644 Docs/types/DoubleStrike.html create mode 100644 Docs/types/Doublet.html create mode 100644 Docs/types/Dough.html create mode 100644 Docs/types/DovetailSaw.html create mode 100644 Docs/types/DragEffect.html create mode 100644 Docs/types/Dragon.html create mode 100644 Docs/types/DragonArms.html create mode 100644 Docs/types/DragonBardingDeed.html create mode 100644 Docs/types/DragonChest.html create mode 100644 Docs/types/DragonGloves.html create mode 100644 Docs/types/DragonHelm.html create mode 100644 Docs/types/DragonLegs.html create mode 100644 Docs/types/DragonNunchaku.html create mode 100644 Docs/types/DrainTimer.html create mode 100644 Docs/types/Drake.html create mode 100644 Docs/types/DrakovsJournal.html create mode 100644 Docs/types/DrawKnife.html create mode 100644 Docs/types/Drawer.html create mode 100644 Docs/types/DreadHornMane.html create mode 100644 Docs/types/DreadPirateHat.html create mode 100644 Docs/types/DreadSpider.html create mode 100644 Docs/types/Dressform.html create mode 100644 Docs/types/DriedHerbs.html create mode 100644 Docs/types/DriedOnions.html create mode 100644 Docs/types/Drums.html create mode 100644 Docs/types/DryDockResult.html create mode 100644 Docs/types/Dryad.html create mode 100644 Docs/types/DryadAllureScroll.html create mode 100644 Docs/types/DryadAppleConversation.html create mode 100644 Docs/types/DryadConversation.html create mode 100644 Docs/types/DualSaveStrategy.html create mode 100644 Docs/types/DualWield.html create mode 100644 Docs/types/DualWieldTimer.html create mode 100644 Docs/types/DullCopperElemental.html create mode 100644 Docs/types/DullCopperGranite.html create mode 100644 Docs/types/DullCopperIngot.html create mode 100644 Docs/types/DullCopperOre.html create mode 100644 Docs/types/Dummy.html create mode 100644 Docs/types/DummyAssassin.html create mode 100644 Docs/types/DummyFence.html create mode 100644 Docs/types/DummyHealer.html create mode 100644 Docs/types/DummyMace.html create mode 100644 Docs/types/DummyNox.html create mode 100644 Docs/types/DummyStun.html create mode 100644 Docs/types/DummySuper.html create mode 100644 Docs/types/DummySword.html create mode 100644 Docs/types/DummyTheif.html create mode 100644 Docs/types/DungeonRegion.html create mode 100644 Docs/types/Dupe.html create mode 100644 Docs/types/DupeTarget.html create mode 100644 Docs/types/DupreSuit.html create mode 100644 Docs/types/DupresShield.html create mode 100644 Docs/types/DuringFungiGatheringConversation.html create mode 100644 Docs/types/DuringFungiProcessConversation.html create mode 100644 Docs/types/DuringKillInfiltratorsConversation.html create mode 100644 Docs/types/DuringKillQueensConversation.html create mode 100644 Docs/types/DuringWaterGatheringConversation.html create mode 100644 Docs/types/DyeTub.html create mode 100644 Docs/types/Dyes.html create mode 100644 Docs/types/DynamicFlipingAttribute.html create mode 100644 Docs/types/DynamicFurniture.html create mode 100644 Docs/types/DynamicTeleporter.html create mode 100644 Docs/types/ECEffectType.html create mode 100644 Docs/types/Eagle.html create mode 100644 Docs/types/EarOfCorn.html create mode 100644 Docs/types/EarnGiftsConversation.html create mode 100644 Docs/types/EarnLessGiftsConversation.html create mode 100644 Docs/types/EarringBoxSet.html create mode 100644 Docs/types/EarringsOfProtection.html create mode 100644 Docs/types/EarthElemental.html create mode 100644 Docs/types/EarthElementalSpell.html create mode 100644 Docs/types/EarthquakeScroll.html create mode 100644 Docs/types/EarthquakeSpell.html create mode 100644 Docs/types/Easle.html create mode 100644 Docs/types/EasterEggs.html create mode 100644 Docs/types/EatEntry.html create mode 100644 Docs/types/EcruCitrine.html create mode 100644 Docs/types/EditEntry.html create mode 100644 Docs/types/EditSkillGump.html create mode 100644 Docs/types/EffectController.html create mode 100644 Docs/types/EffectItem.html create mode 100644 Docs/types/EffectLayer.html create mode 100644 Docs/types/EffectTimer.html create mode 100644 Docs/types/EffectTriggerType.html create mode 100644 Docs/types/EffectType.html create mode 100644 Docs/types/Effects.html create mode 100644 Docs/types/Efreet.html create mode 100644 Docs/types/EggBomb.html create mode 100644 Docs/types/EggCaseArtifact.html create mode 100644 Docs/types/Eggs.html create mode 100644 Docs/types/Eggshells.html create mode 100644 Docs/types/EjectPlayerEntry.html create mode 100644 Docs/types/ElderGazer.html create mode 100644 Docs/types/Election.html create mode 100644 Docs/types/ElectionGump.html create mode 100644 Docs/types/ElectionManagementGump.html create mode 100644 Docs/types/ElectionState.html create mode 100644 Docs/types/ElegantArmoire.html create mode 100644 Docs/types/ElegantLowTable.html create mode 100644 Docs/types/Elf.html create mode 100644 Docs/types/EliteNinja.html create mode 100644 Docs/types/ElvenBedEastAddon.html create mode 100644 Docs/types/ElvenBedEastDeed.html create mode 100644 Docs/types/ElvenBedSouthAddon.html create mode 100644 Docs/types/ElvenBedSouthDeed.html create mode 100644 Docs/types/ElvenBoots.html create mode 100644 Docs/types/ElvenCompositeLongbow.html create mode 100644 Docs/types/ElvenDarkShirt.html create mode 100644 Docs/types/ElvenDresserEastAddon.html create mode 100644 Docs/types/ElvenDresserEastDeed.html create mode 100644 Docs/types/ElvenDresserSouthAddon.html create mode 100644 Docs/types/ElvenDresserSouthDeed.html create mode 100644 Docs/types/ElvenForgeAddon.html create mode 100644 Docs/types/ElvenForgeDeed.html create mode 100644 Docs/types/ElvenGlasses.html create mode 100644 Docs/types/ElvenLoveseatEastAddon.html create mode 100644 Docs/types/ElvenLoveseatEastDeed.html create mode 100644 Docs/types/ElvenLoveseatSouthAddon.html create mode 100644 Docs/types/ElvenLoveseatSouthDeed.html create mode 100644 Docs/types/ElvenMachete.html create mode 100644 Docs/types/ElvenPants.html create mode 100644 Docs/types/ElvenQuiver.html create mode 100644 Docs/types/ElvenReadingChair.html create mode 100644 Docs/types/ElvenShirt.html create mode 100644 Docs/types/ElvenSpellblade.html create mode 100644 Docs/types/ElvenSpinningwheelEastAddon.html create mode 100644 Docs/types/ElvenSpinningwheelEastDeed.html create mode 100644 Docs/types/ElvenSpinningwheelSouthAddon.html create mode 100644 Docs/types/ElvenSpinningwheelSouthDeed.html create mode 100644 Docs/types/ElvenStoveEastAddon.html create mode 100644 Docs/types/ElvenStoveEastDeed.html create mode 100644 Docs/types/ElvenStoveSouthAddon.html create mode 100644 Docs/types/ElvenStoveSouthDeed.html create mode 100644 Docs/types/ElvenWashBasinEastAddon.html create mode 100644 Docs/types/ElvenWashBasinEastDeed.html create mode 100644 Docs/types/ElvenWashBasinSouthAddon.html create mode 100644 Docs/types/ElvenWashBasinSouthDeed.html create mode 100644 Docs/types/ElwoodDuringAutograph1Conversation.html create mode 100644 Docs/types/ElwoodDuringAutograph2Conversation.html create mode 100644 Docs/types/ElwoodDuringAutograph3Conversation.html create mode 100644 Docs/types/ElwoodDuringFishConversation.html create mode 100644 Docs/types/ElwoodDuringPainting1Conversation.html create mode 100644 Docs/types/ElwoodDuringPainting2Conversation.html create mode 100644 Docs/types/ElwoodDuringToys1Conversation.html create mode 100644 Docs/types/ElwoodDuringToys2Conversation.html create mode 100644 Docs/types/ElwoodDuringToys3Conversation.html create mode 100644 Docs/types/ElwoodMcCarrin.html create mode 100644 Docs/types/Email.html create mode 100644 Docs/types/EmbroideredOakLeafCloak.html create mode 100644 Docs/types/Emerald.html create mode 100644 Docs/types/Emino.html create mode 100644 Docs/types/EminosKatana.html create mode 100644 Docs/types/EminosKatanaChest.html create mode 100644 Docs/types/EminosUndertakingQuest.html create mode 100644 Docs/types/EmptyBentoBox.html create mode 100644 Docs/types/EmptyBookcase.html create mode 100644 Docs/types/EmptyCurvedFlaskE.html create mode 100644 Docs/types/EmptyCurvedFlaskW.html create mode 100644 Docs/types/EmptyJar.html create mode 100644 Docs/types/EmptyJars.html create mode 100644 Docs/types/EmptyJars2.html create mode 100644 Docs/types/EmptyJars3.html create mode 100644 Docs/types/EmptyJars4.html create mode 100644 Docs/types/EmptyPewterBowl.html create mode 100644 Docs/types/EmptyPewterTub.html create mode 100644 Docs/types/EmptyRibbedFlask.html create mode 100644 Docs/types/EmptyTheBowlGump.html create mode 100644 Docs/types/EmptyTimer.html create mode 100644 Docs/types/EmptyToolKit.html create mode 100644 Docs/types/EmptyToolKit2.html create mode 100644 Docs/types/EmptyVial.html create mode 100644 Docs/types/EmptyVialsWRack.html create mode 100644 Docs/types/EmptyWoodenBowl.html create mode 100644 Docs/types/EmptyWoodenTub.html create mode 100644 Docs/types/EnchantedPaints.html create mode 100644 Docs/types/EnchantedSextant.html create mode 100644 Docs/types/EnchantedSwitch.html create mode 100644 Docs/types/EnchantedTitanLegBone.html create mode 100644 Docs/types/EncodedPacketHandler.html create mode 100644 Docs/types/EncodedReader.html create mode 100644 Docs/types/End2Conversation.html create mode 100644 Docs/types/EndActionTimer.html create mode 100644 Docs/types/EndConversation.html create mode 100644 Docs/types/EndHouseCustomization.html create mode 100644 Docs/types/EndVendorBuy.html create mode 100644 Docs/types/EndVendorSell.html create mode 100644 Docs/types/EnemyOfOneSpell.html create mode 100644 Docs/types/EnergyBoltScroll.html create mode 100644 Docs/types/EnergyBoltSpell.html create mode 100644 Docs/types/EnergyFieldScroll.html create mode 100644 Docs/types/EnergyFieldSpell.html create mode 100644 Docs/types/EnergyVortex.html create mode 100644 Docs/types/EnergyVortexScroll.html create mode 100644 Docs/types/EnergyVortexSpell.html create mode 100644 Docs/types/Enhance.html create mode 100644 Docs/types/EnhanceResult.html create mode 100644 Docs/types/EnhancedBandage.html create mode 100644 Docs/types/EnragedBlackBear.html create mode 100644 Docs/types/EnragedEagle.html create mode 100644 Docs/types/EnragedHart.html create mode 100644 Docs/types/EnragedHind.html create mode 100644 Docs/types/EnragedRabbit.html create mode 100644 Docs/types/EnshroudedFigure.html create mode 100644 Docs/types/EnslavedGargoyle.html create mode 100644 Docs/types/EnterCaveConversation.html create mode 100644 Docs/types/EnterCaveObjective.html create mode 100644 Docs/types/Entity.html create mode 100644 Docs/types/Entry.html create mode 100644 Docs/types/EquipDetailsMenu.html create mode 100644 Docs/types/EquipInfoAttribute.html create mode 100644 Docs/types/EquipMenu.html create mode 100644 Docs/types/EquipUpdate.html create mode 100644 Docs/types/EquipedSkillMod.html create mode 100644 Docs/types/EquipmentInfo.html create mode 100644 Docs/types/ErrorGump.html create mode 100644 Docs/types/EscortDestinationInfo.html create mode 100644 Docs/types/EscortableMage.html create mode 100644 Docs/types/EssenceOfBattle.html create mode 100644 Docs/types/EssenceOfWindInfo.html create mode 100644 Docs/types/EssenceOfWindScroll.html create mode 100644 Docs/types/EssenceOfWindSpell.html create mode 100644 Docs/types/EtherealBeetle.html create mode 100644 Docs/types/EtherealCuSidhe.html create mode 100644 Docs/types/EtherealHiryu.html create mode 100644 Docs/types/EtherealHorse.html create mode 100644 Docs/types/EtherealKirin.html create mode 100644 Docs/types/EtherealLlama.html create mode 100644 Docs/types/EtherealMount.html create mode 100644 Docs/types/EtherealOstard.html create mode 100644 Docs/types/EtherealReptalon.html create mode 100644 Docs/types/EtherealRidgeback.html create mode 100644 Docs/types/EtherealSpell.html create mode 100644 Docs/types/EtherealSwampDragon.html create mode 100644 Docs/types/EtherealUnicorn.html create mode 100644 Docs/types/EtherealVoyageScroll.html create mode 100644 Docs/types/EtherealVoyageSpell.html create mode 100644 Docs/types/EtherealWarrior.html create mode 100644 Docs/types/Ethic.html create mode 100644 Docs/types/EthicDefinition.html create mode 100644 Docs/types/EthicalHedonism.html create mode 100644 Docs/types/EthicsPersistance.html create mode 100644 Docs/types/Ettin.html create mode 100644 Docs/types/EvalInt.html create mode 100644 Docs/types/Evasion.html create mode 100644 Docs/types/EventLog.html create mode 100644 Docs/types/EventSink.html create mode 100644 Docs/types/EventTextWriter.html create mode 100644 Docs/types/EvilEthic.html create mode 100644 Docs/types/EvilHealer.html create mode 100644 Docs/types/EvilIdolSkull.html create mode 100644 Docs/types/EvilMage.html create mode 100644 Docs/types/EvilMageLord.html create mode 100644 Docs/types/EvilOmenScroll.html create mode 100644 Docs/types/EvilOmenSpell.html create mode 100644 Docs/types/EvilWanderingHealer.html create mode 100644 Docs/types/Executioner.html create mode 100644 Docs/types/ExecutionersAxe.html create mode 100644 Docs/types/ExecutionersCap.html create mode 100644 Docs/types/Exiler.html create mode 100644 Docs/types/ExodusMinion.html create mode 100644 Docs/types/ExodusOverseer.html create mode 100644 Docs/types/ExorcismScroll.html create mode 100644 Docs/types/ExorcismSpell.html create mode 100644 Docs/types/ExpandFlag.html create mode 100644 Docs/types/Expansion.html create mode 100644 Docs/types/ExpansionInfo.html create mode 100644 Docs/types/ExpireAggressorsTimer.html create mode 100644 Docs/types/ExpireCombatantTimer.html create mode 100644 Docs/types/ExpireCriminalTimer.html create mode 100644 Docs/types/ExpirePolymorphTimer.html create mode 100644 Docs/types/ExpireTimer.html create mode 100644 Docs/types/ExplosionPotion.html create mode 100644 Docs/types/ExplosionScroll.html create mode 100644 Docs/types/ExplosionSpell.html create mode 100644 Docs/types/ExplosionTrapCraft.html create mode 100644 Docs/types/ExportCommand.html create mode 100644 Docs/types/ExtensionConstructor.html create mode 100644 Docs/types/ExtensionInfo.html create mode 100644 Docs/types/Extensions.html create mode 100644 Docs/types/EyeOfTheTravesty.html create mode 100644 Docs/types/FKEntry.html create mode 100644 Docs/types/FabledFishingNet.html create mode 100644 Docs/types/FacialHairEquipUpdate.html create mode 100644 Docs/types/FacialHairInfo.html create mode 100644 Docs/types/FacingGump.html create mode 100644 Docs/types/Faction.html create mode 100644 Docs/types/FactionBerserker.html create mode 100644 Docs/types/FactionBoardVendor.html create mode 100644 Docs/types/FactionBottleVendor.html create mode 100644 Docs/types/FactionDeathKnight.html create mode 100644 Docs/types/FactionDefinition.html create mode 100644 Docs/types/FactionDragoon.html create mode 100644 Docs/types/FactionExplosionTrap.html create mode 100644 Docs/types/FactionExplosionTrapDeed.html create mode 100644 Docs/types/FactionGasTrap.html create mode 100644 Docs/types/FactionGasTrapDeed.html create mode 100644 Docs/types/FactionGuardAI.html create mode 100644 Docs/types/FactionGump.html create mode 100644 Docs/types/FactionHenchman.html create mode 100644 Docs/types/FactionHorseVendor.html create mode 100644 Docs/types/FactionImbueGump.html create mode 100644 Docs/types/FactionItem.html create mode 100644 Docs/types/FactionItemDefinition.html create mode 100644 Docs/types/FactionKickCommand.html create mode 100644 Docs/types/FactionKickType.html create mode 100644 Docs/types/FactionKnight.html create mode 100644 Docs/types/FactionMercenary.html create mode 100644 Docs/types/FactionNecromancer.html create mode 100644 Docs/types/FactionOreVendor.html create mode 100644 Docs/types/FactionPaladin.html create mode 100644 Docs/types/FactionPersistance.html create mode 100644 Docs/types/FactionReagentVendor.html create mode 100644 Docs/types/FactionSawTrap.html create mode 100644 Docs/types/FactionSawTrapDeed.html create mode 100644 Docs/types/FactionSorceress.html create mode 100644 Docs/types/FactionSpikeTrap.html create mode 100644 Docs/types/FactionSpikeTrapDeed.html create mode 100644 Docs/types/FactionState.html create mode 100644 Docs/types/FactionStone.html create mode 100644 Docs/types/FactionStoneGump.html create mode 100644 Docs/types/FactionTrapRemovalKit.html create mode 100644 Docs/types/FactionWarHorse.html create mode 100644 Docs/types/FactionWizard.html create mode 100644 Docs/types/FameEntry.html create mode 100644 Docs/types/FanDancer.html create mode 100644 Docs/types/FanNorthArtifact.html create mode 100644 Docs/types/FanWestArtifact.html create mode 100644 Docs/types/FancyArmoire.html create mode 100644 Docs/types/FancyDrawer.html create mode 100644 Docs/types/FancyDress.html create mode 100644 Docs/types/FancyElvenTableEastAddon.html create mode 100644 Docs/types/FancyElvenTableEastDeed.html create mode 100644 Docs/types/FancyElvenTableSouthAddon.html create mode 100644 Docs/types/FancyElvenTableSouthDeed.html create mode 100644 Docs/types/FancyShirt.html create mode 100644 Docs/types/FancyWindChimes.html create mode 100644 Docs/types/FancyWoodenChairCushion.html create mode 100644 Docs/types/FangOfRactus.html create mode 100644 Docs/types/FarmableCabbage.html create mode 100644 Docs/types/FarmableCarrot.html create mode 100644 Docs/types/FarmableCotton.html create mode 100644 Docs/types/FarmableCrop.html create mode 100644 Docs/types/FarmableFlax.html create mode 100644 Docs/types/FarmableLettuce.html create mode 100644 Docs/types/FarmableOnion.html create mode 100644 Docs/types/FarmablePumpkin.html create mode 100644 Docs/types/FarmableTurnip.html create mode 100644 Docs/types/FarmableWheat.html create mode 100644 Docs/types/Farmer.html create mode 100644 Docs/types/FastAStarAlgorithm.html create mode 100644 Docs/types/FastWalkEventArgs.html create mode 100644 Docs/types/FastWalkEventHandler.html create mode 100644 Docs/types/Fastwalk.html create mode 100644 Docs/types/Feather.html create mode 100644 Docs/types/FeatheredHat.html create mode 100644 Docs/types/FeatureFlags.html create mode 100644 Docs/types/FeebleWand.html create mode 100644 Docs/types/FeeblemindScroll.html create mode 100644 Docs/types/FeeblemindSpell.html create mode 100644 Docs/types/Feint.html create mode 100644 Docs/types/FeintTimer.html create mode 100644 Docs/types/FemaleElvenPlateChest.html create mode 100644 Docs/types/FemaleElvenRobe.html create mode 100644 Docs/types/FemaleKimono.html create mode 100644 Docs/types/FemaleLeafChest.html create mode 100644 Docs/types/FemaleLeatherChest.html create mode 100644 Docs/types/FemalePlateChest.html create mode 100644 Docs/types/FemaleStuddedChest.html create mode 100644 Docs/types/FerelTreefellow.html create mode 100644 Docs/types/Ferret.html create mode 100644 Docs/types/FerretFormTalisman.html create mode 100644 Docs/types/FertileDirt.html create mode 100644 Docs/types/FestiveCactus.html create mode 100644 Docs/types/FetchAbraxusScrollObjective.html create mode 100644 Docs/types/FetidEssence.html create mode 100644 Docs/types/FewReagentsConversation.html create mode 100644 Docs/types/FeyLeggings.html create mode 100644 Docs/types/FieldStoneHouseDeed.html create mode 100644 Docs/types/FierceDragon.html create mode 100644 Docs/types/FifthTrialIntroConversation.html create mode 100644 Docs/types/FifthTrialIntroObjective.html create mode 100644 Docs/types/FifthTrialReturnConversation.html create mode 100644 Docs/types/FifthTrialReturnObjective.html create mode 100644 Docs/types/FightMode.html create mode 100644 Docs/types/FileCommitCallback.html create mode 100644 Docs/types/FileLogger.html create mode 100644 Docs/types/FileOperations.html create mode 100644 Docs/types/FileQueue.html create mode 100644 Docs/types/FillableBarrel.html create mode 100644 Docs/types/FillableBvrge.html create mode 100644 Docs/types/FillableContainer.html create mode 100644 Docs/types/FillableContent.html create mode 100644 Docs/types/FillableContentType.html create mode 100644 Docs/types/FillableEntry.html create mode 100644 Docs/types/FillableLargeCrate.html create mode 100644 Docs/types/FillableMetalBox.html create mode 100644 Docs/types/FillableMetalChest.html create mode 100644 Docs/types/FillableMetalGoldenChest.html create mode 100644 Docs/types/FillableSmallCrate.html create mode 100644 Docs/types/FillableWoodenBox.html create mode 100644 Docs/types/FillableWoodenChest.html create mode 100644 Docs/types/FinanceGump.html create mode 100644 Docs/types/FindAlbertaObjective.html create mode 100644 Docs/types/FindApprenticeObjective.html create mode 100644 Docs/types/FindBankObjective.html create mode 100644 Docs/types/FindCallingScrollObjective.html create mode 100644 Docs/types/FindCityOfLightObjective.html create mode 100644 Docs/types/FindCrystalCaveObjective.html create mode 100644 Docs/types/FindDryadObjective.html create mode 100644 Docs/types/FindEminoBeginObjective.html create mode 100644 Docs/types/FindGabrielObjective.html create mode 100644 Docs/types/FindGrizeldaAboutMurderObjective.html create mode 100644 Docs/types/FindHaochiObjective.html create mode 100644 Docs/types/FindHorusAboutRewardObjective.html create mode 100644 Docs/types/FindIngredientObjective.html create mode 100644 Docs/types/FindMaabusCorpseObjective.html create mode 100644 Docs/types/FindMaabusTombObjective.html create mode 100644 Docs/types/FindMardothAboutKronusObjective.html create mode 100644 Docs/types/FindMardothAboutVaultObjective.html create mode 100644 Docs/types/FindMardothEndObjective.html create mode 100644 Docs/types/FindSchmendrickObjective.html create mode 100644 Docs/types/FindSheetMusicObjective.html create mode 100644 Docs/types/FindTomasObjective.html create mode 100644 Docs/types/FindUzeraanAboutReportObjective.html create mode 100644 Docs/types/FindUzeraanBeginObjective.html create mode 100644 Docs/types/FindUzeraanFirstTaskObjective.html create mode 100644 Docs/types/FindVaultOfSecretsObjective.html create mode 100644 Docs/types/FindWellOfTearsObjective.html create mode 100644 Docs/types/FindZeefzorpulObjective.html create mode 100644 Docs/types/FindZoelConversation.html create mode 100644 Docs/types/FindZoelObjective.html create mode 100644 Docs/types/FinishedWoodenChest.html create mode 100644 Docs/types/FireBeetle.html create mode 100644 Docs/types/FireColumnAddon.html create mode 100644 Docs/types/FireColumnTrap.html create mode 100644 Docs/types/FireElemental.html create mode 100644 Docs/types/FireElementalSpell.html create mode 100644 Docs/types/FireFieldItem.html create mode 100644 Docs/types/FireFieldScroll.html create mode 100644 Docs/types/FireFieldSpell.html create mode 100644 Docs/types/FireGargoyle.html create mode 100644 Docs/types/FireHorn.html create mode 100644 Docs/types/FireRuby.html create mode 100644 Docs/types/FireSteed.html create mode 100644 Docs/types/FireballScroll.html create mode 100644 Docs/types/FireballSpell.html create mode 100644 Docs/types/FireballWand.html create mode 100644 Docs/types/Firebomb.html create mode 100644 Docs/types/FirebombField.html create mode 100644 Docs/types/Firewall.html create mode 100644 Docs/types/FirewallCommand.html create mode 100644 Docs/types/FireworksWand.html create mode 100644 Docs/types/FirstHit.html create mode 100644 Docs/types/FirstKillObjective.html create mode 100644 Docs/types/FirstTrialIntroConversation.html create mode 100644 Docs/types/FirstTrialIntroObjective.html create mode 100644 Docs/types/FirstTrialKillConversation.html create mode 100644 Docs/types/FirstTrialKillObjective.html create mode 100644 Docs/types/FirstTrialReturnObjective.html create mode 100644 Docs/types/Fish.html create mode 100644 Docs/types/FishPearlsObjective.html create mode 100644 Docs/types/FishSteak.html create mode 100644 Docs/types/FisherGuildmaster.html create mode 100644 Docs/types/Fisherman.html create mode 100644 Docs/types/Fishing.html create mode 100644 Docs/types/FishingPole.html create mode 100644 Docs/types/Fists.html create mode 100644 Docs/types/FixColumnTimer.html create mode 100644 Docs/types/FlameSpurtTrap.html create mode 100644 Docs/types/FlameStrikeSpell.html create mode 100644 Docs/types/FlamestrikeScroll.html create mode 100644 Docs/types/FlamingHead.html create mode 100644 Docs/types/FlamingHeadDeed.html create mode 100644 Docs/types/Flax.html create mode 100644 Docs/types/FleshGolem.html create mode 100644 Docs/types/FleshRenderer.html create mode 100644 Docs/types/FleshRipper.html create mode 100644 Docs/types/FletcherTools.html create mode 100644 Docs/types/FlipCommandHandlers.html create mode 100644 Docs/types/FlipTarget.html create mode 100644 Docs/types/FlipableAddonAttribute.html create mode 100644 Docs/types/FlipableAttribute.html create mode 100644 Docs/types/FloppyHat.html create mode 100644 Docs/types/FlourMillEastAddon.html create mode 100644 Docs/types/FlourMillEastDeed.html create mode 100644 Docs/types/FlourMillSouthAddon.html create mode 100644 Docs/types/FlourMillSouthDeed.html create mode 100644 Docs/types/FlourMillStage.html create mode 100644 Docs/types/FlourSifter.html create mode 100644 Docs/types/FlowerGarland.html create mode 100644 Docs/types/FlowersArtifact.html create mode 100644 Docs/types/FluteOfRenewal.html create mode 100644 Docs/types/FocusAttack.html create mode 100644 Docs/types/FoldedSteelGlasses.html create mode 100644 Docs/types/FollowMessage.html create mode 100644 Docs/types/Food.html create mode 100644 Docs/types/FoodDecayTimer.html create mode 100644 Docs/types/FoodInfo.html create mode 100644 Docs/types/FoodType.html create mode 100644 Docs/types/FootStool.html create mode 100644 Docs/types/ForensicEvaluation.html create mode 100644 Docs/types/ForensicTarget.html create mode 100644 Docs/types/ForestOstard.html create mode 100644 Docs/types/Forge.html create mode 100644 Docs/types/ForgeAttribute.html create mode 100644 Docs/types/ForgeComponent.html create mode 100644 Docs/types/ForgedMetal.html create mode 100644 Docs/types/Fork.html create mode 100644 Docs/types/ForkLeft.html create mode 100644 Docs/types/ForkRight.html create mode 100644 Docs/types/FormalShirt.html create mode 100644 Docs/types/FortuneTeller.html create mode 100644 Docs/types/FoundationType.html create mode 100644 Docs/types/FountainAddon.html create mode 100644 Docs/types/FountainDeed.html create mode 100644 Docs/types/FountainOfLife.html create mode 100644 Docs/types/FountainOfLifeDeed.html create mode 100644 Docs/types/FourthTrialCatsConversation.html create mode 100644 Docs/types/FourthTrialCatsObjective.html create mode 100644 Docs/types/FourthTrialIntroConversation.html create mode 100644 Docs/types/FourthTrialIntroObjective.html create mode 100644 Docs/types/FourthTrialReturnObjective.html create mode 100644 Docs/types/FreeTimer.html create mode 100644 Docs/types/FrenchBread.html create mode 100644 Docs/types/FrenziedOstard.html create mode 100644 Docs/types/FrenziedWhirlwind.html create mode 100644 Docs/types/FriedEggs.html create mode 100644 Docs/types/FriendlyNameAttribute.html create mode 100644 Docs/types/Froe.html create mode 100644 Docs/types/FropozJournal.html create mode 100644 Docs/types/FrostOoze.html create mode 100644 Docs/types/FrostSpider.html create mode 100644 Docs/types/FrostTroll.html create mode 100644 Docs/types/Frostbringer.html create mode 100644 Docs/types/FrostwoodBoard.html create mode 100644 Docs/types/FrostwoodLog.html create mode 100644 Docs/types/FrozenTimer.html create mode 100644 Docs/types/FruitBasket.html create mode 100644 Docs/types/FruitPie.html create mode 100644 Docs/types/Fukiya.html create mode 100644 Docs/types/FukiyaDarts.html create mode 100644 Docs/types/FullApron.html create mode 100644 Docs/types/FullBackpackConversation.html create mode 100644 Docs/types/FullBookcase.html create mode 100644 Docs/types/FullEndConversation.html create mode 100644 Docs/types/FullVialsWRack.html create mode 100644 Docs/types/FurBoots.html create mode 100644 Docs/types/FurCape.html create mode 100644 Docs/types/FurSarong.html create mode 100644 Docs/types/FurnitureAttribute.html create mode 100644 Docs/types/FurnitureDyeTub.html create mode 100644 Docs/types/FurnitureTimer.html create mode 100644 Docs/types/FurrowsGreenThornsEffect.html create mode 100644 Docs/types/Furtrader.html create mode 100644 Docs/types/Futon.html create mode 100644 Docs/types/GMItemPacket.html create mode 100644 Docs/types/GMRobe.html create mode 100644 Docs/types/GQCount.html create mode 100644 Docs/types/GQRequest.html create mode 100644 Docs/types/GabrielAutographConversation.html create mode 100644 Docs/types/GabrielIgnoreConversation.html create mode 100644 Docs/types/GabrielNoSheetMusicConversation.html create mode 100644 Docs/types/GabrielPiete.html create mode 100644 Docs/types/GabrielSheetMusicConversation.html create mode 100644 Docs/types/GainInnInformationConversation.html create mode 100644 Docs/types/GainInnInformationObjective.html create mode 100644 Docs/types/GainKarmaConversation.html create mode 100644 Docs/types/Gaman.html create mode 100644 Docs/types/GamblingStone.html create mode 100644 Docs/types/GameGump.html create mode 100644 Docs/types/GameLoginEventArgs.html create mode 100644 Docs/types/GameLoginEventHandler.html create mode 100644 Docs/types/Gargoyle.html create mode 100644 Docs/types/GargoyleDestroyer.html create mode 100644 Docs/types/GargoyleEnforcer.html create mode 100644 Docs/types/GargoylesPickaxe.html create mode 100644 Docs/types/Garlic.html create mode 100644 Docs/types/GasTrap.html create mode 100644 Docs/types/GasTrapType.html create mode 100644 Docs/types/GateTravelScroll.html create mode 100644 Docs/types/GateTravelSpell.html create mode 100644 Docs/types/GatherFungiConversation.html create mode 100644 Docs/types/GatherFungiObjective.html create mode 100644 Docs/types/GatherWaterConversation.html create mode 100644 Docs/types/GatherWaterObjective.html create mode 100644 Docs/types/GauntletRegion.html create mode 100644 Docs/types/GauntletSpawner.html create mode 100644 Docs/types/GauntletSpawnerState.html create mode 100644 Docs/types/GauntletsOfNobility.html create mode 100644 Docs/types/Gazer.html create mode 100644 Docs/types/GazerLarva.html create mode 100644 Docs/types/Gears.html create mode 100644 Docs/types/GemType.html create mode 100644 Docs/types/GemmedCirclet.html create mode 100644 Docs/types/GenKhaldun.html create mode 100644 Docs/types/GenTeleporter.html create mode 100644 Docs/types/Generator.html create mode 100644 Docs/types/GenericBeard.html create mode 100644 Docs/types/GenericBuyInfo.html create mode 100644 Docs/types/GenericHair.html create mode 100644 Docs/types/GenericHouseDoor.html create mode 100644 Docs/types/GenericReader.html create mode 100644 Docs/types/GenericSellInfo.html create mode 100644 Docs/types/GenericWriter.html create mode 100644 Docs/types/Geometry.html create mode 100644 Docs/types/GetCommand.html create mode 100644 Docs/types/GetDaemonBloodObjective.html create mode 100644 Docs/types/GetDaemonBoneObjective.html create mode 100644 Docs/types/GetRewardObjective.html create mode 100644 Docs/types/GetSheetMusicConversation.html create mode 100644 Docs/types/GetTypeCommand.html create mode 100644 Docs/types/GhostShipAnchor.html create mode 100644 Docs/types/Ghoul.html create mode 100644 Docs/types/GiantBlackWidow.html create mode 100644 Docs/types/GiantIceWorm.html create mode 100644 Docs/types/GiantRat.html create mode 100644 Docs/types/GiantSerpent.html create mode 100644 Docs/types/GiantSpider.html create mode 100644 Docs/types/GiantSpikeTrap.html create mode 100644 Docs/types/GiantToad.html create mode 100644 Docs/types/GiantWeb1.html create mode 100644 Docs/types/GiantWeb2.html create mode 100644 Docs/types/GiantWeb3.html create mode 100644 Docs/types/GiantWeb4.html create mode 100644 Docs/types/GiantWeb5.html create mode 100644 Docs/types/GiantWeb6.html create mode 100644 Docs/types/Gibberling.html create mode 100644 Docs/types/GiftBox.html create mode 100644 Docs/types/GiftBoxAngel.html create mode 100644 Docs/types/GiftBoxCube.html create mode 100644 Docs/types/GiftBoxCylinder.html create mode 100644 Docs/types/GiftBoxHues.html create mode 100644 Docs/types/GiftBoxNeon.html create mode 100644 Docs/types/GiftBoxOctogon.html create mode 100644 Docs/types/GiftBoxRectangle.html create mode 100644 Docs/types/GiftGiver.html create mode 100644 Docs/types/GiftGiving.html create mode 100644 Docs/types/GiftOfLifeScroll.html create mode 100644 Docs/types/GiftOfLifeSpell.html create mode 100644 Docs/types/GiftOfRenewalInfo.html create mode 100644 Docs/types/GiftOfRenewalScroll.html create mode 100644 Docs/types/GiftOfRenewalSpell.html create mode 100644 Docs/types/GiftResult.html create mode 100644 Docs/types/GildedDress.html create mode 100644 Docs/types/GildedWoodenChest.html create mode 100644 Docs/types/GingerBreadCookie.html create mode 100644 Docs/types/GingerBreadHouseAddon.html create mode 100644 Docs/types/GingerBreadHouseDeed.html create mode 100644 Docs/types/Ginseng.html create mode 100644 Docs/types/GiveEminoSwordConversation.html create mode 100644 Docs/types/GiveEminoSwordObjective.html create mode 100644 Docs/types/GiveZoelNoteConversation.html create mode 100644 Docs/types/GiveZoelNoteObjective.html create mode 100644 Docs/types/GlacialStaff.html create mode 100644 Docs/types/GladiatorsCollar.html create mode 100644 Docs/types/Glass.html create mode 100644 Docs/types/GlassBottle.html create mode 100644 Docs/types/GlassMug.html create mode 100644 Docs/types/Glassblower.html create mode 100644 Docs/types/GlassblowingBook.html create mode 100644 Docs/types/GlobalCommandImplementor.html create mode 100644 Docs/types/GlobalLightLevel.html create mode 100644 Docs/types/GlobalTownCrierEntryList.html create mode 100644 Docs/types/Globe.html create mode 100644 Docs/types/GlovesOfThePugilist.html create mode 100644 Docs/types/GlovesOfTheSun.html create mode 100644 Docs/types/GnarledStaff.html create mode 100644 Docs/types/GoGump.html create mode 100644 Docs/types/Goat.html create mode 100644 Docs/types/Goatee.html create mode 100644 Docs/types/Goblet.html create mode 100644 Docs/types/GodModeReply.html create mode 100644 Docs/types/Gold.html create mode 100644 Docs/types/GoldBeadNecklace.html create mode 100644 Docs/types/GoldBracelet.html create mode 100644 Docs/types/GoldBricks.html create mode 100644 Docs/types/GoldEarrings.html create mode 100644 Docs/types/GoldGranite.html create mode 100644 Docs/types/GoldIngot.html create mode 100644 Docs/types/GoldNecklace.html create mode 100644 Docs/types/GoldOre.html create mode 100644 Docs/types/GoldRing.html create mode 100644 Docs/types/GoldWire.html create mode 100644 Docs/types/GoldenDecorativeRugAddon.html create mode 100644 Docs/types/GoldenDecorativeRugDeed.html create mode 100644 Docs/types/GoldenElemental.html create mode 100644 Docs/types/GoldenSkull.html create mode 100644 Docs/types/Golem.html create mode 100644 Docs/types/GolemController.html create mode 100644 Docs/types/GolemCrafter.html create mode 100644 Docs/types/GoodiesTimer.html create mode 100644 Docs/types/GoreFiend.html create mode 100644 Docs/types/Gorilla.html create mode 100644 Docs/types/GozaMatEastAddon.html create mode 100644 Docs/types/GozaMatEastDeed.html create mode 100644 Docs/types/GozaMatSouthAddon.html create mode 100644 Docs/types/GozaMatSouthDeed.html create mode 100644 Docs/types/Gram.html create mode 100644 Docs/types/GrammarOfOrcish.html create mode 100644 Docs/types/GrandGrimoire.html create mode 100644 Docs/types/Granite.html create mode 100644 Docs/types/GrantGuildTitleGump.html create mode 100644 Docs/types/Grapes.html create mode 100644 Docs/types/GraveDust.html create mode 100644 Docs/types/GrayBrickFireplaceEastAddon.html create mode 100644 Docs/types/GrayBrickFireplaceEastDeed.html create mode 100644 Docs/types/GrayBrickFireplaceSouthAddon.html create mode 100644 Docs/types/GrayBrickFireplaceSouthDeed.html create mode 100644 Docs/types/GreatHart.html create mode 100644 Docs/types/GreaterAgilityPotion.html create mode 100644 Docs/types/GreaterConflagrationPotion.html create mode 100644 Docs/types/GreaterConfusionBlastPotion.html create mode 100644 Docs/types/GreaterCurePotion.html create mode 100644 Docs/types/GreaterDragon.html create mode 100644 Docs/types/GreaterExplosionPotion.html create mode 100644 Docs/types/GreaterHealPotion.html create mode 100644 Docs/types/GreaterHealScroll.html create mode 100644 Docs/types/GreaterHealSpell.html create mode 100644 Docs/types/GreaterHealWand.html create mode 100644 Docs/types/GreaterMongbat.html create mode 100644 Docs/types/GreaterPoisonPotion.html create mode 100644 Docs/types/GreaterStrengthPotion.html create mode 100644 Docs/types/GreenAcres.html create mode 100644 Docs/types/GreenBeaker.html create mode 100644 Docs/types/GreenBottle.html create mode 100644 Docs/types/GreenCurvedFlask.html create mode 100644 Docs/types/GreenDriedFlowers.html create mode 100644 Docs/types/GreenGourd.html create mode 100644 Docs/types/GreenMarbleFloor.html create mode 100644 Docs/types/GreenNinjaQuestTeleporter.html create mode 100644 Docs/types/GreenScales.html create mode 100644 Docs/types/GreenStocking.html create mode 100644 Docs/types/GreenTea.html create mode 100644 Docs/types/GreenTeaBasket.html create mode 100644 Docs/types/GreenThorns.html create mode 100644 Docs/types/GreenThornsEffect.html create mode 100644 Docs/types/GreenThornsSHTeleporter.html create mode 100644 Docs/types/GreyFlagstones.html create mode 100644 Docs/types/GreyMarbleFloor.html create mode 100644 Docs/types/GreySlateFloor.html create mode 100644 Docs/types/GreyWolf.html create mode 100644 Docs/types/GrimmochDrummel.html create mode 100644 Docs/types/GrimmochJournal1.html create mode 100644 Docs/types/GrimmochJournal11.html create mode 100644 Docs/types/GrimmochJournal14.html create mode 100644 Docs/types/GrimmochJournal17.html create mode 100644 Docs/types/GrimmochJournal2.html create mode 100644 Docs/types/GrimmochJournal23.html create mode 100644 Docs/types/GrimmochJournal3.html create mode 100644 Docs/types/GrimmochJournal6.html create mode 100644 Docs/types/GrimmochJournal7.html create mode 100644 Docs/types/Grizelda.html create mode 100644 Docs/types/GrizzledBones.html create mode 100644 Docs/types/GrizzledMare.html create mode 100644 Docs/types/GrizzledMareStatuette.html create mode 100644 Docs/types/GrizzlyBear.html create mode 100644 Docs/types/GroupComparer.html create mode 100644 Docs/types/GruesomeStandardArtifact.html create mode 100644 Docs/types/GuantletsOfAnger.html create mode 100644 Docs/types/GuardAI.html create mode 100644 Docs/types/GuardDefinition.html create mode 100644 Docs/types/GuardList.html create mode 100644 Docs/types/GuardTimer.html create mode 100644 Docs/types/GuardedRegion.html create mode 100644 Docs/types/Guardian.html create mode 100644 Docs/types/GuardianBarrier.html create mode 100644 Docs/types/GuideToGuilds.html create mode 100644 Docs/types/Guild.html create mode 100644 Docs/types/GuildAbbrvPrompt.html create mode 100644 Docs/types/GuildAcceptWarGump.html create mode 100644 Docs/types/GuildAdminCandidatesGump.html create mode 100644 Docs/types/GuildAdvancedSearchGump.html create mode 100644 Docs/types/GuildCandidatesGump.html create mode 100644 Docs/types/GuildChangeTypeGump.html create mode 100644 Docs/types/GuildCharterGump.html create mode 100644 Docs/types/GuildCharterPrompt.html create mode 100644 Docs/types/GuildCompareStatus.html create mode 100644 Docs/types/GuildDeclarePeaceGump.html create mode 100644 Docs/types/GuildDeclareWarGump.html create mode 100644 Docs/types/GuildDeclareWarPrompt.html create mode 100644 Docs/types/GuildDeed.html create mode 100644 Docs/types/GuildDiplomacyGump.html create mode 100644 Docs/types/GuildDismissGump.html create mode 100644 Docs/types/GuildDisplayType.html create mode 100644 Docs/types/GuildEntry.html create mode 100644 Docs/types/GuildGump.html create mode 100644 Docs/types/GuildGumpRequestArgs.html create mode 100644 Docs/types/GuildGumpRequestHandler.html create mode 100644 Docs/types/GuildHouse.html create mode 100644 Docs/types/GuildInfoGump.html create mode 100644 Docs/types/GuildInvitationRequest.html create mode 100644 Docs/types/GuildListGump.html create mode 100644 Docs/types/GuildMemberInfoGump.html create mode 100644 Docs/types/GuildMobileListGump.html create mode 100644 Docs/types/GuildNamePrompt.html create mode 100644 Docs/types/GuildPropsTarget.html create mode 100644 Docs/types/GuildRecruitTarget.html create mode 100644 Docs/types/GuildRejectWarGump.html create mode 100644 Docs/types/GuildRescindDeclarationGump.html create mode 100644 Docs/types/GuildRosterGump.html create mode 100644 Docs/types/GuildStatus.html create mode 100644 Docs/types/GuildTeleporter.html create mode 100644 Docs/types/GuildTitlePrompt.html create mode 100644 Docs/types/GuildType.html create mode 100644 Docs/types/GuildWarAdminGump.html create mode 100644 Docs/types/GuildWarGump.html create mode 100644 Docs/types/GuildWebsitePrompt.html create mode 100644 Docs/types/GuildmasterGump.html create mode 100644 Docs/types/Guildstone.html create mode 100644 Docs/types/GuildstoneDeed.html create mode 100644 Docs/types/Guillotine.html create mode 100644 Docs/types/GuillotineAddon.html create mode 100644 Docs/types/GuillotineComponent.html create mode 100644 Docs/types/GuillotineDeed.html create mode 100644 Docs/types/Gump.html create mode 100644 Docs/types/GumpAlphaRegion.html create mode 100644 Docs/types/GumpBackground.html create mode 100644 Docs/types/GumpButton.html create mode 100644 Docs/types/GumpButtonType.html create mode 100644 Docs/types/GumpCheck.html create mode 100644 Docs/types/GumpEntry.html create mode 100644 Docs/types/GumpGroup.html create mode 100644 Docs/types/GumpHtml.html create mode 100644 Docs/types/GumpHtmlLocalized.html create mode 100644 Docs/types/GumpHtmlLocalizedType.html create mode 100644 Docs/types/GumpImage.html create mode 100644 Docs/types/GumpImageTileButton.html create mode 100644 Docs/types/GumpImageTiled.html create mode 100644 Docs/types/GumpItem.html create mode 100644 Docs/types/GumpLabel.html create mode 100644 Docs/types/GumpLabelCropped.html create mode 100644 Docs/types/GumpPage.html create mode 100644 Docs/types/GumpProfile.html create mode 100644 Docs/types/GumpRadio.html create mode 100644 Docs/types/GumpTextEntry.html create mode 100644 Docs/types/GumpTextEntryLimited.html create mode 100644 Docs/types/GumpTimer.html create mode 100644 Docs/types/GumpTooltip.html create mode 100644 Docs/types/GumpType.html create mode 100644 Docs/types/GwennosHarp.html create mode 100644 Docs/types/Gypsy.html create mode 100644 Docs/types/GypsyAnimalTrainer.html create mode 100644 Docs/types/GypsyBanker.html create mode 100644 Docs/types/GypsyMaiden.html create mode 100644 Docs/types/HagApprenticeCorpse.html create mode 100644 Docs/types/HagCauldron.html create mode 100644 Docs/types/HagDuringCorpseSearchConversation.html create mode 100644 Docs/types/HagDuringImpSearchConversation.html create mode 100644 Docs/types/HagDuringIngredientsConversation.html create mode 100644 Docs/types/HagStew.html create mode 100644 Docs/types/Hair.html create mode 100644 Docs/types/HairDye.html create mode 100644 Docs/types/HairDyeEntry.html create mode 100644 Docs/types/HairDyeGump.html create mode 100644 Docs/types/HairEquipUpdate.html create mode 100644 Docs/types/HairInfo.html create mode 100644 Docs/types/HairOrBeard.html create mode 100644 Docs/types/HairRestylingDeed.html create mode 100644 Docs/types/HairStylist.html create mode 100644 Docs/types/HairstylistBuyGump.html create mode 100644 Docs/types/HairstylistBuyInfo.html create mode 100644 Docs/types/Hakama.html create mode 100644 Docs/types/HakamaShita.html create mode 100644 Docs/types/Halberd.html create mode 100644 Docs/types/HalfApron.html create mode 100644 Docs/types/HalfEmptyJar.html create mode 100644 Docs/types/HalfEmptyJars.html create mode 100644 Docs/types/HallwayWalkConversation.html create mode 100644 Docs/types/HallwayWalkObjective.html create mode 100644 Docs/types/Ham.html create mode 100644 Docs/types/Hammer.html create mode 100644 Docs/types/HammerPick.html create mode 100644 Docs/types/HangingAxesAddon.html create mode 100644 Docs/types/HangingAxesDeed.html create mode 100644 Docs/types/HangingLantern.html create mode 100644 Docs/types/HangingSkeleton.html create mode 100644 Docs/types/HangingSkeletonDeed.html create mode 100644 Docs/types/HangingSwordsAddon.html create mode 100644 Docs/types/HangingSwordsDeed.html create mode 100644 Docs/types/HangoverCure.html create mode 100644 Docs/types/HanzosBow.html create mode 100644 Docs/types/Haochi.html create mode 100644 Docs/types/HaochisGuardsman.html create mode 100644 Docs/types/HaochisKatana.html create mode 100644 Docs/types/HaochisKatanaGenerator.html create mode 100644 Docs/types/HaochisTreasureChest.html create mode 100644 Docs/types/HaochisTrialsQuest.html create mode 100644 Docs/types/HarborMaster.html create mode 100644 Docs/types/HardwareInfo.html create mode 100644 Docs/types/HarmScroll.html create mode 100644 Docs/types/HarmSpell.html create mode 100644 Docs/types/HarmWand.html create mode 100644 Docs/types/Harp.html create mode 100644 Docs/types/Harpy.html create mode 100644 Docs/types/Harrower.html create mode 100644 Docs/types/HarrowerGate.html create mode 100644 Docs/types/HarrowerTentacles.html create mode 100644 Docs/types/HarvestBank.html create mode 100644 Docs/types/HarvestDefinition.html create mode 100644 Docs/types/HarvestResource.html create mode 100644 Docs/types/HarvestSoundTimer.html create mode 100644 Docs/types/HarvestSystem.html create mode 100644 Docs/types/HarvestTarget.html create mode 100644 Docs/types/HarvestTimer.html create mode 100644 Docs/types/HarvestVein.html create mode 100644 Docs/types/HatOfTheMagi.html create mode 100644 Docs/types/Hatchet.html create mode 100644 Docs/types/HaunterMirrorAddon.html create mode 100644 Docs/types/HaunterMirrorComponent.html create mode 100644 Docs/types/HaunterMirrorDeed.html create mode 100644 Docs/types/Head.html create mode 100644 Docs/types/HeadType.html create mode 100644 Docs/types/HeadlessOne.html create mode 100644 Docs/types/HealConversation.html create mode 100644 Docs/types/HealPotion.html create mode 100644 Docs/types/HealScroll.html create mode 100644 Docs/types/HealSpell.html create mode 100644 Docs/types/HealWand.html create mode 100644 Docs/types/Healer.html create mode 100644 Docs/types/HealerAI.html create mode 100644 Docs/types/HealerCamp.html create mode 100644 Docs/types/HealerGuildmaster.html create mode 100644 Docs/types/HealthbarPoison.html create mode 100644 Docs/types/HealthbarYellow.html create mode 100644 Docs/types/HeartOfTheLion.html create mode 100644 Docs/types/HearthOfHomeFire.html create mode 100644 Docs/types/HearthOfHomeFireDeed.html create mode 100644 Docs/types/HeartwoodBoard.html create mode 100644 Docs/types/HeartwoodLog.html create mode 100644 Docs/types/HeaterShield.html create mode 100644 Docs/types/HeatingStand.html create mode 100644 Docs/types/HeaveTimer.html create mode 100644 Docs/types/HeavyCrossbow.html create mode 100644 Docs/types/HeavyPlateJingasa.html create mode 100644 Docs/types/HellCat.html create mode 100644 Docs/types/HellHound.html create mode 100644 Docs/types/HellSteed.html create mode 100644 Docs/types/HelmOfInsight.html create mode 100644 Docs/types/HelmOfSwiftness.html create mode 100644 Docs/types/Helmet.html create mode 100644 Docs/types/HelpGump.html create mode 100644 Docs/types/HelpInfo.html create mode 100644 Docs/types/HelpRequestEventArgs.html create mode 100644 Docs/types/HelpRequestEventHandler.html create mode 100644 Docs/types/Henchman.html create mode 100644 Docs/types/Herbalist.html create mode 100644 Docs/types/HerdingTarget.html create mode 100644 Docs/types/HeritageToken.html create mode 100644 Docs/types/HeritageTokenGump.html create mode 100644 Docs/types/HeroEthic.html create mode 100644 Docs/types/HiddenFigure.html create mode 100644 Docs/types/HideChest.html create mode 100644 Docs/types/HideCommand.html create mode 100644 Docs/types/HideFemaleChest.html create mode 100644 Docs/types/HideGloves.html create mode 100644 Docs/types/HideGorget.html create mode 100644 Docs/types/HidePants.html create mode 100644 Docs/types/HidePauldrons.html create mode 100644 Docs/types/HideType.html create mode 100644 Docs/types/Hides.html create mode 100644 Docs/types/Hiding.html create mode 100644 Docs/types/Hind.html create mode 100644 Docs/types/Hinge.html create mode 100644 Docs/types/HintItem.html create mode 100644 Docs/types/Hiryu.html create mode 100644 Docs/types/HitLower.html create mode 100644 Docs/types/HitsTimer.html create mode 100644 Docs/types/Hold.html create mode 100644 Docs/types/HolidayBell.html create mode 100644 Docs/types/HolidayTree.html create mode 100644 Docs/types/HolidayTreeChoiceGump.html create mode 100644 Docs/types/HolidayTreeDeed.html create mode 100644 Docs/types/HolidayTreeType.html create mode 100644 Docs/types/HollowPrism.html create mode 100644 Docs/types/HolyBlade.html create mode 100644 Docs/types/HolyFamiliar.html create mode 100644 Docs/types/HolyItem.html create mode 100644 Docs/types/HolyKnightsBreastplate.html create mode 100644 Docs/types/HolyLightSpell.html create mode 100644 Docs/types/HolyMage.html create mode 100644 Docs/types/HolySense.html create mode 100644 Docs/types/HolyShield.html create mode 100644 Docs/types/HolySteed.html create mode 100644 Docs/types/HolySword.html create mode 100644 Docs/types/HolyWord.html create mode 100644 Docs/types/HoneydewMelon.html create mode 100644 Docs/types/HonorCandle.html create mode 100644 Docs/types/HonorContext.html create mode 100644 Docs/types/HonorSelf.html create mode 100644 Docs/types/HonorVirtue.html create mode 100644 Docs/types/HonorableExecution.html create mode 100644 Docs/types/HonorableExecutionInfo.html create mode 100644 Docs/types/HonorableSwords.html create mode 100644 Docs/types/HoodedShroudOfShadows.html create mode 100644 Docs/types/HordeMinion.html create mode 100644 Docs/types/HordeMinionFamiliar.html create mode 100644 Docs/types/HornOfRetreat.html create mode 100644 Docs/types/HornOfRetreatMoongate.html create mode 100644 Docs/types/HornedHides.html create mode 100644 Docs/types/HornedLeather.html create mode 100644 Docs/types/HornedTribalMask.html create mode 100644 Docs/types/HorrificBeastScroll.html create mode 100644 Docs/types/HorrificBeastSpell.html create mode 100644 Docs/types/Horse.html create mode 100644 Docs/types/HorseBreederGump.html create mode 100644 Docs/types/HorseShoes.html create mode 100644 Docs/types/Horus.html create mode 100644 Docs/types/HorusConversation.html create mode 100644 Docs/types/HorusRewardConversation.html create mode 100644 Docs/types/Hourglass.html create mode 100644 Docs/types/HourglassAni.html create mode 100644 Docs/types/HouseAccessTarget.html create mode 100644 Docs/types/HouseBanTarget.html create mode 100644 Docs/types/HouseComparer.html create mode 100644 Docs/types/HouseDeed.html create mode 100644 Docs/types/HouseDemolishGump.html create mode 100644 Docs/types/HouseFoundation.html create mode 100644 Docs/types/HouseFriendTarget.html create mode 100644 Docs/types/HouseGump.html create mode 100644 Docs/types/HouseGumpAOS.html create mode 100644 Docs/types/HouseGumpPageAOS.html create mode 100644 Docs/types/HouseKickTarget.html create mode 100644 Docs/types/HouseLadderAddon.html create mode 100644 Docs/types/HouseLadderDeed.html create mode 100644 Docs/types/HouseListGump.html create mode 100644 Docs/types/HouseOwnerTarget.html create mode 100644 Docs/types/HousePlacement.html create mode 100644 Docs/types/HousePlacementCategoryGump.html create mode 100644 Docs/types/HousePlacementEntry.html create mode 100644 Docs/types/HousePlacementListGump.html create mode 100644 Docs/types/HousePlacementResult.html create mode 100644 Docs/types/HousePlacementTarget.html create mode 100644 Docs/types/HousePlacementTool.html create mode 100644 Docs/types/HouseRaffleDeed.html create mode 100644 Docs/types/HouseRaffleManagementGump.html create mode 100644 Docs/types/HouseRaffleRegion.html create mode 100644 Docs/types/HouseRaffleState.html create mode 100644 Docs/types/HouseRaffleStone.html create mode 100644 Docs/types/HouseRegion.html create mode 100644 Docs/types/HouseRemoveGump.html create mode 100644 Docs/types/HouseSign.html create mode 100644 Docs/types/HouseTeleporter.html create mode 100644 Docs/types/HouseTransferGump.html create mode 100644 Docs/types/HtmlRenderer.html create mode 100644 Docs/types/HueAttribute.html create mode 100644 Docs/types/HuePicker.html create mode 100644 Docs/types/HuedEffect.html create mode 100644 Docs/types/Human.html create mode 100644 Docs/types/HungerChangedEventArgs.html create mode 100644 Docs/types/HungerChangedEventHandler.html create mode 100644 Docs/types/HuntersHeaddress.html create mode 100644 Docs/types/IAccount.html create mode 100644 Docs/types/IAddon.html create mode 100644 Docs/types/IArcaneEquip.html create mode 100644 Docs/types/IAxe.html create mode 100644 Docs/types/IBuyItemInfo.html create mode 100644 Docs/types/ICarvable.html create mode 100644 Docs/types/IChopable.html create mode 100644 Docs/types/ICommodity.html create mode 100644 Docs/types/ICompressor.html create mode 100644 Docs/types/ICondition.html create mode 100644 Docs/types/IConditional.html create mode 100644 Docs/types/ICraftable.html create mode 100644 Docs/types/IDWand.html create mode 100644 Docs/types/IDevourer.html create mode 100644 Docs/types/IDurability.html create mode 100644 Docs/types/IDyable.html create mode 100644 Docs/types/IEntity.html create mode 100644 Docs/types/IEntityEntry.html create mode 100644 Docs/types/IFactionItem.html create mode 100644 Docs/types/IFirewallEntry.html create mode 100644 Docs/types/IFlourMill.html create mode 100644 Docs/types/IGumpWriter.html create mode 100644 Docs/types/IHSFlags.html create mode 100644 Docs/types/IHasQuantity.html create mode 100644 Docs/types/IHonorTarget.html create mode 100644 Docs/types/IHued.html create mode 100644 Docs/types/ILockable.html create mode 100644 Docs/types/ILockpickable.html create mode 100644 Docs/types/ILoom.html create mode 100644 Docs/types/IMenu.html create mode 100644 Docs/types/IMount.html create mode 100644 Docs/types/IMountItem.html create mode 100644 Docs/types/IMovementImpl.html create mode 100644 Docs/types/INativeReader.html create mode 100644 Docs/types/INinjaAmmo.html create mode 100644 Docs/types/INinjaWeapon.html create mode 100644 Docs/types/IPFirewallEntry.html create mode 100644 Docs/types/IPLimiter.html create mode 100644 Docs/types/IPacketEncoder.html create mode 100644 Docs/types/IParty.html create mode 100644 Docs/types/IPoint2D.html create mode 100644 Docs/types/IPoint3D.html create mode 100644 Docs/types/IPooledEnumerable.html create mode 100644 Docs/types/IPooledEnumerator.html create mode 100644 Docs/types/IRewardItem.html create mode 100644 Docs/types/IRewardOption.html create mode 100644 Docs/types/IScissorable.html create mode 100644 Docs/types/ISecurable.html create mode 100644 Docs/types/ISerializable.html create mode 100644 Docs/types/IShipwreckedItem.html create mode 100644 Docs/types/IShopSellInfo.html create mode 100644 Docs/types/ISlayer.html create mode 100644 Docs/types/ISpawnable.html create mode 100644 Docs/types/ISpawner.html create mode 100644 Docs/types/ISpell.html create mode 100644 Docs/types/ISpinningWheel.html create mode 100644 Docs/types/ITelekinesisable.html create mode 100644 Docs/types/ITokunoDyable.html create mode 100644 Docs/types/ITownCrierEntryList.html create mode 100644 Docs/types/ITransformationSpell.html create mode 100644 Docs/types/IUsesRemaining.html create mode 100644 Docs/types/IVendor.html create mode 100644 Docs/types/IWaterSource.html create mode 100644 Docs/types/IWeapon.html create mode 100644 Docs/types/IWearableDurability.html create mode 100644 Docs/types/IceElemental.html create mode 100644 Docs/types/IceFiend.html create mode 100644 Docs/types/IceSerpent.html create mode 100644 Docs/types/IceSnake.html create mode 100644 Docs/types/IcicleLargeEast.html create mode 100644 Docs/types/IcicleLargeSouth.html create mode 100644 Docs/types/IcicleMedEast.html create mode 100644 Docs/types/IcicleMedSouth.html create mode 100644 Docs/types/IcicleSmallEast.html create mode 100644 Docs/types/IcicleSmallSouth.html create mode 100644 Docs/types/IcyPatch.html create mode 100644 Docs/types/IdleTimer.html create mode 100644 Docs/types/IdolOfTheChampion.html create mode 100644 Docs/types/IharaSoko.html create mode 100644 Docs/types/Ilhenir.html create mode 100644 Docs/types/ImageTileButtonInfo.html create mode 100644 Docs/types/ImageType.html create mode 100644 Docs/types/ImageTypeInfo.html create mode 100644 Docs/types/ImmolatingWeaponScroll.html create mode 100644 Docs/types/Imp.html create mode 100644 Docs/types/ImpDeathConversation.html create mode 100644 Docs/types/Impaler.html create mode 100644 Docs/types/ImplFlag.html create mode 100644 Docs/types/Impresario.html create mode 100644 Docs/types/IncognitoScroll.html create mode 100644 Docs/types/IncognitoSpell.html create mode 100644 Docs/types/IncreaseCommand.html create mode 100644 Docs/types/IndecipherableMap.html create mode 100644 Docs/types/IndexInfo.html create mode 100644 Docs/types/InfectiousStrike.html create mode 100644 Docs/types/InfoField-T-.html create mode 100644 Docs/types/IngotStone.html create mode 100644 Docs/types/Ingredient.html create mode 100644 Docs/types/IngredientInfo.html create mode 100644 Docs/types/InhumanSpeech.html create mode 100644 Docs/types/Initializer.html create mode 100644 Docs/types/InjuredWolf.html create mode 100644 Docs/types/InnKeeper.html create mode 100644 Docs/types/InquisitorsResolution.html create mode 100644 Docs/types/Inscribe.html create mode 100644 Docs/types/InscribePrompt.html create mode 100644 Docs/types/Insensitive.html create mode 100644 Docs/types/Inshave.html create mode 100644 Docs/types/InstancedItemInfo.html create mode 100644 Docs/types/InstrumentPickedCallback.html create mode 100644 Docs/types/InstrumentQuality.html create mode 100644 Docs/types/InterfaceCommand.html create mode 100644 Docs/types/InterfaceGump.html create mode 100644 Docs/types/InterfaceItemGump.html create mode 100644 Docs/types/InterfaceMobileGump.html create mode 100644 Docs/types/InteriorDecorator.html create mode 100644 Docs/types/InternalAccessException.html create mode 100644 Docs/types/InternalBuyInfo.html create mode 100644 Docs/types/InternalComparer.html create mode 100644 Docs/types/InternalEntry.html create mode 100644 Docs/types/InternalEnumerator.html create mode 100644 Docs/types/InternalFirstTarget.html create mode 100644 Docs/types/InternalGump.html create mode 100644 Docs/types/InternalItem.html create mode 100644 Docs/types/InternalItem2.html create mode 100644 Docs/types/InternalPicker.html create mode 100644 Docs/types/InternalPrompt.html create mode 100644 Docs/types/InternalSecondTarget.html create mode 100644 Docs/types/InternalSellInfo.html create mode 100644 Docs/types/InternalSorter.html create mode 100644 Docs/types/InternalTarget.html create mode 100644 Docs/types/InternalTargetDst.html create mode 100644 Docs/types/InternalTargetPoison.html create mode 100644 Docs/types/InternalTargetSrc.html create mode 100644 Docs/types/InternalTimer.html create mode 100644 Docs/types/InternalizeTimer.html create mode 100644 Docs/types/InternationalCode.html create mode 100644 Docs/types/InternationalCodeComparer.html create mode 100644 Docs/types/InternationalCodeCounter.html create mode 100644 Docs/types/InterredGrizzle.html create mode 100644 Docs/types/InvalidAccountAccessLog.html create mode 100644 Docs/types/InvalidMapEnable.html create mode 100644 Docs/types/InvisibilityScroll.html create mode 100644 Docs/types/InvisibilitySpell.html create mode 100644 Docs/types/IolosLute.html create mode 100644 Docs/types/IronGate.html create mode 100644 Docs/types/IronGateShort.html create mode 100644 Docs/types/IronIngot.html create mode 100644 Docs/types/IronMaidenAddon.html create mode 100644 Docs/types/IronMaidenDeed.html create mode 100644 Docs/types/IronOre.html create mode 100644 Docs/types/IronWire.html create mode 100644 Docs/types/IronWorker.html create mode 100644 Docs/types/IronwoodCrown.html create mode 100644 Docs/types/Item.html create mode 100644 Docs/types/ItemBounds.html create mode 100644 Docs/types/ItemData.html create mode 100644 Docs/types/ItemDelta.html create mode 100644 Docs/types/ItemEntry.html create mode 100644 Docs/types/ItemIdentification.html create mode 100644 Docs/types/ItemListEntry.html create mode 100644 Docs/types/ItemListMenu.html create mode 100644 Docs/types/ItemTileButtonInfo.html create mode 100644 Docs/types/ItemValue.html create mode 100644 Docs/types/ItemValueCollection.html create mode 100644 Docs/types/ItemValueCollectionEnumerator.html create mode 100644 Docs/types/JackOLantern.html create mode 100644 Docs/types/JackRabbit.html create mode 100644 Docs/types/JackalsCollar.html create mode 100644 Docs/types/JadeStatueMaker.html create mode 100644 Docs/types/Jail.html create mode 100644 Docs/types/JarHoney.html create mode 100644 Docs/types/Jars2.html create mode 100644 Docs/types/Jars3.html create mode 100644 Docs/types/Jars4.html create mode 100644 Docs/types/JedahEntille.html create mode 100644 Docs/types/JesterHat.html create mode 100644 Docs/types/JesterHatofChuckles.html create mode 100644 Docs/types/JesterSuit.html create mode 100644 Docs/types/JeweledFiligree.html create mode 100644 Docs/types/Jeweler.html create mode 100644 Docs/types/JinBaori.html create mode 100644 Docs/types/JoinStone.html create mode 100644 Docs/types/JoinStoneGump.html create mode 100644 Docs/types/JointingPlane.html create mode 100644 Docs/types/Jug.html create mode 100644 Docs/types/Juggernaut.html create mode 100644 Docs/types/JukaBow.html create mode 100644 Docs/types/JukaLord.html create mode 100644 Docs/types/JukaMage.html create mode 100644 Docs/types/JukaWarrior.html create mode 100644 Docs/types/JusticeVirtue.html create mode 100644 Docs/types/Jwilson.html create mode 100644 Docs/types/KaburJournal.html create mode 100644 Docs/types/Kama.html create mode 100644 Docs/types/Kamishimo.html create mode 100644 Docs/types/Kappa.html create mode 100644 Docs/types/KarmaEntry.html create mode 100644 Docs/types/Kasa.html create mode 100644 Docs/types/KasaOfTheRajin.html create mode 100644 Docs/types/Katana.html create mode 100644 Docs/types/KazeKemono.html create mode 100644 Docs/types/Keep.html create mode 100644 Docs/types/KeepDeed.html create mode 100644 Docs/types/KeeperOfChivalry.html create mode 100644 Docs/types/Keg.html create mode 100644 Docs/types/Key.html create mode 100644 Docs/types/KeyRing.html create mode 100644 Docs/types/KeyType.html create mode 100644 Docs/types/KeywordList.html create mode 100644 Docs/types/KeywordTeleporter.html create mode 100644 Docs/types/Keywords.html create mode 100644 Docs/types/KhaldunPitTeleporter.html create mode 100644 Docs/types/KhaldunRevenant.html create mode 100644 Docs/types/KhaldunSummoner.html create mode 100644 Docs/types/KhaldunZealot.html create mode 100644 Docs/types/KiAttack.html create mode 100644 Docs/types/KiAttackInfo.html create mode 100644 Docs/types/KickCommand.html create mode 100644 Docs/types/KillCommand.html create mode 100644 Docs/types/KillHordeMinionsObjective.html create mode 100644 Docs/types/KillHordeMinionsStep.html create mode 100644 Docs/types/KillImpsObjective.html create mode 100644 Docs/types/KillInfiltratorsObjective.html create mode 100644 Docs/types/KillQueensObjective.html create mode 100644 Docs/types/Kilt.html create mode 100644 Docs/types/Kindling.html create mode 100644 Docs/types/Kirin.html create mode 100644 Docs/types/Knife.html create mode 100644 Docs/types/KnifeLeft.html create mode 100644 Docs/types/KnifeRight.html create mode 100644 Docs/types/Kraken.html create mode 100644 Docs/types/KrisnaHair.html create mode 100644 Docs/types/KronusScroll.html create mode 100644 Docs/types/KronusScrollBox.html create mode 100644 Docs/types/Kryss.html create mode 100644 Docs/types/LOSBlocker.html create mode 100644 Docs/types/LRReason.html create mode 100644 Docs/types/LadyOfTheSnow.html create mode 100644 Docs/types/LadyPortrait1.html create mode 100644 Docs/types/LadyPortrait2.html create mode 100644 Docs/types/Lajatang.html create mode 100644 Docs/types/LambLeg.html create mode 100644 Docs/types/LampPost1.html create mode 100644 Docs/types/LampPost2.html create mode 100644 Docs/types/LampPost3.html create mode 100644 Docs/types/LampPostArtifact.html create mode 100644 Docs/types/LampRoomBox.html create mode 100644 Docs/types/LampRoomKickTimer.html create mode 100644 Docs/types/LampRoomRegion.html create mode 100644 Docs/types/LampRoomTeleporter.html create mode 100644 Docs/types/LampRoomTimer.html create mode 100644 Docs/types/Lance.html create mode 100644 Docs/types/LandData.html create mode 100644 Docs/types/LandTarget.html create mode 100644 Docs/types/LandTile.html create mode 100644 Docs/types/LandlordVendorRentalGump.html create mode 100644 Docs/types/LanguageStatistics.html create mode 100644 Docs/types/Lantern.html create mode 100644 Docs/types/LanternOfSouls.html create mode 100644 Docs/types/LapHarp.html create mode 100644 Docs/types/LardOfParoxysmus.html create mode 100644 Docs/types/LargeBOD.html create mode 100644 Docs/types/LargeBODAcceptGump.html create mode 100644 Docs/types/LargeBODGump.html create mode 100644 Docs/types/LargeBODTarget.html create mode 100644 Docs/types/LargeBagBall.html create mode 100644 Docs/types/LargeBattleAxe.html create mode 100644 Docs/types/LargeBedEastAddon.html create mode 100644 Docs/types/LargeBedEastDeed.html create mode 100644 Docs/types/LargeBedSouthAddon.html create mode 100644 Docs/types/LargeBedSouthDeed.html create mode 100644 Docs/types/LargeBoat.html create mode 100644 Docs/types/LargeBoatDeed.html create mode 100644 Docs/types/LargeBulkEntry.html create mode 100644 Docs/types/LargeCrate.html create mode 100644 Docs/types/LargeDockedBoat.html create mode 100644 Docs/types/LargeDockedDragonBoat.html create mode 100644 Docs/types/LargeDragonBoat.html create mode 100644 Docs/types/LargeDragonBoatDeed.html create mode 100644 Docs/types/LargeEmptyFlask.html create mode 100644 Docs/types/LargeEmptyPot.html create mode 100644 Docs/types/LargeFishingNetAddon.html create mode 100644 Docs/types/LargeFishingNetComponent.html create mode 100644 Docs/types/LargeFishingNetDeed.html create mode 100644 Docs/types/LargeFlask.html create mode 100644 Docs/types/LargeForgeEast.html create mode 100644 Docs/types/LargeForgeEastAddon.html create mode 100644 Docs/types/LargeForgeEastDeed.html create mode 100644 Docs/types/LargeForgeSouthAddon.html create mode 100644 Docs/types/LargeForgeSouthDeed.html create mode 100644 Docs/types/LargeForgeWest.html create mode 100644 Docs/types/LargeMarbleDeed.html create mode 100644 Docs/types/LargeMarbleHouse.html create mode 100644 Docs/types/LargePainting.html create mode 100644 Docs/types/LargePatioDeed.html create mode 100644 Docs/types/LargePatioHouse.html create mode 100644 Docs/types/LargeSmithBOD.html create mode 100644 Docs/types/LargeStoneTableEastAddon.html create mode 100644 Docs/types/LargeStoneTableEastDeed.html create mode 100644 Docs/types/LargeStoneTableSouthAddon.html create mode 100644 Docs/types/LargeStoneTableSouthDeed.html create mode 100644 Docs/types/LargeTable.html create mode 100644 Docs/types/LargeTailorBOD.html create mode 100644 Docs/types/LargeVase.html create mode 100644 Docs/types/LargeVioletFlask.html create mode 100644 Docs/types/LargeYellowFlask.html create mode 100644 Docs/types/LastOnComparer.html create mode 100644 Docs/types/LaunchBrowser.html create mode 100644 Docs/types/LavaLizard.html create mode 100644 Docs/types/LavaSerpent.html create mode 100644 Docs/types/LavaSnake.html create mode 100644 Docs/types/LavaTile.html create mode 100644 Docs/types/Layer.html create mode 100644 Docs/types/LayerComparer.html create mode 100644 Docs/types/LeafArms.html create mode 100644 Docs/types/LeafChest.html create mode 100644 Docs/types/LeafGloves.html create mode 100644 Docs/types/LeafGorget.html create mode 100644 Docs/types/LeafLegs.html create mode 100644 Docs/types/LeafTonlet.html create mode 100644 Docs/types/Leafblade.html create mode 100644 Docs/types/Leather.html create mode 100644 Docs/types/LeatherArms.html create mode 100644 Docs/types/LeatherBustierArms.html create mode 100644 Docs/types/LeatherCap.html create mode 100644 Docs/types/LeatherChest.html create mode 100644 Docs/types/LeatherDo.html create mode 100644 Docs/types/LeatherDyeTub.html create mode 100644 Docs/types/LeatherGloves.html create mode 100644 Docs/types/LeatherGlovesOfMining.html create mode 100644 Docs/types/LeatherGorget.html create mode 100644 Docs/types/LeatherHaidate.html create mode 100644 Docs/types/LeatherHiroSode.html create mode 100644 Docs/types/LeatherJingasa.html create mode 100644 Docs/types/LeatherLegs.html create mode 100644 Docs/types/LeatherMempo.html create mode 100644 Docs/types/LeatherNinjaBelt.html create mode 100644 Docs/types/LeatherNinjaHood.html create mode 100644 Docs/types/LeatherNinjaJacket.html create mode 100644 Docs/types/LeatherNinjaMitts.html create mode 100644 Docs/types/LeatherNinjaPants.html create mode 100644 Docs/types/LeatherShorts.html create mode 100644 Docs/types/LeatherSkirt.html create mode 100644 Docs/types/LeatherSuneate.html create mode 100644 Docs/types/LeatherTunicArtifact.html create mode 100644 Docs/types/LeatherWorker.html create mode 100644 Docs/types/LeaveFactionGump.html create mode 100644 Docs/types/LeftArm.html create mode 100644 Docs/types/LeftLeg.html create mode 100644 Docs/types/LegacyOfTheDreadLord.html create mode 100644 Docs/types/LeggingsOfBane.html create mode 100644 Docs/types/LeggingsOfEmbers.html create mode 100644 Docs/types/LegsOfStability.html create mode 100644 Docs/types/Lemon.html create mode 100644 Docs/types/Lemons.html create mode 100644 Docs/types/LesserCurePotion.html create mode 100644 Docs/types/LesserExplosionPotion.html create mode 100644 Docs/types/LesserHealPotion.html create mode 100644 Docs/types/LesserHiryu.html create mode 100644 Docs/types/LesserPigmentType.html create mode 100644 Docs/types/LesserPigmentsOfTokuno.html create mode 100644 Docs/types/LesserPoisonPotion.html create mode 100644 Docs/types/Lettuce.html create mode 100644 Docs/types/LeurociansMempoOfFortune.html create mode 100644 Docs/types/LeverPuzzleController.html create mode 100644 Docs/types/LeverPuzzleLever.html create mode 100644 Docs/types/LeverPuzzleRegion.html create mode 100644 Docs/types/LeverPuzzleStatue.html create mode 100644 Docs/types/Leviathan.html create mode 100644 Docs/types/LibraryBookcase.html create mode 100644 Docs/types/Lich.html create mode 100644 Docs/types/LichFormScroll.html create mode 100644 Docs/types/LichFormSpell.html create mode 100644 Docs/types/LichLord.html create mode 100644 Docs/types/LieutenantOfTheBritannianRoyalGuard.html create mode 100644 Docs/types/LifeOfATravellingMinstrel.html create mode 100644 Docs/types/LiftRej.html create mode 100644 Docs/types/LightCycle.html create mode 100644 Docs/types/LightCycleTimer.html create mode 100644 Docs/types/LightEntry.html create mode 100644 Docs/types/LightFlowerTapestryEastAddon.html create mode 100644 Docs/types/LightFlowerTapestryEastDeed.html create mode 100644 Docs/types/LightFlowerTapestrySouthAddon.html create mode 100644 Docs/types/LightFlowerTapestrySouthDeed.html create mode 100644 Docs/types/LightOfTheWinterSolstice.html create mode 100644 Docs/types/LightOfWayGlasses.html create mode 100644 Docs/types/LightPlateJingasa.html create mode 100644 Docs/types/LightSource.html create mode 100644 Docs/types/LightType.html create mode 100644 Docs/types/LightWoodDoor.html create mode 100644 Docs/types/LightWoodGate.html create mode 100644 Docs/types/LightYarn.html create mode 100644 Docs/types/LightYarnUnraveled.html create mode 100644 Docs/types/LightningScroll.html create mode 100644 Docs/types/LightningSpell.html create mode 100644 Docs/types/LightningStrike.html create mode 100644 Docs/types/LightningWand.html create mode 100644 Docs/types/Lime.html create mode 100644 Docs/types/Limes.html create mode 100644 Docs/types/LimitExtension.html create mode 100644 Docs/types/Listener.html create mode 100644 Docs/types/Lizardman.html create mode 100644 Docs/types/LizardmenCamp.html create mode 100644 Docs/types/Llama.html create mode 100644 Docs/types/LoadEntry.html create mode 100644 Docs/types/LocalMap.html create mode 100644 Docs/types/LocalizedAddonComponent.html create mode 100644 Docs/types/LocalizedContainerComponent.html create mode 100644 Docs/types/LocalizedSign.html create mode 100644 Docs/types/LocalizedStatic.html create mode 100644 Docs/types/LocationComparer.html create mode 100644 Docs/types/LocationEffect.html create mode 100644 Docs/types/LocationParticleEffect.html create mode 100644 Docs/types/LocationTree.html create mode 100644 Docs/types/LockKarmaEntry.html create mode 100644 Docs/types/LockableBarrel.html create mode 100644 Docs/types/LockableContainer.html create mode 100644 Docs/types/LockdownTarget.html create mode 100644 Docs/types/Lockpick.html create mode 100644 Docs/types/Lockpicks.html create mode 100644 Docs/types/Log.html create mode 100644 Docs/types/LogCabin.html create mode 100644 Docs/types/LogCabinDeed.html create mode 100644 Docs/types/Login.html create mode 100644 Docs/types/LoginComplete.html create mode 100644 Docs/types/LoginConfirm.html create mode 100644 Docs/types/LoginEventArgs.html create mode 100644 Docs/types/LoginEventHandler.html create mode 100644 Docs/types/LoginResponse.html create mode 100644 Docs/types/LoginStats.html create mode 100644 Docs/types/LoginTimer.html create mode 100644 Docs/types/LogoutAck.html create mode 100644 Docs/types/LogoutEventArgs.html create mode 100644 Docs/types/LogoutEventHandler.html create mode 100644 Docs/types/LogoutGump.html create mode 100644 Docs/types/LogoutTimer.html create mode 100644 Docs/types/LongBeard.html create mode 100644 Docs/types/LongFlask.html create mode 100644 Docs/types/LongHair.html create mode 100644 Docs/types/LongPants.html create mode 100644 Docs/types/Longsword.html create mode 100644 Docs/types/LoomEastAddon.html create mode 100644 Docs/types/LoomEastDeed.html create mode 100644 Docs/types/LoomSouthAddon.html create mode 100644 Docs/types/LoomSouthDeed.html create mode 100644 Docs/types/Loot.html create mode 100644 Docs/types/LootPack.html create mode 100644 Docs/types/LootPackDice.html create mode 100644 Docs/types/LootPackEntry.html create mode 100644 Docs/types/LootPackItem.html create mode 100644 Docs/types/LootType.html create mode 100644 Docs/types/LordBlackthorneSuit.html create mode 100644 Docs/types/LordBritishSuit.html create mode 100644 Docs/types/LordOaks.html create mode 100644 Docs/types/LostCallingScrollConversation.html create mode 100644 Docs/types/LostDaemonBloodConversation.html create mode 100644 Docs/types/LostDaemonBoneConversation.html create mode 100644 Docs/types/LostFertileDirtConversation.html create mode 100644 Docs/types/LostNoteConversation.html create mode 100644 Docs/types/LostScrollOfPowerConversation.html create mode 100644 Docs/types/LostSwordConversation.html create mode 100644 Docs/types/LoyaltyTimer.html create mode 100644 Docs/types/LtBlueCurvedFlask.html create mode 100644 Docs/types/LuckyNecklace.html create mode 100644 Docs/types/Lumberjacking.html create mode 100644 Docs/types/LuminescentFungi.html create mode 100644 Docs/types/LuminousRuneBlade.html create mode 100644 Docs/types/LunaLance.html create mode 100644 Docs/types/Lute.html create mode 100644 Docs/types/LyricalGlasses.html create mode 100644 Docs/types/LysanderGathenwale.html create mode 100644 Docs/types/LysanderNotebook1.html create mode 100644 Docs/types/LysanderNotebook11.html create mode 100644 Docs/types/LysanderNotebook2.html create mode 100644 Docs/types/LysanderNotebook3.html create mode 100644 Docs/types/LysanderNotebook7.html create mode 100644 Docs/types/LysanderNotebook8.html create mode 100644 Docs/types/MLDryad.html create mode 100644 Docs/types/MRBucket.html create mode 100644 Docs/types/MRExpireTimer.html create mode 100644 Docs/types/MaabasConversation.html create mode 100644 Docs/types/Maabus.html create mode 100644 Docs/types/MaabusCoffin.html create mode 100644 Docs/types/MaabusCoffinComponent.html create mode 100644 Docs/types/Mace.html create mode 100644 Docs/types/MaceShieldGlasses.html create mode 100644 Docs/types/Mage.html create mode 100644 Docs/types/MageAI.html create mode 100644 Docs/types/MageCamp.html create mode 100644 Docs/types/MageGuildmaster.html create mode 100644 Docs/types/MagerySpell.html create mode 100644 Docs/types/MagicArrowScroll.html create mode 100644 Docs/types/MagicArrowSpell.html create mode 100644 Docs/types/MagicArrowWand.html create mode 100644 Docs/types/MagicFlute.html create mode 100644 Docs/types/MagicLockScroll.html create mode 100644 Docs/types/MagicLockSpell.html create mode 100644 Docs/types/MagicReflectScroll.html create mode 100644 Docs/types/MagicReflectSpell.html create mode 100644 Docs/types/MagicTrapScroll.html create mode 100644 Docs/types/MagicTrapSpell.html create mode 100644 Docs/types/MagicUnTrapScroll.html create mode 100644 Docs/types/MagicWand.html create mode 100644 Docs/types/MagicWizardsHat.html create mode 100644 Docs/types/MagicalShortbow.html create mode 100644 Docs/types/Magincia.html create mode 100644 Docs/types/MahjongDealerIndicator.html create mode 100644 Docs/types/MahjongDices.html create mode 100644 Docs/types/MahjongGame.html create mode 100644 Docs/types/MahjongGeneralInfo.html create mode 100644 Docs/types/MahjongJoinGame.html create mode 100644 Docs/types/MahjongPacketHandlers.html create mode 100644 Docs/types/MahjongPieceDim.html create mode 100644 Docs/types/MahjongPieceDirection.html create mode 100644 Docs/types/MahjongPlayers.html create mode 100644 Docs/types/MahjongPlayersInfo.html create mode 100644 Docs/types/MahjongRelieve.html create mode 100644 Docs/types/MahjongTile.html create mode 100644 Docs/types/MahjongTileInfo.html create mode 100644 Docs/types/MahjongTileType.html create mode 100644 Docs/types/MahjongTileTypeGenerator.html create mode 100644 Docs/types/MahjongTilesInfo.html create mode 100644 Docs/types/MahjongWallBreakIndicator.html create mode 100644 Docs/types/MahjongWind.html create mode 100644 Docs/types/MainPlantGump.html create mode 100644 Docs/types/MajorTradeAssociation.html create mode 100644 Docs/types/MakeRoomObjective.html create mode 100644 Docs/types/MaleElvenRobe.html create mode 100644 Docs/types/MaleKimono.html create mode 100644 Docs/types/MalletAndChisel.html create mode 100644 Docs/types/ManPortrait1.html create mode 100644 Docs/types/ManPortrait2.html create mode 100644 Docs/types/ManStatuetteEastArtifact.html create mode 100644 Docs/types/ManStatuetteSouthArtifact.html create mode 100644 Docs/types/ManaDrainScroll.html create mode 100644 Docs/types/ManaDrainSpell.html create mode 100644 Docs/types/ManaDrainWand.html create mode 100644 Docs/types/ManaTimer.html create mode 100644 Docs/types/ManaVampireScroll.html create mode 100644 Docs/types/ManaVampireSpell.html create mode 100644 Docs/types/ManageBarkeeperEntry.html create mode 100644 Docs/types/ManagementEntry.html create mode 100644 Docs/types/MandrakeRoot.html create mode 100644 Docs/types/MansionGuard.html create mode 100644 Docs/types/Map.html create mode 100644 Docs/types/MapAddPin.html create mode 100644 Docs/types/MapChange.html create mode 100644 Docs/types/MapCommand.html create mode 100644 Docs/types/MapDefinitions.html create mode 100644 Docs/types/MapDetails.html create mode 100644 Docs/types/MapDisplay.html create mode 100644 Docs/types/MapItem.html create mode 100644 Docs/types/MapPatches.html create mode 100644 Docs/types/MapRules.html create mode 100644 Docs/types/MapSetEditable.html create mode 100644 Docs/types/MapleArmoire.html create mode 100644 Docs/types/Mapmaker.html create mode 100644 Docs/types/MapmakersPen.html create mode 100644 Docs/types/MarbleFloor.html create mode 100644 Docs/types/MarblePavers.html create mode 100644 Docs/types/MarbleStatueMaker.html create mode 100644 Docs/types/MarbleWorkshopDeed.html create mode 100644 Docs/types/Mardoth.html create mode 100644 Docs/types/MardothEndConversation.html create mode 100644 Docs/types/MardothKronusConversation.html create mode 100644 Docs/types/MardothVaultConversation.html create mode 100644 Docs/types/MaritimeGlasses.html create mode 100644 Docs/types/MarkContainer.html create mode 100644 Docs/types/MarkScroll.html create mode 100644 Docs/types/MarkSpell.html create mode 100644 Docs/types/MasonryBook.html create mode 100644 Docs/types/MassCurseScroll.html create mode 100644 Docs/types/MassCurseSpell.html create mode 100644 Docs/types/MassDispelScroll.html create mode 100644 Docs/types/MassDispelSpell.html create mode 100644 Docs/types/Maul.html create mode 100644 Docs/types/MeatPie.html create mode 100644 Docs/types/MeatType.html create mode 100644 Docs/types/Meditation.html create mode 100644 Docs/types/MediumBoat.html create mode 100644 Docs/types/MediumBoatDeed.html create mode 100644 Docs/types/MediumCrate.html create mode 100644 Docs/types/MediumDockedBoat.html create mode 100644 Docs/types/MediumDockedDragonBoat.html create mode 100644 Docs/types/MediumDragonBoat.html create mode 100644 Docs/types/MediumDragonBoatDeed.html create mode 100644 Docs/types/MediumFlask.html create mode 100644 Docs/types/MediumLongBeard.html create mode 100644 Docs/types/MediumShortBeard.html create mode 100644 Docs/types/MediumStoneTableEastAddon.html create mode 100644 Docs/types/MediumStoneTableEastDeed.html create mode 100644 Docs/types/MediumStoneTableSouthAddon.html create mode 100644 Docs/types/MediumStoneTableSouthDeed.html create mode 100644 Docs/types/MediumStretchedHideEastAddon.html create mode 100644 Docs/types/MediumStretchedHideEastDeed.html create mode 100644 Docs/types/MediumStretchedHideSouthAddon.html create mode 100644 Docs/types/MediumStretchedHideSouthDeed.html create mode 100644 Docs/types/MediumWoodDoor.html create mode 100644 Docs/types/MeerCaptain.html create mode 100644 Docs/types/MeerEternal.html create mode 100644 Docs/types/MeerMage.html create mode 100644 Docs/types/MeerWarrior.html create mode 100644 Docs/types/MeleeAI.html create mode 100644 Docs/types/MelisandesCorrodedHatchet.html create mode 100644 Docs/types/MeltedWax.html create mode 100644 Docs/types/MemberComparer.html create mode 100644 Docs/types/Mephitis.html create mode 100644 Docs/types/Meraktus.html create mode 100644 Docs/types/Merchant.html create mode 100644 Docs/types/MerchantGuildmaster.html create mode 100644 Docs/types/MerchantTitle.html create mode 100644 Docs/types/MerchantTitleInfo.html create mode 100644 Docs/types/MerchantTitles.html create mode 100644 Docs/types/MessageBoxMessage.html create mode 100644 Docs/types/MessageEntry.html create mode 100644 Docs/types/MessageGump.html create mode 100644 Docs/types/MessageHelper.html create mode 100644 Docs/types/MessageInABottle.html create mode 100644 Docs/types/MessageLocalized.html create mode 100644 Docs/types/MessageLocalizedAffix.html create mode 100644 Docs/types/MessagePump.html create mode 100644 Docs/types/MessageSentGump.html create mode 100644 Docs/types/MessageType.html create mode 100644 Docs/types/Messenger.html create mode 100644 Docs/types/MetalBox.html create mode 100644 Docs/types/MetalChest.html create mode 100644 Docs/types/MetalDoor.html create mode 100644 Docs/types/MetalDoor2.html create mode 100644 Docs/types/MetalGoldenChest.html create mode 100644 Docs/types/MetalGoldenPuzzleChest.html create mode 100644 Docs/types/MetalGoldenTreasureChest.html create mode 100644 Docs/types/MetalHouseDoor.html create mode 100644 Docs/types/MetalKiteShield.html create mode 100644 Docs/types/MetalPigmentsOfTokuno.html create mode 100644 Docs/types/MetalShield.html create mode 100644 Docs/types/MetalTreasureChest.html create mode 100644 Docs/types/MeteorSwarmScroll.html create mode 100644 Docs/types/MeteorSwarmSpell.html create mode 100644 Docs/types/MethodEmitter.html create mode 100644 Docs/types/MidnightBracers.html create mode 100644 Docs/types/MilitiaCanoneer.html create mode 100644 Docs/types/MilitiaFighter.html create mode 100644 Docs/types/MilitiaFighterCorpse.html create mode 100644 Docs/types/Miller.html create mode 100644 Docs/types/Minax.html create mode 100644 Docs/types/MinaxWarHorse.html create mode 100644 Docs/types/MindBlastScroll.html create mode 100644 Docs/types/MindBlastSpell.html create mode 100644 Docs/types/MindRotScroll.html create mode 100644 Docs/types/MindRotSpell.html create mode 100644 Docs/types/Miner.html create mode 100644 Docs/types/MinerGuildmaster.html create mode 100644 Docs/types/MiniHouseAddon.html create mode 100644 Docs/types/MiniHouseDeed.html create mode 100644 Docs/types/MiniHouseInfo.html create mode 100644 Docs/types/MiniHouseType.html create mode 100644 Docs/types/Mining.html create mode 100644 Docs/types/MiningCart.html create mode 100644 Docs/types/MiningCartDeed.html create mode 100644 Docs/types/MiningCartType.html create mode 100644 Docs/types/Minoc.html create mode 100644 Docs/types/Minotaur.html create mode 100644 Docs/types/MinotaurCaptain.html create mode 100644 Docs/types/MinotaurHedge.html create mode 100644 Docs/types/MinotaurScout.html create mode 100644 Docs/types/MinotaurStatue.html create mode 100644 Docs/types/MinotaurStatueDeed.html create mode 100644 Docs/types/MinotaurStatueType.html create mode 100644 Docs/types/Minter.html create mode 100644 Docs/types/MirrorImage.html create mode 100644 Docs/types/MisoSoup.html create mode 100644 Docs/types/MistletoeAddon.html create mode 100644 Docs/types/MistletoeAddonGump.html create mode 100644 Docs/types/MistletoeDeed.html create mode 100644 Docs/types/MistletoeDeedGump.html create mode 100644 Docs/types/Mobile.html create mode 100644 Docs/types/MobileAnimation.html create mode 100644 Docs/types/MobileAttributes.html create mode 100644 Docs/types/MobileAttributesN.html create mode 100644 Docs/types/MobileDelta.html create mode 100644 Docs/types/MobileEntry.html create mode 100644 Docs/types/MobileHits.html create mode 100644 Docs/types/MobileHitsN.html create mode 100644 Docs/types/MobileIncoming.html create mode 100644 Docs/types/MobileIncomingOld.html create mode 100644 Docs/types/MobileMana.html create mode 100644 Docs/types/MobileManaN.html create mode 100644 Docs/types/MobileMoving.html create mode 100644 Docs/types/MobileMovingOld.html create mode 100644 Docs/types/MobileName.html create mode 100644 Docs/types/MobileNotConnectedException.html create mode 100644 Docs/types/MobileStam.html create mode 100644 Docs/types/MobileStamN.html create mode 100644 Docs/types/MobileStatus.html create mode 100644 Docs/types/MobileStatusCompact.html create mode 100644 Docs/types/MobileStatusExtended.html create mode 100644 Docs/types/MobileUpdate.html create mode 100644 Docs/types/MobileUpdateOld.html create mode 100644 Docs/types/ModelBodyType.html create mode 100644 Docs/types/Mohawk.html create mode 100644 Docs/types/Moloch.html create mode 100644 Docs/types/MomentumStrike.html create mode 100644 Docs/types/Mongbat.html create mode 100644 Docs/types/Monk.html create mode 100644 Docs/types/MonkRobe.html create mode 100644 Docs/types/MonsterStatuette.html create mode 100644 Docs/types/MonsterStatuetteInfo.html create mode 100644 Docs/types/MonsterStatuetteType.html create mode 100644 Docs/types/MoonPhase.html create mode 100644 Docs/types/MoonfireBrew.html create mode 100644 Docs/types/Moongate.html create mode 100644 Docs/types/MoongateConfirmGump.html create mode 100644 Docs/types/MoongateGump.html create mode 100644 Docs/types/Moonglow.html create mode 100644 Docs/types/Moonstone.html create mode 100644 Docs/types/MoonstoneGate.html create mode 100644 Docs/types/MoonstoneType.html create mode 100644 Docs/types/MorgBergen.html create mode 100644 Docs/types/MorphItem.html create mode 100644 Docs/types/MorphResult.html create mode 100644 Docs/types/MortalStrike.html create mode 100644 Docs/types/MortarPestle.html create mode 100644 Docs/types/MouldingPlane.html create mode 100644 Docs/types/MoundOfMaggots.html create mode 100644 Docs/types/MountItem.html create mode 100644 Docs/types/MountainGoat.html create mode 100644 Docs/types/MountedPixieBlueAddon.html create mode 100644 Docs/types/MountedPixieBlueComponent.html create mode 100644 Docs/types/MountedPixieBlueDeed.html create mode 100644 Docs/types/MountedPixieGreenAddon.html create mode 100644 Docs/types/MountedPixieGreenComponent.html create mode 100644 Docs/types/MountedPixieGreenDeed.html create mode 100644 Docs/types/MountedPixieLimeAddon.html create mode 100644 Docs/types/MountedPixieLimeComponent.html create mode 100644 Docs/types/MountedPixieLimeDeed.html create mode 100644 Docs/types/MountedPixieOrangeAddon.html create mode 100644 Docs/types/MountedPixieOrangeComponent.html create mode 100644 Docs/types/MountedPixieOrangeDeed.html create mode 100644 Docs/types/MountedPixieWhiteAddon.html create mode 100644 Docs/types/MountedPixieWhiteComponent.html create mode 100644 Docs/types/MountedPixieWhiteDeed.html create mode 100644 Docs/types/MoveDelayTimer.html create mode 100644 Docs/types/MoveMethod.html create mode 100644 Docs/types/MoveResult.html create mode 100644 Docs/types/MoveTarget.html create mode 100644 Docs/types/MoveTimer.html create mode 100644 Docs/types/Movement.html create mode 100644 Docs/types/MovementAck.html create mode 100644 Docs/types/MovementEventArgs.html create mode 100644 Docs/types/MovementEventHandler.html create mode 100644 Docs/types/MovementImpl.html create mode 100644 Docs/types/MovementPath.html create mode 100644 Docs/types/MovementRecord.html create mode 100644 Docs/types/MovementRej.html create mode 100644 Docs/types/MovementType.html create mode 100644 Docs/types/MovingCrate.html create mode 100644 Docs/types/MovingEffect.html create mode 100644 Docs/types/MovingParticleEffect.html create mode 100644 Docs/types/MovingShot.html create mode 100644 Docs/types/Muculent.html create mode 100644 Docs/types/Muffins.html create mode 100644 Docs/types/MultiCommandImplementor.html create mode 100644 Docs/types/MultiComponentList.html create mode 100644 Docs/types/MultiData.html create mode 100644 Docs/types/MultiTarget.html create mode 100644 Docs/types/MultiTargetReq.html create mode 100644 Docs/types/MultiTargetReqHS.html create mode 100644 Docs/types/MultiTextWriter.html create mode 100644 Docs/types/MultiTileEntry.html create mode 100644 Docs/types/MultiTileEnumerator.html create mode 100644 Docs/types/Mummy.html create mode 100644 Docs/types/MurderConversation.html create mode 100644 Docs/types/MushroomTrap.html create mode 100644 Docs/types/MusicName.html create mode 100644 Docs/types/Mustache.html create mode 100644 Docs/types/MutateEntry.html create mode 100644 Docs/types/MyRunUO.html create mode 100644 Docs/types/MyRunUOStatus.html create mode 100644 Docs/types/MyStory.html create mode 100644 Docs/types/Nails.html create mode 100644 Docs/types/NameBookEntry.html create mode 100644 Docs/types/NameBookPrompt.html create mode 100644 Docs/types/NameChangeDeed.html create mode 100644 Docs/types/NameComparer.html create mode 100644 Docs/types/NameList.html create mode 100644 Docs/types/NameVerification.html create mode 100644 Docs/types/NativeReader.html create mode 100644 Docs/types/NativeReaderUnix.html create mode 100644 Docs/types/NativeReaderWin32.html create mode 100644 Docs/types/Naturalist.html create mode 100644 Docs/types/NaturalistDuringStudyConversation.html create mode 100644 Docs/types/NatureFury.html create mode 100644 Docs/types/NatureFuryScroll.html create mode 100644 Docs/types/NatureFurySpell.html create mode 100644 Docs/types/Necklace.html create mode 100644 Docs/types/NecromancerSpell.html create mode 100644 Docs/types/NecromancerSpellbook.html create mode 100644 Docs/types/NecromanticGlasses.html create mode 100644 Docs/types/NeedDelegate.html create mode 100644 Docs/types/NeedToHideConversation.html create mode 100644 Docs/types/Neira.html create mode 100644 Docs/types/NerveStrike.html create mode 100644 Docs/types/NestArea.html create mode 100644 Docs/types/NetState.html create mode 100644 Docs/types/NetStateComparer.html create mode 100644 Docs/types/NetStateCreatedCallback.html create mode 100644 Docs/types/NewHousePlacementTarget.html create mode 100644 Docs/types/NewMobileAnimation.html create mode 100644 Docs/types/NewPlayerTicket.html create mode 100644 Docs/types/NewPlayerVendorCustomizeGump.html create mode 100644 Docs/types/NewPlayerVendorOwnerGump.html create mode 100644 Docs/types/NewPolymorphGump.html create mode 100644 Docs/types/NewSpellbookContent.html create mode 100644 Docs/types/NextPointTarget.html create mode 100644 Docs/types/NightSightPotion.html create mode 100644 Docs/types/NightSightScroll.html create mode 100644 Docs/types/NightSightSpell.html create mode 100644 Docs/types/NightSightTarget.html create mode 100644 Docs/types/NightSightTimer.html create mode 100644 Docs/types/Nightmare.html create mode 100644 Docs/types/NightsKiss.html create mode 100644 Docs/types/Nightshade.html create mode 100644 Docs/types/Nightstand.html create mode 100644 Docs/types/Ninja.html create mode 100644 Docs/types/NinjaMove.html create mode 100644 Docs/types/NinjaSpell.html create mode 100644 Docs/types/NinjaTabi.html create mode 100644 Docs/types/NinjaWeapon.html create mode 100644 Docs/types/NoDachi.html create mode 100644 Docs/types/NoHousingRegion.html create mode 100644 Docs/types/NoSheetMusicConversation.html create mode 100644 Docs/types/NoSortAttribute.html create mode 100644 Docs/types/Noble.html create mode 100644 Docs/types/NobleSacrificeSpell.html create mode 100644 Docs/types/Node.html create mode 100644 Docs/types/NodeHue.html create mode 100644 Docs/types/NorseHelm.html create mode 100644 Docs/types/NotYetBoundException.html create mode 100644 Docs/types/NoteForZoel.html create mode 100644 Docs/types/NoticeGump.html create mode 100644 Docs/types/NoticeGumpCallback.html create mode 100644 Docs/types/Notoriety.html create mode 100644 Docs/types/NotorietyHandler.html create mode 100644 Docs/types/NotorietyHandlers.html create mode 100644 Docs/types/NoxCrystal.html create mode 100644 Docs/types/NoxRangersHeavyCrossbow.html create mode 100644 Docs/types/NpcGuild.html create mode 100644 Docs/types/NullEnumerable.html create mode 100644 Docs/types/NullFastwalkStack.html create mode 100644 Docs/types/Nunchaku.html create mode 100644 Docs/types/OPLInfo.html create mode 100644 Docs/types/OakBoard.html create mode 100644 Docs/types/OakLog.html create mode 100644 Docs/types/Obelisk.html create mode 100644 Docs/types/Obi.html create mode 100644 Docs/types/ObjectCollection.html create mode 100644 Docs/types/ObjectCollectionEnumerator.html create mode 100644 Docs/types/ObjectConditional.html create mode 100644 Docs/types/ObjectEnumerator.html create mode 100644 Docs/types/ObjectHelpResponse.html create mode 100644 Docs/types/ObjectPropertyList.html create mode 100644 Docs/types/ObjectTypes.html create mode 100644 Docs/types/OblivionsNeedle.html create mode 100644 Docs/types/Obsidian.html create mode 100644 Docs/types/OfferContractTarget.html create mode 100644 Docs/types/OfferExpireTimer.html create mode 100644 Docs/types/Ogre.html create mode 100644 Docs/types/OgreLord.html create mode 100644 Docs/types/OilCloth.html create mode 100644 Docs/types/OldClientResponse.html create mode 100644 Docs/types/OnChatAction.html create mode 100644 Docs/types/OnConsoleChar.html create mode 100644 Docs/types/OnConsoleLine.html create mode 100644 Docs/types/OnConsoleStr.html create mode 100644 Docs/types/OnEncodedPacketReceive.html create mode 100644 Docs/types/OnItemConsumed.html create mode 100644 Docs/types/OnMahjongPacketReceive.html create mode 100644 Docs/types/OnOffGump.html create mode 100644 Docs/types/OnPacketReceive.html create mode 100644 Docs/types/OnVirtueUsed.html create mode 100644 Docs/types/Oni.html create mode 100644 Docs/types/Onion.html create mode 100644 Docs/types/OnlineCommandImplementor.html create mode 100644 Docs/types/OpenBackpackEntry.html create mode 100644 Docs/types/OpenBankEntry.html create mode 100644 Docs/types/OpenBrowserCommand.html create mode 100644 Docs/types/OpenCoconut.html create mode 100644 Docs/types/OpenCorpseEntry.html create mode 100644 Docs/types/OpenDoorMacroEventArgs.html create mode 100644 Docs/types/OpenDoorMacroEventHandler.html create mode 100644 Docs/types/OpenMapEntry.html create mode 100644 Docs/types/OpenSpellbookRequestEventArgs.html create mode 100644 Docs/types/OpenSpellbookRequestEventHandler.html create mode 100644 Docs/types/OphidianArchmage.html create mode 100644 Docs/types/OphidianKnight.html create mode 100644 Docs/types/OphidianMage.html create mode 100644 Docs/types/OphidianMatriarch.html create mode 100644 Docs/types/OphidianWarrior.html create mode 100644 Docs/types/OppositionGroup.html create mode 100644 Docs/types/OrangePetals.html create mode 100644 Docs/types/OrangePetalsContext.html create mode 100644 Docs/types/OrangePetalsTimer.html create mode 100644 Docs/types/Orc.html create mode 100644 Docs/types/OrcBomber.html create mode 100644 Docs/types/OrcBrute.html create mode 100644 Docs/types/OrcCamp.html create mode 100644 Docs/types/OrcCaptain.html create mode 100644 Docs/types/OrcChieftainHelm.html create mode 100644 Docs/types/OrcHelm.html create mode 100644 Docs/types/OrcishKinMask.html create mode 100644 Docs/types/OrcishLord.html create mode 100644 Docs/types/OrcishMage.html create mode 100644 Docs/types/OrcishVisage.html create mode 100644 Docs/types/OrderGuard.html create mode 100644 Docs/types/OrderInfo.html create mode 100644 Docs/types/OrderShield.html create mode 100644 Docs/types/OrderType.html create mode 100644 Docs/types/Orders.html create mode 100644 Docs/types/OreInfo.html create mode 100644 Docs/types/OrigamiButterfly.html create mode 100644 Docs/types/OrigamiFish.html create mode 100644 Docs/types/OrigamiFrog.html create mode 100644 Docs/types/OrigamiPaper.html create mode 100644 Docs/types/OrigamiShape.html create mode 100644 Docs/types/OrigamiSongbird.html create mode 100644 Docs/types/OrigamiSwan.html create mode 100644 Docs/types/Ornament.html create mode 100644 Docs/types/OrnamentOfTheMagician.html create mode 100644 Docs/types/OrnateAxe.html create mode 100644 Docs/types/OrnateCrownOfTheHarrower.html create mode 100644 Docs/types/OrnateElvenChair.html create mode 100644 Docs/types/OrnateElvenTableEastAddon.html create mode 100644 Docs/types/OrnateElvenTableEastDeed.html create mode 100644 Docs/types/OrnateElvenTableSouthAddon.html create mode 100644 Docs/types/OrnateElvenTableSouthDeed.html create mode 100644 Docs/types/OrnateWoodenChest.html create mode 100644 Docs/types/OssianGrimoire.html create mode 100644 Docs/types/OtherGuildInfo.html create mode 100644 Docs/types/OverseerSunderedBlade.html create mode 100644 Docs/types/PMEntry.html create mode 100644 Docs/types/PMList.html create mode 100644 Docs/types/PMMessage.html create mode 100644 Docs/types/PVBuyTarget.html create mode 100644 Docs/types/PVHuePicker.html create mode 100644 Docs/types/Pacify.html create mode 100644 Docs/types/PackAnimal.html create mode 100644 Docs/types/PackAnimalBackpackEntry.html create mode 100644 Docs/types/PackHorse.html create mode 100644 Docs/types/PackInstinct.html create mode 100644 Docs/types/PackLlama.html create mode 100644 Docs/types/Packet.html create mode 100644 Docs/types/PacketHandler.html create mode 100644 Docs/types/PacketHandlers.html create mode 100644 Docs/types/PacketReader.html create mode 100644 Docs/types/PacketReceiveProfile.html create mode 100644 Docs/types/PacketSendProfile.html create mode 100644 Docs/types/PacketWriter.html create mode 100644 Docs/types/PackingBox.html create mode 100644 Docs/types/PadsOfTheCuSidhe.html create mode 100644 Docs/types/Page.html create mode 100644 Docs/types/PageEntry.html create mode 100644 Docs/types/PageEntryGump.html create mode 100644 Docs/types/PageInfo.html create mode 100644 Docs/types/PageInfoCollection.html create mode 100644 Docs/types/PageInfoCollectionEnumerator.html create mode 100644 Docs/types/PagePrompt.html create mode 100644 Docs/types/PagePromptGump.html create mode 100644 Docs/types/PageQueue.html create mode 100644 Docs/types/PageQueueGump.html create mode 100644 Docs/types/PageResolution.html create mode 100644 Docs/types/PageResponseGump.html create mode 100644 Docs/types/PageType.html create mode 100644 Docs/types/PageboyHair.html create mode 100644 Docs/types/PainSpikeScroll.html create mode 100644 Docs/types/PainSpikeSpell.html create mode 100644 Docs/types/PaintedImage.html create mode 100644 Docs/types/Painting1NorthArtifact.html create mode 100644 Docs/types/Painting1WestArtifact.html create mode 100644 Docs/types/Painting2NorthArtifact.html create mode 100644 Docs/types/Painting2WestArtifact.html create mode 100644 Docs/types/Painting3Artifact.html create mode 100644 Docs/types/Painting4NorthArtifact.html create mode 100644 Docs/types/Painting4WestArtifact.html create mode 100644 Docs/types/Painting5NorthArtifact.html create mode 100644 Docs/types/Painting5WestArtifact.html create mode 100644 Docs/types/Painting6NorthArtifact.html create mode 100644 Docs/types/Painting6WestArtifact.html create mode 100644 Docs/types/PaintsAndBrush.html create mode 100644 Docs/types/PaladinSpell.html create mode 100644 Docs/types/Panther.html create mode 100644 Docs/types/PaperLantern.html create mode 100644 Docs/types/Paperdoll.html create mode 100644 Docs/types/PaperdollEntry.html create mode 100644 Docs/types/PaperdollRequestEventArgs.html create mode 100644 Docs/types/PaperdollRequestEventHandler.html create mode 100644 Docs/types/Paragon.html create mode 100644 Docs/types/ParagonChest.html create mode 100644 Docs/types/ParallelSaveStrategy.html create mode 100644 Docs/types/ParalyzeFieldScroll.html create mode 100644 Docs/types/ParalyzeFieldSpell.html create mode 100644 Docs/types/ParalyzeScroll.html create mode 100644 Docs/types/ParalyzeSpell.html create mode 100644 Docs/types/ParalyzedTimer.html create mode 100644 Docs/types/ParalyzingBlow.html create mode 100644 Docs/types/ParasiticPlant.html create mode 100644 Docs/types/ParentNode.html create mode 100644 Docs/types/Parrot.html create mode 100644 Docs/types/ParrotPerchAddon.html create mode 100644 Docs/types/ParrotPerchDeed.html create mode 100644 Docs/types/ParsableAttribute.html create mode 100644 Docs/types/ParticleEffect.html create mode 100644 Docs/types/ParticleSupportType.html create mode 100644 Docs/types/Party.html create mode 100644 Docs/types/PartyCommandHandlers.html create mode 100644 Docs/types/PartyCommands.html create mode 100644 Docs/types/PartyEmptyList.html create mode 100644 Docs/types/PartyInvitation.html create mode 100644 Docs/types/PartyMemberInfo.html create mode 100644 Docs/types/PartyMemberList.html create mode 100644 Docs/types/PartyRemoveMember.html create mode 100644 Docs/types/PartyTextMessage.html create mode 100644 Docs/types/PasswordProtection.html create mode 100644 Docs/types/PatchworkSkeleton.html create mode 100644 Docs/types/PathAlgorithm.html create mode 100644 Docs/types/PathDirection.html create mode 100644 Docs/types/PathFollower.html create mode 100644 Docs/types/PathNode.html create mode 100644 Docs/types/PathfindMessage.html create mode 100644 Docs/types/PayTimer.html create mode 100644 Docs/types/Peacemaking.html create mode 100644 Docs/types/Peach.html create mode 100644 Docs/types/PeachCobbler.html create mode 100644 Docs/types/PeachTreeAddon.html create mode 100644 Docs/types/PeachTreeDeed.html create mode 100644 Docs/types/PeachTrunkAddon.html create mode 100644 Docs/types/PeachTrunkDeed.html create mode 100644 Docs/types/Pear.html create mode 100644 Docs/types/Peasant.html create mode 100644 Docs/types/PeasantsBokuto.html create mode 100644 Docs/types/PeculiarFish.html create mode 100644 Docs/types/PenAndInk.html create mode 100644 Docs/types/PendantOfTheMagi.html create mode 100644 Docs/types/PentagramAddon.html create mode 100644 Docs/types/PentagramDeed.html create mode 100644 Docs/types/PerfectEmerald.html create mode 100644 Docs/types/PersistableObject.html create mode 100644 Docs/types/PersistableType.html create mode 100644 Docs/types/PersistableTypeRegistry.html create mode 100644 Docs/types/PersistanceReader.html create mode 100644 Docs/types/PersistanceWriter.html create mode 100644 Docs/types/PersistedType.html create mode 100644 Docs/types/PersonalLightLevel.html create mode 100644 Docs/types/PersonalLightLevelZero.html create mode 100644 Docs/types/PestilentBandage.html create mode 100644 Docs/types/PetLinkTarget.html create mode 100644 Docs/types/PetResurrectGump.html create mode 100644 Docs/types/PetSummoningSpell.html create mode 100644 Docs/types/PewterBowlOfCarrots.html create mode 100644 Docs/types/PewterBowlOfCorn.html create mode 100644 Docs/types/PewterBowlOfLettuce.html create mode 100644 Docs/types/PewterBowlOfPeas.html create mode 100644 Docs/types/PewterBowlOfPotatos.html create mode 100644 Docs/types/PewterMug.html create mode 100644 Docs/types/PhantomStaff.html create mode 100644 Docs/types/PhillipsWoodenSteed.html create mode 100644 Docs/types/Phoenix.html create mode 100644 Docs/types/PickLoomTarget.html create mode 100644 Docs/types/PickMoveTarget.html create mode 100644 Docs/types/PickTarget.html create mode 100644 Docs/types/PickWheelTarget.html create mode 100644 Docs/types/Pickaxe.html create mode 100644 Docs/types/PickpocketDip.html create mode 100644 Docs/types/PickpocketDipEastAddon.html create mode 100644 Docs/types/PickpocketDipEastDeed.html create mode 100644 Docs/types/PickpocketDipSouthAddon.html create mode 100644 Docs/types/PickpocketDipSouthDeed.html create mode 100644 Docs/types/PicnicBasket.html create mode 100644 Docs/types/PieChart.html create mode 100644 Docs/types/PieChartRenderer.html create mode 100644 Docs/types/PieceBlackBishop.html create mode 100644 Docs/types/PieceBlackChecker.html create mode 100644 Docs/types/PieceBlackKing.html create mode 100644 Docs/types/PieceBlackKnight.html create mode 100644 Docs/types/PieceBlackPawn.html create mode 100644 Docs/types/PieceBlackQueen.html create mode 100644 Docs/types/PieceBlackRook.html create mode 100644 Docs/types/PieceWhiteBishop.html create mode 100644 Docs/types/PieceWhiteChecker.html create mode 100644 Docs/types/PieceWhiteKing.html create mode 100644 Docs/types/PieceWhiteKnight.html create mode 100644 Docs/types/PieceWhitePawn.html create mode 100644 Docs/types/PieceWhiteQueen.html create mode 100644 Docs/types/PieceWhiteRook.html create mode 100644 Docs/types/Pier.html create mode 100644 Docs/types/Pig.html create mode 100644 Docs/types/PigIron.html create mode 100644 Docs/types/PigmentType.html create mode 100644 Docs/types/PigmentsOfTokuno.html create mode 100644 Docs/types/PigmentsTileButtonInfo.html create mode 100644 Docs/types/Pike.html create mode 100644 Docs/types/PileOfGlacialSnow.html create mode 100644 Docs/types/PilferedDancerFans.html create mode 100644 Docs/types/PingAck.html create mode 100644 Docs/types/PinkFancyRugAddon.html create mode 100644 Docs/types/PinkFancyRugDeed.html create mode 100644 Docs/types/Pitcher.html create mode 100644 Docs/types/Pitchfork.html create mode 100644 Docs/types/Pixie.html create mode 100644 Docs/types/PixieSwatter.html create mode 100644 Docs/types/PlagueBeast.html create mode 100644 Docs/types/PlagueBeastBackpack.html create mode 100644 Docs/types/PlagueBeastBackupOrgan.html create mode 100644 Docs/types/PlagueBeastBlood.html create mode 100644 Docs/types/PlagueBeastComponent.html create mode 100644 Docs/types/PlagueBeastGland.html create mode 100644 Docs/types/PlagueBeastHeart.html create mode 100644 Docs/types/PlagueBeastInnard.html create mode 100644 Docs/types/PlagueBeastLord.html create mode 100644 Docs/types/PlagueBeastMaidenOrgan.html create mode 100644 Docs/types/PlagueBeastMainOrgan.html create mode 100644 Docs/types/PlagueBeastMutationCore.html create mode 100644 Docs/types/PlagueBeastOrgan.html create mode 100644 Docs/types/PlagueBeastRockOrgan.html create mode 100644 Docs/types/PlagueBeastRubbleOrgan.html create mode 100644 Docs/types/PlagueBeastVein.html create mode 100644 Docs/types/PlagueSpawn.html create mode 100644 Docs/types/PlainDress.html create mode 100644 Docs/types/PlainLowTable.html create mode 100644 Docs/types/PlainWoodenChest.html create mode 100644 Docs/types/Plank.html create mode 100644 Docs/types/PlankSide.html create mode 100644 Docs/types/PlantBowl.html create mode 100644 Docs/types/PlantGrowthIndicator.html create mode 100644 Docs/types/PlantHealth.html create mode 100644 Docs/types/PlantHue.html create mode 100644 Docs/types/PlantHueInfo.html create mode 100644 Docs/types/PlantItem.html create mode 100644 Docs/types/PlantPourTarget.html create mode 100644 Docs/types/PlantResourceInfo.html create mode 100644 Docs/types/PlantStatus.html create mode 100644 Docs/types/PlantSystem.html create mode 100644 Docs/types/PlantType.html create mode 100644 Docs/types/PlantTypeInfo.html create mode 100644 Docs/types/Plate.html create mode 100644 Docs/types/PlateArms.html create mode 100644 Docs/types/PlateBattleKabuto.html create mode 100644 Docs/types/PlateChest.html create mode 100644 Docs/types/PlateDo.html create mode 100644 Docs/types/PlateGloves.html create mode 100644 Docs/types/PlateGorget.html create mode 100644 Docs/types/PlateHaidate.html create mode 100644 Docs/types/PlateHatsuburi.html create mode 100644 Docs/types/PlateHelm.html create mode 100644 Docs/types/PlateHiroSode.html create mode 100644 Docs/types/PlateLegs.html create mode 100644 Docs/types/PlateMempo.html create mode 100644 Docs/types/PlateSuneate.html create mode 100644 Docs/types/PlayMusic.html create mode 100644 Docs/types/PlayServerAck.html create mode 100644 Docs/types/PlaySound.html create mode 100644 Docs/types/Player.html create mode 100644 Docs/types/PlayerBBEast.html create mode 100644 Docs/types/PlayerBBGump.html create mode 100644 Docs/types/PlayerBBMessage.html create mode 100644 Docs/types/PlayerBBSouth.html create mode 100644 Docs/types/PlayerBarkeeper.html create mode 100644 Docs/types/PlayerCollection.html create mode 100644 Docs/types/PlayerDeathEventArgs.html create mode 100644 Docs/types/PlayerDeathEventHandler.html create mode 100644 Docs/types/PlayerFlag.html create mode 100644 Docs/types/PlayerMobile.html create mode 100644 Docs/types/PlayerMove.html create mode 100644 Docs/types/PlayerState.html create mode 100644 Docs/types/PlayerVendor.html create mode 100644 Docs/types/PlayerVendorBuyGump.html create mode 100644 Docs/types/PlayerVendorCustomizeGump.html create mode 100644 Docs/types/PlayerVendorOwnerGump.html create mode 100644 Docs/types/PlayerVendorPlaceholder.html create mode 100644 Docs/types/PlayerVendorTargetAttribute.html create mode 100644 Docs/types/PlayingCards.html create mode 100644 Docs/types/PlayingCards2.html create mode 100644 Docs/types/Point2D.html create mode 100644 Docs/types/Point3D.html create mode 100644 Docs/types/Point3DList.html create mode 100644 Docs/types/Poison.html create mode 100644 Docs/types/PoisonElemental.html create mode 100644 Docs/types/PoisonFieldScroll.html create mode 100644 Docs/types/PoisonFieldSpell.html create mode 100644 Docs/types/PoisonImpl.html create mode 100644 Docs/types/PoisonPotion.html create mode 100644 Docs/types/PoisonScroll.html create mode 100644 Docs/types/PoisonSpell.html create mode 100644 Docs/types/PoisonStrikeScroll.html create mode 100644 Docs/types/PoisonStrikeSpell.html create mode 100644 Docs/types/PoisonTimer.html create mode 100644 Docs/types/PoisonTrapCraft.html create mode 100644 Docs/types/PoisonedGlasses.html create mode 100644 Docs/types/Poisoning.html create mode 100644 Docs/types/PolarBear.html create mode 100644 Docs/types/PolarBearMask.html create mode 100644 Docs/types/PolarBearRugEastAddon.html create mode 100644 Docs/types/PolarBearRugEastDeed.html create mode 100644 Docs/types/PolarBearRugSouthAddon.html create mode 100644 Docs/types/PolarBearRugSouthDeed.html create mode 100644 Docs/types/PollinateTarget.html create mode 100644 Docs/types/PolymorphCategory.html create mode 100644 Docs/types/PolymorphEntry.html create mode 100644 Docs/types/PolymorphGump.html create mode 100644 Docs/types/PolymorphScroll.html create mode 100644 Docs/types/PolymorphSpell.html create mode 100644 Docs/types/PonyTail.html create mode 100644 Docs/types/PoolOfAcid.html create mode 100644 Docs/types/PooledEnumerable.html create mode 100644 Docs/types/PopupMessage.html create mode 100644 Docs/types/PortcullisEW.html create mode 100644 Docs/types/PortcullisNS.html create mode 100644 Docs/types/PostPrompt.html create mode 100644 Docs/types/PotionEffect.html create mode 100644 Docs/types/PotionKeg.html create mode 100644 Docs/types/PottedCactus.html create mode 100644 Docs/types/PottedCactus1.html create mode 100644 Docs/types/PottedCactus2.html create mode 100644 Docs/types/PottedCactus3.html create mode 100644 Docs/types/PottedCactus4.html create mode 100644 Docs/types/PottedCactus5.html create mode 100644 Docs/types/PottedCactusDeed.html create mode 100644 Docs/types/PottedPlant.html create mode 100644 Docs/types/PottedPlant1.html create mode 100644 Docs/types/PottedPlant2.html create mode 100644 Docs/types/PottedTree.html create mode 100644 Docs/types/PottedTree1.html create mode 100644 Docs/types/Pouch.html create mode 100644 Docs/types/PowderOfTemperament.html create mode 100644 Docs/types/PowderOfTranslocation.html create mode 100644 Docs/types/Power.html create mode 100644 Docs/types/PowerCrystal.html create mode 100644 Docs/types/PowerDefinition.html create mode 100644 Docs/types/PowerGenerator.html create mode 100644 Docs/types/PowerScroll.html create mode 100644 Docs/types/PredatorAI.html create mode 100644 Docs/types/PredatorHellCat.html create mode 100644 Docs/types/PredefGump.html create mode 100644 Docs/types/PredefinedResponse.html create mode 100644 Docs/types/PresetMap.html create mode 100644 Docs/types/PresetMapBuyInfo.html create mode 100644 Docs/types/PresetMapEntry.html create mode 100644 Docs/types/PresetMapType.html create mode 100644 Docs/types/PreviewHouse.html create mode 100644 Docs/types/PricePerRentalPrompt.html create mode 100644 Docs/types/PricedHealer.html create mode 100644 Docs/types/PristineDreadHorn.html create mode 100644 Docs/types/PrivSoundCommand.html create mode 100644 Docs/types/PrizedFish.html create mode 100644 Docs/types/ProcessFungiConversation.html create mode 100644 Docs/types/ProcessFungiObjective.html create mode 100644 Docs/types/ProcessFungiTarget.html create mode 100644 Docs/types/ProcessZoogiFungusEntry.html create mode 100644 Docs/types/Producer.html create mode 100644 Docs/types/ProfanityAction.html create mode 100644 Docs/types/ProfanityProtection.html create mode 100644 Docs/types/Profile.html create mode 100644 Docs/types/ProfileRequestEventArgs.html create mode 100644 Docs/types/ProfileRequestEventHandler.html create mode 100644 Docs/types/Profiling.html create mode 100644 Docs/types/PromotionalToken.html create mode 100644 Docs/types/PromotionalTokenGump.html create mode 100644 Docs/types/Prompt.html create mode 100644 Docs/types/PromptCallback.html create mode 100644 Docs/types/PromptStateCallback-T-.html create mode 100644 Docs/types/PromptStateCallback.html create mode 100644 Docs/types/Properties.html create mode 100644 Docs/types/PropertiesGump.html create mode 100644 Docs/types/Property.html create mode 100644 Docs/types/PropertyAccess.html create mode 100644 Docs/types/PropertyCondition.html create mode 100644 Docs/types/PropertyException.html create mode 100644 Docs/types/PropertyObjectAttribute.html create mode 100644 Docs/types/PropertySorter.html create mode 100644 Docs/types/PropertyValue.html create mode 100644 Docs/types/PropsConfig.html create mode 100644 Docs/types/PropsTarget.html create mode 100644 Docs/types/ProspectorsTool.html create mode 100644 Docs/types/ProtectionScroll.html create mode 100644 Docs/types/ProtectionSpell.html create mode 100644 Docs/types/ProtocolChanges.html create mode 100644 Docs/types/ProtocolExtension.html create mode 100644 Docs/types/ProtocolExtensions.html create mode 100644 Docs/types/Provisioner.html create mode 100644 Docs/types/Provocation.html create mode 100644 Docs/types/PublicMoongate.html create mode 100644 Docs/types/Pumpkin.html create mode 100644 Docs/types/PumpkinPie.html create mode 100644 Docs/types/Putrefication.html create mode 100644 Docs/types/PuzzleChest.html create mode 100644 Docs/types/PuzzleChestCylinder.html create mode 100644 Docs/types/PuzzleChestSolution.html create mode 100644 Docs/types/PuzzleChestSolutionAndTime.html create mode 100644 Docs/types/PuzzleGump.html create mode 100644 Docs/types/PyramidAddon.html create mode 100644 Docs/types/Quagmire.html create mode 100644 Docs/types/QuarterStaff.html create mode 100644 Docs/types/Quell.html create mode 100644 Docs/types/QueryMakersMarkGump.html create mode 100644 Docs/types/QuestArrow.html create mode 100644 Docs/types/QuestCallback.html create mode 100644 Docs/types/QuestCallbackEntry.html create mode 100644 Docs/types/QuestCancelGump.html create mode 100644 Docs/types/QuestCompleteObjectiveRegion.html create mode 100644 Docs/types/QuestConversation.html create mode 100644 Docs/types/QuestConversationsGump.html create mode 100644 Docs/types/QuestDaemonBlood.html create mode 100644 Docs/types/QuestDaemonBone.html create mode 100644 Docs/types/QuestFertileDirt.html create mode 100644 Docs/types/QuestGumpRequestArgs.html create mode 100644 Docs/types/QuestGumpRequestHandler.html create mode 100644 Docs/types/QuestItem.html create mode 100644 Docs/types/QuestItemInfo.html create mode 100644 Docs/types/QuestItemInfoGump.html create mode 100644 Docs/types/QuestLogUpdatedGump.html create mode 100644 Docs/types/QuestNoEntryRegion.html create mode 100644 Docs/types/QuestObjective.html create mode 100644 Docs/types/QuestObjectivesGump.html create mode 100644 Docs/types/QuestOfVirtues.html create mode 100644 Docs/types/QuestOfferGump.html create mode 100644 Docs/types/QuestOfferRegion.html create mode 100644 Docs/types/QuestRestartInfo.html create mode 100644 Docs/types/QuestSerializer.html create mode 100644 Docs/types/QuestSystem.html create mode 100644 Docs/types/QuestionMenu.html create mode 100644 Docs/types/QueueStatus.html create mode 100644 Docs/types/QueueStatusCollection.html create mode 100644 Docs/types/QueueStatusCollectionEnumerator.html create mode 100644 Docs/types/QueuedMemoryWriter.html create mode 100644 Docs/types/Quiche.html create mode 100644 Docs/types/QuiverOfBlight.html create mode 100644 Docs/types/QuiverOfElements.html create mode 100644 Docs/types/QuiverOfFire.html create mode 100644 Docs/types/QuiverOfIce.html create mode 100644 Docs/types/QuiverOfInfinity.html create mode 100644 Docs/types/QuiverOfLightning.html create mode 100644 Docs/types/QuiverOfRage.html create mode 100644 Docs/types/Rabbit.html create mode 100644 Docs/types/Race.html create mode 100644 Docs/types/RaceDefinitions.html create mode 100644 Docs/types/RadarConversation.html create mode 100644 Docs/types/RadiantScimitar.html create mode 100644 Docs/types/RaedsGlory.html create mode 100644 Docs/types/RaffleContextMenuEntry.html create mode 100644 Docs/types/RaffleEntry.html create mode 100644 Docs/types/RagingGrizzlyBear.html create mode 100644 Docs/types/RaiJu.html create mode 100644 Docs/types/RaisableItem.html create mode 100644 Docs/types/RaiseSwitch.html create mode 100644 Docs/types/RaiseTimer.html create mode 100644 Docs/types/Rancher.html create mode 100644 Docs/types/RandomTalisman.html create mode 100644 Docs/types/RandomWand.html create mode 100644 Docs/types/Ranger.html create mode 100644 Docs/types/RangerArms.html create mode 100644 Docs/types/RangerChest.html create mode 100644 Docs/types/RangerGloves.html create mode 100644 Docs/types/RangerGorget.html create mode 100644 Docs/types/RangerGuildmaster.html create mode 100644 Docs/types/RangerLegs.html create mode 100644 Docs/types/RankComparer.html create mode 100644 Docs/types/RankDefinition.html create mode 100644 Docs/types/RankFlags.html create mode 100644 Docs/types/RankingsOfTrades.html create mode 100644 Docs/types/Rat.html create mode 100644 Docs/types/RatCamp.html create mode 100644 Docs/types/Ratman.html create mode 100644 Docs/types/RatmanArcher.html create mode 100644 Docs/types/RatmanMage.html create mode 100644 Docs/types/RattanDoor.html create mode 100644 Docs/types/Ravager.html create mode 100644 Docs/types/RavenHelm.html create mode 100644 Docs/types/RawBird.html create mode 100644 Docs/types/RawChickenLeg.html create mode 100644 Docs/types/RawFishSteak.html create mode 100644 Docs/types/RawLambLeg.html create mode 100644 Docs/types/RawRibs.html create mode 100644 Docs/types/Reaction.html create mode 100644 Docs/types/ReactionType.html create mode 100644 Docs/types/ReactiveArmorScroll.html create mode 100644 Docs/types/ReactiveArmorSpell.html create mode 100644 Docs/types/ReadAbraxusScrollConversation.html create mode 100644 Docs/types/ReadAbraxusScrollObjective.html create mode 100644 Docs/types/ReadAccessException.html create mode 100644 Docs/types/ReadOnlyException.html create mode 100644 Docs/types/Reagent.html create mode 100644 Docs/types/RealEstateBroker.html create mode 100644 Docs/types/ReanimateMaabusConversation.html create mode 100644 Docs/types/Reaper.html create mode 100644 Docs/types/ReaperFormScroll.html create mode 100644 Docs/types/ReaperFormSpell.html create mode 100644 Docs/types/RecallRune.html create mode 100644 Docs/types/RecallScroll.html create mode 100644 Docs/types/RecallSpell.html create mode 100644 Docs/types/ReceedingHair.html create mode 100644 Docs/types/ReceiverCrystal.html create mode 100644 Docs/types/RecentlyFinishedConversation.html create mode 100644 Docs/types/RechargeEntry.html create mode 100644 Docs/types/Recipe.html create mode 100644 Docs/types/RecipeConversation.html create mode 100644 Docs/types/RecipeScroll.html create mode 100644 Docs/types/ReclaimVendorGump.html create mode 100644 Docs/types/ReclaimVendorInventoryEntry.html create mode 100644 Docs/types/Rectangle2D.html create mode 100644 Docs/types/Rectangle3D.html create mode 100644 Docs/types/RedAmbitiousSolenQueen.html create mode 100644 Docs/types/RedArmoire.html create mode 100644 Docs/types/RedBeaker.html create mode 100644 Docs/types/RedBook.html create mode 100644 Docs/types/RedBottle.html create mode 100644 Docs/types/RedCurvedFlask.html create mode 100644 Docs/types/RedHangingLantern.html create mode 100644 Docs/types/RedLeaves.html create mode 100644 Docs/types/RedMisoSoup.html create mode 100644 Docs/types/RedPlainRugAddon.html create mode 100644 Docs/types/RedPlainRugDeed.html create mode 100644 Docs/types/RedPoinsettia.html create mode 100644 Docs/types/RedRibbedFlask.html create mode 100644 Docs/types/RedScales.html create mode 100644 Docs/types/RedSolenInfiltratorQueen.html create mode 100644 Docs/types/RedSolenInfiltratorWarrior.html create mode 100644 Docs/types/RedSolenMatriarch.html create mode 100644 Docs/types/RedSolenQueen.html create mode 100644 Docs/types/RedSolenWarrior.html create mode 100644 Docs/types/RedSolenWorker.html create mode 100644 Docs/types/RedSoulstone.html create mode 100644 Docs/types/RedStocking.html create mode 100644 Docs/types/RedVelvetGiftBox.html create mode 100644 Docs/types/Reflector.html create mode 100644 Docs/types/RefreshHouseCommand.html create mode 100644 Docs/types/RefreshPotion.html create mode 100644 Docs/types/RefundOfferPrompt.html create mode 100644 Docs/types/Reg.html create mode 100644 Docs/types/RegStone.html create mode 100644 Docs/types/RegardingLlamas.html create mode 100644 Docs/types/RegenRateHandler.html create mode 100644 Docs/types/RegenRates.html create mode 100644 Docs/types/RegenTimer.html create mode 100644 Docs/types/Region.html create mode 100644 Docs/types/RegionCommandImplementor.html create mode 100644 Docs/types/RegionRect.html create mode 100644 Docs/types/RejoinTimer.html create mode 100644 Docs/types/RejuvinationAddonComponent.html create mode 100644 Docs/types/RejuvinationAnkhNorth.html create mode 100644 Docs/types/RejuvinationAnkhWest.html create mode 100644 Docs/types/RelayInfo.html create mode 100644 Docs/types/ReleaseEntry.html create mode 100644 Docs/types/Relnia.html create mode 100644 Docs/types/RelocatedEntity.html create mode 100644 Docs/types/RemoteAdminHandlers.html create mode 100644 Docs/types/RemoveBuffPacket.html create mode 100644 Docs/types/RemoveCurseSpell.html create mode 100644 Docs/types/RemoveEntry.html create mode 100644 Docs/types/RemoveFacialHair.html create mode 100644 Docs/types/RemoveFromPartyEntry.html create mode 100644 Docs/types/RemoveGump.html create mode 100644 Docs/types/RemoveHair.html create mode 100644 Docs/types/RemoveItem.html create mode 100644 Docs/types/RemoveMobile.html create mode 100644 Docs/types/RemovePartyTarget.html create mode 100644 Docs/types/RemoveTrap.html create mode 100644 Docs/types/RemoveTrapSpell.html create mode 100644 Docs/types/RenameBoatPrompt.html create mode 100644 Docs/types/RenamePrompt.html create mode 100644 Docs/types/RenameRequestEventArgs.html create mode 100644 Docs/types/RenameRequestEventHandler.html create mode 100644 Docs/types/RenameRequests.html create mode 100644 Docs/types/RenounceYoungGump.html create mode 100644 Docs/types/RentTarget.html create mode 100644 Docs/types/RentalExpireTimer.html create mode 100644 Docs/types/RentedVendor.html create mode 100644 Docs/types/RenterVendorRentalGump.html create mode 100644 Docs/types/Repair.html create mode 100644 Docs/types/RepairDeed.html create mode 100644 Docs/types/RepairSkillInfo.html create mode 100644 Docs/types/RepairSkillType.html create mode 100644 Docs/types/RepeatingCrossbow.html create mode 100644 Docs/types/Report.html create mode 100644 Docs/types/ReportColumn.html create mode 100644 Docs/types/ReportColumnCollection.html create mode 100644 Docs/types/ReportColumnCollectionEnumerator.html create mode 100644 Docs/types/ReportItem.html create mode 100644 Docs/types/ReportItemCollection.html create mode 100644 Docs/types/ReportItemCollectionEnumerator.html create mode 100644 Docs/types/ReportMurdererGump.html create mode 100644 Docs/types/Reports.html create mode 100644 Docs/types/ReproductionGump.html create mode 100644 Docs/types/Reptalon.html create mode 100644 Docs/types/ReptalonFormTalisman.html create mode 100644 Docs/types/ResGate.html create mode 100644 Docs/types/ResetEquipTimer.html create mode 100644 Docs/types/ResetGameEntry.html create mode 100644 Docs/types/ResetTimer.html create mode 100644 Docs/types/ResilientBracer.html create mode 100644 Docs/types/ResistanceMod.html create mode 100644 Docs/types/ResistanceType.html create mode 100644 Docs/types/Resmelt.html create mode 100644 Docs/types/ResponseInfo.html create mode 100644 Docs/types/ResponseInfoCollection.html create mode 100644 Docs/types/ResponseInfoCollectionEnumerator.html create mode 100644 Docs/types/RestartTimer.html create mode 100644 Docs/types/RestlessSoul.html create mode 100644 Docs/types/RestockCommand.html create mode 100644 Docs/types/ResurrectEntry.html create mode 100644 Docs/types/ResurrectGump.html create mode 100644 Docs/types/ResurrectMessage.html create mode 100644 Docs/types/ResurrectionScroll.html create mode 100644 Docs/types/ResurrectionSpell.html create mode 100644 Docs/types/RetrieveAbraxusScrollObjective.html create mode 100644 Docs/types/ReturnAfterKillsObjective.html create mode 100644 Docs/types/ReturnAfterWaterObjective.html create mode 100644 Docs/types/ReturnAutographConversation.html create mode 100644 Docs/types/ReturnAutographObjective.html create mode 100644 Docs/types/ReturnDaemonBloodObjective.html create mode 100644 Docs/types/ReturnDaemonBoneObjective.html create mode 100644 Docs/types/ReturnFertileDirtObjective.html create mode 100644 Docs/types/ReturnFromInnConversation.html create mode 100644 Docs/types/ReturnFromInnObjective.html create mode 100644 Docs/types/ReturnImagesConversation.html create mode 100644 Docs/types/ReturnImagesObjective.html create mode 100644 Docs/types/ReturnIngredientsObjective.html create mode 100644 Docs/types/ReturnObjective.html create mode 100644 Docs/types/ReturnPaintingConversation.html create mode 100644 Docs/types/ReturnPaintingObjective.html create mode 100644 Docs/types/ReturnPearlsConversation.html create mode 100644 Docs/types/ReturnPearlsObjective.html create mode 100644 Docs/types/ReturnRecipeObjective.html create mode 100644 Docs/types/ReturnScrollOfPowerObjective.html create mode 100644 Docs/types/ReturnSheetMusicObjective.html create mode 100644 Docs/types/ReturnSwordConversation.html create mode 100644 Docs/types/ReturnSwordObjective.html create mode 100644 Docs/types/ReturnToCrystalCaveObjective.html create mode 100644 Docs/types/ReturnToNaturalistObjective.html create mode 100644 Docs/types/ReturnToysObjective.html create mode 100644 Docs/types/ReturnVendorEntry.html create mode 100644 Docs/types/RevealScroll.html create mode 100644 Docs/types/RevealSpell.html create mode 100644 Docs/types/Revenant.html create mode 100644 Docs/types/RevenantLion.html create mode 100644 Docs/types/RewardBlackDyeTub.html create mode 100644 Docs/types/RewardBrazier.html create mode 100644 Docs/types/RewardBrazierDeed.html create mode 100644 Docs/types/RewardCake.html create mode 100644 Docs/types/RewardCalculator.html create mode 100644 Docs/types/RewardCategory.html create mode 100644 Docs/types/RewardChoiceGump.html create mode 100644 Docs/types/RewardCloak.html create mode 100644 Docs/types/RewardConfirmGump.html create mode 100644 Docs/types/RewardDemolitionGump.html create mode 100644 Docs/types/RewardDress.html create mode 100644 Docs/types/RewardEntry.html create mode 100644 Docs/types/RewardGroup.html create mode 100644 Docs/types/RewardItem.html create mode 100644 Docs/types/RewardList.html create mode 100644 Docs/types/RewardNoticeGump.html create mode 100644 Docs/types/RewardOption.html create mode 100644 Docs/types/RewardOptionGump.html create mode 100644 Docs/types/RewardOptionList.html create mode 100644 Docs/types/RewardPottedCactus.html create mode 100644 Docs/types/RewardRobe.html create mode 100644 Docs/types/RewardSystem.html create mode 100644 Docs/types/RewardType.html create mode 100644 Docs/types/RibCage.html create mode 100644 Docs/types/Ribs.html create mode 100644 Docs/types/RidableLlama.html create mode 100644 Docs/types/RideablePolarBear.html create mode 100644 Docs/types/Ridgeback.html create mode 100644 Docs/types/RidingSwipe.html create mode 100644 Docs/types/RightArm.html create mode 100644 Docs/types/RightLeg.html create mode 100644 Docs/types/RighteousAnger.html create mode 100644 Docs/types/Rikktor.html create mode 100644 Docs/types/RingOfTheElements.html create mode 100644 Docs/types/RingOfTheVile.html create mode 100644 Docs/types/RingmailArms.html create mode 100644 Docs/types/RingmailChest.html create mode 100644 Docs/types/RingmailGloves.html create mode 100644 Docs/types/RingmailGlovesOfMining.html create mode 100644 Docs/types/RingmailLegs.html create mode 100644 Docs/types/RoastPig.html create mode 100644 Docs/types/Robe.html create mode 100644 Docs/types/RobeOfTheEclipse.html create mode 100644 Docs/types/RobeOfTheEquinox.html create mode 100644 Docs/types/RockArtifact.html create mode 100644 Docs/types/RockTimer.html create mode 100644 Docs/types/RollingPin.html create mode 100644 Docs/types/Ronin.html create mode 100644 Docs/types/Rope.html create mode 100644 Docs/types/RoseInAVase.html create mode 100644 Docs/types/RoseOfTrinsic.html create mode 100644 Docs/types/RoseOfTrinsicPetal.html create mode 100644 Docs/types/RottingCorpse.html create mode 100644 Docs/types/RoundPaperLantern.html create mode 100644 Docs/types/RoyalCirclet.html create mode 100644 Docs/types/RoyalGuardSurvivalKnife.html create mode 100644 Docs/types/Ruby.html create mode 100644 Docs/types/RuinedArmoire.html create mode 100644 Docs/types/RuinedBookcase.html create mode 100644 Docs/types/RuinedBooks.html create mode 100644 Docs/types/RuinedChair.html create mode 100644 Docs/types/RuinedClock.html create mode 100644 Docs/types/RuinedDrawers.html create mode 100644 Docs/types/RuinedFallenChairA.html create mode 100644 Docs/types/RuinedFallenChairB.html create mode 100644 Docs/types/RuinedPainting.html create mode 100644 Docs/types/RuinedPaintingArtifact.html create mode 100644 Docs/types/RuneBeetle.html create mode 100644 Docs/types/RuneBeetleCarapace.html create mode 100644 Docs/types/RuneBlade.html create mode 100644 Docs/types/RuneCarvingKnife.html create mode 100644 Docs/types/Runebook.html create mode 100644 Docs/types/RunebookDyeTub.html create mode 100644 Docs/types/RunebookEntry.html create mode 100644 Docs/types/RunebookGump.html create mode 100644 Docs/types/RunedPrism.html create mode 100644 Docs/types/RunedSwitch.html create mode 100644 Docs/types/RunicDovetailSaw.html create mode 100644 Docs/types/RunicHammer.html create mode 100644 Docs/types/RunicSewingKit.html create mode 100644 Docs/types/SBAlchemist.html create mode 100644 Docs/types/SBAnimalTrainer.html create mode 100644 Docs/types/SBArchitect.html create mode 100644 Docs/types/SBAxeWeapon.html create mode 100644 Docs/types/SBBaker.html create mode 100644 Docs/types/SBBanker.html create mode 100644 Docs/types/SBBard.html create mode 100644 Docs/types/SBBarkeeper.html create mode 100644 Docs/types/SBBeekeeper.html create mode 100644 Docs/types/SBBlacksmith.html create mode 100644 Docs/types/SBBowyer.html create mode 100644 Docs/types/SBButcher.html create mode 100644 Docs/types/SBCarpenter.html create mode 100644 Docs/types/SBChainmailArmor.html create mode 100644 Docs/types/SBCobbler.html create mode 100644 Docs/types/SBCook.html create mode 100644 Docs/types/SBDryad.html create mode 100644 Docs/types/SBFactionBoard.html create mode 100644 Docs/types/SBFactionBottle.html create mode 100644 Docs/types/SBFactionOre.html create mode 100644 Docs/types/SBFactionReagent.html create mode 100644 Docs/types/SBFarmer.html create mode 100644 Docs/types/SBFisherman.html create mode 100644 Docs/types/SBFortuneTeller.html create mode 100644 Docs/types/SBFurtrader.html create mode 100644 Docs/types/SBGlassblower.html create mode 100644 Docs/types/SBHairStylist.html create mode 100644 Docs/types/SBHealer.html create mode 100644 Docs/types/SBHelmetArmor.html create mode 100644 Docs/types/SBHerbalist.html create mode 100644 Docs/types/SBHolyMage.html create mode 100644 Docs/types/SBHouseDeed.html create mode 100644 Docs/types/SBInfo.html create mode 100644 Docs/types/SBInnKeeper.html create mode 100644 Docs/types/SBJewel.html create mode 100644 Docs/types/SBKeeperOfChivalry.html create mode 100644 Docs/types/SBKnifeWeapon.html create mode 100644 Docs/types/SBLeatherArmor.html create mode 100644 Docs/types/SBLeatherWorker.html create mode 100644 Docs/types/SBMaceWeapon.html create mode 100644 Docs/types/SBMage.html create mode 100644 Docs/types/SBMapmaker.html create mode 100644 Docs/types/SBMetalShields.html create mode 100644 Docs/types/SBMiller.html create mode 100644 Docs/types/SBMiner.html create mode 100644 Docs/types/SBMonk.html create mode 100644 Docs/types/SBPlateArmor.html create mode 100644 Docs/types/SBPlayerBarkeeper.html create mode 100644 Docs/types/SBPoleArmWeapon.html create mode 100644 Docs/types/SBProvisioner.html create mode 100644 Docs/types/SBRancher.html create mode 100644 Docs/types/SBRangedWeapon.html create mode 100644 Docs/types/SBRanger.html create mode 100644 Docs/types/SBRealEstateBroker.html create mode 100644 Docs/types/SBRingmailArmor.html create mode 100644 Docs/types/SBSEArmor.html create mode 100644 Docs/types/SBSEBowyer.html create mode 100644 Docs/types/SBSECarpenter.html create mode 100644 Docs/types/SBSECook.html create mode 100644 Docs/types/SBSEFood.html create mode 100644 Docs/types/SBSEHats.html create mode 100644 Docs/types/SBSELeatherArmor.html create mode 100644 Docs/types/SBSEWeapons.html create mode 100644 Docs/types/SBScribe.html create mode 100644 Docs/types/SBShipwright.html create mode 100644 Docs/types/SBSmithTools.html create mode 100644 Docs/types/SBSpearForkWeapon.html create mode 100644 Docs/types/SBStavesWeapon.html create mode 100644 Docs/types/SBStoneCrafter.html create mode 100644 Docs/types/SBStuddedArmor.html create mode 100644 Docs/types/SBSwordWeapon.html create mode 100644 Docs/types/SBTailor.html create mode 100644 Docs/types/SBTanner.html create mode 100644 Docs/types/SBTavernKeeper.html create mode 100644 Docs/types/SBThief.html create mode 100644 Docs/types/SBTinker.html create mode 100644 Docs/types/SBVagabond.html create mode 100644 Docs/types/SBVarietyDealer.html create mode 100644 Docs/types/SBVeterinarian.html create mode 100644 Docs/types/SBWaiter.html create mode 100644 Docs/types/SBWeaponSmith.html create mode 100644 Docs/types/SBWeaver.html create mode 100644 Docs/types/SBWoodenShields.html create mode 100644 Docs/types/SHTeleComponent.html create mode 100644 Docs/types/SHTeleporter.html create mode 100644 Docs/types/SHTeleporterCreator.html create mode 100644 Docs/types/SLWarHorse.html create mode 100644 Docs/types/SOS.html create mode 100644 Docs/types/SackFlour.html create mode 100644 Docs/types/SacredJourneySpell.html create mode 100644 Docs/types/SacrificeTarget.html create mode 100644 Docs/types/SacrificeVirtue.html create mode 100644 Docs/types/SacrificialAltarAddon.html create mode 100644 Docs/types/SacrificialAltarDeed.html create mode 100644 Docs/types/SaddleArtifact.html create mode 100644 Docs/types/Sai.html create mode 100644 Docs/types/SakeArtifact.html create mode 100644 Docs/types/SalvageAllEntry.html create mode 100644 Docs/types/SalvageBag.html create mode 100644 Docs/types/SalvageClothEntry.html create mode 100644 Docs/types/SalvageIngotsEntry.html create mode 100644 Docs/types/SamaritanRobe.html create mode 100644 Docs/types/Samurai.html create mode 100644 Docs/types/SamuraiHelm.html create mode 100644 Docs/types/SamuraiMove.html create mode 100644 Docs/types/SamuraiSpell.html create mode 100644 Docs/types/SamuraiTabi.html create mode 100644 Docs/types/Sand.html create mode 100644 Docs/types/SandFlagstones.html create mode 100644 Docs/types/SandGreenThornsEffect.html create mode 100644 Docs/types/SandMiningBook.html create mode 100644 Docs/types/SandStonePatio.html create mode 100644 Docs/types/SandVortex.html create mode 100644 Docs/types/Sandals.html create mode 100644 Docs/types/SandstoneFireplaceEastAddon.html create mode 100644 Docs/types/SandstoneFireplaceEastDeed.html create mode 100644 Docs/types/SandstoneFireplaceSouthAddon.html create mode 100644 Docs/types/SandstoneFireplaceSouthDeed.html create mode 100644 Docs/types/SandstoneFloorN.html create mode 100644 Docs/types/SandstoneFloorW.html create mode 100644 Docs/types/SandstoneFountainAddon.html create mode 100644 Docs/types/SandstonePatioDeed.html create mode 100644 Docs/types/Sapphire.html create mode 100644 Docs/types/Satyr.html create mode 100644 Docs/types/Sausage.html create mode 100644 Docs/types/SausagePizza.html create mode 100644 Docs/types/Savage.html create mode 100644 Docs/types/SavageMask.html create mode 100644 Docs/types/SavageRider.html create mode 100644 Docs/types/SavageRidgeback.html create mode 100644 Docs/types/SavageShaman.html create mode 100644 Docs/types/SaveFlag.html create mode 100644 Docs/types/SaveFlags.html create mode 100644 Docs/types/SaveMetrics.html create mode 100644 Docs/types/SaveOption.html create mode 100644 Docs/types/SaveStrategy.html create mode 100644 Docs/types/Saw.html create mode 100644 Docs/types/SawTrap.html create mode 100644 Docs/types/SawTrapType.html create mode 100644 Docs/types/ScaleType.html create mode 100644 Docs/types/ScaledSwampDragon.html create mode 100644 Docs/types/Scales.html create mode 100644 Docs/types/ScarecrowAddon.html create mode 100644 Docs/types/ScarecrowComponent.html create mode 100644 Docs/types/ScarecrowDeed.html create mode 100644 Docs/types/Scepter.html create mode 100644 Docs/types/Schmendrick.html create mode 100644 Docs/types/SchmendrickApprenticeCorpse.html create mode 100644 Docs/types/SchmendrickConversation.html create mode 100644 Docs/types/SchmendrickScrollOfPower.html create mode 100644 Docs/types/Scimitar.html create mode 100644 Docs/types/Scissors.html create mode 100644 Docs/types/ScoreEntry.html create mode 100644 Docs/types/Scorp.html create mode 100644 Docs/types/Scorpion.html create mode 100644 Docs/types/Scourge.html create mode 100644 Docs/types/Scribe.html create mode 100644 Docs/types/ScribeBag.html create mode 100644 Docs/types/ScribeStone.html create mode 100644 Docs/types/ScribesPen.html create mode 100644 Docs/types/ScriptCompiler.html create mode 100644 Docs/types/ScrollMessage.html create mode 100644 Docs/types/ScrollOfAbraxus.html create mode 100644 Docs/types/ScrollOfAbraxusGump.html create mode 100644 Docs/types/ScrollofAlacrity.html create mode 100644 Docs/types/ScrollofTranscendence.html create mode 100644 Docs/types/Sculptor.html create mode 100644 Docs/types/Sculpture1Artifact.html create mode 100644 Docs/types/Sculpture2Artifact.html create mode 100644 Docs/types/Scythe.html create mode 100644 Docs/types/SeaChart.html create mode 100644 Docs/types/SeaHorse.html create mode 100644 Docs/types/SeaSerpent.html create mode 100644 Docs/types/SeahorseStatuette.html create mode 100644 Docs/types/SearchForSwordConversation.html create mode 100644 Docs/types/SearchForSwordObjective.html create mode 100644 Docs/types/SearchSelectionCallback.html create mode 100644 Docs/types/SeasonChange.html create mode 100644 Docs/types/SecondHorusConversation.html create mode 100644 Docs/types/SecondKillObjective.html create mode 100644 Docs/types/SecondTrialAttackConversation.html create mode 100644 Docs/types/SecondTrialAttackObjective.html create mode 100644 Docs/types/SecondTrialIntroConversation.html create mode 100644 Docs/types/SecondTrialIntroObjective.html create mode 100644 Docs/types/SecondTrialReturnObjective.html create mode 100644 Docs/types/SecretDungeonDoor.html create mode 100644 Docs/types/SecretLightWoodDoor.html create mode 100644 Docs/types/SecretStoneDoor1.html create mode 100644 Docs/types/SecretStoneDoor2.html create mode 100644 Docs/types/SecretStoneDoor3.html create mode 100644 Docs/types/SecretWoodenDoor.html create mode 100644 Docs/types/Sector.html create mode 100644 Docs/types/SectorEnumerator.html create mode 100644 Docs/types/SectorEnumeratorType.html create mode 100644 Docs/types/SecureAccessResult.html create mode 100644 Docs/types/SecureInfo.html create mode 100644 Docs/types/SecureLevel.html create mode 100644 Docs/types/SecureTarget.html create mode 100644 Docs/types/SecureTrade.html create mode 100644 Docs/types/SecureTradeContainer.html create mode 100644 Docs/types/SecureTradeEquip.html create mode 100644 Docs/types/SecureTradeEquip6017.html create mode 100644 Docs/types/SecureTradeInfo.html create mode 100644 Docs/types/Seed.html create mode 100644 Docs/types/SeekerOfAdventure.html create mode 100644 Docs/types/SeerRobe.html create mode 100644 Docs/types/SelectSkillGump.html create mode 100644 Docs/types/SelfCommandImplementor.html create mode 100644 Docs/types/SellItemResponse.html create mode 100644 Docs/types/SellItemState.html create mode 100644 Docs/types/Semidar.html create mode 100644 Docs/types/SendQueue.html create mode 100644 Docs/types/SendQueueEntry.html create mode 100644 Docs/types/SendTarget.html create mode 100644 Docs/types/Sequence.html create mode 100644 Docs/types/SequentialFileWriter.html create mode 100644 Docs/types/Serado.html create mode 100644 Docs/types/Serial.html create mode 100644 Docs/types/SerialCommandImplementor.html create mode 100644 Docs/types/SerpentPillar.html create mode 100644 Docs/types/SerpentPillarAddon.html create mode 100644 Docs/types/SerpentineDragon.html create mode 100644 Docs/types/SerpentsFang.html create mode 100644 Docs/types/ServantOfSemidar.html create mode 100644 Docs/types/ServerChange.html create mode 100644 Docs/types/ServerInfo.html create mode 100644 Docs/types/ServerList.html create mode 100644 Docs/types/ServerListEventArgs.html create mode 100644 Docs/types/ServerListEventHandler.html create mode 100644 Docs/types/ServerStartedEventHandler.html create mode 100644 Docs/types/SetAbilityEventArgs.html create mode 100644 Docs/types/SetAbilityEventHandler.html create mode 100644 Docs/types/SetArrow.html create mode 100644 Docs/types/SetArrowHS.html create mode 100644 Docs/types/SetBodyGump.html create mode 100644 Docs/types/SetCommand.html create mode 100644 Docs/types/SetCustomEnumGump.html create mode 100644 Docs/types/SetGump.html create mode 100644 Docs/types/SetListOptionGump.html create mode 100644 Docs/types/SetObjectGump.html create mode 100644 Docs/types/SetObjectTarget.html create mode 100644 Docs/types/SetPoint2DGump.html create mode 100644 Docs/types/SetPoint3DGump.html create mode 100644 Docs/types/SetPricePrompt.html create mode 100644 Docs/types/SetSecureLevelEntry.html create mode 100644 Docs/types/SetSecureLevelGump.html create mode 100644 Docs/types/SetTimeSpanGump.html create mode 100644 Docs/types/SetTitlePrompt.html create mode 100644 Docs/types/SetToDecorativeGump.html create mode 100644 Docs/types/SetWarMode.html create mode 100644 Docs/types/SettleTimer.html create mode 100644 Docs/types/SeventhTrialIntroConversation.html create mode 100644 Docs/types/SeventhTrialIntroObjective.html create mode 100644 Docs/types/SeventhTrialReturnObjective.html create mode 100644 Docs/types/Sewerrat.html create mode 100644 Docs/types/SewingKit.html create mode 100644 Docs/types/Sextant.html create mode 100644 Docs/types/SextantParts.html create mode 100644 Docs/types/Shade.html create mode 100644 Docs/types/ShadowDancerLeggings.html create mode 100644 Docs/types/ShadowFiend.html create mode 100644 Docs/types/ShadowIronElemental.html create mode 100644 Docs/types/ShadowIronGranite.html create mode 100644 Docs/types/ShadowIronIngot.html create mode 100644 Docs/types/ShadowIronOre.html create mode 100644 Docs/types/ShadowKnight.html create mode 100644 Docs/types/ShadowStrike.html create mode 100644 Docs/types/ShadowWisp.html create mode 100644 Docs/types/ShadowWispFamiliar.html create mode 100644 Docs/types/ShadowWyrm.html create mode 100644 Docs/types/Shadowjump.html create mode 100644 Docs/types/Shadowlords.html create mode 100644 Docs/types/Shaft.html create mode 100644 Docs/types/ShaminoCrossbow.html create mode 100644 Docs/types/ShardPollGump.html create mode 100644 Docs/types/ShardPollOption.html create mode 100644 Docs/types/ShardPollPrompt.html create mode 100644 Docs/types/ShardPoller.html create mode 100644 Docs/types/ShardThrasher.html create mode 100644 Docs/types/SharedAccountComparer.html create mode 100644 Docs/types/SheafOfHay.html create mode 100644 Docs/types/Sheep.html create mode 100644 Docs/types/SheetMusicOfferGump.html create mode 100644 Docs/types/ShepherdsCrook.html create mode 100644 Docs/types/SheriffGump.html create mode 100644 Docs/types/ShieldOfInvulnerability.html create mode 100644 Docs/types/ShipModelOfTheHMSCape.html create mode 100644 Docs/types/ShipwreckedItem.html create mode 100644 Docs/types/Shipwright.html create mode 100644 Docs/types/Shirt.html create mode 100644 Docs/types/Shoes.html create mode 100644 Docs/types/ShojiLantern.html create mode 100644 Docs/types/ShojiScreen.html create mode 100644 Docs/types/ShopFlags.html create mode 100644 Docs/types/ShopInfo.html create mode 100644 Docs/types/ShopNamePrompt.html create mode 100644 Docs/types/ShortBeard.html create mode 100644 Docs/types/ShortCabinet.html create mode 100644 Docs/types/ShortHair.html create mode 100644 Docs/types/ShortMusicStand.html create mode 100644 Docs/types/ShortPants.html create mode 100644 Docs/types/ShortSpear.html create mode 100644 Docs/types/Shovel.html create mode 100644 Docs/types/ShowStew.html create mode 100644 Docs/types/ShrineOfWisdomAddon.html create mode 100644 Docs/types/ShrineOfWisdomComponent.html create mode 100644 Docs/types/ShrinkTable.html create mode 100644 Docs/types/ShroudOfDeciet.html create mode 100644 Docs/types/Shuriken.html create mode 100644 Docs/types/ShutdownEventArgs.html create mode 100644 Docs/types/ShutdownEventHandler.html create mode 100644 Docs/types/Sigil.html create mode 100644 Docs/types/Sign.html create mode 100644 Docs/types/SignEntry.html create mode 100644 Docs/types/SignFacing.html create mode 100644 Docs/types/SignParser.html create mode 100644 Docs/types/SignType.html create mode 100644 Docs/types/Silvani.html create mode 100644 Docs/types/SilvanisFeywoodBow.html create mode 100644 Docs/types/Silver.html create mode 100644 Docs/types/SilverBeadNecklace.html create mode 100644 Docs/types/SilverBracelet.html create mode 100644 Docs/types/SilverEarrings.html create mode 100644 Docs/types/SilverGivenEntry.html create mode 100644 Docs/types/SilverNecklace.html create mode 100644 Docs/types/SilverRing.html create mode 100644 Docs/types/SilverSerpent.html create mode 100644 Docs/types/SilverSteed.html create mode 100644 Docs/types/SilverWire.html create mode 100644 Docs/types/SimplePrompt.html create mode 100644 Docs/types/SimpleStatePrompt-T-.html create mode 100644 Docs/types/SimpleStatePrompt.html create mode 100644 Docs/types/SimpleStateTarget-T-.html create mode 100644 Docs/types/SimpleStateTarget.html create mode 100644 Docs/types/SimpleTarget.html create mode 100644 Docs/types/SingleCommandImplementor.html create mode 100644 Docs/types/SitOnTheStoolObjective.html create mode 100644 Docs/types/SixthTrialIntroConversation.html create mode 100644 Docs/types/SixthTrialIntroObjective.html create mode 100644 Docs/types/SixthTrialReturnObjective.html create mode 100644 Docs/types/SkaraBrae.html create mode 100644 Docs/types/SkeletalDragon.html create mode 100644 Docs/types/SkeletalKnight.html create mode 100644 Docs/types/SkeletalMage.html create mode 100644 Docs/types/SkeletalMount.html create mode 100644 Docs/types/Skeleton.html create mode 100644 Docs/types/Skill.html create mode 100644 Docs/types/SkillChange.html create mode 100644 Docs/types/SkillCheck.html create mode 100644 Docs/types/SkillCheckDirectLocationHandler.html create mode 100644 Docs/types/SkillCheckDirectTargetHandler.html create mode 100644 Docs/types/SkillCheckLocationHandler.html create mode 100644 Docs/types/SkillCheckTargetHandler.html create mode 100644 Docs/types/SkillDistribution.html create mode 100644 Docs/types/SkillInfo.html create mode 100644 Docs/types/SkillLock.html create mode 100644 Docs/types/SkillLossContext.html create mode 100644 Docs/types/SkillMod.html create mode 100644 Docs/types/SkillName.html create mode 100644 Docs/types/SkillNameComparer.html create mode 100644 Docs/types/SkillNameValue.html create mode 100644 Docs/types/SkillTarget.html create mode 100644 Docs/types/SkillTeleporter.html create mode 100644 Docs/types/SkillUpdate.html create mode 100644 Docs/types/SkillUseCallback.html create mode 100644 Docs/types/Skillet.html create mode 100644 Docs/types/Skills.html create mode 100644 Docs/types/SkillsCommand.html create mode 100644 Docs/types/SkillsGump.html create mode 100644 Docs/types/SkillsGumpGroup.html create mode 100644 Docs/types/SkillsTarget.html create mode 100644 Docs/types/SkinnedDeerArtifact.html create mode 100644 Docs/types/SkinnedGoatArtifact.html create mode 100644 Docs/types/SkinningKnife.html create mode 100644 Docs/types/Skirt.html create mode 100644 Docs/types/SkitteringHopper.html create mode 100644 Docs/types/SkullCandleArtifact.html create mode 100644 Docs/types/SkullCap.html create mode 100644 Docs/types/SkullPileAddon.html create mode 100644 Docs/types/SkullPole.html create mode 100644 Docs/types/SlabOfBacon.html create mode 100644 Docs/types/SlayHenchmenConversation.html create mode 100644 Docs/types/SlayHenchmenObjective.html create mode 100644 Docs/types/SlayerEntry.html create mode 100644 Docs/types/SlayerGroup.html create mode 100644 Docs/types/SlayerName.html create mode 100644 Docs/types/SledgeHammer.html create mode 100644 Docs/types/Slice.html create mode 100644 Docs/types/SliceTimer.html create mode 100644 Docs/types/Slime.html create mode 100644 Docs/types/SlowAStarAlgorithm.html create mode 100644 Docs/types/SmallBOD.html create mode 100644 Docs/types/SmallBODAcceptGump.html create mode 100644 Docs/types/SmallBODGump.html create mode 100644 Docs/types/SmallBODTarget.html create mode 100644 Docs/types/SmallBagBall.html create mode 100644 Docs/types/SmallBedEastAddon.html create mode 100644 Docs/types/SmallBedEastDeed.html create mode 100644 Docs/types/SmallBedSouthAddon.html create mode 100644 Docs/types/SmallBedSouthDeed.html create mode 100644 Docs/types/SmallBlueBottle.html create mode 100644 Docs/types/SmallBlueFlask.html create mode 100644 Docs/types/SmallBoat.html create mode 100644 Docs/types/SmallBoatDeed.html create mode 100644 Docs/types/SmallBrickHouseDeed.html create mode 100644 Docs/types/SmallBrownBottle.html create mode 100644 Docs/types/SmallBulkEntry.html create mode 100644 Docs/types/SmallCrate.html create mode 100644 Docs/types/SmallDockedBoat.html create mode 100644 Docs/types/SmallDockedDragonBoat.html create mode 100644 Docs/types/SmallDragonBoat.html create mode 100644 Docs/types/SmallDragonBoatDeed.html create mode 100644 Docs/types/SmallEmptyFlask.html create mode 100644 Docs/types/SmallEmptyPot.html create mode 100644 Docs/types/SmallFishingNetAddon.html create mode 100644 Docs/types/SmallFishingNetComponent.html create mode 100644 Docs/types/SmallFishingNetDeed.html create mode 100644 Docs/types/SmallFlask.html create mode 100644 Docs/types/SmallForgeAddon.html create mode 100644 Docs/types/SmallForgeDeed.html create mode 100644 Docs/types/SmallGreenBottle.html create mode 100644 Docs/types/SmallGreenBottle2.html create mode 100644 Docs/types/SmallOldHouse.html create mode 100644 Docs/types/SmallPlateJingasa.html create mode 100644 Docs/types/SmallPumpkin.html create mode 100644 Docs/types/SmallRedFlask.html create mode 100644 Docs/types/SmallShop.html create mode 100644 Docs/types/SmallSmithBOD.html create mode 100644 Docs/types/SmallStretchedHideEastAddon.html create mode 100644 Docs/types/SmallStretchedHideEastDeed.html create mode 100644 Docs/types/SmallStretchedHideSouthAddon.html create mode 100644 Docs/types/SmallStretchedHideSouthDeed.html create mode 100644 Docs/types/SmallTailorBOD.html create mode 100644 Docs/types/SmallTower.html create mode 100644 Docs/types/SmallTowerDeed.html create mode 100644 Docs/types/SmallTowerSculpture.html create mode 100644 Docs/types/SmallUrn.html create mode 100644 Docs/types/SmallVioletBottle.html create mode 100644 Docs/types/SmallWatermelon.html create mode 100644 Docs/types/SmallYellowFlask.html create mode 100644 Docs/types/SmeltResult.html create mode 100644 Docs/types/SmithBag.html create mode 100644 Docs/types/SmithHammer.html create mode 100644 Docs/types/SmithRewardCalculator.html create mode 100644 Docs/types/SmithStone.html create mode 100644 Docs/types/SmokeBomb.html create mode 100644 Docs/types/SmoothingPlane.html create mode 100644 Docs/types/Snake.html create mode 100644 Docs/types/Snapshot.html create mode 100644 Docs/types/SnapshotCollection.html create mode 100644 Docs/types/SnapshotCollectionEnumerator.html create mode 100644 Docs/types/SnapshotHistory.html create mode 100644 Docs/types/SneakPastGuardiansConversation.html create mode 100644 Docs/types/SneakPastGuardiansObjective.html create mode 100644 Docs/types/Snooping.html create mode 100644 Docs/types/SnowElemental.html create mode 100644 Docs/types/SnowGreenThornsEffect.html create mode 100644 Docs/types/SnowLeopard.html create mode 100644 Docs/types/SnowPile.html create mode 100644 Docs/types/SnowPileDeco.html create mode 100644 Docs/types/SnowTarget.html create mode 100644 Docs/types/Snowman.html create mode 100644 Docs/types/SnowyTree.html create mode 100644 Docs/types/SocketConnectEventArgs.html create mode 100644 Docs/types/SocketConnectEventHandler.html create mode 100644 Docs/types/SocketOptions.html create mode 100644 Docs/types/SolenAntHole.html create mode 100644 Docs/types/SolenAntHoleComponent.html create mode 100644 Docs/types/SolenFriendship.html create mode 100644 Docs/types/SolenHelper.html create mode 100644 Docs/types/SolenMatriarchQuest.html create mode 100644 Docs/types/SongOfSamlethe.html create mode 100644 Docs/types/SongWovenMantle.html create mode 100644 Docs/types/SortCompiler.html create mode 100644 Docs/types/SortExtension.html create mode 100644 Docs/types/SortMethod.html create mode 100644 Docs/types/SoulSeeker.html create mode 100644 Docs/types/SoulStone.html create mode 100644 Docs/types/SoulstoneFragment.html create mode 100644 Docs/types/SoulstoneFragmentToken.html create mode 100644 Docs/types/SoundEffectTimer.html create mode 100644 Docs/types/SoundTimer.html create mode 100644 Docs/types/Spam.html create mode 100644 Docs/types/SpawnDefinition.html create mode 100644 Docs/types/SpawnEntry.html create mode 100644 Docs/types/SpawnGroup.html create mode 100644 Docs/types/SpawnGroupElement.html create mode 100644 Docs/types/SpawnItem.html create mode 100644 Docs/types/SpawnMobile.html create mode 100644 Docs/types/SpawnPersistence.html create mode 100644 Docs/types/SpawnTimer.html create mode 100644 Docs/types/SpawnTreasureChest.html create mode 100644 Docs/types/SpawnType.html create mode 100644 Docs/types/SpawnZLevel.html create mode 100644 Docs/types/SpawnedOrcishLord.html create mode 100644 Docs/types/Spawner.html create mode 100644 Docs/types/SpawnerGump.html create mode 100644 Docs/types/SpawnerType.html create mode 100644 Docs/types/SpeakCavePasswordObjective.html create mode 100644 Docs/types/SpeakPasswordEntry.html create mode 100644 Docs/types/Spear.html create mode 100644 Docs/types/SpecialBeardDye.html create mode 100644 Docs/types/SpecialBeardDyeEntry.html create mode 100644 Docs/types/SpecialBeardDyeGump.html create mode 100644 Docs/types/SpecialDyeTub.html create mode 100644 Docs/types/SpecialEndConversation.html create mode 100644 Docs/types/SpecialFishingNet.html create mode 100644 Docs/types/SpecialHairDye.html create mode 100644 Docs/types/SpecialHairDyeEntry.html create mode 100644 Docs/types/SpecialHairDyeGump.html create mode 100644 Docs/types/SpecialMove.html create mode 100644 Docs/types/SpecialMoveContext.html create mode 100644 Docs/types/SpecialMoveTimer.html create mode 100644 Docs/types/SpecialScroll.html create mode 100644 Docs/types/SpectralArmour.html create mode 100644 Docs/types/Spectre.html create mode 100644 Docs/types/SpeechEntry.html create mode 100644 Docs/types/SpeechEntrySorter.html create mode 100644 Docs/types/SpeechEventArgs.html create mode 100644 Docs/types/SpeechEventHandler.html create mode 100644 Docs/types/SpeechLog.html create mode 100644 Docs/types/SpeechLogEntry.html create mode 100644 Docs/types/SpeechLogGump.html create mode 100644 Docs/types/SpeechLogTarget.html create mode 100644 Docs/types/SpeedControl.html create mode 100644 Docs/types/SpeedInfo.html create mode 100644 Docs/types/Spell.html create mode 100644 Docs/types/SpellCircle.html create mode 100644 Docs/types/SpellCombo.html create mode 100644 Docs/types/SpellDamageTimer.html create mode 100644 Docs/types/SpellDamageTimerAOS.html create mode 100644 Docs/types/SpellHelper.html create mode 100644 Docs/types/SpellInfo.html create mode 100644 Docs/types/SpellRegistry.html create mode 100644 Docs/types/SpellScroll.html create mode 100644 Docs/types/SpellState.html create mode 100644 Docs/types/SpellWovenBritches.html create mode 100644 Docs/types/Spellbook.html create mode 100644 Docs/types/SpellbookContent.html create mode 100644 Docs/types/SpellbookContent6017.html create mode 100644 Docs/types/SpellbookType.html create mode 100644 Docs/types/SpellweavingBook.html create mode 100644 Docs/types/SpidersSilk.html create mode 100644 Docs/types/SpikeTrap.html create mode 100644 Docs/types/SpikeTrapType.html create mode 100644 Docs/types/SpinCallback.html create mode 100644 Docs/types/SpinTimer.html create mode 100644 Docs/types/SpinedHides.html create mode 100644 Docs/types/SpinedLeather.html create mode 100644 Docs/types/SpinningHourglass.html create mode 100644 Docs/types/SpinningwheelEastAddon.html create mode 100644 Docs/types/SpinningwheelEastDeed.html create mode 100644 Docs/types/SpinningwheelSouthAddon.html create mode 100644 Docs/types/SpinningwheelSouthDeed.html create mode 100644 Docs/types/SpiritOfTheTotem.html create mode 100644 Docs/types/SpiritSpeak.html create mode 100644 Docs/types/SpiritSpeakSpell.html create mode 100644 Docs/types/SpiritSpeakTimer.html create mode 100644 Docs/types/SplitCoconut.html create mode 100644 Docs/types/SpoolOfThread.html create mode 100644 Docs/types/Spoon.html create mode 100644 Docs/types/SpoonLeft.html create mode 100644 Docs/types/SpoonRight.html create mode 100644 Docs/types/Spreadsheet.html create mode 100644 Docs/types/Springs.html create mode 100644 Docs/types/Spyglass.html create mode 100644 Docs/types/SquareGozaMatEastAddon.html create mode 100644 Docs/types/SquareGozaMatEastDeed.html create mode 100644 Docs/types/SquareGozaMatSouthAddon.html create mode 100644 Docs/types/SquareGozaMatSouthDeed.html create mode 100644 Docs/types/Squash.html create mode 100644 Docs/types/Squirrel.html create mode 100644 Docs/types/SquirrelFormTalisman.html create mode 100644 Docs/types/SquirrelStatueEastAddon.html create mode 100644 Docs/types/SquirrelStatueEastDeed.html create mode 100644 Docs/types/SquirrelStatueSouthAddon.html create mode 100644 Docs/types/SquirrelStatueSouthDeed.html create mode 100644 Docs/types/StableEntry.html create mode 100644 Docs/types/StableTarget.html create mode 100644 Docs/types/StackEntry.html create mode 100644 Docs/types/StaffHistory.html create mode 100644 Docs/types/StaffInfo.html create mode 100644 Docs/types/StaffOfPower.html create mode 100644 Docs/types/StaffOfTheMagi.html create mode 100644 Docs/types/Stage.html create mode 100644 Docs/types/StainedOoze.html create mode 100644 Docs/types/StamTimer.html create mode 100644 Docs/types/StandardPlateKabuto.html create mode 100644 Docs/types/StandardSaveStrategy.html create mode 100644 Docs/types/StandingBrokenChairAddon.html create mode 100644 Docs/types/StandingBrokenChairComponent.html create mode 100644 Docs/types/StandingBrokenChairDeed.html create mode 100644 Docs/types/StarRoomGate.html create mode 100644 Docs/types/StarSapphire.html create mode 100644 Docs/types/Stat.html create mode 100644 Docs/types/StatCapScroll.html create mode 100644 Docs/types/StatLockInfo.html create mode 100644 Docs/types/StatLockType.html create mode 100644 Docs/types/StatMod.html create mode 100644 Docs/types/StatType.html create mode 100644 Docs/types/State.html create mode 100644 Docs/types/StateInfo.html create mode 100644 Docs/types/Static.html create mode 100644 Docs/types/StaticTarget.html create mode 100644 Docs/types/StaticTile.html create mode 100644 Docs/types/Statics.html create mode 100644 Docs/types/StatueEast.html create mode 100644 Docs/types/StatueEast2.html create mode 100644 Docs/types/StatueMaterial.html create mode 100644 Docs/types/StatueNorth.html create mode 100644 Docs/types/StatuePegasus.html create mode 100644 Docs/types/StatuePegasus2.html create mode 100644 Docs/types/StatuePose.html create mode 100644 Docs/types/StatueSouth.html create mode 100644 Docs/types/StatueSouth2.html create mode 100644 Docs/types/StatueSouthEast.html create mode 100644 Docs/types/StatueType.html create mode 100644 Docs/types/StatueWest.html create mode 100644 Docs/types/StatuetteDyeTub.html create mode 100644 Docs/types/StatusComparer.html create mode 100644 Docs/types/StatusGump.html create mode 100644 Docs/types/StatusPage.html create mode 100644 Docs/types/StealableArtifactsSpawner.html create mode 100644 Docs/types/StealableEntry.html create mode 100644 Docs/types/StealableInstance.html create mode 100644 Docs/types/Stealing.html create mode 100644 Docs/types/StealingTarget.html create mode 100644 Docs/types/Stealth.html create mode 100644 Docs/types/StitchersMittens.html create mode 100644 Docs/types/StolenItem.html create mode 100644 Docs/types/StoneAnkh.html create mode 100644 Docs/types/StoneAnkhComponent.html create mode 100644 Docs/types/StoneAnkhDeed.html create mode 100644 Docs/types/StoneChair.html create mode 100644 Docs/types/StoneCrafter.html create mode 100644 Docs/types/StoneFaceTrap.html create mode 100644 Docs/types/StoneFaceTrapNoDamage.html create mode 100644 Docs/types/StoneFaceTrapType.html create mode 100644 Docs/types/StoneFireplaceEastAddon.html create mode 100644 Docs/types/StoneFireplaceEastDeed.html create mode 100644 Docs/types/StoneFireplaceSouthAddon.html create mode 100644 Docs/types/StoneFireplaceSouthDeed.html create mode 100644 Docs/types/StoneFountainAddon.html create mode 100644 Docs/types/StoneGargoyle.html create mode 100644 Docs/types/StoneHarpy.html create mode 100644 Docs/types/StoneMiningBook.html create mode 100644 Docs/types/StoneOvenEastAddon.html create mode 100644 Docs/types/StoneOvenEastDeed.html create mode 100644 Docs/types/StoneOvenSouthAddon.html create mode 100644 Docs/types/StoneOvenSouthDeed.html create mode 100644 Docs/types/StonePaversDark.html create mode 100644 Docs/types/StonePaversLight.html create mode 100644 Docs/types/StonePaversMedium.html create mode 100644 Docs/types/StonePlasterHouseDeed.html create mode 100644 Docs/types/StoneStatueAddon.html create mode 100644 Docs/types/StoneStatueDeed.html create mode 100644 Docs/types/StoneWorkshopDeed.html create mode 100644 Docs/types/Stool.html create mode 100644 Docs/types/StopMusic.html create mode 100644 Docs/types/Stormgrip.html create mode 100644 Docs/types/Strandedness.html create mode 100644 Docs/types/StrangleScroll.html create mode 100644 Docs/types/StrangleSpell.html create mode 100644 Docs/types/StrawHat.html create mode 100644 Docs/types/StrengthPotion.html create mode 100644 Docs/types/StrengthScroll.html create mode 100644 Docs/types/StrengthSpell.html create mode 100644 Docs/types/StretchedHideArtifact.html create mode 100644 Docs/types/StringCondition.html create mode 100644 Docs/types/StringOperator.html create mode 100644 Docs/types/StrongBackpack.html create mode 100644 Docs/types/StrongBox.html create mode 100644 Docs/types/StrongBoxPuzzle.html create mode 100644 Docs/types/StrongMongbat.html create mode 100644 Docs/types/StrongWoodDoor.html create mode 100644 Docs/types/StrongholdDefinition.html create mode 100644 Docs/types/StrongholdMonolith.html create mode 100644 Docs/types/StrongholdRegion.html create mode 100644 Docs/types/StuckMenu.html create mode 100644 Docs/types/StuckMenuEntry.html create mode 100644 Docs/types/StuckMenuTarget.html create mode 100644 Docs/types/StuddedArms.html create mode 100644 Docs/types/StuddedBustierArms.html create mode 100644 Docs/types/StuddedChest.html create mode 100644 Docs/types/StuddedDo.html create mode 100644 Docs/types/StuddedGloves.html create mode 100644 Docs/types/StuddedGlovesOfMining.html create mode 100644 Docs/types/StuddedGorget.html create mode 100644 Docs/types/StuddedHaidate.html create mode 100644 Docs/types/StuddedHiroSode.html create mode 100644 Docs/types/StuddedLeggingsArtifact.html create mode 100644 Docs/types/StuddedLegs.html create mode 100644 Docs/types/StuddedMempo.html create mode 100644 Docs/types/StuddedSuneate.html create mode 100644 Docs/types/StuddedTunicArtifact.html create mode 100644 Docs/types/StudyNestsObjective.html create mode 100644 Docs/types/StudyOfSolenQuest.html create mode 100644 Docs/types/StudyState.html create mode 100644 Docs/types/StunRequestEventArgs.html create mode 100644 Docs/types/StunRequestEventHandler.html create mode 100644 Docs/types/SturdyPickaxe.html create mode 100644 Docs/types/SturdyShovel.html create mode 100644 Docs/types/Subdue.html create mode 100644 Docs/types/Succubus.html create mode 100644 Docs/types/SuitOfGoldArmorAddon.html create mode 100644 Docs/types/SuitOfGoldArmorComponent.html create mode 100644 Docs/types/SuitOfGoldArmorDeed.html create mode 100644 Docs/types/SuitOfSilverArmorAddon.html create mode 100644 Docs/types/SuitOfSilverArmorComponent.html create mode 100644 Docs/types/SuitOfSilverArmorDeed.html create mode 100644 Docs/types/SulfurousAsh.html create mode 100644 Docs/types/SummonAirElementalScroll.html create mode 100644 Docs/types/SummonCreatureScroll.html create mode 100644 Docs/types/SummonCreatureSpell.html create mode 100644 Docs/types/SummonDaemonScroll.html create mode 100644 Docs/types/SummonDaemonSpell.html create mode 100644 Docs/types/SummonEarthElementalScroll.html create mode 100644 Docs/types/SummonEntry.html create mode 100644 Docs/types/SummonFamiliar.html create mode 100644 Docs/types/SummonFamiliarEntry.html create mode 100644 Docs/types/SummonFamiliarGump.html create mode 100644 Docs/types/SummonFamiliarScroll.html create mode 100644 Docs/types/SummonFamiliarSpell.html create mode 100644 Docs/types/SummonFeyScroll.html create mode 100644 Docs/types/SummonFeySpell.html create mode 100644 Docs/types/SummonFiendScroll.html create mode 100644 Docs/types/SummonFiendSpell.html create mode 100644 Docs/types/SummonFireElementalScroll.html create mode 100644 Docs/types/SummonTimer.html create mode 100644 Docs/types/SummonWaterElementalScroll.html create mode 100644 Docs/types/SummonedAirElemental.html create mode 100644 Docs/types/SummonedAntLion.html create mode 100644 Docs/types/SummonedArcticOgreLord.html create mode 100644 Docs/types/SummonedBakeKitsune.html create mode 100644 Docs/types/SummonedBogling.html create mode 100644 Docs/types/SummonedBullFrog.html create mode 100644 Docs/types/SummonedChicken.html create mode 100644 Docs/types/SummonedCow.html create mode 100644 Docs/types/SummonedDaemon.html create mode 100644 Docs/types/SummonedDoppleganger.html create mode 100644 Docs/types/SummonedEarthElemental.html create mode 100644 Docs/types/SummonedFireElemental.html create mode 100644 Docs/types/SummonedFrostSpider.html create mode 100644 Docs/types/SummonedGreatHart.html create mode 100644 Docs/types/SummonedLavaSerpent.html create mode 100644 Docs/types/SummonedOrcBrute.html create mode 100644 Docs/types/SummonedPaladin.html create mode 100644 Docs/types/SummonedPaladinMoongate.html create mode 100644 Docs/types/SummonedPanther.html create mode 100644 Docs/types/SummonedSheep.html create mode 100644 Docs/types/SummonedSkeletalKnight.html create mode 100644 Docs/types/SummonedVorpalBunny.html create mode 100644 Docs/types/SummonedWailingBanshee.html create mode 100644 Docs/types/SummonedWaterElemental.html create mode 100644 Docs/types/SummoningAltar.html create mode 100644 Docs/types/SupportedFeatures.html create mode 100644 Docs/types/Surcoat.html create mode 100644 Docs/types/SurpriseAttack.html create mode 100644 Docs/types/SurpriseAttackInfo.html create mode 100644 Docs/types/SushiPlatter.html create mode 100644 Docs/types/SushiRolls.html create mode 100644 Docs/types/SwampDragon.html create mode 100644 Docs/types/SwampGreenThornsEffect.html create mode 100644 Docs/types/SwampTentacle.html create mode 100644 Docs/types/SwampTile.html create mode 100644 Docs/types/SwarmOfFlies.html create mode 100644 Docs/types/SweetDough.html create mode 100644 Docs/types/Swing.html create mode 100644 Docs/types/SwitchItem.html create mode 100644 Docs/types/SwordDisplay1NorthArtifact.html create mode 100644 Docs/types/SwordDisplay1WestArtifact.html create mode 100644 Docs/types/SwordDisplay2NorthArtifact.html create mode 100644 Docs/types/SwordDisplay2WestArtifact.html create mode 100644 Docs/types/SwordDisplay3EastArtifact.html create mode 100644 Docs/types/SwordDisplay3SouthArtifact.html create mode 100644 Docs/types/SwordDisplay4NorthArtifact.html create mode 100644 Docs/types/SwordDisplay4WestArtifact.html create mode 100644 Docs/types/SwordDisplay5NorthArtifact.html create mode 100644 Docs/types/SwordDisplay5WestArtifact.html create mode 100644 Docs/types/SwordOfTheStampede.html create mode 100644 Docs/types/SwordsOfProsperity.html create mode 100644 Docs/types/TBWarHorse.html create mode 100644 Docs/types/TCHelpGump.html create mode 100644 Docs/types/TableWithBlueClothAddon.html create mode 100644 Docs/types/TableWithBlueClothDeed.html create mode 100644 Docs/types/TableWithOrangeClothAddon.html create mode 100644 Docs/types/TableWithOrangeClothDeed.html create mode 100644 Docs/types/TableWithPurpleClothAddon.html create mode 100644 Docs/types/TableWithPurpleClothDeed.html create mode 100644 Docs/types/TableWithRedClothAddon.html create mode 100644 Docs/types/TableWithRedClothDeed.html create mode 100644 Docs/types/Tailor.html create mode 100644 Docs/types/TailorBag.html create mode 100644 Docs/types/TailorGuildmaster.html create mode 100644 Docs/types/TailorRewardCalculator.html create mode 100644 Docs/types/TailorStone.html create mode 100644 Docs/types/Taint.html create mode 100644 Docs/types/TaintedWool.html create mode 100644 Docs/types/TakeCareConversation.html create mode 100644 Docs/types/TaleOfThreeTribes.html create mode 100644 Docs/types/TalesOfVesperVol1.html create mode 100644 Docs/types/TalismanAttribute.html create mode 100644 Docs/types/TalismanForm.html create mode 100644 Docs/types/TalismanReleaseEntry.html create mode 100644 Docs/types/TalismanRemoval.html create mode 100644 Docs/types/TalismanSlayer.html create mode 100644 Docs/types/TalismanSlayerName.html create mode 100644 Docs/types/TalismanTarget.html create mode 100644 Docs/types/TalkEntry.html create mode 100644 Docs/types/TalkingToWisps.html create mode 100644 Docs/types/TallCabinet.html create mode 100644 Docs/types/TallElvenBedEastAddon.html create mode 100644 Docs/types/TallElvenBedEastDeed.html create mode 100644 Docs/types/TallElvenBedSouthAddon.html create mode 100644 Docs/types/TallElvenBedSouthDeed.html create mode 100644 Docs/types/TallMusicStand.html create mode 100644 Docs/types/TallStrawHat.html create mode 100644 Docs/types/TalonBite.html create mode 100644 Docs/types/TalonStrike.html create mode 100644 Docs/types/Tambourine.html create mode 100644 Docs/types/TambourineTassel.html create mode 100644 Docs/types/TameEntry.html create mode 100644 Docs/types/TamingDragons.html create mode 100644 Docs/types/TanBook.html create mode 100644 Docs/types/Tanner.html create mode 100644 Docs/types/Tapestry1N.html create mode 100644 Docs/types/Tapestry2N.html create mode 100644 Docs/types/Tapestry2W.html create mode 100644 Docs/types/Tapestry3N.html create mode 100644 Docs/types/Tapestry3W.html create mode 100644 Docs/types/Tapestry4N.html create mode 100644 Docs/types/Tapestry4W.html create mode 100644 Docs/types/Tapestry5N.html create mode 100644 Docs/types/Tapestry5W.html create mode 100644 Docs/types/Tapestry6N.html create mode 100644 Docs/types/Tapestry6W.html create mode 100644 Docs/types/TapestryOfSosaria.html create mode 100644 Docs/types/Target.html create mode 100644 Docs/types/TargetCallback.html create mode 100644 Docs/types/TargetCancelType.html create mode 100644 Docs/types/TargetCommands.html create mode 100644 Docs/types/TargetEffect.html create mode 100644 Docs/types/TargetFlags.html create mode 100644 Docs/types/TargetParticleEffect.html create mode 100644 Docs/types/TargetProfile.html create mode 100644 Docs/types/TargetReq.html create mode 100644 Docs/types/TargetStateCallback-T-.html create mode 100644 Docs/types/TargetStateCallback.html create mode 100644 Docs/types/TargetWeapon.html create mode 100644 Docs/types/TarotCardsArtifact.html create mode 100644 Docs/types/TasteID.html create mode 100644 Docs/types/TatteredAncientMummyWrapping.html create mode 100644 Docs/types/TattsukeHakama.html create mode 100644 Docs/types/TavaraSewel.html create mode 100644 Docs/types/TavarasJournal1.html create mode 100644 Docs/types/TavarasJournal11.html create mode 100644 Docs/types/TavarasJournal14.html create mode 100644 Docs/types/TavarasJournal16.html create mode 100644 Docs/types/TavarasJournal16b.html create mode 100644 Docs/types/TavarasJournal17.html create mode 100644 Docs/types/TavarasJournal19.html create mode 100644 Docs/types/TavarasJournal2.html create mode 100644 Docs/types/TavarasJournal3.html create mode 100644 Docs/types/TavarasJournal6.html create mode 100644 Docs/types/TavarasJournal7.html create mode 100644 Docs/types/TavarasJournal8.html create mode 100644 Docs/types/TavarasJournal9.html create mode 100644 Docs/types/TavernKeeper.html create mode 100644 Docs/types/TaxidermyKit.html create mode 100644 Docs/types/TeachEntry.html create mode 100644 Docs/types/TeachResult.html create mode 100644 Docs/types/TeapotNorthArtifact.html create mode 100644 Docs/types/TeapotWestArtifact.html create mode 100644 Docs/types/Tekagi.html create mode 100644 Docs/types/TeleCommand.html create mode 100644 Docs/types/TelekinesisSpell.html create mode 100644 Docs/types/TelekinisisScroll.html create mode 100644 Docs/types/TeleportScroll.html create mode 100644 Docs/types/TeleportSpell.html create mode 100644 Docs/types/TeleportTimer.html create mode 100644 Docs/types/Teleporter.html create mode 100644 Docs/types/TeleportersCreator.html create mode 100644 Docs/types/Telescope.html create mode 100644 Docs/types/TellCommand.html create mode 100644 Docs/types/TempNoHousingRegion.html create mode 100644 Docs/types/TerathanAvenger.html create mode 100644 Docs/types/TerathanDrone.html create mode 100644 Docs/types/TerathanMatriarch.html create mode 100644 Docs/types/TerathanWarrior.html create mode 100644 Docs/types/TerminateContractEntry.html create mode 100644 Docs/types/TerribleHatchlingsQuest.html create mode 100644 Docs/types/Tessen.html create mode 100644 Docs/types/TestCenter.html create mode 100644 Docs/types/Tetsubo.html create mode 100644 Docs/types/TextDefinition.html create mode 100644 Docs/types/TextRelay.html create mode 100644 Docs/types/ThatchedRoofCottageDeed.html create mode 100644 Docs/types/TheBeserkersMaul.html create mode 100644 Docs/types/TheDestroyer.html create mode 100644 Docs/types/TheDragonSlayer.html create mode 100644 Docs/types/TheDryadBow.html create mode 100644 Docs/types/TheFight.html create mode 100644 Docs/types/TheHorselord.html create mode 100644 Docs/types/TheMostKnowledgePerson.html create mode 100644 Docs/types/TheNightReaper.html create mode 100644 Docs/types/TheRobeOfBritanniaAri.html create mode 100644 Docs/types/TheSummoningQuest.html create mode 100644 Docs/types/TheTaskmaster.html create mode 100644 Docs/types/Theater.html create mode 100644 Docs/types/ThickGrayStoneWall.html create mode 100644 Docs/types/ThickGrayStoneWallTypes.html create mode 100644 Docs/types/Thief.html create mode 100644 Docs/types/ThiefAI.html create mode 100644 Docs/types/ThiefGuildmaster.html create mode 100644 Docs/types/ThighBoots.html create mode 100644 Docs/types/ThinBrickWall.html create mode 100644 Docs/types/ThinBrickWallTypes.html create mode 100644 Docs/types/ThinLongsword.html create mode 100644 Docs/types/ThinStoneWall.html create mode 100644 Docs/types/ThinStoneWallTypes.html create mode 100644 Docs/types/ThirdKillObjective.html create mode 100644 Docs/types/ThirdTrialIntroConversation.html create mode 100644 Docs/types/ThirdTrialIntroObjective.html create mode 100644 Docs/types/ThirdTrialKillConversation.html create mode 100644 Docs/types/ThirdTrialKillObjective.html create mode 100644 Docs/types/ThirdTrialReturnObjective.html create mode 100644 Docs/types/Throne.html create mode 100644 Docs/types/ThrottlePacketCallback.html create mode 100644 Docs/types/ThrowTarget.html create mode 100644 Docs/types/ThrowingDagger.html create mode 100644 Docs/types/ThunderstormScroll.html create mode 100644 Docs/types/ThunderstormSpell.html create mode 100644 Docs/types/TileData.html create mode 100644 Docs/types/TileFlag.html create mode 100644 Docs/types/TileList.html create mode 100644 Docs/types/TileMatrix.html create mode 100644 Docs/types/TileMatrixPatch.html create mode 100644 Docs/types/TileState.html create mode 100644 Docs/types/TilesAndEffect.html create mode 100644 Docs/types/TillerMan.html create mode 100644 Docs/types/TimberWolf.html create mode 100644 Docs/types/TimedSkillMod.html create mode 100644 Docs/types/TimeoutTimer.html create mode 100644 Docs/types/Timer.html create mode 100644 Docs/types/TimerCallback.html create mode 100644 Docs/types/TimerChangeEntry.html create mode 100644 Docs/types/TimerPriority.html create mode 100644 Docs/types/TimerProfile.html create mode 100644 Docs/types/TimerStateCallback-T-.html create mode 100644 Docs/types/TimerStateCallback.html create mode 100644 Docs/types/TimerThread.html create mode 100644 Docs/types/Tinker.html create mode 100644 Docs/types/TinkerGuildmaster.html create mode 100644 Docs/types/TinkerTools.html create mode 100644 Docs/types/TinkersTools.html create mode 100644 Docs/types/TinyRedBottle.html create mode 100644 Docs/types/TinyYellowBottle.html create mode 100644 Docs/types/Titan.html create mode 100644 Docs/types/TitansHammer.html create mode 100644 Docs/types/TitheEntry.html create mode 100644 Docs/types/TitheGoldObjective.html create mode 100644 Docs/types/TithingGump.html create mode 100644 Docs/types/TitleComparer.html create mode 100644 Docs/types/TitleInfo.html create mode 100644 Docs/types/Titles.html create mode 100644 Docs/types/ToTAdminGump.html create mode 100644 Docs/types/ToTRedeemGump.html create mode 100644 Docs/types/ToTTurnInGump.html create mode 100644 Docs/types/ToggleMiningStoneEntry.html create mode 100644 Docs/types/ToggleSpecialAbility.html create mode 100644 Docs/types/TomasDuringCollectingConversation.html create mode 100644 Docs/types/TomasONeerlan.html create mode 100644 Docs/types/TomasToysConversation.html create mode 100644 Docs/types/TomeOfEnlightenment.html create mode 100644 Docs/types/TomeOfLostKnowledge.html create mode 100644 Docs/types/Tongs.html create mode 100644 Docs/types/ToolKit.html create mode 100644 Docs/types/ToolQuality.html create mode 100644 Docs/types/TopicPrompt.html create mode 100644 Docs/types/Torch.html create mode 100644 Docs/types/TormentedChains.html create mode 100644 Docs/types/TormentedMinotaur.html create mode 100644 Docs/types/Torso.html create mode 100644 Docs/types/TotalRefreshPotion.html create mode 100644 Docs/types/TotalType.html create mode 100644 Docs/types/TotemOfVoid.html create mode 100644 Docs/types/Tourmaline.html create mode 100644 Docs/types/Tower.html create mode 100644 Docs/types/TowerDeed.html create mode 100644 Docs/types/TowerLanternArtifact.html create mode 100644 Docs/types/Town.html create mode 100644 Docs/types/TownCrier.html create mode 100644 Docs/types/TownCrierDurationPrompt.html create mode 100644 Docs/types/TownCrierEntry.html create mode 100644 Docs/types/TownCrierGump.html create mode 100644 Docs/types/TownCrierLinesPrompt.html create mode 100644 Docs/types/TownDefinition.html create mode 100644 Docs/types/TownMonolith.html create mode 100644 Docs/types/TownRegion.html create mode 100644 Docs/types/TownState.html create mode 100644 Docs/types/TownStone.html create mode 100644 Docs/types/TownStoneGump.html create mode 100644 Docs/types/ToxicElemental.html create mode 100644 Docs/types/TrackArrow.html create mode 100644 Docs/types/TrackTimer.html create mode 100644 Docs/types/TrackTypeDelegate.html create mode 100644 Docs/types/TrackWhatGump.html create mode 100644 Docs/types/TrackWhoGump.html create mode 100644 Docs/types/Tracking.html create mode 100644 Docs/types/TrackingInfo.html create mode 100644 Docs/types/TradeGlasses.html create mode 100644 Docs/types/TrainingDummy.html create mode 100644 Docs/types/TrainingDummyEastAddon.html create mode 100644 Docs/types/TrainingDummyEastDeed.html create mode 100644 Docs/types/TrainingDummySouthAddon.html create mode 100644 Docs/types/TrainingDummySouthDeed.html create mode 100644 Docs/types/TransferItem.html create mode 100644 Docs/types/TransformContext.html create mode 100644 Docs/types/TransformTimer.html create mode 100644 Docs/types/TransformationSpell.html create mode 100644 Docs/types/TransformationSpellHelper.html create mode 100644 Docs/types/TransientItem.html create mode 100644 Docs/types/TranslatedGargoyleJournal.html create mode 100644 Docs/types/TranslocationItem.html create mode 100644 Docs/types/TransportTimer.html create mode 100644 Docs/types/TrapCraft.html create mode 100644 Docs/types/TrapType.html create mode 100644 Docs/types/TrapableContainer.html create mode 100644 Docs/types/TrashBarrel.html create mode 100644 Docs/types/TrashChest.html create mode 100644 Docs/types/TravelCheckType.html create mode 100644 Docs/types/TravelValidator.html create mode 100644 Docs/types/TreasureChestDirt.html create mode 100644 Docs/types/TreasureLevel.html create mode 100644 Docs/types/TreasureMap.html create mode 100644 Docs/types/TreasureMapChest.html create mode 100644 Docs/types/TreasureRegion.html create mode 100644 Docs/types/TreasureResetTimer.html create mode 100644 Docs/types/TreasureTrinketGlasses.html create mode 100644 Docs/types/TreasuresOfTokuno.html create mode 100644 Docs/types/TreasuresOfTokunoEra.html create mode 100644 Docs/types/TreasuresOfTokunoPersistance.html create mode 100644 Docs/types/TreatiseOnAlchemy.html create mode 100644 Docs/types/TreeStump.html create mode 100644 Docs/types/TreeStumpDeed.html create mode 100644 Docs/types/TreeTrunk.html create mode 100644 Docs/types/Treefellow.html create mode 100644 Docs/types/TribalBerry.html create mode 100644 Docs/types/TribalMask.html create mode 100644 Docs/types/TribalPaint.html create mode 100644 Docs/types/TribalSpear.html create mode 100644 Docs/types/TricorneHat.html create mode 100644 Docs/types/Trinsic.html create mode 100644 Docs/types/TripTimeResponse.html create mode 100644 Docs/types/TripleFanNorthArtifact.html create mode 100644 Docs/types/TripleFanWestArtifact.html create mode 100644 Docs/types/Troglodyte.html create mode 100644 Docs/types/Troll.html create mode 100644 Docs/types/TrophyAddon.html create mode 100644 Docs/types/TrophyDeed.html create mode 100644 Docs/types/TrophyInfo.html create mode 100644 Docs/types/TropicalBird.html create mode 100644 Docs/types/TrueBritannians.html create mode 100644 Docs/types/TrulyRareFish.html create mode 100644 Docs/types/TsukiWolf.html create mode 100644 Docs/types/Tub.html create mode 100644 Docs/types/Tunic.html create mode 100644 Docs/types/TunicOfFire.html create mode 100644 Docs/types/TurnTimer.html create mode 100644 Docs/types/Turnip.html create mode 100644 Docs/types/Turquoise.html create mode 100644 Docs/types/Twaulo.html create mode 100644 Docs/types/TwoHandedAxe.html create mode 100644 Docs/types/TwoPigTails.html create mode 100644 Docs/types/TwoStoryHouse.html create mode 100644 Docs/types/TwoStoryStonePlasterHouseDeed.html create mode 100644 Docs/types/TwoStoryVilla.html create mode 100644 Docs/types/TwoStoryWoodPlasterHouseDeed.html create mode 100644 Docs/types/TypeAliasAttribute.html create mode 100644 Docs/types/TypeCache.html create mode 100644 Docs/types/TypeComparer.html create mode 100644 Docs/types/TypeCondition.html create mode 100644 Docs/types/TypeInfo.html create mode 100644 Docs/types/TypeNameComparer.html create mode 100644 Docs/types/TypeTable.html create mode 100644 Docs/types/TypeTileButtonInfo.html create mode 100644 Docs/types/TypedEnumerator.html create mode 100644 Docs/types/UOAMVendorGenerator.html create mode 100644 Docs/types/UOGInfo.html create mode 100644 Docs/types/UTripTimeResponse.html create mode 100644 Docs/types/UnbakedApplePie.html create mode 100644 Docs/types/UnbakedFruitPie.html create mode 100644 Docs/types/UnbakedMeatPie.html create mode 100644 Docs/types/UnbakedPeachCobbler.html create mode 100644 Docs/types/UnbakedPumpkinPie.html create mode 100644 Docs/types/UnbakedQuiche.html create mode 100644 Docs/types/UnbufferedFileStream.html create mode 100644 Docs/types/UncookedCheesePizza.html create mode 100644 Docs/types/UncookedSausagePizza.html create mode 100644 Docs/types/UncutCloth.html create mode 100644 Docs/types/UnfinishedBarrel.html create mode 100644 Docs/types/UnhideTimer.html create mode 100644 Docs/types/UnholyBone.html create mode 100644 Docs/types/UnholyFamiliar.html create mode 100644 Docs/types/UnholyItem.html create mode 100644 Docs/types/UnholySense.html create mode 100644 Docs/types/UnholyShield.html create mode 100644 Docs/types/UnholySteed.html create mode 100644 Docs/types/UnholyWord.html create mode 100644 Docs/types/UnicodeMessage.html create mode 100644 Docs/types/UnicodePrompt.html create mode 100644 Docs/types/Unicorn.html create mode 100644 Docs/types/UnkD3.html create mode 100644 Docs/types/UnknownPropertyException.html create mode 100644 Docs/types/UnloadEntry.html create mode 100644 Docs/types/UnlockScroll.html create mode 100644 Docs/types/UnlockSpell.html create mode 100644 Docs/types/UnlockTarget.html create mode 100644 Docs/types/UnmadeBedAddon.html create mode 100644 Docs/types/UnmadeBedDeed.html create mode 100644 Docs/types/UnsettlingPortraitAddon.html create mode 100644 Docs/types/UnsettlingPortraitComponent.html create mode 100644 Docs/types/UnsettlingPortraitDeed.html create mode 100644 Docs/types/UnsummonTimer.html create mode 100644 Docs/types/UpdateAllTimer.html create mode 100644 Docs/types/UpdateSecureTrade.html create mode 100644 Docs/types/UpdateStatueAnimation.html create mode 100644 Docs/types/Urn1Artifact.html create mode 100644 Docs/types/Urn2Artifact.html create mode 100644 Docs/types/UsageAttribute.html create mode 100644 Docs/types/UseBagEntry.html create mode 100644 Docs/types/UseCallingScrollObjective.html create mode 100644 Docs/types/UseTeleporterConversation.html create mode 100644 Docs/types/UseTeleporterObjective.html create mode 100644 Docs/types/UserInfo.html create mode 100644 Docs/types/Utility.html create mode 100644 Docs/types/UtilityItem.html create mode 100644 Docs/types/Uzeraan.html create mode 100644 Docs/types/UzeraanDaemonBloodConversation.html create mode 100644 Docs/types/UzeraanDaemonBoneConversation.html create mode 100644 Docs/types/UzeraanFertileDirtConversation.html create mode 100644 Docs/types/UzeraanFirstTaskConversation.html create mode 100644 Docs/types/UzeraanReportConversation.html create mode 100644 Docs/types/UzeraanScrollOfPowerConversation.html create mode 100644 Docs/types/UzeraanTitheConversation.html create mode 100644 Docs/types/UzeraanTurmoilHorn.html create mode 100644 Docs/types/UzeraanTurmoilQuest.html create mode 100644 Docs/types/UzeraanTurmoilTeleporter.html create mode 100644 Docs/types/Vagabond.html create mode 100644 Docs/types/ValentinesCard.html create mode 100644 Docs/types/ValentinesCardEast.html create mode 100644 Docs/types/ValentinesCardSouth.html create mode 100644 Docs/types/ValorVirtue.html create mode 100644 Docs/types/ValoriteElemental.html create mode 100644 Docs/types/ValoriteGranite.html create mode 100644 Docs/types/ValoriteIngot.html create mode 100644 Docs/types/ValoriteOre.html create mode 100644 Docs/types/VampireBat.html create mode 100644 Docs/types/VampireBatFamiliar.html create mode 100644 Docs/types/VampiricEmbraceScroll.html create mode 100644 Docs/types/VampiricEmbraceSpell.html create mode 100644 Docs/types/Vandyke.html create mode 100644 Docs/types/VanityAddon.html create mode 100644 Docs/types/VanityDeed.html create mode 100644 Docs/types/VanquishDaemonConversation.html create mode 100644 Docs/types/VanquishDaemonObjective.html create mode 100644 Docs/types/VarietyDealer.html create mode 100644 Docs/types/Vase.html create mode 100644 Docs/types/VaultOfSecretsBarrier.html create mode 100644 Docs/types/VaultOfSecretsConversation.html create mode 100644 Docs/types/VendorAI.html create mode 100644 Docs/types/VendorBackpack.html create mode 100644 Docs/types/VendorBuyContent.html create mode 100644 Docs/types/VendorBuyContent6017.html create mode 100644 Docs/types/VendorBuyEntry.html create mode 100644 Docs/types/VendorBuyList.html create mode 100644 Docs/types/VendorDefinition.html create mode 100644 Docs/types/VendorGenerator.html create mode 100644 Docs/types/VendorInventory.html create mode 100644 Docs/types/VendorInventoryGump.html create mode 100644 Docs/types/VendorItem.html create mode 100644 Docs/types/VendorList.html create mode 100644 Docs/types/VendorNamePrompt.html create mode 100644 Docs/types/VendorPricePrompt.html create mode 100644 Docs/types/VendorRentalContract.html create mode 100644 Docs/types/VendorRentalContractGump.html create mode 100644 Docs/types/VendorRentalDuration.html create mode 100644 Docs/types/VendorRentalOfferGump.html create mode 100644 Docs/types/VendorRentalRefundGump.html create mode 100644 Docs/types/VendorSellEntry.html create mode 100644 Docs/types/VendorSellList.html create mode 100644 Docs/types/VendorShoeType.html create mode 100644 Docs/types/VendorsEntry.html create mode 100644 Docs/types/VengefulSpiritScroll.html create mode 100644 Docs/types/VengefulSpiritSpell.html create mode 100644 Docs/types/VeriteElemental.html create mode 100644 Docs/types/VeriteGranite.html create mode 100644 Docs/types/VeriteIngot.html create mode 100644 Docs/types/VeriteOre.html create mode 100644 Docs/types/Vesper.html create mode 100644 Docs/types/Veterinarian.html create mode 100644 Docs/types/Victoria.html create mode 100644 Docs/types/ViewEqTarget.html create mode 100644 Docs/types/ViewHousesGump.html create mode 100644 Docs/types/VikingSword.html create mode 100644 Docs/types/VileBlade.html create mode 100644 Docs/types/VillaDeed.html create mode 100644 Docs/types/Vines.html create mode 100644 Docs/types/VioletCourage.html create mode 100644 Docs/types/VioletRibbedFlask.html create mode 100644 Docs/types/VirtualMount.html create mode 100644 Docs/types/VirtualMountItem.html create mode 100644 Docs/types/VirtueBook.html create mode 100644 Docs/types/VirtueGump.html create mode 100644 Docs/types/VirtueGumpRequestEventArgs.html create mode 100644 Docs/types/VirtueGumpRequestEventHandler.html create mode 100644 Docs/types/VirtueHelper.html create mode 100644 Docs/types/VirtueInfo.html create mode 100644 Docs/types/VirtueInfoGump.html create mode 100644 Docs/types/VirtueItemRequestEventArgs.html create mode 100644 Docs/types/VirtueItemRequestEventHandler.html create mode 100644 Docs/types/VirtueLevel.html create mode 100644 Docs/types/VirtueMacroRequestEventArgs.html create mode 100644 Docs/types/VirtueMacroRequestEventHandler.html create mode 100644 Docs/types/VirtueName.html create mode 100644 Docs/types/VirtueStatusGump.html create mode 100644 Docs/types/VisTarget.html create mode 100644 Docs/types/VisibilityList.html create mode 100644 Docs/types/VisibleDamageType.html create mode 100644 Docs/types/VoiceOfTheFallenKing.html create mode 100644 Docs/types/VorpalBunny.html create mode 100644 Docs/types/VoteGump.html create mode 100644 Docs/types/Voter.html create mode 100644 Docs/types/VultureHelm.html create mode 100644 Docs/types/WailingBanshee.html create mode 100644 Docs/types/Waiter.html create mode 100644 Docs/types/Wakizashi.html create mode 100644 Docs/types/WallBanner.html create mode 100644 Docs/types/WallBannerComponent.html create mode 100644 Docs/types/WallBannerDeed.html create mode 100644 Docs/types/WallBlood.html create mode 100644 Docs/types/WallOfStoneScroll.html create mode 100644 Docs/types/WallOfStoneSpell.html create mode 100644 Docs/types/WallSconce.html create mode 100644 Docs/types/WallTorch.html create mode 100644 Docs/types/WallTorchAddon.html create mode 100644 Docs/types/WallTorchComponent.html create mode 100644 Docs/types/WallTorchDeed.html create mode 100644 Docs/types/Walrus.html create mode 100644 Docs/types/WandEffect.html create mode 100644 Docs/types/WandTarget.html create mode 100644 Docs/types/Wanderer.html create mode 100644 Docs/types/WandererOfTheVoid.html create mode 100644 Docs/types/WanderingHealer.html create mode 100644 Docs/types/WarAxe.html create mode 100644 Docs/types/WarCleaver.html create mode 100644 Docs/types/WarDeclaration.html create mode 100644 Docs/types/WarDeclarationGump.html create mode 100644 Docs/types/WarFork.html create mode 100644 Docs/types/WarHammer.html create mode 100644 Docs/types/WarMace.html create mode 100644 Docs/types/WarStatus.html create mode 100644 Docs/types/WarTimer.html create mode 100644 Docs/types/Waraji.html create mode 100644 Docs/types/WarmodeTimer.html create mode 100644 Docs/types/WarnEntry.html create mode 100644 Docs/types/WarnTimer.html create mode 100644 Docs/types/WarningGump.html create mode 100644 Docs/types/WarningGumpCallback.html create mode 100644 Docs/types/WarningItem.html create mode 100644 Docs/types/WarriorGuard.html create mode 100644 Docs/types/WarriorGuildmaster.html create mode 100644 Docs/types/WarriorStatueEastAddon.html create mode 100644 Docs/types/WarriorStatueEastDeed.html create mode 100644 Docs/types/WarriorStatueSouthAddon.html create mode 100644 Docs/types/WarriorStatueSouthDeed.html create mode 100644 Docs/types/Wasabi.html create mode 100644 Docs/types/WasabiClumps.html create mode 100644 Docs/types/WaterBarrel.html create mode 100644 Docs/types/WaterElemental.html create mode 100644 Docs/types/WaterElementalSpell.html create mode 100644 Docs/types/WaterTile.html create mode 100644 Docs/types/WaterTroughEastAddon.html create mode 100644 Docs/types/WaterTroughEastDeed.html create mode 100644 Docs/types/WaterTroughSouthAddon.html create mode 100644 Docs/types/WaterTroughSouthDeed.html create mode 100644 Docs/types/WaterVatEast.html create mode 100644 Docs/types/WaterVatSouth.html create mode 100644 Docs/types/Watermelon.html create mode 100644 Docs/types/WayPoint.html create mode 100644 Docs/types/WayPointSeqTarget.html create mode 100644 Docs/types/WeakenScroll.html create mode 100644 Docs/types/WeakenSpell.html create mode 100644 Docs/types/WeaknessWand.html create mode 100644 Docs/types/WeaponAbility.html create mode 100644 Docs/types/WeaponAbilityContext.html create mode 100644 Docs/types/WeaponAbilityTimer.html create mode 100644 Docs/types/WeaponAccuracyLevel.html create mode 100644 Docs/types/WeaponAnimation.html create mode 100644 Docs/types/WeaponDamageLevel.html create mode 100644 Docs/types/WeaponDurabilityLevel.html create mode 100644 Docs/types/WeaponEngravingTool.html create mode 100644 Docs/types/WeaponQuality.html create mode 100644 Docs/types/WeaponType.html create mode 100644 Docs/types/Weaponsmith.html create mode 100644 Docs/types/Weather.html create mode 100644 Docs/types/WeatherMap.html create mode 100644 Docs/types/Weaver.html create mode 100644 Docs/types/Web.html create mode 100644 Docs/types/WeightOverloading.html create mode 100644 Docs/types/WelcomeTimer.html create mode 100644 Docs/types/WheatSheaf.html create mode 100644 Docs/types/WhereExtension.html create mode 100644 Docs/types/Whip.html create mode 100644 Docs/types/WhippingVine.html create mode 100644 Docs/types/WhirlwindAttack.html create mode 100644 Docs/types/WhiteDriedFlowers.html create mode 100644 Docs/types/WhiteHangingLantern.html create mode 100644 Docs/types/WhiteMisoSoup.html create mode 100644 Docs/types/WhiteNinjaQuestTeleporter.html create mode 100644 Docs/types/WhitePearl.html create mode 100644 Docs/types/WhitePoinsettia.html create mode 100644 Docs/types/WhiteScales.html create mode 100644 Docs/types/WhiteSnowflake.html create mode 100644 Docs/types/WhiteStoneWall.html create mode 100644 Docs/types/WhiteStoneWallTypes.html create mode 100644 Docs/types/WhiteWolf.html create mode 100644 Docs/types/WhiteWyrm.html create mode 100644 Docs/types/WhoGump.html create mode 100644 Docs/types/WideBrimHat.html create mode 100644 Docs/types/WildGirlOfTheForest.html create mode 100644 Docs/types/WildStaff.html create mode 100644 Docs/types/WildcardIPFirewallEntry.html create mode 100644 Docs/types/WildfireBow.html create mode 100644 Docs/types/WildfireScroll.html create mode 100644 Docs/types/WindChimes.html create mode 100644 Docs/types/WindSpirit.html create mode 100644 Docs/types/WindsEdge.html create mode 100644 Docs/types/Windsong.html create mode 100644 Docs/types/WingedHelm.html create mode 100644 Docs/types/WinterGiftGiver2004.html create mode 100644 Docs/types/WinterGiftPackage2003.html create mode 100644 Docs/types/Wipe.html create mode 100644 Docs/types/WipeType.html create mode 100644 Docs/types/Wisp.html create mode 100644 Docs/types/WitchApprenticeQuest.html create mode 100644 Docs/types/WitherScroll.html create mode 100644 Docs/types/WitherSpell.html create mode 100644 Docs/types/WizardsGlasses.html create mode 100644 Docs/types/WizardsHat.html create mode 100644 Docs/types/WomanPortrait1.html create mode 100644 Docs/types/WomanPortrait2.html create mode 100644 Docs/types/WondrousFish.html create mode 100644 Docs/types/WoodDebris.html create mode 100644 Docs/types/WoodHouseDeed.html create mode 100644 Docs/types/WoodPlasterHouseDeed.html create mode 100644 Docs/types/WoodenBench.html create mode 100644 Docs/types/WoodenBowl.html create mode 100644 Docs/types/WoodenBowlOfCarrots.html create mode 100644 Docs/types/WoodenBowlOfCorn.html create mode 100644 Docs/types/WoodenBowlOfLettuce.html create mode 100644 Docs/types/WoodenBowlOfPeas.html create mode 100644 Docs/types/WoodenBowlOfStew.html create mode 100644 Docs/types/WoodenBowlOfTomatoSoup.html create mode 100644 Docs/types/WoodenBox.html create mode 100644 Docs/types/WoodenChair.html create mode 100644 Docs/types/WoodenChairCushion.html create mode 100644 Docs/types/WoodenChest.html create mode 100644 Docs/types/WoodenCoffinAddon.html create mode 100644 Docs/types/WoodenCoffinComponent.html create mode 100644 Docs/types/WoodenCoffinDeed.html create mode 100644 Docs/types/WoodenFootLocker.html create mode 100644 Docs/types/WoodenKiteShield.html create mode 100644 Docs/types/WoodenShield.html create mode 100644 Docs/types/WoodenThrone.html create mode 100644 Docs/types/WoodenTreasureChest.html create mode 100644 Docs/types/WoodlandArms.html create mode 100644 Docs/types/WoodlandBelt.html create mode 100644 Docs/types/WoodlandChest.html create mode 100644 Docs/types/WoodlandGloves.html create mode 100644 Docs/types/WoodlandGorget.html create mode 100644 Docs/types/WoodlandLegs.html create mode 100644 Docs/types/Wool.html create mode 100644 Docs/types/WordOfDeathScroll.html create mode 100644 Docs/types/WordOfDeathSpell.html create mode 100644 Docs/types/WorkerThread.html create mode 100644 Docs/types/World.html create mode 100644 Docs/types/WorldItem.html create mode 100644 Docs/types/WorldItemHS.html create mode 100644 Docs/types/WorldItemSA.html create mode 100644 Docs/types/WorldLoadEventHandler.html create mode 100644 Docs/types/WorldMap.html create mode 100644 Docs/types/WorldSaveEventArgs.html create mode 100644 Docs/types/WorldSaveEventHandler.html create mode 100644 Docs/types/Wraith.html create mode 100644 Docs/types/WraithFormScroll.html create mode 100644 Docs/types/WraithFormSpell.html create mode 100644 Docs/types/WrathOfTheDryad.html create mode 100644 Docs/types/WreathAddon.html create mode 100644 Docs/types/WreathAddonGump.html create mode 100644 Docs/types/WreathDeed.html create mode 100644 Docs/types/WreathDeedGump.html create mode 100644 Docs/types/WriteAccessException.html create mode 100644 Docs/types/WriteOnlyException.html create mode 100644 Docs/types/WritingTable.html create mode 100644 Docs/types/Wyvern.html create mode 100644 Docs/types/XmlPersistanceReader.html create mode 100644 Docs/types/XmlPersistanceWriter.html create mode 100644 Docs/types/Yamandon.html create mode 100644 Docs/types/YellowBeaker.html create mode 100644 Docs/types/YellowGourd.html create mode 100644 Docs/types/YellowScales.html create mode 100644 Docs/types/Yew.html create mode 100644 Docs/types/YewBoard.html create mode 100644 Docs/types/YewLog.html create mode 100644 Docs/types/YewWoodTable.html create mode 100644 Docs/types/YomotsuElder.html create mode 100644 Docs/types/YomotsuPriest.html create mode 100644 Docs/types/YomotsuWarrior.html create mode 100644 Docs/types/YoungDeathNotice.html create mode 100644 Docs/types/YoungDungeonWarning.html create mode 100644 Docs/types/YoungNinja.html create mode 100644 Docs/types/YoungRonin.html create mode 100644 Docs/types/YoungTimer.html create mode 100644 Docs/types/Yumi.html create mode 100644 Docs/types/ZComparer.html create mode 100644 Docs/types/ZLibError.html create mode 100644 Docs/types/ZLibQuality.html create mode 100644 Docs/types/Zeefzorpul.html create mode 100644 Docs/types/ZeefzorpulConversation.html create mode 100644 Docs/types/ZenRock1Artifact.html create mode 100644 Docs/types/ZenRock2Artifact.html create mode 100644 Docs/types/ZenRock3Artifact.html create mode 100644 Docs/types/Zoel.html create mode 100644 Docs/types/Zombie.html create mode 100644 Docs/types/ZoogiFungus.html create mode 100644 Docs/types/ZyronicClaw.html create mode 100644 README.md create mode 100644 Scripts/Accounting/AccessRestrictions.cs create mode 100644 Scripts/Accounting/Account.cs create mode 100644 Scripts/Accounting/AccountAttackLimiter.cs create mode 100644 Scripts/Accounting/AccountComment.cs create mode 100644 Scripts/Accounting/AccountHandler.cs create mode 100644 Scripts/Accounting/AccountTag.cs create mode 100644 Scripts/Accounting/Accounts.cs create mode 100644 Scripts/Accounting/Firewall.cs create mode 100644 Scripts/Accounting/IPLimiter.cs create mode 100644 Scripts/Commands/Add.cs create mode 100644 Scripts/Commands/Admin/AddonGenerator.cs create mode 100644 Scripts/Commands/Admin/AreaLog.cs create mode 100644 Scripts/Commands/Admin/BodyTypes.cs create mode 100644 Scripts/Commands/Admin/BuildWorld.cs create mode 100644 Scripts/Commands/Admin/FaceLog.cs create mode 100644 Scripts/Commands/Admin/FullExport.cs create mode 100644 Scripts/Commands/Admin/GetLevel.cs create mode 100644 Scripts/Commands/Admin/GoLog.cs create mode 100644 Scripts/Commands/Admin/PointLog.cs create mode 100644 Scripts/Commands/Admin/StaticExport.cs create mode 100644 Scripts/Commands/Admin/TargetLog.cs create mode 100644 Scripts/Commands/Attributes.cs create mode 100644 Scripts/Commands/Batch.cs create mode 100644 Scripts/Commands/BoundingBoxPicker.cs create mode 100644 Scripts/Commands/ConvertPlayers.cs create mode 100644 Scripts/Commands/Decorate.cs create mode 100644 Scripts/Commands/Docs.cs create mode 100644 Scripts/Commands/Dupe.cs create mode 100644 Scripts/Commands/GenCategorization.cs create mode 100644 Scripts/Commands/Generic/Commands/BaseCommand.cs create mode 100644 Scripts/Commands/Generic/Commands/Commands.cs create mode 100644 Scripts/Commands/Generic/Commands/Interface.cs create mode 100644 Scripts/Commands/Generic/Extensions/BaseExtension.cs create mode 100644 Scripts/Commands/Generic/Extensions/Compilers/ConditionalCompiler.cs create mode 100644 Scripts/Commands/Generic/Extensions/Compilers/DistinctCompiler.cs create mode 100644 Scripts/Commands/Generic/Extensions/Compilers/SortCompiler.cs create mode 100644 Scripts/Commands/Generic/Extensions/DistinctExtension.cs create mode 100644 Scripts/Commands/Generic/Extensions/LimitExtension.cs create mode 100644 Scripts/Commands/Generic/Extensions/SortExtension.cs create mode 100644 Scripts/Commands/Generic/Extensions/WhereExtension.cs create mode 100644 Scripts/Commands/Generic/Implementors/AreaCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/BaseCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/ContainedCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/GlobalCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/MultiCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/ObjectConditional.cs create mode 100644 Scripts/Commands/Generic/Implementors/OnlineCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/RegionCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/SelfCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/SerialCommandImplementor.cs create mode 100644 Scripts/Commands/Generic/Implementors/SingleCommandImplementor.cs create mode 100644 Scripts/Commands/Handlers.cs create mode 100644 Scripts/Commands/HelpInfo.cs create mode 100644 Scripts/Commands/Logging.cs create mode 100644 Scripts/Commands/Profiling.cs create mode 100644 Scripts/Commands/Properties.cs create mode 100644 Scripts/Commands/Skills.cs create mode 100644 Scripts/Commands/SkillsMenu.cs create mode 100644 Scripts/Commands/Statics.cs create mode 100644 Scripts/Commands/VisibilityList.cs create mode 100644 Scripts/Commands/Wipe.cs create mode 100644 Scripts/Context Menus/AddToParty.cs create mode 100644 Scripts/Context Menus/AddToSpellbookEntry.cs create mode 100644 Scripts/Context Menus/EatEntry.cs create mode 100644 Scripts/Context Menus/EjectPlayer.cs create mode 100644 Scripts/Context Menus/OpenInnEntry.cs create mode 100644 Scripts/Context Menus/TeachEntry.cs create mode 100644 Scripts/Engines/Chat/Channel.cs create mode 100644 Scripts/Engines/Chat/Chat.cs create mode 100644 Scripts/Engines/Chat/ChatActionHandler.cs create mode 100644 Scripts/Engines/Chat/ChatActionHandlers.cs create mode 100644 Scripts/Engines/Chat/ChatCommand.cs create mode 100644 Scripts/Engines/Chat/ChatUser.cs create mode 100644 Scripts/Engines/Chat/Chatold.cs create mode 100644 Scripts/Engines/Chat/Packets.cs create mode 100644 Scripts/Engines/Craft/Core/CraftContext.cs create mode 100644 Scripts/Engines/Craft/Core/CraftGroup.cs create mode 100644 Scripts/Engines/Craft/Core/CraftGroupCol.cs create mode 100644 Scripts/Engines/Craft/Core/CraftGump.cs create mode 100644 Scripts/Engines/Craft/Core/CraftGumpItem.cs create mode 100644 Scripts/Engines/Craft/Core/CraftItem.cs create mode 100644 Scripts/Engines/Craft/Core/CraftItemCol.cs create mode 100644 Scripts/Engines/Craft/Core/CraftItemIDAttribute.cs create mode 100644 Scripts/Engines/Craft/Core/CraftRes.cs create mode 100644 Scripts/Engines/Craft/Core/CraftResCol.cs create mode 100644 Scripts/Engines/Craft/Core/CraftSkill.cs create mode 100644 Scripts/Engines/Craft/Core/CraftSkillCol.cs create mode 100644 Scripts/Engines/Craft/Core/CraftSubRes.cs create mode 100644 Scripts/Engines/Craft/Core/CraftSubResCol.cs create mode 100644 Scripts/Engines/Craft/Core/CraftSystem.cs create mode 100644 Scripts/Engines/Craft/Core/CustomCraft.cs create mode 100644 Scripts/Engines/Craft/Core/QueryMakersMarkGump.cs create mode 100644 Scripts/Engines/Craft/Core/Repair.cs create mode 100644 Scripts/Engines/Craft/Core/Resmelt.cs create mode 100644 Scripts/Engines/Craft/DefAlchemy.cs create mode 100644 Scripts/Engines/Craft/DefBlacksmithy.cs create mode 100644 Scripts/Engines/Craft/DefBowFletching.cs create mode 100644 Scripts/Engines/Craft/DefCarpentry.cs create mode 100644 Scripts/Engines/Craft/DefCartography.cs create mode 100644 Scripts/Engines/Craft/DefCooking.cs create mode 100644 Scripts/Engines/Craft/DefInscription.cs create mode 100644 Scripts/Engines/Craft/DefTailoring.cs create mode 100644 Scripts/Engines/Craft/DefTinkering.cs create mode 100644 Scripts/Engines/Guilds/DeclareFealtyGump.cs create mode 100644 Scripts/Engines/Guilds/GrantGuildTitleGump.cs create mode 100644 Scripts/Engines/Guilds/Guild.cs create mode 100644 Scripts/Engines/Guilds/GuildAbbrvPrompt.cs create mode 100644 Scripts/Engines/Guilds/GuildAcceptWarGump.cs create mode 100644 Scripts/Engines/Guilds/GuildAdminCandidatesGump.cs create mode 100644 Scripts/Engines/Guilds/GuildCandidatesGump.cs create mode 100644 Scripts/Engines/Guilds/GuildChangeTypeGump.cs create mode 100644 Scripts/Engines/Guilds/GuildCharterGump.cs create mode 100644 Scripts/Engines/Guilds/GuildCharterPrompt.cs create mode 100644 Scripts/Engines/Guilds/GuildDeclarePeaceGump.cs create mode 100644 Scripts/Engines/Guilds/GuildDeclareWarGump.cs create mode 100644 Scripts/Engines/Guilds/GuildDeclareWarPrompt.cs create mode 100644 Scripts/Engines/Guilds/GuildDeed.cs create mode 100644 Scripts/Engines/Guilds/GuildDismissGump.cs create mode 100644 Scripts/Engines/Guilds/GuildGump.cs create mode 100644 Scripts/Engines/Guilds/GuildListGump.cs create mode 100644 Scripts/Engines/Guilds/GuildMobileListGump.cs create mode 100644 Scripts/Engines/Guilds/GuildNamePrompt.cs create mode 100644 Scripts/Engines/Guilds/GuildRejectWarGump.cs create mode 100644 Scripts/Engines/Guilds/GuildRescindDeclarationGump.cs create mode 100644 Scripts/Engines/Guilds/GuildRosterGump.cs create mode 100644 Scripts/Engines/Guilds/GuildTeleporter.cs create mode 100644 Scripts/Engines/Guilds/GuildTitlePrompt.cs create mode 100644 Scripts/Engines/Guilds/GuildWarAdminGump.cs create mode 100644 Scripts/Engines/Guilds/GuildWarGump.cs create mode 100644 Scripts/Engines/Guilds/GuildWebsitePrompt.cs create mode 100644 Scripts/Engines/Guilds/GuildmasterGump.cs create mode 100644 Scripts/Engines/Guilds/Guildstone.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/AdvancedSearch.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/BaseGuildGump.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/BaseGuildListGump.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/Create Guild Gump.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/DiplomacyGump.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/GuildInfoGump.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/GuildInvitationRequest.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/GuildMemberInfoGump.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/GuildRosterGump.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/OtherGuildInfo.cs create mode 100644 Scripts/Engines/Guilds/New Guild System/War Declaration gump.cs create mode 100644 Scripts/Engines/Guilds/RecruitTarget.cs create mode 100644 Scripts/Engines/Harvest/Core/HarvestBank.cs create mode 100644 Scripts/Engines/Harvest/Core/HarvestDefinition.cs create mode 100644 Scripts/Engines/Harvest/Core/HarvestResource.cs create mode 100644 Scripts/Engines/Harvest/Core/HarvestSoundTimer.cs create mode 100644 Scripts/Engines/Harvest/Core/HarvestSystem.cs create mode 100644 Scripts/Engines/Harvest/Core/HarvestTarget.cs create mode 100644 Scripts/Engines/Harvest/Core/HarvestTimer.cs create mode 100644 Scripts/Engines/Harvest/Core/HarvestVein.cs create mode 100644 Scripts/Engines/Harvest/Fishing.cs create mode 100644 Scripts/Engines/Harvest/Lumberjacking.cs create mode 100644 Scripts/Engines/Harvest/Mining.cs create mode 100644 Scripts/Engines/Help/HelpGump.cs create mode 100644 Scripts/Engines/Help/Index/HelpPageBasics.cs create mode 100644 Scripts/Engines/Help/Index/HelpPageGuilds.cs create mode 100644 Scripts/Engines/Help/Index/HelpPageHomes.cs create mode 100644 Scripts/Engines/Help/Index/HelpPageShips.cs create mode 100644 Scripts/Engines/Help/Index/HelpPageSkills.cs create mode 100644 Scripts/Engines/Help/Index/HelpPageTrades.cs create mode 100644 Scripts/Engines/Help/PagePrompt.cs create mode 100644 Scripts/Engines/Help/PagePromptGump.cs create mode 100644 Scripts/Engines/Help/PageQueue.cs create mode 100644 Scripts/Engines/Help/PageQueueGump.cs create mode 100644 Scripts/Engines/Help/PageResponseGump.cs create mode 100644 Scripts/Engines/Help/SpeechLog.cs create mode 100644 Scripts/Engines/Help/SpeechLogGump.cs create mode 100644 Scripts/Engines/Help/StuckMenu.cs create mode 100644 Scripts/Engines/Party/AddPartyTarget.cs create mode 100644 Scripts/Engines/Party/DeclineTimer.cs create mode 100644 Scripts/Engines/Party/Packets.cs create mode 100644 Scripts/Engines/Party/Party.cs create mode 100644 Scripts/Engines/Party/PartyCommands.cs create mode 100644 Scripts/Engines/Party/PartyMemberInfo.cs create mode 100644 Scripts/Engines/Party/RemoveFromParty.cs create mode 100644 Scripts/Engines/Party/RemovePartyTarget.cs create mode 100644 Scripts/Engines/Pathing/FastAStarAlgorithm.cs create mode 100644 Scripts/Engines/Pathing/MoveResult.cs create mode 100644 Scripts/Engines/Pathing/Movement.cs create mode 100644 Scripts/Engines/Pathing/MovementPath.cs create mode 100644 Scripts/Engines/Pathing/PathAlgorithm.cs create mode 100644 Scripts/Engines/Pathing/PathFollower.cs create mode 100644 Scripts/Engines/Pathing/SlowAStarAlgorithm.cs create mode 100644 Scripts/Engines/Reports/Objects/Charts/BarGraph.cs create mode 100644 Scripts/Engines/Reports/Objects/Charts/Chart.cs create mode 100644 Scripts/Engines/Reports/Objects/Charts/ChartItem.cs create mode 100644 Scripts/Engines/Reports/Objects/Charts/ChartItemCollection.cs create mode 100644 Scripts/Engines/Reports/Objects/Charts/PieChart.cs create mode 100644 Scripts/Engines/Reports/Objects/Reports/ItemValue.cs create mode 100644 Scripts/Engines/Reports/Objects/Reports/ItemValueCollection.cs create mode 100644 Scripts/Engines/Reports/Objects/Reports/Report.cs create mode 100644 Scripts/Engines/Reports/Objects/Reports/ReportColumn.cs create mode 100644 Scripts/Engines/Reports/Objects/Reports/ReportColumnCollection.cs create mode 100644 Scripts/Engines/Reports/Objects/Reports/ReportItem.cs create mode 100644 Scripts/Engines/Reports/Objects/Reports/ReportItemCollection.cs create mode 100644 Scripts/Engines/Reports/Objects/Snapshots/Snapshot.cs create mode 100644 Scripts/Engines/Reports/Objects/Snapshots/SnapshotCollection.cs create mode 100644 Scripts/Engines/Reports/Objects/Snapshots/SnapshotHistory.cs create mode 100644 Scripts/Engines/Reports/Objects/Staffing/Info.cs create mode 100644 Scripts/Engines/Reports/Objects/Staffing/PageInfo.cs create mode 100644 Scripts/Engines/Reports/Objects/Staffing/PageInfoCollection.cs create mode 100644 Scripts/Engines/Reports/Objects/Staffing/QueueStatus.cs create mode 100644 Scripts/Engines/Reports/Objects/Staffing/QueueStatusCollection.cs create mode 100644 Scripts/Engines/Reports/Objects/Staffing/ResponseInfo.cs create mode 100644 Scripts/Engines/Reports/Objects/Staffing/ResponseInfoCollection.cs create mode 100644 Scripts/Engines/Reports/Objects/Staffing/StaffHistory.cs create mode 100644 Scripts/Engines/Reports/Persistance/PersistableObject.cs create mode 100644 Scripts/Engines/Reports/Persistance/PersistableObjectCollection.cs create mode 100644 Scripts/Engines/Reports/Persistance/PersistableType.cs create mode 100644 Scripts/Engines/Reports/Persistance/PersistanceReader.cs create mode 100644 Scripts/Engines/Reports/Persistance/PersistanceWriter.cs create mode 100644 Scripts/Engines/Reports/Rendering/BarGraphRenderer.cs create mode 100644 Scripts/Engines/Reports/Rendering/ChartRenderer.cs create mode 100644 Scripts/Engines/Reports/Rendering/DataItem.cs create mode 100644 Scripts/Engines/Reports/Rendering/HtmlRenderer.cs create mode 100644 Scripts/Engines/Reports/Rendering/PieChartRenderer.cs create mode 100644 Scripts/Engines/Reports/Reports.cs create mode 100644 Scripts/Engines/Spawner/PSCount.cs create mode 100644 Scripts/Engines/Spawner/PremiumSpawner.cs create mode 100644 Scripts/Engines/Spawner/PremiumSpawnerGump.cs create mode 100644 Scripts/Engines/Spawner/PremiumSpawnerGumps.cs create mode 100644 Scripts/Engines/Spawner/PremiumSpawnerMainGump.cs create mode 100644 Scripts/Engines/Spawner/RunUOSpawnerExporter.cs create mode 100644 Scripts/Engines/Spawner/SpawnEditor.cs create mode 100644 Scripts/Engines/Spawner/SpawnGen.cs create mode 100644 Scripts/Engines/Spawner/SpawnMaps.cs create mode 100644 Scripts/Engines/Spawner/Spawner.cs create mode 100644 Scripts/Engines/Spawner/SpawnerGump.cs create mode 100644 Scripts/Engines/Spawner/SpawnerHowTo.txt create mode 100644 Scripts/Engines/Spawner/SpawnerType.cs create mode 100644 Scripts/Engines/Spawner/SpawnsOverseer.cs create mode 100644 Scripts/Engines/Spawner/SpawnsOverseerCommand.cs create mode 100644 Scripts/Gumps/AddDoorGump.cs create mode 100644 Scripts/Gumps/AddGump.cs create mode 100644 Scripts/Gumps/AdminGump.cs create mode 100644 Scripts/Gumps/BanDurationGump.cs create mode 100644 Scripts/Gumps/BaseConfirmGump.cs create mode 100644 Scripts/Gumps/BaseGridGump.cs create mode 100644 Scripts/Gumps/BaseImageTileButtonsGump.cs create mode 100644 Scripts/Gumps/CategorizedAddGump.cs create mode 100644 Scripts/Gumps/ClientGump.cs create mode 100644 Scripts/Gumps/ConfirmHouseResize.cs create mode 100644 Scripts/Gumps/ConfirmReleaseGump.cs create mode 100644 Scripts/Gumps/Go/ChildNode.cs create mode 100644 Scripts/Gumps/Go/GoGump.cs create mode 100644 Scripts/Gumps/Go/LocationTree.cs create mode 100644 Scripts/Gumps/Go/ParentNode.cs create mode 100644 Scripts/Gumps/HouseDemolishGump.cs create mode 100644 Scripts/Gumps/HouseGump.cs create mode 100644 Scripts/Gumps/HouseGumpAOS.cs create mode 100644 Scripts/Gumps/HouseTransferGump.cs create mode 100644 Scripts/Gumps/NoticeGump.cs create mode 100644 Scripts/Gumps/PetResurrectGump.cs create mode 100644 Scripts/Gumps/PlayerVendorGumps.cs create mode 100644 Scripts/Gumps/PolymorphGump.cs create mode 100644 Scripts/Gumps/Properties/PropsConfig.cs create mode 100644 Scripts/Gumps/Properties/PropsGump.cs create mode 100644 Scripts/Gumps/Properties/SetBodyGump.cs create mode 100644 Scripts/Gumps/Properties/SetCustomEnumGump.cs create mode 100644 Scripts/Gumps/Properties/SetGump.cs create mode 100644 Scripts/Gumps/Properties/SetListOptionGump.cs create mode 100644 Scripts/Gumps/Properties/SetObjectGump.cs create mode 100644 Scripts/Gumps/Properties/SetObjectTarget.cs create mode 100644 Scripts/Gumps/Properties/SetPoint2DGump.cs create mode 100644 Scripts/Gumps/Properties/SetPoint3DGump.cs create mode 100644 Scripts/Gumps/Properties/SetTimeSpanGump.cs create mode 100644 Scripts/Gumps/ReclaimVendorGump.cs create mode 100644 Scripts/Gumps/ReportMurderer.cs create mode 100644 Scripts/Gumps/ResurrectGump.cs create mode 100644 Scripts/Gumps/SetSecureLevelGump.cs create mode 100644 Scripts/Gumps/SkillsGump.cs create mode 100644 Scripts/Gumps/VendorInventoryGump.cs create mode 100644 Scripts/Gumps/VendorRentalGumps.cs create mode 100644 Scripts/Gumps/WarningGump.cs create mode 100644 Scripts/Gumps/WhoGump.cs create mode 100644 Scripts/Items/Addons/AbbatoirAddon.cs create mode 100644 Scripts/Items/Addons/AddonComponent.cs create mode 100644 Scripts/Items/Addons/AddonContainerComponent.cs create mode 100644 Scripts/Items/Addons/AnvilEastAddon.cs create mode 100644 Scripts/Items/Addons/AnvilSouthAddon.cs create mode 100644 Scripts/Items/Addons/ArcheryButteAddon.cs create mode 100644 Scripts/Items/Addons/BaseAddon.cs create mode 100644 Scripts/Items/Addons/BaseAddonContainer.cs create mode 100644 Scripts/Items/Addons/BaseAddonContainerDeed.cs create mode 100644 Scripts/Items/Addons/BaseAddonDeed.cs create mode 100644 Scripts/Items/Addons/BearRugs.cs create mode 100644 Scripts/Items/Addons/BloodPentagram.cs create mode 100644 Scripts/Items/Addons/DartBoard.cs create mode 100644 Scripts/Items/Addons/FlourMillEastAddon.cs create mode 100644 Scripts/Items/Addons/FlourMillSouthAddon.cs create mode 100644 Scripts/Items/Addons/FlowerTapestries.cs create mode 100644 Scripts/Items/Addons/GiantWebs.cs create mode 100644 Scripts/Items/Addons/GrayBrickFireplaceEastAddon.cs create mode 100644 Scripts/Items/Addons/GrayBrickFireplaceSouthAddon.cs create mode 100644 Scripts/Items/Addons/LargeBedEastAddon.cs create mode 100644 Scripts/Items/Addons/LargeBedSouthAddon.cs create mode 100644 Scripts/Items/Addons/LargeForgeEastAddon.cs create mode 100644 Scripts/Items/Addons/LargeForgeSouthAddon.cs create mode 100644 Scripts/Items/Addons/LargeStoneTableEastAddon.cs create mode 100644 Scripts/Items/Addons/LargeStoneTableSouthAddon.cs create mode 100644 Scripts/Items/Addons/LoomEastAddon.cs create mode 100644 Scripts/Items/Addons/LoomSouthAddon.cs create mode 100644 Scripts/Items/Addons/MediumStoneTableEastAddon.cs create mode 100644 Scripts/Items/Addons/MediumStoneTableSouthAddon.cs create mode 100644 Scripts/Items/Addons/PentagramAddon.cs create mode 100644 Scripts/Items/Addons/PickpocketDips.cs create mode 100644 Scripts/Items/Addons/SandstoneFireplaceEastAddon.cs create mode 100644 Scripts/Items/Addons/SandstoneFireplaceSouthAddon.cs create mode 100644 Scripts/Items/Addons/SandstoneFountainAddon.cs create mode 100644 Scripts/Items/Addons/SmallBedEastAddon.cs create mode 100644 Scripts/Items/Addons/SmallBedSouthAddon.cs create mode 100644 Scripts/Items/Addons/SmallForgeAddon.cs create mode 100644 Scripts/Items/Addons/SpinningwheelEastAddon.cs create mode 100644 Scripts/Items/Addons/SpinningwheelSouthAddon.cs create mode 100644 Scripts/Items/Addons/StoneFireplaceEastAddon.cs create mode 100644 Scripts/Items/Addons/StoneFireplaceSouthAddon.cs create mode 100644 Scripts/Items/Addons/StoneFountainAddon.cs create mode 100644 Scripts/Items/Addons/StoneOvenEastAddon.cs create mode 100644 Scripts/Items/Addons/StoneOvenSouthAddon.cs create mode 100644 Scripts/Items/Addons/StretchedHides.cs create mode 100644 Scripts/Items/Addons/Telescope.cs create mode 100644 Scripts/Items/Addons/TrainingDummies.cs create mode 100644 Scripts/Items/Addons/WaterTroughEastAddon.cs create mode 100644 Scripts/Items/Addons/WaterTroughSouthAddon.cs create mode 100644 Scripts/Items/Addons/WaterVat.cs create mode 100644 Scripts/Items/Armor/ArmorEnums.cs create mode 100644 Scripts/Items/Armor/BaseArmor.cs create mode 100644 Scripts/Items/Armor/Bone/BoneArms.cs create mode 100644 Scripts/Items/Armor/Bone/BoneChest.cs create mode 100644 Scripts/Items/Armor/Bone/BoneGloves.cs create mode 100644 Scripts/Items/Armor/Bone/BoneHelm.cs create mode 100644 Scripts/Items/Armor/Bone/BoneLegs.cs create mode 100644 Scripts/Items/Armor/Bone/OrcHelm.cs create mode 100644 Scripts/Items/Armor/Chain/ChainChest.cs create mode 100644 Scripts/Items/Armor/Chain/ChainCoif.cs create mode 100644 Scripts/Items/Armor/Chain/ChainLegs.cs create mode 100644 Scripts/Items/Armor/DaemonBone/DaemonArms.cs create mode 100644 Scripts/Items/Armor/DaemonBone/DaemonChest.cs create mode 100644 Scripts/Items/Armor/DaemonBone/DaemonGloves.cs create mode 100644 Scripts/Items/Armor/DaemonBone/DaemonHelm.cs create mode 100644 Scripts/Items/Armor/DaemonBone/DaemonLegs.cs create mode 100644 Scripts/Items/Armor/Leather/FemaleLeatherChest.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherArms.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherBustierArms.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherCap.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherChest.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherGloves.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherGorget.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherLegs.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherShorts.cs create mode 100644 Scripts/Items/Armor/Leather/LeatherSkirt.cs create mode 100644 Scripts/Items/Armor/Metal/Bascinet.cs create mode 100644 Scripts/Items/Armor/Metal/CloseHelm.cs create mode 100644 Scripts/Items/Armor/Metal/Helmet.cs create mode 100644 Scripts/Items/Armor/Metal/NorseHelm.cs create mode 100644 Scripts/Items/Armor/Plate/FemalePlateChest.cs create mode 100644 Scripts/Items/Armor/Plate/PlateArms.cs create mode 100644 Scripts/Items/Armor/Plate/PlateChest.cs create mode 100644 Scripts/Items/Armor/Plate/PlateGloves.cs create mode 100644 Scripts/Items/Armor/Plate/PlateGorget.cs create mode 100644 Scripts/Items/Armor/Plate/PlateHelm.cs create mode 100644 Scripts/Items/Armor/Plate/PlateLegs.cs create mode 100644 Scripts/Items/Armor/Ranger/RangerArms.cs create mode 100644 Scripts/Items/Armor/Ranger/RangerChest.cs create mode 100644 Scripts/Items/Armor/Ranger/RangerGloves.cs create mode 100644 Scripts/Items/Armor/Ranger/RangerGorget.cs create mode 100644 Scripts/Items/Armor/Ranger/RangerLegs.cs create mode 100644 Scripts/Items/Armor/Ring/RingmailArms.cs create mode 100644 Scripts/Items/Armor/Ring/RingmailChest.cs create mode 100644 Scripts/Items/Armor/Ring/RingmailGloves.cs create mode 100644 Scripts/Items/Armor/Ring/RingmailLegs.cs create mode 100644 Scripts/Items/Armor/Studded/FemaleStuddedChest.cs create mode 100644 Scripts/Items/Armor/Studded/StuddedArms.cs create mode 100644 Scripts/Items/Armor/Studded/StuddedBustierArms.cs create mode 100644 Scripts/Items/Armor/Studded/StuddedChest.cs create mode 100644 Scripts/Items/Armor/Studded/StuddedGloves.cs create mode 100644 Scripts/Items/Armor/Studded/StuddedGorget.cs create mode 100644 Scripts/Items/Armor/Studded/StuddedLegs.cs create mode 100644 Scripts/Items/Body Parts/BonePile.cs create mode 100644 Scripts/Items/Body Parts/Head.cs create mode 100644 Scripts/Items/Body Parts/LeftArm.cs create mode 100644 Scripts/Items/Body Parts/LeftLeg.cs create mode 100644 Scripts/Items/Body Parts/RibCage.cs create mode 100644 Scripts/Items/Body Parts/RightArm.cs create mode 100644 Scripts/Items/Body Parts/RightLeg.cs create mode 100644 Scripts/Items/Body Parts/Torso.cs create mode 100644 Scripts/Items/Books/BaseBook.cs create mode 100644 Scripts/Items/Books/BlueBook.cs create mode 100644 Scripts/Items/Books/BookContent.cs create mode 100644 Scripts/Items/Books/BrownBook.cs create mode 100644 Scripts/Items/Books/Codex.cs create mode 100644 Scripts/Items/Books/Diary.cs create mode 100644 Scripts/Items/Books/Grimoire.cs create mode 100644 Scripts/Items/Books/Journal.cs create mode 100644 Scripts/Items/Books/Lexicon.cs create mode 100644 Scripts/Items/Books/RedBook.cs create mode 100644 Scripts/Items/Books/TanBook.cs create mode 100644 Scripts/Items/Books/Tome.cs create mode 100644 Scripts/Items/Clothing/AdminBoots.cs create mode 100644 Scripts/Items/Clothing/BaseClothing.cs create mode 100644 Scripts/Items/Clothing/Cloaks.cs create mode 100644 Scripts/Items/Clothing/Hats.cs create mode 100644 Scripts/Items/Clothing/MiddleTorso.cs create mode 100644 Scripts/Items/Clothing/OuterLegs.cs create mode 100644 Scripts/Items/Clothing/OuterTorso.cs create mode 100644 Scripts/Items/Clothing/Pants.cs create mode 100644 Scripts/Items/Clothing/Shirts.cs create mode 100644 Scripts/Items/Clothing/Shoes.cs create mode 100644 Scripts/Items/Clothing/Waist.cs create mode 100644 Scripts/Items/Construction/Ankhs.cs create mode 100644 Scripts/Items/Construction/Chairs/Benchs.cs create mode 100644 Scripts/Items/Construction/Chairs/Chairs.cs create mode 100644 Scripts/Items/Construction/Chairs/Stools.cs create mode 100644 Scripts/Items/Construction/Chairs/Thrones.cs create mode 100644 Scripts/Items/Construction/Decorative/DecorativeShield.cs create mode 100644 Scripts/Items/Construction/Decorative/DecorativeWeapon.cs create mode 100644 Scripts/Items/Construction/Decorative/PaintingPortraits.cs create mode 100644 Scripts/Items/Construction/Decorative/Tapestry.cs create mode 100644 Scripts/Items/Construction/Doors/BaseDoor.cs create mode 100644 Scripts/Items/Construction/Doors/Doors.cs create mode 100644 Scripts/Items/Construction/Doors/HouseDoors.cs create mode 100644 Scripts/Items/Construction/Doors/Portcullis.cs create mode 100644 Scripts/Items/Construction/Doors/SecretDoors.cs create mode 100644 Scripts/Items/Construction/Doors/ThruDoors.cs create mode 100644 Scripts/Items/Construction/Floors/Floors.cs create mode 100644 Scripts/Items/Construction/Misc/BarrelParts.cs create mode 100644 Scripts/Items/Construction/Misc/Easle.cs create mode 100644 Scripts/Items/Construction/Misc/MeltedWax.cs create mode 100644 Scripts/Items/Construction/Misc/MusicStand.cs create mode 100644 Scripts/Items/Construction/Misc/Statues.cs create mode 100644 Scripts/Items/Construction/Misc/Vase.cs create mode 100644 Scripts/Items/Construction/Misc/Vines.cs create mode 100644 Scripts/Items/Construction/Ruined/RuinedItemSingle.cs create mode 100644 Scripts/Items/Construction/Signs/BaseSign.cs create mode 100644 Scripts/Items/Construction/Signs/LocalizedSign.cs create mode 100644 Scripts/Items/Construction/Signs/Sign.cs create mode 100644 Scripts/Items/Construction/Tables/Tables.cs create mode 100644 Scripts/Items/Construction/Tables/WritingTable.cs create mode 100644 Scripts/Items/Construction/Walls/BaseWall.cs create mode 100644 Scripts/Items/Construction/Walls/DarkWoodWall.cs create mode 100644 Scripts/Items/Construction/Walls/ThickGrayStoneWall.cs create mode 100644 Scripts/Items/Construction/Walls/ThinBrickWall.cs create mode 100644 Scripts/Items/Construction/Walls/ThinStoneWall.cs create mode 100644 Scripts/Items/Construction/Walls/WhiteStoneWall.cs create mode 100644 Scripts/Items/Containers/Container.cs create mode 100644 Scripts/Items/Containers/FurnitureContainer.cs create mode 100644 Scripts/Items/Containers/HouseCrates.cs create mode 100644 Scripts/Items/Containers/InnChest.cs create mode 100644 Scripts/Items/Containers/LockableContainer.cs create mode 100644 Scripts/Items/Containers/Strongbox.cs create mode 100644 Scripts/Items/Containers/TrapableContainer.cs create mode 100644 Scripts/Items/Deeds/BarkeepContract.cs create mode 100644 Scripts/Items/Deeds/HairRestylingDeed.cs create mode 100644 Scripts/Items/Deeds/NameChangeDeed.cs create mode 100644 Scripts/Items/Deeds/PlayerVendorDeed.cs create mode 100644 Scripts/Items/Deeds/VendorRentalContract.cs create mode 100644 Scripts/Items/Facial/Beard.cs create mode 100644 Scripts/Items/Facial/Hair.cs create mode 100644 Scripts/Items/Farming/FarmableCabbage.cs create mode 100644 Scripts/Items/Farming/FarmableCantaloupe.cs create mode 100644 Scripts/Items/Farming/FarmableCarrot.cs create mode 100644 Scripts/Items/Farming/FarmableCorn.cs create mode 100644 Scripts/Items/Farming/FarmableCotton.cs create mode 100644 Scripts/Items/Farming/FarmableCrop.cs create mode 100644 Scripts/Items/Farming/FarmableEggs.cs create mode 100644 Scripts/Items/Farming/FarmableFlax.cs create mode 100644 Scripts/Items/Farming/FarmableGarlic.cs create mode 100644 Scripts/Items/Farming/FarmableGinseng.cs create mode 100644 Scripts/Items/Farming/FarmableGrape.cs create mode 100644 Scripts/Items/Farming/FarmableGreenGourd.cs create mode 100644 Scripts/Items/Farming/FarmableHoneydewMelon.cs create mode 100644 Scripts/Items/Farming/FarmableLettuce.cs create mode 100644 Scripts/Items/Farming/FarmableMandrakeRoot.cs create mode 100644 Scripts/Items/Farming/FarmableNightshade.cs create mode 100644 Scripts/Items/Farming/FarmableOnion.cs create mode 100644 Scripts/Items/Farming/FarmablePumpkin.cs create mode 100644 Scripts/Items/Farming/FarmableSquash.cs create mode 100644 Scripts/Items/Farming/FarmableTomato.cs create mode 100644 Scripts/Items/Farming/FarmableTurnip.cs create mode 100644 Scripts/Items/Farming/FarmableWatermelon.cs create mode 100644 Scripts/Items/Farming/FarmableWheat.cs create mode 100644 Scripts/Items/Farming/FarmableYellowGourd.cs create mode 100644 Scripts/Items/Food/Beverage.cs create mode 100644 Scripts/Items/Food/BeverageEmpty.cs create mode 100644 Scripts/Items/Food/Bowls.cs create mode 100644 Scripts/Items/Food/CookableFood.cs create mode 100644 Scripts/Items/Food/Cooking.cs create mode 100644 Scripts/Items/Food/Food.cs create mode 100644 Scripts/Items/Food/Fruits.cs create mode 100644 Scripts/Items/Food/MagicDrink.cs create mode 100644 Scripts/Items/Food/Vegetables.cs create mode 100644 Scripts/Items/Games/Backgammon.cs create mode 100644 Scripts/Items/Games/BaseBoard.cs create mode 100644 Scripts/Items/Games/BasePiece.cs create mode 100644 Scripts/Items/Games/CheckerBoard.cs create mode 100644 Scripts/Items/Games/CheckersPieces.cs create mode 100644 Scripts/Items/Games/ChessPieces.cs create mode 100644 Scripts/Items/Games/Chessboard.cs create mode 100644 Scripts/Items/Games/Dices.cs create mode 100644 Scripts/Items/Gems/Amber.cs create mode 100644 Scripts/Items/Gems/Amethyst.cs create mode 100644 Scripts/Items/Gems/Citrine.cs create mode 100644 Scripts/Items/Gems/Diamond.cs create mode 100644 Scripts/Items/Gems/Emerald.cs create mode 100644 Scripts/Items/Gems/Ruby.cs create mode 100644 Scripts/Items/Gems/Sapphire.cs create mode 100644 Scripts/Items/Gems/StarSapphire.cs create mode 100644 Scripts/Items/Gems/Tourmaline.cs create mode 100644 Scripts/Items/Home/HouseSigns.cs create mode 100644 Scripts/Items/Home/InteriorDecorator.cs create mode 100644 Scripts/Items/Home/LadderEastAddon.cs create mode 100644 Scripts/Items/Home/LadderSouthAddon.cs create mode 100644 Scripts/Items/Home/Tents.cs create mode 100644 Scripts/Items/Jewels/BaseJewel.cs create mode 100644 Scripts/Items/Jewels/Beads.cs create mode 100644 Scripts/Items/Jewels/Bracelet.cs create mode 100644 Scripts/Items/Jewels/Earrings.cs create mode 100644 Scripts/Items/Jewels/Necklace.cs create mode 100644 Scripts/Items/Jewels/Ring.cs create mode 100644 Scripts/Items/Lights/BaseEquipableLight.cs create mode 100644 Scripts/Items/Lights/BaseLight.cs create mode 100644 Scripts/Items/Lights/Bonfire.cs create mode 100644 Scripts/Items/Lights/Brazier.cs create mode 100644 Scripts/Items/Lights/BrazierTall.cs create mode 100644 Scripts/Items/Lights/Candelabra.cs create mode 100644 Scripts/Items/Lights/CandelabraStand.cs create mode 100644 Scripts/Items/Lights/Candle.cs create mode 100644 Scripts/Items/Lights/CandleLarge.cs create mode 100644 Scripts/Items/Lights/CandleLong.cs create mode 100644 Scripts/Items/Lights/CandleMedium.cs create mode 100644 Scripts/Items/Lights/CandleShort.cs create mode 100644 Scripts/Items/Lights/CandleSkull.cs create mode 100644 Scripts/Items/Lights/DarkSource.cs create mode 100644 Scripts/Items/Lights/HangingLantern.cs create mode 100644 Scripts/Items/Lights/HeatingStand.cs create mode 100644 Scripts/Items/Lights/IronBrazier.cs create mode 100644 Scripts/Items/Lights/IronBrazierShort.cs create mode 100644 Scripts/Items/Lights/IronBrazierStand.cs create mode 100644 Scripts/Items/Lights/IronCandelabra.cs create mode 100644 Scripts/Items/Lights/IronCandelabraStand.cs create mode 100644 Scripts/Items/Lights/IronCandle.cs create mode 100644 Scripts/Items/Lights/LampPost1.cs create mode 100644 Scripts/Items/Lights/LampPost2.cs create mode 100644 Scripts/Items/Lights/LampPost3.cs create mode 100644 Scripts/Items/Lights/Lantern.cs create mode 100644 Scripts/Items/Lights/LightSource.cs create mode 100644 Scripts/Items/Lights/Torch.cs create mode 100644 Scripts/Items/Lights/WallSconce.cs create mode 100644 Scripts/Items/Lights/WallTorch.cs create mode 100644 Scripts/Items/Maps/BlankMap.cs create mode 100644 Scripts/Items/Maps/CityMap.cs create mode 100644 Scripts/Items/Maps/IndecipherableMap.cs create mode 100644 Scripts/Items/Maps/LocalMap.cs create mode 100644 Scripts/Items/Maps/MapItem.cs create mode 100644 Scripts/Items/Maps/PresetMap.cs create mode 100644 Scripts/Items/Maps/SeaChart.cs create mode 100644 Scripts/Items/Maps/TreasureMap.cs create mode 100644 Scripts/Items/Maps/WorldMap.cs create mode 100644 Scripts/Items/Misc/AcidSlime.cs create mode 100644 Scripts/Items/Misc/ArcaneGem.cs create mode 100644 Scripts/Items/Misc/Beeswax.cs create mode 100644 Scripts/Items/Misc/Blocker.cs create mode 100644 Scripts/Items/Misc/Blood.cs create mode 100644 Scripts/Items/Misc/BulletinBoards.cs create mode 100644 Scripts/Items/Misc/Corpses/Corpse.cs create mode 100644 Scripts/Items/Misc/Corpses/CorpseNameAttribute.cs create mode 100644 Scripts/Items/Misc/Corpses/DecayedCorpse.cs create mode 100644 Scripts/Items/Misc/Corpses/Packets.cs create mode 100644 Scripts/Items/Misc/EffectController.cs create mode 100644 Scripts/Items/Misc/EffectItem.cs create mode 100644 Scripts/Items/Misc/FlipableAddonAttribute.cs create mode 100644 Scripts/Items/Misc/FlipableAttribute.cs create mode 100644 Scripts/Items/Misc/GlassItems.cs create mode 100644 Scripts/Items/Misc/Gold.cs create mode 100644 Scripts/Items/Misc/GoldDeed.cs create mode 100644 Scripts/Items/Misc/Guillotine.cs create mode 100644 Scripts/Items/Misc/HairDye.cs create mode 100644 Scripts/Items/Misc/IDurability.cs create mode 100644 Scripts/Items/Misc/Key.cs create mode 100644 Scripts/Items/Misc/KeyRing.cs create mode 100644 Scripts/Items/Misc/LOSBlocker.cs create mode 100644 Scripts/Items/Misc/Moongate.cs create mode 100644 Scripts/Items/Misc/MorphItem.cs create mode 100644 Scripts/Items/Misc/OilCloth.cs create mode 100644 Scripts/Items/Misc/Plants.cs create mode 100644 Scripts/Items/Misc/PlayerBulletinBoards.cs create mode 100644 Scripts/Items/Misc/PoolOfAcid.cs create mode 100644 Scripts/Items/Misc/Scales.cs create mode 100644 Scripts/Items/Misc/SpecialBeardDye.cs create mode 100644 Scripts/Items/Misc/SpecialHairDye.cs create mode 100644 Scripts/Items/Misc/Static.cs create mode 100644 Scripts/Items/Misc/Teleporter.cs create mode 100644 Scripts/Items/Misc/TrashBarrel.cs create mode 100644 Scripts/Items/Misc/WarningItem.cs create mode 100644 Scripts/Items/Misc/Waypoint.cs create mode 100644 Scripts/Items/Rares/BottleOfAcid.cs create mode 100644 Scripts/Items/Rares/Elixirs/BaseManaElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/BaseVigorElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/InvisibilityElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/ManaElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/StrongInvisibilityElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/StrongManaElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/StrongVigorElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/VigorElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/WeakInvisibilityElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/WeakManaElixir.cs create mode 100644 Scripts/Items/Rares/Elixirs/WeakVigorElixir.cs create mode 100644 Scripts/Items/Rares/SkeletonKeys.cs create mode 100644 Scripts/Items/Resources/Arrows/Arrow.cs create mode 100644 Scripts/Items/Resources/Arrows/Bolt.cs create mode 100644 Scripts/Items/Resources/Arrows/Feather.cs create mode 100644 Scripts/Items/Resources/Arrows/Shaft.cs create mode 100644 Scripts/Items/Resources/Blacksmithing/Ingot.cs create mode 100644 Scripts/Items/Resources/Blacksmithing/Ore.cs create mode 100644 Scripts/Items/Resources/Fishing/BigFish.cs create mode 100644 Scripts/Items/Resources/Fishing/Fish.cs create mode 100644 Scripts/Items/Resources/Fishing/MagicFish.cs create mode 100644 Scripts/Items/Resources/Reagents/BaseReagent.cs create mode 100644 Scripts/Items/Resources/Reagents/BlackPearl.cs create mode 100644 Scripts/Items/Resources/Reagents/Bloodmoss.cs create mode 100644 Scripts/Items/Resources/Reagents/Garlic.cs create mode 100644 Scripts/Items/Resources/Reagents/Ginseng.cs create mode 100644 Scripts/Items/Resources/Reagents/MandrakeRoot.cs create mode 100644 Scripts/Items/Resources/Reagents/Nightshade.cs create mode 100644 Scripts/Items/Resources/Reagents/SpidersSilk.cs create mode 100644 Scripts/Items/Resources/Reagents/SulfurousAsh.cs create mode 100644 Scripts/Items/Resources/Supplies.cs create mode 100644 Scripts/Items/Resources/Tailor/BoltOfCloth.cs create mode 100644 Scripts/Items/Resources/Tailor/Bone.cs create mode 100644 Scripts/Items/Resources/Tailor/Cloth.cs create mode 100644 Scripts/Items/Resources/Tailor/Cotton.cs create mode 100644 Scripts/Items/Resources/Tailor/Flax.cs create mode 100644 Scripts/Items/Resources/Tailor/Hides.cs create mode 100644 Scripts/Items/Resources/Tailor/Leathers.cs create mode 100644 Scripts/Items/Resources/Tailor/UncutCloth.cs create mode 100644 Scripts/Items/Resources/Tailor/Wool.cs create mode 100644 Scripts/Items/Resources/Tailor/YarnsAndThreads.cs create mode 100644 Scripts/Items/Resources/Tinkering/CrystalPowder.cs create mode 100644 Scripts/Items/Shields/BaseShield.cs create mode 100644 Scripts/Items/Shields/BronzeShield.cs create mode 100644 Scripts/Items/Shields/Buckler.cs create mode 100644 Scripts/Items/Shields/ChaosShield.cs create mode 100644 Scripts/Items/Shields/HeaterShield.cs create mode 100644 Scripts/Items/Shields/MetalKiteShield.cs create mode 100644 Scripts/Items/Shields/MetalShield.cs create mode 100644 Scripts/Items/Shields/OrderShield.cs create mode 100644 Scripts/Items/Shields/WoodenKiteShield.cs create mode 100644 Scripts/Items/Shields/WoodenShield.cs create mode 100644 Scripts/Items/Skill Items/Blacksmith Items/AnvilForge.cs create mode 100644 Scripts/Items/Skill Items/Blacksmith Items/LargeForge.cs create mode 100644 Scripts/Items/Skill Items/Camping/BedRolled.cs create mode 100644 Scripts/Items/Skill Items/Camping/Bedroll.cs create mode 100644 Scripts/Items/Skill Items/Camping/Campfire.cs create mode 100644 Scripts/Items/Skill Items/Camping/Kindling.cs create mode 100644 Scripts/Items/Skill Items/Carpenter Items/TrophyBoard.cs create mode 100644 Scripts/Items/Skill Items/Fishing/FishingPole.cs create mode 100644 Scripts/Items/Skill Items/Fishing/MessageInABottle.cs create mode 100644 Scripts/Items/Skill Items/Fishing/SOS.cs create mode 100644 Scripts/Items/Skill Items/Fishing/Sextant.cs create mode 100644 Scripts/Items/Skill Items/Fishing/ShipwreckedItem.cs create mode 100644 Scripts/Items/Skill Items/Fishing/SpecialFishingNet.cs create mode 100644 Scripts/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs create mode 100644 Scripts/Items/Skill Items/Harvest Tools/Shovel.cs create mode 100644 Scripts/Items/Skill Items/Instruments/BaseInstrument.cs create mode 100644 Scripts/Items/Skill Items/Instruments/Drums.cs create mode 100644 Scripts/Items/Skill Items/Instruments/Flute.cs create mode 100644 Scripts/Items/Skill Items/Instruments/Harp.cs create mode 100644 Scripts/Items/Skill Items/Instruments/Horn.cs create mode 100644 Scripts/Items/Skill Items/Instruments/LapHarp.cs create mode 100644 Scripts/Items/Skill Items/Instruments/Lute.cs create mode 100644 Scripts/Items/Skill Items/Instruments/MagicHorn.cs create mode 100644 Scripts/Items/Skill Items/Instruments/Pipes.cs create mode 100644 Scripts/Items/Skill Items/Instruments/Tambourine.cs create mode 100644 Scripts/Items/Skill Items/Instruments/TambourineTassel.cs create mode 100644 Scripts/Items/Skill Items/Lumberjack/WoodBoard.cs create mode 100644 Scripts/Items/Skill Items/Magical/BlankScroll.cs create mode 100644 Scripts/Items/Skill Items/Magical/Bottle.cs create mode 100644 Scripts/Items/Skill Items/Magical/MagicRune.cs create mode 100644 Scripts/Items/Skill Items/Magical/Magicgate.cs create mode 100644 Scripts/Items/Skill Items/Magical/PotionKeg.cs create mode 100644 Scripts/Items/Skill Items/Misc/Bandage.cs create mode 100644 Scripts/Items/Skill Items/Misc/FireHorn.cs create mode 100644 Scripts/Items/Skill Items/Potions/Agility Potions/AgilityPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Agility Potions/BaseAgilityPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Agility Potions/GreaterAgilityPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/BasePotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Cure Potions/BaseCurePotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Cure Potions/CurePotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Cure Potions/GreaterCurePotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Cure Potions/LesserCurePotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Explosion Potions/BaseExplosionPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Explosion Potions/ExplosionPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Explosion Potions/GreaterExplosionPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Explosion Potions/LesserExplosionPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Heal Potions/BaseHealPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Heal Potions/GreaterHealPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Heal Potions/HealPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Heal Potions/LesserHealPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/NightSight.cs create mode 100644 Scripts/Items/Skill Items/Potions/Poison Potions/BasePoisonPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Poison Potions/DeadlyPoisonPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Poison Potions/GreaterPoisonPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Poison Potions/LesserPoisonPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Poison Potions/PoisonPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Refresh Potions/BaseRefreshPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Refresh Potions/RefreshPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Refresh Potions/TotalRefreshPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Strength Potions/BaseStrengthPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Strength Potions/GreaterStrengthPotion.cs create mode 100644 Scripts/Items/Skill Items/Potions/Strength Potions/StrengthPotion.cs create mode 100644 Scripts/Items/Skill Items/Tailor Items/Dressform.cs create mode 100644 Scripts/Items/Skill Items/Tailor Items/DyeTub.cs create mode 100644 Scripts/Items/Skill Items/Tailor Items/Dyes.cs create mode 100644 Scripts/Items/Skill Items/Tailor Items/FurnitureDyeTub.cs create mode 100644 Scripts/Items/Skill Items/Tailor Items/PigmentTub.cs create mode 100644 Scripts/Items/Skill Items/Tailor Items/Scissors.cs create mode 100644 Scripts/Items/Skill Items/Thief/DisguiseKit.cs create mode 100644 Scripts/Items/Skill Items/Thief/DisguisePersistance.cs create mode 100644 Scripts/Items/Skill Items/Thief/LockPick.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/Axle.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/AxleGears.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/ClockFrame.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/ClockParts.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/Clocks.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/Gears.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/Globe.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/Hinge.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/SextantParts.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/Springs.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/Spyglass.cs create mode 100644 Scripts/Items/Skill Items/Tinkering/Utensils.cs create mode 100644 Scripts/Items/Skill Items/Tools/BaseTool.cs create mode 100644 Scripts/Items/Skill Items/Tools/DovetailSaw.cs create mode 100644 Scripts/Items/Skill Items/Tools/DrawKnife.cs create mode 100644 Scripts/Items/Skill Items/Tools/FletcherTools.cs create mode 100644 Scripts/Items/Skill Items/Tools/FlourSifter.cs create mode 100644 Scripts/Items/Skill Items/Tools/Froe.cs create mode 100644 Scripts/Items/Skill Items/Tools/Hammer.cs create mode 100644 Scripts/Items/Skill Items/Tools/Inshave.cs create mode 100644 Scripts/Items/Skill Items/Tools/JointingPlane.cs create mode 100644 Scripts/Items/Skill Items/Tools/MapmakersPen.cs create mode 100644 Scripts/Items/Skill Items/Tools/MortarPestle.cs create mode 100644 Scripts/Items/Skill Items/Tools/MouldingPlane.cs create mode 100644 Scripts/Items/Skill Items/Tools/Nails.cs create mode 100644 Scripts/Items/Skill Items/Tools/RollingPin.cs create mode 100644 Scripts/Items/Skill Items/Tools/Saw.cs create mode 100644 Scripts/Items/Skill Items/Tools/Scorp.cs create mode 100644 Scripts/Items/Skill Items/Tools/ScribesPen.cs create mode 100644 Scripts/Items/Skill Items/Tools/SewingKit.cs create mode 100644 Scripts/Items/Skill Items/Tools/Skillet.cs create mode 100644 Scripts/Items/Skill Items/Tools/SledgeHammer.cs create mode 100644 Scripts/Items/Skill Items/Tools/SmithHammer.cs create mode 100644 Scripts/Items/Skill Items/Tools/SmoothingPlane.cs create mode 100644 Scripts/Items/Skill Items/Tools/TinkerTools.cs create mode 100644 Scripts/Items/Skill Items/Tools/Tongs.cs create mode 100644 Scripts/Items/Traps/AxeTrap.cs create mode 100644 Scripts/Items/Traps/BaseTrap.cs create mode 100644 Scripts/Items/Traps/DartTrap.cs create mode 100644 Scripts/Items/Traps/FireColumnTrap.cs create mode 100644 Scripts/Items/Traps/GasTrap.cs create mode 100644 Scripts/Items/Traps/GiantSpikeTrap.cs create mode 100644 Scripts/Items/Traps/MushroomTrap.cs create mode 100644 Scripts/Items/Traps/SawTrap.cs create mode 100644 Scripts/Items/Traps/SpikeTrap.cs create mode 100644 Scripts/Items/Traps/StoneFaceTrap.cs create mode 100644 Scripts/Items/Treasure/Loot.cs create mode 100644 Scripts/Items/Treasure/LootChest.cs create mode 100644 Scripts/Items/Treasure/LootChests.cs create mode 100644 Scripts/Items/Treasure/LootPack.cs create mode 100644 Scripts/Items/Treasure/OtherChests.cs create mode 100644 Scripts/Items/Treasure/SunkenShip.cs create mode 100644 Scripts/Items/Treasure/TreasureMapChest.cs create mode 100644 Scripts/Items/Wands/BaseWand.cs create mode 100644 Scripts/Items/Wands/ClumsyWand.cs create mode 100644 Scripts/Items/Wands/FeebleWand.cs create mode 100644 Scripts/Items/Wands/FireballWand.cs create mode 100644 Scripts/Items/Wands/GreaterHealWand.cs create mode 100644 Scripts/Items/Wands/HarmWand.cs create mode 100644 Scripts/Items/Wands/HealWand.cs create mode 100644 Scripts/Items/Wands/LightningWand.cs create mode 100644 Scripts/Items/Wands/MagicArrowWand.cs create mode 100644 Scripts/Items/Wands/ManaDrainWand.cs create mode 100644 Scripts/Items/Wands/MarkWand.cs create mode 100644 Scripts/Items/Wands/RecallWand.cs create mode 100644 Scripts/Items/Wands/RemoveTrapWand.cs create mode 100644 Scripts/Items/Wands/ResurrectionWand.cs create mode 100644 Scripts/Items/Wands/UnlockWand.cs create mode 100644 Scripts/Items/Wands/WandTarget.cs create mode 100644 Scripts/Items/Wands/WeaknessWand.cs create mode 100644 Scripts/Items/Weapons/Axes/Axe.cs create mode 100644 Scripts/Items/Weapons/Axes/BaseAxe.cs create mode 100644 Scripts/Items/Weapons/Axes/BattleAxe.cs create mode 100644 Scripts/Items/Weapons/Axes/DoubleAxe.cs create mode 100644 Scripts/Items/Weapons/Axes/ExecutionersAxe.cs create mode 100644 Scripts/Items/Weapons/Axes/Hatchet.cs create mode 100644 Scripts/Items/Weapons/Axes/LargeBattleAxe.cs create mode 100644 Scripts/Items/Weapons/Axes/Pickaxe.cs create mode 100644 Scripts/Items/Weapons/Axes/TwoHandedAxe.cs create mode 100644 Scripts/Items/Weapons/Axes/WarAxe.cs create mode 100644 Scripts/Items/Weapons/BaseMeleeWeapon.cs create mode 100644 Scripts/Items/Weapons/BaseWeapon.cs create mode 100644 Scripts/Items/Weapons/Fists.cs create mode 100644 Scripts/Items/Weapons/Knives/BaseKnife.cs create mode 100644 Scripts/Items/Weapons/Knives/ButcherKnife.cs create mode 100644 Scripts/Items/Weapons/Knives/Cleaver.cs create mode 100644 Scripts/Items/Weapons/Knives/Dagger.cs create mode 100644 Scripts/Items/Weapons/Knives/SkinningKnife.cs create mode 100644 Scripts/Items/Weapons/Knives/ThrowingDagger.cs create mode 100644 Scripts/Items/Weapons/Maces/BaseBashing.cs create mode 100644 Scripts/Items/Weapons/Maces/Club.cs create mode 100644 Scripts/Items/Weapons/Maces/HammerPick.cs create mode 100644 Scripts/Items/Weapons/Maces/Mace.cs create mode 100644 Scripts/Items/Weapons/Maces/Maul.cs create mode 100644 Scripts/Items/Weapons/Maces/WarHammer.cs create mode 100644 Scripts/Items/Weapons/Maces/WarMace.cs create mode 100644 Scripts/Items/Weapons/Maces/Whip.cs create mode 100644 Scripts/Items/Weapons/PoleArms/Bardiche.cs create mode 100644 Scripts/Items/Weapons/PoleArms/BasePoleArm.cs create mode 100644 Scripts/Items/Weapons/PoleArms/Halberd.cs create mode 100644 Scripts/Items/Weapons/PoleArms/Scythe.cs create mode 100644 Scripts/Items/Weapons/Ranged/BaseRanged.cs create mode 100644 Scripts/Items/Weapons/Ranged/Bow.cs create mode 100644 Scripts/Items/Weapons/Ranged/Crossbow.cs create mode 100644 Scripts/Items/Weapons/Ranged/HeavyCrossbow.cs create mode 100644 Scripts/Items/Weapons/SlayerEntry.cs create mode 100644 Scripts/Items/Weapons/SlayerGroup.cs create mode 100644 Scripts/Items/Weapons/SlayerName.cs create mode 100644 Scripts/Items/Weapons/SpearsAndForks/BaseSpear.cs create mode 100644 Scripts/Items/Weapons/SpearsAndForks/Pike.cs create mode 100644 Scripts/Items/Weapons/SpearsAndForks/Pitchfork.cs create mode 100644 Scripts/Items/Weapons/SpearsAndForks/Spear.cs create mode 100644 Scripts/Items/Weapons/SpearsAndForks/WarFork.cs create mode 100644 Scripts/Items/Weapons/Staves/BaseStaff.cs create mode 100644 Scripts/Items/Weapons/Staves/BlackStaff.cs create mode 100644 Scripts/Items/Weapons/Staves/GlacialStaff.cs create mode 100644 Scripts/Items/Weapons/Staves/GnarledStaff.cs create mode 100644 Scripts/Items/Weapons/Staves/QuarterStaff.cs create mode 100644 Scripts/Items/Weapons/Staves/ShepherdsCrook.cs create mode 100644 Scripts/Items/Weapons/Swords/BaseSword.cs create mode 100644 Scripts/Items/Weapons/Swords/Broadsword.cs create mode 100644 Scripts/Items/Weapons/Swords/Cutlass.cs create mode 100644 Scripts/Items/Weapons/Swords/Katana.cs create mode 100644 Scripts/Items/Weapons/Swords/Kryss.cs create mode 100644 Scripts/Items/Weapons/Swords/Longsword.cs create mode 100644 Scripts/Items/Weapons/Swords/Rapier.cs create mode 100644 Scripts/Items/Weapons/Swords/Scimitar.cs create mode 100644 Scripts/Items/Weapons/Swords/ThinLongsword.cs create mode 100644 Scripts/Items/Weapons/Swords/VikingSword.cs create mode 100644 Scripts/Items/Weapons/WeaponEnums.cs create mode 100644 Scripts/Misc/AccountPrompt.cs create mode 100644 Scripts/Misc/Animations.cs create mode 100644 Scripts/Misc/AttackMessage.cs create mode 100644 Scripts/Misc/AutoRestart.cs create mode 100644 Scripts/Misc/AutoSave.cs create mode 100644 Scripts/Misc/Broadcasts.cs create mode 100644 Scripts/Misc/CharacterCreation.cs create mode 100644 Scripts/Misc/Cleanup.cs create mode 100644 Scripts/Misc/ClientVerification.cs create mode 100644 Scripts/Misc/CrashGuard.cs create mode 100644 Scripts/Misc/DataPath.cs create mode 100644 Scripts/Misc/DispellableAttribute.cs create mode 100644 Scripts/Misc/DispellableFieldAttribute.cs create mode 100644 Scripts/Misc/Email.cs create mode 100644 Scripts/Misc/Emitter.cs create mode 100644 Scripts/Misc/Fastwalk.cs create mode 100644 Scripts/Misc/FoodDecay.cs create mode 100644 Scripts/Misc/Geometry.cs create mode 100644 Scripts/Misc/HardwareInfo.cs create mode 100644 Scripts/Misc/InhumanSpeech.cs create mode 100644 Scripts/Misc/Keywords.cs create mode 100644 Scripts/Misc/LanguageStatistics.cs create mode 100644 Scripts/Misc/LightCycle.cs create mode 100644 Scripts/Misc/LoginStats.cs create mode 100644 Scripts/Misc/MapDefinitions.cs create mode 100644 Scripts/Misc/NameList.cs create mode 100644 Scripts/Misc/NameVerification.cs create mode 100644 Scripts/Misc/Notoriety.cs create mode 100644 Scripts/Misc/Paperdoll.cs create mode 100644 Scripts/Misc/Poison.cs create mode 100644 Scripts/Misc/ProfanityProtection.cs create mode 100644 Scripts/Misc/Profile.cs create mode 100644 Scripts/Misc/ProtocolExtensions.cs create mode 100644 Scripts/Misc/RaceDefinitions.cs create mode 100644 Scripts/Misc/RegenRates.cs create mode 100644 Scripts/Misc/RenameRequests.cs create mode 100644 Scripts/Misc/ResourceInfo.cs create mode 100644 Scripts/Misc/ServerList.cs create mode 100644 Scripts/Misc/ShardPoller.cs create mode 100644 Scripts/Misc/ShrinkTable.cs create mode 100644 Scripts/Misc/SocketOptions.cs create mode 100644 Scripts/Misc/Tasks.cs create mode 100644 Scripts/Misc/TextDefinition.cs create mode 100644 Scripts/Misc/Titles.cs create mode 100644 Scripts/Misc/TreasureMapProtection.cs create mode 100644 Scripts/Misc/Ultima.cs create mode 100644 Scripts/Misc/Weather.cs create mode 100644 Scripts/Misc/WebStatus.cs create mode 100644 Scripts/Misc/WeightOverloading.cs create mode 100644 Scripts/Misc/WelcomeTimer.cs create mode 100644 Scripts/Mobiles/Animals/Ape.cs create mode 100644 Scripts/Mobiles/Animals/Bears/BlackBear.cs create mode 100644 Scripts/Mobiles/Animals/Bears/BrownBear.cs create mode 100644 Scripts/Mobiles/Animals/Bears/CaveBear.cs create mode 100644 Scripts/Mobiles/Animals/Bears/GrizzlyBear.cs create mode 100644 Scripts/Mobiles/Animals/Bears/KodiakBear.cs create mode 100644 Scripts/Mobiles/Animals/Bears/PandaBear.cs create mode 100644 Scripts/Mobiles/Animals/Bears/PolarBear.cs create mode 100644 Scripts/Mobiles/Animals/Bears/SnowBear.cs create mode 100644 Scripts/Mobiles/Animals/Birds/AxeBeak.cs create mode 100644 Scripts/Mobiles/Animals/Birds/Bird.cs create mode 100644 Scripts/Mobiles/Animals/Birds/Chicken.cs create mode 100644 Scripts/Mobiles/Animals/Birds/Eagle.cs create mode 100644 Scripts/Mobiles/Animals/Birds/GiantHawk.cs create mode 100644 Scripts/Mobiles/Animals/Birds/GiantRaven.cs create mode 100644 Scripts/Mobiles/Animals/Birds/Phoenix.cs create mode 100644 Scripts/Mobiles/Animals/Birds/Roc.cs create mode 100644 Scripts/Mobiles/Animals/Birds/Turkey.cs create mode 100644 Scripts/Mobiles/Animals/Boar.cs create mode 100644 Scripts/Mobiles/Animals/Canines/DireWolf.cs create mode 100644 Scripts/Mobiles/Animals/Canines/Dog.cs create mode 100644 Scripts/Mobiles/Animals/Canines/GreyWolf.cs create mode 100644 Scripts/Mobiles/Animals/Canines/TimberWolf.cs create mode 100644 Scripts/Mobiles/Animals/Canines/Werewolf.cs create mode 100644 Scripts/Mobiles/Animals/Canines/WhiteWolf.cs create mode 100644 Scripts/Mobiles/Animals/Cows/Bull.cs create mode 100644 Scripts/Mobiles/Animals/Cows/Cow.cs create mode 100644 Scripts/Mobiles/Animals/Deer.cs create mode 100644 Scripts/Mobiles/Animals/Felines/Cat.cs create mode 100644 Scripts/Mobiles/Animals/Felines/Cougar.cs create mode 100644 Scripts/Mobiles/Animals/Felines/Lion.cs create mode 100644 Scripts/Mobiles/Animals/Felines/Panther.cs create mode 100644 Scripts/Mobiles/Animals/Felines/SnowLeopard.cs create mode 100644 Scripts/Mobiles/Animals/Felines/Tiger.cs create mode 100644 Scripts/Mobiles/Animals/Goat.cs create mode 100644 Scripts/Mobiles/Animals/Gorilla.cs create mode 100644 Scripts/Mobiles/Animals/GreatDeer.cs create mode 100644 Scripts/Mobiles/Animals/MountainGoat.cs create mode 100644 Scripts/Mobiles/Animals/Pets/BaseMount.cs create mode 100644 Scripts/Mobiles/Animals/Pets/Horse.cs create mode 100644 Scripts/Mobiles/Animals/Pets/Llama.cs create mode 100644 Scripts/Mobiles/Animals/Pets/PackHorse.cs create mode 100644 Scripts/Mobiles/Animals/Pets/PackLlama.cs create mode 100644 Scripts/Mobiles/Animals/Pig.cs create mode 100644 Scripts/Mobiles/Animals/Rodents/Bat.cs create mode 100644 Scripts/Mobiles/Animals/Rodents/CaveBat.cs create mode 100644 Scripts/Mobiles/Animals/Rodents/GiantRat.cs create mode 100644 Scripts/Mobiles/Animals/Rodents/Rabbit.cs create mode 100644 Scripts/Mobiles/Animals/Rodents/Raccoon.cs create mode 100644 Scripts/Mobiles/Animals/Rodents/Rat.cs create mode 100644 Scripts/Mobiles/Animals/Rodents/Squirrel.cs create mode 100644 Scripts/Mobiles/Animals/Rodents/VampireBat.cs create mode 100644 Scripts/Mobiles/Animals/Sheep.cs create mode 100644 Scripts/Mobiles/Animals/Walrus.cs create mode 100644 Scripts/Mobiles/Animals/WoolyBanta.cs create mode 100644 Scripts/Mobiles/Base/AI/AIControlMobileTarget.cs create mode 100644 Scripts/Mobiles/Base/AI/AnimalAI.cs create mode 100644 Scripts/Mobiles/Base/AI/ArcherAI.cs create mode 100644 Scripts/Mobiles/Base/AI/BaseAI.cs create mode 100644 Scripts/Mobiles/Base/AI/BerserkAI.cs create mode 100644 Scripts/Mobiles/Base/AI/CitizenAI.cs create mode 100644 Scripts/Mobiles/Base/AI/HealerAI.cs create mode 100644 Scripts/Mobiles/Base/AI/MageAI.cs create mode 100644 Scripts/Mobiles/Base/AI/MeleeAI.cs create mode 100644 Scripts/Mobiles/Base/AI/PredatorAI.cs create mode 100644 Scripts/Mobiles/Base/AI/SpeedInfo.cs create mode 100644 Scripts/Mobiles/Base/AI/ThiefAI.cs create mode 100644 Scripts/Mobiles/Base/AI/TimidAI.cs create mode 100644 Scripts/Mobiles/Base/AI/VendorAI.cs create mode 100644 Scripts/Mobiles/Base/AnimalBuy.cs create mode 100644 Scripts/Mobiles/Base/BaseCreature.cs create mode 100644 Scripts/Mobiles/Base/BaseGuildmaster.cs create mode 100644 Scripts/Mobiles/Base/BaseHealer.cs create mode 100644 Scripts/Mobiles/Base/BaseVendor.cs create mode 100644 Scripts/Mobiles/Base/BeverageBuy.cs create mode 100644 Scripts/Mobiles/Base/GenericBuy.cs create mode 100644 Scripts/Mobiles/Base/GenericSell.cs create mode 100644 Scripts/Mobiles/Base/PlayerBarkeeper.cs create mode 100644 Scripts/Mobiles/Base/PlayerMobile.cs create mode 100644 Scripts/Mobiles/Base/PlayerVendor.cs create mode 100644 Scripts/Mobiles/Base/PresetMapBuy.cs create mode 100644 Scripts/Mobiles/Base/RentedVendor.cs create mode 100644 Scripts/Mobiles/Base/VendorInventory.cs create mode 100644 Scripts/Mobiles/Bugs/AntLion.cs create mode 100644 Scripts/Mobiles/Bugs/AntaurLord.cs create mode 100644 Scripts/Mobiles/Bugs/AntaurQueen.cs create mode 100644 Scripts/Mobiles/Bugs/AntaurSoldier.cs create mode 100644 Scripts/Mobiles/Bugs/AntaurWorker.cs create mode 100644 Scripts/Mobiles/Bugs/ArcaneScarab.cs create mode 100644 Scripts/Mobiles/Bugs/Beetle.cs create mode 100644 Scripts/Mobiles/Bugs/BloodSpider.cs create mode 100644 Scripts/Mobiles/Bugs/CarcassWorm.cs create mode 100644 Scripts/Mobiles/Bugs/DeadlyScorpion.cs create mode 100644 Scripts/Mobiles/Bugs/DreadSpider.cs create mode 100644 Scripts/Mobiles/Bugs/FireBeetle.cs create mode 100644 Scripts/Mobiles/Bugs/FlameCrawler.cs create mode 100644 Scripts/Mobiles/Bugs/FrostSpider.cs create mode 100644 Scripts/Mobiles/Bugs/GiantBlackWidow.cs create mode 100644 Scripts/Mobiles/Bugs/GiantScarab.cs create mode 100644 Scripts/Mobiles/Bugs/GiantSpider.cs create mode 100644 Scripts/Mobiles/Bugs/GoraxHorned.cs create mode 100644 Scripts/Mobiles/Bugs/GoraxSlicer.cs create mode 100644 Scripts/Mobiles/Bugs/IronBeetle.cs create mode 100644 Scripts/Mobiles/Bugs/Kith.cs create mode 100644 Scripts/Mobiles/Bugs/Mantis.cs create mode 100644 Scripts/Mobiles/Bugs/SandScorpion.cs create mode 100644 Scripts/Mobiles/Bugs/SandSpider.cs create mode 100644 Scripts/Mobiles/Bugs/Scarab.cs create mode 100644 Scripts/Mobiles/Bugs/Scorpion.cs create mode 100644 Scripts/Mobiles/Bugs/Shaclaw.cs create mode 100644 Scripts/Mobiles/Bugs/Swarm.cs create mode 100644 Scripts/Mobiles/Bugs/TerathanAvenger.cs create mode 100644 Scripts/Mobiles/Bugs/TerathanDrone.cs create mode 100644 Scripts/Mobiles/Bugs/TerathanMatriarch.cs create mode 100644 Scripts/Mobiles/Bugs/TerathanWarrior.cs create mode 100644 Scripts/Mobiles/Bugs/WidowQueen.cs create mode 100644 Scripts/Mobiles/Demons/Balron.cs create mode 100644 Scripts/Mobiles/Demons/Daemon.cs create mode 100644 Scripts/Mobiles/Demons/DemonClaw.cs create mode 100644 Scripts/Mobiles/Demons/Demoness.cs create mode 100644 Scripts/Mobiles/Demons/DemonicSpirit.cs create mode 100644 Scripts/Mobiles/Demons/Deviless.cs create mode 100644 Scripts/Mobiles/Demons/FireMephit.cs create mode 100644 Scripts/Mobiles/Demons/HornedDevil.cs create mode 100644 Scripts/Mobiles/Demons/IceDevil.cs create mode 100644 Scripts/Mobiles/Demons/IceFiend.cs create mode 100644 Scripts/Mobiles/Demons/IceMephit.cs create mode 100644 Scripts/Mobiles/Demons/Imp.cs create mode 100644 Scripts/Mobiles/Demons/Minion.cs create mode 100644 Scripts/Mobiles/Demons/MinionWarrior.cs create mode 100644 Scripts/Mobiles/Demons/MinionWizard.cs create mode 100644 Scripts/Mobiles/Demons/ShadowDemon.cs create mode 100644 Scripts/Mobiles/Demons/Succubus.cs create mode 100644 Scripts/Mobiles/Demons/SuccubusQueen.cs create mode 100644 Scripts/Mobiles/Dragons/AncientWyrm.cs create mode 100644 Scripts/Mobiles/Dragons/AncientWyvern.cs create mode 100644 Scripts/Mobiles/Dragons/Dragon.cs create mode 100644 Scripts/Mobiles/Dragons/Drake.cs create mode 100644 Scripts/Mobiles/Dragons/Drakkhen.cs create mode 100644 Scripts/Mobiles/Dragons/LavaDrake.cs create mode 100644 Scripts/Mobiles/Dragons/SeaDragon.cs create mode 100644 Scripts/Mobiles/Dragons/SeaDrake.cs create mode 100644 Scripts/Mobiles/Dragons/ShadowWyrm.cs create mode 100644 Scripts/Mobiles/Dragons/SwampDragon.cs create mode 100644 Scripts/Mobiles/Dragons/WhiteWyrm.cs create mode 100644 Scripts/Mobiles/Dragons/Wyvern.cs create mode 100644 Scripts/Mobiles/Elemental/AcidElemental.cs create mode 100644 Scripts/Mobiles/Elemental/AirElemental.cs create mode 100644 Scripts/Mobiles/Elemental/BloodElemental.cs create mode 100644 Scripts/Mobiles/Elemental/BloodElementalElder.cs create mode 100644 Scripts/Mobiles/Elemental/DeepSeaElemental.cs create mode 100644 Scripts/Mobiles/Elemental/EarthElemental.cs create mode 100644 Scripts/Mobiles/Elemental/Efreet.cs create mode 100644 Scripts/Mobiles/Elemental/FireElemental.cs create mode 100644 Scripts/Mobiles/Elemental/GasCloud.cs create mode 100644 Scripts/Mobiles/Elemental/Genie.cs create mode 100644 Scripts/Mobiles/Elemental/Goliath.cs create mode 100644 Scripts/Mobiles/Elemental/IceElemental.cs create mode 100644 Scripts/Mobiles/Elemental/LightningElemental.cs create mode 100644 Scripts/Mobiles/Elemental/MagmaElemental.cs create mode 100644 Scripts/Mobiles/Elemental/MeteorElemental.cs create mode 100644 Scripts/Mobiles/Elemental/MudElemental.cs create mode 100644 Scripts/Mobiles/Elemental/PoisonElemental.cs create mode 100644 Scripts/Mobiles/Elemental/PoisonElementalElder.cs create mode 100644 Scripts/Mobiles/Elemental/SandVortex.cs create mode 100644 Scripts/Mobiles/Elemental/SnowElemental.cs create mode 100644 Scripts/Mobiles/Elemental/StoneGolem.cs create mode 100644 Scripts/Mobiles/Elemental/StoneStatue.cs create mode 100644 Scripts/Mobiles/Elemental/StormCloud.cs create mode 100644 Scripts/Mobiles/Elemental/Typhoon.cs create mode 100644 Scripts/Mobiles/Elemental/WaterElemental.cs create mode 100644 Scripts/Mobiles/Elemental/WaterElementalElder.cs create mode 100644 Scripts/Mobiles/Elemental/WoodElemental.cs create mode 100644 Scripts/Mobiles/Fey/Centaur.cs create mode 100644 Scripts/Mobiles/Fey/DreadHorn.cs create mode 100644 Scripts/Mobiles/Fey/Fairy.cs create mode 100644 Scripts/Mobiles/Fey/Pixie.cs create mode 100644 Scripts/Mobiles/Fey/Satyr.cs create mode 100644 Scripts/Mobiles/Fey/Unicorn.cs create mode 100644 Scripts/Mobiles/Fey/Wisp.cs create mode 100644 Scripts/Mobiles/Gargoyles/FireGargoyle.cs create mode 100644 Scripts/Mobiles/Gargoyles/Gargoyle.cs create mode 100644 Scripts/Mobiles/Gargoyles/GargoyleCrimson.cs create mode 100644 Scripts/Mobiles/Gargoyles/GargoyleIce.cs create mode 100644 Scripts/Mobiles/Gargoyles/GargoyleKnight.cs create mode 100644 Scripts/Mobiles/Gargoyles/GargoyleMage.cs create mode 100644 Scripts/Mobiles/Gargoyles/GargoyleStone.cs create mode 100644 Scripts/Mobiles/Gargoyles/GargoyleUndead.cs create mode 100644 Scripts/Mobiles/Gargoyles/GargoyleWizard.cs create mode 100644 Scripts/Mobiles/Gargoyles/StoneGargoyle.cs create mode 100644 Scripts/Mobiles/Gargoyles/ZombieGargoyle.cs create mode 100644 Scripts/Mobiles/Giants/ArcticOgreLord.cs create mode 100644 Scripts/Mobiles/Giants/Cyclops.cs create mode 100644 Scripts/Mobiles/Giants/CyclopsChief.cs create mode 100644 Scripts/Mobiles/Giants/CyclopsLord.cs create mode 100644 Scripts/Mobiles/Giants/Ettin.cs create mode 100644 Scripts/Mobiles/Giants/ForestGiant.cs create mode 100644 Scripts/Mobiles/Giants/FrostGiant.cs create mode 100644 Scripts/Mobiles/Giants/HillGiant.cs create mode 100644 Scripts/Mobiles/Giants/JungleGiant.cs create mode 100644 Scripts/Mobiles/Giants/MountainGiant.cs create mode 100644 Scripts/Mobiles/Giants/Ogre.cs create mode 100644 Scripts/Mobiles/Giants/OgreLord.cs create mode 100644 Scripts/Mobiles/Giants/OgreMagi.cs create mode 100644 Scripts/Mobiles/Giants/SandGiant.cs create mode 100644 Scripts/Mobiles/Giants/SeaGiant.cs create mode 100644 Scripts/Mobiles/Giants/ShadowTitan.cs create mode 100644 Scripts/Mobiles/Giants/SnowEttin.cs create mode 100644 Scripts/Mobiles/Giants/StormGiant.cs create mode 100644 Scripts/Mobiles/Giants/Titan.cs create mode 100644 Scripts/Mobiles/Hellish/Cerberus.cs create mode 100644 Scripts/Mobiles/Hellish/Haderus.cs create mode 100644 Scripts/Mobiles/Hellish/HellCat.cs create mode 100644 Scripts/Mobiles/Hellish/HellHound.cs create mode 100644 Scripts/Mobiles/Hellish/Manticore.cs create mode 100644 Scripts/Mobiles/Hellish/Nightmare.cs create mode 100644 Scripts/Mobiles/Hellish/Serperus.cs create mode 100644 Scripts/Mobiles/Humanoid/BlackKnight.cs create mode 100644 Scripts/Mobiles/Humanoid/Brigand.cs create mode 100644 Scripts/Mobiles/Humanoid/Bugbear.cs create mode 100644 Scripts/Mobiles/Humanoid/Caveman.cs create mode 100644 Scripts/Mobiles/Humanoid/Dwarf.cs create mode 100644 Scripts/Mobiles/Humanoid/DwarfKnight.cs create mode 100644 Scripts/Mobiles/Humanoid/DwarfWarrior.cs create mode 100644 Scripts/Mobiles/Humanoid/EvilMage.cs create mode 100644 Scripts/Mobiles/Humanoid/EvilMageLord.cs create mode 100644 Scripts/Mobiles/Humanoid/Executioner.cs create mode 100644 Scripts/Mobiles/Humanoid/FrostTroll.cs create mode 100644 Scripts/Mobiles/Humanoid/Goblin.cs create mode 100644 Scripts/Mobiles/Humanoid/GoblinArcher.cs create mode 100644 Scripts/Mobiles/Humanoid/GoblinWarrior.cs create mode 100644 Scripts/Mobiles/Humanoid/Hobgoblin.cs create mode 100644 Scripts/Mobiles/Humanoid/HobgoblinArcher.cs create mode 100644 Scripts/Mobiles/Humanoid/HobgoblinChief.cs create mode 100644 Scripts/Mobiles/Humanoid/HobgoblinShaman.cs create mode 100644 Scripts/Mobiles/Humanoid/MindFlayer.cs create mode 100644 Scripts/Mobiles/Humanoid/Minotaur.cs create mode 100644 Scripts/Mobiles/Humanoid/MinotaurChief.cs create mode 100644 Scripts/Mobiles/Humanoid/MinotaurLord.cs create mode 100644 Scripts/Mobiles/Humanoid/Orc.cs create mode 100644 Scripts/Mobiles/Humanoid/OrcCaptain.cs create mode 100644 Scripts/Mobiles/Humanoid/OrcishLord.cs create mode 100644 Scripts/Mobiles/Humanoid/OrcishMage.cs create mode 100644 Scripts/Mobiles/Humanoid/Pharaoh.cs create mode 100644 Scripts/Mobiles/Humanoid/Pirate.cs create mode 100644 Scripts/Mobiles/Humanoid/Ratman.cs create mode 100644 Scripts/Mobiles/Humanoid/RatmanArcher.cs create mode 100644 Scripts/Mobiles/Humanoid/RatmanMage.cs create mode 100644 Scripts/Mobiles/Humanoid/Savage.cs create mode 100644 Scripts/Mobiles/Humanoid/SavageLeader.cs create mode 100644 Scripts/Mobiles/Humanoid/SavageShaman.cs create mode 100644 Scripts/Mobiles/Humanoid/Troll.cs create mode 100644 Scripts/Mobiles/Humanoid/Yeti.cs create mode 100644 Scripts/Mobiles/Monsters/AncientGazer.cs create mode 100644 Scripts/Mobiles/Monsters/AncientSphinx.cs create mode 100644 Scripts/Mobiles/Monsters/CaveDweller.cs create mode 100644 Scripts/Mobiles/Monsters/ElderGazer.cs create mode 100644 Scripts/Mobiles/Monsters/ElderHarpy.cs create mode 100644 Scripts/Mobiles/Monsters/FrostOoze.cs create mode 100644 Scripts/Mobiles/Monsters/Gazer.cs create mode 100644 Scripts/Mobiles/Monsters/Golem.cs create mode 100644 Scripts/Mobiles/Monsters/Griffon.cs create mode 100644 Scripts/Mobiles/Monsters/Harpy.cs create mode 100644 Scripts/Mobiles/Monsters/HeadlessOne.cs create mode 100644 Scripts/Mobiles/Monsters/Hippogriff.cs create mode 100644 Scripts/Mobiles/Monsters/LargeSlime.cs create mode 100644 Scripts/Mobiles/Monsters/Mongbat.cs create mode 100644 Scripts/Mobiles/Monsters/Owlbear.cs create mode 100644 Scripts/Mobiles/Monsters/RoyalSphinx.cs create mode 100644 Scripts/Mobiles/Monsters/Sasquatch.cs create mode 100644 Scripts/Mobiles/Monsters/Slime.cs create mode 100644 Scripts/Mobiles/Monsters/Sludge.cs create mode 100644 Scripts/Mobiles/Monsters/Sphinx.cs create mode 100644 Scripts/Mobiles/Monsters/Stalker.cs create mode 100644 Scripts/Mobiles/Monsters/Stirge.cs create mode 100644 Scripts/Mobiles/Monsters/StoneHarpy.cs create mode 100644 Scripts/Mobiles/Monsters/Xorn.cs create mode 100644 Scripts/Mobiles/Plants/BloodLotus.cs create mode 100644 Scripts/Mobiles/Plants/Corpser.cs create mode 100644 Scripts/Mobiles/Plants/Ent.cs create mode 100644 Scripts/Mobiles/Plants/Fungal.cs create mode 100644 Scripts/Mobiles/Plants/FungalMage.cs create mode 100644 Scripts/Mobiles/Plants/Reaper.cs create mode 100644 Scripts/Mobiles/Plants/Shambler.cs create mode 100644 Scripts/Mobiles/Plants/ShamblingMound.cs create mode 100644 Scripts/Mobiles/Plants/SwampTentacle.cs create mode 100644 Scripts/Mobiles/Plants/SwampThing.cs create mode 100644 Scripts/Mobiles/Plants/WhippingVine.cs create mode 100644 Scripts/Mobiles/Reptilians/Alligator.cs create mode 100644 Scripts/Mobiles/Reptilians/BullFrog.cs create mode 100644 Scripts/Mobiles/Reptilians/Dinosaurs/Gorceratops.cs create mode 100644 Scripts/Mobiles/Reptilians/Dinosaurs/Meglasaur.cs create mode 100644 Scripts/Mobiles/Reptilians/Dinosaurs/Raptor.cs create mode 100644 Scripts/Mobiles/Reptilians/Dinosaurs/Stegosaurus.cs create mode 100644 Scripts/Mobiles/Reptilians/Dinosaurs/Teradactyl.cs create mode 100644 Scripts/Mobiles/Reptilians/Dinosaurs/Tyranasaur.cs create mode 100644 Scripts/Mobiles/Reptilians/DragonTurtle.cs create mode 100644 Scripts/Mobiles/Reptilians/Drasolisk.cs create mode 100644 Scripts/Mobiles/Reptilians/FireSalamander.cs create mode 100644 Scripts/Mobiles/Reptilians/FireToad.cs create mode 100644 Scripts/Mobiles/Reptilians/GiantLizard.cs create mode 100644 Scripts/Mobiles/Reptilians/GiantToad.cs create mode 100644 Scripts/Mobiles/Reptilians/Hydra.cs create mode 100644 Scripts/Mobiles/Reptilians/IceSalamander.cs create mode 100644 Scripts/Mobiles/Reptilians/IceToad.cs create mode 100644 Scripts/Mobiles/Reptilians/LavaLizard.cs create mode 100644 Scripts/Mobiles/Reptilians/Lizardman.cs create mode 100644 Scripts/Mobiles/Reptilians/Sakkhra.cs create mode 100644 Scripts/Mobiles/Reptilians/SakkhraShaman.cs create mode 100644 Scripts/Mobiles/Reptilians/Seeker.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/Cobra.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/FireNaga.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/GiantSerpent.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/IceSerpent.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/Kobra.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/LavaSerpent.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/Medusa.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/Naga.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/NagaQueen.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/NagaWarrior.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/OphidianArchmage.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/OphidianKnight.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/OphidianMage.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/OphidianMatriarch.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/OphidianWarrior.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/SilverSerpent.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/Snake.cs create mode 100644 Scripts/Mobiles/Reptilians/Serpents/Viper.cs create mode 100644 Scripts/Mobiles/Reptilians/Silisk.cs create mode 100644 Scripts/Mobiles/Reptilians/Torax.cs create mode 100644 Scripts/Mobiles/Reptilians/Turtle.cs create mode 100644 Scripts/Mobiles/Sea/Dagon.cs create mode 100644 Scripts/Mobiles/Sea/DeepSeaSerpent.cs create mode 100644 Scripts/Mobiles/Sea/Dolphin.cs create mode 100644 Scripts/Mobiles/Sea/GiantCrab.cs create mode 100644 Scripts/Mobiles/Sea/GiantEel.cs create mode 100644 Scripts/Mobiles/Sea/GiantSquid.cs create mode 100644 Scripts/Mobiles/Sea/GreatWhite.cs create mode 100644 Scripts/Mobiles/Sea/Kraken.cs create mode 100644 Scripts/Mobiles/Sea/Krakoa.cs create mode 100644 Scripts/Mobiles/Sea/Ktulu.cs create mode 100644 Scripts/Mobiles/Sea/Leviathan.cs create mode 100644 Scripts/Mobiles/Sea/Lobstran.cs create mode 100644 Scripts/Mobiles/Sea/Lochasaur.cs create mode 100644 Scripts/Mobiles/Sea/Lurker.cs create mode 100644 Scripts/Mobiles/Sea/Megalodon.cs create mode 100644 Scripts/Mobiles/Sea/Sahuagin.cs create mode 100644 Scripts/Mobiles/Sea/SahuaginMage.cs create mode 100644 Scripts/Mobiles/Sea/SeaDevil.cs create mode 100644 Scripts/Mobiles/Sea/SeaHydra.cs create mode 100644 Scripts/Mobiles/Sea/SeaSerpent.cs create mode 100644 Scripts/Mobiles/Sea/Seahorse.cs create mode 100644 Scripts/Mobiles/Sea/Shark.cs create mode 100644 Scripts/Mobiles/Summoned/BladeSpirits.cs create mode 100644 Scripts/Mobiles/Summoned/EnergyVortex.cs create mode 100644 Scripts/Mobiles/Towns/Actions.cs create mode 100644 Scripts/Mobiles/Towns/Citizens/CampAAddon.cs create mode 100644 Scripts/Mobiles/Towns/Citizens/CampBAddon.cs create mode 100644 Scripts/Mobiles/Towns/Citizens/CampCAddon.cs create mode 100644 Scripts/Mobiles/Towns/Citizens/CampDAddon.cs create mode 100644 Scripts/Mobiles/Towns/Citizens/Citizen.cs create mode 100644 Scripts/Mobiles/Towns/Citizens/CitizenDress.cs create mode 100644 Scripts/Mobiles/Towns/Citizens/CitizenTalk.cs create mode 100644 Scripts/Mobiles/Towns/Citizens/CitizenTitles.cs create mode 100644 Scripts/Mobiles/Towns/Guard.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/AlchemistGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/AssassinGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/BardGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/BlacksmithGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/CarpentryGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/HealerGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/LibraryGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/MageGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/MarinerGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/RangerGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/TailorGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/ThiefGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/TinkerGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Guildmasters/WarriorGuildmaster.cs create mode 100644 Scripts/Mobiles/Towns/Healer.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Armors/SBChainmailArmor.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Armors/SBHelmetArmor.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Armors/SBLeatherArmor.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Armors/SBMetalShields.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Armors/SBPlateArmor.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Armors/SBRingmailArmor.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Armors/SBStuddedArmor.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Armors/SBWoodenShields.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBAlchemist.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBArchitect.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBAssassin.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBBaker.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBBard.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBBarkeeper.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBBeekeeper.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBBlacksmith.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBBowyer.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBButcher.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBCarpenter.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBCobbler.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBCook.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBFarmer.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBFisherman.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBGuilds.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBGypsy.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBHairStylist.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBHealer.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBHerbalist.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBInfo.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBInnKeeper.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBJester.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBJewel.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBLeatherWorker.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBMage.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBMapmaker.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBMiller.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBMiner.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBPlayerBarkeeper.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBProvisioner.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBRanger.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBScribe.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBShipwright.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBSmithTools.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBStableMaster.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBTailor.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBTanner.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBTavernKeeper.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBThief.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBTinker.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBWaiter.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBWeaponSmith.cs create mode 100644 Scripts/Mobiles/Towns/Sales/SBWeaver.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Weapons/SBAxeWeapon.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Weapons/SBKnifeWeapon.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Weapons/SBMaceWeapon.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Weapons/SBPoleArmWeapon.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Weapons/SBRangedWeapon.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Weapons/SBSpearForkWeapon.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Weapons/SBStavesWeapon.cs create mode 100644 Scripts/Mobiles/Towns/Sales/Weapons/SBSwordWeapon.cs create mode 100644 Scripts/Mobiles/Towns/TownCrier.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Alchemist.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Architect.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Armorer.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Baker.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Barber.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Bard.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Barkeeper.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Beekeeper.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Blacksmith.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Bowyer.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Butcher.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Carpenter.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Cobbler.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Cook.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Farmer.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Fighter.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Fisherman.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Gypsy.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/HairStylist.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Herbalist.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Innkeeper.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/IronWorker.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Jester.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Jeweler.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/LeatherWorker.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Lumberjack.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Mage.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Mapmaker.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Miller.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Miner.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Minstrel.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Provisioner.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Ranger.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Scribe.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Shipwright.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/StableMaster.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Tailor.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Tanner.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/TavernKeeper.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Thief.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Tinker.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Waiter.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Weaponsmith.cs create mode 100644 Scripts/Mobiles/Towns/Vendors/Weaver.cs create mode 100644 Scripts/Mobiles/Undead/AncientLich.cs create mode 100644 Scripts/Mobiles/Undead/AncientVampire.cs create mode 100644 Scripts/Mobiles/Undead/BoneClaw.cs create mode 100644 Scripts/Mobiles/Undead/BoneDrake.cs create mode 100644 Scripts/Mobiles/Undead/BoneKnight.cs create mode 100644 Scripts/Mobiles/Undead/BoneMagi.cs create mode 100644 Scripts/Mobiles/Undead/CorpseGolem.cs create mode 100644 Scripts/Mobiles/Undead/Demilich.cs create mode 100644 Scripts/Mobiles/Undead/FleshGolem.cs create mode 100644 Scripts/Mobiles/Undead/FleshGoliath.cs create mode 100644 Scripts/Mobiles/Undead/Ghoul.cs create mode 100644 Scripts/Mobiles/Undead/Lich.cs create mode 100644 Scripts/Mobiles/Undead/LichLord.cs create mode 100644 Scripts/Mobiles/Undead/Mummy.cs create mode 100644 Scripts/Mobiles/Undead/MummyLord.cs create mode 100644 Scripts/Mobiles/Undead/Nazghoul.cs create mode 100644 Scripts/Mobiles/Undead/RottingCorpse.cs create mode 100644 Scripts/Mobiles/Undead/RottingDrake.cs create mode 100644 Scripts/Mobiles/Undead/Shade.cs create mode 100644 Scripts/Mobiles/Undead/SkeletalDragon.cs create mode 100644 Scripts/Mobiles/Undead/SkeletalKnight.cs create mode 100644 Scripts/Mobiles/Undead/SkeletalMage.cs create mode 100644 Scripts/Mobiles/Undead/Skeleton.cs create mode 100644 Scripts/Mobiles/Undead/SkeletonArcher.cs create mode 100644 Scripts/Mobiles/Undead/Spectre.cs create mode 100644 Scripts/Mobiles/Undead/Vampire.cs create mode 100644 Scripts/Mobiles/Undead/VampireLord.cs create mode 100644 Scripts/Mobiles/Undead/VampiricDragon.cs create mode 100644 Scripts/Mobiles/Undead/VampiricDrake.cs create mode 100644 Scripts/Mobiles/Undead/Wight.cs create mode 100644 Scripts/Mobiles/Undead/Wraith.cs create mode 100644 Scripts/Mobiles/Undead/Zombie.cs create mode 100644 Scripts/Mobiles/Undead/ZombieDragon.cs create mode 100644 Scripts/Multis/BaseHouse.cs create mode 100644 Scripts/Multis/Boats/BaseBoat.cs create mode 100644 Scripts/Multis/Boats/BaseBoatDeed.cs create mode 100644 Scripts/Multis/Boats/BaseDockedBoat.cs create mode 100644 Scripts/Multis/Boats/BoatNavigation.cs create mode 100644 Scripts/Multis/Boats/ConfirmDryDockGump.cs create mode 100644 Scripts/Multis/Boats/Hold.cs create mode 100644 Scripts/Multis/Boats/LargeBoat.cs create mode 100644 Scripts/Multis/Boats/LargeDragonBoat.cs create mode 100644 Scripts/Multis/Boats/MediumBoat.cs create mode 100644 Scripts/Multis/Boats/MediumDragonBoat.cs create mode 100644 Scripts/Multis/Boats/Plank.cs create mode 100644 Scripts/Multis/Boats/RenameBoatPrompt.cs create mode 100644 Scripts/Multis/Boats/SmallBoat.cs create mode 100644 Scripts/Multis/Boats/SmallDragonBoat.cs create mode 100644 Scripts/Multis/Boats/Strandedness.cs create mode 100644 Scripts/Multis/Boats/TillerMan.cs create mode 100644 Scripts/Multis/Boats/Vessels.cs create mode 100644 Scripts/Multis/ComponentVerification.cs create mode 100644 Scripts/Multis/Deeds.cs create mode 100644 Scripts/Multis/HouseFoundation.cs create mode 100644 Scripts/Multis/HousePlacement.cs create mode 100644 Scripts/Multis/HousePlacementTool.cs create mode 100644 Scripts/Multis/HouseSign.cs create mode 100644 Scripts/Multis/HouseTeleporter.cs create mode 100644 Scripts/Multis/Houses.cs create mode 100644 Scripts/Multis/MovingCrate.cs create mode 100644 Scripts/Multis/NewHouses.cs create mode 100644 Scripts/Multis/PreviewHouse.cs create mode 100644 Scripts/Multis/ViewHousesGump.cs create mode 100644 Scripts/Quests/BookOfLore.cs create mode 100644 Scripts/Quests/ChestOfSecrets.cs create mode 100644 Scripts/Quests/QuestFunctions.cs create mode 100644 Scripts/Regions/BaseRegion.cs create mode 100644 Scripts/Regions/BuildingRegion.cs create mode 100644 Scripts/Regions/CaveRegion.cs create mode 100644 Scripts/Regions/DangerRegion.cs create mode 100644 Scripts/Regions/DungeonRegion.cs create mode 100644 Scripts/Regions/GardenRegion.cs create mode 100644 Scripts/Regions/GateRegion.cs create mode 100644 Scripts/Regions/GraveRegion.cs create mode 100644 Scripts/Regions/HouseRegion.cs create mode 100644 Scripts/Regions/InnRegion.cs create mode 100644 Scripts/Regions/LandMap.cs create mode 100644 Scripts/Regions/MountlessRegion.cs create mode 100644 Scripts/Regions/NoHousingRegion.cs create mode 100644 Scripts/Regions/OutskirtRegion.cs create mode 100644 Scripts/Regions/PirateRegion.cs create mode 100644 Scripts/Regions/RegionMusic.cs create mode 100644 Scripts/Regions/ShrineRegion.cs create mode 100644 Scripts/Regions/ShrinesRegion.cs create mode 100644 Scripts/Regions/Spawning/SpawnDefinition.cs create mode 100644 Scripts/Regions/Spawning/SpawnEntry.cs create mode 100644 Scripts/Regions/Spawning/SpawnPersistence.cs create mode 100644 Scripts/Regions/TownRegion.cs create mode 100644 Scripts/Regions/UnderworldEntrance.cs create mode 100644 Scripts/Settings.cs create mode 100644 Scripts/Skills/Discordance.cs create mode 100644 Scripts/Skills/Hiding.cs create mode 100644 Scripts/Skills/Meditation.cs create mode 100644 Scripts/Skills/Peacemaking.cs create mode 100644 Scripts/Skills/Poisoning.cs create mode 100644 Scripts/Skills/Provocation.cs create mode 100644 Scripts/Skills/RemoveTrap.cs create mode 100644 Scripts/Skills/Searching.cs create mode 100644 Scripts/Skills/SkillCheck.cs create mode 100644 Scripts/Skills/Stealing.cs create mode 100644 Scripts/Skills/Stealth.cs create mode 100644 Scripts/Skills/Tracking.cs create mode 100644 Scripts/Skills/TradesGump.cs create mode 100644 Scripts/Spells/1st/Clumsy.cs create mode 100644 Scripts/Spells/1st/CreateFood.cs create mode 100644 Scripts/Spells/1st/Feeblemind.cs create mode 100644 Scripts/Spells/1st/Heal.cs create mode 100644 Scripts/Spells/1st/MagicArrow.cs create mode 100644 Scripts/Spells/1st/NightSight.cs create mode 100644 Scripts/Spells/1st/ReactiveArmor.cs create mode 100644 Scripts/Spells/1st/Weaken.cs create mode 100644 Scripts/Spells/2nd/Agility.cs create mode 100644 Scripts/Spells/2nd/Cunning.cs create mode 100644 Scripts/Spells/2nd/Cure.cs create mode 100644 Scripts/Spells/2nd/Harm.cs create mode 100644 Scripts/Spells/2nd/MagicTrap.cs create mode 100644 Scripts/Spells/2nd/Protection.cs create mode 100644 Scripts/Spells/2nd/RemoveTrap.cs create mode 100644 Scripts/Spells/2nd/Strength.cs create mode 100644 Scripts/Spells/3rd/Bless.cs create mode 100644 Scripts/Spells/3rd/Fireball.cs create mode 100644 Scripts/Spells/3rd/MagicLock.cs create mode 100644 Scripts/Spells/3rd/Poison.cs create mode 100644 Scripts/Spells/3rd/Telekinesis.cs create mode 100644 Scripts/Spells/3rd/Teleport.cs create mode 100644 Scripts/Spells/3rd/Unlock.cs create mode 100644 Scripts/Spells/3rd/WallOfStone.cs create mode 100644 Scripts/Spells/4th/ArchCure.cs create mode 100644 Scripts/Spells/4th/ArchProtection.cs create mode 100644 Scripts/Spells/4th/Curse.cs create mode 100644 Scripts/Spells/4th/FireField.cs create mode 100644 Scripts/Spells/4th/GreaterHeal.cs create mode 100644 Scripts/Spells/4th/Lightning.cs create mode 100644 Scripts/Spells/4th/ManaDrain.cs create mode 100644 Scripts/Spells/4th/Recall.cs create mode 100644 Scripts/Spells/5th/BladeSpirits.cs create mode 100644 Scripts/Spells/5th/DispelField.cs create mode 100644 Scripts/Spells/5th/Incognito.cs create mode 100644 Scripts/Spells/5th/MagicReflect.cs create mode 100644 Scripts/Spells/5th/MindBlast.cs create mode 100644 Scripts/Spells/5th/Paralyze.cs create mode 100644 Scripts/Spells/5th/PoisonField.cs create mode 100644 Scripts/Spells/5th/SummonCreature.cs create mode 100644 Scripts/Spells/6th/Dispel.cs create mode 100644 Scripts/Spells/6th/EnergyBolt.cs create mode 100644 Scripts/Spells/6th/Explosion.cs create mode 100644 Scripts/Spells/6th/Invisibility.cs create mode 100644 Scripts/Spells/6th/Mark.cs create mode 100644 Scripts/Spells/6th/MassCurse.cs create mode 100644 Scripts/Spells/6th/ParalyzeField.cs create mode 100644 Scripts/Spells/6th/Reveal.cs create mode 100644 Scripts/Spells/7th/ChainLightning.cs create mode 100644 Scripts/Spells/7th/EnergyField.cs create mode 100644 Scripts/Spells/7th/FlameStrike.cs create mode 100644 Scripts/Spells/7th/GateTravel.cs create mode 100644 Scripts/Spells/7th/ManaVampire.cs create mode 100644 Scripts/Spells/7th/MassDispel.cs create mode 100644 Scripts/Spells/7th/MeteorSwarm.cs create mode 100644 Scripts/Spells/7th/Polymorph.cs create mode 100644 Scripts/Spells/8th/AirElemental.cs create mode 100644 Scripts/Spells/8th/EarthElemental.cs create mode 100644 Scripts/Spells/8th/Earthquake.cs create mode 100644 Scripts/Spells/8th/EnergyVortex.cs create mode 100644 Scripts/Spells/8th/FireElemental.cs create mode 100644 Scripts/Spells/8th/Resurrection.cs create mode 100644 Scripts/Spells/8th/SummonDaemon.cs create mode 100644 Scripts/Spells/8th/WaterElemental.cs create mode 100644 Scripts/Spells/BagOfReagents.cs create mode 100644 Scripts/Spells/Base/DisturbType.cs create mode 100644 Scripts/Spells/Base/Initializer.cs create mode 100644 Scripts/Spells/Base/MagerySpell.cs create mode 100644 Scripts/Spells/Base/Spell.cs create mode 100644 Scripts/Spells/Base/SpellCircle.cs create mode 100644 Scripts/Spells/Base/SpellHelper.cs create mode 100644 Scripts/Spells/Base/SpellInfo.cs create mode 100644 Scripts/Spells/Base/SpellRegistry.cs create mode 100644 Scripts/Spells/Base/SpellState.cs create mode 100644 Scripts/Spells/Base/UnsummonTimer.cs create mode 100644 Scripts/Spells/Reagent.cs create mode 100644 Scripts/Spells/Scrolls/Eighth Circle/EarthquakeScroll.cs create mode 100644 Scripts/Spells/Scrolls/Eighth Circle/EnergyVortexScroll.cs create mode 100644 Scripts/Spells/Scrolls/Eighth Circle/ResurrectionScroll.cs create mode 100644 Scripts/Spells/Scrolls/Eighth Circle/SummonAirElementalScroll.cs create mode 100644 Scripts/Spells/Scrolls/Eighth Circle/SummonDaemonScroll.cs create mode 100644 Scripts/Spells/Scrolls/Eighth Circle/SummonEarthElementalScroll.cs create mode 100644 Scripts/Spells/Scrolls/Eighth Circle/SummonFireElementalScroll.cs create mode 100644 Scripts/Spells/Scrolls/Eighth Circle/SummonWaterElementalScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fifth Circle/BladeSpiritsScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fifth Circle/DispelFieldScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fifth Circle/IncognitoScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fifth Circle/MagicReflectScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fifth Circle/MindBlastScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fifth Circle/ParalyzeScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fifth Circle/PoisonFieldScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fifth Circle/SummonCreatureScroll.cs create mode 100644 Scripts/Spells/Scrolls/First Circle/ClumsyScroll.cs create mode 100644 Scripts/Spells/Scrolls/First Circle/CreateFoodScroll.cs create mode 100644 Scripts/Spells/Scrolls/First Circle/FeeblemindScroll.cs create mode 100644 Scripts/Spells/Scrolls/First Circle/HealScroll.cs create mode 100644 Scripts/Spells/Scrolls/First Circle/MagicArrowScroll.cs create mode 100644 Scripts/Spells/Scrolls/First Circle/NightSightScroll.cs create mode 100644 Scripts/Spells/Scrolls/First Circle/ReactiveArmorScroll.cs create mode 100644 Scripts/Spells/Scrolls/First Circle/WeakenScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fourth Circle/ArchProtectionScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fourth Circle/ArchcureScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fourth Circle/CurseScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fourth Circle/FireFieldScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fourth Circle/GreaterHealScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fourth Circle/LightningScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fourth Circle/ManaDrainScroll.cs create mode 100644 Scripts/Spells/Scrolls/Fourth Circle/RecallScroll.cs create mode 100644 Scripts/Spells/Scrolls/Second Circle/AgilityScroll.cs create mode 100644 Scripts/Spells/Scrolls/Second Circle/CunningScroll.cs create mode 100644 Scripts/Spells/Scrolls/Second Circle/CureScroll.cs create mode 100644 Scripts/Spells/Scrolls/Second Circle/HarmScroll.cs create mode 100644 Scripts/Spells/Scrolls/Second Circle/MagicTrapScroll.cs create mode 100644 Scripts/Spells/Scrolls/Second Circle/MagicUnTrapScroll.cs create mode 100644 Scripts/Spells/Scrolls/Second Circle/ProtectionScroll.cs create mode 100644 Scripts/Spells/Scrolls/Second Circle/StrengthScroll.cs create mode 100644 Scripts/Spells/Scrolls/Seventh Circle/ChainLightningScroll.cs create mode 100644 Scripts/Spells/Scrolls/Seventh Circle/EnergyFieldScroll.cs create mode 100644 Scripts/Spells/Scrolls/Seventh Circle/FlamestrikeScroll.cs create mode 100644 Scripts/Spells/Scrolls/Seventh Circle/GateTravelScroll.cs create mode 100644 Scripts/Spells/Scrolls/Seventh Circle/ManaVampireScroll.cs create mode 100644 Scripts/Spells/Scrolls/Seventh Circle/MassDispelScroll.cs create mode 100644 Scripts/Spells/Scrolls/Seventh Circle/MeteorStormScroll.cs create mode 100644 Scripts/Spells/Scrolls/Seventh Circle/PolymorphScroll.cs create mode 100644 Scripts/Spells/Scrolls/Sixth Circle/DispelScroll.cs create mode 100644 Scripts/Spells/Scrolls/Sixth Circle/EnergyBoltScroll.cs create mode 100644 Scripts/Spells/Scrolls/Sixth Circle/ExplosionScroll.cs create mode 100644 Scripts/Spells/Scrolls/Sixth Circle/InvisibilityScroll.cs create mode 100644 Scripts/Spells/Scrolls/Sixth Circle/MarkScroll.cs create mode 100644 Scripts/Spells/Scrolls/Sixth Circle/MassCurseScroll.cs create mode 100644 Scripts/Spells/Scrolls/Sixth Circle/ParalyzeFieldSpell.cs create mode 100644 Scripts/Spells/Scrolls/Sixth Circle/RevealScroll.cs create mode 100644 Scripts/Spells/Scrolls/SpellScroll.cs create mode 100644 Scripts/Spells/Scrolls/Third Circle/BlessScroll.cs create mode 100644 Scripts/Spells/Scrolls/Third Circle/FireballScroll.cs create mode 100644 Scripts/Spells/Scrolls/Third Circle/MagicLockScroll.cs create mode 100644 Scripts/Spells/Scrolls/Third Circle/PoisonScroll.cs create mode 100644 Scripts/Spells/Scrolls/Third Circle/TelekinisisScroll.cs create mode 100644 Scripts/Spells/Scrolls/Third Circle/TeleportScroll.cs create mode 100644 Scripts/Spells/Scrolls/Third Circle/UnlockScroll.cs create mode 100644 Scripts/Spells/Scrolls/Third Circle/WallOfStoneScroll.cs create mode 100644 Scripts/Spells/Spellbook.cs create mode 100644 Scripts/Targets/BladedItemTarget.cs create mode 100644 Scripts/Targets/MoveTarget.cs create mode 100644 Scripts/Targets/PickMoveTarget.cs create mode 100644 Scripts/_QuestButtonGump.cs create mode 100644 Source/AggressorInfo.cs create mode 100644 Source/AssemblyInfo.cs create mode 100644 Source/Attributes.cs create mode 100644 Source/BaseVendor.cs create mode 100644 Source/Body.cs create mode 100644 Source/ClientVersion.cs create mode 100644 Source/Commands.cs create mode 100644 Source/ContextMenus/ContextMenu.cs create mode 100644 Source/ContextMenus/ContextMenuEntry.cs create mode 100644 Source/ContextMenus/OpenBackpackEntry.cs create mode 100644 Source/ContextMenus/PaperdollEntry.cs create mode 100644 Source/Diagnostics/BaseProfile.cs create mode 100644 Source/Diagnostics/GumpProfile.cs create mode 100644 Source/Diagnostics/PacketProfile.cs create mode 100644 Source/Diagnostics/TargetProfile.cs create mode 100644 Source/Diagnostics/TimerProfile.cs create mode 100644 Source/Effects.cs create mode 100644 Source/EventLog.cs create mode 100644 Source/EventSink.cs create mode 100644 Source/ExpansionInfo.cs create mode 100644 Source/Geometry.cs create mode 100644 Source/Guild.cs create mode 100644 Source/Gumps/Gump.cs create mode 100644 Source/Gumps/GumpAlphaRegion.cs create mode 100644 Source/Gumps/GumpBackground.cs create mode 100644 Source/Gumps/GumpButton.cs create mode 100644 Source/Gumps/GumpCheck.cs create mode 100644 Source/Gumps/GumpEntry.cs create mode 100644 Source/Gumps/GumpGroup.cs create mode 100644 Source/Gumps/GumpHtml.cs create mode 100644 Source/Gumps/GumpHtmlLocalized.cs create mode 100644 Source/Gumps/GumpImage.cs create mode 100644 Source/Gumps/GumpImageTileButton.cs create mode 100644 Source/Gumps/GumpImageTiled.cs create mode 100644 Source/Gumps/GumpItem.cs create mode 100644 Source/Gumps/GumpLabel.cs create mode 100644 Source/Gumps/GumpLabelCropped.cs create mode 100644 Source/Gumps/GumpPage.cs create mode 100644 Source/Gumps/GumpRadio.cs create mode 100644 Source/Gumps/GumpTextEntry.cs create mode 100644 Source/Gumps/GumpTextEntryLimited.cs create mode 100644 Source/Gumps/GumpTooltip.cs create mode 100644 Source/Gumps/RelayInfo.cs create mode 100644 Source/HuePicker.cs create mode 100644 Source/IAccount.cs create mode 100644 Source/IEntity.cs create mode 100644 Source/Insensitive.cs create mode 100644 Source/Interfaces.cs create mode 100644 Source/Item.cs create mode 100644 Source/ItemBounds.cs create mode 100644 Source/Items/BaseMulti.cs create mode 100644 Source/Items/Container.cs create mode 100644 Source/Items/Containers.cs create mode 100644 Source/Items/SecureTradeContainer.cs create mode 100644 Source/Items/VirtualHair.cs create mode 100644 Source/KeywordList.cs create mode 100644 Source/Main.cs create mode 100644 Source/Map.cs create mode 100644 Source/Menus/IMenu.cs create mode 100644 Source/Menus/ItemListMenu.cs create mode 100644 Source/Menus/QuestionMenu.cs create mode 100644 Source/Mobile.cs create mode 100644 Source/Movement.cs create mode 100644 Source/MultiData.cs create mode 100644 Source/NativeReader.cs create mode 100644 Source/Network/BufferPool.cs create mode 100644 Source/Network/ByteQueue.cs create mode 100644 Source/Network/Compression.cs create mode 100644 Source/Network/EncodedPacketHandler.cs create mode 100644 Source/Network/EncodedReader.cs create mode 100644 Source/Network/Listener.cs create mode 100644 Source/Network/MessagePump.cs create mode 100644 Source/Network/NetState.cs create mode 100644 Source/Network/PacketHandler.cs create mode 100644 Source/Network/PacketHandlers.cs create mode 100644 Source/Network/PacketReader.cs create mode 100644 Source/Network/PacketWriter.cs create mode 100644 Source/Network/Packets.cs create mode 100644 Source/Network/SendQueue.cs create mode 100644 Source/Notoriety.cs create mode 100644 Source/ObjectPropertyList.cs create mode 100644 Source/Party.cs create mode 100644 Source/Persistence/BinaryMemoryWriter.cs create mode 100644 Source/Persistence/DualSaveStrategy.cs create mode 100644 Source/Persistence/DynamicSaveStrategy.cs create mode 100644 Source/Persistence/FileOperations.cs create mode 100644 Source/Persistence/FileQueue.cs create mode 100644 Source/Persistence/ParallelSaveStrategy.cs create mode 100644 Source/Persistence/QueuedMemoryWriter.cs create mode 100644 Source/Persistence/SaveMetrics.cs create mode 100644 Source/Persistence/SaveStrategy.cs create mode 100644 Source/Persistence/SequentialFileWriter.cs create mode 100644 Source/Persistence/StandardSaveStrategy.cs create mode 100644 Source/Point3DList.cs create mode 100644 Source/Poison.cs create mode 100644 Source/Prompt.cs create mode 100644 Source/QuestArrow.cs create mode 100644 Source/Race.cs create mode 100644 Source/Region.cs create mode 100644 Source/ScriptCompiler.cs create mode 100644 Source/Sector.cs create mode 100644 Source/SecureTrade.cs create mode 100644 Source/Serial.cs create mode 100644 Source/Serialization.cs create mode 100644 Source/Skills.cs create mode 100644 Source/Targeting/LandTarget.cs create mode 100644 Source/Targeting/MultiTarget.cs create mode 100644 Source/Targeting/StaticTarget.cs create mode 100644 Source/Targeting/Target.cs create mode 100644 Source/Targeting/TargetCancelType.cs create mode 100644 Source/Targeting/TargetFlags.cs create mode 100644 Source/TileData.cs create mode 100644 Source/TileList.cs create mode 100644 Source/TileMatrix.cs create mode 100644 Source/TileMatrixPatch.cs create mode 100644 Source/Timer.cs create mode 100644 Source/Utility.cs create mode 100644 Source/VirtueInfo.txt create mode 100644 Source/World.cs create mode 100644 Source/icon.ico create mode 100644 zlib32.dll create mode 100644 zlib64.dll diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c6bb16 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +Data/Files +WorldLinux.exe +Backups +Saves +Data/Logs +Scripts/Output diff --git a/ChangeLog.txt b/ChangeLog.txt new file mode 100644 index 0000000..dc64444 --- /dev/null +++ b/ChangeLog.txt @@ -0,0 +1 @@ +# Change Log for Avatars Conquest: Started July 3rd, 2026 diff --git a/Compile.sh b/Compile.sh new file mode 100755 index 0000000..7358811 --- /dev/null +++ b/Compile.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +echo "--- Removing Old WorldLinux.exe ---" +rm ./WorldLinux.exe +echo "--- Compiling Server ---" +mcs -optimize+ -unsafe -t:exe -out:WorldLinux.exe -win32icon:./Source/icon.ico -nowarn:219,414 -d:NEWTIMERS -d:NEWPARENT -d:MONO -recurse:./Source/*.cs -main:Server.Core diff --git a/Data/Binary/Bounds.bin b/Data/Binary/Bounds.bin new file mode 100644 index 0000000000000000000000000000000000000000..dbe5830d0e5601f36a0879915093dc592d07ba2c GIT binary patch literal 131072 zcmeFaS&XIEk>~fNmgdePt12t^y!Ymwcgd`s#adVki~FXHn^uw%MN*ZgFKXJeB zetB;$tSpkE@)FFbIBT3ZapJ^@vwTHS6l=wj{uV_?{~ayH^!L%?nBaQxVDVAGalt}x zLgBzp@kWA^#p}h9guhnYD>zepwjX{tg?}~S(@IZ#N9oC5&FAtS%;j89@e{?>gijP3 z3GWn}nXb(o-_7w;8E@zKPEP-|;_g)6*AhNke62Vne75*pAHOHXzme0qJ+rx8b4nla zrtebD_dpK6l;CX9%k?>bwVkg2ffPSiT+ZoMGaptGK2sQ<6=$huP8@f>^_<@HPm3P& z^NrN*>EeYHUkxY!PIxEx(o=){!-tHAnyXK4IIeo~j@%h}Ij_4eu<9yB+ z;rHiyULFBInZpBG4(5w)E*Cl&$H*J-N`|Lu@SThU8JEK#`F~M~2akMLa{j9s?o|FS zbGj%m@Tm72#T|)`x0P*zKvDFJHsk!A9{?&KKd)&w*QSG_w9UqV$ugp2+9) z;~M|WOC7<%`rgjC+ttv#L3|_YyH3VC8Yj@-5OjPa;ZxGXx2N#Q6y8$p)_m|nGuI#Odb7Ay<*jCUB)%d1fr{M1_fv|GcF?XfL&}MGfw;To0tB2a^7~h@p9f>$mtEIg;CB?>Ej8(j-c^N8Ml38x?`SZz8K9X zwV=sfYQ$&=^DC829-8%9d~fNFV9Ioe#b6l`Y|>^HHTD{?R;M4I9P96y7Nw z%i)jZbjBM6d>KU_;n)?_e_yT_eFSd3)RrCN@sIqG{)e*14Z+uhqZiu6cZJa}-zPYw zD{;cVoa0|k>DQzeT@Ldj`L9J?`f+oXv9oLe76yso-DOW0w1=!t?C3#sTAJT6)&ycpc>NQHahrL^t$# z+@4mx8Kr+zuqXJk;FRFQxjgJj&nvd$s_k<p>8OX(&Pml|d%*3O7H)b2 zua`F%zkPn%xsux%^YXK)zFGA$?OPC}{#j9Cd@}b-*bm=O3iv!|FI4Ra_oMCkuoKF8 z_gpRiwOqc}1=s`Rk8xhw1CFoS6}AJ8rSwy37j(6x<-+c;UGk+Af288+2B31{6tRnT9BWMxJ1)=S`%dA=lFBX&a5;xBXZ%dUskcr?6`z;9TR*+2^kx4I*B|>Gk6gXK>zMG5P4)d_gX=)?FokX}9(8jjVSpKkF)%^0%(5O!s!{o4xiYbbJ1caa{U`-br)}hDUnF zJ@XX!lUWZx2|J{pyL#1&+W5) zW&3fEuIp;Yld^8l3tpGjyejyZaN2i75PNA(;f(8J!gp>Le6hVdD`-7zIGgoEr#Pu% zu)|K}_>&3FN+a!D{viGDU3%#KPNvuE9Pr;!I~D}pp6@36?4;%&?DaW8^w@fTKKh6m8u!TGH^-$g$2?Rx{|mv(09-(j4uW%)1tJ01_XPlHjGVmy;icczC6%T!c|B(9IxqR@C z37@Ut)PJ&qW2a6F_qyXX*<@p~!ngWOBOZDvH*orceImkJTIYJ)|FDl^FRm(_dKP6b z&k0_t;7If}+0~H``~AKlV+$6=kv*5P^i8};>QvF3wc`?gn#4eDX(8x_XhpY750DWZ}B?w{q@oho&?#D&PoJL?k^z(}FfXL-iv7E;5k|fCZs&d2c<>Y5s)kyjsg)FIu z@WX)f8?>`X?{(~ipvOh*i+0r0_>3y|^;+z&V!x3-_F2Q88y#;ucvg0)>oJ_|`|Yyfz?fPN2>DE=t z@O1>?p`XJ(7`;EUANAGSI~+$JuV`Oy6g1tx7GDc#+n>Wmwd2qAm-!K#cKzctPc9a} z90CiK|EDQ@Hu1%r>|3%>3aZf!U1n-FhGeQ``7{5s;gVc^5z;J7Hu`5@|_-L&WZpnELw z8+!zMA3oRN0bk#betEy-#r9=KQo#5u$6eqhL@sQ{wgpQ$Lf<;Pn*Y6P&mi4f>%GzV z-H(S4qJH|A7_ur$2-wlT%%9bayT4a+_-eoZSF>N)e*ZbGWUy;iWv2jHk9a;^tCT}L z;nZinLOR<~b1B`bw7=H@F88R)<@f%`&AY4Dd|(!Pclm!4@@=N|A^Rm>Z)|E^%WpHE zn=Hd4-f%-6D&%4#?H@(@Cj#zZw5DAJ$aUlUlb_o z+st&BpJn()rpI#6c=A3^FSje`?&NgQ-freg#GBr-+&KT%RlVr#u1bdfuF7}2n~#pi-Z=XUk7f1q77Q@V}J=aRqXYqTSv`RwwkzbAUlKln*I?@9JM5PU`2fFI{c z_@O_S75=>BY*Fw_S`n=ZeolI%srb(oFUj9R`sY*li#pdrIVZK=X1#YU`$0~q!8WRTBQb(`mn>Zr8K^^LZ4{n`J+5WW868qf<$*y8q#y z<#AKviSjqn{5qE9kbbrQ2KkD3+PkTK!q16ZyT4nhy_@Y!1#=O@Owk^3i+1O`W5|uBKf_b5C7MiBmn;y{xi}o>Oc1N%koW6oj&7?(+@8F zYLI%rw3qgdTOO+Y#CR<68!f*skM9n*Jaw{Mbu;Yr`*~FSsPM1{kO#)caJ(sY5+ATk zS5Hqm+Z~1_|B$n$VuA0C-0wx+p?k2uxB9<1Uq-s=biR-CHm_?1&AyYvBYsBvKJ4H0 z6wdjpQ%Y}tRpj?MS>j#Z>-~88XL;A?r_y;uL+ZaTpO+yX{&0TA`**JYl+wGsu5VI!#6u7H zs`0L$c6?)iZ&TtU^i5~~A@Q!?e$0rU$@`Jqhw(mLl;iVvliH_r{XSneCEWFYBb6U= zG+lfv%f+`+`)7nh?{q#dMLhC%Quzs=sX)u$+iDx~_tro;{GHA1!{2B+ zEvMkbTmIqO8%bZB$?{sp$NuRXsr{#hlv6Laj=P<4zSI52{-(n%58&)W-k0S89QtPZ z3@&E$Uj&v{T=c2?`-i(st5VDTrwW_s;|)}=TbRg7c$R6f6P<$_37Sl%DIxu zt3%uW<$gxskuLCntGS$;v9GZmok33>23>U+>FVJ@|G9yEnT37Xm#NYp^#&bv81Z!& z>FVLz?FUissQ!rd*2^1JPo$4|H`3K%y}UYo_4u+}pAU8X{_Ka*e(c>UtkWCu;oqpo z*YP_2fk(Q)14jGq8<4C0Yu}X-}{lTE49>0D0?LHmPCVEObL!JUg`9SRdGx|$A$OrzNj9(c6 z>vU0Wp;_Sm-0#tjsBcuf*Y|M`tCjpZ)Q`X8-NW6?H~0rRUqQR)WXW;vf_-l0$#%XM z?f%+nesn(b?@B6fLit&dU)KFC)(KO^x3e7tUkj~HU(ECG3&OBJpUt@YZ9@JA&(HQd zOz0e*@kes{%Nf6%ao?NiWPj6yEC;8zzh^@IYux=jq4~qO`*A|+Xyab*Plyl3EpHR* z590x$n{zBL%8tS>|84!nuC(0He)cIl{dPvXqMeVW^beeY~S9uk)q?TU6HPw+YDk9I{neXqms1nkt`w9D)9VRDAucE9X&{1yS1`sdzX zm1l@`!>fs&@;rQrW7nS967Tc=p zl<$4bN}k3=(Fs9*;B{#JeYO%#xu5Oli~IpeI5VW&h&TT}oAkoE>|XF0LF{U9;7s

eAYX&8edJNzbHt5Hs!a&&w5o7$oiH0 zR^FGnnBivP=X@TQ$CZQgu**tsy32dN5H@VQ?RPl$BrX-7O5@>DmgmdD;pYY6@aaMM zhdB@TfFSA5=llBSbrPF-9;1wqbhp2_&6D8pOoa2Z$c$o4|5U&efN;)WV~KaaxpKwA^d*fKF_?QRLDyS$#+&bew#^^VtMxY z!;V5MAA$cmwX;+FEcM5@_)UB_`xV9&4j$)p2&ep6rKA74`8-rt^H_vCy~}M6l*|5w z=R3~PKsV*XmrmAGZS5P7{{i(c{%P**fUjwOVjQds@;fEDC;yt{1i8PU^Fz0!c>CLz z<@qKb?}9MSJ?{+KD|?L(JBNJOJ-f+2Cpw+acG-I|4&l$Rdf@X_*}2Hm6+!UJ$?kPH z?OBy18BV2h*R3S2F>k}iuuq3U*UR{BNV7KuzbAP`55FaQ1$q6B>@o1SHJ(}tUeVYi z-4*2+(`oN(DgH--$kSWW6Ugt^<#(an@5_$^{+i^D`RZ-S4gLFF%|poJPZW-x`APA4 zwFA02Plg7Dm3^LdqRBF1T+nCutuAk&_k4 zFMjS-LB{j4q>XzC3xdd9OWKFek9{{TP0u*#NKaa>uGZkSd{1sXwQpH9;g^{a7=G7wlVOcrp7w!izU#w`Sf_AJ4C!YG~=Xtd%AmxCQZb8%l z=fqjlcW27i==Y!bFt6Fk@^W`h@BH(^2%l9h^vR}rWv^-@3WoK(3{{zp~Mx=Q-EU`Oy{f~(?;@s-3! zs6t-nR3H5@mE@UsBJN7_>OzHX?E9u_3I6Q_%~#7k<$)vjw2RkG(CaZSs_~>lerQiq z909_gI*$A-??pT3CAo$(Ney9a1lP0J&@m20oVh?UQNTFBhLwEOyW{segcsn~uVPYl62W z{Fww-()~I23;8Zflks~%|IzMcaTmTWsPzGfZ)@emZ!OvH#?i-}oPSh!+-0+!*d z^C{nuaP%DS?gb>CaOAivc|pHz2-1#e$tNqI6G@s`mpqs9ZRB})Rebn};ybcG`4P{L zbv<(1RXo4-e*9Ho*ar?T(|;wU+lmjC!+RF|B3;0Gc;IUlIwK!)N<8|#TcZ<0(d!|OPDw556i5|11)K4YG2Y19$UI}FG(;ryt77!3d7 zZ!%TvuI+<`q!(9} z-uV_3OaD0B=aiB6)szo=f_#2&Y=6qxN(bdaKmPN@T%YS-snB7&#^F`|kPm!ox$tH8 z?L%IpKepo|^$p4?`Rq61{UhcXAbjn}6J~fJhu@#^a~awXzcqd21JXXyS0Vem;Ahi3 z8|(Mw{yP3b8h_lY^*BWGpl3_?G9+V7es%IU+ST~tY~I5L)9U6Ra0_O zhhqvqqIG>h^w?3IEUiM`?*Rv*pIXwhb*SJPzl}4FSO)||o?GG*bT9N_C&_tBEoUCT zU-J~_c$n|74_3v$fYh_7dDu8|Py7nO3XgO6<~#gweDqWFW55TM3w|4(kbFSriR9-3 zhP<3k?Om5<$F4zdVsG(oH1pendJ6k8{ERKpi+nY-0>PeW3-W^=?-M+c+IL>(VzGG6 zX`bdj^Tq6Mo0UDoeBBV_HzPVeDmX7lKj6o&!tl$p|3!PIvOEK!V>-+ElwjCpjMJs0 zH?Rk}w*Zc%&Ah&r_1}UZ_+qk8R+OIkfqM?vD{*fE|1I{&syN~CO?voxHbKsZlkcQL z$k!8pv8zsr9^>m7o=fRZieKbEognEQzae`9`8lO>sE6~`*a;ir9P)HpDS>AMk@Nc$ zkHztn*6rATkH~+3oUe#3>_5^`9+2|dDuM6|D$)3QhW7uT7d`YlFyiSK>>To)6J6k( z0|r7D>F-PQ1T+>egc8!9 zgc~jk(hq^JO0ubUMKJ0K=<&XgS_| zd2Y`zdWO|k&0pn1N&jGbx1+aC&oF#z`}Rg}HGf@R>bTgG<^#gdN`La>J{WqTqjev8 zoAsgX!_TDnmiAk$-`Z)Od_en9_~9=L!v81-{muM&Ugt49-#o6q@chDjbD!oJ^w(jf z8(iP|UPZZHzM%d`4_!&~O;ZrRQM$mBKm4Lj0!mF#5lzaP(DAA=cCPr|>hfhoEakdXRAZq|C!{4`@R2O}=}i zQE4ysDgJ|aKOac>hcu4Z4_Oi)`P@e#d_g4xS5!0f;Rp2mj)#r%jwb#rE0lR`QqmU?z7bA(<`42?C*W^g z$@Ne#_Qs4#qr4@>(ogt@po8?p$2+OZ;x7IZtSaVHyvE2kvkvL#4fwLIn(6nZVwu-x z#2@H7rgXFuFEshMrAhdVAoVxJZ|l!al02+V=sqHdymI@7`h5$B_G5QJ=b4lazQOl( zNhEx`COL%f*n#H%*?xMbJD$_~d{SGME%aYedA2*R)u6`_;~%=H4|zMMaY1=MDE?>F zTWB}!KN2t4@9(AX*ODCsJ=atHE!oY`&38Z*RwSaQ3 zDSk!iz9hR7{$9=HoXF`;iW2(eyuvAuamcv&SF{s|94sgXJ@fm;zb_uKPiTKkOQH5_ zEhhfcf5_)t4(Hqi{nA#e*eA5tp8da;1o`d?oowIZuZi zcO+Syka=A582sYi2at1jz(zi2($#)1{92d%o8N0m&ir)-^p4M0AUE*o+r@vVzlEs& zaUaq@-zxq|lC$p?KkGx%f3x^^^_TJVP9Gxg-xg<>7r$NnK_5mx)4r}&2DBfm1HDu3 zTi%_ZAqko^&`5?ycMWsV- zKdp4ELqDx_*b~nw9rE@`rGpR4d3`jeRPd4Y1LKSR6X-giR9&-AJViWLB5?m{OKE`~~&G&q|k`v;)#eb6F z|B&JTnBjk!;lGvOVb$RB{w%}45=77auLbb5Sc71PT_&+7O z%ljm+XL^4(!-o@GReq1Vms7ruG_~pYCmEW~PVvub;qOTDX#el!aJREl{PT?eiwysd z3>kmO2mQggKnmf{_XP2W{|m_`cHEaTJujwsc>@xi@&jbLk0;nFkSOZ6J=#&fo9=%= zaSH#(8UND^sb@^Gcs9}9RZqKqx3^pTRmT784F7`!m!yZ`Z+Rc+zt8bL_w+lGCgux$ zZ7b6k@c&A37~g^D6n{(kpey^z$zy!4rz5@Mb~wIl*AG&EcGK)feSeVLkj#CMLk>viz#lM;O{tNX#@=%4#!rzoWN00na^Hm)( zo}N?vjIZZ4!_*<;{84FA=y+N)NgZBL_+uKWj|je${3_`6jl@^{+x)ifm&AS#^Fz5W z6Z&aXJC{o)_dtI^^Q8<_+sjL(0P+ zidPi7huvfP4?i32!dpzak4x^suM0ANt*NJWf=ZV8XGpnteFov-j32GR2>1B`ya~<+ zm4(W2zYg}(V13ZLl&k~%c_)=)Ota9*G@r~VoOz<9-XYzraN5cF5ZB}LH27V?mnG#< zp4S71lD=Uz4IbxBm>poe|% zLFn@j?3*)Bu}e<;lpyuasT|rhBgk(Uf0&0R)L!^Y326%>8>O{vuYpm zbVT9E6Z0?fvZ4^^N1hmuZE*;CkZ<^fb-{cH4&ONcg1k2bNyj(=XZ=fkd<}|vINd`2 zV@idbjtjC5;p-QqV|SkT!-CK|uKKBm`2d`APop66KdE`R4jH%DP4JOZ5xd1r|G3gK z9`Qf3PVR|AjE~hmq#eA^0l(O%7>2VO3tzCyi05>Nq0edFNW91yDhH#&u|sU&-x2nJB zKfd|^owJe@`k(L20Qs&A{WL3_aXl+f2lM-Uh7CdFgmC1fsa`@JW(19QGTu?DLcF>) zl{=?g@DFbv?QKZvp$G2+?Y&p+L0{Z02tFms12V7RPr$!{U-6>}Hr0>FS5tq{NBF-A z<(^lGg>rix8}|d2B=M9VdTUX3Ao{Bc(YNgXBbU4a6!S&QALz+tt*{u6EkWdHMJv02 zQ9k{{yBt8?2_ZjzXyj%=RvY7eQIK+$G;@-FSuo@$(j#BYAJ8!&>J9J6^)Z8O7k+Ds zN57apdH}kQq#5zJm({!>!={*vg__~cdujxzWJPJ)I%(MV*X^_L<*qykffaQ*wrKd zxFF^78dN~&=hP_cb9PzD&#Q6JhZh05?#cMLAa=lv!f6kyX!0*B9RA)e80n!K?*w)Y zQtI~F-;13Q!d_P(oHCq_8iXbIGpnnPI=5C&`Unbxl@pOj|d{a(<&c6 z;q~Tsd+Ify?MV2|xVk^tYuLA*@6ZGM7A4ojcVq$6e-~x%pAmdn5WX^B!@s6#W4n$Z&nZvFy94)Kg?F}c}h}YXuS>Yc%K`^3N=3iKb+`=X7nNc zD9VLu(ygWXp!0}IVxO89(+jPG<}`ERk369s8WVTXr?mH|V$o->_96O=^;kgk+;ZCI zF@$gP%D2-xB;w)Qiu`^7so&=!4dL@rK8LxK&TF_o;R~nFX)Atz`ejn`Y5jFq;xnrW z+Kn9xg!{-n`W!m(Rv|B}x{&81N=JFD8=!+ztJK4MK>V!!QVyqR$&Wn<#2?7`W&L7$ z{5_K;<)eH~jX)RYOreu`1^$v7Ib}7+uPUd3TVBtmanHF5!J+)AopRnk$zD);VnVt`4y$$S8YG>j1TH#{bxS-+#>vf&)fs4 z=c6Aue-0h2n}DnnY1h0U<!Jei)j2pryGn`jAa$ClKI>#H%DZZuni?R>Me@XT@_CZe`;xVP%kpGvT`^Eil zJ$P85=skA)pa*(^*3W#;-T0#TguX@_VIM6fdeB?&k$KbojE1?zu#Nf#W@=U)aTmK2~e!JN!DN<7>yH!{3AE4ttM$#FHNVgjd`1y4T0-ItETU z)*r}aBlrK6tjEp@Qg3|UVp5!fZ>+MAH&)AxCstpy6E6nwXd|b)O*2_nB@}5K@x3V9 zTP2Km`e8Nizt>@WN23ZEe~btC82Sxs^dpI0_Mhn|I1L}IH`tx?xVk$*_El*=`jGwu zr#wyv1tgsNBeXa8MyZqoME|hg%XnlLAG(gI9PA8Exu6%0iLa#N>tpZ>I{^7)|A6?* z$<8Oe?=`S~z=B}?W9WM?oQlB`m`MCBQfr{UrB*PGvHt>EUz=`5HS{->b4>rOsC@dn zC5{J#?saKA=tG}T4&xWP**7HrLf4_(8wJUHImEGQ{7J_`|Lb_EJkQ z_#TjYu}k1bOOSezWBLJWn)a|uL%6+_oX2}PrSHiTO8iE~&k7<>W&A5C{yzElDL>-5 zuSP#CizB4R9;?Dtd4?%>F|Pypu2~(24`+3c6nzN{961N4edqMDDe!EDfnO6&edTwS zeLfMr2>*c|FOMd?DLSaXBRYt$;_#jG&Dcq6Y7zAz7yQsW)&7`LZ`$tg{jh2E4s_%1 zVxF8+DfFvPPtkwKBXB9fMfD;&Fl0Wv;%!hp=Dj1TU;@PnQz41IfZ zAbh!|>gsSS9d)|E883Wq7(19-AHWHXRQT6cIB;Fz$YopM)piXlZ)-f`@rQ}NZt?$S z`2S@1->5|PQ{GPFs=G}(+IPFs;kW3D9)4X>W_UHhW7#jWs+N$xD~b)TX>5`HGikha zv=487{l^*pI|)t{|5}Dy;~A$N#rFhXkSD1v_^ke;|1ZgoWBz|w5c#?&IYkff3NUi@ zv@q}ss-54gQj8_&eJpUs>6tV?4DUC_1?PGxZ%M6TK0=Q&4#uUI2}h4xf5dlPHgv{z*@ip%3tXLLd9krn9M3&|5+*prfieAoI&n zX(}N1gMrf-HnoxkU&;M5F1qNafRjmDId{2|!rP*Yc;06P#(k>eqKk2}nJf-N#@Sin z0cq!?=mJiu9N?T%U`YYdY(V_ubD|4A%!w}aCHC|nY$z7L+R{+i%Hf%OE1)|4K7z&k$<-|WLkPo81*jtcjD=#z2yPZ`I2zm0J+uYNG@@4d~7Q%=vx z6zrT;&1lefD(Rtl$s_%R|DOD_g2Xp8?to1}@&(?K{|9}vtdZ*adPy&~grm2(-$49& z8pq7P{=Vm?%3-`x9&)v$bj-K&f^{5vnxcd9W>gY(BlldYup_D9*D3z*4FC5G|F;BJ za$mq#%6mkTF$$8w^C}QMJ&3O;|D&Q9d3r>D4cW;9Kb_kDu;@kaKCDpWk#zh9zcT^u zHN-IJ`OfG6cn{w=-;qM^Y=xA6OnQUggyf4K`i);R^)+q97pS`>XOtqxoJ_IOkTrB2Sy~M^!3vaXF12?x%WQW?o^w_589IyNP*aS}pgy z(3CvWZ)bD)FC?7%vV_m8SNI{n{E&-v<$qo?Hsj+l$p_=Qr*oIAL$63vpuaa2kK8<} zc=W|{if7(?Nb!{0)%gCn@RNBwa8HK*;yVQ7V?T=VctPRF`w9Jv`YwwO=Do{lpOyK< z`xe}HV*Wd+aO!6r4_znpAAD*H2X1DZeF@TWF4TPNC3svoeu?;Q1m9nD{0}8Fl=J0e zM;uH31nPM^&EHRJ#)h9)B{#_PGinF+#ud>AzppADctw!$e_8RQzb2e=pAlqb1|?rTqpE%PM&htg~QjL`VBsw)qi7xw1@O()DQ6U0qIxf#q(*N z#II_7SH1W2G36T;uHe-F=$BX*aL)$*OeDL9{_yu=@Uzh$tZQfwkp3>um)O68JVEc8 za6TPhJf&ADvgb4tf=J-?IAeP(`(TKDn0OZ318 z=!SlOA3NqP%70U#gOGao?sh=<4UWF=rE{k6`BTDN4t8VQ@9*Vz`4-jR&hLHOhGuep zrn7|YM7PUf+&wN091uNpzxZo-J;TS-e6lDCOtH1@Wvr z;g9FruJ{T6*K&D_$`7BGl*0XDId7_V*N1 zo6cKN?`QkvA%B$1FXU}dui}63x@ju+JM#i)}hrQ{co@}2Gr2`=UFiys^Q zO^agWbwTCxo72AtpHTTg&W-b<9FK4GEO;62bYDpNiu-tsBmC{G1HI0{uJ`xgxpjg3 z&Sbtdgn4}WoK2i3^F9ybFV=C)3h?dUNaMO8O^JRSm!0eIKS*#rpEo=%NRFoDiggb1 ziN0LZi~#+sX`Z2f;Wl>a?J4~BWK9*4S!M$Esce{mlSesr@wTg~v^tk1gYM}9L2(m&57 zec9DHS(pEEf`l_~ccgK1doz3`^~-AUmy$=u{a>c=h1_pT>HIC_em{k`L?`3yyyEdA z0HN@_zFW-9f4+Drjg(h3gYv^(W*)sD%}EdPejs|Pm*Il)fge#mAn)mpif3MUESKwX z>Ty6lqj2~8==f3jb{oFe@_*aX@0O1T>1>bfmJi4g^K4i4n#Z&E>y|Y_nD2YCZ27S+ z;MWz7e(t9A3icG|-Uz=h$3K!F@6@8Gy0S$0VgF&bb+aAlbMf}`Fi&s`jvxMI|JDqtSxjUqJAO0`*=lwrR^E!GSeSK1p^#tc)kU!Q@ zl)s``f&Kuazwpu_&nt!Rlj0vmUbw}9y@Xv#IrvcnLVrU&OnDta?1*_$j$OvS0CLCa zW9CureYrlLt6o(7l*_IG62UGT>DWggUsDjfi2WOOOxluX{GOceB_DPh^kGk7=lWGP z{E_x|98)^zTvj@_%j*`-+d~KS+g`FCoc$u~BKCQym-BO^JEf9=e9sQ~h98li_8(S0 z=Itrvqdz8;k8r*#Ncp@QNWMkoV;r<9^)fGWj(MX;zyUKU00YeN4DdZ8aaQ!n?$f}UuX z`4sOO`92x#P78iX5S;zYfD6JuBThrdDg8%1yf22{W1j|k*c}017PQ=O z63B849kZesIam>-A2|Pl<#|F9N_jI%K|J;s?czKLa*H1ux#QhJaLzLr_kK91g{fyo zf632o7j$rbne?2Wfgj7tNq@7xXZ?fRyPnv0W*l*@%I~Uh-n-ef z^grdWYGIsldV4sG_b$z!sm!Mm9#RXfXX+6D_PlC^Z?V4NegOT)D~a%Anz$LSY(hxHWi*dPy0)$8%* z^Vut@2MC91=JPoB?DMFcUWcFDkL3q_^fUXMw4)>b(_g&4&5!vD`2n(S8#bR|-!o2G zAG035Q}B7M2%rh-1)Noh9uJfYpL+VsJ@uaoFUya5_6lFfeyg4G zy^!xYzmV5`#_3V!_Nr}$}!_(nB5xT0qgP- z;Q)F4{eCBdq%kcFCx04Un zAMD#PvrG%3|CbfQywu8YQRC0^o6qxengzYeIX(33lH$>0Yl5E7%JhV@YmXjl38E)i zUr-P8DfS}Y#bI3Y>If}ZmluQjIN!;9i`7XvoCkJ!aj(ty)X=Z!f93_sV_rp1wgsW5 zsc`f<=RL6lINw#rm0anb1gQ3x^!LX4y{r6BY3Bz&)lNsbem4*nv2tdH>9Llun>laJyvBYvcFYC& z2^R&g>b|wd<8J%GfI>C%tonzvBy%fMNI-6-xXUb9^2DLXIDme{}qf^56V; zA=SSodv>ol_5$Z``OOLL6=z;-r4<6_q#(hT+{p<5H=;J51;OO63jW_Zg)qL*s7c&0TE^*cerguZwn8|dffE_nNP;0hbix9o_CH)4@393^jBRTn4ea~dD{hp_7Uee_*Ef#bvCcx zW@JzDt3&J&>RVUL;983_3dl1j?G5o5w8RwkyFy`2C^SOy6qqm@khm#w37ftl71w9({s-W=U1Lz+sL^2=l9l#k8s-$Gs?+$ zz;3hsX1_w+-s2rp^whZ0x!>(q8W$h2BX}R1{Kq6I{CEeI-(~T0H;{Mz_-zldSG>O3 z2`-7B?%&an^~H7ZE#SEDhs4iwf{$f>*7*RA=2#LZJfGvqz^=#If)Cn}7UbQ2M>c%*r(_rZt{D4Fh8)bgWUo|&+rNW{j~M_=E$AHJ>E_U0}psQytfnY6Yy#@?Pqs^^#allj&(vl)*(Rld7+p6HZ%;YT=>iW0rc`tA?pw98^_1} zk6TiH{Mz&bx0@&roOFE8ihkgJG3{f&qs}kZshs=b{uTE?40-v5{V}vA^C+_=5PvW0 zm{x+zSwGb0W^m>U{O8OggYni2^k-N6<~JDs!N#LK0j*~&ujo5|)p3s8^IbROg?$6$ ziuYv+pVNQz@0xJRn-hd@ypBxzRfQm*_?@ix(9UDRN}P1;t^koc$^+Kv7==^sa?)aq zFTblYDLFyjd6)G@5{}8!lUmCw6kRR`Q8MYNmxc3#q@5;V4zbfBv2Hr{Y z+V0yE?QW*=QmEHjB8&c8=)*hoFZLfxNc+(ohNQF`40H;VUqTapldl!IRN zJ9v>Fdk*`AaNhf+oI{c<=XZIm23gmkE%u*}!H3Z>=-+w&%89rf08}45{E`Ptq z(f-l3Kkclxi}|+tojv>W{a!^iyq<2aIQ?`p`2amwIlw86-%*hB@N0?<$b90~^6tT* zG{11~o$xBeo>)a1Fyq+y1?t{0w2~M=-|D8Dnz@14};8yyq_=% zvY*zHHf6rydpwjw{~HEghoj@sN4(RFMr{h-DagC~_$zpanO{{7cfzq3IOh?to*ui8 zuQ9w^2)#@4!?FTv3L3wj@J9CAKriEieZ*0)PS;kPb8V{%wmpMB=DQiJ7f%Xezi=zS z^Agr4^O5c0mLT4EbHp=h^qd=b#sRXD#Qie~)l8`@u$i z?{HIo1?;-`PU5io;V`WQ*OjMZCun*uq<-g}^-;J8*pu9T(9*+K#yNa!)%eQ2k>D%*gP;3F zzwLSNhw_dD_DtC6eDwsnnhL?*X8+WB%I}S_AIiAktI+6EzVqw!-seP$LN5fwf4w1j zVV%HvzF&!eq~qOqh8(@;)D?A zY3Ai7JTOW zAB_KX*^B6mF@@1ee)s_HBDC-?#3 z=ZYxVDV}uLy-sg?m-i_{j|FtSulCFTxcZfamoiD2BFXUhQndC9N(9Sa@YIy4lCF7nUCkwJkeD>bsWAgYX1+&JGMaH8FPQy zf3T?jC443KJLiZa9px?OeB2jtxc#Sm|2%NylJC$m4{$!2`Qn5$5b|_h|DwM5&ekyb zfq&bDANV8bZ~GB<1JMtp3&=RIA2Q(f{H8yUCqv{C`SE^YygO5kw>`P3aZkP_rAFVd zo5noUOE~nPuQ<2EZ@d16?wPy~Kb;`w8lP5s@cTWjzs$eh#|EOO4ol-8XGa7b|9l^g z>0jIBSM;{@yqox|X@9+t^$#7xq5W@HH1g2Lzqye1mHW)zH*4qpGs4ji$91xB6eRzN zY?qFL+xbgaCvlE@CrCZx;`4_A-Uz?Z&u7H%Q4s!Y$8YwluomnO@w>g;(m@Y!UyyOm zyuo}B>vY!f%m>UPhMWWjAMK~NUTKLM^x4*ZJ;EpQc;`Ha)3LuhIG(Z8Sy$AAf zIBR76V|yDtfINGji*q+fD*cYX3i)i&EaA3`!oS#3h|kM))B^m`zJI}fqW2MfUWczp zz(@8uZKtqf03VR@F>wR^M1APrLeyK|l>3ey#S-uRTKuw{G>iFVT=X+S`06k9@a_!f z9MBV`{;!T#w~JSZgP*RSaNpwtqA%eK_h795ea?+>iJY*H&X4}5{oE?0oMQ=cpUv%{ z9Mi$~+3|~eUjctDztAJRcS(M}pT+M~8h^awwUO`@wQEfOiu8W3)O6xsrGCoi-64MH zMdWi;Qe}P5Ny@6;bUS#J%IVQBvZ1ga8(~{D`cmC%` z{~*`gcZSam^|R%wsaSCPf4HB+_=$IV!%sb{7Qtt}S75nDj%?Qlq^5T9rwT>yJ=urU zGbah7{rLaTtH=ZXI{5DXh;t`V?}f@cRp7`)K=cXpL2uN%nCONtes>W&2fekVet;j?OYn#H8t8w{sWPHyANm=& z^f>Uj4sg;l-q9DFf91E8{;p!JKWTSM6gVB@kbZSLxp$A=JeeB&eue4-w{*9G)>3&uJ3TG5}r|9nUgI+m0I{=~VAs{AWh{IFkoM(yNx zB#%$(4f(OY!VW3VnNFxC>yy!TB2Gn+k_-_??jh-gO{fX+NWZnRjfD za83rCd-Wf*^voCBf`&hF&ye|=ANSY!(Lcm<%7=M$O%Q(Z{icAFgWS_j=2!GYOY@5D zfOrSvNYeMKk|6lcI~3-p_e-kzsh4|(qagKh8kKR2{)YeT3J*ft)6nnzR&e$yeU35C zGj4@=OVG>Se>$4R;h>x{FSR9cK;D<5J)6l+!GG>??DHPT)4F0A-)jjnKGBCgLGF$9 zBvFiSk5}KbX57xIoXDqWrS^Mh$Q|{a5{Kb4dWm*3Kh@Jy&YJSko^sy^z2JJ_3-r>D zyz`9SIjtOwlT(7wc}A2`-w8=D51uEw%I|p?e!`!v;g0t{3F)1V7a!1rd~plteHtM3a88nN&M$!T zj$J_L_WK?1zb(xA6+5t-`Gj2v{m=`X*1wR?8+N7+=rawUv_;92~MhJ z)9v>MkWaU}q~CU*-+gIGGOPL9;xqVimfLy#i~K$(=W#%ML;Oc>xnByzeng&`?_Hkl z&P}xhd5iYc%b6cij>nVxFV3eipGP}fzrR=E@6|Ei`d&2mIXo^s-mCQ?XDb>J^!t5E zA9ORWf^P0l^V`sWA5GAF^AGo9()WbXN%){s*mt%S1eh9xHm8S}w^%n|?{WSeKJ#un zkn`T~i}Op+*Adszn@y#lKe>fZ{n-21$MHTGc1PqVJ@@d?tGruFIQ|K6W=qBg?T7!I z2Pd4=;Qkhl*8-+zM_&G zK9l5bQ7OQWNK&Y0Q6*81-$O&+`Fo7KGvIvwz7cY1+~KT4Xdmx-BDd?R3Aqk?da|G1 z;j9;!fB0@C<#28m`(sZ3qCN3l8QM#E!{$}Sdv!jgoz;1ae9S|HGcUzFML71aVaUJd z!@8bFKgakChj{!ZO^ZuCal->3#{eeB>erosojd4}&FZj)T82uS=zxy@jzrFTv*lY0V=J#_c z5AZ+ind&>d&@pTtQt&`O)6ST0=x_R+_eAKwru4M+r~PvHh0vqCvqre@A<-{>KdUXs z3Z<(aW!=j9j9*Xwf9tt(Y5cV$$;^ix?f)~rdB=rcdEe6hAnt=Y{PIx9EmZiE~V$hp6_65r2ee!;J>u9=4RqMuliqnD9OZgmjP z>ll>Byg)k6Zy`T(s*mx_tPh{?Loi=#D4cVac#+^U->V@%U$sPzS?^Ik>t*D-r+3=n z<5^K)xiVij6@G`pFDjgR&WPVmAMd}H>6srk(s>f6r@YfjPy6w+F#hnr5RN~}^OoO* zUsE{vs={}hKFU!x@we0`HwQ2E+RZ7yPXGH?AM&*-iAJyEpT`d5{eQ+O_7Cy+OXyGD z&tqN&C!TYI#N$W6e&T&L{6CzQ4Y{_x{o*IVtAJetM9yumO(=xltUR^YQPZNs zcF4~Xjy*y+-}hvk_&cAhE4lZKTwsqwhxZ}yD>H8K_ha8TWLXb1ZTw1e3Y zh~EvqEU6UiF#H^}+wXCb-hP0lD8WAEy(R1({6f^jt{ME~Jx?sIb)7FnuTBe6|7!7) zFviJCspZ(U#2*%990rbm#(rYQPY9>I%X&8(KJb1vmKT00G*q11L?1v0`*-}pKgstB zsFzz>z|v0jz5w>V`EP%U{j>N-ybr;9Li{Mt{cJy4SLMMs)@8PPd6$%aI;3#Yvx7wZ zv8>mc3a!$$C=5H;ew&ucaX*xF(GS?e{J0lNdcHyow7piPEBw@crwF>xkK79<{eY z{rfdPBG>GT($0p;p!abo}Sib}A4@cHM4_>H^+8Q+{^ zqdZ=Bpx-%f0M7YoaQug~ldp_ZF6WM!&lVL+Jo6s&81G5pw^;89fHh|9nDzu&pm=jc1!aYe4G$OqFSPm z_RT8=^s(w>Ty!+v$hVZ?IlaJ&yj&L~J+JLje|#5a7=-@&WCx6b$SJE`xOLyf3qw-|<;4UQXfb`VtZRi2aU12>;PTyMyRC_H*ix{P!w+7)*is z!+C0coZIGyy~Z!@6YK<2V*R<1a*#m&M?bKR^}NMCl5v654u^Xmi~Zv|zEe5%^rLX( z)?dqFABUG7cvslpQM!<-4G-!(#CFy6O==qKzG^hrxp41=8iA-oDz zjd1h_^(`m3lIWt}TM1`=L?3#6kNkW50V5o}hJ8Rg`Thwz3=Opm{lYn4ew2ef!8^V1 zjdyy<7w5G2+RQ=x0e`CU5%R@&Ixam1rIPb)~g_jk*%DR_%lT&PtzvBku2g_&uKUn@?{MPzM$A^8-e2G4(uz0 zoYhEV9Bv9i=UH(IyeG(SLNfUxg+q^G@k(ZT}$^M3t4~mZ#*tN&hJxN(ery&lEE+D zS^jJ~zwL9o)$oXaFqij)O62!Udi{#>K9%s#s6_0g7i6g+KQGFDWnOt+DVgUuufcrr zg5Fm{&#{U^Kl5rR^80Si%Q0WBsfL}PlI?2$;{Brwd-1h24|TGgG%1KZHhHQn%nL3W^sQFza{N$>Obmj2{KRdm230M=ho}=)X#++5vTZt9%Y}OALn=Y z9aYKvnrbOOR)_q!_sY-bd9d&7ZwiRL#*goV@LSP3kl%tdEI+=}!mm!xZt?eA<@WGBBYvDi;kT00vtH%LzBj+% zgU{O(x^-^*ZYIa`jsWfSdGxZJGr8P*Go6PsJel*w_cjmbdOw}vlqli%sSM-%a@+&E zl*^%B`1nNepC|j_#p1t6^U%C36!iP5{P)bS(`n@o^g6nc>gT)M*Hb-v)kk|t?|H@V z-Q&OXeD8OO@Tw3mCcl*8;rcv~&SFUY+F<}dcWkYDcy z4$i~K755z|_mudHT!1rwG!I~BVQeE=64@TI5@wS;TNc0?HP=(mv;-nz@2b|xH zlv~Zep)cp~>j{ntZdP!@_gYW9!^?g(^0SfO|Ldjuy!5;I6%hWpUc!-|a|!3&81P=U zi#Ad^@cUD_o2k5Nd<$|#{{uA`{j*dHk91``_8sqmGG5|c(3Uul+_$7BSXXz7*ZUCq zCW^OIF7V9+I~ng3Ur%^5*<;wR`02@iGQ$%&-^mKRdGm1eBjd#FINpcmJ9Z=VvCam5 zr4OC{)tvs-6n-qdE5iQ8SCT%N%I}>_X&(xHHROQ^Xnvl~eDyuddByVsI=+O22fcL& z{pRB%eF(jcw9YrAytYP4K-2L^rYG{fo%6q~+Q?Tz=ks^R`7XHgzukxUUpSu;ko*&p z%t3f9IHh|)laPB z%JIi|#P4N!9@o5Nf60p}96CsUvAB}*-3X*W%EOMhD8JKk2jloRY2RtL{dbUV zZ}PrZet8~W?T<(D-=^`x{Bf5?D8IuRiTuzD9}(QpI){Bw&f)Nz6a2U!?|Obru=Jz( z+!y;*{5U^DeBd!3#(AbHsZ zl8^H&PLI8Z9|JoHdVQXCKI2{4kLba!JT0X2J66zpJ*DqxMxmZqcR~;PH}2<;i*Njn z=kv2=I==@R>5k@f>|WF3#|5F2cR;!4#_3k<7tS{!8NKY^m{rIf!kHIHzo7Ork8KFv zn$j%@gFfGHsh-Pnd#))KJ^xIiyPLn86mqZ^J+FfHG%xHnJ@Rup?Z2_!znuDGT0O`< zE9b3Pf3lAU-~Db1{vPukh}?3nk@-L5b3faK-tXwUbnvlL{8fhkX@&@!D8vGOSJ=|(Iz*_3;Sb z2}Zu%LdqLY-@SFcJC#2yKJxDdBJcAWCD?Ji8;ZQo%f72a^y7lU>kz)Of6O?-FNJ=( zBny)9wjeu@a`-MDzx|Y({VFf)ILg~Ef75=p^G4{awkPb!{o>orD+jsvd{ds!183gG zPsF?yehtqz?S!M(`ECq$`a(+Y^(%U-nebTOMtbx#c0K1S__;p(O`yd`? zC0&I39A^oGZtH*A!G2vCALl*?+d;kWS3BIEz0pg%-b;FKTyJ2{Vb^dj8$HiCKIZ#& zk|*ZDvzq(B{T}WSrQ{p~_Xp|c!-8nWc0Q-g_x=JW{)lkfEsv#gSG2=q{PB!Gp72%8 z#H<4sWuYKx}(|%)?vh^nL!v2= zuD?a`lj3jEoZ`pDA7}VC2Jr6`f0D}kR`K_e9rBIh?<$`0*2(g|k;;kvM&8AwUcQq~ z`7`oB@oS4RJcpcLVq8wEJ=pPgt2Ktb44);ry#Ie8+m`cTf01zBL5B~ax2H4@pf7kY zpC9k1x%|t*I2Uy_*~NEjW`Yjtbv*uG&eKsp?|wWdjCIoaG~UrW#-GmkGYOv+zu+(X z4Cn>cV@|i6_+Rcnd_DQ0+G)KpRx|~f-y=Qi82W4H^roYk=wbf+r>VYP@t~9tf}{ zh`wAee9j+;{$7<_1{@Z@lH-9c-|xiDtLLDjA^FDt#J&jn|3OJC;e7Yl{QF#@uaoRp z(tjz%chWm~r2A~n|9pbnL!msN^*Ar_px6EVF7!L?E%m(LO`FYpz@Nzc5bxGiA@uV; z0Q#SMNlq8ccu(oUr#0?Jm2W!A@&n(m@^6%W=$_4d0n#2|lp8R@gFom`+FysHn-V`F zJn%Yy0>@s9bEqBlC+U}qR}&0;LE{#?qLKGy{oQi%eLjUR7vD|eq@#R{%eDM|>QeFj zRL(JlGY(dSJO1a%PF&OXj?w!w3a4MF4|@*W_5D2Mo6*ch`~^{fKjMl?V%~XLl%n@J z-$6MKX8Zw39DKX35r@8hTqBZpavzlX<2@{PJ;1qlMLOQi06r$ofSg}d2<684k*4y~ zj!O!Mo=Ym9{MVF%aYFsz*VO{|*KDqzm#d(I6VPLtMSPF#sjP>|O?}O*cOF+c@Zm|( z!8qmCDKOqGTgY^C3zhPokjAEb+KV3Ky${kqqMm>r+5_~xO#0V)ldsQ_j$41oLsS2a ziSjr{bzb>t$Nie|u$wqf1l$xP9k2|ifBi1ggQCawJpNGpEDH%fu9`?6_h)z?*K+7{ zSolY6PdNXnRIlHGApB^m7di308{P{gd^17p6PI@^L-v)RGt#$mIO{{`2)jJ!IG5Y| zOqQ<)#3}N-9NMv(@CoJQXMV6QF&(p+E`Nm<|7NtyeBk^J^e!kJzbNO3%A=m~oc~Bp zcdP~{6Ma7SMS9MS0j~+t9-r@G-_Z0d=JLjKId|vw+>`0&+#30>^y={P5TQqBX)2c7rkdU=P7`uSb~e3?r0`TQ8^XDc}M{9#Ua zxB7t}a(W|hFaD!JJ0spd^?cvZe9!o53EnOUj{fp@#?XiM`?8NgIO7C;1Z13Zj|4p8 z1LyrS>g79A{I;W){7p$5_6p~2Zc+Lp8X5QrkBP(h38xj#Z@Y3Lp7a-$4}E(k!xQ=! z_8;d0&^rq%kN%s=exl3jSH}CI{F3zF1#tiv`A$kQoqsc>dq_CxA69=-AMchKUP$?_ zss!jipX?*Xll=)7ayjP}gFIbGa)4f7e}Vfh_D@|(>wo8mk2B)9?KST|fTRDAGw29E z6#Fi;i}x(xW4uGaxTQVp?|fY03;Gv0_kL*CyyO|aw1nT0apZyZ6?E}6CCUXy4mdxE z-1FWE`R4U6({Zd{KJosZ+V1*I1?;MSN2POnd`^IOoRF&pNf2_yyg_^79f+1VNBXu} z2A$lW2j`wX>DL8GkNq2vbbOVH_VS*oanFmqO9bB1f99L#U%pPxe9pTJ=F@oUH||w} z^Zo+!G~Oih)#r=XR0DJ@iO(FeT0i=4)L0KBt7IPXvlOFu5YU>B|klCFwF?}8|U4{L(N zhu#6g7vA|GJl>^URZYk<=V;+qqz}DR)l+qPSeNq-IOAhVkaqB{SwQS0-l6ci=pM}l z;Jyz#El9uLEvk6WfZnf{Pe1T3e?a7ddo=;;>FYT8;(KpE^g4RS01*n&| zTO2v%eNOm%PI>@6$9-z_1mgwy;C?1J?((Q0wYj8NPvV`4& zUBrGI>HTu}W%-rqAAgq){f?c-d1Ie1jPHlEL@z(&n-%S4@#9Xx6_t0FAn%nd3Vu%I zQR5|zx2E7{RNj){^D1v#@UmKZn;@}p(62GDPlz2|$i8gpFMR%*@Eczbvi{+>p_zwY zd9D?z@Xv9sjd&pSq5sQty?(g&KYDq7i+449nNPjEU%r{=r_Jnd;$1p^TkA(-jcGOi zFQxJNrQ&D8#)=;$f8Cf?Ie(nS-H(fZkivgb{8@&7kjmRs3VzJr^w{(A^aT#w%vS%^tiPujnV;{^ zQl9JS<^C9Ee;~KK^UL_))fj#rhn_#Fk9ScFUr!R<%j?l@^4lY)Z>IUD*Z0@=l#coH zYSIs!Kjt@;`wPD!<>A-hR~`2U_`Br?{I*>_9PSi9STEzFl!Gh6z<2I{<~97uh8r0^ zm)6OA7mM|B>EC`$-Oc*L`;j3R_`jGx`3?m0XG`OWd69RlfoocM@oOi2fP79R`CCi( zt|{N|%E$X}J}*SL$B*B8q8yjEsu2Yp>!O=_xhF(>dEdwLgzs zc2V`c9`f-{Y#ow6zO!0|%=gRE(zK8EV&Cviit`WF!~Im|$0`gu7{}O$0pSy~Lg372 z+!GDRd>7w2I3>!!Sx-R^vrjVePHQ-={xe(d3Z!LPufgIDQ*yaq@4yz7R1aE^&|$Q5$OeeQr! z4*l9vKGN~s2CUh^^I^oi_WJ}65*R4A#cYMH>>APZ4cU7eSgD|pVB|g zc)*_Nilg`${7x6|*3z%&7x=Rx$)ue=CyM`&RS@@4u`*c)V)qk{mF;-=#a9$OUgop@ znNQ`l)Po+keE)^=&nC$GaK`;k)T-=U=w&nk8NZa*kp1X!>wAx@>Iv#wS2%LYxj-P_ zUGaGFcY#>9T8{nx=*1phfk*b;67(mzTXk|kgg>8#;&lv>3r;ym*uce z&3hcw|5g13Zf7Um{P?Zs6n1|uf_46L#otQpxGre@)XnfphOejo;CG-tRB@6@0#;RPY`9ocTV^<-C#0?_^lk=k#0iqnG#&tKpRlUr+g`)K3n7Z6v+4 z4}Kxfd=uT!?PdLhe4bH!z`dsT{N(S3`#pc;(sCI0$>JVatk;k?+Kc}XxOF{eKJa}6 z;^Vvp?-UznT~@B=y4h}Jf5h~ApQ60C>-A*$&avOa=e;7*dp`(xDV5K;E`F|`^`PtZ zcT@=H9;x{W}7Gf59Ik489fQQ@X9*2U%z?R7YQ2Iw}uB|NTB!p%p2cZq&Dqx9wY_WV=r z@91~8Gx`mAaKBh@44!X94)$_h5P9)E#2Y`S`CibAoW6T{J&)Aql@h1_%JKHWZx8eF zvLw^%o&{m0JaON{^2Pk*aP%zU#+jFxk1R)%IX&~5_48JJP5N@a+FHKLEz74q-g!1; zy$${>#SE=C=&YABDm~%D=owWn_Vt%lKkos2QxN;}6~U(9cQajOdFIOj{@(Iov-mx& zrSNP1UY3`t{9p&*zp>qLqjG}$RO@5>a}PQo_9*wE0}|fI?-LAz*s~qw9|g%jm(TZX z2U*{69(gB7dDFSP;gJ2_(q6*8q1;gre%uUsuj(c4V}oDK^LQPP`fYy~vbwiVAL)Re z7f0J?Zr^KKsnAaAzv+CRVOqGuPmxUVtpuk99d78a5LNT@k_Xk@Wn2C+lr+(ogArTcoGFN$o@h zzMAqstI+N3_#2JK&N!RwT;yTU9*p}mVSi)K@bi8M{Q0^t;8Pje-rgF1f3i?Ed7+zK&q4Vg9{mvZK#bGf;-k_>9zC+3^3OcW`>J)wda|K#)_HuNH*oet{T>YK#nT7#pE$6e z{c$i(gP*KJSU&?$!r>?M z#Xg_U$p#L@_lOCPeN(DX6u2S?j!9Kf3xX}^6PX&c))u6D15K!qny3wdoR-SE&{LJ@ea+5UJ2oy zkcM94F!Xol`3?&>uQ+nQl=lFEd~eE-S5L}u7VX_HxK}>xSG}XkiSM2TY>5+`Z*Sy# z7tMUGKH^7}^WKO1ec8R%>-OKZq|(k>4-KbkaR-?yK=V2g(ET-Y4Y)KbZHpFQs?=c;}z@{kFoNrtfKQm5b0T zA9i>-zoRw^e%RZ8(7q4HI%w4Rey_t1$U+e7<{iIi&}3&%LAj*WAPIr0*dOLWgrd zdobUP;32Ou59~L5x8=Xvd^^!kxjVhn74LKLZUNu_*zTRKo$8DDy|!ns>7$+x67;)g z{?21l>*T=ekoE71UVOu!uv#?JdYJDG622^)aN_xWklMH3^x(g1iBCYj_gBRUN59M~ z2D#*2dgJ~cz34>HkNB!y zCS*KaP5voh9glRTBfdufWZtVo-c=&p?bZD*w0xt*rl>83M3XEGdxM|k=D zg?c*!zp?g?lFJA$`7+$^8R_0FtlAy$sgA$fa_jlRue?)x>ha;AO>Wzuw<}KbH3uCUUs_>wI^d{e?og2J`V48raf0S&PS=pbPvaopH_GGeG$MpK-W_l0zir#(XJ1f^^(Q}UIVSRtz@Otv6T-Wz5 z@uytY{(L~}=Zktb6u;Oxy;B+Wa4zJy>ft@zQ>q7eRqsdg<1RfUl6@f4__v0i<-f9&18C3WS@_T+HTH&Cbi=M zeL=-^AD7L}dzNGQy-XlG6Uoap2Xo9oCH$i~o#R`2uhsbs z7sOBSg>-V|nd0Z-NujUszN3By{=PT}{AGskq;(lM>$7KyU)12QlHY>-tQ?5v{7ead zmGOYT)E60ue<#CV$-ictl^ppDf12Zes+A+*Kh|0g`27sOCwT^cGpGAn#$S~L6aK{v zpUmw$r!c~czPxjC=NWyscs#*RXXx*iJ)`d#{r~Nq-ELjQ700(}@1T{c<|H`A&hcmL zvv;CW8WlSNAw-&(nm9mJLmI`kNgGiW)oN*kB_hNP5V&@F%>@@oya5+TeSk_xeTTjQ z-1h%lA7`I)im^;0Bsa4y>#sE*Yt5{^X6@Pg%$o83T$O!O?pomQqkWurOZq5o_4D~| zb6WQeeVo?$f3)|s{%BuI&s&>lm&@6W{-V4Wwytxcxmx^l&@D0!xbKPBHRThrZ|KD2 zo9Oy{!&ZP%F73kky%T)ij{0wf{9A!qVHTty? zcD@nm{@w5)^G21@Cgi)SYDXtcPa3{perrc9V*G&E_m0|+zCi4t#TQI(J34=i^QCum z?ik}3#1Db!3*-W`9DZpq-}$!nu&cp(SwHz^{p2^R0_*CB>wPWse%bnkeqHZZtiS6T zaWhtab) z%KhSmk@-C8 zbaNZ625H`_2h+2><6WC4lAq<6 z|23MaCXHU<=XiGnGd*!MKWS#l-VX5peSCH_ujhKuaP+>`)qAFgZ$iF%HPr`UuXpTy zr>XAP`%F`PXzxMLZigQQ-KO)sr>WkL^bhR46n@V4{lGi+-b^{(GaI#MKcu1Ks?Rkk zxm;6$UA2d6BIw7ekAfafpO73c=X@Rwe&dlo9`#QIjlOc6-7iG`V;ax*6G!iBq093X z`zm%&?4Z~|83)A=6hBb>K=A{`4-`L8{6O&o#SaueQ2apg1H}&%KT!NY@dL#V6hBb> zK=A{`58S&SAg<(Pt#~|WJh2Y+lp;YW-&I^O>m_Hks*`n&AnVG1s@0vWf2?hlXR*&> zpNF?k;ukJyT`qA|FKJaX>vnsxFz{)uqE2LAmrGjJ&idU8TGh^eE)(|a{n59(+{dBV z&*AOoAU{^}kN)^LisJ&mwV-H?#I(a)r{n97{&(HocUfO|6!nw(*bh@r_Y0BpeXeWb zc~w_mSj0qK{Zkb5mx2GLIf^>|*lnB03D~hv9BwlI5XyS`~{#GmAglk%H zNnAa}vk-?dqc~qjqL9WEwdd(SvwanbtG#Y^c}{W7#1$_qu99-K;$T`i?DMlaMn5{$ zr^<)^I&f9X;3)qe(ZqFpW>4Z;@i5E_A68Tl_6>bf^f^iMcFZVeOtZ=3{d`aFMSf2+ zN%(e+KB;(Tu3u>79oOSR^w_CBH@dFA3e5KWOEmI7G3;nwL7a5EpVEzy@)x4~am{Ec z=k4rBf3(}{A@7x;cFkFI7yBeVVev+_?YF}|bleZ>Et#A}i{?TPL~nt5h{%AE=O zc*^G4wc>w>u&EWf&Ac1h`T4$C3llVz zKHtrZzQkQ6zbTVX{(0rHA0h1{pME5t zRv+*o9@OLXPYCr1-krp7?lq-h*n{g`d zIB&p_=Tz>WI{Z8t)7sc)tXxNNb(HVOZ-B?5{(f?L8mDf@pILeL7lZBj+R}USi}34J z_(k3~zc5@9`o5RPhQ@>2zu(99zP9=rZvSw)kFP%(|GK(qIA8r?h@Md-ANG98&Ywds z*NmR8-V8rL+&X^j4XrQce%-SA$HfPFLA2+;YvXgV`m5Q&gwnmeH)RRDzuXEr?^?Zy z>g{O9HQ{i(3w`wTF>U^j=QDnAKg50*&)<$`Eb_N9ds@=_@r0Fs#KuP>OU2JL8bLg- z8~uSZn(?rI$dZurW@hDS5*Y{Z8N^0Ww9sJkPjvn%C$ZO;iyY)8(jVj}65rhsS1!tN z;jOr)^~c4y<-1cOeI11CchE?02Vv@s@w}k^Qr=JTp?yTpa5 zBR`Vf5|d9N^%ul7G5IGt|CE#H@>1@k=>vH#zmZ(p0iF=&Md>Y3q|#k~AkQP_ONp+x zR-eq5&S)NV5Yo=Zp3euN-!FPx%W|nVXvB#}CCn5qa~X6I0$GPT8&r#A*1sMUzA5dgi+) z=Y%1rkt8mEzCinP{$TX^+qdaA?;HA?)1Qx{j>WT}=SP$dre4{PXI}c?Ide??^!%>v zpU^0WcF);U)A=P|>~daON_6|26?f-H{Q3z=N?a7pY%CG|BQNnG)kI$6kBy#^WYVXi fA1x|b>5YBIL#xO=F{Ibj@6km3#Pc>^^7j81+P + + +// -------------------------------- TOWNS -------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------- OUTSKIRTS ---------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------- BUILDINGS ---------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------- INNS TAVERNS ------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------- GRAVEYARD ---------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------- MISC --------------------------------------------- + + + + + + + + + + + + + + + + + + + +// -------------------------------- FARMS -------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// -------------------------------- MOONGATES ---------------------------------------- + + + + + + + + + + +// -------------------------------- SHRINES ------------------------------------------ + + + + + + + + + + + + + + + + + + + + + + + + +// *** END ************************************************************************************************************************************************************************ + + +// -------------------------------- DUNGEONS -------------------------------------------- + + + + + + + + + + + + + + + + + + +// -------------------------------- MAZES ----------------------------------------------- + + + + + + + + +// -------------------------------- MINES ----------------------------------------------- + + + + + + + + + + + + +// -------------------------------- CAVES ----------------------------------------------- + + + + + + + + + +// -------------------------------- SHRINES --------------------------------------------- + + + + + + + + + +// -------------------------------- LABYRINTHS ------------------------------------------ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Data/Config/SpawnDefinitions.xml b/Data/Config/SpawnDefinitions.xml new file mode 100644 index 0000000..ca160c5 --- /dev/null +++ b/Data/Config/SpawnDefinitions.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Data/Config/bodyNames.txt b/Data/Config/bodyNames.txt new file mode 100644 index 0000000..76e5142 --- /dev/null +++ b/Data/Config/bodyNames.txt @@ -0,0 +1,355 @@ +ID Creature AnimMod +----------------------- +1 Ogre +2 Ettin +3 Zombie +4 Gargoyle +5 Eagle +6 Bird +7 Orc Lord +8 Vine +9 Daemon +10 Daemon Sword +11 Ant Lion +12 Dragon +13 Air Elemental +14 Earth Elemental +15 Fire Elemental +16 Water Elemental +17 Orc +18 Ettin +19 Giant Black Widow +20 Widow Queen +21 Serpent +22 Gazer +23 Sea Giant +24 Lich +25 Caveman +26 Wraith Spectre +27 Dread Spider +28 Giant Spider +29 Gorilla +30 Harpy +31 Headless +33 Lizardman +34 Vampire Lord +35 Lizardman +36 Lizardman +37 Pixie +38 Ghoul +39 Mongbat +40 Forest Giant +41 Orc +42 Ratman +43 Bat +44 Ratman +45 Ratman +46 Golem 3 +47 Reaper +48 Scorpion +49 Flesh Goliath +50 Skeleton +51 Slime +52 Snake +53 Troll +54 Troll +55 Troll +56 Skeleton +57 Skeletal Knight +58 Wisp +59 Dragon +60 Drake +61 Drake +62 Imp +63 Succubus Queen +64 Lightning Elemental +65 Mummy +66 Ogre Magi +67 Shadow Titan +68 Arcane Scarab +69 Corpser +70 Terathan Warrior +71 Terathan Drone +72 Terathan Matriarch +73 SHADOW LORD X +74 Skeletal Mage +75 Cyclops Chief +76 Cyclops +77 Sphinx +78 Succubus +79 Terathan Avenger +80 Toad +81 Frog +82 Titan +83 Elder Elemental +84 Shambling Mound +85 Ophidian Mage +86 Ophidian Warrior +87 Ophidian Matriarch +88 Wyvern +89 Xorn +90 Balron +91 Ent +92 Ogre Lord +93 Hill Giant +94 Rotting Corpse +96 Frost Spider +97 Minotaur +98 Ice Naga 4 +99 Fire Naga 4 +100 Ancient Gazer +101 Mountain Giant +102 Snow Ettin +103 Ice Elemental 4 +104 Skeletal Dragon +105 Frost Giant 4 +106 Medusa 3 +107 Seeker +108 Yeti 4 +109 Fungal 4 +110 Fungal Mage 4 +111 Bugbear +112 Panda Bear +113 Balron Sword +114 Ice Fiend +115 Drasolisk +116 Silisk +117 Hydra 4 +118 Satyr +119 Vampire Bat +120 Shadow Demon 3 +121 Bone Magi +122 Ancient Wyrm +123 Shadow Wyrm +124 Ancient Wyvern +125 Shambler +126 Centaur +127 Torax +128 Ancient Vampire 3 +129 Sand Giant +130 Jungle Giant +131 Storm Giant +132 Mind Flayer 4 +133 Stone Golem 3 +134 Gargoyle Lord +135 Deviless +136 Ktulu +137 Blood Lotus +138 Goliath +139 Giant Crab +140 Sea Hydra +141 Drakkhen 3 +142 Demilich 3 +143 Carcass Worm 6 +144 Kraken +145 Sahuagin 4 +146 Sahuagin Mage 4 +147 Deadly Scorpion 4 +148 Kith 3 +149 Kobra +150 Sea Serpent +151 Dolphin +152 Wight +153 Fire Toad +154 Demoness +155 Fire Gargoyle +157 Frost Troll +158 Flame Crawler +159 Iron Beetle 4 +160 Bone Knight 4 +161 BANE X +162 Dagon +163 Krakoa +164 Cerberus +165 Fire Naga +166 Sasquatch +167 Cyclops Lord +168 Sakkhra +169 Sakkhra Shaman +170 Sakkhra +171 Harpy Hen +172 Sea Dragon +173 Royal Sphinx 3 +174 Naga Warrior +175 Naga +176 Sand Spider +177 Antaur Worker +178 Antaur Soldier +179 Antaur Queen +180 Owlbear +181 Dragon Turtle +182 Ancient Sphinx +183 Savage Leader +184 Mantis +185 Cave Bat 7 +186 Sand Scorpion +187 Ice Devil +188 Horned Devil 5 +189 Sea Drake +190 Demon Claw +191 Dark Knight 4 +192 Green Slime +193 Blood Spider +194 Horned Gorax 3 +195 Slicer Gorax 3 +196 Hobgoblin +199 Black Knight +200 Horse +201 Cat +202 Alligator +203 Pig +204 Horse +205 Rabbit +206 Lizard +207 Sheep +208 Chicken +209 Goat +210 Gorceratops +211 Bear +212 Grizzly Bear +213 Polar Bear +214 Tiger +215 Giant Rat +216 Cow +217 Dog +220 Llama +221 Walrus +223 Sheep +224 Giant Bird +225 Wolf +226 Horse +227 Raccoon +228 Horse +229 Squirrel +230 Unicorn +231 Cow +232 Bull +233 Bull +234 Deer Buck +235 Raptor +236 Lion +237 Deer +238 Rat +239 Hippogriff +240 Fire Beetle +241 Griffon +242 Goblin +243 Goblin Archer +244 Minotaur Lord 1 +245 Scarab 1 +246 Tyranasaur +247 Mud Elemental +248 Meglasaur +249 Magma Elemental +250 Skeleton Archer +251 Deep Sea Elemental +252 Werewolf +253 Manticore +254 Beetle +255 Swamp Dragon +256 Swarm 1 +257 Mummy Lord 1 +258 Mephit 1 +259 Wood Elemental 1 +260 Stirge 1 +261 Gargoyle Knight 1 +262 Flesh Golem 1 +263 Giant Scarab 1 +264 Wooly Banta +265 Dread Horn +266 Cave Bear +267 Kodiak Bear +268 Snow Bear +269 Lobstran +270 Lochasaur 2 +271 Great White 2 +272 Megalodon 2 +273 Shark 2 +274 Raptor +275 Raptor +276 Stegosaurus +277 Raptor +278 Lurker +279 Pharaoh 1 +280 Hell Hound +281 Turtle +282 Forest Stalker 1 +283 Shaclaw 1 +284 Cave Dweller 1 +285 Demonic Spirit 1 +286 Dwarf Knight +287 Dwarf Warrior +288 Dwarf +289 Mountain Goat +290 Boar +291 Pack Horse +292 Pack Llama +293 Werewolf +294 Goblin Warrior +295 Axebeak +296 Swamp Thing 3 +297 Nazghoul +298 Vampire +299 Hobgoblin Shaman +300 Hobgoblin Archer +301 Serperus +302 Naga Queen +303 Sea Devil +304 Dark Knight +305 Haderus +306 Turkey +307 Crimson Gargoyle +308 Dark Gargoyle +309 Stone Gargoyle +310 Undead Gargoyle +311 Ice Gargoyle +312 DEMON PRINCE X +313 Dragon Ogre X +314 Antaur Lord +315 Meteor Elemental +316 Ogre Lord +317 Elder Gazer 3 +318 Corpse Golem 3 +319 Ape +320 Caveman +321 BANE +322 Ettin +323 Ettin +324 BANE +325 DEVIL LORD X +326 Lava Drake +327 Tiger +328 GUARDIAN 3 X +329 Minotaur Chief +330 Naga Sorceress +331 Bone Claw +332 Zombie Lord +333 Zombie Gargoyle +334 Zombie Dragon +335 Seahorse +336 Vampiric Wyrm +337 Dark Drake +338 Devilkin +339 Devilkin Shaman +340 Devilkin +341 Storm Cloud +342 Hobgoblin Chief +343 Minotaur +344 Stone Elemental +345 Volcanic Dragon +346 Dark Dragon +347 Night Dragon +348 Rune Dragon +349 Royal Dragon +350 Amber Dragon +351 Horned Dragon +352 Brass Dragon +353 Green Dragon +354 Copper Dragon +355 Sea Dragon +356 Red Drake +357 Night Drake +358 Rotting Dragon +359 Night Drake +360 Skeletal Drake +361 Gas Cloud \ No newline at end of file diff --git a/Data/Config/bodyTable.cfg b/Data/Config/bodyTable.cfg new file mode 100644 index 0000000..d2f1309 --- /dev/null +++ b/Data/Config/bodyTable.cfg @@ -0,0 +1,1049 @@ +1 Monster +2 Monster +3 Monster +4 Monster +5 Monster +6 Monster +7 Monster +8 Monster +9 Monster +10 Monster +11 Monster +12 Monster +13 Monster +14 Monster +15 Monster +16 Monster +17 Monster +18 Monster +19 Monster +20 Monster +21 Monster +22 Monster +23 Monster +24 Monster +25 Monster +26 Monster +27 Monster +28 Monster +29 Monster +30 Monster +31 Monster +32 Monster +33 Monster +34 Monster +35 Monster +36 Monster +37 Monster +38 Monster +39 Monster +40 Monster +41 Monster +42 Monster +43 Monster +44 Monster +45 Monster +46 Monster +47 Monster +48 Monster +49 Monster +50 Monster +51 Monster +52 Monster +53 Monster +54 Monster +55 Monster +56 Monster +57 Monster +58 Monster +59 Monster +60 Monster +61 Monster +62 Monster +63 Monster +64 Monster +65 Monster +66 Monster +67 Monster +68 Monster +69 Monster +70 Monster +71 Monster +72 Monster +73 Monster +74 Monster +75 Monster +76 Monster +77 Monster +78 Monster +79 Monster +80 Monster +81 Monster +82 Monster +83 Monster +84 Monster +85 Monster +86 Monster +87 Monster +88 Monster +89 Monster +90 Monster +91 Monster +92 Monster +93 Monster +94 Monster +95 Monster +96 Monster +97 Monster +98 Monster +99 Monster +100 Monster +101 Monster +102 Monster +103 Monster +104 Monster +105 Monster +106 Monster +107 Monster +108 Monster +109 Monster +110 Monster +111 Monster +112 Monster +113 Monster +114 Monster +115 Monster +116 Monster +117 Monster +118 Monster +119 Monster +120 Monster +121 Monster +122 Monster +123 Monster +124 Monster +125 Monster +126 Monster +127 Monster +128 Monster +129 Monster +130 Monster +131 Monster +132 Monster +133 Monster +134 Monster +135 Monster +136 Monster +137 Monster +138 Monster +139 Monster +140 Monster +141 Monster +142 Monster +143 Monster +144 Monster +145 Monster +146 Monster +147 Monster +148 Monster +149 Monster +150 Monster +151 Monster +152 Monster +153 Monster +154 Monster +155 Monster +156 Monster +157 Monster +158 Monster +159 Monster +160 Monster +161 Monster +162 Monster +163 Monster +164 Monster +165 Monster +166 Monster +167 Monster +168 Monster +169 Monster +170 Monster +171 Monster +172 Monster +173 Monster +174 Monster +175 Monster +176 Monster +177 Monster +178 Monster +179 Monster +180 Monster +181 Monster +182 Monster +183 Monster +184 Monster +185 Monster +186 Monster +187 Monster +188 Monster +189 Monster +190 Monster +191 Monster +192 Monster +193 Monster +194 Monster +195 Monster +196 Monster +197 Monster +198 Monster +199 Monster +200 Animal +201 Animal +202 Animal +203 Animal +204 Animal +205 Animal +206 Animal +207 Animal +208 Animal +209 Animal +210 Animal +211 Animal +212 Animal +213 Animal +214 Animal +215 Animal +216 Animal +217 Animal +218 Animal +219 Animal +220 Animal +221 Animal +222 Animal +223 Animal +224 Animal +225 Animal +226 Animal +227 Animal +228 Animal +229 Animal +230 Animal +231 Animal +232 Animal +233 Animal +234 Animal +235 Animal +236 Animal +237 Animal +238 Animal +239 Animal +240 Animal +241 Animal +242 Animal +243 Animal +244 Animal +245 Animal +246 Animal +247 Animal +248 Animal +249 Animal +250 Animal +251 Animal +252 Animal +253 Animal +254 Animal +255 Animal +256 Animal +257 Animal +258 Animal +259 Animal +260 Animal +261 Animal +262 Animal +263 Animal +264 Animal +265 Animal +266 Animal +267 Animal +268 Animal +269 Animal +270 Animal +271 Animal +272 Animal +273 Animal +274 Animal +275 Animal +276 Animal +277 Animal +278 Animal +279 Animal +280 Animal +281 Animal +282 Animal +283 Animal +284 Animal +285 Animal +286 Animal +287 Animal +288 Animal +289 Animal +290 Animal +291 Animal +292 Animal +293 Animal +294 Animal +295 Animal +296 Monster +297 Monster +298 Monster +299 Monster +300 Monster +301 Monster +302 Monster +303 Monster +304 Monster +305 Monster +306 Monster +307 Monster +308 Monster +309 Monster +310 Monster +311 Monster +312 Monster +313 Monster +314 Monster +315 Monster +316 Monster +317 Monster +318 Monster +319 Monster +320 Monster +321 Monster +322 Monster +323 Monster +324 Monster +325 Monster +326 Monster +327 Monster +328 Monster +329 Monster +330 Monster +331 Monster +332 Monster +333 Monster +334 Monster +335 Monster +336 Monster +337 Monster +338 Monster +339 Monster +340 Monster +341 Monster +342 Monster +343 Monster +344 Monster +345 Monster +346 Monster +347 Monster +348 Monster +349 Monster +350 Monster +351 Monster +352 Monster +353 Monster +354 Monster +355 Monster +356 Monster +357 Monster +358 Monster +359 Monster +360 Monster +361 Monster +362 Animal +363 Animal +364 Animal +365 Animal +366 Animal +367 Animal +368 Animal +369 Animal +370 Animal +371 Animal +372 Animal +373 Animal +374 Animal +375 Animal +376 Animal +377 Animal +378 Animal +379 Animal +380 Animal +381 Animal +382 Animal +383 Animal +384 Animal +385 Animal +386 Animal +387 Animal +388 Animal +389 Animal +390 Animal +391 Animal +392 Animal +393 Animal +394 Animal +395 Animal +396 Animal +397 Animal +398 Animal +399 Animal +400 Human +401 Human +402 Equipment +403 Equipment +404 Equipment +405 Equipment +406 Equipment +407 Equipment +408 Equipment +409 Equipment +410 Equipment +411 Equipment +412 Equipment +413 Equipment +414 Equipment +415 Equipment +416 Equipment +417 Equipment +418 Equipment +419 Equipment +420 Equipment +421 Equipment +422 Equipment +423 Equipment +424 Equipment +425 Equipment +426 Equipment +427 Equipment +428 Equipment +429 Equipment +430 Equipment +431 Equipment +432 Equipment +433 Equipment +434 Equipment +435 Equipment +436 Equipment +437 Equipment +438 Equipment +439 Equipment +440 Equipment +441 Equipment +442 Equipment +443 Equipment +444 Equipment +445 Equipment +446 Equipment +447 Equipment +448 Equipment +449 Equipment +450 Equipment +451 Equipment +452 Equipment +453 Equipment +454 Equipment +455 Equipment +456 Equipment +457 Equipment +458 Equipment +459 Equipment +460 Equipment +461 Equipment +462 Equipment +463 Equipment +464 Equipment +465 Equipment +466 Equipment +467 Equipment +468 Equipment +469 Equipment +470 Equipment +471 Equipment +472 Equipment +473 Equipment +474 Equipment +475 Equipment +476 Equipment +477 Equipment +478 Equipment +479 Equipment +480 Equipment +481 Equipment +482 Equipment +483 Equipment +484 Equipment +485 Equipment +486 Equipment +487 Equipment +488 Equipment +489 Equipment +490 Equipment +491 Equipment +492 Equipment +493 Equipment +494 Equipment +495 Equipment +496 Equipment +497 Equipment +498 Equipment +499 Equipment +500 Equipment +501 Equipment +502 Equipment +503 Equipment +504 Equipment +505 Equipment +506 Equipment +507 Equipment +508 Equipment +509 Equipment +510 Equipment +511 Equipment +512 Equipment +513 Equipment +514 Equipment +515 Equipment +516 Equipment +517 Equipment +518 Equipment +519 Equipment +520 Equipment +521 Equipment +522 Equipment +523 Equipment +524 Equipment +525 Equipment +526 Equipment +527 Equipment +528 Equipment +529 Equipment +530 Equipment +531 Equipment +532 Equipment +533 Equipment +534 Equipment +535 Equipment +536 Equipment +537 Equipment +538 Equipment +539 Equipment +540 Equipment +541 Equipment +542 Equipment +543 Equipment +544 Equipment +545 Equipment +546 Equipment +547 Equipment +548 Equipment +549 Equipment +550 Equipment +551 Equipment +552 Equipment +553 Equipment +554 Equipment +555 Equipment +556 Equipment +557 Equipment +558 Equipment +559 Equipment +560 Equipment +561 Equipment +562 Equipment +563 Equipment +564 Equipment +565 Equipment +566 Equipment +567 Equipment +568 Equipment +569 Equipment +570 Equipment +571 Equipment +572 Equipment +573 Equipment +574 Equipment +575 Equipment +576 Equipment +577 Equipment +578 Equipment +579 Equipment +580 Equipment +581 Equipment +582 Equipment +583 Equipment +584 Equipment +585 Equipment +586 Equipment +587 Equipment +588 Equipment +589 Equipment +590 Equipment +591 Equipment +592 Equipment +593 Equipment +594 Equipment +595 Equipment +596 Equipment +597 Equipment +598 Equipment +599 Equipment +600 Equipment +601 Equipment +602 Equipment +603 Equipment +604 Equipment +605 Equipment +606 Equipment +607 Equipment +608 Equipment +609 Equipment +610 Equipment +611 Equipment +612 Equipment +613 Equipment +614 Equipment +615 Equipment +616 Equipment +617 Equipment +618 Equipment +619 Equipment +620 Equipment +621 Equipment +622 Equipment +623 Equipment +624 Equipment +625 Equipment +626 Equipment +627 Equipment +628 Equipment +629 Equipment +630 Equipment +631 Equipment +632 Equipment +633 Equipment +634 Equipment +635 Equipment +636 Equipment +637 Equipment +638 Equipment +639 Equipment +640 Equipment +641 Equipment +642 Equipment +643 Equipment +644 Equipment +645 Equipment +646 Equipment +647 Equipment +648 Equipment +649 Equipment +650 Equipment +651 Equipment +652 Equipment +653 Equipment +654 Equipment +655 Equipment +656 Equipment +657 Equipment +658 Equipment +659 Equipment +660 Equipment +661 Equipment +662 Equipment +663 Equipment +664 Equipment +665 Equipment +666 Equipment +667 Equipment +668 Equipment +669 Equipment +670 Equipment +671 Equipment +672 Equipment +673 Equipment +674 Equipment +675 Equipment +676 Equipment +677 Equipment +678 Equipment +679 Equipment +680 Equipment +681 Equipment +682 Equipment +683 Equipment +684 Equipment +685 Equipment +686 Equipment +687 Equipment +688 Equipment +689 Equipment +690 Equipment +691 Equipment +692 Equipment +693 Equipment +694 Equipment +695 Equipment +696 Equipment +697 Equipment +698 Equipment +699 Equipment +700 Equipment +701 Equipment +702 Equipment +703 Equipment +704 Equipment +705 Equipment +706 Equipment +707 Equipment +708 Equipment +709 Equipment +710 Equipment +711 Equipment +712 Equipment +713 Equipment +714 Equipment +715 Equipment +716 Equipment +717 Equipment +718 Equipment +719 Equipment +720 Equipment +721 Equipment +722 Equipment +723 Equipment +724 Equipment +725 Equipment +726 Equipment +727 Equipment +728 Equipment +729 Equipment +730 Equipment +731 Equipment +732 Equipment +733 Equipment +734 Equipment +735 Equipment +736 Equipment +737 Equipment +738 Equipment +739 Equipment +740 Equipment +741 Equipment +742 Equipment +743 Equipment +744 Equipment +745 Equipment +746 Equipment +747 Equipment +748 Equipment +749 Equipment +750 Equipment +751 Equipment +752 Equipment +753 Equipment +754 Equipment +755 Equipment +756 Equipment +757 Equipment +758 Equipment +759 Equipment +760 Equipment +761 Equipment +762 Equipment +763 Equipment +764 Equipment +765 Equipment +766 Equipment +767 Equipment +768 Equipment +769 Equipment +770 Equipment +771 Equipment +772 Equipment +773 Equipment +774 Equipment +775 Equipment +776 Equipment +777 Equipment +778 Equipment +779 Equipment +780 Equipment +781 Equipment +782 Equipment +783 Equipment +784 Equipment +785 Equipment +786 Equipment +787 Equipment +788 Equipment +789 Equipment +790 Equipment +791 Equipment +792 Equipment +793 Equipment +794 Equipment +795 Equipment +796 Equipment +797 Equipment +798 Equipment +799 Equipment +800 Equipment +801 Equipment +802 Equipment +803 Equipment +804 Equipment +805 Equipment +806 Equipment +807 Equipment +808 Equipment +809 Equipment +810 Equipment +811 Equipment +812 Equipment +813 Equipment +814 Equipment +815 Equipment +816 Equipment +817 Equipment +818 Equipment +819 Equipment +820 Equipment +821 Equipment +822 Equipment +823 Equipment +824 Equipment +825 Equipment +826 Equipment +827 Equipment +828 Equipment +829 Equipment +830 Equipment +831 Equipment +832 Equipment +833 Equipment +834 Equipment +835 Equipment +836 Equipment +837 Equipment +838 Equipment +839 Equipment +840 Equipment +841 Equipment +842 Equipment +843 Equipment +844 Equipment +845 Equipment +846 Equipment +847 Equipment +848 Equipment +849 Equipment +850 Equipment +851 Equipment +852 Equipment +853 Equipment +854 Equipment +855 Equipment +856 Equipment +857 Equipment +858 Equipment +859 Equipment +860 Equipment +861 Equipment +862 Equipment +863 Equipment +864 Equipment +865 Equipment +866 Equipment +867 Equipment +868 Equipment +869 Equipment +870 Equipment +871 Equipment +872 Equipment +873 Equipment +874 Equipment +875 Equipment +876 Equipment +877 Equipment +878 Equipment +879 Equipment +880 Equipment +881 Equipment +882 Equipment +883 Equipment +884 Equipment +885 Equipment +886 Equipment +887 Equipment +888 Equipment +889 Equipment +890 Equipment +891 Equipment +892 Equipment +893 Equipment +894 Equipment +895 Equipment +896 Equipment +897 Equipment +898 Equipment +899 Equipment +900 Equipment +901 Equipment +902 Equipment +903 Equipment +904 Equipment +905 Equipment +906 Equipment +907 Equipment +908 Equipment +909 Equipment +910 Equipment +911 Equipment +912 Equipment +913 Equipment +914 Equipment +915 Equipment +916 Equipment +917 Equipment +918 Equipment +919 Equipment +920 Equipment +921 Equipment +922 Equipment +923 Equipment +924 Equipment +925 Equipment +926 Equipment +927 Equipment +928 Equipment +929 Equipment +930 Equipment +931 Equipment +932 Equipment +933 Equipment +934 Equipment +935 Equipment +936 Equipment +937 Equipment +938 Equipment +939 Equipment +940 Equipment +941 Equipment +942 Equipment +943 Equipment +944 Equipment +945 Equipment +946 Equipment +947 Equipment +948 Equipment +949 Equipment +950 Equipment +951 Equipment +952 Equipment +953 Equipment +954 Equipment +955 Equipment +956 Equipment +957 Equipment +958 Equipment +959 Equipment +960 Equipment +961 Equipment +962 Equipment +963 Equipment +964 Equipment +965 Equipment +966 Equipment +967 Equipment +968 Equipment +969 Equipment +970 Equipment +971 Equipment +972 Equipment +973 Equipment +974 Equipment +975 Equipment +976 Equipment +977 Equipment +978 Equipment +979 Equipment +980 Equipment +981 Equipment +982 Equipment +983 Equipment +984 Equipment +985 Equipment +986 Equipment +987 Equipment +988 Equipment +989 Equipment +990 Equipment +991 Equipment +992 Equipment +993 Equipment +994 Equipment +995 Equipment +996 Equipment +997 Equipment +998 Equipment +999 Equipment +1000 Equipment +1001 Equipment +1002 Equipment +1003 Equipment +1004 Equipment +1005 Equipment +1006 Equipment +1007 Equipment +1008 Equipment +1009 Equipment +1010 Equipment +1011 Equipment +1012 Equipment +1013 Equipment +1014 Equipment +1015 Equipment +1016 Equipment +1017 Equipment +1018 Equipment +1019 Equipment +1020 Equipment +1021 Equipment +1022 Equipment +1023 Equipment +1024 Equipment +1025 Equipment +1026 Equipment +1027 Equipment +1028 Equipment +1029 Equipment +1030 Equipment +1031 Equipment +1032 Equipment +1033 Equipment +1034 Equipment +1035 Equipment +1036 Equipment +1037 Equipment +1038 Equipment +1039 Equipment +1040 Equipment +1041 Equipment +1042 Equipment +1043 Equipment +1044 Equipment +1045 Equipment +1046 Equipment +1047 Equipment +1048 Equipment +1049 Equipment diff --git a/Data/Config/containers.cfg b/Data/Config/containers.cfg new file mode 100644 index 0000000..4c5d528 --- /dev/null +++ b/Data/Config/containers.cfg @@ -0,0 +1,31 @@ +# All lines are trimmed. Empty lines and lines starting with '#' are ignored +# Container data table +# Format: +# GumpIDRectX RectY RectWidth RectHeightDropSound[ItemID1,ItemID2,...,ItemIDN] + +# Default: +0x3C 44 65 142 94 0x48 + +# Containers +0x9 20 85 104 111 0x42 0x2006,0xECA,0xECB,0xECC,0xECD,0xECE,0xECF,0xED0,0xED1,0xED2 +0x3D 29 34 108 94 0x48 0xE76,0x2115,0x2116 +0x3E 33 36 109 112 0x42 0xE77,0xE7F +0x3F 19 47 163 76 0x4F 0xE7A,0x24D5,0x24D6,0x24D9,0x24DA +0x41 35 38 110 78 0x4F 0x990,0x9AC,0x9B1,0x24D7,0x24D8,0x24DD +0x42 18 105 144 73 0x42 0xE40,0xE41,0x088E,0x088F,0x0E50,0x0E51,0x0E52,0x0E53,0x0E5A,0x0E5B +0x43 16 51 168 73 0x42 0xE7D,0x9AA,0x052D,0x052E +0x44 20 10 150 90 0x42 0xE7E,0x9A9,0xE3C,0xE3D,0xE3E,0xE3F,0x0645,0x0646,0x0E10,0x0E11,0x0E99,0x0E9A,0x1A7F,0x1A80,0x1A81,0x1A84,0x1A85,0x1A89,0x1A8A,0x1A8C,0x1A8D,0x1A8E,0x1A8F,0x1A90,0x1A91,0x1A97,0x1A98,0x1AA3,0x1AEE,0x1AEF,0x1AF0,0x1AF1,0x1AF2,0x1AFC,0x1AFD,0x1AFE +0x48 76 12 64 56 0x42 0xA30,0xA38 +0x49 18 105 144 73 0x42 0xE42,0xE43,0x0481,0x0488,0x05ED,0x05EE +0x4A 18 105 144 73 0x42 0xE7C,0x9AB,0x088C,0x088D,0x0890,0x0891,0x0E54,0x0E55 +0x4B 16 51 168 73 0x42 0xE80,0x9A8 +0x4C 46 74 150 110 0x42 0x3E65,0x3E93,0x3EAE,0x3EB9,0x048F,0x0490,0x0454,0x0455,0x0456,0x0457 +0x4D 76 12 64 56 0x42 0xA97,0xA98,0xA99,0xA9A,0xA9B,0xA9C,0xA9D,0xA9E,0xC14,0xC15,0x3A1,0x3A2,0x1A0F,0x1A10,0x1A11,0x1A12,0x1A13,0x1A14 +0x4E 24 96 74 56 0x42 0xA4C,0xA4D,0xA50,0xA51 +0x4F 24 96 74 56 0x42 0xA4E,0xA4F,0xA52,0xA53 +0x51 16 10 138 84 0x42 0xA2C,0xA34 +0x52 0 0 110 62 0x42 0x1E5E + +# Game Boards +0x91A 0 0 282 210 -1 0xFA6 +0x92E 0 0 282 230 -1 0xE1C,0xFAD diff --git a/Data/Config/entrances.cfg b/Data/Config/entrances.cfg new file mode 100644 index 0000000..4eda1e0 --- /dev/null +++ b/Data/Config/entrances.cfg @@ -0,0 +1,9 @@ +4194 1307 +1647 1233 +4250 3397 +1536 2646 +1381 1756 +2403 636 +2888 666 +6510 3320 +738 1212 diff --git a/Data/Config/go.xml b/Data/Config/go.xml new file mode 100644 index 0000000..f975b84 --- /dev/null +++ b/Data/Config/go.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Data/Config/items.cfg b/Data/Config/items.cfg new file mode 100644 index 0000000..96def1b --- /dev/null +++ b/Data/Config/items.cfg @@ -0,0 +1,143 @@ +Items (Item) + + Bods & Rewards (SmallBOD; LargeBOD; BulkOrderBook; SturdyPickaxe; SturdyShovel; BaseGlovesOfMining; GargoylesPickaxe; ProspectorsTool; PowderOfTemperament; ColoredAnvil; RunicHammer; AncientSmithyHammer; SmallStretchedHideEastDeed; SmallStretchedHideEastAddon; SmallStretchedHideSouthDeed; SmallStretchedHideSouthAddon; MediumStretchedHideEastDeed; MediumStretchedHideEastAddon; MediumStretchedHideSouthDeed; MediumStretchedHideSouthAddon; LightFlowerTapestryEastDeed; LightFlowerTapestryEastAddon; LightFlowerTapestrySouthDeed; LightFlowerTapestrySouthAddon; DarkFlowerTapestryEastDeed; DarkFlowerTapestryEastAddon; DarkFlowerTapestrySouthDeed; DarkFlowerTapestrySouthAddon; BrownBearRugEastDeed; BrownBearRugEastAddon; BrownBearRugSouthDeed; BrownBearRugSouthAddon; PolarBearRugEastDeed; PolarBearRugEastAddon; PolarBearRugSouthDeed; PolarBearRugSouthAddon; ClothingBlessDeed; RunicSewingKit) + + Smithing (SmallSmithBOD; LargeSmithBOD; SturdyPickaxe; SturdyShovel; BaseGlovesOfMining; GargoylesPickaxe; ProspectorsTool; PowderOfTemperament; ColoredAnvil; RunicHammer; AncientSmithyHammer) + + Tailoring (SmallTailorBOD; LargeTailorBOD; SmallStretchedHideEastDeed; SmallStretchedHideEastAddon; SmallStretchedHideSouthDeed; SmallStretchedHideSouthAddon; MediumStretchedHideEastDeed; MediumStretchedHideEastAddon; MediumStretchedHideSouthDeed; MediumStretchedHideSouthAddon; LightFlowerTapestryEastDeed; LightFlowerTapestryEastAddon; LightFlowerTapestrySouthDeed; LightFlowerTapestrySouthAddon; DarkFlowerTapestryEastDeed; DarkFlowerTapestryEastAddon; DarkFlowerTapestrySouthDeed; DarkFlowerTapestrySouthAddon; BrownBearRugEastDeed; BrownBearRugEastAddon; BrownBearRugSouthDeed; BrownBearRugSouthAddon; PolarBearRugEastDeed; PolarBearRugEastAddon; PolarBearRugSouthDeed; PolarBearRugSouthAddon; ClothingBlessDeed; RunicSewingKit) + + Addons (BaseAddon; BaseAddonDeed) + + Constructed (BaseAddon) + + Deeds (BaseAddonDeed) + + Wearables (BaseArmor; BaseClothing; BaseSuit; BaseJewel; BaseWeapon) + + Armor (BaseArmor) + + Artifacts (ArmorOfFortune; GauntletsOfNobility; HelmOfInsight; HolyKnightsBreastplate; InquisitorsResolution; JackalsCollar; LeggingsOfBane; MidnightBracers; OrnateCrownOfTheHarrower; ShadowDancerLeggings; TunicOfFire; VoiceOfTheFallenKing) + + Bone (BoneArms; BoneChest; BoneGloves; BoneLegs; BoneHelm) + + Chain (ChainChest; ChainLegs; ChainCoif) + + Daemon Bone (DaemonArms; DaemonChest; DaemonGloves; DaemonLegs; DaemonHelm) + + Dragon (DragonArms; DragonChest; DragonGloves; DragonLegs; DragonHelm) + + Helmets (Bascinet; CloseHelm; Helmet; NorseHelm; OrcHelm) + + Leather (FemaleLeatherChest; LeatherArms; LeatherBustierArms; LeatherChest; LeatherGloves; LeatherGorget; LeatherLegs; LeatherShorts; LeatherSkirt; LeatherCap) + + Plate (FemalePlateChest; PlateArms; PlateChest; PlateGloves; PlateGorget; PlateLegs; PlateHelm) + + Ranger (RangerArms; RangerChest; RangerGloves; RangerGorget; RangerLegs) + + Ring (RingmailArms; RingmailChest; RingmailGloves; RingmailLegs) + + Studded Leather (FemaleStuddedChest; StuddedArms; StuddedBustierArms; StuddedChest; StuddedGloves; StuddedGorget; StuddedLegs) + + Shields (BaseShield) + + Artifacts (Aegis; ArcaneShield) + + Weapons (BaseWeapon) + + Artifacts (AxeOfTheHeavens; BladeOfInsanity; BladeOfTheRighteous; BoneCrusher; BreathOfTheDead; Frostbringer; LegacyOfTheDreadLord; SerpentsFang; StaffOfTheMagi; TheBeserkersMaul; TheDragonSlayer; TheTaskmaster; TitansHammer; ZyronicClaw) + + Wands (BaseWand) + + Axes (BaseAxe) + + Knives (BaseKnife) + + Bashing (BaseBashing) + + Pole Arms (BasePoleArm) + + Ranged (BaseRanged) + + Spears (BaseSpear) + + Staves (BaseStaff) + + Swords (BaseSword) + + Clothing (BaseClothing) + + Cloaks (BaseCloak) + + Hats (BaseHat) + + Robes (BaseOuterTorso) + + Shirts (BaseShirt) + + Pants (BasePants; BaseOuterLegs) + + Shoes (BaseShoes) + + Misc (BaseWaist; BaseMiddleTorso) + + Jewelry (BaseJewel) + + Artifacts (BraceletOfHealth; OrnamentOfTheMagician; RingOfTheElements; RingOfTheVile) + + Suits (BaseSuit) + + Addons (BaseAddonDeed; BaseAddon) + + Constructed (BaseAddon) + + Smithing (LargeForgeEastAddon; LargeForgeSouthAddon; SmallForgeAddon; AnvilEastAddon; AnvilSouthAddon) + + Tailoring (LoomEastAddon; LoomSouthAddon; SpinningWheelEastAddon; SpinningWheelSouthAddon) + + Cooking (FlourMillEastAddon; FlourMillSouthAddon; StoneOvenEastAddon; StoneOvenSouthAddon) + + Bedding (LargeBedEastAddon; LargeBedSouthAddon; SmallBedSouthAddon; SmallBedEastAddon) + + Training (TrainingDummyEastAddon; TrainingDummySouthAddon; PickpocketDipEastAddon; PickpocketDipSouthAddon; ArcheryButteAddon) + + Spiritual (PentagramAddon; BloodPentagram; AbbatoirAddon) + + Furniture (LargeStoneTableEastAddon; LargeStoneTableSouthAddon; MediumStoneTableEastAddon; MediumStoneTableSouthAddon) + + Misc (BaseAddon) + + Deeds (BaseAddonDeed) + + Smithing (LargeForgeEastDeed; LargeForgeSouthDeed; SmallForgeDeed; AnvilEastDeed; AnvilSouthDeed) + + Tailoring (LoomEastDeed; LoomSouthDeed; SpinningWheelEastDeed; SpinningWheelSouthDeed) + + Cooking (FlourMillEastDeed; FlourMillSouthDeed; StoneOvenEastDeed; StoneOvenSouthDeed) + + Bedding (LargeBedEastDeed; LargeBedSouthDeed; SmallBedEastDeed; SmallBedSouthDeed) + + Training (TrainingDummyEastDeed; TrainingDummySouthDeed; PickpocketDipEastDeed; PickpocketDipSouthDeed; ArcheryButteDeed) + + Spiritual (PentagramDeed; AbbatoirDeed) + + Furniture (LargeStoneTableEastDeed; LargeStoneTableSouthDeed; MediumStoneTableEastDeed; MediumStoneTableSouthDeed) + + Misc (BaseAddonDeed) + + Books (BaseBook) + + Resources (BaseIngot; BaseOre; BaseGranite; BaseScales; BaseReagent; BaseHides; BaseLeather; Log; Board; BaseClothMaterial; Bone; UncutCloth; BoltOfCloth; Cloth; Wool; Flax; Cotton; BagOfAllReagents; BagOfNecroReagents; BagOfReagents; AlchemyBag; BagOfIngots; ScribeBag; SmithBag; TailorBag; Fish; BigFish; BaseMagicFish; Arrow; Bolt; Feather; Shaft; AlchemyStone; IngotStone; RegStone; ScribeStone; SmithStone; TailorStone; Sand) + + Ingots (BaseIngot) + + Ore (BaseOre) + + Granite (BaseGranite) + + Scales (BaseScales) + + Reagents (BaseReagent) + + Standard (BlackPearl; Bloodmoss; Garlic; Ginseng; MandrakeRoot; Nightshade; SpidersSilk; SulfurousAsh) + + Necromancy (BatWing; DaemonBlood; GraveDust; NoxCrystal; PigIron) + + Wood (Log; Board) + + Fish (Fish; BigFish; BaseMagicFish) + + Tailoring (BaseHides; BaseLeather; BaseClothMaterial; Bone; BoltOfCloth; Cloth; UncutCloth; Wool; Flax; Cotton) + + Hides (BaseHides) + + Leather (BaseLeather) + + Cloth (BoltOfCloth; Cloth; UncutCloth) + + Materials (BaseClothMaterial; Wool; Flax; Cotton) + + Fletching (Arrow; Bolt; Feather; Shaft) + + Bags (BagOfAllReagents; BagOfNecroReagents; BagOfReagents; AlchemyBag; BagOfIngots; ScribeBag; SmithBag; TailorBag) + + Stones (AlchemyStone; IngotStone; RegStone; ScribeStone; SmithStone; TailorStone) + + Entertainment (BaseInstrument; BaseBoard; Dices) + + Instruments (BaseInstrument) + + Games (BaseBoard; Dices) + + Construction (BaseDoor; BaseFloor; Container; DecorativeShield1; DecorativeShield2; DecorativeShield3; DecorativeShield4; DecorativeShield5; DecorativeShield6; DecorativeShield7; DecorativeShield8; DecorativeShield9; DecorativeShield10; DecorativeShield11; DecorativeShieldSword1North; DecorativeShieldSword1West; DecorativeShieldSword2North; DecorativeShieldSword2West; DecorativeBowWest; DecorativeBowNorth; DecorativeAxeNorth; DecorativeAxeWest; DecorativeSwordNorth; DecorativeSwordWest; DecorativeDAxeNorth; DecorativeDAxeWest; LargePainting; WomanPortrait1; WomanPortrait2; ManPortrait1; ManPortrait2; LadyPortrait1; LadyPortrait2; Tapestry1N; Tapestry2N; Tapestry2W; Tapestry3N; Tapestry3W; Tapestry4N; Tapestry4W; Tapestry5N; Tapestry5W; Tapestry6N; Tapestry6W; RuinedFallenChairA; RuinedArmoire; RuinedBookcase; RuinedBooks; CoveredChair; RuinedFallenChairB; RuinedChair; RuinedClock; RuinedDrawers; RuinedPainting; WoodDebris; Rope; IronWire; SilverWire; GoldWire; CopperWire; Whip; PaintsAndBrush; WoodenBench; FancyWoodenChairCushion; WoodenChairCushion; WoodenChair; BambooChair; Stool; FootStool; Throne; WoodenThrone; LargeTable; Nightstand; YewWoodTable; WritingTable; Easle; TallMusicStand; ShortMusicStand) + + Decoration (DecorativeShield1; DecorativeShield2; DecorativeShield3; DecorativeShield4; DecorativeShield5; DecorativeShield6; DecorativeShield7; DecorativeShield8; DecorativeShield9; DecorativeShield10; DecorativeShield11; DecorativeShieldSword1North; DecorativeShieldSword1West; DecorativeShieldSword2North; DecorativeShieldSword2West; DecorativeBowWest; DecorativeBowNorth; DecorativeAxeNorth; DecorativeAxeWest; DecorativeSwordNorth; DecorativeSwordWest; DecorativeDAxeNorth; DecorativeDAxeWest; LargePainting; WomanPortrait1; WomanPortrait2; ManPortrait1; ManPortrait2; LadyPortrait1; LadyPortrait2; Tapestry1N; Tapestry2N; Tapestry2W; Tapestry3N; Tapestry3W; Tapestry4N; Tapestry4W; Tapestry5N; Tapestry5W; Tapestry6N; Tapestry6W) + + Shields (DecorativeShield1; DecorativeShield2; DecorativeShield3; DecorativeShield4; DecorativeShield5; DecorativeShield6; DecorativeShield7; DecorativeShield8; DecorativeShield9; DecorativeShield10; DecorativeShield11; DecorativeShieldSword1North; DecorativeShieldSword1West; DecorativeShieldSword2North; DecorativeShieldSword2West) + + Weapons (DecorativeBowWest; DecorativeBowNorth; DecorativeAxeNorth; DecorativeAxeWest; DecorativeSwordNorth; DecorativeSwordWest; DecorativeDAxeNorth; DecorativeDAxeWest) + + Paintings & Portraits (LargePainting; WomanPortrait1; WomanPortrait2; ManPortrait1; ManPortrait2; LadyPortrait1; LadyPortrait2) + + Tapestries (Tapestry1N; Tapestry2N; Tapestry2W; Tapestry3N; Tapestry3W; Tapestry4N; Tapestry4W; Tapestry5N; Tapestry5W; Tapestry6N; Tapestry6W) + + Broken (RuinedFallenChairA; RuinedArmoire; RuinedBookcase; RuinedBooks; CoveredChair; RuinedFallenChairB; RuinedChair; RuinedClock; RuinedDrawers; RuinedPainting; WoodDebris) + + Rares (Rope; IronWire; SilverWire; GoldWire; CopperWire; Whip; PaintsAndBrush) + + Doors (BaseDoor) + + Floors (BaseFloor) + + Containers (Container) + + Furniture (WoodenBench; FancyWoodenChairCushion; WoodenChairCushion; WoodenChair; BambooChair; Stool; FootStool; Throne; WoodenThrone; LargeTable; Nightstand; YewWoodTable; WritingTable; Easle; TallMusicStand; ShortMusicStand) + + Chairs (WoodenBench; FancyWoodenChairCushion; WoodenChairCushion; WoodenChair; BambooChair; Stool; FootStool; Throne; WoodenThrone) + + Tables (LargeTable; Nightstand; YewWoodTable; WritingTable) + + Other (Easle; TallMusicStand; ShortMusicStand) + + Lights (BaseLight) + + Food & Drink (Food; CookableFood; BaseBeverage; Glass) + + Ready to eat (Food) + + Needs cooking (CookableFood) + + Beverages (BaseBeverage; Glass) + + Cartography (MapItem) + + Hair (Hair; Beard) + + Stonecraft (Vase; LargeVase; StatueSouth; StatueNorth; StatueEast; StatuePegasus; StoneChair) + + Glassblowing (SmallFlask; MediumFlask; LargeFlask; CurvedFlask; LongFlask; SpinningHourglass; GreenBottle; RedBottle; SmallBrownBottle; SmallVioletBottle; TinyYellowBottle; SmallBlueFlask; SmallYellowFlask; SmallRedFlask; SmallEmptyFlask; YellowBeaker; RedBeaker; BlueBeaker; GreenBeaker; EmptyCurvedFlaskW; RedCurvedFlask; LtBlueCurvedFlask; EmptyCurvedFlaskE; BlueCurvedFlask; GreenCurvedFlask; RedRibbedFlask; VioletRibbedFlask; EmptyRibbedFlask; LargeYellowFlask; LargeVioletFlask; LargeEmptyFlask; AniRedRibbedFlask; AniLargeVioletFlask; AniSmallBlueFlask; SmallBlueBottle; SmallGreenBottle; EmptyVIalsWRack; FullVialsWRack; EmptyJar; FullJar; HalfEmptyJar; VioletStemmedBottle; EmptyJars3; EmptyJars4; FullJars3; FullJars4; EmptyJars2; FullJars2; HalfEmptyJars2; EmptyVial; HourglassAni; Hourglass; TinyRedBottle; SmallGreenBottle2; Glass) + + Pots & Plants (SmallEmptyPot; LargeEmptyPot; PottedCactus; PottedCactus1; PottedCactus2; PottedCactus3; PottedCactus4; PottedCactus5; PottedPlant; PottedPlant1; PottedPlant2; PottedTree; PottedTree1) + + Components (BarrelLid; BarrelStaves; BarrelHoops; BarrelTap; Gears; Springs; Hinge; Axle; AxleGears; SextantParts; ClockParts; ClockFrame; Clock; ClockRight; ClockLeft) + + Tools (BaseTool; BaseHarvestTool) + + Crafting (BaseTool) + + Harvesting (BaseHarvestTool) + + Traps (BaseTrap) + + Gems (Amber; Amethyst; Citrine; Diamond; Emerald; Ruby; Sapphire; StarSapphire; Tourmaline) + + Boats (BaseBoat; BaseBoatDeed) + + Constructed (BaseBoat) + + Deeds (BaseBoatDeed) + + House Deeds (HouseDeed; HousePlacementTool) + + Camps (BaseCamp) + + Magical (Spellbook; SpellScroll; BlankScroll; BasePotion; EtherealMount) + + Scrolls (SpellScroll; BlankScroll) + + Necromancy (AnimateDeadScroll; BloodOathScroll; CorpseSkinScroll; CurseWeaponScroll; EvilOmenScroll; HorrificBeastScroll; LichFormScroll; MindRotScroll; PainSpikeScroll; PoisonStrikeScroll; StrangleScroll; SummonFamiliarScroll; VampiricEmbraceScroll; VengefulSpiritScroll; WitherScroll; WraithFormScroll) + + Standard (SpellScroll) + + Circle #1 (ClumsyScroll; CreateFoodScroll; FeeblemindScroll; HealScroll; MagicArrowScroll; NightSightScroll; ReactiveArmorScroll; WeakenScroll) + + Circle #2 (AgilityScroll; CunningScroll; CureScroll; HarmScroll; MagicTrapScroll; MagicUnTrapScroll; ProtectionScroll; StrengthScroll) + + Circle #3 (BlessScroll; FireballScroll; MagicLockScroll; PoisonScroll; TelekinisisScroll; TeleportScroll; UnlockScroll; WallOfStoneScroll) + + Circle #4 (ArchCureScroll; ArchProtectionScroll; CurseScroll; FireFieldScroll; GreaterHealScroll; LightningScroll; ManaDrainScroll; RecallScroll) + + Circle #5 (BladeSpiritsScroll; DispelFieldScroll; IncognitoScroll; MagicReflectScroll; MindBlastScroll; ParalyzeScroll; PoisonFieldScroll; SummonCreatureScroll) + + Circle #6 (DispelScroll; EnergyBoltScroll; ExplosionScroll; InvisibilityScroll; MarkScroll; MassCurseScroll; ParalyzeFieldScroll; RevealScroll) + + Circle #7 (ChainLightningScroll; EnergyFieldScroll; FlamestrikeScroll; GateTravelScroll; ManaVampireScroll; MassDispelScroll; MeteorSwarmScroll; PolymorphScroll) + + Circle #8 (EarthquakeScroll; EnergyVortexScroll; ResurrectionScroll; SummonAirElementalScroll; SummonDaemonScroll; SummonEarthElementalScroll; SummonFireElementalScroll; SummonWaterElementalScroll) + + Potions (BasePotion) + + Agility (BaseAgilityPotion) + + Cure (BaseCurePotion) + + Explosion (BaseExplosionPotion) + + Heal (BaseHealPotion) + + Poison (BasePoisonPotion) + + Refresh (BaseRefreshPotion) + + Strength (BaseStrengthPotion) + + Ethereal Mounts (EtherealMount) + + Uncategorized (Item) \ No newline at end of file diff --git a/Data/Config/mobiles.cfg b/Data/Config/mobiles.cfg new file mode 100644 index 0000000..06ec32c --- /dev/null +++ b/Data/Config/mobiles.cfg @@ -0,0 +1,58 @@ +Mobiles (Mobile) + + Healers (BaseHealer) + + Champions (BaseChampion; Harrower; Silvani; HarrowerTentacles) + + Guards (BaseGuard; BaseShieldGuard) + + Escortables (BaseEscortable) + + Vendors (BaseVendor) + + Guildmasters (BaseGuildmaster) + + Dummies (DummyMace; DummyFence; DummySword; DummyNox; DummyStun; DummySuper; DummyHealer; DummyAssassin; DummyTheif) + + Creatures (BaseCreature) + + Animals (Gorilla; Walrus; Alligator; Llama; PackLlama; PackHorse; BullFrog; GiantToad; Hind; GreatHart; DireWolf; GreyWolf; TimberWolf; WhiteWolf; HellHound; Dog; GrizzlyBear; PolarBear; BlackBear; BrownBear; Bull; Cow; Bird; Eagle; Chicken; Boar; Pig; Rabbit; JackRabbit; Rat; SewerRat; GiantRat; Goat; MountainGoat; Sheep; Panther; PredatorHellCat; HellCat; SnowLeopard; Cougar; Cat; BaseMount) + + Mounts (BaseMount) + + War Horses (BaseWarHorse) + + Birds & Fowl (Bird; Eagle; Chicken) + + Bovines (Bull; Cow) + + Bruins (GrizzlyBear; PolarBear; BlackBear; BrownBear) + + Canines (DireWolf; GreyWolf; TimberWolf; WhiteWolf; HellHound; Dog) + + Deer (Hind; GreatHart) + + Felines (Panther; PredatorHellCat; HellCat; SnowLeopard; Cougar; Cat) + + Frogs & Toads (BullFrog; GiantToad) + + Lizards (Alligator) + + Llamas & Pack Animals (Llama; PackLlama; PackHorse) + + Rodents (Rabbit; JackRabbit; Rat; SewerRat; GiantRat) + + Porcines (Boar; Pig) + + Ruminants (Goat; MountainGoat; Sheep) + + Uncategorized (Gorilla; Walrus) + + Ants (RedSolenWorker; RedSolenWarrior; RedSolenQueen; RedSolenInfiltratorQueen; RedSolenInfiltratorWarrior; BlackSolenWorker; BlackSolenWarrior; BlackSolenQueen; BlackSolenInfiltratorQueen; BlackSolenInfiltratorWarrior) + + Red (RedSolenWorker; RedSolenWarrior; RedSolenQueen; RedSolenInfiltratorQueen; RedSolenInfiltratorWarrior) + + Black (BlackSolenWorker; BlackSolenWarrior; BlackSolenQueen; BlackSolenInfiltratorQueen; BlackSolenInfiltratorWarrior) + + Elementals (DullCopperElemental; ShadowIronElemental; CopperElemental; BronzeElemental; GoldenElemental; AgapiteElemental; VeriteElemental; ValoriteElemental; AirElemental; BloodElemental; FireElemental; IceElemental; WaterElemental; PoisonElemental; ToxicElemental; EarthElemental; SnowElemental) + + Ore Elementals (DullCopperElemental; ShadowIronElemental; CopperElemental; BronzeElemental; GoldenElemental; AgapiteElemental; VeriteElemental; ValoriteElemental) + + Marine (Dolphin; SeaSerpent; DeepSeaSerpent) + + Good (Pixie; Wisp; EtherealWarrior; Centaur) + + Evil (BaseCreature) + + Age of Shadows (FleshGolem; Gibberling; GoreFiend; Ravager; SkitteringHopper; Treefellow; VampireBat; WailingBanshee; AbysmalHorror; BoneDemon; CrystalElemental; DarknightCreeper; DemonKnight; Devourer; FleshRenderer; Impaler; MoundOfMaggots; PatchworkSkeleton; ShadowKnight; WandererOfTheVoid; ChaosDaemon; HordeMinion) + + Daemons (IceFiend; Balron; Daemon) + + Dragons & Wyrms (Dragon; WhiteWyrm; SerpentineDragon; AncientWyrm; ShadowWyrm; SkeletalDragon; Drake; Wyvern) + + Gargoyles (Gargoyle; FireGargoyle; StoneGargoyle) + + Harpies (Harpy; StoneHarpy) + + Humans (EvilMage; EvilMageLord; Betrayer; Brigand; Executioner; Guardian; KhaldunSummoner; KhaldunZealot) + + Lizards (LavaLizard; Lizardman) + + Mongbats, Imps, & Headless Ones (Mongbat; StrongMongbat; Imp; HeadlessOne) + + Ogres, Ettins, Trolls, Cyclopses, & Titans (Titan; Cyclops; Ettin; FrostTroll; Ogre; Troll; ArcticOgreLord; OgreLord) + + Ophidians (OphidianMage; OphidianArchmage; OphidianMatriarch; OphidianWarrior; OphidianKnight) + + Orcs (OrcishMage; Orc; OrcishLord; OrcBomber; OrcCaptain; OrcishLord; OrcBrute) + + Plague Beasts, Bog Things, & Slimes (Jwilson; FrostOoze; Slime; PlagueSpawn; PlagueBeast; BogThing; Bogling) + + Plants (Corpser; Quagmire; WhippingVine; SwampTentacle; Reaper) + + Ratmen (Ratman; RatmanArcher; RatmanMage) + + Serpents (IceSerpent; IceSnake; LavaSerpent; LavaSnake; GiantSerpent; SilverSerpent; Snake) + + Spiders (DreadSpider; FrostSpider; GiantSpider) + + Terathans (TerathanMatriarch; TerathanAvenger; TerathanDrone; TerathanWarrior) + + Undead (AncientLich; Bogle; BoneMagi; Lich; LichLord; Shade; SkeletalMage; Spectre; Wraith; BoneKnight; SkeletalKnight; Ghoul; RottingCorpse; Skeleton; Zombie; Mummy) + + Ghosts (Bogle; Shade; Spectre; Wraith; Ghoul) + + Skeletons (BoneMagi; SkeletalMage; BoneKnight; SkeletalKnight; Skeleton) + + Walking Dead (RottingCorpse; Zombie; Mummy) + + Liches (AncientLich; Lich; LichLord) + + Vortexes & Blade Spirits (EnergyVortex; SandVortex; BladeSpirits) + + Uncategorized (BaseCreature) + + Uncategorized (Mobile) \ No newline at end of file diff --git a/Data/Config/names.xml b/Data/Config/names.xml new file mode 100644 index 0000000..0dfb5f7 --- /dev/null +++ b/Data/Config/names.xml @@ -0,0 +1,1208 @@ + + + + Britain, Jhelom, Skara Brae, Trinsic, Paws, Yew, Minoc, Wind, Cove, Buccaneer's Den, Magincia, Moonglow + + + Dungeon Destard, Dungeon Covetous, the Stygian Abyss, Dungeon Hythloth, Dungeon Deceit, Dungeon Shame, Dungeon Despise, Spiritwood, Dungeon Wrong + + + almighty, amazing, ancestral, astonishing, astounding, divine, enchanted, excellent, exotic, extraordinary, fabled, fabulous, fantastic, + forgotten, glorious, grand, great, incredible, legendary, lost, magic, magical, magnificent, marvelous, mighty, mysterious, mystical, + mythical, ornate, phenomenal, rare, sacred, supreme, ultimate, unspeakable, unusual, wonderful, wondrous + + + bascinet, bone arms, bone gloves, bone helm, bone leggings, bone tunic, boots, bracelet, large shield, buckler, chainmail coif, + chainmail leggings, chainmail tunic, chaos shield, cloak, close helm, drums, earrings, harp, hat, heater shield, helmet, leather cap, + leather gloves, leather gorget, leather leggings, leather shorts, leather skirt, leather sleeves, leather tunic, lute, + metal kite shield, metal shield, necklace, norse helm, order shield, platemail arms, platemail gloves, platemail gorget, + platemail helm, platemail leggings, platemail tunic, ring, ringmail arms, ringmail gloves, ringmail leggings, ringmail tunic, + robe, sandals, shoes, spellbook, studded gloves, studded gorget, studded leggings, studded sleeves, studded tunic, tambourine, + wand of clumsiness, wand of feeble minds, wand of fireball, wand of greater healing, wand of harming, wand of healing, + wand of magic arrows, wand of mana draining, wand of weakness, wooden kite shield, wooden shield + + + adventurer, bandit, barbarian, bard, baron, baroness, cavalier, cleric, conjurer, defender, diviner, enchanter, enchantress, + explorer, fighter, gladiator, heretic, hunter, illusionist, invoker, king, knight, lady, lord, mage, magician, mercenary, + minstrel, monk, mystic, necromancer, outlaw, paladin, priest, priestess, prince, princess, prophet, queen, ranger, rogue, + sage, scout, seeker, seer, shaman, slayer, sorcerer, sorceress, summoner, templar, thief, traveler, warlock, warrior, witch, wizard + + + An adventurer, A bandit, A barbarian, A bard, A baron, A baroness, A cavalier, A cleric, A conjurer, A defender, A diviner, An enchanter, + A enchantress, An explorer, A fighter, A gladiator, A heretic, A hunter, An illusionist, An invoker, A king, A knight, A lady, A lord, + A mage, A magician, A mercenary, A minstrel, A monk, A mystic, A necromancer, An outlaw, A paladin, A priest, A priestess, A prince, + A princess, A prophet, A queen, A ranger, A rogue, A sage, A scout, A seeker, A seer, A shaman, A slayer, A sorcerer, A sorceress, + A summoner, A templar, A thief, A traveler, A warlock, A warrior, A witch, A wizard + + + Emperor, Empress, King, Queen, Prince, Princess, Duke, Duchess, Marquess, Marchioness, Earl, Count, Countess, Viscount, Viscountess, Baron, + Baroness, Baronet, Baronetess, Knight, Marquis, Marquise, Chevalier, Tsar, Monarch, Archbishop, Lady, Lord, Chancellor, Dame + + + Empress, Princess, Duchess, Marchioness, Countess, Viscountess, Baroness, Baronetess, Knight, Marquise, Lady, Dame + + + Emperor, Prince, Duke, Marquess, Earl, Count, Viscount, Baron, Baronet, Knight, Marquis, Chevalier, Tsar, Monarch, Archbishop, Lord, Chancellor + + + lizardmen, ratmen, orcs, brigands, savages + + + 500, 600, 700, 800, 900, 1,000, 1,100, 1,200, 1,300, 1,400, 1,500, 1,600, 1,700, 1,800, 1,900, 2,000, 2,100, 2,200, 2,300, + 2,400, 2,500, 2,600, 2,700, 2,800, 2,900, 3,000, 3,100, 3,200, 3,300, 3,400, 3,500, 3,600, 3,700, 3,800, 3,900, 4,000, + 4,100, 4,200, 4,300, 4,400, 4,500, 4,600, 4,700, 4,800, 4,900, 5,000, 5,100, 5,200, 5,300, 5,400, 5,500, 5,600, 5,700, + 5,800, 5,900, 6,000, 6,100, 6,200, 6,300, 6,400, 6,500, 6,600, 6,700, 6,800, 6,900, 7,000, 7,100, 7,200, 7,300, 7,400, + 7,500, 7,600, 7,700, 7,800, 7,900, 8,000, 8,100, 8,200, 8,300, 8,400, 8,500, 8,600, 8,700, 8,800, 8,900, 9,000, 9,100, + 9,200, 9,300, 9,400, 9,500, 9,600, 9,700, 9,800, 9,900, 10,000 + + + graveyard, cemetery, maze, brigand camp, orc fort, ratman fort, temple, altar, shrine, castle, ruins, island, cave + + + alchemist, bartender, blacksmith, butcher, farmer, guard, fisherman, iron worker, armorer, weaponsmith, bowyer, miner, guildmaster, healer, + herbalist, innkeeper, jeweler, mage, provisioner, sage, scribe, shipwright, stable master, tailor, tinker, waiter, weaver + + + a blacksmith shoppe, a jewelry shoppe, a provisioner shoppe, a leather shoppe, a music shoppe, an alchemy shoppe, + a potion shoppe, a book shoppe, a magic shoppe, an herb shoppe, a garden shoppe, a tailor shoppe, an inn, a tavern, + a butcher shoppe, a shipbuilding shoppe, a scribe shoppe, a guild, a cult, a church, a stable, a library + + + amber, amethyst, citrine, diamond, emerald, ruby, sapphire, star sapphire, tourmaline + + + Adventurer, Bandit, Barbarian, Bard, Cleric, Conjurer, Defender, Diviner, Druid, Enchanter, Explorer, + Fighter, Gladiator, Heretic, Hunter, Illusionist, Invoker, Knight, Mage, Magician, Mercenary, + Minstrel, Monk, Mystic, Necromancer, Outlaw, Paladin, Priest, Prophet, Ranger, Rogue, Sage, + Scout, Seeker, Seer, Shaman, Slayer, Sorcerer, Summoner, Templar, Thief, Traveler, Warlock, + Warrior, Wizard + + + from that bet, for that artifact, from that card game, from that dart game, for that horse, for that potion, + for that weapon, for that armor, for releasing him, for finding that item, for solving that riddle, + for digging up that treasure, for that gem, for that wand, for that staff, for fixing that thing, + for killing that monster, for stealing that thing, for hiding them in my house, for that map + + + sleeping, drinking, eating, distracted, searching, lost, gone, exploring, drunk + + + Do you know, Where did you meet, Where did you see, When did you meet, When did you see, + When have you last heard from, When did you kill, Where did you kill, When will I meet, When will we meet + + + + a wren, a swallow, a warbler, a nuthatch, a chickadee, a thrush, + a nightingale, a starling, a skylark, a finch, a crossbill, a sparrow, a towhee, + a woodpecker, a kingfisher, a tern, a plover, a lapwing, a hawk, a cuckoo, a swift + + + Abamon, Abantavian, Abantiadentius, Abantiades, Abantonicus, Abaseb, Abaseru, Abasok, Abason, + Abasoteph, Abasu, Abasuh, Aber, Abil, Abok, Abubak, Abubaru, Acaeus, Acastades, Achactus, Aco, + Acrisabus, Acrises, Actercer, Actigius, Aegidian, Agymafra, Agymakari, Agymok, Agymu, Akemheb, + Alalin, Alca, Alcic, Alcidannus, Alcidicus, Alcidorin, Amakari, Amalion, Amalrell, Amel, + Amenoter, Amenotit, Amenotugra, Ameti, Amiptah, Amocer, Amulannus, Anah, Anamun, Anankm, + Angatian, Anguis, Anhankm, Anhenoteph, Anhiptah, Anhuh, Anon, Apamun, Apankm, Apophis, + Apuma, Arctas, Asa, Asemu, Aseti, Atabulespius, Atak, Ateb, Atemu, Ater, Aterit, Atophis, + Attalaime, Atteas, Attides, Auferi, Aufidervius, Aufidic, Aufido, Auraeus, Aureleri, + Aurelonicus, Aurian, Aurigius, Aurura, Badrak, Badreri, Badres, Badrif, Badrim, Bakari, + Bakophis, Balavian, Balendigius, Balendin, Balendorin, Balimer, Ballald, Balle, Barale, + Barrius, Baruti, Behdukuh, Belulio, Borachus, Boridus, Borimus, Cahar, Callana, Caller, + Callic, Camun, Cemheb, Cenwaime, Cenwavius, Cenwiades, Chanthes, Chibakar, Chibanthes, + Chibun, Chigarmer, Chigif, Chigim, Chymah, Cladelis, Cladic, Codrian, Creferi, Cron, + Cruh, Ctesphamun, Ctesphil, Ctesphymah, Damelius, Decualio, Decualorin, Decuis, Dexeas, + Edralin, Edrel, Edrimus, Elaeus, Elalvi, Emilaudius, Emilelis, Emilimus, Enares, Epantides, + Eperius, Epeus, Eredides, Eris, Fadankm, Fadoteph, Fadun, Fenes, Fenukarmer, Fenukaruti, + Fenukeem, Fenukiptah, Flavacus, Flavian, Foteph, Gonzelio, Gratalus, Gratorin, Grigius, + Gromalle, Gromic, Guilell, Haccus, Hactus, Hanafra, Hanarmer, Hanaza, Haneferi, Hanu, Hemu, + Heril, Heru, Hespius, Hocer, Horares, Horatas, Horatius, Horemhah, Horemhakari, Horemhoth, + Horemhuris, Horidos, Horis, Hoth, Hugra, Icastus, Ifomel, Ijulio, Imalus, Imeem, Inachalric, + Inihon, Irantides, Issa, Issaldun, Issaruti, Issiptah, Kafra, Karantha, Karanthafra, Karanthamun, + Karanthes, Kemheb, Kha, Khafra, Khaldah, Khaldif, Khaldil, Khaldun, Khaldymah, Khasi, Khaza, + Khemheb, Klaudelus, Klides, Klorus, Kostelus, Kostias, Kostonicus, Kutanthes, Kutenoteph, Kuti, + Kutuma, Larago, Laraudius, Laron, Laudalin, Lavonatius, Lavonedides, Lavonercer, Leonulio, Lestus, + Libides, Libon, Lorilius, Lorin, Lormeades, Lormio, Mari, Marinespius, Marinestus, Marinian, + Menamsa, Meneem, Menemheb, Menes, Menil, Menothmes, Mercocer, Metaeon, Metelis, Metilius, + Metonicus, Mezentian, Mezepius, Modestaccus, Modulf, Modus, Nactus, Nada, Nadar, Nadek, Nadenes, + Naeon, Nalin, Nankm, Nannus, Narma, Narmerit, Narmibale, Narmim, Narmiptah, Neros, Nibale, + Obarioin, Octaicus, Odavian, Ofeti, Ohaza, Onigaru, Onurak, Onurarmer, Onureru, Onuron, + Onurukuh, Onymah, Orastes, Osahebak, Owetes, Pallanter, Parnassades, Peripheter, Piades, + Prosparis, Prosper, Publelio, Rakllafra, Rakllemu, Rakllif, Ramsa, Ramseti, Ramsim, Ramsophis, + Ramsuh, Ramsukuh, Ramsuti, Reri, Resphon, Rigalion, Riner, Rinercer, Rorus, Roth, Rufercer, + Rufiades, Rulk, Sebak, Sebeti, Sebit, Sebukuh, Septestus, Septimigius, Septimonicus, Septuis, + Serapis, Seraru, Sereti, Seruh, Servacus, Servius, Servos, Servulf, Setankmeem, Setankmeferi, + Setankmek, Setankmeri, Siptakari, Siptamon, Siptamsa, Siptankm, Soractalin, Soracteas, Soralus, + Sorantides, Surepius, Surura, Tankm, Tasi, Tefiptah, Thekri, Theru, Thespanus, Thespavius, + Thespelus, Thespin, Thi, Thorerius, Thorostas, Thugra, Thutmaruti, Thutmi, Thutymah, Tiberanus, + Tiberercer, Tiberespius, Tibo, Toteph, Trocias, Tuthadru, Valannulio, Vavius, Victald, Victorocer, + Vileralion, Volmanides, Volmarras, Zetigius, Zura, Kaltivel, Anshu, Maliel, Baratoz, Almonjin, + Kiaransalee, Mellifleur, Velsharoon, Vlaakith, Erandis, Acererak, Arklem, + Greeth, Asberdies, Aumvor, Azalin, Boretti, Dragotha, Dregoth, Harthoon, + Larloch, Skall, Szass, Thessalar, Sammaster, Tordynnar, Rhaevaern, + Baelnorn, Jymahna, Kartak, Priamon, Rakesk, Rhangaun, Sapphiraktar, + Shangalar, Zhengyi, Zrie, Prakis, Cassana, Balpheron, Deimos, Kangaxx, + Klaxx, Lyran, Karlat, Heurodis, Vix'thra, Rammaq, Vongoethe, Xykon + + + Abhothoth, Adreh, Anastulm, An-Ghudde, An-Kynach, Anoniak, Antatath, Arth-Voonarth, Atathlach, Ath-Athoth, + Ath-Bhatan, Ath-Thantep, Ath-Zaothoa, Bhuulmitha, Bithugha, Cthadratha, Cthanitha, Cthantanil, Ctha-Sheemog, + Cthatulzscha, Cthoa-Noshu, Cthoa-Nyogthu, Cthoggurath, Ctho-Kubo, Cthu-Daga, Cthuddathu, Cykr-Shole, + Cykr-Shoorlei, Dagua, Datha, De-Uddep, De-Yigoth, Dhothogga, Dlorrhothu, Dlyeha, Dlyehadrakh, Fthategua, + Gha-Atath, Gha-Daga, Ghaddatha, Gha-Gluuhgua, Gha-Nartha, Gha-Shanoth, Gheemoga, Ghoa-Azath, Ghoa-Llorrha, + Ghotha, Ghuulmithoa, Gla-Kade, Gnyarl-Voormith, Gnyogthotha, Hantega, Ha-Vhoorlyu, Kadagua, Kade, + Kad-Shyopha, Kad-Ubboth, Kad-Yatlath, Keha, Ktakade, Ktegotha, Kteg-Voormog, Ktulzschu, Kturanith, + Ktyngorakh, Kub-Dloigua, Kub-Dlyeho, Kubyakha, Kyn-Atan, Kynathoa, Kyn-Bhuulmog, Kyn-Cthotha, Kynosha, + Kytha, Kyth-Nile, Kythoggua, Kythothu, Kyth-Uhoth, Lloigua, Llorrhothoa, Lluuhgua, Mellei, Mell-Melle, + Melluuhga, Mithotha, Mithubo, Mogothoa, Nach-Kubo, Nachoa, Nartho, Nathee, Nathogga, Nath-Yithath, + Nil-Dloiga, Nil-Yithath, Nophk-Glathee, Nosh-Cykran, Nosh-Ulzschath, Noshyophu, Noth-Natha, Nyogthatyng, + Olep, Ophkekub, Oth-Cthyopha, Rho-Athorl, Rhothee, Rla-Atath, Rlathoa, Satha, Sathloiga, Sath-Nyogtha, + Sathothoa, Sath-Yngath, Sha-Cthoorlei, Shaddatha, Shaggotha, Shaggua, Sha-Ghugha, Shastep, Sha-Yekub, + Sha-Yithath, Shoa-Cthantep, Sho-Fthotha, Sholuuhgua, Sho-Tanarth, Shubitha, Shubithu, Shu-Cykrath, + Shuddagua, Shughotha, Sotha, Soth-Cykreth, Sotheemog, Sothoggua, Soth-Shogga, Soth-Sotha, Tanacho, + Tan-Melle, Tha-Yigosh, Thonotha, Tsath-Ghoggua, Tsathonath, Tulzsch-Kynigg, Tyng-Urak, Ub-Ghatan, + Ub-Ydheeth, Uddell, Ughath, Ulm-Kubo, Urachan, Uranoth, Ur-Antath, Urazath, Vha-Shasteg, Vhle-Nthlorrha, + Vhlyu-Mogua, Vhogthatan, Vhotynga, Vho-Yekub, Vhubyakha, Vhulha, Voonothu, Voormitha, Voorm-Rhotho, + Yastub, Yath-Cthudde, Yathoanoth, Yazathoth, Ydheell, Yegonith, Yegor, Yekub, Yekulzschath, Yekurath, + Yeth-Nthloigua, Yeth-Yommoth, Yhan, Yiggubboth, Yigguddeh, Yigophkell, Yigotell, Yig-Voormell, + Yil-Tanach, Yil-Thugha, Yithagoth, Yith-Hadde, Yith-Kade, Yith-Llathoa, Ykra-Cthadde, Ykrakheeh, + Ynakhub, Ynarlath, Ynathoan, Ynga-Nthluuhga, Ynga-Ubboph, Yosh-Thulhoa, Yoth-Yiggub, Yoth-Yigoth, + Ytha-Yiggub, Ythoth, Yuddeh, Yuhoth, Yurath, Zaoth-Xotha, Zathu, Zath-Urak, Zotha, Zothu, Zothughoa + + + Ansiraal, Aurlem, Betra, Draxsom, Fodus, Forbrak, Forlem, Horffe, Inforlem, Invis, + Laplem, Naxator, Quaeven, Sarpling, Silamo, Tereg, Volesh, Vraal, WisSur, + Anzu, Betylem, Corpxen, Deswis, Exvas, Flamuus, Gravtym, Hursanct, Inrel, Juxquas, + Kalpor, Lorort, Maninox, Noxmani, Ortlor, Porkal, Quasjux, Relin, Sancthur, Tymgrav, + Uusflam, Vasex, Wisdes, Xencorp, Ylembet, Zuan, Nybli, Gonvami, Lu-ish, Nan-dia, + Sha'rit, Ruscainlu, Vago'a, Muslion, Badfo, Meca, Thus-lo, Grelarin, Sikobal, Ra-ba, + Rianno, For'mur, Gleas, Mi'ke, Bachrudeusma, Rymas, Hundesla, Xa'ca, Bobeha, Tasblexva, + Tortos, Ameres, Daimeta, Breri, Prolion, Butorca, Pusvartseir, Gu'ra, El-dus, Lamvasrius, + Raneusrian, Rusda, As-for, Nee-tas, Zatraxbel, Rithlor-li, Haagmonurpru, Ledeci, Lus'fo, + Al'nal, Mam'ba, Ooha, Melamru, Mothiusli, Nisrothnicbe, Shaxsiasde, Bamilesca, Drealvaxus, + Ra-nal, Polphe, Limalbamon, Nias'i, Sacesfla, Basamdreal, Gangonahaag, Babiamar, + Ballzelluhez, Anbusas, Lionha, Usphires, Sionsabe, Shairothrius, Forrtuer, Mophis, + Caermal, Meelmi, Pretos, Fla'li, Sur'er, Catosdai, Iamraum, Laphana, Hau-vo, Mar-kil', + Sabmor, Tasyalesbhai, Phaslasgle, I-se, Malialgen, Sur-res, Zasebau, Daecuchi, Lamophe, + Nis'kram, Ezucellcro, Rolebas, Neasbe, Daedutos, Mog'i, Gahoaba, Va-via, Vamozavia, + Bia'be, Puszaru, Furluski, Shaxormay, Besilialfur, Raxhacu, Cusbrnan, Rithjeneus, Psadutos, + Beda'ko, Glatachies, Bebova, Gaap-fen, U-bal, Gala, Tane, Beel'ru, Salprupas, Lis'kor, Ca'tliphi, + Anhaaggu, Syaphusa, Tirisva, Fur-st, Ho'morym, Glagaaptarriel, Rasrothlacbau, Lim-wa, Mane, + A-cus, Turobe, Siyes, Balvacuh, Ristatar, Evelos, Bekaptli, Lithdesab, Onrinvi, Ho'phar, + Forerrsion, Trax'ca, Mog-rus, Salbach, A-tan + + + Adaks, Chelsh, Dhekixehsh, Nalm, Nardoqalm, Khihn, Nelx, Qhoandrukseke, Solbykech, Xindrakse, + Adlaqeph, Cherla, Dhelbarxeqsi, Farmohn, Igocsh, Khikusiksa, Netrahsh, Qilthdruscell, Somlazari, Xodharxe, + Alxoscohn, Chilthulsh, Dhergyx, Fe, Ihl, Khilbusor, Nourdurilm, Qirlux, Thahl, Xolshoki, + Anthoxasci, Choks, Dhihm, Fiks, Iln, Lalsh, Oalmoqihs, Qoash, Thahsh, Xothdrys, + Audrols, Cilks, Dhonos, Firgrahm, Ilthuksi, Leghorxaeph, Oarmirxacsh, Qogthu, Thaozdakahx, Zanuxirio, + Azdriras, Cirloks, Dhorbilks, Folshakaer, Iph, Lehl, Oduhm, Qohm, Thaturxirq, Zargi, + Azo, Cirnirseaki, Dhornukorv, Fomdrurq, Iri, Letu, Ogthoksoksh, Qougthoksaehs, Thelk, Zatus, + Badtroln, Cirthilx, Diddikoxo, Gadulm, Irnylks, Likkykser, Okkuzas, Qualbilk, Thilthorxaelm, Zelx, + Bazdrirsirq, Cokhtokaell, Dindrosci, Galbirseksae, Jacs, Lizdahl, Olshu, Remlalm, Thinalx, Zis, + Bolbruqehl, Colba, Dolshuqerie, Gazdoks, Jaliqerxe, Lodtriskacie, Olsuka, Rethics, Thirti, + Boldursaihs, Cololl, Dothuzeech, Ghe, Jals, Loghiqsacs, Othiqsosee, Rilthdriscish, Vendrohn, + Borbuhn, Dadhyksa, Duandrols, Ghemylm, Jelna, Lonalm, Ozdi, Riniqsielx, Vianthaqirq, + Bordazech, Dahx, Edoziacsh, Ghidiqa, Jes, Lordu, Qekoln, Rirdakasci, Xadthri, + Cadthrihm, Dargirekse, Elx, Ghilbruksh, Jetulks, Mau, Qemduhsh, Rohn, Xaldri, + Cadthror, Degtha, Emdyhm, Ghithdruksaer, Jiddaqsohs, Menthyrsaxa, Qhaathrylk, Roldraln, Xauln, + Caltholl, Deloln, Ertoll, Ghornyxicsh, Jirgirsasa, Mitro, Qhekkyscox, Saomnorv, Xeldyqsaer, + Cantruskeri, Demdacs, Ethdroksiorv, Girgarq, Jodho, Moks, Qhelmuselk, Sarthuzieln, Xia, + Cegus, Dhaakkascelsh, Ezdrusailks, Girlizolx, Juarthash, Molks, Qhex, Saundrihs, Xildalsh, + Cex, Dhaamdusels, Fanthyrserv, Girthusca, Khathraso, Mozoph, Qhirthro, Sedthroqsiqe, Xilnu, + Chazalk, Dhaldorxiaph, Far, Golnils, Khemdrosh, Nakhyrv, Qhithrursiaks, Soa, Ximni + + + C'ndathagh, Canogamaq, Chatehagn, Dharhar, Egygogturny, Eloruacal, + Gnazaae, Kephothu, Lhig, Loghoatistha, Lot-rugug, Morthaoglars, + Otugthacy, Sh-gu, Zo'leihulli, Aamabbh, Aboagggotel, Bos-hat, + Eke-not, Ekrusho, Gothul, Hathullo, Iachakite, Kelotuggn, Nekihar, + Othulil, Phaborhan, Tiaruanan-mot, Ugtlauthon, Yogg, Aquthaule, + Bhotego-kig, Bol-igoiga, Cathamanotu, Elos, Enotthon, Kekrart-pha, + Kelogog, Lat-ugud, Nglic-len, Nthugub, Orutubbhamen, Shomehai, Thugommm, + Tiniho, Bhaua, Cagnaeng, Deggnaugna, Gua-zso, Hiquthath, Kis'chothugg, + Lloicysat, Ot-lo, Rammake-ygu, Sthat-satla, Ula'dhathac, Ygogomo, + Zaa'matthi, Zhanothaurt, Zhotathur, Aboliqu, Ashathu, B'dalosilita, Cab-it, + Camabhoth, Ch-zhu, Ena-nota, Haruddhog, Honyaloma, Keilegtha, Laloshud, + Maqurtha, Ra'uscath, Shigo, Y'yinatusarh, Da'momaicl, Delonel, H'rtllorski, + Hus-hit, Kength, Kil-oaugomm, Lateilot, Pha-thu, Rnya, Sanoskrthama, Thar, + Tharauaei, Thuaug-hac, Ua-dh, Yichatha, Boanath, Dh'ubotla, Ghactll, Goshotl, + Keggyig, Ll'nygo, Mei-yint, Phuathi, R'rauguaugol, Rae'isaq, Rhig, Ruarubo, + Thuggotha, Yothugog, Zaulaalag + + + Bademx, Bagt, Bak, Bamesg, Bamn, Baxekn, Bemanx, Bet, Bex, Bgus, Bkuxam, Brotk, + Bted, Btus, Busk, Buzd, Bxanut, Bzog, Dabukg, Dazb, Dbog, Dbum, Denukg, Desogt, + Dezb, Dgutk, Dot, Dsam, Dumb, Duratz, Dusoxt, Dutk, Dxumeg, Dxur, Gad, Gast, Gaxk, + Gazuxt, Gebk, Gem, Getadb, Gezx, Gkant, Gmexk, Gnezax, Graz, Grodek, Grun, Gsotr, + Gsotur, Gtasd, Gumn, Gunorm, Gusz, Gxes, Katurb, Kazx, Kes, Kmob, Knaxur, Kozagn, + Ksabm, Ksem, Kzuxn, Mategd, Mburz, Menabg, Mgas, Mkar, Mkebug, Mnabeg, Mnokb, Mobt, + Mogr, Mokazb, Mokegb, Mokx, Mox, Moxr, Mrob, Mrub, Mubedn, Mxug, Mzogs, Nab, Namodg, + Nazedr, Ndotb, Ngukb, Nkedog, Nkotab, Nkug, Nmazt, Nmogax, Nobemt, Nobr, Nrutos, + Nsam, Nsamub, Nsuxob, Ntumz, Nuxokz, Nzatum, Ram, Ratm, Rbagek, Reg, Remagt, Rez, + Rkes, Rnodet, Rokanb, Rot, Rox, Rtogn, Rtomk, Rtuzak, Runakg, Ruzb, Rzag, Rzet, + Sbag, Sdar, Sken, Smekub, Smuz, Snat, Snoxum, Sokazt, Sot, Srex, Star, Stebd, + Tadoks, Tbonem, Tbugz, Tden, Tdesug, Tdonuk, Tduks, Tebakm, Tekarx, Terabn, + Tkabun, Tnorez, Tobend, Tobezm, Todk, Tomk, Tonedk, Tozagx, Tug, Tun, Tuxemg, + Tuzk, Tzab, Tzak, Xabn, Xag, Xasm, Xbet, Xdom, Xegats, Xesadz, Xetabk, Xgekan, + Xgoden, Xnub, Xok, Xom, Xoz, Xradeg, Xubr, Xudekb, Xurz, Xuzk, Zebaxn, Zegokd, + Zekosn, Zen, Zex, Zgab, Znosg, Zonadb, Zont, Zrub, Zsaruk, Zsur, Ztunes, Zubk, + Zudakr, Zus, Zusakg, Zuxagr, Zuxg, Zxar, Zxekub, Zxos + + + Batiel, Fetule, Lusmacan, Eoran, Mahalebar, Miesanero, + Beondeneb, Hanarelend, Nusarang, Ercalus, Orgdostu, Mostuch, + Drdos, Hantrn, Variel, Feluseiel, Setaci, Ndrelucale, + Enardan, Lazan, Venibalet, Ganeviahar, Thatar, Osanelet, + Evanibane, Nengico, Zargi, Istuch, Ucelial, Osazan, + Ezabaliu, Ordrti, Carorilen, Malicoro, Varage, Bebri, + Hesanailar, Tusmielus, Cieiele, Maliriri, Xaeteniar, Gdelustiel, + Iariront, Vandarar, Hacesat, Mianiel, Zaeneson, Halet, + Ichenalel, Xarorle, Jusmazat, Morneoran, Zaluetr, Hanganeli, + Krardr, Zamanivar, Miuesetere, Nachar, Zanin, Jucon, + Krnicius, Bethat, Olismior, Osesac, Andosmam, Jusebe, + Telanden, Denior, Ornarceicar, Phenezae, Belianat, Justhophat, + Thaetiluc, Elernat, Pharal, Rdore, Danibesar, Onarat, + Vosan, Galen, Rdethonet, Tesan, Elibabesat, Orerusat, + Xagilani, Giacolat, Setelikral, Usasmene, Fesar, Phebat, + Anicar, Hariani, Tanikron, Derusmol, Fevelus, Rdevon, + Bantulel, Hiebrgidr, Ticiu, Fesos, Gikrdel, Rdornenth, + Besendan, Iereran, Usorn, Heniesano, Hanen, Smicalisme, + Deseste, Jesan, Xananahaci, Jurosat, Iuseles, Telebrucol, + Febesam, Lichar, Zarorice, Krneies, Manal, Vonisavan + + + Aesamonei, Brausi, Deonenegem, Facena, Ganoneu, Ianian, Krane, Lusargageru, Nianimn, + Agana, Breus, Deseoc, Faeomeisia, Gausisidida, Ianter, Kren, Lusmesar, Nitamor, + Amoial, Brothiac, Diaiaseo, Faetamei, Geial, Iarp, Krga, Lustergono, Niustaes, + Andususmemu, Brou, Diphilu, Faio, Godiabethes, Icagdialusi, Krgabr, Malenenomu, Nomusi, + Aniusi, Bryth, Disma, Faluscersi, Gope, Inae, Krolesem, Mantoerymus, Nteoname, + Armeth, Caler, Diusi, Famusiax, Gornu, Iollonthen, Kropae, Mbasta, Ntrndolusis, + Arteicia, Caso, Diusiamu, Fanamoly, Hanyscn, Iotoc, Kror, Merymur, Ntur, + Asalely, Choniausen, Docistegae, Faniortan, Hemiceume, Iphia, Krtalytilvi, Mescamonyso, Ocho, + Austu, Cichelc, Dolas, Fapha, Henethenoc, Isiduse, Krtar, Mesteniteni, Odimus, + Balic, Clen, Dome, Farga, Hentesth, Iusio, Krte, Methr, Oelchustu, + Begai, Cona, Dorpusae, Fariusap, Heoido, Jocho, Krtor, Metidu, Olisa, + Benona, Conich, Dusias, Farymaresel, Herysur, Jolaecis, Krtusu, Mnilesec, Olymobophys, + Berorabese, Cranonors, Earerthest, Fasu, Heseortisop, Jolisanta, Laric, Moeusyl, Oniac, + Berusthiti, Cric, Emeisis, Fatretu, Heus, Jonaponon, Lcau, Molei, Onoche, + Bianeterg, Ctha, Eorsi, Faxeithe, Hiurgregaem, Jonori, Legopil, Monyprget, Onoeus, + Bimaio, Cycan, Estab, Gabri, Hiusareo, Jonyila, Lenuscryceg, Musiman, Opaidona, + Bist, Cysus, Eusste, Gacyththen, Hoerea, Jopeontom, Leraly, Naegan, Oprusonu, + Borius, Dadida, Eusth, Gaeuseu, Honegolia, Jorgaeusa, Lesica, Namalu, Opyso, + Bralcem, Dalymeu, Eustreri, Gamol, Horiati, Josismeust, Lisceis, Napp, Orol, + Bralymusci, Dasome, Fabe, Gamusipi, Iadona, Joxenedo, Luriaury, Nest, Oron, + Palylyryl, Rphe, Sysiu, Tumusoli, Usynt, Xementhemam, Xymen, Yssthoppi, Zerac, + Peote, Rseliaeu, Taneusegas, Tusiusi, Vial, Xenerusi, Xymisa, Yste, Zerot, + Phal, Rylediceg, Teasu, Tusmalumni, Viaropria, Xenisiai, Xyrosto, Ytenel, Zessm, + Phes, Sabeuseus, Tenece, Umiustu, Viceu, Xero, Xysachyid, Ytesiale, Zeteg, + Phonereia, Sacegeryi, Tesisarypeu, Untantiorox, Vici, Xesoma, Xytaxyme, Ythiae, Zethaeioli, + Phopryle, Scneususo, Thom, Usceusiaga, Viconynes, Xesthet, Xythrosi, Zegalyn, Zeton, + Phyl, Sesu, Thonith, Usiae, Vilusont, Xetes, Yceni, Zegeuste, Zeul, + Piarese, Sianial, Tiuster, Usic, Vissia, Xeusth, Yipho, Zegoesia, Zeune, + Prtalylar, Sisaest, Trarthaleu, Usio, Vithasaeus, Xyclia, Ymant, Zelvilc, Zeusa, + Relchich, Sonener, Trsano, Uste, Viuses, Xyliusonint, Yroeisit, Zemethi, Zeuseco, + Resc, Rgaesius, Riphegrnust, Ritalusag, Rolitau, Reusa, Richipe, Rissthy, Rnesmp + + + Hurz, Krurk, Hishnak, Huunak, Honak, Rodash, Baank, Pror, Vik, Gruuurk, + Bradash, Krarbag, Gulo, Krudish, Eruushnak, Gruurz, Vrugar, Palg, Viol, Hirbag, + Ror, Vonk, Kruurt, Ving, Krugash, Bronk, Badush, Kurt, Pudish, Pik, + Erink, Pidush, Kink, Bool, Eralo, Rorag, Vraar, Varz, Bonak, Braart, + Kar, Pruulg, Vuudash, Eruurz, Erurg, Eruurk, Rorug, Bigor, Eruurt, Rugdush, + Kigar, Kaol, Pirt, Hagdush, Graarg, Praalo, Haag, Girbag, Brulg, Vigdush, + Vok, Bradash, Eruulo, Virg, Vruulg, Erogar, Vrog, Harg, Erishnak, Brurk, + Braagor, Vrirz, Vushnak, Kradush, Vrort, Prugdush, Kuurk, Branak, Pridush, Runk, + Rorag, Kirk, Kushnak, Prurbag, Erodush, Hank, Gogdush, Barug, Prugdish, Gank, + Eraurk, Eridush, Gogor, Golg, Vraarg, Grorbag, Erulo, Ruung, Gogash, Rogdish, + Gaarbag, Vrolo, Bong, Gart, Vrigdish, Erurag, Puurz, Hidash, Bank, Vrugor, + Erogor, Vrirg, Porbag, Ruushnak, Vrunak, Vourk, Eror, Gradush, Erarag, Vaag, + Horz, Bashnak, Prurg, Grirt, Grort, Vok, Branak, Vinak, Vaagar, Grirg, + Haadash, Purk, Kudash, Vuugar, Vogash, Kragor, Hashnak, Grog, Vrudush, Girt, + Gagash, Vring, Kirbag, Buurug, Ranak, Krirag, Grinak, Kagash, Kadish, Hink, + Prodush, Polg, Rorug, Paart, Palo, Griol, Krar, Pidush, Vuurk, Puunak, + Krarg, Briurk, Vuurz, Guuk, Puurt, Erank, Bridash, Gidash, Pruug, Paol, + Krong, Vaank, Vrirg, Vraarug, Gunak, Rodish, Purz, Vronak, Vashnak, Erirt, + Krarug, Gug, Pruurg, Harbag, Kruugar, Gudash, Gruur, Huuurk, Erigdish, Prorg, + Binak, Brurag, Vaar, Bugor, Graag, Eronak, Haagor, Krurg, Gadish, Krodush, + Kruugash, Vrugar, Vunk, Paagor, Grugor, Gruk, Rorbag, Port, Rulo, Kool, + Prurbag, Erar, Erar, Kranak, Prodush, Kaurk, Garug, Gagar, Bradish, Kaarbag, + Vagash, Kork, Baarg, Porbag, Grigor, Konk, Virg, Virag, Gradush, Vrigdush, + Pralo, Vrur, Vidash, Haagdush, Padash, Kaol, Brugdish, Krirt, Borbag, Eruurt, + Krudush, Prong, Puugor, Bar, Vaurk, Vang, Gank, Krur, Brank, Braaurk, + Gourk, Vigdish, Kruuurk, Vrigdush, Gruuurk, Rigdish, Pragash, Burag, Bruol, Gugash, + Krurbag, Gruunk, Hirk, Kruugor, Eragash, Purag, Kruurug, Buol, Erolg, Krool, + Pruur, Grug, Hashnak, Podush, Huurug, Podash, Pronk, Grur, Krurk, Godish, + Vidish, Port, Vrorbag, Hurbag, Prunk, Vig, Prudash, Purug, Praaol, Kart, + Kor, Erorbag, Pror, Praagar, Hirug, Kar, Vuuurk, Kaaol, Paaol, Gaagash, + Kuugash, Krorug, Bak, Hugar, Vanak, Eraarg, Vark, Panak, Grodush, Prugash, + Vuurag, Kogar, Ridish, Grurug, Brirag, Bug, Grugdush, Prurug, Vanak, Gradash, + Brart, Grank, Vaarag, Prong, Binak, Erunak, Kudash, Vagdush, Hagdush, Polg, + Guugar, Girk, Raurk, Hirk, Brur, Bugash, Punk, Bart, Gung, Erorg, + Hugor, Erorg, Pigdush, Grurg, Krigar, Ving, Vugor, Gaarg, Vrir, Erool, + Pragor, Gugdush, Krourk, Krarag, Purag, Prank, Eridush, Rig, Gank, Gruugdush, + Vourk, Vuurug, Kraarug, Vraalo, Kriol, Padush, Pugor, Pir, Prink, Vaarz, + Gog, Grugdish, Kraart, Krirg, Krourk, Prir, Haurk, Prorz, Var, Vaadash, + Kruugor, Kraag, Vrork, Hink, Eror, Kaang, Braaurk, Brog, Progor, Hogor, + Prag, Grorag, Vrudush, Vraak, Rudash, Vudish, Kralg, Rogash, Prurug, Kralg + + + Aarrus, Baga, Cikaros, Enar, Gamtor, Gorga, Krervir, Obak, Shagrat, Vidius, + Aawbos, Balagd, Cowor, Enas, Gaxkos, Gorkil, Krobos, Obakh, Shagrishn, Vimnar, + Abvir, Baluk, Crimir, Endius, Gaxsius, Gowtag, Lafur, Ofzus, Shakil, Vrirgi, + Aedziar, Balurtz, Croziar, Exzar, Gerwor, Gradbalcm, Lagduf, Olfil, Shuradb, Vroag, + Agduf, Benfum, Crutius, Fafius, Gexgan, Grishnag, Larog, Olmohr, Shurat, Wexthor, + Agduk, Biglog, Cruxom, Fafum, Giwor, Grishnakh, Luga, Orbal, Snaga, Xamohr, + Agdur, Biwor, Cutdor, Fawgrog, Gladius, Gufbos, Lugdog, Orkil, Snakhagr, Xevir, + Agrakh, Blaxdius, Dacdus, Feblith, Glaxlor, Hugthor, Lugduf, Othrog, Snakhak, Xonver, + Alalos, Blezfum, Dengan, Flanrym, Glemsius, Huxrym, Lugdush, Owsag, Srabos, Xoskos, + Alexrog, Blibkos, Dimfum, Flellos, Goblith, Irym, Lukil, Ozbos, Taglor, Xutfum, + Aliffur, Boldush, Dlaxam, Flengrog, Golagd, Jabto, Lumwor, Raas, Terthor, Zidor, + Alor, Bolga, Dlecbrog, Flolnus, Golfimb, Jelog, Lurtzog, Radbolg, Ticsag, Zlekkaos, + Alurus, Bracos, Dlivar, Flukaos, Golug, Jibmalog, Lusor, Resal, Trokdhor, Zleziar, + Alusor, Brafroch, Dlofgant, Frawsor, Golugd, Jigan, Maam, Rodog, Trulder, Zodgan, + Arowfur, Buga, Drizlos, Fressal, Goluk, Junmohr, Mebbor, Rontius, Uglug, Zogbog, + Aruroch, Bulug, Drogver, Frewwor, Golurtz, Juslog, Mega, Rublos, Uglur, Zoxsor, + Arus, Bulugd, Drusgant, Frigrus, Gorbag, Kalmohr, Muzga, Samir, Uhurtz, Zudus, + Aufog, Cagir, Dunkos, Froxsar, Gorbal, Kickrus, Nenir, Sefgar, Ulziar, Zusvar, + Badnas, Catnir, Ebrog, Frulos, Gorbalcm, Konir, Niver, Sefthor, Usag, + Bador, Cemlos, Ekaros, Fruswor, Gorbolg, Kozsor, Nofur, Shagradb, Uzgash + + + Aamon, Araznipus, Barbatos, Elubapt, Hmosas, Mazuh, Oson, Rout, Tarchimache, Utanat, + Aglasis, Arisnolez, Bathim, Eriel, Horffe, Midtapasiel, Padoh, Rsorar, Tarhosias, Vraal, + Aiwaz, Aruhael, Batonam, Esizar, Huictiigara, Moham, Pahralabon, Sahapirael, Tasohom, Wormius, + Alapak, Asusiel, Betra, Etidohn, Ihimarh, Moloch, Pazun, Sarahahemiel, Tatrros, Xeriretopael, + Almonjin, Ataxharos, Bimopuaslap, Exulruteo, Imarael, Morail, Pruslas, Satanchia, Temael, Yreifeci, + Amsanor, Atenec, Bucon, Fodus, Imdobaar, Nassael, Psapinal, Segal, Tesanenael, Zaxulapl, + Anaass, Aurlem, Clauneck, Forbrak, Inhar, Neatsum, Rabarusimiel, Semeruorzar, Tmipez, Zieh, + Anerar, Ayperos, Clitheret, Forlem, Iroxlenia, Nebirots, Ranentemiel, Sesahinahael, Tmotar, Zikiel, + Anshu, Azanos, Ditenasapael, Hael, Isesot, Nodmiel, Resolael, Sidragrosam, Tohezsenael, Zotodon, + Apatahz, Azmodaeus, Draxsom, Haristum, Itodobs, Nyarlathotep, Rlaaruton, Sinocaiktan, Tonakilr, Zresinom, + Apazpateo, Azpael, Elamael, Hepholaas, Itotah, Oburuzh, Rlueheliel, Solunaalsuc, Tonsampa, Zulopanaton, + Apbrat, Baal, Eleogap, Heposon, Lisexunm, Ocarax, Robrupezon, Somotaahret, Trimasel, Zutinas, + Apnapuos, Bahahoarnom, Eliezer, Heramael, Lrekip, Opapael, Ropapon, Sopttos, Uhsah, + Aptpeh, Bamzuhokiel, Eligor, Hiepacth, Luzuherp, Oprin, Rorasem, Tadlizha, Upehsiriu, + Apuond, Banhohzason, Elrakic, Hipikatael, Marbas, Orasapz, Rotisoattak, Tanezeabmam, Upupozon + + + Alderarm, Aldersprig, Ashgrove, Ashlimb, Barklock, Beamtooth, + Birchhedge, Birchseed, Braidbark, Briarbraid, Brighthazel, + Brightleaf, Brownhazel, Cedarbranch, Crafthedge, Craftlimb, + Craftoak, Craftthicket, Craftvine, Crowntwig, Elmlock, + Elmtimber, Elmtooth, Fallhazel, Fallherb, Farhedge, + Forestbirch, Furyblossom, Furyyew, Gladbirch, Greatbramble, + Greenbraid, Greenskin, Handbramble, Handbud, Handsprig, + Hazelbud, Hedgeclaw, Heelbeam, Herbroot, Herbtimber, + Hollyclaw, Hollygrove, Hollylock, Honeyherb, Jungleheel, + Leafhand, Leafwind, Lowshrub, Lowstaff, Maplebeard, + Marrowbeam, Mossash, Mossfoot, Mossholly, Mosspine, + Mossweed, Oakroot, Oldpalm, Palmtrunk, Quicksap, Rowanfury, + Rowantalon, Sapcedar, Sapfoot, Slowbranch, Slowshrub, + Smallwood, Springlimb, Staffmarrow, Strangethorn, + Stormroot, Stormwind, Talonthicket, Talonthorn, Timberhazel, + Timbermaple, Toothbush, Vineskin, Weedbeard, Weedbone, + Weedelm, Weedmane, Weedsprig, Weedyew, Wildbeard, Winterash, + Wintermaple, Wintersmile, Wintertalon, Winterwillow, Wisecopse, + Woodmane, Woodoak, Wyrdbranch, Wyrdbush, Yewbeam, Yewsprig, + Youngmoss, Oldstaff, Agetimber + + + Uira, Larange, Mogonth, Coliath, Nenith, Cath, Antarahi, Ghilong, Ngran, Marab, + Polarinth, Emaleth, Zilahed, Nenith, Halzanth, Speth, Meth, Ptorahee, Naranoth, Lauralare, + Olthonis, Roth, Camalanth, Spath, Halzanth, Hrontr, Takhansa, Santega, Lant, Weth, + Galzieth, Olthonis, Crairenarth, Ndron, Largimol, Gatianth, Erantog, Gospt, Sholzianth, Jirondra, + Tiamar, Poraneth, Olthas, Chatianth, Esianth, Talrion, Santega, Mneniath, Riisis, Giyeth, + Bralmuth, Spamath, Darangan, Sptor, Zontt, Sirorx, Bralmuth, Tueth, Trabieth, Tiakoth, + Darangan, Imegig, Ri, Shoth, Largimol, Rahiosar, Trabieth, Iacanth, Trananth, Bahiga, + Trabieth, Abrae, Chatianth, Onthi, Malanenth, Ngat, Ulloda, Cath, Ranttira, Pisa, + Perinth, Abraanthasala, Ngran, Daralora, Chaneth, Pigaheey, Emaleth, Wielgianth, Craillanth, Charanuth, + Uira, Caradine, Olrion, Olrion, Wieneth, Ugaraga, Meranuth, Carmath, Polarinth, Glath + + + Ranar Gemcrafter, Gronif Redfist, Cael Bouldersmash, Urdar Boulderdig, Bikmar Stonebeard, Dwan Chertfoot, Ira Ironfist, Thordal Axeshadow, + Anar Spiderslayer, Nolar Stonesmash, Faern Foekiller, Dogur Oakshadow, Azagnur Marbledweller, Geto Onyxleg, Thotak Anvilmaker, Roner Silverbeard, + Boli Earthbreaker, Borolo Axeheart, Tomu Earthcrusher, Balgin Spiderbreaker, Thonin Redsword, Ygddan Shieldsmash, Del Stonedig, Jorn Redmaul, + Tol Blackpick, Bofurt Ogreblade, Burru Metalforger, Gomgan Strongclub, Thirar Moonbeard, Maer Oakfist, Glorgrim Ironfoot, Azim Goblinhewer, + Boromar Steelleg, Immru Silverheart, Vongan Goblinhewer, Ulgan Redhammer, Tomu Irondweller, Gret Anvilworker, Baern Ironfoot, Delan Grayheart, + Tol Trollcrusher, Geto Hammerleg, Iolvic Tunneldigger, Tornar Earthdigger, Whurlim Farcrusher, Goglo Goblinmaul, Gomthic Dragonmaul, Hilak Stonecutter, + Torarok Chertbeard, Dadok Gemsmith, Tordok Hammerfist, Dorn Anvilmaker, Northic Anvilworker, Kirkral Trollcrusher, Elund Stronghammer, Gomlim Axecaster, + Adalaafr Goblinblade, Ulster Firefist, Ronin Strongfist, Daal Trollhammer, Boronur Flamehammer, Belgrim Shieldhewer, Deldik Trollkiller, Zuth Spiderhewer, + Ronli Orckiller, Thirgan Metalcaster, Thorlak Pickshadow, Thourn Rockspike, Danir Foesword, Nivak Flamebeard, Deed Gemmaker, Baergar Foeaxe, + Torgin Foesword, Geim Spiderbasher, Hirdat Quartzbeard, Balafr Goblinbasher, Relrin Pickfist, Belak Goblinbasher, Ira Ogrecrusher, Yurafr Rockblade, + Rodkas Steelaxe, Ira Stoneshadow, Immus Bluehand, Thorim Spiderhammer, Gimgug Hammershadow, Renthen Bloodblade, Thirru Rockhammer, Gorvak Ironfist, + Thodrek Bloodsword, Thoran Copperfoot, Stardar Dragonblade, Bazin Foespear, Thogan Foekiller, Immulf Goblinkiller, Nalnur Firmbeard, Keldko Redheart, + Garorn Steelspear, Kilal Thunderheart, Varer Stonecrusher, Thoruk Firmfoot, Faldal Quartzback, Rentar Blueheart, Garur Quartzheart, Trol Bronzeworker, + Belgin Firepick, Gargur Stonecutter, Gamar Shieldminer, Adalavar Ogrecrusher, Toradan Stonecrusher, Bikic Foehewer, Carin Stonehammer, Marnar Swordworker, + Indor Silvermaul, Bakgug Firehammer, Boroden Mooncheek, Garndrirr Farcrusher, Bovak Ironforger, Tomu Strongsword, Valnorn Marbledig, Rakur Granitedig, + Renin Quartzheart, Dorn Ironheart, Thifthic Stonequarry, Gret Orchammer, Gilin Metalmaker, Gomgain Dragonbane, Ril Hammerheart, Gogurt Steelsword, + Ovvic Spiderbreaker, Cao Bluehammer, Marin Chertbeard, Halar Granitequarry, Dolor Spiderclub, Renin Dragonslayer, Burob Stoneback, Barunlond Bronzeoath, + Burtak Metalsmith, Bar Boulderminer, Obar Ironheart, Gogthal Anvilcrafter, Ril Rockblade, Garvar Ironbeard, Fulhud Stronghair, Angug Foebreaker, + Rakdik Shalequarry, Karur Marblehewer, Havult Giantbreaker, Hilar Foekiller, Yerro Marbletracker, Bazzin Marblequarry, Ira Ogrebreaker, Gogzin Goblinhammer, + Gruer Armorworker, Ulis Tunneldelver, Gimvic Cherthand, Immseg Ogresword, Klob Dragonslayer, Obund Steelbeard, Thirult Foemaul, Theour Giantslayer, + Fikain Boulderdweller, Ulden Stronghammer, Elur Gravelbeard, Gamir Goblinhewer, Renorn Ironbeard, Nigrim Ironfist, Renig Axeworker, Durdin Irondweller, + Ira Quartzheart, Geto Dragonhammer, Thorim Orcbasher, Theohud Shieldcrusher, Gomthic Irondelver, Gordide Foehewer, Birur Granitepick, Khondin Chertdig, + Fargi Groundcarver, Gilic Fireheart, Baern Armorcarver, Garannar Bluespear, Dwaldo Grayaxe, Kok Armorcrafter, Droak Rockminer, Renli Graniteblade, + Ulut Ogrebasher, Sunddan Stonehammer, Thifdar Orchammer, Renlo Axehair, Wernar Bronzemaker, Werlak Firmfoot, Thifdal Rockmaul, Gilkral Bluehammer, + Thornur Axecarver, Iolnar Bronzehand, Thoradad Flameaxe, Tybok Goblinaxe, Balob Goblinbreaker, Balgim Quartzbeard, Dwalam Spiderspike, Gimkral Armorsmith, + Gret Bronzehelm, Indster Firmfoot, Trol Armorcarver, Dolim Granitequarry, Thomar Tunnelbreaker, Thoradur Dragonclub, Whurthic Earthcrusher, Yedlak Redhand, + Redar Thunderhammer, Gordric Moonfoot, Gruir Orcbane, Ira Swordforger, Klob Silveraxe, Ira Gemcheek, Garandas Grounddweller, Dain Trollspike, + Balbak Blueleg, Hilmod Blueshadow, Volkro Grayheart, Bangur Stonehammer, Garmod Bloodmaul, Yerin Spiderkiller, Tol Earthbreaker, Thirvak Firesword, + Marro Ogremaul, Rorur Shalequarry, Adaladrirr Groundminer, Bikric Goblinhammer, Dolhud Dragonhammer, Rornof Gemcarver, Thodik Dragonbreaker, Thongim Groundbreaker, + Gorob Ogrebreaker, Thoin Swordforger, Theoob Orcspike, Maur Gembeard, Gloin Firemaul, Gamli Hammerfoot, Torlel Swordcarver, Maurn Graybeard, + Thoron Armorforger, Baltak Silverhand, Thogal Ogrekiller, Tomu Axefist, Agamm Strongmaul, Gimur Strongheart, Whurlim Foesword, Fikgrim Firmarm, + Hathster Rockcarver, Fulnar Cherthewer, Valdin Redaxe, Ril Hammerfoot, Kildok Ironcarver, Gomggrat Chertsmash, Fulam Earthdweller, Baz Silveraxe, + Gnok Grayheart, Belar Bouldersmash, Rasut Ironhand, Rabar Dragonhammer, Thifgus Ironforger, Elbar Orckiller, Delnar Anvilcarver, Theovic Goblinspear, + Torggar Armorsmith, Nalan Ironbeard, Cael Shalesmash, Caurn Spiderbreaker, Liggi Goblinaxe, Kagin Bronzeforger, Balain Ogreblade, Rak Shaledig, + Elro Goblinspike, Gilon Bloodaxe, Gimnar Flamehammer, Keldbar Stoneheart, Dwan Copperhair, Garbak Gravelhand, Bar Gianthewer, Baergad Dragonbreaker, + Barrin Steelshadow, Balar Foehammer, Taek Bouldercutter, Vator Ogreaxe, Nilad Anvilworker, Drourn Grayleg, Thifthic Ironquarry, Garnnar Stoneaxe, + Rael Ogrebasher, Maear Bronzesmith, Ular Tunnelhewer, Daner Hammerfoot, Sundif Granitebeard, Ronbar Boulderminer, Zundrgar Flameclub, Renin Flamespike, + Garanak Stonespear, Dunaok Granitequarry, Del Spiderbreaker, Kagnar Ogrebender, Nalafr Goblinbasher, Burtak Irondigger, Boic Ogreaxe, Thogan Axeleg, + Gomgar Bluepick, Rorndan Orcbender, Hirur Flameoath, Talad Groundcrusher, Kok Foeaxe, Falgrim Graniteminer, Askdal Stonehammer, Gladlo Steelspear, + Hirdrek Dragonbender, Azak Flameoath, Donagim Shalehewer, Eldal Redhand, Garn Armormaker, Renan Anvilcarver, Bikdin Trollkiller, Maer Grayblade, + Baern Thunderleg, Renor Onyxfoot, Yurdin Orcspike, Bangan Rocktracker, Dain Shalecarver, Baztak Rockspear, Dolin Spiderpick, Rakur Pickcheek, + Gallond Silveraxe, Goggrim Redsword, Urin Silverhelm, Kilar Firmfist, Valin Blackpick, Doggrim Rockheart, Keldthal Goblinbreaker, Gombar Gianthewer, + Cazin Firmhand, Taed Flamefoot, Dardik Shaletracker, Ulgar Steelaxe, Berrak Flamepick, Rasseg Orcbreaker, Dontar Armorsmith, Grukhan Spiderslayer, + Thoain Giantbasher, Rakar Shielddig, Gnok Gravelfist, Thirin Foehewer, Yimdel Oakfist, Gamurt Firehammer, Baern Rockhand, Marvak Firmfist, + Hallak Chertdigger, Zundrlar Rockfist, Garkas Foebane, Dorn Spiderkiller, Ared Rockminer, Ovgrim Bronzefoot, Indgan Orchewer, Dolauk Ironhand, + Rak Firehand, Rlog Boulderbreaker, Fulric Ogrebreaker, Duerir Axeheart, Boroin Axecarver, Garnlel Ogremaul, Kagras Goblinaxe, Bofthic Metalcaster, + Thorthal Grayheart, Adalaur Gemhand, Nikhan Orcpick, Bofer Stronghammer, Tybkhan Axecrafter, Gladdok Giantbender, Vonlo Granitehair, Ligafr Ironaxe, + Garig Spiderbane, Norus Farcrusher, Jalaur Orcbreaker, Nalvic Trollsword, Gardel Rockcutter, Fultafr Bloodspear, Beldik Gravelfist, Barunulf Redhammer, + Trol Rockfist, Agamm Bluespike, Dolir Firmfoot, Yurif Orcbreaker, Marru Quartzhand, Galic Bronzecarver, Kok Rockdweller, Fulag Shalecarver, + Asklo Ogrebreaker, Bakek Orchammer, Balig Tunnelminer, Azagnar Dragonpick, Gladak Redarm, Grongug Redhelm, Bakgim Copperback, Thorar Moonhand + + + the Lord of the Abyss, the Collector of Souls, the Slayer + + + Edorpusem, Soapas, Inhar, Ascnan, Enpuxoz, + Rakarael, Imarael, Aruhael, Hotem, Tesanenael, + Zutinas, Edpaiz, Itotah, Isesot, Moham, + Rihatasm, Oprin, Somotaahret, Oson, Hahun, + Tmotar, Rsorar, Rpetah, Atarsasuo, Zulopanaton, + Asusiel, Etidohn, Rotisoattak, Baton, Anaass, + Tanezeabmam, Tmipez, Onemax, Semeruorzar, Neat, + Sondipri, Nassael, Sisisperon, Bobikar, Upehsiriu, + Zresinom, Apatahz, Anerar, Usabar, Xammon, + Hhorarap, Robrupezon, Bibahoocpil, Pentameon, Tasskur, + Dpiulaniel, Alpehaat, Lnusirip, Abiel, Ihimarh, + Apapmebio, Obhenaas, Tarhosias, Tossiel, Ntipan, + Ditenasapael, Apazpateo, Temael, Prazenah, Elebonon, + Karulep, Pazun, Patorunl, Exulruteo, Homsahpe, + Nirahon, Sazroneot, Psapinal, Emhdep, Araznipus, + Rlueheliel, Lunlder, Tasiliel, Renepoipsil, Szetac, + Tatrros, Esizar, Urrosit, Luzuherp, Apuond, + Natir, Resolael, Otepnelas, Ssuatohiel, Maot, + Ataxharos, Iroxlenia, Dlipahox, Ropapon, Lisexunm, + Ahannapoi, Etsool, Rustheh, Apael, Hsalet, + Mazuh, Ranruhuos, Uhsah, Rneramat, Rozax, + Elubapt, Asanir, Sahapirael, Amisenon, Suslorpabon, + Osulel, Psearabael, Rhazat, Zieh, Rout, + Amsanor, Xeriretopael, Azmral, Nehutael, Xetop, + Tsesas, Zanxamhomiel, Nodmiel, Atahin, Bimopuaslap, + Haut, Oburuzh, Arisnolez, Azanos, Apbrat, + Letab, Netaniel, Utanat, Nesaroamhus, Banhohzason, + Tonakilr, Ocarax, Rlaaruton, Raslunni, Tisxothe, + Batonam, Hipikatael, Smurap, Lariel, Ebbeh, + Lishral, Pobhonaox, Lmietaziel, Opasholoo, Abael, + Alapak, Ohmaheal, Hezshan, Pidkeseton, Tadlizha, + Ltoizunael, Tohezsenael, Azael, Olahnomea, Azpael, + Bahahoarnom, Zahanaocpas, Pusnasba, Tapoteaddal, Sinocaiktan, + Otorsalas, Esdonir, Tonsampa, Ahadap, Inases, + Solunaalsuc, Elamael, Punenon, Nusanolael, Olmetan, + Upupozon, Nzalab, Hapsohna, Sasusimael, Itodobs, + Teriplesael, Rabarusimiel, Sesahinahael, Ralotzabael, Aranael, + Arenot, Epopinm, Ketzedsarael, Etubritaa, Bamzuhokiel, + Aptaer, Atenec, Operluzec, Orasapz, Hkopohes, + Hmosas, Rorasem, Hahocarn, Midtapasiel, Nansophazael, + Ramohimason, Xatepil, Bacatasezon, Enarael, Amzatir, + Zaxulapl, Sopttos, Arapoh, Ssaamulael, Rippemaal, + Zotodon, Opapael, Lehesaorzac, Elrakic, Adlmol, + Zarhohseziel, Hepholaas, Hados, Zikiel, Lalor, + Ranentemiel, Hesxetinon, Ipapah, Zukep, Hean, + Tornehtapon, Mallasolael, Popolon, Eriel, Imdobaar, + Lrekip, Paton, Hobasalon, Sanetorael, Oratum, + Ehtapit, Uhamirp, Padoh, Xaddetposon, Pesin, + Amahap, Pahralabon, Aparoh, Apnapuos, Tasohom, + Enilasp, Sarahahemiel, Heposon, Aptpeh, Dihoraz, + + + a fiery gargoyle, a burning gargoyle, a smoldering gargoyle, a blistering gargoyle, + a sweltering gargoyle, a flaming gargoyle, a scorching gargoyle, + a blazing gargoyle, a searing gargoyle + + + Sophanon, Caryax, Daemeox, Phlegon, Aerophus, Euforus, Pallax, + Nikaon, Licouax, Lindsaon, Bastax, Magdanon, Thayax, Aethon, Ceridus, Galenon, + Rhysus, Auramax, Aldrax, Anaxus, Luceus, Quarax, Ariax, Balarax, Vincenus, + Loxias, Birhamus, Lekax, Nyctinus, Myrsinus + + + Klian, Klistra, Laeri, Ciline, Shiale, Ourie, Piepe, Liera, Sili, + Sefi, Cynthe, Nedra, Hali, Jiki, Piku, Rael, Zanne, Zut, Sini, Os, Wienne, Xian, + Ybri, Calee, Shendri, Shri + + + Kahl, Ghrom, Ogger, Vek, Sai'ge, Groov'h, Khaonem, Malen, Atar, + Aicee, Vaype, Halex, Yar, Hanz, Evocah, Bishor, Jelak, Adrok, Praphut, Usile, + Sann, Sabba, Prie, Atuk, Chaca, ShoJo, Baccu, Bonkie, Alli, Jexa, La'Loh, Arda, + Cordee, Lana, Lar, Araka, Rhunda, Squee, Bhora, Niha, Olaufee, Sinthe, Karawyn, + Gruwulf, Masena, Nasha, Sargaza, + Kahl, Ghrom, Ogger, Vek, Sai'ge, Groov'h, Khaonem, Malen, Atar, + Aicee, Vaype, Halex, Yar, Hanz, Evocah, Bishor, Jelak, Adrok, Praphut, Usile, + Sann, Sabba, Prie, Atuk, Chaca, ShoJo, Baccu, Bonkie, Alli, + Jexa, La'Loh, Arda, Cordee, Lana, Lar, Araka, Rhunda, Squee, + Bhora, Niha, Olaufee, Sinthe, Karawyn, Gruwulf, Masena, Nasha, Sargaza + + + Aamon, Agalierept, Agares, Aglasis, Aiwaz, Astaroth, Ayperos, + Azatoth, Azmodaeus, Azrael, Ba'al, Baal, Barbatos, Bathim, Bathsin, Be'elzebub, + Be'elzebubba, Bechard, Beelzebuth, Botis, Brulefer, Bucon, Buer, Clauneck, + Clitheret, Cthulhu, Druzil, El Chupacabra, Eleogap, Eliezer, Eligor, Eracove, + Faraii, Fleurety, Frimost, Frucissiere, Fruitimiere, Glassyalabolas, Guland, + Gusoyn, Hael, Haristum, Heramael, Hiepacth, Huictiigara, Humots, Khil, Maleki, + Marbas, Mephistopheles, Mersilde, Minoson, Moloch, Molech, Morail, Musisin, + Naberrs, Nebiros, Nebirots, Nyarlathotep, Pentagnony, Proculo, Pruslas, Pursan, + Rofocale, Sargatans, Satanchia, Satanciae, Segal, Sergulath, Sergutthy, + Sidragrosam, Sirchade, Surgat, Sustugriel, Tarchimache, Tarihimal, Trimasel, + Vaelfar, Wormius, Yog-Sothoth, Y'reif Eci, Zoray + + + Hatshepsertari, Neferte, Taurika, Nahet, Omirye, Zahrika, Chiti, + Astiti, Dalet, Taurunet, Mandenet, Themirye, Omoremi, Shariti, + Echidna, Mafi, Olufione, Azemi, Rabisa, Nailuret, Monah, + Thema, Rabi, Mani, Subarte, Sakhmi, Kephira, Bahiti, + Tahut, Subira, Sarte, Omorahra, Heqenet, Shisa, Azet, + Sagira, Echisa, Kanema, Afura, Edera, Zahre, Harifa, + Mehtiti, Rabose, Kisa, Heqorose, Rehufemi, Esuru, Echurt, + Azirah, Subuane, Tila, Sanufemi, Thuru, Dalari, Heqe, + Themut, Thiza, Bastose, Chidna, Shi, Huret, Shinah, + Nufemi, Hafshah, Binah, Themani, Sabila, Bahira, Thuse, + Kanertari, Astertari, Dendalika, Nurione, Nailuru, Mumidna, Akemi, + Sha, Kila, Axiti, Kakrifa, Amera, Ameemah, Taurinah, + Themah, Olufi, Mafarifa, Heqarte, Norose, Astemi, Zalirye, + Mone, Omemi, Kepharifa, Etila, Hatshepsarte, Olufema, Hatshepsunet, + Hafshila, Shani + + + Xarot the Black Archmage, Kwan Li the Lord of the Mists, + Bazerion the Wizard-Lord, Ylthallynon the Insane + + + Ronlyn, Merkul, Zasfus, Zain, Doraghir, Danaghir, Staylin, + Kraylin, Limnoch, Kranor, Kraenor, Kranostil, Kranostir, Lilithack, Terus, + Thaelin, Thulack, Jiltharis, Garigor, Banothil, Bainothil, Quain, Ilzinias, + Mardis the Avenger, Phalil the Unexpected, Lord Adnoc, Leje the Invincible, + Master Akris, Sartan, Zejron the Wild, Pitt the Elder, Puzilan the Puzzler, + Vantrom, Singhe-Dul, Tyrin Kuhl, Xarot the Black, Kwan Li, Lord of the Mists, + Viktor Blackoak, Odilion, Raith, Lord of Rats, Bazerion, the Wizard-Lord, + Tybevriat Varn, Keldor the Modoc, Magelord Varsan, Izlay the Ebonheart, Slirith + Iceblood, Alcor, Vitar, Feenark, Sang Qui, Lyticant, Aegnor, Aelfric, Ainvar, + Arazion, Ardarion, Arkanis, Athrax, Barghest, Baros, Begarin, Beynlore, Burat, + Cairne, Carthon, Chamdar, Ciric, Cruzado, Cyphrak, D'Harun, Daelon, Daktar, + Darvain, Dracus, Dradar, Draelin, Draenor, Durodund, Eklor, Elrak, Fangorn, + Farynthane, Galtor, Gemma, Gragus, Irian, Israfel, Jaden, Jefahn, K'shar, + Kalimus, Kallomane, Kanax, Kelnos, Kharn, Khir, Kragon, Kylnath, Larac, Lathis, + Lenroc, Lonthorynthoryl, Lorreck, Mattrick, Mazrim, Mazrim, Modrei, Morturus, + Muktar, Murdon, Murron, Myndon, Mythran, Mytor, Nabius, Nalynkal, Nazgul, + Paorin, Quillan, Rendar, Scythyn, Shilor, Sobran, Soltak, Sorz, Taban, Telzar, + Teron, Trethovian, Tyrnar, Ulath, Vandor, Vermithrax, Vlade, Volan, Wydstrin, + X'calak, Xaelin, Xandor, Xarthos, Xaxtox, Xenix, Xiltanth, Xylor, Xystil, Yazad, + Yllthane, Ylthallynon, Ythoryn, Zalifar, Zathrix, Zunrek + + + Ronlyna, Merkula, Zasfusa, Zaina, Doraghira, Danaghira, Staylina, + Kraylina, Limnocha, Kranora, Kraenora, Kranostila, Kranostira, Lilithacka, Terusa, + Thaelina, Thulacka, Jiltharisa, Garigora, Banothila, Bainothila, Quaina, Ilziniasa, + Mardisa, Phalila, Adnoca, Lejea, Akrisa, Sartana, Zejrona, Pitta, Puzilana, + Vantroma, Singhe-Dula, Tyrin Kuhla, Xarota, Kwan-Lia, Viktor Blackoaka, Odiliona, Raitha, + Bazeriona, Tybevriata, Varna, Keldora, Varsana, Izlaya, Sliritha, Iceblooda, Alcora, Vitara, + Feenarka, Sang-Quia, Lyticanta, Aegnora, Aelfrica, Ainvara, Araziona, Ardariona, Arkanisa, + Athraxa, Barghesta, Barosa, Begarina, Beynlorea, Burata, Cairnea, Carthona, Chamdara, Cirica, + Cruzadoa, Cyphraka, D'Haruna, Daelona, Daktara, Darvaina, Dracusa, Dradara, Draelina, Draenora, + Durodunda, Eklora, Elraka, Fangorna, + Farynthanea, Galtora, Gemmaa, Gragusa, Iriana, Israfela, Jadena, Jefahna, K'shara, + Kalimusa, Kallomanea, Kanaxa, Kelnosa, Kharna, Khira, Kragona, Kylnatha, Laraca, Lathisa, + Lenroca, Lonthorynthoryla, Lorrecka, Mattricka, Mazrima, Mazrima, Modreia, Morturusa, + Muktara, Murdona, Murrona, Myndona, Mythrana, Mytora, Nabiusa, Nalynkala, Nazgula, + Paorina, Quillana, Rendara, Scythyna, Shilora, Sobrana, Soltaka, Sorza, Tabana, Telzara, + Terona, Trethoviana, Tyrnara, Ulatha, Vandora, Vermithraxa, Vladea, Volana, Wydstrina, + X'calaka, Xaelina, Xandora, Xarthosa, Xaxtoxa, Xenixa, Xiltantha, Xylora, Xystila, Yazada, + Yllthanea, Ylthallynona, Ythoryna, Zalifara, Zathrixa, Zunrek + + + Ccketakiki, Chachak, Chachaktak, Chackuk, Chak, Chaki, Chaki, + Chakreki, Chaktuki, Chakukki, Charitiki, Chatuki, Chectik, Chectik, Chek, + Chekeckaki, Cheki, Chekkakii, Cherek, Chetak, Chetickuki, Chiackukk, Chichachak, + Chichak, Chichak, Chichoki, Chichoki, Chickek, Chickek, Chickeki, Chickeki, + Chickekiaki, Chikavi, Chikchickeki, Chikckak, Chikek, Chiketckuki, Chiki, + Chikitchaki, Chiktaki, Chiritchek, Chitaviok, Chokchak, Chokirek, Chotechiki, + Ckak, Ckek, Ckekckuki, Ckeki, Ckekickuk, Ckikhiki, Ckikicheki, Ckukchik, + Ckukichek, Ctiktik, Dachek, Dackatuki, Dactuk, Dafactik, Deckarreki, Deektuk, + Defetav, Dekckuk, Detckiki, Detckuki, Detik, Dicchok, Dickiki, Dikfachok, + Ditecckek, Diwarek, Eachik, Eactiki, Ecckkekek, Eckaki, Eckechakiki, Ecketak, + Ecterek, Ectuk, Eekckuk, Eektuk, Eicchiki, Eickuki, Ekiuki, Etakheki, Etavchiki, + Etckuki, Etik, Fachchekiok, Fachok, Fackak, Fackek, Fackik, Factavi, Factik, + Fecckik, Fechaki, Feractav, Fetav, Fetckiki, Firchik, Firecheki, Fireki, + Fitactaki, Fitaki, Fitcheki, Frecckeki, Hekckeki, Hiki, Hikitchaki, Hokchek, + Ikchaki, Iki, Kackak, Kactavi, Kadicchok, Kakhoki, Kaki, Kakiki, Karrekichoki, + Katukickek, Kecckik, Kechaki, Kekachek, Kekachik, Kekkik, Kicchiki, Kichak, + Kickak, Kidikiki, Kietik, Kik, Kikechokii, Kikiaki, Kiktaki, Kirchik, Kireki, + Kireki, Kitak, Kitaki, Kitavi, Kitcheki, Ktukchok, Kukeckaki, Kuki, Kukiecckak, + Rackek, Ractav, Ratitchaki, Recckeki, Recheki, Rekchectik, Reki, Rektav, + Rektavi, Retchectik, Reteckaki, Retituki, Rikchickek, Rikecckak, Ritchek, + Ritchekckiki, Ritiki, Ritikituk, Tackik, Tactaki, Tactikiv, Tadectuk, Tak, Tak, + Taki, Taki, Taktav, Tavchichoki, Taviactak, Taviectuk, Tecckek, Techiki, + Techikickik, Teckak, Tedetik, Tekactiki, Tekchichak, Tickukitaki, Tictak, + Tidetckuki, Tikckek, Tikickeki, Titchaki, Tituki, Tukckaki, Tukitiki, Tukituki, + Vachichak, Vackuk, Vactak, Vaveckaki, Vechoki, Vectaki, Vevactak, Vevitavi, + Vitavi, Vitchak, Vitituki, Vivackuk, Vivitchak, Vovechoki, Warek, Warreki, + Wecckak, Weckaki, Wedachek, Wikchichoki, Wochickeki + + + Aissssaiss, Aisyths, Alasthsiyss, Alessitsl, Alsiths, Alssi, + Alsyth, Asahlysy, Asathsaisss, Asaysth, Asiashy, Asistsais, Asitssis, Asiyss, + Astha, Asthcieth, Astysah, Athcesth, Athys, Athysthes, Atslah, Aysthyss, + Cesthaysth, Cetys, Ciethlish, Citsy, Cythshi, Cytsi, Ekthsisthh, Essith, Estha, + Etys, Halasth, Haless, Halsasah, Hasits, Hekths, Hiiths, Hiitsl, Hissis, Hlyiss, + Hlylylyshi, Hlyshilyly, Hlysylyiss, Hlythilsyth, Hissalsthy, Hysslssi, Hsysylh, + Hthessthil, Hthissy, Htisthh, Htsiathys, Hyisass, Hysil, Hysyiss, Iasia, + Icythhlysy, Iithsissh, Iitsliss, Ilshy, Ilsyth, Isalraaat, Isassthys, Isathys, + Isiss, Isissil, Isshi, Isshlshy, Isstha, Issthas, Issthyl, Issysh, Issyt, + Isthhtis, Istis, Istththh, Isyts, Ithstsesh, Ithsy, Iththis, Itsesh, Itshas, + Itsltlish, Itsthil, Itsylh, Iyssysil, Kthystshas, Kthythes, Lasath, Lastha, + Lasthtsthih, Lesstslah, Lestha, Lilhals, Lilsyth, Lishaless, Lishath, Lissysh, + Lissyt, Lithekths, Litsylh, Llithlish, Lshyshas, Lssissi, Lsthyssy, Lsyth, + Lsythstha, Lyissisis, Lylsthy, Lylyisass, Lyshiisal, Lyssthih, Lyssthy, + Lysyiitsl, Lythiiiths, Lytsthih, Saisalasths, Saishtsi, Saisssmyss, Salsesh, + Salssi, Sasisthasth, Sasss, Sasth, Sath, Sathsthih, Sathys, Satslah, Saysth, + Scesthhals, Seshsthyl, Sessith, Shasits, Shassthy, Shisis, Shitha, Shysil, + Shythis, Siasia, Siaththh, Sicyth, Silshy, Silthyl, Sisal, Sisshi, Sisshlythi, + Sistlilh, Sithtththh, Sitsesh, Sitshas, Sitstsi, Siyss, Slahyisass, Slasath, + Slishless, Ssaisss, Ssasist, Sshiscesth, Ssisal, Ssithsiss, Ssiyth, Sssaisss, + Ssssshi, Ssthasssthas, Ssthihssthy, Ssthssss, Ssthyl, Ssthyssths, Ssyraaath, + Ssysah, Ssyshstha, Ssyssith, Ssytsth, Stasah, Sthasth, Sthasthas, Sthasthih, + Sthihaisss, Sthihasits, Sthilsthy, Sthlyly, Sthlyshi, Sthlysy, Sthlythi, + Sthmissa, Sthmyss, Sthsasist, Sthyss, Sthyasia, Sthycyth, Sthyltasah, Stissh, + Stththh, Stysah, Sycieth, Sylhsths, Syllith, Syraaat, Syshsyts, Syslish, + Syththil, Sythysth, Sytlilh, Sytlish, Sytsyth, Sytsyts, Syys, Tasahasath, + Thalasths, Thaless, Thals, Thatsylh, Thays, Thekths, Theshthis, Thiiths, + Thiitsl, Thilhlyshi, Thishthes, Thlyiss, Thlyly, Thlyshi, Thlysy, Thlythi, + Thmissa, Thmyss, Thsais, Thslish, Ththes, Ththhllith, Ththis, Thtisthh, + Thyisass, Thylmissa, Thys, Thysslah, Tisiss, Tissyth, Tisthhhsy, Tlilhlasth, + Tlishkths, Tseshsath, Tshassasisth, Tsicyth, Tsitys, Tslahsits, Tsthihssthih, + Tsthil, Tsycieth, Tsylhssyt, Tsytysah, Tththhsyt, Tysahyraaath, Tyscesth, + Tysycieth, Yciethhlyly, Yisasshmyss, Yisstisthh, Yllith, Ylsthy, Yraaathlythi, + Ysahlith, Ysasth, Ysath, Yscesth, Yshmissa, Yshtsi, Ysilsia, Yslish, Yssasisth, + Ysssal, Yssthih, Yssths, Yssthy, Ystasah, Ysthsith, Ystsy, Ythals, Ythssysh, + Ytlilh, Ytlish, Ytsais, Ytssysh, Ytsthih + + + Abghat, Adgulg, Aghed, Agugh, Aguk, Almthu, Alog, Ambilge, + Apaugh, Argha, Argigoth, Argug, Arpigig, Auhgan, Azhug, Bagdud, Baghig, + Bahgigoth, Bahgigoth, Bandagh, Barfu, Bargulg, Baugh, Bidgug, Bildud, Bilge, + Bog, Boghat, Bogugh, Borgan, Borug, Braugh, Brougha, Brugagh, Bruigig, Buadagh, + Buggug, Builge, Buimghig, Bulgan, Bumhug, Buomaugh, Buordud, Burghed, Buugug, + Cabugbu, Cagan, Carguk, Carthurg, Clog, Corgak, Crothu, Cubub, Cukgilug, Curbag, + Dabub, Dakgorim, Dakgu, Dalthu, Darfu, Deakgu, Dergu, Derthag, Digdug, Diggu, + Dilug, Ditgurat, Dorgarag, Dregu, Dretkag, Drigka, Drikdarok, Drutha, Dudagog, + Dugarod, Dugorim, Duiltag, Durbag, Eagungad, Eggha, Eggugat, Egharod, Eghuglat, + Eichelberbog, Ekganit, Epkagut, Ergoth, Ertguth, Ewkbanok, Fagdud, Faghig, + Fandagh, Farfu, Farghed, Fargigoth, Farod, Faugh, Feldgulg, Fidgug, Filge, + Fodagog, Fogugh, Fozhug, Frikug, Frug, Frukag, Fubdagog, Fudhagh, Fupgugh, + Furbog, Futgarek, Gaakt, Garekk, Gelub, Gholug, Gilaktug, Ginug, Gnabadug, + Gnadug, Gnalurg, Gnarg, Gnarlug, Gnorl, Gnorth, Gnoth, Gnurl, Golag, Golag, + Golub, Gomatug, Gomoku, Gorgu, Gorlag, Grikug, Grug, Grug, Grukag, Grukk, Grung, + Gruul, Guag, Gubdagog, Gudhagh, Gug, Gug, Gujarek, Gujek, Gujjab, Gulm, Gulrn, + Gunaakt, Gunag, Gunug, Gurukk, Guthakug, Guthug, Gutjja, Hagob, Hagu, Hagub, + Haguk, Hebub, Hegug, Hibub, Hig, Hogug, Hoknath, Hoknuk, Hokulk, Holkurg, + Horknuth, Hrolkug, Hugagug, Hugmug, Hugolm, Ig, Igmut, Ignatz, Ignorg, Igubat, + Igug, Igurg, Ikgnath, Ikkath, Inkathu, Inkathurg, Isagubat, Jogug, Jokgagu, + Jolagh, Jorgagu, Jregh, Jreghug, Jugag, Jughog, Jughragh, Jukha, Jukkhag, + Julakgh, Kabugbu, Kagan, Kaghed, Kahigig, Karfu, Karguk, Karrghed, Karrhig, + Karthurg, Kebub, Kegigoth, Kegth, Kerghug, Kertug, Kilug, Klapdud, Klapdud, + Klog, Klughig, Knagh, Knaraugh, Knodagh, Knorgh, Knuguk, Knurigig, Kodagog, Kog, + Kogan, Komarod, Korgak, Korgulg, Koughat, Kraugug, Krilge, Krothu, Krouthu, + Krugbu, Krugorim, Kubub, Kugbu, Kukgilug, Kulgha, Kupgugh, Kurbag, Kurmbag, + Laghed, Lamgugh, Mabub, Magdud, Malthu, Marfu, Margulg, Mazhug, Meakgu, + Mergigoth, Milug, Mudagog, Mugarod, Mughragh, Mugorim, Murbag, Naghat, Naghig, + Naguk, Nahgigoth, Nakgu, Narfu, Nargulg, Narhbub, Narod, Neghed, Nehrakgu, + Nildud, Nodagog, Nofhug, Nogugh, Nomgulg, Noogugh, Nugbu, Nughilug, Nulgha, + Numhug, Nurbag, Nurghed, Oagungad, Oakgu, Obghat, Oggha, Oggugat, Ogharod, + Oghuglat, Oguk, Ohomdud, Ohulhug, Oilug, Okganit, Olaghig, Olaugh, Olmthu, + Olodagh, Olog, Omaghed, Ombilge, Omegugh, Omogulg, Omugug, Onog, Onubub, Onugug, + Oodagh, Oogorim, Oogugbu, Oomigig, Opathu, Opaugh, Opeghat, Opilge, Opkagut, + Opoguk, Oquagan, Orgha, Orgoth, Orgug, Orpigig, Ortguth, Otugbu, Ougha, + Ougigoth, Ouhgan, Owkbanok, Paghorim, Pahgigoth, Pahgorim, Pakgu, Parfu, Pargu, + Parhbub, Parod, Peghed, Pehrakgu, Pergu, Perthag, Pigdug, Piggu, Pitgurat, + Podagog, Pofhug, Pomgulg, Poogugh, Porgarag, Pregu, Pretkag, Prigka, Prikdarok, + Prutha, Pughilug, Puiltag, Purbag, Qog, Quadagh, Quilge, Quimghig, Quomaugh, + Quordud, Quugug, Raghat, Raguk, Rakgu, Rarfu, Rebub, Rilug, Rodagog, Rogan, + Romarod, Routhu, Rugbu, Rugorim, Rurbag, Rurigig, Sabub, Saghig, Sahgigoth, + Sahgorim, Sakgu, Salthu, Saraugug, Sarfu, Sargulg, Sarhbub, Sarod, Sbghat, + Seakgu, Sguk, Shomdud, Shulhug, Sildud, Silge, Silug, Sinsbog, Slaghig, Slapdud, + Slaugh, Slodagh, Slog, Slughig, Smaghed, Smegugh, Smogulg, Snog, Snubub, Snugug, + Sodagh, Sog, Sogorim, Sogugbu, Sogugh, Sombilge, Somigig, Sonagh, Sorgulg, + Sornaraugh, Soughat, Spathu, Speghat, Spilge, Spoguk, Squagan, Stugbu, Sudagog, + Sugarod, Sugbu, Sugha, Sugigoth, Sugorim, Suhgan, Sulgha, Sulmthu, Sumhug, + Sunodagh, Sunuguk, Supaugh, Supgugh, Surbag, Surgha, Surghed, Surgug, Surpigig, + Tagdud, Taghig, Tandagh, Tandagh, Tarfu, Targhed, Targigoth, Tarod, Taugh, + Taugh, Teldgulg, Tidgug, Tidgug, Tilge, Todagog, Tog, Toghat, Togugh, Torgan, + Torug, Tozhug, Traugh, Trilug, Trougha, Trugagh, Truigig, Tuggug, Tulgan, + Turbag, Turge, Ug, Ugghra, Uggug, Ughat, Ulgan, Ulmragha, Ulmrougha, Umhra, + Umragig, Umruigig, Ungagh, Unrugagh, Urag, Uraugh, Urg, Urgan, Urghat, Urgran, + Urlgan, Urmug, Urug, Urulg, Vabugbu, Vagan, Vagrungad, Vagungad, Vakgar, Vakgu, + Vakmu, Valthurg, Vambag, Vamugbu, Varbu, Varbuk, Varfu, Vargan, Varguk, + Varkgorim, Varthurg, Vegum, Vergu, Verlgu, Verthag, Verthurg, Vetorkag, Vidarok, + Vigdolg, Vigdug, Viggu, Viggulm, Viguka, Vitgurat, Vitgut, Vlog, Vlorg, Vorgak, + Vorgarag, Vothug, Vregu, Vretkag, Vrigka, Vrikdarok, Vrogak, Vrograg, Vrothu, + Vruhag, Vrutha, Vubub, Vugub, Vuiltag, Vukgilug, Vultog, Vulug, Vurbag, Wakgut, + Wanug, Wapkagut, Waruk, Wauktug, Wegub, Welub, Wholug, Wilaktug, Wingloug, + Winug, Woabadug, Woggha, Woggugat, Woggugat, Wogharod, Wogharod, Woghuglat, + Woglug, Wokganit, Womkug, Womrikug, Wonabadug, Worthag, Wraog, Wrug, Wrukag, + Wrukaog, Wubdagog, Wudgh, Wudhagh, Wudugog, Wuglat, Wumanok, Wumkbanok, Wurgoth, + Wurmha, Wurtguth, Wurthu, Wutgarek, Xaakt, Xago, Xagok, Xagu, Xaguk, Xarlug, + Xarpug, Xegug, Xepug, Xig, Xnath, Xnaurl, Xnurl, Xoknath, Xokuk, Xolag, Xolkug, + Xomath, Xomkug, Xomoku, Xonoth, Xorag, Xorakk, Xoroku, Xoruk, Xothkug, Xruul, + Xuag, Xug, Xugaa, Xugag, Xugagug, Xugar, Xugarf, Xugha, Xugor, Xugug, Xujarek, + Xuk, Xulgag, Xunaakt, Xunag, Xunug, Xurek, Xurl, Xurug, Xurukk, Xutag, Xuthakug, + Xutjja, Yaghed, Yagnar, Yagnatz, Yahg, Yahigig, Yakgnath, Yakha, Yalakgh, + Yargug, Yegigoth, Yegoth, Yerghug, Yerug, Ymafubag, Yokgagu, Yokgu, Yolmar, + Yonkathu, Yregh, Yroh, Ysagubar, Yughragh, Yugug, Yugug, Yukgnath, Yukha, + Yulakgh, Yunkathu, Zabghat, Zabub, Zaghig, Zahgigoth, Zahgorim, Zalthu, + Zaraugug, Zarfu, Zargulg, Zarhbub, Zarod, Zeakgu, Zguk, Zildud, Zilge, Zilug, + Zinsbog, Zlapdud, Zlog, Zlughig, Zodagh, Zog, Zogugbu, Zogugh, Zombilge, Zonagh, + Zorfu, Zorgulg, Zorhgigoth, Zornaraugh, Zoughat, Zudagog, Zugarod, Zugbu, + Zugorim, Zuhgan, Zulgha, Zulmthu, Zumhug, Zunodagh, Zunuguk, Zupaugh, Zupgugh, + Zurbag, Zurgha, Zurghed, Zurgug, Zurpigig + + + Aba, Abby, Abella, Abey, Abigail, Abina, Abiona, Abira, Abra, + Abrah, Absinthe, Acacia, Acanit, Acantha, Accalia, Acelin, Achen, Ada, Adalia, + Adara, Addi, Adelaide, Adele, Adelia, Adeline, Adelle, Adena, Aderes, Adesina, + Adie, Adimina, Adiva, Adoncia, Adonia, Adora, Adrienne, Aelina, Afina, Afra, + Afrika, Afton, Agate, Agatha, Agnes, Ahara, Ahave, Ahimsa, Aida, Aiella, Aiko, + Aila, Aileen, Ailsa, Aimee, Ain, Aina, Ainhoa, Ainsley, Aintzane, Airlia, + Aisling, Aislinn, Aithne, Aiyana, Ajara, Ajay, Ajinora, Akako, Akala, Akanke, + Akasma, Akela, Akilah, Akili, Akilina, Akina, Alaina, Alake, Alala, Alamanada, + Alana, Alani, Alanna, Alaqua, Alavda, Alazne, Alberta, Albinka, Alcina, Aldea, + Aldercy, Aleka, Alenne, Alesia, Alessa, Alethea, Alexa, Alexandra, Alexandria, + Alexandrina, Alexis, Ali, Alia, Alice, Alicia, Alida, Alike, Alima, Alina, + Alison, Alita, Alix, Aliz, Aliza, Allele, Alligra, Allinora, Allison, Allyn, + Alma, Alodie, Aloysia, Althea, Alula, Alumit, Alvina, Alvita, Alysa, Alyssa, + Alyssand, Alzena, Ama, Amabel, Amadi, Amadika, Amadis, Amaia, Amala, Amalia, + Amanda, Amandine, Amara, Amarande, Amarante, Amaris, Amata, Ambar, Amber, + Ambika, Ambis, Ameerah, Amelia, Amelina, Amethyst, Amie, Amiella, Amina, Aminta, + Amissa, Amita, Amity, Amoke, Amy, Ananda, Anastasia, Ancelin, Andi, Andra, + Andraianna, Andras, Andrea, Andromeda, Aneida, Anella, Anemone, Anezka, Angela, + Angelica, Angeline, Angelique, Angeni, Ani, Anica, Anieli, Anisa, Anita, Anke, + Ann, Anna, Annabel, Annabelle, Annamarie, Anne, Annette, Annikka, Annora, + Anorah, Anoush, Ansreana, Anteia, Anthea, Antje, Antoinette, Antonia, Aolani, + Apara, Apirka, Apolline, Apolloina, Aponi, April, Aprille, Aprille, Aqua, + Aquene, Ara, Arabella, Arabelle, Araceli, Araminta, Araxie, Arcadia, Ardath, + Ardelia, Arden, Ardis, Ardith, Areiela, Arella, Aretha, Aretina, Ariadne, + Ariana, Aricia, Ariel, Ariene, Arista, Arlene, Arlinda, Armina, Arminda, + Artemisia, Aruna, Arziki, Asaria, Asenka, Ash, Asha, Ashlan, Ashleigh, Ashley, + Asia, Asisa, Aslinda, Aspasia, Asta, Aster, Astera, Astra, Astrea, Astrid, + Atalanta, Atara, Atenne, Ateri, Athalia, Athena, Athla, Atifa, Atta, Aubrey, + Auda, Audny, Audrey, Audrianna, Audun, Augustina, Aura, Aure, Aurelia, Aurilia, + Aurina, Aurkene, Aurora, Autumn, Ava, Avana, Avasa, Avella, Avena, Avie, Avis, + Aviva, Axella, Aya, Ayaluna, Ayame, Ayana, Ayasha, Aydee, Ayela, Ayiana, Ayila, + Ayisha, Ayita, Ayla, Aynora, Ayuna, Azaleah, Azalia, Azarael, Azera, Azha, + Azilea, Azina, Azize, Azora, Azura, Babette, Bacia, Bacia, Baka, Baka, Bakarne, + Balayna, Balea, Balia, Bambi, Banan, Banella, Bara, Barbara, Barika, Basha, + Basha, Basia, Basimah, Batakah, Bathsheba, Batya, Bay, Bayana, Bayo, Bayta, Bea, + Beatrice, Beatrix, Beauina, Becca, Becky, Bedelia, Bel, Belana, Belina, Belinda, + Belita, Bellanca, Belle, Belora, Bente, Beradine, Berilla, Berit, Bernadette, + Bernice, Beryl, Bess, Bessine, Beta, Beth, Bethana, Bethany, Betony, Betty, + Beulah, Beverly, Bevin, Bian, Bianca, Billie, Bina, Bindy, Binti, Birdie, + Birkita, Bixenta, Blanche, Blanda, Blenda, Bliss, Bly, Blythe, Bo, Bohdana, + Bonamy, Bonita, Bonnie, Bonny, Borgny, Braina, Brandi, Brandy, Bren, Brenda, + Brenna, Bretta, Bridget, Bridget, Brie, Brier, Brietta, Brigit, Brigitte, Brina, + Brina, Briona, Briony, Brites, Britta, Brittany, Bronwyn, Brooke, Brynn, Bucia, + Cadence, Caimile, Caitlin, Caitrin, Cala, Calandia, Calandra, Calendonia, Caley, + Calida, Calista, Calla, Callan, Callia, Callidora, Callie, Caltha, Calypso, Cam, + Camelia, Camilia, Camille, Canace, Candace, Candida, Candide, Candra, Cantara, + Caoimhe, Capri, Caprice, Cara, Caradoc, Caresse, Cari, Carina, Carine, Carissa, + Carita, Carla, Carleen, Carlen, Carling, Carlota, Carly, Carma, Carmel, + Carmelina, Carmen, Carna, Carnelian, Carol, Carolina, Caroline, Carolyn, Caron, + Carrie, Caryn, Casey, Casilda, Cassandra, Cassia, Casta, Castalia, Catalina, + Catava, Caterina, Catherine, Cathleen, Cathy, Catriona, Cayla, Ceara, Cecania, + Cecilia, Celandine, Celeste, Celia, Celina, Celina, Cellia, Cerelia, Chaitra, + Chanah, Chanda, Chandi, Chandra, Chane, Chanel, Channa, Chantal, Charis, + Charissa, Charity, Charlotte, Charmaine, Chastity, Chava, Chaviva, Chay, Chaya, + Chelsea, Chenoa, Cherica, Cherice, Cherie, Cheryl, Chesna, Chiara, Chika, + Chilali, Chimlis, Chipo, Chloe, Chloris, Cho, Christa, Christable, Christina, + Christine, Christy, Chyou, Cia, Ciannait, Ciar, Cicely, Cindy, Claire, Clara, + Clarinda, Clarissa, Claudette, Claudia, Claudine, Clementina, Clementine, + Cliantha, Clorinda, Clorinda, Clover, Cochiti, Coleene, Colette, Connie, + Constance, Constanza, Consuela, Cora, Coralie, Corazon, Corbey, Cordeali, + Coretta, Cori, Corinna, Coris, Corliss, Corrine, Cortney, Crescent, Cressida, + Crystal, Cybele, Cybil, Cynthia, Cyprien, Cyrene, Cyrilla, Cytheria, Dabria, + Dacey, Dacia, Dacie, Dacio, Dae, Dagmar, Dagna, Dai, Daily, Daisel, Daisy, + Dakota, Dale, Dalila, Dalilia, Damara, Damitri, Dana, Danett, Dania, Daniella, + Danyelle, Daphene, Daphne, Daphnie, Dar, Dara, Daralis, Darby, Daria, Darla, + Darlene, Dasha, Dasha, Davene, Davine, Davita, Dawn, Daya, Dayna, Deana, Deana, + Deandra, Deb, Debra, Dede, Dee, Deedee, Deianira, Deiene, Deirdre, Delana, + Delaney, Delbin, Delia, Delicia, Delilia, Della, Delphina, Dembe, Demi, + Demitria, Dena, Denby, Denice, Deva, Devaki, Deval, Devi, Devin, Devnet, Devon, + Diamanta, Diane, Dianthe, Diedre, Diella, Dillian, Dilly, Dilys, Dinah, Dionne, + Disa, Dita, diti, Dixie, Dodie, Dolores, Dominique, Dona, Donata, Donielle, + Donner, Dooriya, Dophina, Dora, Doreen, Dorinda, Doris, Dorithy, Dory, Drew, + Drina, Drucilla, Dulcie, Dulcinea, Dusty, Dyan, Dyani, Dymphna, Dyna, Eartha, + Easter, Ebony, Echo, Edana, Edie, Edith, Edlyn, Edna, Edolie, Edria, Edwina, + Efia, Eileen, Eirene, Elaine, Elana, Eleora, Elianor, Elina, Elina, Elisa, + Elise, Eliska, Elissa, Elita, Eliza, Elizabeeth, Elke, Ella, Elle, Ellen, Elly, + Elodie, Eloise, Elsa, Elsie, Elynor, Elyse, Elysia, Ema, Emajane, Emalia, Ember, + Emelie, Emelyne, Emily, Emma, Endora, Engracia, Enid, Enola, Enye, Erasma, + Erianthe, Erica, Erin, Erlina, Erwand, Eskarne, Esmerelda, Esperanza, Esta, + Estelle, Esther, Estu, Etain, Etaina, Etaina, Etanthe, Etta, Eudocia, Eugenia, + Eulalia, Eustacia, Eva, Evacsa, Evadine, Evadne, Evangeline, Evanthe, Eve, + Evelyn, Evita, Evonne, Eyota, Fabienne, Faifuza, Fainche, Faith, Faizah, Fallon, + Fantine, Farha, Farima, Farrah, Fatin, Fawne, Fay, Faye, Fayina, Fayme, Felcia, + Felicite, Felicity, Femi, Feridwyn, Fern, Feronia, Filinda, Fina, Finola, Fiona, + Fiorenza, Flavia, Fleta, Flora, Florence, Frances, Francesca, Francine, + Francisca, Freda, Frederica, Freya, Frida, Frieda, Fuscienne, Gabriella, + Gabrielle, Gaia, Gail, Galatea, Gali, Galina, Galya, Gana, Ganesa, Gauri, Gaye, + Gayle, Gelasia, Gemma, Genevieve, Geogia, Georgeanne, Georgetta, Georgette, + Georgiana, Geradline, Geraldine, Gerda, Gerri, Gertrude, Geva, Ghislaine, + Giacinta, Gianina, Gigi, Gilana, Gilda, Gilen, Gillian, Gin, Gina, Ginger, + Giselle, Gitana, Githa, Gizane, Gleda, Glenna, Glennys, Golda, Goldie, Gotzone, + Grace, Gracie, Grainne, Grazia, Grear, Greta, Gretchen, Grette, Gwen, Gwendolyn, + Gweneth, Gwynne, Gytha, Hadara, Hadassa, Hadiya, Haidee, Hailey, Haimi, Haldis, + Hale, Haley, Hali, Hali, Halima, Halle, Hallie, Hana, Hanan, Hannah, Hanne, + Harmoni, Harriet, Hasna, Hava, Haya, Haylee, Hazel, Hea, Heather, Hei, Heidi, + Heldegarde, Helen, Helena, Helene, Helki, Henka, Henrietta, Hesper, Hester, + Hilary, Hilda, Hinda, Hisa, Holly, Hope, Hoshi, Hyacinth, Hye, Hypatia, Ianthe, + Ida, Idola, Idonia, Ilene, Ilona, Iman, Imogene, India, Indira, Indra, Ines, + Inez, Inga, Ingrid, Iolana, Iolanthe, Iona, Iratze, Irena, Irene, Iris, Irma, + Isabeau, Isabel, Isabella, Isadora, Isaura, Isis, Isleta, Isobel, Isoke, Istas, + Ivana, Ivory, Ivy, Jacelyn, Jacinda, Jacinthe, Jada, Jael, Jaen, Jaimie, Jaione, + Jakinda, Jala, Jamie, Jamila, Jamilah, Jan, Jana, Jane, Janelle, Janet, Janice, + Janis, Janna, Jannelle, Jardena, Jarvia, Jarvinia, Jasmine, Jaya, Jayne, Jean, + Jean, Jeanette, Jeanine, Jelena, Jena, Jenay, Jendayi, Jendyose, Jenica, + Jennettia, Jennifer, Jensine, Jerrilyn, Jessica, Jewel, Jezebel, Jihan, Jillian, + Jin, Jina, Jinny, Jinx, Joakima, Joan, Joanne, Jobey, Jobihna, Jocasa, Jocelyn, + Jodi, Jody, Joelle, Joelliane, Johanna, Joia, Jolan, Jolanta, Jolene, Jolie, + Joline, Jonina, Jora, Jordane, Josephine, Josie, Jotha, Joy, Joyce, Joye, + Juanita, Judith, Juditha, Julia, Juliana, Juliane, Julie, Julietta, Julinka, + Jumoke, Jun, June, Justine, Kaatje, Kachine, Kaclyn, Kaede, Kaethe, Kai, Kaia, + Kaie, Kaili, Kaimi, Kairos, Kaiya, Kakra, Kala, Kalama, Kalanit, Kalare, Kalea, + Kali, Kalika, Kalila, Kalinda, Kalle, Kalli, Kalonice, Kalyca, Kama, Kamala, + Kamali, Kamaria, Kambo, Kameko, Kamilah, Kamilia, Kanda, Kane, Kanene, Kanika, + Kantha, Kanya, Kapera, Kara, Karan, Karayan, Karel, Karen, Karida, Karimah, + Karisa, Karka, Karla, Karlenne, Karli, Karlyn, Karmina, Karol, Karylin, Karyn, + Kasa, Kasen, Kasia, Kasinda, Kassia, Kate, Katherine, Kathleen, Katja, Katoka, + Katrien, Katrina, Kaula, Kaveri, Kavindra, Kay, Kaya, Kaye, Kayla, Kaysa, Kazia, + Keara, Keelin, Keely, Kefira, Kehinde, Kei, Keiko, Keisha, Kelda, Kelia, Kelley, + Kelli, Kellie, Kelly, Kelsey, Kendra, Kennis, Kenyangi, Kepa, Kerani, Kerensa, + Kerstan, Kesare, Kesi, Kesia, Kessie, Keturah, Ketzia, Khalida, Kichi, Kiele, + Kim, Kimberly, Kimmie, Kimmy, Kineta, Kiona, Kira, Kiran, Kirby, Kirima, + Kirsten, Kirti, Kisa, Kiska, Kismet, Kissa, Kita, Kohana, Kolina, Koren, + Koressa, Kristen, Kyly, Kyna, Kynthia, Kyoko, Lacey, Lacie, Laila, Lailie, + Lakeisha, Lala, Lalasa, Lan, Lana, Landra, Lane, Lani, Lara, Laraine, Laralee, + Lari, Larissa, Lark, Latika, Latonia, Laura, Laurana, Laurel, Laurie, Laurinda, + Lauryn, Laveda, Lavern, Laverne, Lavinia, Lea, Leah, Leah, Leala, Leandra, Leba, + Ledah, Lee, Leigh, Leiko, Leila, Leilana, Lena, Lene, Lenor, Lenora, Lenore, + Leona, Leora, Leslie, Letha, Letitia, Levana, Lexine, Lia, Liadan, Lian, Liana, + Liane, Libby, Lien, Lila, Lilith, Lillian, Lillie, Lily, Limber, Lina, Linda, + Lindsay, Lindsey, Linette, Linnae, Linnea, Lisa, Lisette, Litsa, Liv, Liza, + Lois, Lokelani, Lola, Loni, Lora, Lore, Lorelei, Lorelle, Loretta, Lori, + Lorraine, Lotus, Louise, Lucille, Lucine, Lucretia, Lucy, Ludia, Luela, Luisa, + Lukene, Lukina, Lulu, Luna, Lydia, Lynda, Lynelle, Lynn, Lynnda, Lynnette, + Lyris, Lysel, Lysnadra, Mabel, Macaria, Machi, Maddy, Madelaine, Madelina, + Madeline, Madelon, Madelyn, Mady, Mae, Magan, Magara, Magdalen, Magdalena, + Magdaline, Magena, Magenta, Maggie, Mahala, Mahalia, Mai, Maia, Maida, Maisie, + Maitane, Maizah, Maj, Malaya, Malila, Malina, Malinda, Malka, Mallory, Malu, + Mamie, Manda, Mandara, Mandisa, Mandy, Mangena, Manon, Mansi, Manya, Mara, + Marcella, Marcia, Marcy, Maren, Margaret, Margaret, Margarita, Margo, Margot, + Marguirte, Maria, Mariah, Mariam, Mariama, Marian, Mariana, Marianna, Marianne, + Maribel, Marie, Mariel, Marietta, Marily, Marilyn, Marina, Maris, Marisa, + Marisha, Marissa, Marjani, Marjeta, Marjorie, Marlene, Marlo, Marmara, Marnie, + Marnina, Marsha, Marta, Martha, Marti, Martina, Mary, Maryann, Marybeth, + Marylou, Marzia, Matana, Mathea, Matilda, Matrika, Maud, Maura, Maureen, + Maurita, Mavis, Maxine, May, Maya, Meara, Meara, Meda, Medea, Meg, Megan, + Megara, Meghan, Mei, Meira, Mela, Melanie, Melantha, Melba, Melia, Melian, + Melina, Melinda, Melisenda, Melissa, Mellinio, Melodie, Melody, Melosa, Melva, + Mercedes, Meredith, Merele, Mesha, Meta, Mia, Miakoda, Michaela, Michele, + Michelle, Midori, Migina, Mignon, Mika, Millicent, Millie, Min, Mina, Minda, + Mindel, Mindy, Minerva, Minka, Minna, Minnie, Mira, Miranda, Mirem, Miremba, + Mireya, Miriam, Mirielle, Missy, Misty, Mitena, Mitexi, Mitzi, Moira, Mollie, + Molly, Mona, Monique, Moon, Morena, Morgan, Morgana, Morgance, Moria, Moriah, + Muriel, Myra, Nada, Nadia, Nadine, Nadya, Naia, Nailah, Naimah, Nalini, Namazzi, + Nami, Nan, Nana, Nancy, Nanette, Nantale, Naomi, Napea, Nara, Narda, Narmada, + Nasiche, Nastassia, Natalie, Natane, Natasha, Natesa, Naysa, Nazirqah, Neala, + Neci, Nediva, Neely, Nekane, Nell, Neola, Neoma, Neona, Neria, Nerine, Nerissa, + Netti, Neva, Nevada, Neysa, Nicia, Nicola, Nicole, Nicolette, Nika, Nikki, + Nimah, Nina, Niobe, Niola, Nira, Nirvelli, Nissa, Nita, Nitara, Nixie, Noel, + Noelani, Noella, Nolita, Nona, Nona, Nora, Norah, Noreen, Nori, Noriko, Norma, + Nydia, Nyrna, Nyssa, Obelia, Octavia, Odelia, Odelia, Odera, Odessa, Odetta, + Odette, Odile, Ohanna, Okelani, Olathe, Olayinka, Olesia, Olga, Oliana, Olinda, + Olivette, Olivia, Ona, Onida, Opal, Ophelia, Oralie, Orane, Orenda, Oriana, + Orianna, Oriel, Oriole, Orlantha, Ornidaa, Paige, Pakuna, Palmiera, Paloma, + Pamela, Pandita, Pandora, Panthea, Pantzike, Panya, Panyin, Pascale, Patia, + Patience, Patricia, Patsy, Paula, Paulette, Pauline, Pavla, Pazia, Pearl, Peg, + Peggy, Pelagia, Pemba, Penda, Penelope, Peninna, Penny, Penthea, Peony, Perdita, + Perouze, Persis, Petra, Phaedra, Phedra, Philomena, Phoebe, Phylis, Phyllis, + Pia, Pier, Pila, Piper, Polly, Poloma, Porche, Portia, Priscilla, Prudence, + Prudy, Pyrena, Pythia, Qamra, Queena, Quella, Quenby, Quintina, Quiterie, + Rachel, Radella, Radinka, Rae, Rai, Raizel, Ramla, Ramona, Ramya, Randie, Rane, + Ranee, Rani, Raquel, Rashida, Rasine, Ratri, Raven, Rawnie, Rayna, Raynell, + Raziya, Reba, Rebecca, Regan, Regina, Reidun, Remy, Rena, Renata, Rene, Renee, + Rhea, Rhiamon, Rhianne, Rhiannon, Rhoda, Rhodanthe, Rhonda, Rhonna, Rhyssa, Ria, + Riane, Rica, Rihana, Rikki, Rio, Risa, Rita, Riva, Roanna, Roberta, Robin, + Robyn, Rochelle, Rohanna, Rona, Rorie, Rosa, Rosalind, Rosalinda, Rosalinde, + Rosaline, Rosanne, Rose, Roseanne, Rosemarie, Rosemary, Rowena, Roxana, Roxanne, + Ruby, Rumer, Ruth, Ruthann, Ryann, Ryanne, Ryba, Ryssa, Saba, Sabina, Sabiny, + Sabirah, Sabra, Sabrina, Sacha, Sachi, Sade, Sadira, Saffi, Safiya, Sagara, + Saidah, Sakari, Sakinah, Sakti, Sakura, Salihah, Salimah, Salina, Sally, Salome, + Samantha, Samara, Samirah, Sancia, Sandia, Sandra, Sandrine, Sandya, Sara, + Sarah, Sarai, Saraid, Saree, Sarena, Sari, Sarisha, Sasha, Sashenka, Satinka, + Savanna, Saxon, Scotia, Searlait, Season, Sebasten, Seema, Sela, Selena, Selina, + Selma, Semele, Senta, Serafina, Serilda, Sesha, Shaine, Shakira, Shako, + Shammara, Shana, Shanata, Shandra, Shandy, Shani, Shanley, Shanna, Shannon, + Shantay, Shantha, Sharman, Sharon, Sharri, Shashi, Shawn, Shayndel, Sheba, + Sheena, Sheila, Shela, Shelby, Shelley, Shelly, Sherri, Shika, Shin, Shina, + Shira, Shirley, Shobi, Shoshana, Sibley, Sibongile, Sibyl, Sidonia, Sidra, + Sierra, Sigourney, Siham, Sileas, Silva, Silvia, Simba, Simone, Sine, Sinead, + Siobhan, Siran, Sirena, Siroun, Sitara, Sitembile, Siv, Sive, Skyler, Sofi, + Solana, Solange, Soledad, Solita, Sondra, Sonia, Sonja, Sonya, Sophia, Sophie, + Sophronia, Spica, Stacey, Stacia, Stacy, Stefania, Stella, Stephani, Stephanie, + Ster, Stesha, Stockard, Storm, Sukatai, Suki, Sumi, Summer, Sun, Susan, Susanna, + Suzanne, Svetlana, Sybil, Sydelle, Sydney, Syeira, Sylvia, Syna, Synia, Tabitha, + Taci, Tacita, Tadi, Taffy, Tahirah, Tai, Taima, Tainn, Taipa, Taite, Taka, + Takara, Takiyah, Takoda, Talasi, Tale, Talia, Talia, Talitha, Tallulah, Tam, + Tama, Tamara, Tamary, Tamma, Tammy, Tanaka, Tani, Tansy, Tanya, Tao, Tara, Tate, + Tatyana, Tawnie, Tawny, Tayce, Taylor, Teague, Tehya, Tekla, Temina, Terentia, + Terese, Terrilyn, Tertia, Teryn, Tesia, Tess, Tessa, Thadea, Thais, Thalassa, + Thalia, Than, Thana, Thara, Thea, Thekla, Thelma, Theodosia, Theone, Thera, + Thirza, Thora, Thyra, Tia, Tiara, Tienette, Tierney, Tierra, Tiffany, Tilda, + Timandra, Tina, Tiponya, Tirza, Tivona, Tobey, Tola, Tora, Tori, Tory, Tosia, + Tove, Tracey, Tracy, Treasa, Tresa, Treva, Trianon, Tricia, Trilby, Trina, + Trind, Trish, Trisha, Trudy, Tryne, Tryphena, Tyne, Ula, Ulani, Ultima, Uma, + Una, Undine, Undine, Urania, Uriana, Ursula, Uta, Vala, Valentina, Valeria, + Valerie, Valeska, Valonia, Valora, Vanda, Vanessa, Vanora, Vanya, Vashti, Veda, + Velika, Velma, Venesssa, Vera, Verena, Verity, Veronica, Vesta, Vevila, + Victoria, Vidonia, Violet, Violet, Violetta, Virginia, Viridis, Viveka, Vivian, + Voleta, Vrinda, Wakanda, Wanda, Waneta, Wendy, Whilhelmina, Whitney, Wijdan, + Willow, Wilma, Wilona, Winda, Winema, Winifred, Winna, Winona, Wynee, Wynn, + Wynona, Xanthe, Xaveria, Xaviera, Xena, Xenia, Ximena, Xylia, Xylona, Yachne, + Yanice, Yarmilla, Yasmeen, Yasmin, Yelinda, Yenene, Yesmina, Yetta, Yeva, + Yokiko, Yolanda, Yolie, Yonina, Yovela, Yvella, Yvette, Yvonne, Zada, Zahara, + Zahirah, Zahra, Zakia, Zalea, Zalika, Zaltana, Zandra, Zara, Zarah, Zaza, + Zehava, Zelda, Zelenka, Zelia, Zella, Zena, Zenaide, Zenia, Zerlinda, Zeva, + Zevida, Zia, Ziazan, Zigana, Zila, Zina, Zinnia, Zita, Zoe, Zola, Zona, Zora, + Zorah, Zorda, Zosia, Zuleika, Zulema, Zuza, Zuzanny, + Acacia, Acala, Acana, Adamona, Adamys, Adene, Advirtone, Aegameia, Aegiona, Aidab, Aidey, Aidialla, Aila, Ailen, Ailid, Akani, Akema, Akemi, Akiti, Akrenti, Albandra, Albanne, Albuta, Alcede, Aleann, Alid, Alida, Alina, Alista, Alma, Almana, Almiadan, Almialla, Almideh, Almola, Alwera, Amalika, Amenet, Amertari, Amunet, Andena, Angeranne, Angerya, Antseni, Antungulfi, Anwilliona, Apach, Aracelia, Aracelice, Arcenci, Argeliona, Ariannena, Ariannimede, Arnburi, Arnorna, Arolini, Artala, Artiana, Aruma, Aseve, Asiusi, Astera, Astertari, Astorose, Astut, Atiti, Awiana, Awonia, Axfuna, Axirye, Axuane, Ayra, Azidna, Azila, Azira, Azu, Azuru, Badinisa, Badphylini, Baha, Bahenet, Bahiti, Bahose, Balbuba, Balloda, Bamina, Bany, Barte, Barthi, Basryiri, Bastika, Bastorose, Basturet, Batina, Bauce, Becaith, Becamh, Beceen, Becialla, Becorla, Becuma, Begwenna, Beigini, Beldrinka, Belli, Bencanise, Bencethena, Benta, Beve, Bimusa, Binah, Bine, Binnaid, Binnan, Binne, Binnomh, Bithanne, Bithelle, Blosa, Bolbare, Bolbe, Bolbele, Bolberia, Bonaid, Boni, Bonyn, Bovgina, Bra, Brey, Brodina, Brona, Bunet, Bungene, Bura, Cairistya, Cairorla, Cairuma, Calla, Callele, Callimede, Callys, Camoni, Canfewini, Cardata, Cardina, Cardiope, Carmione, Caseg, Casideh, Catea, Catida, Catilia, Catinome, Catonia, Catya, Cedaci, Ceia, Ceria, Chah, Chapintli, Chiza, Chligadusi, Cika, Cile, Ciollelma, Cionaid, Cioneann, Cionene, Claurone, Clionee, Clonielani, Coactliliztli, Coline, Collanna, Comen, Comey, Comuma, Conaida, Corose, Cota, Creidnideh, Cuitliztli, Curt, Dairele, Dairis, Dalema, Damianige, Damianonia, Damimede, Dana, Dani, Deallee, Deidamida, Dellodi, Delonna, Dena, Dendisa, Dendufemi, Dendura, Dengance, Derani, Devabel, Devaith, Devann, Devilia, Devin, Diadan, Dira, Disa, Dolini, Domena, Doneia, Doneis, Donele, Donon, Donsengri, Drenore, Dromari, Earlon, Eavan, Eaveg, Eavilis, Ebiah, Echanne, Echeemah, Echidna, Echira, Echynia, Edamh, Efine, Eilamh, Eile, Eilin, Eilorla, Elvatea, Elvee, Elveh, Elvella, Elvelle, Elvia, Elvorla, Emata, Emauce, Emia, Emista, Emraye, Endralda, Enione, Envine, Epana, Epantia, Epare, Epidna, Epionera, Epithea, Epona, Eralla, Ercani, Erdini, Eremay, Eriela, Erliani, Ernalla, Ernia, Ernon, Erranti, Errela, Esmena, Etheria, Euandrauce, Euandrimede, Euandriope, Euandronia, Euandrope, Evemi, Fadira, Faid, Faidi, Fallen, Falliana, Fallideh, Falline, Fann, Farooka, Fedelmi, Felatea, Feleria, Felethara, Femari, Fenon, Firwari, Fithenique, Fleola, Flidy, Fluonile, Fona, Fuanusa, Fuhsera, Fulidari, Fuma, Gaisi, Galameia, Galata, Galatauce, Galatonia, Galidna, Galithea, Ganne, Gayfa, Geiwardi, Geleh, Gelini, Gerine, Gestine, Gethana, Ghellini, Ghunihaha, Giana, Gilbrarda, Gitta, Glesmeli, Glige, Gollajeni, Gomh, Goringasta, Gormleg, Gormleh, Gormlele, Gormlen, Graniadan, Grice, Grulinga, Grynautia, Gryneia, Grynida, Gweini, Gwetudi, Gyaseli, Hacia, Haeneni, Hafshiti, Halacana, Halacantia, Halacia, Halingi, Hamina, Hani, Harisi, Hatshepsahra, Hatshepsika, Hatshepsirah, Hatshepsisa, Hatshepsut, Hecantia, Hecilia, Hecilis, Hecubenta, Heldouna, Heqa, Heqet, Heqorose, Hequru, Herophene, Hertina, Hilis, Hirlidi, Hiza, Hjorga, Hlorira, Horacia, Horacina, Horauce, Horige, Horile, Horiona, Hubimunda, Hudenda, Hynllini, Iktyabra, Ilana, Ileia, Ilista, Ilya, Inari, Ininome, Innusa, Innusi, Iphantia, Iphota, Irda, Irtusi, Isina, Ivance, Jadi, Jasteni, Jerdstroma, Jertilusa, Jhanoora, Jide, Jidrana, Jorieldi, Josepa, Josileta, Jowella, Judori, Juryroli, Kacadan, Kacana, Kacinne, Kairaraena, Kakrani, Kakrertari, Kakrira, Kakrirah, Kakrura, Kaleis, Kane, Kanidna, Kaninah, Kasoleta, Kayida, Keavann, Keavene, Keavon, Keavy, Kedrulla, Keen, Kele, Kenet, Kephema, Kephuane, Keri, Kesi, Keve, Kevee, Kevia, Keviana, Kevilis, Kevine, Kevyn, Khantima, Kinne, Korderi, Kornauce, Kornele, Korose, Kura, Lamione, Lamona, Larautia, Larimede, Larimi, Lata, Ledurina, Lelare, Lenilma, Lertini, Leta, Liadan, Liadilis, Liardi, Liscouli, Lissaleni, Llengwiona, Llimbrati, Llira, Londina, Lorandra, Luisa, Luisideh, Luisine, Mafarte, Mafione, Mafisa, Maideni, Malta, Malvige, Mandisa, Mann, Mara, Margone, Margren, Margrinne, Marige, Marti, Marunda, Materia, Matita, Matota, Mavee, Maveen, Mederna, Meezi, Mehtani, Mehtari, Meina, Meninni, Meshkera, Meshkufemi, Messauce, Messota, Metawee, Mia, Milie, Mimehinsda, Minardi, Minayna, Mine, Mintli, Mira, Miriance, Miskarla, Miusa, Mochana, Modiri, Momevini, Monalika, Monan, Monarte, Monene, Monifa, Moninnid, Moninnideh, Monunet, Monuru, Mony, Morgeri, Mufemi, Mumbili, Mumera, Muminah, Mureg, Mureh, Muriney, Murisseuta, Myame, Myne, Nabel, Nabirye, Nabisa, Nabiti, Nahose, Nailiah, Nailinah, Nailisa, Nalima, Namadan, Nari, Naristusa, Nauteia, Nautidna, Nautynia, Nealaid, Nealeh, Nealele, Nealene, Nealomh, Neemah, Nefari, Nefertila, Nefertorose, Nefisa, Nefiza, Nelanne, Nelista, Nella, Nelope, Nema, Nenami, Nenet, Nenwetha, Nertari, Nessaid, Nessann, Neve, Niamen, Niamiana, Niamid, Niamy, Niglre, Ninah, Ningle, Nira, Nirabi, Nirah, Nirieda, Niscina, Nish, Nola, Nolaith, Nolee, Nolia, Nolidna, Nolimede, Nolunda, Noly, Nurah, Nuralika, Nurenet, Nuridna, Nurtrera, Nydanne, Nydea, Nydia, Ollita, Olufertari, Olufidna, Olugi, Omahra, Omarte, Omemi, Omi, Omirah, Omisa, Omiti, Omoru, Omufemi, Omut, Onara, Ondini, Onduzi, Ongarta, Onika, Orsha, Palleria, Pandra, Paneia, Pasithea, Pasithimede, Pasithita, Peis, Phircini, Piaritha, Pione, Pita, Pragnienina, Rabarte, Rabera, Rabiza, Radimi, Rafsera, Rais, Rana, Ranfroti, Rari, Rehika, Reneta, Reningi, Renza, Reudarda, Rhidna, Riana, Rila, Rilis, Rinya, Rionach, Rione, Rionee, Rionia, Risa, Roindusi, Ronasi, Rosarni, Ruane, Ruda, Rudminka, Rukshuri, Ruma, Rura, Rusalasa, Rusiri, Ryach, Ryais, Ryala, Ryella, Ryia, Rylee, Ryley, Rylia, Ryliana, Rylid, Ryline, Sabari, Sabet, Sabi, Sabione, Saburt, Saeringi, Sagi, Sagione, Sagira, Sagurt, Sakhmahra, Sakhmifa, Sakhmira, Sakhmura, Salimede, Salvata, Salvede, Salveis, Salvilis, Sanera, Sani, Sanira, Sanu, Sanura, Sanurt, Sanuru, Sareach, Sareg, Sarilis, Satini, Satrimiri, Seira, Semana, Semi, Seminusa, Sena, Sene, Senire, Sera, Serbudarda, Shafi, Shangrane, Shanlala, Shanleg, Shanlyn, Sharifa, Sharurt, Sheleneka, Shi, Shondais, Shondorla, Shu, Shuhasima, Shuhimi, Silamh, Silari, Silee, Siley, Silla, Simari, Siobhen, Siobhene, Siobhideh, Siobhyn, Skagogi, Sleeva, Sonwodusi, Sorchana, Sorchella, Squasesa, Suada, Suadelle, Suadene, Suadile, Suadona, Suadya, Suane, Subira, Subona, Subu, Subut, Sudila, Suerica, Suma, Sumdeena, Sundikshara, Svari, Swiura, Symosina, Synnena, Tabel, Tahi, Tahila, Tahrin, Tahu, Tahufemi, Takijigti, Tallina, Tallini, Tarrala, Tauret, Taurifa, Taurorose, Taururu, Teach, Tegwena, Tehiztli, Telana, Tenodreni, Tethantia, Tethelia, Tethuba, Tethys, Tha, Thalika, Thani, Tharte, Themenet, Themose, Thi, Thifa, Thonmari, Throri, Tidbetara, Tige, Timice, Timidna, Tirye, Tisa, Tocilchini, Tollara, Torbula, Toshkendorja, Treveh, Trevia, Trevyn, Tuane, Tuinase, Tuire, Tuirideh, Tujaha, Tunet, Tunysa, Tura, Turi, Tussena, Uceti, Undura, Urina, Urma, Usila, Usta, Vagoni, Valinome, Vana, Vautia, Verna, Vernile, Vernista, Vidigisi, Vienne, Vigeia, Vigilis, Vikosa, Vimandacia, Vimandana, Viriona, Vyegnisa, Welda, Welyvi, Xoacha, Yessoneli, Zahra, Zahret, Zahrione, Zaizerni, Zalema, Zalose, Zaluane, Zana, Zari, Zaseka, Zelkeshi, Zene, Ziah, Zigworti, Zila, Zinahi, Ziope, Zony, Zorgobi, Zorsumi, Zuhda, Zuru + + + Aaron, Aasin, Abbott, Abdel, Abdiel, Abel, Abijah, Abner, + Abraham, Abran, Ace, Achilles, Ackerley, Adair, Adam, Addison, Adeben, Adem, + Adiran, Adlai, Adler, Adley, Admon, Adolph, Adon, Adonis, Adrian, Adriel, + Aeneas, Agustin, Ahearn, Ahmik, Ahren, Aidan, Aiken, Aimery, Aitan, Ajayi, + Akando, Akbaar, Akello, Akil, Akshay, Alan, Aland, Alano, Alaric, Alastair, + Alben, Albert, Alcander, Alcott, Alden, Alder, Aldrick, Alec, Alek, Aleksy, + Aleron, Aleser, Alex, Alexander, Alfred, Alger, Alim, Alistair, Allaard, Allan, + Allard, Allen, Alonzo, Alphonse, Alphonso, Alston, Altair, Alton, Alvin, Amadeo, + Amadi, Amado, Ambrose, Amiel, Ammon, Amos, Amsden, Anders, Andre, Andreus, + Andrew, Andrey, Andries, Angelo, Angus, Anker, Anoki, Ansel, Anselme, Ansley, + Anson, Anthony, Antonio, Anwar, Archer, Archibald, Ardon, Aren, Ares, Argus, + Ari, Aricin, Arion, Aristo, Aristotle, Arkin, Arlen, Arley, Arlin, Arlo, Arman, + Armen, Armon, Armstrong, Arne, Arnold, Arnon, Aron, Arpiar, Arsen, Arsenio, + Arthur, Ashby, Asher, Ashford, Ashlin, Ashon, Ashur, Athan, Atheron, Atman, + Audric, Audun, Augustin, Augustus, Aurek, Austin, Averill, Avery, Axel, Bae, + Bailey, Baingana, Bakari, Balbo, Balder, Baldwin, Bale, Balendin, Bali, Balin, + Balint, Bancroft, Bandele, Bane, Banning, Baran, Barclay, Barden, Bardo, Bardon, + Barnabas, Barnaby, Barnett, Barney, Baron, Barrett, Barry, Barse, Bart, Barth, + Bartholomew, Barton, Basil, Bastiaan, Baul, Bavol, Baxter, Bay, Bayani, Bayard, + Baylor, Bazyli, Beacan, Beagan, Beaman, Beau, Beaumont, Beauregard, Beck, + Beldon, Belen, Bem, Beman, Ben, Benedict, Benen, Benjamin, Bennett, Benson, + Bent, Bentley, Benton, Berenger, Bergren, Berk, Berkeley, Bernard, Bersh, Bert, + Berthold, Berton, Bertram, Beval, Bevan, Bialy, Bilal, Bishop, Bitalo, Bjorn, + Blade, Blaine, Blair, Blaise, Blake, Blaz, Blorn, Bo, Boden, Bogart, Bohdan, + Bolton, Bond, Booker, Boone, Borden, Boris, Botan, Bowie, Bowman, Boyce, Boyd, + Boyden, Brad, Braden, Bradford, Bradney, Brady, Bram, Bran, Brand, Brandeis, + Brandon, Brant, Braxton, Bray, Braz, Brazil, Bren, Brencis, Brendan, Brendon, + Brennan, Brent, Brentan, Bret, Brett, Brewster, Briac, Brian, Briand, Brice, + Brieg, Brinley, Brishen, Brock, Broderick, Brodny, Brody, Bronson, Bront, Bruce, + Bruno, Brutus, Bryan, Bryant, Bryce, Bryson, Buck, Bud, Budo, Burgess, Burhan, + Burian, Burke, Burl, Burr, Burton, Byran, Byron, Cadeo, Cador, Caedmon, Cailan, + Cain, Caine, Calder, Caldwell, Caleb, Calvin, Cam, Camden, Cameron, Candan, + Canton, Canute, Carden, Carey, Carl, Carlin, Carlo, Carlos, Carlton, Carr, + Carrick, Carrocio, Carroll, Carson, Carson, Carter, Carver, Casey, Casper, + Cassidy, Cassius, Castel, Cato, Caton, Cavan, Ceasar, Cecil, Cedric, Cemal, + Chad, Chadwick, Chaim, Chal, Chale, Chalmers, Chander, Chandler, Chane, Chaney, + Channing, Chapin, Chapman, Charles, Charlton, Chase, Chatha, Chauncy, Chayton, + Chen, Cheney, Chester, Chet, Chevalier, Chike, Chin, Christian, Christoph, + Christopher, Christos, Chuck, Ciceron, Ciro, Clarence, Clark, Claude, Clay, + Clayton, Clement, Cleveland, Clifford, Clifton, Clint, Clinton, Clive, Clyde, + Cody, Colby, Cole, Coleman, Colin, Collin, Colon, Colton, Coman, Condon, Connor, + Conrad, Conway, Corbett, Corbin, Corcoran, Cordell, Corey, Cornelius, Cort, + Coty, Courtland, Craig, Crandall, Creighton, Crispin, Crosby, Cullen, Cullin, + Culver, Curran, Curtis, Cynric, Cyrano, Cyril, Cyrus, Dag, Dagan, Dakarai, + Dakota, Dale, Dallin, Dalton, Daly, Damek, Damen, Damian, Damien, Damion, Damon, + Dana, Dane, Daniel, Danior, Dannik, Dante, Daren, Darien, Dario, Darnell, + Darrel, Darrell, Darren, Daryl, David, Davin, Davis, Deacon, Dean, Decker, + Delaney, Delano, Delbert, Dellan, Delmore, Delsin, Deman, Dempsey, Dempster, + Denby, Dennis, Dennys, Denton, Denver, Der, Derek, Derrick, Derry, Deverell, + Devin, Devlin, Dewey, Diederik, Diego, Dieter, Dillon, Dimitri, Dirk, Dobry, + Dominic, Dominick, Donald, Donatien, Donato, Donnelley, Donnelly, Donovan, + Doron, Dougie, Douglas, Douglass, Dov, Doyle, Drake, Drew, Duane, Dugan, Duglas, + Duncan, Dunstan, Durand, Durriken, Dusan, Dustin, Dutch, Dwayne, Dwight, Dyami, + Dyastro, Dylan, Dymas, Eamon, Earl, Earle, Eaton, Edan, Edgan, Edgar, Edison, + Edmund, Edrin, Edward, Edwin, Edwin, Egan, Einar, Elad, Elden, Eldroth, Elek, + Eli, Elias, Elijah, Elkan, Ellery, Elliot, Elliott, Ellis, Ellsworth, Elmer, + Elmo, Elston, Elton, Elwood, Emanuel, Emil, Emilio, Emmett, Emo, Enoch, Enrico, + Enrique, Ephraim, Erek, Eric, Erik, Ernest, Erol, Errol, Erskine, Erwin, Eryx, + Essien, Esteban, Ethan, Eugene, Evan, Evander, Everett, Evzen, Ezekial, Ezra, + Fabio, Fairfax, Farley, Farrell, Faxon, Felix, Felix, Fenn, Fenton, Fergus, + Ferran, Ferris, Fielding, Filbert, Filmore, Finlay, Finley, Finn, Finnigan, + Fisk, Fitzgerald, Fletcher, Flindo, Flint, Floyd, Flynn, Forbes, Forrest, + Forsythe, Foster, Foster, Francis, Franek, Frank, Franklin, Frasier, Frazer, + Frazier, Fred, Frederick, Fremont, Fritz, Fuller, Fulton, Gabe, Gabriel, Gage, + Galen, Galeno, Galvin, Gamble, Gannon, Gareth, Garfield, Gargan, Garner, + Garrett, Garrick, Garridan, Garrison, Garritt, Garth, Garvin, Gary, Gaspar, + Gaston, Gavin, Gavrie, Gaylord, Gaynor, Geoff, Geoffrey, Geoffry, George, + Gerard, Gerik, Germain, Gerry, Gideon, Gilberto, Giles, Ginton, Givon, Glen, + Glenn, Glenno, Godfrey, Gordon, Gordy, Gorman, Grady, Graham, Gram, Granger, + Grant, Granville, Grayson, Greg, Greger, Gregor, Gregory, Gresham, Griffen, + Griffith, Guilhem, Gunnar, Gunther, Gus, Gustave, Guthrie, Guy, Hackett, Hadden, + Hadi, Hadley, Hadrian, Hagan, Hal, Halden, Hale, Halian, Halsey, Hamilton, + Hamlin, Hank, Hans, Harden, Hardy, Harith, Harlan, Harman, Harold, Harper, + Harrison, Harry, Hart, Hartley, Harvey, Hassan, Hastin, Hastings, Hayden, Hayes, + Haynes, Heath, Hector, Helaku, Henning, Henry, Herbert, Herman, Herschel, + Hilliard, Hilton, Hiroshi, Hobart, Hogan, Holden, Holt, Homes, Horace, Horton, + Houston, Howard, Howrence, Hoyt, Hugh, Hugo, Humphrey, Hunter, Huntley, Hyman, + Iain, Ian, Ilias, Ingmar, Ingram, Ira, Irvin, Irving, Irwin, Isaac, Isaiah, + Israel, Itzak, Ivan, Ivar, Jabari, Jabir, Jack, Jacob, Jacobe, Jacques, Jacson, + Jacy, Jafar, Jagger, Jake, Jal, Jaleel, Jamal, James, Jamison, Jared, Jarek, + Jarman, Jaron, Jarrod, Jarvis, Jason, Jasper, Javan, Javier, Jay, Jebidiah, Jed, + Jedidiah, Jedrek, Jeff, Jeffrey, Jelani, Jeremiah, Jeremy, Jerolin, Jerome, + Jeromy, Jerzy, Jesse, Jessee, Jethro, Jibril, Jin, Jiro, Jivin, Joel, Johann, + John, Jolon, Jonah, Jonathan, Jonathon, Jordan, Jordon, Jorgen, Jorvin, Joseph, + Joshua, Judd, Jude, Julian, Julius, Juma, Jung, Justin, Kadin, Kai, Kaikara, + Kaladin, Kalb, Kale, Kalil, Kalkin, Kalman, Kamal, Kane, Kaniel, Kardal, Karl, + Karsten, Kasch, Kasen, Kaspar, Kateb, Kayin, Keane, Kearney, Kedar, Keefe, + Keelan, Keenan, Kegan, Keir, Keir, Keith, Kelby, Keleman, Kell, Kellen, Kelvin, + Ken, Kenan, Kendall, Kendrick, Kenelm, Kenley, Kennard, Kennedy, Kenneth, Kent, + Kenton, Kenyon, Keona, Ker, Kerby, Kern, Kerry, Kers, Kersen, Kerwin, Kester, + Kevin, Khalil, Khoury, Kiefer, Kieran, Kiernan, Killian, Kin, Kinnel, Kinsey, + Kintan, Kip, Kirby, Kirk, Kiyoshi, Kliftin, Klog, Komor, Kontar, Krischan, + Krister, Kurt, Kyle, Kyler, Laethan, Laird, Lamar, Lamont, Lance, Lander, + Landon, Lane, Lang, Larry, Lars, Lawler, Lawrence, Lazarus, Lear, Lee, Leif, + Leighton, Leland, Len, Lennon, Lennor, Lennox, Lensar, Leo, Leon, Leonard, + Leron, Leroy, Lester, Lev, Levi, Lewis, Lewis, Li, Liam, Like, Lincoln, Lindsey, + Lionel, Llewellyn, Lloyd, Logan, Loren, Lorenzo, Lorne, Louis, Lowell, Lucas, + Lucian, Luis, Luke, Lukyan, Lunt, Luther, Lyle, Lyndon, Lysander, Mac, Macer, + Mack, Mackenzie, Magnus, Malcolm, Malik, Manco, Mandek, Mander, Manfred, + Manning, Mansur, Manuel, Marc, Marcos, Marcus, Marden, Marek, Mario, Mark, + Markham, Markos, Marlin, Marlon, Marlon, Marshal, Marshall, Marsten, Martin, + Martingo, Marvin, Mason, Matai, Mateo, Mather, Matthew, Matthias, Maurice, Max, + Maxwell, Maynard, Mayon, Mead, Meka, Mercer, Merill, Merle, Merrick, Merrik, + Meyer, Micael, Michael, Migon, Miguel, Mike, Mikkel, Mikos, Miles, Miles, Milo, + Milton, Miner, Mitchell, Monroe, Monte, Morgan, Morley, Morris, Mortimer, + Morton, Morven, Morz, Motega, Mukasa, Murdoch, Murdock, Murphy, Myles, Myron, + Naeem, Nalren, Nantan, Nathan, Nathaniel, Neal, Neale, Neil, Nelek, Nelson, + Neron, Nestor, Nevan, Neville, Nevin, Nevin, Nicanor, Nicholas, Nigel, Nikolos, + Nils, Noah, Nodin, Noe, Nolan, Norbert, Norman, Norris, Norton, Nuri, Nyle, + Oakes, Oakley, Ochen, Octavius, Odell, Odin, Odion, Odon, Ogden, Olaf, Olin, + Oliver, Omar, Ordano, Oren, Orion, Orman, Ormand, Orrin, Orson, Orville, Oscar, + Osgood, Osmond, Otis, Otto, Owen, Paco, Palmer, Paolo, Paris, Parker, Parnell, + Pascal, Patamon, Patrick, Patterson, Patton, Paul, Paulin, Pavel, Paxton, + Payton, Pearce, Peder, Pembroke, Penn, Percival, Perry, Peter, Peyton, Phearcy, + Philip, Phillip, Phillippe, Phoenix, Pierce, Pierre, Pierson, Pilan, Platon, + Porter, Prentice, Prescot, Prescott, Preston, Quentin, Quenton, Quillan, Quincy, + Quinlan, Quinn, Rad, Radcliffe, Radman, Rafael, Rafferty, Ragnar, Raidon, + Raleigh, Ralph, Ramiro, Ramon, Ramsay, Ramsey, Ranard, Rance, Randall, Randolph, + Ranen, Ranger, Rankin, Raoul, Raphael, Raul, Ravi, Ravi, Ravid, Ray, Raymond, + Raynor, Reade, Redford, Redmond, Reed, Reese, Reeve, Regan, Reginald, Regis, + Remington, Renaldo, Rendor, Renfry, Renny, Reuben, Rex, Reyhan, Rhett, Rhett, + Rhys, Ricardo, Richard, Richter, Rico, Rider, Ridgley, Rigby, Riley, Rimon, + Ringo, Ringo, Riodan, Riordan, Roarke, Robert, Roberto, Robi, Rockwell, Rod, + Roderick, Rodman, Rodney, Rodrigo, Roger, Roi, Roland, Roldan, Rolf, Ronald, + Ronan, Rooney, Rory, Roscoe, Ross, Roth, Rowan, Rowland, Roy, Royce, Ruben, + Rudd, Rudi, Rudyard, Rufus, Runako, Ruskin, Russ, Russell, Rusty, Rutherford, + Rutledge, Ryan, Ryder, Rylan, Sahale, Sahen, Salim, Saloman, Sam, Samien, + Sammon, Samson, Samuel, Sanders, Sandon, Sandor, Sanford, Sargent, Sarngin, + Sarojin, Saul, Saunders, Sawyer, Saxon, Schuyler, Scott, Sean, Sebastian, + Sebastien, Seif, Selby, Senon, Sergio, Seth, Seung, Severin, Sevilin, Seward, + Seymour, Shane, Shawn, Shea, Sheffield, Sheldon, Shen, Sheridan, Sherman, + Sherwin, Sherwood, Shing, Shunnar, Sidney, Siegfried, Silas, Simon, Sivan, Skip, + Skyler, Slade, Slevin, Smith, Solomon, Sorgan, Soterios, Spalding, Spencer, + Spenser, Standford, Stanley, Stanton, Stasio, Stefan, Stephan, Stephen, + Sterling, Stevan, Steve, Steven, Stewart, Stoke, Stoyan, Strom, Stuart, Subrey, + Sulaiman, Sullican, Sumner, Sutherland, Sutton, Sven, Sylvester, Tab, Tabari, + Tad, Tadi, Tai, Tajo, Talbart, Talbot, Talman, Talos, Tanek, Tanner, Tano, Taro, + Tate, Taurin, Taylor, Tem, Terence, Terrence, Terrill, Terry, Thaddeus, Thai, + Thaman, Thane, Thanos, Theobald, Theodore, Theron, Thierry, Thomas, Thorpe, + Thurston, Thurston, Tibalt, Tiernan, Timothy, Titus, Tobias, Toby, Tod, Todd, + Tomas, Tong, Tor, Torin, Torrance, Townsend, Travers, Travis, Tremain, Tremaine, + Trent, Trevor, Trey, Tristan, Troy, Tryon, Tucker, Tully, Tyee, Tyler, Tymon, + Tyrone, Upton, Uriah, Urian, Van, Vance, Vaughn, Vern, Vernon, Victor, Vincent, + Vinson, Virgil, Vito, Vlad, Vladimir, Vokes, Volf, Wade, Wagner, Walden, Waldo, + Walker, Wallace, Wally, Walter, Ward, Warner, Warren, Watson, Waylan, Wayland, + Waylon, Wayne, Webb, Webster, Wendell, Wesley, Weston, Weylin, Whitaker, Wilfen, + Will, Willard, Willem, William, Wilson, Winston, Winthrop, Wlby, Woody, Wyatt, + Xavier, Xenos, Xerxes, Ximen, Yakecan, Yale, Yancey, Yardley, Yarin, Yerik, + Yero, Yervant, York, Yusuf, Yves, Zachariah, Zachary, Zackery, Zaid, Zaide, + Zane, Zaniel, Zann, Zared, Zarek, Zeke, Zenon, Zion, Ziven, Zorn, + Aavold, Abamun, Abar, Abasarmer, Abasasi, Abasi, Abasok, Abasuris, Abaza, Abengh, Abi, Abubak, Abubapis, Abubenes, Abubil, Abubothmes, Abubukuh, Aburis, Acalric, Acassus, Achades, Achalle, Achassus, Achiades, Aciades, Acrisares, Acrisias, Acrisorus, Actabus, Actavian, Acteri, Actiades, Adacht, Adarc, Adeh, Adell, Adilof, Adulf, Adur, Aegana, Aegen, Aegercer, Aegidaeus, Aegidaime, Aegides, Aegidi, Aennyn, Agymaza, Agymiptah, Ahnif, Ahoan, Ahoon, Ahuc, Akemheb, Alaldar, Albert, Alcidarioin, Alciderus, Alcidorin, Alcidulus, Alcura, Aldrick, Aldulf, Aleferi, Aleir, Alfer, Alod, Amalraccus, Amalric, Amalrostas, Amalrulio, Amargahn, Amargaidh, Amargean, Amargern, Amargionn, Amebak, Amenotek, Amenoteph, Amenoterit, Amenotes, Amenotigaru, Amenotun, Ames, Amiall, Amomel, Amon, Amos, Amugra, Amula, Amularioin, Amulin, Amulorian, Anamun, Andenn, Andfin, Andronercer, Anek, Anenou, Angalin, Angelio, Anhadru, Anhafra, Anhahar, Anhar, Anhekri, Anhibale, Anhophis, Anif, Anok, Anorard, Anror, Anter, Anuma, Aonearg, Aonemon, Aoney, Aonghach, Aonghaic, Aonghanlon, Aonghemon, Aonghon, Aonghur, Aonion, Aonus, Apar, Aparuti, Apenoteph, Apeti, Api, Ararassus, Arcenc, Arctalric, Arcticus, Arctio, Arim, Arken, Arnthiyn, Arpannus, Arpeades, Arpell, Arperi, Arpimer, Arull, Asak, Ascla, Asclerius, Asclicus, Aserit, Asim, Asoteph, Asuti, Atabalvi, Atabimer, Atabulas, Atabuluis, Atar, Ateus, Ati, Atif, Atit, Attalanus, Attalendin, Attalerias, Attalulus, Attelabus, Attelarras, Aufeades, Aufelus, Aufidas, Aufidatius, Aurel, Aurelic, Aurelius, Axean, Axearg, Azemon, Badra, Badrek, Badrekri, Badruris, Bakerit, Bakim, Bakophis, Bald, Balendares, Balenderius, Balendilius, Balenduis, Balides, Ballas, Ballius, Ballod, Bankm, Baraccantides, Baramon, Baramun, Barerit, Barigaru, Baril, Baris, Barram, Barranlon, Barrarg, Barreth, Bearacht, Bearelan, Bearur, Beatzer, Behdaruti, Behdeti, Behdit, Behdugra, Behdukuh, Behdymah, Belalvi, Belavius, Beler, Belicus, Belimus, Bendan, Bestell, Betlin, Birman, Bodenz, Boracus, Boraris, Borerus, Boteph, Brad, Bralis, Brallach, Brannour, Brede, Bremane, Briwayn, Brogal, Brogan, Brogarg, Brogion, Brolothel, Brur, Bulus, Buriter, Burric, Cadmilius, Cadmus, Cael, Cahionn, Cahogar, Cahur, Caimeu, Calbhachy, Calbhean, Calbhelan, Calbhon, Calbhus, Callach, Callervius, Callic, Canden, Cebak, Ceem, Cehel, Centelin, Cenwaeus, Cenworus, Cenwulf, Cephigius, Cephorian, Cerbengh, Cethig, Chamun, Cheem, Chibadru, Chibanthes, Chibapis, Chibit, Chibun, Chibuti, Chibymah, Chield, Chigah, Chigari, Chigaru, Chigenes, Chigu, Chigun, Chlelinar, Chligadus, Chullallach, Chulloc, Chullonar, Chullunn, Cianin, Cides, Cildine, Cimateu, Ciolmain, Clachungrik, Cladepius, Clades, Cladidus, Clatriel, Clonild, Codrus, Conafer, Conaldam, Conalder, Conaldoc, Conchaer, Conchall, Conchel, Conchoc, Conchur, Conlaic, Conlel, Connam, Connan, Connann, Connar, Cormahn, Cormel, Cormer, Cormin, Cormoan, Crak, Craldun, Crale, Crari, Creferi, Crekri, Cresphon, Cridrin, Cris, Cruuarc, Ctespha, Ctesphah, Ctesphale, Ctesphamsa, Ctesphanthes, Ctespheri, Ctesphon, Ctesphu, Cuauhimoc, Culan, Culann, Culet, Culionn, Culon, Culrink, Culull, Curahn, Curelan, Cuti, Dach, Daigh, Dair, Dakzig, Dall, Danlon, Darc, Dardaris, Darderus, Darp, Dasmeer, Debevale, Decaeus, Decualas, Decualespius, Decualin, Deri, Dexithalvi, Dexithelio, Diedeile, Dilius, Dion, Dismilane, Dobig, Domid, Domnann, Domner, Domnonan, Donam, Donar, Doner, Donionn, Donoon, Dor, Douar, Dragulus, Dragyc, Dubaloon, Dubalur, Durbit, Durin, Eachad, Eamha, Eamhonar, Echin, Edenn, Edian, Edmus, Edost, Edrerus, Edrestus, Edrion, Edrorus, Egman, Eile, Eiriant, Eithrel, Eithruarc, Eithrunn, Elalen, Elbin, Elerian, Eligastus, Eligentius, Eligulus, Elmaskir, Elulf, Emaigne, Emalus, Emanes, Emares, Emiall, Enat, Ene, Eniel, Entsen, Epion, Eraeus, Erall, Eremel, Eremyon, Eres, Eron, Eronicus, Eunnus, Eynsin, Fabraime, Fabromel, Fadaldun, Fadarmer, Fadekri, Faderi, Faderit, Fadim, Fadin, Fadiptah, Fagion, Fallach, Famon, Faru, Favian, Fazmos, Fedides, Fendaert, Fenoteph, Fenukafra, Fenukaru, Fenukeph, Fenukes, Fergad, Fergain, Fergal, Fergallach, Fergan, Fergar, Fergin, Fesphon, Fethun, Fias, Flavedides, Flavell, Flavias, Flinguronglening, Fonan, Fonduke, Fophis, Frede, Fredoran, Frorrenc, Froseph, Fulago, Fyon, Gach, Gachy, Gaeon, Gaer, Galvin, Galvull, Garchel, Geirand, Gelent, Gemud, Gend, Ghirig, Gillel, Gillionn, Gillonan, Gilrac, Gilrad, Gilrel, Gilret, Gilroy, Giro, Glaceus, Glepius, Glorfur, Gonan, Gonzelis, Gorton, Gosel, Gratavius, Groglob, Gromacus, Gromaris, Guarc, Gueanor, Guilaccus, Guilaeus, Guilas, Guruand, Gwenus, Gwerian, Gwielig, Gyth, Hakar, Hanamsa, Hanar, Hanarmer, Hani, Hanis, Hanthes, Harskyug, Heades, Hellenoc, Helt, Heradru, Herah, Herif, Herim, Heris, Hestus, Hetrand, Hicaluc, Hilana, Hilarian, Hileas, Hiler, Hilercer, Hilespius, Hiried, Hizziham, Hognag, Hophis, Hor, Horatulf, Horemhek, Horemhibale, Horocer, Huilbhrid, Huilig, Hulinon, Ibeferi, Idarg, Iethan, Ifamsa, Ihael, Ijael, Ikoan, Ilo, Ilodh, Ilus, Imar, Imon, Imuarc, Inibale, Iniheph, Ini-Herit, Inihit, Inihok, Inihoth, Inihukuh, Inihun, Inorus, Ipha, Iphis, Iremheb, Isadru, Ison, Issakari, Issamsa, Issankm, Issard, Issekri, Issim, Issugra, Issylt, Ithfus, Iuchar, Iucheth, Iuchogan, Iuchon, Iuchoy, Iuchur, Jadwin, Jatruk, Jeanitte, Jerus, Jewin, Jidin, Jolip, Jonus, Jor, Kactus, Kaidh, Kalin, Kall, Karanthakar, Karanthasi, Karanthes, Karanthuh, Karanthuris, Karanthuti, Karioin, Karion, Kazur, Kealler, Kealliall, Kealloan, Kedelos, Keelanlon, Keelemon, Keelet, Keelur, Keliane, Kellar, Kemon, Kenaigh, Kenall, Kenar, Kennachy, Kennaldar, Kenneth, Kennonan, Kernoc, Kestaccus, Kestalle, Kester, Kestercer, Kestidos, Kestonicus, Khaldeb, Khaldenes, Khalderit, Khaldiptah, Khaldon, Kharu, Khemu, Khu, Kiades, Kibale, Kides, Kirliar, Klaudald, Klaudius, Korder, Kostas, Kostion, Kostorus, Kothmes, Krunarlek, Kusinif, Kutadru, Kutanthes, Kutebak, Kutemheb, Kutis, Labir, Lain, Land, Lanlon, Laris, Larkel, Larkur, Larmet, Larorian, Laudelius, Laudis, Lavonastus, Lavonerias, Lavonyc, Lendald, Leonarioin, Leondard, Leonidos, Leonilius, Lertin, Lestus, Lillin, Lion, Lirnathel, Listuming, Llernamon, Llolant, Lochacht, Lochallach, Locharg, Lochogan, Lochogar, Lorcac, Lorciall, Lorcion, Lorcodh, Lorelius, Loreus, Lormares, Lormias, Lorulk, Lyliline, Lyllweth, Maidh, Malachy, Maldun, Malion, Malobar, Malogan, Maloon, Manaidh, Manann, Maney, Mar, Marcaic, Marcam, Marcan, Marinana, Marinercer, Marinos, Masabroc, Maurchiffo, Mebak, Meez, Meilyn, Melan, Mellur, Menamun, Menaruti, Meneb, Mener, Meneri, Menes, Menuris, Mercer, Merculk, Merild, Merus, Mervius, Meshe, Mesphon, Metabaeon, Metabago, Metades, Meti, Metocer, Mezen, Mezentactus, Mezentides, Mezzell, Miades, Mibah, Micyotl, Mion, Mocilmas, Modeston, Modestostas, Molan, Molen, Molorid, Morac, Moranlon, Morearg, Morens, Morerwel, Mores, Morion, Morionn, Moroon, Morur, Mosar, Moteph, Mothmes, Mudeen, Mugra, Mukuh, Murchad, Murchuarc, Murchur, Nadaldun, Nadaza, Nader, Naderu, Naduh, Nadymah, Naeem, Nainn, Nakyug, Nale, Naramias, Narmadru, Narmak, Narmakar, Narmeb, Narmeph, Narmeri, Narmil, Narmukuh, Narmuris, Naruti, Naunild, Nechtunn, Neghain, Neghar, Neghiall, Nemgad, Nemgaigh, Nemgaldar, Nemganlon, Nemgern, Nemghan, Nerbetan, Neri, Nern, Nerorian, Neudidor, Neziah, Nikalind, Ningle, Nogan, Nonce, Noth, Numederi, Numedides, Numedon, Numicus, Numorian, Nuti, Nwyryl, Octaimus, Octavian, Ojankm, Olingard, Omasi, Onago, Onak, Onembald, Onigaru, Onnan, Onurah, Onuramsa, Onureb, Onymah, Ophanie, Oreh, Osahadru, Osahar, Osahari, Osaharmer, Osahebak, Osahi, Osahymah, Oserit, Osson, Ottallin, Ottell, Oxerias, Ozador, Ozarras, Pacht, Padir, Painn, Pallana, Pallantedides, Parnalvi, Parnassaeus, Parnasselis, Parnassis, Parnedides, Parnel, Patrair, Patrann, Patroon, Patryon, Paumbeve, Pedides, Periphetura, Periphis, Phair, Phaldar, Phon, Phull, Pirraud, Piust, Prospercer, Prospulus, Publago, Publalle, Publulio, Pull, Rafaidh, Rafainn, Rafar, Rafer, Rafoy, Ragair, Ragallael, Ragallan, Ragallann, Ragey, Rakllakari, Rakllamsa, Rakllaza, Rakllenes, Raklles, Rakllis, Rakllophis, Raldar, Ramir, Ramsafra, Ramsamon, Raruti, Ravah, Regel, Regelan, Regemon, Regon, Regunn, Reru, Retelias, Riddan, Riddion, Riddoc, Riddormac, Ridin, Rigepius, Riges, Rigo, Rigorin, Rigos, Rind, Rindis, Rinorus, Rodinot, Rogan, Ronemon, Roney, Ronnainn, Ronoc, Ronur, Ruarad, Ruarar, Ruarer, Ruarern, Rublob, Rufentius, Rufons, Rufos, Rufus, Rulan, Rulio, Samig, Sardah, Sareem, Sari, Saru, Scanlael, Scanlionn, Sebamun, Sebaru, Sebeph, Seberit, Sebesphon, Sekshar, Septulk, Septulus, Seradru, Serah, Sercin, Seregar, Serenes, Seresphon, Sern, Sertold, Servel, Setankmaru, Setankmaza, Setankmek, Setankmon, Setankmuti, Shalik, Shanezek, Shirif, Sidus, Sihal, Simmun, Sintl, Siptigaru, Siptophis, Sirient, Sithall, Sithunn, Sithur, Skjold, Sloan, Soaloy, Soccoreus, Soraccus, Soractalion, Soraime, Sorarras, Steruan, Sualtaidh, Sualtam, Sualtearg, Sualtormac, Sualtuarc, Suma, Sundraler, Svar, Syon, Tadin, Tair, Tal, Talnoll, Tammuc, Tarlach, Tarlarc, Tarnst, Tearg, Teben, Tefak, Tefamon, Tefebak, Teferi, Teferit, Tefesphon, Tefibale, Tefif, Tefukuh, Tefuris, Teginshae, Teid, Teltendo, Tespius, Thak, Thamun, Theb, Thekri, Theoras, Thespana, Thibale, Thides, Thimus, Thonmar, Thorion, Thror, Thugra, Thulus, Thuta, Thutakar, Thutale, Thutmafra, Thutmahar, Thutmakar, Thutmamon, Thutmarmer, Thutmekri, Thutmil, Tiarnur, Tias, Tiballe, Tibelis, Tiberomel, Tiberulf, Tibones, Tirbid, Tispor, Tius, Toon, Tormafer, Tormaic, Tormainn, Tormall, Tormean, Tormonan, Tormormac, Trelle, Trigwiner, Trocio, Tuathahn, Tuathaigh, Tuathelan, Tulalion, Tulio, Turgach, Turgan, Turganlon, Turgarc, Tutha, Tuthemu, Tuthenoteph, Tuthes, Tuthil, Tuthim, Udansent, Unsan, Urj, Utharath, Vaccor, Valannaime, Valannias, Valannon, Valerervius, Valereus, Valitego, Valulk, Vanekut, Varen, Vehn, Vestus, Vevimod, Victalin, Victeas, Victoravius, Victorerias, Vigus, Vilalus, Vilannus, Vilimus, Volmalric, Volmana, Volmorin, Wenenyr, Wimment, Winirus, Withecelm, Wlebbeald, Xicaque, Yechell, Ymene, Younan, Ysout, Yssolt, Zaffin, Zahid, Zahu, Zaiskin, Zavana, Zervius, Zetin, Zhorgauk, Zigius, Zimus, Zoraccus, Zorago, Zorides, Zorostas, Zorulio, Zuhd, Zumdeen + + + Kaltivel, Anshu, Maliel, Baratoz, Almonjin, Pariah, Ydoc, Llessue, Zhaan, Lorbna, Gragok, Thranger, Krygar, Grothelfiend, Centibis, Farthak, Laitesach, Crenabil, + Krullus, Legron, Noirkrach, Blassarrabb, Gragragron, Vendodroth, Flaggroth, Vilithrar, Po-Kor, Manglar, Verolyn, Gathfe, Skred, Flandrith, Stavinfeks, Steelbane, Crarigor, + Empalk, Perfus, Cassiel, Magor, Xtul, Vladeer, Scrill, Slix, Ix, Selminus, Victux, Hrallath, Heksen, Peinsluth, Keelus, Kra'an, Ankou, Turi'el, Azazel, Armarus, Grigorus, + Ga'ahp, Therion, Peirazo, Ponerus, Arhaios, Ophis, Vairocan, Arsat, Karnax, Taet, Nu'uhn, Oghmus, Arametheus, Terxor, Erdok, Archatrix, Jonar, Marth, Helzigar, + Tyrnak, Krakus, Marcus, Fel, Kaos, Doomor, Uhn, Malashim, Samael, Nelokhiel, Montobulus, Usuhl, Zu, Sophanon, Caryax, Daemeox, Phlegon, Aerophus, Euforus, Pallax, + Nikaon, Licouax, Lindsaon, Bastax, Magdanon, Thayax, Aethon, Ceridus, Galenon, Rhysus, Auramax, Aldrax, Anaxus, Luceus, Quarax, Ariax, Balarax, Vincenus, Loxias, Birhamus, + Lekax, Nyctinus, Myrsinus, Zelik, Kronos, Zakron, Velis, Chujil, Hygraph, Dyntrall, Zarus, Phoseph, Malkavik, Zevras, Vakel, Daklon, Zamog, Tavurk, Drakov, Zazik, Yyntrix, + Zazik, Fropoz, Noxtrag, Makzok, Galzan, Drakan, Drakzik, Vazmog, Aamon, Agalierept, Agares, Aglasis, Aiwaz, Astaroth, Ayperos, Azatoth, Azmodaeus, Azrael, Ba'al, Baal, + Barbatos, Bathim, Bathsin, Be'elzebub, Be'elzebubba, Bechard, Beelzebuth, Botis, Brulefer, Bucon, Buer, Clauneck, Clitheret, Cthulhu, Druzil, Eleogap, Eliezer, Eligor, + Eracove, Faraii, Fleurety, Frimost, Frucissiere, Fruitimiere, Glassyalabolas, Guland, Gusoyn, Hael, Haristum, Heramael, Hiepacth, Huictiigara, Humots, Khil, Maleki, Marbas, + Mersilde, Minoson, Moloch, Molech, Morail, Musisin, Naberrs, Nebiros, Nebirots, Nyarlathotep, Pentagnony, Proculo, Pruslas, Pursan, Rofocale, Sargatans, Satanchia, Satanciae, + Segal, Sergulath, Sergutthy, Sidragrosam, Sirchade, Surgat, Sustugriel, Tarchimache, Tarihimal, Trimasel, Vaelfar, Wormius, Sothoth, Y'reif, Zoray, Ronlyn, Merkul, Zasfus, + Zain, Doraghir, Danaghir, Staylin, Kraylin, Limnoch, Kranor, Kraenor, Kranostil, Kranostir, Lilithack, Terus, Thaelin, Thulack, Jiltharis, Garigor, Banothil, Bainothil, + Quain, Ilzinias, Mardis, Phalil, Adnoc, Leje, Akris, Sartan, Zejron, Pitt, Puzilan, Vantrom, Tyrin, Kuhl, Kwan, Viktor, Odilion, Raith, Bazerion, Tybevriat, Varn, + Keldor, Modoc, Varsan, Izlay, Slirith, Alcor, Vitar, Feenark, Sang'Qui, Lyticant, Aegnor, Aelfric, Ainvar, Arazion, Ardarion, Arkanis, Athrax, Baros, Begarin, Beynlore, + Burat, Cairne, Carthon, Chamdar, Ciric, Cruzado, Cyphrak, D'Harun, Daelon, Daktar, Darvain, Dracus, Dradar, Draelin, Draenor, Durodund, Eklor, Elrak, Fangorn, Farynthane, + Galtor, Gemma, Gragus, Irian, Israfel, Jaden, Jefahn, K'shar, Kalimus, Kallomane, Kanax, Kelnos, Kharn, Khir, Kragon, Kylnath, Larac, Lathis, Lenroc, Lonthorynthoryl, + Lorreck, Mattrick, Mazrim, Mazrim, Modrei, Morturus, Muktar, Murdon, Murron, Myndon, Mythran, Mytor, Nabius, Nalynkal, Nazgul, Paorin, Quillan, Rendar, Scythyn, Shilor, + Sobran, Soltak, Sorz, Taban, Telzar, Teron, Trethovian, Tyrnar, Ulath, Vandor, Vermithrax, Vlade, Volan, Wydstrin, X'calak, Xaelin, Xandor, Xarthos, Xaxtox, Xenix, Xiltanth, + Xylor, Xystil, Yazad, Yllthane, Ylthallynon, Ythoryn, Zalifar, Zathrix, Zunrek, Ath, Balmonth, Baranth, Bralmuth, Briarananth, Bucarth, Bullinth, Camalanth, Carmath, Caroth, + Cath, Chaneth, Charanuth, Chatianth, Colareth, Coliath, Craillanth, Craimath, Crairenarth, Duvenath, Emaleth, Esianth, Fith, Galzieth, Gamiath, Gatianth, Gebeth, Gith, Giyeth, + Glanarth, Glath, Gorianth, Hallath, Halzanth, Iacanth, Iasiluth, Jemiath, Jenith, Jeranth, Jeranuth, Jeth, Laneth, Malanenth, Mallieth, Mareninth, Menianth, Meranuth, Meth, + Mikenth, Mikieth, Mileth, Mneniath, Mneth, Mogonth, Morenelth, Moth, Naranoth, Nenith, Palararth, Paloth, Perinth, Plath, Polaneth, Polarinth, Polzeth, Poraneth, Porenorth, + Povarith, Quessith, Quevenanth, Rolieth, Rossoth, Roth, Sagrianth, Samaloth, Shayenth, Sholzianth, Shonniath, Shoth, Sidieth, Spamath, Spamuth, Spath, Speth, Tagmuth, Tarmuth, + Tiagorth, Tiakoth, Tiarath, Trabieth, Trananth, Traranath, Tueth, Weth, Wielgianth, Wieneth, Wienieth, Wirmarth, Lunamon, Ioneron, Reanthasala, Tiamar, Olrion, Lunorx, Jonin, + Olthonis, Taleron, Abraanthasala, Lunadine, Olthas, Tiansa, Valorx, Talrion, Caradine, Shinikon, Ti, Takhansa, Ollev, Sirorx, Abrae, Riisis, Lauralare, Darrion, Juderon, + Tieth, Ri, Takhorx, Raist, Riorx, Shinadine, Rias, Nophean, Amonter, Antarahi, Danyan, Darangan, Erantog, Gandong, Gioga, Iguga, Jimondan, Jioga, Jirondra, Loga, Ngran, + Ptangra, Ptorag, Rahiosar, Ranttira, Rosegh, Sanyarar, Sptor, Varon, Ytaro, Ytingahi, Zigodare, Zilahed, Bahiga, Cora, Egog, Eragontt, Gospt, Hirah, Hratapru, Hrontr, + Jiran, Jisa, Larange, Llan, Ndrant, Ngat, Ntar, Odzonte, Onya, Pigaheey, Pimahrao, Ragugieg, Thraheg, Uira, Ulloda, Vanyanga, Yttongal, Abotoram, Bimo, Cogo, Contod, + Conya, Daralora, Dzig, Erot, Ghilong, Guig, Imegig, Iong, Londod, Mispra, Pisa, Pronga, Ptorahee, Randrag, Tahra, Tong, Ttilo, Ugago, Ugaraga, Zontt, Arangama, Bigama, + Dongio, Espispto, Gimiosp, Ilabimo, Irall, Irgui, Jilarara, Lant, Lararo, Largimol, Mand, Marab, Ndron, Ntorahra, Onthi, Ragrara, Santega, Segiong, Ugra, Ulor, Vama, + Yarameg, Yttigal, Rieron, Olrion, Shinadine, Chislev, Caras, Ermohup, Hehsiel, Nahehoehsas, Oratinael, Eriel, Pocaspomon, Sorubiseriel, Aropet, Zases, Tpahihuz, Pael, Erorasl, + Aknrar, Ahelas, Pontael, Asiel, Nopoz, Rneenuziel, Namolon, Tuep, Henbolaron, Zedeson, Assoaz, Sotas, Tadal, Huslcir, Rutselomiel, Solael, Saez, Bettael, Ampahoel, Zatar, + Osaselael, Irpsan, Alael, Pdutozab, Luziel, Tadon, Asramel, Aknoan, Ahnet, Unonom, Xuksetpo, Pemcapso, Osapon, Pimunael, Esulamon, Tuhkaraip, Menepruron, Ranaron, Allaten, + Asoreb, Razeniel, Sapanolr, Ticos, Ussaxot, Hahlraz, Tedrahamael, Apcbun, Bahmensu, Oron, Xatnpih, Opael, Ipamorz, Sanopars, Exroh, Lurtapios, Tocpertaniel, Islopaar, Nizlpad, + Umlaboor, Dalisatosiel, Erammozal, Amsaset, Anhozal, Irlap, Nour, Etnoxaad, Imubenn, Ezipexon, Sihunosl, Ehohit, Zatbuhsatiel, Sazsutpe, Hipdiel, Honed, Unikesm, Udazbanoe, + Zotipeposael, Halmaneop, Semnsat, Itakup, Ehhbes, Araraz, Halbasoon, Nahahetael, Ubeezh, Ilpbeh, Hilopael, Esboot, Usoparb, Hotesiatrem, Epnanaet, Lehael, Lapael, Urapes, + Obalasc, Pandael, Damaz, Ehnnat, Pnecamob, Ethahoat, Kuhretieh, Ekanzapis, Pundohien, Honolens, Ahtuxies, Asidodiel, Laripael, Bortarsariel, Hirular, Dunaneboriel, Ensadaap, + Usraat, Hahuhnerael, Bolenoz, Larhepeis, Irasteheh, Rarahaimzah, Alahotael, Litedabh, Lasnuhtasael, Unamah, Topriraiz, Rsaset, Ansaap, Opoasl, Hetet, Sotsopsehiel, Kopozel, + Xartatesael, Amosun, Perensahael, Chatomep, Adiarh, Loos, Hador, Sbeihapiel, Odipin, Tramater, Mephotasael, Mozed, Depar, Taron, Anaobm, Larpusmason, Essaheah, Suel, + Sahaminapiel, Dinatoh, Anrac, Rasuniolpas, Isoteciel, Atcis, Hatazeh, Anhoor, Samnerra, Snilot, Esasitm, Arhel, Rkesitas, Hexpemsazon, Izatap, Ezon, Koit, Obasahiel, + Cerneplihael, Husmled, Hisipon, Anolahon, Ppaironael, Lanetsosiel, Olon, Arpzih, Ekarnahox, Ibmnat, Ipon, Sutlanasael, Srosirad, Apomael, Asemet, Uknatias, Nohon, Maholab, + Sacuhatakael, Orpir, Bessipcopiel, Isnal, Elxar, Aetrtevikr, Airnucaha, Alesei, Amaniuevia, Anendese, Anentend, Aneseicon, Anonish, Ardelica, Argaluse, Astharn, Astiule, + Avacen, Baliere, Balucic, Bardo, Beserdei, Bravamos, Brliamide, Cacosa, Caleoleb, Candrnial, Cebalel, Celele, Chareviu, Chenus, Civon, Danani, Dandelene, Davismarir, + Delel, Deliusa, Desalie, Dethebe, Doreti, Drcatrda, Dricor, Ebali, Ebelelu, Einuce, Elenenga, Elestrn, Elianam, Elustule, Ercikrl, Erdor, Erelucende, Esanae, Eseishan, + Esetucae, Etralan, Ezanelar, Febrth, Felele, Felerelia, Felidrane, Femiard, Fentrdes, Feost, Festhar, Fezan, Galelile, Ganacas, Gardet, Gargda, Garoneva, Gdanue, Gdestia, + Gdonisat, Gdridordro, Gebriustr, Genebe, Genievel, Getich, Gileli, Hacelu, Hachie, Haleshi, Hamazalesa, Hangde, Haret, Havarl, Helica, Helichas, Hetal, Hianar, Hicielen, + Hinasa, Holusel, Hononus, Ialenanete, Ianenel, Ianthian, Icamalius, Ienag, Ienive, Ikriena, Ilialerl, Iuceosani, Iulen, Jercos, Jucanin, Juleva, Juretri, Jusara, Jusaranus, + Justhieole, Kraneb, Kranie, Krdrethag, Kreoles, Krevia, Krgdei, Krgdr, Kriaster, Krirni, Krleleni, Krlenagia, Krneleba, Krneleneb, Lananar, Lartius, Laselilaza, Lebrop, + Lelusaror, Leorn, Leramaman, Letrtesend, Libelem, Liesm, Lurneseler, Luson, Mabanteno, Macaralen, Maneleli, Mantha, Micon, Miesth, Miuli, Moshardosh, Nanar, Neleiuc, + Ntholich, Oleluc, Olerusa, Olusar, Onanist, Onaret, Onetial, Ongdastho, Onicerus, Orisel, Orler, Orosal, Osaev, Osazarna, Phaletesma, Phard, Pheni, Phesel, Phesor, + Phienuebeb, Phonu, Ralus, Rcanoluele, Rcivamah, Rdenaro, Rdeth, Relelete, Rnara, Rores, Rorngane, Saiabelel, Sameti, Santise, Sareva, Sasai, Serantivet, Sezarnti, Smanda, + Smelieli, Smetenelul, Stiulenet, Taleluso, Tenda, Tharanasan, Thararin, Thialardrd, Tiusa, Ucalelen, Uchenter, Uetrdrd, Ulelen, Ulerosh, Uleseles, Urndern, Usant, Usavamam, + Usonicar, Usoris, Vamorchine, Vanebr, Vargatu, Vatielucac, Velurelu, Venez, Vicav, Viust, Vondr, Vorntes, Vosthel, Xacagalela, Xaiel, Xanismis, Xarlic, Xarnieta, Zalebesan, + Zalemeta, Zamint, Zanabal, Zanamai, Zandoni, Zaraluc, Zaror, Zatesor + + \ No newline at end of file diff --git a/Data/Config/objects.xml b/Data/Config/objects.xml new file mode 100644 index 0000000..25d6a58 --- /dev/null +++ b/Data/Config/objects.xml @@ -0,0 +1,2643 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Data/Config/pageresponse.cfg b/Data/Config/pageresponse.cfg new file mode 100644 index 0000000..a32fdd4 --- /dev/null +++ b/Data/Config/pageresponse.cfg @@ -0,0 +1,10 @@ +Not Enough Info Please provide a more informative description of your problem so that we may better help you. +Bad Stuck We apologize, but we do not move players unless they are physically stuck. Take care! +Cannot Teleport We apologize, but staff members do not move players across the map. +Item Request We apologize, but we do not give items to players. +Murder System Query Hello! Information regarding the murder system is available here. +Pet Bonding Hail! The pet bonding system works just as it does on Origin's official UO shards. You can find all the information you need about it here! Take care! +Thief Guild In order to join the thief guild, your character must be at least one week old, must have been logged into the game for a total of 48 hours, and must have 60.0 or more stealing skill. We are not be able to tell you how long until your character will meet these requirements. Take care! +Password Change In order to change your password, please type:
[password newpassword newpassword

Be sure to replace newpassword with the password you would like to use. Take care! +Cannot Help Sorry, we cannot help you with that. +Online Request We do not reveal the online status of players. diff --git a/Data/Config/shrink.cfg b/Data/Config/shrink.cfg new file mode 100644 index 0000000..46ae209 --- /dev/null +++ b/Data/Config/shrink.cfg @@ -0,0 +1,356 @@ +# All lines are trimmed. Empty lines and lines starting with '#' are ignored +# Table for converting body values to item numbers +# Format: +# BodyItem + +1 0x20DF +2 0x20D8 +3 0x25B8 +4 0x20D9 +5 0x211D +6 0x211A +7 0x25AF +8 0x2582 +9 0x2584 +10 0x2584 +11 0x25C4 +12 0x20D6 +13 0x25D7 +14 0x20D7 +15 0x25D9 +16 0x25DD +17 0x25AE +18 0x20D8 +19 0x25C4 +20 0x25C5 +21 0x25BF +22 0x258F +23 0x25D0 +24 0x25A4 +25 0x25D1 +26 0x25C7 +27 0x25D1 +28 0x25C6 +29 0x2592 +30 0x20DC +31 0x2595 +33 0x20DE +34 0x25D2 +35 0x20DE +36 0x20DE +37 0x25D2 +38 0x2585 +39 0x25A6 +40 0x2586 +41 0x25AE +42 0x25B7 +43 0x2587 +44 0x25B7 +45 0x25B7 +46 0x20D6 +47 0x20FA +48 0x25B9 +49 0x20D6 +50 0x25BC +51 0x20E8 +52 0x25C2 +53 0x20E9 +54 0x20E9 +55 0x20E9 +56 0x25BC +57 0x25BC +58 0x2100 +59 0x20D6 +60 0x20D6 +61 0x20D6 +62 0x20D6 +63 0x2583 +64 0x25A3 +65 0x25A3 +66 0x25C8 +67 0x258E +68 0x258F +69 0x258F +70 0x25CC +71 0x25C9 +72 0x25CB +73 0x2594 +74 0x259F +75 0x212D +76 0x25CD +77 0x25A2 +78 0x25A5 +79 0x25A5 +80 0x258C +81 0x2130 +82 0x25A5 +83 0x25A8 +84 0x25A8 +85 0x25AB +86 0x25AD +87 0x25AC +88 0x2108 +89 0x25C0 +90 0x25C1 +91 0x25C2 +92 0x25C2 +93 0x25C2 +94 0x20E8 +96 0x20E8 +97 0x2596 +98 0x2596 +99 0x25D1 +100 0x25D2 +101 0x2581 +102 0x2584 +103 0x20D6 +104 0x20D6 +105 0x20D6 +106 0x20D6 +107 0x20D7 +108 0x20D7 +109 0x20D7 +110 0x20D7 +111 0x20D7 +112 0x20D7 +113 0x20D7 +114 0x259B +115 0x259B +116 0x259C +117 0x259D +118 0x259E +119 0x259E +120 0x259E +121 0x259E +122 0x25CE +123 0x2589 +124 0x258A +125 0x258B +126 0x258B +127 0x2597 +128 0x25B6 +129 0x25C8 +130 0x258D +131 0x2590 +132 0x25A0 +133 0x2131 +134 0x25A1 +135 0x25A8 +136 0x25A9 +137 0x25AA +138 0x25AF +139 0x25AF +140 0x25B1 +141 0x2106 +142 0x25B7 +143 0x25B7 +144 0x25BA +145 0x20FB +146 0x25BB +147 0x25BD +148 0x25BE +150 0x20FB +151 0x20F1 +152 0x25CA +153 0x2591 +154 0x25A7 +155 0x20EC +157 0x25C3 +158 0x25D6 +159 0x25D8 +160 0x25D8 +161 0x25DA +162 0x25DB +163 0x25DC +164 0x20ED +165 0x2100 +166 0x20D7 +167 0x2118 +168 0x259F +170 0x20F6 +171 0x25B2 +172 0x20D6 +173 0x25C3 +175 0x2589 +176 0x25B6 +177 0x259C +178 0x259C +179 0x259C +180 0x20D6 +181 0x25AE +182 0x25AE +183 0x2106 +184 0x2107 +185 0x2106 +186 0x2107 +187 0x2615 +188 0x2615 +189 0x25B0 +190 0x21F1 +191 0x25A0 +192 0x25CE +193 0x2615 +194 0x2619 +195 0x260F +200 0x2598 +201 0x211B +202 0x2131 +203 0x2101 +204 0x259A +205 0x2125 +206 0x2131 +207 0x20EB +208 0x20D1 +209 0x2580 +210 0x25B2 +211 0x2118 +212 0x211E +213 0x20E1 +214 0x25B5 +215 0x20D0 +216 0x2103 +217 0x2588 +218 0x25B3 +219 0x25B4 +220 0x20F6 +221 0x20FF +223 0x20EB +225 0x25D3 +226 0x2599 +228 0x259E +231 0x20EF +232 0x20EF +233 0x20F0 +234 0x20D4 +237 0x20D4 +238 0x2123 +290 0x2101 +291 0x2126 +292 0x2127 +300 0x2620 +301 0x2621 +302 0x2622 +303 0x2623 +304 0x2624 +305 0x2625 +306 0x2626 +307 0x2627 +308 0x2628 +309 0x2629 +310 0x262A +311 0x262B +312 0x262C +313 0x262D +314 0x262E +315 0x262F +316 0x2630 +317 0x2631 +318 0x2632 +319 0x2633 +400 0x2106 +401 0x2107 +402 0x2106 +403 0x2107 +744 0x2106 +745 0x2107 +746 0x260E +747 0x262A +748 0x25C7 +749 0x25A4 +750 0x2106 +751 0x2107 +752 0x2610 +753 0x258D +754 0x258D +755 0x258D +756 0x260C +757 0x260B +758 0x258D +763 0x260B +764 0x261F +765 0x261E +766 0x25FC +767 0x25F9 +768 0x2612 +769 0x25F9 +770 0x261C +771 0x261D +772 0x25F8 +773 0x25FA +774 0x25FB +775 0x2613 +776 0x2611 +777 0x260D +778 0x261A +779 0x2607 +780 0x2608 +781 0x2604 +782 0x2603 +783 0x2602 +784 0x2605 +785 0x260E +786 0x260A +787 0x260F +788 0x2618 +789 0x2614 +790 0x2616 +791 0x260F +792 0x2609 +793 0x2617 +794 0x2619 +795 0x2611 +796 0x2611 +797 0x20D6 +798 0x20D6 +799 0x2619 +804 0x2602 +805 0x2604 +806 0x2603 +807 0x2602 +808 0x2602 +820 0x259A +825 0x25B2 +826 0x25B3 +827 0x25B4 +828 0x20F6 +831 0x211A +832 0x211A +833 0x211A +834 0x2597 +835 0x2125 +837 0x25C0 +838 0x25C1 +839 0x2615 +840 0x2615 +841 0x2615 +842 0x2615 +843 0x2123 +846 0x2599 +848 0x259E +970 0x2106 +990 0x2106 +991 0x2106 +994 0x2106 +998 0x25A0 + +#SE Mobiles + +246 0x2763 +254 0x2764 +242 0x2765 +199 0x2766 +247 0x2767 +248 0x2768 +196 0x2769 +243 0x276A +240 0x276B +252 0x276C +241 0x276D +251 0x276E +244 0x276F +250 0x2770 +249 0x2771 +255 0x2772 +253 0x2773 +245 0x281B +169 0x281C diff --git a/Data/Config/treasure.cfg b/Data/Config/treasure.cfg new file mode 100644 index 0000000..e69de29 diff --git a/Data/Decoration/Britannia/Castle - Britain.cfg b/Data/Decoration/Britannia/Castle - Britain.cfg new file mode 100644 index 0000000..2b01454 --- /dev/null +++ b/Data/Decoration/Britannia/Castle - Britain.cfg @@ -0,0 +1,2 @@ +TaskManager 3806 +2027 1516 10 diff --git a/Data/Decoration/Britannia/Cave Entrances.cfg b/Data/Decoration/Britannia/Cave Entrances.cfg new file mode 100644 index 0000000..c6c3f9c --- /dev/null +++ b/Data/Decoration/Britannia/Cave Entrances.cfg @@ -0,0 +1,50 @@ +Teleporter 7107 (PointDest=(4357, 729, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6495 3436 0 + +Teleporter 7107 (PointDest=(4357, 729, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6496 3436 0 + +Teleporter 7107 (PointDest=(4306, 570, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6608 3563 0 + +Teleporter 7107 (PointDest=(4306, 570, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6609 3563 0 + +Teleporter 7107 (PointDest=(4306, 570, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6610 3563 0 + +Teleporter 7107 (PointDest=(4499, 597, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4813 1872 0 + +Teleporter 7107 (PointDest=(4499, 597, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4814 1872 0 + +Teleporter 7107 (PointDest=(4499, 597, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4815 1872 0 + +Teleporter 7107 (PointDest=(4473, 249, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1542 1361 10 + +Teleporter 7107 (PointDest=(4473, 249, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1543 1361 10 + +Teleporter 7107 (PointDest=(4473, 249, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1544 1361 10 + +Teleporter 7107 (PointDest=(4592, 461, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1807 1220 10 + +Teleporter 7107 (PointDest=(4592, 461, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1808 1220 10 + +Teleporter 7107 (PointDest=(4592, 461, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1809 1220 10 + +Teleporter 7107 (PointDest=(4424, 393, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1903 1398 1 + +Teleporter 7107 (PointDest=(4424, 393, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1904 1398 2 + +Teleporter 7107 (PointDest=(4424, 393, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1905 1398 2 diff --git a/Data/Decoration/Britannia/Dungeon Entrances.cfg b/Data/Decoration/Britannia/Dungeon Entrances.cfg new file mode 100644 index 0000000..73d808a --- /dev/null +++ b/Data/Decoration/Britannia/Dungeon Entrances.cfg @@ -0,0 +1,54 @@ +Teleporter 7107 (PointDest=(1089, 1235, 25); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2889 659 0 + +Teleporter 7107 (PointDest=(1089, 1235, 25); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2888 659 0 + +Teleporter 7107 (PointDest=(302, 538, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6504 3319 0 + +Teleporter 7107 (PointDest=(302, 538, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6504 3320 0 + +Teleporter 7107 (PointDest=(302, 538, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6504 3321 0 + +Teleporter 7107 (PointDest=(302, 538, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6504 3322 0 + +Teleporter 7107 (PointDest=(4279, 234, 22); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6023 2167 -13 + +Teleporter 7107 (PointDest=(4279, 234, 22); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6022 2167 -13 + +Teleporter 7107 (PointDest=(4279, 234, 22); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +6021 2167 -13 + +Teleporter 7107 (PointDest=(732, 1027, 30); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1647 1225 10 + +Teleporter 7107 (PointDest=(732, 1027, 30); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1646 1225 10 + +Teleporter 7107 (PointDest=(732, 1027, 30); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1648 1225 10 + +Teleporter 7107 (PointDest=(732, 1027, 30); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1649 1225 10 + +Teleporter 7107 (PointDest=(1027, 1094, 1); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1535 2640 0 + +Teleporter 7107 (PointDest=(1027, 1094, 1); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1539 2640 1 + +Teleporter 7107 (PointDest=(1027, 1094, 1); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1538 2640 1 + +Teleporter 7107 (PointDest=(1027, 1094, 1); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1536 2640 0 + +Teleporter 7107 (PointDest=(1027, 1094, 1); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1537 2640 0 + diff --git a/Data/Decoration/Britannia/Places.cfg b/Data/Decoration/Britannia/Places.cfg new file mode 100644 index 0000000..b49ae3a --- /dev/null +++ b/Data/Decoration/Britannia/Places.cfg @@ -0,0 +1,31 @@ +## FENS OF THE DEAD ############################# + +Teleporter 7107 (PointDest=(4009, 938, 12); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2049 1935 -13 + +Teleporter 7107 (PointDest=(3484, 963, 9); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2186 2005 1 + +Teleporter 7107 (PointDest=(3484, 963, 9); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2186 2004 2 + +Teleporter 7107 (PointDest=(3761, 980, 12); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2182 2117 -13 + +ThruDoor 2084 (Facing=WestCW) +2189 2091 1 + +ThruDoor 2086 (Facing=WestCW) +2190 2091 1 + +## SPIDER CAVE ################################## + +Teleporter 7107 (PointDest=(737, 2177, -28); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +737 1206 0 + +Teleporter 7107 (PointDest=(737, 2177, -28); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +738 1206 0 + +Teleporter 7107 (PointDest=(737, 2177, -28); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +739 1206 0 + diff --git a/Data/Decoration/Britannia/Town - Britain.cfg b/Data/Decoration/Britannia/Town - Britain.cfg new file mode 100644 index 0000000..8566359 --- /dev/null +++ b/Data/Decoration/Britannia/Town - Britain.cfg @@ -0,0 +1,246 @@ +BarredMetalDoor2 8183 (Facing=NorthCCW) +2005 1483 -20 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2011 1483 -20 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2005 1488 -20 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2005 1494 -20 + +BarredMetalDoor2 8181 (Facing=SouthCW) +2011 1488 -20 + +Actions 6494 +1947 1640 17 + +Actions 6039 +1716 1665 -5 + +Actions 2508 +1732 1650 14 + +Actions 4869 +1871 1602 21 + +Actions 7825 +1882 1621 15 + +StrongWoodDoor 1765 (Facing=WestCW) +1785 1438 10 + +StrongWoodDoor 1767 (Facing=EastCCW) +1786 1438 10 + +StrongWoodDoor 1773 (Facing=SouthCW) +1789 1459 10 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1789 1458 10 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1801 1439 10 + +StrongWoodDoor 1773 (Facing=SouthCW) +1801 1440 10 + +StrongWoodDoor 1765 (Facing=WestCW) +1803 1458 10 + +StrongWoodDoor 1767 (Facing=EastCCW) +1804 1458 10 + +ThruDoor 2084 (Facing=WestCW) +1808 1469 10 + +ThruDoor 2086 (Facing=WestCW) +1809 1469 10 + +PickpocketDipEastAddon 7725 +1698 1650 -20 + +DarkWoodDoor 1701 (Facing=WestCW) +1517 1594 0 + +LoomEastAddon 4192 (Hue=1328) +1515 1602 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1527 1593 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1528 1593 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1524 1596 0 + +SpinningwheelSouthAddon 4117 (Hue=1728) +1521 1601 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1565 1471 0 + +DarkWoodGate 2152 (Facing=EastCCW) +1580 1482 0 + +DarkWoodGate 2150 (Facing=WestCW) +1579 1482 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1575 1473 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1632 1530 6 + +FlourMillEastAddon 6434 +1640 1550 5 + +DarkWoodDoor 1701 (Facing=WestCW) +1644 1559 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +1645 1559 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1642 1554 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +1650 1554 5 + +ThruDoor 1711 (Facing=NorthCCW) +1659 1759 5 + +ThruDoor 1709 (Facing=SouthCW) +1659 1760 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +1702 1639 6 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1702 1638 6 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1702 1650 6 + +DarkWoodDoor 1709 (Facing=SouthCW) +1702 1651 6 + +DarkWoodDoor 1701 (Facing=WestCW) +1719 1652 6 + +DarkWoodDoor 1703 (Facing=EastCCW) +1720 1652 6 + +DarkWoodDoor 1709 (Facing=SouthCW) +1715 1648 6 + +DarkWoodDoor 1709 (Facing=SouthCW) +1728 1639 6 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1728 1638 6 + +DarkWoodDoor 1709 (Facing=SouthCW) +1728 1651 6 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1728 1650 6 + +DarkWoodDoor 1701 (Facing=WestCW) +1731 1656 6 + +DarkWoodDoor 1703 (Facing=EastCCW) +1732 1656 6 + +DarkWoodGate 2160 (Facing=NorthCCW) +1831 1640 10 + +DarkWoodGate 2160 (Facing=NorthCCW) +1831 1635 10 + +DarkWoodGate 2160 (Facing=NorthCCW) +1848 1632 10 + +DarkWoodGate 2160 (Facing=NorthCCW) +1848 1644 10 + +DarkWoodGate 2150 (Facing=WestCW) +1855 1648 10 + +DarkWoodGate 2150 (Facing=WestCW) +1857 1627 10 + +DarkWoodGate 2150 (Facing=WestCW) +1856 1638 10 + +DarkWoodGate 2160 (Facing=NorthCCW) +1863 1644 10 + +DarkWoodGate 2160 (Facing=NorthCCW) +1863 1632 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1875 1606 15 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1884 1606 15 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1875 1621 15 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1884 1618 15 + +LightWoodGate 2105 (Facing=WestCW) +1903 1622 10 + +LightWoodGate 2113 (Facing=SouthCW) +1892 1634 10 + +LightWoodGate 2115 (Facing=NorthCCW) +1892 1633 10 + +DarkWoodDoor 1709 (Facing=SouthCW) +1914 1534 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1914 1533 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1908 1540 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1909 1540 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1916 1540 0 + +LightWoodGate 2107 (Facing=EastCCW) +1904 1622 10 + +LightWoodGate 2105 (Facing=WestCW) +1906 1646 10 + +LightWoodGate 2107 (Facing=EastCCW) +1907 1646 10 + +LightWoodGate 2113 (Facing=SouthCW) +1918 1634 10 + +LightWoodGate 2115 (Facing=NorthCCW) +1918 1633 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1923 1533 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2004 1425 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2004 1438 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2011 1430 0 + diff --git a/Data/Decoration/Britannia/Town - Bucs Den.cfg b/Data/Decoration/Britannia/Town - Bucs Den.cfg new file mode 100644 index 0000000..0f34742 --- /dev/null +++ b/Data/Decoration/Britannia/Town - Bucs Den.cfg @@ -0,0 +1,215 @@ +PickpocketDipEastAddon 7725 +2554 2250 -15 + +LightWoodDoor 1757 (Facing=SouthCW) +2555 2257 5 + +LightWoodDoor 1759 (Facing=NorthCCW) +2555 2256 5 + +LightWoodDoor 1749 (Facing=WestCW) +2560 2250 5 + +LightWoodDoor 1757 (Facing=SouthCW) +2563 2262 5 + +LightWoodDoor 1759 (Facing=NorthCCW) +2563 2261 5 + +StrongWoodDoor 1773 (Facing=SouthCW) +2582 2291 0 + +TrashBarrel 3703 +2680 2105 12 + +TrashBarrel 3703 +2600 2208 0 + +Backgammon 3612 +2603 2201 26 + +Dices 4007 +2603 2200 26 + +Actions 6031 +2619 2201 28 + +Actions 6327 (Hue=1182) +2559 2252 8 + +Actions 5870 +2559 2263 6 + +Actions 6006 +2623 2132 1 + +Actions 7129 +2621 2160 6 + +Actions 4851 +2609 2218 8 + +Actions 5990 +2622 2263 17 + +Actions 4202 +2629 2268 30 + +Actions 4199 +2631 2264 37 + +Actions 4708 +2664 2187 0 + +Actions 8808 +2687 2242 0 + +Actions 6584 +2689 2234 6 + +Actions 6039 +2737 2222 -5 + +Teleporter 7107 (PointDest=(3858, 280, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2628 2126 0 + +Teleporter 7107 (PointDest=(3858, 280, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2629 2126 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2595 2208 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2596 2208 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2598 2214 20 + +DarkWoodDoor 1701 (Facing=WestCW) +2597 2228 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2598 2228 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2601 2225 20 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2601 2224 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +2618 2163 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2623 2168 0 + +ArcheryButteAddon 4106 +2619 2173 0 + +ArcheryButteAddon 4106 +2619 2177 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2612 2206 20 + +Chessboard 4006 +2609 2211 26 + +Dices 4007 +2608 2212 26 + +CheckerBoard 4006 +2609 2212 26 + +DarkWoodDoor 1709 (Facing=SouthCW) +2628 2162 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2628 2161 0 + +SpinningwheelEastAddon 4121 +2632 2255 10 + +DarkWoodDoor 1701 (Facing=WestCW) +2626 2260 10 + +DarkWoodDoor 1701 (Facing=WestCW) +2636 2260 10 + +DarkWoodDoor 1709 (Facing=SouthCW) +2627 2270 10 + +LoomEastAddon 4192 +2632 2257 10 + +DarkWoodDoor 1709 (Facing=SouthCW) +2628 2271 30 + +DarkWoodDoor 1701 (Facing=WestCW) +2631 2275 10 + +DarkWoodDoor 1701 (Facing=WestCW) +2666 2209 0 + +LightWoodDoor 1759 (Facing=NorthCCW) +2679 2107 10 + +DarkWoodDoor 1701 (Facing=WestCW) +2677 2111 30 + +DarkWoodDoor 1701 (Facing=WestCW) +2687 2111 30 + +InnChest 3650 (Name=Inn Chest) +2675 2108 10 + +InnChest 3650 (Name=Inn Chest) +2685 2108 10 + +LightWoodDoor 1749 (Facing=WestCW) +2682 2116 10 + +LightWoodDoor 1751 (Facing=EastCCW) +2683 2116 10 + +InnChest 3650 (Name=Inn Chest) +2685 2114 30 + +InnChest 3651 (Name=Inn Chest) +2680 2114 30 + +DarkWoodDoor 1701 (Facing=WestCW) +2676 2209 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2685 2209 0 + +StrongWoodDoor 1775 (Facing=NorthCCW) +2684 2235 0 + +StrongWoodDoor 1765 (Facing=WestCW) +2682 2244 0 + +LightWoodDoor 1751 (Facing=EastCCW) +2688 2110 10 + +LightWoodDoor 1749 (Facing=WestCW) +2694 2110 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2690 2107 30 + +DarkWoodDoor 1709 (Facing=SouthCW) +2690 2108 30 + +InnChest 3651 (Name=Inn Chest) +2696 2105 10 + +TrainingDummyEastAddon 4212 +2696 2239 0 + +TrainingDummyEastAddon 4212 +2696 2235 0 + +DartBoard 7727 +2605 2206 20 diff --git a/Data/Decoration/Britannia/Town - Cove.cfg b/Data/Decoration/Britannia/Town - Cove.cfg new file mode 100644 index 0000000..6160b25 --- /dev/null +++ b/Data/Decoration/Britannia/Town - Cove.cfg @@ -0,0 +1,234 @@ +DarkWoodDoor 1703 (Facing=EastCCW) +2574 1493 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2671 1469 0 + +SpinningwheelEastAddon 4121 (Hue=1327) +2572 1496 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2591 1440 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2584 1495 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2584 1494 0 + +Actions 5990 +2577 1493 8 + +LoomSouthAddon 4193 (Hue=1639) +2578 1490 0 + +Actions 6039 +2598 1421 -5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2596 1434 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2596 1433 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2592 1440 5 + +LightWoodDoor 1757 (Facing=SouthCW) +2607 1501 20 + +LightWoodDoor 1757 (Facing=SouthCW) +2607 1497 20 + +InnChest 3650 (Name=Inn Chest) +2604 1502 20 + +InnChest 3650 (Name=Inn Chest) +2604 1498 20 + +DartBoard 7727 +2604 1497 0 + +Actions 6030 +2605 1499 9 + +LightWoodDoor 1757 (Facing=SouthCW) +2607 1505 20 + +InnChest 3650 (Name=Inn Chest) +2604 1506 20 + +Chessboard 4006 +2605 1504 6 + +DarkWoodDoor 1709 (Facing=SouthCW) +2623 1467 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2623 1466 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2618 1464 20 + +LightWoodDoor 1759 (Facing=NorthCCW) +2611 1503 20 + +CheckerBoard 4006 +2609 1498 4 + +Dices 4007 +2608 1493 8 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2618 1503 0 + +TrashBarrel 3703 +2617 1499 3 + +LightWoodDoor 1757 (Facing=SouthCW) +2611 1504 20 + +Backgammon 4013 +2613 1504 6 + +Dices 4007 +2612 1504 6 + +DarkWoodDoor 1709 (Facing=SouthCW) +2618 1504 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2644 1486 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2645 1486 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2649 1479 0 + +Actions 4154 +2641 1479 8 + +FlourMillSouthAddon 6446 +2646 1475 0 + +Actions 4781 +2666 1437 22 + +RattanDoor 1695 (Facing=NorthCCW; Hue=1182) +2672 1436 16 + +TrainingDummySouthAddon 4208 +2703 1487 0 + +DartBoard 7726 +2703 1486 20 + +TrainingDummySouthAddon 4208 +2710 1487 0 + +TrashBarrel 3703 +2717 1488 20 + +Teleporter 7107 (PointDest=(3466, 570, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2761 1384 0 + +Teleporter 7107 (PointDest=(3466, 570, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2760 1384 0 + +Teleporter 7107 (PointDest=(3466, 570, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2759 1384 0 + +Teleporter 7107 (PointDest=(3466, 570, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2762 1384 2 + +Teleporter 7107 (PointDest=(3466, 570, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2763 1384 2 + +ArcheryButteAddon 4107 +2712 1486 40 + +ArcheryButteAddon 4107 +2715 1486 40 + +ArcheryButteAddon 4107 +2718 1486 40 + +DarkWoodDoor 1709 (Facing=SouthCW) +2712 1500 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2712 1499 0 + +Actions 8808 +2705 1488 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2719 1492 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +2719 1498 20 + +Actions 6031 +2708 1490 29 + +Backgammon 3612 +2707 1495 26 + +Dices 4007 +2707 1494 26 + +CheckerBoard 4006 +2705 1501 26 + +Dices 4007 +2712 1488 25 + +Actions 7131 +2716 1502 8 + +Chessboard 4006 +2710 1488 24 + +DarkWoodDoor 1701 (Facing=WestCW) +2720 1468 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2727 1467 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2727 1466 5 + +DarkWoodDoor 1701 (Facing=WestCW) +2723 1493 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2724 1493 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2727 1491 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2727 1490 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2727 1501 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2727 1500 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2758 1486 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2759 1486 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2757 1477 0 + +Actions 4218 +2755 1481 0 + +Actions 4199 +2760 1475 7 + diff --git a/Data/Decoration/Britannia/Town - Jhelom.cfg b/Data/Decoration/Britannia/Town - Jhelom.cfg new file mode 100644 index 0000000..860df10 --- /dev/null +++ b/Data/Decoration/Britannia/Town - Jhelom.cfg @@ -0,0 +1,260 @@ +DarkWoodDoor 1703 (Facing=EastCCW) +1103 3197 10 + +StrongWoodDoor 1773 (Facing=SouthCW) +1111 3195 10 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1111 3194 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1119 3155 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +1121 3144 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +1130 3144 20 + +Actions 6494 +1091 3256 7 + +Actions 6031 +1057 3136 24 + +Actions 4708 +1101 3127 11 + +Actions 6327 (Hue=1182) +1001 3137 18 + +Actions 8786 +1015 3162 15 + +Actions 6584 +1026 3109 22 + +Actions 5624 +1053 3119 21 + +Actions 4153 +1049 3114 22 + +Actions 4201 +1044 3163 15 + +Actions 4200 +1048 3171 22 + +Actions 4171 +1052 3238 6 + +Actions 2509 +1112 3155 28 + +Actions 6039 +1142 3163 -5 + +Teleporter 7107 (PointDest=(3438, 235, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1076 3088 10 + +Teleporter 7107 (PointDest=(3438, 235, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1077 3088 10 + +Teleporter 7107 (PointDest=(3438, 235, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1078 3088 10 + +Teleporter 7107 (PointDest=(3555, 390, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1049 3045 10 + +Teleporter 7107 (PointDest=(3555, 390, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1051 3045 10 + +Teleporter 7107 (PointDest=(3555, 390, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1050 3045 10 + +DarkWoodDoor 1709 (Facing=SouthCW) +1004 3140 15 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1004 3139 15 + +DarkWoodDoor 1703 (Facing=EastCCW) +1000 3147 15 + +DarkWoodDoor 1701 (Facing=WestCW) +999 3147 15 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1005 3172 15 + +DarkWoodDoor 1701 (Facing=WestCW) +999 3177 15 + +DarkWoodDoor 1703 (Facing=EastCCW) +1000 3177 15 + +DarkWoodDoor 1703 (Facing=EastCCW) +1008 3108 15 + +DarkWoodDoor 1709 (Facing=SouthCW) +1015 3114 15 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1015 3113 15 + +DarkWoodDoor 1703 (Facing=EastCCW) +1020 3119 15 + +StrongWoodDoor 1765 (Facing=WestCW) +1018 3177 15 + +StrongWoodDoor 1767 (Facing=EastCCW) +1019 3177 15 + +DarkWoodDoor 1701 (Facing=WestCW) +1038 3177 15 + +DarkWoodDoor 1703 (Facing=EastCCW) +1039 3177 15 + +DarkWoodDoor 1709 (Facing=SouthCW) +1054 3119 35 + +DarkWoodDoor 1709 (Facing=SouthCW) +1054 3114 35 + +InnChest 3651 (Name=Inn Chest) +1052 3111 35 + +InnChest 3651 (Name=Inn Chest) +1052 3117 35 + +DarkWoodDoor 1709 (Facing=SouthCW) +1054 3124 35 + +InnChest 3651 (Name=Inn Chest) +1051 3122 35 + +DarkWoodDoor 1701 (Facing=WestCW) +1053 3139 35 + +DarkWoodDoor 1703 (Facing=EastCCW) +1054 3139 35 + +DarkWoodDoor 1701 (Facing=WestCW) +1048 3167 15 + +DarkWoodDoor 1703 (Facing=EastCCW) +1049 3167 15 + +DarkWoodDoor 1709 (Facing=SouthCW) +1047 3169 35 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1043 3169 35 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1043 3176 35 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1047 3176 35 + +DarkWoodDoor 1701 (Facing=WestCW) +1040 3238 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1045 3244 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1046 3244 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1061 3129 15 + +DarkWoodDoor 1701 (Facing=WestCW) +1057 3127 35 + +DarkWoodDoor 1703 (Facing=EastCCW) +1058 3127 35 + +InnChest 3651 (Name=Inn Chest) +1058 3142 35 + +DarkWoodDoor 1709 (Facing=SouthCW) +1057 3204 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1065 3212 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1066 3212 0 + +ArcheryButteAddon 4107 +1087 3140 10 + +TrainingDummyEastAddon 4212 +1083 3164 10 + +TrainingDummyEastAddon 4212 +1083 3158 10 + +TrainingDummyEastAddon 4212 +1083 3169 10 + +ArcheryButteAddon 4107 +1090 3140 10 + +ArcheryButteAddon 4107 +1093 3140 10 + +ArcheryButteAddon 4107 +1096 3140 10 + +ArcheryButteAddon 4107 +1099 3140 10 + +MetalDoor 1661 (Facing=SouthCW) +981 3019 0 + +MetalDoor 1663 (Facing=NorthCCW) +981 3018 0 + +MetalDoor 1663 (Facing=NorthCCW) +981 3026 0 + +MetalDoor 1661 (Facing=SouthCW) +981 3027 0 + +MetalDoor 1653 (Facing=WestCW) +1001 3021 0 + +MetalDoor 1655 (Facing=EastCCW) +1002 3021 0 + +ThruDoor 2084 +983 3036 0 + +ThruDoor 2086 +984 3036 0 + +Dices 4007 +1051 3139 23 + +Dices 4007 +1059 3143 21 + +Backgammon 3612 +1060 3143 21 + +CheckerBoard 4006 +1068 3143 21 + +Chessboard 4006 +1060 3138 21 + +TrashBarrel 3703 +1053 3124 15 + +DartBoard 7726 +1064 3135 15 diff --git a/Data/Decoration/Britannia/Town - Magincia.cfg b/Data/Decoration/Britannia/Town - Magincia.cfg new file mode 100644 index 0000000..47438d5 --- /dev/null +++ b/Data/Decoration/Britannia/Town - Magincia.cfg @@ -0,0 +1,203 @@ +DarkWoodGate 2150 (Facing=WestCW) +3335 2442 0 + +DarkWoodGate 2152 (Facing=EastCCW) +3336 2442 0 + +DarkWoodGate 2160 (Facing=NorthCCW) +3360 2431 0 + +DarkWoodGate 2158 (Facing=SouthCW) +3360 2432 0 + +Actions 6494 +3491 2440 7 + +Actions 6030 +3284 2446 9 + +Actions 4781 +3310 2484 13 + +Actions 6327 (Hue=1182) +3308 2500 8 + +Actions 7824 +3347 2442 0 + +Actions 6039 +3378 2515 -5 + +Actions 5990 +3413 2429 12 + +Actions 4708 +3428 2465 3 + +StrongWoodDoor 1773 (Facing=SouthCW; Name=strong wood door) +3289 2444 0 + +StrongWoodDoor 1775 (Facing=NorthCCW; Name=strong wood door) +3289 2443 0 + +DarkWoodDoor 1709 (Facing=SouthCW; Name=dark wood door) +3280 2453 0 + +DarkWoodDoor 1709 (Facing=SouthCW; Name=dark wood door) +3317 2492 5 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +3317 2491 5 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +3312 2497 5 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +3344 2437 0 + +DarkWoodDoor 1709 (Facing=SouthCW; Name=dark wood door) +3351 2441 0 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +3351 2440 0 + +LightWoodGate 2105 (Facing=WestCW; Name=light wood gate) +3345 2445 0 + +LightWoodGate 2107 (Facing=EastCCW; Name=light wood gate) +3346 2445 0 + +LightWoodGate 2105 (Facing=WestCW; Name=light wood gate) +3346 2450 0 + +LightWoodGate 2107 (Facing=EastCCW; Name=light wood gate) +3347 2450 0 + +LightWoodGate 2105 (Facing=WestCW; Name=light wood gate) +3346 2453 2 + +LightWoodGate 2107 (Facing=EastCCW; Name=light wood gate) +3347 2453 2 + +DarkWoodGate 2150 (Facing=WestCW; Name=dark wood gate) +3402 2406 0 + +DarkWoodGate 2152 (Facing=EastCCW; Name=dark wood gate) +3403 2406 0 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +3402 2423 5 + +SpinningwheelSouthAddon 4117 +3407 2434 5 + +TrashBarrel 3703 (Name=trash barrel) +3446 2420 0 + +LoomSouthAddon 4193 +3404 2434 5 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +3394 2465 0 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +3395 2473 0 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +3396 2473 0 + +DarkWoodGate 2160 (Facing=NorthCCW; Name=dark wood gate) +3412 2415 0 + +DarkWoodDoor 1709 (Facing=SouthCW; Name=dark wood door) +3416 2424 5 + +DarkWoodGate 2158 (Facing=SouthCW; Name=dark wood gate) +3412 2416 0 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +3413 2435 5 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +3412 2435 5 + +DarkWoodDoor 1709 (Facing=SouthCW; Name=dark wood door) +3416 2433 5 + +InnChest 3651 (Name=Inn Chest) +3438 2420 20 + +InnChest 3650 (Name=Inn Chest) +3439 2429 20 + +DartBoard 7727 +3428 2428 0 + +Dices 4007 (Name=dices) +3435 2422 8 + +CheckerBoard 4006 (Name=checker board) +3430 2431 6 + +Chessboard 4006 (Name=chessboard) +3435 2421 8 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +3440 2423 20 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +3447 2423 20 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +3441 2426 20 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +3442 2426 20 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +3454 2423 20 + +InnChest 3651 (Name=Inn Chest) +3445 2420 20 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +3441 2436 0 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +3442 2436 0 + +Backgammon 3612 (Name=backgammon) +3446 2432 6 + +Dices 4007 (Name=dices) +3447 2432 6 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +3477 2397 0 + +StrongWoodDoor 1765 (Facing=WestCW; Name=strong wood door) +3477 2411 0 + +StrongWoodDoor 1767 (Facing=EastCCW; Name=strong wood door) +3478 2411 0 + +ThruDoor 2084 +3509 2344 0 + +MetalDoor 1661 (Facing=SouthCW) +3506 2351 0 + +MetalDoor 1663 (Facing=NorthCCW) +3506 2350 0 + +MetalDoor 1661 (Facing=SouthCW) +3506 2373 0 + +MetalDoor 1663 (Facing=NorthCCW) +3506 2372 0 + +MetalDoor 1663 (Facing=NorthCCW) +3524 2358 0 + +MetalDoor 1661 (Facing=SouthCW) +3524 2359 0 diff --git a/Data/Decoration/Britannia/Town - Minoc.cfg b/Data/Decoration/Britannia/Town - Minoc.cfg new file mode 100644 index 0000000..f1f9dc7 --- /dev/null +++ b/Data/Decoration/Britannia/Town - Minoc.cfg @@ -0,0 +1,239 @@ +DarkWoodDoor 1709 (Facing=SouthCW) +2730 486 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2730 485 5 + +ThruDoor 2084 +2657 543 1 + +ThruDoor 2086 +2658 543 1 + +Actions 6494 +2875 544 7 + +Actions 6039 +2751 523 -5 + +Actions 6031 +2948 554 14 + +InnChest 3650 (Name=Inn Chest) +2922 550 5 + +InnChest 3650 (Name=Inn Chest) +2926 547 5 + +TrashBarrel 3703 +2922 552 7 + +InnChest 3650 (Name=Inn Chest) +2939 549 5 + +InnChest 3650 (Name=Inn Chest) +2943 547 5 + +DarkWoodDoor 1701 (Facing=WestCW) +2767 441 10 + +DarkWoodDoor 1701 (Facing=WestCW) +2760 446 10 + +DarkWoodDoor 1703 (Facing=EastCCW) +2761 446 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2761 511 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2761 512 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2781 461 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2781 460 10 + +ArcheryButteAddon 4106 +2773 463 10 + +ArcheryButteAddon 4106 +2773 459 10 + +Actions 7128 +2779 457 17 + +DarkWoodDoor 1703 (Facing=EastCCW) +2768 500 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2775 527 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2775 528 5 + +Teleporter 7107 (PointDest=(3517, 729, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2790 424 0 + +Teleporter 7107 (PointDest=(3517, 729, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2791 424 0 + +Actions 6584 +2784 430 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2808 479 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2815 481 5 + +Actions 6030 +2811 480 14 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2815 480 5 + +DarkWoodDoor 1701 (Facing=WestCW) +2801 517 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2802 517 5 + +Actions 5866 +2803 514 7 + +DarkWoodDoor 1709 (Facing=SouthCW) +2829 445 10 + +Actions 4200 +2831 443 17 + +DarkWoodDoor 1709 (Facing=SouthCW) +2841 443 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2841 442 10 + +Actions 4218 +2836 437 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2836 494 5 + +Actions 4172 +2833 490 11 + +DarkWoodDoor 1709 (Facing=SouthCW) +2836 495 5 + +Actions 4851 +2871 447 12 + +DarkWoodDoor 1701 (Facing=WestCW) +2870 456 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2871 456 5 + +Actions 4153 +2865 449 12 + +MediumWoodDoor 1725 (Facing=SouthCW) +2918 453 10 + +MediumWoodDoor 1727 (Facing=NorthCCW) +2918 452 10 + +Actions 4708 +2913 526 2 + +Actions 7129 +2923 535 5 + +Actions 4708 +2927 529 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2923 551 5 + +DartBoard 7726 +2927 552 5 + +DarkWoodDoor 1701 (Facing=WestCW) +2924 560 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2925 560 5 + +Actions 8808 +2931 442 0 + +Actions 6584 +2937 442 6 + +Actions 8786 +2942 459 10 + +TrainingDummySouthAddon 4208 +2929 461 1 + +TrainingDummySouthAddon 4208 +2933 461 0 + +TrainingDummySouthAddon 4208 +2937 461 0 + +MediumWoodDoor 1717 (Facing=WestCW) +2943 517 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2940 551 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2928 551 5 + +CheckerBoard 4006 +2935 559 11 + +Chessboard 4006 +2933 554 8 + +Dices 4007 +2931 554 9 + +MetalDoor2 1733 (Facing=WestCW) +2953 462 10 + +MetalDoor2 1735 (Facing=EastCCW) +2954 462 10 + +MediumWoodDoor 1719 (Facing=EastCCW) +2944 517 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2951 557 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2951 556 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2945 551 5 + +Backgammon 3612 +2948 558 11 + +Dices 4007 +2948 557 11 + +Teleporter 7107 (PointDest=(3932, 553, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2979 487 0 + +Teleporter 7107 (PointDest=(3932, 553, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2979 488 0 + +Teleporter 7107 (PointDest=(3932, 553, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2979 490 0 + +Teleporter 7107 (PointDest=(3932, 553, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2979 489 0 diff --git a/Data/Decoration/Britannia/Town - Moonglow.cfg b/Data/Decoration/Britannia/Town - Moonglow.cfg new file mode 100644 index 0000000..3b824a6 --- /dev/null +++ b/Data/Decoration/Britannia/Town - Moonglow.cfg @@ -0,0 +1,264 @@ +IronGateShort 2132 (Facing=SouthCW; Name=iron gate short) +4028 1688 0 + +IronGateShort 2126 (Facing=EastCCW; Name=iron gate short) +4032 1679 0 + +IronGateShort 2126 (Facing=EastCCW; Name=iron gate short) +4041 1667 0 + +IronGateShort 2126 (Facing=EastCCW; Name=iron gate short) +4046 1672 0 + +IronGateShort 2126 (Facing=EastCCW; Name=iron gate short) +4046 1693 0 + +IronGateShort 2126 (Facing=EastCCW; Name=iron gate short) +4033 1693 0 + +IronGateShort 2126 (Facing=EastCCW; Name=iron gate short) +4057 1667 0 + +IronGateShort 2132 (Facing=SouthCW; Name=iron gate short) +4062 1673 0 + +IronGateShort 2126 (Facing=EastCCW; Name=iron gate short) +4051 1689 0 + +IronGateShort 2126 (Facing=EastCCW; Name=iron gate short) +4067 1686 0 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +4088 1988 0 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4093 2000 0 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +4094 2000 0 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4095 2043 5 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4095 2046 5 + +ThruDoor 8611 +3987 1888 0 + +ThruDoor 8611 +3987 1889 0 + +ThruDoor 8611 +3987 1890 0 + +ThruDoor 8611 +3987 1891 0 + +ThruDoor 8611 +4010 1853 0 + +ThruDoor 8611 +4009 1853 0 + +ThruDoor 8611 +4008 1853 1 + +ThruDoor 8611 +4007 1853 2 + +ThruDoor 8611 +4006 1853 2 + +ThruDoor 8611 +4031 1888 0 + +ThruDoor 8611 +4031 1889 0 + +ThruDoor 8611 +4031 1890 0 + +ThruDoor 8611 +4031 1891 0 + +Actions 6494 +4163 2008 7 + +Actions 5990 +4104 2023 7 + +Actions 4199 +4111 2020 7 + +Actions 6327 (Hue=1182) +3844 1604 7 + +Actions 5866 +3860 1606 27 + +Actions 6039 +4080 2041 -10 + +Actions 6584 +4121 1935 7 + +Actions 8808 +4115 1939 0 + +Actions 8808 +4121 1948 0 + +Actions 6006 +4131 1912 1 + +Actions 7128 +4136 2043 5 + +Actions 6031 +4152 1978 9 + +Actions 4708 +4319 2011 1 + +InnChest 3650 (Name=Inn Chest) +4092 2042 5 + +InnChest 3650 (Name=Inn Chest) +4092 2050 5 + +DarkWoodGate 2160 (Facing=NorthCCW; Name=dark wood gate) +4121 2049 2 + +DarkWoodDoor 1709 (Facing=SouthCW; Name=dark wood door) +4098 1995 0 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +4098 1994 0 + +LoomEastAddon 4192 (Name=loom east addon) +4098 2022 0 + +SpinningwheelEastAddon 4121 (Name=spinningwheel east addon) +4098 2020 0 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4107 2024 0 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +4108 2024 0 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4098 2043 5 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4103 2043 5 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +4107 2045 5 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4106 2046 5 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4100 2046 5 + +InnChest 3650 (Name=Inn Chest) +4102 2041 5 + +InnChest 3651 (Name=Inn Chest) +4104 2047 5 + +InnChest 3651 (Name=Inn Chest) +4100 2039 5 + +InnChest 3650 (Name=Inn Chest) +4100 2049 5 + +Teleporter 7107 (PointDest=(3805, 443, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00; Name=teleporter) +4123 1915 0 + +Teleporter 7107 (PointDest=(3805, 443, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00; Name=teleporter) +4123 1916 0 + +StrongWoodDoor 1765 (Facing=WestCW; Name=strong wood door) +4121 1955 0 + +DarkWoodDoor 1709 (Facing=SouthCW; Name=dark wood door) +4112 2046 5 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +4112 2045 5 + +TrainingDummyEastAddon 4212 (Name=training dummy east addon) +4132 1949 0 + +TrainingDummyEastAddon 4212 (Name=training dummy east addon) +4132 1946 0 + +ArcheryButteAddon 4106 (Name=archery butte addon) +4136 2057 1 + +ArcheryButteAddon 4106 (Name=archery butte addon) +4136 2060 1 + +ArcheryButteAddon 4106 (Name=archery butte addon) +4136 2063 2 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +4155 1983 0 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4154 1983 0 + +DarkWoodDoor 1709 (Facing=SouthCW; Name=dark wood door) +4144 2044 0 + +DarkWoodDoor 1711 (Facing=NorthCCW; Name=dark wood door) +4144 2043 0 + +Backgammon 3612 (Name=backgammon) +4206 1940 11 + +Dices 4007 (Name=dices) +4205 1940 11 + +CheckerBoard 4006 (Name=checker board) +4212 1933 11 + +Dices 4007 (Name=dices) +4208 1933 11 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4209 1948 5 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +4210 1948 5 + +Chessboard 4006 (Name=chessboard) +4213 1945 11 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4227 1993 0 + +DarkWoodDoor 1701 (Facing=WestCW; Name=dark wood door) +4225 1998 0 + +DarkWoodDoor 1703 (Facing=EastCCW; Name=dark wood door) +4226 1998 0 + +StrongWoodDoor 1765 (Facing=WestCW; Name=strong wood door) +4326 1966 40 + +StrongWoodDoor 1767 (Facing=EastCCW; Name=strong wood door) +4332 1966 40 + +StrongWoodDoor 1775 (Facing=NorthCCW; Name=strong wood door) +4333 1961 40 + +Teleporter 7107 (PointDest=(3693, 215, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00; Name=teleporter) +3986 2154 0 + +Teleporter 7107 (PointDest=(3693, 215, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00; Name=teleporter) +3986 2155 0 + diff --git a/Data/Decoration/Britannia/Town - Paws.cfg b/Data/Decoration/Britannia/Town - Paws.cfg new file mode 100644 index 0000000..8423a00 --- /dev/null +++ b/Data/Decoration/Britannia/Town - Paws.cfg @@ -0,0 +1,228 @@ +Teleporter 7107 (PointDest=(4027, 374, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2062 2222 1 + +Teleporter 7107 (PointDest=(4027, 374, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2062 2221 1 + +Teleporter 7107 (PointDest=(4027, 374, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2062 2223 0 + +Actions 4199 +1999 2077 13 + +Actions 5990 +1992 2080 13 + +Actions 4201 +2005 2076 0 + +Actions 6031 +2031 2024 17 + +Actions 4153 +2026 2126 14 + +Actions 4851 +2028 2129 13 + +Actions 4708 +2063 2137 0 + +Actions 6039 +2094 2087 -5 + +ThruDoor 2160 (Facing=NorthCCW) +2011 2251 2 + +ThruDoor 2158 (Facing=SouthCW) +2011 2252 2 + +ThruDoor 2150 (Facing=WestCW) +2002 2240 1 + +ThruDoor 2152 (Facing=WestCW) +2003 2240 1 + +ThruDoor 3565 (Facing=WestCW; Hue=1194) +2072 2214 0 + +ThruDoor 3565 (Facing=WestCW; Hue=1194) +2071 2214 0 + +ThruDoor 3565 (Facing=WestCW; Hue=1194) +2070 2214 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1945 2036 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1949 2036 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1945 2073 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1943 2085 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +1953 2030 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1953 2029 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +1987 2078 6 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1987 2077 6 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1996 2077 6 + +DarkWoodDoor 1709 (Facing=SouthCW) +1996 2078 6 + +DarkWoodDoor 1703 (Facing=EastCCW) +1984 2086 6 + +DarkWoodDoor 1703 (Facing=EastCCW) +1992 2086 6 + +DarkWoodDoor 1701 (Facing=WestCW) +1991 2086 6 + +LoomEastAddon 4192 (Hue=1435) +1995 2083 6 + +SpinningwheelSouthAddon 4117 (Hue=1815) +1995 2081 6 + +ThruDoor 1701 (Facing=WestCW) +1988 2250 0 + +ThruDoor 1703 (Facing=WestCW) +1989 2250 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +1988 2243 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2015 2025 8 + +DarkWoodDoor 1701 (Facing=WestCW) +2010 2025 8 + +DarkWoodDoor 1701 (Facing=WestCW) +2008 2028 8 + +DarkWoodDoor 1701 (Facing=WestCW) +2013 2028 8 + +InnChest 3650 (Name=Inn Chest) +2007 2023 8 + +InnChest 3650 (Name=Inn Chest) +2012 2023 8 + +DarkWoodDoor 1701 (Facing=WestCW) +2011 2037 8 + +DarkWoodDoor 1703 (Facing=EastCCW) +2012 2037 8 + +InnChest 3650 (Name=Inn Chest) +2009 2032 8 + +InnChest 3650 (Name=Inn Chest) +2014 2032 8 + +DarkWoodDoor 1709 (Facing=SouthCW) +2004 2081 6 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2004 2080 6 + +DarkWoodDoor 1709 (Facing=SouthCW) +2015 2127 7 + +DarkWoodDoor 1701 (Facing=WestCW) +2020 2025 8 + +DarkWoodDoor 1701 (Facing=WestCW) +2018 2028 8 + +InnChest 3650 (Name=Inn Chest) +2017 2023 8 + +DartBoard 7727 +2022 2025 8 + +CheckerBoard 4006 +2027 2023 12 + +TrashBarrel 3703 +2029 2023 8 + +InnChest 3650 (Name=Inn Chest) +2019 2032 8 + +FlourMillEastAddon 6434 +2017 2132 7 + +DarkWoodDoor 1709 (Facing=SouthCW) +2022 2129 7 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2022 2128 7 + +Dices 4007 +2032 2028 14 + +DarkWoodGate 2150 (Facing=WestCW) +2039 2037 8 + +DarkWoodGate 2152 (Facing=EastCCW) +2040 2037 8 + +Chessboard 4006 +2032 2033 15 + +Backgammon 4013 +2042 2032 13 + +Dices 4007 +2042 2033 14 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2034 2129 7 + +DarkWoodDoor 1709 (Facing=SouthCW) +2034 2130 7 + +StrongWoodDoor 1775 (Facing=NorthCCW) +2054 2111 -18 + +MediumWoodDoor 1717 (Facing=WestCW) +2053 2117 5 + +MediumWoodDoor 1719 (Facing=EastCCW) +2054 2117 5 + +StrongWoodDoor 1773 (Facing=SouthCW) +2054 2112 -18 + +TrainingDummySouthAddon 4208 +2061 2114 -18 + +PickpocketDipSouthAddon 7724 +2059 2114 -18 + +SecretStoneDoor1 242 (Facing=NorthCCW) +2064 2111 -18 + +MediumWoodDoor 1725 (Facing=SouthCW) +2072 2115 5 + +MediumWoodDoor 1727 (Facing=NorthCCW) +2072 2114 5 + diff --git a/Data/Decoration/Britannia/Town - Skara Brae.cfg b/Data/Decoration/Britannia/Town - Skara Brae.cfg new file mode 100644 index 0000000..852772a --- /dev/null +++ b/Data/Decoration/Britannia/Town - Skara Brae.cfg @@ -0,0 +1,272 @@ +MetalDoor 1663 (Facing=NorthCCW) +543 1749 0 + +MetalDoor 1661 (Facing=SouthCW) +543 1767 0 + +ThruDoor 2084 +546 1774 0 + +ThruDoor 2086 +547 1774 0 + +TrashBarrel 3703 +711 1874 3 + +Actions 6494 +779 1896 7 + +ArcheryButteAddon 4107 +766 1832 2 + +TrainingDummyEastAddon 4212 +715 1887 0 + +FlourMillEastAddon 6434 +638 1777 2 + +Actions 2509 +694 1797 13 + +Actions 6030 +625 1888 10 + +Actions 4153 +640 1782 9 + +Actions 5990 +652 1890 7 + +Actions 4218 +671 1791 2 + +ArcheryButteAddon 4106 +664 1919 2 + +Actions 6031 +680 1882 15 + +Actions 5870 +678 1905 2 + +Actions 6327 (Hue=1182) +677 1911 3 + +Actions 6006 +710 1777 0 + +Actions 6584 +718 1890 12 + +Actions 8808 +719 1897 5 + +Actions 7128 +764 1862 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +638 1821 7 + +DarkWoodDoor 1709 (Facing=SouthCW) +633 1836 7 + +DarkWoodDoor 1709 (Facing=SouthCW) +638 1830 7 + +DarkWoodDoor 1711 (Facing=NorthCCW) +638 1829 7 + +StrongWoodDoor 1773 (Facing=SouthCW) +633 1897 0 + +StrongWoodDoor 1775 (Facing=NorthCCW) +633 1896 0 + +StrongWoodDoor 1765 (Facing=WestCW) +627 1893 41 + +StrongWoodDoor 1767 (Facing=EastCCW) +628 1893 41 + +DarkWoodDoor 1709 (Facing=SouthCW) +645 1783 2 + +DarkWoodDoor 1711 (Facing=NorthCCW) +645 1782 2 + +LoomSouthAddon 4193 +647 1886 0 + +SpinningwheelSouthAddon 4117 +654 1886 0 + +DarkWoodDoor 1701 (Facing=WestCW) +649 1892 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +650 1892 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +651 1909 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +651 1908 0 + +DarkWoodDoor 1701 (Facing=WestCW) +649 1910 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +675 1796 5 + +DarkWoodDoor 1701 (Facing=WestCW) +680 1802 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +681 1802 5 + +DartBoard 7727 +677 1874 26 + +CheckerBoard 4006 +685 1875 32 + +Chessboard 4006 +684 1872 12 + +Backgammon 3612 +684 1887 12 + +Dices 4007 +683 1886 12 + +Dices 4007 +679 1886 14 + +DarkWoodDoor 1709 (Facing=SouthCW) +683 1909 0 + +DarkWoodDoor 1701 (Facing=WestCW) +689 1802 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +697 1793 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +690 1802 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +689 1878 6 + +DarkWoodDoor 1701 (Facing=WestCW) +688 1878 6 + +InnChest 3650 (Name=Inn Chest) +702 1878 1 + +Teleporter 7107 (PointDest=(3692, 557, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +711 1769 0 + +Teleporter 7107 (PointDest=(3692, 557, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +711 1770 0 + +Teleporter 7107 (PointDest=(3692, 557, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +711 1771 0 + +InnChest 3651 (Name=Inn Chest) +712 1870 21 + +InnChest 3651 (Name=Inn Chest) +718 1870 21 + +InnChest 3651 (Name=Inn Chest) +717 1870 1 + +DarkWoodDoor 1709 (Facing=SouthCW) +706 1876 1 + +DarkWoodDoor 1709 (Facing=SouthCW) +715 1872 1 + +DarkWoodDoor 1701 (Facing=WestCW) +711 1879 1 + +InnChest 3651 (Name=Inn Chest) +711 1876 21 + +InnChest 3651 (Name=Inn Chest) +704 1876 21 + +DarkWoodDoor 1703 (Facing=EastCCW) +705 1875 21 + +DarkWoodDoor 1703 (Facing=EastCCW) +712 1872 21 + +DarkWoodDoor 1703 (Facing=EastCCW) +718 1872 21 + +DarkWoodDoor 1703 (Facing=EastCCW) +718 1875 21 + +DarkWoodDoor 1703 (Facing=EastCCW) +712 1875 21 + +DarkWoodDoor 1709 (Facing=SouthCW) +715 1895 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +715 1894 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +715 1907 5 + +LightWoodGate 2105 (Facing=WestCW) +744 1828 1 + +LightWoodGate 2107 (Facing=EastCCW) +745 1828 1 + +DarkWoodGate 2150 (Facing=WestCW) +746 1837 1 + +DarkWoodGate 2152 (Facing=EastCCW) +747 1837 1 + +DarkWoodDoor 1709 (Facing=SouthCW) +740 1843 1 + +DarkWoodDoor 1701 (Facing=WestCW) +747 1846 1 + +DarkWoodDoor 1703 (Facing=EastCCW) +748 1846 1 + +DarkWoodGate 2150 (Facing=WestCW) +746 1841 1 + +DarkWoodGate 2152 (Facing=EastCCW) +747 1841 1 + +DarkWoodDoor 1701 (Facing=WestCW) +775 1830 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +776 1830 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +769 1863 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +769 1862 5 + +DarkWoodDoor 1701 (Facing=WestCW) +792 1860 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +793 1860 5 + +Teleporter 7107 (PointDest=(857, 1954, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=18; Delay=00:00:00) +817 1954 0 + +Teleporter 7107 (PointDest=(817, 1954, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=18; Delay=00:00:00) +857 1954 0 diff --git a/Data/Decoration/Britannia/Town - Trinsic.cfg b/Data/Decoration/Britannia/Town - Trinsic.cfg new file mode 100644 index 0000000..3983afc --- /dev/null +++ b/Data/Decoration/Britannia/Town - Trinsic.cfg @@ -0,0 +1,437 @@ +DarkWoodDoor 1709 (Facing=SouthCW) +1945 2563 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1945 2562 0 + +TrainingDummyEastAddon 4212 +1947 2560 21 + +Actions 6494 +1963 2672 7 + +DarkWoodDoor 1701 (Facing=WestCW) +1962 2543 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1963 2543 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +1966 2555 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1966 2554 0 + +Actions 4153 +1978 2561 12 + +Actions 5990 +1997 2580 7 + +Actions 4202 +1992 2584 20 + +Actions 4199 +1997 2579 27 + +Actions 8808 +1953 2549 0 + +Actions 8786 +1956 2556 0 + +Actions 7817 +1972 2636 5 + +Actions 7132 +1995 2647 5 + +Actions 7128 +1998 2687 13 + +Actions 4781 +2028 2693 -13 + +Actions 6030 +2033 2624 9 + +Actions 6327 (Hue=1182) +2032 2692 13 + +Actions 4174 +2056 2622 3 + +Actions 6031 +2086 2644 14 + +Actions 6039 +2162 2630 -5 + +TrainingDummyEastAddon 4212 +1955 2558 21 + +TrainingDummySouthAddon 4208 +1958 2554 20 + +DarkWoodDoor 1701 (Facing=WestCW) +1954 2566 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +1955 2566 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +1964 2616 5 + +DarkWoodDoor 1701 (Facing=WestCW) +1965 2623 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +1966 2623 5 + +FlourMillEastAddon 6434 +1979 2567 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +1977 2619 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1977 2618 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +1969 2634 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +1977 2638 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1977 2637 5 + +DarkWoodDoor 1701 (Facing=WestCW) +1971 2641 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +1996 2569 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +1985 2562 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1985 2561 5 + +DarkWoodGate 2150 (Facing=WestCW) +1985 2586 0 + +DarkWoodGate 2152 (Facing=EastCCW) +1986 2586 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +1991 2581 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1991 2580 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1993 2576 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +1994 2576 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +1992 2606 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +1999 2605 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1999 2604 5 + +DarkWoodDoor 1701 (Facing=WestCW) +1990 2637 5 + +ArcheryButteAddon 4107 +1996 2693 1 + +DarkWoodDoor 1701 (Facing=WestCW) +2000 2571 20 + +LoomEastAddon 4192 (Hue=1451) +2001 2568 0 + +SpinningwheelEastAddon 4121 (Hue=1748) +2001 2571 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2002 2576 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2002 2577 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2002 2637 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2002 2659 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2002 2658 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2002 2687 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2002 2686 5 + +ArcheryButteAddon 4107 +2000 2693 2 + +DarkWoodDoor 1709 (Facing=SouthCW) +2027 2558 -20 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2027 2557 -20 + +DarkWoodDoor 1701 (Facing=WestCW) +2024 2563 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2025 2563 5 + +DarkWoodDoor 1701 (Facing=WestCW) +2025 2605 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2026 2605 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2025 2599 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2025 2598 5 + +DarkWoodDoor 1701 (Facing=WestCW) +2031 2696 10 + +DarkWoodDoor 1709 (Facing=SouthCW) +2040 2557 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2040 2556 0 + +PickpocketDipSouthAddon 7724 +2036 2554 -20 + +DarkWoodDoor 1701 (Facing=WestCW) +2037 2595 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2038 2595 5 + +DarkWoodDoor 1709 (Facing=SouthCW) +2044 2600 5 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2044 2599 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2032 2696 10 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2070 2591 5 + +DarkWoodDoor 1701 (Facing=WestCW) +2070 2605 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2071 2605 5 + +DarkWoodDoor 1701 (Facing=WestCW) +2083 2592 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +2084 2592 20 + +DarkWoodDoor 1701 (Facing=WestCW) +2083 2592 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2092 2601 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2093 2601 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2092 2614 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2093 2614 0 + +InnChest 3651 (Name=Inn Chest) +2089 2641 25 + +InnChest 3651 (Name=Inn Chest) +2083 2641 25 + +DarkWoodDoor 1703 (Facing=EastCCW) +2082 2647 25 + +DarkWoodDoor 1703 (Facing=EastCCW) +2091 2647 25 + +DarkWoodDoor 1701 (Facing=WestCW) +2084 2644 25 + +DarkWoodDoor 1701 (Facing=WestCW) +2095 2644 25 + +DarkWoodDoor 1701 (Facing=WestCW) +2088 2644 25 + +InnChest 3651 (Name=Inn Chest) +2081 2648 25 + +InnChest 3651 (Name=Inn Chest) +2090 2648 25 + +DarkWoodDoor 1701 (Facing=WestCW) +2100 2592 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +2101 2592 20 + +DarkWoodDoor 1701 (Facing=WestCW) +2101 2592 0 + +InnChest 3651 (Name=Inn Chest) +2096 2641 25 + +DarkWoodDoor 1703 (Facing=EastCCW) +2098 2647 25 + +InnChest 3651 (Name=Inn Chest) +2097 2648 25 + +DarkWoodDoor 1701 (Facing=WestCW) +2098 2651 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2099 2651 5 + +ThruDoor 1703 (Facing=WestCW) +2148 2560 0 + +Backgammon 3612 +2089 2644 11 + +Dices 4007 +2088 2644 11 + +Dices 4007 +2086 2649 11 + +CheckerBoard 4006 +2082 2643 9 + +Chessboard 4006 +2090 2649 9 + +DartBoard 7726 +2097 2641 5 + +TrashBarrel 3703 +2097 2641 5 + +DarkWoodDoor 1703 (Facing=EastCCW) +2020 2625 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +2027 2625 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +2030 2643 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2030 2642 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2032 2629 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2033 2629 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2046 2629 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2045 2629 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2039 2638 20 + +DarkWoodDoor 1701 (Facing=WestCW) +2046 2629 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +2043 2625 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +2035 2625 20 + +DarkWoodDoor 1701 (Facing=WestCW) +2032 2629 20 + +DarkWoodDoor 1711 (Facing=NorthCCW) +2047 2642 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +2047 2643 0 + +DarkWoodDoor 1701 (Facing=WestCW) +2053 2629 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2054 2629 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +2050 2625 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +2056 2625 20 + +MetalDoor 1653 (Facing=WestCW) +1890 2644 20 + +MetalDoor 1655 (Facing=EastCCW) +1891 2644 20 + +ThruDoor 2084 +1891 2671 0 + +ThruDoor 2086 +1892 2671 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +1945 2622 0 + +BarredMetalDoor2 8181 (Facing=SouthCW) +1945 2634 0 + +BarredMetalDoor2 8173 (Facing=WestCW) +1997 2543 0 + +BarredMetalDoor2 8173 (Facing=WestCW) +1995 2715 0 + +BarredMetalDoor2 8175 (Facing=EastCCW) +2016 2543 0 + +BarredMetalDoor2 8173 (Facing=WestCW) +2023 2715 0 + +BarredMetalDoor2 8173 (Facing=WestCW) +2083 2670 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2123 2606 0 + +BarredMetalDoor2 8181 (Facing=SouthCW) +2123 2633 0 diff --git a/Data/Decoration/Britannia/Town - Yew.cfg b/Data/Decoration/Britannia/Town - Yew.cfg new file mode 100644 index 0000000..f7028bf --- /dev/null +++ b/Data/Decoration/Britannia/Town - Yew.cfg @@ -0,0 +1,434 @@ +StrongWoodDoor 1773 (Facing=SouthCW) +1559 1027 4 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1559 1051 4 + +StrongWoodDoor 1765 (Facing=WestCW) +1571 1023 4 + +ThruDoor 2092 +1575 1044 4 + +ThruDoor 2094 +1575 1043 4 + +Teleporter 7107 (PointDest=(2985, 214, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1568 1070 -19 + +Teleporter 7107 (PointDest=(2985, 214, 0); MapDest=Underworld; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1568 1071 -19 + +LootChest1 2475 (Name=metal chest) +1532 1031 4 + +LootCrate1 3646 (Name=crate) +1554 1049 -17 + +LootCrate1 3647 (Name=crate) +1568 1058 4 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1571 1061 4 + +LoomEastAddon 4192 (Hue=1863) +1386 969 0 + +SpinningwheelSouthAddon 4117 (Hue=1626) +1388 961 0 + +TrashBarrel 3703 +1565 783 22 + +Actions 5990 +1388 965 7 + +Actions 6494 +1523 808 7 + +ArcheryButte 4107 +1536 851 0 + +ArcheryButte 4107 +1539 851 0 + +DarkWoodGate 2158 (Facing=SouthCW) +1466 846 1 + +DarkWoodGate 2160 (Facing=NorthCCW) +1466 845 1 + +DarkWoodGate 2160 (Facing=NorthCCW) +1479 842 1 + +DarkWoodGate 2158 (Facing=SouthCW) +1479 843 1 + +ThruDoor 2107 (Facing=WestCW) +1399 953 1 + +ThruDoor 2105 (Facing=WestCW) +1398 953 1 + +ThruDoor 2150 (Facing=WestCW) +1397 960 2 + +ThruDoor 2160 (Facing=NorthCCW) +1404 962 2 + +ThruDoor 2152 (Facing=WestCW) +1398 960 2 + +DarkWoodDoor 1709 (Facing=SouthCW) +1395 964 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1395 963 0 + +ThruDoor 2158 (Facing=SouthCW) +1404 963 2 + +DarkWoodDoor 1709 (Facing=SouthCW) +1462 870 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1470 874 0 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1470 870 -20 + +DarkWoodDoor 1703 (Facing=EastCCW) +1471 874 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1487 907 0 + +Actions 7132 +1488 894 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1488 907 0 + +Actions 4708 +1500 900 1 + +Actions 4708 +1511 888 1 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1533 866 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1529 874 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1530 874 0 + +Actions 7128 +1522 868 6 + +StrongWoodDoor 1765 (Facing=WestCW) +1550 779 20 + +Actions 4201 +1547 792 20 + +StrongWoodDoor 1765 (Facing=WestCW) +1551 810 20 + +Actions 4781 +1546 894 8 + +DarkWoodDoor 1701 (Facing=WestCW) +1544 904 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1545 904 0 + +Actions 6327 (Hue=1073) +1546 901 7 + +FlourMillSouthAddon 6446 +1552 771 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1552 783 0 + +StrongWoodDoor 1773 (Facing=SouthCW) +1556 774 20 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1556 773 20 + +Actions 4153 +1561 773 7 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1552 789 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1552 798 0 + +DarkWoodDoor 1709 (Facing=SouthCW) +1565 794 20 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1565 793 20 + +InnChest 3650 (Name=Inn Chest) +1560 793 20 + +DartBoard 7727 +1560 789 0 + +Chessboard 4006 +1564 794 7 + +CheckerBoard 4006 +1567 787 4 + +Actions 6030 +1562 798 9 + +Actions 4199 +1552 789 26 + +DarkWoodDoor 1701 (Facing=WestCW) +1561 814 20 + +DarkWoodDoor 1701 (Facing=WestCW) +1565 814 20 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1556 812 20 + +StrongWoodDoor 1767 (Facing=EastCCW) +1552 810 20 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1565 801 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +1565 802 20 + +InnChest 3650 (Name=Inn Chest) +1560 801 20 + +StrongWoodDoor 1773 (Facing=SouthCW) +1581 775 20 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1581 774 20 + +Actions 4851 +1574 770 6 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1570 793 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +1570 794 20 + +InnChest 3651 (Name=Inn Chest) +1573 790 20 + +InnChest 3651 (Name=Inn Chest) +1573 798 20 + +Dices 4007 +1570 787 5 + +DarkWoodDoor 1701 (Facing=WestCW) +1572 814 20 + +DarkWoodDoor 1703 (Facing=EastCCW) +1573 814 20 + +StrongWoodDoor 1775 (Facing=NorthCCW) +1581 812 20 + +TrainingDummySouthAddon 4208 +1580 814 0 + +TrainingDummySouthAddon 4208 +1576 814 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1570 801 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +1570 802 20 + +Backgammon 3612 +1574 802 6 + +Dices 4007 +1575 802 6 + +DarkWoodDoor 1701 (Facing=WestCW) +1578 851 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1579 851 0 + +DarkWoodGate 2150 (Facing=WestCW) +1583 870 1 + +DarkWoodDoor 1703 (Facing=EastCCW) +1578 867 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1575 877 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1576 877 0 + +Actions 8786 +1575 888 0 + +DarkWoodDoor 1701 (Facing=WestCW) +1576 897 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1577 897 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1587 783 20 + +StrongWoodDoor 1767 (Facing=EastCCW) +1589 779 20 + +Actions 7824 +1584 774 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1586 790 0 + +DarkWoodDoor 1703 (Facing=EastCCW) +1589 784 0 + +DarkWoodDoor 1711 (Facing=NorthCCW) +1587 789 20 + +DarkWoodDoor 1709 (Facing=SouthCW) +1587 806 20 + +StrongWoodDoor 1767 (Facing=EastCCW) +1589 810 20 + +TrainingDummySouthAddon 4208 +1584 814 0 + +Actions 4708 +1595 850 3 + +DarkWoodGate 2152 (Facing=EastCCW) +1584 870 1 + +StrongWoodDoor 1773 (Facing=SouthCW) +989 953 20 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +989 958 0 + +StrongWoodDoor 1773 (Facing=SouthCW) +989 953 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +989 970 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +989 964 0 + +StrongWoodDoor 1773 (Facing=SouthCW) +989 987 20 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +989 982 0 + +StrongWoodDoor 1775 (Facing=NorthCCW) +989 987 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +989 976 0 + +BarredMetalDoor2 8175 (Facing=EastCCW) +998 955 0 + +BarredMetalDoor2 8173 (Facing=WestCW) +1002 959 0 + +BarredMetalDoor2 8175 (Facing=EastCCW) +1003 959 0 + +StrongWoodDoor 1767 (Facing=EastCCW) +992 951 0 + +BarredMetalDoor2 8175 (Facing=EastCCW) +1007 955 0 + +BarredMetalDoor2 8181 (Facing=SouthCW) +994 970 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +994 969 0 + +BarredMetalDoor2 8173 (Facing=WestCW) +1002 981 0 + +BarredMetalDoor2 8175 (Facing=EastCCW) +1003 981 0 + +StrongWoodDoor 1767 (Facing=EastCCW) +1007 985 0 + +StrongWoodDoor 1767 (Facing=EastCCW) +992 989 0 + +StrongWoodDoor 1767 (Facing=EastCCW) +998 985 0 + +BarredMetalDoor 1669 (Facing=WestCW) +1002 995 0 + +BarredMetalDoor 1671 (Facing=EastCCW) +1003 995 0 + +StrongWoodDoor 1765 (Facing=WestCW) +1018 955 20 + +BarredMetalDoor2 8175 (Facing=EastCCW) +1013 955 0 + +StrongWoodDoor 1765 (Facing=WestCW) +1018 955 0 + +StrongWoodDoor 1773 (Facing=SouthCW) +1020 958 0 + +BarredMetalDoor2 8181 (Facing=SouthCW) +1011 970 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +1011 969 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +1016 964 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +1016 970 0 + +StrongWoodDoor 1773 (Facing=SouthCW) +1016 987 20 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +1016 982 0 + +StrongWoodDoor 1773 (Facing=SouthCW) +1016 987 0 + +StrongWoodDoor 1765 (Facing=WestCW) +1013 989 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +1016 976 0 diff --git a/Data/Decoration/Britannia/moongates.cfg b/Data/Decoration/Britannia/moongates.cfg new file mode 100644 index 0000000..c6fe264 --- /dev/null +++ b/Data/Decoration/Britannia/moongates.cfg @@ -0,0 +1,23 @@ +Moongate 3948 (Light=Circle300; Name=moongate) +2030 1631 8 + +Moongate 3948 (Light=Circle300; Name=moongate) +1322 743 2 + +Moongate 3948 (Light=Circle300; Name=moongate) +2065 2828 2 + +Moongate 3948 (Light=Circle300; Name=moongate) +790 1949 2 + +Moongate 3948 (Light=Circle300; Name=moongate) +3958 2034 2 + +Moongate 3948 (Light=Circle300; Name=moongate) +3031 462 2 + +Moongate 3948 (Light=Circle300; Name=moongate) +3354 2551 12 + +Moongate 3948 (Light=Circle300; Name=moongate) +1173 3251 3 diff --git a/Data/Decoration/Underworld/Caves.cfg b/Data/Decoration/Underworld/Caves.cfg new file mode 100644 index 0000000..87fb4f1 --- /dev/null +++ b/Data/Decoration/Underworld/Caves.cfg @@ -0,0 +1,253 @@ +Actions 6006 +4015 371 0 + +Actions 6584 +4018 378 5 + +Actions 6006 +3525 717 0 + +Actions 6006 +3917 554 0 + +Actions 6006 +3468 552 0 + +Actions 6006 +4431 373 0 + +Teleporter 7107 (PointDest=(1904, 1398, 2); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4422 393 0 + +Teleporter 7107 (PointDest=(1904, 1398, 2); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4423 393 0 + +Teleporter 7107 (PointDest=(1904, 1398, 2); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4425 393 0 + +Teleporter 7107 (PointDest=(1904, 1398, 2); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4424 393 0 + +Teleporter 7107 (PointDest=(1543, 1361, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4470 249 0 + +Teleporter 7107 (PointDest=(1543, 1361, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4471 249 0 + +Teleporter 7107 (PointDest=(1543, 1361, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4472 249 0 + +Teleporter 7107 (PointDest=(1543, 1361, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4473 249 0 + +Teleporter 7107 (PointDest=(1543, 1361, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4474 249 0 + +Teleporter 7107 (PointDest=(1808, 1220, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4589 461 0 + +Teleporter 7107 (PointDest=(1808, 1220, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4590 461 0 + +Teleporter 7107 (PointDest=(1808, 1220, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4591 461 0 + +Teleporter 7107 (PointDest=(1808, 1220, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4592 461 0 + +Teleporter 7107 (PointDest=(1808, 1220, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4593 461 0 + +Teleporter 7107 (PointDest=(1808, 1220, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4594 461 0 + +Teleporter 7107 (PointDest=(2761, 1384, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3463 570 0 + +Teleporter 7107 (PointDest=(2761, 1384, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3464 570 0 + +Teleporter 7107 (PointDest=(2761, 1384, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3465 570 0 + +Teleporter 7107 (PointDest=(2761, 1384, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3466 570 0 + +Teleporter 7107 (PointDest=(2761, 1384, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3467 570 0 + +Teleporter 7107 (PointDest=(2761, 1384, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3468 570 0 + +Teleporter 7107 (PointDest=(2062, 2222, 1); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4027 374 0 + +Teleporter 7107 (PointDest=(2062, 2222, 1); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4027 373 0 + +Teleporter 7107 (PointDest=(2062, 2222, 1); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4027 372 0 + +Teleporter 7107 (PointDest=(2062, 2222, 1); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4027 375 0 + +Teleporter 7107 (PointDest=(2062, 2222, 1); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4027 376 0 + +Teleporter 7107 (PointDest=(1077, 3088, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3436 235 0 + +Teleporter 7107 (PointDest=(1077, 3088, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3437 235 0 + +Teleporter 7107 (PointDest=(1077, 3088, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3438 235 0 + +Teleporter 7107 (PointDest=(1077, 3088, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3439 235 0 + +Teleporter 7107 (PointDest=(1050, 3045, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3553 390 0 + +Teleporter 7107 (PointDest=(1050, 3045, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3554 390 0 + +Teleporter 7107 (PointDest=(1050, 3045, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3555 390 0 + +Teleporter 7107 (PointDest=(1050, 3045, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3556 390 0 + +Teleporter 7107 (PointDest=(2629, 2126, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3857 280 0 + +Teleporter 7107 (PointDest=(2629, 2126, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3856 280 0 + +Teleporter 7107 (PointDest=(2629, 2126, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3858 280 0 + +Teleporter 7107 (PointDest=(2629, 2126, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3859 280 0 + +Teleporter 7107 (PointDest=(4124, 1916, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3805 441 0 + +Teleporter 7107 (PointDest=(4124, 1916, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3805 442 0 + +Teleporter 7107 (PointDest=(4124, 1916, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3805 443 0 + +Teleporter 7107 (PointDest=(4124, 1916, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3805 444 0 + +Teleporter 7107 (PointDest=(3986, 2154, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3693 215 0 + +Teleporter 7107 (PointDest=(3986, 2154, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3693 216 0 + +Teleporter 7107 (PointDest=(3986, 2154, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3693 214 0 + +Teleporter 7107 (PointDest=(3986, 2154, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3693 213 0 + +Teleporter 7107 (PointDest=(3986, 2154, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3693 212 0 + +Teleporter 7107 (PointDest=(3986, 2154, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3693 217 0 + +Teleporter 7107 (PointDest=(711, 1770, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3692 557 0 + +Teleporter 7107 (PointDest=(711, 1770, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3692 556 0 + +Teleporter 7107 (PointDest=(711, 1770, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3692 555 0 + +Teleporter 7107 (PointDest=(711, 1770, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3692 558 0 + +Teleporter 7107 (PointDest=(711, 1770, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3692 559 0 + +Teleporter 7107 (PointDest=(711, 1770, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3692 560 0 + +Teleporter 7107 (PointDest=(2791, 424, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3515 729 0 + +Teleporter 7107 (PointDest=(2791, 424, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3516 729 0 + +Teleporter 7107 (PointDest=(2791, 424, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3517 729 0 + +Teleporter 7107 (PointDest=(2791, 424, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3518 729 0 + +Teleporter 7107 (PointDest=(2979, 489, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3932 551 0 + +Teleporter 7107 (PointDest=(2979, 489, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3932 552 0 + +Teleporter 7107 (PointDest=(2979, 489, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3932 553 0 + +Teleporter 7107 (PointDest=(2979, 489, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3932 554 0 + +Teleporter 7107 (PointDest=(6496, 3436, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4354 729 0 + +Teleporter 7107 (PointDest=(6496, 3436, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4355 729 0 + +Teleporter 7107 (PointDest=(6496, 3436, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4356 729 0 + +Teleporter 7107 (PointDest=(6496, 3436, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4357 729 0 + +Teleporter 7107 (PointDest=(6496, 3436, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4358 729 0 + +Teleporter 7107 (PointDest=(6609, 3563, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4303 570 0 + +Teleporter 7107 (PointDest=(6609, 3563, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4304 570 0 + +Teleporter 7107 (PointDest=(6609, 3563, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4305 570 0 + +Teleporter 7107 (PointDest=(6609, 3563, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4306 570 0 + +Teleporter 7107 (PointDest=(6609, 3563, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4307 570 0 + +Teleporter 7107 (PointDest=(6609, 3563, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4308 570 0 + +Teleporter 7107 (PointDest=(4814, 1872, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4497 597 0 + +Teleporter 7107 (PointDest=(4814, 1872, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4498 597 0 + +Teleporter 7107 (PointDest=(4814, 1872, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4499 597 0 + +Teleporter 7107 (PointDest=(4814, 1872, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4501 597 0 + +Teleporter 7107 (PointDest=(4814, 1872, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4500 597 0 + + diff --git a/Data/Decoration/Underworld/Dungeon - Covetous.cfg b/Data/Decoration/Underworld/Dungeon - Covetous.cfg new file mode 100644 index 0000000..5ded80a --- /dev/null +++ b/Data/Decoration/Underworld/Dungeon - Covetous.cfg @@ -0,0 +1,506 @@ +ChestOfSecrets 2192 +493 1733 8 + +BookOfLore 3736 +907 1672 9 + +LootCrate1 3646 (Name=crate) +1098 1247 0 + +LootCrate2 3644 (Name=crate) +875 1451 2 + +LootCrate1 3646 (Name=crate) +877 1450 1 + +LootCrate2 3645 (Name=crate) +876 1471 0 + +LootCrate2 3644 (Name=crate) +874 1472 0 + +LootCrate1 3646 (Name=crate) +893 1433 0 + +LootCrate4 3737 (Name=crate) +891 1490 1 + +LootCrate2 3644 (Name=crate) +938 1441 0 + +LootCrate1 3646 (Name=crate) +945 1488 7 + +LootCrate2 3645 (Name=crate) +967 1462 0 + +LootCrate2 3644 (Name=crate) +965 1461 0 + +LootCrate2 3644 (Name=crate) +999 1512 0 + +LootCrate1 3646 (Name=crate) +999 1512 4 + +LootCrate1 3647 (Name=crate) +1031 1220 0 + +LootCrate2 3644 (Name=crate) +1026 1480 0 + +LootCrate4 3737 (Name=crate) +1052 1274 1 + +LootCrate1 3646 (Name=crate) +1053 1274 0 + +LootCrate1 3647 (Name=crate) +1047 1306 0 + +LootCrate1 3646 (Name=crate) +1044 1308 0 + +LootCrate1 3647 (Name=crate) +1068 1231 0 + +LootCrate1 3647 (Name=crate) +1097 1245 0 + +LootCrate1 3646 (Name=crate) +1123 1290 1 + +LootChest4 3667 (Hue=1189; Name=metal chest) +488 1734 10 + +LootChest3 3648 (Name=metal chest) +487 1738 9 + +LootBox3 3651 (Name=wooden chest) +491 1733 10 + +LootBox3 3651 (Name=wooden chest) +682 1732 0 + +LootChest1 2475 (Name=metal chest) +679 1732 0 + +LootChest1 2475 (Name=metal chest) +706 1728 0 + +LootCrate1 3647 (Name=crate) +725 1731 0 + +LootBox3 3650 (Name=wooden chest) +864 1702 6 + +LootChest1 3708 (Name=metal chest) +864 1708 6 + +LootBox2 1518 (Hue=2413; Name=wooden chest) +880 1666 0 + +LootBox1 1326 (Hue=2413; Name=wooden chest) +883 1680 0 + +LootBox2 1518 (Hue=2413; Name=wooden chest) +882 1721 0 + +LootBox1 1326 (Hue=2413; Name=wooden chest) +884 1734 0 + +LootBox3 3651 (Name=wooden chest) +903 1654 6 + +LootBox1 1326 (Hue=2413; Name=wooden chest) +911 1652 6 + +LootChest3 3649 (Name=metal chest) +898 1676 0 + +LootBox3 3650 (Name=wooden chest) +896 1679 0 + +LootBox1 1325 (Hue=2413; Name=wooden chest) +927 1701 6 + +LootChest3 3649 (Name=metal chest) +937 1656 0 + +LootBox3 3651 (Name=wooden chest) +929 1684 0 + +LootBox3 3651 (Name=wooden chest) +929 1718 0 + +LootBox2 1517 (Hue=2413; Name=wooden chest) +930 1734 0 + +LootBox3 3651 (Name=wooden chest) +945 1656 0 + +LootBox2 1517 (Hue=2413; Name=wooden chest) +951 1680 6 + +LootBox4 1160 (Name=wooden chest) +949 1680 6 + +LootBox1 1326 (Hue=2413; Name=wooden chest) +949 1705 6 + +WarningItem 4825 (Range=3; WarningString=Beware Ye Who Enter These Halls!; WarningNumber=0) +904 1735 0 + +WarningItem 4825 (Range=3; WarningString=Beware Ye Who Enter These Halls!; WarningNumber=0) +910 1735 0 + +MetalDoor2 1733 (Facing=WestCW) +531 1740 0 + +MetalDoor2 1735 (Facing=EastCCW) +532 1740 0 + +Teleporter 7107 (PointDest=(923, 1665, -13); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +530 1733 12 + +Teleporter 7107 (PointDest=(923, 1665, -13); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +530 1732 12 + +Teleporter 7107 (PointDest=(923, 1665, -13); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +530 1734 12 + +MetalDoor2 1741 (Facing=SouthCW) +687 1737 0 + +BarredMetalDoor 1669 (Facing=WestCW) +691 1734 0 + +BarredMetalDoor 1669 (Facing=WestCW) +699 1734 0 + +BarredMetalDoor 1669 (Facing=WestCW) +691 1739 0 + +BarredMetalDoor 1669 (Facing=WestCW) +699 1739 0 + +BarredMetalDoor 1669 (Facing=WestCW) +715 1734 0 + +BarredMetalDoor 1669 (Facing=WestCW) +707 1734 0 + +BarredMetalDoor 1669 (Facing=WestCW) +707 1739 0 + +BarredMetalDoor 1669 (Facing=WestCW) +715 1739 0 + +MetalDoor2 1743 (Facing=NorthCCW) +719 1737 0 + +Teleporter 7107 (PointDest=(885, 1651, -13); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +728 1733 12 + +Teleporter 7107 (PointDest=(885, 1651, -13); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +727 1733 12 + +Teleporter 7107 (PointDest=(885, 1651, -13); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +729 1733 12 + +Teleporter 7107 (PointDest=(909, 1748, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +843 1501 0 + +Teleporter 7107 (PointDest=(909, 1748, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +843 1502 0 + +Teleporter 7107 (PointDest=(909, 1748, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +843 1503 0 + +MetalDoor2 1741 (Facing=SouthCW) +871 1705 0 + +MetalDoor2 1741 (Facing=SouthCW) +879 1705 0 + +Teleporter 7107 (PointDest=(728, 1733, 12); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +884 1651 -13 + +Teleporter 7107 (PointDest=(728, 1733, 12); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +885 1651 -13 + +MetalDoor2 1741 (Facing=SouthCW) +895 1654 0 + +MetalDoor2 1743 (Facing=NorthCCW) +895 1653 0 + +MetalDoor2 1741 (Facing=SouthCW) +891 1665 0 + +MetalDoor2 1741 (Facing=SouthCW) +887 1667 0 + +MetalDoor2 1741 (Facing=SouthCW) +887 1675 0 + +MetalDoor2 1741 (Facing=SouthCW) +887 1683 0 + +MetalDoor2 1741 (Facing=SouthCW) +887 1691 0 + +MetalDoor2 1741 (Facing=SouthCW) +895 1688 0 + +SecretDungeonDoor 796 (Facing=SouthCW) +891 1688 0 + +SecretDungeonDoor 798 (Facing=NorthCCW) +891 1687 0 + +MetalDoor2 1743 (Facing=NorthCCW) +895 1687 0 + +MetalDoor2 1741 (Facing=SouthCW) +887 1700 0 + +MetalDoor2 1741 (Facing=SouthCW) +891 1702 0 + +MetalDoor2 1743 (Facing=NorthCCW) +891 1701 0 + +MetalDoor2 1743 (Facing=NorthCCW) +887 1714 0 + +MetalDoor2 1743 (Facing=NorthCCW) +887 1721 0 + +MetalDoor2 1743 (Facing=NorthCCW) +891 1727 0 + +MetalDoor2 1743 (Facing=NorthCCW) +887 1729 0 + +MetalDoor2 1743 (Facing=NorthCCW) +887 1736 0 + +MetalDoor2 1735 (Facing=EastCCW) +897 1659 0 + +MetalDoor2 1733 (Facing=WestCW) +907 1695 0 + +MetalDoor2 1735 (Facing=EastCCW) +908 1695 0 + +MetalDoor2 1741 (Facing=SouthCW) +909 1702 0 + +MetalDoor2 1741 (Facing=SouthCW) +905 1702 0 + +MetalDoor2 1743 (Facing=NorthCCW) +905 1701 0 + +MetalDoor2 1743 (Facing=NorthCCW) +909 1701 0 + +MetalDoor2 1735 (Facing=EastCCW) +908 1711 0 + +MetalDoor2 1733 (Facing=WestCW) +907 1711 0 + +Teleporter 7107 (PointDest=(843, 1502, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +909 1747 0 + +Teleporter 7107 (PointDest=(843, 1502, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +909 1748 0 + +Teleporter 7107 (PointDest=(843, 1502, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +909 1749 0 + +MetalDoor2 1735 (Facing=EastCCW) +918 1675 0 + +MetalDoor2 1733 (Facing=WestCW) +917 1675 0 + +Teleporter 7107 (PointDest=(530, 1733, 12); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +923 1664 -13 + +Teleporter 7107 (PointDest=(530, 1733, 12); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +923 1665 -13 + +MetalDoor2 1741 (Facing=SouthCW) +923 1702 0 + +MetalDoor2 1743 (Facing=NorthCCW) +923 1701 0 + +MetalDoor2 1743 (Facing=NorthCCW) +919 1727 0 + +MetalDoor2 1741 (Facing=SouthCW) +927 1714 0 + +MetalDoor2 1741 (Facing=SouthCW) +927 1721 0 + +MetalDoor2 1741 (Facing=SouthCW) +919 1728 0 + +MetalDoor2 1741 (Facing=SouthCW) +927 1729 0 + +MetalDoor2 1741 (Facing=SouthCW) +927 1737 0 + +MetalDoor2 1735 (Facing=EastCCW) +931 1691 0 + +MetalDoor2 1735 (Facing=EastCCW) +931 1695 0 + +MetalDoor2 1741 (Facing=SouthCW) +939 1702 0 + +MetalDoor2 1743 (Facing=NorthCCW) +939 1701 0 + +MetalDoor2 1743 (Facing=NorthCCW) +943 1701 0 + +MetalDoor2 1741 (Facing=SouthCW) +943 1702 0 + +MetalDoor2 1735 (Facing=EastCCW) +946 1671 0 + +MetalDoor2 1733 (Facing=WestCW) +945 1671 0 + +MetalDoor2 1733 (Facing=WestCW) +945 1695 0 + +MetalDoor2 1741 (Facing=SouthCW) +947 1683 0 + +MetalDoor2 1735 (Facing=EastCCW) +946 1695 0 + +Teleporter 7107 (PointDest=(1071, 1477, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1024 1320 0 + +Teleporter 7107 (PointDest=(1071, 1477, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1024 1321 0 + +Teleporter 7107 (PointDest=(1071, 1477, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1024 1322 0 + +Teleporter 7107 (PointDest=(1024, 1321, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1071 1476 0 + +Teleporter 7107 (PointDest=(1024, 1321, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1071 1477 0 + +Teleporter 7107 (PointDest=(1024, 1321, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1071 1478 0 + +Teleporter 7107 (PointDest=(1024, 1321, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1071 1479 4 + +Teleporter 7107 (PointDest=(2889, 659, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1089 1235 25 + +Teleporter 7107 (PointDest=(2889, 659, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1088 1235 25 + +MushroomTrap 6594 +914 1445 0 + +MushroomTrap 6594 +944 1503 1 + +FireColumnTrap 655 +1000 1495 0 + +MushroomTrap 6594 +1031 1227 0 + +MushroomTrap 6594 +1024 1284 0 + +MushroomTrap 6594 +1030 1487 0 + +FireColumnTrap 655 +1058 1481 0 + +MushroomTrap 6594 +1073 1247 0 + +FireColumnTrap 655 +1100 1222 0 + +MushroomTrap 6594 +1099 1302 0 + +FireColumnTrap 655 +1114 1221 0 + +FireColumnTrap 655 +1105 1224 0 + +MushroomTrap 6594 +516 1724 0 + +MushroomTrap 6594 +532 1752 0 + +DartTrap 1599 +703 1736 0 + +DartTrap 1599 +694 1736 0 + +DartTrap 1599 +875 1705 0 + +DartTrap 1027 +889 1679 0 + +FireColumnTrap 655 +883 1721 0 + +GasTrap 5005 +904 1674 0 + +DartTrap 1599 +898 1701 0 + +GiantSpikeTrap 7167 +907 1726 0 + +SawTrap 4524 +914 1685 0 + +DartTrap 1599 +917 1701 0 + +AxeTrap 4403 +924 1719 0 + +GiantSpikeTrap 7167 +942 1658 0 + +GiantSpikeTrap 7167 +939 1667 0 + +GiantSpikeTrap 7167 +949 1662 0 + +SpikeTrap 4360 +944 1681 4 diff --git a/Data/Decoration/Underworld/Dungeon - Despise.cfg b/Data/Decoration/Underworld/Dungeon - Despise.cfg new file mode 100644 index 0000000..aa3fbab --- /dev/null +++ b/Data/Decoration/Underworld/Dungeon - Despise.cfg @@ -0,0 +1,60 @@ +Teleporter 7107 (PointDest=(714, 1228, -8); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +485 1420 72 + +Teleporter 7107 (PointDest=(714, 1228, -8); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +485 1419 72 + +Teleporter 7107 (PointDest=(714, 1228, -8); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +485 1418 72 + +Teleporter 7107 (PointDest=(721, 1005, 50); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +602 1105 39 + +Teleporter 7107 (PointDest=(721, 1005, 50); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +602 1106 39 + +Teleporter 7107 (PointDest=(721, 1005, 50); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +602 1107 39 + +Teleporter 7107 (PointDest=(484, 1419, 67); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +713 1227 -13 + +Teleporter 7107 (PointDest=(484, 1419, 67); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +713 1228 -13 + +Teleporter 7107 (PointDest=(600, 1106, 46); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +721 1004 50 + +Teleporter 7107 (PointDest=(600, 1106, 46); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +721 1005 50 + +Teleporter 7107 (PointDest=(600, 1106, 46); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +721 1006 50 + +Teleporter 7107 (PointDest=(851, 1145, 37); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +723 1010 12 + +Teleporter 7107 (PointDest=(851, 1145, 37); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +723 1009 12 + +Teleporter 7107 (PointDest=(851, 1145, 37); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +723 1008 12 + +Teleporter 7107 (PointDest=(1647, 1225, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +732 1027 30 + +Teleporter 7107 (PointDest=(1647, 1225, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +731 1027 30 + +Teleporter 7107 (PointDest=(1647, 1225, 10); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +733 1027 30 + +Teleporter 7107 (PointDest=(724, 1009, 17); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +852 1146 40 + +Teleporter 7107 (PointDest=(724, 1009, 17); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +852 1145 40 + +Teleporter 7107 (PointDest=(724, 1009, 17); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +852 1144 40 + diff --git a/Data/Decoration/Underworld/Dungeon - Destard.cfg b/Data/Decoration/Underworld/Dungeon - Destard.cfg new file mode 100644 index 0000000..5f3aef3 --- /dev/null +++ b/Data/Decoration/Underworld/Dungeon - Destard.cfg @@ -0,0 +1,57 @@ +Teleporter 7107 (PointDest=(1023, 526, 17); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +913 997 -28 + +Teleporter 7107 (PointDest=(1023, 526, 17); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +914 997 -28 + +Teleporter 7107 (PointDest=(1023, 526, 17); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +915 997 -28 + +Teleporter 7107 (PointDest=(1023, 526, 17); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +916 997 -28 + +Teleporter 7107 (PointDest=(1032, 538, -19); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +979 739 25 + +Teleporter 7107 (PointDest=(1032, 538, -19); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +979 738 25 + +Teleporter 7107 (PointDest=(1032, 538, -19); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +979 737 25 + +Teleporter 7107 (PointDest=(1032, 538, -19); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +979 736 25 + +Teleporter 7107 (PointDest=(914, 996, -23); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1022 525 22 + +Teleporter 7107 (PointDest=(914, 996, -23); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1023 525 22 + +Teleporter 7107 (PointDest=(914, 996, -23); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1024 525 22 + +Teleporter 7107 (PointDest=(914, 996, -23); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1025 525 22 + +Teleporter 7107 (PointDest=(981, 738, 22); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1033 539 -25 + +Teleporter 7107 (PointDest=(981, 738, 22); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1033 538 -25 + +Teleporter 7107 (PointDest=(981, 738, 22); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1033 537 -25 + +Teleporter 7107 (PointDest=(981, 738, 22); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1033 536 -25 + +Teleporter 7107 (PointDest=(1537, 2640, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1028 1095 4 + +Teleporter 7107 (PointDest=(1537, 2640, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1026 1095 4 + +Teleporter 7107 (PointDest=(1537, 2640, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1027 1095 3 + diff --git a/Data/Decoration/Underworld/Labyrinth - Silent Tomb.cfg b/Data/Decoration/Underworld/Labyrinth - Silent Tomb.cfg new file mode 100644 index 0000000..18ad0f4 --- /dev/null +++ b/Data/Decoration/Underworld/Labyrinth - Silent Tomb.cfg @@ -0,0 +1,399 @@ +Teleporter 7107 (PointDest=(3992, 990, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3461 933 0 + +Teleporter 7107 (PointDest=(3992, 990, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3462 933 0 + +Teleporter 7107 (PointDest=(2186, 2004, 2); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3485 963 11 + +Teleporter 7107 (PointDest=(2186, 2004, 2); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3485 962 11 + +Teleporter 7107 (PointDest=(3743, 922, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3513 997 0 + +Teleporter 7107 (PointDest=(3743, 922, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3514 997 0 + +Teleporter 7107 (PointDest=(3514, 997, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3742 922 0 + +Teleporter 7107 (PointDest=(3514, 997, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3743 922 0 + +Teleporter 7107 (PointDest=(2182, 2117, -13); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3762 979 17 + +Teleporter 7107 (PointDest=(2182, 2117, -13); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3762 980 17 + +Teleporter 7107 (PointDest=(3462, 933, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3991 990 0 + +Teleporter 7107 (PointDest=(3462, 933, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +3992 990 0 + +Teleporter 7107 (PointDest=(2049, 1935, -13); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4010 937 17 + +Teleporter 7107 (PointDest=(2049, 1935, -13); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4010 938 17 + +MetalDoor 1663 (Facing=NorthCCW) +3451 977 0 + +MetalDoor 1655 (Facing=EastCCW) +3462 953 0 + +MetalDoor 1653 (Facing=WestCW) +3462 975 0 + +MetalDoor 1655 (Facing=EastCCW) +3463 975 0 + +MetalDoor 1663 (Facing=NorthCCW) +3471 969 0 + +MetalDoor 1663 (Facing=NorthCCW) +3465 1000 0 + +MetalDoor 1653 (Facing=WestCW) +3478 938 0 + +MetalDoor 1653 (Facing=WestCW) +3484 983 0 + +MetalDoor 1653 (Facing=WestCW) +3497 930 0 + +MetalDoor 1653 (Facing=WestCW) +3506 947 0 + +MetalDoor 1653 (Facing=WestCW) +3519 944 0 + +MetalDoor 1653 (Facing=WestCW) +3519 972 0 + +MetalDoor 1663 (Facing=NorthCCW) +3512 977 0 + +MetalDoor 1655 (Facing=EastCCW) +3520 944 0 + +MetalDoor 1655 (Facing=EastCCW) +3520 972 0 + +MetalDoor 1653 (Facing=WestCW) +3718 949 0 + +MetalDoor 1653 (Facing=WestCW) +3722 979 0 + +MetalDoor 1663 (Facing=NorthCCW) +3736 942 0 + +MetalDoor 1661 (Facing=SouthCW) +3736 943 0 + +MetalDoor 1653 (Facing=WestCW) +3730 957 0 + +MetalDoor 1653 (Facing=WestCW) +3733 970 0 + +BarredMetalDoor2 8173 (Facing=WestCW) +3743 970 0 + +MetalDoor 1653 (Facing=WestCW) +3758 942 0 + +MetalDoor 1653 (Facing=WestCW) +3750 952 0 + +BarredMetalDoor2 8173 (Facing=WestCW) +3753 970 0 + +MetalDoor 1663 (Facing=NorthCCW) +3745 983 0 + +MetalDoor 1663 (Facing=NorthCCW) +3772 937 0 + +MetalDoor 1663 (Facing=NorthCCW) +3767 954 0 + +MetalDoor 1653 (Facing=WestCW) +3763 964 0 + +MetalDoor 1663 (Facing=NorthCCW) +3767 960 0 + +MetalDoor 1653 (Facing=WestCW) +3789 935 0 + +MetalDoor 1663 (Facing=NorthCCW) +3788 963 0 + +MetalDoor 1653 (Facing=WestCW) +3784 972 0 + +MetalDoor 1663 (Facing=NorthCCW) +3776 971 0 + +MetalDoor 1653 (Facing=WestCW) +3976 962 0 + +MetalDoor 1655 (Facing=EastCCW) +3976 976 0 + +MetalDoor 1653 (Facing=WestCW) +3995 943 0 + +MetalDoor 1663 (Facing=NorthCCW) +3984 936 0 + +MetalDoor 1653 (Facing=WestCW) +3995 950 0 + +MetalDoor 1663 (Facing=NorthCCW) +3987 952 0 + +MetalDoor 1653 (Facing=WestCW) +3989 962 0 + +MetalDoor 1655 (Facing=EastCCW) +3996 976 0 + +MetalDoor 1663 (Facing=NorthCCW) +3987 982 0 + +MetalDoor 1663 (Facing=NorthCCW) +4013 945 0 + +MetalDoor 1653 (Facing=WestCW) +4003 962 0 + +MetalDoor 1663 (Facing=NorthCCW) +4000 964 0 + +MetalDoor 1663 (Facing=NorthCCW) +4000 970 0 + +MetalDoor 1653 (Facing=WestCW) +4006 974 0 + +MetalDoor 1661 (Facing=SouthCW) +4020 933 0 + +MetalDoor 1663 (Facing=NorthCCW) +4020 937 0 + +MetalDoor 1653 (Facing=WestCW) +4016 943 0 + +MetalDoor 1655 (Facing=EastCCW) +4026 968 0 + +LootCrate3 1605 +3454 944 2 + +LootCrate2 3644 +3453 944 2 + +LootCrate1 3646 +3454 944 6 + +LootCrate4 3737 +3452 979 0 + +LootCrate1 3646 +3466 994 0 + +LootBox2 1517 +3479 932 0 + +LootCrate3 1605 +3473 983 0 + +LootCrate2 3644 +3474 983 0 + +LootBox1 1325 +3491 927 0 + +LootCrate3 1605 +3510 935 0 + +LootCrate2 3644 +3509 935 0 + +LootCrate2 3644 +3511 956 0 + +LootChest3 3648 +3505 944 0 + +LootBox2 1517 +3716 942 0 + +LootChest2 3668 +3727 954 0 + +LootChest4 3667 +3724 980 0 + +LootChest3 3649 +3729 945 0 + +LootChest2 3668 +3737 983 0 + +LootBox3 3650 +3755 940 0 + +LootBox2 1517 +3747 953 0 + +LootCrate4 3737 +3760 913 0 + +LootCrate2 3644 +3760 913 4 + +LootBox1 1326 +3761 959 4 + +LootChest2 3669 +3773 965 0 + +LootBox2 1517 +3778 936 0 + +LootBox3 3650 +3784 943 0 + +LootCrate2 3644 +3783 962 0 + +LootCrate2 3644 +3780 978 0 + +LootBox2 1518 +3975 982 0 + +LootCrate4 3737 +3988 932 0 + +LootCrate2 3644 +3988 938 0 + +LootBox4 1160 +3991 953 0 + +LootBox2 1517 +3987 963 0 + +LootCrate3 1605 +3995 963 0 + +LootCrate1 3646 +3995 963 4 + +LootChest2 3668 +4001 951 0 + +LootChest3 3648 +4014 955 0 + +LootBox1 1325 +4014 965 0 + +LootChest2 3668 +4021 935 0 + +GiantSpikeTrap 7167 +3461 959 0 + +GasTrap 5005 +3474 935 0 + +SawTrap 4374 +3474 950 8 + +DartTrap 1027 +3494 971 0 + +GasTrap 4274 +3515 980 0 + +SpikeTrap 4379 (Hue=1082) +3530 962 4 + +DartTrap 1599 +3730 940 0 + +FireColumnTrap 656 +3729 973 0 + +SpikeTrap 4506 +3730 984 0 + +GiantSpikeTrap 7167 +3750 956 0 + +AxeTrap 4403 +3748 979 0 + +FireColumnTrap 655 +3766 927 0 + +DartTrap 1599 +3763 914 0 + +StoneFaceTrap 4367 +3771 974 0 + +StoneFaceTrap 4367 +3771 966 0 + +AxeTrap 4416 +3784 940 -3 + +GasTrap 5005 +3778 956 0 + +DartTrap 1027 +3976 980 0 + +AxeTrap 4427 +3998 932 -3 + +GasTrap 4999 +3984 945 0 + +GiantSpikeTrap 7167 +3995 964 0 + +SawTrap 4524 +4003 952 0 + +FireColumnTrap 656 +4026 936 0 + +SpikeTrap 4379 (Hue=1082) +4019 954 3 + +MushroomTrap 6594 +3450 949 2 + +MushroomTrap 6594 +3480 997 0 + +MushroomTrap 6594 +3503 961 0 + +MushroomTrap 6594 +3516 930 0 + diff --git a/Data/Decoration/Underworld/Labyrinth - Wailing Hall.cfg b/Data/Decoration/Underworld/Labyrinth - Wailing Hall.cfg new file mode 100644 index 0000000..a4a0ecd --- /dev/null +++ b/Data/Decoration/Underworld/Labyrinth - Wailing Hall.cfg @@ -0,0 +1,582 @@ +ChestOfSecrets 2192 +2312 280 2 + +BookOfLore 3736 +2336 230 4 + +LootCrate4 3737 +2227 251 0 + +LootCrate2 3644 +2226 251 -2 + +LootChest1 2475 +2259 249 0 + +LootChest2 3669 +2271 249 0 + +LootBox1 1325 +2273 261 5 + +LootCrate1 3646 +2287 261 0 + +LootChest4 3667 +2314 280 0 + +LootChest2 3668 +2311 290 0 + +LootChest3 3649 +2329 235 0 + +LootCrate3 1605 +2328 251 0 + +LootCrate1 3646 +2330 251 4 + +LootBox3 3650 +2344 265 0 + +LootBox1 1325 +2352 239 8 + +LootCrate1 3647 +2382 227 0 + +LootCrate3 1605 +2369 246 0 + +LootCrate1 3646 +2397 207 0 + +LootBox2 1518 +2591 287 0 + +LootBox1 1326 +2604 247 0 + +LootBox4 1153 +2600 257 0 + +LootCrate3 1605 +2628 191 0 + +LootCrate1 3646 +2628 190 4 + +LootBox2 1517 +2626 261 0 + +LootBox3 3650 +2631 283 0 + +LootCrate2 3644 +2632 306 0 + +LootCrate2 3644 +2665 364 0 + +LootCrate1 3646 +2665 364 4 + +LootBox2 1517 +2678 174 0 + +LootBox1 1326 +2676 245 2 + +LootChest2 3669 +2700 267 0 + +LootCrate1 3647 +2890 212 0 + +LootCrate2 3644 +2889 215 0 + +LootBox2 1518 +2898 266 0 + +LootBox1 1325 +2932 269 5 + +LootBox2 1517 +2939 305 0 + +LootBox2 1517 +2946 276 0 + +LootBox1 1326 +2969 263 0 + +Teleporter 7107 (PointDest=(2706, 183, -8); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2222 222 7 + +Teleporter 7107 (PointDest=(2706, 183, -8); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2222 223 7 + +Teleporter 7107 (PointDest=(2891, 297, -3); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2638 302 7 + +Teleporter 7107 (PointDest=(2891, 297, -3); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2638 303 7 + +Teleporter 7107 (PointDest=(2222, 222, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2707 182 -13 + +Teleporter 7107 (PointDest=(2222, 222, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2707 183 -13 + +Teleporter 7107 (PointDest=(2638, 302, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2888 296 -18 + +Teleporter 7107 (PointDest=(2638, 302, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2888 297 -18 + +Teleporter 7107 (PointDest=(1568, 1070, -19); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2985 211 0 + +Teleporter 7107 (PointDest=(1568, 1070, -19); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2985 212 0 + +Teleporter 7107 (PointDest=(1568, 1070, -19); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2985 213 0 + +Teleporter 7107 (PointDest=(1568, 1070, -19); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2985 214 0 + +Teleporter 7107 (PointDest=(1568, 1070, -19); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2985 215 0 + +Teleporter 7107 (PointDest=(1568, 1070, -19); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +2985 216 0 + +MetalDoor 1655 (Facing=EastCCW) +2219 242 0 + +MetalDoor 1663 (Facing=NorthCCW) +2222 253 0 + +MetalDoor 1653 (Facing=WestCW) +2229 231 0 + +MetalDoor 1663 (Facing=NorthCCW) +2224 238 0 + +MetalDoor 1663 (Facing=NorthCCW) +2233 243 0 + +DartTrap 1027 +2226 240 0 + +MetalDoor 1663 (Facing=NorthCCW) +2245 253 0 + +MetalDoor 1655 (Facing=EastCCW) +2249 248 0 + +MetalDoor 1663 (Facing=NorthCCW) +2254 253 0 + +GasTrap 4999 +2241 249 0 + +DartTrap 1027 +2270 251 0 + +MetalDoor 1653 (Facing=WestCW) +2258 257 0 + +MetalDoor 1663 (Facing=NorthCCW) +2268 262 0 + +MetalDoor 1653 (Facing=WestCW) +2273 248 0 + +SecretBookDoor 8440 (Facing=WestCW; Hue=1180) +2272 258 0 + +SecretStoneDoor2 804 (Facing=WestCW; Hue=1189) +2272 256 0 + +MetalDoor 1663 (Facing=NorthCCW) +2291 238 0 + +MetalDoor 1653 (Facing=WestCW) +2297 233 0 + +MetalDoor 1663 (Facing=NorthCCW) +2302 238 0 + +MetalDoor 1655 (Facing=EastCCW) +2297 245 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2300 251 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2293 251 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2300 260 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2293 260 0 + +FireColumnTrap 655 +2319 252 0 + +MetalDoor 1655 (Facing=EastCCW) +2317 266 0 + +AxeTrap 4427 +2319 267 -3 + +GiantSpikeTrap 7167 +2319 286 0 + +DartTrap 1599 +2333 236 0 + +MetalDoor 1655 (Facing=EastCCW) +2320 248 0 + +MetalDoor 1661 (Facing=SouthCW) +2326 253 0 + +MetalDoor 1653 (Facing=WestCW) +2330 256 0 + +MetalDoor 1663 (Facing=NorthCCW) +2323 271 0 + +MetalDoor 1653 (Facing=WestCW) +2344 252 0 + +SecretBookDoor 8440 (Facing=WestCW; Hue=1180) +2343 242 0 + +MetalDoor 1661 (Facing=SouthCW) +2349 244 0 + +SawTrap 4524 +2346 259 0 + +DartTrap 1599 +2354 237 0 + +MetalDoor 1663 (Facing=NorthCCW) +2357 244 0 + +MetalDoor 1661 (Facing=SouthCW) +2352 260 0 + +MetalDoor 1655 (Facing=EastCCW) +2373 235 0 + +MetalDoor 1663 (Facing=NorthCCW) +2376 245 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2388 220 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2388 210 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2391 210 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2391 220 0 + +SpikeTrap 4506 +2396 220 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2388 230 0 + +BarredMetalDoor2 8183 (Facing=NorthCCW) +2391 230 0 + +FireColumnTrap 655 +2574 218 0 + +MetalDoor 1653 (Facing=WestCW) +2586 239 0 + +SpikeTrap 4360 +2591 288 5 + +MushroomTrap 6594 +2592 233 0 + +DartTrap 1027 +2601 248 0 + +MetalDoor 1653 (Facing=WestCW) +2603 260 0 + +MetalDoor 1653 (Facing=WestCW) +2594 284 0 + +MetalDoor 1663 (Facing=NorthCCW) +2601 292 0 + +MetalDoor 1653 (Facing=WestCW) +2605 298 0 + +MetalDoor 1653 (Facing=WestCW) +2612 239 0 + +FireColumnTrap 655 +2621 239 0 + +MetalDoor 1663 (Facing=NorthCCW) +2608 251 0 + +MetalDoor 1663 (Facing=NorthCCW) +2617 264 0 + +MetalDoor 1655 (Facing=EastCCW) +2612 259 0 + +GasTrap 4274 +2623 262 0 + +MetalDoor 1653 (Facing=WestCW) +2615 293 0 + +SecretStoneDoor2 812 (Facing=SouthCW; Hue=1189) +2616 304 0 + +MushroomTrap 6594 +2632 215 0 + +MetalDoor 1653 (Facing=WestCW) +2635 239 0 + +MetalDoor 1663 (Facing=NorthCCW) +2633 249 0 + +MetalDoor 1655 (Facing=EastCCW) +2634 273 0 + +SawTrap 4524 +2634 283 0 + +MetalDoor 1653 (Facing=WestCW) +2634 300 0 + +SecretStoneDoor2 814 (Facing=NorthCCW; Hue=1189) +2630 304 0 + +FireColumnTrap 655 +2650 184 0 + +MetalDoor 1655 (Facing=EastCCW) +2644 254 0 + +SpikeTrap 4512 +2643 247 0 + +MetalDoor 1663 (Facing=NorthCCW) +2653 256 0 + +MetalDoor 1663 (Facing=NorthCCW) +2640 277 0 + +MetalDoor 1663 (Facing=NorthCCW) +2640 290 0 + +MushroomTrap 6594 +2655 370 0 + +MushroomTrap 6594 +2671 198 0 + +MushroomTrap 6594 +2669 230 0 + +FireColumnTrap 655 +2671 268 0 + +GiantSpikeTrap 7167 +2679 175 0 + +MetalDoor 1653 (Facing=WestCW) +2676 187 0 + +MetalDoor 1653 (Facing=WestCW) +2680 181 0 + +MetalDoor 1663 (Facing=NorthCCW) +2681 249 0 + +FireColumnTrap 655 +2672 317 0 + +MushroomTrap 6594 +2687 356 0 + +MetalDoor 1653 (Facing=WestCW) +2693 181 0 + +FireColumnTrap 655 +2696 216 0 + +MetalDoor 1663 (Facing=NorthCCW) +2698 235 0 + +MetalDoor 1653 (Facing=WestCW) +2693 238 0 + +FireColumnTrap 655 +2692 234 0 + +MetalDoor 1663 (Facing=NorthCCW) +2698 249 0 + +MetalDoor 1653 (Facing=WestCW) +2702 253 0 + +MetalDoor 1661 (Facing=SouthCW) +2698 259 0 + +MushroomTrap 6594 +2688 313 0 + +MetalDoor 1663 (Facing=NorthCCW) +2705 217 0 + +MetalDoor 1663 (Facing=NorthCCW) +2704 271 0 + +MetalDoor 1653 (Facing=WestCW) +2710 262 0 + +MetalDoor 1663 (Facing=NorthCCW) +2713 259 0 + +SawTrap 4529 +2704 260 0 + +MushroomTrap 6594 +2895 222 0 + +FireColumnTrap 655 +2902 207 0 + +MetalDoor 1653 (Facing=WestCW) +2902 258 0 + +MetalDoor 1663 (Facing=NorthCCW) +2906 264 0 + +SawTrap 4524 +2900 265 0 + +MetalDoor 1653 (Facing=WestCW) +2898 283 0 + +MetalDoor 1663 (Facing=NorthCCW) +2903 277 0 + +SecretStoneDoor2 812 (Facing=SouthCW; Hue=1189) +2909 283 0 + +MetalDoor 1653 (Facing=WestCW) +2902 292 0 + +MetalDoor 1663 (Facing=NorthCCW) +2908 299 0 + +AxeTrap 4427 +2911 310 -4 + +MushroomTrap 6594 +2927 236 0 + +SecretStoneDoor2 812 (Facing=SouthCW; Hue=1189) +2917 283 0 + +MetalDoor 1653 (Facing=WestCW) +2922 303 0 + +MetalDoor 1653 (Facing=WestCW) +2913 309 0 + +MetalDoor 1655 (Facing=EastCCW) +2939 265 0 + +MetalDoor 1653 (Facing=WestCW) +2936 272 0 + +GasTrap 4999 +2934 285 0 + +MetalDoor 1663 (Facing=NorthCCW) +2934 309 0 + +GiantSpikeTrap 7167 +2939 310 0 + +MushroomTrap 6594 +2953 191 0 + +FireColumnTrap 655 +2944 208 0 + +MetalDoor 1663 (Facing=NorthCCW) +2946 262 0 + +DartTrap 1027 +2948 268 0 + +MetalDoor 1653 (Facing=WestCW) +2949 282 0 + +SpikeTrap 4512 +2954 285 0 + +MetalDoor 1653 (Facing=WestCW) +2953 291 0 + +FireColumnTrap 655 +2969 206 0 + +MushroomTrap 6594 +2974 243 0 + +MetalDoor 1663 (Facing=NorthCCW) +2962 269 0 + +MetalDoor 1653 (Facing=WestCW) +2969 275 0 + +MetalDoor 1655 (Facing=EastCCW) +2960 282 0 + +GiantSpikeTrap 7167 +2966 277 0 + +MetalDoor 1653 (Facing=WestCW) +2969 291 0 + +MetalDoor 1663 (Facing=NorthCCW) +2991 287 0 + +MetalDoor 1653 (Facing=WestCW) +2976 275 0 + +FireColumnTrap 655 +2998 260 0 + +MushroomTrap 6594 +3004 298 0 + +MushroomTrap 6594 +3022 264 0 + diff --git a/Data/Decoration/Underworld/Maze - Caverns of Ice.cfg b/Data/Decoration/Underworld/Maze - Caverns of Ice.cfg new file mode 100644 index 0000000..511b0b2 --- /dev/null +++ b/Data/Decoration/Underworld/Maze - Caverns of Ice.cfg @@ -0,0 +1,204 @@ +BookOfLore 3735 +94 674 5 + +ChestOfSecrets 2193 +88 476 -4 + +LootBox3 3651 +77 662 0 + +LootBox1 1325 +67 686 6 + +SpikeTrap 4506 (Hue=1079) +77 674 0 + +FireColumnTrap 655 +92 478 -5 + +LootChest2 3669 +95 671 1 + +SpikeTrap 4506 (Hue=1079) +90 666 0 + +SpikeTrap 4506 (Hue=1079) +85 675 0 + +DartTrap 1027 +95 681 0 + +FireColumnTrap 655 +101 481 -4 + +LootChest3 3649 +93 472 -4 + +LootBox2 1517 +94 472 -4 + +LootCrate3 1605 +120 465 -2 + +LootCrate2 3645 +122 464 0 + +LootChest2 3668 +160 442 9 + +LootBox3 3651 +181 432 10 + +LootCrate4 3737 +281 694 -1 + +LootCrate3 1605 +277 700 7 + +LootCrate1 3646 +290 704 5 + +LootChest4 3667 +96 671 0 + +SpikeTrap 4506 (Hue=1079) +101 666 0 + +SecretBookDoor 8440 (Facing=WestCW; Hue=1088) +96 679 0 + +GiantSpikeTrap 7167 (Hue=1187) +129 484 -5 + +GiantSpikeTrap 7167 (Hue=1187) +145 459 -7 + +GiantSpikeTrap 7167 (Hue=1187) +164 482 -4 + +GiantSpikeTrap 7167 (Hue=1187) +161 511 -6 + +GiantSpikeTrap 7167 (Hue=1187) +185 504 -4 + +GiantSpikeTrap 7167 (Hue=1187) +198 526 -7 + +GiantSpikeTrap 7167 (Hue=1187) +221 483 -4 + +FireColumnTrap 655 +221 529 -5 + +GiantSpikeTrap 7167 (Hue=1187) +224 441 -5 + +GiantSpikeTrap 7167 (Hue=1187) +240 463 -4 + +FireColumnTrap 655 +240 534 -4 + +GiantSpikeTrap 7167 (Hue=1187) +271 457 -5 + +GiantSpikeTrap 7167 (Hue=1187) +285 518 -5 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +123 443 -44 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +122 441 -44 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +122 442 -44 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +122 443 -45 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +122 444 -45 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +122 445 -45 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +123 444 -45 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +123 445 -45 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +123 441 -43 + +Teleporter 7107 (PointDest=(113, 666, 7); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +123 442 -43 + +Teleporter 7107 (PointDest=(6504, 3320, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +303 537 0 + +Teleporter 7107 (PointDest=(6504, 3320, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +303 538 0 + +Teleporter 7107 (PointDest=(6504, 3320, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +303 539 0 + +Teleporter 7107 (PointDest=(290, 667, 33); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +267 535 -25 + +Teleporter 7107 (PointDest=(290, 667, 33); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +268 535 -25 + +Teleporter 7107 (PointDest=(290, 667, 33); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +269 535 -23 + +Teleporter 7107 (PointDest=(290, 667, 33); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +266 535 -25 + +Teleporter 7107 (PointDest=(290, 667, 33); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +265 535 -25 + +Teleporter 7107 (PointDest=(267, 534, -25); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +287 665 40 + +Teleporter 7107 (PointDest=(267, 534, -25); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +289 665 40 + +Teleporter 7107 (PointDest=(267, 534, -25); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +288 665 40 + +Teleporter 7107 (PointDest=(267, 534, -25); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +290 665 40 + +Teleporter 7107 (PointDest=(267, 534, -25); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +291 665 40 + +Teleporter 7107 (PointDest=(267, 534, -25); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +292 665 40 + +Teleporter 7107 (PointDest=(124, 443, -42); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +114 662 12 + +Teleporter 7107 (PointDest=(124, 443, -42); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +114 669 12 + +Teleporter 7107 (PointDest=(124, 443, -42); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +114 668 12 + +Teleporter 7107 (PointDest=(124, 443, -42); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +114 667 12 + +Teleporter 7107 (PointDest=(124, 443, -42); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +114 666 12 + +Teleporter 7107 (PointDest=(124, 443, -42); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +114 665 12 + +Teleporter 7107 (PointDest=(124, 443, -42); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +114 664 12 + +Teleporter 7107 (PointDest=(124, 443, -42); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +114 663 12 + diff --git a/Data/Decoration/Underworld/Maze - Halls of Stone.cfg b/Data/Decoration/Underworld/Maze - Halls of Stone.cfg new file mode 100644 index 0000000..3e44d4b --- /dev/null +++ b/Data/Decoration/Underworld/Maze - Halls of Stone.cfg @@ -0,0 +1,78 @@ +Teleporter 7107 (PointDest=(6022, 2167, -13); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4277 235 27 + +Teleporter 7107 (PointDest=(6022, 2167, -13); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4278 235 27 + +Teleporter 7107 (PointDest=(6022, 2167, -13); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4279 235 27 + +Teleporter 7107 (PointDest=(6022, 2167, -13); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4280 235 27 + +Teleporter 7107 (PointDest=(4345, 214, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1171 212 -32 + +Teleporter 7107 (PointDest=(4345, 214, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1172 212 -32 + +Teleporter 7107 (PointDest=(4345, 214, 0); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +1173 212 -32 + +Teleporter 7107 (PointDest=(1172, 212, -32); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4344 214 0 + +Teleporter 7107 (PointDest=(1172, 212, -32); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4345 214 0 + +Teleporter 7107 (PointDest=(1172, 212, -32); Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +4346 214 0 + +MetalDoor 1661 (Facing=SouthCW) +1063 129 -27 + +MetalDoor 1663 (Facing=NorthCCW) +1063 128 -27 + +MetalDoor 1655 (Facing=EastCCW) +1079 66 -27 + +MetalDoor 1653 (Facing=WestCW) +1078 66 -27 + +MetalDoor 1661 (Facing=SouthCW) +1084 129 -27 + +MetalDoor 1663 (Facing=NorthCCW) +1084 128 -27 + +MetalDoor 1655 (Facing=EastCCW) +1125 170 -32 + +MetalDoor 1653 (Facing=WestCW) +1124 170 -32 + +MetalDoor 1653 (Facing=WestCW) +1128 170 -32 + +MetalDoor 1655 (Facing=EastCCW) +1129 170 -32 + +MetalDoor 1653 (Facing=WestCW) +1124 176 -32 + +MetalDoor 1653 (Facing=WestCW) +1128 176 -32 + +MetalDoor 1655 (Facing=EastCCW) +1125 176 -32 + +MetalDoor 1655 (Facing=EastCCW) +1129 176 -32 + +MetalDoor 1653 (Facing=WestCW) +1099 174 -27 + +MetalDoor 1655 (Facing=EastCCW) +1100 174 -27 + diff --git a/Data/Decoration/Underworld/Places.cfg b/Data/Decoration/Underworld/Places.cfg new file mode 100644 index 0000000..ad53c7d --- /dev/null +++ b/Data/Decoration/Underworld/Places.cfg @@ -0,0 +1,20 @@ +## SPIDER CAVE ################################## + +Teleporter 7107 (PointDest=(738, 1206, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +735 2177 -28 + +Teleporter 7107 (PointDest=(738, 1206, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +736 2177 -28 + +Teleporter 7107 (PointDest=(738, 1206, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +737 2177 -27 + +Teleporter 7107 (PointDest=(738, 1206, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +738 2177 -28 + +Teleporter 7107 (PointDest=(738, 1206, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +739 2177 -28 + +Teleporter 7107 (PointDest=(738, 1206, 0); MapDest=Britannia; Creatures=False; SourceEffect=False; DestEffect=False; SoundID=0; Delay=00:00:00) +740 2177 -28 + diff --git a/Data/Spawns/citizens.map b/Data/Spawns/citizens.map new file mode 100644 index 0000000..60bdc27 --- /dev/null +++ b/Data/Spawns/citizens.map @@ -0,0 +1,410 @@ +## SHIPS +*|shipns||||||2160|2560|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||2099|2061|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||4278|2009|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||6521|2315|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||4096|2089|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||6637|2404|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||789|1927|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||6556|2304|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||6528|2386|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||3403|2546|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||2169|2615|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||6600|2304|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||6539|2444|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||2608|1387|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||2717|601|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||4319|2026|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||1990|1977|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||4071|2038|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||2187|2631|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||1116|3082|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||6528|2406|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||3425|2496|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||2718|2193|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||2674|2371|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||2740|2112|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||577|1823|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||1678|1683|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||1791|1700|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||641|1860|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||2803|541|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||591|1914|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||1123|3132|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||6620|2444|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||2677|2298|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipns||||||2095|1636|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||2868|582|-5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipew||||||1863|1856|-5|1|0|0|0|0|1|1|0|0|0|0|0 + +## BUCS DEN +*|citizensouth||||||2635|2253|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2693|2108|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2693|2106|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2638|2256|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2632|2256|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2635|2259|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2695|2108|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2607|2218|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2600|2212|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2617|2201|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2600|2210|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2617|2207|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2614|2204|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2607|2200|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2620|2204|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2603|2212|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2610|2201|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2610|2199|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2595|2212|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2609|2216|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2595|2211|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2598|2201|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2598|2200|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2747|2200|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2747|2198|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurersouth||||||2756|2245|16|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||2756|2248|16|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2708|2328|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2709|2326|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2707|2326|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2749|2199|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2647|2276|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2722|2214|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2683|2150|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2724|2232|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2704|2106|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2643|2164|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2643|2137|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2680|2223|0|1|0|0|0|0|1|1|0|0|0|0|0 + +## COVE +*|citizensouth||||||2706|1497|40|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2703|1499|40|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2706|1502|40|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2708|1500|40|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2726|1496|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2724|1498|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2721|1495|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2724|1493|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2714|1489|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2715|1489|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2702|1496|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2702|1494|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2710|1499|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2713|1500|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2711|1497|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2651|1475|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2652|1476|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2616|1505|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2616|1501|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2610|1494|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2609|1494|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2606|1503|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2605|1501|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2604|1505|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2615|1499|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2613|1499|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2621|1466|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2619|1468|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2600|1444|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2564|1478|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2587|1506|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2646|1500|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2662|1463|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2727|1431|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2624|1477|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2777|1473|0|1|0|0|0|0|1|1|0|0|0|0|0 + +## JHELOM +*|citizennorth||||||1061|3121|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1066|3115|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1068|3115|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1060|3117|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1062|3117|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1066|3111|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1068|3111|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1052|3137|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1052|3138|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1054|3144|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1069|3137|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1066|3136|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1066|3138|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1051|3143|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1116|3121|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1114|3120|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1114|3122|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1067|3161|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1115|3167|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1101|3221|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1023|3215|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1025|3196|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1000|3160|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1036|3124|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||999|3125|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1022|3101|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1067|3102|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1099|3099|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1054|3136|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1056|3132|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1052|3132|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1056|3250|0|1|0|0|0|0|1|1|0|0|0|0|0 + +## MAGINCIA +*|citizeneast||||||3444|2427|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||3448|2426|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||3439|2431|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||3446|2424|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||3447|2428|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||3437|2433|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||3431|2424|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||3430|2424|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||3437|2429|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||3435|2430|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||3438|2505|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurersouth||||||3438|2502|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||3463|2504|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurersouth||||||3463|2501|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||3328|2432|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||3324|2435|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3431|2413|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3490|2401|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3466|2483|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3413|2471|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3370|2416|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3355|2413|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3317|2469|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3267|2471|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3293|2521|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3353|2501|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3452|2464|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||3356|2459|8|1|0|0|0|0|1|1|0|0|0|0|0 + +## MINOC +*|citizensouth||||||2914|453|32|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2875|451|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2911|455|32|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2916|456|32|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2913|458|32|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||2929|456|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurersouth||||||2929|453|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2944|455|-14|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2946|455|-14|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2944|513|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2944|511|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2947|556|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2945|557|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2938|555|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2939|553|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2929|558|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2928|559|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurersouth||||||2928|546|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2928|549|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2872|452|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2921|437|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2803|437|-1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2852|429|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2845|461|-1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2926|483|-1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2981|476|-1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2733|457|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2770|487|-1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2722|507|2|1|0|0|0|0|1|1|0|0|0|0|0 + +## MOONGLOW +*|adventurersouth||||||4093|2039|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||4093|2041|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||4206|1946|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||4205|1934|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||4205|1946|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||4211|1938|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||4211|1940|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||4206|1934|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||4205|1943|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||4213|1937|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4208|1970|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4109|1983|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4085|2017|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4107|2058|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4159|1967|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4108|1945|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4072|1990|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4314|1992|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4209|2019|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||4107|2083|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||3854|1645|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||3857|1645|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||3868|1607|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||3871|1607|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||3854|1625|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||3854|1628|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurerwest||||||3866|1619|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurereast||||||3862|1619|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||4034|1688|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||4039|1685|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||4034|1685|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||4146|2066|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||4150|2063|3|1|0|0|0|0|1|1|0|0|0|0|0 + +## PAWS +*|citizenwest||||||2058|2108|-18|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2056|2108|-18|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2036|2135|7|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2038|2137|7|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2037|2034|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2037|2032|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2040|2022|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2042|2022|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2023|2031|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2025|2034|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2023|2024|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2024|2024|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2067|2208|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2067|2210|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2090|2051|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2054|2099|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2021|2080|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1971|2029|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2004|2148|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1967|2077|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2054|1990|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1992|1992|0|1|0|0|0|0|1|1|0|0|0|0|0 + +## SKARA BRAE +*|campaaddon:campbaddon:campcaddon:campdaddon||||||659|1820|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||585|1819|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||705|1793|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||743|1817|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||805|1827|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||801|1865|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||766|1910|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||730|1895|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||694|1904|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||661|1903|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||611|1913|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||642|1819|7|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||640|1819|7|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurerwest||||||600|1837|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurereast||||||598|1837|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurersouth||||||718|1871|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||632|1897|41|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||630|1895|41|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||627|1897|41|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||718|1874|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||691|1871|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||693|1872|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||692|1875|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||690|1872|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||680|1884|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||680|1885|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||679|1870|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||678|1879|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||677|1880|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||678|1871|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||692|1875|26|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||677|1870|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||690|1875|26|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||691|1876|26|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||691|1874|26|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||677|1871|26|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||677|1873|26|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||678|1872|26|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurerwest||||||784|1836|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurereast||||||781|1836|0|1|0|0|0|0|1|1|0|0|0|0|0 + +## TRINSIC +*|citizensouth||||||2024|2560|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2024|2562|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1981|2642|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1980|2643|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2035|2562|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2036|2561|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1949|2548|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1949|2546|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1951|2556|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1949|2556|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2042|2601|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2039|2601|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2041|2603|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2040|2599|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurersouth||||||1963|2546|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||1963|2548|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurereast||||||2084|2603|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurerwest||||||2087|2603|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2104|2637|45|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2104|2633|45|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2102|2635|45|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2106|2635|45|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2093|2645|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2081|2647|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||2094|2645|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2081|2649|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2083|2648|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2093|2648|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2095|2649|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurerwest||||||2090|2642|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurereast||||||2088|2642|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2027|2560|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2029|2560|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2093|2608|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||2099|2608|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||2027|2590|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||2028|2585|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||2020|2590|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2114|2662|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2137|2611|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2074|2583|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1998|2552|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1955|2636|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2034|2573|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||1987|2683|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2000|2703|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campaaddon:campbaddon:campcaddon:campdaddon||||||2073|2708|2|1|0|0|0|0|1|1|0|0|0|0|0 + +## YEW +*|citizennorth||||||1559|818|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1398|970|3|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1490|905|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1571|816|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1552|772|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1508|894|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1552|816|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1550|819|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1558|816|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1489|895|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1467|867|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1504|896|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1490|903|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1571|818|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1549|770|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1488|893|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1396|969|3|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1544|847|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1396|972|3|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1549|775|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1548|846|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1590|816|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1550|814|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1590|773|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1585|773|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1588|770|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1587|814|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizeneast||||||1585|817|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1588|819|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1565|788|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1564|788|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1574|796|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1562|803|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizennorth||||||1564|803|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1564|799|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizensouth||||||1575|792|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1576|794|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|citizenwest||||||1565|801|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurernorth||||||1562|795|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|adventurersouth||||||1562|792|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|campdaddon||||||1523|836|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|campdaddon||||||1532|911|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campdaddon||||||1593|864|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campdaddon||||||1482|924|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|campdaddon||||||1447|895|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|campdaddon||||||1502|875|0|1|0|0|0|0|1|1|0|0|0|0|0 diff --git a/Data/Spawns/dungeons.map b/Data/Spawns/dungeons.map new file mode 100644 index 0000000..4743a5f --- /dev/null +++ b/Data/Spawns/dungeons.map @@ -0,0 +1,96 @@ +## COVETOUS +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie||||||1060|1266|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie||||||1056|1274|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|earthelemental||||||1030|1226|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy||||||1039|1298|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy||||||1051|1302|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy||||||1042|1304|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy||||||1120|1239|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy||||||1101|1243|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy||||||1109|1249|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy||||||1104|1262|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1125|1273|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1131|1258|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1127|1289|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1103|1285|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1086|1302|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1085|1273|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1073|1287|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1084|1259|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1066|1234|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1066|1250|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1052|1224|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1041|1243|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1026|1263|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1019|1279|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:giantrat:giantserpent:slime:headlessone:corpser||||||1032|1284|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:eldergazer:giantrat:giantserpent:slime:headlessone:corpser||||||1031|1485|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:eldergazer:giantrat:giantserpent:slime:headlessone:corpser||||||1049|1493|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:eldergazer:giantrat:giantserpent:slime:headlessone:corpser||||||1023|1508|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:eldergazer:giantrat:giantserpent:slime:headlessone:corpser||||||999|1514|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:eldergazer:giantrat:giantserpent:slime:headlessone:corpser||||||992|1481|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:eldergazer:giantrat:giantserpent:slime:headlessone:corpser||||||969|1501|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|harpy:gazer:eldergazer:giantrat:giantserpent:slime:headlessone:corpser||||||935|1443|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|giantspider||||||930|1516|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|dreadspider:giantblackwidow||||||889|1496|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|giantspider||||||895|1503|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|giantspider||||||909|1510|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|giantspider||||||913|1503|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|giantspider||||||931|1469|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|giantspider||||||922|1485|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||870|1458|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||879|1454|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||895|1436|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||889|1446|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||889|1459|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||864|1476|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||879|1472|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||868|1485|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||876|1487|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||947|1481|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||971|1464|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||957|1474|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||952|1491|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|elderharpy:harpy:harpy:harpy:harpy:harpy||||||968|1484|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|waterelemental||||||918|1459|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|waterelemental||||||906|1448|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||521|1728|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||540|1738|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||516|1751|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||529|1747|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||691|1730|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||697|1743|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||708|1729|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||715|1743|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||682|1741|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||930|1738|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||930|1713|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||931|1721|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||899|1721|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||916|1721|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||907|1717|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||906|1728|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||883|1737|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||883|1723|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||882|1712|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||928|1704|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||934|1698|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||948|1699|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||946|1658|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||938|1665|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||882|1682|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||882|1699|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||882|1667|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||896|1664|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||899|1682|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||916|1688|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||900|1650|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||916|1652|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:giantrat:vampire||||||909|1657|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampiricdrake:rottingdrake:bonedrake||||||494|1738|10|2|999|999|2|2|1|1|0|0|0|0|0 +*|rottingcorpse||||||679|1736|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|lich:lich:vampirelord||||||865|1705|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|lich:lich:vampirelord||||||930|1686|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|lich:lich:vampirelord||||||952|1683|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|lichlord:nazghoul:demilich||||||942|1662|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|lichlord:nazghoul:demilich||||||907|1679|0|2|888|888|2|2|1|1|0|0|0|0|0 diff --git a/Data/Spawns/graveyards.map b/Data/Spawns/graveyards.map new file mode 100644 index 0000000..3de23a0 --- /dev/null +++ b/Data/Spawns/graveyards.map @@ -0,0 +1,107 @@ +## BRITAIN +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1780|1476|20|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1774|1437|18|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1801|1427|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1764|1426|20|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1767|1481|20|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1764|1449|20|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1766|1464|20|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1795|1464|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1784|1423|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1783|1456|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1786|1434|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1795|1441|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1799|1454|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1806|1454|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1794|1436|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1783|1458|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1786|1446|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1808|1442|10|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1778|1455|17|1|15|25|2|2|1|1|0|0|0|0|0 +*|vampire:lich:vampirelord:lich:lichlord:nazghoul||||||1784|1433|10|1|30|60|2|2|1|1|0|0|0|0|0 + +## JHELOM +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||978|3017|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||977|3026|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1001|3017|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1000|3030|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||985|3017|0|1|15|25|2|2|1|1|0|0|0|0|0 + +## MAGINCIA +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3509|2366|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3517|2374|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3529|2374|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3522|2348|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3529|2351|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3509|2353|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3504|2374|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3504|2351|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|vampire:lich:vampirelord:lich:lichlord:nazghoul||||||3520|2359|0|1|30|60|2|2|1|1|0|0|0|0|0 + +## MOONGLOW +*|vampire:lich:vampirelord:lich:lichlord:nazghoul||||||3999|1880|6|1|30|60|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||4008|1860|2|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||4022|1865|2|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||3994|1875|2|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||4009|1881|1|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||4001|1902|2|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||4021|1888|1|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||4012|1901|2|1|15|25|4|4|1|1|0|0|0|0|0 + +## MINOC +*|vampire:lich:vampirelord:lich:lichlord:nazghoul||||||2652|517|12|1|30|60|1|1|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2652|509|12|1|15|25|1|1|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2664|508|12|1|15|25|1|1|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2659|513|1|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2644|526|2|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2653|528|1|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2665|525|1|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2645|536|1|1|15|25|4|4|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2657|535|0|1|15|25|4|4|1|1|0|0|0|0|0 + +## SKARA BRAE +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||553|1766|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||553|1756|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||553|1747|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||538|1759|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||538|1767|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||540|1748|0|1|15|25|2|2|1|1|0|0|0|0|0 + +## TRINSIC +*|vampire:lich:vampirelord:lich:lichlord:nazghoul||||||1889|2639|20|1|30|60|2|2||1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1898|2635|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1881|2646|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1876|2656|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1875|2666|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1894|2655|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1896|2665|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1885|2655|0|1|15|25|2|2|1|1|0|0|0|0|0 + +## YEW +*|vampirelord:lich:lichlord:nazghoul||||||1533|1034|4|1|30|60|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1537|1027|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1538|1041|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1554|1027|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1571|1018|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1565|1059|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1568|1062|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1527|1022|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1528|1042|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1558|1018|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1547|1038|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1524|1065|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1530|1055|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1542|1064|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1556|1064|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1567|1050|4|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||1566|1034|4|1|15|25|2|2|1|1|0|0|0|0|0 + +## ISLES OF THE DEAD +*|vampirelord:lich:lichlord:nazghoul||||||2176|2106|0|1|30|60|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2199|2098|2|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2173|2097|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2174|2114|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2202|2116|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2197|2104|0|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2184|2101|2|1|15|25|2|2|1|1|0|0|0|0|0 +*|skeleton:skeleton:skeleton:ghoul:wight:shade:spectre:wraith:zombie:zombie||||||2187|2108|0|1|15|25|2|2|1|1|0|0|0|0|0 diff --git a/Data/Spawns/labyrinths.map b/Data/Spawns/labyrinths.map new file mode 100644 index 0000000..b4e9413 --- /dev/null +++ b/Data/Spawns/labyrinths.map @@ -0,0 +1,232 @@ +## SILENT TOMB +*|boneknight:skeletalknight||||||3715|943|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneknight:skeletalknight||||||3759|957|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|bonemagi:skeletalmage||||||3518|977|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|bonemagi:skeletalmage||||||3975|953|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|bonemagi:skeletalmage||||||4009|980|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|earthelemental:earthelemental:mudelemental||||||3507|956|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|earthelemental:earthelemental:mudelemental||||||3475|988|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|earthelemental:earthelemental:mudelemental||||||3515|934|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||3477|933|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||3492|920|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||3726|983|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||3728|953|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||3768|931|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||3986|966|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||4004|945|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||4018|947|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3447|981|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3461|994|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3464|957|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3466|941|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3466|967|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3472|976|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3474|950|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3488|945|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3490|992|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3496|939|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3496|961|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3496|981|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3503|989|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3506|976|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3518|950|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3518|966|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3521|989|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3528|977|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3529|945|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3531|960|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3720|953|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3721|970|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3721|984|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3738|944|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3738|955|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3738|973|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3739|982|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3748|930|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3749|946|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3756|973|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3756|985|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3760|923|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3761|947|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3765|939|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3773|953|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3773|959|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3773|974|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3774|985|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3778|922|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3779|930|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3782|978|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3784|956|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3785|940|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3789|980|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3976|967|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3978|933|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3978|980|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3987|935|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||3988|945|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||4006|953|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||4017|956|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||4024|957|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||4025|973|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||4026|933|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||4026|937|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:vampire:boneclaw||||||4026|946|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampire||||||3455|975|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||3469|996|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||3755|937|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||3777|939|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||3976|938|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|waterelemental||||||3452|954|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|waterelemental||||||3456|966|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|waterelemental||||||3989|955|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|zombie:wight:ghoul||||||3743|966|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|zombie:wight:ghoul||||||3753|966|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|lich:nazghoul:lichlord||||||3510|943|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|lich:nazghoul:lichlord||||||3772|967|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|lich:nazghoul:lichlord||||||4006|966|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|demilich:lichlord:nazghoul||||||3732|943|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|demilich:lichlord:nazghoul||||||3748|959|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|demilich:lichlord:nazghoul||||||3787|946|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|demilich:lichlord:nazghoul||||||4016|963|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|rottingcorpse:mummylord||||||3771|915|0|2|999|999|2|2|1|1|0|0|0|0|0 + +## WAILING HALLS +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2953|285|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2957|277|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2951|277|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2976|285|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2929|304|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2983|276|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2917|313|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2921|296|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2952|296|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2951|261|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2935|268|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2935|285|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2918|273|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2918|249|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2901|250|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2902|263|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2912|274|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2902|297|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||3005|289|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||3021|255|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||3021|274|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2981|243|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2995|259|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2972|253|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2903|206|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2912|218|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2959|242|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2886|228|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2953|226|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2925|227|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2944|208|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2970|228|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2962|207|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampire:vampire:vampire:vampire:vampirelord||||||2969|296|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampire:vampire:vampire:vampire:vampirelord||||||2897|276|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampire:vampire:vampire:vampire:vampirelord||||||2967|267|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeletalmage:vampire||||||2940|309|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeletalmage:vampire||||||2900|263|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|fleshgolem:corpsegolem||||||2896|216|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneclaw:boneknight:skeletalknight||||||2643|245|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|corpsegolem:fleshgolem:fleshgoliath||||||2631|195|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|corpsegolem:fleshgolem:fleshgoliath||||||2661|360|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:lich:lichlord:nazghoul||||||2622|263|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:lich:lichlord:nazghoul||||||2634|280|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|mummy||||||2681|175|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2585|248|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2585|275|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2598|269|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2605|290|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2608|276|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2611|264|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2612|249|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2613|290|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2613|304|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2622|282|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2627|248|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2633|289|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2635|254|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2640|264|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2643|278|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage||||||2643|291|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2569|219|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2579|228|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2582|212|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2593|218|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2601|235|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2619|214|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2625|230|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2637|210|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2638|228|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2640|345|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2643|186|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2649|358|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2658|184|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2658|256|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2659|211|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2659|323|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2660|287|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2661|352|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2665|194|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2666|226|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2671|336|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2680|207|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2680|269|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2684|295|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2684|356|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2691|315|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|slime:giantrat:vampirebat:skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:vampire||||||2694|220|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||2594|290|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||2601|256|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||2695|174|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ancientvampire||||||2316|284|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|bloodelemental||||||2299|240|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneclaw:boneknight:skeletalknight||||||2313|270|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneknight:skeletalknight||||||2227|240|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneknight:skeletalknight||||||2297|254|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneknight:skeletalknight||||||2319|256|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneknight:skeletalknight||||||2358|259|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneknight:skeletalknight||||||2371|241|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneknight:skeletalknight||||||2389|215|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|boneknight:skeletalknight||||||2389|240|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|demilich:lichlord||||||2327|237|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie||||||2317|289|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie||||||2326|282|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie||||||2330|288|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:lich:lichlord:nazghoul||||||2218|251|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:lich:lichlord:nazghoul||||||2275|264|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2217|247|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2228|216|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2240|252|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2242|242|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2248|229|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2248|255|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2252|215|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2261|268|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2271|229|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2272|242|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2285|215|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2286|237|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2296|229|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2304|209|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2319|225|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2319|270|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2328|262|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2333|243|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2336|236|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2346|264|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2353|246|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2354|238|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|skeleton:ghoul:wight:shade:spectre:wraith:zombie:skeletalmage:bonemagi:boneknight:skeletalknight:fleshgolem:corpsegolem||||||2363|230|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||2259|251|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||2275|251|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|vampirelord:vampire||||||2343|257|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie:ghoul:wight:zombie:fleshgolem||||||2287|250|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie:ghoul:wight:zombie:fleshgolem||||||2287|259|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie:ghoul:wight:zombie:fleshgolem||||||2305|259|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie:ghoul:wight:zombie:fleshgolem||||||2381|228|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie:ghoul:wight:zombie:fleshgolem||||||2382|209|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|ghoul:wight:zombie:ghoul:wight:zombie:fleshgolem||||||2397|220|0|2|888|888|2|2|1|1|0|0|0|0|0 diff --git a/Data/Spawns/land.map b/Data/Spawns/land.map new file mode 100644 index 0000000..6f500dd --- /dev/null +++ b/Data/Spawns/land.map @@ -0,0 +1,3 @@ +## OCEAN +*|GiantCrab:Lobstran:Lurker:Sahuagin:Sahuaginmage:Shark:GiantEel:Silisk:WaterElemental:Typhoon:Turtle:StormCloud|Dolphin:Seahorse|SeaSerpent:DeepSeaSerpent:GreatWhite:GiantSquid:DeepSeaElemental|SeaHydra:Ktulu:Krakoa:NagaWarrior:NagaQueen:Naga:WaterElementalElder|Dagon:SeaDevil:Megalodon:Lochasaur:Kraken:Leviathan:DragonTurtle:SeaDragon||10|10|-5|1|0|0|7200|7200|12345|400|50|300|200|100|0 +*|SunkenShip||||||10|10|0|1|0|0|7200|7200|12345|100|0|0|0|0|0 diff --git a/Data/Spawns/mazes.map b/Data/Spawns/mazes.map new file mode 100644 index 0000000..542987e --- /dev/null +++ b/Data/Spawns/mazes.map @@ -0,0 +1,55 @@ +## CAVERNS OF ICE +*|arcticogrelord||||||173|500|-3|2|888|888|2|2|1|1|0|0|0|0|0 +*|arcticogrelord||||||179|483|1|2|888|888|2|2|1|1|0|0|0|0|0 +*|arcticogrelord||||||292|443|25|2|888|888|2|2|1|1|0|0|0|0|0 +*|evilmage:evilmage:evilmage:IceSalamander:SnowElemental||||||67|673|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|evilmage:evilmage:evilmage:IceSalamander:SnowElemental||||||82|674|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|evilmage:evilmage:evilmage:IceSalamander:SnowElemental||||||85|665|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|evilmagelord:evilmage:evilmagelord:evilmage:IceSalamander:SnowElemental||||||64|692|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|evilmagelord:evilmage:evilmagelord:evilmage:IceSalamander:SnowElemental||||||67|665|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|evilmagelord:evilmage:evilmagelord:evilmage:IceSalamander:SnowElemental||||||95|686|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|frostgiant||||||174|440|-5|2|888|888|2|2|1|1|0|0|0|0|0 +*|frosttroll||||||210|523|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|frosttroll||||||222|538|-3|2|888|888|2|2|1|1|0|0|0|0|0 +*|frosttroll||||||226|524|-2|2|888|888|2|2|1|1|0|0|0|0|0 +*|frosttroll||||||242|530|-7|2|888|888|2|2|1|1|0|0|0|0|0 +*|frosttroll||||||267|483|1|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblin||||||280|698|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblin||||||280|708|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblin||||||286|693|15|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblin||||||293|698|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblin||||||295|707|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblinarcher||||||268|691|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblinarcher||||||269|714|-2|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblinarcher||||||287|716|-2|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblinarcher||||||288|684|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblinarcher||||||305|691|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblinarcher||||||306|714|-2|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblinshaman||||||286|706|0|2|888|888|2|2|1|1|0|0|0|0|0 +*|hobgoblinchief||||||291|707|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|iceelemental:iceelemental:iceelemental:iceelemental:waterelemental||||||128|471|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|iceelemental:iceelemental:iceelemental:iceelemental:waterelemental||||||140|487|1|2|888|888|2|2|1|1|0|0|0|0|0 +*|iceelemental:iceelemental:iceelemental:iceelemental:waterelemental||||||162|459|1|2|888|888|2|2|1|1|0|0|0|0|0 +*|iceelemental:iceelemental:iceelemental:iceelemental:waterelemental||||||162|482|-4|2|888|888|2|2|1|1|0|0|0|0|0v +*|iceelemental:iceelemental:iceelemental:iceelemental:waterelemental||||||144|455|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|icefiend:icefiend:icefiend:icefiend:icefiend:icedevil||||||80|690|0|2|999|999|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||120|499|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||147|506|-7|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||163|516|-3|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||179|452|-4|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||188|492|-4|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||188|522|-3|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||195|467|-4|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||195|506|-6|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||196|442|-4|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||203|492|-2|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||213|476|-3|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||215|460|-5|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||228|442|-7|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||246|466|-3|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||259|443|-5|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||264|515|-1|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||269|461|-4|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||277|499|-3|2|888|888|2|2|1|1|0|0|0|0|0 +*|SnowBear:SnowElemental:IceElemental:FrostTroll:GargoyleIce:IceSalamander:IceToad:IceSerpent:FrostOoze||||||283|527|-6|2|888|888|2|2|1|1|0|0|0|0|0 +*|whitewyrm||||||95|477|-4|2|999|999|2|2|1|1|0|0|0|0|0 diff --git a/Data/Spawns/towns.map b/Data/Spawns/towns.map new file mode 100644 index 0000000..8ceae32 --- /dev/null +++ b/Data/Spawns/towns.map @@ -0,0 +1,572 @@ +## BRITAIN +*|miner||||||4431|374|0|2|0|0|0|0|1|1|0|0|0|0|0 +*|beekeeper||||||2003|1432|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|guard||||||2008|1486|-20|1|0|0|4|4|1|1|0|0|0|0|0 +*|gypsy||||||1946|1640|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|cook||||||1872|1602|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|farmer||||||1873|1611|15|1|0|0|4|4|1|1|0|0|0|0|0 +*|butcher||||||1882|1620|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|mapmaker||||||1699|1639|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipwright||||||1719|1647|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|fisherman||||||1732|1649|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|fisherman||||||1717|1662|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|provisioner||||||1714|1634|6|1|0|0|1|1|1|1|0|0|0|0|0 +*|farmer||||||2005|1429|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|farmer||||||1937|1464|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|farmer||||||1908|1532|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|miller||||||1646|1551|5|1|0|0|1|1|1|1|0|0|0|0|0 +*|weaver||||||1518|1598|0|1|0|0|1|1|1|1|0|0|0|0|0 +*|farmer||||||1651|1757|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|stablemaster||||||1835|1644|10|1|0|0|4|4|1|1|0|0|0|0|0|0|0|0|0 +*|thief||||||1700|1646|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|farmer||||||1569|1474|0|1|0|0|1|1|1|1|0|0|0|0|0 +*|guard||||||1715|1622|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1759|1597|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1819|1575|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1848|1546|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1852|1494|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1910|1464|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1900|1406|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1975|1411|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2028|1406|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1637|1639|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1679|1572|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1630|1559|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1556|1579|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1590|1501|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1491|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1486|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1485|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1487|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1488|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1489|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1484|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1492|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1483|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1575|1490|4|1|10|20|0|0|1|1|0|0|0|0|0 +*|horse||||||1828|1640|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|horse||||||1828|1635|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1580|1484|2|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1576|1487|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1579|1487|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1580|1490|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1576|1484|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1577|1491|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|pig||||||1851|1630|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|pig||||||1854|1635|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|pig||||||1859|1630|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|pig||||||1861|1634|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|pig||||||1855|1631|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|goat||||||1851|1641|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|goat||||||1860|1645|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1851|1645|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1854|1641|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1858|1641|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1855|1645|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1860|1642|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1857|1644|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1852|1643|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|pig||||||1857|1635|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|pig||||||1852|1632|10|1|30|45|1|1|1|1|0|0|0|0|0 +*|bull||||||1897|1627|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|bull||||||1913|1641|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|bull||||||1912|1627|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1897|1641|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1897|1636|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1898|1631|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1905|1626|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1903|1633|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1908|1641|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1913|1633|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1903|1637|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1907|1628|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1902|1640|10|1|30|45|4|4|1|1|0|0|0|0|0 +*|cow||||||1907|1632|10|1|30|45|4|4|1|1|0|0|0|0|0 + +## BUCS DEN +*|weaver||||||2637|2256|10|1|0|0|2|2|1|1|0|0|0|0|0 +*|weaponsmith||||||2687|2241|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipwright||||||2684|2199|0|1|5|10|0|0|1|1|0|0|0|0|0 +*|mapmaker||||||2675|2202|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|fisherman||||||2735|2222|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|marinerguildmaster||||||2667|2203|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|innkeeper||||||2676|2112|10|1|0|0|2|2|1|1|0|0|0|0|0 +*|tavernkeeper||||||2594|2201|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|waiter||||||2602|2203|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|barkeeper||||||2592|2211|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|thief||||||2557|2252|-15|1|0|0|2|2|1|1|0|0|0|0|0 +*|thiefguildmaster||||||2556|2261|-15|1|0|0|2|2|1|1|0|0|0|0|0 +*|alchemist||||||2559|2262|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|provisioner||||||2575|2292|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|healer||||||2592|2260|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|tailor||||||2623|2263|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|leatherworker||||||2632|2264|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|tanner||||||2630|2268|30|1|0|0|0|0|1|1|0|0|0|0|0 +*|bowyer||||||2620|2160|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|ironworker||||||2689|2235|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|herbalist||||||2560|2252|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|cook||||||2610|2218|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|miner||||||2624|2132|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|lumberjack||||||2665|2187|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|minstrel||||||2619|2200|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|jester||||||2608|2207|20|1|0|0|1|1|1|1|0|0|0|0|0 +*|bowyer||||||2625|2177|0|1|0|0|0|0|1|1|0|0|0|0|0 + +## COVE +*|guard||||||2718|1454|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2568|1431|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2591|1455|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2636|1450|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2675|1452|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2677|1402|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2740|1491|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2655|1491|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2621|1485|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|innkeeper||||||2609|1490|20|1|0|0|1|1|1|1|0|0|0|0|0 +*|tavernkeeper||||||2608|1491|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|waiter||||||2615|1505|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|provisioner||||||2615|1464|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|jester||||||2609|1506|0|1|0|0|1|1|1|1|0|0|0|0|0 +*|miller||||||2645|1476|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|farmer||||||2724|1469|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|horse||||||2720|1481|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|stablemaster||||||2725|1481|0|1|0|0|1|1|1|1|0|0|0|0|0 +*|rangerguildmaster||||||2720|1489|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|barkeeper||||||2712|1487|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|waiter||||||2711|1494|20|1|0|0|1|1|1|1|0|0|0|0|0 +*|fisherman||||||2598|1424|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|tailor||||||2578|1493|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|minstrel||||||2604|1499|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|baker||||||2642|1479|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|alchemist||||||2667|1437|16|1|0|0|0|0|1|1|0|0|0|0|0 +*|healer||||||2668|1473|0|1|0|0|1|1|1|1|0|0|0|0|0 +*|bowyer||||||2716|1501|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|weaponsmith||||||2705|1489|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|fighter||||||2710|1488|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|minstrel||||||2708|1489|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|tanner||||||2755|1482|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|leatherworker||||||2760|1476|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|ranger||||||2718|1492|40|1|0|0|0|0|1|1|0|0|0|0|0 +*|miner||||||3469|552|0|2|0|0|0|0|1|1|0|0|0|0|0 + +## JHELOM +*|jester||||||1055|3140|15|1|0|0|1|1|1|1|0|0|0|0|0 +*|jeweler||||||1105|3191|10|1|0|0|2|2|1|1|0|0|0|0|0 +*|healer||||||1010|3194|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|shipwright||||||1129|3139|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|fisherman||||||1113|3155|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|mapmaker||||||1120|3138|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|miner||||||1026|3110|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|herbalist||||||1000|3137|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|armorer||||||1016|3162|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|provisioner||||||1000|3170|15|1|0|0|2|2|1|1|0|0|0|0|0 +*|leatherworker||||||1048|3172|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|stablemaster||||||1064|3202|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|tinker||||||1051|3238|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|innkeeper||||||1050|3131|15|1|5|10|2|2|1|1|0|0|0|0|0 +*|baker||||||1050|3114|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|cook||||||1053|3118|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|waiter||||||1063|3140|15|1|5|10|2|2|1|1|0|0|0|0|0 +*|barkeeper||||||1049|3137|15|1|0|0|2|2|1|1|0|0|0|0|0 +*|tinkerguildmaster||||||1040|3242|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|tanner||||||1045|3163|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|ranger||||||1087|3145|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|minstrel||||||1057|3135|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|lumberjack||||||1101|3128|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|fisherman||||||1141|3161|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|fighter||||||1084|3164|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|guard||||||1024|3182|10|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1056|3268|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1127|3274|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1075|3232|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1126|3228|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1119|3175|10|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||987|3152|10|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1020|3142|10|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1077|3116|10|1|0|0|4|4|1|1|0|0|0|0|0 +*|horse||||||1058|3197|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|gypsy||||||1090|3256|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|bowyer||||||1096|3146|10|1|0|0|0|0|1|1|0|0|0|0|0 + +## MAGINCIA +*|jester||||||3432|2427|0|1|0|0|1|1|1|1|0|0|0|0|0 +*|weaver||||||3401|2430|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|tailor||||||3414|2429|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|innkeeper||||||3431|2424|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|barkeeper||||||3432|2421|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|waiter||||||3440|2425|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|cook||||||3452|2422|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|tinker||||||3480|2396|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|jeweler||||||3474|2405|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|bull||||||3345|2448|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|butcher||||||3348|2442|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|healer||||||3317|2436|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|bard||||||3283|2446|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|lumberjack||||||3428|2464|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|alchemistguildmaster||||||3311|2493|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|herbalist||||||3309|2500|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|alchemist||||||3310|2485|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|fisherman||||||3374|2516|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|provisioner||||||3390|2470|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|mapmaker||||||3442|2505|35|1|0|0|0|0|1|1|0|0|0|0|0 +*|thief||||||3452|2502|-5|1|0|0|2|2|1|1|0|0|0|0|0 +*|shipwright||||||3439|2503|15|1|0|0|0|0|1|1|0|0|0|0|0 +*|guard||||||3386|2478|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||3337|2484|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||3306|2447|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||3382|2455|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||3391|2403|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||3452|2398|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||3465|2432|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||3418|2441|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|farmableeggs||||||3339|2436|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||3336|2436|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||3337|2436|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||3340|2436|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||3334|2436|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||3333|2436|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|chicken||||||3336|2439|0|1|30|45|3|2|1|6|0|0|0|0|0 +*|cow||||||3364|2432|1|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||3369|2427|0|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||3369|2432|0|1|30|45|2|2|1|1|0|0|0|0|0 +*|bull||||||3363|2426|0|1|30|45|2|2|1|1|0|0|0|0|0 +*|gypsy||||||3490|2440|0|1|0|0|0|0|1|1|0|0|0|0|0 + +## MINOC +*|gypsy||||||2874|544|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|miner||||||3525|718|0|2|0|0|0|4|1|1|0|0|0|0|0 +*|miner||||||3917|555|0|2|0|0|0|4|1|1|0|0|0|0|0 +*|guard||||||2791|444|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2813|469|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2854|457|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2912|475|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2948|467|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2916|511|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2954|542|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2976|579|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2915|561|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2885|520|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2840|504|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2791|519|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2746|494|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2758|459|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|scribe||||||2947|512|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|ranger||||||2778|463|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|bowyer||||||2778|457|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|ironworker||||||2785|430|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|jeweler||||||2760|439|10|1|0|0|4|4|1|1|0|0|0|0|0 +*|fisherman||||||2753|521|-1|1|0|0|0|0|1|1|0|0|0|0|0 +*|healer||||||2725|485|5|1|0|0|4|4|1|1|0|0|0|0|0 +*|mage||||||2768|496|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipwright||||||2772|527|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|alchemist||||||2802|514|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|tinker||||||2833|491|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|bard||||||2810|480|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|leatherworker||||||2831|444|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|tanner||||||2836|438|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|baker||||||2866|449|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|cook||||||2871|448|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|stablemaster||||||2898|457|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|horse||||||2903|453|0|1|0|0|1|1|1|1|0|0|0|0|0 +*|provisioner||||||2913|456|10|1|0|0|1|1|1|1|0|0|0|0|0 +*|fighter||||||2933|460|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|weaponsmith||||||2931|443|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|blacksmith||||||2943|459|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|armorer||||||2937|443|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|blacksmithguildmaster||||||2951|458|-14|1|0|0|0|0|1|1|0|0|0|0|0 +*|lumberjack||||||2913|527|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|lumberjack||||||2927|528|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|carpenter||||||2924|535|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|jester||||||2926|555|5|1|0|0|1|1|1|1|0|0|0|0|0 +*|innkeeper||||||2922|556|5|1|0|0|1|1|1|1|0|0|0|0|0 +*|tavernkeeper||||||2934|553|5|1|0|0|1|1|1|1|0|0|0|0|0 +*|waiter||||||2942|555|5|1|0|0|1|1|1|1|0|0|0|0|0 +*|minstrel||||||2948|553|5|1|0|0|0|0|1|1|0|0|0|0|0 + +## MOONGLOW +*|guard||||||3861|1630|4|1|0|0|2|2|1|1|0|0|0|0|0 +*|mage||||||3873|1645|4|1|0|0|2|2|1|1|0|0|0|0|0 +*|scribe||||||3880|1625|4|1|0|0|2|2|1|1|0|0|0|0|0 +*|mage||||||3857|1605|4|1|0|0|2|2|1|1|0|0|0|0|0 +*|alchemist||||||3846|1629|4|1|0|0|2|2|1|1|0|0|0|0|0 +*|herbalist||||||3844|1605|4|1|0|0|0|0|1|1|0|0|0|0|0 +*|alchemist||||||3859|1606|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|libraryguildmaster||||||3849|1625|25|1|0|0|2|2|1|1|0|0|0|0|0 +*|mage||||||3872|1606|25|1|0|0|2|2|1|1|0|0|0|0|0 +*|mage||||||3881|1625|25|1|0|0|2|2|1|1|0|0|0|0|0 +*|mage||||||4334|1963|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|healer||||||4219|1993|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|tavernkeeper||||||4209|1931|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|waiter||||||4208|1939|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|bard||||||4152|1977|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|stablemaster||||||4125|2049|2|1|0|0|2|2|1|1|0|0|0|0|0 +*|leatherworker||||||4110|2020|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|tailor||||||4104|2022|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|bowyer||||||4137|2043|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|ranger||||||4141|2057|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|innkeeper||||||4109|2039|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|cobbler||||||4093|1988|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|provisioner||||||4086|1994|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|ironworker||||||4121|1936|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|armorer||||||4121|1947|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|weaponsmith||||||4115|1940|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|miner||||||4132|1912|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|mageguildmaster||||||4327|1967|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|fisherman||||||4078|2044|-1|1|0|0|0|0|1|1|0|0|0|0|0 +*|guard||||||4057|1702|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||4070|1957|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||4113|1971|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||4124|2005|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||4140|2030|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||4187|1977|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||4243|2003|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||4322|2000|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|lumberjack||||||4319|2012|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|fighter||||||4133|1946|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|gypsy||||||4162|2008|0|1|0|0|0|0|1|1|0|0|0|0|0 + +## PAWS +*|jester||||||2031|2034|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|farmer||||||1993|2247|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|healer||||||2045|2086|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|mapmaker||||||2055|2109|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipwright||||||2067|2101|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|thief||||||2057|2109|-18|1|0|0|0|0|1|1|0|0|0|0|0 +*|assassinguildmaster||||||2051|2112|-18|1|0|0|0|0|1|1|0|0|0|0|0 +*|miller||||||2019|2134|7|1|0|0|2|2|1|1|0|0|0|0|0 +*|cook||||||2028|2130|7|1|0|0|0|0|1|1|0|0|0|0|0 +*|baker||||||2026|2127|7|1|0|0|0|0|1|1|0|0|0|0|0 +*|cobbler||||||1983|2080|6|1|0|0|2|2|1|1|0|0|0|0|0 +*|leatherworker||||||2000|2077|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|tailor||||||1992|2079|6|1|0|0|0|0|1|1|0|0|0|0|0 +*|tanner||||||2006|2076|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|provisioner||||||1947|2032|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|horse||||||1951|2076|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|stablemaster||||||1942|2080|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|innkeeper||||||2008|2035|8|1|0|0|1|1|1|1|0|0|0|0|0 +*|tavernkeeper||||||2024|2022|8|1|0|0|2|2|1|1|0|0|0|0|0 +*|waiter||||||2037|2024|8|1|0|0|2|2|1|1|0|0|0|0|0 +*|ironworker||||||4018|379|0|2|0|0|0|0|1|1|0|0|0|0|0 +*|miner||||||2072|2211|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|miner||||||4016|371|0|2|0|0|0|0|1|1|0|0|0|0|0 +*|fisherman||||||2091|2089|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|lumberjack||||||2062|2137|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|minstrel||||||2031|2023|8|1|0|0|0|0|1|1|0|0|0|0|0 +*|guard||||||2079|2087|2|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1930|2089|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2022|2046|8|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1957|2017|6|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1949|2153|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1973|2110|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1995|2154|6|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2076|2138|2|1|0|0|4|4|1|1|0|0|0|0|0 +*|farmableeggs||||||2019|2247|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||2017|2247|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||2020|2247|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||2016|2247|0|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||2012|2247|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||2013|2247|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||2015|2247|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|cow||||||1987|2237|0|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||1987|2230|0|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||2000|2231|2|1|30|45|2|2|1|1|0|0|0|0|0 +*|bull||||||1998|2235|2|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||1993|2236|1|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||1992|2233|2|1|30|45|2|2|1|1|0|0|0|0|0 +*|chicken||||||2016|2250|1|1|30|45|3|3|1|8|0|0|0|0|0 + +## SKARA BRAE +*|gypsy||||||778|1896|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|jester||||||685|1870|26|1|0|0|1|1|1|1|0|0|0|0|0 +*|guard||||||752|1912|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||772|1879|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||725|1882|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||688|1896|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||644|1896|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||767|1850|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||730|1840|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||671|1824|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||648|1799|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|baker||||||641|1782|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|miller||||||643|1776|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|mapmaker||||||633|1821|7|1|0|0|0|0|1|1|0|0|0|0|0 +*|fisherman||||||695|1797|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|shipwright||||||631|1830|7|1|0|0|0|0|1|1|0|0|0|0|0 +*|cobbler||||||681|1797|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|miner||||||711|1777|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|horse||||||745|1833|1|1|0|0|2|2|1|1|0|0|0|0|0 +*|stablemaster||||||742|1841|1|1|0|0|2|2|1|1|0|0|0|0|0 +*|provisioner||||||776|1826|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|scribe||||||791|1856|25|1|0|0|2|2|1|1|0|0|0|0|0 +*|mage||||||788|1855|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|carpenter||||||764|1863|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|blacksmith||||||718|1891|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|weaponsmith||||||712|1899|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|armorer||||||719|1896|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|herbalist||||||678|1911|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|alchemist||||||678|1906|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|healer||||||647|1904|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|weaver||||||645|1888|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|tailor||||||652|1889|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|bardguildmaster||||||627|1904|1|1|0|0|2|2|1|1|0|0|0|0|0 +*|bard||||||628|1890|21|1|0|0|2|2|1|1|0|0|0|0|0 +*|bard||||||624|1888|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|tavernkeeper||||||677|1886|6|1|0|0|2|2|1|1|0|0|0|0|0 +*|waiter||||||687|1874|6|1|0|0|2|2|1|1|0|0|0|0|0 +*|barkeeper||||||691|1870|26|1|0|0|2|2|1|1|0|0|0|0|0 +*|innkeeper||||||709|1872|1|1|0|0|2|2|1|1|0|0|0|0|0 +*|ranger||||||669|1919|2|1|0|0|0|0|1|1|0|0|0|0|0 +*|tanner||||||671|1792|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|minstrel||||||680|1881|6|1|0|0|0|0|1|1|0|0|0|0|0 + +## TRINSIC +*|bowyer||||||1996|2699|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|gypsy||||||1962|2672|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|jester||||||2099|2642|5|1|0|0|1|1|1|1|0|0|0|0|0 +*|sheep||||||1982|2577|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1982|2583|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1987|2578|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1987|2583|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|sheep||||||1985|2580|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|guard||||||2145|2621|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2099|2621|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2074|2612|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2074|2654|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2117|2653|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2043|2672|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2007|2680|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2006|2714|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2007|2642|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1980|2627|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2030|2610|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2039|2596|25|1|0|0|1|1|1|1|0|0|0|0|0 +*|guard||||||2006|2595|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2007|2545|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||2012|2569|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1974|2554|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|jester||||||2024|2636|0|1|0|0|1|1|1|1|0|0|0|0|0 +*|shipwright||||||2148|2551|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|fisherman||||||2159|2630|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|horse||||||1994|2596|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|tanner||||||1993|2584|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|leatherworker||||||1997|2578|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|tailor||||||1998|2580|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|weaver||||||1998|2571|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|stablemaster||||||1996|2600|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|healer||||||2028|2600|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|farmer||||||2070|2596|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|provisioner||||||2022|2558|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|thief||||||2021|2556|-20|1|0|0|2|2|1|1|0|0|0|0|0 +*|thief||||||2031|2558|-20|1|0|0|2|2|1|1|0|0|0|0|0 +*|miller||||||1983|2568|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|baker||||||1979|2561|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|weaponsmith||||||1961|2548|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|armorer||||||1957|2556|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|blacksmith||||||1953|2550|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|warriorguildmaster||||||1960|2559|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|jeweler||||||1969|2617|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|bull||||||1966|2639|5|1|5|10|1|1|1|1|0|0|0|0|0 +*|butcher||||||1972|2635|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|cobbler||||||1999|2634|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|carpenter||||||1995|2648|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|bowyer||||||1999|2687|5|1|0|0|0|0|1|1|0|0|0|0|0 +*|alchemist||||||2029|2693|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|herbalist||||||2033|2692|10|1|0|0|0|0|1|1|0|0|0|0|0 +*|innkeeper||||||2102|2649|25|1|0|0|0|0|1|1|0|0|0|0|0 +*|waiter||||||2102|2648|5|1|0|0|1|1|1|1|0|0|0|0|0 +*|tavernkeeper||||||2091|2642|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|cook||||||2107|2647|5|1|0|0|2|2|1|1|0|0|0|0|0 +*|mapmaker||||||2085|2604|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|scribe||||||2099|2603|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|mage||||||2093|2606|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|mage||||||2093|2596|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|bard||||||2032|2624|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|tinker||||||2056|2623|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|fighter||||||1958|2553|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|minstrel||||||2086|2643|5|1|0|0|0|0|1|1|0|0|0|0|0 + +## YEW +*|gypsy||||||1522|808|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|provisioner||||||1466|861|-20|1|0|0|2|2|1|1|0|0|0|0|0 +*|carpenter||||||1488|893|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|farmer||||||1475|860|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||1554|854|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|stablemaster||||||1573|871|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|armorer||||||1576|888|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|bowyer||||||1523|868|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|thief||||||1468|868|-20|1|0|0|0|0|1|1|0|0|0|0|0 +*|beekeeper||||||1467|870|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|horse||||||1583|866|1|1|0|0|2|2|1|1|0|0|0|0|0 +*|ranger||||||1536|856|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|healerguildmaster||||||1571|845|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|healer||||||1581|846|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|lumberjack||||||1511|887|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|tailor||||||1389|965|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|sheep||||||1393|947|0|1|5|10|10|4|1|10|0|0|0|0|0 +*|weaver||||||1386|961|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|lumberjack||||||1499|900|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|alchemist||||||1546|895|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|herbalist||||||1546|900|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|lumberjack||||||1595|849|1|1|0|0|0|0|1|1|0|0|0|0|0 +*|leatherworker||||||1552|790|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|cobbler||||||1550|782|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|tanner||||||1548|792|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|scribe||||||1563|773|20|1|0|0|0|0|1|1|0|0|0|0|0 +*|mage||||||1551|815|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|miller||||||1551|773|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|baker||||||1561|774|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|cook||||||1574|771|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|butcher||||||1585|774|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|fighter||||||1580|813|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|tavernkeeper||||||1567|785|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|waiter||||||1569|800|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|innkeeper||||||1568|783|20|1|0|0|2|2|1|1|0|0|0|0|0 +*|jester||||||1569|793|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|minstrel||||||1561|798|0|1|0|0|0|0|1|1|0|0|0|0|0 +*|carpentryguildmaster||||||1486|900|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|guard||||||1519|896|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1564|901|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1470|910|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1416|889|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1382|829|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1587|801|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1552|804|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1003|974|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||986|948|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1021|950|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1022|993|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||983|991|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|guard||||||1007|1010|0|1|0|0|4|4|1|1|0|0|0|0|0 +*|farmableeggs||||||1462|847|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1462|845|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1462|843|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1462|842|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1462|841|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1462|844|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|farmableeggs||||||1462|846|2|1|10|20|0|0|1|1|0|0|0|0|0 +*|chicken||||||1463|842|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1464|846|0|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1465|843|2|1|30|45|1|1|1|1|0|0|0|0|0 +*|chicken||||||1463|844|1|1|30|45|1|1|1|1|0|0|0|0|0 +*|bull||||||1473|843|1|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||1470|839|0|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||1470|847|1|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||1476|846|2|1|30|45|2|2|1|1|0|0|0|0|0 +*|cow||||||1476|839|2|1|30|45|2|2|1|1|0|0|0|0|0 + +## ZOO +*|polarbear||||||4046|1698|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|gorilla||||||4053|1661|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|gorilla||||||4058|1663|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|giantserpent||||||4021|1685|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|alligator||||||4021|1695|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|blackbear||||||4041|1661|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|brownbear||||||4029|1662|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|grizzlybear||||||4029|1671|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|deer||||||4031|1700|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|greatdeer||||||4034|1697|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|cavebear||||||4048|1684|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|sandscorpion||||||4068|1673|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|giantlizard||||||4047|1675|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|sandscorpion||||||4067|1662|0|1|0|0|2|2|1|1|0|0|0|0|0 +*|turtle||||||4065|1691|0|1|0|0|2|2|1|1|0|0|0|0|0 diff --git a/Docs/bodies.html b/Docs/bodies.html new file mode 100644 index 0000000..f296db7 --- /dev/null +++ b/Docs/bodies.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Body List + + + + +

Back to the index

+ This feature requires a UO:3D installation. + + diff --git a/Docs/bods/bod_smith_rewards.html b/Docs/bods/bod_smith_rewards.html new file mode 100644 index 0000000..0ade838 --- /dev/null +++ b/Docs/bods/bod_smith_rewards.html @@ -0,0 +1,1764 @@ + + + RunUO Documentation - Bulk Orders - Smith Rewards + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Small) Weapons
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15, 20: Normal
X
     
Iron 10, 15, 20: Exceptional 
X
 
X
X
    
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Small) Armor: Normal
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15, 20
X
     
Dull Copper 10, 15, 20 
X
 
X
X
    
Shadow Iron 10, 15, 20 
X
 
X
X
    
Copper 10, 15, 20 
X
 
X
X
    
Bronze 10, 15, 20 
X
 
X
X
    
Gold 10, 15, 20 
X
X
X
    
Agapite 10, 15, 20 
X
 
X
    
Verite 10, 15, 20   
X
  
Valorite 10, 15, 20   
X
X
  
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Small) Armor: Exceptional
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15 
X
 
X
X
    
Iron 20 
X
 
X
X
    
Dull Copper 10, 15 
X
X
X
    
Dull Copper 20 
X
 
X
    
Shadow Iron 10, 15 
X
 
X
    
Shadow Iron 20   
X
  
Copper 10, 15   
X
  
Copper 20   
X
X
  
Bronze 10, 15   
X
X
  
Bronze 20    
X
  
Gold 10, 15  
X
X
  
X
  
Gold 20    
X
  
Agapite 10, 15  
X
 
X
  
X
  
Agapite 20    
X
  
Verite 10, 15    
X
  
Verite 20    
X
 
Valorite 10, 15    
X
 
Valorite 20   
X
   
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Large) Ringmail: Normal
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15, 20 
X
 
X
X
    
Dull Copper 10, 15, 20 
X
X
X
    
Shadow Iron 10, 15, 20 
X
 
X
    
Copper 10, 15, 20   
X
  
Bronze 10, 15, 20   
X
X
  
Gold 10, 15, 20    
X
  
Agapite 10, 15, 20    
X
  
Verite 10, 15, 20    
X
  
Valorite 10, 15, 20    
X
 
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Large) Ringmail: Exceptional
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15 
X
X
X
    
Iron 20 
X
 
X
    
Dull Copper 10, 15  
X
X
  
X
  
Dull Copper 20    
X
  
Shadow Iron 10, 15  
X
 
X
  
X
  
Shadow Iron 20    
X
  
Copper 10, 15    
X
  
Copper 20    
X
 
Bronze 10, 15    
X
 
Bronze 20   
X
   
Gold 10, 15   
X
   
Gold 20     
X
 
Agapite 10, 15     
X
 
Agapite 20   
X
  
Verite 10, 15   
X
  
Verite 20    
X
  
Valorite 10, 15    
X
  
Valorite 20     
X
 
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Large) Chainmail: Normal
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15, 20 
X
 
X
X
    
Dull Copper 10, 15, 20   
X
  
Shadow Iron 10, 15, 20   
X
X
  
Copper 10, 15, 20    
X
  
Bronze 10, 15, 20    
X
  
Gold 10, 15, 20    
X
  
Agapite 10, 15, 20    
X
 
Verite 10, 15, 20   
X
   
Valorite 10, 15, 20     
X
 
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Large) Chainmail: Exceptional
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15   
X
  
Iron 20   
X
X
  
Dull Copper 10, 15    
X
  
Dull Copper 20    
X
 
Shadow Iron 10, 15    
X
 
Shadow Iron 20   
X
   
Copper 10, 15   
X
   
Copper 20     
X
 
Bronze 10, 15     
X
 
Bronze 20   
X
  
Gold 10, 15   
X
  
Gold 20    
X
  
Agapite 10, 15    
X
  
Agapite 20     
X
 
Verite 10, 15     
X
 
Verite 20    
X
  
Valorite 10, 15    
X
  
Valorite 20     
X
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Large) Platemail: Normal
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15, 20 
X
X
X
    
Dull Copper 10, 15, 20    
X
  
Shadow Iron 10, 15, 20    
X
  
Copper 10, 15, 20    
X
  
Bronze 10, 15, 20    
X
 
Gold 10, 15, 20   
X
   
Agapite 10, 15, 20     
X
 
Verite 10, 15, 20   
X
  
Valorite 10, 15, 20    
X
  
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
(Large) Platemail: Exceptional
Sturdy Pickaxe/Shovel (150 uses)
Gloves
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
Power Scrolls
Runic Hammers
Ancient Hammers
+1
+3
+5
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Iron 10, 15  
X
X
  
X
  
Iron 20    
X
  
Dull Copper 10, 15   
X
   
Dull Copper 20     
X
 
Shadow Iron 10, 15     
X
 
Shadow Iron 20   
X
  
Copper 10, 15   
X
  
Copper 20    
X
  
Bronze 10, 15    
X
  
Bronze 20     
X
 
Gold 10, 15     
X
 
Gold 20    
X
  
Agapite 10, 15    
X
  
Agapite 20     
X
Verite 10, 15     
X
Verite 20    
X
  
Valorite 10, 15    
X
  
Valorite 20    
X
 
 
Sturdy Pickaxe/Shovel (150 uses)
+1
 
+3
 
+5
 
Gargoyles Pickaxe (100 uses)
Prospectors Tool (50 uses)
Powder of Temperament (10 uses)
Colored Anvil
+5
+10
+15
+20
Du
Sh
Co
Br
Go
Ag
Ve
Va
+10
+15
+30
+60
Gloves
Power Scrolls
Runic Hammers
Ancient Hammers
+

+

+ + diff --git a/Docs/bods/bod_tailor_rewards.html b/Docs/bods/bod_tailor_rewards.html new file mode 100644 index 0000000..c3ac91f --- /dev/null +++ b/Docs/bods/bod_tailor_rewards.html @@ -0,0 +1,1026 @@ + + + RunUO Documentation - Bulk Orders - Tailor Rewards + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Small Bulk Order
Colored Cloth (Level 1)
Colored Cloth (Level 2)
Colored Cloth (Level 3)
Colored Cloth (Level 4)
Colored Cloth (Level 5)
Colored Sandals
Power Scrolls
Small Stretched Hide
Medium Stretched Hide
Light Flower Tapestry
Dark Flower Tapestry
Brown Bear Rug
Polar Bear Rug
Clothing Bless Deed
Runic Kits
+5
+10
+15
+20
Runic Sewing Kit: Spined
Runic Sewing Kit: Horned
Runic Sewing Kit: Barbed
Regular: 10, 15
 - Cloth 10, 15
X
     
 - Plain 10, 15
X
     
 - Spined 10, 15 
X
     
 - Horned 10, 15 
X
     
 - Barbed 10, 15 
X
 
X
   
Regular: 20
 - Cloth 20 
X
     
 - Plain 20 
X
     
 - Spined 20 
X
     
 - Horned 20 
X
 
X
   
 - Barbed 20 
X
X
   
Exceptional: 10, 15
 - Cloth 10, 15 
X
     
 - Plain 10, 15 
X
     
 - Spined 10, 15 
X
 
X
   
 - Horned 10, 15 
X
X
   
 - Barbed 10, 15 
X
X
   
Exceptional: 20
 - Cloth 20 
X
 
X
   
 - Plain 20 
X
 
X
   
 - Spined 20 
X
X
   
 - Horned 20 
X
X
   
 - Barbed 20   
X
X
  
 
Colored Cloth (Level 1)
Colored Cloth (Level 2)
Colored Cloth (Level 3)
Colored Cloth (Level 4)
Colored Cloth (Level 5)
Colored Sandals
+5
+10
+15
+20
Small Stretched Hide
Medium Stretched Hide
Light Flower Tapestry
Dark Flower Tapestry
Brown Bear Rug
Polar Bear Rug
Clothing Bless Deed
Runic Sewing Kit: Spined
Runic Sewing Kit: Horned
Runic Sewing Kit: Barbed
Power Scrolls
Runic Kits
+

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Large Bulk Order: 4-part
Colored Cloth (Level 1)
Colored Cloth (Level 2)
Colored Cloth (Level 3)
Colored Cloth (Level 4)
Colored Cloth (Level 5)
Colored Sandals
Power Scrolls
Small Stretched Hide
Medium Stretched Hide
Light Flower Tapestry
Dark Flower Tapestry
Brown Bear Rug
Polar Bear Rug
Clothing Bless Deed
Runic Kits
+5
+10
+15
+20
Runic Sewing Kit: Spined
Runic Sewing Kit: Horned
Runic Sewing Kit: Barbed
Regular
 - Cloth 10, 15   
X
X
  
 - Cloth 20    
X
 
 - Plain 10, 15, 20   
X
X
  
 - Plain 20    
X
 
 - Spined 10, 15    
X
 
 - Spined 20  
X
  
X
X
  
 - Horned 10, 15  
X
  
X
X
  
 - Horned 20    
X
X
  
 - Barbed 10, 15    
X
X
  
 - Barbed 20   
X
   
Exceptional
 - Cloth 10, 15  
X
  
X
X
  
 - Cloth 20    
X
X
  
 - Plain 10, 15, 20  
X
  
X
X
  
 - Plain 20    
X
X
  
 - Spined 10, 15    
X
X
  
 - Spined 20   
X
   
 - Horned 10, 15   
X
   
 - Horned 20    
X
 
 - Barbed 10, 15    
X
 
 - Barbed 20     
X
 
 
Colored Cloth (Level 1)
Colored Cloth (Level 2)
Colored Cloth (Level 3)
Colored Cloth (Level 4)
Colored Cloth (Level 5)
Colored Sandals
+5
+10
+15
+20
Small Stretched Hide
Medium Stretched Hide
Light Flower Tapestry
Dark Flower Tapestry
Brown Bear Rug
Polar Bear Rug
Clothing Bless Deed
Runic Sewing Kit: Spined
Runic Sewing Kit: Horned
Runic Sewing Kit: Barbed
Power Scrolls
Runic Kits
+

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Large Bulk Order: 5-part
Colored Cloth (Level 1)
Colored Cloth (Level 2)
Colored Cloth (Level 3)
Colored Cloth (Level 4)
Colored Cloth (Level 5)
Colored Sandals
Power Scrolls
Small Stretched Hide
Medium Stretched Hide
Light Flower Tapestry
Dark Flower Tapestry
Brown Bear Rug
Polar Bear Rug
Clothing Bless Deed
Runic Kits
+5
+10
+15
+20
Runic Sewing Kit: Spined
Runic Sewing Kit: Horned
Runic Sewing Kit: Barbed
Regular
 - Cloth 10, 15  
X
  
X
X
  
 - Cloth 20    
X
X
  
 - Plain 10, 15, 20  
X
  
X
X
  
 - Plain 20    
X
X
  
 - Spined 10, 15    
X
X
  
 - Spined 20   
X
   
 - Horned 10, 15   
X
   
 - Horned 20    
X
 
 - Barbed 10, 15    
X
 
 - Barbed 20     
X
 
Exceptional
 - Cloth 10, 15   
X
   
 - Cloth 20    
X
 
 - Plain 10, 15, 20   
X
   
 - Plain 20    
X
 
 - Spined 10, 15    
X
 
 - Spined 20     
X
 
 - Horned 10, 15     
X
 
 - Horned 20   
X
  
 - Barbed 10, 15   
X
  
 - Barbed 20     
X
 
Colored Cloth (Level 1)
Colored Cloth (Level 2)
Colored Cloth (Level 3)
Colored Cloth (Level 4)
Colored Cloth (Level 5)
Colored Sandals
+5
+10
+15
+20
Small Stretched Hide
Medium Stretched Hide
Light Flower Tapestry
Dark Flower Tapestry
Brown Bear Rug
Polar Bear Rug
Clothing Bless Deed
Runic Sewing Kit: Spined
Runic Sewing Kit: Horned
Runic Sewing Kit: Barbed
Power Scrolls
Runic Kits
+

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Large Bulk Order: 6-part
Colored Cloth (Level 1)
Colored Cloth (Level 2)
Colored Cloth (Level 3)
Colored Cloth (Level 4)
Colored Cloth (Level 5)
Colored Sandals
Power Scrolls
Small Stretched Hide
Medium Stretched Hide
Light Flower Tapestry
Dark Flower Tapestry
Brown Bear Rug
Polar Bear Rug
Clothing Bless Deed
Runic Kits
+5
+10
+15
+20
Runic Sewing Kit: Spined
Runic Sewing Kit: Horned
Runic Sewing Kit: Barbed
Regular
 - Plain 10, 15, 20   
X
   
 - Plain 20    
X
 
 - Spined 10, 15    
X
 
 - Spined 20     
X
 
 - Horned 10, 15     
X
 
 - Horned 20   
X
  
 - Barbed 10, 15   
X
  
 - Barbed 20     
X
Exceptional
 - Plain 10, 15, 20     
X
 
 - Plain 20   
X
  
 - Spined 10, 15   
X
  
 - Spined 20     
X
 - Horned 10, 15     
X
 - Horned 20     
X
 - Barbed 10, 15     
X
 - Barbed 20     
X
 
Colored Cloth (Level 1)
Colored Cloth (Level 2)
Colored Cloth (Level 3)
Colored Cloth (Level 4)
Colored Cloth (Level 5)
Colored Sandals
+5
+10
+15
+20
Small Stretched Hide
Medium Stretched Hide
Light Flower Tapestry
Dark Flower Tapestry
Brown Bear Rug
Polar Bear Rug
Clothing Bless Deed
Runic Sewing Kit: Spined
Runic Sewing Kit: Horned
Runic Sewing Kit: Barbed
Power Scrolls
Runic Kits
+

+

+ + diff --git a/Docs/commands.html b/Docs/commands.html new file mode 100644 index 0000000..1112083 --- /dev/null +++ b/Docs/commands.html @@ -0,0 +1,189 @@ + + + RunUO Documentation - Commands + + + + +

Back to the index

+

Commands

+ + Administrator | Game Master | Counselor | Player

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Administrator
AdminUsage: Admin
Opens an interface providing server information and administration features including client, account, and firewall management.
BanUsage: Ban
Modifiers: Global, Online, Region, Multi, Area, Self
Bans the account of a targeted player.
ClearFacetUsage: ClearFacet
Deletes all items and mobiles in your facet. Players and their inventory will not be deleted.
CountObjectsUsage: CountObjects
Generates a log file detailing all item and mobile types in the world.
DecorateUsage: Decorate
Generates world decoration.
DecorateMagUsage: DecorateMag
Generates world decoration.
DelAllRegionSpawnsUsage: DelAllRegionSpawns
Deletes all spawned objects of every regions and sets the spawners as not running.
DocGenUsage: DocGen
Generates RunUO documentation.
DoorGenUsage: DoorGen
Generates doors by analyzing the map. Slow.
DumpTimersUsage: DumpTimers
Generates a log file of all currently executing timers. Used for tracing timer leaks.
FirewallUsage: Firewall
Modifiers: Global, Online, Region, Multi, Area, Self
Adds a targeted player to the firewall (list of blocked IP addresses). This command does not ban or kick.
FreezeUsage: Freeze
Makes a targeted area of dynamic items static.
FreezeMapUsage: FreezeMap
Makes every dynamic item in your map static.
FreezeWorldUsage: FreezeWorld
Makes every dynamic item on all maps static.
GenLeverPuzzleUsage: GenLeverPuzzle
Generates lamp room and lever puzzle in doom.
GenStealArtiesUsage: GenStealArties
Generates the stealable artifacts spawner.
GlobalUsage: Global <command> [condition]
Invokes the command on all appropriate objects in the world. Optional condition arguments can further restrict the set of objects.
LanguageStatisticsUsage: LanguageStatistics
Generate a file containing the list of languages for each PlayerMobile.
MoonGenUsage: MoonGen
Generates public moongates. Removes all old moongates.
ProfileWorldUsage: ProfileWorld
Prints the amount of data serialized for every object type in your world file.
RebuildCategorizationUsage: RebuildCategorization
Rebuilds the categorization data file used by the Add command.
RemoveStealArtiesUsage: RemoveStealArties
Removes the stealable artifacts spawner and every not yet stolen stealable artifacts.
RespawnAllRegionsUsage: RespawnAllRegions
Respawns all regions and sets the spawners as running.
SaveUsage: Save
Saves the world.
SaveBGUsage: BackgroundSave
Aliases: BGSave, SaveBG
Saves the world, writing to the disk in the background
SecretLocGenUsage: SecretLocGen
Generates mark containers to Malas secret locations.
SetGuardedUsage: SetGuarded <true|false>
Enables or disables guards for the current region.
SetProfilesUsage: SetProfiles [true | false]
Enables, disables, or toggles the state of core packet and timer profiling.
SetSavesUsage: SetSaves <true | false>
Enables or disables automatic shard saving.
SHTelGenUsage: SHTelGen
Generates solen hives teleporters.
SignGenUsage: SignGen
Generates world/shop signs on all facets.
StartAllRegionSpawnsUsage: StartAllRegionSpawns
Sets the region spawners of all regions as running.
StopAllRegionSpawnsUsage: StopAllRegionSpawns
Sets the region spawners of all regions as not running.
TelGenUsage: TelGen
Generates world/dungeon teleporters for all facets.
ToggleGuardedUsage: ToggleGuarded
Toggles the state of guards for the current region.
ToTAdminUsage: ToTAdmin
Displays a menu to configure Treasures of Tokuno.
TraceExpandedUsage: TraceExpanded
Generates a log file describing all items using expanded memory.
TraceInternalUsage: TraceInternal
Generates a log file describing all items in the 'internal' map.
UnfreezeUsage: Unfreeze
Makes a targeted area of static items dynamic.
UnfreezeMapUsage: UnfreezeMap
Makes every static item in your map dynamic.
UnfreezeWorldUsage: UnfreezeWorld
Makes every static item on all maps dynamic.
UOAMVendorsUsage: UOAMVendors
Generates vendor spawners from Data/Common.MAP (taken from UOAutoMap)
ValidateNameUsage: ValidateName
Checks the result of NameValidation on the specified name.
VendorGenUsage: VendorGen
Generates vendors based on display cases and floor plans. Analyzes the map files, slow.
WriteProfilesUsage: WriteProfiles
Generates a log files containing performance diagnostic information.

+ + Administrator | Game Master | Counselor | Player

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Game Master
AddUsage: Add [<name> [params] [set {<propertyName> <value> ...}]]
Modifiers: Multi, Self
Adds an item or npc by name to a targeted location. Optional constructor parameters. Optional set property list. If no arguments are specified, this brings up a categorized add menu.
AddDoorUsage: AddDoor
Displays a menu from which you can interactively add doors.
AddMenuUsage: AddMenu [searchString]
Opens an add menu, with an optional initial search string. This menu allows you to search for Items or Mobiles and add them interactively.
AddToPackUsage: AddToPack <name> [params] [set {<propertyName> <value> ...}]
Alias: AddToCont
Modifiers: Global, Online, Region, Contained, Multi, Area, Self
Adds an item by name to the backpack of a targeted player or npc, or a targeted container. Optional constructor parameters. Optional set property list.
AllSpellsUsage: AllSpells
Completely fills a targeted spellbook with scrolls.
AnimateUsage: Animate <action> <frameCount> <repeatCount> <forward> <repeat> <delay>
Makes your character do a specified animation.
AreaUsage: Area <command> [condition]
Alias: Group
Invokes the command on all appropriate objects in a targeted area. Optional condition arguments can further restrict the set of objects.
BankUsage: Bank
Opens the bank box of a given target.
BCastUsage: BCast <text>
Aliases: B, BC
Broadcasts a message to everyone online.
BringToPackUsage: BringToPack
Modifiers: Global, Contained, Multi, Area
Brings a targeted item to your backpack.
ChainLinkUsage: ChainLink
Chain-links two or more targeted doors together.
CheckGuardedUsage: CheckGuarded
Returns a value indicating if the current region is guarded or not.
ConditionUsage: Condition <condition>
Modifiers: Global, Online, Region, Contained, Multi, Area, Self
Checks that the given condition matches a targeted object.
ContainedUsage: Contained <command> [condition]
Invokes the command on all child items in a targeted container. Optional condition arguments can further restrict the set of objects.
CountUsage: Count
Modifiers: Global, Online, Region, Contained, Area
Counts the number of objects that a command modifier would use. Generally used with condition arguments.
DeleteUsage: Delete
Alias: Remove
Modifiers: Global, Region, Contained, Multi, Area
Deletes a targeted item or mobile. Does not delete players.
DelRegionSpawnsUsage: DelRegionSpawns [<region name>]
Deletes all spawned objects of the region in which you are (or that you provided) and sets the spawners as not running.
DesignInsertUsage: DesignInsert
Inserts multiple targeted items into a customizable houses design.
DismountUsage: Dismount
Modifiers: Global, Online, Region, Multi, Area, Self
Forcefully dismounts a given target.
DupeUsage: Dupe [amount]
Dupes a targeted item.
DupeInBagUsage: DupeInBag <count>
Dupes an item at it's current location (count) number of times.
FactionBanUsage: FactionBan
Modifiers: Global, Online, Region, Multi, Area, Self
Bans the account of a targeted player from joining factions. All players on the account are removed from their current faction, if any.
FactionKickUsage: FactionKick
Modifiers: Global, Online, Region, Multi, Area, Self
Kicks the targeted player out of his current faction. This does not prevent them from rejoining.
FactionUnbanUsage: FactionUnban
Modifiers: Global, Online, Region, Multi, Area, Self
Unbans the account of a targeted player from joining factions.
FlipUsage: Flip
Turns an item.
ForgetAllRecipesUsage: ForgetAllRecipes
Makes a player forget all the recipies they've learned.
GetFollowersUsage: GetFollowers
Teleports all pets of a targeted player to your location.
GetSkillUsage: GetSkill <name>
Gets a skill value by name of a targeted mobile.
GlobalLightUsage: GlobalLight <value>
Sets the current global light level.
HWInfoUsage: HWInfo
Displays information about a targeted player's hardware.
ImmortalUsage: Immortal
Modifiers: Global, Online, Region, Multi, Area, Self
Sets the blessed property to true.
InterfaceUsage: Interface [view <properties ...>]
Modifiers: Global, Online, Region, Contained, Multi, Area
Opens an interface to interact with matched objects. Generally used with condition arguments.
InvulUsage: Invul
Modifiers: Global, Online, Region, Multi, Area, Self
Sets the blessed property to true.
KickUsage: Kick
Modifiers: Global, Online, Region, Multi, Area, Self
Disconnects a targeted player.
KillUsage: Kill
Modifiers: Global, Online, Region, Multi, Area, Self
Kills a targeted player or npc.
LearnAllRecipesUsage: LearnAllRecipes
Teaches a player all available recipes.
LinkUsage: Link
Links two targeted doors together.
MortalUsage: Mortal
Modifiers: Global, Online, Region, Multi, Area, Self
Sets the blessed property to false.
MoveUsage: Move
Repositions a targeted item or mobile.
NoInvulUsage: NoInvul
Modifiers: Global, Online, Region, Multi, Area, Self
Sets the blessed property to false.
OnlineUsage: Online <command> [condition]
Invokes the command on all mobiles that are currently logged in. Optional condition arguments can further restrict the set of objects.
OpenBrowserUsage: OpenBrowser <url>
Alias: OB
Modifiers: Global, Online, Region, Multi, Area, Self
Opens the web browser of a targeted player to a specified url.
PrivSoundUsage: PrivSound <index>
Modifiers: Global, Online, Region, Multi, Area, Self
Plays a sound to a given target.
RandomTalismanUsage: RandomTalisman <count>
Generates random talismans in your backback.
RefreshHouseUsage: RefreshHouse
Modifiers: Multi
Refreshes a targeted house sign.
RegionUsage: Region <command> [condition]
Invokes the command on all appropriate mobiles in your current region. Optional condition arguments can further restrict the set of objects.
RespawnRegionUsage: RespawnRegion [<region name>]
Respawns the region in which you are (or that you provided) and sets the spawners as running.
RestockUsage: Restock
Modifiers: Global, Region, Multi, Area
Manually restocks a targeted vendor, refreshing the quantity of every item the vendor sells to the maximum. This also invokes the maximum quantity adjustment algorithms.
ResurrectUsage: Resurrect
Alias: Res
Modifiers: Global, Online, Region, Multi, Area, Self
Resurrects a targeted ghost.
SetAllSkillsUsage: SetAllSkills <name> <value>
Sets all skill values of a targeted mobile.
SetSkillUsage: SetSkill <name> <value>
Sets a skill value by name of a targeted mobile.
ShaveBeardUsage: ShaveBeard
Modifiers: Global, Online, Region, Multi, Area, Self
Sets the FacialHairItemID property to 0.
ShaveHairUsage: ShaveHair
Modifiers: Global, Online, Region, Multi, Area, Self
Sets the HairItemID property to 0.
SoundUsage: Sound <index> [toAll=true]
Plays a sound to players within 12 tiles of you. The (toAll) argument specifies to everyone, or just those who can see you.
SpeechLogUsage: SpeechLog
Opens the speech log of a given target.
SquelchUsage: Squelch
Modifiers: Global, Online, Region, Multi, Area, Self
Sets the squelched property to true.
StartRegionSpawnsUsage: StartRegionSpawns [<region name>]
Sets the region spawners of the region in which you are (or that you provided) as running.
StopRegionSpawnsUsage: StopRegionSpawns [<region name>]
Sets the region spawners of the region in which you are (or that you provided) as not running.
TileUsage: Tile <name> [params] [set {<propertyName> <value> ...}]
Tiles an item or npc by name into a targeted bounding box. Optional constructor parameters. Optional set property list.
TileRXYZUsage: TileRXYZ <x> <y> <w> <h> <z> <name> [params] [set {<propertyName> <value> ...}]
Tiles an item or npc by name into a given bounding box, (x, y) parameters are relative to your characters position. Optional constructor parameters. Optional set property list.
TileXYZUsage: TileXYZ <x> <y> <w> <h> <z> <name> [params] [set {<propertyName> <value> ...}]
Tiles an item or npc by name into a given bounding box. Optional constructor parameters. Optional set property list.
TileZUsage: TileZ <z> <name> [params] [set {<propertyName> <value> ...}]
Tiles an item or npc by name into a targeted bounding box at a fixed Z location. Optional constructor parameters. Optional set property list.
TownCriersUsage: TownCriers
Manages the global town crier list.
UnsquelchUsage: Unsquelch
Modifiers: Global, Online, Region, Multi, Area, Self
Sets the squelched property to false.
ViewEquipUsage: ViewEquip
Lists equipment of a targeted mobile. From the list you can move, delete, or open props.
ViewHousesUsage: ViewHouses
Displays a menu listing all houses of a targeted player. The menu also contains specific house details, and options to: go to house, open house menu, and demolish house.
WipeUsage: Wipe
Wipes all items and npcs in a targeted bounding box.
WipeItemsUsage: WipeItems
Wipes all items in a targeted bounding box.
WipeMultisUsage: WipeMultis
Wipes all multis in a targeted bounding box.
WipeNPCsUsage: WipeNPCs
Wipes all npcs in a targeted bounding box.

+ + Administrator | Game Master | Counselor | Player

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Counselor
AutoPageNotifyUsage: AutoPageNotify
Alias: APN
Toggles your auto-page-notify status.
BatchUsage: Batch
Allows multiple commands to be run at the same time.
CastUsage: Cast <name>
Casts a spell by name.
ClientUsage: Client
Opens the client gump menu for a given player.
DropHoldingUsage: DropHolding
Drops the item, if any, that a targeted player is holding. The item is placed into their backpack, or if that's full, at their feet.
EchoUsage: Echo <text>
Relays (text) as a system message.
GetUsage: Get <propertyName>
Modifiers: Global, Online, Region, Contained, Multi, Area, Self
Gets one or more property values by name of a targeted object.
GetTypeUsage: GetType
Modifiers: Global, Online, Region, Contained, Multi, Area, Self
Gets the type name of a targeted object.
GoUsage: Go [name | serial | (x y [z]) | (deg min (N | S) deg min (E | W))]
With no arguments, this command brings up the go menu. With one argument, (name), you are moved to that regions "go location." Or, if a numerical value is specified for one argument, (serial), you are moved to that object. Two or three arguments, (x y [z]), will move your character to that location. When six arguments are specified, (deg min (N | S) deg min (E | W)), your character will go to an approximate of those sextant coordinates.
GuildPropsUsage: GuildProps
Opens a menu where you can view and edit guild properties of a targeted player or guild stone. If the new Guild system is active, also brings up the guild gump.
HideUsage: Hide
Modifiers: Global, Online, Region, Multi, Area, Self
Makes a targeted mobile disappear in a puff of smoke.
IncreaseUsage: Increase {<propertyName> <offset> ...}
Alias: Inc
Modifiers: Global, Online, Region, Contained, Multi, Area, Self
Increases the value of a specified property by the specified offset.
LightUsage: Light <level>
Set your local lightlevel.
MultiUsage: Multi <command>
Alias: m
Invokes the command on multiple targeted objects.
PagesUsage: Pages
Opens the page queue menu.
PropsUsage: Props [serial]
Opens a menu where you can view and edit all properties of a targeted (or specified) object.
SelfUsage: Self <command>
Invokes the command on the commanding player.
SerialUsage: Serial <serial> <command>
Invokes the command on a single object by serial.
SetUsage: Set <propertyName> <value> [...]
Modifiers: Global, Online, Region, Contained, Multi, Area, Self
Sets one or more property values by name of a targeted object.
SingleUsage: Single <command>
Invokes the command on a single targeted object. This is the same as just invoking the command directly.
SkillsUsage: Skills
Opens a menu where you can view or edit skills of a targeted mobile.
SMsgUsage: SMsg <text>
Aliases: S, SM
Broadcasts a message to all online staff.
SpeedBoostUsage: SpeedBoost [true|false]
Enables a speed boost for the invoker. Disable with paramaters.
StatsUsage: Stats
View some stats about the server.
StuckUsage: Stuck
Opens a menu of towns, used for teleporting stuck mobiles.
TeleportUsage: Teleport
Alias: Tele
Modifiers: Multi
Teleports your character to a targeted location.
TellUsage: Tell "text"
Modifiers: Global, Online, Region, Multi, Area, Self
Sends a system message to a targeted player.
UnhideUsage: Unhide
Modifiers: Global, Online, Region, Multi, Area, Self
Makes a targeted mobile appear in a puff of smoke.
VisUsage: Vis
Adds or removes a targeted player from your visibility list. Anyone on your visibility list will be able to see you at all times, even when you're hidden.
VisClearUsage: VisClear
Removes everyone from your visibility list.
VisListUsage: VisList
Shows the names of everyone in your visibility list.
WhereUsage: Where
Tells the commanding player his coordinates, region, and facet.
WhoListUsage: WhoList [filter]
Alias: Who
Lists all connected clients. Optionally filters results by name.

+ + Administrator | Game Master | Counselor | Player

+ +
+ + + + +
Player
HelpUsage: Help
Lists all available commands.
HelpInfoUsage: HelpInfo [<command>]
Gives information on a specified command, or when no argument specified, displays a gump containing all commands
+ + diff --git a/Docs/index.html b/Docs/index.html new file mode 100644 index 0000000..977c779 --- /dev/null +++ b/Docs/index.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Index + + + +

Commands

+

Constructable Objects

+

Speech Keywords

+

Body List

+

Class Overview

+

Bulk Order Rewards: Smithing

+

Bulk Order Rewards: Tailoring

+ + diff --git a/Docs/keywords.html b/Docs/keywords.html new file mode 100644 index 0000000..7722905 --- /dev/null +++ b/Docs/keywords.html @@ -0,0 +1,392 @@ + + + RunUO Documentation - Speech Keywords + + + +

Back to the index

+

Speech Keywords

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NumberText
0x0000*withdraw*
*withdrawl*
0x0001*balance*
*statement*
0x0002*bank*
0x0003*check*
0x0004*join*
*member*
0x0005*quit*
*resign*
0x0006*guild*
*guilds*
0x0007*guard*
*guards*
0x0008*stable*
0x0009*claim*
0x000A*job*
0x000B*dock*
0x000C*servant*
*serve*
*slave*
0x000D*agreed*
0x000E*quest*
0x000F*hunt*
*track*
*tracking*
0x0010*dragon*
0x0011*nay*
*no*
*nope*
0x0012*aye*
*yea*
*yes*
*yup*
0x0013*slay*
0x0014*hammer*
0x0015*longsword*
*sword*
0x0016*assistance*
*help*
0x0017*enchanted*
*glass*
0x0018make*
0x0019addtime*
0x001Agettime*
0x001B*hint*
0x001C*test*
0x001D*destination*
0x001E*i will take thee*
0x001F*disguise*
0x0020*virtue guard*
0x0021*order shield*
0x0022*chaos shield*
0x0023*i wish to lock this down*
0x0024*i wish to release this*
0x0025*i wish to secure this*
0x0026*i wish to unsecure this*
0x0027*i wish to place a strongbox*
0x0028*i wish to place a trash barrel*
0x0029*showthelist*
0x002A*i resign from my guild*
0x002Bset*
0x002Craise*
0x002Ddrop*
0x002E*abracadabra*
0x002F*shazam*
0x0030*news*
0x0031*i honor thee*
0x0032*i must consider my sins*
0x0033*remove thyself*
0x0034*i ban thee*
0x0035i renounce my young player status*
0x0036stop
0x0037resetme
0x0038*appraise*
0x0039reset
0x003Ahint
0x003Bgreetings
hail
hello
hey
yo
0x003C*vendor buy*
vendor purchase
0x003Dvendor browse
vendor look
vendor view
0x003Evendor collect
vendor get
vendor gold
0x003Fvendor info
vendor status
0x0040vendor dismiss
vendor replace
0x0041vendor cycle
0x0042set name*
0x0043remove name
0x0044name
0x0045forward
0x0046back
backward
backwards
0x0047drift left
left
0x0048drift right
right
0x0049starboard
0x004Aport
0x004Bforward left
0x004Cforward right
0x004Dback left
backward left
backwards left
0x004Eback right
backward right
backwards right
0x004Fstop
0x0050slow left
0x0051slow right
0x0052slow forward
0x0053slow back
slow backward
slow backwards
0x0054slow forward left
0x0055slow forward right
0x0056slow back right
slow backward right
slow backwards right
0x0057slow back left
slow backward left
slow backwards left
0x0058left one
one left
0x0059one right
right one
0x005Aforward one
one forward
0x005Bback one
backward one
backwards one
one back
one backward
one backwards
0x005Cforward left one
one forward left
0x005Dforward right one
one forward right
0x005Eback right one
backward right one
backwards right one
one back right
one backward right
one backwards right
0x005Fback left one
backward left one
backwards left one
one back left
one backward left
one backwards left
0x0060nav
0x0061start
0x0062continue
0x0063goto*
0x0064single*
0x0065turn right
0x0066turn left
0x0067come about
turn around
0x0068unfurl sail
0x0069furl sail
0x006Adrop anchor
lower anchor
0x006Bhoist anchor
lift anchor
raise anchor
0x006C*train
0x006D*train battle
*train defense
*train parry
*train parrying
0x006E*train aid
*train first*
*train heal
*train healing*
*train medicine
0x006F*train hide
*train hiding*
0x0070*train steal
*train stealing
0x0071*train alchemy
0x0072*train animal
*train lore
0x0073*train appraise
*train appraising*
*train identification
*train identify
*train identifying*
*train item
0x0074*train arms
*train armslore
0x0075*train beg
*train begging
0x0076*train blacksmith
*train blacksmithing
*train blacksmithy
*train smith
*train smithing
0x0077*train arrow
*train bow
*train bowcraft*
*train bower
*train fletcher
*train fletching*
0x0078*train calm
*train peace
*train peacemaking
0x0079*train camp
*train camping
0x007A*train carpentry
*train woodwork
*train woodworking
0x007B*train cartography
*train map
*train mapmaking
0x007C*train cook
*train cooking
0x007D*train detect
*train detecting hidden*
*train hidden
0x007E*train entice
*train enticement
*train enticing
0x007F*train evaluate*
*train evaluating*
*train intelligence
0x0080*train fish
*train fishing
0x0081*train incite
*train provocation
*train provoke
*train provoking
0x0082*train lock
*train lockpicking
*train locks
*train pick
*train picking
0x0083*train mage
*train magery
*train magic
*train sorcery
*train wizard
*train wizardry
0x0084*train resist*
*train resisting*
*train spells
0x0085*train battle
*train fight
*train fighting
*train tactic
*train tactics
0x0086*train peek
*train peeking
*train snoop
*train snooping
0x0087*train disarm
*train disarming
*train remove
*train removing
0x0088*train instrument
*train music
*train musician
*train musicianship
*train play
*train playing
0x0089*train poison
*train poisoning
0x008A*train archer
*train archery
*train missile
*train missiles
*train ranged
*train shoot
*train shooting
0x008B*train ghost
*train seance
*train spirit*
*train spiritualism
0x008C*train clothier
*train tailor
*train tailoring
0x008D*train tame
*train taming
0x008E*train taste
*train tasting
0x008F*train tinker
*train tinkering
0x0090*train vet
*train veterinarian
*train veterinary
0x0091*train forensic
*train forensics
0x0092*train herd
*train herding
0x0093*train hunt
*train hunting
*train track
*train tracking*
0x0094*train stealth
0x0095*train inscribe
*train inscribing*
*train inscription
*train scroll
0x0096*train blade
*train blades
*train sword
*train swords
*train swordsman
*train swordsmanship
0x0097*train club
*train clubs
*train mace
*train maces
0x0098*train dagger
*train daggers
*train fence
*train fencing
*train spear
0x0099*train hand
*train wrestle
*train wrestling
0x009A*train lumberjack
*train lumberjacking
*train woodcutting
0x009B*train mine
*train mining
*train smelt
0x009C*train meditate
*train meditation
0x009D*move*
0x009E*time*
0x009F*where is the shrine*
0x00A0*where is abbey*
*where is empath*
0x00A1*where is britain*
0x00A2*where is buccaneer*
*where is den*
0x00A3*where is jhelom*
0x00A4*where is magincia*
0x00A5*where is vesper*
0x00A6*where is minoc*
0x00A7*where is moonglow*
0x00A8*where is nujel*
0x00A9*where is ocllo*
0x00AA*where is serpent*
0x00AB*where is skara*
0x00AC*where is trinsic*
0x00AD*where is yew*
0x00AE*where is cove*
0x00AF*where is the woodworker*
0x00B0*where is the alchemist*
0x00B1*where is the animal*
0x00B2*where is the armorer*
0x00B3*where is the artisan*
0x00B4*where is the baker*
0x00B5*where is the bank*
0x00B6*where is the bard*
0x00B7*where is the bath*
0x00B8*where is the beekeeper*
0x00B9*where is the smith*
0x00BA*where is the blackthorn*
0x00BB*where is the bowyer*
0x00BC*where is the butcher*
0x00BD*where is the carpenter*
0x00BE*where is the casino*
0x00BF*where is the cemetery*
0x00C0*where is the clothier*
0x00C1*where is the cobbler*
0x00C2*where is the court*
0x00C3*where is the customs*
0x00C4*where is the dock*
0x00C5*where is the duel*
0x00C6*where is the farm*
0x00C7*where is the fish*
0x00C8*where is the glassblower*
0x00C9*where is the gypsy*
0x00CA*where is the healer*
0x00CB*where is the herbalist*
0x00CC*where is the hostel*
*where is the inn*
0x00CD*where is the jail*
0x00CE*where is the jeweler*
0x00CF*where is the castle*
0x00D0*where is the library*
0x00D1*where is the lighthouse*
0x00D2*where is the mage*
0x00D3*where is the magic*
0x00D4*where is the merchant*
0x00D5*where is the mill*
0x00D6*where is the observatory*
0x00D7*where is the painter*
0x00D8*where is the paladin*
0x00D9*where is the provisioner*
*where is the shop*
0x00DA*where is the ship*
0x00DB*where is the stable*
0x00DC*where is the tanner*
0x00DD*where is the bard*
*where is the pub*
*where is the tavern*
0x00DE*where is the temple*
0x00DF*where is the theater*
0x00E0*where is the tinker*
0x00E1*where is the vet*
*where is the veterinarian*
0x00E2*where is the weapon*
0x00E3*where is the *trainer*
0x00E4*i wish to access the city treasury*
0x00E5*i wish to resign as finance minister*
0x00E6*orders*
0x00E7*patrol*
0x00E8*follow*
0x00E9*what is my faction term status*
0x00EA*message faction*
0x00EB*message all*
0x00EC*showscore*
0x00EDi am sheriff*
0x00EE*i wish to resign as sheriff*
0x00EF*you are fired*
0x00F0*need help*
0x00F1*hiring*
0x00F2*hire me*
0x00F3*a job*
0x00F4*i resign from my quest*
0x00F5*enter tutorial*
0x00F6*enter haven*
0x00F7*skill*
0x00F8*job*
*occupation*
*profession*
*what do you do*
0x00F9*trainer*
0x00FA*bye*
*farewell*
*see ya*
0x00FB*thou need*
*thou needs*
*thou want*
*you need*
*you require*
*you want*
0x00FC*are you well*
*art thou well*
*how are you*
*how art thou*
0x00FD*colony*
0x00FE*thou sale*
*thou sell*
*you sale*
*you sell*
0x00FF*purchase
*sale*
*you buy*
*you purchase*
0x0100*crypt*
*graves*
*graveyard*
*skeleton*
*undead*
0x0101*sweet dreams*
0x0102*river*
0x0103*king*
*lb*
*lord british*
*ruler*
0x0104*wayfareres inn*
*wayfarer's inn*
0x0105*moat*
0x0106*narrows neck*
*narrows*
*neck*
0x0107*poor gate*
0x0108*brittany river*
0x0109*blue boar*
0x010A*cat's lair*
0x010B*salty dog*
0x010C*unicorn horn*
0x010D*mechanism*
0x010E*main gate*
0x010F*northside*
0x0110*oaken oar*
0x0111*ocean*
*waterfront*
0x0112*old keep*
0x0113*gate*
0x0114*guard house*
*guardhouse*
0x0115*heal*
0x0116*orc*
0x0117*wall*
0x0118*incantations*
0x0119*bridge*
0x011A*mage's bridge*
0x011B*cypress bridge*
0x011C*northern bridge*
0x011D*great northern*
0x011E*great bridge*
0x011F*gung-farmer*
0x0120*gung farmer*
0x0121*river's gate*
0x0122*lost*
*where am i*
0x0123*sage advice*
0x0124*sorcerer's delight*
0x0125*dummies*
*dummy*
*training dummies*
*training dummy*
0x0126*weather*
0x0127*bedroll*
0x0128*dupre*
0x0129*thou live*
*what city are you from*
*what town are you from*
*where thou from*
*where thou live*
*where you from*
*where you live*
*you live*
0x012A*earn money*
*get money*
*make money*
0x012B*where thou work*
*where you work*
0x012C*how quit*
*log off*
*logoff*
0x012D*lolo*
0x012E*camp*
0x012F*covetous*
*deceit*
*despise*
*destard*
*hythloth*
*shame*
*wrong*
0x0130*shamino*
0x0131*knights*
*order of the silver serpent*
0x0132*moons*
0x0133*compassion*
*courage*
*honesty*
*honor*
*humility*
*justice*
*love*
*sacrifice*
*shrine*
*spirituality*
*truth*
*valor*
*virtue*
0x0134*gold*
*treasure*
0x0135*kindling*
0x0136*moongates*
0x0137*robere*
0x0138*lord robere*
0x0139*concerns*
*troubles*
0x013A*avatar*
0x013B*axe*
*hammer*
*mace*
*sword*
*weapon*
0x013C*city hall*
*town hall*
0x013D*house of parliment*
0x013E*town square*
0x013F*new magincia*
0x0140*merchant guild*
0x0141*miner guild*
0x0142*pirate*
0x0143*zoo*
0x0144*lycaeum*
0x0145*scholar*
0x0146*reagent*
0x0147*teleporter*
0x0148*gadget*
0x0149*silver bow*
0x014A*mystical spirit*
0x014B*engineers guild*
0x014C*sea guild*
0x014D*vendor sell*
0x014E*i wish to cross*
0x014F*where is the miner*
0x0150*where is the woodsman*
0x0151*where is the mapmaker*
0x0152*where is the thief*
0x0153*where is the tailor*
0x0154*train anatomy
0x0155*come
0x0156*drop
0x0157*fetch
0x0158*get
0x0159*bring
0x015A*follow
0x015B*friend
0x015C*guard
0x015D*kill
0x015E*attack
0x015F*patrol
0x0160*report
0x0161*stop
0x0162*hire
0x0163*follow me
0x0164all come
0x0165all follow
0x0166all guard
0x0167all stop
0x0168all kill
0x0169all attack
0x016Aall report
0x016Ball guard me
0x016Call follow me
0x016D*release
0x016E*transfer
0x016F*stay
0x0170all stay
0x0171*buy*
0x0172*browse
*look
*view
0x0173*collect
0x0174*info*
*status*
0x0175*dismiss
*replace
0x0176*cycle
0x0177*sell*
0x0178i honor your leadership
+ + diff --git a/Docs/namespaces/Server.Accounting.html b/Docs/namespaces/Server.Accounting.html new file mode 100644 index 0000000..d088802 --- /dev/null +++ b/Docs/namespaces/Server.Accounting.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Server.Accounting + + +

Back to the namespace index

+

Server.Accounting

+ Account
+ AccountAttackLimiter
+ AccountComment
+ Accounts
+ AccountTag
+ IAccount
+ InvalidAccountAccessLog
+ + diff --git a/Docs/namespaces/Server.Chat.html b/Docs/namespaces/Server.Chat.html new file mode 100644 index 0000000..d3a49e1 --- /dev/null +++ b/Docs/namespaces/Server.Chat.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Server.Chat + + +

Back to the namespace index

+

Server.Chat

+ ChatSystem
+ + diff --git a/Docs/namespaces/Server.Commands.Generic.html b/Docs/namespaces/Server.Commands.Generic.html new file mode 100644 index 0000000..3df9824 --- /dev/null +++ b/Docs/namespaces/Server.Commands.Generic.html @@ -0,0 +1,71 @@ + + + RunUO Documentation - Class Overview - Server.Commands.Generic + + +

Back to the namespace index

+

Server.Commands.Generic

+ AddCommand
+ AddToPackCommand
+ AliasedSetCommand
+ AreaCommandImplementor
+ BaseCommand
+ BaseCommandImplementor
+ BaseExtension
+ BringToPackCommand
+ CommandSupport
+ ComparisonCondition
+ ComparisonOperator
+ ConditionalCompiler
+ ConditionCommand
+ ContainedCommandImplementor
+ CountCommand
+ DeleteCommand
+ DismountCommand
+ DistinctCompiler
+ DistinctExtension
+ ExtensionConstructor
+ ExtensionInfo
+ Extensions
+ FirewallCommand
+ GetCommand
+ GetTypeCommand
+ GlobalCommandImplementor
+ HideCommand
+ ICondition
+ IConditional
+ IncreaseCommand
+ InterfaceCommand
+ InterfaceGump
+ InterfaceItemGump
+ InterfaceMobileGump
+ KickCommand
+ KillCommand
+ LimitExtension
+ MultiCommandImplementor
+ ObjectConditional
+ ObjectTypes
+ OnlineCommandImplementor
+ OpenBrowserCommand
+ OrderInfo
+ PrivSoundCommand
+ PropertyCondition
+ PropertyValue
+ RefreshHouseCommand
+ RegionCommandImplementor
+ RestockCommand
+ SelfCommandImplementor
+ SerialCommandImplementor
+ SetCommand
+ SingleCommandImplementor
+ SortCompiler
+ SortExtension
+ StringCondition
+ StringOperator
+ TargetCommands
+ TeleCommand
+ TellCommand
+ TypeCondition
+ WhereExtension
+ + diff --git a/Docs/namespaces/Server.Commands.html b/Docs/namespaces/Server.Commands.html new file mode 100644 index 0000000..d76a075 --- /dev/null +++ b/Docs/namespaces/Server.Commands.html @@ -0,0 +1,49 @@ + + + RunUO Documentation - Class Overview - Server.Commands + + +

Back to the namespace index

+

Server.Commands

+ Add
+ Batch
+ BatchCommand
+ BatchGump
+ BatchScopeGump
+ BodyEntry
+ BodyEntrySorter
+ Categorization
+ CategoryEntry
+ CategoryLine
+ CategorySorter
+ CategoryTypeEntry
+ CommandEntry
+ CommandEventArgs
+ CommandEventHandler
+ CommandHandlers
+ CommandLogging
+ CommandSystem
+ ConvertPlayers
+ Decorate
+ DecorateMag
+ DecorationEntry
+ DecorationEntryMag
+ DecorationList
+ DecorationListMag
+ Docs
+ Dupe
+ ExportCommand
+ GenKhaldun
+ GenTeleporter
+ HelpInfo
+ ModelBodyType
+ Profiling
+ Properties
+ PropertyAccess
+ SignParser
+ Skills
+ SkillsCommand
+ VisibilityList
+ Wipe
+ + diff --git a/Docs/namespaces/Server.ContextMenus.html b/Docs/namespaces/Server.ContextMenus.html new file mode 100644 index 0000000..a88b4cf --- /dev/null +++ b/Docs/namespaces/Server.ContextMenus.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Server.ContextMenus + + +

Back to the namespace index

+

Server.ContextMenus

+ AddToPartyEntry
+ AddToSpellbookEntry
+ ContextMenu
+ ContextMenuEntry
+ EatEntry
+ EjectPlayerEntry
+ OpenBackpackEntry
+ OpenBankEntry
+ PaperdollEntry
+ RemoveFromPartyEntry
+ TeachEntry
+ VendorBuyEntry
+ VendorSellEntry
+ + diff --git a/Docs/namespaces/Server.Diagnostics.html b/Docs/namespaces/Server.Diagnostics.html new file mode 100644 index 0000000..4b95b57 --- /dev/null +++ b/Docs/namespaces/Server.Diagnostics.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Server.Diagnostics + + +

Back to the namespace index

+

Server.Diagnostics

+ BasePacketProfile
+ BaseProfile
+ GumpProfile
+ PacketReceiveProfile
+ PacketSendProfile
+ TargetProfile
+ TimerProfile
+ + diff --git a/Docs/namespaces/Server.Engines.BulkOrders.html b/Docs/namespaces/Server.Engines.BulkOrders.html new file mode 100644 index 0000000..6258c4c --- /dev/null +++ b/Docs/namespaces/Server.Engines.BulkOrders.html @@ -0,0 +1,42 @@ + + + RunUO Documentation - Class Overview - Server.Engines.BulkOrders + + +

Back to the namespace index

+

Server.Engines.BulkOrders

+ BGTClassifier
+ BOBFilter
+ BOBFilterGump
+ BOBGump
+ BOBLargeEntry
+ BOBLargeSubEntry
+ BOBSmallEntry
+ BODBuyGump
+ BODType
+ BulkGenericType
+ BulkMaterialType
+ BulkOrderBook
+ ConstructCallback
+ LargeBOD
+ LargeBODAcceptGump
+ LargeBODGump
+ LargeBODTarget
+ LargeBulkEntry
+ LargeSmithBOD
+ LargeTailorBOD
+ RewardCalculator
+ RewardGroup
+ RewardItem
+ RewardType
+ SmallBOD
+ SmallBODAcceptGump
+ SmallBODGump
+ SmallBODTarget
+ SmallBulkEntry
+ SmallSmithBOD
+ SmallTailorBOD
+ SmithRewardCalculator
+ TailorRewardCalculator
+ + diff --git a/Docs/namespaces/Server.Engines.CannedEvil.html b/Docs/namespaces/Server.Engines.CannedEvil.html new file mode 100644 index 0000000..4fcd231 --- /dev/null +++ b/Docs/namespaces/Server.Engines.CannedEvil.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Server.Engines.CannedEvil + + +

Back to the namespace index

+

Server.Engines.CannedEvil

+ ChampionAltar
+ ChampionPlatform
+ ChampionSkullBrazier
+ ChampionSkullPlatform
+ ChampionSkullType
+ ChampionSpawn
+ ChampionSpawnInfo
+ ChampionSpawnRegion
+ ChampionSpawnType
+ IdolOfTheChampion
+ RestartTimer
+ SliceTimer
+ + diff --git a/Docs/namespaces/Server.Engines.Chat.html b/Docs/namespaces/Server.Engines.Chat.html new file mode 100644 index 0000000..8b2b1fa --- /dev/null +++ b/Docs/namespaces/Server.Engines.Chat.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Chat + + +

Back to the namespace index

+

Server.Engines.Chat

+ Channel
+ ChatActionHandler
+ ChatActionHandlers
+ ChatCommand
+ ChatMessagePacket
+ ChatSystem
+ ChatUser
+ OnChatAction
+ + diff --git a/Docs/namespaces/Server.Engines.Craft.html b/Docs/namespaces/Server.Engines.Craft.html new file mode 100644 index 0000000..723996d --- /dev/null +++ b/Docs/namespaces/Server.Engines.Craft.html @@ -0,0 +1,53 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Craft + + +

Back to the namespace index

+

Server.Engines.Craft

+ AnvilAttribute
+ ConsumeType
+ CraftContext
+ CraftECA
+ CraftGroup
+ CraftGroupCol
+ CraftGump
+ CraftGumpItem
+ CraftItem
+ CraftItemCol
+ CraftItemIDAttribute
+ CraftMarkOption
+ CraftRes
+ CraftResCol
+ CraftSkill
+ CraftSkillCol
+ CraftSubRes
+ CraftSubResCol
+ CraftSystem
+ CustomCraft
+ DartTrapCraft
+ DefAlchemy
+ DefBlacksmithy
+ DefBowFletching
+ DefCarpentry
+ DefCartography
+ DefCooking
+ DefGlassblowing
+ DefInscription
+ DefMasonry
+ DefTailoring
+ DefTinkering
+ Enhance
+ EnhanceResult
+ ExplosionTrapCraft
+ ForgeAttribute
+ ICraftable
+ PoisonTrapCraft
+ QueryMakersMarkGump
+ Recipe
+ Repair
+ Resmelt
+ SmeltResult
+ TrapCraft
+ + diff --git a/Docs/namespaces/Server.Engines.Doom.html b/Docs/namespaces/Server.Engines.Doom.html new file mode 100644 index 0000000..32e3e1f --- /dev/null +++ b/Docs/namespaces/Server.Engines.Doom.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Doom + + +

Back to the namespace index

+

Server.Engines.Doom

+ GauntletRegion
+ GauntletSpawner
+ GauntletSpawnerState
+ LampRoomBox
+ LampRoomRegion
+ LampRoomTeleporter
+ LeverPuzzleController
+ LeverPuzzleLever
+ LeverPuzzleRegion
+ LeverPuzzleStatue
+ + diff --git a/Docs/namespaces/Server.Engines.Harvest.html b/Docs/namespaces/Server.Engines.Harvest.html new file mode 100644 index 0000000..89add4d --- /dev/null +++ b/Docs/namespaces/Server.Engines.Harvest.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Harvest + + +

Back to the namespace index

+

Server.Engines.Harvest

+ BonusHarvestResource
+ Fishing
+ HarvestBank
+ HarvestDefinition
+ HarvestResource
+ HarvestSoundTimer
+ HarvestSystem
+ HarvestTarget
+ HarvestTimer
+ HarvestVein
+ Lumberjacking
+ Mining
+ + diff --git a/Docs/namespaces/Server.Engines.Help.html b/Docs/namespaces/Server.Engines.Help.html new file mode 100644 index 0000000..303ab5d --- /dev/null +++ b/Docs/namespaces/Server.Engines.Help.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Help + + +

Back to the namespace index

+

Server.Engines.Help

+ ContainedMenu
+ HelpGump
+ MessageSentGump
+ PageEntry
+ PageEntryGump
+ PagePrompt
+ PagePromptGump
+ PageQueue
+ PageQueueGump
+ PageResponseGump
+ PageType
+ PredefGump
+ PredefinedResponse
+ SpeechLog
+ SpeechLogEntry
+ SpeechLogGump
+ + diff --git a/Docs/namespaces/Server.Engines.Mahjong.html b/Docs/namespaces/Server.Engines.Mahjong.html new file mode 100644 index 0000000..39c881a --- /dev/null +++ b/Docs/namespaces/Server.Engines.Mahjong.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Mahjong + + +

Back to the namespace index

+

Server.Engines.Mahjong

+ MahjongDealerIndicator
+ MahjongDices
+ MahjongGame
+ MahjongGeneralInfo
+ MahjongJoinGame
+ MahjongPacketHandlers
+ MahjongPieceDim
+ MahjongPieceDirection
+ MahjongPlayers
+ MahjongPlayersInfo
+ MahjongRelieve
+ MahjongTile
+ MahjongTileInfo
+ MahjongTilesInfo
+ MahjongTileType
+ MahjongTileTypeGenerator
+ MahjongWallBreakIndicator
+ MahjongWind
+ OnMahjongPacketReceive
+ + diff --git a/Docs/namespaces/Server.Engines.MyRunUO.html b/Docs/namespaces/Server.Engines.MyRunUO.html new file mode 100644 index 0000000..9741cc1 --- /dev/null +++ b/Docs/namespaces/Server.Engines.MyRunUO.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Server.Engines.MyRunUO + + +

Back to the namespace index

+

Server.Engines.MyRunUO

+ Config
+ DatabaseCommandQueue
+ LayerComparer
+ MyRunUO
+ MyRunUOStatus
+ + diff --git a/Docs/namespaces/Server.Engines.PartySystem.html b/Docs/namespaces/Server.Engines.PartySystem.html new file mode 100644 index 0000000..bd421ba --- /dev/null +++ b/Docs/namespaces/Server.Engines.PartySystem.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Server.Engines.PartySystem + + +

Back to the namespace index

+

Server.Engines.PartySystem

+ AddPartyTarget
+ DeclineTimer
+ Party
+ PartyCommandHandlers
+ PartyEmptyList
+ PartyInvitation
+ PartyMemberInfo
+ PartyMemberList
+ PartyRemoveMember
+ PartyTextMessage
+ RemovePartyTarget
+ + diff --git a/Docs/namespaces/Server.Engines.Plants.html b/Docs/namespaces/Server.Engines.Plants.html new file mode 100644 index 0000000..e51c14e --- /dev/null +++ b/Docs/namespaces/Server.Engines.Plants.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Plants + + +

Back to the namespace index

+

Server.Engines.Plants

+ EmptyTheBowlGump
+ MainPlantGump
+ PlantBowl
+ PlantGrowthIndicator
+ PlantHealth
+ PlantHue
+ PlantHueInfo
+ PlantItem
+ PlantPourTarget
+ PlantResourceInfo
+ PlantStatus
+ PlantSystem
+ PlantType
+ PlantTypeInfo
+ PollinateTarget
+ ReproductionGump
+ Seed
+ SetToDecorativeGump
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Ambitious.html b/Docs/namespaces/Server.Engines.Quests.Ambitious.html new file mode 100644 index 0000000..038bf13 --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Ambitious.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Ambitious + + +

Back to the namespace index

+

Server.Engines.Quests.Ambitious

+ AcceptConversation
+ AmbitiousQueenQuest
+ BaseAmbitiousSolenQueen
+ BlackAmbitiousSolenQueen
+ DontOfferConversation
+ DuringFungiGatheringConversation
+ DuringKillQueensConversation
+ End2Conversation
+ EndConversation
+ FullBackpackConversation
+ GatherFungiConversation
+ GatherFungiObjective
+ GetRewardObjective
+ KillQueensObjective
+ RedAmbitiousSolenQueen
+ ReturnAfterKillsObjective
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Collector.html b/Docs/namespaces/Server.Engines.Quests.Collector.html new file mode 100644 index 0000000..ef570ca --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Collector.html @@ -0,0 +1,67 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Collector + + +

Back to the namespace index

+

Server.Engines.Quests.Collector

+ AcceptConversation
+ AlbertaAfterPaintingConversation
+ AlbertaEndPaintingConversation
+ AlbertaGiacco
+ AlbertaPaintingConversation
+ AlbertaStoolConversation
+ CaptureImagesObjective
+ CaptureResponse
+ CollectorQuest
+ DeclineConversation
+ DontOfferConversation
+ ElwoodDuringAutograph1Conversation
+ ElwoodDuringAutograph2Conversation
+ ElwoodDuringAutograph3Conversation
+ ElwoodDuringFishConversation
+ ElwoodDuringPainting1Conversation
+ ElwoodDuringPainting2Conversation
+ ElwoodDuringToys1Conversation
+ ElwoodDuringToys2Conversation
+ ElwoodDuringToys3Conversation
+ ElwoodMcCarrin
+ EnchantedPaints
+ EndConversation
+ FindAlbertaObjective
+ FindGabrielObjective
+ FindSheetMusicObjective
+ FindTomasObjective
+ FishPearlsObjective
+ FullEndConversation
+ GabrielAutographConversation
+ GabrielIgnoreConversation
+ GabrielNoSheetMusicConversation
+ GabrielPiete
+ GabrielSheetMusicConversation
+ GetSheetMusicConversation
+ ImageType
+ ImageTypeInfo
+ Impresario
+ MakeRoomObjective
+ NoSheetMusicConversation
+ Obsidian
+ PaintedImage
+ ReturnAutographConversation
+ ReturnAutographObjective
+ ReturnImagesConversation
+ ReturnImagesObjective
+ ReturnPaintingConversation
+ ReturnPaintingObjective
+ ReturnPearlsConversation
+ ReturnPearlsObjective
+ ReturnSheetMusicObjective
+ ReturnToysObjective
+ SheetMusicOfferGump
+ SitOnTheStoolObjective
+ Theater
+ TomasDuringCollectingConversation
+ TomasONeerlan
+ TomasToysConversation
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Doom.html b/Docs/namespaces/Server.Engines.Quests.Doom.html new file mode 100644 index 0000000..fcf2bc4 --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Doom.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Doom + + +

Back to the namespace index

+

Server.Engines.Quests.Doom

+ AcceptConversation
+ BellOfTheDead
+ Chyloth
+ ChylothPartyGump
+ ChylothShroud
+ ChylothStaff
+ CollectBonesObjective
+ GoldenSkull
+ GrandGrimoire
+ SummoningAltar
+ TheSummoningQuest
+ VanquishDaemonConversation
+ VanquishDaemonObjective
+ Victoria
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Hag.html b/Docs/namespaces/Server.Engines.Quests.Hag.html new file mode 100644 index 0000000..f903c93 --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Hag.html @@ -0,0 +1,41 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Hag + + +

Back to the namespace index

+

Server.Engines.Quests.Hag

+ AcceptConversation
+ ApprenticeCorpseConversation
+ Blackheart
+ BlackheartFirstConversation
+ BlackheartNoPirateConversation
+ BlackheartPirateConversation
+ DontOfferConversation
+ EndConversation
+ FindApprenticeObjective
+ FindGrizeldaAboutMurderObjective
+ FindIngredientObjective
+ FindZeefzorpulObjective
+ Grizelda
+ HagApprenticeCorpse
+ HagDuringCorpseSearchConversation
+ HagDuringImpSearchConversation
+ HagDuringIngredientsConversation
+ HangoverCure
+ ImpDeathConversation
+ Ingredient
+ IngredientInfo
+ KillImpsObjective
+ MagicFlute
+ MoonfireBrew
+ MurderConversation
+ RecentlyFinishedConversation
+ RecipeConversation
+ ReturnIngredientsObjective
+ ReturnRecipeObjective
+ WitchApprenticeQuest
+ Zeefzorpul
+ ZeefzorpulConversation
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Haven.html b/Docs/namespaces/Server.Engines.Quests.Haven.html new file mode 100644 index 0000000..52c8cdc --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Haven.html @@ -0,0 +1,63 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Haven + + +

Back to the namespace index

+

Server.Engines.Quests.Haven

+ AcceptConversation
+ BankerConversation
+ Cannon
+ CannonComponent
+ CannonDirection
+ CashBankCheckObjective
+ DaemonBloodChest
+ Dryad
+ DryadAppleConversation
+ DryadConversation
+ FewReagentsConversation
+ FindApprenticeObjective
+ FindDryadObjective
+ FindSchmendrickObjective
+ FindUzeraanAboutReportObjective
+ FindUzeraanBeginObjective
+ FindUzeraanFirstTaskObjective
+ GetDaemonBloodObjective
+ GetDaemonBoneObjective
+ KillHordeMinionsObjective
+ KillHordeMinionsStep
+ LostDaemonBloodConversation
+ LostDaemonBoneConversation
+ LostFertileDirtConversation
+ LostScrollOfPowerConversation
+ MansionGuard
+ MilitiaCanoneer
+ MilitiaFighter
+ MilitiaFighterCorpse
+ QuestDaemonBlood
+ QuestDaemonBone
+ QuestFertileDirt
+ RadarConversation
+ ReturnDaemonBloodObjective
+ ReturnDaemonBoneObjective
+ ReturnFertileDirtObjective
+ ReturnScrollOfPowerObjective
+ SBDryad
+ Schmendrick
+ SchmendrickApprenticeCorpse
+ SchmendrickConversation
+ SchmendrickScrollOfPower
+ TitheGoldObjective
+ Uzeraan
+ UzeraanDaemonBloodConversation
+ UzeraanDaemonBoneConversation
+ UzeraanFertileDirtConversation
+ UzeraanFirstTaskConversation
+ UzeraanReportConversation
+ UzeraanScrollOfPowerConversation
+ UzeraanTitheConversation
+ UzeraanTurmoilHorn
+ UzeraanTurmoilQuest
+ UzeraanTurmoilTeleporter
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Matriarch.html b/Docs/namespaces/Server.Engines.Quests.Matriarch.html new file mode 100644 index 0000000..f7d2100 --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Matriarch.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Matriarch + + +

Back to the namespace index

+

Server.Engines.Quests.Matriarch

+ AcceptConversation
+ BaseSolenMatriarch
+ BlackSolenMatriarch
+ DontOfferConversation
+ DuringFungiProcessConversation
+ DuringKillInfiltratorsConversation
+ DuringWaterGatheringConversation
+ EndConversation
+ FullBackpackConversation
+ GatherWaterConversation
+ GatherWaterObjective
+ GetRewardObjective
+ KillInfiltratorsObjective
+ ProcessFungiConversation
+ ProcessFungiObjective
+ RedSolenMatriarch
+ ReturnAfterKillsObjective
+ ReturnAfterWaterObjective
+ SolenMatriarchQuest
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Naturalist.html b/Docs/namespaces/Server.Engines.Quests.Naturalist.html new file mode 100644 index 0000000..b006a60 --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Naturalist.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Naturalist + + +

Back to the namespace index

+

Server.Engines.Quests.Naturalist

+ AcceptConversation
+ DontOfferConversation
+ EndConversation
+ FullBackpackConversation
+ Naturalist
+ NaturalistDuringStudyConversation
+ NestArea
+ ReturnToNaturalistObjective
+ SpecialEndConversation
+ StudyNestsObjective
+ StudyOfSolenQuest
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Necro.html b/Docs/namespaces/Server.Engines.Quests.Necro.html new file mode 100644 index 0000000..9ac67fb --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Necro.html @@ -0,0 +1,60 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Necro + + +

Back to the namespace index

+

Server.Engines.Quests.Necro

+ AcceptConversation
+ AnimateMaabusCorpseObjective
+ BankerConversation
+ CashBankCheckObjective
+ CrystalCaveBarrier
+ DarkTidesHorn
+ DarkTidesQuest
+ DarkTidesTeleporter
+ FetchAbraxusScrollObjective
+ FindBankObjective
+ FindCallingScrollObjective
+ FindCityOfLightObjective
+ FindCrystalCaveObjective
+ FindHorusAboutRewardObjective
+ FindMaabusCorpseObjective
+ FindMaabusTombObjective
+ FindMardothAboutKronusObjective
+ FindMardothAboutVaultObjective
+ FindMardothEndObjective
+ FindVaultOfSecretsObjective
+ FindWellOfTearsObjective
+ HealConversation
+ Horus
+ HorusConversation
+ HorusRewardConversation
+ KronusScroll
+ KronusScrollBox
+ LostCallingScrollConversation
+ MaabasConversation
+ Maabus
+ MaabusCoffin
+ MaabusCoffinComponent
+ Mardoth
+ MardothEndConversation
+ MardothKronusConversation
+ MardothVaultConversation
+ RadarConversation
+ ReadAbraxusScrollConversation
+ ReadAbraxusScrollObjective
+ ReanimateMaabusConversation
+ RetrieveAbraxusScrollObjective
+ ReturnToCrystalCaveObjective
+ ScrollOfAbraxus
+ ScrollOfAbraxusGump
+ SecondHorusConversation
+ SpeakCavePasswordObjective
+ SummonedPaladin
+ SummonedPaladinMoongate
+ UseCallingScrollObjective
+ VaultOfSecretsBarrier
+ VaultOfSecretsConversation
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Ninja.html b/Docs/namespaces/Server.Engines.Quests.Ninja.html new file mode 100644 index 0000000..53fc0a7 --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Ninja.html @@ -0,0 +1,56 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Ninja + + +

Back to the namespace index

+

Server.Engines.Quests.Ninja

+ AcceptConversation
+ BlueNinjaQuestTeleporter
+ ContinueSlayHenchmenConversation
+ EarnGiftsConversation
+ EarnLessGiftsConversation
+ Emino
+ EminosKatana
+ EminosKatanaChest
+ EminosUndertakingQuest
+ EnshroudedFigure
+ EnterCaveConversation
+ EnterCaveObjective
+ FindEminoBeginObjective
+ FindZoelConversation
+ FindZoelObjective
+ GainInnInformationConversation
+ GainInnInformationObjective
+ GiveEminoSwordConversation
+ GiveEminoSwordObjective
+ GiveZoelNoteConversation
+ GiveZoelNoteObjective
+ GreenNinjaQuestTeleporter
+ GuardianBarrier
+ HallwayWalkConversation
+ HallwayWalkObjective
+ Henchman
+ HiddenFigure
+ JedahEntille
+ LostNoteConversation
+ LostSwordConversation
+ NeedToHideConversation
+ NoteForZoel
+ RadarConversation
+ ReturnFromInnConversation
+ ReturnFromInnObjective
+ ReturnSwordConversation
+ ReturnSwordObjective
+ SearchForSwordConversation
+ SearchForSwordObjective
+ SlayHenchmenConversation
+ SlayHenchmenObjective
+ SneakPastGuardiansConversation
+ SneakPastGuardiansObjective
+ UseTeleporterConversation
+ UseTeleporterObjective
+ WhiteNinjaQuestTeleporter
+ Zoel
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Samurai.html b/Docs/namespaces/Server.Engines.Quests.Samurai.html new file mode 100644 index 0000000..b6fc2ca --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Samurai.html @@ -0,0 +1,60 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Samurai + + +

Back to the namespace index

+

Server.Engines.Quests.Samurai

+ AcceptConversation
+ CursedSoul
+ DeadlyImp
+ DiseasedCat
+ EndConversation
+ FierceDragon
+ FifthTrialIntroConversation
+ FifthTrialIntroObjective
+ FifthTrialReturnConversation
+ FifthTrialReturnObjective
+ FindHaochiObjective
+ FirstTrialIntroConversation
+ FirstTrialIntroObjective
+ FirstTrialKillConversation
+ FirstTrialKillObjective
+ FirstTrialReturnObjective
+ FourthTrialCatsConversation
+ FourthTrialCatsObjective
+ FourthTrialIntroConversation
+ FourthTrialIntroObjective
+ FourthTrialReturnObjective
+ GainKarmaConversation
+ Haochi
+ HaochisGuardsman
+ HaochisKatana
+ HaochisKatanaGenerator
+ HaochisTreasureChest
+ HaochisTrialsQuest
+ HonorCandle
+ InjuredWolf
+ LostSwordConversation
+ RadarConversation
+ Relnia
+ SecondTrialAttackConversation
+ SecondTrialAttackObjective
+ SecondTrialIntroConversation
+ SecondTrialIntroObjective
+ SecondTrialReturnObjective
+ SeventhTrialIntroConversation
+ SeventhTrialIntroObjective
+ SeventhTrialReturnObjective
+ SixthTrialIntroConversation
+ SixthTrialIntroObjective
+ SixthTrialReturnObjective
+ ThirdTrialIntroConversation
+ ThirdTrialIntroObjective
+ ThirdTrialKillConversation
+ ThirdTrialKillObjective
+ ThirdTrialReturnObjective
+ YoungNinja
+ YoungRonin
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.Zento.html b/Docs/namespaces/Server.Engines.Quests.Zento.html new file mode 100644 index 0000000..1595a1a --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.Zento.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests.Zento + + +

Back to the namespace index

+

Server.Engines.Quests.Zento

+ AcceptConversation
+ AnsellaGryen
+ DirectionConversation
+ EndConversation
+ FirstKillObjective
+ ReturnObjective
+ SecondKillObjective
+ TakeCareConversation
+ TerribleHatchlingsQuest
+ ThirdKillObjective
+ + diff --git a/Docs/namespaces/Server.Engines.Quests.html b/Docs/namespaces/Server.Engines.Quests.html new file mode 100644 index 0000000..99ca5b8 --- /dev/null +++ b/Docs/namespaces/Server.Engines.Quests.html @@ -0,0 +1,34 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Quests + + +

Back to the namespace index

+

Server.Engines.Quests

+ BaseQuester
+ BaseQuestGump
+ CancelQuestRegion
+ DynamicTeleporter
+ HornOfRetreat
+ HornOfRetreatMoongate
+ QuestCallback
+ QuestCallbackEntry
+ QuestCancelGump
+ QuestCompleteObjectiveRegion
+ QuestConversation
+ QuestConversationsGump
+ QuestItem
+ QuestItemInfo
+ QuestItemInfoGump
+ QuestLogUpdatedGump
+ QuestNoEntryRegion
+ QuestObjective
+ QuestObjectivesGump
+ QuestOfferGump
+ QuestOfferRegion
+ QuestRestartInfo
+ QuestSerializer
+ QuestSystem
+ TalkEntry
+ + diff --git a/Docs/namespaces/Server.Engines.Reports.html b/Docs/namespaces/Server.Engines.Reports.html new file mode 100644 index 0000000..803e296 --- /dev/null +++ b/Docs/namespaces/Server.Engines.Reports.html @@ -0,0 +1,53 @@ + + + RunUO Documentation - Class Overview - Server.Engines.Reports + + +

Back to the namespace index

+

Server.Engines.Reports

+ BarGraph
+ BarGraphRenderer
+ BarGraphRenderMode
+ BarRegion
+ BaseInfo
+ Chart
+ ChartItem
+ ChartItemCollection
+ ChartItemsCollection
+ ChartRenderer
+ ConstructCallback
+ DataItem
+ HtmlRenderer
+ ItemValue
+ ItemValueCollection
+ ObjectCollection
+ PageInfo
+ PageInfoCollection
+ PageResolution
+ PersistableObject
+ PersistableType
+ PersistableTypeRegistry
+ PersistanceReader
+ PersistanceWriter
+ PieChart
+ PieChartRenderer
+ QueueStatus
+ QueueStatusCollection
+ Report
+ ReportColumn
+ ReportColumnCollection
+ ReportItem
+ ReportItemCollection
+ Reports
+ ResponseInfo
+ ResponseInfoCollection
+ Snapshot
+ SnapshotCollection
+ SnapshotHistory
+ StaffHistory
+ StaffInfo
+ UserInfo
+ XmlPersistanceReader
+ XmlPersistanceWriter
+ + diff --git a/Docs/namespaces/Server.Engines.VeteranRewards.html b/Docs/namespaces/Server.Engines.VeteranRewards.html new file mode 100644 index 0000000..d566142 --- /dev/null +++ b/Docs/namespaces/Server.Engines.VeteranRewards.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Engines.VeteranRewards + + +

Back to the namespace index

+

Server.Engines.VeteranRewards

+ IRewardItem
+ RewardCategory
+ RewardChoiceGump
+ RewardConfirmGump
+ RewardEntry
+ RewardList
+ RewardNoticeGump
+ RewardSystem
+ + diff --git a/Docs/namespaces/Server.Ethics.Evil.html b/Docs/namespaces/Server.Ethics.Evil.html new file mode 100644 index 0000000..841aa5a --- /dev/null +++ b/Docs/namespaces/Server.Ethics.Evil.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Server.Ethics.Evil + + +

Back to the namespace index

+

Server.Ethics.Evil

+ Blight
+ EvilEthic
+ SummonFamiliar
+ UnholyItem
+ UnholySense
+ UnholyShield
+ UnholySteed
+ UnholyWord
+ VileBlade
+ + diff --git a/Docs/namespaces/Server.Ethics.Hero.html b/Docs/namespaces/Server.Ethics.Hero.html new file mode 100644 index 0000000..33b0ac5 --- /dev/null +++ b/Docs/namespaces/Server.Ethics.Hero.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Server.Ethics.Hero + + +

Back to the namespace index

+

Server.Ethics.Hero

+ Bless
+ HeroEthic
+ HolyBlade
+ HolyItem
+ HolySense
+ HolyShield
+ HolySteed
+ HolyWord
+ SummonFamiliar
+ + diff --git a/Docs/namespaces/Server.Ethics.html b/Docs/namespaces/Server.Ethics.html new file mode 100644 index 0000000..275e645 --- /dev/null +++ b/Docs/namespaces/Server.Ethics.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Server.Ethics + + +

Back to the namespace index

+

Server.Ethics

+ Ethic
+ EthicDefinition
+ EthicsPersistance
+ Player
+ PlayerCollection
+ Power
+ PowerDefinition
+ + diff --git a/Docs/namespaces/Server.Factions.AI.html b/Docs/namespaces/Server.Factions.AI.html new file mode 100644 index 0000000..d8fad5a --- /dev/null +++ b/Docs/namespaces/Server.Factions.AI.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Server.Factions.AI + + +

Back to the namespace index

+

Server.Factions.AI

+ MovementType
+ Orders
+ Reaction
+ ReactionType
+ + diff --git a/Docs/namespaces/Server.Factions.html b/Docs/namespaces/Server.Factions.html new file mode 100644 index 0000000..682794b --- /dev/null +++ b/Docs/namespaces/Server.Factions.html @@ -0,0 +1,113 @@ + + + RunUO Documentation - Class Overview - Server.Factions + + +

Back to the namespace index

+

Server.Factions

+ AllowedPlacing
+ BaseFactionGuard
+ BaseFactionTrap
+ BaseFactionTrapDeed
+ BaseFactionVendor
+ BaseMonolith
+ BaseSystemController
+ Britain
+ Candidate
+ ComboEntry
+ CouncilOfMages
+ Election
+ ElectionGump
+ ElectionManagementGump
+ ElectionState
+ Faction
+ FactionBerserker
+ FactionBoardVendor
+ FactionBottleVendor
+ FactionDeathKnight
+ FactionDefinition
+ FactionDragoon
+ FactionExplosionTrap
+ FactionExplosionTrapDeed
+ FactionGasTrap
+ FactionGasTrapDeed
+ FactionGuardAI
+ FactionGump
+ FactionHenchman
+ FactionHorseVendor
+ FactionImbueGump
+ FactionItem
+ FactionItemDefinition
+ FactionKickCommand
+ FactionKickType
+ FactionKnight
+ FactionMercenary
+ FactionNecromancer
+ FactionOreVendor
+ FactionPaladin
+ FactionPersistance
+ FactionReagentVendor
+ FactionSawTrap
+ FactionSawTrapDeed
+ FactionSorceress
+ FactionSpikeTrap
+ FactionSpikeTrapDeed
+ FactionState
+ FactionStone
+ FactionStoneGump
+ FactionTrapRemovalKit
+ FactionWarHorse
+ FactionWizard
+ FinanceGump
+ Generator
+ GuardAI
+ GuardDefinition
+ GuardList
+ HorseBreederGump
+ IFactionItem
+ JoinStone
+ JoinStoneGump
+ Keywords
+ LeaveFactionGump
+ Magincia
+ MerchantTitle
+ MerchantTitleInfo
+ MerchantTitles
+ Minax
+ Minoc
+ Moonglow
+ PlayerState
+ RankDefinition
+ Reflector
+ SBFactionBoard
+ SBFactionBottle
+ SBFactionOre
+ SBFactionReagent
+ Shadowlords
+ SheriffGump
+ Sigil
+ Silver
+ SilverGivenEntry
+ SkaraBrae
+ SpellCombo
+ StrongholdDefinition
+ StrongholdMonolith
+ StrongholdRegion
+ Town
+ TownDefinition
+ TownMonolith
+ TownState
+ TownStone
+ TownStoneGump
+ Trinsic
+ TrueBritannians
+ VendorDefinition
+ VendorList
+ Vesper
+ VirtualMount
+ VirtualMountItem
+ VoteGump
+ Voter
+ Yew
+ + diff --git a/Docs/namespaces/Server.Guilds.html b/Docs/namespaces/Server.Guilds.html new file mode 100644 index 0000000..2fee302 --- /dev/null +++ b/Docs/namespaces/Server.Guilds.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Server.Guilds + + +

Back to the namespace index

+

Server.Guilds

+ AllianceInfo
+ BaseGuild
+ BaseGuildGump
+ BaseGuildListGump<T>
+ CreateGuildGump
+ Guild
+ GuildAdvancedSearchGump
+ GuildDiplomacyGump
+ GuildDisplayType
+ GuildInfoGump
+ GuildInvitationRequest
+ GuildMemberInfoGump
+ GuildRosterGump
+ GuildType
+ InfoField<T>
+ OtherGuildInfo
+ RankDefinition
+ RankFlags
+ SearchSelectionCallback
+ WarDeclaration
+ WarDeclarationGump
+ WarStatus
+ WarTimer
+ + diff --git a/Docs/namespaces/Server.Gumps.html b/Docs/namespaces/Server.Gumps.html new file mode 100644 index 0000000..cd5d220 --- /dev/null +++ b/Docs/namespaces/Server.Gumps.html @@ -0,0 +1,150 @@ + + + RunUO Documentation - Class Overview - Server.Gumps + + +

Back to the namespace index

+

Server.Gumps

+ AddDoorGump
+ AddGump
+ AdminGump
+ AdminGumpPage
+ BanDurationGump
+ BaseConfirmGump
+ BaseGridGump
+ BaseImageTileButtonsGump
+ BaseVendorRentalGump
+ CAGCategory
+ CAGNode
+ CAGObject
+ CategorizedAddGump
+ CharacterStatueGump
+ ChildNode
+ ClientGump
+ ConfirmBreakCrystalGump
+ ConfirmHeritageGump
+ ConfirmHouseResize
+ ConfirmReleaseGump
+ DawnsMusicBoxGump
+ DeclareFealtyGump
+ DoorInfo
+ EditSkillGump
+ GoGump
+ GrantGuildTitleGump
+ GuildAbbrvPrompt
+ GuildAcceptWarGump
+ GuildAdminCandidatesGump
+ GuildCandidatesGump
+ GuildChangeTypeGump
+ GuildCharterGump
+ GuildCharterPrompt
+ GuildDeclarePeaceGump
+ GuildDeclareWarGump
+ GuildDeclareWarPrompt
+ GuildDismissGump
+ GuildGump
+ GuildListGump
+ GuildmasterGump
+ GuildMobileListGump
+ GuildNamePrompt
+ GuildRecruitTarget
+ GuildRejectWarGump
+ GuildRescindDeclarationGump
+ GuildRosterGump
+ GuildTitlePrompt
+ GuildWarAdminGump
+ GuildWarGump
+ GuildWebsitePrompt
+ Gump
+ GumpAlphaRegion
+ GumpBackground
+ GumpButton
+ GumpButtonType
+ GumpCheck
+ GumpEntry
+ GumpGroup
+ GumpHtml
+ GumpHtmlLocalized
+ GumpHtmlLocalizedType
+ GumpImage
+ GumpImageTileButton
+ GumpImageTiled
+ GumpItem
+ GumpLabel
+ GumpLabelCropped
+ GumpPage
+ GumpRadio
+ GumpTextEntry
+ GumpTextEntryLimited
+ GumpTooltip
+ HeritageTokenGump
+ HonorSelf
+ HouseDemolishGump
+ HouseGump
+ HouseGumpAOS
+ HouseGumpPageAOS
+ HouseListGump
+ HouseRaffleManagementGump
+ HouseRemoveGump
+ HouseTransferGump
+ ImageTileButtonInfo
+ IRewardOption
+ ISecurable
+ ItemTileButtonInfo
+ LandlordVendorRentalGump
+ LocationTree
+ NewPlayerVendorCustomizeGump
+ NewPlayerVendorOwnerGump
+ NewPolymorphGump
+ NoticeGump
+ NoticeGumpCallback
+ ParentNode
+ PetResurrectGump
+ PlayerVendorBuyGump
+ PlayerVendorCustomizeGump
+ PlayerVendorOwnerGump
+ PolymorphEntry
+ PolymorphGump
+ PropertiesGump
+ PropsConfig
+ ReclaimVendorGump
+ RelayInfo
+ RenounceYoungGump
+ RenterVendorRentalGump
+ ReportMurdererGump
+ ResurrectGump
+ ResurrectMessage
+ RewardDemolitionGump
+ RewardOption
+ RewardOptionGump
+ RewardOptionList
+ RunebookGump
+ SetBodyGump
+ SetCustomEnumGump
+ SetGump
+ SetListOptionGump
+ SetObjectGump
+ SetObjectTarget
+ SetPoint2DGump
+ SetPoint3DGump
+ SetSecureLevelGump
+ SetTimeSpanGump
+ SkillsGump
+ SkillsGumpGroup
+ TextRelay
+ TithingGump
+ ToTAdminGump
+ ToTRedeemGump
+ ToTTurnInGump
+ VendorInventoryGump
+ VendorRentalContractGump
+ VendorRentalOfferGump
+ VendorRentalRefundGump
+ ViewHousesGump
+ WarningGump
+ WarningGumpCallback
+ WhoGump
+ YoungDeathNotice
+ YoungDungeonWarning
+ + diff --git a/Docs/namespaces/Server.HuePickers.html b/Docs/namespaces/Server.HuePickers.html new file mode 100644 index 0000000..9a8fcd1 --- /dev/null +++ b/Docs/namespaces/Server.HuePickers.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Server.HuePickers + + +

Back to the namespace index

+

Server.HuePickers

+ HuePicker
+ + diff --git a/Docs/namespaces/Server.Items.html b/Docs/namespaces/Server.Items.html new file mode 100644 index 0000000..8efb1cb --- /dev/null +++ b/Docs/namespaces/Server.Items.html @@ -0,0 +1,2577 @@ + + + RunUO Documentation - Class Overview - Server.Items + + +

Back to the namespace index

+

Server.Items

+ AbbatoirAddon
+ AbbatoirDeed
+ AcidProofRobe
+ AcidSlime
+ AddonComponent
+ AddonContainerComponent
+ AddonFitResult
+ AdminRobe
+ AdmiralsHeartyRum
+ Aegis
+ AegisOfGrace
+ Afro
+ AgapiteGranite
+ AgapiteIngot
+ AgapiteOre
+ AgilityPotion
+ AgilityScroll
+ AlchemistsBauble
+ AlchemistTableEastAddon
+ AlchemistTableEastDeed
+ AlchemistTableSouthAddon
+ AlchemistTableSouthDeed
+ AlchemyBag
+ AlchemyStone
+ Amber
+ Amethyst
+ AncientFarmersKasa
+ AncientSamuraiDo
+ AncientSmithyHammer
+ AncientUrn
+ ANecromancerShroud
+ AniLargeVioletFlask
+ AnimateDeadScroll
+ AniRedRibbedFlask
+ AniSmallBlueFlask
+ AnkhNorth
+ AnkhOfSacrificeAddon
+ AnkhOfSacrificeComponent
+ AnkhOfSacrificeDeed
+ Ankhs
+ AnkhWest
+ AnthropomorphistGlasses
+ Anvil
+ AnvilComponent
+ AnvilEastAddon
+ AnvilEastDeed
+ AnvilSouthAddon
+ AnvilSouthDeed
+ Apple
+ ApplePie
+ AppleTreeAddon
+ AppleTreeDeed
+ AppleTrunkAddon
+ AppleTrunkDeed
+ ArcaneBookshelfEastAddon
+ ArcaneBookshelfEastDeed
+ ArcaneBookshelfSouthAddon
+ ArcaneBookshelfSouthDeed
+ ArcaneCircleAddon
+ ArcaneCircleDeed
+ ArcaneCircleScroll
+ ArcaneEmpowermentScroll
+ ArcaneFocus
+ ArcaneGem
+ ArcaneShield
+ ArcanistStatueEastAddon
+ ArcanistStatueEastDeed
+ ArcanistStatueSouthAddon
+ ArcanistStatueSouthDeed
+ ArchCureScroll
+ ArcheryButte
+ ArcheryButteAddon
+ ArcheryButteDeed
+ ArchProtectionScroll
+ ArcticDeathDealer
+ Armoire
+ ArmorBodyType
+ ArmorDurabilityLevel
+ ArmorIgnore
+ ArmorMaterialType
+ ArmorMeditationAllowance
+ ArmorOfFortune
+ ArmorPierce
+ ArmorProtectionLevel
+ ArmorQuality
+ ArmsAndWeaponsPrimer
+ ArmsOfTacticalExcellence
+ Arrow
+ ArtifactLargeVase
+ ArtifactVase
+ ArtsGlasses
+ AshBoard
+ AshLog
+ AssassinSpike
+ AttuneWeaponScroll
+ AwaseMisoSoup
+ AwesomeDisturbingPortraitAddon
+ AwesomeDisturbingPortraitComponent
+ AwesomeDisturbingPortraitDeed
+ Axe
+ AxeOfTheHeavens
+ Axle
+ AxleGears
+ Backgammon
+ Backpack
+ BackpackArtifact
+ Bacon
+ BadCard
+ Bag
+ BagOfAllReagents
+ BagOfingots
+ BagOfNecroReagents
+ BagOfReagents
+ BagOfSending
+ BagOfSendingHue
+ BallOfSummoning
+ BallotBox
+ BallotBoxAddon
+ BallotBoxDeed
+ BambooChair
+ BambooFlute
+ BambooScreen
+ Banana
+ Bananas
+ Bandage
+ BandageContext
+ Bandana
+ BankBox
+ BankCheck
+ Banner
+ BannerDeed
+ BarbedHides
+ BarbedLeather
+ Bardiche
+ BarkeepContract
+ BarkFragment
+ BarredMetalDoor
+ BarredMetalDoor2
+ Barrel
+ BarrelHoops
+ BarrelLid
+ BarrelStaves
+ BarrelTap
+ Bascinet
+ BaseAddon
+ BaseAddonContainer
+ BaseAddonContainerDeed
+ BaseAddonDeed
+ BaseAgilityPotion
+ BaseArmor
+ BaseAxe
+ BaseBagBall
+ BaseBashing
+ BaseBeverage
+ BaseBoard
+ BaseBook
+ BaseBracelet
+ BaseBulletinBoard
+ BaseCloak
+ BaseClothing
+ BaseClothMaterial
+ BaseConflagrationPotion
+ BaseConfusionBlastPotion
+ BaseContainer
+ BaseCurePotion
+ BaseDecorationArtifact
+ BaseDecorationContainerArtifact
+ BaseDoor
+ BaseEarrings
+ BaseEquipableLight
+ BaseExplosionPotion
+ BaseFloor
+ BaseFormTalisman
+ BaseFruitTreeAddon
+ BaseGlovesOfMining
+ BaseGranite
+ BaseHarvestTool
+ BaseHat
+ BaseHealPotion
+ BaseHides
+ BaseHouseDoor
+ BaseImprisonedMobile
+ BaseIngot
+ BaseInstrument
+ BaseJewel
+ BaseKnife
+ BaseLeather
+ BaseLight
+ BaseMagicFish
+ BaseMeleeWeapon
+ BaseMiddleTorso
+ BaseMulti
+ BaseNecklace
+ BaseOre
+ BaseOuterLegs
+ BaseOuterTorso
+ BasePants
+ BasePiece
+ BasePigmentsOfTokuno
+ BasePlayerBB
+ BasePoisonPotion
+ BasePoleArm
+ BasePotion
+ BaseQuiver
+ BaseRanged
+ BaseReagent
+ BaseRefreshPotion
+ BaseRejuvinationAnkh
+ BaseRing
+ BaseRunicTool
+ BaseScales
+ BaseShield
+ BaseShirt
+ BaseShoes
+ BaseSign
+ BaseSpear
+ BaseStaff
+ BaseStrengthPotion
+ BaseSuit
+ BaseSword
+ BaseTalisman
+ BaseTool
+ BaseTrap
+ BaseTreasureChest
+ BaseWaist
+ BaseWall
+ BaseWand
+ BaseWaterContainer
+ BaseWeapon
+ BaseWindChimes
+ Basket
+ Basket1Artifact
+ Basket2Artifact
+ Basket3NorthArtifact
+ Basket3WestArtifact
+ Basket4Artifact
+ Basket5NorthArtifact
+ Basket5WestArtifact
+ Basket6Artifact
+ BattleAxe
+ BatWing
+ BBDisplayBoard
+ BBMessageContent
+ BBMessageHeader
+ Beads
+ Beard
+ BearMask
+ BedOfNailsAddon
+ BedOfNailsComponent
+ BedOfNailsDeed
+ Bedroll
+ Beeswax
+ BentoBox
+ BeverageBottle
+ BeverageType
+ BigElvenChair
+ BigFish
+ BirdsOfBritannia
+ BlackDyeTub
+ BlackLotusHood
+ BlackPearl
+ BlackScales
+ BlackStaff
+ BlackthornWelcomeBook
+ BladeDance
+ BladedStaff
+ BladeOfInsanity
+ BladeOfTheRighteous
+ BladeSpiritsScroll
+ BlankMap
+ BlankScroll
+ BlazeDyeTub
+ BlazeOfDeath
+ BleedAttack
+ BlessScroll
+ Blight
+ BlightGrippedLongbow
+ Block
+ Blocker
+ Blood
+ Bloodmoss
+ BloodOathScroll
+ BloodPentagram
+ BloodwoodBoard
+ BloodwoodLog
+ BloodwoodSpirit
+ BloodyPentagramAddon
+ BloodyPentagramComponent
+ BloodyPentagramDeed
+ BloodyWaterArtifact
+ Blowpipe
+ BlueBeaker
+ BlueBook
+ BlueCurvedFlask
+ BlueDecorativeRugAddon
+ BlueDecorativeRugDeed
+ BlueDiamond
+ BlueFancyRugAddon
+ BlueFancyRugDeed
+ BluePlainRugAddon
+ BluePlainRugDeed
+ BlueScales
+ BlueSlateFloorCenter
+ BlueSnowflake
+ BlueSoulstone
+ Board
+ BodySash
+ BoilingCauldronAddon
+ BoilingCauldronDeed
+ Bokuto
+ Bola
+ BolaBall
+ BoldStranger
+ Bolt
+ BoltOfCloth
+ Bone
+ BoneArms
+ BoneChest
+ BoneCouchAddon
+ BoneCouchComponent
+ BoneCouchDeed
+ BoneCrusher
+ BoneGloves
+ BoneHarvester
+ BoneHelm
+ BoneLegs
+ BonePile
+ Bonesmasher
+ BoneTableAddon
+ BoneTableDeed
+ BoneThroneAddon
+ BoneThroneComponent
+ BoneThroneDeed
+ Bonnet
+ BookContent
+ BookHeader
+ BookOfBushido
+ BookOfChivalry
+ BookOfNinjitsu
+ BookPageDetails
+ BookPageInfo
+ BooksFaceDownArtifact
+ BooksNorthArtifact
+ BooksWestArtifact
+ Boomstick
+ Boots
+ Bottle
+ BottleArtifact
+ Bow
+ BowlArtifact
+ BowlFlour
+ BowlsHorizontalArtifact
+ BowlsVerticalArtifact
+ BowOfTheJukaKing
+ BraceletOfBinding
+ BraceletOfHealth
+ BrambleCoat
+ BraveKnightOfTheBritannia
+ Brazier
+ BrazierArtifact
+ BrazierTall
+ BreadLoaf
+ BreathOfTheDead
+ BricksFloor1
+ BricksFloor2
+ BrightlyColoredEggs
+ BrilliantAmber
+ BritannianFlora
+ BroadcastCrystal
+ Broadsword
+ BrocadeGozaMatEastAddon
+ BrocadeGozaMatEastDeed
+ BrocadeGozaMatSouthAddon
+ BrocadeGozaMatSouthDeed
+ BrocadeSquareGozaMatEastAddon
+ BrocadeSquareGozaMatEastDeed
+ BrocadeSquareGozaMatSouthAddon
+ BrocadeSquareGozaMatSouthDeed
+ BrokenArmoireAddon
+ BrokenArmoireComponent
+ BrokenArmoireDeed
+ BrokenBedAddon
+ BrokenBedDeed
+ BrokenBookcaseAddon
+ BrokenBookcaseComponent
+ BrokenBookcaseDeed
+ BrokenChair
+ BrokenChestOfDrawersAddon
+ BrokenChestOfDrawersComponent
+ BrokenChestOfDrawersDeed
+ BrokenCoveredChairAddon
+ BrokenCoveredChairComponent
+ BrokenCoveredChairDeed
+ BrokenFallenChairAddon
+ BrokenFallenChairComponent
+ BrokenFallenChairDeed
+ BrokenVanityAddon
+ BrokenVanityDeed
+ BronzeGranite
+ BronzeIngot
+ BronzeOre
+ BronzeShield
+ BronzeStatueMaker
+ BrownBearRugEastAddon
+ BrownBearRugEastDeed
+ BrownBearRugSouthAddon
+ BrownBearRugSouthDeed
+ BrownBook
+ Bucket
+ Buckler
+ BulletinBoard
+ BulletinEquip
+ BulletinMessage
+ BunsHair
+ BurglarsBandana
+ BurningOfTrinsic
+ BustEast
+ BustSouth
+ ButcherKnife
+ Cabbage
+ Cake
+ CakeMix
+ CallToAnarchy
+ Calm
+ Campfire
+ CampfireEntry
+ CampfireStatus
+ Candelabra
+ CandelabraOfSouls
+ CandelabraStand
+ Candle
+ CandleLarge
+ CandleLong
+ CandleShort
+ CandleSkull
+ CandyCane
+ CannonAddon
+ CannonAddonComponent
+ CannonDeed
+ Cantaloupe
+ Cap
+ CaptainJohnsHat
+ CaptainQuacklebushsCutlass
+ CapturedEssence
+ Cards
+ Cards2
+ Cards3
+ Cards4
+ Carrot
+ Cauldron
+ CaveFloorCenter
+ CaveFloorEast
+ CaveFloorNorth
+ CaveFloorSouth
+ CaveFloorWest
+ CavortingClub
+ CeramicMug
+ ChainChest
+ ChainCoif
+ ChainHatsuburi
+ ChainLegs
+ ChainLightningScroll
+ ChampionSkull
+ ChaosShield
+ CharacterStatueMaker
+ CharacterStatuePlinth
+ CheckerBoard
+ Checkers
+ Checkers2
+ CheckItemGroup
+ CheckSlayerResult
+ CheesePizza
+ CheeseSlice
+ CheeseWedge
+ CheeseWheel
+ CherryArmoire
+ CherryBlossomTreeAddon
+ CherryBlossomTreeDeed
+ CherryBlossomTrunkAddon
+ CherryBlossomTrunkDeed
+ Chessboard
+ Chessmen
+ Chessmen2
+ Chessmen3
+ ChestOfHeirlooms
+ ChickenLeg
+ ChildrenTalesVol2
+ ChiselsNorth
+ ChiselsWest
+ CinnamonFancyRugAddon
+ CinnamonFancyRugDeed
+ Circlet
+ Citrine
+ CityMap
+ Cleaver
+ Cloak
+ Clock
+ ClockFrame
+ ClockLeft
+ ClockParts
+ ClockRight
+ ClockworkAssembly
+ ClosedBarrel
+ CloseHelm
+ Cloth
+ ClothingBlessDeed
+ ClothingBlessTarget
+ ClothingQuality
+ ClothNinjaHood
+ ClothNinjaJacket
+ Club
+ ClumsyScroll
+ ClumsyWand
+ Coal
+ CobblestonesFloor
+ Coconut
+ CocoonArtifact
+ ColdBlood
+ ColdForgedBlade
+ ColoredAnvil
+ CommodityDeed
+ CommodityDeedBox
+ CompositeBow
+ ConcussionBlow
+ ConfirmationMoongate
+ ConflagrationPotion
+ ConfusionBlastPotion
+ Container
+ ContainerData
+ ContainerSnoopHandler
+ ContestMiniHouse
+ ContestMiniHouseDeed
+ ContractOfEmployment
+ ControlPanel
+ CookableFood
+ CookedBird
+ CookieMix
+ Cookies
+ CopperGranite
+ CopperIngot
+ CopperOre
+ CopperWire
+ Corpse
+ CorpseFlag
+ CorpseSkinScroll
+ Corruption
+ Cotton
+ CounselorRobe
+ CoveredChair
+ CraftAttributeInfo
+ CraftResource
+ CraftResourceInfo
+ CraftResources
+ CraftResourceType
+ CreateFoodScroll
+ CreatureBackpack
+ CreepyPortraitAddon
+ CreepyPortraitComponent
+ CreepyPortraitDeed
+ CrescentBlade
+ CrimsonCincture
+ Crossbow
+ CrossbowBolts
+ CrownOfTalKeesh
+ CrushingBlow
+ CrystalRechargeInfo
+ CunningScroll
+ CupsArtifact
+ CureLevelInfo
+ CurePotion
+ CureScroll
+ CurseScroll
+ CurseWeaponScroll
+ CurtainsAddon
+ CurtainsComponent
+ CurtainsDeed
+ CurvedFlask
+ CuSidheFormTalisman
+ CustomHueGroup
+ CustomHuePicker
+ CustomHuePickerCallback
+ CustomHuePickerGump
+ Cutlass
+ DaemonArms
+ DaemonBlood
+ DaemonBone
+ DaemonChest
+ DaemonGloves
+ DaemonHelm
+ DaemonLegs
+ Dagger
+ DaimyosHelm
+ Daisho
+ DamagedBooksArtifact
+ DarkenedSky
+ DarkFlowerTapestryEastAddon
+ DarkFlowerTapestryEastDeed
+ DarkFlowerTapestrySouthAddon
+ DarkFlowerTapestrySouthDeed
+ DarkSandstoneFloorN
+ DarkSandstoneFloorW
+ DarkSapphire
+ DarkSource
+ DarkWoodDoor
+ DarkWoodGate
+ DarkWoodHouseDoor
+ DarkWoodWall
+ DarkWoodWallTypes
+ DarkYarn
+ DartBoard
+ DartBoardEastAddon
+ DartBoardEastDeed
+ DartBoardSouthAddon
+ DartBoardSouthDeed
+ Dates
+ DawnsMusicBox
+ DawnsMusicGear
+ DawnsMusicInfo
+ DawnsMusicRarity
+ DeadlyPoisonPotion
+ DeadWood
+ DeathRobe
+ DeathShroud
+ DecayedCorpse
+ DeceitBrazier
+ DeceitDungeonOfHorror
+ DecoArrowShafts
+ DecoBlackmoor
+ DecoBloodspawn
+ DecoBottlesOfLiquor
+ DecoBridle
+ DecoBridle2
+ DecoBrimstone
+ DecoCards5
+ DecoCrystalBall
+ DecoDeckOfTarot
+ DecoDeckOfTarot2
+ DecoDragonsBlood
+ DecoDragonsBlood2
+ DecoEyeOfNewt
+ DecoFlower
+ DecoFlower2
+ DecoFullJar
+ DecoFullJars3
+ DecoFullJars4
+ DecoGarlic
+ DecoGarlic2
+ DecoGarlicBulb
+ DecoGarlicBulb2
+ DecoGinseng
+ DecoGinseng2
+ DecoGinsengRoot
+ DecoGinsengRoot2
+ DecoGoldIngot
+ DecoGoldIngot2
+ DecoGoldIngots
+ DecoGoldIngots2
+ DecoGoldIngots3
+ DecoGoldIngots4
+ DecoHay
+ DecoHay2
+ DecoHorseDung
+ DecoIronIngot
+ DecoIronIngot2
+ DecoIronIngots
+ DecoIronIngots2
+ DecoIronIngots3
+ DecoIronIngots4
+ DecoIronIngots5
+ DecoIronIngots6
+ DecoMagicalCrystal
+ DecoMandrake
+ DecoMandrake2
+ DecoMandrake3
+ DecoMandrakeRoot
+ DecoMandrakeRoot2
+ DecoNightshade
+ DecoNightshade2
+ DecoNightshade3
+ DecoObsidian
+ DecoPumice
+ DecorateCommand
+ DecorativeAxeNorth
+ DecorativeAxeWest
+ DecorativeBowNorth
+ DecorativeBowWest
+ DecorativeDAxeNorth
+ DecorativeDAxeWest
+ DecorativePlateKabuto
+ DecorativeShield
+ DecorativeShield1
+ DecorativeShield10
+ DecorativeShield11
+ DecorativeShield2
+ DecorativeShield3
+ DecorativeShield4
+ DecorativeShield5
+ DecorativeShield6
+ DecorativeShield7
+ DecorativeShield8
+ DecorativeShield9
+ DecorativeShieldDeed
+ DecorativeShieldSword1North
+ DecorativeShieldSword1West
+ DecorativeShieldSword2North
+ DecorativeShieldSword2West
+ DecorativeSwordNorth
+ DecorativeSwordWest
+ DecorativeTopiary
+ DecoRock
+ DecoRock2
+ DecoRocks
+ DecoRocks2
+ DecoRoseOfTrinsic
+ DecoRoseOfTrinsic2
+ DecoRoseOfTrinsic3
+ DecoSilverIngot
+ DecoSilverIngot2
+ DecoSilverIngots
+ DecoSilverIngots2
+ DecoSilverIngots3
+ DecoSilverIngots4
+ DecoSilverIngots5
+ DecoSpittoon
+ DecoTarot
+ DecoTarot2
+ DecoTarot3
+ DecoTarot4
+ DecoTarot5
+ DecoTarot6
+ DecoTarot7
+ DecoTray
+ DecoTray2
+ DecoWyrmsHeart
+ DeerMask
+ DefenseMastery
+ DemonForks
+ DemonSkull
+ DetectiveBoots
+ Diamond
+ DiamondMace
+ Dices
+ DimensionalTravel
+ DirtGreenThornsEffect
+ DirtPatch
+ DirtyFrypan
+ DirtyKettle
+ DirtyPan
+ DirtyPot
+ DirtyRoundPot
+ DirtySmallPot
+ DirtySmallRoundPot
+ DisappearingRaiseSwitch
+ Disarm
+ DiseasedBark
+ DisguiseGump
+ DisguiseKit
+ DisguisePersistance
+ DisguiseTimers
+ Dismount
+ DispelFieldScroll
+ DispelScroll
+ Disrobe
+ DisturbingPortraitAddon
+ DisturbingPortraitComponent
+ DisturbingPortraitDeed
+ DiversityOfOurLand
+ DivineCountenance
+ DjinnisRing
+ DolphinLeftArtifact
+ DolphinRightArtifact
+ DoorFacing
+ DoubleAxe
+ DoubleBladedStaff
+ DoubleShot
+ DoubleStrike
+ Doublet
+ Dough
+ DovetailSaw
+ DragonArms
+ DragonBardingDeed
+ DragonChest
+ DragonGloves
+ DragonHelm
+ DragonLegs
+ DragonNunchaku
+ DrakovsJournal
+ Drawer
+ DrawKnife
+ DreadHornMane
+ DreadPirateHat
+ Dressform
+ DriedHerbs
+ DriedOnions
+ Drums
+ DryadAllureScroll
+ DualWield
+ DullCopperGranite
+ DullCopperIngot
+ DullCopperOre
+ DupresShield
+ DupreSuit
+ Dyes
+ DyeTub
+ DynamicFlipingAttribute
+ DynamicFurniture
+ EarOfCorn
+ EarringBoxSet
+ EarringsOfProtection
+ EarthquakeScroll
+ Easle
+ EasterEggs
+ ECEffectType
+ EcruCitrine
+ EffectController
+ EffectItem
+ EffectTriggerType
+ EggBomb
+ EggCaseArtifact
+ Eggs
+ Eggshells
+ ElegantArmoire
+ ElegantLowTable
+ ElvenBedEastAddon
+ ElvenBedEastDeed
+ ElvenBedSouthAddon
+ ElvenBedSouthDeed
+ ElvenBoots
+ ElvenCompositeLongbow
+ ElvenDarkShirt
+ ElvenDresserEastAddon
+ ElvenDresserEastDeed
+ ElvenDresserSouthAddon
+ ElvenDresserSouthDeed
+ ElvenForgeAddon
+ ElvenForgeDeed
+ ElvenGlasses
+ ElvenLoveseatEastAddon
+ ElvenLoveseatEastDeed
+ ElvenLoveseatSouthAddon
+ ElvenLoveseatSouthDeed
+ ElvenMachete
+ ElvenPants
+ ElvenQuiver
+ ElvenReadingChair
+ ElvenShirt
+ ElvenSpellblade
+ ElvenSpinningwheelEastAddon
+ ElvenSpinningwheelEastDeed
+ ElvenSpinningwheelSouthAddon
+ ElvenSpinningwheelSouthDeed
+ ElvenStoveEastAddon
+ ElvenStoveEastDeed
+ ElvenStoveSouthAddon
+ ElvenStoveSouthDeed
+ ElvenWashBasinEastAddon
+ ElvenWashBasinEastDeed
+ ElvenWashBasinSouthAddon
+ ElvenWashBasinSouthDeed
+ EmbroideredOakLeafCloak
+ Emerald
+ EmptyBentoBox
+ EmptyBookcase
+ EmptyCurvedFlaskE
+ EmptyCurvedFlaskW
+ EmptyJar
+ EmptyJars
+ EmptyJars2
+ EmptyJars3
+ EmptyJars4
+ EmptyPewterBowl
+ EmptyPewterTub
+ EmptyRibbedFlask
+ EmptyToolKit
+ EmptyToolKit2
+ EmptyVial
+ EmptyVialsWRack
+ EmptyWoodenBowl
+ EmptyWoodenTub
+ EnchantedSextant
+ EnchantedSwitch
+ EnchantedTitanLegBone
+ EnergyBoltScroll
+ EnergyFieldScroll
+ EnergyVortexScroll
+ EnhancedBandage
+ EssenceOfBattle
+ EssenceOfWindScroll
+ EtherealVoyageScroll
+ EthicalHedonism
+ EvilIdolSkull
+ EvilOmenScroll
+ ExecutionersAxe
+ ExecutionersCap
+ Exiler
+ ExorcismScroll
+ ExplosionPotion
+ ExplosionScroll
+ EyeOfTheTravesty
+ FabledFishingNet
+ FancyArmoire
+ FancyDrawer
+ FancyDress
+ FancyElvenTableEastAddon
+ FancyElvenTableEastDeed
+ FancyElvenTableSouthAddon
+ FancyElvenTableSouthDeed
+ FancyShirt
+ FancyWindChimes
+ FancyWoodenChairCushion
+ FangOfRactus
+ FanNorthArtifact
+ FanWestArtifact
+ FarmableCabbage
+ FarmableCarrot
+ FarmableCotton
+ FarmableCrop
+ FarmableFlax
+ FarmableLettuce
+ FarmableOnion
+ FarmablePumpkin
+ FarmableTurnip
+ FarmableWheat
+ Feather
+ FeatheredHat
+ FeeblemindScroll
+ FeebleWand
+ Feint
+ FemaleElvenPlateChest
+ FemaleElvenRobe
+ FemaleKimono
+ FemaleLeafChest
+ FemaleLeatherChest
+ FemalePlateChest
+ FemaleStuddedChest
+ FerretFormTalisman
+ FertileDirt
+ FestiveCactus
+ FeyLeggings
+ FillableBarrel
+ FillableBvrge
+ FillableContainer
+ FillableContent
+ FillableContentType
+ FillableEntry
+ FillableLargeCrate
+ FillableMetalBox
+ FillableMetalChest
+ FillableMetalGoldenChest
+ FillableSmallCrate
+ FillableWoodenBox
+ FillableWoodenChest
+ FinishedWoodenChest
+ FireballScroll
+ FireballWand
+ Firebomb
+ FirebombField
+ FireColumnAddon
+ FireColumnTrap
+ FireFieldScroll
+ FireHorn
+ FireRuby
+ FireworksWand
+ Fish
+ FishingPole
+ FishSteak
+ Fists
+ FlameSpurtTrap
+ FlamestrikeScroll
+ FlamingHead
+ FlamingHeadDeed
+ Flax
+ FleshRipper
+ FletcherTools
+ FlipableAddonAttribute
+ FlipableAttribute
+ FlipCommandHandlers
+ FloppyHat
+ FlourMillEastAddon
+ FlourMillEastDeed
+ FlourMillSouthAddon
+ FlourMillSouthDeed
+ FlourMillStage
+ FlourSifter
+ FlowerGarland
+ FlowersArtifact
+ FluteOfRenewal
+ FoldedSteelGlasses
+ Food
+ FootStool
+ Forge
+ ForgeComponent
+ ForgedMetal
+ Fork
+ ForkLeft
+ ForkRight
+ FormalShirt
+ FountainAddon
+ FountainDeed
+ FountainOfLife
+ FountainOfLifeDeed
+ FrenchBread
+ FrenziedWhirlwind
+ FriedEggs
+ Froe
+ FropozJournal
+ Frostbringer
+ FrostwoodBoard
+ FrostwoodLog
+ FruitBasket
+ FruitPie
+ Fukiya
+ FukiyaDarts
+ FullApron
+ FullBookcase
+ FullVialsWRack
+ FurBoots
+ FurCape
+ FurnitureDyeTub
+ FurnitureTimer
+ FurrowsGreenThornsEffect
+ FurSarong
+ Futon
+ GamblingStone
+ GargoylesPickaxe
+ Garlic
+ GasTrap
+ GasTrapType
+ GateTravelScroll
+ GauntletsOfNobility
+ Gears
+ GemmedCirclet
+ GemType
+ GenericBeard
+ GenericHair
+ GenericHouseDoor
+ GhostShipAnchor
+ GiantSpikeTrap
+ GiantWeb1
+ GiantWeb2
+ GiantWeb3
+ GiantWeb4
+ GiantWeb5
+ GiantWeb6
+ GiftBox
+ GiftBoxAngel
+ GiftBoxCube
+ GiftBoxCylinder
+ GiftBoxHues
+ GiftBoxNeon
+ GiftBoxOctogon
+ GiftBoxRectangle
+ GiftOfLifeScroll
+ GiftOfRenewalScroll
+ GildedDress
+ GildedWoodenChest
+ GingerBreadCookie
+ GingerBreadHouseAddon
+ GingerBreadHouseDeed
+ Ginseng
+ GlacialStaff
+ GladiatorsCollar
+ Glass
+ GlassblowingBook
+ GlassBottle
+ GlassMug
+ Globe
+ GlovesOfThePugilist
+ GlovesOfTheSun
+ GMRobe
+ GnarledStaff
+ Goatee
+ Goblet
+ Gold
+ GoldBeadNecklace
+ GoldBracelet
+ GoldBricks
+ GoldEarrings
+ GoldenDecorativeRugAddon
+ GoldenDecorativeRugDeed
+ GoldGranite
+ GoldIngot
+ GoldNecklace
+ GoldOre
+ GoldRing
+ GoldWire
+ GozaMatEastAddon
+ GozaMatEastDeed
+ GozaMatSouthAddon
+ GozaMatSouthDeed
+ GrammarOfOrcish
+ Granite
+ Grapes
+ GraveDust
+ GrayBrickFireplaceEastAddon
+ GrayBrickFireplaceEastDeed
+ GrayBrickFireplaceSouthAddon
+ GrayBrickFireplaceSouthDeed
+ GreaterAgilityPotion
+ GreaterConflagrationPotion
+ GreaterConfusionBlastPotion
+ GreaterCurePotion
+ GreaterExplosionPotion
+ GreaterHealPotion
+ GreaterHealScroll
+ GreaterHealWand
+ GreaterPoisonPotion
+ GreaterStrengthPotion
+ GreenBeaker
+ GreenBottle
+ GreenCurvedFlask
+ GreenDriedFlowers
+ GreenGourd
+ GreenMarbleFloor
+ GreenScales
+ GreenStocking
+ GreenTea
+ GreenTeaBasket
+ GreenThorns
+ GreenThornsEffect
+ GreenThornsSHTeleporter
+ GreyFlagstones
+ GreyMarbleFloor
+ GreySlateFloor
+ GrimmochJournal1
+ GrimmochJournal11
+ GrimmochJournal14
+ GrimmochJournal17
+ GrimmochJournal2
+ GrimmochJournal23
+ GrimmochJournal3
+ GrimmochJournal6
+ GrimmochJournal7
+ GrizzledBones
+ GrizzledMareStatuette
+ GruesomeStandardArtifact
+ GuantletsOfAnger
+ GuideToGuilds
+ GuildDeed
+ Guildstone
+ GuildstoneDeed
+ GuildTeleporter
+ Guillotine
+ GuillotineAddon
+ GuillotineComponent
+ GuillotineDeed
+ GwennosHarp
+ HagCauldron
+ HagStew
+ Hair
+ HairDye
+ HairDyeGump
+ HairRestylingDeed
+ Hakama
+ HakamaShita
+ Halberd
+ HalfApron
+ HalfEmptyJar
+ HalfEmptyJars
+ Ham
+ Hammer
+ HammerPick
+ HangingAxesAddon
+ HangingAxesDeed
+ HangingLantern
+ HangingSkeleton
+ HangingSkeletonDeed
+ HangingSwordsAddon
+ HangingSwordsDeed
+ HanzosBow
+ HarmScroll
+ HarmWand
+ Harp
+ HarrowerGate
+ Hatchet
+ HatOfTheMagi
+ HaunterMirrorAddon
+ HaunterMirrorComponent
+ HaunterMirrorDeed
+ Head
+ HeadType
+ HealPotion
+ HealScroll
+ HealWand
+ HearthOfHomeFire
+ HearthOfHomeFireDeed
+ HeartOfTheLion
+ HeartwoodBoard
+ HeartwoodLog
+ HeaterShield
+ HeatingStand
+ HeavyCrossbow
+ HeavyPlateJingasa
+ Helmet
+ HelmOfInsight
+ HelmOfSwiftness
+ HeritageToken
+ HideChest
+ HideFemaleChest
+ HideGloves
+ HideGorget
+ HidePants
+ HidePauldrons
+ Hides
+ Hinge
+ HintItem
+ HitLower
+ Hold
+ HolidayBell
+ HolidayTree
+ HolidayTreeChoiceGump
+ HolidayTreeDeed
+ HolidayTreeType
+ HollowPrism
+ HolyKnightsBreastplate
+ HolySword
+ HoneydewMelon
+ HonorableSwords
+ HoodedShroudOfShadows
+ HornedHides
+ HornedLeather
+ HornedTribalMask
+ HorrificBeastScroll
+ HorseShoes
+ Hourglass
+ HourglassAni
+ HouseLadderAddon
+ HouseLadderDeed
+ HousePlacementCategoryGump
+ HousePlacementEntry
+ HousePlacementListGump
+ HousePlacementTool
+ HouseRaffleDeed
+ HouseRaffleState
+ HouseRaffleStone
+ HouseTeleporter
+ HuntersHeaddress
+ IAddon
+ IArcaneEquip
+ IAxe
+ IcicleLargeEast
+ IcicleLargeSouth
+ IcicleMedEast
+ IcicleMedSouth
+ IcicleSmallEast
+ IcicleSmallSouth
+ ICommodity
+ IcyPatch
+ IDevourer
+ IDurability
+ IDWand
+ IDyable
+ IFlourMill
+ IHasQuantity
+ ILockable
+ ILockpickable
+ ILoom
+ ImmolatingWeaponScroll
+ IncognitoScroll
+ IndecipherableMap
+ InfectiousStrike
+ IngotStone
+ INinjaAmmo
+ INinjaWeapon
+ InquisitorsResolution
+ Inshave
+ InstrumentPickedCallback
+ InstrumentQuality
+ InteriorDecorator
+ InvisibilityScroll
+ IolosLute
+ IronGate
+ IronGateShort
+ IronIngot
+ IronMaidenAddon
+ IronMaidenDeed
+ IronOre
+ IronWire
+ IronwoodCrown
+ IScissorable
+ IShipwreckedItem
+ ISlayer
+ ISpinningWheel
+ ItemIdentification
+ ITokunoDyable
+ IUsesRemaining
+ IWaterSource
+ IWearableDurability
+ JackalsCollar
+ JackOLantern
+ JadeStatueMaker
+ JarHoney
+ Jars2
+ Jars3
+ Jars4
+ JesterHat
+ JesterHatofChuckles
+ JesterSuit
+ JeweledFiligree
+ JinBaori
+ JointingPlane
+ Jug
+ JukaBow
+ KaburJournal
+ Kama
+ Kamishimo
+ Kasa
+ KasaOfTheRajin
+ Katana
+ Keg
+ Key
+ KeyRing
+ KeyType
+ KeywordTeleporter
+ KhaldunPitTeleporter
+ Kilt
+ Kindling
+ Knife
+ KnifeLeft
+ KnifeRight
+ KrisnaHair
+ Kryss
+ LadyPortrait1
+ LadyPortrait2
+ Lajatang
+ LambLeg
+ LampPost1
+ LampPost2
+ LampPost3
+ LampPostArtifact
+ Lance
+ Lantern
+ LanternOfSouls
+ LapHarp
+ LardOfParoxysmus
+ LargeBagBall
+ LargeBattleAxe
+ LargeBedEastAddon
+ LargeBedEastDeed
+ LargeBedSouthAddon
+ LargeBedSouthDeed
+ LargeCrate
+ LargeEmptyFlask
+ LargeEmptyPot
+ LargeFishingNetAddon
+ LargeFishingNetComponent
+ LargeFishingNetDeed
+ LargeFlask
+ LargeForgeEast
+ LargeForgeEastAddon
+ LargeForgeEastDeed
+ LargeForgeSouthAddon
+ LargeForgeSouthDeed
+ LargeForgeWest
+ LargePainting
+ LargeStoneTableEastAddon
+ LargeStoneTableEastDeed
+ LargeStoneTableSouthAddon
+ LargeStoneTableSouthDeed
+ LargeTable
+ LargeVase
+ LargeVioletFlask
+ LargeYellowFlask
+ LavaTile
+ LeafArms
+ Leafblade
+ LeafChest
+ LeafGloves
+ LeafGorget
+ LeafLegs
+ LeafTonlet
+ Leather
+ LeatherArms
+ LeatherBustierArms
+ LeatherCap
+ LeatherChest
+ LeatherDo
+ LeatherDyeTub
+ LeatherGloves
+ LeatherGlovesOfMining
+ LeatherGorget
+ LeatherHaidate
+ LeatherHiroSode
+ LeatherJingasa
+ LeatherLegs
+ LeatherMempo
+ LeatherNinjaBelt
+ LeatherNinjaHood
+ LeatherNinjaJacket
+ LeatherNinjaMitts
+ LeatherNinjaPants
+ LeatherShorts
+ LeatherSkirt
+ LeatherSuneate
+ LeatherTunicArtifact
+ LeftArm
+ LeftLeg
+ LegacyOfTheDreadLord
+ LeggingsOfBane
+ LeggingsOfEmbers
+ LegsOfStability
+ Lemon
+ Lemons
+ LesserCurePotion
+ LesserExplosionPotion
+ LesserHealPotion
+ LesserPigmentsOfTokuno
+ LesserPigmentType
+ LesserPoisonPotion
+ Lettuce
+ LeurociansMempoOfFortune
+ LibraryBookcase
+ LichFormScroll
+ LieutenantOfTheBritannianRoyalGuard
+ LifeOfATravellingMinstrel
+ LightFlowerTapestryEastAddon
+ LightFlowerTapestryEastDeed
+ LightFlowerTapestrySouthAddon
+ LightFlowerTapestrySouthDeed
+ LightningScroll
+ LightningWand
+ LightOfTheWinterSolstice
+ LightOfWayGlasses
+ LightPlateJingasa
+ LightSource
+ LightWoodDoor
+ LightWoodGate
+ LightYarn
+ LightYarnUnraveled
+ Lime
+ Limes
+ LocalizedAddonComponent
+ LocalizedContainerComponent
+ LocalizedSign
+ LocalizedStatic
+ LocalMap
+ LockableContainer
+ Lockpick
+ Lockpicks
+ Log
+ LongBeard
+ LongFlask
+ LongHair
+ LongPants
+ Longsword
+ LoomEastAddon
+ LoomEastDeed
+ LoomSouthAddon
+ LoomSouthDeed
+ LordBlackthorneSuit
+ LordBritishSuit
+ LOSBlocker
+ LtBlueCurvedFlask
+ LuckyNecklace
+ LuminescentFungi
+ LuminousRuneBlade
+ LunaLance
+ Lute
+ LyricalGlasses
+ LysanderNotebook1
+ LysanderNotebook11
+ LysanderNotebook2
+ LysanderNotebook3
+ LysanderNotebook7
+ LysanderNotebook8
+ Mace
+ MaceShieldGlasses
+ MagicalShortbow
+ MagicArrowScroll
+ MagicArrowWand
+ MagicLockScroll
+ MagicReflectScroll
+ MagicTrapScroll
+ MagicUnTrapScroll
+ MagicWand
+ MagicWizardsHat
+ MajorTradeAssociation
+ MaleElvenRobe
+ MaleKimono
+ MalletAndChisel
+ ManaDrainScroll
+ ManaDrainWand
+ ManaVampireScroll
+ MandrakeRoot
+ ManPortrait1
+ ManPortrait2
+ ManStatuetteEastArtifact
+ ManStatuetteSouthArtifact
+ MapItem
+ MapleArmoire
+ MapmakersPen
+ MarbleFloor
+ MarblePavers
+ MarbleStatueMaker
+ MaritimeGlasses
+ MarkContainer
+ MarkScroll
+ MasonryBook
+ MassCurseScroll
+ MassDispelScroll
+ Maul
+ MeatPie
+ MediumCrate
+ MediumFlask
+ MediumLongBeard
+ MediumShortBeard
+ MediumStoneTableEastAddon
+ MediumStoneTableEastDeed
+ MediumStoneTableSouthAddon
+ MediumStoneTableSouthDeed
+ MediumStretchedHideEastAddon
+ MediumStretchedHideEastDeed
+ MediumStretchedHideSouthAddon
+ MediumStretchedHideSouthDeed
+ MediumWoodDoor
+ MelisandesCorrodedHatchet
+ MeltedWax
+ MessageInABottle
+ MetalBox
+ MetalChest
+ MetalDoor
+ MetalDoor2
+ MetalGoldenChest
+ MetalGoldenPuzzleChest
+ MetalGoldenTreasureChest
+ MetalHouseDoor
+ MetalKiteShield
+ MetalPigmentsOfTokuno
+ MetalShield
+ MetalTreasureChest
+ MeteorSwarmScroll
+ MidnightBracers
+ MindBlastScroll
+ MindRotScroll
+ MiniHouseAddon
+ MiniHouseDeed
+ MiniHouseInfo
+ MiniHouseType
+ MiningCart
+ MiningCartDeed
+ MiningCartType
+ MinotaurHedge
+ MinotaurStatue
+ MinotaurStatueDeed
+ MinotaurStatueType
+ MisoSoup
+ MistletoeAddon
+ MistletoeDeed
+ Mohawk
+ MonkRobe
+ MonsterStatuette
+ MonsterStatuetteInfo
+ MonsterStatuetteType
+ Moongate
+ MoongateConfirmGump
+ MoongateGump
+ MoonPhase
+ Moonstone
+ MoonstoneGate
+ MoonstoneType
+ MorphItem
+ MortalStrike
+ MortarPestle
+ MouldingPlane
+ MountedPixieBlueAddon
+ MountedPixieBlueComponent
+ MountedPixieBlueDeed
+ MountedPixieGreenAddon
+ MountedPixieGreenComponent
+ MountedPixieGreenDeed
+ MountedPixieLimeAddon
+ MountedPixieLimeComponent
+ MountedPixieLimeDeed
+ MountedPixieOrangeAddon
+ MountedPixieOrangeComponent
+ MountedPixieOrangeDeed
+ MountedPixieWhiteAddon
+ MountedPixieWhiteComponent
+ MountedPixieWhiteDeed
+ MovingShot
+ Muculent
+ Muffins
+ MushroomTrap
+ Mustache
+ MyStory
+ Nails
+ NameChangeDeed
+ NatureFuryScroll
+ Necklace
+ NecromancerSpellbook
+ NecromanticGlasses
+ NerveStrike
+ NewHousePlacementTarget
+ NewPlayerTicket
+ NextPointTarget
+ Nightshade
+ NightSightPotion
+ NightSightScroll
+ NightsKiss
+ Nightstand
+ NinjaTabi
+ NinjaWeapon
+ NoDachi
+ NorseHelm
+ NoxCrystal
+ NoxRangersHeavyCrossbow
+ Nunchaku
+ OakBoard
+ OakLog
+ Obelisk
+ Obi
+ OblivionsNeedle
+ OilCloth
+ Onion
+ OnItemConsumed
+ OpenCoconut
+ OrangePetals
+ OrcChieftainHelm
+ OrcHelm
+ OrcishKinMask
+ OrcishVisage
+ OrderShield
+ OreInfo
+ OrigamiButterfly
+ OrigamiFish
+ OrigamiFrog
+ OrigamiPaper
+ OrigamiShape
+ OrigamiSongbird
+ OrigamiSwan
+ OrnamentOfTheMagician
+ OrnateAxe
+ OrnateCrownOfTheHarrower
+ OrnateElvenChair
+ OrnateElvenTableEastAddon
+ OrnateElvenTableEastDeed
+ OrnateElvenTableSouthAddon
+ OrnateElvenTableSouthDeed
+ OrnateWoodenChest
+ OssianGrimoire
+ OverseerSunderedBlade
+ Pacify
+ PadsOfTheCuSidhe
+ PageboyHair
+ PainSpikeScroll
+ Painting1NorthArtifact
+ Painting1WestArtifact
+ Painting2NorthArtifact
+ Painting2WestArtifact
+ Painting3Artifact
+ Painting4NorthArtifact
+ Painting4WestArtifact
+ Painting5NorthArtifact
+ Painting5WestArtifact
+ Painting6NorthArtifact
+ Painting6WestArtifact
+ PaintsAndBrush
+ PaperLantern
+ ParagonChest
+ ParalyzeFieldScroll
+ ParalyzeScroll
+ ParalyzingBlow
+ ParasiticPlant
+ ParrotPerchAddon
+ ParrotPerchDeed
+ Peach
+ PeachCobbler
+ PeachTreeAddon
+ PeachTreeDeed
+ PeachTrunkAddon
+ PeachTrunkDeed
+ Pear
+ PeasantsBokuto
+ PeculiarFish
+ PenAndInk
+ PendantOfTheMagi
+ PentagramAddon
+ PentagramDeed
+ PerfectEmerald
+ PewterBowlOfCarrots
+ PewterBowlOfCorn
+ PewterBowlOfLettuce
+ PewterBowlOfPeas
+ PewterBowlOfPotatos
+ PewterMug
+ PhantomStaff
+ PhillipsWoodenSteed
+ Pickaxe
+ PickpocketDip
+ PickpocketDipEastAddon
+ PickpocketDipEastDeed
+ PickpocketDipSouthAddon
+ PickpocketDipSouthDeed
+ PicnicBasket
+ PieceBlackBishop
+ PieceBlackChecker
+ PieceBlackKing
+ PieceBlackKnight
+ PieceBlackPawn
+ PieceBlackQueen
+ PieceBlackRook
+ PieceWhiteBishop
+ PieceWhiteChecker
+ PieceWhiteKing
+ PieceWhiteKnight
+ PieceWhitePawn
+ PieceWhiteQueen
+ PieceWhiteRook
+ Pier
+ PigIron
+ PigmentsOfTokuno
+ PigmentType
+ Pike
+ PileOfGlacialSnow
+ PilferedDancerFans
+ PinkFancyRugAddon
+ PinkFancyRugDeed
+ Pitcher
+ Pitchfork
+ PixieSwatter
+ PlagueBeastBackpack
+ PlagueBeastBackupOrgan
+ PlagueBeastBlood
+ PlagueBeastComponent
+ PlagueBeastGland
+ PlagueBeastHeart
+ PlagueBeastInnard
+ PlagueBeastMaidenOrgan
+ PlagueBeastMainOrgan
+ PlagueBeastMutationCore
+ PlagueBeastOrgan
+ PlagueBeastRockOrgan
+ PlagueBeastRubbleOrgan
+ PlagueBeastVein
+ PlainDress
+ PlainLowTable
+ PlainWoodenChest
+ Plank
+ PlankSide
+ Plate
+ PlateArms
+ PlateBattleKabuto
+ PlateChest
+ PlateDo
+ PlateGloves
+ PlateGorget
+ PlateHaidate
+ PlateHatsuburi
+ PlateHelm
+ PlateHiroSode
+ PlateLegs
+ PlateMempo
+ PlateSuneate
+ PlayerBBEast
+ PlayerBBGump
+ PlayerBBMessage
+ PlayerBBSouth
+ PlayingCards
+ PlayingCards2
+ PMEntry
+ PMList
+ PoisonedGlasses
+ PoisonFieldScroll
+ PoisonPotion
+ PoisonScroll
+ PoisonStrikeScroll
+ PolarBearMask
+ PolarBearRugEastAddon
+ PolarBearRugEastDeed
+ PolarBearRugSouthAddon
+ PolarBearRugSouthDeed
+ PolymorphScroll
+ PonyTail
+ PoolOfAcid
+ PortcullisEW
+ PortcullisNS
+ PotionEffect
+ PotionKeg
+ PottedCactus
+ PottedCactus1
+ PottedCactus2
+ PottedCactus3
+ PottedCactus4
+ PottedCactus5
+ PottedCactusDeed
+ PottedPlant
+ PottedPlant1
+ PottedPlant2
+ PottedTree
+ PottedTree1
+ Pouch
+ PowderOfTemperament
+ PowderOfTranslocation
+ PowerCrystal
+ PowerGenerator
+ PowerScroll
+ PresetMap
+ PresetMapEntry
+ PresetMapType
+ PristineDreadHorn
+ PrizedFish
+ PromotionalToken
+ ProspectorsTool
+ ProtectionScroll
+ PublicMoongate
+ Pumpkin
+ PumpkinPie
+ Putrefication
+ PuzzleChest
+ PuzzleChestCylinder
+ PuzzleChestSolution
+ PuzzleChestSolutionAndTime
+ PyramidAddon
+ QuarterStaff
+ Quell
+ QuestOfVirtues
+ Quiche
+ QuiverOfBlight
+ QuiverOfElements
+ QuiverOfFire
+ QuiverOfIce
+ QuiverOfInfinity
+ QuiverOfLightning
+ QuiverOfRage
+ RadiantScimitar
+ RaedsGlory
+ RaffleEntry
+ RaisableItem
+ RaiseSwitch
+ RandomTalisman
+ RandomWand
+ RangerArms
+ RangerChest
+ RangerGloves
+ RangerGorget
+ RangerLegs
+ RankingsOfTrades
+ RattanDoor
+ RavenHelm
+ RawBird
+ RawChickenLeg
+ RawFishSteak
+ RawLambLeg
+ RawRibs
+ ReactiveArmorScroll
+ ReaperFormScroll
+ RecallRune
+ RecallScroll
+ ReceedingHair
+ ReceiverCrystal
+ RecipeScroll
+ RedArmoire
+ RedBeaker
+ RedBook
+ RedBottle
+ RedCurvedFlask
+ RedHangingLantern
+ RedLeaves
+ RedMisoSoup
+ RedPlainRugAddon
+ RedPlainRugDeed
+ RedPoinsettia
+ RedRibbedFlask
+ RedScales
+ RedSoulstone
+ RedStocking
+ RedVelvetGiftBox
+ RefreshPotion
+ RegardingLlamas
+ RegStone
+ RejuvinationAddonComponent
+ RejuvinationAnkhNorth
+ RejuvinationAnkhWest
+ RepairDeed
+ RepeatingCrossbow
+ ReptalonFormTalisman
+ ResGate
+ ResilientBracer
+ ResurrectionScroll
+ RevealScroll
+ RewardBlackDyeTub
+ RewardBrazier
+ RewardBrazierDeed
+ RewardCake
+ RewardCloak
+ RewardDress
+ RewardPottedCactus
+ RewardRobe
+ RibCage
+ Ribs
+ RidingSwipe
+ RightArm
+ RighteousAnger
+ RightLeg
+ RingmailArms
+ RingmailChest
+ RingmailGloves
+ RingmailGlovesOfMining
+ RingmailLegs
+ RingOfTheElements
+ RingOfTheVile
+ RoastPig
+ Robe
+ RobeOfTheEclipse
+ RobeOfTheEquinox
+ RockArtifact
+ RollingPin
+ Rope
+ RoseInAVase
+ RoseOfTrinsic
+ RoseOfTrinsicPetal
+ RoundPaperLantern
+ RoyalCirclet
+ RoyalGuardSurvivalKnife
+ Ruby
+ RuinedArmoire
+ RuinedBookcase
+ RuinedBooks
+ RuinedChair
+ RuinedClock
+ RuinedDrawers
+ RuinedFallenChairA
+ RuinedFallenChairB
+ RuinedPainting
+ RuinedPaintingArtifact
+ RuneBeetleCarapace
+ RuneBlade
+ Runebook
+ RunebookDyeTub
+ RunebookEntry
+ RuneCarvingKnife
+ RunedPrism
+ RunedSwitch
+ RunicDovetailSaw
+ RunicHammer
+ RunicSewingKit
+ SackFlour
+ SacrificialAltarAddon
+ SacrificialAltarDeed
+ SaddleArtifact
+ Sai
+ SakeArtifact
+ SalvageBag
+ SamaritanRobe
+ SamuraiHelm
+ SamuraiTabi
+ Sand
+ Sandals
+ SandFlagstones
+ SandGreenThornsEffect
+ SandMiningBook
+ SandstoneFireplaceEastAddon
+ SandstoneFireplaceEastDeed
+ SandstoneFireplaceSouthAddon
+ SandstoneFireplaceSouthDeed
+ SandstoneFloorN
+ SandstoneFloorW
+ SandstoneFountainAddon
+ Sapphire
+ Sausage
+ SausagePizza
+ SavageMask
+ Saw
+ SawTrap
+ SawTrapType
+ Scales
+ ScarecrowAddon
+ ScarecrowComponent
+ ScarecrowDeed
+ Scepter
+ Scimitar
+ Scissors
+ Scorp
+ Scourge
+ ScribeBag
+ ScribesPen
+ ScribeStone
+ ScrollofAlacrity
+ ScrollofTranscendence
+ Sculpture1Artifact
+ Sculpture2Artifact
+ Scythe
+ SeaChart
+ SeahorseStatuette
+ SecretDungeonDoor
+ SecretLightWoodDoor
+ SecretStoneDoor1
+ SecretStoneDoor2
+ SecretStoneDoor3
+ SecretWoodenDoor
+ SecureTradeContainer
+ SeerRobe
+ SerpentPillar
+ SerpentPillarAddon
+ SerpentsFang
+ SewingKit
+ Sextant
+ SextantParts
+ ShadowDancerLeggings
+ ShadowIronGranite
+ ShadowIronIngot
+ ShadowIronOre
+ ShadowStrike
+ Shaft
+ ShaminoCrossbow
+ ShardThrasher
+ SheafOfHay
+ ShepherdsCrook
+ ShieldOfInvulnerability
+ ShipModelOfTheHMSCape
+ ShipwreckedItem
+ Shirt
+ Shoes
+ ShojiLantern
+ ShojiScreen
+ ShortBeard
+ ShortCabinet
+ ShortHair
+ ShortMusicStand
+ ShortPants
+ ShortSpear
+ Shovel
+ ShrineOfWisdomAddon
+ ShrineOfWisdomComponent
+ ShroudOfDeciet
+ SHTeleComponent
+ SHTeleporter
+ Shuriken
+ Sign
+ SignFacing
+ SignType
+ SilvanisFeywoodBow
+ SilverBeadNecklace
+ SilverBracelet
+ SilverEarrings
+ SilverNecklace
+ SilverRing
+ SilverWire
+ Skillet
+ SkillTeleporter
+ SkinnedDeerArtifact
+ SkinnedGoatArtifact
+ SkinningKnife
+ Skirt
+ SkullCandleArtifact
+ SkullCap
+ SkullPileAddon
+ SkullPole
+ SlabOfBacon
+ SlayerEntry
+ SlayerGroup
+ SlayerName
+ SledgeHammer
+ SmallBagBall
+ SmallBedEastAddon
+ SmallBedEastDeed
+ SmallBedSouthAddon
+ SmallBedSouthDeed
+ SmallBlueBottle
+ SmallBlueFlask
+ SmallBrownBottle
+ SmallCrate
+ SmallEmptyFlask
+ SmallEmptyPot
+ SmallFishingNetAddon
+ SmallFishingNetComponent
+ SmallFishingNetDeed
+ SmallFlask
+ SmallForgeAddon
+ SmallForgeDeed
+ SmallGreenBottle
+ SmallGreenBottle2
+ SmallPlateJingasa
+ SmallPumpkin
+ SmallRedFlask
+ SmallStretchedHideEastAddon
+ SmallStretchedHideEastDeed
+ SmallStretchedHideSouthAddon
+ SmallStretchedHideSouthDeed
+ SmallTowerSculpture
+ SmallUrn
+ SmallVioletBottle
+ SmallWatermelon
+ SmallYellowFlask
+ SmithBag
+ SmithHammer
+ SmithStone
+ SmokeBomb
+ SmoothingPlane
+ SnowGreenThornsEffect
+ Snowman
+ SnowPile
+ SnowPileDeco
+ SnowyTree
+ SolenAntHole
+ SolenAntHoleComponent
+ SongOfSamlethe
+ SongWovenMantle
+ SOS
+ SoulSeeker
+ SoulStone
+ SoulstoneFragment
+ SoulstoneFragmentToken
+ Spam
+ Spear
+ SpecialBeardDye
+ SpecialBeardDyeGump
+ SpecialDyeTub
+ SpecialFishingNet
+ SpecialHairDye
+ SpecialHairDyeGump
+ SpecialScroll
+ Spellbook
+ SpellbookType
+ SpellScroll
+ SpellweavingBook
+ SpellWovenBritches
+ SpidersSilk
+ SpikeTrap
+ SpikeTrapType
+ SpinCallback
+ SpinedHides
+ SpinedLeather
+ SpinningHourglass
+ SpinningwheelEastAddon
+ SpinningwheelEastDeed
+ SpinningwheelSouthAddon
+ SpinningwheelSouthDeed
+ SpiritOfTheTotem
+ SplitCoconut
+ SpoolOfThread
+ Spoon
+ SpoonLeft
+ SpoonRight
+ Springs
+ Spyglass
+ SquareGozaMatEastAddon
+ SquareGozaMatEastDeed
+ SquareGozaMatSouthAddon
+ SquareGozaMatSouthDeed
+ Squash
+ SquirrelFormTalisman
+ SquirrelStatueEastAddon
+ SquirrelStatueEastDeed
+ SquirrelStatueSouthAddon
+ SquirrelStatueSouthDeed
+ StaffOfPower
+ StaffOfTheMagi
+ StandardPlateKabuto
+ StandingBrokenChairAddon
+ StandingBrokenChairComponent
+ StandingBrokenChairDeed
+ StarRoomGate
+ StarSapphire
+ StatCapScroll
+ Static
+ StatueEast
+ StatueEast2
+ StatueNorth
+ StatuePegasus
+ StatuePegasus2
+ StatueSouth
+ StatueSouth2
+ StatueSouthEast
+ StatuetteDyeTub
+ StatueWest
+ StealableArtifactsSpawner
+ StitchersMittens
+ StoneAnkh
+ StoneAnkhComponent
+ StoneAnkhDeed
+ StoneChair
+ StoneFaceTrap
+ StoneFaceTrapNoDamage
+ StoneFaceTrapType
+ StoneFireplaceEastAddon
+ StoneFireplaceEastDeed
+ StoneFireplaceSouthAddon
+ StoneFireplaceSouthDeed
+ StoneFountainAddon
+ StoneMiningBook
+ StoneOvenEastAddon
+ StoneOvenEastDeed
+ StoneOvenSouthAddon
+ StoneOvenSouthDeed
+ StonePaversDark
+ StonePaversLight
+ StonePaversMedium
+ StoneStatueAddon
+ StoneStatueDeed
+ Stool
+ StopMusic
+ Stormgrip
+ StrangleScroll
+ StrawHat
+ StrengthPotion
+ StrengthScroll
+ StretchedHideArtifact
+ StrongBackpack
+ StrongBox
+ StrongBoxPuzzle
+ StrongWoodDoor
+ StuddedArms
+ StuddedBustierArms
+ StuddedChest
+ StuddedDo
+ StuddedGloves
+ StuddedGlovesOfMining
+ StuddedGorget
+ StuddedHaidate
+ StuddedHiroSode
+ StuddedLeggingsArtifact
+ StuddedLegs
+ StuddedMempo
+ StuddedSuneate
+ StuddedTunicArtifact
+ SturdyPickaxe
+ SturdyShovel
+ Subdue
+ SuitOfGoldArmorAddon
+ SuitOfGoldArmorComponent
+ SuitOfGoldArmorDeed
+ SuitOfSilverArmorAddon
+ SuitOfSilverArmorComponent
+ SuitOfSilverArmorDeed
+ SulfurousAsh
+ SummonAirElementalScroll
+ SummonCreatureScroll
+ SummonDaemonScroll
+ SummonEarthElementalScroll
+ SummonFamiliarScroll
+ SummonFeyScroll
+ SummonFiendScroll
+ SummonFireElementalScroll
+ SummonWaterElementalScroll
+ Surcoat
+ SushiPlatter
+ SushiRolls
+ SwampGreenThornsEffect
+ SwampTile
+ SwarmOfFlies
+ SweetDough
+ SwitchItem
+ SwordDisplay1NorthArtifact
+ SwordDisplay1WestArtifact
+ SwordDisplay2NorthArtifact
+ SwordDisplay2WestArtifact
+ SwordDisplay3EastArtifact
+ SwordDisplay3SouthArtifact
+ SwordDisplay4NorthArtifact
+ SwordDisplay4WestArtifact
+ SwordDisplay5NorthArtifact
+ SwordDisplay5WestArtifact
+ SwordOfTheStampede
+ SwordsOfProsperity
+ TableWithBlueClothAddon
+ TableWithBlueClothDeed
+ TableWithOrangeClothAddon
+ TableWithOrangeClothDeed
+ TableWithPurpleClothAddon
+ TableWithPurpleClothDeed
+ TableWithRedClothAddon
+ TableWithRedClothDeed
+ TailorBag
+ TailorStone
+ Taint
+ TaintedWool
+ TaleOfThreeTribes
+ TalesOfVesperVol1
+ TalismanAttribute
+ TalismanForm
+ TalismanRemoval
+ TalismanSlayer
+ TalismanSlayerName
+ TalkingToWisps
+ TallCabinet
+ TallElvenBedEastAddon
+ TallElvenBedEastDeed
+ TallElvenBedSouthAddon
+ TallElvenBedSouthDeed
+ TallMusicStand
+ TallStrawHat
+ TalonBite
+ TalonStrike
+ Tambourine
+ TambourineTassel
+ TamingDragons
+ TanBook
+ Tapestry1N
+ Tapestry2N
+ Tapestry2W
+ Tapestry3N
+ Tapestry3W
+ Tapestry4N
+ Tapestry4W
+ Tapestry5N
+ Tapestry5W
+ Tapestry6N
+ Tapestry6W
+ TapestryOfSosaria
+ TarotCardsArtifact
+ TatteredAncientMummyWrapping
+ TattsukeHakama
+ TavarasJournal1
+ TavarasJournal11
+ TavarasJournal14
+ TavarasJournal16
+ TavarasJournal16b
+ TavarasJournal17
+ TavarasJournal19
+ TavarasJournal2
+ TavarasJournal3
+ TavarasJournal6
+ TavarasJournal7
+ TavarasJournal8
+ TavarasJournal9
+ TaxidermyKit
+ TeapotNorthArtifact
+ TeapotWestArtifact
+ Tekagi
+ TelekinisisScroll
+ Teleporter
+ TeleportScroll
+ Telescope
+ Tessen
+ Tetsubo
+ TheBeserkersMaul
+ TheDestroyer
+ TheDragonSlayer
+ TheDryadBow
+ TheFight
+ TheHorselord
+ TheMostKnowledgePerson
+ TheNightReaper
+ TheRobeOfBritanniaAri
+ TheTaskmaster
+ ThickGrayStoneWall
+ ThickGrayStoneWallTypes
+ ThighBoots
+ ThinBrickWall
+ ThinBrickWallTypes
+ ThinLongsword
+ ThinStoneWall
+ ThinStoneWallTypes
+ Throne
+ ThrowingDagger
+ ThunderstormScroll
+ TillerMan
+ TinkersTools
+ TinkerTools
+ TinyRedBottle
+ TinyYellowBottle
+ TitansHammer
+ TomeOfEnlightenment
+ TomeOfLostKnowledge
+ Tongs
+ ToolKit
+ ToolQuality
+ Torch
+ TormentedChains
+ Torso
+ TotalRefreshPotion
+ TotemOfVoid
+ Tourmaline
+ TowerLanternArtifact
+ TradeGlasses
+ TrainingDummy
+ TrainingDummyEastAddon
+ TrainingDummyEastDeed
+ TrainingDummySouthAddon
+ TrainingDummySouthDeed
+ TransientItem
+ TranslatedGargoyleJournal
+ TranslocationItem
+ TrapableContainer
+ TrapType
+ TrashBarrel
+ TrashChest
+ TreasureChestDirt
+ TreasureMap
+ TreasureMapChest
+ TreasureTrinketGlasses
+ TreatiseOnAlchemy
+ TreeStump
+ TreeStumpDeed
+ TribalBerry
+ TribalMask
+ TribalPaint
+ TribalSpear
+ TricorneHat
+ TripleFanNorthArtifact
+ TripleFanWestArtifact
+ TrophyAddon
+ TrophyDeed
+ TrulyRareFish
+ Tub
+ Tunic
+ TunicOfFire
+ Turnip
+ Turquoise
+ TwoHandedAxe
+ TwoPigTails
+ UnbakedApplePie
+ UnbakedFruitPie
+ UnbakedMeatPie
+ UnbakedPeachCobbler
+ UnbakedPumpkinPie
+ UnbakedQuiche
+ UncookedCheesePizza
+ UncookedSausagePizza
+ UncutCloth
+ UnfinishedBarrel
+ UnholyBone
+ UnlockScroll
+ UnmadeBedAddon
+ UnmadeBedDeed
+ UnsettlingPortraitAddon
+ UnsettlingPortraitComponent
+ UnsettlingPortraitDeed
+ Urn1Artifact
+ Urn2Artifact
+ UtilityItem
+ ValentinesCard
+ ValentinesCardEast
+ ValentinesCardSouth
+ ValoriteGranite
+ ValoriteIngot
+ ValoriteOre
+ VampiricEmbraceScroll
+ Vandyke
+ VanityAddon
+ VanityDeed
+ Vase
+ VendorRentalContract
+ VengefulSpiritScroll
+ VeriteGranite
+ VeriteIngot
+ VeriteOre
+ VikingSword
+ Vines
+ VioletCourage
+ VioletRibbedFlask
+ VirtueBook
+ VoiceOfTheFallenKing
+ VultureHelm
+ Wakizashi
+ WallBanner
+ WallBannerComponent
+ WallBannerDeed
+ WallBlood
+ WallOfStoneScroll
+ WallSconce
+ WallTorch
+ WallTorchAddon
+ WallTorchComponent
+ WallTorchDeed
+ WandEffect
+ Waraji
+ WarAxe
+ WarCleaver
+ WarFork
+ WarHammer
+ WarMace
+ WarningItem
+ WarriorStatueEastAddon
+ WarriorStatueEastDeed
+ WarriorStatueSouthAddon
+ WarriorStatueSouthDeed
+ Wasabi
+ WasabiClumps
+ WaterBarrel
+ Watermelon
+ WaterTile
+ WaterTroughEastAddon
+ WaterTroughEastDeed
+ WaterTroughSouthAddon
+ WaterTroughSouthDeed
+ WaterVatEast
+ WaterVatSouth
+ WayPoint
+ WayPointSeqTarget
+ WeakenScroll
+ WeaknessWand
+ WeaponAbility
+ WeaponAccuracyLevel
+ WeaponAnimation
+ WeaponDamageLevel
+ WeaponDurabilityLevel
+ WeaponEngravingTool
+ WeaponQuality
+ WeaponType
+ Web
+ WheatSheaf
+ Whip
+ WhirlwindAttack
+ WhiteDriedFlowers
+ WhiteHangingLantern
+ WhiteMisoSoup
+ WhitePearl
+ WhitePoinsettia
+ WhiteScales
+ WhiteSnowflake
+ WhiteStoneWall
+ WhiteStoneWallTypes
+ WideBrimHat
+ WildfireBow
+ WildfireScroll
+ WildGirlOfTheForest
+ WildStaff
+ WindChimes
+ WindsEdge
+ Windsong
+ WindSpirit
+ WingedHelm
+ WinterGiftPackage2003
+ WitherScroll
+ WizardsGlasses
+ WizardsHat
+ WomanPortrait1
+ WomanPortrait2
+ WondrousFish
+ WoodDebris
+ WoodenBench
+ WoodenBowl
+ WoodenBowlOfCarrots
+ WoodenBowlOfCorn
+ WoodenBowlOfLettuce
+ WoodenBowlOfPeas
+ WoodenBowlOfStew
+ WoodenBowlOfTomatoSoup
+ WoodenBox
+ WoodenChair
+ WoodenChairCushion
+ WoodenChest
+ WoodenCoffinAddon
+ WoodenCoffinComponent
+ WoodenCoffinDeed
+ WoodenFootLocker
+ WoodenKiteShield
+ WoodenShield
+ WoodenThrone
+ WoodenTreasureChest
+ WoodlandArms
+ WoodlandBelt
+ WoodlandChest
+ WoodlandGloves
+ WoodlandGorget
+ WoodlandLegs
+ Wool
+ WordOfDeathScroll
+ WorldMap
+ WraithFormScroll
+ WrathOfTheDryad
+ WreathAddon
+ WreathDeed
+ WritingTable
+ YellowBeaker
+ YellowGourd
+ YellowScales
+ YewBoard
+ YewLog
+ YewWoodTable
+ Yumi
+ ZenRock1Artifact
+ ZenRock2Artifact
+ ZenRock3Artifact
+ ZoogiFungus
+ ZyronicClaw
+ + diff --git a/Docs/namespaces/Server.Menus.ItemLists.html b/Docs/namespaces/Server.Menus.ItemLists.html new file mode 100644 index 0000000..523871c --- /dev/null +++ b/Docs/namespaces/Server.Menus.ItemLists.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - Server.Menus.ItemLists + + +

Back to the namespace index

+

Server.Menus.ItemLists

+ ItemListEntry
+ ItemListMenu
+ + diff --git a/Docs/namespaces/Server.Menus.Questions.html b/Docs/namespaces/Server.Menus.Questions.html new file mode 100644 index 0000000..adbadce --- /dev/null +++ b/Docs/namespaces/Server.Menus.Questions.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Server.Menus.Questions + + +

Back to the namespace index

+

Server.Menus.Questions

+ QuestionMenu
+ StuckMenu
+ StuckMenuEntry
+ + diff --git a/Docs/namespaces/Server.Menus.html b/Docs/namespaces/Server.Menus.html new file mode 100644 index 0000000..db6c72d --- /dev/null +++ b/Docs/namespaces/Server.Menus.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Server.Menus + + +

Back to the namespace index

+

Server.Menus

+ IMenu
+ + diff --git a/Docs/namespaces/Server.Misc.html b/Docs/namespaces/Server.Misc.html new file mode 100644 index 0000000..d4c7cd4 --- /dev/null +++ b/Docs/namespaces/Server.Misc.html @@ -0,0 +1,72 @@ + + + RunUO Documentation - Class Overview - Server.Misc + + +

Back to the namespace index

+

Server.Misc

+ AccountHandler
+ AccountPrompt
+ AckPartyLocations
+ Animations
+ AttackMessage
+ AutoRestart
+ AutoSave
+ Broadcasts
+ CharacterCreation
+ Cleanup
+ ClientVerification
+ CrashGuard
+ DataPath
+ DFAlgorithm
+ DispellableAttribute
+ DispellableFieldAttribute
+ DoEffect_Callback
+ Email
+ FameEntry
+ Fastwalk
+ FoodDecayTimer
+ Geometry
+ GiftGiver
+ GiftGiving
+ GiftResult
+ IHSFlags
+ InhumanSpeech
+ IPLimiter
+ KarmaEntry
+ Keywords
+ LanguageStatistics
+ LoginStats
+ MapDefinitions
+ NameVerification
+ NotorietyHandlers
+ Paperdoll
+ PasswordProtection
+ ProfanityAction
+ ProfanityProtection
+ Profile
+ ProtocolExtension
+ ProtocolExtensions
+ RaceDefinitions
+ RegenRates
+ RenameRequests
+ ServerList
+ ShardPoller
+ ShardPollGump
+ ShardPollOption
+ ShardPollPrompt
+ SkillCheck
+ StatusPage
+ Strandedness
+ TestCenter
+ Titles
+ TreasuresOfTokuno
+ TreasuresOfTokunoEra
+ TreasuresOfTokunoPersistance
+ Weather
+ WeatherMap
+ WeightOverloading
+ WelcomeTimer
+ WinterGiftGiver2004
+ + diff --git a/Docs/namespaces/Server.Mobiles.html b/Docs/namespaces/Server.Mobiles.html new file mode 100644 index 0000000..f6c3d94 --- /dev/null +++ b/Docs/namespaces/Server.Mobiles.html @@ -0,0 +1,674 @@ + + + RunUO Documentation - Class Overview - Server.Mobiles + + +

Back to the namespace index

+

Server.Mobiles

+ AbandonEscortEntry
+ AbysmalHorror
+ AcceptEscortEntry
+ ActionType
+ Actor
+ AgapiteElemental
+ AirElemental
+ AIType
+ Alchemist
+ Alligator
+ AncientLich
+ AncientWyrm
+ AnimalAI
+ AnimalBuyInfo
+ AnimalTrainer
+ AntLion
+ ArcaneDaemon
+ ArcaneFey
+ ArcaneFiend
+ ArcherAI
+ ArcherGuard
+ Architect
+ ArcticOgreLord
+ Armorer
+ Artist
+ AskDestinationEntry
+ BakeKitsune
+ Baker
+ Balron
+ Banker
+ Bard
+ BardGuildmaster
+ Barkeeper
+ BarkeeperGump
+ BarkeeperRumor
+ BarkeeperTitleGump
+ Barracoon
+ BaseAI
+ BaseChampion
+ BaseCreature
+ BaseEnraged
+ BaseEscortable
+ BaseFamiliar
+ BaseGuard
+ BaseGuildmaster
+ BaseHealer
+ BaseMount
+ BaseShieldGuard
+ BaseTalismanSummon
+ BaseVendor
+ BaseWarHorse
+ Beekeeper
+ Beetle
+ BerserkAI
+ Betrayer
+ BeverageBuyInfo
+ Bird
+ BlackBear
+ Blacksmith
+ BlacksmithGuildmaster
+ BlackSolenInfiltratorQueen
+ BlackSolenInfiltratorWarrior
+ BlackSolenQueen
+ BlackSolenWarrior
+ BlackSolenWorker
+ BladeSpirits
+ BlockMountType
+ BloodElemental
+ Boar
+ Bogle
+ Bogling
+ BogThing
+ BoneDemon
+ BoneKnight
+ BoneMagi
+ Bowyer
+ BrideGroom
+ Brigand
+ BronzeElemental
+ BrownBear
+ Bull
+ BullFrog
+ Butcher
+ BuyItemResponse
+ BuyItemState
+ BuyItemStateComparer
+ CapturedHordeMinion
+ Carpenter
+ Cat
+ Centaur
+ ChangeHairHueEntry
+ ChangeHairHueGump
+ ChangeHairstyleEntry
+ ChangeHairstyleGump
+ ChangeRumorKeywordPrompt
+ ChangeRumorMessagePrompt
+ ChangeTipMessagePrompt
+ ChaosDaemon
+ ChaosDragoon
+ ChaosDragoonElite
+ ChaosGuard
+ CharacterStatue
+ CharacterStatueDeed
+ CharacterStatueTarget
+ ChargerOfTheFallen
+ Chicken
+ Clone
+ CloneAI
+ Cobbler
+ CoMWarHorse
+ Cook
+ CopperElemental
+ Corpser
+ CorrosiveSlime
+ CorruptedSoul
+ Cougar
+ Cow
+ Crane
+ CrystalElemental
+ Cursed
+ CuSidhe
+ CustomHairstylist
+ Cyclops
+ Daemon
+ DamageStore
+ DarknightCreeper
+ DarkWisp
+ DarkWolfFamiliar
+ DeathAdder
+ DeathwatchBeetle
+ DeathwatchBeetleHatchling
+ DeepSeaSerpent
+ DemonKnight
+ DesertOstard
+ Devourer
+ DireWolf
+ Dog
+ Dolphin
+ Doppleganger
+ Dragon
+ Drake
+ DreadSpider
+ DullCopperElemental
+ Dummy
+ DummyAssassin
+ DummyFence
+ DummyHealer
+ DummyMace
+ DummyNox
+ DummyStun
+ DummySuper
+ DummySword
+ DummyTheif
+ Eagle
+ EarthElemental
+ Efreet
+ ElderGazer
+ EliteNinja
+ EnergyVortex
+ EnragedBlackBear
+ EnragedEagle
+ EnragedHart
+ EnragedHind
+ EnragedRabbit
+ EnslavedGargoyle
+ EscortableMage
+ EscortDestinationInfo
+ EtherealBeetle
+ EtherealCuSidhe
+ EtherealHiryu
+ EtherealHorse
+ EtherealKirin
+ EtherealLlama
+ EtherealMount
+ EtherealOstard
+ EtherealReptalon
+ EtherealRidgeback
+ EtherealSwampDragon
+ EtherealUnicorn
+ EtherealWarrior
+ Ettin
+ EvilHealer
+ EvilMage
+ EvilMageLord
+ EvilWanderingHealer
+ Executioner
+ ExodusMinion
+ ExodusOverseer
+ FanDancer
+ Farmer
+ FerelTreefellow
+ Ferret
+ FetidEssence
+ FightMode
+ FireBeetle
+ FireElemental
+ FireGargoyle
+ FireSteed
+ FisherGuildmaster
+ Fisherman
+ FleshGolem
+ FleshRenderer
+ FoodType
+ ForestOstard
+ FortuneTeller
+ FrenziedOstard
+ FriendlyNameAttribute
+ FrostOoze
+ FrostSpider
+ FrostTroll
+ Furtrader
+ Gaman
+ Gargoyle
+ GargoyleDestroyer
+ GargoyleEnforcer
+ Gazer
+ GazerLarva
+ GenericBuyInfo
+ GenericSellInfo
+ Ghoul
+ GiantBlackWidow
+ GiantIceWorm
+ GiantRat
+ GiantSerpent
+ GiantSpider
+ GiantToad
+ Gibberling
+ Glassblower
+ GlobalTownCrierEntryList
+ Goat
+ GoldenElemental
+ Golem
+ GolemController
+ GolemCrafter
+ GoreFiend
+ Gorilla
+ GreaterDragon
+ GreaterMongbat
+ GreatHart
+ GreyWolf
+ GrimmochDrummel
+ GrizzledMare
+ GrizzlyBear
+ Guardian
+ Gypsy
+ GypsyAnimalTrainer
+ GypsyBanker
+ GypsyMaiden
+ HairStylist
+ HairstylistBuyGump
+ HairstylistBuyInfo
+ HarborMaster
+ Harpy
+ Harrower
+ HarrowerTentacles
+ HeadlessOne
+ Healer
+ HealerAI
+ HealerGuildmaster
+ HellCat
+ HellHound
+ HellSteed
+ Herbalist
+ HideType
+ Hind
+ Hiryu
+ HolyFamiliar
+ HolyMage
+ HolySteed
+ HordeMinion
+ HordeMinionFamiliar
+ Horse
+ IceElemental
+ IceFiend
+ IceSerpent
+ IceSnake
+ IharaSoko
+ Ilhenir
+ IMount
+ IMountItem
+ Imp
+ Impaler
+ InnKeeper
+ InterredGrizzle
+ IronWorker
+ ITownCrierEntryList
+ JackRabbit
+ Jeweler
+ Juggernaut
+ JukaLord
+ JukaMage
+ JukaWarrior
+ Jwilson
+ Kappa
+ KazeKemono
+ KeeperOfChivalry
+ KhaldunRevenant
+ KhaldunSummoner
+ KhaldunZealot
+ Kirin
+ Kraken
+ LadyOfTheSnow
+ LavaLizard
+ LavaSerpent
+ LavaSnake
+ LeatherWorker
+ LesserHiryu
+ Leviathan
+ Lich
+ LichLord
+ Lizardman
+ Llama
+ LordOaks
+ LoyaltyTimer
+ LysanderGathenwale
+ Mage
+ MageAI
+ MageGuildmaster
+ ManageBarkeeperEntry
+ Mapmaker
+ MeatType
+ MeerCaptain
+ MeerEternal
+ MeerMage
+ MeerWarrior
+ MeleeAI
+ Mephitis
+ Meraktus
+ Merchant
+ MerchantGuildmaster
+ Messenger
+ Miller
+ MinaxWarHorse
+ Miner
+ MinerGuildmaster
+ Minotaur
+ MinotaurCaptain
+ MinotaurScout
+ Minter
+ MLDryad
+ Moloch
+ Mongbat
+ Monk
+ MorgBergen
+ MoundOfMaggots
+ MountainGoat
+ MountItem
+ Mummy
+ NatureFury
+ Neira
+ Nightmare
+ Ninja
+ Noble
+ NpcGuild
+ Ogre
+ OgreLord
+ Oni
+ OphidianArchmage
+ OphidianKnight
+ OphidianMage
+ OphidianMatriarch
+ OphidianWarrior
+ Orc
+ OrcBomber
+ OrcBrute
+ OrcCaptain
+ OrcishLord
+ OrcishMage
+ OrderGuard
+ OrderType
+ PackAnimal
+ PackAnimalBackpackEntry
+ PackHorse
+ PackInstinct
+ PackLlama
+ Panther
+ Paragon
+ Parrot
+ PatchworkSkeleton
+ Peasant
+ PestilentBandage
+ Phoenix
+ Pig
+ Pixie
+ PlagueBeast
+ PlagueBeastLord
+ PlagueSpawn
+ PlayerBarkeeper
+ PlayerFlag
+ PlayerMobile
+ PlayerVendor
+ PlayerVendorPlaceholder
+ PlayerVendorTargetAttribute
+ PoisonElemental
+ PolarBear
+ PredatorAI
+ PredatorHellCat
+ PresetMapBuyInfo
+ PricedHealer
+ Provisioner
+ Quagmire
+ Rabbit
+ RagingGrizzlyBear
+ RaiJu
+ Rancher
+ Ranger
+ RangerGuildmaster
+ Rat
+ Ratman
+ RatmanArcher
+ RatmanMage
+ Ravager
+ RealEstateBroker
+ Reaper
+ RedSolenInfiltratorQueen
+ RedSolenInfiltratorWarrior
+ RedSolenQueen
+ RedSolenWarrior
+ RedSolenWorker
+ RentedVendor
+ Reptalon
+ RestlessSoul
+ Revenant
+ RevenantLion
+ RidableLlama
+ RideablePolarBear
+ Ridgeback
+ Rikktor
+ Ronin
+ RottingCorpse
+ RuneBeetle
+ Samurai
+ SandVortex
+ Satyr
+ Savage
+ SavageRider
+ SavageRidgeback
+ SavageShaman
+ SBAlchemist
+ SBAnimalTrainer
+ SBArchitect
+ SBAxeWeapon
+ SBBaker
+ SBBanker
+ SBBard
+ SBBarkeeper
+ SBBeekeeper
+ SBBlacksmith
+ SBBowyer
+ SBButcher
+ SBCarpenter
+ SBChainmailArmor
+ SBCobbler
+ SBCook
+ SBFarmer
+ SBFisherman
+ SBFortuneTeller
+ SBFurtrader
+ SBGlassblower
+ SBHairStylist
+ SBHealer
+ SBHelmetArmor
+ SBHerbalist
+ SBHolyMage
+ SBHouseDeed
+ SBInfo
+ SBInnKeeper
+ SBJewel
+ SBKeeperOfChivalry
+ SBKnifeWeapon
+ SBLeatherArmor
+ SBLeatherWorker
+ SBMaceWeapon
+ SBMage
+ SBMapmaker
+ SBMetalShields
+ SBMiller
+ SBMiner
+ SBMonk
+ SBPlateArmor
+ SBPlayerBarkeeper
+ SBPoleArmWeapon
+ SBProvisioner
+ SBRancher
+ SBRangedWeapon
+ SBRanger
+ SBRealEstateBroker
+ SBRingmailArmor
+ SBScribe
+ SBSEArmor
+ SBSEBowyer
+ SBSECarpenter
+ SBSECook
+ SBSEFood
+ SBSEHats
+ SBSELeatherArmor
+ SBSEWeapons
+ SBShipwright
+ SBSmithTools
+ SBSpearForkWeapon
+ SBStavesWeapon
+ SBStoneCrafter
+ SBStuddedArmor
+ SBSwordWeapon
+ SBTailor
+ SBTanner
+ SBTavernKeeper
+ SBThief
+ SBTinker
+ SBVagabond
+ SBVarietyDealer
+ SBVeterinarian
+ SBWaiter
+ SBWeaponSmith
+ SBWeaver
+ SBWoodenShields
+ ScaledSwampDragon
+ ScaleType
+ Scorpion
+ Scribe
+ Sculptor
+ SeaHorse
+ SeaSerpent
+ SeekerOfAdventure
+ SellItemResponse
+ SellItemState
+ Semidar
+ Serado
+ SerpentineDragon
+ ServantOfSemidar
+ Sewerrat
+ Shade
+ ShadowFiend
+ ShadowIronElemental
+ ShadowKnight
+ ShadowWisp
+ ShadowWispFamiliar
+ ShadowWyrm
+ Sheep
+ Shipwright
+ Silvani
+ SilverSerpent
+ SilverSteed
+ SkeletalDragon
+ SkeletalKnight
+ SkeletalMage
+ SkeletalMount
+ Skeleton
+ SkitteringHopper
+ Slime
+ SLWarHorse
+ Snake
+ SnowElemental
+ SnowLeopard
+ SolenFriendship
+ SolenHelper
+ SpawnedOrcishLord
+ Spawner
+ SpawnerGump
+ SpawnerType
+ SpectralArmour
+ Spectre
+ Squirrel
+ StainedOoze
+ StatueMaterial
+ StatuePose
+ StatueType
+ StoneCrafter
+ StoneGargoyle
+ StoneHarpy
+ StrongMongbat
+ Succubus
+ SummonedAirElemental
+ SummonedAntLion
+ SummonedArcticOgreLord
+ SummonedBakeKitsune
+ SummonedBogling
+ SummonedBullFrog
+ SummonedChicken
+ SummonedCow
+ SummonedDaemon
+ SummonedDoppleganger
+ SummonedEarthElemental
+ SummonedFireElemental
+ SummonedFrostSpider
+ SummonedGreatHart
+ SummonedLavaSerpent
+ SummonedOrcBrute
+ SummonedPanther
+ SummonedSheep
+ SummonedSkeletalKnight
+ SummonedVorpalBunny
+ SummonedWailingBanshee
+ SummonedWaterElemental
+ SwampDragon
+ SwampTentacle
+ Tailor
+ TailorGuildmaster
+ Tanner
+ TavaraSewel
+ TavernKeeper
+ TBWarHorse
+ TerathanAvenger
+ TerathanDrone
+ TerathanMatriarch
+ TerathanWarrior
+ Thief
+ ThiefAI
+ ThiefGuildmaster
+ TimberWolf
+ Tinker
+ TinkerGuildmaster
+ Titan
+ TormentedMinotaur
+ TownCrier
+ TownCrierDurationPrompt
+ TownCrierEntry
+ TownCrierGump
+ TownCrierLinesPrompt
+ ToxicElemental
+ Treefellow
+ Troglodyte
+ Troll
+ TropicalBird
+ TsukiWolf
+ Twaulo
+ UnholyFamiliar
+ UnholySteed
+ Unicorn
+ Vagabond
+ ValoriteElemental
+ VampireBat
+ VampireBatFamiliar
+ VarietyDealer
+ VendorAI
+ VendorBackpack
+ VendorInventory
+ VendorItem
+ VendorRentalDuration
+ VendorShoeType
+ VeriteElemental
+ Veterinarian
+ VorpalBunny
+ WailingBanshee
+ Waiter
+ Walrus
+ Wanderer
+ WandererOfTheVoid
+ WanderingHealer
+ WarriorGuard
+ WarriorGuildmaster
+ WaterElemental
+ Weaponsmith
+ Weaver
+ WhippingVine
+ WhiteWolf
+ WhiteWyrm
+ Wisp
+ Wraith
+ Wyvern
+ Yamandon
+ YomotsuElder
+ YomotsuPriest
+ YomotsuWarrior
+ Zombie
+ + diff --git a/Docs/namespaces/Server.Movement.html b/Docs/namespaces/Server.Movement.html new file mode 100644 index 0000000..94024c3 --- /dev/null +++ b/Docs/namespaces/Server.Movement.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Server.Movement + + +

Back to the namespace index

+

Server.Movement

+ IMovementImpl
+ Movement
+ MovementImpl
+ + diff --git a/Docs/namespaces/Server.Multis.Deeds.html b/Docs/namespaces/Server.Multis.Deeds.html new file mode 100644 index 0000000..93f4230 --- /dev/null +++ b/Docs/namespaces/Server.Multis.Deeds.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - Server.Multis.Deeds + + +

Back to the namespace index

+

Server.Multis.Deeds

+ BrickHouseDeed
+ CastleDeed
+ FieldStoneHouseDeed
+ HouseDeed
+ HousePlacementTarget
+ KeepDeed
+ LargeMarbleDeed
+ LargePatioDeed
+ LogCabinDeed
+ MarbleWorkshopDeed
+ SandstonePatioDeed
+ SmallBrickHouseDeed
+ SmallTowerDeed
+ StonePlasterHouseDeed
+ StoneWorkshopDeed
+ ThatchedRoofCottageDeed
+ TowerDeed
+ TwoStoryStonePlasterHouseDeed
+ TwoStoryWoodPlasterHouseDeed
+ VillaDeed
+ WoodHouseDeed
+ WoodPlasterHouseDeed
+ + diff --git a/Docs/namespaces/Server.Multis.html b/Docs/namespaces/Server.Multis.html new file mode 100644 index 0000000..f743d16 --- /dev/null +++ b/Docs/namespaces/Server.Multis.html @@ -0,0 +1,90 @@ + + + RunUO Documentation - Class Overview - Server.Multis + + +

Back to the namespace index

+

Server.Multis

+ BankerCamp
+ BaseBoat
+ BaseBoatDeed
+ BaseCamp
+ BaseDockedBoat
+ BaseHouse
+ BeginHouseCustomization
+ BoatOrder
+ BrigandCamp
+ Castle
+ ComponentVerification
+ ConfirmCommitGump
+ ConfirmDryDockGump
+ CoOwnerTarget
+ DataRecord
+ DecayLevel
+ DecayType
+ DesignContext
+ DesignState
+ DesignStateDetailed
+ DesignStateGeneral
+ EndHouseCustomization
+ FoundationType
+ GuildHouse
+ HealerCamp
+ HouseAccessTarget
+ HouseBanTarget
+ HouseFoundation
+ HouseFriendTarget
+ HouseKickTarget
+ HouseOwnerTarget
+ HousePlacement
+ HousePlacementResult
+ HouseSign
+ Keep
+ LargeBoat
+ LargeBoatDeed
+ LargeDockedBoat
+ LargeDockedDragonBoat
+ LargeDragonBoat
+ LargeDragonBoatDeed
+ LargeMarbleHouse
+ LargePatioHouse
+ LizardmenCamp
+ LockableBarrel
+ LockdownTarget
+ LogCabin
+ MageCamp
+ MediumBoat
+ MediumBoatDeed
+ MediumDockedBoat
+ MediumDockedDragonBoat
+ MediumDragonBoat
+ MediumDragonBoatDeed
+ MovingCrate
+ OrcCamp
+ PackingBox
+ PreviewHouse
+ RatCamp
+ RelocatedEntity
+ RenameBoatPrompt
+ SandStonePatio
+ SecureAccessResult
+ SecureInfo
+ SecureLevel
+ SecureTarget
+ SetSecureLevelEntry
+ SmallBoat
+ SmallBoatDeed
+ SmallDockedBoat
+ SmallDockedDragonBoat
+ SmallDragonBoat
+ SmallDragonBoatDeed
+ SmallOldHouse
+ SmallShop
+ SmallTower
+ Spreadsheet
+ TempNoHousingRegion
+ Tower
+ TwoStoryHouse
+ TwoStoryVilla
+ + diff --git a/Docs/namespaces/Server.Network.html b/Docs/namespaces/Server.Network.html new file mode 100644 index 0000000..2fe4573 --- /dev/null +++ b/Docs/namespaces/Server.Network.html @@ -0,0 +1,201 @@ + + + RunUO Documentation - Class Overview - Server.Network + + +

Back to the namespace index

+

Server.Network

+ AccountLoginAck
+ AccountLoginRej
+ AffixType
+ ALRReason
+ AsciiMessage
+ AssistVersionReq
+ AttributeNormalizer
+ BoltEffect
+ BondedStatus
+ BufferPool
+ ByteQueue
+ CancelArrow
+ CancelArrowHS
+ CancelTarget
+ CapacityExceededException
+ ChangeCharacter
+ ChangeCombatant
+ ChangeUpdateRange
+ CharacterList
+ CharacterListOld
+ CharacterListUpdate
+ CityInfo
+ ClearWeaponAbility
+ ClientVersionReq
+ CloseGump
+ CloseSecureTrade
+ CMEFlags
+ Compression
+ Compressor32
+ Compressor64
+ CompressorUnix32
+ CompressorUnix64
+ ContainerContent
+ ContainerContent6017
+ ContainerContentUpdate
+ ContainerContentUpdate6017
+ ContainerDisplay
+ ContainerDisplayHS
+ CorpseContent
+ CorpseEquip
+ CurrentTime
+ DamagePacket
+ DamagePacketOld
+ DeathAnimation
+ DeathStatus
+ DeleteResult
+ DeleteResultType
+ DisplayBuyList
+ DisplayBuyListHS
+ DisplayContextMenu
+ DisplayEquipmentInfo
+ DisplayGump
+ DisplayGumpFast
+ DisplayGumpPacked
+ DisplayHelpTopic
+ DisplayHuePicker
+ DisplayItemListMenu
+ DisplayPaperdoll
+ DisplayProfile
+ DisplayQuestionMenu
+ DisplaySecureTrade
+ DisplaySignGump
+ DisplaySpellbook
+ DisplaySpellbookHS
+ DragEffect
+ EffectType
+ EncodedPacketHandler
+ EncodedReader
+ EndVendorBuy
+ EndVendorSell
+ EquipInfoAttribute
+ EquipmentInfo
+ EquipUpdate
+ FollowMessage
+ GlobalLightLevel
+ GodModeReply
+ GQCount
+ GQRequest
+ HealthbarPoison
+ HealthbarYellow
+ HuedEffect
+ ICompressor
+ IGumpWriter
+ InvalidMapEnable
+ IPacketEncoder
+ LaunchBrowser
+ LiftRej
+ Listener
+ LocationEffect
+ LocationParticleEffect
+ LoginComplete
+ LoginConfirm
+ LogoutAck
+ LRReason
+ MapChange
+ MapPatches
+ MessageLocalized
+ MessageLocalizedAffix
+ MessagePump
+ MessageType
+ MobileAnimation
+ MobileAttributes
+ MobileAttributesN
+ MobileHits
+ MobileHitsN
+ MobileIncoming
+ MobileIncomingOld
+ MobileMana
+ MobileManaN
+ MobileMoving
+ MobileMovingOld
+ MobileName
+ MobileStam
+ MobileStamN
+ MobileStatus
+ MobileStatusCompact
+ MobileStatusExtended
+ MobileUpdate
+ MobileUpdateOld
+ MovementAck
+ MovementRej
+ MovingEffect
+ MovingParticleEffect
+ MultiTargetReq
+ MultiTargetReqHS
+ NetState
+ NetStateCreatedCallback
+ NewMobileAnimation
+ NewSpellbookContent
+ NullFastwalkStack
+ ObjectHelpResponse
+ OnEncodedPacketReceive
+ OnPacketReceive
+ Packet
+ PacketHandler
+ PacketHandlers
+ PacketReader
+ PacketWriter
+ ParticleEffect
+ PathfindMessage
+ PersonalLightLevel
+ PersonalLightLevelZero
+ PingAck
+ PlayerMove
+ PlayMusic
+ PlayServerAck
+ PlaySound
+ PMMessage
+ PopupMessage
+ RemoveItem
+ RemoveMobile
+ ScrollMessage
+ SeasonChange
+ SecureTradeEquip
+ SecureTradeEquip6017
+ SendQueue
+ Sequence
+ ServerChange
+ ServerInfo
+ SetArrow
+ SetArrowHS
+ SetWarMode
+ SkillChange
+ SkillUpdate
+ SpeedControl
+ SpellbookContent
+ SpellbookContent6017
+ StatLockInfo
+ SupportedFeatures
+ Swing
+ TargetEffect
+ TargetParticleEffect
+ TargetReq
+ ThrottlePacketCallback
+ ToggleSpecialAbility
+ TripTimeResponse
+ UnicodeMessage
+ UnicodePrompt
+ UnkD3
+ UpdateSecureTrade
+ UpdateStatueAnimation
+ UTripTimeResponse
+ VendorBuyContent
+ VendorBuyContent6017
+ VendorBuyList
+ VendorSellList
+ Weather
+ WorldItem
+ WorldItemHS
+ WorldItemSA
+ ZLibError
+ ZLibQuality
+ + diff --git a/Docs/namespaces/Server.PathAlgorithms.FastAStar.html b/Docs/namespaces/Server.PathAlgorithms.FastAStar.html new file mode 100644 index 0000000..3d94027 --- /dev/null +++ b/Docs/namespaces/Server.PathAlgorithms.FastAStar.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - Server.PathAlgorithms.FastAStar + + +

Back to the namespace index

+

Server.PathAlgorithms.FastAStar

+ FastAStarAlgorithm
+ PathNode
+ + diff --git a/Docs/namespaces/Server.PathAlgorithms.SlowAStar.html b/Docs/namespaces/Server.PathAlgorithms.SlowAStar.html new file mode 100644 index 0000000..2d155c6 --- /dev/null +++ b/Docs/namespaces/Server.PathAlgorithms.SlowAStar.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - Server.PathAlgorithms.SlowAStar + + +

Back to the namespace index

+

Server.PathAlgorithms.SlowAStar

+ PathNode
+ SlowAStarAlgorithm
+ + diff --git a/Docs/namespaces/Server.PathAlgorithms.html b/Docs/namespaces/Server.PathAlgorithms.html new file mode 100644 index 0000000..bf28f16 --- /dev/null +++ b/Docs/namespaces/Server.PathAlgorithms.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Server.PathAlgorithms + + +

Back to the namespace index

+

Server.PathAlgorithms

+ PathAlgorithm
+ + diff --git a/Docs/namespaces/Server.Prompts.html b/Docs/namespaces/Server.Prompts.html new file mode 100644 index 0000000..d33fb49 --- /dev/null +++ b/Docs/namespaces/Server.Prompts.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - Server.Prompts + + +

Back to the namespace index

+

Server.Prompts

+ Prompt
+ RenamePrompt
+ + diff --git a/Docs/namespaces/Server.Regions.html b/Docs/namespaces/Server.Regions.html new file mode 100644 index 0000000..f1a1dee --- /dev/null +++ b/Docs/namespaces/Server.Regions.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Server.Regions + + +

Back to the namespace index

+

Server.Regions

+ BaseRegion
+ DungeonRegion
+ GreenAcres
+ GuardedRegion
+ HouseRaffleRegion
+ HouseRegion
+ Jail
+ NoHousingRegion
+ SpawnDefinition
+ SpawnEntry
+ SpawnGroup
+ SpawnGroupElement
+ SpawnItem
+ SpawnMobile
+ SpawnPersistence
+ SpawnTreasureChest
+ SpawnType
+ SpawnZLevel
+ TownRegion
+ + diff --git a/Docs/namespaces/Server.RemoteAdmin.html b/Docs/namespaces/Server.RemoteAdmin.html new file mode 100644 index 0000000..ba897e7 --- /dev/null +++ b/Docs/namespaces/Server.RemoteAdmin.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Server.RemoteAdmin + + +

Back to the namespace index

+

Server.RemoteAdmin

+ AccountSearchResults
+ AdminCompressedPacket
+ AdminNetwork
+ ConsoleData
+ EventTextWriter
+ Login
+ LoginResponse
+ MessageBoxMessage
+ RemoteAdminHandlers
+ ServerInfo
+ UOGInfo
+ + diff --git a/Docs/namespaces/Server.SkillHandlers.html b/Docs/namespaces/Server.SkillHandlers.html new file mode 100644 index 0000000..c9c154a --- /dev/null +++ b/Docs/namespaces/Server.SkillHandlers.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - Server.SkillHandlers + + +

Back to the namespace index

+

Server.SkillHandlers

+ Anatomy
+ AnimalLore
+ AnimalLoreGump
+ AnimalTaming
+ ArmsLore
+ Begging
+ DetectHidden
+ Discordance
+ EvalInt
+ ForensicEvaluation
+ Hiding
+ Inscribe
+ Meditation
+ Peacemaking
+ Poisoning
+ Provocation
+ RemoveTrap
+ Snooping
+ SpiritSpeak
+ Stealing
+ Stealth
+ StolenItem
+ TasteID
+ TrackArrow
+ Tracking
+ TrackTimer
+ TrackTypeDelegate
+ TrackWhatGump
+ TrackWhoGump
+ + diff --git a/Docs/namespaces/Server.Spells.Bushido.html b/Docs/namespaces/Server.Spells.Bushido.html new file mode 100644 index 0000000..2a7d56d --- /dev/null +++ b/Docs/namespaces/Server.Spells.Bushido.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Bushido + + +

Back to the namespace index

+

Server.Spells.Bushido

+ Confidence
+ CounterAttack
+ Evasion
+ HonorableExecution
+ LightningStrike
+ MomentumStrike
+ SamuraiSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Chivalry.html b/Docs/namespaces/Server.Spells.Chivalry.html new file mode 100644 index 0000000..b2f4652 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Chivalry.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Chivalry + + +

Back to the namespace index

+

Server.Spells.Chivalry

+ CleanseByFireSpell
+ CloseWoundsSpell
+ ConsecrateWeaponSpell
+ DispelEvilSpell
+ DivineFurySpell
+ EnemyOfOneSpell
+ HolyLightSpell
+ NobleSacrificeSpell
+ PaladinSpell
+ RemoveCurseSpell
+ SacredJourneySpell
+ + diff --git a/Docs/namespaces/Server.Spells.Eighth.html b/Docs/namespaces/Server.Spells.Eighth.html new file mode 100644 index 0000000..08541f2 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Eighth.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Eighth + + +

Back to the namespace index

+

Server.Spells.Eighth

+ AirElementalSpell
+ EarthElementalSpell
+ EarthquakeSpell
+ EnergyVortexSpell
+ FireElementalSpell
+ ResurrectionSpell
+ SummonDaemonSpell
+ WaterElementalSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Fifth.html b/Docs/namespaces/Server.Spells.Fifth.html new file mode 100644 index 0000000..84ddbfe --- /dev/null +++ b/Docs/namespaces/Server.Spells.Fifth.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Fifth + + +

Back to the namespace index

+

Server.Spells.Fifth

+ BladeSpiritsSpell
+ DispelFieldSpell
+ IncognitoSpell
+ MagicReflectSpell
+ MindBlastSpell
+ ParalyzeSpell
+ PoisonFieldSpell
+ SummonCreatureSpell
+ + diff --git a/Docs/namespaces/Server.Spells.First.html b/Docs/namespaces/Server.Spells.First.html new file mode 100644 index 0000000..acaa34b --- /dev/null +++ b/Docs/namespaces/Server.Spells.First.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Server.Spells.First + + +

Back to the namespace index

+

Server.Spells.First

+ ClumsySpell
+ CreateFoodSpell
+ FeeblemindSpell
+ FoodInfo
+ HealSpell
+ MagicArrowSpell
+ NightSightSpell
+ ReactiveArmorSpell
+ WeakenSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Fourth.html b/Docs/namespaces/Server.Spells.Fourth.html new file mode 100644 index 0000000..d064ea9 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Fourth.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Fourth + + +

Back to the namespace index

+

Server.Spells.Fourth

+ ArchCureSpell
+ ArchProtectionSpell
+ CurseSpell
+ FireFieldSpell
+ GreaterHealSpell
+ LightningSpell
+ ManaDrainSpell
+ RecallSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Necromancy.html b/Docs/namespaces/Server.Spells.Necromancy.html new file mode 100644 index 0000000..b4222a7 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Necromancy.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Necromancy + + +

Back to the namespace index

+

Server.Spells.Necromancy

+ AnimateDeadSpell
+ BloodOathSpell
+ CorpseSkinSpell
+ CurseWeaponSpell
+ EvilOmenSpell
+ ExorcismSpell
+ HorrificBeastSpell
+ LichFormSpell
+ MindRotSpell
+ MRBucket
+ MRExpireTimer
+ NecromancerSpell
+ PainSpikeSpell
+ PoisonStrikeSpell
+ StrangleSpell
+ SummonFamiliarEntry
+ SummonFamiliarGump
+ SummonFamiliarSpell
+ TransformationSpell
+ VampiricEmbraceSpell
+ VengefulSpiritSpell
+ WitherSpell
+ WraithFormSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Ninjitsu.html b/Docs/namespaces/Server.Spells.Ninjitsu.html new file mode 100644 index 0000000..1d3b268 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Ninjitsu.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Ninjitsu + + +

Back to the namespace index

+

Server.Spells.Ninjitsu

+ AnimalForm
+ AnimalFormContext
+ AnimalFormTimer
+ Backstab
+ DeathStrike
+ FocusAttack
+ KiAttack
+ MirrorImage
+ NinjaSpell
+ Shadowjump
+ SurpriseAttack
+ + diff --git a/Docs/namespaces/Server.Spells.Second.html b/Docs/namespaces/Server.Spells.Second.html new file mode 100644 index 0000000..7aa2add --- /dev/null +++ b/Docs/namespaces/Server.Spells.Second.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Second + + +

Back to the namespace index

+

Server.Spells.Second

+ AgilitySpell
+ CunningSpell
+ CureSpell
+ HarmSpell
+ MagicTrapSpell
+ ProtectionSpell
+ RemoveTrapSpell
+ StrengthSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Seventh.html b/Docs/namespaces/Server.Spells.Seventh.html new file mode 100644 index 0000000..e1f7081 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Seventh.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Seventh + + +

Back to the namespace index

+

Server.Spells.Seventh

+ ChainLightningSpell
+ EnergyFieldSpell
+ FlameStrikeSpell
+ GateTravelSpell
+ ManaVampireSpell
+ MassDispelSpell
+ MeteorSwarmSpell
+ PolymorphSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Sixth.html b/Docs/namespaces/Server.Spells.Sixth.html new file mode 100644 index 0000000..8f92d42 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Sixth.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Sixth + + +

Back to the namespace index

+

Server.Spells.Sixth

+ DispelSpell
+ EnergyBoltSpell
+ ExplosionSpell
+ InvisibilitySpell
+ MarkSpell
+ MassCurseSpell
+ ParalyzeFieldSpell
+ RevealSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Spellweaving.html b/Docs/namespaces/Server.Spells.Spellweaving.html new file mode 100644 index 0000000..0db9078 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Spellweaving.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Spellweaving + + +

Back to the namespace index

+

Server.Spells.Spellweaving

+ ArcaneCircleSpell
+ ArcaneForm
+ ArcaneSummon<T>
+ ArcanistSpell
+ AttuneWeaponSpell
+ EssenceOfWindSpell
+ EtherealVoyageSpell
+ GiftOfLifeSpell
+ GiftOfRenewalSpell
+ NatureFurySpell
+ ReaperFormSpell
+ SummonFeySpell
+ SummonFiendSpell
+ ThunderstormSpell
+ WordOfDeathSpell
+ + diff --git a/Docs/namespaces/Server.Spells.Third.html b/Docs/namespaces/Server.Spells.Third.html new file mode 100644 index 0000000..9263f93 --- /dev/null +++ b/Docs/namespaces/Server.Spells.Third.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Server.Spells.Third + + +

Back to the namespace index

+

Server.Spells.Third

+ BlessSpell
+ FireballSpell
+ MagicLockSpell
+ PoisonSpell
+ TelekinesisSpell
+ TeleportSpell
+ UnlockSpell
+ WallOfStoneSpell
+ + diff --git a/Docs/namespaces/Server.Spells.html b/Docs/namespaces/Server.Spells.html new file mode 100644 index 0000000..32a7eec --- /dev/null +++ b/Docs/namespaces/Server.Spells.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Server.Spells + + +

Back to the namespace index

+

Server.Spells

+ DisturbType
+ Initializer
+ ITransformationSpell
+ MagerySpell
+ NinjaMove
+ Reagent
+ SamuraiMove
+ SpecialMove
+ Spell
+ SpellCircle
+ SpellHelper
+ SpellInfo
+ SpellRegistry
+ SpellState
+ TransformationSpellHelper
+ TransformContext
+ TransformTimer
+ TravelCheckType
+ UnsummonTimer
+ + diff --git a/Docs/namespaces/Server.Targeting.html b/Docs/namespaces/Server.Targeting.html new file mode 100644 index 0000000..5af4c8a --- /dev/null +++ b/Docs/namespaces/Server.Targeting.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Server.Targeting + + +

Back to the namespace index

+

Server.Targeting

+ LandTarget
+ MultiTarget
+ StaticTarget
+ Target
+ TargetCancelType
+ TargetFlags
+ WandTarget
+ + diff --git a/Docs/namespaces/Server.Targets.html b/Docs/namespaces/Server.Targets.html new file mode 100644 index 0000000..ecd4d4e --- /dev/null +++ b/Docs/namespaces/Server.Targets.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Server.Targets + + +

Back to the namespace index

+

Server.Targets

+ AIControlMobileTarget
+ BladedItemTarget
+ MoveTarget
+ PickMoveTarget
+ + diff --git a/Docs/namespaces/Server.html b/Docs/namespaces/Server.html new file mode 100644 index 0000000..465cabd --- /dev/null +++ b/Docs/namespaces/Server.html @@ -0,0 +1,340 @@ + + + RunUO Documentation - Class Overview - Server + + +

Back to the namespace index

+

Server

+ AcceptProtectorGump
+ AccessException
+ AccessLevel
+ AccessRestrictions
+ AccountLoginEventArgs
+ AccountLoginEventHandler
+ AddBuffPacket
+ AggressiveActionEventArgs
+ AggressiveActionEventHandler
+ AggressorInfo
+ AliasesAttribute
+ AllowBeneficialHandler
+ AllowHarmfulHandler
+ AlreadyBoundException
+ AnimateRequestEventArgs
+ AnimateRequestEventHandler
+ AOS
+ AosArmorAttribute
+ AosArmorAttributes
+ AosAttribute
+ AosAttributes
+ AosElementAttribute
+ AosElementAttributes
+ AosSkillBonuses
+ AosWeaponAttribute
+ AosWeaponAttributes
+ ApplyPoisonResult
+ AssemblyEmitter
+ AsyncWriter
+ BaseAttributes
+ BaseHairInfo
+ BinaryFileReader
+ BinaryFileWriter
+ BinaryMemoryWriter
+ BindingException
+ Body
+ BodyAttribute
+ BodyType
+ BounceInfo
+ BoundingBoxCallback
+ BoundingBoxPicker
+ BuffIcon
+ BuffInfo
+ CallPriorityAttribute
+ CallPriorityComparer
+ CastSpellRequestEventArgs
+ CastSpellRequestEventHandler
+ ChangeProfileRequestEventArgs
+ ChangeProfileRequestEventHandler
+ CharacterCreatedEventArgs
+ CharacterCreatedEventHandler
+ CharacterListFlags
+ ChatRequestEventArgs
+ ChatRequestEventHandler
+ ClearanceException
+ ClientFlags
+ ClientType
+ ClientVersion
+ ClientVersionReceivedArgs
+ ClientVersionReceivedHandler
+ CommandPropertyAttribute
+ CompassionVirtue
+ ConnectedEventArgs
+ ConnectedEventHandler
+ ConstructableAttribute
+ Core
+ CorpseNameAttribute
+ CrashedEventArgs
+ CrashedEventHandler
+ CreateCorpseHandler
+ CreateGuildEventArgs
+ CreateGuildHandler
+ CurrentExpansion
+ CustomEnumAttribute
+ DamageEntry
+ DeathMoveResult
+ DefaultSkillMod
+ DefensiveSpell
+ DeleteRequestEventArgs
+ DeleteRequestEventHandler
+ DescriptionAttribute
+ Direction
+ DisarmRequestEventArgs
+ DisarmRequestEventHandler
+ DisconnectedEventArgs
+ DisconnectedEventHandler
+ DoorGenerator
+ DualSaveStrategy
+ EffectLayer
+ Effects
+ Entity
+ EquipedSkillMod
+ EventLog
+ EventSink
+ ExpandFlag
+ Expansion
+ ExpansionInfo
+ FacialHairEquipUpdate
+ FacialHairInfo
+ FastWalkEventArgs
+ FastWalkEventHandler
+ FeatureFlags
+ FileCommitCallback
+ FileLogger
+ FileOperations
+ FileQueue
+ Firewall
+ FurnitureAttribute
+ GameLoginEventArgs
+ GameLoginEventHandler
+ GenericReader
+ GenericWriter
+ GuildGumpRequestArgs
+ GuildGumpRequestHandler
+ HairEquipUpdate
+ HairInfo
+ HardwareInfo
+ HelpRequestEventArgs
+ HelpRequestEventHandler
+ HonorContext
+ HonorVirtue
+ HueAttribute
+ HungerChangedEventArgs
+ HungerChangedEventHandler
+ IBuyItemInfo
+ ICarvable
+ IChopable
+ IEntity
+ IHonorTarget
+ IHued
+ INativeReader
+ Insensitive
+ InternalAccessException
+ IParty
+ IPoint2D
+ IPoint3D
+ IPooledEnumerable
+ IPooledEnumerator
+ ISerializable
+ IShopSellInfo
+ ISpawnable
+ ISpawner
+ ISpell
+ ITelekinesisable
+ Item
+ ItemBounds
+ ItemData
+ ItemDelta
+ IVendor
+ IWeapon
+ JusticeVirtue
+ KeywordList
+ LandData
+ LandTile
+ Layer
+ LightCycle
+ LightType
+ LoginEventArgs
+ LoginEventHandler
+ LogoutEventArgs
+ LogoutEventHandler
+ Loot
+ LootPack
+ LootPackDice
+ LootPackEntry
+ LootPackItem
+ LootType
+ Map
+ MapRules
+ MessageHelper
+ MethodEmitter
+ Mobile
+ MobileDelta
+ MobileNotConnectedException
+ MovementEventArgs
+ MovementEventHandler
+ MovementPath
+ MoveMethod
+ MoveResult
+ MultiComponentList
+ MultiData
+ MultiTextWriter
+ MultiTileEntry
+ MusicName
+ NameList
+ NativeReader
+ NativeReaderUnix
+ NativeReaderWin32
+ NoSortAttribute
+ Notoriety
+ NotorietyHandler
+ NotYetBoundException
+ ObjectPropertyList
+ OnVirtueUsed
+ OpenDoorMacroEventArgs
+ OpenDoorMacroEventHandler
+ OpenSpellbookRequestEventArgs
+ OpenSpellbookRequestEventHandler
+ OPLInfo
+ OppositionGroup
+ PaperdollRequestEventArgs
+ PaperdollRequestEventHandler
+ ParallelSaveStrategy
+ ParsableAttribute
+ ParticleSupportType
+ PartyCommands
+ PathFollower
+ PlayerDeathEventArgs
+ PlayerDeathEventHandler
+ Point2D
+ Point3D
+ Point3DList
+ Poison
+ PoisonImpl
+ ProfileRequestEventArgs
+ ProfileRequestEventHandler
+ PromptCallback
+ PromptStateCallback
+ PromptStateCallback<T>
+ Property
+ PropertyException
+ PropertyObjectAttribute
+ QuestArrow
+ QuestGumpRequestArgs
+ QuestGumpRequestHandler
+ QueuedMemoryWriter
+ Race
+ ReadAccessException
+ ReadOnlyException
+ Rectangle2D
+ Rectangle3D
+ RegenRateHandler
+ Region
+ RegionRect
+ RemoveBuffPacket
+ RemoveFacialHair
+ RemoveHair
+ RenameRequestEventArgs
+ RenameRequestEventHandler
+ ResistanceMod
+ ResistanceType
+ SacrificeVirtue
+ SaveMetrics
+ SaveStrategy
+ ScriptCompiler
+ Sector
+ SecureTrade
+ SecureTradeInfo
+ SequentialFileWriter
+ Serial
+ ServerListEventArgs
+ ServerListEventHandler
+ ServerStartedEventHandler
+ SetAbilityEventArgs
+ SetAbilityEventHandler
+ ShrinkTable
+ ShutdownEventArgs
+ ShutdownEventHandler
+ Skill
+ SkillCheckDirectLocationHandler
+ SkillCheckDirectTargetHandler
+ SkillCheckLocationHandler
+ SkillCheckTargetHandler
+ SkillInfo
+ SkillLock
+ SkillMod
+ SkillName
+ SkillNameValue
+ Skills
+ SkillUseCallback
+ Slice
+ SocketConnectEventArgs
+ SocketConnectEventHandler
+ SocketOptions
+ SpeechEventArgs
+ SpeechEventHandler
+ SpeedInfo
+ StandardSaveStrategy
+ Statics
+ StaticTile
+ StatLockType
+ StatMod
+ StatType
+ StunRequestEventArgs
+ StunRequestEventHandler
+ TargetCallback
+ TargetStateCallback
+ TargetStateCallback<T>
+ TextDefinition
+ TileData
+ TileFlag
+ TileList
+ TileMatrix
+ TileMatrixPatch
+ TimedSkillMod
+ Timer
+ TimerCallback
+ TimerPriority
+ TimerStateCallback
+ TimerStateCallback<T>
+ TotalType
+ TreasureRegion
+ TypeAliasAttribute
+ TypeCache
+ TypeTable
+ UnknownPropertyException
+ UOAMVendorGenerator
+ UsageAttribute
+ Utility
+ ValorVirtue
+ VendorGenerator
+ VirtueGump
+ VirtueGumpRequestEventArgs
+ VirtueGumpRequestEventHandler
+ VirtueHelper
+ VirtueInfo
+ VirtueInfoGump
+ VirtueItemRequestEventArgs
+ VirtueItemRequestEventHandler
+ VirtueLevel
+ VirtueMacroRequestEventArgs
+ VirtueMacroRequestEventHandler
+ VirtueName
+ VirtueStatusGump
+ VisibleDamageType
+ World
+ WorldLoadEventHandler
+ WorldSaveEventArgs
+ WorldSaveEventHandler
+ WriteAccessException
+ WriteOnlyException
+ + diff --git a/Docs/objects.html b/Docs/objects.html new file mode 100644 index 0000000..d36e67e --- /dev/null +++ b/Docs/objects.html @@ -0,0 +1,2812 @@ + + + RunUO Documentation - Constructable Objects + + + +

Back to the index

+

Constructable Items and Mobiles

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NameUsage
AbbatoirAddon[Add AbbatoirAddon
AbbatoirDeed[Add AbbatoirDeed
AcidProofRobe[Add AcidProofRobe
AcidSlime[Add AcidSlime
[Add AcidSlime duration minDamage maxDamage
AddonComponent[Add AddonComponent itemID
AddonContainerComponent[Add AddonContainerComponent itemID
AdminRobe[Add AdminRobe
AdmiralsHeartyRum[Add AdmiralsHeartyRum
Aegis[Add Aegis
AegisOfGrace[Add AegisOfGrace
AgapiteGranite[Add AgapiteGranite
AgapiteIngot[Add AgapiteIngot
[Add AgapiteIngot amount
AgapiteOre[Add AgapiteOre
[Add AgapiteOre amount
AgilityPotion[Add AgilityPotion
AgilityScroll[Add AgilityScroll
[Add AgilityScroll amount
AlchemistsBauble[Add AlchemistsBauble
AlchemistTableEastAddon[Add AlchemistTableEastAddon
AlchemistTableEastDeed[Add AlchemistTableEastDeed
AlchemistTableSouthAddon[Add AlchemistTableSouthAddon
AlchemistTableSouthDeed[Add AlchemistTableSouthDeed
AlchemyBag[Add AlchemyBag
[Add AlchemyBag amount
AlchemyStone[Add AlchemyStone
Amber[Add Amber
[Add Amber amount
Amethyst[Add Amethyst
[Add Amethyst amount
AncientFarmersKasa[Add AncientFarmersKasa
AncientSamuraiDo[Add AncientSamuraiDo
AncientSmithyHammer[Add AncientSmithyHammer bonus
[Add AncientSmithyHammer bonus uses
AncientUrn[Add AncientUrn urnName
[Add AncientUrn
ANecromancerShroud[Add ANecromancerShroud
AniLargeVioletFlask[Add AniLargeVioletFlask
AnimateDeadScroll[Add AnimateDeadScroll
[Add AnimateDeadScroll amount
AniRedRibbedFlask[Add AniRedRibbedFlask
AniSmallBlueFlask[Add AniSmallBlueFlask
AnkhNorth[Add AnkhNorth
[Add AnkhNorth bloodied
AnkhOfSacrificeAddon[Add AnkhOfSacrificeAddon east
AnkhOfSacrificeDeed[Add AnkhOfSacrificeDeed
[Add AnkhOfSacrificeDeed isRewardItem
AnkhWest[Add AnkhWest
[Add AnkhWest bloodied
AnthropomorphistGlasses[Add AnthropomorphistGlasses
Anvil[Add Anvil
AnvilComponent[Add AnvilComponent itemID
AnvilEastAddon[Add AnvilEastAddon
AnvilEastDeed[Add AnvilEastDeed
AnvilSouthAddon[Add AnvilSouthAddon
AnvilSouthDeed[Add AnvilSouthDeed
Apple[Add Apple
[Add Apple amount
ApplePie[Add ApplePie
AppleTreeAddon[Add AppleTreeAddon
AppleTreeDeed[Add AppleTreeDeed
AppleTrunkAddon[Add AppleTrunkAddon
AppleTrunkDeed[Add AppleTrunkDeed
ArcaneBookshelfEastAddon[Add ArcaneBookshelfEastAddon
ArcaneBookshelfEastDeed[Add ArcaneBookshelfEastDeed
ArcaneBookshelfSouthAddon[Add ArcaneBookshelfSouthAddon
ArcaneBookshelfSouthDeed[Add ArcaneBookshelfSouthDeed
ArcaneCircleAddon[Add ArcaneCircleAddon
ArcaneCircleDeed[Add ArcaneCircleDeed
ArcaneCircleScroll[Add ArcaneCircleScroll
[Add ArcaneCircleScroll amount
ArcaneEmpowermentScroll[Add ArcaneEmpowermentScroll
[Add ArcaneEmpowermentScroll amount
ArcaneGem[Add ArcaneGem
ArcaneShield[Add ArcaneShield
ArcanistStatueEastAddon[Add ArcanistStatueEastAddon
ArcanistStatueEastDeed[Add ArcanistStatueEastDeed
ArcanistStatueSouthAddon[Add ArcanistStatueSouthAddon
ArcanistStatueSouthDeed[Add ArcanistStatueSouthDeed
ArchCureScroll[Add ArchCureScroll
[Add ArchCureScroll amount
ArcheryButte[Add ArcheryButte
ArcheryButteAddon[Add ArcheryButteAddon
ArcheryButteDeed[Add ArcheryButteDeed
ArchProtectionScroll[Add ArchProtectionScroll
[Add ArchProtectionScroll amount
ArcticDeathDealer[Add ArcticDeathDealer
Armoire[Add Armoire
ArmorOfFortune[Add ArmorOfFortune
ArmsAndWeaponsPrimer[Add ArmsAndWeaponsPrimer
ArmsOfTacticalExcellence[Add ArmsOfTacticalExcellence
Arrow[Add Arrow
[Add Arrow amount
ArtifactLargeVase[Add ArtifactLargeVase
ArtifactVase[Add ArtifactVase
ArtsGlasses[Add ArtsGlasses
AshBoard[Add AshBoard
[Add AshBoard amount
AshLog[Add AshLog
[Add AshLog amount
AssassinSpike[Add AssassinSpike
AttuneWeaponScroll[Add AttuneWeaponScroll
[Add AttuneWeaponScroll amount
AwaseMisoSoup[Add AwaseMisoSoup
AwesomeDisturbingPortraitAddon[Add AwesomeDisturbingPortraitAddon
AwesomeDisturbingPortraitDeed[Add AwesomeDisturbingPortraitDeed
Axe[Add Axe
AxeOfTheHeavens[Add AxeOfTheHeavens
Axle[Add Axle
[Add Axle amount
AxleGears[Add AxleGears
[Add AxleGears amount
Backgammon[Add Backgammon
Backpack[Add Backpack
BackpackArtifact[Add BackpackArtifact
Bacon[Add Bacon
[Add Bacon amount
BadCard[Add BadCard
Bag[Add Bag
BagOfAllReagents[Add BagOfAllReagents
[Add BagOfAllReagents amount
BagOfingots[Add BagOfingots
[Add BagOfingots amount
BagOfNecroReagents[Add BagOfNecroReagents
[Add BagOfNecroReagents amount
BagOfReagents[Add BagOfReagents
[Add BagOfReagents amount
BagOfSending[Add BagOfSending
[Add BagOfSending hue
BallOfSummoning[Add BallOfSummoning
BallotBox[Add BallotBox
BallotBoxDeed[Add BallotBoxDeed
BambooChair[Add BambooChair
BambooFlute[Add BambooFlute
BambooScreen[Add BambooScreen
Banana[Add Banana
[Add Banana amount
Bananas[Add Bananas
[Add Bananas amount
Bandage[Add Bandage
[Add Bandage amount
Bandana[Add Bandana
[Add Bandana hue
BankCheck[Add BankCheck worth
BankerCamp[Add BankerCamp
Banner[Add Banner itemID
BannerDeed[Add BannerDeed
BarbedHides[Add BarbedHides
[Add BarbedHides amount
BarbedLeather[Add BarbedLeather
[Add BarbedLeather amount
Bardiche[Add Bardiche
BarkeepContract[Add BarkeepContract
BarkFragment[Add BarkFragment
[Add BarkFragment amountFrom amountTo
[Add BarkFragment amount
BarredMetalDoor[Add BarredMetalDoor facing
BarredMetalDoor2[Add BarredMetalDoor2 facing
Barrel[Add Barrel
BarrelHoops[Add BarrelHoops
BarrelLid[Add BarrelLid
BarrelStaves[Add BarrelStaves
BarrelTap[Add BarrelTap
Bascinet[Add Bascinet
BaseBook[Add BaseBook itemID
[Add BaseBook itemID pageCount writable
[Add BaseBook itemID title author pageCount writable
BaseMulti[Add BaseMulti itemID
Basket[Add Basket
Basket1Artifact[Add Basket1Artifact
Basket2Artifact[Add Basket2Artifact
Basket3NorthArtifact[Add Basket3NorthArtifact
Basket3WestArtifact[Add Basket3WestArtifact
Basket4Artifact[Add Basket4Artifact
Basket5NorthArtifact[Add Basket5NorthArtifact
Basket5WestArtifact[Add Basket5WestArtifact
Basket6Artifact[Add Basket6Artifact
BattleAxe[Add BattleAxe
BatWing[Add BatWing
[Add BatWing amount
Beads[Add Beads
BearMask[Add BearMask
[Add BearMask hue
BedOfNailsAddon[Add BedOfNailsAddon
BedOfNailsDeed[Add BedOfNailsDeed
Bedroll[Add Bedroll
Beeswax[Add Beeswax
[Add Beeswax amount
BellOfTheDead[Add BellOfTheDead
BentoBox[Add BentoBox
BeverageBottle[Add BeverageBottle type
BigElvenChair[Add BigElvenChair
BigFish[Add BigFish
BirdsOfBritannia[Add BirdsOfBritannia
BlackDyeTub[Add BlackDyeTub
BlackLotusHood[Add BlackLotusHood
BlackPearl[Add BlackPearl
[Add BlackPearl amount
BlackScales[Add BlackScales
[Add BlackScales amount
BlackStaff[Add BlackStaff
BlackthornWelcomeBook[Add BlackthornWelcomeBook
BladeDance[Add BladeDance
BladedStaff[Add BladedStaff
BladeOfInsanity[Add BladeOfInsanity
BladeOfTheRighteous[Add BladeOfTheRighteous
BladeSpiritsScroll[Add BladeSpiritsScroll
[Add BladeSpiritsScroll amount
BlankMap[Add BlankMap
BlankScroll[Add BlankScroll
[Add BlankScroll amount
BlazeDyeTub[Add BlazeDyeTub
BlazeOfDeath[Add BlazeOfDeath
BlessScroll[Add BlessScroll
[Add BlessScroll amount
Blight[Add Blight
[Add Blight amount
BlightGrippedLongbow[Add BlightGrippedLongbow
Blocker[Add Blocker
Blood[Add Blood
[Add Blood itemID
Bloodmoss[Add Bloodmoss
[Add Bloodmoss amount
BloodOathScroll[Add BloodOathScroll
[Add BloodOathScroll amount
BloodPentagram[Add BloodPentagram
BloodwoodBoard[Add BloodwoodBoard
[Add BloodwoodBoard amount
BloodwoodLog[Add BloodwoodLog
[Add BloodwoodLog amount
BloodwoodSpirit[Add BloodwoodSpirit
BloodyPentagramAddon[Add BloodyPentagramAddon
BloodyPentagramDeed[Add BloodyPentagramDeed
BloodyWaterArtifact[Add BloodyWaterArtifact
Blowpipe[Add Blowpipe
[Add Blowpipe uses
BlueBeaker[Add BlueBeaker
BlueBook[Add BlueBook
[Add BlueBook pageCount writable
[Add BlueBook title author pageCount writable
BlueCurvedFlask[Add BlueCurvedFlask
BlueDecorativeRugAddon[Add BlueDecorativeRugAddon
BlueDecorativeRugDeed[Add BlueDecorativeRugDeed
BlueDiamond[Add BlueDiamond
[Add BlueDiamond amountFrom amountTo
[Add BlueDiamond amount
BlueFancyRugAddon[Add BlueFancyRugAddon
BlueFancyRugDeed[Add BlueFancyRugDeed
BlueNinjaQuestTeleporter[Add BlueNinjaQuestTeleporter
BluePlainRugAddon[Add BluePlainRugAddon
BluePlainRugDeed[Add BluePlainRugDeed
BlueScales[Add BlueScales
[Add BlueScales amount
BlueSlateFloorCenter[Add BlueSlateFloorCenter
BlueSnowflake[Add BlueSnowflake
BlueSoulstone[Add BlueSoulstone
[Add BlueSoulstone account
Board[Add Board
[Add Board amount
[Add Board resource
[Add Board resource amount
BodySash[Add BodySash
[Add BodySash hue
BoilingCauldronAddon[Add BoilingCauldronAddon
BoilingCauldronDeed[Add BoilingCauldronDeed
Bokuto[Add Bokuto
Bola[Add Bola
[Add Bola amount
BolaBall[Add BolaBall
[Add BolaBall amount
BoldStranger[Add BoldStranger
Bolt[Add Bolt
[Add Bolt amount
BoltOfCloth[Add BoltOfCloth
[Add BoltOfCloth amount
Bone[Add Bone
[Add Bone amount
BoneArms[Add BoneArms
BoneChest[Add BoneChest
BoneCouchAddon[Add BoneCouchAddon
BoneCouchDeed[Add BoneCouchDeed
BoneCrusher[Add BoneCrusher
BoneGloves[Add BoneGloves
BoneHarvester[Add BoneHarvester
BoneHelm[Add BoneHelm
BoneLegs[Add BoneLegs
BonePile[Add BonePile
Bonesmasher[Add Bonesmasher
BoneTableAddon[Add BoneTableAddon
BoneTableDeed[Add BoneTableDeed
BoneThroneAddon[Add BoneThroneAddon
BoneThroneDeed[Add BoneThroneDeed
Bonnet[Add Bonnet
[Add Bonnet hue
BookOfBushido[Add BookOfBushido
[Add BookOfBushido content
BookOfChivalry[Add BookOfChivalry
[Add BookOfChivalry content
BookOfNinjitsu[Add BookOfNinjitsu
[Add BookOfNinjitsu content
BooksFaceDownArtifact[Add BooksFaceDownArtifact
BooksNorthArtifact[Add BooksNorthArtifact
BooksWestArtifact[Add BooksWestArtifact
Boomstick[Add Boomstick
Boots[Add Boots
[Add Boots hue
Bottle[Add Bottle
[Add Bottle amount
BottleArtifact[Add BottleArtifact
Bow[Add Bow
BowlArtifact[Add BowlArtifact
BowlFlour[Add BowlFlour
BowlsHorizontalArtifact[Add BowlsHorizontalArtifact
BowlsVerticalArtifact[Add BowlsVerticalArtifact
BowOfTheJukaKing[Add BowOfTheJukaKing
BraceletOfBinding[Add BraceletOfBinding
BraceletOfHealth[Add BraceletOfHealth
BrambleCoat[Add BrambleCoat
BraveKnightOfTheBritannia[Add BraveKnightOfTheBritannia
Brazier[Add Brazier
BrazierArtifact[Add BrazierArtifact
BrazierTall[Add BrazierTall
BreadLoaf[Add BreadLoaf
[Add BreadLoaf amount
BreathOfTheDead[Add BreathOfTheDead
BrickHouseDeed[Add BrickHouseDeed
BricksFloor1[Add BricksFloor1
BricksFloor2[Add BricksFloor2
BrigandCamp[Add BrigandCamp
BrightlyColoredEggs[Add BrightlyColoredEggs
BrilliantAmber[Add BrilliantAmber
[Add BrilliantAmber amountFrom amountTo
[Add BrilliantAmber amount
BritannianFlora[Add BritannianFlora
BroadcastCrystal[Add BroadcastCrystal
[Add BroadcastCrystal charges
Broadsword[Add Broadsword
BrocadeGozaMatEastAddon[Add BrocadeGozaMatEastAddon
[Add BrocadeGozaMatEastAddon hue
BrocadeGozaMatEastDeed[Add BrocadeGozaMatEastDeed
BrocadeGozaMatSouthAddon[Add BrocadeGozaMatSouthAddon
[Add BrocadeGozaMatSouthAddon hue
BrocadeGozaMatSouthDeed[Add BrocadeGozaMatSouthDeed
BrocadeSquareGozaMatEastAddon[Add BrocadeSquareGozaMatEastAddon
[Add BrocadeSquareGozaMatEastAddon hue
BrocadeSquareGozaMatEastDeed[Add BrocadeSquareGozaMatEastDeed
BrocadeSquareGozaMatSouthAddon[Add BrocadeSquareGozaMatSouthAddon
[Add BrocadeSquareGozaMatSouthAddon hue
BrocadeSquareGozaMatSouthDeed[Add BrocadeSquareGozaMatSouthDeed
BrokenArmoireAddon[Add BrokenArmoireAddon
BrokenArmoireDeed[Add BrokenArmoireDeed
BrokenBedAddon[Add BrokenBedAddon east
BrokenBedDeed[Add BrokenBedDeed
BrokenBookcaseAddon[Add BrokenBookcaseAddon
BrokenBookcaseDeed[Add BrokenBookcaseDeed
BrokenChair[Add BrokenChair
BrokenChestOfDrawersAddon[Add BrokenChestOfDrawersAddon
BrokenChestOfDrawersDeed[Add BrokenChestOfDrawersDeed
BrokenCoveredChairAddon[Add BrokenCoveredChairAddon
BrokenCoveredChairDeed[Add BrokenCoveredChairDeed
BrokenFallenChairAddon[Add BrokenFallenChairAddon
BrokenFallenChairDeed[Add BrokenFallenChairDeed
BrokenVanityAddon[Add BrokenVanityAddon east
BrokenVanityDeed[Add BrokenVanityDeed
BronzeGranite[Add BronzeGranite
BronzeIngot[Add BronzeIngot
[Add BronzeIngot amount
BronzeOre[Add BronzeOre
[Add BronzeOre amount
BronzeShield[Add BronzeShield
BronzeStatueMaker[Add BronzeStatueMaker
BrownBearRugEastAddon[Add BrownBearRugEastAddon
BrownBearRugEastDeed[Add BrownBearRugEastDeed
BrownBearRugSouthAddon[Add BrownBearRugSouthAddon
BrownBearRugSouthDeed[Add BrownBearRugSouthDeed
BrownBook[Add BrownBook
[Add BrownBook pageCount writable
[Add BrownBook title author pageCount writable
Bucket[Add Bucket
[Add Bucket filled
Buckler[Add Buckler
BulkOrderBook[Add BulkOrderBook
BulletinBoard[Add BulletinBoard
BurglarsBandana[Add BurglarsBandana
BurningOfTrinsic[Add BurningOfTrinsic
BustEast[Add BustEast
BustSouth[Add BustSouth
ButcherKnife[Add ButcherKnife
Cabbage[Add Cabbage
[Add Cabbage amount
Cake[Add Cake
CakeMix[Add CakeMix
CallToAnarchy[Add CallToAnarchy
Calm[Add Calm
Candelabra[Add Candelabra
CandelabraOfSouls[Add CandelabraOfSouls
CandelabraStand[Add CandelabraStand
Candle[Add Candle
CandleLarge[Add CandleLarge
CandleLong[Add CandleLong
CandleShort[Add CandleShort
CandleSkull[Add CandleSkull
CandyCane[Add CandyCane
Cannon[Add Cannon direction
CannonAddon[Add CannonAddon direction
CannonDeed[Add CannonDeed
Cantaloupe[Add Cantaloupe
[Add Cantaloupe amount
Cap[Add Cap
[Add Cap hue
CaptainJohnsHat[Add CaptainJohnsHat
CaptainQuacklebushsCutlass[Add CaptainQuacklebushsCutlass
CapturedEssence[Add CapturedEssence
[Add CapturedEssence amount
Cards[Add Cards
Cards2[Add Cards2
Cards3[Add Cards3
Cards4[Add Cards4
Carrot[Add Carrot
[Add Carrot amount
CastleDeed[Add CastleDeed
Cauldron[Add Cauldron
CaveFloorCenter[Add CaveFloorCenter
CaveFloorEast[Add CaveFloorEast
CaveFloorNorth[Add CaveFloorNorth
CaveFloorSouth[Add CaveFloorSouth
CaveFloorWest[Add CaveFloorWest
CavortingClub[Add CavortingClub
CeramicMug[Add CeramicMug
[Add CeramicMug type
ChainChest[Add ChainChest
ChainCoif[Add ChainCoif
ChainHatsuburi[Add ChainHatsuburi
ChainLegs[Add ChainLegs
ChainLightningScroll[Add ChainLightningScroll
[Add ChainLightningScroll amount
ChampionSkull[Add ChampionSkull type
ChampionSkullPlatform[Add ChampionSkullPlatform
ChampionSpawn[Add ChampionSpawn
ChaosShield[Add ChaosShield
ChargerOfTheFallen[Add ChargerOfTheFallen
CheckerBoard[Add CheckerBoard
Checkers[Add Checkers
Checkers2[Add Checkers2
CheesePizza[Add CheesePizza
CheeseSlice[Add CheeseSlice
[Add CheeseSlice amount
CheeseWedge[Add CheeseWedge
[Add CheeseWedge amount
CheeseWheel[Add CheeseWheel
[Add CheeseWheel amount
CherryArmoire[Add CherryArmoire
CherryBlossomTreeAddon[Add CherryBlossomTreeAddon
CherryBlossomTreeDeed[Add CherryBlossomTreeDeed
CherryBlossomTrunkAddon[Add CherryBlossomTrunkAddon
CherryBlossomTrunkDeed[Add CherryBlossomTrunkDeed
Chessboard[Add Chessboard
Chessmen[Add Chessmen
Chessmen2[Add Chessmen2
Chessmen3[Add Chessmen3
ChestOfHeirlooms[Add ChestOfHeirlooms
ChickenLeg[Add ChickenLeg
[Add ChickenLeg amount
ChildrenTalesVol2[Add ChildrenTalesVol2
ChiselsNorth[Add ChiselsNorth
ChiselsWest[Add ChiselsWest
ChylothShroud[Add ChylothShroud
ChylothStaff[Add ChylothStaff
CinnamonFancyRugAddon[Add CinnamonFancyRugAddon
CinnamonFancyRugDeed[Add CinnamonFancyRugDeed
Circlet[Add Circlet
Citrine[Add Citrine
[Add Citrine amount
CityMap[Add CityMap
Cleaver[Add Cleaver
Cloak[Add Cloak
[Add Cloak hue
Clock[Add Clock
[Add Clock itemID
ClockFrame[Add ClockFrame
[Add ClockFrame amount
ClockLeft[Add ClockLeft
ClockParts[Add ClockParts
[Add ClockParts amount
ClockRight[Add ClockRight
ClockworkAssembly[Add ClockworkAssembly
ClosedBarrel[Add ClosedBarrel
CloseHelm[Add CloseHelm
Cloth[Add Cloth
[Add Cloth amount
ClothingBlessDeed[Add ClothingBlessDeed
ClothNinjaHood[Add ClothNinjaHood
[Add ClothNinjaHood hue
ClothNinjaJacket[Add ClothNinjaJacket
[Add ClothNinjaJacket hue
Club[Add Club
ClumsyScroll[Add ClumsyScroll
[Add ClumsyScroll amount
ClumsyWand[Add ClumsyWand
Coal[Add Coal
CobblestonesFloor[Add CobblestonesFloor
Coconut[Add Coconut
[Add Coconut amount
CocoonArtifact[Add CocoonArtifact
ColdBlood[Add ColdBlood
ColdForgedBlade[Add ColdForgedBlade
ColoredAnvil[Add ColoredAnvil
[Add ColoredAnvil hue
CommodityDeed[Add CommodityDeed
CommodityDeedBox[Add CommodityDeedBox
CompositeBow[Add CompositeBow
ConfirmationMoongate[Add ConfirmationMoongate
[Add ConfirmationMoongate target targetMap
ConflagrationPotion[Add ConflagrationPotion
ConfusionBlastPotion[Add ConfusionBlastPotion
ContestMiniHouse[Add ContestMiniHouse
[Add ContestMiniHouse type
ContestMiniHouseDeed[Add ContestMiniHouseDeed
[Add ContestMiniHouseDeed type
ContractOfEmployment[Add ContractOfEmployment
CookedBird[Add CookedBird
[Add CookedBird amount
CookieMix[Add CookieMix
Cookies[Add Cookies
CopperGranite[Add CopperGranite
CopperIngot[Add CopperIngot
[Add CopperIngot amount
CopperOre[Add CopperOre
[Add CopperOre amount
CopperWire[Add CopperWire
[Add CopperWire amount
CorpseSkinScroll[Add CorpseSkinScroll
[Add CorpseSkinScroll amount
Corruption[Add Corruption
[Add Corruption amountFrom amountTo
[Add Corruption amount
Cotton[Add Cotton
[Add Cotton amount
CounselorRobe[Add CounselorRobe
CoveredChair[Add CoveredChair
CreateFoodScroll[Add CreateFoodScroll
[Add CreateFoodScroll amount
CreatureBackpack[Add CreatureBackpack name
CreepyPortraitAddon[Add CreepyPortraitAddon
CreepyPortraitDeed[Add CreepyPortraitDeed
CrescentBlade[Add CrescentBlade
CrimsonCincture[Add CrimsonCincture
Crossbow[Add Crossbow
CrossbowBolts[Add CrossbowBolts
CrownOfTalKeesh[Add CrownOfTalKeesh
CrystalCaveBarrier[Add CrystalCaveBarrier
CunningScroll[Add CunningScroll
[Add CunningScroll amount
CupsArtifact[Add CupsArtifact
CurePotion[Add CurePotion
CureScroll[Add CureScroll
[Add CureScroll amount
CurseScroll[Add CurseScroll
[Add CurseScroll amount
CurseWeaponScroll[Add CurseWeaponScroll
[Add CurseWeaponScroll amount
CurtainsAddon[Add CurtainsAddon east
CurtainsDeed[Add CurtainsDeed
CurvedFlask[Add CurvedFlask
CuSidheFormTalisman[Add CuSidheFormTalisman
Cutlass[Add Cutlass
DaemonArms[Add DaemonArms
DaemonBlood[Add DaemonBlood
[Add DaemonBlood amount
DaemonBloodChest[Add DaemonBloodChest
DaemonBone[Add DaemonBone
[Add DaemonBone amount
DaemonChest[Add DaemonChest
DaemonGloves[Add DaemonGloves
DaemonHelm[Add DaemonHelm
DaemonLegs[Add DaemonLegs
Dagger[Add Dagger
DaimyosHelm[Add DaimyosHelm
Daisho[Add Daisho
DamagedBooksArtifact[Add DamagedBooksArtifact
DarkenedSky[Add DarkenedSky
DarkFlowerTapestryEastAddon[Add DarkFlowerTapestryEastAddon
DarkFlowerTapestryEastDeed[Add DarkFlowerTapestryEastDeed
DarkFlowerTapestrySouthAddon[Add DarkFlowerTapestrySouthAddon
DarkFlowerTapestrySouthDeed[Add DarkFlowerTapestrySouthDeed
DarkSandstoneFloorN[Add DarkSandstoneFloorN
DarkSandstoneFloorW[Add DarkSandstoneFloorW
DarkSapphire[Add DarkSapphire
[Add DarkSapphire amountFrom amountTo
[Add DarkSapphire amount
DarkSource[Add DarkSource
DarkTidesHorn[Add DarkTidesHorn
DarkTidesTeleporter[Add DarkTidesTeleporter
DarkWoodDoor[Add DarkWoodDoor facing
DarkWoodGate[Add DarkWoodGate facing
DarkWoodHouseDoor[Add DarkWoodHouseDoor facing
DarkWoodWall[Add DarkWoodWall type
DarkYarn[Add DarkYarn
[Add DarkYarn amount
DartBoard[Add DartBoard
[Add DartBoard east
DartBoardEastDeed[Add DartBoardEastDeed
DartBoardSouthDeed[Add DartBoardSouthDeed
Dates[Add Dates
[Add Dates amount
DawnsMusicBox[Add DawnsMusicBox
DawnsMusicGear[Add DawnsMusicGear
[Add DawnsMusicGear music
DeadlyPoisonPotion[Add DeadlyPoisonPotion
DeadWood[Add DeadWood
[Add DeadWood amount
DeathRobe[Add DeathRobe
DeathShroud[Add DeathShroud
DeceitBrazier[Add DeceitBrazier
DeceitDungeonOfHorror[Add DeceitDungeonOfHorror
DecoArrowShafts[Add DecoArrowShafts
DecoBlackmoor[Add DecoBlackmoor
DecoBloodspawn[Add DecoBloodspawn
DecoBottlesOfLiquor[Add DecoBottlesOfLiquor
DecoBridle[Add DecoBridle
DecoBridle2[Add DecoBridle2
DecoBrimstone[Add DecoBrimstone
DecoCards5[Add DecoCards5
DecoCrystalBall[Add DecoCrystalBall
DecoDeckOfTarot[Add DecoDeckOfTarot
DecoDeckOfTarot2[Add DecoDeckOfTarot2
DecoDragonsBlood[Add DecoDragonsBlood
DecoDragonsBlood2[Add DecoDragonsBlood2
DecoEyeOfNewt[Add DecoEyeOfNewt
DecoFlower[Add DecoFlower
DecoFlower2[Add DecoFlower2
DecoFullJar[Add DecoFullJar
DecoFullJars3[Add DecoFullJars3
DecoFullJars4[Add DecoFullJars4
DecoGarlic[Add DecoGarlic
DecoGarlic2[Add DecoGarlic2
DecoGarlicBulb[Add DecoGarlicBulb
DecoGarlicBulb2[Add DecoGarlicBulb2
DecoGinseng[Add DecoGinseng
DecoGinseng2[Add DecoGinseng2
DecoGinsengRoot[Add DecoGinsengRoot
DecoGinsengRoot2[Add DecoGinsengRoot2
DecoGoldIngot[Add DecoGoldIngot
DecoGoldIngot2[Add DecoGoldIngot2
DecoGoldIngots[Add DecoGoldIngots
DecoGoldIngots2[Add DecoGoldIngots2
DecoGoldIngots3[Add DecoGoldIngots3
DecoGoldIngots4[Add DecoGoldIngots4
DecoHay[Add DecoHay
DecoHay2[Add DecoHay2
DecoHorseDung[Add DecoHorseDung
DecoIronIngot[Add DecoIronIngot
DecoIronIngot2[Add DecoIronIngot2
DecoIronIngots[Add DecoIronIngots
DecoIronIngots2[Add DecoIronIngots2
DecoIronIngots3[Add DecoIronIngots3
DecoIronIngots4[Add DecoIronIngots4
DecoIronIngots5[Add DecoIronIngots5
DecoIronIngots6[Add DecoIronIngots6
DecoMagicalCrystal[Add DecoMagicalCrystal
DecoMandrake[Add DecoMandrake
DecoMandrake2[Add DecoMandrake2
DecoMandrake3[Add DecoMandrake3
DecoMandrakeRoot[Add DecoMandrakeRoot
DecoMandrakeRoot2[Add DecoMandrakeRoot2
DecoNightshade[Add DecoNightshade
DecoNightshade2[Add DecoNightshade2
DecoNightshade3[Add DecoNightshade3
DecoObsidian[Add DecoObsidian
DecoPumice[Add DecoPumice
DecorativeAxeNorth[Add DecorativeAxeNorth
DecorativeAxeWest[Add DecorativeAxeWest
DecorativeBowNorth[Add DecorativeBowNorth
DecorativeBowWest[Add DecorativeBowWest
DecorativeDAxeNorth[Add DecorativeDAxeNorth
DecorativeDAxeWest[Add DecorativeDAxeWest
DecorativePlateKabuto[Add DecorativePlateKabuto
DecorativeShield[Add DecorativeShield
[Add DecorativeShield itemID
DecorativeShield1[Add DecorativeShield1
DecorativeShield10[Add DecorativeShield10
DecorativeShield11[Add DecorativeShield11
DecorativeShield2[Add DecorativeShield2
DecorativeShield3[Add DecorativeShield3
DecorativeShield4[Add DecorativeShield4
DecorativeShield5[Add DecorativeShield5
DecorativeShield6[Add DecorativeShield6
DecorativeShield7[Add DecorativeShield7
DecorativeShield8[Add DecorativeShield8
DecorativeShield9[Add DecorativeShield9
DecorativeShieldDeed[Add DecorativeShieldDeed
DecorativeShieldSword1North[Add DecorativeShieldSword1North
DecorativeShieldSword1West[Add DecorativeShieldSword1West
DecorativeShieldSword2North[Add DecorativeShieldSword2North
DecorativeShieldSword2West[Add DecorativeShieldSword2West
DecorativeSwordNorth[Add DecorativeSwordNorth
DecorativeSwordWest[Add DecorativeSwordWest
DecorativeTopiary[Add DecorativeTopiary
DecoRock[Add DecoRock
DecoRock2[Add DecoRock2
DecoRocks[Add DecoRocks
DecoRocks2[Add DecoRocks2
DecoRoseOfTrinsic[Add DecoRoseOfTrinsic
DecoRoseOfTrinsic2[Add DecoRoseOfTrinsic2
DecoRoseOfTrinsic3[Add DecoRoseOfTrinsic3
DecoSilverIngot[Add DecoSilverIngot
DecoSilverIngot2[Add DecoSilverIngot2
DecoSilverIngots[Add DecoSilverIngots
DecoSilverIngots2[Add DecoSilverIngots2
DecoSilverIngots3[Add DecoSilverIngots3
DecoSilverIngots4[Add DecoSilverIngots4
DecoSilverIngots5[Add DecoSilverIngots5
DecoSpittoon[Add DecoSpittoon
DecoTarot[Add DecoTarot
DecoTarot2[Add DecoTarot2
DecoTarot3[Add DecoTarot3
DecoTarot4[Add DecoTarot4
DecoTarot5[Add DecoTarot5
DecoTarot6[Add DecoTarot6
DecoTarot7[Add DecoTarot7
DecoTray[Add DecoTray
DecoTray2[Add DecoTray2
DecoWyrmsHeart[Add DecoWyrmsHeart
DeerMask[Add DeerMask
[Add DeerMask hue
DemonForks[Add DemonForks
DemonSkull[Add DemonSkull
DetectiveBoots[Add DetectiveBoots
Diamond[Add Diamond
[Add Diamond amount
DiamondMace[Add DiamondMace
Dices[Add Dices
DimensionalTravel[Add DimensionalTravel
DirtPatch[Add DirtPatch
DirtyFrypan[Add DirtyFrypan
DirtyKettle[Add DirtyKettle
DirtyPan[Add DirtyPan
DirtyPot[Add DirtyPot
DirtyRoundPot[Add DirtyRoundPot
DirtySmallPot[Add DirtySmallPot
DirtySmallRoundPot[Add DirtySmallRoundPot
DisappearingRaiseSwitch[Add DisappearingRaiseSwitch
DiseasedBark[Add DiseasedBark
[Add DiseasedBark amountFrom amountTo
[Add DiseasedBark amount
DisguiseKit[Add DisguiseKit
DispelFieldScroll[Add DispelFieldScroll
[Add DispelFieldScroll amount
DispelScroll[Add DispelScroll
[Add DispelScroll amount
DisturbingPortraitAddon[Add DisturbingPortraitAddon
DisturbingPortraitDeed[Add DisturbingPortraitDeed
DiversityOfOurLand[Add DiversityOfOurLand
DivineCountenance[Add DivineCountenance
DjinnisRing[Add DjinnisRing
DolphinLeftArtifact[Add DolphinLeftArtifact
DolphinRightArtifact[Add DolphinRightArtifact
DoubleAxe[Add DoubleAxe
DoubleBladedStaff[Add DoubleBladedStaff
Doublet[Add Doublet
[Add Doublet hue
Dough[Add Dough
DovetailSaw[Add DovetailSaw
[Add DovetailSaw uses
DragonArms[Add DragonArms
DragonChest[Add DragonChest
DragonGloves[Add DragonGloves
DragonHelm[Add DragonHelm
DragonLegs[Add DragonLegs
DragonNunchaku[Add DragonNunchaku
DrakovsJournal[Add DrakovsJournal
Drawer[Add Drawer
DrawKnife[Add DrawKnife
[Add DrawKnife uses
DreadHornMane[Add DreadHornMane
[Add DreadHornMane amountFrom amountTo
[Add DreadHornMane amount
DreadPirateHat[Add DreadPirateHat
Dressform[Add Dressform
DriedHerbs[Add DriedHerbs
[Add DriedHerbs amount
DriedOnions[Add DriedOnions
[Add DriedOnions amount
Drums[Add Drums
DryadAllureScroll[Add DryadAllureScroll
[Add DryadAllureScroll amount
DullCopperGranite[Add DullCopperGranite
DullCopperIngot[Add DullCopperIngot
[Add DullCopperIngot amount
DullCopperOre[Add DullCopperOre
[Add DullCopperOre amount
DupresShield[Add DupresShield
DupreSuit[Add DupreSuit
Dyes[Add Dyes
DyeTub[Add DyeTub
EarOfCorn[Add EarOfCorn
[Add EarOfCorn amount
EarringBoxSet[Add EarringBoxSet
EarringsOfProtection[Add EarringsOfProtection
[Add EarringsOfProtection element
EarthquakeScroll[Add EarthquakeScroll
[Add EarthquakeScroll amount
Easle[Add Easle
EasterEggs[Add EasterEggs
EcruCitrine[Add EcruCitrine
[Add EcruCitrine amountFrom amountTo
[Add EcruCitrine amount
EffectController[Add EffectController
EggBomb[Add EggBomb
EggCaseArtifact[Add EggCaseArtifact
Eggs[Add Eggs
[Add Eggs amount
Eggshells[Add Eggshells
ElegantArmoire[Add ElegantArmoire
ElegantLowTable[Add ElegantLowTable
ElvenBedEastAddon[Add ElvenBedEastAddon
ElvenBedEastDeed[Add ElvenBedEastDeed
ElvenBedSouthAddon[Add ElvenBedSouthAddon
ElvenBedSouthDeed[Add ElvenBedSouthDeed
ElvenBoots[Add ElvenBoots
[Add ElvenBoots hue
ElvenCompositeLongbow[Add ElvenCompositeLongbow
ElvenDarkShirt[Add ElvenDarkShirt
[Add ElvenDarkShirt hue
ElvenDresserEastAddon[Add ElvenDresserEastAddon
ElvenDresserEastDeed[Add ElvenDresserEastDeed
ElvenDresserSouthAddon[Add ElvenDresserSouthAddon
ElvenDresserSouthDeed[Add ElvenDresserSouthDeed
ElvenForgeAddon[Add ElvenForgeAddon
ElvenForgeDeed[Add ElvenForgeDeed
ElvenGlasses[Add ElvenGlasses
ElvenLoveseatEastAddon[Add ElvenLoveseatEastAddon
ElvenLoveseatEastDeed[Add ElvenLoveseatEastDeed
ElvenLoveseatSouthAddon[Add ElvenLoveseatSouthAddon
ElvenLoveseatSouthDeed[Add ElvenLoveseatSouthDeed
ElvenMachete[Add ElvenMachete
ElvenPants[Add ElvenPants
[Add ElvenPants hue
ElvenQuiver[Add ElvenQuiver
ElvenReadingChair[Add ElvenReadingChair
ElvenShirt[Add ElvenShirt
[Add ElvenShirt hue
ElvenSpellblade[Add ElvenSpellblade
ElvenSpinningwheelEastAddon[Add ElvenSpinningwheelEastAddon
ElvenSpinningwheelEastDeed[Add ElvenSpinningwheelEastDeed
ElvenSpinningwheelSouthAddon[Add ElvenSpinningwheelSouthAddon
ElvenSpinningwheelSouthDeed[Add ElvenSpinningwheelSouthDeed
ElvenStoveEastAddon[Add ElvenStoveEastAddon
ElvenStoveEastDeed[Add ElvenStoveEastDeed
ElvenStoveSouthAddon[Add ElvenStoveSouthAddon
ElvenStoveSouthDeed[Add ElvenStoveSouthDeed
ElvenWashBasinEastAddon[Add ElvenWashBasinEastAddon
ElvenWashBasinEastDeed[Add ElvenWashBasinEastDeed
ElvenWashBasinSouthAddon[Add ElvenWashBasinSouthAddon
ElvenWashBasinSouthDeed[Add ElvenWashBasinSouthDeed
EmbroideredOakLeafCloak[Add EmbroideredOakLeafCloak
Emerald[Add Emerald
[Add Emerald amount
EminosKatana[Add EminosKatana
EminosKatanaChest[Add EminosKatanaChest
EmptyBentoBox[Add EmptyBentoBox
EmptyBookcase[Add EmptyBookcase
EmptyCurvedFlaskE[Add EmptyCurvedFlaskE
EmptyCurvedFlaskW[Add EmptyCurvedFlaskW
EmptyJar[Add EmptyJar
EmptyJars[Add EmptyJars
EmptyJars2[Add EmptyJars2
EmptyJars3[Add EmptyJars3
EmptyJars4[Add EmptyJars4
EmptyPewterBowl[Add EmptyPewterBowl
EmptyPewterTub[Add EmptyPewterTub
EmptyRibbedFlask[Add EmptyRibbedFlask
EmptyToolKit[Add EmptyToolKit
EmptyToolKit2[Add EmptyToolKit2
EmptyVial[Add EmptyVial
EmptyVialsWRack[Add EmptyVialsWRack
EmptyWoodenBowl[Add EmptyWoodenBowl
EmptyWoodenTub[Add EmptyWoodenTub
EnchantedPaints[Add EnchantedPaints
EnchantedSextant[Add EnchantedSextant
EnchantedSwitch[Add EnchantedSwitch
EnchantedTitanLegBone[Add EnchantedTitanLegBone
EnergyBoltScroll[Add EnergyBoltScroll
[Add EnergyBoltScroll amount
EnergyFieldScroll[Add EnergyFieldScroll
[Add EnergyFieldScroll amount
EnergyVortexScroll[Add EnergyVortexScroll
[Add EnergyVortexScroll amount
EnhancedBandage[Add EnhancedBandage
[Add EnhancedBandage amount
EssenceOfBattle[Add EssenceOfBattle
EssenceOfWindScroll[Add EssenceOfWindScroll
[Add EssenceOfWindScroll amount
EtherealBeetle[Add EtherealBeetle
EtherealCuSidhe[Add EtherealCuSidhe
EtherealHiryu[Add EtherealHiryu
EtherealHorse[Add EtherealHorse
EtherealKirin[Add EtherealKirin
EtherealLlama[Add EtherealLlama
EtherealMount[Add EtherealMount itemID mountID
EtherealOstard[Add EtherealOstard
EtherealReptalon[Add EtherealReptalon
EtherealRidgeback[Add EtherealRidgeback
EtherealSwampDragon[Add EtherealSwampDragon
EtherealUnicorn[Add EtherealUnicorn
EtherealVoyageScroll[Add EtherealVoyageScroll
[Add EtherealVoyageScroll amount
EthicalHedonism[Add EthicalHedonism
EthicsPersistance[Add EthicsPersistance
EvilIdolSkull[Add EvilIdolSkull
EvilOmenScroll[Add EvilOmenScroll
[Add EvilOmenScroll amount
ExecutionersAxe[Add ExecutionersAxe
ExecutionersCap[Add ExecutionersCap
Exiler[Add Exiler
ExorcismScroll[Add ExorcismScroll
[Add ExorcismScroll amount
ExplosionPotion[Add ExplosionPotion
ExplosionScroll[Add ExplosionScroll
[Add ExplosionScroll amount
EyeOfTheTravesty[Add EyeOfTheTravesty
[Add EyeOfTheTravesty amountFrom amountTo
[Add EyeOfTheTravesty amount
FabledFishingNet[Add FabledFishingNet
FactionExplosionTrap[Add FactionExplosionTrap
FactionGasTrap[Add FactionGasTrap
FactionSawTrap[Add FactionSawTrap
FactionSpikeTrap[Add FactionSpikeTrap
FactionStone[Add FactionStone
[Add FactionStone faction
FactionTrapRemovalKit[Add FactionTrapRemovalKit
FancyArmoire[Add FancyArmoire
FancyDrawer[Add FancyDrawer
FancyDress[Add FancyDress
[Add FancyDress hue
FancyElvenTableEastAddon[Add FancyElvenTableEastAddon
FancyElvenTableEastDeed[Add FancyElvenTableEastDeed
FancyElvenTableSouthAddon[Add FancyElvenTableSouthAddon
FancyElvenTableSouthDeed[Add FancyElvenTableSouthDeed
FancyShirt[Add FancyShirt
[Add FancyShirt hue
FancyWindChimes[Add FancyWindChimes
FancyWoodenChairCushion[Add FancyWoodenChairCushion
FangOfRactus[Add FangOfRactus
FanNorthArtifact[Add FanNorthArtifact
FanWestArtifact[Add FanWestArtifact
FarmableCabbage[Add FarmableCabbage
FarmableCarrot[Add FarmableCarrot
FarmableCotton[Add FarmableCotton
FarmableFlax[Add FarmableFlax
FarmableLettuce[Add FarmableLettuce
FarmableOnion[Add FarmableOnion
FarmablePumpkin[Add FarmablePumpkin
FarmableTurnip[Add FarmableTurnip
FarmableWheat[Add FarmableWheat
Feather[Add Feather
[Add Feather amount
FeatheredHat[Add FeatheredHat
[Add FeatheredHat hue
FeeblemindScroll[Add FeeblemindScroll
[Add FeeblemindScroll amount
FeebleWand[Add FeebleWand
FemaleElvenPlateChest[Add FemaleElvenPlateChest
FemaleElvenRobe[Add FemaleElvenRobe
[Add FemaleElvenRobe hue
FemaleKimono[Add FemaleKimono
[Add FemaleKimono hue
FemaleLeafChest[Add FemaleLeafChest
FemaleLeatherChest[Add FemaleLeatherChest
FemalePlateChest[Add FemalePlateChest
FemaleStuddedChest[Add FemaleStuddedChest
FerretFormTalisman[Add FerretFormTalisman
FertileDirt[Add FertileDirt
[Add FertileDirt amount
FestiveCactus[Add FestiveCactus
FeyLeggings[Add FeyLeggings
FieldStoneHouseDeed[Add FieldStoneHouseDeed
FillableBarrel[Add FillableBarrel
FillableLargeCrate[Add FillableLargeCrate
FillableMetalBox[Add FillableMetalBox
FillableMetalChest[Add FillableMetalChest
FillableMetalGoldenChest[Add FillableMetalGoldenChest
FillableSmallCrate[Add FillableSmallCrate
FillableWoodenBox[Add FillableWoodenBox
FillableWoodenChest[Add FillableWoodenChest
FinishedWoodenChest[Add FinishedWoodenChest
FireballScroll[Add FireballScroll
[Add FireballScroll amount
FireballWand[Add FireballWand
Firebomb[Add Firebomb
[Add Firebomb itemID
FireColumnAddon[Add FireColumnAddon
[Add FireColumnAddon bloody
FireColumnTrap[Add FireColumnTrap
FireFieldScroll[Add FireFieldScroll
[Add FireFieldScroll amount
FireHorn[Add FireHorn
FireRuby[Add FireRuby
[Add FireRuby amountFrom amountTo
[Add FireRuby amount
FireworksWand[Add FireworksWand
[Add FireworksWand charges
Fish[Add Fish
[Add Fish amount
FishingPole[Add FishingPole
FishSteak[Add FishSteak
[Add FishSteak amount
FlameSpurtTrap[Add FlameSpurtTrap
FlamestrikeScroll[Add FlamestrikeScroll
[Add FlamestrikeScroll amount
FlamingHead[Add FlamingHead
[Add FlamingHead type
FlamingHeadDeed[Add FlamingHeadDeed
Flax[Add Flax
[Add Flax amount
FleshRipper[Add FleshRipper
FletcherTools[Add FletcherTools
[Add FletcherTools uses
FloppyHat[Add FloppyHat
[Add FloppyHat hue
FlourMillEastAddon[Add FlourMillEastAddon
FlourMillEastDeed[Add FlourMillEastDeed
FlourMillSouthAddon[Add FlourMillSouthAddon
FlourMillSouthDeed[Add FlourMillSouthDeed
FlourSifter[Add FlourSifter
[Add FlourSifter uses
FlowerGarland[Add FlowerGarland
[Add FlowerGarland hue
FlowersArtifact[Add FlowersArtifact
FluteOfRenewal[Add FluteOfRenewal
FoldedSteelGlasses[Add FoldedSteelGlasses
FootStool[Add FootStool
Forge[Add Forge
ForgeComponent[Add ForgeComponent itemID
ForgedMetal[Add ForgedMetal
Fork[Add Fork
ForkLeft[Add ForkLeft
ForkRight[Add ForkRight
FormalShirt[Add FormalShirt
[Add FormalShirt hue
FountainAddon[Add FountainAddon
FountainDeed[Add FountainDeed
FountainOfLife[Add FountainOfLife
[Add FountainOfLife charges
FountainOfLifeDeed[Add FountainOfLifeDeed
[Add FountainOfLifeDeed charges
FrenchBread[Add FrenchBread
[Add FrenchBread amount
FriedEggs[Add FriedEggs
[Add FriedEggs amount
Froe[Add Froe
[Add Froe uses
FropozJournal[Add FropozJournal
Frostbringer[Add Frostbringer
FrostwoodBoard[Add FrostwoodBoard
[Add FrostwoodBoard amount
FrostwoodLog[Add FrostwoodLog
[Add FrostwoodLog amount
FruitBasket[Add FruitBasket
FruitPie[Add FruitPie
Fukiya[Add Fukiya
FukiyaDarts[Add FukiyaDarts
[Add FukiyaDarts amount
FullApron[Add FullApron
[Add FullApron hue
FullBookcase[Add FullBookcase
FullVialsWRack[Add FullVialsWRack
FurBoots[Add FurBoots
[Add FurBoots hue
FurCape[Add FurCape
[Add FurCape hue
FurnitureDyeTub[Add FurnitureDyeTub
FurSarong[Add FurSarong
[Add FurSarong hue
Futon[Add Futon
GamblingStone[Add GamblingStone
GargoylesPickaxe[Add GargoylesPickaxe
[Add GargoylesPickaxe uses
Garlic[Add Garlic
[Add Garlic amount
GasTrap[Add GasTrap
[Add GasTrap type
[Add GasTrap poison
[Add GasTrap type poison
GateTravelScroll[Add GateTravelScroll
[Add GateTravelScroll amount
GauntletsOfNobility[Add GauntletsOfNobility
GauntletSpawner[Add GauntletSpawner
[Add GauntletSpawner typeName
Gears[Add Gears
[Add Gears amount
GemmedCirclet[Add GemmedCirclet
GenericHouseDoor[Add GenericHouseDoor facing baseItemID openedSound closedSound
[Add GenericHouseDoor facing baseItemID openedSound closedSound autoAdjust
GhostShipAnchor[Add GhostShipAnchor
GiantSpikeTrap[Add GiantSpikeTrap
GiantWeb1[Add GiantWeb1
GiantWeb2[Add GiantWeb2
GiantWeb3[Add GiantWeb3
GiantWeb4[Add GiantWeb4
GiantWeb5[Add GiantWeb5
GiantWeb6[Add GiantWeb6
GiftBox[Add GiftBox
[Add GiftBox hue
GiftBoxAngel[Add GiftBoxAngel
GiftBoxCube[Add GiftBoxCube
GiftBoxCylinder[Add GiftBoxCylinder
GiftBoxNeon[Add GiftBoxNeon
GiftBoxOctogon[Add GiftBoxOctogon
GiftBoxRectangle[Add GiftBoxRectangle
GiftOfLifeScroll[Add GiftOfLifeScroll
[Add GiftOfLifeScroll amount
GiftOfRenewalScroll[Add GiftOfRenewalScroll
[Add GiftOfRenewalScroll amount
GildedDress[Add GildedDress
[Add GildedDress hue
GildedWoodenChest[Add GildedWoodenChest
GingerBreadCookie[Add GingerBreadCookie
GingerBreadHouseDeed[Add GingerBreadHouseDeed
Ginseng[Add Ginseng
[Add Ginseng amount
GlacialStaff[Add GlacialStaff
GladiatorsCollar[Add GladiatorsCollar
Glass[Add Glass
GlassblowingBook[Add GlassblowingBook
GlassBottle[Add GlassBottle
GlassMug[Add GlassMug
[Add GlassMug type
Globe[Add Globe
GlovesOfThePugilist[Add GlovesOfThePugilist
GlovesOfTheSun[Add GlovesOfTheSun
GMRobe[Add GMRobe
GnarledStaff[Add GnarledStaff
Goblet[Add Goblet
[Add Goblet type
Gold[Add Gold
[Add Gold amountFrom amountTo
[Add Gold amount
GoldBeadNecklace[Add GoldBeadNecklace
GoldBracelet[Add GoldBracelet
GoldBricks[Add GoldBricks
GoldEarrings[Add GoldEarrings
GoldenDecorativeRugAddon[Add GoldenDecorativeRugAddon
GoldenDecorativeRugDeed[Add GoldenDecorativeRugDeed
GoldenSkull[Add GoldenSkull
GoldGranite[Add GoldGranite
GoldIngot[Add GoldIngot
[Add GoldIngot amount
GoldNecklace[Add GoldNecklace
GoldOre[Add GoldOre
[Add GoldOre amount
GoldRing[Add GoldRing
GoldWire[Add GoldWire
[Add GoldWire amount
GozaMatEastAddon[Add GozaMatEastAddon
[Add GozaMatEastAddon hue
GozaMatEastDeed[Add GozaMatEastDeed
GozaMatSouthAddon[Add GozaMatSouthAddon
[Add GozaMatSouthAddon hue
GozaMatSouthDeed[Add GozaMatSouthDeed
GrammarOfOrcish[Add GrammarOfOrcish
GrandGrimoire[Add GrandGrimoire
Granite[Add Granite
Grapes[Add Grapes
[Add Grapes amount
GraveDust[Add GraveDust
[Add GraveDust amount
GrayBrickFireplaceEastAddon[Add GrayBrickFireplaceEastAddon
GrayBrickFireplaceEastDeed[Add GrayBrickFireplaceEastDeed
GrayBrickFireplaceSouthAddon[Add GrayBrickFireplaceSouthAddon
GrayBrickFireplaceSouthDeed[Add GrayBrickFireplaceSouthDeed
GreaterAgilityPotion[Add GreaterAgilityPotion
GreaterConflagrationPotion[Add GreaterConflagrationPotion
GreaterConfusionBlastPotion[Add GreaterConfusionBlastPotion
GreaterCurePotion[Add GreaterCurePotion
GreaterExplosionPotion[Add GreaterExplosionPotion
GreaterHealPotion[Add GreaterHealPotion
GreaterHealScroll[Add GreaterHealScroll
[Add GreaterHealScroll amount
GreaterHealWand[Add GreaterHealWand
GreaterPoisonPotion[Add GreaterPoisonPotion
GreaterStrengthPotion[Add GreaterStrengthPotion
GreenBeaker[Add GreenBeaker
GreenBottle[Add GreenBottle
GreenCurvedFlask[Add GreenCurvedFlask
GreenDriedFlowers[Add GreenDriedFlowers
[Add GreenDriedFlowers amount
GreenGourd[Add GreenGourd
[Add GreenGourd amount
GreenMarbleFloor[Add GreenMarbleFloor
GreenNinjaQuestTeleporter[Add GreenNinjaQuestTeleporter
GreenScales[Add GreenScales
[Add GreenScales amount
GreenStocking[Add GreenStocking
GreenTea[Add GreenTea
GreenTeaBasket[Add GreenTeaBasket
GreenThorns[Add GreenThorns
[Add GreenThorns amount
GreyFlagstones[Add GreyFlagstones
GreyMarbleFloor[Add GreyMarbleFloor
GreySlateFloor[Add GreySlateFloor
GrimmochJournal1[Add GrimmochJournal1
GrimmochJournal11[Add GrimmochJournal11
GrimmochJournal14[Add GrimmochJournal14
GrimmochJournal17[Add GrimmochJournal17
GrimmochJournal2[Add GrimmochJournal2
GrimmochJournal23[Add GrimmochJournal23
GrimmochJournal3[Add GrimmochJournal3
GrimmochJournal6[Add GrimmochJournal6
GrimmochJournal7[Add GrimmochJournal7
GrizzledBones[Add GrizzledBones
[Add GrizzledBones amountFrom amountTo
[Add GrizzledBones amount
GrizzledMareStatuette[Add GrizzledMareStatuette
GruesomeStandardArtifact[Add GruesomeStandardArtifact
GuantletsOfAnger[Add GuantletsOfAnger
GuardianBarrier[Add GuardianBarrier
GuideToGuilds[Add GuideToGuilds
GuildDeed[Add GuildDeed
GuildstoneDeed[Add GuildstoneDeed g guildName abbrev
GuildTeleporter[Add GuildTeleporter
Guillotine[Add Guillotine
GuillotineDeed[Add GuillotineDeed
GwennosHarp[Add GwennosHarp
HagApprenticeCorpse[Add HagApprenticeCorpse
HagCauldron[Add HagCauldron
HagStew[Add HagStew
HairDye[Add HairDye
HairRestylingDeed[Add HairRestylingDeed
Hakama[Add Hakama
[Add Hakama hue
HakamaShita[Add HakamaShita
[Add HakamaShita hue
Halberd[Add Halberd
HalfApron[Add HalfApron
[Add HalfApron hue
HalfEmptyJar[Add HalfEmptyJar
HalfEmptyJars[Add HalfEmptyJars
Ham[Add Ham
[Add Ham amount
Hammer[Add Hammer
[Add Hammer uses
HammerPick[Add HammerPick
HangingAxesAddon[Add HangingAxesAddon east
HangingAxesDeed[Add HangingAxesDeed
HangingLantern[Add HangingLantern
HangingSkeleton[Add HangingSkeleton
[Add HangingSkeleton itemID
HangingSkeletonDeed[Add HangingSkeletonDeed
HangingSwordsAddon[Add HangingSwordsAddon east
HangingSwordsDeed[Add HangingSwordsDeed
HangoverCure[Add HangoverCure
HanzosBow[Add HanzosBow
HaochisKatana[Add HaochisKatana
HaochisKatanaGenerator[Add HaochisKatanaGenerator
HaochisTreasureChest[Add HaochisTreasureChest
HarmScroll[Add HarmScroll
[Add HarmScroll amount
HarmWand[Add HarmWand
Harp[Add Harp
Hatchet[Add Hatchet
HatOfTheMagi[Add HatOfTheMagi
HaunterMirrorAddon[Add HaunterMirrorAddon
HaunterMirrorDeed[Add HaunterMirrorDeed
Head[Add Head
[Add Head playerName
[Add Head headType playerName
HealerCamp[Add HealerCamp
HealPotion[Add HealPotion
HealScroll[Add HealScroll
[Add HealScroll amount
HealWand[Add HealWand
HearthOfHomeFire[Add HearthOfHomeFire east
HearthOfHomeFireDeed[Add HearthOfHomeFireDeed
HeartOfTheLion[Add HeartOfTheLion
HeartwoodBoard[Add HeartwoodBoard
[Add HeartwoodBoard amount
HeartwoodLog[Add HeartwoodLog
[Add HeartwoodLog amount
HeaterShield[Add HeaterShield
HeatingStand[Add HeatingStand
HeavyCrossbow[Add HeavyCrossbow
HeavyPlateJingasa[Add HeavyPlateJingasa
Helmet[Add Helmet
HelmOfInsight[Add HelmOfInsight
HelmOfSwiftness[Add HelmOfSwiftness
HeritageToken[Add HeritageToken
HideChest[Add HideChest
HideFemaleChest[Add HideFemaleChest
HideGloves[Add HideGloves
HideGorget[Add HideGorget
HidePants[Add HidePants
HidePauldrons[Add HidePauldrons
Hides[Add Hides
[Add Hides amount
Hinge[Add Hinge
[Add Hinge amount
HintItem[Add HintItem itemID range warning hint
[Add HintItem itemID range warning hint
HolidayBell[Add HolidayBell
[Add HolidayBell maker
HolidayTreeDeed[Add HolidayTreeDeed
HollowPrism[Add HollowPrism
HolyKnightsBreastplate[Add HolyKnightsBreastplate
HolySword[Add HolySword
HoneydewMelon[Add HoneydewMelon
[Add HoneydewMelon amount
HonorableSwords[Add HonorableSwords swordsName
[Add HonorableSwords
HonorCandle[Add HonorCandle
HoodedShroudOfShadows[Add HoodedShroudOfShadows
[Add HoodedShroudOfShadows hue
HornedHides[Add HornedHides
[Add HornedHides amount
HornedLeather[Add HornedLeather
[Add HornedLeather amount
HornedTribalMask[Add HornedTribalMask
[Add HornedTribalMask hue
HornOfRetreat[Add HornOfRetreat
HorrificBeastScroll[Add HorrificBeastScroll
[Add HorrificBeastScroll amount
HorseShoes[Add HorseShoes
Hourglass[Add Hourglass
HourglassAni[Add HourglassAni
HouseLadderAddon[Add HouseLadderAddon type
HouseLadderDeed[Add HouseLadderDeed
HousePlacementTool[Add HousePlacementTool
HouseRaffleDeed[Add HouseRaffleDeed
HouseRaffleStone[Add HouseRaffleStone
HouseTeleporter[Add HouseTeleporter itemID
HuntersHeaddress[Add HuntersHeaddress
IcicleLargeEast[Add IcicleLargeEast
IcicleLargeSouth[Add IcicleLargeSouth
IcicleMedEast[Add IcicleMedEast
IcicleMedSouth[Add IcicleMedSouth
IcicleSmallEast[Add IcicleSmallEast
IcicleSmallSouth[Add IcicleSmallSouth
IcyPatch[Add IcyPatch
IDWand[Add IDWand
ImmolatingWeaponScroll[Add ImmolatingWeaponScroll
[Add ImmolatingWeaponScroll amount
IncognitoScroll[Add IncognitoScroll
[Add IncognitoScroll amount
IndecipherableMap[Add IndecipherableMap
IngotStone[Add IngotStone
InquisitorsResolution[Add InquisitorsResolution
Inshave[Add Inshave
[Add Inshave uses
InteriorDecorator[Add InteriorDecorator
InvisibilityScroll[Add InvisibilityScroll
[Add InvisibilityScroll amount
IolosLute[Add IolosLute
IronGate[Add IronGate facing
IronGateShort[Add IronGateShort facing
IronIngot[Add IronIngot
[Add IronIngot amount
IronMaidenDeed[Add IronMaidenDeed
IronOre[Add IronOre
[Add IronOre amount
IronWire[Add IronWire
[Add IronWire amount
IronwoodCrown[Add IronwoodCrown
Item[Add Item itemID
JackalsCollar[Add JackalsCollar
JackOLantern[Add JackOLantern
[Add JackOLantern south
JadeStatueMaker[Add JadeStatueMaker
JarHoney[Add JarHoney
Jars2[Add Jars2
Jars3[Add Jars3
Jars4[Add Jars4
JesterHat[Add JesterHat
[Add JesterHat hue
JesterHatofChuckles[Add JesterHatofChuckles
[Add JesterHatofChuckles hue
JesterSuit[Add JesterSuit
[Add JesterSuit hue
JeweledFiligree[Add JeweledFiligree
JinBaori[Add JinBaori
[Add JinBaori hue
JoinStone[Add JoinStone
[Add JoinStone faction
JointingPlane[Add JointingPlane
[Add JointingPlane uses
Jug[Add Jug type
JukaBow[Add JukaBow
KaburJournal[Add KaburJournal
Kama[Add Kama
Kamishimo[Add Kamishimo
[Add Kamishimo hue
Kasa[Add Kasa
[Add Kasa hue
KasaOfTheRajin[Add KasaOfTheRajin
Katana[Add Katana
KeepDeed[Add KeepDeed
Keg[Add Keg
Key[Add Key
[Add Key type
[Add Key val
[Add Key type LockVal
KeyRing[Add KeyRing
KeywordTeleporter[Add KeywordTeleporter
KhaldunPitTeleporter[Add KhaldunPitTeleporter
[Add KhaldunPitTeleporter pointDest mapDest
Kilt[Add Kilt
[Add Kilt hue
Kindling[Add Kindling
[Add Kindling amount
Knife[Add Knife
KnifeLeft[Add KnifeLeft
KnifeRight[Add KnifeRight
KronusScroll[Add KronusScroll
KronusScrollBox[Add KronusScrollBox
Kryss[Add Kryss
LadyPortrait1[Add LadyPortrait1
LadyPortrait2[Add LadyPortrait2
Lajatang[Add Lajatang
LambLeg[Add LambLeg
[Add LambLeg amount
LampPost1[Add LampPost1
LampPost2[Add LampPost2
LampPost3[Add LampPost3
LampPostArtifact[Add LampPostArtifact
Lance[Add Lance
Lantern[Add Lantern
LanternOfSouls[Add LanternOfSouls
LapHarp[Add LapHarp
LardOfParoxysmus[Add LardOfParoxysmus
[Add LardOfParoxysmus amountFrom amountTo
[Add LardOfParoxysmus amount
LargeBagBall[Add LargeBagBall
LargeBattleAxe[Add LargeBattleAxe
LargeBedEastAddon[Add LargeBedEastAddon
LargeBedEastDeed[Add LargeBedEastDeed
LargeBedSouthAddon[Add LargeBedSouthAddon
LargeBedSouthDeed[Add LargeBedSouthDeed
LargeBoat[Add LargeBoat
LargeBoatDeed[Add LargeBoatDeed
LargeCrate[Add LargeCrate
LargeDragonBoat[Add LargeDragonBoat
LargeDragonBoatDeed[Add LargeDragonBoatDeed
LargeEmptyFlask[Add LargeEmptyFlask
LargeEmptyPot[Add LargeEmptyPot
LargeFishingNetAddon[Add LargeFishingNetAddon
LargeFishingNetDeed[Add LargeFishingNetDeed
LargeFlask[Add LargeFlask
LargeForgeEast[Add LargeForgeEast
LargeForgeEastAddon[Add LargeForgeEastAddon
LargeForgeEastDeed[Add LargeForgeEastDeed
LargeForgeSouthAddon[Add LargeForgeSouthAddon
LargeForgeSouthDeed[Add LargeForgeSouthDeed
LargeForgeWest[Add LargeForgeWest
LargeMarbleDeed[Add LargeMarbleDeed
LargePainting[Add LargePainting
LargePatioDeed[Add LargePatioDeed
LargeSmithBOD[Add LargeSmithBOD
LargeStoneTableEastAddon[Add LargeStoneTableEastAddon
[Add LargeStoneTableEastAddon hue
LargeStoneTableEastDeed[Add LargeStoneTableEastDeed
LargeStoneTableSouthAddon[Add LargeStoneTableSouthAddon
[Add LargeStoneTableSouthAddon hue
LargeStoneTableSouthDeed[Add LargeStoneTableSouthDeed
LargeTable[Add LargeTable
LargeTailorBOD[Add LargeTailorBOD
LargeVase[Add LargeVase
LargeVioletFlask[Add LargeVioletFlask
LargeYellowFlask[Add LargeYellowFlask
LavaTile[Add LavaTile
LeafArms[Add LeafArms
Leafblade[Add Leafblade
LeafChest[Add LeafChest
LeafGloves[Add LeafGloves
LeafGorget[Add LeafGorget
LeafLegs[Add LeafLegs
LeafTonlet[Add LeafTonlet
Leather[Add Leather
[Add Leather amount
LeatherArms[Add LeatherArms
LeatherBustierArms[Add LeatherBustierArms
LeatherCap[Add LeatherCap
LeatherChest[Add LeatherChest
LeatherDo[Add LeatherDo
LeatherDyeTub[Add LeatherDyeTub
LeatherGloves[Add LeatherGloves
LeatherGlovesOfMining[Add LeatherGlovesOfMining bonus
LeatherGorget[Add LeatherGorget
LeatherHaidate[Add LeatherHaidate
LeatherHiroSode[Add LeatherHiroSode
LeatherJingasa[Add LeatherJingasa
LeatherLegs[Add LeatherLegs
LeatherMempo[Add LeatherMempo
LeatherNinjaBelt[Add LeatherNinjaBelt
LeatherNinjaHood[Add LeatherNinjaHood
LeatherNinjaJacket[Add LeatherNinjaJacket
LeatherNinjaMitts[Add LeatherNinjaMitts
LeatherNinjaPants[Add LeatherNinjaPants
LeatherShorts[Add LeatherShorts
LeatherSkirt[Add LeatherSkirt
LeatherSuneate[Add LeatherSuneate
LeatherTunicArtifact[Add LeatherTunicArtifact
LeftArm[Add LeftArm
LeftLeg[Add LeftLeg
LegacyOfTheDreadLord[Add LegacyOfTheDreadLord
LeggingsOfBane[Add LeggingsOfBane
LeggingsOfEmbers[Add LeggingsOfEmbers
LegsOfStability[Add LegsOfStability
Lemon[Add Lemon
[Add Lemon amount
Lemons[Add Lemons
[Add Lemons amount
LesserCurePotion[Add LesserCurePotion
LesserExplosionPotion[Add LesserExplosionPotion
LesserHealPotion[Add LesserHealPotion
LesserPigmentsOfTokuno[Add LesserPigmentsOfTokuno
[Add LesserPigmentsOfTokuno type
LesserPoisonPotion[Add LesserPoisonPotion
Lettuce[Add Lettuce
[Add Lettuce amount
LeurociansMempoOfFortune[Add LeurociansMempoOfFortune
LibraryBookcase[Add LibraryBookcase
LichFormScroll[Add LichFormScroll
[Add LichFormScroll amount
LieutenantOfTheBritannianRoyalGuard[Add LieutenantOfTheBritannianRoyalGuard
LifeOfATravellingMinstrel[Add LifeOfATravellingMinstrel
LightFlowerTapestryEastAddon[Add LightFlowerTapestryEastAddon
LightFlowerTapestryEastDeed[Add LightFlowerTapestryEastDeed
LightFlowerTapestrySouthAddon[Add LightFlowerTapestrySouthAddon
LightFlowerTapestrySouthDeed[Add LightFlowerTapestrySouthDeed
LightningScroll[Add LightningScroll
[Add LightningScroll amount
LightningWand[Add LightningWand
LightOfTheWinterSolstice[Add LightOfTheWinterSolstice
[Add LightOfTheWinterSolstice dipper
LightOfWayGlasses[Add LightOfWayGlasses
LightPlateJingasa[Add LightPlateJingasa
LightSource[Add LightSource
LightWoodDoor[Add LightWoodDoor facing
LightWoodGate[Add LightWoodGate facing
LightYarn[Add LightYarn
[Add LightYarn amount
LightYarnUnraveled[Add LightYarnUnraveled
[Add LightYarnUnraveled amount
Lime[Add Lime
[Add Lime amount
Limes[Add Limes
[Add Limes amount
LizardmenCamp[Add LizardmenCamp
LocalizedAddonComponent[Add LocalizedAddonComponent itemID labelNumber
LocalizedSign[Add LocalizedSign type facing labelNumber
[Add LocalizedSign itemID labelNumber
LocalizedStatic[Add LocalizedStatic itemID
[Add LocalizedStatic itemID labelNumber
LocalMap[Add LocalMap
LockableBarrel[Add LockableBarrel
Lockpick[Add Lockpick
[Add Lockpick amount
Lockpicks[Add Lockpicks
Log[Add Log
[Add Log amount
[Add Log resource
[Add Log resource amount
LogCabinDeed[Add LogCabinDeed
LongFlask[Add LongFlask
LongPants[Add LongPants
[Add LongPants hue
Longsword[Add Longsword
LoomEastAddon[Add LoomEastAddon
LoomEastDeed[Add LoomEastDeed
LoomSouthAddon[Add LoomSouthAddon
LoomSouthDeed[Add LoomSouthDeed
LordBlackthorneSuit[Add LordBlackthorneSuit
LordBritishSuit[Add LordBritishSuit
LOSBlocker[Add LOSBlocker
LtBlueCurvedFlask[Add LtBlueCurvedFlask
LuckyNecklace[Add LuckyNecklace
LuminescentFungi[Add LuminescentFungi
[Add LuminescentFungi amount
LuminousRuneBlade[Add LuminousRuneBlade
LunaLance[Add LunaLance
Lute[Add Lute
LyricalGlasses[Add LyricalGlasses
LysanderNotebook1[Add LysanderNotebook1
LysanderNotebook11[Add LysanderNotebook11
LysanderNotebook2[Add LysanderNotebook2
LysanderNotebook3[Add LysanderNotebook3
LysanderNotebook7[Add LysanderNotebook7
LysanderNotebook8[Add LysanderNotebook8
MaabusCoffin[Add MaabusCoffin
Mace[Add Mace
MaceShieldGlasses[Add MaceShieldGlasses
MageCamp[Add MageCamp
MagicalShortbow[Add MagicalShortbow
MagicArrowScroll[Add MagicArrowScroll
[Add MagicArrowScroll amount
MagicArrowWand[Add MagicArrowWand
MagicFlute[Add MagicFlute
MagicLockScroll[Add MagicLockScroll
[Add MagicLockScroll amount
MagicReflectScroll[Add MagicReflectScroll
[Add MagicReflectScroll amount
MagicTrapScroll[Add MagicTrapScroll
[Add MagicTrapScroll amount
MagicUnTrapScroll[Add MagicUnTrapScroll
[Add MagicUnTrapScroll amount
MagicWand[Add MagicWand
MagicWizardsHat[Add MagicWizardsHat
[Add MagicWizardsHat hue
MahjongGame[Add MahjongGame
MajorTradeAssociation[Add MajorTradeAssociation
MaleElvenRobe[Add MaleElvenRobe
[Add MaleElvenRobe hue
MaleKimono[Add MaleKimono
[Add MaleKimono hue
MalletAndChisel[Add MalletAndChisel
[Add MalletAndChisel uses
ManaDrainScroll[Add ManaDrainScroll
[Add ManaDrainScroll amount
ManaDrainWand[Add ManaDrainWand
ManaVampireScroll[Add ManaVampireScroll
[Add ManaVampireScroll amount
MandrakeRoot[Add MandrakeRoot
[Add MandrakeRoot amount
ManPortrait1[Add ManPortrait1
ManPortrait2[Add ManPortrait2
ManStatuetteEastArtifact[Add ManStatuetteEastArtifact
ManStatuetteSouthArtifact[Add ManStatuetteSouthArtifact
MapItem[Add MapItem
MapleArmoire[Add MapleArmoire
MapmakersPen[Add MapmakersPen
[Add MapmakersPen uses
MarbleFloor[Add MarbleFloor
MarblePavers[Add MarblePavers
MarbleStatueMaker[Add MarbleStatueMaker
MarbleWorkshopDeed[Add MarbleWorkshopDeed
MaritimeGlasses[Add MaritimeGlasses
MarkContainer[Add MarkContainer
[Add MarkContainer bone
[Add MarkContainer bone locked
MarkScroll[Add MarkScroll
[Add MarkScroll amount
MasonryBook[Add MasonryBook
MassCurseScroll[Add MassCurseScroll
[Add MassCurseScroll amount
MassDispelScroll[Add MassDispelScroll
[Add MassDispelScroll amount
Maul[Add Maul
MeatPie[Add MeatPie
MediumBoat[Add MediumBoat
MediumBoatDeed[Add MediumBoatDeed
MediumCrate[Add MediumCrate
MediumDragonBoat[Add MediumDragonBoat
MediumDragonBoatDeed[Add MediumDragonBoatDeed
MediumFlask[Add MediumFlask
MediumStoneTableEastAddon[Add MediumStoneTableEastAddon
[Add MediumStoneTableEastAddon hue
MediumStoneTableEastDeed[Add MediumStoneTableEastDeed
MediumStoneTableSouthAddon[Add MediumStoneTableSouthAddon
[Add MediumStoneTableSouthAddon hue
MediumStoneTableSouthDeed[Add MediumStoneTableSouthDeed
MediumStretchedHideEastAddon[Add MediumStretchedHideEastAddon
MediumStretchedHideEastDeed[Add MediumStretchedHideEastDeed
MediumStretchedHideSouthAddon[Add MediumStretchedHideSouthAddon
MediumStretchedHideSouthDeed[Add MediumStretchedHideSouthDeed
MediumWoodDoor[Add MediumWoodDoor facing
MelisandesCorrodedHatchet[Add MelisandesCorrodedHatchet
MeltedWax[Add MeltedWax
MessageInABottle[Add MessageInABottle
[Add MessageInABottle map level
MetalBox[Add MetalBox
MetalChest[Add MetalChest
MetalDoor[Add MetalDoor facing
MetalDoor2[Add MetalDoor2 facing
MetalGoldenChest[Add MetalGoldenChest
MetalGoldenPuzzleChest[Add MetalGoldenPuzzleChest
MetalGoldenTreasureChest[Add MetalGoldenTreasureChest
MetalHouseDoor[Add MetalHouseDoor facing
MetalKiteShield[Add MetalKiteShield
MetalPigmentsOfTokuno[Add MetalPigmentsOfTokuno
MetalShield[Add MetalShield
MetalTreasureChest[Add MetalTreasureChest
MeteorSwarmScroll[Add MeteorSwarmScroll
[Add MeteorSwarmScroll amount
MidnightBracers[Add MidnightBracers
MindBlastScroll[Add MindBlastScroll
[Add MindBlastScroll amount
MindRotScroll[Add MindRotScroll
[Add MindRotScroll amount
MiniHouseAddon[Add MiniHouseAddon
[Add MiniHouseAddon type
MiniHouseDeed[Add MiniHouseDeed
[Add MiniHouseDeed type
MiningCart[Add MiningCart type
MiningCartDeed[Add MiningCartDeed
MinotaurHedge[Add MinotaurHedge
MinotaurStatue[Add MinotaurStatue type
MinotaurStatueDeed[Add MinotaurStatueDeed
MisoSoup[Add MisoSoup
MistletoeAddon[Add MistletoeAddon
[Add MistletoeAddon hue
MistletoeDeed[Add MistletoeDeed
[Add MistletoeDeed hue
MonkRobe[Add MonkRobe
[Add MonkRobe hue
MonsterStatuette[Add MonsterStatuette
[Add MonsterStatuette type
MoonfireBrew[Add MoonfireBrew
Moongate[Add Moongate
[Add Moongate bDispellable
[Add Moongate target targetMap
Moonstone[Add Moonstone type
MorphItem[Add MorphItem inactiveItemID activeItemID range
[Add MorphItem inactiveItemID activeItemID inRange outRange
MortarPestle[Add MortarPestle
[Add MortarPestle uses
MouldingPlane[Add MouldingPlane
[Add MouldingPlane uses
MountedPixieBlueDeed[Add MountedPixieBlueDeed
MountedPixieGreenDeed[Add MountedPixieGreenDeed
MountedPixieLimeDeed[Add MountedPixieLimeDeed
MountedPixieOrangeDeed[Add MountedPixieOrangeDeed
MountedPixieWhiteDeed[Add MountedPixieWhiteDeed
Muculent[Add Muculent
[Add Muculent amountFrom amountTo
[Add Muculent amount
Muffins[Add Muffins
MushroomTrap[Add MushroomTrap
MyStory[Add MyStory
Nails[Add Nails
[Add Nails uses
NameChangeDeed[Add NameChangeDeed
NatureFuryScroll[Add NatureFuryScroll
[Add NatureFuryScroll amount
Necklace[Add Necklace
NecromancerSpellbook[Add NecromancerSpellbook
[Add NecromancerSpellbook content
NecromanticGlasses[Add NecromanticGlasses
NewPlayerTicket[Add NewPlayerTicket
Nightshade[Add Nightshade
[Add Nightshade amount
NightSightPotion[Add NightSightPotion
NightSightScroll[Add NightSightScroll
[Add NightSightScroll amount
NightsKiss[Add NightsKiss
Nightstand[Add Nightstand
NinjaTabi[Add NinjaTabi
[Add NinjaTabi hue
NoDachi[Add NoDachi
NorseHelm[Add NorseHelm
NoteForZoel[Add NoteForZoel
NoxCrystal[Add NoxCrystal
[Add NoxCrystal amount
NoxRangersHeavyCrossbow[Add NoxRangersHeavyCrossbow
Nunchaku[Add Nunchaku
OakBoard[Add OakBoard
[Add OakBoard amount
OakLog[Add OakLog
[Add OakLog amount
Obelisk[Add Obelisk
Obi[Add Obi
[Add Obi hue
OblivionsNeedle[Add OblivionsNeedle
Obsidian[Add Obsidian
OilCloth[Add OilCloth
Onion[Add Onion
[Add Onion amount
OpenCoconut[Add OpenCoconut
[Add OpenCoconut amount
OrangePetals[Add OrangePetals
[Add OrangePetals amount
OrcCamp[Add OrcCamp
OrcChieftainHelm[Add OrcChieftainHelm
OrcHelm[Add OrcHelm
OrcishKinMask[Add OrcishKinMask
[Add OrcishKinMask hue
OrcishVisage[Add OrcishVisage
OrderShield[Add OrderShield
OrigamiButterfly[Add OrigamiButterfly
OrigamiFish[Add OrigamiFish
OrigamiFrog[Add OrigamiFrog
OrigamiPaper[Add OrigamiPaper
OrigamiShape[Add OrigamiShape
OrigamiSongbird[Add OrigamiSongbird
OrigamiSwan[Add OrigamiSwan
OrnamentOfTheMagician[Add OrnamentOfTheMagician
OrnateAxe[Add OrnateAxe
OrnateCrownOfTheHarrower[Add OrnateCrownOfTheHarrower
OrnateElvenChair[Add OrnateElvenChair
OrnateElvenTableEastAddon[Add OrnateElvenTableEastAddon
OrnateElvenTableEastDeed[Add OrnateElvenTableEastDeed
OrnateElvenTableSouthAddon[Add OrnateElvenTableSouthAddon
OrnateElvenTableSouthDeed[Add OrnateElvenTableSouthDeed
OrnateWoodenChest[Add OrnateWoodenChest
OssianGrimoire[Add OssianGrimoire
OverseerSunderedBlade[Add OverseerSunderedBlade
Pacify[Add Pacify
PadsOfTheCuSidhe[Add PadsOfTheCuSidhe
PainSpikeScroll[Add PainSpikeScroll
[Add PainSpikeScroll amount
PaintedImage[Add PaintedImage image
Painting1NorthArtifact[Add Painting1NorthArtifact
Painting1WestArtifact[Add Painting1WestArtifact
Painting2NorthArtifact[Add Painting2NorthArtifact
Painting2WestArtifact[Add Painting2WestArtifact
Painting3Artifact[Add Painting3Artifact
Painting4NorthArtifact[Add Painting4NorthArtifact
Painting4WestArtifact[Add Painting4WestArtifact
Painting5NorthArtifact[Add Painting5NorthArtifact
Painting5WestArtifact[Add Painting5WestArtifact
Painting6NorthArtifact[Add Painting6NorthArtifact
Painting6WestArtifact[Add Painting6WestArtifact
PaintsAndBrush[Add PaintsAndBrush
PaperLantern[Add PaperLantern
ParagonChest[Add ParagonChest name level
ParalyzeFieldScroll[Add ParalyzeFieldScroll
[Add ParalyzeFieldScroll amount
ParalyzeScroll[Add ParalyzeScroll
[Add ParalyzeScroll amount
ParasiticPlant[Add ParasiticPlant
[Add ParasiticPlant amountFrom amountTo
[Add ParasiticPlant amount
ParrotPerchAddon[Add ParrotPerchAddon
ParrotPerchDeed[Add ParrotPerchDeed
Peach[Add Peach
[Add Peach amount
PeachCobbler[Add PeachCobbler
PeachTreeAddon[Add PeachTreeAddon
PeachTreeDeed[Add PeachTreeDeed
PeachTrunkAddon[Add PeachTrunkAddon
PeachTrunkDeed[Add PeachTrunkDeed
Pear[Add Pear
[Add Pear amount
PeasantsBokuto[Add PeasantsBokuto
PeculiarFish[Add PeculiarFish
PenAndInk[Add PenAndInk
PendantOfTheMagi[Add PendantOfTheMagi
PentagramAddon[Add PentagramAddon
PentagramDeed[Add PentagramDeed
PerfectEmerald[Add PerfectEmerald
[Add PerfectEmerald amountFrom amountTo
[Add PerfectEmerald amount
PewterBowlOfCarrots[Add PewterBowlOfCarrots
PewterBowlOfCorn[Add PewterBowlOfCorn
PewterBowlOfLettuce[Add PewterBowlOfLettuce
PewterBowlOfPeas[Add PewterBowlOfPeas
PewterBowlOfPotatos[Add PewterBowlOfPotatos
PewterMug[Add PewterMug
[Add PewterMug type
PhantomStaff[Add PhantomStaff
PhillipsWoodenSteed[Add PhillipsWoodenSteed
Pickaxe[Add Pickaxe
PickpocketDipEastAddon[Add PickpocketDipEastAddon
PickpocketDipEastDeed[Add PickpocketDipEastDeed
PickpocketDipSouthAddon[Add PickpocketDipSouthAddon
PickpocketDipSouthDeed[Add PickpocketDipSouthDeed
PicnicBasket[Add PicnicBasket
Pier[Add Pier
PigIron[Add PigIron
[Add PigIron amount
PigmentsOfTokuno[Add PigmentsOfTokuno
[Add PigmentsOfTokuno type
[Add PigmentsOfTokuno type uses
Pike[Add Pike
PileOfGlacialSnow[Add PileOfGlacialSnow
PilferedDancerFans[Add PilferedDancerFans
PinkFancyRugAddon[Add PinkFancyRugAddon
PinkFancyRugDeed[Add PinkFancyRugDeed
Pitcher[Add Pitcher
[Add Pitcher type
Pitchfork[Add Pitchfork
PixieSwatter[Add PixieSwatter
PlagueBeastGland[Add PlagueBeastGland
PlagueBeastMutationCore[Add PlagueBeastMutationCore
PlainDress[Add PlainDress
[Add PlainDress hue
PlainLowTable[Add PlainLowTable
PlainWoodenChest[Add PlainWoodenChest
PlantBowl[Add PlantBowl
PlantItem[Add PlantItem
[Add PlantItem fertileDirt
Plate[Add Plate
PlateArms[Add PlateArms
PlateBattleKabuto[Add PlateBattleKabuto
PlateChest[Add PlateChest
PlateDo[Add PlateDo
PlateGloves[Add PlateGloves
PlateGorget[Add PlateGorget
PlateHaidate[Add PlateHaidate
PlateHatsuburi[Add PlateHatsuburi
PlateHelm[Add PlateHelm
PlateHiroSode[Add PlateHiroSode
PlateLegs[Add PlateLegs
PlateMempo[Add PlateMempo
PlateSuneate[Add PlateSuneate
PlayerBBEast[Add PlayerBBEast
PlayerBBSouth[Add PlayerBBSouth
PlayingCards[Add PlayingCards
PlayingCards2[Add PlayingCards2
PoisonedGlasses[Add PoisonedGlasses
PoisonFieldScroll[Add PoisonFieldScroll
[Add PoisonFieldScroll amount
PoisonPotion[Add PoisonPotion
PoisonScroll[Add PoisonScroll
[Add PoisonScroll amount
PoisonStrikeScroll[Add PoisonStrikeScroll
[Add PoisonStrikeScroll amount
PolarBearMask[Add PolarBearMask
PolarBearRugEastAddon[Add PolarBearRugEastAddon
PolarBearRugEastDeed[Add PolarBearRugEastDeed
PolarBearRugSouthAddon[Add PolarBearRugSouthAddon
PolarBearRugSouthDeed[Add PolarBearRugSouthDeed
PolymorphScroll[Add PolymorphScroll
[Add PolymorphScroll amount
PoolOfAcid[Add PoolOfAcid
[Add PoolOfAcid duration minDamage maxDamage
PortcullisEW[Add PortcullisEW
PortcullisNS[Add PortcullisNS
PotionKeg[Add PotionKeg
PottedCactus[Add PottedCactus
PottedCactus1[Add PottedCactus1
PottedCactus2[Add PottedCactus2
PottedCactus3[Add PottedCactus3
PottedCactus4[Add PottedCactus4
PottedCactus5[Add PottedCactus5
PottedCactusDeed[Add PottedCactusDeed
PottedPlant[Add PottedPlant
PottedPlant1[Add PottedPlant1
PottedPlant2[Add PottedPlant2
PottedTree[Add PottedTree
PottedTree1[Add PottedTree1
Pouch[Add Pouch
PowderOfTemperament[Add PowderOfTemperament
[Add PowderOfTemperament charges
PowderOfTranslocation[Add PowderOfTranslocation
[Add PowderOfTranslocation amount
PowerCrystal[Add PowerCrystal
PowerGenerator[Add PowerGenerator
[Add PowerGenerator sideLength
PowerScroll[Add PowerScroll skill value
PresetMap[Add PresetMap type
PristineDreadHorn[Add PristineDreadHorn
PrizedFish[Add PrizedFish
ProspectorsTool[Add ProspectorsTool
ProtectionScroll[Add ProtectionScroll
[Add ProtectionScroll amount
PublicMoongate[Add PublicMoongate
Pumpkin[Add Pumpkin
[Add Pumpkin amount
PumpkinPie[Add PumpkinPie
Putrefication[Add Putrefication
[Add Putrefication amountFrom amountTo
[Add Putrefication amount
PyramidAddon[Add PyramidAddon
QuarterStaff[Add QuarterStaff
Quell[Add Quell
QuestDaemonBlood[Add QuestDaemonBlood
QuestDaemonBone[Add QuestDaemonBone
QuestFertileDirt[Add QuestFertileDirt
QuestOfVirtues[Add QuestOfVirtues
Quiche[Add Quiche
QuiverOfBlight[Add QuiverOfBlight
QuiverOfElements[Add QuiverOfElements
QuiverOfFire[Add QuiverOfFire
QuiverOfIce[Add QuiverOfIce
QuiverOfInfinity[Add QuiverOfInfinity
QuiverOfLightning[Add QuiverOfLightning
QuiverOfRage[Add QuiverOfRage
RadiantScimitar[Add RadiantScimitar
RaedsGlory[Add RaedsGlory
RaisableItem[Add RaisableItem itemID
[Add RaisableItem itemID maxElevation closeDelay
[Add RaisableItem itemID maxElevation moveSound stopSound closeDelay
RaiseSwitch[Add RaiseSwitch
RandomTalisman[Add RandomTalisman
RangerArms[Add RangerArms
RangerChest[Add RangerChest
RangerGloves[Add RangerGloves
RangerGorget[Add RangerGorget
RangerLegs[Add RangerLegs
RankingsOfTrades[Add RankingsOfTrades
RatCamp[Add RatCamp
RattanDoor[Add RattanDoor facing
RavenHelm[Add RavenHelm
RawBird[Add RawBird
[Add RawBird amount
RawChickenLeg[Add RawChickenLeg
RawFishSteak[Add RawFishSteak
[Add RawFishSteak amount
RawLambLeg[Add RawLambLeg
[Add RawLambLeg amount
RawRibs[Add RawRibs
[Add RawRibs amount
ReactiveArmorScroll[Add ReactiveArmorScroll
[Add ReactiveArmorScroll amount
ReaperFormScroll[Add ReaperFormScroll
[Add ReaperFormScroll amount
RecallRune[Add RecallRune
RecallScroll[Add RecallScroll
[Add RecallScroll amount
ReceiverCrystal[Add ReceiverCrystal
RecipeScroll[Add RecipeScroll recipeID
RedArmoire[Add RedArmoire
RedBeaker[Add RedBeaker
RedBook[Add RedBook
[Add RedBook pageCount writable
[Add RedBook title author pageCount writable
RedBottle[Add RedBottle
RedCurvedFlask[Add RedCurvedFlask
RedHangingLantern[Add RedHangingLantern
RedLeaves[Add RedLeaves
[Add RedLeaves amount
RedMisoSoup[Add RedMisoSoup
RedPlainRugAddon[Add RedPlainRugAddon
RedPlainRugDeed[Add RedPlainRugDeed
RedPoinsettia[Add RedPoinsettia
RedRibbedFlask[Add RedRibbedFlask
RedScales[Add RedScales
[Add RedScales amount
RedSoulstone[Add RedSoulstone
[Add RedSoulstone account
RedStocking[Add RedStocking
RedVelvetGiftBox[Add RedVelvetGiftBox
[Add RedVelvetGiftBox fill
RefreshPotion[Add RefreshPotion
RegardingLlamas[Add RegardingLlamas
RegStone[Add RegStone
RejuvinationAnkhNorth[Add RejuvinationAnkhNorth
RejuvinationAnkhWest[Add RejuvinationAnkhWest
RepairDeed[Add RepairDeed
[Add RepairDeed skill level
[Add RepairDeed skill level normalizeLevel
RepeatingCrossbow[Add RepeatingCrossbow
ReptalonFormTalisman[Add ReptalonFormTalisman
ResGate[Add ResGate
ResilientBracer[Add ResilientBracer
ResurrectionScroll[Add ResurrectionScroll
[Add ResurrectionScroll amount
RevealScroll[Add RevealScroll
[Add RevealScroll amount
RewardBlackDyeTub[Add RewardBlackDyeTub
RewardBrazier[Add RewardBrazier
[Add RewardBrazier itemID
RewardBrazierDeed[Add RewardBrazierDeed
RewardCake[Add RewardCake
RewardCloak[Add RewardCloak
[Add RewardCloak hue
[Add RewardCloak hue labelNumber
RewardDress[Add RewardDress
[Add RewardDress hue
[Add RewardDress hue labelNumber
RewardPottedCactus[Add RewardPottedCactus
[Add RewardPottedCactus itemID
RewardRobe[Add RewardRobe
[Add RewardRobe hue
[Add RewardRobe hue labelNumber
RibCage[Add RibCage
Ribs[Add Ribs
[Add Ribs amount
RideablePolarBear[Add RideablePolarBear
RightArm[Add RightArm
RighteousAnger[Add RighteousAnger
RightLeg[Add RightLeg
RingmailArms[Add RingmailArms
RingmailChest[Add RingmailChest
RingmailGloves[Add RingmailGloves
RingmailGlovesOfMining[Add RingmailGlovesOfMining bonus
RingmailLegs[Add RingmailLegs
RingOfTheElements[Add RingOfTheElements
RingOfTheVile[Add RingOfTheVile
RoastPig[Add RoastPig
[Add RoastPig amount
Robe[Add Robe
[Add Robe hue
RobeOfTheEclipse[Add RobeOfTheEclipse
RobeOfTheEquinox[Add RobeOfTheEquinox
RockArtifact[Add RockArtifact
RollingPin[Add RollingPin
[Add RollingPin uses
Rope[Add Rope
[Add Rope amount
RoseInAVase[Add RoseInAVase
RoseOfTrinsic[Add RoseOfTrinsic
RoseOfTrinsicPetal[Add RoseOfTrinsicPetal
[Add RoseOfTrinsicPetal amount
RoundPaperLantern[Add RoundPaperLantern
RoyalCirclet[Add RoyalCirclet
RoyalGuardSurvivalKnife[Add RoyalGuardSurvivalKnife
Ruby[Add Ruby
[Add Ruby amount
RuinedArmoire[Add RuinedArmoire
RuinedBookcase[Add RuinedBookcase
RuinedBooks[Add RuinedBooks
RuinedChair[Add RuinedChair
RuinedClock[Add RuinedClock
RuinedDrawers[Add RuinedDrawers
RuinedFallenChairA[Add RuinedFallenChairA
RuinedFallenChairB[Add RuinedFallenChairB
RuinedPainting[Add RuinedPainting
RuinedPaintingArtifact[Add RuinedPaintingArtifact
RuneBeetleCarapace[Add RuneBeetleCarapace
RuneBlade[Add RuneBlade
Runebook[Add Runebook maxCharges
[Add Runebook
RunebookDyeTub[Add RunebookDyeTub
RuneCarvingKnife[Add RuneCarvingKnife
RunedPrism[Add RunedPrism
RunedSwitch[Add RunedSwitch
RunicDovetailSaw[Add RunicDovetailSaw resource
[Add RunicDovetailSaw resource uses
RunicHammer[Add RunicHammer resource
[Add RunicHammer resource uses
RunicSewingKit[Add RunicSewingKit resource
[Add RunicSewingKit resource uses
SackFlour[Add SackFlour
SacrificialAltarAddon[Add SacrificialAltarAddon
SacrificialAltarDeed[Add SacrificialAltarDeed
SaddleArtifact[Add SaddleArtifact
Sai[Add Sai
SakeArtifact[Add SakeArtifact
SalvageBag[Add SalvageBag
[Add SalvageBag hue
SamaritanRobe[Add SamaritanRobe
SamuraiHelm[Add SamuraiHelm
SamuraiTabi[Add SamuraiTabi
[Add SamuraiTabi hue
Sand[Add Sand
[Add Sand amount
Sandals[Add Sandals
[Add Sandals hue
SandFlagstones[Add SandFlagstones
SandMiningBook[Add SandMiningBook
SandstoneFireplaceEastAddon[Add SandstoneFireplaceEastAddon
SandstoneFireplaceEastDeed[Add SandstoneFireplaceEastDeed
SandstoneFireplaceSouthAddon[Add SandstoneFireplaceSouthAddon
SandstoneFireplaceSouthDeed[Add SandstoneFireplaceSouthDeed
SandstoneFloorN[Add SandstoneFloorN
SandstoneFloorW[Add SandstoneFloorW
SandstoneFountainAddon[Add SandstoneFountainAddon
SandstonePatioDeed[Add SandstonePatioDeed
Sapphire[Add Sapphire
[Add Sapphire amount
Sausage[Add Sausage
[Add Sausage amount
SausagePizza[Add SausagePizza
SavageMask[Add SavageMask
[Add SavageMask hue
Saw[Add Saw
[Add Saw uses
SawTrap[Add SawTrap
[Add SawTrap type
Scales[Add Scales
ScarecrowAddon[Add ScarecrowAddon
ScarecrowDeed[Add ScarecrowDeed
Scepter[Add Scepter
SchmendrickApprenticeCorpse[Add SchmendrickApprenticeCorpse
Scimitar[Add Scimitar
Scissors[Add Scissors
Scorp[Add Scorp
[Add Scorp uses
Scourge[Add Scourge
[Add Scourge amountFrom amountTo
[Add Scourge amount
ScribeBag[Add ScribeBag
[Add ScribeBag amount
ScribesPen[Add ScribesPen
[Add ScribesPen uses
ScribeStone[Add ScribeStone
ScrollOfAbraxus[Add ScrollOfAbraxus
ScrollofAlacrity[Add ScrollofAlacrity skill
ScrollofTranscendence[Add ScrollofTranscendence skill value
Sculpture1Artifact[Add Sculpture1Artifact
Sculpture2Artifact[Add Sculpture2Artifact
Scythe[Add Scythe
SeaChart[Add SeaChart
SeahorseStatuette[Add SeahorseStatuette
SecretDungeonDoor[Add SecretDungeonDoor facing
SecretLightWoodDoor[Add SecretLightWoodDoor facing
SecretStoneDoor1[Add SecretStoneDoor1 facing
SecretStoneDoor2[Add SecretStoneDoor2 facing
SecretStoneDoor3[Add SecretStoneDoor3 facing
SecretWoodenDoor[Add SecretWoodenDoor facing
Seed[Add Seed
[Add Seed plantType plantHue showType
SeerRobe[Add SeerRobe
SerpentPillar[Add SerpentPillar
SerpentPillarAddon[Add SerpentPillarAddon
SerpentsFang[Add SerpentsFang
SewingKit[Add SewingKit
[Add SewingKit uses
Sextant[Add Sextant
SextantParts[Add SextantParts
[Add SextantParts amount
ShadowDancerLeggings[Add ShadowDancerLeggings
ShadowIronGranite[Add ShadowIronGranite
ShadowIronIngot[Add ShadowIronIngot
[Add ShadowIronIngot amount
ShadowIronOre[Add ShadowIronOre
[Add ShadowIronOre amount
Shaft[Add Shaft
[Add Shaft amount
ShaminoCrossbow[Add ShaminoCrossbow
ShardPoller[Add ShardPoller
ShardThrasher[Add ShardThrasher
SheafOfHay[Add SheafOfHay
ShepherdsCrook[Add ShepherdsCrook
ShieldOfInvulnerability[Add ShieldOfInvulnerability
ShipModelOfTheHMSCape[Add ShipModelOfTheHMSCape
Shirt[Add Shirt
[Add Shirt hue
Shoes[Add Shoes
[Add Shoes hue
ShojiLantern[Add ShojiLantern
ShojiScreen[Add ShojiScreen
ShortCabinet[Add ShortCabinet
ShortMusicStand[Add ShortMusicStand
ShortPants[Add ShortPants
[Add ShortPants hue
ShortSpear[Add ShortSpear
Shovel[Add Shovel
[Add Shovel uses
ShrineOfWisdomAddon[Add ShrineOfWisdomAddon
ShrineOfWisdomComponent[Add ShrineOfWisdomComponent itemID
ShroudOfDeciet[Add ShroudOfDeciet
SHTeleComponent[Add SHTeleComponent
[Add SHTeleComponent itemID
[Add SHTeleComponent itemID offset
SHTeleporter[Add SHTeleporter
[Add SHTeleporter external
Shuriken[Add Shuriken
[Add Shuriken amount
Sign[Add Sign type facing
[Add Sign itemID
SilvanisFeywoodBow[Add SilvanisFeywoodBow
Silver[Add Silver
[Add Silver amountFrom amountTo
[Add Silver amount
SilverBeadNecklace[Add SilverBeadNecklace
SilverBracelet[Add SilverBracelet
SilverEarrings[Add SilverEarrings
SilverNecklace[Add SilverNecklace
SilverRing[Add SilverRing
SilverWire[Add SilverWire
[Add SilverWire amount
Skillet[Add Skillet
[Add Skillet uses
SkillTeleporter[Add SkillTeleporter
SkinnedDeerArtifact[Add SkinnedDeerArtifact
SkinnedGoatArtifact[Add SkinnedGoatArtifact
SkinningKnife[Add SkinningKnife
Skirt[Add Skirt
[Add Skirt hue
SkullCandleArtifact[Add SkullCandleArtifact
SkullCap[Add SkullCap
[Add SkullCap hue
SkullPileAddon[Add SkullPileAddon
SkullPole[Add SkullPole
SlabOfBacon[Add SlabOfBacon
[Add SlabOfBacon amount
SledgeHammer[Add SledgeHammer
[Add SledgeHammer uses
SmallBagBall[Add SmallBagBall
SmallBedEastAddon[Add SmallBedEastAddon
SmallBedEastDeed[Add SmallBedEastDeed
SmallBedSouthAddon[Add SmallBedSouthAddon
SmallBedSouthDeed[Add SmallBedSouthDeed
SmallBlueBottle[Add SmallBlueBottle
SmallBlueFlask[Add SmallBlueFlask
SmallBoat[Add SmallBoat
SmallBoatDeed[Add SmallBoatDeed
SmallBrickHouseDeed[Add SmallBrickHouseDeed
SmallBrownBottle[Add SmallBrownBottle
SmallCrate[Add SmallCrate
SmallDragonBoat[Add SmallDragonBoat
SmallDragonBoatDeed[Add SmallDragonBoatDeed
SmallEmptyFlask[Add SmallEmptyFlask
SmallEmptyPot[Add SmallEmptyPot
SmallFishingNetAddon[Add SmallFishingNetAddon
SmallFishingNetDeed[Add SmallFishingNetDeed
SmallFlask[Add SmallFlask
SmallForgeAddon[Add SmallForgeAddon
SmallForgeDeed[Add SmallForgeDeed
SmallGreenBottle[Add SmallGreenBottle
SmallGreenBottle2[Add SmallGreenBottle2
SmallPlateJingasa[Add SmallPlateJingasa
SmallPumpkin[Add SmallPumpkin
[Add SmallPumpkin amount
SmallRedFlask[Add SmallRedFlask
SmallSmithBOD[Add SmallSmithBOD
SmallStretchedHideEastAddon[Add SmallStretchedHideEastAddon
SmallStretchedHideEastDeed[Add SmallStretchedHideEastDeed
SmallStretchedHideSouthAddon[Add SmallStretchedHideSouthAddon
SmallStretchedHideSouthDeed[Add SmallStretchedHideSouthDeed
SmallTailorBOD[Add SmallTailorBOD
SmallTowerDeed[Add SmallTowerDeed
SmallTowerSculpture[Add SmallTowerSculpture
SmallUrn[Add SmallUrn
SmallVioletBottle[Add SmallVioletBottle
SmallWatermelon[Add SmallWatermelon
[Add SmallWatermelon amount
SmallYellowFlask[Add SmallYellowFlask
SmithBag[Add SmithBag
[Add SmithBag amount
SmithHammer[Add SmithHammer
[Add SmithHammer uses
SmithStone[Add SmithStone
SmokeBomb[Add SmokeBomb
SmoothingPlane[Add SmoothingPlane
[Add SmoothingPlane uses
Snowman[Add Snowman
[Add Snowman hue
[Add Snowman title
[Add Snowman hue title
SnowPile[Add SnowPile
SnowPileDeco[Add SnowPileDeco
[Add SnowPileDeco itemid
SnowyTree[Add SnowyTree
SolenAntHole[Add SolenAntHole
SongOfSamlethe[Add SongOfSamlethe
SongWovenMantle[Add SongWovenMantle
SOS[Add SOS
[Add SOS map
[Add SOS map level
SoulSeeker[Add SoulSeeker
SoulStone[Add SoulStone
[Add SoulStone account
SoulstoneFragment[Add SoulstoneFragment
[Add SoulstoneFragment usesRemaining
[Add SoulstoneFragment account
[Add SoulstoneFragment usesRemaining account
SoulstoneFragmentToken[Add SoulstoneFragmentToken
Spam[Add Spam
Spawner[Add Spawner
[Add Spawner spawnName
[Add Spawner amount minDelay maxDelay team homeRange spawnName
Spear[Add Spear
SpecialBeardDye[Add SpecialBeardDye
SpecialDyeTub[Add SpecialDyeTub
SpecialFishingNet[Add SpecialFishingNet
SpecialHairDye[Add SpecialHairDye
Spellbook[Add Spellbook
[Add Spellbook content
SpellScroll[Add SpellScroll spellID itemID
[Add SpellScroll spellID itemID amount
SpellweavingBook[Add SpellweavingBook
[Add SpellweavingBook content
SpellWovenBritches[Add SpellWovenBritches
SpidersSilk[Add SpidersSilk
[Add SpidersSilk amount
SpikeTrap[Add SpikeTrap
[Add SpikeTrap type
SpinedHides[Add SpinedHides
[Add SpinedHides amount
SpinedLeather[Add SpinedLeather
[Add SpinedLeather amount
SpinningHourglass[Add SpinningHourglass
SpinningwheelEastAddon[Add SpinningwheelEastAddon
SpinningwheelEastDeed[Add SpinningwheelEastDeed
SpinningwheelSouthAddon[Add SpinningwheelSouthAddon
SpinningwheelSouthDeed[Add SpinningwheelSouthDeed
SpiritOfTheTotem[Add SpiritOfTheTotem
SplitCoconut[Add SplitCoconut
[Add SplitCoconut amount
SpoolOfThread[Add SpoolOfThread
[Add SpoolOfThread amount
Spoon[Add Spoon
SpoonLeft[Add SpoonLeft
SpoonRight[Add SpoonRight
Springs[Add Springs
[Add Springs amount
Spyglass[Add Spyglass
SquareGozaMatEastAddon[Add SquareGozaMatEastAddon
[Add SquareGozaMatEastAddon hue
SquareGozaMatEastDeed[Add SquareGozaMatEastDeed
SquareGozaMatSouthAddon[Add SquareGozaMatSouthAddon
[Add SquareGozaMatSouthAddon hue
SquareGozaMatSouthDeed[Add SquareGozaMatSouthDeed
Squash[Add Squash
[Add Squash amount
SquirrelFormTalisman[Add SquirrelFormTalisman
SquirrelStatueEastAddon[Add SquirrelStatueEastAddon
SquirrelStatueEastDeed[Add SquirrelStatueEastDeed
SquirrelStatueSouthAddon[Add SquirrelStatueSouthAddon
SquirrelStatueSouthDeed[Add SquirrelStatueSouthDeed
StaffOfPower[Add StaffOfPower
StaffOfTheMagi[Add StaffOfTheMagi
StainedOoze[Add StainedOoze
[Add StainedOoze corrosive
StandardPlateKabuto[Add StandardPlateKabuto
StandingBrokenChairAddon[Add StandingBrokenChairAddon
StandingBrokenChairDeed[Add StandingBrokenChairDeed
StarRoomGate[Add StarRoomGate
[Add StarRoomGate decays loc map
[Add StarRoomGate decays
StarSapphire[Add StarSapphire
[Add StarSapphire amount
StatCapScroll[Add StatCapScroll value
Static[Add Static itemID
[Add Static itemID count
StatueEast[Add StatueEast
StatueEast2[Add StatueEast2
StatueNorth[Add StatueNorth
StatuePegasus[Add StatuePegasus
StatuePegasus2[Add StatuePegasus2
StatueSouth[Add StatueSouth
StatueSouth2[Add StatueSouth2
StatueSouthEast[Add StatueSouthEast
StatuetteDyeTub[Add StatuetteDyeTub
StatueWest[Add StatueWest
StitchersMittens[Add StitchersMittens
StoneAnkh[Add StoneAnkh
[Add StoneAnkh east
StoneAnkhDeed[Add StoneAnkhDeed
StoneChair[Add StoneChair
StoneFaceTrap[Add StoneFaceTrap
StoneFaceTrapNoDamage[Add StoneFaceTrapNoDamage
StoneFireplaceEastAddon[Add StoneFireplaceEastAddon
StoneFireplaceEastDeed[Add StoneFireplaceEastDeed
StoneFireplaceSouthAddon[Add StoneFireplaceSouthAddon
StoneFireplaceSouthDeed[Add StoneFireplaceSouthDeed
StoneFountainAddon[Add StoneFountainAddon
StoneMiningBook[Add StoneMiningBook
StoneOvenEastAddon[Add StoneOvenEastAddon
StoneOvenEastDeed[Add StoneOvenEastDeed
StoneOvenSouthAddon[Add StoneOvenSouthAddon
StoneOvenSouthDeed[Add StoneOvenSouthDeed
StonePaversDark[Add StonePaversDark
StonePaversLight[Add StonePaversLight
StonePaversMedium[Add StonePaversMedium
StonePlasterHouseDeed[Add StonePlasterHouseDeed
StoneStatueAddon[Add StoneStatueAddon east
StoneStatueDeed[Add StoneStatueDeed
StoneWorkshopDeed[Add StoneWorkshopDeed
Stool[Add Stool
Stormgrip[Add Stormgrip
StrangleScroll[Add StrangleScroll
[Add StrangleScroll amount
StrawHat[Add StrawHat
[Add StrawHat hue
StrengthPotion[Add StrengthPotion
StrengthScroll[Add StrengthScroll
[Add StrengthScroll amount
StretchedHideArtifact[Add StretchedHideArtifact
StrongBackpack[Add StrongBackpack
StrongBoxPuzzle[Add StrongBoxPuzzle
StrongWoodDoor[Add StrongWoodDoor facing
StuddedArms[Add StuddedArms
StuddedBustierArms[Add StuddedBustierArms
StuddedChest[Add StuddedChest
StuddedDo[Add StuddedDo
StuddedGloves[Add StuddedGloves
StuddedGlovesOfMining[Add StuddedGlovesOfMining bonus
StuddedGorget[Add StuddedGorget
StuddedHaidate[Add StuddedHaidate
StuddedHiroSode[Add StuddedHiroSode
StuddedLeggingsArtifact[Add StuddedLeggingsArtifact
StuddedLegs[Add StuddedLegs
StuddedMempo[Add StuddedMempo
StuddedSuneate[Add StuddedSuneate
StuddedTunicArtifact[Add StuddedTunicArtifact
SturdyPickaxe[Add SturdyPickaxe
[Add SturdyPickaxe uses
SturdyShovel[Add SturdyShovel
[Add SturdyShovel uses
Subdue[Add Subdue
SuitOfGoldArmorAddon[Add SuitOfGoldArmorAddon
SuitOfGoldArmorDeed[Add SuitOfGoldArmorDeed
SuitOfSilverArmorAddon[Add SuitOfSilverArmorAddon
SuitOfSilverArmorDeed[Add SuitOfSilverArmorDeed
SulfurousAsh[Add SulfurousAsh
[Add SulfurousAsh amount
SummonAirElementalScroll[Add SummonAirElementalScroll
[Add SummonAirElementalScroll amount
SummonCreatureScroll[Add SummonCreatureScroll
[Add SummonCreatureScroll amount
SummonDaemonScroll[Add SummonDaemonScroll
[Add SummonDaemonScroll amount
SummonEarthElementalScroll[Add SummonEarthElementalScroll
[Add SummonEarthElementalScroll amount
SummonFamiliarScroll[Add SummonFamiliarScroll
[Add SummonFamiliarScroll amount
SummonFeyScroll[Add SummonFeyScroll
[Add SummonFeyScroll amount
SummonFiendScroll[Add SummonFiendScroll
[Add SummonFiendScroll amount
SummonFireElementalScroll[Add SummonFireElementalScroll
[Add SummonFireElementalScroll amount
SummoningAltar[Add SummoningAltar
SummonWaterElementalScroll[Add SummonWaterElementalScroll
[Add SummonWaterElementalScroll amount
Surcoat[Add Surcoat
[Add Surcoat hue
SushiPlatter[Add SushiPlatter
SushiRolls[Add SushiRolls
SwampTile[Add SwampTile
SwarmOfFlies[Add SwarmOfFlies
SweetDough[Add SweetDough
SwitchItem[Add SwitchItem
[Add SwitchItem amountFrom amountTo
[Add SwitchItem amount
SwordDisplay1NorthArtifact[Add SwordDisplay1NorthArtifact
SwordDisplay1WestArtifact[Add SwordDisplay1WestArtifact
SwordDisplay2NorthArtifact[Add SwordDisplay2NorthArtifact
SwordDisplay2WestArtifact[Add SwordDisplay2WestArtifact
SwordDisplay3EastArtifact[Add SwordDisplay3EastArtifact
SwordDisplay3SouthArtifact[Add SwordDisplay3SouthArtifact
SwordDisplay4NorthArtifact[Add SwordDisplay4NorthArtifact
SwordDisplay4WestArtifact[Add SwordDisplay4WestArtifact
SwordDisplay5NorthArtifact[Add SwordDisplay5NorthArtifact
SwordDisplay5WestArtifact[Add SwordDisplay5WestArtifact
SwordOfTheStampede[Add SwordOfTheStampede
SwordsOfProsperity[Add SwordsOfProsperity
TableWithBlueClothAddon[Add TableWithBlueClothAddon
TableWithBlueClothDeed[Add TableWithBlueClothDeed
TableWithOrangeClothAddon[Add TableWithOrangeClothAddon
TableWithOrangeClothDeed[Add TableWithOrangeClothDeed
TableWithPurpleClothAddon[Add TableWithPurpleClothAddon
TableWithPurpleClothDeed[Add TableWithPurpleClothDeed
TableWithRedClothAddon[Add TableWithRedClothAddon
TableWithRedClothDeed[Add TableWithRedClothDeed
TailorBag[Add TailorBag
[Add TailorBag amount
TailorStone[Add TailorStone
Taint[Add Taint
[Add Taint amountFrom amountTo
[Add Taint amount
TaintedWool[Add TaintedWool
[Add TaintedWool amount
TaleOfThreeTribes[Add TaleOfThreeTribes
TalesOfVesperVol1[Add TalesOfVesperVol1
TalkingToWisps[Add TalkingToWisps
TallCabinet[Add TallCabinet
TallElvenBedEastAddon[Add TallElvenBedEastAddon
TallElvenBedEastDeed[Add TallElvenBedEastDeed
TallElvenBedSouthAddon[Add TallElvenBedSouthAddon
TallElvenBedSouthDeed[Add TallElvenBedSouthDeed
TallMusicStand[Add TallMusicStand
TallStrawHat[Add TallStrawHat
[Add TallStrawHat hue
TalonBite[Add TalonBite
Tambourine[Add Tambourine
TambourineTassel[Add TambourineTassel
TamingDragons[Add TamingDragons
TanBook[Add TanBook
[Add TanBook pageCount writable
[Add TanBook title author pageCount writable
Tapestry1N[Add Tapestry1N
Tapestry2N[Add Tapestry2N
Tapestry2W[Add Tapestry2W
Tapestry3N[Add Tapestry3N
Tapestry3W[Add Tapestry3W
Tapestry4N[Add Tapestry4N
Tapestry4W[Add Tapestry4W
Tapestry5N[Add Tapestry5N
Tapestry5W[Add Tapestry5W
Tapestry6N[Add Tapestry6N
Tapestry6W[Add Tapestry6W
TapestryOfSosaria[Add TapestryOfSosaria
TarotCardsArtifact[Add TarotCardsArtifact
TatteredAncientMummyWrapping[Add TatteredAncientMummyWrapping
TattsukeHakama[Add TattsukeHakama
[Add TattsukeHakama hue
TavarasJournal1[Add TavarasJournal1
TavarasJournal11[Add TavarasJournal11
TavarasJournal14[Add TavarasJournal14
TavarasJournal16[Add TavarasJournal16
TavarasJournal16b[Add TavarasJournal16b
TavarasJournal17[Add TavarasJournal17
TavarasJournal19[Add TavarasJournal19
TavarasJournal2[Add TavarasJournal2
TavarasJournal3[Add TavarasJournal3
TavarasJournal6[Add TavarasJournal6
TavarasJournal7[Add TavarasJournal7
TavarasJournal8[Add TavarasJournal8
TavarasJournal9[Add TavarasJournal9
TaxidermyKit[Add TaxidermyKit
TeapotNorthArtifact[Add TeapotNorthArtifact
TeapotWestArtifact[Add TeapotWestArtifact
Tekagi[Add Tekagi
TelekinisisScroll[Add TelekinisisScroll
[Add TelekinisisScroll amount
Teleporter[Add Teleporter
[Add Teleporter pointDest mapDest
[Add Teleporter pointDest mapDest creatures
TeleportScroll[Add TeleportScroll
[Add TeleportScroll amount
Telescope[Add Telescope
Tessen[Add Tessen
Tetsubo[Add Tetsubo
ThatchedRoofCottageDeed[Add ThatchedRoofCottageDeed
TheBeserkersMaul[Add TheBeserkersMaul
TheDestroyer[Add TheDestroyer
TheDragonSlayer[Add TheDragonSlayer
TheDryadBow[Add TheDryadBow
TheFight[Add TheFight
TheHorselord[Add TheHorselord
TheMostKnowledgePerson[Add TheMostKnowledgePerson
TheNightReaper[Add TheNightReaper
TheRobeOfBritanniaAri[Add TheRobeOfBritanniaAri
TheTaskmaster[Add TheTaskmaster
ThickGrayStoneWall[Add ThickGrayStoneWall type
ThighBoots[Add ThighBoots
[Add ThighBoots hue
ThinBrickWall[Add ThinBrickWall type
ThinLongsword[Add ThinLongsword
ThinStoneWall[Add ThinStoneWall type
Throne[Add Throne
ThrowingDagger[Add ThrowingDagger
ThunderstormScroll[Add ThunderstormScroll
[Add ThunderstormScroll amount
TinkersTools[Add TinkersTools
[Add TinkersTools uses
TinkerTools[Add TinkerTools
[Add TinkerTools uses
TinyRedBottle[Add TinyRedBottle
TinyYellowBottle[Add TinyYellowBottle
TitansHammer[Add TitansHammer
TomeOfEnlightenment[Add TomeOfEnlightenment
TomeOfLostKnowledge[Add TomeOfLostKnowledge
Tongs[Add Tongs
[Add Tongs uses
ToolKit[Add ToolKit
Torch[Add Torch
TormentedChains[Add TormentedChains
Torso[Add Torso
TotalRefreshPotion[Add TotalRefreshPotion
TotemOfVoid[Add TotemOfVoid
Tourmaline[Add Tourmaline
[Add Tourmaline amount
TowerDeed[Add TowerDeed
TowerLanternArtifact[Add TowerLanternArtifact
TownStone[Add TownStone
[Add TownStone town
TradeGlasses[Add TradeGlasses
TrainingDummy[Add TrainingDummy
[Add TrainingDummy itemID
TrainingDummyEastAddon[Add TrainingDummyEastAddon
TrainingDummyEastDeed[Add TrainingDummyEastDeed
TrainingDummySouthAddon[Add TrainingDummySouthAddon
TrainingDummySouthDeed[Add TrainingDummySouthDeed
TransientItem[Add TransientItem itemID lifeSpan
TranslatedGargoyleJournal[Add TranslatedGargoyleJournal
TrashBarrel[Add TrashBarrel
TrashChest[Add TrashChest
TreasureMap[Add TreasureMap level map
TreasureMapChest[Add TreasureMapChest level
TreasureTrinketGlasses[Add TreasureTrinketGlasses
TreatiseOnAlchemy[Add TreatiseOnAlchemy
TreeStump[Add TreeStump itemID
TreeStumpDeed[Add TreeStumpDeed
TribalBerry[Add TribalBerry
[Add TribalBerry amount
TribalMask[Add TribalMask
[Add TribalMask hue
TribalPaint[Add TribalPaint
TribalSpear[Add TribalSpear
TricorneHat[Add TricorneHat
[Add TricorneHat hue
TripleFanNorthArtifact[Add TripleFanNorthArtifact
TripleFanWestArtifact[Add TripleFanWestArtifact
TrophyAddon[Add TrophyAddon from itemID westID northID deedNumber addonNumber
TrophyDeed[Add TrophyDeed westID northID deedNumber addonNumber
TrulyRareFish[Add TrulyRareFish
Tub[Add Tub
[Add Tub filled
Tunic[Add Tunic
[Add Tunic hue
TunicOfFire[Add TunicOfFire
Turnip[Add Turnip
[Add Turnip amount
Turquoise[Add Turquoise
[Add Turquoise amountFrom amountTo
[Add Turquoise amount
TwoHandedAxe[Add TwoHandedAxe
TwoStoryStonePlasterHouseDeed[Add TwoStoryStonePlasterHouseDeed
TwoStoryWoodPlasterHouseDeed[Add TwoStoryWoodPlasterHouseDeed
UnbakedApplePie[Add UnbakedApplePie
UnbakedFruitPie[Add UnbakedFruitPie
UnbakedMeatPie[Add UnbakedMeatPie
UnbakedPeachCobbler[Add UnbakedPeachCobbler
UnbakedPumpkinPie[Add UnbakedPumpkinPie
UnbakedQuiche[Add UnbakedQuiche
UncookedCheesePizza[Add UncookedCheesePizza
UncookedSausagePizza[Add UncookedSausagePizza
UncutCloth[Add UncutCloth
[Add UncutCloth amount
UnfinishedBarrel[Add UnfinishedBarrel
UnholyBone[Add UnholyBone
UnlockScroll[Add UnlockScroll
[Add UnlockScroll amount
UnmadeBedAddon[Add UnmadeBedAddon east
UnmadeBedDeed[Add UnmadeBedDeed
UnsettlingPortraitAddon[Add UnsettlingPortraitAddon
UnsettlingPortraitDeed[Add UnsettlingPortraitDeed
Urn1Artifact[Add Urn1Artifact
Urn2Artifact[Add Urn2Artifact
UzeraanTurmoilHorn[Add UzeraanTurmoilHorn
UzeraanTurmoilTeleporter[Add UzeraanTurmoilTeleporter
ValentinesCard[Add ValentinesCard itemid
ValentinesCardEast[Add ValentinesCardEast
ValentinesCardSouth[Add ValentinesCardSouth
ValoriteGranite[Add ValoriteGranite
ValoriteIngot[Add ValoriteIngot
[Add ValoriteIngot amount
ValoriteOre[Add ValoriteOre
[Add ValoriteOre amount
VampiricEmbraceScroll[Add VampiricEmbraceScroll
[Add VampiricEmbraceScroll amount
VanityAddon[Add VanityAddon east
VanityDeed[Add VanityDeed
Vase[Add Vase
VaultOfSecretsBarrier[Add VaultOfSecretsBarrier
VendorRentalContract[Add VendorRentalContract
VengefulSpiritScroll[Add VengefulSpiritScroll
[Add VengefulSpiritScroll amount
VeriteGranite[Add VeriteGranite
VeriteIngot[Add VeriteIngot
[Add VeriteIngot amount
VeriteOre[Add VeriteOre
[Add VeriteOre amount
VikingSword[Add VikingSword
VillaDeed[Add VillaDeed
Vines[Add Vines
[Add Vines v
VioletCourage[Add VioletCourage
VioletRibbedFlask[Add VioletRibbedFlask
VirtueBook[Add VirtueBook
VoiceOfTheFallenKing[Add VoiceOfTheFallenKing
VultureHelm[Add VultureHelm
Wakizashi[Add Wakizashi
WallBanner[Add WallBanner bannerID
WallBannerDeed[Add WallBannerDeed
WallBlood[Add WallBlood
WallOfStoneScroll[Add WallOfStoneScroll
[Add WallOfStoneScroll amount
WallSconce[Add WallSconce
WallTorch[Add WallTorch
WallTorchDeed[Add WallTorchDeed
Waraji[Add Waraji
[Add Waraji hue
WarAxe[Add WarAxe
WarCleaver[Add WarCleaver
WarFork[Add WarFork
WarHammer[Add WarHammer
WarMace[Add WarMace
WarningItem[Add WarningItem itemID range warning
[Add WarningItem itemID range warning
WarriorStatueEastAddon[Add WarriorStatueEastAddon
WarriorStatueEastDeed[Add WarriorStatueEastDeed
WarriorStatueSouthAddon[Add WarriorStatueSouthAddon
WarriorStatueSouthDeed[Add WarriorStatueSouthDeed
Wasabi[Add Wasabi
WasabiClumps[Add WasabiClumps
WaterBarrel[Add WaterBarrel
[Add WaterBarrel filled
Watermelon[Add Watermelon
[Add Watermelon amount
WaterTile[Add WaterTile
WaterTroughEastAddon[Add WaterTroughEastAddon
WaterTroughEastDeed[Add WaterTroughEastDeed
WaterTroughSouthAddon[Add WaterTroughSouthAddon
WaterTroughSouthDeed[Add WaterTroughSouthDeed
WaterVatEast[Add WaterVatEast
WaterVatSouth[Add WaterVatSouth
WayPoint[Add WayPoint
WeakenScroll[Add WeakenScroll
[Add WeakenScroll amount
WeaknessWand[Add WeaknessWand
WeaponEngravingTool[Add WeaponEngravingTool
[Add WeaponEngravingTool uses
WeatherMap[Add WeatherMap
Web[Add Web
[Add Web itemid
WheatSheaf[Add WheatSheaf
[Add WheatSheaf amount
Whip[Add Whip
WhiteDriedFlowers[Add WhiteDriedFlowers
[Add WhiteDriedFlowers amount
WhiteHangingLantern[Add WhiteHangingLantern
WhiteMisoSoup[Add WhiteMisoSoup
WhiteNinjaQuestTeleporter[Add WhiteNinjaQuestTeleporter
WhitePearl[Add WhitePearl
[Add WhitePearl amountFrom amountTo
[Add WhitePearl amount
WhitePoinsettia[Add WhitePoinsettia
WhiteScales[Add WhiteScales
[Add WhiteScales amount
WhiteSnowflake[Add WhiteSnowflake
WhiteStoneWall[Add WhiteStoneWall type
WideBrimHat[Add WideBrimHat
[Add WideBrimHat hue
WildfireBow[Add WildfireBow
WildfireScroll[Add WildfireScroll
[Add WildfireScroll amount
WildGirlOfTheForest[Add WildGirlOfTheForest
WildStaff[Add WildStaff
WindChimes[Add WindChimes
WindsEdge[Add WindsEdge
Windsong[Add Windsong
WindSpirit[Add WindSpirit
WingedHelm[Add WingedHelm
WinterGiftPackage2003[Add WinterGiftPackage2003
WitherScroll[Add WitherScroll
[Add WitherScroll amount
WizardsGlasses[Add WizardsGlasses
WizardsHat[Add WizardsHat
[Add WizardsHat hue
WomanPortrait1[Add WomanPortrait1
WomanPortrait2[Add WomanPortrait2
WondrousFish[Add WondrousFish
WoodDebris[Add WoodDebris
WoodenBench[Add WoodenBench
WoodenBowl[Add WoodenBowl
WoodenBowlOfCarrots[Add WoodenBowlOfCarrots
WoodenBowlOfCorn[Add WoodenBowlOfCorn
WoodenBowlOfLettuce[Add WoodenBowlOfLettuce
WoodenBowlOfPeas[Add WoodenBowlOfPeas
WoodenBowlOfStew[Add WoodenBowlOfStew
WoodenBowlOfTomatoSoup[Add WoodenBowlOfTomatoSoup
WoodenBox[Add WoodenBox
WoodenChair[Add WoodenChair
WoodenChairCushion[Add WoodenChairCushion
WoodenChest[Add WoodenChest
WoodenCoffinAddon[Add WoodenCoffinAddon east
WoodenCoffinDeed[Add WoodenCoffinDeed
WoodenFootLocker[Add WoodenFootLocker
WoodenKiteShield[Add WoodenKiteShield
WoodenShield[Add WoodenShield
WoodenThrone[Add WoodenThrone
WoodenTreasureChest[Add WoodenTreasureChest
WoodHouseDeed[Add WoodHouseDeed
WoodlandArms[Add WoodlandArms
WoodlandBelt[Add WoodlandBelt
[Add WoodlandBelt hue
WoodlandChest[Add WoodlandChest
WoodlandGloves[Add WoodlandGloves
WoodlandGorget[Add WoodlandGorget
WoodlandLegs[Add WoodlandLegs
WoodPlasterHouseDeed[Add WoodPlasterHouseDeed
Wool[Add Wool
[Add Wool amount
WordOfDeathScroll[Add WordOfDeathScroll
[Add WordOfDeathScroll amount
WorldMap[Add WorldMap
WraithFormScroll[Add WraithFormScroll
[Add WraithFormScroll amount
WrathOfTheDryad[Add WrathOfTheDryad
WreathAddon[Add WreathAddon
[Add WreathAddon hue
WreathDeed[Add WreathDeed
[Add WreathDeed hue
WritingTable[Add WritingTable
YellowBeaker[Add YellowBeaker
YellowGourd[Add YellowGourd
[Add YellowGourd amount
YellowScales[Add YellowScales
[Add YellowScales amount
YewBoard[Add YewBoard
[Add YewBoard amount
YewLog[Add YewLog
[Add YewLog amount
YewWoodTable[Add YewWoodTable
Yumi[Add Yumi
ZenRock1Artifact[Add ZenRock1Artifact
ZenRock2Artifact[Add ZenRock2Artifact
ZenRock3Artifact[Add ZenRock3Artifact
ZoogiFungus[Add ZoogiFungus
[Add ZoogiFungus amount
ZyronicClaw[Add ZyronicClaw


+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Mobile NameUsage
AbysmalHorror[Add AbysmalHorror
Actor[Add Actor
AgapiteElemental[Add AgapiteElemental
[Add AgapiteElemental oreAmount
AirElemental[Add AirElemental
AlbertaGiacco[Add AlbertaGiacco
Alchemist[Add Alchemist
Alligator[Add Alligator
AncientLich[Add AncientLich
AncientWyrm[Add AncientWyrm
AnimalTrainer[Add AnimalTrainer
AnsellaGryen[Add AnsellaGryen
AntLion[Add AntLion
ArcaneDaemon[Add ArcaneDaemon
ArcaneFey[Add ArcaneFey
ArcaneFiend[Add ArcaneFiend
ArcherGuard[Add ArcherGuard
Architect[Add Architect
ArcticOgreLord[Add ArcticOgreLord
Armorer[Add Armorer
Artist[Add Artist
BakeKitsune[Add BakeKitsune
Baker[Add Baker
Balron[Add Balron
Banker[Add Banker
Bard[Add Bard
BardGuildmaster[Add BardGuildmaster
Barkeeper[Add Barkeeper
Barracoon[Add Barracoon
BaseEscortable[Add BaseEscortable
Beekeeper[Add Beekeeper
Beetle[Add Beetle
[Add Beetle name
Betrayer[Add Betrayer
Bird[Add Bird
BlackAmbitiousSolenQueen[Add BlackAmbitiousSolenQueen
BlackBear[Add BlackBear
Blackheart[Add Blackheart
Blacksmith[Add Blacksmith
BlacksmithGuildmaster[Add BlacksmithGuildmaster
BlackSolenInfiltratorQueen[Add BlackSolenInfiltratorQueen
BlackSolenInfiltratorWarrior[Add BlackSolenInfiltratorWarrior
BlackSolenMatriarch[Add BlackSolenMatriarch
BlackSolenQueen[Add BlackSolenQueen
BlackSolenWarrior[Add BlackSolenWarrior
BlackSolenWorker[Add BlackSolenWorker
BladeSpirits[Add BladeSpirits
BloodElemental[Add BloodElemental
Boar[Add Boar
Bogle[Add Bogle
Bogling[Add Bogling
BogThing[Add BogThing
BoneDemon[Add BoneDemon
BoneKnight[Add BoneKnight
BoneMagi[Add BoneMagi
Bowyer[Add Bowyer
BrideGroom[Add BrideGroom
Brigand[Add Brigand
BronzeElemental[Add BronzeElemental
[Add BronzeElemental oreAmount
BrownBear[Add BrownBear
Bull[Add Bull
BullFrog[Add BullFrog
Butcher[Add Butcher
CapturedHordeMinion[Add CapturedHordeMinion
Carpenter[Add Carpenter
Cat[Add Cat
Centaur[Add Centaur
ChaosDaemon[Add ChaosDaemon
ChaosDragoon[Add ChaosDragoon
ChaosDragoonElite[Add ChaosDragoonElite
ChaosGuard[Add ChaosGuard
Chicken[Add Chicken
Chyloth[Add Chyloth
Cobbler[Add Cobbler
CoMWarHorse[Add CoMWarHorse
Cook[Add Cook
CopperElemental[Add CopperElemental
[Add CopperElemental oreAmount
Corpser[Add Corpser
CorrosiveSlime[Add CorrosiveSlime
CorruptedSoul[Add CorruptedSoul
Cougar[Add Cougar
Cow[Add Cow
Crane[Add Crane
CrystalElemental[Add CrystalElemental
Cursed[Add Cursed
CursedSoul[Add CursedSoul
CuSidhe[Add CuSidhe
[Add CuSidhe name
CustomHairstylist[Add CustomHairstylist
Cyclops[Add Cyclops
Daemon[Add Daemon
DarknightCreeper[Add DarknightCreeper
DarkWisp[Add DarkWisp
DeadlyImp[Add DeadlyImp
DeathwatchBeetle[Add DeathwatchBeetle
DeathwatchBeetleHatchling[Add DeathwatchBeetleHatchling
DeepSeaSerpent[Add DeepSeaSerpent
DemonKnight[Add DemonKnight
DesertOstard[Add DesertOstard
[Add DesertOstard name
Devourer[Add Devourer
DireWolf[Add DireWolf
DiseasedCat[Add DiseasedCat
Dog[Add Dog
Dolphin[Add Dolphin
Doppleganger[Add Doppleganger
Dragon[Add Dragon
Drake[Add Drake
DreadSpider[Add DreadSpider
Dryad[Add Dryad
DullCopperElemental[Add DullCopperElemental
[Add DullCopperElemental oreAmount
Dummy[Add Dummy iAI iFightMode iRangePerception iRangeFight dActiveSpeed dPassiveSpeed
DummyAssassin[Add DummyAssassin
DummyFence[Add DummyFence
DummyHealer[Add DummyHealer
DummyMace[Add DummyMace
DummyNox[Add DummyNox
DummyStun[Add DummyStun
DummySuper[Add DummySuper
DummySword[Add DummySword
DummyTheif[Add DummyTheif
Eagle[Add Eagle
EarthElemental[Add EarthElemental
Efreet[Add Efreet
ElderGazer[Add ElderGazer
EliteNinja[Add EliteNinja
ElwoodMcCarrin[Add ElwoodMcCarrin
Emino[Add Emino
EnergyVortex[Add EnergyVortex
EnshroudedFigure[Add EnshroudedFigure
EnslavedGargoyle[Add EnslavedGargoyle
EscortableMage[Add EscortableMage
EtherealWarrior[Add EtherealWarrior
Ettin[Add Ettin
EvilHealer[Add EvilHealer
EvilMage[Add EvilMage
EvilMageLord[Add EvilMageLord
EvilWanderingHealer[Add EvilWanderingHealer
Executioner[Add Executioner
ExodusMinion[Add ExodusMinion
ExodusOverseer[Add ExodusOverseer
FactionBerserker[Add FactionBerserker
FactionDeathKnight[Add FactionDeathKnight
FactionDragoon[Add FactionDragoon
FactionHenchman[Add FactionHenchman
FactionKnight[Add FactionKnight
FactionMercenary[Add FactionMercenary
FactionNecromancer[Add FactionNecromancer
FactionPaladin[Add FactionPaladin
FactionSorceress[Add FactionSorceress
FactionWarHorse[Add FactionWarHorse
FactionWizard[Add FactionWizard
FanDancer[Add FanDancer
Farmer[Add Farmer
FerelTreefellow[Add FerelTreefellow
Ferret[Add Ferret
FetidEssence[Add FetidEssence
FierceDragon[Add FierceDragon
FireBeetle[Add FireBeetle
FireElemental[Add FireElemental
FireGargoyle[Add FireGargoyle
FireSteed[Add FireSteed
[Add FireSteed name
FisherGuildmaster[Add FisherGuildmaster
Fisherman[Add Fisherman
FleshGolem[Add FleshGolem
FleshRenderer[Add FleshRenderer
ForestOstard[Add ForestOstard
[Add ForestOstard name
FortuneTeller[Add FortuneTeller
FrenziedOstard[Add FrenziedOstard
[Add FrenziedOstard name
FrostOoze[Add FrostOoze
FrostSpider[Add FrostSpider
FrostTroll[Add FrostTroll
Furtrader[Add Furtrader
GabrielPiete[Add GabrielPiete
Gaman[Add Gaman
Gargoyle[Add Gargoyle
GargoyleDestroyer[Add GargoyleDestroyer
GargoyleEnforcer[Add GargoyleEnforcer
Gazer[Add Gazer
GazerLarva[Add GazerLarva
Ghoul[Add Ghoul
GiantBlackWidow[Add GiantBlackWidow
GiantIceWorm[Add GiantIceWorm
GiantRat[Add GiantRat
GiantSerpent[Add GiantSerpent
GiantSpider[Add GiantSpider
GiantToad[Add GiantToad
Gibberling[Add Gibberling
Glassblower[Add Glassblower
Goat[Add Goat
GoldenElemental[Add GoldenElemental
[Add GoldenElemental oreAmount
Golem[Add Golem
[Add Golem summoned scalar
GolemController[Add GolemController
GolemCrafter[Add GolemCrafter
GoreFiend[Add GoreFiend
Gorilla[Add Gorilla
GreaterDragon[Add GreaterDragon
GreaterMongbat[Add GreaterMongbat
GreatHart[Add GreatHart
GreyWolf[Add GreyWolf
GrimmochDrummel[Add GrimmochDrummel
Grizelda[Add Grizelda
GrizzledMare[Add GrizzledMare
GrizzlyBear[Add GrizzlyBear
Guardian[Add Guardian
Gypsy[Add Gypsy
GypsyAnimalTrainer[Add GypsyAnimalTrainer
GypsyBanker[Add GypsyBanker
GypsyMaiden[Add GypsyMaiden
HairStylist[Add HairStylist
Haochi[Add Haochi
HaochisGuardsman[Add HaochisGuardsman
HarborMaster[Add HarborMaster
Harpy[Add Harpy
Harrower[Add Harrower
HarrowerTentacles[Add HarrowerTentacles
HeadlessOne[Add HeadlessOne
Healer[Add Healer
HealerGuildmaster[Add HealerGuildmaster
HellCat[Add HellCat
HellHound[Add HellHound
HellSteed[Add HellSteed
[Add HellSteed name
Henchman[Add Henchman
Herbalist[Add Herbalist
HiddenFigure[Add HiddenFigure
Hind[Add Hind
Hiryu[Add Hiryu
HolyFamiliar[Add HolyFamiliar
HolyMage[Add HolyMage
HolySteed[Add HolySteed
HordeMinion[Add HordeMinion
Horse[Add Horse
[Add Horse name
Horus[Add Horus
IceElemental[Add IceElemental
IceFiend[Add IceFiend
IceSerpent[Add IceSerpent
IceSnake[Add IceSnake
IharaSoko[Add IharaSoko
Ilhenir[Add Ilhenir
Imp[Add Imp
Impaler[Add Impaler
Impresario[Add Impresario
InjuredWolf[Add InjuredWolf
InnKeeper[Add InnKeeper
InterredGrizzle[Add InterredGrizzle
IronWorker[Add IronWorker
JackRabbit[Add JackRabbit
JedahEntille[Add JedahEntille
Jeweler[Add Jeweler
Juggernaut[Add Juggernaut
JukaLord[Add JukaLord
JukaMage[Add JukaMage
JukaWarrior[Add JukaWarrior
Jwilson[Add Jwilson
Kappa[Add Kappa
KazeKemono[Add KazeKemono
KeeperOfChivalry[Add KeeperOfChivalry
KhaldunSummoner[Add KhaldunSummoner
KhaldunZealot[Add KhaldunZealot
Kirin[Add Kirin
[Add Kirin name
Kraken[Add Kraken
LadyOfTheSnow[Add LadyOfTheSnow
LavaLizard[Add LavaLizard
LavaSerpent[Add LavaSerpent
LavaSnake[Add LavaSnake
LeatherWorker[Add LeatherWorker
LesserHiryu[Add LesserHiryu
Leviathan[Add Leviathan
[Add Leviathan fisher
Lich[Add Lich
LichLord[Add LichLord
Lizardman[Add Lizardman
Llama[Add Llama
LordOaks[Add LordOaks
LysanderGathenwale[Add LysanderGathenwale
Mage[Add Mage
MageGuildmaster[Add MageGuildmaster
MansionGuard[Add MansionGuard
Mapmaker[Add Mapmaker
Mardoth[Add Mardoth
MeerCaptain[Add MeerCaptain
MeerEternal[Add MeerEternal
MeerMage[Add MeerMage
MeerWarrior[Add MeerWarrior
Mephitis[Add Mephitis
Meraktus[Add Meraktus
Merchant[Add Merchant
MerchantGuildmaster[Add MerchantGuildmaster
Messenger[Add Messenger
MilitiaCanoneer[Add MilitiaCanoneer
MilitiaFighter[Add MilitiaFighter
Miller[Add Miller
MinaxWarHorse[Add MinaxWarHorse
Miner[Add Miner
MinerGuildmaster[Add MinerGuildmaster
Minotaur[Add Minotaur
MinotaurCaptain[Add MinotaurCaptain
MinotaurScout[Add MinotaurScout
Minter[Add Minter
MLDryad[Add MLDryad
Moloch[Add Moloch
Mongbat[Add Mongbat
Monk[Add Monk
MorgBergen[Add MorgBergen
MoundOfMaggots[Add MoundOfMaggots
MountainGoat[Add MountainGoat
Mummy[Add Mummy
Naturalist[Add Naturalist
NatureFury[Add NatureFury target
[Add NatureFury
Neira[Add Neira
Nightmare[Add Nightmare
[Add Nightmare name
Ninja[Add Ninja
Noble[Add Noble
Ogre[Add Ogre
OgreLord[Add OgreLord
Oni[Add Oni
OphidianArchmage[Add OphidianArchmage
OphidianKnight[Add OphidianKnight
OphidianMage[Add OphidianMage
OphidianMatriarch[Add OphidianMatriarch
OphidianWarrior[Add OphidianWarrior
Orc[Add Orc
OrcBomber[Add OrcBomber
OrcBrute[Add OrcBrute
OrcCaptain[Add OrcCaptain
OrcishLord[Add OrcishLord
OrcishMage[Add OrcishMage
OrderGuard[Add OrderGuard
PackHorse[Add PackHorse
PackLlama[Add PackLlama
Panther[Add Panther
Parrot[Add Parrot
PatchworkSkeleton[Add PatchworkSkeleton
Peasant[Add Peasant
PestilentBandage[Add PestilentBandage
Phoenix[Add Phoenix
Pig[Add Pig
Pixie[Add Pixie
PlagueBeast[Add PlagueBeast
PlagueBeastLord[Add PlagueBeastLord
PlagueSpawn[Add PlagueSpawn
PoisonElemental[Add PoisonElemental
PolarBear[Add PolarBear
PredatorHellCat[Add PredatorHellCat
PricedHealer[Add PricedHealer
[Add PricedHealer price
Provisioner[Add Provisioner
Quagmire[Add Quagmire
Rabbit[Add Rabbit
RagingGrizzlyBear[Add RagingGrizzlyBear
RaiJu[Add RaiJu
Rancher[Add Rancher
Ranger[Add Ranger
RangerGuildmaster[Add RangerGuildmaster
Rat[Add Rat
Ratman[Add Ratman
RatmanArcher[Add RatmanArcher
RatmanMage[Add RatmanMage
Ravager[Add Ravager
RealEstateBroker[Add RealEstateBroker
Reaper[Add Reaper
RedAmbitiousSolenQueen[Add RedAmbitiousSolenQueen
RedSolenInfiltratorQueen[Add RedSolenInfiltratorQueen
RedSolenInfiltratorWarrior[Add RedSolenInfiltratorWarrior
RedSolenMatriarch[Add RedSolenMatriarch
RedSolenQueen[Add RedSolenQueen
RedSolenWarrior[Add RedSolenWarrior
RedSolenWorker[Add RedSolenWorker
Relnia[Add Relnia
Reptalon[Add Reptalon
RestlessSoul[Add RestlessSoul
RevenantLion[Add RevenantLion
RidableLlama[Add RidableLlama
[Add RidableLlama name
Ridgeback[Add Ridgeback
[Add Ridgeback name
Rikktor[Add Rikktor
Ronin[Add Ronin
RottingCorpse[Add RottingCorpse
RuneBeetle[Add RuneBeetle
Samurai[Add Samurai
SandVortex[Add SandVortex
Satyr[Add Satyr
Savage[Add Savage
SavageRider[Add SavageRider
SavageRidgeback[Add SavageRidgeback
[Add SavageRidgeback name
SavageShaman[Add SavageShaman
ScaledSwampDragon[Add ScaledSwampDragon
[Add ScaledSwampDragon name
Schmendrick[Add Schmendrick
Scorpion[Add Scorpion
Scribe[Add Scribe
Sculptor[Add Sculptor
SeaHorse[Add SeaHorse
[Add SeaHorse name
SeaSerpent[Add SeaSerpent
SeekerOfAdventure[Add SeekerOfAdventure
Semidar[Add Semidar
Serado[Add Serado
SerpentineDragon[Add SerpentineDragon
ServantOfSemidar[Add ServantOfSemidar
Sewerrat[Add Sewerrat
Shade[Add Shade
ShadowFiend[Add ShadowFiend
ShadowIronElemental[Add ShadowIronElemental
[Add ShadowIronElemental oreAmount
ShadowKnight[Add ShadowKnight
ShadowWisp[Add ShadowWisp
ShadowWyrm[Add ShadowWyrm
Sheep[Add Sheep
Shipwright[Add Shipwright
Silvani[Add Silvani
SilverSerpent[Add SilverSerpent
SilverSteed[Add SilverSteed
[Add SilverSteed name
SkeletalDragon[Add SkeletalDragon
SkeletalKnight[Add SkeletalKnight
SkeletalMage[Add SkeletalMage
SkeletalMount[Add SkeletalMount
[Add SkeletalMount name
Skeleton[Add Skeleton
SkitteringHopper[Add SkitteringHopper
Slime[Add Slime
SLWarHorse[Add SLWarHorse
Snake[Add Snake
SnowElemental[Add SnowElemental
SnowLeopard[Add SnowLeopard
SpawnedOrcishLord[Add SpawnedOrcishLord
SpectralArmour[Add SpectralArmour
Spectre[Add Spectre
Squirrel[Add Squirrel
StoneCrafter[Add StoneCrafter
StoneGargoyle[Add StoneGargoyle
StoneHarpy[Add StoneHarpy
StrongMongbat[Add StrongMongbat
Succubus[Add Succubus
SummonedAirElemental[Add SummonedAirElemental
SummonedAntLion[Add SummonedAntLion
SummonedArcticOgreLord[Add SummonedArcticOgreLord
SummonedBakeKitsune[Add SummonedBakeKitsune
SummonedBogling[Add SummonedBogling
SummonedBullFrog[Add SummonedBullFrog
SummonedChicken[Add SummonedChicken
SummonedCow[Add SummonedCow
SummonedDaemon[Add SummonedDaemon
SummonedDoppleganger[Add SummonedDoppleganger
SummonedEarthElemental[Add SummonedEarthElemental
SummonedFireElemental[Add SummonedFireElemental
SummonedFrostSpider[Add SummonedFrostSpider
SummonedGreatHart[Add SummonedGreatHart
SummonedLavaSerpent[Add SummonedLavaSerpent
SummonedOrcBrute[Add SummonedOrcBrute
SummonedPanther[Add SummonedPanther
SummonedSheep[Add SummonedSheep
SummonedSkeletalKnight[Add SummonedSkeletalKnight
SummonedVorpalBunny[Add SummonedVorpalBunny
SummonedWailingBanshee[Add SummonedWailingBanshee
SummonedWaterElemental[Add SummonedWaterElemental
SwampDragon[Add SwampDragon
[Add SwampDragon name
SwampTentacle[Add SwampTentacle
Tailor[Add Tailor
TailorGuildmaster[Add TailorGuildmaster
Tanner[Add Tanner
TavaraSewel[Add TavaraSewel
TavernKeeper[Add TavernKeeper
TBWarHorse[Add TBWarHorse
TerathanAvenger[Add TerathanAvenger
TerathanDrone[Add TerathanDrone
TerathanMatriarch[Add TerathanMatriarch
TerathanWarrior[Add TerathanWarrior
Thief[Add Thief
ThiefGuildmaster[Add ThiefGuildmaster
TimberWolf[Add TimberWolf
Tinker[Add Tinker
TinkerGuildmaster[Add TinkerGuildmaster
Titan[Add Titan
TomasONeerlan[Add TomasONeerlan
TormentedMinotaur[Add TormentedMinotaur
TownCrier[Add TownCrier
ToxicElemental[Add ToxicElemental
Treefellow[Add Treefellow
Troglodyte[Add Troglodyte
Troll[Add Troll
TropicalBird[Add TropicalBird
TsukiWolf[Add TsukiWolf
Twaulo[Add Twaulo
UnholyFamiliar[Add UnholyFamiliar
UnholySteed[Add UnholySteed
Unicorn[Add Unicorn
[Add Unicorn name
Uzeraan[Add Uzeraan
Vagabond[Add Vagabond
ValoriteElemental[Add ValoriteElemental
[Add ValoriteElemental oreAmount
VampireBat[Add VampireBat
VarietyDealer[Add VarietyDealer
VeriteElemental[Add VeriteElemental
[Add VeriteElemental oreAmount
Veterinarian[Add Veterinarian
Victoria[Add Victoria
VorpalBunny[Add VorpalBunny
WailingBanshee[Add WailingBanshee
Waiter[Add Waiter
Walrus[Add Walrus
Wanderer[Add Wanderer
WandererOfTheVoid[Add WandererOfTheVoid
WanderingHealer[Add WanderingHealer
WarriorGuard[Add WarriorGuard
WarriorGuildmaster[Add WarriorGuildmaster
WaterElemental[Add WaterElemental
Weaponsmith[Add Weaponsmith
Weaver[Add Weaver
WhippingVine[Add WhippingVine
WhiteWolf[Add WhiteWolf
WhiteWyrm[Add WhiteWyrm
Wisp[Add Wisp
Wraith[Add Wraith
Wyvern[Add Wyvern
Yamandon[Add Yamandon
YomotsuElder[Add YomotsuElder
YomotsuPriest[Add YomotsuPriest
YomotsuWarrior[Add YomotsuWarrior
YoungNinja[Add YoungNinja
YoungRonin[Add YoungRonin
Zoel[Add Zoel
Zombie[Add Zombie
+ + diff --git a/Docs/overview.html b/Docs/overview.html new file mode 100644 index 0000000..58f8ebb --- /dev/null +++ b/Docs/overview.html @@ -0,0 +1,82 @@ + + + RunUO Documentation - Class Overview + + +

Back to the index

+

Namespaces

+ Server
+ Server.Accounting
+ Server.Chat
+ Server.Commands
+ Server.Commands.Generic
+ Server.ContextMenus
+ Server.Diagnostics
+ Server.Engines.BulkOrders
+ Server.Engines.CannedEvil
+ Server.Engines.Chat
+ Server.Engines.Craft
+ Server.Engines.Doom
+ Server.Engines.Harvest
+ Server.Engines.Help
+ Server.Engines.Mahjong
+ Server.Engines.MyRunUO
+ Server.Engines.PartySystem
+ Server.Engines.Plants
+ Server.Engines.Quests
+ Server.Engines.Quests.Ambitious
+ Server.Engines.Quests.Collector
+ Server.Engines.Quests.Doom
+ Server.Engines.Quests.Hag
+ Server.Engines.Quests.Haven
+ Server.Engines.Quests.Matriarch
+ Server.Engines.Quests.Naturalist
+ Server.Engines.Quests.Necro
+ Server.Engines.Quests.Ninja
+ Server.Engines.Quests.Samurai
+ Server.Engines.Quests.Zento
+ Server.Engines.Reports
+ Server.Engines.VeteranRewards
+ Server.Ethics
+ Server.Ethics.Evil
+ Server.Ethics.Hero
+ Server.Factions
+ Server.Factions.AI
+ Server.Guilds
+ Server.Gumps
+ Server.HuePickers
+ Server.Items
+ Server.Menus
+ Server.Menus.ItemLists
+ Server.Menus.Questions
+ Server.Misc
+ Server.Mobiles
+ Server.Movement
+ Server.Multis
+ Server.Multis.Deeds
+ Server.Network
+ Server.PathAlgorithms
+ Server.PathAlgorithms.FastAStar
+ Server.PathAlgorithms.SlowAStar
+ Server.Prompts
+ Server.Regions
+ Server.RemoteAdmin
+ Server.SkillHandlers
+ Server.Spells
+ Server.Spells.Bushido
+ Server.Spells.Chivalry
+ Server.Spells.Eighth
+ Server.Spells.Fifth
+ Server.Spells.First
+ Server.Spells.Fourth
+ Server.Spells.Necromancy
+ Server.Spells.Ninjitsu
+ Server.Spells.Second
+ Server.Spells.Seventh
+ Server.Spells.Sixth
+ Server.Spells.Spellweaving
+ Server.Spells.Third
+ Server.Targeting
+ Server.Targets
+ + diff --git a/Docs/styles.css b/Docs/styles.css new file mode 100644 index 0000000..9a24a1d --- /dev/null +++ b/Docs/styles.css @@ -0,0 +1,23 @@ +body { background-color: #FFFFFF; font-family: verdana, arial; font-size: 11px; } +a { color: #28435E; } +a:hover { color: #4878A9; } +td.header { background-color: #9696AA; font-weight: bold; font-size: 12px; } +td.lentry { background-color: #D7D7EB; width: 10%; } +td.rentry { background-color: #FFFFFF; width: 90%; } +td.entry { background-color: #FFFFFF; } +td { font-size: 11px; } +.tbl-border { background-color: #46465A; } +td.ir { background-color: #CCCCDD; } +td.du { background-color: #AAAAAA; } +td.sh { background-color: #777799; } +td.co { background-color: #DDCC99; } +td.br { background-color: #AA8866; } +td.go { background-color: #DDCC55; } +td.ag { background-color: #DDAAAA; } +td.ve { background-color: #99CC77; } +td.va { background-color: #88AABB; } +td.cl { background-color: #DDDDDD; } +td.pl { background-color: #CCAA88; } +td.sp { background-color: #99BBBB; } +td.ho { background-color: #CC8888; } +td.ba { background-color: #AABBAA; } diff --git a/Docs/types/(Anonymous-Type)--c__DisplayClass1.html b/Docs/types/(Anonymous-Type)--c__DisplayClass1.html new file mode 100644 index 0000000..d767606 --- /dev/null +++ b/Docs/types/(Anonymous-Type)--c__DisplayClass1.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - <>c__DisplayClass1 + + +

Back to Server.Spells.Spellweaving

+

(NatureFurySpell) - <>c__DisplayClass1

+ (ctor) <>c__DisplayClass1()
+ void b__0()
+ + diff --git a/Docs/types/(Anonymous-Type)--c__DisplayClass2.html b/Docs/types/(Anonymous-Type)--c__DisplayClass2.html new file mode 100644 index 0000000..983a960 --- /dev/null +++ b/Docs/types/(Anonymous-Type)--c__DisplayClass2.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - <>c__DisplayClass2 + + +

Back to Server.Spells.Spellweaving

+

(GiftOfRenewalSpell) - <>c__DisplayClass2

+ (ctor) <>c__DisplayClass2()
+ void b__0()
+ + diff --git a/Docs/types/(Anonymous-Type)--c__DisplayClass3.html b/Docs/types/(Anonymous-Type)--c__DisplayClass3.html new file mode 100644 index 0000000..4b1bbb4 --- /dev/null +++ b/Docs/types/(Anonymous-Type)--c__DisplayClass3.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - <>c__DisplayClass3 + + +

Back to Server.Spells.Spellweaving

+

(EtherealVoyageSpell) - <>c__DisplayClass3

+ (ctor) <>c__DisplayClass3()
+ void b__2()
+ + diff --git a/Docs/types/(Anonymous-Type)--c__DisplayClass4.html b/Docs/types/(Anonymous-Type)--c__DisplayClass4.html new file mode 100644 index 0000000..0bd5114 --- /dev/null +++ b/Docs/types/(Anonymous-Type)--c__DisplayClass4.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - <>c__DisplayClass4 + + +

Back to Server.Mobiles

+

(Ferret) - <>c__DisplayClass4

+ (ctor) <>c__DisplayClass4()
+ void b__0()
+ + diff --git a/Docs/types/(Anonymous-Type)--c__DisplayClass6.html b/Docs/types/(Anonymous-Type)--c__DisplayClass6.html new file mode 100644 index 0000000..f5a82d8 --- /dev/null +++ b/Docs/types/(Anonymous-Type)--c__DisplayClass6.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - <>c__DisplayClass6 + + +

Back to Server.Spells.Spellweaving

+

(GiftOfRenewalSpell) - <>c__DisplayClass6

+ (ctor) <>c__DisplayClass6()
+ void b__4()
+ + diff --git a/Docs/types/(Anonymous-Type)--c__DisplayClass7.html b/Docs/types/(Anonymous-Type)--c__DisplayClass7.html new file mode 100644 index 0000000..c5ddc5a --- /dev/null +++ b/Docs/types/(Anonymous-Type)--c__DisplayClass7.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - <>c__DisplayClass7 + + +

Back to Server.Misc

+

(ClientVerification) - <>c__DisplayClass7

+ (ctor) <>c__DisplayClass7()
+ void b__4( Mobile mob, bool selection, object o )
+ void b__5()
+ + diff --git a/Docs/types/(Anonymous-Type)-GetEnumerator-d__2.html b/Docs/types/(Anonymous-Type)-GetEnumerator-d__2.html new file mode 100644 index 0000000..e9d70e8 --- /dev/null +++ b/Docs/types/(Anonymous-Type)-GetEnumerator-d__2.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - <GetEnumerator>d__2 + + +

Back to Server

+

(Producer) - d__2 : IEnumerator<ISerializable>, IDisposable, IEnumerator

+ (ctor) d__2( int <>1__state )
+ ISerializable System.Collections.Generic.IEnumerator.Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void System.Collections.IEnumerator.Reset()
+ virtual void System.IDisposable.Dispose()
+ + diff --git a/Docs/types/AIControlMobileTarget.html b/Docs/types/AIControlMobileTarget.html new file mode 100644 index 0000000..7c87590 --- /dev/null +++ b/Docs/types/AIControlMobileTarget.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AIControlMobileTarget + + +

Back to Server.Targets

+

AIControlMobileTarget : Target

+ (ctor) AIControlMobileTarget( BaseAI ai, OrderType order )
+ OrderType Order( get; )
+ void AddAI( BaseAI ai )
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/AITimer.html b/Docs/types/AITimer.html new file mode 100644 index 0000000..9a3ad72 --- /dev/null +++ b/Docs/types/AITimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AITimer + + +

Back to Server.Mobiles

+

(BaseAI) - AITimer : Timer

+ (ctor) AITimer( BaseAI owner )
+ virtual void OnTick()
+ + diff --git a/Docs/types/AIType.html b/Docs/types/AIType.html new file mode 100644 index 0000000..85f92f1 --- /dev/null +++ b/Docs/types/AIType.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AIType + + +

Back to Server.Mobiles

+

AIType (Enum)

+ AI_Use_Default = 0,
+ AI_Melee = 1,
+ AI_Animal = 2,
+ AI_Archer = 3,
+ AI_Healer = 4,
+ AI_Vendor = 5,
+ AI_Mage = 6,
+ AI_Berserk = 7,
+ AI_Predator = 8,
+ AI_Thief = 9
+ + diff --git a/Docs/types/ALRReason.html b/Docs/types/ALRReason.html new file mode 100644 index 0000000..307db2a --- /dev/null +++ b/Docs/types/ALRReason.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ALRReason + + +

Back to Server.Network

+

ALRReason (Enum)

+ Invalid = 0,
+ InUse = 1,
+ Blocked = 2,
+ BadPass = 3,
+ Idle = 254,
+ BadComm = 255
+ + diff --git a/Docs/types/ANecromancerShroud.html b/Docs/types/ANecromancerShroud.html new file mode 100644 index 0000000..da37810 --- /dev/null +++ b/Docs/types/ANecromancerShroud.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ANecromancerShroud + + +

Back to Server.Items

+

ANecromancerShroud : Robe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+ (ctor) ANecromancerShroud()
+ (ctor) ANecromancerShroud( Serial serial )
+ int BaseColdResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AOS.html b/Docs/types/AOS.html new file mode 100644 index 0000000..21b23a7 --- /dev/null +++ b/Docs/types/AOS.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AOS + + +

Back to Server

+

AOS

+ (static) int Damage( Mobile m, int damage, int phys, int fire, int cold, int pois, int nrgy )
+ (static) int Damage( Mobile m, Mobile from, int damage, int phys, int fire, int cold, int pois, int nrgy )
+ (static) int Damage( Mobile m, int damage, bool ignoreArmor, int phys, int fire, int cold, int pois, int nrgy )
+ (static) int Damage( Mobile m, Mobile from, int damage, int phys, int fire, int cold, int pois, int nrgy, bool keepAlive )
+ (static) int Damage( Mobile m, Mobile from, int damage, bool ignoreArmor, int phys, int fire, int cold, int pois, int nrgy )
+ (static) int Damage( Mobile m, Mobile from, int damage, bool ignoreArmor, int phys, int fire, int cold, int pois, int nrgy, int chaos, int direct, bool keepAlive, bool archer, bool deathStrike )
+ (static) void DisableStatInfluences()
+ (static) void Fix( ref int val )
+ (static) int Scale( int input, int percent )
+ (ctor) AOS()
+ + diff --git a/Docs/types/AbandonEscortEntry.html b/Docs/types/AbandonEscortEntry.html new file mode 100644 index 0000000..8fce22d --- /dev/null +++ b/Docs/types/AbandonEscortEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AbandonEscortEntry + + +

Back to Server.Mobiles

+

AbandonEscortEntry : ContextMenuEntry

+ (ctor) AbandonEscortEntry( BaseEscortable m, Mobile from )
+ virtual void OnClick()
+ + diff --git a/Docs/types/AbbatoirAddon.html b/Docs/types/AbbatoirAddon.html new file mode 100644 index 0000000..f9bb03e --- /dev/null +++ b/Docs/types/AbbatoirAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AbbatoirAddon + + +

Back to Server.Items

+

AbbatoirAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Derived Types: SummoningAltar

+ (ctor) AbbatoirAddon()
+ (ctor) AbbatoirAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AbbatoirDeed.html b/Docs/types/AbbatoirDeed.html new file mode 100644 index 0000000..a1e5d24 --- /dev/null +++ b/Docs/types/AbbatoirDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AbbatoirDeed + + +

Back to Server.Items

+

AbbatoirDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AbbatoirDeed()
+ (ctor) AbbatoirDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AbbrevComparer.html b/Docs/types/AbbrevComparer.html new file mode 100644 index 0000000..8ea1741 --- /dev/null +++ b/Docs/types/AbbrevComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AbbrevComparer + + +

Back to Server.Guilds

+

(GuildDiplomacyGump) - AbbrevComparer : IComparer<Guild>

+ (ctor) AbbrevComparer()
+ virtual int Compare( Guild x, Guild y )
+ + diff --git a/Docs/types/AbysmalHorror.html b/Docs/types/AbysmalHorror.html new file mode 100644 index 0000000..6f2f319 --- /dev/null +++ b/Docs/types/AbysmalHorror.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - AbysmalHorror + + +

Back to Server.Mobiles

+

AbysmalHorror : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) AbysmalHorror()
+ (ctor) AbysmalHorror( Serial serial )
+ bool AreaPeaceImmune( get; )
+ bool BardImmune( get; )
+ bool IgnoreYoungProtection( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AcceptConversation.html b/Docs/types/AcceptConversation.html new file mode 100644 index 0000000..1040f2d --- /dev/null +++ b/Docs/types/AcceptConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AcceptConversation + + +

Back to Server.Engines.Quests.Zento

+

AcceptConversation : QuestConversation

+ (ctor) AcceptConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/AcceptEscortEntry.html b/Docs/types/AcceptEscortEntry.html new file mode 100644 index 0000000..400b8ef --- /dev/null +++ b/Docs/types/AcceptEscortEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AcceptEscortEntry + + +

Back to Server.Mobiles

+

AcceptEscortEntry : ContextMenuEntry

+ (ctor) AcceptEscortEntry( BaseEscortable m, Mobile from )
+ virtual void OnClick()
+ + diff --git a/Docs/types/AcceptProtectorGump.html b/Docs/types/AcceptProtectorGump.html new file mode 100644 index 0000000..238926a --- /dev/null +++ b/Docs/types/AcceptProtectorGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AcceptProtectorGump + + +

Back to Server

+

AcceptProtectorGump : Gump

+ (ctor) AcceptProtectorGump( PlayerMobile protector, PlayerMobile protectee )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/AccessException.html b/Docs/types/AccessException.html new file mode 100644 index 0000000..f61535c --- /dev/null +++ b/Docs/types/AccessException.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AccessException + + +

Back to Server

+

AccessException : PropertyException, ISerializable, _Exception

+

Derived Types: ClearanceException, InternalAccessException

+ (ctor) AccessException( Property property, string message )
+ + diff --git a/Docs/types/AccessLevel.html b/Docs/types/AccessLevel.html new file mode 100644 index 0000000..1c281a8 --- /dev/null +++ b/Docs/types/AccessLevel.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - AccessLevel + + +

Back to Server

+

AccessLevel (Enum)

+ Player = 0,
+ Counselor = 1,
+ GameMaster = 2,
+ Seer = 3,
+ Administrator = 4,
+ Developer = 5,
+ Owner = 6
+ + diff --git a/Docs/types/AccessRestrictions.html b/Docs/types/AccessRestrictions.html new file mode 100644 index 0000000..9ce88cc --- /dev/null +++ b/Docs/types/AccessRestrictions.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AccessRestrictions + + +

Back to Server

+

AccessRestrictions

+ (static) void EventSink_SocketConnect( SocketConnectEventArgs e )
+ (static) void Initialize()
+ (ctor) AccessRestrictions()
+ + diff --git a/Docs/types/Account.html b/Docs/types/Account.html new file mode 100644 index 0000000..08307dc --- /dev/null +++ b/Docs/types/Account.html @@ -0,0 +1,68 @@ + + + RunUO Documentation - Class Overview - Account + + +

Back to Server.Accounting

+

Account : IAccount, IComparable, IComparable<Account>

+

Nested Types: YoungTimer

+ (static) void EventSink_Connected( ConnectedEventArgs e )
+ (static) void EventSink_Disconnected( DisconnectedEventArgs e )
+ (static) void EventSink_Login( LoginEventArgs e )
+ (static) string HashMD5( string phrase )
+ (static) string HashSHA1( string phrase )
+ (static) void Initialize()
+ (static) string[] LoadAccessCheck( XmlElement node )
+ (static) IPAddress[] LoadAddressList( XmlElement node )
+ (static) List<AccountComment> LoadComments( XmlElement node )
+ (static) Mobile[] LoadMobiles( XmlElement node )
+ (static) List<AccountTag> LoadTags( XmlElement node )
+ (ctor) Account( XmlElement node )
+ (ctor) Account( string username, string password )
+ AccessLevel AccessLevel( get; set; )
+ bool Banned( get; set; )
+ List<AccountComment> Comments( get; )
+ int Count( get; )
+ DateTime Created( get; )
+ string CryptPassword( get; set; )
+ int Flags( get; set; )
+ HardwareInfo HardwareInfo( get; set; )
+ bool Inactive( get; )
+ string[] IPRestrictions( get; set; )
+ Mobile Item( get; set; )
+ DateTime LastLogin( get; set; )
+ int Length( get; )
+ int Limit( get; )
+ IPAddress[] LoginIPs( get; set; )
+ string NewCryptPassword( get; set; )
+ string PlainPassword( get; set; )
+ List<AccountTag> Tags( get; )
+ TimeSpan TotalGameTime( get; )
+ string Username( get; set; )
+ bool Young( get; set; )
+ void AddTag( string name, string value )
+ bool CheckAccess( IPAddress ipAddress )
+ bool CheckAccess( NetState ns )
+ virtual bool CheckPassword( string plainPassword )
+ void CheckYoung()
+ virtual int CompareTo( Account other )
+ virtual int CompareTo( object obj )
+ virtual void Delete()
+ bool GetBanTags( out DateTime banTime, out TimeSpan banDuration )
+ bool GetFlag( int index )
+ string GetTag( string name )
+ bool HasAccess( IPAddress ipAddress )
+ bool HasAccess( NetState ns )
+ void LogAccess( IPAddress ipAddress )
+ void LogAccess( NetState ns )
+ void RemoveTag( string name )
+ void RemoveYoungStatus( int message )
+ void Save( XmlTextWriter xml )
+ void SetBanTags( Mobile from, DateTime banTime, TimeSpan banDuration )
+ void SetFlag( int index, bool value )
+ virtual void SetPassword( string plainPassword )
+ void SetTag( string name, string value )
+ void SetUnspecifiedBan( Mobile from )
+ virtual string ToString()
+ + diff --git a/Docs/types/AccountAttackLimiter.html b/Docs/types/AccountAttackLimiter.html new file mode 100644 index 0000000..b1374c6 --- /dev/null +++ b/Docs/types/AccountAttackLimiter.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AccountAttackLimiter + + +

Back to Server.Accounting

+

AccountAttackLimiter

+ (static) TimeSpan ComputeThrottle( int counts )
+ (static) InvalidAccountAccessLog FindAccessLog( NetState ns )
+ (static) void Initialize()
+ (static) void RegisterInvalidAccess( NetState ns )
+ (static) bool Throttle_Callback( NetState ns )
+ (ctor) AccountAttackLimiter()
+ + diff --git a/Docs/types/AccountComment.html b/Docs/types/AccountComment.html new file mode 100644 index 0000000..2fb1dc6 --- /dev/null +++ b/Docs/types/AccountComment.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AccountComment + + +

Back to Server.Accounting

+

AccountComment

+ (ctor) AccountComment( XmlElement node )
+ (ctor) AccountComment( string addedBy, string content )
+ string AddedBy( get; )
+ string Content( get; set; )
+ DateTime LastModified( get; )
+ void Save( XmlTextWriter xml )
+ + diff --git a/Docs/types/AccountComparer.html b/Docs/types/AccountComparer.html new file mode 100644 index 0000000..fc73439 --- /dev/null +++ b/Docs/types/AccountComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AccountComparer + + +

Back to Server.Gumps

+

(AdminGump) - AccountComparer : IComparer

+ (ctor) AccountComparer()
+ virtual int Compare( object x, object y )
+ + diff --git a/Docs/types/AccountHandler.html b/Docs/types/AccountHandler.html new file mode 100644 index 0000000..0848647 --- /dev/null +++ b/Docs/types/AccountHandler.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AccountHandler + + +

Back to Server.Misc

+

AccountHandler

+ (static) Dictionary<IPAddress,Int32> IPTable( get; )
+ (static) AccessLevel LockdownLevel( get; set; )
+ (static) bool CanCreate( IPAddress ip )
+ (static) Account CreateAccount( NetState state, string un, string pw )
+ (static) void EventSink_AccountLogin( AccountLoginEventArgs e )
+ (static) void EventSink_DeleteRequest( DeleteRequestEventArgs e )
+ (static) void EventSink_GameLogin( GameLoginEventArgs e )
+ (static) void Initialize()
+ (static) void Password_OnCommand( CommandEventArgs e )
+ (ctor) AccountHandler()
+ + diff --git a/Docs/types/AccountLoginAck.html b/Docs/types/AccountLoginAck.html new file mode 100644 index 0000000..276ade4 --- /dev/null +++ b/Docs/types/AccountLoginAck.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AccountLoginAck + + +

Back to Server.Network

+

AccountLoginAck : Packet

+ (ctor) AccountLoginAck( ServerInfo[] info )
+ + diff --git a/Docs/types/AccountLoginEventArgs.html b/Docs/types/AccountLoginEventArgs.html new file mode 100644 index 0000000..cd8ce01 --- /dev/null +++ b/Docs/types/AccountLoginEventArgs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AccountLoginEventArgs + + +

Back to Server

+

AccountLoginEventArgs : EventArgs

+ (ctor) AccountLoginEventArgs( NetState state, string username, string password )
+ bool Accepted( get; set; )
+ string Password( get; )
+ ALRReason RejectReason( get; set; )
+ NetState State( get; )
+ string Username( get; )
+ + diff --git a/Docs/types/AccountLoginEventHandler.html b/Docs/types/AccountLoginEventHandler.html new file mode 100644 index 0000000..b0dcb49 --- /dev/null +++ b/Docs/types/AccountLoginEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AccountLoginEventHandler + + +

Back to Server

+

AccountLoginEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) AccountLoginEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AccountLoginEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( AccountLoginEventArgs e )
+ + diff --git a/Docs/types/AccountLoginRej.html b/Docs/types/AccountLoginRej.html new file mode 100644 index 0000000..89e9bf3 --- /dev/null +++ b/Docs/types/AccountLoginRej.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AccountLoginRej + + +

Back to Server.Network

+

AccountLoginRej : Packet

+ (ctor) AccountLoginRej( ALRReason reason )
+ + diff --git a/Docs/types/AccountPrompt.html b/Docs/types/AccountPrompt.html new file mode 100644 index 0000000..4e029c7 --- /dev/null +++ b/Docs/types/AccountPrompt.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AccountPrompt + + +

Back to Server.Misc

+

AccountPrompt

+ (static) void Initialize()
+ (ctor) AccountPrompt()
+ + diff --git a/Docs/types/AccountSearchResults.html b/Docs/types/AccountSearchResults.html new file mode 100644 index 0000000..8aebeef --- /dev/null +++ b/Docs/types/AccountSearchResults.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AccountSearchResults + + +

Back to Server.RemoteAdmin

+

AccountSearchResults : Packet

+ (ctor) AccountSearchResults( ArrayList results )
+ + diff --git a/Docs/types/AccountTag.html b/Docs/types/AccountTag.html new file mode 100644 index 0000000..3247335 --- /dev/null +++ b/Docs/types/AccountTag.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AccountTag + + +

Back to Server.Accounting

+

AccountTag

+ (ctor) AccountTag( XmlElement node )
+ (ctor) AccountTag( string name, string value )
+ string Name( get; set; )
+ string Value( get; set; )
+ void Save( XmlTextWriter xml )
+ + diff --git a/Docs/types/Accounts.html b/Docs/types/Accounts.html new file mode 100644 index 0000000..f47d562 --- /dev/null +++ b/Docs/types/Accounts.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Accounts + + +

Back to Server.Accounting

+

Accounts

+ (static) int Count( get; )
+ (static) void Add( IAccount a )
+ (static) void Configure()
+ (static) IAccount GetAccount( string username )
+ (static) ICollection<IAccount> GetAccounts()
+ (static) void Load()
+ (static) void Remove( string username )
+ (static) void Save( WorldSaveEventArgs e )
+ (ctor) Accounts()
+ + diff --git a/Docs/types/AcctSearchType.html b/Docs/types/AcctSearchType.html new file mode 100644 index 0000000..35bd9b9 --- /dev/null +++ b/Docs/types/AcctSearchType.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AcctSearchType + + +

Back to Server.RemoteAdmin

+

AcctSearchType (Enum)

+ Username = 0,
+ IP = 1
+ + diff --git a/Docs/types/AcidProofRobe.html b/Docs/types/AcidProofRobe.html new file mode 100644 index 0000000..a748557 --- /dev/null +++ b/Docs/types/AcidProofRobe.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - AcidProofRobe + + +

Back to Server.Items

+

AcidProofRobe : Robe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+ (ctor) AcidProofRobe()
+ (ctor) AcidProofRobe( Serial serial )
+ int BaseFireResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AcidSlime.html b/Docs/types/AcidSlime.html new file mode 100644 index 0000000..2c82e51 --- /dev/null +++ b/Docs/types/AcidSlime.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AcidSlime + + +

Back to Server.Items

+

AcidSlime : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AcidSlime()
+ (ctor) AcidSlime( Serial serial )
+ (ctor) AcidSlime( TimeSpan duration, int minDamage, int maxDamage )
+ string DefaultName( get; )
+ void Damage( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual bool OnMoveOver( Mobile m )
+ void OnTick()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AckPartyLocations.html b/Docs/types/AckPartyLocations.html new file mode 100644 index 0000000..900008b --- /dev/null +++ b/Docs/types/AckPartyLocations.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AckPartyLocations + + +

Back to Server.Misc

+

AckPartyLocations : ProtocolExtension

+ (ctor) AckPartyLocations( Mobile from, Party party )
+ + diff --git a/Docs/types/ActionType.html b/Docs/types/ActionType.html new file mode 100644 index 0000000..2c9565c --- /dev/null +++ b/Docs/types/ActionType.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ActionType + + +

Back to Server.Mobiles

+

ActionType (Enum)

+ Wander = 0,
+ Combat = 1,
+ Guard = 2,
+ Flee = 3,
+ Backoff = 4,
+ Interact = 5
+ + diff --git a/Docs/types/ActivateEntry.html b/Docs/types/ActivateEntry.html new file mode 100644 index 0000000..24d8c16 --- /dev/null +++ b/Docs/types/ActivateEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ActivateEntry + + +

Back to Server.Items

+

(HouseRaffleStone) - ActivateEntry : RaffleContextMenuEntry

+ (ctor) ActivateEntry( Mobile from, HouseRaffleStone stone )
+ virtual void OnClick()
+ + diff --git a/Docs/types/Actor.html b/Docs/types/Actor.html new file mode 100644 index 0000000..91376d6 --- /dev/null +++ b/Docs/types/Actor.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Actor + + +

Back to Server.Mobiles

+

Actor : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Actor()
+ (ctor) Actor( Serial serial )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Add.html b/Docs/types/Add.html new file mode 100644 index 0000000..95f8bdf --- /dev/null +++ b/Docs/types/Add.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - Add + + +

Back to Server.Commands

+

Add

+

Nested Types: AddTarget, TileState

+ (static) IEntity Build( Mobile from, ConstructorInfo ctor, object[] values, string[,] props, PropertyInfo[] realProps, ref bool sendError )
+ (static) int Build( Mobile from, Point3D start, Point3D end, ConstructorInfo ctor, object[] values, string[,] props, PropertyInfo[] realProps, List<Container> packs )
+ (static) int BuildObjects( Mobile from, Type type, Point3D start, Point3D end, string[] args, string[,] props, List<Container> packs )
+ (static) void FixArgs( ref string[] args )
+ (static) void FixSetString( ref string[] args, int index )
+ (static) void Initialize()
+ (static) void Invoke( Mobile from, Point3D start, Point3D end, string[] args )
+ (static) void Invoke( Mobile from, Point3D start, Point3D end, string[] args, List<Container> packs )
+ (static) bool IsConstructable( ConstructorInfo ctor, AccessLevel accessLevel )
+ (static) bool IsEntity( Type t )
+ (static) bool IsEnum( Type type )
+ (static) bool IsParsable( Type type )
+ (static) bool IsSignedNumeric( Type type )
+ (static) bool IsType( Type type )
+ (static) bool IsUnsignedNumeric( Type type )
+ (static) object ParseParsable( Type type, string value )
+ (static) object ParseValue( Type type, string value )
+ (static) object[] ParseValues( ParameterInfo[] paramList, string[] args )
+ (static) void SendCtor( Type type, ConstructorInfo ctor, Mobile from )
+ (static) void SendUsage( Type type, Mobile from )
+ (static) void Tile_OnCommand( CommandEventArgs e )
+ (static) void TileBox_Callback( Mobile from, Map map, Point3D start, Point3D end, object state )
+ (static) void TileRXYZ_OnCommand( CommandEventArgs e )
+ (static) void TileXYZ_OnCommand( CommandEventArgs e )
+ (static) void TileZ_OnCommand( CommandEventArgs e )
+ (ctor) Add()
+ + diff --git a/Docs/types/AddBuffPacket.html b/Docs/types/AddBuffPacket.html new file mode 100644 index 0000000..dc051db --- /dev/null +++ b/Docs/types/AddBuffPacket.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AddBuffPacket + + +

Back to Server

+

AddBuffPacket : Packet

+ (ctor) AddBuffPacket( Mobile m, BuffInfo info )
+ (ctor) AddBuffPacket( Mobile mob, BuffIcon iconID, int titleCliloc, int secondaryCliloc, TextDefinition args, TimeSpan length )
+ + diff --git a/Docs/types/AddCommand.html b/Docs/types/AddCommand.html new file mode 100644 index 0000000..56731c9 --- /dev/null +++ b/Docs/types/AddCommand.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AddCommand + + +

Back to Server.Commands.Generic

+

AddCommand : BaseCommand

+ (ctor) AddCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ virtual bool ValidateArgs( BaseCommandImplementor impl, CommandEventArgs e )
+ + diff --git a/Docs/types/AddCommentPrompt.html b/Docs/types/AddCommentPrompt.html new file mode 100644 index 0000000..31b9937 --- /dev/null +++ b/Docs/types/AddCommentPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AddCommentPrompt + + +

Back to Server.Gumps

+

(AdminGump) - AddCommentPrompt : Prompt

+ (ctor) AddCommentPrompt( Account acct )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/AddDoorGump.html b/Docs/types/AddDoorGump.html new file mode 100644 index 0000000..137ed01 --- /dev/null +++ b/Docs/types/AddDoorGump.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AddDoorGump + + +

Back to Server.Gumps

+

AddDoorGump : Gump

+ (static) void AddDoor_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) AddDoorGump()
+ (ctor) AddDoorGump( int type )
+ void AddBlueBack( int width, int height )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/AddGump.html b/Docs/types/AddGump.html new file mode 100644 index 0000000..65ce239 --- /dev/null +++ b/Docs/types/AddGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - AddGump + + +

Back to Server.Gumps

+

AddGump : Gump

+

Nested Types: InternalTarget, TypeNameComparer

+ (static) void AddMenu_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (static) List<Type> Match( string match )
+ (static) void Match( string match, Type[] types, List<Type> results )
+ (ctor) AddGump( Mobile from, string searchString, int page, Type[] searchResults, bool explicitSearch )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/AddPartyTarget.html b/Docs/types/AddPartyTarget.html new file mode 100644 index 0000000..05b49ce --- /dev/null +++ b/Docs/types/AddPartyTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AddPartyTarget + + +

Back to Server.Engines.PartySystem

+

AddPartyTarget : Target

+ (ctor) AddPartyTarget( Mobile from )
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/AddTagNamePrompt.html b/Docs/types/AddTagNamePrompt.html new file mode 100644 index 0000000..9aa93ce --- /dev/null +++ b/Docs/types/AddTagNamePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AddTagNamePrompt + + +

Back to Server.Gumps

+

(AdminGump) - AddTagNamePrompt : Prompt

+ (ctor) AddTagNamePrompt( Account acct )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/AddTagValuePrompt.html b/Docs/types/AddTagValuePrompt.html new file mode 100644 index 0000000..f488c2b --- /dev/null +++ b/Docs/types/AddTagValuePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AddTagValuePrompt + + +

Back to Server.Gumps

+

(AdminGump) - AddTagValuePrompt : Prompt

+ (ctor) AddTagValuePrompt( Account acct, string name )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/AddTarget.html b/Docs/types/AddTarget.html new file mode 100644 index 0000000..03297af --- /dev/null +++ b/Docs/types/AddTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AddTarget + + +

Back to Server.Commands

+

(Add) - AddTarget : Target

+ (ctor) AddTarget( string[] args )
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/AddToPackCommand.html b/Docs/types/AddToPackCommand.html new file mode 100644 index 0000000..f5c81ad --- /dev/null +++ b/Docs/types/AddToPackCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AddToPackCommand + + +

Back to Server.Commands.Generic

+

AddToPackCommand : BaseCommand

+ (ctor) AddToPackCommand()
+ virtual void ExecuteList( CommandEventArgs e, ArrayList list )
+ + diff --git a/Docs/types/AddToPartyEntry.html b/Docs/types/AddToPartyEntry.html new file mode 100644 index 0000000..f974642 --- /dev/null +++ b/Docs/types/AddToPartyEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AddToPartyEntry + + +

Back to Server.ContextMenus

+

AddToPartyEntry : ContextMenuEntry

+ (ctor) AddToPartyEntry( Mobile from, Mobile target )
+ virtual void OnClick()
+ + diff --git a/Docs/types/AddToSpellbookEntry.html b/Docs/types/AddToSpellbookEntry.html new file mode 100644 index 0000000..f72b883 --- /dev/null +++ b/Docs/types/AddToSpellbookEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AddToSpellbookEntry + + +

Back to Server.ContextMenus

+

AddToSpellbookEntry : ContextMenuEntry

+

Nested Types: InternalTarget

+ (ctor) AddToSpellbookEntry()
+ virtual void OnClick()
+ + diff --git a/Docs/types/AddonComponent.html b/Docs/types/AddonComponent.html new file mode 100644 index 0000000..d156208 --- /dev/null +++ b/Docs/types/AddonComponent.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - AddonComponent + + +

Back to Server.Items

+

AddonComponent : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Derived Types: AnkhOfSacrificeComponent, AnvilComponent, ArcheryButte, AwesomeDisturbingPortraitComponent, BallotBox, BedOfNailsComponent, BloodyPentagramComponent, BoneCouchComponent, BoneThroneComponent, BrokenArmoireComponent, BrokenBookcaseComponent, BrokenChestOfDrawersComponent, BrokenCoveredChairComponent, BrokenFallenChairComponent, CannonAddonComponent, CannonComponent, ChampionSkullBrazier, ControlPanel, CreepyPortraitComponent, CurtainsComponent, DartBoard, DisturbingPortraitComponent, ForgeComponent, GuillotineComponent, HaunterMirrorComponent, LargeFishingNetComponent, LocalizedAddonComponent, MaabusCoffinComponent, MountedPixieBlueComponent, MountedPixieGreenComponent, MountedPixieLimeComponent, MountedPixieOrangeComponent, MountedPixieWhiteComponent, PickpocketDip, RejuvinationAddonComponent, ScarecrowComponent, ShrineOfWisdomComponent, SHTeleComponent, SmallFishingNetComponent, SolenAntHoleComponent, StandingBrokenChairComponent, StoneAnkhComponent, SuitOfGoldArmorComponent, SuitOfSilverArmorComponent, TrainingDummy, UnsettlingPortraitComponent, WallBannerComponent, WallTorchComponent, WoodenCoffinComponent

+

Nested Types: LightEntry

+ (static) void ApplyLightTo( Item item )
+ (ctor) AddonComponent( Serial serial )
+ (ctor) AddonComponent( int itemID )
+ BaseAddon Addon( get; set; )
+ int Hue( get; set; )
+ bool NeedsWall( get; )
+ Point3D Offset( get; set; )
+ Point3D WallPosition( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnChop( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnLocationChange( Point3D old )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AddonContainerComponent.html b/Docs/types/AddonContainerComponent.html new file mode 100644 index 0000000..9d2f69a --- /dev/null +++ b/Docs/types/AddonContainerComponent.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - AddonContainerComponent + + +

Back to Server.Items

+

AddonContainerComponent : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Derived Types: LocalizedContainerComponent

+ (ctor) AddonContainerComponent( Serial serial )
+ (ctor) AddonContainerComponent( int itemID )
+ BaseAddonContainer Addon( get; set; )
+ int Hue( get; set; )
+ bool NeedsWall( get; )
+ Point3D Offset( get; set; )
+ Point3D WallPosition( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnAfterDelete()
+ virtual void OnChop( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnLocationChange( Point3D old )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AddonFitResult.html b/Docs/types/AddonFitResult.html new file mode 100644 index 0000000..d3ab293 --- /dev/null +++ b/Docs/types/AddonFitResult.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AddonFitResult + + +

Back to Server.Items

+

AddonFitResult (Enum)

+ Valid = 0,
+ Blocked = 1,
+ NotInHouse = 2,
+ DoorTooClose = 3,
+ NoWall = 4,
+ DoorsNotClosed = 5
+ + diff --git a/Docs/types/AddressComparer.html b/Docs/types/AddressComparer.html new file mode 100644 index 0000000..c0390ea --- /dev/null +++ b/Docs/types/AddressComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AddressComparer + + +

Back to Server.Gumps

+

(HouseRaffleManagementGump) - AddressComparer : IComparer<RaffleEntry>

+ (ctor) AddressComparer()
+ virtual int Compare( RaffleEntry x, RaffleEntry y )
+ + diff --git a/Docs/types/AdminCompressedPacket.html b/Docs/types/AdminCompressedPacket.html new file mode 100644 index 0000000..4b36fbe --- /dev/null +++ b/Docs/types/AdminCompressedPacket.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AdminCompressedPacket + + +

Back to Server.RemoteAdmin

+

AdminCompressedPacket : Packet

+ (ctor) AdminCompressedPacket( byte[] CompData, int CDLen, int unCompSize )
+ + diff --git a/Docs/types/AdminGump.html b/Docs/types/AdminGump.html new file mode 100644 index 0000000..7d5de45 --- /dev/null +++ b/Docs/types/AdminGump.html @@ -0,0 +1,41 @@ + + + RunUO Documentation - Class Overview - AdminGump + + +

Back to Server.Gumps

+

AdminGump : Gump

+

Nested Types: AccountComparer, AddCommentPrompt, AddTagNamePrompt, AddTagValuePrompt, NetStateComparer, SharedAccountComparer

+ (static) void AccountDelete_Callback( Mobile from, bool okay, object state )
+ (static) void Admin_OnCommand( CommandEventArgs e )
+ (static) void BanShared_Callback( Mobile from, bool okay, object state )
+ (static) void Firewall_Callback( Mobile from, bool okay, object state )
+ (static) void FirewallShared_Callback( Mobile from, bool okay, object state )
+ (static) string FormatAccessLevel( AccessLevel level )
+ (static) string FormatByteAmount( long totalBytes )
+ (static) string FormatTimeSpan( TimeSpan ts )
+ (static) void GetAccountInfo( Account a, out AccessLevel accessLevel, out bool online )
+ (static) ArrayList GetAllSharedAccounts()
+ (static) int GetHueFor( Mobile m )
+ (static) ArrayList GetSharedAccounts( IPAddress ipAddress )
+ (static) ArrayList GetSharedAccounts( IPAddress[] ipAddresses )
+ (static) void Initialize()
+ (static) void Marked_Callback( Mobile from, bool okay, object state )
+ (static) void ResendGump_Callback( Mobile from, object state )
+ (ctor) AdminGump( Mobile from, AdminGumpPage pageType, int listPage, ArrayList list, string notice, object state )
+ void AddAccountHeader()
+ void AddBlackAlpha( int x, int y, int width, int height )
+ void AddButtonLabeled( int x, int y, int buttonID, string text )
+ void AddClientHeader()
+ void AddFirewallHeader()
+ void AddPageButton( int x, int y, int buttonID, string text, AdminGumpPage page, AdminGumpPage[] subPages )
+ void AddSelectedButton( int x, int y, int buttonID, string text, bool isSelection )
+ void AddTextField( int x, int y, int width, int height, int index )
+ string Center( string text )
+ string Color( string text, int color )
+ int GetButtonID( int type, int index )
+ void InvokeCommand( string c )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void Shutdown( bool restart, bool save )
+ + diff --git a/Docs/types/AdminGumpPage.html b/Docs/types/AdminGumpPage.html new file mode 100644 index 0000000..c678053 --- /dev/null +++ b/Docs/types/AdminGumpPage.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - AdminGumpPage + + +

Back to Server.Gumps

+

AdminGumpPage (Enum)

+ Information_General = 0,
+ Information_Perf = 1,
+ Administer = 2,
+ Clients = 3,
+ Accounts = 4,
+ Accounts_Shared = 5,
+ Firewall = 6,
+ Administer_WorldBuilding = 7,
+ Administer_Server = 8,
+ Administer_Access = 9,
+ Administer_Access_Lockdown = 10,
+ Administer_Commands = 11,
+ ClientInfo = 12,
+ AccountDetails = 13,
+ AccountDetails_Information = 14,
+ AccountDetails_Characters = 15,
+ AccountDetails_Access = 16,
+ AccountDetails_Access_ClientIPs = 17,
+ AccountDetails_Access_Restrictions = 18,
+ AccountDetails_Comments = 19,
+ AccountDetails_Tags = 20,
+ AccountDetails_ChangePassword = 21,
+ AccountDetails_ChangeAccess = 22,
+ FirewallInfo = 23
+ + diff --git a/Docs/types/AdminNetwork.html b/Docs/types/AdminNetwork.html new file mode 100644 index 0000000..1c37337 --- /dev/null +++ b/Docs/types/AdminNetwork.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - AdminNetwork + + +

Back to Server.RemoteAdmin

+

AdminNetwork

+ (static) void Authenticate( NetState state, PacketReader pvSrc )
+ (static) void CleanUp()
+ (static) Packet Compress( Packet p )
+ (static) void Configure()
+ (static) void DelayedDisconnect( NetState state )
+ (static) void Disconnect( object state )
+ (static) bool IsAuth( NetState state )
+ (static) void OnConsoleChar( char ch )
+ (static) void OnConsoleLine( string line )
+ (static) void OnConsoleString( string str )
+ (static) void OnReceive( NetState state, PacketReader pvSrc )
+ (ctor) AdminNetwork()
+ + diff --git a/Docs/types/AdminRobe.html b/Docs/types/AdminRobe.html new file mode 100644 index 0000000..3a86ccd --- /dev/null +++ b/Docs/types/AdminRobe.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AdminRobe + + +

Back to Server.Items

+

AdminRobe : BaseSuit, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AdminRobe()
+ (ctor) AdminRobe( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AdmiralsHeartyRum.html b/Docs/types/AdmiralsHeartyRum.html new file mode 100644 index 0000000..d7d8430 --- /dev/null +++ b/Docs/types/AdmiralsHeartyRum.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AdmiralsHeartyRum + + +

Back to Server.Items

+

AdmiralsHeartyRum : BeverageBottle, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) AdmiralsHeartyRum()
+ (ctor) AdmiralsHeartyRum( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Aegis.html b/Docs/types/Aegis.html new file mode 100644 index 0000000..e2138ce --- /dev/null +++ b/Docs/types/Aegis.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Aegis + + +

Back to Server.Items

+

Aegis : HeaterShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Aegis()
+ (ctor) Aegis( Serial serial )
+ int ArtifactRarity( get; )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AegisOfGrace.html b/Docs/types/AegisOfGrace.html new file mode 100644 index 0000000..ea11bc8 --- /dev/null +++ b/Docs/types/AegisOfGrace.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - AegisOfGrace + + +

Back to Server.Items

+

AegisOfGrace : DragonHelm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) AegisOfGrace()
+ (ctor) AegisOfGrace( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AffixType.html b/Docs/types/AffixType.html new file mode 100644 index 0000000..3cf6e5d --- /dev/null +++ b/Docs/types/AffixType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AffixType + + +

Back to Server.Network

+

AffixType (Enum)

+ Append = 0,
+ Prepend = 1,
+ System = 2
+ + diff --git a/Docs/types/Afro.html b/Docs/types/Afro.html new file mode 100644 index 0000000..c4b1d3e --- /dev/null +++ b/Docs/types/Afro.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Afro + + +

Back to Server.Items

+

Afro : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Afro()
+ (ctor) Afro( int hue )
+ (ctor) Afro( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AgapiteElemental.html b/Docs/types/AgapiteElemental.html new file mode 100644 index 0000000..03a7ea8 --- /dev/null +++ b/Docs/types/AgapiteElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - AgapiteElemental + + +

Back to Server.Mobiles

+

AgapiteElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) AgapiteElemental()
+ (ctor) AgapiteElemental( int oreAmount )
+ (ctor) AgapiteElemental( Serial serial )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AgapiteGranite.html b/Docs/types/AgapiteGranite.html new file mode 100644 index 0000000..a37f8b0 --- /dev/null +++ b/Docs/types/AgapiteGranite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AgapiteGranite + + +

Back to Server.Items

+

AgapiteGranite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AgapiteGranite()
+ (ctor) AgapiteGranite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AgapiteIngot.html b/Docs/types/AgapiteIngot.html new file mode 100644 index 0000000..908ad3b --- /dev/null +++ b/Docs/types/AgapiteIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AgapiteIngot + + +

Back to Server.Items

+

AgapiteIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) AgapiteIngot()
+ (ctor) AgapiteIngot( int amount )
+ (ctor) AgapiteIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AgapiteOre.html b/Docs/types/AgapiteOre.html new file mode 100644 index 0000000..95405a7 --- /dev/null +++ b/Docs/types/AgapiteOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AgapiteOre + + +

Back to Server.Items

+

AgapiteOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) AgapiteOre()
+ (ctor) AgapiteOre( int amount )
+ (ctor) AgapiteOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AggressiveActionEventArgs.html b/Docs/types/AggressiveActionEventArgs.html new file mode 100644 index 0000000..526dba3 --- /dev/null +++ b/Docs/types/AggressiveActionEventArgs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AggressiveActionEventArgs + + +

Back to Server

+

AggressiveActionEventArgs : EventArgs

+ (static) AggressiveActionEventArgs Create( Mobile aggressed, Mobile aggressor, bool criminal )
+ (ctor) AggressiveActionEventArgs( Mobile aggressed, Mobile aggressor, bool criminal )
+ Mobile Aggressed( get; )
+ Mobile Aggressor( get; )
+ bool Criminal( get; )
+ void Free()
+ + diff --git a/Docs/types/AggressiveActionEventHandler.html b/Docs/types/AggressiveActionEventHandler.html new file mode 100644 index 0000000..847382f --- /dev/null +++ b/Docs/types/AggressiveActionEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AggressiveActionEventHandler + + +

Back to Server

+

AggressiveActionEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) AggressiveActionEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AggressiveActionEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( AggressiveActionEventArgs e )
+ + diff --git a/Docs/types/AggressorInfo.html b/Docs/types/AggressorInfo.html new file mode 100644 index 0000000..4df244f --- /dev/null +++ b/Docs/types/AggressorInfo.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - AggressorInfo + + +

Back to Server

+

AggressorInfo

+ (static) TimeSpan ExpireDelay( get; set; )
+ (static) AggressorInfo Create( Mobile attacker, Mobile defender, bool criminal )
+ (static) void DumpAccess()
+ (ctor) AggressorInfo( Mobile attacker, Mobile defender, bool criminal )
+ Mobile Attacker( get; )
+ bool CanReportMurder( get; set; )
+ bool CriminalAggression( get; set; )
+ Mobile Defender( get; )
+ bool Expired( get; )
+ DateTime LastCombatTime( get; )
+ bool Reported( get; set; )
+ void Free()
+ void Refresh()
+ + diff --git a/Docs/types/AgilityPotion.html b/Docs/types/AgilityPotion.html new file mode 100644 index 0000000..8fbdcac --- /dev/null +++ b/Docs/types/AgilityPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AgilityPotion + + +

Back to Server.Items

+

AgilityPotion : BaseAgilityPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) AgilityPotion()
+ (ctor) AgilityPotion( Serial serial )
+ int DexOffset( get; )
+ TimeSpan Duration( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AgilityScroll.html b/Docs/types/AgilityScroll.html new file mode 100644 index 0000000..8b161f1 --- /dev/null +++ b/Docs/types/AgilityScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AgilityScroll + + +

Back to Server.Items

+

AgilityScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) AgilityScroll()
+ (ctor) AgilityScroll( int amount )
+ (ctor) AgilityScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AgilitySpell.html b/Docs/types/AgilitySpell.html new file mode 100644 index 0000000..0d8e143 --- /dev/null +++ b/Docs/types/AgilitySpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AgilitySpell + + +

Back to Server.Spells.Second

+

AgilitySpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) AgilitySpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/AirElemental.html b/Docs/types/AirElemental.html new file mode 100644 index 0000000..f49d8d1 --- /dev/null +++ b/Docs/types/AirElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - AirElemental + + +

Back to Server.Mobiles

+

AirElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) AirElemental()
+ (ctor) AirElemental( Serial serial )
+ bool BleedImmune( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AirElementalSpell.html b/Docs/types/AirElementalSpell.html new file mode 100644 index 0000000..7b55493 --- /dev/null +++ b/Docs/types/AirElementalSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AirElementalSpell + + +

Back to Server.Spells.Eighth

+

AirElementalSpell : MagerySpell, ISpell

+ (ctor) AirElementalSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/AlbertaAfterPaintingConversation.html b/Docs/types/AlbertaAfterPaintingConversation.html new file mode 100644 index 0000000..a6318b8 --- /dev/null +++ b/Docs/types/AlbertaAfterPaintingConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AlbertaAfterPaintingConversation + + +

Back to Server.Engines.Quests.Collector

+

AlbertaAfterPaintingConversation : QuestConversation

+ (ctor) AlbertaAfterPaintingConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/AlbertaEndPaintingConversation.html b/Docs/types/AlbertaEndPaintingConversation.html new file mode 100644 index 0000000..6f2a6b3 --- /dev/null +++ b/Docs/types/AlbertaEndPaintingConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AlbertaEndPaintingConversation + + +

Back to Server.Engines.Quests.Collector

+

AlbertaEndPaintingConversation : QuestConversation

+ (ctor) AlbertaEndPaintingConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/AlbertaGiacco.html b/Docs/types/AlbertaGiacco.html new file mode 100644 index 0000000..c85bc17 --- /dev/null +++ b/Docs/types/AlbertaGiacco.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - AlbertaGiacco + + +

Back to Server.Engines.Quests.Collector

+

AlbertaGiacco : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) AlbertaGiacco()
+ (ctor) AlbertaGiacco( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AlbertaPaintingConversation.html b/Docs/types/AlbertaPaintingConversation.html new file mode 100644 index 0000000..f158d88 --- /dev/null +++ b/Docs/types/AlbertaPaintingConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AlbertaPaintingConversation + + +

Back to Server.Engines.Quests.Collector

+

AlbertaPaintingConversation : QuestConversation

+ (ctor) AlbertaPaintingConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/AlbertaStoolConversation.html b/Docs/types/AlbertaStoolConversation.html new file mode 100644 index 0000000..c2093c2 --- /dev/null +++ b/Docs/types/AlbertaStoolConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AlbertaStoolConversation + + +

Back to Server.Engines.Quests.Collector

+

AlbertaStoolConversation : QuestConversation

+ (ctor) AlbertaStoolConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/Alchemist.html b/Docs/types/Alchemist.html new file mode 100644 index 0000000..5236fb5 --- /dev/null +++ b/Docs/types/Alchemist.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Alchemist + + +

Back to Server.Mobiles

+

Alchemist : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Alchemist()
+ (ctor) Alchemist( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AlchemistTableEastAddon.html b/Docs/types/AlchemistTableEastAddon.html new file mode 100644 index 0000000..c822526 --- /dev/null +++ b/Docs/types/AlchemistTableEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AlchemistTableEastAddon + + +

Back to Server.Items

+

AlchemistTableEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) AlchemistTableEastAddon()
+ (ctor) AlchemistTableEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AlchemistTableEastDeed.html b/Docs/types/AlchemistTableEastDeed.html new file mode 100644 index 0000000..4fffbdc --- /dev/null +++ b/Docs/types/AlchemistTableEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AlchemistTableEastDeed + + +

Back to Server.Items

+

AlchemistTableEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AlchemistTableEastDeed()
+ (ctor) AlchemistTableEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AlchemistTableSouthAddon.html b/Docs/types/AlchemistTableSouthAddon.html new file mode 100644 index 0000000..48cf8e6 --- /dev/null +++ b/Docs/types/AlchemistTableSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AlchemistTableSouthAddon + + +

Back to Server.Items

+

AlchemistTableSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) AlchemistTableSouthAddon()
+ (ctor) AlchemistTableSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AlchemistTableSouthDeed.html b/Docs/types/AlchemistTableSouthDeed.html new file mode 100644 index 0000000..5093e2b --- /dev/null +++ b/Docs/types/AlchemistTableSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AlchemistTableSouthDeed + + +

Back to Server.Items

+

AlchemistTableSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AlchemistTableSouthDeed()
+ (ctor) AlchemistTableSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AlchemistsBauble.html b/Docs/types/AlchemistsBauble.html new file mode 100644 index 0000000..fb09d64 --- /dev/null +++ b/Docs/types/AlchemistsBauble.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AlchemistsBauble + + +

Back to Server.Items

+

AlchemistsBauble : GoldBracelet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) AlchemistsBauble()
+ (ctor) AlchemistsBauble( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AlchemyBag.html b/Docs/types/AlchemyBag.html new file mode 100644 index 0000000..24fc454 --- /dev/null +++ b/Docs/types/AlchemyBag.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AlchemyBag + + +

Back to Server.Items

+

AlchemyBag : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) AlchemyBag()
+ (ctor) AlchemyBag( int amount )
+ (ctor) AlchemyBag( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AlchemyStone.html b/Docs/types/AlchemyStone.html new file mode 100644 index 0000000..642346f --- /dev/null +++ b/Docs/types/AlchemyStone.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AlchemyStone + + +

Back to Server.Items

+

AlchemyStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AlchemyStone()
+ (ctor) AlchemyStone( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AliasedSetCommand.html b/Docs/types/AliasedSetCommand.html new file mode 100644 index 0000000..d4a8996 --- /dev/null +++ b/Docs/types/AliasedSetCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AliasedSetCommand + + +

Back to Server.Commands.Generic

+

AliasedSetCommand : BaseCommand

+ (ctor) AliasedSetCommand( AccessLevel level, string command, string name, string value, ObjectTypes objects )
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/AliasesAttribute.html b/Docs/types/AliasesAttribute.html new file mode 100644 index 0000000..e066cec --- /dev/null +++ b/Docs/types/AliasesAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AliasesAttribute + + +

Back to Server

+

AliasesAttribute : Attribute, _Attribute

+ (ctor) AliasesAttribute( string[] aliases )
+ string[] Aliases( get; )
+ + diff --git a/Docs/types/AllSkillsTarget.html b/Docs/types/AllSkillsTarget.html new file mode 100644 index 0000000..ba533aa --- /dev/null +++ b/Docs/types/AllSkillsTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AllSkillsTarget + + +

Back to Server.Commands

+

(SkillsCommand) - AllSkillsTarget : Target

+ (ctor) AllSkillsTarget( double value )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/Allegiance.html b/Docs/types/Allegiance.html new file mode 100644 index 0000000..cb2201d --- /dev/null +++ b/Docs/types/Allegiance.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Allegiance + + +

Back to Server.Mobiles

+

Allegiance (Enum)

+ None = 0,
+ Ally = 1,
+ Enemy = 2
+ + diff --git a/Docs/types/AllianceInfo.html b/Docs/types/AllianceInfo.html new file mode 100644 index 0000000..a8974da --- /dev/null +++ b/Docs/types/AllianceInfo.html @@ -0,0 +1,40 @@ + + + RunUO Documentation - Class Overview - AllianceInfo + + +

Back to Server.Guilds

+

AllianceInfo

+

Nested Types: AllianceRosterGump

+ (static) Dictionary<String,AllianceInfo> Alliances( get; )
+ (ctor) AllianceInfo( GenericReader reader )
+ (ctor) AllianceInfo( Guild leader, string name, Guild partner )
+ Guild Leader( get; set; )
+ string Name( get; )
+ void AddPendingGuild( Guild g )
+ void AllianceChat( Mobile from, string text )
+ void AllianceChat( Mobile from, int hue, string text )
+ void AllianceMessage( int number )
+ void AllianceMessage( int number, string args )
+ void AllianceMessage( int number, string args, int hue )
+ void AllianceMessage( int number, bool append, string affix )
+ void AllianceMessage( int number, bool append, string affix, string args )
+ void AllianceMessage( int num, bool append, string format, object[] args )
+ void AllianceMessage( int number, bool append, string affix, string args, int hue )
+ void AllianceTextMessage( string text )
+ void AllianceTextMessage( int hue, string text )
+ void AllianceTextMessage( string format, object[] args )
+ void AllianceTextMessage( int hue, string format, object[] args )
+ void CalculateAllianceLeader()
+ void CheckLeader()
+ void Disband()
+ void InvalidateMemberNotoriety()
+ void InvalidateMemberProperties()
+ void InvalidateMemberProperties( bool onlyOPL )
+ bool IsMember( Guild g )
+ bool IsPendingMember( Guild g )
+ void RemoveGuild( Guild g )
+ void Serialize( GenericWriter writer )
+ void TurnToMember( Guild g )
+ + diff --git a/Docs/types/AllianceRosterGump.html b/Docs/types/AllianceRosterGump.html new file mode 100644 index 0000000..88a605b --- /dev/null +++ b/Docs/types/AllianceRosterGump.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AllianceRosterGump + + +

Back to Server.Guilds

+

(AllianceInfo) - AllianceRosterGump : GuildDiplomacyGump

+ (ctor) AllianceRosterGump( PlayerMobile pm, Guild g, AllianceInfo alliance )
+ (ctor) AllianceRosterGump( PlayerMobile pm, Guild g, AllianceInfo alliance, IComparer<Guild> currentComparer, bool ascending, string filter, int startNumber )
+ bool AllowAdvancedSearch( get; )
+ virtual Gump GetResentGump( PlayerMobile pm, Guild g, IComparer<Guild> comparer, bool ascending, string filter, int startNumber )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/Alligator.html b/Docs/types/Alligator.html new file mode 100644 index 0000000..bbf35ae --- /dev/null +++ b/Docs/types/Alligator.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Alligator + + +

Back to Server.Mobiles

+

Alligator : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Alligator()
+ (ctor) Alligator( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AllowBeneficialHandler.html b/Docs/types/AllowBeneficialHandler.html new file mode 100644 index 0000000..77ddd33 --- /dev/null +++ b/Docs/types/AllowBeneficialHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AllowBeneficialHandler + + +

Back to Server

+

AllowBeneficialHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) AllowBeneficialHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, Mobile target, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Mobile from, Mobile target )
+ + diff --git a/Docs/types/AllowHarmfulHandler.html b/Docs/types/AllowHarmfulHandler.html new file mode 100644 index 0000000..5a5531d --- /dev/null +++ b/Docs/types/AllowHarmfulHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AllowHarmfulHandler + + +

Back to Server

+

AllowHarmfulHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) AllowHarmfulHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, Mobile target, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Mobile from, Mobile target )
+ + diff --git a/Docs/types/AllowedPlacing.html b/Docs/types/AllowedPlacing.html new file mode 100644 index 0000000..87cb37a --- /dev/null +++ b/Docs/types/AllowedPlacing.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AllowedPlacing + + +

Back to Server.Factions

+

AllowedPlacing (Enum)

+ Everywhere = 0,
+ AnyFactionTown = 1,
+ ControlledFactionTown = 2,
+ FactionStronghold = 3
+ + diff --git a/Docs/types/AlreadyBoundException.html b/Docs/types/AlreadyBoundException.html new file mode 100644 index 0000000..fb89901 --- /dev/null +++ b/Docs/types/AlreadyBoundException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AlreadyBoundException + + +

Back to Server

+

AlreadyBoundException : BindingException, ISerializable, _Exception

+ (ctor) AlreadyBoundException( Property property )
+ + diff --git a/Docs/types/Amber.html b/Docs/types/Amber.html new file mode 100644 index 0000000..2ded203 --- /dev/null +++ b/Docs/types/Amber.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Amber + + +

Back to Server.Items

+

Amber : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Amber()
+ (ctor) Amber( int amount )
+ (ctor) Amber( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AmbitiousQueenQuest.html b/Docs/types/AmbitiousQueenQuest.html new file mode 100644 index 0000000..46fa147 --- /dev/null +++ b/Docs/types/AmbitiousQueenQuest.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - AmbitiousQueenQuest + + +

Back to Server.Engines.Quests.Ambitious

+

AmbitiousQueenQuest : QuestSystem

+ (static) void GiveRewardTo( PlayerMobile player, ref bool bagOfSending, ref bool powderOfTranslocation, ref bool gold )
+ (ctor) AmbitiousQueenQuest()
+ (ctor) AmbitiousQueenQuest( PlayerMobile from, bool redSolen )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ bool RedSolen( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ + diff --git a/Docs/types/Amethyst.html b/Docs/types/Amethyst.html new file mode 100644 index 0000000..66252c8 --- /dev/null +++ b/Docs/types/Amethyst.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Amethyst + + +

Back to Server.Items

+

Amethyst : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Amethyst()
+ (ctor) Amethyst( int amount )
+ (ctor) Amethyst( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Anatomy.html b/Docs/types/Anatomy.html new file mode 100644 index 0000000..84e0374 --- /dev/null +++ b/Docs/types/Anatomy.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Anatomy + + +

Back to Server.SkillHandlers

+

Anatomy

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Anatomy()
+ + diff --git a/Docs/types/AncientFarmersKasa.html b/Docs/types/AncientFarmersKasa.html new file mode 100644 index 0000000..d4f35a7 --- /dev/null +++ b/Docs/types/AncientFarmersKasa.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - AncientFarmersKasa + + +

Back to Server.Items

+

AncientFarmersKasa : Kasa, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) AncientFarmersKasa()
+ (ctor) AncientFarmersKasa( Serial serial )
+ int BaseColdResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AncientLich.html b/Docs/types/AncientLich.html new file mode 100644 index 0000000..132cc6a --- /dev/null +++ b/Docs/types/AncientLich.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - AncientLich + + +

Back to Server.Mobiles

+

AncientLich : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) AncientLich()
+ (ctor) AncientLich( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AncientSamuraiDo.html b/Docs/types/AncientSamuraiDo.html new file mode 100644 index 0000000..28843d2 --- /dev/null +++ b/Docs/types/AncientSamuraiDo.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - AncientSamuraiDo + + +

Back to Server.Items

+

AncientSamuraiDo : PlateDo, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) AncientSamuraiDo()
+ (ctor) AncientSamuraiDo( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AncientSmithyHammer.html b/Docs/types/AncientSmithyHammer.html new file mode 100644 index 0000000..fb3deeb --- /dev/null +++ b/Docs/types/AncientSmithyHammer.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - AncientSmithyHammer + + +

Back to Server.Items

+

AncientSmithyHammer : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) AncientSmithyHammer( Serial serial )
+ (ctor) AncientSmithyHammer( int bonus )
+ (ctor) AncientSmithyHammer( int bonus, int uses )
+ int Bonus( get; set; )
+ CraftSystem CraftSystem( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAdded( object parent )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AncientUrn.html b/Docs/types/AncientUrn.html new file mode 100644 index 0000000..589c162 --- /dev/null +++ b/Docs/types/AncientUrn.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AncientUrn + + +

Back to Server.Items

+

AncientUrn : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) string[] Names( get; )
+ (ctor) AncientUrn()
+ (ctor) AncientUrn( string urnName )
+ (ctor) AncientUrn( Serial serial )
+ int LabelNumber( get; )
+ string UrnName( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AncientWyrm.html b/Docs/types/AncientWyrm.html new file mode 100644 index 0000000..77b4232 --- /dev/null +++ b/Docs/types/AncientWyrm.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - AncientWyrm + + +

Back to Server.Mobiles

+

AncientWyrm : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) AncientWyrm()
+ (ctor) AncientWyrm( Serial serial )
+ bool AutoDispel( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ bool ReacquireOnMovement( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AniLargeVioletFlask.html b/Docs/types/AniLargeVioletFlask.html new file mode 100644 index 0000000..04c857b --- /dev/null +++ b/Docs/types/AniLargeVioletFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AniLargeVioletFlask + + +

Back to Server.Items

+

AniLargeVioletFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AniLargeVioletFlask()
+ (ctor) AniLargeVioletFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AniRedRibbedFlask.html b/Docs/types/AniRedRibbedFlask.html new file mode 100644 index 0000000..7b13da2 --- /dev/null +++ b/Docs/types/AniRedRibbedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AniRedRibbedFlask + + +

Back to Server.Items

+

AniRedRibbedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AniRedRibbedFlask()
+ (ctor) AniRedRibbedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AniSmallBlueFlask.html b/Docs/types/AniSmallBlueFlask.html new file mode 100644 index 0000000..6eec64b --- /dev/null +++ b/Docs/types/AniSmallBlueFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AniSmallBlueFlask + + +

Back to Server.Items

+

AniSmallBlueFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AniSmallBlueFlask()
+ (ctor) AniSmallBlueFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnimTimer.html b/Docs/types/AnimTimer.html new file mode 100644 index 0000000..8ac5bab --- /dev/null +++ b/Docs/types/AnimTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AnimTimer + + +

Back to Server.Spells

+

(Spell) - AnimTimer : Timer

+ (ctor) AnimTimer( Spell spell, int count )
+ virtual void OnTick()
+ + diff --git a/Docs/types/AnimalAI.html b/Docs/types/AnimalAI.html new file mode 100644 index 0000000..e8ba2c9 --- /dev/null +++ b/Docs/types/AnimalAI.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AnimalAI + + +

Back to Server.Mobiles

+

AnimalAI : BaseAI

+ (ctor) AnimalAI( BaseCreature m )
+ virtual bool DoActionBackoff()
+ virtual bool DoActionCombat()
+ virtual bool DoActionFlee()
+ virtual bool DoActionWander()
+ + diff --git a/Docs/types/AnimalBuyInfo.html b/Docs/types/AnimalBuyInfo.html new file mode 100644 index 0000000..3a3bd7b --- /dev/null +++ b/Docs/types/AnimalBuyInfo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AnimalBuyInfo + + +

Back to Server.Mobiles

+

AnimalBuyInfo : GenericBuyInfo, IBuyItemInfo

+ (ctor) AnimalBuyInfo( int controlSlots, Type type, int price, int amount, int itemID, int hue )
+ (ctor) AnimalBuyInfo( int controlSlots, string name, Type type, int price, int amount, int itemID, int hue )
+ int ControlSlots( get; )
+ + diff --git a/Docs/types/AnimalForm.html b/Docs/types/AnimalForm.html new file mode 100644 index 0000000..323888f --- /dev/null +++ b/Docs/types/AnimalForm.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - AnimalForm + + +

Back to Server.Spells.Ninjitsu

+

AnimalForm : NinjaSpell, ISpell

+

Nested Types: AnimalFormEntry, AnimalFormGump, MorphResult

+ (static) AnimalFormEntry[] Entries( get; )
+ (static) void AddContext( Mobile m, AnimalFormContext context )
+ (static) AnimalFormContext GetContext( Mobile m )
+ (static) void Initialize()
+ (static) MorphResult Morph( Mobile m, int entryID )
+ (static) void OnLogin( LoginEventArgs e )
+ (static) void RemoveContext( Mobile m, bool resetGraphics )
+ (static) void RemoveContext( Mobile m, AnimalFormContext context, bool resetGraphics )
+ (static) bool UnderTransformation( Mobile m )
+ (static) bool UnderTransformation( Mobile m, Type type )
+ (ctor) AnimalForm( Mobile caster, Item scroll )
+ bool BlockedByAnimalForm( get; )
+ TimeSpan CastDelayBase( get; )
+ int CastRecoveryBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual bool CheckDisturb( DisturbType type, bool firstCircle, bool resistable )
+ virtual bool CheckFizzle()
+ int GetLastAnimalForm( Mobile m )
+ virtual void OnBeginCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/AnimalFormContext.html b/Docs/types/AnimalFormContext.html new file mode 100644 index 0000000..cb04220 --- /dev/null +++ b/Docs/types/AnimalFormContext.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AnimalFormContext + + +

Back to Server.Spells.Ninjitsu

+

AnimalFormContext

+ (ctor) AnimalFormContext( Timer timer, SkillMod mod, bool speedBoost, Type type, SkillMod stealingMod )
+ SkillMod Mod( get; )
+ bool SpeedBoost( get; )
+ SkillMod StealingMod( get; )
+ Timer Timer( get; )
+ Type Type( get; )
+ + diff --git a/Docs/types/AnimalFormEntry.html b/Docs/types/AnimalFormEntry.html new file mode 100644 index 0000000..d6838db --- /dev/null +++ b/Docs/types/AnimalFormEntry.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - AnimalFormEntry + + +

Back to Server.Spells.Ninjitsu

+

(AnimalForm) - AnimalFormEntry

+ (ctor) AnimalFormEntry( Type type, TextDefinition name, int itemID, int hue, int tooltip, double reqSkill, int bodyMod, bool stealthBonus, bool speedBoost, bool stealingBonus )
+ (ctor) AnimalFormEntry( Type type, TextDefinition name, int itemID, int hue, int tooltip, double reqSkill, int bodyMod, int hueMod, bool stealthBonus, bool speedBoost, bool stealingBonus )
+ int BodyMod( get; )
+ int Hue( get; )
+ int HueMod( get; )
+ int ItemID( get; )
+ TextDefinition Name( get; )
+ double ReqSkill( get; )
+ bool SpeedBoost( get; )
+ bool StealingBonus( get; )
+ bool StealthBonus( get; )
+ int Tooltip( get; )
+ Type Type( get; )
+ + diff --git a/Docs/types/AnimalFormGump.html b/Docs/types/AnimalFormGump.html new file mode 100644 index 0000000..f666c03 --- /dev/null +++ b/Docs/types/AnimalFormGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AnimalFormGump + + +

Back to Server.Spells.Ninjitsu

+

(AnimalForm) - AnimalFormGump : Gump

+ (ctor) AnimalFormGump( Mobile caster, AnimalFormEntry[] entries, AnimalForm spell )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/AnimalFormTimer.html b/Docs/types/AnimalFormTimer.html new file mode 100644 index 0000000..5378c8e --- /dev/null +++ b/Docs/types/AnimalFormTimer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AnimalFormTimer + + +

Back to Server.Spells.Ninjitsu

+

AnimalFormTimer : Timer

+ (ctor) AnimalFormTimer( Mobile from, int body, int hue )
+ void BreathDamage_Callback( Mobile target )
+ void BreathEffect_Callback( Mobile target )
+ virtual void OnTick()
+ + diff --git a/Docs/types/AnimalLore.html b/Docs/types/AnimalLore.html new file mode 100644 index 0000000..4608926 --- /dev/null +++ b/Docs/types/AnimalLore.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AnimalLore + + +

Back to Server.SkillHandlers

+

AnimalLore

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) AnimalLore()
+ + diff --git a/Docs/types/AnimalLoreGump.html b/Docs/types/AnimalLoreGump.html new file mode 100644 index 0000000..5c2d038 --- /dev/null +++ b/Docs/types/AnimalLoreGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - AnimalLoreGump + + +

Back to Server.SkillHandlers

+

AnimalLoreGump : Gump

+ (static) string FormatAttributes( int cur, int max )
+ (static) string FormatDamage( int min, int max )
+ (static) string FormatDouble( double val )
+ (static) string FormatElement( int val )
+ (static) string FormatSkill( BaseCreature c, SkillName name )
+ (static) string FormatStat( int val )
+ (ctor) AnimalLoreGump( BaseCreature c )
+ + diff --git a/Docs/types/AnimalTaming.html b/Docs/types/AnimalTaming.html new file mode 100644 index 0000000..cccb064 --- /dev/null +++ b/Docs/types/AnimalTaming.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AnimalTaming + + +

Back to Server.SkillHandlers

+

AnimalTaming

+

Nested Types: InternalTarget

+ (static) bool DisableMessage( get; set; )
+ (static) bool CheckMastery( Mobile tamer, BaseCreature creature )
+ (static) void Initialize()
+ (static) bool MustBeSubdued( BaseCreature bc )
+ (static) TimeSpan OnUse( Mobile m )
+ (static) void ScaleSkills( BaseCreature bc, double scalar )
+ (static) void ScaleSkills( BaseCreature bc, double scalar, double capScalar )
+ (static) void ScaleStats( BaseCreature bc, double scalar )
+ (ctor) AnimalTaming()
+ + diff --git a/Docs/types/AnimalTrainer.html b/Docs/types/AnimalTrainer.html new file mode 100644 index 0000000..797849b --- /dev/null +++ b/Docs/types/AnimalTrainer.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - AnimalTrainer + + +

Back to Server.Mobiles

+

AnimalTrainer : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: GypsyAnimalTrainer

+

Nested Types: ClaimAllEntry, ClaimListGump, StableEntry, StableTarget

+ (static) int GetMaxStabled( Mobile from )
+ (ctor) AnimalTrainer()
+ (ctor) AnimalTrainer( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
+ void BeginClaimList( Mobile from )
+ void BeginStable( Mobile from )
+ bool CanClaim( Mobile from, BaseCreature pet )
+ void Claim( Mobile from )
+ void Claim( Mobile from, string petName )
+ void CloseClaimList( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ void DoClaim( Mobile from, BaseCreature pet )
+ void EndClaimList( Mobile from, BaseCreature pet )
+ void EndStable( Mobile from, BaseCreature pet )
+ virtual int GetShoeHue()
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnimateDeadScroll.html b/Docs/types/AnimateDeadScroll.html new file mode 100644 index 0000000..5db1d84 --- /dev/null +++ b/Docs/types/AnimateDeadScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AnimateDeadScroll + + +

Back to Server.Items

+

AnimateDeadScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) AnimateDeadScroll()
+ (ctor) AnimateDeadScroll( int amount )
+ (ctor) AnimateDeadScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnimateDeadSpell.html b/Docs/types/AnimateDeadSpell.html new file mode 100644 index 0000000..d8436f4 --- /dev/null +++ b/Docs/types/AnimateDeadSpell.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - AnimateDeadSpell + + +

Back to Server.Spells.Necromancy

+

AnimateDeadSpell : NecromancerSpell, ISpell

+

Nested Types: CreatureGroup, InternalTarget, SummonEntry

+ (static) CreatureGroup FindGroup( Type type )
+ (static) void Register( Mobile master, Mobile summoned )
+ (static) void Scale( BaseCreature bc, int scalar )
+ (static) void SummonDelay_Callback( object state )
+ (static) void Summoned_Damage( object state )
+ (static) void Unregister( Mobile master, Mobile summoned )
+ (ctor) AnimateDeadSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( object obj )
+ + diff --git a/Docs/types/AnimateMaabusCorpseObjective.html b/Docs/types/AnimateMaabusCorpseObjective.html new file mode 100644 index 0000000..c2022e3 --- /dev/null +++ b/Docs/types/AnimateMaabusCorpseObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AnimateMaabusCorpseObjective + + +

Back to Server.Engines.Quests.Necro

+

AnimateMaabusCorpseObjective : QuestObjective

+ (ctor) AnimateMaabusCorpseObjective()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/AnimateRequestEventArgs.html b/Docs/types/AnimateRequestEventArgs.html new file mode 100644 index 0000000..3c5e603 --- /dev/null +++ b/Docs/types/AnimateRequestEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AnimateRequestEventArgs + + +

Back to Server

+

AnimateRequestEventArgs : EventArgs

+ (ctor) AnimateRequestEventArgs( Mobile m, string action )
+ string Action( get; )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/AnimateRequestEventHandler.html b/Docs/types/AnimateRequestEventHandler.html new file mode 100644 index 0000000..c2d4471 --- /dev/null +++ b/Docs/types/AnimateRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AnimateRequestEventHandler + + +

Back to Server

+

AnimateRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) AnimateRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AnimateRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( AnimateRequestEventArgs e )
+ + diff --git a/Docs/types/AnimateTimer.html b/Docs/types/AnimateTimer.html new file mode 100644 index 0000000..82a1550 --- /dev/null +++ b/Docs/types/AnimateTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AnimateTimer + + +

Back to Server.Mobiles

+

(Satyr) - AnimateTimer : Timer

+ (ctor) AnimateTimer( Mobile owner, int count )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Animations.html b/Docs/types/Animations.html new file mode 100644 index 0000000..e5f0b93 --- /dev/null +++ b/Docs/types/Animations.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Animations + + +

Back to Server.Misc

+

Animations

+ (static) void EventSink_AnimateRequest( AnimateRequestEventArgs e )
+ (static) void Initialize()
+ (ctor) Animations()
+ + diff --git a/Docs/types/AnkhNorth.html b/Docs/types/AnkhNorth.html new file mode 100644 index 0000000..8b06cea --- /dev/null +++ b/Docs/types/AnkhNorth.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - AnkhNorth + + +

Back to Server.Items

+

AnkhNorth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) AnkhNorth()
+ (ctor) AnkhNorth( bool bloodied )
+ (ctor) AnkhNorth( Serial serial )
+ bool HandlesOnMovement( get; )
+ int Hue( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClickDead( Mobile m )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnkhOfSacrificeAddon.html b/Docs/types/AnkhOfSacrificeAddon.html new file mode 100644 index 0000000..9c3f4e2 --- /dev/null +++ b/Docs/types/AnkhOfSacrificeAddon.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - AnkhOfSacrificeAddon + + +

Back to Server.Items

+

AnkhOfSacrificeAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IRewardItem

+ (ctor) AnkhOfSacrificeAddon( Serial serial )
+ (ctor) AnkhOfSacrificeAddon( bool east )
+ BaseAddonDeed Deed( get; )
+ bool HandlesOnMovement( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnkhOfSacrificeComponent.html b/Docs/types/AnkhOfSacrificeComponent.html new file mode 100644 index 0000000..bccf59f --- /dev/null +++ b/Docs/types/AnkhOfSacrificeComponent.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - AnkhOfSacrificeComponent + + +

Back to Server.Items

+

AnkhOfSacrificeComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: AnkhResurrectGump, LockKarmaEntry, ResurrectEntry

+ (static) void Resurrect( PlayerMobile m, AnkhOfSacrificeAddon ankh )
+ (ctor) AnkhOfSacrificeComponent( Serial serial )
+ (ctor) AnkhOfSacrificeComponent( int itemID )
+ bool ForceShowProperties( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnkhOfSacrificeDeed.html b/Docs/types/AnkhOfSacrificeDeed.html new file mode 100644 index 0000000..b18582a --- /dev/null +++ b/Docs/types/AnkhOfSacrificeDeed.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - AnkhOfSacrificeDeed + + +

Back to Server.Items

+

AnkhOfSacrificeDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem, IRewardOption

+ (ctor) AnkhOfSacrificeDeed()
+ (ctor) AnkhOfSacrificeDeed( Serial serial )
+ (ctor) AnkhOfSacrificeDeed( bool isRewardItem )
+ BaseAddon Addon( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetOptions( RewardOptionList list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnOptionSelected( Mobile from, int option )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnkhResurrectGump.html b/Docs/types/AnkhResurrectGump.html new file mode 100644 index 0000000..ddbb07b --- /dev/null +++ b/Docs/types/AnkhResurrectGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AnkhResurrectGump + + +

Back to Server.Items

+

(AnkhOfSacrificeComponent) - AnkhResurrectGump : ResurrectGump

+ (ctor) AnkhResurrectGump( Mobile owner, ResurrectMessage msg )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/AnkhWest.html b/Docs/types/AnkhWest.html new file mode 100644 index 0000000..9462672 --- /dev/null +++ b/Docs/types/AnkhWest.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - AnkhWest + + +

Back to Server.Items

+

AnkhWest : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) AnkhWest()
+ (ctor) AnkhWest( bool bloodied )
+ (ctor) AnkhWest( Serial serial )
+ bool HandlesOnMovement( get; )
+ int Hue( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClickDead( Mobile m )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ankhs.html b/Docs/types/Ankhs.html new file mode 100644 index 0000000..3667e20 --- /dev/null +++ b/Docs/types/Ankhs.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Ankhs + + +

Back to Server.Items

+

Ankhs

+

Nested Types: LockKarmaEntry, ResurrectEntry, TitheEntry

+ (static) void GetContextMenuEntries( Mobile from, Item item, List<ContextMenuEntry> list )
+ (static) void Resurrect( Mobile m, Item item )
+ (ctor) Ankhs()
+ + diff --git a/Docs/types/AnsellaGryen.html b/Docs/types/AnsellaGryen.html new file mode 100644 index 0000000..70098cc --- /dev/null +++ b/Docs/types/AnsellaGryen.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - AnsellaGryen + + +

Back to Server.Engines.Quests.Zento

+

AnsellaGryen : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) AnsellaGryen()
+ (ctor) AnsellaGryen( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile m )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ virtual void TurnToTokuno()
+ + diff --git a/Docs/types/AntLion.html b/Docs/types/AntLion.html new file mode 100644 index 0000000..5900921 --- /dev/null +++ b/Docs/types/AntLion.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AntLion + + +

Back to Server.Mobiles

+

AntLion : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) AntLion()
+ (ctor) AntLion( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnthropomorphistGlasses.html b/Docs/types/AnthropomorphistGlasses.html new file mode 100644 index 0000000..8036c35 --- /dev/null +++ b/Docs/types/AnthropomorphistGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - AnthropomorphistGlasses + + +

Back to Server.Items

+

AnthropomorphistGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) AnthropomorphistGlasses()
+ (ctor) AnthropomorphistGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Anvil.html b/Docs/types/Anvil.html new file mode 100644 index 0000000..2cfd960 --- /dev/null +++ b/Docs/types/Anvil.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Anvil + + +

Back to Server.Items

+

Anvil : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Anvil()
+ (ctor) Anvil( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnvilAttribute.html b/Docs/types/AnvilAttribute.html new file mode 100644 index 0000000..a460af1 --- /dev/null +++ b/Docs/types/AnvilAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AnvilAttribute + + +

Back to Server.Engines.Craft

+

AnvilAttribute : Attribute, _Attribute

+ (ctor) AnvilAttribute()
+ + diff --git a/Docs/types/AnvilComponent.html b/Docs/types/AnvilComponent.html new file mode 100644 index 0000000..a7f61ff --- /dev/null +++ b/Docs/types/AnvilComponent.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AnvilComponent + + +

Back to Server.Items

+

AnvilComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) AnvilComponent( int itemID )
+ (ctor) AnvilComponent( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnvilEastAddon.html b/Docs/types/AnvilEastAddon.html new file mode 100644 index 0000000..c661c31 --- /dev/null +++ b/Docs/types/AnvilEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AnvilEastAddon + + +

Back to Server.Items

+

AnvilEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) AnvilEastAddon()
+ (ctor) AnvilEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnvilEastDeed.html b/Docs/types/AnvilEastDeed.html new file mode 100644 index 0000000..fb4f655 --- /dev/null +++ b/Docs/types/AnvilEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AnvilEastDeed + + +

Back to Server.Items

+

AnvilEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AnvilEastDeed()
+ (ctor) AnvilEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnvilSouthAddon.html b/Docs/types/AnvilSouthAddon.html new file mode 100644 index 0000000..99f25d2 --- /dev/null +++ b/Docs/types/AnvilSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AnvilSouthAddon + + +

Back to Server.Items

+

AnvilSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) AnvilSouthAddon()
+ (ctor) AnvilSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AnvilSouthDeed.html b/Docs/types/AnvilSouthDeed.html new file mode 100644 index 0000000..98373b5 --- /dev/null +++ b/Docs/types/AnvilSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AnvilSouthDeed + + +

Back to Server.Items

+

AnvilSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AnvilSouthDeed()
+ (ctor) AnvilSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AosArmorAttribute.html b/Docs/types/AosArmorAttribute.html new file mode 100644 index 0000000..0fae970 --- /dev/null +++ b/Docs/types/AosArmorAttribute.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AosArmorAttribute + + +

Back to Server

+

AosArmorAttribute (Enum)

+ LowerStatReq = 0x00000001,
+ SelfRepair = 0x00000002,
+ MageArmor = 0x00000004,
+ DurabilityBonus = 0x00000008
+ + diff --git a/Docs/types/AosArmorAttributes.html b/Docs/types/AosArmorAttributes.html new file mode 100644 index 0000000..c70398a --- /dev/null +++ b/Docs/types/AosArmorAttributes.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AosArmorAttributes + + +

Back to Server

+

AosArmorAttributes : BaseAttributes

+ (static) int GetValue( Mobile m, AosArmorAttribute attribute )
+ (ctor) AosArmorAttributes( Item owner )
+ (ctor) AosArmorAttributes( Item owner, GenericReader reader )
+ (ctor) AosArmorAttributes( Item owner, AosArmorAttributes other )
+ int DurabilityBonus( get; set; )
+ int Item( get; set; )
+ int LowerStatReq( get; set; )
+ int MageArmor( get; set; )
+ int SelfRepair( get; set; )
+ virtual string ToString()
+ + diff --git a/Docs/types/AosAttribute.html b/Docs/types/AosAttribute.html new file mode 100644 index 0000000..085ae61 --- /dev/null +++ b/Docs/types/AosAttribute.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - AosAttribute + + +

Back to Server

+

AosAttribute (Enum)

+ RegenHits = 0x00000001,
+ RegenStam = 0x00000002,
+ RegenMana = 0x00000004,
+ DefendChance = 0x00000008,
+ AttackChance = 0x00000010,
+ BonusStr = 0x00000020,
+ BonusDex = 0x00000040,
+ BonusInt = 0x00000080,
+ BonusHits = 0x00000100,
+ BonusStam = 0x00000200,
+ BonusMana = 0x00000400,
+ WeaponDamage = 0x00000800,
+ WeaponSpeed = 0x00001000,
+ SpellDamage = 0x00002000,
+ CastRecovery = 0x00004000,
+ CastSpeed = 0x00008000,
+ LowerManaCost = 0x00010000,
+ LowerRegCost = 0x00020000,
+ ReflectPhysical = 0x00040000,
+ EnhancePotions = 0x00080000,
+ Luck = 0x00100000,
+ SpellChanneling = 0x00200000,
+ NightSight = 0x00400000
+ + diff --git a/Docs/types/AosAttributes.html b/Docs/types/AosAttributes.html new file mode 100644 index 0000000..64fdce4 --- /dev/null +++ b/Docs/types/AosAttributes.html @@ -0,0 +1,40 @@ + + + RunUO Documentation - Class Overview - AosAttributes + + +

Back to Server

+

AosAttributes : BaseAttributes

+ (static) int GetValue( Mobile m, AosAttribute attribute )
+ (ctor) AosAttributes( Item owner )
+ (ctor) AosAttributes( Item owner, GenericReader reader )
+ (ctor) AosAttributes( Item owner, AosAttributes other )
+ int AttackChance( get; set; )
+ int BonusDex( get; set; )
+ int BonusHits( get; set; )
+ int BonusInt( get; set; )
+ int BonusMana( get; set; )
+ int BonusStam( get; set; )
+ int BonusStr( get; set; )
+ int CastRecovery( get; set; )
+ int CastSpeed( get; set; )
+ int DefendChance( get; set; )
+ int EnhancePotions( get; set; )
+ int Item( get; set; )
+ int LowerManaCost( get; set; )
+ int LowerRegCost( get; set; )
+ int Luck( get; set; )
+ int NightSight( get; set; )
+ int ReflectPhysical( get; set; )
+ int RegenHits( get; set; )
+ int RegenMana( get; set; )
+ int RegenStam( get; set; )
+ int SpellChanneling( get; set; )
+ int SpellDamage( get; set; )
+ int WeaponDamage( get; set; )
+ int WeaponSpeed( get; set; )
+ void AddStatBonuses( Mobile to )
+ void RemoveStatBonuses( Mobile from )
+ virtual string ToString()
+ + diff --git a/Docs/types/AosElementAttribute.html b/Docs/types/AosElementAttribute.html new file mode 100644 index 0000000..3ed40e7 --- /dev/null +++ b/Docs/types/AosElementAttribute.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - AosElementAttribute + + +

Back to Server

+

AosElementAttribute (Enum)

+ Physical = 0x00000001,
+ Fire = 0x00000002,
+ Cold = 0x00000004,
+ Poison = 0x00000008,
+ Energy = 0x00000010,
+ Chaos = 0x00000020,
+ Direct = 0x00000040
+ + diff --git a/Docs/types/AosElementAttributes.html b/Docs/types/AosElementAttributes.html new file mode 100644 index 0000000..c3b9b36 --- /dev/null +++ b/Docs/types/AosElementAttributes.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - AosElementAttributes + + +

Back to Server

+

AosElementAttributes : BaseAttributes

+ (ctor) AosElementAttributes( Item owner )
+ (ctor) AosElementAttributes( Item owner, GenericReader reader )
+ (ctor) AosElementAttributes( Item owner, AosElementAttributes other )
+ int Chaos( get; set; )
+ int Cold( get; set; )
+ int Direct( get; set; )
+ int Energy( get; set; )
+ int Fire( get; set; )
+ int Item( get; set; )
+ int Physical( get; set; )
+ int Poison( get; set; )
+ virtual string ToString()
+ + diff --git a/Docs/types/AosSkillBonuses.html b/Docs/types/AosSkillBonuses.html new file mode 100644 index 0000000..d722286 --- /dev/null +++ b/Docs/types/AosSkillBonuses.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - AosSkillBonuses + + +

Back to Server

+

AosSkillBonuses : BaseAttributes

+ (ctor) AosSkillBonuses( Item owner )
+ (ctor) AosSkillBonuses( Item owner, GenericReader reader )
+ (ctor) AosSkillBonuses( Item owner, AosSkillBonuses other )
+ SkillName Skill_1_Name( get; set; )
+ double Skill_1_Value( get; set; )
+ SkillName Skill_2_Name( get; set; )
+ double Skill_2_Value( get; set; )
+ SkillName Skill_3_Name( get; set; )
+ double Skill_3_Value( get; set; )
+ SkillName Skill_4_Name( get; set; )
+ double Skill_4_Value( get; set; )
+ SkillName Skill_5_Name( get; set; )
+ double Skill_5_Value( get; set; )
+ void AddTo( Mobile m )
+ void CheckCancelMorph( Mobile m )
+ double GetBonus( int index )
+ void GetProperties( ObjectPropertyList list )
+ SkillName GetSkill( int index )
+ bool GetValues( int index, out SkillName skill, out double bonus )
+ void Remove()
+ void SetBonus( int index, double bonus )
+ void SetSkill( int index, SkillName skill )
+ void SetValues( int index, SkillName skill, double bonus )
+ virtual string ToString()
+ + diff --git a/Docs/types/AosWeaponAttribute.html b/Docs/types/AosWeaponAttribute.html new file mode 100644 index 0000000..f1cd4fa --- /dev/null +++ b/Docs/types/AosWeaponAttribute.html @@ -0,0 +1,34 @@ + + + RunUO Documentation - Class Overview - AosWeaponAttribute + + +

Back to Server

+

AosWeaponAttribute (Enum)

+ LowerStatReq = 0x00000001,
+ SelfRepair = 0x00000002,
+ HitLeechHits = 0x00000004,
+ HitLeechStam = 0x00000008,
+ HitLeechMana = 0x00000010,
+ HitLowerAttack = 0x00000020,
+ HitLowerDefend = 0x00000040,
+ HitMagicArrow = 0x00000080,
+ HitHarm = 0x00000100,
+ HitFireball = 0x00000200,
+ HitLightning = 0x00000400,
+ HitDispel = 0x00000800,
+ HitColdArea = 0x00001000,
+ HitFireArea = 0x00002000,
+ HitPoisonArea = 0x00004000,
+ HitEnergyArea = 0x00008000,
+ HitPhysicalArea = 0x00010000,
+ ResistPhysicalBonus = 0x00020000,
+ ResistFireBonus = 0x00040000,
+ ResistColdBonus = 0x00080000,
+ ResistPoisonBonus = 0x00100000,
+ ResistEnergyBonus = 0x00200000,
+ UseBestSkill = 0x00400000,
+ MageWeapon = 0x00800000,
+ DurabilityBonus = 0x01000000
+ + diff --git a/Docs/types/AosWeaponAttributes.html b/Docs/types/AosWeaponAttributes.html new file mode 100644 index 0000000..c767b57 --- /dev/null +++ b/Docs/types/AosWeaponAttributes.html @@ -0,0 +1,40 @@ + + + RunUO Documentation - Class Overview - AosWeaponAttributes + + +

Back to Server

+

AosWeaponAttributes : BaseAttributes

+ (static) int GetValue( Mobile m, AosWeaponAttribute attribute )
+ (ctor) AosWeaponAttributes( Item owner )
+ (ctor) AosWeaponAttributes( Item owner, AosWeaponAttributes other )
+ (ctor) AosWeaponAttributes( Item owner, GenericReader reader )
+ int DurabilityBonus( get; set; )
+ int HitColdArea( get; set; )
+ int HitDispel( get; set; )
+ int HitEnergyArea( get; set; )
+ int HitFireArea( get; set; )
+ int HitFireball( get; set; )
+ int HitHarm( get; set; )
+ int HitLeechHits( get; set; )
+ int HitLeechMana( get; set; )
+ int HitLeechStam( get; set; )
+ int HitLightning( get; set; )
+ int HitLowerAttack( get; set; )
+ int HitLowerDefend( get; set; )
+ int HitMagicArrow( get; set; )
+ int HitPhysicalArea( get; set; )
+ int HitPoisonArea( get; set; )
+ int Item( get; set; )
+ int LowerStatReq( get; set; )
+ int MageWeapon( get; set; )
+ int ResistColdBonus( get; set; )
+ int ResistEnergyBonus( get; set; )
+ int ResistFireBonus( get; set; )
+ int ResistPhysicalBonus( get; set; )
+ int ResistPoisonBonus( get; set; )
+ int SelfRepair( get; set; )
+ int UseBestSkill( get; set; )
+ virtual string ToString()
+ + diff --git a/Docs/types/Apple.html b/Docs/types/Apple.html new file mode 100644 index 0000000..30fca47 --- /dev/null +++ b/Docs/types/Apple.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Apple + + +

Back to Server.Items

+

Apple : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Apple()
+ (ctor) Apple( int amount )
+ (ctor) Apple( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ApplePie.html b/Docs/types/ApplePie.html new file mode 100644 index 0000000..46cd90a --- /dev/null +++ b/Docs/types/ApplePie.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ApplePie + + +

Back to Server.Items

+

ApplePie : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ApplePie()
+ (ctor) ApplePie( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AppleTreeAddon.html b/Docs/types/AppleTreeAddon.html new file mode 100644 index 0000000..7373270 --- /dev/null +++ b/Docs/types/AppleTreeAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AppleTreeAddon + + +

Back to Server.Items

+

AppleTreeAddon : BaseFruitTreeAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) AppleTreeAddon()
+ (ctor) AppleTreeAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ Item Fruit( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AppleTreeDeed.html b/Docs/types/AppleTreeDeed.html new file mode 100644 index 0000000..72ea56b --- /dev/null +++ b/Docs/types/AppleTreeDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AppleTreeDeed + + +

Back to Server.Items

+

AppleTreeDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AppleTreeDeed()
+ (ctor) AppleTreeDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AppleTrunkAddon.html b/Docs/types/AppleTrunkAddon.html new file mode 100644 index 0000000..b585ffe --- /dev/null +++ b/Docs/types/AppleTrunkAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AppleTrunkAddon + + +

Back to Server.Items

+

AppleTrunkAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) AppleTrunkAddon()
+ (ctor) AppleTrunkAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AppleTrunkDeed.html b/Docs/types/AppleTrunkDeed.html new file mode 100644 index 0000000..d818e3f --- /dev/null +++ b/Docs/types/AppleTrunkDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AppleTrunkDeed + + +

Back to Server.Items

+

AppleTrunkDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AppleTrunkDeed()
+ (ctor) AppleTrunkDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ApplyPoisonResult.html b/Docs/types/ApplyPoisonResult.html new file mode 100644 index 0000000..25bdb7d --- /dev/null +++ b/Docs/types/ApplyPoisonResult.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ApplyPoisonResult + + +

Back to Server

+

ApplyPoisonResult (Enum)

+ Poisoned = 0,
+ Immune = 1,
+ HigherPoisonActive = 2,
+ Cured = 3
+ + diff --git a/Docs/types/ApprenticeCorpseConversation.html b/Docs/types/ApprenticeCorpseConversation.html new file mode 100644 index 0000000..3073a44 --- /dev/null +++ b/Docs/types/ApprenticeCorpseConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ApprenticeCorpseConversation + + +

Back to Server.Engines.Quests.Hag

+

ApprenticeCorpseConversation : QuestConversation

+ (ctor) ApprenticeCorpseConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ArcaneBookshelfEastAddon.html b/Docs/types/ArcaneBookshelfEastAddon.html new file mode 100644 index 0000000..8fea650 --- /dev/null +++ b/Docs/types/ArcaneBookshelfEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArcaneBookshelfEastAddon + + +

Back to Server.Items

+

ArcaneBookshelfEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ArcaneBookshelfEastAddon()
+ (ctor) ArcaneBookshelfEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneBookshelfEastDeed.html b/Docs/types/ArcaneBookshelfEastDeed.html new file mode 100644 index 0000000..3d8f845 --- /dev/null +++ b/Docs/types/ArcaneBookshelfEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArcaneBookshelfEastDeed + + +

Back to Server.Items

+

ArcaneBookshelfEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArcaneBookshelfEastDeed()
+ (ctor) ArcaneBookshelfEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneBookshelfSouthAddon.html b/Docs/types/ArcaneBookshelfSouthAddon.html new file mode 100644 index 0000000..f2b86c9 --- /dev/null +++ b/Docs/types/ArcaneBookshelfSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArcaneBookshelfSouthAddon + + +

Back to Server.Items

+

ArcaneBookshelfSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ArcaneBookshelfSouthAddon()
+ (ctor) ArcaneBookshelfSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneBookshelfSouthDeed.html b/Docs/types/ArcaneBookshelfSouthDeed.html new file mode 100644 index 0000000..be80b7d --- /dev/null +++ b/Docs/types/ArcaneBookshelfSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArcaneBookshelfSouthDeed + + +

Back to Server.Items

+

ArcaneBookshelfSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArcaneBookshelfSouthDeed()
+ (ctor) ArcaneBookshelfSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneCircleAddon.html b/Docs/types/ArcaneCircleAddon.html new file mode 100644 index 0000000..7098c17 --- /dev/null +++ b/Docs/types/ArcaneCircleAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArcaneCircleAddon + + +

Back to Server.Items

+

ArcaneCircleAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ArcaneCircleAddon()
+ (ctor) ArcaneCircleAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneCircleDeed.html b/Docs/types/ArcaneCircleDeed.html new file mode 100644 index 0000000..4846c73 --- /dev/null +++ b/Docs/types/ArcaneCircleDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArcaneCircleDeed + + +

Back to Server.Items

+

ArcaneCircleDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArcaneCircleDeed()
+ (ctor) ArcaneCircleDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneCircleScroll.html b/Docs/types/ArcaneCircleScroll.html new file mode 100644 index 0000000..b5c2d63 --- /dev/null +++ b/Docs/types/ArcaneCircleScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArcaneCircleScroll + + +

Back to Server.Items

+

ArcaneCircleScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ArcaneCircleScroll()
+ (ctor) ArcaneCircleScroll( int amount )
+ (ctor) ArcaneCircleScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneCircleSpell.html b/Docs/types/ArcaneCircleSpell.html new file mode 100644 index 0000000..a23674b --- /dev/null +++ b/Docs/types/ArcaneCircleSpell.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ArcaneCircleSpell + + +

Back to Server.Spells.Spellweaving

+

ArcaneCircleSpell : ArcanistSpell, ISpell

+ (static) bool IsSanctuary( Point3D p, Map m )
+ (static) bool IsValidLocation( Point3D location, Map map )
+ (static) bool IsValidTile( int itemID )
+ (ctor) ArcaneCircleSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ List<Mobile> GetArcanists()
+ void GiveArcaneFocus( Mobile to, TimeSpan duration, int strengthBonus )
+ virtual void OnCast()
+ + diff --git a/Docs/types/ArcaneDaemon.html b/Docs/types/ArcaneDaemon.html new file mode 100644 index 0000000..6b4b0ae --- /dev/null +++ b/Docs/types/ArcaneDaemon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ArcaneDaemon + + +

Back to Server.Mobiles

+

ArcaneDaemon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ArcaneDaemon()
+ (ctor) ArcaneDaemon( Serial serial )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneEmpowermentScroll.html b/Docs/types/ArcaneEmpowermentScroll.html new file mode 100644 index 0000000..528a1a6 --- /dev/null +++ b/Docs/types/ArcaneEmpowermentScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArcaneEmpowermentScroll + + +

Back to Server.Items

+

ArcaneEmpowermentScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ArcaneEmpowermentScroll()
+ (ctor) ArcaneEmpowermentScroll( int amount )
+ (ctor) ArcaneEmpowermentScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneFey.html b/Docs/types/ArcaneFey.html new file mode 100644 index 0000000..6148b19 --- /dev/null +++ b/Docs/types/ArcaneFey.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ArcaneFey + + +

Back to Server.Mobiles

+

ArcaneFey : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ArcaneFey()
+ (ctor) ArcaneFey( Serial serial )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ bool InitialInnocent( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneFiend.html b/Docs/types/ArcaneFiend.html new file mode 100644 index 0000000..d8c7501 --- /dev/null +++ b/Docs/types/ArcaneFiend.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ArcaneFiend + + +

Back to Server.Mobiles

+

ArcaneFiend : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ArcaneFiend()
+ (ctor) ArcaneFiend( Serial serial )
+ bool BleedImmune( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneFocus.html b/Docs/types/ArcaneFocus.html new file mode 100644 index 0000000..7861d85 --- /dev/null +++ b/Docs/types/ArcaneFocus.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ArcaneFocus + + +

Back to Server.Items

+

ArcaneFocus : TransientItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArcaneFocus( Serial serial )
+ (ctor) ArcaneFocus( TimeSpan lifeSpan, int strengthBonus )
+ TextDefinition InvalidTransferMessage( get; )
+ int LabelNumber( get; )
+ bool Nontransferable( get; )
+ int StrengthBonus( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneForm.html b/Docs/types/ArcaneForm.html new file mode 100644 index 0000000..50af18c --- /dev/null +++ b/Docs/types/ArcaneForm.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - ArcaneForm + + +

Back to Server.Spells.Spellweaving

+

ArcaneForm : ArcanistSpell, ISpell, ITransformationSpell

+

Derived Types: EtherealVoyageSpell, ReaperFormSpell

+ (ctor) ArcaneForm( Mobile caster, Item scroll, SpellInfo info )
+ int Body( get; )
+ int ColdResistOffset( get; )
+ int FireResistOffset( get; )
+ int Hue( get; )
+ int NrgyResistOffset( get; )
+ int PhysResistOffset( get; )
+ int PoisResistOffset( get; )
+ double TickRate( get; )
+ virtual bool CheckCast()
+ virtual void DoEffect( Mobile m )
+ virtual void OnCast()
+ virtual void OnTick( Mobile m )
+ virtual void RemoveEffect( Mobile m )
+ + diff --git a/Docs/types/ArcaneGem.html b/Docs/types/ArcaneGem.html new file mode 100644 index 0000000..795105a --- /dev/null +++ b/Docs/types/ArcaneGem.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ArcaneGem + + +

Back to Server.Items

+

ArcaneGem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) bool ConsumeCharges( Mobile from, int amount )
+ (ctor) ArcaneGem()
+ (ctor) ArcaneGem( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ int GetChargesFor( Mobile m )
+ virtual void OnDoubleClick( Mobile from )
+ void OnTarget( Mobile from, object obj )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneShield.html b/Docs/types/ArcaneShield.html new file mode 100644 index 0000000..c9f34ee --- /dev/null +++ b/Docs/types/ArcaneShield.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ArcaneShield + + +

Back to Server.Items

+

ArcaneShield : WoodenKiteShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ArcaneShield()
+ (ctor) ArcaneShield( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcaneSummon-T-.html b/Docs/types/ArcaneSummon-T-.html new file mode 100644 index 0000000..a827e8b --- /dev/null +++ b/Docs/types/ArcaneSummon-T-.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ArcaneSummon<T> + + +

Back to Server.Spells.Spellweaving

+

ArcaneSummon<T> : ArcanistSpell, ISpell

+ (ctor) ArcaneSummon<T>( Mobile caster, Item scroll, SpellInfo info )
+ int Sound( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/ArcanistSpell.html b/Docs/types/ArcanistSpell.html new file mode 100644 index 0000000..7ebb50e --- /dev/null +++ b/Docs/types/ArcanistSpell.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - ArcanistSpell + + +

Back to Server.Spells.Spellweaving

+

ArcanistSpell : Spell, ISpell

+

Derived Types: ArcaneCircleSpell, ArcaneForm, ArcaneSummon<T>, AttuneWeaponSpell, EssenceOfWindSpell, GiftOfLifeSpell, GiftOfRenewalSpell, NatureFurySpell, ThunderstormSpell, WordOfDeathSpell

+ (static) bool CheckExpansion( Mobile from )
+ (static) ArcaneFocus FindArcaneFocus( Mobile from )
+ (static) int GetFocusLevel( Mobile from )
+ (ctor) ArcanistSpell( Mobile caster, Item scroll, SpellInfo info )
+ SkillName CastSkill( get; )
+ bool ClearHandsOnCast( get; )
+ SkillName DamageSkill( get; )
+ int FocusLevel( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual bool CheckResisted( Mobile m )
+ virtual void DoFizzle()
+ virtual void DoHurtFizzle()
+ virtual void GetCastSkills( out double min, out double max )
+ virtual int GetMana()
+ virtual void OnBeginCast()
+ virtual void OnDisturb( DisturbType type, bool message )
+ virtual void SendCastEffect()
+ + diff --git a/Docs/types/ArcanistStatueEastAddon.html b/Docs/types/ArcanistStatueEastAddon.html new file mode 100644 index 0000000..aac794e --- /dev/null +++ b/Docs/types/ArcanistStatueEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArcanistStatueEastAddon + + +

Back to Server.Items

+

ArcanistStatueEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ArcanistStatueEastAddon()
+ (ctor) ArcanistStatueEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcanistStatueEastDeed.html b/Docs/types/ArcanistStatueEastDeed.html new file mode 100644 index 0000000..2f4c7e2 --- /dev/null +++ b/Docs/types/ArcanistStatueEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArcanistStatueEastDeed + + +

Back to Server.Items

+

ArcanistStatueEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArcanistStatueEastDeed()
+ (ctor) ArcanistStatueEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcanistStatueSouthAddon.html b/Docs/types/ArcanistStatueSouthAddon.html new file mode 100644 index 0000000..ba79054 --- /dev/null +++ b/Docs/types/ArcanistStatueSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArcanistStatueSouthAddon + + +

Back to Server.Items

+

ArcanistStatueSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ArcanistStatueSouthAddon()
+ (ctor) ArcanistStatueSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcanistStatueSouthDeed.html b/Docs/types/ArcanistStatueSouthDeed.html new file mode 100644 index 0000000..c1872de --- /dev/null +++ b/Docs/types/ArcanistStatueSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArcanistStatueSouthDeed + + +

Back to Server.Items

+

ArcanistStatueSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArcanistStatueSouthDeed()
+ (ctor) ArcanistStatueSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArchCureScroll.html b/Docs/types/ArchCureScroll.html new file mode 100644 index 0000000..8dc6fab --- /dev/null +++ b/Docs/types/ArchCureScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArchCureScroll + + +

Back to Server.Items

+

ArchCureScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ArchCureScroll()
+ (ctor) ArchCureScroll( int amount )
+ (ctor) ArchCureScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArchCureSpell.html b/Docs/types/ArchCureSpell.html new file mode 100644 index 0000000..db5000c --- /dev/null +++ b/Docs/types/ArchCureSpell.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ArchCureSpell + + +

Back to Server.Spells.Fourth

+

ArchCureSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (static) bool IsAllyTo( Mobile from, Mobile to )
+ (static) bool IsInnocentTo( Mobile from, Mobile to )
+ (ctor) ArchCureSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ SpellCircle Circle( get; )
+ bool IsAggressed( Mobile m )
+ bool IsAggressor( Mobile m )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/ArchProtectionScroll.html b/Docs/types/ArchProtectionScroll.html new file mode 100644 index 0000000..0a29294 --- /dev/null +++ b/Docs/types/ArchProtectionScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArchProtectionScroll + + +

Back to Server.Items

+

ArchProtectionScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ArchProtectionScroll()
+ (ctor) ArchProtectionScroll( int amount )
+ (ctor) ArchProtectionScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArchProtectionSpell.html b/Docs/types/ArchProtectionSpell.html new file mode 100644 index 0000000..4d874c4 --- /dev/null +++ b/Docs/types/ArchProtectionSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArchProtectionSpell + + +

Back to Server.Spells.Fourth

+

ArchProtectionSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget, InternalTimer

+ (ctor) ArchProtectionSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/ArcherAI.html b/Docs/types/ArcherAI.html new file mode 100644 index 0000000..6cde1da --- /dev/null +++ b/Docs/types/ArcherAI.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ArcherAI + + +

Back to Server.Mobiles

+

ArcherAI : BaseAI

+ (ctor) ArcherAI( BaseCreature m )
+ virtual bool DoActionCombat()
+ virtual bool DoActionGuard()
+ virtual bool DoActionWander()
+ + diff --git a/Docs/types/ArcherGuard.html b/Docs/types/ArcherGuard.html new file mode 100644 index 0000000..f59ecc3 --- /dev/null +++ b/Docs/types/ArcherGuard.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ArcherGuard + + +

Back to Server.Mobiles

+

ArcherGuard : BaseGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: AttackTimer, AvengeTimer, IdleTimer

+ (ctor) ArcherGuard()
+ (ctor) ArcherGuard( Serial serial )
+ (ctor) ArcherGuard( Mobile target )
+ Mobile Focus( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcheryButte.html b/Docs/types/ArcheryButte.html new file mode 100644 index 0000000..af69522 --- /dev/null +++ b/Docs/types/ArcheryButte.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - ArcheryButte + + +

Back to Server.Items

+

ArcheryButte : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: ScoreEntry

+ (ctor) ArcheryButte()
+ (ctor) ArcheryButte( Serial serial )
+ (ctor) ArcheryButte( int itemID )
+ int Arrows( get; set; )
+ int Bolts( get; set; )
+ bool FacingEast( get; set; )
+ DateTime LastUse( get; set; )
+ double MaxSkill( get; set; )
+ double MinSkill( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void Fire( Mobile from )
+ void Gather( Mobile from )
+ ScoreEntry GetEntryFor( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcheryButteAddon.html b/Docs/types/ArcheryButteAddon.html new file mode 100644 index 0000000..b46a7d2 --- /dev/null +++ b/Docs/types/ArcheryButteAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArcheryButteAddon + + +

Back to Server.Items

+

ArcheryButteAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ArcheryButteAddon()
+ (ctor) ArcheryButteAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcheryButteDeed.html b/Docs/types/ArcheryButteDeed.html new file mode 100644 index 0000000..6d60407 --- /dev/null +++ b/Docs/types/ArcheryButteDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArcheryButteDeed + + +

Back to Server.Items

+

ArcheryButteDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArcheryButteDeed()
+ (ctor) ArcheryButteDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Architect.html b/Docs/types/Architect.html new file mode 100644 index 0000000..7052a0c --- /dev/null +++ b/Docs/types/Architect.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Architect + + +

Back to Server.Mobiles

+

Architect : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Architect()
+ (ctor) Architect( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcticDeathDealer.html b/Docs/types/ArcticDeathDealer.html new file mode 100644 index 0000000..e1ed9f9 --- /dev/null +++ b/Docs/types/ArcticDeathDealer.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ArcticDeathDealer + + +

Back to Server.Items

+

ArcticDeathDealer : WarMace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ArcticDeathDealer()
+ (ctor) ArcticDeathDealer( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArcticOgreLord.html b/Docs/types/ArcticOgreLord.html new file mode 100644 index 0000000..bf12b0a --- /dev/null +++ b/Docs/types/ArcticOgreLord.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ArcticOgreLord + + +

Back to Server.Mobiles

+

ArcticOgreLord : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ArcticOgreLord()
+ (ctor) ArcticOgreLord( Serial serial )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AreaCommandImplementor.html b/Docs/types/AreaCommandImplementor.html new file mode 100644 index 0000000..4c033a6 --- /dev/null +++ b/Docs/types/AreaCommandImplementor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AreaCommandImplementor + + +

Back to Server.Commands.Generic

+

AreaCommandImplementor : BaseCommandImplementor

+ (ctor) AreaCommandImplementor()
+ void OnTarget( Mobile from, object targeted, object state )
+ void OnTarget( Mobile from, Map map, Point3D start, Point3D end, object state )
+ virtual void Process( Mobile from, BaseCommand command, string[] args )
+ + diff --git a/Docs/types/Armoire.html b/Docs/types/Armoire.html new file mode 100644 index 0000000..dd1a302 --- /dev/null +++ b/Docs/types/Armoire.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Armoire + + +

Back to Server.Items

+

Armoire : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Armoire()
+ (ctor) Armoire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayTo( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArmorBodyType.html b/Docs/types/ArmorBodyType.html new file mode 100644 index 0000000..ea69c5d --- /dev/null +++ b/Docs/types/ArmorBodyType.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ArmorBodyType + + +

Back to Server.Items

+

ArmorBodyType (Enum)

+ Gorget = 0,
+ Gloves = 1,
+ Helmet = 2,
+ Arms = 3,
+ Legs = 4,
+ Chest = 5,
+ Shield = 6
+ + diff --git a/Docs/types/ArmorDurabilityLevel.html b/Docs/types/ArmorDurabilityLevel.html new file mode 100644 index 0000000..1537115 --- /dev/null +++ b/Docs/types/ArmorDurabilityLevel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArmorDurabilityLevel + + +

Back to Server.Items

+

ArmorDurabilityLevel (Enum)

+ Regular = 0,
+ Durable = 1,
+ Substantial = 2,
+ Massive = 3,
+ Fortified = 4,
+ Indestructible = 5
+ + diff --git a/Docs/types/ArmorIgnore.html b/Docs/types/ArmorIgnore.html new file mode 100644 index 0000000..daa5e66 --- /dev/null +++ b/Docs/types/ArmorIgnore.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ArmorIgnore + + +

Back to Server.Items

+

ArmorIgnore : WeaponAbility

+ (ctor) ArmorIgnore()
+ int BaseMana( get; )
+ double DamageScalar( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/ArmorMaterialType.html b/Docs/types/ArmorMaterialType.html new file mode 100644 index 0000000..5bc8e4b --- /dev/null +++ b/Docs/types/ArmorMaterialType.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ArmorMaterialType + + +

Back to Server.Items

+

ArmorMaterialType (Enum)

+ Cloth = 0,
+ Leather = 1,
+ Studded = 2,
+ Bone = 3,
+ Spined = 4,
+ Horned = 5,
+ Barbed = 6,
+ Ringmail = 7,
+ Chainmail = 8,
+ Plate = 9,
+ Dragon = 10
+ + diff --git a/Docs/types/ArmorMeditationAllowance.html b/Docs/types/ArmorMeditationAllowance.html new file mode 100644 index 0000000..528ea49 --- /dev/null +++ b/Docs/types/ArmorMeditationAllowance.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ArmorMeditationAllowance + + +

Back to Server.Items

+

ArmorMeditationAllowance (Enum)

+ All = 0,
+ Half = 1,
+ None = 2
+ + diff --git a/Docs/types/ArmorOfFortune.html b/Docs/types/ArmorOfFortune.html new file mode 100644 index 0000000..c6480fa --- /dev/null +++ b/Docs/types/ArmorOfFortune.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ArmorOfFortune + + +

Back to Server.Items

+

ArmorOfFortune : StuddedChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ArmorOfFortune()
+ (ctor) ArmorOfFortune( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArmorPierce.html b/Docs/types/ArmorPierce.html new file mode 100644 index 0000000..d37d83a --- /dev/null +++ b/Docs/types/ArmorPierce.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArmorPierce + + +

Back to Server.Items

+

ArmorPierce : WeaponAbility

+ (ctor) ArmorPierce()
+ int BaseMana( get; )
+ double DamageScalar( get; )
+ bool RequiresSE( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/ArmorProtectionLevel.html b/Docs/types/ArmorProtectionLevel.html new file mode 100644 index 0000000..9e49bff --- /dev/null +++ b/Docs/types/ArmorProtectionLevel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ArmorProtectionLevel + + +

Back to Server.Items

+

ArmorProtectionLevel (Enum)

+ Regular = 0,
+ Defense = 1,
+ Guarding = 2,
+ Hardening = 3,
+ Fortification = 4,
+ Invulnerability = 5
+ + diff --git a/Docs/types/ArmorQuality.html b/Docs/types/ArmorQuality.html new file mode 100644 index 0000000..5bf9d29 --- /dev/null +++ b/Docs/types/ArmorQuality.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ArmorQuality + + +

Back to Server.Items

+

ArmorQuality (Enum)

+ Low = 0,
+ Regular = 1,
+ Exceptional = 2
+ + diff --git a/Docs/types/Armorer.html b/Docs/types/Armorer.html new file mode 100644 index 0000000..560b931 --- /dev/null +++ b/Docs/types/Armorer.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Armorer + + +

Back to Server.Mobiles

+

Armorer : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Armorer()
+ (ctor) Armorer( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArmsAndWeaponsPrimer.html b/Docs/types/ArmsAndWeaponsPrimer.html new file mode 100644 index 0000000..422a916 --- /dev/null +++ b/Docs/types/ArmsAndWeaponsPrimer.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ArmsAndWeaponsPrimer + + +

Back to Server.Items

+

ArmsAndWeaponsPrimer : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) ArmsAndWeaponsPrimer()
+ (ctor) ArmsAndWeaponsPrimer( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArmsLore.html b/Docs/types/ArmsLore.html new file mode 100644 index 0000000..f4dc8ba --- /dev/null +++ b/Docs/types/ArmsLore.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ArmsLore + + +

Back to Server.SkillHandlers

+

ArmsLore

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) ArmsLore()
+ + diff --git a/Docs/types/ArmsOfTacticalExcellence.html b/Docs/types/ArmsOfTacticalExcellence.html new file mode 100644 index 0000000..ad9d8d2 --- /dev/null +++ b/Docs/types/ArmsOfTacticalExcellence.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ArmsOfTacticalExcellence + + +

Back to Server.Items

+

ArmsOfTacticalExcellence : LeatherHiroSode, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ArmsOfTacticalExcellence()
+ (ctor) ArmsOfTacticalExcellence( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Arrow.html b/Docs/types/Arrow.html new file mode 100644 index 0000000..af48c81 --- /dev/null +++ b/Docs/types/Arrow.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Arrow + + +

Back to Server.Items

+

Arrow : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Arrow()
+ (ctor) Arrow( int amount )
+ (ctor) Arrow( Serial serial )
+ double DefaultWeight( get; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArtifactLargeVase.html b/Docs/types/ArtifactLargeVase.html new file mode 100644 index 0000000..4a41d37 --- /dev/null +++ b/Docs/types/ArtifactLargeVase.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ArtifactLargeVase + + +

Back to Server.Items

+

ArtifactLargeVase : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArtifactLargeVase()
+ (ctor) ArtifactLargeVase( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArtifactVase.html b/Docs/types/ArtifactVase.html new file mode 100644 index 0000000..50495b7 --- /dev/null +++ b/Docs/types/ArtifactVase.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ArtifactVase + + +

Back to Server.Items

+

ArtifactVase : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ArtifactVase()
+ (ctor) ArtifactVase( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Artist.html b/Docs/types/Artist.html new file mode 100644 index 0000000..3dce8e6 --- /dev/null +++ b/Docs/types/Artist.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Artist + + +

Back to Server.Mobiles

+

Artist : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Artist()
+ (ctor) Artist( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ArtsGlasses.html b/Docs/types/ArtsGlasses.html new file mode 100644 index 0000000..fb4f6ac --- /dev/null +++ b/Docs/types/ArtsGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ArtsGlasses + + +

Back to Server.Items

+

ArtsGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ArtsGlasses()
+ (ctor) ArtsGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AsciiMessage.html b/Docs/types/AsciiMessage.html new file mode 100644 index 0000000..00900d3 --- /dev/null +++ b/Docs/types/AsciiMessage.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AsciiMessage + + +

Back to Server.Network

+

AsciiMessage : Packet

+ (ctor) AsciiMessage( Serial serial, int graphic, MessageType type, int hue, int font, string name, string text )
+ + diff --git a/Docs/types/AshBoard.html b/Docs/types/AshBoard.html new file mode 100644 index 0000000..e230a77 --- /dev/null +++ b/Docs/types/AshBoard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AshBoard + + +

Back to Server.Items

+

AshBoard : Board, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) AshBoard()
+ (ctor) AshBoard( int amount )
+ (ctor) AshBoard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AshLog.html b/Docs/types/AshLog.html new file mode 100644 index 0000000..e0e4bd7 --- /dev/null +++ b/Docs/types/AshLog.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AshLog + + +

Back to Server.Items

+

AshLog : Log, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IAxe

+ (ctor) AshLog()
+ (ctor) AshLog( Serial serial )
+ (ctor) AshLog( int amount )
+ virtual bool Axe( Mobile from, BaseAxe axe )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AskDestinationEntry.html b/Docs/types/AskDestinationEntry.html new file mode 100644 index 0000000..72cff93 --- /dev/null +++ b/Docs/types/AskDestinationEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AskDestinationEntry + + +

Back to Server.Mobiles

+

AskDestinationEntry : ContextMenuEntry

+ (ctor) AskDestinationEntry( BaseEscortable m, Mobile from )
+ virtual void OnClick()
+ + diff --git a/Docs/types/AssassinSpike.html b/Docs/types/AssassinSpike.html new file mode 100644 index 0000000..0c35979 --- /dev/null +++ b/Docs/types/AssassinSpike.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - AssassinSpike + + +

Back to Server.Items

+

AssassinSpike : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: FleshRipper, RuneCarvingKnife

+ (ctor) AssassinSpike()
+ (ctor) AssassinSpike( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AssemblyEmitter.html b/Docs/types/AssemblyEmitter.html new file mode 100644 index 0000000..47aa18d --- /dev/null +++ b/Docs/types/AssemblyEmitter.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - AssemblyEmitter + + +

Back to Server

+

AssemblyEmitter

+ (ctor) AssemblyEmitter( string assemblyName, bool canSave )
+ TypeBuilder DefineType( string typeName, TypeAttributes attrs, Type parentType )
+ void Save()
+ + diff --git a/Docs/types/AssistVersionReq.html b/Docs/types/AssistVersionReq.html new file mode 100644 index 0000000..61aec8a --- /dev/null +++ b/Docs/types/AssistVersionReq.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AssistVersionReq + + +

Back to Server.Network

+

AssistVersionReq : Packet

+ (ctor) AssistVersionReq( int unk )
+ + diff --git a/Docs/types/AsyncState.html b/Docs/types/AsyncState.html new file mode 100644 index 0000000..7f04bee --- /dev/null +++ b/Docs/types/AsyncState.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AsyncState + + +

Back to Server.Network

+

AsyncState (Enum)

+ Pending = 0x00000001,
+ Paused = 0x00000002
+ + diff --git a/Docs/types/AsyncWriter.html b/Docs/types/AsyncWriter.html new file mode 100644 index 0000000..61dc8d9 --- /dev/null +++ b/Docs/types/AsyncWriter.html @@ -0,0 +1,67 @@ + + + RunUO Documentation - Class Overview - AsyncWriter + + +

Back to Server

+

AsyncWriter : GenericWriter

+

Nested Types: WorkerThread

+ (static) int ThreadCount( get; )
+ (ctor) AsyncWriter( string filename, bool prefix )
+ (ctor) AsyncWriter( string filename, int buffSize, bool prefix )
+ MemoryStream MemStream( get; set; )
+ long Position( get; )
+ virtual void Close()
+ void Enqueue( MemoryStream mem )
+ void OnWrite()
+ virtual void Write( string value )
+ virtual void Write( IPAddress value )
+ virtual void Write( uint value )
+ virtual void Write( List<Item> list )
+ virtual void Write( ulong value )
+ virtual void Write( long value )
+ virtual void Write( List<BaseGuild> list )
+ virtual void Write( int value )
+ virtual void Write( TimeSpan value )
+ virtual void Write( DateTime value )
+ virtual void Write( List<Mobile> list )
+ virtual void Write( decimal value )
+ virtual void Write( sbyte value )
+ virtual void Write( byte value )
+ virtual void Write( Point3D value )
+ virtual void Write( bool value )
+ virtual void Write( double value )
+ virtual void Write( ushort value )
+ virtual void Write( char value )
+ virtual void Write( float value )
+ virtual void Write( Point2D value )
+ virtual void Write( Mobile value )
+ virtual void Write( Item value )
+ virtual void Write( short value )
+ virtual void Write( BaseGuild value )
+ virtual void Write( Rectangle3D value )
+ virtual void Write( Rectangle2D value )
+ virtual void Write( Race value )
+ virtual void Write( Map value )
+ virtual void Write( List<BaseGuild> list, bool tidy )
+ virtual void Write( List<Mobile> list, bool tidy )
+ virtual void Write( List<Item> list, bool tidy )
+ virtual void WriteDeltaTime( DateTime value )
+ virtual void WriteEncodedInt( int value )
+ virtual void WriteGuild( T value )
+ virtual void WriteGuildList( ArrayList list )
+ virtual void WriteGuildList( List<T> list )
+ virtual void WriteGuildList( ArrayList list, bool tidy )
+ virtual void WriteGuildList( List<T> list, bool tidy )
+ virtual void WriteItem( T value )
+ virtual void WriteItemList( ArrayList list )
+ virtual void WriteItemList( List<T> list )
+ virtual void WriteItemList( ArrayList list, bool tidy )
+ virtual void WriteItemList( List<T> list, bool tidy )
+ virtual void WriteMobile( T value )
+ virtual void WriteMobileList( List<T> list )
+ virtual void WriteMobileList( ArrayList list )
+ virtual void WriteMobileList( List<T> list, bool tidy )
+ virtual void WriteMobileList( ArrayList list, bool tidy )
+ + diff --git a/Docs/types/AttackMessage.html b/Docs/types/AttackMessage.html new file mode 100644 index 0000000..4669ca2 --- /dev/null +++ b/Docs/types/AttackMessage.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AttackMessage + + +

Back to Server.Misc

+

AttackMessage

+ (static) bool CheckAggressions( Mobile m1, Mobile m2 )
+ (static) void EventSink_AggressiveAction( AggressiveActionEventArgs e )
+ (static) void Initialize()
+ (ctor) AttackMessage()
+ + diff --git a/Docs/types/AttackTimer.html b/Docs/types/AttackTimer.html new file mode 100644 index 0000000..68711de --- /dev/null +++ b/Docs/types/AttackTimer.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - AttackTimer + + +

Back to Server.Mobiles

+

(ArcherGuard) - AttackTimer : Timer

+ (ctor) AttackTimer( ArcherGuard owner )
+ void DoOnTick()
+ bool InMinDistance( Mobile target )
+ virtual void OnTick()
+ bool OutOfMaxDistance( Mobile target )
+ void TeleportTo( Mobile target )
+ bool TimeToSpare()
+ + diff --git a/Docs/types/AttributeNormalizer.html b/Docs/types/AttributeNormalizer.html new file mode 100644 index 0000000..90d474d --- /dev/null +++ b/Docs/types/AttributeNormalizer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AttributeNormalizer + + +

Back to Server.Network

+

AttributeNormalizer

+ (static) bool Enabled( get; set; )
+ (static) int Maximum( get; set; )
+ (static) void Write( PacketWriter stream, int cur, int max )
+ (static) void WriteReverse( PacketWriter stream, int cur, int max )
+ + diff --git a/Docs/types/AttuneWeaponScroll.html b/Docs/types/AttuneWeaponScroll.html new file mode 100644 index 0000000..145cefb --- /dev/null +++ b/Docs/types/AttuneWeaponScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AttuneWeaponScroll + + +

Back to Server.Items

+

AttuneWeaponScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) AttuneWeaponScroll()
+ (ctor) AttuneWeaponScroll( int amount )
+ (ctor) AttuneWeaponScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AttuneWeaponSpell.html b/Docs/types/AttuneWeaponSpell.html new file mode 100644 index 0000000..4672140 --- /dev/null +++ b/Docs/types/AttuneWeaponSpell.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AttuneWeaponSpell + + +

Back to Server.Spells.Spellweaving

+

AttuneWeaponSpell : ArcanistSpell, ISpell

+

Nested Types: ExpireTimer

+ (static) bool IsAbsorbing( Mobile m )
+ (static) void StopAbsorbing( Mobile m, bool message )
+ (static) void TryAbsorb( Mobile defender, ref int damage )
+ (ctor) AttuneWeaponSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/AuthIDPersistence.html b/Docs/types/AuthIDPersistence.html new file mode 100644 index 0000000..c9500c2 --- /dev/null +++ b/Docs/types/AuthIDPersistence.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - AuthIDPersistence + + +

Back to Server.Network

+

(PacketHandlers) - AuthIDPersistence

+ (ctor) AuthIDPersistence( ClientVersion v )
+ + diff --git a/Docs/types/AutoManifestTimer.html b/Docs/types/AutoManifestTimer.html new file mode 100644 index 0000000..af9c99d --- /dev/null +++ b/Docs/types/AutoManifestTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AutoManifestTimer + + +

Back to Server

+

(Mobile) - AutoManifestTimer : Timer

+ (ctor) AutoManifestTimer( Mobile m, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/AutoRestart.html b/Docs/types/AutoRestart.html new file mode 100644 index 0000000..ab6c306 --- /dev/null +++ b/Docs/types/AutoRestart.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - AutoRestart + + +

Back to Server.Misc

+

AutoRestart : Timer

+ (static) bool Restarting( get; )
+ (static) void Initialize()
+ (static) void Restart_OnCommand( CommandEventArgs e )
+ (ctor) AutoRestart()
+ virtual void OnTick()
+ void Restart_Callback()
+ void Warning_Callback()
+ + diff --git a/Docs/types/AutoSave.html b/Docs/types/AutoSave.html new file mode 100644 index 0000000..9376fbb --- /dev/null +++ b/Docs/types/AutoSave.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - AutoSave + + +

Back to Server.Misc

+

AutoSave : Timer

+ (static) bool SavesEnabled( get; set; )
+ (static) void Backup()
+ (static) string FindTimeStamp( string input )
+ (static) string FormatDirectory( string root, string name, string timeStamp )
+ (static) string GetTimeStamp()
+ (static) void Initialize()
+ (static) DirectoryInfo Match( string[] paths, string match )
+ (static) void Save()
+ (static) void Save( bool permitBackgroundWrite )
+ (static) void SetSaves_OnCommand( CommandEventArgs e )
+ (ctor) AutoSave()
+ virtual void OnTick()
+ + diff --git a/Docs/types/AutokillTimer.html b/Docs/types/AutokillTimer.html new file mode 100644 index 0000000..3c0ddfa --- /dev/null +++ b/Docs/types/AutokillTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AutokillTimer + + +

Back to Server.Mobiles

+

(Dummy) - AutokillTimer : Timer

+ (ctor) AutokillTimer( Dummy owner )
+ virtual void OnTick()
+ + diff --git a/Docs/types/AvengeTimer.html b/Docs/types/AvengeTimer.html new file mode 100644 index 0000000..6d2a52e --- /dev/null +++ b/Docs/types/AvengeTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - AvengeTimer + + +

Back to Server.Mobiles

+

(ArcherGuard) - AvengeTimer : Timer

+ (ctor) AvengeTimer( Mobile focus )
+ virtual void OnTick()
+ + diff --git a/Docs/types/AwaseMisoSoup.html b/Docs/types/AwaseMisoSoup.html new file mode 100644 index 0000000..15ad2d8 --- /dev/null +++ b/Docs/types/AwaseMisoSoup.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - AwaseMisoSoup + + +

Back to Server.Items

+

AwaseMisoSoup : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AwaseMisoSoup()
+ (ctor) AwaseMisoSoup( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AwesomeDisturbingPortraitAddon.html b/Docs/types/AwesomeDisturbingPortraitAddon.html new file mode 100644 index 0000000..8429052 --- /dev/null +++ b/Docs/types/AwesomeDisturbingPortraitAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AwesomeDisturbingPortraitAddon + + +

Back to Server.Items

+

AwesomeDisturbingPortraitAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) AwesomeDisturbingPortraitAddon()
+ (ctor) AwesomeDisturbingPortraitAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AwesomeDisturbingPortraitComponent.html b/Docs/types/AwesomeDisturbingPortraitComponent.html new file mode 100644 index 0000000..8f40110 --- /dev/null +++ b/Docs/types/AwesomeDisturbingPortraitComponent.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - AwesomeDisturbingPortraitComponent + + +

Back to Server.Items

+

AwesomeDisturbingPortraitComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: InternalTimer

+ (ctor) AwesomeDisturbingPortraitComponent()
+ (ctor) AwesomeDisturbingPortraitComponent( Serial serial )
+ bool FacingSouth( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void UpdateImage()
+ + diff --git a/Docs/types/AwesomeDisturbingPortraitDeed.html b/Docs/types/AwesomeDisturbingPortraitDeed.html new file mode 100644 index 0000000..623ef0f --- /dev/null +++ b/Docs/types/AwesomeDisturbingPortraitDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - AwesomeDisturbingPortraitDeed + + +

Back to Server.Items

+

AwesomeDisturbingPortraitDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AwesomeDisturbingPortraitDeed()
+ (ctor) AwesomeDisturbingPortraitDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Axe.html b/Docs/types/Axe.html new file mode 100644 index 0000000..c19fd68 --- /dev/null +++ b/Docs/types/Axe.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Axe + + +

Back to Server.Items

+

Axe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Axe()
+ (ctor) Axe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AxeOfTheHeavens.html b/Docs/types/AxeOfTheHeavens.html new file mode 100644 index 0000000..e077e8b --- /dev/null +++ b/Docs/types/AxeOfTheHeavens.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - AxeOfTheHeavens + + +

Back to Server.Items

+

AxeOfTheHeavens : DoubleAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) AxeOfTheHeavens()
+ (ctor) AxeOfTheHeavens( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Axle.html b/Docs/types/Axle.html new file mode 100644 index 0000000..4dd937e --- /dev/null +++ b/Docs/types/Axle.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Axle + + +

Back to Server.Items

+

Axle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Axle()
+ (ctor) Axle( int amount )
+ (ctor) Axle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/AxleGears.html b/Docs/types/AxleGears.html new file mode 100644 index 0000000..7fa0dc8 --- /dev/null +++ b/Docs/types/AxleGears.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - AxleGears + + +

Back to Server.Items

+

AxleGears : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) AxleGears()
+ (ctor) AxleGears( int amount )
+ (ctor) AxleGears( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BBDisplayBoard.html b/Docs/types/BBDisplayBoard.html new file mode 100644 index 0000000..9e0bf8a --- /dev/null +++ b/Docs/types/BBDisplayBoard.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BBDisplayBoard + + +

Back to Server.Items

+

BBDisplayBoard : Packet

+ (ctor) BBDisplayBoard( BaseBulletinBoard board )
+ + diff --git a/Docs/types/BBMessageContent.html b/Docs/types/BBMessageContent.html new file mode 100644 index 0000000..7e0501a --- /dev/null +++ b/Docs/types/BBMessageContent.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BBMessageContent + + +

Back to Server.Items

+

BBMessageContent : Packet

+ (ctor) BBMessageContent( BaseBulletinBoard board, BulletinMessage msg )
+ string SafeString( string v )
+ void WriteString( string v )
+ + diff --git a/Docs/types/BBMessageHeader.html b/Docs/types/BBMessageHeader.html new file mode 100644 index 0000000..b023d2e --- /dev/null +++ b/Docs/types/BBMessageHeader.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BBMessageHeader + + +

Back to Server.Items

+

BBMessageHeader : Packet

+ (ctor) BBMessageHeader( BaseBulletinBoard board, BulletinMessage msg )
+ string SafeString( string v )
+ void WriteString( string v )
+ + diff --git a/Docs/types/BGTClassifier.html b/Docs/types/BGTClassifier.html new file mode 100644 index 0000000..c89c348 --- /dev/null +++ b/Docs/types/BGTClassifier.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BGTClassifier + + +

Back to Server.Engines.BulkOrders

+

BGTClassifier

+ (static) BulkGenericType Classify( BODType deedType, Type itemType )
+ (ctor) BGTClassifier()
+ + diff --git a/Docs/types/BOBFilter.html b/Docs/types/BOBFilter.html new file mode 100644 index 0000000..9c138bc --- /dev/null +++ b/Docs/types/BOBFilter.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BOBFilter + + +

Back to Server.Engines.BulkOrders

+

BOBFilter

+ (ctor) BOBFilter()
+ (ctor) BOBFilter( GenericReader reader )
+ bool IsDefault( get; )
+ int Material( get; set; )
+ int Quality( get; set; )
+ int Quantity( get; set; )
+ int Type( get; set; )
+ void Clear()
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BOBFilterGump.html b/Docs/types/BOBFilterGump.html new file mode 100644 index 0000000..65a110c --- /dev/null +++ b/Docs/types/BOBFilterGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BOBFilterGump + + +

Back to Server.Engines.BulkOrders

+

BOBFilterGump : Gump

+ (ctor) BOBFilterGump( PlayerMobile from, BulkOrderBook book )
+ void AddFilterList( int x, int y, int[] xOffsets, int yOffset, int[,] filters, int[] xWidths, int filterValue, int filterIndex )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/BOBGump.html b/Docs/types/BOBGump.html new file mode 100644 index 0000000..5ea7ec3 --- /dev/null +++ b/Docs/types/BOBGump.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BOBGump + + +

Back to Server.Engines.BulkOrders

+

BOBGump : Gump

+

Nested Types: SetPricePrompt

+ (ctor) BOBGump( PlayerMobile from, BulkOrderBook book )
+ (ctor) BOBGump( PlayerMobile from, BulkOrderBook book, int page, ArrayList list )
+ bool CheckFilter( object obj )
+ bool CheckFilter( BulkMaterialType mat, int amountMax, bool isLarge, bool reqExc, BODType deedType, Type itemType )
+ int GetCountForIndex( int index )
+ int GetIndexForPage( int page )
+ object GetMaterialName( BulkMaterialType mat, BODType type, Type itemType )
+ int GetPageForIndex( int index, int sizeDropped )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ Item Reconstruct( object obj )
+ + diff --git a/Docs/types/BOBLargeEntry.html b/Docs/types/BOBLargeEntry.html new file mode 100644 index 0000000..df48b46 --- /dev/null +++ b/Docs/types/BOBLargeEntry.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BOBLargeEntry + + +

Back to Server.Engines.BulkOrders

+

BOBLargeEntry

+ (ctor) BOBLargeEntry( LargeBOD bod )
+ (ctor) BOBLargeEntry( GenericReader reader )
+ int AmountMax( get; )
+ BODType DeedType( get; )
+ BOBLargeSubEntry[] Entries( get; )
+ BulkMaterialType Material( get; )
+ int Price( get; set; )
+ bool RequireExceptional( get; )
+ Item Reconstruct()
+ LargeBulkEntry[] ReconstructEntries()
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BOBLargeSubEntry.html b/Docs/types/BOBLargeSubEntry.html new file mode 100644 index 0000000..387da8e --- /dev/null +++ b/Docs/types/BOBLargeSubEntry.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BOBLargeSubEntry + + +

Back to Server.Engines.BulkOrders

+

BOBLargeSubEntry

+ (ctor) BOBLargeSubEntry( LargeBulkEntry lbe )
+ (ctor) BOBLargeSubEntry( GenericReader reader )
+ int AmountCur( get; )
+ int Graphic( get; )
+ Type ItemType( get; )
+ int Number( get; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BOBSmallEntry.html b/Docs/types/BOBSmallEntry.html new file mode 100644 index 0000000..072c1d5 --- /dev/null +++ b/Docs/types/BOBSmallEntry.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - BOBSmallEntry + + +

Back to Server.Engines.BulkOrders

+

BOBSmallEntry

+ (ctor) BOBSmallEntry( SmallBOD bod )
+ (ctor) BOBSmallEntry( GenericReader reader )
+ int AmountCur( get; )
+ int AmountMax( get; )
+ BODType DeedType( get; )
+ int Graphic( get; )
+ Type ItemType( get; )
+ BulkMaterialType Material( get; )
+ int Number( get; )
+ int Price( get; set; )
+ bool RequireExceptional( get; )
+ Item Reconstruct()
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BODBuyGump.html b/Docs/types/BODBuyGump.html new file mode 100644 index 0000000..51a9bfe --- /dev/null +++ b/Docs/types/BODBuyGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BODBuyGump + + +

Back to Server.Engines.BulkOrders

+

BODBuyGump : Gump

+ (ctor) BODBuyGump( PlayerMobile from, BulkOrderBook book, object obj, int page, int price )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/BODType.html b/Docs/types/BODType.html new file mode 100644 index 0000000..c367980 --- /dev/null +++ b/Docs/types/BODType.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BODType + + +

Back to Server.Engines.BulkOrders

+

BODType (Enum)

+ Smith = 0,
+ Tailor = 1
+ + diff --git a/Docs/types/Backgammon.html b/Docs/types/Backgammon.html new file mode 100644 index 0000000..c75a195 --- /dev/null +++ b/Docs/types/Backgammon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Backgammon + + +

Back to Server.Items

+

Backgammon : BaseBoard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) Backgammon()
+ (ctor) Backgammon( Serial serial )
+ virtual void CreatePieces()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Backpack.html b/Docs/types/Backpack.html new file mode 100644 index 0000000..ef75bd9 --- /dev/null +++ b/Docs/types/Backpack.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Backpack + + +

Back to Server.Items

+

Backpack : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Derived Types: CreatureBackpack, StrongBackpack, VendorBackpack

+ (ctor) Backpack()
+ (ctor) Backpack( Serial serial )
+ int DefaultMaxWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BackpackArtifact.html b/Docs/types/BackpackArtifact.html new file mode 100644 index 0000000..b80941e --- /dev/null +++ b/Docs/types/BackpackArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BackpackArtifact + + +

Back to Server.Items

+

BackpackArtifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BackpackArtifact()
+ (ctor) BackpackArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Backstab.html b/Docs/types/Backstab.html new file mode 100644 index 0000000..e111a34 --- /dev/null +++ b/Docs/types/Backstab.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Backstab + + +

Back to Server.Spells.Ninjitsu

+

Backstab : NinjaMove

+

Nested Types: (Anonymous-Type)--c__DisplayClass2

+ (ctor) Backstab()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ double RequiredSkill( get; )
+ bool ValidatesDuringHit( get; )
+ virtual double GetDamageScalar( Mobile attacker, Mobile defender )
+ virtual bool OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual void OnMiss( Mobile attacker, Mobile defender )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/Bacon.html b/Docs/types/Bacon.html new file mode 100644 index 0000000..2c35487 --- /dev/null +++ b/Docs/types/Bacon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Bacon + + +

Back to Server.Items

+

Bacon : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Bacon()
+ (ctor) Bacon( int amount )
+ (ctor) Bacon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BadCard.html b/Docs/types/BadCard.html new file mode 100644 index 0000000..c9f8c1f --- /dev/null +++ b/Docs/types/BadCard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BadCard + + +

Back to Server.Items

+

BadCard : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BadCard()
+ (ctor) BadCard( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BadStartMessage.html b/Docs/types/BadStartMessage.html new file mode 100644 index 0000000..02b0abf --- /dev/null +++ b/Docs/types/BadStartMessage.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BadStartMessage + + +

Back to Server.Misc

+

(CharacterCreation) - BadStartMessage : Timer

+ (ctor) BadStartMessage( Mobile m, int message )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Bag.html b/Docs/types/Bag.html new file mode 100644 index 0000000..462ebe5 --- /dev/null +++ b/Docs/types/Bag.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Bag + + +

Back to Server.Items

+

Bag : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Derived Types: AlchemyBag, BagOfAllReagents, BagOfingots, BagOfNecroReagents, BagOfReagents, SalvageBag, ScribeBag, SmithBag, TailorBag

+ (ctor) Bag()
+ (ctor) Bag( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BagOfAllReagents.html b/Docs/types/BagOfAllReagents.html new file mode 100644 index 0000000..6c9c819 --- /dev/null +++ b/Docs/types/BagOfAllReagents.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BagOfAllReagents + + +

Back to Server.Items

+

BagOfAllReagents : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) BagOfAllReagents()
+ (ctor) BagOfAllReagents( int amount )
+ (ctor) BagOfAllReagents( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BagOfNecroReagents.html b/Docs/types/BagOfNecroReagents.html new file mode 100644 index 0000000..1079d76 --- /dev/null +++ b/Docs/types/BagOfNecroReagents.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BagOfNecroReagents + + +

Back to Server.Items

+

BagOfNecroReagents : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) BagOfNecroReagents()
+ (ctor) BagOfNecroReagents( int amount )
+ (ctor) BagOfNecroReagents( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BagOfReagents.html b/Docs/types/BagOfReagents.html new file mode 100644 index 0000000..dd646e9 --- /dev/null +++ b/Docs/types/BagOfReagents.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BagOfReagents + + +

Back to Server.Items

+

BagOfReagents : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) BagOfReagents()
+ (ctor) BagOfReagents( int amount )
+ (ctor) BagOfReagents( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BagOfSending.html b/Docs/types/BagOfSending.html new file mode 100644 index 0000000..db6f125 --- /dev/null +++ b/Docs/types/BagOfSending.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - BagOfSending + + +

Back to Server.Items

+

BagOfSending : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, TranslocationItem

+

Nested Types: SendTarget, UseBagEntry

+ (static) BagOfSendingHue RandomHue()
+ (ctor) BagOfSending()
+ (ctor) BagOfSending( BagOfSendingHue hue )
+ (ctor) BagOfSending( Serial serial )
+ BagOfSendingHue BagOfSendingHue( get; set; )
+ int Charges( get; set; )
+ int LabelNumber( get; )
+ int MaxCharges( get; )
+ int MaxRecharges( get; )
+ int Recharges( get; set; )
+ string TranslocationItemName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BagOfSendingHue.html b/Docs/types/BagOfSendingHue.html new file mode 100644 index 0000000..54785c8 --- /dev/null +++ b/Docs/types/BagOfSendingHue.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BagOfSendingHue + + +

Back to Server.Items

+

BagOfSendingHue (Enum)

+ Yellow = 0,
+ Blue = 1,
+ Red = 2
+ + diff --git a/Docs/types/BagOfingots.html b/Docs/types/BagOfingots.html new file mode 100644 index 0000000..5c98ebc --- /dev/null +++ b/Docs/types/BagOfingots.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BagOfingots + + +

Back to Server.Items

+

BagOfingots : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) BagOfingots()
+ (ctor) BagOfingots( int amount )
+ (ctor) BagOfingots( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BakeKitsune.html b/Docs/types/BakeKitsune.html new file mode 100644 index 0000000..e1194d9 --- /dev/null +++ b/Docs/types/BakeKitsune.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - BakeKitsune + + +

Back to Server.Mobiles

+

BakeKitsune : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: ExpireTimer

+ (ctor) BakeKitsune()
+ (ctor) BakeKitsune( Serial serial )
+ bool ClickTitle( get; )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ bool PropertyTitle( get; )
+ bool ShowFameTitle( get; )
+ void DeleteItemOnLayer( Layer layer )
+ virtual void Deserialize( GenericReader reader )
+ void Disguise()
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void OnCombatantChange()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ void RemoveDisguise()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Baker.html b/Docs/types/Baker.html new file mode 100644 index 0000000..d32911b --- /dev/null +++ b/Docs/types/Baker.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Baker + + +

Back to Server.Mobiles

+

Baker : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Baker()
+ (ctor) Baker( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BallCallback.html b/Docs/types/BallCallback.html new file mode 100644 index 0000000..655e230 --- /dev/null +++ b/Docs/types/BallCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BallCallback + + +

Back to Server.Items

+

(BallOfSummoning) - BallCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) BallCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from )
+ + diff --git a/Docs/types/BallEntry.html b/Docs/types/BallEntry.html new file mode 100644 index 0000000..fd7de29 --- /dev/null +++ b/Docs/types/BallEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BallEntry + + +

Back to Server.Items

+

(BallOfSummoning) - BallEntry : ContextMenuEntry

+ (ctor) BallEntry( BallCallback callback, int number )
+ virtual void OnClick()
+ + diff --git a/Docs/types/BallOfSummoning.html b/Docs/types/BallOfSummoning.html new file mode 100644 index 0000000..4f01b78 --- /dev/null +++ b/Docs/types/BallOfSummoning.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - BallOfSummoning + + +

Back to Server.Items

+

BallOfSummoning : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, TranslocationItem

+

Nested Types: BallCallback, BallEntry, PetLinkTarget, PetSummoningSpell

+ (ctor) BallOfSummoning()
+ (ctor) BallOfSummoning( Serial serial )
+ int Charges( get; set; )
+ int MaxCharges( get; )
+ int MaxRecharges( get; )
+ BaseCreature Pet( get; set; )
+ string PetName( get; )
+ int Recharges( get; set; )
+ string TranslocationItemName( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ void CastSummonPet( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ void InternalUpdatePetName()
+ void LinkPet( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void SummonPet( Mobile from )
+ void UnlinkPet( Mobile from )
+ void UpdatePetName( Mobile from )
+ + diff --git a/Docs/types/BallotBox.html b/Docs/types/BallotBox.html new file mode 100644 index 0000000..9c701cb --- /dev/null +++ b/Docs/types/BallotBox.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - BallotBox + + +

Back to Server.Items

+

BallotBox : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: InternalGump, TopicPrompt

+ (ctor) BallotBox()
+ (ctor) BallotBox( Serial serial )
+ int LabelNumber( get; )
+ List<Mobile> No( get; )
+ string[] Topic( get; )
+ List<Mobile> Yes( get; )
+ void AddLineToTopic( string line )
+ void ClearTopic()
+ void ClearVotes()
+ virtual void Deserialize( GenericReader reader )
+ bool HasVoted( Mobile from )
+ bool IsOwner( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BallotBoxAddon.html b/Docs/types/BallotBoxAddon.html new file mode 100644 index 0000000..83cfd53 --- /dev/null +++ b/Docs/types/BallotBoxAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BallotBoxAddon + + +

Back to Server.Items

+

BallotBoxAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BallotBoxAddon()
+ (ctor) BallotBoxAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BallotBoxDeed.html b/Docs/types/BallotBoxDeed.html new file mode 100644 index 0000000..5b5ca24 --- /dev/null +++ b/Docs/types/BallotBoxDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BallotBoxDeed + + +

Back to Server.Items

+

BallotBoxDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BallotBoxDeed()
+ (ctor) BallotBoxDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Balron.html b/Docs/types/Balron.html new file mode 100644 index 0000000..928cc9c --- /dev/null +++ b/Docs/types/Balron.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Balron + + +

Back to Server.Mobiles

+

Balron : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Balron()
+ (ctor) Balron( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BambooChair.html b/Docs/types/BambooChair.html new file mode 100644 index 0000000..fcbfc98 --- /dev/null +++ b/Docs/types/BambooChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BambooChair + + +

Back to Server.Items

+

BambooChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BambooChair()
+ (ctor) BambooChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BambooFlute.html b/Docs/types/BambooFlute.html new file mode 100644 index 0000000..fa8085b --- /dev/null +++ b/Docs/types/BambooFlute.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BambooFlute + + +

Back to Server.Items

+

BambooFlute : BaseInstrument, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+

Derived Types: FluteOfRenewal

+ (ctor) BambooFlute()
+ (ctor) BambooFlute( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BambooScreen.html b/Docs/types/BambooScreen.html new file mode 100644 index 0000000..2020c73 --- /dev/null +++ b/Docs/types/BambooScreen.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BambooScreen + + +

Back to Server.Items

+

BambooScreen : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BambooScreen()
+ (ctor) BambooScreen( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BanDurationGump.html b/Docs/types/BanDurationGump.html new file mode 100644 index 0000000..833a555 --- /dev/null +++ b/Docs/types/BanDurationGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BanDurationGump + + +

Back to Server.Gumps

+

BanDurationGump : Gump

+ (static) ArrayList MakeList( object obj )
+ (ctor) BanDurationGump( Account a )
+ (ctor) BanDurationGump( ArrayList list )
+ void AddButtonLabeled( int x, int y, int buttonID, string text )
+ void AddInput( int bid, int idx, string name )
+ void AddTextField( int x, int y, int width, int height, int index )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/Banana.html b/Docs/types/Banana.html new file mode 100644 index 0000000..a8ac343 --- /dev/null +++ b/Docs/types/Banana.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Banana + + +

Back to Server.Items

+

Banana : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Banana()
+ (ctor) Banana( int amount )
+ (ctor) Banana( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bananas.html b/Docs/types/Bananas.html new file mode 100644 index 0000000..6d9045c --- /dev/null +++ b/Docs/types/Bananas.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Bananas + + +

Back to Server.Items

+

Bananas : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Bananas()
+ (ctor) Bananas( int amount )
+ (ctor) Bananas( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bandage.html b/Docs/types/Bandage.html new file mode 100644 index 0000000..1ce98f1 --- /dev/null +++ b/Docs/types/Bandage.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Bandage + + +

Back to Server.Items

+

Bandage : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Derived Types: EnhancedBandage

+

Nested Types: InternalTarget

+ (ctor) Bandage()
+ (ctor) Bandage( Serial serial )
+ (ctor) Bandage( int amount )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BandageContext.html b/Docs/types/BandageContext.html new file mode 100644 index 0000000..9adf61f --- /dev/null +++ b/Docs/types/BandageContext.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - BandageContext + + +

Back to Server.Items

+

BandageContext

+

Nested Types: InternalTimer

+ (static) BandageContext BeginHeal( Mobile healer, Mobile patient )
+ (static) BandageContext GetContext( Mobile healer )
+ (static) SkillName GetPrimarySkill( Mobile m )
+ (static) SkillName GetSecondarySkill( Mobile m )
+ (ctor) BandageContext( Mobile healer, Mobile patient, TimeSpan delay )
+ Mobile Healer( get; )
+ Mobile Patient( get; )
+ int Slips( get; set; )
+ Timer Timer( get; )
+ void EndHeal()
+ void Slip()
+ void StopHeal()
+ + diff --git a/Docs/types/Bandana.html b/Docs/types/Bandana.html new file mode 100644 index 0000000..f342daa --- /dev/null +++ b/Docs/types/Bandana.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Bandana + + +

Back to Server.Items

+

Bandana : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: BurglarsBandana, CrownOfTalKeesh

+ (ctor) Bandana()
+ (ctor) Bandana( Serial serial )
+ (ctor) Bandana( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BankBox.html b/Docs/types/BankBox.html new file mode 100644 index 0000000..ff143f8 --- /dev/null +++ b/Docs/types/BankBox.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BankBox + + +

Back to Server.Items

+

BankBox : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) bool SendDeleteOnClose( get; set; )
+ (ctor) BankBox( Serial serial )
+ (ctor) BankBox( Mobile owner )
+ int DefaultMaxWeight( get; )
+ bool IsVirtualItem( get; )
+ bool Opened( get; )
+ Mobile Owner( get; )
+ void Close()
+ virtual void Deserialize( GenericReader reader )
+ virtual bool IsAccessibleTo( Mobile check )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual DeathMoveResult OnParentDeath( Mobile parent )
+ virtual void OnSingleClick( Mobile from )
+ void Open()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BankCheck.html b/Docs/types/BankCheck.html new file mode 100644 index 0000000..9b0f76f --- /dev/null +++ b/Docs/types/BankCheck.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BankCheck + + +

Back to Server.Items

+

BankCheck : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BankCheck( int worth )
+ (ctor) BankCheck( Serial serial )
+ bool DisplayLootType( get; )
+ int LabelNumber( get; )
+ int Worth( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BankTarget.html b/Docs/types/BankTarget.html new file mode 100644 index 0000000..62f44f7 --- /dev/null +++ b/Docs/types/BankTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BankTarget + + +

Back to Server.Commands

+

(CommandHandlers) - BankTarget : Target

+ (ctor) BankTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/Banker.html b/Docs/types/Banker.html new file mode 100644 index 0000000..62cdc4b --- /dev/null +++ b/Docs/types/Banker.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Banker + + +

Back to Server.Mobiles

+

Banker : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: GypsyBanker, Minter

+ (static) void Deposit( Container cont, int amount )
+ (static) bool Deposit( Mobile from, int amount )
+ (static) int DepositUpTo( Mobile from, int amount )
+ (static) int GetBalance( Mobile from )
+ (static) int GetBalance( Mobile from, out Item[] gold, out Item[] checks )
+ (static) bool Withdraw( Mobile from, int amount )
+ (ctor) Banker()
+ (ctor) Banker( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void InitSBInfo()
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BankerCamp.html b/Docs/types/BankerCamp.html new file mode 100644 index 0000000..49a798d --- /dev/null +++ b/Docs/types/BankerCamp.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BankerCamp + + +

Back to Server.Multis

+

BankerCamp : BaseCamp, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BankerCamp()
+ (ctor) BankerCamp( Serial serial )
+ virtual void AddComponents()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BankerConversation.html b/Docs/types/BankerConversation.html new file mode 100644 index 0000000..527c667 --- /dev/null +++ b/Docs/types/BankerConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BankerConversation + + +

Back to Server.Engines.Quests.Necro

+

BankerConversation : QuestConversation

+ (ctor) BankerConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/Banner.html b/Docs/types/Banner.html new file mode 100644 index 0000000..efcc7e2 --- /dev/null +++ b/Docs/types/Banner.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Banner + + +

Back to Server.Items

+

Banner : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IAddon, IDyable, IRewardItem

+ (ctor) Banner( int itemID )
+ (ctor) Banner( Serial serial )
+ Item Deed( get; )
+ bool FacingSouth( get; )
+ bool ForceShowProperties( get; )
+ bool IsRewardItem( get; set; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BannerDeed.html b/Docs/types/BannerDeed.html new file mode 100644 index 0000000..766b857 --- /dev/null +++ b/Docs/types/BannerDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BannerDeed + + +

Back to Server.Items

+

BannerDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: InternalGump, InternalTarget

+ (ctor) BannerDeed()
+ (ctor) BannerDeed( Serial serial )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarGraph.html b/Docs/types/BarGraph.html new file mode 100644 index 0000000..df2a980 --- /dev/null +++ b/Docs/types/BarGraph.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BarGraph + + +

Back to Server.Engines.Reports

+

BarGraph : Chart

+ (static) PersistableObject Construct()
+ (static) BarGraph DailyAverage( SnapshotHistory history, string reportName, string valueName )
+ (static) BarGraph Growth( SnapshotHistory history, string reportName, string valueName )
+ (static) int LookupReportValue( Snapshot ss, string reportName, string valueName )
+ (static) BarGraph OverTime( SnapshotHistory history, string reportName, string valueName, int step, int max, int ival )
+ (ctor) BarGraph()
+ (ctor) BarGraph( string name, string fileName, int ticks, string xTitle, string yTitle, BarGraphRenderMode rm )
+ int FontSize( get; set; )
+ int Interval( get; set; )
+ BarRegion[] Regions( get; set; )
+ BarGraphRenderMode RenderMode( get; set; )
+ int Ticks( get; set; )
+ PersistableType TypeID( get; )
+ string xTitle( get; set; )
+ string yTitle( get; set; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ + diff --git a/Docs/types/BarGraphRenderMode.html b/Docs/types/BarGraphRenderMode.html new file mode 100644 index 0000000..030a39d --- /dev/null +++ b/Docs/types/BarGraphRenderMode.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BarGraphRenderMode + + +

Back to Server.Engines.Reports

+

BarGraphRenderMode (Enum)

+ Bars = 0,
+ Lines = 1
+ + diff --git a/Docs/types/BarGraphRenderer.html b/Docs/types/BarGraphRenderer.html new file mode 100644 index 0000000..606f6fb --- /dev/null +++ b/Docs/types/BarGraphRenderer.html @@ -0,0 +1,41 @@ + + + RunUO Documentation - Class Overview - BarGraphRenderer + + +

Back to Server.Engines.Reports

+

BarGraphRenderer : ChartRenderer

+ (ctor) BarGraphRenderer()
+ (ctor) BarGraphRenderer( Color bgColor )
+ Color BackgroundColor( set; )
+ int BottomBuffer( set; )
+ Color FontColor( set; )
+ string FontFamily( get; set; )
+ int Height( get; set; )
+ BarGraphRenderMode RenderMode( get; set; )
+ bool ShowData( get; set; )
+ bool ShowLegend( get; set; )
+ int TopBuffer( set; )
+ string VerticalLabel( get; set; )
+ int VerticalTickCount( get; set; )
+ int Width( get; set; )
+ void AssignDefaultSettings()
+ void CalculateBarWidth( int dataCount, float barGraphWidth )
+ void CalculateGraphDimension()
+ float CalculateImgFontWidth( string text, float size, string family )
+ void CalculateSweepValues()
+ void CalculateTickAndMax()
+ void CollectDataPoints( string[] values )
+ void CollectDataPoints( string[] labels, string[] values )
+ virtual Bitmap Draw()
+ void DrawBars( Graphics graph )
+ void DrawLegend( Graphics graph )
+ void DrawRegions( Graphics gfx )
+ void DrawVerticalLabelArea( Graphics graph )
+ void DrawXLabelArea( Graphics graph )
+ void DrawXLabelBack( Graphics graph )
+ void FindLongestTickValue()
+ string MakeShortLabel( string text )
+ void SetTitles( string xTitle, string yTitle )
+ + diff --git a/Docs/types/BarRegion.html b/Docs/types/BarRegion.html new file mode 100644 index 0000000..85b4192 --- /dev/null +++ b/Docs/types/BarRegion.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BarRegion + + +

Back to Server.Engines.Reports

+

BarRegion

+ (ctor) BarRegion( int rangeFrom, int rangeTo, string name )
+ + diff --git a/Docs/types/BarbedHides.html b/Docs/types/BarbedHides.html new file mode 100644 index 0000000..5bd317b --- /dev/null +++ b/Docs/types/BarbedHides.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BarbedHides + + +

Back to Server.Items

+

BarbedHides : BaseHides, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IScissorable

+ (ctor) BarbedHides()
+ (ctor) BarbedHides( int amount )
+ (ctor) BarbedHides( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarbedLeather.html b/Docs/types/BarbedLeather.html new file mode 100644 index 0000000..9f63514 --- /dev/null +++ b/Docs/types/BarbedLeather.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BarbedLeather + + +

Back to Server.Items

+

BarbedLeather : BaseLeather, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BarbedLeather()
+ (ctor) BarbedLeather( int amount )
+ (ctor) BarbedLeather( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bard.html b/Docs/types/Bard.html new file mode 100644 index 0000000..8b95b68 --- /dev/null +++ b/Docs/types/Bard.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Bard + + +

Back to Server.Mobiles

+

Bard : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Bard()
+ (ctor) Bard( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BardGuildmaster.html b/Docs/types/BardGuildmaster.html new file mode 100644 index 0000000..acf64c1 --- /dev/null +++ b/Docs/types/BardGuildmaster.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BardGuildmaster + + +

Back to Server.Mobiles

+

BardGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) BardGuildmaster()
+ (ctor) BardGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bardiche.html b/Docs/types/Bardiche.html new file mode 100644 index 0000000..8798f52 --- /dev/null +++ b/Docs/types/Bardiche.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Bardiche + + +

Back to Server.Items

+

Bardiche : BasePoleArm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+

Derived Types: LegacyOfTheDreadLord, Quell

+ (ctor) Bardiche()
+ (ctor) Bardiche( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarkFragment.html b/Docs/types/BarkFragment.html new file mode 100644 index 0000000..620902c --- /dev/null +++ b/Docs/types/BarkFragment.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BarkFragment + + +

Back to Server.Items

+

BarkFragment : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BarkFragment()
+ (ctor) BarkFragment( int amount )
+ (ctor) BarkFragment( Serial serial )
+ (ctor) BarkFragment( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarkeepContract.html b/Docs/types/BarkeepContract.html new file mode 100644 index 0000000..b92272b --- /dev/null +++ b/Docs/types/BarkeepContract.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BarkeepContract + + +

Back to Server.Items

+

BarkeepContract : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BarkeepContract()
+ (ctor) BarkeepContract( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Barkeeper.html b/Docs/types/Barkeeper.html new file mode 100644 index 0000000..52d90fb --- /dev/null +++ b/Docs/types/Barkeeper.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Barkeeper + + +

Back to Server.Mobiles

+

Barkeeper : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Barkeeper()
+ (ctor) Barkeeper( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarkeeperGump.html b/Docs/types/BarkeeperGump.html new file mode 100644 index 0000000..e7b616c --- /dev/null +++ b/Docs/types/BarkeeperGump.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BarkeeperGump + + +

Back to Server.Mobiles

+

BarkeeperGump : Gump

+ (ctor) BarkeeperGump( Mobile from, PlayerBarkeeper barkeeper )
+ int GetButtonID( int type, int index )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ void RenderAppearanceCategories()
+ void RenderBackground()
+ void RenderCategories()
+ void RenderDismissConfirmation()
+ void RenderMessageManagement()
+ void RenderMessageManagement_Message_AddOrChange()
+ void RenderMessageManagement_Message_Remove()
+ void RenderMessageManagement_Tip_AddOrChange()
+ void RenderMessageManagement_Tip_Remove()
+ + diff --git a/Docs/types/BarkeeperRumor.html b/Docs/types/BarkeeperRumor.html new file mode 100644 index 0000000..e21f979 --- /dev/null +++ b/Docs/types/BarkeeperRumor.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BarkeeperRumor + + +

Back to Server.Mobiles

+

BarkeeperRumor

+ (static) BarkeeperRumor Deserialize( GenericReader reader )
+ (static) void Serialize( GenericWriter writer, BarkeeperRumor rumor )
+ (ctor) BarkeeperRumor( string message, string keyword )
+ string Keyword( get; set; )
+ string Message( get; set; )
+ + diff --git a/Docs/types/BarkeeperTitleGump.html b/Docs/types/BarkeeperTitleGump.html new file mode 100644 index 0000000..49bc001 --- /dev/null +++ b/Docs/types/BarkeeperTitleGump.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BarkeeperTitleGump + + +

Back to Server.Mobiles

+

BarkeeperTitleGump : Gump

+

Nested Types: Entry

+ (ctor) BarkeeperTitleGump( Mobile from, PlayerBarkeeper barkeeper )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void RenderBackground()
+ void RenderPage( Entry[] entries, int page )
+ + diff --git a/Docs/types/Barracoon.html b/Docs/types/Barracoon.html new file mode 100644 index 0000000..9ab4391 --- /dev/null +++ b/Docs/types/Barracoon.html @@ -0,0 +1,34 @@ + + + RunUO Documentation - Class Overview - Barracoon + + +

Back to Server.Mobiles

+

Barracoon : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: ExpirePolymorphTimer

+ (ctor) Barracoon()
+ (ctor) Barracoon( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool AutoDispel( get; )
+ double AutoDispelChance( get; )
+ bool BardImmune( get; )
+ bool ClickTitle( get; )
+ Type[] DecorativeList( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ bool ShowFameTitle( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ bool Uncalmable( get; )
+ Type[] UniqueList( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoSpecialAbility( Mobile target )
+ virtual void GenerateLoot()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ void Polymorph( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ void SpawnRatmen( Mobile target )
+ + diff --git a/Docs/types/BarredMetalDoor.html b/Docs/types/BarredMetalDoor.html new file mode 100644 index 0000000..a04ce3d --- /dev/null +++ b/Docs/types/BarredMetalDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BarredMetalDoor + + +

Back to Server.Items

+

BarredMetalDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) BarredMetalDoor( DoorFacing facing )
+ (ctor) BarredMetalDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarredMetalDoor2.html b/Docs/types/BarredMetalDoor2.html new file mode 100644 index 0000000..50b21b1 --- /dev/null +++ b/Docs/types/BarredMetalDoor2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BarredMetalDoor2 + + +

Back to Server.Items

+

BarredMetalDoor2 : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) BarredMetalDoor2( DoorFacing facing )
+ (ctor) BarredMetalDoor2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Barrel.html b/Docs/types/Barrel.html new file mode 100644 index 0000000..4f1dc8d --- /dev/null +++ b/Docs/types/Barrel.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Barrel + + +

Back to Server.Items

+

Barrel : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Barrel()
+ (ctor) Barrel( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarrelHoops.html b/Docs/types/BarrelHoops.html new file mode 100644 index 0000000..f7e772f --- /dev/null +++ b/Docs/types/BarrelHoops.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BarrelHoops + + +

Back to Server.Items

+

BarrelHoops : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BarrelHoops()
+ (ctor) BarrelHoops( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarrelLid.html b/Docs/types/BarrelLid.html new file mode 100644 index 0000000..4dee32e --- /dev/null +++ b/Docs/types/BarrelLid.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BarrelLid + + +

Back to Server.Items

+

BarrelLid : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BarrelLid()
+ (ctor) BarrelLid( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarrelStaves.html b/Docs/types/BarrelStaves.html new file mode 100644 index 0000000..c548a19 --- /dev/null +++ b/Docs/types/BarrelStaves.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BarrelStaves + + +

Back to Server.Items

+

BarrelStaves : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BarrelStaves()
+ (ctor) BarrelStaves( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BarrelTap.html b/Docs/types/BarrelTap.html new file mode 100644 index 0000000..0fbde84 --- /dev/null +++ b/Docs/types/BarrelTap.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BarrelTap + + +

Back to Server.Items

+

BarrelTap : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BarrelTap()
+ (ctor) BarrelTap( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bascinet.html b/Docs/types/Bascinet.html new file mode 100644 index 0000000..bad938f --- /dev/null +++ b/Docs/types/Bascinet.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Bascinet + + +

Back to Server.Items

+

Bascinet : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Bascinet()
+ (ctor) Bascinet( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseAI.html b/Docs/types/BaseAI.html new file mode 100644 index 0000000..019f457 --- /dev/null +++ b/Docs/types/BaseAI.html @@ -0,0 +1,66 @@ + + + RunUO Documentation - Class Overview - BaseAI + + +

Back to Server.Mobiles

+

BaseAI

+

Derived Types: AnimalAI, ArcherAI, BerserkAI, CloneAI, FactionGuardAI, HealerAI, MageAI, MeleeAI, PredatorAI, ThiefAI, VendorAI

+

Nested Types: AITimer, InternalEntry, TransferItem

+ (ctor) BaseAI( BaseCreature m )
+ ActionType Action( get; set; )
+ bool CanDetectHidden( get; )
+ DateTime NextMove( get; set; )
+ virtual bool AcquireFocusMob( int iRange, FightMode acqType, bool bPlayerOnly, bool bFacFriend, bool bFacFoe )
+ virtual void Activate()
+ virtual void BeginPickTarget( Mobile from, OrderType order )
+ virtual bool CheckFlee()
+ virtual bool CheckHerding()
+ virtual bool CheckMove()
+ virtual void Deactivate()
+ virtual void DetectHidden()
+ virtual bool DoActionBackoff()
+ virtual bool DoActionCombat()
+ virtual bool DoActionFlee()
+ virtual bool DoActionGuard()
+ virtual bool DoActionInteract()
+ virtual bool DoActionWander()
+ virtual bool DoBardPacified()
+ virtual bool DoBardProvoked()
+ virtual bool DoMove( Direction d )
+ virtual bool DoMove( Direction d, bool badStateOk )
+ virtual MoveResult DoMoveImpl( Direction d )
+ virtual bool DoOrderAttack()
+ virtual bool DoOrderCome()
+ virtual bool DoOrderDrop()
+ virtual bool DoOrderFollow()
+ virtual bool DoOrderFriend()
+ virtual bool DoOrderGuard()
+ virtual bool DoOrderNone()
+ virtual bool DoOrderPatrol()
+ virtual bool DoOrderRelease()
+ virtual bool DoOrderStay()
+ virtual bool DoOrderStop()
+ virtual bool DoOrderTransfer()
+ virtual bool DoOrderUnfriend()
+ virtual void EndPickTarget( Mobile from, Mobile target, OrderType order )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual bool MoveTo( Mobile m, bool run, int range )
+ virtual bool Obey()
+ virtual void OnActionChanged()
+ virtual void OnAggressiveAction( Mobile aggressor )
+ virtual bool OnAtWayPoint()
+ virtual void OnCurrentOrderChanged()
+ virtual void OnCurrentSpeedChanged()
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void OnTeleported()
+ void ReturnToHome()
+ virtual bool Think()
+ double TransformMoveDelay( double delay )
+ virtual bool WalkMobileRange( Mobile m, int iSteps, bool bRun, int iWantDistMin, int iWantDistMax )
+ virtual void WalkRandom( int iChanceToNotMove, int iChanceToDir, int iSteps )
+ virtual void WalkRandomInHome( int iChanceToNotMove, int iChanceToDir, int iSteps )
+ virtual bool WasNamed( string speech )
+ + diff --git a/Docs/types/BaseAddon.html b/Docs/types/BaseAddon.html new file mode 100644 index 0000000..a96c5c8 --- /dev/null +++ b/Docs/types/BaseAddon.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - BaseAddon + + +

Back to Server.Items

+

BaseAddon : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Derived Types: AbbatoirAddon, AlchemistTableEastAddon, AlchemistTableSouthAddon, AnkhOfSacrificeAddon, AnvilEastAddon, AnvilSouthAddon, AppleTrunkAddon, ArcaneBookshelfEastAddon, ArcaneBookshelfSouthAddon, ArcaneCircleAddon, ArcanistStatueEastAddon, ArcanistStatueSouthAddon, ArcheryButteAddon, AwesomeDisturbingPortraitAddon, BallotBoxAddon, BaseFruitTreeAddon, BaseRejuvinationAnkh, BedOfNailsAddon, BloodPentagram, BloodyPentagramAddon, BlueDecorativeRugAddon, BlueFancyRugAddon, BluePlainRugAddon, BoneCouchAddon, BoneTableAddon, BoneThroneAddon, BrocadeGozaMatEastAddon, BrocadeGozaMatSouthAddon, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatSouthAddon, BrokenArmoireAddon, BrokenBedAddon, BrokenBookcaseAddon, BrokenChestOfDrawersAddon, BrokenCoveredChairAddon, BrokenFallenChairAddon, BrokenVanityAddon, BrownBearRugEastAddon, BrownBearRugSouthAddon, Cannon, CannonAddon, ChampionPlatform, ChampionSkullPlatform, CherryBlossomTreeAddon, CherryBlossomTrunkAddon, CinnamonFancyRugAddon, CreepyPortraitAddon, CurtainsAddon, DarkFlowerTapestryEastAddon, DarkFlowerTapestrySouthAddon, DartBoardEastAddon, DartBoardSouthAddon, DisturbingPortraitAddon, ElvenBedEastAddon, ElvenBedSouthAddon, ElvenDresserEastAddon, ElvenDresserSouthAddon, ElvenForgeAddon, ElvenLoveseatEastAddon, ElvenLoveseatSouthAddon, ElvenSpinningwheelEastAddon, ElvenSpinningwheelSouthAddon, ElvenStoveEastAddon, ElvenStoveSouthAddon, ElvenWashBasinEastAddon, ElvenWashBasinSouthAddon, FancyElvenTableEastAddon, FancyElvenTableSouthAddon, FireColumnAddon, FlourMillEastAddon, FlourMillSouthAddon, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, GingerBreadHouseAddon, GoldenDecorativeRugAddon, GozaMatEastAddon, GozaMatSouthAddon, GrayBrickFireplaceEastAddon, GrayBrickFireplaceSouthAddon, GuillotineAddon, HagCauldron, HagStew, HangingAxesAddon, HangingSwordsAddon, HaunterMirrorAddon, HearthOfHomeFire, HouseLadderAddon, IronMaidenAddon, JackOLantern, LargeBedEastAddon, LargeBedSouthAddon, LargeFishingNetAddon, LargeForgeEastAddon, LargeForgeSouthAddon, LargeStoneTableEastAddon, LargeStoneTableSouthAddon, LightFlowerTapestryEastAddon, LightFlowerTapestrySouthAddon, LoomEastAddon, LoomSouthAddon, MaabusCoffin, MediumStoneTableEastAddon, MediumStoneTableSouthAddon, MediumStretchedHideEastAddon, MediumStretchedHideSouthAddon, MiniHouseAddon, MiningCart, MinotaurStatue, MountedPixieBlueAddon, MountedPixieGreenAddon, MountedPixieLimeAddon, MountedPixieOrangeAddon, MountedPixieWhiteAddon, OrnateElvenTableEastAddon, OrnateElvenTableSouthAddon, ParrotPerchAddon, PeachTrunkAddon, PentagramAddon, PickpocketDipEastAddon, PickpocketDipSouthAddon, PinkFancyRugAddon, PolarBearRugEastAddon, PolarBearRugSouthAddon, PowerGenerator, PyramidAddon, RedPlainRugAddon, SandstoneFireplaceEastAddon, SandstoneFireplaceSouthAddon, SandstoneFountainAddon, ScarecrowAddon, SerpentPillarAddon, ShrineOfWisdomAddon, SHTeleporter, SkullPileAddon, SmallBedEastAddon, SmallBedSouthAddon, SmallFishingNetAddon, SmallForgeAddon, SmallStretchedHideEastAddon, SmallStretchedHideSouthAddon, SolenAntHole, SpinningwheelEastAddon, SpinningwheelSouthAddon, SquareGozaMatEastAddon, SquareGozaMatSouthAddon, SquirrelStatueEastAddon, SquirrelStatueSouthAddon, StandingBrokenChairAddon, StoneAnkh, StoneFireplaceEastAddon, StoneFireplaceSouthAddon, StoneFountainAddon, StoneOvenEastAddon, StoneOvenSouthAddon, StoneStatueAddon, SuitOfGoldArmorAddon, SuitOfSilverArmorAddon, TableWithBlueClothAddon, TableWithOrangeClothAddon, TableWithPurpleClothAddon, TableWithRedClothAddon, TallElvenBedEastAddon, TallElvenBedSouthAddon, Telescope, TrainingDummyEastAddon, TrainingDummySouthAddon, TreeStump, UnmadeBedAddon, UnsettlingPortraitAddon, WallBanner, WallTorchAddon, WarriorStatueEastAddon, WarriorStatueSouthAddon, WaterTroughEastAddon, WaterTroughSouthAddon, WaterVatEast, WaterVatSouth, WoodenCoffinAddon

+ (static) bool CheckHouse( Mobile from, Point3D p, Map map, int height, ref BaseHouse house )
+ (static) bool IsWall( int x, int y, int z, Map map )
+ (ctor) BaseAddon()
+ (ctor) BaseAddon( Serial serial )
+ List<AddonComponent> Components( get; )
+ BaseAddonDeed Deed( get; )
+ int Hue( get; set; )
+ bool RetainDeedHue( get; )
+ Item Server.Items.IAddon.Deed( get; )
+ bool ShareHue( get; )
+ void AddComponent( AddonComponent c, int x, int y, int z )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual AddonFitResult CouldFit( IPoint3D p, Map map, Mobile from, ref BaseHouse house )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnChop( Mobile from )
+ virtual void OnComponentLoaded( AddonComponent c )
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void OnLocationChange( Point3D oldLoc )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseAddonContainer.html b/Docs/types/BaseAddonContainer.html new file mode 100644 index 0000000..3287cec --- /dev/null +++ b/Docs/types/BaseAddonContainer.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - BaseAddonContainer + + +

Back to Server.Items

+

BaseAddonContainer : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Derived Types: BoilingCauldronAddon, FountainOfLife, SacrificialAltarAddon, VanityAddon

+ (ctor) BaseAddonContainer( Serial serial )
+ (ctor) BaseAddonContainer( int itemID )
+ List<AddonContainerComponent> Components( get; )
+ BaseAddonContainerDeed Deed( get; )
+ bool DisplayWeight( get; )
+ int Hue( get; set; )
+ bool NeedsWall( get; )
+ CraftResource Resource( get; set; )
+ bool RetainDeedHue( get; )
+ Item Server.Items.IAddon.Deed( get; )
+ bool ShareHue( get; )
+ Point3D WallPosition( get; )
+ void AddComponent( AddonContainerComponent c, int x, int y, int z )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ AddonFitResult CouldFit( IPoint3D p, Map map, Mobile from, ref BaseHouse house )
+ virtual void Deserialize( GenericReader reader )
+ void DropItemsToGround()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAfterDelete()
+ virtual void OnChop( Mobile from )
+ virtual void OnComponentLoaded( AddonContainerComponent c )
+ virtual void OnComponentUsed( AddonContainerComponent c, Mobile from )
+ virtual void OnDelete()
+ virtual void OnLocationChange( Point3D oldLoc )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseAddonContainerDeed.html b/Docs/types/BaseAddonContainerDeed.html new file mode 100644 index 0000000..f19b652 --- /dev/null +++ b/Docs/types/BaseAddonContainerDeed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseAddonContainerDeed + + +

Back to Server.Items

+

BaseAddonContainerDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: BoilingCauldronDeed, FountainOfLifeDeed, SacrificialAltarDeed, VanityDeed

+

Nested Types: InternalTarget

+ (ctor) BaseAddonContainerDeed()
+ (ctor) BaseAddonContainerDeed( Serial serial )
+ BaseAddonContainer Addon( get; )
+ CraftResource Resource( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseAddonDeed.html b/Docs/types/BaseAddonDeed.html new file mode 100644 index 0000000..ace7e1d --- /dev/null +++ b/Docs/types/BaseAddonDeed.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BaseAddonDeed + + +

Back to Server.Items

+

BaseAddonDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: AbbatoirDeed, AlchemistTableEastDeed, AlchemistTableSouthDeed, AnkhOfSacrificeDeed, AnvilEastDeed, AnvilSouthDeed, AppleTreeDeed, AppleTrunkDeed, ArcaneBookshelfEastDeed, ArcaneBookshelfSouthDeed, ArcaneCircleDeed, ArcanistStatueEastDeed, ArcanistStatueSouthDeed, ArcheryButteDeed, AwesomeDisturbingPortraitDeed, BallotBoxDeed, BedOfNailsDeed, BloodyPentagramDeed, BlueDecorativeRugDeed, BlueFancyRugDeed, BluePlainRugDeed, BoneCouchDeed, BoneTableDeed, BoneThroneDeed, BrocadeGozaMatEastDeed, BrocadeGozaMatSouthDeed, BrocadeSquareGozaMatEastDeed, BrocadeSquareGozaMatSouthDeed, BrokenArmoireDeed, BrokenBedDeed, BrokenBookcaseDeed, BrokenChestOfDrawersDeed, BrokenCoveredChairDeed, BrokenFallenChairDeed, BrokenVanityDeed, BrownBearRugEastDeed, BrownBearRugSouthDeed, CannonDeed, CherryBlossomTreeDeed, CherryBlossomTrunkDeed, CinnamonFancyRugDeed, CreepyPortraitDeed, CurtainsDeed, DarkFlowerTapestryEastDeed, DarkFlowerTapestrySouthDeed, DartBoardEastDeed, DartBoardSouthDeed, DisturbingPortraitDeed, ElvenBedEastDeed, ElvenBedSouthDeed, ElvenDresserEastDeed, ElvenDresserSouthDeed, ElvenForgeDeed, ElvenLoveseatEastDeed, ElvenLoveseatSouthDeed, ElvenSpinningwheelEastDeed, ElvenSpinningwheelSouthDeed, ElvenStoveEastDeed, ElvenStoveSouthDeed, ElvenWashBasinEastDeed, ElvenWashBasinSouthDeed, FancyElvenTableEastDeed, FancyElvenTableSouthDeed, FlourMillEastDeed, FlourMillSouthDeed, FountainDeed, GingerBreadHouseDeed, GoldenDecorativeRugDeed, GozaMatEastDeed, GozaMatSouthDeed, GrayBrickFireplaceEastDeed, GrayBrickFireplaceSouthDeed, GuillotineDeed, HangingAxesDeed, HangingSwordsDeed, HaunterMirrorDeed, HearthOfHomeFireDeed, HouseLadderDeed, IronMaidenDeed, LargeBedEastDeed, LargeBedSouthDeed, LargeFishingNetDeed, LargeForgeEastDeed, LargeForgeSouthDeed, LargeStoneTableEastDeed, LargeStoneTableSouthDeed, LightFlowerTapestryEastDeed, LightFlowerTapestrySouthDeed, LoomEastDeed, LoomSouthDeed, MediumStoneTableEastDeed, MediumStoneTableSouthDeed, MediumStretchedHideEastDeed, MediumStretchedHideSouthDeed, MiniHouseDeed, MiningCartDeed, MinotaurStatueDeed, MountedPixieBlueDeed, MountedPixieGreenDeed, MountedPixieLimeDeed, MountedPixieOrangeDeed, MountedPixieWhiteDeed, OrnateElvenTableEastDeed, OrnateElvenTableSouthDeed, ParrotPerchDeed, PeachTreeDeed, PeachTrunkDeed, PentagramDeed, PickpocketDipEastDeed, PickpocketDipSouthDeed, PinkFancyRugDeed, PolarBearRugEastDeed, PolarBearRugSouthDeed, RedPlainRugDeed, SandstoneFireplaceEastDeed, SandstoneFireplaceSouthDeed, ScarecrowDeed, SmallBedEastDeed, SmallBedSouthDeed, SmallFishingNetDeed, SmallForgeDeed, SmallStretchedHideEastDeed, SmallStretchedHideSouthDeed, SpinningwheelEastDeed, SpinningwheelSouthDeed, SquareGozaMatEastDeed, SquareGozaMatSouthDeed, SquirrelStatueEastDeed, SquirrelStatueSouthDeed, StandingBrokenChairDeed, StoneAnkhDeed, StoneFireplaceEastDeed, StoneFireplaceSouthDeed, StoneOvenEastDeed, StoneOvenSouthDeed, StoneStatueDeed, SuitOfGoldArmorDeed, SuitOfSilverArmorDeed, TableWithBlueClothDeed, TableWithOrangeClothDeed, TableWithPurpleClothDeed, TableWithRedClothDeed, TallElvenBedEastDeed, TallElvenBedSouthDeed, TrainingDummyEastDeed, TrainingDummySouthDeed, TreeStumpDeed, UnmadeBedDeed, UnsettlingPortraitDeed, WallBannerDeed, WallTorchDeed, WarriorStatueEastDeed, WarriorStatueSouthDeed, WaterTroughEastDeed, WaterTroughSouthDeed, WoodenCoffinDeed

+

Nested Types: InternalTarget

+ (ctor) BaseAddonDeed()
+ (ctor) BaseAddonDeed( Serial serial )
+ BaseAddon Addon( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseAgilityPotion.html b/Docs/types/BaseAgilityPotion.html new file mode 100644 index 0000000..56ec7f5 --- /dev/null +++ b/Docs/types/BaseAgilityPotion.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseAgilityPotion + + +

Back to Server.Items

+

BaseAgilityPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: AgilityPotion, GreaterAgilityPotion

+ (ctor) BaseAgilityPotion( PotionEffect effect )
+ (ctor) BaseAgilityPotion( Serial serial )
+ int DexOffset( get; )
+ TimeSpan Duration( get; )
+ virtual void Deserialize( GenericReader reader )
+ bool DoAgility( Mobile from )
+ virtual void Drink( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseAmbitiousSolenQueen.html b/Docs/types/BaseAmbitiousSolenQueen.html new file mode 100644 index 0000000..fc09c3a --- /dev/null +++ b/Docs/types/BaseAmbitiousSolenQueen.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseAmbitiousSolenQueen + + +

Back to Server.Engines.Quests.Ambitious

+

BaseAmbitiousSolenQueen : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: BlackAmbitiousSolenQueen, RedAmbitiousSolenQueen

+ (ctor) BaseAmbitiousSolenQueen()
+ (ctor) BaseAmbitiousSolenQueen( Serial serial )
+ bool DisallowAllMoves( get; )
+ bool RedSolen( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetIdleSound()
+ virtual void InitBody()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseArmor.html b/Docs/types/BaseArmor.html new file mode 100644 index 0000000..85fd762 --- /dev/null +++ b/Docs/types/BaseArmor.html @@ -0,0 +1,114 @@ + + + RunUO Documentation - Class Overview - BaseArmor + + +

Back to Server.Items

+

BaseArmor : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: Bascinet, BaseGlovesOfMining, BaseShield, BoneArms, BoneChest, BoneGloves, BoneHelm, BoneLegs, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, Circlet, CloseHelm, DaemonArms, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, DecorativePlateKabuto, DragonArms, DragonChest, DragonGloves, DragonHelm, DragonLegs, ElvenGlasses, FemaleElvenPlateChest, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, GemmedCirclet, HeavyPlateJingasa, Helmet, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, LeafArms, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherGloves, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LightPlateJingasa, NorseHelm, OrcHelm, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerLegs, RavenHelm, RingmailArms, RingmailChest, RingmailGloves, RingmailLegs, RoyalCirclet, SamuraiHelm, SmallPlateJingasa, StandardPlateKabuto, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLegs, StuddedMempo, StuddedSuneate, VultureHelm, WingedHelm, WoodlandArms, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs

+

Nested Types: SaveFlag

+ (static) double[] ArmorScalars( get; set; )
+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (static) void ValidateMobile( Mobile m )
+ (ctor) BaseArmor( Serial serial )
+ (ctor) BaseArmor( int itemID )
+ bool AllowFemaleWearer( get; )
+ bool AllowMaleWearer( get; )
+ int AosDexBonus( get; )
+ int AosDexReq( get; )
+ int AosIntBonus( get; )
+ int AosIntReq( get; )
+ ArmorMeditationAllowance AosMedAllowance( get; )
+ int AosStrBonus( get; )
+ int AosStrReq( get; )
+ AosArmorAttributes ArmorAttributes( get; set; )
+ int ArmorBase( get; )
+ double ArmorRating( get; )
+ double ArmorRatingScaled( get; )
+ double ArmorScalar( get; )
+ int ArtifactRarity( get; )
+ AosAttributes Attributes( get; set; )
+ int BaseArmorRating( get; set; )
+ double BaseArmorRatingScaled( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ ArmorBodyType BodyPosition( get; )
+ bool CanFortify( get; )
+ int ColdBonus( get; set; )
+ int ColdResistance( get; )
+ Mobile Crafter( get; set; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int DexBonus( get; set; )
+ int DexRequirement( get; set; )
+ ArmorDurabilityLevel Durability( get; set; )
+ int EnergyBonus( get; set; )
+ int EnergyResistance( get; )
+ FactionItem FactionItemState( get; set; )
+ int FireBonus( get; set; )
+ int FireResistance( get; )
+ int HitPoints( get; set; )
+ int Hue( get; set; )
+ bool Identified( get; set; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int IntBonus( get; set; )
+ int IntRequirement( get; set; )
+ ArmorMaterialType MaterialType( get; )
+ int MaxHitPoints( get; set; )
+ ArmorMeditationAllowance MeditationAllowance( get; set; )
+ int OldDexBonus( get; )
+ int OldDexReq( get; )
+ int OldIntBonus( get; )
+ int OldIntReq( get; )
+ ArmorMeditationAllowance OldMedAllowance( get; )
+ int OldStrBonus( get; )
+ int OldStrReq( get; )
+ int PhysicalBonus( get; set; )
+ int PhysicalResistance( get; )
+ bool PlayerConstructed( get; set; )
+ int PoisonBonus( get; set; )
+ int PoisonResistance( get; )
+ ArmorProtectionLevel ProtectionLevel( get; set; )
+ ArmorQuality Quality( get; set; )
+ Race RequiredRace( get; )
+ CraftResource Resource( get; set; )
+ int RevertArmorBase( get; )
+ AosSkillBonuses SkillBonuses( get; set; )
+ int StrBonus( get; set; )
+ int StrRequirement( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual bool AllowEquipedCast( Mobile from )
+ virtual bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ virtual bool CanEquip( Mobile from )
+ virtual bool CheckPropertyConfliction( Mobile m )
+ int ComputeStatBonus( StatType type )
+ int ComputeStatReq( StatType type )
+ virtual void Deserialize( GenericReader reader )
+ void DistributeBonuses( int amount )
+ int GetDurabilityBonus()
+ int GetLowerStatReq()
+ virtual int GetLuckBonus()
+ string GetNameString()
+ virtual void GetProperties( ObjectPropertyList list )
+ int GetProtOffset()
+ CraftAttributeInfo GetResourceAttrs()
+ void Invalidate()
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDuped( Item newItem )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual bool OnEquip( Mobile from )
+ virtual int OnHit( BaseWeapon weapon, int damageTaken )
+ virtual void OnRemoved( object parent )
+ virtual void OnSingleClick( Mobile from )
+ virtual double ScaleArmorByDurability( double armor )
+ virtual void ScaleDurability()
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ virtual void UnscaleDurability()
+ + diff --git a/Docs/types/BaseAttributes.html b/Docs/types/BaseAttributes.html new file mode 100644 index 0000000..8c89f0e --- /dev/null +++ b/Docs/types/BaseAttributes.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BaseAttributes + + +

Back to Server

+

BaseAttributes

+

Derived Types: AosArmorAttributes, AosAttributes, AosElementAttributes, AosSkillBonuses, AosWeaponAttributes

+ (ctor) BaseAttributes( Item owner )
+ (ctor) BaseAttributes( Item owner, GenericReader reader )
+ (ctor) BaseAttributes( Item owner, BaseAttributes other )
+ bool IsEmpty( get; )
+ Item Owner( get; )
+ int GetIndex( uint mask )
+ int GetValue( int bitmask )
+ void Serialize( GenericWriter writer )
+ void SetValue( int bitmask, int value )
+ + diff --git a/Docs/types/BaseAxe.html b/Docs/types/BaseAxe.html new file mode 100644 index 0000000..a858086 --- /dev/null +++ b/Docs/types/BaseAxe.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - BaseAxe + + +

Back to Server.Items

+

BaseAxe : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: Axe, BattleAxe, DoubleAxe, ExecutionersAxe, GargoylesPickaxe, Hatchet, LargeBattleAxe, OrnateAxe, Pickaxe, SturdyPickaxe, TwoHandedAxe, WarAxe

+ (ctor) BaseAxe( int itemID )
+ (ctor) BaseAxe( Serial serial )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ HarvestSystem HarvestSystem( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual int GetUsesScalar()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void ScaleDurability()
+ virtual void Serialize( GenericWriter writer )
+ virtual void UnscaleDurability()
+ + diff --git a/Docs/types/BaseBagBall.html b/Docs/types/BaseBagBall.html new file mode 100644 index 0000000..be194f8 --- /dev/null +++ b/Docs/types/BaseBagBall.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseBagBall + + +

Back to Server.Items

+

BaseBagBall : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Derived Types: LargeBagBall, SmallBagBall

+ (ctor) BaseBagBall( int itemID )
+ (ctor) BaseBagBall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseBashing.html b/Docs/types/BaseBashing.html new file mode 100644 index 0000000..69d0a64 --- /dev/null +++ b/Docs/types/BaseBashing.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BaseBashing + + +

Back to Server.Items

+

BaseBashing : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BaseWand, Club, DiamondMace, HammerPick, Mace, MagicWand, Maul, Nunchaku, ProspectorsTool, Scepter, Tessen, Tetsubo, WarHammer, WarMace

+ (ctor) BaseBashing( Serial serial )
+ (ctor) BaseBashing( int itemID )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual double GetBaseDamage( Mobile attacker )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseBeverage.html b/Docs/types/BaseBeverage.html new file mode 100644 index 0000000..346ac04 --- /dev/null +++ b/Docs/types/BaseBeverage.html @@ -0,0 +1,45 @@ + + + RunUO Documentation - Class Overview - BaseBeverage + + +

Back to Server.Items

+

BaseBeverage : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+

Derived Types: BeverageBottle, CeramicMug, GlassMug, Goblet, Jug, PewterMug, Pitcher

+

Nested Types: HeaveTimer

+ (static) void CheckHeaveTimer( Mobile from )
+ (static) bool ConsumeTotal( Container pack, BeverageType content, int quantity )
+ (static) bool ConsumeTotal( Container pack, Type itemType, BeverageType content, int quantity )
+ (static) void EventSink_Login( LoginEventArgs e )
+ (static) void Initialize()
+ (ctor) BaseBeverage()
+ (ctor) BaseBeverage( BeverageType type )
+ (ctor) BaseBeverage( Serial serial )
+ int BaseLabelNumber( get; )
+ bool ContainsAlchohol( get; )
+ BeverageType Content( get; set; )
+ int EmptyLabelNumber( get; )
+ bool Fillable( get; )
+ bool IsEmpty( get; )
+ bool IsFull( get; )
+ int LabelNumber( get; )
+ int MaxQuantity( get; )
+ Poison Poison( get; set; )
+ Mobile Poisoner( get; set; )
+ bool Pourable( get; )
+ int Quantity( get; set; )
+ bool ShowQuantity( get; )
+ bool CheckType( string name )
+ virtual int ComputeItemID()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Fill_OnTarget( Mobile from, object targ )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int GetQuantityDescription()
+ void InternalDeserialize( GenericReader reader, bool read )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Pour_OnTarget( Mobile from, object targ )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool ValidateUse( Mobile from, bool message )
+ + diff --git a/Docs/types/BaseBoard.html b/Docs/types/BaseBoard.html new file mode 100644 index 0000000..72aba10 --- /dev/null +++ b/Docs/types/BaseBoard.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BaseBoard + + +

Back to Server.Items

+

BaseBoard : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Derived Types: Backgammon, CheckerBoard, Chessboard

+

Nested Types: DefaultEntry

+ (static) bool ValidateDefault( Mobile from, BaseBoard board )
+ (ctor) BaseBoard( Serial serial )
+ (ctor) BaseBoard( int itemID )
+ TimeSpan DecayTime( get; )
+ bool DisplaysContent( get; )
+ bool IsDecoContainer( get; )
+ SecureLevel Level( get; set; )
+ void CreatePiece( BasePiece piece, int x, int y )
+ virtual void CreatePieces()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragDropInto( Mobile from, Item dropped, Point3D point )
+ void Reset()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseBoat.html b/Docs/types/BaseBoat.html new file mode 100644 index 0000000..275f56c --- /dev/null +++ b/Docs/types/BaseBoat.html @@ -0,0 +1,91 @@ + + + RunUO Documentation - Class Overview - BaseBoat + + +

Back to Server.Multis

+

BaseBoat : BaseMulti, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: LargeBoat, LargeDragonBoat, MediumBoat, MediumDragonBoat, SmallBoat, SmallDragonBoat

+

Nested Types: DecayTimer, DryDockResult, MoveTimer, TurnTimer, UpdateAllTimer

+ (static) List<BaseBoat> Boats( get; )
+ (static) void EventSink_WorldSave( WorldSaveEventArgs e )
+ (static) BaseBoat FindBoatAt( IPoint2D loc, Map map )
+ (static) Rectangle2D[] GetWrapFor( Map m )
+ (static) void Initialize()
+ (static) bool IsValidLocation( Point3D p, Map map )
+ (static) void UpdateAllComponents()
+ (ctor) BaseBoat()
+ (ctor) BaseBoat( Serial serial )
+ bool Anchored( get; set; )
+ BaseDockedBoat DockedBoat( get; )
+ int EastID( get; )
+ Direction Facing( get; set; )
+ bool HandlesOnSpeech( get; )
+ Hold Hold( get; set; )
+ int HoldDistance( get; )
+ bool IsMoving( get; )
+ MapItem MapItem( get; set; )
+ Point3D MarkOffset( get; )
+ Direction Moving( get; set; )
+ int NextNavPoint( get; set; )
+ int NorthID( get; )
+ BoatOrder Order( get; set; )
+ Mobile Owner( get; set; )
+ Point2D PortOffset( get; )
+ Plank PPlank( get; set; )
+ string ShipName( get; set; )
+ int SouthID( get; )
+ int Speed( get; set; )
+ Plank SPlank( get; set; )
+ Point2D StarboardOffset( get; )
+ int Status( get; )
+ TillerMan TillerMan( get; set; )
+ int TillerManDistance( get; )
+ DateTime TimeOfDecay( get; set; )
+ int WestID( get; )
+ void AssociateMap( MapItem map )
+ void BeginDryDock( Mobile from )
+ void BeginRename( Mobile from )
+ bool CanCommand( Mobile m )
+ bool CanFit( Point3D p, Map map, int itemID )
+ bool CheckDecay()
+ DryDockResult CheckDryDock( Mobile from )
+ bool CheckKey( uint keyValue )
+ virtual bool Contains( int x, int y )
+ uint CreateKeys( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ bool DoMovement( bool message )
+ void EndDryDock( Mobile from )
+ void EndRename( Mobile from, string newName )
+ Point3D GetMarkedLocation()
+ Direction GetMovementFor( int x, int y, out int maxSpeed )
+ Point3D GetRotatedLocation( int x, int y )
+ void GiveName( Mobile m )
+ void GiveNavPoint()
+ bool LowerAnchor( bool message )
+ bool Move( Direction dir, int speed, bool message )
+ virtual void OnAfterDelete()
+ bool OneMove( Direction dir )
+ virtual void OnLocationChange( Point3D old )
+ virtual void OnMapChange()
+ virtual void OnSpeech( SpeechEventArgs e )
+ bool RaiseAnchor( bool message )
+ void Refresh()
+ void RemoveKeys( Mobile m )
+ void RemoveName( Mobile m )
+ void Rename( string newName )
+ Point3D Rotate( Point3D p, int count )
+ virtual void Serialize( GenericWriter writer )
+ bool SetFacing( Direction facing )
+ void SetName( SpeechEventArgs e )
+ bool StartCourse( bool single, bool message )
+ bool StartCourse( string navPoint, bool single, bool message )
+ bool StartMove( Direction dir, bool fast )
+ bool StartMove( Direction dir, int speed, TimeSpan interval, bool single, bool message )
+ bool StartTurn( int offset, bool message )
+ bool StopMove( bool message )
+ void Teleport( int xOffset, int yOffset, int zOffset )
+ bool Turn( int offset, bool message )
+ void UpdateComponents()
+ + diff --git a/Docs/types/BaseBoatDeed.html b/Docs/types/BaseBoatDeed.html new file mode 100644 index 0000000..5b3923e --- /dev/null +++ b/Docs/types/BaseBoatDeed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseBoatDeed + + +

Back to Server.Multis

+

BaseBoatDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: LargeBoatDeed, LargeDragonBoatDeed, MediumBoatDeed, MediumDragonBoatDeed, SmallBoatDeed, SmallDragonBoatDeed

+

Nested Types: InternalTarget

+ (ctor) BaseBoatDeed( Serial serial )
+ (ctor) BaseBoatDeed( int id, Point3D offset )
+ BaseBoat Boat( get; )
+ int MultiID( get; set; )
+ Point3D Offset( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void OnPlacement( Mobile from, Point3D p )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseBook.html b/Docs/types/BaseBook.html new file mode 100644 index 0000000..e674a1b --- /dev/null +++ b/Docs/types/BaseBook.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - BaseBook + + +

Back to Server.Items

+

BaseBook : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Derived Types: ArmsAndWeaponsPrimer, BirdsOfBritannia, BlueBook, BoldStranger, BritannianFlora, BrownBook, BurningOfTrinsic, CallToAnarchy, ChildrenTalesVol2, DeceitDungeonOfHorror, DimensionalTravel, DiversityOfOurLand, EthicalHedonism, GrammarOfOrcish, GrimmochJournal1, GrimmochJournal11, GrimmochJournal14, GrimmochJournal17, GrimmochJournal2, GrimmochJournal23, GrimmochJournal3, GrimmochJournal6, GrimmochJournal7, GuideToGuilds, LifeOfATravellingMinstrel, LysanderNotebook1, LysanderNotebook11, LysanderNotebook2, LysanderNotebook3, LysanderNotebook7, LysanderNotebook8, MajorTradeAssociation, MyStory, QuestOfVirtues, RankingsOfTrades, RedBook, RegardingLlamas, SongOfSamlethe, TaleOfThreeTribes, TalesOfVesperVol1, TalkingToWisps, TamingDragons, TanBook, TavarasJournal1, TavarasJournal11, TavarasJournal14, TavarasJournal16, TavarasJournal16b, TavarasJournal17, TavarasJournal19, TavarasJournal2, TavarasJournal3, TavarasJournal6, TavarasJournal7, TavarasJournal8, TavarasJournal9, TheFight, TreatiseOnAlchemy, VirtueBook, WildGirlOfTheForest

+

Nested Types: SaveFlags

+ (static) void ContentChange( NetState state, PacketReader pvSrc )
+ (static) void HeaderChange( NetState state, PacketReader pvSrc )
+ (static) void Initialize()
+ (static) void OldHeaderChange( NetState state, PacketReader pvSrc )
+ (ctor) BaseBook( Serial serial )
+ (ctor) BaseBook( int itemID )
+ (ctor) BaseBook( int itemID, bool writable )
+ (ctor) BaseBook( int itemID, int pageCount, bool writable )
+ (ctor) BaseBook( int itemID, string title, string author, int pageCount, bool writable )
+ string Author( get; set; )
+ BookContent DefaultContent( get; )
+ SecureLevel Level( get; set; )
+ BookPageInfo[] Pages( get; )
+ int PagesCount( get; )
+ string Title( get; set; )
+ bool Writable( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseBracelet.html b/Docs/types/BaseBracelet.html new file mode 100644 index 0000000..52ea088 --- /dev/null +++ b/Docs/types/BaseBracelet.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseBracelet + + +

Back to Server.Items

+

BaseBracelet : BaseJewel, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: BraceletOfBinding, GoldBracelet, SilverBracelet

+ (ctor) BaseBracelet( int itemID )
+ (ctor) BaseBracelet( Serial serial )
+ int BaseGemTypeNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseBulletinBoard.html b/Docs/types/BaseBulletinBoard.html new file mode 100644 index 0000000..6f7c075 --- /dev/null +++ b/Docs/types/BaseBulletinBoard.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - BaseBulletinBoard + + +

Back to Server.Items

+

BaseBulletinBoard : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BulletinBoard

+ (static) void BBClientRequest( NetState state, PacketReader pvSrc )
+ (static) void BBPostMessage( Mobile from, BaseBulletinBoard board, PacketReader pvSrc )
+ (static) void BBRemoveMessage( Mobile from, BaseBulletinBoard board, PacketReader pvSrc )
+ (static) void BBRequestContent( Mobile from, BaseBulletinBoard board, PacketReader pvSrc )
+ (static) void BBRequestHeader( Mobile from, BaseBulletinBoard board, PacketReader pvSrc )
+ (static) bool CheckTime( DateTime time, TimeSpan range )
+ (static) string FormatTS( TimeSpan ts )
+ (static) void Initialize()
+ (ctor) BaseBulletinBoard( int itemID )
+ (ctor) BaseBulletinBoard( Serial serial )
+ string BoardName( get; set; )
+ virtual bool CheckRange( Mobile from )
+ virtual void Cleanup()
+ virtual void Deserialize( GenericReader reader )
+ virtual bool GetLastPostTime( Mobile poster, bool onlyCheckRoot, ref DateTime lastPostTime )
+ virtual void OnDoubleClick( Mobile from )
+ void PostMessage( Mobile from, BulletinMessage thread, string subject, string[] lines )
+ void RecurseDelete( BulletinMessage msg )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseCamp.html b/Docs/types/BaseCamp.html new file mode 100644 index 0000000..6fc57d3 --- /dev/null +++ b/Docs/types/BaseCamp.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BaseCamp + + +

Back to Server.Multis

+

BaseCamp : BaseMulti, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BankerCamp, BrigandCamp, HealerCamp, LizardmenCamp, MageCamp, OrcCamp, RatCamp

+ (ctor) BaseCamp( Serial serial )
+ (ctor) BaseCamp( int multiID )
+ TimeSpan DecayDelay( get; set; )
+ int EventRange( get; )
+ bool HandlesOnMovement( get; )
+ virtual void AddComponents()
+ virtual void AddItem( Item item, int xOffset, int yOffset, int zOffset )
+ virtual void AddMobile( Mobile m, int wanderRange, int xOffset, int yOffset, int zOffset )
+ void CheckAddComponents()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void RefreshDecay( bool setDecayTime )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseChampion.html b/Docs/types/BaseChampion.html new file mode 100644 index 0000000..b4aba7c --- /dev/null +++ b/Docs/types/BaseChampion.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - BaseChampion + + +

Back to Server.Mobiles

+

BaseChampion : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: Barracoon, Ilhenir, LordOaks, Mephitis, Meraktus, Neira, Rikktor, Semidar, Serado, Twaulo

+

Nested Types: GoodiesTimer

+ (static) void GivePowerScrollTo( Mobile m, PowerScroll ps )
+ (ctor) BaseChampion( AIType aiType )
+ (ctor) BaseChampion( Serial serial )
+ (ctor) BaseChampion( AIType aiType, FightMode mode )
+ Type[] DecorativeList( get; )
+ bool NoGoodies( get; )
+ Type[] SharedList( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ Type[] UniqueList( get; )
+ Item CreateArtifact( Type[] list )
+ PowerScroll CreateRandomPowerScroll()
+ virtual void Deserialize( GenericReader reader )
+ Item GetArtifact()
+ void GivePowerScrolls()
+ virtual bool OnBeforeDeath()
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseCloak.html b/Docs/types/BaseCloak.html new file mode 100644 index 0000000..5e298f4 --- /dev/null +++ b/Docs/types/BaseCloak.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseCloak + + +

Back to Server.Items

+

BaseCloak : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: Cloak, FurCape, RewardCloak

+ (ctor) BaseCloak( Serial serial )
+ (ctor) BaseCloak( int itemID )
+ (ctor) BaseCloak( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseClothMaterial.html b/Docs/types/BaseClothMaterial.html new file mode 100644 index 0000000..0435491 --- /dev/null +++ b/Docs/types/BaseClothMaterial.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseClothMaterial + + +

Back to Server.Items

+

BaseClothMaterial : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Derived Types: DarkYarn, LightYarn, LightYarnUnraveled, SpoolOfThread

+

Nested Types: PickLoomTarget

+ (ctor) BaseClothMaterial( Serial serial )
+ (ctor) BaseClothMaterial( int itemID )
+ (ctor) BaseClothMaterial( int itemID, int amount )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseClothing.html b/Docs/types/BaseClothing.html new file mode 100644 index 0000000..7f1c6b9 --- /dev/null +++ b/Docs/types/BaseClothing.html @@ -0,0 +1,78 @@ + + + RunUO Documentation - Class Overview - BaseClothing + + +

Back to Server.Items

+

BaseClothing : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: BaseCloak, BaseHat, BaseMiddleTorso, BaseOuterLegs, BaseOuterTorso, BasePants, BaseShirt, BaseShoes, BaseWaist

+

Nested Types: SaveFlag

+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (static) void ValidateMobile( Mobile m )
+ (ctor) BaseClothing( Serial serial )
+ (ctor) BaseClothing( int itemID, Layer layer )
+ (ctor) BaseClothing( int itemID, Layer layer, int hue )
+ bool AllowFemaleWearer( get; )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArtifactRarity( get; )
+ AosAttributes Attributes( get; set; )
+ int BaseColdResistance( get; )
+ int BaseDexBonus( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BaseIntBonus( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int BaseStrBonus( get; )
+ bool CanBeBlessed( get; )
+ bool CanFortify( get; )
+ AosArmorAttributes ClothingAttributes( get; set; )
+ int ColdResistance( get; )
+ Mobile Crafter( get; set; )
+ CraftResource DefaultResource( get; )
+ int EnergyResistance( get; )
+ FactionItem FactionItemState( get; set; )
+ int FireResistance( get; )
+ int HitPoints( get; set; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int MaxHitPoints( get; set; )
+ int OldStrReq( get; )
+ int PhysicalResistance( get; )
+ bool PlayerConstructed( get; set; )
+ int PoisonResistance( get; )
+ ClothingQuality Quality( get; set; )
+ Race RequiredRace( get; )
+ AosElementAttributes Resistances( get; set; )
+ CraftResource Resource( get; set; )
+ AosSkillBonuses SkillBonuses( get; set; )
+ int StrRequirement( get; set; )
+ virtual void AddEquipInfoAttributes( Mobile from, List<EquipInfoAttribute> attrs )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void AddStatBonuses( Mobile parent )
+ virtual bool AllowEquipedCast( Mobile from )
+ virtual bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ virtual bool CanEquip( Mobile from )
+ virtual bool CheckPropertyConfliction( Mobile m )
+ int ComputeStatBonus( StatType type )
+ int ComputeStatReq( StatType type )
+ virtual void Deserialize( GenericReader reader )
+ void DistributeBonuses( int amount )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ int GetLowerStatReq()
+ string GetNameString()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDuped( Item newItem )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual int OnHit( BaseWeapon weapon, int damageTaken )
+ virtual void OnRemoved( object parent )
+ virtual void OnSingleClick( Mobile from )
+ virtual void ScaleDurability()
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ virtual void UnscaleDurability()
+ + diff --git a/Docs/types/BaseCommand.html b/Docs/types/BaseCommand.html new file mode 100644 index 0000000..fae124e --- /dev/null +++ b/Docs/types/BaseCommand.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - BaseCommand + + +

Back to Server.Commands.Generic

+

BaseCommand

+

Derived Types: AddCommand, AddToPackCommand, AliasedSetCommand, Batch, BringToPackCommand, ConditionCommand, CountCommand, DeleteCommand, DismountCommand, FactionKickCommand, FirewallCommand, GetCommand, GetTypeCommand, HideCommand, IncreaseCommand, InterfaceCommand, KickCommand, KillCommand, OpenBrowserCommand, PrivSoundCommand, RefreshHouseCommand, RestockCommand, SetCommand, TeleCommand, TellCommand

+

Nested Types: MessageEntry

+ (static) bool IsAccessible( Mobile from, object obj )
+ (ctor) BaseCommand()
+ AccessLevel AccessLevel( get; set; )
+ string[] Commands( get; set; )
+ string Description( get; set; )
+ bool ListOptimized( get; set; )
+ ObjectTypes ObjectTypes( get; set; )
+ CommandSupport Supports( get; set; )
+ string Usage( get; set; )
+ void AddResponse( Gump gump )
+ void AddResponse( string message )
+ virtual void Execute( CommandEventArgs e, object obj )
+ virtual void ExecuteList( CommandEventArgs e, ArrayList list )
+ void Flush( Mobile from, bool flushToLog )
+ void LogFailure( string message )
+ virtual bool ValidateArgs( BaseCommandImplementor impl, CommandEventArgs e )
+ + diff --git a/Docs/types/BaseCommandImplementor.html b/Docs/types/BaseCommandImplementor.html new file mode 100644 index 0000000..6a775b7 --- /dev/null +++ b/Docs/types/BaseCommandImplementor.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - BaseCommandImplementor + + +

Back to Server.Commands.Generic

+

BaseCommandImplementor

+

Derived Types: AreaCommandImplementor, ContainedCommandImplementor, GlobalCommandImplementor, MultiCommandImplementor, OnlineCommandImplementor, RegionCommandImplementor, SelfCommandImplementor, SerialCommandImplementor, SingleCommandImplementor

+ (static) List<BaseCommandImplementor> Implementors( get; )
+ (static) void Register( BaseCommandImplementor impl )
+ (static) void RegisterImplementors()
+ (ctor) BaseCommandImplementor()
+ AccessLevel AccessLevel( get; set; )
+ string[] Accessors( get; set; )
+ Dictionary<String,BaseCommand> Commands( get; )
+ string Description( get; set; )
+ CommandSupport SupportRequirement( get; set; )
+ bool SupportsConditionals( get; set; )
+ string Usage( get; set; )
+ bool CheckObjectTypes( BaseCommand command, Extensions ext, out bool items, out bool mobiles )
+ virtual void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj )
+ virtual void Execute( CommandEventArgs e )
+ string GenerateArgString( string[] args )
+ virtual void Process( Mobile from, BaseCommand command, string[] args )
+ void Register()
+ virtual void Register( BaseCommand command )
+ void RunCommand( Mobile from, BaseCommand command, string[] args )
+ void RunCommand( Mobile from, object obj, BaseCommand command, string[] args )
+ + diff --git a/Docs/types/BaseConfirmGump.html b/Docs/types/BaseConfirmGump.html new file mode 100644 index 0000000..ba80edc --- /dev/null +++ b/Docs/types/BaseConfirmGump.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BaseConfirmGump + + +

Back to Server.Gumps

+

BaseConfirmGump : Gump

+

Derived Types: ConfirmBreakCrystalGump

+

Nested Types: Buttons

+ (ctor) BaseConfirmGump()
+ int LabelNumber( get; )
+ int TitleNumber( get; )
+ virtual void Confirm( Mobile from )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ virtual void Refuse( Mobile from )
+ + diff --git a/Docs/types/BaseConflagrationPotion.html b/Docs/types/BaseConflagrationPotion.html new file mode 100644 index 0000000..30bd346 --- /dev/null +++ b/Docs/types/BaseConflagrationPotion.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - BaseConflagrationPotion + + +

Back to Server.Items

+

BaseConflagrationPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: ConflagrationPotion, GreaterConflagrationPotion

+

Nested Types: InternalItem, ThrowTarget

+ (static) void AddDelay( Mobile m )
+ (static) void EndDelay( Mobile m )
+ (static) void EndDelay_Callback( object obj )
+ (static) int GetDelay( Mobile m )
+ (ctor) BaseConflagrationPotion( Serial serial )
+ (ctor) BaseConflagrationPotion( PotionEffect effect )
+ int MaxDamage( get; )
+ int MinDamage( get; )
+ bool RequireFreeHand( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Drink( Mobile from )
+ virtual void Explode( Mobile from, Point3D loc, Map map )
+ void Explode_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseConfusionBlastPotion.html b/Docs/types/BaseConfusionBlastPotion.html new file mode 100644 index 0000000..2e5d63b --- /dev/null +++ b/Docs/types/BaseConfusionBlastPotion.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BaseConfusionBlastPotion + + +

Back to Server.Items

+

BaseConfusionBlastPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: ConfusionBlastPotion, GreaterConfusionBlastPotion

+

Nested Types: ThrowTarget

+ (static) void AddDelay( Mobile m )
+ (static) void EndDelay( Mobile m )
+ (static) void EndDelay_Callback( object obj )
+ (static) int GetDelay( Mobile m )
+ (ctor) BaseConfusionBlastPotion( PotionEffect effect )
+ (ctor) BaseConfusionBlastPotion( Serial serial )
+ int Radius( get; )
+ bool RequireFreeHand( get; )
+ virtual void BlastEffect( Point3D p, Map map )
+ void CircleEffect2( object state )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Drink( Mobile from )
+ virtual void Explode( Mobile from, Point3D loc, Map map )
+ void Explode_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseContainer.html b/Docs/types/BaseContainer.html new file mode 100644 index 0000000..e833559 --- /dev/null +++ b/Docs/types/BaseContainer.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - BaseContainer + + +

Back to Server.Items

+

BaseContainer : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: Armoire, Backpack, Bag, Barrel, BaseAddonContainer, BaseBagBall, BaseDecorationContainerArtifact, Basket, CherryArmoire, CommodityDeedBox, Drawer, ElegantArmoire, EmptyBookcase, FancyArmoire, FancyDrawer, FullBookcase, GiftBox, GiftBoxAngel, GiftBoxCube, GiftBoxCylinder, GiftBoxNeon, GiftBoxOctogon, GiftBoxRectangle, GreenStocking, Keg, MapleArmoire, PackingBox, PicnicBasket, PlagueBeastBackpack, RedArmoire, RedStocking, RedVelvetGiftBox, ShortCabinet, StrongBox, TallCabinet, TrapableContainer

+ (ctor) BaseContainer( int itemID )
+ (ctor) BaseContainer( Serial serial )
+ int DefaultMaxWeight( get; )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual bool IsAccessibleTo( Mobile m )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void Open( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage )
+ virtual void UpdateTotal( Item sender, TotalType type, int delta )
+ + diff --git a/Docs/types/BaseCreature.html b/Docs/types/BaseCreature.html new file mode 100644 index 0000000..b72ab36 --- /dev/null +++ b/Docs/types/BaseCreature.html @@ -0,0 +1,401 @@ + + + RunUO Documentation - Class Overview - BaseCreature + + +

Back to Server.Mobiles

+

BaseCreature : Mobile, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: AbysmalHorror, Actor, AgapiteElemental, AirElemental, Alligator, AncientLich, AncientWyrm, AntLion, ArcaneDaemon, ArcaneFey, ArcaneFiend, ArcticOgreLord, Artist, BakeKitsune, Balron, BaseChampion, BaseEnraged, BaseEscortable, BaseFactionGuard, BaseFamiliar, BaseMount, BaseShieldGuard, BaseTalismanSummon, BaseVendor, Betrayer, Bird, BlackBear, BlackSolenInfiltratorQueen, BlackSolenInfiltratorWarrior, BlackSolenQueen, BlackSolenWarrior, BlackSolenWorker, BladeSpirits, BloodElemental, Boar, Bogle, Bogling, BogThing, BoneDemon, BoneKnight, BoneMagi, Brigand, BronzeElemental, BrownBear, Bull, BullFrog, Cat, Centaur, ChaosDaemon, ChaosDragoon, ChaosDragoonElite, Chicken, Clone, CopperElemental, Corpser, CorrosiveSlime, CorruptedSoul, Cougar, Cow, Crane, CrystalElemental, Cursed, CursedSoul, Cyclops, Daemon, DarknightCreeper, DarkWisp, DeadlyImp, DeathwatchBeetle, DeathwatchBeetleHatchling, DeepSeaSerpent, DemonKnight, Devourer, DireWolf, DiseasedCat, Dog, Dolphin, Doppleganger, Dragon, Drake, DreadSpider, DullCopperElemental, Dummy, Eagle, EarthElemental, Efreet, ElderGazer, EliteNinja, EnergyVortex, EnslavedGargoyle, EtherealWarrior, Ettin, EvilMage, EvilMageLord, Executioner, ExodusMinion, ExodusOverseer, FanDancer, FerelTreefellow, Ferret, FetidEssence, FierceDragon, FireElemental, FireGargoyle, FleshGolem, FleshRenderer, FrostOoze, FrostSpider, FrostTroll, Gaman, Gargoyle, GargoyleDestroyer, GargoyleEnforcer, Gazer, GazerLarva, Ghoul, GiantBlackWidow, GiantIceWorm, GiantRat, GiantSerpent, GiantSpider, GiantToad, Gibberling, Goat, GoldenElemental, Golem, GolemController, GoreFiend, Gorilla, GreaterDragon, GreaterMongbat, GreatHart, GreyWolf, GrimmochDrummel, GrizzlyBear, Guardian, Gypsy, HarborMaster, Harpy, Harrower, HarrowerTentacles, HeadlessOne, HellCat, HellHound, Henchman, Hind, HolyFamiliar, HordeMinion, IceElemental, IceFiend, IceSerpent, IceSnake, Imp, Impaler, InjuredWolf, InterredGrizzle, JackRabbit, Juggernaut, JukaLord, JukaMage, JukaWarrior, Jwilson, Kappa, KazeKemono, KhaldunRevenant, KhaldunSummoner, KhaldunZealot, Kraken, LadyOfTheSnow, LavaLizard, LavaSerpent, LavaSnake, Leviathan, Lich, LichLord, Lizardman, Llama, LysanderGathenwale, MeerCaptain, MeerEternal, MeerMage, MeerWarrior, MilitiaFighter, Minotaur, MinotaurCaptain, MinotaurScout, MLDryad, Moloch, Mongbat, MorgBergen, MoundOfMaggots, MountainGoat, Mummy, NatureFury, Ninja, Ogre, OgreLord, Oni, OphidianArchmage, OphidianKnight, OphidianMage, OphidianMatriarch, OphidianWarrior, Orc, OrcBomber, OrcBrute, OrcCaptain, OrcishLord, OrcishMage, PackHorse, PackLlama, Panther, Parrot, PatchworkSkeleton, PestilentBandage, Phoenix, Pig, Pixie, PlagueBeast, PlagueBeastLord, PlagueSpawn, PoisonElemental, PolarBear, PredatorHellCat, Quagmire, Rabbit, RagingGrizzlyBear, RaiJu, Rat, Ratman, RatmanArcher, RatmanMage, Ravager, Reaper, RedSolenInfiltratorQueen, RedSolenInfiltratorWarrior, RedSolenQueen, RedSolenWarrior, RedSolenWorker, RestlessSoul, Revenant, RevenantLion, Ronin, RottingCorpse, RuneBeetle, Samurai, SandVortex, Satyr, Savage, SavageRider, SavageShaman, Scorpion, Sculptor, SeaSerpent, SerpentineDragon, ServantOfSemidar, Sewerrat, Shade, ShadowFiend, ShadowIronElemental, ShadowKnight, ShadowWisp, ShadowWyrm, Sheep, Silvani, SilverSerpent, SkeletalDragon, SkeletalKnight, SkeletalMage, Skeleton, SkitteringHopper, Slime, Snake, SnowElemental, SnowLeopard, SpectralArmour, Spectre, Squirrel, StoneGargoyle, StoneHarpy, StrongMongbat, Succubus, SummonedAirElemental, SummonedDaemon, SummonedEarthElemental, SummonedFireElemental, SummonedPaladin, SummonedWaterElemental, SwampTentacle, TavaraSewel, TerathanAvenger, TerathanDrone, TerathanMatriarch, TerathanWarrior, TimberWolf, Titan, TormentedMinotaur, ToxicElemental, Treefellow, Troglodyte, Troll, TropicalBird, TsukiWolf, UnholyFamiliar, ValoriteElemental, VampireBat, VeriteElemental, VorpalBunny, WailingBanshee, Walrus, WandererOfTheVoid, WaterElemental, WhippingVine, WhiteWolf, WhiteWyrm, Wisp, Wraith, Wyvern, Yamandon, YomotsuElder, YomotsuPriest, YomotsuWarrior, YoungNinja, YoungRonin, Zombie

+

Nested Types: Allegiance, DeathAdderCharmTarget, DeleteTimer, FKEntry, TameEntry, TeachResult

+ (static) Type[] MinorArtifactsMl( get; )
+ (static) bool Summoning( get; set; )
+ (static) void Cap( ref int val, int min, int max )
+ (static) List<DamageStore> GetLootingRights( List<DamageEntry> damageEntries, int hitsMax )
+ (static) void GetRandomAOSStats( int minLevel, int maxLevel, out int attributeCount, out int min, out int max )
+ (static) int RandomMinMaxScaled( int min, int max )
+ (static) bool Summon( BaseCreature creature, Mobile caster, Point3D p, int sound, TimeSpan duration )
+ (static) bool Summon( BaseCreature creature, bool controlled, Mobile caster, Point3D p, int sound, TimeSpan duration )
+ (static) void TeleportPets( Mobile master, Point3D loc, Map map )
+ (static) void TeleportPets( Mobile master, Point3D loc, Map map, bool onlyBonded )
+ (ctor) BaseCreature( Serial serial )
+ (ctor) BaseCreature( AIType ai, FightMode mode, int iRangePerception, int iRangeFight, double dActiveSpeed, double dPassiveSpeed )
+ double ActiveSpeed( get; set; )
+ AIType AI( get; set; )
+ BaseAI AIObject( get; )
+ bool AllowFemaleTamer( get; )
+ bool AllowMaleTamer( get; )
+ bool AllowNewPetFriend( get; )
+ bool AlwaysAttackable( get; )
+ bool AlwaysMurderer( get; )
+ bool AreaPeaceImmune( get; )
+ bool AutoDispel( get; )
+ double AutoDispelChance( get; )
+ DateTime BardEndTime( get; set; )
+ bool BardImmune( get; )
+ Mobile BardMaster( get; set; )
+ bool BardPacified( get; set; )
+ bool BardProvoked( get; set; )
+ Mobile BardTarget( get; set; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ bool BleedImmune( get; )
+ TimeSpan BondingAbandonDelay( get; )
+ DateTime BondingBegin( get; set; )
+ TimeSpan BondingDelay( get; )
+ double BonusPetDamageScalar( get; )
+ int BreathAngerAnimation( get; )
+ int BreathAngerSound( get; )
+ int BreathColdDamage( get; )
+ double BreathDamageDelay( get; )
+ double BreathDamageScalar( get; )
+ double BreathEffectDelay( get; )
+ int BreathEffectDuration( get; )
+ bool BreathEffectExplodes( get; )
+ bool BreathEffectFixedDir( get; )
+ int BreathEffectHue( get; )
+ int BreathEffectItemID( get; )
+ int BreathEffectRenderMode( get; )
+ int BreathEffectSound( get; )
+ int BreathEffectSpeed( get; )
+ int BreathEnergyDamage( get; )
+ int BreathFireDamage( get; )
+ bool BreathImmune( get; )
+ double BreathMaxDelay( get; )
+ double BreathMinDelay( get; )
+ int BreathPhysicalDamage( get; )
+ int BreathPoisonDamage( get; )
+ int BreathRange( get; )
+ double BreathStallTime( get; )
+ bool CanAngerOnTame( get; )
+ bool CanBreath( get; )
+ bool CanDestroyObstacles( get; )
+ bool CanDrop( get; )
+ bool CanHeal( get; )
+ bool CanHealOwner( get; )
+ bool CanMoveOverObstacles( get; )
+ bool CanOpenDoors( get; )
+ bool CanRegenHits( get; )
+ bool CanRegenMana( get; )
+ bool CanRegenStam( get; )
+ bool CanRummageCorpses( get; )
+ bool CanTeach( get; )
+ int ChaosDamage( get; set; )
+ int ColdDamage( get; set; )
+ int ColdResistSeed( get; set; )
+ bool Commandable( get; )
+ Mobile ConstantFocus( get; )
+ Point3D ControlDest( get; set; )
+ bool Controlled( get; set; )
+ Mobile ControlMaster( get; set; )
+ OrderType ControlOrder( get; set; )
+ int ControlSlots( get; set; )
+ Mobile ControlTarget( get; set; )
+ double CurrentSpeed( get; set; )
+ WayPoint CurrentWayPoint( get; set; )
+ int DamageMax( get; set; )
+ int DamageMin( get; set; )
+ bool DeathAdderCharmable( get; )
+ bool Debug( get; set; )
+ bool DeleteCorpseOnDeath( get; )
+ bool DeleteOnRelease( get; )
+ TimeSpan DeleteTimeLeft( get; )
+ int DirectDamage( get; set; )
+ bool DisallowAllMoves( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ bool DisplayWeight( get; )
+ DateTime EndFleeTime( get; set; )
+ int EnergyDamage( get; set; )
+ int EnergyResistSeed( get; set; )
+ Ethic EthicAllegiance( get; )
+ Faction FactionAllegiance( get; )
+ int FactionSilverWorth( get; )
+ FoodType FavoriteFood( get; )
+ int Feathers( get; )
+ FightMode FightMode( get; set; )
+ int FireDamage( get; set; )
+ int FireResistSeed( get; set; )
+ Mobile FocusMob( get; set; )
+ BaseAI ForcedAI( get; )
+ List<Mobile> Friends( get; )
+ bool HasBreath( get; )
+ double HealDelay( get; )
+ int HealEndRange( get; )
+ bool HealFully( get; )
+ double HealInterval( get; )
+ double HealOwnerDelay( get; )
+ bool HealOwnerFully( get; )
+ double HealOwnerInterval( get; )
+ double HealOwnerTrigger( get; )
+ double HealScalar( get; )
+ int HealSound( get; )
+ int HealStartRange( get; )
+ double HealTrigger( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ Poison HitPoison( get; )
+ double HitPoisonChance( get; )
+ int HitsMax( get; )
+ int HitsMaxSeed( get; set; )
+ Point3D Home( get; set; )
+ bool IgnoreYoungProtection( get; )
+ bool InitialInnocent( get; )
+ bool IsAnimatedDead( get; )
+ bool IsBondable( get; )
+ bool IsBonded( get; set; )
+ bool IsDeadBondedPet( get; )
+ bool IsDeadPet( get; set; )
+ bool IsDispellable( get; )
+ bool IsHealing( get; )
+ bool IsHouseSummonable( get; )
+ bool IsNecroFamiliar( get; )
+ bool IsNecromancer( get; )
+ bool IsParagon( get; set; )
+ bool IsPrisoner( get; set; )
+ bool IsScaredOfScaryThings( get; )
+ bool IsScaryToPets( get; )
+ bool IsStabled( get; set; )
+ bool IsSubdued( get; )
+ Mobile LastOwner( get; )
+ int Loyalty( get; set; )
+ int ManaMax( get; )
+ int ManaMaxSeed( get; set; )
+ int Meat( get; )
+ MeatType MeatType( get; )
+ double MinTameSkill( get; set; )
+ DateTime NextReacquireTime( get; set; )
+ bool NoHouseRestrictions( get; )
+ bool NoKillAwards( get; set; )
+ OppositionGroup OppositionGroup( get; )
+ DateTime OwnerAbandonTime( get; set; )
+ List<Mobile> Owners( get; )
+ PackInstinct PackInstinct( get; )
+ double PassiveSpeed( get; set; )
+ int PhysicalDamage( get; set; )
+ int PhysicalResistanceSeed( get; set; )
+ bool PlayerRangeSensitive( get; )
+ int PoisonDamage( get; set; )
+ Poison PoisonImmune( get; )
+ int PoisonResistSeed( get; set; )
+ int RangeFight( get; set; )
+ int RangeHome( get; set; )
+ int RangePerception( get; set; )
+ TimeSpan ReacquireDelay( get; )
+ bool ReacquireOnMovement( get; )
+ HonorContext ReceivedHonorContext( get; set; )
+ bool ReduceSpeedWithDamage( get; )
+ bool RemoveIfUntamed( get; set; )
+ int RemoveStep( get; set; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ bool ShouldCheckStatTimers( get; )
+ InhumanSpeech SpeechType( get; )
+ int StamMax( get; )
+ int StamMaxSeed( get; set; )
+ bool StatLossAfterTame( get; )
+ bool SubdueBeforeTame( get; )
+ bool Summoned( get; set; )
+ DateTime SummonEnd( get; set; )
+ Mobile SummonMaster( get; set; )
+ bool Tamable( get; set; )
+ IPoint2D TargetLocation( get; set; )
+ int Team( get; set; )
+ double TreasureMapChance( get; )
+ int TreasureMapLevel( get; )
+ bool Uncalmable( get; )
+ bool Unprovokable( get; )
+ double WeaponAbilityChance( get; )
+ int Wool( get; )
+ virtual void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
+ void AddFollowers()
+ virtual void AddLoot( LootPack pack )
+ virtual void AddLoot( LootPack pack, int amount )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void AddPetFriend( Mobile m )
+ void AddSpellAttack( Type type )
+ void AddSpellDefense( Type type )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
+ virtual void AlterDamageScalarTo( Mobile target, ref double scalar )
+ virtual void AlterMeleeDamageFrom( Mobile from, ref int damage )
+ virtual void AlterMeleeDamageTo( Mobile to, ref int damage )
+ virtual void AlterSpellDamageFrom( Mobile from, ref int damage )
+ virtual void AlterSpellDamageTo( Mobile to, ref int damage )
+ virtual string ApplyNameSuffix( string suffix )
+ virtual ApplyPoisonResult ApplyPoison( Mobile from, Poison poison )
+ void BeginDeleteTimer()
+ virtual void BeginFlee( TimeSpan maxDuration )
+ virtual int BreathComputeDamage()
+ virtual void BreathDamage_Callback( object state )
+ virtual void BreathDealDamage( Mobile target )
+ virtual void BreathEffect_Callback( object state )
+ virtual void BreathPlayAngerAnimation()
+ virtual void BreathPlayAngerSound()
+ virtual void BreathPlayEffect( Mobile target )
+ virtual void BreathPlayEffectSound()
+ virtual void BreathStallMovement()
+ virtual void BreathStart( Mobile target )
+ virtual bool CanBeControlledBy( Mobile m )
+ virtual bool CanBeDamaged()
+ virtual bool CanBeHarmful( Mobile target, bool message, bool ignoreOurBlessedness )
+ virtual bool CanBeRenamedBy( Mobile from )
+ void ChangeAIToDefault()
+ void ChangeAIType( AIType NewAI )
+ virtual bool CheckControlChance( Mobile m )
+ virtual bool CheckFeed( Mobile from, Item dropped )
+ virtual bool CheckFlee()
+ virtual bool CheckFoodPreference( Item f )
+ virtual bool CheckFoodPreference( Item fed, FoodType type, Type[] types )
+ virtual bool CheckGold( Mobile from, Item dropped )
+ virtual bool CheckIdle()
+ virtual bool CheckPoisonImmunity( Mobile from, Poison poison )
+ virtual void CheckReflect( Mobile caster, ref bool reflect )
+ virtual bool CheckTeach( SkillName skill, Mobile from )
+ virtual bool CheckTeachingMatch( Mobile m )
+ virtual TeachResult CheckTeachSkills( SkillName skill, Mobile m, int maxPointsToLearn, ref int pointsToLearn, bool doTeach )
+ int ComputeBonusDamage( List<DamageEntry> list, Mobile m )
+ virtual void CriminalAction( bool message )
+ virtual void Damage( int amount, Mobile from )
+ void DebugSay( string text )
+ void DebugSay( string format, object[] args )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Dispel( Mobile m )
+ virtual void DoHarmful( Mobile target, bool indirect )
+ virtual void DropBackpack()
+ bool FindMyName( string str, bool bWithAll )
+ void ForceReacquire()
+ virtual void GenerateLoot()
+ virtual void GenerateLoot( bool spawning )
+ Spell GetAttackSpellRandom()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ double GetControlChance( Mobile m )
+ virtual double GetControlChance( Mobile m, bool useBaseSkill )
+ virtual Mobile GetDamageMaster( Mobile damagee )
+ Spell GetDefenseSpellRandom()
+ virtual Allegiance GetEthicAllegiance( Mobile mob )
+ virtual Allegiance GetFactionAllegiance( Mobile mob )
+ virtual double GetFightModeRanking( Mobile m, FightMode acqType, bool bPlayerOnly )
+ double GetHomeDistance()
+ Mobile GetMaster()
+ Spell GetSpellSpecific( Type type )
+ virtual int GetTeamSize( int iRange )
+ virtual WeaponAbility GetWeaponAbility()
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void Heal( Mobile patient )
+ void Heal_Callback( object state )
+ virtual void HealEffect( Mobile patient )
+ virtual void HealStart( Mobile patient )
+ virtual bool IsEnemy( Mobile m )
+ virtual bool IsFriend( Mobile m )
+ virtual bool IsHarmfulCriminal( Mobile target )
+ virtual bool IsHumanInTown()
+ bool IsHurt()
+ virtual bool IsPetFriend( Mobile m )
+ virtual Item NewHarmfulItem()
+ virtual void OnActionBackoff()
+ virtual void OnActionCombat()
+ virtual void OnActionFlee()
+ virtual void OnActionGuard()
+ virtual void OnActionInteract()
+ virtual void OnActionWander()
+ virtual void OnAfterDelete()
+ virtual bool OnBeforeDeath()
+ virtual void OnBeforeSpawn( Point3D location, Map m )
+ virtual void OnCarve( Mobile from, Corpse corpse, Item with )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnDamagedBySpell( Mobile from )
+ virtual void OnDeath( Container c )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual bool OnGoldGiven( Mobile from, Gold dropped )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void OnHarmfulSpell( Mobile from )
+ virtual void OnKilledBy( Mobile mob )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void OnRegionChange( Region Old, Region New )
+ virtual void OnSectorActivate()
+ virtual void OnSectorDeactivate()
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void OnTeamChange()
+ virtual void OnThink()
+ virtual bool OverrideBondingReqs()
+ void Pacify( Mobile master, DateTime endtime )
+ void PackArcanceScroll( double chance )
+ bool PackArmor( int minLevel, int maxLevel )
+ bool PackArmor( int minLevel, int maxLevel, double chance )
+ void PackGem()
+ void PackGem( int amount )
+ void PackGem( int min, int max )
+ void PackGold( int amount )
+ void PackGold( int min, int max )
+ void PackItem( Item item )
+ void PackMagicItems( int minLevel, int maxLevel )
+ void PackMagicItems( int minLevel, int maxLevel, double armorChance, double weaponChance )
+ void PackNecroReg()
+ void PackNecroReg( int amount )
+ void PackNecroReg( int min, int max )
+ void PackNecroScroll( int index )
+ void PackPotion()
+ void PackReg( int amount )
+ void PackReg( int min, int max )
+ void PackScroll( int circle )
+ void PackScroll( int minCircle, int maxCircle )
+ bool PackSlayer()
+ bool PackSlayer( double chance )
+ void PackStatue()
+ void PackStatue( int amount )
+ void PackStatue( int min, int max )
+ bool PackWeapon( int minLevel, int maxLevel )
+ bool PackWeapon( int minLevel, int maxLevel, double chance )
+ void Provoke( Mobile master, Mobile target, bool bSuccess )
+ void ReleaseGuardDupeLock()
+ void ReleaseGuardLock()
+ void RemoveFollowers()
+ virtual void RemovePetFriend( Mobile m )
+ virtual void ResurrectPet()
+ virtual void RevealingAction()
+ virtual bool Rummage()
+ virtual void Serialize( GenericWriter writer )
+ bool SetControlMaster( Mobile m )
+ void SetDamage( int val )
+ void SetDamage( int min, int max )
+ void SetDamageType( ResistanceType type, int val )
+ void SetDamageType( ResistanceType type, int min, int max )
+ void SetDex( int val )
+ void SetDex( int min, int max )
+ void SetFameLevel( int level )
+ void SetHits( int val )
+ void SetHits( int min, int max )
+ void SetInt( int val )
+ void SetInt( int min, int max )
+ void SetKarmaLevel( int level )
+ virtual void SetLocation( Point3D newLocation, bool isTeleport )
+ void SetMana( int val )
+ void SetMana( int min, int max )
+ void SetResistance( ResistanceType type, int val )
+ void SetResistance( ResistanceType type, int min, int max )
+ void SetSkill( SkillName name, double val )
+ void SetSkill( SkillName name, double min, double max )
+ void SetStam( int val )
+ void SetStam( int min, int max )
+ void SetStr( int val )
+ void SetStr( int min, int max )
+ void SpillAcid( int Amount )
+ void SpillAcid( Mobile target, int Amount )
+ void StopDeleteTimer()
+ virtual void StopFlee()
+ virtual void StopHeal()
+ virtual bool Teach( SkillName skill, Mobile m, int maxPointsToLearn, bool doTeach )
+ virtual void Turn( int iTurnSteps )
+ virtual void TurnInternal( int iTurnSteps )
+ void Unpacify()
+ + diff --git a/Docs/types/BaseCurePotion.html b/Docs/types/BaseCurePotion.html new file mode 100644 index 0000000..b0e763e --- /dev/null +++ b/Docs/types/BaseCurePotion.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BaseCurePotion + + +

Back to Server.Items

+

BaseCurePotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: CurePotion, GreaterCurePotion, LesserCurePotion

+ (ctor) BaseCurePotion( PotionEffect effect )
+ (ctor) BaseCurePotion( Serial serial )
+ CureLevelInfo[] LevelInfo( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoCure( Mobile from )
+ virtual void Drink( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseDecorationArtifact.html b/Docs/types/BaseDecorationArtifact.html new file mode 100644 index 0000000..96c0771 --- /dev/null +++ b/Docs/types/BaseDecorationArtifact.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BaseDecorationArtifact + + +

Back to Server.Items

+

BaseDecorationArtifact : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BloodyWaterArtifact, BooksFaceDownArtifact, BooksNorthArtifact, BooksWestArtifact, BottleArtifact, BowlArtifact, BowlsHorizontalArtifact, BowlsVerticalArtifact, BrazierArtifact, CocoonArtifact, CupsArtifact, DamagedBooksArtifact, DolphinLeftArtifact, DolphinRightArtifact, EggCaseArtifact, FanNorthArtifact, FanWestArtifact, FlowersArtifact, GruesomeStandardArtifact, LampPostArtifact, LeatherTunicArtifact, ManStatuetteEastArtifact, ManStatuetteSouthArtifact, Painting1NorthArtifact, Painting1WestArtifact, Painting2NorthArtifact, Painting2WestArtifact, Painting3Artifact, Painting4NorthArtifact, Painting4WestArtifact, Painting5NorthArtifact, Painting5WestArtifact, Painting6NorthArtifact, Painting6WestArtifact, RockArtifact, RuinedPaintingArtifact, SaddleArtifact, SakeArtifact, Sculpture1Artifact, Sculpture2Artifact, SkinnedDeerArtifact, SkinnedGoatArtifact, SkullCandleArtifact, StretchedHideArtifact, StuddedLeggingsArtifact, StuddedTunicArtifact, SwordDisplay1NorthArtifact, SwordDisplay1WestArtifact, SwordDisplay2NorthArtifact, SwordDisplay2WestArtifact, SwordDisplay3EastArtifact, SwordDisplay3SouthArtifact, SwordDisplay4NorthArtifact, SwordDisplay4WestArtifact, SwordDisplay5NorthArtifact, SwordDisplay5WestArtifact, TarotCardsArtifact, TeapotNorthArtifact, TeapotWestArtifact, TowerLanternArtifact, TripleFanNorthArtifact, TripleFanWestArtifact, Urn1Artifact, Urn2Artifact, ZenRock1Artifact, ZenRock2Artifact, ZenRock3Artifact

+ (ctor) BaseDecorationArtifact( Serial serial )
+ (ctor) BaseDecorationArtifact( int itemID )
+ int ArtifactRarity( get; )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseDecorationContainerArtifact.html b/Docs/types/BaseDecorationContainerArtifact.html new file mode 100644 index 0000000..5475384 --- /dev/null +++ b/Docs/types/BaseDecorationContainerArtifact.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BaseDecorationContainerArtifact + + +

Back to Server.Items

+

BaseDecorationContainerArtifact : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BackpackArtifact, Basket1Artifact, Basket2Artifact, Basket3NorthArtifact, Basket3WestArtifact, Basket4Artifact, Basket5NorthArtifact, Basket5WestArtifact, Basket6Artifact

+ (ctor) BaseDecorationContainerArtifact( Serial serial )
+ (ctor) BaseDecorationContainerArtifact( int itemID )
+ int ArtifactRarity( get; )
+ bool ForceShowProperties( get; )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseDockedBoat.html b/Docs/types/BaseDockedBoat.html new file mode 100644 index 0000000..e94291c --- /dev/null +++ b/Docs/types/BaseDockedBoat.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BaseDockedBoat + + +

Back to Server.Multis

+

BaseDockedBoat : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: LargeDockedBoat, LargeDockedDragonBoat, MediumDockedBoat, MediumDockedDragonBoat, SmallDockedBoat, SmallDockedDragonBoat

+

Nested Types: InternalTarget

+ (ctor) BaseDockedBoat( Serial serial )
+ (ctor) BaseDockedBoat( int id, Point3D offset, BaseBoat boat )
+ BaseBoat Boat( get; )
+ int MultiID( get; set; )
+ Point3D Offset( get; set; )
+ string ShipName( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void OnPlacement( Mobile from, Point3D p )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseDoor.html b/Docs/types/BaseDoor.html new file mode 100644 index 0000000..765dced --- /dev/null +++ b/Docs/types/BaseDoor.html @@ -0,0 +1,44 @@ + + + RunUO Documentation - Class Overview - BaseDoor + + +

Back to Server.Items

+

BaseDoor : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+

Derived Types: BarredMetalDoor, BarredMetalDoor2, BaseHouseDoor, DarkWoodDoor, DarkWoodGate, IronGate, IronGateShort, LightWoodDoor, LightWoodGate, MediumWoodDoor, MetalDoor, MetalDoor2, PortcullisEW, PortcullisNS, RattanDoor, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, StrongWoodDoor

+

Nested Types: InternalTimer

+ (static) void ChainLink_OnCommand( CommandEventArgs e )
+ (static) void ChainLink_OnTarget( Mobile from, object targeted, object state )
+ (static) void EventSink_OpenDoorMacroUsed( OpenDoorMacroEventArgs args )
+ (static) Point3D GetOffset( DoorFacing facing )
+ (static) void Initialize()
+ (static) void Link_OnCommand( CommandEventArgs e )
+ (static) void Link_OnFirstTarget( Mobile from, object targeted )
+ (static) void Link_OnSecondTarget( Mobile from, object targeted, object state )
+ (ctor) BaseDoor( Serial serial )
+ (ctor) BaseDoor( int closedID, int openedID, int openedSound, int closedSound, Point3D offset )
+ int ClosedID( get; set; )
+ int ClosedSound( get; set; )
+ uint KeyValue( get; set; )
+ BaseDoor Link( get; set; )
+ bool Locked( get; set; )
+ Point3D Offset( get; set; )
+ bool Open( get; set; )
+ int OpenedID( get; set; )
+ int OpenedSound( get; set; )
+ bool UseChainedFunctionality( get; )
+ bool CanClose()
+ bool CheckFit( Map map, Point3D p, int height )
+ virtual void Deserialize( GenericReader reader )
+ List<BaseDoor> GetChain()
+ bool IsFreeToClose()
+ virtual bool IsInside( Mobile from )
+ virtual void OnClosed( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnOpened( Mobile from )
+ virtual void OnTelekinesis( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void Use( Mobile from )
+ virtual bool UseLocks()
+ + diff --git a/Docs/types/BaseEarrings.html b/Docs/types/BaseEarrings.html new file mode 100644 index 0000000..8746e9d --- /dev/null +++ b/Docs/types/BaseEarrings.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseEarrings + + +

Back to Server.Items

+

BaseEarrings : BaseJewel, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: GoldEarrings, SilverEarrings

+ (ctor) BaseEarrings( int itemID )
+ (ctor) BaseEarrings( Serial serial )
+ int BaseGemTypeNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseEnraged.html b/Docs/types/BaseEnraged.html new file mode 100644 index 0000000..ea5d1aa --- /dev/null +++ b/Docs/types/BaseEnraged.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseEnraged + + +

Back to Server.Mobiles

+

BaseEnraged : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: EnragedBlackBear, EnragedEagle, EnragedHart, EnragedHind, EnragedRabbit

+ (ctor) BaseEnraged( Mobile summoner )
+ (ctor) BaseEnraged( Serial serial )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ bool Combat( Mobile mobile )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseEquipableLight.html b/Docs/types/BaseEquipableLight.html new file mode 100644 index 0000000..dc00d0f --- /dev/null +++ b/Docs/types/BaseEquipableLight.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BaseEquipableLight + + +

Back to Server.Items

+

BaseEquipableLight : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: Candle, Lantern, Torch

+ (ctor) BaseEquipableLight( int itemID )
+ (ctor) BaseEquipableLight( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Ignite()
+ virtual void OnAdded( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseEscortable.html b/Docs/types/BaseEscortable.html new file mode 100644 index 0000000..c5b01c6 --- /dev/null +++ b/Docs/types/BaseEscortable.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - BaseEscortable + + +

Back to Server.Mobiles

+

BaseEscortable : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: BrideGroom, EscortableMage, Merchant, Messenger, Noble, Peasant, SeekerOfAdventure

+

Nested Types: DeleteTimer

+ (static) Hashtable EscortTable( get; )
+ (ctor) BaseEscortable()
+ (ctor) BaseEscortable( Serial serial )
+ bool Commandable( get; )
+ string Destination( get; set; )
+ virtual bool AcceptEscorter( Mobile m )
+ virtual void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void BeginDelete()
+ virtual bool CanBeRenamedBy( Mobile from )
+ virtual bool CheckAtDestination()
+ virtual void Deserialize( GenericReader reader )
+ EscortDestinationInfo GetDestination()
+ virtual Mobile GetEscorter()
+ virtual string[] GetPossibleDestinations()
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnAfterDelete()
+ virtual bool OnMove( Direction d )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void OnThink()
+ virtual string PickRandomDestination()
+ virtual bool SayDestinationTo( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ virtual void StartFollow()
+ virtual void StartFollow( Mobile escorter )
+ virtual void StopFollow()
+ + diff --git a/Docs/types/BaseExplosionPotion.html b/Docs/types/BaseExplosionPotion.html new file mode 100644 index 0000000..3a4d51d --- /dev/null +++ b/Docs/types/BaseExplosionPotion.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BaseExplosionPotion + + +

Back to Server.Items

+

BaseExplosionPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: ExplosionPotion, GreaterExplosionPotion, LesserExplosionPotion

+

Nested Types: ThrowTarget

+ (ctor) BaseExplosionPotion( Serial serial )
+ (ctor) BaseExplosionPotion( PotionEffect effect )
+ int MaxDamage( get; )
+ int MinDamage( get; )
+ bool RequireFreeHand( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Detonate_OnTick( object state )
+ virtual void Drink( Mobile from )
+ void Explode( Mobile from, bool direct, Point3D loc, Map map )
+ virtual object FindParent( Mobile from )
+ void Reposition_OnTick( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseExtension.html b/Docs/types/BaseExtension.html new file mode 100644 index 0000000..756785a --- /dev/null +++ b/Docs/types/BaseExtension.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseExtension + + +

Back to Server.Commands.Generic

+

BaseExtension

+

Derived Types: DistinctExtension, LimitExtension, SortExtension, WhereExtension

+ (ctor) BaseExtension()
+ ExtensionInfo Info( get; )
+ bool IsFixedSize( get; )
+ string Name( get; )
+ int Order( get; )
+ int Size( get; )
+ virtual void Filter( ArrayList list )
+ virtual bool IsValid( object obj )
+ virtual void Optimize( Mobile from, Type baseType, ref AssemblyEmitter assembly )
+ virtual void Parse( Mobile from, string[] arguments, int offset, int size )
+ + diff --git a/Docs/types/BaseFactionGuard.html b/Docs/types/BaseFactionGuard.html new file mode 100644 index 0000000..17e3c37 --- /dev/null +++ b/Docs/types/BaseFactionGuard.html @@ -0,0 +1,48 @@ + + + RunUO Documentation - Class Overview - BaseFactionGuard + + +

Back to Server.Factions

+

BaseFactionGuard : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: FactionBerserker, FactionDeathKnight, FactionDragoon, FactionHenchman, FactionKnight, FactionMercenary, FactionNecromancer, FactionPaladin, FactionSorceress, FactionWizard

+ (ctor) BaseFactionGuard( Serial serial )
+ (ctor) BaseFactionGuard( string title )
+ bool BardImmune( get; )
+ bool ClickTitle( get; )
+ Faction Faction( get; set; )
+ BaseAI ForcedAI( get; )
+ GuardAI GuardAI( get; )
+ Orders Orders( get; )
+ TimeSpan ReacquireDelay( get; )
+ Town Town( get; set; )
+ void ChangeReaction( Faction faction, ReactionType type )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateBody( bool isFemale, bool randomHair )
+ virtual void GenerateRandomHair()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual bool HandlesOnSpeech( Mobile from )
+ Item Immovable( Item item )
+ virtual bool IsEnemy( Mobile m )
+ Item Layered( Item item, Layer layer )
+ Item Newbied( Item item )
+ virtual void OnAfterDelete()
+ virtual void OnDeath( Container c )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ void PackStrongPotion()
+ void PackStrongPotions( int count )
+ void PackStrongPotions( int min, int max )
+ void PackWeakPotion()
+ void PackWeakPotions( int count )
+ void PackWeakPotions( int min, int max )
+ void Register()
+ Item Rehued( Item item, int hue )
+ Item Resourced( BaseWeapon weapon, CraftResource resource )
+ Item Resourced( BaseArmor armor, CraftResource resource )
+ virtual void Serialize( GenericWriter writer )
+ void Unregister()
+ bool WasNamed( string speech )
+ + diff --git a/Docs/types/BaseFactionTrap.html b/Docs/types/BaseFactionTrap.html new file mode 100644 index 0000000..99b2896 --- /dev/null +++ b/Docs/types/BaseFactionTrap.html @@ -0,0 +1,37 @@ + + + RunUO Documentation - Class Overview - BaseFactionTrap + + +

Back to Server.Factions

+

BaseFactionTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: FactionExplosionTrap, FactionGasTrap, FactionSawTrap, FactionSpikeTrap

+ (ctor) BaseFactionTrap( Serial serial )
+ (ctor) BaseFactionTrap( Faction f, Mobile m, int itemID )
+ AllowedPlacing AllowedPlacing( get; )
+ int AttackMessage( get; )
+ TimeSpan ConcealPeriod( get; )
+ TimeSpan DecayPeriod( get; )
+ int DisarmMessage( get; )
+ int EffectSound( get; )
+ Faction Faction( get; set; )
+ int MessageHue( get; )
+ Mobile Placer( get; set; )
+ int SilverFromDisarm( get; )
+ DateTime TimeOfPlacement( get; set; )
+ virtual void BeginConceal()
+ virtual bool CheckDecay()
+ virtual void Conceal()
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoAttackEffect( Mobile m )
+ virtual void DoVisibleEffect()
+ virtual bool IsEnemy( Mobile mob )
+ virtual int IsValidLocation()
+ virtual int IsValidLocation( Point3D p, Map m )
+ virtual void OnDelete()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnTrigger( Mobile from )
+ void PrivateOverheadLocalizedMessage( Mobile to, int number, int hue, string name, string args )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseFactionTrapDeed.html b/Docs/types/BaseFactionTrapDeed.html new file mode 100644 index 0000000..504a185 --- /dev/null +++ b/Docs/types/BaseFactionTrapDeed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseFactionTrapDeed + + +

Back to Server.Factions

+

BaseFactionTrapDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: FactionExplosionTrapDeed, FactionGasTrapDeed, FactionSawTrapDeed, FactionSpikeTrapDeed

+ (ctor) BaseFactionTrapDeed( Serial serial )
+ (ctor) BaseFactionTrapDeed( bool createdFromDeed )
+ (ctor) BaseFactionTrapDeed( int itemID )
+ Faction Faction( get; set; )
+ Type TrapType( get; )
+ virtual BaseFactionTrap Construct( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseFactionVendor.html b/Docs/types/BaseFactionVendor.html new file mode 100644 index 0000000..ad663d6 --- /dev/null +++ b/Docs/types/BaseFactionVendor.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BaseFactionVendor + + +

Back to Server.Factions

+

BaseFactionVendor : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: FactionBoardVendor, FactionBottleVendor, FactionHorseVendor, FactionOreVendor, FactionReagentVendor

+ (ctor) BaseFactionVendor( Serial serial )
+ (ctor) BaseFactionVendor( Town town, Faction faction, string title )
+ Faction Faction( get; set; )
+ List<SBInfo> SBInfos( get; )
+ Town Town( get; set; )
+ virtual bool CheckVendorAccess( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void OnAfterDelete()
+ virtual bool OnMoveOver( Mobile m )
+ void Register()
+ virtual void Serialize( GenericWriter writer )
+ void Unregister()
+ + diff --git a/Docs/types/BaseFamiliar.html b/Docs/types/BaseFamiliar.html new file mode 100644 index 0000000..85b924c --- /dev/null +++ b/Docs/types/BaseFamiliar.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BaseFamiliar + + +

Back to Server.Mobiles

+

BaseFamiliar : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: DarkWolfFamiliar, DeathAdder, HordeMinionFamiliar, ShadowWispFamiliar, VampireBatFamiliar

+

Nested Types: ReleaseEntry

+ (ctor) BaseFamiliar()
+ (ctor) BaseFamiliar( Serial serial )
+ bool BardImmune( get; )
+ bool Commandable( get; )
+ Poison PoisonImmune( get; )
+ virtual void BeginRelease( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DropPackContents()
+ virtual void EndRelease( Mobile from )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseFloor.html b/Docs/types/BaseFloor.html new file mode 100644 index 0000000..ab66d89 --- /dev/null +++ b/Docs/types/BaseFloor.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BaseFloor + + +

Back to Server.Items

+

BaseFloor : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BlueSlateFloorCenter, BricksFloor1, BricksFloor2, CaveFloorCenter, CaveFloorEast, CaveFloorNorth, CaveFloorSouth, CaveFloorWest, CobblestonesFloor, DarkSandstoneFloorN, DarkSandstoneFloorW, GreenMarbleFloor, GreyFlagstones, GreyMarbleFloor, GreySlateFloor, MarbleFloor, MarblePavers, SandFlagstones, SandstoneFloorN, SandstoneFloorW, StonePaversDark, StonePaversLight, StonePaversMedium

+ (ctor) BaseFloor( Serial serial )
+ (ctor) BaseFloor( int itemID, int count )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseFormTalisman.html b/Docs/types/BaseFormTalisman.html new file mode 100644 index 0000000..b83cfef --- /dev/null +++ b/Docs/types/BaseFormTalisman.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseFormTalisman + + +

Back to Server.Items

+

BaseFormTalisman : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITokunoDyable

+

Derived Types: CuSidheFormTalisman, FerretFormTalisman, ReptalonFormTalisman, SquirrelFormTalisman

+ (static) bool EntryEnabled( Mobile m, Type type )
+ (ctor) BaseFormTalisman()
+ (ctor) BaseFormTalisman( Serial serial )
+ TalismanForm Form( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseFruitTreeAddon.html b/Docs/types/BaseFruitTreeAddon.html new file mode 100644 index 0000000..421e786 --- /dev/null +++ b/Docs/types/BaseFruitTreeAddon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BaseFruitTreeAddon + + +

Back to Server.Items

+

BaseFruitTreeAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Derived Types: AppleTreeAddon, PeachTreeAddon

+ (ctor) BaseFruitTreeAddon()
+ (ctor) BaseFruitTreeAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ Item Fruit( get; )
+ int Fruits( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ void Respawn()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseGlovesOfMining.html b/Docs/types/BaseGlovesOfMining.html new file mode 100644 index 0000000..475c3fc --- /dev/null +++ b/Docs/types/BaseGlovesOfMining.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseGlovesOfMining + + +

Back to Server.Items

+

BaseGlovesOfMining : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: LeatherGlovesOfMining, RingmailGlovesOfMining, StuddedGlovesOfMining

+ (ctor) BaseGlovesOfMining( Serial serial )
+ (ctor) BaseGlovesOfMining( int bonus, int itemID )
+ int Bonus( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAdded( object parent )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseGranite.html b/Docs/types/BaseGranite.html new file mode 100644 index 0000000..654a3ca --- /dev/null +++ b/Docs/types/BaseGranite.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseGranite + + +

Back to Server.Items

+

BaseGranite : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: AgapiteGranite, BronzeGranite, CopperGranite, DullCopperGranite, GoldGranite, Granite, ShadowIronGranite, ValoriteGranite, VeriteGranite

+ (ctor) BaseGranite( CraftResource resource )
+ (ctor) BaseGranite( Serial serial )
+ double DefaultWeight( get; )
+ int LabelNumber( get; )
+ CraftResource Resource( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseGridGump.html b/Docs/types/BaseGridGump.html new file mode 100644 index 0000000..64bec5c --- /dev/null +++ b/Docs/types/BaseGridGump.html @@ -0,0 +1,40 @@ + + + RunUO Documentation - Class Overview - BaseGridGump + + +

Back to Server.Gumps

+

BaseGridGump : Gump

+

Derived Types: BatchGump, BatchScopeGump, CommandListGump, InterfaceGump, InterfaceItemGump, InterfaceMobileGump

+ (ctor) BaseGridGump( int x, int y )
+ int BackGumpID( get; )
+ int BorderSize( get; )
+ int CurrentPage( get; )
+ int CurrentX( get; )
+ int CurrentY( get; )
+ int EntryGumpID( get; )
+ int EntryHeight( get; )
+ int HeaderGumpID( get; )
+ int OffsetGumpID( get; )
+ int OffsetSize( get; )
+ int TextHue( get; )
+ int TextOffsetX( get; )
+ void AddBlankLine()
+ void AddEntryButton( int width, int normalID, int pressedID, int buttonID, int buttonWidth, int buttonHeight )
+ void AddEntryButton( int width, int normalID, int pressedID, int buttonID, int buttonWidth, int buttonHeight, int spannedEntries )
+ void AddEntryHeader( int width )
+ void AddEntryHeader( int width, int spannedEntries )
+ void AddEntryHtml( int width, string text )
+ void AddEntryLabel( int width, string text )
+ void AddEntryPageButton( int width, int normalID, int pressedID, int page, int buttonWidth, int buttonHeight )
+ void AddEntryText( int width, int entryID, string initialText )
+ void AddNewLine()
+ void AddNewPage()
+ string Center( string text )
+ string Color( string text, int color )
+ void FinishPage()
+ int GetButtonID( int typeCount, int type, int index )
+ void IncreaseX( int width )
+ bool SplitButtonID( int buttonID, int typeCount, out int type, out int index )
+ + diff --git a/Docs/types/BaseGuard.html b/Docs/types/BaseGuard.html new file mode 100644 index 0000000..148f50d --- /dev/null +++ b/Docs/types/BaseGuard.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseGuard + + +

Back to Server.Mobiles

+

BaseGuard : Mobile, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: ArcherGuard, WarriorGuard

+ (static) void Spawn( Mobile caller, Mobile target )
+ (static) void Spawn( Mobile caller, Mobile target, int amount, bool onlyAdditional )
+ (ctor) BaseGuard( Mobile target )
+ (ctor) BaseGuard( Serial serial )
+ Mobile Focus( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseGuild.html b/Docs/types/BaseGuild.html new file mode 100644 index 0000000..c468a74 --- /dev/null +++ b/Docs/types/BaseGuild.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - BaseGuild + + +

Back to Server.Guilds

+

BaseGuild : ISerializable

+

Derived Types: Guild

+ (static) Dictionary<Int32,BaseGuild> List( get; )
+ (static) BaseGuild Find( int id )
+ (static) BaseGuild FindByAbbrev( string abbr )
+ (static) BaseGuild FindByName( string name )
+ (static) List<BaseGuild> Search( string find )
+ (ctor) BaseGuild()
+ (ctor) BaseGuild( int Id )
+ string Abbreviation( get; set; )
+ bool Disbanded( get; )
+ int Id( get; )
+ string Name( get; set; )
+ int Server.ISerializable.SerialIdentity( get; )
+ int Server.ISerializable.TypeReference( get; )
+ GuildType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDelete( Mobile mob )
+ virtual void Serialize( GenericWriter writer )
+ virtual string ToString()
+ + diff --git a/Docs/types/BaseGuildGump.html b/Docs/types/BaseGuildGump.html new file mode 100644 index 0000000..df070b2 --- /dev/null +++ b/Docs/types/BaseGuildGump.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - BaseGuildGump + + +

Back to Server.Guilds

+

BaseGuildGump : Gump

+

Derived Types: BaseGuildListGump<T>, GuildAdvancedSearchGump, GuildInfoGump, GuildInvitationRequest, GuildMemberInfoGump, OtherGuildInfo, WarDeclarationGump

+ (static) bool CheckProfanity( string s )
+ (static) bool CheckProfanity( string s, int maxLength )
+ (static) string Color( string text, int color )
+ (static) bool IsLeader( Mobile m, Guild g )
+ (static) bool IsMember( Mobile m, Guild g )
+ (ctor) BaseGuildGump( PlayerMobile pm, Guild g )
+ (ctor) BaseGuildGump( PlayerMobile pm, Guild g, int x, int y )
+ Guild guild( get; )
+ PlayerMobile player( get; )
+ void AddHtmlText( int x, int y, int width, int height, TextDefinition text, bool back, bool scroll )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void PopulateGump()
+ + diff --git a/Docs/types/BaseGuildListGump-T-.html b/Docs/types/BaseGuildListGump-T-.html new file mode 100644 index 0000000..39d01aa --- /dev/null +++ b/Docs/types/BaseGuildListGump-T-.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BaseGuildListGump<T> + + +

Back to Server.Guilds

+

BaseGuildListGump<T> : BaseGuildGump

+ (ctor) BaseGuildListGump<T>( PlayerMobile pm, Guild g, List<T> list, IComparer<T> currentComparer, bool ascending, string filter, int startNumber, InfoField<T>[] fields )
+ bool WillFilter( get; )
+ virtual void DrawEndingEntry( int itemNumber )
+ virtual void DrawEntry( T o, int index, int itemNumber )
+ virtual Gump GetObjectInfoGump( PlayerMobile pm, Guild g, T o )
+ virtual Gump GetResentGump( PlayerMobile pm, Guild g, IComparer<T> comparer, bool ascending, string filter, int startNumber )
+ virtual TextDefinition[] GetValuesFor( T o, int aryLength )
+ virtual bool HasRelationship( T o )
+ virtual bool IsFiltered( T o, string filter )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void PopulateGump()
+ void ResendGump()
+ + diff --git a/Docs/types/BaseGuildmaster.html b/Docs/types/BaseGuildmaster.html new file mode 100644 index 0000000..d795e34 --- /dev/null +++ b/Docs/types/BaseGuildmaster.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - BaseGuildmaster + + +

Back to Server.Mobiles

+

BaseGuildmaster : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: BardGuildmaster, BlacksmithGuildmaster, FisherGuildmaster, HealerGuildmaster, MageGuildmaster, MerchantGuildmaster, MinerGuildmaster, RangerGuildmaster, TailorGuildmaster, ThiefGuildmaster, TinkerGuildmaster, WarriorGuildmaster

+ (ctor) BaseGuildmaster( Serial serial )
+ (ctor) BaseGuildmaster( string title )
+ bool ClickTitle( get; )
+ bool IsActiveVendor( get; )
+ TimeSpan JoinAge( get; )
+ int JoinCost( get; )
+ TimeSpan JoinGameAge( get; )
+ TimeSpan QuitAge( get; )
+ TimeSpan QuitGameAge( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual bool CheckCustomReqs( PlayerMobile pm )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void InitSBInfo()
+ virtual bool OnGoldGiven( Mobile from, Gold dropped )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void SayGuildTo( Mobile m )
+ virtual void SayPriceTo( Mobile m )
+ virtual void SayWelcomeTo( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool WasNamed( string speech )
+ + diff --git a/Docs/types/BaseHairInfo.html b/Docs/types/BaseHairInfo.html new file mode 100644 index 0000000..8d622bb --- /dev/null +++ b/Docs/types/BaseHairInfo.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BaseHairInfo + + +

Back to Server

+

BaseHairInfo

+

Derived Types: FacialHairInfo, HairInfo

+ (ctor) BaseHairInfo( GenericReader reader )
+ (ctor) BaseHairInfo( int itemid )
+ (ctor) BaseHairInfo( int itemid, int hue )
+ int Hue( get; set; )
+ int ItemID( get; set; )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseHarvestTool.html b/Docs/types/BaseHarvestTool.html new file mode 100644 index 0000000..e60df6a --- /dev/null +++ b/Docs/types/BaseHarvestTool.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - BaseHarvestTool + + +

Back to Server.Items

+

BaseHarvestTool : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+

Derived Types: Shovel, SturdyShovel

+

Nested Types: ToggleMiningStoneEntry

+ (static) void AddContextMenuEntries( Mobile from, Item item, List<ContextMenuEntry> list, HarvestSystem system )
+ (ctor) BaseHarvestTool( Serial serial )
+ (ctor) BaseHarvestTool( int itemID )
+ (ctor) BaseHarvestTool( int usesRemaining, int itemID )
+ Mobile Crafter( get; set; )
+ HarvestSystem HarvestSystem( get; )
+ ToolQuality Quality( get; set; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayDurabilityTo( Mobile m )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ int GetUsesScalar()
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ void ScaleUses()
+ virtual void Serialize( GenericWriter writer )
+ void UnscaleUses()
+ + diff --git a/Docs/types/BaseHat.html b/Docs/types/BaseHat.html new file mode 100644 index 0000000..616201b --- /dev/null +++ b/Docs/types/BaseHat.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BaseHat + + +

Back to Server.Items

+

BaseHat : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: Bandana, BearMask, Bonnet, Cap, ClothNinjaHood, DeerMask, FeatheredHat, FloppyHat, FlowerGarland, HornedTribalMask, JesterHat, JesterHatofChuckles, Kasa, MagicWizardsHat, OrcishKinMask, SavageMask, SkullCap, StrawHat, TallStrawHat, TribalMask, TricorneHat, WideBrimHat, WizardsHat

+ (ctor) BaseHat( int itemID )
+ (ctor) BaseHat( Serial serial )
+ (ctor) BaseHat( int itemID, int hue )
+ bool IsShipwreckedItem( get; set; )
+ virtual void AddEquipInfoAttributes( Mobile from, List<EquipInfoAttribute> attrs )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseHealPotion.html b/Docs/types/BaseHealPotion.html new file mode 100644 index 0000000..4173d51 --- /dev/null +++ b/Docs/types/BaseHealPotion.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseHealPotion + + +

Back to Server.Items

+

BaseHealPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: GreaterHealPotion, HealPotion, LesserHealPotion

+ (static) void ReleaseHealLock( object state )
+ (ctor) BaseHealPotion( Serial serial )
+ (ctor) BaseHealPotion( PotionEffect effect )
+ double Delay( get; )
+ int MaxHeal( get; )
+ int MinHeal( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoHeal( Mobile from )
+ virtual void Drink( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseHealer.html b/Docs/types/BaseHealer.html new file mode 100644 index 0000000..b2baedd --- /dev/null +++ b/Docs/types/BaseHealer.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BaseHealer + + +

Back to Server.Mobiles

+

BaseHealer : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: EvilHealer, EvilWanderingHealer, FortuneTeller, Healer, PricedHealer, WanderingHealer

+ (ctor) BaseHealer()
+ (ctor) BaseHealer( Serial serial )
+ bool HealsYoungPlayers( get; )
+ bool IsActiveVendor( get; )
+ bool IsInvulnerable( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual bool CheckResurrect( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetRobeColor()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void OfferHeal( PlayerMobile m )
+ virtual void OfferResurrection( Mobile m )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseHides.html b/Docs/types/BaseHides.html new file mode 100644 index 0000000..c8c7fef --- /dev/null +++ b/Docs/types/BaseHides.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BaseHides + + +

Back to Server.Items

+

BaseHides : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+

Derived Types: BarbedHides, Hides, HornedHides, SpinedHides

+ (ctor) BaseHides( Serial serial )
+ (ctor) BaseHides( CraftResource resource )
+ (ctor) BaseHides( CraftResource resource, int amount )
+ int LabelNumber( get; )
+ CraftResource Resource( get; set; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseHouse.html b/Docs/types/BaseHouse.html new file mode 100644 index 0000000..ac24037 --- /dev/null +++ b/Docs/types/BaseHouse.html @@ -0,0 +1,174 @@ + + + RunUO Documentation - Class Overview - BaseHouse + + +

Back to Server.Multis

+

BaseHouse : BaseMulti, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: Castle, GuildHouse, HouseFoundation, Keep, LargeMarbleHouse, LargePatioHouse, LogCabin, SandStonePatio, SmallOldHouse, SmallShop, SmallTower, Tower, TwoStoryHouse, TwoStoryVilla

+

Nested Types: FixColumnTimer, TransferItem

+ (static) int MaxBans( get; )
+ (static) int MaxFriends( get; )
+ (static) bool NewVendorSystem( get; )
+ (static) bool CheckAccessible( Mobile m, Item item )
+ (static) bool CheckHold( Mobile m, Container cont, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ (static) bool CheckLockedDown( Item item )
+ (static) bool CheckLockedDownOrSecured( Item item )
+ (static) bool CheckSecured( Item item )
+ (static) void Configure()
+ (static) void Decay_OnTick()
+ (static) BaseHouse FindHouseAt( Mobile m )
+ (static) BaseHouse FindHouseAt( Item item )
+ (static) BaseHouse FindHouseAt( Point3D loc, Map map, int height )
+ (static) List<BaseHouse> GetHouses( Mobile m )
+ (static) void HandleDeletion( Mobile mob )
+ (static) bool HasAccountHouse( Mobile m )
+ (static) bool HasHouse( Mobile m )
+ (static) void IsThereVendor( Point3D location, Map map, out bool vendor, out bool rentalContract )
+ (ctor) BaseHouse( Serial serial )
+ (ctor) BaseHouse( int multiID, Mobile owner, int MaxLockDown, int MaxSecure )
+ ArrayList Access( get; set; )
+ ArrayList Addons( get; set; )
+ Rectangle2D[] Area( get; )
+ Point3D BanLocation( get; set; )
+ ArrayList Bans( get; set; )
+ Point3D BaseBanLocation( get; )
+ double BonusStorageScalar( get; )
+ DateTime BuiltOn( get; set; )
+ bool CanDecay( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int ConvertOffsetX( get; )
+ int ConvertOffsetY( get; )
+ int ConvertOffsetZ( get; )
+ ArrayList CoOwners( get; set; )
+ DecayLevel DecayLevel( get; )
+ TimeSpan DecayPeriod( get; )
+ bool Decays( get; )
+ DecayType DecayType( get; )
+ int DefaultPrice( get; )
+ ArrayList Doors( get; set; )
+ ArrayList Friends( get; set; )
+ bool HasPersonalVendors( get; )
+ bool HasRentedVendors( get; )
+ ArrayList InternalizedVendors( get; )
+ bool IsActive( get; )
+ bool IsAosRules( get; )
+ DateTime LastRefreshed( get; set; )
+ DateTime LastTraded( get; set; )
+ int LockDownCount( get; )
+ ArrayList LockDowns( get; )
+ int MaxLockDowns( get; set; )
+ int MaxSecures( get; set; )
+ MovingCrate MovingCrate( get; set; )
+ Mobile Owner( get; set; )
+ ArrayList PlayerBarkeepers( get; )
+ ArrayList PlayerVendors( get; )
+ int Price( get; set; )
+ bool Public( get; set; )
+ Region Region( get; )
+ Point3D RelativeBanLocation( get; set; )
+ ArrayList RelocatedEntities( get; )
+ bool RestrictDecay( get; set; )
+ TimeSpan RestrictedPlacingTime( get; )
+ int SecureCount( get; )
+ ArrayList Secures( get; )
+ HouseSign Sign( get; set; )
+ ArrayList VendorInventories( get; )
+ ArrayList VendorRentalContracts( get; )
+ int Visits( get; set; )
+ void AddCoOwner( Mobile from, Mobile targ )
+ void AddDoor( BaseDoor door, int xoff, int yoff, int zoff )
+ BaseDoor AddEastDoor( int x, int y, int z )
+ BaseDoor AddEastDoor( int x, int y, int z, uint k )
+ BaseDoor AddEastDoor( bool wood, int x, int y, int z )
+ BaseDoor AddEastDoor( bool wood, int x, int y, int z, uint k )
+ void AddFriend( Mobile from, Mobile targ )
+ void AddSecure( Mobile m, Item item )
+ BaseDoor AddSouthDoor( int x, int y, int z )
+ BaseDoor AddSouthDoor( bool wood, int x, int y, int z )
+ BaseDoor AddSouthDoor( int x, int y, int z, uint k )
+ BaseDoor AddSouthDoor( bool wood, int x, int y, int z, uint k )
+ BaseDoor[] AddSouthDoors( int x, int y, int z )
+ BaseDoor[] AddSouthDoors( int x, int y, int z, uint k )
+ BaseDoor[] AddSouthDoors( bool wood, int x, int y, int z, bool inv )
+ BaseDoor[] AddSouthDoors( bool wood, int x, int y, int z, uint k )
+ void AddStrongBox( Mobile from )
+ void AddTrashBarrel( Mobile from )
+ bool AreThereAvailableVendorsFor( Mobile m )
+ ArrayList AvailableVendorsFor( Mobile m )
+ void Ban( Mobile from, Mobile targ )
+ void BeginConfirmTransfer( Mobile from, Mobile to )
+ virtual bool CanPlaceNewBarkeep()
+ virtual bool CanPlaceNewVendor()
+ void ChangeLocks( Mobile m )
+ virtual void ChangeSignType( int itemID )
+ bool CheckAccessibility( Item item, Mobile from )
+ bool CheckAccount( Mobile mobCheck, Mobile accCheck )
+ virtual bool CheckAosLockdowns( int need )
+ virtual bool CheckAosStorage( int need )
+ virtual bool CheckDecay()
+ SecureAccessResult CheckSecureAccess( Mobile m, Item item )
+ bool CheckTransferPosition( Mobile from, Mobile to )
+ void ConfirmTransfer_Callback( Mobile to, bool ok, object state )
+ uint CreateKeys( Mobile m )
+ virtual void Decay_Sandbox()
+ virtual void Deserialize( GenericReader reader )
+ void DropToMovingCrate( Item item )
+ void EndConfirmTransfer( Mobile from, Mobile to )
+ virtual Guildstone FindGuildstone()
+ void FixLockdowns_Sandbox()
+ virtual int GetAosCurLockdowns()
+ virtual int GetAosCurSecures( out int fromSecures, out int fromVendors, out int fromLockdowns, out int fromMovingCrate )
+ virtual HousePlacementEntry GetAosEntry()
+ virtual int GetAosMaxLockdowns()
+ virtual int GetAosMaxSecures()
+ virtual HouseDeed GetDeed()
+ List<IEntity> GetHouseEntities()
+ List<Item> GetItems()
+ int GetLockdowns()
+ List<Mobile> GetMobiles()
+ virtual int GetNewVendorSystemMaxVendors()
+ void GrantAccess( Mobile from, Mobile targ )
+ bool HasAccess( Mobile m )
+ bool HasSecureAccess( Mobile m, SecureLevel level )
+ bool InRange( IPoint2D from, int range )
+ bool IsBanned( Mobile m )
+ virtual bool IsCombatRestricted( Mobile m )
+ bool IsCoOwner( Mobile m )
+ bool IsFriend( Mobile m )
+ bool IsGuildMember( Mobile m )
+ bool IsInside( Item item )
+ bool IsInside( Mobile m )
+ virtual bool IsInside( Point3D p, int height )
+ bool IsLockedDown( Item check )
+ bool IsNewer( BaseHouse check, BaseHouse house )
+ bool IsOwner( Mobile m )
+ bool IsSecure( Item item )
+ void Kick( Mobile from, Mobile targ )
+ virtual void KillVendors()
+ bool LockDown( Mobile m, Item item )
+ bool LockDown( Mobile m, Item item, bool checkIsInside )
+ BaseDoor MakeDoor( bool wood, DoorFacing facing )
+ void MoveAllToCrate()
+ virtual void OnAfterDelete()
+ virtual void OnDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual bool RefreshDecay()
+ void Release( Mobile m, Item item )
+ void ReleaseSecure( Mobile m, Item item )
+ void RelocateEntities()
+ void RemoveAccess( Mobile from, Mobile targ )
+ void RemoveBan( Mobile from, Mobile targ )
+ void RemoveCoOwner( Mobile from, Mobile targ )
+ void RemoveFriend( Mobile from, Mobile targ )
+ void RemoveKeys( Mobile m )
+ void RemoveLocks()
+ void RestoreRelocatedEntities()
+ virtual void Serialize( GenericWriter writer )
+ void SetLockdown( Item i, bool locked )
+ void SetLockdown( Item i, bool locked, bool checkContains )
+ void SetSign( int xoff, int yoff, int zoff )
+ virtual void UpdateRegion()
+ + diff --git a/Docs/types/BaseHouseDoor.html b/Docs/types/BaseHouseDoor.html new file mode 100644 index 0000000..91ad3c9 --- /dev/null +++ b/Docs/types/BaseHouseDoor.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BaseHouseDoor + + +

Back to Server.Items

+

BaseHouseDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable, ISecurable

+

Derived Types: DarkWoodHouseDoor, GenericHouseDoor, MetalHouseDoor

+ (ctor) BaseHouseDoor( Serial serial )
+ (ctor) BaseHouseDoor( DoorFacing facing, int closedID, int openedID, int openedSound, int closedSound, Point3D offset )
+ DoorFacing Facing( get; set; )
+ SecureLevel Level( get; set; )
+ bool CheckAccess( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ BaseHouse FindHouse()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual bool IsInside( Mobile from )
+ virtual void OnOpened( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void Use( Mobile from )
+ virtual bool UseLocks()
+ + diff --git a/Docs/types/BaseImageTileButtonsGump.html b/Docs/types/BaseImageTileButtonsGump.html new file mode 100644 index 0000000..ae3545a --- /dev/null +++ b/Docs/types/BaseImageTileButtonsGump.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseImageTileButtonsGump + + +

Back to Server.Gumps

+

BaseImageTileButtonsGump : Gump

+

Derived Types: ToTRedeemGump, ToTTurnInGump

+ (ctor) BaseImageTileButtonsGump( TextDefinition header, ImageTileButtonInfo[] buttons )
+ (ctor) BaseImageTileButtonsGump( TextDefinition header, ArrayList buttons )
+ ImageTileButtonInfo[] Buttons( get; )
+ int XItems( get; )
+ int YItems( get; )
+ virtual void HandleButtonResponse( NetState sender, int adjustedButton, ImageTileButtonInfo buttonInfo )
+ virtual void HandleCancel( NetState sender )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/BaseImprisonedMobile.html b/Docs/types/BaseImprisonedMobile.html new file mode 100644 index 0000000..c0776d2 --- /dev/null +++ b/Docs/types/BaseImprisonedMobile.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BaseImprisonedMobile + + +

Back to Server.Items

+

BaseImprisonedMobile : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: GrizzledMareStatuette

+ (ctor) BaseImprisonedMobile( int itemID )
+ (ctor) BaseImprisonedMobile( Serial serial )
+ BaseCreature Summon( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Release( Mobile from, BaseCreature summon )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseInfo.html b/Docs/types/BaseInfo.html new file mode 100644 index 0000000..d0bbf5b --- /dev/null +++ b/Docs/types/BaseInfo.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BaseInfo + + +

Back to Server.Engines.Reports

+

BaseInfo : IComparable

+

Derived Types: StaffInfo, UserInfo

+ (static) TimeSpan SortRange( get; set; )
+ (ctor) BaseInfo( string account )
+ string Account( get; set; )
+ string Display( get; )
+ PageInfoCollection Pages( get; set; )
+ virtual int CompareTo( object obj )
+ int GetPageCount( PageResolution res, DateTime min, DateTime max )
+ void Register( PageInfo page )
+ void Unregister( PageInfo page )
+ + diff --git a/Docs/types/BaseIngot.html b/Docs/types/BaseIngot.html new file mode 100644 index 0000000..b88754c --- /dev/null +++ b/Docs/types/BaseIngot.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - BaseIngot + + +

Back to Server.Items

+

BaseIngot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+

Derived Types: AgapiteIngot, BronzeIngot, CopperIngot, DullCopperIngot, GoldIngot, IronIngot, ShadowIronIngot, ValoriteIngot, VeriteIngot

+ (ctor) BaseIngot( Serial serial )
+ (ctor) BaseIngot( CraftResource resource )
+ (ctor) BaseIngot( CraftResource resource, int amount )
+ double DefaultWeight( get; )
+ int LabelNumber( get; )
+ CraftResource Resource( get; set; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseInstrument.html b/Docs/types/BaseInstrument.html new file mode 100644 index 0000000..dc33608 --- /dev/null +++ b/Docs/types/BaseInstrument.html @@ -0,0 +1,51 @@ + + + RunUO Documentation - Class Overview - BaseInstrument + + +

Back to Server.Items

+

BaseInstrument : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+

Derived Types: BambooFlute, Drums, Harp, LapHarp, Lute, Tambourine, TambourineTassel

+

Nested Types: InternalTimer

+ (static) bool CheckMusicianship( Mobile m )
+ (static) int GetBardRange( Mobile bard, SkillName skill )
+ (static) double GetBaseDifficulty( Mobile targ )
+ (static) BaseInstrument GetInstrument( Mobile from )
+ (static) int GetPoisonLevel( BaseCreature bc )
+ (static) bool IsFireBreathingCreature( BaseCreature bc )
+ (static) bool IsMageryCreature( BaseCreature bc )
+ (static) bool IsPoisonImmune( BaseCreature bc )
+ (static) void OnPickedInstrument( Mobile from, object targeted, object state )
+ (static) void PickInstrument( Mobile from, InstrumentPickedCallback callback )
+ (static) void SetInstrument( Mobile from, BaseInstrument item )
+ (ctor) BaseInstrument( Serial serial )
+ (ctor) BaseInstrument( int itemID, int wellSound, int badlySound )
+ TimeSpan ChargeReplenishRate( get; )
+ Mobile Crafter( get; set; )
+ int FailureSound( get; set; )
+ int InitMaxUses( get; )
+ int InitMinUses( get; )
+ DateTime LastReplenished( get; set; )
+ InstrumentQuality Quality( get; set; )
+ bool ReplenishesCharges( get; set; )
+ SlayerName Slayer( get; set; )
+ SlayerName Slayer2( get; set; )
+ int SuccessSound( get; set; )
+ int UsesRemaining( get; set; )
+ void CheckReplenishUses()
+ void CheckReplenishUses( bool invalidate )
+ void ConsumeUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ double GetDifficultyFor( Mobile targ )
+ virtual void GetProperties( ObjectPropertyList list )
+ int GetUsesScalar()
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ void PlayInstrumentBadly( Mobile from )
+ void PlayInstrumentWell( Mobile from )
+ void ScaleUses()
+ virtual void Serialize( GenericWriter writer )
+ void UnscaleUses()
+ + diff --git a/Docs/types/BaseJewel.html b/Docs/types/BaseJewel.html new file mode 100644 index 0000000..f054631 --- /dev/null +++ b/Docs/types/BaseJewel.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - BaseJewel + + +

Back to Server.Items

+

BaseJewel : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: BaseBracelet, BaseEarrings, BaseNecklace, BaseRing, EarringsOfProtection, LuckyNecklace

+ (ctor) BaseJewel( Serial serial )
+ (ctor) BaseJewel( int itemID, Layer layer )
+ int ArtifactRarity( get; )
+ AosAttributes Attributes( get; set; )
+ int BaseGemTypeNumber( get; )
+ int ColdResistance( get; )
+ int EnergyResistance( get; )
+ int FireResistance( get; )
+ GemType GemType( get; set; )
+ int HitPoints( get; set; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ int MaxHitPoints( get; set; )
+ int PhysicalResistance( get; )
+ int PoisonResistance( get; )
+ AosElementAttributes Resistances( get; set; )
+ CraftResource Resource( get; set; )
+ AosSkillBonuses SkillBonuses( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDuped( Item newItem )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseKnife.html b/Docs/types/BaseKnife.html new file mode 100644 index 0000000..08c1c0b --- /dev/null +++ b/Docs/types/BaseKnife.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BaseKnife + + +

Back to Server.Items

+

BaseKnife : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: AssassinSpike, ButcherKnife, Cleaver, Dagger, ElvenSpellblade, Kama, Lajatang, Leafblade, Sai, SkinningKnife, Tekagi, WarCleaver

+ (ctor) BaseKnife( Serial serial )
+ (ctor) BaseKnife( int itemID )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseLeather.html b/Docs/types/BaseLeather.html new file mode 100644 index 0000000..663607a --- /dev/null +++ b/Docs/types/BaseLeather.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BaseLeather + + +

Back to Server.Items

+

BaseLeather : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+

Derived Types: BarbedLeather, HornedLeather, Leather, SpinedLeather

+ (ctor) BaseLeather( Serial serial )
+ (ctor) BaseLeather( CraftResource resource )
+ (ctor) BaseLeather( CraftResource resource, int amount )
+ int LabelNumber( get; )
+ CraftResource Resource( get; set; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseLight.html b/Docs/types/BaseLight.html new file mode 100644 index 0000000..4b40f56 --- /dev/null +++ b/Docs/types/BaseLight.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - BaseLight + + +

Back to Server.Items

+

BaseLight : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BaseEquipableLight, Brazier, BrazierTall, Candelabra, CandelabraStand, CandleLarge, CandleLong, CandleShort, CandleSkull, HangingLantern, HeatingStand, LampPost1, LampPost2, LampPost3, PaperLantern, RedHangingLantern, RoundPaperLantern, ShojiLantern, WallSconce, WallTorch, WhiteHangingLantern

+

Nested Types: InternalTimer

+ (ctor) BaseLight( Serial serial )
+ (ctor) BaseLight( int itemID )
+ bool Burning( get; set; )
+ bool BurntOut( get; set; )
+ int BurntOutItemID( get; )
+ int BurntOutSound( get; )
+ TimeSpan Duration( get; set; )
+ int LitItemID( get; )
+ int LitSound( get; )
+ bool Protected( get; set; )
+ int UnlitItemID( get; )
+ int UnlitSound( get; )
+ virtual void Burn()
+ virtual void Deserialize( GenericReader reader )
+ void DoTimer( TimeSpan delay )
+ virtual void Douse()
+ virtual void Ignite()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void PlayLitSound()
+ virtual void PlayUnlitSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseMagicFish.html b/Docs/types/BaseMagicFish.html new file mode 100644 index 0000000..6b57eec --- /dev/null +++ b/Docs/types/BaseMagicFish.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BaseMagicFish + + +

Back to Server.Items

+

BaseMagicFish : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: PeculiarFish, PrizedFish, TrulyRareFish, WondrousFish

+ (ctor) BaseMagicFish( int hue )
+ (ctor) BaseMagicFish( Serial serial )
+ int Bonus( get; )
+ double DefaultWeight( get; )
+ StatType Type( get; )
+ virtual bool Apply( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseMeleeWeapon.html b/Docs/types/BaseMeleeWeapon.html new file mode 100644 index 0000000..d8b14d9 --- /dev/null +++ b/Docs/types/BaseMeleeWeapon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseMeleeWeapon + + +

Back to Server.Items

+

BaseMeleeWeapon : BaseWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BaseAxe, BaseBashing, BaseKnife, BasePoleArm, BaseRanged, BaseSpear, BaseStaff, BaseSword, Fists

+ (ctor) BaseMeleeWeapon( int itemID )
+ (ctor) BaseMeleeWeapon( Serial serial )
+ virtual int AbsorbDamage( Mobile attacker, Mobile defender, int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseMiddleTorso.html b/Docs/types/BaseMiddleTorso.html new file mode 100644 index 0000000..3556f42 --- /dev/null +++ b/Docs/types/BaseMiddleTorso.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseMiddleTorso + + +

Back to Server.Items

+

BaseMiddleTorso : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: BodySash, Doublet, FormalShirt, FullApron, JesterSuit, JinBaori, Surcoat, Tunic

+ (ctor) BaseMiddleTorso( Serial serial )
+ (ctor) BaseMiddleTorso( int itemID )
+ (ctor) BaseMiddleTorso( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseMonolith.html b/Docs/types/BaseMonolith.html new file mode 100644 index 0000000..05e10f5 --- /dev/null +++ b/Docs/types/BaseMonolith.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BaseMonolith + + +

Back to Server.Factions

+

BaseMonolith : BaseSystemController, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: StrongholdMonolith, TownMonolith

+ (static) List<BaseMonolith> Monoliths( get; set; )
+ (ctor) BaseMonolith( Serial serial )
+ (ctor) BaseMonolith( Town town, Faction faction )
+ Faction Faction( get; set; )
+ Sigil Sigil( get; set; )
+ Town Town( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void OnTownChanged()
+ virtual void Serialize( GenericWriter writer )
+ virtual void UpdateSigil()
+ + diff --git a/Docs/types/BaseMount.html b/Docs/types/BaseMount.html new file mode 100644 index 0000000..e632690 --- /dev/null +++ b/Docs/types/BaseMount.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - BaseMount + + +

Back to Server.Mobiles

+

BaseMount : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+

Derived Types: BaseWarHorse, Beetle, CuSidhe, DesertOstard, FactionWarHorse, FireBeetle, FireSteed, ForestOstard, FrenziedOstard, HellSteed, Hiryu, HolySteed, Horse, Kirin, LesserHiryu, Nightmare, Reptalon, RidableLlama, Ridgeback, SavageRidgeback, ScaledSwampDragon, SeaHorse, SilverSteed, SkeletalMount, SwampDragon, UnholySteed, Unicorn

+

Nested Types: BlockEntry

+ (static) bool CheckMountAllowed( Mobile mob, bool message )
+ (static) void ClearMountPrevention( Mobile mob )
+ (static) void Dismount( Mobile m )
+ (static) BlockMountType GetMountPrevention( Mobile mob )
+ (static) void SetMountPrevention( Mobile mob, BlockMountType type, TimeSpan duration )
+ (ctor) BaseMount( Serial serial )
+ (ctor) BaseMount( string name, int bodyID, int itemID, AIType aiType, FightMode fightMode, int rangePerception, int rangeFight, double activeSpeed, double passiveSpeed )
+ bool AllowFemaleRider( get; )
+ bool AllowMaleRider( get; )
+ int Hue( get; set; )
+ Item InternalItem( get; )
+ int ItemID( get; set; )
+ TimeSpan MountAbilityDelay( get; )
+ DateTime NextMountAbility( get; set; )
+ Mobile Rider( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool DoMountAbility( int damage, Mobile attacker )
+ virtual void OnAfterDelete()
+ virtual bool OnBeforeDeath()
+ virtual void OnDelete()
+ virtual void OnDisallowedRider( Mobile m )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnRiderDamaged( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseMulti.html b/Docs/types/BaseMulti.html new file mode 100644 index 0000000..44823d2 --- /dev/null +++ b/Docs/types/BaseMulti.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BaseMulti + + +

Back to Server.Items

+

BaseMulti : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BaseBoat, BaseCamp, BaseHouse, PreviewHouse

+ (ctor) BaseMulti( int itemID )
+ (ctor) BaseMulti( Serial serial )
+ MultiComponentList Components( get; )
+ int ItemID( get; set; )
+ int LabelNumber( get; )
+ virtual bool Contains( IPoint3D p )
+ bool Contains( Mobile m )
+ bool Contains( Item item )
+ virtual bool Contains( Point3D p )
+ virtual bool Contains( Point2D p )
+ virtual bool Contains( int x, int y )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetMaxUpdateRange()
+ virtual int GetUpdateRange( Mobile m )
+ virtual void RefreshComponents()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseNecklace.html b/Docs/types/BaseNecklace.html new file mode 100644 index 0000000..e643870 --- /dev/null +++ b/Docs/types/BaseNecklace.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseNecklace + + +

Back to Server.Items

+

BaseNecklace : BaseJewel, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: GoldBeadNecklace, GoldNecklace, Necklace, SilverBeadNecklace, SilverNecklace

+ (ctor) BaseNecklace( int itemID )
+ (ctor) BaseNecklace( Serial serial )
+ int BaseGemTypeNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseOre.html b/Docs/types/BaseOre.html new file mode 100644 index 0000000..625283a --- /dev/null +++ b/Docs/types/BaseOre.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - BaseOre + + +

Back to Server.Items

+

BaseOre : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+

Derived Types: AgapiteOre, BronzeOre, CopperOre, DullCopperOre, GoldOre, IronOre, ShadowIronOre, ValoriteOre, VeriteOre

+

Nested Types: InternalTarget

+ (ctor) BaseOre( Serial serial )
+ (ctor) BaseOre( CraftResource resource )
+ (ctor) BaseOre( CraftResource resource, int amount )
+ int LabelNumber( get; )
+ CraftResource Resource( get; set; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseOuterLegs.html b/Docs/types/BaseOuterLegs.html new file mode 100644 index 0000000..8bf7833 --- /dev/null +++ b/Docs/types/BaseOuterLegs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseOuterLegs + + +

Back to Server.Items

+

BaseOuterLegs : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: FurSarong, Hakama, Kilt, Skirt

+ (ctor) BaseOuterLegs( Serial serial )
+ (ctor) BaseOuterLegs( int itemID )
+ (ctor) BaseOuterLegs( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseOuterTorso.html b/Docs/types/BaseOuterTorso.html new file mode 100644 index 0000000..d28b891 --- /dev/null +++ b/Docs/types/BaseOuterTorso.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseOuterTorso + + +

Back to Server.Items

+

BaseOuterTorso : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: EmbroideredOakLeafCloak, FancyDress, FemaleElvenRobe, FemaleKimono, GildedDress, HakamaShita, HoodedShroudOfShadows, Kamishimo, MaleElvenRobe, MaleKimono, MonkRobe, PlainDress, RewardDress, RewardRobe, Robe, RobeOfTheEclipse, RobeOfTheEquinox, TheMostKnowledgePerson, TheRobeOfBritanniaAri

+ (ctor) BaseOuterTorso( Serial serial )
+ (ctor) BaseOuterTorso( int itemID )
+ (ctor) BaseOuterTorso( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BasePacketProfile.html b/Docs/types/BasePacketProfile.html new file mode 100644 index 0000000..04af138 --- /dev/null +++ b/Docs/types/BasePacketProfile.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BasePacketProfile + + +

Back to Server.Diagnostics

+

BasePacketProfile : BaseProfile

+

Derived Types: PacketReceiveProfile, PacketSendProfile

+ (ctor) BasePacketProfile( string name )
+ double AverageLength( get; )
+ long TotalLength( get; )
+ void Finish( int length )
+ virtual void WriteTo( TextWriter op )
+ + diff --git a/Docs/types/BasePants.html b/Docs/types/BasePants.html new file mode 100644 index 0000000..f0e2bb5 --- /dev/null +++ b/Docs/types/BasePants.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BasePants + + +

Back to Server.Items

+

BasePants : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: ElvenPants, LongPants, ShortPants, TattsukeHakama

+ (ctor) BasePants( Serial serial )
+ (ctor) BasePants( int itemID )
+ (ctor) BasePants( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BasePiece.html b/Docs/types/BasePiece.html new file mode 100644 index 0000000..7e7b217 --- /dev/null +++ b/Docs/types/BasePiece.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BasePiece + + +

Back to Server.Items

+

BasePiece : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: PieceBlackBishop, PieceBlackChecker, PieceBlackKing, PieceBlackKnight, PieceBlackPawn, PieceBlackQueen, PieceBlackRook, PieceWhiteBishop, PieceWhiteChecker, PieceWhiteKing, PieceWhiteKnight, PieceWhitePawn, PieceWhiteQueen, PieceWhiteRook

+ (ctor) BasePiece( Serial serial )
+ (ctor) BasePiece( int itemID, BaseBoard board )
+ BaseBoard Board( get; set; )
+ bool CanTarget( get; )
+ bool IsVirtualItem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool DropToItem( Mobile from, Item target, Point3D p )
+ virtual bool DropToMobile( Mobile from, Mobile target, Point3D p )
+ virtual bool DropToWorld( Mobile from, Point3D p )
+ virtual int GetLiftSound( Mobile from )
+ virtual bool OnDragLift( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BasePigmentsOfTokuno.html b/Docs/types/BasePigmentsOfTokuno.html new file mode 100644 index 0000000..a658240 --- /dev/null +++ b/Docs/types/BasePigmentsOfTokuno.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - BasePigmentsOfTokuno + + +

Back to Server.Items

+

BasePigmentsOfTokuno : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining

+

Derived Types: LesserPigmentsOfTokuno, MetalPigmentsOfTokuno, PigmentsOfTokuno

+ (static) bool IsInTypeList( Type t, Type[] list )
+ (static) bool IsValidItem( Item i )
+ (ctor) BasePigmentsOfTokuno()
+ (ctor) BasePigmentsOfTokuno( Serial serial )
+ (ctor) BasePigmentsOfTokuno( int uses )
+ bool InheritsItem( get; )
+ TextDefinition Label( get; set; )
+ int LabelNumber( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ void InternalCallback( Mobile from, object targeted, object state )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BasePlayerBB.html b/Docs/types/BasePlayerBB.html new file mode 100644 index 0000000..aa17f08 --- /dev/null +++ b/Docs/types/BasePlayerBB.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - BasePlayerBB + + +

Back to Server.Items

+

BasePlayerBB : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Derived Types: PlayerBBEast, PlayerBBSouth

+

Nested Types: PostPrompt, SetTitlePrompt

+ (static) bool CheckAccess( BaseHouse house, Mobile from )
+ (ctor) BasePlayerBB( int itemID )
+ (ctor) BasePlayerBB( Serial serial )
+ PlayerBBMessage Greeting( get; set; )
+ SecureLevel Level( get; set; )
+ List<PlayerBBMessage> Messages( get; )
+ string Title( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BasePoisonPotion.html b/Docs/types/BasePoisonPotion.html new file mode 100644 index 0000000..3dccf93 --- /dev/null +++ b/Docs/types/BasePoisonPotion.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BasePoisonPotion + + +

Back to Server.Items

+

BasePoisonPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: DeadlyPoisonPotion, GreaterPoisonPotion, LesserPoisonPotion, PoisonPotion

+ (ctor) BasePoisonPotion( Serial serial )
+ (ctor) BasePoisonPotion( PotionEffect effect )
+ double MaxPoisoningSkill( get; )
+ double MinPoisoningSkill( get; )
+ Poison Poison( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoPoison( Mobile from )
+ virtual void Drink( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BasePoleArm.html b/Docs/types/BasePoleArm.html new file mode 100644 index 0000000..2dcc694 --- /dev/null +++ b/Docs/types/BasePoleArm.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - BasePoleArm + + +

Back to Server.Items

+

BasePoleArm : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+

Derived Types: Bardiche, Halberd, Scythe

+ (ctor) BasePoleArm( Serial serial )
+ (ctor) BasePoleArm( int itemID )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ HarvestSystem HarvestSystem( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BasePotion.html b/Docs/types/BasePotion.html new file mode 100644 index 0000000..1924df2 --- /dev/null +++ b/Docs/types/BasePotion.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - BasePotion + + +

Back to Server.Items

+

BasePotion : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: BaseAgilityPotion, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseCurePotion, BaseExplosionPotion, BaseHealPotion, BasePoisonPotion, BaseRefreshPotion, BaseStrengthPotion, NightSightPotion

+ (static) int EnhancePotions( Mobile m )
+ (static) bool HasFreeHand( Mobile m )
+ (static) void PlayDrinkEffect( Mobile m )
+ (static) int Scale( Mobile m, int v )
+ (static) double Scale( Mobile m, double v )
+ (static) TimeSpan Scale( Mobile m, TimeSpan v )
+ (ctor) BasePotion( Serial serial )
+ (ctor) BasePotion( int itemID, PotionEffect effect )
+ int LabelNumber( get; )
+ PotionEffect PotionEffect( get; set; )
+ bool RequireFreeHand( get; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Drink( Mobile from )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool StackWith( Mobile from, Item dropped, bool playSound )
+ + diff --git a/Docs/types/BaseProfile.html b/Docs/types/BaseProfile.html new file mode 100644 index 0000000..f49796b --- /dev/null +++ b/Docs/types/BaseProfile.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BaseProfile + + +

Back to Server.Diagnostics

+

BaseProfile

+

Derived Types: BasePacketProfile, GumpProfile, TargetProfile, TimerProfile

+ (static) int b__0( T a, T b )
+ (static) void WriteAll( TextWriter op, IEnumerable<T> profiles )
+ (ctor) BaseProfile( string name )
+ TimeSpan AverageTime( get; )
+ long Count( get; )
+ string Name( get; )
+ TimeSpan PeakTime( get; )
+ TimeSpan TotalTime( get; )
+ virtual void Finish()
+ virtual void Start()
+ virtual void WriteTo( TextWriter op )
+ + diff --git a/Docs/types/BaseQuestGump.html b/Docs/types/BaseQuestGump.html new file mode 100644 index 0000000..5e6787f --- /dev/null +++ b/Docs/types/BaseQuestGump.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BaseQuestGump + + +

Back to Server.Engines.Quests

+

BaseQuestGump : Gump

+

Derived Types: QuestCancelGump, QuestConversationsGump, QuestItemInfoGump, QuestLogUpdatedGump, QuestObjectivesGump, QuestOfferGump, SheetMusicOfferGump

+ (static) ArrayList BuildList( object obj )
+ (static) int C16216( int c16 )
+ (static) int C16232( int c16 )
+ (static) int C32216( int c32 )
+ (static) string Color( string text, int color )
+ (ctor) BaseQuestGump( int x, int y )
+ void AddHtmlObject( int x, int y, int width, int height, object message, int color, bool back, bool scroll )
+ + diff --git a/Docs/types/BaseQuester.html b/Docs/types/BaseQuester.html new file mode 100644 index 0000000..6139518 --- /dev/null +++ b/Docs/types/BaseQuester.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - BaseQuester + + +

Back to Server.Engines.Quests

+

BaseQuester : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: AlbertaGiacco, AnsellaGryen, BaseAmbitiousSolenQueen, BaseSolenMatriarch, Blackheart, Chyloth, Dryad, ElwoodMcCarrin, Emino, EnshroudedFigure, GabrielPiete, Grizelda, Haochi, HaochisGuardsman, HiddenFigure, Horus, Impresario, JedahEntille, Maabus, MansionGuard, Mardoth, MilitiaCanoneer, Naturalist, Relnia, Schmendrick, TomasONeerlan, Uzeraan, Victoria, Zeefzorpul, Zoel

+ (static) Container GetNewContainer()
+ (ctor) BaseQuester()
+ (ctor) BaseQuester( Serial serial )
+ (ctor) BaseQuester( string title )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ bool DisallowAllMoves( get; )
+ bool IsActiveVendor( get; )
+ bool IsInvulnerable( get; )
+ List<SBInfo> SBInfos( get; )
+ int TalkNumber( get; )
+ virtual void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual bool CanBeDamaged()
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ void FocusTo( Mobile to )
+ virtual int GetAutoTalkRange( PlayerMobile m )
+ virtual void InitSBInfo()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ Item SetHue( Item item, int hue )
+ + diff --git a/Docs/types/BaseQuiver.html b/Docs/types/BaseQuiver.html new file mode 100644 index 0000000..02d90c8 --- /dev/null +++ b/Docs/types/BaseQuiver.html @@ -0,0 +1,43 @@ + + + RunUO Documentation - Class Overview - BaseQuiver + + +

Back to Server.Items

+

BaseQuiver : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: ElvenQuiver, QuiverOfElements, QuiverOfInfinity, QuiverOfRage

+

Nested Types: SaveFlag

+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (ctor) BaseQuiver()
+ (ctor) BaseQuiver( Serial serial )
+ (ctor) BaseQuiver( int itemID )
+ Item Ammo( get; )
+ AosAttributes Attributes( get; set; )
+ int Capacity( get; set; )
+ Mobile Crafter( get; set; )
+ int DamageIncrease( get; set; )
+ int DefaultGumpID( get; )
+ int DefaultMaxItems( get; )
+ int DefaultMaxWeight( get; )
+ double DefaultWeight( get; )
+ int LowerAmmoCost( get; set; )
+ ClothingQuality Quality( get; set; )
+ int WeightReduction( get; set; )
+ virtual void AddItem( Item dropped )
+ virtual void AlterBowDamage( ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy, ref int chaos, ref int direct )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ bool CheckType( Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int GetTotal( TotalType type )
+ void InvalidateWeight()
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDuped( Item newItem )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnRemoved( object parent )
+ virtual void RemoveItem( Item dropped )
+ virtual void Serialize( GenericWriter writer )
+ virtual void UpdateTotal( Item sender, TotalType type, int delta )
+ + diff --git a/Docs/types/BaseRanged.html b/Docs/types/BaseRanged.html new file mode 100644 index 0000000..1ce1a60 --- /dev/null +++ b/Docs/types/BaseRanged.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - BaseRanged + + +

Back to Server.Items

+

BaseRanged : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: Bow, CompositeBow, Crossbow, ElvenCompositeLongbow, HeavyCrossbow, MagicalShortbow, RepeatingCrossbow, Yumi

+ (ctor) BaseRanged( int itemID )
+ (ctor) BaseRanged( Serial serial )
+ SkillName AccuracySkill( get; )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ bool Balanced( get; set; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int EffectID( get; )
+ int Velocity( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnFired( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void OnMiss( Mobile attacker, Mobile defender )
+ virtual TimeSpan OnSwing( Mobile attacker, Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseReagent.html b/Docs/types/BaseReagent.html new file mode 100644 index 0000000..38cd80d --- /dev/null +++ b/Docs/types/BaseReagent.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BaseReagent + + +

Back to Server.Items

+

BaseReagent : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BatWing, BlackPearl, Bloodmoss, DaemonBlood, DaemonBone, DeadWood, Garlic, Ginseng, GraveDust, MandrakeRoot, Nightshade, NoxCrystal, PigIron, SpidersSilk, SulfurousAsh

+ (ctor) BaseReagent( Serial serial )
+ (ctor) BaseReagent( int itemID )
+ (ctor) BaseReagent( int itemID, int amount )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseRefreshPotion.html b/Docs/types/BaseRefreshPotion.html new file mode 100644 index 0000000..73f3cc8 --- /dev/null +++ b/Docs/types/BaseRefreshPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BaseRefreshPotion + + +

Back to Server.Items

+

BaseRefreshPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: RefreshPotion, TotalRefreshPotion

+ (ctor) BaseRefreshPotion( PotionEffect effect )
+ (ctor) BaseRefreshPotion( Serial serial )
+ double Refresh( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Drink( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseRegion.html b/Docs/types/BaseRegion.html new file mode 100644 index 0000000..618d053 --- /dev/null +++ b/Docs/types/BaseRegion.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - BaseRegion + + +

Back to Server.Regions

+

BaseRegion : Region, IComparable

+

Derived Types: CancelQuestRegion, ChampionSpawnRegion, DungeonRegion, GauntletRegion, GreenAcres, GuardedRegion, HouseRaffleRegion, HouseRegion, Jail, LampRoomRegion, LeverPuzzleRegion, NoHousingRegion, QuestCompleteObjectiveRegion, QuestNoEntryRegion, QuestOfferRegion, StrongholdRegion, TempNoHousingRegion, TreasureRegion

+ (static) bool CanSpawn( Region region, Type[] types )
+ (static) void Configure()
+ (static) string GetRuneNameFor( Region region )
+ (ctor) BaseRegion( XmlElement xml, Map map, Region parent )
+ (ctor) BaseRegion( string name, Map map, Region parent, Rectangle3D[] area )
+ (ctor) BaseRegion( string name, Map map, int priority, Rectangle3D[] area )
+ (ctor) BaseRegion( string name, Map map, int priority, Rectangle2D[] area )
+ (ctor) BaseRegion( string name, Map map, Region parent, Rectangle2D[] area )
+ bool ExcludeFromParentSpawns( get; set; )
+ bool NoLogoutDelay( get; set; )
+ string RuneName( get; set; )
+ SpawnEntry[] Spawns( get; set; )
+ SpawnZLevel SpawnZLevel( get; set; )
+ bool YoungProtected( get; )
+ virtual bool AcceptsSpawnsFrom( Region region )
+ virtual TimeSpan GetLogoutDelay( Mobile m )
+ void InitRectangles()
+ virtual void OnEnter( Mobile m )
+ virtual void OnUnregister()
+ Point3D RandomSpawnLocation( int spawnHeight, bool land, bool water, Point3D home, int range )
+ virtual string ToString()
+ + diff --git a/Docs/types/BaseRejuvinationAnkh.html b/Docs/types/BaseRejuvinationAnkh.html new file mode 100644 index 0000000..a89bb02 --- /dev/null +++ b/Docs/types/BaseRejuvinationAnkh.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BaseRejuvinationAnkh + + +

Back to Server.Items

+

BaseRejuvinationAnkh : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Derived Types: RejuvinationAnkhNorth, RejuvinationAnkhWest

+ (ctor) BaseRejuvinationAnkh()
+ (ctor) BaseRejuvinationAnkh( Serial serial )
+ bool HandlesOnMovement( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseRing.html b/Docs/types/BaseRing.html new file mode 100644 index 0000000..002111f --- /dev/null +++ b/Docs/types/BaseRing.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseRing + + +

Back to Server.Items

+

BaseRing : BaseJewel, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: GoldRing, SilverRing

+ (ctor) BaseRing( int itemID )
+ (ctor) BaseRing( Serial serial )
+ int BaseGemTypeNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseRunicTool.html b/Docs/types/BaseRunicTool.html new file mode 100644 index 0000000..a66db13 --- /dev/null +++ b/Docs/types/BaseRunicTool.html @@ -0,0 +1,44 @@ + + + RunUO Documentation - Class Overview - BaseRunicTool + + +

Back to Server.Items

+

BaseRunicTool : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+

Derived Types: RunicDovetailSaw, RunicHammer, RunicSewingKit

+ (static) void ApplyAttribute( AosAttributes attrs, int min, int max, AosAttribute attr, int low, int high )
+ (static) void ApplyAttribute( AosArmorAttributes attrs, int min, int max, AosArmorAttribute attr, int low, int high )
+ (static) void ApplyAttribute( AosWeaponAttributes attrs, int min, int max, AosWeaponAttribute attr, int low, int high )
+ (static) void ApplyAttribute( AosElementAttributes attrs, int min, int max, AosElementAttribute attr, int low, int high )
+ (static) void ApplyAttribute( AosArmorAttributes attrs, int min, int max, AosArmorAttribute attr, int low, int high, int scale )
+ (static) void ApplyAttribute( AosElementAttributes attrs, int min, int max, AosElementAttribute attr, int low, int high, int scale )
+ (static) void ApplyAttribute( AosWeaponAttributes attrs, int min, int max, AosWeaponAttribute attr, int low, int high, int scale )
+ (static) void ApplyAttribute( AosAttributes attrs, int min, int max, AosAttribute attr, int low, int high, int scale )
+ (static) void ApplyAttributesTo( BaseJewel jewelry, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( BaseWeapon weapon, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( BaseHat hat, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( Spellbook spellbook, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( BaseArmor armor, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( BaseArmor armor, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( BaseWeapon weapon, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( BaseHat hat, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( Spellbook spellbook, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
+ (static) void ApplyAttributesTo( BaseJewel jewelry, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
+ (static) void ApplyResistance( BaseArmor ar, int min, int max, ResistanceType res, int low, int high )
+ (static) void ApplySkillBonus( AosSkillBonuses attrs, int min, int max, int index, int low, int high )
+ (static) int AssignElementalDamage( BaseWeapon weapon, AosElementAttribute attr, int totalDamage )
+ (static) void GetElementalDamages( BaseWeapon weapon )
+ (static) void GetElementalDamages( BaseWeapon weapon, bool randomizeOrder )
+ (static) SlayerName GetRandomSlayer()
+ (static) int GetUniqueRandom( int count )
+ (static) int Scale( int min, int max, int low, int high )
+ (ctor) BaseRunicTool( Serial serial )
+ (ctor) BaseRunicTool( CraftResource resource, int itemID )
+ (ctor) BaseRunicTool( CraftResource resource, int uses, int itemID )
+ CraftResource Resource( get; set; )
+ void ApplyAttributesTo( BaseWeapon weapon )
+ void ApplyAttributesTo( BaseArmor armor )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseScales.html b/Docs/types/BaseScales.html new file mode 100644 index 0000000..debbaa0 --- /dev/null +++ b/Docs/types/BaseScales.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseScales + + +

Back to Server.Items

+

BaseScales : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+

Derived Types: BlackScales, BlueScales, GreenScales, RedScales, WhiteScales, YellowScales

+ (ctor) BaseScales( Serial serial )
+ (ctor) BaseScales( CraftResource resource )
+ (ctor) BaseScales( CraftResource resource, int amount )
+ double DefaultWeight( get; )
+ int LabelNumber( get; )
+ CraftResource Resource( get; set; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseShield.html b/Docs/types/BaseShield.html new file mode 100644 index 0000000..683feaf --- /dev/null +++ b/Docs/types/BaseShield.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BaseShield + + +

Back to Server.Items

+

BaseShield : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: BronzeShield, Buckler, ChaosShield, DupresShield, HeaterShield, MetalKiteShield, MetalShield, OrderShield, WoodenKiteShield, WoodenShield

+ (ctor) BaseShield( Serial serial )
+ (ctor) BaseShield( int itemID )
+ double ArmorRating( get; )
+ ArmorMaterialType MaterialType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int OnHit( BaseWeapon weapon, int damage )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseShieldGuard.html b/Docs/types/BaseShieldGuard.html new file mode 100644 index 0000000..ba72b2e --- /dev/null +++ b/Docs/types/BaseShieldGuard.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseShieldGuard + + +

Back to Server.Mobiles

+

BaseShieldGuard : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: ChaosGuard, OrderGuard

+ (ctor) BaseShieldGuard()
+ (ctor) BaseShieldGuard( Serial serial )
+ int Keyword( get; )
+ BaseShield Shield( get; )
+ int SignupNumber( get; )
+ GuildType Type( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseShirt.html b/Docs/types/BaseShirt.html new file mode 100644 index 0000000..4181c43 --- /dev/null +++ b/Docs/types/BaseShirt.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseShirt + + +

Back to Server.Items

+

BaseShirt : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: ClothNinjaJacket, ElvenDarkShirt, ElvenShirt, FancyShirt, Shirt

+ (ctor) BaseShirt( Serial serial )
+ (ctor) BaseShirt( int itemID )
+ (ctor) BaseShirt( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseShoes.html b/Docs/types/BaseShoes.html new file mode 100644 index 0000000..7afcf5f --- /dev/null +++ b/Docs/types/BaseShoes.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BaseShoes + + +

Back to Server.Items

+

BaseShoes : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: Boots, ElvenBoots, FurBoots, NinjaTabi, SamuraiTabi, Sandals, Shoes, ThighBoots, Waraji

+ (ctor) BaseShoes( int itemID )
+ (ctor) BaseShoes( Serial serial )
+ (ctor) BaseShoes( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseSign.html b/Docs/types/BaseSign.html new file mode 100644 index 0000000..c76d367 --- /dev/null +++ b/Docs/types/BaseSign.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BaseSign + + +

Back to Server.Items

+

BaseSign : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: Sign

+ (ctor) BaseSign( int dispID )
+ (ctor) BaseSign( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseSolenMatriarch.html b/Docs/types/BaseSolenMatriarch.html new file mode 100644 index 0000000..6193fd0 --- /dev/null +++ b/Docs/types/BaseSolenMatriarch.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BaseSolenMatriarch + + +

Back to Server.Engines.Quests.Matriarch

+

BaseSolenMatriarch : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: BlackSolenMatriarch, RedSolenMatriarch

+

Nested Types: ProcessFungiTarget, ProcessZoogiFungusEntry

+ (ctor) BaseSolenMatriarch()
+ (ctor) BaseSolenMatriarch( Serial serial )
+ bool DisallowAllMoves( get; )
+ bool RedSolen( get; )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual int GetIdleSound()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ void OnGivenFungi( PlayerMobile player, ZoogiFungus fungi )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseSpear.html b/Docs/types/BaseSpear.html new file mode 100644 index 0000000..8742e9c --- /dev/null +++ b/Docs/types/BaseSpear.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseSpear + + +

Back to Server.Items

+

BaseSpear : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BladedStaff, DoubleBladedStaff, Pike, Pitchfork, ShortSpear, Spear, TribalSpear, WarFork

+ (ctor) BaseSpear( Serial serial )
+ (ctor) BaseSpear( int itemID )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseStaff.html b/Docs/types/BaseStaff.html new file mode 100644 index 0000000..f8effd5 --- /dev/null +++ b/Docs/types/BaseStaff.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseStaff + + +

Back to Server.Items

+

BaseStaff : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BlackStaff, GnarledStaff, QuarterStaff, ShepherdsCrook, WildStaff

+ (ctor) BaseStaff( Serial serial )
+ (ctor) BaseStaff( int itemID )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseStrengthPotion.html b/Docs/types/BaseStrengthPotion.html new file mode 100644 index 0000000..207682c --- /dev/null +++ b/Docs/types/BaseStrengthPotion.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseStrengthPotion + + +

Back to Server.Items

+

BaseStrengthPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+

Derived Types: GreaterStrengthPotion, StrengthPotion

+ (ctor) BaseStrengthPotion( PotionEffect effect )
+ (ctor) BaseStrengthPotion( Serial serial )
+ TimeSpan Duration( get; )
+ int StrOffset( get; )
+ virtual void Deserialize( GenericReader reader )
+ bool DoStrength( Mobile from )
+ virtual void Drink( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseSuit.html b/Docs/types/BaseSuit.html new file mode 100644 index 0000000..a5e0751 --- /dev/null +++ b/Docs/types/BaseSuit.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BaseSuit + + +

Back to Server.Items

+

BaseSuit : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: AdminRobe, CounselorRobe, DeathShroud, DupreSuit, GMRobe, LordBlackthorneSuit, LordBritishSuit, SeerRobe

+ (ctor) BaseSuit( Serial serial )
+ (ctor) BaseSuit( AccessLevel level, int hue, int itemID )
+ AccessLevel AccessLevel( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnEquip( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ bool Validate()
+ virtual bool VerifyMove( Mobile from )
+ + diff --git a/Docs/types/BaseSword.html b/Docs/types/BaseSword.html new file mode 100644 index 0000000..f0feece --- /dev/null +++ b/Docs/types/BaseSword.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BaseSword + + +

Back to Server.Items

+

BaseSword : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: Bokuto, BoneHarvester, Broadsword, CrescentBlade, Cutlass, Daisho, ElvenMachete, Katana, Kryss, Lance, Longsword, NoDachi, RadiantScimitar, RuneBlade, Scimitar, ThinLongsword, VikingSword, Wakizashi

+ (ctor) BaseSword( Serial serial )
+ (ctor) BaseSword( int itemID )
+ WeaponAnimation DefAnimation( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseSystemController.html b/Docs/types/BaseSystemController.html new file mode 100644 index 0000000..52d7392 --- /dev/null +++ b/Docs/types/BaseSystemController.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BaseSystemController + + +

Back to Server.Factions

+

BaseSystemController : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BaseMonolith, FactionStone, JoinStone, Sigil, TownStone

+ (ctor) BaseSystemController( Serial serial )
+ (ctor) BaseSystemController( int itemID )
+ int DefaultLabelNumber( get; )
+ string DefaultName( get; )
+ int LabelNumber( get; )
+ virtual void AssignName( TextDefinition name )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseTalisman.html b/Docs/types/BaseTalisman.html new file mode 100644 index 0000000..4e81469 --- /dev/null +++ b/Docs/types/BaseTalisman.html @@ -0,0 +1,65 @@ + + + RunUO Documentation - Class Overview - BaseTalisman + + +

Back to Server.Items

+

BaseTalisman : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BloodwoodSpirit, RandomTalisman, TotemOfVoid

+

Nested Types: SaveFlag, TalismanTarget

+ (static) bool GetRandomBlessed()
+ (static) int GetRandomCharges()
+ (static) int GetRandomExceptional()
+ (static) int GetRandomItemID()
+ (static) TalismanAttribute GetRandomKiller()
+ (static) TalismanAttribute GetRandomProtection()
+ (static) TalismanRemoval GetRandomRemoval()
+ (static) SkillName GetRandomSkill()
+ (static) TalismanSlayerName GetRandomSlayer()
+ (static) int GetRandomSuccessful()
+ (static) TalismanAttribute GetRandomSummoner()
+ (static) Type GetRandomSummonType()
+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) void Initialize()
+ (static) void RandomTalisman_OnCommand( CommandEventArgs e )
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (ctor) BaseTalisman()
+ (ctor) BaseTalisman( int itemID )
+ (ctor) BaseTalisman( Serial serial )
+ AosAttributes Attributes( get; set; )
+ bool Blessed( get; set; )
+ int Charges( get; set; )
+ int ChargeTime( get; set; )
+ int ExceptionalBonus( get; set; )
+ bool ForceShowName( get; )
+ int KarmaLoss( get; set; )
+ TalismanAttribute Killer( get; set; )
+ int LabelNumber( get; )
+ int MaxCharges( get; set; )
+ int MaxChargeTime( get; set; )
+ TalismanAttribute Protection( get; set; )
+ TalismanRemoval Removal( get; set; )
+ SkillName Skill( get; set; )
+ AosSkillBonuses SkillBonuses( get; set; )
+ TalismanSlayerName Slayer( get; set; )
+ int SuccessBonus( get; set; )
+ TalismanAttribute Summoner( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual bool CanEquip( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual Type GetSummoner()
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDuped( Item newItem )
+ virtual void OnAfterUse( Mobile m )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ virtual void SetKiller( Type type, TextDefinition name, int amount )
+ virtual void SetProtection( Type type, TextDefinition name, int amount )
+ virtual void SetSummoner( Type type, TextDefinition name )
+ virtual void Slice()
+ virtual void StartTimer()
+ virtual void StopTimer()
+ + diff --git a/Docs/types/BaseTalismanSummon.html b/Docs/types/BaseTalismanSummon.html new file mode 100644 index 0000000..a4fc597 --- /dev/null +++ b/Docs/types/BaseTalismanSummon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BaseTalismanSummon + + +

Back to Server.Mobiles

+

BaseTalismanSummon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: SummonedAntLion, SummonedArcticOgreLord, SummonedBakeKitsune, SummonedBogling, SummonedBullFrog, SummonedChicken, SummonedCow, SummonedDoppleganger, SummonedFrostSpider, SummonedGreatHart, SummonedLavaSerpent, SummonedOrcBrute, SummonedPanther, SummonedSheep, SummonedSkeletalKnight, SummonedVorpalBunny, SummonedWailingBanshee

+

Nested Types: TalismanReleaseEntry

+ (ctor) BaseTalismanSummon()
+ (ctor) BaseTalismanSummon( Serial serial )
+ bool Commandable( get; )
+ bool InitialInnocent( get; )
+ bool IsInvulnerable( get; )
+ virtual void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseTool.html b/Docs/types/BaseTool.html new file mode 100644 index 0000000..49a5712 --- /dev/null +++ b/Docs/types/BaseTool.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - BaseTool + + +

Back to Server.Items

+

BaseTool : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+

Derived Types: AncientSmithyHammer, BaseRunicTool, Blowpipe, DovetailSaw, DrawKnife, FletcherTools, FlourSifter, Froe, Hammer, Inshave, JointingPlane, MalletAndChisel, MapmakersPen, MortarPestle, MouldingPlane, Nails, RollingPin, Saw, Scorp, ScribesPen, SewingKit, Skillet, SledgeHammer, SmithHammer, SmoothingPlane, TinkersTools, TinkerTools, Tongs

+ (static) bool CheckAccessible( Item tool, Mobile m )
+ (static) bool CheckTool( Item tool, Mobile m )
+ (ctor) BaseTool( Serial serial )
+ (ctor) BaseTool( int itemID )
+ (ctor) BaseTool( int uses, int itemID )
+ Mobile Crafter( get; set; )
+ CraftSystem CraftSystem( get; )
+ ToolQuality Quality( get; set; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayDurabilityTo( Mobile m )
+ virtual void GetProperties( ObjectPropertyList list )
+ int GetUsesScalar()
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ void ScaleUses()
+ virtual void Serialize( GenericWriter writer )
+ void UnscaleUses()
+ + diff --git a/Docs/types/BaseTrap.html b/Docs/types/BaseTrap.html new file mode 100644 index 0000000..501cf4c --- /dev/null +++ b/Docs/types/BaseTrap.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - BaseTrap + + +

Back to Server.Items

+

BaseTrap : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BaseFactionTrap, FireColumnTrap, FlameSpurtTrap, GasTrap, GiantSpikeTrap, MushroomTrap, SawTrap, SpikeTrap, StoneFaceTrap

+ (ctor) BaseTrap( Serial serial )
+ (ctor) BaseTrap( int itemID )
+ bool HandlesOnMovement( get; )
+ bool PassivelyTriggered( get; )
+ TimeSpan PassiveTriggerDelay( get; )
+ int PassiveTriggerRange( get; )
+ TimeSpan ResetDelay( get; )
+ bool CheckRange( Point3D loc, int range )
+ bool CheckRange( Point3D loc, Point3D oldLoc, int range )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetEffectHue()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnTrigger( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseTreasureChest.html b/Docs/types/BaseTreasureChest.html new file mode 100644 index 0000000..074834e --- /dev/null +++ b/Docs/types/BaseTreasureChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - BaseTreasureChest + + +

Back to Server.Items

+

BaseTreasureChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Derived Types: MetalGoldenTreasureChest, MetalTreasureChest, PuzzleChest, WoodenTreasureChest

+

Nested Types: TreasureLevel, TreasureResetTimer

+ (ctor) BaseTreasureChest( Serial serial )
+ (ctor) BaseTreasureChest( int itemID )
+ (ctor) BaseTreasureChest( int itemID, TreasureLevel level )
+ string DefaultName( get; )
+ bool IsDecoContainer( get; )
+ TreasureLevel Level( get; set; )
+ bool Locked( get; set; )
+ short MaxSpawnTime( get; set; )
+ short MinSpawnTime( get; set; )
+ void ClearContents()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateTreasure()
+ void Reset()
+ virtual void Serialize( GenericWriter writer )
+ virtual void SetLockLevel()
+ void StartResetTimer()
+ + diff --git a/Docs/types/BaseVendor.html b/Docs/types/BaseVendor.html new file mode 100644 index 0000000..b9f8d78 --- /dev/null +++ b/Docs/types/BaseVendor.html @@ -0,0 +1,72 @@ + + + RunUO Documentation - Class Overview - BaseVendor + + +

Back to Server.Mobiles

+

BaseVendor : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Derived Types: Alchemist, AnimalTrainer, Architect, Armorer, Baker, Banker, Bard, Barkeeper, BaseFactionVendor, BaseGuildmaster, BaseHealer, BaseQuester, Beekeeper, Blacksmith, Bowyer, Butcher, Carpenter, Cobbler, Cook, CustomHairstylist, Farmer, Fisherman, Furtrader, Glassblower, GolemCrafter, GypsyMaiden, HairStylist, Herbalist, HolyMage, IharaSoko, InnKeeper, IronWorker, Jeweler, KeeperOfChivalry, LeatherWorker, Mage, Mapmaker, Miller, Miner, Monk, PlayerBarkeeper, Provisioner, Rancher, Ranger, RealEstateBroker, Scribe, Shipwright, StoneCrafter, Tailor, Tanner, TavernKeeper, Thief, Tinker, Vagabond, VarietyDealer, Veterinarian, Waiter, Weaponsmith, Weaver

+

Nested Types: BulkOrderInfoEntry

+ (ctor) BaseVendor( string title )
+ (ctor) BaseVendor( Serial serial )
+ bool BardImmune( get; )
+ Container BuyPack( get; )
+ bool CanTeach( get; )
+ bool IsActiveBuyer( get; )
+ bool IsActiveSeller( get; )
+ bool IsActiveVendor( get; )
+ bool IsInvulnerable( get; )
+ bool IsTokunoVendor( get; )
+ DateTime LastRestock( get; set; )
+ NpcGuild NpcGuild( get; )
+ bool PlayerRangeSensitive( get; )
+ TimeSpan RestockDelay( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ bool ShowFameTitle( get; )
+ virtual void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual bool CanBeDamaged()
+ virtual void CapitalizeTitle()
+ virtual bool CheckGargoyle()
+ virtual void CheckMorph()
+ virtual bool CheckNecromancer()
+ virtual bool CheckTokuno()
+ virtual bool CheckVendorAccess( Mobile from )
+ virtual Item CreateBulkOrder( Mobile from, bool fromContextMenu )
+ virtual void Deserialize( GenericReader reader )
+ virtual IBuyItemInfo[] GetBuyInfo()
+ virtual bool GetGender()
+ virtual int GetHairHue()
+ virtual TimeSpan GetNextBulkOrder( Mobile from )
+ virtual int GetPriceScalar()
+ virtual int GetRandomHue()
+ virtual int GetRandomNecromancerHue()
+ virtual IShopSellInfo[] GetSellInfo()
+ virtual int GetShoeHue()
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual bool IsValidBulkOrder( Item item )
+ void LoadSBInfo()
+ GenericBuyInfo LookupDisplayObject( object obj )
+ virtual void OnAfterSpawn()
+ virtual bool OnBuyItems( Mobile buyer, List<BuyItemResponse> list )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnMapChange( Map oldMap )
+ virtual bool OnSellItems( Mobile seller, List<SellItemResponse> list )
+ virtual void OnSuccessfulBulkOrderReceive( Mobile from )
+ void ProcessSinglePurchase( BuyItemResponse buy, IBuyItemInfo bii, List<BuyItemResponse> validBuy, ref int controlSlots, ref bool fullPurchase, ref int totalCost )
+ void ProcessValidPurchase( int amount, IBuyItemInfo bii, Mobile buyer, Container cont )
+ virtual int RandomBrightHue()
+ virtual void Restock()
+ virtual void SendPacksTo( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool SupportsBulkOrders( Mobile from )
+ virtual void TurnToGargoyle()
+ virtual void TurnToNecromancer()
+ virtual void TurnToTokuno()
+ void UpdateBuyInfo()
+ virtual void VendorBuy( Mobile from )
+ virtual void VendorSell( Mobile from )
+ + diff --git a/Docs/types/BaseVendorRentalGump.html b/Docs/types/BaseVendorRentalGump.html new file mode 100644 index 0000000..45f2a1b --- /dev/null +++ b/Docs/types/BaseVendorRentalGump.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - BaseVendorRentalGump + + +

Back to Server.Gumps

+

BaseVendorRentalGump : Gump

+

Derived Types: LandlordVendorRentalGump, RenterVendorRentalGump, VendorRentalContractGump, VendorRentalOfferGump

+

Nested Types: GumpType

+ (ctor) BaseVendorRentalGump( GumpType type, VendorRentalDuration duration, int price, int renewalPrice, Mobile landlord, Mobile renter, bool landlordRenew, bool renterRenew, bool renew )
+ virtual void AcceptOffer( Mobile from )
+ virtual void Cancel( Mobile from )
+ virtual bool IsValidResponse( Mobile from )
+ virtual void LandlordRenewOnExpiration( Mobile from )
+ virtual void OfferContract( Mobile from )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void RenterRenewOnExpiration( Mobile from )
+ virtual void SetContractDuration( Mobile from, VendorRentalDuration duration )
+ virtual void SetPricePerRental( Mobile from )
+ virtual void SetRenewalPrice( Mobile from )
+ + diff --git a/Docs/types/BaseWaist.html b/Docs/types/BaseWaist.html new file mode 100644 index 0000000..67c30e2 --- /dev/null +++ b/Docs/types/BaseWaist.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseWaist + + +

Back to Server.Items

+

BaseWaist : BaseClothing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: HalfApron, LeatherNinjaBelt, Obi, WoodlandBelt

+ (ctor) BaseWaist( Serial serial )
+ (ctor) BaseWaist( int itemID )
+ (ctor) BaseWaist( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseWall.html b/Docs/types/BaseWall.html new file mode 100644 index 0000000..438ed00 --- /dev/null +++ b/Docs/types/BaseWall.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BaseWall + + +

Back to Server.Items

+

BaseWall : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: DarkWoodWall, ThickGrayStoneWall, ThinBrickWall, ThinStoneWall, WhiteStoneWall

+ (ctor) BaseWall( int itemID )
+ (ctor) BaseWall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseWand.html b/Docs/types/BaseWand.html new file mode 100644 index 0000000..8396bc6 --- /dev/null +++ b/Docs/types/BaseWand.html @@ -0,0 +1,39 @@ + + + RunUO Documentation - Class Overview - BaseWand + + +

Back to Server.Items

+

BaseWand : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: ClumsyWand, FeebleWand, FireballWand, GreaterHealWand, HarmWand, HealWand, IDWand, LightningWand, MagicArrowWand, ManaDrainWand, WeaknessWand

+ (ctor) BaseWand( Serial serial )
+ (ctor) BaseWand( WandEffect effect, int minCharges, int maxCharges )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int Charges( get; set; )
+ WandEffect Effect( get; set; )
+ TimeSpan GetUseDelay( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void ApplyDelayTo( Mobile from )
+ void Cast( Spell spell )
+ void ConsumeCharge( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoWandTarget( Mobile from, object o )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual bool OnWandTarget( Mobile from, object o )
+ virtual void OnWandUse( Mobile from )
+ virtual void ReleaseWandLock_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseWarHorse.html b/Docs/types/BaseWarHorse.html new file mode 100644 index 0000000..322c850 --- /dev/null +++ b/Docs/types/BaseWarHorse.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BaseWarHorse + + +

Back to Server.Mobiles

+

BaseWarHorse : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+

Derived Types: CoMWarHorse, MinaxWarHorse, SLWarHorse, TBWarHorse

+ (ctor) BaseWarHorse( Serial serial )
+ (ctor) BaseWarHorse( int bodyID, int itemID, AIType aiType, FightMode fightMode, int rangePerception, int rangeFight, double activeSpeed, double passiveSpeed )
+ FoodType FavoriteFood( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseWaterContainer.html b/Docs/types/BaseWaterContainer.html new file mode 100644 index 0000000..8de190e --- /dev/null +++ b/Docs/types/BaseWaterContainer.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - BaseWaterContainer + + +

Back to Server.Items

+

BaseWaterContainer : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+

Derived Types: Bucket, Tub, WaterBarrel

+ (ctor) BaseWaterContainer( Serial serial )
+ (ctor) BaseWaterContainer( int Item_Id, bool filled )
+ int DefaultGumpID( get; )
+ int fullItem_ID( get; )
+ bool IsEmpty( get; )
+ bool IsFull( get; )
+ int MaxQuantity( get; )
+ int Quantity( get; set; )
+ int voidItem_ID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BaseWeapon.html b/Docs/types/BaseWeapon.html new file mode 100644 index 0000000..c2a71d7 --- /dev/null +++ b/Docs/types/BaseWeapon.html @@ -0,0 +1,166 @@ + + + RunUO Documentation - Class Overview - BaseWeapon + + +

Back to Server.Items

+

BaseWeapon : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BaseMeleeWeapon

+

Nested Types: ResetEquipTimer, SaveFlag

+ (static) BaseWeapon Fists( get; set; )
+ (static) bool InDoubleStrike( get; set; )
+ (static) void BlockEquip( Mobile m, TimeSpan duration )
+ (static) bool CheckAnimal( Mobile m, Type type )
+ (static) bool CheckParry( Mobile defender )
+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (ctor) BaseWeapon( Serial serial )
+ (ctor) BaseWeapon( int itemID )
+ WeaponAccuracyLevel AccuracyLevel( get; set; )
+ SkillName AccuracySkill( get; )
+ WeaponAnimation Animation( get; set; )
+ WeaponAnimation AosAnimation( get; )
+ int AosDexterityReq( get; )
+ AosElementAttributes AosElementDamages( get; set; )
+ int AosHitSound( get; )
+ int AosIntelligenceReq( get; )
+ int AosMaxDamage( get; )
+ int AosMaxRange( get; )
+ int AosMinDamage( get; )
+ int AosMissSound( get; )
+ SkillName AosSkill( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponType AosType( get; )
+ int ArtifactRarity( get; )
+ AosAttributes Attributes( get; set; )
+ bool CanFortify( get; )
+ int ColdResistance( get; )
+ bool Consecrated( get; set; )
+ Mobile Crafter( get; set; )
+ bool Cursed( get; set; )
+ WeaponDamageLevel DamageLevel( get; set; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMaxRange( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int DexRequirement( get; set; )
+ WeaponDurabilityLevel DurabilityLevel( get; set; )
+ int EnergyResistance( get; )
+ string EngravedText( get; set; )
+ FactionItem FactionItemState( get; set; )
+ int FireResistance( get; )
+ int HitPoints( get; set; )
+ int HitSound( get; set; )
+ int Hue( get; set; )
+ bool Identified( get; set; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int IntRequirement( get; set; )
+ int MaxDamage( get; set; )
+ int MaxHitPoints( get; set; )
+ int MaxRange( get; set; )
+ int MinDamage( get; set; )
+ int MissSound( get; set; )
+ float MlSpeed( get; )
+ WeaponAnimation OldAnimation( get; )
+ int OldDexterityReq( get; )
+ int OldHitSound( get; )
+ int OldIntelligenceReq( get; )
+ int OldMaxDamage( get; )
+ int OldMaxRange( get; )
+ int OldMinDamage( get; )
+ int OldMissSound( get; )
+ SkillName OldSkill( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponType OldType( get; )
+ int PhysicalResistance( get; )
+ bool PlayerConstructed( get; set; )
+ Poison Poison( get; set; )
+ int PoisonCharges( get; set; )
+ int PoisonResistance( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponQuality Quality( get; set; )
+ Race RequiredRace( get; )
+ CraftResource Resource( get; set; )
+ WeaponAbility SecondaryAbility( get; )
+ SkillName Skill( get; set; )
+ AosSkillBonuses SkillBonuses( get; set; )
+ SlayerName Slayer( get; set; )
+ SlayerName Slayer2( get; set; )
+ float Speed( get; set; )
+ int StrRequirement( get; set; )
+ WeaponType Type( get; set; )
+ bool UseSkillMod( get; )
+ int VirtualDamageBonus( get; )
+ AosWeaponAttributes WeaponAttributes( get; set; )
+ virtual int AbsorbDamage( Mobile attacker, Mobile defender, int damage )
+ virtual int AbsorbDamageAOS( Mobile attacker, Mobile defender, int damage )
+ virtual void AddBlood( Mobile attacker, Mobile defender, int damage )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual bool AllowEquipedCast( Mobile from )
+ virtual bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ int ApplyCraftAttributeElementDamage( int attrDamage, ref int element, int totalRemaining )
+ virtual bool CanEquip( Mobile from )
+ virtual bool CheckConflictingLayer( Mobile m, Item item, Layer layer )
+ virtual bool CheckHit( Mobile attacker, Mobile defender )
+ virtual CheckSlayerResult CheckSlayers( Mobile attacker, Mobile defender )
+ virtual int ComputeDamage( Mobile attacker, Mobile defender )
+ virtual int ComputeDamageAOS( Mobile attacker, Mobile defender )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoAreaAttack( Mobile from, Mobile defender, int sound, int hue, int phys, int fire, int cold, int pois, int nrgy )
+ virtual void DoDispel( Mobile attacker, Mobile defender )
+ virtual void DoFireball( Mobile attacker, Mobile defender )
+ virtual void DoHarm( Mobile attacker, Mobile defender )
+ virtual void DoLightning( Mobile attacker, Mobile defender )
+ virtual void DoLowerAttack( Mobile from, Mobile defender )
+ virtual void DoLowerDefense( Mobile from, Mobile defender )
+ virtual void DoMagicArrow( Mobile attacker, Mobile defender )
+ virtual double GetAosDamage( Mobile attacker, int bonus, int dice, int sides )
+ virtual double GetAttackSkillValue( Mobile attacker, Mobile defender )
+ virtual double GetBaseDamage( Mobile attacker )
+ virtual void GetBaseDamageRange( Mobile attacker, out int min, out int max )
+ virtual double GetBonus( double value, double scalar, double threshold, double offset )
+ virtual int GetDamageBonus()
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual double GetDefendSkillValue( Mobile attacker, Mobile defender )
+ virtual TimeSpan GetDelay( Mobile m )
+ int GetDurabilityBonus()
+ int GetElementalDamageHue()
+ virtual int GetHitAttackSound( Mobile attacker, Mobile defender )
+ virtual int GetHitChanceBonus()
+ virtual int GetHitDefendSound( Mobile attacker, Mobile defender )
+ int GetLowerStatReq()
+ virtual int GetLuckBonus()
+ virtual int GetMissAttackSound( Mobile attacker, Mobile defender )
+ virtual int GetMissDefendSound( Mobile attacker, Mobile defender )
+ string GetNameString()
+ virtual int GetPackInstinctBonus( Mobile attacker, Mobile defender )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void GetStatusDamage( Mobile from, out int min, out int max )
+ virtual SkillName GetUsedSkill( Mobile m, bool checkSkillAttrs )
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDuped( Item newItem )
+ virtual void OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual bool OnEquip( Mobile from )
+ void OnHit( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void OnMiss( Mobile attacker, Mobile defender )
+ virtual void OnRemoved( object parent )
+ virtual void OnSingleClick( Mobile from )
+ virtual TimeSpan OnSwing( Mobile attacker, Mobile defender )
+ virtual TimeSpan OnSwing( Mobile attacker, Mobile defender, double damageBonus )
+ virtual void PlayHurtAnimation( Mobile from )
+ virtual void PlaySwingAnimation( Mobile from )
+ virtual double ScaleDamageAOS( Mobile attacker, double damage, bool checkSkills )
+ virtual int ScaleDamageByDurability( int damage )
+ virtual double ScaleDamageOld( Mobile attacker, double damage, bool checkSkills )
+ virtual void ScaleDurability()
+ virtual void Serialize( GenericWriter writer )
+ virtual void UnscaleDurability()
+ + diff --git a/Docs/types/BaseWindChimes.html b/Docs/types/BaseWindChimes.html new file mode 100644 index 0000000..ed76841 --- /dev/null +++ b/Docs/types/BaseWindChimes.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - BaseWindChimes + + +

Back to Server.Items

+

BaseWindChimes : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: FancyWindChimes, WindChimes

+

Nested Types: OnOffGump

+ (static) int[] Sounds( get; )
+ (ctor) BaseWindChimes( int itemID )
+ (ctor) BaseWindChimes( Serial serial )
+ bool HandlesOnMovement( get; )
+ bool TurnedOn( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ bool IsOwner( Mobile mob )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket.html b/Docs/types/Basket.html new file mode 100644 index 0000000..46bb637 --- /dev/null +++ b/Docs/types/Basket.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Basket + + +

Back to Server.Items

+

Basket : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket()
+ (ctor) Basket( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket1Artifact.html b/Docs/types/Basket1Artifact.html new file mode 100644 index 0000000..29a4f32 --- /dev/null +++ b/Docs/types/Basket1Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Basket1Artifact + + +

Back to Server.Items

+

Basket1Artifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket1Artifact()
+ (ctor) Basket1Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket2Artifact.html b/Docs/types/Basket2Artifact.html new file mode 100644 index 0000000..806e635 --- /dev/null +++ b/Docs/types/Basket2Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Basket2Artifact + + +

Back to Server.Items

+

Basket2Artifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket2Artifact()
+ (ctor) Basket2Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket3NorthArtifact.html b/Docs/types/Basket3NorthArtifact.html new file mode 100644 index 0000000..539e4e8 --- /dev/null +++ b/Docs/types/Basket3NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Basket3NorthArtifact + + +

Back to Server.Items

+

Basket3NorthArtifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket3NorthArtifact()
+ (ctor) Basket3NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket3WestArtifact.html b/Docs/types/Basket3WestArtifact.html new file mode 100644 index 0000000..1e5b184 --- /dev/null +++ b/Docs/types/Basket3WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Basket3WestArtifact + + +

Back to Server.Items

+

Basket3WestArtifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket3WestArtifact()
+ (ctor) Basket3WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket4Artifact.html b/Docs/types/Basket4Artifact.html new file mode 100644 index 0000000..5638da2 --- /dev/null +++ b/Docs/types/Basket4Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Basket4Artifact + + +

Back to Server.Items

+

Basket4Artifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket4Artifact()
+ (ctor) Basket4Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket5NorthArtifact.html b/Docs/types/Basket5NorthArtifact.html new file mode 100644 index 0000000..175d0b6 --- /dev/null +++ b/Docs/types/Basket5NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Basket5NorthArtifact + + +

Back to Server.Items

+

Basket5NorthArtifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket5NorthArtifact()
+ (ctor) Basket5NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket5WestArtifact.html b/Docs/types/Basket5WestArtifact.html new file mode 100644 index 0000000..7672edb --- /dev/null +++ b/Docs/types/Basket5WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Basket5WestArtifact + + +

Back to Server.Items

+

Basket5WestArtifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket5WestArtifact()
+ (ctor) Basket5WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Basket6Artifact.html b/Docs/types/Basket6Artifact.html new file mode 100644 index 0000000..2b000d4 --- /dev/null +++ b/Docs/types/Basket6Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Basket6Artifact + + +

Back to Server.Items

+

Basket6Artifact : BaseDecorationContainerArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Basket6Artifact()
+ (ctor) Basket6Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BatWing.html b/Docs/types/BatWing.html new file mode 100644 index 0000000..7990da3 --- /dev/null +++ b/Docs/types/BatWing.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BatWing + + +

Back to Server.Items

+

BatWing : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BatWing()
+ (ctor) BatWing( Serial serial )
+ (ctor) BatWing( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Batch.html b/Docs/types/Batch.html new file mode 100644 index 0000000..9d981a0 --- /dev/null +++ b/Docs/types/Batch.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Batch + + +

Back to Server.Commands

+

Batch : BaseCommand

+ (static) void Batch_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) Batch()
+ ArrayList BatchCommands( get; )
+ string Condition( get; set; )
+ BaseCommandImplementor Scope( get; set; )
+ virtual void ExecuteList( CommandEventArgs e, ArrayList list )
+ bool Run( Mobile from )
+ + diff --git a/Docs/types/BatchCommand.html b/Docs/types/BatchCommand.html new file mode 100644 index 0000000..00ebf66 --- /dev/null +++ b/Docs/types/BatchCommand.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BatchCommand + + +

Back to Server.Commands

+

BatchCommand

+ (ctor) BatchCommand( string command, string obj )
+ string Command( get; set; )
+ string Object( get; set; )
+ void GetDetails( out string command, out string argString, out string[] args )
+ + diff --git a/Docs/types/BatchGump.html b/Docs/types/BatchGump.html new file mode 100644 index 0000000..48a6eed --- /dev/null +++ b/Docs/types/BatchGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BatchGump + + +

Back to Server.Commands

+

BatchGump : BaseGridGump

+ (ctor) BatchGump( Mobile from, Batch batch )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void Render()
+ + diff --git a/Docs/types/BatchScopeGump.html b/Docs/types/BatchScopeGump.html new file mode 100644 index 0000000..15cb967 --- /dev/null +++ b/Docs/types/BatchScopeGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BatchScopeGump + + +

Back to Server.Commands

+

BatchScopeGump : BaseGridGump

+ (ctor) BatchScopeGump( Mobile from, Batch batch )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void Render()
+ + diff --git a/Docs/types/BattleAxe.html b/Docs/types/BattleAxe.html new file mode 100644 index 0000000..ab50a03 --- /dev/null +++ b/Docs/types/BattleAxe.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BattleAxe + + +

Back to Server.Items

+

BattleAxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BattleAxe()
+ (ctor) BattleAxe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Beads.html b/Docs/types/Beads.html new file mode 100644 index 0000000..7c8e81a --- /dev/null +++ b/Docs/types/Beads.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Beads + + +

Back to Server.Items

+

Beads : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Beads()
+ (ctor) Beads( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BearMask.html b/Docs/types/BearMask.html new file mode 100644 index 0000000..77cdd7b --- /dev/null +++ b/Docs/types/BearMask.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BearMask + + +

Back to Server.Items

+

BearMask : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: PolarBearMask, SpiritOfTheTotem

+ (ctor) BearMask()
+ (ctor) BearMask( Serial serial )
+ (ctor) BearMask( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Beard.html b/Docs/types/Beard.html new file mode 100644 index 0000000..cd40ad5 --- /dev/null +++ b/Docs/types/Beard.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Beard + + +

Back to Server.Items

+

Beard : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: GenericBeard, Goatee, LongBeard, MediumLongBeard, MediumShortBeard, Mustache, ShortBeard, Vandyke

+ (ctor) Beard( int itemID )
+ (ctor) Beard( Serial serial )
+ (ctor) Beard( int itemID, int hue )
+ bool DisplayLootType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual DeathMoveResult OnParentDeath( Mobile parent )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool VerifyMove( Mobile from )
+ + diff --git a/Docs/types/BedOfNailsAddon.html b/Docs/types/BedOfNailsAddon.html new file mode 100644 index 0000000..b488f74 --- /dev/null +++ b/Docs/types/BedOfNailsAddon.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BedOfNailsAddon + + +

Back to Server.Items

+

BedOfNailsAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Nested Types: InternalTimer

+ (ctor) BedOfNailsAddon()
+ (ctor) BedOfNailsAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Flip( Mobile from, Direction direction )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BedOfNailsComponent.html b/Docs/types/BedOfNailsComponent.html new file mode 100644 index 0000000..bb72f5b --- /dev/null +++ b/Docs/types/BedOfNailsComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BedOfNailsComponent + + +

Back to Server.Items

+

BedOfNailsComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BedOfNailsComponent( int itemID )
+ (ctor) BedOfNailsComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BedOfNailsDeed.html b/Docs/types/BedOfNailsDeed.html new file mode 100644 index 0000000..c72bf38 --- /dev/null +++ b/Docs/types/BedOfNailsDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BedOfNailsDeed + + +

Back to Server.Items

+

BedOfNailsDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BedOfNailsDeed()
+ (ctor) BedOfNailsDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bedroll.html b/Docs/types/Bedroll.html new file mode 100644 index 0000000..f5db1ea --- /dev/null +++ b/Docs/types/Bedroll.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Bedroll + + +

Back to Server.Items

+

Bedroll : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: LogoutGump

+ (ctor) Bedroll()
+ (ctor) Bedroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Beekeeper.html b/Docs/types/Beekeeper.html new file mode 100644 index 0000000..cf31aca --- /dev/null +++ b/Docs/types/Beekeeper.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Beekeeper + + +

Back to Server.Mobiles

+

Beekeeper : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Beekeeper()
+ (ctor) Beekeeper( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Beeswax.html b/Docs/types/Beeswax.html new file mode 100644 index 0000000..92bdb2f --- /dev/null +++ b/Docs/types/Beeswax.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Beeswax + + +

Back to Server.Items

+

Beeswax : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Beeswax()
+ (ctor) Beeswax( int amount )
+ (ctor) Beeswax( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Beetle.html b/Docs/types/Beetle.html new file mode 100644 index 0000000..411e501 --- /dev/null +++ b/Docs/types/Beetle.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Beetle + + +

Back to Server.Mobiles

+

Beetle : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) Beetle()
+ (ctor) Beetle( Serial serial )
+ (ctor) Beetle( string name )
+ double BoostedSpeed( get; )
+ FoodType FavoriteFood( get; )
+ bool ReduceSpeedWithDamage( get; )
+ bool SubdueBeforeTame( get; )
+ virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target )
+ virtual bool CheckNonlocalLift( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual DeathMoveResult GetInventoryMoveResultFor( Item item )
+ virtual bool IsSnoop( Mobile from )
+ virtual bool OnBeforeDeath()
+ virtual void OnCombatantChange()
+ virtual bool OnDragDrop( Mobile from, Item item )
+ virtual void OnHarmfulSpell( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Begging.html b/Docs/types/Begging.html new file mode 100644 index 0000000..a1a91f0 --- /dev/null +++ b/Docs/types/Begging.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Begging + + +

Back to Server.SkillHandlers

+

Begging

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Begging()
+ + diff --git a/Docs/types/BeginHouseCustomization.html b/Docs/types/BeginHouseCustomization.html new file mode 100644 index 0000000..67737b5 --- /dev/null +++ b/Docs/types/BeginHouseCustomization.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BeginHouseCustomization + + +

Back to Server.Multis

+

BeginHouseCustomization : Packet

+ (ctor) BeginHouseCustomization( HouseFoundation house )
+ + diff --git a/Docs/types/BellOfTheDead.html b/Docs/types/BellOfTheDead.html new file mode 100644 index 0000000..ba89d5a --- /dev/null +++ b/Docs/types/BellOfTheDead.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BellOfTheDead + + +

Back to Server.Engines.Quests.Doom

+

BellOfTheDead : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BellOfTheDead()
+ (ctor) BellOfTheDead( Serial serial )
+ Chyloth Chyloth( get; set; )
+ SkeletalDragon Dragon( get; set; )
+ int LabelNumber( get; )
+ bool Summoning( get; set; )
+ virtual void BeginSummon( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void EndSummon( object state )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BentoBox.html b/Docs/types/BentoBox.html new file mode 100644 index 0000000..1cc7ef7 --- /dev/null +++ b/Docs/types/BentoBox.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BentoBox + + +

Back to Server.Items

+

BentoBox : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BentoBox()
+ (ctor) BentoBox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BerserkAI.html b/Docs/types/BerserkAI.html new file mode 100644 index 0000000..e2650ea --- /dev/null +++ b/Docs/types/BerserkAI.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BerserkAI + + +

Back to Server.Mobiles

+

BerserkAI : BaseAI

+ (ctor) BerserkAI( BaseCreature m )
+ virtual bool DoActionCombat()
+ virtual bool DoActionGuard()
+ virtual bool DoActionWander()
+ + diff --git a/Docs/types/Betrayer.html b/Docs/types/Betrayer.html new file mode 100644 index 0000000..6d86de8 --- /dev/null +++ b/Docs/types/Betrayer.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Betrayer + + +

Back to Server.Mobiles

+

Betrayer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Betrayer()
+ (ctor) Betrayer( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool BardImmune( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void OnActionCombat()
+ virtual void OnDeath( Container c )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ void Recover_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BeverageBottle.html b/Docs/types/BeverageBottle.html new file mode 100644 index 0000000..8cdc3e3 --- /dev/null +++ b/Docs/types/BeverageBottle.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BeverageBottle + + +

Back to Server.Items

+

BeverageBottle : BaseBeverage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+

Derived Types: AdmiralsHeartyRum

+ (ctor) BeverageBottle( Serial serial )
+ (ctor) BeverageBottle( BeverageType type )
+ int BaseLabelNumber( get; )
+ bool Fillable( get; )
+ int MaxQuantity( get; )
+ virtual int ComputeItemID()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BeverageBuyInfo.html b/Docs/types/BeverageBuyInfo.html new file mode 100644 index 0000000..c8a4de5 --- /dev/null +++ b/Docs/types/BeverageBuyInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BeverageBuyInfo + + +

Back to Server.Mobiles

+

BeverageBuyInfo : GenericBuyInfo, IBuyItemInfo

+ (ctor) BeverageBuyInfo( Type type, BeverageType content, int price, int amount, int itemID, int hue )
+ (ctor) BeverageBuyInfo( string name, Type type, BeverageType content, int price, int amount, int itemID, int hue )
+ bool CanCacheDisplay( get; )
+ virtual IEntity GetEntity()
+ + diff --git a/Docs/types/BeverageType.html b/Docs/types/BeverageType.html new file mode 100644 index 0000000..dd94bc9 --- /dev/null +++ b/Docs/types/BeverageType.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BeverageType + + +

Back to Server.Items

+

BeverageType (Enum)

+ Ale = 0,
+ Cider = 1,
+ Liquor = 2,
+ Milk = 3,
+ Wine = 4,
+ Water = 5
+ + diff --git a/Docs/types/BigElvenChair.html b/Docs/types/BigElvenChair.html new file mode 100644 index 0000000..d1f2cda --- /dev/null +++ b/Docs/types/BigElvenChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BigElvenChair + + +

Back to Server.Items

+

BigElvenChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BigElvenChair()
+ (ctor) BigElvenChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BigFish.html b/Docs/types/BigFish.html new file mode 100644 index 0000000..e316ac4 --- /dev/null +++ b/Docs/types/BigFish.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BigFish + + +

Back to Server.Items

+

BigFish : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICarvable

+ (ctor) BigFish()
+ (ctor) BigFish( Serial serial )
+ Mobile Fisher( get; set; )
+ int LabelNumber( get; )
+ virtual void Carve( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BinaryFileReader.html b/Docs/types/BinaryFileReader.html new file mode 100644 index 0000000..b673e0f --- /dev/null +++ b/Docs/types/BinaryFileReader.html @@ -0,0 +1,54 @@ + + + RunUO Documentation - Class Overview - BinaryFileReader + + +

Back to Server

+

BinaryFileReader : GenericReader

+ (ctor) BinaryFileReader( BinaryReader br )
+ long Position( get; )
+ void Close()
+ virtual bool End()
+ virtual bool ReadBool()
+ virtual byte ReadByte()
+ virtual char ReadChar()
+ virtual DateTime ReadDateTime()
+ virtual decimal ReadDecimal()
+ virtual DateTime ReadDeltaTime()
+ virtual double ReadDouble()
+ virtual int ReadEncodedInt()
+ virtual float ReadFloat()
+ virtual BaseGuild ReadGuild()
+ virtual T ReadGuild()
+ virtual ArrayList ReadGuildList()
+ virtual int ReadInt()
+ virtual IPAddress ReadIPAddress()
+ virtual T ReadItem()
+ virtual Item ReadItem()
+ virtual ArrayList ReadItemList()
+ virtual long ReadLong()
+ virtual Map ReadMap()
+ virtual Mobile ReadMobile()
+ virtual T ReadMobile()
+ virtual ArrayList ReadMobileList()
+ virtual Point2D ReadPoint2D()
+ virtual Point3D ReadPoint3D()
+ virtual Race ReadRace()
+ virtual Rectangle2D ReadRect2D()
+ virtual Rectangle3D ReadRect3D()
+ virtual sbyte ReadSByte()
+ virtual short ReadShort()
+ virtual string ReadString()
+ virtual List<T> ReadStrongGuildList()
+ virtual List<BaseGuild> ReadStrongGuildList()
+ virtual List<T> ReadStrongItemList()
+ virtual List<Item> ReadStrongItemList()
+ virtual List<Mobile> ReadStrongMobileList()
+ virtual List<T> ReadStrongMobileList()
+ virtual TimeSpan ReadTimeSpan()
+ virtual uint ReadUInt()
+ virtual ulong ReadULong()
+ virtual ushort ReadUShort()
+ long Seek( long offset, SeekOrigin origin )
+ + diff --git a/Docs/types/BinaryFileWriter.html b/Docs/types/BinaryFileWriter.html new file mode 100644 index 0000000..08b8f08 --- /dev/null +++ b/Docs/types/BinaryFileWriter.html @@ -0,0 +1,67 @@ + + + RunUO Documentation - Class Overview - BinaryFileWriter + + +

Back to Server

+

BinaryFileWriter : GenericWriter

+

Derived Types: BinaryMemoryWriter, QueuedMemoryWriter

+ (ctor) BinaryFileWriter( string filename, bool prefixStr )
+ (ctor) BinaryFileWriter( Stream strm, bool prefixStr )
+ int BufferSize( get; )
+ long Position( get; )
+ Stream UnderlyingStream( get; )
+ virtual void Close()
+ void Flush()
+ void InternalWriteString( string value )
+ virtual void Write( IPAddress value )
+ virtual void Write( TimeSpan value )
+ virtual void Write( DateTime value )
+ virtual void Write( List<BaseGuild> list )
+ virtual void Write( string value )
+ virtual void Write( decimal value )
+ virtual void Write( List<Mobile> list )
+ virtual void Write( uint value )
+ virtual void Write( Race value )
+ virtual void Write( int value )
+ virtual void Write( List<Item> list )
+ virtual void Write( long value )
+ virtual void Write( ulong value )
+ virtual void Write( short value )
+ virtual void Write( byte value )
+ virtual void Write( sbyte value )
+ virtual void Write( bool value )
+ virtual void Write( char value )
+ virtual void Write( ushort value )
+ virtual void Write( double value )
+ virtual void Write( float value )
+ virtual void Write( Point3D value )
+ virtual void Write( Item value )
+ virtual void Write( Mobile value )
+ virtual void Write( BaseGuild value )
+ virtual void Write( Map value )
+ virtual void Write( Point2D value )
+ virtual void Write( Rectangle2D value )
+ virtual void Write( Rectangle3D value )
+ virtual void Write( List<BaseGuild> list, bool tidy )
+ virtual void Write( List<Mobile> list, bool tidy )
+ virtual void Write( List<Item> list, bool tidy )
+ virtual void WriteDeltaTime( DateTime value )
+ virtual void WriteEncodedInt( int value )
+ virtual void WriteGuild( T value )
+ virtual void WriteGuildList( ArrayList list )
+ virtual void WriteGuildList( List<T> list )
+ virtual void WriteGuildList( List<T> list, bool tidy )
+ virtual void WriteGuildList( ArrayList list, bool tidy )
+ virtual void WriteItem( T value )
+ virtual void WriteItemList( ArrayList list )
+ virtual void WriteItemList( List<T> list )
+ virtual void WriteItemList( List<T> list, bool tidy )
+ virtual void WriteItemList( ArrayList list, bool tidy )
+ virtual void WriteMobile( T value )
+ virtual void WriteMobileList( List<T> list )
+ virtual void WriteMobileList( ArrayList list )
+ virtual void WriteMobileList( List<T> list, bool tidy )
+ virtual void WriteMobileList( ArrayList list, bool tidy )
+ + diff --git a/Docs/types/BinaryMemoryWriter.html b/Docs/types/BinaryMemoryWriter.html new file mode 100644 index 0000000..411c87b --- /dev/null +++ b/Docs/types/BinaryMemoryWriter.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BinaryMemoryWriter + + +

Back to Server

+

BinaryMemoryWriter : BinaryFileWriter

+ (ctor) BinaryMemoryWriter()
+ int BufferSize( get; )
+ int CommitTo( SequentialFileWriter dataFile, SequentialFileWriter indexFile, int typeCode, int serial )
+ + diff --git a/Docs/types/BindTarget.html b/Docs/types/BindTarget.html new file mode 100644 index 0000000..69087e4 --- /dev/null +++ b/Docs/types/BindTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BindTarget + + +

Back to Server.Items

+

(BraceletOfBinding) - BindTarget : Target

+ (ctor) BindTarget( BraceletOfBinding bracelet )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/BindingException.html b/Docs/types/BindingException.html new file mode 100644 index 0000000..e8169ee --- /dev/null +++ b/Docs/types/BindingException.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BindingException + + +

Back to Server

+

BindingException : PropertyException, ISerializable, _Exception

+

Derived Types: AlreadyBoundException, NotYetBoundException, ReadOnlyException, UnknownPropertyException, WriteOnlyException

+ (ctor) BindingException( Property property, string message )
+ + diff --git a/Docs/types/Bird.html b/Docs/types/Bird.html new file mode 100644 index 0000000..ed789d7 --- /dev/null +++ b/Docs/types/Bird.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Bird + + +

Back to Server.Mobiles

+

Bird : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Bird()
+ (ctor) Bird( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Feathers( get; )
+ int Meat( get; )
+ MeatType MeatType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BirdsOfBritannia.html b/Docs/types/BirdsOfBritannia.html new file mode 100644 index 0000000..9f9262b --- /dev/null +++ b/Docs/types/BirdsOfBritannia.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BirdsOfBritannia + + +

Back to Server.Items

+

BirdsOfBritannia : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BirdsOfBritannia()
+ (ctor) BirdsOfBritannia( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackAmbitiousSolenQueen.html b/Docs/types/BlackAmbitiousSolenQueen.html new file mode 100644 index 0000000..bae2f87 --- /dev/null +++ b/Docs/types/BlackAmbitiousSolenQueen.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlackAmbitiousSolenQueen + + +

Back to Server.Engines.Quests.Ambitious

+

BlackAmbitiousSolenQueen : BaseAmbitiousSolenQueen, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) BlackAmbitiousSolenQueen()
+ (ctor) BlackAmbitiousSolenQueen( Serial serial )
+ bool RedSolen( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackBear.html b/Docs/types/BlackBear.html new file mode 100644 index 0000000..e9f3d4d --- /dev/null +++ b/Docs/types/BlackBear.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BlackBear + + +

Back to Server.Mobiles

+

BlackBear : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BlackBear()
+ (ctor) BlackBear( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackDyeTub.html b/Docs/types/BlackDyeTub.html new file mode 100644 index 0000000..e278106 --- /dev/null +++ b/Docs/types/BlackDyeTub.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BlackDyeTub + + +

Back to Server.Items

+

BlackDyeTub : DyeTub, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BlackDyeTub()
+ (ctor) BlackDyeTub( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackLotusHood.html b/Docs/types/BlackLotusHood.html new file mode 100644 index 0000000..ab92c2a --- /dev/null +++ b/Docs/types/BlackLotusHood.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BlackLotusHood + + +

Back to Server.Items

+

BlackLotusHood : ClothNinjaHood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) BlackLotusHood()
+ (ctor) BlackLotusHood( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackPearl.html b/Docs/types/BlackPearl.html new file mode 100644 index 0000000..a09d9e7 --- /dev/null +++ b/Docs/types/BlackPearl.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BlackPearl + + +

Back to Server.Items

+

BlackPearl : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BlackPearl()
+ (ctor) BlackPearl( Serial serial )
+ (ctor) BlackPearl( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackScales.html b/Docs/types/BlackScales.html new file mode 100644 index 0000000..0a9401a --- /dev/null +++ b/Docs/types/BlackScales.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlackScales + + +

Back to Server.Items

+

BlackScales : BaseScales, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BlackScales()
+ (ctor) BlackScales( int amount )
+ (ctor) BlackScales( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackSolenInfiltratorQueen.html b/Docs/types/BlackSolenInfiltratorQueen.html new file mode 100644 index 0000000..3a14002 --- /dev/null +++ b/Docs/types/BlackSolenInfiltratorQueen.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BlackSolenInfiltratorQueen + + +

Back to Server.Mobiles

+

BlackSolenInfiltratorQueen : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BlackSolenInfiltratorQueen()
+ (ctor) BlackSolenInfiltratorQueen( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackSolenInfiltratorWarrior.html b/Docs/types/BlackSolenInfiltratorWarrior.html new file mode 100644 index 0000000..b56414f --- /dev/null +++ b/Docs/types/BlackSolenInfiltratorWarrior.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BlackSolenInfiltratorWarrior + + +

Back to Server.Mobiles

+

BlackSolenInfiltratorWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BlackSolenInfiltratorWarrior()
+ (ctor) BlackSolenInfiltratorWarrior( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackSolenMatriarch.html b/Docs/types/BlackSolenMatriarch.html new file mode 100644 index 0000000..9e0d52c --- /dev/null +++ b/Docs/types/BlackSolenMatriarch.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlackSolenMatriarch + + +

Back to Server.Engines.Quests.Matriarch

+

BlackSolenMatriarch : BaseSolenMatriarch, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) BlackSolenMatriarch()
+ (ctor) BlackSolenMatriarch( Serial serial )
+ bool RedSolen( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackSolenQueen.html b/Docs/types/BlackSolenQueen.html new file mode 100644 index 0000000..ad66541 --- /dev/null +++ b/Docs/types/BlackSolenQueen.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BlackSolenQueen + + +

Back to Server.Mobiles

+

BlackSolenQueen : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BlackSolenQueen()
+ (ctor) BlackSolenQueen( Serial serial )
+ bool BurstSac( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual bool OnBeforeDeath()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackSolenWarrior.html b/Docs/types/BlackSolenWarrior.html new file mode 100644 index 0000000..5483ed4 --- /dev/null +++ b/Docs/types/BlackSolenWarrior.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - BlackSolenWarrior + + +

Back to Server.Mobiles

+

BlackSolenWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BlackSolenWarrior()
+ (ctor) BlackSolenWarrior( Serial serial )
+ bool BurstSac( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual bool OnBeforeDeath()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackSolenWorker.html b/Docs/types/BlackSolenWorker.html new file mode 100644 index 0000000..eedff84 --- /dev/null +++ b/Docs/types/BlackSolenWorker.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BlackSolenWorker + + +

Back to Server.Mobiles

+

BlackSolenWorker : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BlackSolenWorker()
+ (ctor) BlackSolenWorker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackStaff.html b/Docs/types/BlackStaff.html new file mode 100644 index 0000000..6beac72 --- /dev/null +++ b/Docs/types/BlackStaff.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - BlackStaff + + +

Back to Server.Items

+

BlackStaff : BaseStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: ChylothStaff, GlacialStaff, StaffOfPower, StaffOfTheMagi

+ (ctor) BlackStaff()
+ (ctor) BlackStaff( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Blackheart.html b/Docs/types/Blackheart.html new file mode 100644 index 0000000..e326fa6 --- /dev/null +++ b/Docs/types/Blackheart.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Blackheart + + +

Back to Server.Engines.Quests.Hag

+

Blackheart : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Blackheart()
+ (ctor) Blackheart( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ void Heave()
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackheartFirstConversation.html b/Docs/types/BlackheartFirstConversation.html new file mode 100644 index 0000000..034d44f --- /dev/null +++ b/Docs/types/BlackheartFirstConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BlackheartFirstConversation + + +

Back to Server.Engines.Quests.Hag

+

BlackheartFirstConversation : QuestConversation

+ (ctor) BlackheartFirstConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/BlackheartNoPirateConversation.html b/Docs/types/BlackheartNoPirateConversation.html new file mode 100644 index 0000000..0c12f40 --- /dev/null +++ b/Docs/types/BlackheartNoPirateConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BlackheartNoPirateConversation + + +

Back to Server.Engines.Quests.Hag

+

BlackheartNoPirateConversation : QuestConversation

+ (ctor) BlackheartNoPirateConversation()
+ (ctor) BlackheartNoPirateConversation( bool tricorne, bool drunken )
+ bool Logged( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackheartPirateConversation.html b/Docs/types/BlackheartPirateConversation.html new file mode 100644 index 0000000..89353d5 --- /dev/null +++ b/Docs/types/BlackheartPirateConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BlackheartPirateConversation + + +

Back to Server.Engines.Quests.Hag

+

BlackheartPirateConversation : QuestConversation

+ (ctor) BlackheartPirateConversation()
+ (ctor) BlackheartPirateConversation( bool firstMet )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnRead()
+ + diff --git a/Docs/types/Blacksmith.html b/Docs/types/Blacksmith.html new file mode 100644 index 0000000..c426602 --- /dev/null +++ b/Docs/types/Blacksmith.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Blacksmith + + +

Back to Server.Mobiles

+

Blacksmith : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Blacksmith()
+ (ctor) Blacksmith( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual Item CreateBulkOrder( Mobile from, bool fromContextMenu )
+ virtual void Deserialize( GenericReader reader )
+ virtual TimeSpan GetNextBulkOrder( Mobile from )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual bool IsValidBulkOrder( Item item )
+ virtual void OnSuccessfulBulkOrderReceive( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool SupportsBulkOrders( Mobile from )
+ + diff --git a/Docs/types/BlacksmithGuildmaster.html b/Docs/types/BlacksmithGuildmaster.html new file mode 100644 index 0000000..8ec8376 --- /dev/null +++ b/Docs/types/BlacksmithGuildmaster.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BlacksmithGuildmaster + + +

Back to Server.Mobiles

+

BlacksmithGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) BlacksmithGuildmaster()
+ (ctor) BlacksmithGuildmaster( Serial serial )
+ bool ClickTitle( get; )
+ bool IsActiveVendor( get; )
+ NpcGuild NpcGuild( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlackthornWelcomeBook.html b/Docs/types/BlackthornWelcomeBook.html new file mode 100644 index 0000000..b7866cf --- /dev/null +++ b/Docs/types/BlackthornWelcomeBook.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlackthornWelcomeBook + + +

Back to Server.Items

+

BlackthornWelcomeBook : RedBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BlackthornWelcomeBook()
+ (ctor) BlackthornWelcomeBook( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BladeDance.html b/Docs/types/BladeDance.html new file mode 100644 index 0000000..fe3eaf4 --- /dev/null +++ b/Docs/types/BladeDance.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BladeDance + + +

Back to Server.Items

+

BladeDance : RuneBlade, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BladeDance()
+ (ctor) BladeDance( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BladeOfInsanity.html b/Docs/types/BladeOfInsanity.html new file mode 100644 index 0000000..7cee9bf --- /dev/null +++ b/Docs/types/BladeOfInsanity.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BladeOfInsanity + + +

Back to Server.Items

+

BladeOfInsanity : Katana, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BladeOfInsanity()
+ (ctor) BladeOfInsanity( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BladeOfTheRighteous.html b/Docs/types/BladeOfTheRighteous.html new file mode 100644 index 0000000..03b574f --- /dev/null +++ b/Docs/types/BladeOfTheRighteous.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BladeOfTheRighteous + + +

Back to Server.Items

+

BladeOfTheRighteous : Longsword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BladeOfTheRighteous()
+ (ctor) BladeOfTheRighteous( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BladeSpirits.html b/Docs/types/BladeSpirits.html new file mode 100644 index 0000000..589355b --- /dev/null +++ b/Docs/types/BladeSpirits.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - BladeSpirits + + +

Back to Server.Mobiles

+

BladeSpirits : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BladeSpirits()
+ (ctor) BladeSpirits( Serial serial )
+ bool BleedImmune( get; )
+ bool DeleteCorpseOnDeath( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ bool IsHouseSummonable( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual double GetFightModeRanking( Mobile m, FightMode acqType, bool bPlayerOnly )
+ virtual int GetHurtSound()
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BladeSpiritsScroll.html b/Docs/types/BladeSpiritsScroll.html new file mode 100644 index 0000000..f3e4fcd --- /dev/null +++ b/Docs/types/BladeSpiritsScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BladeSpiritsScroll + + +

Back to Server.Items

+

BladeSpiritsScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BladeSpiritsScroll()
+ (ctor) BladeSpiritsScroll( int amount )
+ (ctor) BladeSpiritsScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BladeSpiritsSpell.html b/Docs/types/BladeSpiritsSpell.html new file mode 100644 index 0000000..2e38d63 --- /dev/null +++ b/Docs/types/BladeSpiritsSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BladeSpiritsSpell + + +

Back to Server.Spells.Fifth

+

BladeSpiritsSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) BladeSpiritsSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual TimeSpan GetCastDelay()
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/BladedItemTarget.html b/Docs/types/BladedItemTarget.html new file mode 100644 index 0000000..11ad8ad --- /dev/null +++ b/Docs/types/BladedItemTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BladedItemTarget + + +

Back to Server.Targets

+

BladedItemTarget : Target

+ (ctor) BladedItemTarget( Item item )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetOutOfRange( Mobile from, object targeted )
+ + diff --git a/Docs/types/BladedStaff.html b/Docs/types/BladedStaff.html new file mode 100644 index 0000000..08300de --- /dev/null +++ b/Docs/types/BladedStaff.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - BladedStaff + + +

Back to Server.Items

+

BladedStaff : BaseSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BladedStaff()
+ (ctor) BladedStaff( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ SkillName DefSkill( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlankMap.html b/Docs/types/BlankMap.html new file mode 100644 index 0000000..a2cf816 --- /dev/null +++ b/Docs/types/BlankMap.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlankMap + + +

Back to Server.Items

+

BlankMap : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) BlankMap()
+ (ctor) BlankMap( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlankScroll.html b/Docs/types/BlankScroll.html new file mode 100644 index 0000000..db4ac32 --- /dev/null +++ b/Docs/types/BlankScroll.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BlankScroll + + +

Back to Server.Items

+

BlankScroll : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BlankScroll()
+ (ctor) BlankScroll( Serial serial )
+ (ctor) BlankScroll( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlazeDyeTub.html b/Docs/types/BlazeDyeTub.html new file mode 100644 index 0000000..2ed6d06 --- /dev/null +++ b/Docs/types/BlazeDyeTub.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BlazeDyeTub + + +

Back to Server.Items

+

BlazeDyeTub : DyeTub, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BlazeDyeTub()
+ (ctor) BlazeDyeTub( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlazeOfDeath.html b/Docs/types/BlazeOfDeath.html new file mode 100644 index 0000000..4754387 --- /dev/null +++ b/Docs/types/BlazeOfDeath.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BlazeOfDeath + + +

Back to Server.Items

+

BlazeOfDeath : Halberd, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+ (ctor) BlazeOfDeath()
+ (ctor) BlazeOfDeath( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BleedAttack.html b/Docs/types/BleedAttack.html new file mode 100644 index 0000000..a5df74e --- /dev/null +++ b/Docs/types/BleedAttack.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BleedAttack + + +

Back to Server.Items

+

BleedAttack : WeaponAbility

+

Nested Types: InternalTimer

+ (static) void BeginBleed( Mobile m, Mobile from )
+ (static) void DoBleed( Mobile m, Mobile from, int level )
+ (static) void EndBleed( Mobile m, bool message )
+ (static) bool IsBleeding( Mobile m )
+ (ctor) BleedAttack()
+ int BaseMana( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/Bless.html b/Docs/types/Bless.html new file mode 100644 index 0000000..16c9e96 --- /dev/null +++ b/Docs/types/Bless.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Bless + + +

Back to Server.Ethics.Hero

+

Bless : Power

+ (ctor) Bless()
+ virtual void BeginInvoke( Player from )
+ void Power_OnTarget( Mobile fromMobile, object obj, object state )
+ + diff --git a/Docs/types/BlessScroll.html b/Docs/types/BlessScroll.html new file mode 100644 index 0000000..3127ce1 --- /dev/null +++ b/Docs/types/BlessScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlessScroll + + +

Back to Server.Items

+

BlessScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BlessScroll()
+ (ctor) BlessScroll( int amount )
+ (ctor) BlessScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlessSpell.html b/Docs/types/BlessSpell.html new file mode 100644 index 0000000..b9c99c2 --- /dev/null +++ b/Docs/types/BlessSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlessSpell + + +

Back to Server.Spells.Third

+

BlessSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) BlessSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/Blight.html b/Docs/types/Blight.html new file mode 100644 index 0000000..6519998 --- /dev/null +++ b/Docs/types/Blight.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Blight + + +

Back to Server.Items

+

Blight : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Blight()
+ (ctor) Blight( int amount )
+ (ctor) Blight( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlightGrippedLongbow.html b/Docs/types/BlightGrippedLongbow.html new file mode 100644 index 0000000..2998a5c --- /dev/null +++ b/Docs/types/BlightGrippedLongbow.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlightGrippedLongbow + + +

Back to Server.Items

+

BlightGrippedLongbow : ElvenCompositeLongbow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BlightGrippedLongbow()
+ (ctor) BlightGrippedLongbow( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Block.html b/Docs/types/Block.html new file mode 100644 index 0000000..176d11f --- /dev/null +++ b/Docs/types/Block.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Block + + +

Back to Server.Items

+

Block : WeaponAbility

+

Nested Types: BlockInfo, InternalTimer

+ (static) void BeginBlock( Mobile m, int bonus )
+ (static) void EndBlock( Mobile m )
+ (static) bool GetBonus( Mobile targ, ref int bonus )
+ (ctor) Block()
+ int BaseMana( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/BlockEntry.html b/Docs/types/BlockEntry.html new file mode 100644 index 0000000..5915396 --- /dev/null +++ b/Docs/types/BlockEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BlockEntry + + +

Back to Server.Mobiles

+

(BaseMount) - BlockEntry

+ (ctor) BlockEntry( BlockMountType type, DateTime expiration )
+ bool IsExpired( get; )
+ + diff --git a/Docs/types/BlockInfo.html b/Docs/types/BlockInfo.html new file mode 100644 index 0000000..2d234a9 --- /dev/null +++ b/Docs/types/BlockInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BlockInfo + + +

Back to Server.Items

+

(Block) - BlockInfo

+ (ctor) BlockInfo( Mobile target, int bonus )
+ + diff --git a/Docs/types/BlockMountType.html b/Docs/types/BlockMountType.html new file mode 100644 index 0000000..f62791c --- /dev/null +++ b/Docs/types/BlockMountType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BlockMountType + + +

Back to Server.Mobiles

+

BlockMountType (Enum)

+ Dazed = 0,
+ BolaRecovery = 1,
+ DismountRecovery = 2,
+ None = -1
+ + diff --git a/Docs/types/Blocker.html b/Docs/types/Blocker.html new file mode 100644 index 0000000..55f28b2 --- /dev/null +++ b/Docs/types/Blocker.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Blocker + + +

Back to Server.Items

+

Blocker : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: GMItemPacket

+ (ctor) Blocker()
+ (ctor) Blocker( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual Packet GetWorldPacketFor( NetState state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Blood.html b/Docs/types/Blood.html new file mode 100644 index 0000000..eed0d5c --- /dev/null +++ b/Docs/types/Blood.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Blood + + +

Back to Server.Items

+

Blood : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer

+ (ctor) Blood()
+ (ctor) Blood( int itemID )
+ (ctor) Blood( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodElemental.html b/Docs/types/BloodElemental.html new file mode 100644 index 0000000..1ec50bf --- /dev/null +++ b/Docs/types/BloodElemental.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BloodElemental + + +

Back to Server.Mobiles

+

BloodElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BloodElemental()
+ (ctor) BloodElemental( Serial serial )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodOathScroll.html b/Docs/types/BloodOathScroll.html new file mode 100644 index 0000000..7b8b9e0 --- /dev/null +++ b/Docs/types/BloodOathScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BloodOathScroll + + +

Back to Server.Items

+

BloodOathScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BloodOathScroll()
+ (ctor) BloodOathScroll( int amount )
+ (ctor) BloodOathScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodOathSpell.html b/Docs/types/BloodOathSpell.html new file mode 100644 index 0000000..747720f --- /dev/null +++ b/Docs/types/BloodOathSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BloodOathSpell + + +

Back to Server.Spells.Necromancy

+

BloodOathSpell : NecromancerSpell, ISpell

+

Nested Types: ExpireTimer, InternalTarget

+ (static) Mobile GetBloodOath( Mobile m )
+ (static) bool RemoveCurse( Mobile m )
+ (ctor) BloodOathSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/BloodPentagram.html b/Docs/types/BloodPentagram.html new file mode 100644 index 0000000..8d7f80b --- /dev/null +++ b/Docs/types/BloodPentagram.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BloodPentagram + + +

Back to Server.Items

+

BloodPentagram : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BloodPentagram()
+ (ctor) BloodPentagram( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bloodmoss.html b/Docs/types/Bloodmoss.html new file mode 100644 index 0000000..da99886 --- /dev/null +++ b/Docs/types/Bloodmoss.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Bloodmoss + + +

Back to Server.Items

+

Bloodmoss : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Bloodmoss()
+ (ctor) Bloodmoss( Serial serial )
+ (ctor) Bloodmoss( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodwoodBoard.html b/Docs/types/BloodwoodBoard.html new file mode 100644 index 0000000..848e6dc --- /dev/null +++ b/Docs/types/BloodwoodBoard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BloodwoodBoard + + +

Back to Server.Items

+

BloodwoodBoard : Board, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BloodwoodBoard()
+ (ctor) BloodwoodBoard( int amount )
+ (ctor) BloodwoodBoard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodwoodLog.html b/Docs/types/BloodwoodLog.html new file mode 100644 index 0000000..ad56362 --- /dev/null +++ b/Docs/types/BloodwoodLog.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BloodwoodLog + + +

Back to Server.Items

+

BloodwoodLog : Log, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IAxe

+ (ctor) BloodwoodLog()
+ (ctor) BloodwoodLog( Serial serial )
+ (ctor) BloodwoodLog( int amount )
+ virtual bool Axe( Mobile from, BaseAxe axe )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodwoodSpirit.html b/Docs/types/BloodwoodSpirit.html new file mode 100644 index 0000000..c548205 --- /dev/null +++ b/Docs/types/BloodwoodSpirit.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BloodwoodSpirit + + +

Back to Server.Items

+

BloodwoodSpirit : BaseTalisman, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BloodwoodSpirit()
+ (ctor) BloodwoodSpirit( Serial serial )
+ bool ForceShowName( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodyPentagramAddon.html b/Docs/types/BloodyPentagramAddon.html new file mode 100644 index 0000000..37e8cdd --- /dev/null +++ b/Docs/types/BloodyPentagramAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BloodyPentagramAddon + + +

Back to Server.Items

+

BloodyPentagramAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IRewardItem

+ (ctor) BloodyPentagramAddon()
+ (ctor) BloodyPentagramAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodyPentagramComponent.html b/Docs/types/BloodyPentagramComponent.html new file mode 100644 index 0000000..ca96685 --- /dev/null +++ b/Docs/types/BloodyPentagramComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BloodyPentagramComponent + + +

Back to Server.Items

+

BloodyPentagramComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BloodyPentagramComponent( Serial serial )
+ (ctor) BloodyPentagramComponent( int itemID )
+ bool DisplayWeight( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodyPentagramDeed.html b/Docs/types/BloodyPentagramDeed.html new file mode 100644 index 0000000..e1dd827 --- /dev/null +++ b/Docs/types/BloodyPentagramDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BloodyPentagramDeed + + +

Back to Server.Items

+

BloodyPentagramDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) BloodyPentagramDeed()
+ (ctor) BloodyPentagramDeed( Serial serial )
+ BaseAddon Addon( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BloodyWaterArtifact.html b/Docs/types/BloodyWaterArtifact.html new file mode 100644 index 0000000..dc4dffa --- /dev/null +++ b/Docs/types/BloodyWaterArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BloodyWaterArtifact + + +

Back to Server.Items

+

BloodyWaterArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BloodyWaterArtifact()
+ (ctor) BloodyWaterArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Blowpipe.html b/Docs/types/Blowpipe.html new file mode 100644 index 0000000..9f674f4 --- /dev/null +++ b/Docs/types/Blowpipe.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Blowpipe + + +

Back to Server.Items

+

Blowpipe : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Blowpipe()
+ (ctor) Blowpipe( Serial serial )
+ (ctor) Blowpipe( int uses )
+ CraftSystem CraftSystem( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueBeaker.html b/Docs/types/BlueBeaker.html new file mode 100644 index 0000000..4e5a79d --- /dev/null +++ b/Docs/types/BlueBeaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BlueBeaker + + +

Back to Server.Items

+

BlueBeaker : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BlueBeaker()
+ (ctor) BlueBeaker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueBook.html b/Docs/types/BlueBook.html new file mode 100644 index 0000000..9223768 --- /dev/null +++ b/Docs/types/BlueBook.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BlueBook + + +

Back to Server.Items

+

BlueBook : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Derived Types: DrakovsJournal, TranslatedGargoyleJournal

+ (ctor) BlueBook()
+ (ctor) BlueBook( Serial serial )
+ (ctor) BlueBook( bool writable )
+ (ctor) BlueBook( int pageCount, bool writable )
+ (ctor) BlueBook( string title, string author, int pageCount, bool writable )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueCurvedFlask.html b/Docs/types/BlueCurvedFlask.html new file mode 100644 index 0000000..c7d5c4b --- /dev/null +++ b/Docs/types/BlueCurvedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BlueCurvedFlask + + +

Back to Server.Items

+

BlueCurvedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BlueCurvedFlask()
+ (ctor) BlueCurvedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueDecorativeRugAddon.html b/Docs/types/BlueDecorativeRugAddon.html new file mode 100644 index 0000000..53ae78b --- /dev/null +++ b/Docs/types/BlueDecorativeRugAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlueDecorativeRugAddon + + +

Back to Server.Items

+

BlueDecorativeRugAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BlueDecorativeRugAddon()
+ (ctor) BlueDecorativeRugAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueDecorativeRugDeed.html b/Docs/types/BlueDecorativeRugDeed.html new file mode 100644 index 0000000..8b16637 --- /dev/null +++ b/Docs/types/BlueDecorativeRugDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BlueDecorativeRugDeed + + +

Back to Server.Items

+

BlueDecorativeRugDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BlueDecorativeRugDeed()
+ (ctor) BlueDecorativeRugDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueDiamond.html b/Docs/types/BlueDiamond.html new file mode 100644 index 0000000..9f13bec --- /dev/null +++ b/Docs/types/BlueDiamond.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BlueDiamond + + +

Back to Server.Items

+

BlueDiamond : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BlueDiamond()
+ (ctor) BlueDiamond( int amount )
+ (ctor) BlueDiamond( Serial serial )
+ (ctor) BlueDiamond( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueFancyRugAddon.html b/Docs/types/BlueFancyRugAddon.html new file mode 100644 index 0000000..b8134f8 --- /dev/null +++ b/Docs/types/BlueFancyRugAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BlueFancyRugAddon + + +

Back to Server.Items

+

BlueFancyRugAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BlueFancyRugAddon()
+ (ctor) BlueFancyRugAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueFancyRugDeed.html b/Docs/types/BlueFancyRugDeed.html new file mode 100644 index 0000000..23e701d --- /dev/null +++ b/Docs/types/BlueFancyRugDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BlueFancyRugDeed + + +

Back to Server.Items

+

BlueFancyRugDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BlueFancyRugDeed()
+ (ctor) BlueFancyRugDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueNinjaQuestTeleporter.html b/Docs/types/BlueNinjaQuestTeleporter.html new file mode 100644 index 0000000..533fa0a --- /dev/null +++ b/Docs/types/BlueNinjaQuestTeleporter.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BlueNinjaQuestTeleporter + + +

Back to Server.Engines.Quests.Ninja

+

BlueNinjaQuestTeleporter : DynamicTeleporter, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BlueNinjaQuestTeleporter()
+ (ctor) BlueNinjaQuestTeleporter( Serial serial )
+ int LabelNumber( get; )
+ int NotWorkingMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool GetDestination( PlayerMobile player, ref Point3D loc, ref Map map )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BluePlainRugAddon.html b/Docs/types/BluePlainRugAddon.html new file mode 100644 index 0000000..eae965b --- /dev/null +++ b/Docs/types/BluePlainRugAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BluePlainRugAddon + + +

Back to Server.Items

+

BluePlainRugAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BluePlainRugAddon()
+ (ctor) BluePlainRugAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BluePlainRugDeed.html b/Docs/types/BluePlainRugDeed.html new file mode 100644 index 0000000..3e181b0 --- /dev/null +++ b/Docs/types/BluePlainRugDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BluePlainRugDeed + + +

Back to Server.Items

+

BluePlainRugDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BluePlainRugDeed()
+ (ctor) BluePlainRugDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueScales.html b/Docs/types/BlueScales.html new file mode 100644 index 0000000..4fa6088 --- /dev/null +++ b/Docs/types/BlueScales.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BlueScales + + +

Back to Server.Items

+

BlueScales : BaseScales, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BlueScales()
+ (ctor) BlueScales( int amount )
+ (ctor) BlueScales( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueSlateFloorCenter.html b/Docs/types/BlueSlateFloorCenter.html new file mode 100644 index 0000000..b6dad59 --- /dev/null +++ b/Docs/types/BlueSlateFloorCenter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BlueSlateFloorCenter + + +

Back to Server.Items

+

BlueSlateFloorCenter : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BlueSlateFloorCenter()
+ (ctor) BlueSlateFloorCenter( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueSnowflake.html b/Docs/types/BlueSnowflake.html new file mode 100644 index 0000000..2c10832 --- /dev/null +++ b/Docs/types/BlueSnowflake.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BlueSnowflake + + +

Back to Server.Items

+

BlueSnowflake : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BlueSnowflake()
+ (ctor) BlueSnowflake( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BlueSoulstone.html b/Docs/types/BlueSoulstone.html new file mode 100644 index 0000000..1df2914 --- /dev/null +++ b/Docs/types/BlueSoulstone.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BlueSoulstone + + +

Back to Server.Items

+

BlueSoulstone : SoulStone, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BlueSoulstone()
+ (ctor) BlueSoulstone( Serial serial )
+ (ctor) BlueSoulstone( string account )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Boar.html b/Docs/types/Boar.html new file mode 100644 index 0000000..b9e35b8 --- /dev/null +++ b/Docs/types/Boar.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Boar + + +

Back to Server.Mobiles

+

Boar : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Boar()
+ (ctor) Boar( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Board.html b/Docs/types/Board.html new file mode 100644 index 0000000..df52321 --- /dev/null +++ b/Docs/types/Board.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Board + + +

Back to Server.Items

+

Board : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+

Derived Types: AshBoard, BloodwoodBoard, FrostwoodBoard, HeartwoodBoard, OakBoard, YewBoard

+ (ctor) Board()
+ (ctor) Board( CraftResource resource )
+ (ctor) Board( Serial serial )
+ (ctor) Board( int amount )
+ (ctor) Board( CraftResource resource, int amount )
+ CraftResource Resource( get; set; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoatOrder.html b/Docs/types/BoatOrder.html new file mode 100644 index 0000000..fa3ec32 --- /dev/null +++ b/Docs/types/BoatOrder.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BoatOrder + + +

Back to Server.Multis

+

BoatOrder (Enum)

+ Move = 0,
+ Course = 1,
+ Single = 2
+ + diff --git a/Docs/types/Body.html b/Docs/types/Body.html new file mode 100644 index 0000000..3683f7c --- /dev/null +++ b/Docs/types/Body.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Body + + +

Back to Server

+

Body

+ (ctor) Body( int bodyID )
+ int BodyID( get; )
+ bool IsAnimal( get; )
+ bool IsEmpty( get; )
+ bool IsEquipment( get; )
+ bool IsFemale( get; )
+ bool IsGhost( get; )
+ bool IsHuman( get; )
+ bool IsMale( get; )
+ bool IsMonster( get; )
+ bool IsSea( get; )
+ BodyType Type( get; )
+ virtual bool Equals( object o )
+ virtual int GetHashCode()
+ virtual string ToString()
+ + diff --git a/Docs/types/BodyAttribute.html b/Docs/types/BodyAttribute.html new file mode 100644 index 0000000..ef9bf81 --- /dev/null +++ b/Docs/types/BodyAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BodyAttribute + + +

Back to Server

+

BodyAttribute : Attribute, _Attribute

+ (ctor) BodyAttribute()
+ + diff --git a/Docs/types/BodyEntry.html b/Docs/types/BodyEntry.html new file mode 100644 index 0000000..1dc4802 --- /dev/null +++ b/Docs/types/BodyEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BodyEntry + + +

Back to Server.Commands

+

BodyEntry

+ (ctor) BodyEntry( Body body, ModelBodyType bodyType, string name )
+ Body Body( get; )
+ ModelBodyType BodyType( get; )
+ string Name( get; )
+ virtual bool Equals( object obj )
+ virtual int GetHashCode()
+ + diff --git a/Docs/types/BodyEntrySorter.html b/Docs/types/BodyEntrySorter.html new file mode 100644 index 0000000..c9f8322 --- /dev/null +++ b/Docs/types/BodyEntrySorter.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BodyEntrySorter + + +

Back to Server.Commands

+

BodyEntrySorter : IComparer<BodyEntry>

+ (ctor) BodyEntrySorter()
+ virtual int Compare( BodyEntry a, BodyEntry b )
+ + diff --git a/Docs/types/BodySash.html b/Docs/types/BodySash.html new file mode 100644 index 0000000..cfd0033 --- /dev/null +++ b/Docs/types/BodySash.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BodySash + + +

Back to Server.Items

+

BodySash : BaseMiddleTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: LieutenantOfTheBritannianRoyalGuard

+ (ctor) BodySash()
+ (ctor) BodySash( int hue )
+ (ctor) BodySash( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BodyType.html b/Docs/types/BodyType.html new file mode 100644 index 0000000..3da60ae --- /dev/null +++ b/Docs/types/BodyType.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BodyType + + +

Back to Server

+

BodyType (Enum)

+ Empty = 0,
+ Monster = 1,
+ Sea = 2,
+ Animal = 3,
+ Human = 4,
+ Equipment = 5
+ + diff --git a/Docs/types/BogThing.html b/Docs/types/BogThing.html new file mode 100644 index 0000000..ac34724 --- /dev/null +++ b/Docs/types/BogThing.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BogThing + + +

Back to Server.Mobiles

+

BogThing : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BogThing()
+ (ctor) BogThing( Serial serial )
+ bool BardImmune( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ void EatBoglings()
+ virtual void GenerateLoot()
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ void SpawnBogling( Mobile m )
+ + diff --git a/Docs/types/Bogle.html b/Docs/types/Bogle.html new file mode 100644 index 0000000..4881191 --- /dev/null +++ b/Docs/types/Bogle.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Bogle + + +

Back to Server.Mobiles

+

Bogle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Bogle()
+ (ctor) Bogle( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bogling.html b/Docs/types/Bogling.html new file mode 100644 index 0000000..7b3ab7f --- /dev/null +++ b/Docs/types/Bogling.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Bogling + + +

Back to Server.Mobiles

+

Bogling : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Bogling()
+ (ctor) Bogling( Serial serial )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoilingCauldronAddon.html b/Docs/types/BoilingCauldronAddon.html new file mode 100644 index 0000000..1434aaf --- /dev/null +++ b/Docs/types/BoilingCauldronAddon.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BoilingCauldronAddon + + +

Back to Server.Items

+

BoilingCauldronAddon : BaseAddonContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BoilingCauldronAddon()
+ (ctor) BoilingCauldronAddon( Serial serial )
+ BaseAddonContainerDeed Deed( get; )
+ int DefaultDropSound( get; )
+ int DefaultGumpID( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoilingCauldronDeed.html b/Docs/types/BoilingCauldronDeed.html new file mode 100644 index 0000000..5ae79ef --- /dev/null +++ b/Docs/types/BoilingCauldronDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BoilingCauldronDeed + + +

Back to Server.Items

+

BoilingCauldronDeed : BaseAddonContainerDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) BoilingCauldronDeed()
+ (ctor) BoilingCauldronDeed( Serial serial )
+ BaseAddonContainer Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bokuto.html b/Docs/types/Bokuto.html new file mode 100644 index 0000000..2883411 --- /dev/null +++ b/Docs/types/Bokuto.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Bokuto + + +

Back to Server.Items

+

Bokuto : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: PeasantsBokuto

+ (ctor) Bokuto()
+ (ctor) Bokuto( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bola.html b/Docs/types/Bola.html new file mode 100644 index 0000000..1de7543 --- /dev/null +++ b/Docs/types/Bola.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Bola + + +

Back to Server.Items

+

Bola : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: BolaTarget

+ (static) void FinishThrow( object state )
+ (static) void ReleaseBolaLock( object state )
+ (ctor) Bola()
+ (ctor) Bola( int amount )
+ (ctor) Bola( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BolaBall.html b/Docs/types/BolaBall.html new file mode 100644 index 0000000..ef41ffc --- /dev/null +++ b/Docs/types/BolaBall.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BolaBall + + +

Back to Server.Items

+

BolaBall : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BolaBall()
+ (ctor) BolaBall( int amount )
+ (ctor) BolaBall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BolaTarget.html b/Docs/types/BolaTarget.html new file mode 100644 index 0000000..b9f30c5 --- /dev/null +++ b/Docs/types/BolaTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BolaTarget + + +

Back to Server.Items

+

(Bola) - BolaTarget : Target

+ (ctor) BolaTarget( Bola bola )
+ virtual void OnTarget( Mobile from, object obj )
+ + diff --git a/Docs/types/BoldStranger.html b/Docs/types/BoldStranger.html new file mode 100644 index 0000000..12d80ee --- /dev/null +++ b/Docs/types/BoldStranger.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BoldStranger + + +

Back to Server.Items

+

BoldStranger : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BoldStranger()
+ (ctor) BoldStranger( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bolt.html b/Docs/types/Bolt.html new file mode 100644 index 0000000..2438836 --- /dev/null +++ b/Docs/types/Bolt.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Bolt + + +

Back to Server.Items

+

Bolt : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Bolt()
+ (ctor) Bolt( int amount )
+ (ctor) Bolt( Serial serial )
+ double DefaultWeight( get; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoltEffect.html b/Docs/types/BoltEffect.html new file mode 100644 index 0000000..ac7f7fa --- /dev/null +++ b/Docs/types/BoltEffect.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BoltEffect + + +

Back to Server.Network

+

BoltEffect : Packet

+ (ctor) BoltEffect( IEntity target, int hue )
+ + diff --git a/Docs/types/BoltOfCloth.html b/Docs/types/BoltOfCloth.html new file mode 100644 index 0000000..0d78227 --- /dev/null +++ b/Docs/types/BoltOfCloth.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BoltOfCloth + + +

Back to Server.Items

+

BoltOfCloth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IDyable, ICommodity

+ (ctor) BoltOfCloth()
+ (ctor) BoltOfCloth( Serial serial )
+ (ctor) BoltOfCloth( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnSingleClick( Mobile from )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BondedStatus.html b/Docs/types/BondedStatus.html new file mode 100644 index 0000000..7a8a54f --- /dev/null +++ b/Docs/types/BondedStatus.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BondedStatus + + +

Back to Server.Network

+

BondedStatus : Packet

+ (ctor) BondedStatus( int val1, Serial serial, int val2 )
+ + diff --git a/Docs/types/Bone.html b/Docs/types/Bone.html new file mode 100644 index 0000000..b6c0b90 --- /dev/null +++ b/Docs/types/Bone.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Bone + + +

Back to Server.Items

+

Bone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Bone()
+ (ctor) Bone( Serial serial )
+ (ctor) Bone( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneArms.html b/Docs/types/BoneArms.html new file mode 100644 index 0000000..0034f26 --- /dev/null +++ b/Docs/types/BoneArms.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - BoneArms + + +

Back to Server.Items

+

BoneArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: MidnightBracers

+ (ctor) BoneArms()
+ (ctor) BoneArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ int RevertArmorBase( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneChest.html b/Docs/types/BoneChest.html new file mode 100644 index 0000000..136038b --- /dev/null +++ b/Docs/types/BoneChest.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - BoneChest + + +

Back to Server.Items

+

BoneChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: ShroudOfDeciet

+ (ctor) BoneChest()
+ (ctor) BoneChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ int RevertArmorBase( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneCouchAddon.html b/Docs/types/BoneCouchAddon.html new file mode 100644 index 0000000..fd0a0f2 --- /dev/null +++ b/Docs/types/BoneCouchAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BoneCouchAddon + + +

Back to Server.Items

+

BoneCouchAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BoneCouchAddon()
+ (ctor) BoneCouchAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Flip( Mobile from, Direction direction )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneCouchComponent.html b/Docs/types/BoneCouchComponent.html new file mode 100644 index 0000000..67f0af7 --- /dev/null +++ b/Docs/types/BoneCouchComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BoneCouchComponent + + +

Back to Server.Items

+

BoneCouchComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BoneCouchComponent( int itemID )
+ (ctor) BoneCouchComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneCouchDeed.html b/Docs/types/BoneCouchDeed.html new file mode 100644 index 0000000..33dd784 --- /dev/null +++ b/Docs/types/BoneCouchDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BoneCouchDeed + + +

Back to Server.Items

+

BoneCouchDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BoneCouchDeed()
+ (ctor) BoneCouchDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneCrusher.html b/Docs/types/BoneCrusher.html new file mode 100644 index 0000000..67c4dde --- /dev/null +++ b/Docs/types/BoneCrusher.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BoneCrusher + + +

Back to Server.Items

+

BoneCrusher : WarMace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BoneCrusher()
+ (ctor) BoneCrusher( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneDemon.html b/Docs/types/BoneDemon.html new file mode 100644 index 0000000..6140110 --- /dev/null +++ b/Docs/types/BoneDemon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BoneDemon + + +

Back to Server.Mobiles

+

BoneDemon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BoneDemon()
+ (ctor) BoneDemon( Serial serial )
+ bool AreaPeaceImmune( get; )
+ bool BardImmune( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneGloves.html b/Docs/types/BoneGloves.html new file mode 100644 index 0000000..2508cfd --- /dev/null +++ b/Docs/types/BoneGloves.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - BoneGloves + + +

Back to Server.Items

+

BoneGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) BoneGloves()
+ (ctor) BoneGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ int RevertArmorBase( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneHarvester.html b/Docs/types/BoneHarvester.html new file mode 100644 index 0000000..1954f74 --- /dev/null +++ b/Docs/types/BoneHarvester.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - BoneHarvester + + +

Back to Server.Items

+

BoneHarvester : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BreathOfTheDead

+ (ctor) BoneHarvester()
+ (ctor) BoneHarvester( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneHelm.html b/Docs/types/BoneHelm.html new file mode 100644 index 0000000..b44702d --- /dev/null +++ b/Docs/types/BoneHelm.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - BoneHelm + + +

Back to Server.Items

+

BoneHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: OrnateCrownOfTheHarrower

+ (ctor) BoneHelm()
+ (ctor) BoneHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneKnight.html b/Docs/types/BoneKnight.html new file mode 100644 index 0000000..7116a50 --- /dev/null +++ b/Docs/types/BoneKnight.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BoneKnight + + +

Back to Server.Mobiles

+

BoneKnight : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BoneKnight()
+ (ctor) BoneKnight( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneLegs.html b/Docs/types/BoneLegs.html new file mode 100644 index 0000000..c71de98 --- /dev/null +++ b/Docs/types/BoneLegs.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - BoneLegs + + +

Back to Server.Items

+

BoneLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) BoneLegs()
+ (ctor) BoneLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ int RevertArmorBase( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneMagi.html b/Docs/types/BoneMagi.html new file mode 100644 index 0000000..56f2620 --- /dev/null +++ b/Docs/types/BoneMagi.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BoneMagi + + +

Back to Server.Mobiles

+

BoneMagi : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BoneMagi()
+ (ctor) BoneMagi( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BonePile.html b/Docs/types/BonePile.html new file mode 100644 index 0000000..d7db421 --- /dev/null +++ b/Docs/types/BonePile.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BonePile + + +

Back to Server.Items

+

BonePile : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable

+ (ctor) BonePile()
+ (ctor) BonePile( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneTableAddon.html b/Docs/types/BoneTableAddon.html new file mode 100644 index 0000000..6ed85d7 --- /dev/null +++ b/Docs/types/BoneTableAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BoneTableAddon + + +

Back to Server.Items

+

BoneTableAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BoneTableAddon()
+ (ctor) BoneTableAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneTableDeed.html b/Docs/types/BoneTableDeed.html new file mode 100644 index 0000000..331ec03 --- /dev/null +++ b/Docs/types/BoneTableDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BoneTableDeed + + +

Back to Server.Items

+

BoneTableDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BoneTableDeed()
+ (ctor) BoneTableDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneThroneAddon.html b/Docs/types/BoneThroneAddon.html new file mode 100644 index 0000000..08add81 --- /dev/null +++ b/Docs/types/BoneThroneAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BoneThroneAddon + + +

Back to Server.Items

+

BoneThroneAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BoneThroneAddon()
+ (ctor) BoneThroneAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneThroneComponent.html b/Docs/types/BoneThroneComponent.html new file mode 100644 index 0000000..ad755d4 --- /dev/null +++ b/Docs/types/BoneThroneComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BoneThroneComponent + + +

Back to Server.Items

+

BoneThroneComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BoneThroneComponent()
+ (ctor) BoneThroneComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BoneThroneDeed.html b/Docs/types/BoneThroneDeed.html new file mode 100644 index 0000000..80c136a --- /dev/null +++ b/Docs/types/BoneThroneDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BoneThroneDeed + + +

Back to Server.Items

+

BoneThroneDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BoneThroneDeed()
+ (ctor) BoneThroneDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bonesmasher.html b/Docs/types/Bonesmasher.html new file mode 100644 index 0000000..8c39df7 --- /dev/null +++ b/Docs/types/Bonesmasher.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Bonesmasher + + +

Back to Server.Items

+

Bonesmasher : DiamondMace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Bonesmasher()
+ (ctor) Bonesmasher( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bonnet.html b/Docs/types/Bonnet.html new file mode 100644 index 0000000..b3d1ad4 --- /dev/null +++ b/Docs/types/Bonnet.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Bonnet + + +

Back to Server.Items

+

Bonnet : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) Bonnet()
+ (ctor) Bonnet( Serial serial )
+ (ctor) Bonnet( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BonusHarvestResource.html b/Docs/types/BonusHarvestResource.html new file mode 100644 index 0000000..dc86ddd --- /dev/null +++ b/Docs/types/BonusHarvestResource.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BonusHarvestResource + + +

Back to Server.Engines.Harvest

+

BonusHarvestResource

+ (ctor) BonusHarvestResource( double reqSkill, double chance, TextDefinition message, Type type )
+ double Chance( get; set; )
+ double ReqSkill( get; set; )
+ TextDefinition SuccessMessage( get; )
+ Type Type( get; set; )
+ void SendSuccessTo( Mobile m )
+ + diff --git a/Docs/types/BookContent.html b/Docs/types/BookContent.html new file mode 100644 index 0000000..1a4891c --- /dev/null +++ b/Docs/types/BookContent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BookContent + + +

Back to Server.Items

+

BookContent

+ (ctor) BookContent( string title, string author, BookPageInfo[] pages )
+ string Author( get; )
+ BookPageInfo[] Pages( get; )
+ string Title( get; )
+ BookPageInfo[] Copy()
+ bool IsMatch( BookPageInfo[] cmp )
+ + diff --git a/Docs/types/BookHeader.html b/Docs/types/BookHeader.html new file mode 100644 index 0000000..7f4cf94 --- /dev/null +++ b/Docs/types/BookHeader.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BookHeader + + +

Back to Server.Items

+

BookHeader : Packet

+ (ctor) BookHeader( Mobile from, BaseBook book )
+ + diff --git a/Docs/types/BookOfBushido.html b/Docs/types/BookOfBushido.html new file mode 100644 index 0000000..e3c1bb8 --- /dev/null +++ b/Docs/types/BookOfBushido.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BookOfBushido + + +

Back to Server.Items

+

BookOfBushido : Spellbook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) BookOfBushido()
+ (ctor) BookOfBushido( ulong content )
+ (ctor) BookOfBushido( Serial serial )
+ int BookCount( get; )
+ int BookOffset( get; )
+ SpellbookType SpellbookType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BookOfChivalry.html b/Docs/types/BookOfChivalry.html new file mode 100644 index 0000000..737fb4d --- /dev/null +++ b/Docs/types/BookOfChivalry.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BookOfChivalry + + +

Back to Server.Items

+

BookOfChivalry : Spellbook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) BookOfChivalry()
+ (ctor) BookOfChivalry( ulong content )
+ (ctor) BookOfChivalry( Serial serial )
+ int BookCount( get; )
+ int BookOffset( get; )
+ SpellbookType SpellbookType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BookOfNinjitsu.html b/Docs/types/BookOfNinjitsu.html new file mode 100644 index 0000000..09af420 --- /dev/null +++ b/Docs/types/BookOfNinjitsu.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BookOfNinjitsu + + +

Back to Server.Items

+

BookOfNinjitsu : Spellbook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) BookOfNinjitsu()
+ (ctor) BookOfNinjitsu( ulong content )
+ (ctor) BookOfNinjitsu( Serial serial )
+ int BookCount( get; )
+ int BookOffset( get; )
+ SpellbookType SpellbookType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BookPageDetails.html b/Docs/types/BookPageDetails.html new file mode 100644 index 0000000..66324d7 --- /dev/null +++ b/Docs/types/BookPageDetails.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BookPageDetails + + +

Back to Server.Items

+

BookPageDetails : Packet

+ (ctor) BookPageDetails( BaseBook book )
+ + diff --git a/Docs/types/BookPageInfo.html b/Docs/types/BookPageInfo.html new file mode 100644 index 0000000..3a04313 --- /dev/null +++ b/Docs/types/BookPageInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BookPageInfo + + +

Back to Server.Items

+

BookPageInfo

+ (ctor) BookPageInfo()
+ (ctor) BookPageInfo( GenericReader reader )
+ (ctor) BookPageInfo( string[] lines )
+ string[] Lines( get; set; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BooksFaceDownArtifact.html b/Docs/types/BooksFaceDownArtifact.html new file mode 100644 index 0000000..d38fc5d --- /dev/null +++ b/Docs/types/BooksFaceDownArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BooksFaceDownArtifact + + +

Back to Server.Items

+

BooksFaceDownArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BooksFaceDownArtifact()
+ (ctor) BooksFaceDownArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BooksNorthArtifact.html b/Docs/types/BooksNorthArtifact.html new file mode 100644 index 0000000..9e3040a --- /dev/null +++ b/Docs/types/BooksNorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BooksNorthArtifact + + +

Back to Server.Items

+

BooksNorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BooksNorthArtifact()
+ (ctor) BooksNorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BooksWestArtifact.html b/Docs/types/BooksWestArtifact.html new file mode 100644 index 0000000..1b70844 --- /dev/null +++ b/Docs/types/BooksWestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BooksWestArtifact + + +

Back to Server.Items

+

BooksWestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BooksWestArtifact()
+ (ctor) BooksWestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Boomstick.html b/Docs/types/Boomstick.html new file mode 100644 index 0000000..e23e3cf --- /dev/null +++ b/Docs/types/Boomstick.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Boomstick + + +

Back to Server.Items

+

Boomstick : WildStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Boomstick()
+ (ctor) Boomstick( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Boots.html b/Docs/types/Boots.html new file mode 100644 index 0000000..16f7303 --- /dev/null +++ b/Docs/types/Boots.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Boots + + +

Back to Server.Items

+

Boots : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: DetectiveBoots

+ (ctor) Boots()
+ (ctor) Boots( int hue )
+ (ctor) Boots( Serial serial )
+ CraftResource DefaultResource( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bottle.html b/Docs/types/Bottle.html new file mode 100644 index 0000000..c7e12cb --- /dev/null +++ b/Docs/types/Bottle.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Bottle + + +

Back to Server.Items

+

Bottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Bottle()
+ (ctor) Bottle( Serial serial )
+ (ctor) Bottle( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BottleArtifact.html b/Docs/types/BottleArtifact.html new file mode 100644 index 0000000..70b8c35 --- /dev/null +++ b/Docs/types/BottleArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BottleArtifact + + +

Back to Server.Items

+

BottleArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BottleArtifact()
+ (ctor) BottleArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BounceInfo.html b/Docs/types/BounceInfo.html new file mode 100644 index 0000000..60db1e3 --- /dev/null +++ b/Docs/types/BounceInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BounceInfo + + +

Back to Server

+

BounceInfo

+ (static) BounceInfo Deserialize( GenericReader reader )
+ (static) void Serialize( BounceInfo info, GenericWriter writer )
+ (ctor) BounceInfo( Item item )
+ (ctor) BounceInfo( Map map, Point3D loc, Point3D worldLoc, object parent )
+ + diff --git a/Docs/types/BoundingBoxCallback.html b/Docs/types/BoundingBoxCallback.html new file mode 100644 index 0000000..7379b8d --- /dev/null +++ b/Docs/types/BoundingBoxCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BoundingBoxCallback + + +

Back to Server

+

BoundingBoxCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) BoundingBoxCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, Map map, Point3D start, Point3D end, object state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, Map map, Point3D start, Point3D end, object state )
+ + diff --git a/Docs/types/BoundingBoxPicker.html b/Docs/types/BoundingBoxPicker.html new file mode 100644 index 0000000..3d2bdf4 --- /dev/null +++ b/Docs/types/BoundingBoxPicker.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BoundingBoxPicker + + +

Back to Server

+

BoundingBoxPicker

+

Nested Types: PickTarget

+ (static) void Begin( Mobile from, BoundingBoxCallback callback, object state )
+ (ctor) BoundingBoxPicker()
+ + diff --git a/Docs/types/Bow.html b/Docs/types/Bow.html new file mode 100644 index 0000000..ddf83de --- /dev/null +++ b/Docs/types/Bow.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Bow + + +

Back to Server.Items

+

Bow : BaseRanged, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BowOfTheJukaKing, Frostbringer, JukaBow, TheDryadBow

+ (ctor) Bow()
+ (ctor) Bow( Serial serial )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefMaxRange( get; )
+ int EffectID( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BowOfTheJukaKing.html b/Docs/types/BowOfTheJukaKing.html new file mode 100644 index 0000000..aa8ebc8 --- /dev/null +++ b/Docs/types/BowOfTheJukaKing.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BowOfTheJukaKing + + +

Back to Server.Items

+

BowOfTheJukaKing : Bow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BowOfTheJukaKing()
+ (ctor) BowOfTheJukaKing( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BowlArtifact.html b/Docs/types/BowlArtifact.html new file mode 100644 index 0000000..fa2bc19 --- /dev/null +++ b/Docs/types/BowlArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BowlArtifact + + +

Back to Server.Items

+

BowlArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BowlArtifact()
+ (ctor) BowlArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BowlFlour.html b/Docs/types/BowlFlour.html new file mode 100644 index 0000000..fd61370 --- /dev/null +++ b/Docs/types/BowlFlour.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BowlFlour + + +

Back to Server.Items

+

BowlFlour : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BowlFlour()
+ (ctor) BowlFlour( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BowlsHorizontalArtifact.html b/Docs/types/BowlsHorizontalArtifact.html new file mode 100644 index 0000000..280a8a5 --- /dev/null +++ b/Docs/types/BowlsHorizontalArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BowlsHorizontalArtifact + + +

Back to Server.Items

+

BowlsHorizontalArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BowlsHorizontalArtifact()
+ (ctor) BowlsHorizontalArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BowlsVerticalArtifact.html b/Docs/types/BowlsVerticalArtifact.html new file mode 100644 index 0000000..bd4659e --- /dev/null +++ b/Docs/types/BowlsVerticalArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BowlsVerticalArtifact + + +

Back to Server.Items

+

BowlsVerticalArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BowlsVerticalArtifact()
+ (ctor) BowlsVerticalArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bowyer.html b/Docs/types/Bowyer.html new file mode 100644 index 0000000..d4206b4 --- /dev/null +++ b/Docs/types/Bowyer.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Bowyer + + +

Back to Server.Mobiles

+

Bowyer : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Bowyer()
+ (ctor) Bowyer( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetShoeHue()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BraceletCallback.html b/Docs/types/BraceletCallback.html new file mode 100644 index 0000000..06c8db2 --- /dev/null +++ b/Docs/types/BraceletCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BraceletCallback + + +

Back to Server.Items

+

(BraceletOfBinding) - BraceletCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) BraceletCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from )
+ + diff --git a/Docs/types/BraceletEntry.html b/Docs/types/BraceletEntry.html new file mode 100644 index 0000000..cbb2d98 --- /dev/null +++ b/Docs/types/BraceletEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BraceletEntry + + +

Back to Server.Items

+

(BraceletOfBinding) - BraceletEntry : ContextMenuEntry

+ (ctor) BraceletEntry( BraceletCallback callback, int number, bool enabled )
+ virtual void OnClick()
+ + diff --git a/Docs/types/BraceletOfBinding.html b/Docs/types/BraceletOfBinding.html new file mode 100644 index 0000000..b7fbf83 --- /dev/null +++ b/Docs/types/BraceletOfBinding.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - BraceletOfBinding + + +

Back to Server.Items

+

BraceletOfBinding : BaseBracelet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, TranslocationItem

+

Nested Types: BindTarget, BraceletCallback, BraceletEntry, InscribePrompt, TransportTimer

+ (ctor) BraceletOfBinding()
+ (ctor) BraceletOfBinding( Serial serial )
+ BraceletOfBinding Bound( get; set; )
+ int Charges( get; set; )
+ string Inscription( get; set; )
+ int MaxCharges( get; )
+ int MaxRecharges( get; )
+ int Recharges( get; set; )
+ string TranslocationItemName( get; )
+ void Activate( Mobile from )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ void Bind( Mobile from )
+ bool CheckUse( Mobile from, bool successMessage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ void Inscribe( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ void Search( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BraceletOfHealth.html b/Docs/types/BraceletOfHealth.html new file mode 100644 index 0000000..c155118 --- /dev/null +++ b/Docs/types/BraceletOfHealth.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BraceletOfHealth + + +

Back to Server.Items

+

BraceletOfHealth : GoldBracelet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) BraceletOfHealth()
+ (ctor) BraceletOfHealth( Serial serial )
+ int ArtifactRarity( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrambleCoat.html b/Docs/types/BrambleCoat.html new file mode 100644 index 0000000..7c8d73a --- /dev/null +++ b/Docs/types/BrambleCoat.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - BrambleCoat + + +

Back to Server.Items

+

BrambleCoat : WoodlandChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) BrambleCoat()
+ (ctor) BrambleCoat( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BraveKnightOfTheBritannia.html b/Docs/types/BraveKnightOfTheBritannia.html new file mode 100644 index 0000000..4adf130 --- /dev/null +++ b/Docs/types/BraveKnightOfTheBritannia.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BraveKnightOfTheBritannia + + +

Back to Server.Items

+

BraveKnightOfTheBritannia : Katana, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BraveKnightOfTheBritannia()
+ (ctor) BraveKnightOfTheBritannia( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Brazier.html b/Docs/types/Brazier.html new file mode 100644 index 0000000..684fa86 --- /dev/null +++ b/Docs/types/Brazier.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Brazier + + +

Back to Server.Items

+

Brazier : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Brazier()
+ (ctor) Brazier( Serial serial )
+ int LitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrazierArtifact.html b/Docs/types/BrazierArtifact.html new file mode 100644 index 0000000..d6dd1ee --- /dev/null +++ b/Docs/types/BrazierArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrazierArtifact + + +

Back to Server.Items

+

BrazierArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrazierArtifact()
+ (ctor) BrazierArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrazierTall.html b/Docs/types/BrazierTall.html new file mode 100644 index 0000000..c56300e --- /dev/null +++ b/Docs/types/BrazierTall.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrazierTall + + +

Back to Server.Items

+

BrazierTall : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrazierTall()
+ (ctor) BrazierTall( Serial serial )
+ int LitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BreadLoaf.html b/Docs/types/BreadLoaf.html new file mode 100644 index 0000000..ad3d1d0 --- /dev/null +++ b/Docs/types/BreadLoaf.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BreadLoaf + + +

Back to Server.Items

+

BreadLoaf : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BreadLoaf()
+ (ctor) BreadLoaf( int amount )
+ (ctor) BreadLoaf( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BreathOfTheDead.html b/Docs/types/BreathOfTheDead.html new file mode 100644 index 0000000..48c35f1 --- /dev/null +++ b/Docs/types/BreathOfTheDead.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BreathOfTheDead + + +

Back to Server.Items

+

BreathOfTheDead : BoneHarvester, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) BreathOfTheDead()
+ (ctor) BreathOfTheDead( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrickHouseDeed.html b/Docs/types/BrickHouseDeed.html new file mode 100644 index 0000000..4203c3f --- /dev/null +++ b/Docs/types/BrickHouseDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BrickHouseDeed + + +

Back to Server.Multis.Deeds

+

BrickHouseDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrickHouseDeed()
+ (ctor) BrickHouseDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BricksFloor1.html b/Docs/types/BricksFloor1.html new file mode 100644 index 0000000..c9d8cb4 --- /dev/null +++ b/Docs/types/BricksFloor1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BricksFloor1 + + +

Back to Server.Items

+

BricksFloor1 : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BricksFloor1()
+ (ctor) BricksFloor1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BricksFloor2.html b/Docs/types/BricksFloor2.html new file mode 100644 index 0000000..bb7f8fc --- /dev/null +++ b/Docs/types/BricksFloor2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BricksFloor2 + + +

Back to Server.Items

+

BricksFloor2 : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BricksFloor2()
+ (ctor) BricksFloor2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrideGroom.html b/Docs/types/BrideGroom.html new file mode 100644 index 0000000..45e05db --- /dev/null +++ b/Docs/types/BrideGroom.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BrideGroom + + +

Back to Server.Mobiles

+

BrideGroom : BaseEscortable, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) int GetRandomHue()
+ (ctor) BrideGroom()
+ (ctor) BrideGroom( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Brigand.html b/Docs/types/Brigand.html new file mode 100644 index 0000000..d43ac7f --- /dev/null +++ b/Docs/types/Brigand.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Brigand + + +

Back to Server.Mobiles

+

Brigand : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Brigand()
+ (ctor) Brigand( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrigandCamp.html b/Docs/types/BrigandCamp.html new file mode 100644 index 0000000..a5359d8 --- /dev/null +++ b/Docs/types/BrigandCamp.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - BrigandCamp + + +

Back to Server.Multis

+

BrigandCamp : BaseCamp, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrigandCamp()
+ (ctor) BrigandCamp( Serial serial )
+ Mobile Brigands( get; )
+ Mobile Executioners( get; )
+ void AddCampChests()
+ virtual void AddComponents()
+ virtual void AddItem( Item item, int xOffset, int yOffset, int zOffset )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrightlyColoredEggs.html b/Docs/types/BrightlyColoredEggs.html new file mode 100644 index 0000000..b71d17f --- /dev/null +++ b/Docs/types/BrightlyColoredEggs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrightlyColoredEggs + + +

Back to Server.Items

+

BrightlyColoredEggs : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrightlyColoredEggs()
+ (ctor) BrightlyColoredEggs( Serial serial )
+ string DefaultName( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrilliantAmber.html b/Docs/types/BrilliantAmber.html new file mode 100644 index 0000000..8d9c2bc --- /dev/null +++ b/Docs/types/BrilliantAmber.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrilliantAmber + + +

Back to Server.Items

+

BrilliantAmber : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrilliantAmber()
+ (ctor) BrilliantAmber( int amount )
+ (ctor) BrilliantAmber( Serial serial )
+ (ctor) BrilliantAmber( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BringToPackCommand.html b/Docs/types/BringToPackCommand.html new file mode 100644 index 0000000..f922caa --- /dev/null +++ b/Docs/types/BringToPackCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BringToPackCommand + + +

Back to Server.Commands.Generic

+

BringToPackCommand : BaseCommand

+ (ctor) BringToPackCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/Britain.html b/Docs/types/Britain.html new file mode 100644 index 0000000..05f599a --- /dev/null +++ b/Docs/types/Britain.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Britain + + +

Back to Server.Factions

+

Britain : Town, IComparable

+ (ctor) Britain()
+ + diff --git a/Docs/types/BritannianFlora.html b/Docs/types/BritannianFlora.html new file mode 100644 index 0000000..f098a6b --- /dev/null +++ b/Docs/types/BritannianFlora.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BritannianFlora + + +

Back to Server.Items

+

BritannianFlora : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BritannianFlora()
+ (ctor) BritannianFlora( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BroadcastCrystal.html b/Docs/types/BroadcastCrystal.html new file mode 100644 index 0000000..b70567a --- /dev/null +++ b/Docs/types/BroadcastCrystal.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - BroadcastCrystal + + +

Back to Server.Items

+

BroadcastCrystal : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) BroadcastCrystal()
+ (ctor) BroadcastCrystal( Serial serial )
+ (ctor) BroadcastCrystal( int charges )
+ bool Active( get; set; )
+ int Charges( get; set; )
+ bool HandlesOnSpeech( get; )
+ int LabelNumber( get; )
+ List<ReceiverCrystal> Receivers( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BroadcastPrompt.html b/Docs/types/BroadcastPrompt.html new file mode 100644 index 0000000..3db7f19 --- /dev/null +++ b/Docs/types/BroadcastPrompt.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BroadcastPrompt + + +

Back to Server.Factions

+

(Faction) - BroadcastPrompt : Prompt

+ (ctor) BroadcastPrompt( Faction faction )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/Broadcasts.html b/Docs/types/Broadcasts.html new file mode 100644 index 0000000..46badd7 --- /dev/null +++ b/Docs/types/Broadcasts.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Broadcasts + + +

Back to Server.Misc

+

Broadcasts

+ (static) void EventSink_Crashed( CrashedEventArgs e )
+ (static) void EventSink_Shutdown( ShutdownEventArgs e )
+ (static) void Initialize()
+ (ctor) Broadcasts()
+ + diff --git a/Docs/types/Broadsword.html b/Docs/types/Broadsword.html new file mode 100644 index 0000000..7e43d1e --- /dev/null +++ b/Docs/types/Broadsword.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Broadsword + + +

Back to Server.Items

+

Broadsword : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Broadsword()
+ (ctor) Broadsword( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrocadeGozaMatEastAddon.html b/Docs/types/BrocadeGozaMatEastAddon.html new file mode 100644 index 0000000..02d4cc9 --- /dev/null +++ b/Docs/types/BrocadeGozaMatEastAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BrocadeGozaMatEastAddon + + +

Back to Server.Items

+

BrocadeGozaMatEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrocadeGozaMatEastAddon()
+ (ctor) BrocadeGozaMatEastAddon( Serial serial )
+ (ctor) BrocadeGozaMatEastAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrocadeGozaMatEastDeed.html b/Docs/types/BrocadeGozaMatEastDeed.html new file mode 100644 index 0000000..adcab7a --- /dev/null +++ b/Docs/types/BrocadeGozaMatEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrocadeGozaMatEastDeed + + +

Back to Server.Items

+

BrocadeGozaMatEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrocadeGozaMatEastDeed()
+ (ctor) BrocadeGozaMatEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrocadeGozaMatSouthAddon.html b/Docs/types/BrocadeGozaMatSouthAddon.html new file mode 100644 index 0000000..9cbb78f --- /dev/null +++ b/Docs/types/BrocadeGozaMatSouthAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BrocadeGozaMatSouthAddon + + +

Back to Server.Items

+

BrocadeGozaMatSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrocadeGozaMatSouthAddon()
+ (ctor) BrocadeGozaMatSouthAddon( Serial serial )
+ (ctor) BrocadeGozaMatSouthAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrocadeGozaMatSouthDeed.html b/Docs/types/BrocadeGozaMatSouthDeed.html new file mode 100644 index 0000000..cea6ad4 --- /dev/null +++ b/Docs/types/BrocadeGozaMatSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrocadeGozaMatSouthDeed + + +

Back to Server.Items

+

BrocadeGozaMatSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrocadeGozaMatSouthDeed()
+ (ctor) BrocadeGozaMatSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrocadeSquareGozaMatEastAddon.html b/Docs/types/BrocadeSquareGozaMatEastAddon.html new file mode 100644 index 0000000..bd90255 --- /dev/null +++ b/Docs/types/BrocadeSquareGozaMatEastAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BrocadeSquareGozaMatEastAddon + + +

Back to Server.Items

+

BrocadeSquareGozaMatEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrocadeSquareGozaMatEastAddon()
+ (ctor) BrocadeSquareGozaMatEastAddon( Serial serial )
+ (ctor) BrocadeSquareGozaMatEastAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrocadeSquareGozaMatEastDeed.html b/Docs/types/BrocadeSquareGozaMatEastDeed.html new file mode 100644 index 0000000..04a440e --- /dev/null +++ b/Docs/types/BrocadeSquareGozaMatEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrocadeSquareGozaMatEastDeed + + +

Back to Server.Items

+

BrocadeSquareGozaMatEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrocadeSquareGozaMatEastDeed()
+ (ctor) BrocadeSquareGozaMatEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrocadeSquareGozaMatSouthAddon.html b/Docs/types/BrocadeSquareGozaMatSouthAddon.html new file mode 100644 index 0000000..16d93e2 --- /dev/null +++ b/Docs/types/BrocadeSquareGozaMatSouthAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BrocadeSquareGozaMatSouthAddon + + +

Back to Server.Items

+

BrocadeSquareGozaMatSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrocadeSquareGozaMatSouthAddon()
+ (ctor) BrocadeSquareGozaMatSouthAddon( Serial serial )
+ (ctor) BrocadeSquareGozaMatSouthAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrocadeSquareGozaMatSouthDeed.html b/Docs/types/BrocadeSquareGozaMatSouthDeed.html new file mode 100644 index 0000000..0eaae3c --- /dev/null +++ b/Docs/types/BrocadeSquareGozaMatSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrocadeSquareGozaMatSouthDeed + + +

Back to Server.Items

+

BrocadeSquareGozaMatSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrocadeSquareGozaMatSouthDeed()
+ (ctor) BrocadeSquareGozaMatSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenArmoireAddon.html b/Docs/types/BrokenArmoireAddon.html new file mode 100644 index 0000000..37c23e1 --- /dev/null +++ b/Docs/types/BrokenArmoireAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenArmoireAddon + + +

Back to Server.Items

+

BrokenArmoireAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrokenArmoireAddon()
+ (ctor) BrokenArmoireAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenArmoireComponent.html b/Docs/types/BrokenArmoireComponent.html new file mode 100644 index 0000000..76f86de --- /dev/null +++ b/Docs/types/BrokenArmoireComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenArmoireComponent + + +

Back to Server.Items

+

BrokenArmoireComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BrokenArmoireComponent()
+ (ctor) BrokenArmoireComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenArmoireDeed.html b/Docs/types/BrokenArmoireDeed.html new file mode 100644 index 0000000..3cef981 --- /dev/null +++ b/Docs/types/BrokenArmoireDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrokenArmoireDeed + + +

Back to Server.Items

+

BrokenArmoireDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrokenArmoireDeed()
+ (ctor) BrokenArmoireDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenBedAddon.html b/Docs/types/BrokenBedAddon.html new file mode 100644 index 0000000..f2de27d --- /dev/null +++ b/Docs/types/BrokenBedAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenBedAddon + + +

Back to Server.Items

+

BrokenBedAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrokenBedAddon( bool east )
+ (ctor) BrokenBedAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenBedDeed.html b/Docs/types/BrokenBedDeed.html new file mode 100644 index 0000000..a223be0 --- /dev/null +++ b/Docs/types/BrokenBedDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BrokenBedDeed + + +

Back to Server.Items

+

BrokenBedDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) BrokenBedDeed()
+ (ctor) BrokenBedDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenBookcaseAddon.html b/Docs/types/BrokenBookcaseAddon.html new file mode 100644 index 0000000..8dfd54f --- /dev/null +++ b/Docs/types/BrokenBookcaseAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenBookcaseAddon + + +

Back to Server.Items

+

BrokenBookcaseAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrokenBookcaseAddon()
+ (ctor) BrokenBookcaseAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenBookcaseComponent.html b/Docs/types/BrokenBookcaseComponent.html new file mode 100644 index 0000000..bf2eafc --- /dev/null +++ b/Docs/types/BrokenBookcaseComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenBookcaseComponent + + +

Back to Server.Items

+

BrokenBookcaseComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BrokenBookcaseComponent()
+ (ctor) BrokenBookcaseComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenBookcaseDeed.html b/Docs/types/BrokenBookcaseDeed.html new file mode 100644 index 0000000..773fdec --- /dev/null +++ b/Docs/types/BrokenBookcaseDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrokenBookcaseDeed + + +

Back to Server.Items

+

BrokenBookcaseDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrokenBookcaseDeed()
+ (ctor) BrokenBookcaseDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenChair.html b/Docs/types/BrokenChair.html new file mode 100644 index 0000000..bd97e6e --- /dev/null +++ b/Docs/types/BrokenChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BrokenChair + + +

Back to Server.Items

+

BrokenChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrokenChair()
+ (ctor) BrokenChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenChestOfDrawersAddon.html b/Docs/types/BrokenChestOfDrawersAddon.html new file mode 100644 index 0000000..d95f2d4 --- /dev/null +++ b/Docs/types/BrokenChestOfDrawersAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenChestOfDrawersAddon + + +

Back to Server.Items

+

BrokenChestOfDrawersAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrokenChestOfDrawersAddon()
+ (ctor) BrokenChestOfDrawersAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenChestOfDrawersComponent.html b/Docs/types/BrokenChestOfDrawersComponent.html new file mode 100644 index 0000000..1936747 --- /dev/null +++ b/Docs/types/BrokenChestOfDrawersComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenChestOfDrawersComponent + + +

Back to Server.Items

+

BrokenChestOfDrawersComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BrokenChestOfDrawersComponent()
+ (ctor) BrokenChestOfDrawersComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenChestOfDrawersDeed.html b/Docs/types/BrokenChestOfDrawersDeed.html new file mode 100644 index 0000000..6f1bf35 --- /dev/null +++ b/Docs/types/BrokenChestOfDrawersDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrokenChestOfDrawersDeed + + +

Back to Server.Items

+

BrokenChestOfDrawersDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrokenChestOfDrawersDeed()
+ (ctor) BrokenChestOfDrawersDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenCoveredChairAddon.html b/Docs/types/BrokenCoveredChairAddon.html new file mode 100644 index 0000000..f826de5 --- /dev/null +++ b/Docs/types/BrokenCoveredChairAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenCoveredChairAddon + + +

Back to Server.Items

+

BrokenCoveredChairAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrokenCoveredChairAddon()
+ (ctor) BrokenCoveredChairAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenCoveredChairComponent.html b/Docs/types/BrokenCoveredChairComponent.html new file mode 100644 index 0000000..2f2639c --- /dev/null +++ b/Docs/types/BrokenCoveredChairComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenCoveredChairComponent + + +

Back to Server.Items

+

BrokenCoveredChairComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BrokenCoveredChairComponent()
+ (ctor) BrokenCoveredChairComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenCoveredChairDeed.html b/Docs/types/BrokenCoveredChairDeed.html new file mode 100644 index 0000000..8a62853 --- /dev/null +++ b/Docs/types/BrokenCoveredChairDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrokenCoveredChairDeed + + +

Back to Server.Items

+

BrokenCoveredChairDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrokenCoveredChairDeed()
+ (ctor) BrokenCoveredChairDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenFallenChairAddon.html b/Docs/types/BrokenFallenChairAddon.html new file mode 100644 index 0000000..f579959 --- /dev/null +++ b/Docs/types/BrokenFallenChairAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenFallenChairAddon + + +

Back to Server.Items

+

BrokenFallenChairAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrokenFallenChairAddon()
+ (ctor) BrokenFallenChairAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenFallenChairComponent.html b/Docs/types/BrokenFallenChairComponent.html new file mode 100644 index 0000000..66a76e0 --- /dev/null +++ b/Docs/types/BrokenFallenChairComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenFallenChairComponent + + +

Back to Server.Items

+

BrokenFallenChairComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) BrokenFallenChairComponent()
+ (ctor) BrokenFallenChairComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenFallenChairDeed.html b/Docs/types/BrokenFallenChairDeed.html new file mode 100644 index 0000000..a5252d5 --- /dev/null +++ b/Docs/types/BrokenFallenChairDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrokenFallenChairDeed + + +

Back to Server.Items

+

BrokenFallenChairDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrokenFallenChairDeed()
+ (ctor) BrokenFallenChairDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenVanityAddon.html b/Docs/types/BrokenVanityAddon.html new file mode 100644 index 0000000..dd94855 --- /dev/null +++ b/Docs/types/BrokenVanityAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrokenVanityAddon + + +

Back to Server.Items

+

BrokenVanityAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrokenVanityAddon( bool east )
+ (ctor) BrokenVanityAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrokenVanityDeed.html b/Docs/types/BrokenVanityDeed.html new file mode 100644 index 0000000..bead2d3 --- /dev/null +++ b/Docs/types/BrokenVanityDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BrokenVanityDeed + + +

Back to Server.Items

+

BrokenVanityDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) BrokenVanityDeed()
+ (ctor) BrokenVanityDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BronzeElemental.html b/Docs/types/BronzeElemental.html new file mode 100644 index 0000000..fb9ea96 --- /dev/null +++ b/Docs/types/BronzeElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - BronzeElemental + + +

Back to Server.Mobiles

+

BronzeElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BronzeElemental()
+ (ctor) BronzeElemental( int oreAmount )
+ (ctor) BronzeElemental( Serial serial )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BronzeGranite.html b/Docs/types/BronzeGranite.html new file mode 100644 index 0000000..8c3637f --- /dev/null +++ b/Docs/types/BronzeGranite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BronzeGranite + + +

Back to Server.Items

+

BronzeGranite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BronzeGranite()
+ (ctor) BronzeGranite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BronzeIngot.html b/Docs/types/BronzeIngot.html new file mode 100644 index 0000000..4191828 --- /dev/null +++ b/Docs/types/BronzeIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BronzeIngot + + +

Back to Server.Items

+

BronzeIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BronzeIngot()
+ (ctor) BronzeIngot( int amount )
+ (ctor) BronzeIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BronzeOre.html b/Docs/types/BronzeOre.html new file mode 100644 index 0000000..c2a550c --- /dev/null +++ b/Docs/types/BronzeOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BronzeOre + + +

Back to Server.Items

+

BronzeOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) BronzeOre()
+ (ctor) BronzeOre( int amount )
+ (ctor) BronzeOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BronzeShield.html b/Docs/types/BronzeShield.html new file mode 100644 index 0000000..4ef200b --- /dev/null +++ b/Docs/types/BronzeShield.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - BronzeShield + + +

Back to Server.Items

+

BronzeShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) BronzeShield()
+ (ctor) BronzeShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BronzeStatueMaker.html b/Docs/types/BronzeStatueMaker.html new file mode 100644 index 0000000..85aed76 --- /dev/null +++ b/Docs/types/BronzeStatueMaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BronzeStatueMaker + + +

Back to Server.Items

+

BronzeStatueMaker : CharacterStatueMaker, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) BronzeStatueMaker()
+ (ctor) BronzeStatueMaker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrownBear.html b/Docs/types/BrownBear.html new file mode 100644 index 0000000..e2069ca --- /dev/null +++ b/Docs/types/BrownBear.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BrownBear + + +

Back to Server.Mobiles

+

BrownBear : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BrownBear()
+ (ctor) BrownBear( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrownBearRugEastAddon.html b/Docs/types/BrownBearRugEastAddon.html new file mode 100644 index 0000000..b3e0d17 --- /dev/null +++ b/Docs/types/BrownBearRugEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrownBearRugEastAddon + + +

Back to Server.Items

+

BrownBearRugEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrownBearRugEastAddon()
+ (ctor) BrownBearRugEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrownBearRugEastDeed.html b/Docs/types/BrownBearRugEastDeed.html new file mode 100644 index 0000000..73e6663 --- /dev/null +++ b/Docs/types/BrownBearRugEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrownBearRugEastDeed + + +

Back to Server.Items

+

BrownBearRugEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrownBearRugEastDeed()
+ (ctor) BrownBearRugEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrownBearRugSouthAddon.html b/Docs/types/BrownBearRugSouthAddon.html new file mode 100644 index 0000000..113fb08 --- /dev/null +++ b/Docs/types/BrownBearRugSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BrownBearRugSouthAddon + + +

Back to Server.Items

+

BrownBearRugSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) BrownBearRugSouthAddon()
+ (ctor) BrownBearRugSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrownBearRugSouthDeed.html b/Docs/types/BrownBearRugSouthDeed.html new file mode 100644 index 0000000..6d4184f --- /dev/null +++ b/Docs/types/BrownBearRugSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BrownBearRugSouthDeed + + +

Back to Server.Items

+

BrownBearRugSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BrownBearRugSouthDeed()
+ (ctor) BrownBearRugSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BrownBook.html b/Docs/types/BrownBook.html new file mode 100644 index 0000000..13a46d2 --- /dev/null +++ b/Docs/types/BrownBook.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - BrownBook + + +

Back to Server.Items

+

BrownBook : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BrownBook()
+ (ctor) BrownBook( Serial serial )
+ (ctor) BrownBook( bool writable )
+ (ctor) BrownBook( int pageCount, bool writable )
+ (ctor) BrownBook( string title, string author, int pageCount, bool writable )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Bucket.html b/Docs/types/Bucket.html new file mode 100644 index 0000000..d072b68 --- /dev/null +++ b/Docs/types/Bucket.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Bucket + + +

Back to Server.Items

+

Bucket : BaseWaterContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) Bucket()
+ (ctor) Bucket( Serial serial )
+ (ctor) Bucket( bool filled )
+ int fullItem_ID( get; )
+ int MaxQuantity( get; )
+ int voidItem_ID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Buckler.html b/Docs/types/Buckler.html new file mode 100644 index 0000000..aa810da --- /dev/null +++ b/Docs/types/Buckler.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Buckler + + +

Back to Server.Items

+

Buckler : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Buckler()
+ (ctor) Buckler( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BuffIcon.html b/Docs/types/BuffIcon.html new file mode 100644 index 0000000..94beb8f --- /dev/null +++ b/Docs/types/BuffIcon.html @@ -0,0 +1,55 @@ + + + RunUO Documentation - Class Overview - BuffIcon + + +

Back to Server

+

BuffIcon (Enum)

+ DismountPrevention = 1001,
+ NoRearm = 1002,
+ NightSight = 1005,
+ DeathStrike = 1006,
+ EvilOmen = 1007,
+ UnknownStandingSwirl = 1008,
+ UnknownKneelingSword = 1009,
+ DivineFury = 1010,
+ EnemyOfOne = 1011,
+ HidingAndOrStealth = 1012,
+ ActiveMeditation = 1013,
+ BloodOathCaster = 1014,
+ BloodOathCurse = 1015,
+ CorpseSkin = 1016,
+ Mindrot = 1017,
+ PainSpike = 1018,
+ Strangle = 1019,
+ GiftOfRenewal = 1020,
+ AttuneWeapon = 1021,
+ Thunderstorm = 1022,
+ EssenceOfWind = 1023,
+ EtherealVoyage = 1024,
+ GiftOfLife = 1025,
+ ArcaneEmpowerment = 1026,
+ MortalStrike = 1027,
+ ReactiveArmor = 1028,
+ Protection = 1029,
+ ArchProtection = 1030,
+ MagicReflection = 1031,
+ Incognito = 1032,
+ Disguised = 1033,
+ AnimalForm = 1034,
+ Polymorph = 1035,
+ Invisibility = 1036,
+ Paralyze = 1037,
+ Poison = 1038,
+ Bleed = 1039,
+ Clumsy = 1040,
+ FeebleMind = 1041,
+ Weaken = 1042,
+ Curse = 1043,
+ MassCurse = 1044,
+ Agility = 1045,
+ Cunning = 1046,
+ Strength = 1047,
+ Bless = 1048
+ + diff --git a/Docs/types/BuffInfo.html b/Docs/types/BuffInfo.html new file mode 100644 index 0000000..9463c5a --- /dev/null +++ b/Docs/types/BuffInfo.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - BuffInfo + + +

Back to Server

+

BuffInfo

+

Nested Types: (Anonymous-Type)--c__DisplayClass4

+ (static) bool Enabled( get; )
+ (static) void b__0( ClientVersionReceivedArgs args )
+ (static) void AddBuff( Mobile m, BuffInfo b )
+ (static) void Initialize()
+ (static) void RemoveBuff( Mobile m, BuffIcon b )
+ (static) void RemoveBuff( Mobile m, BuffInfo b )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, int secondaryCliloc )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, TextDefinition args )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, bool retainThroughDeath )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, TimeSpan length, Mobile m )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, TextDefinition args, bool retainThroughDeath )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, int secondaryCliloc, bool retainThroughDeath )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, int secondaryCliloc, TextDefinition args )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, TimeSpan length, Mobile m, TextDefinition args )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, int secondaryCliloc, TextDefinition args, bool retainThroughDeath )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, int secondaryCliloc, TimeSpan length, Mobile m )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, TimeSpan length, Mobile m, TextDefinition args, bool retainThroughDeath )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, int secondaryCliloc, TimeSpan length, Mobile m, TextDefinition args )
+ (ctor) BuffInfo( BuffIcon iconID, int titleCliloc, int secondaryCliloc, TimeSpan length, Mobile m, TextDefinition args, bool retainThroughDeath )
+ TextDefinition Args( get; )
+ BuffIcon ID( get; )
+ bool RetainThroughDeath( get; )
+ int SecondaryCliloc( get; )
+ TimeSpan TimeLength( get; )
+ Timer Timer( get; )
+ DateTime TimeStart( get; )
+ int TitleCliloc( get; )
+ + diff --git a/Docs/types/BufferPool.html b/Docs/types/BufferPool.html new file mode 100644 index 0000000..a3b3cd1 --- /dev/null +++ b/Docs/types/BufferPool.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - BufferPool + + +

Back to Server.Network

+

BufferPool

+ (static) List<BufferPool> Pools( get; set; )
+ (ctor) BufferPool( string name, int initialCapacity, int bufferSize )
+ byte[] AcquireBuffer()
+ void Free()
+ void GetInfo( out string name, out int freeCount, out int initialCapacity, out int currentCapacity, out int bufferSize, out int misses )
+ void ReleaseBuffer( byte[] buffer )
+ + diff --git a/Docs/types/BulkGenericType.html b/Docs/types/BulkGenericType.html new file mode 100644 index 0000000..96a327a --- /dev/null +++ b/Docs/types/BulkGenericType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BulkGenericType + + +

Back to Server.Engines.BulkOrders

+

BulkGenericType (Enum)

+ Iron = 0,
+ Cloth = 1,
+ Leather = 2
+ + diff --git a/Docs/types/BulkMaterialType.html b/Docs/types/BulkMaterialType.html new file mode 100644 index 0000000..2f2c95b --- /dev/null +++ b/Docs/types/BulkMaterialType.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BulkMaterialType + + +

Back to Server.Engines.BulkOrders

+

BulkMaterialType (Enum)

+ None = 0,
+ DullCopper = 1,
+ ShadowIron = 2,
+ Copper = 3,
+ Bronze = 4,
+ Gold = 5,
+ Agapite = 6,
+ Verite = 7,
+ Valorite = 8,
+ Spined = 9,
+ Horned = 10,
+ Barbed = 11
+ + diff --git a/Docs/types/BulkOrderBook.html b/Docs/types/BulkOrderBook.html new file mode 100644 index 0000000..6d92129 --- /dev/null +++ b/Docs/types/BulkOrderBook.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - BulkOrderBook + + +

Back to Server.Engines.BulkOrders

+

BulkOrderBook : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Nested Types: NameBookEntry, NameBookPrompt

+ (ctor) BulkOrderBook()
+ (ctor) BulkOrderBook( Serial serial )
+ string BookName( get; set; )
+ ArrayList Entries( get; )
+ BOBFilter Filter( get; )
+ int ItemCount( get; set; )
+ SecureLevel Level( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int GetTotal( TotalType type )
+ void InvalidateContainers( object parent )
+ void InvalidateItems()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnDoubleClickSecureTrade( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BulkOrderInfoEntry.html b/Docs/types/BulkOrderInfoEntry.html new file mode 100644 index 0000000..f8a188b --- /dev/null +++ b/Docs/types/BulkOrderInfoEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BulkOrderInfoEntry + + +

Back to Server.Mobiles

+

(BaseVendor) - BulkOrderInfoEntry : ContextMenuEntry

+ (ctor) BulkOrderInfoEntry( Mobile from, BaseVendor vendor )
+ virtual void OnClick()
+ + diff --git a/Docs/types/Bull.html b/Docs/types/Bull.html new file mode 100644 index 0000000..6d4a131 --- /dev/null +++ b/Docs/types/Bull.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Bull + + +

Back to Server.Mobiles

+

Bull : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Bull()
+ (ctor) Bull( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BullFrog.html b/Docs/types/BullFrog.html new file mode 100644 index 0000000..0829887 --- /dev/null +++ b/Docs/types/BullFrog.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BullFrog + + +

Back to Server.Mobiles

+

BullFrog : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) BullFrog()
+ (ctor) BullFrog( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BulletinBoard.html b/Docs/types/BulletinBoard.html new file mode 100644 index 0000000..858f6a3 --- /dev/null +++ b/Docs/types/BulletinBoard.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BulletinBoard + + +

Back to Server.Items

+

BulletinBoard : BaseBulletinBoard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BulletinBoard()
+ (ctor) BulletinBoard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BulletinEquip.html b/Docs/types/BulletinEquip.html new file mode 100644 index 0000000..1e7ad99 --- /dev/null +++ b/Docs/types/BulletinEquip.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - BulletinEquip + + +

Back to Server.Items

+

BulletinEquip

+ (ctor) BulletinEquip( int itemID, int hue )
+ + diff --git a/Docs/types/BulletinMessage.html b/Docs/types/BulletinMessage.html new file mode 100644 index 0000000..1315d85 --- /dev/null +++ b/Docs/types/BulletinMessage.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - BulletinMessage + + +

Back to Server.Items

+

BulletinMessage : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BulletinMessage( Serial serial )
+ (ctor) BulletinMessage( Mobile poster, BulletinMessage thread, string subject, string[] lines )
+ DateTime LastPostTime( get; set; )
+ string[] Lines( get; )
+ int PostedBody( get; )
+ BulletinEquip[] PostedEquip( get; )
+ int PostedHue( get; )
+ string PostedName( get; )
+ Mobile Poster( get; )
+ string Subject( get; )
+ BulletinMessage Thread( get; )
+ DateTime Time( get; )
+ virtual bool CheckTarget( Mobile from, Target targ, object targeted )
+ virtual void Deserialize( GenericReader reader )
+ string GetTimeAsString()
+ virtual bool IsAccessibleTo( Mobile check )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BunnyHole.html b/Docs/types/BunnyHole.html new file mode 100644 index 0000000..729549f --- /dev/null +++ b/Docs/types/BunnyHole.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - BunnyHole + + +

Back to Server.Mobiles

+

(VorpalBunny) - BunnyHole : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BunnyHole()
+ (ctor) BunnyHole( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BunsHair.html b/Docs/types/BunsHair.html new file mode 100644 index 0000000..7252ff5 --- /dev/null +++ b/Docs/types/BunsHair.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BunsHair + + +

Back to Server.Items

+

BunsHair : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BunsHair()
+ (ctor) BunsHair( int hue )
+ (ctor) BunsHair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BurglarsBandana.html b/Docs/types/BurglarsBandana.html new file mode 100644 index 0000000..341d4df --- /dev/null +++ b/Docs/types/BurglarsBandana.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - BurglarsBandana + + +

Back to Server.Items

+

BurglarsBandana : Bandana, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) BurglarsBandana()
+ (ctor) BurglarsBandana( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BurningOfTrinsic.html b/Docs/types/BurningOfTrinsic.html new file mode 100644 index 0000000..3bf040b --- /dev/null +++ b/Docs/types/BurningOfTrinsic.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BurningOfTrinsic + + +

Back to Server.Items

+

BurningOfTrinsic : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) BurningOfTrinsic()
+ (ctor) BurningOfTrinsic( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BustEast.html b/Docs/types/BustEast.html new file mode 100644 index 0000000..eefb2e5 --- /dev/null +++ b/Docs/types/BustEast.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BustEast + + +

Back to Server.Items

+

BustEast : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BustEast()
+ (ctor) BustEast( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/BustSouth.html b/Docs/types/BustSouth.html new file mode 100644 index 0000000..aa38663 --- /dev/null +++ b/Docs/types/BustSouth.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - BustSouth + + +

Back to Server.Items

+

BustSouth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) BustSouth()
+ (ctor) BustSouth( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Butcher.html b/Docs/types/Butcher.html new file mode 100644 index 0000000..bd8210e --- /dev/null +++ b/Docs/types/Butcher.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Butcher + + +

Back to Server.Mobiles

+

Butcher : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Butcher()
+ (ctor) Butcher( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ButcherKnife.html b/Docs/types/ButcherKnife.html new file mode 100644 index 0000000..c78522a --- /dev/null +++ b/Docs/types/ButcherKnife.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - ButcherKnife + + +

Back to Server.Items

+

ButcherKnife : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ButcherKnife()
+ (ctor) ButcherKnife( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Buttons.html b/Docs/types/Buttons.html new file mode 100644 index 0000000..fee6734 --- /dev/null +++ b/Docs/types/Buttons.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Buttons + + +

Back to Server.Items

+

Buttons (Enum)

+ Cancel = 0,
+ South = 1,
+ East = 2
+ + diff --git a/Docs/types/BuyEntry.html b/Docs/types/BuyEntry.html new file mode 100644 index 0000000..1163c84 --- /dev/null +++ b/Docs/types/BuyEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BuyEntry + + +

Back to Server.Mobiles

+

(VendorBackpack) - BuyEntry : ContextMenuEntry

+ (ctor) BuyEntry( Item item )
+ bool NonLocalUse( get; )
+ virtual void OnClick()
+ + diff --git a/Docs/types/BuyItemResponse.html b/Docs/types/BuyItemResponse.html new file mode 100644 index 0000000..2831d9d --- /dev/null +++ b/Docs/types/BuyItemResponse.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - BuyItemResponse + + +

Back to Server.Mobiles

+

BuyItemResponse

+ (ctor) BuyItemResponse( Serial serial, int amount )
+ int Amount( get; )
+ Serial Serial( get; )
+ + diff --git a/Docs/types/BuyItemState.html b/Docs/types/BuyItemState.html new file mode 100644 index 0000000..54a17a1 --- /dev/null +++ b/Docs/types/BuyItemState.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - BuyItemState + + +

Back to Server.Mobiles

+

BuyItemState

+ (ctor) BuyItemState( string name, Serial cont, Serial serial, int price, int amount, int itemID, int hue )
+ int Amount( get; )
+ Serial ContainerSerial( get; )
+ string Description( get; )
+ int Hue( get; )
+ int ItemID( get; )
+ Serial MySerial( get; )
+ int Price( get; )
+ + diff --git a/Docs/types/BuyItemStateComparer.html b/Docs/types/BuyItemStateComparer.html new file mode 100644 index 0000000..c4daafe --- /dev/null +++ b/Docs/types/BuyItemStateComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - BuyItemStateComparer + + +

Back to Server.Mobiles

+

BuyItemStateComparer : IComparer<BuyItemState>

+ (ctor) BuyItemStateComparer()
+ virtual int Compare( BuyItemState l, BuyItemState r )
+ + diff --git a/Docs/types/ByteQueue.html b/Docs/types/ByteQueue.html new file mode 100644 index 0000000..a95494d --- /dev/null +++ b/Docs/types/ByteQueue.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ByteQueue + + +

Back to Server.Network

+

ByteQueue

+ (ctor) ByteQueue()
+ int Length( get; )
+ void Clear()
+ int Dequeue( byte[] buffer, int offset, int size )
+ void Enqueue( byte[] buffer, int offset, int size )
+ byte GetPacketID()
+ int GetPacketLength()
+ void SetCapacity( int capacity )
+ + diff --git a/Docs/types/CAGCategory.html b/Docs/types/CAGCategory.html new file mode 100644 index 0000000..3547934 --- /dev/null +++ b/Docs/types/CAGCategory.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CAGCategory + + +

Back to Server.Gumps

+

CAGCategory : CAGNode

+ (static) CAGCategory Root( get; )
+ (static) CAGCategory Load( string path )
+ (ctor) CAGCategory()
+ (ctor) CAGCategory( CAGCategory parent, XmlTextReader xml )
+ string Caption( get; )
+ CAGNode[] Nodes( get; )
+ CAGCategory Parent( get; )
+ string Title( get; )
+ virtual void OnClick( Mobile from, int page )
+ + diff --git a/Docs/types/CAGNode.html b/Docs/types/CAGNode.html new file mode 100644 index 0000000..07e089d --- /dev/null +++ b/Docs/types/CAGNode.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CAGNode + + +

Back to Server.Gumps

+

CAGNode

+

Derived Types: CAGCategory, CAGObject

+ (ctor) CAGNode()
+ string Caption( get; )
+ virtual void OnClick( Mobile from, int page )
+ + diff --git a/Docs/types/CAGObject.html b/Docs/types/CAGObject.html new file mode 100644 index 0000000..83092ec --- /dev/null +++ b/Docs/types/CAGObject.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CAGObject + + +

Back to Server.Gumps

+

CAGObject : CAGNode

+ (ctor) CAGObject( CAGCategory parent, XmlTextReader xml )
+ string Caption( get; )
+ int Hue( get; )
+ int ItemID( get; )
+ CAGCategory Parent( get; )
+ Type Type( get; )
+ virtual void OnClick( Mobile from, int page )
+ + diff --git a/Docs/types/CIDRFirewallEntry.html b/Docs/types/CIDRFirewallEntry.html new file mode 100644 index 0000000..75889f0 --- /dev/null +++ b/Docs/types/CIDRFirewallEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CIDRFirewallEntry + + +

Back to Server

+

(Firewall) - CIDRFirewallEntry : IFirewallEntry

+ (ctor) CIDRFirewallEntry( IPAddress cidrPrefix, int cidrLength )
+ virtual bool Equals( object obj )
+ virtual int GetHashCode()
+ virtual bool IsBlocked( IPAddress address )
+ virtual string ToString()
+ + diff --git a/Docs/types/CMEFlags.html b/Docs/types/CMEFlags.html new file mode 100644 index 0000000..26c678b --- /dev/null +++ b/Docs/types/CMEFlags.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CMEFlags + + +

Back to Server.Network

+

CMEFlags (Enum)

+ None = 0,
+ Disabled = 1,
+ Colored = 32
+ + diff --git a/Docs/types/Cabbage.html b/Docs/types/Cabbage.html new file mode 100644 index 0000000..2b34bb2 --- /dev/null +++ b/Docs/types/Cabbage.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Cabbage + + +

Back to Server.Items

+

Cabbage : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cabbage()
+ (ctor) Cabbage( int amount )
+ (ctor) Cabbage( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cake.html b/Docs/types/Cake.html new file mode 100644 index 0000000..0367b5c --- /dev/null +++ b/Docs/types/Cake.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Cake + + +

Back to Server.Items

+

Cake : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cake()
+ (ctor) Cake( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CakeMix.html b/Docs/types/CakeMix.html new file mode 100644 index 0000000..055eca6 --- /dev/null +++ b/Docs/types/CakeMix.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CakeMix + + +

Back to Server.Items

+

CakeMix : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CakeMix()
+ (ctor) CakeMix( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CallInfo.html b/Docs/types/CallInfo.html new file mode 100644 index 0000000..902c1c7 --- /dev/null +++ b/Docs/types/CallInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CallInfo + + +

Back to Server

+

(MethodEmitter) - CallInfo

+ (ctor) CallInfo( Type type, MethodInfo method )
+ + diff --git a/Docs/types/CallPriorityAttribute.html b/Docs/types/CallPriorityAttribute.html new file mode 100644 index 0000000..39bb6f7 --- /dev/null +++ b/Docs/types/CallPriorityAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CallPriorityAttribute + + +

Back to Server

+

CallPriorityAttribute : Attribute, _Attribute

+ (ctor) CallPriorityAttribute( int priority )
+ int Priority( get; set; )
+ + diff --git a/Docs/types/CallPriorityComparer.html b/Docs/types/CallPriorityComparer.html new file mode 100644 index 0000000..71fee32 --- /dev/null +++ b/Docs/types/CallPriorityComparer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CallPriorityComparer + + +

Back to Server

+

CallPriorityComparer : IComparer<MethodInfo>

+ (ctor) CallPriorityComparer()
+ virtual int Compare( MethodInfo x, MethodInfo y )
+ int GetPriority( MethodInfo mi )
+ + diff --git a/Docs/types/CallToAnarchy.html b/Docs/types/CallToAnarchy.html new file mode 100644 index 0000000..ff99c12 --- /dev/null +++ b/Docs/types/CallToAnarchy.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CallToAnarchy + + +

Back to Server.Items

+

CallToAnarchy : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) CallToAnarchy()
+ (ctor) CallToAnarchy( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Callback.html b/Docs/types/Callback.html new file mode 100644 index 0000000..208b622 --- /dev/null +++ b/Docs/types/Callback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Callback + + +

Back to Server

+

(MethodEmitter) - Callback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) Callback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke()
+ + diff --git a/Docs/types/CallbackEntry.html b/Docs/types/CallbackEntry.html new file mode 100644 index 0000000..36f7819 --- /dev/null +++ b/Docs/types/CallbackEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CallbackEntry + + +

Back to Server.Mobiles

+

(PlayerMobile) - CallbackEntry : ContextMenuEntry

+ (ctor) CallbackEntry( int number, ContextCallback callback )
+ (ctor) CallbackEntry( int number, int range, ContextCallback callback )
+ virtual void OnClick()
+ + diff --git a/Docs/types/CallingTimer.html b/Docs/types/CallingTimer.html new file mode 100644 index 0000000..16960db --- /dev/null +++ b/Docs/types/CallingTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CallingTimer + + +

Back to Server.Engines.Quests.Necro

+

(KronusScroll) - CallingTimer : Timer

+ (ctor) CallingTimer( PlayerMobile player )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Calm.html b/Docs/types/Calm.html new file mode 100644 index 0000000..dd2cd3e --- /dev/null +++ b/Docs/types/Calm.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Calm + + +

Back to Server.Items

+

Calm : Halberd, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+ (ctor) Calm()
+ (ctor) Calm( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Campfire.html b/Docs/types/Campfire.html new file mode 100644 index 0000000..a879685 --- /dev/null +++ b/Docs/types/Campfire.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Campfire + + +

Back to Server.Items

+

Campfire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) CampfireEntry GetEntry( Mobile player )
+ (static) void RemoveEntry( CampfireEntry entry )
+ (ctor) Campfire()
+ (ctor) Campfire( Serial serial )
+ DateTime Created( get; )
+ CampfireStatus Status( get; set; )
+ void ClearEntries()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ void OnTick()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CampfireEntry.html b/Docs/types/CampfireEntry.html new file mode 100644 index 0000000..03d1637 --- /dev/null +++ b/Docs/types/CampfireEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CampfireEntry + + +

Back to Server.Items

+

CampfireEntry

+ (ctor) CampfireEntry( PlayerMobile player, Campfire fire )
+ Campfire Fire( get; )
+ PlayerMobile Player( get; )
+ bool Safe( get; set; )
+ DateTime Start( get; )
+ bool Valid( get; )
+ + diff --git a/Docs/types/CampfireStatus.html b/Docs/types/CampfireStatus.html new file mode 100644 index 0000000..ac6393d --- /dev/null +++ b/Docs/types/CampfireStatus.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CampfireStatus + + +

Back to Server.Items

+

CampfireStatus (Enum)

+ Burning = 0,
+ Extinguishing = 1,
+ Off = 2
+ + diff --git a/Docs/types/CancelArrow.html b/Docs/types/CancelArrow.html new file mode 100644 index 0000000..38b3db6 --- /dev/null +++ b/Docs/types/CancelArrow.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CancelArrow + + +

Back to Server.Network

+

CancelArrow : Packet

+ (ctor) CancelArrow()
+ + diff --git a/Docs/types/CancelArrowHS.html b/Docs/types/CancelArrowHS.html new file mode 100644 index 0000000..54cafbb --- /dev/null +++ b/Docs/types/CancelArrowHS.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CancelArrowHS + + +

Back to Server.Network

+

CancelArrowHS : Packet

+ (ctor) CancelArrowHS( int x, int y, Serial s )
+ + diff --git a/Docs/types/CancelQuestRegion.html b/Docs/types/CancelQuestRegion.html new file mode 100644 index 0000000..26a195c --- /dev/null +++ b/Docs/types/CancelQuestRegion.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CancelQuestRegion + + +

Back to Server.Engines.Quests

+

CancelQuestRegion : BaseRegion, IComparable

+ (ctor) CancelQuestRegion( XmlElement xml, Map map, Region parent )
+ Type Quest( get; )
+ virtual bool OnMoveInto( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation )
+ + diff --git a/Docs/types/CancelRenewInventoryInsuranceGump.html b/Docs/types/CancelRenewInventoryInsuranceGump.html new file mode 100644 index 0000000..53e13c4 --- /dev/null +++ b/Docs/types/CancelRenewInventoryInsuranceGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CancelRenewInventoryInsuranceGump + + +

Back to Server.Mobiles

+

(PlayerMobile) - CancelRenewInventoryInsuranceGump : Gump

+ (ctor) CancelRenewInventoryInsuranceGump( PlayerMobile player )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/CancelTarget.html b/Docs/types/CancelTarget.html new file mode 100644 index 0000000..fd2fc3b --- /dev/null +++ b/Docs/types/CancelTarget.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CancelTarget + + +

Back to Server.Network

+

CancelTarget : Packet

+ (ctor) CancelTarget()
+ + diff --git a/Docs/types/Candelabra.html b/Docs/types/Candelabra.html new file mode 100644 index 0000000..b203527 --- /dev/null +++ b/Docs/types/Candelabra.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Candelabra + + +

Back to Server.Items

+

Candelabra : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IShipwreckedItem

+ (ctor) Candelabra()
+ (ctor) Candelabra( Serial serial )
+ bool IsShipwreckedItem( get; set; )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CandelabraOfSouls.html b/Docs/types/CandelabraOfSouls.html new file mode 100644 index 0000000..3d7facd --- /dev/null +++ b/Docs/types/CandelabraOfSouls.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CandelabraOfSouls + + +

Back to Server.Items

+

CandelabraOfSouls : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CandelabraOfSouls()
+ (ctor) CandelabraOfSouls( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CandelabraStand.html b/Docs/types/CandelabraStand.html new file mode 100644 index 0000000..081aab6 --- /dev/null +++ b/Docs/types/CandelabraStand.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CandelabraStand + + +

Back to Server.Items

+

CandelabraStand : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CandelabraStand()
+ (ctor) CandelabraStand( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Candidate.html b/Docs/types/Candidate.html new file mode 100644 index 0000000..04b4c38 --- /dev/null +++ b/Docs/types/Candidate.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Candidate + + +

Back to Server.Factions

+

Candidate

+ (ctor) Candidate( GenericReader reader )
+ (ctor) Candidate( Mobile mob )
+ Mobile Mobile( get; )
+ List<Voter> Voters( get; )
+ int Votes( get; )
+ void CleanMuleVotes()
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Candle.html b/Docs/types/Candle.html new file mode 100644 index 0000000..bc30759 --- /dev/null +++ b/Docs/types/Candle.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Candle + + +

Back to Server.Items

+

Candle : BaseEquipableLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Candle()
+ (ctor) Candle( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CandleLarge.html b/Docs/types/CandleLarge.html new file mode 100644 index 0000000..58fe901 --- /dev/null +++ b/Docs/types/CandleLarge.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CandleLarge + + +

Back to Server.Items

+

CandleLarge : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CandleLarge()
+ (ctor) CandleLarge( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CandleLong.html b/Docs/types/CandleLong.html new file mode 100644 index 0000000..5878a4b --- /dev/null +++ b/Docs/types/CandleLong.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CandleLong + + +

Back to Server.Items

+

CandleLong : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: HonorCandle

+ (ctor) CandleLong()
+ (ctor) CandleLong( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CandleShort.html b/Docs/types/CandleShort.html new file mode 100644 index 0000000..e0e520e --- /dev/null +++ b/Docs/types/CandleShort.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CandleShort + + +

Back to Server.Items

+

CandleShort : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CandleShort()
+ (ctor) CandleShort( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CandleSkull.html b/Docs/types/CandleSkull.html new file mode 100644 index 0000000..5f6afd0 --- /dev/null +++ b/Docs/types/CandleSkull.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CandleSkull + + +

Back to Server.Items

+

CandleSkull : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CandleSkull()
+ (ctor) CandleSkull( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CandyCane.html b/Docs/types/CandyCane.html new file mode 100644 index 0000000..84a540a --- /dev/null +++ b/Docs/types/CandyCane.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - CandyCane + + +

Back to Server.Items

+

CandyCane : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: CandyCaneTimer

+ (static) Dictionary<Mobile,CandyCaneTimer> ToothAches( get; set; )
+ (static) void Initialize()
+ (ctor) CandyCane()
+ (ctor) CandyCane( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CandyCaneTimer.html b/Docs/types/CandyCaneTimer.html new file mode 100644 index 0000000..c882a77 --- /dev/null +++ b/Docs/types/CandyCaneTimer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CandyCaneTimer + + +

Back to Server.Items

+

(CandyCane) - CandyCaneTimer : Timer

+ (ctor) CandyCaneTimer( Mobile eater )
+ int Eaten( get; set; )
+ Mobile Eater( get; )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Cannon.html b/Docs/types/Cannon.html new file mode 100644 index 0000000..9499e43 --- /dev/null +++ b/Docs/types/Cannon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Cannon + + +

Back to Server.Engines.Quests.Haven

+

Cannon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) Cannon( Serial serial )
+ (ctor) Cannon( CannonDirection direction )
+ CannonDirection CannonDirection( get; )
+ MilitiaCanoneer Canoneer( get; set; )
+ bool HandlesOnMovement( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoFireEffect( IPoint3D target )
+ void Fire( Mobile from, Mobile target )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CannonAddon.html b/Docs/types/CannonAddon.html new file mode 100644 index 0000000..781ff51 --- /dev/null +++ b/Docs/types/CannonAddon.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - CannonAddon + + +

Back to Server.Items

+

CannonAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Nested Types: InternalGump, InternalTarget

+ (ctor) CannonAddon( Serial serial )
+ (ctor) CannonAddon( CannonDirection direction )
+ CannonDirection CannonDirection( get; )
+ int Charges( get; set; )
+ BaseAddonDeed Deed( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void DoFireEffect( IPoint3D target )
+ void Fill( Mobile from, PotionKeg keg )
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ int Validate( PotionKeg keg )
+ + diff --git a/Docs/types/CannonAddonComponent.html b/Docs/types/CannonAddonComponent.html new file mode 100644 index 0000000..295555b --- /dev/null +++ b/Docs/types/CannonAddonComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CannonAddonComponent + + +

Back to Server.Items

+

CannonAddonComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) CannonAddonComponent( int itemID )
+ (ctor) CannonAddonComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CannonComponent.html b/Docs/types/CannonComponent.html new file mode 100644 index 0000000..00d3638 --- /dev/null +++ b/Docs/types/CannonComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CannonComponent + + +

Back to Server.Engines.Quests.Haven

+

CannonComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) CannonComponent( int itemID )
+ (ctor) CannonComponent( Serial serial )
+ MilitiaCanoneer Canoneer( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CannonDeed.html b/Docs/types/CannonDeed.html new file mode 100644 index 0000000..e2c2d5e --- /dev/null +++ b/Docs/types/CannonDeed.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - CannonDeed + + +

Back to Server.Items

+

CannonDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem, IRewardOption

+ (ctor) CannonDeed()
+ (ctor) CannonDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int Charges( get; set; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetOptions( RewardOptionList list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnOptionSelected( Mobile from, int option )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CannonDirection.html b/Docs/types/CannonDirection.html new file mode 100644 index 0000000..d79c953 --- /dev/null +++ b/Docs/types/CannonDirection.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CannonDirection + + +

Back to Server.Engines.Quests.Haven

+

CannonDirection (Enum)

+ North = 0,
+ East = 1,
+ South = 2,
+ West = 3
+ + diff --git a/Docs/types/Cantaloupe.html b/Docs/types/Cantaloupe.html new file mode 100644 index 0000000..2374b9c --- /dev/null +++ b/Docs/types/Cantaloupe.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Cantaloupe + + +

Back to Server.Items

+

Cantaloupe : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cantaloupe()
+ (ctor) Cantaloupe( int amount )
+ (ctor) Cantaloupe( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cap.html b/Docs/types/Cap.html new file mode 100644 index 0000000..aaac20d --- /dev/null +++ b/Docs/types/Cap.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Cap + + +

Back to Server.Items

+

Cap : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) Cap()
+ (ctor) Cap( Serial serial )
+ (ctor) Cap( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CapacityExceededException.html b/Docs/types/CapacityExceededException.html new file mode 100644 index 0000000..464c423 --- /dev/null +++ b/Docs/types/CapacityExceededException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CapacityExceededException + + +

Back to Server.Network

+

CapacityExceededException : Exception, ISerializable, _Exception

+ (ctor) CapacityExceededException()
+ + diff --git a/Docs/types/CaptainJohnsHat.html b/Docs/types/CaptainJohnsHat.html new file mode 100644 index 0000000..39ce4d0 --- /dev/null +++ b/Docs/types/CaptainJohnsHat.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - CaptainJohnsHat + + +

Back to Server.Items

+

CaptainJohnsHat : TricorneHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) CaptainJohnsHat()
+ (ctor) CaptainJohnsHat( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CaptainQuacklebushsCutlass.html b/Docs/types/CaptainQuacklebushsCutlass.html new file mode 100644 index 0000000..c365365 --- /dev/null +++ b/Docs/types/CaptainQuacklebushsCutlass.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CaptainQuacklebushsCutlass + + +

Back to Server.Items

+

CaptainQuacklebushsCutlass : Cutlass, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) CaptainQuacklebushsCutlass()
+ (ctor) CaptainQuacklebushsCutlass( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CaptureImagesObjective.html b/Docs/types/CaptureImagesObjective.html new file mode 100644 index 0000000..b3d9a86 --- /dev/null +++ b/Docs/types/CaptureImagesObjective.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - CaptureImagesObjective + + +

Back to Server.Engines.Quests.Collector

+

CaptureImagesObjective : QuestObjective

+ (ctor) CaptureImagesObjective()
+ (ctor) CaptureImagesObjective( bool init )
+ bool Completed( get; )
+ object Message( get; )
+ CaptureResponse CaptureImage( Type type, out ImageType image )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/CaptureResponse.html b/Docs/types/CaptureResponse.html new file mode 100644 index 0000000..b0583d3 --- /dev/null +++ b/Docs/types/CaptureResponse.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CaptureResponse + + +

Back to Server.Engines.Quests.Collector

+

CaptureResponse (Enum)

+ Valid = 0,
+ AlreadyDone = 1,
+ Invalid = 2
+ + diff --git a/Docs/types/CapturedEssence.html b/Docs/types/CapturedEssence.html new file mode 100644 index 0000000..71c5f20 --- /dev/null +++ b/Docs/types/CapturedEssence.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CapturedEssence + + +

Back to Server.Items

+

CapturedEssence : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CapturedEssence()
+ (ctor) CapturedEssence( int amount )
+ (ctor) CapturedEssence( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CapturedHordeMinion.html b/Docs/types/CapturedHordeMinion.html new file mode 100644 index 0000000..60930a2 --- /dev/null +++ b/Docs/types/CapturedHordeMinion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CapturedHordeMinion + + +

Back to Server.Mobiles

+

CapturedHordeMinion : HordeMinion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) CapturedHordeMinion()
+ (ctor) CapturedHordeMinion( Serial serial )
+ bool InitialInnocent( get; )
+ virtual bool CanBeDamaged()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cards.html b/Docs/types/Cards.html new file mode 100644 index 0000000..77b02f5 --- /dev/null +++ b/Docs/types/Cards.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Cards + + +

Back to Server.Items

+

Cards : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cards()
+ (ctor) Cards( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cards2.html b/Docs/types/Cards2.html new file mode 100644 index 0000000..932b9e6 --- /dev/null +++ b/Docs/types/Cards2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Cards2 + + +

Back to Server.Items

+

Cards2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cards2()
+ (ctor) Cards2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cards3.html b/Docs/types/Cards3.html new file mode 100644 index 0000000..ada1f4a --- /dev/null +++ b/Docs/types/Cards3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Cards3 + + +

Back to Server.Items

+

Cards3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cards3()
+ (ctor) Cards3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cards4.html b/Docs/types/Cards4.html new file mode 100644 index 0000000..747a9f2 --- /dev/null +++ b/Docs/types/Cards4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Cards4 + + +

Back to Server.Items

+

Cards4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cards4()
+ (ctor) Cards4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Carpenter.html b/Docs/types/Carpenter.html new file mode 100644 index 0000000..3f68ddd --- /dev/null +++ b/Docs/types/Carpenter.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Carpenter + + +

Back to Server.Mobiles

+

Carpenter : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Carpenter()
+ (ctor) Carpenter( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Carrot.html b/Docs/types/Carrot.html new file mode 100644 index 0000000..f2039b9 --- /dev/null +++ b/Docs/types/Carrot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Carrot + + +

Back to Server.Items

+

Carrot : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Carrot()
+ (ctor) Carrot( int amount )
+ (ctor) Carrot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CashBankCheckObjective.html b/Docs/types/CashBankCheckObjective.html new file mode 100644 index 0000000..66dd045 --- /dev/null +++ b/Docs/types/CashBankCheckObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CashBankCheckObjective + + +

Back to Server.Engines.Quests.Necro

+

CashBankCheckObjective : QuestObjective

+ (ctor) CashBankCheckObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/CastSpellRequestEventArgs.html b/Docs/types/CastSpellRequestEventArgs.html new file mode 100644 index 0000000..89c5098 --- /dev/null +++ b/Docs/types/CastSpellRequestEventArgs.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CastSpellRequestEventArgs + + +

Back to Server

+

CastSpellRequestEventArgs : EventArgs

+ (ctor) CastSpellRequestEventArgs( Mobile m, int spellID, Item book )
+ Mobile Mobile( get; )
+ Item Spellbook( get; )
+ int SpellID( get; )
+ + diff --git a/Docs/types/CastSpellRequestEventHandler.html b/Docs/types/CastSpellRequestEventHandler.html new file mode 100644 index 0000000..879e6a0 --- /dev/null +++ b/Docs/types/CastSpellRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CastSpellRequestEventHandler + + +

Back to Server

+

CastSpellRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) CastSpellRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( CastSpellRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( CastSpellRequestEventArgs e )
+ + diff --git a/Docs/types/CastTimer.html b/Docs/types/CastTimer.html new file mode 100644 index 0000000..dd7cbc9 --- /dev/null +++ b/Docs/types/CastTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CastTimer + + +

Back to Server.Spells

+

(Spell) - CastTimer : Timer

+ (ctor) CastTimer( Spell spell, TimeSpan castDelay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Castle.html b/Docs/types/Castle.html new file mode 100644 index 0000000..365b808 --- /dev/null +++ b/Docs/types/Castle.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Castle + + +

Back to Server.Multis

+

Castle : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Castle( Serial serial )
+ (ctor) Castle( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CastleDeed.html b/Docs/types/CastleDeed.html new file mode 100644 index 0000000..d2f9b78 --- /dev/null +++ b/Docs/types/CastleDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CastleDeed + + +

Back to Server.Multis.Deeds

+

CastleDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CastleDeed()
+ (ctor) CastleDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cat.html b/Docs/types/Cat.html new file mode 100644 index 0000000..cd0e998 --- /dev/null +++ b/Docs/types/Cat.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Cat + + +

Back to Server.Mobiles

+

Cat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Cat()
+ (ctor) Cat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Categorization.html b/Docs/types/Categorization.html new file mode 100644 index 0000000..c819746 --- /dev/null +++ b/Docs/types/Categorization.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Categorization + + +

Back to Server.Commands

+

Categorization

+ (static) CategoryEntry Items( get; )
+ (static) CategoryEntry Mobiles( get; )
+ (static) void AddTypes( Assembly asm, ArrayList types )
+ (static) void Export( CategoryEntry ce, string fileName, string title )
+ (static) void Fill( CategoryEntry root, ArrayList list )
+ (static) CategoryEntry GetDeepestMatch( CategoryEntry root, Type type )
+ (static) void Initialize()
+ (static) bool IsConstructable( Type type )
+ (static) void Load()
+ (static) CategoryEntry Load( ArrayList types, string config )
+ (static) void RebuildCategorization_OnCommand( CommandEventArgs e )
+ (static) void RecurseExport( XmlTextWriter xml, CategoryEntry ce )
+ (static) void RecurseFindCategories( CategoryEntry ce, ArrayList list )
+ (ctor) Categorization()
+ + diff --git a/Docs/types/CategorizedAddGump.html b/Docs/types/CategorizedAddGump.html new file mode 100644 index 0000000..16f2238 --- /dev/null +++ b/Docs/types/CategorizedAddGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CategorizedAddGump + + +

Back to Server.Gumps

+

CategorizedAddGump : Gump

+ (ctor) CategorizedAddGump( Mobile owner )
+ (ctor) CategorizedAddGump( Mobile owner, CAGCategory category, int page )
+ void Initialize( int page )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/CategoryEntry.html b/Docs/types/CategoryEntry.html new file mode 100644 index 0000000..9c55a76 --- /dev/null +++ b/Docs/types/CategoryEntry.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CategoryEntry + + +

Back to Server.Commands

+

CategoryEntry

+ (ctor) CategoryEntry()
+ (ctor) CategoryEntry( CategoryEntry parent, string title, CategoryEntry[] subCats )
+ (ctor) CategoryEntry( CategoryEntry parent, CategoryLine[] lines, ref int index )
+ ArrayList Matched( get; )
+ Type[] Matches( get; )
+ CategoryEntry Parent( get; )
+ CategoryEntry[] SubCategories( get; )
+ string Title( get; )
+ bool IsMatch( Type type )
+ + diff --git a/Docs/types/CategoryLine.html b/Docs/types/CategoryLine.html new file mode 100644 index 0000000..13af007 --- /dev/null +++ b/Docs/types/CategoryLine.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CategoryLine + + +

Back to Server.Commands

+

CategoryLine

+ (static) CategoryLine[] Load( string path )
+ (ctor) CategoryLine( string input )
+ int Indentation( get; )
+ string Text( get; )
+ + diff --git a/Docs/types/CategorySorter.html b/Docs/types/CategorySorter.html new file mode 100644 index 0000000..eb1254d --- /dev/null +++ b/Docs/types/CategorySorter.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CategorySorter + + +

Back to Server.Commands

+

CategorySorter : IComparer

+ (ctor) CategorySorter()
+ virtual int Compare( object x, object y )
+ + diff --git a/Docs/types/CategoryTypeEntry.html b/Docs/types/CategoryTypeEntry.html new file mode 100644 index 0000000..3fbc61e --- /dev/null +++ b/Docs/types/CategoryTypeEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CategoryTypeEntry + + +

Back to Server.Commands

+

CategoryTypeEntry

+ (ctor) CategoryTypeEntry( Type type )
+ object Object( get; )
+ Type Type( get; )
+ + diff --git a/Docs/types/Cauldron.html b/Docs/types/Cauldron.html new file mode 100644 index 0000000..0064874 --- /dev/null +++ b/Docs/types/Cauldron.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Cauldron + + +

Back to Server.Items

+

Cauldron : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cauldron()
+ (ctor) Cauldron( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CaveFloorCenter.html b/Docs/types/CaveFloorCenter.html new file mode 100644 index 0000000..0a8db77 --- /dev/null +++ b/Docs/types/CaveFloorCenter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CaveFloorCenter + + +

Back to Server.Items

+

CaveFloorCenter : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CaveFloorCenter()
+ (ctor) CaveFloorCenter( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CaveFloorEast.html b/Docs/types/CaveFloorEast.html new file mode 100644 index 0000000..43d6690 --- /dev/null +++ b/Docs/types/CaveFloorEast.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CaveFloorEast + + +

Back to Server.Items

+

CaveFloorEast : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CaveFloorEast()
+ (ctor) CaveFloorEast( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CaveFloorNorth.html b/Docs/types/CaveFloorNorth.html new file mode 100644 index 0000000..dfe835d --- /dev/null +++ b/Docs/types/CaveFloorNorth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CaveFloorNorth + + +

Back to Server.Items

+

CaveFloorNorth : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CaveFloorNorth()
+ (ctor) CaveFloorNorth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CaveFloorSouth.html b/Docs/types/CaveFloorSouth.html new file mode 100644 index 0000000..f6ec6e2 --- /dev/null +++ b/Docs/types/CaveFloorSouth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CaveFloorSouth + + +

Back to Server.Items

+

CaveFloorSouth : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CaveFloorSouth()
+ (ctor) CaveFloorSouth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CaveFloorWest.html b/Docs/types/CaveFloorWest.html new file mode 100644 index 0000000..024a841 --- /dev/null +++ b/Docs/types/CaveFloorWest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CaveFloorWest + + +

Back to Server.Items

+

CaveFloorWest : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CaveFloorWest()
+ (ctor) CaveFloorWest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CavortingClub.html b/Docs/types/CavortingClub.html new file mode 100644 index 0000000..dd4cbf6 --- /dev/null +++ b/Docs/types/CavortingClub.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CavortingClub + + +

Back to Server.Items

+

CavortingClub : Club, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) CavortingClub()
+ (ctor) CavortingClub( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Centaur.html b/Docs/types/Centaur.html new file mode 100644 index 0000000..f8ace3f --- /dev/null +++ b/Docs/types/Centaur.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Centaur + + +

Back to Server.Mobiles

+

Centaur : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Centaur()
+ (ctor) Centaur( Serial serial )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CeramicMug.html b/Docs/types/CeramicMug.html new file mode 100644 index 0000000..6522227 --- /dev/null +++ b/Docs/types/CeramicMug.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - CeramicMug + + +

Back to Server.Items

+

CeramicMug : BaseBeverage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) CeramicMug()
+ (ctor) CeramicMug( BeverageType type )
+ (ctor) CeramicMug( Serial serial )
+ int BaseLabelNumber( get; )
+ int MaxQuantity( get; )
+ virtual int ComputeItemID()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChainChest.html b/Docs/types/ChainChest.html new file mode 100644 index 0000000..5eb4354 --- /dev/null +++ b/Docs/types/ChainChest.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - ChainChest + + +

Back to Server.Items

+

ChainChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: TunicOfFire

+ (ctor) ChainChest()
+ (ctor) ChainChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChainCoif.html b/Docs/types/ChainCoif.html new file mode 100644 index 0000000..5f54c00 --- /dev/null +++ b/Docs/types/ChainCoif.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - ChainCoif + + +

Back to Server.Items

+

ChainCoif : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ChainCoif()
+ (ctor) ChainCoif( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChainHatsuburi.html b/Docs/types/ChainHatsuburi.html new file mode 100644 index 0000000..de42786 --- /dev/null +++ b/Docs/types/ChainHatsuburi.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - ChainHatsuburi + + +

Back to Server.Items

+

ChainHatsuburi : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ChainHatsuburi()
+ (ctor) ChainHatsuburi( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChainLegs.html b/Docs/types/ChainLegs.html new file mode 100644 index 0000000..3464fa6 --- /dev/null +++ b/Docs/types/ChainLegs.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - ChainLegs + + +

Back to Server.Items

+

ChainLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: FeyLeggings, LeggingsOfBane

+ (ctor) ChainLegs()
+ (ctor) ChainLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChainLightningScroll.html b/Docs/types/ChainLightningScroll.html new file mode 100644 index 0000000..15c63a0 --- /dev/null +++ b/Docs/types/ChainLightningScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChainLightningScroll + + +

Back to Server.Items

+

ChainLightningScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ChainLightningScroll()
+ (ctor) ChainLightningScroll( int amount )
+ (ctor) ChainLightningScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChainLightningSpell.html b/Docs/types/ChainLightningSpell.html new file mode 100644 index 0000000..7e85358 --- /dev/null +++ b/Docs/types/ChainLightningSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ChainLightningSpell + + +

Back to Server.Spells.Seventh

+

ChainLightningSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) ChainLightningSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/ChampionAltar.html b/Docs/types/ChampionAltar.html new file mode 100644 index 0000000..ce07d8b --- /dev/null +++ b/Docs/types/ChampionAltar.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChampionAltar + + +

Back to Server.Engines.CannedEvil

+

ChampionAltar : PentagramAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ChampionAltar( ChampionSpawn spawn )
+ (ctor) ChampionAltar( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChampionPlatform.html b/Docs/types/ChampionPlatform.html new file mode 100644 index 0000000..3bb04bc --- /dev/null +++ b/Docs/types/ChampionPlatform.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ChampionPlatform + + +

Back to Server.Engines.CannedEvil

+

ChampionPlatform : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ChampionPlatform( ChampionSpawn spawn )
+ (ctor) ChampionPlatform( Serial serial )
+ void AddComponent( int id, int x, int y, int z )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChampionSkull.html b/Docs/types/ChampionSkull.html new file mode 100644 index 0000000..0e1c837 --- /dev/null +++ b/Docs/types/ChampionSkull.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ChampionSkull + + +

Back to Server.Items

+

ChampionSkull : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ChampionSkull( Serial serial )
+ (ctor) ChampionSkull( ChampionSkullType type )
+ int LabelNumber( get; )
+ ChampionSkullType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChampionSkullBrazier.html b/Docs/types/ChampionSkullBrazier.html new file mode 100644 index 0000000..58b21fe --- /dev/null +++ b/Docs/types/ChampionSkullBrazier.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ChampionSkullBrazier + + +

Back to Server.Engines.CannedEvil

+

ChampionSkullBrazier : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: SacrificeTarget

+ (ctor) ChampionSkullBrazier( Serial serial )
+ (ctor) ChampionSkullBrazier( ChampionSkullPlatform platform, ChampionSkullType type )
+ int LabelNumber( get; )
+ ChampionSkullPlatform Platform( get; )
+ Item Skull( get; set; )
+ ChampionSkullType Type( get; set; )
+ void BeginSacrifice( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ void EndSacrifice( Mobile from, ChampionSkull skull )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChampionSkullPlatform.html b/Docs/types/ChampionSkullPlatform.html new file mode 100644 index 0000000..5501a05 --- /dev/null +++ b/Docs/types/ChampionSkullPlatform.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ChampionSkullPlatform + + +

Back to Server.Engines.CannedEvil

+

ChampionSkullPlatform : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ChampionSkullPlatform()
+ (ctor) ChampionSkullPlatform( Serial serial )
+ void Clear( ChampionSkullBrazier brazier )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ void Validate()
+ bool Validate( ChampionSkullBrazier brazier )
+ + diff --git a/Docs/types/ChampionSkullType.html b/Docs/types/ChampionSkullType.html new file mode 100644 index 0000000..f42375a --- /dev/null +++ b/Docs/types/ChampionSkullType.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ChampionSkullType + + +

Back to Server.Engines.CannedEvil

+

ChampionSkullType (Enum)

+ Power = 0,
+ Enlightenment = 1,
+ Venom = 2,
+ Pain = 3,
+ Greed = 4,
+ Death = 5
+ + diff --git a/Docs/types/ChampionSpawn.html b/Docs/types/ChampionSpawn.html new file mode 100644 index 0000000..f010761 --- /dev/null +++ b/Docs/types/ChampionSpawn.html @@ -0,0 +1,61 @@ + + + RunUO Documentation - Class Overview - ChampionSpawn + + +

Back to Server.Engines.CannedEvil

+

ChampionSpawn : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) void GiveScrollTo( Mobile killer, SpecialScroll scroll )
+ (ctor) ChampionSpawn()
+ (ctor) ChampionSpawn( Serial serial )
+ bool Active( get; set; )
+ Mobile Champion( get; set; )
+ bool ConfinedRoaming( get; set; )
+ TimeSpan ExpireDelay( get; set; )
+ DateTime ExpireTime( get; set; )
+ bool HasBeenAdvanced( get; set; )
+ int Kills( get; set; )
+ int Level( get; set; )
+ int MaxKills( get; )
+ bool RandomizeType( get; set; )
+ TimeSpan RestartDelay( get; set; )
+ DateTime RestartTime( get; )
+ Rectangle2D SpawnArea( get; set; )
+ ChampionSpawnType Type( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ void AdvanceLevel()
+ void AwardArtifact( Item artifact )
+ void BeginRestart( TimeSpan ts )
+ ScrollofTranscendence CreateRandomSoT( bool felucca )
+ virtual void Deserialize( GenericReader reader )
+ void EndRestart()
+ void Expire()
+ virtual void GetProperties( ObjectPropertyList list )
+ Point3D GetRedSkullLocation( int index )
+ Point3D GetSpawnLocation()
+ int GetSubLevel()
+ int GetSubLevelFor( Mobile m )
+ Point3D GetWhiteSkullLocation( int index )
+ void GiveArtifact( Mobile to, Item artifact )
+ bool IsChampionSpawn( Mobile m )
+ bool IsEligible( Mobile m, Item Artifact )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnLocationChange( Point3D oldLoc )
+ virtual void OnMapChange()
+ virtual void OnSingleClick( Mobile from )
+ void OnSlice()
+ void RegisterDamage( Mobile from, int amount )
+ virtual void RegisterDamageTo( Mobile m )
+ void Respawn()
+ virtual void Serialize( GenericWriter writer )
+ void SetInitialSpawnArea()
+ void SetWhiteSkullCount( int val )
+ Mobile Spawn()
+ Mobile Spawn( Type[] types )
+ void SpawnChampion()
+ void Start()
+ void Stop()
+ void UpdateRegion()
+ + diff --git a/Docs/types/ChampionSpawnInfo.html b/Docs/types/ChampionSpawnInfo.html new file mode 100644 index 0000000..7e7eac9 --- /dev/null +++ b/Docs/types/ChampionSpawnInfo.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ChampionSpawnInfo + + +

Back to Server.Engines.CannedEvil

+

ChampionSpawnInfo

+ (static) ChampionSpawnInfo[] Table( get; )
+ (static) ChampionSpawnInfo GetInfo( ChampionSpawnType type )
+ (ctor) ChampionSpawnInfo( string name, Type champion, string[] levelNames, Type[][] spawnTypes )
+ Type Champion( get; )
+ string[] LevelNames( get; )
+ string Name( get; )
+ Type[][] SpawnTypes( get; )
+ + diff --git a/Docs/types/ChampionSpawnRegion.html b/Docs/types/ChampionSpawnRegion.html new file mode 100644 index 0000000..75a4d04 --- /dev/null +++ b/Docs/types/ChampionSpawnRegion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChampionSpawnRegion + + +

Back to Server.Engines.CannedEvil

+

ChampionSpawnRegion : BaseRegion, IComparable

+ (ctor) ChampionSpawnRegion( ChampionSpawn spawn )
+ ChampionSpawn ChampionSpawn( get; )
+ bool YoungProtected( get; )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ virtual void AlterLightLevel( Mobile m, ref int global, ref int personal )
+ + diff --git a/Docs/types/ChampionSpawnType.html b/Docs/types/ChampionSpawnType.html new file mode 100644 index 0000000..ac0b9c1 --- /dev/null +++ b/Docs/types/ChampionSpawnType.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ChampionSpawnType + + +

Back to Server.Engines.CannedEvil

+

ChampionSpawnType (Enum)

+ Abyss = 0,
+ Arachnid = 1,
+ ColdBlood = 2,
+ ForestLord = 3,
+ VerminHorde = 4,
+ UnholyTerror = 5,
+ SleepingDragon = 6,
+ Glade = 7,
+ Pestilence = 8
+ + diff --git a/Docs/types/ChampionTitleInfo.html b/Docs/types/ChampionTitleInfo.html new file mode 100644 index 0000000..1b879a7 --- /dev/null +++ b/Docs/types/ChampionTitleInfo.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - ChampionTitleInfo + + +

Back to Server.Mobiles

+

(PlayerMobile) - ChampionTitleInfo

+

Nested Types: TitleInfo

+ (static) void AwardHarrowerTitle( PlayerMobile pm )
+ (static) void CheckAtrophy( PlayerMobile pm )
+ (static) void Serialize( GenericWriter writer, ChampionTitleInfo titles )
+ (ctor) ChampionTitleInfo()
+ (ctor) ChampionTitleInfo( GenericReader reader )
+ int Abyss( get; set; )
+ int Arachnid( get; set; )
+ int ColdBlood( get; set; )
+ int ForestLord( get; set; )
+ int Harrower( get; set; )
+ int Pestilence( get; set; )
+ int SleepingDragon( get; set; )
+ int UnholyTerror( get; set; )
+ int VerminHorde( get; set; )
+ void Atrophy( int index, int value )
+ void Award( int index, int value )
+ void Award( ChampionSpawnType type, int value )
+ DateTime GetLastDecay( int index )
+ int GetValue( ChampionSpawnType type )
+ int GetValue( int index )
+ void SetValue( ChampionSpawnType type, int value )
+ void SetValue( int index, int value )
+ virtual string ToString()
+ + diff --git a/Docs/types/ChangeCharacter.html b/Docs/types/ChangeCharacter.html new file mode 100644 index 0000000..c2181ad --- /dev/null +++ b/Docs/types/ChangeCharacter.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ChangeCharacter + + +

Back to Server.Network

+

ChangeCharacter : Packet

+ (ctor) ChangeCharacter( IAccount a )
+ + diff --git a/Docs/types/ChangeCombatant.html b/Docs/types/ChangeCombatant.html new file mode 100644 index 0000000..af5c940 --- /dev/null +++ b/Docs/types/ChangeCombatant.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ChangeCombatant + + +

Back to Server.Network

+

ChangeCombatant : Packet

+ (ctor) ChangeCombatant( Mobile combatant )
+ + diff --git a/Docs/types/ChangeHairHueEntry.html b/Docs/types/ChangeHairHueEntry.html new file mode 100644 index 0000000..07fd88f --- /dev/null +++ b/Docs/types/ChangeHairHueEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ChangeHairHueEntry + + +

Back to Server.Mobiles

+

ChangeHairHueEntry

+ (ctor) ChangeHairHueEntry( string name, int[] hues )
+ (ctor) ChangeHairHueEntry( string name, int start, int count )
+ int[] Hues( get; )
+ string Name( get; )
+ + diff --git a/Docs/types/ChangeHairHueGump.html b/Docs/types/ChangeHairHueGump.html new file mode 100644 index 0000000..0cfc9b7 --- /dev/null +++ b/Docs/types/ChangeHairHueGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ChangeHairHueGump + + +

Back to Server.Mobiles

+

ChangeHairHueGump : Gump

+ (ctor) ChangeHairHueGump( Mobile from, Mobile vendor, int price, bool hair, bool facialHair, ChangeHairHueEntry[] entries )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ChangeHairstyleEntry.html b/Docs/types/ChangeHairstyleEntry.html new file mode 100644 index 0000000..e9cecc6 --- /dev/null +++ b/Docs/types/ChangeHairstyleEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChangeHairstyleEntry + + +

Back to Server.Mobiles

+

ChangeHairstyleEntry

+ (ctor) ChangeHairstyleEntry( int gumpID, int x, int y, int itemID )
+ int GumpID( get; )
+ int ItemID( get; )
+ int X( get; )
+ int Y( get; )
+ + diff --git a/Docs/types/ChangeHairstyleGump.html b/Docs/types/ChangeHairstyleGump.html new file mode 100644 index 0000000..3f31477 --- /dev/null +++ b/Docs/types/ChangeHairstyleGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ChangeHairstyleGump + + +

Back to Server.Mobiles

+

ChangeHairstyleGump : Gump

+ (ctor) ChangeHairstyleGump( Mobile from, Mobile vendor, int price, bool facialHair, ChangeHairstyleEntry[] entries )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ChangeProfileRequestEventArgs.html b/Docs/types/ChangeProfileRequestEventArgs.html new file mode 100644 index 0000000..14cd85a --- /dev/null +++ b/Docs/types/ChangeProfileRequestEventArgs.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ChangeProfileRequestEventArgs + + +

Back to Server

+

ChangeProfileRequestEventArgs : EventArgs

+ (ctor) ChangeProfileRequestEventArgs( Mobile beholder, Mobile beheld, string text )
+ Mobile Beheld( get; )
+ Mobile Beholder( get; )
+ string Text( get; )
+ + diff --git a/Docs/types/ChangeProfileRequestEventHandler.html b/Docs/types/ChangeProfileRequestEventHandler.html new file mode 100644 index 0000000..4c50667 --- /dev/null +++ b/Docs/types/ChangeProfileRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ChangeProfileRequestEventHandler + + +

Back to Server

+

ChangeProfileRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ChangeProfileRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ChangeProfileRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ChangeProfileRequestEventArgs e )
+ + diff --git a/Docs/types/ChangeRumorKeywordPrompt.html b/Docs/types/ChangeRumorKeywordPrompt.html new file mode 100644 index 0000000..2de9121 --- /dev/null +++ b/Docs/types/ChangeRumorKeywordPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ChangeRumorKeywordPrompt + + +

Back to Server.Mobiles

+

ChangeRumorKeywordPrompt : Prompt

+ (ctor) ChangeRumorKeywordPrompt( PlayerBarkeeper barkeeper, int rumorIndex )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/ChangeRumorMessagePrompt.html b/Docs/types/ChangeRumorMessagePrompt.html new file mode 100644 index 0000000..c24dea8 --- /dev/null +++ b/Docs/types/ChangeRumorMessagePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ChangeRumorMessagePrompt + + +

Back to Server.Mobiles

+

ChangeRumorMessagePrompt : Prompt

+ (ctor) ChangeRumorMessagePrompt( PlayerBarkeeper barkeeper, int rumorIndex )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/ChangeTipMessagePrompt.html b/Docs/types/ChangeTipMessagePrompt.html new file mode 100644 index 0000000..96839d9 --- /dev/null +++ b/Docs/types/ChangeTipMessagePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ChangeTipMessagePrompt + + +

Back to Server.Mobiles

+

ChangeTipMessagePrompt : Prompt

+ (ctor) ChangeTipMessagePrompt( PlayerBarkeeper barkeeper )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/ChangeUpdateRange.html b/Docs/types/ChangeUpdateRange.html new file mode 100644 index 0000000..a71015b --- /dev/null +++ b/Docs/types/ChangeUpdateRange.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ChangeUpdateRange + + +

Back to Server.Network

+

ChangeUpdateRange : Packet

+ (static) ChangeUpdateRange Instantiate( int range )
+ (ctor) ChangeUpdateRange( int range )
+ + diff --git a/Docs/types/Channel.html b/Docs/types/Channel.html new file mode 100644 index 0000000..7b61cd0 --- /dev/null +++ b/Docs/types/Channel.html @@ -0,0 +1,62 @@ + + + RunUO Documentation - Class Overview - Channel + + +

Back to Server.Engines.Chat

+

Channel

+ (static) List<Channel> Channels( get; )
+ (static) Channel AddChannel( string name )
+ (static) Channel AddChannel( string name, string password )
+ (static) void AddStaticChannel( string name )
+ (static) Channel FindChannelByName( string name )
+ (static) void Initialize()
+ (static) void RemoveChannel( string name )
+ (static) void RemoveChannel( Channel channel )
+ (static) void SendChannelsTo( ChatUser user )
+ (ctor) Channel( string name )
+ (ctor) Channel( string name, string password )
+ bool AlwaysAvailable( get; set; )
+ string Name( get; set; )
+ string Password( get; set; )
+ bool VoiceRestricted( get; set; )
+ void AdBan( ChatUser user )
+ void AddBan( ChatUser user, ChatUser moderator )
+ void AddModerator( ChatUser user )
+ void AddModerator( ChatUser user, ChatUser moderator )
+ bool AddUser( ChatUser user )
+ bool AddUser( ChatUser user, string password )
+ void AddVoiced( ChatUser user )
+ void AddVoiced( ChatUser user, ChatUser moderator )
+ bool CanTalk( ChatUser user )
+ bool Contains( ChatUser user )
+ bool IsBanned( ChatUser user )
+ bool IsModerator( ChatUser user )
+ bool IsVoiced( ChatUser user )
+ void Kick( ChatUser user )
+ void Kick( ChatUser user, ChatUser moderator )
+ void Kick( ChatUser user, ChatUser moderator, bool wasBanned )
+ void RemoveBan( ChatUser user )
+ void RemoveModerator( ChatUser user )
+ void RemoveModerator( ChatUser user, ChatUser moderator )
+ void RemoveUser( ChatUser user )
+ void RemoveVoiced( ChatUser user, ChatUser moderator )
+ void SendCommand( ChatCommand command )
+ void SendCommand( ChatCommand command, string param1 )
+ void SendCommand( ChatCommand command, ChatUser initiator )
+ void SendCommand( ChatCommand command, string param1, string param2 )
+ void SendCommand( ChatCommand command, ChatUser initiator, string param1 )
+ void SendCommand( ChatCommand command, ChatUser initiator, string param1, string param2 )
+ void SendIgnorableMessage( int number, ChatUser from, string param1, string param2 )
+ void SendMessage( int number )
+ void SendMessage( int number, ChatUser initiator )
+ void SendMessage( int number, string param1 )
+ void SendMessage( int number, ChatUser initiator, string param1 )
+ void SendMessage( int number, string param1, string param2 )
+ void SendMessage( int number, ChatUser initiator, string param1, string param2 )
+ void SendUsersTo( ChatUser to )
+ bool ValidateAccess( ChatUser from, ChatUser target )
+ bool ValidateModerator( ChatUser user )
+ bool ValidatePassword( string password )
+ + diff --git a/Docs/types/ChaosDaemon.html b/Docs/types/ChaosDaemon.html new file mode 100644 index 0000000..5853b40 --- /dev/null +++ b/Docs/types/ChaosDaemon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ChaosDaemon + + +

Back to Server.Mobiles

+

ChaosDaemon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ChaosDaemon()
+ (ctor) ChaosDaemon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChaosDragoon.html b/Docs/types/ChaosDragoon.html new file mode 100644 index 0000000..4b5a968 --- /dev/null +++ b/Docs/types/ChaosDragoon.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - ChaosDragoon + + +

Back to Server.Mobiles

+

ChaosDragoon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ChaosDragoon()
+ (ctor) ChaosDragoon( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ bool CanRummageCorpses( get; )
+ bool HasBreath( get; )
+ bool ShowFameTitle( get; )
+ virtual void AlterMeleeDamageTo( Mobile to, ref int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChaosDragoonElite.html b/Docs/types/ChaosDragoonElite.html new file mode 100644 index 0000000..32265be --- /dev/null +++ b/Docs/types/ChaosDragoonElite.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - ChaosDragoonElite + + +

Back to Server.Mobiles

+

ChaosDragoonElite : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ChaosDragoonElite()
+ (ctor) ChaosDragoonElite( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ bool CanRummageCorpses( get; )
+ bool HasBreath( get; )
+ bool ShowFameTitle( get; )
+ virtual void AlterMeleeDamageTo( Mobile to, ref int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChaosGuard.html b/Docs/types/ChaosGuard.html new file mode 100644 index 0000000..5aeb650 --- /dev/null +++ b/Docs/types/ChaosGuard.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ChaosGuard + + +

Back to Server.Mobiles

+

ChaosGuard : BaseShieldGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ChaosGuard()
+ (ctor) ChaosGuard( Serial serial )
+ bool BardImmune( get; )
+ int Keyword( get; )
+ BaseShield Shield( get; )
+ int SignupNumber( get; )
+ GuildType Type( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChaosShield.html b/Docs/types/ChaosShield.html new file mode 100644 index 0000000..754af37 --- /dev/null +++ b/Docs/types/ChaosShield.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - ChaosShield + + +

Back to Server.Items

+

ChaosShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ChaosShield()
+ (ctor) ChaosShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnEquip( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool Validate( Mobile m )
+ + diff --git a/Docs/types/CharacterCreatedEventArgs.html b/Docs/types/CharacterCreatedEventArgs.html new file mode 100644 index 0000000..c2f5d0b --- /dev/null +++ b/Docs/types/CharacterCreatedEventArgs.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - CharacterCreatedEventArgs + + +

Back to Server

+

CharacterCreatedEventArgs : EventArgs

+ (ctor) CharacterCreatedEventArgs( NetState state, IAccount a, string name, bool female, int hue, int str, int dex, int intel, CityInfo city, SkillNameValue[] skills, int shirtHue, int pantsHue, int hairID, int hairHue, int beardID, int beardHue, int profession, Race race )
+ IAccount Account( get; )
+ int BeardHue( get; )
+ int BeardID( get; )
+ CityInfo City( get; )
+ int Dex( get; )
+ bool Female( get; )
+ int HairHue( get; )
+ int HairID( get; )
+ int Hue( get; )
+ int Int( get; )
+ Mobile Mobile( get; set; )
+ string Name( get; )
+ int PantsHue( get; )
+ int Profession( get; set; )
+ Race Race( get; )
+ int ShirtHue( get; )
+ SkillNameValue[] Skills( get; )
+ NetState State( get; )
+ int Str( get; )
+ + diff --git a/Docs/types/CharacterCreatedEventHandler.html b/Docs/types/CharacterCreatedEventHandler.html new file mode 100644 index 0000000..7ebaf5b --- /dev/null +++ b/Docs/types/CharacterCreatedEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CharacterCreatedEventHandler + + +

Back to Server

+

CharacterCreatedEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) CharacterCreatedEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( CharacterCreatedEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( CharacterCreatedEventArgs e )
+ + diff --git a/Docs/types/CharacterCreation.html b/Docs/types/CharacterCreation.html new file mode 100644 index 0000000..1a4ed8e --- /dev/null +++ b/Docs/types/CharacterCreation.html @@ -0,0 +1,39 @@ + + + RunUO Documentation - Class Overview - CharacterCreation + + +

Back to Server.Misc

+

CharacterCreation

+

Nested Types: BadStartMessage

+ (static) void AddBackpack( Mobile m )
+ (static) void AddPants( Mobile m, int pantsHue )
+ (static) void AddPowerScrolls( BankBox bank )
+ (static) void AddShirt( Mobile m, int shirtHue )
+ (static) void AddShoes( Mobile m )
+ (static) void AddSkillItems( SkillName skill, Mobile m )
+ (static) Mobile CreateMobile( Account a )
+ (static) void EquipItem( Item item )
+ (static) void EquipItem( Item item, bool mustEquip )
+ (static) void EventSink_CharacterCreated( CharacterCreatedEventArgs args )
+ (static) void FillBankAOS( Mobile m )
+ (static) void FillBankbox( Mobile m )
+ (static) void FixStat( ref int stat, int diff, int max )
+ (static) void FixStats( ref int str, ref int dex, ref int intel, int max )
+ (static) CityInfo GetStartLocation( CharacterCreatedEventArgs args, bool isYoung )
+ (static) void Initialize()
+ (static) Item MakeNewbie( Item item )
+ (static) Item MakePotionKeg( PotionEffect type, int hue )
+ (static) Item NecroHue( Item item )
+ (static) void PackInstrument()
+ (static) void PackItem( Item item )
+ (static) void PackScroll( int circle )
+ (static) void PlaceItemIn( Container parent, int x, int y, Item item )
+ (static) void SetName( Mobile m, string name )
+ (static) void SetSkills( Mobile m, SkillNameValue[] skills, int prof )
+ (static) void SetStats( Mobile m, NetState state, int str, int dex, int intel )
+ (static) bool ValidSkills( SkillNameValue[] skills )
+ (static) bool VerifyProfession( int profession )
+ (ctor) CharacterCreation()
+ + diff --git a/Docs/types/CharacterList.html b/Docs/types/CharacterList.html new file mode 100644 index 0000000..094c504 --- /dev/null +++ b/Docs/types/CharacterList.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CharacterList + + +

Back to Server.Network

+

CharacterList : Packet

+ (static) CharacterListFlags AdditionalFlags( get; set; )
+ (ctor) CharacterList( IAccount a, CityInfo[] info )
+ + diff --git a/Docs/types/CharacterListFlags.html b/Docs/types/CharacterListFlags.html new file mode 100644 index 0000000..50de305 --- /dev/null +++ b/Docs/types/CharacterListFlags.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - CharacterListFlags + + +

Back to Server

+

CharacterListFlags (Enum)

+ None = 0x00000000,
+ Unk1 = 0x00000001,
+ Unk2 = 0x00000002,
+ OneCharacterSlot = 0x00000004,
+ ContextMenus = 0x00000008,
+ ExpansionNone = 0x00000008,
+ ExpansionLBR = 0x00000008,
+ ExpansionT2A = 0x00000008,
+ ExpansionUOTD = 0x00000008,
+ ExpansionUOR = 0x00000008,
+ SlotLimit = 0x00000010,
+ AOS = 0x00000020,
+ ExpansionAOS = 0x00000028,
+ SixthCharacterSlot = 0x00000040,
+ SE = 0x00000080,
+ ExpansionSE = 0x000000A8,
+ ML = 0x00000100,
+ ExpansionML = 0x000001A8,
+ ExpansionSA = 0x000001A8,
+ Unk4 = 0x00000200,
+ Unk5 = 0x00000400,
+ Unk6 = 0x00000800,
+ SeventhCharacterSlot = 0x00001000,
+ Unk7 = 0x00002000
+ + diff --git a/Docs/types/CharacterListOld.html b/Docs/types/CharacterListOld.html new file mode 100644 index 0000000..53a5e66 --- /dev/null +++ b/Docs/types/CharacterListOld.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CharacterListOld + + +

Back to Server.Network

+

CharacterListOld : Packet

+ (ctor) CharacterListOld( IAccount a, CityInfo[] info )
+ + diff --git a/Docs/types/CharacterListUpdate.html b/Docs/types/CharacterListUpdate.html new file mode 100644 index 0000000..e09927e --- /dev/null +++ b/Docs/types/CharacterListUpdate.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CharacterListUpdate + + +

Back to Server.Network

+

CharacterListUpdate : Packet

+ (ctor) CharacterListUpdate( IAccount a )
+ + diff --git a/Docs/types/CharacterPlinthGump.html b/Docs/types/CharacterPlinthGump.html new file mode 100644 index 0000000..f25ad16 --- /dev/null +++ b/Docs/types/CharacterPlinthGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CharacterPlinthGump + + +

Back to Server.Items

+

(CharacterStatuePlinth) - CharacterPlinthGump : Gump

+ (ctor) CharacterPlinthGump( CharacterStatue statue )
+ int GetTypeNumber( StatueType type )
+ + diff --git a/Docs/types/CharacterStatue.html b/Docs/types/CharacterStatue.html new file mode 100644 index 0000000..dc0394a --- /dev/null +++ b/Docs/types/CharacterStatue.html @@ -0,0 +1,39 @@ + + + RunUO Documentation - Class Overview - CharacterStatue + + +

Back to Server.Mobiles

+

CharacterStatue : Mobile, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: DemolishEntry

+ (ctor) CharacterStatue( Serial serial )
+ (ctor) CharacterStatue( Mobile from, StatueType type )
+ bool IsRewardItem( get; set; )
+ StatueMaterial Material( get; set; )
+ CharacterStatuePlinth Plinth( get; set; )
+ StatuePose Pose( get; set; )
+ Mobile SculptedBy( get; )
+ DateTime SculptedOn( get; )
+ StatueType StatueType( get; set; )
+ virtual bool CanBeDamaged()
+ virtual bool CanBeRenamedBy( Mobile from )
+ void CloneBody( Mobile from )
+ void CloneClothes( Mobile from )
+ Item CloneItem( Item item )
+ void Demolish( Mobile by )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ void InvalidateHues()
+ void InvalidatePose()
+ virtual void OnAfterDelete()
+ virtual void OnAosSingleClick( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange( Map oldMap )
+ void OnRequestedAnimation( Mobile from )
+ void Restore( CharacterStatue from )
+ void Sculpt( Mobile by )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CharacterStatueDeed.html b/Docs/types/CharacterStatueDeed.html new file mode 100644 index 0000000..f72bccc --- /dev/null +++ b/Docs/types/CharacterStatueDeed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - CharacterStatueDeed + + +

Back to Server.Mobiles

+

CharacterStatueDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) CharacterStatueDeed( CharacterStatue statue )
+ (ctor) CharacterStatueDeed( Serial serial )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ CharacterStatue Statue( get; set; )
+ StatueType StatueType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CharacterStatueGump.html b/Docs/types/CharacterStatueGump.html new file mode 100644 index 0000000..5c8cd5b --- /dev/null +++ b/Docs/types/CharacterStatueGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CharacterStatueGump + + +

Back to Server.Gumps

+

CharacterStatueGump : Gump

+

Nested Types: Buttons

+ (ctor) CharacterStatueGump( Item maker, CharacterStatue statue, Mobile owner )
+ void CheckOnline()
+ int GetDirectionNumber( Direction direction )
+ int GetMaterialNumber( StatueType type, StatueMaterial material )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ virtual void OnServerClose( NetState owner )
+ + diff --git a/Docs/types/CharacterStatueMaker.html b/Docs/types/CharacterStatueMaker.html new file mode 100644 index 0000000..45c9b5a --- /dev/null +++ b/Docs/types/CharacterStatueMaker.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - CharacterStatueMaker + + +

Back to Server.Items

+

CharacterStatueMaker : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Derived Types: BronzeStatueMaker, JadeStatueMaker, MarbleStatueMaker

+ (ctor) CharacterStatueMaker( Serial serial )
+ (ctor) CharacterStatueMaker( StatueType type )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ StatueType StatueType( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ void InvalidateHue()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CharacterStatuePlinth.html b/Docs/types/CharacterStatuePlinth.html new file mode 100644 index 0000000..a8dadba --- /dev/null +++ b/Docs/types/CharacterStatuePlinth.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - CharacterStatuePlinth + + +

Back to Server.Items

+

CharacterStatuePlinth : Static, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IAddon

+

Nested Types: CharacterPlinthGump

+ (ctor) CharacterStatuePlinth( Serial serial )
+ (ctor) CharacterStatuePlinth( CharacterStatue statue )
+ Item Deed( get; )
+ int LabelNumber( get; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ void InvalidateHue()
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CharacterStatueTarget.html b/Docs/types/CharacterStatueTarget.html new file mode 100644 index 0000000..60f86dd --- /dev/null +++ b/Docs/types/CharacterStatueTarget.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CharacterStatueTarget + + +

Back to Server.Mobiles

+

CharacterStatueTarget : Target

+ (static) AddonFitResult CheckDoors( Point3D p, int height, BaseHouse house )
+ (static) AddonFitResult CouldFit( Point3D p, Map map, Mobile from, ref BaseHouse house )
+ (ctor) CharacterStatueTarget( Item maker, StatueType type )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/ChargerOfTheFallen.html b/Docs/types/ChargerOfTheFallen.html new file mode 100644 index 0000000..4a66ac0 --- /dev/null +++ b/Docs/types/ChargerOfTheFallen.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ChargerOfTheFallen + + +

Back to Server.Mobiles

+

ChargerOfTheFallen : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) ChargerOfTheFallen()
+ (ctor) ChargerOfTheFallen( Serial serial )
+ int EtherealHue( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Chart.html b/Docs/types/Chart.html new file mode 100644 index 0000000..0c41ab8 --- /dev/null +++ b/Docs/types/Chart.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Chart + + +

Back to Server.Engines.Reports

+

Chart : PersistableObject

+

Derived Types: BarGraph, PieChart

+ (ctor) Chart()
+ string FileName( get; set; )
+ ChartItemCollection Items( get; )
+ string Name( get; set; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void DeserializeChildren( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ virtual void SerializeChildren( PersistanceWriter op )
+ + diff --git a/Docs/types/ChartItem.html b/Docs/types/ChartItem.html new file mode 100644 index 0000000..c702148 --- /dev/null +++ b/Docs/types/ChartItem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ChartItem + + +

Back to Server.Engines.Reports

+

ChartItem : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) ChartItem()
+ (ctor) ChartItem( string name, int value )
+ string Name( get; set; )
+ PersistableType TypeID( get; )
+ int Value( get; set; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ + diff --git a/Docs/types/ChartItemCollection.html b/Docs/types/ChartItemCollection.html new file mode 100644 index 0000000..6d7f656 --- /dev/null +++ b/Docs/types/ChartItemCollection.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ChartItemCollection + + +

Back to Server.Engines.Reports

+

ChartItemCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: ChartItemCollectionEnumerator

+ (ctor) ChartItemCollection()
+ ChartItem Item( get; set; )
+ int Add( ChartItem value )
+ int Add( string name, int value )
+ bool Contains( ChartItem value )
+ ChartItemCollectionEnumerator GetEnumerator()
+ int IndexOf( ChartItem value )
+ void Insert( int index, ChartItem value )
+ void Remove( ChartItem value )
+ + diff --git a/Docs/types/ChartItemCollectionEnumerator.html b/Docs/types/ChartItemCollectionEnumerator.html new file mode 100644 index 0000000..7b76e47 --- /dev/null +++ b/Docs/types/ChartItemCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChartItemCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(ChartItemCollection) - ChartItemCollectionEnumerator : IEnumerator

+ (ctor) ChartItemCollectionEnumerator( ChartItemCollection collection )
+ ChartItem Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/ChartItemsCollection.html b/Docs/types/ChartItemsCollection.html new file mode 100644 index 0000000..8e8aa28 --- /dev/null +++ b/Docs/types/ChartItemsCollection.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ChartItemsCollection + + +

Back to Server.Engines.Reports

+

ChartItemsCollection : CollectionBase, IList, ICollection, IEnumerable

+ (ctor) ChartItemsCollection()
+ DataItem Item( get; set; )
+ int Add( DataItem value )
+ bool Contains( DataItem value )
+ int IndexOf( DataItem value )
+ void Remove( DataItem value )
+ + diff --git a/Docs/types/ChartRenderer.html b/Docs/types/ChartRenderer.html new file mode 100644 index 0000000..e758e0b --- /dev/null +++ b/Docs/types/ChartRenderer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ChartRenderer + + +

Back to Server.Engines.Reports

+

ChartRenderer

+

Derived Types: BarGraphRenderer, PieChartRenderer

+ (ctor) ChartRenderer()
+ ChartItemsCollection DataPoints( get; set; )
+ virtual Bitmap Draw()
+ Color GetColor( int index )
+ void SetColor( int index, Color NewColor )
+ + diff --git a/Docs/types/ChatActionHandler.html b/Docs/types/ChatActionHandler.html new file mode 100644 index 0000000..b097a7e --- /dev/null +++ b/Docs/types/ChatActionHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ChatActionHandler + + +

Back to Server.Engines.Chat

+

ChatActionHandler

+ (ctor) ChatActionHandler( bool requireModerator, bool requireConference, OnChatAction callback )
+ OnChatAction Callback( get; )
+ bool RequireConference( get; )
+ bool RequireModerator( get; )
+ + diff --git a/Docs/types/ChatActionHandlers.html b/Docs/types/ChatActionHandlers.html new file mode 100644 index 0000000..1107adb --- /dev/null +++ b/Docs/types/ChatActionHandlers.html @@ -0,0 +1,40 @@ + + + RunUO Documentation - Class Overview - ChatActionHandlers + + +

Back to Server.Engines.Chat

+

ChatActionHandlers

+ (static) void AddIgnore( ChatUser from, Channel channel, string param )
+ (static) void AddModerator( ChatUser from, Channel channel, string param )
+ (static) void AddVoice( ChatUser from, Channel channel, string param )
+ (static) void AllowPrivateMessages( ChatUser from, Channel channel, string param )
+ (static) void ChangeChannelPassword( ChatUser from, Channel channel, string param )
+ (static) void ChannelMessage( ChatUser from, Channel channel, string param )
+ (static) void DisableDefaultVoice( ChatUser from, Channel channel, string param )
+ (static) void DisallowPrivateMessages( ChatUser from, Channel channel, string param )
+ (static) void EmoteMessage( ChatUser from, Channel channel, string param )
+ (static) void EnableDefaultVoice( ChatUser from, Channel channel, string param )
+ (static) ChatActionHandler GetHandler( int actionID )
+ (static) void HideCharacterName( ChatUser from, Channel channel, string param )
+ (static) void JoinChannel( ChatUser from, Channel channel, string param )
+ (static) void JoinNewChannel( ChatUser from, Channel channel, string param )
+ (static) void Kick( ChatUser from, Channel channel, string param )
+ (static) void LeaveChat( ChatUser from, Channel channel, string param )
+ (static) void PrivateMessage( ChatUser from, Channel channel, string param )
+ (static) void QueryWhoIs( ChatUser from, Channel channel, string param )
+ (static) void Register( int actionID, bool requireModerator, bool requireConference, OnChatAction callback )
+ (static) void RemoveIgnore( ChatUser from, Channel channel, string param )
+ (static) void RemoveModerator( ChatUser from, Channel channel, string param )
+ (static) void RemoveVoice( ChatUser from, Channel channel, string param )
+ (static) void RenameChannel( ChatUser from, Channel channel, string param )
+ (static) void ShowCharacterName( ChatUser from, Channel channel, string param )
+ (static) void ToggleCharacterName( ChatUser from, Channel channel, string param )
+ (static) void ToggleDefaultVoice( ChatUser from, Channel channel, string param )
+ (static) void ToggleIgnore( ChatUser from, Channel channel, string param )
+ (static) void ToggleModerator( ChatUser from, Channel channel, string param )
+ (static) void TogglePrivateMessages( ChatUser from, Channel channel, string param )
+ (static) void ToggleVoice( ChatUser from, Channel channel, string param )
+ (ctor) ChatActionHandlers()
+ + diff --git a/Docs/types/ChatCommand.html b/Docs/types/ChatCommand.html new file mode 100644 index 0000000..24e162e --- /dev/null +++ b/Docs/types/ChatCommand.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ChatCommand + + +

Back to Server.Engines.Chat

+

ChatCommand (Enum)

+ AddChannel = 1000,
+ RemoveChannel = 1001,
+ AskNewNickname = 1003,
+ CloseChatWindow = 1004,
+ OpenChatWindow = 1005,
+ AddUserToChannel = 1006,
+ RemoveUserFromChannel = 1007,
+ LeaveChannel = 1008,
+ JoinedChannel = 1009
+ + diff --git a/Docs/types/ChatMessagePacket.html b/Docs/types/ChatMessagePacket.html new file mode 100644 index 0000000..b1d5044 --- /dev/null +++ b/Docs/types/ChatMessagePacket.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ChatMessagePacket + + +

Back to Server.Engines.Chat

+

ChatMessagePacket : Packet

+ (ctor) ChatMessagePacket( Mobile who, int number, string param1, string param2 )
+ + diff --git a/Docs/types/ChatRequestEventArgs.html b/Docs/types/ChatRequestEventArgs.html new file mode 100644 index 0000000..43f307a --- /dev/null +++ b/Docs/types/ChatRequestEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ChatRequestEventArgs + + +

Back to Server

+

ChatRequestEventArgs : EventArgs

+ (ctor) ChatRequestEventArgs( Mobile mobile )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/ChatRequestEventHandler.html b/Docs/types/ChatRequestEventHandler.html new file mode 100644 index 0000000..adb573c --- /dev/null +++ b/Docs/types/ChatRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ChatRequestEventHandler + + +

Back to Server

+

ChatRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ChatRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ChatRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ChatRequestEventArgs e )
+ + diff --git a/Docs/types/ChatSystem.html b/Docs/types/ChatSystem.html new file mode 100644 index 0000000..2c990b9 --- /dev/null +++ b/Docs/types/ChatSystem.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ChatSystem + + +

Back to Server.Engines.Chat

+

ChatSystem

+ (static) bool Enabled( get; set; )
+ (static) void ChatAction( NetState state, PacketReader pvSrc )
+ (static) void Initialize()
+ (static) void OpenChatWindowRequest( NetState state, PacketReader pvSrc )
+ (static) ChatUser SearchForUser( ChatUser from, string name )
+ (static) void SendCommandTo( Mobile to, ChatCommand type )
+ (static) void SendCommandTo( Mobile to, ChatCommand type, string param1 )
+ (static) void SendCommandTo( Mobile to, ChatCommand type, string param1, string param2 )
+ (ctor) ChatSystem()
+ + diff --git a/Docs/types/ChatUser.html b/Docs/types/ChatUser.html new file mode 100644 index 0000000..64f82d6 --- /dev/null +++ b/Docs/types/ChatUser.html @@ -0,0 +1,39 @@ + + + RunUO Documentation - Class Overview - ChatUser + + +

Back to Server.Engines.Chat

+

ChatUser

+ (static) ChatUser AddChatUser( Mobile from )
+ (static) ChatUser GetChatUser( Mobile from )
+ (static) ChatUser GetChatUser( string username )
+ (static) void GlobalSendCommand( ChatCommand command )
+ (static) void GlobalSendCommand( ChatCommand command, ChatUser initiator )
+ (static) void GlobalSendCommand( ChatCommand command, string param1 )
+ (static) void GlobalSendCommand( ChatCommand command, ChatUser initiator, string param1 )
+ (static) void GlobalSendCommand( ChatCommand command, string param1, string param2 )
+ (static) void GlobalSendCommand( ChatCommand command, ChatUser initiator, string param1, string param2 )
+ (static) void RemoveChatUser( ChatUser user )
+ (static) void RemoveChatUser( Mobile from )
+ (ctor) ChatUser( Mobile m )
+ bool Anonymous( get; set; )
+ Channel CurrentChannel( get; set; )
+ List<ChatUser> Ignored( get; )
+ bool IgnorePrivateMessage( get; set; )
+ List<ChatUser> Ignoring( get; )
+ bool IsModerator( get; )
+ bool IsOnline( get; )
+ Mobile Mobile( get; )
+ string Username( get; set; )
+ void AddIgnored( ChatUser user )
+ bool CheckOnline()
+ char GetColorCharacter()
+ bool IsIgnored( ChatUser check )
+ void RemoveIgnored( ChatUser user )
+ void SendMessage( int number )
+ void SendMessage( int number, string param1 )
+ void SendMessage( int number, string param1, string param2 )
+ void SendMessage( int number, Mobile from, string param1, string param2 )
+ + diff --git a/Docs/types/CheckItemGroup.html b/Docs/types/CheckItemGroup.html new file mode 100644 index 0000000..f4b7638 --- /dev/null +++ b/Docs/types/CheckItemGroup.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CheckItemGroup + + +

Back to Server.Items

+

CheckItemGroup : MulticastDelegate, ICloneable, ISerializable

+ (ctor) CheckItemGroup( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Item a, Item b, AsyncCallback callback, object object )
+ virtual int EndInvoke( IAsyncResult result )
+ virtual int Invoke( Item a, Item b )
+ + diff --git a/Docs/types/CheckSlayerResult.html b/Docs/types/CheckSlayerResult.html new file mode 100644 index 0000000..332ed84 --- /dev/null +++ b/Docs/types/CheckSlayerResult.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CheckSlayerResult + + +

Back to Server.Items

+

CheckSlayerResult (Enum)

+ None = 0,
+ Slayer = 1,
+ Opposition = 2
+ + diff --git a/Docs/types/CheckerBoard.html b/Docs/types/CheckerBoard.html new file mode 100644 index 0000000..dc0e851 --- /dev/null +++ b/Docs/types/CheckerBoard.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CheckerBoard + + +

Back to Server.Items

+

CheckerBoard : BaseBoard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) CheckerBoard()
+ (ctor) CheckerBoard( Serial serial )
+ int LabelNumber( get; )
+ virtual void CreatePieces()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Checkers.html b/Docs/types/Checkers.html new file mode 100644 index 0000000..e475d53 --- /dev/null +++ b/Docs/types/Checkers.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Checkers + + +

Back to Server.Items

+

Checkers : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Checkers()
+ (ctor) Checkers( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Checkers2.html b/Docs/types/Checkers2.html new file mode 100644 index 0000000..d59d02c --- /dev/null +++ b/Docs/types/Checkers2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Checkers2 + + +

Back to Server.Items

+

Checkers2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Checkers2()
+ (ctor) Checkers2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CheesePizza.html b/Docs/types/CheesePizza.html new file mode 100644 index 0000000..f3bd513 --- /dev/null +++ b/Docs/types/CheesePizza.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CheesePizza + + +

Back to Server.Items

+

CheesePizza : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CheesePizza()
+ (ctor) CheesePizza( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CheeseSlice.html b/Docs/types/CheeseSlice.html new file mode 100644 index 0000000..7e442f6 --- /dev/null +++ b/Docs/types/CheeseSlice.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CheeseSlice + + +

Back to Server.Items

+

CheeseSlice : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CheeseSlice()
+ (ctor) CheeseSlice( int amount )
+ (ctor) CheeseSlice( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CheeseWedge.html b/Docs/types/CheeseWedge.html new file mode 100644 index 0000000..9ce3fb5 --- /dev/null +++ b/Docs/types/CheeseWedge.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CheeseWedge + + +

Back to Server.Items

+

CheeseWedge : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CheeseWedge()
+ (ctor) CheeseWedge( int amount )
+ (ctor) CheeseWedge( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CheeseWheel.html b/Docs/types/CheeseWheel.html new file mode 100644 index 0000000..0b4afdf --- /dev/null +++ b/Docs/types/CheeseWheel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CheeseWheel + + +

Back to Server.Items

+

CheeseWheel : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CheeseWheel()
+ (ctor) CheeseWheel( int amount )
+ (ctor) CheeseWheel( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CherryArmoire.html b/Docs/types/CherryArmoire.html new file mode 100644 index 0000000..038043c --- /dev/null +++ b/Docs/types/CherryArmoire.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CherryArmoire + + +

Back to Server.Items

+

CherryArmoire : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CherryArmoire()
+ (ctor) CherryArmoire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CherryBlossomTreeAddon.html b/Docs/types/CherryBlossomTreeAddon.html new file mode 100644 index 0000000..1f0a030 --- /dev/null +++ b/Docs/types/CherryBlossomTreeAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CherryBlossomTreeAddon + + +

Back to Server.Items

+

CherryBlossomTreeAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) CherryBlossomTreeAddon()
+ (ctor) CherryBlossomTreeAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CherryBlossomTreeDeed.html b/Docs/types/CherryBlossomTreeDeed.html new file mode 100644 index 0000000..a4003c1 --- /dev/null +++ b/Docs/types/CherryBlossomTreeDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CherryBlossomTreeDeed + + +

Back to Server.Items

+

CherryBlossomTreeDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CherryBlossomTreeDeed()
+ (ctor) CherryBlossomTreeDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CherryBlossomTrunkAddon.html b/Docs/types/CherryBlossomTrunkAddon.html new file mode 100644 index 0000000..96d3ca6 --- /dev/null +++ b/Docs/types/CherryBlossomTrunkAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CherryBlossomTrunkAddon + + +

Back to Server.Items

+

CherryBlossomTrunkAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) CherryBlossomTrunkAddon()
+ (ctor) CherryBlossomTrunkAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CherryBlossomTrunkDeed.html b/Docs/types/CherryBlossomTrunkDeed.html new file mode 100644 index 0000000..fe7c144 --- /dev/null +++ b/Docs/types/CherryBlossomTrunkDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CherryBlossomTrunkDeed + + +

Back to Server.Items

+

CherryBlossomTrunkDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CherryBlossomTrunkDeed()
+ (ctor) CherryBlossomTrunkDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Chessboard.html b/Docs/types/Chessboard.html new file mode 100644 index 0000000..74b8b09 --- /dev/null +++ b/Docs/types/Chessboard.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Chessboard + + +

Back to Server.Items

+

Chessboard : BaseBoard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) Chessboard()
+ (ctor) Chessboard( Serial serial )
+ int LabelNumber( get; )
+ virtual void CreatePieces()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Chessmen.html b/Docs/types/Chessmen.html new file mode 100644 index 0000000..cecb8fd --- /dev/null +++ b/Docs/types/Chessmen.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Chessmen + + +

Back to Server.Items

+

Chessmen : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Chessmen()
+ (ctor) Chessmen( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Chessmen2.html b/Docs/types/Chessmen2.html new file mode 100644 index 0000000..a1dd076 --- /dev/null +++ b/Docs/types/Chessmen2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Chessmen2 + + +

Back to Server.Items

+

Chessmen2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Chessmen2()
+ (ctor) Chessmen2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Chessmen3.html b/Docs/types/Chessmen3.html new file mode 100644 index 0000000..f56e976 --- /dev/null +++ b/Docs/types/Chessmen3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Chessmen3 + + +

Back to Server.Items

+

Chessmen3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Chessmen3()
+ (ctor) Chessmen3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChestOfHeirlooms.html b/Docs/types/ChestOfHeirlooms.html new file mode 100644 index 0000000..eaac79b --- /dev/null +++ b/Docs/types/ChestOfHeirlooms.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChestOfHeirlooms + + +

Back to Server.Items

+

ChestOfHeirlooms : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) ChestOfHeirlooms()
+ (ctor) ChestOfHeirlooms( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Chicken.html b/Docs/types/Chicken.html new file mode 100644 index 0000000..473c231 --- /dev/null +++ b/Docs/types/Chicken.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Chicken + + +

Back to Server.Mobiles

+

Chicken : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Chicken()
+ (ctor) Chicken( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Feathers( get; )
+ int Meat( get; )
+ MeatType MeatType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChickenLeg.html b/Docs/types/ChickenLeg.html new file mode 100644 index 0000000..a681a90 --- /dev/null +++ b/Docs/types/ChickenLeg.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChickenLeg + + +

Back to Server.Items

+

ChickenLeg : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ChickenLeg()
+ (ctor) ChickenLeg( int amount )
+ (ctor) ChickenLeg( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChildNode.html b/Docs/types/ChildNode.html new file mode 100644 index 0000000..d31abff --- /dev/null +++ b/Docs/types/ChildNode.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChildNode + + +

Back to Server.Gumps

+

ChildNode

+ (ctor) ChildNode( XmlTextReader xml, ParentNode parent )
+ Point3D Location( get; )
+ string Name( get; )
+ ParentNode Parent( get; )
+ void Parse( XmlTextReader xml )
+ + diff --git a/Docs/types/ChildrenTalesVol2.html b/Docs/types/ChildrenTalesVol2.html new file mode 100644 index 0000000..9344001 --- /dev/null +++ b/Docs/types/ChildrenTalesVol2.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChildrenTalesVol2 + + +

Back to Server.Items

+

ChildrenTalesVol2 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) ChildrenTalesVol2()
+ (ctor) ChildrenTalesVol2( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChiselsNorth.html b/Docs/types/ChiselsNorth.html new file mode 100644 index 0000000..1e3d6b7 --- /dev/null +++ b/Docs/types/ChiselsNorth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ChiselsNorth + + +

Back to Server.Items

+

ChiselsNorth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ChiselsNorth()
+ (ctor) ChiselsNorth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChiselsWest.html b/Docs/types/ChiselsWest.html new file mode 100644 index 0000000..5aba95e --- /dev/null +++ b/Docs/types/ChiselsWest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ChiselsWest + + +

Back to Server.Items

+

ChiselsWest : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ChiselsWest()
+ (ctor) ChiselsWest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Chunk.html b/Docs/types/Chunk.html new file mode 100644 index 0000000..fe84d01 --- /dev/null +++ b/Docs/types/Chunk.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Chunk + + +

Back to Server

+

(FileQueue) - Chunk

+ (ctor) Chunk( FileQueue owner, int slot, byte[] buffer, int offset, int size )
+ byte[] Buffer( get; )
+ int Offset( get; )
+ int Size( get; )
+ void Commit()
+ + diff --git a/Docs/types/Chyloth.html b/Docs/types/Chyloth.html new file mode 100644 index 0000000..cbcc2c8 --- /dev/null +++ b/Docs/types/Chyloth.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Chyloth + + +

Back to Server.Engines.Quests.Doom

+

Chyloth : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (static) void TeleportToFerry( Mobile from )
+ (ctor) Chyloth()
+ (ctor) Chyloth( Serial serial )
+ Mobile AngryAt( get; set; )
+ BellOfTheDead Bell( get; set; )
+ virtual void BeginGiveWarning()
+ virtual void BeginRemove( TimeSpan delay )
+ virtual void BeginSummonDragon()
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void EndGiveWarning()
+ virtual void EndRemove()
+ virtual void EndSummonDragon()
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChylothPartyGump.html b/Docs/types/ChylothPartyGump.html new file mode 100644 index 0000000..c493696 --- /dev/null +++ b/Docs/types/ChylothPartyGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ChylothPartyGump + + +

Back to Server.Engines.Quests.Doom

+

ChylothPartyGump : Gump

+ (ctor) ChylothPartyGump( Mobile leader, Mobile member )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ChylothShroud.html b/Docs/types/ChylothShroud.html new file mode 100644 index 0000000..02b2156 --- /dev/null +++ b/Docs/types/ChylothShroud.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ChylothShroud + + +

Back to Server.Engines.Quests.Doom

+

ChylothShroud : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ChylothShroud()
+ (ctor) ChylothShroud( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ChylothStaff.html b/Docs/types/ChylothStaff.html new file mode 100644 index 0000000..89a7231 --- /dev/null +++ b/Docs/types/ChylothStaff.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ChylothStaff + + +

Back to Server.Engines.Quests.Doom

+

ChylothStaff : BlackStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ChylothStaff()
+ (ctor) ChylothStaff( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CinnamonFancyRugAddon.html b/Docs/types/CinnamonFancyRugAddon.html new file mode 100644 index 0000000..fb0a537 --- /dev/null +++ b/Docs/types/CinnamonFancyRugAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CinnamonFancyRugAddon + + +

Back to Server.Items

+

CinnamonFancyRugAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) CinnamonFancyRugAddon()
+ (ctor) CinnamonFancyRugAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CinnamonFancyRugDeed.html b/Docs/types/CinnamonFancyRugDeed.html new file mode 100644 index 0000000..a69f015 --- /dev/null +++ b/Docs/types/CinnamonFancyRugDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CinnamonFancyRugDeed + + +

Back to Server.Items

+

CinnamonFancyRugDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CinnamonFancyRugDeed()
+ (ctor) CinnamonFancyRugDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CirclePoint.html b/Docs/types/CirclePoint.html new file mode 100644 index 0000000..c349bad --- /dev/null +++ b/Docs/types/CirclePoint.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CirclePoint + + +

Back to Server.Misc

+

(Geometry) - CirclePoint

+ (ctor) CirclePoint( Point2D point, int angle, int quadrant )
+ int Angle( get; )
+ Point2D Point( get; )
+ int Quadrant( get; )
+ + diff --git a/Docs/types/Circlet.html b/Docs/types/Circlet.html new file mode 100644 index 0000000..8952249 --- /dev/null +++ b/Docs/types/Circlet.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Circlet + + +

Back to Server.Items

+

Circlet : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Circlet()
+ (ctor) Circlet( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Citrine.html b/Docs/types/Citrine.html new file mode 100644 index 0000000..2f9290a --- /dev/null +++ b/Docs/types/Citrine.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Citrine + + +

Back to Server.Items

+

Citrine : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Citrine()
+ (ctor) Citrine( int amount )
+ (ctor) Citrine( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CityInfo.html b/Docs/types/CityInfo.html new file mode 100644 index 0000000..d53428c --- /dev/null +++ b/Docs/types/CityInfo.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - CityInfo + + +

Back to Server.Network

+

CityInfo

+ (ctor) CityInfo( string city, string building, int x, int y, int z )
+ (ctor) CityInfo( string city, string building, int description, int x, int y, int z )
+ (ctor) CityInfo( string city, string building, int x, int y, int z, Map m )
+ (ctor) CityInfo( string city, string building, int description, int x, int y, int z, Map m )
+ string Building( get; set; )
+ string City( get; set; )
+ int Description( get; set; )
+ Point3D Location( get; set; )
+ Map Map( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ int Z( get; set; )
+ + diff --git a/Docs/types/CityMap.html b/Docs/types/CityMap.html new file mode 100644 index 0000000..5b4ee29 --- /dev/null +++ b/Docs/types/CityMap.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CityMap + + +

Back to Server.Items

+

CityMap : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) CityMap()
+ (ctor) CityMap( Serial serial )
+ int LabelNumber( get; )
+ virtual void CraftInit( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClaimAllEntry.html b/Docs/types/ClaimAllEntry.html new file mode 100644 index 0000000..6e8fa0f --- /dev/null +++ b/Docs/types/ClaimAllEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ClaimAllEntry + + +

Back to Server.Mobiles

+

(AnimalTrainer) - ClaimAllEntry : ContextMenuEntry

+ (ctor) ClaimAllEntry( AnimalTrainer trainer, Mobile from )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ClaimListGump.html b/Docs/types/ClaimListGump.html new file mode 100644 index 0000000..e140c3f --- /dev/null +++ b/Docs/types/ClaimListGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ClaimListGump + + +

Back to Server.Mobiles

+

(AnimalTrainer) - ClaimListGump : Gump

+ (ctor) ClaimListGump( AnimalTrainer trainer, Mobile from, List<BaseCreature> list )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/CleanseByFireSpell.html b/Docs/types/CleanseByFireSpell.html new file mode 100644 index 0000000..0903650 --- /dev/null +++ b/Docs/types/CleanseByFireSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CleanseByFireSpell + + +

Back to Server.Spells.Chivalry

+

CleanseByFireSpell : PaladinSpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) CleanseByFireSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/Cleanup.html b/Docs/types/Cleanup.html new file mode 100644 index 0000000..95f5de4 --- /dev/null +++ b/Docs/types/Cleanup.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Cleanup + + +

Back to Server.Misc

+

Cleanup

+ (static) void Initialize()
+ (static) bool IsBuggable( Item item )
+ (static) void Run()
+ (ctor) Cleanup()
+ + diff --git a/Docs/types/ClearWeaponAbility.html b/Docs/types/ClearWeaponAbility.html new file mode 100644 index 0000000..fba2e2a --- /dev/null +++ b/Docs/types/ClearWeaponAbility.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ClearWeaponAbility + + +

Back to Server.Network

+

ClearWeaponAbility : Packet

+ (ctor) ClearWeaponAbility()
+ + diff --git a/Docs/types/ClearanceException.html b/Docs/types/ClearanceException.html new file mode 100644 index 0000000..09e9b97 --- /dev/null +++ b/Docs/types/ClearanceException.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ClearanceException + + +

Back to Server

+

ClearanceException : AccessException, ISerializable, _Exception

+

Derived Types: ReadAccessException, WriteAccessException

+ (ctor) ClearanceException( Property property, AccessLevel playerAccess, AccessLevel neededAccess, string accessType )
+ AccessLevel NeededAccess( get; )
+ AccessLevel PlayerAccess( get; )
+ + diff --git a/Docs/types/Cleaver.html b/Docs/types/Cleaver.html new file mode 100644 index 0000000..9bb49c3 --- /dev/null +++ b/Docs/types/Cleaver.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Cleaver + + +

Back to Server.Items

+

Cleaver : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: ColdBlood

+ (ctor) Cleaver()
+ (ctor) Cleaver( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClientFlags.html b/Docs/types/ClientFlags.html new file mode 100644 index 0000000..ee08720 --- /dev/null +++ b/Docs/types/ClientFlags.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ClientFlags + + +

Back to Server

+

ClientFlags (Enum)

+ None = 0x00000000,
+ Felucca = 0x00000001,
+ Trammel = 0x00000002,
+ Ilshenar = 0x00000004,
+ Malas = 0x00000008,
+ Tokuno = 0x00000010,
+ TerMur = 0x00000020,
+ Unk1 = 0x00000040,
+ Unk2 = 0x00000080,
+ UOTD = 0x00000100
+ + diff --git a/Docs/types/ClientGump.html b/Docs/types/ClientGump.html new file mode 100644 index 0000000..9e8b9ec --- /dev/null +++ b/Docs/types/ClientGump.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ClientGump + + +

Back to Server.Gumps

+

ClientGump : Gump

+ (ctor) ClientGump( Mobile from, NetState state )
+ (ctor) ClientGump( Mobile from, NetState state, string initialText )
+ string Center( string text )
+ string Color( string text, int color )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ void Resend( Mobile to, RelayInfo info )
+ + diff --git a/Docs/types/ClientTarget.html b/Docs/types/ClientTarget.html new file mode 100644 index 0000000..8602ae4 --- /dev/null +++ b/Docs/types/ClientTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ClientTarget + + +

Back to Server.Commands

+

(CommandHandlers) - ClientTarget : Target

+ (ctor) ClientTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/ClientType.html b/Docs/types/ClientType.html new file mode 100644 index 0000000..71a4e75 --- /dev/null +++ b/Docs/types/ClientType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ClientType + + +

Back to Server

+

ClientType (Enum)

+ Regular = 0,
+ UOTD = 1,
+ God = 2,
+ SA = 3
+ + diff --git a/Docs/types/ClientVerification.html b/Docs/types/ClientVerification.html new file mode 100644 index 0000000..1022aec --- /dev/null +++ b/Docs/types/ClientVerification.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ClientVerification + + +

Back to Server.Misc

+

ClientVerification

+

Nested Types: (Anonymous-Type)--c__DisplayClass2, (Anonymous-Type)--c__DisplayClass7, OldClientResponse

+ (static) bool AllowGod( get; set; )
+ (static) bool AllowRegular( get; set; )
+ (static) bool AllowUOTD( get; set; )
+ (static) TimeSpan KickDelay( get; set; )
+ (static) ClientVersion Required( get; set; )
+ (static) void EventSink_ClientVersionReceived( ClientVersionReceivedArgs e )
+ (static) void Initialize()
+ (static) void SendAnnoyGump( Mobile m )
+ (ctor) ClientVerification()
+ + diff --git a/Docs/types/ClientVersion.html b/Docs/types/ClientVersion.html new file mode 100644 index 0000000..aba5210 --- /dev/null +++ b/Docs/types/ClientVersion.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - ClientVersion + + +

Back to Server

+

ClientVersion : IComparable, IComparer

+ (static) int Compare( ClientVersion a, ClientVersion b )
+ (static) bool IsNull( object x )
+ (ctor) ClientVersion( string fmt )
+ (ctor) ClientVersion( int maj, int min, int rev, int pat )
+ (ctor) ClientVersion( int maj, int min, int rev, int pat, ClientType type )
+ int Major( get; )
+ int Minor( get; )
+ int Patch( get; )
+ int Revision( get; )
+ string SourceString( get; )
+ ClientType Type( get; )
+ virtual int Compare( object x, object y )
+ virtual int CompareTo( object obj )
+ virtual bool Equals( object obj )
+ virtual int GetHashCode()
+ virtual string ToString()
+ + diff --git a/Docs/types/ClientVersionReceivedArgs.html b/Docs/types/ClientVersionReceivedArgs.html new file mode 100644 index 0000000..fc5b46b --- /dev/null +++ b/Docs/types/ClientVersionReceivedArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ClientVersionReceivedArgs + + +

Back to Server

+

ClientVersionReceivedArgs : EventArgs

+ (ctor) ClientVersionReceivedArgs( NetState state, ClientVersion cv )
+ NetState State( get; )
+ ClientVersion Version( get; )
+ + diff --git a/Docs/types/ClientVersionReceivedHandler.html b/Docs/types/ClientVersionReceivedHandler.html new file mode 100644 index 0000000..96b822b --- /dev/null +++ b/Docs/types/ClientVersionReceivedHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ClientVersionReceivedHandler + + +

Back to Server

+

ClientVersionReceivedHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ClientVersionReceivedHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ClientVersionReceivedArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ClientVersionReceivedArgs e )
+ + diff --git a/Docs/types/ClientVersionReq.html b/Docs/types/ClientVersionReq.html new file mode 100644 index 0000000..2116955 --- /dev/null +++ b/Docs/types/ClientVersionReq.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ClientVersionReq + + +

Back to Server.Network

+

ClientVersionReq : Packet

+ (ctor) ClientVersionReq()
+ + diff --git a/Docs/types/Cloak.html b/Docs/types/Cloak.html new file mode 100644 index 0000000..5755982 --- /dev/null +++ b/Docs/types/Cloak.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Cloak + + +

Back to Server.Items

+

Cloak : BaseCloak, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+ (ctor) Cloak()
+ (ctor) Cloak( Serial serial )
+ (ctor) Cloak( int hue )
+ int CurArcaneCharges( get; set; )
+ bool IsArcane( get; )
+ int MaxArcaneCharges( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Update()
+ + diff --git a/Docs/types/Clock.html b/Docs/types/Clock.html new file mode 100644 index 0000000..da5a390 --- /dev/null +++ b/Docs/types/Clock.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Clock + + +

Back to Server.Items

+

Clock : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: ClockLeft, ClockRight

+ (static) DateTime ServerStart( get; )
+ (static) MoonPhase GetMoonPhase( Map map, int x, int y )
+ (static) void GetTime( out int generalNumber, out string exactTime )
+ (static) void GetTime( Mobile from, out int generalNumber, out string exactTime )
+ (static) void GetTime( Map map, int x, int y, out int generalNumber, out string exactTime )
+ (static) void GetTime( Map map, int x, int y, out int hours, out int minutes )
+ (static) void GetTime( Map map, int x, int y, out int hours, out int minutes, out int totalMinutes )
+ (static) void Initialize()
+ (ctor) Clock()
+ (ctor) Clock( int itemID )
+ (ctor) Clock( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClockFrame.html b/Docs/types/ClockFrame.html new file mode 100644 index 0000000..6290dee --- /dev/null +++ b/Docs/types/ClockFrame.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ClockFrame + + +

Back to Server.Items

+

ClockFrame : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ClockFrame()
+ (ctor) ClockFrame( int amount )
+ (ctor) ClockFrame( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClockLeft.html b/Docs/types/ClockLeft.html new file mode 100644 index 0000000..b87ff97 --- /dev/null +++ b/Docs/types/ClockLeft.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ClockLeft + + +

Back to Server.Items

+

ClockLeft : Clock, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ClockLeft()
+ (ctor) ClockLeft( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClockParts.html b/Docs/types/ClockParts.html new file mode 100644 index 0000000..d5f5529 --- /dev/null +++ b/Docs/types/ClockParts.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ClockParts + + +

Back to Server.Items

+

ClockParts : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ClockParts()
+ (ctor) ClockParts( int amount )
+ (ctor) ClockParts( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClockRight.html b/Docs/types/ClockRight.html new file mode 100644 index 0000000..d8a49e6 --- /dev/null +++ b/Docs/types/ClockRight.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ClockRight + + +

Back to Server.Items

+

ClockRight : Clock, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ClockRight()
+ (ctor) ClockRight( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClockworkAssembly.html b/Docs/types/ClockworkAssembly.html new file mode 100644 index 0000000..4988343 --- /dev/null +++ b/Docs/types/ClockworkAssembly.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ClockworkAssembly + + +

Back to Server.Items

+

ClockworkAssembly : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ClockworkAssembly()
+ (ctor) ClockworkAssembly( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Clone.html b/Docs/types/Clone.html new file mode 100644 index 0000000..74b8986 --- /dev/null +++ b/Docs/types/Clone.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Clone + + +

Back to Server.Mobiles

+

Clone : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Clone( Serial serial )
+ (ctor) Clone( Mobile caster )
+ bool Commandable( get; )
+ bool DeleteCorpseOnDeath( get; )
+ BaseAI ForcedAI( get; )
+ bool IsDispellable( get; )
+ Item CloneItem( Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool IsHumanInTown()
+ virtual void OnAfterDelete()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CloneAI.html b/Docs/types/CloneAI.html new file mode 100644 index 0000000..f09bf9a --- /dev/null +++ b/Docs/types/CloneAI.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CloneAI + + +

Back to Server.Mobiles

+

CloneAI : BaseAI

+ (ctor) CloneAI( Clone m )
+ bool CanDetectHidden( get; )
+ virtual bool Think()
+ + diff --git a/Docs/types/CloseGump.html b/Docs/types/CloseGump.html new file mode 100644 index 0000000..8ae0e5d --- /dev/null +++ b/Docs/types/CloseGump.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CloseGump + + +

Back to Server.Network

+

CloseGump : Packet

+ (ctor) CloseGump( int typeID, int buttonID )
+ + diff --git a/Docs/types/CloseHelm.html b/Docs/types/CloseHelm.html new file mode 100644 index 0000000..7e213d7 --- /dev/null +++ b/Docs/types/CloseHelm.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - CloseHelm + + +

Back to Server.Items

+

CloseHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) CloseHelm()
+ (ctor) CloseHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CloseSecureTrade.html b/Docs/types/CloseSecureTrade.html new file mode 100644 index 0000000..b84c6ed --- /dev/null +++ b/Docs/types/CloseSecureTrade.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CloseSecureTrade + + +

Back to Server.Network

+

CloseSecureTrade : Packet

+ (ctor) CloseSecureTrade( Container cont )
+ + diff --git a/Docs/types/CloseTimer.html b/Docs/types/CloseTimer.html new file mode 100644 index 0000000..d951153 --- /dev/null +++ b/Docs/types/CloseTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CloseTimer + + +

Back to Server.Menus.Questions

+

(StuckMenu) - CloseTimer : Timer

+ (ctor) CloseTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/CloseWoundsSpell.html b/Docs/types/CloseWoundsSpell.html new file mode 100644 index 0000000..ef49ee3 --- /dev/null +++ b/Docs/types/CloseWoundsSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CloseWoundsSpell + + +

Back to Server.Spells.Chivalry

+

CloseWoundsSpell : PaladinSpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) CloseWoundsSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/ClosedBarrel.html b/Docs/types/ClosedBarrel.html new file mode 100644 index 0000000..5e80a26 --- /dev/null +++ b/Docs/types/ClosedBarrel.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ClosedBarrel + + +

Back to Server.Items

+

ClosedBarrel : TrapableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable

+ (ctor) ClosedBarrel()
+ (ctor) ClosedBarrel( Serial serial )
+ int DefaultGumpID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cloth.html b/Docs/types/Cloth.html new file mode 100644 index 0000000..6868f77 --- /dev/null +++ b/Docs/types/Cloth.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Cloth + + +

Back to Server.Items

+

Cloth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IDyable, ICommodity

+ (ctor) Cloth()
+ (ctor) Cloth( Serial serial )
+ (ctor) Cloth( int amount )
+ double DefaultWeight( get; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnSingleClick( Mobile from )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClothNinjaHood.html b/Docs/types/ClothNinjaHood.html new file mode 100644 index 0000000..684b777 --- /dev/null +++ b/Docs/types/ClothNinjaHood.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - ClothNinjaHood + + +

Back to Server.Items

+

ClothNinjaHood : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: BlackLotusHood

+ (ctor) ClothNinjaHood()
+ (ctor) ClothNinjaHood( Serial serial )
+ (ctor) ClothNinjaHood( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClothNinjaJacket.html b/Docs/types/ClothNinjaJacket.html new file mode 100644 index 0000000..ca2109e --- /dev/null +++ b/Docs/types/ClothNinjaJacket.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ClothNinjaJacket + + +

Back to Server.Items

+

ClothNinjaJacket : BaseShirt, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ClothNinjaJacket()
+ (ctor) ClothNinjaJacket( int hue )
+ (ctor) ClothNinjaJacket( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClothingBlessDeed.html b/Docs/types/ClothingBlessDeed.html new file mode 100644 index 0000000..6e0aa4a --- /dev/null +++ b/Docs/types/ClothingBlessDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ClothingBlessDeed + + +

Back to Server.Items

+

ClothingBlessDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ClothingBlessDeed()
+ (ctor) ClothingBlessDeed( Serial serial )
+ string DefaultName( get; )
+ bool DisplayLootType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClothingBlessTarget.html b/Docs/types/ClothingBlessTarget.html new file mode 100644 index 0000000..a662d1b --- /dev/null +++ b/Docs/types/ClothingBlessTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ClothingBlessTarget + + +

Back to Server.Items

+

ClothingBlessTarget : Target

+ (ctor) ClothingBlessTarget( ClothingBlessDeed deed )
+ virtual void OnTarget( Mobile from, object target )
+ + diff --git a/Docs/types/ClothingQuality.html b/Docs/types/ClothingQuality.html new file mode 100644 index 0000000..18588fb --- /dev/null +++ b/Docs/types/ClothingQuality.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ClothingQuality + + +

Back to Server.Items

+

ClothingQuality (Enum)

+ Low = 0,
+ Regular = 1,
+ Exceptional = 2
+ + diff --git a/Docs/types/Club.html b/Docs/types/Club.html new file mode 100644 index 0000000..95d9d05 --- /dev/null +++ b/Docs/types/Club.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Club + + +

Back to Server.Items

+

Club : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: CavortingClub

+ (ctor) Club()
+ (ctor) Club( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClumsyScroll.html b/Docs/types/ClumsyScroll.html new file mode 100644 index 0000000..6a67c65 --- /dev/null +++ b/Docs/types/ClumsyScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ClumsyScroll + + +

Back to Server.Items

+

ClumsyScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ClumsyScroll()
+ (ctor) ClumsyScroll( int amount )
+ (ctor) ClumsyScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ClumsySpell.html b/Docs/types/ClumsySpell.html new file mode 100644 index 0000000..114a256 --- /dev/null +++ b/Docs/types/ClumsySpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ClumsySpell + + +

Back to Server.Spells.First

+

ClumsySpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) ClumsySpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/ClumsyWand.html b/Docs/types/ClumsyWand.html new file mode 100644 index 0000000..891eef7 --- /dev/null +++ b/Docs/types/ClumsyWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ClumsyWand + + +

Back to Server.Items

+

ClumsyWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ClumsyWand()
+ (ctor) ClumsyWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CoMWarHorse.html b/Docs/types/CoMWarHorse.html new file mode 100644 index 0000000..007d465 --- /dev/null +++ b/Docs/types/CoMWarHorse.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CoMWarHorse + + +

Back to Server.Mobiles

+

CoMWarHorse : BaseWarHorse, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) CoMWarHorse()
+ (ctor) CoMWarHorse( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CoOwnerTarget.html b/Docs/types/CoOwnerTarget.html new file mode 100644 index 0000000..4193e8b --- /dev/null +++ b/Docs/types/CoOwnerTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CoOwnerTarget + + +

Back to Server.Multis

+

CoOwnerTarget : Target

+ (ctor) CoOwnerTarget( bool add, BaseHouse house )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/Coal.html b/Docs/types/Coal.html new file mode 100644 index 0000000..9a5a88d --- /dev/null +++ b/Docs/types/Coal.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Coal + + +

Back to Server.Items

+

Coal : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Coal()
+ (ctor) Coal( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cobbler.html b/Docs/types/Cobbler.html new file mode 100644 index 0000000..5cc93e5 --- /dev/null +++ b/Docs/types/Cobbler.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Cobbler + + +

Back to Server.Mobiles

+

Cobbler : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Cobbler()
+ (ctor) Cobbler( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CobblestonesFloor.html b/Docs/types/CobblestonesFloor.html new file mode 100644 index 0000000..cbdd421 --- /dev/null +++ b/Docs/types/CobblestonesFloor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CobblestonesFloor + + +

Back to Server.Items

+

CobblestonesFloor : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CobblestonesFloor()
+ (ctor) CobblestonesFloor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Coconut.html b/Docs/types/Coconut.html new file mode 100644 index 0000000..0b0acc0 --- /dev/null +++ b/Docs/types/Coconut.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Coconut + + +

Back to Server.Items

+

Coconut : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Coconut()
+ (ctor) Coconut( int amount )
+ (ctor) Coconut( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CocoonArtifact.html b/Docs/types/CocoonArtifact.html new file mode 100644 index 0000000..9bbf8fb --- /dev/null +++ b/Docs/types/CocoonArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CocoonArtifact + + +

Back to Server.Items

+

CocoonArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CocoonArtifact()
+ (ctor) CocoonArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ColdBlood.html b/Docs/types/ColdBlood.html new file mode 100644 index 0000000..93116f0 --- /dev/null +++ b/Docs/types/ColdBlood.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ColdBlood + + +

Back to Server.Items

+

ColdBlood : Cleaver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ColdBlood()
+ (ctor) ColdBlood( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ColdForgedBlade.html b/Docs/types/ColdForgedBlade.html new file mode 100644 index 0000000..96b4432 --- /dev/null +++ b/Docs/types/ColdForgedBlade.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ColdForgedBlade + + +

Back to Server.Items

+

ColdForgedBlade : ElvenSpellblade, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ColdForgedBlade()
+ (ctor) ColdForgedBlade( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CollectBonesObjective.html b/Docs/types/CollectBonesObjective.html new file mode 100644 index 0000000..1f2680e --- /dev/null +++ b/Docs/types/CollectBonesObjective.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CollectBonesObjective + + +

Back to Server.Engines.Quests.Doom

+

CollectBonesObjective : QuestObjective

+ (ctor) CollectBonesObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual void OnComplete()
+ virtual void RenderMessage( BaseQuestGump gump )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/CollectGoldPrompt.html b/Docs/types/CollectGoldPrompt.html new file mode 100644 index 0000000..5984b61 --- /dev/null +++ b/Docs/types/CollectGoldPrompt.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CollectGoldPrompt + + +

Back to Server.Mobiles

+

(PlayerVendor) - CollectGoldPrompt : Prompt

+ (ctor) CollectGoldPrompt( PlayerVendor vendor )
+ void GiveGold( Mobile to, int amount )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/CollectRentEntry.html b/Docs/types/CollectRentEntry.html new file mode 100644 index 0000000..91c4c36 --- /dev/null +++ b/Docs/types/CollectRentEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CollectRentEntry + + +

Back to Server.Mobiles

+

(RentedVendor) - CollectRentEntry : ContextMenuEntry

+ (ctor) CollectRentEntry( RentedVendor vendor )
+ virtual void OnClick()
+ + diff --git a/Docs/types/CollectorQuest.html b/Docs/types/CollectorQuest.html new file mode 100644 index 0000000..61699d0 --- /dev/null +++ b/Docs/types/CollectorQuest.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - CollectorQuest + + +

Back to Server.Engines.Quests.Collector

+

CollectorQuest : QuestSystem

+ (ctor) CollectorQuest()
+ (ctor) CollectorQuest( PlayerMobile from )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual void Decline()
+ + diff --git a/Docs/types/ColoredAnvil.html b/Docs/types/ColoredAnvil.html new file mode 100644 index 0000000..b61d608 --- /dev/null +++ b/Docs/types/ColoredAnvil.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ColoredAnvil + + +

Back to Server.Items

+

ColoredAnvil : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ColoredAnvil()
+ (ctor) ColoredAnvil( int hue )
+ (ctor) ColoredAnvil( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ColumnInfo.html b/Docs/types/ColumnInfo.html new file mode 100644 index 0000000..6826924 --- /dev/null +++ b/Docs/types/ColumnInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ColumnInfo + + +

Back to Server.Multis

+

(Spreadsheet) - ColumnInfo

+ (ctor) ColumnInfo( int dataIndex, string type, string name )
+ + diff --git a/Docs/types/CombatTimer.html b/Docs/types/CombatTimer.html new file mode 100644 index 0000000..10e0e3c --- /dev/null +++ b/Docs/types/CombatTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CombatTimer + + +

Back to Server

+

(Mobile) - CombatTimer : Timer

+ (ctor) CombatTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ComboEntry.html b/Docs/types/ComboEntry.html new file mode 100644 index 0000000..ff31d54 --- /dev/null +++ b/Docs/types/ComboEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ComboEntry + + +

Back to Server.Factions

+

ComboEntry

+ (ctor) ComboEntry( Type spell )
+ (ctor) ComboEntry( Type spell, int chance )
+ (ctor) ComboEntry( Type spell, int chance, TimeSpan hold )
+ int Chance( get; )
+ TimeSpan Hold( get; )
+ Type Spell( get; )
+ + diff --git a/Docs/types/CommandEntry.html b/Docs/types/CommandEntry.html new file mode 100644 index 0000000..45445a2 --- /dev/null +++ b/Docs/types/CommandEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CommandEntry + + +

Back to Server.Commands

+

CommandEntry : IComparable

+ (ctor) CommandEntry( string command, CommandEventHandler handler, AccessLevel accessLevel )
+ AccessLevel AccessLevel( get; )
+ string Command( get; )
+ CommandEventHandler Handler( get; )
+ virtual int CompareTo( object obj )
+ + diff --git a/Docs/types/CommandEntrySorter.html b/Docs/types/CommandEntrySorter.html new file mode 100644 index 0000000..2830c87 --- /dev/null +++ b/Docs/types/CommandEntrySorter.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CommandEntrySorter + + +

Back to Server.Commands

+

(Docs) - CommandEntrySorter : IComparer<DocCommandEntry>

+ (ctor) CommandEntrySorter()
+ virtual int Compare( DocCommandEntry a, DocCommandEntry b )
+ + diff --git a/Docs/types/CommandEventArgs.html b/Docs/types/CommandEventArgs.html new file mode 100644 index 0000000..61b09a7 --- /dev/null +++ b/Docs/types/CommandEventArgs.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - CommandEventArgs + + +

Back to Server.Commands

+

CommandEventArgs : EventArgs

+ (ctor) CommandEventArgs( Mobile mobile, string command, string argString, string[] arguments )
+ string ArgString( get; )
+ string[] Arguments( get; )
+ string Command( get; )
+ int Length( get; )
+ Mobile Mobile( get; )
+ bool GetBoolean( int index )
+ double GetDouble( int index )
+ int GetInt32( int index )
+ string GetString( int index )
+ TimeSpan GetTimeSpan( int index )
+ + diff --git a/Docs/types/CommandEventHandler.html b/Docs/types/CommandEventHandler.html new file mode 100644 index 0000000..e7f1383 --- /dev/null +++ b/Docs/types/CommandEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CommandEventHandler + + +

Back to Server.Commands

+

CommandEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) CommandEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( CommandEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( CommandEventArgs e )
+ + diff --git a/Docs/types/CommandHandlers.html b/Docs/types/CommandHandlers.html new file mode 100644 index 0000000..ace436d --- /dev/null +++ b/Docs/types/CommandHandlers.html @@ -0,0 +1,44 @@ + + + RunUO Documentation - Class Overview - CommandHandlers + + +

Back to Server.Commands

+

CommandHandlers

+

Nested Types: BankTarget, ClientTarget, DismountTarget, StuckMenuTarget, ViewEqTarget

+ (static) void Animate_OnCommand( CommandEventArgs e )
+ (static) void APN_OnCommand( CommandEventArgs e )
+ (static) void BackgroundSave_OnCommand( CommandEventArgs e )
+ (static) void Bank_OnCommand( CommandEventArgs e )
+ (static) void BroadcastMessage( AccessLevel ac, int hue, string message )
+ (static) void BroadcastMessage_OnCommand( CommandEventArgs e )
+ (static) void Cast_OnCommand( CommandEventArgs e )
+ (static) void ClearFacet_OnCommand( CommandEventArgs e )
+ (static) void Client_OnCommand( CommandEventArgs e )
+ (static) void DeleteList_Callback( Mobile from, bool okay, object state )
+ (static) void DropHolding_OnCommand( CommandEventArgs e )
+ (static) void DropHolding_OnTarget( Mobile from, object obj )
+ (static) void Echo_OnCommand( CommandEventArgs e )
+ (static) bool FixMap( ref Map map, ref Point3D loc, Mobile m )
+ (static) bool FixMap( ref Map map, ref Point3D loc, Item item )
+ (static) void GetFollowers_OnCommand( CommandEventArgs e )
+ (static) void GetFollowers_OnTarget( Mobile from, object obj )
+ (static) void Go_OnCommand( CommandEventArgs e )
+ (static) void Help_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (static) void Light_OnCommand( CommandEventArgs e )
+ (static) void Move_OnCommand( CommandEventArgs e )
+ (static) void PlaySound( Mobile m, int index, bool toAll )
+ (static) void Register( string command, AccessLevel access, CommandEventHandler handler )
+ (static) void ReplaceBankers_OnCommand( CommandEventArgs e )
+ (static) void Save_OnCommand( CommandEventArgs e )
+ (static) void Sound_OnCommand( CommandEventArgs e )
+ (static) void SpeedBoost_OnCommand( CommandEventArgs e )
+ (static) void StaffMessage_OnCommand( CommandEventArgs e )
+ (static) void Stats_OnCommand( CommandEventArgs e )
+ (static) void Stuck_OnCommand( CommandEventArgs e )
+ (static) void ViewEquip_OnCommand( CommandEventArgs e )
+ (static) void Where_OnCommand( CommandEventArgs e )
+ (ctor) CommandHandlers()
+ + diff --git a/Docs/types/CommandInfoGump.html b/Docs/types/CommandInfoGump.html new file mode 100644 index 0000000..8d01463 --- /dev/null +++ b/Docs/types/CommandInfoGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CommandInfoGump + + +

Back to Server.Commands

+

(HelpInfo) - CommandInfoGump : Gump

+ (ctor) CommandInfoGump( DocCommandEntry info )
+ (ctor) CommandInfoGump( DocCommandEntry info, int width, int height )
+ string Center( string text )
+ string Color( string text, int color )
+ + diff --git a/Docs/types/CommandListGump.html b/Docs/types/CommandListGump.html new file mode 100644 index 0000000..b5adc5d --- /dev/null +++ b/Docs/types/CommandListGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CommandListGump + + +

Back to Server.Commands

+

(HelpInfo) - CommandListGump : BaseGridGump

+ (ctor) CommandListGump( int page, Mobile from, List<DocCommandEntry> list )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/CommandLogging.html b/Docs/types/CommandLogging.html new file mode 100644 index 0000000..88b3b64 --- /dev/null +++ b/Docs/types/CommandLogging.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - CommandLogging + + +

Back to Server.Commands

+

CommandLogging

+ (static) bool Enabled( get; set; )
+ (static) StreamWriter Output( get; )
+ (static) void AppendPath( ref string path, string toAppend )
+ (static) void EventSink_Command( CommandEventArgs e )
+ (static) object Format( object o )
+ (static) void Initialize()
+ (static) void LogChangeProperty( Mobile from, object o, string name, string value )
+ (static) string Safe( string ip )
+ (static) void WriteLine( Mobile from, string text )
+ (static) void WriteLine( Mobile from, string format, object[] args )
+ (ctor) CommandLogging()
+ + diff --git a/Docs/types/CommandPropertyAttribute.html b/Docs/types/CommandPropertyAttribute.html new file mode 100644 index 0000000..b04b492 --- /dev/null +++ b/Docs/types/CommandPropertyAttribute.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CommandPropertyAttribute + + +

Back to Server

+

CommandPropertyAttribute : Attribute, _Attribute

+ (ctor) CommandPropertyAttribute( AccessLevel level )
+ (ctor) CommandPropertyAttribute( AccessLevel level, bool readOnly )
+ (ctor) CommandPropertyAttribute( AccessLevel readLevel, AccessLevel writeLevel )
+ AccessLevel ReadLevel( get; )
+ bool ReadOnly( get; )
+ AccessLevel WriteLevel( get; )
+ + diff --git a/Docs/types/CommandSupport.html b/Docs/types/CommandSupport.html new file mode 100644 index 0000000..baa28a0 --- /dev/null +++ b/Docs/types/CommandSupport.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - CommandSupport + + +

Back to Server.Commands.Generic

+

CommandSupport (Enum)

+ Single = 0x00000001,
+ Global = 0x00000002,
+ Online = 0x00000004,
+ Multi = 0x00000008,
+ Simple = 0x00000009,
+ Area = 0x00000010,
+ Self = 0x00000020,
+ Region = 0x00000040,
+ AllNPCs = 0x0000005B,
+ AllMobiles = 0x0000007F,
+ Contained = 0x00000080,
+ AllItems = 0x0000009B,
+ Complex = 0x000000D6,
+ All = 0x000000FF
+ + diff --git a/Docs/types/CommandSystem.html b/Docs/types/CommandSystem.html new file mode 100644 index 0000000..a584296 --- /dev/null +++ b/Docs/types/CommandSystem.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CommandSystem + + +

Back to Server.Commands

+

CommandSystem

+ (static) AccessLevel BadCommandIgnoreLevel( get; set; )
+ (static) Dictionary<String,CommandEntry> Entries( get; )
+ (static) string Prefix( get; set; )
+ (static) bool Handle( Mobile from, string text )
+ (static) bool Handle( Mobile from, string text, MessageType type )
+ (static) void Register( string command, AccessLevel access, CommandEventHandler handler )
+ (static) string[] Split( string value )
+ + diff --git a/Docs/types/CommodityDeed.html b/Docs/types/CommodityDeed.html new file mode 100644 index 0000000..37ce59a --- /dev/null +++ b/Docs/types/CommodityDeed.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - CommodityDeed + + +

Back to Server.Items

+

CommodityDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) CommodityDeed()
+ (ctor) CommodityDeed( Serial serial )
+ (ctor) CommodityDeed( Item commodity )
+ Item Commodity( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ bool SetCommodity( Item item )
+ + diff --git a/Docs/types/CommodityDeedBox.html b/Docs/types/CommodityDeedBox.html new file mode 100644 index 0000000..918ce81 --- /dev/null +++ b/Docs/types/CommodityDeedBox.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CommodityDeedBox + + +

Back to Server.Items

+

CommodityDeedBox : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (static) CommodityDeedBox Find( Item deed )
+ (ctor) CommodityDeedBox()
+ (ctor) CommodityDeedBox( Serial serial )
+ int DefaultGumpID( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CompactInfo.html b/Docs/types/CompactInfo.html new file mode 100644 index 0000000..fb1aadd --- /dev/null +++ b/Docs/types/CompactInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CompactInfo + + +

Back to Server

+

(Item) - CompactInfo

+ (ctor) CompactInfo()
+ + diff --git a/Docs/types/ComparisonCondition.html b/Docs/types/ComparisonCondition.html new file mode 100644 index 0000000..a2df558 --- /dev/null +++ b/Docs/types/ComparisonCondition.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ComparisonCondition + + +

Back to Server.Commands.Generic

+

ComparisonCondition : PropertyCondition, ICondition

+

Nested Types: (Anonymous-Type)--c__DisplayClass1

+ (ctor) ComparisonCondition( Property property, bool not, ComparisonOperator op, object value )
+ virtual void Compile( MethodEmitter emitter )
+ virtual void Construct( TypeBuilder typeBuilder, ILGenerator il, int index )
+ + diff --git a/Docs/types/ComparisonOperator.html b/Docs/types/ComparisonOperator.html new file mode 100644 index 0000000..e3e0360 --- /dev/null +++ b/Docs/types/ComparisonOperator.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ComparisonOperator + + +

Back to Server.Commands.Generic

+

ComparisonOperator (Enum)

+ Equal = 0,
+ NotEqual = 1,
+ Greater = 2,
+ GreaterEqual = 3,
+ Lesser = 4,
+ LesserEqual = 5
+ + diff --git a/Docs/types/CompassionVirtue.html b/Docs/types/CompassionVirtue.html new file mode 100644 index 0000000..5854c0a --- /dev/null +++ b/Docs/types/CompassionVirtue.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CompassionVirtue + + +

Back to Server

+

CompassionVirtue

+ (static) void CheckAtrophy( Mobile from )
+ (static) void Initialize()
+ (static) void OnVirtueUsed( Mobile from )
+ (ctor) CompassionVirtue()
+ + diff --git a/Docs/types/Compiler.html b/Docs/types/Compiler.html new file mode 100644 index 0000000..2a540ba --- /dev/null +++ b/Docs/types/Compiler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Compiler + + +

Back to Server

+

(ScriptCompiler) - Compiler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) Compiler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( bool debug, AsyncCallback callback, object object )
+ virtual CompilerResults EndInvoke( IAsyncResult result )
+ virtual CompilerResults Invoke( bool debug )
+ + diff --git a/Docs/types/ComponentVerification.html b/Docs/types/ComponentVerification.html new file mode 100644 index 0000000..199a14f --- /dev/null +++ b/Docs/types/ComponentVerification.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ComponentVerification + + +

Back to Server.Multis

+

ComponentVerification

+ (ctor) ComponentVerification()
+ bool CheckValidity( int val )
+ int[] CreateTable( int length )
+ bool IsItemValid( int itemID )
+ bool IsMultiValid( int multiID )
+ void LoadItems( string path, string[] itemColumns )
+ void LoadMultis( string path, string[] multiColumns )
+ void LoadSpreadsheet( int[] table, string path, string[] tileColumns )
+ + diff --git a/Docs/types/CompositeBow.html b/Docs/types/CompositeBow.html new file mode 100644 index 0000000..dad7679 --- /dev/null +++ b/Docs/types/CompositeBow.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - CompositeBow + + +

Back to Server.Items

+

CompositeBow : BaseRanged, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) CompositeBow()
+ (ctor) CompositeBow( Serial serial )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefMaxRange( get; )
+ int EffectID( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Compression.html b/Docs/types/Compression.html new file mode 100644 index 0000000..5e068a2 --- /dev/null +++ b/Docs/types/Compression.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Compression + + +

Back to Server.Network

+

Compression

+ (static) void Compress( byte[] input, int length, out byte[] output, out int outputLength )
+ (static) byte[] Compress( byte[] input, int offset, int count, ref int length )
+ (static) ZLibError Pack( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ (static) ZLibError Pack( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ (static) ZLibError Unpack( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ + diff --git a/Docs/types/Compressor32.html b/Docs/types/Compressor32.html new file mode 100644 index 0000000..bd5ebf1 --- /dev/null +++ b/Docs/types/Compressor32.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Compressor32 + + +

Back to Server.Network

+

Compressor32 : ICompressor

+ (static) ZLibError compress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ (static) ZLibError compress2( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ (static) ZLibError uncompress( byte[] dest, ref int destLen, byte[] source, int sourceLen )
+ (static) string zlibVersion()
+ (ctor) Compressor32()
+ string Version( get; )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ virtual ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ + diff --git a/Docs/types/Compressor64.html b/Docs/types/Compressor64.html new file mode 100644 index 0000000..7c71a25 --- /dev/null +++ b/Docs/types/Compressor64.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Compressor64 + + +

Back to Server.Network

+

Compressor64 : ICompressor

+ (static) ZLibError compress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ (static) ZLibError compress2( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ (static) ZLibError uncompress( byte[] dest, ref int destLen, byte[] source, int sourceLen )
+ (static) string zlibVersion()
+ (ctor) Compressor64()
+ string Version( get; )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ virtual ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ + diff --git a/Docs/types/CompressorUnix32.html b/Docs/types/CompressorUnix32.html new file mode 100644 index 0000000..302b714 --- /dev/null +++ b/Docs/types/CompressorUnix32.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CompressorUnix32 + + +

Back to Server.Network

+

CompressorUnix32 : ICompressor

+ (static) ZLibError compress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ (static) ZLibError compress2( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ (static) ZLibError uncompress( byte[] dest, ref int destLen, byte[] source, int sourceLen )
+ (static) string zlibVersion()
+ (ctor) CompressorUnix32()
+ string Version( get; )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ virtual ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ + diff --git a/Docs/types/CompressorUnix64.html b/Docs/types/CompressorUnix64.html new file mode 100644 index 0000000..4ec41c9 --- /dev/null +++ b/Docs/types/CompressorUnix64.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CompressorUnix64 + + +

Back to Server.Network

+

CompressorUnix64 : ICompressor

+ (static) ZLibError compress( byte[] dest, ref ulong destLength, byte[] source, int sourceLength )
+ (static) ZLibError compress2( byte[] dest, ref ulong destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ (static) ZLibError uncompress( byte[] dest, ref ulong destLen, byte[] source, int sourceLen )
+ (static) string zlibVersion()
+ (ctor) CompressorUnix64()
+ string Version( get; )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ virtual ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ + diff --git a/Docs/types/ConcussionBlow.html b/Docs/types/ConcussionBlow.html new file mode 100644 index 0000000..4ae7be3 --- /dev/null +++ b/Docs/types/ConcussionBlow.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ConcussionBlow + + +

Back to Server.Items

+

ConcussionBlow : WeaponAbility

+ (ctor) ConcussionBlow()
+ int BaseMana( get; )
+ virtual bool OnBeforeDamage( Mobile attacker, Mobile defender )
+ + diff --git a/Docs/types/ConditionCommand.html b/Docs/types/ConditionCommand.html new file mode 100644 index 0000000..1da2e56 --- /dev/null +++ b/Docs/types/ConditionCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConditionCommand + + +

Back to Server.Commands.Generic

+

ConditionCommand : BaseCommand

+ (ctor) ConditionCommand()
+ virtual void ExecuteList( CommandEventArgs e, ArrayList list )
+ + diff --git a/Docs/types/ConditionalCompiler.html b/Docs/types/ConditionalCompiler.html new file mode 100644 index 0000000..13456b1 --- /dev/null +++ b/Docs/types/ConditionalCompiler.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ConditionalCompiler + + +

Back to Server.Commands.Generic

+

ConditionalCompiler

+ (static) IConditional Compile( AssemblyEmitter assembly, Type objectType, ICondition[] conditions, int index )
+ + diff --git a/Docs/types/Confidence.html b/Docs/types/Confidence.html new file mode 100644 index 0000000..de47f64 --- /dev/null +++ b/Docs/types/Confidence.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Confidence + + +

Back to Server.Spells.Bushido

+

Confidence : SamuraiSpell, ISpell

+

Nested Types: InternalTimer, RegenTimer

+ (static) void BeginConfidence( Mobile m )
+ (static) void BeginRegenerating( Mobile m )
+ (static) void EndConfidence( Mobile m )
+ (static) bool IsConfident( Mobile m )
+ (static) bool IsRegenerating( Mobile m )
+ (static) void StopRegenerating( Mobile m )
+ (ctor) Confidence( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnBeginCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/Config.html b/Docs/types/Config.html new file mode 100644 index 0000000..ad26725 --- /dev/null +++ b/Docs/types/Config.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - Config + + +

Back to Server.Engines.MyRunUO

+

Config

+ (static) string CompileConnectionString()
+ (ctor) Config()
+ + diff --git a/Docs/types/ConfirmBreakCrystalGump.html b/Docs/types/ConfirmBreakCrystalGump.html new file mode 100644 index 0000000..2c52ae1 --- /dev/null +++ b/Docs/types/ConfirmBreakCrystalGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ConfirmBreakCrystalGump + + +

Back to Server.Gumps

+

ConfirmBreakCrystalGump : BaseConfirmGump

+ (ctor) ConfirmBreakCrystalGump( BaseImprisonedMobile item )
+ int LabelNumber( get; )
+ virtual void Confirm( Mobile from )
+ + diff --git a/Docs/types/ConfirmCommitGump.html b/Docs/types/ConfirmCommitGump.html new file mode 100644 index 0000000..cdd13f3 --- /dev/null +++ b/Docs/types/ConfirmCommitGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConfirmCommitGump + + +

Back to Server.Multis

+

ConfirmCommitGump : Gump

+ (ctor) ConfirmCommitGump( Mobile from, HouseFoundation foundation, int bankBalance, int oldPrice, int newPrice )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmDryDockGump.html b/Docs/types/ConfirmDryDockGump.html new file mode 100644 index 0000000..020e99c --- /dev/null +++ b/Docs/types/ConfirmDryDockGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConfirmDryDockGump + + +

Back to Server.Multis

+

ConfirmDryDockGump : Gump

+ (ctor) ConfirmDryDockGump( Mobile from, BaseBoat boat )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmGump.html b/Docs/types/ConfirmGump.html new file mode 100644 index 0000000..9299f33 --- /dev/null +++ b/Docs/types/ConfirmGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ConfirmGump + + +

Back to Server.Items

+

(WeaponEngravingTool) - ConfirmGump : Gump

+

Nested Types: Buttons

+ (ctor) ConfirmGump( WeaponEngravingTool engraver, Mobile guildmaster )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmHeritageGump.html b/Docs/types/ConfirmHeritageGump.html new file mode 100644 index 0000000..5c1ded6 --- /dev/null +++ b/Docs/types/ConfirmHeritageGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ConfirmHeritageGump + + +

Back to Server.Gumps

+

ConfirmHeritageGump : Gump

+

Nested Types: Buttons

+ (ctor) ConfirmHeritageGump( HeritageToken token, Type[] selected, int cliloc )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmHouseResize.html b/Docs/types/ConfirmHouseResize.html new file mode 100644 index 0000000..4732e74 --- /dev/null +++ b/Docs/types/ConfirmHouseResize.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConfirmHouseResize + + +

Back to Server.Gumps

+

ConfirmHouseResize : Gump

+ (ctor) ConfirmHouseResize( Mobile mobile, BaseHouse house )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmReleaseGump.html b/Docs/types/ConfirmReleaseGump.html new file mode 100644 index 0000000..5cf4acf --- /dev/null +++ b/Docs/types/ConfirmReleaseGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConfirmReleaseGump + + +

Back to Server.Gumps

+

ConfirmReleaseGump : Gump

+ (ctor) ConfirmReleaseGump( Mobile from, BaseCreature pet )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmRemovalGump.html b/Docs/types/ConfirmRemovalGump.html new file mode 100644 index 0000000..9ad3fb5 --- /dev/null +++ b/Docs/types/ConfirmRemovalGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConfirmRemovalGump + + +

Back to Server.Items

+

(SoulStone) - ConfirmRemovalGump : Gump

+ (ctor) ConfirmRemovalGump( SoulStone stone )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmSkillGump.html b/Docs/types/ConfirmSkillGump.html new file mode 100644 index 0000000..eb5f0ef --- /dev/null +++ b/Docs/types/ConfirmSkillGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConfirmSkillGump + + +

Back to Server.Items

+

(SoulStone) - ConfirmSkillGump : Gump

+ (ctor) ConfirmSkillGump( SoulStone stone, Skill skill )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmTransferGump.html b/Docs/types/ConfirmTransferGump.html new file mode 100644 index 0000000..faad567 --- /dev/null +++ b/Docs/types/ConfirmTransferGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConfirmTransferGump + + +

Back to Server.Items

+

(SoulStone) - ConfirmTransferGump : Gump

+ (ctor) ConfirmTransferGump( SoulStone stone, Mobile from )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ConfirmationMoongate.html b/Docs/types/ConfirmationMoongate.html new file mode 100644 index 0000000..e02fb77 --- /dev/null +++ b/Docs/types/ConfirmationMoongate.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - ConfirmationMoongate + + +

Back to Server.Items

+

ConfirmationMoongate : Moongate, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ConfirmationMoongate()
+ (ctor) ConfirmationMoongate( Serial serial )
+ (ctor) ConfirmationMoongate( Point3D target, Map targetMap )
+ int GumpHeight( get; set; )
+ int GumpWidth( get; set; )
+ int MessageColor( get; set; )
+ int MessageNumber( get; set; )
+ string MessageString( get; set; )
+ int TitleColor( get; set; )
+ int TitleNumber( get; set; )
+ virtual void BeginConfirmation( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ virtual void Warning_Callback( Mobile from, bool okay, object state )
+ + diff --git a/Docs/types/ConflagrationPotion.html b/Docs/types/ConflagrationPotion.html new file mode 100644 index 0000000..2b3750f --- /dev/null +++ b/Docs/types/ConflagrationPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ConflagrationPotion + + +

Back to Server.Items

+

ConflagrationPotion : BaseConflagrationPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) ConflagrationPotion()
+ (ctor) ConflagrationPotion( Serial serial )
+ int LabelNumber( get; )
+ int MaxDamage( get; )
+ int MinDamage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ConfusionBlastPotion.html b/Docs/types/ConfusionBlastPotion.html new file mode 100644 index 0000000..181ffd7 --- /dev/null +++ b/Docs/types/ConfusionBlastPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ConfusionBlastPotion + + +

Back to Server.Items

+

ConfusionBlastPotion : BaseConfusionBlastPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) ConfusionBlastPotion()
+ (ctor) ConfusionBlastPotion( Serial serial )
+ int LabelNumber( get; )
+ int Radius( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ConnectedEventArgs.html b/Docs/types/ConnectedEventArgs.html new file mode 100644 index 0000000..f75608c --- /dev/null +++ b/Docs/types/ConnectedEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConnectedEventArgs + + +

Back to Server

+

ConnectedEventArgs : EventArgs

+ (ctor) ConnectedEventArgs( Mobile m )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/ConnectedEventHandler.html b/Docs/types/ConnectedEventHandler.html new file mode 100644 index 0000000..32d5aa2 --- /dev/null +++ b/Docs/types/ConnectedEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ConnectedEventHandler + + +

Back to Server

+

ConnectedEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ConnectedEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ConnectedEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ConnectedEventArgs e )
+ + diff --git a/Docs/types/ConsecrateWeaponSpell.html b/Docs/types/ConsecrateWeaponSpell.html new file mode 100644 index 0000000..4111ee1 --- /dev/null +++ b/Docs/types/ConsecrateWeaponSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ConsecrateWeaponSpell + + +

Back to Server.Spells.Chivalry

+

ConsecrateWeaponSpell : PaladinSpell, ISpell

+

Nested Types: ExpireTimer

+ (ctor) ConsecrateWeaponSpell( Mobile caster, Item scroll )
+ bool BlocksMovement( get; )
+ TimeSpan CastDelayBase( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/ConsoleData.html b/Docs/types/ConsoleData.html new file mode 100644 index 0000000..516235c --- /dev/null +++ b/Docs/types/ConsoleData.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ConsoleData + + +

Back to Server.RemoteAdmin

+

ConsoleData : Packet

+ (ctor) ConsoleData( char ch )
+ (ctor) ConsoleData( string str )
+ + diff --git a/Docs/types/ConsoleEventHandler.html b/Docs/types/ConsoleEventHandler.html new file mode 100644 index 0000000..0dd98c9 --- /dev/null +++ b/Docs/types/ConsoleEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ConsoleEventHandler + + +

Back to Server

+

(Core) - ConsoleEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ConsoleEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ConsoleEventType type, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( ConsoleEventType type )
+ + diff --git a/Docs/types/ConsoleEventType.html b/Docs/types/ConsoleEventType.html new file mode 100644 index 0000000..45c90d1 --- /dev/null +++ b/Docs/types/ConsoleEventType.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ConsoleEventType + + +

Back to Server

+

ConsoleEventType (Enum)

+ CTRL_C_EVENT = 0,
+ CTRL_BREAK_EVENT = 1,
+ CTRL_CLOSE_EVENT = 2,
+ CTRL_LOGOFF_EVENT = 5,
+ CTRL_SHUTDOWN_EVENT = 6
+ + diff --git a/Docs/types/ConstructCallback.html b/Docs/types/ConstructCallback.html new file mode 100644 index 0000000..4cc7a09 --- /dev/null +++ b/Docs/types/ConstructCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ConstructCallback + + +

Back to Server.Engines.Reports

+

ConstructCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ConstructCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual PersistableObject EndInvoke( IAsyncResult result )
+ virtual PersistableObject Invoke()
+ + diff --git a/Docs/types/ConstructableAttribute.html b/Docs/types/ConstructableAttribute.html new file mode 100644 index 0000000..01ce32b --- /dev/null +++ b/Docs/types/ConstructableAttribute.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ConstructableAttribute + + +

Back to Server

+

ConstructableAttribute : Attribute, _Attribute

+ (ctor) ConstructableAttribute()
+ (ctor) ConstructableAttribute( AccessLevel accessLevel )
+ AccessLevel AccessLevel( get; set; )
+ + diff --git a/Docs/types/ConsumableEntry.html b/Docs/types/ConsumableEntry.html new file mode 100644 index 0000000..e5ed443 --- /dev/null +++ b/Docs/types/ConsumableEntry.html @@ -0,0 +1,9 @@ + + + RunUO Documentation - Class Overview - ConsumableEntry + + +

Back to Server

+

(ParallelSaveStrategy) - ConsumableEntry

+ + diff --git a/Docs/types/ConsumeType.html b/Docs/types/ConsumeType.html new file mode 100644 index 0000000..b0c103f --- /dev/null +++ b/Docs/types/ConsumeType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ConsumeType + + +

Back to Server.Engines.Craft

+

ConsumeType (Enum)

+ All = 0,
+ Half = 1,
+ None = 2
+ + diff --git a/Docs/types/Consumer.html b/Docs/types/Consumer.html new file mode 100644 index 0000000..afdbfff --- /dev/null +++ b/Docs/types/Consumer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Consumer + + +

Back to Server

+

(ParallelSaveStrategy) - Consumer

+ (ctor) Consumer( ParallelSaveStrategy owner, int bufferSize )
+ void Process()
+ void Processor()
+ + diff --git a/Docs/types/ContainedCommandImplementor.html b/Docs/types/ContainedCommandImplementor.html new file mode 100644 index 0000000..1c85e28 --- /dev/null +++ b/Docs/types/ContainedCommandImplementor.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ContainedCommandImplementor + + +

Back to Server.Commands.Generic

+

ContainedCommandImplementor : BaseCommandImplementor

+ (ctor) ContainedCommandImplementor()
+ void OnTarget( Mobile from, object targeted, object state )
+ virtual void Process( Mobile from, BaseCommand command, string[] args )
+ + diff --git a/Docs/types/ContainedMenu.html b/Docs/types/ContainedMenu.html new file mode 100644 index 0000000..bda6fc3 --- /dev/null +++ b/Docs/types/ContainedMenu.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ContainedMenu + + +

Back to Server.Engines.Help

+

ContainedMenu : QuestionMenu, IMenu

+ (ctor) ContainedMenu( Mobile from )
+ virtual void OnCancel( NetState state )
+ virtual void OnResponse( NetState state, int index )
+ + diff --git a/Docs/types/Container.html b/Docs/types/Container.html new file mode 100644 index 0000000..ca36408 --- /dev/null +++ b/Docs/types/Container.html @@ -0,0 +1,109 @@ + + + RunUO Documentation - Class Overview - Container + + +

Back to Server.Items

+

Container : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BankBox, BaseBoard, BaseContainer, BaseQuiver, BaseWaterContainer, Corpse, DecayedCorpse, DisplayCache, Hold, MovingCrate, SecureTradeContainer, TrashBarrel, TrashChest

+

Nested Types: GroupComparer, SaveFlag

+ (static) int GlobalMaxItems( get; set; )
+ (static) int GlobalMaxWeight( get; set; )
+ (static) ContainerSnoopHandler SnoopHandler( get; set; )
+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) bool InTypeList( Item item, Type[] types )
+ (static) void RecurseConsumeUpTo( Item current, Type type, int amount, bool recurse, ref int consumed, Queue<Item> toDelete )
+ (static) Item RecurseFindItemByType( Item current, Type[] types, bool recurse )
+ (static) T RecurseFindItemByType( Item current, bool recurse, Predicate<T> predicate )
+ (static) Item RecurseFindItemByType( Item current, Type type, bool recurse )
+ (static) void RecurseFindItemsByType( Item current, bool recurse, List<T> list, Predicate<T> predicate )
+ (static) void RecurseFindItemsByType( Item current, Type type, bool recurse, List<Item> list )
+ (static) void RecurseFindItemsByType( Item current, Type[] types, bool recurse, List<Item> list )
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (ctor) Container( int itemID )
+ (ctor) Container( Serial serial )
+ Rectangle2D Bounds( get; )
+ ContainerData ContainerData( get; set; )
+ int DefaultDropSound( get; )
+ int DefaultGumpID( get; )
+ int DefaultMaxItems( get; )
+ int DefaultMaxWeight( get; )
+ bool DisplaysContent( get; )
+ int DropSound( get; set; )
+ int GumpID( get; set; )
+ bool IsDecoContainer( get; )
+ bool IsPublicContainer( get; )
+ int ItemID( get; set; )
+ bool LiftOverride( get; set; )
+ int MaxItems( get; set; )
+ int MaxWeight( get; )
+ List<Mobile> Openers( get; set; )
+ virtual bool CheckContentDisplay( Mobile from )
+ bool CheckHold( Mobile m, Item item, bool message )
+ bool CheckHold( Mobile m, Item item, bool message, bool checkItems )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ int ConsumeTotal( Type[] types, int[] amounts )
+ bool ConsumeTotal( Type type, int amount )
+ int ConsumeTotal( Type[][] types, int[] amounts )
+ bool ConsumeTotal( Type type, int amount, bool recurse )
+ int ConsumeTotal( Type[][] types, int[] amounts, bool recurse )
+ int ConsumeTotal( Type[] types, int[] amounts, bool recurse )
+ bool ConsumeTotal( Type type, int amount, bool recurse, OnItemConsumed callback )
+ int ConsumeTotal( Type[] types, int[] amounts, bool recurse, OnItemConsumed callback )
+ int ConsumeTotal( Type[][] types, int[] amounts, bool recurse, OnItemConsumed callback )
+ int ConsumeTotalGrouped( Type[] types, int[] amounts, bool recurse, OnItemConsumed callback, CheckItemGroup grouper )
+ int ConsumeTotalGrouped( Type[][] types, int[] amounts, bool recurse, OnItemConsumed callback, CheckItemGroup grouper )
+ bool ConsumeTotalGrouped( Type type, int amount, bool recurse, OnItemConsumed callback, CheckItemGroup grouper )
+ int ConsumeUpTo( Type type, int amount )
+ int ConsumeUpTo( Type type, int amount, bool recurse )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Destroy()
+ virtual void DisplayTo( Mobile to )
+ virtual void DropItem( Item dropped )
+ T FindItemByType()
+ Item FindItemByType( Type[] types )
+ Item FindItemByType( Type type )
+ T FindItemByType( bool recurse )
+ T FindItemByType( Predicate<T> predicate )
+ Item FindItemByType( Type[] types, bool recurse )
+ Item FindItemByType( Type type, bool recurse )
+ T FindItemByType( bool recurse, Predicate<T> predicate )
+ List<T> FindItemsByType()
+ Item[] FindItemsByType( Type type )
+ Item[] FindItemsByType( Type[] types )
+ List<T> FindItemsByType( bool recurse )
+ List<T> FindItemsByType( Predicate<T> predicate )
+ Item[] FindItemsByType( Type[] types, bool recurse )
+ List<T> FindItemsByType( bool recurse, Predicate<T> predicate )
+ Item[] FindItemsByType( Type type, bool recurse )
+ int GetAmount( Type type )
+ int GetAmount( Type[] types )
+ int GetAmount( Type type, bool recurse )
+ int GetAmount( Type[] types, bool recurse )
+ int GetBestGroupAmount( Type type, bool recurse, CheckItemGroup grouper )
+ int GetBestGroupAmount( Type[][] types, bool recurse, CheckItemGroup grouper )
+ int GetBestGroupAmount( Type[] types, bool recurse, CheckItemGroup grouper )
+ virtual int GetDroppedSound( Item item )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int GetTotal( TotalType type )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnDoubleClickSecureTrade( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnSnoop( Mobile from )
+ virtual bool OnStackAttempt( Mobile from, Item stack, Item dropped )
+ void ProcessOpeners( Mobile opener )
+ virtual void SendCantStoreMessage( Mobile to, Item item )
+ virtual void SendFullItemsMessage( Mobile to, Item item )
+ virtual void SendFullWeightMessage( Mobile to, Item item )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage )
+ virtual void UpdateContainerData()
+ virtual void UpdateTotal( Item sender, TotalType type, int delta )
+ virtual void UpdateTotals()
+ + diff --git a/Docs/types/ContainerContent.html b/Docs/types/ContainerContent.html new file mode 100644 index 0000000..f606f64 --- /dev/null +++ b/Docs/types/ContainerContent.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ContainerContent + + +

Back to Server.Network

+

ContainerContent : Packet

+ (ctor) ContainerContent( Mobile beholder, Item beheld )
+ + diff --git a/Docs/types/ContainerContent6017.html b/Docs/types/ContainerContent6017.html new file mode 100644 index 0000000..5ae6443 --- /dev/null +++ b/Docs/types/ContainerContent6017.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ContainerContent6017 + + +

Back to Server.Network

+

ContainerContent6017 : Packet

+ (ctor) ContainerContent6017( Mobile beholder, Item beheld )
+ + diff --git a/Docs/types/ContainerContentUpdate.html b/Docs/types/ContainerContentUpdate.html new file mode 100644 index 0000000..2fa8e00 --- /dev/null +++ b/Docs/types/ContainerContentUpdate.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ContainerContentUpdate + + +

Back to Server.Network

+

ContainerContentUpdate : Packet

+ (ctor) ContainerContentUpdate( Item item )
+ + diff --git a/Docs/types/ContainerContentUpdate6017.html b/Docs/types/ContainerContentUpdate6017.html new file mode 100644 index 0000000..53bd3a6 --- /dev/null +++ b/Docs/types/ContainerContentUpdate6017.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ContainerContentUpdate6017 + + +

Back to Server.Network

+

ContainerContentUpdate6017 : Packet

+ (ctor) ContainerContentUpdate6017( Item item )
+ + diff --git a/Docs/types/ContainerData.html b/Docs/types/ContainerData.html new file mode 100644 index 0000000..78ba120 --- /dev/null +++ b/Docs/types/ContainerData.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ContainerData + + +

Back to Server.Items

+

ContainerData

+ (static) ContainerData Default( get; set; )
+ (static) ContainerData GetData( int itemID )
+ (ctor) ContainerData( int gumpID, Rectangle2D bounds, int dropSound )
+ Rectangle2D Bounds( get; )
+ int DropSound( get; )
+ int GumpID( get; )
+ + diff --git a/Docs/types/ContainerDisplay.html b/Docs/types/ContainerDisplay.html new file mode 100644 index 0000000..9304e6c --- /dev/null +++ b/Docs/types/ContainerDisplay.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ContainerDisplay + + +

Back to Server.Network

+

ContainerDisplay : Packet

+ (ctor) ContainerDisplay( Container c )
+ + diff --git a/Docs/types/ContainerDisplayHS.html b/Docs/types/ContainerDisplayHS.html new file mode 100644 index 0000000..7a762f0 --- /dev/null +++ b/Docs/types/ContainerDisplayHS.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ContainerDisplayHS + + +

Back to Server.Network

+

ContainerDisplayHS : Packet

+ (ctor) ContainerDisplayHS( Container c )
+ + diff --git a/Docs/types/ContainerSnoopHandler.html b/Docs/types/ContainerSnoopHandler.html new file mode 100644 index 0000000..14346d8 --- /dev/null +++ b/Docs/types/ContainerSnoopHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ContainerSnoopHandler + + +

Back to Server.Items

+

ContainerSnoopHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ContainerSnoopHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Container cont, Mobile from, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Container cont, Mobile from )
+ + diff --git a/Docs/types/ContainerTarget.html b/Docs/types/ContainerTarget.html new file mode 100644 index 0000000..65e7309 --- /dev/null +++ b/Docs/types/ContainerTarget.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ContainerTarget + + +

Back to Server.Engines.Craft

+

(TrapCraft) - ContainerTarget : Target

+ (ctor) ContainerTarget( TrapCraft trapCraft )
+ void Failure( int message )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType )
+ + diff --git a/Docs/types/ContestMiniHouse.html b/Docs/types/ContestMiniHouse.html new file mode 100644 index 0000000..82567f6 --- /dev/null +++ b/Docs/types/ContestMiniHouse.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ContestMiniHouse + + +

Back to Server.Items

+

ContestMiniHouse : MiniHouseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ContestMiniHouse()
+ (ctor) ContestMiniHouse( Serial serial )
+ (ctor) ContestMiniHouse( MiniHouseType type )
+ BaseAddonDeed Deed( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ContestMiniHouseDeed.html b/Docs/types/ContestMiniHouseDeed.html new file mode 100644 index 0000000..e32e04f --- /dev/null +++ b/Docs/types/ContestMiniHouseDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ContestMiniHouseDeed + + +

Back to Server.Items

+

ContestMiniHouseDeed : MiniHouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) ContestMiniHouseDeed()
+ (ctor) ContestMiniHouseDeed( Serial serial )
+ (ctor) ContestMiniHouseDeed( MiniHouseType type )
+ BaseAddon Addon( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ContextCallback.html b/Docs/types/ContextCallback.html new file mode 100644 index 0000000..a551288 --- /dev/null +++ b/Docs/types/ContextCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ContextCallback + + +

Back to Server.Mobiles

+

(PlayerMobile) - ContextCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ContextCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke()
+ + diff --git a/Docs/types/ContextMenu.html b/Docs/types/ContextMenu.html new file mode 100644 index 0000000..ed14fb6 --- /dev/null +++ b/Docs/types/ContextMenu.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ContextMenu + + +

Back to Server.ContextMenus

+

ContextMenu

+ (ctor) ContextMenu( Mobile from, object target )
+ ContextMenuEntry[] Entries( get; )
+ Mobile From( get; )
+ object Target( get; )
+ + diff --git a/Docs/types/ContextMenuEntry.html b/Docs/types/ContextMenuEntry.html new file mode 100644 index 0000000..0343edf --- /dev/null +++ b/Docs/types/ContextMenuEntry.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ContextMenuEntry + + +

Back to Server.ContextMenus

+

ContextMenuEntry

+

Derived Types: AbandonEscortEntry, AcceptEscortEntry, AddToPartyEntry, AddToSpellbookEntry, AskDestinationEntry, BallEntry, BraceletEntry, BulkOrderInfoEntry, BuyEntry, CallbackEntry, ClaimAllEntry, CollectRentEntry, ContractOptionEntry, ContractOptionsEntry, DecodeMapEntry, DefaultEntry, DemolishEntry, DigEntry, DisassembleEntry, EatEntry, EjectPlayerEntry, InternalEntry, LoadEntry, LockKarmaEntry, LockKarmaEntry, ManageBarkeeperEntry, NameBookEntry, OpenBackpackEntry, OpenBankEntry, OpenCorpseEntry, OpenMapEntry, PackAnimalBackpackEntry, PaperdollEntry, ProcessZoogiFungusEntry, QuestCallbackEntry, RaffleContextMenuEntry, RechargeEntry, ReclaimVendorInventoryEntry, ReleaseEntry, RemoveEntry, RemoveFromPartyEntry, ResetGameEntry, ResurrectEntry, ResurrectEntry, ReturnVendorEntry, SalvageAllEntry, SalvageClothEntry, SalvageIngotsEntry, SetSecureLevelEntry, SpeakPasswordEntry, StableEntry, TalismanReleaseEntry, TalkEntry, TameEntry, TeachEntry, TerminateContractEntry, TitheEntry, ToggleMiningStoneEntry, UnloadEntry, UseBagEntry, VendorBuyEntry, VendorSellEntry, VendorsEntry

+ (ctor) ContextMenuEntry( int number )
+ (ctor) ContextMenuEntry( int number, int range )
+ int Color( get; set; )
+ bool Enabled( get; set; )
+ CMEFlags Flags( get; set; )
+ bool NonLocalUse( get; )
+ int Number( get; set; )
+ ContextMenu Owner( get; set; )
+ int Range( get; set; )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ContinueSlayHenchmenConversation.html b/Docs/types/ContinueSlayHenchmenConversation.html new file mode 100644 index 0000000..46fbe35 --- /dev/null +++ b/Docs/types/ContinueSlayHenchmenConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ContinueSlayHenchmenConversation + + +

Back to Server.Engines.Quests.Ninja

+

ContinueSlayHenchmenConversation : QuestConversation

+ (ctor) ContinueSlayHenchmenConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ContractOfEmployment.html b/Docs/types/ContractOfEmployment.html new file mode 100644 index 0000000..42ec308 --- /dev/null +++ b/Docs/types/ContractOfEmployment.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ContractOfEmployment + + +

Back to Server.Items

+

ContractOfEmployment : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ContractOfEmployment()
+ (ctor) ContractOfEmployment( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ContractOptionEntry.html b/Docs/types/ContractOptionEntry.html new file mode 100644 index 0000000..61c24d9 --- /dev/null +++ b/Docs/types/ContractOptionEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ContractOptionEntry + + +

Back to Server.Items

+

(VendorRentalContract) - ContractOptionEntry : ContextMenuEntry

+ (ctor) ContractOptionEntry( VendorRentalContract contract )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ContractOptionsEntry.html b/Docs/types/ContractOptionsEntry.html new file mode 100644 index 0000000..5269746 --- /dev/null +++ b/Docs/types/ContractOptionsEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ContractOptionsEntry + + +

Back to Server.Mobiles

+

(RentedVendor) - ContractOptionsEntry : ContextMenuEntry

+ (ctor) ContractOptionsEntry( RentedVendor vendor )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ContractRenewalPricePrompt.html b/Docs/types/ContractRenewalPricePrompt.html new file mode 100644 index 0000000..3e8646e --- /dev/null +++ b/Docs/types/ContractRenewalPricePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ContractRenewalPricePrompt + + +

Back to Server.Gumps

+

(LandlordVendorRentalGump) - ContractRenewalPricePrompt : Prompt

+ (ctor) ContractRenewalPricePrompt( RentedVendor vendor )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/ControlPanel.html b/Docs/types/ControlPanel.html new file mode 100644 index 0000000..4c69250 --- /dev/null +++ b/Docs/types/ControlPanel.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ControlPanel + + +

Back to Server.Items

+

ControlPanel : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: DamageTimer, GameGump, Node, PathDirection

+ (ctor) ControlPanel( int sideLength )
+ (ctor) ControlPanel( Serial serial )
+ string DefaultName( get; )
+ Node[] Path( get; )
+ int SideLength( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void DoDamage( Mobile to )
+ void InitPath()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Solve( Mobile from )
+ + diff --git a/Docs/types/ConvertPlayers.html b/Docs/types/ConvertPlayers.html new file mode 100644 index 0000000..05fe5f4 --- /dev/null +++ b/Docs/types/ConvertPlayers.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ConvertPlayers + + +

Back to Server.Commands

+

ConvertPlayers

+ (static) void Convert_OnCommand( CommandEventArgs e )
+ (static) void CopyProps( Mobile to, Mobile from )
+ (static) void Initialize()
+ (ctor) ConvertPlayers()
+ + diff --git a/Docs/types/Cook.html b/Docs/types/Cook.html new file mode 100644 index 0000000..93bc7fc --- /dev/null +++ b/Docs/types/Cook.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Cook + + +

Back to Server.Mobiles

+

Cook : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Cook()
+ (ctor) Cook( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CookableFood.html b/Docs/types/CookableFood.html new file mode 100644 index 0000000..6845aa4 --- /dev/null +++ b/Docs/types/CookableFood.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CookableFood + + +

Back to Server.Items

+

CookableFood : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BrightlyColoredEggs, CakeMix, CookieMix, EasterEggs, Eggs, RawBird, RawChickenLeg, RawFishSteak, RawLambLeg, RawRibs, UnbakedApplePie, UnbakedFruitPie, UnbakedMeatPie, UnbakedPeachCobbler, UnbakedPumpkinPie, UnbakedQuiche, UncookedCheesePizza, UncookedSausagePizza

+

Nested Types: InternalTarget

+ (static) bool IsHeatSource( object targeted )
+ (ctor) CookableFood( Serial serial )
+ (ctor) CookableFood( int itemID, int cookingLevel )
+ int CookingLevel( get; set; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CookedBird.html b/Docs/types/CookedBird.html new file mode 100644 index 0000000..bd8ffe1 --- /dev/null +++ b/Docs/types/CookedBird.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CookedBird + + +

Back to Server.Items

+

CookedBird : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CookedBird()
+ (ctor) CookedBird( int amount )
+ (ctor) CookedBird( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CookieMix.html b/Docs/types/CookieMix.html new file mode 100644 index 0000000..d9f6447 --- /dev/null +++ b/Docs/types/CookieMix.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CookieMix + + +

Back to Server.Items

+

CookieMix : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CookieMix()
+ (ctor) CookieMix( Serial serial )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cookies.html b/Docs/types/Cookies.html new file mode 100644 index 0000000..d52b8c0 --- /dev/null +++ b/Docs/types/Cookies.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Cookies + + +

Back to Server.Items

+

Cookies : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Cookies()
+ (ctor) Cookies( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CopperElemental.html b/Docs/types/CopperElemental.html new file mode 100644 index 0000000..11fb3fe --- /dev/null +++ b/Docs/types/CopperElemental.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - CopperElemental + + +

Back to Server.Mobiles

+

CopperElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) CopperElemental()
+ (ctor) CopperElemental( Serial serial )
+ (ctor) CopperElemental( int oreAmount )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void CheckReflect( Mobile caster, ref bool reflect )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CopperGranite.html b/Docs/types/CopperGranite.html new file mode 100644 index 0000000..597e3c4 --- /dev/null +++ b/Docs/types/CopperGranite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CopperGranite + + +

Back to Server.Items

+

CopperGranite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CopperGranite()
+ (ctor) CopperGranite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CopperIngot.html b/Docs/types/CopperIngot.html new file mode 100644 index 0000000..b94e5bc --- /dev/null +++ b/Docs/types/CopperIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CopperIngot + + +

Back to Server.Items

+

CopperIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) CopperIngot()
+ (ctor) CopperIngot( int amount )
+ (ctor) CopperIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CopperOre.html b/Docs/types/CopperOre.html new file mode 100644 index 0000000..2b6d996 --- /dev/null +++ b/Docs/types/CopperOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CopperOre + + +

Back to Server.Items

+

CopperOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) CopperOre()
+ (ctor) CopperOre( int amount )
+ (ctor) CopperOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CopperWire.html b/Docs/types/CopperWire.html new file mode 100644 index 0000000..5aa6c93 --- /dev/null +++ b/Docs/types/CopperWire.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CopperWire + + +

Back to Server.Items

+

CopperWire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CopperWire()
+ (ctor) CopperWire( int amount )
+ (ctor) CopperWire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CopyTarget.html b/Docs/types/CopyTarget.html new file mode 100644 index 0000000..a53588e --- /dev/null +++ b/Docs/types/CopyTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CopyTarget + + +

Back to Server.Items

+

(Key) - CopyTarget : Target

+ (ctor) CopyTarget( Key key )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/Core.html b/Docs/types/Core.html new file mode 100644 index 0000000..11306b6 --- /dev/null +++ b/Docs/types/Core.html @@ -0,0 +1,58 @@ + + + RunUO Documentation - Class Overview - Core + + +

Back to Server

+

Core

+

Nested Types: ConsoleEventHandler, ConsoleEventType

+ (static) bool AOS( get; )
+ (static) string Arguments( get; )
+ (static) Assembly Assembly( get; set; )
+ (static) float AverageCPS( get; )
+ (static) string BaseDirectory( get; )
+ (static) bool Closing( get; )
+ (static) float CyclesPerSecond( get; )
+ (static) List<String> DataDirectories( get; )
+ (static) bool Debug( get; )
+ (static) string ExePath( get; )
+ (static) Expansion Expansion( get; set; )
+ (static) int GlobalMaxUpdateRange( get; set; )
+ (static) bool LBR( get; )
+ (static) MessagePump MessagePump( get; set; )
+ (static) bool ML( get; )
+ (static) MultiTextWriter MultiConsoleOut( get; )
+ (static) bool MultiProcessor( get; )
+ (static) Process Process( get; )
+ (static) int ProcessorCount( get; )
+ (static) TimeSpan ProfileTime( get; )
+ (static) bool Profiling( get; set; )
+ (static) bool SA( get; )
+ (static) int ScriptItems( get; )
+ (static) int ScriptMobiles( get; )
+ (static) bool SE( get; )
+ (static) bool Service( get; )
+ (static) bool T2A( get; )
+ (static) Thread Thread( get; )
+ (static) bool Unix( get; )
+ (static) bool UOR( get; )
+ (static) bool UOTD( get; )
+ (static) Version Version( get; )
+ (static) void CurrentDomain_ProcessExit( object sender, EventArgs e )
+ (static) void CurrentDomain_UnhandledException( object sender, UnhandledExceptionEventArgs e )
+ (static) string FindDataFile( string path )
+ (static) string FindDataFile( string format, object[] args )
+ (static) void HandleClosed()
+ (static) void Kill()
+ (static) void Kill( bool restart )
+ (static) void Main( string[] args )
+ (static) bool OnConsoleEvent( ConsoleEventType type )
+ (static) void Set()
+ (static) bool SetConsoleCtrlHandler( ConsoleEventHandler callback, bool add )
+ (static) void VerifySerialization()
+ (static) void VerifySerialization( Assembly a )
+ (static) void VerifyType( Type t )
+ bool HaltOnWarning( get; )
+ bool VBdotNet( get; )
+ + diff --git a/Docs/types/Corpse.html b/Docs/types/Corpse.html new file mode 100644 index 0000000..654b310 --- /dev/null +++ b/Docs/types/Corpse.html @@ -0,0 +1,70 @@ + + + RunUO Documentation - Class Overview - Corpse + + +

Back to Server.Items

+

Corpse : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICarvable

+

Derived Types: HagApprenticeCorpse, MilitiaFighterCorpse, SchmendrickApprenticeCorpse

+

Nested Types: InstancedItemInfo, InternalTimer, OpenCorpseEntry

+ (static) string GetCorpseName( Mobile m )
+ (static) void Initialize()
+ (static) Container Mobile_CreateCorpseHandler( Mobile owner, HairInfo hair, FacialHairInfo facialhair, List<Item> initialContent, List<Item> equipItems )
+ (ctor) Corpse( Serial serial )
+ (ctor) Corpse( Mobile owner, List<Item> equipItems )
+ (ctor) Corpse( Mobile owner, HairInfo hair, FacialHairInfo facialhair, List<Item> equipItems )
+ AccessLevel AccessLevel( get; )
+ List<Mobile> Aggressors( get; )
+ bool Animated( get; set; )
+ bool Carved( get; set; )
+ bool Channeled( get; set; )
+ bool Criminal( get; set; )
+ bool Devoured( get; )
+ bool DisplaysContent( get; )
+ bool DisplayWeight( get; )
+ List<Item> EquipItems( get; )
+ FacialHairInfo FacialHair( get; )
+ Guild Guild( get; )
+ HairInfo Hair( get; )
+ bool InstancedCorpse( get; )
+ bool IsBones( get; )
+ bool IsDecoContainer( get; )
+ bool IsPublicContainer( get; )
+ Mobile Killer( get; )
+ int Kills( get; set; )
+ List<Mobile> Looters( get; )
+ Mobile Owner( get; )
+ DateTime TimeOfDeath( get; set; )
+ bool VisitedByTaxidermist( get; set; )
+ void AddCarvedItem( Item carved, Mobile carver )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ void AssignInstancedLoot()
+ void BeginDecay( TimeSpan delay )
+ bool CanLoot( Mobile from, Item item )
+ virtual void Carve( Mobile from, Item item )
+ virtual bool CheckContentDisplay( Mobile from )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ bool CheckLoot( Mobile from, Item item )
+ void ClearRestoreInfo( Item item )
+ virtual void Deserialize( GenericReader reader )
+ bool DevourCorpse()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ bool GetFlag( CorpseFlag flag )
+ bool GetRestoreInfo( Item item, ref Point3D loc )
+ virtual bool IsChildVisibleTo( Mobile m, Item child )
+ bool IsCriminalAction( Mobile from )
+ virtual void OnAfterDelete()
+ virtual void OnAosSingleClick( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnItemLifted( Mobile from, Item item )
+ virtual void OnItemUsed( Mobile from, Item item )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Open( Mobile from, bool checkSelfLoot )
+ virtual void SendInfoTo( NetState state, bool sendOplPacket )
+ virtual void Serialize( GenericWriter writer )
+ void SetFlag( CorpseFlag flag, bool on )
+ void SetRestoreInfo( Item item, Point3D loc )
+ void TurnToBones()
+ + diff --git a/Docs/types/CorpseContent.html b/Docs/types/CorpseContent.html new file mode 100644 index 0000000..8978c67 --- /dev/null +++ b/Docs/types/CorpseContent.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CorpseContent + + +

Back to Server.Network

+

CorpseContent : Packet

+ (ctor) CorpseContent( Mobile beholder, Corpse beheld )
+ + diff --git a/Docs/types/CorpseEquip.html b/Docs/types/CorpseEquip.html new file mode 100644 index 0000000..acfeac8 --- /dev/null +++ b/Docs/types/CorpseEquip.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CorpseEquip + + +

Back to Server.Network

+

CorpseEquip : Packet

+ (ctor) CorpseEquip( Mobile beholder, Corpse beheld )
+ + diff --git a/Docs/types/CorpseFlag.html b/Docs/types/CorpseFlag.html new file mode 100644 index 0000000..e2bbd28 --- /dev/null +++ b/Docs/types/CorpseFlag.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - CorpseFlag + + +

Back to Server.Items

+

CorpseFlag (Enum)

+ None = 0x00000000,
+ Carved = 0x00000001,
+ NoBones = 0x00000002,
+ IsBones = 0x00000004,
+ VisitedByTaxidermist = 0x00000008,
+ Channeled = 0x00000010,
+ Criminal = 0x00000020,
+ Animated = 0x00000040
+ + diff --git a/Docs/types/CorpseNameAttribute.html b/Docs/types/CorpseNameAttribute.html new file mode 100644 index 0000000..768e5b5 --- /dev/null +++ b/Docs/types/CorpseNameAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CorpseNameAttribute + + +

Back to Server

+

CorpseNameAttribute : Attribute, _Attribute

+ (ctor) CorpseNameAttribute( string name )
+ string Name( get; )
+ + diff --git a/Docs/types/CorpseSkinScroll.html b/Docs/types/CorpseSkinScroll.html new file mode 100644 index 0000000..81b0e45 --- /dev/null +++ b/Docs/types/CorpseSkinScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CorpseSkinScroll + + +

Back to Server.Items

+

CorpseSkinScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) CorpseSkinScroll()
+ (ctor) CorpseSkinScroll( int amount )
+ (ctor) CorpseSkinScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CorpseSkinSpell.html b/Docs/types/CorpseSkinSpell.html new file mode 100644 index 0000000..e81ee1a --- /dev/null +++ b/Docs/types/CorpseSkinSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - CorpseSkinSpell + + +

Back to Server.Spells.Necromancy

+

CorpseSkinSpell : NecromancerSpell, ISpell

+

Nested Types: ExpireTimer, InternalTarget

+ (static) bool RemoveCurse( Mobile m )
+ (ctor) CorpseSkinSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/CorpseTarget.html b/Docs/types/CorpseTarget.html new file mode 100644 index 0000000..c343613 --- /dev/null +++ b/Docs/types/CorpseTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CorpseTarget + + +

Back to Server.Items

+

(TaxidermyKit) - CorpseTarget : Target

+ (ctor) CorpseTarget( TaxidermyKit kit )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/Corpser.html b/Docs/types/Corpser.html new file mode 100644 index 0000000..0d9aa3f --- /dev/null +++ b/Docs/types/Corpser.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Corpser + + +

Back to Server.Mobiles

+

Corpser : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Corpser()
+ (ctor) Corpser( Serial serial )
+ bool DisallowAllMoves( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CorrosiveSlime.html b/Docs/types/CorrosiveSlime.html new file mode 100644 index 0000000..fb07fbf --- /dev/null +++ b/Docs/types/CorrosiveSlime.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - CorrosiveSlime + + +

Back to Server.Mobiles

+

CorrosiveSlime : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) CorrosiveSlime()
+ (ctor) CorrosiveSlime( Serial serial )
+ FoodType FavoriteFood( get; )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CorruptedSoul.html b/Docs/types/CorruptedSoul.html new file mode 100644 index 0000000..22891f5 --- /dev/null +++ b/Docs/types/CorruptedSoul.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - CorruptedSoul + + +

Back to Server.Mobiles

+

CorruptedSoul : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) CorruptedSoul()
+ (ctor) CorruptedSoul( Serial serial )
+ bool AlwaysAttackable( get; )
+ bool AlwaysMurderer( get; )
+ bool BleedImmune( get; )
+ bool DeleteCorpseOnDeath( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Corruption.html b/Docs/types/Corruption.html new file mode 100644 index 0000000..80665cc --- /dev/null +++ b/Docs/types/Corruption.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Corruption + + +

Back to Server.Items

+

Corruption : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Corruption()
+ (ctor) Corruption( int amount )
+ (ctor) Corruption( Serial serial )
+ (ctor) Corruption( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cotton.html b/Docs/types/Cotton.html new file mode 100644 index 0000000..cd947d0 --- /dev/null +++ b/Docs/types/Cotton.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Cotton + + +

Back to Server.Items

+

Cotton : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Nested Types: PickWheelTarget

+ (static) void OnSpun( ISpinningWheel wheel, Mobile from, int hue )
+ (ctor) Cotton()
+ (ctor) Cotton( Serial serial )
+ (ctor) Cotton( int amount )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cougar.html b/Docs/types/Cougar.html new file mode 100644 index 0000000..86a4df0 --- /dev/null +++ b/Docs/types/Cougar.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Cougar + + +

Back to Server.Mobiles

+

Cougar : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Cougar()
+ (ctor) Cougar( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CouncilOfMages.html b/Docs/types/CouncilOfMages.html new file mode 100644 index 0000000..53c9e1b --- /dev/null +++ b/Docs/types/CouncilOfMages.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CouncilOfMages + + +

Back to Server.Factions

+

CouncilOfMages : Faction, IComparable

+ (static) Faction Instance( get; )
+ (ctor) CouncilOfMages()
+ + diff --git a/Docs/types/CounselorRobe.html b/Docs/types/CounselorRobe.html new file mode 100644 index 0000000..cf0a2cf --- /dev/null +++ b/Docs/types/CounselorRobe.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CounselorRobe + + +

Back to Server.Items

+

CounselorRobe : BaseSuit, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CounselorRobe()
+ (ctor) CounselorRobe( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CountAndTimeStamp.html b/Docs/types/CountAndTimeStamp.html new file mode 100644 index 0000000..1add5d2 --- /dev/null +++ b/Docs/types/CountAndTimeStamp.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CountAndTimeStamp + + +

Back to Server.Mobiles

+

(PlayerMobile) - CountAndTimeStamp

+ (ctor) CountAndTimeStamp()
+ int Count( get; set; )
+ DateTime TimeStamp( get; )
+ + diff --git a/Docs/types/CountCommand.html b/Docs/types/CountCommand.html new file mode 100644 index 0000000..dcac56d --- /dev/null +++ b/Docs/types/CountCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CountCommand + + +

Back to Server.Commands.Generic

+

CountCommand : BaseCommand

+ (ctor) CountCommand()
+ virtual void ExecuteList( CommandEventArgs e, ArrayList list )
+ + diff --git a/Docs/types/CountSorter.html b/Docs/types/CountSorter.html new file mode 100644 index 0000000..9719a4c --- /dev/null +++ b/Docs/types/CountSorter.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CountSorter + + +

Back to Server.Commands

+

(Profiling) - CountSorter : IComparer

+ (ctor) CountSorter()
+ virtual int Compare( object x, object y )
+ int GetCount( object obj )
+ + diff --git a/Docs/types/CounterAttack.html b/Docs/types/CounterAttack.html new file mode 100644 index 0000000..afba9ad --- /dev/null +++ b/Docs/types/CounterAttack.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - CounterAttack + + +

Back to Server.Spells.Bushido

+

CounterAttack : SamuraiSpell, ISpell

+

Nested Types: InternalTimer

+ (static) bool IsCountering( Mobile m )
+ (static) void StartCountering( Mobile m )
+ (static) void StopCountering( Mobile m )
+ (ctor) CounterAttack( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual void OnBeginCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/CoveredChair.html b/Docs/types/CoveredChair.html new file mode 100644 index 0000000..1154231 --- /dev/null +++ b/Docs/types/CoveredChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CoveredChair + + +

Back to Server.Items

+

CoveredChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CoveredChair()
+ (ctor) CoveredChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cow.html b/Docs/types/Cow.html new file mode 100644 index 0000000..aecc06f --- /dev/null +++ b/Docs/types/Cow.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Cow + + +

Back to Server.Mobiles

+

Cow : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Cow()
+ (ctor) Cow( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ int Milk( get; set; )
+ DateTime MilkedOn( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Tip()
+ bool TryMilk( Mobile from )
+ + diff --git a/Docs/types/CraftAttributeInfo.html b/Docs/types/CraftAttributeInfo.html new file mode 100644 index 0000000..660bc82 --- /dev/null +++ b/Docs/types/CraftAttributeInfo.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - CraftAttributeInfo + + +

Back to Server.Items

+

CraftAttributeInfo

+ (ctor) CraftAttributeInfo()
+ int ArmorColdResist( get; set; )
+ int ArmorDurability( get; set; )
+ int ArmorEnergyResist( get; set; )
+ int ArmorFireResist( get; set; )
+ int ArmorGoldIncrease( get; set; )
+ int ArmorLowerRequirements( get; set; )
+ int ArmorLuck( get; set; )
+ int ArmorPhysicalResist( get; set; )
+ int ArmorPoisonResist( get; set; )
+ int RunicMaxAttributes( get; set; )
+ int RunicMaxIntensity( get; set; )
+ int RunicMinAttributes( get; set; )
+ int RunicMinIntensity( get; set; )
+ int WeaponChaosDamage( get; set; )
+ int WeaponColdDamage( get; set; )
+ int WeaponDirectDamage( get; set; )
+ int WeaponDurability( get; set; )
+ int WeaponEnergyDamage( get; set; )
+ int WeaponFireDamage( get; set; )
+ int WeaponGoldIncrease( get; set; )
+ int WeaponLowerRequirements( get; set; )
+ int WeaponLuck( get; set; )
+ int WeaponPoisonDamage( get; set; )
+ + diff --git a/Docs/types/CraftContext.html b/Docs/types/CraftContext.html new file mode 100644 index 0000000..67d5f00 --- /dev/null +++ b/Docs/types/CraftContext.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CraftContext + + +

Back to Server.Engines.Craft

+

CraftContext

+ (ctor) CraftContext()
+ bool DoNotColor( get; set; )
+ List<CraftItem> Items( get; )
+ int LastGroupIndex( get; set; )
+ CraftItem LastMade( get; )
+ int LastResourceIndex( get; set; )
+ int LastResourceIndex2( get; set; )
+ CraftMarkOption MarkOption( get; set; )
+ void OnMade( CraftItem item )
+ + diff --git a/Docs/types/CraftECA.html b/Docs/types/CraftECA.html new file mode 100644 index 0000000..3bc92b5 --- /dev/null +++ b/Docs/types/CraftECA.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CraftECA + + +

Back to Server.Engines.Craft

+

CraftECA (Enum)

+ ChanceMinusSixty = 0,
+ FiftyPercentChanceMinusTenPercent = 1,
+ ChanceMinusSixtyToFourtyFive = 2
+ + diff --git a/Docs/types/CraftGroup.html b/Docs/types/CraftGroup.html new file mode 100644 index 0000000..fa5d6a5 --- /dev/null +++ b/Docs/types/CraftGroup.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CraftGroup + + +

Back to Server.Engines.Craft

+

CraftGroup

+ (ctor) CraftGroup( TextDefinition groupName )
+ CraftItemCol CraftItems( get; )
+ int NameNumber( get; )
+ string NameString( get; )
+ void AddCraftItem( CraftItem craftItem )
+ + diff --git a/Docs/types/CraftGroupCol.html b/Docs/types/CraftGroupCol.html new file mode 100644 index 0000000..9877782 --- /dev/null +++ b/Docs/types/CraftGroupCol.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CraftGroupCol + + +

Back to Server.Engines.Craft

+

CraftGroupCol : CollectionBase, IList, ICollection, IEnumerable

+ (ctor) CraftGroupCol()
+ int Add( CraftGroup craftGroup )
+ CraftGroup GetAt( int index )
+ void Remove( int index )
+ int SearchFor( TextDefinition groupName )
+ + diff --git a/Docs/types/CraftGump.html b/Docs/types/CraftGump.html new file mode 100644 index 0000000..ceb78f6 --- /dev/null +++ b/Docs/types/CraftGump.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - CraftGump + + +

Back to Server.Engines.Craft

+

CraftGump : Gump

+

Nested Types: CraftPage

+ (static) int GetButtonID( int type, int index )
+ (ctor) CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool, object notice )
+ (ctor) CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool, object notice, CraftPage page )
+ void CraftItem( CraftItem item )
+ int CreateGroupList()
+ void CreateItemList( int selectedGroup )
+ void CreateMakeLastList()
+ void CreateResList( bool opt, Mobile from )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/CraftGumpItem.html b/Docs/types/CraftGumpItem.html new file mode 100644 index 0000000..b58a5cd --- /dev/null +++ b/Docs/types/CraftGumpItem.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CraftGumpItem + + +

Back to Server.Engines.Craft

+

CraftGumpItem : Gump

+ (ctor) CraftGumpItem( Mobile from, CraftSystem craftSystem, CraftItem craftItem, BaseTool tool )
+ void DrawItem()
+ void DrawResource()
+ void DrawSkill()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ TextDefinition RequiredExpansionMessage( Expansion expansion )
+ + diff --git a/Docs/types/CraftItem.html b/Docs/types/CraftItem.html new file mode 100644 index 0000000..ffc4434 --- /dev/null +++ b/Docs/types/CraftItem.html @@ -0,0 +1,53 @@ + + + RunUO Documentation - Class Overview - CraftItem + + +

Back to Server.Engines.Craft

+

CraftItem

+

Nested Types: InternalTimer

+ (static) int ItemIDOf( Type type )
+ (ctor) CraftItem( Type type, TextDefinition groupName, TextDefinition name )
+ bool ForceNonExceptional( get; set; )
+ int GroupNameNumber( get; )
+ string GroupNameString( get; )
+ int Hits( get; set; )
+ Type ItemType( get; )
+ int Mana( get; set; )
+ int NameNumber( get; )
+ string NameString( get; )
+ bool NeedHeat( get; set; )
+ bool NeedMill( get; set; )
+ bool NeedOven( get; set; )
+ Recipe Recipe( get; )
+ Expansion RequiredExpansion( get; set; )
+ CraftResCol Resources( get; )
+ CraftSkillCol Skills( get; )
+ int Stam( get; set; )
+ bool UseAllRes( get; set; )
+ bool UseSubRes2( get; set; )
+ void AddRecipe( int id, CraftSystem system )
+ void AddRes( Type type, TextDefinition name, int amount )
+ void AddRes( Type type, TextDefinition name, int amount, TextDefinition message )
+ void AddSkill( SkillName skillToMake, double minSkill, double maxSkill )
+ int CheckHueGrouping( Item a, Item b )
+ bool CheckSkills( Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality, ref bool allRequiredSkills )
+ bool CheckSkills( Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality, ref bool allRequiredSkills, bool gainSkills )
+ void CompleteCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CustomCraft customCraft )
+ bool ConsumeAttributes( Mobile from, ref object message, bool consume )
+ int ConsumeQuantity( Container cont, Type[][] types, int[] amounts )
+ bool ConsumeRes( Mobile from, Type typeRes, CraftSystem craftSystem, ref int resHue, ref int maxAmount, ConsumeType consumeType, ref object message )
+ bool ConsumeRes( Mobile from, Type typeRes, CraftSystem craftSystem, ref int resHue, ref int maxAmount, ConsumeType consumeType, ref object message, bool isFailure )
+ void Craft( Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool )
+ bool Find( int itemID, int[] itemIDs )
+ bool Find( Mobile from, int[] itemIDs )
+ double GetExceptionalChance( CraftSystem system, double chance, Mobile from )
+ int GetQuantity( Container cont, Type[] types )
+ double GetSuccessChance( Mobile from, Type typeRes, CraftSystem craftSystem, bool gainSkills, ref bool allRequiredSkills )
+ bool IsMarkable( Type type )
+ bool IsQuantityType( Type[][] types )
+ void OnResourceConsumed( Item item, int amount )
+ object RequiredExpansionMessage( Expansion expansion )
+ bool RetainsColorFrom( CraftSystem system, Type type )
+ + diff --git a/Docs/types/CraftItemCol.html b/Docs/types/CraftItemCol.html new file mode 100644 index 0000000..a41d4cb --- /dev/null +++ b/Docs/types/CraftItemCol.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CraftItemCol + + +

Back to Server.Engines.Craft

+

CraftItemCol : CollectionBase, IList, ICollection, IEnumerable

+ (ctor) CraftItemCol()
+ int Add( CraftItem craftItem )
+ CraftItem GetAt( int index )
+ void Remove( int index )
+ CraftItem SearchFor( Type type )
+ CraftItem SearchForSubclass( Type type )
+ + diff --git a/Docs/types/CraftItemIDAttribute.html b/Docs/types/CraftItemIDAttribute.html new file mode 100644 index 0000000..bcfb982 --- /dev/null +++ b/Docs/types/CraftItemIDAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CraftItemIDAttribute + + +

Back to Server.Engines.Craft

+

CraftItemIDAttribute : Attribute, _Attribute

+ (ctor) CraftItemIDAttribute( int itemID )
+ int ItemID( get; )
+ + diff --git a/Docs/types/CraftMarkOption.html b/Docs/types/CraftMarkOption.html new file mode 100644 index 0000000..a8b2a35 --- /dev/null +++ b/Docs/types/CraftMarkOption.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CraftMarkOption + + +

Back to Server.Engines.Craft

+

CraftMarkOption (Enum)

+ MarkItem = 0,
+ DoNotMark = 1,
+ PromptForMark = 2
+ + diff --git a/Docs/types/CraftPage.html b/Docs/types/CraftPage.html new file mode 100644 index 0000000..e28beba --- /dev/null +++ b/Docs/types/CraftPage.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CraftPage + + +

Back to Server.Engines.Craft

+

CraftPage (Enum)

+ None = 0,
+ PickResource = 1,
+ PickResource2 = 2
+ + diff --git a/Docs/types/CraftRes.html b/Docs/types/CraftRes.html new file mode 100644 index 0000000..1d31122 --- /dev/null +++ b/Docs/types/CraftRes.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CraftRes + + +

Back to Server.Engines.Craft

+

CraftRes

+ (ctor) CraftRes( Type type, int amount )
+ (ctor) CraftRes( Type type, TextDefinition name, int amount, TextDefinition message )
+ int Amount( get; )
+ Type ItemType( get; )
+ int MessageNumber( get; )
+ string MessageString( get; )
+ int NameNumber( get; )
+ string NameString( get; )
+ void SendMessage( Mobile from )
+ + diff --git a/Docs/types/CraftResCol.html b/Docs/types/CraftResCol.html new file mode 100644 index 0000000..f29183a --- /dev/null +++ b/Docs/types/CraftResCol.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CraftResCol + + +

Back to Server.Engines.Craft

+

CraftResCol : CollectionBase, IList, ICollection, IEnumerable

+ (ctor) CraftResCol()
+ void Add( CraftRes craftRes )
+ CraftRes GetAt( int index )
+ void Remove( int index )
+ + diff --git a/Docs/types/CraftResource.html b/Docs/types/CraftResource.html new file mode 100644 index 0000000..26981f2 --- /dev/null +++ b/Docs/types/CraftResource.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - CraftResource + + +

Back to Server.Items

+

CraftResource (Enum)

+ None = 0,
+ Iron = 1,
+ DullCopper = 2,
+ ShadowIron = 3,
+ Copper = 4,
+ Bronze = 5,
+ Gold = 6,
+ Agapite = 7,
+ Verite = 8,
+ Valorite = 9,
+ RegularLeather = 101,
+ SpinedLeather = 102,
+ HornedLeather = 103,
+ BarbedLeather = 104,
+ RedScales = 201,
+ YellowScales = 202,
+ BlackScales = 203,
+ GreenScales = 204,
+ WhiteScales = 205,
+ BlueScales = 206,
+ RegularWood = 301,
+ OakWood = 302,
+ AshWood = 303,
+ YewWood = 304,
+ Heartwood = 305,
+ Bloodwood = 306,
+ Frostwood = 307
+ + diff --git a/Docs/types/CraftResourceInfo.html b/Docs/types/CraftResourceInfo.html new file mode 100644 index 0000000..e3399da --- /dev/null +++ b/Docs/types/CraftResourceInfo.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CraftResourceInfo + + +

Back to Server.Items

+

CraftResourceInfo

+ (ctor) CraftResourceInfo( int hue, int number, string name, CraftAttributeInfo attributeInfo, CraftResource resource, Type[] resourceTypes )
+ CraftAttributeInfo AttributeInfo( get; )
+ int Hue( get; )
+ string Name( get; )
+ int Number( get; )
+ CraftResource Resource( get; )
+ Type[] ResourceTypes( get; )
+ + diff --git a/Docs/types/CraftResourceType.html b/Docs/types/CraftResourceType.html new file mode 100644 index 0000000..0f69405 --- /dev/null +++ b/Docs/types/CraftResourceType.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CraftResourceType + + +

Back to Server.Items

+

CraftResourceType (Enum)

+ None = 0,
+ Metal = 1,
+ Leather = 2,
+ Scales = 3,
+ Wood = 4
+ + diff --git a/Docs/types/CraftResources.html b/Docs/types/CraftResources.html new file mode 100644 index 0000000..4b9e6db --- /dev/null +++ b/Docs/types/CraftResources.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - CraftResources + + +

Back to Server.Items

+

CraftResources

+ (static) CraftResource GetFromOreInfo( OreInfo info )
+ (static) CraftResource GetFromOreInfo( OreInfo info, ArmorMaterialType material )
+ (static) CraftResource GetFromType( Type resourceType )
+ (static) int GetHue( CraftResource resource )
+ (static) int GetIndex( CraftResource resource )
+ (static) CraftResourceInfo GetInfo( CraftResource resource )
+ (static) int GetLocalizationNumber( CraftResource resource )
+ (static) string GetName( CraftResource resource )
+ (static) CraftResource GetStart( CraftResource resource )
+ (static) CraftResourceType GetType( CraftResource resource )
+ (static) bool IsStandard( CraftResource resource )
+ (static) void RegisterType( Type resourceType, CraftResource resource )
+ (ctor) CraftResources()
+ + diff --git a/Docs/types/CraftSkill.html b/Docs/types/CraftSkill.html new file mode 100644 index 0000000..eb99617 --- /dev/null +++ b/Docs/types/CraftSkill.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CraftSkill + + +

Back to Server.Engines.Craft

+

CraftSkill

+ (ctor) CraftSkill( SkillName skillToMake, double minSkill, double maxSkill )
+ double MaxSkill( get; )
+ double MinSkill( get; )
+ SkillName SkillToMake( get; )
+ + diff --git a/Docs/types/CraftSkillCol.html b/Docs/types/CraftSkillCol.html new file mode 100644 index 0000000..1a7e5f3 --- /dev/null +++ b/Docs/types/CraftSkillCol.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CraftSkillCol + + +

Back to Server.Engines.Craft

+

CraftSkillCol : CollectionBase, IList, ICollection, IEnumerable

+ (ctor) CraftSkillCol()
+ void Add( CraftSkill craftSkill )
+ CraftSkill GetAt( int index )
+ void Remove( int index )
+ + diff --git a/Docs/types/CraftSubRes.html b/Docs/types/CraftSubRes.html new file mode 100644 index 0000000..665f885 --- /dev/null +++ b/Docs/types/CraftSubRes.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - CraftSubRes + + +

Back to Server.Engines.Craft

+

CraftSubRes

+ (ctor) CraftSubRes( Type type, TextDefinition name, double reqSkill, object message )
+ (ctor) CraftSubRes( Type type, TextDefinition name, double reqSkill, int genericNameNumber, object message )
+ int GenericNameNumber( get; )
+ Type ItemType( get; )
+ object Message( get; )
+ int NameNumber( get; )
+ string NameString( get; )
+ double RequiredSkill( get; )
+ + diff --git a/Docs/types/CraftSubResCol.html b/Docs/types/CraftSubResCol.html new file mode 100644 index 0000000..a9ce561 --- /dev/null +++ b/Docs/types/CraftSubResCol.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CraftSubResCol + + +

Back to Server.Engines.Craft

+

CraftSubResCol : CollectionBase, IList, ICollection, IEnumerable

+ (ctor) CraftSubResCol()
+ bool Init( get; set; )
+ int NameNumber( get; set; )
+ string NameString( get; set; )
+ Type ResType( get; set; )
+ void Add( CraftSubRes craftSubRes )
+ CraftSubRes GetAt( int index )
+ void Remove( int index )
+ CraftSubRes SearchFor( Type type )
+ + diff --git a/Docs/types/CraftSystem.html b/Docs/types/CraftSystem.html new file mode 100644 index 0000000..665f0ac --- /dev/null +++ b/Docs/types/CraftSystem.html @@ -0,0 +1,65 @@ + + + RunUO Documentation - Class Overview - CraftSystem + + +

Back to Server.Engines.Craft

+

CraftSystem

+

Derived Types: DefAlchemy, DefBlacksmithy, DefBowFletching, DefCarpentry, DefCartography, DefCooking, DefGlassblowing, DefInscription, DefMasonry, DefTailoring, DefTinkering

+ (ctor) CraftSystem( int minCraftEffect, int maxCraftEffect, double delay )
+ bool CanEnhance( get; set; )
+ CraftGroupCol CraftGroups( get; )
+ CraftItemCol CraftItems( get; )
+ CraftSubResCol CraftSubRes( get; )
+ CraftSubResCol CraftSubRes2( get; )
+ double Delay( get; )
+ CraftECA ECA( get; )
+ int GumpTitleNumber( get; )
+ string GumpTitleString( get; )
+ SkillName MainSkill( get; )
+ bool MarkOption( get; set; )
+ int MaxCraftEffect( get; )
+ int MinCraftEffect( get; )
+ bool Repair( get; set; )
+ bool Resmelt( get; set; )
+ int AddCraft( Type typeItem, TextDefinition group, TextDefinition name, double minSkill, double maxSkill, Type typeRes, TextDefinition nameRes, int amount )
+ int AddCraft( Type typeItem, TextDefinition group, TextDefinition name, double minSkill, double maxSkill, Type typeRes, TextDefinition nameRes, int amount, TextDefinition message )
+ int AddCraft( Type typeItem, TextDefinition group, TextDefinition name, SkillName skillToMake, double minSkill, double maxSkill, Type typeRes, TextDefinition nameRes, int amount )
+ int AddCraft( Type typeItem, TextDefinition group, TextDefinition name, SkillName skillToMake, double minSkill, double maxSkill, Type typeRes, TextDefinition nameRes, int amount, TextDefinition message )
+ void AddRecipe( int index, int id )
+ void AddRes( int index, Type type, TextDefinition name, int amount )
+ void AddRes( int index, Type type, TextDefinition name, int amount, TextDefinition message )
+ void AddSkill( int index, SkillName skillToMake, double minSkill, double maxSkill )
+ void AddSubRes( Type type, int name, double reqSkill, object message )
+ void AddSubRes( Type type, string name, double reqSkill, object message )
+ void AddSubRes( Type type, int name, double reqSkill, int genericName, object message )
+ void AddSubRes2( Type type, int name, double reqSkill, object message )
+ void AddSubRes2( Type type, string name, double reqSkill, object message )
+ void AddSubRes2( Type type, int name, double reqSkill, int genericName, object message )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual bool ConsumeOnFailure( Mobile from, Type resourceType, CraftItem craftItem )
+ void CreateItem( Mobile from, Type type, Type typeRes, BaseTool tool, CraftItem realCraftItem )
+ void DoGroup( TextDefinition groupName, CraftItem craftItem )
+ void ForceNonExceptional( int index )
+ virtual double GetChanceAtMin( CraftItem item )
+ CraftContext GetContext( Mobile m )
+ virtual void InitCraftList()
+ void OnMade( Mobile m, CraftItem item )
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ virtual bool RetainsColorFrom( CraftItem item, Type type )
+ void SetHitsReq( int index, int hits )
+ void SetManaReq( int index, int mana )
+ void SetNeededExpansion( int index, Expansion expansion )
+ void SetNeedHeat( int index, bool needHeat )
+ void SetNeedMill( int index, bool needMill )
+ void SetNeedOven( int index, bool needOven )
+ void SetStamReq( int index, int stam )
+ void SetSubRes( Type type, string name )
+ void SetSubRes( Type type, int name )
+ void SetSubRes2( Type type, string name )
+ void SetSubRes2( Type type, int name )
+ void SetUseAllRes( int index, bool useAll )
+ void SetUseSubRes2( int index, bool val )
+ + diff --git a/Docs/types/Crane.html b/Docs/types/Crane.html new file mode 100644 index 0000000..648f1b4 --- /dev/null +++ b/Docs/types/Crane.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Crane + + +

Back to Server.Mobiles

+

Crane : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Crane()
+ (ctor) Crane( Serial serial )
+ int Feathers( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CrashGuard.html b/Docs/types/CrashGuard.html new file mode 100644 index 0000000..d2b0f89 --- /dev/null +++ b/Docs/types/CrashGuard.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - CrashGuard + + +

Back to Server.Misc

+

CrashGuard

+ (static) void Backup()
+ (static) string Combine( string path1, string path2 )
+ (static) void CopyFile( string rootOrigin, string rootBackup, string path )
+ (static) void CrashGuard_OnCrash( CrashedEventArgs e )
+ (static) void CreateDirectory( string path )
+ (static) void CreateDirectory( string path1, string path2 )
+ (static) void GenerateCrashReport( CrashedEventArgs e )
+ (static) string GetRoot()
+ (static) string GetTimeStamp()
+ (static) void Initialize()
+ (static) void Restart( CrashedEventArgs e )
+ (static) void SendEmail( string filePath )
+ (ctor) CrashGuard()
+ + diff --git a/Docs/types/CrashedEventArgs.html b/Docs/types/CrashedEventArgs.html new file mode 100644 index 0000000..de0f47d --- /dev/null +++ b/Docs/types/CrashedEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CrashedEventArgs + + +

Back to Server

+

CrashedEventArgs : EventArgs

+ (ctor) CrashedEventArgs( Exception e )
+ bool Close( get; set; )
+ Exception Exception( get; )
+ + diff --git a/Docs/types/CrashedEventHandler.html b/Docs/types/CrashedEventHandler.html new file mode 100644 index 0000000..c407a0c --- /dev/null +++ b/Docs/types/CrashedEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CrashedEventHandler + + +

Back to Server

+

CrashedEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) CrashedEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( CrashedEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( CrashedEventArgs e )
+ + diff --git a/Docs/types/CreateCorpseHandler.html b/Docs/types/CreateCorpseHandler.html new file mode 100644 index 0000000..34da7f4 --- /dev/null +++ b/Docs/types/CreateCorpseHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CreateCorpseHandler + + +

Back to Server

+

CreateCorpseHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) CreateCorpseHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, HairInfo hair, FacialHairInfo facialhair, List<Item> initialContent, List<Item> equipedItems, AsyncCallback callback, object object )
+ virtual Container EndInvoke( IAsyncResult result )
+ virtual Container Invoke( Mobile from, HairInfo hair, FacialHairInfo facialhair, List<Item> initialContent, List<Item> equipedItems )
+ + diff --git a/Docs/types/CreateFoodScroll.html b/Docs/types/CreateFoodScroll.html new file mode 100644 index 0000000..6b9c846 --- /dev/null +++ b/Docs/types/CreateFoodScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CreateFoodScroll + + +

Back to Server.Items

+

CreateFoodScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) CreateFoodScroll()
+ (ctor) CreateFoodScroll( int amount )
+ (ctor) CreateFoodScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CreateFoodSpell.html b/Docs/types/CreateFoodSpell.html new file mode 100644 index 0000000..4ca1f56 --- /dev/null +++ b/Docs/types/CreateFoodSpell.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CreateFoodSpell + + +

Back to Server.Spells.First

+

CreateFoodSpell : MagerySpell, ISpell

+ (ctor) CreateFoodSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/CreateGuildEventArgs.html b/Docs/types/CreateGuildEventArgs.html new file mode 100644 index 0000000..cf697a0 --- /dev/null +++ b/Docs/types/CreateGuildEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CreateGuildEventArgs + + +

Back to Server

+

CreateGuildEventArgs : EventArgs

+ (ctor) CreateGuildEventArgs( int id )
+ int Id( get; set; )
+ + diff --git a/Docs/types/CreateGuildGump.html b/Docs/types/CreateGuildGump.html new file mode 100644 index 0000000..2bbcc56 --- /dev/null +++ b/Docs/types/CreateGuildGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CreateGuildGump + + +

Back to Server.Guilds

+

CreateGuildGump : Gump

+ (ctor) CreateGuildGump( PlayerMobile pm )
+ (ctor) CreateGuildGump( PlayerMobile pm, string guildName, string guildAbbrev )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/CreateGuildHandler.html b/Docs/types/CreateGuildHandler.html new file mode 100644 index 0000000..ce3549b --- /dev/null +++ b/Docs/types/CreateGuildHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CreateGuildHandler + + +

Back to Server

+

CreateGuildHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) CreateGuildHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( CreateGuildEventArgs e, AsyncCallback callback, object object )
+ virtual BaseGuild EndInvoke( IAsyncResult result )
+ virtual BaseGuild Invoke( CreateGuildEventArgs e )
+ + diff --git a/Docs/types/CreatureBackpack.html b/Docs/types/CreatureBackpack.html new file mode 100644 index 0000000..96db6a1 --- /dev/null +++ b/Docs/types/CreatureBackpack.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CreatureBackpack + + +

Back to Server.Items

+

CreatureBackpack : Backpack, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) CreatureBackpack( string name )
+ (ctor) CreatureBackpack( Serial serial )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual bool OnDragLift( Mobile from )
+ virtual void OnItemRemoved( Item item )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage )
+ + diff --git a/Docs/types/CreatureGroup.html b/Docs/types/CreatureGroup.html new file mode 100644 index 0000000..3842af8 --- /dev/null +++ b/Docs/types/CreatureGroup.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CreatureGroup + + +

Back to Server.Spells.Necromancy

+

(AnimateDeadSpell) - CreatureGroup

+ (ctor) CreatureGroup( Type[] types, SummonEntry[] entries )
+ + diff --git a/Docs/types/CreepyPortraitAddon.html b/Docs/types/CreepyPortraitAddon.html new file mode 100644 index 0000000..e37875b --- /dev/null +++ b/Docs/types/CreepyPortraitAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CreepyPortraitAddon + + +

Back to Server.Items

+

CreepyPortraitAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) CreepyPortraitAddon()
+ (ctor) CreepyPortraitAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CreepyPortraitComponent.html b/Docs/types/CreepyPortraitComponent.html new file mode 100644 index 0000000..57553ba --- /dev/null +++ b/Docs/types/CreepyPortraitComponent.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - CreepyPortraitComponent + + +

Back to Server.Items

+

CreepyPortraitComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) CreepyPortraitComponent()
+ (ctor) CreepyPortraitComponent( Serial serial )
+ bool HandlesOnMovement( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Down()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnMovement( Mobile m, Point3D old )
+ virtual void Serialize( GenericWriter writer )
+ void Up()
+ + diff --git a/Docs/types/CreepyPortraitDeed.html b/Docs/types/CreepyPortraitDeed.html new file mode 100644 index 0000000..7b3efb9 --- /dev/null +++ b/Docs/types/CreepyPortraitDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CreepyPortraitDeed + + +

Back to Server.Items

+

CreepyPortraitDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CreepyPortraitDeed()
+ (ctor) CreepyPortraitDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CrescentBlade.html b/Docs/types/CrescentBlade.html new file mode 100644 index 0000000..abd4962 --- /dev/null +++ b/Docs/types/CrescentBlade.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - CrescentBlade + + +

Back to Server.Items

+

CrescentBlade : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) CrescentBlade()
+ (ctor) CrescentBlade( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CrimsonCincture.html b/Docs/types/CrimsonCincture.html new file mode 100644 index 0000000..7b69a74 --- /dev/null +++ b/Docs/types/CrimsonCincture.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CrimsonCincture + + +

Back to Server.Items

+

CrimsonCincture : HalfApron, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, ITokunoDyable

+ (ctor) CrimsonCincture()
+ (ctor) CrimsonCincture( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Crossbow.html b/Docs/types/Crossbow.html new file mode 100644 index 0000000..8b6e653 --- /dev/null +++ b/Docs/types/Crossbow.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - Crossbow + + +

Back to Server.Items

+

Crossbow : BaseRanged, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Crossbow()
+ (ctor) Crossbow( Serial serial )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefMaxRange( get; )
+ int EffectID( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CrossbowBolts.html b/Docs/types/CrossbowBolts.html new file mode 100644 index 0000000..e3f57dc --- /dev/null +++ b/Docs/types/CrossbowBolts.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CrossbowBolts + + +

Back to Server.Items

+

CrossbowBolts : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CrossbowBolts()
+ (ctor) CrossbowBolts( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CrownOfTalKeesh.html b/Docs/types/CrownOfTalKeesh.html new file mode 100644 index 0000000..45e6fe3 --- /dev/null +++ b/Docs/types/CrownOfTalKeesh.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - CrownOfTalKeesh + + +

Back to Server.Items

+

CrownOfTalKeesh : Bandana, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) CrownOfTalKeesh()
+ (ctor) CrownOfTalKeesh( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CrushingBlow.html b/Docs/types/CrushingBlow.html new file mode 100644 index 0000000..abc3fd8 --- /dev/null +++ b/Docs/types/CrushingBlow.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CrushingBlow + + +

Back to Server.Items

+

CrushingBlow : WeaponAbility

+ (ctor) CrushingBlow()
+ int BaseMana( get; )
+ double DamageScalar( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/CrystalCaveBarrier.html b/Docs/types/CrystalCaveBarrier.html new file mode 100644 index 0000000..fc83847 --- /dev/null +++ b/Docs/types/CrystalCaveBarrier.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CrystalCaveBarrier + + +

Back to Server.Engines.Quests.Necro

+

CrystalCaveBarrier : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CrystalCaveBarrier()
+ (ctor) CrystalCaveBarrier( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CrystalElemental.html b/Docs/types/CrystalElemental.html new file mode 100644 index 0000000..d1893a1 --- /dev/null +++ b/Docs/types/CrystalElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CrystalElemental + + +

Back to Server.Mobiles

+

CrystalElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) CrystalElemental()
+ (ctor) CrystalElemental( Serial serial )
+ bool BleedImmune( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CrystalRechargeInfo.html b/Docs/types/CrystalRechargeInfo.html new file mode 100644 index 0000000..4c46eea --- /dev/null +++ b/Docs/types/CrystalRechargeInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CrystalRechargeInfo + + +

Back to Server.Items

+

CrystalRechargeInfo

+ (static) CrystalRechargeInfo Get( Type type )
+ (ctor) CrystalRechargeInfo( Type type, int amount )
+ int Amount( get; )
+ Type Type( get; )
+ + diff --git a/Docs/types/CuSidhe.html b/Docs/types/CuSidhe.html new file mode 100644 index 0000000..95f0865 --- /dev/null +++ b/Docs/types/CuSidhe.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - CuSidhe + + +

Back to Server.Mobiles

+

CuSidhe : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) CuSidhe()
+ (ctor) CuSidhe( Serial serial )
+ (ctor) CuSidhe( string name )
+ bool CanAngerOnTame( get; )
+ bool CanHeal( get; )
+ bool CanHealOwner( get; )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ bool StatLossAfterTame( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CuSidheFormTalisman.html b/Docs/types/CuSidheFormTalisman.html new file mode 100644 index 0000000..9250463 --- /dev/null +++ b/Docs/types/CuSidheFormTalisman.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CuSidheFormTalisman + + +

Back to Server.Items

+

CuSidheFormTalisman : BaseFormTalisman, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITokunoDyable

+ (ctor) CuSidheFormTalisman()
+ (ctor) CuSidheFormTalisman( Serial serial )
+ TalismanForm Form( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CunningScroll.html b/Docs/types/CunningScroll.html new file mode 100644 index 0000000..6dc61a9 --- /dev/null +++ b/Docs/types/CunningScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CunningScroll + + +

Back to Server.Items

+

CunningScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) CunningScroll()
+ (ctor) CunningScroll( int amount )
+ (ctor) CunningScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CunningSpell.html b/Docs/types/CunningSpell.html new file mode 100644 index 0000000..dcde40e --- /dev/null +++ b/Docs/types/CunningSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CunningSpell + + +

Back to Server.Spells.Second

+

CunningSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) CunningSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/CupsArtifact.html b/Docs/types/CupsArtifact.html new file mode 100644 index 0000000..454174c --- /dev/null +++ b/Docs/types/CupsArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CupsArtifact + + +

Back to Server.Items

+

CupsArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CupsArtifact()
+ (ctor) CupsArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CureLevelInfo.html b/Docs/types/CureLevelInfo.html new file mode 100644 index 0000000..450470d --- /dev/null +++ b/Docs/types/CureLevelInfo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - CureLevelInfo + + +

Back to Server.Items

+

CureLevelInfo

+ (ctor) CureLevelInfo( Poison poison, double chance )
+ double Chance( get; )
+ Poison Poison( get; )
+ + diff --git a/Docs/types/CurePotion.html b/Docs/types/CurePotion.html new file mode 100644 index 0000000..9536a58 --- /dev/null +++ b/Docs/types/CurePotion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CurePotion + + +

Back to Server.Items

+

CurePotion : BaseCurePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) CurePotion()
+ (ctor) CurePotion( Serial serial )
+ CureLevelInfo[] LevelInfo( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CureScroll.html b/Docs/types/CureScroll.html new file mode 100644 index 0000000..7f24626 --- /dev/null +++ b/Docs/types/CureScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CureScroll + + +

Back to Server.Items

+

CureScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) CureScroll()
+ (ctor) CureScroll( int amount )
+ (ctor) CureScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CureSpell.html b/Docs/types/CureSpell.html new file mode 100644 index 0000000..229da25 --- /dev/null +++ b/Docs/types/CureSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CureSpell + + +

Back to Server.Spells.Second

+

CureSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) CureSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/CurrentExpansion.html b/Docs/types/CurrentExpansion.html new file mode 100644 index 0000000..38b720a --- /dev/null +++ b/Docs/types/CurrentExpansion.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CurrentExpansion + + +

Back to Server

+

CurrentExpansion

+ (static) void Configure()
+ (ctor) CurrentExpansion()
+ + diff --git a/Docs/types/CurrentTime.html b/Docs/types/CurrentTime.html new file mode 100644 index 0000000..358affe --- /dev/null +++ b/Docs/types/CurrentTime.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - CurrentTime + + +

Back to Server.Network

+

CurrentTime : Packet

+ (ctor) CurrentTime()
+ + diff --git a/Docs/types/CurseScroll.html b/Docs/types/CurseScroll.html new file mode 100644 index 0000000..f49414a --- /dev/null +++ b/Docs/types/CurseScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CurseScroll + + +

Back to Server.Items

+

CurseScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) CurseScroll()
+ (ctor) CurseScroll( int amount )
+ (ctor) CurseScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CurseSpell.html b/Docs/types/CurseSpell.html new file mode 100644 index 0000000..d4f647a --- /dev/null +++ b/Docs/types/CurseSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CurseSpell + + +

Back to Server.Spells.Fourth

+

CurseSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (static) void RemoveEffect( object state )
+ (static) bool UnderEffect( Mobile m )
+ (ctor) CurseSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/CurseWeaponScroll.html b/Docs/types/CurseWeaponScroll.html new file mode 100644 index 0000000..1ea9988 --- /dev/null +++ b/Docs/types/CurseWeaponScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CurseWeaponScroll + + +

Back to Server.Items

+

CurseWeaponScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) CurseWeaponScroll()
+ (ctor) CurseWeaponScroll( int amount )
+ (ctor) CurseWeaponScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CurseWeaponSpell.html b/Docs/types/CurseWeaponSpell.html new file mode 100644 index 0000000..023706d --- /dev/null +++ b/Docs/types/CurseWeaponSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CurseWeaponSpell + + +

Back to Server.Spells.Necromancy

+

CurseWeaponSpell : NecromancerSpell, ISpell

+

Nested Types: ExpireTimer, SoundEffectTimer

+ (ctor) CurseWeaponSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/Cursed.html b/Docs/types/Cursed.html new file mode 100644 index 0000000..7db5dc4 --- /dev/null +++ b/Docs/types/Cursed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Cursed + + +

Back to Server.Mobiles

+

Cursed : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Cursed()
+ (ctor) Cursed( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ bool ShowFameTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CursedSoul.html b/Docs/types/CursedSoul.html new file mode 100644 index 0000000..9707c5b --- /dev/null +++ b/Docs/types/CursedSoul.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CursedSoul + + +

Back to Server.Engines.Quests.Samurai

+

CursedSoul : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) CursedSoul()
+ (ctor) CursedSoul( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CurtainsAddon.html b/Docs/types/CurtainsAddon.html new file mode 100644 index 0000000..b8976cd --- /dev/null +++ b/Docs/types/CurtainsAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - CurtainsAddon + + +

Back to Server.Items

+

CurtainsAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) CurtainsAddon( Serial serial )
+ (ctor) CurtainsAddon( bool east )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CurtainsComponent.html b/Docs/types/CurtainsComponent.html new file mode 100644 index 0000000..47b45d3 --- /dev/null +++ b/Docs/types/CurtainsComponent.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CurtainsComponent + + +

Back to Server.Items

+

CurtainsComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IDyable

+ (ctor) CurtainsComponent( Serial serial )
+ (ctor) CurtainsComponent( int itemID, int closedID )
+ int ClosedID( get; set; )
+ bool DisplayWeight( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CurtainsDeed.html b/Docs/types/CurtainsDeed.html new file mode 100644 index 0000000..1151d40 --- /dev/null +++ b/Docs/types/CurtainsDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - CurtainsDeed + + +

Back to Server.Items

+

CurtainsDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) CurtainsDeed()
+ (ctor) CurtainsDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CurvedFlask.html b/Docs/types/CurvedFlask.html new file mode 100644 index 0000000..5c80b93 --- /dev/null +++ b/Docs/types/CurvedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CurvedFlask + + +

Back to Server.Items

+

CurvedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) CurvedFlask()
+ (ctor) CurvedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/CustomCategory.html b/Docs/types/CustomCategory.html new file mode 100644 index 0000000..3c1d3dd --- /dev/null +++ b/Docs/types/CustomCategory.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CustomCategory + + +

Back to Server.Gumps

+

(PlayerVendorCustomizeGump) - CustomCategory

+ (ctor) CustomCategory( Layer layer, int loc, bool canDye, CustomItem[] items )
+ bool CanDye( get; )
+ CustomItem[] Entries( get; )
+ Layer Layer( get; )
+ int LocNumber( get; )
+ + diff --git a/Docs/types/CustomCraft.html b/Docs/types/CustomCraft.html new file mode 100644 index 0000000..d61edfa --- /dev/null +++ b/Docs/types/CustomCraft.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - CustomCraft + + +

Back to Server.Engines.Craft

+

CustomCraft

+

Derived Types: TrapCraft

+ (ctor) CustomCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality )
+ CraftItem CraftItem( get; )
+ CraftSystem CraftSystem( get; )
+ Mobile From( get; )
+ int Quality( get; )
+ BaseTool Tool( get; )
+ Type TypeRes( get; )
+ virtual Item CompleteCraft( out int message )
+ virtual void EndCraftAction()
+ + diff --git a/Docs/types/CustomEnumAttribute.html b/Docs/types/CustomEnumAttribute.html new file mode 100644 index 0000000..6c35140 --- /dev/null +++ b/Docs/types/CustomEnumAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - CustomEnumAttribute + + +

Back to Server

+

CustomEnumAttribute : Attribute, _Attribute

+ (ctor) CustomEnumAttribute( string[] names )
+ string[] Names( get; )
+ + diff --git a/Docs/types/CustomHairstylist.html b/Docs/types/CustomHairstylist.html new file mode 100644 index 0000000..e469b78 --- /dev/null +++ b/Docs/types/CustomHairstylist.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - CustomHairstylist + + +

Back to Server.Mobiles

+

CustomHairstylist : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) CustomHairstylist()
+ (ctor) CustomHairstylist( Serial serial )
+ bool ClickTitle( get; )
+ bool IsActiveBuyer( get; )
+ bool IsActiveSeller( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetHairHue()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual bool OnBuyItems( Mobile buyer, List<BuyItemResponse> list )
+ virtual void Serialize( GenericWriter writer )
+ virtual void VendorBuy( Mobile from )
+ + diff --git a/Docs/types/CustomHueGroup.html b/Docs/types/CustomHueGroup.html new file mode 100644 index 0000000..0602f21 --- /dev/null +++ b/Docs/types/CustomHueGroup.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CustomHueGroup + + +

Back to Server.Items

+

CustomHueGroup

+ (ctor) CustomHueGroup( string name, int[] hues )
+ (ctor) CustomHueGroup( int name, int[] hues )
+ int[] Hues( get; )
+ int Name( get; )
+ string NameString( get; )
+ + diff --git a/Docs/types/CustomHuePicker.html b/Docs/types/CustomHuePicker.html new file mode 100644 index 0000000..1d7a7a6 --- /dev/null +++ b/Docs/types/CustomHuePicker.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - CustomHuePicker + + +

Back to Server.Items

+

CustomHuePicker

+ (ctor) CustomHuePicker( CustomHueGroup[] groups, bool defaultSupported )
+ (ctor) CustomHuePicker( CustomHueGroup[] groups, bool defaultSupported, int title )
+ (ctor) CustomHuePicker( CustomHueGroup[] groups, bool defaultSupported, string title )
+ bool DefaultSupported( get; )
+ CustomHueGroup[] Groups( get; )
+ int Title( get; )
+ string TitleString( get; )
+ + diff --git a/Docs/types/CustomHuePickerCallback.html b/Docs/types/CustomHuePickerCallback.html new file mode 100644 index 0000000..56356c3 --- /dev/null +++ b/Docs/types/CustomHuePickerCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - CustomHuePickerCallback + + +

Back to Server.Items

+

CustomHuePickerCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) CustomHuePickerCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, object state, int hue, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, object state, int hue )
+ + diff --git a/Docs/types/CustomHuePickerGump.html b/Docs/types/CustomHuePickerGump.html new file mode 100644 index 0000000..14ed255 --- /dev/null +++ b/Docs/types/CustomHuePickerGump.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - CustomHuePickerGump + + +

Back to Server.Items

+

CustomHuePickerGump : Gump

+ (ctor) CustomHuePickerGump( Mobile from, CustomHuePicker definition, CustomHuePickerCallback callback, object state )
+ int GetRadioID( int group, int index )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void RenderBackground()
+ void RenderCategories()
+ + diff --git a/Docs/types/CustomItem.html b/Docs/types/CustomItem.html new file mode 100644 index 0000000..14a0542 --- /dev/null +++ b/Docs/types/CustomItem.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - CustomItem + + +

Back to Server.Gumps

+

(PlayerVendorCustomizeGump) - CustomItem

+ (ctor) CustomItem( Type type, int loc )
+ (ctor) CustomItem( int itemID, int loc )
+ (ctor) CustomItem( int itemID, int loc, bool longText )
+ (ctor) CustomItem( Type type, int loc, int art )
+ (ctor) CustomItem( Type type, int itemID, int loc, int art, bool longText )
+ int ArtNumber( get; )
+ int ItemID( get; )
+ int LocNumber( get; )
+ bool LongText( get; )
+ Type Type( get; )
+ Item Create()
+ + diff --git a/Docs/types/Cutlass.html b/Docs/types/Cutlass.html new file mode 100644 index 0000000..b682aa6 --- /dev/null +++ b/Docs/types/Cutlass.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Cutlass + + +

Back to Server.Items

+

Cutlass : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: CaptainQuacklebushsCutlass

+ (ctor) Cutlass()
+ (ctor) Cutlass( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Cyclops.html b/Docs/types/Cyclops.html new file mode 100644 index 0000000..8d8ab81 --- /dev/null +++ b/Docs/types/Cyclops.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Cyclops + + +

Back to Server.Mobiles

+

Cyclops : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Cyclops()
+ (ctor) Cyclops( Serial serial )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DFAlgorithm.html b/Docs/types/DFAlgorithm.html new file mode 100644 index 0000000..6559589 --- /dev/null +++ b/Docs/types/DFAlgorithm.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DFAlgorithm + + +

Back to Server.Misc

+

DFAlgorithm (Enum)

+ Standard = 0,
+ PainSpike = 1
+ + diff --git a/Docs/types/Daemon.html b/Docs/types/Daemon.html new file mode 100644 index 0000000..1dd4b3d --- /dev/null +++ b/Docs/types/Daemon.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Daemon + + +

Back to Server.Mobiles

+

Daemon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Daemon()
+ (ctor) Daemon( Serial serial )
+ bool CanRummageCorpses( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ Ethic EthicAllegiance( get; )
+ Faction FactionAllegiance( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaemonArms.html b/Docs/types/DaemonArms.html new file mode 100644 index 0000000..c422e1f --- /dev/null +++ b/Docs/types/DaemonArms.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - DaemonArms + + +

Back to Server.Items

+

DaemonArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DaemonArms()
+ (ctor) DaemonArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaemonBlood.html b/Docs/types/DaemonBlood.html new file mode 100644 index 0000000..f38210b --- /dev/null +++ b/Docs/types/DaemonBlood.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DaemonBlood + + +

Back to Server.Items

+

DaemonBlood : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) DaemonBlood()
+ (ctor) DaemonBlood( Serial serial )
+ (ctor) DaemonBlood( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaemonBloodChest.html b/Docs/types/DaemonBloodChest.html new file mode 100644 index 0000000..cb01e66 --- /dev/null +++ b/Docs/types/DaemonBloodChest.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DaemonBloodChest + + +

Back to Server.Engines.Quests.Haven

+

DaemonBloodChest : MetalChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) DaemonBloodChest()
+ (ctor) DaemonBloodChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaemonBone.html b/Docs/types/DaemonBone.html new file mode 100644 index 0000000..341000e --- /dev/null +++ b/Docs/types/DaemonBone.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DaemonBone + + +

Back to Server.Items

+

DaemonBone : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DaemonBone()
+ (ctor) DaemonBone( int amount )
+ (ctor) DaemonBone( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaemonChest.html b/Docs/types/DaemonChest.html new file mode 100644 index 0000000..0f26eec --- /dev/null +++ b/Docs/types/DaemonChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - DaemonChest + + +

Back to Server.Items

+

DaemonChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DaemonChest()
+ (ctor) DaemonChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaemonGloves.html b/Docs/types/DaemonGloves.html new file mode 100644 index 0000000..f42c649 --- /dev/null +++ b/Docs/types/DaemonGloves.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - DaemonGloves + + +

Back to Server.Items

+

DaemonGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DaemonGloves()
+ (ctor) DaemonGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaemonHelm.html b/Docs/types/DaemonHelm.html new file mode 100644 index 0000000..12a2f7f --- /dev/null +++ b/Docs/types/DaemonHelm.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - DaemonHelm + + +

Back to Server.Items

+

DaemonHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DaemonHelm()
+ (ctor) DaemonHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaemonLegs.html b/Docs/types/DaemonLegs.html new file mode 100644 index 0000000..079c375 --- /dev/null +++ b/Docs/types/DaemonLegs.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - DaemonLegs + + +

Back to Server.Items

+

DaemonLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DaemonLegs()
+ (ctor) DaemonLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Dagger.html b/Docs/types/Dagger.html new file mode 100644 index 0000000..1897c14 --- /dev/null +++ b/Docs/types/Dagger.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - Dagger + + +

Back to Server.Items

+

Dagger : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: NightsKiss, OblivionsNeedle

+ (ctor) Dagger()
+ (ctor) Dagger( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DaimyosHelm.html b/Docs/types/DaimyosHelm.html new file mode 100644 index 0000000..01edda9 --- /dev/null +++ b/Docs/types/DaimyosHelm.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DaimyosHelm + + +

Back to Server.Items

+

DaimyosHelm : PlateBattleKabuto, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DaimyosHelm()
+ (ctor) DaimyosHelm( Serial serial )
+ int BaseColdResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Daisho.html b/Docs/types/Daisho.html new file mode 100644 index 0000000..0e7bf49 --- /dev/null +++ b/Docs/types/Daisho.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Daisho + + +

Back to Server.Items

+

Daisho : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: SwordsOfProsperity

+ (ctor) Daisho()
+ (ctor) Daisho( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DamageEntry.html b/Docs/types/DamageEntry.html new file mode 100644 index 0000000..8e74f3c --- /dev/null +++ b/Docs/types/DamageEntry.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DamageEntry + + +

Back to Server

+

DamageEntry

+ (static) TimeSpan ExpireDelay( get; set; )
+ (ctor) DamageEntry( Mobile damager )
+ int DamageGiven( get; set; )
+ Mobile Damager( get; )
+ bool HasExpired( get; )
+ DateTime LastDamage( get; set; )
+ List<DamageEntry> Responsible( get; set; )
+ + diff --git a/Docs/types/DamagePacket.html b/Docs/types/DamagePacket.html new file mode 100644 index 0000000..0cfcf14 --- /dev/null +++ b/Docs/types/DamagePacket.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DamagePacket + + +

Back to Server.Network

+

DamagePacket : Packet

+ (ctor) DamagePacket( Mobile m, int amount )
+ + diff --git a/Docs/types/DamagePacketOld.html b/Docs/types/DamagePacketOld.html new file mode 100644 index 0000000..55980db --- /dev/null +++ b/Docs/types/DamagePacketOld.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DamagePacketOld + + +

Back to Server.Network

+

DamagePacketOld : Packet

+ (ctor) DamagePacketOld( Mobile m, int amount )
+ + diff --git a/Docs/types/DamageStore.html b/Docs/types/DamageStore.html new file mode 100644 index 0000000..8a36378 --- /dev/null +++ b/Docs/types/DamageStore.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DamageStore + + +

Back to Server.Mobiles

+

DamageStore : IComparable

+ (ctor) DamageStore( Mobile m, int damage )
+ virtual int CompareTo( object obj )
+ + diff --git a/Docs/types/DamageTimer.html b/Docs/types/DamageTimer.html new file mode 100644 index 0000000..074ab7a --- /dev/null +++ b/Docs/types/DamageTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DamageTimer + + +

Back to Server.Items

+

(ControlPanel) - DamageTimer : Timer

+ (ctor) DamageTimer( ControlPanel panel, Mobile to )
+ void End()
+ virtual void OnTick()
+ + diff --git a/Docs/types/DamagedBooksArtifact.html b/Docs/types/DamagedBooksArtifact.html new file mode 100644 index 0000000..d9aa7ee --- /dev/null +++ b/Docs/types/DamagedBooksArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DamagedBooksArtifact + + +

Back to Server.Items

+

DamagedBooksArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DamagedBooksArtifact()
+ (ctor) DamagedBooksArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkFlowerTapestryEastAddon.html b/Docs/types/DarkFlowerTapestryEastAddon.html new file mode 100644 index 0000000..672c528 --- /dev/null +++ b/Docs/types/DarkFlowerTapestryEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DarkFlowerTapestryEastAddon + + +

Back to Server.Items

+

DarkFlowerTapestryEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) DarkFlowerTapestryEastAddon()
+ (ctor) DarkFlowerTapestryEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkFlowerTapestryEastDeed.html b/Docs/types/DarkFlowerTapestryEastDeed.html new file mode 100644 index 0000000..faed2f5 --- /dev/null +++ b/Docs/types/DarkFlowerTapestryEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DarkFlowerTapestryEastDeed + + +

Back to Server.Items

+

DarkFlowerTapestryEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkFlowerTapestryEastDeed()
+ (ctor) DarkFlowerTapestryEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkFlowerTapestrySouthAddon.html b/Docs/types/DarkFlowerTapestrySouthAddon.html new file mode 100644 index 0000000..9cdbfa3 --- /dev/null +++ b/Docs/types/DarkFlowerTapestrySouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DarkFlowerTapestrySouthAddon + + +

Back to Server.Items

+

DarkFlowerTapestrySouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) DarkFlowerTapestrySouthAddon()
+ (ctor) DarkFlowerTapestrySouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkFlowerTapestrySouthDeed.html b/Docs/types/DarkFlowerTapestrySouthDeed.html new file mode 100644 index 0000000..73bc3d2 --- /dev/null +++ b/Docs/types/DarkFlowerTapestrySouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DarkFlowerTapestrySouthDeed + + +

Back to Server.Items

+

DarkFlowerTapestrySouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkFlowerTapestrySouthDeed()
+ (ctor) DarkFlowerTapestrySouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkSandstoneFloorN.html b/Docs/types/DarkSandstoneFloorN.html new file mode 100644 index 0000000..4aa4ca6 --- /dev/null +++ b/Docs/types/DarkSandstoneFloorN.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DarkSandstoneFloorN + + +

Back to Server.Items

+

DarkSandstoneFloorN : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkSandstoneFloorN()
+ (ctor) DarkSandstoneFloorN( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkSandstoneFloorW.html b/Docs/types/DarkSandstoneFloorW.html new file mode 100644 index 0000000..061657f --- /dev/null +++ b/Docs/types/DarkSandstoneFloorW.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DarkSandstoneFloorW + + +

Back to Server.Items

+

DarkSandstoneFloorW : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkSandstoneFloorW()
+ (ctor) DarkSandstoneFloorW( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkSapphire.html b/Docs/types/DarkSapphire.html new file mode 100644 index 0000000..a234e6b --- /dev/null +++ b/Docs/types/DarkSapphire.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DarkSapphire + + +

Back to Server.Items

+

DarkSapphire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkSapphire()
+ (ctor) DarkSapphire( int amount )
+ (ctor) DarkSapphire( Serial serial )
+ (ctor) DarkSapphire( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkSource.html b/Docs/types/DarkSource.html new file mode 100644 index 0000000..2557b35 --- /dev/null +++ b/Docs/types/DarkSource.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DarkSource + + +

Back to Server.Items

+

DarkSource : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkSource()
+ (ctor) DarkSource( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkTidesHorn.html b/Docs/types/DarkTidesHorn.html new file mode 100644 index 0000000..a685e47 --- /dev/null +++ b/Docs/types/DarkTidesHorn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DarkTidesHorn + + +

Back to Server.Engines.Quests.Necro

+

DarkTidesHorn : HornOfRetreat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkTidesHorn()
+ (ctor) DarkTidesHorn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool ValidateUse( Mobile from )
+ + diff --git a/Docs/types/DarkTidesQuest.html b/Docs/types/DarkTidesQuest.html new file mode 100644 index 0000000..f5b4f86 --- /dev/null +++ b/Docs/types/DarkTidesQuest.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - DarkTidesQuest + + +

Back to Server.Engines.Quests.Necro

+

DarkTidesQuest : QuestSystem

+ (static) bool HasLostCallingScroll( Mobile from )
+ (ctor) DarkTidesQuest()
+ (ctor) DarkTidesQuest( PlayerMobile from )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual bool IgnoreYoungProtection( Mobile from )
+ + diff --git a/Docs/types/DarkTidesTeleporter.html b/Docs/types/DarkTidesTeleporter.html new file mode 100644 index 0000000..0fe8b26 --- /dev/null +++ b/Docs/types/DarkTidesTeleporter.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DarkTidesTeleporter + + +

Back to Server.Engines.Quests.Necro

+

DarkTidesTeleporter : DynamicTeleporter, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkTidesTeleporter()
+ (ctor) DarkTidesTeleporter( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool GetDestination( PlayerMobile player, ref Point3D loc, ref Map map )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkWisp.html b/Docs/types/DarkWisp.html new file mode 100644 index 0000000..b2c498e --- /dev/null +++ b/Docs/types/DarkWisp.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DarkWisp + + +

Back to Server.Mobiles

+

DarkWisp : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DarkWisp()
+ (ctor) DarkWisp( Serial serial )
+ Ethic EthicAllegiance( get; )
+ OppositionGroup OppositionGroup( get; )
+ TimeSpan ReacquireDelay( get; )
+ InhumanSpeech SpeechType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkWolfFamiliar.html b/Docs/types/DarkWolfFamiliar.html new file mode 100644 index 0000000..39ad846 --- /dev/null +++ b/Docs/types/DarkWolfFamiliar.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DarkWolfFamiliar + + +

Back to Server.Mobiles

+

DarkWolfFamiliar : BaseFamiliar, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DarkWolfFamiliar()
+ (ctor) DarkWolfFamiliar( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkWoodDoor.html b/Docs/types/DarkWoodDoor.html new file mode 100644 index 0000000..4b205a4 --- /dev/null +++ b/Docs/types/DarkWoodDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DarkWoodDoor + + +

Back to Server.Items

+

DarkWoodDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) DarkWoodDoor( DoorFacing facing )
+ (ctor) DarkWoodDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkWoodGate.html b/Docs/types/DarkWoodGate.html new file mode 100644 index 0000000..8d21c36 --- /dev/null +++ b/Docs/types/DarkWoodGate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DarkWoodGate + + +

Back to Server.Items

+

DarkWoodGate : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) DarkWoodGate( DoorFacing facing )
+ (ctor) DarkWoodGate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkWoodHouseDoor.html b/Docs/types/DarkWoodHouseDoor.html new file mode 100644 index 0000000..e3bdbc0 --- /dev/null +++ b/Docs/types/DarkWoodHouseDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DarkWoodHouseDoor + + +

Back to Server.Items

+

DarkWoodHouseDoor : BaseHouseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable, ISecurable

+ (ctor) DarkWoodHouseDoor( DoorFacing facing )
+ (ctor) DarkWoodHouseDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkWoodWall.html b/Docs/types/DarkWoodWall.html new file mode 100644 index 0000000..3752d32 --- /dev/null +++ b/Docs/types/DarkWoodWall.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DarkWoodWall + + +

Back to Server.Items

+

DarkWoodWall : BaseWall, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DarkWoodWall( DarkWoodWallTypes type )
+ (ctor) DarkWoodWall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkWoodWallTypes.html b/Docs/types/DarkWoodWallTypes.html new file mode 100644 index 0000000..8dcc200 --- /dev/null +++ b/Docs/types/DarkWoodWallTypes.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - DarkWoodWallTypes + + +

Back to Server.Items

+

DarkWoodWallTypes (Enum)

+ Corner = 0,
+ SouthWall = 1,
+ EastWall = 2,
+ CornerPost = 3,
+ EastDoorFrame = 4,
+ SouthDoorFrame = 5,
+ WestDoorFrame = 6,
+ NorthDoorFrame = 7,
+ SouthWindow = 8,
+ EastWindow = 9,
+ CornerMedium = 10,
+ EastWallMedium = 11,
+ SouthWallMedium = 12,
+ CornerPostMedium = 13,
+ CornerShort = 14,
+ EastWallShort = 15,
+ SouthWallShort = 16,
+ CornerPostShort = 17,
+ SouthWallVShort = 18,
+ EastWallVShort = 19
+ + diff --git a/Docs/types/DarkYarn.html b/Docs/types/DarkYarn.html new file mode 100644 index 0000000..9be7628 --- /dev/null +++ b/Docs/types/DarkYarn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DarkYarn + + +

Back to Server.Items

+

DarkYarn : BaseClothMaterial, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) DarkYarn()
+ (ctor) DarkYarn( int amount )
+ (ctor) DarkYarn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarkenedSky.html b/Docs/types/DarkenedSky.html new file mode 100644 index 0000000..75a5326 --- /dev/null +++ b/Docs/types/DarkenedSky.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DarkenedSky + + +

Back to Server.Items

+

DarkenedSky : Kama, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) DarkenedSky()
+ (ctor) DarkenedSky( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DarknightCreeper.html b/Docs/types/DarknightCreeper.html new file mode 100644 index 0000000..0e94f02 --- /dev/null +++ b/Docs/types/DarknightCreeper.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - DarknightCreeper + + +

Back to Server.Mobiles

+

DarknightCreeper : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DarknightCreeper()
+ (ctor) DarknightCreeper( Serial serial )
+ bool AreaPeaceImmune( get; )
+ bool BardImmune( get; )
+ bool BleedImmune( get; )
+ Poison HitPoison( get; )
+ bool IgnoreYoungProtection( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DartBoard.html b/Docs/types/DartBoard.html new file mode 100644 index 0000000..d2bbfa9 --- /dev/null +++ b/Docs/types/DartBoard.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DartBoard + + +

Back to Server.Items

+

DartBoard : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) DartBoard()
+ (ctor) DartBoard( Serial serial )
+ (ctor) DartBoard( bool east )
+ bool East( get; )
+ bool NeedsWall( get; )
+ Point3D WallPosition( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Throw( Mobile from )
+ + diff --git a/Docs/types/DartBoardEastAddon.html b/Docs/types/DartBoardEastAddon.html new file mode 100644 index 0000000..0d59e71 --- /dev/null +++ b/Docs/types/DartBoardEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DartBoardEastAddon + + +

Back to Server.Items

+

DartBoardEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) DartBoardEastAddon()
+ (ctor) DartBoardEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DartBoardEastDeed.html b/Docs/types/DartBoardEastDeed.html new file mode 100644 index 0000000..9497b02 --- /dev/null +++ b/Docs/types/DartBoardEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DartBoardEastDeed + + +

Back to Server.Items

+

DartBoardEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DartBoardEastDeed()
+ (ctor) DartBoardEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DartBoardSouthAddon.html b/Docs/types/DartBoardSouthAddon.html new file mode 100644 index 0000000..b453f1a --- /dev/null +++ b/Docs/types/DartBoardSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DartBoardSouthAddon + + +

Back to Server.Items

+

DartBoardSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) DartBoardSouthAddon()
+ (ctor) DartBoardSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DartBoardSouthDeed.html b/Docs/types/DartBoardSouthDeed.html new file mode 100644 index 0000000..1532466 --- /dev/null +++ b/Docs/types/DartBoardSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DartBoardSouthDeed + + +

Back to Server.Items

+

DartBoardSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DartBoardSouthDeed()
+ (ctor) DartBoardSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DartTrapCraft.html b/Docs/types/DartTrapCraft.html new file mode 100644 index 0000000..ad5e6fe --- /dev/null +++ b/Docs/types/DartTrapCraft.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DartTrapCraft + + +

Back to Server.Engines.Craft

+

DartTrapCraft : TrapCraft

+ (ctor) DartTrapCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality )
+ TrapType TrapType( get; )
+ + diff --git a/Docs/types/DataItem.html b/Docs/types/DataItem.html new file mode 100644 index 0000000..b3d2109 --- /dev/null +++ b/Docs/types/DataItem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DataItem + + +

Back to Server.Engines.Reports

+

DataItem

+ (ctor) DataItem()
+ (ctor) DataItem( string label, string desc, float data, float start, float sweep, Color clr )
+ string Description( get; set; )
+ Color ItemColor( get; set; )
+ string Label( get; set; )
+ float StartPos( get; set; )
+ float SweepSize( get; set; )
+ float Value( get; set; )
+ + diff --git a/Docs/types/DataPath.html b/Docs/types/DataPath.html new file mode 100644 index 0000000..47130b0 --- /dev/null +++ b/Docs/types/DataPath.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DataPath + + +

Back to Server.Misc

+

DataPath

+ (static) void Configure()
+ (static) string GetPath( string subName, string keyName )
+ (ctor) DataPath()
+ + diff --git a/Docs/types/DataRecord.html b/Docs/types/DataRecord.html new file mode 100644 index 0000000..28cf224 --- /dev/null +++ b/Docs/types/DataRecord.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DataRecord + + +

Back to Server.Multis

+

DataRecord

+ (ctor) DataRecord( Spreadsheet ss, object[] data )
+ object[] Data( get; )
+ object Item( get; )
+ object Item( get; )
+ Spreadsheet Spreadsheet( get; )
+ int GetInt32( string name )
+ int GetInt32( object obj )
+ int GetInt32( int id )
+ string GetString( string name )
+ + diff --git a/Docs/types/DatabaseCommandQueue.html b/Docs/types/DatabaseCommandQueue.html new file mode 100644 index 0000000..54a4673 --- /dev/null +++ b/Docs/types/DatabaseCommandQueue.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DatabaseCommandQueue + + +

Back to Server.Engines.MyRunUO

+

DatabaseCommandQueue

+ (ctor) DatabaseCommandQueue( string completionString, string threadName )
+ (ctor) DatabaseCommandQueue( string connectionString, string completionString, string threadName )
+ bool HasCompleted( get; )
+ void Enqueue( object obj )
+ void Thread_Start()
+ + diff --git a/Docs/types/Dates.html b/Docs/types/Dates.html new file mode 100644 index 0000000..3813e36 --- /dev/null +++ b/Docs/types/Dates.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Dates + + +

Back to Server.Items

+

Dates : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Dates()
+ (ctor) Dates( int amount )
+ (ctor) Dates( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DawnsMusicBox.html b/Docs/types/DawnsMusicBox.html new file mode 100644 index 0000000..bbdefe1 --- /dev/null +++ b/Docs/types/DawnsMusicBox.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - DawnsMusicBox + + +

Back to Server.Items

+

DawnsMusicBox : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (static) DawnsMusicInfo GetInfo( MusicName name )
+ (static) void Initialize()
+ (static) MusicName RandomTrack( DawnsMusicRarity rarity )
+ (ctor) DawnsMusicBox()
+ (ctor) DawnsMusicBox( Serial serial )
+ int LabelNumber( get; )
+ SecureLevel Level( get; set; )
+ List<MusicName> Tracks( get; )
+ void Animate()
+ virtual void Deserialize( GenericReader reader )
+ void EndMusic( Mobile m )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ bool HasAccces( Mobile m )
+ virtual void OnAfterDuped( Item newItem )
+ virtual void OnDoubleClick( Mobile from )
+ void PlayMusic( Mobile m, MusicName music )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DawnsMusicBoxGump.html b/Docs/types/DawnsMusicBoxGump.html new file mode 100644 index 0000000..8742b0d --- /dev/null +++ b/Docs/types/DawnsMusicBoxGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DawnsMusicBoxGump + + +

Back to Server.Gumps

+

DawnsMusicBoxGump : Gump

+ (ctor) DawnsMusicBoxGump( DawnsMusicBox box )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/DawnsMusicGear.html b/Docs/types/DawnsMusicGear.html new file mode 100644 index 0000000..d75fa67 --- /dev/null +++ b/Docs/types/DawnsMusicGear.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DawnsMusicGear + + +

Back to Server.Items

+

DawnsMusicGear : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (static) DawnsMusicGear RandomCommon( get; )
+ (static) DawnsMusicGear RandomRare( get; )
+ (static) DawnsMusicGear RandomUncommon( get; )
+ (ctor) DawnsMusicGear()
+ (ctor) DawnsMusicGear( Serial serial )
+ (ctor) DawnsMusicGear( MusicName music )
+ MusicName Music( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DawnsMusicInfo.html b/Docs/types/DawnsMusicInfo.html new file mode 100644 index 0000000..c5bfadf --- /dev/null +++ b/Docs/types/DawnsMusicInfo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DawnsMusicInfo + + +

Back to Server.Items

+

DawnsMusicInfo

+ (ctor) DawnsMusicInfo( int name, DawnsMusicRarity rarity )
+ int Name( get; )
+ DawnsMusicRarity Rarity( get; )
+ + diff --git a/Docs/types/DawnsMusicRarity.html b/Docs/types/DawnsMusicRarity.html new file mode 100644 index 0000000..1b85808 --- /dev/null +++ b/Docs/types/DawnsMusicRarity.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DawnsMusicRarity + + +

Back to Server.Items

+

DawnsMusicRarity (Enum)

+ Common = 0,
+ Uncommon = 1,
+ Rare = 2
+ + diff --git a/Docs/types/DeadWood.html b/Docs/types/DeadWood.html new file mode 100644 index 0000000..5544117 --- /dev/null +++ b/Docs/types/DeadWood.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DeadWood + + +

Back to Server.Items

+

DeadWood : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) DeadWood()
+ (ctor) DeadWood( Serial serial )
+ (ctor) DeadWood( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeadlyImp.html b/Docs/types/DeadlyImp.html new file mode 100644 index 0000000..833cdb9 --- /dev/null +++ b/Docs/types/DeadlyImp.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DeadlyImp + + +

Back to Server.Engines.Quests.Samurai

+

DeadlyImp : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DeadlyImp()
+ (ctor) DeadlyImp( Serial serial )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeadlyPoisonPotion.html b/Docs/types/DeadlyPoisonPotion.html new file mode 100644 index 0000000..7968ee0 --- /dev/null +++ b/Docs/types/DeadlyPoisonPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DeadlyPoisonPotion + + +

Back to Server.Items

+

DeadlyPoisonPotion : BasePoisonPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) DeadlyPoisonPotion()
+ (ctor) DeadlyPoisonPotion( Serial serial )
+ double MaxPoisoningSkill( get; )
+ double MinPoisoningSkill( get; )
+ Poison Poison( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeathAdder.html b/Docs/types/DeathAdder.html new file mode 100644 index 0000000..da19f42 --- /dev/null +++ b/Docs/types/DeathAdder.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DeathAdder + + +

Back to Server.Mobiles

+

DeathAdder : BaseFamiliar, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DeathAdder()
+ (ctor) DeathAdder( Serial serial )
+ Poison HitPoison( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeathAdderCharmTarget.html b/Docs/types/DeathAdderCharmTarget.html new file mode 100644 index 0000000..1a7e1a6 --- /dev/null +++ b/Docs/types/DeathAdderCharmTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DeathAdderCharmTarget + + +

Back to Server.Mobiles

+

(BaseCreature) - DeathAdderCharmTarget : Target

+ (ctor) DeathAdderCharmTarget( BaseCreature charmed )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/DeathAnimation.html b/Docs/types/DeathAnimation.html new file mode 100644 index 0000000..91f168a --- /dev/null +++ b/Docs/types/DeathAnimation.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DeathAnimation + + +

Back to Server.Network

+

DeathAnimation : Packet

+ (ctor) DeathAnimation( Mobile killed, Item corpse )
+ + diff --git a/Docs/types/DeathMoveResult.html b/Docs/types/DeathMoveResult.html new file mode 100644 index 0000000..0182ce4 --- /dev/null +++ b/Docs/types/DeathMoveResult.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DeathMoveResult + + +

Back to Server

+

DeathMoveResult (Enum)

+ MoveToCorpse = 0,
+ RemainEquiped = 1,
+ MoveToBackpack = 2
+ + diff --git a/Docs/types/DeathRobe.html b/Docs/types/DeathRobe.html new file mode 100644 index 0000000..e8d0364 --- /dev/null +++ b/Docs/types/DeathRobe.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - DeathRobe + + +

Back to Server.Items

+

DeathRobe : Robe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+

Nested Types: InternalTimer

+ (ctor) DeathRobe()
+ (ctor) DeathRobe( Serial serial )
+ bool DisplayLootType( get; )
+ void BeginDecay( TimeSpan delay )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual bool OnDroppedToMobile( Mobile from, Mobile target )
+ virtual bool OnDroppedToWorld( Mobile from, Point3D p )
+ bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeathShroud.html b/Docs/types/DeathShroud.html new file mode 100644 index 0000000..bc95fbf --- /dev/null +++ b/Docs/types/DeathShroud.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DeathShroud + + +

Back to Server.Items

+

DeathShroud : BaseSuit, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DeathShroud()
+ (ctor) DeathShroud( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeathStatus.html b/Docs/types/DeathStatus.html new file mode 100644 index 0000000..6a7d21d --- /dev/null +++ b/Docs/types/DeathStatus.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DeathStatus + + +

Back to Server.Network

+

DeathStatus : Packet

+ (static) Packet Instantiate( bool dead )
+ (ctor) DeathStatus( bool dead )
+ + diff --git a/Docs/types/DeathStrike.html b/Docs/types/DeathStrike.html new file mode 100644 index 0000000..c42f35d --- /dev/null +++ b/Docs/types/DeathStrike.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DeathStrike + + +

Back to Server.Spells.Ninjitsu

+

DeathStrike : NinjaMove

+

Nested Types: DeathStrikeInfo

+ (static) void AddStep( Mobile m )
+ (static) void ProcessDeathStrike( object state )
+ (ctor) DeathStrike()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ double RequiredSkill( get; )
+ virtual double GetDamageScalar( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/DeathStrikeInfo.html b/Docs/types/DeathStrikeInfo.html new file mode 100644 index 0000000..d286664 --- /dev/null +++ b/Docs/types/DeathStrikeInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DeathStrikeInfo + + +

Back to Server.Spells.Ninjitsu

+

(DeathStrike) - DeathStrikeInfo

+ (ctor) DeathStrikeInfo( Mobile target, Mobile attacker, int damageBonus, bool isRanged )
+ + diff --git a/Docs/types/DeathwatchBeetle.html b/Docs/types/DeathwatchBeetle.html new file mode 100644 index 0000000..ec8682d --- /dev/null +++ b/Docs/types/DeathwatchBeetle.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - DeathwatchBeetle + + +

Back to Server.Mobiles

+

DeathwatchBeetle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DeathwatchBeetle()
+ (ctor) DeathwatchBeetle( Serial serial )
+ int Hides( get; )
+ virtual void AlterMeleeDamageTo( Mobile to, ref int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ void PoisonAttack( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeathwatchBeetleHatchling.html b/Docs/types/DeathwatchBeetleHatchling.html new file mode 100644 index 0000000..8a67403 --- /dev/null +++ b/Docs/types/DeathwatchBeetleHatchling.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - DeathwatchBeetleHatchling + + +

Back to Server.Mobiles

+

DeathwatchBeetleHatchling : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DeathwatchBeetleHatchling()
+ (ctor) DeathwatchBeetleHatchling( Serial serial )
+ int Hides( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecayLevel.html b/Docs/types/DecayLevel.html new file mode 100644 index 0000000..0709dd3 --- /dev/null +++ b/Docs/types/DecayLevel.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DecayLevel + + +

Back to Server.Multis

+

DecayLevel (Enum)

+ Ageless = 0,
+ LikeNew = 1,
+ Slightly = 2,
+ Somewhat = 3,
+ Fairly = 4,
+ Greatly = 5,
+ IDOC = 6,
+ Collapsed = 7,
+ DemolitionPending = 8
+ + diff --git a/Docs/types/DecayTimer.html b/Docs/types/DecayTimer.html new file mode 100644 index 0000000..09bf299 --- /dev/null +++ b/Docs/types/DecayTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DecayTimer + + +

Back to Server.Multis

+

(BaseBoat) - DecayTimer : Timer

+ (ctor) DecayTimer( BaseBoat boat )
+ virtual void OnTick()
+ + diff --git a/Docs/types/DecayType.html b/Docs/types/DecayType.html new file mode 100644 index 0000000..54d01f7 --- /dev/null +++ b/Docs/types/DecayType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecayType + + +

Back to Server.Multis

+

DecayType (Enum)

+ Ageless = 0,
+ AutoRefresh = 1,
+ ManualRefresh = 2,
+ Condemned = 3
+ + diff --git a/Docs/types/DecayedCorpse.html b/Docs/types/DecayedCorpse.html new file mode 100644 index 0000000..048b295 --- /dev/null +++ b/Docs/types/DecayedCorpse.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - DecayedCorpse + + +

Back to Server.Items

+

DecayedCorpse : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer

+ (ctor) DecayedCorpse( Serial serial )
+ (ctor) DecayedCorpse( string name )
+ bool DisplaysContent( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ void BeginDecay( TimeSpan delay )
+ virtual bool CheckContentDisplay( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeceitBrazier.html b/Docs/types/DeceitBrazier.html new file mode 100644 index 0000000..8a608b5 --- /dev/null +++ b/Docs/types/DeceitBrazier.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - DeceitBrazier + + +

Back to Server.Items

+

DeceitBrazier : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: (Anonymous-Type)--c__DisplayClass1, (Anonymous-Type)--c__DisplayClass3

+ (static) Type[] Creatures( get; )
+ (ctor) DeceitBrazier()
+ (ctor) DeceitBrazier( Serial serial )
+ bool HandlesOnMovement( get; )
+ int LabelNumber( get; )
+ DateTime NextSpawn( get; )
+ TimeSpan NextSpawnDelay( get; set; )
+ int SpawnRange( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoEffect( Point3D loc, Map map )
+ Point3D GetSpawnPosition()
+ virtual void HeedWarning()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeceitDungeonOfHorror.html b/Docs/types/DeceitDungeonOfHorror.html new file mode 100644 index 0000000..4a149f6 --- /dev/null +++ b/Docs/types/DeceitDungeonOfHorror.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DeceitDungeonOfHorror + + +

Back to Server.Items

+

DeceitDungeonOfHorror : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) DeceitDungeonOfHorror()
+ (ctor) DeceitDungeonOfHorror( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeclareFealtyGump.html b/Docs/types/DeclareFealtyGump.html new file mode 100644 index 0000000..60d5367 --- /dev/null +++ b/Docs/types/DeclareFealtyGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DeclareFealtyGump + + +

Back to Server.Gumps

+

DeclareFealtyGump : GuildMobileListGump

+ (ctor) DeclareFealtyGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/DeclineConversation.html b/Docs/types/DeclineConversation.html new file mode 100644 index 0000000..b4243c9 --- /dev/null +++ b/Docs/types/DeclineConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DeclineConversation + + +

Back to Server.Engines.Quests.Collector

+

DeclineConversation : QuestConversation

+ (ctor) DeclineConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DeclineTimer.html b/Docs/types/DeclineTimer.html new file mode 100644 index 0000000..2e04d03 --- /dev/null +++ b/Docs/types/DeclineTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DeclineTimer + + +

Back to Server.Engines.PartySystem

+

DeclineTimer : Timer

+ (static) void Start( Mobile m, Mobile leader )
+ (ctor) DeclineTimer( Mobile m, Mobile leader )
+ virtual void OnTick()
+ + diff --git a/Docs/types/DecoArrowShafts.html b/Docs/types/DecoArrowShafts.html new file mode 100644 index 0000000..e3ab537 --- /dev/null +++ b/Docs/types/DecoArrowShafts.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoArrowShafts + + +

Back to Server.Items

+

DecoArrowShafts : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoArrowShafts()
+ (ctor) DecoArrowShafts( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoBlackmoor.html b/Docs/types/DecoBlackmoor.html new file mode 100644 index 0000000..e7a1e4e --- /dev/null +++ b/Docs/types/DecoBlackmoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoBlackmoor + + +

Back to Server.Items

+

DecoBlackmoor : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoBlackmoor()
+ (ctor) DecoBlackmoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoBloodspawn.html b/Docs/types/DecoBloodspawn.html new file mode 100644 index 0000000..42c46e5 --- /dev/null +++ b/Docs/types/DecoBloodspawn.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoBloodspawn + + +

Back to Server.Items

+

DecoBloodspawn : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoBloodspawn()
+ (ctor) DecoBloodspawn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoBottlesOfLiquor.html b/Docs/types/DecoBottlesOfLiquor.html new file mode 100644 index 0000000..0f684e3 --- /dev/null +++ b/Docs/types/DecoBottlesOfLiquor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoBottlesOfLiquor + + +

Back to Server.Items

+

DecoBottlesOfLiquor : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoBottlesOfLiquor()
+ (ctor) DecoBottlesOfLiquor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoBridle.html b/Docs/types/DecoBridle.html new file mode 100644 index 0000000..21e32ff --- /dev/null +++ b/Docs/types/DecoBridle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoBridle + + +

Back to Server.Items

+

DecoBridle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoBridle()
+ (ctor) DecoBridle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoBridle2.html b/Docs/types/DecoBridle2.html new file mode 100644 index 0000000..9253258 --- /dev/null +++ b/Docs/types/DecoBridle2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoBridle2 + + +

Back to Server.Items

+

DecoBridle2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoBridle2()
+ (ctor) DecoBridle2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoBrimstone.html b/Docs/types/DecoBrimstone.html new file mode 100644 index 0000000..7f77973 --- /dev/null +++ b/Docs/types/DecoBrimstone.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoBrimstone + + +

Back to Server.Items

+

DecoBrimstone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoBrimstone()
+ (ctor) DecoBrimstone( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoCards5.html b/Docs/types/DecoCards5.html new file mode 100644 index 0000000..c089b6e --- /dev/null +++ b/Docs/types/DecoCards5.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoCards5 + + +

Back to Server.Items

+

DecoCards5 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoCards5()
+ (ctor) DecoCards5( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoCrystalBall.html b/Docs/types/DecoCrystalBall.html new file mode 100644 index 0000000..88c8573 --- /dev/null +++ b/Docs/types/DecoCrystalBall.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoCrystalBall + + +

Back to Server.Items

+

DecoCrystalBall : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoCrystalBall()
+ (ctor) DecoCrystalBall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoDeckOfTarot.html b/Docs/types/DecoDeckOfTarot.html new file mode 100644 index 0000000..e9c703f --- /dev/null +++ b/Docs/types/DecoDeckOfTarot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoDeckOfTarot + + +

Back to Server.Items

+

DecoDeckOfTarot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoDeckOfTarot()
+ (ctor) DecoDeckOfTarot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoDeckOfTarot2.html b/Docs/types/DecoDeckOfTarot2.html new file mode 100644 index 0000000..1a73b6b --- /dev/null +++ b/Docs/types/DecoDeckOfTarot2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoDeckOfTarot2 + + +

Back to Server.Items

+

DecoDeckOfTarot2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoDeckOfTarot2()
+ (ctor) DecoDeckOfTarot2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoDragonsBlood.html b/Docs/types/DecoDragonsBlood.html new file mode 100644 index 0000000..e7d981a --- /dev/null +++ b/Docs/types/DecoDragonsBlood.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoDragonsBlood + + +

Back to Server.Items

+

DecoDragonsBlood : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoDragonsBlood()
+ (ctor) DecoDragonsBlood( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoDragonsBlood2.html b/Docs/types/DecoDragonsBlood2.html new file mode 100644 index 0000000..770b6c9 --- /dev/null +++ b/Docs/types/DecoDragonsBlood2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoDragonsBlood2 + + +

Back to Server.Items

+

DecoDragonsBlood2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoDragonsBlood2()
+ (ctor) DecoDragonsBlood2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoEyeOfNewt.html b/Docs/types/DecoEyeOfNewt.html new file mode 100644 index 0000000..a40dcc9 --- /dev/null +++ b/Docs/types/DecoEyeOfNewt.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoEyeOfNewt + + +

Back to Server.Items

+

DecoEyeOfNewt : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoEyeOfNewt()
+ (ctor) DecoEyeOfNewt( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoFlower.html b/Docs/types/DecoFlower.html new file mode 100644 index 0000000..c5f9fdc --- /dev/null +++ b/Docs/types/DecoFlower.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoFlower + + +

Back to Server.Items

+

DecoFlower : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoFlower()
+ (ctor) DecoFlower( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoFlower2.html b/Docs/types/DecoFlower2.html new file mode 100644 index 0000000..fdb541e --- /dev/null +++ b/Docs/types/DecoFlower2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoFlower2 + + +

Back to Server.Items

+

DecoFlower2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoFlower2()
+ (ctor) DecoFlower2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoFullJar.html b/Docs/types/DecoFullJar.html new file mode 100644 index 0000000..8a351be --- /dev/null +++ b/Docs/types/DecoFullJar.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoFullJar + + +

Back to Server.Items

+

DecoFullJar : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoFullJar()
+ (ctor) DecoFullJar( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoFullJars3.html b/Docs/types/DecoFullJars3.html new file mode 100644 index 0000000..8e0b8d5 --- /dev/null +++ b/Docs/types/DecoFullJars3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoFullJars3 + + +

Back to Server.Items

+

DecoFullJars3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoFullJars3()
+ (ctor) DecoFullJars3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoFullJars4.html b/Docs/types/DecoFullJars4.html new file mode 100644 index 0000000..3568963 --- /dev/null +++ b/Docs/types/DecoFullJars4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoFullJars4 + + +

Back to Server.Items

+

DecoFullJars4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoFullJars4()
+ (ctor) DecoFullJars4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGarlic.html b/Docs/types/DecoGarlic.html new file mode 100644 index 0000000..7999367 --- /dev/null +++ b/Docs/types/DecoGarlic.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGarlic + + +

Back to Server.Items

+

DecoGarlic : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGarlic()
+ (ctor) DecoGarlic( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGarlic2.html b/Docs/types/DecoGarlic2.html new file mode 100644 index 0000000..5a8eec8 --- /dev/null +++ b/Docs/types/DecoGarlic2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGarlic2 + + +

Back to Server.Items

+

DecoGarlic2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGarlic2()
+ (ctor) DecoGarlic2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGarlicBulb.html b/Docs/types/DecoGarlicBulb.html new file mode 100644 index 0000000..421e137 --- /dev/null +++ b/Docs/types/DecoGarlicBulb.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGarlicBulb + + +

Back to Server.Items

+

DecoGarlicBulb : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGarlicBulb()
+ (ctor) DecoGarlicBulb( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGarlicBulb2.html b/Docs/types/DecoGarlicBulb2.html new file mode 100644 index 0000000..1eaea7d --- /dev/null +++ b/Docs/types/DecoGarlicBulb2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGarlicBulb2 + + +

Back to Server.Items

+

DecoGarlicBulb2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGarlicBulb2()
+ (ctor) DecoGarlicBulb2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGinseng.html b/Docs/types/DecoGinseng.html new file mode 100644 index 0000000..0d85558 --- /dev/null +++ b/Docs/types/DecoGinseng.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGinseng + + +

Back to Server.Items

+

DecoGinseng : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGinseng()
+ (ctor) DecoGinseng( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGinseng2.html b/Docs/types/DecoGinseng2.html new file mode 100644 index 0000000..fd21f51 --- /dev/null +++ b/Docs/types/DecoGinseng2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGinseng2 + + +

Back to Server.Items

+

DecoGinseng2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGinseng2()
+ (ctor) DecoGinseng2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGinsengRoot.html b/Docs/types/DecoGinsengRoot.html new file mode 100644 index 0000000..2c65b22 --- /dev/null +++ b/Docs/types/DecoGinsengRoot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGinsengRoot + + +

Back to Server.Items

+

DecoGinsengRoot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGinsengRoot()
+ (ctor) DecoGinsengRoot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGinsengRoot2.html b/Docs/types/DecoGinsengRoot2.html new file mode 100644 index 0000000..ecab837 --- /dev/null +++ b/Docs/types/DecoGinsengRoot2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGinsengRoot2 + + +

Back to Server.Items

+

DecoGinsengRoot2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGinsengRoot2()
+ (ctor) DecoGinsengRoot2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGoldIngot.html b/Docs/types/DecoGoldIngot.html new file mode 100644 index 0000000..f298435 --- /dev/null +++ b/Docs/types/DecoGoldIngot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGoldIngot + + +

Back to Server.Items

+

DecoGoldIngot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGoldIngot()
+ (ctor) DecoGoldIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGoldIngot2.html b/Docs/types/DecoGoldIngot2.html new file mode 100644 index 0000000..03c2945 --- /dev/null +++ b/Docs/types/DecoGoldIngot2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGoldIngot2 + + +

Back to Server.Items

+

DecoGoldIngot2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGoldIngot2()
+ (ctor) DecoGoldIngot2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGoldIngots.html b/Docs/types/DecoGoldIngots.html new file mode 100644 index 0000000..8580492 --- /dev/null +++ b/Docs/types/DecoGoldIngots.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGoldIngots + + +

Back to Server.Items

+

DecoGoldIngots : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGoldIngots()
+ (ctor) DecoGoldIngots( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGoldIngots2.html b/Docs/types/DecoGoldIngots2.html new file mode 100644 index 0000000..81a4ba0 --- /dev/null +++ b/Docs/types/DecoGoldIngots2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGoldIngots2 + + +

Back to Server.Items

+

DecoGoldIngots2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGoldIngots2()
+ (ctor) DecoGoldIngots2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGoldIngots3.html b/Docs/types/DecoGoldIngots3.html new file mode 100644 index 0000000..5d6a3f1 --- /dev/null +++ b/Docs/types/DecoGoldIngots3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGoldIngots3 + + +

Back to Server.Items

+

DecoGoldIngots3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGoldIngots3()
+ (ctor) DecoGoldIngots3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoGoldIngots4.html b/Docs/types/DecoGoldIngots4.html new file mode 100644 index 0000000..4e8acdd --- /dev/null +++ b/Docs/types/DecoGoldIngots4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoGoldIngots4 + + +

Back to Server.Items

+

DecoGoldIngots4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoGoldIngots4()
+ (ctor) DecoGoldIngots4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoHay.html b/Docs/types/DecoHay.html new file mode 100644 index 0000000..c8eb3bd --- /dev/null +++ b/Docs/types/DecoHay.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoHay + + +

Back to Server.Items

+

DecoHay : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoHay()
+ (ctor) DecoHay( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoHay2.html b/Docs/types/DecoHay2.html new file mode 100644 index 0000000..8158988 --- /dev/null +++ b/Docs/types/DecoHay2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoHay2 + + +

Back to Server.Items

+

DecoHay2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoHay2()
+ (ctor) DecoHay2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoHorseDung.html b/Docs/types/DecoHorseDung.html new file mode 100644 index 0000000..c481132 --- /dev/null +++ b/Docs/types/DecoHorseDung.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoHorseDung + + +

Back to Server.Items

+

DecoHorseDung : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoHorseDung()
+ (ctor) DecoHorseDung( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoIronIngot.html b/Docs/types/DecoIronIngot.html new file mode 100644 index 0000000..3ba87c7 --- /dev/null +++ b/Docs/types/DecoIronIngot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoIronIngot + + +

Back to Server.Items

+

DecoIronIngot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoIronIngot()
+ (ctor) DecoIronIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoIronIngot2.html b/Docs/types/DecoIronIngot2.html new file mode 100644 index 0000000..1a39b5b --- /dev/null +++ b/Docs/types/DecoIronIngot2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoIronIngot2 + + +

Back to Server.Items

+

DecoIronIngot2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoIronIngot2()
+ (ctor) DecoIronIngot2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoIronIngots.html b/Docs/types/DecoIronIngots.html new file mode 100644 index 0000000..c0dd782 --- /dev/null +++ b/Docs/types/DecoIronIngots.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoIronIngots + + +

Back to Server.Items

+

DecoIronIngots : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoIronIngots()
+ (ctor) DecoIronIngots( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoIronIngots2.html b/Docs/types/DecoIronIngots2.html new file mode 100644 index 0000000..8058f0b --- /dev/null +++ b/Docs/types/DecoIronIngots2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoIronIngots2 + + +

Back to Server.Items

+

DecoIronIngots2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoIronIngots2()
+ (ctor) DecoIronIngots2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoIronIngots3.html b/Docs/types/DecoIronIngots3.html new file mode 100644 index 0000000..117dff2 --- /dev/null +++ b/Docs/types/DecoIronIngots3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoIronIngots3 + + +

Back to Server.Items

+

DecoIronIngots3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoIronIngots3()
+ (ctor) DecoIronIngots3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoIronIngots4.html b/Docs/types/DecoIronIngots4.html new file mode 100644 index 0000000..9b86212 --- /dev/null +++ b/Docs/types/DecoIronIngots4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoIronIngots4 + + +

Back to Server.Items

+

DecoIronIngots4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoIronIngots4()
+ (ctor) DecoIronIngots4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoIronIngots5.html b/Docs/types/DecoIronIngots5.html new file mode 100644 index 0000000..f2cfde9 --- /dev/null +++ b/Docs/types/DecoIronIngots5.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoIronIngots5 + + +

Back to Server.Items

+

DecoIronIngots5 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoIronIngots5()
+ (ctor) DecoIronIngots5( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoIronIngots6.html b/Docs/types/DecoIronIngots6.html new file mode 100644 index 0000000..371c737 --- /dev/null +++ b/Docs/types/DecoIronIngots6.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoIronIngots6 + + +

Back to Server.Items

+

DecoIronIngots6 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoIronIngots6()
+ (ctor) DecoIronIngots6( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoMagicalCrystal.html b/Docs/types/DecoMagicalCrystal.html new file mode 100644 index 0000000..cf5dcf1 --- /dev/null +++ b/Docs/types/DecoMagicalCrystal.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoMagicalCrystal + + +

Back to Server.Items

+

DecoMagicalCrystal : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoMagicalCrystal()
+ (ctor) DecoMagicalCrystal( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoMandrake.html b/Docs/types/DecoMandrake.html new file mode 100644 index 0000000..50b8fe8 --- /dev/null +++ b/Docs/types/DecoMandrake.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoMandrake + + +

Back to Server.Items

+

DecoMandrake : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoMandrake()
+ (ctor) DecoMandrake( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoMandrake2.html b/Docs/types/DecoMandrake2.html new file mode 100644 index 0000000..a09fa17 --- /dev/null +++ b/Docs/types/DecoMandrake2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoMandrake2 + + +

Back to Server.Items

+

DecoMandrake2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoMandrake2()
+ (ctor) DecoMandrake2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoMandrake3.html b/Docs/types/DecoMandrake3.html new file mode 100644 index 0000000..045e930 --- /dev/null +++ b/Docs/types/DecoMandrake3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoMandrake3 + + +

Back to Server.Items

+

DecoMandrake3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoMandrake3()
+ (ctor) DecoMandrake3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoMandrakeRoot.html b/Docs/types/DecoMandrakeRoot.html new file mode 100644 index 0000000..d70fbcf --- /dev/null +++ b/Docs/types/DecoMandrakeRoot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoMandrakeRoot + + +

Back to Server.Items

+

DecoMandrakeRoot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoMandrakeRoot()
+ (ctor) DecoMandrakeRoot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoMandrakeRoot2.html b/Docs/types/DecoMandrakeRoot2.html new file mode 100644 index 0000000..0e2db65 --- /dev/null +++ b/Docs/types/DecoMandrakeRoot2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoMandrakeRoot2 + + +

Back to Server.Items

+

DecoMandrakeRoot2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoMandrakeRoot2()
+ (ctor) DecoMandrakeRoot2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoNightshade.html b/Docs/types/DecoNightshade.html new file mode 100644 index 0000000..c2829e4 --- /dev/null +++ b/Docs/types/DecoNightshade.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoNightshade + + +

Back to Server.Items

+

DecoNightshade : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoNightshade()
+ (ctor) DecoNightshade( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoNightshade2.html b/Docs/types/DecoNightshade2.html new file mode 100644 index 0000000..d3114bb --- /dev/null +++ b/Docs/types/DecoNightshade2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoNightshade2 + + +

Back to Server.Items

+

DecoNightshade2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoNightshade2()
+ (ctor) DecoNightshade2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoNightshade3.html b/Docs/types/DecoNightshade3.html new file mode 100644 index 0000000..d44a49d --- /dev/null +++ b/Docs/types/DecoNightshade3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoNightshade3 + + +

Back to Server.Items

+

DecoNightshade3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoNightshade3()
+ (ctor) DecoNightshade3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoObsidian.html b/Docs/types/DecoObsidian.html new file mode 100644 index 0000000..f4902c6 --- /dev/null +++ b/Docs/types/DecoObsidian.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoObsidian + + +

Back to Server.Items

+

DecoObsidian : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoObsidian()
+ (ctor) DecoObsidian( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoPumice.html b/Docs/types/DecoPumice.html new file mode 100644 index 0000000..0628ccb --- /dev/null +++ b/Docs/types/DecoPumice.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoPumice + + +

Back to Server.Items

+

DecoPumice : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoPumice()
+ (ctor) DecoPumice( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoRock.html b/Docs/types/DecoRock.html new file mode 100644 index 0000000..987cd9b --- /dev/null +++ b/Docs/types/DecoRock.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoRock + + +

Back to Server.Items

+

DecoRock : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoRock()
+ (ctor) DecoRock( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoRock2.html b/Docs/types/DecoRock2.html new file mode 100644 index 0000000..980f989 --- /dev/null +++ b/Docs/types/DecoRock2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoRock2 + + +

Back to Server.Items

+

DecoRock2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoRock2()
+ (ctor) DecoRock2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoRocks.html b/Docs/types/DecoRocks.html new file mode 100644 index 0000000..dcac346 --- /dev/null +++ b/Docs/types/DecoRocks.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoRocks + + +

Back to Server.Items

+

DecoRocks : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoRocks()
+ (ctor) DecoRocks( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoRocks2.html b/Docs/types/DecoRocks2.html new file mode 100644 index 0000000..a4ddfa4 --- /dev/null +++ b/Docs/types/DecoRocks2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoRocks2 + + +

Back to Server.Items

+

DecoRocks2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoRocks2()
+ (ctor) DecoRocks2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoRoseOfTrinsic.html b/Docs/types/DecoRoseOfTrinsic.html new file mode 100644 index 0000000..15774c5 --- /dev/null +++ b/Docs/types/DecoRoseOfTrinsic.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoRoseOfTrinsic + + +

Back to Server.Items

+

DecoRoseOfTrinsic : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoRoseOfTrinsic()
+ (ctor) DecoRoseOfTrinsic( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoRoseOfTrinsic2.html b/Docs/types/DecoRoseOfTrinsic2.html new file mode 100644 index 0000000..c0c7dd5 --- /dev/null +++ b/Docs/types/DecoRoseOfTrinsic2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoRoseOfTrinsic2 + + +

Back to Server.Items

+

DecoRoseOfTrinsic2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoRoseOfTrinsic2()
+ (ctor) DecoRoseOfTrinsic2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoRoseOfTrinsic3.html b/Docs/types/DecoRoseOfTrinsic3.html new file mode 100644 index 0000000..0fc4083 --- /dev/null +++ b/Docs/types/DecoRoseOfTrinsic3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoRoseOfTrinsic3 + + +

Back to Server.Items

+

DecoRoseOfTrinsic3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoRoseOfTrinsic3()
+ (ctor) DecoRoseOfTrinsic3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoSilverIngot.html b/Docs/types/DecoSilverIngot.html new file mode 100644 index 0000000..a060e74 --- /dev/null +++ b/Docs/types/DecoSilverIngot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoSilverIngot + + +

Back to Server.Items

+

DecoSilverIngot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoSilverIngot()
+ (ctor) DecoSilverIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoSilverIngot2.html b/Docs/types/DecoSilverIngot2.html new file mode 100644 index 0000000..e77f310 --- /dev/null +++ b/Docs/types/DecoSilverIngot2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoSilverIngot2 + + +

Back to Server.Items

+

DecoSilverIngot2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoSilverIngot2()
+ (ctor) DecoSilverIngot2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoSilverIngots.html b/Docs/types/DecoSilverIngots.html new file mode 100644 index 0000000..0a307a0 --- /dev/null +++ b/Docs/types/DecoSilverIngots.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoSilverIngots + + +

Back to Server.Items

+

DecoSilverIngots : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoSilverIngots()
+ (ctor) DecoSilverIngots( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoSilverIngots2.html b/Docs/types/DecoSilverIngots2.html new file mode 100644 index 0000000..31c2b00 --- /dev/null +++ b/Docs/types/DecoSilverIngots2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoSilverIngots2 + + +

Back to Server.Items

+

DecoSilverIngots2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoSilverIngots2()
+ (ctor) DecoSilverIngots2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoSilverIngots3.html b/Docs/types/DecoSilverIngots3.html new file mode 100644 index 0000000..82dd815 --- /dev/null +++ b/Docs/types/DecoSilverIngots3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoSilverIngots3 + + +

Back to Server.Items

+

DecoSilverIngots3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoSilverIngots3()
+ (ctor) DecoSilverIngots3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoSilverIngots4.html b/Docs/types/DecoSilverIngots4.html new file mode 100644 index 0000000..1cd10ed --- /dev/null +++ b/Docs/types/DecoSilverIngots4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoSilverIngots4 + + +

Back to Server.Items

+

DecoSilverIngots4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoSilverIngots4()
+ (ctor) DecoSilverIngots4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoSilverIngots5.html b/Docs/types/DecoSilverIngots5.html new file mode 100644 index 0000000..8115354 --- /dev/null +++ b/Docs/types/DecoSilverIngots5.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoSilverIngots5 + + +

Back to Server.Items

+

DecoSilverIngots5 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoSilverIngots5()
+ (ctor) DecoSilverIngots5( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoSpittoon.html b/Docs/types/DecoSpittoon.html new file mode 100644 index 0000000..97edc62 --- /dev/null +++ b/Docs/types/DecoSpittoon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoSpittoon + + +

Back to Server.Items

+

DecoSpittoon : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoSpittoon()
+ (ctor) DecoSpittoon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTarot.html b/Docs/types/DecoTarot.html new file mode 100644 index 0000000..ddaf9ee --- /dev/null +++ b/Docs/types/DecoTarot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTarot + + +

Back to Server.Items

+

DecoTarot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTarot()
+ (ctor) DecoTarot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTarot2.html b/Docs/types/DecoTarot2.html new file mode 100644 index 0000000..8dca8ff --- /dev/null +++ b/Docs/types/DecoTarot2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTarot2 + + +

Back to Server.Items

+

DecoTarot2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTarot2()
+ (ctor) DecoTarot2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTarot3.html b/Docs/types/DecoTarot3.html new file mode 100644 index 0000000..f2facbe --- /dev/null +++ b/Docs/types/DecoTarot3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTarot3 + + +

Back to Server.Items

+

DecoTarot3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTarot3()
+ (ctor) DecoTarot3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTarot4.html b/Docs/types/DecoTarot4.html new file mode 100644 index 0000000..a77a5ab --- /dev/null +++ b/Docs/types/DecoTarot4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTarot4 + + +

Back to Server.Items

+

DecoTarot4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTarot4()
+ (ctor) DecoTarot4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTarot5.html b/Docs/types/DecoTarot5.html new file mode 100644 index 0000000..75c3b71 --- /dev/null +++ b/Docs/types/DecoTarot5.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTarot5 + + +

Back to Server.Items

+

DecoTarot5 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTarot5()
+ (ctor) DecoTarot5( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTarot6.html b/Docs/types/DecoTarot6.html new file mode 100644 index 0000000..db64933 --- /dev/null +++ b/Docs/types/DecoTarot6.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTarot6 + + +

Back to Server.Items

+

DecoTarot6 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTarot6()
+ (ctor) DecoTarot6( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTarot7.html b/Docs/types/DecoTarot7.html new file mode 100644 index 0000000..a875996 --- /dev/null +++ b/Docs/types/DecoTarot7.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTarot7 + + +

Back to Server.Items

+

DecoTarot7 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTarot7()
+ (ctor) DecoTarot7( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTray.html b/Docs/types/DecoTray.html new file mode 100644 index 0000000..e3456fa --- /dev/null +++ b/Docs/types/DecoTray.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTray + + +

Back to Server.Items

+

DecoTray : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTray()
+ (ctor) DecoTray( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoTray2.html b/Docs/types/DecoTray2.html new file mode 100644 index 0000000..fc44985 --- /dev/null +++ b/Docs/types/DecoTray2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoTray2 + + +

Back to Server.Items

+

DecoTray2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoTray2()
+ (ctor) DecoTray2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecoWyrmsHeart.html b/Docs/types/DecoWyrmsHeart.html new file mode 100644 index 0000000..d5a4ad2 --- /dev/null +++ b/Docs/types/DecoWyrmsHeart.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecoWyrmsHeart + + +

Back to Server.Items

+

DecoWyrmsHeart : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecoWyrmsHeart()
+ (ctor) DecoWyrmsHeart( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecodeMapEntry.html b/Docs/types/DecodeMapEntry.html new file mode 100644 index 0000000..f73275b --- /dev/null +++ b/Docs/types/DecodeMapEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DecodeMapEntry + + +

Back to Server.Items

+

(TreasureMap) - DecodeMapEntry : ContextMenuEntry

+ (ctor) DecodeMapEntry( TreasureMap map )
+ virtual void OnClick()
+ + diff --git a/Docs/types/Decorate.html b/Docs/types/Decorate.html new file mode 100644 index 0000000..013b18a --- /dev/null +++ b/Docs/types/Decorate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Decorate + + +

Back to Server.Commands

+

Decorate

+ (static) void Decorate_OnCommand( CommandEventArgs e )
+ (static) void Generate( string folder, Map[] maps )
+ (static) void Initialize()
+ (ctor) Decorate()
+ + diff --git a/Docs/types/DecorateCommand.html b/Docs/types/DecorateCommand.html new file mode 100644 index 0000000..da69764 --- /dev/null +++ b/Docs/types/DecorateCommand.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorateCommand + + +

Back to Server.Items

+

DecorateCommand (Enum)

+ None = 0,
+ Turn = 1,
+ Up = 2,
+ Down = 3
+ + diff --git a/Docs/types/DecorateMag.html b/Docs/types/DecorateMag.html new file mode 100644 index 0000000..48ab187 --- /dev/null +++ b/Docs/types/DecorateMag.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorateMag + + +

Back to Server.Commands

+

DecorateMag

+ (static) void DecorateMag_OnCommand( CommandEventArgs e )
+ (static) void Generate( string folder, Map[] maps )
+ (static) void Initialize()
+ (ctor) DecorateMag()
+ + diff --git a/Docs/types/DecorationEntry.html b/Docs/types/DecorationEntry.html new file mode 100644 index 0000000..5c5ec78 --- /dev/null +++ b/Docs/types/DecorationEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorationEntry + + +

Back to Server.Commands

+

DecorationEntry

+ (ctor) DecorationEntry( string line )
+ string Extra( get; )
+ Point3D Location( get; )
+ void Pop( out string v, ref string line )
+ + diff --git a/Docs/types/DecorationEntryMag.html b/Docs/types/DecorationEntryMag.html new file mode 100644 index 0000000..da5f07a --- /dev/null +++ b/Docs/types/DecorationEntryMag.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorationEntryMag + + +

Back to Server.Commands

+

DecorationEntryMag

+ (ctor) DecorationEntryMag( string line )
+ string Extra( get; )
+ Point3D Location( get; )
+ void Pop( out string v, ref string line )
+ + diff --git a/Docs/types/DecorationList.html b/Docs/types/DecorationList.html new file mode 100644 index 0000000..1cbc3ea --- /dev/null +++ b/Docs/types/DecorationList.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DecorationList + + +

Back to Server.Commands

+

DecorationList

+ (static) bool FindItem( int x, int y, int z, Map map, Item srcItem )
+ (static) DecorationList Read( StreamReader ip )
+ (static) ArrayList ReadAll( string path )
+ (ctor) DecorationList()
+ Item Construct()
+ int Generate( Map[] maps )
+ + diff --git a/Docs/types/DecorationListMag.html b/Docs/types/DecorationListMag.html new file mode 100644 index 0000000..d1c96ac --- /dev/null +++ b/Docs/types/DecorationListMag.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DecorationListMag + + +

Back to Server.Commands

+

DecorationListMag

+ (static) bool FindItem( int x, int y, int z, Map map, Item srcItem )
+ (static) DecorationListMag Read( StreamReader ip )
+ (static) ArrayList ReadAll( string path )
+ (ctor) DecorationListMag()
+ Item Construct()
+ int Generate( Map[] maps )
+ + diff --git a/Docs/types/DecorativeAxeNorth.html b/Docs/types/DecorativeAxeNorth.html new file mode 100644 index 0000000..4e88c17 --- /dev/null +++ b/Docs/types/DecorativeAxeNorth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeAxeNorth + + +

Back to Server.Items

+

DecorativeAxeNorth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeAxeNorth()
+ (ctor) DecorativeAxeNorth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeAxeWest.html b/Docs/types/DecorativeAxeWest.html new file mode 100644 index 0000000..a477e80 --- /dev/null +++ b/Docs/types/DecorativeAxeWest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeAxeWest + + +

Back to Server.Items

+

DecorativeAxeWest : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeAxeWest()
+ (ctor) DecorativeAxeWest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeBowNorth.html b/Docs/types/DecorativeBowNorth.html new file mode 100644 index 0000000..3adccbd --- /dev/null +++ b/Docs/types/DecorativeBowNorth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeBowNorth + + +

Back to Server.Items

+

DecorativeBowNorth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeBowNorth()
+ (ctor) DecorativeBowNorth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeBowWest.html b/Docs/types/DecorativeBowWest.html new file mode 100644 index 0000000..d894c6e --- /dev/null +++ b/Docs/types/DecorativeBowWest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeBowWest + + +

Back to Server.Items

+

DecorativeBowWest : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeBowWest()
+ (ctor) DecorativeBowWest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeDAxeNorth.html b/Docs/types/DecorativeDAxeNorth.html new file mode 100644 index 0000000..298eb17 --- /dev/null +++ b/Docs/types/DecorativeDAxeNorth.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DecorativeDAxeNorth + + +

Back to Server.Items

+

DecorativeDAxeNorth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) DecorativeDAxeNorth()
+ (ctor) DecorativeDAxeNorth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeDAxeWest.html b/Docs/types/DecorativeDAxeWest.html new file mode 100644 index 0000000..6681a8f --- /dev/null +++ b/Docs/types/DecorativeDAxeWest.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DecorativeDAxeWest + + +

Back to Server.Items

+

DecorativeDAxeWest : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) DecorativeDAxeWest()
+ (ctor) DecorativeDAxeWest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativePlateKabuto.html b/Docs/types/DecorativePlateKabuto.html new file mode 100644 index 0000000..0065354 --- /dev/null +++ b/Docs/types/DecorativePlateKabuto.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - DecorativePlateKabuto + + +

Back to Server.Items

+

DecorativePlateKabuto : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DecorativePlateKabuto()
+ (ctor) DecorativePlateKabuto( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield.html b/Docs/types/DecorativeShield.html new file mode 100644 index 0000000..01a4857 --- /dev/null +++ b/Docs/types/DecorativeShield.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DecorativeShield + + +

Back to Server.Items

+

DecorativeShield : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IAddon, IRewardItem

+ (ctor) DecorativeShield()
+ (ctor) DecorativeShield( int itemID )
+ (ctor) DecorativeShield( Serial serial )
+ Item Deed( get; )
+ bool FacingSouth( get; )
+ bool ForceShowProperties( get; )
+ bool IsRewardItem( get; set; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield1.html b/Docs/types/DecorativeShield1.html new file mode 100644 index 0000000..21fda21 --- /dev/null +++ b/Docs/types/DecorativeShield1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield1 + + +

Back to Server.Items

+

DecorativeShield1 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield1()
+ (ctor) DecorativeShield1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield10.html b/Docs/types/DecorativeShield10.html new file mode 100644 index 0000000..7da297f --- /dev/null +++ b/Docs/types/DecorativeShield10.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield10 + + +

Back to Server.Items

+

DecorativeShield10 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield10()
+ (ctor) DecorativeShield10( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield11.html b/Docs/types/DecorativeShield11.html new file mode 100644 index 0000000..1045504 --- /dev/null +++ b/Docs/types/DecorativeShield11.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield11 + + +

Back to Server.Items

+

DecorativeShield11 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield11()
+ (ctor) DecorativeShield11( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield2.html b/Docs/types/DecorativeShield2.html new file mode 100644 index 0000000..a786b36 --- /dev/null +++ b/Docs/types/DecorativeShield2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield2 + + +

Back to Server.Items

+

DecorativeShield2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield2()
+ (ctor) DecorativeShield2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield3.html b/Docs/types/DecorativeShield3.html new file mode 100644 index 0000000..d7a08ba --- /dev/null +++ b/Docs/types/DecorativeShield3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield3 + + +

Back to Server.Items

+

DecorativeShield3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield3()
+ (ctor) DecorativeShield3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield4.html b/Docs/types/DecorativeShield4.html new file mode 100644 index 0000000..8003eee --- /dev/null +++ b/Docs/types/DecorativeShield4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield4 + + +

Back to Server.Items

+

DecorativeShield4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield4()
+ (ctor) DecorativeShield4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield5.html b/Docs/types/DecorativeShield5.html new file mode 100644 index 0000000..6b87c6e --- /dev/null +++ b/Docs/types/DecorativeShield5.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield5 + + +

Back to Server.Items

+

DecorativeShield5 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield5()
+ (ctor) DecorativeShield5( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield6.html b/Docs/types/DecorativeShield6.html new file mode 100644 index 0000000..4bd1c55 --- /dev/null +++ b/Docs/types/DecorativeShield6.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield6 + + +

Back to Server.Items

+

DecorativeShield6 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield6()
+ (ctor) DecorativeShield6( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield7.html b/Docs/types/DecorativeShield7.html new file mode 100644 index 0000000..a118be8 --- /dev/null +++ b/Docs/types/DecorativeShield7.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield7 + + +

Back to Server.Items

+

DecorativeShield7 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield7()
+ (ctor) DecorativeShield7( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield8.html b/Docs/types/DecorativeShield8.html new file mode 100644 index 0000000..06c7b5f --- /dev/null +++ b/Docs/types/DecorativeShield8.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield8 + + +

Back to Server.Items

+

DecorativeShield8 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield8()
+ (ctor) DecorativeShield8( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShield9.html b/Docs/types/DecorativeShield9.html new file mode 100644 index 0000000..7b7bfca --- /dev/null +++ b/Docs/types/DecorativeShield9.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShield9 + + +

Back to Server.Items

+

DecorativeShield9 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShield9()
+ (ctor) DecorativeShield9( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShieldDeed.html b/Docs/types/DecorativeShieldDeed.html new file mode 100644 index 0000000..22b8a54 --- /dev/null +++ b/Docs/types/DecorativeShieldDeed.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DecorativeShieldDeed + + +

Back to Server.Items

+

DecorativeShieldDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: InternalGump, InternalTarget

+ (static) int GetWestItemID( int east )
+ (ctor) DecorativeShieldDeed()
+ (ctor) DecorativeShieldDeed( Serial serial )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShieldSword1North.html b/Docs/types/DecorativeShieldSword1North.html new file mode 100644 index 0000000..9d2739a --- /dev/null +++ b/Docs/types/DecorativeShieldSword1North.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShieldSword1North + + +

Back to Server.Items

+

DecorativeShieldSword1North : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShieldSword1North()
+ (ctor) DecorativeShieldSword1North( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShieldSword1West.html b/Docs/types/DecorativeShieldSword1West.html new file mode 100644 index 0000000..9991099 --- /dev/null +++ b/Docs/types/DecorativeShieldSword1West.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShieldSword1West + + +

Back to Server.Items

+

DecorativeShieldSword1West : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShieldSword1West()
+ (ctor) DecorativeShieldSword1West( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShieldSword2North.html b/Docs/types/DecorativeShieldSword2North.html new file mode 100644 index 0000000..832e88e --- /dev/null +++ b/Docs/types/DecorativeShieldSword2North.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShieldSword2North + + +

Back to Server.Items

+

DecorativeShieldSword2North : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShieldSword2North()
+ (ctor) DecorativeShieldSword2North( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeShieldSword2West.html b/Docs/types/DecorativeShieldSword2West.html new file mode 100644 index 0000000..cfd258d --- /dev/null +++ b/Docs/types/DecorativeShieldSword2West.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DecorativeShieldSword2West + + +

Back to Server.Items

+

DecorativeShieldSword2West : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeShieldSword2West()
+ (ctor) DecorativeShieldSword2West( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeSwordNorth.html b/Docs/types/DecorativeSwordNorth.html new file mode 100644 index 0000000..e759094 --- /dev/null +++ b/Docs/types/DecorativeSwordNorth.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DecorativeSwordNorth + + +

Back to Server.Items

+

DecorativeSwordNorth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) DecorativeSwordNorth()
+ (ctor) DecorativeSwordNorth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeSwordWest.html b/Docs/types/DecorativeSwordWest.html new file mode 100644 index 0000000..6463ab7 --- /dev/null +++ b/Docs/types/DecorativeSwordWest.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DecorativeSwordWest + + +

Back to Server.Items

+

DecorativeSwordWest : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) DecorativeSwordWest()
+ (ctor) DecorativeSwordWest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DecorativeTopiary.html b/Docs/types/DecorativeTopiary.html new file mode 100644 index 0000000..b9a7deb --- /dev/null +++ b/Docs/types/DecorativeTopiary.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DecorativeTopiary + + +

Back to Server.Items

+

DecorativeTopiary : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DecorativeTopiary()
+ (ctor) DecorativeTopiary( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeepSeaSerpent.html b/Docs/types/DeepSeaSerpent.html new file mode 100644 index 0000000..41d7e77 --- /dev/null +++ b/Docs/types/DeepSeaSerpent.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DeepSeaSerpent + + +

Back to Server.Mobiles

+

DeepSeaSerpent : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DeepSeaSerpent()
+ (ctor) DeepSeaSerpent( Serial serial )
+ bool HasBreath( get; )
+ int Meat( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DeerMask.html b/Docs/types/DeerMask.html new file mode 100644 index 0000000..5b76edd --- /dev/null +++ b/Docs/types/DeerMask.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - DeerMask + + +

Back to Server.Items

+

DeerMask : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: HuntersHeaddress

+ (ctor) DeerMask()
+ (ctor) DeerMask( Serial serial )
+ (ctor) DeerMask( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DefAlchemy.html b/Docs/types/DefAlchemy.html new file mode 100644 index 0000000..2138d4c --- /dev/null +++ b/Docs/types/DefAlchemy.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DefAlchemy + + +

Back to Server.Engines.Craft

+

DefAlchemy : CraftSystem

+ (static) CraftSystem CraftSystem( get; )
+ (static) bool IsPotion( Type type )
+ (ctor) DefAlchemy()
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ + diff --git a/Docs/types/DefBlacksmithy.html b/Docs/types/DefBlacksmithy.html new file mode 100644 index 0000000..9f2d80c --- /dev/null +++ b/Docs/types/DefBlacksmithy.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DefBlacksmithy + + +

Back to Server.Engines.Craft

+

DefBlacksmithy : CraftSystem

+

Nested Types: InternalTimer

+ (static) CraftSystem CraftSystem( get; )
+ (static) void CheckAnvilAndForge( Mobile from, int range, out bool anvil, out bool forge )
+ (ctor) DefBlacksmithy()
+ CraftECA ECA( get; )
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ + diff --git a/Docs/types/DefBowFletching.html b/Docs/types/DefBowFletching.html new file mode 100644 index 0000000..1a55d2d --- /dev/null +++ b/Docs/types/DefBowFletching.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DefBowFletching + + +

Back to Server.Engines.Craft

+

DefBowFletching : CraftSystem

+ (static) CraftSystem CraftSystem( get; )
+ (ctor) DefBowFletching()
+ CraftECA ECA( get; )
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ + diff --git a/Docs/types/DefCarpentry.html b/Docs/types/DefCarpentry.html new file mode 100644 index 0000000..8606025 --- /dev/null +++ b/Docs/types/DefCarpentry.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DefCarpentry + + +

Back to Server.Engines.Craft

+

DefCarpentry : CraftSystem

+ (static) CraftSystem CraftSystem( get; )
+ (ctor) DefCarpentry()
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ + diff --git a/Docs/types/DefCartography.html b/Docs/types/DefCartography.html new file mode 100644 index 0000000..68ecab9 --- /dev/null +++ b/Docs/types/DefCartography.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DefCartography + + +

Back to Server.Engines.Craft

+

DefCartography : CraftSystem

+ (static) CraftSystem CraftSystem( get; )
+ (ctor) DefCartography()
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ + diff --git a/Docs/types/DefCooking.html b/Docs/types/DefCooking.html new file mode 100644 index 0000000..9ecdddf --- /dev/null +++ b/Docs/types/DefCooking.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DefCooking + + +

Back to Server.Engines.Craft

+

DefCooking : CraftSystem

+ (static) CraftSystem CraftSystem( get; )
+ (ctor) DefCooking()
+ CraftECA ECA( get; )
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ + diff --git a/Docs/types/DefGlassblowing.html b/Docs/types/DefGlassblowing.html new file mode 100644 index 0000000..c1dcb93 --- /dev/null +++ b/Docs/types/DefGlassblowing.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DefGlassblowing + + +

Back to Server.Engines.Craft

+

DefGlassblowing : CraftSystem

+

Nested Types: InternalTimer

+ (static) CraftSystem CraftSystem( get; )
+ (ctor) DefGlassblowing()
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ + diff --git a/Docs/types/DefInscription.html b/Docs/types/DefInscription.html new file mode 100644 index 0000000..5669570 --- /dev/null +++ b/Docs/types/DefInscription.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DefInscription + + +

Back to Server.Engines.Craft

+

DefInscription : CraftSystem

+

Nested Types: Reg

+ (static) CraftSystem CraftSystem( get; )
+ (ctor) DefInscription()
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ void AddNecroSpell( int spell, int mana, double minSkill, Type type, Type[] regs )
+ void AddSpell( Type type, Reg[] regs )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type typeItem )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ + diff --git a/Docs/types/DefMasonry.html b/Docs/types/DefMasonry.html new file mode 100644 index 0000000..3d7ec99 --- /dev/null +++ b/Docs/types/DefMasonry.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - DefMasonry + + +

Back to Server.Engines.Craft

+

DefMasonry : CraftSystem

+

Nested Types: InternalTimer

+ (static) CraftSystem CraftSystem( get; )
+ (ctor) DefMasonry()
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ virtual bool RetainsColorFrom( CraftItem item, Type type )
+ + diff --git a/Docs/types/DefTailoring.html b/Docs/types/DefTailoring.html new file mode 100644 index 0000000..272b70a --- /dev/null +++ b/Docs/types/DefTailoring.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DefTailoring + + +

Back to Server.Engines.Craft

+

DefTailoring : CraftSystem

+ (static) CraftSystem CraftSystem( get; )
+ (static) bool IsNonColorable( Type type )
+ (ctor) DefTailoring()
+ CraftECA ECA( get; )
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ virtual bool RetainsColorFrom( CraftItem item, Type type )
+ + diff --git a/Docs/types/DefTinkering.html b/Docs/types/DefTinkering.html new file mode 100644 index 0000000..50814f3 --- /dev/null +++ b/Docs/types/DefTinkering.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DefTinkering + + +

Back to Server.Engines.Craft

+

DefTinkering : CraftSystem

+ (static) CraftSystem CraftSystem( get; )
+ (ctor) DefTinkering()
+ int GumpTitleNumber( get; )
+ SkillName MainSkill( get; )
+ void AddJewelrySet( GemType gemType, Type itemType )
+ virtual int CanCraft( Mobile from, BaseTool tool, Type itemType )
+ virtual bool ConsumeOnFailure( Mobile from, Type resourceType, CraftItem craftItem )
+ virtual double GetChanceAtMin( CraftItem item )
+ virtual void InitCraftList()
+ virtual void PlayCraftEffect( Mobile from )
+ virtual int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item )
+ virtual bool RetainsColorFrom( CraftItem item, Type type )
+ + diff --git a/Docs/types/DefaultEntry.html b/Docs/types/DefaultEntry.html new file mode 100644 index 0000000..c398c2c --- /dev/null +++ b/Docs/types/DefaultEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DefaultEntry + + +

Back to Server.Items

+

(BaseBoard) - DefaultEntry : ContextMenuEntry

+ (ctor) DefaultEntry( Mobile from, BaseBoard board )
+ virtual void OnClick()
+ + diff --git a/Docs/types/DefaultSkillMod.html b/Docs/types/DefaultSkillMod.html new file mode 100644 index 0000000..14b733f --- /dev/null +++ b/Docs/types/DefaultSkillMod.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DefaultSkillMod + + +

Back to Server

+

DefaultSkillMod : SkillMod

+ (ctor) DefaultSkillMod( SkillName skill, bool relative, double value )
+ virtual bool CheckCondition()
+ + diff --git a/Docs/types/DefenseMastery.html b/Docs/types/DefenseMastery.html new file mode 100644 index 0000000..3e8d4bd --- /dev/null +++ b/Docs/types/DefenseMastery.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DefenseMastery + + +

Back to Server.Items

+

DefenseMastery : WeaponAbility

+

Nested Types: DefenseMasteryInfo

+ (static) void EndDefense( object state )
+ (static) bool GetMalus( Mobile targ, ref int damageMalus )
+ (ctor) DefenseMastery()
+ int BaseMana( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/DefenseMasteryInfo.html b/Docs/types/DefenseMasteryInfo.html new file mode 100644 index 0000000..be97520 --- /dev/null +++ b/Docs/types/DefenseMasteryInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DefenseMasteryInfo + + +

Back to Server.Items

+

(DefenseMastery) - DefenseMasteryInfo

+ (ctor) DefenseMasteryInfo( Mobile from, int damageMalus, ResistanceMod mod )
+ + diff --git a/Docs/types/DefenseTimer.html b/Docs/types/DefenseTimer.html new file mode 100644 index 0000000..883533e --- /dev/null +++ b/Docs/types/DefenseTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DefenseTimer + + +

Back to Server.Items

+

(HitLower) - DefenseTimer : Timer

+ (ctor) DefenseTimer( Mobile player )
+ virtual void OnTick()
+ + diff --git a/Docs/types/DefensiveSpell.html b/Docs/types/DefensiveSpell.html new file mode 100644 index 0000000..91339ce --- /dev/null +++ b/Docs/types/DefensiveSpell.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DefensiveSpell + + +

Back to Server

+

DefensiveSpell

+

Nested Types: InternalTimer

+ (static) void Nullify( Mobile from )
+ (ctor) DefensiveSpell()
+ + diff --git a/Docs/types/DelayCallTimer.html b/Docs/types/DelayCallTimer.html new file mode 100644 index 0000000..2708e37 --- /dev/null +++ b/Docs/types/DelayCallTimer.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DelayCallTimer + + +

Back to Server

+

(Timer) - DelayCallTimer : Timer

+ (ctor) DelayCallTimer( TimeSpan delay, TimeSpan interval, int count, TimerCallback callback )
+ TimerCallback Callback( get; )
+ bool DefRegCreation( get; )
+ virtual void OnTick()
+ virtual string ToString()
+ + diff --git a/Docs/types/DelayStateCallTimer-T-.html b/Docs/types/DelayStateCallTimer-T-.html new file mode 100644 index 0000000..aceb269 --- /dev/null +++ b/Docs/types/DelayStateCallTimer-T-.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DelayStateCallTimer<T> + + +

Back to Server

+

(Timer) - DelayStateCallTimer<T> : Timer

+ (ctor) DelayStateCallTimer<T>( TimeSpan delay, TimeSpan interval, int count, TimerStateCallback<T> callback, T state )
+ TimerStateCallback<T> Callback( get; )
+ bool DefRegCreation( get; )
+ virtual void OnTick()
+ virtual string ToString()
+ + diff --git a/Docs/types/DelayStateCallTimer.html b/Docs/types/DelayStateCallTimer.html new file mode 100644 index 0000000..0e872ff --- /dev/null +++ b/Docs/types/DelayStateCallTimer.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DelayStateCallTimer + + +

Back to Server

+

(Timer) - DelayStateCallTimer : Timer

+ (ctor) DelayStateCallTimer( TimeSpan delay, TimeSpan interval, int count, TimerStateCallback callback, object state )
+ TimerStateCallback Callback( get; )
+ bool DefRegCreation( get; )
+ virtual void OnTick()
+ virtual string ToString()
+ + diff --git a/Docs/types/DelayTimer.html b/Docs/types/DelayTimer.html new file mode 100644 index 0000000..a2db3e0 --- /dev/null +++ b/Docs/types/DelayTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DelayTimer + + +

Back to Server.Mobiles

+

(Neira) - DelayTimer : Timer

+ (ctor) DelayTimer( Mobile m, Mobile target )
+ virtual void OnTick()
+ + diff --git a/Docs/types/DelayedDamageContextWrapper.html b/Docs/types/DelayedDamageContextWrapper.html new file mode 100644 index 0000000..0ecb491 --- /dev/null +++ b/Docs/types/DelayedDamageContextWrapper.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DelayedDamageContextWrapper + + +

Back to Server.Spells

+

(Spell) - DelayedDamageContextWrapper

+ (ctor) DelayedDamageContextWrapper()
+ void Add( Mobile m, Timer t )
+ void Remove( Mobile m )
+ + diff --git a/Docs/types/DeleteCommand.html b/Docs/types/DeleteCommand.html new file mode 100644 index 0000000..a221d2c --- /dev/null +++ b/Docs/types/DeleteCommand.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DeleteCommand + + +

Back to Server.Commands.Generic

+

DeleteCommand : BaseCommand

+ (ctor) DeleteCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ virtual void ExecuteList( CommandEventArgs e, ArrayList list )
+ void OnConfirmCallback( Mobile from, bool okay, object state )
+ + diff --git a/Docs/types/DeleteRequestEventArgs.html b/Docs/types/DeleteRequestEventArgs.html new file mode 100644 index 0000000..3249b8b --- /dev/null +++ b/Docs/types/DeleteRequestEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DeleteRequestEventArgs + + +

Back to Server

+

DeleteRequestEventArgs : EventArgs

+ (ctor) DeleteRequestEventArgs( NetState state, int index )
+ int Index( get; )
+ NetState State( get; )
+ + diff --git a/Docs/types/DeleteRequestEventHandler.html b/Docs/types/DeleteRequestEventHandler.html new file mode 100644 index 0000000..ba51ef9 --- /dev/null +++ b/Docs/types/DeleteRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DeleteRequestEventHandler + + +

Back to Server

+

DeleteRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) DeleteRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( DeleteRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( DeleteRequestEventArgs e )
+ + diff --git a/Docs/types/DeleteResult.html b/Docs/types/DeleteResult.html new file mode 100644 index 0000000..5676572 --- /dev/null +++ b/Docs/types/DeleteResult.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DeleteResult + + +

Back to Server.Network

+

DeleteResult : Packet

+ (ctor) DeleteResult( DeleteResultType res )
+ + diff --git a/Docs/types/DeleteResultType.html b/Docs/types/DeleteResultType.html new file mode 100644 index 0000000..420f242 --- /dev/null +++ b/Docs/types/DeleteResultType.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DeleteResultType + + +

Back to Server.Network

+

DeleteResultType (Enum)

+ PasswordInvalid = 0,
+ CharNotExist = 1,
+ CharBeingPlayed = 2,
+ CharTooYoung = 3,
+ CharQueued = 4,
+ BadRequest = 5
+ + diff --git a/Docs/types/DeleteTimer.html b/Docs/types/DeleteTimer.html new file mode 100644 index 0000000..9e74986 --- /dev/null +++ b/Docs/types/DeleteTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DeleteTimer + + +

Back to Server.Mobiles

+

(BaseEscortable) - DeleteTimer : Timer

+ (ctor) DeleteTimer( Mobile m, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/DeltaState.html b/Docs/types/DeltaState.html new file mode 100644 index 0000000..4eba606 --- /dev/null +++ b/Docs/types/DeltaState.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DeltaState + + +

Back to Server

+

(Statics) - DeltaState

+ (ctor) DeltaState( Point2D p )
+ + diff --git a/Docs/types/DemolishEntry.html b/Docs/types/DemolishEntry.html new file mode 100644 index 0000000..ea9562c --- /dev/null +++ b/Docs/types/DemolishEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DemolishEntry + + +

Back to Server.Mobiles

+

(CharacterStatue) - DemolishEntry : ContextMenuEntry

+ (ctor) DemolishEntry( CharacterStatue statue )
+ virtual void OnClick()
+ + diff --git a/Docs/types/DemonForks.html b/Docs/types/DemonForks.html new file mode 100644 index 0000000..0bf9b33 --- /dev/null +++ b/Docs/types/DemonForks.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DemonForks + + +

Back to Server.Items

+

DemonForks : Sai, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) DemonForks()
+ (ctor) DemonForks( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DemonKnight.html b/Docs/types/DemonKnight.html new file mode 100644 index 0000000..a0654d4 --- /dev/null +++ b/Docs/types/DemonKnight.html @@ -0,0 +1,34 @@ + + + RunUO Documentation - Class Overview - DemonKnight + + +

Back to Server.Mobiles

+

DemonKnight : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) Type[] ArtifactRarity10( get; )
+ (static) Type[] ArtifactRarity11( get; )
+ (static) bool CheckArtifactChance( Mobile boss )
+ (static) Item CreateRandomArtifact()
+ (static) void DistributeArtifact( Mobile to )
+ (static) void DistributeArtifact( BaseCreature creature )
+ (static) void DistributeArtifact( Mobile to, Item artifact )
+ (static) void DistributeArtifact( BaseCreature creature, Item artifact )
+ (static) Mobile FindRandomPlayer( BaseCreature creature )
+ (static) int GetArtifactChance( Mobile boss )
+ (ctor) DemonKnight()
+ (ctor) DemonKnight( Serial serial )
+ bool AreaPeaceImmune( get; )
+ bool BardImmune( get; )
+ bool IgnoreYoungProtection( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void CreateBones_Callback( object state )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DemonSkull.html b/Docs/types/DemonSkull.html new file mode 100644 index 0000000..1b257a0 --- /dev/null +++ b/Docs/types/DemonSkull.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DemonSkull + + +

Back to Server.Items

+

DemonSkull : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DemonSkull()
+ (ctor) DemonSkull( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DescriptionAttribute.html b/Docs/types/DescriptionAttribute.html new file mode 100644 index 0000000..063dfc2 --- /dev/null +++ b/Docs/types/DescriptionAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DescriptionAttribute + + +

Back to Server

+

DescriptionAttribute : Attribute, _Attribute

+ (ctor) DescriptionAttribute( string description )
+ string Description( get; )
+ + diff --git a/Docs/types/DesertOstard.html b/Docs/types/DesertOstard.html new file mode 100644 index 0000000..8e02e5d --- /dev/null +++ b/Docs/types/DesertOstard.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DesertOstard + + +

Back to Server.Mobiles

+

DesertOstard : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) DesertOstard()
+ (ctor) DesertOstard( Serial serial )
+ (ctor) DesertOstard( string name )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DesignContext.html b/Docs/types/DesignContext.html new file mode 100644 index 0000000..48c871f --- /dev/null +++ b/Docs/types/DesignContext.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DesignContext + + +

Back to Server.Multis

+

DesignContext

+ (static) Dictionary<Mobile,DesignContext> Table( get; )
+ (static) void Add( Mobile from, HouseFoundation foundation )
+ (static) bool Check( Mobile m )
+ (static) DesignContext Find( Mobile from )
+ (static) void Remove( Mobile from )
+ (ctor) DesignContext( HouseFoundation foundation )
+ HouseFoundation Foundation( get; )
+ int Level( get; set; )
+ int MaxLevels( get; )
+ + diff --git a/Docs/types/DesignInsertTarget.html b/Docs/types/DesignInsertTarget.html new file mode 100644 index 0000000..9c55f99 --- /dev/null +++ b/Docs/types/DesignInsertTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DesignInsertTarget + + +

Back to Server.Multis

+

(HouseFoundation) - DesignInsertTarget : Target

+ (ctor) DesignInsertTarget( HouseFoundation foundation )
+ virtual void OnTarget( Mobile from, object obj )
+ virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType )
+ + diff --git a/Docs/types/DesignState.html b/Docs/types/DesignState.html new file mode 100644 index 0000000..94c181c --- /dev/null +++ b/Docs/types/DesignState.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - DesignState + + +

Back to Server.Multis

+

DesignState

+ (static) bool IsFixture( int itemID )
+ (ctor) DesignState( DesignState toCopy )
+ (ctor) DesignState( HouseFoundation foundation, MultiComponentList components )
+ (ctor) DesignState( HouseFoundation foundation, GenericReader reader )
+ MultiComponentList Components( get; )
+ MultiTileEntry[] Fixtures( get; )
+ HouseFoundation Foundation( get; )
+ Packet PacketCache( get; set; )
+ int Revision( get; set; )
+ void FreezeFixtures()
+ void MeltFixtures()
+ void OnRevised()
+ void SendDetailedInfoTo( NetState state )
+ void SendGeneralInfoTo( NetState state )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DesignStateDetailed.html b/Docs/types/DesignStateDetailed.html new file mode 100644 index 0000000..1ea73c5 --- /dev/null +++ b/Docs/types/DesignStateDetailed.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DesignStateDetailed + + +

Back to Server.Multis

+

DesignStateDetailed : Packet

+

Nested Types: SendQueueEntry

+ (static) void Clear( byte[] buffer, int size )
+ (static) void CompressionThread()
+ (static) void SendDetails( NetState ns, HouseFoundation house, DesignState state )
+ (static) void SendPacket_Sandbox( object state )
+ (ctor) DesignStateDetailed( int serial, int revision, int xMin, int yMin, int xMax, int yMax, MultiTileEntry[] tiles )
+ void Write( short value )
+ void Write( int value )
+ void Write( byte value )
+ void Write( byte[] buffer, int offset, int size )
+ + diff --git a/Docs/types/DesignStateGeneral.html b/Docs/types/DesignStateGeneral.html new file mode 100644 index 0000000..95e2c7d --- /dev/null +++ b/Docs/types/DesignStateGeneral.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DesignStateGeneral + + +

Back to Server.Multis

+

DesignStateGeneral : Packet

+ (ctor) DesignStateGeneral( HouseFoundation house, DesignState state )
+ + diff --git a/Docs/types/DetectHidden.html b/Docs/types/DetectHidden.html new file mode 100644 index 0000000..1d08bbb --- /dev/null +++ b/Docs/types/DetectHidden.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DetectHidden + + +

Back to Server.SkillHandlers

+

DetectHidden

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile src )
+ (ctor) DetectHidden()
+ + diff --git a/Docs/types/DetectiveBoots.html b/Docs/types/DetectiveBoots.html new file mode 100644 index 0000000..56b97ca --- /dev/null +++ b/Docs/types/DetectiveBoots.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DetectiveBoots + + +

Back to Server.Items

+

DetectiveBoots : Boots, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DetectiveBoots()
+ (ctor) DetectiveBoots( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ int Level( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Devourer.html b/Docs/types/Devourer.html new file mode 100644 index 0000000..a753ee8 --- /dev/null +++ b/Docs/types/Devourer.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Devourer + + +

Back to Server.Mobiles

+

Devourer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Devourer()
+ (ctor) Devourer( Serial serial )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Diamond.html b/Docs/types/Diamond.html new file mode 100644 index 0000000..180059c --- /dev/null +++ b/Docs/types/Diamond.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Diamond + + +

Back to Server.Items

+

Diamond : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Diamond()
+ (ctor) Diamond( int amount )
+ (ctor) Diamond( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DiamondMace.html b/Docs/types/DiamondMace.html new file mode 100644 index 0000000..4744ab3 --- /dev/null +++ b/Docs/types/DiamondMace.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - DiamondMace + + +

Back to Server.Items

+

DiamondMace : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: Bonesmasher, ShardThrasher

+ (ctor) DiamondMace()
+ (ctor) DiamondMace( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Dices.html b/Docs/types/Dices.html new file mode 100644 index 0000000..53a3914 --- /dev/null +++ b/Docs/types/Dices.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Dices + + +

Back to Server.Items

+

Dices : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable

+ (ctor) Dices()
+ (ctor) Dices( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnTelekinesis( Mobile from )
+ void Roll( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DigEntry.html b/Docs/types/DigEntry.html new file mode 100644 index 0000000..407fd5c --- /dev/null +++ b/Docs/types/DigEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DigEntry + + +

Back to Server.Items

+

(TreasureMap) - DigEntry : ContextMenuEntry

+ (ctor) DigEntry( TreasureMap map, bool enabled )
+ virtual void OnClick()
+ + diff --git a/Docs/types/DigTarget.html b/Docs/types/DigTarget.html new file mode 100644 index 0000000..2756c83 --- /dev/null +++ b/Docs/types/DigTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DigTarget + + +

Back to Server.Items

+

(TreasureMap) - DigTarget : Target

+ (ctor) DigTarget( TreasureMap map )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/DigTimer.html b/Docs/types/DigTimer.html new file mode 100644 index 0000000..52b95cc --- /dev/null +++ b/Docs/types/DigTimer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DigTimer + + +

Back to Server.Items

+

(TreasureMap) - DigTimer : Timer

+

Nested Types: SoundTimer

+ (ctor) DigTimer( Mobile from, TreasureMap treasureMap, Point3D location, Map map )
+ virtual void OnTick()
+ void Terminate()
+ + diff --git a/Docs/types/DimensionalTravel.html b/Docs/types/DimensionalTravel.html new file mode 100644 index 0000000..ca9f562 --- /dev/null +++ b/Docs/types/DimensionalTravel.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DimensionalTravel + + +

Back to Server.Items

+

DimensionalTravel : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) DimensionalTravel()
+ (ctor) DimensionalTravel( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DireWolf.html b/Docs/types/DireWolf.html new file mode 100644 index 0000000..d8a8d15 --- /dev/null +++ b/Docs/types/DireWolf.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DireWolf + + +

Back to Server.Mobiles

+

DireWolf : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DireWolf()
+ (ctor) DireWolf( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Direction.html b/Docs/types/Direction.html new file mode 100644 index 0000000..d2be316 --- /dev/null +++ b/Docs/types/Direction.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Direction + + +

Back to Server

+

Direction (Enum)

+ North = 0,
+ Right = 1,
+ East = 2,
+ Down = 3,
+ South = 4,
+ Left = 5,
+ West = 6,
+ Up = 7,
+ Mask = 7,
+ Running = 128,
+ ValueMask = 135
+ + diff --git a/Docs/types/DirectionConversation.html b/Docs/types/DirectionConversation.html new file mode 100644 index 0000000..f0706e1 --- /dev/null +++ b/Docs/types/DirectionConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DirectionConversation + + +

Back to Server.Engines.Quests.Zento

+

DirectionConversation : QuestConversation

+ (ctor) DirectionConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DirtGreenThornsEffect.html b/Docs/types/DirtGreenThornsEffect.html new file mode 100644 index 0000000..73826c5 --- /dev/null +++ b/Docs/types/DirtGreenThornsEffect.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DirtGreenThornsEffect + + +

Back to Server.Items

+

DirtGreenThornsEffect : GreenThornsEffect

+ (ctor) DirtGreenThornsEffect( Point3D location, Map map, Mobile from )
+ virtual TimeSpan Play( int step )
+ void SpawnReagents()
+ + diff --git a/Docs/types/DirtPatch.html b/Docs/types/DirtPatch.html new file mode 100644 index 0000000..be11142 --- /dev/null +++ b/Docs/types/DirtPatch.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DirtPatch + + +

Back to Server.Items

+

DirtPatch : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DirtPatch()
+ (ctor) DirtPatch( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DirtyFrypan.html b/Docs/types/DirtyFrypan.html new file mode 100644 index 0000000..5ca84c1 --- /dev/null +++ b/Docs/types/DirtyFrypan.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DirtyFrypan + + +

Back to Server.Items

+

DirtyFrypan : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DirtyFrypan()
+ (ctor) DirtyFrypan( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DirtyKettle.html b/Docs/types/DirtyKettle.html new file mode 100644 index 0000000..3934d3a --- /dev/null +++ b/Docs/types/DirtyKettle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DirtyKettle + + +

Back to Server.Items

+

DirtyKettle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DirtyKettle()
+ (ctor) DirtyKettle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DirtyPan.html b/Docs/types/DirtyPan.html new file mode 100644 index 0000000..ecbf975 --- /dev/null +++ b/Docs/types/DirtyPan.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DirtyPan + + +

Back to Server.Items

+

DirtyPan : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DirtyPan()
+ (ctor) DirtyPan( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DirtyPot.html b/Docs/types/DirtyPot.html new file mode 100644 index 0000000..31daf29 --- /dev/null +++ b/Docs/types/DirtyPot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DirtyPot + + +

Back to Server.Items

+

DirtyPot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DirtyPot()
+ (ctor) DirtyPot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DirtyRoundPot.html b/Docs/types/DirtyRoundPot.html new file mode 100644 index 0000000..c0cd982 --- /dev/null +++ b/Docs/types/DirtyRoundPot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DirtyRoundPot + + +

Back to Server.Items

+

DirtyRoundPot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DirtyRoundPot()
+ (ctor) DirtyRoundPot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DirtySmallPot.html b/Docs/types/DirtySmallPot.html new file mode 100644 index 0000000..6b63efe --- /dev/null +++ b/Docs/types/DirtySmallPot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DirtySmallPot + + +

Back to Server.Items

+

DirtySmallPot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DirtySmallPot()
+ (ctor) DirtySmallPot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DirtySmallRoundPot.html b/Docs/types/DirtySmallRoundPot.html new file mode 100644 index 0000000..7eacd57 --- /dev/null +++ b/Docs/types/DirtySmallRoundPot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DirtySmallRoundPot + + +

Back to Server.Items

+

DirtySmallRoundPot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DirtySmallRoundPot()
+ (ctor) DirtySmallRoundPot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DisappearingRaiseSwitch.html b/Docs/types/DisappearingRaiseSwitch.html new file mode 100644 index 0000000..f936b4b --- /dev/null +++ b/Docs/types/DisappearingRaiseSwitch.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DisappearingRaiseSwitch + + +

Back to Server.Items

+

DisappearingRaiseSwitch : RaiseSwitch, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DisappearingRaiseSwitch()
+ (ctor) DisappearingRaiseSwitch( Serial serial )
+ int CurrentRange( get; )
+ bool HandlesOnMovement( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Flip()
+ virtual void OnLocationChange( Point3D oldLoc )
+ virtual void OnMapChange()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ void Refresh()
+ virtual void Reset()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Disarm.html b/Docs/types/Disarm.html new file mode 100644 index 0000000..e649988 --- /dev/null +++ b/Docs/types/Disarm.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Disarm + + +

Back to Server.Items

+

Disarm : WeaponAbility

+ (ctor) Disarm()
+ int BaseMana( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual bool RequiresTactics( Mobile from )
+ + diff --git a/Docs/types/DisarmRequestEventArgs.html b/Docs/types/DisarmRequestEventArgs.html new file mode 100644 index 0000000..3e93a59 --- /dev/null +++ b/Docs/types/DisarmRequestEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DisarmRequestEventArgs + + +

Back to Server

+

DisarmRequestEventArgs : EventArgs

+ (ctor) DisarmRequestEventArgs( Mobile m )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/DisarmRequestEventHandler.html b/Docs/types/DisarmRequestEventHandler.html new file mode 100644 index 0000000..5bd392a --- /dev/null +++ b/Docs/types/DisarmRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DisarmRequestEventHandler + + +

Back to Server

+

DisarmRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) DisarmRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( DisarmRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( DisarmRequestEventArgs e )
+ + diff --git a/Docs/types/DisassembleEntry.html b/Docs/types/DisassembleEntry.html new file mode 100644 index 0000000..7728f49 --- /dev/null +++ b/Docs/types/DisassembleEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DisassembleEntry + + +

Back to Server.Engines.Quests.Collector

+

(Obsidian) - DisassembleEntry : ContextMenuEntry

+ (ctor) DisassembleEntry( Obsidian obsidian )
+ virtual void OnClick()
+ + diff --git a/Docs/types/DisconnectedEventArgs.html b/Docs/types/DisconnectedEventArgs.html new file mode 100644 index 0000000..40562ca --- /dev/null +++ b/Docs/types/DisconnectedEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DisconnectedEventArgs + + +

Back to Server

+

DisconnectedEventArgs : EventArgs

+ (ctor) DisconnectedEventArgs( Mobile m )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/DisconnectedEventHandler.html b/Docs/types/DisconnectedEventHandler.html new file mode 100644 index 0000000..3734594 --- /dev/null +++ b/Docs/types/DisconnectedEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DisconnectedEventHandler + + +

Back to Server

+

DisconnectedEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) DisconnectedEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( DisconnectedEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( DisconnectedEventArgs e )
+ + diff --git a/Docs/types/Discordance.html b/Docs/types/Discordance.html new file mode 100644 index 0000000..85e5759 --- /dev/null +++ b/Docs/types/Discordance.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Discordance + + +

Back to Server.SkillHandlers

+

Discordance

+

Nested Types: DiscordanceInfo, DiscordanceTarget

+ (static) bool GetEffect( Mobile targ, ref int effect )
+ (static) void Initialize()
+ (static) void OnPickedInstrument( Mobile from, BaseInstrument instrument )
+ (static) TimeSpan OnUse( Mobile m )
+ (static) void ProcessDiscordance( DiscordanceInfo info )
+ (ctor) Discordance()
+ + diff --git a/Docs/types/DiscordanceInfo.html b/Docs/types/DiscordanceInfo.html new file mode 100644 index 0000000..75c6ea4 --- /dev/null +++ b/Docs/types/DiscordanceInfo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DiscordanceInfo + + +

Back to Server.SkillHandlers

+

(Discordance) - DiscordanceInfo

+ (ctor) DiscordanceInfo( Mobile from, Mobile creature, int effect, ArrayList mods )
+ void Apply()
+ void Clear()
+ + diff --git a/Docs/types/DiscordanceTarget.html b/Docs/types/DiscordanceTarget.html new file mode 100644 index 0000000..c3f4411 --- /dev/null +++ b/Docs/types/DiscordanceTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DiscordanceTarget + + +

Back to Server.SkillHandlers

+

(Discordance) - DiscordanceTarget : Target

+ (ctor) DiscordanceTarget( Mobile from, BaseInstrument inst )
+ virtual void OnTarget( Mobile from, object target )
+ + diff --git a/Docs/types/DiseasedBark.html b/Docs/types/DiseasedBark.html new file mode 100644 index 0000000..6fc186c --- /dev/null +++ b/Docs/types/DiseasedBark.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DiseasedBark + + +

Back to Server.Items

+

DiseasedBark : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DiseasedBark()
+ (ctor) DiseasedBark( int amount )
+ (ctor) DiseasedBark( Serial serial )
+ (ctor) DiseasedBark( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DiseasedCat.html b/Docs/types/DiseasedCat.html new file mode 100644 index 0000000..b41c2a9 --- /dev/null +++ b/Docs/types/DiseasedCat.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DiseasedCat + + +

Back to Server.Engines.Quests.Samurai

+

DiseasedCat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DiseasedCat()
+ (ctor) DiseasedCat( Serial serial )
+ bool AlwaysMurderer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DisguiseEntry.html b/Docs/types/DisguiseEntry.html new file mode 100644 index 0000000..09dd2cc --- /dev/null +++ b/Docs/types/DisguiseEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisguiseEntry + + +

Back to Server.Items

+

(DisguiseGump) - DisguiseEntry

+ (ctor) DisguiseEntry( int itemID, int gumpID, int ox, int oy, int name )
+ + diff --git a/Docs/types/DisguiseGump.html b/Docs/types/DisguiseGump.html new file mode 100644 index 0000000..1ee79df --- /dev/null +++ b/Docs/types/DisguiseGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DisguiseGump + + +

Back to Server.Items

+

DisguiseGump : Gump

+

Nested Types: DisguiseEntry

+ (ctor) DisguiseGump( Mobile from, DisguiseKit kit, bool startAtHair, bool used )
+ void DrawEntries( int index, int page, int nextPage, DisguiseEntry[] entries, int nextNumber )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/DisguiseKit.html b/Docs/types/DisguiseKit.html new file mode 100644 index 0000000..3f3c560 --- /dev/null +++ b/Docs/types/DisguiseKit.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DisguiseKit + + +

Back to Server.Items

+

DisguiseKit : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DisguiseKit()
+ (ctor) DisguiseKit( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ bool ValidateUse( Mobile from )
+ + diff --git a/Docs/types/DisguisePersistance.html b/Docs/types/DisguisePersistance.html new file mode 100644 index 0000000..ca0c8ad --- /dev/null +++ b/Docs/types/DisguisePersistance.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DisguisePersistance + + +

Back to Server.Items

+

DisguisePersistance : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) DisguisePersistance Instance( get; )
+ (ctor) DisguisePersistance()
+ (ctor) DisguisePersistance( Serial serial )
+ string DefaultName( get; )
+ virtual void Delete()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DisguiseTimers.html b/Docs/types/DisguiseTimers.html new file mode 100644 index 0000000..bb22f27 --- /dev/null +++ b/Docs/types/DisguiseTimers.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DisguiseTimers + + +

Back to Server.Items

+

DisguiseTimers

+

Nested Types: InternalTimer

+ (static) Hashtable Timers( get; )
+ (static) void CreateTimer( Mobile m, TimeSpan delay )
+ (static) void Initialize()
+ (static) bool IsDisguised( Mobile m )
+ (static) bool RemoveTimer( Mobile m )
+ (static) void StartTimer( Mobile m )
+ (static) bool StopTimer( Mobile m )
+ (static) TimeSpan TimeRemaining( Mobile m )
+ (ctor) DisguiseTimers()
+ + diff --git a/Docs/types/Dismount.html b/Docs/types/Dismount.html new file mode 100644 index 0000000..cc6675b --- /dev/null +++ b/Docs/types/Dismount.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Dismount + + +

Back to Server.Items

+

Dismount : WeaponAbility

+ (ctor) Dismount()
+ int BaseMana( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/DismountCommand.html b/Docs/types/DismountCommand.html new file mode 100644 index 0000000..9c4bfde --- /dev/null +++ b/Docs/types/DismountCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DismountCommand + + +

Back to Server.Commands.Generic

+

DismountCommand : BaseCommand

+ (ctor) DismountCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/DismountTarget.html b/Docs/types/DismountTarget.html new file mode 100644 index 0000000..84f9a86 --- /dev/null +++ b/Docs/types/DismountTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DismountTarget + + +

Back to Server.Commands

+

(CommandHandlers) - DismountTarget : Target

+ (ctor) DismountTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/DispelEvilSpell.html b/Docs/types/DispelEvilSpell.html new file mode 100644 index 0000000..f7ab65c --- /dev/null +++ b/Docs/types/DispelEvilSpell.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DispelEvilSpell + + +

Back to Server.Spells.Chivalry

+

DispelEvilSpell : PaladinSpell, ISpell

+ (ctor) DispelEvilSpell( Mobile caster, Item scroll )
+ bool BlocksMovement( get; )
+ TimeSpan CastDelayBase( get; )
+ bool DelayedDamage( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ virtual void SendCastEffect()
+ + diff --git a/Docs/types/DispelFieldScroll.html b/Docs/types/DispelFieldScroll.html new file mode 100644 index 0000000..e973f33 --- /dev/null +++ b/Docs/types/DispelFieldScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DispelFieldScroll + + +

Back to Server.Items

+

DispelFieldScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) DispelFieldScroll()
+ (ctor) DispelFieldScroll( int amount )
+ (ctor) DispelFieldScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DispelFieldSpell.html b/Docs/types/DispelFieldSpell.html new file mode 100644 index 0000000..74e2f77 --- /dev/null +++ b/Docs/types/DispelFieldSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DispelFieldSpell + + +

Back to Server.Spells.Fifth

+

DispelFieldSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) DispelFieldSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Item item )
+ + diff --git a/Docs/types/DispelScroll.html b/Docs/types/DispelScroll.html new file mode 100644 index 0000000..f23ed35 --- /dev/null +++ b/Docs/types/DispelScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DispelScroll + + +

Back to Server.Items

+

DispelScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) DispelScroll()
+ (ctor) DispelScroll( int amount )
+ (ctor) DispelScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DispelSpell.html b/Docs/types/DispelSpell.html new file mode 100644 index 0000000..b486563 --- /dev/null +++ b/Docs/types/DispelSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DispelSpell + + +

Back to Server.Spells.Sixth

+

DispelSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) DispelSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/DispellableAttribute.html b/Docs/types/DispellableAttribute.html new file mode 100644 index 0000000..2762843 --- /dev/null +++ b/Docs/types/DispellableAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DispellableAttribute + + +

Back to Server.Misc

+

DispellableAttribute : Attribute, _Attribute

+ (ctor) DispellableAttribute()
+ + diff --git a/Docs/types/DispellableFieldAttribute.html b/Docs/types/DispellableFieldAttribute.html new file mode 100644 index 0000000..54bf1e7 --- /dev/null +++ b/Docs/types/DispellableFieldAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DispellableFieldAttribute + + +

Back to Server.Misc

+

DispellableFieldAttribute : Attribute, _Attribute

+ (ctor) DispellableFieldAttribute()
+ + diff --git a/Docs/types/DisplayBuyList.html b/Docs/types/DisplayBuyList.html new file mode 100644 index 0000000..2f7d827 --- /dev/null +++ b/Docs/types/DisplayBuyList.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayBuyList + + +

Back to Server.Network

+

DisplayBuyList : Packet

+ (ctor) DisplayBuyList( Mobile vendor )
+ + diff --git a/Docs/types/DisplayBuyListHS.html b/Docs/types/DisplayBuyListHS.html new file mode 100644 index 0000000..7133645 --- /dev/null +++ b/Docs/types/DisplayBuyListHS.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayBuyListHS + + +

Back to Server.Network

+

DisplayBuyListHS : Packet

+ (ctor) DisplayBuyListHS( Mobile vendor )
+ + diff --git a/Docs/types/DisplayCache.html b/Docs/types/DisplayCache.html new file mode 100644 index 0000000..0518932 --- /dev/null +++ b/Docs/types/DisplayCache.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DisplayCache + + +

Back to Server.Mobiles

+

(GenericBuyInfo) - DisplayCache : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) DisplayCache Cache( get; )
+ (ctor) DisplayCache()
+ (ctor) DisplayCache( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ IEntity Lookup( Type key )
+ virtual void OnAfterDelete()
+ virtual void Serialize( GenericWriter writer )
+ void Store( Type key, IEntity obj, bool cache )
+ + diff --git a/Docs/types/DisplayContextMenu.html b/Docs/types/DisplayContextMenu.html new file mode 100644 index 0000000..3114191 --- /dev/null +++ b/Docs/types/DisplayContextMenu.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayContextMenu + + +

Back to Server.Network

+

DisplayContextMenu : Packet

+ (ctor) DisplayContextMenu( ContextMenu menu )
+ + diff --git a/Docs/types/DisplayEquipmentInfo.html b/Docs/types/DisplayEquipmentInfo.html new file mode 100644 index 0000000..685a6a5 --- /dev/null +++ b/Docs/types/DisplayEquipmentInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayEquipmentInfo + + +

Back to Server.Network

+

DisplayEquipmentInfo : Packet

+ (ctor) DisplayEquipmentInfo( Item item, EquipmentInfo info )
+ + diff --git a/Docs/types/DisplayGump.html b/Docs/types/DisplayGump.html new file mode 100644 index 0000000..677e7cc --- /dev/null +++ b/Docs/types/DisplayGump.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayGump + + +

Back to Server.Network

+

DisplayGump : Packet

+ (ctor) DisplayGump( Gump g, string layout, string[] text )
+ + diff --git a/Docs/types/DisplayGumpFast.html b/Docs/types/DisplayGumpFast.html new file mode 100644 index 0000000..88b02b9 --- /dev/null +++ b/Docs/types/DisplayGumpFast.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DisplayGumpFast + + +

Back to Server.Network

+

DisplayGumpFast : Packet, IGumpWriter

+ (ctor) DisplayGumpFast( Gump g )
+ int Switches( get; set; )
+ int TextEntries( get; set; )
+ virtual void AppendLayout( byte[] buffer )
+ virtual void AppendLayout( string text )
+ virtual void AppendLayout( int val )
+ virtual void AppendLayout( bool val )
+ virtual void AppendLayoutNS( int val )
+ virtual void Flush()
+ virtual void WriteStrings( List<String> text )
+ + diff --git a/Docs/types/DisplayGumpPacked.html b/Docs/types/DisplayGumpPacked.html new file mode 100644 index 0000000..6522bfb --- /dev/null +++ b/Docs/types/DisplayGumpPacked.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - DisplayGumpPacked + + +

Back to Server.Network

+

DisplayGumpPacked : Packet, IGumpWriter

+ (ctor) DisplayGumpPacked( Gump gump )
+ int Switches( get; set; )
+ int TextEntries( get; set; )
+ virtual void AppendLayout( byte[] buffer )
+ virtual void AppendLayout( string text )
+ virtual void AppendLayout( bool val )
+ virtual void AppendLayout( int val )
+ virtual void AppendLayoutNS( int val )
+ virtual void Flush()
+ void WritePacked( PacketWriter src )
+ virtual void WriteStrings( List<String> strings )
+ + diff --git a/Docs/types/DisplayHelpTopic.html b/Docs/types/DisplayHelpTopic.html new file mode 100644 index 0000000..ecf91e4 --- /dev/null +++ b/Docs/types/DisplayHelpTopic.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayHelpTopic + + +

Back to Server.Network

+

DisplayHelpTopic : Packet

+ (ctor) DisplayHelpTopic( int topicID, bool display )
+ + diff --git a/Docs/types/DisplayHuePicker.html b/Docs/types/DisplayHuePicker.html new file mode 100644 index 0000000..9d7972a --- /dev/null +++ b/Docs/types/DisplayHuePicker.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayHuePicker + + +

Back to Server.Network

+

DisplayHuePicker : Packet

+ (ctor) DisplayHuePicker( HuePicker huePicker )
+ + diff --git a/Docs/types/DisplayItemListMenu.html b/Docs/types/DisplayItemListMenu.html new file mode 100644 index 0000000..172b3dc --- /dev/null +++ b/Docs/types/DisplayItemListMenu.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayItemListMenu + + +

Back to Server.Network

+

DisplayItemListMenu : Packet

+ (ctor) DisplayItemListMenu( ItemListMenu menu )
+ + diff --git a/Docs/types/DisplayPaperdoll.html b/Docs/types/DisplayPaperdoll.html new file mode 100644 index 0000000..662e55c --- /dev/null +++ b/Docs/types/DisplayPaperdoll.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayPaperdoll + + +

Back to Server.Network

+

DisplayPaperdoll : Packet

+ (ctor) DisplayPaperdoll( Mobile m, string text, bool canLift )
+ + diff --git a/Docs/types/DisplayProfile.html b/Docs/types/DisplayProfile.html new file mode 100644 index 0000000..5f180e4 --- /dev/null +++ b/Docs/types/DisplayProfile.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayProfile + + +

Back to Server.Network

+

DisplayProfile : Packet

+ (ctor) DisplayProfile( bool realSerial, Mobile m, string header, string body, string footer )
+ + diff --git a/Docs/types/DisplayQuestionMenu.html b/Docs/types/DisplayQuestionMenu.html new file mode 100644 index 0000000..dc22bfa --- /dev/null +++ b/Docs/types/DisplayQuestionMenu.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplayQuestionMenu + + +

Back to Server.Network

+

DisplayQuestionMenu : Packet

+ (ctor) DisplayQuestionMenu( QuestionMenu menu )
+ + diff --git a/Docs/types/DisplaySecureTrade.html b/Docs/types/DisplaySecureTrade.html new file mode 100644 index 0000000..604d5a0 --- /dev/null +++ b/Docs/types/DisplaySecureTrade.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplaySecureTrade + + +

Back to Server.Network

+

DisplaySecureTrade : Packet

+ (ctor) DisplaySecureTrade( Mobile them, Container first, Container second, string name )
+ + diff --git a/Docs/types/DisplaySignGump.html b/Docs/types/DisplaySignGump.html new file mode 100644 index 0000000..05ef58f --- /dev/null +++ b/Docs/types/DisplaySignGump.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplaySignGump + + +

Back to Server.Network

+

DisplaySignGump : Packet

+ (ctor) DisplaySignGump( Serial serial, int gumpID, string unknown, string caption )
+ + diff --git a/Docs/types/DisplaySpellbook.html b/Docs/types/DisplaySpellbook.html new file mode 100644 index 0000000..277a4e4 --- /dev/null +++ b/Docs/types/DisplaySpellbook.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplaySpellbook + + +

Back to Server.Network

+

DisplaySpellbook : Packet

+ (ctor) DisplaySpellbook( Item book )
+ + diff --git a/Docs/types/DisplaySpellbookHS.html b/Docs/types/DisplaySpellbookHS.html new file mode 100644 index 0000000..57ac883 --- /dev/null +++ b/Docs/types/DisplaySpellbookHS.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DisplaySpellbookHS + + +

Back to Server.Network

+

DisplaySpellbookHS : Packet

+ (ctor) DisplaySpellbookHS( Item book )
+ + diff --git a/Docs/types/Disrobe.html b/Docs/types/Disrobe.html new file mode 100644 index 0000000..7062160 --- /dev/null +++ b/Docs/types/Disrobe.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Disrobe + + +

Back to Server.Items

+

Disrobe : WeaponAbility

+ (ctor) Disrobe()
+ int BaseMana( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/DistinctCompiler.html b/Docs/types/DistinctCompiler.html new file mode 100644 index 0000000..d99756d --- /dev/null +++ b/Docs/types/DistinctCompiler.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DistinctCompiler + + +

Back to Server.Commands.Generic

+

DistinctCompiler

+

Nested Types: (Anonymous-Type)--c__DisplayClass1, (Anonymous-Type)--c__DisplayClass3

+ (static) IComparer Compile( AssemblyEmitter assembly, Type objectType, Property[] props )
+ + diff --git a/Docs/types/DistinctExtension.html b/Docs/types/DistinctExtension.html new file mode 100644 index 0000000..46a0873 --- /dev/null +++ b/Docs/types/DistinctExtension.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DistinctExtension + + +

Back to Server.Commands.Generic

+

DistinctExtension : BaseExtension

+ (static) BaseExtension <.cctor>b__0()
+ (static) void Initialize()
+ (ctor) DistinctExtension()
+ ExtensionInfo Info( get; )
+ virtual void Filter( ArrayList list )
+ virtual void Optimize( Mobile from, Type baseType, ref AssemblyEmitter assembly )
+ virtual void Parse( Mobile from, string[] arguments, int offset, int size )
+ + diff --git a/Docs/types/DisturbType.html b/Docs/types/DisturbType.html new file mode 100644 index 0000000..e7274d5 --- /dev/null +++ b/Docs/types/DisturbType.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DisturbType + + +

Back to Server.Spells

+

DisturbType (Enum)

+ Unspecified = 0,
+ EquipRequest = 1,
+ UseRequest = 2,
+ Hurt = 3,
+ Kill = 4,
+ NewCast = 5
+ + diff --git a/Docs/types/DisturbingPortraitAddon.html b/Docs/types/DisturbingPortraitAddon.html new file mode 100644 index 0000000..8e73328 --- /dev/null +++ b/Docs/types/DisturbingPortraitAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DisturbingPortraitAddon + + +

Back to Server.Items

+

DisturbingPortraitAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) DisturbingPortraitAddon()
+ (ctor) DisturbingPortraitAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DisturbingPortraitComponent.html b/Docs/types/DisturbingPortraitComponent.html new file mode 100644 index 0000000..8b70f72 --- /dev/null +++ b/Docs/types/DisturbingPortraitComponent.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DisturbingPortraitComponent + + +

Back to Server.Items

+

DisturbingPortraitComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) DisturbingPortraitComponent()
+ (ctor) DisturbingPortraitComponent( Serial serial )
+ int LabelNumber( get; )
+ void Change()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DisturbingPortraitDeed.html b/Docs/types/DisturbingPortraitDeed.html new file mode 100644 index 0000000..fdfe1ab --- /dev/null +++ b/Docs/types/DisturbingPortraitDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DisturbingPortraitDeed + + +

Back to Server.Items

+

DisturbingPortraitDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DisturbingPortraitDeed()
+ (ctor) DisturbingPortraitDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DiversityOfOurLand.html b/Docs/types/DiversityOfOurLand.html new file mode 100644 index 0000000..94b5a0c --- /dev/null +++ b/Docs/types/DiversityOfOurLand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DiversityOfOurLand + + +

Back to Server.Items

+

DiversityOfOurLand : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) DiversityOfOurLand()
+ (ctor) DiversityOfOurLand( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DivineCountenance.html b/Docs/types/DivineCountenance.html new file mode 100644 index 0000000..12a49fa --- /dev/null +++ b/Docs/types/DivineCountenance.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DivineCountenance + + +

Back to Server.Items

+

DivineCountenance : HornedTribalMask, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) DivineCountenance()
+ (ctor) DivineCountenance( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DivineFurySpell.html b/Docs/types/DivineFurySpell.html new file mode 100644 index 0000000..8fc3058 --- /dev/null +++ b/Docs/types/DivineFurySpell.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DivineFurySpell + + +

Back to Server.Spells.Chivalry

+

DivineFurySpell : PaladinSpell, ISpell

+ (static) void Expire_Callback( object state )
+ (static) bool UnderEffect( Mobile m )
+ (ctor) DivineFurySpell( Mobile caster, Item scroll )
+ bool BlocksMovement( get; )
+ TimeSpan CastDelayBase( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/DjinnisRing.html b/Docs/types/DjinnisRing.html new file mode 100644 index 0000000..28b5738 --- /dev/null +++ b/Docs/types/DjinnisRing.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DjinnisRing + + +

Back to Server.Items

+

DjinnisRing : SilverRing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) DjinnisRing()
+ (ctor) DjinnisRing( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DoEffect_Callback.html b/Docs/types/DoEffect_Callback.html new file mode 100644 index 0000000..d8e6039 --- /dev/null +++ b/Docs/types/DoEffect_Callback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DoEffect_Callback + + +

Back to Server.Misc

+

DoEffect_Callback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) DoEffect_Callback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Point3D p, Map map, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Point3D p, Map map )
+ + diff --git a/Docs/types/DocCommandEntry.html b/Docs/types/DocCommandEntry.html new file mode 100644 index 0000000..09ea344 --- /dev/null +++ b/Docs/types/DocCommandEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DocCommandEntry + + +

Back to Server.Commands

+

(Docs) - DocCommandEntry

+ (ctor) DocCommandEntry( AccessLevel accessLevel, string name, string[] aliases, string usage, string description )
+ AccessLevel AccessLevel( get; )
+ string[] Aliases( get; )
+ string Description( get; )
+ string Name( get; )
+ string Usage( get; )
+ + diff --git a/Docs/types/Docs.html b/Docs/types/Docs.html new file mode 100644 index 0000000..48c8d6f --- /dev/null +++ b/Docs/types/Docs.html @@ -0,0 +1,58 @@ + + + RunUO Documentation - Class Overview - Docs + + +

Back to Server.Commands

+

Docs

+

Nested Types: CommandEntrySorter, DocCommandEntry, MemberComparer, SpeechEntry, SpeechEntrySorter, TypeComparer, TypeInfo

+ (static) void AddIndexLink( StreamWriter html, string filePath, string label, string desc )
+ (static) string AliasForName( string name )
+ (static) void Clean( List<CommandEntry> list )
+ (static) void DeleteDirectory( string path )
+ (static) void DocGen_OnCommand( CommandEventArgs e )
+ (static) bool Document()
+ (static) void DocumentBodies()
+ (static) void DocumentBulkOrders()
+ (static) void DocumentCommand( StreamWriter html, DocCommandEntry e )
+ (static) void DocumentCommands()
+ (static) void DocumentConstructableObject( StreamWriter html, Type t, ConstructorInfo[] ctors )
+ (static) void DocumentConstructableObjects()
+ (static) void DocumentKeywords()
+ (static) void DocumentLoadedTypes()
+ (static) void DocumentSmithBOD( StreamWriter html, List<Item> items, string amt, BulkMaterialType material )
+ (static) void DocumentTailorBOD( StreamWriter html, List<Item> items, string amt, BulkMaterialType material, Type type )
+ (static) bool DontLink( Type type )
+ (static) void EnsureDirectory( string path )
+ (static) void FormatGeneric( Type type, ref string typeName, ref string fileName, ref string linkName )
+ (static) void GenerateIndex()
+ (static) void GenerateStyles()
+ (static) string GetFileName( string root, string name, string ext )
+ (static) string GetPair( Type varType, string name, bool ignoreRef )
+ (static) string GetTooltipFor( ParameterInfo param )
+ (static) StreamWriter GetWriter( string path )
+ (static) StreamWriter GetWriter( string root, string name )
+ (static) bool InAssemblies( Type t, Assembly[] asms )
+ (static) void Initialize()
+ (static) bool IsConstructable( ConstructorInfo ctor )
+ (static) bool IsConstructable( Type t, out bool isItem )
+ (static) List<BodyEntry> LoadBodies()
+ (static) List<Dictionary`2> LoadSpeechFile()
+ (static) void LoadTypes( Assembly a, Assembly[] asms )
+ (static) string SanitizeType( string name )
+ (static) void SaveNamespace( string name, List<TypeInfo> types, StreamWriter indexHtml )
+ (static) void SaveType( TypeInfo info, StreamWriter nsHtml, string nsFileName, string nsName )
+ (static) void WriteCtor( string name, ConstructorInfo ctor, StreamWriter html )
+ (static) void WriteEnum( TypeInfo info, StreamWriter typeHtml )
+ (static) void WriteMethod( MethodInfo mi, StreamWriter html )
+ (static) void WriteProperty( PropertyInfo pi, StreamWriter html )
+ (static) void WriteSmithBODFooter( StreamWriter html )
+ (static) void WriteSmithBODHeader( StreamWriter html, string title )
+ (static) void WriteSmithLBOD( StreamWriter html, string name, SmallBulkEntry[] entries )
+ (static) void WriteTailorBODFooter( StreamWriter html )
+ (static) void WriteTailorBODHeader( StreamWriter html, string title )
+ (static) void WriteTailorLBOD( StreamWriter html, string name, SmallBulkEntry[] entries, bool expandCloth, bool expandPlain )
+ (static) void WriteType( TypeInfo info, StreamWriter typeHtml )
+ (ctor) Docs()
+ + diff --git a/Docs/types/Dog.html b/Docs/types/Dog.html new file mode 100644 index 0000000..b349ffc --- /dev/null +++ b/Docs/types/Dog.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Dog + + +

Back to Server.Mobiles

+

Dog : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Dog()
+ (ctor) Dog( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Dolphin.html b/Docs/types/Dolphin.html new file mode 100644 index 0000000..b99cc1e --- /dev/null +++ b/Docs/types/Dolphin.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Dolphin + + +

Back to Server.Mobiles

+

Dolphin : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Dolphin()
+ (ctor) Dolphin( Serial serial )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Jump()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DolphinLeftArtifact.html b/Docs/types/DolphinLeftArtifact.html new file mode 100644 index 0000000..dd5f452 --- /dev/null +++ b/Docs/types/DolphinLeftArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DolphinLeftArtifact + + +

Back to Server.Items

+

DolphinLeftArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DolphinLeftArtifact()
+ (ctor) DolphinLeftArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DolphinRightArtifact.html b/Docs/types/DolphinRightArtifact.html new file mode 100644 index 0000000..9b8f777 --- /dev/null +++ b/Docs/types/DolphinRightArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DolphinRightArtifact + + +

Back to Server.Items

+

DolphinRightArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DolphinRightArtifact()
+ (ctor) DolphinRightArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DontOfferConversation.html b/Docs/types/DontOfferConversation.html new file mode 100644 index 0000000..c4f2827 --- /dev/null +++ b/Docs/types/DontOfferConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DontOfferConversation + + +

Back to Server.Engines.Quests.Naturalist

+

DontOfferConversation : QuestConversation

+ (ctor) DontOfferConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DoorFacing.html b/Docs/types/DoorFacing.html new file mode 100644 index 0000000..2f30789 --- /dev/null +++ b/Docs/types/DoorFacing.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DoorFacing + + +

Back to Server.Items

+

DoorFacing (Enum)

+ WestCW = 0,
+ EastCCW = 1,
+ WestCCW = 2,
+ EastCW = 3,
+ SouthCW = 4,
+ NorthCCW = 5,
+ SouthCCW = 6,
+ NorthCW = 7,
+ SouthSW = 8,
+ SouthSE = 9,
+ WestSS = 10,
+ WestSN = 11
+ + diff --git a/Docs/types/DoorGenerator.html b/Docs/types/DoorGenerator.html new file mode 100644 index 0000000..088e86c --- /dev/null +++ b/Docs/types/DoorGenerator.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - DoorGenerator + + +

Back to Server

+

DoorGenerator

+ (static) BaseDoor AddDoor( int x, int y, int z, DoorFacing facing )
+ (static) void DoorGen_OnCommand( CommandEventArgs e )
+ (static) void Generate()
+ (static) void Generate( Rectangle2D region )
+ (static) void Initialize()
+ (static) bool IsEastFrame( int id )
+ (static) bool IsEastFrame( int x, int y, int z )
+ (static) bool IsFrame( int id, int[] list )
+ (static) bool IsNorthFrame( int id )
+ (static) bool IsSouthFrame( int id )
+ (static) bool IsSouthFrame( int x, int y, int z )
+ (static) bool IsWestFrame( int id )
+ (ctor) DoorGenerator()
+ + diff --git a/Docs/types/DoorInfo.html b/Docs/types/DoorInfo.html new file mode 100644 index 0000000..aac9e88 --- /dev/null +++ b/Docs/types/DoorInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DoorInfo + + +

Back to Server.Gumps

+

DoorInfo

+ (ctor) DoorInfo( Type type, int baseID )
+ + diff --git a/Docs/types/Doppleganger.html b/Docs/types/Doppleganger.html new file mode 100644 index 0000000..a6501c0 --- /dev/null +++ b/Docs/types/Doppleganger.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Doppleganger + + +

Back to Server.Mobiles

+

Doppleganger : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Doppleganger()
+ (ctor) Doppleganger( Serial serial )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DoubleAxe.html b/Docs/types/DoubleAxe.html new file mode 100644 index 0000000..a501d0b --- /dev/null +++ b/Docs/types/DoubleAxe.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - DoubleAxe + + +

Back to Server.Items

+

DoubleAxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: AxeOfTheHeavens

+ (ctor) DoubleAxe()
+ (ctor) DoubleAxe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DoubleBladedStaff.html b/Docs/types/DoubleBladedStaff.html new file mode 100644 index 0000000..2f69060 --- /dev/null +++ b/Docs/types/DoubleBladedStaff.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - DoubleBladedStaff + + +

Back to Server.Items

+

DoubleBladedStaff : BaseSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) DoubleBladedStaff()
+ (ctor) DoubleBladedStaff( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DoubleShot.html b/Docs/types/DoubleShot.html new file mode 100644 index 0000000..191f454 --- /dev/null +++ b/Docs/types/DoubleShot.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DoubleShot + + +

Back to Server.Items

+

DoubleShot : WeaponAbility

+ (ctor) DoubleShot()
+ int BaseMana( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual void OnMiss( Mobile attacker, Mobile defender )
+ void Use( Mobile attacker, Mobile defender )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/DoubleStrike.html b/Docs/types/DoubleStrike.html new file mode 100644 index 0000000..9678b95 --- /dev/null +++ b/Docs/types/DoubleStrike.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DoubleStrike + + +

Back to Server.Items

+

DoubleStrike : WeaponAbility

+ (ctor) DoubleStrike()
+ int BaseMana( get; )
+ double DamageScalar( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/Doublet.html b/Docs/types/Doublet.html new file mode 100644 index 0000000..e6056eb --- /dev/null +++ b/Docs/types/Doublet.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Doublet + + +

Back to Server.Items

+

Doublet : BaseMiddleTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Doublet()
+ (ctor) Doublet( int hue )
+ (ctor) Doublet( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Dough.html b/Docs/types/Dough.html new file mode 100644 index 0000000..859e4db --- /dev/null +++ b/Docs/types/Dough.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Dough + + +

Back to Server.Items

+

Dough : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) Dough()
+ (ctor) Dough( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DovetailSaw.html b/Docs/types/DovetailSaw.html new file mode 100644 index 0000000..94fcb1b --- /dev/null +++ b/Docs/types/DovetailSaw.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DovetailSaw + + +

Back to Server.Items

+

DovetailSaw : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) DovetailSaw()
+ (ctor) DovetailSaw( int uses )
+ (ctor) DovetailSaw( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DragEffect.html b/Docs/types/DragEffect.html new file mode 100644 index 0000000..a7189a7 --- /dev/null +++ b/Docs/types/DragEffect.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DragEffect + + +

Back to Server.Network

+

DragEffect : Packet

+ (ctor) DragEffect( IEntity src, IEntity trg, int itemID, int hue, int amount )
+ + diff --git a/Docs/types/Dragon.html b/Docs/types/Dragon.html new file mode 100644 index 0000000..48f369d --- /dev/null +++ b/Docs/types/Dragon.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - Dragon + + +

Back to Server.Mobiles

+

Dragon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Dragon()
+ (ctor) Dragon( Serial serial )
+ bool AutoDispel( get; )
+ bool CanAngerOnTame( get; )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ bool ReacquireOnMovement( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DragonArms.html b/Docs/types/DragonArms.html new file mode 100644 index 0000000..1a6e70a --- /dev/null +++ b/Docs/types/DragonArms.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - DragonArms + + +

Back to Server.Items

+

DragonArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DragonArms()
+ (ctor) DragonArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DragonBardingDeed.html b/Docs/types/DragonBardingDeed.html new file mode 100644 index 0000000..0bca062 --- /dev/null +++ b/Docs/types/DragonBardingDeed.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - DragonBardingDeed + + +

Back to Server.Items

+

DragonBardingDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) DragonBardingDeed()
+ (ctor) DragonBardingDeed( Serial serial )
+ Mobile Crafter( get; set; )
+ bool Exceptional( get; set; )
+ int LabelNumber( get; )
+ CraftResource Resource( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnTarget( Mobile from, object obj )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DragonChest.html b/Docs/types/DragonChest.html new file mode 100644 index 0000000..3322745 --- /dev/null +++ b/Docs/types/DragonChest.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - DragonChest + + +

Back to Server.Items

+

DragonChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DragonChest()
+ (ctor) DragonChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DragonGloves.html b/Docs/types/DragonGloves.html new file mode 100644 index 0000000..fbcaf29 --- /dev/null +++ b/Docs/types/DragonGloves.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - DragonGloves + + +

Back to Server.Items

+

DragonGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DragonGloves()
+ (ctor) DragonGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DragonHelm.html b/Docs/types/DragonHelm.html new file mode 100644 index 0000000..841321a --- /dev/null +++ b/Docs/types/DragonHelm.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - DragonHelm + + +

Back to Server.Items

+

DragonHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: AegisOfGrace

+ (ctor) DragonHelm()
+ (ctor) DragonHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DragonLegs.html b/Docs/types/DragonLegs.html new file mode 100644 index 0000000..e0ee207 --- /dev/null +++ b/Docs/types/DragonLegs.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - DragonLegs + + +

Back to Server.Items

+

DragonLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) DragonLegs()
+ (ctor) DragonLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DragonNunchaku.html b/Docs/types/DragonNunchaku.html new file mode 100644 index 0000000..c83fe86 --- /dev/null +++ b/Docs/types/DragonNunchaku.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DragonNunchaku + + +

Back to Server.Items

+

DragonNunchaku : Nunchaku, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) DragonNunchaku()
+ (ctor) DragonNunchaku( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DrainTimer.html b/Docs/types/DrainTimer.html new file mode 100644 index 0000000..98a49e3 --- /dev/null +++ b/Docs/types/DrainTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DrainTimer + + +

Back to Server.Mobiles

+

(HarrowerTentacles) - DrainTimer : Timer

+ (ctor) DrainTimer( HarrowerTentacles owner )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Drake.html b/Docs/types/Drake.html new file mode 100644 index 0000000..4a3184d --- /dev/null +++ b/Docs/types/Drake.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Drake + + +

Back to Server.Mobiles

+

Drake : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Drake()
+ (ctor) Drake( Serial serial )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ bool ReacquireOnMovement( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DrakovsJournal.html b/Docs/types/DrakovsJournal.html new file mode 100644 index 0000000..86efd49 --- /dev/null +++ b/Docs/types/DrakovsJournal.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DrakovsJournal + + +

Back to Server.Items

+

DrakovsJournal : BlueBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) DrakovsJournal()
+ (ctor) DrakovsJournal( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DrawKnife.html b/Docs/types/DrawKnife.html new file mode 100644 index 0000000..becc8ef --- /dev/null +++ b/Docs/types/DrawKnife.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DrawKnife + + +

Back to Server.Items

+

DrawKnife : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) DrawKnife()
+ (ctor) DrawKnife( int uses )
+ (ctor) DrawKnife( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Drawer.html b/Docs/types/Drawer.html new file mode 100644 index 0000000..e9b7136 --- /dev/null +++ b/Docs/types/Drawer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Drawer + + +

Back to Server.Items

+

Drawer : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Drawer()
+ (ctor) Drawer( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DreadHornMane.html b/Docs/types/DreadHornMane.html new file mode 100644 index 0000000..13fc874 --- /dev/null +++ b/Docs/types/DreadHornMane.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DreadHornMane + + +

Back to Server.Items

+

DreadHornMane : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DreadHornMane()
+ (ctor) DreadHornMane( int amount )
+ (ctor) DreadHornMane( Serial serial )
+ (ctor) DreadHornMane( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DreadPirateHat.html b/Docs/types/DreadPirateHat.html new file mode 100644 index 0000000..24a39dc --- /dev/null +++ b/Docs/types/DreadPirateHat.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DreadPirateHat + + +

Back to Server.Items

+

DreadPirateHat : TricorneHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) DreadPirateHat()
+ (ctor) DreadPirateHat( Serial serial )
+ int BaseColdResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DreadSpider.html b/Docs/types/DreadSpider.html new file mode 100644 index 0000000..2df4211 --- /dev/null +++ b/Docs/types/DreadSpider.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DreadSpider + + +

Back to Server.Mobiles

+

DreadSpider : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DreadSpider()
+ (ctor) DreadSpider( Serial serial )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Dressform.html b/Docs/types/Dressform.html new file mode 100644 index 0000000..29bf59f --- /dev/null +++ b/Docs/types/Dressform.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Dressform + + +

Back to Server.Items

+

Dressform : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Dressform()
+ (ctor) Dressform( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DriedHerbs.html b/Docs/types/DriedHerbs.html new file mode 100644 index 0000000..a20ec59 --- /dev/null +++ b/Docs/types/DriedHerbs.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DriedHerbs + + +

Back to Server.Items

+

DriedHerbs : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DriedHerbs()
+ (ctor) DriedHerbs( int amount )
+ (ctor) DriedHerbs( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DriedOnions.html b/Docs/types/DriedOnions.html new file mode 100644 index 0000000..9723a5a --- /dev/null +++ b/Docs/types/DriedOnions.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DriedOnions + + +

Back to Server.Items

+

DriedOnions : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DriedOnions()
+ (ctor) DriedOnions( int amount )
+ (ctor) DriedOnions( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Drums.html b/Docs/types/Drums.html new file mode 100644 index 0000000..10c52ec --- /dev/null +++ b/Docs/types/Drums.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Drums + + +

Back to Server.Items

+

Drums : BaseInstrument, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) Drums()
+ (ctor) Drums( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DryDockResult.html b/Docs/types/DryDockResult.html new file mode 100644 index 0000000..11d209d --- /dev/null +++ b/Docs/types/DryDockResult.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - DryDockResult + + +

Back to Server.Multis

+

DryDockResult (Enum)

+ Valid = 0,
+ Dead = 1,
+ NoKey = 2,
+ NotAnchored = 3,
+ Mobiles = 4,
+ Items = 5,
+ Hold = 6,
+ Decaying = 7
+ + diff --git a/Docs/types/Dryad.html b/Docs/types/Dryad.html new file mode 100644 index 0000000..c23f4a2 --- /dev/null +++ b/Docs/types/Dryad.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Dryad + + +

Back to Server.Engines.Quests.Haven

+

Dryad : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Dryad()
+ (ctor) Dryad( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ bool DisallowAllMoves( get; )
+ bool IsActiveVendor( get; )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile pm )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DryadAllureScroll.html b/Docs/types/DryadAllureScroll.html new file mode 100644 index 0000000..f421827 --- /dev/null +++ b/Docs/types/DryadAllureScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DryadAllureScroll + + +

Back to Server.Items

+

DryadAllureScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) DryadAllureScroll()
+ (ctor) DryadAllureScroll( int amount )
+ (ctor) DryadAllureScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DryadAppleConversation.html b/Docs/types/DryadAppleConversation.html new file mode 100644 index 0000000..a17dc0b --- /dev/null +++ b/Docs/types/DryadAppleConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DryadAppleConversation + + +

Back to Server.Engines.Quests.Haven

+

DryadAppleConversation : QuestConversation

+ (ctor) DryadAppleConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DryadConversation.html b/Docs/types/DryadConversation.html new file mode 100644 index 0000000..273d6e4 --- /dev/null +++ b/Docs/types/DryadConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DryadConversation + + +

Back to Server.Engines.Quests.Haven

+

DryadConversation : QuestConversation

+ (ctor) DryadConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/DualSaveStrategy.html b/Docs/types/DualSaveStrategy.html new file mode 100644 index 0000000..f6e31a4 --- /dev/null +++ b/Docs/types/DualSaveStrategy.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DualSaveStrategy + + +

Back to Server

+

DualSaveStrategy : StandardSaveStrategy

+

Nested Types: (Anonymous-Type)--c__DisplayClass1

+ (ctor) DualSaveStrategy()
+ string Name( get; )
+ virtual void Save( SaveMetrics metrics, bool permitBackgroundWrite )
+ + diff --git a/Docs/types/DualWield.html b/Docs/types/DualWield.html new file mode 100644 index 0000000..a5710d4 --- /dev/null +++ b/Docs/types/DualWield.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DualWield + + +

Back to Server.Items

+

DualWield : WeaponAbility

+

Nested Types: DualWieldTimer

+ (static) Hashtable Registry( get; )
+ (ctor) DualWield()
+ int BaseMana( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/DualWieldTimer.html b/Docs/types/DualWieldTimer.html new file mode 100644 index 0000000..f8ca046 --- /dev/null +++ b/Docs/types/DualWieldTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DualWieldTimer + + +

Back to Server.Items

+

(DualWield) - DualWieldTimer : Timer

+ (ctor) DualWieldTimer( Mobile owner, int bonusSwingSpeed )
+ int BonusSwingSpeed( get; )
+ virtual void OnTick()
+ + diff --git a/Docs/types/DullCopperElemental.html b/Docs/types/DullCopperElemental.html new file mode 100644 index 0000000..a62acb6 --- /dev/null +++ b/Docs/types/DullCopperElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - DullCopperElemental + + +

Back to Server.Mobiles

+

DullCopperElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DullCopperElemental()
+ (ctor) DullCopperElemental( Serial serial )
+ (ctor) DullCopperElemental( int oreAmount )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DullCopperGranite.html b/Docs/types/DullCopperGranite.html new file mode 100644 index 0000000..be7ae1f --- /dev/null +++ b/Docs/types/DullCopperGranite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DullCopperGranite + + +

Back to Server.Items

+

DullCopperGranite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DullCopperGranite()
+ (ctor) DullCopperGranite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DullCopperIngot.html b/Docs/types/DullCopperIngot.html new file mode 100644 index 0000000..034d436 --- /dev/null +++ b/Docs/types/DullCopperIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - DullCopperIngot + + +

Back to Server.Items

+

DullCopperIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) DullCopperIngot()
+ (ctor) DullCopperIngot( int amount )
+ (ctor) DullCopperIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DullCopperOre.html b/Docs/types/DullCopperOre.html new file mode 100644 index 0000000..5f4bbbc --- /dev/null +++ b/Docs/types/DullCopperOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - DullCopperOre + + +

Back to Server.Items

+

DullCopperOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) DullCopperOre()
+ (ctor) DullCopperOre( int amount )
+ (ctor) DullCopperOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Dummy.html b/Docs/types/Dummy.html new file mode 100644 index 0000000..0e7a413 --- /dev/null +++ b/Docs/types/Dummy.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Dummy + + +

Back to Server.Mobiles

+

Dummy : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: DummyAssassin, DummyFence, DummyHealer, DummyMace, DummyNox, DummyStun, DummySuper, DummySword, DummyTheif

+

Nested Types: AutokillTimer

+ (ctor) Dummy( Serial serial )
+ (ctor) Dummy( AIType iAI, FightMode iFightMode, int iRangePerception, int iRangeFight, double dActiveSpeed, double dPassiveSpeed )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void OnTeamChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummyAssassin.html b/Docs/types/DummyAssassin.html new file mode 100644 index 0000000..5a350ea --- /dev/null +++ b/Docs/types/DummyAssassin.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummyAssassin + + +

Back to Server.Mobiles

+

DummyAssassin : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummyAssassin()
+ (ctor) DummyAssassin( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummyFence.html b/Docs/types/DummyFence.html new file mode 100644 index 0000000..1db4cfd --- /dev/null +++ b/Docs/types/DummyFence.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummyFence + + +

Back to Server.Mobiles

+

DummyFence : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummyFence()
+ (ctor) DummyFence( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummyHealer.html b/Docs/types/DummyHealer.html new file mode 100644 index 0000000..0079da5 --- /dev/null +++ b/Docs/types/DummyHealer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummyHealer + + +

Back to Server.Mobiles

+

DummyHealer : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummyHealer()
+ (ctor) DummyHealer( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummyMace.html b/Docs/types/DummyMace.html new file mode 100644 index 0000000..2231cbd --- /dev/null +++ b/Docs/types/DummyMace.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummyMace + + +

Back to Server.Mobiles

+

DummyMace : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummyMace()
+ (ctor) DummyMace( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummyNox.html b/Docs/types/DummyNox.html new file mode 100644 index 0000000..9270a9c --- /dev/null +++ b/Docs/types/DummyNox.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummyNox + + +

Back to Server.Mobiles

+

DummyNox : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummyNox()
+ (ctor) DummyNox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummyStun.html b/Docs/types/DummyStun.html new file mode 100644 index 0000000..72277b4 --- /dev/null +++ b/Docs/types/DummyStun.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummyStun + + +

Back to Server.Mobiles

+

DummyStun : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummyStun()
+ (ctor) DummyStun( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummySuper.html b/Docs/types/DummySuper.html new file mode 100644 index 0000000..08191ed --- /dev/null +++ b/Docs/types/DummySuper.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummySuper + + +

Back to Server.Mobiles

+

DummySuper : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummySuper()
+ (ctor) DummySuper( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummySword.html b/Docs/types/DummySword.html new file mode 100644 index 0000000..35d87e7 --- /dev/null +++ b/Docs/types/DummySword.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummySword + + +

Back to Server.Mobiles

+

DummySword : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummySword()
+ (ctor) DummySword( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DummyTheif.html b/Docs/types/DummyTheif.html new file mode 100644 index 0000000..196bdcc --- /dev/null +++ b/Docs/types/DummyTheif.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DummyTheif + + +

Back to Server.Mobiles

+

DummyTheif : Dummy, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) DummyTheif()
+ (ctor) DummyTheif( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DungeonRegion.html b/Docs/types/DungeonRegion.html new file mode 100644 index 0000000..1d7b23e --- /dev/null +++ b/Docs/types/DungeonRegion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - DungeonRegion + + +

Back to Server.Regions

+

DungeonRegion : BaseRegion, IComparable

+ (ctor) DungeonRegion( XmlElement xml, Map map, Region parent )
+ Point3D EntranceLocation( get; set; )
+ Map EntranceMap( get; set; )
+ bool YoungProtected( get; )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ virtual void AlterLightLevel( Mobile m, ref int global, ref int personal )
+ virtual bool CanUseStuckMenu( Mobile m )
+ + diff --git a/Docs/types/Dupe.html b/Docs/types/Dupe.html new file mode 100644 index 0000000..707fcc5 --- /dev/null +++ b/Docs/types/Dupe.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Dupe + + +

Back to Server.Commands

+

Dupe

+

Nested Types: DupeTarget

+ (static) void CopyProperties( Item dest, Item src )
+ (static) void Dupe_OnCommand( CommandEventArgs e )
+ (static) void DupeInBag_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) Dupe()
+ + diff --git a/Docs/types/DupeTarget.html b/Docs/types/DupeTarget.html new file mode 100644 index 0000000..743015e --- /dev/null +++ b/Docs/types/DupeTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - DupeTarget + + +

Back to Server.Commands

+

(Dupe) - DupeTarget : Target

+ (ctor) DupeTarget( bool inbag, int amount )
+ virtual void OnTarget( Mobile from, object targ )
+ + diff --git a/Docs/types/DupreSuit.html b/Docs/types/DupreSuit.html new file mode 100644 index 0000000..f3fbff4 --- /dev/null +++ b/Docs/types/DupreSuit.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - DupreSuit + + +

Back to Server.Items

+

DupreSuit : BaseSuit, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) DupreSuit()
+ (ctor) DupreSuit( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DupresShield.html b/Docs/types/DupresShield.html new file mode 100644 index 0000000..eb9a146 --- /dev/null +++ b/Docs/types/DupresShield.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - DupresShield + + +

Back to Server.Items

+

DupresShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, ITokunoDyable

+ (ctor) DupresShield()
+ (ctor) DupresShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DuringFungiGatheringConversation.html b/Docs/types/DuringFungiGatheringConversation.html new file mode 100644 index 0000000..ee9e55c --- /dev/null +++ b/Docs/types/DuringFungiGatheringConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DuringFungiGatheringConversation + + +

Back to Server.Engines.Quests.Ambitious

+

DuringFungiGatheringConversation : QuestConversation

+ (ctor) DuringFungiGatheringConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DuringFungiProcessConversation.html b/Docs/types/DuringFungiProcessConversation.html new file mode 100644 index 0000000..b7877a1 --- /dev/null +++ b/Docs/types/DuringFungiProcessConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DuringFungiProcessConversation + + +

Back to Server.Engines.Quests.Matriarch

+

DuringFungiProcessConversation : QuestConversation

+ (ctor) DuringFungiProcessConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DuringKillInfiltratorsConversation.html b/Docs/types/DuringKillInfiltratorsConversation.html new file mode 100644 index 0000000..b02d101 --- /dev/null +++ b/Docs/types/DuringKillInfiltratorsConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DuringKillInfiltratorsConversation + + +

Back to Server.Engines.Quests.Matriarch

+

DuringKillInfiltratorsConversation : QuestConversation

+ (ctor) DuringKillInfiltratorsConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DuringKillQueensConversation.html b/Docs/types/DuringKillQueensConversation.html new file mode 100644 index 0000000..a8c5c9f --- /dev/null +++ b/Docs/types/DuringKillQueensConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DuringKillQueensConversation + + +

Back to Server.Engines.Quests.Ambitious

+

DuringKillQueensConversation : QuestConversation

+ (ctor) DuringKillQueensConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DuringWaterGatheringConversation.html b/Docs/types/DuringWaterGatheringConversation.html new file mode 100644 index 0000000..5f2459f --- /dev/null +++ b/Docs/types/DuringWaterGatheringConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DuringWaterGatheringConversation + + +

Back to Server.Engines.Quests.Matriarch

+

DuringWaterGatheringConversation : QuestConversation

+ (ctor) DuringWaterGatheringConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/DyeTub.html b/Docs/types/DyeTub.html new file mode 100644 index 0000000..7700b3b --- /dev/null +++ b/Docs/types/DyeTub.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - DyeTub + + +

Back to Server.Items

+

DyeTub : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Derived Types: BlackDyeTub, BlazeDyeTub, FurnitureDyeTub, LeatherDyeTub, RewardBlackDyeTub, RunebookDyeTub, SpecialDyeTub, StatuetteDyeTub

+

Nested Types: InternalTarget

+ (ctor) DyeTub()
+ (ctor) DyeTub( Serial serial )
+ bool AllowDyables( get; )
+ bool AllowFurniture( get; )
+ bool AllowLeather( get; )
+ bool AllowRunebooks( get; )
+ bool AllowStatuettes( get; )
+ CustomHuePicker CustomHuePicker( get; )
+ int DyedHue( get; set; )
+ int FailMessage( get; )
+ SecureLevel Level( get; set; )
+ bool Redyable( get; set; )
+ int TargetMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Dyes.html b/Docs/types/Dyes.html new file mode 100644 index 0000000..e38fb3d --- /dev/null +++ b/Docs/types/Dyes.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Dyes + + +

Back to Server.Items

+

Dyes : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) Dyes()
+ (ctor) Dyes( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/DynamicFlipingAttribute.html b/Docs/types/DynamicFlipingAttribute.html new file mode 100644 index 0000000..244117d --- /dev/null +++ b/Docs/types/DynamicFlipingAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - DynamicFlipingAttribute + + +

Back to Server.Items

+

DynamicFlipingAttribute : Attribute, _Attribute

+ (ctor) DynamicFlipingAttribute()
+ + diff --git a/Docs/types/DynamicFurniture.html b/Docs/types/DynamicFurniture.html new file mode 100644 index 0000000..06b8fd1 --- /dev/null +++ b/Docs/types/DynamicFurniture.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - DynamicFurniture + + +

Back to Server.Items

+

DynamicFurniture

+ (static) void Close( Container c )
+ (static) bool Open( Container c, Mobile m )
+ (ctor) DynamicFurniture()
+ + diff --git a/Docs/types/DynamicTeleporter.html b/Docs/types/DynamicTeleporter.html new file mode 100644 index 0000000..22e155b --- /dev/null +++ b/Docs/types/DynamicTeleporter.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - DynamicTeleporter + + +

Back to Server.Engines.Quests

+

DynamicTeleporter : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BlueNinjaQuestTeleporter, DarkTidesTeleporter, GreenNinjaQuestTeleporter, UzeraanTurmoilTeleporter, WhiteNinjaQuestTeleporter

+ (ctor) DynamicTeleporter()
+ (ctor) DynamicTeleporter( Serial serial )
+ (ctor) DynamicTeleporter( int itemID, int hue )
+ int LabelNumber( get; )
+ int NotWorkingMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool GetDestination( PlayerMobile player, ref Point3D loc, ref Map map )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ECEffectType.html b/Docs/types/ECEffectType.html new file mode 100644 index 0000000..e5c11f7 --- /dev/null +++ b/Docs/types/ECEffectType.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ECEffectType + + +

Back to Server.Items

+

ECEffectType (Enum)

+ None = 0,
+ Moving = 1,
+ Location = 2,
+ Target = 3,
+ Lightning = 4
+ + diff --git a/Docs/types/Eagle.html b/Docs/types/Eagle.html new file mode 100644 index 0000000..b30c621 --- /dev/null +++ b/Docs/types/Eagle.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Eagle + + +

Back to Server.Mobiles

+

Eagle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Eagle()
+ (ctor) Eagle( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Feathers( get; )
+ int Meat( get; )
+ MeatType MeatType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EarOfCorn.html b/Docs/types/EarOfCorn.html new file mode 100644 index 0000000..c4a5b1e --- /dev/null +++ b/Docs/types/EarOfCorn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EarOfCorn + + +

Back to Server.Items

+

EarOfCorn : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EarOfCorn()
+ (ctor) EarOfCorn( int amount )
+ (ctor) EarOfCorn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EarnGiftsConversation.html b/Docs/types/EarnGiftsConversation.html new file mode 100644 index 0000000..26ce6fa --- /dev/null +++ b/Docs/types/EarnGiftsConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - EarnGiftsConversation + + +

Back to Server.Engines.Quests.Ninja

+

EarnGiftsConversation : QuestConversation

+ (ctor) EarnGiftsConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/EarnLessGiftsConversation.html b/Docs/types/EarnLessGiftsConversation.html new file mode 100644 index 0000000..5ee4350 --- /dev/null +++ b/Docs/types/EarnLessGiftsConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - EarnLessGiftsConversation + + +

Back to Server.Engines.Quests.Ninja

+

EarnLessGiftsConversation : QuestConversation

+ (ctor) EarnLessGiftsConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/EarringBoxSet.html b/Docs/types/EarringBoxSet.html new file mode 100644 index 0000000..0408ec6 --- /dev/null +++ b/Docs/types/EarringBoxSet.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EarringBoxSet + + +

Back to Server.Items

+

EarringBoxSet : RedVelvetGiftBox, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EarringBoxSet()
+ (ctor) EarringBoxSet( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EarringsOfProtection.html b/Docs/types/EarringsOfProtection.html new file mode 100644 index 0000000..1dd9414 --- /dev/null +++ b/Docs/types/EarringsOfProtection.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - EarringsOfProtection + + +

Back to Server.Items

+

EarringsOfProtection : BaseJewel, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (static) int GetItemData( AosElementAttribute element, bool label )
+ (static) AosElementAttribute GetTypes( int value )
+ (static) AosElementAttribute RandomType()
+ (ctor) EarringsOfProtection()
+ (ctor) EarringsOfProtection( Serial serial )
+ (ctor) EarringsOfProtection( AosElementAttribute element )
+ AosElementAttribute Attribute( get; )
+ int Hue( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EarthElemental.html b/Docs/types/EarthElemental.html new file mode 100644 index 0000000..a9e0db9 --- /dev/null +++ b/Docs/types/EarthElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - EarthElemental + + +

Back to Server.Mobiles

+

EarthElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EarthElemental()
+ (ctor) EarthElemental( Serial serial )
+ bool BleedImmune( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EarthElementalSpell.html b/Docs/types/EarthElementalSpell.html new file mode 100644 index 0000000..10f1eda --- /dev/null +++ b/Docs/types/EarthElementalSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EarthElementalSpell + + +

Back to Server.Spells.Eighth

+

EarthElementalSpell : MagerySpell, ISpell

+ (ctor) EarthElementalSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/EarthquakeScroll.html b/Docs/types/EarthquakeScroll.html new file mode 100644 index 0000000..fc4af18 --- /dev/null +++ b/Docs/types/EarthquakeScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EarthquakeScroll + + +

Back to Server.Items

+

EarthquakeScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) EarthquakeScroll()
+ (ctor) EarthquakeScroll( int amount )
+ (ctor) EarthquakeScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EarthquakeSpell.html b/Docs/types/EarthquakeSpell.html new file mode 100644 index 0000000..9b67d94 --- /dev/null +++ b/Docs/types/EarthquakeSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EarthquakeSpell + + +

Back to Server.Spells.Eighth

+

EarthquakeSpell : MagerySpell, ISpell

+ (ctor) EarthquakeSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/Easle.html b/Docs/types/Easle.html new file mode 100644 index 0000000..7f04a41 --- /dev/null +++ b/Docs/types/Easle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Easle + + +

Back to Server.Items

+

Easle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Easle()
+ (ctor) Easle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EasterEggs.html b/Docs/types/EasterEggs.html new file mode 100644 index 0000000..dcccbf9 --- /dev/null +++ b/Docs/types/EasterEggs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EasterEggs + + +

Back to Server.Items

+

EasterEggs : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EasterEggs()
+ (ctor) EasterEggs( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EatEntry.html b/Docs/types/EatEntry.html new file mode 100644 index 0000000..ebe38a4 --- /dev/null +++ b/Docs/types/EatEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EatEntry + + +

Back to Server.ContextMenus

+

EatEntry : ContextMenuEntry

+ (ctor) EatEntry( Mobile from, Food food )
+ virtual void OnClick()
+ + diff --git a/Docs/types/EcruCitrine.html b/Docs/types/EcruCitrine.html new file mode 100644 index 0000000..fcc81d6 --- /dev/null +++ b/Docs/types/EcruCitrine.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EcruCitrine + + +

Back to Server.Items

+

EcruCitrine : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EcruCitrine()
+ (ctor) EcruCitrine( int amount )
+ (ctor) EcruCitrine( Serial serial )
+ (ctor) EcruCitrine( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EditEntry.html b/Docs/types/EditEntry.html new file mode 100644 index 0000000..8176f90 --- /dev/null +++ b/Docs/types/EditEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EditEntry + + +

Back to Server.Items

+

(HouseRaffleStone) - EditEntry : RaffleContextMenuEntry

+ (ctor) EditEntry( Mobile from, HouseRaffleStone stone )
+ virtual void OnClick()
+ + diff --git a/Docs/types/EditSkillGump.html b/Docs/types/EditSkillGump.html new file mode 100644 index 0000000..f54b411 --- /dev/null +++ b/Docs/types/EditSkillGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EditSkillGump + + +

Back to Server.Gumps

+

EditSkillGump : Gump

+ (ctor) EditSkillGump( Mobile from, Mobile target, Skill skill, SkillsGumpGroup selected )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/EffectController.html b/Docs/types/EffectController.html new file mode 100644 index 0000000..85a08fa --- /dev/null +++ b/Docs/types/EffectController.html @@ -0,0 +1,48 @@ + + + RunUO Documentation - Class Overview - EffectController + + +

Back to Server.Items

+

EffectController : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EffectController()
+ (ctor) EffectController( Serial serial )
+ string DefaultName( get; )
+ int Duration( get; set; )
+ TimeSpan EffectDelay( get; set; )
+ int EffectHue( get; set; )
+ int EffectItemID( get; set; )
+ EffectLayer EffectLayer( get; set; )
+ ECEffectType EffectType( get; set; )
+ int ExplodeParticleEffect( get; set; )
+ bool Explodes( get; set; )
+ int ExplodeSound( get; set; )
+ bool FixedDirection( get; set; )
+ bool HandlesOnMovement( get; )
+ int ParticleEffect( get; set; )
+ bool PlaySoundAtTrigger( get; set; )
+ int RenderMode( get; set; )
+ EffectController Sequence( get; set; )
+ TimeSpan SoundDelay( get; set; )
+ int SoundID( get; set; )
+ Item SourceItem( get; set; )
+ Mobile SourceMobile( get; set; )
+ bool SourceNull( get; set; )
+ int Speed( get; set; )
+ Item TargetItem( get; set; )
+ Mobile TargetMobile( get; set; )
+ bool TargetNull( get; set; )
+ TimeSpan TriggerDelay( get; set; )
+ int TriggerRange( get; set; )
+ EffectTriggerType TriggerType( get; set; )
+ int Unknown( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void DoEffect( object trigger )
+ void InternalDoEffect( object trigger )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ void PlaySound( object trigger )
+ IEntity ReadEntity( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EffectItem.html b/Docs/types/EffectItem.html new file mode 100644 index 0000000..065a07b --- /dev/null +++ b/Docs/types/EffectItem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - EffectItem + + +

Back to Server.Items

+

EffectItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: FreeTimer

+ (static) EffectItem Create( Point3D p, Map map, TimeSpan duration )
+ (ctor) EffectItem()
+ (ctor) EffectItem( Serial serial )
+ bool Decays( get; )
+ void BeginFree( TimeSpan duration )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EffectLayer.html b/Docs/types/EffectLayer.html new file mode 100644 index 0000000..c58dede --- /dev/null +++ b/Docs/types/EffectLayer.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EffectLayer + + +

Back to Server

+

EffectLayer (Enum)

+ Head = 0,
+ RightHand = 1,
+ LeftHand = 2,
+ Waist = 3,
+ LeftFoot = 4,
+ RightFoot = 5,
+ CenterFeet = 7
+ + diff --git a/Docs/types/EffectTimer.html b/Docs/types/EffectTimer.html new file mode 100644 index 0000000..a7456be --- /dev/null +++ b/Docs/types/EffectTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EffectTimer + + +

Back to Server.Items

+

(HouseTeleporter) - EffectTimer : Timer

+ (ctor) EffectTimer( Point3D p, Map map, int effectID, int soundID, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/EffectTriggerType.html b/Docs/types/EffectTriggerType.html new file mode 100644 index 0000000..996cfb8 --- /dev/null +++ b/Docs/types/EffectTriggerType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EffectTriggerType + + +

Back to Server.Items

+

EffectTriggerType (Enum)

+ None = 0,
+ Sequenced = 1,
+ DoubleClick = 2,
+ InRange = 3
+ + diff --git a/Docs/types/EffectType.html b/Docs/types/EffectType.html new file mode 100644 index 0000000..ac6843d --- /dev/null +++ b/Docs/types/EffectType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EffectType + + +

Back to Server.Network

+

EffectType (Enum)

+ Moving = 0,
+ Lightning = 1,
+ FixedXYZ = 2,
+ FixedFrom = 3
+ + diff --git a/Docs/types/Effects.html b/Docs/types/Effects.html new file mode 100644 index 0000000..fde01e7 --- /dev/null +++ b/Docs/types/Effects.html @@ -0,0 +1,37 @@ + + + RunUO Documentation - Class Overview - Effects + + +

Back to Server

+

Effects

+ (static) ParticleSupportType ParticleSupportType( get; set; )
+ (static) void PlaySound( IPoint3D p, Map map, int soundID )
+ (static) void SendBoltEffect( IEntity e )
+ (static) void SendBoltEffect( IEntity e, bool sound )
+ (static) void SendBoltEffect( IEntity e, bool sound, int hue )
+ (static) void SendLocationEffect( IPoint3D p, Map map, int itemID, int duration )
+ (static) void SendLocationEffect( IPoint3D p, Map map, int itemID, int duration, int speed )
+ (static) void SendLocationEffect( IPoint3D p, Map map, int itemID, int duration, int hue, int renderMode )
+ (static) void SendLocationEffect( IPoint3D p, Map map, int itemID, int duration, int speed, int hue, int renderMode )
+ (static) void SendLocationParticles( IEntity e, int itemID, int speed, int duration, int effect )
+ (static) void SendLocationParticles( IEntity e, int itemID, int speed, int duration, int effect, int unknown )
+ (static) void SendLocationParticles( IEntity e, int itemID, int speed, int duration, int hue, int renderMode, int effect, int unknown )
+ (static) void SendMovingEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes )
+ (static) void SendMovingEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode )
+ (static) void SendMovingParticles( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int effect, int explodeEffect, int explodeSound )
+ (static) void SendMovingParticles( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int effect, int explodeEffect, int explodeSound, int unknown )
+ (static) void SendMovingParticles( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, int unknown )
+ (static) void SendMovingParticles( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, EffectLayer layer, int unknown )
+ (static) void SendPacket( Point3D origin, Map map, Packet p )
+ (static) void SendPacket( IPoint3D origin, Map map, Packet p )
+ (static) bool SendParticlesTo( NetState state )
+ (static) void SendTargetEffect( IEntity target, int itemID, int duration )
+ (static) void SendTargetEffect( IEntity target, int itemID, int speed, int duration )
+ (static) void SendTargetEffect( IEntity target, int itemID, int duration, int hue, int renderMode )
+ (static) void SendTargetEffect( IEntity target, int itemID, int speed, int duration, int hue, int renderMode )
+ (static) void SendTargetParticles( IEntity target, int itemID, int speed, int duration, int effect, EffectLayer layer )
+ (static) void SendTargetParticles( IEntity target, int itemID, int speed, int duration, int effect, EffectLayer layer, int unknown )
+ (static) void SendTargetParticles( IEntity target, int itemID, int speed, int duration, int hue, int renderMode, int effect, EffectLayer layer, int unknown )
+ + diff --git a/Docs/types/Efreet.html b/Docs/types/Efreet.html new file mode 100644 index 0000000..b801f56 --- /dev/null +++ b/Docs/types/Efreet.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Efreet + + +

Back to Server.Mobiles

+

Efreet : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Efreet()
+ (ctor) Efreet( Serial serial )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EggBomb.html b/Docs/types/EggBomb.html new file mode 100644 index 0000000..ec71443 --- /dev/null +++ b/Docs/types/EggBomb.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EggBomb + + +

Back to Server.Items

+

EggBomb : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EggBomb()
+ (ctor) EggBomb( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EggCaseArtifact.html b/Docs/types/EggCaseArtifact.html new file mode 100644 index 0000000..2a64689 --- /dev/null +++ b/Docs/types/EggCaseArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EggCaseArtifact + + +

Back to Server.Items

+

EggCaseArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EggCaseArtifact()
+ (ctor) EggCaseArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Eggs.html b/Docs/types/Eggs.html new file mode 100644 index 0000000..e021a93 --- /dev/null +++ b/Docs/types/Eggs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Eggs + + +

Back to Server.Items

+

Eggs : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Eggs()
+ (ctor) Eggs( Serial serial )
+ (ctor) Eggs( int amount )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Eggshells.html b/Docs/types/Eggshells.html new file mode 100644 index 0000000..5b317d0 --- /dev/null +++ b/Docs/types/Eggshells.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Eggshells + + +

Back to Server.Items

+

Eggshells : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Eggshells()
+ (ctor) Eggshells( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EjectPlayerEntry.html b/Docs/types/EjectPlayerEntry.html new file mode 100644 index 0000000..13eec83 --- /dev/null +++ b/Docs/types/EjectPlayerEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EjectPlayerEntry + + +

Back to Server.ContextMenus

+

EjectPlayerEntry : ContextMenuEntry

+ (ctor) EjectPlayerEntry( Mobile from, Mobile target )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ElderGazer.html b/Docs/types/ElderGazer.html new file mode 100644 index 0000000..51a2b2a --- /dev/null +++ b/Docs/types/ElderGazer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElderGazer + + +

Back to Server.Mobiles

+

ElderGazer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ElderGazer()
+ (ctor) ElderGazer( Serial serial )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Election.html b/Docs/types/Election.html new file mode 100644 index 0000000..c1dd710 --- /dev/null +++ b/Docs/types/Election.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Election + + +

Back to Server.Factions

+

Election

+ (ctor) Election( GenericReader reader )
+ (ctor) Election( Faction faction )
+ List<Candidate> Candidates( get; )
+ ElectionState CurrentState( get; )
+ Faction Faction( get; )
+ DateTime LastStateTime( get; )
+ TimeSpan NextStateTime( get; set; )
+ ElectionState State( get; set; )
+ void AddCandidate( Mobile mob )
+ bool CanBeCandidate( Mobile mob )
+ bool CanVote( Mobile mob )
+ Candidate FindCandidate( Mobile mob )
+ Candidate FindVoter( Mobile mob )
+ bool HasVoted( Mobile mob )
+ bool IsCandidate( Mobile mob )
+ void RemoveCandidate( Mobile mob )
+ void RemoveVoter( Mobile mob )
+ void Serialize( GenericWriter writer )
+ void Slice()
+ void StartTimer()
+ + diff --git a/Docs/types/ElectionGump.html b/Docs/types/ElectionGump.html new file mode 100644 index 0000000..1c3b491 --- /dev/null +++ b/Docs/types/ElectionGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ElectionGump + + +

Back to Server.Factions

+

ElectionGump : FactionGump

+ (ctor) ElectionGump( PlayerMobile from, Election election )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ElectionManagementGump.html b/Docs/types/ElectionManagementGump.html new file mode 100644 index 0000000..5b89069 --- /dev/null +++ b/Docs/types/ElectionManagementGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ElectionManagementGump + + +

Back to Server.Factions

+

ElectionManagementGump : Gump

+ (static) string FormatTimeSpan( TimeSpan ts )
+ (ctor) ElectionManagementGump( Election election )
+ (ctor) ElectionManagementGump( Election election, Candidate candidate, int page )
+ string Center( string text )
+ string Color( string text, int color )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ string Right( string text )
+ + diff --git a/Docs/types/ElectionState.html b/Docs/types/ElectionState.html new file mode 100644 index 0000000..db2312c --- /dev/null +++ b/Docs/types/ElectionState.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElectionState + + +

Back to Server.Factions

+

ElectionState (Enum)

+ Pending = 0,
+ Campaign = 1,
+ Election = 2
+ + diff --git a/Docs/types/ElegantArmoire.html b/Docs/types/ElegantArmoire.html new file mode 100644 index 0000000..ce62997 --- /dev/null +++ b/Docs/types/ElegantArmoire.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ElegantArmoire + + +

Back to Server.Items

+

ElegantArmoire : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElegantArmoire()
+ (ctor) ElegantArmoire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElegantLowTable.html b/Docs/types/ElegantLowTable.html new file mode 100644 index 0000000..7000423 --- /dev/null +++ b/Docs/types/ElegantLowTable.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ElegantLowTable + + +

Back to Server.Items

+

ElegantLowTable : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElegantLowTable()
+ (ctor) ElegantLowTable( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Elf.html b/Docs/types/Elf.html new file mode 100644 index 0000000..19a4239 --- /dev/null +++ b/Docs/types/Elf.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Elf + + +

Back to Server.Misc

+

(RaceDefinitions) - Elf : Race

+ (ctor) Elf( int raceID, int raceIndex )
+ virtual int ClipHairHue( int hue )
+ virtual int ClipSkinHue( int hue )
+ virtual int RandomFacialHair( bool female )
+ virtual int RandomHair( bool female )
+ virtual int RandomHairHue()
+ virtual int RandomSkinHue()
+ virtual bool ValidateFacialHair( bool female, int itemID )
+ virtual bool ValidateHair( bool female, int itemID )
+ + diff --git a/Docs/types/EliteNinja.html b/Docs/types/EliteNinja.html new file mode 100644 index 0000000..1e1cef2 --- /dev/null +++ b/Docs/types/EliteNinja.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - EliteNinja + + +

Back to Server.Mobiles

+

EliteNinja : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EliteNinja()
+ (ctor) EliteNinja( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool BardImmune( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenBedEastAddon.html b/Docs/types/ElvenBedEastAddon.html new file mode 100644 index 0000000..748e2c6 --- /dev/null +++ b/Docs/types/ElvenBedEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenBedEastAddon + + +

Back to Server.Items

+

ElvenBedEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenBedEastAddon()
+ (ctor) ElvenBedEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenBedEastDeed.html b/Docs/types/ElvenBedEastDeed.html new file mode 100644 index 0000000..4c60f41 --- /dev/null +++ b/Docs/types/ElvenBedEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenBedEastDeed + + +

Back to Server.Items

+

ElvenBedEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenBedEastDeed()
+ (ctor) ElvenBedEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenBedSouthAddon.html b/Docs/types/ElvenBedSouthAddon.html new file mode 100644 index 0000000..263d6a8 --- /dev/null +++ b/Docs/types/ElvenBedSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenBedSouthAddon + + +

Back to Server.Items

+

ElvenBedSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenBedSouthAddon()
+ (ctor) ElvenBedSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenBedSouthDeed.html b/Docs/types/ElvenBedSouthDeed.html new file mode 100644 index 0000000..3875f5b --- /dev/null +++ b/Docs/types/ElvenBedSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenBedSouthDeed + + +

Back to Server.Items

+

ElvenBedSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenBedSouthDeed()
+ (ctor) ElvenBedSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenBoots.html b/Docs/types/ElvenBoots.html new file mode 100644 index 0000000..497400d --- /dev/null +++ b/Docs/types/ElvenBoots.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ElvenBoots + + +

Back to Server.Items

+

ElvenBoots : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ElvenBoots()
+ (ctor) ElvenBoots( int hue )
+ (ctor) ElvenBoots( Serial serial )
+ CraftResource DefaultResource( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenCompositeLongbow.html b/Docs/types/ElvenCompositeLongbow.html new file mode 100644 index 0000000..f276f40 --- /dev/null +++ b/Docs/types/ElvenCompositeLongbow.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - ElvenCompositeLongbow + + +

Back to Server.Items

+

ElvenCompositeLongbow : BaseRanged, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BlightGrippedLongbow, SilvanisFeywoodBow, WildfireBow

+ (ctor) ElvenCompositeLongbow()
+ (ctor) ElvenCompositeLongbow( Serial serial )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefMaxRange( get; )
+ int EffectID( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenDarkShirt.html b/Docs/types/ElvenDarkShirt.html new file mode 100644 index 0000000..4d06909 --- /dev/null +++ b/Docs/types/ElvenDarkShirt.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenDarkShirt + + +

Back to Server.Items

+

ElvenDarkShirt : BaseShirt, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ElvenDarkShirt()
+ (ctor) ElvenDarkShirt( int hue )
+ (ctor) ElvenDarkShirt( Serial serial )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenDresserEastAddon.html b/Docs/types/ElvenDresserEastAddon.html new file mode 100644 index 0000000..0359bda --- /dev/null +++ b/Docs/types/ElvenDresserEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenDresserEastAddon + + +

Back to Server.Items

+

ElvenDresserEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenDresserEastAddon()
+ (ctor) ElvenDresserEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenDresserEastDeed.html b/Docs/types/ElvenDresserEastDeed.html new file mode 100644 index 0000000..062c6c7 --- /dev/null +++ b/Docs/types/ElvenDresserEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenDresserEastDeed + + +

Back to Server.Items

+

ElvenDresserEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenDresserEastDeed()
+ (ctor) ElvenDresserEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenDresserSouthAddon.html b/Docs/types/ElvenDresserSouthAddon.html new file mode 100644 index 0000000..ec89a0b --- /dev/null +++ b/Docs/types/ElvenDresserSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenDresserSouthAddon + + +

Back to Server.Items

+

ElvenDresserSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenDresserSouthAddon()
+ (ctor) ElvenDresserSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenDresserSouthDeed.html b/Docs/types/ElvenDresserSouthDeed.html new file mode 100644 index 0000000..fbf3475 --- /dev/null +++ b/Docs/types/ElvenDresserSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenDresserSouthDeed + + +

Back to Server.Items

+

ElvenDresserSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenDresserSouthDeed()
+ (ctor) ElvenDresserSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenForgeAddon.html b/Docs/types/ElvenForgeAddon.html new file mode 100644 index 0000000..61fbe3c --- /dev/null +++ b/Docs/types/ElvenForgeAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenForgeAddon + + +

Back to Server.Items

+

ElvenForgeAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenForgeAddon()
+ (ctor) ElvenForgeAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenForgeDeed.html b/Docs/types/ElvenForgeDeed.html new file mode 100644 index 0000000..d4a8b85 --- /dev/null +++ b/Docs/types/ElvenForgeDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenForgeDeed + + +

Back to Server.Items

+

ElvenForgeDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenForgeDeed()
+ (ctor) ElvenForgeDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenGlasses.html b/Docs/types/ElvenGlasses.html new file mode 100644 index 0000000..5f5096d --- /dev/null +++ b/Docs/types/ElvenGlasses.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - ElvenGlasses + + +

Back to Server.Items

+

ElvenGlasses : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: AnthropomorphistGlasses, ArtsGlasses, FoldedSteelGlasses, LightOfWayGlasses, LyricalGlasses, MaceShieldGlasses, MaritimeGlasses, NecromanticGlasses, PoisonedGlasses, TradeGlasses, TreasureTrinketGlasses, WizardsGlasses

+

Nested Types: SaveFlag

+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (ctor) ElvenGlasses()
+ (ctor) ElvenGlasses( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ AosWeaponAttributes WeaponAttributes( get; )
+ virtual void AppendChildNameProperties( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenLoveseatEastAddon.html b/Docs/types/ElvenLoveseatEastAddon.html new file mode 100644 index 0000000..79445b5 --- /dev/null +++ b/Docs/types/ElvenLoveseatEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenLoveseatEastAddon + + +

Back to Server.Items

+

ElvenLoveseatEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenLoveseatEastAddon()
+ (ctor) ElvenLoveseatEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenLoveseatEastDeed.html b/Docs/types/ElvenLoveseatEastDeed.html new file mode 100644 index 0000000..04557f5 --- /dev/null +++ b/Docs/types/ElvenLoveseatEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenLoveseatEastDeed + + +

Back to Server.Items

+

ElvenLoveseatEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenLoveseatEastDeed()
+ (ctor) ElvenLoveseatEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenLoveseatSouthAddon.html b/Docs/types/ElvenLoveseatSouthAddon.html new file mode 100644 index 0000000..c06ccc7 --- /dev/null +++ b/Docs/types/ElvenLoveseatSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenLoveseatSouthAddon + + +

Back to Server.Items

+

ElvenLoveseatSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenLoveseatSouthAddon()
+ (ctor) ElvenLoveseatSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenLoveseatSouthDeed.html b/Docs/types/ElvenLoveseatSouthDeed.html new file mode 100644 index 0000000..9f33e5e --- /dev/null +++ b/Docs/types/ElvenLoveseatSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenLoveseatSouthDeed + + +

Back to Server.Items

+

ElvenLoveseatSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenLoveseatSouthDeed()
+ (ctor) ElvenLoveseatSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenMachete.html b/Docs/types/ElvenMachete.html new file mode 100644 index 0000000..92f56db --- /dev/null +++ b/Docs/types/ElvenMachete.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - ElvenMachete + + +

Back to Server.Items

+

ElvenMachete : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: RighteousAnger

+ (ctor) ElvenMachete()
+ (ctor) ElvenMachete( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenPants.html b/Docs/types/ElvenPants.html new file mode 100644 index 0000000..fcf5d12 --- /dev/null +++ b/Docs/types/ElvenPants.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenPants + + +

Back to Server.Items

+

ElvenPants : BasePants, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ElvenPants()
+ (ctor) ElvenPants( int hue )
+ (ctor) ElvenPants( Serial serial )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenQuiver.html b/Docs/types/ElvenQuiver.html new file mode 100644 index 0000000..8fd80ed --- /dev/null +++ b/Docs/types/ElvenQuiver.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenQuiver + + +

Back to Server.Items

+

ElvenQuiver : BaseQuiver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: QuiverOfBlight, QuiverOfFire, QuiverOfIce, QuiverOfLightning

+ (ctor) ElvenQuiver()
+ (ctor) ElvenQuiver( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenReadingChair.html b/Docs/types/ElvenReadingChair.html new file mode 100644 index 0000000..5851ef9 --- /dev/null +++ b/Docs/types/ElvenReadingChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ElvenReadingChair + + +

Back to Server.Items

+

ElvenReadingChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenReadingChair()
+ (ctor) ElvenReadingChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenShirt.html b/Docs/types/ElvenShirt.html new file mode 100644 index 0000000..cb4b794 --- /dev/null +++ b/Docs/types/ElvenShirt.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenShirt + + +

Back to Server.Items

+

ElvenShirt : BaseShirt, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ElvenShirt()
+ (ctor) ElvenShirt( int hue )
+ (ctor) ElvenShirt( Serial serial )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenSpellblade.html b/Docs/types/ElvenSpellblade.html new file mode 100644 index 0000000..c3f45f8 --- /dev/null +++ b/Docs/types/ElvenSpellblade.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - ElvenSpellblade + + +

Back to Server.Items

+

ElvenSpellblade : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: ColdForgedBlade

+ (ctor) ElvenSpellblade()
+ (ctor) ElvenSpellblade( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenSpinningwheelEastAddon.html b/Docs/types/ElvenSpinningwheelEastAddon.html new file mode 100644 index 0000000..cf2d36d --- /dev/null +++ b/Docs/types/ElvenSpinningwheelEastAddon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ElvenSpinningwheelEastAddon + + +

Back to Server.Items

+

ElvenSpinningwheelEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, ISpinningWheel

+

Nested Types: SpinTimer

+ (ctor) ElvenSpinningwheelEastAddon()
+ (ctor) ElvenSpinningwheelEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ bool Spinning( get; )
+ virtual void BeginSpin( SpinCallback callback, Mobile from, int hue )
+ virtual void Deserialize( GenericReader reader )
+ void EndSpin( SpinCallback callback, Mobile from, int hue )
+ virtual void OnComponentLoaded( AddonComponent c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenSpinningwheelEastDeed.html b/Docs/types/ElvenSpinningwheelEastDeed.html new file mode 100644 index 0000000..3069d18 --- /dev/null +++ b/Docs/types/ElvenSpinningwheelEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenSpinningwheelEastDeed + + +

Back to Server.Items

+

ElvenSpinningwheelEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenSpinningwheelEastDeed()
+ (ctor) ElvenSpinningwheelEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenSpinningwheelSouthAddon.html b/Docs/types/ElvenSpinningwheelSouthAddon.html new file mode 100644 index 0000000..c9c24c6 --- /dev/null +++ b/Docs/types/ElvenSpinningwheelSouthAddon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ElvenSpinningwheelSouthAddon + + +

Back to Server.Items

+

ElvenSpinningwheelSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, ISpinningWheel

+

Nested Types: SpinTimer

+ (ctor) ElvenSpinningwheelSouthAddon()
+ (ctor) ElvenSpinningwheelSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ bool Spinning( get; )
+ virtual void BeginSpin( SpinCallback callback, Mobile from, int hue )
+ virtual void Deserialize( GenericReader reader )
+ void EndSpin( SpinCallback callback, Mobile from, int hue )
+ virtual void OnComponentLoaded( AddonComponent c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenSpinningwheelSouthDeed.html b/Docs/types/ElvenSpinningwheelSouthDeed.html new file mode 100644 index 0000000..535c101 --- /dev/null +++ b/Docs/types/ElvenSpinningwheelSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenSpinningwheelSouthDeed + + +

Back to Server.Items

+

ElvenSpinningwheelSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenSpinningwheelSouthDeed()
+ (ctor) ElvenSpinningwheelSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenStoveEastAddon.html b/Docs/types/ElvenStoveEastAddon.html new file mode 100644 index 0000000..9527d4e --- /dev/null +++ b/Docs/types/ElvenStoveEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenStoveEastAddon + + +

Back to Server.Items

+

ElvenStoveEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenStoveEastAddon()
+ (ctor) ElvenStoveEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenStoveEastDeed.html b/Docs/types/ElvenStoveEastDeed.html new file mode 100644 index 0000000..9bba382 --- /dev/null +++ b/Docs/types/ElvenStoveEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenStoveEastDeed + + +

Back to Server.Items

+

ElvenStoveEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenStoveEastDeed()
+ (ctor) ElvenStoveEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenStoveSouthAddon.html b/Docs/types/ElvenStoveSouthAddon.html new file mode 100644 index 0000000..8964b7a --- /dev/null +++ b/Docs/types/ElvenStoveSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenStoveSouthAddon + + +

Back to Server.Items

+

ElvenStoveSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenStoveSouthAddon()
+ (ctor) ElvenStoveSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenStoveSouthDeed.html b/Docs/types/ElvenStoveSouthDeed.html new file mode 100644 index 0000000..fe704e8 --- /dev/null +++ b/Docs/types/ElvenStoveSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenStoveSouthDeed + + +

Back to Server.Items

+

ElvenStoveSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenStoveSouthDeed()
+ (ctor) ElvenStoveSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenWashBasinEastAddon.html b/Docs/types/ElvenWashBasinEastAddon.html new file mode 100644 index 0000000..4c6fddd --- /dev/null +++ b/Docs/types/ElvenWashBasinEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenWashBasinEastAddon + + +

Back to Server.Items

+

ElvenWashBasinEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenWashBasinEastAddon()
+ (ctor) ElvenWashBasinEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenWashBasinEastDeed.html b/Docs/types/ElvenWashBasinEastDeed.html new file mode 100644 index 0000000..edeb54d --- /dev/null +++ b/Docs/types/ElvenWashBasinEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenWashBasinEastDeed + + +

Back to Server.Items

+

ElvenWashBasinEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenWashBasinEastDeed()
+ (ctor) ElvenWashBasinEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenWashBasinSouthAddon.html b/Docs/types/ElvenWashBasinSouthAddon.html new file mode 100644 index 0000000..9531ff2 --- /dev/null +++ b/Docs/types/ElvenWashBasinSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ElvenWashBasinSouthAddon + + +

Back to Server.Items

+

ElvenWashBasinSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ElvenWashBasinSouthAddon()
+ (ctor) ElvenWashBasinSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElvenWashBasinSouthDeed.html b/Docs/types/ElvenWashBasinSouthDeed.html new file mode 100644 index 0000000..4e6f331 --- /dev/null +++ b/Docs/types/ElvenWashBasinSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ElvenWashBasinSouthDeed + + +

Back to Server.Items

+

ElvenWashBasinSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ElvenWashBasinSouthDeed()
+ (ctor) ElvenWashBasinSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ElwoodDuringAutograph1Conversation.html b/Docs/types/ElwoodDuringAutograph1Conversation.html new file mode 100644 index 0000000..adf30d4 --- /dev/null +++ b/Docs/types/ElwoodDuringAutograph1Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringAutograph1Conversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringAutograph1Conversation : QuestConversation

+ (ctor) ElwoodDuringAutograph1Conversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodDuringAutograph2Conversation.html b/Docs/types/ElwoodDuringAutograph2Conversation.html new file mode 100644 index 0000000..b030583 --- /dev/null +++ b/Docs/types/ElwoodDuringAutograph2Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringAutograph2Conversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringAutograph2Conversation : QuestConversation

+ (ctor) ElwoodDuringAutograph2Conversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodDuringAutograph3Conversation.html b/Docs/types/ElwoodDuringAutograph3Conversation.html new file mode 100644 index 0000000..e05b24f --- /dev/null +++ b/Docs/types/ElwoodDuringAutograph3Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringAutograph3Conversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringAutograph3Conversation : QuestConversation

+ (ctor) ElwoodDuringAutograph3Conversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodDuringFishConversation.html b/Docs/types/ElwoodDuringFishConversation.html new file mode 100644 index 0000000..6e60616 --- /dev/null +++ b/Docs/types/ElwoodDuringFishConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringFishConversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringFishConversation : QuestConversation

+ (ctor) ElwoodDuringFishConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodDuringPainting1Conversation.html b/Docs/types/ElwoodDuringPainting1Conversation.html new file mode 100644 index 0000000..f61d426 --- /dev/null +++ b/Docs/types/ElwoodDuringPainting1Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringPainting1Conversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringPainting1Conversation : QuestConversation

+ (ctor) ElwoodDuringPainting1Conversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodDuringPainting2Conversation.html b/Docs/types/ElwoodDuringPainting2Conversation.html new file mode 100644 index 0000000..347e5a2 --- /dev/null +++ b/Docs/types/ElwoodDuringPainting2Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringPainting2Conversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringPainting2Conversation : QuestConversation

+ (ctor) ElwoodDuringPainting2Conversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodDuringToys1Conversation.html b/Docs/types/ElwoodDuringToys1Conversation.html new file mode 100644 index 0000000..8e2924d --- /dev/null +++ b/Docs/types/ElwoodDuringToys1Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringToys1Conversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringToys1Conversation : QuestConversation

+ (ctor) ElwoodDuringToys1Conversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodDuringToys2Conversation.html b/Docs/types/ElwoodDuringToys2Conversation.html new file mode 100644 index 0000000..2267ac0 --- /dev/null +++ b/Docs/types/ElwoodDuringToys2Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringToys2Conversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringToys2Conversation : QuestConversation

+ (ctor) ElwoodDuringToys2Conversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodDuringToys3Conversation.html b/Docs/types/ElwoodDuringToys3Conversation.html new file mode 100644 index 0000000..f1f53ec --- /dev/null +++ b/Docs/types/ElwoodDuringToys3Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ElwoodDuringToys3Conversation + + +

Back to Server.Engines.Quests.Collector

+

ElwoodDuringToys3Conversation : QuestConversation

+ (ctor) ElwoodDuringToys3Conversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/ElwoodMcCarrin.html b/Docs/types/ElwoodMcCarrin.html new file mode 100644 index 0000000..f9dc136 --- /dev/null +++ b/Docs/types/ElwoodMcCarrin.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ElwoodMcCarrin + + +

Back to Server.Engines.Quests.Collector

+

ElwoodMcCarrin : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) ElwoodMcCarrin()
+ (ctor) ElwoodMcCarrin( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ bool GiveReward( Mobile to )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Email.html b/Docs/types/Email.html new file mode 100644 index 0000000..79d8c5c --- /dev/null +++ b/Docs/types/Email.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Email + + +

Back to Server.Misc

+

Email

+ (static) void AsyncSend( MailMessage message )
+ (static) void Configure()
+ (static) bool IsValid( string address )
+ (static) bool Send( MailMessage message )
+ (static) void SendCallback( object state )
+ (ctor) Email()
+ + diff --git a/Docs/types/EmbroideredOakLeafCloak.html b/Docs/types/EmbroideredOakLeafCloak.html new file mode 100644 index 0000000..59b6eb1 --- /dev/null +++ b/Docs/types/EmbroideredOakLeafCloak.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - EmbroideredOakLeafCloak + + +

Back to Server.Items

+

EmbroideredOakLeafCloak : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) EmbroideredOakLeafCloak()
+ (ctor) EmbroideredOakLeafCloak( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Emerald.html b/Docs/types/Emerald.html new file mode 100644 index 0000000..283aec3 --- /dev/null +++ b/Docs/types/Emerald.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Emerald + + +

Back to Server.Items

+

Emerald : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Emerald()
+ (ctor) Emerald( int amount )
+ (ctor) Emerald( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Emino.html b/Docs/types/Emino.html new file mode 100644 index 0000000..362058d --- /dev/null +++ b/Docs/types/Emino.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Emino + + +

Back to Server.Engines.Quests.Ninja

+

Emino : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Emino()
+ (ctor) Emino( Serial serial )
+ int TalkNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile pm )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EminosKatana.html b/Docs/types/EminosKatana.html new file mode 100644 index 0000000..c1d38f0 --- /dev/null +++ b/Docs/types/EminosKatana.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EminosKatana + + +

Back to Server.Engines.Quests.Ninja

+

EminosKatana : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EminosKatana()
+ (ctor) EminosKatana( Serial serial )
+ int LabelNumber( get; )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EminosKatanaChest.html b/Docs/types/EminosKatanaChest.html new file mode 100644 index 0000000..98f856f --- /dev/null +++ b/Docs/types/EminosKatanaChest.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - EminosKatanaChest + + +

Back to Server.Engines.Quests.Ninja

+

EminosKatanaChest : WoodenChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) EminosKatanaChest()
+ (ctor) EminosKatanaChest( Serial serial )
+ bool IsDecoContainer( get; )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ virtual void Deserialize( GenericReader reader )
+ void GenerateTreasure()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnItemLifted( Mobile from, Item item )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EminosUndertakingQuest.html b/Docs/types/EminosUndertakingQuest.html new file mode 100644 index 0000000..c6ae6b5 --- /dev/null +++ b/Docs/types/EminosUndertakingQuest.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - EminosUndertakingQuest + + +

Back to Server.Engines.Quests.Ninja

+

EminosUndertakingQuest : QuestSystem

+ (static) bool HasLostEminosKatana( Mobile from )
+ (static) bool HasLostNoteForZoel( Mobile from )
+ (ctor) EminosUndertakingQuest()
+ (ctor) EminosUndertakingQuest( PlayerMobile from )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void Slice()
+ + diff --git a/Docs/types/EmptyBentoBox.html b/Docs/types/EmptyBentoBox.html new file mode 100644 index 0000000..32ec7c6 --- /dev/null +++ b/Docs/types/EmptyBentoBox.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyBentoBox + + +

Back to Server.Items

+

EmptyBentoBox : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyBentoBox()
+ (ctor) EmptyBentoBox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyBookcase.html b/Docs/types/EmptyBookcase.html new file mode 100644 index 0000000..5c2418d --- /dev/null +++ b/Docs/types/EmptyBookcase.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyBookcase + + +

Back to Server.Items

+

EmptyBookcase : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyBookcase()
+ (ctor) EmptyBookcase( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyCurvedFlaskE.html b/Docs/types/EmptyCurvedFlaskE.html new file mode 100644 index 0000000..23a2cd8 --- /dev/null +++ b/Docs/types/EmptyCurvedFlaskE.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyCurvedFlaskE + + +

Back to Server.Items

+

EmptyCurvedFlaskE : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyCurvedFlaskE()
+ (ctor) EmptyCurvedFlaskE( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyCurvedFlaskW.html b/Docs/types/EmptyCurvedFlaskW.html new file mode 100644 index 0000000..8055f8e --- /dev/null +++ b/Docs/types/EmptyCurvedFlaskW.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyCurvedFlaskW + + +

Back to Server.Items

+

EmptyCurvedFlaskW : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyCurvedFlaskW()
+ (ctor) EmptyCurvedFlaskW( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyJar.html b/Docs/types/EmptyJar.html new file mode 100644 index 0000000..cfec496 --- /dev/null +++ b/Docs/types/EmptyJar.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyJar + + +

Back to Server.Items

+

EmptyJar : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyJar()
+ (ctor) EmptyJar( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyJars.html b/Docs/types/EmptyJars.html new file mode 100644 index 0000000..11acd02 --- /dev/null +++ b/Docs/types/EmptyJars.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyJars + + +

Back to Server.Items

+

EmptyJars : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyJars()
+ (ctor) EmptyJars( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyJars2.html b/Docs/types/EmptyJars2.html new file mode 100644 index 0000000..1092cff --- /dev/null +++ b/Docs/types/EmptyJars2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyJars2 + + +

Back to Server.Items

+

EmptyJars2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyJars2()
+ (ctor) EmptyJars2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyJars3.html b/Docs/types/EmptyJars3.html new file mode 100644 index 0000000..1cde904 --- /dev/null +++ b/Docs/types/EmptyJars3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyJars3 + + +

Back to Server.Items

+

EmptyJars3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyJars3()
+ (ctor) EmptyJars3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyJars4.html b/Docs/types/EmptyJars4.html new file mode 100644 index 0000000..73884ad --- /dev/null +++ b/Docs/types/EmptyJars4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyJars4 + + +

Back to Server.Items

+

EmptyJars4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyJars4()
+ (ctor) EmptyJars4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyPewterBowl.html b/Docs/types/EmptyPewterBowl.html new file mode 100644 index 0000000..865832a --- /dev/null +++ b/Docs/types/EmptyPewterBowl.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyPewterBowl + + +

Back to Server.Items

+

EmptyPewterBowl : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyPewterBowl()
+ (ctor) EmptyPewterBowl( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyPewterTub.html b/Docs/types/EmptyPewterTub.html new file mode 100644 index 0000000..8408723 --- /dev/null +++ b/Docs/types/EmptyPewterTub.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyPewterTub + + +

Back to Server.Items

+

EmptyPewterTub : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyPewterTub()
+ (ctor) EmptyPewterTub( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyRibbedFlask.html b/Docs/types/EmptyRibbedFlask.html new file mode 100644 index 0000000..097523f --- /dev/null +++ b/Docs/types/EmptyRibbedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyRibbedFlask + + +

Back to Server.Items

+

EmptyRibbedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyRibbedFlask()
+ (ctor) EmptyRibbedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyTheBowlGump.html b/Docs/types/EmptyTheBowlGump.html new file mode 100644 index 0000000..c807ae7 --- /dev/null +++ b/Docs/types/EmptyTheBowlGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyTheBowlGump + + +

Back to Server.Engines.Plants

+

EmptyTheBowlGump : Gump

+ (ctor) EmptyTheBowlGump( PlantItem plant )
+ void DrawBackground()
+ void DrawPicture()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/EmptyTimer.html b/Docs/types/EmptyTimer.html new file mode 100644 index 0000000..5c7738c --- /dev/null +++ b/Docs/types/EmptyTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EmptyTimer + + +

Back to Server.Items

+

(TrashBarrel) - EmptyTimer : Timer

+ (ctor) EmptyTimer( TrashBarrel barrel )
+ virtual void OnTick()
+ + diff --git a/Docs/types/EmptyToolKit.html b/Docs/types/EmptyToolKit.html new file mode 100644 index 0000000..59d6338 --- /dev/null +++ b/Docs/types/EmptyToolKit.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyToolKit + + +

Back to Server.Items

+

EmptyToolKit : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyToolKit()
+ (ctor) EmptyToolKit( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyToolKit2.html b/Docs/types/EmptyToolKit2.html new file mode 100644 index 0000000..3d900c4 --- /dev/null +++ b/Docs/types/EmptyToolKit2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyToolKit2 + + +

Back to Server.Items

+

EmptyToolKit2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyToolKit2()
+ (ctor) EmptyToolKit2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyVial.html b/Docs/types/EmptyVial.html new file mode 100644 index 0000000..bd9d7d4 --- /dev/null +++ b/Docs/types/EmptyVial.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyVial + + +

Back to Server.Items

+

EmptyVial : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyVial()
+ (ctor) EmptyVial( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyVialsWRack.html b/Docs/types/EmptyVialsWRack.html new file mode 100644 index 0000000..4ac4e28 --- /dev/null +++ b/Docs/types/EmptyVialsWRack.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyVialsWRack + + +

Back to Server.Items

+

EmptyVialsWRack : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyVialsWRack()
+ (ctor) EmptyVialsWRack( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyWoodenBowl.html b/Docs/types/EmptyWoodenBowl.html new file mode 100644 index 0000000..4cb5bc8 --- /dev/null +++ b/Docs/types/EmptyWoodenBowl.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyWoodenBowl + + +

Back to Server.Items

+

EmptyWoodenBowl : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyWoodenBowl()
+ (ctor) EmptyWoodenBowl( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EmptyWoodenTub.html b/Docs/types/EmptyWoodenTub.html new file mode 100644 index 0000000..0c9fced --- /dev/null +++ b/Docs/types/EmptyWoodenTub.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EmptyWoodenTub + + +

Back to Server.Items

+

EmptyWoodenTub : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EmptyWoodenTub()
+ (ctor) EmptyWoodenTub( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnchantedPaints.html b/Docs/types/EnchantedPaints.html new file mode 100644 index 0000000..5be3c60 --- /dev/null +++ b/Docs/types/EnchantedPaints.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EnchantedPaints + + +

Back to Server.Engines.Quests.Collector

+

EnchantedPaints : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) EnchantedPaints()
+ (ctor) EnchantedPaints( Serial serial )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnchantedSextant.html b/Docs/types/EnchantedSextant.html new file mode 100644 index 0000000..f34b3b0 --- /dev/null +++ b/Docs/types/EnchantedSextant.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EnchantedSextant + + +

Back to Server.Items

+

EnchantedSextant : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EnchantedSextant()
+ (ctor) EnchantedSextant( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnchantedSwitch.html b/Docs/types/EnchantedSwitch.html new file mode 100644 index 0000000..9dcd7c0 --- /dev/null +++ b/Docs/types/EnchantedSwitch.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EnchantedSwitch + + +

Back to Server.Items

+

EnchantedSwitch : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EnchantedSwitch()
+ (ctor) EnchantedSwitch( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnchantedTitanLegBone.html b/Docs/types/EnchantedTitanLegBone.html new file mode 100644 index 0000000..f995a41 --- /dev/null +++ b/Docs/types/EnchantedTitanLegBone.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EnchantedTitanLegBone + + +

Back to Server.Items

+

EnchantedTitanLegBone : ShortSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) EnchantedTitanLegBone()
+ (ctor) EnchantedTitanLegBone( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EncodedPacketHandler.html b/Docs/types/EncodedPacketHandler.html new file mode 100644 index 0000000..68068f3 --- /dev/null +++ b/Docs/types/EncodedPacketHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EncodedPacketHandler + + +

Back to Server.Network

+

EncodedPacketHandler

+ (ctor) EncodedPacketHandler( int packetID, bool ingame, OnEncodedPacketReceive onReceive )
+ bool Ingame( get; )
+ OnEncodedPacketReceive OnReceive( get; )
+ int PacketID( get; )
+ + diff --git a/Docs/types/EncodedReader.html b/Docs/types/EncodedReader.html new file mode 100644 index 0000000..323e537 --- /dev/null +++ b/Docs/types/EncodedReader.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EncodedReader + + +

Back to Server.Network

+

EncodedReader

+ (ctor) EncodedReader( PacketReader reader )
+ byte[] Buffer( get; )
+ int ReadInt32()
+ Point3D ReadPoint3D()
+ string ReadUnicodeString()
+ string ReadUnicodeStringSafe()
+ void Trace( NetState state )
+ + diff --git a/Docs/types/End2Conversation.html b/Docs/types/End2Conversation.html new file mode 100644 index 0000000..7f1ec4d --- /dev/null +++ b/Docs/types/End2Conversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - End2Conversation + + +

Back to Server.Engines.Quests.Ambitious

+

End2Conversation : QuestConversation

+ (ctor) End2Conversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/EndActionTimer.html b/Docs/types/EndActionTimer.html new file mode 100644 index 0000000..b9f112c --- /dev/null +++ b/Docs/types/EndActionTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EndActionTimer + + +

Back to Server.Items

+

(GreenThorns) - EndActionTimer : Timer

+ (ctor) EndActionTimer( Mobile from )
+ virtual void OnTick()
+ + diff --git a/Docs/types/EndConversation.html b/Docs/types/EndConversation.html new file mode 100644 index 0000000..32127c2 --- /dev/null +++ b/Docs/types/EndConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - EndConversation + + +

Back to Server.Engines.Quests.Zento

+

EndConversation : QuestConversation

+ (ctor) EndConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/EndHouseCustomization.html b/Docs/types/EndHouseCustomization.html new file mode 100644 index 0000000..e8f2d4b --- /dev/null +++ b/Docs/types/EndHouseCustomization.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - EndHouseCustomization + + +

Back to Server.Multis

+

EndHouseCustomization : Packet

+ (ctor) EndHouseCustomization( HouseFoundation house )
+ + diff --git a/Docs/types/EndVendorBuy.html b/Docs/types/EndVendorBuy.html new file mode 100644 index 0000000..36fcf15 --- /dev/null +++ b/Docs/types/EndVendorBuy.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - EndVendorBuy + + +

Back to Server.Network

+

EndVendorBuy : Packet

+ (ctor) EndVendorBuy( Mobile Vendor )
+ + diff --git a/Docs/types/EndVendorSell.html b/Docs/types/EndVendorSell.html new file mode 100644 index 0000000..4d20aab --- /dev/null +++ b/Docs/types/EndVendorSell.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - EndVendorSell + + +

Back to Server.Network

+

EndVendorSell : Packet

+ (ctor) EndVendorSell( Mobile Vendor )
+ + diff --git a/Docs/types/EnemyOfOneSpell.html b/Docs/types/EnemyOfOneSpell.html new file mode 100644 index 0000000..9a0b077 --- /dev/null +++ b/Docs/types/EnemyOfOneSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - EnemyOfOneSpell + + +

Back to Server.Spells.Chivalry

+

EnemyOfOneSpell : PaladinSpell, ISpell

+ (static) void Expire_Callback( object state )
+ (ctor) EnemyOfOneSpell( Mobile caster, Item scroll )
+ bool BlocksMovement( get; )
+ TimeSpan CastDelayBase( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/EnergyBoltScroll.html b/Docs/types/EnergyBoltScroll.html new file mode 100644 index 0000000..58ceb88 --- /dev/null +++ b/Docs/types/EnergyBoltScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EnergyBoltScroll + + +

Back to Server.Items

+

EnergyBoltScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) EnergyBoltScroll()
+ (ctor) EnergyBoltScroll( int amount )
+ (ctor) EnergyBoltScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnergyBoltSpell.html b/Docs/types/EnergyBoltSpell.html new file mode 100644 index 0000000..b420041 --- /dev/null +++ b/Docs/types/EnergyBoltSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EnergyBoltSpell + + +

Back to Server.Spells.Sixth

+

EnergyBoltSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) EnergyBoltSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/EnergyFieldScroll.html b/Docs/types/EnergyFieldScroll.html new file mode 100644 index 0000000..53913d4 --- /dev/null +++ b/Docs/types/EnergyFieldScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EnergyFieldScroll + + +

Back to Server.Items

+

EnergyFieldScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) EnergyFieldScroll()
+ (ctor) EnergyFieldScroll( int amount )
+ (ctor) EnergyFieldScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnergyFieldSpell.html b/Docs/types/EnergyFieldSpell.html new file mode 100644 index 0000000..50d4802 --- /dev/null +++ b/Docs/types/EnergyFieldSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EnergyFieldSpell + + +

Back to Server.Spells.Seventh

+

EnergyFieldSpell : MagerySpell, ISpell

+

Nested Types: InternalItem, InternalTarget

+ (ctor) EnergyFieldSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/EnergyVortex.html b/Docs/types/EnergyVortex.html new file mode 100644 index 0000000..b217fe9 --- /dev/null +++ b/Docs/types/EnergyVortex.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - EnergyVortex + + +

Back to Server.Mobiles

+

EnergyVortex : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EnergyVortex()
+ (ctor) EnergyVortex( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool BleedImmune( get; )
+ bool DeleteCorpseOnDeath( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual double GetFightModeRanking( Mobile m, FightMode acqType, bool bPlayerOnly )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnergyVortexScroll.html b/Docs/types/EnergyVortexScroll.html new file mode 100644 index 0000000..a332853 --- /dev/null +++ b/Docs/types/EnergyVortexScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EnergyVortexScroll + + +

Back to Server.Items

+

EnergyVortexScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) EnergyVortexScroll()
+ (ctor) EnergyVortexScroll( int amount )
+ (ctor) EnergyVortexScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnergyVortexSpell.html b/Docs/types/EnergyVortexSpell.html new file mode 100644 index 0000000..e846897 --- /dev/null +++ b/Docs/types/EnergyVortexSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EnergyVortexSpell + + +

Back to Server.Spells.Eighth

+

EnergyVortexSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) EnergyVortexSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/Enhance.html b/Docs/types/Enhance.html new file mode 100644 index 0000000..dafd26b --- /dev/null +++ b/Docs/types/Enhance.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Enhance + + +

Back to Server.Engines.Craft

+

Enhance

+

Nested Types: InternalTarget

+ (static) void BeginTarget( Mobile from, CraftSystem craftSystem, BaseTool tool )
+ (static) void CheckResult( ref EnhanceResult res, int chance )
+ (static) EnhanceResult Invoke( Mobile from, CraftSystem craftSystem, BaseTool tool, Item item, CraftResource resource, Type resType, ref object resMessage )
+ (ctor) Enhance()
+ + diff --git a/Docs/types/EnhanceResult.html b/Docs/types/EnhanceResult.html new file mode 100644 index 0000000..de44877 --- /dev/null +++ b/Docs/types/EnhanceResult.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - EnhanceResult + + +

Back to Server.Engines.Craft

+

EnhanceResult (Enum)

+ None = 0,
+ NotInBackpack = 1,
+ BadItem = 2,
+ BadResource = 3,
+ AlreadyEnhanced = 4,
+ Success = 5,
+ Failure = 6,
+ Broken = 7,
+ NoResources = 8,
+ NoSkill = 9
+ + diff --git a/Docs/types/EnhancedBandage.html b/Docs/types/EnhancedBandage.html new file mode 100644 index 0000000..c05876e --- /dev/null +++ b/Docs/types/EnhancedBandage.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - EnhancedBandage + + +

Back to Server.Items

+

EnhancedBandage : Bandage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (static) int HealingBonus( get; )
+ (ctor) EnhancedBandage()
+ (ctor) EnhancedBandage( int amount )
+ (ctor) EnhancedBandage( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnragedBlackBear.html b/Docs/types/EnragedBlackBear.html new file mode 100644 index 0000000..2ae4986 --- /dev/null +++ b/Docs/types/EnragedBlackBear.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EnragedBlackBear + + +

Back to Server.Mobiles

+

EnragedBlackBear : BaseEnraged, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EnragedBlackBear( Mobile summoner )
+ (ctor) EnragedBlackBear( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnragedEagle.html b/Docs/types/EnragedEagle.html new file mode 100644 index 0000000..b30ecfe --- /dev/null +++ b/Docs/types/EnragedEagle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EnragedEagle + + +

Back to Server.Mobiles

+

EnragedEagle : BaseEnraged, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EnragedEagle( Mobile summoner )
+ (ctor) EnragedEagle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnragedHart.html b/Docs/types/EnragedHart.html new file mode 100644 index 0000000..7965bb2 --- /dev/null +++ b/Docs/types/EnragedHart.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EnragedHart + + +

Back to Server.Mobiles

+

EnragedHart : BaseEnraged, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EnragedHart( Mobile summoner )
+ (ctor) EnragedHart( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnragedHind.html b/Docs/types/EnragedHind.html new file mode 100644 index 0000000..f3147e5 --- /dev/null +++ b/Docs/types/EnragedHind.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EnragedHind + + +

Back to Server.Mobiles

+

EnragedHind : BaseEnraged, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EnragedHind( Mobile summoner )
+ (ctor) EnragedHind( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnragedRabbit.html b/Docs/types/EnragedRabbit.html new file mode 100644 index 0000000..b7e7f6f --- /dev/null +++ b/Docs/types/EnragedRabbit.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EnragedRabbit + + +

Back to Server.Mobiles

+

EnragedRabbit : BaseEnraged, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EnragedRabbit( Mobile summoner )
+ (ctor) EnragedRabbit( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnshroudedFigure.html b/Docs/types/EnshroudedFigure.html new file mode 100644 index 0000000..7677947 --- /dev/null +++ b/Docs/types/EnshroudedFigure.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - EnshroudedFigure + + +

Back to Server.Engines.Quests.Ninja

+

EnshroudedFigure : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) EnshroudedFigure()
+ (ctor) EnshroudedFigure( Serial serial )
+ int TalkNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnslavedGargoyle.html b/Docs/types/EnslavedGargoyle.html new file mode 100644 index 0000000..533448a --- /dev/null +++ b/Docs/types/EnslavedGargoyle.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EnslavedGargoyle + + +

Back to Server.Mobiles

+

EnslavedGargoyle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EnslavedGargoyle()
+ (ctor) EnslavedGargoyle( Serial serial )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EnterCaveConversation.html b/Docs/types/EnterCaveConversation.html new file mode 100644 index 0000000..cdb2b82 --- /dev/null +++ b/Docs/types/EnterCaveConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - EnterCaveConversation + + +

Back to Server.Engines.Quests.Ninja

+

EnterCaveConversation : QuestConversation

+ (ctor) EnterCaveConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/EnterCaveObjective.html b/Docs/types/EnterCaveObjective.html new file mode 100644 index 0000000..e7efaaa --- /dev/null +++ b/Docs/types/EnterCaveObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EnterCaveObjective + + +

Back to Server.Engines.Quests.Ninja

+

EnterCaveObjective : QuestObjective

+ (ctor) EnterCaveObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/Entity.html b/Docs/types/Entity.html new file mode 100644 index 0000000..1b2b482 --- /dev/null +++ b/Docs/types/Entity.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Entity + + +

Back to Server

+

Entity : IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IComparable<Entity>

+ (ctor) Entity( Serial serial, Point3D loc, Map map )
+ Point3D Location( get; )
+ Map Map( get; )
+ Serial Serial( get; )
+ int X( get; )
+ int Y( get; )
+ int Z( get; )
+ virtual int CompareTo( IEntity other )
+ virtual int CompareTo( object other )
+ virtual int CompareTo( Entity other )
+ virtual void Delete()
+ virtual void ProcessDelta()
+ + diff --git a/Docs/types/Entry.html b/Docs/types/Entry.html new file mode 100644 index 0000000..341f85c --- /dev/null +++ b/Docs/types/Entry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Entry + + +

Back to Server.Mobiles

+

(BarkeeperTitleGump) - Entry

+ (ctor) Entry( string desc )
+ (ctor) Entry( string desc, bool vendor )
+ (ctor) Entry( string desc, string title, bool vendor )
+ + diff --git a/Docs/types/EquipDetailsMenu.html b/Docs/types/EquipDetailsMenu.html new file mode 100644 index 0000000..e8a2d5b --- /dev/null +++ b/Docs/types/EquipDetailsMenu.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - EquipDetailsMenu + + +

Back to Server.Commands

+

(EquipMenu) - EquipDetailsMenu : QuestionMenu, IMenu

+ (ctor) EquipDetailsMenu( Mobile m, Item item )
+ virtual void OnCancel( NetState state )
+ virtual void OnResponse( NetState state, int index )
+ + diff --git a/Docs/types/EquipInfoAttribute.html b/Docs/types/EquipInfoAttribute.html new file mode 100644 index 0000000..e915fbb --- /dev/null +++ b/Docs/types/EquipInfoAttribute.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EquipInfoAttribute + + +

Back to Server.Network

+

EquipInfoAttribute

+ (ctor) EquipInfoAttribute( int number )
+ (ctor) EquipInfoAttribute( int number, int charges )
+ int Charges( get; )
+ int Number( get; )
+ + diff --git a/Docs/types/EquipMenu.html b/Docs/types/EquipMenu.html new file mode 100644 index 0000000..836c65f --- /dev/null +++ b/Docs/types/EquipMenu.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - EquipMenu + + +

Back to Server.Commands

+

(ViewEqTarget) - EquipMenu : ItemListMenu, IMenu

+

Nested Types: EquipDetailsMenu

+ (ctor) EquipMenu( Mobile from, Mobile m, ItemListEntry[] entries )
+ virtual void OnResponse( NetState state, int index )
+ + diff --git a/Docs/types/EquipUpdate.html b/Docs/types/EquipUpdate.html new file mode 100644 index 0000000..048e2d6 --- /dev/null +++ b/Docs/types/EquipUpdate.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - EquipUpdate + + +

Back to Server.Network

+

EquipUpdate : Packet

+ (ctor) EquipUpdate( Item item )
+ + diff --git a/Docs/types/EquipedSkillMod.html b/Docs/types/EquipedSkillMod.html new file mode 100644 index 0000000..02cd815 --- /dev/null +++ b/Docs/types/EquipedSkillMod.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EquipedSkillMod + + +

Back to Server

+

EquipedSkillMod : SkillMod

+ (ctor) EquipedSkillMod( SkillName skill, bool relative, double value, Item item, Mobile mobile )
+ virtual bool CheckCondition()
+ + diff --git a/Docs/types/EquipmentInfo.html b/Docs/types/EquipmentInfo.html new file mode 100644 index 0000000..2cf6f0b --- /dev/null +++ b/Docs/types/EquipmentInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EquipmentInfo + + +

Back to Server.Network

+

EquipmentInfo

+ (ctor) EquipmentInfo( int number, Mobile crafter, bool unidentified, EquipInfoAttribute[] attributes )
+ EquipInfoAttribute[] Attributes( get; )
+ Mobile Crafter( get; )
+ int Number( get; )
+ bool Unidentified( get; )
+ + diff --git a/Docs/types/ErrorGump.html b/Docs/types/ErrorGump.html new file mode 100644 index 0000000..b681d71 --- /dev/null +++ b/Docs/types/ErrorGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ErrorGump + + +

Back to Server.Items

+

(SoulStone) - ErrorGump : Gump

+ (ctor) ErrorGump( SoulStone stone, int title, int message )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/EscortDestinationInfo.html b/Docs/types/EscortDestinationInfo.html new file mode 100644 index 0000000..8832cdf --- /dev/null +++ b/Docs/types/EscortDestinationInfo.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EscortDestinationInfo + + +

Back to Server.Mobiles

+

EscortDestinationInfo

+ (static) EscortDestinationInfo Find( string name )
+ (static) void LoadTable()
+ (ctor) EscortDestinationInfo( string name, Region region )
+ string Name( get; )
+ Region Region( get; )
+ bool Contains( Point3D p )
+ + diff --git a/Docs/types/EscortableMage.html b/Docs/types/EscortableMage.html new file mode 100644 index 0000000..4af1e4c --- /dev/null +++ b/Docs/types/EscortableMage.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - EscortableMage + + +

Back to Server.Mobiles

+

EscortableMage : BaseEscortable, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) int GetRandomHue()
+ (ctor) EscortableMage()
+ (ctor) EscortableMage( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EssenceOfBattle.html b/Docs/types/EssenceOfBattle.html new file mode 100644 index 0000000..0435a59 --- /dev/null +++ b/Docs/types/EssenceOfBattle.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EssenceOfBattle + + +

Back to Server.Items

+

EssenceOfBattle : GoldRing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) EssenceOfBattle()
+ (ctor) EssenceOfBattle( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EssenceOfWindInfo.html b/Docs/types/EssenceOfWindInfo.html new file mode 100644 index 0000000..f22e1f0 --- /dev/null +++ b/Docs/types/EssenceOfWindInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EssenceOfWindInfo + + +

Back to Server.Spells.Spellweaving

+

(EssenceOfWindSpell) - EssenceOfWindInfo

+ (ctor) EssenceOfWindInfo( Mobile defender, int fcMalus, int ssiMalus, TimeSpan duration )
+ Mobile Defender( get; )
+ int FCMalus( get; )
+ int SSIMalus( get; )
+ ExpireTimer Timer( get; )
+ + diff --git a/Docs/types/EssenceOfWindScroll.html b/Docs/types/EssenceOfWindScroll.html new file mode 100644 index 0000000..7883d19 --- /dev/null +++ b/Docs/types/EssenceOfWindScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EssenceOfWindScroll + + +

Back to Server.Items

+

EssenceOfWindScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) EssenceOfWindScroll()
+ (ctor) EssenceOfWindScroll( int amount )
+ (ctor) EssenceOfWindScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EssenceOfWindSpell.html b/Docs/types/EssenceOfWindSpell.html new file mode 100644 index 0000000..6ccb81c --- /dev/null +++ b/Docs/types/EssenceOfWindSpell.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - EssenceOfWindSpell + + +

Back to Server.Spells.Spellweaving

+

EssenceOfWindSpell : ArcanistSpell, ISpell

+

Nested Types: EssenceOfWindInfo, ExpireTimer

+ (static) int GetFCMalus( Mobile m )
+ (static) int GetSSIMalus( Mobile m )
+ (static) bool IsDebuffed( Mobile m )
+ (static) void StopDebuffing( Mobile m, bool message )
+ (ctor) EssenceOfWindSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/EtherealBeetle.html b/Docs/types/EtherealBeetle.html new file mode 100644 index 0000000..e61a25c --- /dev/null +++ b/Docs/types/EtherealBeetle.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealBeetle + + +

Back to Server.Mobiles

+

EtherealBeetle : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealBeetle()
+ (ctor) EtherealBeetle( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealCuSidhe.html b/Docs/types/EtherealCuSidhe.html new file mode 100644 index 0000000..755517b --- /dev/null +++ b/Docs/types/EtherealCuSidhe.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealCuSidhe + + +

Back to Server.Mobiles

+

EtherealCuSidhe : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealCuSidhe()
+ (ctor) EtherealCuSidhe( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealHiryu.html b/Docs/types/EtherealHiryu.html new file mode 100644 index 0000000..6171aa9 --- /dev/null +++ b/Docs/types/EtherealHiryu.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealHiryu + + +

Back to Server.Mobiles

+

EtherealHiryu : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealHiryu()
+ (ctor) EtherealHiryu( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealHorse.html b/Docs/types/EtherealHorse.html new file mode 100644 index 0000000..2035c68 --- /dev/null +++ b/Docs/types/EtherealHorse.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealHorse + + +

Back to Server.Mobiles

+

EtherealHorse : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealHorse()
+ (ctor) EtherealHorse( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealKirin.html b/Docs/types/EtherealKirin.html new file mode 100644 index 0000000..ab5525a --- /dev/null +++ b/Docs/types/EtherealKirin.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealKirin + + +

Back to Server.Mobiles

+

EtherealKirin : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealKirin()
+ (ctor) EtherealKirin( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealLlama.html b/Docs/types/EtherealLlama.html new file mode 100644 index 0000000..c93bfe1 --- /dev/null +++ b/Docs/types/EtherealLlama.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealLlama + + +

Back to Server.Mobiles

+

EtherealLlama : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealLlama()
+ (ctor) EtherealLlama( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealMount.html b/Docs/types/EtherealMount.html new file mode 100644 index 0000000..485e847 --- /dev/null +++ b/Docs/types/EtherealMount.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - EtherealMount + + +

Back to Server.Mobiles

+

EtherealMount : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+

Derived Types: ChargerOfTheFallen, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, RideablePolarBear

+

Nested Types: EtherealSpell

+ (static) void Dismount( Mobile m )
+ (static) void StopMounting( Mobile mob )
+ (ctor) EtherealMount( Serial serial )
+ (ctor) EtherealMount( int itemID, int mountID )
+ double DefaultWeight( get; )
+ bool DisplayLootType( get; )
+ int EtherealHue( get; )
+ int FollowerSlots( get; )
+ bool IsDonationItem( get; set; )
+ bool IsRewardItem( get; set; )
+ IMount Mount( get; )
+ int MountedID( get; set; )
+ int RegularID( get; set; )
+ Mobile Rider( get; set; )
+ void AddFollowers()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ void MountMe()
+ virtual void OnDoubleClick( Mobile from )
+ virtual DeathMoveResult OnParentDeath( Mobile parent )
+ virtual void OnRiderDamaged( int amount, Mobile from, bool willKill )
+ void RemoveFollowers()
+ virtual void Serialize( GenericWriter writer )
+ void UnmountMe()
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/EtherealOstard.html b/Docs/types/EtherealOstard.html new file mode 100644 index 0000000..1d2ff98 --- /dev/null +++ b/Docs/types/EtherealOstard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealOstard + + +

Back to Server.Mobiles

+

EtherealOstard : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealOstard()
+ (ctor) EtherealOstard( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealReptalon.html b/Docs/types/EtherealReptalon.html new file mode 100644 index 0000000..a03a855 --- /dev/null +++ b/Docs/types/EtherealReptalon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealReptalon + + +

Back to Server.Mobiles

+

EtherealReptalon : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealReptalon()
+ (ctor) EtherealReptalon( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealRidgeback.html b/Docs/types/EtherealRidgeback.html new file mode 100644 index 0000000..115f0c0 --- /dev/null +++ b/Docs/types/EtherealRidgeback.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealRidgeback + + +

Back to Server.Mobiles

+

EtherealRidgeback : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealRidgeback()
+ (ctor) EtherealRidgeback( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealSpell.html b/Docs/types/EtherealSpell.html new file mode 100644 index 0000000..9bc31bc --- /dev/null +++ b/Docs/types/EtherealSpell.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - EtherealSpell + + +

Back to Server.Mobiles

+

(EtherealMount) - EtherealSpell : Spell, ISpell

+ (ctor) EtherealSpell( EtherealMount mount, Mobile rider )
+ TimeSpan CastDelayBase( get; )
+ double CastDelayFastScalar( get; )
+ bool ClearHandsOnCast( get; )
+ bool RevealOnCast( get; )
+ virtual bool CheckDisturb( DisturbType type, bool checkFirst, bool resistable )
+ virtual bool CheckFizzle()
+ virtual bool ConsumeReagents()
+ virtual void DoFizzle()
+ virtual void DoHurtFizzle()
+ virtual TimeSpan GetCastRecovery()
+ virtual int GetMana()
+ virtual void OnCast()
+ virtual void OnDisturb( DisturbType type, bool message )
+ void Stop()
+ + diff --git a/Docs/types/EtherealSwampDragon.html b/Docs/types/EtherealSwampDragon.html new file mode 100644 index 0000000..ac62d77 --- /dev/null +++ b/Docs/types/EtherealSwampDragon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealSwampDragon + + +

Back to Server.Mobiles

+

EtherealSwampDragon : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealSwampDragon()
+ (ctor) EtherealSwampDragon( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealUnicorn.html b/Docs/types/EtherealUnicorn.html new file mode 100644 index 0000000..2d50ac6 --- /dev/null +++ b/Docs/types/EtherealUnicorn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealUnicorn + + +

Back to Server.Mobiles

+

EtherealUnicorn : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) EtherealUnicorn()
+ (ctor) EtherealUnicorn( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealVoyageScroll.html b/Docs/types/EtherealVoyageScroll.html new file mode 100644 index 0000000..0a0960c --- /dev/null +++ b/Docs/types/EtherealVoyageScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EtherealVoyageScroll + + +

Back to Server.Items

+

EtherealVoyageScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) EtherealVoyageScroll()
+ (ctor) EtherealVoyageScroll( int amount )
+ (ctor) EtherealVoyageScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EtherealVoyageSpell.html b/Docs/types/EtherealVoyageSpell.html new file mode 100644 index 0000000..71e1087 --- /dev/null +++ b/Docs/types/EtherealVoyageSpell.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - EtherealVoyageSpell + + +

Back to Server.Spells.Spellweaving

+

EtherealVoyageSpell : ArcaneForm, ISpell, ITransformationSpell

+

Nested Types: (Anonymous-Type)--c__DisplayClass3

+ (static) void b__0( AggressiveActionEventArgs e )
+ (static) void Initialize()
+ (ctor) EtherealVoyageSpell( Mobile caster, Item scroll )
+ int Body( get; )
+ TimeSpan CastDelayBase( get; )
+ int Hue( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual void DoEffect( Mobile m )
+ virtual void RemoveEffect( Mobile m )
+ + diff --git a/Docs/types/EtherealWarrior.html b/Docs/types/EtherealWarrior.html new file mode 100644 index 0000000..49237a4 --- /dev/null +++ b/Docs/types/EtherealWarrior.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - EtherealWarrior + + +

Back to Server.Mobiles

+

EtherealWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EtherealWarrior()
+ (ctor) EtherealWarrior( Serial serial )
+ int Feathers( get; )
+ bool InitialInnocent( get; )
+ OppositionGroup OppositionGroup( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void OnMovement( Mobile from, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ethic.html b/Docs/types/Ethic.html new file mode 100644 index 0000000..434acf8 --- /dev/null +++ b/Docs/types/Ethic.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Ethic + + +

Back to Server.Ethics

+

Ethic

+

Derived Types: EvilEthic, HeroEthic

+ (static) bool CheckEquip( Mobile from, Item item )
+ (static) bool CheckTrade( Mobile from, Mobile to, Mobile newOwner, Item item )
+ (static) void EventSink_Speech( SpeechEventArgs e )
+ (static) Ethic Find( Mobile mob )
+ (static) Ethic Find( Item item )
+ (static) Ethic Find( Mobile mob, bool inherit )
+ (static) Ethic Find( Mobile mob, bool inherit, bool allegiance )
+ (static) void Initialize()
+ (static) bool IsImbued( Item item )
+ (static) bool IsImbued( Item item, bool recurse )
+ (ctor) Ethic()
+ EthicDefinition Definition( get; )
+ PlayerCollection Players( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool IsEligible( Mobile mob )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EthicDefinition.html b/Docs/types/EthicDefinition.html new file mode 100644 index 0000000..e6c7a5a --- /dev/null +++ b/Docs/types/EthicDefinition.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EthicDefinition + + +

Back to Server.Ethics

+

EthicDefinition

+ (ctor) EthicDefinition( int primaryHue, TextDefinition title, TextDefinition adjunct, TextDefinition joinPhrase, Power[] powers )
+ TextDefinition Adjunct( get; )
+ TextDefinition JoinPhrase( get; )
+ Power[] Powers( get; )
+ int PrimaryHue( get; )
+ TextDefinition Title( get; )
+ + diff --git a/Docs/types/EthicalHedonism.html b/Docs/types/EthicalHedonism.html new file mode 100644 index 0000000..aa006e4 --- /dev/null +++ b/Docs/types/EthicalHedonism.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EthicalHedonism + + +

Back to Server.Items

+

EthicalHedonism : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) EthicalHedonism()
+ (ctor) EthicalHedonism( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EthicsPersistance.html b/Docs/types/EthicsPersistance.html new file mode 100644 index 0000000..f15975c --- /dev/null +++ b/Docs/types/EthicsPersistance.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - EthicsPersistance + + +

Back to Server.Ethics

+

EthicsPersistance : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) EthicsPersistance Instance( get; )
+ (ctor) EthicsPersistance()
+ (ctor) EthicsPersistance( Serial serial )
+ string DefaultName( get; )
+ virtual void Delete()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ettin.html b/Docs/types/Ettin.html new file mode 100644 index 0000000..723ac18 --- /dev/null +++ b/Docs/types/Ettin.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Ettin + + +

Back to Server.Mobiles

+

Ettin : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Ettin()
+ (ctor) Ettin( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EvalInt.html b/Docs/types/EvalInt.html new file mode 100644 index 0000000..008698c --- /dev/null +++ b/Docs/types/EvalInt.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - EvalInt + + +

Back to Server.SkillHandlers

+

EvalInt

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) EvalInt()
+ + diff --git a/Docs/types/Evasion.html b/Docs/types/Evasion.html new file mode 100644 index 0000000..b46ce3b --- /dev/null +++ b/Docs/types/Evasion.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - Evasion + + +

Back to Server.Spells.Bushido

+

Evasion : SamuraiSpell, ISpell

+

Nested Types: InternalTimer

+ (static) void BeginEvasion( Mobile m )
+ (static) bool CheckSpellEvasion( Mobile defender )
+ (static) void EndEvasion( Mobile m )
+ (static) TimeSpan GetEvadeDuration( Mobile m )
+ (static) double GetParryScalar( Mobile m )
+ (static) bool IsEvading( Mobile m )
+ (static) bool VerifyCast( Mobile Caster, bool messages )
+ (ctor) Evasion( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ void b__0()
+ virtual bool CheckCast()
+ virtual void OnBeginCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/EventLog.html b/Docs/types/EventLog.html new file mode 100644 index 0000000..2ab4c18 --- /dev/null +++ b/Docs/types/EventLog.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EventLog + + +

Back to Server

+

EventLog

+ (static) void Error( int eventID, string text )
+ (static) void Error( int eventID, string format, object[] args )
+ (static) void Inform( int eventID, string text )
+ (static) void Inform( int eventID, string format, object[] args )
+ (static) void Warning( int eventID, string text )
+ (static) void Warning( int eventID, string format, object[] args )
+ + diff --git a/Docs/types/EventSink.html b/Docs/types/EventSink.html new file mode 100644 index 0000000..87d3051 --- /dev/null +++ b/Docs/types/EventSink.html @@ -0,0 +1,52 @@ + + + RunUO Documentation - Class Overview - EventSink + + +

Back to Server

+

EventSink

+ (static) void InvokeAccountLogin( AccountLoginEventArgs e )
+ (static) void InvokeAggressiveAction( AggressiveActionEventArgs e )
+ (static) void InvokeAnimateRequest( AnimateRequestEventArgs e )
+ (static) void InvokeCastSpellRequest( CastSpellRequestEventArgs e )
+ (static) void InvokeChangeProfileRequest( ChangeProfileRequestEventArgs e )
+ (static) void InvokeCharacterCreated( CharacterCreatedEventArgs e )
+ (static) void InvokeChatRequest( ChatRequestEventArgs e )
+ (static) void InvokeClientVersionReceived( ClientVersionReceivedArgs e )
+ (static) void InvokeCommand( CommandEventArgs e )
+ (static) void InvokeConnected( ConnectedEventArgs e )
+ (static) void InvokeCrashed( CrashedEventArgs e )
+ (static) BaseGuild InvokeCreateGuild( CreateGuildEventArgs e )
+ (static) void InvokeDeleteRequest( DeleteRequestEventArgs e )
+ (static) void InvokeDisarmRequest( DisarmRequestEventArgs e )
+ (static) void InvokeDisconnected( DisconnectedEventArgs e )
+ (static) void InvokeFastWalk( FastWalkEventArgs e )
+ (static) void InvokeGameLogin( GameLoginEventArgs e )
+ (static) void InvokeGuildGumpRequest( GuildGumpRequestArgs e )
+ (static) void InvokeHelpRequest( HelpRequestEventArgs e )
+ (static) void InvokeHungerChanged( HungerChangedEventArgs e )
+ (static) void InvokeLogin( LoginEventArgs e )
+ (static) void InvokeLogout( LogoutEventArgs e )
+ (static) void InvokeMovement( MovementEventArgs e )
+ (static) void InvokeOpenDoorMacroUsed( OpenDoorMacroEventArgs e )
+ (static) void InvokeOpenSpellbookRequest( OpenSpellbookRequestEventArgs e )
+ (static) void InvokePaperdollRequest( PaperdollRequestEventArgs e )
+ (static) void InvokePlayerDeath( PlayerDeathEventArgs e )
+ (static) void InvokeProfileRequest( ProfileRequestEventArgs e )
+ (static) void InvokeQuestGumpRequest( QuestGumpRequestArgs e )
+ (static) void InvokeRenameRequest( RenameRequestEventArgs e )
+ (static) void InvokeServerList( ServerListEventArgs e )
+ (static) void InvokeServerStarted()
+ (static) void InvokeSetAbility( SetAbilityEventArgs e )
+ (static) void InvokeShutdown( ShutdownEventArgs e )
+ (static) void InvokeSocketConnect( SocketConnectEventArgs e )
+ (static) void InvokeSpeech( SpeechEventArgs e )
+ (static) void InvokeStunRequest( StunRequestEventArgs e )
+ (static) void InvokeVirtueGumpRequest( VirtueGumpRequestEventArgs e )
+ (static) void InvokeVirtueItemRequest( VirtueItemRequestEventArgs e )
+ (static) void InvokeVirtueMacroRequest( VirtueMacroRequestEventArgs e )
+ (static) void InvokeWorldLoad()
+ (static) void InvokeWorldSave( WorldSaveEventArgs e )
+ (static) void Reset()
+ + diff --git a/Docs/types/EventTextWriter.html b/Docs/types/EventTextWriter.html new file mode 100644 index 0000000..6d28e0e --- /dev/null +++ b/Docs/types/EventTextWriter.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EventTextWriter + + +

Back to Server.RemoteAdmin

+

EventTextWriter : TextWriter, IDisposable

+

Nested Types: OnConsoleChar, OnConsoleLine, OnConsoleStr

+ (ctor) EventTextWriter( OnConsoleChar onChar, OnConsoleLine onLine, OnConsoleStr onStr )
+ Encoding Encoding( get; )
+ virtual void Write( string str )
+ virtual void Write( char ch )
+ virtual void WriteLine( string line )
+ + diff --git a/Docs/types/EvilEthic.html b/Docs/types/EvilEthic.html new file mode 100644 index 0000000..992f84a --- /dev/null +++ b/Docs/types/EvilEthic.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - EvilEthic + + +

Back to Server.Ethics.Evil

+

EvilEthic : Ethic

+ (ctor) EvilEthic()
+ virtual bool IsEligible( Mobile mob )
+ + diff --git a/Docs/types/EvilHealer.html b/Docs/types/EvilHealer.html new file mode 100644 index 0000000..e77c9eb --- /dev/null +++ b/Docs/types/EvilHealer.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - EvilHealer + + +

Back to Server.Mobiles

+

EvilHealer : BaseHealer, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) EvilHealer()
+ (ctor) EvilHealer( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool CanTeach( get; )
+ bool IsActiveVendor( get; )
+ virtual bool CheckResurrect( Mobile m )
+ virtual bool CheckTeach( SkillName skill, Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EvilIdolSkull.html b/Docs/types/EvilIdolSkull.html new file mode 100644 index 0000000..72ed180 --- /dev/null +++ b/Docs/types/EvilIdolSkull.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EvilIdolSkull + + +

Back to Server.Items

+

EvilIdolSkull : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EvilIdolSkull()
+ (ctor) EvilIdolSkull( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EvilMage.html b/Docs/types/EvilMage.html new file mode 100644 index 0000000..feda897 --- /dev/null +++ b/Docs/types/EvilMage.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - EvilMage + + +

Back to Server.Mobiles

+

EvilMage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EvilMage()
+ (ctor) EvilMage( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EvilMageLord.html b/Docs/types/EvilMageLord.html new file mode 100644 index 0000000..c4bc556 --- /dev/null +++ b/Docs/types/EvilMageLord.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - EvilMageLord + + +

Back to Server.Mobiles

+

EvilMageLord : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) EvilMageLord()
+ (ctor) EvilMageLord( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EvilOmenScroll.html b/Docs/types/EvilOmenScroll.html new file mode 100644 index 0000000..c5b2949 --- /dev/null +++ b/Docs/types/EvilOmenScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - EvilOmenScroll + + +

Back to Server.Items

+

EvilOmenScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) EvilOmenScroll()
+ (ctor) EvilOmenScroll( int amount )
+ (ctor) EvilOmenScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/EvilOmenSpell.html b/Docs/types/EvilOmenSpell.html new file mode 100644 index 0000000..62c634b --- /dev/null +++ b/Docs/types/EvilOmenSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - EvilOmenSpell + + +

Back to Server.Spells.Necromancy

+

EvilOmenSpell : NecromancerSpell, ISpell

+

Nested Types: InternalTarget

+ (static) void EffectExpire_Callback( object state )
+ (static) bool TryEndEffect( Mobile m )
+ (ctor) EvilOmenSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/EvilWanderingHealer.html b/Docs/types/EvilWanderingHealer.html new file mode 100644 index 0000000..d0c8978 --- /dev/null +++ b/Docs/types/EvilWanderingHealer.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - EvilWanderingHealer + + +

Back to Server.Mobiles

+

EvilWanderingHealer : BaseHealer, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) EvilWanderingHealer()
+ (ctor) EvilWanderingHealer( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual bool CheckResurrect( Mobile m )
+ virtual bool CheckTeach( SkillName skill, Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Executioner.html b/Docs/types/Executioner.html new file mode 100644 index 0000000..9e812b2 --- /dev/null +++ b/Docs/types/Executioner.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Executioner + + +

Back to Server.Mobiles

+

Executioner : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Executioner()
+ (ctor) Executioner( Serial serial )
+ bool AlwaysMurderer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ExecutionersAxe.html b/Docs/types/ExecutionersAxe.html new file mode 100644 index 0000000..d070f83 --- /dev/null +++ b/Docs/types/ExecutionersAxe.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - ExecutionersAxe + + +

Back to Server.Items

+

ExecutionersAxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: ZyronicClaw

+ (ctor) ExecutionersAxe()
+ (ctor) ExecutionersAxe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ExecutionersCap.html b/Docs/types/ExecutionersCap.html new file mode 100644 index 0000000..dce2e02 --- /dev/null +++ b/Docs/types/ExecutionersCap.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ExecutionersCap + + +

Back to Server.Items

+

ExecutionersCap : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ExecutionersCap()
+ (ctor) ExecutionersCap( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Exiler.html b/Docs/types/Exiler.html new file mode 100644 index 0000000..513b9bb --- /dev/null +++ b/Docs/types/Exiler.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Exiler + + +

Back to Server.Items

+

Exiler : Tetsubo, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Exiler()
+ (ctor) Exiler( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ExodusMinion.html b/Docs/types/ExodusMinion.html new file mode 100644 index 0000000..3e72465 --- /dev/null +++ b/Docs/types/ExodusMinion.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - ExodusMinion + + +

Back to Server.Mobiles

+

ExodusMinion : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ExodusMinion()
+ (ctor) ExodusMinion( Serial serial )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ bool CanUseField( get; )
+ bool FieldActive( get; )
+ bool IsScaredOfScaryThings( get; )
+ bool IsScaryToPets( get; )
+ Poison PoisonImmune( get; )
+ virtual void AlterMeleeDamageFrom( Mobile from, ref int damage )
+ virtual void AlterSpellDamageFrom( Mobile from, ref int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool Move( Direction d )
+ virtual void OnDamagedBySpell( Mobile from )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void OnThink()
+ void SendEBolt( Mobile to )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ExodusOverseer.html b/Docs/types/ExodusOverseer.html new file mode 100644 index 0000000..773402d --- /dev/null +++ b/Docs/types/ExodusOverseer.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - ExodusOverseer + + +

Back to Server.Mobiles

+

ExodusOverseer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ExodusOverseer()
+ (ctor) ExodusOverseer( Serial serial )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ bool CanUseField( get; )
+ bool FieldActive( get; )
+ bool IsScaredOfScaryThings( get; )
+ bool IsScaryToPets( get; )
+ Poison PoisonImmune( get; )
+ virtual void AlterMeleeDamageFrom( Mobile from, ref int damage )
+ virtual void AlterSpellDamageFrom( Mobile caster, ref int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool Move( Direction d )
+ virtual void OnDamagedBySpell( Mobile from )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void OnThink()
+ void SendEBolt( Mobile to )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ExorcismScroll.html b/Docs/types/ExorcismScroll.html new file mode 100644 index 0000000..42cc789 --- /dev/null +++ b/Docs/types/ExorcismScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ExorcismScroll + + +

Back to Server.Items

+

ExorcismScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ExorcismScroll()
+ (ctor) ExorcismScroll( int amount )
+ (ctor) ExorcismScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ExorcismSpell.html b/Docs/types/ExorcismSpell.html new file mode 100644 index 0000000..1ca6867 --- /dev/null +++ b/Docs/types/ExorcismSpell.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ExorcismSpell + + +

Back to Server.Spells.Necromancy

+

ExorcismSpell : NecromancerSpell, ISpell

+ (static) Point3D GetNearestShrine( Mobile m )
+ (ctor) ExorcismSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ bool DelayedDamage( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual int ComputeKarmaAward()
+ bool IsValidTarget( Mobile m )
+ virtual void OnCast()
+ + diff --git a/Docs/types/ExpandFlag.html b/Docs/types/ExpandFlag.html new file mode 100644 index 0000000..cb631d3 --- /dev/null +++ b/Docs/types/ExpandFlag.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ExpandFlag + + +

Back to Server

+

ExpandFlag (Enum)

+ None = 0x00000000,
+ Name = 0x00000001,
+ Items = 0x00000002,
+ Bounce = 0x00000004,
+ Holder = 0x00000008,
+ Blessed = 0x00000010,
+ TempFlag = 0x00000020,
+ SaveFlag = 0x00000040,
+ Weight = 0x00000080
+ + diff --git a/Docs/types/Expansion.html b/Docs/types/Expansion.html new file mode 100644 index 0000000..55f605b --- /dev/null +++ b/Docs/types/Expansion.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Expansion + + +

Back to Server

+

Expansion (Enum)

+ None = 0,
+ T2A = 1,
+ UOR = 2,
+ UOTD = 3,
+ LBR = 4,
+ AOS = 5,
+ SE = 6,
+ ML = 7,
+ SA = 8
+ + diff --git a/Docs/types/ExpansionInfo.html b/Docs/types/ExpansionInfo.html new file mode 100644 index 0000000..e6be796 --- /dev/null +++ b/Docs/types/ExpansionInfo.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - ExpansionInfo + + +

Back to Server

+

ExpansionInfo

+ (static) ExpansionInfo CurrentExpansion( get; )
+ (static) ExpansionInfo[] Table( get; )
+ (static) ExpansionInfo GetInfo( Expansion ex )
+ (static) ExpansionInfo GetInfo( int ex )
+ (ctor) ExpansionInfo( int id, string name, ClientFlags clientFlags, FeatureFlags supportedFeatures, CharacterListFlags charListFlags, int customHousingFlag )
+ (ctor) ExpansionInfo( int id, string name, ClientVersion requiredClient, FeatureFlags supportedFeatures, CharacterListFlags charListFlags, int customHousingFlag )
+ CharacterListFlags CharacterListFlags( get; )
+ ClientFlags ClientFlags( get; )
+ int CustomHousingFlag( get; )
+ int ID( get; )
+ string Name( get; )
+ ClientVersion RequiredClient( get; )
+ FeatureFlags SupportedFeatures( get; )
+ virtual string ToString()
+ + diff --git a/Docs/types/ExpireAggressorsTimer.html b/Docs/types/ExpireAggressorsTimer.html new file mode 100644 index 0000000..f7da222 --- /dev/null +++ b/Docs/types/ExpireAggressorsTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ExpireAggressorsTimer + + +

Back to Server

+

(Mobile) - ExpireAggressorsTimer : Timer

+ (ctor) ExpireAggressorsTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ExpireCombatantTimer.html b/Docs/types/ExpireCombatantTimer.html new file mode 100644 index 0000000..c7b0bb0 --- /dev/null +++ b/Docs/types/ExpireCombatantTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ExpireCombatantTimer + + +

Back to Server

+

(Mobile) - ExpireCombatantTimer : Timer

+ (ctor) ExpireCombatantTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ExpireCriminalTimer.html b/Docs/types/ExpireCriminalTimer.html new file mode 100644 index 0000000..5273543 --- /dev/null +++ b/Docs/types/ExpireCriminalTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ExpireCriminalTimer + + +

Back to Server

+

(Mobile) - ExpireCriminalTimer : Timer

+ (ctor) ExpireCriminalTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ExpirePolymorphTimer.html b/Docs/types/ExpirePolymorphTimer.html new file mode 100644 index 0000000..9dd4ddf --- /dev/null +++ b/Docs/types/ExpirePolymorphTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ExpirePolymorphTimer + + +

Back to Server.Mobiles

+

(Barracoon) - ExpirePolymorphTimer : Timer

+ (ctor) ExpirePolymorphTimer( Mobile owner )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ExpireTimer.html b/Docs/types/ExpireTimer.html new file mode 100644 index 0000000..0682ccb --- /dev/null +++ b/Docs/types/ExpireTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ExpireTimer + + +

Back to Server.Spells.Spellweaving

+

(EssenceOfWindSpell) - ExpireTimer : Timer

+ (ctor) ExpireTimer( Mobile m, TimeSpan delay )
+ void DoExpire( bool message )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ExplosionPotion.html b/Docs/types/ExplosionPotion.html new file mode 100644 index 0000000..1a28dba --- /dev/null +++ b/Docs/types/ExplosionPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ExplosionPotion + + +

Back to Server.Items

+

ExplosionPotion : BaseExplosionPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) ExplosionPotion()
+ (ctor) ExplosionPotion( Serial serial )
+ int MaxDamage( get; )
+ int MinDamage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ExplosionScroll.html b/Docs/types/ExplosionScroll.html new file mode 100644 index 0000000..30b40bf --- /dev/null +++ b/Docs/types/ExplosionScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ExplosionScroll + + +

Back to Server.Items

+

ExplosionScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ExplosionScroll()
+ (ctor) ExplosionScroll( int amount )
+ (ctor) ExplosionScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ExplosionSpell.html b/Docs/types/ExplosionSpell.html new file mode 100644 index 0000000..ab10e55 --- /dev/null +++ b/Docs/types/ExplosionSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ExplosionSpell + + +

Back to Server.Spells.Sixth

+

ExplosionSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget, InternalTimer

+ (ctor) ExplosionSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ bool DelayedDamageStacking( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/ExplosionTrapCraft.html b/Docs/types/ExplosionTrapCraft.html new file mode 100644 index 0000000..e8d424f --- /dev/null +++ b/Docs/types/ExplosionTrapCraft.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ExplosionTrapCraft + + +

Back to Server.Engines.Craft

+

ExplosionTrapCraft : TrapCraft

+ (ctor) ExplosionTrapCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality )
+ TrapType TrapType( get; )
+ + diff --git a/Docs/types/ExportCommand.html b/Docs/types/ExportCommand.html new file mode 100644 index 0000000..e8eadf9 --- /dev/null +++ b/Docs/types/ExportCommand.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ExportCommand + + +

Back to Server.Commands

+

ExportCommand

+ (static) void Export_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) ExportCommand()
+ + diff --git a/Docs/types/ExtensionConstructor.html b/Docs/types/ExtensionConstructor.html new file mode 100644 index 0000000..30cbc2e --- /dev/null +++ b/Docs/types/ExtensionConstructor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ExtensionConstructor + + +

Back to Server.Commands.Generic

+

ExtensionConstructor : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ExtensionConstructor( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual BaseExtension EndInvoke( IAsyncResult result )
+ virtual BaseExtension Invoke()
+ + diff --git a/Docs/types/ExtensionInfo.html b/Docs/types/ExtensionInfo.html new file mode 100644 index 0000000..80b2daf --- /dev/null +++ b/Docs/types/ExtensionInfo.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ExtensionInfo + + +

Back to Server.Commands.Generic

+

ExtensionInfo

+ (static) Dictionary<String,ExtensionInfo> Table( get; )
+ (static) void Register( ExtensionInfo ext )
+ (ctor) ExtensionInfo( int order, string name, int size, ExtensionConstructor constructor )
+ ExtensionConstructor Constructor( get; )
+ bool IsFixedSize( get; )
+ string Name( get; )
+ int Order( get; )
+ int Size( get; )
+ + diff --git a/Docs/types/Extensions.html b/Docs/types/Extensions.html new file mode 100644 index 0000000..a1c654b --- /dev/null +++ b/Docs/types/Extensions.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Extensions + + +

Back to Server.Commands.Generic

+

Extensions : List`1, IList<BaseExtension>, ICollection<BaseExtension>, IEnumerable<BaseExtension>, IEnumerable, IList, ICollection

+ (static) int b__0( BaseExtension a, BaseExtension b )
+ (static) Extensions Parse( Mobile from, ref string[] args )
+ (ctor) Extensions()
+ void Filter( ArrayList list )
+ bool IsValid( object obj )
+ + diff --git a/Docs/types/EyeOfTheTravesty.html b/Docs/types/EyeOfTheTravesty.html new file mode 100644 index 0000000..32f4e57 --- /dev/null +++ b/Docs/types/EyeOfTheTravesty.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - EyeOfTheTravesty + + +

Back to Server.Items

+

EyeOfTheTravesty : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) EyeOfTheTravesty()
+ (ctor) EyeOfTheTravesty( int amount )
+ (ctor) EyeOfTheTravesty( Serial serial )
+ (ctor) EyeOfTheTravesty( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FKEntry.html b/Docs/types/FKEntry.html new file mode 100644 index 0000000..6d91de8 --- /dev/null +++ b/Docs/types/FKEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - FKEntry + + +

Back to Server.Mobiles

+

(BaseCreature) - FKEntry

+ (ctor) FKEntry( Mobile m, int damage )
+ + diff --git a/Docs/types/FabledFishingNet.html b/Docs/types/FabledFishingNet.html new file mode 100644 index 0000000..f1a7134 --- /dev/null +++ b/Docs/types/FabledFishingNet.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FabledFishingNet + + +

Back to Server.Items

+

FabledFishingNet : SpecialFishingNet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FabledFishingNet()
+ (ctor) FabledFishingNet( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void FinishEffect( Point3D p, Map map, Mobile from )
+ virtual int GetSpawnCount()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FacialHairEquipUpdate.html b/Docs/types/FacialHairEquipUpdate.html new file mode 100644 index 0000000..6be8b94 --- /dev/null +++ b/Docs/types/FacialHairEquipUpdate.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - FacialHairEquipUpdate + + +

Back to Server

+

FacialHairEquipUpdate : Packet

+ (ctor) FacialHairEquipUpdate( Mobile parent )
+ + diff --git a/Docs/types/FacialHairInfo.html b/Docs/types/FacialHairInfo.html new file mode 100644 index 0000000..5aec666 --- /dev/null +++ b/Docs/types/FacialHairInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FacialHairInfo + + +

Back to Server

+

FacialHairInfo : BaseHairInfo

+ (static) int FakeSerial( Mobile parent )
+ (ctor) FacialHairInfo( GenericReader reader )
+ (ctor) FacialHairInfo( int itemid )
+ (ctor) FacialHairInfo( int itemid, int hue )
+ + diff --git a/Docs/types/FacingGump.html b/Docs/types/FacingGump.html new file mode 100644 index 0000000..42cd5d1 --- /dev/null +++ b/Docs/types/FacingGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FacingGump + + +

Back to Server.Items

+

(InternalTarget) - FacingGump : Gump

+

Nested Types: Buttons

+ (ctor) FacingGump( BannerDeed banner, int itemID, Point3D location, BaseHouse house )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/Faction.html b/Docs/types/Faction.html new file mode 100644 index 0000000..806831f --- /dev/null +++ b/Docs/types/Faction.html @@ -0,0 +1,78 @@ + + + RunUO Documentation - Class Overview - Faction + + +

Back to Server.Factions

+

Faction : IComparable

+

Derived Types: CouncilOfMages, Minax, Shadowlords, TrueBritannians

+

Nested Types: BroadcastPrompt, SkillLossContext

+ (static) List<Faction> Factions( get; )
+ (static) void ApplySkillLoss( Mobile mob )
+ (static) bool CheckLeaveTimer( Mobile mob )
+ (static) bool ClearSkillLoss( Mobile mob )
+ (static) void ClearSkillLoss_Callback( object state )
+ (static) void DistributePoints( int distrib )
+ (static) void EventSink_Login( LoginEventArgs e )
+ (static) void EventSink_Logout( LogoutEventArgs e )
+ (static) void FactionCommander_OnCommand( CommandEventArgs e )
+ (static) void FactionCommander_OnTarget( Mobile from, object obj )
+ (static) void FactionElection_OnCommand( CommandEventArgs e )
+ (static) void FactionElection_OnTarget( Mobile from, object obj )
+ (static) void FactionItemReset_OnCommand( CommandEventArgs e )
+ (static) void FactionKick_OnCommand( CommandEventArgs e )
+ (static) void FactionKick_OnTarget( Mobile from, object obj )
+ (static) void FactionReset_OnCommand( CommandEventArgs e )
+ (static) void FactionTownReset_OnCommand( CommandEventArgs e )
+ (static) Faction Find( Mobile mob )
+ (static) Faction Find( Mobile mob, bool inherit )
+ (static) Faction Find( Mobile mob, bool inherit, bool creatureAllegiances )
+ (static) Faction FindSmallestFaction()
+ (static) void HandleAtrophy()
+ (static) void HandleDeath( Mobile mob )
+ (static) void HandleDeath( Mobile victim, Mobile killer )
+ (static) void Initialize()
+ (static) bool InSkillLoss( Mobile mob )
+ (static) bool IsFactionBanned( Mobile mob )
+ (static) bool IsNearType( Mobile mob, Type type, int range )
+ (static) bool IsNearType( Mobile mob, Type[] types, int range )
+ (static) Faction Parse( string name )
+ (static) void ProcessTick()
+ (static) Faction ReadReference( GenericReader reader )
+ (static) bool StabilityActive()
+ (static) void WriteReference( GenericWriter writer, Faction fact )
+ (ctor) Faction()
+ Mobile Commander( get; set; )
+ FactionDefinition Definition( get; set; )
+ Election Election( get; set; )
+ bool FactionMessageReady( get; )
+ int MaximumTraps( get; )
+ List<PlayerState> Members( get; set; )
+ int Silver( get; set; )
+ FactionState State( get; set; )
+ StrongholdRegion StrongholdRegion( get; set; )
+ int Tithe( get; set; )
+ List<BaseFactionTrap> Traps( get; set; )
+ virtual void AddMember( Mobile mob )
+ bool AlreadyHasCharInFaction( Mobile mob )
+ int AwardSilver( Mobile mob, int silver )
+ void BeginBroadcast( Mobile from )
+ void BeginHonorLeadership( Mobile from )
+ void Broadcast( string text )
+ void Broadcast( int number )
+ void Broadcast( string format, object[] args )
+ void Broadcast( int hue, string text )
+ void Broadcast( int hue, string format, object[] args )
+ bool CanHandleInflux( int influx )
+ virtual int CompareTo( object obj )
+ void EndBroadcast( Mobile from, string text )
+ void HonorLeadership_OnTarget( Mobile from, object obj )
+ bool IsCommander( Mobile mob )
+ void JoinAlone( Mobile mob )
+ void JoinGuilded( PlayerMobile mob, Guild guild )
+ void OnJoinAccepted( Mobile mob )
+ void RemoveMember( Mobile mob )
+ void RemovePlayerState( PlayerState pl )
+ virtual string ToString()
+ + diff --git a/Docs/types/FactionBerserker.html b/Docs/types/FactionBerserker.html new file mode 100644 index 0000000..447d4c2 --- /dev/null +++ b/Docs/types/FactionBerserker.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionBerserker + + +

Back to Server.Factions

+

FactionBerserker : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionBerserker()
+ (ctor) FactionBerserker( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionBoardVendor.html b/Docs/types/FactionBoardVendor.html new file mode 100644 index 0000000..1523dfe --- /dev/null +++ b/Docs/types/FactionBoardVendor.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FactionBoardVendor + + +

Back to Server.Factions

+

FactionBoardVendor : BaseFactionVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) FactionBoardVendor( Serial serial )
+ (ctor) FactionBoardVendor( Town town, Faction faction )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionBottleVendor.html b/Docs/types/FactionBottleVendor.html new file mode 100644 index 0000000..e7cbaa8 --- /dev/null +++ b/Docs/types/FactionBottleVendor.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FactionBottleVendor + + +

Back to Server.Factions

+

FactionBottleVendor : BaseFactionVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) FactionBottleVendor( Serial serial )
+ (ctor) FactionBottleVendor( Town town, Faction faction )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionDeathKnight.html b/Docs/types/FactionDeathKnight.html new file mode 100644 index 0000000..b7cb9d7 --- /dev/null +++ b/Docs/types/FactionDeathKnight.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionDeathKnight + + +

Back to Server.Factions

+

FactionDeathKnight : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionDeathKnight()
+ (ctor) FactionDeathKnight( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionDefinition.html b/Docs/types/FactionDefinition.html new file mode 100644 index 0000000..2ae0b27 --- /dev/null +++ b/Docs/types/FactionDefinition.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - FactionDefinition + + +

Back to Server.Factions

+

FactionDefinition

+ (ctor) FactionDefinition( int sort, int huePrimary, int hueSecondary, int hueJoin, int hueBroadcast, int warHorseBody, int warHorseItem, string friendlyName, string keyword, string abbreviation, TextDefinition name, TextDefinition propName, TextDefinition header, TextDefinition about, TextDefinition cityControl, TextDefinition sigilControl, TextDefinition signupName, TextDefinition factionStoneName, TextDefinition ownerLabel, TextDefinition guardIgnore, TextDefinition guardWarn, TextDefinition guardAttack, StrongholdDefinition stronghold, RankDefinition[] ranks, GuardDefinition[] guards )
+ string Abbreviation( get; )
+ TextDefinition About( get; )
+ TextDefinition CityControl( get; )
+ TextDefinition FactionStoneName( get; )
+ string FriendlyName( get; )
+ TextDefinition GuardAttack( get; )
+ TextDefinition GuardIgnore( get; )
+ GuardDefinition[] Guards( get; )
+ TextDefinition GuardWarn( get; )
+ TextDefinition Header( get; )
+ int HueBroadcast( get; )
+ int HueJoin( get; )
+ int HuePrimary( get; )
+ int HueSecondary( get; )
+ string Keyword( get; )
+ TextDefinition Name( get; )
+ TextDefinition OwnerLabel( get; )
+ TextDefinition PropName( get; )
+ RankDefinition[] Ranks( get; )
+ TextDefinition SigilControl( get; )
+ TextDefinition SignupName( get; )
+ int Sort( get; )
+ StrongholdDefinition Stronghold( get; )
+ int WarHorseBody( get; )
+ int WarHorseItem( get; )
+ + diff --git a/Docs/types/FactionDragoon.html b/Docs/types/FactionDragoon.html new file mode 100644 index 0000000..784e141 --- /dev/null +++ b/Docs/types/FactionDragoon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionDragoon + + +

Back to Server.Factions

+

FactionDragoon : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionDragoon()
+ (ctor) FactionDragoon( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionExplosionTrap.html b/Docs/types/FactionExplosionTrap.html new file mode 100644 index 0000000..ed0c55a --- /dev/null +++ b/Docs/types/FactionExplosionTrap.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - FactionExplosionTrap + + +

Back to Server.Factions

+

FactionExplosionTrap : BaseFactionTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FactionExplosionTrap()
+ (ctor) FactionExplosionTrap( Serial serial )
+ (ctor) FactionExplosionTrap( Faction f )
+ (ctor) FactionExplosionTrap( Faction f, Mobile m )
+ AllowedPlacing AllowedPlacing( get; )
+ int AttackMessage( get; )
+ int DisarmMessage( get; )
+ int EffectSound( get; )
+ int LabelNumber( get; )
+ int MessageHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoAttackEffect( Mobile m )
+ virtual void DoVisibleEffect()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionExplosionTrapDeed.html b/Docs/types/FactionExplosionTrapDeed.html new file mode 100644 index 0000000..b47825b --- /dev/null +++ b/Docs/types/FactionExplosionTrapDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FactionExplosionTrapDeed + + +

Back to Server.Factions

+

FactionExplosionTrapDeed : BaseFactionTrapDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) FactionExplosionTrapDeed()
+ (ctor) FactionExplosionTrapDeed( Serial serial )
+ int LabelNumber( get; )
+ Type TrapType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionGasTrap.html b/Docs/types/FactionGasTrap.html new file mode 100644 index 0000000..2a2e2e5 --- /dev/null +++ b/Docs/types/FactionGasTrap.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - FactionGasTrap + + +

Back to Server.Factions

+

FactionGasTrap : BaseFactionTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FactionGasTrap()
+ (ctor) FactionGasTrap( Serial serial )
+ (ctor) FactionGasTrap( Faction f )
+ (ctor) FactionGasTrap( Faction f, Mobile m )
+ AllowedPlacing AllowedPlacing( get; )
+ int AttackMessage( get; )
+ int DisarmMessage( get; )
+ int EffectSound( get; )
+ int LabelNumber( get; )
+ int MessageHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoAttackEffect( Mobile m )
+ virtual void DoVisibleEffect()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionGasTrapDeed.html b/Docs/types/FactionGasTrapDeed.html new file mode 100644 index 0000000..7a41507 --- /dev/null +++ b/Docs/types/FactionGasTrapDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FactionGasTrapDeed + + +

Back to Server.Factions

+

FactionGasTrapDeed : BaseFactionTrapDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) FactionGasTrapDeed()
+ (ctor) FactionGasTrapDeed( Serial serial )
+ int LabelNumber( get; )
+ Type TrapType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionGuardAI.html b/Docs/types/FactionGuardAI.html new file mode 100644 index 0000000..71b0ce9 --- /dev/null +++ b/Docs/types/FactionGuardAI.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - FactionGuardAI + + +

Back to Server.Factions

+

FactionGuardAI : BaseAI

+ (ctor) FactionGuardAI( BaseFactionGuard guard )
+ bool IsDamaged( get; )
+ bool IsPoisoned( get; )
+ TimeSpan TimeUntilBandage( get; )
+ bool CanDispel( Mobile m )
+ bool DequipWeapon()
+ bool EquipWeapon()
+ Mobile FindDispelTarget( bool activeOnly )
+ int GetStatMod( Mobile mob, StatType type )
+ bool IsAllowed( GuardAI flag )
+ void OnFailedMove()
+ Spell RandomOffenseSpell()
+ void Run( Direction d )
+ void RunFrom( Mobile m )
+ void RunTo( Mobile m )
+ bool StartBandage()
+ virtual bool Think()
+ bool UseItemByType( Type type )
+ + diff --git a/Docs/types/FactionGump.html b/Docs/types/FactionGump.html new file mode 100644 index 0000000..36ca105 --- /dev/null +++ b/Docs/types/FactionGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FactionGump + + +

Back to Server.Factions

+

FactionGump : Gump

+

Derived Types: ElectionGump, FactionImbueGump, FactionStoneGump, FinanceGump, HorseBreederGump, JoinStoneGump, LeaveFactionGump, SheriffGump, TownStoneGump, VoteGump

+ (static) bool Exists( Mobile mob )
+ (ctor) FactionGump( int x, int y )
+ int ButtonTypes( get; )
+ void AddHtmlText( int x, int y, int width, int height, TextDefinition text, bool back, bool scroll )
+ bool FromButtonID( int buttonID, out int type, out int index )
+ int ToButtonID( int type, int index )
+ + diff --git a/Docs/types/FactionHenchman.html b/Docs/types/FactionHenchman.html new file mode 100644 index 0000000..c7f6fbd --- /dev/null +++ b/Docs/types/FactionHenchman.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionHenchman + + +

Back to Server.Factions

+

FactionHenchman : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionHenchman()
+ (ctor) FactionHenchman( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionHorseVendor.html b/Docs/types/FactionHorseVendor.html new file mode 100644 index 0000000..753f020 --- /dev/null +++ b/Docs/types/FactionHorseVendor.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - FactionHorseVendor + + +

Back to Server.Factions

+

FactionHorseVendor : BaseFactionVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) FactionHorseVendor( Serial serial )
+ (ctor) FactionHorseVendor( Town town, Faction faction )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetShoeHue()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual bool OnBuyItems( Mobile buyer, List<BuyItemResponse> list )
+ virtual bool OnSellItems( Mobile seller, List<SellItemResponse> list )
+ virtual void Serialize( GenericWriter writer )
+ virtual void VendorBuy( Mobile from )
+ virtual void VendorSell( Mobile from )
+ + diff --git a/Docs/types/FactionImbueGump.html b/Docs/types/FactionImbueGump.html new file mode 100644 index 0000000..b148cfb --- /dev/null +++ b/Docs/types/FactionImbueGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FactionImbueGump + + +

Back to Server.Factions

+

FactionImbueGump : FactionGump

+ (ctor) FactionImbueGump( int quality, Item item, Mobile from, CraftSystem craftSystem, BaseTool tool, object notice, int availableSilver, Faction faction, FactionItemDefinition def )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/FactionItem.html b/Docs/types/FactionItem.html new file mode 100644 index 0000000..be2cc46 --- /dev/null +++ b/Docs/types/FactionItem.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - FactionItem + + +

Back to Server.Factions

+

FactionItem

+ (static) FactionItem Find( Item item )
+ (static) int GetMaxWearables( Mobile mob )
+ (static) Item Imbue( Item item, Faction faction, bool expire, int hue )
+ (ctor) FactionItem( Item item, Faction faction )
+ (ctor) FactionItem( GenericReader reader, Faction faction )
+ DateTime Expiration( get; )
+ Faction Faction( get; )
+ bool HasExpired( get; )
+ Item Item( get; )
+ void Attach()
+ void CheckAttach()
+ void Detach()
+ void Serialize( GenericWriter writer )
+ void StartExpiration()
+ + diff --git a/Docs/types/FactionItemDefinition.html b/Docs/types/FactionItemDefinition.html new file mode 100644 index 0000000..a871389 --- /dev/null +++ b/Docs/types/FactionItemDefinition.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FactionItemDefinition + + +

Back to Server.Factions

+

FactionItemDefinition

+ (static) FactionItemDefinition Identify( Item item )
+ (ctor) FactionItemDefinition( int silverCost, Type vendorType )
+ int SilverCost( get; )
+ Type VendorType( get; )
+ + diff --git a/Docs/types/FactionKickCommand.html b/Docs/types/FactionKickCommand.html new file mode 100644 index 0000000..08abb4b --- /dev/null +++ b/Docs/types/FactionKickCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FactionKickCommand + + +

Back to Server.Factions

+

FactionKickCommand : BaseCommand

+ (ctor) FactionKickCommand( FactionKickType kickType )
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/FactionKickType.html b/Docs/types/FactionKickType.html new file mode 100644 index 0000000..2cb5bc8 --- /dev/null +++ b/Docs/types/FactionKickType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FactionKickType + + +

Back to Server.Factions

+

FactionKickType (Enum)

+ Kick = 0,
+ Ban = 1,
+ Unban = 2
+ + diff --git a/Docs/types/FactionKnight.html b/Docs/types/FactionKnight.html new file mode 100644 index 0000000..8673994 --- /dev/null +++ b/Docs/types/FactionKnight.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionKnight + + +

Back to Server.Factions

+

FactionKnight : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionKnight()
+ (ctor) FactionKnight( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionMercenary.html b/Docs/types/FactionMercenary.html new file mode 100644 index 0000000..6fbb92f --- /dev/null +++ b/Docs/types/FactionMercenary.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionMercenary + + +

Back to Server.Factions

+

FactionMercenary : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionMercenary()
+ (ctor) FactionMercenary( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionNecromancer.html b/Docs/types/FactionNecromancer.html new file mode 100644 index 0000000..db41ccc --- /dev/null +++ b/Docs/types/FactionNecromancer.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionNecromancer + + +

Back to Server.Factions

+

FactionNecromancer : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionNecromancer()
+ (ctor) FactionNecromancer( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionOreVendor.html b/Docs/types/FactionOreVendor.html new file mode 100644 index 0000000..4a1f780 --- /dev/null +++ b/Docs/types/FactionOreVendor.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FactionOreVendor + + +

Back to Server.Factions

+

FactionOreVendor : BaseFactionVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) FactionOreVendor( Serial serial )
+ (ctor) FactionOreVendor( Town town, Faction faction )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionPaladin.html b/Docs/types/FactionPaladin.html new file mode 100644 index 0000000..f67586c --- /dev/null +++ b/Docs/types/FactionPaladin.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionPaladin + + +

Back to Server.Factions

+

FactionPaladin : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionPaladin()
+ (ctor) FactionPaladin( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionPersistance.html b/Docs/types/FactionPersistance.html new file mode 100644 index 0000000..8ad97cb --- /dev/null +++ b/Docs/types/FactionPersistance.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FactionPersistance + + +

Back to Server.Factions

+

FactionPersistance : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: PersistedType

+ (static) FactionPersistance Instance( get; )
+ (ctor) FactionPersistance()
+ (ctor) FactionPersistance( Serial serial )
+ string DefaultName( get; )
+ virtual void Delete()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionReagentVendor.html b/Docs/types/FactionReagentVendor.html new file mode 100644 index 0000000..9d39189 --- /dev/null +++ b/Docs/types/FactionReagentVendor.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FactionReagentVendor + + +

Back to Server.Factions

+

FactionReagentVendor : BaseFactionVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) FactionReagentVendor( Serial serial )
+ (ctor) FactionReagentVendor( Town town, Faction faction )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionSawTrap.html b/Docs/types/FactionSawTrap.html new file mode 100644 index 0000000..1c42023 --- /dev/null +++ b/Docs/types/FactionSawTrap.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - FactionSawTrap + + +

Back to Server.Factions

+

FactionSawTrap : BaseFactionTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FactionSawTrap()
+ (ctor) FactionSawTrap( Faction f )
+ (ctor) FactionSawTrap( Serial serial )
+ (ctor) FactionSawTrap( Faction f, Mobile m )
+ AllowedPlacing AllowedPlacing( get; )
+ int AttackMessage( get; )
+ int DisarmMessage( get; )
+ int EffectSound( get; )
+ int LabelNumber( get; )
+ int MessageHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoAttackEffect( Mobile m )
+ virtual void DoVisibleEffect()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionSawTrapDeed.html b/Docs/types/FactionSawTrapDeed.html new file mode 100644 index 0000000..5bc9b47 --- /dev/null +++ b/Docs/types/FactionSawTrapDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FactionSawTrapDeed + + +

Back to Server.Factions

+

FactionSawTrapDeed : BaseFactionTrapDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) FactionSawTrapDeed()
+ (ctor) FactionSawTrapDeed( Serial serial )
+ int LabelNumber( get; )
+ Type TrapType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionSorceress.html b/Docs/types/FactionSorceress.html new file mode 100644 index 0000000..6fdc900 --- /dev/null +++ b/Docs/types/FactionSorceress.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionSorceress + + +

Back to Server.Factions

+

FactionSorceress : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionSorceress()
+ (ctor) FactionSorceress( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionSpikeTrap.html b/Docs/types/FactionSpikeTrap.html new file mode 100644 index 0000000..4c555d7 --- /dev/null +++ b/Docs/types/FactionSpikeTrap.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - FactionSpikeTrap + + +

Back to Server.Factions

+

FactionSpikeTrap : BaseFactionTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FactionSpikeTrap()
+ (ctor) FactionSpikeTrap( Serial serial )
+ (ctor) FactionSpikeTrap( Faction f )
+ (ctor) FactionSpikeTrap( Faction f, Mobile m )
+ AllowedPlacing AllowedPlacing( get; )
+ int AttackMessage( get; )
+ int DisarmMessage( get; )
+ int EffectSound( get; )
+ int LabelNumber( get; )
+ int MessageHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoAttackEffect( Mobile m )
+ virtual void DoVisibleEffect()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionSpikeTrapDeed.html b/Docs/types/FactionSpikeTrapDeed.html new file mode 100644 index 0000000..75b62eb --- /dev/null +++ b/Docs/types/FactionSpikeTrapDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FactionSpikeTrapDeed + + +

Back to Server.Factions

+

FactionSpikeTrapDeed : BaseFactionTrapDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) FactionSpikeTrapDeed()
+ (ctor) FactionSpikeTrapDeed( Serial serial )
+ int LabelNumber( get; )
+ Type TrapType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionState.html b/Docs/types/FactionState.html new file mode 100644 index 0000000..a875a81 --- /dev/null +++ b/Docs/types/FactionState.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - FactionState + + +

Back to Server.Factions

+

FactionState

+ (ctor) FactionState( GenericReader reader )
+ (ctor) FactionState( Faction faction )
+ Mobile Commander( get; set; )
+ Election Election( get; set; )
+ List<FactionItem> FactionItems( get; set; )
+ bool FactionMessageReady( get; )
+ bool IsAtrophyReady( get; )
+ DateTime LastAtrophy( get; set; )
+ List<PlayerState> Members( get; set; )
+ int Silver( get; set; )
+ int Tithe( get; set; )
+ List<BaseFactionTrap> Traps( get; set; )
+ int CheckAtrophy()
+ void RegisterBroadcast()
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionStone.html b/Docs/types/FactionStone.html new file mode 100644 index 0000000..8ebc086 --- /dev/null +++ b/Docs/types/FactionStone.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FactionStone + + +

Back to Server.Factions

+

FactionStone : BaseSystemController, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FactionStone()
+ (ctor) FactionStone( Faction faction )
+ (ctor) FactionStone( Serial serial )
+ string DefaultName( get; )
+ Faction Faction( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionStoneGump.html b/Docs/types/FactionStoneGump.html new file mode 100644 index 0000000..c79a9d9 --- /dev/null +++ b/Docs/types/FactionStoneGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FactionStoneGump + + +

Back to Server.Factions

+

FactionStoneGump : FactionGump

+ (ctor) FactionStoneGump( PlayerMobile from, Faction faction )
+ int ButtonTypes( get; )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/FactionTrapRemovalKit.html b/Docs/types/FactionTrapRemovalKit.html new file mode 100644 index 0000000..9f8fdeb --- /dev/null +++ b/Docs/types/FactionTrapRemovalKit.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FactionTrapRemovalKit + + +

Back to Server.Factions

+

FactionTrapRemovalKit : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FactionTrapRemovalKit()
+ (ctor) FactionTrapRemovalKit( Serial serial )
+ int Charges( get; set; )
+ int LabelNumber( get; )
+ void ConsumeCharge( Mobile consumer )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionWarHorse.html b/Docs/types/FactionWarHorse.html new file mode 100644 index 0000000..60f3d4c --- /dev/null +++ b/Docs/types/FactionWarHorse.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FactionWarHorse + + +

Back to Server.Factions

+

FactionWarHorse : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) FactionWarHorse()
+ (ctor) FactionWarHorse( Faction faction )
+ (ctor) FactionWarHorse( Serial serial )
+ Faction Faction( get; set; )
+ FoodType FavoriteFood( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FactionWizard.html b/Docs/types/FactionWizard.html new file mode 100644 index 0000000..1128fae --- /dev/null +++ b/Docs/types/FactionWizard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FactionWizard + + +

Back to Server.Factions

+

FactionWizard : BaseFactionGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FactionWizard()
+ (ctor) FactionWizard( Serial serial )
+ GuardAI GuardAI( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FameEntry.html b/Docs/types/FameEntry.html new file mode 100644 index 0000000..f93d23e --- /dev/null +++ b/Docs/types/FameEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - FameEntry + + +

Back to Server.Misc

+

FameEntry

+ (ctor) FameEntry( int fame, KarmaEntry[] karma )
+ + diff --git a/Docs/types/FanDancer.html b/Docs/types/FanDancer.html new file mode 100644 index 0000000..77995dd --- /dev/null +++ b/Docs/types/FanDancer.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - FanDancer + + +

Back to Server.Mobiles

+

FanDancer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: ExpireTimer

+ (ctor) FanDancer()
+ (ctor) FanDancer( Serial serial )
+ bool Uncalmable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ bool IsFanned( Mobile m )
+ virtual void OnDamagedBySpell( Mobile attacker )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FanNorthArtifact.html b/Docs/types/FanNorthArtifact.html new file mode 100644 index 0000000..968af30 --- /dev/null +++ b/Docs/types/FanNorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FanNorthArtifact + + +

Back to Server.Items

+

FanNorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FanNorthArtifact()
+ (ctor) FanNorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FanWestArtifact.html b/Docs/types/FanWestArtifact.html new file mode 100644 index 0000000..2ce6312 --- /dev/null +++ b/Docs/types/FanWestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FanWestArtifact + + +

Back to Server.Items

+

FanWestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FanWestArtifact()
+ (ctor) FanWestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyArmoire.html b/Docs/types/FancyArmoire.html new file mode 100644 index 0000000..ed75704 --- /dev/null +++ b/Docs/types/FancyArmoire.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FancyArmoire + + +

Back to Server.Items

+

FancyArmoire : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FancyArmoire()
+ (ctor) FancyArmoire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayTo( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyDrawer.html b/Docs/types/FancyDrawer.html new file mode 100644 index 0000000..8933ed1 --- /dev/null +++ b/Docs/types/FancyDrawer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FancyDrawer + + +

Back to Server.Items

+

FancyDrawer : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FancyDrawer()
+ (ctor) FancyDrawer( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyDress.html b/Docs/types/FancyDress.html new file mode 100644 index 0000000..8b1af48 --- /dev/null +++ b/Docs/types/FancyDress.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FancyDress + + +

Back to Server.Items

+

FancyDress : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FancyDress()
+ (ctor) FancyDress( int hue )
+ (ctor) FancyDress( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyElvenTableEastAddon.html b/Docs/types/FancyElvenTableEastAddon.html new file mode 100644 index 0000000..badb24b --- /dev/null +++ b/Docs/types/FancyElvenTableEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FancyElvenTableEastAddon + + +

Back to Server.Items

+

FancyElvenTableEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) FancyElvenTableEastAddon()
+ (ctor) FancyElvenTableEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyElvenTableEastDeed.html b/Docs/types/FancyElvenTableEastDeed.html new file mode 100644 index 0000000..acc3533 --- /dev/null +++ b/Docs/types/FancyElvenTableEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FancyElvenTableEastDeed + + +

Back to Server.Items

+

FancyElvenTableEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FancyElvenTableEastDeed()
+ (ctor) FancyElvenTableEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyElvenTableSouthAddon.html b/Docs/types/FancyElvenTableSouthAddon.html new file mode 100644 index 0000000..31e014d --- /dev/null +++ b/Docs/types/FancyElvenTableSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FancyElvenTableSouthAddon + + +

Back to Server.Items

+

FancyElvenTableSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) FancyElvenTableSouthAddon()
+ (ctor) FancyElvenTableSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyElvenTableSouthDeed.html b/Docs/types/FancyElvenTableSouthDeed.html new file mode 100644 index 0000000..a087c21 --- /dev/null +++ b/Docs/types/FancyElvenTableSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FancyElvenTableSouthDeed + + +

Back to Server.Items

+

FancyElvenTableSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FancyElvenTableSouthDeed()
+ (ctor) FancyElvenTableSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyShirt.html b/Docs/types/FancyShirt.html new file mode 100644 index 0000000..801ad11 --- /dev/null +++ b/Docs/types/FancyShirt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FancyShirt + + +

Back to Server.Items

+

FancyShirt : BaseShirt, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FancyShirt()
+ (ctor) FancyShirt( int hue )
+ (ctor) FancyShirt( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyWindChimes.html b/Docs/types/FancyWindChimes.html new file mode 100644 index 0000000..4dab3bf --- /dev/null +++ b/Docs/types/FancyWindChimes.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FancyWindChimes + + +

Back to Server.Items

+

FancyWindChimes : BaseWindChimes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FancyWindChimes()
+ (ctor) FancyWindChimes( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FancyWoodenChairCushion.html b/Docs/types/FancyWoodenChairCushion.html new file mode 100644 index 0000000..e076114 --- /dev/null +++ b/Docs/types/FancyWoodenChairCushion.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FancyWoodenChairCushion + + +

Back to Server.Items

+

FancyWoodenChairCushion : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FancyWoodenChairCushion()
+ (ctor) FancyWoodenChairCushion( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FangOfRactus.html b/Docs/types/FangOfRactus.html new file mode 100644 index 0000000..7f83ecb --- /dev/null +++ b/Docs/types/FangOfRactus.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FangOfRactus + + +

Back to Server.Items

+

FangOfRactus : Kryss, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) FangOfRactus()
+ (ctor) FangOfRactus( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmableCabbage.html b/Docs/types/FarmableCabbage.html new file mode 100644 index 0000000..5c7e1a6 --- /dev/null +++ b/Docs/types/FarmableCabbage.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmableCabbage + + +

Back to Server.Items

+

FarmableCabbage : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmableCabbage()
+ (ctor) FarmableCabbage( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmableCarrot.html b/Docs/types/FarmableCarrot.html new file mode 100644 index 0000000..134d15f --- /dev/null +++ b/Docs/types/FarmableCarrot.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmableCarrot + + +

Back to Server.Items

+

FarmableCarrot : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmableCarrot()
+ (ctor) FarmableCarrot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmableCotton.html b/Docs/types/FarmableCotton.html new file mode 100644 index 0000000..d26d59c --- /dev/null +++ b/Docs/types/FarmableCotton.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmableCotton + + +

Back to Server.Items

+

FarmableCotton : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmableCotton()
+ (ctor) FarmableCotton( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmableCrop.html b/Docs/types/FarmableCrop.html new file mode 100644 index 0000000..977b944 --- /dev/null +++ b/Docs/types/FarmableCrop.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - FarmableCrop + + +

Back to Server.Items

+

FarmableCrop : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: FarmableCabbage, FarmableCarrot, FarmableCotton, FarmableFlax, FarmableLettuce, FarmableOnion, FarmablePumpkin, FarmableTurnip, FarmableWheat

+ (ctor) FarmableCrop( int itemID )
+ (ctor) FarmableCrop( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnPicked( Mobile from, Point3D loc, Map map )
+ virtual void Serialize( GenericWriter writer )
+ void Unlink()
+ + diff --git a/Docs/types/FarmableFlax.html b/Docs/types/FarmableFlax.html new file mode 100644 index 0000000..2bc7c8a --- /dev/null +++ b/Docs/types/FarmableFlax.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmableFlax + + +

Back to Server.Items

+

FarmableFlax : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmableFlax()
+ (ctor) FarmableFlax( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmableLettuce.html b/Docs/types/FarmableLettuce.html new file mode 100644 index 0000000..2d9a1e9 --- /dev/null +++ b/Docs/types/FarmableLettuce.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmableLettuce + + +

Back to Server.Items

+

FarmableLettuce : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmableLettuce()
+ (ctor) FarmableLettuce( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmableOnion.html b/Docs/types/FarmableOnion.html new file mode 100644 index 0000000..1394d72 --- /dev/null +++ b/Docs/types/FarmableOnion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmableOnion + + +

Back to Server.Items

+

FarmableOnion : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmableOnion()
+ (ctor) FarmableOnion( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmablePumpkin.html b/Docs/types/FarmablePumpkin.html new file mode 100644 index 0000000..cd8becd --- /dev/null +++ b/Docs/types/FarmablePumpkin.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmablePumpkin + + +

Back to Server.Items

+

FarmablePumpkin : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmablePumpkin()
+ (ctor) FarmablePumpkin( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmableTurnip.html b/Docs/types/FarmableTurnip.html new file mode 100644 index 0000000..87065c0 --- /dev/null +++ b/Docs/types/FarmableTurnip.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmableTurnip + + +

Back to Server.Items

+

FarmableTurnip : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmableTurnip()
+ (ctor) FarmableTurnip( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FarmableWheat.html b/Docs/types/FarmableWheat.html new file mode 100644 index 0000000..39f07fa --- /dev/null +++ b/Docs/types/FarmableWheat.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FarmableWheat + + +

Back to Server.Items

+

FarmableWheat : FarmableCrop, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetCropID()
+ (ctor) FarmableWheat()
+ (ctor) FarmableWheat( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual Item GetCropObject()
+ virtual int GetPickedID()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Farmer.html b/Docs/types/Farmer.html new file mode 100644 index 0000000..69b9c46 --- /dev/null +++ b/Docs/types/Farmer.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Farmer + + +

Back to Server.Mobiles

+

Farmer : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Farmer()
+ (ctor) Farmer( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetShoeHue()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FastAStarAlgorithm.html b/Docs/types/FastAStarAlgorithm.html new file mode 100644 index 0000000..1864206 --- /dev/null +++ b/Docs/types/FastAStarAlgorithm.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - FastAStarAlgorithm + + +

Back to Server.PathAlgorithms.FastAStar

+

FastAStarAlgorithm : PathAlgorithm

+ (ctor) FastAStarAlgorithm()
+ void AddToChain( int node )
+ virtual bool CheckCondition( Mobile m, Map map, Point3D start, Point3D goal )
+ virtual Direction[] Find( Mobile m, Map map, Point3D start, Point3D goal )
+ int FindBest( int node )
+ int GetIndex( int x, int y, int z )
+ int GetSuccessors( int p, Mobile m, Map map )
+ int Heuristic( int x, int y, int z )
+ void RemoveFromChain( int node )
+ + diff --git a/Docs/types/FastWalkEventArgs.html b/Docs/types/FastWalkEventArgs.html new file mode 100644 index 0000000..b28aaa6 --- /dev/null +++ b/Docs/types/FastWalkEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FastWalkEventArgs + + +

Back to Server

+

FastWalkEventArgs

+ (ctor) FastWalkEventArgs( NetState state )
+ bool Blocked( get; set; )
+ NetState NetState( get; )
+ + diff --git a/Docs/types/FastWalkEventHandler.html b/Docs/types/FastWalkEventHandler.html new file mode 100644 index 0000000..a8ca8ed --- /dev/null +++ b/Docs/types/FastWalkEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FastWalkEventHandler + + +

Back to Server

+

FastWalkEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) FastWalkEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( FastWalkEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( FastWalkEventArgs e )
+ + diff --git a/Docs/types/Fastwalk.html b/Docs/types/Fastwalk.html new file mode 100644 index 0000000..453a917 --- /dev/null +++ b/Docs/types/Fastwalk.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Fastwalk + + +

Back to Server.Misc

+

Fastwalk

+ (static) void Initialize()
+ (static) void OnFastWalk( FastWalkEventArgs e )
+ (ctor) Fastwalk()
+ + diff --git a/Docs/types/Feather.html b/Docs/types/Feather.html new file mode 100644 index 0000000..bc87f1f --- /dev/null +++ b/Docs/types/Feather.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Feather + + +

Back to Server.Items

+

Feather : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Feather()
+ (ctor) Feather( int amount )
+ (ctor) Feather( Serial serial )
+ double DefaultWeight( get; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FeatheredHat.html b/Docs/types/FeatheredHat.html new file mode 100644 index 0000000..95f7d56 --- /dev/null +++ b/Docs/types/FeatheredHat.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - FeatheredHat + + +

Back to Server.Items

+

FeatheredHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) FeatheredHat()
+ (ctor) FeatheredHat( Serial serial )
+ (ctor) FeatheredHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FeatureFlags.html b/Docs/types/FeatureFlags.html new file mode 100644 index 0000000..be431c8 --- /dev/null +++ b/Docs/types/FeatureFlags.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - FeatureFlags + + +

Back to Server

+

FeatureFlags (Enum)

+ ExpansionNone = 0x00000000,
+ None = 0x00000000,
+ T2A = 0x00000001,
+ ExpansionT2A = 0x00000001,
+ UOR = 0x00000002,
+ ExpansionUOR = 0x00000003,
+ UOTD = 0x00000004,
+ ExpansionUOTD = 0x00000007,
+ LBR = 0x00000008,
+ ExpansionLBR = 0x0000000F,
+ AOS = 0x00000010,
+ SixthCharacterSlot = 0x00000020,
+ SE = 0x00000040,
+ ML = 0x00000080,
+ Unk1 = 0x00000100,
+ Unk2 = 0x00000200,
+ Unk3 = 0x00000400,
+ Unk4 = 0x00000800,
+ SeventhCharacterSlot = 0x00001000,
+ Unk5 = 0x00002000,
+ Unk6 = 0x00004000,
+ Unk7 = 0x00008000,
+ ExpansionAOS = 0x0000801F,
+ ExpansionSE = 0x0000805F,
+ ExpansionML = 0x000082DF,
+ SA = 0x00010000,
+ ExpansionSA = 0x000182DF
+ + diff --git a/Docs/types/FeebleWand.html b/Docs/types/FeebleWand.html new file mode 100644 index 0000000..cd7bca2 --- /dev/null +++ b/Docs/types/FeebleWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FeebleWand + + +

Back to Server.Items

+

FeebleWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) FeebleWand()
+ (ctor) FeebleWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FeeblemindScroll.html b/Docs/types/FeeblemindScroll.html new file mode 100644 index 0000000..0f1077f --- /dev/null +++ b/Docs/types/FeeblemindScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FeeblemindScroll + + +

Back to Server.Items

+

FeeblemindScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) FeeblemindScroll()
+ (ctor) FeeblemindScroll( int amount )
+ (ctor) FeeblemindScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FeeblemindSpell.html b/Docs/types/FeeblemindSpell.html new file mode 100644 index 0000000..468fc77 --- /dev/null +++ b/Docs/types/FeeblemindSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FeeblemindSpell + + +

Back to Server.Spells.First

+

FeeblemindSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) FeeblemindSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/Feint.html b/Docs/types/Feint.html new file mode 100644 index 0000000..553254d --- /dev/null +++ b/Docs/types/Feint.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Feint + + +

Back to Server.Items

+

Feint : WeaponAbility

+

Nested Types: FeintTimer

+ (static) Hashtable Registry( get; )
+ (ctor) Feint()
+ int BaseMana( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/FeintTimer.html b/Docs/types/FeintTimer.html new file mode 100644 index 0000000..fa6cfac --- /dev/null +++ b/Docs/types/FeintTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FeintTimer + + +

Back to Server.Items

+

(Feint) - FeintTimer : Timer

+ (ctor) FeintTimer( Mobile defender, int swingSpeedReduction )
+ int SwingSpeedReduction( get; )
+ virtual void OnTick()
+ + diff --git a/Docs/types/FemaleElvenPlateChest.html b/Docs/types/FemaleElvenPlateChest.html new file mode 100644 index 0000000..146d227 --- /dev/null +++ b/Docs/types/FemaleElvenPlateChest.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - FemaleElvenPlateChest + + +

Back to Server.Items

+

FemaleElvenPlateChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FemaleElvenPlateChest()
+ (ctor) FemaleElvenPlateChest( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FemaleElvenRobe.html b/Docs/types/FemaleElvenRobe.html new file mode 100644 index 0000000..ae4c1ce --- /dev/null +++ b/Docs/types/FemaleElvenRobe.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FemaleElvenRobe + + +

Back to Server.Items

+

FemaleElvenRobe : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FemaleElvenRobe()
+ (ctor) FemaleElvenRobe( int hue )
+ (ctor) FemaleElvenRobe( Serial serial )
+ bool AllowMaleWearer( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FemaleKimono.html b/Docs/types/FemaleKimono.html new file mode 100644 index 0000000..38b0af6 --- /dev/null +++ b/Docs/types/FemaleKimono.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FemaleKimono + + +

Back to Server.Items

+

FemaleKimono : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FemaleKimono()
+ (ctor) FemaleKimono( int hue )
+ (ctor) FemaleKimono( Serial serial )
+ bool AllowMaleWearer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FemaleLeafChest.html b/Docs/types/FemaleLeafChest.html new file mode 100644 index 0000000..a8a9a80 --- /dev/null +++ b/Docs/types/FemaleLeafChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - FemaleLeafChest + + +

Back to Server.Items

+

FemaleLeafChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FemaleLeafChest()
+ (ctor) FemaleLeafChest( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FemaleLeatherChest.html b/Docs/types/FemaleLeatherChest.html new file mode 100644 index 0000000..83af992 --- /dev/null +++ b/Docs/types/FemaleLeatherChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - FemaleLeatherChest + + +

Back to Server.Items

+

FemaleLeatherChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FemaleLeatherChest()
+ (ctor) FemaleLeatherChest( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FemalePlateChest.html b/Docs/types/FemalePlateChest.html new file mode 100644 index 0000000..5712fc7 --- /dev/null +++ b/Docs/types/FemalePlateChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - FemalePlateChest + + +

Back to Server.Items

+

FemalePlateChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: VioletCourage

+ (ctor) FemalePlateChest()
+ (ctor) FemalePlateChest( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FemaleStuddedChest.html b/Docs/types/FemaleStuddedChest.html new file mode 100644 index 0000000..8eb0921 --- /dev/null +++ b/Docs/types/FemaleStuddedChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - FemaleStuddedChest + + +

Back to Server.Items

+

FemaleStuddedChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FemaleStuddedChest()
+ (ctor) FemaleStuddedChest( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FerelTreefellow.html b/Docs/types/FerelTreefellow.html new file mode 100644 index 0000000..1fab628 --- /dev/null +++ b/Docs/types/FerelTreefellow.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - FerelTreefellow + + +

Back to Server.Mobiles

+

FerelTreefellow : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FerelTreefellow()
+ (ctor) FerelTreefellow( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ferret.html b/Docs/types/Ferret.html new file mode 100644 index 0000000..751bbc0 --- /dev/null +++ b/Docs/types/Ferret.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Ferret + + +

Back to Server.Mobiles

+

Ferret : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: (Anonymous-Type)--c__DisplayClass4

+ (ctor) Ferret()
+ (ctor) Ferret( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ void b__1()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ void Talk()
+ void Talk( Ferret to )
+ + diff --git a/Docs/types/FerretFormTalisman.html b/Docs/types/FerretFormTalisman.html new file mode 100644 index 0000000..c22ac7b --- /dev/null +++ b/Docs/types/FerretFormTalisman.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FerretFormTalisman + + +

Back to Server.Items

+

FerretFormTalisman : BaseFormTalisman, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITokunoDyable

+ (ctor) FerretFormTalisman()
+ (ctor) FerretFormTalisman( Serial serial )
+ TalismanForm Form( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FertileDirt.html b/Docs/types/FertileDirt.html new file mode 100644 index 0000000..cdee577 --- /dev/null +++ b/Docs/types/FertileDirt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FertileDirt + + +

Back to Server.Items

+

FertileDirt : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FertileDirt()
+ (ctor) FertileDirt( int amount )
+ (ctor) FertileDirt( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FestiveCactus.html b/Docs/types/FestiveCactus.html new file mode 100644 index 0000000..aed66eb --- /dev/null +++ b/Docs/types/FestiveCactus.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FestiveCactus + + +

Back to Server.Items

+

FestiveCactus : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FestiveCactus()
+ (ctor) FestiveCactus( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FetchAbraxusScrollObjective.html b/Docs/types/FetchAbraxusScrollObjective.html new file mode 100644 index 0000000..f9635c6 --- /dev/null +++ b/Docs/types/FetchAbraxusScrollObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FetchAbraxusScrollObjective + + +

Back to Server.Engines.Quests.Necro

+

FetchAbraxusScrollObjective : QuestObjective

+ (ctor) FetchAbraxusScrollObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FetidEssence.html b/Docs/types/FetidEssence.html new file mode 100644 index 0000000..863017b --- /dev/null +++ b/Docs/types/FetidEssence.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - FetidEssence + + +

Back to Server.Mobiles

+

FetidEssence : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FetidEssence()
+ (ctor) FetidEssence( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FewReagentsConversation.html b/Docs/types/FewReagentsConversation.html new file mode 100644 index 0000000..3193d38 --- /dev/null +++ b/Docs/types/FewReagentsConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FewReagentsConversation + + +

Back to Server.Engines.Quests.Haven

+

FewReagentsConversation : QuestConversation

+ (ctor) FewReagentsConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/FeyLeggings.html b/Docs/types/FeyLeggings.html new file mode 100644 index 0000000..26083c3 --- /dev/null +++ b/Docs/types/FeyLeggings.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - FeyLeggings + + +

Back to Server.Items

+

FeyLeggings : ChainLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FeyLeggings()
+ (ctor) FeyLeggings( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FieldStoneHouseDeed.html b/Docs/types/FieldStoneHouseDeed.html new file mode 100644 index 0000000..8959573 --- /dev/null +++ b/Docs/types/FieldStoneHouseDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FieldStoneHouseDeed + + +

Back to Server.Multis.Deeds

+

FieldStoneHouseDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FieldStoneHouseDeed()
+ (ctor) FieldStoneHouseDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FierceDragon.html b/Docs/types/FierceDragon.html new file mode 100644 index 0000000..2754478 --- /dev/null +++ b/Docs/types/FierceDragon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - FierceDragon + + +

Back to Server.Engines.Quests.Samurai

+

FierceDragon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FierceDragon()
+ (ctor) FierceDragon( Serial serial )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FifthTrialIntroConversation.html b/Docs/types/FifthTrialIntroConversation.html new file mode 100644 index 0000000..4df1d5e --- /dev/null +++ b/Docs/types/FifthTrialIntroConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FifthTrialIntroConversation + + +

Back to Server.Engines.Quests.Samurai

+

FifthTrialIntroConversation : QuestConversation

+ (ctor) FifthTrialIntroConversation()
+ (ctor) FifthTrialIntroConversation( bool killedCat )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnRead()
+ + diff --git a/Docs/types/FifthTrialIntroObjective.html b/Docs/types/FifthTrialIntroObjective.html new file mode 100644 index 0000000..c90e948 --- /dev/null +++ b/Docs/types/FifthTrialIntroObjective.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FifthTrialIntroObjective + + +

Back to Server.Engines.Quests.Samurai

+

FifthTrialIntroObjective : QuestObjective

+ (ctor) FifthTrialIntroObjective()
+ object Message( get; )
+ bool StolenTreasure( get; set; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FifthTrialReturnConversation.html b/Docs/types/FifthTrialReturnConversation.html new file mode 100644 index 0000000..e15a4e1 --- /dev/null +++ b/Docs/types/FifthTrialReturnConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FifthTrialReturnConversation + + +

Back to Server.Engines.Quests.Samurai

+

FifthTrialReturnConversation : QuestConversation

+ (ctor) FifthTrialReturnConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/FifthTrialReturnObjective.html b/Docs/types/FifthTrialReturnObjective.html new file mode 100644 index 0000000..036fbb9 --- /dev/null +++ b/Docs/types/FifthTrialReturnObjective.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FifthTrialReturnObjective + + +

Back to Server.Engines.Quests.Samurai

+

FifthTrialReturnObjective : QuestObjective

+ (ctor) FifthTrialReturnObjective()
+ object Message( get; )
+ + diff --git a/Docs/types/FightMode.html b/Docs/types/FightMode.html new file mode 100644 index 0000000..a19ab56 --- /dev/null +++ b/Docs/types/FightMode.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FightMode + + +

Back to Server.Mobiles

+

FightMode (Enum)

+ None = 0,
+ Aggressor = 1,
+ Strongest = 2,
+ Weakest = 3,
+ Closest = 4,
+ Evil = 5
+ + diff --git a/Docs/types/FileCommitCallback.html b/Docs/types/FileCommitCallback.html new file mode 100644 index 0000000..7459729 --- /dev/null +++ b/Docs/types/FileCommitCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FileCommitCallback + + +

Back to Server

+

FileCommitCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) FileCommitCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Chunk chunk, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Chunk chunk )
+ + diff --git a/Docs/types/FileLogger.html b/Docs/types/FileLogger.html new file mode 100644 index 0000000..4444d2f --- /dev/null +++ b/Docs/types/FileLogger.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FileLogger + + +

Back to Server

+

FileLogger : TextWriter, IDisposable

+ (ctor) FileLogger( string file )
+ (ctor) FileLogger( string file, bool append )
+ Encoding Encoding( get; )
+ string FileName( get; )
+ virtual void Write( char ch )
+ virtual void Write( string str )
+ virtual void WriteLine( string line )
+ + diff --git a/Docs/types/FileOperations.html b/Docs/types/FileOperations.html new file mode 100644 index 0000000..04334d3 --- /dev/null +++ b/Docs/types/FileOperations.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FileOperations + + +

Back to Server

+

FileOperations

+

Nested Types: UnbufferedFileStream

+ (static) bool AreAsynchronous( get; )
+ (static) bool AreSynchronous( get; )
+ (static) int BufferSize( get; set; )
+ (static) int Concurrency( get; set; )
+ (static) bool Unbuffered( get; set; )
+ (static) SafeFileHandle CreateFile( string lpFileName, int dwDesiredAccess, FileShare dwShareMode, IntPtr securityAttrs, FileMode dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile )
+ (static) FileStream OpenSequentialStream( string path, FileMode mode, FileAccess access, FileShare share )
+ + diff --git a/Docs/types/FileQueue.html b/Docs/types/FileQueue.html new file mode 100644 index 0000000..3421b71 --- /dev/null +++ b/Docs/types/FileQueue.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FileQueue + + +

Back to Server

+

FileQueue : IDisposable

+

Nested Types: Chunk, Page

+ (ctor) FileQueue( int concurrentWrites, FileCommitCallback callback )
+ long Position( get; )
+ void Append( Page page )
+ void Commit( Chunk chunk, int slot )
+ virtual void Dispose()
+ void Enqueue( byte[] buffer, int offset, int size )
+ void Flush()
+ + diff --git a/Docs/types/FillableBarrel.html b/Docs/types/FillableBarrel.html new file mode 100644 index 0000000..6f8e53c --- /dev/null +++ b/Docs/types/FillableBarrel.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FillableBarrel + + +

Back to Server.Items

+

FillableBarrel : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FillableBarrel()
+ (ctor) FillableBarrel( Serial serial )
+ bool IsLockable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FillableBvrge.html b/Docs/types/FillableBvrge.html new file mode 100644 index 0000000..83be05a --- /dev/null +++ b/Docs/types/FillableBvrge.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FillableBvrge + + +

Back to Server.Items

+

FillableBvrge : FillableEntry

+ (ctor) FillableBvrge( Type type, BeverageType content )
+ (ctor) FillableBvrge( int weight, Type type, BeverageType content )
+ BeverageType Content( get; )
+ virtual Item Construct()
+ + diff --git a/Docs/types/FillableContainer.html b/Docs/types/FillableContainer.html new file mode 100644 index 0000000..1ad4c05 --- /dev/null +++ b/Docs/types/FillableContainer.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - FillableContainer + + +

Back to Server.Items

+

FillableContainer : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Derived Types: FillableBarrel, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, LibraryBookcase

+ (ctor) FillableContainer( int itemID )
+ (ctor) FillableContainer( Serial serial )
+ FillableContent Content( get; set; )
+ FillableContentType ContentType( get; set; )
+ bool IsLockable( get; )
+ bool IsTrapable( get; )
+ int MaxRespawnMinutes( get; )
+ int MinRespawnMinutes( get; )
+ DateTime NextRespawnTime( get; )
+ int SpawnThreshold( get; )
+ virtual void AcquireContent()
+ void CheckRespawn()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateContent()
+ int GetItemsCount()
+ virtual int GetSpawnCount()
+ virtual void OnAfterDelete()
+ virtual void OnItemRemoved( Item item )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ void Respawn()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FillableContent.html b/Docs/types/FillableContent.html new file mode 100644 index 0000000..6708d36 --- /dev/null +++ b/Docs/types/FillableContent.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FillableContent + + +

Back to Server.Items

+

FillableContent

+ (static) FillableContent Acquire( Point3D loc, Map map )
+ (static) FillableContent Lookup( FillableContentType type )
+ (static) FillableContentType Lookup( FillableContent content )
+ (ctor) FillableContent( int level, Type[] vendors, FillableEntry[] entries )
+ int Level( get; )
+ FillableContentType TypeID( get; )
+ Type[] Vendors( get; )
+ virtual Item Construct()
+ + diff --git a/Docs/types/FillableContentType.html b/Docs/types/FillableContentType.html new file mode 100644 index 0000000..7935c2b --- /dev/null +++ b/Docs/types/FillableContentType.html @@ -0,0 +1,45 @@ + + + RunUO Documentation - Class Overview - FillableContentType + + +

Back to Server.Items

+

FillableContentType (Enum)

+ Weaponsmith = 0,
+ Provisioner = 1,
+ Mage = 2,
+ Alchemist = 3,
+ Armorer = 4,
+ ArtisanGuild = 5,
+ Baker = 6,
+ Bard = 7,
+ Blacksmith = 8,
+ Bowyer = 9,
+ Butcher = 10,
+ Carpenter = 11,
+ Clothier = 12,
+ Cobbler = 13,
+ Docks = 14,
+ Farm = 15,
+ FighterGuild = 16,
+ Guard = 17,
+ Healer = 18,
+ Herbalist = 19,
+ Inn = 20,
+ Jeweler = 21,
+ Library = 22,
+ Merchant = 23,
+ Mill = 24,
+ Mine = 25,
+ Observatory = 26,
+ Painter = 27,
+ Ranger = 28,
+ Stables = 29,
+ Tanner = 30,
+ Tavern = 31,
+ ThiefGuild = 32,
+ Tinker = 33,
+ Veterinarian = 34,
+ None = -1
+ + diff --git a/Docs/types/FillableEntry.html b/Docs/types/FillableEntry.html new file mode 100644 index 0000000..dd17681 --- /dev/null +++ b/Docs/types/FillableEntry.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - FillableEntry + + +

Back to Server.Items

+

FillableEntry

+

Derived Types: FillableBvrge

+ (ctor) FillableEntry( Type type )
+ (ctor) FillableEntry( Type[] types )
+ (ctor) FillableEntry( int weight, Type type )
+ (ctor) FillableEntry( int weight, Type[] types )
+ (ctor) FillableEntry( int weight, Type[] types, int offset, int count )
+ Type[] Types( get; )
+ int Weight( get; )
+ virtual Item Construct()
+ + diff --git a/Docs/types/FillableLargeCrate.html b/Docs/types/FillableLargeCrate.html new file mode 100644 index 0000000..fafa1f2 --- /dev/null +++ b/Docs/types/FillableLargeCrate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FillableLargeCrate + + +

Back to Server.Items

+

FillableLargeCrate : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FillableLargeCrate()
+ (ctor) FillableLargeCrate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FillableMetalBox.html b/Docs/types/FillableMetalBox.html new file mode 100644 index 0000000..9fad96d --- /dev/null +++ b/Docs/types/FillableMetalBox.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FillableMetalBox + + +

Back to Server.Items

+

FillableMetalBox : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FillableMetalBox()
+ (ctor) FillableMetalBox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FillableMetalChest.html b/Docs/types/FillableMetalChest.html new file mode 100644 index 0000000..7ce56a1 --- /dev/null +++ b/Docs/types/FillableMetalChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FillableMetalChest + + +

Back to Server.Items

+

FillableMetalChest : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FillableMetalChest()
+ (ctor) FillableMetalChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FillableMetalGoldenChest.html b/Docs/types/FillableMetalGoldenChest.html new file mode 100644 index 0000000..47e37f4 --- /dev/null +++ b/Docs/types/FillableMetalGoldenChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FillableMetalGoldenChest + + +

Back to Server.Items

+

FillableMetalGoldenChest : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FillableMetalGoldenChest()
+ (ctor) FillableMetalGoldenChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FillableSmallCrate.html b/Docs/types/FillableSmallCrate.html new file mode 100644 index 0000000..c42de3f --- /dev/null +++ b/Docs/types/FillableSmallCrate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FillableSmallCrate + + +

Back to Server.Items

+

FillableSmallCrate : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FillableSmallCrate()
+ (ctor) FillableSmallCrate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FillableWoodenBox.html b/Docs/types/FillableWoodenBox.html new file mode 100644 index 0000000..3f1b24a --- /dev/null +++ b/Docs/types/FillableWoodenBox.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FillableWoodenBox + + +

Back to Server.Items

+

FillableWoodenBox : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FillableWoodenBox()
+ (ctor) FillableWoodenBox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FillableWoodenChest.html b/Docs/types/FillableWoodenChest.html new file mode 100644 index 0000000..7bb377b --- /dev/null +++ b/Docs/types/FillableWoodenChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FillableWoodenChest + + +

Back to Server.Items

+

FillableWoodenChest : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FillableWoodenChest()
+ (ctor) FillableWoodenChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FinanceGump.html b/Docs/types/FinanceGump.html new file mode 100644 index 0000000..fd5836a --- /dev/null +++ b/Docs/types/FinanceGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FinanceGump + + +

Back to Server.Factions

+

FinanceGump : FactionGump

+ (ctor) FinanceGump( PlayerMobile from, Faction faction, Town town )
+ int ButtonTypes( get; )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/FindAlbertaObjective.html b/Docs/types/FindAlbertaObjective.html new file mode 100644 index 0000000..66da74b --- /dev/null +++ b/Docs/types/FindAlbertaObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindAlbertaObjective + + +

Back to Server.Engines.Quests.Collector

+

FindAlbertaObjective : QuestObjective

+ (ctor) FindAlbertaObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindApprenticeObjective.html b/Docs/types/FindApprenticeObjective.html new file mode 100644 index 0000000..1ba0c48 --- /dev/null +++ b/Docs/types/FindApprenticeObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindApprenticeObjective + + +

Back to Server.Engines.Quests.Haven

+

FindApprenticeObjective : QuestObjective

+ (ctor) FindApprenticeObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindBankObjective.html b/Docs/types/FindBankObjective.html new file mode 100644 index 0000000..74a96ba --- /dev/null +++ b/Docs/types/FindBankObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FindBankObjective + + +

Back to Server.Engines.Quests.Necro

+

FindBankObjective : QuestObjective

+ (ctor) FindBankObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindCallingScrollObjective.html b/Docs/types/FindCallingScrollObjective.html new file mode 100644 index 0000000..f25b03e --- /dev/null +++ b/Docs/types/FindCallingScrollObjective.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FindCallingScrollObjective + + +

Back to Server.Engines.Quests.Necro

+

FindCallingScrollObjective : QuestObjective

+ (ctor) FindCallingScrollObjective()
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual bool GetKillEvent( BaseCreature creature, Container corpse )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ + diff --git a/Docs/types/FindCityOfLightObjective.html b/Docs/types/FindCityOfLightObjective.html new file mode 100644 index 0000000..c02a443 --- /dev/null +++ b/Docs/types/FindCityOfLightObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FindCityOfLightObjective + + +

Back to Server.Engines.Quests.Necro

+

FindCityOfLightObjective : QuestObjective

+ (ctor) FindCityOfLightObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindCrystalCaveObjective.html b/Docs/types/FindCrystalCaveObjective.html new file mode 100644 index 0000000..eab92eb --- /dev/null +++ b/Docs/types/FindCrystalCaveObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindCrystalCaveObjective + + +

Back to Server.Engines.Quests.Necro

+

FindCrystalCaveObjective : QuestObjective

+ (ctor) FindCrystalCaveObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindDryadObjective.html b/Docs/types/FindDryadObjective.html new file mode 100644 index 0000000..382c0ea --- /dev/null +++ b/Docs/types/FindDryadObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindDryadObjective + + +

Back to Server.Engines.Quests.Haven

+

FindDryadObjective : QuestObjective

+ (ctor) FindDryadObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindEminoBeginObjective.html b/Docs/types/FindEminoBeginObjective.html new file mode 100644 index 0000000..a7e4219 --- /dev/null +++ b/Docs/types/FindEminoBeginObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindEminoBeginObjective + + +

Back to Server.Engines.Quests.Ninja

+

FindEminoBeginObjective : QuestObjective

+ (ctor) FindEminoBeginObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindGabrielObjective.html b/Docs/types/FindGabrielObjective.html new file mode 100644 index 0000000..076ede7 --- /dev/null +++ b/Docs/types/FindGabrielObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindGabrielObjective + + +

Back to Server.Engines.Quests.Collector

+

FindGabrielObjective : QuestObjective

+ (ctor) FindGabrielObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindGrizeldaAboutMurderObjective.html b/Docs/types/FindGrizeldaAboutMurderObjective.html new file mode 100644 index 0000000..695a886 --- /dev/null +++ b/Docs/types/FindGrizeldaAboutMurderObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindGrizeldaAboutMurderObjective + + +

Back to Server.Engines.Quests.Hag

+

FindGrizeldaAboutMurderObjective : QuestObjective

+ (ctor) FindGrizeldaAboutMurderObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindHaochiObjective.html b/Docs/types/FindHaochiObjective.html new file mode 100644 index 0000000..3c7d5cf --- /dev/null +++ b/Docs/types/FindHaochiObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindHaochiObjective + + +

Back to Server.Engines.Quests.Samurai

+

FindHaochiObjective : QuestObjective

+ (ctor) FindHaochiObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindHorusAboutRewardObjective.html b/Docs/types/FindHorusAboutRewardObjective.html new file mode 100644 index 0000000..6c1873f --- /dev/null +++ b/Docs/types/FindHorusAboutRewardObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindHorusAboutRewardObjective + + +

Back to Server.Engines.Quests.Necro

+

FindHorusAboutRewardObjective : QuestObjective

+ (ctor) FindHorusAboutRewardObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindIngredientObjective.html b/Docs/types/FindIngredientObjective.html new file mode 100644 index 0000000..7d58d76 --- /dev/null +++ b/Docs/types/FindIngredientObjective.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - FindIngredientObjective + + +

Back to Server.Engines.Quests.Hag

+

FindIngredientObjective : QuestObjective

+ (ctor) FindIngredientObjective()
+ (ctor) FindIngredientObjective( Ingredient[] oldIngredients )
+ (ctor) FindIngredientObjective( Ingredient[] oldIngredients, bool blackheartMet )
+ bool BlackheartMet( get; )
+ Ingredient Ingredient( get; )
+ Ingredient[] Ingredients( get; )
+ int MaxProgress( get; )
+ object Message( get; )
+ int Step( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ void NextStep()
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/FindMaabusCorpseObjective.html b/Docs/types/FindMaabusCorpseObjective.html new file mode 100644 index 0000000..b2afb18 --- /dev/null +++ b/Docs/types/FindMaabusCorpseObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FindMaabusCorpseObjective + + +

Back to Server.Engines.Quests.Necro

+

FindMaabusCorpseObjective : QuestObjective

+ (ctor) FindMaabusCorpseObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindMaabusTombObjective.html b/Docs/types/FindMaabusTombObjective.html new file mode 100644 index 0000000..0b5e4e3 --- /dev/null +++ b/Docs/types/FindMaabusTombObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FindMaabusTombObjective + + +

Back to Server.Engines.Quests.Necro

+

FindMaabusTombObjective : QuestObjective

+ (ctor) FindMaabusTombObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindMardothAboutKronusObjective.html b/Docs/types/FindMardothAboutKronusObjective.html new file mode 100644 index 0000000..46570d2 --- /dev/null +++ b/Docs/types/FindMardothAboutKronusObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindMardothAboutKronusObjective + + +

Back to Server.Engines.Quests.Necro

+

FindMardothAboutKronusObjective : QuestObjective

+ (ctor) FindMardothAboutKronusObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindMardothAboutVaultObjective.html b/Docs/types/FindMardothAboutVaultObjective.html new file mode 100644 index 0000000..e47e040 --- /dev/null +++ b/Docs/types/FindMardothAboutVaultObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindMardothAboutVaultObjective + + +

Back to Server.Engines.Quests.Necro

+

FindMardothAboutVaultObjective : QuestObjective

+ (ctor) FindMardothAboutVaultObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindMardothEndObjective.html b/Docs/types/FindMardothEndObjective.html new file mode 100644 index 0000000..eac7fd0 --- /dev/null +++ b/Docs/types/FindMardothEndObjective.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FindMardothEndObjective + + +

Back to Server.Engines.Quests.Necro

+

FindMardothEndObjective : QuestObjective

+ (ctor) FindMardothEndObjective()
+ (ctor) FindMardothEndObjective( bool victory )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindSchmendrickObjective.html b/Docs/types/FindSchmendrickObjective.html new file mode 100644 index 0000000..6116e14 --- /dev/null +++ b/Docs/types/FindSchmendrickObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FindSchmendrickObjective + + +

Back to Server.Engines.Quests.Haven

+

FindSchmendrickObjective : QuestObjective

+ (ctor) FindSchmendrickObjective()
+ object Message( get; )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindSheetMusicObjective.html b/Docs/types/FindSheetMusicObjective.html new file mode 100644 index 0000000..e2cd5ae --- /dev/null +++ b/Docs/types/FindSheetMusicObjective.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FindSheetMusicObjective + + +

Back to Server.Engines.Quests.Collector

+

FindSheetMusicObjective : QuestObjective

+ (ctor) FindSheetMusicObjective()
+ (ctor) FindSheetMusicObjective( bool init )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ void InitTheater()
+ bool IsInRightTheater()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindTomasObjective.html b/Docs/types/FindTomasObjective.html new file mode 100644 index 0000000..849a03f --- /dev/null +++ b/Docs/types/FindTomasObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindTomasObjective + + +

Back to Server.Engines.Quests.Collector

+

FindTomasObjective : QuestObjective

+ (ctor) FindTomasObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindUzeraanAboutReportObjective.html b/Docs/types/FindUzeraanAboutReportObjective.html new file mode 100644 index 0000000..bc8749b --- /dev/null +++ b/Docs/types/FindUzeraanAboutReportObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindUzeraanAboutReportObjective + + +

Back to Server.Engines.Quests.Haven

+

FindUzeraanAboutReportObjective : QuestObjective

+ (ctor) FindUzeraanAboutReportObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindUzeraanBeginObjective.html b/Docs/types/FindUzeraanBeginObjective.html new file mode 100644 index 0000000..6a5b23c --- /dev/null +++ b/Docs/types/FindUzeraanBeginObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindUzeraanBeginObjective + + +

Back to Server.Engines.Quests.Haven

+

FindUzeraanBeginObjective : QuestObjective

+ (ctor) FindUzeraanBeginObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindUzeraanFirstTaskObjective.html b/Docs/types/FindUzeraanFirstTaskObjective.html new file mode 100644 index 0000000..52b4eb7 --- /dev/null +++ b/Docs/types/FindUzeraanFirstTaskObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindUzeraanFirstTaskObjective + + +

Back to Server.Engines.Quests.Haven

+

FindUzeraanFirstTaskObjective : QuestObjective

+ (ctor) FindUzeraanFirstTaskObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindVaultOfSecretsObjective.html b/Docs/types/FindVaultOfSecretsObjective.html new file mode 100644 index 0000000..59f9e67 --- /dev/null +++ b/Docs/types/FindVaultOfSecretsObjective.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FindVaultOfSecretsObjective + + +

Back to Server.Engines.Quests.Necro

+

FindVaultOfSecretsObjective : QuestObjective

+ (ctor) FindVaultOfSecretsObjective()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindWellOfTearsObjective.html b/Docs/types/FindWellOfTearsObjective.html new file mode 100644 index 0000000..a710685 --- /dev/null +++ b/Docs/types/FindWellOfTearsObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FindWellOfTearsObjective + + +

Back to Server.Engines.Quests.Necro

+

FindWellOfTearsObjective : QuestObjective

+ (ctor) FindWellOfTearsObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindZeefzorpulObjective.html b/Docs/types/FindZeefzorpulObjective.html new file mode 100644 index 0000000..5ae3c8d --- /dev/null +++ b/Docs/types/FindZeefzorpulObjective.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FindZeefzorpulObjective + + +

Back to Server.Engines.Quests.Hag

+

FindZeefzorpulObjective : QuestObjective

+ (ctor) FindZeefzorpulObjective()
+ (ctor) FindZeefzorpulObjective( Point3D impLocation )
+ Point3D ImpLocation( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ void DeleteImp( object imp )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FindZoelConversation.html b/Docs/types/FindZoelConversation.html new file mode 100644 index 0000000..20f437c --- /dev/null +++ b/Docs/types/FindZoelConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindZoelConversation + + +

Back to Server.Engines.Quests.Ninja

+

FindZoelConversation : QuestConversation

+ (ctor) FindZoelConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/FindZoelObjective.html b/Docs/types/FindZoelObjective.html new file mode 100644 index 0000000..ce01422 --- /dev/null +++ b/Docs/types/FindZoelObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FindZoelObjective + + +

Back to Server.Engines.Quests.Ninja

+

FindZoelObjective : QuestObjective

+ (ctor) FindZoelObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FinishedWoodenChest.html b/Docs/types/FinishedWoodenChest.html new file mode 100644 index 0000000..064eb48 --- /dev/null +++ b/Docs/types/FinishedWoodenChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FinishedWoodenChest + + +

Back to Server.Items

+

FinishedWoodenChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) FinishedWoodenChest()
+ (ctor) FinishedWoodenChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireBeetle.html b/Docs/types/FireBeetle.html new file mode 100644 index 0000000..fdd30cf --- /dev/null +++ b/Docs/types/FireBeetle.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - FireBeetle + + +

Back to Server.Mobiles

+

FireBeetle : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) FireBeetle()
+ (ctor) FireBeetle( Serial serial )
+ double BoostedSpeed( get; )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ bool ReduceSpeedWithDamage( get; )
+ bool StatLossAfterTame( get; )
+ bool SubdueBeforeTame( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual double GetControlChance( Mobile m, bool useBaseSkill )
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnCombatantChange()
+ virtual void OnHarmfulSpell( Mobile from )
+ virtual bool OverrideBondingReqs()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireColumnAddon.html b/Docs/types/FireColumnAddon.html new file mode 100644 index 0000000..8d8f712 --- /dev/null +++ b/Docs/types/FireColumnAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FireColumnAddon + + +

Back to Server.Items

+

FireColumnAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) FireColumnAddon()
+ (ctor) FireColumnAddon( bool bloody )
+ (ctor) FireColumnAddon( Serial serial )
+ bool ShareHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireColumnTrap.html b/Docs/types/FireColumnTrap.html new file mode 100644 index 0000000..fee3b24 --- /dev/null +++ b/Docs/types/FireColumnTrap.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - FireColumnTrap + + +

Back to Server.Items

+

FireColumnTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FireColumnTrap()
+ (ctor) FireColumnTrap( Serial serial )
+ int MaxDamage( get; set; )
+ int MinDamage( get; set; )
+ bool PassivelyTriggered( get; )
+ TimeSpan PassiveTriggerDelay( get; )
+ int PassiveTriggerRange( get; )
+ TimeSpan ResetDelay( get; )
+ bool WarningFlame( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void DoEffect()
+ virtual void OnTrigger( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireElemental.html b/Docs/types/FireElemental.html new file mode 100644 index 0000000..cf206cb --- /dev/null +++ b/Docs/types/FireElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - FireElemental + + +

Back to Server.Mobiles

+

FireElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FireElemental()
+ (ctor) FireElemental( Serial serial )
+ bool BleedImmune( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireElementalSpell.html b/Docs/types/FireElementalSpell.html new file mode 100644 index 0000000..f6d9c14 --- /dev/null +++ b/Docs/types/FireElementalSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FireElementalSpell + + +

Back to Server.Spells.Eighth

+

FireElementalSpell : MagerySpell, ISpell

+ (ctor) FireElementalSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/FireFieldItem.html b/Docs/types/FireFieldItem.html new file mode 100644 index 0000000..5488cd3 --- /dev/null +++ b/Docs/types/FireFieldItem.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - FireFieldItem + + +

Back to Server.Spells.Fourth

+

(FireFieldSpell) - FireFieldItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer

+ (ctor) FireFieldItem( Serial serial )
+ (ctor) FireFieldItem( int itemID, Point3D loc, Mobile caster, Map map, TimeSpan duration, int val )
+ (ctor) FireFieldItem( int itemID, Point3D loc, Mobile caster, Map map, TimeSpan duration, int val, int damage )
+ bool BlocksFit( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireFieldScroll.html b/Docs/types/FireFieldScroll.html new file mode 100644 index 0000000..144884c --- /dev/null +++ b/Docs/types/FireFieldScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FireFieldScroll + + +

Back to Server.Items

+

FireFieldScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) FireFieldScroll()
+ (ctor) FireFieldScroll( int amount )
+ (ctor) FireFieldScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireFieldSpell.html b/Docs/types/FireFieldSpell.html new file mode 100644 index 0000000..f09940e --- /dev/null +++ b/Docs/types/FireFieldSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FireFieldSpell + + +

Back to Server.Spells.Fourth

+

FireFieldSpell : MagerySpell, ISpell

+

Nested Types: FireFieldItem, InternalTarget

+ (ctor) FireFieldSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/FireGargoyle.html b/Docs/types/FireGargoyle.html new file mode 100644 index 0000000..f1fa4ce --- /dev/null +++ b/Docs/types/FireGargoyle.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FireGargoyle + + +

Back to Server.Mobiles

+

FireGargoyle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FireGargoyle()
+ (ctor) FireGargoyle( Serial serial )
+ bool HasBreath( get; )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireHorn.html b/Docs/types/FireHorn.html new file mode 100644 index 0000000..31fcc5a --- /dev/null +++ b/Docs/types/FireHorn.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - FireHorn + + +

Back to Server.Items

+

FireHorn : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (static) void EndAction( object state )
+ (ctor) FireHorn()
+ (ctor) FireHorn( Serial serial )
+ int LabelNumber( get; )
+ bool CheckUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Use( Mobile from, IPoint3D loc )
+ + diff --git a/Docs/types/FireRuby.html b/Docs/types/FireRuby.html new file mode 100644 index 0000000..ff59363 --- /dev/null +++ b/Docs/types/FireRuby.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FireRuby + + +

Back to Server.Items

+

FireRuby : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FireRuby()
+ (ctor) FireRuby( int amount )
+ (ctor) FireRuby( Serial serial )
+ (ctor) FireRuby( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireSteed.html b/Docs/types/FireSteed.html new file mode 100644 index 0000000..de69c5a --- /dev/null +++ b/Docs/types/FireSteed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - FireSteed + + +

Back to Server.Mobiles

+

FireSteed : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) FireSteed()
+ (ctor) FireSteed( string name )
+ (ctor) FireSteed( Serial serial )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireballScroll.html b/Docs/types/FireballScroll.html new file mode 100644 index 0000000..1afe984 --- /dev/null +++ b/Docs/types/FireballScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FireballScroll + + +

Back to Server.Items

+

FireballScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) FireballScroll()
+ (ctor) FireballScroll( int amount )
+ (ctor) FireballScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FireballSpell.html b/Docs/types/FireballSpell.html new file mode 100644 index 0000000..3359d22 --- /dev/null +++ b/Docs/types/FireballSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FireballSpell + + +

Back to Server.Spells.Third

+

FireballSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) FireballSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/FireballWand.html b/Docs/types/FireballWand.html new file mode 100644 index 0000000..fbf1443 --- /dev/null +++ b/Docs/types/FireballWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FireballWand + + +

Back to Server.Items

+

FireballWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) FireballWand()
+ (ctor) FireballWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Firebomb.html b/Docs/types/Firebomb.html new file mode 100644 index 0000000..89e378c --- /dev/null +++ b/Docs/types/Firebomb.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Firebomb + + +

Back to Server.Items

+

Firebomb : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Firebomb()
+ (ctor) Firebomb( int itemID )
+ (ctor) Firebomb( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ void FirebombReposition_OnTick( object state )
+ virtual void OnDoubleClick( Mobile from )
+ void OnFirebombTarget( Mobile from, object obj )
+ void OnFirebombTimerTick()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FirebombField.html b/Docs/types/FirebombField.html new file mode 100644 index 0000000..d687628 --- /dev/null +++ b/Docs/types/FirebombField.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FirebombField + + +

Back to Server.Items

+

FirebombField : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FirebombField( Serial serial )
+ (ctor) FirebombField( Mobile litBy, List<Mobile> toDamage )
+ virtual void Deserialize( GenericReader reader )
+ void OnFirebombFieldTimerTick()
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Firewall.html b/Docs/types/Firewall.html new file mode 100644 index 0000000..46922ee --- /dev/null +++ b/Docs/types/Firewall.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Firewall + + +

Back to Server

+

Firewall

+

Nested Types: CIDRFirewallEntry, IFirewallEntry, IPFirewallEntry, WildcardIPFirewallEntry

+ (static) List<IFirewallEntry> List( get; )
+ (static) void Add( string pattern )
+ (static) void Add( object obj )
+ (static) void Add( IPAddress ip )
+ (static) void Add( IFirewallEntry entry )
+ (static) bool IsBlocked( IPAddress ip )
+ (static) void Remove( object obj )
+ (static) void RemoveAt( int index )
+ (static) void Save()
+ (static) IFirewallEntry ToFirewallEntry( object entry )
+ (static) IFirewallEntry ToFirewallEntry( string entry )
+ (ctor) Firewall()
+ + diff --git a/Docs/types/FirewallCommand.html b/Docs/types/FirewallCommand.html new file mode 100644 index 0000000..3e7c780 --- /dev/null +++ b/Docs/types/FirewallCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FirewallCommand + + +

Back to Server.Commands.Generic

+

FirewallCommand : BaseCommand

+ (ctor) FirewallCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/FireworksWand.html b/Docs/types/FireworksWand.html new file mode 100644 index 0000000..9d96864 --- /dev/null +++ b/Docs/types/FireworksWand.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - FireworksWand + + +

Back to Server.Items

+

FireworksWand : MagicWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) FireworksWand()
+ (ctor) FireworksWand( Serial serial )
+ (ctor) FireworksWand( int charges )
+ int Charges( get; set; )
+ int LabelNumber( get; )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ void BeginLaunch( Mobile from, bool useCharges )
+ virtual void Deserialize( GenericReader reader )
+ void FinishLaunch( object state )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FirstHit.html b/Docs/types/FirstHit.html new file mode 100644 index 0000000..e7f4b68 --- /dev/null +++ b/Docs/types/FirstHit.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FirstHit + + +

Back to Server

+

FirstHit (Enum)

+ NotDelivered = 0,
+ Delivered = 1,
+ Granted = 2
+ + diff --git a/Docs/types/FirstKillObjective.html b/Docs/types/FirstKillObjective.html new file mode 100644 index 0000000..1f306e1 --- /dev/null +++ b/Docs/types/FirstKillObjective.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FirstKillObjective + + +

Back to Server.Engines.Quests.Zento

+

FirstKillObjective : QuestObjective

+ (ctor) FirstKillObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/FirstTrialIntroConversation.html b/Docs/types/FirstTrialIntroConversation.html new file mode 100644 index 0000000..4af7e18 --- /dev/null +++ b/Docs/types/FirstTrialIntroConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FirstTrialIntroConversation + + +

Back to Server.Engines.Quests.Samurai

+

FirstTrialIntroConversation : QuestConversation

+ (ctor) FirstTrialIntroConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/FirstTrialIntroObjective.html b/Docs/types/FirstTrialIntroObjective.html new file mode 100644 index 0000000..da9d4ca --- /dev/null +++ b/Docs/types/FirstTrialIntroObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FirstTrialIntroObjective + + +

Back to Server.Engines.Quests.Samurai

+

FirstTrialIntroObjective : QuestObjective

+ (ctor) FirstTrialIntroObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FirstTrialKillConversation.html b/Docs/types/FirstTrialKillConversation.html new file mode 100644 index 0000000..a4af9a9 --- /dev/null +++ b/Docs/types/FirstTrialKillConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FirstTrialKillConversation + + +

Back to Server.Engines.Quests.Samurai

+

FirstTrialKillConversation : QuestConversation

+ (ctor) FirstTrialKillConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/FirstTrialKillObjective.html b/Docs/types/FirstTrialKillObjective.html new file mode 100644 index 0000000..674e299 --- /dev/null +++ b/Docs/types/FirstTrialKillObjective.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FirstTrialKillObjective + + +

Back to Server.Engines.Quests.Samurai

+

FirstTrialKillObjective : QuestObjective

+ (ctor) FirstTrialKillObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ + diff --git a/Docs/types/FirstTrialReturnObjective.html b/Docs/types/FirstTrialReturnObjective.html new file mode 100644 index 0000000..6a75642 --- /dev/null +++ b/Docs/types/FirstTrialReturnObjective.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FirstTrialReturnObjective + + +

Back to Server.Engines.Quests.Samurai

+

FirstTrialReturnObjective : QuestObjective

+ (ctor) FirstTrialReturnObjective()
+ (ctor) FirstTrialReturnObjective( bool cursedSoul )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/Fish.html b/Docs/types/Fish.html new file mode 100644 index 0000000..54360d1 --- /dev/null +++ b/Docs/types/Fish.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Fish + + +

Back to Server.Items

+

Fish : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICarvable

+ (ctor) Fish()
+ (ctor) Fish( Serial serial )
+ (ctor) Fish( int amount )
+ virtual void Carve( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FishPearlsObjective.html b/Docs/types/FishPearlsObjective.html new file mode 100644 index 0000000..f1ed1fe --- /dev/null +++ b/Docs/types/FishPearlsObjective.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FishPearlsObjective + + +

Back to Server.Engines.Quests.Collector

+

FishPearlsObjective : QuestObjective

+ (ctor) FishPearlsObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual void OnComplete()
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/FishSteak.html b/Docs/types/FishSteak.html new file mode 100644 index 0000000..d1187da --- /dev/null +++ b/Docs/types/FishSteak.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FishSteak + + +

Back to Server.Items

+

FishSteak : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FishSteak()
+ (ctor) FishSteak( int amount )
+ (ctor) FishSteak( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FisherGuildmaster.html b/Docs/types/FisherGuildmaster.html new file mode 100644 index 0000000..ec3b5ed --- /dev/null +++ b/Docs/types/FisherGuildmaster.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FisherGuildmaster + + +

Back to Server.Mobiles

+

FisherGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) FisherGuildmaster()
+ (ctor) FisherGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Fisherman.html b/Docs/types/Fisherman.html new file mode 100644 index 0000000..344f533 --- /dev/null +++ b/Docs/types/Fisherman.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Fisherman + + +

Back to Server.Mobiles

+

Fisherman : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Fisherman()
+ (ctor) Fisherman( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Fishing.html b/Docs/types/Fishing.html new file mode 100644 index 0000000..78cb557 --- /dev/null +++ b/Docs/types/Fishing.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Fishing + + +

Back to Server.Engines.Harvest

+

Fishing : HarvestSystem

+

Nested Types: (Anonymous-Type)--c__DisplayClass1, MutateEntry

+ (static) Fishing System( get; )
+ (static) Map SafeMap( Map map )
+ (ctor) Fishing()
+ HarvestDefinition Definition( get; )
+ virtual bool BeginHarvesting( Mobile from, Item tool )
+ virtual bool CheckHarvest( Mobile from, Item tool )
+ virtual bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual bool CheckResources( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, bool timed )
+ virtual Item Construct( Type type, Mobile from )
+ virtual object GetLock( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual bool Give( Mobile m, Item item, bool placeAtFeet )
+ virtual Type MutateType( Type type, Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource )
+ virtual void OnConcurrentHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual void OnHarvestFinished( Mobile from, Item tool, HarvestDefinition def, HarvestVein vein, HarvestBank bank, HarvestResource resource, object harvested )
+ virtual void OnHarvestStarted( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual void SendSuccessTo( Mobile from, Item item, HarvestResource resource )
+ virtual bool SpecialHarvest( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc )
+ + diff --git a/Docs/types/FishingPole.html b/Docs/types/FishingPole.html new file mode 100644 index 0000000..14f0a5d --- /dev/null +++ b/Docs/types/FishingPole.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FishingPole + + +

Back to Server.Items

+

FishingPole : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FishingPole()
+ (ctor) FishingPole( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Fists.html b/Docs/types/Fists.html new file mode 100644 index 0000000..627724f --- /dev/null +++ b/Docs/types/Fists.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - Fists + + +

Back to Server.Items

+

Fists : BaseMeleeWeapon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Nested Types: MoveDelayTimer

+ (static) bool CheckMove( Mobile m, SkillName other )
+ (static) void EventSink_DisarmRequest( DisarmRequestEventArgs e )
+ (static) void EventSink_StunRequest( StunRequestEventArgs e )
+ (static) bool HasFreeHands( Mobile m )
+ (static) void Initialize()
+ (static) void StartMoveDelay( Mobile m )
+ (ctor) Fists()
+ (ctor) Fists( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual double GetDefendSkillValue( Mobile attacker, Mobile defender )
+ virtual TimeSpan OnSwing( Mobile attacker, Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FixColumnTimer.html b/Docs/types/FixColumnTimer.html new file mode 100644 index 0000000..5c3e0c8 --- /dev/null +++ b/Docs/types/FixColumnTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FixColumnTimer + + +

Back to Server.Multis

+

(BaseHouse) - FixColumnTimer : Timer

+ (ctor) FixColumnTimer( BaseMulti multi )
+ virtual void OnTick()
+ + diff --git a/Docs/types/FlameSpurtTrap.html b/Docs/types/FlameSpurtTrap.html new file mode 100644 index 0000000..aceeb08 --- /dev/null +++ b/Docs/types/FlameSpurtTrap.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - FlameSpurtTrap + + +

Back to Server.Items

+

FlameSpurtTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FlameSpurtTrap()
+ (ctor) FlameSpurtTrap( Serial serial )
+ virtual void CheckTimer()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void OnSectorActivate()
+ virtual void OnSectorDeactivate()
+ virtual void Refresh()
+ virtual void Serialize( GenericWriter writer )
+ virtual void StartTimer()
+ virtual void StopTimer()
+ + diff --git a/Docs/types/FlameStrikeSpell.html b/Docs/types/FlameStrikeSpell.html new file mode 100644 index 0000000..c84961f --- /dev/null +++ b/Docs/types/FlameStrikeSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FlameStrikeSpell + + +

Back to Server.Spells.Seventh

+

FlameStrikeSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) FlameStrikeSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/FlamestrikeScroll.html b/Docs/types/FlamestrikeScroll.html new file mode 100644 index 0000000..67073dd --- /dev/null +++ b/Docs/types/FlamestrikeScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FlamestrikeScroll + + +

Back to Server.Items

+

FlamestrikeScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) FlamestrikeScroll()
+ (ctor) FlamestrikeScroll( int amount )
+ (ctor) FlamestrikeScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FlamingHead.html b/Docs/types/FlamingHead.html new file mode 100644 index 0000000..364a60c --- /dev/null +++ b/Docs/types/FlamingHead.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - FlamingHead + + +

Back to Server.Items

+

FlamingHead : StoneFaceTrapNoDamage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IAddon, IRewardItem

+ (ctor) FlamingHead()
+ (ctor) FlamingHead( StoneFaceTrapType type )
+ (ctor) FlamingHead( Serial serial )
+ Item Deed( get; )
+ bool ForceShowProperties( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FlamingHeadDeed.html b/Docs/types/FlamingHeadDeed.html new file mode 100644 index 0000000..f9a9e76 --- /dev/null +++ b/Docs/types/FlamingHeadDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - FlamingHeadDeed + + +

Back to Server.Items

+

FlamingHeadDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: InternalTarget

+ (ctor) FlamingHeadDeed()
+ (ctor) FlamingHeadDeed( Serial serial )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Flax.html b/Docs/types/Flax.html new file mode 100644 index 0000000..b919988 --- /dev/null +++ b/Docs/types/Flax.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Flax + + +

Back to Server.Items

+

Flax : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: PickWheelTarget

+ (static) void OnSpun( ISpinningWheel wheel, Mobile from, int hue )
+ (ctor) Flax()
+ (ctor) Flax( Serial serial )
+ (ctor) Flax( int amount )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FleshGolem.html b/Docs/types/FleshGolem.html new file mode 100644 index 0000000..1f62c96 --- /dev/null +++ b/Docs/types/FleshGolem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FleshGolem + + +

Back to Server.Mobiles

+

FleshGolem : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FleshGolem()
+ (ctor) FleshGolem( Serial serial )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FleshRenderer.html b/Docs/types/FleshRenderer.html new file mode 100644 index 0000000..3609b24 --- /dev/null +++ b/Docs/types/FleshRenderer.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - FleshRenderer + + +

Back to Server.Mobiles

+

FleshRenderer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FleshRenderer()
+ (ctor) FleshRenderer( Serial serial )
+ bool AreaPeaceImmune( get; )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ bool IgnoreYoungProtection( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FleshRipper.html b/Docs/types/FleshRipper.html new file mode 100644 index 0000000..2ab9acf --- /dev/null +++ b/Docs/types/FleshRipper.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FleshRipper + + +

Back to Server.Items

+

FleshRipper : AssassinSpike, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) FleshRipper()
+ (ctor) FleshRipper( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FletcherTools.html b/Docs/types/FletcherTools.html new file mode 100644 index 0000000..ec3104e --- /dev/null +++ b/Docs/types/FletcherTools.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FletcherTools + + +

Back to Server.Items

+

FletcherTools : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) FletcherTools()
+ (ctor) FletcherTools( int uses )
+ (ctor) FletcherTools( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FlipCommandHandlers.html b/Docs/types/FlipCommandHandlers.html new file mode 100644 index 0000000..56de759 --- /dev/null +++ b/Docs/types/FlipCommandHandlers.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FlipCommandHandlers + + +

Back to Server.Items

+

FlipCommandHandlers

+

Nested Types: FlipTarget

+ (static) void Flip_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) FlipCommandHandlers()
+ + diff --git a/Docs/types/FlipTarget.html b/Docs/types/FlipTarget.html new file mode 100644 index 0000000..86c20c7 --- /dev/null +++ b/Docs/types/FlipTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FlipTarget + + +

Back to Server.Items

+

(FlipCommandHandlers) - FlipTarget : Target

+ (ctor) FlipTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/FlipableAddonAttribute.html b/Docs/types/FlipableAddonAttribute.html new file mode 100644 index 0000000..31f1015 --- /dev/null +++ b/Docs/types/FlipableAddonAttribute.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FlipableAddonAttribute + + +

Back to Server.Items

+

FlipableAddonAttribute : Attribute, _Attribute

+ (ctor) FlipableAddonAttribute( Direction[] directions )
+ Direction[] Directions( get; )
+ void ClearComponents( Item item )
+ virtual void Flip( Mobile from, Item addon )
+ + diff --git a/Docs/types/FlipableAttribute.html b/Docs/types/FlipableAttribute.html new file mode 100644 index 0000000..44a876b --- /dev/null +++ b/Docs/types/FlipableAttribute.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FlipableAttribute + + +

Back to Server.Items

+

FlipableAttribute : Attribute, _Attribute

+ (ctor) FlipableAttribute()
+ (ctor) FlipableAttribute( int[] itemIDs )
+ int[] ItemIDs( get; )
+ virtual void Flip( Item item )
+ + diff --git a/Docs/types/FloppyHat.html b/Docs/types/FloppyHat.html new file mode 100644 index 0000000..a217410 --- /dev/null +++ b/Docs/types/FloppyHat.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - FloppyHat + + +

Back to Server.Items

+

FloppyHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) FloppyHat()
+ (ctor) FloppyHat( Serial serial )
+ (ctor) FloppyHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FlourMillEastAddon.html b/Docs/types/FlourMillEastAddon.html new file mode 100644 index 0000000..56ca772 --- /dev/null +++ b/Docs/types/FlourMillEastAddon.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - FlourMillEastAddon + + +

Back to Server.Items

+

FlourMillEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IFlourMill

+ (ctor) FlourMillEastAddon()
+ (ctor) FlourMillEastAddon( Serial serial )
+ int CurFlour( get; set; )
+ BaseAddonDeed Deed( get; )
+ bool HasFlour( get; )
+ bool IsFull( get; )
+ bool IsWorking( get; )
+ int MaxFlour( get; )
+ virtual void Deserialize( GenericReader reader )
+ int[] FindItemTable( int itemID )
+ void FinishWorking_Callback( object state )
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void StartWorking( Mobile from )
+ void UpdateStage()
+ void UpdateStage( FlourMillStage stage )
+ + diff --git a/Docs/types/FlourMillEastDeed.html b/Docs/types/FlourMillEastDeed.html new file mode 100644 index 0000000..d2941e8 --- /dev/null +++ b/Docs/types/FlourMillEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FlourMillEastDeed + + +

Back to Server.Items

+

FlourMillEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FlourMillEastDeed()
+ (ctor) FlourMillEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FlourMillSouthAddon.html b/Docs/types/FlourMillSouthAddon.html new file mode 100644 index 0000000..4e54d5b --- /dev/null +++ b/Docs/types/FlourMillSouthAddon.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - FlourMillSouthAddon + + +

Back to Server.Items

+

FlourMillSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IFlourMill

+ (ctor) FlourMillSouthAddon()
+ (ctor) FlourMillSouthAddon( Serial serial )
+ int CurFlour( get; set; )
+ BaseAddonDeed Deed( get; )
+ bool HasFlour( get; )
+ bool IsFull( get; )
+ bool IsWorking( get; )
+ int MaxFlour( get; )
+ virtual void Deserialize( GenericReader reader )
+ int[] FindItemTable( int itemID )
+ void FinishWorking_Callback( object state )
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void StartWorking( Mobile from )
+ void UpdateStage()
+ void UpdateStage( FlourMillStage stage )
+ + diff --git a/Docs/types/FlourMillSouthDeed.html b/Docs/types/FlourMillSouthDeed.html new file mode 100644 index 0000000..970e110 --- /dev/null +++ b/Docs/types/FlourMillSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FlourMillSouthDeed + + +

Back to Server.Items

+

FlourMillSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FlourMillSouthDeed()
+ (ctor) FlourMillSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FlourMillStage.html b/Docs/types/FlourMillStage.html new file mode 100644 index 0000000..f0340d8 --- /dev/null +++ b/Docs/types/FlourMillStage.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FlourMillStage + + +

Back to Server.Items

+

FlourMillStage (Enum)

+ Empty = 0,
+ Filled = 1,
+ Working = 2
+ + diff --git a/Docs/types/FlourSifter.html b/Docs/types/FlourSifter.html new file mode 100644 index 0000000..0fb642c --- /dev/null +++ b/Docs/types/FlourSifter.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FlourSifter + + +

Back to Server.Items

+

FlourSifter : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) FlourSifter()
+ (ctor) FlourSifter( int uses )
+ (ctor) FlourSifter( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FlowerGarland.html b/Docs/types/FlowerGarland.html new file mode 100644 index 0000000..513e7cd --- /dev/null +++ b/Docs/types/FlowerGarland.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - FlowerGarland + + +

Back to Server.Items

+

FlowerGarland : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) FlowerGarland()
+ (ctor) FlowerGarland( Serial serial )
+ (ctor) FlowerGarland( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FlowersArtifact.html b/Docs/types/FlowersArtifact.html new file mode 100644 index 0000000..2c7ea73 --- /dev/null +++ b/Docs/types/FlowersArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FlowersArtifact + + +

Back to Server.Items

+

FlowersArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FlowersArtifact()
+ (ctor) FlowersArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FluteOfRenewal.html b/Docs/types/FluteOfRenewal.html new file mode 100644 index 0000000..24bdce8 --- /dev/null +++ b/Docs/types/FluteOfRenewal.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FluteOfRenewal + + +

Back to Server.Items

+

FluteOfRenewal : BambooFlute, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) FluteOfRenewal()
+ (ctor) FluteOfRenewal( Serial serial )
+ int InitMaxUses( get; )
+ int InitMinUses( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FocusAttack.html b/Docs/types/FocusAttack.html new file mode 100644 index 0000000..052a3c1 --- /dev/null +++ b/Docs/types/FocusAttack.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - FocusAttack + + +

Back to Server.Spells.Ninjitsu

+

FocusAttack : NinjaMove

+ (ctor) FocusAttack()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ double RequiredSkill( get; )
+ virtual double GetDamageScalar( Mobile attacker, Mobile defender )
+ virtual double GetPropertyBonus( Mobile attacker )
+ virtual bool OnBeforeDamage( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/FoldedSteelGlasses.html b/Docs/types/FoldedSteelGlasses.html new file mode 100644 index 0000000..9b89c5d --- /dev/null +++ b/Docs/types/FoldedSteelGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - FoldedSteelGlasses + + +

Back to Server.Items

+

FoldedSteelGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FoldedSteelGlasses()
+ (ctor) FoldedSteelGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FollowMessage.html b/Docs/types/FollowMessage.html new file mode 100644 index 0000000..3b497cd --- /dev/null +++ b/Docs/types/FollowMessage.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - FollowMessage + + +

Back to Server.Network

+

FollowMessage : Packet

+ (ctor) FollowMessage( Serial serial1, Serial serial2 )
+ + diff --git a/Docs/types/Food.html b/Docs/types/Food.html new file mode 100644 index 0000000..786a930 --- /dev/null +++ b/Docs/types/Food.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Food + + +

Back to Server.Items

+

Food : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: Apple, ApplePie, AwaseMisoSoup, Bacon, Banana, Bananas, BentoBox, BreadLoaf, Cabbage, Cake, CandyCane, Cantaloupe, Carrot, CheesePizza, CheeseSlice, CheeseWedge, CheeseWheel, ChickenLeg, Coconut, CookedBird, Cookies, Dates, EarOfCorn, FishSteak, FrenchBread, FriedEggs, FruitBasket, FruitPie, GingerBreadCookie, Grapes, GreenGourd, GreenTea, Ham, HoneydewMelon, LambLeg, Lemon, Lemons, Lettuce, Lime, Limes, MeatPie, MisoSoup, Muffins, Onion, OpenCoconut, Peach, PeachCobbler, Pear, PewterBowlOfCarrots, PewterBowlOfCorn, PewterBowlOfLettuce, PewterBowlOfPeas, PewterBowlOfPotatos, Pumpkin, PumpkinPie, Quiche, RedMisoSoup, Ribs, RoastPig, Sausage, SausagePizza, SlabOfBacon, SmallPumpkin, SmallWatermelon, Spam, SplitCoconut, Squash, SushiPlatter, SushiRolls, Turnip, WasabiClumps, Watermelon, WhiteMisoSoup, WoodenBowlOfCarrots, WoodenBowlOfCorn, WoodenBowlOfLettuce, WoodenBowlOfPeas, WoodenBowlOfStew, WoodenBowlOfTomatoSoup, YellowGourd

+ (static) bool FillHunger( Mobile from, int fillFactor )
+ (ctor) Food( Serial serial )
+ (ctor) Food( int itemID )
+ (ctor) Food( int amount, int itemID )
+ int FillFactor( get; set; )
+ Poison Poison( get; set; )
+ Mobile Poisoner( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FoodDecayTimer.html b/Docs/types/FoodDecayTimer.html new file mode 100644 index 0000000..0fc0090 --- /dev/null +++ b/Docs/types/FoodDecayTimer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FoodDecayTimer + + +

Back to Server.Misc

+

FoodDecayTimer : Timer

+ (static) void FoodDecay()
+ (static) void HungerDecay( Mobile m )
+ (static) void Initialize()
+ (static) void ThirstDecay( Mobile m )
+ (ctor) FoodDecayTimer()
+ virtual void OnTick()
+ + diff --git a/Docs/types/FoodInfo.html b/Docs/types/FoodInfo.html new file mode 100644 index 0000000..3285273 --- /dev/null +++ b/Docs/types/FoodInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FoodInfo + + +

Back to Server.Spells.First

+

FoodInfo

+ (ctor) FoodInfo( Type type, string name )
+ string Name( get; set; )
+ Type Type( get; set; )
+ Item Create()
+ + diff --git a/Docs/types/FoodType.html b/Docs/types/FoodType.html new file mode 100644 index 0000000..77f0527 --- /dev/null +++ b/Docs/types/FoodType.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FoodType + + +

Back to Server.Mobiles

+

FoodType (Enum)

+ None = 0x00000000,
+ Meat = 0x00000001,
+ FruitsAndVegies = 0x00000002,
+ GrainsAndHay = 0x00000004,
+ Fish = 0x00000008,
+ Eggs = 0x00000010,
+ Gold = 0x00000020
+ + diff --git a/Docs/types/FootStool.html b/Docs/types/FootStool.html new file mode 100644 index 0000000..df3acb0 --- /dev/null +++ b/Docs/types/FootStool.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FootStool + + +

Back to Server.Items

+

FootStool : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FootStool()
+ (ctor) FootStool( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ForensicEvaluation.html b/Docs/types/ForensicEvaluation.html new file mode 100644 index 0000000..956873b --- /dev/null +++ b/Docs/types/ForensicEvaluation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ForensicEvaluation + + +

Back to Server.SkillHandlers

+

ForensicEvaluation

+

Nested Types: ForensicTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) ForensicEvaluation()
+ + diff --git a/Docs/types/ForensicTarget.html b/Docs/types/ForensicTarget.html new file mode 100644 index 0000000..a3907f6 --- /dev/null +++ b/Docs/types/ForensicTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ForensicTarget + + +

Back to Server.SkillHandlers

+

(ForensicEvaluation) - ForensicTarget : Target

+ (ctor) ForensicTarget()
+ virtual void OnTarget( Mobile from, object target )
+ + diff --git a/Docs/types/ForestOstard.html b/Docs/types/ForestOstard.html new file mode 100644 index 0000000..81a3fa6 --- /dev/null +++ b/Docs/types/ForestOstard.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ForestOstard + + +

Back to Server.Mobiles

+

ForestOstard : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) ForestOstard()
+ (ctor) ForestOstard( Serial serial )
+ (ctor) ForestOstard( string name )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Forge.html b/Docs/types/Forge.html new file mode 100644 index 0000000..bc1b1a8 --- /dev/null +++ b/Docs/types/Forge.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Forge + + +

Back to Server.Items

+

Forge : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Forge()
+ (ctor) Forge( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ForgeAttribute.html b/Docs/types/ForgeAttribute.html new file mode 100644 index 0000000..ac7f086 --- /dev/null +++ b/Docs/types/ForgeAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ForgeAttribute + + +

Back to Server.Engines.Craft

+

ForgeAttribute : Attribute, _Attribute

+ (ctor) ForgeAttribute()
+ + diff --git a/Docs/types/ForgeComponent.html b/Docs/types/ForgeComponent.html new file mode 100644 index 0000000..3f85143 --- /dev/null +++ b/Docs/types/ForgeComponent.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ForgeComponent + + +

Back to Server.Items

+

ForgeComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) ForgeComponent( int itemID )
+ (ctor) ForgeComponent( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ForgedMetal.html b/Docs/types/ForgedMetal.html new file mode 100644 index 0000000..e22477c --- /dev/null +++ b/Docs/types/ForgedMetal.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ForgedMetal + + +

Back to Server.Items

+

ForgedMetal : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ForgedMetal()
+ (ctor) ForgedMetal( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Fork.html b/Docs/types/Fork.html new file mode 100644 index 0000000..5b690b1 --- /dev/null +++ b/Docs/types/Fork.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Fork + + +

Back to Server.Items

+

Fork : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Fork()
+ (ctor) Fork( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ForkLeft.html b/Docs/types/ForkLeft.html new file mode 100644 index 0000000..f0b662f --- /dev/null +++ b/Docs/types/ForkLeft.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ForkLeft + + +

Back to Server.Items

+

ForkLeft : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ForkLeft()
+ (ctor) ForkLeft( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ForkRight.html b/Docs/types/ForkRight.html new file mode 100644 index 0000000..28530b4 --- /dev/null +++ b/Docs/types/ForkRight.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ForkRight + + +

Back to Server.Items

+

ForkRight : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ForkRight()
+ (ctor) ForkRight( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FormalShirt.html b/Docs/types/FormalShirt.html new file mode 100644 index 0000000..de7c01e --- /dev/null +++ b/Docs/types/FormalShirt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FormalShirt + + +

Back to Server.Items

+

FormalShirt : BaseMiddleTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FormalShirt()
+ (ctor) FormalShirt( int hue )
+ (ctor) FormalShirt( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FortuneTeller.html b/Docs/types/FortuneTeller.html new file mode 100644 index 0000000..280ef62 --- /dev/null +++ b/Docs/types/FortuneTeller.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - FortuneTeller + + +

Back to Server.Mobiles

+

FortuneTeller : BaseHealer, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) FortuneTeller()
+ (ctor) FortuneTeller( Serial serial )
+ bool CanTeach( get; )
+ bool IsActiveVendor( get; )
+ bool IsInvulnerable( get; )
+ virtual bool CheckTeach( SkillName skill, Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetRobeColor()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FoundationType.html b/Docs/types/FoundationType.html new file mode 100644 index 0000000..f40afc9 --- /dev/null +++ b/Docs/types/FoundationType.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - FoundationType + + +

Back to Server.Multis

+

FoundationType (Enum)

+ Stone = 0,
+ DarkWood = 1,
+ LightWood = 2,
+ Dungeon = 3,
+ Brick = 4,
+ ElvenGrey = 5,
+ ElvenNatural = 6,
+ Crystal = 7,
+ Shadow = 8
+ + diff --git a/Docs/types/FountainAddon.html b/Docs/types/FountainAddon.html new file mode 100644 index 0000000..3670580 --- /dev/null +++ b/Docs/types/FountainAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FountainAddon + + +

Back to Server.Items

+

FountainAddon : StoneFountainAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) FountainAddon()
+ (ctor) FountainAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FountainDeed.html b/Docs/types/FountainDeed.html new file mode 100644 index 0000000..1816eef --- /dev/null +++ b/Docs/types/FountainDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FountainDeed + + +

Back to Server.Items

+

FountainDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FountainDeed()
+ (ctor) FountainDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FountainOfLife.html b/Docs/types/FountainOfLife.html new file mode 100644 index 0000000..936d957 --- /dev/null +++ b/Docs/types/FountainOfLife.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - FountainOfLife + + +

Back to Server.Items

+

FountainOfLife : BaseAddonContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) FountainOfLife()
+ (ctor) FountainOfLife( int charges )
+ (ctor) FountainOfLife( Serial serial )
+ int Charges( get; set; )
+ BaseAddonContainerDeed Deed( get; )
+ int DefaultDropSound( get; )
+ int DefaultGumpID( get; )
+ int DefaultMaxItems( get; )
+ int LabelNumber( get; )
+ TimeSpan RechargeTime( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Enhance()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDelete()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual bool OnDragLift( Mobile from )
+ void Recharge()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FountainOfLifeDeed.html b/Docs/types/FountainOfLifeDeed.html new file mode 100644 index 0000000..4e3df26 --- /dev/null +++ b/Docs/types/FountainOfLifeDeed.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FountainOfLifeDeed + + +

Back to Server.Items

+

FountainOfLifeDeed : BaseAddonContainerDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) FountainOfLifeDeed()
+ (ctor) FountainOfLifeDeed( Serial serial )
+ (ctor) FountainOfLifeDeed( int charges )
+ BaseAddonContainer Addon( get; )
+ int Charges( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FourthTrialCatsConversation.html b/Docs/types/FourthTrialCatsConversation.html new file mode 100644 index 0000000..c8c2164 --- /dev/null +++ b/Docs/types/FourthTrialCatsConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FourthTrialCatsConversation + + +

Back to Server.Engines.Quests.Samurai

+

FourthTrialCatsConversation : QuestConversation

+ (ctor) FourthTrialCatsConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/FourthTrialCatsObjective.html b/Docs/types/FourthTrialCatsObjective.html new file mode 100644 index 0000000..62a6ec9 --- /dev/null +++ b/Docs/types/FourthTrialCatsObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FourthTrialCatsObjective + + +

Back to Server.Engines.Quests.Samurai

+

FourthTrialCatsObjective : QuestObjective

+ (ctor) FourthTrialCatsObjective()
+ object Message( get; )
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ + diff --git a/Docs/types/FourthTrialIntroConversation.html b/Docs/types/FourthTrialIntroConversation.html new file mode 100644 index 0000000..7a99fe8 --- /dev/null +++ b/Docs/types/FourthTrialIntroConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FourthTrialIntroConversation + + +

Back to Server.Engines.Quests.Samurai

+

FourthTrialIntroConversation : QuestConversation

+ (ctor) FourthTrialIntroConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/FourthTrialIntroObjective.html b/Docs/types/FourthTrialIntroObjective.html new file mode 100644 index 0000000..ed8550b --- /dev/null +++ b/Docs/types/FourthTrialIntroObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FourthTrialIntroObjective + + +

Back to Server.Engines.Quests.Samurai

+

FourthTrialIntroObjective : QuestObjective

+ (ctor) FourthTrialIntroObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FourthTrialReturnObjective.html b/Docs/types/FourthTrialReturnObjective.html new file mode 100644 index 0000000..bda4ff8 --- /dev/null +++ b/Docs/types/FourthTrialReturnObjective.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FourthTrialReturnObjective + + +

Back to Server.Engines.Quests.Samurai

+

FourthTrialReturnObjective : QuestObjective

+ (ctor) FourthTrialReturnObjective()
+ (ctor) FourthTrialReturnObjective( bool killedCat )
+ bool KilledCat( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/FreeTimer.html b/Docs/types/FreeTimer.html new file mode 100644 index 0000000..726e097 --- /dev/null +++ b/Docs/types/FreeTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FreeTimer + + +

Back to Server.Items

+

(EffectItem) - FreeTimer : Timer

+ (ctor) FreeTimer( EffectItem item, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/FrenchBread.html b/Docs/types/FrenchBread.html new file mode 100644 index 0000000..8531658 --- /dev/null +++ b/Docs/types/FrenchBread.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FrenchBread + + +

Back to Server.Items

+

FrenchBread : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FrenchBread()
+ (ctor) FrenchBread( int amount )
+ (ctor) FrenchBread( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FrenziedOstard.html b/Docs/types/FrenziedOstard.html new file mode 100644 index 0000000..decb9cb --- /dev/null +++ b/Docs/types/FrenziedOstard.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - FrenziedOstard + + +

Back to Server.Mobiles

+

FrenziedOstard : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) FrenziedOstard()
+ (ctor) FrenziedOstard( Serial serial )
+ (ctor) FrenziedOstard( string name )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FrenziedWhirlwind.html b/Docs/types/FrenziedWhirlwind.html new file mode 100644 index 0000000..2e860ba --- /dev/null +++ b/Docs/types/FrenziedWhirlwind.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FrenziedWhirlwind + + +

Back to Server.Items

+

FrenziedWhirlwind : WeaponAbility

+

Nested Types: InternalTimer

+ (static) Hashtable Registry( get; )
+ (ctor) FrenziedWhirlwind()
+ int BaseMana( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ void RepeatEffect( object state )
+ + diff --git a/Docs/types/FriedEggs.html b/Docs/types/FriedEggs.html new file mode 100644 index 0000000..385fe7e --- /dev/null +++ b/Docs/types/FriedEggs.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FriedEggs + + +

Back to Server.Items

+

FriedEggs : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FriedEggs()
+ (ctor) FriedEggs( int amount )
+ (ctor) FriedEggs( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FriendlyNameAttribute.html b/Docs/types/FriendlyNameAttribute.html new file mode 100644 index 0000000..3835db7 --- /dev/null +++ b/Docs/types/FriendlyNameAttribute.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FriendlyNameAttribute + + +

Back to Server.Mobiles

+

FriendlyNameAttribute : Attribute, _Attribute

+ (static) TextDefinition GetFriendlyNameFor( Type t )
+ (ctor) FriendlyNameAttribute( TextDefinition friendlyName )
+ TextDefinition FriendlyName( get; )
+ + diff --git a/Docs/types/Froe.html b/Docs/types/Froe.html new file mode 100644 index 0000000..86e7089 --- /dev/null +++ b/Docs/types/Froe.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Froe + + +

Back to Server.Items

+

Froe : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Froe()
+ (ctor) Froe( int uses )
+ (ctor) Froe( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FropozJournal.html b/Docs/types/FropozJournal.html new file mode 100644 index 0000000..5242a2b --- /dev/null +++ b/Docs/types/FropozJournal.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FropozJournal + + +

Back to Server.Items

+

FropozJournal : RedBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) FropozJournal()
+ (ctor) FropozJournal( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FrostOoze.html b/Docs/types/FrostOoze.html new file mode 100644 index 0000000..17bb11d --- /dev/null +++ b/Docs/types/FrostOoze.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FrostOoze + + +

Back to Server.Mobiles

+

FrostOoze : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FrostOoze()
+ (ctor) FrostOoze( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FrostSpider.html b/Docs/types/FrostSpider.html new file mode 100644 index 0000000..fbe8af4 --- /dev/null +++ b/Docs/types/FrostSpider.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FrostSpider + + +

Back to Server.Mobiles

+

FrostSpider : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FrostSpider()
+ (ctor) FrostSpider( Serial serial )
+ FoodType FavoriteFood( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FrostTroll.html b/Docs/types/FrostTroll.html new file mode 100644 index 0000000..28efff0 --- /dev/null +++ b/Docs/types/FrostTroll.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - FrostTroll + + +

Back to Server.Mobiles

+

FrostTroll : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) FrostTroll()
+ (ctor) FrostTroll( Serial serial )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Frostbringer.html b/Docs/types/Frostbringer.html new file mode 100644 index 0000000..9624855 --- /dev/null +++ b/Docs/types/Frostbringer.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Frostbringer + + +

Back to Server.Items

+

Frostbringer : Bow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Frostbringer()
+ (ctor) Frostbringer( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FrostwoodBoard.html b/Docs/types/FrostwoodBoard.html new file mode 100644 index 0000000..f7a2055 --- /dev/null +++ b/Docs/types/FrostwoodBoard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FrostwoodBoard + + +

Back to Server.Items

+

FrostwoodBoard : Board, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) FrostwoodBoard()
+ (ctor) FrostwoodBoard( int amount )
+ (ctor) FrostwoodBoard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FrostwoodLog.html b/Docs/types/FrostwoodLog.html new file mode 100644 index 0000000..bef4124 --- /dev/null +++ b/Docs/types/FrostwoodLog.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FrostwoodLog + + +

Back to Server.Items

+

FrostwoodLog : Log, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IAxe

+ (ctor) FrostwoodLog()
+ (ctor) FrostwoodLog( Serial serial )
+ (ctor) FrostwoodLog( int amount )
+ virtual bool Axe( Mobile from, BaseAxe axe )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FrozenTimer.html b/Docs/types/FrozenTimer.html new file mode 100644 index 0000000..024fdb5 --- /dev/null +++ b/Docs/types/FrozenTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FrozenTimer + + +

Back to Server

+

(Mobile) - FrozenTimer : Timer

+ (ctor) FrozenTimer( Mobile m, TimeSpan duration )
+ virtual void OnTick()
+ + diff --git a/Docs/types/FruitBasket.html b/Docs/types/FruitBasket.html new file mode 100644 index 0000000..c8cbecd --- /dev/null +++ b/Docs/types/FruitBasket.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FruitBasket + + +

Back to Server.Items

+

FruitBasket : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FruitBasket()
+ (ctor) FruitBasket( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FruitPie.html b/Docs/types/FruitPie.html new file mode 100644 index 0000000..1a1e004 --- /dev/null +++ b/Docs/types/FruitPie.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FruitPie + + +

Back to Server.Items

+

FruitPie : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FruitPie()
+ (ctor) FruitPie( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Fukiya.html b/Docs/types/Fukiya.html new file mode 100644 index 0000000..9d667b0 --- /dev/null +++ b/Docs/types/Fukiya.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - Fukiya + + +

Back to Server.Items

+

Fukiya : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, INinjaWeapon, IUsesRemaining

+ (ctor) Fukiya()
+ (ctor) Fukiya( Serial serial )
+ Type AmmoType( get; )
+ int EmptyWeaponMessage( get; )
+ int FullWeaponMessage( get; )
+ int NoFreeHandMessage( get; )
+ Poison Poison( get; set; )
+ int PoisonCharges( get; set; )
+ int RecentlyUsedMessage( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ int WeaponDamage( get; )
+ int WeaponMaxRange( get; )
+ int WeaponMinRange( get; )
+ int WrongAmmoMessage( get; )
+ virtual void AttackAnimation( Mobile from, Mobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FukiyaDarts.html b/Docs/types/FukiyaDarts.html new file mode 100644 index 0000000..73bbc11 --- /dev/null +++ b/Docs/types/FukiyaDarts.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - FukiyaDarts + + +

Back to Server.Items

+

FukiyaDarts : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, INinjaAmmo, IUsesRemaining

+ (ctor) FukiyaDarts()
+ (ctor) FukiyaDarts( Serial serial )
+ (ctor) FukiyaDarts( int amount )
+ Poison Poison( get; set; )
+ int PoisonCharges( get; set; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FullApron.html b/Docs/types/FullApron.html new file mode 100644 index 0000000..59432b6 --- /dev/null +++ b/Docs/types/FullApron.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FullApron + + +

Back to Server.Items

+

FullApron : BaseMiddleTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FullApron()
+ (ctor) FullApron( int hue )
+ (ctor) FullApron( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FullBackpackConversation.html b/Docs/types/FullBackpackConversation.html new file mode 100644 index 0000000..bc4ede1 --- /dev/null +++ b/Docs/types/FullBackpackConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - FullBackpackConversation + + +

Back to Server.Engines.Quests.Naturalist

+

FullBackpackConversation : QuestConversation

+ (ctor) FullBackpackConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/FullBookcase.html b/Docs/types/FullBookcase.html new file mode 100644 index 0000000..22f5108 --- /dev/null +++ b/Docs/types/FullBookcase.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FullBookcase + + +

Back to Server.Items

+

FullBookcase : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FullBookcase()
+ (ctor) FullBookcase( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FullEndConversation.html b/Docs/types/FullEndConversation.html new file mode 100644 index 0000000..cbf9103 --- /dev/null +++ b/Docs/types/FullEndConversation.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FullEndConversation + + +

Back to Server.Engines.Quests.Collector

+

FullEndConversation : QuestConversation

+ (ctor) FullEndConversation()
+ (ctor) FullEndConversation( bool logged )
+ bool Logged( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/FullVialsWRack.html b/Docs/types/FullVialsWRack.html new file mode 100644 index 0000000..143a896 --- /dev/null +++ b/Docs/types/FullVialsWRack.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - FullVialsWRack + + +

Back to Server.Items

+

FullVialsWRack : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) FullVialsWRack()
+ (ctor) FullVialsWRack( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FurBoots.html b/Docs/types/FurBoots.html new file mode 100644 index 0000000..d85b1d7 --- /dev/null +++ b/Docs/types/FurBoots.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - FurBoots + + +

Back to Server.Items

+

FurBoots : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: PadsOfTheCuSidhe

+ (ctor) FurBoots()
+ (ctor) FurBoots( int hue )
+ (ctor) FurBoots( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FurCape.html b/Docs/types/FurCape.html new file mode 100644 index 0000000..dac8280 --- /dev/null +++ b/Docs/types/FurCape.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FurCape + + +

Back to Server.Items

+

FurCape : BaseCloak, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FurCape()
+ (ctor) FurCape( int hue )
+ (ctor) FurCape( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FurSarong.html b/Docs/types/FurSarong.html new file mode 100644 index 0000000..ac8e7e4 --- /dev/null +++ b/Docs/types/FurSarong.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - FurSarong + + +

Back to Server.Items

+

FurSarong : BaseOuterLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) FurSarong()
+ (ctor) FurSarong( int hue )
+ (ctor) FurSarong( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FurnitureAttribute.html b/Docs/types/FurnitureAttribute.html new file mode 100644 index 0000000..46588e6 --- /dev/null +++ b/Docs/types/FurnitureAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FurnitureAttribute + + +

Back to Server

+

FurnitureAttribute : Attribute, _Attribute

+ (static) bool Check( Item item )
+ (ctor) FurnitureAttribute()
+ + diff --git a/Docs/types/FurnitureDyeTub.html b/Docs/types/FurnitureDyeTub.html new file mode 100644 index 0000000..eb42610 --- /dev/null +++ b/Docs/types/FurnitureDyeTub.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - FurnitureDyeTub + + +

Back to Server.Items

+

FurnitureDyeTub : DyeTub, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, IRewardItem

+ (ctor) FurnitureDyeTub()
+ (ctor) FurnitureDyeTub( Serial serial )
+ bool AllowDyables( get; )
+ bool AllowFurniture( get; )
+ int FailMessage( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int TargetMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/FurnitureTimer.html b/Docs/types/FurnitureTimer.html new file mode 100644 index 0000000..ec66230 --- /dev/null +++ b/Docs/types/FurnitureTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FurnitureTimer + + +

Back to Server.Items

+

FurnitureTimer : Timer

+ (ctor) FurnitureTimer( Container c, Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/FurrowsGreenThornsEffect.html b/Docs/types/FurrowsGreenThornsEffect.html new file mode 100644 index 0000000..e23ba60 --- /dev/null +++ b/Docs/types/FurrowsGreenThornsEffect.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - FurrowsGreenThornsEffect + + +

Back to Server.Items

+

FurrowsGreenThornsEffect : GreenThornsEffect

+ (ctor) FurrowsGreenThornsEffect( Point3D location, Map map, Mobile from )
+ virtual TimeSpan Play( int step )
+ + diff --git a/Docs/types/Furtrader.html b/Docs/types/Furtrader.html new file mode 100644 index 0000000..0c4179a --- /dev/null +++ b/Docs/types/Furtrader.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Furtrader + + +

Back to Server.Mobiles

+

Furtrader : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Furtrader()
+ (ctor) Furtrader( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Futon.html b/Docs/types/Futon.html new file mode 100644 index 0000000..e4fe679 --- /dev/null +++ b/Docs/types/Futon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Futon + + +

Back to Server.Items

+

Futon : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Futon()
+ (ctor) Futon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GMItemPacket.html b/Docs/types/GMItemPacket.html new file mode 100644 index 0000000..4139b70 --- /dev/null +++ b/Docs/types/GMItemPacket.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - GMItemPacket + + +

Back to Server.Items

+

(LOSBlocker) - GMItemPacket : Packet

+ (ctor) GMItemPacket( Item item )
+ + diff --git a/Docs/types/GMRobe.html b/Docs/types/GMRobe.html new file mode 100644 index 0000000..ed53bf8 --- /dev/null +++ b/Docs/types/GMRobe.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GMRobe + + +

Back to Server.Items

+

GMRobe : BaseSuit, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GMRobe()
+ (ctor) GMRobe( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GQCount.html b/Docs/types/GQCount.html new file mode 100644 index 0000000..0ab702b --- /dev/null +++ b/Docs/types/GQCount.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - GQCount + + +

Back to Server.Network

+

GQCount : Packet

+ (ctor) GQCount( int unk, int count )
+ + diff --git a/Docs/types/GQRequest.html b/Docs/types/GQRequest.html new file mode 100644 index 0000000..5ecf20e --- /dev/null +++ b/Docs/types/GQRequest.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - GQRequest + + +

Back to Server.Network

+

GQRequest : Packet

+ (ctor) GQRequest()
+ + diff --git a/Docs/types/GabrielAutographConversation.html b/Docs/types/GabrielAutographConversation.html new file mode 100644 index 0000000..54c46b6 --- /dev/null +++ b/Docs/types/GabrielAutographConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GabrielAutographConversation + + +

Back to Server.Engines.Quests.Collector

+

GabrielAutographConversation : QuestConversation

+ (ctor) GabrielAutographConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/GabrielIgnoreConversation.html b/Docs/types/GabrielIgnoreConversation.html new file mode 100644 index 0000000..2747b23 --- /dev/null +++ b/Docs/types/GabrielIgnoreConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GabrielIgnoreConversation + + +

Back to Server.Engines.Quests.Collector

+

GabrielIgnoreConversation : QuestConversation

+ (ctor) GabrielIgnoreConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/GabrielNoSheetMusicConversation.html b/Docs/types/GabrielNoSheetMusicConversation.html new file mode 100644 index 0000000..0ab5ef1 --- /dev/null +++ b/Docs/types/GabrielNoSheetMusicConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GabrielNoSheetMusicConversation + + +

Back to Server.Engines.Quests.Collector

+

GabrielNoSheetMusicConversation : QuestConversation

+ (ctor) GabrielNoSheetMusicConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/GabrielPiete.html b/Docs/types/GabrielPiete.html new file mode 100644 index 0000000..18c9e9c --- /dev/null +++ b/Docs/types/GabrielPiete.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GabrielPiete + + +

Back to Server.Engines.Quests.Collector

+

GabrielPiete : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) GabrielPiete()
+ (ctor) GabrielPiete( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GabrielSheetMusicConversation.html b/Docs/types/GabrielSheetMusicConversation.html new file mode 100644 index 0000000..b944379 --- /dev/null +++ b/Docs/types/GabrielSheetMusicConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GabrielSheetMusicConversation + + +

Back to Server.Engines.Quests.Collector

+

GabrielSheetMusicConversation : QuestConversation

+ (ctor) GabrielSheetMusicConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/GainInnInformationConversation.html b/Docs/types/GainInnInformationConversation.html new file mode 100644 index 0000000..28d3f70 --- /dev/null +++ b/Docs/types/GainInnInformationConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GainInnInformationConversation + + +

Back to Server.Engines.Quests.Ninja

+

GainInnInformationConversation : QuestConversation

+ (ctor) GainInnInformationConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/GainInnInformationObjective.html b/Docs/types/GainInnInformationObjective.html new file mode 100644 index 0000000..75649bd --- /dev/null +++ b/Docs/types/GainInnInformationObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GainInnInformationObjective + + +

Back to Server.Engines.Quests.Ninja

+

GainInnInformationObjective : QuestObjective

+ (ctor) GainInnInformationObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/GainKarmaConversation.html b/Docs/types/GainKarmaConversation.html new file mode 100644 index 0000000..d389b42 --- /dev/null +++ b/Docs/types/GainKarmaConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GainKarmaConversation + + +

Back to Server.Engines.Quests.Samurai

+

GainKarmaConversation : QuestConversation

+ (ctor) GainKarmaConversation()
+ (ctor) GainKarmaConversation( bool cursedSoul )
+ bool Logged( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ + diff --git a/Docs/types/Gaman.html b/Docs/types/Gaman.html new file mode 100644 index 0000000..1778d68 --- /dev/null +++ b/Docs/types/Gaman.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Gaman + + +

Back to Server.Mobiles

+

Gaman : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Gaman()
+ (ctor) Gaman( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GamblingStone.html b/Docs/types/GamblingStone.html new file mode 100644 index 0000000..82fe079 --- /dev/null +++ b/Docs/types/GamblingStone.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GamblingStone + + +

Back to Server.Items

+

GamblingStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GamblingStone()
+ (ctor) GamblingStone( Serial serial )
+ string DefaultName( get; )
+ int GamblePot( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GameGump.html b/Docs/types/GameGump.html new file mode 100644 index 0000000..8e06d12 --- /dev/null +++ b/Docs/types/GameGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GameGump + + +

Back to Server.Items

+

(ControlPanel) - GameGump : Gump

+

Nested Types: NodeHue

+ (ctor) GameGump( ControlPanel panel, Mobile from, int step, bool hint )
+ void AddNode( int x, int y, NodeHue hue )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/GameLoginEventArgs.html b/Docs/types/GameLoginEventArgs.html new file mode 100644 index 0000000..b2ac276 --- /dev/null +++ b/Docs/types/GameLoginEventArgs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GameLoginEventArgs + + +

Back to Server

+

GameLoginEventArgs : EventArgs

+ (ctor) GameLoginEventArgs( NetState state, string un, string pw )
+ bool Accepted( get; set; )
+ CityInfo[] CityInfo( get; set; )
+ string Password( get; )
+ NetState State( get; )
+ string Username( get; )
+ + diff --git a/Docs/types/GameLoginEventHandler.html b/Docs/types/GameLoginEventHandler.html new file mode 100644 index 0000000..d34e50a --- /dev/null +++ b/Docs/types/GameLoginEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GameLoginEventHandler + + +

Back to Server

+

GameLoginEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) GameLoginEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( GameLoginEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( GameLoginEventArgs e )
+ + diff --git a/Docs/types/Gargoyle.html b/Docs/types/Gargoyle.html new file mode 100644 index 0000000..de1dbbc --- /dev/null +++ b/Docs/types/Gargoyle.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Gargoyle + + +

Back to Server.Mobiles

+

Gargoyle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Gargoyle()
+ (ctor) Gargoyle( Serial serial )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GargoyleDestroyer.html b/Docs/types/GargoyleDestroyer.html new file mode 100644 index 0000000..df02c43 --- /dev/null +++ b/Docs/types/GargoyleDestroyer.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GargoyleDestroyer + + +

Back to Server.Mobiles

+

GargoyleDestroyer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GargoyleDestroyer()
+ (ctor) GargoyleDestroyer( Serial serial )
+ bool BardImmune( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnDamagedBySpell( Mobile from )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ void ThrowHatchet( Mobile to )
+ + diff --git a/Docs/types/GargoyleEnforcer.html b/Docs/types/GargoyleEnforcer.html new file mode 100644 index 0000000..b88c93a --- /dev/null +++ b/Docs/types/GargoyleEnforcer.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GargoyleEnforcer + + +

Back to Server.Mobiles

+

GargoyleEnforcer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GargoyleEnforcer()
+ (ctor) GargoyleEnforcer( Serial serial )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GargoylesPickaxe.html b/Docs/types/GargoylesPickaxe.html new file mode 100644 index 0000000..7e0a3de --- /dev/null +++ b/Docs/types/GargoylesPickaxe.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - GargoylesPickaxe + + +

Back to Server.Items

+

GargoylesPickaxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+ (ctor) GargoylesPickaxe()
+ (ctor) GargoylesPickaxe( Serial serial )
+ (ctor) GargoylesPickaxe( int uses )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ HarvestSystem HarvestSystem( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Garlic.html b/Docs/types/Garlic.html new file mode 100644 index 0000000..cb6034a --- /dev/null +++ b/Docs/types/Garlic.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Garlic + + +

Back to Server.Items

+

Garlic : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Garlic()
+ (ctor) Garlic( Serial serial )
+ (ctor) Garlic( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GasTrap.html b/Docs/types/GasTrap.html new file mode 100644 index 0000000..74be92e --- /dev/null +++ b/Docs/types/GasTrap.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - GasTrap + + +

Back to Server.Items

+

GasTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetBaseID( GasTrapType type )
+ (ctor) GasTrap()
+ (ctor) GasTrap( GasTrapType type )
+ (ctor) GasTrap( Poison poison )
+ (ctor) GasTrap( Serial serial )
+ (ctor) GasTrap( GasTrapType type, Poison poison )
+ bool PassivelyTriggered( get; )
+ TimeSpan PassiveTriggerDelay( get; )
+ int PassiveTriggerRange( get; )
+ Poison Poison( get; set; )
+ TimeSpan ResetDelay( get; )
+ GasTrapType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnTrigger( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GasTrapType.html b/Docs/types/GasTrapType.html new file mode 100644 index 0000000..87d0061 --- /dev/null +++ b/Docs/types/GasTrapType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GasTrapType + + +

Back to Server.Items

+

GasTrapType (Enum)

+ NorthWall = 0,
+ WestWall = 1,
+ Floor = 2
+ + diff --git a/Docs/types/GateTravelScroll.html b/Docs/types/GateTravelScroll.html new file mode 100644 index 0000000..93a37b9 --- /dev/null +++ b/Docs/types/GateTravelScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GateTravelScroll + + +

Back to Server.Items

+

GateTravelScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) GateTravelScroll()
+ (ctor) GateTravelScroll( int amount )
+ (ctor) GateTravelScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GateTravelSpell.html b/Docs/types/GateTravelSpell.html new file mode 100644 index 0000000..7815149 --- /dev/null +++ b/Docs/types/GateTravelSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GateTravelSpell + + +

Back to Server.Spells.Seventh

+

GateTravelSpell : MagerySpell, ISpell

+

Nested Types: InternalItem, InternalTarget

+ (ctor) GateTravelSpell( Mobile caster, Item scroll )
+ (ctor) GateTravelSpell( Mobile caster, Item scroll, RunebookEntry entry )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ void Effect( Point3D loc, Map map, bool checkMulti )
+ bool GateExistsAt( Map map, Point3D loc )
+ virtual void OnCast()
+ + diff --git a/Docs/types/GatherFungiConversation.html b/Docs/types/GatherFungiConversation.html new file mode 100644 index 0000000..44b7c90 --- /dev/null +++ b/Docs/types/GatherFungiConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GatherFungiConversation + + +

Back to Server.Engines.Quests.Ambitious

+

GatherFungiConversation : QuestConversation

+ (ctor) GatherFungiConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/GatherFungiObjective.html b/Docs/types/GatherFungiObjective.html new file mode 100644 index 0000000..7c8d537 --- /dev/null +++ b/Docs/types/GatherFungiObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GatherFungiObjective + + +

Back to Server.Engines.Quests.Ambitious

+

GatherFungiObjective : QuestObjective

+ (ctor) GatherFungiObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/GatherWaterConversation.html b/Docs/types/GatherWaterConversation.html new file mode 100644 index 0000000..3505ceb --- /dev/null +++ b/Docs/types/GatherWaterConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GatherWaterConversation + + +

Back to Server.Engines.Quests.Matriarch

+

GatherWaterConversation : QuestConversation

+ (ctor) GatherWaterConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/GatherWaterObjective.html b/Docs/types/GatherWaterObjective.html new file mode 100644 index 0000000..649701c --- /dev/null +++ b/Docs/types/GatherWaterObjective.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GatherWaterObjective + + +

Back to Server.Engines.Quests.Matriarch

+

GatherWaterObjective : QuestObjective

+ (ctor) GatherWaterObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual void OnComplete()
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/GauntletRegion.html b/Docs/types/GauntletRegion.html new file mode 100644 index 0000000..4fafe2c --- /dev/null +++ b/Docs/types/GauntletRegion.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GauntletRegion + + +

Back to Server.Engines.Doom

+

GauntletRegion : BaseRegion, IComparable

+ (ctor) GauntletRegion( GauntletSpawner spawner, Map map )
+ virtual void AlterLightLevel( Mobile m, ref int global, ref int personal )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ + diff --git a/Docs/types/GauntletSpawner.html b/Docs/types/GauntletSpawner.html new file mode 100644 index 0000000..bd822e3 --- /dev/null +++ b/Docs/types/GauntletSpawner.html @@ -0,0 +1,44 @@ + + + RunUO Documentation - Class Overview - GauntletSpawner + + +

Back to Server.Engines.Doom

+

GauntletSpawner : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) BaseDoor CreateDoorSet( int xDoor, int yDoor, bool doorEastToWest, int hue )
+ (static) void CreateMorphItem( int x, int y, int inactiveItemID, int activeItemID, int range, int hue )
+ (static) void CreatePricedHealer( int price, int x, int y )
+ (static) GauntletSpawner CreateSpawner( string typeName, int xSpawner, int ySpawner, int xDoor, int yDoor, int xPentagram, int yPentagram, bool doorEastToWest, int xStart, int yStart, int xWidth, int yHeight )
+ (static) void CreateTeleporter( int xFrom, int yFrom, int xTo, int yTo )
+ (static) void CreateVarietyDealer( int x, int y )
+ (static) void GenGauntlet_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) GauntletSpawner()
+ (ctor) GauntletSpawner( string typeName )
+ (ctor) GauntletSpawner( Serial serial )
+ BaseAddon Addon( get; set; )
+ List<Mobile> Creatures( get; set; )
+ string DefaultName( get; )
+ BaseDoor Door( get; set; )
+ bool HasCompleted( get; )
+ Region Region( get; set; )
+ Rectangle2D RegionBounds( get; set; )
+ GauntletSpawner Sequence( get; set; )
+ GauntletSpawnerState State( get; set; )
+ List<BaseTrap> Traps( get; set; )
+ string TypeName( get; set; )
+ virtual void ClearCreatures()
+ virtual void ClearTraps()
+ virtual int ComputeSpawnCount()
+ virtual int ComputeTrapCount()
+ virtual void CreateRegion()
+ virtual void Deserialize( GenericReader reader )
+ virtual void DestroyRegion()
+ virtual void FullSpawn()
+ virtual void RecurseReset()
+ virtual void Serialize( GenericWriter writer )
+ virtual void Slice()
+ virtual void Spawn()
+ virtual void SpawnTrap()
+ + diff --git a/Docs/types/GauntletSpawnerState.html b/Docs/types/GauntletSpawnerState.html new file mode 100644 index 0000000..e8b5d29 --- /dev/null +++ b/Docs/types/GauntletSpawnerState.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GauntletSpawnerState + + +

Back to Server.Engines.Doom

+

GauntletSpawnerState (Enum)

+ InSequence = 0,
+ InProgress = 1,
+ Completed = 2
+ + diff --git a/Docs/types/GauntletsOfNobility.html b/Docs/types/GauntletsOfNobility.html new file mode 100644 index 0000000..2d9c6aa --- /dev/null +++ b/Docs/types/GauntletsOfNobility.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GauntletsOfNobility + + +

Back to Server.Items

+

GauntletsOfNobility : RingmailGloves, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) GauntletsOfNobility()
+ (ctor) GauntletsOfNobility( Serial serial )
+ int ArtifactRarity( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Gazer.html b/Docs/types/Gazer.html new file mode 100644 index 0000000..975a30e --- /dev/null +++ b/Docs/types/Gazer.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Gazer + + +

Back to Server.Mobiles

+

Gazer : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Gazer()
+ (ctor) Gazer( Serial serial )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GazerLarva.html b/Docs/types/GazerLarva.html new file mode 100644 index 0000000..5af6724 --- /dev/null +++ b/Docs/types/GazerLarva.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GazerLarva + + +

Back to Server.Mobiles

+

GazerLarva : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GazerLarva()
+ (ctor) GazerLarva( Serial serial )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Gears.html b/Docs/types/Gears.html new file mode 100644 index 0000000..1d4fb7e --- /dev/null +++ b/Docs/types/Gears.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Gears + + +

Back to Server.Items

+

Gears : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Gears()
+ (ctor) Gears( int amount )
+ (ctor) Gears( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GemType.html b/Docs/types/GemType.html new file mode 100644 index 0000000..1cefe3f --- /dev/null +++ b/Docs/types/GemType.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GemType + + +

Back to Server.Items

+

GemType (Enum)

+ None = 0,
+ StarSapphire = 1,
+ Emerald = 2,
+ Sapphire = 3,
+ Ruby = 4,
+ Citrine = 5,
+ Amethyst = 6,
+ Tourmaline = 7,
+ Amber = 8,
+ Diamond = 9
+ + diff --git a/Docs/types/GemmedCirclet.html b/Docs/types/GemmedCirclet.html new file mode 100644 index 0000000..3d7c128 --- /dev/null +++ b/Docs/types/GemmedCirclet.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - GemmedCirclet + + +

Back to Server.Items

+

GemmedCirclet : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) GemmedCirclet()
+ (ctor) GemmedCirclet( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GenKhaldun.html b/Docs/types/GenKhaldun.html new file mode 100644 index 0000000..bf176e6 --- /dev/null +++ b/Docs/types/GenKhaldun.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GenKhaldun + + +

Back to Server.Commands

+

GenKhaldun

+ (static) void CreateApproachLight( int x, int y, int z, int off, int on, LightType light )
+ (static) void CreateBigTeleporterItem( int x, int y, bool reverse )
+ (static) void CreateMorphItem( int x, int y, int z, int inactiveItemID, int activeItemID, int range )
+ (static) void CreateSoundEffect( int x, int y, int z, int sound, int range )
+ (static) bool FindEffectController( int x, int y, int z )
+ (static) bool FindMorphItem( int x, int y, int z, int inactiveItemID, int activeItemID )
+ (static) void GenKhaldun_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (static) Item TryCreateItem( int x, int y, int z, Item srcItem )
+ (ctor) GenKhaldun()
+ + diff --git a/Docs/types/GenTeleporter.html b/Docs/types/GenTeleporter.html new file mode 100644 index 0000000..b9d9f72 --- /dev/null +++ b/Docs/types/GenTeleporter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GenTeleporter + + +

Back to Server.Commands

+

GenTeleporter

+

Nested Types: TeleportersCreator

+ (static) void GenTeleporter_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) GenTeleporter()
+ + diff --git a/Docs/types/Generator.html b/Docs/types/Generator.html new file mode 100644 index 0000000..3c32ad7 --- /dev/null +++ b/Docs/types/Generator.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Generator + + +

Back to Server.Factions

+

Generator

+ (static) bool CheckExistance( Point3D loc, Map facet, Type type )
+ (static) void Generate( Faction faction )
+ (static) void Generate( Town town )
+ (static) void GenerateFactions_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) Generator()
+ + diff --git a/Docs/types/GenericBeard.html b/Docs/types/GenericBeard.html new file mode 100644 index 0000000..5a56fb3 --- /dev/null +++ b/Docs/types/GenericBeard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GenericBeard + + +

Back to Server.Items

+

GenericBeard : Beard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GenericBeard( Serial serial )
+ (ctor) GenericBeard( int itemID )
+ (ctor) GenericBeard( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GenericBuyInfo.html b/Docs/types/GenericBuyInfo.html new file mode 100644 index 0000000..d126f1b --- /dev/null +++ b/Docs/types/GenericBuyInfo.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - GenericBuyInfo + + +

Back to Server.Mobiles

+

GenericBuyInfo : IBuyItemInfo

+

Derived Types: AnimalBuyInfo, BeverageBuyInfo, PresetMapBuyInfo

+

Nested Types: DisplayCache

+ (ctor) GenericBuyInfo( Type type, int price, int amount, int itemID, int hue )
+ (ctor) GenericBuyInfo( string name, Type type, int price, int amount, int itemID, int hue )
+ (ctor) GenericBuyInfo( Type type, int price, int amount, int itemID, int hue, object[] args )
+ (ctor) GenericBuyInfo( string name, Type type, int price, int amount, int itemID, int hue, object[] args )
+ int Amount( get; set; )
+ object[] Args( get; set; )
+ bool CanCacheDisplay( get; )
+ int ControlSlots( get; )
+ int DefaultPrice( get; )
+ int Hue( get; set; )
+ int ItemID( get; set; )
+ int MaxAmount( get; set; )
+ string Name( get; set; )
+ int Price( get; set; )
+ int PriceScalar( get; set; )
+ Type Type( get; set; )
+ void DeleteDisplayEntity()
+ IEntity GetDisplayEntity()
+ virtual IEntity GetEntity()
+ bool IsDeleted( IEntity obj )
+ virtual void OnRestock()
+ virtual bool Restock( Item item, int amount )
+ + diff --git a/Docs/types/GenericHair.html b/Docs/types/GenericHair.html new file mode 100644 index 0000000..9503de8 --- /dev/null +++ b/Docs/types/GenericHair.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GenericHair + + +

Back to Server.Items

+

GenericHair : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GenericHair( Serial serial )
+ (ctor) GenericHair( int itemID )
+ (ctor) GenericHair( int itemID, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GenericHouseDoor.html b/Docs/types/GenericHouseDoor.html new file mode 100644 index 0000000..ba587ba --- /dev/null +++ b/Docs/types/GenericHouseDoor.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GenericHouseDoor + + +

Back to Server.Items

+

GenericHouseDoor : BaseHouseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable, ISecurable

+ (ctor) GenericHouseDoor( Serial serial )
+ (ctor) GenericHouseDoor( DoorFacing facing, int baseItemID, int openedSound, int closedSound )
+ (ctor) GenericHouseDoor( DoorFacing facing, int baseItemID, int openedSound, int closedSound, bool autoAdjust )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GenericReader.html b/Docs/types/GenericReader.html new file mode 100644 index 0000000..50a4a9c --- /dev/null +++ b/Docs/types/GenericReader.html @@ -0,0 +1,52 @@ + + + RunUO Documentation - Class Overview - GenericReader + + +

Back to Server

+

GenericReader

+

Derived Types: BinaryFileReader

+ (ctor) GenericReader()
+ virtual bool End()
+ virtual bool ReadBool()
+ virtual byte ReadByte()
+ virtual char ReadChar()
+ virtual DateTime ReadDateTime()
+ virtual decimal ReadDecimal()
+ virtual DateTime ReadDeltaTime()
+ virtual double ReadDouble()
+ virtual int ReadEncodedInt()
+ virtual float ReadFloat()
+ virtual T ReadGuild()
+ virtual BaseGuild ReadGuild()
+ virtual ArrayList ReadGuildList()
+ virtual int ReadInt()
+ virtual IPAddress ReadIPAddress()
+ virtual Item ReadItem()
+ virtual T ReadItem()
+ virtual ArrayList ReadItemList()
+ virtual long ReadLong()
+ virtual Map ReadMap()
+ virtual Mobile ReadMobile()
+ virtual T ReadMobile()
+ virtual ArrayList ReadMobileList()
+ virtual Point2D ReadPoint2D()
+ virtual Point3D ReadPoint3D()
+ virtual Race ReadRace()
+ virtual Rectangle2D ReadRect2D()
+ virtual Rectangle3D ReadRect3D()
+ virtual sbyte ReadSByte()
+ virtual short ReadShort()
+ virtual string ReadString()
+ virtual List<BaseGuild> ReadStrongGuildList()
+ virtual List<T> ReadStrongGuildList()
+ virtual List<T> ReadStrongItemList()
+ virtual List<Item> ReadStrongItemList()
+ virtual List<T> ReadStrongMobileList()
+ virtual List<Mobile> ReadStrongMobileList()
+ virtual TimeSpan ReadTimeSpan()
+ virtual uint ReadUInt()
+ virtual ulong ReadULong()
+ virtual ushort ReadUShort()
+ + diff --git a/Docs/types/GenericSellInfo.html b/Docs/types/GenericSellInfo.html new file mode 100644 index 0000000..1b1d9f4 --- /dev/null +++ b/Docs/types/GenericSellInfo.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GenericSellInfo + + +

Back to Server.Mobiles

+

GenericSellInfo : IShopSellInfo

+

Derived Types: InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo

+ (ctor) GenericSellInfo()
+ Type[] Types( get; )
+ void Add( Type type, int price )
+ virtual int GetBuyPriceFor( Item item )
+ virtual string GetNameFor( Item item )
+ virtual int GetSellPriceFor( Item item )
+ bool IsInList( Type type )
+ virtual bool IsResellable( Item item )
+ virtual bool IsSellable( Item item )
+ + diff --git a/Docs/types/GenericWriter.html b/Docs/types/GenericWriter.html new file mode 100644 index 0000000..871d7a2 --- /dev/null +++ b/Docs/types/GenericWriter.html @@ -0,0 +1,62 @@ + + + RunUO Documentation - Class Overview - GenericWriter + + +

Back to Server

+

GenericWriter

+

Derived Types: AsyncWriter, BinaryFileWriter

+ (ctor) GenericWriter()
+ long Position( get; )
+ virtual void Close()
+ virtual void Write( Rectangle3D value )
+ virtual void Write( Map value )
+ virtual void Write( string value )
+ virtual void Write( Rectangle2D value )
+ virtual void Write( IPAddress value )
+ virtual void Write( Point3D value )
+ virtual void Write( Point2D value )
+ virtual void Write( List<Mobile> list )
+ virtual void Write( List<BaseGuild> list )
+ virtual void Write( Item value )
+ virtual void Write( List<Item> list )
+ virtual void Write( Mobile value )
+ virtual void Write( BaseGuild value )
+ virtual void Write( Race value )
+ virtual void Write( uint value )
+ virtual void Write( TimeSpan value )
+ virtual void Write( ushort value )
+ virtual void Write( short value )
+ virtual void Write( long value )
+ virtual void Write( ulong value )
+ virtual void Write( decimal value )
+ virtual void Write( int value )
+ virtual void Write( sbyte value )
+ virtual void Write( bool value )
+ virtual void Write( DateTime value )
+ virtual void Write( byte value )
+ virtual void Write( float value )
+ virtual void Write( char value )
+ virtual void Write( double value )
+ virtual void Write( List<BaseGuild> list, bool tidy )
+ virtual void Write( List<Item> list, bool tidy )
+ virtual void Write( List<Mobile> list, bool tidy )
+ virtual void WriteDeltaTime( DateTime value )
+ virtual void WriteEncodedInt( int value )
+ virtual void WriteGuild( T value )
+ virtual void WriteGuildList( List<T> list )
+ virtual void WriteGuildList( ArrayList list )
+ virtual void WriteGuildList( List<T> list, bool tidy )
+ virtual void WriteGuildList( ArrayList list, bool tidy )
+ virtual void WriteItem( T value )
+ virtual void WriteItemList( ArrayList list )
+ virtual void WriteItemList( List<T> list )
+ virtual void WriteItemList( List<T> list, bool tidy )
+ virtual void WriteItemList( ArrayList list, bool tidy )
+ virtual void WriteMobile( T value )
+ virtual void WriteMobileList( ArrayList list )
+ virtual void WriteMobileList( List<T> list )
+ virtual void WriteMobileList( List<T> list, bool tidy )
+ virtual void WriteMobileList( ArrayList list, bool tidy )
+ + diff --git a/Docs/types/Geometry.html b/Docs/types/Geometry.html new file mode 100644 index 0000000..f357ac0 --- /dev/null +++ b/Docs/types/Geometry.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Geometry + + +

Back to Server.Misc

+

Geometry

+

Nested Types: CirclePoint

+ (static) Point2D ArcPoint( Point3D loc, int radius, int angle )
+ (static) void Circle2D( Point3D loc, Map map, int radius, DoEffect_Callback effect )
+ (static) void Circle2D( Point3D loc, Map map, int radius, DoEffect_Callback effect, int angleStart, int angleEnd )
+ (static) double DegreesToRadians( double angle )
+ (static) void Line2D( Point3D start, Point3D end, Map map, DoEffect_Callback effect )
+ (static) void plot4points( Point3D loc, Map map, int x, int y, CirclePoint start, CirclePoint end, DoEffect_Callback effect, bool opposite )
+ (static) double RadiansToDegrees( double angle )
+ (static) void Swap( ref T a, ref T b )
+ (static) bool WithinCircleBounds( Point2D pointLoc, int pointQuadrant, Point3D center, CirclePoint start, CirclePoint end, bool opposite )
+ + diff --git a/Docs/types/GetCommand.html b/Docs/types/GetCommand.html new file mode 100644 index 0000000..61102d2 --- /dev/null +++ b/Docs/types/GetCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GetCommand + + +

Back to Server.Commands.Generic

+

GetCommand : BaseCommand

+ (ctor) GetCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/GetDaemonBloodObjective.html b/Docs/types/GetDaemonBloodObjective.html new file mode 100644 index 0000000..46c1a90 --- /dev/null +++ b/Docs/types/GetDaemonBloodObjective.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GetDaemonBloodObjective + + +

Back to Server.Engines.Quests.Haven

+

GetDaemonBloodObjective : QuestObjective

+ (ctor) GetDaemonBloodObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/GetDaemonBoneObjective.html b/Docs/types/GetDaemonBoneObjective.html new file mode 100644 index 0000000..5b50553 --- /dev/null +++ b/Docs/types/GetDaemonBoneObjective.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GetDaemonBoneObjective + + +

Back to Server.Engines.Quests.Haven

+

GetDaemonBoneObjective : QuestObjective

+ (ctor) GetDaemonBoneObjective()
+ Container CorpseWithBone( get; set; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual bool GetKillEvent( BaseCreature creature, Container corpse )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ + diff --git a/Docs/types/GetRewardObjective.html b/Docs/types/GetRewardObjective.html new file mode 100644 index 0000000..c54e4b0 --- /dev/null +++ b/Docs/types/GetRewardObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GetRewardObjective + + +

Back to Server.Engines.Quests.Matriarch

+

GetRewardObjective : QuestObjective

+ (ctor) GetRewardObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/GetSheetMusicConversation.html b/Docs/types/GetSheetMusicConversation.html new file mode 100644 index 0000000..da8562c --- /dev/null +++ b/Docs/types/GetSheetMusicConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GetSheetMusicConversation + + +

Back to Server.Engines.Quests.Collector

+

GetSheetMusicConversation : QuestConversation

+ (ctor) GetSheetMusicConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/GetTypeCommand.html b/Docs/types/GetTypeCommand.html new file mode 100644 index 0000000..d4c3bfb --- /dev/null +++ b/Docs/types/GetTypeCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GetTypeCommand + + +

Back to Server.Commands.Generic

+

GetTypeCommand : BaseCommand

+ (ctor) GetTypeCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/GhostShipAnchor.html b/Docs/types/GhostShipAnchor.html new file mode 100644 index 0000000..a1d2804 --- /dev/null +++ b/Docs/types/GhostShipAnchor.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GhostShipAnchor + + +

Back to Server.Items

+

GhostShipAnchor : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GhostShipAnchor()
+ (ctor) GhostShipAnchor( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ghoul.html b/Docs/types/Ghoul.html new file mode 100644 index 0000000..3c0ef6f --- /dev/null +++ b/Docs/types/Ghoul.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Ghoul + + +

Back to Server.Mobiles

+

Ghoul : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Ghoul()
+ (ctor) Ghoul( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantBlackWidow.html b/Docs/types/GiantBlackWidow.html new file mode 100644 index 0000000..54d0d56 --- /dev/null +++ b/Docs/types/GiantBlackWidow.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GiantBlackWidow + + +

Back to Server.Mobiles

+

GiantBlackWidow : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GiantBlackWidow()
+ (ctor) GiantBlackWidow( Serial serial )
+ FoodType FavoriteFood( get; )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantIceWorm.html b/Docs/types/GiantIceWorm.html new file mode 100644 index 0000000..30314e4 --- /dev/null +++ b/Docs/types/GiantIceWorm.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GiantIceWorm + + +

Back to Server.Mobiles

+

GiantIceWorm : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GiantIceWorm()
+ (ctor) GiantIceWorm( Serial serial )
+ FoodType FavoriteFood( get; )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ bool SubdueBeforeTame( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantRat.html b/Docs/types/GiantRat.html new file mode 100644 index 0000000..964a6c2 --- /dev/null +++ b/Docs/types/GiantRat.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GiantRat + + +

Back to Server.Mobiles

+

GiantRat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GiantRat()
+ (ctor) GiantRat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantSerpent.html b/Docs/types/GiantSerpent.html new file mode 100644 index 0000000..1d85857 --- /dev/null +++ b/Docs/types/GiantSerpent.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - GiantSerpent + + +

Back to Server.Mobiles

+

GiantSerpent : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GiantSerpent()
+ (ctor) GiantSerpent( Serial serial )
+ bool DeathAdderCharmable( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantSpider.html b/Docs/types/GiantSpider.html new file mode 100644 index 0000000..af6c533 --- /dev/null +++ b/Docs/types/GiantSpider.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GiantSpider + + +

Back to Server.Mobiles

+

GiantSpider : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GiantSpider()
+ (ctor) GiantSpider( Serial serial )
+ FoodType FavoriteFood( get; )
+ Poison HitPoison( get; )
+ PackInstinct PackInstinct( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantSpikeTrap.html b/Docs/types/GiantSpikeTrap.html new file mode 100644 index 0000000..64ed571 --- /dev/null +++ b/Docs/types/GiantSpikeTrap.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GiantSpikeTrap + + +

Back to Server.Items

+

GiantSpikeTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GiantSpikeTrap()
+ (ctor) GiantSpikeTrap( Serial serial )
+ bool PassivelyTriggered( get; )
+ TimeSpan PassiveTriggerDelay( get; )
+ int PassiveTriggerRange( get; )
+ TimeSpan ResetDelay( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnTrigger( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantToad.html b/Docs/types/GiantToad.html new file mode 100644 index 0000000..0c5d1b3 --- /dev/null +++ b/Docs/types/GiantToad.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GiantToad + + +

Back to Server.Mobiles

+

GiantToad : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GiantToad()
+ (ctor) GiantToad( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantWeb1.html b/Docs/types/GiantWeb1.html new file mode 100644 index 0000000..145d335 --- /dev/null +++ b/Docs/types/GiantWeb1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GiantWeb1 + + +

Back to Server.Items

+

GiantWeb1 : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GiantWeb1()
+ (ctor) GiantWeb1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantWeb2.html b/Docs/types/GiantWeb2.html new file mode 100644 index 0000000..40a123e --- /dev/null +++ b/Docs/types/GiantWeb2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GiantWeb2 + + +

Back to Server.Items

+

GiantWeb2 : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GiantWeb2()
+ (ctor) GiantWeb2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantWeb3.html b/Docs/types/GiantWeb3.html new file mode 100644 index 0000000..e385c98 --- /dev/null +++ b/Docs/types/GiantWeb3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GiantWeb3 + + +

Back to Server.Items

+

GiantWeb3 : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GiantWeb3()
+ (ctor) GiantWeb3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantWeb4.html b/Docs/types/GiantWeb4.html new file mode 100644 index 0000000..6d63932 --- /dev/null +++ b/Docs/types/GiantWeb4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GiantWeb4 + + +

Back to Server.Items

+

GiantWeb4 : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GiantWeb4()
+ (ctor) GiantWeb4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantWeb5.html b/Docs/types/GiantWeb5.html new file mode 100644 index 0000000..fc867bb --- /dev/null +++ b/Docs/types/GiantWeb5.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GiantWeb5 + + +

Back to Server.Items

+

GiantWeb5 : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GiantWeb5()
+ (ctor) GiantWeb5( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiantWeb6.html b/Docs/types/GiantWeb6.html new file mode 100644 index 0000000..5c6c2c5 --- /dev/null +++ b/Docs/types/GiantWeb6.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GiantWeb6 + + +

Back to Server.Items

+

GiantWeb6 : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GiantWeb6()
+ (ctor) GiantWeb6( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Gibberling.html b/Docs/types/Gibberling.html new file mode 100644 index 0000000..4fb08e4 --- /dev/null +++ b/Docs/types/Gibberling.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Gibberling + + +

Back to Server.Mobiles

+

Gibberling : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Gibberling()
+ (ctor) Gibberling( Serial serial )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftBox.html b/Docs/types/GiftBox.html new file mode 100644 index 0000000..307c5ce --- /dev/null +++ b/Docs/types/GiftBox.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GiftBox + + +

Back to Server.Items

+

GiftBox : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: WinterGiftPackage2003

+ (ctor) GiftBox()
+ (ctor) GiftBox( int hue )
+ (ctor) GiftBox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftBoxAngel.html b/Docs/types/GiftBoxAngel.html new file mode 100644 index 0000000..5879682 --- /dev/null +++ b/Docs/types/GiftBoxAngel.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GiftBoxAngel + + +

Back to Server.Items

+

GiftBoxAngel : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GiftBoxAngel()
+ (ctor) GiftBoxAngel( Serial serial )
+ int DefaultGumpID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftBoxCube.html b/Docs/types/GiftBoxCube.html new file mode 100644 index 0000000..a2605ad --- /dev/null +++ b/Docs/types/GiftBoxCube.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GiftBoxCube + + +

Back to Server.Items

+

GiftBoxCube : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GiftBoxCube()
+ (ctor) GiftBoxCube( Serial serial )
+ int DefaultGumpID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftBoxCylinder.html b/Docs/types/GiftBoxCylinder.html new file mode 100644 index 0000000..8a773b7 --- /dev/null +++ b/Docs/types/GiftBoxCylinder.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GiftBoxCylinder + + +

Back to Server.Items

+

GiftBoxCylinder : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GiftBoxCylinder()
+ (ctor) GiftBoxCylinder( Serial serial )
+ int DefaultGumpID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftBoxHues.html b/Docs/types/GiftBoxHues.html new file mode 100644 index 0000000..187343e --- /dev/null +++ b/Docs/types/GiftBoxHues.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GiftBoxHues + + +

Back to Server.Items

+

GiftBoxHues

+ (static) int RandomGiftBoxHue( get; )
+ (static) int RandomNeonBoxHue( get; )
+ (ctor) GiftBoxHues()
+ + diff --git a/Docs/types/GiftBoxNeon.html b/Docs/types/GiftBoxNeon.html new file mode 100644 index 0000000..54b31ae --- /dev/null +++ b/Docs/types/GiftBoxNeon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GiftBoxNeon + + +

Back to Server.Items

+

GiftBoxNeon : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GiftBoxNeon()
+ (ctor) GiftBoxNeon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftBoxOctogon.html b/Docs/types/GiftBoxOctogon.html new file mode 100644 index 0000000..d7dd918 --- /dev/null +++ b/Docs/types/GiftBoxOctogon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GiftBoxOctogon + + +

Back to Server.Items

+

GiftBoxOctogon : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GiftBoxOctogon()
+ (ctor) GiftBoxOctogon( Serial serial )
+ int DefaultGumpID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftBoxRectangle.html b/Docs/types/GiftBoxRectangle.html new file mode 100644 index 0000000..b208896 --- /dev/null +++ b/Docs/types/GiftBoxRectangle.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GiftBoxRectangle + + +

Back to Server.Items

+

GiftBoxRectangle : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GiftBoxRectangle()
+ (ctor) GiftBoxRectangle( Serial serial )
+ int DefaultGumpID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftGiver.html b/Docs/types/GiftGiver.html new file mode 100644 index 0000000..8bca0d2 --- /dev/null +++ b/Docs/types/GiftGiver.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GiftGiver + + +

Back to Server.Misc

+

GiftGiver

+

Derived Types: WinterGiftGiver2004

+ (ctor) GiftGiver()
+ DateTime Finish( get; )
+ TimeSpan MinimumAge( get; )
+ DateTime Start( get; )
+ virtual void DelayGiveGift( TimeSpan delay, Mobile mob )
+ virtual void DelayGiveGift_Callback( object state )
+ virtual void GiveGift( Mobile mob )
+ virtual GiftResult GiveGift( Mobile mob, Item item )
+ + diff --git a/Docs/types/GiftGiving.html b/Docs/types/GiftGiving.html new file mode 100644 index 0000000..a608ef2 --- /dev/null +++ b/Docs/types/GiftGiving.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GiftGiving + + +

Back to Server.Misc

+

GiftGiving

+ (static) void EventSink_Login( LoginEventArgs e )
+ (static) void Initialize()
+ (static) void Register( GiftGiver giver )
+ (ctor) GiftGiving()
+ + diff --git a/Docs/types/GiftOfLifeScroll.html b/Docs/types/GiftOfLifeScroll.html new file mode 100644 index 0000000..ef74867 --- /dev/null +++ b/Docs/types/GiftOfLifeScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GiftOfLifeScroll + + +

Back to Server.Items

+

GiftOfLifeScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) GiftOfLifeScroll()
+ (ctor) GiftOfLifeScroll( int amount )
+ (ctor) GiftOfLifeScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftOfLifeSpell.html b/Docs/types/GiftOfLifeSpell.html new file mode 100644 index 0000000..f89b2fe --- /dev/null +++ b/Docs/types/GiftOfLifeSpell.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - GiftOfLifeSpell + + +

Back to Server.Spells.Spellweaving

+

GiftOfLifeSpell : ArcanistSpell, ISpell

+

Nested Types: ExpireTimer, InternalTarget

+ (static) void b__0( PlayerDeathEventArgs e )
+ (static) void HandleDeath( Mobile m )
+ (static) void HandleDeath_OnCallback( Mobile m )
+ (static) void Initialize()
+ (static) void OnLogin( LoginEventArgs e )
+ (ctor) GiftOfLifeSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ double HitsScalar( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/GiftOfRenewalInfo.html b/Docs/types/GiftOfRenewalInfo.html new file mode 100644 index 0000000..586989b --- /dev/null +++ b/Docs/types/GiftOfRenewalInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - GiftOfRenewalInfo + + +

Back to Server.Spells.Spellweaving

+

(GiftOfRenewalSpell) - GiftOfRenewalInfo

+ (ctor) GiftOfRenewalInfo( Mobile caster, Mobile mobile, int hitsPerRound )
+ + diff --git a/Docs/types/GiftOfRenewalScroll.html b/Docs/types/GiftOfRenewalScroll.html new file mode 100644 index 0000000..f57da76 --- /dev/null +++ b/Docs/types/GiftOfRenewalScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GiftOfRenewalScroll + + +

Back to Server.Items

+

GiftOfRenewalScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) GiftOfRenewalScroll()
+ (ctor) GiftOfRenewalScroll( int amount )
+ (ctor) GiftOfRenewalScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiftOfRenewalSpell.html b/Docs/types/GiftOfRenewalSpell.html new file mode 100644 index 0000000..353cf4e --- /dev/null +++ b/Docs/types/GiftOfRenewalSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GiftOfRenewalSpell + + +

Back to Server.Spells.Spellweaving

+

GiftOfRenewalSpell : ArcanistSpell, ISpell

+

Nested Types: (Anonymous-Type)--c__DisplayClass2, (Anonymous-Type)--c__DisplayClass6, GiftOfRenewalInfo, InternalTarget, InternalTimer

+ (static) bool StopEffect( Mobile m )
+ (ctor) GiftOfRenewalSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/GiftResult.html b/Docs/types/GiftResult.html new file mode 100644 index 0000000..082c16f --- /dev/null +++ b/Docs/types/GiftResult.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GiftResult + + +

Back to Server.Misc

+

GiftResult (Enum)

+ Backpack = 0,
+ BankBox = 1
+ + diff --git a/Docs/types/GildedDress.html b/Docs/types/GildedDress.html new file mode 100644 index 0000000..ff941b9 --- /dev/null +++ b/Docs/types/GildedDress.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GildedDress + + +

Back to Server.Items

+

GildedDress : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) GildedDress()
+ (ctor) GildedDress( int hue )
+ (ctor) GildedDress( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GildedWoodenChest.html b/Docs/types/GildedWoodenChest.html new file mode 100644 index 0000000..3056cc9 --- /dev/null +++ b/Docs/types/GildedWoodenChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GildedWoodenChest + + +

Back to Server.Items

+

GildedWoodenChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) GildedWoodenChest()
+ (ctor) GildedWoodenChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GingerBreadCookie.html b/Docs/types/GingerBreadCookie.html new file mode 100644 index 0000000..5fcd217 --- /dev/null +++ b/Docs/types/GingerBreadCookie.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GingerBreadCookie + + +

Back to Server.Items

+

GingerBreadCookie : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GingerBreadCookie()
+ (ctor) GingerBreadCookie( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GingerBreadHouseAddon.html b/Docs/types/GingerBreadHouseAddon.html new file mode 100644 index 0000000..3d46db8 --- /dev/null +++ b/Docs/types/GingerBreadHouseAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GingerBreadHouseAddon + + +

Back to Server.Items

+

GingerBreadHouseAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GingerBreadHouseAddon()
+ (ctor) GingerBreadHouseAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GingerBreadHouseDeed.html b/Docs/types/GingerBreadHouseDeed.html new file mode 100644 index 0000000..d06bbcc --- /dev/null +++ b/Docs/types/GingerBreadHouseDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GingerBreadHouseDeed + + +

Back to Server.Items

+

GingerBreadHouseDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GingerBreadHouseDeed()
+ (ctor) GingerBreadHouseDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ginseng.html b/Docs/types/Ginseng.html new file mode 100644 index 0000000..9141692 --- /dev/null +++ b/Docs/types/Ginseng.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Ginseng + + +

Back to Server.Items

+

Ginseng : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Ginseng()
+ (ctor) Ginseng( Serial serial )
+ (ctor) Ginseng( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GiveEminoSwordConversation.html b/Docs/types/GiveEminoSwordConversation.html new file mode 100644 index 0000000..1238e50 --- /dev/null +++ b/Docs/types/GiveEminoSwordConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GiveEminoSwordConversation + + +

Back to Server.Engines.Quests.Ninja

+

GiveEminoSwordConversation : QuestConversation

+ (ctor) GiveEminoSwordConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/GiveEminoSwordObjective.html b/Docs/types/GiveEminoSwordObjective.html new file mode 100644 index 0000000..f4aad17 --- /dev/null +++ b/Docs/types/GiveEminoSwordObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GiveEminoSwordObjective + + +

Back to Server.Engines.Quests.Ninja

+

GiveEminoSwordObjective : QuestObjective

+ (ctor) GiveEminoSwordObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/GiveZoelNoteConversation.html b/Docs/types/GiveZoelNoteConversation.html new file mode 100644 index 0000000..1f22536 --- /dev/null +++ b/Docs/types/GiveZoelNoteConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GiveZoelNoteConversation + + +

Back to Server.Engines.Quests.Ninja

+

GiveZoelNoteConversation : QuestConversation

+ (ctor) GiveZoelNoteConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/GiveZoelNoteObjective.html b/Docs/types/GiveZoelNoteObjective.html new file mode 100644 index 0000000..5dc75a7 --- /dev/null +++ b/Docs/types/GiveZoelNoteObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GiveZoelNoteObjective + + +

Back to Server.Engines.Quests.Ninja

+

GiveZoelNoteObjective : QuestObjective

+ (ctor) GiveZoelNoteObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/GlacialStaff.html b/Docs/types/GlacialStaff.html new file mode 100644 index 0000000..7f707e8 --- /dev/null +++ b/Docs/types/GlacialStaff.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GlacialStaff + + +

Back to Server.Items

+

GlacialStaff : BlackStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) GlacialStaff()
+ (ctor) GlacialStaff( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GladiatorsCollar.html b/Docs/types/GladiatorsCollar.html new file mode 100644 index 0000000..e6cf9a1 --- /dev/null +++ b/Docs/types/GladiatorsCollar.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - GladiatorsCollar + + +

Back to Server.Items

+

GladiatorsCollar : PlateGorget, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) GladiatorsCollar()
+ (ctor) GladiatorsCollar( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Glass.html b/Docs/types/Glass.html new file mode 100644 index 0000000..b984752 --- /dev/null +++ b/Docs/types/Glass.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Glass + + +

Back to Server.Items

+

Glass : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Glass()
+ (ctor) Glass( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GlassBottle.html b/Docs/types/GlassBottle.html new file mode 100644 index 0000000..f2fb2c6 --- /dev/null +++ b/Docs/types/GlassBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GlassBottle + + +

Back to Server.Items

+

GlassBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GlassBottle()
+ (ctor) GlassBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GlassMug.html b/Docs/types/GlassMug.html new file mode 100644 index 0000000..78a4d6f --- /dev/null +++ b/Docs/types/GlassMug.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GlassMug + + +

Back to Server.Items

+

GlassMug : BaseBeverage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) GlassMug()
+ (ctor) GlassMug( BeverageType type )
+ (ctor) GlassMug( Serial serial )
+ int BaseLabelNumber( get; )
+ int EmptyLabelNumber( get; )
+ int MaxQuantity( get; )
+ virtual int ComputeItemID()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Glassblower.html b/Docs/types/Glassblower.html new file mode 100644 index 0000000..8a6ca25 --- /dev/null +++ b/Docs/types/Glassblower.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Glassblower + + +

Back to Server.Mobiles

+

Glassblower : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Glassblower()
+ (ctor) Glassblower( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GlassblowingBook.html b/Docs/types/GlassblowingBook.html new file mode 100644 index 0000000..17102fa --- /dev/null +++ b/Docs/types/GlassblowingBook.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GlassblowingBook + + +

Back to Server.Items

+

GlassblowingBook : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GlassblowingBook()
+ (ctor) GlassblowingBook( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GlobalCommandImplementor.html b/Docs/types/GlobalCommandImplementor.html new file mode 100644 index 0000000..ecd5246 --- /dev/null +++ b/Docs/types/GlobalCommandImplementor.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GlobalCommandImplementor + + +

Back to Server.Commands.Generic

+

GlobalCommandImplementor : BaseCommandImplementor

+ (ctor) GlobalCommandImplementor()
+ virtual void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj )
+ + diff --git a/Docs/types/GlobalLightLevel.html b/Docs/types/GlobalLightLevel.html new file mode 100644 index 0000000..5a516d5 --- /dev/null +++ b/Docs/types/GlobalLightLevel.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GlobalLightLevel + + +

Back to Server.Network

+

GlobalLightLevel : Packet

+ (static) GlobalLightLevel Instantiate( int level )
+ (ctor) GlobalLightLevel( int level )
+ + diff --git a/Docs/types/GlobalTownCrierEntryList.html b/Docs/types/GlobalTownCrierEntryList.html new file mode 100644 index 0000000..d29e2b9 --- /dev/null +++ b/Docs/types/GlobalTownCrierEntryList.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GlobalTownCrierEntryList + + +

Back to Server.Mobiles

+

GlobalTownCrierEntryList : ITownCrierEntryList

+ (static) GlobalTownCrierEntryList Instance( get; )
+ (static) void Initialize()
+ (static) void TownCriers_OnCommand( CommandEventArgs e )
+ (ctor) GlobalTownCrierEntryList()
+ List<TownCrierEntry> Entries( get; )
+ bool IsEmpty( get; )
+ virtual TownCrierEntry AddEntry( string[] lines, TimeSpan duration )
+ virtual TownCrierEntry GetRandomEntry()
+ virtual void RemoveEntry( TownCrierEntry tce )
+ + diff --git a/Docs/types/Globe.html b/Docs/types/Globe.html new file mode 100644 index 0000000..a62be1d --- /dev/null +++ b/Docs/types/Globe.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Globe + + +

Back to Server.Items

+

Globe : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Globe()
+ (ctor) Globe( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GlovesOfThePugilist.html b/Docs/types/GlovesOfThePugilist.html new file mode 100644 index 0000000..6deab54 --- /dev/null +++ b/Docs/types/GlovesOfThePugilist.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GlovesOfThePugilist + + +

Back to Server.Items

+

GlovesOfThePugilist : LeatherGloves, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+ (ctor) GlovesOfThePugilist()
+ (ctor) GlovesOfThePugilist( Serial serial )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GlovesOfTheSun.html b/Docs/types/GlovesOfTheSun.html new file mode 100644 index 0000000..5974e75 --- /dev/null +++ b/Docs/types/GlovesOfTheSun.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GlovesOfTheSun + + +

Back to Server.Items

+

GlovesOfTheSun : LeatherNinjaMitts, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) GlovesOfTheSun()
+ (ctor) GlovesOfTheSun( Serial serial )
+ int BaseFireResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GnarledStaff.html b/Docs/types/GnarledStaff.html new file mode 100644 index 0000000..25fbc09 --- /dev/null +++ b/Docs/types/GnarledStaff.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - GnarledStaff + + +

Back to Server.Items

+

GnarledStaff : BaseStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: WrathOfTheDryad

+ (ctor) GnarledStaff()
+ (ctor) GnarledStaff( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoGump.html b/Docs/types/GoGump.html new file mode 100644 index 0000000..4502220 --- /dev/null +++ b/Docs/types/GoGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GoGump + + +

Back to Server.Gumps

+

GoGump : Gump

+ (static) void DisplayTo( Mobile from )
+ (ctor) GoGump( int page, Mobile from, LocationTree tree, ParentNode node )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/Goat.html b/Docs/types/Goat.html new file mode 100644 index 0000000..eec22bf --- /dev/null +++ b/Docs/types/Goat.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Goat + + +

Back to Server.Mobiles

+

Goat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Goat()
+ (ctor) Goat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Goatee.html b/Docs/types/Goatee.html new file mode 100644 index 0000000..7436dd7 --- /dev/null +++ b/Docs/types/Goatee.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Goatee + + +

Back to Server.Items

+

Goatee : Beard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Goatee()
+ (ctor) Goatee( int hue )
+ (ctor) Goatee( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Goblet.html b/Docs/types/Goblet.html new file mode 100644 index 0000000..7b473d9 --- /dev/null +++ b/Docs/types/Goblet.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Goblet + + +

Back to Server.Items

+

Goblet : BaseBeverage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) Goblet()
+ (ctor) Goblet( BeverageType type )
+ (ctor) Goblet( Serial serial )
+ int BaseLabelNumber( get; )
+ int MaxQuantity( get; )
+ virtual int ComputeItemID()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GodModeReply.html b/Docs/types/GodModeReply.html new file mode 100644 index 0000000..b69e7c2 --- /dev/null +++ b/Docs/types/GodModeReply.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - GodModeReply + + +

Back to Server.Network

+

GodModeReply : Packet

+ (ctor) GodModeReply( bool reply )
+ + diff --git a/Docs/types/Gold.html b/Docs/types/Gold.html new file mode 100644 index 0000000..f2d18f3 --- /dev/null +++ b/Docs/types/Gold.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Gold + + +

Back to Server.Items

+

Gold : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Gold()
+ (ctor) Gold( int amount )
+ (ctor) Gold( Serial serial )
+ (ctor) Gold( int amountFrom, int amountTo )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetDropSound()
+ virtual int GetTotal( TotalType type )
+ virtual void OnAmountChange( int oldValue )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldBeadNecklace.html b/Docs/types/GoldBeadNecklace.html new file mode 100644 index 0000000..ad42729 --- /dev/null +++ b/Docs/types/GoldBeadNecklace.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GoldBeadNecklace + + +

Back to Server.Items

+

GoldBeadNecklace : BaseNecklace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) GoldBeadNecklace()
+ (ctor) GoldBeadNecklace( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldBracelet.html b/Docs/types/GoldBracelet.html new file mode 100644 index 0000000..5db09a5 --- /dev/null +++ b/Docs/types/GoldBracelet.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GoldBracelet + + +

Back to Server.Items

+

GoldBracelet : BaseBracelet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: AlchemistsBauble, BraceletOfHealth, OrnamentOfTheMagician, ResilientBracer

+ (ctor) GoldBracelet()
+ (ctor) GoldBracelet( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldBricks.html b/Docs/types/GoldBricks.html new file mode 100644 index 0000000..03eb2f0 --- /dev/null +++ b/Docs/types/GoldBricks.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GoldBricks + + +

Back to Server.Items

+

GoldBricks : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GoldBricks()
+ (ctor) GoldBricks( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldEarrings.html b/Docs/types/GoldEarrings.html new file mode 100644 index 0000000..529a718 --- /dev/null +++ b/Docs/types/GoldEarrings.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GoldEarrings + + +

Back to Server.Items

+

GoldEarrings : BaseEarrings, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) GoldEarrings()
+ (ctor) GoldEarrings( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldGranite.html b/Docs/types/GoldGranite.html new file mode 100644 index 0000000..728fab0 --- /dev/null +++ b/Docs/types/GoldGranite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GoldGranite + + +

Back to Server.Items

+

GoldGranite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GoldGranite()
+ (ctor) GoldGranite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldIngot.html b/Docs/types/GoldIngot.html new file mode 100644 index 0000000..30c60cd --- /dev/null +++ b/Docs/types/GoldIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GoldIngot + + +

Back to Server.Items

+

GoldIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) GoldIngot()
+ (ctor) GoldIngot( int amount )
+ (ctor) GoldIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldNecklace.html b/Docs/types/GoldNecklace.html new file mode 100644 index 0000000..426db9b --- /dev/null +++ b/Docs/types/GoldNecklace.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GoldNecklace + + +

Back to Server.Items

+

GoldNecklace : BaseNecklace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: PendantOfTheMagi

+ (ctor) GoldNecklace()
+ (ctor) GoldNecklace( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldOre.html b/Docs/types/GoldOre.html new file mode 100644 index 0000000..e0356e6 --- /dev/null +++ b/Docs/types/GoldOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GoldOre + + +

Back to Server.Items

+

GoldOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) GoldOre()
+ (ctor) GoldOre( int amount )
+ (ctor) GoldOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldRing.html b/Docs/types/GoldRing.html new file mode 100644 index 0000000..d1ed917 --- /dev/null +++ b/Docs/types/GoldRing.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GoldRing + + +

Back to Server.Items

+

GoldRing : BaseRing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: EssenceOfBattle, RingOfTheElements, RingOfTheVile

+ (ctor) GoldRing()
+ (ctor) GoldRing( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldWire.html b/Docs/types/GoldWire.html new file mode 100644 index 0000000..9455b37 --- /dev/null +++ b/Docs/types/GoldWire.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GoldWire + + +

Back to Server.Items

+

GoldWire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GoldWire()
+ (ctor) GoldWire( int amount )
+ (ctor) GoldWire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldenDecorativeRugAddon.html b/Docs/types/GoldenDecorativeRugAddon.html new file mode 100644 index 0000000..12bb94f --- /dev/null +++ b/Docs/types/GoldenDecorativeRugAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GoldenDecorativeRugAddon + + +

Back to Server.Items

+

GoldenDecorativeRugAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GoldenDecorativeRugAddon()
+ (ctor) GoldenDecorativeRugAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldenDecorativeRugDeed.html b/Docs/types/GoldenDecorativeRugDeed.html new file mode 100644 index 0000000..e8b196d --- /dev/null +++ b/Docs/types/GoldenDecorativeRugDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GoldenDecorativeRugDeed + + +

Back to Server.Items

+

GoldenDecorativeRugDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GoldenDecorativeRugDeed()
+ (ctor) GoldenDecorativeRugDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldenElemental.html b/Docs/types/GoldenElemental.html new file mode 100644 index 0000000..18dcda9 --- /dev/null +++ b/Docs/types/GoldenElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GoldenElemental + + +

Back to Server.Mobiles

+

GoldenElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GoldenElemental()
+ (ctor) GoldenElemental( Serial serial )
+ (ctor) GoldenElemental( int oreAmount )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoldenSkull.html b/Docs/types/GoldenSkull.html new file mode 100644 index 0000000..e319bd1 --- /dev/null +++ b/Docs/types/GoldenSkull.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GoldenSkull + + +

Back to Server.Engines.Quests.Doom

+

GoldenSkull : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GoldenSkull()
+ (ctor) GoldenSkull( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Golem.html b/Docs/types/Golem.html new file mode 100644 index 0000000..06e54b3 --- /dev/null +++ b/Docs/types/Golem.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Golem + + +

Back to Server.Mobiles

+

Golem : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Golem()
+ (ctor) Golem( Serial serial )
+ (ctor) Golem( bool summoned, double scalar )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ bool BleedImmune( get; )
+ bool DeleteOnRelease( get; )
+ FoodType FavoriteFood( get; )
+ bool IsBondable( get; )
+ bool IsScaredOfScaryThings( get; )
+ bool IsScaryToPets( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnDeath( Container c )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ void Recover_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GolemController.html b/Docs/types/GolemController.html new file mode 100644 index 0000000..4c51b00 --- /dev/null +++ b/Docs/types/GolemController.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GolemController + + +

Back to Server.Mobiles

+

GolemController : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GolemController()
+ (ctor) GolemController( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ bool ShowFameTitle( get; )
+ void AddArcane( Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GolemCrafter.html b/Docs/types/GolemCrafter.html new file mode 100644 index 0000000..f5547f4 --- /dev/null +++ b/Docs/types/GolemCrafter.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GolemCrafter + + +

Back to Server.Mobiles

+

GolemCrafter : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) GolemCrafter()
+ (ctor) GolemCrafter( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GoodiesTimer.html b/Docs/types/GoodiesTimer.html new file mode 100644 index 0000000..b15e432 --- /dev/null +++ b/Docs/types/GoodiesTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GoodiesTimer + + +

Back to Server.Mobiles

+

(BaseChampion) - GoodiesTimer : Timer

+ (ctor) GoodiesTimer( Map map, int x, int y )
+ virtual void OnTick()
+ + diff --git a/Docs/types/GoreFiend.html b/Docs/types/GoreFiend.html new file mode 100644 index 0000000..11fffe3 --- /dev/null +++ b/Docs/types/GoreFiend.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GoreFiend + + +

Back to Server.Mobiles

+

GoreFiend : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GoreFiend()
+ (ctor) GoreFiend( Serial serial )
+ bool BleedImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetDeathSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Gorilla.html b/Docs/types/Gorilla.html new file mode 100644 index 0000000..faa43d2 --- /dev/null +++ b/Docs/types/Gorilla.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Gorilla + + +

Back to Server.Mobiles

+

Gorilla : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Gorilla()
+ (ctor) Gorilla( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GozaMatEastAddon.html b/Docs/types/GozaMatEastAddon.html new file mode 100644 index 0000000..610ff84 --- /dev/null +++ b/Docs/types/GozaMatEastAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GozaMatEastAddon + + +

Back to Server.Items

+

GozaMatEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GozaMatEastAddon()
+ (ctor) GozaMatEastAddon( Serial serial )
+ (ctor) GozaMatEastAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GozaMatEastDeed.html b/Docs/types/GozaMatEastDeed.html new file mode 100644 index 0000000..30b2bcc --- /dev/null +++ b/Docs/types/GozaMatEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GozaMatEastDeed + + +

Back to Server.Items

+

GozaMatEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GozaMatEastDeed()
+ (ctor) GozaMatEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GozaMatSouthAddon.html b/Docs/types/GozaMatSouthAddon.html new file mode 100644 index 0000000..312e9f0 --- /dev/null +++ b/Docs/types/GozaMatSouthAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GozaMatSouthAddon + + +

Back to Server.Items

+

GozaMatSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GozaMatSouthAddon()
+ (ctor) GozaMatSouthAddon( Serial serial )
+ (ctor) GozaMatSouthAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GozaMatSouthDeed.html b/Docs/types/GozaMatSouthDeed.html new file mode 100644 index 0000000..6098527 --- /dev/null +++ b/Docs/types/GozaMatSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GozaMatSouthDeed + + +

Back to Server.Items

+

GozaMatSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GozaMatSouthDeed()
+ (ctor) GozaMatSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Gram.html b/Docs/types/Gram.html new file mode 100644 index 0000000..57745fa --- /dev/null +++ b/Docs/types/Gram.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Gram + + +

Back to Server.Network

+

(SendQueue) - Gram

+ (static) Gram Acquire()
+ (ctor) Gram()
+ int Available( get; )
+ byte[] Buffer( get; )
+ bool IsFull( get; )
+ int Length( get; )
+ void Release()
+ int Write( byte[] buffer, int offset, int length )
+ + diff --git a/Docs/types/GrammarOfOrcish.html b/Docs/types/GrammarOfOrcish.html new file mode 100644 index 0000000..464ce20 --- /dev/null +++ b/Docs/types/GrammarOfOrcish.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrammarOfOrcish + + +

Back to Server.Items

+

GrammarOfOrcish : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrammarOfOrcish()
+ (ctor) GrammarOfOrcish( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrandGrimoire.html b/Docs/types/GrandGrimoire.html new file mode 100644 index 0000000..f00c3f3 --- /dev/null +++ b/Docs/types/GrandGrimoire.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrandGrimoire + + +

Back to Server.Engines.Quests.Doom

+

GrandGrimoire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GrandGrimoire()
+ (ctor) GrandGrimoire( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Granite.html b/Docs/types/Granite.html new file mode 100644 index 0000000..ba02755 --- /dev/null +++ b/Docs/types/Granite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Granite + + +

Back to Server.Items

+

Granite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Granite()
+ (ctor) Granite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrantGuildTitleGump.html b/Docs/types/GrantGuildTitleGump.html new file mode 100644 index 0000000..67fc522 --- /dev/null +++ b/Docs/types/GrantGuildTitleGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GrantGuildTitleGump + + +

Back to Server.Gumps

+

GrantGuildTitleGump : GuildMobileListGump

+ (ctor) GrantGuildTitleGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/Grapes.html b/Docs/types/Grapes.html new file mode 100644 index 0000000..b9c356f --- /dev/null +++ b/Docs/types/Grapes.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Grapes + + +

Back to Server.Items

+

Grapes : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Grapes()
+ (ctor) Grapes( int amount )
+ (ctor) Grapes( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GraveDust.html b/Docs/types/GraveDust.html new file mode 100644 index 0000000..567a9b5 --- /dev/null +++ b/Docs/types/GraveDust.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GraveDust + + +

Back to Server.Items

+

GraveDust : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) GraveDust()
+ (ctor) GraveDust( Serial serial )
+ (ctor) GraveDust( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrayBrickFireplaceEastAddon.html b/Docs/types/GrayBrickFireplaceEastAddon.html new file mode 100644 index 0000000..c092102 --- /dev/null +++ b/Docs/types/GrayBrickFireplaceEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrayBrickFireplaceEastAddon + + +

Back to Server.Items

+

GrayBrickFireplaceEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GrayBrickFireplaceEastAddon()
+ (ctor) GrayBrickFireplaceEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrayBrickFireplaceEastDeed.html b/Docs/types/GrayBrickFireplaceEastDeed.html new file mode 100644 index 0000000..9d463c7 --- /dev/null +++ b/Docs/types/GrayBrickFireplaceEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GrayBrickFireplaceEastDeed + + +

Back to Server.Items

+

GrayBrickFireplaceEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GrayBrickFireplaceEastDeed()
+ (ctor) GrayBrickFireplaceEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrayBrickFireplaceSouthAddon.html b/Docs/types/GrayBrickFireplaceSouthAddon.html new file mode 100644 index 0000000..0c96bef --- /dev/null +++ b/Docs/types/GrayBrickFireplaceSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrayBrickFireplaceSouthAddon + + +

Back to Server.Items

+

GrayBrickFireplaceSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GrayBrickFireplaceSouthAddon()
+ (ctor) GrayBrickFireplaceSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrayBrickFireplaceSouthDeed.html b/Docs/types/GrayBrickFireplaceSouthDeed.html new file mode 100644 index 0000000..b79812a --- /dev/null +++ b/Docs/types/GrayBrickFireplaceSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GrayBrickFireplaceSouthDeed + + +

Back to Server.Items

+

GrayBrickFireplaceSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GrayBrickFireplaceSouthDeed()
+ (ctor) GrayBrickFireplaceSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreatHart.html b/Docs/types/GreatHart.html new file mode 100644 index 0000000..d366c62 --- /dev/null +++ b/Docs/types/GreatHart.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GreatHart + + +

Back to Server.Mobiles

+

GreatHart : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GreatHart()
+ (ctor) GreatHart( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterAgilityPotion.html b/Docs/types/GreaterAgilityPotion.html new file mode 100644 index 0000000..09dc132 --- /dev/null +++ b/Docs/types/GreaterAgilityPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GreaterAgilityPotion + + +

Back to Server.Items

+

GreaterAgilityPotion : BaseAgilityPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) GreaterAgilityPotion()
+ (ctor) GreaterAgilityPotion( Serial serial )
+ int DexOffset( get; )
+ TimeSpan Duration( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterConflagrationPotion.html b/Docs/types/GreaterConflagrationPotion.html new file mode 100644 index 0000000..5b3e3e0 --- /dev/null +++ b/Docs/types/GreaterConflagrationPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GreaterConflagrationPotion + + +

Back to Server.Items

+

GreaterConflagrationPotion : BaseConflagrationPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) GreaterConflagrationPotion()
+ (ctor) GreaterConflagrationPotion( Serial serial )
+ int LabelNumber( get; )
+ int MaxDamage( get; )
+ int MinDamage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterConfusionBlastPotion.html b/Docs/types/GreaterConfusionBlastPotion.html new file mode 100644 index 0000000..1fbde2e --- /dev/null +++ b/Docs/types/GreaterConfusionBlastPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GreaterConfusionBlastPotion + + +

Back to Server.Items

+

GreaterConfusionBlastPotion : BaseConfusionBlastPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) GreaterConfusionBlastPotion()
+ (ctor) GreaterConfusionBlastPotion( Serial serial )
+ int LabelNumber( get; )
+ int Radius( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterCurePotion.html b/Docs/types/GreaterCurePotion.html new file mode 100644 index 0000000..cf94b2b --- /dev/null +++ b/Docs/types/GreaterCurePotion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GreaterCurePotion + + +

Back to Server.Items

+

GreaterCurePotion : BaseCurePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) GreaterCurePotion()
+ (ctor) GreaterCurePotion( Serial serial )
+ CureLevelInfo[] LevelInfo( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterDragon.html b/Docs/types/GreaterDragon.html new file mode 100644 index 0000000..96e58bd --- /dev/null +++ b/Docs/types/GreaterDragon.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - GreaterDragon + + +

Back to Server.Mobiles

+

GreaterDragon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GreaterDragon()
+ (ctor) GreaterDragon( Serial serial )
+ bool AutoDispel( get; )
+ bool CanAngerOnTame( get; )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ bool ReacquireOnMovement( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ bool StatLossAfterTame( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterExplosionPotion.html b/Docs/types/GreaterExplosionPotion.html new file mode 100644 index 0000000..6dafbec --- /dev/null +++ b/Docs/types/GreaterExplosionPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GreaterExplosionPotion + + +

Back to Server.Items

+

GreaterExplosionPotion : BaseExplosionPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) GreaterExplosionPotion()
+ (ctor) GreaterExplosionPotion( Serial serial )
+ int MaxDamage( get; )
+ int MinDamage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterHealPotion.html b/Docs/types/GreaterHealPotion.html new file mode 100644 index 0000000..a63d34c --- /dev/null +++ b/Docs/types/GreaterHealPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GreaterHealPotion + + +

Back to Server.Items

+

GreaterHealPotion : BaseHealPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) GreaterHealPotion()
+ (ctor) GreaterHealPotion( Serial serial )
+ double Delay( get; )
+ int MaxHeal( get; )
+ int MinHeal( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterHealScroll.html b/Docs/types/GreaterHealScroll.html new file mode 100644 index 0000000..1b5968e --- /dev/null +++ b/Docs/types/GreaterHealScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GreaterHealScroll + + +

Back to Server.Items

+

GreaterHealScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) GreaterHealScroll()
+ (ctor) GreaterHealScroll( int amount )
+ (ctor) GreaterHealScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterHealSpell.html b/Docs/types/GreaterHealSpell.html new file mode 100644 index 0000000..79fc466 --- /dev/null +++ b/Docs/types/GreaterHealSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GreaterHealSpell + + +

Back to Server.Spells.Fourth

+

GreaterHealSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) GreaterHealSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/GreaterHealWand.html b/Docs/types/GreaterHealWand.html new file mode 100644 index 0000000..7e80a2e --- /dev/null +++ b/Docs/types/GreaterHealWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GreaterHealWand + + +

Back to Server.Items

+

GreaterHealWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) GreaterHealWand()
+ (ctor) GreaterHealWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterMongbat.html b/Docs/types/GreaterMongbat.html new file mode 100644 index 0000000..764772c --- /dev/null +++ b/Docs/types/GreaterMongbat.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GreaterMongbat + + +

Back to Server.Mobiles

+

GreaterMongbat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GreaterMongbat()
+ (ctor) GreaterMongbat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterPoisonPotion.html b/Docs/types/GreaterPoisonPotion.html new file mode 100644 index 0000000..91dbb82 --- /dev/null +++ b/Docs/types/GreaterPoisonPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GreaterPoisonPotion + + +

Back to Server.Items

+

GreaterPoisonPotion : BasePoisonPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) GreaterPoisonPotion()
+ (ctor) GreaterPoisonPotion( Serial serial )
+ double MaxPoisoningSkill( get; )
+ double MinPoisoningSkill( get; )
+ Poison Poison( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreaterStrengthPotion.html b/Docs/types/GreaterStrengthPotion.html new file mode 100644 index 0000000..12c6039 --- /dev/null +++ b/Docs/types/GreaterStrengthPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GreaterStrengthPotion + + +

Back to Server.Items

+

GreaterStrengthPotion : BaseStrengthPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) GreaterStrengthPotion()
+ (ctor) GreaterStrengthPotion( Serial serial )
+ TimeSpan Duration( get; )
+ int StrOffset( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenAcres.html b/Docs/types/GreenAcres.html new file mode 100644 index 0000000..01c12f8 --- /dev/null +++ b/Docs/types/GreenAcres.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GreenAcres + + +

Back to Server.Regions

+

GreenAcres : BaseRegion, IComparable

+ (ctor) GreenAcres( XmlElement xml, Map map, Region parent )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ virtual bool OnBeginSpellCast( Mobile m, ISpell s )
+ + diff --git a/Docs/types/GreenBeaker.html b/Docs/types/GreenBeaker.html new file mode 100644 index 0000000..e719bb8 --- /dev/null +++ b/Docs/types/GreenBeaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreenBeaker + + +

Back to Server.Items

+

GreenBeaker : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenBeaker()
+ (ctor) GreenBeaker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenBottle.html b/Docs/types/GreenBottle.html new file mode 100644 index 0000000..6cd9b74 --- /dev/null +++ b/Docs/types/GreenBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreenBottle + + +

Back to Server.Items

+

GreenBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenBottle()
+ (ctor) GreenBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenCurvedFlask.html b/Docs/types/GreenCurvedFlask.html new file mode 100644 index 0000000..454e586 --- /dev/null +++ b/Docs/types/GreenCurvedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreenCurvedFlask + + +

Back to Server.Items

+

GreenCurvedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenCurvedFlask()
+ (ctor) GreenCurvedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenDriedFlowers.html b/Docs/types/GreenDriedFlowers.html new file mode 100644 index 0000000..3631ee8 --- /dev/null +++ b/Docs/types/GreenDriedFlowers.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GreenDriedFlowers + + +

Back to Server.Items

+

GreenDriedFlowers : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenDriedFlowers()
+ (ctor) GreenDriedFlowers( int amount )
+ (ctor) GreenDriedFlowers( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenGourd.html b/Docs/types/GreenGourd.html new file mode 100644 index 0000000..6287082 --- /dev/null +++ b/Docs/types/GreenGourd.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GreenGourd + + +

Back to Server.Items

+

GreenGourd : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenGourd()
+ (ctor) GreenGourd( int amount )
+ (ctor) GreenGourd( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenMarbleFloor.html b/Docs/types/GreenMarbleFloor.html new file mode 100644 index 0000000..d763e39 --- /dev/null +++ b/Docs/types/GreenMarbleFloor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreenMarbleFloor + + +

Back to Server.Items

+

GreenMarbleFloor : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenMarbleFloor()
+ (ctor) GreenMarbleFloor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenNinjaQuestTeleporter.html b/Docs/types/GreenNinjaQuestTeleporter.html new file mode 100644 index 0000000..a409e61 --- /dev/null +++ b/Docs/types/GreenNinjaQuestTeleporter.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GreenNinjaQuestTeleporter + + +

Back to Server.Engines.Quests.Ninja

+

GreenNinjaQuestTeleporter : DynamicTeleporter, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenNinjaQuestTeleporter()
+ (ctor) GreenNinjaQuestTeleporter( Serial serial )
+ int LabelNumber( get; )
+ int NotWorkingMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool GetDestination( PlayerMobile player, ref Point3D loc, ref Map map )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenScales.html b/Docs/types/GreenScales.html new file mode 100644 index 0000000..15c9bc6 --- /dev/null +++ b/Docs/types/GreenScales.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GreenScales + + +

Back to Server.Items

+

GreenScales : BaseScales, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) GreenScales()
+ (ctor) GreenScales( int amount )
+ (ctor) GreenScales( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenStocking.html b/Docs/types/GreenStocking.html new file mode 100644 index 0000000..177de0b --- /dev/null +++ b/Docs/types/GreenStocking.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreenStocking + + +

Back to Server.Items

+

GreenStocking : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenStocking()
+ (ctor) GreenStocking( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenTea.html b/Docs/types/GreenTea.html new file mode 100644 index 0000000..72188d9 --- /dev/null +++ b/Docs/types/GreenTea.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreenTea + + +

Back to Server.Items

+

GreenTea : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenTea()
+ (ctor) GreenTea( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenTeaBasket.html b/Docs/types/GreenTeaBasket.html new file mode 100644 index 0000000..5e55ee5 --- /dev/null +++ b/Docs/types/GreenTeaBasket.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreenTeaBasket + + +

Back to Server.Items

+

GreenTeaBasket : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreenTeaBasket()
+ (ctor) GreenTeaBasket( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenThorns.html b/Docs/types/GreenThorns.html new file mode 100644 index 0000000..4837c4c --- /dev/null +++ b/Docs/types/GreenThorns.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GreenThorns + + +

Back to Server.Items

+

GreenThorns : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: EndActionTimer, InternalTarget

+ (ctor) GreenThorns()
+ (ctor) GreenThorns( Serial serial )
+ (ctor) GreenThorns( int amount )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreenThornsEffect.html b/Docs/types/GreenThornsEffect.html new file mode 100644 index 0000000..e44c96c --- /dev/null +++ b/Docs/types/GreenThornsEffect.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - GreenThornsEffect + + +

Back to Server.Items

+

GreenThornsEffect : Timer

+

Derived Types: DirtGreenThornsEffect, FurrowsGreenThornsEffect, SandGreenThornsEffect, SnowGreenThornsEffect, SwampGreenThornsEffect

+

Nested Types: TilesAndEffect

+ (static) GreenThornsEffect Create( Mobile from, LandTarget land )
+ (ctor) GreenThornsEffect( Point3D location, Map map, Mobile from )
+ Mobile From( get; )
+ Point3D Location( get; )
+ Map Map( get; )
+ virtual void OnTick()
+ virtual TimeSpan Play( int step )
+ bool SpawnCreature( BaseCreature creature )
+ bool SpawnItem( Item item )
+ + diff --git a/Docs/types/GreenThornsSHTeleporter.html b/Docs/types/GreenThornsSHTeleporter.html new file mode 100644 index 0000000..4b0aa31 --- /dev/null +++ b/Docs/types/GreenThornsSHTeleporter.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GreenThornsSHTeleporter + + +

Back to Server.Items

+

GreenThornsSHTeleporter : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer

+ (static) void Create( Point3D location, Map map )
+ (ctor) GreenThornsSHTeleporter()
+ (ctor) GreenThornsSHTeleporter( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreyFlagstones.html b/Docs/types/GreyFlagstones.html new file mode 100644 index 0000000..519341c --- /dev/null +++ b/Docs/types/GreyFlagstones.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreyFlagstones + + +

Back to Server.Items

+

GreyFlagstones : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreyFlagstones()
+ (ctor) GreyFlagstones( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreyMarbleFloor.html b/Docs/types/GreyMarbleFloor.html new file mode 100644 index 0000000..ef10530 --- /dev/null +++ b/Docs/types/GreyMarbleFloor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreyMarbleFloor + + +

Back to Server.Items

+

GreyMarbleFloor : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreyMarbleFloor()
+ (ctor) GreyMarbleFloor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreySlateFloor.html b/Docs/types/GreySlateFloor.html new file mode 100644 index 0000000..f5faf65 --- /dev/null +++ b/Docs/types/GreySlateFloor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GreySlateFloor + + +

Back to Server.Items

+

GreySlateFloor : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GreySlateFloor()
+ (ctor) GreySlateFloor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GreyWolf.html b/Docs/types/GreyWolf.html new file mode 100644 index 0000000..e18bc85 --- /dev/null +++ b/Docs/types/GreyWolf.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GreyWolf + + +

Back to Server.Mobiles

+

GreyWolf : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GreyWolf()
+ (ctor) GreyWolf( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochDrummel.html b/Docs/types/GrimmochDrummel.html new file mode 100644 index 0000000..7b9f03d --- /dev/null +++ b/Docs/types/GrimmochDrummel.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - GrimmochDrummel + + +

Back to Server.Mobiles

+

GrimmochDrummel : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GrimmochDrummel()
+ (ctor) GrimmochDrummel( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ bool DeleteCorpseOnDeath( get; )
+ bool ShowFameTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal1.html b/Docs/types/GrimmochJournal1.html new file mode 100644 index 0000000..26c939a --- /dev/null +++ b/Docs/types/GrimmochJournal1.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal1 + + +

Back to Server.Items

+

GrimmochJournal1 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal1()
+ (ctor) GrimmochJournal1( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal11.html b/Docs/types/GrimmochJournal11.html new file mode 100644 index 0000000..440f5e3 --- /dev/null +++ b/Docs/types/GrimmochJournal11.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal11 + + +

Back to Server.Items

+

GrimmochJournal11 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal11()
+ (ctor) GrimmochJournal11( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal14.html b/Docs/types/GrimmochJournal14.html new file mode 100644 index 0000000..cc9d7e0 --- /dev/null +++ b/Docs/types/GrimmochJournal14.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal14 + + +

Back to Server.Items

+

GrimmochJournal14 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal14()
+ (ctor) GrimmochJournal14( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal17.html b/Docs/types/GrimmochJournal17.html new file mode 100644 index 0000000..4080975 --- /dev/null +++ b/Docs/types/GrimmochJournal17.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal17 + + +

Back to Server.Items

+

GrimmochJournal17 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal17()
+ (ctor) GrimmochJournal17( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal2.html b/Docs/types/GrimmochJournal2.html new file mode 100644 index 0000000..fbd6df3 --- /dev/null +++ b/Docs/types/GrimmochJournal2.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal2 + + +

Back to Server.Items

+

GrimmochJournal2 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal2()
+ (ctor) GrimmochJournal2( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal23.html b/Docs/types/GrimmochJournal23.html new file mode 100644 index 0000000..f0631d2 --- /dev/null +++ b/Docs/types/GrimmochJournal23.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal23 + + +

Back to Server.Items

+

GrimmochJournal23 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal23()
+ (ctor) GrimmochJournal23( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal3.html b/Docs/types/GrimmochJournal3.html new file mode 100644 index 0000000..7d9b9ce --- /dev/null +++ b/Docs/types/GrimmochJournal3.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal3 + + +

Back to Server.Items

+

GrimmochJournal3 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal3()
+ (ctor) GrimmochJournal3( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal6.html b/Docs/types/GrimmochJournal6.html new file mode 100644 index 0000000..d0d7f3f --- /dev/null +++ b/Docs/types/GrimmochJournal6.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal6 + + +

Back to Server.Items

+

GrimmochJournal6 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal6()
+ (ctor) GrimmochJournal6( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrimmochJournal7.html b/Docs/types/GrimmochJournal7.html new file mode 100644 index 0000000..14f4403 --- /dev/null +++ b/Docs/types/GrimmochJournal7.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GrimmochJournal7 + + +

Back to Server.Items

+

GrimmochJournal7 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GrimmochJournal7()
+ (ctor) GrimmochJournal7( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Grizelda.html b/Docs/types/Grizelda.html new file mode 100644 index 0000000..c6cb298 --- /dev/null +++ b/Docs/types/Grizelda.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Grizelda + + +

Back to Server.Engines.Quests.Hag

+

Grizelda : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Grizelda()
+ (ctor) Grizelda( Serial serial )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrizzledBones.html b/Docs/types/GrizzledBones.html new file mode 100644 index 0000000..74753c3 --- /dev/null +++ b/Docs/types/GrizzledBones.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GrizzledBones + + +

Back to Server.Items

+

GrizzledBones : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GrizzledBones()
+ (ctor) GrizzledBones( int amount )
+ (ctor) GrizzledBones( Serial serial )
+ (ctor) GrizzledBones( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrizzledMare.html b/Docs/types/GrizzledMare.html new file mode 100644 index 0000000..105e9e7 --- /dev/null +++ b/Docs/types/GrizzledMare.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GrizzledMare + + +

Back to Server.Mobiles

+

GrizzledMare : SkeletalMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) GrizzledMare()
+ (ctor) GrizzledMare( Serial serial )
+ bool DeleteOnRelease( get; )
+ bool IsDispellable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrizzledMareStatuette.html b/Docs/types/GrizzledMareStatuette.html new file mode 100644 index 0000000..48731b2 --- /dev/null +++ b/Docs/types/GrizzledMareStatuette.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GrizzledMareStatuette + + +

Back to Server.Items

+

GrizzledMareStatuette : BaseImprisonedMobile, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GrizzledMareStatuette()
+ (ctor) GrizzledMareStatuette( Serial serial )
+ int LabelNumber( get; )
+ BaseCreature Summon( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GrizzlyBear.html b/Docs/types/GrizzlyBear.html new file mode 100644 index 0000000..4f0d18b --- /dev/null +++ b/Docs/types/GrizzlyBear.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GrizzlyBear + + +

Back to Server.Mobiles

+

GrizzlyBear : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) GrizzlyBear()
+ (ctor) GrizzlyBear( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GroupComparer.html b/Docs/types/GroupComparer.html new file mode 100644 index 0000000..792d317 --- /dev/null +++ b/Docs/types/GroupComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GroupComparer + + +

Back to Server.Items

+

(Container) - GroupComparer : IComparer

+ (ctor) GroupComparer( CheckItemGroup grouper )
+ virtual int Compare( object x, object y )
+ + diff --git a/Docs/types/GruesomeStandardArtifact.html b/Docs/types/GruesomeStandardArtifact.html new file mode 100644 index 0000000..020c168 --- /dev/null +++ b/Docs/types/GruesomeStandardArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GruesomeStandardArtifact + + +

Back to Server.Items

+

GruesomeStandardArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GruesomeStandardArtifact()
+ (ctor) GruesomeStandardArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuantletsOfAnger.html b/Docs/types/GuantletsOfAnger.html new file mode 100644 index 0000000..ae4b546 --- /dev/null +++ b/Docs/types/GuantletsOfAnger.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - GuantletsOfAnger + + +

Back to Server.Items

+

GuantletsOfAnger : PlateGloves, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) GuantletsOfAnger()
+ (ctor) GuantletsOfAnger( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuardAI.html b/Docs/types/GuardAI.html new file mode 100644 index 0000000..216d240 --- /dev/null +++ b/Docs/types/GuardAI.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GuardAI + + +

Back to Server.Factions

+

GuardAI (Enum)

+ Bless = 1,
+ Curse = 2,
+ Melee = 4,
+ Magic = 8,
+ Smart = 16
+ + diff --git a/Docs/types/GuardDefinition.html b/Docs/types/GuardDefinition.html new file mode 100644 index 0000000..44bd2d6 --- /dev/null +++ b/Docs/types/GuardDefinition.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GuardDefinition + + +

Back to Server.Factions

+

GuardDefinition

+ (ctor) GuardDefinition( Type type, int itemID, int price, int upkeep, int maximum, TextDefinition header, TextDefinition label )
+ TextDefinition Header( get; )
+ int ItemID( get; )
+ TextDefinition Label( get; )
+ int Maximum( get; )
+ int Price( get; )
+ Type Type( get; )
+ int Upkeep( get; )
+ + diff --git a/Docs/types/GuardList.html b/Docs/types/GuardList.html new file mode 100644 index 0000000..388669a --- /dev/null +++ b/Docs/types/GuardList.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GuardList + + +

Back to Server.Factions

+

GuardList

+ (ctor) GuardList( GuardDefinition definition )
+ GuardDefinition Definition( get; )
+ List<BaseFactionGuard> Guards( get; )
+ BaseFactionGuard Construct()
+ + diff --git a/Docs/types/GuardTimer.html b/Docs/types/GuardTimer.html new file mode 100644 index 0000000..56ea91f --- /dev/null +++ b/Docs/types/GuardTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GuardTimer + + +

Back to Server.Regions

+

(GuardedRegion) - GuardTimer : Timer

+ (ctor) GuardTimer( Mobile m, Dictionary<Mobile,GuardTimer> table )
+ virtual void OnTick()
+ + diff --git a/Docs/types/GuardedRegion.html b/Docs/types/GuardedRegion.html new file mode 100644 index 0000000..a659008 --- /dev/null +++ b/Docs/types/GuardedRegion.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - GuardedRegion + + +

Back to Server.Regions

+

GuardedRegion : BaseRegion, IComparable

+

Derived Types: TownRegion

+

Nested Types: GuardTimer

+ (static) void CheckGuarded_OnCommand( CommandEventArgs e )
+ (static) GuardedRegion Disable( GuardedRegion reg )
+ (static) void Initialize()
+ (static) void SetGuarded_OnCommand( CommandEventArgs e )
+ (static) void ToggleGuarded_OnCommand( CommandEventArgs e )
+ (ctor) GuardedRegion( XmlElement xml, Map map, Region parent )
+ (ctor) GuardedRegion( string name, Map map, int priority, Rectangle2D[] area )
+ (ctor) GuardedRegion( string name, Map map, int priority, Rectangle3D[] area )
+ bool AllowReds( get; )
+ Type DefaultGuardType( get; )
+ bool Disabled( get; set; )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ void CallGuards( Point3D p )
+ void CheckGuardCandidate( Mobile m )
+ virtual bool CheckVendorAccess( BaseVendor vendor, Mobile from )
+ virtual bool IsDisabled()
+ bool IsGuardCandidate( Mobile m )
+ virtual void MakeGuard( Mobile focus )
+ virtual void OnAggressed( Mobile aggressor, Mobile aggressed, bool criminal )
+ virtual bool OnBeginSpellCast( Mobile m, ISpell s )
+ virtual void OnCriminalAction( Mobile m, bool message )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ virtual void OnGotBeneficialAction( Mobile helper, Mobile helped )
+ virtual void OnSpeech( SpeechEventArgs args )
+ + diff --git a/Docs/types/Guardian.html b/Docs/types/Guardian.html new file mode 100644 index 0000000..4ee6c58 --- /dev/null +++ b/Docs/types/Guardian.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Guardian + + +

Back to Server.Mobiles

+

Guardian : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Guardian()
+ (ctor) Guardian( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuardianBarrier.html b/Docs/types/GuardianBarrier.html new file mode 100644 index 0000000..3c61241 --- /dev/null +++ b/Docs/types/GuardianBarrier.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GuardianBarrier + + +

Back to Server.Engines.Quests.Ninja

+

GuardianBarrier : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GuardianBarrier()
+ (ctor) GuardianBarrier( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuideToGuilds.html b/Docs/types/GuideToGuilds.html new file mode 100644 index 0000000..f381ed3 --- /dev/null +++ b/Docs/types/GuideToGuilds.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GuideToGuilds + + +

Back to Server.Items

+

GuideToGuilds : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) GuideToGuilds()
+ (ctor) GuideToGuilds( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Guild.html b/Docs/types/Guild.html new file mode 100644 index 0000000..4934d8a --- /dev/null +++ b/Docs/types/Guild.html @@ -0,0 +1,86 @@ + + + RunUO Documentation - Class Overview - Guild + + +

Back to Server.Guilds

+

Guild : BaseGuild, ISerializable

+

Nested Types: GuildPropsTarget

+ (static) bool NewGuildSystem( get; )
+ (static) void Configure()
+ (static) BaseGuild EventSink_CreateGuild( CreateGuildEventArgs args )
+ (static) void EventSink_GuildGumpRequest( GuildGumpRequestArgs args )
+ (static) Guild GetAllianceLeader( Guild g )
+ (static) void GuildProps_OnCommand( CommandEventArgs e )
+ (static) void HandleDeath( Mobile victim )
+ (static) void HandleDeath( Mobile victim, Mobile killer )
+ (ctor) Guild( int id )
+ (ctor) Guild( Mobile leader, string name, string abbreviation )
+ string Abbreviation( get; set; )
+ List<Mobile> Accepted( get; )
+ List<WarDeclaration> AcceptedWars( get; )
+ AllianceInfo Alliance( get; set; )
+ Guild AllianceLeader( get; )
+ string AllianceName( get; )
+ List<Guild> Allies( get; )
+ List<Guild> AllyDeclarations( get; )
+ List<Guild> AllyInvitations( get; )
+ List<Mobile> Candidates( get; )
+ string Charter( get; set; )
+ bool Disbanded( get; )
+ List<Guild> Enemies( get; )
+ Item Guildstone( get; set; )
+ bool IsAllianceMember( get; )
+ bool IsAlliancePendingMember( get; )
+ DateTime LastFealty( get; set; )
+ Mobile Leader( get; set; )
+ List<Mobile> Members( get; )
+ string Name( get; set; )
+ List<WarDeclaration> PendingWars( get; )
+ Item Teleporter( get; set; )
+ GuildType Type( get; set; )
+ DateTime TypeLastChange( get; )
+ List<Guild> WarDeclarations( get; )
+ List<Guild> WarInvitations( get; )
+ string Website( get; set; )
+ void AddAlly( Guild g )
+ void AddEnemy( Guild g )
+ void AddMember( Mobile m )
+ void CalculateGuildmaster()
+ bool CanBeVotedFor( Mobile m )
+ bool CanVote( Mobile m )
+ void CheckExpiredWars()
+ virtual void Deserialize( GenericReader reader )
+ void Disband()
+ WarDeclaration FindActiveWar( Guild g )
+ WarDeclaration FindPendingWar( Guild g )
+ void GuildChat( Mobile from, string text )
+ void GuildChat( Mobile from, int hue, string text )
+ void GuildMessage( int number )
+ void GuildMessage( int number, string args )
+ void GuildMessage( int number, bool append, string affix )
+ void GuildMessage( int number, string args, int hue )
+ void GuildMessage( int number, bool append, string affix, string args )
+ void GuildMessage( int num, bool append, string format, object[] args )
+ void GuildMessage( int number, bool append, string affix, string args, int hue )
+ void GuildTextMessage( string text )
+ void GuildTextMessage( int hue, string text )
+ void GuildTextMessage( string format, object[] args )
+ void GuildTextMessage( int hue, string format, object[] args )
+ void InvalidateMemberNotoriety()
+ void InvalidateMemberProperties()
+ void InvalidateMemberProperties( bool onlyOPL )
+ void InvalidateWarNotoriety()
+ bool IsAlly( Guild g )
+ bool IsEnemy( Guild g )
+ bool IsMember( Mobile m )
+ bool IsWar( Guild g )
+ virtual void OnDelete( Mobile mob )
+ void RemoveAlly( Guild g )
+ void RemoveEnemy( Guild g )
+ void RemoveMember( Mobile m )
+ void RemoveMember( Mobile m, int message )
+ virtual void Serialize( GenericWriter writer )
+ void VerifyGuild_Callback()
+ + diff --git a/Docs/types/GuildAbbrvPrompt.html b/Docs/types/GuildAbbrvPrompt.html new file mode 100644 index 0000000..28db8cf --- /dev/null +++ b/Docs/types/GuildAbbrvPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildAbbrvPrompt + + +

Back to Server.Gumps

+

GuildAbbrvPrompt : Prompt

+ (ctor) GuildAbbrvPrompt( Mobile m, Guild g )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/GuildAcceptWarGump.html b/Docs/types/GuildAcceptWarGump.html new file mode 100644 index 0000000..ccbf71d --- /dev/null +++ b/Docs/types/GuildAcceptWarGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildAcceptWarGump + + +

Back to Server.Gumps

+

GuildAcceptWarGump : GuildListGump

+ (ctor) GuildAcceptWarGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildAdminCandidatesGump.html b/Docs/types/GuildAdminCandidatesGump.html new file mode 100644 index 0000000..1f9df08 --- /dev/null +++ b/Docs/types/GuildAdminCandidatesGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildAdminCandidatesGump + + +

Back to Server.Gumps

+

GuildAdminCandidatesGump : GuildMobileListGump

+ (ctor) GuildAdminCandidatesGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildAdvancedSearchGump.html b/Docs/types/GuildAdvancedSearchGump.html new file mode 100644 index 0000000..cc90c44 --- /dev/null +++ b/Docs/types/GuildAdvancedSearchGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildAdvancedSearchGump + + +

Back to Server.Guilds

+

GuildAdvancedSearchGump : BaseGuildGump

+ (ctor) GuildAdvancedSearchGump( PlayerMobile pm, Guild g, GuildDisplayType display, SearchSelectionCallback callback )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void PopulateGump()
+ + diff --git a/Docs/types/GuildCandidatesGump.html b/Docs/types/GuildCandidatesGump.html new file mode 100644 index 0000000..cc7eb09 --- /dev/null +++ b/Docs/types/GuildCandidatesGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildCandidatesGump + + +

Back to Server.Gumps

+

GuildCandidatesGump : GuildMobileListGump

+ (ctor) GuildCandidatesGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildChangeTypeGump.html b/Docs/types/GuildChangeTypeGump.html new file mode 100644 index 0000000..e43f6c7 --- /dev/null +++ b/Docs/types/GuildChangeTypeGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GuildChangeTypeGump + + +

Back to Server.Gumps

+

GuildChangeTypeGump : Gump

+ (ctor) GuildChangeTypeGump( Mobile from, Guild guild )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildCharterGump.html b/Docs/types/GuildCharterGump.html new file mode 100644 index 0000000..737deed --- /dev/null +++ b/Docs/types/GuildCharterGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GuildCharterGump + + +

Back to Server.Gumps

+

GuildCharterGump : Gump

+ (ctor) GuildCharterGump( Mobile from, Guild guild )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildCharterPrompt.html b/Docs/types/GuildCharterPrompt.html new file mode 100644 index 0000000..7882679 --- /dev/null +++ b/Docs/types/GuildCharterPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildCharterPrompt + + +

Back to Server.Gumps

+

GuildCharterPrompt : Prompt

+ (ctor) GuildCharterPrompt( Mobile m, Guild g )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/GuildCompareStatus.html b/Docs/types/GuildCompareStatus.html new file mode 100644 index 0000000..58ac0d4 --- /dev/null +++ b/Docs/types/GuildCompareStatus.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildCompareStatus + + +

Back to Server.Guilds

+

GuildCompareStatus (Enum)

+ Peace = 0,
+ Ally = 1,
+ War = 2
+ + diff --git a/Docs/types/GuildDeclarePeaceGump.html b/Docs/types/GuildDeclarePeaceGump.html new file mode 100644 index 0000000..9e3a09f --- /dev/null +++ b/Docs/types/GuildDeclarePeaceGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildDeclarePeaceGump + + +

Back to Server.Gumps

+

GuildDeclarePeaceGump : GuildListGump

+ (ctor) GuildDeclarePeaceGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildDeclareWarGump.html b/Docs/types/GuildDeclareWarGump.html new file mode 100644 index 0000000..6736449 --- /dev/null +++ b/Docs/types/GuildDeclareWarGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildDeclareWarGump + + +

Back to Server.Gumps

+

GuildDeclareWarGump : GuildListGump

+ (ctor) GuildDeclareWarGump( Mobile from, Guild guild, List<Guild> list )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildDeclareWarPrompt.html b/Docs/types/GuildDeclareWarPrompt.html new file mode 100644 index 0000000..aea93cd --- /dev/null +++ b/Docs/types/GuildDeclareWarPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildDeclareWarPrompt + + +

Back to Server.Gumps

+

GuildDeclareWarPrompt : Prompt

+ (ctor) GuildDeclareWarPrompt( Mobile m, Guild g )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/GuildDeed.html b/Docs/types/GuildDeed.html new file mode 100644 index 0000000..ce8d442 --- /dev/null +++ b/Docs/types/GuildDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GuildDeed + + +

Back to Server.Items

+

GuildDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalPrompt

+ (ctor) GuildDeed()
+ (ctor) GuildDeed( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuildDiplomacyGump.html b/Docs/types/GuildDiplomacyGump.html new file mode 100644 index 0000000..4b3d8da --- /dev/null +++ b/Docs/types/GuildDiplomacyGump.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - GuildDiplomacyGump + + +

Back to Server.Guilds

+

GuildDiplomacyGump : BaseGuildListGump<Guild>

+

Derived Types: AllianceRosterGump

+

Nested Types: AbbrevComparer, NameComparer, StatusComparer

+ (ctor) GuildDiplomacyGump( PlayerMobile pm, Guild g )
+ (ctor) GuildDiplomacyGump( PlayerMobile pm, Guild g, IComparer<Guild> currentComparer, bool ascending, string filter, int startNumber, GuildDisplayType display )
+ (ctor) GuildDiplomacyGump( PlayerMobile pm, Guild g, bool ascending, string filter, int startNumber, List<Guild> list, TextDefinition lowerText )
+ (ctor) GuildDiplomacyGump( PlayerMobile pm, Guild g, IComparer<Guild> currentComparer, bool ascending, string filter, int startNumber, List<Guild> list, TextDefinition lowerText )
+ (ctor) GuildDiplomacyGump( PlayerMobile pm, Guild g, IComparer<Guild> currentComparer, bool ascending, string filter, int startNumber, GuildDisplayType display, List<Guild> list, TextDefinition lowerText )
+ bool AllowAdvancedSearch( get; )
+ bool WillFilter( get; )
+ void AdvancedSearch_Callback( GuildDisplayType display )
+ virtual void DrawEndingEntry( int itemNumber )
+ virtual Gump GetObjectInfoGump( PlayerMobile pm, Guild g, Guild o )
+ virtual Gump GetResentGump( PlayerMobile pm, Guild g, IComparer<Guild> comparer, bool ascending, string filter, int startNumber )
+ virtual TextDefinition[] GetValuesFor( Guild g, int aryLength )
+ virtual bool HasRelationship( Guild g )
+ virtual bool IsFiltered( Guild g, string filter )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void PopulateGump()
+ + diff --git a/Docs/types/GuildDismissGump.html b/Docs/types/GuildDismissGump.html new file mode 100644 index 0000000..2a99792 --- /dev/null +++ b/Docs/types/GuildDismissGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildDismissGump + + +

Back to Server.Gumps

+

GuildDismissGump : GuildMobileListGump

+ (ctor) GuildDismissGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildDisplayType.html b/Docs/types/GuildDisplayType.html new file mode 100644 index 0000000..8b8f445 --- /dev/null +++ b/Docs/types/GuildDisplayType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildDisplayType + + +

Back to Server.Guilds

+

GuildDisplayType (Enum)

+ All = 0,
+ AwaitingAction = 1,
+ Relations = 2
+ + diff --git a/Docs/types/GuildEntry.html b/Docs/types/GuildEntry.html new file mode 100644 index 0000000..4eeebc7 --- /dev/null +++ b/Docs/types/GuildEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GuildEntry + + +

Back to Server

+

(World) - GuildEntry : IEntityEntry

+ (ctor) GuildEntry( BaseGuild g, long pos, int length )
+ BaseGuild Guild( get; )
+ int Length( get; )
+ long Position( get; )
+ Serial Serial( get; )
+ int TypeID( get; )
+ + diff --git a/Docs/types/GuildGump.html b/Docs/types/GuildGump.html new file mode 100644 index 0000000..559a2cc --- /dev/null +++ b/Docs/types/GuildGump.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GuildGump + + +

Back to Server.Gumps

+

GuildGump : Gump

+ (static) bool BadLeader( Mobile m, Guild g )
+ (static) bool BadMember( Mobile m, Guild g )
+ (static) void EnsureClosed( Mobile m )
+ (ctor) GuildGump( Mobile beholder, Guild guild )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/GuildGumpRequestArgs.html b/Docs/types/GuildGumpRequestArgs.html new file mode 100644 index 0000000..6baf83c --- /dev/null +++ b/Docs/types/GuildGumpRequestArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GuildGumpRequestArgs + + +

Back to Server

+

GuildGumpRequestArgs : EventArgs

+ (ctor) GuildGumpRequestArgs( Mobile mobile )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/GuildGumpRequestHandler.html b/Docs/types/GuildGumpRequestHandler.html new file mode 100644 index 0000000..f8bce15 --- /dev/null +++ b/Docs/types/GuildGumpRequestHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GuildGumpRequestHandler + + +

Back to Server

+

GuildGumpRequestHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) GuildGumpRequestHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( GuildGumpRequestArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( GuildGumpRequestArgs e )
+ + diff --git a/Docs/types/GuildHouse.html b/Docs/types/GuildHouse.html new file mode 100644 index 0000000..6086b9a --- /dev/null +++ b/Docs/types/GuildHouse.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - GuildHouse + + +

Back to Server.Multis

+

GuildHouse : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GuildHouse( Serial serial )
+ (ctor) GuildHouse( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int ConvertOffsetX( get; )
+ int ConvertOffsetY( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuildInfoGump.html b/Docs/types/GuildInfoGump.html new file mode 100644 index 0000000..76e9633 --- /dev/null +++ b/Docs/types/GuildInfoGump.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GuildInfoGump + + +

Back to Server.Guilds

+

GuildInfoGump : BaseGuildGump

+ (ctor) GuildInfoGump( PlayerMobile pm, Guild g )
+ (ctor) GuildInfoGump( PlayerMobile pm, Guild g, bool isResigning )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void PopulateGump()
+ void SetCharter_Callback( Mobile from, string text )
+ void SetWebsite_Callback( Mobile from, string text )
+ + diff --git a/Docs/types/GuildInvitationRequest.html b/Docs/types/GuildInvitationRequest.html new file mode 100644 index 0000000..a681067 --- /dev/null +++ b/Docs/types/GuildInvitationRequest.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildInvitationRequest + + +

Back to Server.Guilds

+

GuildInvitationRequest : BaseGuildGump

+ (ctor) GuildInvitationRequest( PlayerMobile pm, Guild g, PlayerMobile inviter )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void PopulateGump()
+ + diff --git a/Docs/types/GuildListGump.html b/Docs/types/GuildListGump.html new file mode 100644 index 0000000..d19608d --- /dev/null +++ b/Docs/types/GuildListGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildListGump + + +

Back to Server.Gumps

+

GuildListGump : Gump

+

Derived Types: GuildAcceptWarGump, GuildDeclarePeaceGump, GuildDeclareWarGump, GuildRejectWarGump, GuildRescindDeclarationGump

+ (ctor) GuildListGump( Mobile from, Guild guild, bool radio, List<Guild> list )
+ virtual void Design()
+ + diff --git a/Docs/types/GuildMemberInfoGump.html b/Docs/types/GuildMemberInfoGump.html new file mode 100644 index 0000000..f0bae82 --- /dev/null +++ b/Docs/types/GuildMemberInfoGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GuildMemberInfoGump + + +

Back to Server.Guilds

+

GuildMemberInfoGump : BaseGuildGump

+ (ctor) GuildMemberInfoGump( PlayerMobile pm, Guild g, PlayerMobile member, bool toKick, bool toPromoteToLeader )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void PopulateGump()
+ void SetTitle_Callback( Mobile from, string text )
+ + diff --git a/Docs/types/GuildMobileListGump.html b/Docs/types/GuildMobileListGump.html new file mode 100644 index 0000000..89c9906 --- /dev/null +++ b/Docs/types/GuildMobileListGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildMobileListGump + + +

Back to Server.Gumps

+

GuildMobileListGump : Gump

+

Derived Types: DeclareFealtyGump, GrantGuildTitleGump, GuildAdminCandidatesGump, GuildCandidatesGump, GuildDismissGump, GuildRosterGump

+ (ctor) GuildMobileListGump( Mobile from, Guild guild, bool radio, List<Mobile> list )
+ virtual void Design()
+ + diff --git a/Docs/types/GuildNamePrompt.html b/Docs/types/GuildNamePrompt.html new file mode 100644 index 0000000..41e1904 --- /dev/null +++ b/Docs/types/GuildNamePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildNamePrompt + + +

Back to Server.Gumps

+

GuildNamePrompt : Prompt

+ (ctor) GuildNamePrompt( Mobile m, Guild g )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/GuildPropsTarget.html b/Docs/types/GuildPropsTarget.html new file mode 100644 index 0000000..59d6a5c --- /dev/null +++ b/Docs/types/GuildPropsTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GuildPropsTarget + + +

Back to Server.Guilds

+

(Guild) - GuildPropsTarget : Target

+ (ctor) GuildPropsTarget()
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/GuildRecruitTarget.html b/Docs/types/GuildRecruitTarget.html new file mode 100644 index 0000000..6836651 --- /dev/null +++ b/Docs/types/GuildRecruitTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildRecruitTarget + + +

Back to Server.Gumps

+

GuildRecruitTarget : Target

+ (ctor) GuildRecruitTarget( Mobile m, Guild guild )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetFinish( Mobile from )
+ + diff --git a/Docs/types/GuildRejectWarGump.html b/Docs/types/GuildRejectWarGump.html new file mode 100644 index 0000000..8e4f627 --- /dev/null +++ b/Docs/types/GuildRejectWarGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildRejectWarGump + + +

Back to Server.Gumps

+

GuildRejectWarGump : GuildListGump

+ (ctor) GuildRejectWarGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildRescindDeclarationGump.html b/Docs/types/GuildRescindDeclarationGump.html new file mode 100644 index 0000000..e1f920b --- /dev/null +++ b/Docs/types/GuildRescindDeclarationGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildRescindDeclarationGump + + +

Back to Server.Gumps

+

GuildRescindDeclarationGump : GuildListGump

+ (ctor) GuildRescindDeclarationGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildRosterGump.html b/Docs/types/GuildRosterGump.html new file mode 100644 index 0000000..129ca13 --- /dev/null +++ b/Docs/types/GuildRosterGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildRosterGump + + +

Back to Server.Gumps

+

GuildRosterGump : GuildMobileListGump

+ (ctor) GuildRosterGump( Mobile from, Guild guild )
+ virtual void Design()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildStatus.html b/Docs/types/GuildStatus.html new file mode 100644 index 0000000..4f9cb8e --- /dev/null +++ b/Docs/types/GuildStatus.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildStatus + + +

Back to Server.Misc

+

GuildStatus (Enum)

+ None = 0,
+ Peaceful = 1,
+ Waring = 2
+ + diff --git a/Docs/types/GuildTeleporter.html b/Docs/types/GuildTeleporter.html new file mode 100644 index 0000000..bdd58e8 --- /dev/null +++ b/Docs/types/GuildTeleporter.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GuildTeleporter + + +

Back to Server.Items

+

GuildTeleporter : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GuildTeleporter()
+ (ctor) GuildTeleporter( Serial serial )
+ (ctor) GuildTeleporter( Item stone )
+ bool DisplayLootType( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuildTitlePrompt.html b/Docs/types/GuildTitlePrompt.html new file mode 100644 index 0000000..1e454f4 --- /dev/null +++ b/Docs/types/GuildTitlePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildTitlePrompt + + +

Back to Server.Gumps

+

GuildTitlePrompt : Prompt

+ (ctor) GuildTitlePrompt( Mobile leader, Mobile target, Guild g )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/GuildType.html b/Docs/types/GuildType.html new file mode 100644 index 0000000..b2cafae --- /dev/null +++ b/Docs/types/GuildType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildType + + +

Back to Server.Guilds

+

GuildType (Enum)

+ Regular = 0,
+ Chaos = 1,
+ Order = 2
+ + diff --git a/Docs/types/GuildWarAdminGump.html b/Docs/types/GuildWarAdminGump.html new file mode 100644 index 0000000..131a2ac --- /dev/null +++ b/Docs/types/GuildWarAdminGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GuildWarAdminGump + + +

Back to Server.Gumps

+

GuildWarAdminGump : Gump

+ (ctor) GuildWarAdminGump( Mobile from, Guild guild )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildWarGump.html b/Docs/types/GuildWarGump.html new file mode 100644 index 0000000..0f6f265 --- /dev/null +++ b/Docs/types/GuildWarGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GuildWarGump + + +

Back to Server.Gumps

+

GuildWarGump : Gump

+ (ctor) GuildWarGump( Mobile from, Guild guild )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/GuildWebsitePrompt.html b/Docs/types/GuildWebsitePrompt.html new file mode 100644 index 0000000..2499110 --- /dev/null +++ b/Docs/types/GuildWebsitePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GuildWebsitePrompt + + +

Back to Server.Gumps

+

GuildWebsitePrompt : Prompt

+ (ctor) GuildWebsitePrompt( Mobile m, Guild g )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/GuildmasterGump.html b/Docs/types/GuildmasterGump.html new file mode 100644 index 0000000..632cad7 --- /dev/null +++ b/Docs/types/GuildmasterGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GuildmasterGump + + +

Back to Server.Gumps

+

GuildmasterGump : Gump

+ (ctor) GuildmasterGump( Mobile from, Guild guild )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/Guildstone.html b/Docs/types/Guildstone.html new file mode 100644 index 0000000..db0f509 --- /dev/null +++ b/Docs/types/Guildstone.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Guildstone + + +

Back to Server.Items

+

Guildstone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IAddon, IChopable

+ (ctor) Guildstone( Serial serial )
+ (ctor) Guildstone( Guild g )
+ (ctor) Guildstone( Guild g, string guildName, string abbrev )
+ Item Deed( get; )
+ Guild Guild( get; )
+ int LabelNumber( get; )
+ void AddToHouse()
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAfterDelete()
+ virtual void OnChop( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuildstoneDeed.html b/Docs/types/GuildstoneDeed.html new file mode 100644 index 0000000..72d219b --- /dev/null +++ b/Docs/types/GuildstoneDeed.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GuildstoneDeed + + +

Back to Server.Items

+

GuildstoneDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GuildstoneDeed( Serial serial )
+ (ctor) GuildstoneDeed( Guild g, string guildName, string abbrev )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ void Placement_OnTarget( Mobile from, object targeted, object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Guillotine.html b/Docs/types/Guillotine.html new file mode 100644 index 0000000..25d0286 --- /dev/null +++ b/Docs/types/Guillotine.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Guillotine + + +

Back to Server.Items

+

Guillotine : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Guillotine()
+ (ctor) Guillotine( Serial serial )
+ void BackUp()
+ virtual void Deserialize( GenericReader reader )
+ void Down1()
+ void Down2()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuillotineAddon.html b/Docs/types/GuillotineAddon.html new file mode 100644 index 0000000..4b8222f --- /dev/null +++ b/Docs/types/GuillotineAddon.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GuillotineAddon + + +

Back to Server.Items

+

GuillotineAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) GuillotineAddon()
+ (ctor) GuillotineAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ void Activate( object obj )
+ virtual void Activate( AddonComponent c, Mobile from )
+ void Deactivate( object obj )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuillotineComponent.html b/Docs/types/GuillotineComponent.html new file mode 100644 index 0000000..7ac855f --- /dev/null +++ b/Docs/types/GuillotineComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GuillotineComponent + + +

Back to Server.Items

+

GuillotineComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) GuillotineComponent()
+ (ctor) GuillotineComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GuillotineDeed.html b/Docs/types/GuillotineDeed.html new file mode 100644 index 0000000..b8e8622 --- /dev/null +++ b/Docs/types/GuillotineDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - GuillotineDeed + + +

Back to Server.Items

+

GuillotineDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) GuillotineDeed()
+ (ctor) GuillotineDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Gump.html b/Docs/types/Gump.html new file mode 100644 index 0000000..85812d4 --- /dev/null +++ b/Docs/types/Gump.html @@ -0,0 +1,54 @@ + + + RunUO Documentation - Class Overview - Gump + + +

Back to Server.Gumps

+

Gump

+

Derived Types: AcceptProtectorGump, AddDoorGump, AddGump, AdminGump, AnimalFormGump, AnimalLoreGump, BanDurationGump, BarkeeperGump, BarkeeperTitleGump, BaseConfirmGump, BaseGridGump, BaseGuildGump, BaseImageTileButtonsGump, BaseQuestGump, BaseVendorRentalGump, BOBFilterGump, BOBGump, BODBuyGump, CancelRenewInventoryInsuranceGump, CategorizedAddGump, ChangeHairHueGump, ChangeHairstyleGump, CharacterPlinthGump, CharacterStatueGump, ChylothPartyGump, ClaimListGump, ClientGump, CommandInfoGump, ConfirmCommitGump, ConfirmDryDockGump, ConfirmGump, ConfirmHeritageGump, ConfirmHouseResize, ConfirmReleaseGump, ConfirmRemovalGump, ConfirmSkillGump, ConfirmTransferGump, CraftGump, CraftGumpItem, CreateGuildGump, CustomHuePickerGump, DawnsMusicBoxGump, DisguiseGump, EditSkillGump, ElectionManagementGump, EmptyTheBowlGump, ErrorGump, FacingGump, FacingGump, FacingGump, FactionGump, GameGump, GoGump, GuildChangeTypeGump, GuildCharterGump, GuildGump, GuildListGump, GuildmasterGump, GuildMobileListGump, GuildWarAdminGump, GuildWarGump, HairDyeGump, HairstylistBuyGump, HelpGump, HeritageTokenGump, HolidayTreeChoiceGump, HonorSelf, HouseDemolishGump, HouseGump, HouseGumpAOS, HouseListGump, HousePlacementCategoryGump, HousePlacementListGump, HouseRaffleManagementGump, HouseRemoveGump, HouseTransferGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, InternalGump, LargeBODAcceptGump, LargeBODGump, LogoutGump, MainPlantGump, MessageGump, MessageSentGump, MistletoeAddonGump, MistletoeDeedGump, MoongateConfirmGump, MoongateGump, NewPlayerVendorCustomizeGump, NewPlayerVendorOwnerGump, NewPolymorphGump, NoticeGump, OnOffGump, OnOffGump, PageEntryGump, PagePromptGump, PageQueueGump, PageResponseGump, PetResurrectGump, PlayerBBGump, PlayerVendorBuyGump, PlayerVendorCustomizeGump, PlayerVendorOwnerGump, PolymorphGump, PredefGump, PromotionalTokenGump, PropertiesGump, PuzzleGump, QueryMakersMarkGump, ReclaimVendorGump, RemoveGump, RenounceYoungGump, ReportMurdererGump, ReproductionGump, ResurrectGump, RewardChoiceGump, RewardConfirmGump, RewardDemolitionGump, RewardNoticeGump, RewardOptionGump, RunebookGump, ScrollOfAbraxusGump, SelectSkillGump, SetBodyGump, SetGump, SetListOptionGump, SetObjectGump, SetPoint2DGump, SetPoint3DGump, SetSecureLevelGump, SetTimeSpanGump, SetToDecorativeGump, ShardPollGump, SkillsGump, SmallBODAcceptGump, SmallBODGump, SpawnerGump, SpecialBeardDyeGump, SpecialHairDyeGump, SpeechLogGump, StatusGump, StuckMenu, SummonFamiliarGump, TCHelpGump, TithingGump, ToTAdminGump, TownCrierGump, TrackWhatGump, TrackWhoGump, VendorInventoryGump, VendorRentalRefundGump, ViewHousesGump, VirtueGump, VirtueInfoGump, VirtueStatusGump, WarningGump, WhoGump, WreathAddonGump, WreathDeedGump, YoungDeathNotice, YoungDungeonWarning

+ (static) int GetTypeID( Type type )
+ (static) byte[] StringToBuffer( string str )
+ (ctor) Gump( int x, int y )
+ bool Closable( get; set; )
+ bool Disposable( get; set; )
+ bool Dragable( get; set; )
+ List<GumpEntry> Entries( get; )
+ bool Resizable( get; set; )
+ int Serial( get; set; )
+ int TypeID( get; )
+ int X( get; set; )
+ int Y( get; set; )
+ void Add( GumpEntry g )
+ void AddAlphaRegion( int x, int y, int width, int height )
+ void AddBackground( int x, int y, int width, int height, int gumpID )
+ void AddButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param )
+ void AddCheck( int x, int y, int inactiveID, int activeID, bool initialState, int switchID )
+ void AddGroup( int group )
+ void AddHtml( int x, int y, int width, int height, string text, bool background, bool scrollbar )
+ void AddHtmlLocalized( int x, int y, int width, int height, int number, bool background, bool scrollbar )
+ void AddHtmlLocalized( int x, int y, int width, int height, int number, int color, bool background, bool scrollbar )
+ void AddHtmlLocalized( int x, int y, int width, int height, int number, string args, int color, bool background, bool scrollbar )
+ void AddImage( int x, int y, int gumpID )
+ void AddImage( int x, int y, int gumpID, int hue )
+ void AddImageTiled( int x, int y, int width, int height, int gumpID )
+ void AddImageTiledButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param, int itemID, int hue, int width, int height )
+ void AddImageTiledButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param, int itemID, int hue, int width, int height, int localizedTooltip )
+ void AddItem( int x, int y, int itemID )
+ void AddItem( int x, int y, int itemID, int hue )
+ void AddLabel( int x, int y, int hue, string text )
+ void AddLabelCropped( int x, int y, int width, int height, int hue, string text )
+ void AddPage( int page )
+ void AddRadio( int x, int y, int inactiveID, int activeID, bool initialState, int switchID )
+ void AddTextEntry( int x, int y, int width, int height, int hue, int entryID, string initialText )
+ void AddTextEntry( int x, int y, int width, int height, int hue, int entryID, string initialText, int size )
+ void AddTooltip( int number )
+ Packet Compile()
+ Packet Compile( NetState ns )
+ int Intern( string value )
+ void Invalidate()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void OnServerClose( NetState owner )
+ void Remove( GumpEntry g )
+ void SendTo( NetState state )
+ + diff --git a/Docs/types/GumpAlphaRegion.html b/Docs/types/GumpAlphaRegion.html new file mode 100644 index 0000000..fd6b0fb --- /dev/null +++ b/Docs/types/GumpAlphaRegion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GumpAlphaRegion + + +

Back to Server.Gumps

+

GumpAlphaRegion : GumpEntry

+ (ctor) GumpAlphaRegion( int x, int y, int width, int height )
+ int Height( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpBackground.html b/Docs/types/GumpBackground.html new file mode 100644 index 0000000..2a99545 --- /dev/null +++ b/Docs/types/GumpBackground.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GumpBackground + + +

Back to Server.Gumps

+

GumpBackground : GumpEntry

+ (ctor) GumpBackground( int x, int y, int width, int height, int gumpID )
+ int GumpID( get; set; )
+ int Height( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpButton.html b/Docs/types/GumpButton.html new file mode 100644 index 0000000..fd798b6 --- /dev/null +++ b/Docs/types/GumpButton.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GumpButton + + +

Back to Server.Gumps

+

GumpButton : GumpEntry

+ (ctor) GumpButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param )
+ int ButtonID( get; set; )
+ int NormalID( get; set; )
+ int Param( get; set; )
+ int PressedID( get; set; )
+ GumpButtonType Type( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpButtonType.html b/Docs/types/GumpButtonType.html new file mode 100644 index 0000000..38180cc --- /dev/null +++ b/Docs/types/GumpButtonType.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GumpButtonType + + +

Back to Server.Gumps

+

GumpButtonType (Enum)

+ Page = 0,
+ Reply = 1
+ + diff --git a/Docs/types/GumpCheck.html b/Docs/types/GumpCheck.html new file mode 100644 index 0000000..59b2ecc --- /dev/null +++ b/Docs/types/GumpCheck.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GumpCheck + + +

Back to Server.Gumps

+

GumpCheck : GumpEntry

+ (ctor) GumpCheck( int x, int y, int inactiveID, int activeID, bool initialState, int switchID )
+ int ActiveID( get; set; )
+ int InactiveID( get; set; )
+ bool InitialState( get; set; )
+ int SwitchID( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpEntry.html b/Docs/types/GumpEntry.html new file mode 100644 index 0000000..c23eb4a --- /dev/null +++ b/Docs/types/GumpEntry.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GumpEntry + + +

Back to Server.Gumps

+

GumpEntry

+

Derived Types: GumpAlphaRegion, GumpBackground, GumpButton, GumpCheck, GumpGroup, GumpHtml, GumpHtmlLocalized, GumpImage, GumpImageTileButton, GumpImageTiled, GumpItem, GumpLabel, GumpLabelCropped, GumpPage, GumpRadio, GumpTextEntry, GumpTextEntryLimited, GumpTooltip

+ (ctor) GumpEntry()
+ Gump Parent( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ void Delta( ref string var, string val )
+ void Delta( ref bool var, bool val )
+ void Delta( ref int var, int val )
+ + diff --git a/Docs/types/GumpGroup.html b/Docs/types/GumpGroup.html new file mode 100644 index 0000000..b379cf9 --- /dev/null +++ b/Docs/types/GumpGroup.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GumpGroup + + +

Back to Server.Gumps

+

GumpGroup : GumpEntry

+ (ctor) GumpGroup( int group )
+ int Group( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpHtml.html b/Docs/types/GumpHtml.html new file mode 100644 index 0000000..19170af --- /dev/null +++ b/Docs/types/GumpHtml.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GumpHtml + + +

Back to Server.Gumps

+

GumpHtml : GumpEntry

+ (ctor) GumpHtml( int x, int y, int width, int height, string text, bool background, bool scrollbar )
+ bool Background( get; set; )
+ int Height( get; set; )
+ bool Scrollbar( get; set; )
+ string Text( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpHtmlLocalized.html b/Docs/types/GumpHtmlLocalized.html new file mode 100644 index 0000000..e26e41e --- /dev/null +++ b/Docs/types/GumpHtmlLocalized.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - GumpHtmlLocalized + + +

Back to Server.Gumps

+

GumpHtmlLocalized : GumpEntry

+ (ctor) GumpHtmlLocalized( int x, int y, int width, int height, int number, bool background, bool scrollbar )
+ (ctor) GumpHtmlLocalized( int x, int y, int width, int height, int number, int color, bool background, bool scrollbar )
+ (ctor) GumpHtmlLocalized( int x, int y, int width, int height, int number, string args, int color, bool background, bool scrollbar )
+ string Args( get; set; )
+ bool Background( get; set; )
+ int Color( get; set; )
+ int Height( get; set; )
+ int Number( get; set; )
+ bool Scrollbar( get; set; )
+ GumpHtmlLocalizedType Type( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpHtmlLocalizedType.html b/Docs/types/GumpHtmlLocalizedType.html new file mode 100644 index 0000000..f3a8511 --- /dev/null +++ b/Docs/types/GumpHtmlLocalizedType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GumpHtmlLocalizedType + + +

Back to Server.Gumps

+

GumpHtmlLocalizedType (Enum)

+ Plain = 0,
+ Color = 1,
+ Args = 2
+ + diff --git a/Docs/types/GumpImage.html b/Docs/types/GumpImage.html new file mode 100644 index 0000000..91aad30 --- /dev/null +++ b/Docs/types/GumpImage.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GumpImage + + +

Back to Server.Gumps

+

GumpImage : GumpEntry

+

Derived Types: InternalEntry

+ (ctor) GumpImage( int x, int y, int gumpID )
+ (ctor) GumpImage( int x, int y, int gumpID, int hue )
+ int GumpID( get; set; )
+ int Hue( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpImageTileButton.html b/Docs/types/GumpImageTileButton.html new file mode 100644 index 0000000..a2d2d54 --- /dev/null +++ b/Docs/types/GumpImageTileButton.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - GumpImageTileButton + + +

Back to Server.Gumps

+

GumpImageTileButton : GumpEntry

+ (ctor) GumpImageTileButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param, int itemID, int hue, int width, int height )
+ (ctor) GumpImageTileButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param, int itemID, int hue, int width, int height, int localizedTooltip )
+ int ButtonID( get; set; )
+ int Height( get; set; )
+ int Hue( get; set; )
+ int ItemID( get; set; )
+ int LocalizedTooltip( get; set; )
+ int NormalID( get; set; )
+ int Param( get; set; )
+ int PressedID( get; set; )
+ GumpButtonType Type( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpImageTiled.html b/Docs/types/GumpImageTiled.html new file mode 100644 index 0000000..12cb824 --- /dev/null +++ b/Docs/types/GumpImageTiled.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GumpImageTiled + + +

Back to Server.Gumps

+

GumpImageTiled : GumpEntry

+ (ctor) GumpImageTiled( int x, int y, int width, int height, int gumpID )
+ int GumpID( get; set; )
+ int Height( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpItem.html b/Docs/types/GumpItem.html new file mode 100644 index 0000000..8ea4204 --- /dev/null +++ b/Docs/types/GumpItem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GumpItem + + +

Back to Server.Gumps

+

GumpItem : GumpEntry

+ (ctor) GumpItem( int x, int y, int itemID )
+ (ctor) GumpItem( int x, int y, int itemID, int hue )
+ int Hue( get; set; )
+ int ItemID( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpLabel.html b/Docs/types/GumpLabel.html new file mode 100644 index 0000000..a464423 --- /dev/null +++ b/Docs/types/GumpLabel.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GumpLabel + + +

Back to Server.Gumps

+

GumpLabel : GumpEntry

+ (ctor) GumpLabel( int x, int y, int hue, string text )
+ int Hue( get; set; )
+ string Text( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpLabelCropped.html b/Docs/types/GumpLabelCropped.html new file mode 100644 index 0000000..c149ed5 --- /dev/null +++ b/Docs/types/GumpLabelCropped.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GumpLabelCropped + + +

Back to Server.Gumps

+

GumpLabelCropped : GumpEntry

+ (ctor) GumpLabelCropped( int x, int y, int width, int height, int hue, string text )
+ int Height( get; set; )
+ int Hue( get; set; )
+ string Text( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpPage.html b/Docs/types/GumpPage.html new file mode 100644 index 0000000..ac3aef6 --- /dev/null +++ b/Docs/types/GumpPage.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GumpPage + + +

Back to Server.Gumps

+

GumpPage : GumpEntry

+ (ctor) GumpPage( int page )
+ int Page( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpProfile.html b/Docs/types/GumpProfile.html new file mode 100644 index 0000000..889e565 --- /dev/null +++ b/Docs/types/GumpProfile.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - GumpProfile + + +

Back to Server.Diagnostics

+

GumpProfile : BaseProfile

+ (static) IEnumerable<GumpProfile> Profiles( get; )
+ (static) GumpProfile Acquire( Type type )
+ (ctor) GumpProfile( Type type )
+ + diff --git a/Docs/types/GumpRadio.html b/Docs/types/GumpRadio.html new file mode 100644 index 0000000..4e89c61 --- /dev/null +++ b/Docs/types/GumpRadio.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - GumpRadio + + +

Back to Server.Gumps

+

GumpRadio : GumpEntry

+ (ctor) GumpRadio( int x, int y, int inactiveID, int activeID, bool initialState, int switchID )
+ int ActiveID( get; set; )
+ int InactiveID( get; set; )
+ bool InitialState( get; set; )
+ int SwitchID( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpTextEntry.html b/Docs/types/GumpTextEntry.html new file mode 100644 index 0000000..e2715c7 --- /dev/null +++ b/Docs/types/GumpTextEntry.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - GumpTextEntry + + +

Back to Server.Gumps

+

GumpTextEntry : GumpEntry

+ (ctor) GumpTextEntry( int x, int y, int width, int height, int hue, int entryID, string initialText )
+ int EntryID( get; set; )
+ int Height( get; set; )
+ int Hue( get; set; )
+ string InitialText( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpTextEntryLimited.html b/Docs/types/GumpTextEntryLimited.html new file mode 100644 index 0000000..c82357f --- /dev/null +++ b/Docs/types/GumpTextEntryLimited.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - GumpTextEntryLimited + + +

Back to Server.Gumps

+

GumpTextEntryLimited : GumpEntry

+ (ctor) GumpTextEntryLimited( int x, int y, int width, int height, int hue, int entryID, string initialText, int size )
+ int EntryID( get; set; )
+ int Height( get; set; )
+ int Hue( get; set; )
+ string InitialText( get; set; )
+ int Size( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpTimer.html b/Docs/types/GumpTimer.html new file mode 100644 index 0000000..0595ad0 --- /dev/null +++ b/Docs/types/GumpTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - GumpTimer + + +

Back to Server.Gumps

+

(ReportMurdererGump) - GumpTimer : Timer

+ (ctor) GumpTimer( Mobile victim, List<Mobile> killers )
+ virtual void OnTick()
+ + diff --git a/Docs/types/GumpTooltip.html b/Docs/types/GumpTooltip.html new file mode 100644 index 0000000..403143f --- /dev/null +++ b/Docs/types/GumpTooltip.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - GumpTooltip + + +

Back to Server.Gumps

+

GumpTooltip : GumpEntry

+ (ctor) GumpTooltip( int number )
+ int Number( get; set; )
+ virtual void AppendTo( IGumpWriter disp )
+ virtual string Compile()
+ + diff --git a/Docs/types/GumpType.html b/Docs/types/GumpType.html new file mode 100644 index 0000000..a3b27f2 --- /dev/null +++ b/Docs/types/GumpType.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - GumpType + + +

Back to Server.Gumps

+

GumpType (Enum)

+ UnlockedContract = 0,
+ LockedContract = 1,
+ Offer = 2,
+ VendorLandlord = 3,
+ VendorRenter = 4
+ + diff --git a/Docs/types/GwennosHarp.html b/Docs/types/GwennosHarp.html new file mode 100644 index 0000000..c79cc45 --- /dev/null +++ b/Docs/types/GwennosHarp.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GwennosHarp + + +

Back to Server.Items

+

GwennosHarp : LapHarp, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) GwennosHarp()
+ (ctor) GwennosHarp( Serial serial )
+ int InitMaxUses( get; )
+ int InitMinUses( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Gypsy.html b/Docs/types/Gypsy.html new file mode 100644 index 0000000..0486b11 --- /dev/null +++ b/Docs/types/Gypsy.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Gypsy + + +

Back to Server.Mobiles

+

Gypsy : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Gypsy()
+ (ctor) Gypsy( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GypsyAnimalTrainer.html b/Docs/types/GypsyAnimalTrainer.html new file mode 100644 index 0000000..a395a53 --- /dev/null +++ b/Docs/types/GypsyAnimalTrainer.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - GypsyAnimalTrainer + + +

Back to Server.Mobiles

+

GypsyAnimalTrainer : AnimalTrainer, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) GypsyAnimalTrainer()
+ (ctor) GypsyAnimalTrainer( Serial serial )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetShoeHue()
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GypsyBanker.html b/Docs/types/GypsyBanker.html new file mode 100644 index 0000000..08254e2 --- /dev/null +++ b/Docs/types/GypsyBanker.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GypsyBanker + + +

Back to Server.Mobiles

+

GypsyBanker : Banker, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) GypsyBanker()
+ (ctor) GypsyBanker( Serial serial )
+ bool ClickTitle( get; )
+ bool IsActiveVendor( get; )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/GypsyMaiden.html b/Docs/types/GypsyMaiden.html new file mode 100644 index 0000000..a7fe66c --- /dev/null +++ b/Docs/types/GypsyMaiden.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - GypsyMaiden + + +

Back to Server.Mobiles

+

GypsyMaiden : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) GypsyMaiden()
+ (ctor) GypsyMaiden( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool GetGender()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HagApprenticeCorpse.html b/Docs/types/HagApprenticeCorpse.html new file mode 100644 index 0000000..f36b0c4 --- /dev/null +++ b/Docs/types/HagApprenticeCorpse.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HagApprenticeCorpse + + +

Back to Server.Engines.Quests.Hag

+

HagApprenticeCorpse : Corpse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICarvable

+ (static) List<Item> GetEquipment()
+ (static) Mobile GetOwner()
+ (ctor) HagApprenticeCorpse()
+ (ctor) HagApprenticeCorpse( Serial serial )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Open( Mobile from, bool checkSelfLoot )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HagCauldron.html b/Docs/types/HagCauldron.html new file mode 100644 index 0000000..77bcfa4 --- /dev/null +++ b/Docs/types/HagCauldron.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HagCauldron + + +

Back to Server.Items

+

HagCauldron : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) HagCauldron()
+ (ctor) HagCauldron( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HagDuringCorpseSearchConversation.html b/Docs/types/HagDuringCorpseSearchConversation.html new file mode 100644 index 0000000..57e8145 --- /dev/null +++ b/Docs/types/HagDuringCorpseSearchConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HagDuringCorpseSearchConversation + + +

Back to Server.Engines.Quests.Hag

+

HagDuringCorpseSearchConversation : QuestConversation

+ (ctor) HagDuringCorpseSearchConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/HagDuringImpSearchConversation.html b/Docs/types/HagDuringImpSearchConversation.html new file mode 100644 index 0000000..cd239ab --- /dev/null +++ b/Docs/types/HagDuringImpSearchConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HagDuringImpSearchConversation + + +

Back to Server.Engines.Quests.Hag

+

HagDuringImpSearchConversation : QuestConversation

+ (ctor) HagDuringImpSearchConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/HagDuringIngredientsConversation.html b/Docs/types/HagDuringIngredientsConversation.html new file mode 100644 index 0000000..ce3e5a1 --- /dev/null +++ b/Docs/types/HagDuringIngredientsConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HagDuringIngredientsConversation + + +

Back to Server.Engines.Quests.Hag

+

HagDuringIngredientsConversation : QuestConversation

+ (ctor) HagDuringIngredientsConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/HagStew.html b/Docs/types/HagStew.html new file mode 100644 index 0000000..db3c25b --- /dev/null +++ b/Docs/types/HagStew.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HagStew + + +

Back to Server.Items

+

HagStew : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Nested Types: ShowStew

+ (ctor) HagStew()
+ (ctor) HagStew( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnComponentUsed( AddonComponent stew, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Hair.html b/Docs/types/Hair.html new file mode 100644 index 0000000..e06505d --- /dev/null +++ b/Docs/types/Hair.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Hair + + +

Back to Server.Items

+

Hair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: Afro, BunsHair, GenericHair, KrisnaHair, LongHair, Mohawk, PageboyHair, PonyTail, ReceedingHair, ShortHair, TwoPigTails

+ (ctor) Hair( int itemID )
+ (ctor) Hair( Serial serial )
+ (ctor) Hair( int itemID, int hue )
+ bool DisplayLootType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual DeathMoveResult OnParentDeath( Mobile parent )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool VerifyMove( Mobile from )
+ + diff --git a/Docs/types/HairDye.html b/Docs/types/HairDye.html new file mode 100644 index 0000000..73ba55c --- /dev/null +++ b/Docs/types/HairDye.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HairDye + + +

Back to Server.Items

+

HairDye : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HairDye()
+ (ctor) HairDye( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HairDyeEntry.html b/Docs/types/HairDyeEntry.html new file mode 100644 index 0000000..d08736c --- /dev/null +++ b/Docs/types/HairDyeEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HairDyeEntry + + +

Back to Server.Items

+

(HairDyeGump) - HairDyeEntry

+ (ctor) HairDyeEntry( string name, int hueStart, int hueCount )
+ int HueCount( get; )
+ int HueStart( get; )
+ string Name( get; )
+ + diff --git a/Docs/types/HairDyeGump.html b/Docs/types/HairDyeGump.html new file mode 100644 index 0000000..cadff11 --- /dev/null +++ b/Docs/types/HairDyeGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HairDyeGump + + +

Back to Server.Items

+

HairDyeGump : Gump

+

Nested Types: HairDyeEntry

+ (ctor) HairDyeGump( HairDye dye )
+ virtual void OnResponse( NetState from, RelayInfo info )
+ + diff --git a/Docs/types/HairEquipUpdate.html b/Docs/types/HairEquipUpdate.html new file mode 100644 index 0000000..724d4ce --- /dev/null +++ b/Docs/types/HairEquipUpdate.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - HairEquipUpdate + + +

Back to Server

+

HairEquipUpdate : Packet

+ (ctor) HairEquipUpdate( Mobile parent )
+ + diff --git a/Docs/types/HairInfo.html b/Docs/types/HairInfo.html new file mode 100644 index 0000000..fccbcbe --- /dev/null +++ b/Docs/types/HairInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HairInfo + + +

Back to Server

+

HairInfo : BaseHairInfo

+ (static) int FakeSerial( Mobile parent )
+ (ctor) HairInfo( GenericReader reader )
+ (ctor) HairInfo( int itemid )
+ (ctor) HairInfo( int itemid, int hue )
+ + diff --git a/Docs/types/HairOrBeard.html b/Docs/types/HairOrBeard.html new file mode 100644 index 0000000..cf99c59 --- /dev/null +++ b/Docs/types/HairOrBeard.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HairOrBeard + + +

Back to Server.Gumps

+

(NewPlayerVendorCustomizeGump) - HairOrBeard

+ (ctor) HairOrBeard( int itemID, int name )
+ int ItemID( get; )
+ int Name( get; )
+ + diff --git a/Docs/types/HairRestylingDeed.html b/Docs/types/HairRestylingDeed.html new file mode 100644 index 0000000..1818517 --- /dev/null +++ b/Docs/types/HairRestylingDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HairRestylingDeed + + +

Back to Server.Items

+

HairRestylingDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) HairRestylingDeed()
+ (ctor) HairRestylingDeed( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HairStylist.html b/Docs/types/HairStylist.html new file mode 100644 index 0000000..fc341de --- /dev/null +++ b/Docs/types/HairStylist.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HairStylist + + +

Back to Server.Mobiles

+

HairStylist : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) HairStylist()
+ (ctor) HairStylist( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HairstylistBuyGump.html b/Docs/types/HairstylistBuyGump.html new file mode 100644 index 0000000..91a9e34 --- /dev/null +++ b/Docs/types/HairstylistBuyGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HairstylistBuyGump + + +

Back to Server.Mobiles

+

HairstylistBuyGump : Gump

+ (ctor) HairstylistBuyGump( Mobile from, Mobile vendor, HairstylistBuyInfo[] sellList )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/HairstylistBuyInfo.html b/Docs/types/HairstylistBuyInfo.html new file mode 100644 index 0000000..76f69ef --- /dev/null +++ b/Docs/types/HairstylistBuyInfo.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - HairstylistBuyInfo + + +

Back to Server.Mobiles

+

HairstylistBuyInfo

+ (ctor) HairstylistBuyInfo( string title, int price, bool facialHair, Type gumpType, object[] args )
+ (ctor) HairstylistBuyInfo( int title, int price, bool facialHair, Type gumpType, object[] args )
+ bool FacialHair( get; )
+ object[] GumpArgs( get; )
+ Type GumpType( get; )
+ int Price( get; )
+ int Title( get; )
+ string TitleString( get; )
+ + diff --git a/Docs/types/Hakama.html b/Docs/types/Hakama.html new file mode 100644 index 0000000..a2eef9e --- /dev/null +++ b/Docs/types/Hakama.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Hakama + + +

Back to Server.Items

+

Hakama : BaseOuterLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Hakama()
+ (ctor) Hakama( int hue )
+ (ctor) Hakama( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HakamaShita.html b/Docs/types/HakamaShita.html new file mode 100644 index 0000000..9ba48c4 --- /dev/null +++ b/Docs/types/HakamaShita.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HakamaShita + + +

Back to Server.Items

+

HakamaShita : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HakamaShita()
+ (ctor) HakamaShita( int hue )
+ (ctor) HakamaShita( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Halberd.html b/Docs/types/Halberd.html new file mode 100644 index 0000000..86b9331 --- /dev/null +++ b/Docs/types/Halberd.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Halberd + + +

Back to Server.Items

+

Halberd : BasePoleArm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+

Derived Types: BlazeOfDeath, Calm

+ (ctor) Halberd()
+ (ctor) Halberd( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HalfApron.html b/Docs/types/HalfApron.html new file mode 100644 index 0000000..bed0855 --- /dev/null +++ b/Docs/types/HalfApron.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HalfApron + + +

Back to Server.Items

+

HalfApron : BaseWaist, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: CrimsonCincture

+ (ctor) HalfApron()
+ (ctor) HalfApron( int hue )
+ (ctor) HalfApron( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HalfEmptyJar.html b/Docs/types/HalfEmptyJar.html new file mode 100644 index 0000000..d8d18e4 --- /dev/null +++ b/Docs/types/HalfEmptyJar.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HalfEmptyJar + + +

Back to Server.Items

+

HalfEmptyJar : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HalfEmptyJar()
+ (ctor) HalfEmptyJar( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HalfEmptyJars.html b/Docs/types/HalfEmptyJars.html new file mode 100644 index 0000000..67f10c9 --- /dev/null +++ b/Docs/types/HalfEmptyJars.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HalfEmptyJars + + +

Back to Server.Items

+

HalfEmptyJars : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HalfEmptyJars()
+ (ctor) HalfEmptyJars( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HallwayWalkConversation.html b/Docs/types/HallwayWalkConversation.html new file mode 100644 index 0000000..03df529 --- /dev/null +++ b/Docs/types/HallwayWalkConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HallwayWalkConversation + + +

Back to Server.Engines.Quests.Ninja

+

HallwayWalkConversation : QuestConversation

+ (ctor) HallwayWalkConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/HallwayWalkObjective.html b/Docs/types/HallwayWalkObjective.html new file mode 100644 index 0000000..40fdd75 --- /dev/null +++ b/Docs/types/HallwayWalkObjective.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HallwayWalkObjective + + +

Back to Server.Engines.Quests.Ninja

+

HallwayWalkObjective : QuestObjective

+ (ctor) HallwayWalkObjective()
+ object Message( get; )
+ bool StolenTreasure( get; set; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/Ham.html b/Docs/types/Ham.html new file mode 100644 index 0000000..b1f718b --- /dev/null +++ b/Docs/types/Ham.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Ham + + +

Back to Server.Items

+

Ham : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Ham()
+ (ctor) Ham( int amount )
+ (ctor) Ham( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Hammer.html b/Docs/types/Hammer.html new file mode 100644 index 0000000..763d297 --- /dev/null +++ b/Docs/types/Hammer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Hammer + + +

Back to Server.Items

+

Hammer : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Hammer()
+ (ctor) Hammer( int uses )
+ (ctor) Hammer( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HammerPick.html b/Docs/types/HammerPick.html new file mode 100644 index 0000000..b89dced --- /dev/null +++ b/Docs/types/HammerPick.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - HammerPick + + +

Back to Server.Items

+

HammerPick : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) HammerPick()
+ (ctor) HammerPick( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HangingAxesAddon.html b/Docs/types/HangingAxesAddon.html new file mode 100644 index 0000000..7d2844c --- /dev/null +++ b/Docs/types/HangingAxesAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HangingAxesAddon + + +

Back to Server.Items

+

HangingAxesAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) HangingAxesAddon( bool east )
+ (ctor) HangingAxesAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HangingAxesDeed.html b/Docs/types/HangingAxesDeed.html new file mode 100644 index 0000000..0eea498 --- /dev/null +++ b/Docs/types/HangingAxesDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HangingAxesDeed + + +

Back to Server.Items

+

HangingAxesDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) HangingAxesDeed()
+ (ctor) HangingAxesDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HangingLantern.html b/Docs/types/HangingLantern.html new file mode 100644 index 0000000..3c6fe5b --- /dev/null +++ b/Docs/types/HangingLantern.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HangingLantern + + +

Back to Server.Items

+

HangingLantern : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HangingLantern()
+ (ctor) HangingLantern( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HangingSkeleton.html b/Docs/types/HangingSkeleton.html new file mode 100644 index 0000000..0e81b72 --- /dev/null +++ b/Docs/types/HangingSkeleton.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - HangingSkeleton + + +

Back to Server.Items

+

HangingSkeleton : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IAddon, IRewardItem

+ (ctor) HangingSkeleton()
+ (ctor) HangingSkeleton( int itemID )
+ (ctor) HangingSkeleton( Serial serial )
+ Item Deed( get; )
+ bool FacingSouth( get; )
+ bool ForceShowProperties( get; )
+ bool IsRewardItem( get; set; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HangingSkeletonDeed.html b/Docs/types/HangingSkeletonDeed.html new file mode 100644 index 0000000..7b906a4 --- /dev/null +++ b/Docs/types/HangingSkeletonDeed.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - HangingSkeletonDeed + + +

Back to Server.Items

+

HangingSkeletonDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: InternalGump, InternalTarget

+ (static) int GetWestItemID( int south )
+ (ctor) HangingSkeletonDeed()
+ (ctor) HangingSkeletonDeed( Serial serial )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HangingSwordsAddon.html b/Docs/types/HangingSwordsAddon.html new file mode 100644 index 0000000..60d10d7 --- /dev/null +++ b/Docs/types/HangingSwordsAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HangingSwordsAddon + + +

Back to Server.Items

+

HangingSwordsAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) HangingSwordsAddon( bool east )
+ (ctor) HangingSwordsAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HangingSwordsDeed.html b/Docs/types/HangingSwordsDeed.html new file mode 100644 index 0000000..39c4fc7 --- /dev/null +++ b/Docs/types/HangingSwordsDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HangingSwordsDeed + + +

Back to Server.Items

+

HangingSwordsDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) HangingSwordsDeed()
+ (ctor) HangingSwordsDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HangoverCure.html b/Docs/types/HangoverCure.html new file mode 100644 index 0000000..56af36f --- /dev/null +++ b/Docs/types/HangoverCure.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HangoverCure + + +

Back to Server.Engines.Quests.Hag

+

HangoverCure : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HangoverCure()
+ (ctor) HangoverCure( Serial serial )
+ int LabelNumber( get; )
+ int Uses( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HanzosBow.html b/Docs/types/HanzosBow.html new file mode 100644 index 0000000..661e6d6 --- /dev/null +++ b/Docs/types/HanzosBow.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HanzosBow + + +

Back to Server.Items

+

HanzosBow : Yumi, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) HanzosBow()
+ (ctor) HanzosBow( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Haochi.html b/Docs/types/Haochi.html new file mode 100644 index 0000000..512be5f --- /dev/null +++ b/Docs/types/Haochi.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Haochi + + +

Back to Server.Engines.Quests.Samurai

+

Haochi : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Haochi()
+ (ctor) Haochi( Serial serial )
+ int TalkNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile pm )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HaochisGuardsman.html b/Docs/types/HaochisGuardsman.html new file mode 100644 index 0000000..78df12b --- /dev/null +++ b/Docs/types/HaochisGuardsman.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - HaochisGuardsman + + +

Back to Server.Engines.Quests.Samurai

+

HaochisGuardsman : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) HaochisGuardsman()
+ (ctor) HaochisGuardsman( Serial serial )
+ int TalkNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HaochisKatana.html b/Docs/types/HaochisKatana.html new file mode 100644 index 0000000..f99ee37 --- /dev/null +++ b/Docs/types/HaochisKatana.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HaochisKatana + + +

Back to Server.Engines.Quests.Samurai

+

HaochisKatana : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HaochisKatana()
+ (ctor) HaochisKatana( Serial serial )
+ int LabelNumber( get; )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HaochisKatanaGenerator.html b/Docs/types/HaochisKatanaGenerator.html new file mode 100644 index 0000000..d27a31a --- /dev/null +++ b/Docs/types/HaochisKatanaGenerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HaochisKatanaGenerator + + +

Back to Server.Engines.Quests.Samurai

+

HaochisKatanaGenerator : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HaochisKatanaGenerator()
+ (ctor) HaochisKatanaGenerator( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HaochisTreasureChest.html b/Docs/types/HaochisTreasureChest.html new file mode 100644 index 0000000..43edcc0 --- /dev/null +++ b/Docs/types/HaochisTreasureChest.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - HaochisTreasureChest + + +

Back to Server.Engines.Quests.Samurai

+

HaochisTreasureChest : WoodenFootLocker, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) HaochisTreasureChest()
+ (ctor) HaochisTreasureChest( Serial serial )
+ bool IsDecoContainer( get; )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ virtual void Deserialize( GenericReader reader )
+ void GenerateTreasure()
+ virtual void OnItemLifted( Mobile from, Item item )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HaochisTrialsQuest.html b/Docs/types/HaochisTrialsQuest.html new file mode 100644 index 0000000..fa351e0 --- /dev/null +++ b/Docs/types/HaochisTrialsQuest.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - HaochisTrialsQuest + + +

Back to Server.Engines.Quests.Samurai

+

HaochisTrialsQuest : QuestSystem

+ (static) bool HasLostHaochisKatana( Mobile from )
+ (ctor) HaochisTrialsQuest()
+ (ctor) HaochisTrialsQuest( PlayerMobile from )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void Slice()
+ + diff --git a/Docs/types/HarborMaster.html b/Docs/types/HarborMaster.html new file mode 100644 index 0000000..f99c968 --- /dev/null +++ b/Docs/types/HarborMaster.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HarborMaster + + +

Back to Server.Mobiles

+

HarborMaster : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) HarborMaster()
+ (ctor) HarborMaster( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HardwareInfo.html b/Docs/types/HardwareInfo.html new file mode 100644 index 0000000..e65127f --- /dev/null +++ b/Docs/types/HardwareInfo.html @@ -0,0 +1,40 @@ + + + RunUO Documentation - Class Overview - HardwareInfo + + +

Back to Server

+

HardwareInfo

+ (static) void HWInfo_OnCommand( CommandEventArgs e )
+ (static) void HWInfo_OnTarget( Mobile from, object obj )
+ (static) void Initialize()
+ (static) void OnReceive( NetState state, PacketReader pvSrc )
+ (ctor) HardwareInfo()
+ int ClientsInstalled( get; )
+ int ClientsRunning( get; )
+ int CpuClockSpeed( get; )
+ int CpuFamily( get; )
+ int CpuManufacturer( get; )
+ int CpuModel( get; )
+ int CpuQuantity( get; )
+ int Distribution( get; )
+ int DXMajor( get; )
+ int DXMinor( get; )
+ int InstanceID( get; )
+ string Language( get; )
+ int OSMajor( get; )
+ int OSMinor( get; )
+ int OSRevision( get; )
+ int PartialInstalled( get; )
+ int PhysicalMemory( get; )
+ int ScreenDepth( get; )
+ int ScreenHeight( get; )
+ int ScreenWidth( get; )
+ DateTime TimeReceived( get; )
+ string Unknown( get; )
+ string VCDescription( get; )
+ int VCDeviceID( get; )
+ int VCMemory( get; )
+ int VCVendorID( get; )
+ + diff --git a/Docs/types/HarmScroll.html b/Docs/types/HarmScroll.html new file mode 100644 index 0000000..9abb3c9 --- /dev/null +++ b/Docs/types/HarmScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HarmScroll + + +

Back to Server.Items

+

HarmScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) HarmScroll()
+ (ctor) HarmScroll( int amount )
+ (ctor) HarmScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HarmSpell.html b/Docs/types/HarmSpell.html new file mode 100644 index 0000000..25d0c57 --- /dev/null +++ b/Docs/types/HarmSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HarmSpell + + +

Back to Server.Spells.Second

+

HarmSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) HarmSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ virtual double GetSlayerDamageScalar( Mobile target )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/HarmWand.html b/Docs/types/HarmWand.html new file mode 100644 index 0000000..98f255c --- /dev/null +++ b/Docs/types/HarmWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HarmWand + + +

Back to Server.Items

+

HarmWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) HarmWand()
+ (ctor) HarmWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Harp.html b/Docs/types/Harp.html new file mode 100644 index 0000000..8cef8ef --- /dev/null +++ b/Docs/types/Harp.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Harp + + +

Back to Server.Items

+

Harp : BaseInstrument, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) Harp()
+ (ctor) Harp( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Harpy.html b/Docs/types/Harpy.html new file mode 100644 index 0000000..9afcb2d --- /dev/null +++ b/Docs/types/Harpy.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Harpy + + +

Back to Server.Mobiles

+

Harpy : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Harpy()
+ (ctor) Harpy( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Feathers( get; )
+ int Meat( get; )
+ MeatType MeatType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Harrower.html b/Docs/types/Harrower.html new file mode 100644 index 0000000..0d74c2f --- /dev/null +++ b/Docs/types/Harrower.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - Harrower + + +

Back to Server.Mobiles

+

Harrower : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: GoodiesTimer, SpawnEntry, TeleportTimer

+ (static) bool CanSpawn( get; )
+ (static) ArrayList Instances( get; )
+ (static) Harrower Spawn( Point3D platLoc, Map platMap )
+ (ctor) Harrower()
+ (ctor) Harrower( Serial serial )
+ bool AutoDispel( get; )
+ Type[] DecorativeList( get; )
+ bool DisallowAllMoves( get; )
+ int HitsMax( get; )
+ int ManaMax( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ Type[] UniqueList( get; )
+ bool Unprovokable( get; )
+ void AwardArtifact( Item artifact )
+ Item CreateArtifact( Type[] list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ Item GetArtifact()
+ void GiveArtifact( Mobile to, Item artifact )
+ void GivePowerScrolls()
+ bool IsEligible( Mobile m, Item Artifact )
+ void Morph()
+ virtual void OnAfterDelete()
+ virtual bool OnBeforeDeath()
+ void RegisterDamage( Mobile from, int amount )
+ virtual void RegisterDamageTo( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HarrowerGate.html b/Docs/types/HarrowerGate.html new file mode 100644 index 0000000..987429f --- /dev/null +++ b/Docs/types/HarrowerGate.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HarrowerGate + + +

Back to Server.Items

+

HarrowerGate : Moongate, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HarrowerGate( Serial serial )
+ (ctor) HarrowerGate( Mobile harrower, Point3D loc, Map map, Point3D targLoc, Map targMap )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HarrowerTentacles.html b/Docs/types/HarrowerTentacles.html new file mode 100644 index 0000000..6d83768 --- /dev/null +++ b/Docs/types/HarrowerTentacles.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - HarrowerTentacles + + +

Back to Server.Mobiles

+

HarrowerTentacles : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: DrainTimer

+ (ctor) HarrowerTentacles()
+ (ctor) HarrowerTentacles( Serial serial )
+ (ctor) HarrowerTentacles( Mobile harrower )
+ bool AutoDispel( get; )
+ bool DisallowAllMoves( get; )
+ Mobile Harrower( get; set; )
+ Poison PoisonImmune( get; )
+ bool Unprovokable( get; )
+ virtual void CheckReflect( Mobile caster, ref bool reflect )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnAfterDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HarvestBank.html b/Docs/types/HarvestBank.html new file mode 100644 index 0000000..39df0cd --- /dev/null +++ b/Docs/types/HarvestBank.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HarvestBank + + +

Back to Server.Engines.Harvest

+

HarvestBank

+ (ctor) HarvestBank( HarvestDefinition def, HarvestVein defaultVein )
+ int Current( get; )
+ HarvestVein DefaultVein( get; )
+ HarvestDefinition Definition( get; )
+ HarvestVein Vein( get; set; )
+ void CheckRespawn()
+ void Consume( int amount, Mobile from )
+ + diff --git a/Docs/types/HarvestDefinition.html b/Docs/types/HarvestDefinition.html new file mode 100644 index 0000000..2b6f155 --- /dev/null +++ b/Docs/types/HarvestDefinition.html @@ -0,0 +1,47 @@ + + + RunUO Documentation - Class Overview - HarvestDefinition + + +

Back to Server.Engines.Harvest

+

HarvestDefinition

+ (ctor) HarvestDefinition()
+ int BankHeight( get; set; )
+ Dictionary<Map,Dictionary`2> Banks( get; set; )
+ int BankWidth( get; set; )
+ BonusHarvestResource[] BonusResources( get; set; )
+ int ConsumedPerFeluccaHarvest( get; set; )
+ int ConsumedPerHarvest( get; set; )
+ object DoubleHarvestMessage( get; set; )
+ int[] EffectActions( get; set; )
+ int[] EffectCounts( get; set; )
+ TimeSpan EffectDelay( get; set; )
+ TimeSpan EffectSoundDelay( get; set; )
+ int[] EffectSounds( get; set; )
+ object FailMessage( get; set; )
+ int MaxRange( get; set; )
+ TimeSpan MaxRespawn( get; set; )
+ int MaxTotal( get; set; )
+ TimeSpan MinRespawn( get; set; )
+ int MinTotal( get; set; )
+ object NoResourcesMessage( get; set; )
+ object OutOfRangeMessage( get; set; )
+ object PackFullMessage( get; set; )
+ bool PlaceAtFeetIfFull( get; set; )
+ bool RaceBonus( get; set; )
+ bool RandomizeVeins( get; set; )
+ bool RangedTiles( get; set; )
+ HarvestResource[] Resources( get; set; )
+ SkillName Skill( get; set; )
+ int[] Tiles( get; set; )
+ object TimedOutOfRangeMessage( get; set; )
+ object ToolBrokeMessage( get; set; )
+ HarvestVein[] Veins( get; set; )
+ HarvestBank GetBank( Map map, int x, int y )
+ BonusHarvestResource GetBonusResource()
+ HarvestVein GetVeinAt( Map map, int x, int y )
+ HarvestVein GetVeinFrom( double randomValue )
+ void SendMessageTo( Mobile from, object message )
+ bool Validate( int tileID )
+ + diff --git a/Docs/types/HarvestResource.html b/Docs/types/HarvestResource.html new file mode 100644 index 0000000..16aa128 --- /dev/null +++ b/Docs/types/HarvestResource.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HarvestResource + + +

Back to Server.Engines.Harvest

+

HarvestResource

+ (ctor) HarvestResource( double reqSkill, double minSkill, double maxSkill, object message, Type[] types )
+ double MaxSkill( get; set; )
+ double MinSkill( get; set; )
+ double ReqSkill( get; set; )
+ object SuccessMessage( get; )
+ Type[] Types( get; set; )
+ void SendSuccessTo( Mobile m )
+ + diff --git a/Docs/types/HarvestSoundTimer.html b/Docs/types/HarvestSoundTimer.html new file mode 100644 index 0000000..e62ff60 --- /dev/null +++ b/Docs/types/HarvestSoundTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HarvestSoundTimer + + +

Back to Server.Engines.Harvest

+

HarvestSoundTimer : Timer

+ (ctor) HarvestSoundTimer( Mobile from, Item tool, HarvestSystem system, HarvestDefinition def, object toHarvest, object locked, bool last )
+ virtual void OnTick()
+ + diff --git a/Docs/types/HarvestSystem.html b/Docs/types/HarvestSystem.html new file mode 100644 index 0000000..1e194ca --- /dev/null +++ b/Docs/types/HarvestSystem.html @@ -0,0 +1,39 @@ + + + RunUO Documentation - Class Overview - HarvestSystem + + +

Back to Server.Engines.Harvest

+

HarvestSystem

+

Derived Types: Fishing, Lumberjacking, Mining

+ (ctor) HarvestSystem()
+ List<HarvestDefinition> Definitions( get; )
+ virtual bool BeginHarvesting( Mobile from, Item tool )
+ virtual bool CheckHarvest( Mobile from, Item tool )
+ virtual bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual bool CheckRange( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, bool timed )
+ virtual bool CheckResources( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, bool timed )
+ virtual bool CheckTool( Mobile from, Item tool )
+ virtual Item Construct( Type type, Mobile from )
+ virtual void DoHarvestingEffect( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc )
+ virtual void DoHarvestingSound( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual void FinishHarvesting( Mobile from, Item tool, HarvestDefinition def, object toHarvest, object locked )
+ virtual HarvestDefinition GetDefinition( int tileID )
+ virtual bool GetHarvestDetails( Mobile from, Item tool, object toHarvest, out int tileID, out Map map, out Point3D loc )
+ virtual object GetLock( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual Type GetResourceType( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource )
+ virtual bool Give( Mobile m, Item item, bool placeAtFeet )
+ virtual HarvestResource MutateResource( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestVein vein, HarvestResource primary, HarvestResource fallback )
+ virtual Type MutateType( Type type, Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource )
+ virtual HarvestVein MutateVein( Mobile from, Item tool, HarvestDefinition def, HarvestBank bank, object toHarvest, HarvestVein vein )
+ virtual void OnBadHarvestTarget( Mobile from, Item tool, object toHarvest )
+ virtual void OnConcurrentHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual void OnHarvestFinished( Mobile from, Item tool, HarvestDefinition def, HarvestVein vein, HarvestBank bank, HarvestResource resource, object harvested )
+ virtual bool OnHarvesting( Mobile from, Item tool, HarvestDefinition def, object toHarvest, object locked, bool last )
+ virtual void OnHarvestStarted( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual void SendPackFullTo( Mobile from, Item item, HarvestDefinition def, HarvestResource resource )
+ virtual void SendSuccessTo( Mobile from, Item item, HarvestResource resource )
+ virtual bool SpecialHarvest( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc )
+ virtual void StartHarvesting( Mobile from, Item tool, object toHarvest )
+ + diff --git a/Docs/types/HarvestTarget.html b/Docs/types/HarvestTarget.html new file mode 100644 index 0000000..976fcec --- /dev/null +++ b/Docs/types/HarvestTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HarvestTarget + + +

Back to Server.Engines.Harvest

+

HarvestTarget : Target

+ (ctor) HarvestTarget( Item tool, HarvestSystem system )
+ void DestroyFurniture( Mobile from, Item item )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/HarvestTimer.html b/Docs/types/HarvestTimer.html new file mode 100644 index 0000000..686a5aa --- /dev/null +++ b/Docs/types/HarvestTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HarvestTimer + + +

Back to Server.Engines.Harvest

+

HarvestTimer : Timer

+ (ctor) HarvestTimer( Mobile from, Item tool, HarvestSystem system, HarvestDefinition def, object toHarvest, object locked )
+ virtual void OnTick()
+ + diff --git a/Docs/types/HarvestVein.html b/Docs/types/HarvestVein.html new file mode 100644 index 0000000..4d5523a --- /dev/null +++ b/Docs/types/HarvestVein.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HarvestVein + + +

Back to Server.Engines.Harvest

+

HarvestVein

+ (ctor) HarvestVein( double veinChance, double chanceToFallback, HarvestResource primaryResource, HarvestResource fallbackResource )
+ double ChanceToFallback( get; set; )
+ HarvestResource FallbackResource( get; set; )
+ HarvestResource PrimaryResource( get; set; )
+ double VeinChance( get; set; )
+ + diff --git a/Docs/types/HatOfTheMagi.html b/Docs/types/HatOfTheMagi.html new file mode 100644 index 0000000..d3eb0e3 --- /dev/null +++ b/Docs/types/HatOfTheMagi.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - HatOfTheMagi + + +

Back to Server.Items

+

HatOfTheMagi : WizardsHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) HatOfTheMagi()
+ (ctor) HatOfTheMagi( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseEnergyResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Hatchet.html b/Docs/types/Hatchet.html new file mode 100644 index 0000000..7771955 --- /dev/null +++ b/Docs/types/Hatchet.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Hatchet + + +

Back to Server.Items

+

Hatchet : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: MelisandesCorrodedHatchet

+ (ctor) Hatchet()
+ (ctor) Hatchet( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HaunterMirrorAddon.html b/Docs/types/HaunterMirrorAddon.html new file mode 100644 index 0000000..efb8c82 --- /dev/null +++ b/Docs/types/HaunterMirrorAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HaunterMirrorAddon + + +

Back to Server.Items

+

HaunterMirrorAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) HaunterMirrorAddon()
+ (ctor) HaunterMirrorAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HaunterMirrorComponent.html b/Docs/types/HaunterMirrorComponent.html new file mode 100644 index 0000000..6d0c734 --- /dev/null +++ b/Docs/types/HaunterMirrorComponent.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HaunterMirrorComponent + + +

Back to Server.Items

+

HaunterMirrorComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) HaunterMirrorComponent()
+ (ctor) HaunterMirrorComponent( Serial serial )
+ bool HandlesOnMovement( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnMovement( Mobile m, Point3D old )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HaunterMirrorDeed.html b/Docs/types/HaunterMirrorDeed.html new file mode 100644 index 0000000..93852d4 --- /dev/null +++ b/Docs/types/HaunterMirrorDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HaunterMirrorDeed + + +

Back to Server.Items

+

HaunterMirrorDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HaunterMirrorDeed()
+ (ctor) HaunterMirrorDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Head.html b/Docs/types/Head.html new file mode 100644 index 0000000..10c5291 --- /dev/null +++ b/Docs/types/Head.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Head + + +

Back to Server.Items

+

Head : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Head()
+ (ctor) Head( string playerName )
+ (ctor) Head( Serial serial )
+ (ctor) Head( HeadType headType, string playerName )
+ string DefaultName( get; )
+ HeadType HeadType( get; set; )
+ string PlayerName( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HeadType.html b/Docs/types/HeadType.html new file mode 100644 index 0000000..6a2c98d --- /dev/null +++ b/Docs/types/HeadType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HeadType + + +

Back to Server.Items

+

HeadType (Enum)

+ Regular = 0,
+ Duel = 1,
+ Tournament = 2
+ + diff --git a/Docs/types/HeadlessOne.html b/Docs/types/HeadlessOne.html new file mode 100644 index 0000000..7c4f9d4 --- /dev/null +++ b/Docs/types/HeadlessOne.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HeadlessOne + + +

Back to Server.Mobiles

+

HeadlessOne : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) HeadlessOne()
+ (ctor) HeadlessOne( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HealConversation.html b/Docs/types/HealConversation.html new file mode 100644 index 0000000..b12608e --- /dev/null +++ b/Docs/types/HealConversation.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HealConversation + + +

Back to Server.Engines.Quests.Necro

+

HealConversation : QuestConversation

+ (ctor) HealConversation()
+ object Message( get; )
+ + diff --git a/Docs/types/HealPotion.html b/Docs/types/HealPotion.html new file mode 100644 index 0000000..f0a3439 --- /dev/null +++ b/Docs/types/HealPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HealPotion + + +

Back to Server.Items

+

HealPotion : BaseHealPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) HealPotion()
+ (ctor) HealPotion( Serial serial )
+ double Delay( get; )
+ int MaxHeal( get; )
+ int MinHeal( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HealScroll.html b/Docs/types/HealScroll.html new file mode 100644 index 0000000..98c7860 --- /dev/null +++ b/Docs/types/HealScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HealScroll + + +

Back to Server.Items

+

HealScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) HealScroll()
+ (ctor) HealScroll( int amount )
+ (ctor) HealScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HealSpell.html b/Docs/types/HealSpell.html new file mode 100644 index 0000000..28400b5 --- /dev/null +++ b/Docs/types/HealSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HealSpell + + +

Back to Server.Spells.First

+

HealSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) HealSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/HealWand.html b/Docs/types/HealWand.html new file mode 100644 index 0000000..fabc33e --- /dev/null +++ b/Docs/types/HealWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HealWand + + +

Back to Server.Items

+

HealWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) HealWand()
+ (ctor) HealWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Healer.html b/Docs/types/Healer.html new file mode 100644 index 0000000..ccd4fb3 --- /dev/null +++ b/Docs/types/Healer.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Healer + + +

Back to Server.Mobiles

+

Healer : BaseHealer, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Healer()
+ (ctor) Healer( Serial serial )
+ bool CanTeach( get; )
+ bool IsActiveVendor( get; )
+ bool IsInvulnerable( get; )
+ virtual bool CheckResurrect( Mobile m )
+ virtual bool CheckTeach( SkillName skill, Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HealerAI.html b/Docs/types/HealerAI.html new file mode 100644 index 0000000..4020e95 --- /dev/null +++ b/Docs/types/HealerAI.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - HealerAI + + +

Back to Server.Mobiles

+

HealerAI : BaseAI

+

Nested Types: NeedDelegate

+ (static) bool NeedCure( Mobile m )
+ (static) bool NeedGHeal( Mobile m )
+ (static) bool NeedLHeal( Mobile m )
+ (ctor) HealerAI( BaseCreature m )
+ Mobile Find( NeedDelegate[] funcs )
+ void ProcessTarget( Target targ, NeedDelegate[] func )
+ virtual bool Think()
+ + diff --git a/Docs/types/HealerCamp.html b/Docs/types/HealerCamp.html new file mode 100644 index 0000000..d81fcc9 --- /dev/null +++ b/Docs/types/HealerCamp.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HealerCamp + + +

Back to Server.Multis

+

HealerCamp : BaseCamp, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HealerCamp()
+ (ctor) HealerCamp( Serial serial )
+ virtual void AddComponents()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HealerGuildmaster.html b/Docs/types/HealerGuildmaster.html new file mode 100644 index 0000000..e2a07fe --- /dev/null +++ b/Docs/types/HealerGuildmaster.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HealerGuildmaster + + +

Back to Server.Mobiles

+

HealerGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) HealerGuildmaster()
+ (ctor) HealerGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HealthbarPoison.html b/Docs/types/HealthbarPoison.html new file mode 100644 index 0000000..ec70d61 --- /dev/null +++ b/Docs/types/HealthbarPoison.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - HealthbarPoison + + +

Back to Server.Network

+

HealthbarPoison : Packet

+ (ctor) HealthbarPoison( Mobile m )
+ + diff --git a/Docs/types/HealthbarYellow.html b/Docs/types/HealthbarYellow.html new file mode 100644 index 0000000..5ca4be0 --- /dev/null +++ b/Docs/types/HealthbarYellow.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - HealthbarYellow + + +

Back to Server.Network

+

HealthbarYellow : Packet

+ (ctor) HealthbarYellow( Mobile m )
+ + diff --git a/Docs/types/HeartOfTheLion.html b/Docs/types/HeartOfTheLion.html new file mode 100644 index 0000000..56b62f5 --- /dev/null +++ b/Docs/types/HeartOfTheLion.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - HeartOfTheLion + + +

Back to Server.Items

+

HeartOfTheLion : PlateChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HeartOfTheLion()
+ (ctor) HeartOfTheLion( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HearthOfHomeFire.html b/Docs/types/HearthOfHomeFire.html new file mode 100644 index 0000000..69c18cd --- /dev/null +++ b/Docs/types/HearthOfHomeFire.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HearthOfHomeFire + + +

Back to Server.Items

+

HearthOfHomeFire : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) HearthOfHomeFire( Serial serial )
+ (ctor) HearthOfHomeFire( bool east )
+ BaseAddonDeed Deed( get; )
+ void AddLightComponent( AddonComponent component, int x, int y, int z )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HearthOfHomeFireDeed.html b/Docs/types/HearthOfHomeFireDeed.html new file mode 100644 index 0000000..a515372 --- /dev/null +++ b/Docs/types/HearthOfHomeFireDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HearthOfHomeFireDeed + + +

Back to Server.Items

+

HearthOfHomeFireDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) HearthOfHomeFireDeed()
+ (ctor) HearthOfHomeFireDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HeartwoodBoard.html b/Docs/types/HeartwoodBoard.html new file mode 100644 index 0000000..32f983c --- /dev/null +++ b/Docs/types/HeartwoodBoard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HeartwoodBoard + + +

Back to Server.Items

+

HeartwoodBoard : Board, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) HeartwoodBoard()
+ (ctor) HeartwoodBoard( int amount )
+ (ctor) HeartwoodBoard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HeartwoodLog.html b/Docs/types/HeartwoodLog.html new file mode 100644 index 0000000..610daed --- /dev/null +++ b/Docs/types/HeartwoodLog.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HeartwoodLog + + +

Back to Server.Items

+

HeartwoodLog : Log, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IAxe

+ (ctor) HeartwoodLog()
+ (ctor) HeartwoodLog( Serial serial )
+ (ctor) HeartwoodLog( int amount )
+ virtual bool Axe( Mobile from, BaseAxe axe )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HeaterShield.html b/Docs/types/HeaterShield.html new file mode 100644 index 0000000..7e653fc --- /dev/null +++ b/Docs/types/HeaterShield.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - HeaterShield + + +

Back to Server.Items

+

HeaterShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: Aegis

+ (ctor) HeaterShield()
+ (ctor) HeaterShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HeatingStand.html b/Docs/types/HeatingStand.html new file mode 100644 index 0000000..7774dce --- /dev/null +++ b/Docs/types/HeatingStand.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - HeatingStand + + +

Back to Server.Items

+

HeatingStand : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HeatingStand()
+ (ctor) HeatingStand( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Douse()
+ virtual void Ignite()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HeaveTimer.html b/Docs/types/HeaveTimer.html new file mode 100644 index 0000000..3268216 --- /dev/null +++ b/Docs/types/HeaveTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HeaveTimer + + +

Back to Server.Items

+

(BaseBeverage) - HeaveTimer : Timer

+ (ctor) HeaveTimer( Mobile drunk )
+ virtual void OnTick()
+ + diff --git a/Docs/types/HeavyCrossbow.html b/Docs/types/HeavyCrossbow.html new file mode 100644 index 0000000..aa204ca --- /dev/null +++ b/Docs/types/HeavyCrossbow.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - HeavyCrossbow + + +

Back to Server.Items

+

HeavyCrossbow : BaseRanged, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: NoxRangersHeavyCrossbow

+ (ctor) HeavyCrossbow()
+ (ctor) HeavyCrossbow( Serial serial )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefMaxRange( get; )
+ int EffectID( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HeavyPlateJingasa.html b/Docs/types/HeavyPlateJingasa.html new file mode 100644 index 0000000..896adfb --- /dev/null +++ b/Docs/types/HeavyPlateJingasa.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - HeavyPlateJingasa + + +

Back to Server.Items

+

HeavyPlateJingasa : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HeavyPlateJingasa()
+ (ctor) HeavyPlateJingasa( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HellCat.html b/Docs/types/HellCat.html new file mode 100644 index 0000000..b0b3788 --- /dev/null +++ b/Docs/types/HellCat.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - HellCat + + +

Back to Server.Mobiles

+

HellCat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) HellCat()
+ (ctor) HellCat( Serial serial )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HellHound.html b/Docs/types/HellHound.html new file mode 100644 index 0000000..738182e --- /dev/null +++ b/Docs/types/HellHound.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HellHound + + +

Back to Server.Mobiles

+

HellHound : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) HellHound()
+ (ctor) HellHound( Serial serial )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HellSteed.html b/Docs/types/HellSteed.html new file mode 100644 index 0000000..057a98e --- /dev/null +++ b/Docs/types/HellSteed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HellSteed + + +

Back to Server.Mobiles

+

HellSteed : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) HellSteed()
+ (ctor) HellSteed( string name )
+ (ctor) HellSteed( Serial serial )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HelmOfInsight.html b/Docs/types/HelmOfInsight.html new file mode 100644 index 0000000..f0c4a89 --- /dev/null +++ b/Docs/types/HelmOfInsight.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HelmOfInsight + + +

Back to Server.Items

+

HelmOfInsight : PlateHelm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HelmOfInsight()
+ (ctor) HelmOfInsight( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseEnergyResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HelmOfSwiftness.html b/Docs/types/HelmOfSwiftness.html new file mode 100644 index 0000000..380a136 --- /dev/null +++ b/Docs/types/HelmOfSwiftness.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - HelmOfSwiftness + + +

Back to Server.Items

+

HelmOfSwiftness : WingedHelm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HelmOfSwiftness()
+ (ctor) HelmOfSwiftness( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Helmet.html b/Docs/types/Helmet.html new file mode 100644 index 0000000..b344865 --- /dev/null +++ b/Docs/types/Helmet.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Helmet + + +

Back to Server.Items

+

Helmet : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Helmet()
+ (ctor) Helmet( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HelpGump.html b/Docs/types/HelpGump.html new file mode 100644 index 0000000..6b97052 --- /dev/null +++ b/Docs/types/HelpGump.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HelpGump + + +

Back to Server.Engines.Help

+

HelpGump : Gump

+ (static) bool CheckCombat( Mobile m )
+ (static) void EventSink_HelpRequest( HelpRequestEventArgs e )
+ (static) void Initialize()
+ (static) bool IsYoung( Mobile m )
+ (ctor) HelpGump( Mobile from )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/HelpInfo.html b/Docs/types/HelpInfo.html new file mode 100644 index 0000000..9f01086 --- /dev/null +++ b/Docs/types/HelpInfo.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HelpInfo + + +

Back to Server.Commands

+

HelpInfo

+

Nested Types: CommandInfoGump, CommandListGump

+ (static) Dictionary<String,DocCommandEntry> HelpInfos( get; )
+ (static) List<DocCommandEntry> SortedHelpInfo( get; )
+ (static) void FillTable()
+ (static) void HelpInfo_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (ctor) HelpInfo()
+ + diff --git a/Docs/types/HelpRequestEventArgs.html b/Docs/types/HelpRequestEventArgs.html new file mode 100644 index 0000000..539f89f --- /dev/null +++ b/Docs/types/HelpRequestEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HelpRequestEventArgs + + +

Back to Server

+

HelpRequestEventArgs : EventArgs

+ (ctor) HelpRequestEventArgs( Mobile m )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/HelpRequestEventHandler.html b/Docs/types/HelpRequestEventHandler.html new file mode 100644 index 0000000..db498fa --- /dev/null +++ b/Docs/types/HelpRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HelpRequestEventHandler + + +

Back to Server

+

HelpRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) HelpRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( HelpRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( HelpRequestEventArgs e )
+ + diff --git a/Docs/types/Henchman.html b/Docs/types/Henchman.html new file mode 100644 index 0000000..9151f8c --- /dev/null +++ b/Docs/types/Henchman.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Henchman + + +

Back to Server.Engines.Quests.Ninja

+

Henchman : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Henchman()
+ (ctor) Henchman( Serial serial )
+ bool AlwaysMurderer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Herbalist.html b/Docs/types/Herbalist.html new file mode 100644 index 0000000..7bc2e42 --- /dev/null +++ b/Docs/types/Herbalist.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Herbalist + + +

Back to Server.Mobiles

+

Herbalist : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Herbalist()
+ (ctor) Herbalist( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HerdingTarget.html b/Docs/types/HerdingTarget.html new file mode 100644 index 0000000..ee8f604 --- /dev/null +++ b/Docs/types/HerdingTarget.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HerdingTarget + + +

Back to Server.Items

+

(ShepherdsCrook) - HerdingTarget : Target

+

Nested Types: InternalTarget

+ (ctor) HerdingTarget()
+ bool IsHerdable( BaseCreature bc )
+ virtual void OnTarget( Mobile from, object targ )
+ + diff --git a/Docs/types/HeritageToken.html b/Docs/types/HeritageToken.html new file mode 100644 index 0000000..ea65769 --- /dev/null +++ b/Docs/types/HeritageToken.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HeritageToken + + +

Back to Server.Items

+

HeritageToken : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HeritageToken()
+ (ctor) HeritageToken( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HeritageTokenGump.html b/Docs/types/HeritageTokenGump.html new file mode 100644 index 0000000..81b0cb0 --- /dev/null +++ b/Docs/types/HeritageTokenGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HeritageTokenGump + + +

Back to Server.Gumps

+

HeritageTokenGump : Gump

+ (ctor) HeritageTokenGump( HeritageToken token )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/HeroEthic.html b/Docs/types/HeroEthic.html new file mode 100644 index 0000000..f4a6419 --- /dev/null +++ b/Docs/types/HeroEthic.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HeroEthic + + +

Back to Server.Ethics.Hero

+

HeroEthic : Ethic

+ (ctor) HeroEthic()
+ virtual bool IsEligible( Mobile mob )
+ + diff --git a/Docs/types/HiddenFigure.html b/Docs/types/HiddenFigure.html new file mode 100644 index 0000000..9973c22 --- /dev/null +++ b/Docs/types/HiddenFigure.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - HiddenFigure + + +

Back to Server.Engines.Quests.Ninja

+

HiddenFigure : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) HiddenFigure()
+ (ctor) HiddenFigure( Serial serial )
+ int Message( get; set; )
+ int TalkNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile pm )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HideChest.html b/Docs/types/HideChest.html new file mode 100644 index 0000000..968a637 --- /dev/null +++ b/Docs/types/HideChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - HideChest + + +

Back to Server.Items

+

HideChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HideChest()
+ (ctor) HideChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HideCommand.html b/Docs/types/HideCommand.html new file mode 100644 index 0000000..7da99a4 --- /dev/null +++ b/Docs/types/HideCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HideCommand + + +

Back to Server.Commands.Generic

+

HideCommand : BaseCommand

+ (ctor) HideCommand( bool value )
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/HideFemaleChest.html b/Docs/types/HideFemaleChest.html new file mode 100644 index 0000000..7e42bae --- /dev/null +++ b/Docs/types/HideFemaleChest.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - HideFemaleChest + + +

Back to Server.Items

+

HideFemaleChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HideFemaleChest()
+ (ctor) HideFemaleChest( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HideGloves.html b/Docs/types/HideGloves.html new file mode 100644 index 0000000..1a5d2dd --- /dev/null +++ b/Docs/types/HideGloves.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - HideGloves + + +

Back to Server.Items

+

HideGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HideGloves()
+ (ctor) HideGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HideGorget.html b/Docs/types/HideGorget.html new file mode 100644 index 0000000..b241bec --- /dev/null +++ b/Docs/types/HideGorget.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - HideGorget + + +

Back to Server.Items

+

HideGorget : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HideGorget()
+ (ctor) HideGorget( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HidePants.html b/Docs/types/HidePants.html new file mode 100644 index 0000000..f23f5de --- /dev/null +++ b/Docs/types/HidePants.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - HidePants + + +

Back to Server.Items

+

HidePants : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HidePants()
+ (ctor) HidePants( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HidePauldrons.html b/Docs/types/HidePauldrons.html new file mode 100644 index 0000000..d5e8a8d --- /dev/null +++ b/Docs/types/HidePauldrons.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - HidePauldrons + + +

Back to Server.Items

+

HidePauldrons : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HidePauldrons()
+ (ctor) HidePauldrons( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HideType.html b/Docs/types/HideType.html new file mode 100644 index 0000000..9fc7454 --- /dev/null +++ b/Docs/types/HideType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HideType + + +

Back to Server.Mobiles

+

HideType (Enum)

+ Regular = 0,
+ Spined = 1,
+ Horned = 2,
+ Barbed = 3
+ + diff --git a/Docs/types/Hides.html b/Docs/types/Hides.html new file mode 100644 index 0000000..7516bf5 --- /dev/null +++ b/Docs/types/Hides.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Hides + + +

Back to Server.Items

+

Hides : BaseHides, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IScissorable

+ (ctor) Hides()
+ (ctor) Hides( int amount )
+ (ctor) Hides( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Hiding.html b/Docs/types/Hiding.html new file mode 100644 index 0000000..adaf908 --- /dev/null +++ b/Docs/types/Hiding.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Hiding + + +

Back to Server.SkillHandlers

+

Hiding

+ (static) bool CombatOverride( get; set; )
+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Hiding()
+ + diff --git a/Docs/types/Hind.html b/Docs/types/Hind.html new file mode 100644 index 0000000..106e8e3 --- /dev/null +++ b/Docs/types/Hind.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Hind + + +

Back to Server.Mobiles

+

Hind : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Hind()
+ (ctor) Hind( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Hinge.html b/Docs/types/Hinge.html new file mode 100644 index 0000000..e89b1a9 --- /dev/null +++ b/Docs/types/Hinge.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Hinge + + +

Back to Server.Items

+

Hinge : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Hinge()
+ (ctor) Hinge( int amount )
+ (ctor) Hinge( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HintItem.html b/Docs/types/HintItem.html new file mode 100644 index 0000000..ac2ec2e --- /dev/null +++ b/Docs/types/HintItem.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HintItem + + +

Back to Server.Items

+

HintItem : WarningItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HintItem( Serial serial )
+ (ctor) HintItem( int itemID, int range, int warning, int hint )
+ (ctor) HintItem( int itemID, int range, string warning, string hint )
+ int HintNumber( get; set; )
+ string HintString( get; set; )
+ bool OnlyToTriggerer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Hiryu.html b/Docs/types/Hiryu.html new file mode 100644 index 0000000..368283b --- /dev/null +++ b/Docs/types/Hiryu.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - Hiryu + + +

Back to Server.Mobiles

+

Hiryu : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+

Nested Types: ExpireTimer

+ (static) int GetHue()
+ (ctor) Hiryu()
+ (ctor) Hiryu( Serial serial )
+ bool CanAngerOnTame( get; )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ bool StatLossAfterTame( get; )
+ int TreasureMapLevel( get; )
+ void b__0()
+ void b__1()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HitLower.html b/Docs/types/HitLower.html new file mode 100644 index 0000000..0320e1c --- /dev/null +++ b/Docs/types/HitLower.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - HitLower + + +

Back to Server.Items

+

HitLower

+

Nested Types: AttackTimer, DefenseTimer

+ (static) bool ApplyAttack( Mobile m )
+ (static) bool ApplyDefense( Mobile m )
+ (static) bool IsUnderAttackEffect( Mobile m )
+ (static) bool IsUnderDefenseEffect( Mobile m )
+ (static) void RemoveAttack( Mobile m )
+ (static) void RemoveDefense( Mobile m )
+ (ctor) HitLower()
+ + diff --git a/Docs/types/HitsTimer.html b/Docs/types/HitsTimer.html new file mode 100644 index 0000000..8250462 --- /dev/null +++ b/Docs/types/HitsTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HitsTimer + + +

Back to Server

+

(Mobile) - HitsTimer : Timer

+ (ctor) HitsTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Hold.html b/Docs/types/Hold.html new file mode 100644 index 0000000..55b98c1 --- /dev/null +++ b/Docs/types/Hold.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Hold + + +

Back to Server.Items

+

Hold : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Hold( BaseBoat boat )
+ (ctor) Hold( Serial serial )
+ bool IsDecoContainer( get; )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item item )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void Serialize( GenericWriter writer )
+ void SetFacing( Direction dir )
+ + diff --git a/Docs/types/HolidayBell.html b/Docs/types/HolidayBell.html new file mode 100644 index 0000000..267490e --- /dev/null +++ b/Docs/types/HolidayBell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HolidayBell + + +

Back to Server.Items

+

HolidayBell : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HolidayBell()
+ (ctor) HolidayBell( Serial serial )
+ (ctor) HolidayBell( string maker )
+ string DefaultName( get; )
+ string Giver( get; set; )
+ int SoundID( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HolidayTree.html b/Docs/types/HolidayTree.html new file mode 100644 index 0000000..37f47de --- /dev/null +++ b/Docs/types/HolidayTree.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - HolidayTree + + +

Back to Server.Items

+

HolidayTree : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IAddon

+

Nested Types: Ornament, TreeTrunk

+ (ctor) HolidayTree( Serial serial )
+ (ctor) HolidayTree( Mobile from, HolidayTreeType type, Point3D loc )
+ int LabelNumber( get; )
+ Mobile Placer( get; set; )
+ Item Server.Items.IAddon.Deed( get; )
+ void AddItem( int x, int y, int z, Item item )
+ void AddOrnament( int x, int y, int z, int itemID )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void ValidatePlacement()
+ + diff --git a/Docs/types/HolidayTreeChoiceGump.html b/Docs/types/HolidayTreeChoiceGump.html new file mode 100644 index 0000000..caf6cda --- /dev/null +++ b/Docs/types/HolidayTreeChoiceGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HolidayTreeChoiceGump + + +

Back to Server.Items

+

HolidayTreeChoiceGump : Gump

+ (ctor) HolidayTreeChoiceGump( Mobile from, HolidayTreeDeed deed )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/HolidayTreeDeed.html b/Docs/types/HolidayTreeDeed.html new file mode 100644 index 0000000..535ede1 --- /dev/null +++ b/Docs/types/HolidayTreeDeed.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - HolidayTreeDeed + + +

Back to Server.Items

+

HolidayTreeDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HolidayTreeDeed()
+ (ctor) HolidayTreeDeed( Serial serial )
+ int LabelNumber( get; )
+ void BeginPlace( Mobile from, HolidayTreeType type )
+ virtual void Deserialize( GenericReader reader )
+ void EndPlace( Mobile from, HolidayTreeType type, Point3D loc )
+ virtual void OnDoubleClick( Mobile from )
+ void Placement_OnTarget( Mobile from, object targeted, object state )
+ virtual void Serialize( GenericWriter writer )
+ bool ValidatePlacement( Mobile from, Point3D loc )
+ + diff --git a/Docs/types/HolidayTreeType.html b/Docs/types/HolidayTreeType.html new file mode 100644 index 0000000..7c964f2 --- /dev/null +++ b/Docs/types/HolidayTreeType.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HolidayTreeType + + +

Back to Server.Items

+

HolidayTreeType (Enum)

+ Classic = 0,
+ Modern = 1
+ + diff --git a/Docs/types/HollowPrism.html b/Docs/types/HollowPrism.html new file mode 100644 index 0000000..de9176b --- /dev/null +++ b/Docs/types/HollowPrism.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HollowPrism + + +

Back to Server.Items

+

HollowPrism : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HollowPrism()
+ (ctor) HollowPrism( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HolyBlade.html b/Docs/types/HolyBlade.html new file mode 100644 index 0000000..8a3d5d5 --- /dev/null +++ b/Docs/types/HolyBlade.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HolyBlade + + +

Back to Server.Ethics.Hero

+

HolyBlade : Power

+ (ctor) HolyBlade()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/HolyFamiliar.html b/Docs/types/HolyFamiliar.html new file mode 100644 index 0000000..50c76c6 --- /dev/null +++ b/Docs/types/HolyFamiliar.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - HolyFamiliar + + +

Back to Server.Mobiles

+

HolyFamiliar : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) HolyFamiliar()
+ (ctor) HolyFamiliar( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ bool IsBondable( get; )
+ bool IsDispellable( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual string ApplyNameSuffix( string suffix )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HolyItem.html b/Docs/types/HolyItem.html new file mode 100644 index 0000000..071e6aa --- /dev/null +++ b/Docs/types/HolyItem.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HolyItem + + +

Back to Server.Ethics.Hero

+

HolyItem : Power

+ (ctor) HolyItem()
+ virtual void BeginInvoke( Player from )
+ void Power_OnTarget( Mobile fromMobile, object obj, object state )
+ + diff --git a/Docs/types/HolyKnightsBreastplate.html b/Docs/types/HolyKnightsBreastplate.html new file mode 100644 index 0000000..4eb14c2 --- /dev/null +++ b/Docs/types/HolyKnightsBreastplate.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HolyKnightsBreastplate + + +

Back to Server.Items

+

HolyKnightsBreastplate : PlateChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HolyKnightsBreastplate()
+ (ctor) HolyKnightsBreastplate( Serial serial )
+ int ArtifactRarity( get; )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HolyLightSpell.html b/Docs/types/HolyLightSpell.html new file mode 100644 index 0000000..36a75e7 --- /dev/null +++ b/Docs/types/HolyLightSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HolyLightSpell + + +

Back to Server.Spells.Chivalry

+

HolyLightSpell : PaladinSpell, ISpell

+ (ctor) HolyLightSpell( Mobile caster, Item scroll )
+ bool BlocksMovement( get; )
+ TimeSpan CastDelayBase( get; )
+ bool DelayedDamage( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/HolyMage.html b/Docs/types/HolyMage.html new file mode 100644 index 0000000..b77ef12 --- /dev/null +++ b/Docs/types/HolyMage.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - HolyMage + + +

Back to Server.Mobiles

+

HolyMage : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) HolyMage()
+ (ctor) HolyMage( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ Item ApplyHue( Item item, int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HolySense.html b/Docs/types/HolySense.html new file mode 100644 index 0000000..ec9191b --- /dev/null +++ b/Docs/types/HolySense.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HolySense + + +

Back to Server.Ethics.Hero

+

HolySense : Power

+ (ctor) HolySense()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/HolyShield.html b/Docs/types/HolyShield.html new file mode 100644 index 0000000..0a23322 --- /dev/null +++ b/Docs/types/HolyShield.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HolyShield + + +

Back to Server.Ethics.Hero

+

HolyShield : Power

+ (ctor) HolyShield()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/HolySteed.html b/Docs/types/HolySteed.html new file mode 100644 index 0000000..a5465ca --- /dev/null +++ b/Docs/types/HolySteed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - HolySteed + + +

Back to Server.Mobiles

+

HolySteed : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) HolySteed()
+ (ctor) HolySteed( Serial serial )
+ bool CanBreath( get; )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ bool IsBondable( get; )
+ bool IsDispellable( get; )
+ virtual string ApplyNameSuffix( string suffix )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HolySword.html b/Docs/types/HolySword.html new file mode 100644 index 0000000..6e78b62 --- /dev/null +++ b/Docs/types/HolySword.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HolySword + + +

Back to Server.Items

+

HolySword : Longsword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) HolySword()
+ (ctor) HolySword( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HolyWord.html b/Docs/types/HolyWord.html new file mode 100644 index 0000000..3100fe6 --- /dev/null +++ b/Docs/types/HolyWord.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HolyWord + + +

Back to Server.Ethics.Hero

+

HolyWord : Power

+ (ctor) HolyWord()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/HoneydewMelon.html b/Docs/types/HoneydewMelon.html new file mode 100644 index 0000000..781f68b --- /dev/null +++ b/Docs/types/HoneydewMelon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HoneydewMelon + + +

Back to Server.Items

+

HoneydewMelon : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HoneydewMelon()
+ (ctor) HoneydewMelon( int amount )
+ (ctor) HoneydewMelon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HonorCandle.html b/Docs/types/HonorCandle.html new file mode 100644 index 0000000..06b8893 --- /dev/null +++ b/Docs/types/HonorCandle.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HonorCandle + + +

Back to Server.Engines.Quests.Samurai

+

HonorCandle : CandleLong, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HonorCandle()
+ (ctor) HonorCandle( Serial serial )
+ int LitSound( get; )
+ int UnlitSound( get; )
+ virtual void Burn()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Douse()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HonorContext.html b/Docs/types/HonorContext.html new file mode 100644 index 0000000..319bdd0 --- /dev/null +++ b/Docs/types/HonorContext.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - HonorContext + + +

Back to Server

+

HonorContext

+

Nested Types: (Anonymous-Type)--c__DisplayClass2, FirstHit, InternalTimer

+ (ctor) HonorContext( PlayerMobile source, Mobile target )
+ int PerfectionDamageBonus( get; )
+ int PerfectionLuckBonus( get; )
+ PlayerMobile Source( get; )
+ Mobile Target( get; )
+ void Cancel()
+ bool CheckDistance()
+ void OnSourceBeneficialAction( Mobile to )
+ void OnSourceDamaged( Mobile from, int amount )
+ void OnSourceKilled()
+ void OnTargetDamaged( Mobile from, int amount )
+ void OnTargetHit( Mobile from )
+ void OnTargetKilled()
+ void OnTargetMissed( Mobile from )
+ void OnTargetPoisoned()
+ + diff --git a/Docs/types/HonorSelf.html b/Docs/types/HonorSelf.html new file mode 100644 index 0000000..80e5692 --- /dev/null +++ b/Docs/types/HonorSelf.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HonorSelf + + +

Back to Server.Gumps

+

HonorSelf : Gump

+ (ctor) HonorSelf( PlayerMobile from )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/HonorVirtue.html b/Docs/types/HonorVirtue.html new file mode 100644 index 0000000..ad2c4cb --- /dev/null +++ b/Docs/types/HonorVirtue.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - HonorVirtue + + +

Back to Server

+

HonorVirtue

+

Nested Types: (Anonymous-Type)--c__DisplayClass1, InternalTarget

+ (static) void ActivateEmbrace( PlayerMobile pm )
+ (static) void EmbraceHonor( PlayerMobile pm )
+ (static) int GetHonorDuration( PlayerMobile from )
+ (static) void Honor( PlayerMobile source, Mobile target )
+ (static) void Initialize()
+ (static) void OnVirtueUsed( Mobile from )
+ (ctor) HonorVirtue()
+ + diff --git a/Docs/types/HonorableExecution.html b/Docs/types/HonorableExecution.html new file mode 100644 index 0000000..deeba61 --- /dev/null +++ b/Docs/types/HonorableExecution.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - HonorableExecution + + +

Back to Server.Spells.Bushido

+

HonorableExecution : SamuraiMove

+

Nested Types: HonorableExecutionInfo

+ (static) int GetSwingBonus( Mobile target )
+ (static) bool IsUnderPenalty( Mobile target )
+ (static) void RemovePenalty( Mobile target )
+ (ctor) HonorableExecution()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ double RequiredSkill( get; )
+ void EndEffect( object state )
+ virtual double GetDamageScalar( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/HonorableExecutionInfo.html b/Docs/types/HonorableExecutionInfo.html new file mode 100644 index 0000000..6ecfb90 --- /dev/null +++ b/Docs/types/HonorableExecutionInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HonorableExecutionInfo + + +

Back to Server.Spells.Bushido

+

(HonorableExecution) - HonorableExecutionInfo

+ (ctor) HonorableExecutionInfo( Mobile from, ArrayList mods )
+ (ctor) HonorableExecutionInfo( Mobile from, int swingBonus )
+ (ctor) HonorableExecutionInfo( Mobile from, int swingBonus, ArrayList mods, bool penalty )
+ void Apply()
+ void Clear()
+ + diff --git a/Docs/types/HonorableSwords.html b/Docs/types/HonorableSwords.html new file mode 100644 index 0000000..f386d8b --- /dev/null +++ b/Docs/types/HonorableSwords.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HonorableSwords + + +

Back to Server.Items

+

HonorableSwords : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HonorableSwords()
+ (ctor) HonorableSwords( Serial serial )
+ (ctor) HonorableSwords( string swordsName )
+ int LabelNumber( get; )
+ string SwordsName( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HoodedShroudOfShadows.html b/Docs/types/HoodedShroudOfShadows.html new file mode 100644 index 0000000..3bbd135 --- /dev/null +++ b/Docs/types/HoodedShroudOfShadows.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HoodedShroudOfShadows + + +

Back to Server.Items

+

HoodedShroudOfShadows : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) HoodedShroudOfShadows()
+ (ctor) HoodedShroudOfShadows( Serial serial )
+ (ctor) HoodedShroudOfShadows( int hue )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HordeMinion.html b/Docs/types/HordeMinion.html new file mode 100644 index 0000000..1ef9420 --- /dev/null +++ b/Docs/types/HordeMinion.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - HordeMinion + + +

Back to Server.Mobiles

+

HordeMinion : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: CapturedHordeMinion

+ (ctor) HordeMinion()
+ (ctor) HordeMinion( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HordeMinionFamiliar.html b/Docs/types/HordeMinionFamiliar.html new file mode 100644 index 0000000..2c43fe5 --- /dev/null +++ b/Docs/types/HordeMinionFamiliar.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - HordeMinionFamiliar + + +

Back to Server.Mobiles

+

HordeMinionFamiliar : BaseFamiliar, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) HordeMinionFamiliar()
+ (ctor) HordeMinionFamiliar( Serial serial )
+ bool DisplayWeight( get; )
+ virtual void BeginRelease( Mobile from )
+ virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target )
+ virtual bool CheckNonlocalLift( Mobile from, Item item )
+ void ConfirmRelease_Callback( Mobile from, bool okay, object state )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual DeathMoveResult GetInventoryMoveResultFor( Item item )
+ virtual bool IsSnoop( Mobile from )
+ virtual bool OnBeforeDeath()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item item )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HornOfRetreat.html b/Docs/types/HornOfRetreat.html new file mode 100644 index 0000000..860dfb8 --- /dev/null +++ b/Docs/types/HornOfRetreat.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - HornOfRetreat + + +

Back to Server.Engines.Quests

+

HornOfRetreat : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: DarkTidesHorn, UzeraanTurmoilHorn

+ (ctor) HornOfRetreat()
+ (ctor) HornOfRetreat( Serial serial )
+ int Charges( get; set; )
+ Point3D DestLoc( get; set; )
+ Map DestMap( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void PlayTimer_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool ValidateUse( Mobile from )
+ + diff --git a/Docs/types/HornOfRetreatMoongate.html b/Docs/types/HornOfRetreatMoongate.html new file mode 100644 index 0000000..0681e99 --- /dev/null +++ b/Docs/types/HornOfRetreatMoongate.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HornOfRetreatMoongate + + +

Back to Server.Engines.Quests

+

HornOfRetreatMoongate : Moongate, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HornOfRetreatMoongate( Serial serial )
+ (ctor) HornOfRetreatMoongate( Point3D destLoc, Map destMap, Mobile caster, int hue )
+ int LabelNumber( get; )
+ virtual void BeginConfirmation( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ virtual void UseGate( Mobile m )
+ + diff --git a/Docs/types/HornedHides.html b/Docs/types/HornedHides.html new file mode 100644 index 0000000..ca73881 --- /dev/null +++ b/Docs/types/HornedHides.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HornedHides + + +

Back to Server.Items

+

HornedHides : BaseHides, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IScissorable

+ (ctor) HornedHides()
+ (ctor) HornedHides( int amount )
+ (ctor) HornedHides( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HornedLeather.html b/Docs/types/HornedLeather.html new file mode 100644 index 0000000..40ebe3a --- /dev/null +++ b/Docs/types/HornedLeather.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HornedLeather + + +

Back to Server.Items

+

HornedLeather : BaseLeather, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) HornedLeather()
+ (ctor) HornedLeather( int amount )
+ (ctor) HornedLeather( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HornedTribalMask.html b/Docs/types/HornedTribalMask.html new file mode 100644 index 0000000..3fee0aa --- /dev/null +++ b/Docs/types/HornedTribalMask.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - HornedTribalMask + + +

Back to Server.Items

+

HornedTribalMask : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: DivineCountenance

+ (ctor) HornedTribalMask()
+ (ctor) HornedTribalMask( Serial serial )
+ (ctor) HornedTribalMask( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HorrificBeastScroll.html b/Docs/types/HorrificBeastScroll.html new file mode 100644 index 0000000..17c2dee --- /dev/null +++ b/Docs/types/HorrificBeastScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HorrificBeastScroll + + +

Back to Server.Items

+

HorrificBeastScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) HorrificBeastScroll()
+ (ctor) HorrificBeastScroll( int amount )
+ (ctor) HorrificBeastScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HorrificBeastSpell.html b/Docs/types/HorrificBeastSpell.html new file mode 100644 index 0000000..0336ebd --- /dev/null +++ b/Docs/types/HorrificBeastSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HorrificBeastSpell + + +

Back to Server.Spells.Necromancy

+

HorrificBeastSpell : TransformationSpell, ISpell, ITransformationSpell

+ (ctor) HorrificBeastSpell( Mobile caster, Item scroll )
+ int Body( get; )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void DoEffect( Mobile m )
+ virtual void RemoveEffect( Mobile m )
+ + diff --git a/Docs/types/Horse.html b/Docs/types/Horse.html new file mode 100644 index 0000000..6b84b52 --- /dev/null +++ b/Docs/types/Horse.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Horse + + +

Back to Server.Mobiles

+

Horse : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) Horse()
+ (ctor) Horse( Serial serial )
+ (ctor) Horse( string name )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HorseBreederGump.html b/Docs/types/HorseBreederGump.html new file mode 100644 index 0000000..268511e --- /dev/null +++ b/Docs/types/HorseBreederGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HorseBreederGump + + +

Back to Server.Factions

+

HorseBreederGump : FactionGump

+ (ctor) HorseBreederGump( PlayerMobile from, Faction faction )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/HorseShoes.html b/Docs/types/HorseShoes.html new file mode 100644 index 0000000..f70055c --- /dev/null +++ b/Docs/types/HorseShoes.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HorseShoes + + +

Back to Server.Items

+

HorseShoes : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HorseShoes()
+ (ctor) HorseShoes( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Horus.html b/Docs/types/Horus.html new file mode 100644 index 0000000..2590fb4 --- /dev/null +++ b/Docs/types/Horus.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Horus + + +

Back to Server.Engines.Quests.Necro

+

Horus : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Nested Types: SpeakPasswordEntry

+ (ctor) Horus()
+ (ctor) Horus( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile m )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnPasswordSpoken( PlayerMobile from )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HorusConversation.html b/Docs/types/HorusConversation.html new file mode 100644 index 0000000..d3b99f4 --- /dev/null +++ b/Docs/types/HorusConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HorusConversation + + +

Back to Server.Engines.Quests.Necro

+

HorusConversation : QuestConversation

+ (ctor) HorusConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/HorusRewardConversation.html b/Docs/types/HorusRewardConversation.html new file mode 100644 index 0000000..f07255e --- /dev/null +++ b/Docs/types/HorusRewardConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HorusRewardConversation + + +

Back to Server.Engines.Quests.Necro

+

HorusRewardConversation : QuestConversation

+ (ctor) HorusRewardConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/Hourglass.html b/Docs/types/Hourglass.html new file mode 100644 index 0000000..2afa323 --- /dev/null +++ b/Docs/types/Hourglass.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Hourglass + + +

Back to Server.Items

+

Hourglass : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Hourglass()
+ (ctor) Hourglass( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HourglassAni.html b/Docs/types/HourglassAni.html new file mode 100644 index 0000000..dacbe16 --- /dev/null +++ b/Docs/types/HourglassAni.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HourglassAni + + +

Back to Server.Items

+

HourglassAni : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HourglassAni()
+ (ctor) HourglassAni( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HouseAccessTarget.html b/Docs/types/HouseAccessTarget.html new file mode 100644 index 0000000..59f2430 --- /dev/null +++ b/Docs/types/HouseAccessTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseAccessTarget + + +

Back to Server.Multis

+

HouseAccessTarget : Target

+ (ctor) HouseAccessTarget( BaseHouse house )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/HouseBanTarget.html b/Docs/types/HouseBanTarget.html new file mode 100644 index 0000000..67c96a4 --- /dev/null +++ b/Docs/types/HouseBanTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseBanTarget + + +

Back to Server.Multis

+

HouseBanTarget : Target

+ (ctor) HouseBanTarget( bool ban, BaseHouse house )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/HouseComparer.html b/Docs/types/HouseComparer.html new file mode 100644 index 0000000..a25c6c0 --- /dev/null +++ b/Docs/types/HouseComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseComparer + + +

Back to Server.Gumps

+

(ViewHousesGump) - HouseComparer : IComparer<BaseHouse>

+ (ctor) HouseComparer()
+ virtual int Compare( BaseHouse x, BaseHouse y )
+ + diff --git a/Docs/types/HouseDeed.html b/Docs/types/HouseDeed.html new file mode 100644 index 0000000..2b78a57 --- /dev/null +++ b/Docs/types/HouseDeed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - HouseDeed + + +

Back to Server.Multis.Deeds

+

HouseDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BrickHouseDeed, CastleDeed, FieldStoneHouseDeed, KeepDeed, LargeMarbleDeed, LargePatioDeed, LogCabinDeed, MarbleWorkshopDeed, SandstonePatioDeed, SmallBrickHouseDeed, SmallTowerDeed, StonePlasterHouseDeed, StoneWorkshopDeed, ThatchedRoofCottageDeed, TowerDeed, TwoStoryStonePlasterHouseDeed, TwoStoryWoodPlasterHouseDeed, VillaDeed, WoodHouseDeed, WoodPlasterHouseDeed

+ (ctor) HouseDeed( Serial serial )
+ (ctor) HouseDeed( int id, Point3D offset )
+ Rectangle2D[] Area( get; )
+ int MultiID( get; set; )
+ Point3D Offset( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void OnDoubleClick( Mobile from )
+ void OnPlacement( Mobile from, Point3D p )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HouseDemolishGump.html b/Docs/types/HouseDemolishGump.html new file mode 100644 index 0000000..fbfff01 --- /dev/null +++ b/Docs/types/HouseDemolishGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseDemolishGump + + +

Back to Server.Gumps

+

HouseDemolishGump : Gump

+ (ctor) HouseDemolishGump( Mobile mobile, BaseHouse house )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/HouseFoundation.html b/Docs/types/HouseFoundation.html new file mode 100644 index 0000000..4fb1aa4 --- /dev/null +++ b/Docs/types/HouseFoundation.html @@ -0,0 +1,78 @@ + + + RunUO Documentation - Class Overview - HouseFoundation + + +

Back to Server.Multis

+

HouseFoundation : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: DesignInsertTarget

+ (static) ComponentVerification Verification( get; )
+ (static) void AddStairsTo( ref MultiComponentList mcl )
+ (static) void ApplyFoundation( FoundationType type, MultiComponentList mcl )
+ (static) bool DeleteStairs( MultiComponentList mcl, int id, int x, int y, int z )
+ (static) void Designer_Backup( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Build( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Clear( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Close( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Commit( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Delete( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Level( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Restore( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Revert( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Roof( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_RoofDelete( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Stairs( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void Designer_Sync( NetState state, IEntity e, EncodedReader pvSrc )
+ (static) void DesignInsert_OnCommand( CommandEventArgs e )
+ (static) void EventSink_Speech( SpeechEventArgs e )
+ (static) void GetFoundationGraphics( FoundationType type, out int east, out int south, out int post, out int corner )
+ (static) int GetLevelZ( int level, HouseFoundation house )
+ (static) int GetZLevel( int z, HouseFoundation house )
+ (static) void Initialize()
+ (static) bool IsStair( int id, ref int dir )
+ (static) bool IsStairBlock( int id )
+ (static) void QueryDesignDetails( NetState state, PacketReader pvSrc )
+ (static) void TraceValidity( NetState state, int itemID )
+ (static) bool ValidPiece( int itemID )
+ (static) bool ValidPiece( int itemID, bool roof )
+ (ctor) HouseFoundation( Serial serial )
+ (ctor) HouseFoundation( Mobile owner, int multiID, int maxLockdowns, int maxSecures )
+ Rectangle2D[] Area( get; )
+ DesignState BackupState( get; set; )
+ Point3D BaseBanLocation( get; )
+ MultiComponentList Components( get; )
+ DesignState CurrentState( get; set; )
+ int CustomizationCost( get; )
+ Mobile Customizer( get; set; )
+ int DefaultPrice( get; )
+ DesignState DesignState( get; set; )
+ List<Item> Fixtures( get; )
+ bool IsActive( get; )
+ bool IsAosRules( get; )
+ int LastRevision( get; set; )
+ int MaxLevels( get; )
+ Item SignHanger( get; )
+ Item Signpost( get; )
+ int SignpostGraphic( get; set; )
+ FoundationType Type( get; set; )
+ void AddFixture( Item item, MultiTileEntry mte )
+ void AddFixtures( Mobile from, MultiTileEntry[] list )
+ void BeginCustomize( Mobile m )
+ void CheckSignpost()
+ bool CheckWall( MultiComponentList mcl, int x, int y )
+ void ClearFixtures( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ void EndConfirmCommit( Mobile from )
+ MultiComponentList GetEmptyFoundation()
+ virtual int GetMaxUpdateRange()
+ virtual int GetUpdateRange( Mobile m )
+ bool IsFixture( Item item )
+ bool IsHiddenToCustomizer( Item item )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void SendInfoTo( NetState state, bool sendOplPacket )
+ virtual void Serialize( GenericWriter writer )
+ void SetInitialState()
+ + diff --git a/Docs/types/HouseFriendTarget.html b/Docs/types/HouseFriendTarget.html new file mode 100644 index 0000000..392201f --- /dev/null +++ b/Docs/types/HouseFriendTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseFriendTarget + + +

Back to Server.Multis

+

HouseFriendTarget : Target

+ (ctor) HouseFriendTarget( bool add, BaseHouse house )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/HouseGump.html b/Docs/types/HouseGump.html new file mode 100644 index 0000000..7f41214 --- /dev/null +++ b/Docs/types/HouseGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HouseGump + + +

Back to Server.Gumps

+

HouseGump : Gump

+ (ctor) HouseGump( Mobile from, BaseHouse house )
+ string GetOwnerName()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ ArrayList Wrap( string value )
+ + diff --git a/Docs/types/HouseGumpAOS.html b/Docs/types/HouseGumpAOS.html new file mode 100644 index 0000000..a4f3817 --- /dev/null +++ b/Docs/types/HouseGumpAOS.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - HouseGumpAOS + + +

Back to Server.Gumps

+

HouseGumpAOS : Gump

+ (static) void ClearAccess_Callback( Mobile from, bool okay, object state )
+ (static) void ClearBans_Callback( Mobile from, bool okay, object state )
+ (static) void ClearCoOwners_Callback( Mobile from, bool okay, object state )
+ (static) void ClearFriends_Callback( Mobile from, bool okay, object state )
+ (static) void ConvertHouse_Callback( Mobile from, bool okay, object state )
+ (static) void CustomizeNotice_Callback( Mobile from, object state )
+ (static) void PublicPrivateNotice_Callback( Mobile from, object state )
+ (ctor) HouseGumpAOS( HouseGumpPageAOS page, Mobile from, BaseHouse house )
+ void AddButtonLabeled( int x, int y, int buttonID, int number )
+ void AddButtonLabeled( int x, int y, int buttonID, int number, bool enabled )
+ void AddList( ArrayList list, int button, bool accountOf, bool leadingStar, Mobile from )
+ void AddPageButton( int x, int y, int buttonID, int number, HouseGumpPageAOS page )
+ int GetButtonID( int type, int index )
+ string GetDateTime( DateTime val )
+ string GetOwnerName()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ ArrayList Wrap( string value )
+ + diff --git a/Docs/types/HouseGumpPageAOS.html b/Docs/types/HouseGumpPageAOS.html new file mode 100644 index 0000000..120eb86 --- /dev/null +++ b/Docs/types/HouseGumpPageAOS.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - HouseGumpPageAOS + + +

Back to Server.Gumps

+

HouseGumpPageAOS (Enum)

+ Information = 0,
+ Security = 1,
+ Storage = 2,
+ Customize = 3,
+ Ownership = 4,
+ ChangeHanger = 5,
+ ChangeFoundation = 6,
+ ChangeSign = 7,
+ RemoveCoOwner = 8,
+ ListCoOwner = 9,
+ RemoveFriend = 10,
+ ListFriend = 11,
+ RemoveBan = 12,
+ ListBan = 13,
+ RemoveAccess = 14,
+ ListAccess = 15,
+ ChangePost = 16,
+ Vendors = 17
+ + diff --git a/Docs/types/HouseKickTarget.html b/Docs/types/HouseKickTarget.html new file mode 100644 index 0000000..10d5d24 --- /dev/null +++ b/Docs/types/HouseKickTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseKickTarget + + +

Back to Server.Multis

+

HouseKickTarget : Target

+ (ctor) HouseKickTarget( BaseHouse house )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/HouseLadderAddon.html b/Docs/types/HouseLadderAddon.html new file mode 100644 index 0000000..eae2b20 --- /dev/null +++ b/Docs/types/HouseLadderAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - HouseLadderAddon + + +

Back to Server.Items

+

HouseLadderAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) HouseLadderAddon( int type )
+ (ctor) HouseLadderAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HouseLadderDeed.html b/Docs/types/HouseLadderDeed.html new file mode 100644 index 0000000..052eb71 --- /dev/null +++ b/Docs/types/HouseLadderDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HouseLadderDeed + + +

Back to Server.Items

+

HouseLadderDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) HouseLadderDeed()
+ (ctor) HouseLadderDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HouseListGump.html b/Docs/types/HouseListGump.html new file mode 100644 index 0000000..795e1ca --- /dev/null +++ b/Docs/types/HouseListGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseListGump + + +

Back to Server.Gumps

+

HouseListGump : Gump

+ (ctor) HouseListGump( int number, ArrayList list, BaseHouse house, bool accountOf )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/HouseOwnerTarget.html b/Docs/types/HouseOwnerTarget.html new file mode 100644 index 0000000..de7fa7f --- /dev/null +++ b/Docs/types/HouseOwnerTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseOwnerTarget + + +

Back to Server.Multis

+

HouseOwnerTarget : Target

+ (ctor) HouseOwnerTarget( BaseHouse house )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/HousePlacement.html b/Docs/types/HousePlacement.html new file mode 100644 index 0000000..d53859f --- /dev/null +++ b/Docs/types/HousePlacement.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HousePlacement + + +

Back to Server.Multis

+

HousePlacement

+ (static) HousePlacementResult Check( Mobile from, int multiID, Point3D center, out ArrayList toMove )
+ (ctor) HousePlacement()
+ + diff --git a/Docs/types/HousePlacementCategoryGump.html b/Docs/types/HousePlacementCategoryGump.html new file mode 100644 index 0000000..6248575 --- /dev/null +++ b/Docs/types/HousePlacementCategoryGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HousePlacementCategoryGump + + +

Back to Server.Items

+

HousePlacementCategoryGump : Gump

+ (ctor) HousePlacementCategoryGump( Mobile from )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/HousePlacementEntry.html b/Docs/types/HousePlacementEntry.html new file mode 100644 index 0000000..21a0b72 --- /dev/null +++ b/Docs/types/HousePlacementEntry.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - HousePlacementEntry + + +

Back to Server.Items

+

HousePlacementEntry

+ (static) HousePlacementEntry[] ClassicHouses( get; )
+ (static) HousePlacementEntry[] ThreeStoryFoundations( get; )
+ (static) HousePlacementEntry[] TwoStoryFoundations( get; )
+ (static) void FillTable( HousePlacementEntry[] entries )
+ (static) HousePlacementEntry Find( BaseHouse house )
+ (ctor) HousePlacementEntry( Type type, int description, int storage, int lockdowns, int newStorage, int newLockdowns, int vendors, int cost, int xOffset, int yOffset, int zOffset, int multiID )
+ int Cost( get; )
+ int Description( get; )
+ int Lockdowns( get; )
+ int MultiID( get; )
+ Point3D Offset( get; )
+ int Storage( get; )
+ Type Type( get; )
+ int Vendors( get; )
+ BaseHouse ConstructHouse( Mobile from )
+ bool OnPlacement( Mobile from, Point3D p )
+ void PlacementWarning_Callback( Mobile from, bool okay, object state )
+ + diff --git a/Docs/types/HousePlacementListGump.html b/Docs/types/HousePlacementListGump.html new file mode 100644 index 0000000..e93d357 --- /dev/null +++ b/Docs/types/HousePlacementListGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HousePlacementListGump + + +

Back to Server.Items

+

HousePlacementListGump : Gump

+ (ctor) HousePlacementListGump( Mobile from, HousePlacementEntry[] entries )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/HousePlacementResult.html b/Docs/types/HousePlacementResult.html new file mode 100644 index 0000000..51a243a --- /dev/null +++ b/Docs/types/HousePlacementResult.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HousePlacementResult + + +

Back to Server.Multis

+

HousePlacementResult (Enum)

+ Valid = 0,
+ BadRegion = 1,
+ BadLand = 2,
+ BadStatic = 3,
+ BadItem = 4,
+ NoSurface = 5,
+ BadRegionHidden = 6,
+ BadRegionTemp = 7,
+ InvalidCastleKeep = 8
+ + diff --git a/Docs/types/HousePlacementTarget.html b/Docs/types/HousePlacementTarget.html new file mode 100644 index 0000000..0254f7d --- /dev/null +++ b/Docs/types/HousePlacementTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HousePlacementTarget + + +

Back to Server.Multis.Deeds

+

HousePlacementTarget : MultiTarget

+ (ctor) HousePlacementTarget( HouseDeed deed )
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/HousePlacementTool.html b/Docs/types/HousePlacementTool.html new file mode 100644 index 0000000..8d7d6d1 --- /dev/null +++ b/Docs/types/HousePlacementTool.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HousePlacementTool + + +

Back to Server.Items

+

HousePlacementTool : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HousePlacementTool()
+ (ctor) HousePlacementTool( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HouseRaffleDeed.html b/Docs/types/HouseRaffleDeed.html new file mode 100644 index 0000000..91cdeab --- /dev/null +++ b/Docs/types/HouseRaffleDeed.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - HouseRaffleDeed + + +

Back to Server.Items

+

HouseRaffleDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) HouseRaffleDeed()
+ (ctor) HouseRaffleDeed( Serial serial )
+ (ctor) HouseRaffleDeed( Point3D loc, Map facet, Mobile m )
+ Mobile AwardedTo( get; set; )
+ string DefaultName( get; )
+ double DefaultWeight( get; )
+ Map PlotFacet( get; set; )
+ Point3D PlotLocation( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ bool ValidLocation()
+ + diff --git a/Docs/types/HouseRaffleManagementGump.html b/Docs/types/HouseRaffleManagementGump.html new file mode 100644 index 0000000..4cd7849 --- /dev/null +++ b/Docs/types/HouseRaffleManagementGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - HouseRaffleManagementGump + + +

Back to Server.Gumps

+

HouseRaffleManagementGump : Gump

+

Nested Types: AccountComparer, AddressComparer, NameComparer, SortMethod

+ (ctor) HouseRaffleManagementGump( HouseRaffleStone stone )
+ (ctor) HouseRaffleManagementGump( HouseRaffleStone stone, SortMethod sort, int page )
+ string Center( string text )
+ string Color( string text, int color )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ string Right( string text )
+ + diff --git a/Docs/types/HouseRaffleRegion.html b/Docs/types/HouseRaffleRegion.html new file mode 100644 index 0000000..c18f897 --- /dev/null +++ b/Docs/types/HouseRaffleRegion.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HouseRaffleRegion + + +

Back to Server.Regions

+

HouseRaffleRegion : BaseRegion, IComparable

+ (ctor) HouseRaffleRegion( HouseRaffleStone stone )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ virtual bool OnTarget( Mobile m, Target t, object o )
+ + diff --git a/Docs/types/HouseRaffleState.html b/Docs/types/HouseRaffleState.html new file mode 100644 index 0000000..c897cf1 --- /dev/null +++ b/Docs/types/HouseRaffleState.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HouseRaffleState + + +

Back to Server.Items

+

HouseRaffleState (Enum)

+ Inactive = 0,
+ Active = 1,
+ Completed = 2
+ + diff --git a/Docs/types/HouseRaffleStone.html b/Docs/types/HouseRaffleStone.html new file mode 100644 index 0000000..61db422 --- /dev/null +++ b/Docs/types/HouseRaffleStone.html @@ -0,0 +1,43 @@ + + + RunUO Documentation - Class Overview - HouseRaffleStone + + +

Back to Server.Items

+

HouseRaffleStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: ActivateEntry, EditEntry, ManagementEntry, RaffleContextMenuEntry

+ (static) void CheckEnd_OnTick()
+ (static) string FormatLocation( Point3D loc, Map map, bool displayMap )
+ (static) void Initialize()
+ (ctor) HouseRaffleStone()
+ (ctor) HouseRaffleStone( Serial serial )
+ bool Active( get; set; )
+ HouseRaffleState CurrentState( get; )
+ HouseRaffleDeed Deed( get; set; )
+ string DefaultName( get; )
+ bool DisplayWeight( get; )
+ TimeSpan Duration( get; set; )
+ List<RaffleEntry> Entries( get; )
+ bool IsExpired( get; )
+ Rectangle2D PlotBounds( get; set; )
+ Map PlotFacet( get; set; )
+ DateTime Started( get; set; )
+ int TicketPrice( get; set; )
+ Mobile Winner( get; set; )
+ void CheckEnd()
+ virtual void Deserialize( GenericReader reader )
+ string FormatLocation()
+ string FormatPrice()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ Point3D GetPlotCenter()
+ virtual void GetProperties( ObjectPropertyList list )
+ bool HasEntered( Mobile from )
+ void InvalidateRegion()
+ bool IsAtIPLimit( Mobile from )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ void Purchase_Callback( Mobile from, bool okay, object state )
+ virtual void Serialize( GenericWriter writer )
+ bool ValidLocation()
+ + diff --git a/Docs/types/HouseRegion.html b/Docs/types/HouseRegion.html new file mode 100644 index 0000000..f2dd634 --- /dev/null +++ b/Docs/types/HouseRegion.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - HouseRegion + + +

Back to Server.Regions

+

HouseRegion : BaseRegion, IComparable

+ (static) Rectangle3D[] GetArea( BaseHouse house )
+ (static) void Initialize()
+ (static) void OnLogin( LoginEventArgs e )
+ (ctor) HouseRegion( BaseHouse house )
+ BaseHouse House( get; )
+ virtual bool CheckAccessibility( Item item, Mobile from )
+ virtual TimeSpan GetLogoutDelay( Mobile m )
+ virtual bool OnDecay( Item item )
+ virtual bool OnDoubleClick( Mobile from, object o )
+ virtual void OnLocationChanged( Mobile m, Point3D oldLocation )
+ virtual bool OnMoveInto( Mobile from, Direction d, Point3D newLocation, Point3D oldLocation )
+ virtual bool OnSingleClick( Mobile from, object o )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual bool SendInaccessibleMessage( Item item, Mobile from )
+ + diff --git a/Docs/types/HouseRemoveGump.html b/Docs/types/HouseRemoveGump.html new file mode 100644 index 0000000..4f2db1a --- /dev/null +++ b/Docs/types/HouseRemoveGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseRemoveGump + + +

Back to Server.Gumps

+

HouseRemoveGump : Gump

+ (ctor) HouseRemoveGump( int number, ArrayList list, BaseHouse house, bool accountOf )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/HouseSign.html b/Docs/types/HouseSign.html new file mode 100644 index 0000000..70d84e0 --- /dev/null +++ b/Docs/types/HouseSign.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - HouseSign + + +

Back to Server.Multis

+

HouseSign : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: ReclaimVendorInventoryEntry, VendorsEntry

+ (ctor) HouseSign( BaseHouse owner )
+ (ctor) HouseSign( Serial serial )
+ bool ForceShowProperties( get; )
+ Mobile OriginalOwner( get; )
+ BaseHouse Owner( get; )
+ bool RestrictDecay( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ void ClaimGump_Callback( Mobile from, bool okay, object state )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ string GetName()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile m )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void ShowSign( Mobile m )
+ + diff --git a/Docs/types/HouseTeleporter.html b/Docs/types/HouseTeleporter.html new file mode 100644 index 0000000..4063412 --- /dev/null +++ b/Docs/types/HouseTeleporter.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - HouseTeleporter + + +

Back to Server.Items

+

HouseTeleporter : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Nested Types: DelayTimer, EffectTimer

+ (ctor) HouseTeleporter( Serial serial )
+ (ctor) HouseTeleporter( int itemID )
+ (ctor) HouseTeleporter( int itemID, Item target )
+ SecureLevel Level( get; set; )
+ Item Target( get; set; )
+ bool CheckAccess( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/HouseTransferGump.html b/Docs/types/HouseTransferGump.html new file mode 100644 index 0000000..585c540 --- /dev/null +++ b/Docs/types/HouseTransferGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - HouseTransferGump + + +

Back to Server.Gumps

+

HouseTransferGump : Gump

+ (ctor) HouseTransferGump( Mobile from, Mobile to, BaseHouse house )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/HtmlRenderer.html b/Docs/types/HtmlRenderer.html new file mode 100644 index 0000000..ac1b98f --- /dev/null +++ b/Docs/types/HtmlRenderer.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - HtmlRenderer + + +

Back to Server.Engines.Reports

+

HtmlRenderer

+ (static) string SafeFileName( string name )
+ (ctor) HtmlRenderer( string outputDirectory )
+ (ctor) HtmlRenderer( string outputDirectory, StaffHistory history )
+ (ctor) HtmlRenderer( string outputDirectory, Snapshot ss, SnapshotHistory history )
+ string FindNameFrom( PersistableObject obj )
+ void Render()
+ void RenderBarGraph( BarGraph graph, HtmlTextWriter html )
+ void RenderDirect( PersistableObject obj, HtmlTextWriter html )
+ void RenderFull()
+ void RenderFull( HtmlTextWriter html )
+ void RenderPieChart( PieChart chart, HtmlTextWriter html )
+ void RenderReport( Report report, HtmlTextWriter html )
+ void RenderSingle( PersistableObject obj )
+ void RenderSingle( PersistableObject obj, HtmlTextWriter html )
+ void Upload()
+ + diff --git a/Docs/types/HueAttribute.html b/Docs/types/HueAttribute.html new file mode 100644 index 0000000..e701415 --- /dev/null +++ b/Docs/types/HueAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - HueAttribute + + +

Back to Server

+

HueAttribute : Attribute, _Attribute

+ (ctor) HueAttribute()
+ + diff --git a/Docs/types/HuePicker.html b/Docs/types/HuePicker.html new file mode 100644 index 0000000..e30824a --- /dev/null +++ b/Docs/types/HuePicker.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - HuePicker + + +

Back to Server.HuePickers

+

HuePicker

+

Derived Types: InternalPicker, InternalPicker, PVHuePicker, PVHuePicker

+ (ctor) HuePicker( int itemID )
+ int ItemID( get; )
+ int Serial( get; )
+ virtual void OnResponse( int hue )
+ void SendTo( NetState state )
+ + diff --git a/Docs/types/HuedEffect.html b/Docs/types/HuedEffect.html new file mode 100644 index 0000000..592a6cd --- /dev/null +++ b/Docs/types/HuedEffect.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HuedEffect + + +

Back to Server.Network

+

HuedEffect : Packet

+

Derived Types: LocationEffect, MovingEffect, TargetEffect

+ (ctor) HuedEffect( EffectType type, Serial from, Serial to, int itemID, IPoint3D fromPoint, IPoint3D toPoint, int speed, int duration, bool fixedDirection, bool explode, int hue, int renderMode )
+ (ctor) HuedEffect( EffectType type, Serial from, Serial to, int itemID, Point3D fromPoint, Point3D toPoint, int speed, int duration, bool fixedDirection, bool explode, int hue, int renderMode )
+ + diff --git a/Docs/types/Human.html b/Docs/types/Human.html new file mode 100644 index 0000000..00816f1 --- /dev/null +++ b/Docs/types/Human.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Human + + +

Back to Server.Misc

+

(RaceDefinitions) - Human : Race

+ (ctor) Human( int raceID, int raceIndex )
+ virtual int ClipHairHue( int hue )
+ virtual int ClipSkinHue( int hue )
+ virtual int RandomFacialHair( bool female )
+ virtual int RandomHair( bool female )
+ virtual int RandomHairHue()
+ virtual int RandomSkinHue()
+ virtual bool ValidateFacialHair( bool female, int itemID )
+ virtual bool ValidateHair( bool female, int itemID )
+ + diff --git a/Docs/types/HungerChangedEventArgs.html b/Docs/types/HungerChangedEventArgs.html new file mode 100644 index 0000000..8217e62 --- /dev/null +++ b/Docs/types/HungerChangedEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - HungerChangedEventArgs + + +

Back to Server

+

HungerChangedEventArgs : EventArgs

+ (ctor) HungerChangedEventArgs( Mobile mobile, int oldValue )
+ Mobile Mobile( get; )
+ int OldValue( get; )
+ + diff --git a/Docs/types/HungerChangedEventHandler.html b/Docs/types/HungerChangedEventHandler.html new file mode 100644 index 0000000..3ce669e --- /dev/null +++ b/Docs/types/HungerChangedEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - HungerChangedEventHandler + + +

Back to Server

+

HungerChangedEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) HungerChangedEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( HungerChangedEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( HungerChangedEventArgs e )
+ + diff --git a/Docs/types/HuntersHeaddress.html b/Docs/types/HuntersHeaddress.html new file mode 100644 index 0000000..28a8005 --- /dev/null +++ b/Docs/types/HuntersHeaddress.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - HuntersHeaddress + + +

Back to Server.Items

+

HuntersHeaddress : DeerMask, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) HuntersHeaddress()
+ (ctor) HuntersHeaddress( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseColdResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IAccount.html b/Docs/types/IAccount.html new file mode 100644 index 0000000..412c11e --- /dev/null +++ b/Docs/types/IAccount.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - IAccount + + +

Back to Server.Accounting

+

IAccount

+

Derived Types: Account

+ AccessLevel AccessLevel( get; set; )
+ int Count( get; )
+ Mobile Item( get; set; )
+ int Length( get; )
+ int Limit( get; )
+ string Username( get; set; )
+ virtual bool CheckPassword( string password )
+ virtual void Delete()
+ virtual void SetPassword( string password )
+ + diff --git a/Docs/types/IAddon.html b/Docs/types/IAddon.html new file mode 100644 index 0000000..de5bfa8 --- /dev/null +++ b/Docs/types/IAddon.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IAddon + + +

Back to Server.Items

+

IAddon

+

Derived Types: AbbatoirAddon, AlchemistTableEastAddon, AlchemistTableSouthAddon, AnkhOfSacrificeAddon, AnvilEastAddon, AnvilSouthAddon, AppleTreeAddon, AppleTrunkAddon, ArcaneBookshelfEastAddon, ArcaneBookshelfSouthAddon, ArcaneCircleAddon, ArcanistStatueEastAddon, ArcanistStatueSouthAddon, ArcheryButteAddon, AwesomeDisturbingPortraitAddon, BallotBoxAddon, Banner, BaseAddon, BaseAddonContainer, BaseFruitTreeAddon, BaseRejuvinationAnkh, BedOfNailsAddon, BloodPentagram, BloodyPentagramAddon, BlueDecorativeRugAddon, BlueFancyRugAddon, BluePlainRugAddon, BoilingCauldronAddon, BoneCouchAddon, BoneTableAddon, BoneThroneAddon, BrocadeGozaMatEastAddon, BrocadeGozaMatSouthAddon, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatSouthAddon, BrokenArmoireAddon, BrokenBedAddon, BrokenBookcaseAddon, BrokenChestOfDrawersAddon, BrokenCoveredChairAddon, BrokenFallenChairAddon, BrokenVanityAddon, BrownBearRugEastAddon, BrownBearRugSouthAddon, Cannon, CannonAddon, ChampionAltar, ChampionPlatform, ChampionSkullPlatform, CharacterStatuePlinth, CherryBlossomTreeAddon, CherryBlossomTrunkAddon, CinnamonFancyRugAddon, ContestMiniHouse, CreepyPortraitAddon, CurtainsAddon, DarkFlowerTapestryEastAddon, DarkFlowerTapestrySouthAddon, DartBoardEastAddon, DartBoardSouthAddon, DecorativeShield, DisturbingPortraitAddon, ElvenBedEastAddon, ElvenBedSouthAddon, ElvenDresserEastAddon, ElvenDresserSouthAddon, ElvenForgeAddon, ElvenLoveseatEastAddon, ElvenLoveseatSouthAddon, ElvenSpinningwheelEastAddon, ElvenSpinningwheelSouthAddon, ElvenStoveEastAddon, ElvenStoveSouthAddon, ElvenWashBasinEastAddon, ElvenWashBasinSouthAddon, FancyElvenTableEastAddon, FancyElvenTableSouthAddon, FireColumnAddon, FlamingHead, FlourMillEastAddon, FlourMillSouthAddon, FountainAddon, FountainOfLife, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, GingerBreadHouseAddon, GoldenDecorativeRugAddon, GozaMatEastAddon, GozaMatSouthAddon, GrayBrickFireplaceEastAddon, GrayBrickFireplaceSouthAddon, Guildstone, GuillotineAddon, HagCauldron, HagStew, HangingAxesAddon, HangingSkeleton, HangingSwordsAddon, HaunterMirrorAddon, HearthOfHomeFire, HolidayTree, HouseLadderAddon, IronMaidenAddon, JackOLantern, LargeBedEastAddon, LargeBedSouthAddon, LargeFishingNetAddon, LargeForgeEastAddon, LargeForgeSouthAddon, LargeStoneTableEastAddon, LargeStoneTableSouthAddon, LightFlowerTapestryEastAddon, LightFlowerTapestrySouthAddon, LoomEastAddon, LoomSouthAddon, MaabusCoffin, MediumStoneTableEastAddon, MediumStoneTableSouthAddon, MediumStretchedHideEastAddon, MediumStretchedHideSouthAddon, MiniHouseAddon, MiningCart, MinotaurStatue, MistletoeAddon, MountedPixieBlueAddon, MountedPixieGreenAddon, MountedPixieLimeAddon, MountedPixieOrangeAddon, MountedPixieWhiteAddon, OrnateElvenTableEastAddon, OrnateElvenTableSouthAddon, ParrotPerchAddon, PeachTreeAddon, PeachTrunkAddon, PentagramAddon, PickpocketDipEastAddon, PickpocketDipSouthAddon, PinkFancyRugAddon, PolarBearRugEastAddon, PolarBearRugSouthAddon, PowerGenerator, PyramidAddon, RedPlainRugAddon, RejuvinationAnkhNorth, RejuvinationAnkhWest, SacrificialAltarAddon, SandstoneFireplaceEastAddon, SandstoneFireplaceSouthAddon, SandstoneFountainAddon, ScarecrowAddon, SerpentPillarAddon, ShrineOfWisdomAddon, SHTeleporter, SkullPileAddon, SmallBedEastAddon, SmallBedSouthAddon, SmallFishingNetAddon, SmallForgeAddon, SmallStretchedHideEastAddon, SmallStretchedHideSouthAddon, SolenAntHole, SpinningwheelEastAddon, SpinningwheelSouthAddon, SquareGozaMatEastAddon, SquareGozaMatSouthAddon, SquirrelStatueEastAddon, SquirrelStatueSouthAddon, StandingBrokenChairAddon, StoneAnkh, StoneFireplaceEastAddon, StoneFireplaceSouthAddon, StoneFountainAddon, StoneOvenEastAddon, StoneOvenSouthAddon, StoneStatueAddon, SuitOfGoldArmorAddon, SuitOfSilverArmorAddon, SummoningAltar, TableWithBlueClothAddon, TableWithOrangeClothAddon, TableWithPurpleClothAddon, TableWithRedClothAddon, TallElvenBedEastAddon, TallElvenBedSouthAddon, Telescope, TrainingDummyEastAddon, TrainingDummySouthAddon, TreeStump, TrophyAddon, UnmadeBedAddon, UnsettlingPortraitAddon, VanityAddon, WallBanner, WallTorchAddon, WarriorStatueEastAddon, WarriorStatueSouthAddon, WaterTroughEastAddon, WaterTroughSouthAddon, WaterVatEast, WaterVatSouth, WoodenCoffinAddon, WreathAddon

+ Item Deed( get; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ + diff --git a/Docs/types/IArcaneEquip.html b/Docs/types/IArcaneEquip.html new file mode 100644 index 0000000..600fe90 --- /dev/null +++ b/Docs/types/IArcaneEquip.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IArcaneEquip + + +

Back to Server.Items

+

IArcaneEquip

+

Derived Types: AcidProofRobe, ANecromancerShroud, Cloak, DeathRobe, GlovesOfThePugilist, LeafGloves, LeatherGloves, Robe, SamaritanRobe, StitchersMittens, ThighBoots

+ int CurArcaneCharges( get; set; )
+ bool IsArcane( get; )
+ int MaxArcaneCharges( get; set; )
+ + diff --git a/Docs/types/IAxe.html b/Docs/types/IAxe.html new file mode 100644 index 0000000..6c238d5 --- /dev/null +++ b/Docs/types/IAxe.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IAxe + + +

Back to Server.Items

+

IAxe

+

Derived Types: AshLog, BloodwoodLog, FrostwoodLog, HeartwoodLog, Log, OakLog, YewLog

+ virtual bool Axe( Mobile from, BaseAxe axe )
+ + diff --git a/Docs/types/IBuyItemInfo.html b/Docs/types/IBuyItemInfo.html new file mode 100644 index 0000000..fc5806e --- /dev/null +++ b/Docs/types/IBuyItemInfo.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - IBuyItemInfo + + +

Back to Server

+

IBuyItemInfo

+

Derived Types: AnimalBuyInfo, BeverageBuyInfo, GenericBuyInfo, PresetMapBuyInfo

+ int Amount( get; set; )
+ int ControlSlots( get; )
+ int Hue( get; )
+ int ItemID( get; )
+ int MaxAmount( get; )
+ string Name( get; )
+ int Price( get; )
+ int PriceScalar( get; set; )
+ virtual IEntity GetEntity()
+ virtual void OnRestock()
+ virtual bool Restock( Item item, int amount )
+ + diff --git a/Docs/types/ICarvable.html b/Docs/types/ICarvable.html new file mode 100644 index 0000000..a1fb4a1 --- /dev/null +++ b/Docs/types/ICarvable.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ICarvable + + +

Back to Server

+

ICarvable

+

Derived Types: BigFish, Corpse, Fish, HagApprenticeCorpse, MilitiaFighterCorpse, PlagueBeastBackupOrgan, PlagueBeastBlood, PlagueBeastComponent, PlagueBeastHeart, PlagueBeastInnard, PlagueBeastLord, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan, PlagueBeastVein, SchmendrickApprenticeCorpse, Sheep, UnholyBone

+ virtual void Carve( Mobile from, Item item )
+ + diff --git a/Docs/types/IChopable.html b/Docs/types/IChopable.html new file mode 100644 index 0000000..ec41121 --- /dev/null +++ b/Docs/types/IChopable.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IChopable + + +

Back to Server

+

IChopable

+

Derived Types: AbbatoirAddon, AddonComponent, AddonContainerComponent, AlchemistTableEastAddon, AlchemistTableSouthAddon, AnkhOfSacrificeAddon, AnkhOfSacrificeComponent, AnvilComponent, AnvilEastAddon, AnvilSouthAddon, AppleTreeAddon, AppleTrunkAddon, ArcaneBookshelfEastAddon, ArcaneBookshelfSouthAddon, ArcaneCircleAddon, ArcanistStatueEastAddon, ArcanistStatueSouthAddon, ArcheryButte, ArcheryButteAddon, AwesomeDisturbingPortraitAddon, AwesomeDisturbingPortraitComponent, BallotBox, BallotBoxAddon, BaseAddon, BaseAddonContainer, BaseFruitTreeAddon, BaseRejuvinationAnkh, BedOfNailsAddon, BedOfNailsComponent, BloodPentagram, BloodyPentagramAddon, BloodyPentagramComponent, BlueDecorativeRugAddon, BlueFancyRugAddon, BluePlainRugAddon, BoilingCauldronAddon, BoneCouchAddon, BoneCouchComponent, BoneTableAddon, BoneThroneAddon, BoneThroneComponent, BrocadeGozaMatEastAddon, BrocadeGozaMatSouthAddon, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatSouthAddon, BrokenArmoireAddon, BrokenArmoireComponent, BrokenBedAddon, BrokenBookcaseAddon, BrokenBookcaseComponent, BrokenChestOfDrawersAddon, BrokenChestOfDrawersComponent, BrokenCoveredChairAddon, BrokenCoveredChairComponent, BrokenFallenChairAddon, BrokenFallenChairComponent, BrokenVanityAddon, BrownBearRugEastAddon, BrownBearRugSouthAddon, Cannon, CannonAddon, CannonAddonComponent, CannonComponent, ChampionAltar, ChampionPlatform, ChampionSkullBrazier, ChampionSkullPlatform, CherryBlossomTreeAddon, CherryBlossomTrunkAddon, CinnamonFancyRugAddon, ContestMiniHouse, ControlPanel, CreepyPortraitAddon, CreepyPortraitComponent, CurtainsAddon, CurtainsComponent, DarkFlowerTapestryEastAddon, DarkFlowerTapestrySouthAddon, DartBoard, DartBoardEastAddon, DartBoardSouthAddon, DisturbingPortraitAddon, DisturbingPortraitComponent, ElvenBedEastAddon, ElvenBedSouthAddon, ElvenDresserEastAddon, ElvenDresserSouthAddon, ElvenForgeAddon, ElvenLoveseatEastAddon, ElvenLoveseatSouthAddon, ElvenSpinningwheelEastAddon, ElvenSpinningwheelSouthAddon, ElvenStoveEastAddon, ElvenStoveSouthAddon, ElvenWashBasinEastAddon, ElvenWashBasinSouthAddon, FancyElvenTableEastAddon, FancyElvenTableSouthAddon, FireColumnAddon, FlourMillEastAddon, FlourMillSouthAddon, ForgeComponent, FountainAddon, FountainOfLife, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, GingerBreadHouseAddon, GoldenDecorativeRugAddon, GozaMatEastAddon, GozaMatSouthAddon, GrayBrickFireplaceEastAddon, GrayBrickFireplaceSouthAddon, Guildstone, GuillotineAddon, GuillotineComponent, HagCauldron, HagStew, HangingAxesAddon, HangingSwordsAddon, HaunterMirrorAddon, HaunterMirrorComponent, HearthOfHomeFire, HouseLadderAddon, IronMaidenAddon, JackOLantern, LargeBedEastAddon, LargeBedSouthAddon, LargeFishingNetAddon, LargeFishingNetComponent, LargeForgeEastAddon, LargeForgeSouthAddon, LargeStoneTableEastAddon, LargeStoneTableSouthAddon, LightFlowerTapestryEastAddon, LightFlowerTapestrySouthAddon, LocalizedAddonComponent, LocalizedContainerComponent, LoomEastAddon, LoomSouthAddon, MaabusCoffin, MaabusCoffinComponent, MediumStoneTableEastAddon, MediumStoneTableSouthAddon, MediumStretchedHideEastAddon, MediumStretchedHideSouthAddon, MiniHouseAddon, MiningCart, MinotaurStatue, MountedPixieBlueAddon, MountedPixieBlueComponent, MountedPixieGreenAddon, MountedPixieGreenComponent, MountedPixieLimeAddon, MountedPixieLimeComponent, MountedPixieOrangeAddon, MountedPixieOrangeComponent, MountedPixieWhiteAddon, MountedPixieWhiteComponent, OrnateElvenTableEastAddon, OrnateElvenTableSouthAddon, ParrotPerchAddon, PeachTreeAddon, PeachTrunkAddon, PentagramAddon, PickpocketDip, PickpocketDipEastAddon, PickpocketDipSouthAddon, PinkFancyRugAddon, PolarBearRugEastAddon, PolarBearRugSouthAddon, PowerGenerator, PyramidAddon, RedPlainRugAddon, RejuvinationAddonComponent, RejuvinationAnkhNorth, RejuvinationAnkhWest, SacrificialAltarAddon, SandstoneFireplaceEastAddon, SandstoneFireplaceSouthAddon, SandstoneFountainAddon, ScarecrowAddon, ScarecrowComponent, SerpentPillarAddon, ShrineOfWisdomAddon, ShrineOfWisdomComponent, SHTeleComponent, SHTeleporter, SkullPileAddon, SmallBedEastAddon, SmallBedSouthAddon, SmallFishingNetAddon, SmallFishingNetComponent, SmallForgeAddon, SmallStretchedHideEastAddon, SmallStretchedHideSouthAddon, SolenAntHole, SolenAntHoleComponent, SpinningwheelEastAddon, SpinningwheelSouthAddon, SquareGozaMatEastAddon, SquareGozaMatSouthAddon, SquirrelStatueEastAddon, SquirrelStatueSouthAddon, StandingBrokenChairAddon, StandingBrokenChairComponent, StoneAnkh, StoneAnkhComponent, StoneFireplaceEastAddon, StoneFireplaceSouthAddon, StoneFountainAddon, StoneOvenEastAddon, StoneOvenSouthAddon, StoneStatueAddon, StrongBox, SuitOfGoldArmorAddon, SuitOfGoldArmorComponent, SuitOfSilverArmorAddon, SuitOfSilverArmorComponent, SummoningAltar, TableWithBlueClothAddon, TableWithOrangeClothAddon, TableWithPurpleClothAddon, TableWithRedClothAddon, TallElvenBedEastAddon, TallElvenBedSouthAddon, Telescope, TrainingDummy, TrainingDummyEastAddon, TrainingDummySouthAddon, TrashBarrel, TreeStump, UnmadeBedAddon, UnsettlingPortraitAddon, UnsettlingPortraitComponent, VanityAddon, WallBanner, WallBannerComponent, WallTorchAddon, WallTorchComponent, WarriorStatueEastAddon, WarriorStatueSouthAddon, WaterTroughEastAddon, WaterTroughSouthAddon, WaterVatEast, WaterVatSouth, WoodenCoffinAddon, WoodenCoffinComponent

+ virtual void OnChop( Mobile from )
+ + diff --git a/Docs/types/ICommodity.html b/Docs/types/ICommodity.html new file mode 100644 index 0000000..486a6f6 --- /dev/null +++ b/Docs/types/ICommodity.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ICommodity + + +

Back to Server.Items

+

ICommodity

+

Derived Types: AgapiteIngot, AgapiteOre, AgilityPotion, AgilityScroll, AnimateDeadScroll, ArcaneCircleScroll, ArcaneEmpowermentScroll, ArchCureScroll, ArchProtectionScroll, Arrow, AshBoard, AshLog, AttuneWeaponScroll, BarbedHides, BarbedLeather, BaseAgilityPotion, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseCurePotion, BaseExplosionPotion, BaseHealPotion, BaseHides, BaseIngot, BaseLeather, BaseOre, BasePoisonPotion, BasePotion, BaseRefreshPotion, BaseScales, BaseStrengthPotion, BatWing, BlackPearl, BlackScales, BladeSpiritsScroll, BlankScroll, BlessScroll, Bloodmoss, BloodOathScroll, BloodwoodBoard, BloodwoodLog, BlueScales, Board, Bolt, BoltOfCloth, Bone, Bottle, BronzeIngot, BronzeOre, ChainLightningScroll, Cloth, ClumsyScroll, ConflagrationPotion, ConfusionBlastPotion, CopperIngot, CopperOre, CorpseSkinScroll, CreateFoodScroll, CunningScroll, CurePotion, CureScroll, CurseScroll, CurseWeaponScroll, DaemonBlood, DeadlyPoisonPotion, DeadWood, DispelFieldScroll, DispelScroll, DryadAllureScroll, DullCopperIngot, DullCopperOre, EarthquakeScroll, EnergyBoltScroll, EnergyFieldScroll, EnergyVortexScroll, EssenceOfWindScroll, EtherealVoyageScroll, EvilOmenScroll, ExorcismScroll, ExplosionPotion, ExplosionScroll, Feather, FeeblemindScroll, FireballScroll, FireFieldScroll, FlamestrikeScroll, FrostwoodBoard, FrostwoodLog, Garlic, GateTravelScroll, GiftOfLifeScroll, GiftOfRenewalScroll, Ginseng, GoldIngot, GoldOre, GraveDust, GreaterAgilityPotion, GreaterConflagrationPotion, GreaterConfusionBlastPotion, GreaterCurePotion, GreaterExplosionPotion, GreaterHealPotion, GreaterHealScroll, GreaterPoisonPotion, GreaterStrengthPotion, GreenScales, HarmScroll, HealPotion, HealScroll, HeartwoodBoard, HeartwoodLog, Hides, HornedHides, HornedLeather, HorrificBeastScroll, ImmolatingWeaponScroll, IncognitoScroll, InvisibilityScroll, IronIngot, IronOre, Leather, LesserCurePotion, LesserExplosionPotion, LesserHealPotion, LesserPoisonPotion, LichFormScroll, LightningScroll, Log, MagicArrowScroll, MagicLockScroll, MagicReflectScroll, MagicTrapScroll, MagicUnTrapScroll, ManaDrainScroll, ManaVampireScroll, MandrakeRoot, MarkScroll, MassCurseScroll, MassDispelScroll, MeteorSwarmScroll, MindBlastScroll, MindRotScroll, NatureFuryScroll, Nightshade, NightSightPotion, NightSightScroll, NoxCrystal, OakBoard, OakLog, PainSpikeScroll, ParalyzeFieldScroll, ParalyzeScroll, PigIron, PoisonFieldScroll, PoisonPotion, PoisonScroll, PoisonStrikeScroll, PolymorphScroll, ProtectionScroll, ReactiveArmorScroll, ReaperFormScroll, RecallScroll, RedScales, RefreshPotion, ResurrectionScroll, RevealScroll, Sand, ShadowIronIngot, ShadowIronOre, Shaft, SpellScroll, SpidersSilk, SpinedHides, SpinedLeather, StrangleScroll, StrengthPotion, StrengthScroll, SulfurousAsh, SummonAirElementalScroll, SummonCreatureScroll, SummonDaemonScroll, SummonEarthElementalScroll, SummonFamiliarScroll, SummonFeyScroll, SummonFiendScroll, SummonFireElementalScroll, SummonWaterElementalScroll, TelekinisisScroll, TeleportScroll, ThunderstormScroll, TotalRefreshPotion, UncutCloth, UnlockScroll, ValoriteIngot, ValoriteOre, VampiricEmbraceScroll, VengefulSpiritScroll, VeriteIngot, VeriteOre, WallOfStoneScroll, WeakenScroll, WhiteScales, WildfireScroll, WitherScroll, WordOfDeathScroll, WraithFormScroll, YellowScales, YewBoard, YewLog, ZoogiFungus

+ int DescriptionNumber( get; )
+ bool IsDeedable( get; )
+ + diff --git a/Docs/types/ICompressor.html b/Docs/types/ICompressor.html new file mode 100644 index 0000000..f68076c --- /dev/null +++ b/Docs/types/ICompressor.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ICompressor + + +

Back to Server.Network

+

ICompressor

+

Derived Types: Compressor32, Compressor64, CompressorUnix32, CompressorUnix64

+ string Version( get; )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ virtual ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality )
+ virtual ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength )
+ + diff --git a/Docs/types/ICondition.html b/Docs/types/ICondition.html new file mode 100644 index 0000000..758ec33 --- /dev/null +++ b/Docs/types/ICondition.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ICondition + + +

Back to Server.Commands.Generic

+

ICondition

+

Derived Types: ComparisonCondition, PropertyCondition, StringCondition, TypeCondition

+ virtual void Compile( MethodEmitter emitter )
+ virtual void Construct( TypeBuilder typeBuilder, ILGenerator il, int index )
+ + diff --git a/Docs/types/IConditional.html b/Docs/types/IConditional.html new file mode 100644 index 0000000..b8566c3 --- /dev/null +++ b/Docs/types/IConditional.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - IConditional + + +

Back to Server.Commands.Generic

+

IConditional

+ virtual bool Verify( object obj )
+ + diff --git a/Docs/types/ICraftable.html b/Docs/types/ICraftable.html new file mode 100644 index 0000000..3330b64 --- /dev/null +++ b/Docs/types/ICraftable.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ICraftable + + +

Back to Server.Engines.Craft

+

ICraftable

+

Derived Types: AcidProofRobe, Aegis, AegisOfGrace, AgilityPotion, AlchemistsBauble, AncientFarmersKasa, AncientSamuraiDo, AncientSmithyHammer, ANecromancerShroud, AnthropomorphistGlasses, ArcaneShield, ArcticDeathDealer, ArmorOfFortune, ArmsOfTacticalExcellence, ArtsGlasses, AssassinSpike, Axe, AxeOfTheHeavens, BambooFlute, Bandana, Bardiche, Bascinet, BaseAddonContainerDeed, BaseAgilityPotion, BaseArmor, BaseAxe, BaseBashing, BaseBracelet, BaseCloak, BaseClothing, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseCurePotion, BaseEarrings, BaseExplosionPotion, BaseFactionTrapDeed, BaseGlovesOfMining, BaseHarvestTool, BaseHat, BaseHealPotion, BaseInstrument, BaseJewel, BaseKnife, BaseMeleeWeapon, BaseMiddleTorso, BaseNecklace, BaseOuterLegs, BaseOuterTorso, BasePants, BasePoisonPotion, BasePoleArm, BasePotion, BaseQuiver, BaseRanged, BaseRefreshPotion, BaseRing, BaseRunicTool, BaseShield, BaseShirt, BaseShoes, BaseSpear, BaseStaff, BaseStrengthPotion, BaseSword, BaseTool, BaseTreasureChest, BaseWaist, BaseWand, BaseWeapon, BattleAxe, BearMask, BlackLotusHood, BlackStaff, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BlankMap, BlazeOfDeath, BlightGrippedLongbow, Blowpipe, BodySash, BoilingCauldronDeed, Bokuto, BoneArms, BoneChest, BoneCrusher, BoneGloves, BoneHarvester, BoneHelm, BoneLegs, Bonesmasher, Bonnet, BookOfBushido, BookOfChivalry, BookOfNinjitsu, Boomstick, Boots, Bow, BowOfTheJukaKing, BraceletOfBinding, BraceletOfHealth, BrambleCoat, BraveKnightOfTheBritannia, BreathOfTheDead, Broadsword, BronzeShield, Buckler, BurglarsBandana, ButcherKnife, Calm, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CavortingClub, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChaosShield, ChestOfHeirlooms, ChylothStaff, Circlet, CityMap, Cleaver, Cloak, CloseHelm, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyWand, ColdBlood, ColdForgedBlade, CompositeBow, ConflagrationPotion, ConfusionBlastPotion, CrescentBlade, CrimsonCincture, Crossbow, CrownOfTalKeesh, CurePotion, Cutlass, DaemonArms, DaemonBloodChest, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DarkenedSky, DeadlyPoisonPotion, DeathRobe, DecorativePlateKabuto, DeerMask, DemonForks, DetectiveBoots, DiamondMace, DivineCountenance, DjinnisRing, DoubleAxe, DoubleBladedStaff, Doublet, DovetailSaw, DragonArms, DragonBardingDeed, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, DrawKnife, DreadPirateHat, Drums, DupresShield, EarringsOfProtection, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenGlasses, ElvenMachete, ElvenPants, ElvenQuiver, ElvenShirt, ElvenSpellblade, EmbroideredOakLeafCloak, EminosKatanaChest, EnchantedTitanLegBone, EssenceOfBattle, ExecutionersAxe, Exiler, ExplosionPotion, FactionExplosionTrapDeed, FactionGasTrapDeed, FactionSawTrapDeed, FactionSpikeTrapDeed, FancyDress, FancyShirt, FangOfRactus, FeatheredHat, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FeyLeggings, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, FireballWand, FireworksWand, Fists, FleshRipper, FletcherTools, FloppyHat, FlourSifter, FlowerGarland, FluteOfRenewal, FoldedSteelGlasses, FormalShirt, FountainOfLifeDeed, Froe, Frostbringer, FukiyaDarts, FullApron, FurBoots, FurCape, FurSarong, GargoylesPickaxe, GauntletsOfNobility, GemmedCirclet, GildedDress, GildedWoodenChest, GlacialStaff, GladiatorsCollar, GlovesOfThePugilist, GlovesOfTheSun, GnarledStaff, GoldBeadNecklace, GoldBracelet, GoldEarrings, GoldNecklace, GoldRing, GreaterAgilityPotion, GreaterConflagrationPotion, GreaterConfusionBlastPotion, GreaterCurePotion, GreaterExplosionPotion, GreaterHealPotion, GreaterHealWand, GreaterPoisonPotion, GreaterStrengthPotion, GuantletsOfAnger, GwennosHarp, Hakama, HakamaShita, Halberd, HalfApron, Hammer, HammerPick, HanzosBow, HaochisTreasureChest, HarmWand, Harp, Hatchet, HatOfTheMagi, HealPotion, HealWand, HeartOfTheLion, HeaterShield, HeavyCrossbow, HeavyPlateJingasa, Helmet, HelmOfInsight, HelmOfSwiftness, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, HolyKnightsBreastplate, HolySword, HoodedShroudOfShadows, HornedTribalMask, HuntersHeaddress, IDWand, IndecipherableMap, InquisitorsResolution, Inshave, IolosLute, IronwoodCrown, JackalsCollar, JesterHat, JesterHatofChuckles, JesterSuit, JinBaori, JointingPlane, JukaBow, Kama, Kamishimo, Kasa, KasaOfTheRajin, Katana, Kilt, KronusScrollBox, Kryss, Lajatang, Lance, LapHarp, LargeBattleAxe, LargeCrate, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, LesserCurePotion, LesserExplosionPotion, LesserHealPotion, LesserPoisonPotion, LeurociansMempoOfFortune, LibraryBookcase, LieutenantOfTheBritannianRoyalGuard, LightningWand, LightOfWayGlasses, LightPlateJingasa, LocalMap, LockableBarrel, LockableContainer, LongPants, Longsword, LuckyNecklace, LuminousRuneBlade, LunaLance, Lute, LyricalGlasses, Mace, MaceShieldGlasses, MagicalShortbow, MagicArrowWand, MagicWand, MagicWizardsHat, MaleElvenRobe, MaleKimono, MalletAndChisel, ManaDrainWand, MapItem, MapmakersPen, MaritimeGlasses, MarkContainer, Maul, MediumCrate, MelisandesCorrodedHatchet, MetalBox, MetalChest, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalKiteShield, MetalShield, MetalTreasureChest, MidnightBracers, MonkRobe, MortarPestle, MouldingPlane, Nails, Necklace, NecromancerSpellbook, NecromanticGlasses, NightSightPotion, NightsKiss, NinjaTabi, NoDachi, NorseHelm, NoxRangersHeavyCrossbow, Nunchaku, Obi, OblivionsNeedle, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishVisage, OrderShield, OrnamentOfTheMagician, OrnateAxe, OrnateCrownOfTheHarrower, OrnateWoodenChest, OssianGrimoire, OverseerSunderedBlade, Pacify, PadsOfTheCuSidhe, ParagonChest, PeasantsBokuto, PendantOfTheMagi, PhantomStaff, Pickaxe, Pike, PilferedDancerFans, Pitchfork, PixieSwatter, PlainDress, PlainWoodenChest, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PoisonedGlasses, PoisonPotion, PolarBearMask, PresetMap, ProspectorsTool, PuzzleChest, QuarterStaff, Quell, QuiverOfBlight, QuiverOfElements, QuiverOfFire, QuiverOfIce, QuiverOfInfinity, QuiverOfLightning, QuiverOfRage, RadiantScimitar, RaedsGlory, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerLegs, RavenHelm, RefreshPotion, RepeatingCrossbow, ResilientBracer, RewardCloak, RewardDress, RewardRobe, RighteousAnger, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, RingOfTheElements, RingOfTheVile, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RollingPin, RoyalCirclet, RoyalGuardSurvivalKnife, RuneBeetleCarapace, RuneBlade, Runebook, RuneCarvingKnife, RunicDovetailSaw, RunicHammer, RunicSewingKit, SacrificialAltarDeed, Sai, SamaritanRobe, SamuraiHelm, SamuraiTabi, Sandals, SavageMask, Saw, Scepter, Scimitar, Scorp, ScribesPen, Scythe, SeaChart, SerpentsFang, SewingKit, ShadowDancerLeggings, ShaminoCrossbow, ShardThrasher, ShepherdsCrook, ShieldOfInvulnerability, Shirt, Shoes, ShortPants, ShortSpear, Shovel, ShroudOfDeciet, Shuriken, SilvanisFeywoodBow, SilverBeadNecklace, SilverBracelet, SilverEarrings, SilverNecklace, SilverRing, Skillet, SkinningKnife, Skirt, SkullCap, SledgeHammer, SmallCrate, SmallPlateJingasa, SmithHammer, SmoothingPlane, SongWovenMantle, SoulSeeker, Spear, Spellbook, SpellweavingBook, SpellWovenBritches, SpiritOfTheTotem, StaffOfPower, StaffOfTheMagi, StandardPlateKabuto, StitchersMittens, Stormgrip, StrawHat, StrengthPotion, StrongBoxPuzzle, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLegs, StuddedMempo, StuddedSuneate, SturdyPickaxe, SturdyShovel, Subdue, Surcoat, SwordOfTheStampede, SwordsOfProsperity, TallStrawHat, TalonBite, Tambourine, TambourineTassel, TattsukeHakama, Tekagi, Tessen, Tetsubo, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThighBoots, ThinLongsword, TinkersTools, TinkerTools, TitansHammer, TomeOfEnlightenment, TomeOfLostKnowledge, Tongs, TotalRefreshPotion, TradeGlasses, TreasureMap, TreasureMapChest, TreasureTrinketGlasses, TribalMask, TribalSpear, TricorneHat, Tunic, TunicOfFire, TwoHandedAxe, VanityDeed, VikingSword, VioletCourage, VoiceOfTheFallenKing, VultureHelm, Wakizashi, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WeaknessWand, WeatherMap, WideBrimHat, WildfireBow, WildStaff, WindsEdge, Windsong, WingedHelm, WizardsGlasses, WizardsHat, WoodenBox, WoodenChest, WoodenFootLocker, WoodenKiteShield, WoodenShield, WoodenTreasureChest, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WorldMap, WrathOfTheDryad, Yumi, ZyronicClaw

+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ + diff --git a/Docs/types/IDWand.html b/Docs/types/IDWand.html new file mode 100644 index 0000000..fbe3f4e --- /dev/null +++ b/Docs/types/IDWand.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IDWand + + +

Back to Server.Items

+

IDWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) IDWand()
+ (ctor) IDWand( Serial serial )
+ TimeSpan GetUseDelay( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnWandTarget( Mobile from, object o )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IDevourer.html b/Docs/types/IDevourer.html new file mode 100644 index 0000000..1a14569 --- /dev/null +++ b/Docs/types/IDevourer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IDevourer + + +

Back to Server.Items

+

IDevourer

+

Derived Types: PlagueBeast

+ virtual bool Devour( Corpse corpse )
+ + diff --git a/Docs/types/IDurability.html b/Docs/types/IDurability.html new file mode 100644 index 0000000..4bf165c --- /dev/null +++ b/Docs/types/IDurability.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - IDurability + + +

Back to Server.Items

+

IDurability

+

Derived Types: AcidProofRobe, Aegis, AegisOfGrace, AncientFarmersKasa, AncientSamuraiDo, ANecromancerShroud, AnthropomorphistGlasses, ArcaneShield, ArcticDeathDealer, ArmorOfFortune, ArmsOfTacticalExcellence, ArtsGlasses, AssassinSpike, Axe, AxeOfTheHeavens, Bandana, Bardiche, Bascinet, BaseArmor, BaseAxe, BaseBashing, BaseCloak, BaseClothing, BaseGlovesOfMining, BaseHat, BaseKnife, BaseMeleeWeapon, BaseMiddleTorso, BaseOuterLegs, BaseOuterTorso, BasePants, BasePoleArm, BaseRanged, BaseShield, BaseShirt, BaseShoes, BaseSpear, BaseStaff, BaseSword, BaseWaist, BaseWand, BaseWeapon, BattleAxe, BearMask, BlackLotusHood, BlackStaff, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BlazeOfDeath, BlightGrippedLongbow, BodySash, Bokuto, BoneArms, BoneChest, BoneCrusher, BoneGloves, BoneHarvester, BoneHelm, BoneLegs, Bonesmasher, Bonnet, Boomstick, Boots, Bow, BowOfTheJukaKing, BrambleCoat, BraveKnightOfTheBritannia, BreathOfTheDead, Broadsword, BronzeShield, Buckler, BurglarsBandana, ButcherKnife, Calm, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CavortingClub, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChaosShield, ChylothStaff, Circlet, Cleaver, Cloak, CloseHelm, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyWand, ColdBlood, ColdForgedBlade, CompositeBow, CrescentBlade, CrimsonCincture, Crossbow, CrownOfTalKeesh, Cutlass, DaemonArms, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DarkenedSky, DeathRobe, DecorativePlateKabuto, DeerMask, DemonForks, DetectiveBoots, DiamondMace, DivineCountenance, DoubleAxe, DoubleBladedStaff, Doublet, DragonArms, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, DreadPirateHat, DupresShield, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenGlasses, ElvenMachete, ElvenPants, ElvenShirt, ElvenSpellblade, EmbroideredOakLeafCloak, EnchantedTitanLegBone, ExecutionersAxe, Exiler, FancyDress, FancyShirt, FangOfRactus, FeatheredHat, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FeyLeggings, FireballWand, FireworksWand, Fists, FleshRipper, FloppyHat, FlowerGarland, FoldedSteelGlasses, FormalShirt, Frostbringer, FullApron, FurBoots, FurCape, FurSarong, GargoylesPickaxe, GauntletsOfNobility, GemmedCirclet, GildedDress, GlacialStaff, GladiatorsCollar, GlovesOfThePugilist, GlovesOfTheSun, GnarledStaff, GreaterHealWand, GuantletsOfAnger, Hakama, HakamaShita, Halberd, HalfApron, HammerPick, HanzosBow, HarmWand, Hatchet, HatOfTheMagi, HealWand, HeartOfTheLion, HeaterShield, HeavyCrossbow, HeavyPlateJingasa, Helmet, HelmOfInsight, HelmOfSwiftness, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, HolyKnightsBreastplate, HolySword, HoodedShroudOfShadows, HornedTribalMask, HuntersHeaddress, IDWand, InquisitorsResolution, IronwoodCrown, IWearableDurability, JackalsCollar, JesterHat, JesterHatofChuckles, JesterSuit, JinBaori, JukaBow, Kama, Kamishimo, Kasa, KasaOfTheRajin, Katana, Kilt, Kryss, Lajatang, Lance, LargeBattleAxe, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, LeurociansMempoOfFortune, LieutenantOfTheBritannianRoyalGuard, LightningWand, LightOfWayGlasses, LightPlateJingasa, LongPants, Longsword, LuminousRuneBlade, LunaLance, LyricalGlasses, Mace, MaceShieldGlasses, MagicalShortbow, MagicArrowWand, MagicWand, MagicWizardsHat, MaleElvenRobe, MaleKimono, ManaDrainWand, MaritimeGlasses, Maul, MelisandesCorrodedHatchet, MetalKiteShield, MetalShield, MidnightBracers, MonkRobe, NecromanticGlasses, NightsKiss, NinjaTabi, NoDachi, NorseHelm, NoxRangersHeavyCrossbow, Nunchaku, Obi, OblivionsNeedle, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishVisage, OrderShield, OrnateAxe, OrnateCrownOfTheHarrower, OverseerSunderedBlade, Pacify, PadsOfTheCuSidhe, PeasantsBokuto, PhantomStaff, Pickaxe, Pike, PilferedDancerFans, Pitchfork, PixieSwatter, PlainDress, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PoisonedGlasses, PolarBearMask, ProspectorsTool, QuarterStaff, Quell, RadiantScimitar, RaedsGlory, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerLegs, RavenHelm, RepeatingCrossbow, RewardCloak, RewardDress, RewardRobe, RighteousAnger, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RoyalCirclet, RoyalGuardSurvivalKnife, RuneBeetleCarapace, RuneBlade, RuneCarvingKnife, Sai, SamaritanRobe, SamuraiHelm, SamuraiTabi, Sandals, SavageMask, Scepter, Scimitar, Scythe, SerpentsFang, ShadowDancerLeggings, ShaminoCrossbow, ShardThrasher, ShepherdsCrook, ShieldOfInvulnerability, Shirt, Shoes, ShortPants, ShortSpear, ShroudOfDeciet, SilvanisFeywoodBow, SkinningKnife, Skirt, SkullCap, SmallPlateJingasa, SongWovenMantle, SoulSeeker, Spear, SpellWovenBritches, SpiritOfTheTotem, StaffOfPower, StaffOfTheMagi, StandardPlateKabuto, StitchersMittens, Stormgrip, StrawHat, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLegs, StuddedMempo, StuddedSuneate, SturdyPickaxe, Subdue, Surcoat, SwordOfTheStampede, SwordsOfProsperity, TallStrawHat, TalonBite, TattsukeHakama, Tekagi, Tessen, Tetsubo, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThighBoots, ThinLongsword, TitansHammer, TradeGlasses, TreasureTrinketGlasses, TribalMask, TribalSpear, TricorneHat, Tunic, TunicOfFire, TwoHandedAxe, VikingSword, VioletCourage, VoiceOfTheFallenKing, VultureHelm, Wakizashi, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WeaknessWand, WideBrimHat, WildfireBow, WildStaff, WindsEdge, Windsong, WingedHelm, WizardsGlasses, WizardsHat, WoodenKiteShield, WoodenShield, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WrathOfTheDryad, Yumi, ZyronicClaw

+ bool CanFortify( get; )
+ int HitPoints( get; set; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int MaxHitPoints( get; set; )
+ virtual void ScaleDurability()
+ virtual void UnscaleDurability()
+ + diff --git a/Docs/types/IDyable.html b/Docs/types/IDyable.html new file mode 100644 index 0000000..a2fc2de --- /dev/null +++ b/Docs/types/IDyable.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IDyable + + +

Back to Server.Items

+

IDyable

+

Derived Types: AcidProofRobe, AlchemyBag, AncientFarmersKasa, ANecromancerShroud, Backpack, Bag, BagOfAllReagents, BagOfingots, BagOfNecroReagents, BagOfReagents, Bandage, Bandana, Banner, BaseBagBall, BaseCloak, BaseClothing, BaseClothMaterial, BaseHat, BaseMiddleTorso, BaseOuterLegs, BaseOuterTorso, BasePants, BaseShirt, BaseShoes, BaseWaist, BearMask, BlackLotusHood, BodySash, BoltOfCloth, Bonnet, Boots, BurglarsBandana, Cap, CaptainJohnsHat, Cloak, Cloth, ClothNinjaHood, ClothNinjaJacket, Cotton, CreatureBackpack, CrimsonCincture, CrownOfTalKeesh, CurtainsComponent, DarkYarn, DeathRobe, DeerMask, DetectiveBoots, DivineCountenance, Doublet, DreadPirateHat, ElvenBoots, ElvenDarkShirt, ElvenPants, ElvenShirt, EmbroideredOakLeafCloak, EnhancedBandage, FancyDress, FancyShirt, FeatheredHat, FemaleElvenRobe, FemaleKimono, FloppyHat, FlowerGarland, FormalShirt, FullApron, FurBoots, FurCape, FurSarong, GildedDress, Hakama, HakamaShita, HalfApron, HatOfTheMagi, HoodedShroudOfShadows, HornedTribalMask, HuntersHeaddress, JesterHat, JesterHatofChuckles, JesterSuit, JinBaori, Kamishimo, Kasa, KasaOfTheRajin, Kilt, LargeBagBall, LeatherNinjaBelt, LieutenantOfTheBritannianRoyalGuard, LightYarn, LightYarnUnraveled, LongPants, MagicWizardsHat, MaleElvenRobe, MaleKimono, MetalKiteShield, MistletoeAddon, MonkRobe, NinjaTabi, Obi, OilCloth, OrcishKinMask, PadsOfTheCuSidhe, PlainDress, PolarBearMask, RewardCloak, RewardDress, RewardRobe, Robe, RobeOfTheEclipse, RobeOfTheEquinox, SalvageBag, SamaritanRobe, SamuraiTabi, Sandals, SavageMask, ScribeBag, ShipwreckedItem, Shirt, Shoes, ShortPants, Skirt, SkullCap, SmallBagBall, SmithBag, Snowman, SpiritOfTheTotem, SpoolOfThread, StrawHat, StrongBackpack, Surcoat, TailorBag, TaintedWool, TallStrawHat, TattsukeHakama, TheMostKnowledgePerson, TheRobeOfBritanniaAri, ThighBoots, TribalMask, TricorneHat, Tunic, UncutCloth, VendorBackpack, WallBannerComponent, Waraji, WideBrimHat, WizardsHat, WoodlandBelt, Wool, WreathAddon

+ virtual bool Dye( Mobile from, DyeTub sender )
+ + diff --git a/Docs/types/IEntity.html b/Docs/types/IEntity.html new file mode 100644 index 0000000..12d05bf --- /dev/null +++ b/Docs/types/IEntity.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IEntity + + +

Back to Server

+

IEntity : IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: AbbatoirAddon, AbbatoirDeed, AbysmalHorror, AcidProofRobe, AcidSlime, Actor, AddonComponent, AddonContainerComponent, AdminRobe, AdmiralsHeartyRum, Aegis, AegisOfGrace, Afro, AgapiteElemental, AgapiteGranite, AgapiteIngot, AgapiteOre, AgilityPotion, AgilityScroll, AirElemental, AlbertaGiacco, Alchemist, AlchemistsBauble, AlchemistTableEastAddon, AlchemistTableEastDeed, AlchemistTableSouthAddon, AlchemistTableSouthDeed, AlchemyBag, AlchemyStone, Alligator, Amber, Amethyst, AncientFarmersKasa, AncientLich, AncientSamuraiDo, AncientSmithyHammer, AncientUrn, AncientWyrm, ANecromancerShroud, AniLargeVioletFlask, AnimalTrainer, AnimateDeadScroll, AniRedRibbedFlask, AniSmallBlueFlask, AnkhNorth, AnkhOfSacrificeAddon, AnkhOfSacrificeComponent, AnkhOfSacrificeDeed, AnkhWest, AnsellaGryen, AnthropomorphistGlasses, AntLion, Anvil, AnvilComponent, AnvilEastAddon, AnvilEastDeed, AnvilSouthAddon, AnvilSouthDeed, Apple, ApplePie, AppleTreeAddon, AppleTreeDeed, AppleTrunkAddon, AppleTrunkDeed, ArcaneBookshelfEastAddon, ArcaneBookshelfEastDeed, ArcaneBookshelfSouthAddon, ArcaneBookshelfSouthDeed, ArcaneCircleAddon, ArcaneCircleDeed, ArcaneCircleScroll, ArcaneDaemon, ArcaneEmpowermentScroll, ArcaneFey, ArcaneFiend, ArcaneFocus, ArcaneGem, ArcaneShield, ArcanistStatueEastAddon, ArcanistStatueEastDeed, ArcanistStatueSouthAddon, ArcanistStatueSouthDeed, ArchCureScroll, ArcherGuard, ArcheryButte, ArcheryButteAddon, ArcheryButteDeed, Architect, ArchProtectionScroll, ArcticDeathDealer, ArcticOgreLord, Armoire, Armorer, ArmorOfFortune, ArmsAndWeaponsPrimer, ArmsOfTacticalExcellence, Arrow, ArtifactLargeVase, ArtifactVase, Artist, ArtsGlasses, AshBoard, AshLog, AssassinSpike, AttuneWeaponScroll, AwaseMisoSoup, AwesomeDisturbingPortraitAddon, AwesomeDisturbingPortraitComponent, AwesomeDisturbingPortraitDeed, Axe, AxeOfTheHeavens, Axle, AxleGears, Backgammon, Backpack, BackpackArtifact, Bacon, BadCard, Bag, BagOfAllReagents, BagOfingots, BagOfNecroReagents, BagOfReagents, BagOfSending, BakeKitsune, Baker, BallOfSummoning, BallotBox, BallotBoxAddon, BallotBoxDeed, Balron, BambooChair, BambooFlute, BambooScreen, Banana, Bananas, Bandage, Bandana, BankBox, BankCheck, Banker, BankerCamp, Banner, BannerDeed, BarbedHides, BarbedLeather, Bard, BardGuildmaster, Bardiche, BarkeepContract, Barkeeper, BarkFragment, Barracoon, BarredMetalDoor, BarredMetalDoor2, Barrel, BarrelHoops, BarrelLid, BarrelStaves, BarrelTap, Bascinet, BaseAddon, BaseAddonContainer, BaseAddonContainerDeed, BaseAddonDeed, BaseAgilityPotion, BaseAmbitiousSolenQueen, BaseArmor, BaseAxe, BaseBagBall, BaseBashing, BaseBeverage, BaseBoard, BaseBoat, BaseBoatDeed, BaseBook, BaseBracelet, BaseBulletinBoard, BaseCamp, BaseChampion, BaseCloak, BaseClothing, BaseClothMaterial, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseContainer, BaseCreature, BaseCurePotion, BaseDecorationArtifact, BaseDecorationContainerArtifact, BaseDockedBoat, BaseDoor, BaseEarrings, BaseEnraged, BaseEquipableLight, BaseEscortable, BaseExplosionPotion, BaseFactionGuard, BaseFactionTrap, BaseFactionTrapDeed, BaseFactionVendor, BaseFamiliar, BaseFloor, BaseFormTalisman, BaseFruitTreeAddon, BaseGlovesOfMining, BaseGranite, BaseGuard, BaseGuildmaster, BaseHarvestTool, BaseHat, BaseHealer, BaseHealPotion, BaseHides, BaseHouse, BaseHouseDoor, BaseImprisonedMobile, BaseIngot, BaseInstrument, BaseJewel, BaseKnife, BaseLeather, BaseLight, BaseMagicFish, BaseMeleeWeapon, BaseMiddleTorso, BaseMonolith, BaseMount, BaseMulti, BaseNecklace, BaseOre, BaseOuterLegs, BaseOuterTorso, BasePants, BasePiece, BasePigmentsOfTokuno, BasePlayerBB, BasePoisonPotion, BasePoleArm, BasePotion, BaseQuester, BaseQuiver, BaseRanged, BaseReagent, BaseRefreshPotion, BaseRejuvinationAnkh, BaseRing, BaseRunicTool, BaseScales, BaseShield, BaseShieldGuard, BaseShirt, BaseShoes, BaseSign, BaseSolenMatriarch, BaseSpear, BaseStaff, BaseStrengthPotion, BaseSuit, BaseSword, BaseSystemController, BaseTalisman, BaseTalismanSummon, BaseTool, BaseTrap, BaseTreasureChest, BaseVendor, BaseWaist, BaseWall, BaseWand, BaseWarHorse, BaseWaterContainer, BaseWeapon, BaseWindChimes, Basket, Basket1Artifact, Basket2Artifact, Basket3NorthArtifact, Basket3WestArtifact, Basket4Artifact, Basket5NorthArtifact, Basket5WestArtifact, Basket6Artifact, BattleAxe, BatWing, Beads, Beard, BearMask, BedOfNailsAddon, BedOfNailsComponent, BedOfNailsDeed, Bedroll, Beekeeper, Beeswax, Beetle, BellOfTheDead, BentoBox, Betrayer, BeverageBottle, BigElvenChair, BigFish, Bird, BirdsOfBritannia, BlackAmbitiousSolenQueen, BlackBear, BlackDyeTub, Blackheart, BlackLotusHood, BlackPearl, BlackScales, Blacksmith, BlacksmithGuildmaster, BlackSolenInfiltratorQueen, BlackSolenInfiltratorWarrior, BlackSolenMatriarch, BlackSolenQueen, BlackSolenWarrior, BlackSolenWorker, BlackStaff, BlackthornWelcomeBook, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BladeSpirits, BladeSpiritsScroll, BlankMap, BlankScroll, BlazeDyeTub, BlazeOfDeath, BlessScroll, Blight, BlightGrippedLongbow, Blocker, Blood, BloodElemental, Bloodmoss, BloodOathScroll, BloodPentagram, BloodwoodBoard, BloodwoodLog, BloodwoodSpirit, BloodyPentagramAddon, BloodyPentagramComponent, BloodyPentagramDeed, BloodyWaterArtifact, Blowpipe, BlueBeaker, BlueBook, BlueCurvedFlask, BlueDecorativeRugAddon, BlueDecorativeRugDeed, BlueDiamond, BlueFancyRugAddon, BlueFancyRugDeed, BlueNinjaQuestTeleporter, BluePlainRugAddon, BluePlainRugDeed, BlueScales, BlueSlateFloorCenter, BlueSnowflake, BlueSoulstone, Boar, Board, BodySash, Bogle, Bogling, BogThing, BoilingCauldronAddon, BoilingCauldronDeed, Bokuto, Bola, BolaBall, BoldStranger, Bolt, BoltOfCloth, Bone, BoneArms, BoneChest, BoneCouchAddon, BoneCouchComponent, BoneCouchDeed, BoneCrusher, BoneDemon, BoneGloves, BoneHarvester, BoneHelm, BoneKnight, BoneLegs, BoneMagi, BonePile, Bonesmasher, BoneTableAddon, BoneTableDeed, BoneThroneAddon, BoneThroneComponent, BoneThroneDeed, Bonnet, BookOfBushido, BookOfChivalry, BookOfNinjitsu, BooksFaceDownArtifact, BooksNorthArtifact, BooksWestArtifact, Boomstick, Boots, Bottle, BottleArtifact, Bow, BowlArtifact, BowlFlour, BowlsHorizontalArtifact, BowlsVerticalArtifact, BowOfTheJukaKing, Bowyer, BraceletOfBinding, BraceletOfHealth, BrambleCoat, BraveKnightOfTheBritannia, Brazier, BrazierArtifact, BrazierTall, BreadLoaf, BreathOfTheDead, BrickHouseDeed, BricksFloor1, BricksFloor2, BrideGroom, Brigand, BrigandCamp, BrightlyColoredEggs, BrilliantAmber, BritannianFlora, BroadcastCrystal, Broadsword, BrocadeGozaMatEastAddon, BrocadeGozaMatEastDeed, BrocadeGozaMatSouthAddon, BrocadeGozaMatSouthDeed, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatEastDeed, BrocadeSquareGozaMatSouthAddon, BrocadeSquareGozaMatSouthDeed, BrokenArmoireAddon, BrokenArmoireComponent, BrokenArmoireDeed, BrokenBedAddon, BrokenBedDeed, BrokenBookcaseAddon, BrokenBookcaseComponent, BrokenBookcaseDeed, BrokenChair, BrokenChestOfDrawersAddon, BrokenChestOfDrawersComponent, BrokenChestOfDrawersDeed, BrokenCoveredChairAddon, BrokenCoveredChairComponent, BrokenCoveredChairDeed, BrokenFallenChairAddon, BrokenFallenChairComponent, BrokenFallenChairDeed, BrokenVanityAddon, BrokenVanityDeed, BronzeElemental, BronzeGranite, BronzeIngot, BronzeOre, BronzeShield, BronzeStatueMaker, BrownBear, BrownBearRugEastAddon, BrownBearRugEastDeed, BrownBearRugSouthAddon, BrownBearRugSouthDeed, BrownBook, Bucket, Buckler, BulkOrderBook, Bull, BulletinBoard, BulletinMessage, BullFrog, BunnyHole, BunsHair, BurglarsBandana, BurningOfTrinsic, BustEast, BustSouth, Butcher, ButcherKnife, Cabbage, Cake, CakeMix, CallToAnarchy, Calm, Campfire, Candelabra, CandelabraOfSouls, CandelabraStand, Candle, CandleLarge, CandleLong, CandleShort, CandleSkull, CandyCane, Cannon, CannonAddon, CannonAddonComponent, CannonComponent, CannonDeed, Cantaloupe, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CapturedEssence, CapturedHordeMinion, Cards, Cards2, Cards3, Cards4, Carpenter, Carrot, Castle, CastleDeed, Cat, Cauldron, CaveFloorCenter, CaveFloorEast, CaveFloorNorth, CaveFloorSouth, CaveFloorWest, CavortingClub, Centaur, CeramicMug, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChainLightningScroll, ChampionAltar, ChampionPlatform, ChampionSkull, ChampionSkullBrazier, ChampionSkullPlatform, ChampionSpawn, ChaosDaemon, ChaosDragoon, ChaosDragoonElite, ChaosGuard, ChaosShield, CharacterStatue, CharacterStatueDeed, CharacterStatueMaker, CharacterStatuePlinth, ChargerOfTheFallen, CheckerBoard, Checkers, Checkers2, CheesePizza, CheeseSlice, CheeseWedge, CheeseWheel, CherryArmoire, CherryBlossomTreeAddon, CherryBlossomTreeDeed, CherryBlossomTrunkAddon, CherryBlossomTrunkDeed, Chessboard, Chessmen, Chessmen2, Chessmen3, ChestOfHeirlooms, Chicken, ChickenLeg, ChildrenTalesVol2, ChiselsNorth, ChiselsWest, Chyloth, ChylothShroud, ChylothStaff, CinnamonFancyRugAddon, CinnamonFancyRugDeed, Circlet, Citrine, CityMap, Cleaver, Cloak, Clock, ClockFrame, ClockLeft, ClockParts, ClockRight, ClockworkAssembly, Clone, ClosedBarrel, CloseHelm, Cloth, ClothingBlessDeed, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyScroll, ClumsyWand, Coal, Cobbler, CobblestonesFloor, Coconut, CocoonArtifact, ColdBlood, ColdForgedBlade, ColoredAnvil, CommodityDeed, CommodityDeedBox, CompositeBow, CoMWarHorse, ConfirmationMoongate, ConflagrationPotion, ConfusionBlastPotion, Container, ContestMiniHouse, ContestMiniHouseDeed, ContractOfEmployment, ControlPanel, Cook, CookableFood, CookedBird, CookieMix, Cookies, CopperElemental, CopperGranite, CopperIngot, CopperOre, CopperWire, Corpse, Corpser, CorpseSkinScroll, CorrosiveSlime, CorruptedSoul, Corruption, Cotton, Cougar, CounselorRobe, CoveredChair, Cow, Crane, CreateFoodScroll, CreatureBackpack, CreepyPortraitAddon, CreepyPortraitComponent, CreepyPortraitDeed, CrescentBlade, CrimsonCincture, Crossbow, CrossbowBolts, CrownOfTalKeesh, CrystalCaveBarrier, CrystalElemental, CunningScroll, CupsArtifact, CurePotion, CureScroll, Cursed, CursedSoul, CurseScroll, CurseWeaponScroll, CurtainsAddon, CurtainsComponent, CurtainsDeed, CurvedFlask, CuSidhe, CuSidheFormTalisman, CustomHairstylist, Cutlass, Cyclops, Daemon, DaemonArms, DaemonBlood, DaemonBloodChest, DaemonBone, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DamagedBooksArtifact, DarkenedSky, DarkFlowerTapestryEastAddon, DarkFlowerTapestryEastDeed, DarkFlowerTapestrySouthAddon, DarkFlowerTapestrySouthDeed, DarknightCreeper, DarkSandstoneFloorN, DarkSandstoneFloorW, DarkSapphire, DarkSource, DarkTidesHorn, DarkTidesTeleporter, DarkWisp, DarkWolfFamiliar, DarkWoodDoor, DarkWoodGate, DarkWoodHouseDoor, DarkWoodWall, DarkYarn, DartBoard, DartBoardEastAddon, DartBoardEastDeed, DartBoardSouthAddon, DartBoardSouthDeed, Dates, DawnsMusicBox, DawnsMusicGear, DeadlyImp, DeadlyPoisonPotion, DeadWood, DeathAdder, DeathRobe, DeathShroud, DeathwatchBeetle, DeathwatchBeetleHatchling, DecayedCorpse, DeceitBrazier, DeceitDungeonOfHorror, DecoArrowShafts, DecoBlackmoor, DecoBloodspawn, DecoBottlesOfLiquor, DecoBridle, DecoBridle2, DecoBrimstone, DecoCards5, DecoCrystalBall, DecoDeckOfTarot, DecoDeckOfTarot2, DecoDragonsBlood, DecoDragonsBlood2, DecoEyeOfNewt, DecoFlower, DecoFlower2, DecoFullJar, DecoFullJars3, DecoFullJars4, DecoGarlic, DecoGarlic2, DecoGarlicBulb, DecoGarlicBulb2, DecoGinseng, DecoGinseng2, DecoGinsengRoot, DecoGinsengRoot2, DecoGoldIngot, DecoGoldIngot2, DecoGoldIngots, DecoGoldIngots2, DecoGoldIngots3, DecoGoldIngots4, DecoHay, DecoHay2, DecoHorseDung, DecoIronIngot, DecoIronIngot2, DecoIronIngots, DecoIronIngots2, DecoIronIngots3, DecoIronIngots4, DecoIronIngots5, DecoIronIngots6, DecoMagicalCrystal, DecoMandrake, DecoMandrake2, DecoMandrake3, DecoMandrakeRoot, DecoMandrakeRoot2, DecoNightshade, DecoNightshade2, DecoNightshade3, DecoObsidian, DecoPumice, DecorativeAxeNorth, DecorativeAxeWest, DecorativeBowNorth, DecorativeBowWest, DecorativeDAxeNorth, DecorativeDAxeWest, DecorativePlateKabuto, DecorativeShield, DecorativeShield1, DecorativeShield10, DecorativeShield11, DecorativeShield2, DecorativeShield3, DecorativeShield4, DecorativeShield5, DecorativeShield6, DecorativeShield7, DecorativeShield8, DecorativeShield9, DecorativeShieldDeed, DecorativeShieldSword1North, DecorativeShieldSword1West, DecorativeShieldSword2North, DecorativeShieldSword2West, DecorativeSwordNorth, DecorativeSwordWest, DecorativeTopiary, DecoRock, DecoRock2, DecoRocks, DecoRocks2, DecoRoseOfTrinsic, DecoRoseOfTrinsic2, DecoRoseOfTrinsic3, DecoSilverIngot, DecoSilverIngot2, DecoSilverIngots, DecoSilverIngots2, DecoSilverIngots3, DecoSilverIngots4, DecoSilverIngots5, DecoSpittoon, DecoTarot, DecoTarot2, DecoTarot3, DecoTarot4, DecoTarot5, DecoTarot6, DecoTarot7, DecoTray, DecoTray2, DecoWyrmsHeart, DeepSeaSerpent, DeerMask, DemonForks, DemonKnight, DemonSkull, DesertOstard, DetectiveBoots, Devourer, Diamond, DiamondMace, Dices, DimensionalTravel, DireWolf, DirtPatch, DirtyFrypan, DirtyKettle, DirtyPan, DirtyPot, DirtyRoundPot, DirtySmallPot, DirtySmallRoundPot, DisappearingRaiseSwitch, DiseasedBark, DiseasedCat, DisguiseKit, DisguisePersistance, DispelFieldScroll, DispelScroll, DisplayCache, DisturbingPortraitAddon, DisturbingPortraitComponent, DisturbingPortraitDeed, DiversityOfOurLand, DivineCountenance, DjinnisRing, Dog, Dolphin, DolphinLeftArtifact, DolphinRightArtifact, Doppleganger, DoubleAxe, DoubleBladedStaff, Doublet, Dough, DovetailSaw, Dragon, DragonArms, DragonBardingDeed, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, Drake, DrakovsJournal, Drawer, DrawKnife, DreadHornMane, DreadPirateHat, DreadSpider, Dressform, DriedHerbs, DriedOnions, Drums, Dryad, DryadAllureScroll, DullCopperElemental, DullCopperGranite, DullCopperIngot, DullCopperOre, Dummy, DummyAssassin, DummyFence, DummyHealer, DummyMace, DummyNox, DummyStun, DummySuper, DummySword, DummyTheif, DupresShield, DupreSuit, Dyes, DyeTub, DynamicTeleporter, Eagle, EarOfCorn, EarringBoxSet, EarringsOfProtection, EarthElemental, EarthquakeScroll, Easle, EasterEggs, EcruCitrine, EffectController, EffectItem, Efreet, EggBomb, EggCaseArtifact, Eggs, Eggshells, ElderGazer, ElegantArmoire, ElegantLowTable, EliteNinja, ElvenBedEastAddon, ElvenBedEastDeed, ElvenBedSouthAddon, ElvenBedSouthDeed, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenDresserEastAddon, ElvenDresserEastDeed, ElvenDresserSouthAddon, ElvenDresserSouthDeed, ElvenForgeAddon, ElvenForgeDeed, ElvenGlasses, ElvenLoveseatEastAddon, ElvenLoveseatEastDeed, ElvenLoveseatSouthAddon, ElvenLoveseatSouthDeed, ElvenMachete, ElvenPants, ElvenQuiver, ElvenReadingChair, ElvenShirt, ElvenSpellblade, ElvenSpinningwheelEastAddon, ElvenSpinningwheelEastDeed, ElvenSpinningwheelSouthAddon, ElvenSpinningwheelSouthDeed, ElvenStoveEastAddon, ElvenStoveEastDeed, ElvenStoveSouthAddon, ElvenStoveSouthDeed, ElvenWashBasinEastAddon, ElvenWashBasinEastDeed, ElvenWashBasinSouthAddon, ElvenWashBasinSouthDeed, ElwoodMcCarrin, EmbroideredOakLeafCloak, Emerald, Emino, EminosKatana, EminosKatanaChest, EmptyBentoBox, EmptyBookcase, EmptyCurvedFlaskE, EmptyCurvedFlaskW, EmptyJar, EmptyJars, EmptyJars2, EmptyJars3, EmptyJars4, EmptyPewterBowl, EmptyPewterTub, EmptyRibbedFlask, EmptyToolKit, EmptyToolKit2, EmptyVial, EmptyVialsWRack, EmptyWoodenBowl, EmptyWoodenTub, EnchantedPaints, EnchantedSextant, EnchantedSwitch, EnchantedTitanLegBone, EnergyBoltScroll, EnergyFieldScroll, EnergyVortex, EnergyVortexScroll, EnhancedBandage, EnragedBlackBear, EnragedEagle, EnragedHart, EnragedHind, EnragedRabbit, EnshroudedFigure, EnslavedGargoyle, Entity, EscortableMage, EssenceOfBattle, EssenceOfWindScroll, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, EtherealVoyageScroll, EtherealWarrior, EthicalHedonism, EthicsPersistance, Ettin, EvilHealer, EvilIdolSkull, EvilMage, EvilMageLord, EvilOmenScroll, EvilWanderingHealer, Executioner, ExecutionersAxe, ExecutionersCap, Exiler, ExodusMinion, ExodusOverseer, ExorcismScroll, ExplosionPotion, ExplosionScroll, EyeOfTheTravesty, FabledFishingNet, FactionBerserker, FactionBoardVendor, FactionBottleVendor, FactionDeathKnight, FactionDragoon, FactionExplosionTrap, FactionExplosionTrapDeed, FactionGasTrap, FactionGasTrapDeed, FactionHenchman, FactionHorseVendor, FactionKnight, FactionMercenary, FactionNecromancer, FactionOreVendor, FactionPaladin, FactionPersistance, FactionReagentVendor, FactionSawTrap, FactionSawTrapDeed, FactionSorceress, FactionSpikeTrap, FactionSpikeTrapDeed, FactionStone, FactionTrapRemovalKit, FactionWarHorse, FactionWizard, FancyArmoire, FancyDrawer, FancyDress, FancyElvenTableEastAddon, FancyElvenTableEastDeed, FancyElvenTableSouthAddon, FancyElvenTableSouthDeed, FancyShirt, FancyWindChimes, FancyWoodenChairCushion, FanDancer, FangOfRactus, FanNorthArtifact, FanWestArtifact, FarmableCabbage, FarmableCarrot, FarmableCotton, FarmableCrop, FarmableFlax, FarmableLettuce, FarmableOnion, FarmablePumpkin, FarmableTurnip, FarmableWheat, Farmer, Feather, FeatheredHat, FeeblemindScroll, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FerelTreefellow, Ferret, FerretFormTalisman, FertileDirt, FestiveCactus, FetidEssence, FeyLeggings, FieldStoneHouseDeed, FierceDragon, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, FireballScroll, FireballWand, FireBeetle, Firebomb, FirebombField, FireColumnAddon, FireColumnTrap, FireElemental, FireFieldItem, FireFieldScroll, FireGargoyle, FireHorn, FireRuby, FireSteed, FireworksWand, Fish, FisherGuildmaster, Fisherman, FishingPole, FishSteak, Fists, FlameSpurtTrap, FlamestrikeScroll, FlamingHead, FlamingHeadDeed, Flax, FleshGolem, FleshRenderer, FleshRipper, FletcherTools, FloppyHat, FlourMillEastAddon, FlourMillEastDeed, FlourMillSouthAddon, FlourMillSouthDeed, FlourSifter, FlowerGarland, FlowersArtifact, FluteOfRenewal, FoldedSteelGlasses, Food, FootStool, ForestOstard, Forge, ForgeComponent, ForgedMetal, Fork, ForkLeft, ForkRight, FormalShirt, FortuneTeller, FountainAddon, FountainDeed, FountainOfLife, FountainOfLifeDeed, FrenchBread, FrenziedOstard, FriedEggs, Froe, FropozJournal, Frostbringer, FrostOoze, FrostSpider, FrostTroll, FrostwoodBoard, FrostwoodLog, FruitBasket, FruitPie, Fukiya, FukiyaDarts, FullApron, FullBookcase, FullVialsWRack, FurBoots, FurCape, FurnitureDyeTub, FurSarong, Furtrader, Futon, GabrielPiete, Gaman, GamblingStone, Gargoyle, GargoyleDestroyer, GargoyleEnforcer, GargoylesPickaxe, Garlic, GasTrap, GateTravelScroll, GauntletsOfNobility, GauntletSpawner, Gazer, GazerLarva, Gears, GemmedCirclet, GenericBeard, GenericHair, GenericHouseDoor, GhostShipAnchor, Ghoul, GiantBlackWidow, GiantIceWorm, GiantRat, GiantSerpent, GiantSpider, GiantSpikeTrap, GiantToad, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, Gibberling, GiftBox, GiftBoxAngel, GiftBoxCube, GiftBoxCylinder, GiftBoxNeon, GiftBoxOctogon, GiftBoxRectangle, GiftOfLifeScroll, GiftOfRenewalScroll, GildedDress, GildedWoodenChest, GingerBreadCookie, GingerBreadHouseAddon, GingerBreadHouseDeed, Ginseng, GlacialStaff, GladiatorsCollar, Glass, Glassblower, GlassblowingBook, GlassBottle, GlassMug, Globe, GlovesOfThePugilist, GlovesOfTheSun, GMRobe, GnarledStaff, Goat, Goatee, Goblet, Gold, GoldBeadNecklace, GoldBracelet, GoldBricks, GoldEarrings, GoldenDecorativeRugAddon, GoldenDecorativeRugDeed, GoldenElemental, GoldenSkull, GoldGranite, GoldIngot, GoldNecklace, GoldOre, GoldRing, GoldWire, Golem, GolemController, GolemCrafter, GoreFiend, Gorilla, GozaMatEastAddon, GozaMatEastDeed, GozaMatSouthAddon, GozaMatSouthDeed, GrammarOfOrcish, GrandGrimoire, Granite, Grapes, GraveDust, GrayBrickFireplaceEastAddon, GrayBrickFireplaceEastDeed, GrayBrickFireplaceSouthAddon, GrayBrickFireplaceSouthDeed, GreaterAgilityPotion, GreaterConflagrationPotion, GreaterConfusionBlastPotion, GreaterCurePotion, GreaterDragon, GreaterExplosionPotion, GreaterHealPotion, GreaterHealScroll, GreaterHealWand, GreaterMongbat, GreaterPoisonPotion, GreaterStrengthPotion, GreatHart, GreenBeaker, GreenBottle, GreenCurvedFlask, GreenDriedFlowers, GreenGourd, GreenMarbleFloor, GreenNinjaQuestTeleporter, GreenScales, GreenStocking, GreenTea, GreenTeaBasket, GreenThorns, GreenThornsSHTeleporter, GreyFlagstones, GreyMarbleFloor, GreySlateFloor, GreyWolf, GrimmochDrummel, GrimmochJournal1, GrimmochJournal11, GrimmochJournal14, GrimmochJournal17, GrimmochJournal2, GrimmochJournal23, GrimmochJournal3, GrimmochJournal6, GrimmochJournal7, Grizelda, GrizzledBones, GrizzledMare, GrizzledMareStatuette, GrizzlyBear, GruesomeStandardArtifact, GuantletsOfAnger, Guardian, GuardianBarrier, GuideToGuilds, GuildDeed, GuildHouse, Guildstone, GuildstoneDeed, GuildTeleporter, Guillotine, GuillotineAddon, GuillotineComponent, GuillotineDeed, GwennosHarp, Gypsy, GypsyAnimalTrainer, GypsyBanker, GypsyMaiden, HagApprenticeCorpse, HagCauldron, HagStew, Hair, HairDye, HairRestylingDeed, HairStylist, Hakama, HakamaShita, Halberd, HalfApron, HalfEmptyJar, HalfEmptyJars, Ham, Hammer, HammerPick, HangingAxesAddon, HangingAxesDeed, HangingLantern, HangingSkeleton, HangingSkeletonDeed, HangingSwordsAddon, HangingSwordsDeed, HangoverCure, HanzosBow, Haochi, HaochisGuardsman, HaochisKatana, HaochisKatanaGenerator, HaochisTreasureChest, HarborMaster, HarmScroll, HarmWand, Harp, Harpy, Harrower, HarrowerGate, HarrowerTentacles, Hatchet, HatOfTheMagi, HaunterMirrorAddon, HaunterMirrorComponent, HaunterMirrorDeed, Head, HeadlessOne, Healer, HealerCamp, HealerGuildmaster, HealPotion, HealScroll, HealWand, HearthOfHomeFire, HearthOfHomeFireDeed, HeartOfTheLion, HeartwoodBoard, HeartwoodLog, HeaterShield, HeatingStand, HeavyCrossbow, HeavyPlateJingasa, HellCat, HellHound, HellSteed, Helmet, HelmOfInsight, HelmOfSwiftness, Henchman, Herbalist, HeritageToken, HiddenFigure, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, Hides, Hind, Hinge, HintItem, Hiryu, Hold, HolidayBell, HolidayTree, HolidayTreeDeed, HollowPrism, HolyFamiliar, HolyKnightsBreastplate, HolyMage, HolySteed, HolySword, HoneydewMelon, HonorableSwords, HonorCandle, HoodedShroudOfShadows, HordeMinion, HordeMinionFamiliar, HornedHides, HornedLeather, HornedTribalMask, HornOfRetreat, HornOfRetreatMoongate, HorrificBeastScroll, Horse, HorseShoes, Horus, Hourglass, HourglassAni, HouseDeed, HouseFoundation, HouseLadderAddon, HouseLadderDeed, HousePlacementTool, HouseRaffleDeed, HouseRaffleStone, HouseSign, HouseTeleporter, HuntersHeaddress, IceElemental, IceFiend, IceSerpent, IceSnake, IcicleLargeEast, IcicleLargeSouth, IcicleMedEast, IcicleMedSouth, IcicleSmallEast, IcicleSmallSouth, IcyPatch, IdolOfTheChampion, IDWand, IharaSoko, Ilhenir, ImmolatingWeaponScroll, Imp, Impaler, Impresario, IncognitoScroll, IndecipherableMap, IngotStone, InjuredWolf, InnKeeper, InquisitorsResolution, Inshave, InteriorDecorator, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem2, InternalItem2, InterredGrizzle, InvisibilityScroll, IolosLute, IronGate, IronGateShort, IronIngot, IronMaidenAddon, IronMaidenDeed, IronOre, IronWire, IronwoodCrown, IronWorker, ISpawnable, Item, JackalsCollar, JackOLantern, JackRabbit, JadeStatueMaker, JarHoney, Jars2, Jars3, Jars4, JedahEntille, JesterHat, JesterHatofChuckles, JesterSuit, JeweledFiligree, Jeweler, JinBaori, JoinStone, JointingPlane, Jug, Juggernaut, JukaBow, JukaLord, JukaMage, JukaWarrior, Jwilson, KaburJournal, Kama, Kamishimo, Kappa, Kasa, KasaOfTheRajin, Katana, KazeKemono, Keep, KeepDeed, KeeperOfChivalry, Keg, Key, KeyRing, KeywordTeleporter, KhaldunPitTeleporter, KhaldunRevenant, KhaldunSummoner, KhaldunZealot, Kilt, Kindling, Kirin, Knife, KnifeLeft, KnifeRight, Kraken, KrisnaHair, KronusScroll, KronusScrollBox, Kryss, LadyOfTheSnow, LadyPortrait1, LadyPortrait2, Lajatang, LambLeg, LampPost1, LampPost2, LampPost3, LampPostArtifact, LampRoomBox, LampRoomTeleporter, Lance, Lantern, LanternOfSouls, LapHarp, LardOfParoxysmus, LargeBagBall, LargeBattleAxe, LargeBedEastAddon, LargeBedEastDeed, LargeBedSouthAddon, LargeBedSouthDeed, LargeBoat, LargeBoatDeed, LargeBOD, LargeCrate, LargeDockedBoat, LargeDockedDragonBoat, LargeDragonBoat, LargeDragonBoatDeed, LargeEmptyFlask, LargeEmptyPot, LargeFishingNetAddon, LargeFishingNetComponent, LargeFishingNetDeed, LargeFlask, LargeForgeEast, LargeForgeEastAddon, LargeForgeEastDeed, LargeForgeSouthAddon, LargeForgeSouthDeed, LargeForgeWest, LargeMarbleDeed, LargeMarbleHouse, LargePainting, LargePatioDeed, LargePatioHouse, LargeSmithBOD, LargeStoneTableEastAddon, LargeStoneTableEastDeed, LargeStoneTableSouthAddon, LargeStoneTableSouthDeed, LargeTable, LargeTailorBOD, LargeVase, LargeVioletFlask, LargeYellowFlask, LavaLizard, LavaSerpent, LavaSnake, LavaTile, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, Leather, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherDyeTub, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LeatherTunicArtifact, LeatherWorker, LeftArm, LeftLeg, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, Lemon, Lemons, LesserCurePotion, LesserExplosionPotion, LesserHealPotion, LesserHiryu, LesserPigmentsOfTokuno, LesserPoisonPotion, Lettuce, LeurociansMempoOfFortune, LeverPuzzleController, LeverPuzzleLever, LeverPuzzleStatue, Leviathan, LibraryBookcase, Lich, LichFormScroll, LichLord, LieutenantOfTheBritannianRoyalGuard, LifeOfATravellingMinstrel, LightFlowerTapestryEastAddon, LightFlowerTapestryEastDeed, LightFlowerTapestrySouthAddon, LightFlowerTapestrySouthDeed, LightningScroll, LightningWand, LightOfTheWinterSolstice, LightOfWayGlasses, LightPlateJingasa, LightSource, LightWoodDoor, LightWoodGate, LightYarn, LightYarnUnraveled, Lime, Limes, Lizardman, LizardmenCamp, Llama, LocalizedAddonComponent, LocalizedContainerComponent, LocalizedSign, LocalizedStatic, LocalMap, LockableBarrel, LockableContainer, Lockpick, Lockpicks, Log, LogCabin, LogCabinDeed, LongBeard, LongFlask, LongHair, LongPants, Longsword, LoomEastAddon, LoomEastDeed, LoomSouthAddon, LoomSouthDeed, LordBlackthorneSuit, LordBritishSuit, LordOaks, LOSBlocker, LtBlueCurvedFlask, LuckyNecklace, LuminescentFungi, LuminousRuneBlade, LunaLance, Lute, LyricalGlasses, LysanderGathenwale, LysanderNotebook1, LysanderNotebook11, LysanderNotebook2, LysanderNotebook3, LysanderNotebook7, LysanderNotebook8, Maabus, MaabusCoffin, MaabusCoffinComponent, Mace, MaceShieldGlasses, Mage, MageCamp, MageGuildmaster, MagicalShortbow, MagicArrowScroll, MagicArrowWand, MagicFlute, MagicLockScroll, MagicReflectScroll, MagicTrapScroll, MagicUnTrapScroll, MagicWand, MagicWizardsHat, MahjongGame, MajorTradeAssociation, MaleElvenRobe, MaleKimono, MalletAndChisel, ManaDrainScroll, ManaDrainWand, ManaVampireScroll, MandrakeRoot, ManPortrait1, ManPortrait2, MansionGuard, ManStatuetteEastArtifact, ManStatuetteSouthArtifact, MapItem, MapleArmoire, Mapmaker, MapmakersPen, MarbleFloor, MarblePavers, MarbleStatueMaker, MarbleWorkshopDeed, Mardoth, MaritimeGlasses, MarkContainer, MarkScroll, MasonryBook, MassCurseScroll, MassDispelScroll, Maul, MeatPie, MediumBoat, MediumBoatDeed, MediumCrate, MediumDockedBoat, MediumDockedDragonBoat, MediumDragonBoat, MediumDragonBoatDeed, MediumFlask, MediumLongBeard, MediumShortBeard, MediumStoneTableEastAddon, MediumStoneTableEastDeed, MediumStoneTableSouthAddon, MediumStoneTableSouthDeed, MediumStretchedHideEastAddon, MediumStretchedHideEastDeed, MediumStretchedHideSouthAddon, MediumStretchedHideSouthDeed, MediumWoodDoor, MeerCaptain, MeerEternal, MeerMage, MeerWarrior, MelisandesCorrodedHatchet, MeltedWax, Mephitis, Meraktus, Merchant, MerchantGuildmaster, MessageInABottle, Messenger, MetalBox, MetalChest, MetalDoor, MetalDoor2, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalHouseDoor, MetalKiteShield, MetalPigmentsOfTokuno, MetalShield, MetalTreasureChest, MeteorSwarmScroll, MidnightBracers, MilitiaCanoneer, MilitiaFighter, MilitiaFighterCorpse, Miller, MinaxWarHorse, MindBlastScroll, MindRotScroll, Miner, MinerGuildmaster, MiniHouseAddon, MiniHouseDeed, MiningCart, MiningCartDeed, Minotaur, MinotaurCaptain, MinotaurHedge, MinotaurScout, MinotaurStatue, MinotaurStatueDeed, Minter, MisoSoup, MistletoeAddon, MistletoeDeed, MLDryad, Mobile, Mohawk, Moloch, Mongbat, Monk, MonkRobe, MonsterStatuette, MoonfireBrew, Moongate, Moonstone, MoonstoneGate, MorgBergen, MorphItem, MortarPestle, MouldingPlane, MoundOfMaggots, MountainGoat, MountedPixieBlueAddon, MountedPixieBlueComponent, MountedPixieBlueDeed, MountedPixieGreenAddon, MountedPixieGreenComponent, MountedPixieGreenDeed, MountedPixieLimeAddon, MountedPixieLimeComponent, MountedPixieLimeDeed, MountedPixieOrangeAddon, MountedPixieOrangeComponent, MountedPixieOrangeDeed, MountedPixieWhiteAddon, MountedPixieWhiteComponent, MountedPixieWhiteDeed, MountItem, MovingCrate, Muculent, Muffins, Mummy, MushroomTrap, Mustache, MyStory, Nails, NameChangeDeed, Naturalist, NatureFury, NatureFuryScroll, Necklace, NecromancerSpellbook, NecromanticGlasses, Neira, NewPlayerTicket, Nightmare, Nightshade, NightSightPotion, NightSightScroll, NightsKiss, Nightstand, Ninja, NinjaTabi, Noble, NoDachi, NorseHelm, NoteForZoel, NoxCrystal, NoxRangersHeavyCrossbow, Nunchaku, OakBoard, OakLog, Obelisk, Obi, OblivionsNeedle, Obsidian, Ogre, OgreLord, OilCloth, Oni, Onion, OpenCoconut, OphidianArchmage, OphidianKnight, OphidianMage, OphidianMatriarch, OphidianWarrior, OrangePetals, Orc, OrcBomber, OrcBrute, OrcCamp, OrcCaptain, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishLord, OrcishMage, OrcishVisage, OrderGuard, OrderShield, OrigamiButterfly, OrigamiFish, OrigamiFrog, OrigamiPaper, OrigamiShape, OrigamiSongbird, OrigamiSwan, Ornament, OrnamentOfTheMagician, OrnateAxe, OrnateCrownOfTheHarrower, OrnateElvenChair, OrnateElvenTableEastAddon, OrnateElvenTableEastDeed, OrnateElvenTableSouthAddon, OrnateElvenTableSouthDeed, OrnateWoodenChest, OssianGrimoire, OverseerSunderedBlade, Pacify, PackHorse, PackingBox, PackLlama, PadsOfTheCuSidhe, PageboyHair, PainSpikeScroll, PaintedImage, Painting1NorthArtifact, Painting1WestArtifact, Painting2NorthArtifact, Painting2WestArtifact, Painting3Artifact, Painting4NorthArtifact, Painting4WestArtifact, Painting5NorthArtifact, Painting5WestArtifact, Painting6NorthArtifact, Painting6WestArtifact, PaintsAndBrush, Panther, PaperLantern, ParagonChest, ParalyzeFieldScroll, ParalyzeScroll, ParasiticPlant, Parrot, ParrotPerchAddon, ParrotPerchDeed, PatchworkSkeleton, Peach, PeachCobbler, PeachTreeAddon, PeachTreeDeed, PeachTrunkAddon, PeachTrunkDeed, Pear, Peasant, PeasantsBokuto, PeculiarFish, PenAndInk, PendantOfTheMagi, PentagramAddon, PentagramDeed, PerfectEmerald, PestilentBandage, PewterBowlOfCarrots, PewterBowlOfCorn, PewterBowlOfLettuce, PewterBowlOfPeas, PewterBowlOfPotatos, PewterMug, PhantomStaff, PhillipsWoodenSteed, Phoenix, Pickaxe, PickpocketDip, PickpocketDipEastAddon, PickpocketDipEastDeed, PickpocketDipSouthAddon, PickpocketDipSouthDeed, PicnicBasket, PieceBlackBishop, PieceBlackChecker, PieceBlackKing, PieceBlackKnight, PieceBlackPawn, PieceBlackQueen, PieceBlackRook, PieceWhiteBishop, PieceWhiteChecker, PieceWhiteKing, PieceWhiteKnight, PieceWhitePawn, PieceWhiteQueen, PieceWhiteRook, Pier, Pig, PigIron, PigmentsOfTokuno, Pike, PileOfGlacialSnow, PilferedDancerFans, PinkFancyRugAddon, PinkFancyRugDeed, Pitcher, Pitchfork, Pixie, PixieSwatter, PlagueBeast, PlagueBeastBackpack, PlagueBeastBackupOrgan, PlagueBeastBlood, PlagueBeastComponent, PlagueBeastGland, PlagueBeastHeart, PlagueBeastInnard, PlagueBeastLord, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastMutationCore, PlagueBeastOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan, PlagueBeastVein, PlagueSpawn, PlainDress, PlainLowTable, PlainWoodenChest, Plank, PlantBowl, PlantItem, Plate, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PlayerBarkeeper, PlayerBBEast, PlayerBBSouth, PlayerMobile, PlayerVendor, PlayerVendorPlaceholder, PlayingCards, PlayingCards2, PoisonedGlasses, PoisonElemental, PoisonFieldScroll, PoisonPotion, PoisonScroll, PoisonStrikeScroll, PolarBear, PolarBearMask, PolarBearRugEastAddon, PolarBearRugEastDeed, PolarBearRugSouthAddon, PolarBearRugSouthDeed, PolymorphScroll, PonyTail, PoolOfAcid, PortcullisEW, PortcullisNS, PotionKeg, PottedCactus, PottedCactus1, PottedCactus2, PottedCactus3, PottedCactus4, PottedCactus5, PottedCactusDeed, PottedPlant, PottedPlant1, PottedPlant2, PottedTree, PottedTree1, Pouch, PowderOfTemperament, PowderOfTranslocation, PowerCrystal, PowerGenerator, PowerScroll, PredatorHellCat, PresetMap, PreviewHouse, PricedHealer, PristineDreadHorn, PrizedFish, PromotionalToken, ProspectorsTool, ProtectionScroll, Provisioner, PublicMoongate, Pumpkin, PumpkinPie, Putrefication, PuzzleChest, PyramidAddon, Quagmire, QuarterStaff, Quell, QuestDaemonBlood, QuestDaemonBone, QuestFertileDirt, QuestItem, QuestOfVirtues, Quiche, QuiverOfBlight, QuiverOfElements, QuiverOfFire, QuiverOfIce, QuiverOfInfinity, QuiverOfLightning, QuiverOfRage, Rabbit, RadiantScimitar, RaedsGlory, RagingGrizzlyBear, RaiJu, RaisableItem, RaiseSwitch, Rancher, RandomTalisman, Ranger, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerGuildmaster, RangerLegs, RankingsOfTrades, Rat, RatCamp, Ratman, RatmanArcher, RatmanMage, RattanDoor, Ravager, RavenHelm, RawBird, RawChickenLeg, RawFishSteak, RawLambLeg, RawRibs, ReactiveArmorScroll, RealEstateBroker, Reaper, ReaperFormScroll, RecallRune, RecallScroll, ReceedingHair, ReceiverCrystal, RecipeScroll, RedAmbitiousSolenQueen, RedArmoire, RedBeaker, RedBook, RedBottle, RedCurvedFlask, RedHangingLantern, RedLeaves, RedMisoSoup, RedPlainRugAddon, RedPlainRugDeed, RedPoinsettia, RedRibbedFlask, RedScales, RedSolenInfiltratorQueen, RedSolenInfiltratorWarrior, RedSolenMatriarch, RedSolenQueen, RedSolenWarrior, RedSolenWorker, RedSoulstone, RedStocking, RedVelvetGiftBox, RefreshPotion, RegardingLlamas, RegStone, RejuvinationAddonComponent, RejuvinationAnkhNorth, RejuvinationAnkhWest, Relnia, RentedVendor, RepairDeed, RepeatingCrossbow, Reptalon, ReptalonFormTalisman, ResGate, ResilientBracer, RestlessSoul, ResurrectionScroll, RevealScroll, Revenant, RevenantLion, RewardBlackDyeTub, RewardBrazier, RewardBrazierDeed, RewardCake, RewardCloak, RewardDress, RewardPottedCactus, RewardRobe, RibCage, Ribs, RidableLlama, RideablePolarBear, Ridgeback, RightArm, RighteousAnger, RightLeg, Rikktor, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, RingOfTheElements, RingOfTheVile, RoastPig, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RockArtifact, RollingPin, Ronin, Rope, RoseInAVase, RoseOfTrinsic, RoseOfTrinsicPetal, RottingCorpse, RoundPaperLantern, RoyalCirclet, RoyalGuardSurvivalKnife, Ruby, RuinedArmoire, RuinedBookcase, RuinedBooks, RuinedChair, RuinedClock, RuinedDrawers, RuinedFallenChairA, RuinedFallenChairB, RuinedPainting, RuinedPaintingArtifact, RuneBeetle, RuneBeetleCarapace, RuneBlade, Runebook, RunebookDyeTub, RuneCarvingKnife, RunedPrism, RunedSwitch, RunicDovetailSaw, RunicHammer, RunicSewingKit, SackFlour, SacrificialAltarAddon, SacrificialAltarDeed, SaddleArtifact, Sai, SakeArtifact, SalvageBag, SamaritanRobe, Samurai, SamuraiHelm, SamuraiTabi, Sand, Sandals, SandFlagstones, SandMiningBook, SandstoneFireplaceEastAddon, SandstoneFireplaceEastDeed, SandstoneFireplaceSouthAddon, SandstoneFireplaceSouthDeed, SandstoneFloorN, SandstoneFloorW, SandstoneFountainAddon, SandStonePatio, SandstonePatioDeed, SandVortex, Sapphire, Satyr, Sausage, SausagePizza, Savage, SavageMask, SavageRider, SavageRidgeback, SavageShaman, Saw, SawTrap, ScaledSwampDragon, Scales, ScarecrowAddon, ScarecrowComponent, ScarecrowDeed, Scepter, Schmendrick, SchmendrickApprenticeCorpse, SchmendrickScrollOfPower, Scimitar, Scissors, Scorp, Scorpion, Scourge, Scribe, ScribeBag, ScribesPen, ScribeStone, ScrollOfAbraxus, ScrollofAlacrity, ScrollofTranscendence, Sculptor, Sculpture1Artifact, Sculpture2Artifact, Scythe, SeaChart, SeaHorse, SeahorseStatuette, SeaSerpent, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, SecureTradeContainer, Seed, SeekerOfAdventure, SeerRobe, Semidar, Serado, SerpentineDragon, SerpentPillar, SerpentPillarAddon, SerpentsFang, ServantOfSemidar, Sewerrat, SewingKit, Sextant, SextantParts, Shade, ShadowDancerLeggings, ShadowFiend, ShadowIronElemental, ShadowIronGranite, ShadowIronIngot, ShadowIronOre, ShadowKnight, ShadowWisp, ShadowWispFamiliar, ShadowWyrm, Shaft, ShaminoCrossbow, ShardPoller, ShardThrasher, SheafOfHay, Sheep, ShepherdsCrook, ShieldOfInvulnerability, ShipModelOfTheHMSCape, ShipwreckedItem, Shipwright, Shirt, Shoes, ShojiLantern, ShojiScreen, ShortBeard, ShortCabinet, ShortHair, ShortMusicStand, ShortPants, ShortSpear, Shovel, ShrineOfWisdomAddon, ShrineOfWisdomComponent, ShroudOfDeciet, SHTeleComponent, SHTeleporter, Shuriken, Sigil, Sign, Silvani, SilvanisFeywoodBow, Silver, SilverBeadNecklace, SilverBracelet, SilverEarrings, SilverNecklace, SilverRing, SilverSerpent, SilverSteed, SilverWire, SkeletalDragon, SkeletalKnight, SkeletalMage, SkeletalMount, Skeleton, Skillet, SkillTeleporter, SkinnedDeerArtifact, SkinnedGoatArtifact, SkinningKnife, Skirt, SkitteringHopper, SkullCandleArtifact, SkullCap, SkullPileAddon, SkullPole, SlabOfBacon, SledgeHammer, Slime, SLWarHorse, SmallBagBall, SmallBedEastAddon, SmallBedEastDeed, SmallBedSouthAddon, SmallBedSouthDeed, SmallBlueBottle, SmallBlueFlask, SmallBoat, SmallBoatDeed, SmallBOD, SmallBrickHouseDeed, SmallBrownBottle, SmallCrate, SmallDockedBoat, SmallDockedDragonBoat, SmallDragonBoat, SmallDragonBoatDeed, SmallEmptyFlask, SmallEmptyPot, SmallFishingNetAddon, SmallFishingNetComponent, SmallFishingNetDeed, SmallFlask, SmallForgeAddon, SmallForgeDeed, SmallGreenBottle, SmallGreenBottle2, SmallOldHouse, SmallPlateJingasa, SmallPumpkin, SmallRedFlask, SmallShop, SmallSmithBOD, SmallStretchedHideEastAddon, SmallStretchedHideEastDeed, SmallStretchedHideSouthAddon, SmallStretchedHideSouthDeed, SmallTailorBOD, SmallTower, SmallTowerDeed, SmallTowerSculpture, SmallUrn, SmallVioletBottle, SmallWatermelon, SmallYellowFlask, SmithBag, SmithHammer, SmithStone, SmokeBomb, SmoothingPlane, Snake, SnowElemental, SnowLeopard, Snowman, SnowPile, SnowPileDeco, SnowyTree, SolenAntHole, SolenAntHoleComponent, SongOfSamlethe, SongWovenMantle, SOS, SoulSeeker, SoulStone, SoulstoneFragment, SoulstoneFragmentToken, Spam, SpawnedOrcishLord, Spawner, SpawnPersistence, Spear, SpecialBeardDye, SpecialDyeTub, SpecialFishingNet, SpecialHairDye, SpecialScroll, SpectralArmour, Spectre, Spellbook, SpellScroll, SpellweavingBook, SpellWovenBritches, SpidersSilk, SpikeTrap, SpinedHides, SpinedLeather, SpinningHourglass, SpinningwheelEastAddon, SpinningwheelEastDeed, SpinningwheelSouthAddon, SpinningwheelSouthDeed, SpiritOfTheTotem, SplitCoconut, SpoolOfThread, Spoon, SpoonLeft, SpoonRight, Springs, Spyglass, SquareGozaMatEastAddon, SquareGozaMatEastDeed, SquareGozaMatSouthAddon, SquareGozaMatSouthDeed, Squash, Squirrel, SquirrelFormTalisman, SquirrelStatueEastAddon, SquirrelStatueEastDeed, SquirrelStatueSouthAddon, SquirrelStatueSouthDeed, StaffOfPower, StaffOfTheMagi, StainedOoze, StandardPlateKabuto, StandingBrokenChairAddon, StandingBrokenChairComponent, StandingBrokenChairDeed, StarRoomGate, StarSapphire, StatCapScroll, Static, StatueEast, StatueEast2, StatueNorth, StatuePegasus, StatuePegasus2, StatueSouth, StatueSouth2, StatueSouthEast, StatuetteDyeTub, StatueWest, StealableArtifactsSpawner, StitchersMittens, StoneAnkh, StoneAnkhComponent, StoneAnkhDeed, StoneChair, StoneCrafter, StoneFaceTrap, StoneFaceTrapNoDamage, StoneFireplaceEastAddon, StoneFireplaceEastDeed, StoneFireplaceSouthAddon, StoneFireplaceSouthDeed, StoneFountainAddon, StoneGargoyle, StoneHarpy, StoneMiningBook, StoneOvenEastAddon, StoneOvenEastDeed, StoneOvenSouthAddon, StoneOvenSouthDeed, StonePaversDark, StonePaversLight, StonePaversMedium, StonePlasterHouseDeed, StoneStatueAddon, StoneStatueDeed, StoneWorkshopDeed, Stool, Stormgrip, StrangleScroll, StrawHat, StrengthPotion, StrengthScroll, StretchedHideArtifact, StrongBackpack, StrongBox, StrongBoxPuzzle, StrongholdMonolith, StrongMongbat, StrongWoodDoor, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLeggingsArtifact, StuddedLegs, StuddedMempo, StuddedSuneate, StuddedTunicArtifact, SturdyPickaxe, SturdyShovel, Subdue, Succubus, SuitOfGoldArmorAddon, SuitOfGoldArmorComponent, SuitOfGoldArmorDeed, SuitOfSilverArmorAddon, SuitOfSilverArmorComponent, SuitOfSilverArmorDeed, SulfurousAsh, SummonAirElementalScroll, SummonCreatureScroll, SummonDaemonScroll, SummonEarthElementalScroll, SummonedAirElemental, SummonedAntLion, SummonedArcticOgreLord, SummonedBakeKitsune, SummonedBogling, SummonedBullFrog, SummonedChicken, SummonedCow, SummonedDaemon, SummonedDoppleganger, SummonedEarthElemental, SummonedFireElemental, SummonedFrostSpider, SummonedGreatHart, SummonedLavaSerpent, SummonedOrcBrute, SummonedPaladin, SummonedPaladinMoongate, SummonedPanther, SummonedSheep, SummonedSkeletalKnight, SummonedVorpalBunny, SummonedWailingBanshee, SummonedWaterElemental, SummonFamiliarScroll, SummonFeyScroll, SummonFiendScroll, SummonFireElementalScroll, SummoningAltar, SummonWaterElementalScroll, Surcoat, SushiPlatter, SushiRolls, SwampDragon, SwampTentacle, SwampTile, SwarmOfFlies, SweetDough, SwitchItem, SwordDisplay1NorthArtifact, SwordDisplay1WestArtifact, SwordDisplay2NorthArtifact, SwordDisplay2WestArtifact, SwordDisplay3EastArtifact, SwordDisplay3SouthArtifact, SwordDisplay4NorthArtifact, SwordDisplay4WestArtifact, SwordDisplay5NorthArtifact, SwordDisplay5WestArtifact, SwordOfTheStampede, SwordsOfProsperity, TableWithBlueClothAddon, TableWithBlueClothDeed, TableWithOrangeClothAddon, TableWithOrangeClothDeed, TableWithPurpleClothAddon, TableWithPurpleClothDeed, TableWithRedClothAddon, TableWithRedClothDeed, Tailor, TailorBag, TailorGuildmaster, TailorStone, Taint, TaintedWool, TaleOfThreeTribes, TalesOfVesperVol1, TalkingToWisps, TallCabinet, TallElvenBedEastAddon, TallElvenBedEastDeed, TallElvenBedSouthAddon, TallElvenBedSouthDeed, TallMusicStand, TallStrawHat, TalonBite, Tambourine, TambourineTassel, TamingDragons, TanBook, Tanner, Tapestry1N, Tapestry2N, Tapestry2W, Tapestry3N, Tapestry3W, Tapestry4N, Tapestry4W, Tapestry5N, Tapestry5W, Tapestry6N, Tapestry6W, TapestryOfSosaria, TarotCardsArtifact, TatteredAncientMummyWrapping, TattsukeHakama, TavaraSewel, TavarasJournal1, TavarasJournal11, TavarasJournal14, TavarasJournal16, TavarasJournal16b, TavarasJournal17, TavarasJournal19, TavarasJournal2, TavarasJournal3, TavarasJournal6, TavarasJournal7, TavarasJournal8, TavarasJournal9, TavernKeeper, TaxidermyKit, TBWarHorse, TeapotNorthArtifact, TeapotWestArtifact, Tekagi, TelekinisisScroll, Teleporter, TeleportScroll, Telescope, TerathanAvenger, TerathanDrone, TerathanMatriarch, TerathanWarrior, Tessen, Tetsubo, ThatchedRoofCottageDeed, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheFight, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThickGrayStoneWall, Thief, ThiefGuildmaster, ThighBoots, ThinBrickWall, ThinLongsword, ThinStoneWall, Throne, ThrowingDagger, ThunderstormScroll, TillerMan, TimberWolf, Tinker, TinkerGuildmaster, TinkersTools, TinkerTools, TinyRedBottle, TinyYellowBottle, Titan, TitansHammer, TomasONeerlan, TomeOfEnlightenment, TomeOfLostKnowledge, Tongs, ToolKit, Torch, TormentedChains, TormentedMinotaur, Torso, TotalRefreshPotion, TotemOfVoid, Tourmaline, Tower, TowerDeed, TowerLanternArtifact, TownCrier, TownMonolith, TownStone, ToxicElemental, TradeGlasses, TrainingDummy, TrainingDummyEastAddon, TrainingDummyEastDeed, TrainingDummySouthAddon, TrainingDummySouthDeed, TransferItem, TransferItem, TransientItem, TranslatedGargoyleJournal, TrapableContainer, TrashBarrel, TrashChest, TreasureChestDirt, TreasureMap, TreasureMapChest, TreasuresOfTokunoPersistance, TreasureTrinketGlasses, TreatiseOnAlchemy, Treefellow, TreeStump, TreeStumpDeed, TreeTrunk, TribalBerry, TribalMask, TribalPaint, TribalSpear, TricorneHat, TripleFanNorthArtifact, TripleFanWestArtifact, Troglodyte, Troll, TrophyAddon, TrophyDeed, TropicalBird, TrulyRareFish, TsukiWolf, Tub, Tunic, TunicOfFire, Turnip, Turquoise, Twaulo, TwoHandedAxe, TwoPigTails, TwoStoryHouse, TwoStoryStonePlasterHouseDeed, TwoStoryVilla, TwoStoryWoodPlasterHouseDeed, UnbakedApplePie, UnbakedFruitPie, UnbakedMeatPie, UnbakedPeachCobbler, UnbakedPumpkinPie, UnbakedQuiche, UncookedCheesePizza, UncookedSausagePizza, UncutCloth, UnfinishedBarrel, UnholyBone, UnholyFamiliar, UnholySteed, Unicorn, UnlockScroll, UnmadeBedAddon, UnmadeBedDeed, UnsettlingPortraitAddon, UnsettlingPortraitComponent, UnsettlingPortraitDeed, Urn1Artifact, Urn2Artifact, Uzeraan, UzeraanTurmoilHorn, UzeraanTurmoilTeleporter, Vagabond, ValentinesCard, ValentinesCardEast, ValentinesCardSouth, ValoriteElemental, ValoriteGranite, ValoriteIngot, ValoriteOre, VampireBat, VampireBatFamiliar, VampiricEmbraceScroll, Vandyke, VanityAddon, VanityDeed, VarietyDealer, Vase, VaultOfSecretsBarrier, VendorBackpack, VendorRentalContract, VengefulSpiritScroll, VeriteElemental, VeriteGranite, VeriteIngot, VeriteOre, Veterinarian, Victoria, VikingSword, VillaDeed, Vines, VioletCourage, VioletRibbedFlask, VirtualMountItem, VirtualMountItem, VirtueBook, VoiceOfTheFallenKing, VorpalBunny, VultureHelm, WailingBanshee, Waiter, Wakizashi, WallBanner, WallBannerComponent, WallBannerDeed, WallBlood, WallOfStoneScroll, WallSconce, WallTorch, WallTorchAddon, WallTorchComponent, WallTorchDeed, Walrus, Wanderer, WandererOfTheVoid, WanderingHealer, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WarningItem, WarriorGuard, WarriorGuildmaster, WarriorStatueEastAddon, WarriorStatueEastDeed, WarriorStatueSouthAddon, WarriorStatueSouthDeed, Wasabi, WasabiClumps, WaterBarrel, WaterElemental, Watermelon, WaterTile, WaterTroughEastAddon, WaterTroughEastDeed, WaterTroughSouthAddon, WaterTroughSouthDeed, WaterVatEast, WaterVatSouth, WayPoint, WeakenScroll, WeaknessWand, WeaponEngravingTool, Weaponsmith, WeatherMap, Weaver, Web, WheatSheaf, Whip, WhippingVine, WhiteDriedFlowers, WhiteHangingLantern, WhiteMisoSoup, WhiteNinjaQuestTeleporter, WhitePearl, WhitePoinsettia, WhiteScales, WhiteSnowflake, WhiteStoneWall, WhiteWolf, WhiteWyrm, WideBrimHat, WildfireBow, WildfireScroll, WildGirlOfTheForest, WildStaff, WindChimes, WindsEdge, Windsong, WindSpirit, WingedHelm, WinterGiftPackage2003, Wisp, WitherScroll, WizardsGlasses, WizardsHat, WomanPortrait1, WomanPortrait2, WondrousFish, WoodDebris, WoodenBench, WoodenBowl, WoodenBowlOfCarrots, WoodenBowlOfCorn, WoodenBowlOfLettuce, WoodenBowlOfPeas, WoodenBowlOfStew, WoodenBowlOfTomatoSoup, WoodenBox, WoodenChair, WoodenChairCushion, WoodenChest, WoodenCoffinAddon, WoodenCoffinComponent, WoodenCoffinDeed, WoodenFootLocker, WoodenKiteShield, WoodenShield, WoodenThrone, WoodenTreasureChest, WoodHouseDeed, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WoodPlasterHouseDeed, Wool, WordOfDeathScroll, WorldMap, Wraith, WraithFormScroll, WrathOfTheDryad, WreathAddon, WreathDeed, WritingTable, Wyvern, Yamandon, YellowBeaker, YellowGourd, YellowScales, YewBoard, YewLog, YewWoodTable, YomotsuElder, YomotsuPriest, YomotsuWarrior, YoungNinja, YoungRonin, Yumi, Zeefzorpul, ZenRock1Artifact, ZenRock2Artifact, ZenRock3Artifact, Zoel, Zombie, ZoogiFungus, ZyronicClaw

+ Point3D Location( get; )
+ Map Map( get; )
+ Serial Serial( get; )
+ virtual void Delete()
+ virtual void ProcessDelta()
+ + diff --git a/Docs/types/IEntityEntry.html b/Docs/types/IEntityEntry.html new file mode 100644 index 0000000..e1a2dc3 --- /dev/null +++ b/Docs/types/IEntityEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - IEntityEntry + + +

Back to Server

+

(World) - IEntityEntry

+

Derived Types: GuildEntry, ItemEntry, MobileEntry

+ int Length( get; )
+ long Position( get; )
+ Serial Serial( get; )
+ int TypeID( get; )
+ + diff --git a/Docs/types/IFactionItem.html b/Docs/types/IFactionItem.html new file mode 100644 index 0000000..86cf47f --- /dev/null +++ b/Docs/types/IFactionItem.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IFactionItem + + +

Back to Server.Factions

+

IFactionItem

+

Derived Types: AcidProofRobe, Aegis, AegisOfGrace, AncientFarmersKasa, AncientSamuraiDo, ANecromancerShroud, AnthropomorphistGlasses, ArcaneShield, ArcticDeathDealer, ArmorOfFortune, ArmsOfTacticalExcellence, ArtsGlasses, AssassinSpike, Axe, AxeOfTheHeavens, Bandana, Bardiche, Bascinet, BaseArmor, BaseAxe, BaseBashing, BaseCloak, BaseClothing, BaseGlovesOfMining, BaseHat, BaseKnife, BaseMeleeWeapon, BaseMiddleTorso, BaseOuterLegs, BaseOuterTorso, BasePants, BasePoleArm, BaseRanged, BaseShield, BaseShirt, BaseShoes, BaseSpear, BaseStaff, BaseSword, BaseWaist, BaseWand, BaseWeapon, BattleAxe, BearMask, BlackLotusHood, BlackStaff, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BlazeOfDeath, BlightGrippedLongbow, BodySash, Bokuto, BoneArms, BoneChest, BoneCrusher, BoneGloves, BoneHarvester, BoneHelm, BoneLegs, Bonesmasher, Bonnet, Boomstick, Boots, Bow, BowOfTheJukaKing, BrambleCoat, BraveKnightOfTheBritannia, BreathOfTheDead, Broadsword, BronzeShield, Buckler, BurglarsBandana, ButcherKnife, Calm, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CavortingClub, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChaosShield, ChylothStaff, Circlet, Cleaver, Cloak, CloseHelm, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyWand, ColdBlood, ColdForgedBlade, CompositeBow, CrescentBlade, CrimsonCincture, Crossbow, CrownOfTalKeesh, Cutlass, DaemonArms, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DarkenedSky, DeathRobe, DecorativePlateKabuto, DeerMask, DemonForks, DetectiveBoots, DiamondMace, DivineCountenance, DoubleAxe, DoubleBladedStaff, Doublet, DragonArms, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, DreadPirateHat, DupresShield, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenGlasses, ElvenMachete, ElvenPants, ElvenShirt, ElvenSpellblade, EmbroideredOakLeafCloak, EnchantedTitanLegBone, ExecutionersAxe, Exiler, FancyDress, FancyShirt, FangOfRactus, FeatheredHat, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FeyLeggings, FireballWand, FireworksWand, Fists, FleshRipper, FloppyHat, FlowerGarland, FoldedSteelGlasses, FormalShirt, Frostbringer, FullApron, FurBoots, FurCape, FurSarong, GargoylesPickaxe, GauntletsOfNobility, GemmedCirclet, GildedDress, GlacialStaff, GladiatorsCollar, GlovesOfThePugilist, GlovesOfTheSun, GnarledStaff, GreaterHealWand, GuantletsOfAnger, Hakama, HakamaShita, Halberd, HalfApron, HammerPick, HanzosBow, HarmWand, Hatchet, HatOfTheMagi, HealWand, HeartOfTheLion, HeaterShield, HeavyCrossbow, HeavyPlateJingasa, Helmet, HelmOfInsight, HelmOfSwiftness, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, HolyKnightsBreastplate, HolySword, HoodedShroudOfShadows, HornedTribalMask, HuntersHeaddress, IDWand, InquisitorsResolution, IronwoodCrown, JackalsCollar, JesterHat, JesterHatofChuckles, JesterSuit, JinBaori, JukaBow, Kama, Kamishimo, Kasa, KasaOfTheRajin, Katana, Kilt, Kryss, Lajatang, Lance, LargeBattleAxe, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, LeurociansMempoOfFortune, LieutenantOfTheBritannianRoyalGuard, LightningWand, LightOfWayGlasses, LightPlateJingasa, LongPants, Longsword, LuminousRuneBlade, LunaLance, LyricalGlasses, Mace, MaceShieldGlasses, MagicalShortbow, MagicArrowWand, MagicWand, MagicWizardsHat, MaleElvenRobe, MaleKimono, ManaDrainWand, MaritimeGlasses, Maul, MelisandesCorrodedHatchet, MetalKiteShield, MetalShield, MidnightBracers, MonkRobe, NecromanticGlasses, NightsKiss, NinjaTabi, NoDachi, NorseHelm, NoxRangersHeavyCrossbow, Nunchaku, Obi, OblivionsNeedle, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishVisage, OrderShield, OrnateAxe, OrnateCrownOfTheHarrower, OverseerSunderedBlade, Pacify, PadsOfTheCuSidhe, PeasantsBokuto, PhantomStaff, Pickaxe, Pike, PilferedDancerFans, Pitchfork, PixieSwatter, PlainDress, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PoisonedGlasses, PolarBearMask, ProspectorsTool, QuarterStaff, Quell, RadiantScimitar, RaedsGlory, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerLegs, RavenHelm, RepeatingCrossbow, RewardCloak, RewardDress, RewardRobe, RighteousAnger, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RoyalCirclet, RoyalGuardSurvivalKnife, RuneBeetleCarapace, RuneBlade, RuneCarvingKnife, Sai, SamaritanRobe, SamuraiHelm, SamuraiTabi, Sandals, SavageMask, Scepter, Scimitar, Scythe, SerpentsFang, ShadowDancerLeggings, ShaminoCrossbow, ShardThrasher, ShepherdsCrook, ShieldOfInvulnerability, Shirt, Shoes, ShortPants, ShortSpear, ShroudOfDeciet, SilvanisFeywoodBow, SkinningKnife, Skirt, SkullCap, SmallPlateJingasa, SongWovenMantle, SoulSeeker, Spear, SpellWovenBritches, SpiritOfTheTotem, StaffOfPower, StaffOfTheMagi, StandardPlateKabuto, StitchersMittens, Stormgrip, StrawHat, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLegs, StuddedMempo, StuddedSuneate, SturdyPickaxe, Subdue, Surcoat, SwordOfTheStampede, SwordsOfProsperity, TallStrawHat, TalonBite, TattsukeHakama, Tekagi, Tessen, Tetsubo, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThighBoots, ThinLongsword, TitansHammer, TradeGlasses, TreasureTrinketGlasses, TribalMask, TribalSpear, TricorneHat, Tunic, TunicOfFire, TwoHandedAxe, VikingSword, VioletCourage, VoiceOfTheFallenKing, VultureHelm, Wakizashi, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WeaknessWand, WideBrimHat, WildfireBow, WildStaff, WindsEdge, Windsong, WingedHelm, WizardsGlasses, WizardsHat, WoodenKiteShield, WoodenShield, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WrathOfTheDryad, Yumi, ZyronicClaw

+ FactionItem FactionItemState( get; set; )
+ + diff --git a/Docs/types/IFirewallEntry.html b/Docs/types/IFirewallEntry.html new file mode 100644 index 0000000..b2cb28f --- /dev/null +++ b/Docs/types/IFirewallEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IFirewallEntry + + +

Back to Server

+

(Firewall) - IFirewallEntry

+

Derived Types: CIDRFirewallEntry, IPFirewallEntry, WildcardIPFirewallEntry

+ virtual bool IsBlocked( IPAddress address )
+ + diff --git a/Docs/types/IFlourMill.html b/Docs/types/IFlourMill.html new file mode 100644 index 0000000..8ec6b9c --- /dev/null +++ b/Docs/types/IFlourMill.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IFlourMill + + +

Back to Server.Items

+

IFlourMill

+

Derived Types: FlourMillEastAddon, FlourMillSouthAddon

+ int CurFlour( get; set; )
+ int MaxFlour( get; )
+ + diff --git a/Docs/types/IGumpWriter.html b/Docs/types/IGumpWriter.html new file mode 100644 index 0000000..d3ac4d1 --- /dev/null +++ b/Docs/types/IGumpWriter.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - IGumpWriter + + +

Back to Server.Network

+

IGumpWriter

+

Derived Types: DisplayGumpFast, DisplayGumpPacked

+ int Switches( get; set; )
+ int TextEntries( get; set; )
+ virtual void AppendLayout( bool val )
+ virtual void AppendLayout( int val )
+ virtual void AppendLayout( byte[] buffer )
+ virtual void AppendLayout( string text )
+ virtual void AppendLayoutNS( int val )
+ virtual void Flush()
+ virtual void WriteStrings( List<String> strings )
+ + diff --git a/Docs/types/IHSFlags.html b/Docs/types/IHSFlags.html new file mode 100644 index 0000000..83522e5 --- /dev/null +++ b/Docs/types/IHSFlags.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IHSFlags + + +

Back to Server.Misc

+

IHSFlags (Enum)

+ None = 0x00000000,
+ OnDamaged = 0x00000001,
+ OnDeath = 0x00000002,
+ OnMovement = 0x00000004,
+ All = 0x00000007,
+ OnSpeech = 0x00000008
+ + diff --git a/Docs/types/IHasQuantity.html b/Docs/types/IHasQuantity.html new file mode 100644 index 0000000..1c60711 --- /dev/null +++ b/Docs/types/IHasQuantity.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IHasQuantity + + +

Back to Server.Items

+

IHasQuantity

+

Derived Types: AdmiralsHeartyRum, BaseBeverage, BaseWaterContainer, BeverageBottle, Bucket, CeramicMug, GlassMug, Goblet, IWaterSource, Jug, PewterMug, Pitcher, SackFlour, Tub, WaterBarrel, WaterTroughEastAddon, WaterTroughSouthAddon

+ int Quantity( get; set; )
+ + diff --git a/Docs/types/IHonorTarget.html b/Docs/types/IHonorTarget.html new file mode 100644 index 0000000..154222f --- /dev/null +++ b/Docs/types/IHonorTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IHonorTarget + + +

Back to Server

+

IHonorTarget

+

Derived Types: AbysmalHorror, Actor, AgapiteElemental, AirElemental, AlbertaGiacco, Alchemist, Alligator, AncientLich, AncientWyrm, AnimalTrainer, AnsellaGryen, AntLion, ArcaneDaemon, ArcaneFey, ArcaneFiend, Architect, ArcticOgreLord, Armorer, Artist, BakeKitsune, Baker, Balron, Banker, Bard, BardGuildmaster, Barkeeper, Barracoon, BaseAmbitiousSolenQueen, BaseChampion, BaseCreature, BaseEnraged, BaseEscortable, BaseFactionGuard, BaseFactionVendor, BaseFamiliar, BaseGuildmaster, BaseHealer, BaseMount, BaseQuester, BaseShieldGuard, BaseSolenMatriarch, BaseTalismanSummon, BaseVendor, BaseWarHorse, Beekeeper, Beetle, Betrayer, Bird, BlackAmbitiousSolenQueen, BlackBear, Blackheart, Blacksmith, BlacksmithGuildmaster, BlackSolenInfiltratorQueen, BlackSolenInfiltratorWarrior, BlackSolenMatriarch, BlackSolenQueen, BlackSolenWarrior, BlackSolenWorker, BladeSpirits, BloodElemental, Boar, Bogle, Bogling, BogThing, BoneDemon, BoneKnight, BoneMagi, Bowyer, BrideGroom, Brigand, BronzeElemental, BrownBear, Bull, BullFrog, Butcher, CapturedHordeMinion, Carpenter, Cat, Centaur, ChaosDaemon, ChaosDragoon, ChaosDragoonElite, ChaosGuard, Chicken, Chyloth, Clone, Cobbler, CoMWarHorse, Cook, CopperElemental, Corpser, CorrosiveSlime, CorruptedSoul, Cougar, Cow, Crane, CrystalElemental, Cursed, CursedSoul, CuSidhe, CustomHairstylist, Cyclops, Daemon, DarknightCreeper, DarkWisp, DarkWolfFamiliar, DeadlyImp, DeathAdder, DeathwatchBeetle, DeathwatchBeetleHatchling, DeepSeaSerpent, DemonKnight, DesertOstard, Devourer, DireWolf, DiseasedCat, Dog, Dolphin, Doppleganger, Dragon, Drake, DreadSpider, Dryad, DullCopperElemental, Dummy, DummyAssassin, DummyFence, DummyHealer, DummyMace, DummyNox, DummyStun, DummySuper, DummySword, DummyTheif, Eagle, EarthElemental, Efreet, ElderGazer, EliteNinja, ElwoodMcCarrin, Emino, EnergyVortex, EnragedBlackBear, EnragedEagle, EnragedHart, EnragedHind, EnragedRabbit, EnshroudedFigure, EnslavedGargoyle, EscortableMage, EtherealWarrior, Ettin, EvilHealer, EvilMage, EvilMageLord, EvilWanderingHealer, Executioner, ExodusMinion, ExodusOverseer, FactionBerserker, FactionBoardVendor, FactionBottleVendor, FactionDeathKnight, FactionDragoon, FactionHenchman, FactionHorseVendor, FactionKnight, FactionMercenary, FactionNecromancer, FactionOreVendor, FactionPaladin, FactionReagentVendor, FactionSorceress, FactionWarHorse, FactionWizard, FanDancer, Farmer, FerelTreefellow, Ferret, FetidEssence, FierceDragon, FireBeetle, FireElemental, FireGargoyle, FireSteed, FisherGuildmaster, Fisherman, FleshGolem, FleshRenderer, ForestOstard, FortuneTeller, FrenziedOstard, FrostOoze, FrostSpider, FrostTroll, Furtrader, GabrielPiete, Gaman, Gargoyle, GargoyleDestroyer, GargoyleEnforcer, Gazer, GazerLarva, Ghoul, GiantBlackWidow, GiantIceWorm, GiantRat, GiantSerpent, GiantSpider, GiantToad, Gibberling, Glassblower, Goat, GoldenElemental, Golem, GolemController, GolemCrafter, GoreFiend, Gorilla, GreaterDragon, GreaterMongbat, GreatHart, GreyWolf, GrimmochDrummel, Grizelda, GrizzledMare, GrizzlyBear, Guardian, Gypsy, GypsyAnimalTrainer, GypsyBanker, GypsyMaiden, HairStylist, Haochi, HaochisGuardsman, HarborMaster, Harpy, Harrower, HarrowerTentacles, HeadlessOne, Healer, HealerGuildmaster, HellCat, HellHound, HellSteed, Henchman, Herbalist, HiddenFigure, Hind, Hiryu, HolyFamiliar, HolyMage, HolySteed, HordeMinion, HordeMinionFamiliar, Horse, Horus, IceElemental, IceFiend, IceSerpent, IceSnake, IharaSoko, Ilhenir, Imp, Impaler, Impresario, InjuredWolf, InnKeeper, InterredGrizzle, IronWorker, JackRabbit, JedahEntille, Jeweler, Juggernaut, JukaLord, JukaMage, JukaWarrior, Jwilson, Kappa, KazeKemono, KeeperOfChivalry, KhaldunRevenant, KhaldunSummoner, KhaldunZealot, Kirin, Kraken, LadyOfTheSnow, LavaLizard, LavaSerpent, LavaSnake, LeatherWorker, LesserHiryu, Leviathan, Lich, LichLord, Lizardman, Llama, LordOaks, LysanderGathenwale, Maabus, Mage, MageGuildmaster, MansionGuard, Mapmaker, Mardoth, MeerCaptain, MeerEternal, MeerMage, MeerWarrior, Mephitis, Meraktus, Merchant, MerchantGuildmaster, Messenger, MilitiaCanoneer, MilitiaFighter, Miller, MinaxWarHorse, Miner, MinerGuildmaster, Minotaur, MinotaurCaptain, MinotaurScout, Minter, MLDryad, Moloch, Mongbat, Monk, MorgBergen, MoundOfMaggots, MountainGoat, Mummy, Naturalist, NatureFury, Neira, Nightmare, Ninja, Noble, Ogre, OgreLord, Oni, OphidianArchmage, OphidianKnight, OphidianMage, OphidianMatriarch, OphidianWarrior, Orc, OrcBomber, OrcBrute, OrcCaptain, OrcishLord, OrcishMage, OrderGuard, PackHorse, PackLlama, Panther, Parrot, PatchworkSkeleton, Peasant, PestilentBandage, Phoenix, Pig, Pixie, PlagueBeast, PlagueBeastLord, PlagueSpawn, PlayerBarkeeper, PlayerMobile, PoisonElemental, PolarBear, PredatorHellCat, PricedHealer, Provisioner, Quagmire, Rabbit, RagingGrizzlyBear, RaiJu, Rancher, Ranger, RangerGuildmaster, Rat, Ratman, RatmanArcher, RatmanMage, Ravager, RealEstateBroker, Reaper, RedAmbitiousSolenQueen, RedSolenInfiltratorQueen, RedSolenInfiltratorWarrior, RedSolenMatriarch, RedSolenQueen, RedSolenWarrior, RedSolenWorker, Relnia, Reptalon, RestlessSoul, Revenant, RevenantLion, RidableLlama, Ridgeback, Rikktor, Ronin, RottingCorpse, RuneBeetle, Samurai, SandVortex, Satyr, Savage, SavageRider, SavageRidgeback, SavageShaman, ScaledSwampDragon, Schmendrick, Scorpion, Scribe, Sculptor, SeaHorse, SeaSerpent, SeekerOfAdventure, Semidar, Serado, SerpentineDragon, ServantOfSemidar, Sewerrat, Shade, ShadowFiend, ShadowIronElemental, ShadowKnight, ShadowWisp, ShadowWispFamiliar, ShadowWyrm, Sheep, Shipwright, Silvani, SilverSerpent, SilverSteed, SkeletalDragon, SkeletalKnight, SkeletalMage, SkeletalMount, Skeleton, SkitteringHopper, Slime, SLWarHorse, Snake, SnowElemental, SnowLeopard, SpawnedOrcishLord, SpectralArmour, Spectre, Squirrel, StoneCrafter, StoneGargoyle, StoneHarpy, StrongMongbat, Succubus, SummonedAirElemental, SummonedAntLion, SummonedArcticOgreLord, SummonedBakeKitsune, SummonedBogling, SummonedBullFrog, SummonedChicken, SummonedCow, SummonedDaemon, SummonedDoppleganger, SummonedEarthElemental, SummonedFireElemental, SummonedFrostSpider, SummonedGreatHart, SummonedLavaSerpent, SummonedOrcBrute, SummonedPaladin, SummonedPanther, SummonedSheep, SummonedSkeletalKnight, SummonedVorpalBunny, SummonedWailingBanshee, SummonedWaterElemental, SwampDragon, SwampTentacle, Tailor, TailorGuildmaster, Tanner, TavaraSewel, TavernKeeper, TBWarHorse, TerathanAvenger, TerathanDrone, TerathanMatriarch, TerathanWarrior, Thief, ThiefGuildmaster, TimberWolf, Tinker, TinkerGuildmaster, Titan, TomasONeerlan, TormentedMinotaur, ToxicElemental, Treefellow, Troglodyte, Troll, TropicalBird, TsukiWolf, Twaulo, UnholyFamiliar, UnholySteed, Unicorn, Uzeraan, Vagabond, ValoriteElemental, VampireBat, VampireBatFamiliar, VarietyDealer, VeriteElemental, Veterinarian, Victoria, VorpalBunny, WailingBanshee, Waiter, Walrus, WandererOfTheVoid, WanderingHealer, WarriorGuildmaster, WaterElemental, Weaponsmith, Weaver, WhippingVine, WhiteWolf, WhiteWyrm, Wisp, Wraith, Wyvern, Yamandon, YomotsuElder, YomotsuPriest, YomotsuWarrior, YoungNinja, YoungRonin, Zeefzorpul, Zoel, Zombie

+ HonorContext ReceivedHonorContext( get; set; )
+ + diff --git a/Docs/types/IHued.html b/Docs/types/IHued.html new file mode 100644 index 0000000..3938b8e --- /dev/null +++ b/Docs/types/IHued.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IHued + + +

Back to Server

+

IHued

+

Derived Types: AbbatoirAddon, AbbatoirDeed, AbysmalHorror, AcidProofRobe, AcidSlime, Actor, AddonComponent, AddonContainerComponent, AdminRobe, AdmiralsHeartyRum, Aegis, AegisOfGrace, Afro, AgapiteElemental, AgapiteGranite, AgapiteIngot, AgapiteOre, AgilityPotion, AgilityScroll, AirElemental, AlbertaGiacco, Alchemist, AlchemistsBauble, AlchemistTableEastAddon, AlchemistTableEastDeed, AlchemistTableSouthAddon, AlchemistTableSouthDeed, AlchemyBag, AlchemyStone, Alligator, Amber, Amethyst, AncientFarmersKasa, AncientLich, AncientSamuraiDo, AncientSmithyHammer, AncientUrn, AncientWyrm, ANecromancerShroud, AniLargeVioletFlask, AnimalTrainer, AnimateDeadScroll, AniRedRibbedFlask, AniSmallBlueFlask, AnkhNorth, AnkhOfSacrificeAddon, AnkhOfSacrificeComponent, AnkhOfSacrificeDeed, AnkhWest, AnsellaGryen, AnthropomorphistGlasses, AntLion, Anvil, AnvilComponent, AnvilEastAddon, AnvilEastDeed, AnvilSouthAddon, AnvilSouthDeed, Apple, ApplePie, AppleTreeAddon, AppleTreeDeed, AppleTrunkAddon, AppleTrunkDeed, ArcaneBookshelfEastAddon, ArcaneBookshelfEastDeed, ArcaneBookshelfSouthAddon, ArcaneBookshelfSouthDeed, ArcaneCircleAddon, ArcaneCircleDeed, ArcaneCircleScroll, ArcaneDaemon, ArcaneEmpowermentScroll, ArcaneFey, ArcaneFiend, ArcaneFocus, ArcaneGem, ArcaneShield, ArcanistStatueEastAddon, ArcanistStatueEastDeed, ArcanistStatueSouthAddon, ArcanistStatueSouthDeed, ArchCureScroll, ArcherGuard, ArcheryButte, ArcheryButteAddon, ArcheryButteDeed, Architect, ArchProtectionScroll, ArcticDeathDealer, ArcticOgreLord, Armoire, Armorer, ArmorOfFortune, ArmsAndWeaponsPrimer, ArmsOfTacticalExcellence, Arrow, ArtifactLargeVase, ArtifactVase, Artist, ArtsGlasses, AshBoard, AshLog, AssassinSpike, AttuneWeaponScroll, AwaseMisoSoup, AwesomeDisturbingPortraitAddon, AwesomeDisturbingPortraitComponent, AwesomeDisturbingPortraitDeed, Axe, AxeOfTheHeavens, Axle, AxleGears, Backgammon, Backpack, BackpackArtifact, Bacon, BadCard, Bag, BagOfAllReagents, BagOfingots, BagOfNecroReagents, BagOfReagents, BagOfSending, BakeKitsune, Baker, BallOfSummoning, BallotBox, BallotBoxAddon, BallotBoxDeed, Balron, BambooChair, BambooFlute, BambooScreen, Banana, Bananas, Bandage, Bandana, BankBox, BankCheck, Banker, BankerCamp, Banner, BannerDeed, BarbedHides, BarbedLeather, Bard, BardGuildmaster, Bardiche, BarkeepContract, Barkeeper, BarkFragment, Barracoon, BarredMetalDoor, BarredMetalDoor2, Barrel, BarrelHoops, BarrelLid, BarrelStaves, BarrelTap, Bascinet, BaseAddon, BaseAddonContainer, BaseAddonContainerDeed, BaseAddonDeed, BaseAgilityPotion, BaseAmbitiousSolenQueen, BaseArmor, BaseAxe, BaseBagBall, BaseBashing, BaseBeverage, BaseBoard, BaseBoat, BaseBoatDeed, BaseBook, BaseBracelet, BaseBulletinBoard, BaseCamp, BaseChampion, BaseCloak, BaseClothing, BaseClothMaterial, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseContainer, BaseCreature, BaseCurePotion, BaseDecorationArtifact, BaseDecorationContainerArtifact, BaseDockedBoat, BaseDoor, BaseEarrings, BaseEnraged, BaseEquipableLight, BaseEscortable, BaseExplosionPotion, BaseFactionGuard, BaseFactionTrap, BaseFactionTrapDeed, BaseFactionVendor, BaseFamiliar, BaseFloor, BaseFormTalisman, BaseFruitTreeAddon, BaseGlovesOfMining, BaseGranite, BaseGuard, BaseGuildmaster, BaseHarvestTool, BaseHat, BaseHealer, BaseHealPotion, BaseHides, BaseHouse, BaseHouseDoor, BaseImprisonedMobile, BaseIngot, BaseInstrument, BaseJewel, BaseKnife, BaseLeather, BaseLight, BaseMagicFish, BaseMeleeWeapon, BaseMiddleTorso, BaseMonolith, BaseMount, BaseMulti, BaseNecklace, BaseOre, BaseOuterLegs, BaseOuterTorso, BasePants, BasePiece, BasePigmentsOfTokuno, BasePlayerBB, BasePoisonPotion, BasePoleArm, BasePotion, BaseQuester, BaseQuiver, BaseRanged, BaseReagent, BaseRefreshPotion, BaseRejuvinationAnkh, BaseRing, BaseRunicTool, BaseScales, BaseShield, BaseShieldGuard, BaseShirt, BaseShoes, BaseSign, BaseSolenMatriarch, BaseSpear, BaseStaff, BaseStrengthPotion, BaseSuit, BaseSword, BaseSystemController, BaseTalisman, BaseTalismanSummon, BaseTool, BaseTrap, BaseTreasureChest, BaseVendor, BaseWaist, BaseWall, BaseWand, BaseWarHorse, BaseWaterContainer, BaseWeapon, BaseWindChimes, Basket, Basket1Artifact, Basket2Artifact, Basket3NorthArtifact, Basket3WestArtifact, Basket4Artifact, Basket5NorthArtifact, Basket5WestArtifact, Basket6Artifact, BattleAxe, BatWing, Beads, Beard, BearMask, BedOfNailsAddon, BedOfNailsComponent, BedOfNailsDeed, Bedroll, Beekeeper, Beeswax, Beetle, BellOfTheDead, BentoBox, Betrayer, BeverageBottle, BigElvenChair, BigFish, Bird, BirdsOfBritannia, BlackAmbitiousSolenQueen, BlackBear, BlackDyeTub, Blackheart, BlackLotusHood, BlackPearl, BlackScales, Blacksmith, BlacksmithGuildmaster, BlackSolenInfiltratorQueen, BlackSolenInfiltratorWarrior, BlackSolenMatriarch, BlackSolenQueen, BlackSolenWarrior, BlackSolenWorker, BlackStaff, BlackthornWelcomeBook, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BladeSpirits, BladeSpiritsScroll, BlankMap, BlankScroll, BlazeDyeTub, BlazeOfDeath, BlessScroll, Blight, BlightGrippedLongbow, Blocker, Blood, BloodElemental, Bloodmoss, BloodOathScroll, BloodPentagram, BloodwoodBoard, BloodwoodLog, BloodwoodSpirit, BloodyPentagramAddon, BloodyPentagramComponent, BloodyPentagramDeed, BloodyWaterArtifact, Blowpipe, BlueBeaker, BlueBook, BlueCurvedFlask, BlueDecorativeRugAddon, BlueDecorativeRugDeed, BlueDiamond, BlueFancyRugAddon, BlueFancyRugDeed, BlueNinjaQuestTeleporter, BluePlainRugAddon, BluePlainRugDeed, BlueScales, BlueSlateFloorCenter, BlueSnowflake, BlueSoulstone, Boar, Board, BodySash, Bogle, Bogling, BogThing, BoilingCauldronAddon, BoilingCauldronDeed, Bokuto, Bola, BolaBall, BoldStranger, Bolt, BoltOfCloth, Bone, BoneArms, BoneChest, BoneCouchAddon, BoneCouchComponent, BoneCouchDeed, BoneCrusher, BoneDemon, BoneGloves, BoneHarvester, BoneHelm, BoneKnight, BoneLegs, BoneMagi, BonePile, Bonesmasher, BoneTableAddon, BoneTableDeed, BoneThroneAddon, BoneThroneComponent, BoneThroneDeed, Bonnet, BookOfBushido, BookOfChivalry, BookOfNinjitsu, BooksFaceDownArtifact, BooksNorthArtifact, BooksWestArtifact, Boomstick, Boots, Bottle, BottleArtifact, Bow, BowlArtifact, BowlFlour, BowlsHorizontalArtifact, BowlsVerticalArtifact, BowOfTheJukaKing, Bowyer, BraceletOfBinding, BraceletOfHealth, BrambleCoat, BraveKnightOfTheBritannia, Brazier, BrazierArtifact, BrazierTall, BreadLoaf, BreathOfTheDead, BrickHouseDeed, BricksFloor1, BricksFloor2, BrideGroom, Brigand, BrigandCamp, BrightlyColoredEggs, BrilliantAmber, BritannianFlora, BroadcastCrystal, Broadsword, BrocadeGozaMatEastAddon, BrocadeGozaMatEastDeed, BrocadeGozaMatSouthAddon, BrocadeGozaMatSouthDeed, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatEastDeed, BrocadeSquareGozaMatSouthAddon, BrocadeSquareGozaMatSouthDeed, BrokenArmoireAddon, BrokenArmoireComponent, BrokenArmoireDeed, BrokenBedAddon, BrokenBedDeed, BrokenBookcaseAddon, BrokenBookcaseComponent, BrokenBookcaseDeed, BrokenChair, BrokenChestOfDrawersAddon, BrokenChestOfDrawersComponent, BrokenChestOfDrawersDeed, BrokenCoveredChairAddon, BrokenCoveredChairComponent, BrokenCoveredChairDeed, BrokenFallenChairAddon, BrokenFallenChairComponent, BrokenFallenChairDeed, BrokenVanityAddon, BrokenVanityDeed, BronzeElemental, BronzeGranite, BronzeIngot, BronzeOre, BronzeShield, BronzeStatueMaker, BrownBear, BrownBearRugEastAddon, BrownBearRugEastDeed, BrownBearRugSouthAddon, BrownBearRugSouthDeed, BrownBook, Bucket, Buckler, BulkOrderBook, Bull, BulletinBoard, BulletinMessage, BullFrog, BunnyHole, BunsHair, BurglarsBandana, BurningOfTrinsic, BustEast, BustSouth, Butcher, ButcherKnife, Cabbage, Cake, CakeMix, CallToAnarchy, Calm, Campfire, Candelabra, CandelabraOfSouls, CandelabraStand, Candle, CandleLarge, CandleLong, CandleShort, CandleSkull, CandyCane, Cannon, CannonAddon, CannonAddonComponent, CannonComponent, CannonDeed, Cantaloupe, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CapturedEssence, CapturedHordeMinion, Cards, Cards2, Cards3, Cards4, Carpenter, Carrot, Castle, CastleDeed, Cat, Cauldron, CaveFloorCenter, CaveFloorEast, CaveFloorNorth, CaveFloorSouth, CaveFloorWest, CavortingClub, Centaur, CeramicMug, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChainLightningScroll, ChampionAltar, ChampionPlatform, ChampionSkull, ChampionSkullBrazier, ChampionSkullPlatform, ChampionSpawn, ChaosDaemon, ChaosDragoon, ChaosDragoonElite, ChaosGuard, ChaosShield, CharacterStatue, CharacterStatueDeed, CharacterStatueMaker, CharacterStatuePlinth, ChargerOfTheFallen, CheckerBoard, Checkers, Checkers2, CheesePizza, CheeseSlice, CheeseWedge, CheeseWheel, CherryArmoire, CherryBlossomTreeAddon, CherryBlossomTreeDeed, CherryBlossomTrunkAddon, CherryBlossomTrunkDeed, Chessboard, Chessmen, Chessmen2, Chessmen3, ChestOfHeirlooms, Chicken, ChickenLeg, ChildrenTalesVol2, ChiselsNorth, ChiselsWest, Chyloth, ChylothShroud, ChylothStaff, CinnamonFancyRugAddon, CinnamonFancyRugDeed, Circlet, Citrine, CityMap, Cleaver, Cloak, Clock, ClockFrame, ClockLeft, ClockParts, ClockRight, ClockworkAssembly, Clone, ClosedBarrel, CloseHelm, Cloth, ClothingBlessDeed, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyScroll, ClumsyWand, Coal, Cobbler, CobblestonesFloor, Coconut, CocoonArtifact, ColdBlood, ColdForgedBlade, ColoredAnvil, CommodityDeed, CommodityDeedBox, CompositeBow, CoMWarHorse, ConfirmationMoongate, ConflagrationPotion, ConfusionBlastPotion, Container, ContestMiniHouse, ContestMiniHouseDeed, ContractOfEmployment, ControlPanel, Cook, CookableFood, CookedBird, CookieMix, Cookies, CopperElemental, CopperGranite, CopperIngot, CopperOre, CopperWire, Corpse, Corpser, CorpseSkinScroll, CorrosiveSlime, CorruptedSoul, Corruption, Cotton, Cougar, CounselorRobe, CoveredChair, Cow, Crane, CreateFoodScroll, CreatureBackpack, CreepyPortraitAddon, CreepyPortraitComponent, CreepyPortraitDeed, CrescentBlade, CrimsonCincture, Crossbow, CrossbowBolts, CrownOfTalKeesh, CrystalCaveBarrier, CrystalElemental, CunningScroll, CupsArtifact, CurePotion, CureScroll, Cursed, CursedSoul, CurseScroll, CurseWeaponScroll, CurtainsAddon, CurtainsComponent, CurtainsDeed, CurvedFlask, CuSidhe, CuSidheFormTalisman, CustomHairstylist, Cutlass, Cyclops, Daemon, DaemonArms, DaemonBlood, DaemonBloodChest, DaemonBone, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DamagedBooksArtifact, DarkenedSky, DarkFlowerTapestryEastAddon, DarkFlowerTapestryEastDeed, DarkFlowerTapestrySouthAddon, DarkFlowerTapestrySouthDeed, DarknightCreeper, DarkSandstoneFloorN, DarkSandstoneFloorW, DarkSapphire, DarkSource, DarkTidesHorn, DarkTidesTeleporter, DarkWisp, DarkWolfFamiliar, DarkWoodDoor, DarkWoodGate, DarkWoodHouseDoor, DarkWoodWall, DarkYarn, DartBoard, DartBoardEastAddon, DartBoardEastDeed, DartBoardSouthAddon, DartBoardSouthDeed, Dates, DawnsMusicBox, DawnsMusicGear, DeadlyImp, DeadlyPoisonPotion, DeadWood, DeathAdder, DeathRobe, DeathShroud, DeathwatchBeetle, DeathwatchBeetleHatchling, DecayedCorpse, DeceitBrazier, DeceitDungeonOfHorror, DecoArrowShafts, DecoBlackmoor, DecoBloodspawn, DecoBottlesOfLiquor, DecoBridle, DecoBridle2, DecoBrimstone, DecoCards5, DecoCrystalBall, DecoDeckOfTarot, DecoDeckOfTarot2, DecoDragonsBlood, DecoDragonsBlood2, DecoEyeOfNewt, DecoFlower, DecoFlower2, DecoFullJar, DecoFullJars3, DecoFullJars4, DecoGarlic, DecoGarlic2, DecoGarlicBulb, DecoGarlicBulb2, DecoGinseng, DecoGinseng2, DecoGinsengRoot, DecoGinsengRoot2, DecoGoldIngot, DecoGoldIngot2, DecoGoldIngots, DecoGoldIngots2, DecoGoldIngots3, DecoGoldIngots4, DecoHay, DecoHay2, DecoHorseDung, DecoIronIngot, DecoIronIngot2, DecoIronIngots, DecoIronIngots2, DecoIronIngots3, DecoIronIngots4, DecoIronIngots5, DecoIronIngots6, DecoMagicalCrystal, DecoMandrake, DecoMandrake2, DecoMandrake3, DecoMandrakeRoot, DecoMandrakeRoot2, DecoNightshade, DecoNightshade2, DecoNightshade3, DecoObsidian, DecoPumice, DecorativeAxeNorth, DecorativeAxeWest, DecorativeBowNorth, DecorativeBowWest, DecorativeDAxeNorth, DecorativeDAxeWest, DecorativePlateKabuto, DecorativeShield, DecorativeShield1, DecorativeShield10, DecorativeShield11, DecorativeShield2, DecorativeShield3, DecorativeShield4, DecorativeShield5, DecorativeShield6, DecorativeShield7, DecorativeShield8, DecorativeShield9, DecorativeShieldDeed, DecorativeShieldSword1North, DecorativeShieldSword1West, DecorativeShieldSword2North, DecorativeShieldSword2West, DecorativeSwordNorth, DecorativeSwordWest, DecorativeTopiary, DecoRock, DecoRock2, DecoRocks, DecoRocks2, DecoRoseOfTrinsic, DecoRoseOfTrinsic2, DecoRoseOfTrinsic3, DecoSilverIngot, DecoSilverIngot2, DecoSilverIngots, DecoSilverIngots2, DecoSilverIngots3, DecoSilverIngots4, DecoSilverIngots5, DecoSpittoon, DecoTarot, DecoTarot2, DecoTarot3, DecoTarot4, DecoTarot5, DecoTarot6, DecoTarot7, DecoTray, DecoTray2, DecoWyrmsHeart, DeepSeaSerpent, DeerMask, DemonForks, DemonKnight, DemonSkull, DesertOstard, DetectiveBoots, Devourer, Diamond, DiamondMace, Dices, DimensionalTravel, DireWolf, DirtPatch, DirtyFrypan, DirtyKettle, DirtyPan, DirtyPot, DirtyRoundPot, DirtySmallPot, DirtySmallRoundPot, DisappearingRaiseSwitch, DiseasedBark, DiseasedCat, DisguiseKit, DisguisePersistance, DispelFieldScroll, DispelScroll, DisplayCache, DisturbingPortraitAddon, DisturbingPortraitComponent, DisturbingPortraitDeed, DiversityOfOurLand, DivineCountenance, DjinnisRing, Dog, Dolphin, DolphinLeftArtifact, DolphinRightArtifact, Doppleganger, DoubleAxe, DoubleBladedStaff, Doublet, Dough, DovetailSaw, Dragon, DragonArms, DragonBardingDeed, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, Drake, DrakovsJournal, Drawer, DrawKnife, DreadHornMane, DreadPirateHat, DreadSpider, Dressform, DriedHerbs, DriedOnions, Drums, Dryad, DryadAllureScroll, DullCopperElemental, DullCopperGranite, DullCopperIngot, DullCopperOre, Dummy, DummyAssassin, DummyFence, DummyHealer, DummyMace, DummyNox, DummyStun, DummySuper, DummySword, DummyTheif, DupresShield, DupreSuit, Dyes, DyeTub, DynamicTeleporter, Eagle, EarOfCorn, EarringBoxSet, EarringsOfProtection, EarthElemental, EarthquakeScroll, Easle, EasterEggs, EcruCitrine, EffectController, EffectItem, Efreet, EggBomb, EggCaseArtifact, Eggs, Eggshells, ElderGazer, ElegantArmoire, ElegantLowTable, EliteNinja, ElvenBedEastAddon, ElvenBedEastDeed, ElvenBedSouthAddon, ElvenBedSouthDeed, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenDresserEastAddon, ElvenDresserEastDeed, ElvenDresserSouthAddon, ElvenDresserSouthDeed, ElvenForgeAddon, ElvenForgeDeed, ElvenGlasses, ElvenLoveseatEastAddon, ElvenLoveseatEastDeed, ElvenLoveseatSouthAddon, ElvenLoveseatSouthDeed, ElvenMachete, ElvenPants, ElvenQuiver, ElvenReadingChair, ElvenShirt, ElvenSpellblade, ElvenSpinningwheelEastAddon, ElvenSpinningwheelEastDeed, ElvenSpinningwheelSouthAddon, ElvenSpinningwheelSouthDeed, ElvenStoveEastAddon, ElvenStoveEastDeed, ElvenStoveSouthAddon, ElvenStoveSouthDeed, ElvenWashBasinEastAddon, ElvenWashBasinEastDeed, ElvenWashBasinSouthAddon, ElvenWashBasinSouthDeed, ElwoodMcCarrin, EmbroideredOakLeafCloak, Emerald, Emino, EminosKatana, EminosKatanaChest, EmptyBentoBox, EmptyBookcase, EmptyCurvedFlaskE, EmptyCurvedFlaskW, EmptyJar, EmptyJars, EmptyJars2, EmptyJars3, EmptyJars4, EmptyPewterBowl, EmptyPewterTub, EmptyRibbedFlask, EmptyToolKit, EmptyToolKit2, EmptyVial, EmptyVialsWRack, EmptyWoodenBowl, EmptyWoodenTub, EnchantedPaints, EnchantedSextant, EnchantedSwitch, EnchantedTitanLegBone, EnergyBoltScroll, EnergyFieldScroll, EnergyVortex, EnergyVortexScroll, EnhancedBandage, EnragedBlackBear, EnragedEagle, EnragedHart, EnragedHind, EnragedRabbit, EnshroudedFigure, EnslavedGargoyle, EscortableMage, EssenceOfBattle, EssenceOfWindScroll, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, EtherealVoyageScroll, EtherealWarrior, EthicalHedonism, EthicsPersistance, Ettin, EvilHealer, EvilIdolSkull, EvilMage, EvilMageLord, EvilOmenScroll, EvilWanderingHealer, Executioner, ExecutionersAxe, ExecutionersCap, Exiler, ExodusMinion, ExodusOverseer, ExorcismScroll, ExplosionPotion, ExplosionScroll, EyeOfTheTravesty, FabledFishingNet, FactionBerserker, FactionBoardVendor, FactionBottleVendor, FactionDeathKnight, FactionDragoon, FactionExplosionTrap, FactionExplosionTrapDeed, FactionGasTrap, FactionGasTrapDeed, FactionHenchman, FactionHorseVendor, FactionKnight, FactionMercenary, FactionNecromancer, FactionOreVendor, FactionPaladin, FactionPersistance, FactionReagentVendor, FactionSawTrap, FactionSawTrapDeed, FactionSorceress, FactionSpikeTrap, FactionSpikeTrapDeed, FactionStone, FactionTrapRemovalKit, FactionWarHorse, FactionWizard, FancyArmoire, FancyDrawer, FancyDress, FancyElvenTableEastAddon, FancyElvenTableEastDeed, FancyElvenTableSouthAddon, FancyElvenTableSouthDeed, FancyShirt, FancyWindChimes, FancyWoodenChairCushion, FanDancer, FangOfRactus, FanNorthArtifact, FanWestArtifact, FarmableCabbage, FarmableCarrot, FarmableCotton, FarmableCrop, FarmableFlax, FarmableLettuce, FarmableOnion, FarmablePumpkin, FarmableTurnip, FarmableWheat, Farmer, Feather, FeatheredHat, FeeblemindScroll, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FerelTreefellow, Ferret, FerretFormTalisman, FertileDirt, FestiveCactus, FetidEssence, FeyLeggings, FieldStoneHouseDeed, FierceDragon, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, FireballScroll, FireballWand, FireBeetle, Firebomb, FirebombField, FireColumnAddon, FireColumnTrap, FireElemental, FireFieldItem, FireFieldScroll, FireGargoyle, FireHorn, FireRuby, FireSteed, FireworksWand, Fish, FisherGuildmaster, Fisherman, FishingPole, FishSteak, Fists, FlameSpurtTrap, FlamestrikeScroll, FlamingHead, FlamingHeadDeed, Flax, FleshGolem, FleshRenderer, FleshRipper, FletcherTools, FloppyHat, FlourMillEastAddon, FlourMillEastDeed, FlourMillSouthAddon, FlourMillSouthDeed, FlourSifter, FlowerGarland, FlowersArtifact, FluteOfRenewal, FoldedSteelGlasses, Food, FootStool, ForestOstard, Forge, ForgeComponent, ForgedMetal, Fork, ForkLeft, ForkRight, FormalShirt, FortuneTeller, FountainAddon, FountainDeed, FountainOfLife, FountainOfLifeDeed, FrenchBread, FrenziedOstard, FriedEggs, Froe, FropozJournal, Frostbringer, FrostOoze, FrostSpider, FrostTroll, FrostwoodBoard, FrostwoodLog, FruitBasket, FruitPie, Fukiya, FukiyaDarts, FullApron, FullBookcase, FullVialsWRack, FurBoots, FurCape, FurnitureDyeTub, FurSarong, Furtrader, Futon, GabrielPiete, Gaman, GamblingStone, Gargoyle, GargoyleDestroyer, GargoyleEnforcer, GargoylesPickaxe, Garlic, GasTrap, GateTravelScroll, GauntletsOfNobility, GauntletSpawner, Gazer, GazerLarva, Gears, GemmedCirclet, GenericBeard, GenericHair, GenericHouseDoor, GhostShipAnchor, Ghoul, GiantBlackWidow, GiantIceWorm, GiantRat, GiantSerpent, GiantSpider, GiantSpikeTrap, GiantToad, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, Gibberling, GiftBox, GiftBoxAngel, GiftBoxCube, GiftBoxCylinder, GiftBoxNeon, GiftBoxOctogon, GiftBoxRectangle, GiftOfLifeScroll, GiftOfRenewalScroll, GildedDress, GildedWoodenChest, GingerBreadCookie, GingerBreadHouseAddon, GingerBreadHouseDeed, Ginseng, GlacialStaff, GladiatorsCollar, Glass, Glassblower, GlassblowingBook, GlassBottle, GlassMug, Globe, GlovesOfThePugilist, GlovesOfTheSun, GMRobe, GnarledStaff, Goat, Goatee, Goblet, Gold, GoldBeadNecklace, GoldBracelet, GoldBricks, GoldEarrings, GoldenDecorativeRugAddon, GoldenDecorativeRugDeed, GoldenElemental, GoldenSkull, GoldGranite, GoldIngot, GoldNecklace, GoldOre, GoldRing, GoldWire, Golem, GolemController, GolemCrafter, GoreFiend, Gorilla, GozaMatEastAddon, GozaMatEastDeed, GozaMatSouthAddon, GozaMatSouthDeed, GrammarOfOrcish, GrandGrimoire, Granite, Grapes, GraveDust, GrayBrickFireplaceEastAddon, GrayBrickFireplaceEastDeed, GrayBrickFireplaceSouthAddon, GrayBrickFireplaceSouthDeed, GreaterAgilityPotion, GreaterConflagrationPotion, GreaterConfusionBlastPotion, GreaterCurePotion, GreaterDragon, GreaterExplosionPotion, GreaterHealPotion, GreaterHealScroll, GreaterHealWand, GreaterMongbat, GreaterPoisonPotion, GreaterStrengthPotion, GreatHart, GreenBeaker, GreenBottle, GreenCurvedFlask, GreenDriedFlowers, GreenGourd, GreenMarbleFloor, GreenNinjaQuestTeleporter, GreenScales, GreenStocking, GreenTea, GreenTeaBasket, GreenThorns, GreenThornsSHTeleporter, GreyFlagstones, GreyMarbleFloor, GreySlateFloor, GreyWolf, GrimmochDrummel, GrimmochJournal1, GrimmochJournal11, GrimmochJournal14, GrimmochJournal17, GrimmochJournal2, GrimmochJournal23, GrimmochJournal3, GrimmochJournal6, GrimmochJournal7, Grizelda, GrizzledBones, GrizzledMare, GrizzledMareStatuette, GrizzlyBear, GruesomeStandardArtifact, GuantletsOfAnger, Guardian, GuardianBarrier, GuideToGuilds, GuildDeed, GuildHouse, Guildstone, GuildstoneDeed, GuildTeleporter, Guillotine, GuillotineAddon, GuillotineComponent, GuillotineDeed, GwennosHarp, Gypsy, GypsyAnimalTrainer, GypsyBanker, GypsyMaiden, HagApprenticeCorpse, HagCauldron, HagStew, Hair, HairDye, HairRestylingDeed, HairStylist, Hakama, HakamaShita, Halberd, HalfApron, HalfEmptyJar, HalfEmptyJars, Ham, Hammer, HammerPick, HangingAxesAddon, HangingAxesDeed, HangingLantern, HangingSkeleton, HangingSkeletonDeed, HangingSwordsAddon, HangingSwordsDeed, HangoverCure, HanzosBow, Haochi, HaochisGuardsman, HaochisKatana, HaochisKatanaGenerator, HaochisTreasureChest, HarborMaster, HarmScroll, HarmWand, Harp, Harpy, Harrower, HarrowerGate, HarrowerTentacles, Hatchet, HatOfTheMagi, HaunterMirrorAddon, HaunterMirrorComponent, HaunterMirrorDeed, Head, HeadlessOne, Healer, HealerCamp, HealerGuildmaster, HealPotion, HealScroll, HealWand, HearthOfHomeFire, HearthOfHomeFireDeed, HeartOfTheLion, HeartwoodBoard, HeartwoodLog, HeaterShield, HeatingStand, HeavyCrossbow, HeavyPlateJingasa, HellCat, HellHound, HellSteed, Helmet, HelmOfInsight, HelmOfSwiftness, Henchman, Herbalist, HeritageToken, HiddenFigure, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, Hides, Hind, Hinge, HintItem, Hiryu, Hold, HolidayBell, HolidayTree, HolidayTreeDeed, HollowPrism, HolyFamiliar, HolyKnightsBreastplate, HolyMage, HolySteed, HolySword, HoneydewMelon, HonorableSwords, HonorCandle, HoodedShroudOfShadows, HordeMinion, HordeMinionFamiliar, HornedHides, HornedLeather, HornedTribalMask, HornOfRetreat, HornOfRetreatMoongate, HorrificBeastScroll, Horse, HorseShoes, Horus, Hourglass, HourglassAni, HouseDeed, HouseFoundation, HouseLadderAddon, HouseLadderDeed, HousePlacementTool, HouseRaffleDeed, HouseRaffleStone, HouseSign, HouseTeleporter, HuntersHeaddress, IceElemental, IceFiend, IceSerpent, IceSnake, IcicleLargeEast, IcicleLargeSouth, IcicleMedEast, IcicleMedSouth, IcicleSmallEast, IcicleSmallSouth, IcyPatch, IdolOfTheChampion, IDWand, IharaSoko, Ilhenir, ImmolatingWeaponScroll, Imp, Impaler, Impresario, IncognitoScroll, IndecipherableMap, IngotStone, InjuredWolf, InnKeeper, InquisitorsResolution, Inshave, InteriorDecorator, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem2, InternalItem2, InterredGrizzle, InvisibilityScroll, IolosLute, IronGate, IronGateShort, IronIngot, IronMaidenAddon, IronMaidenDeed, IronOre, IronWire, IronwoodCrown, IronWorker, Item, JackalsCollar, JackOLantern, JackRabbit, JadeStatueMaker, JarHoney, Jars2, Jars3, Jars4, JedahEntille, JesterHat, JesterHatofChuckles, JesterSuit, JeweledFiligree, Jeweler, JinBaori, JoinStone, JointingPlane, Jug, Juggernaut, JukaBow, JukaLord, JukaMage, JukaWarrior, Jwilson, KaburJournal, Kama, Kamishimo, Kappa, Kasa, KasaOfTheRajin, Katana, KazeKemono, Keep, KeepDeed, KeeperOfChivalry, Keg, Key, KeyRing, KeywordTeleporter, KhaldunPitTeleporter, KhaldunRevenant, KhaldunSummoner, KhaldunZealot, Kilt, Kindling, Kirin, Knife, KnifeLeft, KnifeRight, Kraken, KrisnaHair, KronusScroll, KronusScrollBox, Kryss, LadyOfTheSnow, LadyPortrait1, LadyPortrait2, Lajatang, LambLeg, LampPost1, LampPost2, LampPost3, LampPostArtifact, LampRoomBox, LampRoomTeleporter, Lance, Lantern, LanternOfSouls, LapHarp, LardOfParoxysmus, LargeBagBall, LargeBattleAxe, LargeBedEastAddon, LargeBedEastDeed, LargeBedSouthAddon, LargeBedSouthDeed, LargeBoat, LargeBoatDeed, LargeBOD, LargeCrate, LargeDockedBoat, LargeDockedDragonBoat, LargeDragonBoat, LargeDragonBoatDeed, LargeEmptyFlask, LargeEmptyPot, LargeFishingNetAddon, LargeFishingNetComponent, LargeFishingNetDeed, LargeFlask, LargeForgeEast, LargeForgeEastAddon, LargeForgeEastDeed, LargeForgeSouthAddon, LargeForgeSouthDeed, LargeForgeWest, LargeMarbleDeed, LargeMarbleHouse, LargePainting, LargePatioDeed, LargePatioHouse, LargeSmithBOD, LargeStoneTableEastAddon, LargeStoneTableEastDeed, LargeStoneTableSouthAddon, LargeStoneTableSouthDeed, LargeTable, LargeTailorBOD, LargeVase, LargeVioletFlask, LargeYellowFlask, LavaLizard, LavaSerpent, LavaSnake, LavaTile, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, Leather, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherDyeTub, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LeatherTunicArtifact, LeatherWorker, LeftArm, LeftLeg, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, Lemon, Lemons, LesserCurePotion, LesserExplosionPotion, LesserHealPotion, LesserHiryu, LesserPigmentsOfTokuno, LesserPoisonPotion, Lettuce, LeurociansMempoOfFortune, LeverPuzzleController, LeverPuzzleLever, LeverPuzzleStatue, Leviathan, LibraryBookcase, Lich, LichFormScroll, LichLord, LieutenantOfTheBritannianRoyalGuard, LifeOfATravellingMinstrel, LightFlowerTapestryEastAddon, LightFlowerTapestryEastDeed, LightFlowerTapestrySouthAddon, LightFlowerTapestrySouthDeed, LightningScroll, LightningWand, LightOfTheWinterSolstice, LightOfWayGlasses, LightPlateJingasa, LightSource, LightWoodDoor, LightWoodGate, LightYarn, LightYarnUnraveled, Lime, Limes, Lizardman, LizardmenCamp, Llama, LocalizedAddonComponent, LocalizedContainerComponent, LocalizedSign, LocalizedStatic, LocalMap, LockableBarrel, LockableContainer, Lockpick, Lockpicks, Log, LogCabin, LogCabinDeed, LongBeard, LongFlask, LongHair, LongPants, Longsword, LoomEastAddon, LoomEastDeed, LoomSouthAddon, LoomSouthDeed, LordBlackthorneSuit, LordBritishSuit, LordOaks, LOSBlocker, LtBlueCurvedFlask, LuckyNecklace, LuminescentFungi, LuminousRuneBlade, LunaLance, Lute, LyricalGlasses, LysanderGathenwale, LysanderNotebook1, LysanderNotebook11, LysanderNotebook2, LysanderNotebook3, LysanderNotebook7, LysanderNotebook8, Maabus, MaabusCoffin, MaabusCoffinComponent, Mace, MaceShieldGlasses, Mage, MageCamp, MageGuildmaster, MagicalShortbow, MagicArrowScroll, MagicArrowWand, MagicFlute, MagicLockScroll, MagicReflectScroll, MagicTrapScroll, MagicUnTrapScroll, MagicWand, MagicWizardsHat, MahjongGame, MajorTradeAssociation, MaleElvenRobe, MaleKimono, MalletAndChisel, ManaDrainScroll, ManaDrainWand, ManaVampireScroll, MandrakeRoot, ManPortrait1, ManPortrait2, MansionGuard, ManStatuetteEastArtifact, ManStatuetteSouthArtifact, MapItem, MapleArmoire, Mapmaker, MapmakersPen, MarbleFloor, MarblePavers, MarbleStatueMaker, MarbleWorkshopDeed, Mardoth, MaritimeGlasses, MarkContainer, MarkScroll, MasonryBook, MassCurseScroll, MassDispelScroll, Maul, MeatPie, MediumBoat, MediumBoatDeed, MediumCrate, MediumDockedBoat, MediumDockedDragonBoat, MediumDragonBoat, MediumDragonBoatDeed, MediumFlask, MediumLongBeard, MediumShortBeard, MediumStoneTableEastAddon, MediumStoneTableEastDeed, MediumStoneTableSouthAddon, MediumStoneTableSouthDeed, MediumStretchedHideEastAddon, MediumStretchedHideEastDeed, MediumStretchedHideSouthAddon, MediumStretchedHideSouthDeed, MediumWoodDoor, MeerCaptain, MeerEternal, MeerMage, MeerWarrior, MelisandesCorrodedHatchet, MeltedWax, Mephitis, Meraktus, Merchant, MerchantGuildmaster, MessageInABottle, Messenger, MetalBox, MetalChest, MetalDoor, MetalDoor2, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalHouseDoor, MetalKiteShield, MetalPigmentsOfTokuno, MetalShield, MetalTreasureChest, MeteorSwarmScroll, MidnightBracers, MilitiaCanoneer, MilitiaFighter, MilitiaFighterCorpse, Miller, MinaxWarHorse, MindBlastScroll, MindRotScroll, Miner, MinerGuildmaster, MiniHouseAddon, MiniHouseDeed, MiningCart, MiningCartDeed, Minotaur, MinotaurCaptain, MinotaurHedge, MinotaurScout, MinotaurStatue, MinotaurStatueDeed, Minter, MisoSoup, MistletoeAddon, MistletoeDeed, MLDryad, Mobile, Mohawk, Moloch, Mongbat, Monk, MonkRobe, MonsterStatuette, MoonfireBrew, Moongate, Moonstone, MoonstoneGate, MorgBergen, MorphItem, MortarPestle, MouldingPlane, MoundOfMaggots, MountainGoat, MountedPixieBlueAddon, MountedPixieBlueComponent, MountedPixieBlueDeed, MountedPixieGreenAddon, MountedPixieGreenComponent, MountedPixieGreenDeed, MountedPixieLimeAddon, MountedPixieLimeComponent, MountedPixieLimeDeed, MountedPixieOrangeAddon, MountedPixieOrangeComponent, MountedPixieOrangeDeed, MountedPixieWhiteAddon, MountedPixieWhiteComponent, MountedPixieWhiteDeed, MountItem, MovingCrate, Muculent, Muffins, Mummy, MushroomTrap, Mustache, MyStory, Nails, NameChangeDeed, Naturalist, NatureFury, NatureFuryScroll, Necklace, NecromancerSpellbook, NecromanticGlasses, Neira, NewPlayerTicket, Nightmare, Nightshade, NightSightPotion, NightSightScroll, NightsKiss, Nightstand, Ninja, NinjaTabi, Noble, NoDachi, NorseHelm, NoteForZoel, NoxCrystal, NoxRangersHeavyCrossbow, Nunchaku, OakBoard, OakLog, Obelisk, Obi, OblivionsNeedle, Obsidian, Ogre, OgreLord, OilCloth, Oni, Onion, OpenCoconut, OphidianArchmage, OphidianKnight, OphidianMage, OphidianMatriarch, OphidianWarrior, OrangePetals, Orc, OrcBomber, OrcBrute, OrcCamp, OrcCaptain, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishLord, OrcishMage, OrcishVisage, OrderGuard, OrderShield, OrigamiButterfly, OrigamiFish, OrigamiFrog, OrigamiPaper, OrigamiShape, OrigamiSongbird, OrigamiSwan, Ornament, OrnamentOfTheMagician, OrnateAxe, OrnateCrownOfTheHarrower, OrnateElvenChair, OrnateElvenTableEastAddon, OrnateElvenTableEastDeed, OrnateElvenTableSouthAddon, OrnateElvenTableSouthDeed, OrnateWoodenChest, OssianGrimoire, OverseerSunderedBlade, Pacify, PackHorse, PackingBox, PackLlama, PadsOfTheCuSidhe, PageboyHair, PainSpikeScroll, PaintedImage, Painting1NorthArtifact, Painting1WestArtifact, Painting2NorthArtifact, Painting2WestArtifact, Painting3Artifact, Painting4NorthArtifact, Painting4WestArtifact, Painting5NorthArtifact, Painting5WestArtifact, Painting6NorthArtifact, Painting6WestArtifact, PaintsAndBrush, Panther, PaperLantern, ParagonChest, ParalyzeFieldScroll, ParalyzeScroll, ParasiticPlant, Parrot, ParrotPerchAddon, ParrotPerchDeed, PatchworkSkeleton, Peach, PeachCobbler, PeachTreeAddon, PeachTreeDeed, PeachTrunkAddon, PeachTrunkDeed, Pear, Peasant, PeasantsBokuto, PeculiarFish, PenAndInk, PendantOfTheMagi, PentagramAddon, PentagramDeed, PerfectEmerald, PestilentBandage, PewterBowlOfCarrots, PewterBowlOfCorn, PewterBowlOfLettuce, PewterBowlOfPeas, PewterBowlOfPotatos, PewterMug, PhantomStaff, PhillipsWoodenSteed, Phoenix, Pickaxe, PickpocketDip, PickpocketDipEastAddon, PickpocketDipEastDeed, PickpocketDipSouthAddon, PickpocketDipSouthDeed, PicnicBasket, PieceBlackBishop, PieceBlackChecker, PieceBlackKing, PieceBlackKnight, PieceBlackPawn, PieceBlackQueen, PieceBlackRook, PieceWhiteBishop, PieceWhiteChecker, PieceWhiteKing, PieceWhiteKnight, PieceWhitePawn, PieceWhiteQueen, PieceWhiteRook, Pier, Pig, PigIron, PigmentsOfTokuno, Pike, PileOfGlacialSnow, PilferedDancerFans, PinkFancyRugAddon, PinkFancyRugDeed, Pitcher, Pitchfork, Pixie, PixieSwatter, PlagueBeast, PlagueBeastBackpack, PlagueBeastBackupOrgan, PlagueBeastBlood, PlagueBeastComponent, PlagueBeastGland, PlagueBeastHeart, PlagueBeastInnard, PlagueBeastLord, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastMutationCore, PlagueBeastOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan, PlagueBeastVein, PlagueSpawn, PlainDress, PlainLowTable, PlainWoodenChest, Plank, PlantBowl, PlantItem, Plate, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PlayerBarkeeper, PlayerBBEast, PlayerBBSouth, PlayerMobile, PlayerVendor, PlayerVendorPlaceholder, PlayingCards, PlayingCards2, PoisonedGlasses, PoisonElemental, PoisonFieldScroll, PoisonPotion, PoisonScroll, PoisonStrikeScroll, PolarBear, PolarBearMask, PolarBearRugEastAddon, PolarBearRugEastDeed, PolarBearRugSouthAddon, PolarBearRugSouthDeed, PolymorphScroll, PonyTail, PoolOfAcid, PortcullisEW, PortcullisNS, PotionKeg, PottedCactus, PottedCactus1, PottedCactus2, PottedCactus3, PottedCactus4, PottedCactus5, PottedCactusDeed, PottedPlant, PottedPlant1, PottedPlant2, PottedTree, PottedTree1, Pouch, PowderOfTemperament, PowderOfTranslocation, PowerCrystal, PowerGenerator, PowerScroll, PredatorHellCat, PresetMap, PreviewHouse, PricedHealer, PristineDreadHorn, PrizedFish, PromotionalToken, ProspectorsTool, ProtectionScroll, Provisioner, PublicMoongate, Pumpkin, PumpkinPie, Putrefication, PuzzleChest, PyramidAddon, Quagmire, QuarterStaff, Quell, QuestDaemonBlood, QuestDaemonBone, QuestFertileDirt, QuestItem, QuestOfVirtues, Quiche, QuiverOfBlight, QuiverOfElements, QuiverOfFire, QuiverOfIce, QuiverOfInfinity, QuiverOfLightning, QuiverOfRage, Rabbit, RadiantScimitar, RaedsGlory, RagingGrizzlyBear, RaiJu, RaisableItem, RaiseSwitch, Rancher, RandomTalisman, Ranger, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerGuildmaster, RangerLegs, RankingsOfTrades, Rat, RatCamp, Ratman, RatmanArcher, RatmanMage, RattanDoor, Ravager, RavenHelm, RawBird, RawChickenLeg, RawFishSteak, RawLambLeg, RawRibs, ReactiveArmorScroll, RealEstateBroker, Reaper, ReaperFormScroll, RecallRune, RecallScroll, ReceedingHair, ReceiverCrystal, RecipeScroll, RedAmbitiousSolenQueen, RedArmoire, RedBeaker, RedBook, RedBottle, RedCurvedFlask, RedHangingLantern, RedLeaves, RedMisoSoup, RedPlainRugAddon, RedPlainRugDeed, RedPoinsettia, RedRibbedFlask, RedScales, RedSolenInfiltratorQueen, RedSolenInfiltratorWarrior, RedSolenMatriarch, RedSolenQueen, RedSolenWarrior, RedSolenWorker, RedSoulstone, RedStocking, RedVelvetGiftBox, RefreshPotion, RegardingLlamas, RegStone, RejuvinationAddonComponent, RejuvinationAnkhNorth, RejuvinationAnkhWest, Relnia, RentedVendor, RepairDeed, RepeatingCrossbow, Reptalon, ReptalonFormTalisman, ResGate, ResilientBracer, RestlessSoul, ResurrectionScroll, RevealScroll, Revenant, RevenantLion, RewardBlackDyeTub, RewardBrazier, RewardBrazierDeed, RewardCake, RewardCloak, RewardDress, RewardPottedCactus, RewardRobe, RibCage, Ribs, RidableLlama, RideablePolarBear, Ridgeback, RightArm, RighteousAnger, RightLeg, Rikktor, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, RingOfTheElements, RingOfTheVile, RoastPig, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RockArtifact, RollingPin, Ronin, Rope, RoseInAVase, RoseOfTrinsic, RoseOfTrinsicPetal, RottingCorpse, RoundPaperLantern, RoyalCirclet, RoyalGuardSurvivalKnife, Ruby, RuinedArmoire, RuinedBookcase, RuinedBooks, RuinedChair, RuinedClock, RuinedDrawers, RuinedFallenChairA, RuinedFallenChairB, RuinedPainting, RuinedPaintingArtifact, RuneBeetle, RuneBeetleCarapace, RuneBlade, Runebook, RunebookDyeTub, RuneCarvingKnife, RunedPrism, RunedSwitch, RunicDovetailSaw, RunicHammer, RunicSewingKit, SackFlour, SacrificialAltarAddon, SacrificialAltarDeed, SaddleArtifact, Sai, SakeArtifact, SalvageBag, SamaritanRobe, Samurai, SamuraiHelm, SamuraiTabi, Sand, Sandals, SandFlagstones, SandMiningBook, SandstoneFireplaceEastAddon, SandstoneFireplaceEastDeed, SandstoneFireplaceSouthAddon, SandstoneFireplaceSouthDeed, SandstoneFloorN, SandstoneFloorW, SandstoneFountainAddon, SandStonePatio, SandstonePatioDeed, SandVortex, Sapphire, Satyr, Sausage, SausagePizza, Savage, SavageMask, SavageRider, SavageRidgeback, SavageShaman, Saw, SawTrap, ScaledSwampDragon, Scales, ScarecrowAddon, ScarecrowComponent, ScarecrowDeed, Scepter, Schmendrick, SchmendrickApprenticeCorpse, SchmendrickScrollOfPower, Scimitar, Scissors, Scorp, Scorpion, Scourge, Scribe, ScribeBag, ScribesPen, ScribeStone, ScrollOfAbraxus, ScrollofAlacrity, ScrollofTranscendence, Sculptor, Sculpture1Artifact, Sculpture2Artifact, Scythe, SeaChart, SeaHorse, SeahorseStatuette, SeaSerpent, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, SecureTradeContainer, Seed, SeekerOfAdventure, SeerRobe, Semidar, Serado, SerpentineDragon, SerpentPillar, SerpentPillarAddon, SerpentsFang, ServantOfSemidar, Sewerrat, SewingKit, Sextant, SextantParts, Shade, ShadowDancerLeggings, ShadowFiend, ShadowIronElemental, ShadowIronGranite, ShadowIronIngot, ShadowIronOre, ShadowKnight, ShadowWisp, ShadowWispFamiliar, ShadowWyrm, Shaft, ShaminoCrossbow, ShardPoller, ShardThrasher, SheafOfHay, Sheep, ShepherdsCrook, ShieldOfInvulnerability, ShipModelOfTheHMSCape, ShipwreckedItem, Shipwright, Shirt, Shoes, ShojiLantern, ShojiScreen, ShortBeard, ShortCabinet, ShortHair, ShortMusicStand, ShortPants, ShortSpear, Shovel, ShrineOfWisdomAddon, ShrineOfWisdomComponent, ShroudOfDeciet, SHTeleComponent, SHTeleporter, Shuriken, Sigil, Sign, Silvani, SilvanisFeywoodBow, Silver, SilverBeadNecklace, SilverBracelet, SilverEarrings, SilverNecklace, SilverRing, SilverSerpent, SilverSteed, SilverWire, SkeletalDragon, SkeletalKnight, SkeletalMage, SkeletalMount, Skeleton, Skillet, SkillTeleporter, SkinnedDeerArtifact, SkinnedGoatArtifact, SkinningKnife, Skirt, SkitteringHopper, SkullCandleArtifact, SkullCap, SkullPileAddon, SkullPole, SlabOfBacon, SledgeHammer, Slime, SLWarHorse, SmallBagBall, SmallBedEastAddon, SmallBedEastDeed, SmallBedSouthAddon, SmallBedSouthDeed, SmallBlueBottle, SmallBlueFlask, SmallBoat, SmallBoatDeed, SmallBOD, SmallBrickHouseDeed, SmallBrownBottle, SmallCrate, SmallDockedBoat, SmallDockedDragonBoat, SmallDragonBoat, SmallDragonBoatDeed, SmallEmptyFlask, SmallEmptyPot, SmallFishingNetAddon, SmallFishingNetComponent, SmallFishingNetDeed, SmallFlask, SmallForgeAddon, SmallForgeDeed, SmallGreenBottle, SmallGreenBottle2, SmallOldHouse, SmallPlateJingasa, SmallPumpkin, SmallRedFlask, SmallShop, SmallSmithBOD, SmallStretchedHideEastAddon, SmallStretchedHideEastDeed, SmallStretchedHideSouthAddon, SmallStretchedHideSouthDeed, SmallTailorBOD, SmallTower, SmallTowerDeed, SmallTowerSculpture, SmallUrn, SmallVioletBottle, SmallWatermelon, SmallYellowFlask, SmithBag, SmithHammer, SmithStone, SmokeBomb, SmoothingPlane, Snake, SnowElemental, SnowLeopard, Snowman, SnowPile, SnowPileDeco, SnowyTree, SolenAntHole, SolenAntHoleComponent, SongOfSamlethe, SongWovenMantle, SOS, SoulSeeker, SoulStone, SoulstoneFragment, SoulstoneFragmentToken, Spam, SpawnedOrcishLord, Spawner, SpawnPersistence, Spear, SpecialBeardDye, SpecialDyeTub, SpecialFishingNet, SpecialHairDye, SpecialScroll, SpectralArmour, Spectre, Spellbook, SpellScroll, SpellweavingBook, SpellWovenBritches, SpidersSilk, SpikeTrap, SpinedHides, SpinedLeather, SpinningHourglass, SpinningwheelEastAddon, SpinningwheelEastDeed, SpinningwheelSouthAddon, SpinningwheelSouthDeed, SpiritOfTheTotem, SplitCoconut, SpoolOfThread, Spoon, SpoonLeft, SpoonRight, Springs, Spyglass, SquareGozaMatEastAddon, SquareGozaMatEastDeed, SquareGozaMatSouthAddon, SquareGozaMatSouthDeed, Squash, Squirrel, SquirrelFormTalisman, SquirrelStatueEastAddon, SquirrelStatueEastDeed, SquirrelStatueSouthAddon, SquirrelStatueSouthDeed, StaffOfPower, StaffOfTheMagi, StainedOoze, StandardPlateKabuto, StandingBrokenChairAddon, StandingBrokenChairComponent, StandingBrokenChairDeed, StarRoomGate, StarSapphire, StatCapScroll, Static, StatueEast, StatueEast2, StatueNorth, StatuePegasus, StatuePegasus2, StatueSouth, StatueSouth2, StatueSouthEast, StatuetteDyeTub, StatueWest, StealableArtifactsSpawner, StitchersMittens, StoneAnkh, StoneAnkhComponent, StoneAnkhDeed, StoneChair, StoneCrafter, StoneFaceTrap, StoneFaceTrapNoDamage, StoneFireplaceEastAddon, StoneFireplaceEastDeed, StoneFireplaceSouthAddon, StoneFireplaceSouthDeed, StoneFountainAddon, StoneGargoyle, StoneHarpy, StoneMiningBook, StoneOvenEastAddon, StoneOvenEastDeed, StoneOvenSouthAddon, StoneOvenSouthDeed, StonePaversDark, StonePaversLight, StonePaversMedium, StonePlasterHouseDeed, StoneStatueAddon, StoneStatueDeed, StoneWorkshopDeed, Stool, Stormgrip, StrangleScroll, StrawHat, StrengthPotion, StrengthScroll, StretchedHideArtifact, StrongBackpack, StrongBox, StrongBoxPuzzle, StrongholdMonolith, StrongMongbat, StrongWoodDoor, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLeggingsArtifact, StuddedLegs, StuddedMempo, StuddedSuneate, StuddedTunicArtifact, SturdyPickaxe, SturdyShovel, Subdue, Succubus, SuitOfGoldArmorAddon, SuitOfGoldArmorComponent, SuitOfGoldArmorDeed, SuitOfSilverArmorAddon, SuitOfSilverArmorComponent, SuitOfSilverArmorDeed, SulfurousAsh, SummonAirElementalScroll, SummonCreatureScroll, SummonDaemonScroll, SummonEarthElementalScroll, SummonedAirElemental, SummonedAntLion, SummonedArcticOgreLord, SummonedBakeKitsune, SummonedBogling, SummonedBullFrog, SummonedChicken, SummonedCow, SummonedDaemon, SummonedDoppleganger, SummonedEarthElemental, SummonedFireElemental, SummonedFrostSpider, SummonedGreatHart, SummonedLavaSerpent, SummonedOrcBrute, SummonedPaladin, SummonedPaladinMoongate, SummonedPanther, SummonedSheep, SummonedSkeletalKnight, SummonedVorpalBunny, SummonedWailingBanshee, SummonedWaterElemental, SummonFamiliarScroll, SummonFeyScroll, SummonFiendScroll, SummonFireElementalScroll, SummoningAltar, SummonWaterElementalScroll, Surcoat, SushiPlatter, SushiRolls, SwampDragon, SwampTentacle, SwampTile, SwarmOfFlies, SweetDough, SwitchItem, SwordDisplay1NorthArtifact, SwordDisplay1WestArtifact, SwordDisplay2NorthArtifact, SwordDisplay2WestArtifact, SwordDisplay3EastArtifact, SwordDisplay3SouthArtifact, SwordDisplay4NorthArtifact, SwordDisplay4WestArtifact, SwordDisplay5NorthArtifact, SwordDisplay5WestArtifact, SwordOfTheStampede, SwordsOfProsperity, TableWithBlueClothAddon, TableWithBlueClothDeed, TableWithOrangeClothAddon, TableWithOrangeClothDeed, TableWithPurpleClothAddon, TableWithPurpleClothDeed, TableWithRedClothAddon, TableWithRedClothDeed, Tailor, TailorBag, TailorGuildmaster, TailorStone, Taint, TaintedWool, TaleOfThreeTribes, TalesOfVesperVol1, TalkingToWisps, TallCabinet, TallElvenBedEastAddon, TallElvenBedEastDeed, TallElvenBedSouthAddon, TallElvenBedSouthDeed, TallMusicStand, TallStrawHat, TalonBite, Tambourine, TambourineTassel, TamingDragons, TanBook, Tanner, Tapestry1N, Tapestry2N, Tapestry2W, Tapestry3N, Tapestry3W, Tapestry4N, Tapestry4W, Tapestry5N, Tapestry5W, Tapestry6N, Tapestry6W, TapestryOfSosaria, TarotCardsArtifact, TatteredAncientMummyWrapping, TattsukeHakama, TavaraSewel, TavarasJournal1, TavarasJournal11, TavarasJournal14, TavarasJournal16, TavarasJournal16b, TavarasJournal17, TavarasJournal19, TavarasJournal2, TavarasJournal3, TavarasJournal6, TavarasJournal7, TavarasJournal8, TavarasJournal9, TavernKeeper, TaxidermyKit, TBWarHorse, TeapotNorthArtifact, TeapotWestArtifact, Tekagi, TelekinisisScroll, Teleporter, TeleportScroll, Telescope, TerathanAvenger, TerathanDrone, TerathanMatriarch, TerathanWarrior, Tessen, Tetsubo, ThatchedRoofCottageDeed, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheFight, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThickGrayStoneWall, Thief, ThiefGuildmaster, ThighBoots, ThinBrickWall, ThinLongsword, ThinStoneWall, Throne, ThrowingDagger, ThunderstormScroll, TillerMan, TimberWolf, Tinker, TinkerGuildmaster, TinkersTools, TinkerTools, TinyRedBottle, TinyYellowBottle, Titan, TitansHammer, TomasONeerlan, TomeOfEnlightenment, TomeOfLostKnowledge, Tongs, ToolKit, Torch, TormentedChains, TormentedMinotaur, Torso, TotalRefreshPotion, TotemOfVoid, Tourmaline, Tower, TowerDeed, TowerLanternArtifact, TownCrier, TownMonolith, TownStone, ToxicElemental, TradeGlasses, TrainingDummy, TrainingDummyEastAddon, TrainingDummyEastDeed, TrainingDummySouthAddon, TrainingDummySouthDeed, TransferItem, TransferItem, TransientItem, TranslatedGargoyleJournal, TrapableContainer, TrashBarrel, TrashChest, TreasureChestDirt, TreasureMap, TreasureMapChest, TreasuresOfTokunoPersistance, TreasureTrinketGlasses, TreatiseOnAlchemy, Treefellow, TreeStump, TreeStumpDeed, TreeTrunk, TribalBerry, TribalMask, TribalPaint, TribalSpear, TricorneHat, TripleFanNorthArtifact, TripleFanWestArtifact, Troglodyte, Troll, TrophyAddon, TrophyDeed, TropicalBird, TrulyRareFish, TsukiWolf, Tub, Tunic, TunicOfFire, Turnip, Turquoise, Twaulo, TwoHandedAxe, TwoPigTails, TwoStoryHouse, TwoStoryStonePlasterHouseDeed, TwoStoryVilla, TwoStoryWoodPlasterHouseDeed, UnbakedApplePie, UnbakedFruitPie, UnbakedMeatPie, UnbakedPeachCobbler, UnbakedPumpkinPie, UnbakedQuiche, UncookedCheesePizza, UncookedSausagePizza, UncutCloth, UnfinishedBarrel, UnholyBone, UnholyFamiliar, UnholySteed, Unicorn, UnlockScroll, UnmadeBedAddon, UnmadeBedDeed, UnsettlingPortraitAddon, UnsettlingPortraitComponent, UnsettlingPortraitDeed, Urn1Artifact, Urn2Artifact, Uzeraan, UzeraanTurmoilHorn, UzeraanTurmoilTeleporter, Vagabond, ValentinesCard, ValentinesCardEast, ValentinesCardSouth, ValoriteElemental, ValoriteGranite, ValoriteIngot, ValoriteOre, VampireBat, VampireBatFamiliar, VampiricEmbraceScroll, Vandyke, VanityAddon, VanityDeed, VarietyDealer, Vase, VaultOfSecretsBarrier, VendorBackpack, VendorRentalContract, VengefulSpiritScroll, VeriteElemental, VeriteGranite, VeriteIngot, VeriteOre, Veterinarian, Victoria, VikingSword, VillaDeed, Vines, VioletCourage, VioletRibbedFlask, VirtualMountItem, VirtualMountItem, VirtueBook, VoiceOfTheFallenKing, VorpalBunny, VultureHelm, WailingBanshee, Waiter, Wakizashi, WallBanner, WallBannerComponent, WallBannerDeed, WallBlood, WallOfStoneScroll, WallSconce, WallTorch, WallTorchAddon, WallTorchComponent, WallTorchDeed, Walrus, Wanderer, WandererOfTheVoid, WanderingHealer, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WarningItem, WarriorGuard, WarriorGuildmaster, WarriorStatueEastAddon, WarriorStatueEastDeed, WarriorStatueSouthAddon, WarriorStatueSouthDeed, Wasabi, WasabiClumps, WaterBarrel, WaterElemental, Watermelon, WaterTile, WaterTroughEastAddon, WaterTroughEastDeed, WaterTroughSouthAddon, WaterTroughSouthDeed, WaterVatEast, WaterVatSouth, WayPoint, WeakenScroll, WeaknessWand, WeaponEngravingTool, Weaponsmith, WeatherMap, Weaver, Web, WheatSheaf, Whip, WhippingVine, WhiteDriedFlowers, WhiteHangingLantern, WhiteMisoSoup, WhiteNinjaQuestTeleporter, WhitePearl, WhitePoinsettia, WhiteScales, WhiteSnowflake, WhiteStoneWall, WhiteWolf, WhiteWyrm, WideBrimHat, WildfireBow, WildfireScroll, WildGirlOfTheForest, WildStaff, WindChimes, WindsEdge, Windsong, WindSpirit, WingedHelm, WinterGiftPackage2003, Wisp, WitherScroll, WizardsGlasses, WizardsHat, WomanPortrait1, WomanPortrait2, WondrousFish, WoodDebris, WoodenBench, WoodenBowl, WoodenBowlOfCarrots, WoodenBowlOfCorn, WoodenBowlOfLettuce, WoodenBowlOfPeas, WoodenBowlOfStew, WoodenBowlOfTomatoSoup, WoodenBox, WoodenChair, WoodenChairCushion, WoodenChest, WoodenCoffinAddon, WoodenCoffinComponent, WoodenCoffinDeed, WoodenFootLocker, WoodenKiteShield, WoodenShield, WoodenThrone, WoodenTreasureChest, WoodHouseDeed, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WoodPlasterHouseDeed, Wool, WordOfDeathScroll, WorldMap, Wraith, WraithFormScroll, WrathOfTheDryad, WreathAddon, WreathDeed, WritingTable, Wyvern, Yamandon, YellowBeaker, YellowGourd, YellowScales, YewBoard, YewLog, YewWoodTable, YomotsuElder, YomotsuPriest, YomotsuWarrior, YoungNinja, YoungRonin, Yumi, Zeefzorpul, ZenRock1Artifact, ZenRock2Artifact, ZenRock3Artifact, Zoel, Zombie, ZoogiFungus, ZyronicClaw

+ int HuedItemID( get; )
+ + diff --git a/Docs/types/ILockable.html b/Docs/types/ILockable.html new file mode 100644 index 0000000..f40c0c8 --- /dev/null +++ b/Docs/types/ILockable.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ILockable + + +

Back to Server.Items

+

ILockable

+

Derived Types: BarredMetalDoor, BarredMetalDoor2, BaseDoor, BaseHouseDoor, BaseTreasureChest, ChestOfHeirlooms, DaemonBloodChest, DarkWoodDoor, DarkWoodGate, DarkWoodHouseDoor, EminosKatanaChest, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, GenericHouseDoor, GildedWoodenChest, HaochisTreasureChest, IronGate, IronGateShort, KronusScrollBox, LargeCrate, LibraryBookcase, LightWoodDoor, LightWoodGate, LockableBarrel, LockableContainer, MarkContainer, MediumCrate, MediumWoodDoor, MetalBox, MetalChest, MetalDoor, MetalDoor2, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalHouseDoor, MetalTreasureChest, OrnateWoodenChest, ParagonChest, PlainWoodenChest, Plank, PortcullisEW, PortcullisNS, PuzzleChest, RattanDoor, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, SmallCrate, StrongBoxPuzzle, StrongWoodDoor, TreasureMapChest, WoodenBox, WoodenChest, WoodenFootLocker, WoodenTreasureChest

+ uint KeyValue( get; set; )
+ bool Locked( get; set; )
+ + diff --git a/Docs/types/ILockpickable.html b/Docs/types/ILockpickable.html new file mode 100644 index 0000000..f5b2cca --- /dev/null +++ b/Docs/types/ILockpickable.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ILockpickable + + +

Back to Server.Items

+

ILockpickable : IPoint2D

+

Derived Types: BaseTreasureChest, ChestOfHeirlooms, DaemonBloodChest, EminosKatanaChest, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, GildedWoodenChest, HaochisTreasureChest, KronusScrollBox, LargeCrate, LibraryBookcase, LockableBarrel, LockableContainer, MarkContainer, MediumCrate, MetalBox, MetalChest, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalTreasureChest, OrnateWoodenChest, ParagonChest, PlainWoodenChest, PuzzleChest, SmallCrate, StrongBoxPuzzle, TreasureMapChest, WoodenBox, WoodenChest, WoodenFootLocker, WoodenTreasureChest

+ bool Locked( get; set; )
+ int LockLevel( get; set; )
+ int MaxLockLevel( get; set; )
+ Mobile Picker( get; set; )
+ int RequiredSkill( get; set; )
+ virtual void LockPick( Mobile from )
+ + diff --git a/Docs/types/ILoom.html b/Docs/types/ILoom.html new file mode 100644 index 0000000..16cb156 --- /dev/null +++ b/Docs/types/ILoom.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ILoom + + +

Back to Server.Items

+

ILoom

+

Derived Types: LoomEastAddon, LoomSouthAddon

+ int Phase( get; set; )
+ + diff --git a/Docs/types/IMenu.html b/Docs/types/IMenu.html new file mode 100644 index 0000000..e95fca2 --- /dev/null +++ b/Docs/types/IMenu.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IMenu + + +

Back to Server.Menus

+

IMenu

+

Derived Types: ContainedMenu, EquipDetailsMenu, EquipMenu, ItemListMenu, QuestionMenu

+ int EntryLength( get; )
+ int Serial( get; )
+ virtual void OnCancel( NetState state )
+ virtual void OnResponse( NetState state, int index )
+ virtual void SendTo( NetState state )
+ + diff --git a/Docs/types/IMount.html b/Docs/types/IMount.html new file mode 100644 index 0000000..e9fccf5 --- /dev/null +++ b/Docs/types/IMount.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IMount + + +

Back to Server.Mobiles

+

IMount

+

Derived Types: BaseMount, BaseWarHorse, Beetle, ChargerOfTheFallen, CoMWarHorse, CuSidhe, DesertOstard, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, FactionWarHorse, FireBeetle, FireSteed, ForestOstard, FrenziedOstard, GrizzledMare, HellSteed, Hiryu, HolySteed, Horse, Kirin, LesserHiryu, MinaxWarHorse, Nightmare, Reptalon, RidableLlama, RideablePolarBear, Ridgeback, SavageRidgeback, ScaledSwampDragon, SeaHorse, SilverSteed, SkeletalMount, SLWarHorse, SwampDragon, TBWarHorse, UnholySteed, Unicorn, VirtualMount, VirtualMount

+ Mobile Rider( get; set; )
+ virtual void OnRiderDamaged( int amount, Mobile from, bool willKill )
+ + diff --git a/Docs/types/IMountItem.html b/Docs/types/IMountItem.html new file mode 100644 index 0000000..027117f --- /dev/null +++ b/Docs/types/IMountItem.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IMountItem + + +

Back to Server.Mobiles

+

IMountItem

+

Derived Types: ChargerOfTheFallen, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, MountItem, RideablePolarBear, VirtualMountItem, VirtualMountItem

+ IMount Mount( get; )
+ + diff --git a/Docs/types/IMovementImpl.html b/Docs/types/IMovementImpl.html new file mode 100644 index 0000000..8591411 --- /dev/null +++ b/Docs/types/IMovementImpl.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IMovementImpl + + +

Back to Server.Movement

+

IMovementImpl

+

Derived Types: MovementImpl

+ virtual bool CheckMovement( Mobile m, Direction d, out int newZ )
+ virtual bool CheckMovement( Mobile m, Map map, Point3D loc, Direction d, out int newZ )
+ + diff --git a/Docs/types/INativeReader.html b/Docs/types/INativeReader.html new file mode 100644 index 0000000..453a640 --- /dev/null +++ b/Docs/types/INativeReader.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - INativeReader + + +

Back to Server

+

INativeReader

+

Derived Types: NativeReaderUnix, NativeReaderWin32

+ virtual void Read( IntPtr ptr, void *buffer, int length )
+ + diff --git a/Docs/types/INinjaAmmo.html b/Docs/types/INinjaAmmo.html new file mode 100644 index 0000000..82e92f5 --- /dev/null +++ b/Docs/types/INinjaAmmo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - INinjaAmmo + + +

Back to Server.Items

+

INinjaAmmo : IUsesRemaining

+

Derived Types: FukiyaDarts, Shuriken

+ Poison Poison( get; set; )
+ int PoisonCharges( get; set; )
+ + diff --git a/Docs/types/INinjaWeapon.html b/Docs/types/INinjaWeapon.html new file mode 100644 index 0000000..89646a3 --- /dev/null +++ b/Docs/types/INinjaWeapon.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - INinjaWeapon + + +

Back to Server.Items

+

INinjaWeapon : IUsesRemaining

+

Derived Types: Fukiya, LeatherNinjaBelt

+ Type AmmoType( get; )
+ int EmptyWeaponMessage( get; )
+ int FullWeaponMessage( get; )
+ int NoFreeHandMessage( get; )
+ Poison Poison( get; set; )
+ int PoisonCharges( get; set; )
+ int RecentlyUsedMessage( get; )
+ int WeaponDamage( get; )
+ int WeaponMaxRange( get; )
+ int WeaponMinRange( get; )
+ int WrongAmmoMessage( get; )
+ virtual void AttackAnimation( Mobile from, Mobile to )
+ + diff --git a/Docs/types/IPFirewallEntry.html b/Docs/types/IPFirewallEntry.html new file mode 100644 index 0000000..b6d095e --- /dev/null +++ b/Docs/types/IPFirewallEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - IPFirewallEntry + + +

Back to Server

+

(Firewall) - IPFirewallEntry : IFirewallEntry

+ (ctor) IPFirewallEntry( IPAddress address )
+ virtual bool Equals( object obj )
+ virtual int GetHashCode()
+ virtual bool IsBlocked( IPAddress address )
+ virtual string ToString()
+ + diff --git a/Docs/types/IPLimiter.html b/Docs/types/IPLimiter.html new file mode 100644 index 0000000..3fe0bf5 --- /dev/null +++ b/Docs/types/IPLimiter.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IPLimiter + + +

Back to Server.Misc

+

IPLimiter

+ (static) bool IsExempt( IPAddress ip )
+ (static) bool Verify( IPAddress ourAddress )
+ (ctor) IPLimiter()
+ + diff --git a/Docs/types/IPacketEncoder.html b/Docs/types/IPacketEncoder.html new file mode 100644 index 0000000..e3e8c64 --- /dev/null +++ b/Docs/types/IPacketEncoder.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IPacketEncoder + + +

Back to Server.Network

+

IPacketEncoder

+ virtual void DecodeIncomingPacket( NetState from, ref byte[] buffer, ref int length )
+ virtual void EncodeOutgoingPacket( NetState to, ref byte[] buffer, ref int length )
+ + diff --git a/Docs/types/IParty.html b/Docs/types/IParty.html new file mode 100644 index 0000000..4dd858a --- /dev/null +++ b/Docs/types/IParty.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IParty + + +

Back to Server

+

IParty

+

Derived Types: Party

+ virtual void OnManaChanged( Mobile m )
+ virtual void OnStamChanged( Mobile m )
+ virtual void OnStatsQuery( Mobile beholder, Mobile beheld )
+ + diff --git a/Docs/types/IPoint2D.html b/Docs/types/IPoint2D.html new file mode 100644 index 0000000..598a0b8 --- /dev/null +++ b/Docs/types/IPoint2D.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IPoint2D + + +

Back to Server

+

IPoint2D

+

Derived Types: AbbatoirAddon, AbbatoirDeed, AbysmalHorror, AcidProofRobe, AcidSlime, Actor, AddonComponent, AddonContainerComponent, AdminRobe, AdmiralsHeartyRum, Aegis, AegisOfGrace, Afro, AgapiteElemental, AgapiteGranite, AgapiteIngot, AgapiteOre, AgilityPotion, AgilityScroll, AirElemental, AlbertaGiacco, Alchemist, AlchemistsBauble, AlchemistTableEastAddon, AlchemistTableEastDeed, AlchemistTableSouthAddon, AlchemistTableSouthDeed, AlchemyBag, AlchemyStone, Alligator, Amber, Amethyst, AncientFarmersKasa, AncientLich, AncientSamuraiDo, AncientSmithyHammer, AncientUrn, AncientWyrm, ANecromancerShroud, AniLargeVioletFlask, AnimalTrainer, AnimateDeadScroll, AniRedRibbedFlask, AniSmallBlueFlask, AnkhNorth, AnkhOfSacrificeAddon, AnkhOfSacrificeComponent, AnkhOfSacrificeDeed, AnkhWest, AnsellaGryen, AnthropomorphistGlasses, AntLion, Anvil, AnvilComponent, AnvilEastAddon, AnvilEastDeed, AnvilSouthAddon, AnvilSouthDeed, Apple, ApplePie, AppleTreeAddon, AppleTreeDeed, AppleTrunkAddon, AppleTrunkDeed, ArcaneBookshelfEastAddon, ArcaneBookshelfEastDeed, ArcaneBookshelfSouthAddon, ArcaneBookshelfSouthDeed, ArcaneCircleAddon, ArcaneCircleDeed, ArcaneCircleScroll, ArcaneDaemon, ArcaneEmpowermentScroll, ArcaneFey, ArcaneFiend, ArcaneFocus, ArcaneGem, ArcaneShield, ArcanistStatueEastAddon, ArcanistStatueEastDeed, ArcanistStatueSouthAddon, ArcanistStatueSouthDeed, ArchCureScroll, ArcherGuard, ArcheryButte, ArcheryButteAddon, ArcheryButteDeed, Architect, ArchProtectionScroll, ArcticDeathDealer, ArcticOgreLord, Armoire, Armorer, ArmorOfFortune, ArmsAndWeaponsPrimer, ArmsOfTacticalExcellence, Arrow, ArtifactLargeVase, ArtifactVase, Artist, ArtsGlasses, AshBoard, AshLog, AssassinSpike, AttuneWeaponScroll, AwaseMisoSoup, AwesomeDisturbingPortraitAddon, AwesomeDisturbingPortraitComponent, AwesomeDisturbingPortraitDeed, Axe, AxeOfTheHeavens, Axle, AxleGears, Backgammon, Backpack, BackpackArtifact, Bacon, BadCard, Bag, BagOfAllReagents, BagOfingots, BagOfNecroReagents, BagOfReagents, BagOfSending, BakeKitsune, Baker, BallOfSummoning, BallotBox, BallotBoxAddon, BallotBoxDeed, Balron, BambooChair, BambooFlute, BambooScreen, Banana, Bananas, Bandage, Bandana, BankBox, BankCheck, Banker, BankerCamp, Banner, BannerDeed, BarbedHides, BarbedLeather, Bard, BardGuildmaster, Bardiche, BarkeepContract, Barkeeper, BarkFragment, Barracoon, BarredMetalDoor, BarredMetalDoor2, Barrel, BarrelHoops, BarrelLid, BarrelStaves, BarrelTap, Bascinet, BaseAddon, BaseAddonContainer, BaseAddonContainerDeed, BaseAddonDeed, BaseAgilityPotion, BaseAmbitiousSolenQueen, BaseArmor, BaseAxe, BaseBagBall, BaseBashing, BaseBeverage, BaseBoard, BaseBoat, BaseBoatDeed, BaseBook, BaseBracelet, BaseBulletinBoard, BaseCamp, BaseChampion, BaseCloak, BaseClothing, BaseClothMaterial, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseContainer, BaseCreature, BaseCurePotion, BaseDecorationArtifact, BaseDecorationContainerArtifact, BaseDockedBoat, BaseDoor, BaseEarrings, BaseEnraged, BaseEquipableLight, BaseEscortable, BaseExplosionPotion, BaseFactionGuard, BaseFactionTrap, BaseFactionTrapDeed, BaseFactionVendor, BaseFamiliar, BaseFloor, BaseFormTalisman, BaseFruitTreeAddon, BaseGlovesOfMining, BaseGranite, BaseGuard, BaseGuildmaster, BaseHarvestTool, BaseHat, BaseHealer, BaseHealPotion, BaseHides, BaseHouse, BaseHouseDoor, BaseImprisonedMobile, BaseIngot, BaseInstrument, BaseJewel, BaseKnife, BaseLeather, BaseLight, BaseMagicFish, BaseMeleeWeapon, BaseMiddleTorso, BaseMonolith, BaseMount, BaseMulti, BaseNecklace, BaseOre, BaseOuterLegs, BaseOuterTorso, BasePants, BasePiece, BasePigmentsOfTokuno, BasePlayerBB, BasePoisonPotion, BasePoleArm, BasePotion, BaseQuester, BaseQuiver, BaseRanged, BaseReagent, BaseRefreshPotion, BaseRejuvinationAnkh, BaseRing, BaseRunicTool, BaseScales, BaseShield, BaseShieldGuard, BaseShirt, BaseShoes, BaseSign, BaseSolenMatriarch, BaseSpear, BaseStaff, BaseStrengthPotion, BaseSuit, BaseSword, BaseSystemController, BaseTalisman, BaseTalismanSummon, BaseTool, BaseTrap, BaseTreasureChest, BaseVendor, BaseWaist, BaseWall, BaseWand, BaseWarHorse, BaseWaterContainer, BaseWeapon, BaseWindChimes, Basket, Basket1Artifact, Basket2Artifact, Basket3NorthArtifact, Basket3WestArtifact, Basket4Artifact, Basket5NorthArtifact, Basket5WestArtifact, Basket6Artifact, BattleAxe, BatWing, Beads, Beard, BearMask, BedOfNailsAddon, BedOfNailsComponent, BedOfNailsDeed, Bedroll, Beekeeper, Beeswax, Beetle, BellOfTheDead, BentoBox, Betrayer, BeverageBottle, BigElvenChair, BigFish, Bird, BirdsOfBritannia, BlackAmbitiousSolenQueen, BlackBear, BlackDyeTub, Blackheart, BlackLotusHood, BlackPearl, BlackScales, Blacksmith, BlacksmithGuildmaster, BlackSolenInfiltratorQueen, BlackSolenInfiltratorWarrior, BlackSolenMatriarch, BlackSolenQueen, BlackSolenWarrior, BlackSolenWorker, BlackStaff, BlackthornWelcomeBook, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BladeSpirits, BladeSpiritsScroll, BlankMap, BlankScroll, BlazeDyeTub, BlazeOfDeath, BlessScroll, Blight, BlightGrippedLongbow, Blocker, Blood, BloodElemental, Bloodmoss, BloodOathScroll, BloodPentagram, BloodwoodBoard, BloodwoodLog, BloodwoodSpirit, BloodyPentagramAddon, BloodyPentagramComponent, BloodyPentagramDeed, BloodyWaterArtifact, Blowpipe, BlueBeaker, BlueBook, BlueCurvedFlask, BlueDecorativeRugAddon, BlueDecorativeRugDeed, BlueDiamond, BlueFancyRugAddon, BlueFancyRugDeed, BlueNinjaQuestTeleporter, BluePlainRugAddon, BluePlainRugDeed, BlueScales, BlueSlateFloorCenter, BlueSnowflake, BlueSoulstone, Boar, Board, BodySash, Bogle, Bogling, BogThing, BoilingCauldronAddon, BoilingCauldronDeed, Bokuto, Bola, BolaBall, BoldStranger, Bolt, BoltOfCloth, Bone, BoneArms, BoneChest, BoneCouchAddon, BoneCouchComponent, BoneCouchDeed, BoneCrusher, BoneDemon, BoneGloves, BoneHarvester, BoneHelm, BoneKnight, BoneLegs, BoneMagi, BonePile, Bonesmasher, BoneTableAddon, BoneTableDeed, BoneThroneAddon, BoneThroneComponent, BoneThroneDeed, Bonnet, BookOfBushido, BookOfChivalry, BookOfNinjitsu, BooksFaceDownArtifact, BooksNorthArtifact, BooksWestArtifact, Boomstick, Boots, Bottle, BottleArtifact, Bow, BowlArtifact, BowlFlour, BowlsHorizontalArtifact, BowlsVerticalArtifact, BowOfTheJukaKing, Bowyer, BraceletOfBinding, BraceletOfHealth, BrambleCoat, BraveKnightOfTheBritannia, Brazier, BrazierArtifact, BrazierTall, BreadLoaf, BreathOfTheDead, BrickHouseDeed, BricksFloor1, BricksFloor2, BrideGroom, Brigand, BrigandCamp, BrightlyColoredEggs, BrilliantAmber, BritannianFlora, BroadcastCrystal, Broadsword, BrocadeGozaMatEastAddon, BrocadeGozaMatEastDeed, BrocadeGozaMatSouthAddon, BrocadeGozaMatSouthDeed, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatEastDeed, BrocadeSquareGozaMatSouthAddon, BrocadeSquareGozaMatSouthDeed, BrokenArmoireAddon, BrokenArmoireComponent, BrokenArmoireDeed, BrokenBedAddon, BrokenBedDeed, BrokenBookcaseAddon, BrokenBookcaseComponent, BrokenBookcaseDeed, BrokenChair, BrokenChestOfDrawersAddon, BrokenChestOfDrawersComponent, BrokenChestOfDrawersDeed, BrokenCoveredChairAddon, BrokenCoveredChairComponent, BrokenCoveredChairDeed, BrokenFallenChairAddon, BrokenFallenChairComponent, BrokenFallenChairDeed, BrokenVanityAddon, BrokenVanityDeed, BronzeElemental, BronzeGranite, BronzeIngot, BronzeOre, BronzeShield, BronzeStatueMaker, BrownBear, BrownBearRugEastAddon, BrownBearRugEastDeed, BrownBearRugSouthAddon, BrownBearRugSouthDeed, BrownBook, Bucket, Buckler, BulkOrderBook, Bull, BulletinBoard, BulletinMessage, BullFrog, BunnyHole, BunsHair, BurglarsBandana, BurningOfTrinsic, BustEast, BustSouth, Butcher, ButcherKnife, Cabbage, Cake, CakeMix, CallToAnarchy, Calm, Campfire, Candelabra, CandelabraOfSouls, CandelabraStand, Candle, CandleLarge, CandleLong, CandleShort, CandleSkull, CandyCane, Cannon, CannonAddon, CannonAddonComponent, CannonComponent, CannonDeed, Cantaloupe, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CapturedEssence, CapturedHordeMinion, Cards, Cards2, Cards3, Cards4, Carpenter, Carrot, Castle, CastleDeed, Cat, Cauldron, CaveFloorCenter, CaveFloorEast, CaveFloorNorth, CaveFloorSouth, CaveFloorWest, CavortingClub, Centaur, CeramicMug, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChainLightningScroll, ChampionAltar, ChampionPlatform, ChampionSkull, ChampionSkullBrazier, ChampionSkullPlatform, ChampionSpawn, ChaosDaemon, ChaosDragoon, ChaosDragoonElite, ChaosGuard, ChaosShield, CharacterStatue, CharacterStatueDeed, CharacterStatueMaker, CharacterStatuePlinth, ChargerOfTheFallen, CheckerBoard, Checkers, Checkers2, CheesePizza, CheeseSlice, CheeseWedge, CheeseWheel, CherryArmoire, CherryBlossomTreeAddon, CherryBlossomTreeDeed, CherryBlossomTrunkAddon, CherryBlossomTrunkDeed, Chessboard, Chessmen, Chessmen2, Chessmen3, ChestOfHeirlooms, Chicken, ChickenLeg, ChildrenTalesVol2, ChiselsNorth, ChiselsWest, Chyloth, ChylothShroud, ChylothStaff, CinnamonFancyRugAddon, CinnamonFancyRugDeed, Circlet, Citrine, CityMap, Cleaver, Cloak, Clock, ClockFrame, ClockLeft, ClockParts, ClockRight, ClockworkAssembly, Clone, ClosedBarrel, CloseHelm, Cloth, ClothingBlessDeed, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyScroll, ClumsyWand, Coal, Cobbler, CobblestonesFloor, Coconut, CocoonArtifact, ColdBlood, ColdForgedBlade, ColoredAnvil, CommodityDeed, CommodityDeedBox, CompositeBow, CoMWarHorse, ConfirmationMoongate, ConflagrationPotion, ConfusionBlastPotion, Container, ContestMiniHouse, ContestMiniHouseDeed, ContractOfEmployment, ControlPanel, Cook, CookableFood, CookedBird, CookieMix, Cookies, CopperElemental, CopperGranite, CopperIngot, CopperOre, CopperWire, Corpse, Corpser, CorpseSkinScroll, CorrosiveSlime, CorruptedSoul, Corruption, Cotton, Cougar, CounselorRobe, CoveredChair, Cow, Crane, CreateFoodScroll, CreatureBackpack, CreepyPortraitAddon, CreepyPortraitComponent, CreepyPortraitDeed, CrescentBlade, CrimsonCincture, Crossbow, CrossbowBolts, CrownOfTalKeesh, CrystalCaveBarrier, CrystalElemental, CunningScroll, CupsArtifact, CurePotion, CureScroll, Cursed, CursedSoul, CurseScroll, CurseWeaponScroll, CurtainsAddon, CurtainsComponent, CurtainsDeed, CurvedFlask, CuSidhe, CuSidheFormTalisman, CustomHairstylist, Cutlass, Cyclops, Daemon, DaemonArms, DaemonBlood, DaemonBloodChest, DaemonBone, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DamagedBooksArtifact, DarkenedSky, DarkFlowerTapestryEastAddon, DarkFlowerTapestryEastDeed, DarkFlowerTapestrySouthAddon, DarkFlowerTapestrySouthDeed, DarknightCreeper, DarkSandstoneFloorN, DarkSandstoneFloorW, DarkSapphire, DarkSource, DarkTidesHorn, DarkTidesTeleporter, DarkWisp, DarkWolfFamiliar, DarkWoodDoor, DarkWoodGate, DarkWoodHouseDoor, DarkWoodWall, DarkYarn, DartBoard, DartBoardEastAddon, DartBoardEastDeed, DartBoardSouthAddon, DartBoardSouthDeed, Dates, DawnsMusicBox, DawnsMusicGear, DeadlyImp, DeadlyPoisonPotion, DeadWood, DeathAdder, DeathRobe, DeathShroud, DeathwatchBeetle, DeathwatchBeetleHatchling, DecayedCorpse, DeceitBrazier, DeceitDungeonOfHorror, DecoArrowShafts, DecoBlackmoor, DecoBloodspawn, DecoBottlesOfLiquor, DecoBridle, DecoBridle2, DecoBrimstone, DecoCards5, DecoCrystalBall, DecoDeckOfTarot, DecoDeckOfTarot2, DecoDragonsBlood, DecoDragonsBlood2, DecoEyeOfNewt, DecoFlower, DecoFlower2, DecoFullJar, DecoFullJars3, DecoFullJars4, DecoGarlic, DecoGarlic2, DecoGarlicBulb, DecoGarlicBulb2, DecoGinseng, DecoGinseng2, DecoGinsengRoot, DecoGinsengRoot2, DecoGoldIngot, DecoGoldIngot2, DecoGoldIngots, DecoGoldIngots2, DecoGoldIngots3, DecoGoldIngots4, DecoHay, DecoHay2, DecoHorseDung, DecoIronIngot, DecoIronIngot2, DecoIronIngots, DecoIronIngots2, DecoIronIngots3, DecoIronIngots4, DecoIronIngots5, DecoIronIngots6, DecoMagicalCrystal, DecoMandrake, DecoMandrake2, DecoMandrake3, DecoMandrakeRoot, DecoMandrakeRoot2, DecoNightshade, DecoNightshade2, DecoNightshade3, DecoObsidian, DecoPumice, DecorativeAxeNorth, DecorativeAxeWest, DecorativeBowNorth, DecorativeBowWest, DecorativeDAxeNorth, DecorativeDAxeWest, DecorativePlateKabuto, DecorativeShield, DecorativeShield1, DecorativeShield10, DecorativeShield11, DecorativeShield2, DecorativeShield3, DecorativeShield4, DecorativeShield5, DecorativeShield6, DecorativeShield7, DecorativeShield8, DecorativeShield9, DecorativeShieldDeed, DecorativeShieldSword1North, DecorativeShieldSword1West, DecorativeShieldSword2North, DecorativeShieldSword2West, DecorativeSwordNorth, DecorativeSwordWest, DecorativeTopiary, DecoRock, DecoRock2, DecoRocks, DecoRocks2, DecoRoseOfTrinsic, DecoRoseOfTrinsic2, DecoRoseOfTrinsic3, DecoSilverIngot, DecoSilverIngot2, DecoSilverIngots, DecoSilverIngots2, DecoSilverIngots3, DecoSilverIngots4, DecoSilverIngots5, DecoSpittoon, DecoTarot, DecoTarot2, DecoTarot3, DecoTarot4, DecoTarot5, DecoTarot6, DecoTarot7, DecoTray, DecoTray2, DecoWyrmsHeart, DeepSeaSerpent, DeerMask, DemonForks, DemonKnight, DemonSkull, DesertOstard, DetectiveBoots, Devourer, Diamond, DiamondMace, Dices, DimensionalTravel, DireWolf, DirtPatch, DirtyFrypan, DirtyKettle, DirtyPan, DirtyPot, DirtyRoundPot, DirtySmallPot, DirtySmallRoundPot, DisappearingRaiseSwitch, DiseasedBark, DiseasedCat, DisguiseKit, DisguisePersistance, DispelFieldScroll, DispelScroll, DisplayCache, DisturbingPortraitAddon, DisturbingPortraitComponent, DisturbingPortraitDeed, DiversityOfOurLand, DivineCountenance, DjinnisRing, Dog, Dolphin, DolphinLeftArtifact, DolphinRightArtifact, Doppleganger, DoubleAxe, DoubleBladedStaff, Doublet, Dough, DovetailSaw, Dragon, DragonArms, DragonBardingDeed, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, Drake, DrakovsJournal, Drawer, DrawKnife, DreadHornMane, DreadPirateHat, DreadSpider, Dressform, DriedHerbs, DriedOnions, Drums, Dryad, DryadAllureScroll, DullCopperElemental, DullCopperGranite, DullCopperIngot, DullCopperOre, Dummy, DummyAssassin, DummyFence, DummyHealer, DummyMace, DummyNox, DummyStun, DummySuper, DummySword, DummyTheif, DupresShield, DupreSuit, Dyes, DyeTub, DynamicTeleporter, Eagle, EarOfCorn, EarringBoxSet, EarringsOfProtection, EarthElemental, EarthquakeScroll, Easle, EasterEggs, EcruCitrine, EffectController, EffectItem, Efreet, EggBomb, EggCaseArtifact, Eggs, Eggshells, ElderGazer, ElegantArmoire, ElegantLowTable, EliteNinja, ElvenBedEastAddon, ElvenBedEastDeed, ElvenBedSouthAddon, ElvenBedSouthDeed, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenDresserEastAddon, ElvenDresserEastDeed, ElvenDresserSouthAddon, ElvenDresserSouthDeed, ElvenForgeAddon, ElvenForgeDeed, ElvenGlasses, ElvenLoveseatEastAddon, ElvenLoveseatEastDeed, ElvenLoveseatSouthAddon, ElvenLoveseatSouthDeed, ElvenMachete, ElvenPants, ElvenQuiver, ElvenReadingChair, ElvenShirt, ElvenSpellblade, ElvenSpinningwheelEastAddon, ElvenSpinningwheelEastDeed, ElvenSpinningwheelSouthAddon, ElvenSpinningwheelSouthDeed, ElvenStoveEastAddon, ElvenStoveEastDeed, ElvenStoveSouthAddon, ElvenStoveSouthDeed, ElvenWashBasinEastAddon, ElvenWashBasinEastDeed, ElvenWashBasinSouthAddon, ElvenWashBasinSouthDeed, ElwoodMcCarrin, EmbroideredOakLeafCloak, Emerald, Emino, EminosKatana, EminosKatanaChest, EmptyBentoBox, EmptyBookcase, EmptyCurvedFlaskE, EmptyCurvedFlaskW, EmptyJar, EmptyJars, EmptyJars2, EmptyJars3, EmptyJars4, EmptyPewterBowl, EmptyPewterTub, EmptyRibbedFlask, EmptyToolKit, EmptyToolKit2, EmptyVial, EmptyVialsWRack, EmptyWoodenBowl, EmptyWoodenTub, EnchantedPaints, EnchantedSextant, EnchantedSwitch, EnchantedTitanLegBone, EnergyBoltScroll, EnergyFieldScroll, EnergyVortex, EnergyVortexScroll, EnhancedBandage, EnragedBlackBear, EnragedEagle, EnragedHart, EnragedHind, EnragedRabbit, EnshroudedFigure, EnslavedGargoyle, Entity, EscortableMage, EssenceOfBattle, EssenceOfWindScroll, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, EtherealVoyageScroll, EtherealWarrior, EthicalHedonism, EthicsPersistance, Ettin, EvilHealer, EvilIdolSkull, EvilMage, EvilMageLord, EvilOmenScroll, EvilWanderingHealer, Executioner, ExecutionersAxe, ExecutionersCap, Exiler, ExodusMinion, ExodusOverseer, ExorcismScroll, ExplosionPotion, ExplosionScroll, EyeOfTheTravesty, FabledFishingNet, FactionBerserker, FactionBoardVendor, FactionBottleVendor, FactionDeathKnight, FactionDragoon, FactionExplosionTrap, FactionExplosionTrapDeed, FactionGasTrap, FactionGasTrapDeed, FactionHenchman, FactionHorseVendor, FactionKnight, FactionMercenary, FactionNecromancer, FactionOreVendor, FactionPaladin, FactionPersistance, FactionReagentVendor, FactionSawTrap, FactionSawTrapDeed, FactionSorceress, FactionSpikeTrap, FactionSpikeTrapDeed, FactionStone, FactionTrapRemovalKit, FactionWarHorse, FactionWizard, FancyArmoire, FancyDrawer, FancyDress, FancyElvenTableEastAddon, FancyElvenTableEastDeed, FancyElvenTableSouthAddon, FancyElvenTableSouthDeed, FancyShirt, FancyWindChimes, FancyWoodenChairCushion, FanDancer, FangOfRactus, FanNorthArtifact, FanWestArtifact, FarmableCabbage, FarmableCarrot, FarmableCotton, FarmableCrop, FarmableFlax, FarmableLettuce, FarmableOnion, FarmablePumpkin, FarmableTurnip, FarmableWheat, Farmer, Feather, FeatheredHat, FeeblemindScroll, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FerelTreefellow, Ferret, FerretFormTalisman, FertileDirt, FestiveCactus, FetidEssence, FeyLeggings, FieldStoneHouseDeed, FierceDragon, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, FireballScroll, FireballWand, FireBeetle, Firebomb, FirebombField, FireColumnAddon, FireColumnTrap, FireElemental, FireFieldItem, FireFieldScroll, FireGargoyle, FireHorn, FireRuby, FireSteed, FireworksWand, Fish, FisherGuildmaster, Fisherman, FishingPole, FishSteak, Fists, FlameSpurtTrap, FlamestrikeScroll, FlamingHead, FlamingHeadDeed, Flax, FleshGolem, FleshRenderer, FleshRipper, FletcherTools, FloppyHat, FlourMillEastAddon, FlourMillEastDeed, FlourMillSouthAddon, FlourMillSouthDeed, FlourSifter, FlowerGarland, FlowersArtifact, FluteOfRenewal, FoldedSteelGlasses, Food, FootStool, ForestOstard, Forge, ForgeComponent, ForgedMetal, Fork, ForkLeft, ForkRight, FormalShirt, FortuneTeller, FountainAddon, FountainDeed, FountainOfLife, FountainOfLifeDeed, FrenchBread, FrenziedOstard, FriedEggs, Froe, FropozJournal, Frostbringer, FrostOoze, FrostSpider, FrostTroll, FrostwoodBoard, FrostwoodLog, FruitBasket, FruitPie, Fukiya, FukiyaDarts, FullApron, FullBookcase, FullVialsWRack, FurBoots, FurCape, FurnitureDyeTub, FurSarong, Furtrader, Futon, GabrielPiete, Gaman, GamblingStone, Gargoyle, GargoyleDestroyer, GargoyleEnforcer, GargoylesPickaxe, Garlic, GasTrap, GateTravelScroll, GauntletsOfNobility, GauntletSpawner, Gazer, GazerLarva, Gears, GemmedCirclet, GenericBeard, GenericHair, GenericHouseDoor, GhostShipAnchor, Ghoul, GiantBlackWidow, GiantIceWorm, GiantRat, GiantSerpent, GiantSpider, GiantSpikeTrap, GiantToad, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, Gibberling, GiftBox, GiftBoxAngel, GiftBoxCube, GiftBoxCylinder, GiftBoxNeon, GiftBoxOctogon, GiftBoxRectangle, GiftOfLifeScroll, GiftOfRenewalScroll, GildedDress, GildedWoodenChest, GingerBreadCookie, GingerBreadHouseAddon, GingerBreadHouseDeed, Ginseng, GlacialStaff, GladiatorsCollar, Glass, Glassblower, GlassblowingBook, GlassBottle, GlassMug, Globe, GlovesOfThePugilist, GlovesOfTheSun, GMRobe, GnarledStaff, Goat, Goatee, Goblet, Gold, GoldBeadNecklace, GoldBracelet, GoldBricks, GoldEarrings, GoldenDecorativeRugAddon, GoldenDecorativeRugDeed, GoldenElemental, GoldenSkull, GoldGranite, GoldIngot, GoldNecklace, GoldOre, GoldRing, GoldWire, Golem, GolemController, GolemCrafter, GoreFiend, Gorilla, GozaMatEastAddon, GozaMatEastDeed, GozaMatSouthAddon, GozaMatSouthDeed, GrammarOfOrcish, GrandGrimoire, Granite, Grapes, GraveDust, GrayBrickFireplaceEastAddon, GrayBrickFireplaceEastDeed, GrayBrickFireplaceSouthAddon, GrayBrickFireplaceSouthDeed, GreaterAgilityPotion, GreaterConflagrationPotion, GreaterConfusionBlastPotion, GreaterCurePotion, GreaterDragon, GreaterExplosionPotion, GreaterHealPotion, GreaterHealScroll, GreaterHealWand, GreaterMongbat, GreaterPoisonPotion, GreaterStrengthPotion, GreatHart, GreenBeaker, GreenBottle, GreenCurvedFlask, GreenDriedFlowers, GreenGourd, GreenMarbleFloor, GreenNinjaQuestTeleporter, GreenScales, GreenStocking, GreenTea, GreenTeaBasket, GreenThorns, GreenThornsSHTeleporter, GreyFlagstones, GreyMarbleFloor, GreySlateFloor, GreyWolf, GrimmochDrummel, GrimmochJournal1, GrimmochJournal11, GrimmochJournal14, GrimmochJournal17, GrimmochJournal2, GrimmochJournal23, GrimmochJournal3, GrimmochJournal6, GrimmochJournal7, Grizelda, GrizzledBones, GrizzledMare, GrizzledMareStatuette, GrizzlyBear, GruesomeStandardArtifact, GuantletsOfAnger, Guardian, GuardianBarrier, GuideToGuilds, GuildDeed, GuildHouse, Guildstone, GuildstoneDeed, GuildTeleporter, Guillotine, GuillotineAddon, GuillotineComponent, GuillotineDeed, GwennosHarp, Gypsy, GypsyAnimalTrainer, GypsyBanker, GypsyMaiden, HagApprenticeCorpse, HagCauldron, HagStew, Hair, HairDye, HairRestylingDeed, HairStylist, Hakama, HakamaShita, Halberd, HalfApron, HalfEmptyJar, HalfEmptyJars, Ham, Hammer, HammerPick, HangingAxesAddon, HangingAxesDeed, HangingLantern, HangingSkeleton, HangingSkeletonDeed, HangingSwordsAddon, HangingSwordsDeed, HangoverCure, HanzosBow, Haochi, HaochisGuardsman, HaochisKatana, HaochisKatanaGenerator, HaochisTreasureChest, HarborMaster, HarmScroll, HarmWand, Harp, Harpy, Harrower, HarrowerGate, HarrowerTentacles, Hatchet, HatOfTheMagi, HaunterMirrorAddon, HaunterMirrorComponent, HaunterMirrorDeed, Head, HeadlessOne, Healer, HealerCamp, HealerGuildmaster, HealPotion, HealScroll, HealWand, HearthOfHomeFire, HearthOfHomeFireDeed, HeartOfTheLion, HeartwoodBoard, HeartwoodLog, HeaterShield, HeatingStand, HeavyCrossbow, HeavyPlateJingasa, HellCat, HellHound, HellSteed, Helmet, HelmOfInsight, HelmOfSwiftness, Henchman, Herbalist, HeritageToken, HiddenFigure, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, Hides, Hind, Hinge, HintItem, Hiryu, Hold, HolidayBell, HolidayTree, HolidayTreeDeed, HollowPrism, HolyFamiliar, HolyKnightsBreastplate, HolyMage, HolySteed, HolySword, HoneydewMelon, HonorableSwords, HonorCandle, HoodedShroudOfShadows, HordeMinion, HordeMinionFamiliar, HornedHides, HornedLeather, HornedTribalMask, HornOfRetreat, HornOfRetreatMoongate, HorrificBeastScroll, Horse, HorseShoes, Horus, Hourglass, HourglassAni, HouseDeed, HouseFoundation, HouseLadderAddon, HouseLadderDeed, HousePlacementTool, HouseRaffleDeed, HouseRaffleStone, HouseSign, HouseTeleporter, HuntersHeaddress, IceElemental, IceFiend, IceSerpent, IceSnake, IcicleLargeEast, IcicleLargeSouth, IcicleMedEast, IcicleMedSouth, IcicleSmallEast, IcicleSmallSouth, IcyPatch, IdolOfTheChampion, IDWand, IEntity, IharaSoko, Ilhenir, ILockpickable, ImmolatingWeaponScroll, Imp, Impaler, Impresario, IncognitoScroll, IndecipherableMap, IngotStone, InjuredWolf, InnKeeper, InquisitorsResolution, Inshave, InteriorDecorator, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem2, InternalItem2, InterredGrizzle, InvisibilityScroll, IolosLute, IPoint3D, IronGate, IronGateShort, IronIngot, IronMaidenAddon, IronMaidenDeed, IronOre, IronWire, IronwoodCrown, IronWorker, ISpawnable, ITelekinesisable, Item, JackalsCollar, JackOLantern, JackRabbit, JadeStatueMaker, JarHoney, Jars2, Jars3, Jars4, JedahEntille, JesterHat, JesterHatofChuckles, JesterSuit, JeweledFiligree, Jeweler, JinBaori, JoinStone, JointingPlane, Jug, Juggernaut, JukaBow, JukaLord, JukaMage, JukaWarrior, Jwilson, KaburJournal, Kama, Kamishimo, Kappa, Kasa, KasaOfTheRajin, Katana, KazeKemono, Keep, KeepDeed, KeeperOfChivalry, Keg, Key, KeyRing, KeywordTeleporter, KhaldunPitTeleporter, KhaldunRevenant, KhaldunSummoner, KhaldunZealot, Kilt, Kindling, Kirin, Knife, KnifeLeft, KnifeRight, Kraken, KrisnaHair, KronusScroll, KronusScrollBox, Kryss, LadyOfTheSnow, LadyPortrait1, LadyPortrait2, Lajatang, LambLeg, LampPost1, LampPost2, LampPost3, LampPostArtifact, LampRoomBox, LampRoomTeleporter, Lance, LandTarget, Lantern, LanternOfSouls, LapHarp, LardOfParoxysmus, LargeBagBall, LargeBattleAxe, LargeBedEastAddon, LargeBedEastDeed, LargeBedSouthAddon, LargeBedSouthDeed, LargeBoat, LargeBoatDeed, LargeBOD, LargeCrate, LargeDockedBoat, LargeDockedDragonBoat, LargeDragonBoat, LargeDragonBoatDeed, LargeEmptyFlask, LargeEmptyPot, LargeFishingNetAddon, LargeFishingNetComponent, LargeFishingNetDeed, LargeFlask, LargeForgeEast, LargeForgeEastAddon, LargeForgeEastDeed, LargeForgeSouthAddon, LargeForgeSouthDeed, LargeForgeWest, LargeMarbleDeed, LargeMarbleHouse, LargePainting, LargePatioDeed, LargePatioHouse, LargeSmithBOD, LargeStoneTableEastAddon, LargeStoneTableEastDeed, LargeStoneTableSouthAddon, LargeStoneTableSouthDeed, LargeTable, LargeTailorBOD, LargeVase, LargeVioletFlask, LargeYellowFlask, LavaLizard, LavaSerpent, LavaSnake, LavaTile, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, Leather, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherDyeTub, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LeatherTunicArtifact, LeatherWorker, LeftArm, LeftLeg, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, Lemon, Lemons, LesserCurePotion, LesserExplosionPotion, LesserHealPotion, LesserHiryu, LesserPigmentsOfTokuno, LesserPoisonPotion, Lettuce, LeurociansMempoOfFortune, LeverPuzzleController, LeverPuzzleLever, LeverPuzzleStatue, Leviathan, LibraryBookcase, Lich, LichFormScroll, LichLord, LieutenantOfTheBritannianRoyalGuard, LifeOfATravellingMinstrel, LightFlowerTapestryEastAddon, LightFlowerTapestryEastDeed, LightFlowerTapestrySouthAddon, LightFlowerTapestrySouthDeed, LightningScroll, LightningWand, LightOfTheWinterSolstice, LightOfWayGlasses, LightPlateJingasa, LightSource, LightWoodDoor, LightWoodGate, LightYarn, LightYarnUnraveled, Lime, Limes, Lizardman, LizardmenCamp, Llama, LocalizedAddonComponent, LocalizedContainerComponent, LocalizedSign, LocalizedStatic, LocalMap, LockableBarrel, LockableContainer, Lockpick, Lockpicks, Log, LogCabin, LogCabinDeed, LongBeard, LongFlask, LongHair, LongPants, Longsword, LoomEastAddon, LoomEastDeed, LoomSouthAddon, LoomSouthDeed, LordBlackthorneSuit, LordBritishSuit, LordOaks, LOSBlocker, LtBlueCurvedFlask, LuckyNecklace, LuminescentFungi, LuminousRuneBlade, LunaLance, Lute, LyricalGlasses, LysanderGathenwale, LysanderNotebook1, LysanderNotebook11, LysanderNotebook2, LysanderNotebook3, LysanderNotebook7, LysanderNotebook8, Maabus, MaabusCoffin, MaabusCoffinComponent, Mace, MaceShieldGlasses, Mage, MageCamp, MageGuildmaster, MagicalShortbow, MagicArrowScroll, MagicArrowWand, MagicFlute, MagicLockScroll, MagicReflectScroll, MagicTrapScroll, MagicUnTrapScroll, MagicWand, MagicWizardsHat, MahjongGame, MajorTradeAssociation, MaleElvenRobe, MaleKimono, MalletAndChisel, ManaDrainScroll, ManaDrainWand, ManaVampireScroll, MandrakeRoot, ManPortrait1, ManPortrait2, MansionGuard, ManStatuetteEastArtifact, ManStatuetteSouthArtifact, MapItem, MapleArmoire, Mapmaker, MapmakersPen, MarbleFloor, MarblePavers, MarbleStatueMaker, MarbleWorkshopDeed, Mardoth, MaritimeGlasses, MarkContainer, MarkScroll, MasonryBook, MassCurseScroll, MassDispelScroll, Maul, MeatPie, MediumBoat, MediumBoatDeed, MediumCrate, MediumDockedBoat, MediumDockedDragonBoat, MediumDragonBoat, MediumDragonBoatDeed, MediumFlask, MediumLongBeard, MediumShortBeard, MediumStoneTableEastAddon, MediumStoneTableEastDeed, MediumStoneTableSouthAddon, MediumStoneTableSouthDeed, MediumStretchedHideEastAddon, MediumStretchedHideEastDeed, MediumStretchedHideSouthAddon, MediumStretchedHideSouthDeed, MediumWoodDoor, MeerCaptain, MeerEternal, MeerMage, MeerWarrior, MelisandesCorrodedHatchet, MeltedWax, Mephitis, Meraktus, Merchant, MerchantGuildmaster, MessageInABottle, Messenger, MetalBox, MetalChest, MetalDoor, MetalDoor2, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalHouseDoor, MetalKiteShield, MetalPigmentsOfTokuno, MetalShield, MetalTreasureChest, MeteorSwarmScroll, MidnightBracers, MilitiaCanoneer, MilitiaFighter, MilitiaFighterCorpse, Miller, MinaxWarHorse, MindBlastScroll, MindRotScroll, Miner, MinerGuildmaster, MiniHouseAddon, MiniHouseDeed, MiningCart, MiningCartDeed, Minotaur, MinotaurCaptain, MinotaurHedge, MinotaurScout, MinotaurStatue, MinotaurStatueDeed, Minter, MisoSoup, MistletoeAddon, MistletoeDeed, MLDryad, Mobile, Mohawk, Moloch, Mongbat, Monk, MonkRobe, MonsterStatuette, MoonfireBrew, Moongate, Moonstone, MoonstoneGate, MorgBergen, MorphItem, MortarPestle, MouldingPlane, MoundOfMaggots, MountainGoat, MountedPixieBlueAddon, MountedPixieBlueComponent, MountedPixieBlueDeed, MountedPixieGreenAddon, MountedPixieGreenComponent, MountedPixieGreenDeed, MountedPixieLimeAddon, MountedPixieLimeComponent, MountedPixieLimeDeed, MountedPixieOrangeAddon, MountedPixieOrangeComponent, MountedPixieOrangeDeed, MountedPixieWhiteAddon, MountedPixieWhiteComponent, MountedPixieWhiteDeed, MountItem, MovingCrate, Muculent, Muffins, Mummy, MushroomTrap, Mustache, MyStory, Nails, NameChangeDeed, Naturalist, NatureFury, NatureFuryScroll, Necklace, NecromancerSpellbook, NecromanticGlasses, Neira, NewPlayerTicket, Nightmare, Nightshade, NightSightPotion, NightSightScroll, NightsKiss, Nightstand, Ninja, NinjaTabi, Noble, NoDachi, NorseHelm, NoteForZoel, NoxCrystal, NoxRangersHeavyCrossbow, Nunchaku, OakBoard, OakLog, Obelisk, Obi, OblivionsNeedle, Obsidian, Ogre, OgreLord, OilCloth, Oni, Onion, OpenCoconut, OphidianArchmage, OphidianKnight, OphidianMage, OphidianMatriarch, OphidianWarrior, OrangePetals, Orc, OrcBomber, OrcBrute, OrcCamp, OrcCaptain, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishLord, OrcishMage, OrcishVisage, OrderGuard, OrderShield, OrigamiButterfly, OrigamiFish, OrigamiFrog, OrigamiPaper, OrigamiShape, OrigamiSongbird, OrigamiSwan, Ornament, OrnamentOfTheMagician, OrnateAxe, OrnateCrownOfTheHarrower, OrnateElvenChair, OrnateElvenTableEastAddon, OrnateElvenTableEastDeed, OrnateElvenTableSouthAddon, OrnateElvenTableSouthDeed, OrnateWoodenChest, OssianGrimoire, OverseerSunderedBlade, Pacify, PackHorse, PackingBox, PackLlama, PadsOfTheCuSidhe, PageboyHair, PainSpikeScroll, PaintedImage, Painting1NorthArtifact, Painting1WestArtifact, Painting2NorthArtifact, Painting2WestArtifact, Painting3Artifact, Painting4NorthArtifact, Painting4WestArtifact, Painting5NorthArtifact, Painting5WestArtifact, Painting6NorthArtifact, Painting6WestArtifact, PaintsAndBrush, Panther, PaperLantern, ParagonChest, ParalyzeFieldScroll, ParalyzeScroll, ParasiticPlant, Parrot, ParrotPerchAddon, ParrotPerchDeed, PatchworkSkeleton, Peach, PeachCobbler, PeachTreeAddon, PeachTreeDeed, PeachTrunkAddon, PeachTrunkDeed, Pear, Peasant, PeasantsBokuto, PeculiarFish, PenAndInk, PendantOfTheMagi, PentagramAddon, PentagramDeed, PerfectEmerald, PestilentBandage, PewterBowlOfCarrots, PewterBowlOfCorn, PewterBowlOfLettuce, PewterBowlOfPeas, PewterBowlOfPotatos, PewterMug, PhantomStaff, PhillipsWoodenSteed, Phoenix, Pickaxe, PickpocketDip, PickpocketDipEastAddon, PickpocketDipEastDeed, PickpocketDipSouthAddon, PickpocketDipSouthDeed, PicnicBasket, PieceBlackBishop, PieceBlackChecker, PieceBlackKing, PieceBlackKnight, PieceBlackPawn, PieceBlackQueen, PieceBlackRook, PieceWhiteBishop, PieceWhiteChecker, PieceWhiteKing, PieceWhiteKnight, PieceWhitePawn, PieceWhiteQueen, PieceWhiteRook, Pier, Pig, PigIron, PigmentsOfTokuno, Pike, PileOfGlacialSnow, PilferedDancerFans, PinkFancyRugAddon, PinkFancyRugDeed, Pitcher, Pitchfork, Pixie, PixieSwatter, PlagueBeast, PlagueBeastBackpack, PlagueBeastBackupOrgan, PlagueBeastBlood, PlagueBeastComponent, PlagueBeastGland, PlagueBeastHeart, PlagueBeastInnard, PlagueBeastLord, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastMutationCore, PlagueBeastOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan, PlagueBeastVein, PlagueSpawn, PlainDress, PlainLowTable, PlainWoodenChest, Plank, PlantBowl, PlantItem, Plate, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PlayerBarkeeper, PlayerBBEast, PlayerBBSouth, PlayerMobile, PlayerVendor, PlayerVendorPlaceholder, PlayingCards, PlayingCards2, Point2D, Point3D, PoisonedGlasses, PoisonElemental, PoisonFieldScroll, PoisonPotion, PoisonScroll, PoisonStrikeScroll, PolarBear, PolarBearMask, PolarBearRugEastAddon, PolarBearRugEastDeed, PolarBearRugSouthAddon, PolarBearRugSouthDeed, PolymorphScroll, PonyTail, PoolOfAcid, PortcullisEW, PortcullisNS, PotionKeg, PottedCactus, PottedCactus1, PottedCactus2, PottedCactus3, PottedCactus4, PottedCactus5, PottedCactusDeed, PottedPlant, PottedPlant1, PottedPlant2, PottedTree, PottedTree1, Pouch, PowderOfTemperament, PowderOfTranslocation, PowerCrystal, PowerGenerator, PowerScroll, PredatorHellCat, PresetMap, PreviewHouse, PricedHealer, PristineDreadHorn, PrizedFish, PromotionalToken, ProspectorsTool, ProtectionScroll, Provisioner, PublicMoongate, Pumpkin, PumpkinPie, Putrefication, PuzzleChest, PyramidAddon, Quagmire, QuarterStaff, Quell, QuestDaemonBlood, QuestDaemonBone, QuestFertileDirt, QuestItem, QuestOfVirtues, Quiche, QuiverOfBlight, QuiverOfElements, QuiverOfFire, QuiverOfIce, QuiverOfInfinity, QuiverOfLightning, QuiverOfRage, Rabbit, RadiantScimitar, RaedsGlory, RagingGrizzlyBear, RaiJu, RaisableItem, RaiseSwitch, Rancher, RandomTalisman, Ranger, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerGuildmaster, RangerLegs, RankingsOfTrades, Rat, RatCamp, Ratman, RatmanArcher, RatmanMage, RattanDoor, Ravager, RavenHelm, RawBird, RawChickenLeg, RawFishSteak, RawLambLeg, RawRibs, ReactiveArmorScroll, RealEstateBroker, Reaper, ReaperFormScroll, RecallRune, RecallScroll, ReceedingHair, ReceiverCrystal, RecipeScroll, RedAmbitiousSolenQueen, RedArmoire, RedBeaker, RedBook, RedBottle, RedCurvedFlask, RedHangingLantern, RedLeaves, RedMisoSoup, RedPlainRugAddon, RedPlainRugDeed, RedPoinsettia, RedRibbedFlask, RedScales, RedSolenInfiltratorQueen, RedSolenInfiltratorWarrior, RedSolenMatriarch, RedSolenQueen, RedSolenWarrior, RedSolenWorker, RedSoulstone, RedStocking, RedVelvetGiftBox, RefreshPotion, RegardingLlamas, RegStone, RejuvinationAddonComponent, RejuvinationAnkhNorth, RejuvinationAnkhWest, Relnia, RentedVendor, RepairDeed, RepeatingCrossbow, Reptalon, ReptalonFormTalisman, ResGate, ResilientBracer, RestlessSoul, ResurrectionScroll, RevealScroll, Revenant, RevenantLion, RewardBlackDyeTub, RewardBrazier, RewardBrazierDeed, RewardCake, RewardCloak, RewardDress, RewardPottedCactus, RewardRobe, RibCage, Ribs, RidableLlama, RideablePolarBear, Ridgeback, RightArm, RighteousAnger, RightLeg, Rikktor, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, RingOfTheElements, RingOfTheVile, RoastPig, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RockArtifact, RollingPin, Ronin, Rope, RoseInAVase, RoseOfTrinsic, RoseOfTrinsicPetal, RottingCorpse, RoundPaperLantern, RoyalCirclet, RoyalGuardSurvivalKnife, Ruby, RuinedArmoire, RuinedBookcase, RuinedBooks, RuinedChair, RuinedClock, RuinedDrawers, RuinedFallenChairA, RuinedFallenChairB, RuinedPainting, RuinedPaintingArtifact, RuneBeetle, RuneBeetleCarapace, RuneBlade, Runebook, RunebookDyeTub, RuneCarvingKnife, RunedPrism, RunedSwitch, RunicDovetailSaw, RunicHammer, RunicSewingKit, SackFlour, SacrificialAltarAddon, SacrificialAltarDeed, SaddleArtifact, Sai, SakeArtifact, SalvageBag, SamaritanRobe, Samurai, SamuraiHelm, SamuraiTabi, Sand, Sandals, SandFlagstones, SandMiningBook, SandstoneFireplaceEastAddon, SandstoneFireplaceEastDeed, SandstoneFireplaceSouthAddon, SandstoneFireplaceSouthDeed, SandstoneFloorN, SandstoneFloorW, SandstoneFountainAddon, SandStonePatio, SandstonePatioDeed, SandVortex, Sapphire, Satyr, Sausage, SausagePizza, Savage, SavageMask, SavageRider, SavageRidgeback, SavageShaman, Saw, SawTrap, ScaledSwampDragon, Scales, ScarecrowAddon, ScarecrowComponent, ScarecrowDeed, Scepter, Schmendrick, SchmendrickApprenticeCorpse, SchmendrickScrollOfPower, Scimitar, Scissors, Scorp, Scorpion, Scourge, Scribe, ScribeBag, ScribesPen, ScribeStone, ScrollOfAbraxus, ScrollofAlacrity, ScrollofTranscendence, Sculptor, Sculpture1Artifact, Sculpture2Artifact, Scythe, SeaChart, SeaHorse, SeahorseStatuette, SeaSerpent, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, SecureTradeContainer, Seed, SeekerOfAdventure, SeerRobe, Semidar, Serado, SerpentineDragon, SerpentPillar, SerpentPillarAddon, SerpentsFang, ServantOfSemidar, Sewerrat, SewingKit, Sextant, SextantParts, Shade, ShadowDancerLeggings, ShadowFiend, ShadowIronElemental, ShadowIronGranite, ShadowIronIngot, ShadowIronOre, ShadowKnight, ShadowWisp, ShadowWispFamiliar, ShadowWyrm, Shaft, ShaminoCrossbow, ShardPoller, ShardThrasher, SheafOfHay, Sheep, ShepherdsCrook, ShieldOfInvulnerability, ShipModelOfTheHMSCape, ShipwreckedItem, Shipwright, Shirt, Shoes, ShojiLantern, ShojiScreen, ShortBeard, ShortCabinet, ShortHair, ShortMusicStand, ShortPants, ShortSpear, Shovel, ShrineOfWisdomAddon, ShrineOfWisdomComponent, ShroudOfDeciet, SHTeleComponent, SHTeleporter, Shuriken, Sigil, Sign, Silvani, SilvanisFeywoodBow, Silver, SilverBeadNecklace, SilverBracelet, SilverEarrings, SilverNecklace, SilverRing, SilverSerpent, SilverSteed, SilverWire, SkeletalDragon, SkeletalKnight, SkeletalMage, SkeletalMount, Skeleton, Skillet, SkillTeleporter, SkinnedDeerArtifact, SkinnedGoatArtifact, SkinningKnife, Skirt, SkitteringHopper, SkullCandleArtifact, SkullCap, SkullPileAddon, SkullPole, SlabOfBacon, SledgeHammer, Slime, SLWarHorse, SmallBagBall, SmallBedEastAddon, SmallBedEastDeed, SmallBedSouthAddon, SmallBedSouthDeed, SmallBlueBottle, SmallBlueFlask, SmallBoat, SmallBoatDeed, SmallBOD, SmallBrickHouseDeed, SmallBrownBottle, SmallCrate, SmallDockedBoat, SmallDockedDragonBoat, SmallDragonBoat, SmallDragonBoatDeed, SmallEmptyFlask, SmallEmptyPot, SmallFishingNetAddon, SmallFishingNetComponent, SmallFishingNetDeed, SmallFlask, SmallForgeAddon, SmallForgeDeed, SmallGreenBottle, SmallGreenBottle2, SmallOldHouse, SmallPlateJingasa, SmallPumpkin, SmallRedFlask, SmallShop, SmallSmithBOD, SmallStretchedHideEastAddon, SmallStretchedHideEastDeed, SmallStretchedHideSouthAddon, SmallStretchedHideSouthDeed, SmallTailorBOD, SmallTower, SmallTowerDeed, SmallTowerSculpture, SmallUrn, SmallVioletBottle, SmallWatermelon, SmallYellowFlask, SmithBag, SmithHammer, SmithStone, SmokeBomb, SmoothingPlane, Snake, SnowElemental, SnowLeopard, Snowman, SnowPile, SnowPileDeco, SnowyTree, SolenAntHole, SolenAntHoleComponent, SongOfSamlethe, SongWovenMantle, SOS, SoulSeeker, SoulStone, SoulstoneFragment, SoulstoneFragmentToken, Spam, SpawnedOrcishLord, Spawner, SpawnPersistence, Spear, SpecialBeardDye, SpecialDyeTub, SpecialFishingNet, SpecialHairDye, SpecialScroll, SpectralArmour, Spectre, Spellbook, SpellScroll, SpellweavingBook, SpellWovenBritches, SpidersSilk, SpikeTrap, SpinedHides, SpinedLeather, SpinningHourglass, SpinningwheelEastAddon, SpinningwheelEastDeed, SpinningwheelSouthAddon, SpinningwheelSouthDeed, SpiritOfTheTotem, SplitCoconut, SpoolOfThread, Spoon, SpoonLeft, SpoonRight, Springs, Spyglass, SquareGozaMatEastAddon, SquareGozaMatEastDeed, SquareGozaMatSouthAddon, SquareGozaMatSouthDeed, Squash, Squirrel, SquirrelFormTalisman, SquirrelStatueEastAddon, SquirrelStatueEastDeed, SquirrelStatueSouthAddon, SquirrelStatueSouthDeed, StaffOfPower, StaffOfTheMagi, StainedOoze, StandardPlateKabuto, StandingBrokenChairAddon, StandingBrokenChairComponent, StandingBrokenChairDeed, StarRoomGate, StarSapphire, StatCapScroll, Static, StaticTarget, StatueEast, StatueEast2, StatueNorth, StatuePegasus, StatuePegasus2, StatueSouth, StatueSouth2, StatueSouthEast, StatuetteDyeTub, StatueWest, StealableArtifactsSpawner, StitchersMittens, StoneAnkh, StoneAnkhComponent, StoneAnkhDeed, StoneChair, StoneCrafter, StoneFaceTrap, StoneFaceTrapNoDamage, StoneFireplaceEastAddon, StoneFireplaceEastDeed, StoneFireplaceSouthAddon, StoneFireplaceSouthDeed, StoneFountainAddon, StoneGargoyle, StoneHarpy, StoneMiningBook, StoneOvenEastAddon, StoneOvenEastDeed, StoneOvenSouthAddon, StoneOvenSouthDeed, StonePaversDark, StonePaversLight, StonePaversMedium, StonePlasterHouseDeed, StoneStatueAddon, StoneStatueDeed, StoneWorkshopDeed, Stool, Stormgrip, StrangleScroll, StrawHat, StrengthPotion, StrengthScroll, StretchedHideArtifact, StrongBackpack, StrongBox, StrongBoxPuzzle, StrongholdMonolith, StrongMongbat, StrongWoodDoor, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLeggingsArtifact, StuddedLegs, StuddedMempo, StuddedSuneate, StuddedTunicArtifact, SturdyPickaxe, SturdyShovel, Subdue, Succubus, SuitOfGoldArmorAddon, SuitOfGoldArmorComponent, SuitOfGoldArmorDeed, SuitOfSilverArmorAddon, SuitOfSilverArmorComponent, SuitOfSilverArmorDeed, SulfurousAsh, SummonAirElementalScroll, SummonCreatureScroll, SummonDaemonScroll, SummonEarthElementalScroll, SummonedAirElemental, SummonedAntLion, SummonedArcticOgreLord, SummonedBakeKitsune, SummonedBogling, SummonedBullFrog, SummonedChicken, SummonedCow, SummonedDaemon, SummonedDoppleganger, SummonedEarthElemental, SummonedFireElemental, SummonedFrostSpider, SummonedGreatHart, SummonedLavaSerpent, SummonedOrcBrute, SummonedPaladin, SummonedPaladinMoongate, SummonedPanther, SummonedSheep, SummonedSkeletalKnight, SummonedVorpalBunny, SummonedWailingBanshee, SummonedWaterElemental, SummonFamiliarScroll, SummonFeyScroll, SummonFiendScroll, SummonFireElementalScroll, SummoningAltar, SummonWaterElementalScroll, Surcoat, SushiPlatter, SushiRolls, SwampDragon, SwampTentacle, SwampTile, SwarmOfFlies, SweetDough, SwitchItem, SwordDisplay1NorthArtifact, SwordDisplay1WestArtifact, SwordDisplay2NorthArtifact, SwordDisplay2WestArtifact, SwordDisplay3EastArtifact, SwordDisplay3SouthArtifact, SwordDisplay4NorthArtifact, SwordDisplay4WestArtifact, SwordDisplay5NorthArtifact, SwordDisplay5WestArtifact, SwordOfTheStampede, SwordsOfProsperity, TableWithBlueClothAddon, TableWithBlueClothDeed, TableWithOrangeClothAddon, TableWithOrangeClothDeed, TableWithPurpleClothAddon, TableWithPurpleClothDeed, TableWithRedClothAddon, TableWithRedClothDeed, Tailor, TailorBag, TailorGuildmaster, TailorStone, Taint, TaintedWool, TaleOfThreeTribes, TalesOfVesperVol1, TalkingToWisps, TallCabinet, TallElvenBedEastAddon, TallElvenBedEastDeed, TallElvenBedSouthAddon, TallElvenBedSouthDeed, TallMusicStand, TallStrawHat, TalonBite, Tambourine, TambourineTassel, TamingDragons, TanBook, Tanner, Tapestry1N, Tapestry2N, Tapestry2W, Tapestry3N, Tapestry3W, Tapestry4N, Tapestry4W, Tapestry5N, Tapestry5W, Tapestry6N, Tapestry6W, TapestryOfSosaria, TarotCardsArtifact, TatteredAncientMummyWrapping, TattsukeHakama, TavaraSewel, TavarasJournal1, TavarasJournal11, TavarasJournal14, TavarasJournal16, TavarasJournal16b, TavarasJournal17, TavarasJournal19, TavarasJournal2, TavarasJournal3, TavarasJournal6, TavarasJournal7, TavarasJournal8, TavarasJournal9, TavernKeeper, TaxidermyKit, TBWarHorse, TeapotNorthArtifact, TeapotWestArtifact, Tekagi, TelekinisisScroll, Teleporter, TeleportScroll, Telescope, TerathanAvenger, TerathanDrone, TerathanMatriarch, TerathanWarrior, Tessen, Tetsubo, ThatchedRoofCottageDeed, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheFight, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThickGrayStoneWall, Thief, ThiefGuildmaster, ThighBoots, ThinBrickWall, ThinLongsword, ThinStoneWall, Throne, ThrowingDagger, ThunderstormScroll, TillerMan, TimberWolf, Tinker, TinkerGuildmaster, TinkersTools, TinkerTools, TinyRedBottle, TinyYellowBottle, Titan, TitansHammer, TomasONeerlan, TomeOfEnlightenment, TomeOfLostKnowledge, Tongs, ToolKit, Torch, TormentedChains, TormentedMinotaur, Torso, TotalRefreshPotion, TotemOfVoid, Tourmaline, Tower, TowerDeed, TowerLanternArtifact, TownCrier, TownMonolith, TownStone, ToxicElemental, TradeGlasses, TrainingDummy, TrainingDummyEastAddon, TrainingDummyEastDeed, TrainingDummySouthAddon, TrainingDummySouthDeed, TransferItem, TransferItem, TransientItem, TranslatedGargoyleJournal, TrapableContainer, TrashBarrel, TrashChest, TreasureChestDirt, TreasureMap, TreasureMapChest, TreasuresOfTokunoPersistance, TreasureTrinketGlasses, TreatiseOnAlchemy, Treefellow, TreeStump, TreeStumpDeed, TreeTrunk, TribalBerry, TribalMask, TribalPaint, TribalSpear, TricorneHat, TripleFanNorthArtifact, TripleFanWestArtifact, Troglodyte, Troll, TrophyAddon, TrophyDeed, TropicalBird, TrulyRareFish, TsukiWolf, Tub, Tunic, TunicOfFire, Turnip, Turquoise, Twaulo, TwoHandedAxe, TwoPigTails, TwoStoryHouse, TwoStoryStonePlasterHouseDeed, TwoStoryVilla, TwoStoryWoodPlasterHouseDeed, UnbakedApplePie, UnbakedFruitPie, UnbakedMeatPie, UnbakedPeachCobbler, UnbakedPumpkinPie, UnbakedQuiche, UncookedCheesePizza, UncookedSausagePizza, UncutCloth, UnfinishedBarrel, UnholyBone, UnholyFamiliar, UnholySteed, Unicorn, UnlockScroll, UnmadeBedAddon, UnmadeBedDeed, UnsettlingPortraitAddon, UnsettlingPortraitComponent, UnsettlingPortraitDeed, Urn1Artifact, Urn2Artifact, Uzeraan, UzeraanTurmoilHorn, UzeraanTurmoilTeleporter, Vagabond, ValentinesCard, ValentinesCardEast, ValentinesCardSouth, ValoriteElemental, ValoriteGranite, ValoriteIngot, ValoriteOre, VampireBat, VampireBatFamiliar, VampiricEmbraceScroll, Vandyke, VanityAddon, VanityDeed, VarietyDealer, Vase, VaultOfSecretsBarrier, VendorBackpack, VendorRentalContract, VengefulSpiritScroll, VeriteElemental, VeriteGranite, VeriteIngot, VeriteOre, Veterinarian, Victoria, VikingSword, VillaDeed, Vines, VioletCourage, VioletRibbedFlask, VirtualMountItem, VirtualMountItem, VirtueBook, VoiceOfTheFallenKing, VorpalBunny, VultureHelm, WailingBanshee, Waiter, Wakizashi, WallBanner, WallBannerComponent, WallBannerDeed, WallBlood, WallOfStoneScroll, WallSconce, WallTorch, WallTorchAddon, WallTorchComponent, WallTorchDeed, Walrus, Wanderer, WandererOfTheVoid, WanderingHealer, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WarningItem, WarriorGuard, WarriorGuildmaster, WarriorStatueEastAddon, WarriorStatueEastDeed, WarriorStatueSouthAddon, WarriorStatueSouthDeed, Wasabi, WasabiClumps, WaterBarrel, WaterElemental, Watermelon, WaterTile, WaterTroughEastAddon, WaterTroughEastDeed, WaterTroughSouthAddon, WaterTroughSouthDeed, WaterVatEast, WaterVatSouth, WayPoint, WeakenScroll, WeaknessWand, WeaponEngravingTool, Weaponsmith, WeatherMap, Weaver, Web, WheatSheaf, Whip, WhippingVine, WhiteDriedFlowers, WhiteHangingLantern, WhiteMisoSoup, WhiteNinjaQuestTeleporter, WhitePearl, WhitePoinsettia, WhiteScales, WhiteSnowflake, WhiteStoneWall, WhiteWolf, WhiteWyrm, WideBrimHat, WildfireBow, WildfireScroll, WildGirlOfTheForest, WildStaff, WindChimes, WindsEdge, Windsong, WindSpirit, WingedHelm, WinterGiftPackage2003, Wisp, WitherScroll, WizardsGlasses, WizardsHat, WomanPortrait1, WomanPortrait2, WondrousFish, WoodDebris, WoodenBench, WoodenBowl, WoodenBowlOfCarrots, WoodenBowlOfCorn, WoodenBowlOfLettuce, WoodenBowlOfPeas, WoodenBowlOfStew, WoodenBowlOfTomatoSoup, WoodenBox, WoodenChair, WoodenChairCushion, WoodenChest, WoodenCoffinAddon, WoodenCoffinComponent, WoodenCoffinDeed, WoodenFootLocker, WoodenKiteShield, WoodenShield, WoodenThrone, WoodenTreasureChest, WoodHouseDeed, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WoodPlasterHouseDeed, Wool, WordOfDeathScroll, WorldMap, Wraith, WraithFormScroll, WrathOfTheDryad, WreathAddon, WreathDeed, WritingTable, Wyvern, Yamandon, YellowBeaker, YellowGourd, YellowScales, YewBoard, YewLog, YewWoodTable, YomotsuElder, YomotsuPriest, YomotsuWarrior, YoungNinja, YoungRonin, Yumi, Zeefzorpul, ZenRock1Artifact, ZenRock2Artifact, ZenRock3Artifact, Zoel, Zombie, ZoogiFungus, ZyronicClaw

+ int X( get; )
+ int Y( get; )
+ + diff --git a/Docs/types/IPoint3D.html b/Docs/types/IPoint3D.html new file mode 100644 index 0000000..d99b510 --- /dev/null +++ b/Docs/types/IPoint3D.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IPoint3D + + +

Back to Server

+

IPoint3D : IPoint2D

+

Derived Types: AbbatoirAddon, AbbatoirDeed, AbysmalHorror, AcidProofRobe, AcidSlime, Actor, AddonComponent, AddonContainerComponent, AdminRobe, AdmiralsHeartyRum, Aegis, AegisOfGrace, Afro, AgapiteElemental, AgapiteGranite, AgapiteIngot, AgapiteOre, AgilityPotion, AgilityScroll, AirElemental, AlbertaGiacco, Alchemist, AlchemistsBauble, AlchemistTableEastAddon, AlchemistTableEastDeed, AlchemistTableSouthAddon, AlchemistTableSouthDeed, AlchemyBag, AlchemyStone, Alligator, Amber, Amethyst, AncientFarmersKasa, AncientLich, AncientSamuraiDo, AncientSmithyHammer, AncientUrn, AncientWyrm, ANecromancerShroud, AniLargeVioletFlask, AnimalTrainer, AnimateDeadScroll, AniRedRibbedFlask, AniSmallBlueFlask, AnkhNorth, AnkhOfSacrificeAddon, AnkhOfSacrificeComponent, AnkhOfSacrificeDeed, AnkhWest, AnsellaGryen, AnthropomorphistGlasses, AntLion, Anvil, AnvilComponent, AnvilEastAddon, AnvilEastDeed, AnvilSouthAddon, AnvilSouthDeed, Apple, ApplePie, AppleTreeAddon, AppleTreeDeed, AppleTrunkAddon, AppleTrunkDeed, ArcaneBookshelfEastAddon, ArcaneBookshelfEastDeed, ArcaneBookshelfSouthAddon, ArcaneBookshelfSouthDeed, ArcaneCircleAddon, ArcaneCircleDeed, ArcaneCircleScroll, ArcaneDaemon, ArcaneEmpowermentScroll, ArcaneFey, ArcaneFiend, ArcaneFocus, ArcaneGem, ArcaneShield, ArcanistStatueEastAddon, ArcanistStatueEastDeed, ArcanistStatueSouthAddon, ArcanistStatueSouthDeed, ArchCureScroll, ArcherGuard, ArcheryButte, ArcheryButteAddon, ArcheryButteDeed, Architect, ArchProtectionScroll, ArcticDeathDealer, ArcticOgreLord, Armoire, Armorer, ArmorOfFortune, ArmsAndWeaponsPrimer, ArmsOfTacticalExcellence, Arrow, ArtifactLargeVase, ArtifactVase, Artist, ArtsGlasses, AshBoard, AshLog, AssassinSpike, AttuneWeaponScroll, AwaseMisoSoup, AwesomeDisturbingPortraitAddon, AwesomeDisturbingPortraitComponent, AwesomeDisturbingPortraitDeed, Axe, AxeOfTheHeavens, Axle, AxleGears, Backgammon, Backpack, BackpackArtifact, Bacon, BadCard, Bag, BagOfAllReagents, BagOfingots, BagOfNecroReagents, BagOfReagents, BagOfSending, BakeKitsune, Baker, BallOfSummoning, BallotBox, BallotBoxAddon, BallotBoxDeed, Balron, BambooChair, BambooFlute, BambooScreen, Banana, Bananas, Bandage, Bandana, BankBox, BankCheck, Banker, BankerCamp, Banner, BannerDeed, BarbedHides, BarbedLeather, Bard, BardGuildmaster, Bardiche, BarkeepContract, Barkeeper, BarkFragment, Barracoon, BarredMetalDoor, BarredMetalDoor2, Barrel, BarrelHoops, BarrelLid, BarrelStaves, BarrelTap, Bascinet, BaseAddon, BaseAddonContainer, BaseAddonContainerDeed, BaseAddonDeed, BaseAgilityPotion, BaseAmbitiousSolenQueen, BaseArmor, BaseAxe, BaseBagBall, BaseBashing, BaseBeverage, BaseBoard, BaseBoat, BaseBoatDeed, BaseBook, BaseBracelet, BaseBulletinBoard, BaseCamp, BaseChampion, BaseCloak, BaseClothing, BaseClothMaterial, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseContainer, BaseCreature, BaseCurePotion, BaseDecorationArtifact, BaseDecorationContainerArtifact, BaseDockedBoat, BaseDoor, BaseEarrings, BaseEnraged, BaseEquipableLight, BaseEscortable, BaseExplosionPotion, BaseFactionGuard, BaseFactionTrap, BaseFactionTrapDeed, BaseFactionVendor, BaseFamiliar, BaseFloor, BaseFormTalisman, BaseFruitTreeAddon, BaseGlovesOfMining, BaseGranite, BaseGuard, BaseGuildmaster, BaseHarvestTool, BaseHat, BaseHealer, BaseHealPotion, BaseHides, BaseHouse, BaseHouseDoor, BaseImprisonedMobile, BaseIngot, BaseInstrument, BaseJewel, BaseKnife, BaseLeather, BaseLight, BaseMagicFish, BaseMeleeWeapon, BaseMiddleTorso, BaseMonolith, BaseMount, BaseMulti, BaseNecklace, BaseOre, BaseOuterLegs, BaseOuterTorso, BasePants, BasePiece, BasePigmentsOfTokuno, BasePlayerBB, BasePoisonPotion, BasePoleArm, BasePotion, BaseQuester, BaseQuiver, BaseRanged, BaseReagent, BaseRefreshPotion, BaseRejuvinationAnkh, BaseRing, BaseRunicTool, BaseScales, BaseShield, BaseShieldGuard, BaseShirt, BaseShoes, BaseSign, BaseSolenMatriarch, BaseSpear, BaseStaff, BaseStrengthPotion, BaseSuit, BaseSword, BaseSystemController, BaseTalisman, BaseTalismanSummon, BaseTool, BaseTrap, BaseTreasureChest, BaseVendor, BaseWaist, BaseWall, BaseWand, BaseWarHorse, BaseWaterContainer, BaseWeapon, BaseWindChimes, Basket, Basket1Artifact, Basket2Artifact, Basket3NorthArtifact, Basket3WestArtifact, Basket4Artifact, Basket5NorthArtifact, Basket5WestArtifact, Basket6Artifact, BattleAxe, BatWing, Beads, Beard, BearMask, BedOfNailsAddon, BedOfNailsComponent, BedOfNailsDeed, Bedroll, Beekeeper, Beeswax, Beetle, BellOfTheDead, BentoBox, Betrayer, BeverageBottle, BigElvenChair, BigFish, Bird, BirdsOfBritannia, BlackAmbitiousSolenQueen, BlackBear, BlackDyeTub, Blackheart, BlackLotusHood, BlackPearl, BlackScales, Blacksmith, BlacksmithGuildmaster, BlackSolenInfiltratorQueen, BlackSolenInfiltratorWarrior, BlackSolenMatriarch, BlackSolenQueen, BlackSolenWarrior, BlackSolenWorker, BlackStaff, BlackthornWelcomeBook, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BladeSpirits, BladeSpiritsScroll, BlankMap, BlankScroll, BlazeDyeTub, BlazeOfDeath, BlessScroll, Blight, BlightGrippedLongbow, Blocker, Blood, BloodElemental, Bloodmoss, BloodOathScroll, BloodPentagram, BloodwoodBoard, BloodwoodLog, BloodwoodSpirit, BloodyPentagramAddon, BloodyPentagramComponent, BloodyPentagramDeed, BloodyWaterArtifact, Blowpipe, BlueBeaker, BlueBook, BlueCurvedFlask, BlueDecorativeRugAddon, BlueDecorativeRugDeed, BlueDiamond, BlueFancyRugAddon, BlueFancyRugDeed, BlueNinjaQuestTeleporter, BluePlainRugAddon, BluePlainRugDeed, BlueScales, BlueSlateFloorCenter, BlueSnowflake, BlueSoulstone, Boar, Board, BodySash, Bogle, Bogling, BogThing, BoilingCauldronAddon, BoilingCauldronDeed, Bokuto, Bola, BolaBall, BoldStranger, Bolt, BoltOfCloth, Bone, BoneArms, BoneChest, BoneCouchAddon, BoneCouchComponent, BoneCouchDeed, BoneCrusher, BoneDemon, BoneGloves, BoneHarvester, BoneHelm, BoneKnight, BoneLegs, BoneMagi, BonePile, Bonesmasher, BoneTableAddon, BoneTableDeed, BoneThroneAddon, BoneThroneComponent, BoneThroneDeed, Bonnet, BookOfBushido, BookOfChivalry, BookOfNinjitsu, BooksFaceDownArtifact, BooksNorthArtifact, BooksWestArtifact, Boomstick, Boots, Bottle, BottleArtifact, Bow, BowlArtifact, BowlFlour, BowlsHorizontalArtifact, BowlsVerticalArtifact, BowOfTheJukaKing, Bowyer, BraceletOfBinding, BraceletOfHealth, BrambleCoat, BraveKnightOfTheBritannia, Brazier, BrazierArtifact, BrazierTall, BreadLoaf, BreathOfTheDead, BrickHouseDeed, BricksFloor1, BricksFloor2, BrideGroom, Brigand, BrigandCamp, BrightlyColoredEggs, BrilliantAmber, BritannianFlora, BroadcastCrystal, Broadsword, BrocadeGozaMatEastAddon, BrocadeGozaMatEastDeed, BrocadeGozaMatSouthAddon, BrocadeGozaMatSouthDeed, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatEastDeed, BrocadeSquareGozaMatSouthAddon, BrocadeSquareGozaMatSouthDeed, BrokenArmoireAddon, BrokenArmoireComponent, BrokenArmoireDeed, BrokenBedAddon, BrokenBedDeed, BrokenBookcaseAddon, BrokenBookcaseComponent, BrokenBookcaseDeed, BrokenChair, BrokenChestOfDrawersAddon, BrokenChestOfDrawersComponent, BrokenChestOfDrawersDeed, BrokenCoveredChairAddon, BrokenCoveredChairComponent, BrokenCoveredChairDeed, BrokenFallenChairAddon, BrokenFallenChairComponent, BrokenFallenChairDeed, BrokenVanityAddon, BrokenVanityDeed, BronzeElemental, BronzeGranite, BronzeIngot, BronzeOre, BronzeShield, BronzeStatueMaker, BrownBear, BrownBearRugEastAddon, BrownBearRugEastDeed, BrownBearRugSouthAddon, BrownBearRugSouthDeed, BrownBook, Bucket, Buckler, BulkOrderBook, Bull, BulletinBoard, BulletinMessage, BullFrog, BunnyHole, BunsHair, BurglarsBandana, BurningOfTrinsic, BustEast, BustSouth, Butcher, ButcherKnife, Cabbage, Cake, CakeMix, CallToAnarchy, Calm, Campfire, Candelabra, CandelabraOfSouls, CandelabraStand, Candle, CandleLarge, CandleLong, CandleShort, CandleSkull, CandyCane, Cannon, CannonAddon, CannonAddonComponent, CannonComponent, CannonDeed, Cantaloupe, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CapturedEssence, CapturedHordeMinion, Cards, Cards2, Cards3, Cards4, Carpenter, Carrot, Castle, CastleDeed, Cat, Cauldron, CaveFloorCenter, CaveFloorEast, CaveFloorNorth, CaveFloorSouth, CaveFloorWest, CavortingClub, Centaur, CeramicMug, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChainLightningScroll, ChampionAltar, ChampionPlatform, ChampionSkull, ChampionSkullBrazier, ChampionSkullPlatform, ChampionSpawn, ChaosDaemon, ChaosDragoon, ChaosDragoonElite, ChaosGuard, ChaosShield, CharacterStatue, CharacterStatueDeed, CharacterStatueMaker, CharacterStatuePlinth, ChargerOfTheFallen, CheckerBoard, Checkers, Checkers2, CheesePizza, CheeseSlice, CheeseWedge, CheeseWheel, CherryArmoire, CherryBlossomTreeAddon, CherryBlossomTreeDeed, CherryBlossomTrunkAddon, CherryBlossomTrunkDeed, Chessboard, Chessmen, Chessmen2, Chessmen3, ChestOfHeirlooms, Chicken, ChickenLeg, ChildrenTalesVol2, ChiselsNorth, ChiselsWest, Chyloth, ChylothShroud, ChylothStaff, CinnamonFancyRugAddon, CinnamonFancyRugDeed, Circlet, Citrine, CityMap, Cleaver, Cloak, Clock, ClockFrame, ClockLeft, ClockParts, ClockRight, ClockworkAssembly, Clone, ClosedBarrel, CloseHelm, Cloth, ClothingBlessDeed, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyScroll, ClumsyWand, Coal, Cobbler, CobblestonesFloor, Coconut, CocoonArtifact, ColdBlood, ColdForgedBlade, ColoredAnvil, CommodityDeed, CommodityDeedBox, CompositeBow, CoMWarHorse, ConfirmationMoongate, ConflagrationPotion, ConfusionBlastPotion, Container, ContestMiniHouse, ContestMiniHouseDeed, ContractOfEmployment, ControlPanel, Cook, CookableFood, CookedBird, CookieMix, Cookies, CopperElemental, CopperGranite, CopperIngot, CopperOre, CopperWire, Corpse, Corpser, CorpseSkinScroll, CorrosiveSlime, CorruptedSoul, Corruption, Cotton, Cougar, CounselorRobe, CoveredChair, Cow, Crane, CreateFoodScroll, CreatureBackpack, CreepyPortraitAddon, CreepyPortraitComponent, CreepyPortraitDeed, CrescentBlade, CrimsonCincture, Crossbow, CrossbowBolts, CrownOfTalKeesh, CrystalCaveBarrier, CrystalElemental, CunningScroll, CupsArtifact, CurePotion, CureScroll, Cursed, CursedSoul, CurseScroll, CurseWeaponScroll, CurtainsAddon, CurtainsComponent, CurtainsDeed, CurvedFlask, CuSidhe, CuSidheFormTalisman, CustomHairstylist, Cutlass, Cyclops, Daemon, DaemonArms, DaemonBlood, DaemonBloodChest, DaemonBone, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DamagedBooksArtifact, DarkenedSky, DarkFlowerTapestryEastAddon, DarkFlowerTapestryEastDeed, DarkFlowerTapestrySouthAddon, DarkFlowerTapestrySouthDeed, DarknightCreeper, DarkSandstoneFloorN, DarkSandstoneFloorW, DarkSapphire, DarkSource, DarkTidesHorn, DarkTidesTeleporter, DarkWisp, DarkWolfFamiliar, DarkWoodDoor, DarkWoodGate, DarkWoodHouseDoor, DarkWoodWall, DarkYarn, DartBoard, DartBoardEastAddon, DartBoardEastDeed, DartBoardSouthAddon, DartBoardSouthDeed, Dates, DawnsMusicBox, DawnsMusicGear, DeadlyImp, DeadlyPoisonPotion, DeadWood, DeathAdder, DeathRobe, DeathShroud, DeathwatchBeetle, DeathwatchBeetleHatchling, DecayedCorpse, DeceitBrazier, DeceitDungeonOfHorror, DecoArrowShafts, DecoBlackmoor, DecoBloodspawn, DecoBottlesOfLiquor, DecoBridle, DecoBridle2, DecoBrimstone, DecoCards5, DecoCrystalBall, DecoDeckOfTarot, DecoDeckOfTarot2, DecoDragonsBlood, DecoDragonsBlood2, DecoEyeOfNewt, DecoFlower, DecoFlower2, DecoFullJar, DecoFullJars3, DecoFullJars4, DecoGarlic, DecoGarlic2, DecoGarlicBulb, DecoGarlicBulb2, DecoGinseng, DecoGinseng2, DecoGinsengRoot, DecoGinsengRoot2, DecoGoldIngot, DecoGoldIngot2, DecoGoldIngots, DecoGoldIngots2, DecoGoldIngots3, DecoGoldIngots4, DecoHay, DecoHay2, DecoHorseDung, DecoIronIngot, DecoIronIngot2, DecoIronIngots, DecoIronIngots2, DecoIronIngots3, DecoIronIngots4, DecoIronIngots5, DecoIronIngots6, DecoMagicalCrystal, DecoMandrake, DecoMandrake2, DecoMandrake3, DecoMandrakeRoot, DecoMandrakeRoot2, DecoNightshade, DecoNightshade2, DecoNightshade3, DecoObsidian, DecoPumice, DecorativeAxeNorth, DecorativeAxeWest, DecorativeBowNorth, DecorativeBowWest, DecorativeDAxeNorth, DecorativeDAxeWest, DecorativePlateKabuto, DecorativeShield, DecorativeShield1, DecorativeShield10, DecorativeShield11, DecorativeShield2, DecorativeShield3, DecorativeShield4, DecorativeShield5, DecorativeShield6, DecorativeShield7, DecorativeShield8, DecorativeShield9, DecorativeShieldDeed, DecorativeShieldSword1North, DecorativeShieldSword1West, DecorativeShieldSword2North, DecorativeShieldSword2West, DecorativeSwordNorth, DecorativeSwordWest, DecorativeTopiary, DecoRock, DecoRock2, DecoRocks, DecoRocks2, DecoRoseOfTrinsic, DecoRoseOfTrinsic2, DecoRoseOfTrinsic3, DecoSilverIngot, DecoSilverIngot2, DecoSilverIngots, DecoSilverIngots2, DecoSilverIngots3, DecoSilverIngots4, DecoSilverIngots5, DecoSpittoon, DecoTarot, DecoTarot2, DecoTarot3, DecoTarot4, DecoTarot5, DecoTarot6, DecoTarot7, DecoTray, DecoTray2, DecoWyrmsHeart, DeepSeaSerpent, DeerMask, DemonForks, DemonKnight, DemonSkull, DesertOstard, DetectiveBoots, Devourer, Diamond, DiamondMace, Dices, DimensionalTravel, DireWolf, DirtPatch, DirtyFrypan, DirtyKettle, DirtyPan, DirtyPot, DirtyRoundPot, DirtySmallPot, DirtySmallRoundPot, DisappearingRaiseSwitch, DiseasedBark, DiseasedCat, DisguiseKit, DisguisePersistance, DispelFieldScroll, DispelScroll, DisplayCache, DisturbingPortraitAddon, DisturbingPortraitComponent, DisturbingPortraitDeed, DiversityOfOurLand, DivineCountenance, DjinnisRing, Dog, Dolphin, DolphinLeftArtifact, DolphinRightArtifact, Doppleganger, DoubleAxe, DoubleBladedStaff, Doublet, Dough, DovetailSaw, Dragon, DragonArms, DragonBardingDeed, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, Drake, DrakovsJournal, Drawer, DrawKnife, DreadHornMane, DreadPirateHat, DreadSpider, Dressform, DriedHerbs, DriedOnions, Drums, Dryad, DryadAllureScroll, DullCopperElemental, DullCopperGranite, DullCopperIngot, DullCopperOre, Dummy, DummyAssassin, DummyFence, DummyHealer, DummyMace, DummyNox, DummyStun, DummySuper, DummySword, DummyTheif, DupresShield, DupreSuit, Dyes, DyeTub, DynamicTeleporter, Eagle, EarOfCorn, EarringBoxSet, EarringsOfProtection, EarthElemental, EarthquakeScroll, Easle, EasterEggs, EcruCitrine, EffectController, EffectItem, Efreet, EggBomb, EggCaseArtifact, Eggs, Eggshells, ElderGazer, ElegantArmoire, ElegantLowTable, EliteNinja, ElvenBedEastAddon, ElvenBedEastDeed, ElvenBedSouthAddon, ElvenBedSouthDeed, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenDresserEastAddon, ElvenDresserEastDeed, ElvenDresserSouthAddon, ElvenDresserSouthDeed, ElvenForgeAddon, ElvenForgeDeed, ElvenGlasses, ElvenLoveseatEastAddon, ElvenLoveseatEastDeed, ElvenLoveseatSouthAddon, ElvenLoveseatSouthDeed, ElvenMachete, ElvenPants, ElvenQuiver, ElvenReadingChair, ElvenShirt, ElvenSpellblade, ElvenSpinningwheelEastAddon, ElvenSpinningwheelEastDeed, ElvenSpinningwheelSouthAddon, ElvenSpinningwheelSouthDeed, ElvenStoveEastAddon, ElvenStoveEastDeed, ElvenStoveSouthAddon, ElvenStoveSouthDeed, ElvenWashBasinEastAddon, ElvenWashBasinEastDeed, ElvenWashBasinSouthAddon, ElvenWashBasinSouthDeed, ElwoodMcCarrin, EmbroideredOakLeafCloak, Emerald, Emino, EminosKatana, EminosKatanaChest, EmptyBentoBox, EmptyBookcase, EmptyCurvedFlaskE, EmptyCurvedFlaskW, EmptyJar, EmptyJars, EmptyJars2, EmptyJars3, EmptyJars4, EmptyPewterBowl, EmptyPewterTub, EmptyRibbedFlask, EmptyToolKit, EmptyToolKit2, EmptyVial, EmptyVialsWRack, EmptyWoodenBowl, EmptyWoodenTub, EnchantedPaints, EnchantedSextant, EnchantedSwitch, EnchantedTitanLegBone, EnergyBoltScroll, EnergyFieldScroll, EnergyVortex, EnergyVortexScroll, EnhancedBandage, EnragedBlackBear, EnragedEagle, EnragedHart, EnragedHind, EnragedRabbit, EnshroudedFigure, EnslavedGargoyle, Entity, EscortableMage, EssenceOfBattle, EssenceOfWindScroll, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, EtherealVoyageScroll, EtherealWarrior, EthicalHedonism, EthicsPersistance, Ettin, EvilHealer, EvilIdolSkull, EvilMage, EvilMageLord, EvilOmenScroll, EvilWanderingHealer, Executioner, ExecutionersAxe, ExecutionersCap, Exiler, ExodusMinion, ExodusOverseer, ExorcismScroll, ExplosionPotion, ExplosionScroll, EyeOfTheTravesty, FabledFishingNet, FactionBerserker, FactionBoardVendor, FactionBottleVendor, FactionDeathKnight, FactionDragoon, FactionExplosionTrap, FactionExplosionTrapDeed, FactionGasTrap, FactionGasTrapDeed, FactionHenchman, FactionHorseVendor, FactionKnight, FactionMercenary, FactionNecromancer, FactionOreVendor, FactionPaladin, FactionPersistance, FactionReagentVendor, FactionSawTrap, FactionSawTrapDeed, FactionSorceress, FactionSpikeTrap, FactionSpikeTrapDeed, FactionStone, FactionTrapRemovalKit, FactionWarHorse, FactionWizard, FancyArmoire, FancyDrawer, FancyDress, FancyElvenTableEastAddon, FancyElvenTableEastDeed, FancyElvenTableSouthAddon, FancyElvenTableSouthDeed, FancyShirt, FancyWindChimes, FancyWoodenChairCushion, FanDancer, FangOfRactus, FanNorthArtifact, FanWestArtifact, FarmableCabbage, FarmableCarrot, FarmableCotton, FarmableCrop, FarmableFlax, FarmableLettuce, FarmableOnion, FarmablePumpkin, FarmableTurnip, FarmableWheat, Farmer, Feather, FeatheredHat, FeeblemindScroll, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FerelTreefellow, Ferret, FerretFormTalisman, FertileDirt, FestiveCactus, FetidEssence, FeyLeggings, FieldStoneHouseDeed, FierceDragon, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, FireballScroll, FireballWand, FireBeetle, Firebomb, FirebombField, FireColumnAddon, FireColumnTrap, FireElemental, FireFieldItem, FireFieldScroll, FireGargoyle, FireHorn, FireRuby, FireSteed, FireworksWand, Fish, FisherGuildmaster, Fisherman, FishingPole, FishSteak, Fists, FlameSpurtTrap, FlamestrikeScroll, FlamingHead, FlamingHeadDeed, Flax, FleshGolem, FleshRenderer, FleshRipper, FletcherTools, FloppyHat, FlourMillEastAddon, FlourMillEastDeed, FlourMillSouthAddon, FlourMillSouthDeed, FlourSifter, FlowerGarland, FlowersArtifact, FluteOfRenewal, FoldedSteelGlasses, Food, FootStool, ForestOstard, Forge, ForgeComponent, ForgedMetal, Fork, ForkLeft, ForkRight, FormalShirt, FortuneTeller, FountainAddon, FountainDeed, FountainOfLife, FountainOfLifeDeed, FrenchBread, FrenziedOstard, FriedEggs, Froe, FropozJournal, Frostbringer, FrostOoze, FrostSpider, FrostTroll, FrostwoodBoard, FrostwoodLog, FruitBasket, FruitPie, Fukiya, FukiyaDarts, FullApron, FullBookcase, FullVialsWRack, FurBoots, FurCape, FurnitureDyeTub, FurSarong, Furtrader, Futon, GabrielPiete, Gaman, GamblingStone, Gargoyle, GargoyleDestroyer, GargoyleEnforcer, GargoylesPickaxe, Garlic, GasTrap, GateTravelScroll, GauntletsOfNobility, GauntletSpawner, Gazer, GazerLarva, Gears, GemmedCirclet, GenericBeard, GenericHair, GenericHouseDoor, GhostShipAnchor, Ghoul, GiantBlackWidow, GiantIceWorm, GiantRat, GiantSerpent, GiantSpider, GiantSpikeTrap, GiantToad, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, Gibberling, GiftBox, GiftBoxAngel, GiftBoxCube, GiftBoxCylinder, GiftBoxNeon, GiftBoxOctogon, GiftBoxRectangle, GiftOfLifeScroll, GiftOfRenewalScroll, GildedDress, GildedWoodenChest, GingerBreadCookie, GingerBreadHouseAddon, GingerBreadHouseDeed, Ginseng, GlacialStaff, GladiatorsCollar, Glass, Glassblower, GlassblowingBook, GlassBottle, GlassMug, Globe, GlovesOfThePugilist, GlovesOfTheSun, GMRobe, GnarledStaff, Goat, Goatee, Goblet, Gold, GoldBeadNecklace, GoldBracelet, GoldBricks, GoldEarrings, GoldenDecorativeRugAddon, GoldenDecorativeRugDeed, GoldenElemental, GoldenSkull, GoldGranite, GoldIngot, GoldNecklace, GoldOre, GoldRing, GoldWire, Golem, GolemController, GolemCrafter, GoreFiend, Gorilla, GozaMatEastAddon, GozaMatEastDeed, GozaMatSouthAddon, GozaMatSouthDeed, GrammarOfOrcish, GrandGrimoire, Granite, Grapes, GraveDust, GrayBrickFireplaceEastAddon, GrayBrickFireplaceEastDeed, GrayBrickFireplaceSouthAddon, GrayBrickFireplaceSouthDeed, GreaterAgilityPotion, GreaterConflagrationPotion, GreaterConfusionBlastPotion, GreaterCurePotion, GreaterDragon, GreaterExplosionPotion, GreaterHealPotion, GreaterHealScroll, GreaterHealWand, GreaterMongbat, GreaterPoisonPotion, GreaterStrengthPotion, GreatHart, GreenBeaker, GreenBottle, GreenCurvedFlask, GreenDriedFlowers, GreenGourd, GreenMarbleFloor, GreenNinjaQuestTeleporter, GreenScales, GreenStocking, GreenTea, GreenTeaBasket, GreenThorns, GreenThornsSHTeleporter, GreyFlagstones, GreyMarbleFloor, GreySlateFloor, GreyWolf, GrimmochDrummel, GrimmochJournal1, GrimmochJournal11, GrimmochJournal14, GrimmochJournal17, GrimmochJournal2, GrimmochJournal23, GrimmochJournal3, GrimmochJournal6, GrimmochJournal7, Grizelda, GrizzledBones, GrizzledMare, GrizzledMareStatuette, GrizzlyBear, GruesomeStandardArtifact, GuantletsOfAnger, Guardian, GuardianBarrier, GuideToGuilds, GuildDeed, GuildHouse, Guildstone, GuildstoneDeed, GuildTeleporter, Guillotine, GuillotineAddon, GuillotineComponent, GuillotineDeed, GwennosHarp, Gypsy, GypsyAnimalTrainer, GypsyBanker, GypsyMaiden, HagApprenticeCorpse, HagCauldron, HagStew, Hair, HairDye, HairRestylingDeed, HairStylist, Hakama, HakamaShita, Halberd, HalfApron, HalfEmptyJar, HalfEmptyJars, Ham, Hammer, HammerPick, HangingAxesAddon, HangingAxesDeed, HangingLantern, HangingSkeleton, HangingSkeletonDeed, HangingSwordsAddon, HangingSwordsDeed, HangoverCure, HanzosBow, Haochi, HaochisGuardsman, HaochisKatana, HaochisKatanaGenerator, HaochisTreasureChest, HarborMaster, HarmScroll, HarmWand, Harp, Harpy, Harrower, HarrowerGate, HarrowerTentacles, Hatchet, HatOfTheMagi, HaunterMirrorAddon, HaunterMirrorComponent, HaunterMirrorDeed, Head, HeadlessOne, Healer, HealerCamp, HealerGuildmaster, HealPotion, HealScroll, HealWand, HearthOfHomeFire, HearthOfHomeFireDeed, HeartOfTheLion, HeartwoodBoard, HeartwoodLog, HeaterShield, HeatingStand, HeavyCrossbow, HeavyPlateJingasa, HellCat, HellHound, HellSteed, Helmet, HelmOfInsight, HelmOfSwiftness, Henchman, Herbalist, HeritageToken, HiddenFigure, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, Hides, Hind, Hinge, HintItem, Hiryu, Hold, HolidayBell, HolidayTree, HolidayTreeDeed, HollowPrism, HolyFamiliar, HolyKnightsBreastplate, HolyMage, HolySteed, HolySword, HoneydewMelon, HonorableSwords, HonorCandle, HoodedShroudOfShadows, HordeMinion, HordeMinionFamiliar, HornedHides, HornedLeather, HornedTribalMask, HornOfRetreat, HornOfRetreatMoongate, HorrificBeastScroll, Horse, HorseShoes, Horus, Hourglass, HourglassAni, HouseDeed, HouseFoundation, HouseLadderAddon, HouseLadderDeed, HousePlacementTool, HouseRaffleDeed, HouseRaffleStone, HouseSign, HouseTeleporter, HuntersHeaddress, IceElemental, IceFiend, IceSerpent, IceSnake, IcicleLargeEast, IcicleLargeSouth, IcicleMedEast, IcicleMedSouth, IcicleSmallEast, IcicleSmallSouth, IcyPatch, IdolOfTheChampion, IDWand, IEntity, IharaSoko, Ilhenir, ImmolatingWeaponScroll, Imp, Impaler, Impresario, IncognitoScroll, IndecipherableMap, IngotStone, InjuredWolf, InnKeeper, InquisitorsResolution, Inshave, InteriorDecorator, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem2, InternalItem2, InterredGrizzle, InvisibilityScroll, IolosLute, IronGate, IronGateShort, IronIngot, IronMaidenAddon, IronMaidenDeed, IronOre, IronWire, IronwoodCrown, IronWorker, ISpawnable, ITelekinesisable, Item, JackalsCollar, JackOLantern, JackRabbit, JadeStatueMaker, JarHoney, Jars2, Jars3, Jars4, JedahEntille, JesterHat, JesterHatofChuckles, JesterSuit, JeweledFiligree, Jeweler, JinBaori, JoinStone, JointingPlane, Jug, Juggernaut, JukaBow, JukaLord, JukaMage, JukaWarrior, Jwilson, KaburJournal, Kama, Kamishimo, Kappa, Kasa, KasaOfTheRajin, Katana, KazeKemono, Keep, KeepDeed, KeeperOfChivalry, Keg, Key, KeyRing, KeywordTeleporter, KhaldunPitTeleporter, KhaldunRevenant, KhaldunSummoner, KhaldunZealot, Kilt, Kindling, Kirin, Knife, KnifeLeft, KnifeRight, Kraken, KrisnaHair, KronusScroll, KronusScrollBox, Kryss, LadyOfTheSnow, LadyPortrait1, LadyPortrait2, Lajatang, LambLeg, LampPost1, LampPost2, LampPost3, LampPostArtifact, LampRoomBox, LampRoomTeleporter, Lance, LandTarget, Lantern, LanternOfSouls, LapHarp, LardOfParoxysmus, LargeBagBall, LargeBattleAxe, LargeBedEastAddon, LargeBedEastDeed, LargeBedSouthAddon, LargeBedSouthDeed, LargeBoat, LargeBoatDeed, LargeBOD, LargeCrate, LargeDockedBoat, LargeDockedDragonBoat, LargeDragonBoat, LargeDragonBoatDeed, LargeEmptyFlask, LargeEmptyPot, LargeFishingNetAddon, LargeFishingNetComponent, LargeFishingNetDeed, LargeFlask, LargeForgeEast, LargeForgeEastAddon, LargeForgeEastDeed, LargeForgeSouthAddon, LargeForgeSouthDeed, LargeForgeWest, LargeMarbleDeed, LargeMarbleHouse, LargePainting, LargePatioDeed, LargePatioHouse, LargeSmithBOD, LargeStoneTableEastAddon, LargeStoneTableEastDeed, LargeStoneTableSouthAddon, LargeStoneTableSouthDeed, LargeTable, LargeTailorBOD, LargeVase, LargeVioletFlask, LargeYellowFlask, LavaLizard, LavaSerpent, LavaSnake, LavaTile, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, Leather, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherDyeTub, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LeatherTunicArtifact, LeatherWorker, LeftArm, LeftLeg, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, Lemon, Lemons, LesserCurePotion, LesserExplosionPotion, LesserHealPotion, LesserHiryu, LesserPigmentsOfTokuno, LesserPoisonPotion, Lettuce, LeurociansMempoOfFortune, LeverPuzzleController, LeverPuzzleLever, LeverPuzzleStatue, Leviathan, LibraryBookcase, Lich, LichFormScroll, LichLord, LieutenantOfTheBritannianRoyalGuard, LifeOfATravellingMinstrel, LightFlowerTapestryEastAddon, LightFlowerTapestryEastDeed, LightFlowerTapestrySouthAddon, LightFlowerTapestrySouthDeed, LightningScroll, LightningWand, LightOfTheWinterSolstice, LightOfWayGlasses, LightPlateJingasa, LightSource, LightWoodDoor, LightWoodGate, LightYarn, LightYarnUnraveled, Lime, Limes, Lizardman, LizardmenCamp, Llama, LocalizedAddonComponent, LocalizedContainerComponent, LocalizedSign, LocalizedStatic, LocalMap, LockableBarrel, LockableContainer, Lockpick, Lockpicks, Log, LogCabin, LogCabinDeed, LongBeard, LongFlask, LongHair, LongPants, Longsword, LoomEastAddon, LoomEastDeed, LoomSouthAddon, LoomSouthDeed, LordBlackthorneSuit, LordBritishSuit, LordOaks, LOSBlocker, LtBlueCurvedFlask, LuckyNecklace, LuminescentFungi, LuminousRuneBlade, LunaLance, Lute, LyricalGlasses, LysanderGathenwale, LysanderNotebook1, LysanderNotebook11, LysanderNotebook2, LysanderNotebook3, LysanderNotebook7, LysanderNotebook8, Maabus, MaabusCoffin, MaabusCoffinComponent, Mace, MaceShieldGlasses, Mage, MageCamp, MageGuildmaster, MagicalShortbow, MagicArrowScroll, MagicArrowWand, MagicFlute, MagicLockScroll, MagicReflectScroll, MagicTrapScroll, MagicUnTrapScroll, MagicWand, MagicWizardsHat, MahjongGame, MajorTradeAssociation, MaleElvenRobe, MaleKimono, MalletAndChisel, ManaDrainScroll, ManaDrainWand, ManaVampireScroll, MandrakeRoot, ManPortrait1, ManPortrait2, MansionGuard, ManStatuetteEastArtifact, ManStatuetteSouthArtifact, MapItem, MapleArmoire, Mapmaker, MapmakersPen, MarbleFloor, MarblePavers, MarbleStatueMaker, MarbleWorkshopDeed, Mardoth, MaritimeGlasses, MarkContainer, MarkScroll, MasonryBook, MassCurseScroll, MassDispelScroll, Maul, MeatPie, MediumBoat, MediumBoatDeed, MediumCrate, MediumDockedBoat, MediumDockedDragonBoat, MediumDragonBoat, MediumDragonBoatDeed, MediumFlask, MediumLongBeard, MediumShortBeard, MediumStoneTableEastAddon, MediumStoneTableEastDeed, MediumStoneTableSouthAddon, MediumStoneTableSouthDeed, MediumStretchedHideEastAddon, MediumStretchedHideEastDeed, MediumStretchedHideSouthAddon, MediumStretchedHideSouthDeed, MediumWoodDoor, MeerCaptain, MeerEternal, MeerMage, MeerWarrior, MelisandesCorrodedHatchet, MeltedWax, Mephitis, Meraktus, Merchant, MerchantGuildmaster, MessageInABottle, Messenger, MetalBox, MetalChest, MetalDoor, MetalDoor2, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalHouseDoor, MetalKiteShield, MetalPigmentsOfTokuno, MetalShield, MetalTreasureChest, MeteorSwarmScroll, MidnightBracers, MilitiaCanoneer, MilitiaFighter, MilitiaFighterCorpse, Miller, MinaxWarHorse, MindBlastScroll, MindRotScroll, Miner, MinerGuildmaster, MiniHouseAddon, MiniHouseDeed, MiningCart, MiningCartDeed, Minotaur, MinotaurCaptain, MinotaurHedge, MinotaurScout, MinotaurStatue, MinotaurStatueDeed, Minter, MisoSoup, MistletoeAddon, MistletoeDeed, MLDryad, Mobile, Mohawk, Moloch, Mongbat, Monk, MonkRobe, MonsterStatuette, MoonfireBrew, Moongate, Moonstone, MoonstoneGate, MorgBergen, MorphItem, MortarPestle, MouldingPlane, MoundOfMaggots, MountainGoat, MountedPixieBlueAddon, MountedPixieBlueComponent, MountedPixieBlueDeed, MountedPixieGreenAddon, MountedPixieGreenComponent, MountedPixieGreenDeed, MountedPixieLimeAddon, MountedPixieLimeComponent, MountedPixieLimeDeed, MountedPixieOrangeAddon, MountedPixieOrangeComponent, MountedPixieOrangeDeed, MountedPixieWhiteAddon, MountedPixieWhiteComponent, MountedPixieWhiteDeed, MountItem, MovingCrate, Muculent, Muffins, Mummy, MushroomTrap, Mustache, MyStory, Nails, NameChangeDeed, Naturalist, NatureFury, NatureFuryScroll, Necklace, NecromancerSpellbook, NecromanticGlasses, Neira, NewPlayerTicket, Nightmare, Nightshade, NightSightPotion, NightSightScroll, NightsKiss, Nightstand, Ninja, NinjaTabi, Noble, NoDachi, NorseHelm, NoteForZoel, NoxCrystal, NoxRangersHeavyCrossbow, Nunchaku, OakBoard, OakLog, Obelisk, Obi, OblivionsNeedle, Obsidian, Ogre, OgreLord, OilCloth, Oni, Onion, OpenCoconut, OphidianArchmage, OphidianKnight, OphidianMage, OphidianMatriarch, OphidianWarrior, OrangePetals, Orc, OrcBomber, OrcBrute, OrcCamp, OrcCaptain, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishLord, OrcishMage, OrcishVisage, OrderGuard, OrderShield, OrigamiButterfly, OrigamiFish, OrigamiFrog, OrigamiPaper, OrigamiShape, OrigamiSongbird, OrigamiSwan, Ornament, OrnamentOfTheMagician, OrnateAxe, OrnateCrownOfTheHarrower, OrnateElvenChair, OrnateElvenTableEastAddon, OrnateElvenTableEastDeed, OrnateElvenTableSouthAddon, OrnateElvenTableSouthDeed, OrnateWoodenChest, OssianGrimoire, OverseerSunderedBlade, Pacify, PackHorse, PackingBox, PackLlama, PadsOfTheCuSidhe, PageboyHair, PainSpikeScroll, PaintedImage, Painting1NorthArtifact, Painting1WestArtifact, Painting2NorthArtifact, Painting2WestArtifact, Painting3Artifact, Painting4NorthArtifact, Painting4WestArtifact, Painting5NorthArtifact, Painting5WestArtifact, Painting6NorthArtifact, Painting6WestArtifact, PaintsAndBrush, Panther, PaperLantern, ParagonChest, ParalyzeFieldScroll, ParalyzeScroll, ParasiticPlant, Parrot, ParrotPerchAddon, ParrotPerchDeed, PatchworkSkeleton, Peach, PeachCobbler, PeachTreeAddon, PeachTreeDeed, PeachTrunkAddon, PeachTrunkDeed, Pear, Peasant, PeasantsBokuto, PeculiarFish, PenAndInk, PendantOfTheMagi, PentagramAddon, PentagramDeed, PerfectEmerald, PestilentBandage, PewterBowlOfCarrots, PewterBowlOfCorn, PewterBowlOfLettuce, PewterBowlOfPeas, PewterBowlOfPotatos, PewterMug, PhantomStaff, PhillipsWoodenSteed, Phoenix, Pickaxe, PickpocketDip, PickpocketDipEastAddon, PickpocketDipEastDeed, PickpocketDipSouthAddon, PickpocketDipSouthDeed, PicnicBasket, PieceBlackBishop, PieceBlackChecker, PieceBlackKing, PieceBlackKnight, PieceBlackPawn, PieceBlackQueen, PieceBlackRook, PieceWhiteBishop, PieceWhiteChecker, PieceWhiteKing, PieceWhiteKnight, PieceWhitePawn, PieceWhiteQueen, PieceWhiteRook, Pier, Pig, PigIron, PigmentsOfTokuno, Pike, PileOfGlacialSnow, PilferedDancerFans, PinkFancyRugAddon, PinkFancyRugDeed, Pitcher, Pitchfork, Pixie, PixieSwatter, PlagueBeast, PlagueBeastBackpack, PlagueBeastBackupOrgan, PlagueBeastBlood, PlagueBeastComponent, PlagueBeastGland, PlagueBeastHeart, PlagueBeastInnard, PlagueBeastLord, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastMutationCore, PlagueBeastOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan, PlagueBeastVein, PlagueSpawn, PlainDress, PlainLowTable, PlainWoodenChest, Plank, PlantBowl, PlantItem, Plate, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PlayerBarkeeper, PlayerBBEast, PlayerBBSouth, PlayerMobile, PlayerVendor, PlayerVendorPlaceholder, PlayingCards, PlayingCards2, Point3D, PoisonedGlasses, PoisonElemental, PoisonFieldScroll, PoisonPotion, PoisonScroll, PoisonStrikeScroll, PolarBear, PolarBearMask, PolarBearRugEastAddon, PolarBearRugEastDeed, PolarBearRugSouthAddon, PolarBearRugSouthDeed, PolymorphScroll, PonyTail, PoolOfAcid, PortcullisEW, PortcullisNS, PotionKeg, PottedCactus, PottedCactus1, PottedCactus2, PottedCactus3, PottedCactus4, PottedCactus5, PottedCactusDeed, PottedPlant, PottedPlant1, PottedPlant2, PottedTree, PottedTree1, Pouch, PowderOfTemperament, PowderOfTranslocation, PowerCrystal, PowerGenerator, PowerScroll, PredatorHellCat, PresetMap, PreviewHouse, PricedHealer, PristineDreadHorn, PrizedFish, PromotionalToken, ProspectorsTool, ProtectionScroll, Provisioner, PublicMoongate, Pumpkin, PumpkinPie, Putrefication, PuzzleChest, PyramidAddon, Quagmire, QuarterStaff, Quell, QuestDaemonBlood, QuestDaemonBone, QuestFertileDirt, QuestItem, QuestOfVirtues, Quiche, QuiverOfBlight, QuiverOfElements, QuiverOfFire, QuiverOfIce, QuiverOfInfinity, QuiverOfLightning, QuiverOfRage, Rabbit, RadiantScimitar, RaedsGlory, RagingGrizzlyBear, RaiJu, RaisableItem, RaiseSwitch, Rancher, RandomTalisman, Ranger, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerGuildmaster, RangerLegs, RankingsOfTrades, Rat, RatCamp, Ratman, RatmanArcher, RatmanMage, RattanDoor, Ravager, RavenHelm, RawBird, RawChickenLeg, RawFishSteak, RawLambLeg, RawRibs, ReactiveArmorScroll, RealEstateBroker, Reaper, ReaperFormScroll, RecallRune, RecallScroll, ReceedingHair, ReceiverCrystal, RecipeScroll, RedAmbitiousSolenQueen, RedArmoire, RedBeaker, RedBook, RedBottle, RedCurvedFlask, RedHangingLantern, RedLeaves, RedMisoSoup, RedPlainRugAddon, RedPlainRugDeed, RedPoinsettia, RedRibbedFlask, RedScales, RedSolenInfiltratorQueen, RedSolenInfiltratorWarrior, RedSolenMatriarch, RedSolenQueen, RedSolenWarrior, RedSolenWorker, RedSoulstone, RedStocking, RedVelvetGiftBox, RefreshPotion, RegardingLlamas, RegStone, RejuvinationAddonComponent, RejuvinationAnkhNorth, RejuvinationAnkhWest, Relnia, RentedVendor, RepairDeed, RepeatingCrossbow, Reptalon, ReptalonFormTalisman, ResGate, ResilientBracer, RestlessSoul, ResurrectionScroll, RevealScroll, Revenant, RevenantLion, RewardBlackDyeTub, RewardBrazier, RewardBrazierDeed, RewardCake, RewardCloak, RewardDress, RewardPottedCactus, RewardRobe, RibCage, Ribs, RidableLlama, RideablePolarBear, Ridgeback, RightArm, RighteousAnger, RightLeg, Rikktor, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, RingOfTheElements, RingOfTheVile, RoastPig, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RockArtifact, RollingPin, Ronin, Rope, RoseInAVase, RoseOfTrinsic, RoseOfTrinsicPetal, RottingCorpse, RoundPaperLantern, RoyalCirclet, RoyalGuardSurvivalKnife, Ruby, RuinedArmoire, RuinedBookcase, RuinedBooks, RuinedChair, RuinedClock, RuinedDrawers, RuinedFallenChairA, RuinedFallenChairB, RuinedPainting, RuinedPaintingArtifact, RuneBeetle, RuneBeetleCarapace, RuneBlade, Runebook, RunebookDyeTub, RuneCarvingKnife, RunedPrism, RunedSwitch, RunicDovetailSaw, RunicHammer, RunicSewingKit, SackFlour, SacrificialAltarAddon, SacrificialAltarDeed, SaddleArtifact, Sai, SakeArtifact, SalvageBag, SamaritanRobe, Samurai, SamuraiHelm, SamuraiTabi, Sand, Sandals, SandFlagstones, SandMiningBook, SandstoneFireplaceEastAddon, SandstoneFireplaceEastDeed, SandstoneFireplaceSouthAddon, SandstoneFireplaceSouthDeed, SandstoneFloorN, SandstoneFloorW, SandstoneFountainAddon, SandStonePatio, SandstonePatioDeed, SandVortex, Sapphire, Satyr, Sausage, SausagePizza, Savage, SavageMask, SavageRider, SavageRidgeback, SavageShaman, Saw, SawTrap, ScaledSwampDragon, Scales, ScarecrowAddon, ScarecrowComponent, ScarecrowDeed, Scepter, Schmendrick, SchmendrickApprenticeCorpse, SchmendrickScrollOfPower, Scimitar, Scissors, Scorp, Scorpion, Scourge, Scribe, ScribeBag, ScribesPen, ScribeStone, ScrollOfAbraxus, ScrollofAlacrity, ScrollofTranscendence, Sculptor, Sculpture1Artifact, Sculpture2Artifact, Scythe, SeaChart, SeaHorse, SeahorseStatuette, SeaSerpent, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, SecureTradeContainer, Seed, SeekerOfAdventure, SeerRobe, Semidar, Serado, SerpentineDragon, SerpentPillar, SerpentPillarAddon, SerpentsFang, ServantOfSemidar, Sewerrat, SewingKit, Sextant, SextantParts, Shade, ShadowDancerLeggings, ShadowFiend, ShadowIronElemental, ShadowIronGranite, ShadowIronIngot, ShadowIronOre, ShadowKnight, ShadowWisp, ShadowWispFamiliar, ShadowWyrm, Shaft, ShaminoCrossbow, ShardPoller, ShardThrasher, SheafOfHay, Sheep, ShepherdsCrook, ShieldOfInvulnerability, ShipModelOfTheHMSCape, ShipwreckedItem, Shipwright, Shirt, Shoes, ShojiLantern, ShojiScreen, ShortBeard, ShortCabinet, ShortHair, ShortMusicStand, ShortPants, ShortSpear, Shovel, ShrineOfWisdomAddon, ShrineOfWisdomComponent, ShroudOfDeciet, SHTeleComponent, SHTeleporter, Shuriken, Sigil, Sign, Silvani, SilvanisFeywoodBow, Silver, SilverBeadNecklace, SilverBracelet, SilverEarrings, SilverNecklace, SilverRing, SilverSerpent, SilverSteed, SilverWire, SkeletalDragon, SkeletalKnight, SkeletalMage, SkeletalMount, Skeleton, Skillet, SkillTeleporter, SkinnedDeerArtifact, SkinnedGoatArtifact, SkinningKnife, Skirt, SkitteringHopper, SkullCandleArtifact, SkullCap, SkullPileAddon, SkullPole, SlabOfBacon, SledgeHammer, Slime, SLWarHorse, SmallBagBall, SmallBedEastAddon, SmallBedEastDeed, SmallBedSouthAddon, SmallBedSouthDeed, SmallBlueBottle, SmallBlueFlask, SmallBoat, SmallBoatDeed, SmallBOD, SmallBrickHouseDeed, SmallBrownBottle, SmallCrate, SmallDockedBoat, SmallDockedDragonBoat, SmallDragonBoat, SmallDragonBoatDeed, SmallEmptyFlask, SmallEmptyPot, SmallFishingNetAddon, SmallFishingNetComponent, SmallFishingNetDeed, SmallFlask, SmallForgeAddon, SmallForgeDeed, SmallGreenBottle, SmallGreenBottle2, SmallOldHouse, SmallPlateJingasa, SmallPumpkin, SmallRedFlask, SmallShop, SmallSmithBOD, SmallStretchedHideEastAddon, SmallStretchedHideEastDeed, SmallStretchedHideSouthAddon, SmallStretchedHideSouthDeed, SmallTailorBOD, SmallTower, SmallTowerDeed, SmallTowerSculpture, SmallUrn, SmallVioletBottle, SmallWatermelon, SmallYellowFlask, SmithBag, SmithHammer, SmithStone, SmokeBomb, SmoothingPlane, Snake, SnowElemental, SnowLeopard, Snowman, SnowPile, SnowPileDeco, SnowyTree, SolenAntHole, SolenAntHoleComponent, SongOfSamlethe, SongWovenMantle, SOS, SoulSeeker, SoulStone, SoulstoneFragment, SoulstoneFragmentToken, Spam, SpawnedOrcishLord, Spawner, SpawnPersistence, Spear, SpecialBeardDye, SpecialDyeTub, SpecialFishingNet, SpecialHairDye, SpecialScroll, SpectralArmour, Spectre, Spellbook, SpellScroll, SpellweavingBook, SpellWovenBritches, SpidersSilk, SpikeTrap, SpinedHides, SpinedLeather, SpinningHourglass, SpinningwheelEastAddon, SpinningwheelEastDeed, SpinningwheelSouthAddon, SpinningwheelSouthDeed, SpiritOfTheTotem, SplitCoconut, SpoolOfThread, Spoon, SpoonLeft, SpoonRight, Springs, Spyglass, SquareGozaMatEastAddon, SquareGozaMatEastDeed, SquareGozaMatSouthAddon, SquareGozaMatSouthDeed, Squash, Squirrel, SquirrelFormTalisman, SquirrelStatueEastAddon, SquirrelStatueEastDeed, SquirrelStatueSouthAddon, SquirrelStatueSouthDeed, StaffOfPower, StaffOfTheMagi, StainedOoze, StandardPlateKabuto, StandingBrokenChairAddon, StandingBrokenChairComponent, StandingBrokenChairDeed, StarRoomGate, StarSapphire, StatCapScroll, Static, StaticTarget, StatueEast, StatueEast2, StatueNorth, StatuePegasus, StatuePegasus2, StatueSouth, StatueSouth2, StatueSouthEast, StatuetteDyeTub, StatueWest, StealableArtifactsSpawner, StitchersMittens, StoneAnkh, StoneAnkhComponent, StoneAnkhDeed, StoneChair, StoneCrafter, StoneFaceTrap, StoneFaceTrapNoDamage, StoneFireplaceEastAddon, StoneFireplaceEastDeed, StoneFireplaceSouthAddon, StoneFireplaceSouthDeed, StoneFountainAddon, StoneGargoyle, StoneHarpy, StoneMiningBook, StoneOvenEastAddon, StoneOvenEastDeed, StoneOvenSouthAddon, StoneOvenSouthDeed, StonePaversDark, StonePaversLight, StonePaversMedium, StonePlasterHouseDeed, StoneStatueAddon, StoneStatueDeed, StoneWorkshopDeed, Stool, Stormgrip, StrangleScroll, StrawHat, StrengthPotion, StrengthScroll, StretchedHideArtifact, StrongBackpack, StrongBox, StrongBoxPuzzle, StrongholdMonolith, StrongMongbat, StrongWoodDoor, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLeggingsArtifact, StuddedLegs, StuddedMempo, StuddedSuneate, StuddedTunicArtifact, SturdyPickaxe, SturdyShovel, Subdue, Succubus, SuitOfGoldArmorAddon, SuitOfGoldArmorComponent, SuitOfGoldArmorDeed, SuitOfSilverArmorAddon, SuitOfSilverArmorComponent, SuitOfSilverArmorDeed, SulfurousAsh, SummonAirElementalScroll, SummonCreatureScroll, SummonDaemonScroll, SummonEarthElementalScroll, SummonedAirElemental, SummonedAntLion, SummonedArcticOgreLord, SummonedBakeKitsune, SummonedBogling, SummonedBullFrog, SummonedChicken, SummonedCow, SummonedDaemon, SummonedDoppleganger, SummonedEarthElemental, SummonedFireElemental, SummonedFrostSpider, SummonedGreatHart, SummonedLavaSerpent, SummonedOrcBrute, SummonedPaladin, SummonedPaladinMoongate, SummonedPanther, SummonedSheep, SummonedSkeletalKnight, SummonedVorpalBunny, SummonedWailingBanshee, SummonedWaterElemental, SummonFamiliarScroll, SummonFeyScroll, SummonFiendScroll, SummonFireElementalScroll, SummoningAltar, SummonWaterElementalScroll, Surcoat, SushiPlatter, SushiRolls, SwampDragon, SwampTentacle, SwampTile, SwarmOfFlies, SweetDough, SwitchItem, SwordDisplay1NorthArtifact, SwordDisplay1WestArtifact, SwordDisplay2NorthArtifact, SwordDisplay2WestArtifact, SwordDisplay3EastArtifact, SwordDisplay3SouthArtifact, SwordDisplay4NorthArtifact, SwordDisplay4WestArtifact, SwordDisplay5NorthArtifact, SwordDisplay5WestArtifact, SwordOfTheStampede, SwordsOfProsperity, TableWithBlueClothAddon, TableWithBlueClothDeed, TableWithOrangeClothAddon, TableWithOrangeClothDeed, TableWithPurpleClothAddon, TableWithPurpleClothDeed, TableWithRedClothAddon, TableWithRedClothDeed, Tailor, TailorBag, TailorGuildmaster, TailorStone, Taint, TaintedWool, TaleOfThreeTribes, TalesOfVesperVol1, TalkingToWisps, TallCabinet, TallElvenBedEastAddon, TallElvenBedEastDeed, TallElvenBedSouthAddon, TallElvenBedSouthDeed, TallMusicStand, TallStrawHat, TalonBite, Tambourine, TambourineTassel, TamingDragons, TanBook, Tanner, Tapestry1N, Tapestry2N, Tapestry2W, Tapestry3N, Tapestry3W, Tapestry4N, Tapestry4W, Tapestry5N, Tapestry5W, Tapestry6N, Tapestry6W, TapestryOfSosaria, TarotCardsArtifact, TatteredAncientMummyWrapping, TattsukeHakama, TavaraSewel, TavarasJournal1, TavarasJournal11, TavarasJournal14, TavarasJournal16, TavarasJournal16b, TavarasJournal17, TavarasJournal19, TavarasJournal2, TavarasJournal3, TavarasJournal6, TavarasJournal7, TavarasJournal8, TavarasJournal9, TavernKeeper, TaxidermyKit, TBWarHorse, TeapotNorthArtifact, TeapotWestArtifact, Tekagi, TelekinisisScroll, Teleporter, TeleportScroll, Telescope, TerathanAvenger, TerathanDrone, TerathanMatriarch, TerathanWarrior, Tessen, Tetsubo, ThatchedRoofCottageDeed, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheFight, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThickGrayStoneWall, Thief, ThiefGuildmaster, ThighBoots, ThinBrickWall, ThinLongsword, ThinStoneWall, Throne, ThrowingDagger, ThunderstormScroll, TillerMan, TimberWolf, Tinker, TinkerGuildmaster, TinkersTools, TinkerTools, TinyRedBottle, TinyYellowBottle, Titan, TitansHammer, TomasONeerlan, TomeOfEnlightenment, TomeOfLostKnowledge, Tongs, ToolKit, Torch, TormentedChains, TormentedMinotaur, Torso, TotalRefreshPotion, TotemOfVoid, Tourmaline, Tower, TowerDeed, TowerLanternArtifact, TownCrier, TownMonolith, TownStone, ToxicElemental, TradeGlasses, TrainingDummy, TrainingDummyEastAddon, TrainingDummyEastDeed, TrainingDummySouthAddon, TrainingDummySouthDeed, TransferItem, TransferItem, TransientItem, TranslatedGargoyleJournal, TrapableContainer, TrashBarrel, TrashChest, TreasureChestDirt, TreasureMap, TreasureMapChest, TreasuresOfTokunoPersistance, TreasureTrinketGlasses, TreatiseOnAlchemy, Treefellow, TreeStump, TreeStumpDeed, TreeTrunk, TribalBerry, TribalMask, TribalPaint, TribalSpear, TricorneHat, TripleFanNorthArtifact, TripleFanWestArtifact, Troglodyte, Troll, TrophyAddon, TrophyDeed, TropicalBird, TrulyRareFish, TsukiWolf, Tub, Tunic, TunicOfFire, Turnip, Turquoise, Twaulo, TwoHandedAxe, TwoPigTails, TwoStoryHouse, TwoStoryStonePlasterHouseDeed, TwoStoryVilla, TwoStoryWoodPlasterHouseDeed, UnbakedApplePie, UnbakedFruitPie, UnbakedMeatPie, UnbakedPeachCobbler, UnbakedPumpkinPie, UnbakedQuiche, UncookedCheesePizza, UncookedSausagePizza, UncutCloth, UnfinishedBarrel, UnholyBone, UnholyFamiliar, UnholySteed, Unicorn, UnlockScroll, UnmadeBedAddon, UnmadeBedDeed, UnsettlingPortraitAddon, UnsettlingPortraitComponent, UnsettlingPortraitDeed, Urn1Artifact, Urn2Artifact, Uzeraan, UzeraanTurmoilHorn, UzeraanTurmoilTeleporter, Vagabond, ValentinesCard, ValentinesCardEast, ValentinesCardSouth, ValoriteElemental, ValoriteGranite, ValoriteIngot, ValoriteOre, VampireBat, VampireBatFamiliar, VampiricEmbraceScroll, Vandyke, VanityAddon, VanityDeed, VarietyDealer, Vase, VaultOfSecretsBarrier, VendorBackpack, VendorRentalContract, VengefulSpiritScroll, VeriteElemental, VeriteGranite, VeriteIngot, VeriteOre, Veterinarian, Victoria, VikingSword, VillaDeed, Vines, VioletCourage, VioletRibbedFlask, VirtualMountItem, VirtualMountItem, VirtueBook, VoiceOfTheFallenKing, VorpalBunny, VultureHelm, WailingBanshee, Waiter, Wakizashi, WallBanner, WallBannerComponent, WallBannerDeed, WallBlood, WallOfStoneScroll, WallSconce, WallTorch, WallTorchAddon, WallTorchComponent, WallTorchDeed, Walrus, Wanderer, WandererOfTheVoid, WanderingHealer, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WarningItem, WarriorGuard, WarriorGuildmaster, WarriorStatueEastAddon, WarriorStatueEastDeed, WarriorStatueSouthAddon, WarriorStatueSouthDeed, Wasabi, WasabiClumps, WaterBarrel, WaterElemental, Watermelon, WaterTile, WaterTroughEastAddon, WaterTroughEastDeed, WaterTroughSouthAddon, WaterTroughSouthDeed, WaterVatEast, WaterVatSouth, WayPoint, WeakenScroll, WeaknessWand, WeaponEngravingTool, Weaponsmith, WeatherMap, Weaver, Web, WheatSheaf, Whip, WhippingVine, WhiteDriedFlowers, WhiteHangingLantern, WhiteMisoSoup, WhiteNinjaQuestTeleporter, WhitePearl, WhitePoinsettia, WhiteScales, WhiteSnowflake, WhiteStoneWall, WhiteWolf, WhiteWyrm, WideBrimHat, WildfireBow, WildfireScroll, WildGirlOfTheForest, WildStaff, WindChimes, WindsEdge, Windsong, WindSpirit, WingedHelm, WinterGiftPackage2003, Wisp, WitherScroll, WizardsGlasses, WizardsHat, WomanPortrait1, WomanPortrait2, WondrousFish, WoodDebris, WoodenBench, WoodenBowl, WoodenBowlOfCarrots, WoodenBowlOfCorn, WoodenBowlOfLettuce, WoodenBowlOfPeas, WoodenBowlOfStew, WoodenBowlOfTomatoSoup, WoodenBox, WoodenChair, WoodenChairCushion, WoodenChest, WoodenCoffinAddon, WoodenCoffinComponent, WoodenCoffinDeed, WoodenFootLocker, WoodenKiteShield, WoodenShield, WoodenThrone, WoodenTreasureChest, WoodHouseDeed, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WoodPlasterHouseDeed, Wool, WordOfDeathScroll, WorldMap, Wraith, WraithFormScroll, WrathOfTheDryad, WreathAddon, WreathDeed, WritingTable, Wyvern, Yamandon, YellowBeaker, YellowGourd, YellowScales, YewBoard, YewLog, YewWoodTable, YomotsuElder, YomotsuPriest, YomotsuWarrior, YoungNinja, YoungRonin, Yumi, Zeefzorpul, ZenRock1Artifact, ZenRock2Artifact, ZenRock3Artifact, Zoel, Zombie, ZoogiFungus, ZyronicClaw

+ int Z( get; )
+ + diff --git a/Docs/types/IPooledEnumerable.html b/Docs/types/IPooledEnumerable.html new file mode 100644 index 0000000..de0cf30 --- /dev/null +++ b/Docs/types/IPooledEnumerable.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IPooledEnumerable + + +

Back to Server

+

IPooledEnumerable : IEnumerable

+

Derived Types: NullEnumerable, PooledEnumerable

+ virtual void Free()
+ + diff --git a/Docs/types/IPooledEnumerator.html b/Docs/types/IPooledEnumerator.html new file mode 100644 index 0000000..bfe74ed --- /dev/null +++ b/Docs/types/IPooledEnumerator.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IPooledEnumerator + + +

Back to Server

+

IPooledEnumerator : IEnumerator

+

Derived Types: MultiTileEnumerator, ObjectEnumerator, SectorEnumerator, TypedEnumerator

+ IPooledEnumerable Enumerable( get; set; )
+ virtual void Free()
+ + diff --git a/Docs/types/IRewardItem.html b/Docs/types/IRewardItem.html new file mode 100644 index 0000000..9322c1f --- /dev/null +++ b/Docs/types/IRewardItem.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IRewardItem + + +

Back to Server.Engines.VeteranRewards

+

IRewardItem

+

Derived Types: AnkhOfSacrificeAddon, AnkhOfSacrificeDeed, Banner, BannerDeed, BloodyPentagramAddon, BloodyPentagramDeed, BronzeStatueMaker, CannonDeed, CharacterStatue, CharacterStatueDeed, CharacterStatueMaker, ChargerOfTheFallen, CommodityDeedBox, ContestMiniHouseDeed, DecorativeShield, DecorativeShieldDeed, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, FlamingHead, FlamingHeadDeed, FurnitureDyeTub, HangingSkeleton, HangingSkeletonDeed, JadeStatueMaker, LeatherDyeTub, MarbleStatueMaker, MiningCart, MiningCartDeed, MinotaurStatue, MinotaurStatueDeed, MonsterStatuette, PhillipsWoodenSteed, PottedCactusDeed, RedSoulstone, RewardBlackDyeTub, RewardBrazier, RewardBrazierDeed, RewardCloak, RewardDress, RewardPottedCactus, RewardRobe, RideablePolarBear, RunebookDyeTub, SeahorseStatuette, SpecialDyeTub, StatuetteDyeTub, StoneAnkh, StoneAnkhDeed, TreeStump, TreeStumpDeed, WallBanner, WallBannerDeed, WeaponEngravingTool

+ bool IsRewardItem( get; set; )
+ + diff --git a/Docs/types/IRewardOption.html b/Docs/types/IRewardOption.html new file mode 100644 index 0000000..4f64db9 --- /dev/null +++ b/Docs/types/IRewardOption.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IRewardOption + + +

Back to Server.Gumps

+

IRewardOption

+

Derived Types: AnkhOfSacrificeDeed, CannonDeed, MiningCartDeed, MinotaurStatueDeed, TreeStumpDeed

+ virtual void GetOptions( RewardOptionList list )
+ virtual void OnOptionSelected( Mobile from, int choice )
+ + diff --git a/Docs/types/IScissorable.html b/Docs/types/IScissorable.html new file mode 100644 index 0000000..323e920 --- /dev/null +++ b/Docs/types/IScissorable.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IScissorable + + +

Back to Server.Items

+

IScissorable

+

Derived Types: AcidProofRobe, Aegis, AegisOfGrace, AncientFarmersKasa, AncientSamuraiDo, ANecromancerShroud, AnthropomorphistGlasses, ArcaneShield, ArmorOfFortune, ArmsOfTacticalExcellence, ArtsGlasses, Bandana, BarbedHides, Bascinet, BaseArmor, BaseCloak, BaseClothing, BaseGlovesOfMining, BaseHat, BaseMiddleTorso, BaseOuterLegs, BaseOuterTorso, BasePants, BaseShield, BaseShirt, BaseShoes, BaseWaist, BearMask, BlackLotusHood, BodySash, BoltOfCloth, BoneArms, BoneChest, BoneGloves, BoneHelm, BoneLegs, BonePile, Bonnet, Boots, BrambleCoat, BronzeShield, Buckler, BurglarsBandana, Cap, CaptainJohnsHat, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChaosShield, Circlet, Cloak, CloseHelm, Cloth, ClothNinjaHood, ClothNinjaJacket, CrimsonCincture, CrownOfTalKeesh, DaemonArms, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, DaimyosHelm, DeathRobe, DecorativePlateKabuto, DeerMask, DetectiveBoots, DivineCountenance, Doublet, DragonArms, DragonChest, DragonGloves, DragonHelm, DragonLegs, DreadPirateHat, DupresShield, ElvenBoots, ElvenDarkShirt, ElvenGlasses, ElvenPants, ElvenShirt, EmbroideredOakLeafCloak, FancyDress, FancyShirt, FeatheredHat, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FeyLeggings, FloppyHat, FlowerGarland, FoldedSteelGlasses, FormalShirt, FullApron, FurBoots, FurCape, FurSarong, GauntletsOfNobility, GemmedCirclet, GildedDress, GladiatorsCollar, GlovesOfThePugilist, GlovesOfTheSun, GuantletsOfAnger, Hakama, HakamaShita, HalfApron, HatOfTheMagi, HeartOfTheLion, HeaterShield, HeavyPlateJingasa, Helmet, HelmOfInsight, HelmOfSwiftness, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, Hides, HolyKnightsBreastplate, HoodedShroudOfShadows, HornedHides, HornedTribalMask, HuntersHeaddress, InquisitorsResolution, IronwoodCrown, JackalsCollar, JesterHat, JesterHatofChuckles, JesterSuit, JinBaori, Kamishimo, Kasa, KasaOfTheRajin, Kilt, LeafArms, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, LeurociansMempoOfFortune, LieutenantOfTheBritannianRoyalGuard, LightOfWayGlasses, LightPlateJingasa, LongPants, LyricalGlasses, MaceShieldGlasses, MagicWizardsHat, MaleElvenRobe, MaleKimono, MaritimeGlasses, MetalKiteShield, MetalShield, MidnightBracers, MonkRobe, NecromanticGlasses, NinjaTabi, NorseHelm, Obi, OilCloth, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishVisage, OrderShield, OrnateCrownOfTheHarrower, PadsOfTheCuSidhe, PlagueBeastBackupOrgan, PlagueBeastBlood, PlagueBeastComponent, PlagueBeastHeart, PlagueBeastInnard, PlagueBeastLord, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastMutationCore, PlagueBeastOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan, PlagueBeastVein, PlainDress, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PoisonedGlasses, PolarBearMask, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerLegs, RavenHelm, RewardCloak, RewardDress, RewardRobe, RibCage, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RoyalCirclet, RuneBeetleCarapace, SamaritanRobe, SamuraiHelm, SamuraiTabi, Sandals, SavageMask, ShadowDancerLeggings, ShieldOfInvulnerability, Shirt, Shoes, ShortPants, ShroudOfDeciet, Skirt, SkullCap, SmallPlateJingasa, SongWovenMantle, SpellWovenBritches, SpinedHides, SpiritOfTheTotem, StandardPlateKabuto, StitchersMittens, Stormgrip, StrawHat, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLegs, StuddedMempo, StuddedSuneate, Surcoat, TallStrawHat, TattsukeHakama, TheMostKnowledgePerson, TheRobeOfBritanniaAri, ThighBoots, TradeGlasses, TreasureTrinketGlasses, TribalMask, TricorneHat, Tunic, TunicOfFire, UncutCloth, VioletCourage, VoiceOfTheFallenKing, VultureHelm, Waraji, WideBrimHat, WingedHelm, WizardsGlasses, WizardsHat, WoodenKiteShield, WoodenShield, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs

+ virtual bool Scissor( Mobile from, Scissors scissors )
+ + diff --git a/Docs/types/ISecurable.html b/Docs/types/ISecurable.html new file mode 100644 index 0000000..f6ee60b --- /dev/null +++ b/Docs/types/ISecurable.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ISecurable + + +

Back to Server.Gumps

+

ISecurable

+

Derived Types: ArmsAndWeaponsPrimer, Backgammon, BaseBoard, BaseBook, BaseHouseDoor, BasePlayerBB, BirdsOfBritannia, BlackDyeTub, BlackthornWelcomeBook, BlazeDyeTub, BlueBook, BlueSoulstone, BoldStranger, BritannianFlora, BrownBook, BulkOrderBook, BurningOfTrinsic, CallToAnarchy, CheckerBoard, Chessboard, ChildrenTalesVol2, DarkWoodHouseDoor, DawnsMusicBox, DeceitDungeonOfHorror, DimensionalTravel, DiversityOfOurLand, DrakovsJournal, DyeTub, EthicalHedonism, FropozJournal, FurnitureDyeTub, GenericHouseDoor, GrammarOfOrcish, GrimmochJournal1, GrimmochJournal11, GrimmochJournal14, GrimmochJournal17, GrimmochJournal2, GrimmochJournal23, GrimmochJournal3, GrimmochJournal6, GrimmochJournal7, GuideToGuilds, HouseTeleporter, KaburJournal, LeatherDyeTub, LifeOfATravellingMinstrel, LysanderNotebook1, LysanderNotebook11, LysanderNotebook2, LysanderNotebook3, LysanderNotebook7, LysanderNotebook8, MahjongGame, MajorTradeAssociation, MetalHouseDoor, MyStory, PlantItem, PlayerBBEast, PlayerBBSouth, QuestOfVirtues, RankingsOfTrades, RedBook, RedSoulstone, RegardingLlamas, RewardBlackDyeTub, RoseOfTrinsic, Runebook, RunebookDyeTub, SecureInfo, SongOfSamlethe, SoulStone, SoulstoneFragment, SpecialDyeTub, StatuetteDyeTub, TaleOfThreeTribes, TalesOfVesperVol1, TalkingToWisps, TamingDragons, TanBook, TapestryOfSosaria, TavarasJournal1, TavarasJournal11, TavarasJournal14, TavarasJournal16, TavarasJournal16b, TavarasJournal17, TavarasJournal19, TavarasJournal2, TavarasJournal3, TavarasJournal6, TavarasJournal7, TavarasJournal8, TavarasJournal9, TheFight, TranslatedGargoyleJournal, TreatiseOnAlchemy, VirtueBook, WildGirlOfTheForest

+ SecureLevel Level( get; set; )
+ + diff --git a/Docs/types/ISerializable.html b/Docs/types/ISerializable.html new file mode 100644 index 0000000..7cb0b96 --- /dev/null +++ b/Docs/types/ISerializable.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ISerializable + + +

Back to Server

+

ISerializable

+

Derived Types: AbbatoirAddon, AbbatoirDeed, AbysmalHorror, AcidProofRobe, AcidSlime, Actor, AddonComponent, AddonContainerComponent, AdminRobe, AdmiralsHeartyRum, Aegis, AegisOfGrace, Afro, AgapiteElemental, AgapiteGranite, AgapiteIngot, AgapiteOre, AgilityPotion, AgilityScroll, AirElemental, AlbertaGiacco, Alchemist, AlchemistsBauble, AlchemistTableEastAddon, AlchemistTableEastDeed, AlchemistTableSouthAddon, AlchemistTableSouthDeed, AlchemyBag, AlchemyStone, Alligator, Amber, Amethyst, AncientFarmersKasa, AncientLich, AncientSamuraiDo, AncientSmithyHammer, AncientUrn, AncientWyrm, ANecromancerShroud, AniLargeVioletFlask, AnimalTrainer, AnimateDeadScroll, AniRedRibbedFlask, AniSmallBlueFlask, AnkhNorth, AnkhOfSacrificeAddon, AnkhOfSacrificeComponent, AnkhOfSacrificeDeed, AnkhWest, AnsellaGryen, AnthropomorphistGlasses, AntLion, Anvil, AnvilComponent, AnvilEastAddon, AnvilEastDeed, AnvilSouthAddon, AnvilSouthDeed, Apple, ApplePie, AppleTreeAddon, AppleTreeDeed, AppleTrunkAddon, AppleTrunkDeed, ArcaneBookshelfEastAddon, ArcaneBookshelfEastDeed, ArcaneBookshelfSouthAddon, ArcaneBookshelfSouthDeed, ArcaneCircleAddon, ArcaneCircleDeed, ArcaneCircleScroll, ArcaneDaemon, ArcaneEmpowermentScroll, ArcaneFey, ArcaneFiend, ArcaneFocus, ArcaneGem, ArcaneShield, ArcanistStatueEastAddon, ArcanistStatueEastDeed, ArcanistStatueSouthAddon, ArcanistStatueSouthDeed, ArchCureScroll, ArcherGuard, ArcheryButte, ArcheryButteAddon, ArcheryButteDeed, Architect, ArchProtectionScroll, ArcticDeathDealer, ArcticOgreLord, Armoire, Armorer, ArmorOfFortune, ArmsAndWeaponsPrimer, ArmsOfTacticalExcellence, Arrow, ArtifactLargeVase, ArtifactVase, Artist, ArtsGlasses, AshBoard, AshLog, AssassinSpike, AttuneWeaponScroll, AwaseMisoSoup, AwesomeDisturbingPortraitAddon, AwesomeDisturbingPortraitComponent, AwesomeDisturbingPortraitDeed, Axe, AxeOfTheHeavens, Axle, AxleGears, Backgammon, Backpack, BackpackArtifact, Bacon, BadCard, Bag, BagOfAllReagents, BagOfingots, BagOfNecroReagents, BagOfReagents, BagOfSending, BakeKitsune, Baker, BallOfSummoning, BallotBox, BallotBoxAddon, BallotBoxDeed, Balron, BambooChair, BambooFlute, BambooScreen, Banana, Bananas, Bandage, Bandana, BankBox, BankCheck, Banker, BankerCamp, Banner, BannerDeed, BarbedHides, BarbedLeather, Bard, BardGuildmaster, Bardiche, BarkeepContract, Barkeeper, BarkFragment, Barracoon, BarredMetalDoor, BarredMetalDoor2, Barrel, BarrelHoops, BarrelLid, BarrelStaves, BarrelTap, Bascinet, BaseAddon, BaseAddonContainer, BaseAddonContainerDeed, BaseAddonDeed, BaseAgilityPotion, BaseAmbitiousSolenQueen, BaseArmor, BaseAxe, BaseBagBall, BaseBashing, BaseBeverage, BaseBoard, BaseBoat, BaseBoatDeed, BaseBook, BaseBracelet, BaseBulletinBoard, BaseCamp, BaseChampion, BaseCloak, BaseClothing, BaseClothMaterial, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseContainer, BaseCreature, BaseCurePotion, BaseDecorationArtifact, BaseDecorationContainerArtifact, BaseDockedBoat, BaseDoor, BaseEarrings, BaseEnraged, BaseEquipableLight, BaseEscortable, BaseExplosionPotion, BaseFactionGuard, BaseFactionTrap, BaseFactionTrapDeed, BaseFactionVendor, BaseFamiliar, BaseFloor, BaseFormTalisman, BaseFruitTreeAddon, BaseGlovesOfMining, BaseGranite, BaseGuard, BaseGuild, BaseGuildmaster, BaseHarvestTool, BaseHat, BaseHealer, BaseHealPotion, BaseHides, BaseHouse, BaseHouseDoor, BaseImprisonedMobile, BaseIngot, BaseInstrument, BaseJewel, BaseKnife, BaseLeather, BaseLight, BaseMagicFish, BaseMeleeWeapon, BaseMiddleTorso, BaseMonolith, BaseMount, BaseMulti, BaseNecklace, BaseOre, BaseOuterLegs, BaseOuterTorso, BasePants, BasePiece, BasePigmentsOfTokuno, BasePlayerBB, BasePoisonPotion, BasePoleArm, BasePotion, BaseQuester, BaseQuiver, BaseRanged, BaseReagent, BaseRefreshPotion, BaseRejuvinationAnkh, BaseRing, BaseRunicTool, BaseScales, BaseShield, BaseShieldGuard, BaseShirt, BaseShoes, BaseSign, BaseSolenMatriarch, BaseSpear, BaseStaff, BaseStrengthPotion, BaseSuit, BaseSword, BaseSystemController, BaseTalisman, BaseTalismanSummon, BaseTool, BaseTrap, BaseTreasureChest, BaseVendor, BaseWaist, BaseWall, BaseWand, BaseWarHorse, BaseWaterContainer, BaseWeapon, BaseWindChimes, Basket, Basket1Artifact, Basket2Artifact, Basket3NorthArtifact, Basket3WestArtifact, Basket4Artifact, Basket5NorthArtifact, Basket5WestArtifact, Basket6Artifact, BattleAxe, BatWing, Beads, Beard, BearMask, BedOfNailsAddon, BedOfNailsComponent, BedOfNailsDeed, Bedroll, Beekeeper, Beeswax, Beetle, BellOfTheDead, BentoBox, Betrayer, BeverageBottle, BigElvenChair, BigFish, Bird, BirdsOfBritannia, BlackAmbitiousSolenQueen, BlackBear, BlackDyeTub, Blackheart, BlackLotusHood, BlackPearl, BlackScales, Blacksmith, BlacksmithGuildmaster, BlackSolenInfiltratorQueen, BlackSolenInfiltratorWarrior, BlackSolenMatriarch, BlackSolenQueen, BlackSolenWarrior, BlackSolenWorker, BlackStaff, BlackthornWelcomeBook, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BladeSpirits, BladeSpiritsScroll, BlankMap, BlankScroll, BlazeDyeTub, BlazeOfDeath, BlessScroll, Blight, BlightGrippedLongbow, Blocker, Blood, BloodElemental, Bloodmoss, BloodOathScroll, BloodPentagram, BloodwoodBoard, BloodwoodLog, BloodwoodSpirit, BloodyPentagramAddon, BloodyPentagramComponent, BloodyPentagramDeed, BloodyWaterArtifact, Blowpipe, BlueBeaker, BlueBook, BlueCurvedFlask, BlueDecorativeRugAddon, BlueDecorativeRugDeed, BlueDiamond, BlueFancyRugAddon, BlueFancyRugDeed, BlueNinjaQuestTeleporter, BluePlainRugAddon, BluePlainRugDeed, BlueScales, BlueSlateFloorCenter, BlueSnowflake, BlueSoulstone, Boar, Board, BodySash, Bogle, Bogling, BogThing, BoilingCauldronAddon, BoilingCauldronDeed, Bokuto, Bola, BolaBall, BoldStranger, Bolt, BoltOfCloth, Bone, BoneArms, BoneChest, BoneCouchAddon, BoneCouchComponent, BoneCouchDeed, BoneCrusher, BoneDemon, BoneGloves, BoneHarvester, BoneHelm, BoneKnight, BoneLegs, BoneMagi, BonePile, Bonesmasher, BoneTableAddon, BoneTableDeed, BoneThroneAddon, BoneThroneComponent, BoneThroneDeed, Bonnet, BookOfBushido, BookOfChivalry, BookOfNinjitsu, BooksFaceDownArtifact, BooksNorthArtifact, BooksWestArtifact, Boomstick, Boots, Bottle, BottleArtifact, Bow, BowlArtifact, BowlFlour, BowlsHorizontalArtifact, BowlsVerticalArtifact, BowOfTheJukaKing, Bowyer, BraceletOfBinding, BraceletOfHealth, BrambleCoat, BraveKnightOfTheBritannia, Brazier, BrazierArtifact, BrazierTall, BreadLoaf, BreathOfTheDead, BrickHouseDeed, BricksFloor1, BricksFloor2, BrideGroom, Brigand, BrigandCamp, BrightlyColoredEggs, BrilliantAmber, BritannianFlora, BroadcastCrystal, Broadsword, BrocadeGozaMatEastAddon, BrocadeGozaMatEastDeed, BrocadeGozaMatSouthAddon, BrocadeGozaMatSouthDeed, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatEastDeed, BrocadeSquareGozaMatSouthAddon, BrocadeSquareGozaMatSouthDeed, BrokenArmoireAddon, BrokenArmoireComponent, BrokenArmoireDeed, BrokenBedAddon, BrokenBedDeed, BrokenBookcaseAddon, BrokenBookcaseComponent, BrokenBookcaseDeed, BrokenChair, BrokenChestOfDrawersAddon, BrokenChestOfDrawersComponent, BrokenChestOfDrawersDeed, BrokenCoveredChairAddon, BrokenCoveredChairComponent, BrokenCoveredChairDeed, BrokenFallenChairAddon, BrokenFallenChairComponent, BrokenFallenChairDeed, BrokenVanityAddon, BrokenVanityDeed, BronzeElemental, BronzeGranite, BronzeIngot, BronzeOre, BronzeShield, BronzeStatueMaker, BrownBear, BrownBearRugEastAddon, BrownBearRugEastDeed, BrownBearRugSouthAddon, BrownBearRugSouthDeed, BrownBook, Bucket, Buckler, BulkOrderBook, Bull, BulletinBoard, BulletinMessage, BullFrog, BunnyHole, BunsHair, BurglarsBandana, BurningOfTrinsic, BustEast, BustSouth, Butcher, ButcherKnife, Cabbage, Cake, CakeMix, CallToAnarchy, Calm, Campfire, Candelabra, CandelabraOfSouls, CandelabraStand, Candle, CandleLarge, CandleLong, CandleShort, CandleSkull, CandyCane, Cannon, CannonAddon, CannonAddonComponent, CannonComponent, CannonDeed, Cantaloupe, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CapturedEssence, CapturedHordeMinion, Cards, Cards2, Cards3, Cards4, Carpenter, Carrot, Castle, CastleDeed, Cat, Cauldron, CaveFloorCenter, CaveFloorEast, CaveFloorNorth, CaveFloorSouth, CaveFloorWest, CavortingClub, Centaur, CeramicMug, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChainLightningScroll, ChampionAltar, ChampionPlatform, ChampionSkull, ChampionSkullBrazier, ChampionSkullPlatform, ChampionSpawn, ChaosDaemon, ChaosDragoon, ChaosDragoonElite, ChaosGuard, ChaosShield, CharacterStatue, CharacterStatueDeed, CharacterStatueMaker, CharacterStatuePlinth, ChargerOfTheFallen, CheckerBoard, Checkers, Checkers2, CheesePizza, CheeseSlice, CheeseWedge, CheeseWheel, CherryArmoire, CherryBlossomTreeAddon, CherryBlossomTreeDeed, CherryBlossomTrunkAddon, CherryBlossomTrunkDeed, Chessboard, Chessmen, Chessmen2, Chessmen3, ChestOfHeirlooms, Chicken, ChickenLeg, ChildrenTalesVol2, ChiselsNorth, ChiselsWest, Chyloth, ChylothShroud, ChylothStaff, CinnamonFancyRugAddon, CinnamonFancyRugDeed, Circlet, Citrine, CityMap, Cleaver, Cloak, Clock, ClockFrame, ClockLeft, ClockParts, ClockRight, ClockworkAssembly, Clone, ClosedBarrel, CloseHelm, Cloth, ClothingBlessDeed, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyScroll, ClumsyWand, Coal, Cobbler, CobblestonesFloor, Coconut, CocoonArtifact, ColdBlood, ColdForgedBlade, ColoredAnvil, CommodityDeed, CommodityDeedBox, CompositeBow, CoMWarHorse, ConfirmationMoongate, ConflagrationPotion, ConfusionBlastPotion, Container, ContestMiniHouse, ContestMiniHouseDeed, ContractOfEmployment, ControlPanel, Cook, CookableFood, CookedBird, CookieMix, Cookies, CopperElemental, CopperGranite, CopperIngot, CopperOre, CopperWire, Corpse, Corpser, CorpseSkinScroll, CorrosiveSlime, CorruptedSoul, Corruption, Cotton, Cougar, CounselorRobe, CoveredChair, Cow, Crane, CreateFoodScroll, CreatureBackpack, CreepyPortraitAddon, CreepyPortraitComponent, CreepyPortraitDeed, CrescentBlade, CrimsonCincture, Crossbow, CrossbowBolts, CrownOfTalKeesh, CrystalCaveBarrier, CrystalElemental, CunningScroll, CupsArtifact, CurePotion, CureScroll, Cursed, CursedSoul, CurseScroll, CurseWeaponScroll, CurtainsAddon, CurtainsComponent, CurtainsDeed, CurvedFlask, CuSidhe, CuSidheFormTalisman, CustomHairstylist, Cutlass, Cyclops, Daemon, DaemonArms, DaemonBlood, DaemonBloodChest, DaemonBone, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DamagedBooksArtifact, DarkenedSky, DarkFlowerTapestryEastAddon, DarkFlowerTapestryEastDeed, DarkFlowerTapestrySouthAddon, DarkFlowerTapestrySouthDeed, DarknightCreeper, DarkSandstoneFloorN, DarkSandstoneFloorW, DarkSapphire, DarkSource, DarkTidesHorn, DarkTidesTeleporter, DarkWisp, DarkWolfFamiliar, DarkWoodDoor, DarkWoodGate, DarkWoodHouseDoor, DarkWoodWall, DarkYarn, DartBoard, DartBoardEastAddon, DartBoardEastDeed, DartBoardSouthAddon, DartBoardSouthDeed, Dates, DawnsMusicBox, DawnsMusicGear, DeadlyImp, DeadlyPoisonPotion, DeadWood, DeathAdder, DeathRobe, DeathShroud, DeathwatchBeetle, DeathwatchBeetleHatchling, DecayedCorpse, DeceitBrazier, DeceitDungeonOfHorror, DecoArrowShafts, DecoBlackmoor, DecoBloodspawn, DecoBottlesOfLiquor, DecoBridle, DecoBridle2, DecoBrimstone, DecoCards5, DecoCrystalBall, DecoDeckOfTarot, DecoDeckOfTarot2, DecoDragonsBlood, DecoDragonsBlood2, DecoEyeOfNewt, DecoFlower, DecoFlower2, DecoFullJar, DecoFullJars3, DecoFullJars4, DecoGarlic, DecoGarlic2, DecoGarlicBulb, DecoGarlicBulb2, DecoGinseng, DecoGinseng2, DecoGinsengRoot, DecoGinsengRoot2, DecoGoldIngot, DecoGoldIngot2, DecoGoldIngots, DecoGoldIngots2, DecoGoldIngots3, DecoGoldIngots4, DecoHay, DecoHay2, DecoHorseDung, DecoIronIngot, DecoIronIngot2, DecoIronIngots, DecoIronIngots2, DecoIronIngots3, DecoIronIngots4, DecoIronIngots5, DecoIronIngots6, DecoMagicalCrystal, DecoMandrake, DecoMandrake2, DecoMandrake3, DecoMandrakeRoot, DecoMandrakeRoot2, DecoNightshade, DecoNightshade2, DecoNightshade3, DecoObsidian, DecoPumice, DecorativeAxeNorth, DecorativeAxeWest, DecorativeBowNorth, DecorativeBowWest, DecorativeDAxeNorth, DecorativeDAxeWest, DecorativePlateKabuto, DecorativeShield, DecorativeShield1, DecorativeShield10, DecorativeShield11, DecorativeShield2, DecorativeShield3, DecorativeShield4, DecorativeShield5, DecorativeShield6, DecorativeShield7, DecorativeShield8, DecorativeShield9, DecorativeShieldDeed, DecorativeShieldSword1North, DecorativeShieldSword1West, DecorativeShieldSword2North, DecorativeShieldSword2West, DecorativeSwordNorth, DecorativeSwordWest, DecorativeTopiary, DecoRock, DecoRock2, DecoRocks, DecoRocks2, DecoRoseOfTrinsic, DecoRoseOfTrinsic2, DecoRoseOfTrinsic3, DecoSilverIngot, DecoSilverIngot2, DecoSilverIngots, DecoSilverIngots2, DecoSilverIngots3, DecoSilverIngots4, DecoSilverIngots5, DecoSpittoon, DecoTarot, DecoTarot2, DecoTarot3, DecoTarot4, DecoTarot5, DecoTarot6, DecoTarot7, DecoTray, DecoTray2, DecoWyrmsHeart, DeepSeaSerpent, DeerMask, DemonForks, DemonKnight, DemonSkull, DesertOstard, DetectiveBoots, Devourer, Diamond, DiamondMace, Dices, DimensionalTravel, DireWolf, DirtPatch, DirtyFrypan, DirtyKettle, DirtyPan, DirtyPot, DirtyRoundPot, DirtySmallPot, DirtySmallRoundPot, DisappearingRaiseSwitch, DiseasedBark, DiseasedCat, DisguiseKit, DisguisePersistance, DispelFieldScroll, DispelScroll, DisplayCache, DisturbingPortraitAddon, DisturbingPortraitComponent, DisturbingPortraitDeed, DiversityOfOurLand, DivineCountenance, DjinnisRing, Dog, Dolphin, DolphinLeftArtifact, DolphinRightArtifact, Doppleganger, DoubleAxe, DoubleBladedStaff, Doublet, Dough, DovetailSaw, Dragon, DragonArms, DragonBardingDeed, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, Drake, DrakovsJournal, Drawer, DrawKnife, DreadHornMane, DreadPirateHat, DreadSpider, Dressform, DriedHerbs, DriedOnions, Drums, Dryad, DryadAllureScroll, DullCopperElemental, DullCopperGranite, DullCopperIngot, DullCopperOre, Dummy, DummyAssassin, DummyFence, DummyHealer, DummyMace, DummyNox, DummyStun, DummySuper, DummySword, DummyTheif, DupresShield, DupreSuit, Dyes, DyeTub, DynamicTeleporter, Eagle, EarOfCorn, EarringBoxSet, EarringsOfProtection, EarthElemental, EarthquakeScroll, Easle, EasterEggs, EcruCitrine, EffectController, EffectItem, Efreet, EggBomb, EggCaseArtifact, Eggs, Eggshells, ElderGazer, ElegantArmoire, ElegantLowTable, EliteNinja, ElvenBedEastAddon, ElvenBedEastDeed, ElvenBedSouthAddon, ElvenBedSouthDeed, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenDresserEastAddon, ElvenDresserEastDeed, ElvenDresserSouthAddon, ElvenDresserSouthDeed, ElvenForgeAddon, ElvenForgeDeed, ElvenGlasses, ElvenLoveseatEastAddon, ElvenLoveseatEastDeed, ElvenLoveseatSouthAddon, ElvenLoveseatSouthDeed, ElvenMachete, ElvenPants, ElvenQuiver, ElvenReadingChair, ElvenShirt, ElvenSpellblade, ElvenSpinningwheelEastAddon, ElvenSpinningwheelEastDeed, ElvenSpinningwheelSouthAddon, ElvenSpinningwheelSouthDeed, ElvenStoveEastAddon, ElvenStoveEastDeed, ElvenStoveSouthAddon, ElvenStoveSouthDeed, ElvenWashBasinEastAddon, ElvenWashBasinEastDeed, ElvenWashBasinSouthAddon, ElvenWashBasinSouthDeed, ElwoodMcCarrin, EmbroideredOakLeafCloak, Emerald, Emino, EminosKatana, EminosKatanaChest, EmptyBentoBox, EmptyBookcase, EmptyCurvedFlaskE, EmptyCurvedFlaskW, EmptyJar, EmptyJars, EmptyJars2, EmptyJars3, EmptyJars4, EmptyPewterBowl, EmptyPewterTub, EmptyRibbedFlask, EmptyToolKit, EmptyToolKit2, EmptyVial, EmptyVialsWRack, EmptyWoodenBowl, EmptyWoodenTub, EnchantedPaints, EnchantedSextant, EnchantedSwitch, EnchantedTitanLegBone, EnergyBoltScroll, EnergyFieldScroll, EnergyVortex, EnergyVortexScroll, EnhancedBandage, EnragedBlackBear, EnragedEagle, EnragedHart, EnragedHind, EnragedRabbit, EnshroudedFigure, EnslavedGargoyle, EscortableMage, EssenceOfBattle, EssenceOfWindScroll, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, EtherealVoyageScroll, EtherealWarrior, EthicalHedonism, EthicsPersistance, Ettin, EvilHealer, EvilIdolSkull, EvilMage, EvilMageLord, EvilOmenScroll, EvilWanderingHealer, Executioner, ExecutionersAxe, ExecutionersCap, Exiler, ExodusMinion, ExodusOverseer, ExorcismScroll, ExplosionPotion, ExplosionScroll, EyeOfTheTravesty, FabledFishingNet, FactionBerserker, FactionBoardVendor, FactionBottleVendor, FactionDeathKnight, FactionDragoon, FactionExplosionTrap, FactionExplosionTrapDeed, FactionGasTrap, FactionGasTrapDeed, FactionHenchman, FactionHorseVendor, FactionKnight, FactionMercenary, FactionNecromancer, FactionOreVendor, FactionPaladin, FactionPersistance, FactionReagentVendor, FactionSawTrap, FactionSawTrapDeed, FactionSorceress, FactionSpikeTrap, FactionSpikeTrapDeed, FactionStone, FactionTrapRemovalKit, FactionWarHorse, FactionWizard, FancyArmoire, FancyDrawer, FancyDress, FancyElvenTableEastAddon, FancyElvenTableEastDeed, FancyElvenTableSouthAddon, FancyElvenTableSouthDeed, FancyShirt, FancyWindChimes, FancyWoodenChairCushion, FanDancer, FangOfRactus, FanNorthArtifact, FanWestArtifact, FarmableCabbage, FarmableCarrot, FarmableCotton, FarmableCrop, FarmableFlax, FarmableLettuce, FarmableOnion, FarmablePumpkin, FarmableTurnip, FarmableWheat, Farmer, Feather, FeatheredHat, FeeblemindScroll, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FerelTreefellow, Ferret, FerretFormTalisman, FertileDirt, FestiveCactus, FetidEssence, FeyLeggings, FieldStoneHouseDeed, FierceDragon, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, FireballScroll, FireballWand, FireBeetle, Firebomb, FirebombField, FireColumnAddon, FireColumnTrap, FireElemental, FireFieldItem, FireFieldScroll, FireGargoyle, FireHorn, FireRuby, FireSteed, FireworksWand, Fish, FisherGuildmaster, Fisherman, FishingPole, FishSteak, Fists, FlameSpurtTrap, FlamestrikeScroll, FlamingHead, FlamingHeadDeed, Flax, FleshGolem, FleshRenderer, FleshRipper, FletcherTools, FloppyHat, FlourMillEastAddon, FlourMillEastDeed, FlourMillSouthAddon, FlourMillSouthDeed, FlourSifter, FlowerGarland, FlowersArtifact, FluteOfRenewal, FoldedSteelGlasses, Food, FootStool, ForestOstard, Forge, ForgeComponent, ForgedMetal, Fork, ForkLeft, ForkRight, FormalShirt, FortuneTeller, FountainAddon, FountainDeed, FountainOfLife, FountainOfLifeDeed, FrenchBread, FrenziedOstard, FriedEggs, Froe, FropozJournal, Frostbringer, FrostOoze, FrostSpider, FrostTroll, FrostwoodBoard, FrostwoodLog, FruitBasket, FruitPie, Fukiya, FukiyaDarts, FullApron, FullBookcase, FullVialsWRack, FurBoots, FurCape, FurnitureDyeTub, FurSarong, Furtrader, Futon, GabrielPiete, Gaman, GamblingStone, Gargoyle, GargoyleDestroyer, GargoyleEnforcer, GargoylesPickaxe, Garlic, GasTrap, GateTravelScroll, GauntletsOfNobility, GauntletSpawner, Gazer, GazerLarva, Gears, GemmedCirclet, GenericBeard, GenericHair, GenericHouseDoor, GhostShipAnchor, Ghoul, GiantBlackWidow, GiantIceWorm, GiantRat, GiantSerpent, GiantSpider, GiantSpikeTrap, GiantToad, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, Gibberling, GiftBox, GiftBoxAngel, GiftBoxCube, GiftBoxCylinder, GiftBoxNeon, GiftBoxOctogon, GiftBoxRectangle, GiftOfLifeScroll, GiftOfRenewalScroll, GildedDress, GildedWoodenChest, GingerBreadCookie, GingerBreadHouseAddon, GingerBreadHouseDeed, Ginseng, GlacialStaff, GladiatorsCollar, Glass, Glassblower, GlassblowingBook, GlassBottle, GlassMug, Globe, GlovesOfThePugilist, GlovesOfTheSun, GMRobe, GnarledStaff, Goat, Goatee, Goblet, Gold, GoldBeadNecklace, GoldBracelet, GoldBricks, GoldEarrings, GoldenDecorativeRugAddon, GoldenDecorativeRugDeed, GoldenElemental, GoldenSkull, GoldGranite, GoldIngot, GoldNecklace, GoldOre, GoldRing, GoldWire, Golem, GolemController, GolemCrafter, GoreFiend, Gorilla, GozaMatEastAddon, GozaMatEastDeed, GozaMatSouthAddon, GozaMatSouthDeed, GrammarOfOrcish, GrandGrimoire, Granite, Grapes, GraveDust, GrayBrickFireplaceEastAddon, GrayBrickFireplaceEastDeed, GrayBrickFireplaceSouthAddon, GrayBrickFireplaceSouthDeed, GreaterAgilityPotion, GreaterConflagrationPotion, GreaterConfusionBlastPotion, GreaterCurePotion, GreaterDragon, GreaterExplosionPotion, GreaterHealPotion, GreaterHealScroll, GreaterHealWand, GreaterMongbat, GreaterPoisonPotion, GreaterStrengthPotion, GreatHart, GreenBeaker, GreenBottle, GreenCurvedFlask, GreenDriedFlowers, GreenGourd, GreenMarbleFloor, GreenNinjaQuestTeleporter, GreenScales, GreenStocking, GreenTea, GreenTeaBasket, GreenThorns, GreenThornsSHTeleporter, GreyFlagstones, GreyMarbleFloor, GreySlateFloor, GreyWolf, GrimmochDrummel, GrimmochJournal1, GrimmochJournal11, GrimmochJournal14, GrimmochJournal17, GrimmochJournal2, GrimmochJournal23, GrimmochJournal3, GrimmochJournal6, GrimmochJournal7, Grizelda, GrizzledBones, GrizzledMare, GrizzledMareStatuette, GrizzlyBear, GruesomeStandardArtifact, GuantletsOfAnger, Guardian, GuardianBarrier, GuideToGuilds, Guild, GuildDeed, GuildHouse, Guildstone, GuildstoneDeed, GuildTeleporter, Guillotine, GuillotineAddon, GuillotineComponent, GuillotineDeed, GwennosHarp, Gypsy, GypsyAnimalTrainer, GypsyBanker, GypsyMaiden, HagApprenticeCorpse, HagCauldron, HagStew, Hair, HairDye, HairRestylingDeed, HairStylist, Hakama, HakamaShita, Halberd, HalfApron, HalfEmptyJar, HalfEmptyJars, Ham, Hammer, HammerPick, HangingAxesAddon, HangingAxesDeed, HangingLantern, HangingSkeleton, HangingSkeletonDeed, HangingSwordsAddon, HangingSwordsDeed, HangoverCure, HanzosBow, Haochi, HaochisGuardsman, HaochisKatana, HaochisKatanaGenerator, HaochisTreasureChest, HarborMaster, HarmScroll, HarmWand, Harp, Harpy, Harrower, HarrowerGate, HarrowerTentacles, Hatchet, HatOfTheMagi, HaunterMirrorAddon, HaunterMirrorComponent, HaunterMirrorDeed, Head, HeadlessOne, Healer, HealerCamp, HealerGuildmaster, HealPotion, HealScroll, HealWand, HearthOfHomeFire, HearthOfHomeFireDeed, HeartOfTheLion, HeartwoodBoard, HeartwoodLog, HeaterShield, HeatingStand, HeavyCrossbow, HeavyPlateJingasa, HellCat, HellHound, HellSteed, Helmet, HelmOfInsight, HelmOfSwiftness, Henchman, Herbalist, HeritageToken, HiddenFigure, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, Hides, Hind, Hinge, HintItem, Hiryu, Hold, HolidayBell, HolidayTree, HolidayTreeDeed, HollowPrism, HolyFamiliar, HolyKnightsBreastplate, HolyMage, HolySteed, HolySword, HoneydewMelon, HonorableSwords, HonorCandle, HoodedShroudOfShadows, HordeMinion, HordeMinionFamiliar, HornedHides, HornedLeather, HornedTribalMask, HornOfRetreat, HornOfRetreatMoongate, HorrificBeastScroll, Horse, HorseShoes, Horus, Hourglass, HourglassAni, HouseDeed, HouseFoundation, HouseLadderAddon, HouseLadderDeed, HousePlacementTool, HouseRaffleDeed, HouseRaffleStone, HouseSign, HouseTeleporter, HuntersHeaddress, IceElemental, IceFiend, IceSerpent, IceSnake, IcicleLargeEast, IcicleLargeSouth, IcicleMedEast, IcicleMedSouth, IcicleSmallEast, IcicleSmallSouth, IcyPatch, IdolOfTheChampion, IDWand, IharaSoko, Ilhenir, ImmolatingWeaponScroll, Imp, Impaler, Impresario, IncognitoScroll, IndecipherableMap, IngotStone, InjuredWolf, InnKeeper, InquisitorsResolution, Inshave, InteriorDecorator, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem2, InternalItem2, InterredGrizzle, InvisibilityScroll, IolosLute, IronGate, IronGateShort, IronIngot, IronMaidenAddon, IronMaidenDeed, IronOre, IronWire, IronwoodCrown, IronWorker, Item, JackalsCollar, JackOLantern, JackRabbit, JadeStatueMaker, JarHoney, Jars2, Jars3, Jars4, JedahEntille, JesterHat, JesterHatofChuckles, JesterSuit, JeweledFiligree, Jeweler, JinBaori, JoinStone, JointingPlane, Jug, Juggernaut, JukaBow, JukaLord, JukaMage, JukaWarrior, Jwilson, KaburJournal, Kama, Kamishimo, Kappa, Kasa, KasaOfTheRajin, Katana, KazeKemono, Keep, KeepDeed, KeeperOfChivalry, Keg, Key, KeyRing, KeywordTeleporter, KhaldunPitTeleporter, KhaldunRevenant, KhaldunSummoner, KhaldunZealot, Kilt, Kindling, Kirin, Knife, KnifeLeft, KnifeRight, Kraken, KrisnaHair, KronusScroll, KronusScrollBox, Kryss, LadyOfTheSnow, LadyPortrait1, LadyPortrait2, Lajatang, LambLeg, LampPost1, LampPost2, LampPost3, LampPostArtifact, LampRoomBox, LampRoomTeleporter, Lance, Lantern, LanternOfSouls, LapHarp, LardOfParoxysmus, LargeBagBall, LargeBattleAxe, LargeBedEastAddon, LargeBedEastDeed, LargeBedSouthAddon, LargeBedSouthDeed, LargeBoat, LargeBoatDeed, LargeBOD, LargeCrate, LargeDockedBoat, LargeDockedDragonBoat, LargeDragonBoat, LargeDragonBoatDeed, LargeEmptyFlask, LargeEmptyPot, LargeFishingNetAddon, LargeFishingNetComponent, LargeFishingNetDeed, LargeFlask, LargeForgeEast, LargeForgeEastAddon, LargeForgeEastDeed, LargeForgeSouthAddon, LargeForgeSouthDeed, LargeForgeWest, LargeMarbleDeed, LargeMarbleHouse, LargePainting, LargePatioDeed, LargePatioHouse, LargeSmithBOD, LargeStoneTableEastAddon, LargeStoneTableEastDeed, LargeStoneTableSouthAddon, LargeStoneTableSouthDeed, LargeTable, LargeTailorBOD, LargeVase, LargeVioletFlask, LargeYellowFlask, LavaLizard, LavaSerpent, LavaSnake, LavaTile, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, Leather, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherDyeTub, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LeatherTunicArtifact, LeatherWorker, LeftArm, LeftLeg, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, Lemon, Lemons, LesserCurePotion, LesserExplosionPotion, LesserHealPotion, LesserHiryu, LesserPigmentsOfTokuno, LesserPoisonPotion, Lettuce, LeurociansMempoOfFortune, LeverPuzzleController, LeverPuzzleLever, LeverPuzzleStatue, Leviathan, LibraryBookcase, Lich, LichFormScroll, LichLord, LieutenantOfTheBritannianRoyalGuard, LifeOfATravellingMinstrel, LightFlowerTapestryEastAddon, LightFlowerTapestryEastDeed, LightFlowerTapestrySouthAddon, LightFlowerTapestrySouthDeed, LightningScroll, LightningWand, LightOfTheWinterSolstice, LightOfWayGlasses, LightPlateJingasa, LightSource, LightWoodDoor, LightWoodGate, LightYarn, LightYarnUnraveled, Lime, Limes, Lizardman, LizardmenCamp, Llama, LocalizedAddonComponent, LocalizedContainerComponent, LocalizedSign, LocalizedStatic, LocalMap, LockableBarrel, LockableContainer, Lockpick, Lockpicks, Log, LogCabin, LogCabinDeed, LongBeard, LongFlask, LongHair, LongPants, Longsword, LoomEastAddon, LoomEastDeed, LoomSouthAddon, LoomSouthDeed, LordBlackthorneSuit, LordBritishSuit, LordOaks, LOSBlocker, LtBlueCurvedFlask, LuckyNecklace, LuminescentFungi, LuminousRuneBlade, LunaLance, Lute, LyricalGlasses, LysanderGathenwale, LysanderNotebook1, LysanderNotebook11, LysanderNotebook2, LysanderNotebook3, LysanderNotebook7, LysanderNotebook8, Maabus, MaabusCoffin, MaabusCoffinComponent, Mace, MaceShieldGlasses, Mage, MageCamp, MageGuildmaster, MagicalShortbow, MagicArrowScroll, MagicArrowWand, MagicFlute, MagicLockScroll, MagicReflectScroll, MagicTrapScroll, MagicUnTrapScroll, MagicWand, MagicWizardsHat, MahjongGame, MajorTradeAssociation, MaleElvenRobe, MaleKimono, MalletAndChisel, ManaDrainScroll, ManaDrainWand, ManaVampireScroll, MandrakeRoot, ManPortrait1, ManPortrait2, MansionGuard, ManStatuetteEastArtifact, ManStatuetteSouthArtifact, MapItem, MapleArmoire, Mapmaker, MapmakersPen, MarbleFloor, MarblePavers, MarbleStatueMaker, MarbleWorkshopDeed, Mardoth, MaritimeGlasses, MarkContainer, MarkScroll, MasonryBook, MassCurseScroll, MassDispelScroll, Maul, MeatPie, MediumBoat, MediumBoatDeed, MediumCrate, MediumDockedBoat, MediumDockedDragonBoat, MediumDragonBoat, MediumDragonBoatDeed, MediumFlask, MediumLongBeard, MediumShortBeard, MediumStoneTableEastAddon, MediumStoneTableEastDeed, MediumStoneTableSouthAddon, MediumStoneTableSouthDeed, MediumStretchedHideEastAddon, MediumStretchedHideEastDeed, MediumStretchedHideSouthAddon, MediumStretchedHideSouthDeed, MediumWoodDoor, MeerCaptain, MeerEternal, MeerMage, MeerWarrior, MelisandesCorrodedHatchet, MeltedWax, Mephitis, Meraktus, Merchant, MerchantGuildmaster, MessageInABottle, Messenger, MetalBox, MetalChest, MetalDoor, MetalDoor2, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalHouseDoor, MetalKiteShield, MetalPigmentsOfTokuno, MetalShield, MetalTreasureChest, MeteorSwarmScroll, MidnightBracers, MilitiaCanoneer, MilitiaFighter, MilitiaFighterCorpse, Miller, MinaxWarHorse, MindBlastScroll, MindRotScroll, Miner, MinerGuildmaster, MiniHouseAddon, MiniHouseDeed, MiningCart, MiningCartDeed, Minotaur, MinotaurCaptain, MinotaurHedge, MinotaurScout, MinotaurStatue, MinotaurStatueDeed, Minter, MisoSoup, MistletoeAddon, MistletoeDeed, MLDryad, Mobile, Mohawk, Moloch, Mongbat, Monk, MonkRobe, MonsterStatuette, MoonfireBrew, Moongate, Moonstone, MoonstoneGate, MorgBergen, MorphItem, MortarPestle, MouldingPlane, MoundOfMaggots, MountainGoat, MountedPixieBlueAddon, MountedPixieBlueComponent, MountedPixieBlueDeed, MountedPixieGreenAddon, MountedPixieGreenComponent, MountedPixieGreenDeed, MountedPixieLimeAddon, MountedPixieLimeComponent, MountedPixieLimeDeed, MountedPixieOrangeAddon, MountedPixieOrangeComponent, MountedPixieOrangeDeed, MountedPixieWhiteAddon, MountedPixieWhiteComponent, MountedPixieWhiteDeed, MountItem, MovingCrate, Muculent, Muffins, Mummy, MushroomTrap, Mustache, MyStory, Nails, NameChangeDeed, Naturalist, NatureFury, NatureFuryScroll, Necklace, NecromancerSpellbook, NecromanticGlasses, Neira, NewPlayerTicket, Nightmare, Nightshade, NightSightPotion, NightSightScroll, NightsKiss, Nightstand, Ninja, NinjaTabi, Noble, NoDachi, NorseHelm, NoteForZoel, NoxCrystal, NoxRangersHeavyCrossbow, Nunchaku, OakBoard, OakLog, Obelisk, Obi, OblivionsNeedle, Obsidian, Ogre, OgreLord, OilCloth, Oni, Onion, OpenCoconut, OphidianArchmage, OphidianKnight, OphidianMage, OphidianMatriarch, OphidianWarrior, OrangePetals, Orc, OrcBomber, OrcBrute, OrcCamp, OrcCaptain, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishLord, OrcishMage, OrcishVisage, OrderGuard, OrderShield, OrigamiButterfly, OrigamiFish, OrigamiFrog, OrigamiPaper, OrigamiShape, OrigamiSongbird, OrigamiSwan, Ornament, OrnamentOfTheMagician, OrnateAxe, OrnateCrownOfTheHarrower, OrnateElvenChair, OrnateElvenTableEastAddon, OrnateElvenTableEastDeed, OrnateElvenTableSouthAddon, OrnateElvenTableSouthDeed, OrnateWoodenChest, OssianGrimoire, OverseerSunderedBlade, Pacify, PackHorse, PackingBox, PackLlama, PadsOfTheCuSidhe, PageboyHair, PainSpikeScroll, PaintedImage, Painting1NorthArtifact, Painting1WestArtifact, Painting2NorthArtifact, Painting2WestArtifact, Painting3Artifact, Painting4NorthArtifact, Painting4WestArtifact, Painting5NorthArtifact, Painting5WestArtifact, Painting6NorthArtifact, Painting6WestArtifact, PaintsAndBrush, Panther, PaperLantern, ParagonChest, ParalyzeFieldScroll, ParalyzeScroll, ParasiticPlant, Parrot, ParrotPerchAddon, ParrotPerchDeed, PatchworkSkeleton, Peach, PeachCobbler, PeachTreeAddon, PeachTreeDeed, PeachTrunkAddon, PeachTrunkDeed, Pear, Peasant, PeasantsBokuto, PeculiarFish, PenAndInk, PendantOfTheMagi, PentagramAddon, PentagramDeed, PerfectEmerald, PestilentBandage, PewterBowlOfCarrots, PewterBowlOfCorn, PewterBowlOfLettuce, PewterBowlOfPeas, PewterBowlOfPotatos, PewterMug, PhantomStaff, PhillipsWoodenSteed, Phoenix, Pickaxe, PickpocketDip, PickpocketDipEastAddon, PickpocketDipEastDeed, PickpocketDipSouthAddon, PickpocketDipSouthDeed, PicnicBasket, PieceBlackBishop, PieceBlackChecker, PieceBlackKing, PieceBlackKnight, PieceBlackPawn, PieceBlackQueen, PieceBlackRook, PieceWhiteBishop, PieceWhiteChecker, PieceWhiteKing, PieceWhiteKnight, PieceWhitePawn, PieceWhiteQueen, PieceWhiteRook, Pier, Pig, PigIron, PigmentsOfTokuno, Pike, PileOfGlacialSnow, PilferedDancerFans, PinkFancyRugAddon, PinkFancyRugDeed, Pitcher, Pitchfork, Pixie, PixieSwatter, PlagueBeast, PlagueBeastBackpack, PlagueBeastBackupOrgan, PlagueBeastBlood, PlagueBeastComponent, PlagueBeastGland, PlagueBeastHeart, PlagueBeastInnard, PlagueBeastLord, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastMutationCore, PlagueBeastOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan, PlagueBeastVein, PlagueSpawn, PlainDress, PlainLowTable, PlainWoodenChest, Plank, PlantBowl, PlantItem, Plate, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PlayerBarkeeper, PlayerBBEast, PlayerBBSouth, PlayerMobile, PlayerVendor, PlayerVendorPlaceholder, PlayingCards, PlayingCards2, PoisonedGlasses, PoisonElemental, PoisonFieldScroll, PoisonPotion, PoisonScroll, PoisonStrikeScroll, PolarBear, PolarBearMask, PolarBearRugEastAddon, PolarBearRugEastDeed, PolarBearRugSouthAddon, PolarBearRugSouthDeed, PolymorphScroll, PonyTail, PoolOfAcid, PortcullisEW, PortcullisNS, PotionKeg, PottedCactus, PottedCactus1, PottedCactus2, PottedCactus3, PottedCactus4, PottedCactus5, PottedCactusDeed, PottedPlant, PottedPlant1, PottedPlant2, PottedTree, PottedTree1, Pouch, PowderOfTemperament, PowderOfTranslocation, PowerCrystal, PowerGenerator, PowerScroll, PredatorHellCat, PresetMap, PreviewHouse, PricedHealer, PristineDreadHorn, PrizedFish, PromotionalToken, ProspectorsTool, ProtectionScroll, Provisioner, PublicMoongate, Pumpkin, PumpkinPie, Putrefication, PuzzleChest, PyramidAddon, Quagmire, QuarterStaff, Quell, QuestDaemonBlood, QuestDaemonBone, QuestFertileDirt, QuestItem, QuestOfVirtues, Quiche, QuiverOfBlight, QuiverOfElements, QuiverOfFire, QuiverOfIce, QuiverOfInfinity, QuiverOfLightning, QuiverOfRage, Rabbit, RadiantScimitar, RaedsGlory, RagingGrizzlyBear, RaiJu, RaisableItem, RaiseSwitch, Rancher, RandomTalisman, Ranger, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerGuildmaster, RangerLegs, RankingsOfTrades, Rat, RatCamp, Ratman, RatmanArcher, RatmanMage, RattanDoor, Ravager, RavenHelm, RawBird, RawChickenLeg, RawFishSteak, RawLambLeg, RawRibs, ReactiveArmorScroll, RealEstateBroker, Reaper, ReaperFormScroll, RecallRune, RecallScroll, ReceedingHair, ReceiverCrystal, RecipeScroll, RedAmbitiousSolenQueen, RedArmoire, RedBeaker, RedBook, RedBottle, RedCurvedFlask, RedHangingLantern, RedLeaves, RedMisoSoup, RedPlainRugAddon, RedPlainRugDeed, RedPoinsettia, RedRibbedFlask, RedScales, RedSolenInfiltratorQueen, RedSolenInfiltratorWarrior, RedSolenMatriarch, RedSolenQueen, RedSolenWarrior, RedSolenWorker, RedSoulstone, RedStocking, RedVelvetGiftBox, RefreshPotion, RegardingLlamas, RegStone, RejuvinationAddonComponent, RejuvinationAnkhNorth, RejuvinationAnkhWest, Relnia, RentedVendor, RepairDeed, RepeatingCrossbow, Reptalon, ReptalonFormTalisman, ResGate, ResilientBracer, RestlessSoul, ResurrectionScroll, RevealScroll, Revenant, RevenantLion, RewardBlackDyeTub, RewardBrazier, RewardBrazierDeed, RewardCake, RewardCloak, RewardDress, RewardPottedCactus, RewardRobe, RibCage, Ribs, RidableLlama, RideablePolarBear, Ridgeback, RightArm, RighteousAnger, RightLeg, Rikktor, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, RingOfTheElements, RingOfTheVile, RoastPig, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RockArtifact, RollingPin, Ronin, Rope, RoseInAVase, RoseOfTrinsic, RoseOfTrinsicPetal, RottingCorpse, RoundPaperLantern, RoyalCirclet, RoyalGuardSurvivalKnife, Ruby, RuinedArmoire, RuinedBookcase, RuinedBooks, RuinedChair, RuinedClock, RuinedDrawers, RuinedFallenChairA, RuinedFallenChairB, RuinedPainting, RuinedPaintingArtifact, RuneBeetle, RuneBeetleCarapace, RuneBlade, Runebook, RunebookDyeTub, RuneCarvingKnife, RunedPrism, RunedSwitch, RunicDovetailSaw, RunicHammer, RunicSewingKit, SackFlour, SacrificialAltarAddon, SacrificialAltarDeed, SaddleArtifact, Sai, SakeArtifact, SalvageBag, SamaritanRobe, Samurai, SamuraiHelm, SamuraiTabi, Sand, Sandals, SandFlagstones, SandMiningBook, SandstoneFireplaceEastAddon, SandstoneFireplaceEastDeed, SandstoneFireplaceSouthAddon, SandstoneFireplaceSouthDeed, SandstoneFloorN, SandstoneFloorW, SandstoneFountainAddon, SandStonePatio, SandstonePatioDeed, SandVortex, Sapphire, Satyr, Sausage, SausagePizza, Savage, SavageMask, SavageRider, SavageRidgeback, SavageShaman, Saw, SawTrap, ScaledSwampDragon, Scales, ScarecrowAddon, ScarecrowComponent, ScarecrowDeed, Scepter, Schmendrick, SchmendrickApprenticeCorpse, SchmendrickScrollOfPower, Scimitar, Scissors, Scorp, Scorpion, Scourge, Scribe, ScribeBag, ScribesPen, ScribeStone, ScrollOfAbraxus, ScrollofAlacrity, ScrollofTranscendence, Sculptor, Sculpture1Artifact, Sculpture2Artifact, Scythe, SeaChart, SeaHorse, SeahorseStatuette, SeaSerpent, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, SecureTradeContainer, Seed, SeekerOfAdventure, SeerRobe, Semidar, Serado, SerpentineDragon, SerpentPillar, SerpentPillarAddon, SerpentsFang, ServantOfSemidar, Sewerrat, SewingKit, Sextant, SextantParts, Shade, ShadowDancerLeggings, ShadowFiend, ShadowIronElemental, ShadowIronGranite, ShadowIronIngot, ShadowIronOre, ShadowKnight, ShadowWisp, ShadowWispFamiliar, ShadowWyrm, Shaft, ShaminoCrossbow, ShardPoller, ShardThrasher, SheafOfHay, Sheep, ShepherdsCrook, ShieldOfInvulnerability, ShipModelOfTheHMSCape, ShipwreckedItem, Shipwright, Shirt, Shoes, ShojiLantern, ShojiScreen, ShortBeard, ShortCabinet, ShortHair, ShortMusicStand, ShortPants, ShortSpear, Shovel, ShrineOfWisdomAddon, ShrineOfWisdomComponent, ShroudOfDeciet, SHTeleComponent, SHTeleporter, Shuriken, Sigil, Sign, Silvani, SilvanisFeywoodBow, Silver, SilverBeadNecklace, SilverBracelet, SilverEarrings, SilverNecklace, SilverRing, SilverSerpent, SilverSteed, SilverWire, SkeletalDragon, SkeletalKnight, SkeletalMage, SkeletalMount, Skeleton, Skillet, SkillTeleporter, SkinnedDeerArtifact, SkinnedGoatArtifact, SkinningKnife, Skirt, SkitteringHopper, SkullCandleArtifact, SkullCap, SkullPileAddon, SkullPole, SlabOfBacon, SledgeHammer, Slime, SLWarHorse, SmallBagBall, SmallBedEastAddon, SmallBedEastDeed, SmallBedSouthAddon, SmallBedSouthDeed, SmallBlueBottle, SmallBlueFlask, SmallBoat, SmallBoatDeed, SmallBOD, SmallBrickHouseDeed, SmallBrownBottle, SmallCrate, SmallDockedBoat, SmallDockedDragonBoat, SmallDragonBoat, SmallDragonBoatDeed, SmallEmptyFlask, SmallEmptyPot, SmallFishingNetAddon, SmallFishingNetComponent, SmallFishingNetDeed, SmallFlask, SmallForgeAddon, SmallForgeDeed, SmallGreenBottle, SmallGreenBottle2, SmallOldHouse, SmallPlateJingasa, SmallPumpkin, SmallRedFlask, SmallShop, SmallSmithBOD, SmallStretchedHideEastAddon, SmallStretchedHideEastDeed, SmallStretchedHideSouthAddon, SmallStretchedHideSouthDeed, SmallTailorBOD, SmallTower, SmallTowerDeed, SmallTowerSculpture, SmallUrn, SmallVioletBottle, SmallWatermelon, SmallYellowFlask, SmithBag, SmithHammer, SmithStone, SmokeBomb, SmoothingPlane, Snake, SnowElemental, SnowLeopard, Snowman, SnowPile, SnowPileDeco, SnowyTree, SolenAntHole, SolenAntHoleComponent, SongOfSamlethe, SongWovenMantle, SOS, SoulSeeker, SoulStone, SoulstoneFragment, SoulstoneFragmentToken, Spam, SpawnedOrcishLord, Spawner, SpawnPersistence, Spear, SpecialBeardDye, SpecialDyeTub, SpecialFishingNet, SpecialHairDye, SpecialScroll, SpectralArmour, Spectre, Spellbook, SpellScroll, SpellweavingBook, SpellWovenBritches, SpidersSilk, SpikeTrap, SpinedHides, SpinedLeather, SpinningHourglass, SpinningwheelEastAddon, SpinningwheelEastDeed, SpinningwheelSouthAddon, SpinningwheelSouthDeed, SpiritOfTheTotem, SplitCoconut, SpoolOfThread, Spoon, SpoonLeft, SpoonRight, Springs, Spyglass, SquareGozaMatEastAddon, SquareGozaMatEastDeed, SquareGozaMatSouthAddon, SquareGozaMatSouthDeed, Squash, Squirrel, SquirrelFormTalisman, SquirrelStatueEastAddon, SquirrelStatueEastDeed, SquirrelStatueSouthAddon, SquirrelStatueSouthDeed, StaffOfPower, StaffOfTheMagi, StainedOoze, StandardPlateKabuto, StandingBrokenChairAddon, StandingBrokenChairComponent, StandingBrokenChairDeed, StarRoomGate, StarSapphire, StatCapScroll, Static, StatueEast, StatueEast2, StatueNorth, StatuePegasus, StatuePegasus2, StatueSouth, StatueSouth2, StatueSouthEast, StatuetteDyeTub, StatueWest, StealableArtifactsSpawner, StitchersMittens, StoneAnkh, StoneAnkhComponent, StoneAnkhDeed, StoneChair, StoneCrafter, StoneFaceTrap, StoneFaceTrapNoDamage, StoneFireplaceEastAddon, StoneFireplaceEastDeed, StoneFireplaceSouthAddon, StoneFireplaceSouthDeed, StoneFountainAddon, StoneGargoyle, StoneHarpy, StoneMiningBook, StoneOvenEastAddon, StoneOvenEastDeed, StoneOvenSouthAddon, StoneOvenSouthDeed, StonePaversDark, StonePaversLight, StonePaversMedium, StonePlasterHouseDeed, StoneStatueAddon, StoneStatueDeed, StoneWorkshopDeed, Stool, Stormgrip, StrangleScroll, StrawHat, StrengthPotion, StrengthScroll, StretchedHideArtifact, StrongBackpack, StrongBox, StrongBoxPuzzle, StrongholdMonolith, StrongMongbat, StrongWoodDoor, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLeggingsArtifact, StuddedLegs, StuddedMempo, StuddedSuneate, StuddedTunicArtifact, SturdyPickaxe, SturdyShovel, Subdue, Succubus, SuitOfGoldArmorAddon, SuitOfGoldArmorComponent, SuitOfGoldArmorDeed, SuitOfSilverArmorAddon, SuitOfSilverArmorComponent, SuitOfSilverArmorDeed, SulfurousAsh, SummonAirElementalScroll, SummonCreatureScroll, SummonDaemonScroll, SummonEarthElementalScroll, SummonedAirElemental, SummonedAntLion, SummonedArcticOgreLord, SummonedBakeKitsune, SummonedBogling, SummonedBullFrog, SummonedChicken, SummonedCow, SummonedDaemon, SummonedDoppleganger, SummonedEarthElemental, SummonedFireElemental, SummonedFrostSpider, SummonedGreatHart, SummonedLavaSerpent, SummonedOrcBrute, SummonedPaladin, SummonedPaladinMoongate, SummonedPanther, SummonedSheep, SummonedSkeletalKnight, SummonedVorpalBunny, SummonedWailingBanshee, SummonedWaterElemental, SummonFamiliarScroll, SummonFeyScroll, SummonFiendScroll, SummonFireElementalScroll, SummoningAltar, SummonWaterElementalScroll, Surcoat, SushiPlatter, SushiRolls, SwampDragon, SwampTentacle, SwampTile, SwarmOfFlies, SweetDough, SwitchItem, SwordDisplay1NorthArtifact, SwordDisplay1WestArtifact, SwordDisplay2NorthArtifact, SwordDisplay2WestArtifact, SwordDisplay3EastArtifact, SwordDisplay3SouthArtifact, SwordDisplay4NorthArtifact, SwordDisplay4WestArtifact, SwordDisplay5NorthArtifact, SwordDisplay5WestArtifact, SwordOfTheStampede, SwordsOfProsperity, TableWithBlueClothAddon, TableWithBlueClothDeed, TableWithOrangeClothAddon, TableWithOrangeClothDeed, TableWithPurpleClothAddon, TableWithPurpleClothDeed, TableWithRedClothAddon, TableWithRedClothDeed, Tailor, TailorBag, TailorGuildmaster, TailorStone, Taint, TaintedWool, TaleOfThreeTribes, TalesOfVesperVol1, TalkingToWisps, TallCabinet, TallElvenBedEastAddon, TallElvenBedEastDeed, TallElvenBedSouthAddon, TallElvenBedSouthDeed, TallMusicStand, TallStrawHat, TalonBite, Tambourine, TambourineTassel, TamingDragons, TanBook, Tanner, Tapestry1N, Tapestry2N, Tapestry2W, Tapestry3N, Tapestry3W, Tapestry4N, Tapestry4W, Tapestry5N, Tapestry5W, Tapestry6N, Tapestry6W, TapestryOfSosaria, TarotCardsArtifact, TatteredAncientMummyWrapping, TattsukeHakama, TavaraSewel, TavarasJournal1, TavarasJournal11, TavarasJournal14, TavarasJournal16, TavarasJournal16b, TavarasJournal17, TavarasJournal19, TavarasJournal2, TavarasJournal3, TavarasJournal6, TavarasJournal7, TavarasJournal8, TavarasJournal9, TavernKeeper, TaxidermyKit, TBWarHorse, TeapotNorthArtifact, TeapotWestArtifact, Tekagi, TelekinisisScroll, Teleporter, TeleportScroll, Telescope, TerathanAvenger, TerathanDrone, TerathanMatriarch, TerathanWarrior, Tessen, Tetsubo, ThatchedRoofCottageDeed, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheFight, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThickGrayStoneWall, Thief, ThiefGuildmaster, ThighBoots, ThinBrickWall, ThinLongsword, ThinStoneWall, Throne, ThrowingDagger, ThunderstormScroll, TillerMan, TimberWolf, Tinker, TinkerGuildmaster, TinkersTools, TinkerTools, TinyRedBottle, TinyYellowBottle, Titan, TitansHammer, TomasONeerlan, TomeOfEnlightenment, TomeOfLostKnowledge, Tongs, ToolKit, Torch, TormentedChains, TormentedMinotaur, Torso, TotalRefreshPotion, TotemOfVoid, Tourmaline, Tower, TowerDeed, TowerLanternArtifact, TownCrier, TownMonolith, TownStone, ToxicElemental, TradeGlasses, TrainingDummy, TrainingDummyEastAddon, TrainingDummyEastDeed, TrainingDummySouthAddon, TrainingDummySouthDeed, TransferItem, TransferItem, TransientItem, TranslatedGargoyleJournal, TrapableContainer, TrashBarrel, TrashChest, TreasureChestDirt, TreasureMap, TreasureMapChest, TreasuresOfTokunoPersistance, TreasureTrinketGlasses, TreatiseOnAlchemy, Treefellow, TreeStump, TreeStumpDeed, TreeTrunk, TribalBerry, TribalMask, TribalPaint, TribalSpear, TricorneHat, TripleFanNorthArtifact, TripleFanWestArtifact, Troglodyte, Troll, TrophyAddon, TrophyDeed, TropicalBird, TrulyRareFish, TsukiWolf, Tub, Tunic, TunicOfFire, Turnip, Turquoise, Twaulo, TwoHandedAxe, TwoPigTails, TwoStoryHouse, TwoStoryStonePlasterHouseDeed, TwoStoryVilla, TwoStoryWoodPlasterHouseDeed, UnbakedApplePie, UnbakedFruitPie, UnbakedMeatPie, UnbakedPeachCobbler, UnbakedPumpkinPie, UnbakedQuiche, UncookedCheesePizza, UncookedSausagePizza, UncutCloth, UnfinishedBarrel, UnholyBone, UnholyFamiliar, UnholySteed, Unicorn, UnlockScroll, UnmadeBedAddon, UnmadeBedDeed, UnsettlingPortraitAddon, UnsettlingPortraitComponent, UnsettlingPortraitDeed, Urn1Artifact, Urn2Artifact, Uzeraan, UzeraanTurmoilHorn, UzeraanTurmoilTeleporter, Vagabond, ValentinesCard, ValentinesCardEast, ValentinesCardSouth, ValoriteElemental, ValoriteGranite, ValoriteIngot, ValoriteOre, VampireBat, VampireBatFamiliar, VampiricEmbraceScroll, Vandyke, VanityAddon, VanityDeed, VarietyDealer, Vase, VaultOfSecretsBarrier, VendorBackpack, VendorRentalContract, VengefulSpiritScroll, VeriteElemental, VeriteGranite, VeriteIngot, VeriteOre, Veterinarian, Victoria, VikingSword, VillaDeed, Vines, VioletCourage, VioletRibbedFlask, VirtualMountItem, VirtualMountItem, VirtueBook, VoiceOfTheFallenKing, VorpalBunny, VultureHelm, WailingBanshee, Waiter, Wakizashi, WallBanner, WallBannerComponent, WallBannerDeed, WallBlood, WallOfStoneScroll, WallSconce, WallTorch, WallTorchAddon, WallTorchComponent, WallTorchDeed, Walrus, Wanderer, WandererOfTheVoid, WanderingHealer, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WarningItem, WarriorGuard, WarriorGuildmaster, WarriorStatueEastAddon, WarriorStatueEastDeed, WarriorStatueSouthAddon, WarriorStatueSouthDeed, Wasabi, WasabiClumps, WaterBarrel, WaterElemental, Watermelon, WaterTile, WaterTroughEastAddon, WaterTroughEastDeed, WaterTroughSouthAddon, WaterTroughSouthDeed, WaterVatEast, WaterVatSouth, WayPoint, WeakenScroll, WeaknessWand, WeaponEngravingTool, Weaponsmith, WeatherMap, Weaver, Web, WheatSheaf, Whip, WhippingVine, WhiteDriedFlowers, WhiteHangingLantern, WhiteMisoSoup, WhiteNinjaQuestTeleporter, WhitePearl, WhitePoinsettia, WhiteScales, WhiteSnowflake, WhiteStoneWall, WhiteWolf, WhiteWyrm, WideBrimHat, WildfireBow, WildfireScroll, WildGirlOfTheForest, WildStaff, WindChimes, WindsEdge, Windsong, WindSpirit, WingedHelm, WinterGiftPackage2003, Wisp, WitherScroll, WizardsGlasses, WizardsHat, WomanPortrait1, WomanPortrait2, WondrousFish, WoodDebris, WoodenBench, WoodenBowl, WoodenBowlOfCarrots, WoodenBowlOfCorn, WoodenBowlOfLettuce, WoodenBowlOfPeas, WoodenBowlOfStew, WoodenBowlOfTomatoSoup, WoodenBox, WoodenChair, WoodenChairCushion, WoodenChest, WoodenCoffinAddon, WoodenCoffinComponent, WoodenCoffinDeed, WoodenFootLocker, WoodenKiteShield, WoodenShield, WoodenThrone, WoodenTreasureChest, WoodHouseDeed, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WoodPlasterHouseDeed, Wool, WordOfDeathScroll, WorldMap, Wraith, WraithFormScroll, WrathOfTheDryad, WreathAddon, WreathDeed, WritingTable, Wyvern, Yamandon, YellowBeaker, YellowGourd, YellowScales, YewBoard, YewLog, YewWoodTable, YomotsuElder, YomotsuPriest, YomotsuWarrior, YoungNinja, YoungRonin, Yumi, Zeefzorpul, ZenRock1Artifact, ZenRock2Artifact, ZenRock3Artifact, Zoel, Zombie, ZoogiFungus, ZyronicClaw

+ int SerialIdentity( get; )
+ int TypeReference( get; )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IShipwreckedItem.html b/Docs/types/IShipwreckedItem.html new file mode 100644 index 0000000..04315b2 --- /dev/null +++ b/Docs/types/IShipwreckedItem.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IShipwreckedItem + + +

Back to Server.Items

+

IShipwreckedItem

+

Derived Types: AncientFarmersKasa, Bandana, BaseHat, BaseTreasureChest, BearMask, BlackLotusHood, Bonnet, BurglarsBandana, Candelabra, Cap, CaptainJohnsHat, ChestOfHeirlooms, ClothNinjaHood, CrownOfTalKeesh, DaemonBloodChest, DeerMask, DivineCountenance, DreadPirateHat, EminosKatanaChest, FeatheredHat, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, FloppyHat, FlowerGarland, GildedWoodenChest, HaochisTreasureChest, HatOfTheMagi, HornedTribalMask, HuntersHeaddress, JesterHat, JesterHatofChuckles, Kasa, KasaOfTheRajin, KronusScrollBox, LargeCrate, LibraryBookcase, LockableBarrel, LockableContainer, MagicWizardsHat, MarkContainer, MediumCrate, MetalBox, MetalChest, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalTreasureChest, OrcishKinMask, OrnateWoodenChest, ParagonChest, PlainWoodenChest, PolarBearMask, PuzzleChest, SavageMask, ShipwreckedItem, SkullCap, SmallCrate, SpiritOfTheTotem, StrawHat, StrongBoxPuzzle, TallStrawHat, TreasureMapChest, TribalMask, TricorneHat, WideBrimHat, WizardsHat, WoodenBox, WoodenChest, WoodenFootLocker, WoodenTreasureChest

+ bool IsShipwreckedItem( get; set; )
+ + diff --git a/Docs/types/IShopSellInfo.html b/Docs/types/IShopSellInfo.html new file mode 100644 index 0000000..b19ed5b --- /dev/null +++ b/Docs/types/IShopSellInfo.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - IShopSellInfo + + +

Back to Server

+

IShopSellInfo

+

Derived Types: GenericSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo, InternalSellInfo

+ Type[] Types( get; )
+ virtual int GetBuyPriceFor( Item item )
+ virtual string GetNameFor( Item item )
+ virtual int GetSellPriceFor( Item item )
+ virtual bool IsResellable( Item item )
+ virtual bool IsSellable( Item item )
+ + diff --git a/Docs/types/ISlayer.html b/Docs/types/ISlayer.html new file mode 100644 index 0000000..49cdcf7 --- /dev/null +++ b/Docs/types/ISlayer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ISlayer + + +

Back to Server.Items

+

ISlayer

+

Derived Types: ArcticDeathDealer, AssassinSpike, Axe, AxeOfTheHeavens, BambooFlute, Bardiche, BaseAxe, BaseBashing, BaseInstrument, BaseKnife, BaseMeleeWeapon, BasePoleArm, BaseRanged, BaseSpear, BaseStaff, BaseSword, BaseWand, BaseWeapon, BattleAxe, BlackStaff, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BlazeOfDeath, BlightGrippedLongbow, Bokuto, BoneCrusher, BoneHarvester, Bonesmasher, BookOfBushido, BookOfChivalry, BookOfNinjitsu, Boomstick, Bow, BowOfTheJukaKing, BraveKnightOfTheBritannia, BreathOfTheDead, Broadsword, ButcherKnife, Calm, CaptainQuacklebushsCutlass, CavortingClub, ChylothStaff, Cleaver, Club, ClumsyWand, ColdBlood, ColdForgedBlade, CompositeBow, CrescentBlade, Crossbow, Cutlass, Dagger, Daisho, DarkenedSky, DemonForks, DiamondMace, DoubleAxe, DoubleBladedStaff, DragonNunchaku, Drums, ElvenCompositeLongbow, ElvenMachete, ElvenSpellblade, EnchantedTitanLegBone, ExecutionersAxe, Exiler, FangOfRactus, FeebleWand, FireballWand, FireworksWand, Fists, FleshRipper, FluteOfRenewal, Frostbringer, GargoylesPickaxe, GlacialStaff, GnarledStaff, GreaterHealWand, GwennosHarp, Halberd, HammerPick, HanzosBow, HarmWand, Harp, Hatchet, HealWand, HeavyCrossbow, HolySword, IDWand, IolosLute, JukaBow, Kama, Katana, Kryss, Lajatang, Lance, LapHarp, LargeBattleAxe, Leafblade, LegacyOfTheDreadLord, LightningWand, Longsword, LuminousRuneBlade, LunaLance, Lute, Mace, MagicalShortbow, MagicArrowWand, MagicWand, ManaDrainWand, Maul, MelisandesCorrodedHatchet, NecromancerSpellbook, NightsKiss, NoDachi, NoxRangersHeavyCrossbow, Nunchaku, OblivionsNeedle, OrnateAxe, OssianGrimoire, OverseerSunderedBlade, Pacify, PeasantsBokuto, PhantomStaff, Pickaxe, Pike, PilferedDancerFans, Pitchfork, PixieSwatter, ProspectorsTool, QuarterStaff, Quell, RadiantScimitar, RaedsGlory, RepeatingCrossbow, RighteousAnger, RoyalGuardSurvivalKnife, RuneBlade, RuneCarvingKnife, Sai, Scepter, Scimitar, Scythe, SerpentsFang, ShaminoCrossbow, ShardThrasher, ShepherdsCrook, ShortSpear, SilvanisFeywoodBow, SkinningKnife, SoulSeeker, Spear, Spellbook, SpellweavingBook, StaffOfPower, StaffOfTheMagi, SturdyPickaxe, Subdue, SwordOfTheStampede, SwordsOfProsperity, TalonBite, Tambourine, TambourineTassel, Tekagi, Tessen, Tetsubo, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheHorselord, TheNightReaper, TheTaskmaster, ThinLongsword, TitansHammer, TomeOfEnlightenment, TomeOfLostKnowledge, TribalSpear, TwoHandedAxe, VikingSword, Wakizashi, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WeaknessWand, WildfireBow, WildStaff, WindsEdge, Windsong, WrathOfTheDryad, Yumi, ZyronicClaw

+ SlayerName Slayer( get; set; )
+ SlayerName Slayer2( get; set; )
+ + diff --git a/Docs/types/ISpawnable.html b/Docs/types/ISpawnable.html new file mode 100644 index 0000000..b741517 --- /dev/null +++ b/Docs/types/ISpawnable.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ISpawnable + + +

Back to Server

+

ISpawnable : IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: AbbatoirAddon, AbbatoirDeed, AbysmalHorror, AcidProofRobe, AcidSlime, Actor, AddonComponent, AddonContainerComponent, AdminRobe, AdmiralsHeartyRum, Aegis, AegisOfGrace, Afro, AgapiteElemental, AgapiteGranite, AgapiteIngot, AgapiteOre, AgilityPotion, AgilityScroll, AirElemental, AlbertaGiacco, Alchemist, AlchemistsBauble, AlchemistTableEastAddon, AlchemistTableEastDeed, AlchemistTableSouthAddon, AlchemistTableSouthDeed, AlchemyBag, AlchemyStone, Alligator, Amber, Amethyst, AncientFarmersKasa, AncientLich, AncientSamuraiDo, AncientSmithyHammer, AncientUrn, AncientWyrm, ANecromancerShroud, AniLargeVioletFlask, AnimalTrainer, AnimateDeadScroll, AniRedRibbedFlask, AniSmallBlueFlask, AnkhNorth, AnkhOfSacrificeAddon, AnkhOfSacrificeComponent, AnkhOfSacrificeDeed, AnkhWest, AnsellaGryen, AnthropomorphistGlasses, AntLion, Anvil, AnvilComponent, AnvilEastAddon, AnvilEastDeed, AnvilSouthAddon, AnvilSouthDeed, Apple, ApplePie, AppleTreeAddon, AppleTreeDeed, AppleTrunkAddon, AppleTrunkDeed, ArcaneBookshelfEastAddon, ArcaneBookshelfEastDeed, ArcaneBookshelfSouthAddon, ArcaneBookshelfSouthDeed, ArcaneCircleAddon, ArcaneCircleDeed, ArcaneCircleScroll, ArcaneDaemon, ArcaneEmpowermentScroll, ArcaneFey, ArcaneFiend, ArcaneFocus, ArcaneGem, ArcaneShield, ArcanistStatueEastAddon, ArcanistStatueEastDeed, ArcanistStatueSouthAddon, ArcanistStatueSouthDeed, ArchCureScroll, ArcherGuard, ArcheryButte, ArcheryButteAddon, ArcheryButteDeed, Architect, ArchProtectionScroll, ArcticDeathDealer, ArcticOgreLord, Armoire, Armorer, ArmorOfFortune, ArmsAndWeaponsPrimer, ArmsOfTacticalExcellence, Arrow, ArtifactLargeVase, ArtifactVase, Artist, ArtsGlasses, AshBoard, AshLog, AssassinSpike, AttuneWeaponScroll, AwaseMisoSoup, AwesomeDisturbingPortraitAddon, AwesomeDisturbingPortraitComponent, AwesomeDisturbingPortraitDeed, Axe, AxeOfTheHeavens, Axle, AxleGears, Backgammon, Backpack, BackpackArtifact, Bacon, BadCard, Bag, BagOfAllReagents, BagOfingots, BagOfNecroReagents, BagOfReagents, BagOfSending, BakeKitsune, Baker, BallOfSummoning, BallotBox, BallotBoxAddon, BallotBoxDeed, Balron, BambooChair, BambooFlute, BambooScreen, Banana, Bananas, Bandage, Bandana, BankBox, BankCheck, Banker, BankerCamp, Banner, BannerDeed, BarbedHides, BarbedLeather, Bard, BardGuildmaster, Bardiche, BarkeepContract, Barkeeper, BarkFragment, Barracoon, BarredMetalDoor, BarredMetalDoor2, Barrel, BarrelHoops, BarrelLid, BarrelStaves, BarrelTap, Bascinet, BaseAddon, BaseAddonContainer, BaseAddonContainerDeed, BaseAddonDeed, BaseAgilityPotion, BaseAmbitiousSolenQueen, BaseArmor, BaseAxe, BaseBagBall, BaseBashing, BaseBeverage, BaseBoard, BaseBoat, BaseBoatDeed, BaseBook, BaseBracelet, BaseBulletinBoard, BaseCamp, BaseChampion, BaseCloak, BaseClothing, BaseClothMaterial, BaseConflagrationPotion, BaseConfusionBlastPotion, BaseContainer, BaseCreature, BaseCurePotion, BaseDecorationArtifact, BaseDecorationContainerArtifact, BaseDockedBoat, BaseDoor, BaseEarrings, BaseEnraged, BaseEquipableLight, BaseEscortable, BaseExplosionPotion, BaseFactionGuard, BaseFactionTrap, BaseFactionTrapDeed, BaseFactionVendor, BaseFamiliar, BaseFloor, BaseFormTalisman, BaseFruitTreeAddon, BaseGlovesOfMining, BaseGranite, BaseGuard, BaseGuildmaster, BaseHarvestTool, BaseHat, BaseHealer, BaseHealPotion, BaseHides, BaseHouse, BaseHouseDoor, BaseImprisonedMobile, BaseIngot, BaseInstrument, BaseJewel, BaseKnife, BaseLeather, BaseLight, BaseMagicFish, BaseMeleeWeapon, BaseMiddleTorso, BaseMonolith, BaseMount, BaseMulti, BaseNecklace, BaseOre, BaseOuterLegs, BaseOuterTorso, BasePants, BasePiece, BasePigmentsOfTokuno, BasePlayerBB, BasePoisonPotion, BasePoleArm, BasePotion, BaseQuester, BaseQuiver, BaseRanged, BaseReagent, BaseRefreshPotion, BaseRejuvinationAnkh, BaseRing, BaseRunicTool, BaseScales, BaseShield, BaseShieldGuard, BaseShirt, BaseShoes, BaseSign, BaseSolenMatriarch, BaseSpear, BaseStaff, BaseStrengthPotion, BaseSuit, BaseSword, BaseSystemController, BaseTalisman, BaseTalismanSummon, BaseTool, BaseTrap, BaseTreasureChest, BaseVendor, BaseWaist, BaseWall, BaseWand, BaseWarHorse, BaseWaterContainer, BaseWeapon, BaseWindChimes, Basket, Basket1Artifact, Basket2Artifact, Basket3NorthArtifact, Basket3WestArtifact, Basket4Artifact, Basket5NorthArtifact, Basket5WestArtifact, Basket6Artifact, BattleAxe, BatWing, Beads, Beard, BearMask, BedOfNailsAddon, BedOfNailsComponent, BedOfNailsDeed, Bedroll, Beekeeper, Beeswax, Beetle, BellOfTheDead, BentoBox, Betrayer, BeverageBottle, BigElvenChair, BigFish, Bird, BirdsOfBritannia, BlackAmbitiousSolenQueen, BlackBear, BlackDyeTub, Blackheart, BlackLotusHood, BlackPearl, BlackScales, Blacksmith, BlacksmithGuildmaster, BlackSolenInfiltratorQueen, BlackSolenInfiltratorWarrior, BlackSolenMatriarch, BlackSolenQueen, BlackSolenWarrior, BlackSolenWorker, BlackStaff, BlackthornWelcomeBook, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BladeSpirits, BladeSpiritsScroll, BlankMap, BlankScroll, BlazeDyeTub, BlazeOfDeath, BlessScroll, Blight, BlightGrippedLongbow, Blocker, Blood, BloodElemental, Bloodmoss, BloodOathScroll, BloodPentagram, BloodwoodBoard, BloodwoodLog, BloodwoodSpirit, BloodyPentagramAddon, BloodyPentagramComponent, BloodyPentagramDeed, BloodyWaterArtifact, Blowpipe, BlueBeaker, BlueBook, BlueCurvedFlask, BlueDecorativeRugAddon, BlueDecorativeRugDeed, BlueDiamond, BlueFancyRugAddon, BlueFancyRugDeed, BlueNinjaQuestTeleporter, BluePlainRugAddon, BluePlainRugDeed, BlueScales, BlueSlateFloorCenter, BlueSnowflake, BlueSoulstone, Boar, Board, BodySash, Bogle, Bogling, BogThing, BoilingCauldronAddon, BoilingCauldronDeed, Bokuto, Bola, BolaBall, BoldStranger, Bolt, BoltOfCloth, Bone, BoneArms, BoneChest, BoneCouchAddon, BoneCouchComponent, BoneCouchDeed, BoneCrusher, BoneDemon, BoneGloves, BoneHarvester, BoneHelm, BoneKnight, BoneLegs, BoneMagi, BonePile, Bonesmasher, BoneTableAddon, BoneTableDeed, BoneThroneAddon, BoneThroneComponent, BoneThroneDeed, Bonnet, BookOfBushido, BookOfChivalry, BookOfNinjitsu, BooksFaceDownArtifact, BooksNorthArtifact, BooksWestArtifact, Boomstick, Boots, Bottle, BottleArtifact, Bow, BowlArtifact, BowlFlour, BowlsHorizontalArtifact, BowlsVerticalArtifact, BowOfTheJukaKing, Bowyer, BraceletOfBinding, BraceletOfHealth, BrambleCoat, BraveKnightOfTheBritannia, Brazier, BrazierArtifact, BrazierTall, BreadLoaf, BreathOfTheDead, BrickHouseDeed, BricksFloor1, BricksFloor2, BrideGroom, Brigand, BrigandCamp, BrightlyColoredEggs, BrilliantAmber, BritannianFlora, BroadcastCrystal, Broadsword, BrocadeGozaMatEastAddon, BrocadeGozaMatEastDeed, BrocadeGozaMatSouthAddon, BrocadeGozaMatSouthDeed, BrocadeSquareGozaMatEastAddon, BrocadeSquareGozaMatEastDeed, BrocadeSquareGozaMatSouthAddon, BrocadeSquareGozaMatSouthDeed, BrokenArmoireAddon, BrokenArmoireComponent, BrokenArmoireDeed, BrokenBedAddon, BrokenBedDeed, BrokenBookcaseAddon, BrokenBookcaseComponent, BrokenBookcaseDeed, BrokenChair, BrokenChestOfDrawersAddon, BrokenChestOfDrawersComponent, BrokenChestOfDrawersDeed, BrokenCoveredChairAddon, BrokenCoveredChairComponent, BrokenCoveredChairDeed, BrokenFallenChairAddon, BrokenFallenChairComponent, BrokenFallenChairDeed, BrokenVanityAddon, BrokenVanityDeed, BronzeElemental, BronzeGranite, BronzeIngot, BronzeOre, BronzeShield, BronzeStatueMaker, BrownBear, BrownBearRugEastAddon, BrownBearRugEastDeed, BrownBearRugSouthAddon, BrownBearRugSouthDeed, BrownBook, Bucket, Buckler, BulkOrderBook, Bull, BulletinBoard, BulletinMessage, BullFrog, BunnyHole, BunsHair, BurglarsBandana, BurningOfTrinsic, BustEast, BustSouth, Butcher, ButcherKnife, Cabbage, Cake, CakeMix, CallToAnarchy, Calm, Campfire, Candelabra, CandelabraOfSouls, CandelabraStand, Candle, CandleLarge, CandleLong, CandleShort, CandleSkull, CandyCane, Cannon, CannonAddon, CannonAddonComponent, CannonComponent, CannonDeed, Cantaloupe, Cap, CaptainJohnsHat, CaptainQuacklebushsCutlass, CapturedEssence, CapturedHordeMinion, Cards, Cards2, Cards3, Cards4, Carpenter, Carrot, Castle, CastleDeed, Cat, Cauldron, CaveFloorCenter, CaveFloorEast, CaveFloorNorth, CaveFloorSouth, CaveFloorWest, CavortingClub, Centaur, CeramicMug, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChainLightningScroll, ChampionAltar, ChampionPlatform, ChampionSkull, ChampionSkullBrazier, ChampionSkullPlatform, ChampionSpawn, ChaosDaemon, ChaosDragoon, ChaosDragoonElite, ChaosGuard, ChaosShield, CharacterStatue, CharacterStatueDeed, CharacterStatueMaker, CharacterStatuePlinth, ChargerOfTheFallen, CheckerBoard, Checkers, Checkers2, CheesePizza, CheeseSlice, CheeseWedge, CheeseWheel, CherryArmoire, CherryBlossomTreeAddon, CherryBlossomTreeDeed, CherryBlossomTrunkAddon, CherryBlossomTrunkDeed, Chessboard, Chessmen, Chessmen2, Chessmen3, ChestOfHeirlooms, Chicken, ChickenLeg, ChildrenTalesVol2, ChiselsNorth, ChiselsWest, Chyloth, ChylothShroud, ChylothStaff, CinnamonFancyRugAddon, CinnamonFancyRugDeed, Circlet, Citrine, CityMap, Cleaver, Cloak, Clock, ClockFrame, ClockLeft, ClockParts, ClockRight, ClockworkAssembly, Clone, ClosedBarrel, CloseHelm, Cloth, ClothingBlessDeed, ClothNinjaHood, ClothNinjaJacket, Club, ClumsyScroll, ClumsyWand, Coal, Cobbler, CobblestonesFloor, Coconut, CocoonArtifact, ColdBlood, ColdForgedBlade, ColoredAnvil, CommodityDeed, CommodityDeedBox, CompositeBow, CoMWarHorse, ConfirmationMoongate, ConflagrationPotion, ConfusionBlastPotion, Container, ContestMiniHouse, ContestMiniHouseDeed, ContractOfEmployment, ControlPanel, Cook, CookableFood, CookedBird, CookieMix, Cookies, CopperElemental, CopperGranite, CopperIngot, CopperOre, CopperWire, Corpse, Corpser, CorpseSkinScroll, CorrosiveSlime, CorruptedSoul, Corruption, Cotton, Cougar, CounselorRobe, CoveredChair, Cow, Crane, CreateFoodScroll, CreatureBackpack, CreepyPortraitAddon, CreepyPortraitComponent, CreepyPortraitDeed, CrescentBlade, CrimsonCincture, Crossbow, CrossbowBolts, CrownOfTalKeesh, CrystalCaveBarrier, CrystalElemental, CunningScroll, CupsArtifact, CurePotion, CureScroll, Cursed, CursedSoul, CurseScroll, CurseWeaponScroll, CurtainsAddon, CurtainsComponent, CurtainsDeed, CurvedFlask, CuSidhe, CuSidheFormTalisman, CustomHairstylist, Cutlass, Cyclops, Daemon, DaemonArms, DaemonBlood, DaemonBloodChest, DaemonBone, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, Dagger, DaimyosHelm, Daisho, DamagedBooksArtifact, DarkenedSky, DarkFlowerTapestryEastAddon, DarkFlowerTapestryEastDeed, DarkFlowerTapestrySouthAddon, DarkFlowerTapestrySouthDeed, DarknightCreeper, DarkSandstoneFloorN, DarkSandstoneFloorW, DarkSapphire, DarkSource, DarkTidesHorn, DarkTidesTeleporter, DarkWisp, DarkWolfFamiliar, DarkWoodDoor, DarkWoodGate, DarkWoodHouseDoor, DarkWoodWall, DarkYarn, DartBoard, DartBoardEastAddon, DartBoardEastDeed, DartBoardSouthAddon, DartBoardSouthDeed, Dates, DawnsMusicBox, DawnsMusicGear, DeadlyImp, DeadlyPoisonPotion, DeadWood, DeathAdder, DeathRobe, DeathShroud, DeathwatchBeetle, DeathwatchBeetleHatchling, DecayedCorpse, DeceitBrazier, DeceitDungeonOfHorror, DecoArrowShafts, DecoBlackmoor, DecoBloodspawn, DecoBottlesOfLiquor, DecoBridle, DecoBridle2, DecoBrimstone, DecoCards5, DecoCrystalBall, DecoDeckOfTarot, DecoDeckOfTarot2, DecoDragonsBlood, DecoDragonsBlood2, DecoEyeOfNewt, DecoFlower, DecoFlower2, DecoFullJar, DecoFullJars3, DecoFullJars4, DecoGarlic, DecoGarlic2, DecoGarlicBulb, DecoGarlicBulb2, DecoGinseng, DecoGinseng2, DecoGinsengRoot, DecoGinsengRoot2, DecoGoldIngot, DecoGoldIngot2, DecoGoldIngots, DecoGoldIngots2, DecoGoldIngots3, DecoGoldIngots4, DecoHay, DecoHay2, DecoHorseDung, DecoIronIngot, DecoIronIngot2, DecoIronIngots, DecoIronIngots2, DecoIronIngots3, DecoIronIngots4, DecoIronIngots5, DecoIronIngots6, DecoMagicalCrystal, DecoMandrake, DecoMandrake2, DecoMandrake3, DecoMandrakeRoot, DecoMandrakeRoot2, DecoNightshade, DecoNightshade2, DecoNightshade3, DecoObsidian, DecoPumice, DecorativeAxeNorth, DecorativeAxeWest, DecorativeBowNorth, DecorativeBowWest, DecorativeDAxeNorth, DecorativeDAxeWest, DecorativePlateKabuto, DecorativeShield, DecorativeShield1, DecorativeShield10, DecorativeShield11, DecorativeShield2, DecorativeShield3, DecorativeShield4, DecorativeShield5, DecorativeShield6, DecorativeShield7, DecorativeShield8, DecorativeShield9, DecorativeShieldDeed, DecorativeShieldSword1North, DecorativeShieldSword1West, DecorativeShieldSword2North, DecorativeShieldSword2West, DecorativeSwordNorth, DecorativeSwordWest, DecorativeTopiary, DecoRock, DecoRock2, DecoRocks, DecoRocks2, DecoRoseOfTrinsic, DecoRoseOfTrinsic2, DecoRoseOfTrinsic3, DecoSilverIngot, DecoSilverIngot2, DecoSilverIngots, DecoSilverIngots2, DecoSilverIngots3, DecoSilverIngots4, DecoSilverIngots5, DecoSpittoon, DecoTarot, DecoTarot2, DecoTarot3, DecoTarot4, DecoTarot5, DecoTarot6, DecoTarot7, DecoTray, DecoTray2, DecoWyrmsHeart, DeepSeaSerpent, DeerMask, DemonForks, DemonKnight, DemonSkull, DesertOstard, DetectiveBoots, Devourer, Diamond, DiamondMace, Dices, DimensionalTravel, DireWolf, DirtPatch, DirtyFrypan, DirtyKettle, DirtyPan, DirtyPot, DirtyRoundPot, DirtySmallPot, DirtySmallRoundPot, DisappearingRaiseSwitch, DiseasedBark, DiseasedCat, DisguiseKit, DisguisePersistance, DispelFieldScroll, DispelScroll, DisplayCache, DisturbingPortraitAddon, DisturbingPortraitComponent, DisturbingPortraitDeed, DiversityOfOurLand, DivineCountenance, DjinnisRing, Dog, Dolphin, DolphinLeftArtifact, DolphinRightArtifact, Doppleganger, DoubleAxe, DoubleBladedStaff, Doublet, Dough, DovetailSaw, Dragon, DragonArms, DragonBardingDeed, DragonChest, DragonGloves, DragonHelm, DragonLegs, DragonNunchaku, Drake, DrakovsJournal, Drawer, DrawKnife, DreadHornMane, DreadPirateHat, DreadSpider, Dressform, DriedHerbs, DriedOnions, Drums, Dryad, DryadAllureScroll, DullCopperElemental, DullCopperGranite, DullCopperIngot, DullCopperOre, Dummy, DummyAssassin, DummyFence, DummyHealer, DummyMace, DummyNox, DummyStun, DummySuper, DummySword, DummyTheif, DupresShield, DupreSuit, Dyes, DyeTub, DynamicTeleporter, Eagle, EarOfCorn, EarringBoxSet, EarringsOfProtection, EarthElemental, EarthquakeScroll, Easle, EasterEggs, EcruCitrine, EffectController, EffectItem, Efreet, EggBomb, EggCaseArtifact, Eggs, Eggshells, ElderGazer, ElegantArmoire, ElegantLowTable, EliteNinja, ElvenBedEastAddon, ElvenBedEastDeed, ElvenBedSouthAddon, ElvenBedSouthDeed, ElvenBoots, ElvenCompositeLongbow, ElvenDarkShirt, ElvenDresserEastAddon, ElvenDresserEastDeed, ElvenDresserSouthAddon, ElvenDresserSouthDeed, ElvenForgeAddon, ElvenForgeDeed, ElvenGlasses, ElvenLoveseatEastAddon, ElvenLoveseatEastDeed, ElvenLoveseatSouthAddon, ElvenLoveseatSouthDeed, ElvenMachete, ElvenPants, ElvenQuiver, ElvenReadingChair, ElvenShirt, ElvenSpellblade, ElvenSpinningwheelEastAddon, ElvenSpinningwheelEastDeed, ElvenSpinningwheelSouthAddon, ElvenSpinningwheelSouthDeed, ElvenStoveEastAddon, ElvenStoveEastDeed, ElvenStoveSouthAddon, ElvenStoveSouthDeed, ElvenWashBasinEastAddon, ElvenWashBasinEastDeed, ElvenWashBasinSouthAddon, ElvenWashBasinSouthDeed, ElwoodMcCarrin, EmbroideredOakLeafCloak, Emerald, Emino, EminosKatana, EminosKatanaChest, EmptyBentoBox, EmptyBookcase, EmptyCurvedFlaskE, EmptyCurvedFlaskW, EmptyJar, EmptyJars, EmptyJars2, EmptyJars3, EmptyJars4, EmptyPewterBowl, EmptyPewterTub, EmptyRibbedFlask, EmptyToolKit, EmptyToolKit2, EmptyVial, EmptyVialsWRack, EmptyWoodenBowl, EmptyWoodenTub, EnchantedPaints, EnchantedSextant, EnchantedSwitch, EnchantedTitanLegBone, EnergyBoltScroll, EnergyFieldScroll, EnergyVortex, EnergyVortexScroll, EnhancedBandage, EnragedBlackBear, EnragedEagle, EnragedHart, EnragedHind, EnragedRabbit, EnshroudedFigure, EnslavedGargoyle, EscortableMage, EssenceOfBattle, EssenceOfWindScroll, EtherealBeetle, EtherealCuSidhe, EtherealHiryu, EtherealHorse, EtherealKirin, EtherealLlama, EtherealMount, EtherealOstard, EtherealReptalon, EtherealRidgeback, EtherealSwampDragon, EtherealUnicorn, EtherealVoyageScroll, EtherealWarrior, EthicalHedonism, EthicsPersistance, Ettin, EvilHealer, EvilIdolSkull, EvilMage, EvilMageLord, EvilOmenScroll, EvilWanderingHealer, Executioner, ExecutionersAxe, ExecutionersCap, Exiler, ExodusMinion, ExodusOverseer, ExorcismScroll, ExplosionPotion, ExplosionScroll, EyeOfTheTravesty, FabledFishingNet, FactionBerserker, FactionBoardVendor, FactionBottleVendor, FactionDeathKnight, FactionDragoon, FactionExplosionTrap, FactionExplosionTrapDeed, FactionGasTrap, FactionGasTrapDeed, FactionHenchman, FactionHorseVendor, FactionKnight, FactionMercenary, FactionNecromancer, FactionOreVendor, FactionPaladin, FactionPersistance, FactionReagentVendor, FactionSawTrap, FactionSawTrapDeed, FactionSorceress, FactionSpikeTrap, FactionSpikeTrapDeed, FactionStone, FactionTrapRemovalKit, FactionWarHorse, FactionWizard, FancyArmoire, FancyDrawer, FancyDress, FancyElvenTableEastAddon, FancyElvenTableEastDeed, FancyElvenTableSouthAddon, FancyElvenTableSouthDeed, FancyShirt, FancyWindChimes, FancyWoodenChairCushion, FanDancer, FangOfRactus, FanNorthArtifact, FanWestArtifact, FarmableCabbage, FarmableCarrot, FarmableCotton, FarmableCrop, FarmableFlax, FarmableLettuce, FarmableOnion, FarmablePumpkin, FarmableTurnip, FarmableWheat, Farmer, Feather, FeatheredHat, FeeblemindScroll, FeebleWand, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FerelTreefellow, Ferret, FerretFormTalisman, FertileDirt, FestiveCactus, FetidEssence, FeyLeggings, FieldStoneHouseDeed, FierceDragon, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, FireballScroll, FireballWand, FireBeetle, Firebomb, FirebombField, FireColumnAddon, FireColumnTrap, FireElemental, FireFieldItem, FireFieldScroll, FireGargoyle, FireHorn, FireRuby, FireSteed, FireworksWand, Fish, FisherGuildmaster, Fisherman, FishingPole, FishSteak, Fists, FlameSpurtTrap, FlamestrikeScroll, FlamingHead, FlamingHeadDeed, Flax, FleshGolem, FleshRenderer, FleshRipper, FletcherTools, FloppyHat, FlourMillEastAddon, FlourMillEastDeed, FlourMillSouthAddon, FlourMillSouthDeed, FlourSifter, FlowerGarland, FlowersArtifact, FluteOfRenewal, FoldedSteelGlasses, Food, FootStool, ForestOstard, Forge, ForgeComponent, ForgedMetal, Fork, ForkLeft, ForkRight, FormalShirt, FortuneTeller, FountainAddon, FountainDeed, FountainOfLife, FountainOfLifeDeed, FrenchBread, FrenziedOstard, FriedEggs, Froe, FropozJournal, Frostbringer, FrostOoze, FrostSpider, FrostTroll, FrostwoodBoard, FrostwoodLog, FruitBasket, FruitPie, Fukiya, FukiyaDarts, FullApron, FullBookcase, FullVialsWRack, FurBoots, FurCape, FurnitureDyeTub, FurSarong, Furtrader, Futon, GabrielPiete, Gaman, GamblingStone, Gargoyle, GargoyleDestroyer, GargoyleEnforcer, GargoylesPickaxe, Garlic, GasTrap, GateTravelScroll, GauntletsOfNobility, GauntletSpawner, Gazer, GazerLarva, Gears, GemmedCirclet, GenericBeard, GenericHair, GenericHouseDoor, GhostShipAnchor, Ghoul, GiantBlackWidow, GiantIceWorm, GiantRat, GiantSerpent, GiantSpider, GiantSpikeTrap, GiantToad, GiantWeb1, GiantWeb2, GiantWeb3, GiantWeb4, GiantWeb5, GiantWeb6, Gibberling, GiftBox, GiftBoxAngel, GiftBoxCube, GiftBoxCylinder, GiftBoxNeon, GiftBoxOctogon, GiftBoxRectangle, GiftOfLifeScroll, GiftOfRenewalScroll, GildedDress, GildedWoodenChest, GingerBreadCookie, GingerBreadHouseAddon, GingerBreadHouseDeed, Ginseng, GlacialStaff, GladiatorsCollar, Glass, Glassblower, GlassblowingBook, GlassBottle, GlassMug, Globe, GlovesOfThePugilist, GlovesOfTheSun, GMRobe, GnarledStaff, Goat, Goatee, Goblet, Gold, GoldBeadNecklace, GoldBracelet, GoldBricks, GoldEarrings, GoldenDecorativeRugAddon, GoldenDecorativeRugDeed, GoldenElemental, GoldenSkull, GoldGranite, GoldIngot, GoldNecklace, GoldOre, GoldRing, GoldWire, Golem, GolemController, GolemCrafter, GoreFiend, Gorilla, GozaMatEastAddon, GozaMatEastDeed, GozaMatSouthAddon, GozaMatSouthDeed, GrammarOfOrcish, GrandGrimoire, Granite, Grapes, GraveDust, GrayBrickFireplaceEastAddon, GrayBrickFireplaceEastDeed, GrayBrickFireplaceSouthAddon, GrayBrickFireplaceSouthDeed, GreaterAgilityPotion, GreaterConflagrationPotion, GreaterConfusionBlastPotion, GreaterCurePotion, GreaterDragon, GreaterExplosionPotion, GreaterHealPotion, GreaterHealScroll, GreaterHealWand, GreaterMongbat, GreaterPoisonPotion, GreaterStrengthPotion, GreatHart, GreenBeaker, GreenBottle, GreenCurvedFlask, GreenDriedFlowers, GreenGourd, GreenMarbleFloor, GreenNinjaQuestTeleporter, GreenScales, GreenStocking, GreenTea, GreenTeaBasket, GreenThorns, GreenThornsSHTeleporter, GreyFlagstones, GreyMarbleFloor, GreySlateFloor, GreyWolf, GrimmochDrummel, GrimmochJournal1, GrimmochJournal11, GrimmochJournal14, GrimmochJournal17, GrimmochJournal2, GrimmochJournal23, GrimmochJournal3, GrimmochJournal6, GrimmochJournal7, Grizelda, GrizzledBones, GrizzledMare, GrizzledMareStatuette, GrizzlyBear, GruesomeStandardArtifact, GuantletsOfAnger, Guardian, GuardianBarrier, GuideToGuilds, GuildDeed, GuildHouse, Guildstone, GuildstoneDeed, GuildTeleporter, Guillotine, GuillotineAddon, GuillotineComponent, GuillotineDeed, GwennosHarp, Gypsy, GypsyAnimalTrainer, GypsyBanker, GypsyMaiden, HagApprenticeCorpse, HagCauldron, HagStew, Hair, HairDye, HairRestylingDeed, HairStylist, Hakama, HakamaShita, Halberd, HalfApron, HalfEmptyJar, HalfEmptyJars, Ham, Hammer, HammerPick, HangingAxesAddon, HangingAxesDeed, HangingLantern, HangingSkeleton, HangingSkeletonDeed, HangingSwordsAddon, HangingSwordsDeed, HangoverCure, HanzosBow, Haochi, HaochisGuardsman, HaochisKatana, HaochisKatanaGenerator, HaochisTreasureChest, HarborMaster, HarmScroll, HarmWand, Harp, Harpy, Harrower, HarrowerGate, HarrowerTentacles, Hatchet, HatOfTheMagi, HaunterMirrorAddon, HaunterMirrorComponent, HaunterMirrorDeed, Head, HeadlessOne, Healer, HealerCamp, HealerGuildmaster, HealPotion, HealScroll, HealWand, HearthOfHomeFire, HearthOfHomeFireDeed, HeartOfTheLion, HeartwoodBoard, HeartwoodLog, HeaterShield, HeatingStand, HeavyCrossbow, HeavyPlateJingasa, HellCat, HellHound, HellSteed, Helmet, HelmOfInsight, HelmOfSwiftness, Henchman, Herbalist, HeritageToken, HiddenFigure, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, Hides, Hind, Hinge, HintItem, Hiryu, Hold, HolidayBell, HolidayTree, HolidayTreeDeed, HollowPrism, HolyFamiliar, HolyKnightsBreastplate, HolyMage, HolySteed, HolySword, HoneydewMelon, HonorableSwords, HonorCandle, HoodedShroudOfShadows, HordeMinion, HordeMinionFamiliar, HornedHides, HornedLeather, HornedTribalMask, HornOfRetreat, HornOfRetreatMoongate, HorrificBeastScroll, Horse, HorseShoes, Horus, Hourglass, HourglassAni, HouseDeed, HouseFoundation, HouseLadderAddon, HouseLadderDeed, HousePlacementTool, HouseRaffleDeed, HouseRaffleStone, HouseSign, HouseTeleporter, HuntersHeaddress, IceElemental, IceFiend, IceSerpent, IceSnake, IcicleLargeEast, IcicleLargeSouth, IcicleMedEast, IcicleMedSouth, IcicleSmallEast, IcicleSmallSouth, IcyPatch, IdolOfTheChampion, IDWand, IharaSoko, Ilhenir, ImmolatingWeaponScroll, Imp, Impaler, Impresario, IncognitoScroll, IndecipherableMap, IngotStone, InjuredWolf, InnKeeper, InquisitorsResolution, Inshave, InteriorDecorator, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem2, InternalItem2, InterredGrizzle, InvisibilityScroll, IolosLute, IronGate, IronGateShort, IronIngot, IronMaidenAddon, IronMaidenDeed, IronOre, IronWire, IronwoodCrown, IronWorker, Item, JackalsCollar, JackOLantern, JackRabbit, JadeStatueMaker, JarHoney, Jars2, Jars3, Jars4, JedahEntille, JesterHat, JesterHatofChuckles, JesterSuit, JeweledFiligree, Jeweler, JinBaori, JoinStone, JointingPlane, Jug, Juggernaut, JukaBow, JukaLord, JukaMage, JukaWarrior, Jwilson, KaburJournal, Kama, Kamishimo, Kappa, Kasa, KasaOfTheRajin, Katana, KazeKemono, Keep, KeepDeed, KeeperOfChivalry, Keg, Key, KeyRing, KeywordTeleporter, KhaldunPitTeleporter, KhaldunRevenant, KhaldunSummoner, KhaldunZealot, Kilt, Kindling, Kirin, Knife, KnifeLeft, KnifeRight, Kraken, KrisnaHair, KronusScroll, KronusScrollBox, Kryss, LadyOfTheSnow, LadyPortrait1, LadyPortrait2, Lajatang, LambLeg, LampPost1, LampPost2, LampPost3, LampPostArtifact, LampRoomBox, LampRoomTeleporter, Lance, Lantern, LanternOfSouls, LapHarp, LardOfParoxysmus, LargeBagBall, LargeBattleAxe, LargeBedEastAddon, LargeBedEastDeed, LargeBedSouthAddon, LargeBedSouthDeed, LargeBoat, LargeBoatDeed, LargeBOD, LargeCrate, LargeDockedBoat, LargeDockedDragonBoat, LargeDragonBoat, LargeDragonBoatDeed, LargeEmptyFlask, LargeEmptyPot, LargeFishingNetAddon, LargeFishingNetComponent, LargeFishingNetDeed, LargeFlask, LargeForgeEast, LargeForgeEastAddon, LargeForgeEastDeed, LargeForgeSouthAddon, LargeForgeSouthDeed, LargeForgeWest, LargeMarbleDeed, LargeMarbleHouse, LargePainting, LargePatioDeed, LargePatioHouse, LargeSmithBOD, LargeStoneTableEastAddon, LargeStoneTableEastDeed, LargeStoneTableSouthAddon, LargeStoneTableSouthDeed, LargeTable, LargeTailorBOD, LargeVase, LargeVioletFlask, LargeYellowFlask, LavaLizard, LavaSerpent, LavaSnake, LavaTile, LeafArms, Leafblade, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, Leather, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherDyeTub, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LeatherTunicArtifact, LeatherWorker, LeftArm, LeftLeg, LegacyOfTheDreadLord, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, Lemon, Lemons, LesserCurePotion, LesserExplosionPotion, LesserHealPotion, LesserHiryu, LesserPigmentsOfTokuno, LesserPoisonPotion, Lettuce, LeurociansMempoOfFortune, LeverPuzzleController, LeverPuzzleLever, LeverPuzzleStatue, Leviathan, LibraryBookcase, Lich, LichFormScroll, LichLord, LieutenantOfTheBritannianRoyalGuard, LifeOfATravellingMinstrel, LightFlowerTapestryEastAddon, LightFlowerTapestryEastDeed, LightFlowerTapestrySouthAddon, LightFlowerTapestrySouthDeed, LightningScroll, LightningWand, LightOfTheWinterSolstice, LightOfWayGlasses, LightPlateJingasa, LightSource, LightWoodDoor, LightWoodGate, LightYarn, LightYarnUnraveled, Lime, Limes, Lizardman, LizardmenCamp, Llama, LocalizedAddonComponent, LocalizedContainerComponent, LocalizedSign, LocalizedStatic, LocalMap, LockableBarrel, LockableContainer, Lockpick, Lockpicks, Log, LogCabin, LogCabinDeed, LongBeard, LongFlask, LongHair, LongPants, Longsword, LoomEastAddon, LoomEastDeed, LoomSouthAddon, LoomSouthDeed, LordBlackthorneSuit, LordBritishSuit, LordOaks, LOSBlocker, LtBlueCurvedFlask, LuckyNecklace, LuminescentFungi, LuminousRuneBlade, LunaLance, Lute, LyricalGlasses, LysanderGathenwale, LysanderNotebook1, LysanderNotebook11, LysanderNotebook2, LysanderNotebook3, LysanderNotebook7, LysanderNotebook8, Maabus, MaabusCoffin, MaabusCoffinComponent, Mace, MaceShieldGlasses, Mage, MageCamp, MageGuildmaster, MagicalShortbow, MagicArrowScroll, MagicArrowWand, MagicFlute, MagicLockScroll, MagicReflectScroll, MagicTrapScroll, MagicUnTrapScroll, MagicWand, MagicWizardsHat, MahjongGame, MajorTradeAssociation, MaleElvenRobe, MaleKimono, MalletAndChisel, ManaDrainScroll, ManaDrainWand, ManaVampireScroll, MandrakeRoot, ManPortrait1, ManPortrait2, MansionGuard, ManStatuetteEastArtifact, ManStatuetteSouthArtifact, MapItem, MapleArmoire, Mapmaker, MapmakersPen, MarbleFloor, MarblePavers, MarbleStatueMaker, MarbleWorkshopDeed, Mardoth, MaritimeGlasses, MarkContainer, MarkScroll, MasonryBook, MassCurseScroll, MassDispelScroll, Maul, MeatPie, MediumBoat, MediumBoatDeed, MediumCrate, MediumDockedBoat, MediumDockedDragonBoat, MediumDragonBoat, MediumDragonBoatDeed, MediumFlask, MediumLongBeard, MediumShortBeard, MediumStoneTableEastAddon, MediumStoneTableEastDeed, MediumStoneTableSouthAddon, MediumStoneTableSouthDeed, MediumStretchedHideEastAddon, MediumStretchedHideEastDeed, MediumStretchedHideSouthAddon, MediumStretchedHideSouthDeed, MediumWoodDoor, MeerCaptain, MeerEternal, MeerMage, MeerWarrior, MelisandesCorrodedHatchet, MeltedWax, Mephitis, Meraktus, Merchant, MerchantGuildmaster, MessageInABottle, Messenger, MetalBox, MetalChest, MetalDoor, MetalDoor2, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalHouseDoor, MetalKiteShield, MetalPigmentsOfTokuno, MetalShield, MetalTreasureChest, MeteorSwarmScroll, MidnightBracers, MilitiaCanoneer, MilitiaFighter, MilitiaFighterCorpse, Miller, MinaxWarHorse, MindBlastScroll, MindRotScroll, Miner, MinerGuildmaster, MiniHouseAddon, MiniHouseDeed, MiningCart, MiningCartDeed, Minotaur, MinotaurCaptain, MinotaurHedge, MinotaurScout, MinotaurStatue, MinotaurStatueDeed, Minter, MisoSoup, MistletoeAddon, MistletoeDeed, MLDryad, Mobile, Mohawk, Moloch, Mongbat, Monk, MonkRobe, MonsterStatuette, MoonfireBrew, Moongate, Moonstone, MoonstoneGate, MorgBergen, MorphItem, MortarPestle, MouldingPlane, MoundOfMaggots, MountainGoat, MountedPixieBlueAddon, MountedPixieBlueComponent, MountedPixieBlueDeed, MountedPixieGreenAddon, MountedPixieGreenComponent, MountedPixieGreenDeed, MountedPixieLimeAddon, MountedPixieLimeComponent, MountedPixieLimeDeed, MountedPixieOrangeAddon, MountedPixieOrangeComponent, MountedPixieOrangeDeed, MountedPixieWhiteAddon, MountedPixieWhiteComponent, MountedPixieWhiteDeed, MountItem, MovingCrate, Muculent, Muffins, Mummy, MushroomTrap, Mustache, MyStory, Nails, NameChangeDeed, Naturalist, NatureFury, NatureFuryScroll, Necklace, NecromancerSpellbook, NecromanticGlasses, Neira, NewPlayerTicket, Nightmare, Nightshade, NightSightPotion, NightSightScroll, NightsKiss, Nightstand, Ninja, NinjaTabi, Noble, NoDachi, NorseHelm, NoteForZoel, NoxCrystal, NoxRangersHeavyCrossbow, Nunchaku, OakBoard, OakLog, Obelisk, Obi, OblivionsNeedle, Obsidian, Ogre, OgreLord, OilCloth, Oni, Onion, OpenCoconut, OphidianArchmage, OphidianKnight, OphidianMage, OphidianMatriarch, OphidianWarrior, OrangePetals, Orc, OrcBomber, OrcBrute, OrcCamp, OrcCaptain, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishLord, OrcishMage, OrcishVisage, OrderGuard, OrderShield, OrigamiButterfly, OrigamiFish, OrigamiFrog, OrigamiPaper, OrigamiShape, OrigamiSongbird, OrigamiSwan, Ornament, OrnamentOfTheMagician, OrnateAxe, OrnateCrownOfTheHarrower, OrnateElvenChair, OrnateElvenTableEastAddon, OrnateElvenTableEastDeed, OrnateElvenTableSouthAddon, OrnateElvenTableSouthDeed, OrnateWoodenChest, OssianGrimoire, OverseerSunderedBlade, Pacify, PackHorse, PackingBox, PackLlama, PadsOfTheCuSidhe, PageboyHair, PainSpikeScroll, PaintedImage, Painting1NorthArtifact, Painting1WestArtifact, Painting2NorthArtifact, Painting2WestArtifact, Painting3Artifact, Painting4NorthArtifact, Painting4WestArtifact, Painting5NorthArtifact, Painting5WestArtifact, Painting6NorthArtifact, Painting6WestArtifact, PaintsAndBrush, Panther, PaperLantern, ParagonChest, ParalyzeFieldScroll, ParalyzeScroll, ParasiticPlant, Parrot, ParrotPerchAddon, ParrotPerchDeed, PatchworkSkeleton, Peach, PeachCobbler, PeachTreeAddon, PeachTreeDeed, PeachTrunkAddon, PeachTrunkDeed, Pear, Peasant, PeasantsBokuto, PeculiarFish, PenAndInk, PendantOfTheMagi, PentagramAddon, PentagramDeed, PerfectEmerald, PestilentBandage, PewterBowlOfCarrots, PewterBowlOfCorn, PewterBowlOfLettuce, PewterBowlOfPeas, PewterBowlOfPotatos, PewterMug, PhantomStaff, PhillipsWoodenSteed, Phoenix, Pickaxe, PickpocketDip, PickpocketDipEastAddon, PickpocketDipEastDeed, PickpocketDipSouthAddon, PickpocketDipSouthDeed, PicnicBasket, PieceBlackBishop, PieceBlackChecker, PieceBlackKing, PieceBlackKnight, PieceBlackPawn, PieceBlackQueen, PieceBlackRook, PieceWhiteBishop, PieceWhiteChecker, PieceWhiteKing, PieceWhiteKnight, PieceWhitePawn, PieceWhiteQueen, PieceWhiteRook, Pier, Pig, PigIron, PigmentsOfTokuno, Pike, PileOfGlacialSnow, PilferedDancerFans, PinkFancyRugAddon, PinkFancyRugDeed, Pitcher, Pitchfork, Pixie, PixieSwatter, PlagueBeast, PlagueBeastBackpack, PlagueBeastBackupOrgan, PlagueBeastBlood, PlagueBeastComponent, PlagueBeastGland, PlagueBeastHeart, PlagueBeastInnard, PlagueBeastLord, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastMutationCore, PlagueBeastOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan, PlagueBeastVein, PlagueSpawn, PlainDress, PlainLowTable, PlainWoodenChest, Plank, PlantBowl, PlantItem, Plate, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PlayerBarkeeper, PlayerBBEast, PlayerBBSouth, PlayerMobile, PlayerVendor, PlayerVendorPlaceholder, PlayingCards, PlayingCards2, PoisonedGlasses, PoisonElemental, PoisonFieldScroll, PoisonPotion, PoisonScroll, PoisonStrikeScroll, PolarBear, PolarBearMask, PolarBearRugEastAddon, PolarBearRugEastDeed, PolarBearRugSouthAddon, PolarBearRugSouthDeed, PolymorphScroll, PonyTail, PoolOfAcid, PortcullisEW, PortcullisNS, PotionKeg, PottedCactus, PottedCactus1, PottedCactus2, PottedCactus3, PottedCactus4, PottedCactus5, PottedCactusDeed, PottedPlant, PottedPlant1, PottedPlant2, PottedTree, PottedTree1, Pouch, PowderOfTemperament, PowderOfTranslocation, PowerCrystal, PowerGenerator, PowerScroll, PredatorHellCat, PresetMap, PreviewHouse, PricedHealer, PristineDreadHorn, PrizedFish, PromotionalToken, ProspectorsTool, ProtectionScroll, Provisioner, PublicMoongate, Pumpkin, PumpkinPie, Putrefication, PuzzleChest, PyramidAddon, Quagmire, QuarterStaff, Quell, QuestDaemonBlood, QuestDaemonBone, QuestFertileDirt, QuestItem, QuestOfVirtues, Quiche, QuiverOfBlight, QuiverOfElements, QuiverOfFire, QuiverOfIce, QuiverOfInfinity, QuiverOfLightning, QuiverOfRage, Rabbit, RadiantScimitar, RaedsGlory, RagingGrizzlyBear, RaiJu, RaisableItem, RaiseSwitch, Rancher, RandomTalisman, Ranger, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerGuildmaster, RangerLegs, RankingsOfTrades, Rat, RatCamp, Ratman, RatmanArcher, RatmanMage, RattanDoor, Ravager, RavenHelm, RawBird, RawChickenLeg, RawFishSteak, RawLambLeg, RawRibs, ReactiveArmorScroll, RealEstateBroker, Reaper, ReaperFormScroll, RecallRune, RecallScroll, ReceedingHair, ReceiverCrystal, RecipeScroll, RedAmbitiousSolenQueen, RedArmoire, RedBeaker, RedBook, RedBottle, RedCurvedFlask, RedHangingLantern, RedLeaves, RedMisoSoup, RedPlainRugAddon, RedPlainRugDeed, RedPoinsettia, RedRibbedFlask, RedScales, RedSolenInfiltratorQueen, RedSolenInfiltratorWarrior, RedSolenMatriarch, RedSolenQueen, RedSolenWarrior, RedSolenWorker, RedSoulstone, RedStocking, RedVelvetGiftBox, RefreshPotion, RegardingLlamas, RegStone, RejuvinationAddonComponent, RejuvinationAnkhNorth, RejuvinationAnkhWest, Relnia, RentedVendor, RepairDeed, RepeatingCrossbow, Reptalon, ReptalonFormTalisman, ResGate, ResilientBracer, RestlessSoul, ResurrectionScroll, RevealScroll, Revenant, RevenantLion, RewardBlackDyeTub, RewardBrazier, RewardBrazierDeed, RewardCake, RewardCloak, RewardDress, RewardPottedCactus, RewardRobe, RibCage, Ribs, RidableLlama, RideablePolarBear, Ridgeback, RightArm, RighteousAnger, RightLeg, Rikktor, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, RingOfTheElements, RingOfTheVile, RoastPig, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RockArtifact, RollingPin, Ronin, Rope, RoseInAVase, RoseOfTrinsic, RoseOfTrinsicPetal, RottingCorpse, RoundPaperLantern, RoyalCirclet, RoyalGuardSurvivalKnife, Ruby, RuinedArmoire, RuinedBookcase, RuinedBooks, RuinedChair, RuinedClock, RuinedDrawers, RuinedFallenChairA, RuinedFallenChairB, RuinedPainting, RuinedPaintingArtifact, RuneBeetle, RuneBeetleCarapace, RuneBlade, Runebook, RunebookDyeTub, RuneCarvingKnife, RunedPrism, RunedSwitch, RunicDovetailSaw, RunicHammer, RunicSewingKit, SackFlour, SacrificialAltarAddon, SacrificialAltarDeed, SaddleArtifact, Sai, SakeArtifact, SalvageBag, SamaritanRobe, Samurai, SamuraiHelm, SamuraiTabi, Sand, Sandals, SandFlagstones, SandMiningBook, SandstoneFireplaceEastAddon, SandstoneFireplaceEastDeed, SandstoneFireplaceSouthAddon, SandstoneFireplaceSouthDeed, SandstoneFloorN, SandstoneFloorW, SandstoneFountainAddon, SandStonePatio, SandstonePatioDeed, SandVortex, Sapphire, Satyr, Sausage, SausagePizza, Savage, SavageMask, SavageRider, SavageRidgeback, SavageShaman, Saw, SawTrap, ScaledSwampDragon, Scales, ScarecrowAddon, ScarecrowComponent, ScarecrowDeed, Scepter, Schmendrick, SchmendrickApprenticeCorpse, SchmendrickScrollOfPower, Scimitar, Scissors, Scorp, Scorpion, Scourge, Scribe, ScribeBag, ScribesPen, ScribeStone, ScrollOfAbraxus, ScrollofAlacrity, ScrollofTranscendence, Sculptor, Sculpture1Artifact, Sculpture2Artifact, Scythe, SeaChart, SeaHorse, SeahorseStatuette, SeaSerpent, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, SecureTradeContainer, Seed, SeekerOfAdventure, SeerRobe, Semidar, Serado, SerpentineDragon, SerpentPillar, SerpentPillarAddon, SerpentsFang, ServantOfSemidar, Sewerrat, SewingKit, Sextant, SextantParts, Shade, ShadowDancerLeggings, ShadowFiend, ShadowIronElemental, ShadowIronGranite, ShadowIronIngot, ShadowIronOre, ShadowKnight, ShadowWisp, ShadowWispFamiliar, ShadowWyrm, Shaft, ShaminoCrossbow, ShardPoller, ShardThrasher, SheafOfHay, Sheep, ShepherdsCrook, ShieldOfInvulnerability, ShipModelOfTheHMSCape, ShipwreckedItem, Shipwright, Shirt, Shoes, ShojiLantern, ShojiScreen, ShortBeard, ShortCabinet, ShortHair, ShortMusicStand, ShortPants, ShortSpear, Shovel, ShrineOfWisdomAddon, ShrineOfWisdomComponent, ShroudOfDeciet, SHTeleComponent, SHTeleporter, Shuriken, Sigil, Sign, Silvani, SilvanisFeywoodBow, Silver, SilverBeadNecklace, SilverBracelet, SilverEarrings, SilverNecklace, SilverRing, SilverSerpent, SilverSteed, SilverWire, SkeletalDragon, SkeletalKnight, SkeletalMage, SkeletalMount, Skeleton, Skillet, SkillTeleporter, SkinnedDeerArtifact, SkinnedGoatArtifact, SkinningKnife, Skirt, SkitteringHopper, SkullCandleArtifact, SkullCap, SkullPileAddon, SkullPole, SlabOfBacon, SledgeHammer, Slime, SLWarHorse, SmallBagBall, SmallBedEastAddon, SmallBedEastDeed, SmallBedSouthAddon, SmallBedSouthDeed, SmallBlueBottle, SmallBlueFlask, SmallBoat, SmallBoatDeed, SmallBOD, SmallBrickHouseDeed, SmallBrownBottle, SmallCrate, SmallDockedBoat, SmallDockedDragonBoat, SmallDragonBoat, SmallDragonBoatDeed, SmallEmptyFlask, SmallEmptyPot, SmallFishingNetAddon, SmallFishingNetComponent, SmallFishingNetDeed, SmallFlask, SmallForgeAddon, SmallForgeDeed, SmallGreenBottle, SmallGreenBottle2, SmallOldHouse, SmallPlateJingasa, SmallPumpkin, SmallRedFlask, SmallShop, SmallSmithBOD, SmallStretchedHideEastAddon, SmallStretchedHideEastDeed, SmallStretchedHideSouthAddon, SmallStretchedHideSouthDeed, SmallTailorBOD, SmallTower, SmallTowerDeed, SmallTowerSculpture, SmallUrn, SmallVioletBottle, SmallWatermelon, SmallYellowFlask, SmithBag, SmithHammer, SmithStone, SmokeBomb, SmoothingPlane, Snake, SnowElemental, SnowLeopard, Snowman, SnowPile, SnowPileDeco, SnowyTree, SolenAntHole, SolenAntHoleComponent, SongOfSamlethe, SongWovenMantle, SOS, SoulSeeker, SoulStone, SoulstoneFragment, SoulstoneFragmentToken, Spam, SpawnedOrcishLord, Spawner, SpawnPersistence, Spear, SpecialBeardDye, SpecialDyeTub, SpecialFishingNet, SpecialHairDye, SpecialScroll, SpectralArmour, Spectre, Spellbook, SpellScroll, SpellweavingBook, SpellWovenBritches, SpidersSilk, SpikeTrap, SpinedHides, SpinedLeather, SpinningHourglass, SpinningwheelEastAddon, SpinningwheelEastDeed, SpinningwheelSouthAddon, SpinningwheelSouthDeed, SpiritOfTheTotem, SplitCoconut, SpoolOfThread, Spoon, SpoonLeft, SpoonRight, Springs, Spyglass, SquareGozaMatEastAddon, SquareGozaMatEastDeed, SquareGozaMatSouthAddon, SquareGozaMatSouthDeed, Squash, Squirrel, SquirrelFormTalisman, SquirrelStatueEastAddon, SquirrelStatueEastDeed, SquirrelStatueSouthAddon, SquirrelStatueSouthDeed, StaffOfPower, StaffOfTheMagi, StainedOoze, StandardPlateKabuto, StandingBrokenChairAddon, StandingBrokenChairComponent, StandingBrokenChairDeed, StarRoomGate, StarSapphire, StatCapScroll, Static, StatueEast, StatueEast2, StatueNorth, StatuePegasus, StatuePegasus2, StatueSouth, StatueSouth2, StatueSouthEast, StatuetteDyeTub, StatueWest, StealableArtifactsSpawner, StitchersMittens, StoneAnkh, StoneAnkhComponent, StoneAnkhDeed, StoneChair, StoneCrafter, StoneFaceTrap, StoneFaceTrapNoDamage, StoneFireplaceEastAddon, StoneFireplaceEastDeed, StoneFireplaceSouthAddon, StoneFireplaceSouthDeed, StoneFountainAddon, StoneGargoyle, StoneHarpy, StoneMiningBook, StoneOvenEastAddon, StoneOvenEastDeed, StoneOvenSouthAddon, StoneOvenSouthDeed, StonePaversDark, StonePaversLight, StonePaversMedium, StonePlasterHouseDeed, StoneStatueAddon, StoneStatueDeed, StoneWorkshopDeed, Stool, Stormgrip, StrangleScroll, StrawHat, StrengthPotion, StrengthScroll, StretchedHideArtifact, StrongBackpack, StrongBox, StrongBoxPuzzle, StrongholdMonolith, StrongMongbat, StrongWoodDoor, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLeggingsArtifact, StuddedLegs, StuddedMempo, StuddedSuneate, StuddedTunicArtifact, SturdyPickaxe, SturdyShovel, Subdue, Succubus, SuitOfGoldArmorAddon, SuitOfGoldArmorComponent, SuitOfGoldArmorDeed, SuitOfSilverArmorAddon, SuitOfSilverArmorComponent, SuitOfSilverArmorDeed, SulfurousAsh, SummonAirElementalScroll, SummonCreatureScroll, SummonDaemonScroll, SummonEarthElementalScroll, SummonedAirElemental, SummonedAntLion, SummonedArcticOgreLord, SummonedBakeKitsune, SummonedBogling, SummonedBullFrog, SummonedChicken, SummonedCow, SummonedDaemon, SummonedDoppleganger, SummonedEarthElemental, SummonedFireElemental, SummonedFrostSpider, SummonedGreatHart, SummonedLavaSerpent, SummonedOrcBrute, SummonedPaladin, SummonedPaladinMoongate, SummonedPanther, SummonedSheep, SummonedSkeletalKnight, SummonedVorpalBunny, SummonedWailingBanshee, SummonedWaterElemental, SummonFamiliarScroll, SummonFeyScroll, SummonFiendScroll, SummonFireElementalScroll, SummoningAltar, SummonWaterElementalScroll, Surcoat, SushiPlatter, SushiRolls, SwampDragon, SwampTentacle, SwampTile, SwarmOfFlies, SweetDough, SwitchItem, SwordDisplay1NorthArtifact, SwordDisplay1WestArtifact, SwordDisplay2NorthArtifact, SwordDisplay2WestArtifact, SwordDisplay3EastArtifact, SwordDisplay3SouthArtifact, SwordDisplay4NorthArtifact, SwordDisplay4WestArtifact, SwordDisplay5NorthArtifact, SwordDisplay5WestArtifact, SwordOfTheStampede, SwordsOfProsperity, TableWithBlueClothAddon, TableWithBlueClothDeed, TableWithOrangeClothAddon, TableWithOrangeClothDeed, TableWithPurpleClothAddon, TableWithPurpleClothDeed, TableWithRedClothAddon, TableWithRedClothDeed, Tailor, TailorBag, TailorGuildmaster, TailorStone, Taint, TaintedWool, TaleOfThreeTribes, TalesOfVesperVol1, TalkingToWisps, TallCabinet, TallElvenBedEastAddon, TallElvenBedEastDeed, TallElvenBedSouthAddon, TallElvenBedSouthDeed, TallMusicStand, TallStrawHat, TalonBite, Tambourine, TambourineTassel, TamingDragons, TanBook, Tanner, Tapestry1N, Tapestry2N, Tapestry2W, Tapestry3N, Tapestry3W, Tapestry4N, Tapestry4W, Tapestry5N, Tapestry5W, Tapestry6N, Tapestry6W, TapestryOfSosaria, TarotCardsArtifact, TatteredAncientMummyWrapping, TattsukeHakama, TavaraSewel, TavarasJournal1, TavarasJournal11, TavarasJournal14, TavarasJournal16, TavarasJournal16b, TavarasJournal17, TavarasJournal19, TavarasJournal2, TavarasJournal3, TavarasJournal6, TavarasJournal7, TavarasJournal8, TavarasJournal9, TavernKeeper, TaxidermyKit, TBWarHorse, TeapotNorthArtifact, TeapotWestArtifact, Tekagi, TelekinisisScroll, Teleporter, TeleportScroll, Telescope, TerathanAvenger, TerathanDrone, TerathanMatriarch, TerathanWarrior, Tessen, Tetsubo, ThatchedRoofCottageDeed, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheFight, TheHorselord, TheMostKnowledgePerson, TheNightReaper, TheRobeOfBritanniaAri, TheTaskmaster, ThickGrayStoneWall, Thief, ThiefGuildmaster, ThighBoots, ThinBrickWall, ThinLongsword, ThinStoneWall, Throne, ThrowingDagger, ThunderstormScroll, TillerMan, TimberWolf, Tinker, TinkerGuildmaster, TinkersTools, TinkerTools, TinyRedBottle, TinyYellowBottle, Titan, TitansHammer, TomasONeerlan, TomeOfEnlightenment, TomeOfLostKnowledge, Tongs, ToolKit, Torch, TormentedChains, TormentedMinotaur, Torso, TotalRefreshPotion, TotemOfVoid, Tourmaline, Tower, TowerDeed, TowerLanternArtifact, TownCrier, TownMonolith, TownStone, ToxicElemental, TradeGlasses, TrainingDummy, TrainingDummyEastAddon, TrainingDummyEastDeed, TrainingDummySouthAddon, TrainingDummySouthDeed, TransferItem, TransferItem, TransientItem, TranslatedGargoyleJournal, TrapableContainer, TrashBarrel, TrashChest, TreasureChestDirt, TreasureMap, TreasureMapChest, TreasuresOfTokunoPersistance, TreasureTrinketGlasses, TreatiseOnAlchemy, Treefellow, TreeStump, TreeStumpDeed, TreeTrunk, TribalBerry, TribalMask, TribalPaint, TribalSpear, TricorneHat, TripleFanNorthArtifact, TripleFanWestArtifact, Troglodyte, Troll, TrophyAddon, TrophyDeed, TropicalBird, TrulyRareFish, TsukiWolf, Tub, Tunic, TunicOfFire, Turnip, Turquoise, Twaulo, TwoHandedAxe, TwoPigTails, TwoStoryHouse, TwoStoryStonePlasterHouseDeed, TwoStoryVilla, TwoStoryWoodPlasterHouseDeed, UnbakedApplePie, UnbakedFruitPie, UnbakedMeatPie, UnbakedPeachCobbler, UnbakedPumpkinPie, UnbakedQuiche, UncookedCheesePizza, UncookedSausagePizza, UncutCloth, UnfinishedBarrel, UnholyBone, UnholyFamiliar, UnholySteed, Unicorn, UnlockScroll, UnmadeBedAddon, UnmadeBedDeed, UnsettlingPortraitAddon, UnsettlingPortraitComponent, UnsettlingPortraitDeed, Urn1Artifact, Urn2Artifact, Uzeraan, UzeraanTurmoilHorn, UzeraanTurmoilTeleporter, Vagabond, ValentinesCard, ValentinesCardEast, ValentinesCardSouth, ValoriteElemental, ValoriteGranite, ValoriteIngot, ValoriteOre, VampireBat, VampireBatFamiliar, VampiricEmbraceScroll, Vandyke, VanityAddon, VanityDeed, VarietyDealer, Vase, VaultOfSecretsBarrier, VendorBackpack, VendorRentalContract, VengefulSpiritScroll, VeriteElemental, VeriteGranite, VeriteIngot, VeriteOre, Veterinarian, Victoria, VikingSword, VillaDeed, Vines, VioletCourage, VioletRibbedFlask, VirtualMountItem, VirtualMountItem, VirtueBook, VoiceOfTheFallenKing, VorpalBunny, VultureHelm, WailingBanshee, Waiter, Wakizashi, WallBanner, WallBannerComponent, WallBannerDeed, WallBlood, WallOfStoneScroll, WallSconce, WallTorch, WallTorchAddon, WallTorchComponent, WallTorchDeed, Walrus, Wanderer, WandererOfTheVoid, WanderingHealer, Waraji, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WarningItem, WarriorGuard, WarriorGuildmaster, WarriorStatueEastAddon, WarriorStatueEastDeed, WarriorStatueSouthAddon, WarriorStatueSouthDeed, Wasabi, WasabiClumps, WaterBarrel, WaterElemental, Watermelon, WaterTile, WaterTroughEastAddon, WaterTroughEastDeed, WaterTroughSouthAddon, WaterTroughSouthDeed, WaterVatEast, WaterVatSouth, WayPoint, WeakenScroll, WeaknessWand, WeaponEngravingTool, Weaponsmith, WeatherMap, Weaver, Web, WheatSheaf, Whip, WhippingVine, WhiteDriedFlowers, WhiteHangingLantern, WhiteMisoSoup, WhiteNinjaQuestTeleporter, WhitePearl, WhitePoinsettia, WhiteScales, WhiteSnowflake, WhiteStoneWall, WhiteWolf, WhiteWyrm, WideBrimHat, WildfireBow, WildfireScroll, WildGirlOfTheForest, WildStaff, WindChimes, WindsEdge, Windsong, WindSpirit, WingedHelm, WinterGiftPackage2003, Wisp, WitherScroll, WizardsGlasses, WizardsHat, WomanPortrait1, WomanPortrait2, WondrousFish, WoodDebris, WoodenBench, WoodenBowl, WoodenBowlOfCarrots, WoodenBowlOfCorn, WoodenBowlOfLettuce, WoodenBowlOfPeas, WoodenBowlOfStew, WoodenBowlOfTomatoSoup, WoodenBox, WoodenChair, WoodenChairCushion, WoodenChest, WoodenCoffinAddon, WoodenCoffinComponent, WoodenCoffinDeed, WoodenFootLocker, WoodenKiteShield, WoodenShield, WoodenThrone, WoodenTreasureChest, WoodHouseDeed, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs, WoodPlasterHouseDeed, Wool, WordOfDeathScroll, WorldMap, Wraith, WraithFormScroll, WrathOfTheDryad, WreathAddon, WreathDeed, WritingTable, Wyvern, Yamandon, YellowBeaker, YellowGourd, YellowScales, YewBoard, YewLog, YewWoodTable, YomotsuElder, YomotsuPriest, YomotsuWarrior, YoungNinja, YoungRonin, Yumi, Zeefzorpul, ZenRock1Artifact, ZenRock2Artifact, ZenRock3Artifact, Zoel, Zombie, ZoogiFungus, ZyronicClaw

+ ISpawner Spawner( get; set; )
+ virtual void MoveToWorld( Point3D location, Map map )
+ virtual void OnAfterSpawn()
+ virtual void OnBeforeSpawn( Point3D location, Map map )
+ + diff --git a/Docs/types/ISpawner.html b/Docs/types/ISpawner.html new file mode 100644 index 0000000..5ec2271 --- /dev/null +++ b/Docs/types/ISpawner.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ISpawner + + +

Back to Server

+

ISpawner

+

Derived Types: SpawnEntry, Spawner

+ Point3D HomeLocation( get; )
+ int HomeRange( get; )
+ bool UnlinkOnTaming( get; )
+ virtual void Remove( ISpawnable spawn )
+ + diff --git a/Docs/types/ISpell.html b/Docs/types/ISpell.html new file mode 100644 index 0000000..93482bd --- /dev/null +++ b/Docs/types/ISpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ISpell + + +

Back to Server

+

ISpell

+

Derived Types: AgilitySpell, AirElementalSpell, AnimalForm, AnimateDeadSpell, ArcaneCircleSpell, ArcaneForm, ArcaneSummon<T>, ArcanistSpell, ArchCureSpell, ArchProtectionSpell, AttuneWeaponSpell, BladeSpiritsSpell, BlessSpell, BloodOathSpell, ChainLightningSpell, CleanseByFireSpell, CloseWoundsSpell, ClumsySpell, Confidence, ConsecrateWeaponSpell, CorpseSkinSpell, CounterAttack, CreateFoodSpell, CunningSpell, CureSpell, CurseSpell, CurseWeaponSpell, DispelEvilSpell, DispelFieldSpell, DispelSpell, DivineFurySpell, EarthElementalSpell, EarthquakeSpell, EnemyOfOneSpell, EnergyBoltSpell, EnergyFieldSpell, EnergyVortexSpell, EssenceOfWindSpell, EtherealSpell, EtherealVoyageSpell, Evasion, EvilOmenSpell, ExorcismSpell, ExplosionSpell, FeeblemindSpell, FireballSpell, FireElementalSpell, FireFieldSpell, FlameStrikeSpell, GateTravelSpell, GiftOfLifeSpell, GiftOfRenewalSpell, GreaterHealSpell, HarmSpell, HealSpell, HolyLightSpell, HorrificBeastSpell, IncognitoSpell, InvisibilitySpell, LichFormSpell, LightningSpell, MagerySpell, MagicArrowSpell, MagicLockSpell, MagicReflectSpell, MagicTrapSpell, ManaDrainSpell, ManaVampireSpell, MarkSpell, MassCurseSpell, MassDispelSpell, MeteorSwarmSpell, MindBlastSpell, MindRotSpell, MirrorImage, NatureFurySpell, NecromancerSpell, NightSightSpell, NinjaSpell, NobleSacrificeSpell, PainSpikeSpell, PaladinSpell, ParalyzeFieldSpell, ParalyzeSpell, PetSummoningSpell, PoisonFieldSpell, PoisonSpell, PoisonStrikeSpell, PolymorphSpell, ProtectionSpell, ReactiveArmorSpell, ReaperFormSpell, RecallSpell, RemoveCurseSpell, RemoveTrapSpell, ResurrectionSpell, RevealSpell, SacredJourneySpell, SamuraiSpell, Shadowjump, Spell, SpiritSpeakSpell, StrangleSpell, StrengthSpell, SummonCreatureSpell, SummonDaemonSpell, SummonFamiliarSpell, SummonFeySpell, SummonFiendSpell, TelekinesisSpell, TeleportSpell, ThunderstormSpell, TransformationSpell, UnlockSpell, VampiricEmbraceSpell, VengefulSpiritSpell, WallOfStoneSpell, WaterElementalSpell, WeakenSpell, WitherSpell, WordOfDeathSpell, WraithFormSpell

+ bool IsCasting( get; )
+ virtual bool OnCasterEquiping( Item item )
+ virtual void OnCasterHurt()
+ virtual void OnCasterKilled()
+ virtual bool OnCasterMoving( Direction d )
+ virtual bool OnCasterUsingObject( object o )
+ virtual bool OnCastInTown( Region r )
+ virtual void OnConnectionChanged()
+ + diff --git a/Docs/types/ISpinningWheel.html b/Docs/types/ISpinningWheel.html new file mode 100644 index 0000000..2ba573b --- /dev/null +++ b/Docs/types/ISpinningWheel.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ISpinningWheel + + +

Back to Server.Items

+

ISpinningWheel

+

Derived Types: ElvenSpinningwheelEastAddon, ElvenSpinningwheelSouthAddon, SpinningwheelEastAddon, SpinningwheelSouthAddon

+ bool Spinning( get; )
+ virtual void BeginSpin( SpinCallback callback, Mobile from, int hue )
+ + diff --git a/Docs/types/ITelekinesisable.html b/Docs/types/ITelekinesisable.html new file mode 100644 index 0000000..cb1238c --- /dev/null +++ b/Docs/types/ITelekinesisable.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ITelekinesisable + + +

Back to Server

+

ITelekinesisable : IPoint3D, IPoint2D

+

Derived Types: BarredMetalDoor, BarredMetalDoor2, BaseDoor, BaseHouseDoor, BaseTreasureChest, ChestOfHeirlooms, ClosedBarrel, DaemonBloodChest, DarkWoodDoor, DarkWoodGate, DarkWoodHouseDoor, Dices, EminosKatanaChest, FillableBarrel, FillableContainer, FillableLargeCrate, FillableMetalBox, FillableMetalChest, FillableMetalGoldenChest, FillableSmallCrate, FillableWoodenBox, FillableWoodenChest, FinishedWoodenChest, GenericHouseDoor, GildedWoodenChest, HaochisTreasureChest, IronGate, IronGateShort, KronusScrollBox, LargeCrate, LibraryBookcase, LightWoodDoor, LightWoodGate, LockableBarrel, LockableContainer, MarkContainer, MediumCrate, MediumWoodDoor, MetalBox, MetalChest, MetalDoor, MetalDoor2, MetalGoldenChest, MetalGoldenPuzzleChest, MetalGoldenTreasureChest, MetalHouseDoor, MetalTreasureChest, OrnateWoodenChest, ParagonChest, PlainWoodenChest, PortcullisEW, PortcullisNS, Pouch, PuzzleChest, RattanDoor, SecretDungeonDoor, SecretLightWoodDoor, SecretStoneDoor1, SecretStoneDoor2, SecretStoneDoor3, SecretWoodenDoor, SmallCrate, StrongBoxPuzzle, StrongWoodDoor, TrapableContainer, TreasureMapChest, WoodenBox, WoodenChest, WoodenFootLocker, WoodenTreasureChest

+ virtual void OnTelekinesis( Mobile from )
+ + diff --git a/Docs/types/ITokunoDyable.html b/Docs/types/ITokunoDyable.html new file mode 100644 index 0000000..3f9f12f --- /dev/null +++ b/Docs/types/ITokunoDyable.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ITokunoDyable + + +

Back to Server.Items

+

ITokunoDyable

+

Derived Types: BaseFormTalisman, CrimsonCincture, CuSidheFormTalisman, DupresShield, FerretFormTalisman, JesterHatofChuckles, OssianGrimoire, QuiverOfInfinity, ReptalonFormTalisman, SquirrelFormTalisman

+ + diff --git a/Docs/types/ITownCrierEntryList.html b/Docs/types/ITownCrierEntryList.html new file mode 100644 index 0000000..1771e20 --- /dev/null +++ b/Docs/types/ITownCrierEntryList.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ITownCrierEntryList + + +

Back to Server.Mobiles

+

ITownCrierEntryList

+

Derived Types: GlobalTownCrierEntryList, TownCrier

+ List<TownCrierEntry> Entries( get; )
+ virtual TownCrierEntry AddEntry( string[] lines, TimeSpan duration )
+ virtual TownCrierEntry GetRandomEntry()
+ virtual void RemoveEntry( TownCrierEntry entry )
+ + diff --git a/Docs/types/ITransformationSpell.html b/Docs/types/ITransformationSpell.html new file mode 100644 index 0000000..e64f27c --- /dev/null +++ b/Docs/types/ITransformationSpell.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ITransformationSpell + + +

Back to Server.Spells

+

ITransformationSpell

+

Derived Types: ArcaneForm, EtherealVoyageSpell, HorrificBeastSpell, LichFormSpell, ReaperFormSpell, TransformationSpell, VampiricEmbraceSpell, WraithFormSpell

+ int Body( get; )
+ int ColdResistOffset( get; )
+ int FireResistOffset( get; )
+ int Hue( get; )
+ int NrgyResistOffset( get; )
+ int PhysResistOffset( get; )
+ int PoisResistOffset( get; )
+ double TickRate( get; )
+ virtual void DoEffect( Mobile m )
+ virtual void OnTick( Mobile m )
+ virtual void RemoveEffect( Mobile m )
+ + diff --git a/Docs/types/IUsesRemaining.html b/Docs/types/IUsesRemaining.html new file mode 100644 index 0000000..ed3f430 --- /dev/null +++ b/Docs/types/IUsesRemaining.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - IUsesRemaining + + +

Back to Server.Items

+

IUsesRemaining

+

Derived Types: AncientSmithyHammer, Bardiche, BaseHarvestTool, BasePigmentsOfTokuno, BasePoleArm, BaseRunicTool, BaseTool, BlazeOfDeath, Blowpipe, Calm, DovetailSaw, DrawKnife, FletcherTools, FlourSifter, Froe, Fukiya, FukiyaDarts, GargoylesPickaxe, Halberd, Hammer, INinjaAmmo, INinjaWeapon, Inshave, JointingPlane, LeatherNinjaBelt, LegacyOfTheDreadLord, LesserPigmentsOfTokuno, MalletAndChisel, MapmakersPen, MetalPigmentsOfTokuno, MortarPestle, MouldingPlane, Nails, Pickaxe, PigmentsOfTokuno, PowderOfTemperament, ProspectorsTool, Quell, RollingPin, RunicDovetailSaw, RunicHammer, RunicSewingKit, Saw, Scorp, ScribesPen, Scythe, SewingKit, Shovel, Shuriken, Skillet, SledgeHammer, SmithHammer, SmoothingPlane, SoulstoneFragment, SturdyPickaxe, SturdyShovel, Subdue, TinkersTools, TinkerTools, Tongs, WeaponEngravingTool

+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ + diff --git a/Docs/types/IVendor.html b/Docs/types/IVendor.html new file mode 100644 index 0000000..3c2b60f --- /dev/null +++ b/Docs/types/IVendor.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IVendor + + +

Back to Server

+

IVendor

+

Derived Types: AlbertaGiacco, Alchemist, AnimalTrainer, AnsellaGryen, Architect, Armorer, Baker, Banker, Bard, BardGuildmaster, Barkeeper, BaseAmbitiousSolenQueen, BaseFactionVendor, BaseGuildmaster, BaseHealer, BaseQuester, BaseSolenMatriarch, BaseVendor, Beekeeper, BlackAmbitiousSolenQueen, Blackheart, Blacksmith, BlacksmithGuildmaster, BlackSolenMatriarch, Bowyer, Butcher, Carpenter, Chyloth, Cobbler, Cook, CustomHairstylist, Dryad, ElwoodMcCarrin, Emino, EnshroudedFigure, EvilHealer, EvilWanderingHealer, FactionBoardVendor, FactionBottleVendor, FactionHorseVendor, FactionOreVendor, FactionReagentVendor, Farmer, FisherGuildmaster, Fisherman, FortuneTeller, Furtrader, GabrielPiete, Glassblower, GolemCrafter, Grizelda, GypsyAnimalTrainer, GypsyBanker, GypsyMaiden, HairStylist, Haochi, HaochisGuardsman, Healer, HealerGuildmaster, Herbalist, HiddenFigure, HolyMage, Horus, IharaSoko, Impresario, InnKeeper, IronWorker, JedahEntille, Jeweler, KeeperOfChivalry, LeatherWorker, Maabus, Mage, MageGuildmaster, MansionGuard, Mapmaker, Mardoth, MerchantGuildmaster, MilitiaCanoneer, Miller, Miner, MinerGuildmaster, Minter, Monk, Naturalist, PlayerBarkeeper, PricedHealer, Provisioner, Rancher, Ranger, RangerGuildmaster, RealEstateBroker, RedAmbitiousSolenQueen, RedSolenMatriarch, Relnia, Schmendrick, Scribe, Shipwright, StoneCrafter, Tailor, TailorGuildmaster, Tanner, TavernKeeper, Thief, ThiefGuildmaster, Tinker, TinkerGuildmaster, TomasONeerlan, Uzeraan, Vagabond, VarietyDealer, Veterinarian, Victoria, Waiter, WanderingHealer, WarriorGuildmaster, Weaponsmith, Weaver, Zeefzorpul, Zoel

+ DateTime LastRestock( get; set; )
+ TimeSpan RestockDelay( get; )
+ virtual bool OnBuyItems( Mobile from, List<BuyItemResponse> list )
+ virtual bool OnSellItems( Mobile from, List<SellItemResponse> list )
+ virtual void Restock()
+ + diff --git a/Docs/types/IWaterSource.html b/Docs/types/IWaterSource.html new file mode 100644 index 0000000..3fc38c5 --- /dev/null +++ b/Docs/types/IWaterSource.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - IWaterSource + + +

Back to Server.Items

+

IWaterSource : IHasQuantity

+

Derived Types: WaterTroughEastAddon, WaterTroughSouthAddon

+ + diff --git a/Docs/types/IWeapon.html b/Docs/types/IWeapon.html new file mode 100644 index 0000000..3f756f3 --- /dev/null +++ b/Docs/types/IWeapon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - IWeapon + + +

Back to Server

+

IWeapon

+

Derived Types: ArcticDeathDealer, AssassinSpike, Axe, AxeOfTheHeavens, Bardiche, BaseAxe, BaseBashing, BaseKnife, BaseMeleeWeapon, BasePoleArm, BaseRanged, BaseSpear, BaseStaff, BaseSword, BaseWand, BaseWeapon, BattleAxe, BlackStaff, BladeDance, BladedStaff, BladeOfInsanity, BladeOfTheRighteous, BlazeOfDeath, BlightGrippedLongbow, Bokuto, BoneCrusher, BoneHarvester, Bonesmasher, Boomstick, Bow, BowOfTheJukaKing, BraveKnightOfTheBritannia, BreathOfTheDead, Broadsword, ButcherKnife, Calm, CaptainQuacklebushsCutlass, CavortingClub, ChylothStaff, Cleaver, Club, ClumsyWand, ColdBlood, ColdForgedBlade, CompositeBow, CrescentBlade, Crossbow, Cutlass, Dagger, Daisho, DarkenedSky, DemonForks, DiamondMace, DoubleAxe, DoubleBladedStaff, DragonNunchaku, ElvenCompositeLongbow, ElvenMachete, ElvenSpellblade, EnchantedTitanLegBone, ExecutionersAxe, Exiler, FangOfRactus, FeebleWand, FireballWand, FireworksWand, Fists, FleshRipper, Frostbringer, GargoylesPickaxe, GlacialStaff, GnarledStaff, GreaterHealWand, Halberd, HammerPick, HanzosBow, HarmWand, Hatchet, HealWand, HeavyCrossbow, HolySword, IDWand, JukaBow, Kama, Katana, Kryss, Lajatang, Lance, LargeBattleAxe, Leafblade, LegacyOfTheDreadLord, LightningWand, Longsword, LuminousRuneBlade, LunaLance, Mace, MagicalShortbow, MagicArrowWand, MagicWand, ManaDrainWand, Maul, MelisandesCorrodedHatchet, NightsKiss, NoDachi, NoxRangersHeavyCrossbow, Nunchaku, OblivionsNeedle, OrnateAxe, OverseerSunderedBlade, Pacify, PeasantsBokuto, PhantomStaff, Pickaxe, Pike, PilferedDancerFans, Pitchfork, PixieSwatter, ProspectorsTool, QuarterStaff, Quell, RadiantScimitar, RaedsGlory, RepeatingCrossbow, RighteousAnger, RoyalGuardSurvivalKnife, RuneBlade, RuneCarvingKnife, Sai, Scepter, Scimitar, Scythe, SerpentsFang, ShaminoCrossbow, ShardThrasher, ShepherdsCrook, ShortSpear, SilvanisFeywoodBow, SkinningKnife, SoulSeeker, Spear, StaffOfPower, StaffOfTheMagi, SturdyPickaxe, Subdue, SwordOfTheStampede, SwordsOfProsperity, TalonBite, Tekagi, Tessen, Tetsubo, TheBeserkersMaul, TheDestroyer, TheDragonSlayer, TheDryadBow, TheHorselord, TheNightReaper, TheTaskmaster, ThinLongsword, TitansHammer, TribalSpear, TwoHandedAxe, VikingSword, Wakizashi, WarAxe, WarCleaver, WarFork, WarHammer, WarMace, WeaknessWand, WildfireBow, WildStaff, WindsEdge, Windsong, WrathOfTheDryad, Yumi, ZyronicClaw

+ int MaxRange( get; )
+ virtual void GetStatusDamage( Mobile from, out int min, out int max )
+ virtual void OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual TimeSpan OnSwing( Mobile attacker, Mobile defender )
+ + diff --git a/Docs/types/IWearableDurability.html b/Docs/types/IWearableDurability.html new file mode 100644 index 0000000..b52c2ea --- /dev/null +++ b/Docs/types/IWearableDurability.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IWearableDurability + + +

Back to Server.Items

+

IWearableDurability : IDurability

+

Derived Types: AcidProofRobe, Aegis, AegisOfGrace, AncientFarmersKasa, AncientSamuraiDo, ANecromancerShroud, AnthropomorphistGlasses, ArcaneShield, ArmorOfFortune, ArmsOfTacticalExcellence, ArtsGlasses, Bandana, Bascinet, BaseArmor, BaseCloak, BaseClothing, BaseGlovesOfMining, BaseHat, BaseMiddleTorso, BaseOuterLegs, BaseOuterTorso, BasePants, BaseShield, BaseShirt, BaseShoes, BaseWaist, BearMask, BlackLotusHood, BodySash, BoneArms, BoneChest, BoneGloves, BoneHelm, BoneLegs, Bonnet, Boots, BrambleCoat, BronzeShield, Buckler, BurglarsBandana, Cap, CaptainJohnsHat, ChainChest, ChainCoif, ChainHatsuburi, ChainLegs, ChaosShield, Circlet, Cloak, CloseHelm, ClothNinjaHood, ClothNinjaJacket, CrimsonCincture, CrownOfTalKeesh, DaemonArms, DaemonChest, DaemonGloves, DaemonHelm, DaemonLegs, DaimyosHelm, DeathRobe, DecorativePlateKabuto, DeerMask, DetectiveBoots, DivineCountenance, Doublet, DragonArms, DragonChest, DragonGloves, DragonHelm, DragonLegs, DreadPirateHat, DupresShield, ElvenBoots, ElvenDarkShirt, ElvenGlasses, ElvenPants, ElvenShirt, EmbroideredOakLeafCloak, FancyDress, FancyShirt, FeatheredHat, FemaleElvenPlateChest, FemaleElvenRobe, FemaleKimono, FemaleLeafChest, FemaleLeatherChest, FemalePlateChest, FemaleStuddedChest, FeyLeggings, FloppyHat, FlowerGarland, FoldedSteelGlasses, FormalShirt, FullApron, FurBoots, FurCape, FurSarong, GauntletsOfNobility, GemmedCirclet, GildedDress, GladiatorsCollar, GlovesOfThePugilist, GlovesOfTheSun, GuantletsOfAnger, Hakama, HakamaShita, HalfApron, HatOfTheMagi, HeartOfTheLion, HeaterShield, HeavyPlateJingasa, Helmet, HelmOfInsight, HelmOfSwiftness, HideChest, HideFemaleChest, HideGloves, HideGorget, HidePants, HidePauldrons, HolyKnightsBreastplate, HoodedShroudOfShadows, HornedTribalMask, HuntersHeaddress, InquisitorsResolution, IronwoodCrown, JackalsCollar, JesterHat, JesterHatofChuckles, JesterSuit, JinBaori, Kamishimo, Kasa, KasaOfTheRajin, Kilt, LeafArms, LeafChest, LeafGloves, LeafGorget, LeafLegs, LeafTonlet, LeatherArms, LeatherBustierArms, LeatherCap, LeatherChest, LeatherDo, LeatherGloves, LeatherGlovesOfMining, LeatherGorget, LeatherHaidate, LeatherHiroSode, LeatherJingasa, LeatherLegs, LeatherMempo, LeatherNinjaBelt, LeatherNinjaHood, LeatherNinjaJacket, LeatherNinjaMitts, LeatherNinjaPants, LeatherShorts, LeatherSkirt, LeatherSuneate, LeggingsOfBane, LeggingsOfEmbers, LegsOfStability, LeurociansMempoOfFortune, LieutenantOfTheBritannianRoyalGuard, LightOfWayGlasses, LightPlateJingasa, LongPants, LyricalGlasses, MaceShieldGlasses, MagicWizardsHat, MaleElvenRobe, MaleKimono, MaritimeGlasses, MetalKiteShield, MetalShield, MidnightBracers, MonkRobe, NecromanticGlasses, NinjaTabi, NorseHelm, Obi, OrcChieftainHelm, OrcHelm, OrcishKinMask, OrcishVisage, OrderShield, OrnateCrownOfTheHarrower, PadsOfTheCuSidhe, PlainDress, PlateArms, PlateBattleKabuto, PlateChest, PlateDo, PlateGloves, PlateGorget, PlateHaidate, PlateHatsuburi, PlateHelm, PlateHiroSode, PlateLegs, PlateMempo, PlateSuneate, PoisonedGlasses, PolarBearMask, RangerArms, RangerChest, RangerGloves, RangerGorget, RangerLegs, RavenHelm, RewardCloak, RewardDress, RewardRobe, RingmailArms, RingmailChest, RingmailGloves, RingmailGlovesOfMining, RingmailLegs, Robe, RobeOfTheEclipse, RobeOfTheEquinox, RoyalCirclet, RuneBeetleCarapace, SamaritanRobe, SamuraiHelm, SamuraiTabi, Sandals, SavageMask, ShadowDancerLeggings, ShieldOfInvulnerability, Shirt, Shoes, ShortPants, ShroudOfDeciet, Skirt, SkullCap, SmallPlateJingasa, SongWovenMantle, SpellWovenBritches, SpiritOfTheTotem, StandardPlateKabuto, StitchersMittens, Stormgrip, StrawHat, StuddedArms, StuddedBustierArms, StuddedChest, StuddedDo, StuddedGloves, StuddedGlovesOfMining, StuddedGorget, StuddedHaidate, StuddedHiroSode, StuddedLegs, StuddedMempo, StuddedSuneate, Surcoat, TallStrawHat, TattsukeHakama, TheMostKnowledgePerson, TheRobeOfBritanniaAri, ThighBoots, TradeGlasses, TreasureTrinketGlasses, TribalMask, TricorneHat, Tunic, TunicOfFire, VioletCourage, VoiceOfTheFallenKing, VultureHelm, Waraji, WideBrimHat, WingedHelm, WizardsGlasses, WizardsHat, WoodenKiteShield, WoodenShield, WoodlandArms, WoodlandBelt, WoodlandChest, WoodlandGloves, WoodlandGorget, WoodlandLegs

+ virtual int OnHit( BaseWeapon weapon, int damageTaken )
+ + diff --git a/Docs/types/IceElemental.html b/Docs/types/IceElemental.html new file mode 100644 index 0000000..8821c35 --- /dev/null +++ b/Docs/types/IceElemental.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IceElemental + + +

Back to Server.Mobiles

+

IceElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) IceElemental()
+ (ctor) IceElemental( Serial serial )
+ bool BleedImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IceFiend.html b/Docs/types/IceFiend.html new file mode 100644 index 0000000..a742160 --- /dev/null +++ b/Docs/types/IceFiend.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - IceFiend + + +

Back to Server.Mobiles

+

IceFiend : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) IceFiend()
+ (ctor) IceFiend( Serial serial )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IceSerpent.html b/Docs/types/IceSerpent.html new file mode 100644 index 0000000..722c83c --- /dev/null +++ b/Docs/types/IceSerpent.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - IceSerpent + + +

Back to Server.Mobiles

+

IceSerpent : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) IceSerpent()
+ (ctor) IceSerpent( Serial serial )
+ bool DeathAdderCharmable( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IceSnake.html b/Docs/types/IceSnake.html new file mode 100644 index 0000000..81953eb --- /dev/null +++ b/Docs/types/IceSnake.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - IceSnake + + +

Back to Server.Mobiles

+

IceSnake : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) IceSnake()
+ (ctor) IceSnake( Serial serial )
+ bool DeathAdderCharmable( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IcicleLargeEast.html b/Docs/types/IcicleLargeEast.html new file mode 100644 index 0000000..f593a4b --- /dev/null +++ b/Docs/types/IcicleLargeEast.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IcicleLargeEast + + +

Back to Server.Items

+

IcicleLargeEast : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IcicleLargeEast()
+ (ctor) IcicleLargeEast( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IcicleLargeSouth.html b/Docs/types/IcicleLargeSouth.html new file mode 100644 index 0000000..6b1bfca --- /dev/null +++ b/Docs/types/IcicleLargeSouth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IcicleLargeSouth + + +

Back to Server.Items

+

IcicleLargeSouth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IcicleLargeSouth()
+ (ctor) IcicleLargeSouth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IcicleMedEast.html b/Docs/types/IcicleMedEast.html new file mode 100644 index 0000000..366c9ac --- /dev/null +++ b/Docs/types/IcicleMedEast.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IcicleMedEast + + +

Back to Server.Items

+

IcicleMedEast : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IcicleMedEast()
+ (ctor) IcicleMedEast( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IcicleMedSouth.html b/Docs/types/IcicleMedSouth.html new file mode 100644 index 0000000..a5652c4 --- /dev/null +++ b/Docs/types/IcicleMedSouth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IcicleMedSouth + + +

Back to Server.Items

+

IcicleMedSouth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IcicleMedSouth()
+ (ctor) IcicleMedSouth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IcicleSmallEast.html b/Docs/types/IcicleSmallEast.html new file mode 100644 index 0000000..824b835 --- /dev/null +++ b/Docs/types/IcicleSmallEast.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IcicleSmallEast + + +

Back to Server.Items

+

IcicleSmallEast : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IcicleSmallEast()
+ (ctor) IcicleSmallEast( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IcicleSmallSouth.html b/Docs/types/IcicleSmallSouth.html new file mode 100644 index 0000000..1b4aac3 --- /dev/null +++ b/Docs/types/IcicleSmallSouth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IcicleSmallSouth + + +

Back to Server.Items

+

IcicleSmallSouth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IcicleSmallSouth()
+ (ctor) IcicleSmallSouth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IcyPatch.html b/Docs/types/IcyPatch.html new file mode 100644 index 0000000..05d4940 --- /dev/null +++ b/Docs/types/IcyPatch.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - IcyPatch + + +

Back to Server.Items

+

IcyPatch : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) void BeginFall_Callback( object state )
+ (static) void EndFall_Callback( object state )
+ (static) void Relocate_Callback( object state )
+ (ctor) IcyPatch()
+ (ctor) IcyPatch( int itemid )
+ (ctor) IcyPatch( Serial serial )
+ double DefaultWeight( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void RunSequence( Mobile m, int message, bool freeze )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IdleTimer.html b/Docs/types/IdleTimer.html new file mode 100644 index 0000000..b2b433b --- /dev/null +++ b/Docs/types/IdleTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IdleTimer + + +

Back to Server.Mobiles

+

(ArcherGuard) - IdleTimer : Timer

+ (ctor) IdleTimer( ArcherGuard owner )
+ virtual void OnTick()
+ + diff --git a/Docs/types/IdolOfTheChampion.html b/Docs/types/IdolOfTheChampion.html new file mode 100644 index 0000000..878d831 --- /dev/null +++ b/Docs/types/IdolOfTheChampion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - IdolOfTheChampion + + +

Back to Server.Engines.CannedEvil

+

IdolOfTheChampion : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IdolOfTheChampion( Serial serial )
+ (ctor) IdolOfTheChampion( ChampionSpawn spawn )
+ string DefaultName( get; )
+ ChampionSpawn Spawn( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IharaSoko.html b/Docs/types/IharaSoko.html new file mode 100644 index 0000000..eb1e205 --- /dev/null +++ b/Docs/types/IharaSoko.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - IharaSoko + + +

Back to Server.Mobiles

+

IharaSoko : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) IharaSoko()
+ (ctor) IharaSoko( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ bool DisallowAllMoves( get; )
+ bool IsActiveVendor( get; )
+ bool IsInvulnerable( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual bool CanBeDamaged()
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ virtual void TurnToTokuno()
+ + diff --git a/Docs/types/Ilhenir.html b/Docs/types/Ilhenir.html new file mode 100644 index 0000000..1498fd0 --- /dev/null +++ b/Docs/types/Ilhenir.html @@ -0,0 +1,42 @@ + + + RunUO Documentation - Class Overview - Ilhenir + + +

Back to Server.Mobiles

+

Ilhenir : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) bool UnderCacophonicAttack( Mobile from )
+ (ctor) Ilhenir()
+ (ctor) Ilhenir( Serial serial )
+ Type[] DecorativeList( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ int TreasureMapLevel( get; )
+ bool Uncalmable( get; )
+ Type[] UniqueList( get; )
+ bool Unprovokable( get; )
+ virtual void CacophonicAttack( Mobile to )
+ virtual void CacophonicEnd( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DropOoze()
+ void EndCacophonic_Callback( object state )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual Point3D GetSpawnPosition( int range )
+ virtual Point3D GetSpawnPosition( Point3D from, Map map, int range )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnDeath( Container c )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void PackItems( Item item, int amount )
+ virtual void PackResources( int amount )
+ virtual void PackTalismans( int amount )
+ int RandomPoint( int mid )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ImageTileButtonInfo.html b/Docs/types/ImageTileButtonInfo.html new file mode 100644 index 0000000..e3ce5e0 --- /dev/null +++ b/Docs/types/ImageTileButtonInfo.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ImageTileButtonInfo + + +

Back to Server.Gumps

+

ImageTileButtonInfo

+

Derived Types: ItemTileButtonInfo, PigmentsTileButtonInfo, TypeTileButtonInfo

+ (ctor) ImageTileButtonInfo( int itemID, int hue, TextDefinition label )
+ (ctor) ImageTileButtonInfo( int itemID, int hue, TextDefinition label, int localizedTooltip )
+ int Hue( get; set; )
+ int ItemID( get; set; )
+ TextDefinition Label( get; set; )
+ int LocalizedTooltip( get; set; )
+ + diff --git a/Docs/types/ImageType.html b/Docs/types/ImageType.html new file mode 100644 index 0000000..4e35a31 --- /dev/null +++ b/Docs/types/ImageType.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - ImageType + + +

Back to Server.Engines.Quests.Collector

+

ImageType (Enum)

+ Betrayer = 0,
+ Bogling = 1,
+ BogThing = 2,
+ Gazer = 3,
+ Beetle = 4,
+ GiantBlackWidow = 5,
+ Scorpion = 6,
+ JukaMage = 7,
+ JukaWarrior = 8,
+ Lich = 9,
+ MeerMage = 10,
+ MeerWarrior = 11,
+ Mongbat = 12,
+ Mummy = 13,
+ Pixie = 14,
+ PlagueBeast = 15,
+ SandVortex = 16,
+ StoneGargoyle = 17,
+ SwampDragon = 18,
+ Wisp = 19,
+ Juggernaut = 20
+ + diff --git a/Docs/types/ImageTypeInfo.html b/Docs/types/ImageTypeInfo.html new file mode 100644 index 0000000..b56fcdd --- /dev/null +++ b/Docs/types/ImageTypeInfo.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ImageTypeInfo + + +

Back to Server.Engines.Quests.Collector

+

ImageTypeInfo

+ (static) ImageTypeInfo Get( ImageType image )
+ (static) ImageType[] RandomList( int count )
+ (ctor) ImageTypeInfo( int figurine, Type type, int x, int y )
+ int Figurine( get; )
+ int Name( get; )
+ Type Type( get; )
+ int X( get; )
+ int Y( get; )
+ + diff --git a/Docs/types/ImmolatingWeaponScroll.html b/Docs/types/ImmolatingWeaponScroll.html new file mode 100644 index 0000000..0d78415 --- /dev/null +++ b/Docs/types/ImmolatingWeaponScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ImmolatingWeaponScroll + + +

Back to Server.Items

+

ImmolatingWeaponScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ImmolatingWeaponScroll()
+ (ctor) ImmolatingWeaponScroll( int amount )
+ (ctor) ImmolatingWeaponScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Imp.html b/Docs/types/Imp.html new file mode 100644 index 0000000..c1c4996 --- /dev/null +++ b/Docs/types/Imp.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Imp + + +

Back to Server.Mobiles

+

Imp : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Imp()
+ (ctor) Imp( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ImpDeathConversation.html b/Docs/types/ImpDeathConversation.html new file mode 100644 index 0000000..a4d4d22 --- /dev/null +++ b/Docs/types/ImpDeathConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ImpDeathConversation + + +

Back to Server.Engines.Quests.Hag

+

ImpDeathConversation : QuestConversation

+ (ctor) ImpDeathConversation()
+ (ctor) ImpDeathConversation( Point3D impLocation )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnRead()
+ + diff --git a/Docs/types/Impaler.html b/Docs/types/Impaler.html new file mode 100644 index 0000000..2016209 --- /dev/null +++ b/Docs/types/Impaler.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Impaler + + +

Back to Server.Mobiles

+

Impaler : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Impaler()
+ (ctor) Impaler( Serial serial )
+ bool AreaPeaceImmune( get; )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ Poison HitPoison( get; )
+ bool IgnoreYoungProtection( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ImplFlag.html b/Docs/types/ImplFlag.html new file mode 100644 index 0000000..0bb90b5 --- /dev/null +++ b/Docs/types/ImplFlag.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ImplFlag + + +

Back to Server

+

ImplFlag (Enum)

+ None = 0x00,
+ Visible = 0x01,
+ Movable = 0x02,
+ Deleted = 0x04,
+ Stackable = 0x08,
+ InQueue = 0x10,
+ Insured = 0x20,
+ PayedInsurance = 0x40,
+ QuestItem = 0x80
+ + diff --git a/Docs/types/Impresario.html b/Docs/types/Impresario.html new file mode 100644 index 0000000..2036755 --- /dev/null +++ b/Docs/types/Impresario.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Impresario + + +

Back to Server.Engines.Quests.Collector

+

Impresario : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Impresario()
+ (ctor) Impresario( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IncognitoScroll.html b/Docs/types/IncognitoScroll.html new file mode 100644 index 0000000..9d754af --- /dev/null +++ b/Docs/types/IncognitoScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - IncognitoScroll + + +

Back to Server.Items

+

IncognitoScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) IncognitoScroll()
+ (ctor) IncognitoScroll( int amount )
+ (ctor) IncognitoScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IncognitoSpell.html b/Docs/types/IncognitoSpell.html new file mode 100644 index 0000000..34b2b54 --- /dev/null +++ b/Docs/types/IncognitoSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IncognitoSpell + + +

Back to Server.Spells.Fifth

+

IncognitoSpell : MagerySpell, ISpell

+

Nested Types: InternalTimer

+ (static) bool StopTimer( Mobile m )
+ (ctor) IncognitoSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/IncreaseCommand.html b/Docs/types/IncreaseCommand.html new file mode 100644 index 0000000..ec8627e --- /dev/null +++ b/Docs/types/IncreaseCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - IncreaseCommand + + +

Back to Server.Commands.Generic

+

IncreaseCommand : BaseCommand

+ (ctor) IncreaseCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/IndecipherableMap.html b/Docs/types/IndecipherableMap.html new file mode 100644 index 0000000..f3b459f --- /dev/null +++ b/Docs/types/IndecipherableMap.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IndecipherableMap + + +

Back to Server.Items

+

IndecipherableMap : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) IndecipherableMap()
+ (ctor) IndecipherableMap( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IndexInfo.html b/Docs/types/IndexInfo.html new file mode 100644 index 0000000..5906e42 --- /dev/null +++ b/Docs/types/IndexInfo.html @@ -0,0 +1,9 @@ + + + RunUO Documentation - Class Overview - IndexInfo + + +

Back to Server

+

(QueuedMemoryWriter) - IndexInfo

+ + diff --git a/Docs/types/InfectiousStrike.html b/Docs/types/InfectiousStrike.html new file mode 100644 index 0000000..c20d784 --- /dev/null +++ b/Docs/types/InfectiousStrike.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - InfectiousStrike + + +

Back to Server.Items

+

InfectiousStrike : WeaponAbility

+ (ctor) InfectiousStrike()
+ int BaseMana( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual bool RequiresTactics( Mobile from )
+ + diff --git a/Docs/types/InfoField-T-.html b/Docs/types/InfoField-T-.html new file mode 100644 index 0000000..09b3e8d --- /dev/null +++ b/Docs/types/InfoField-T-.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - InfoField<T> + + +

Back to Server.Guilds

+

InfoField<T>

+ (ctor) InfoField<T>( TextDefinition name, int width, IComparer<T> comparer )
+ IComparer<T> Comparer( get; )
+ TextDefinition Name( get; )
+ int Width( get; )
+ + diff --git a/Docs/types/IngotStone.html b/Docs/types/IngotStone.html new file mode 100644 index 0000000..2818049 --- /dev/null +++ b/Docs/types/IngotStone.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IngotStone + + +

Back to Server.Items

+

IngotStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IngotStone()
+ (ctor) IngotStone( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ingredient.html b/Docs/types/Ingredient.html new file mode 100644 index 0000000..f19363f --- /dev/null +++ b/Docs/types/Ingredient.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Ingredient + + +

Back to Server.Engines.Quests.Hag

+

Ingredient (Enum)

+ SheepLiver = 0,
+ RabbitsFoot = 1,
+ MongbatWing = 2,
+ ChickenGizzard = 3,
+ RatTail = 4,
+ FrogsLeg = 5,
+ DeerHeart = 6,
+ LizardTongue = 7,
+ SlimeOoze = 8,
+ SpiritEssence = 9,
+ SwampWater = 10,
+ RedMushrooms = 11,
+ Bones = 12,
+ StarChart = 13,
+ Whiskey = 14
+ + diff --git a/Docs/types/IngredientInfo.html b/Docs/types/IngredientInfo.html new file mode 100644 index 0000000..bbd8961 --- /dev/null +++ b/Docs/types/IngredientInfo.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IngredientInfo + + +

Back to Server.Engines.Quests.Hag

+

IngredientInfo

+ (static) IngredientInfo Get( Ingredient ingredient )
+ (static) Ingredient RandomIngredient( Ingredient[] oldIngredients )
+ (ctor) IngredientInfo( int name, int quantity, Type[] creatures )
+ Type[] Creatures( get; )
+ int Name( get; )
+ int Quantity( get; )
+ + diff --git a/Docs/types/InhumanSpeech.html b/Docs/types/InhumanSpeech.html new file mode 100644 index 0000000..2e68a4f --- /dev/null +++ b/Docs/types/InhumanSpeech.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - InhumanSpeech + + +

Back to Server.Misc

+

InhumanSpeech

+ (static) InhumanSpeech Lizardman( get; )
+ (static) InhumanSpeech Orc( get; )
+ (static) InhumanSpeech Ratman( get; )
+ (static) InhumanSpeech Wisp( get; )
+ (ctor) InhumanSpeech()
+ IHSFlags Flags( get; set; )
+ int Hue( get; set; )
+ string[] Keywords( get; set; )
+ string[] Responses( get; set; )
+ int Sound( get; set; )
+ string[] Syllables( get; set; )
+ string ConstructSentance( int wordCount )
+ string ConstructWord( int syllableCount )
+ string GetRandomResponseWord( List<String> keywordsFound )
+ string GetRandomSyllable()
+ void OnConstruct( Mobile mob )
+ void OnDamage( Mobile mob, int amount )
+ void OnDeath( Mobile mob )
+ void OnMovement( Mobile mob, Mobile mover, Point3D oldLocation )
+ bool OnSpeech( Mobile mob, Mobile speaker, string text )
+ void SayRandomTranslate( Mobile mob, string[] sentancesInEnglish )
+ void SaySentance( Mobile mob, int wordCount )
+ + diff --git a/Docs/types/Initializer.html b/Docs/types/Initializer.html new file mode 100644 index 0000000..f49dcac --- /dev/null +++ b/Docs/types/Initializer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Initializer + + +

Back to Server.Spells

+

Initializer

+ (static) void Initialize()
+ (static) void Register( int spellID, Type type )
+ (ctor) Initializer()
+ + diff --git a/Docs/types/InjuredWolf.html b/Docs/types/InjuredWolf.html new file mode 100644 index 0000000..2111121 --- /dev/null +++ b/Docs/types/InjuredWolf.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - InjuredWolf + + +

Back to Server.Engines.Quests.Samurai

+

InjuredWolf : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) InjuredWolf()
+ (ctor) InjuredWolf( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/InnKeeper.html b/Docs/types/InnKeeper.html new file mode 100644 index 0000000..c167a4a --- /dev/null +++ b/Docs/types/InnKeeper.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - InnKeeper + + +

Back to Server.Mobiles

+

InnKeeper : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) InnKeeper()
+ (ctor) InnKeeper( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/InquisitorsResolution.html b/Docs/types/InquisitorsResolution.html new file mode 100644 index 0000000..4f51833 --- /dev/null +++ b/Docs/types/InquisitorsResolution.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - InquisitorsResolution + + +

Back to Server.Items

+

InquisitorsResolution : PlateGloves, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) InquisitorsResolution()
+ (ctor) InquisitorsResolution( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Inscribe.html b/Docs/types/Inscribe.html new file mode 100644 index 0000000..b9b346e --- /dev/null +++ b/Docs/types/Inscribe.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Inscribe + + +

Back to Server.SkillHandlers

+

Inscribe

+

Nested Types: InternalTargetDst, InternalTargetSrc

+ (static) void CancelUser( BaseBook book )
+ (static) void Copy( BaseBook bookSrc, BaseBook bookDst )
+ (static) Mobile GetUser( BaseBook book )
+ (static) void Initialize()
+ (static) bool IsEmpty( BaseBook book )
+ (static) TimeSpan OnUse( Mobile m )
+ (static) void SetUser( BaseBook book, Mobile mob )
+ (ctor) Inscribe()
+ + diff --git a/Docs/types/InscribePrompt.html b/Docs/types/InscribePrompt.html new file mode 100644 index 0000000..8be6ab2 --- /dev/null +++ b/Docs/types/InscribePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InscribePrompt + + +

Back to Server.Items

+

(BraceletOfBinding) - InscribePrompt : Prompt

+ (ctor) InscribePrompt( BraceletOfBinding bracelet )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/Insensitive.html b/Docs/types/Insensitive.html new file mode 100644 index 0000000..f758891 --- /dev/null +++ b/Docs/types/Insensitive.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Insensitive + + +

Back to Server

+

Insensitive

+ (static) IComparer Comparer( get; )
+ (static) int Compare( string a, string b )
+ (static) bool Contains( string a, string b )
+ (static) bool EndsWith( string a, string b )
+ (static) bool Equals( string a, string b )
+ (static) bool StartsWith( string a, string b )
+ + diff --git a/Docs/types/Inshave.html b/Docs/types/Inshave.html new file mode 100644 index 0000000..7d27e0a --- /dev/null +++ b/Docs/types/Inshave.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Inshave + + +

Back to Server.Items

+

Inshave : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Inshave()
+ (ctor) Inshave( int uses )
+ (ctor) Inshave( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/InstancedItemInfo.html b/Docs/types/InstancedItemInfo.html new file mode 100644 index 0000000..708dad2 --- /dev/null +++ b/Docs/types/InstancedItemInfo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InstancedItemInfo + + +

Back to Server.Items

+

(Corpse) - InstancedItemInfo

+ (ctor) InstancedItemInfo( Item i, Mobile m )
+ bool Perpetual( get; set; )
+ bool IsOwner( Mobile m )
+ + diff --git a/Docs/types/InstrumentPickedCallback.html b/Docs/types/InstrumentPickedCallback.html new file mode 100644 index 0000000..92db938 --- /dev/null +++ b/Docs/types/InstrumentPickedCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - InstrumentPickedCallback + + +

Back to Server.Items

+

InstrumentPickedCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) InstrumentPickedCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, BaseInstrument instrument, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, BaseInstrument instrument )
+ + diff --git a/Docs/types/InstrumentQuality.html b/Docs/types/InstrumentQuality.html new file mode 100644 index 0000000..69a496d --- /dev/null +++ b/Docs/types/InstrumentQuality.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InstrumentQuality + + +

Back to Server.Items

+

InstrumentQuality (Enum)

+ Low = 0,
+ Regular = 1,
+ Exceptional = 2
+ + diff --git a/Docs/types/InterfaceCommand.html b/Docs/types/InterfaceCommand.html new file mode 100644 index 0000000..d9339f3 --- /dev/null +++ b/Docs/types/InterfaceCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InterfaceCommand + + +

Back to Server.Commands.Generic

+

InterfaceCommand : BaseCommand

+ (ctor) InterfaceCommand()
+ virtual void ExecuteList( CommandEventArgs e, ArrayList list )
+ + diff --git a/Docs/types/InterfaceGump.html b/Docs/types/InterfaceGump.html new file mode 100644 index 0000000..568cbfa --- /dev/null +++ b/Docs/types/InterfaceGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InterfaceGump + + +

Back to Server.Commands.Generic

+

InterfaceGump : BaseGridGump

+ (ctor) InterfaceGump( Mobile from, string[] columns, ArrayList list, int page, object select )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void Render()
+ + diff --git a/Docs/types/InterfaceItemGump.html b/Docs/types/InterfaceItemGump.html new file mode 100644 index 0000000..5967a17 --- /dev/null +++ b/Docs/types/InterfaceItemGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - InterfaceItemGump + + +

Back to Server.Commands.Generic

+

InterfaceItemGump : BaseGridGump

+ (ctor) InterfaceItemGump( Mobile from, string[] columns, ArrayList list, int page, Item item )
+ void InvokeCommand( string ip )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void Render()
+ + diff --git a/Docs/types/InterfaceMobileGump.html b/Docs/types/InterfaceMobileGump.html new file mode 100644 index 0000000..972b591 --- /dev/null +++ b/Docs/types/InterfaceMobileGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - InterfaceMobileGump + + +

Back to Server.Commands.Generic

+

InterfaceMobileGump : BaseGridGump

+ (ctor) InterfaceMobileGump( Mobile from, string[] columns, ArrayList list, int page, Mobile mob )
+ void InvokeCommand( string ip )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void Render()
+ + diff --git a/Docs/types/InteriorDecorator.html b/Docs/types/InteriorDecorator.html new file mode 100644 index 0000000..8fc9833 --- /dev/null +++ b/Docs/types/InteriorDecorator.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - InteriorDecorator + + +

Back to Server.Items

+

InteriorDecorator : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump, InternalTarget

+ (static) bool CheckUse( InteriorDecorator tool, Mobile from )
+ (static) bool InHouse( Mobile from )
+ (ctor) InteriorDecorator()
+ (ctor) InteriorDecorator( Serial serial )
+ DecorateCommand Command( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/InternalAccessException.html b/Docs/types/InternalAccessException.html new file mode 100644 index 0000000..979a4b1 --- /dev/null +++ b/Docs/types/InternalAccessException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - InternalAccessException + + +

Back to Server

+

InternalAccessException : AccessException, ISerializable, _Exception

+ (ctor) InternalAccessException( Property property )
+ + diff --git a/Docs/types/InternalBuyInfo.html b/Docs/types/InternalBuyInfo.html new file mode 100644 index 0000000..7399ecd --- /dev/null +++ b/Docs/types/InternalBuyInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - InternalBuyInfo + + +

Back to Server.Mobiles

+

(SBWeaver) - InternalBuyInfo : List`1, IList<GenericBuyInfo>, ICollection<GenericBuyInfo>, IEnumerable<GenericBuyInfo>, IEnumerable, IList, ICollection

+ (ctor) InternalBuyInfo()
+ + diff --git a/Docs/types/InternalComparer.html b/Docs/types/InternalComparer.html new file mode 100644 index 0000000..f80d068 --- /dev/null +++ b/Docs/types/InternalComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternalComparer + + +

Back to Server.Gumps

+

(WhoGump) - InternalComparer : IComparer<Mobile>

+ (ctor) InternalComparer()
+ virtual int Compare( Mobile x, Mobile y )
+ + diff --git a/Docs/types/InternalEntry.html b/Docs/types/InternalEntry.html new file mode 100644 index 0000000..527a25c --- /dev/null +++ b/Docs/types/InternalEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternalEntry + + +

Back to Server.Mobiles

+

(BaseAI) - InternalEntry : ContextMenuEntry

+ (ctor) InternalEntry( Mobile from, int number, int range, BaseCreature mobile, BaseAI ai, OrderType order )
+ virtual void OnClick()
+ + diff --git a/Docs/types/InternalEnumerator.html b/Docs/types/InternalEnumerator.html new file mode 100644 index 0000000..d117500 --- /dev/null +++ b/Docs/types/InternalEnumerator.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - InternalEnumerator + + +

Back to Server

+

(NullEnumerable) - InternalEnumerator : IEnumerator

+ (ctor) InternalEnumerator()
+ object Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/InternalFirstTarget.html b/Docs/types/InternalFirstTarget.html new file mode 100644 index 0000000..4c678c0 --- /dev/null +++ b/Docs/types/InternalFirstTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternalFirstTarget + + +

Back to Server.SkillHandlers

+

(Provocation) - InternalFirstTarget : Target

+ (ctor) InternalFirstTarget( Mobile from, BaseInstrument instrument )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/InternalGump.html b/Docs/types/InternalGump.html new file mode 100644 index 0000000..9083483 --- /dev/null +++ b/Docs/types/InternalGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InternalGump + + +

Back to Server.Items

+

(WeaponEngravingTool) - InternalGump : Gump

+

Nested Types: Buttons

+ (ctor) InternalGump( WeaponEngravingTool tool, BaseWeapon target )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/InternalItem.html b/Docs/types/InternalItem.html new file mode 100644 index 0000000..5eebac6 --- /dev/null +++ b/Docs/types/InternalItem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - InternalItem + + +

Back to Server.Spells.Third

+

(WallOfStoneSpell) - InternalItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer

+ (ctor) InternalItem( Serial serial )
+ (ctor) InternalItem( Point3D loc, Map map, Mobile caster )
+ bool BlocksFit( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/InternalItem2.html b/Docs/types/InternalItem2.html new file mode 100644 index 0000000..9b5f621 --- /dev/null +++ b/Docs/types/InternalItem2.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - InternalItem2 + + +

Back to Server.Items

+

(LargeForgeWest) - InternalItem2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) InternalItem2( LargeForgeWest item )
+ (ctor) InternalItem2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/InternalPicker.html b/Docs/types/InternalPicker.html new file mode 100644 index 0000000..e0b2ae7 --- /dev/null +++ b/Docs/types/InternalPicker.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternalPicker + + +

Back to Server.Items

+

(InternalTarget) - InternalPicker : HuePicker

+ (ctor) InternalPicker( DyeTub tub )
+ virtual void OnResponse( int hue )
+ + diff --git a/Docs/types/InternalPrompt.html b/Docs/types/InternalPrompt.html new file mode 100644 index 0000000..43f9418 --- /dev/null +++ b/Docs/types/InternalPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InternalPrompt + + +

Back to Server.Items

+

(GuildDeed) - InternalPrompt : Prompt

+ (ctor) InternalPrompt( GuildDeed deed )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/InternalSecondTarget.html b/Docs/types/InternalSecondTarget.html new file mode 100644 index 0000000..71eb6f4 --- /dev/null +++ b/Docs/types/InternalSecondTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternalSecondTarget + + +

Back to Server.SkillHandlers

+

(Provocation) - InternalSecondTarget : Target

+ (ctor) InternalSecondTarget( Mobile from, BaseInstrument instrument, BaseCreature creature )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/InternalSellInfo.html b/Docs/types/InternalSellInfo.html new file mode 100644 index 0000000..09b09b1 --- /dev/null +++ b/Docs/types/InternalSellInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - InternalSellInfo + + +

Back to Server.Mobiles

+

(SBThief) - InternalSellInfo : GenericSellInfo, IShopSellInfo

+ (ctor) InternalSellInfo()
+ + diff --git a/Docs/types/InternalSorter.html b/Docs/types/InternalSorter.html new file mode 100644 index 0000000..8161ad7 --- /dev/null +++ b/Docs/types/InternalSorter.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternalSorter + + +

Back to Server.SkillHandlers

+

(TrackWhoGump) - InternalSorter : IComparer<Mobile>

+ (ctor) InternalSorter( Mobile from )
+ virtual int Compare( Mobile x, Mobile y )
+ + diff --git a/Docs/types/InternalTarget.html b/Docs/types/InternalTarget.html new file mode 100644 index 0000000..9b00e99 --- /dev/null +++ b/Docs/types/InternalTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InternalTarget + + +

Back to Server.Spells.Third

+

(FireballSpell) - InternalTarget : Target

+ (ctor) InternalTarget( FireballSpell owner )
+ virtual void OnTarget( Mobile from, object o )
+ virtual void OnTargetFinish( Mobile from )
+ + diff --git a/Docs/types/InternalTargetDst.html b/Docs/types/InternalTargetDst.html new file mode 100644 index 0000000..2d2a8cf --- /dev/null +++ b/Docs/types/InternalTargetDst.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - InternalTargetDst + + +

Back to Server.SkillHandlers

+

(Inscribe) - InternalTargetDst : Target

+ (ctor) InternalTargetDst( BaseBook bookSrc )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType )
+ virtual void OnTargetFinish( Mobile from )
+ + diff --git a/Docs/types/InternalTargetPoison.html b/Docs/types/InternalTargetPoison.html new file mode 100644 index 0000000..02d894d --- /dev/null +++ b/Docs/types/InternalTargetPoison.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InternalTargetPoison + + +

Back to Server.SkillHandlers

+

(Poisoning) - InternalTargetPoison : Target

+

Nested Types: InternalTarget

+ (ctor) InternalTargetPoison()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/InternalTargetSrc.html b/Docs/types/InternalTargetSrc.html new file mode 100644 index 0000000..5f47eeb --- /dev/null +++ b/Docs/types/InternalTargetSrc.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - InternalTargetSrc + + +

Back to Server.SkillHandlers

+

(Inscribe) - InternalTargetSrc : Target

+ (ctor) InternalTargetSrc()
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType )
+ + diff --git a/Docs/types/InternalTimer.html b/Docs/types/InternalTimer.html new file mode 100644 index 0000000..a8adbe5 --- /dev/null +++ b/Docs/types/InternalTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternalTimer + + +

Back to Server.Spells.Third

+

(InternalItem) - InternalTimer : Timer

+ (ctor) InternalTimer( InternalItem item, TimeSpan duration )
+ virtual void OnTick()
+ + diff --git a/Docs/types/InternalizeTimer.html b/Docs/types/InternalizeTimer.html new file mode 100644 index 0000000..15cac17 --- /dev/null +++ b/Docs/types/InternalizeTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternalizeTimer + + +

Back to Server.Multis

+

(MovingCrate) - InternalizeTimer : Timer

+ (ctor) InternalizeTimer( MovingCrate crate )
+ virtual void OnTick()
+ + diff --git a/Docs/types/InternationalCode.html b/Docs/types/InternationalCode.html new file mode 100644 index 0000000..6aff4b0 --- /dev/null +++ b/Docs/types/InternationalCode.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - InternationalCode + + +

Back to Server.Misc

+

(LanguageStatistics) - InternationalCode

+ (ctor) InternationalCode( string code, string language, string country )
+ (ctor) InternationalCode( string code, string language, string country, string language_localname, string country_localname )
+ string Code( get; )
+ string Country( get; )
+ string Country_LocalName( get; )
+ string Language( get; )
+ string Language_LocalName( get; )
+ string GetName()
+ + diff --git a/Docs/types/InternationalCodeComparer.html b/Docs/types/InternationalCodeComparer.html new file mode 100644 index 0000000..44a0ab7 --- /dev/null +++ b/Docs/types/InternationalCodeComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - InternationalCodeComparer + + +

Back to Server.Misc

+

(LanguageStatistics) - InternationalCodeComparer : IComparer<InternationalCodeCounter>

+ (ctor) InternationalCodeComparer()
+ virtual int Compare( InternationalCodeCounter x, InternationalCodeCounter y )
+ + diff --git a/Docs/types/InternationalCodeCounter.html b/Docs/types/InternationalCodeCounter.html new file mode 100644 index 0000000..af563d1 --- /dev/null +++ b/Docs/types/InternationalCodeCounter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - InternationalCodeCounter + + +

Back to Server.Misc

+

(LanguageStatistics) - InternationalCodeCounter

+ (ctor) InternationalCodeCounter( string code )
+ string Code( get; )
+ int Count( get; )
+ void Increase()
+ + diff --git a/Docs/types/InterredGrizzle.html b/Docs/types/InterredGrizzle.html new file mode 100644 index 0000000..4e9c7a3 --- /dev/null +++ b/Docs/types/InterredGrizzle.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - InterredGrizzle + + +

Back to Server.Mobiles

+

InterredGrizzle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) InterredGrizzle()
+ (ctor) InterredGrizzle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/InvalidAccountAccessLog.html b/Docs/types/InvalidAccountAccessLog.html new file mode 100644 index 0000000..0a8d1e1 --- /dev/null +++ b/Docs/types/InvalidAccountAccessLog.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - InvalidAccountAccessLog + + +

Back to Server.Accounting

+

InvalidAccountAccessLog

+ (ctor) InvalidAccountAccessLog( IPAddress address )
+ IPAddress Address( get; set; )
+ int Counts( get; set; )
+ bool HasExpired( get; )
+ DateTime LastAccessTime( get; set; )
+ void RefreshAccessTime()
+ + diff --git a/Docs/types/InvalidMapEnable.html b/Docs/types/InvalidMapEnable.html new file mode 100644 index 0000000..9fb1951 --- /dev/null +++ b/Docs/types/InvalidMapEnable.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - InvalidMapEnable + + +

Back to Server.Network

+

InvalidMapEnable : Packet

+ (ctor) InvalidMapEnable()
+ + diff --git a/Docs/types/InvisibilityScroll.html b/Docs/types/InvisibilityScroll.html new file mode 100644 index 0000000..80fa58f --- /dev/null +++ b/Docs/types/InvisibilityScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - InvisibilityScroll + + +

Back to Server.Items

+

InvisibilityScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) InvisibilityScroll()
+ (ctor) InvisibilityScroll( int amount )
+ (ctor) InvisibilityScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/InvisibilitySpell.html b/Docs/types/InvisibilitySpell.html new file mode 100644 index 0000000..602f5c3 --- /dev/null +++ b/Docs/types/InvisibilitySpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - InvisibilitySpell + + +

Back to Server.Spells.Sixth

+

InvisibilitySpell : MagerySpell, ISpell

+

Nested Types: InternalTarget, InternalTimer

+ (static) bool HasTimer( Mobile m )
+ (static) void RemoveTimer( Mobile m )
+ (ctor) InvisibilitySpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/IolosLute.html b/Docs/types/IolosLute.html new file mode 100644 index 0000000..1c78f54 --- /dev/null +++ b/Docs/types/IolosLute.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - IolosLute + + +

Back to Server.Items

+

IolosLute : Lute, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) IolosLute()
+ (ctor) IolosLute( Serial serial )
+ int InitMaxUses( get; )
+ int InitMinUses( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronGate.html b/Docs/types/IronGate.html new file mode 100644 index 0000000..738016c --- /dev/null +++ b/Docs/types/IronGate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IronGate + + +

Back to Server.Items

+

IronGate : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) IronGate( DoorFacing facing )
+ (ctor) IronGate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronGateShort.html b/Docs/types/IronGateShort.html new file mode 100644 index 0000000..e8942f6 --- /dev/null +++ b/Docs/types/IronGateShort.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - IronGateShort + + +

Back to Server.Items

+

IronGateShort : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) IronGateShort( DoorFacing facing )
+ (ctor) IronGateShort( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronIngot.html b/Docs/types/IronIngot.html new file mode 100644 index 0000000..fcf3da1 --- /dev/null +++ b/Docs/types/IronIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - IronIngot + + +

Back to Server.Items

+

IronIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) IronIngot()
+ (ctor) IronIngot( int amount )
+ (ctor) IronIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronMaidenAddon.html b/Docs/types/IronMaidenAddon.html new file mode 100644 index 0000000..3d2ea95 --- /dev/null +++ b/Docs/types/IronMaidenAddon.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - IronMaidenAddon + + +

Back to Server.Items

+

IronMaidenAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) IronMaidenAddon()
+ (ctor) IronMaidenAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ void Activate( object obj )
+ virtual void Activate( AddonComponent c, Mobile from )
+ void Deactivate( object obj )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronMaidenDeed.html b/Docs/types/IronMaidenDeed.html new file mode 100644 index 0000000..d9dbf5a --- /dev/null +++ b/Docs/types/IronMaidenDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IronMaidenDeed + + +

Back to Server.Items

+

IronMaidenDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IronMaidenDeed()
+ (ctor) IronMaidenDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronOre.html b/Docs/types/IronOre.html new file mode 100644 index 0000000..455fcea --- /dev/null +++ b/Docs/types/IronOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - IronOre + + +

Back to Server.Items

+

IronOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) IronOre()
+ (ctor) IronOre( int amount )
+ (ctor) IronOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronWire.html b/Docs/types/IronWire.html new file mode 100644 index 0000000..d8bf2e1 --- /dev/null +++ b/Docs/types/IronWire.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - IronWire + + +

Back to Server.Items

+

IronWire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) IronWire()
+ (ctor) IronWire( int amount )
+ (ctor) IronWire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronWorker.html b/Docs/types/IronWorker.html new file mode 100644 index 0000000..cfac52e --- /dev/null +++ b/Docs/types/IronWorker.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - IronWorker + + +

Back to Server.Mobiles

+

IronWorker : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) IronWorker()
+ (ctor) IronWorker( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/IronwoodCrown.html b/Docs/types/IronwoodCrown.html new file mode 100644 index 0000000..8619d06 --- /dev/null +++ b/Docs/types/IronwoodCrown.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - IronwoodCrown + + +

Back to Server.Items

+

IronwoodCrown : RavenHelm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) IronwoodCrown()
+ (ctor) IronwoodCrown( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Item.html b/Docs/types/Item.html new file mode 100644 index 0000000..7906594 --- /dev/null +++ b/Docs/types/Item.html @@ -0,0 +1,259 @@ + + + RunUO Documentation - Class Overview - Item + + +

Back to Server

+

Item : IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: AcidSlime, AddonComponent, AddonContainerComponent, AlchemyStone, Amber, Amethyst, AncientUrn, AniLargeVioletFlask, AniRedRibbedFlask, AniSmallBlueFlask, AnkhNorth, AnkhWest, Anvil, ArcaneGem, Arrow, ArtifactLargeVase, ArtifactVase, Axle, AxleGears, BadCard, BagOfSending, BallOfSummoning, BambooChair, BambooScreen, Bandage, BankCheck, Banner, BannerDeed, BarkeepContract, BarkFragment, BarrelHoops, BarrelLid, BarrelStaves, BarrelTap, BaseAddon, BaseAddonContainerDeed, BaseAddonDeed, BaseArmor, BaseBeverage, BaseBoatDeed, BaseBook, BaseBulletinBoard, BaseClothing, BaseClothMaterial, BaseDecorationArtifact, BaseDockedBoat, BaseDoor, BaseFactionTrapDeed, BaseFloor, BaseFormTalisman, BaseGranite, BaseHarvestTool, BaseHides, BaseImprisonedMobile, BaseIngot, BaseInstrument, BaseJewel, BaseLeather, BaseLight, BaseMagicFish, BaseMulti, BaseOre, BasePiece, BasePigmentsOfTokuno, BasePlayerBB, BasePotion, BaseReagent, BaseScales, BaseSign, BaseSuit, BaseSystemController, BaseTalisman, BaseTool, BaseTrap, BaseWall, BaseWeapon, BaseWindChimes, Beads, Beard, Bedroll, Beeswax, BellOfTheDead, BigElvenChair, BigFish, BlankScroll, Blight, Blocker, Blood, BlueBeaker, BlueCurvedFlask, BlueDiamond, BlueSnowflake, Board, Bola, BolaBall, Bolt, BoltOfCloth, Bone, BonePile, Bottle, BowlFlour, BrilliantAmber, BroadcastCrystal, BrokenChair, BulkOrderBook, BulletinMessage, BunnyHole, BustEast, BustSouth, Campfire, CandelabraOfSouls, CapturedEssence, Cards, Cards2, Cards3, Cards4, Cauldron, ChampionSkull, ChampionSpawn, CharacterStatueDeed, CharacterStatueMaker, Checkers, Checkers2, Chessmen, Chessmen2, Chessmen3, ChiselsNorth, ChiselsWest, ChylothShroud, Citrine, Clock, ClockFrame, ClockParts, ClockworkAssembly, Cloth, ClothingBlessDeed, Coal, ColoredAnvil, CommodityDeed, Container, ContractOfEmployment, CookableFood, CopperWire, Corruption, Cotton, CoveredChair, CrossbowBolts, CrystalCaveBarrier, CurvedFlask, DarkSapphire, DarkSource, DawnsMusicBox, DawnsMusicGear, DeceitBrazier, DecoArrowShafts, DecoBlackmoor, DecoBloodspawn, DecoBottlesOfLiquor, DecoBridle, DecoBridle2, DecoBrimstone, DecoCards5, DecoCrystalBall, DecoDeckOfTarot, DecoDeckOfTarot2, DecoDragonsBlood, DecoDragonsBlood2, DecoEyeOfNewt, DecoFlower, DecoFlower2, DecoFullJar, DecoFullJars3, DecoFullJars4, DecoGarlic, DecoGarlic2, DecoGarlicBulb, DecoGarlicBulb2, DecoGinseng, DecoGinseng2, DecoGinsengRoot, DecoGinsengRoot2, DecoGoldIngot, DecoGoldIngot2, DecoGoldIngots, DecoGoldIngots2, DecoGoldIngots3, DecoGoldIngots4, DecoHay, DecoHay2, DecoHorseDung, DecoIronIngot, DecoIronIngot2, DecoIronIngots, DecoIronIngots2, DecoIronIngots3, DecoIronIngots4, DecoIronIngots5, DecoIronIngots6, DecoMagicalCrystal, DecoMandrake, DecoMandrake2, DecoMandrake3, DecoMandrakeRoot, DecoMandrakeRoot2, DecoNightshade, DecoNightshade2, DecoNightshade3, DecoObsidian, DecoPumice, DecorativeAxeNorth, DecorativeAxeWest, DecorativeBowNorth, DecorativeBowWest, DecorativeDAxeNorth, DecorativeDAxeWest, DecorativeShield, DecorativeShield1, DecorativeShield10, DecorativeShield11, DecorativeShield2, DecorativeShield3, DecorativeShield4, DecorativeShield5, DecorativeShield6, DecorativeShield7, DecorativeShield8, DecorativeShield9, DecorativeShieldDeed, DecorativeShieldSword1North, DecorativeShieldSword1West, DecorativeShieldSword2North, DecorativeShieldSword2West, DecorativeSwordNorth, DecorativeSwordWest, DecorativeTopiary, DecoRock, DecoRock2, DecoRocks, DecoRocks2, DecoRoseOfTrinsic, DecoRoseOfTrinsic2, DecoRoseOfTrinsic3, DecoSilverIngot, DecoSilverIngot2, DecoSilverIngots, DecoSilverIngots2, DecoSilverIngots3, DecoSilverIngots4, DecoSilverIngots5, DecoSpittoon, DecoTarot, DecoTarot2, DecoTarot3, DecoTarot4, DecoTarot5, DecoTarot6, DecoTarot7, DecoTray, DecoTray2, DecoWyrmsHeart, DemonSkull, Diamond, Dices, DirtPatch, DirtyFrypan, DirtyKettle, DirtyPan, DirtyPot, DirtyRoundPot, DirtySmallPot, DirtySmallRoundPot, DiseasedBark, DisguiseKit, DisguisePersistance, Dough, DragonBardingDeed, DreadHornMane, Dressform, DriedHerbs, DriedOnions, Dyes, DyeTub, DynamicTeleporter, Easle, EcruCitrine, EffectController, EffectItem, EggBomb, Eggshells, ElegantLowTable, ElvenReadingChair, Emerald, EmptyBentoBox, EmptyCurvedFlaskE, EmptyCurvedFlaskW, EmptyJar, EmptyJars, EmptyJars2, EmptyJars3, EmptyJars4, EmptyPewterBowl, EmptyPewterTub, EmptyRibbedFlask, EmptyToolKit, EmptyToolKit2, EmptyVial, EmptyVialsWRack, EmptyWoodenBowl, EmptyWoodenTub, EnchantedSextant, EnchantedSwitch, EtherealMount, EthicsPersistance, EvilIdolSkull, ExecutionersCap, EyeOfTheTravesty, FactionPersistance, FactionTrapRemovalKit, FancyWoodenChairCushion, FarmableCrop, Feather, FertileDirt, FestiveCactus, Firebomb, FirebombField, FireFieldItem, FireHorn, FireRuby, Fish, FishingPole, FlamingHeadDeed, Flax, Food, FootStool, Forge, ForgedMetal, Fork, ForkLeft, ForkRight, Fukiya, FukiyaDarts, FullVialsWRack, Futon, GamblingStone, GauntletSpawner, Gears, GhostShipAnchor, Glass, GlassblowingBook, GlassBottle, Globe, Gold, GoldBricks, GoldenSkull, GoldWire, GrandGrimoire, GreenBeaker, GreenBottle, GreenCurvedFlask, GreenDriedFlowers, GreenTeaBasket, GreenThorns, GreenThornsSHTeleporter, GrizzledBones, GuardianBarrier, GuildDeed, Guildstone, GuildstoneDeed, GuildTeleporter, Guillotine, Hair, HairDye, HairRestylingDeed, HalfEmptyJar, HalfEmptyJars, HangingSkeleton, HangingSkeletonDeed, HangoverCure, HaochisKatanaGenerator, Head, HeritageToken, Hinge, HolidayBell, HolidayTree, HolidayTreeDeed, HollowPrism, HonorableSwords, HornOfRetreat, HorseShoes, Hourglass, HourglassAni, HouseDeed, HousePlacementTool, HouseRaffleDeed, HouseRaffleStone, HouseSign, HouseTeleporter, IcicleLargeEast, IcicleLargeSouth, IcicleMedEast, IcicleMedSouth, IcicleSmallEast, IcicleSmallSouth, IcyPatch, IdolOfTheChampion, IngotStone, InteriorDecorator, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem, InternalItem2, InternalItem2, IronWire, JarHoney, Jars2, Jars3, Jars4, JeweledFiligree, Key, KeyRing, KhaldunPitTeleporter, Kindling, Knife, KnifeLeft, KnifeRight, LadyPortrait1, LadyPortrait2, LampRoomBox, LampRoomTeleporter, LardOfParoxysmus, LargeBOD, LargeEmptyFlask, LargeEmptyPot, LargeFlask, LargeForgeEast, LargeForgeWest, LargePainting, LargeTable, LargeVase, LargeVioletFlask, LargeYellowFlask, LavaTile, LeftArm, LeftLeg, LeverPuzzleController, LeverPuzzleLever, LeverPuzzleStatue, LightOfTheWinterSolstice, LightSource, Lockpick, Lockpicks, Log, LongFlask, LOSBlocker, LtBlueCurvedFlask, LuminescentFungi, MagicFlute, MahjongGame, ManPortrait1, ManPortrait2, MapItem, MasonryBook, MediumFlask, MeltedWax, MessageInABottle, MinotaurHedge, MistletoeAddon, MistletoeDeed, MonsterStatuette, MoonfireBrew, Moongate, Moonstone, MorphItem, MountItem, Muculent, NameChangeDeed, NewPlayerTicket, Nightstand, Obelisk, Obsidian, OilCloth, OrangePetals, OrigamiButterfly, OrigamiFish, OrigamiFrog, OrigamiPaper, OrigamiShape, OrigamiSongbird, OrigamiSwan, Ornament, OrnateElvenChair, PaintedImage, PaintsAndBrush, ParasiticPlant, PenAndInk, PerfectEmerald, Pier, PileOfGlacialSnow, PlagueBeastGland, PlagueBeastInnard, PlagueBeastMutationCore, PlainLowTable, Plank, PlantBowl, PlantItem, Plate, PlayerVendorPlaceholder, PlayingCards, PlayingCards2, PoolOfAcid, PotionKeg, PottedCactus, PottedCactus1, PottedCactus2, PottedCactus3, PottedCactus4, PottedCactus5, PottedCactusDeed, PottedPlant, PottedPlant1, PottedPlant2, PottedTree, PottedTree1, PowderOfTemperament, PowderOfTranslocation, PowerCrystal, PristineDreadHorn, PromotionalToken, PublicMoongate, Putrefication, QuestItem, RaisableItem, RaiseSwitch, RecallRune, ReceiverCrystal, RecipeScroll, RedBeaker, RedBottle, RedCurvedFlask, RedLeaves, RedPoinsettia, RedRibbedFlask, RegStone, RepairDeed, ResGate, RewardBrazier, RewardBrazierDeed, RewardCake, RewardPottedCactus, RibCage, RightArm, RightLeg, Rope, RoseInAVase, RoseOfTrinsic, RoseOfTrinsicPetal, Ruby, RuinedArmoire, RuinedBookcase, RuinedBooks, RuinedChair, RuinedClock, RuinedDrawers, RuinedFallenChairA, RuinedFallenChairB, RuinedPainting, Runebook, RunedPrism, RunedSwitch, SackFlour, Sand, SandMiningBook, Sapphire, Scales, Scissors, Scourge, ScribeStone, Seed, SerpentPillar, Sextant, SextantParts, Shaft, ShardPoller, SheafOfHay, ShipModelOfTheHMSCape, ShipwreckedItem, ShojiScreen, ShortMusicStand, Shuriken, Silver, SilverWire, SkullPole, SmallBlueBottle, SmallBlueFlask, SmallBOD, SmallBrownBottle, SmallEmptyFlask, SmallEmptyPot, SmallFlask, SmallGreenBottle, SmallGreenBottle2, SmallRedFlask, SmallTowerSculpture, SmallUrn, SmallVioletBottle, SmallYellowFlask, SmithStone, SmokeBomb, Snowman, SnowPile, SnowPileDeco, SnowyTree, SOS, SoulStone, Spawner, SpawnPersistence, SpecialBeardDye, SpecialFishingNet, SpecialHairDye, SpecialScroll, Spellbook, SpellScroll, SpinningHourglass, Spoon, SpoonLeft, SpoonRight, Springs, Spyglass, StainedOoze, StarSapphire, Static, StatueEast, StatueEast2, StatueNorth, StatuePegasus, StatuePegasus2, StatueSouth, StatueSouth2, StatueSouthEast, StatueWest, StealableArtifactsSpawner, StoneChair, StoneMiningBook, Stool, SummonedPaladinMoongate, SwampTile, SwarmOfFlies, SweetDough, SwitchItem, TailorStone, Taint, TallMusicStand, Tapestry1N, Tapestry2N, Tapestry2W, Tapestry3N, Tapestry3W, Tapestry4N, Tapestry4W, Tapestry5N, Tapestry5W, Tapestry6N, Tapestry6W, TapestryOfSosaria, TatteredAncientMummyWrapping, TaxidermyKit, Teleporter, Throne, ThrowingDagger, TillerMan, TinyRedBottle, TinyYellowBottle, ToolKit, TormentedChains, Torso, Tourmaline, TransferItem, TransferItem, TransientItem, TreasureChestDirt, TreasuresOfTokunoPersistance, TreeTrunk, TribalBerry, TribalPaint, TrophyAddon, TrophyDeed, Turquoise, UncutCloth, UnfinishedBarrel, UnholyBone, ValentinesCard, Vase, VaultOfSecretsBarrier, VendorRentalContract, Vines, VioletRibbedFlask, VirtualMountItem, VirtualMountItem, WallBlood, WarningItem, Wasabi, WaterTile, WayPoint, WeaponEngravingTool, Web, WheatSheaf, Whip, WhiteDriedFlowers, WhitePearl, WhitePoinsettia, WhiteSnowflake, WindSpirit, WomanPortrait1, WomanPortrait2, WoodDebris, WoodenBench, WoodenBowl, WoodenChair, WoodenChairCushion, WoodenThrone, Wool, WreathAddon, WreathDeed, WritingTable, YellowBeaker, YewWoodTable, ZoogiFungus

+

Nested Types: CompactInfo, ImplFlag, SaveFlag

+ (static) TimeSpan DefaultDecayTime( get; set; )
+ (static) int LockedDownFlag( get; set; )
+ (static) bool ScissorCopyLootType( get; set; )
+ (static) int SecureFlag( get; set; )
+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) void ProcessDeltaQueue()
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (ctor) Item()
+ (ctor) Item( int itemID )
+ (ctor) Item( Serial serial )
+ int Amount( get; set; )
+ Mobile BlessedFor( get; set; )
+ bool BlocksFit( get; )
+ bool CanTarget( get; )
+ int ColdResistance( get; )
+ bool Decays( get; )
+ TimeSpan DecayTime( get; )
+ string DefaultName( get; )
+ double DefaultWeight( get; )
+ bool Deleted( get; )
+ Direction Direction( get; set; )
+ bool DisplayLootType( get; )
+ bool DisplayWeight( get; )
+ int EnergyResistance( get; )
+ int FireResistance( get; )
+ bool ForceShowProperties( get; )
+ bool HandlesOnMovement( get; )
+ bool HandlesOnSpeech( get; )
+ Mobile HeldBy( get; set; )
+ int Hue( get; set; )
+ int HuedItemID( get; )
+ bool InSecureTrade( get; )
+ bool Insured( get; set; )
+ bool IsLockedDown( get; set; )
+ bool IsSecure( get; set; )
+ bool IsVirtualItem( get; )
+ ItemData ItemData( get; )
+ int ItemID( get; set; )
+ List<Item> Items( get; )
+ int LabelNumber( get; )
+ DateTime LastMoved( get; set; )
+ Layer Layer( get; set; )
+ LightType Light( get; set; )
+ Point3D Location( get; set; )
+ LootType LootType( get; set; )
+ Map Map( get; set; )
+ bool Movable( get; set; )
+ string Name( get; set; )
+ bool Nontransferable( get; )
+ Packet OPLPacket( get; )
+ object Parent( get; set; )
+ IEntity ParentEntity( get; )
+ bool PayedInsurance( get; set; )
+ int PhysicalResistance( get; )
+ int PileWeight( get; )
+ int PoisonResistance( get; )
+ ObjectPropertyList PropertyList( get; )
+ bool QuestItem( get; set; )
+ int QuestItemHue( get; )
+ Packet RemovePacket( get; )
+ object RootParent( get; )
+ IEntity RootParentEntity( get; )
+ int SavedFlags( get; set; )
+ Serial Serial( get; )
+ int Server.ISerializable.SerialIdentity( get; )
+ int Server.ISerializable.TypeReference( get; )
+ ISpawner Spawner( get; set; )
+ bool Stackable( get; set; )
+ int TempFlags( get; set; )
+ int TotalGold( get; )
+ int TotalItems( get; )
+ int TotalWeight( get; )
+ bool Visible( get; set; )
+ double Weight( get; set; )
+ Packet WorldPacket( get; )
+ Packet WorldPacketHS( get; )
+ Packet WorldPacketSA( get; )
+ int X( get; set; )
+ int Y( get; set; )
+ int Z( get; set; )
+ CompactInfo AcquireCompactInfo()
+ List<Item> AcquireItems()
+ virtual void AddBlessedForProperty( ObjectPropertyList list, Mobile m )
+ virtual void AddItem( Item item )
+ virtual void AddLockedDownProperty( ObjectPropertyList list )
+ virtual void AddLootTypeProperty( ObjectPropertyList list )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void AddQuestItemProperty( ObjectPropertyList list )
+ virtual void AddResistanceProperties( ObjectPropertyList list )
+ virtual void AddSecureProperty( ObjectPropertyList list )
+ virtual void AddWeightProperty( ObjectPropertyList list )
+ virtual bool AllowEquipedCast( Mobile from )
+ virtual bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ virtual void AppendChildNameProperties( ObjectPropertyList list )
+ virtual void AppendChildProperties( ObjectPropertyList list )
+ bool AtPoint( int x, int y )
+ bool AtWorldPoint( int x, int y )
+ void Bounce( Mobile from )
+ virtual bool CanEquip( Mobile m )
+ virtual bool CheckBlessed( Mobile m )
+ virtual bool CheckBlessed( object obj )
+ virtual bool CheckConflictingLayer( Mobile m, Item item, Layer layer )
+ bool CheckItemUse( Mobile from )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ bool CheckLift( Mobile from )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ virtual bool CheckNewbied()
+ virtual bool CheckPropertyConfliction( Mobile m )
+ virtual bool CheckTarget( Mobile from, Target targ, object targeted )
+ void ClearBounce()
+ void ClearProperties()
+ virtual int CompareTo( Item other )
+ virtual int CompareTo( IEntity other )
+ virtual int CompareTo( object other )
+ virtual void Consume()
+ virtual void Consume( int amount )
+ virtual void Delete()
+ void Delta( ItemDelta flags )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool DropToItem( Mobile from, Item target, Point3D p )
+ virtual bool DropToMobile( Mobile from, Mobile target, Point3D p )
+ virtual bool DropToWorld( Mobile from, Point3D p )
+ void FixHolding_Sandbox()
+ virtual void FreeCache()
+ BounceInfo GetBounce()
+ virtual void GetChildContextMenuEntries( Mobile from, List<ContextMenuEntry> list, Item item )
+ virtual void GetChildNameProperties( ObjectPropertyList list, Item item )
+ virtual void GetChildProperties( ObjectPropertyList list, Item item )
+ IPooledEnumerable GetClientsInRange( int range )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual int GetDropSound()
+ ExpandFlag GetExpandFlags()
+ bool GetFlag( ImplFlag flag )
+ Rectangle2D GetGraphicBounds()
+ IPooledEnumerable GetItemsInRange( int range )
+ virtual int GetLiftSound( Mobile from )
+ virtual int GetMaxUpdateRange()
+ IPooledEnumerable GetMobilesInRange( int range )
+ IPooledEnumerable GetObjectsInRange( int range )
+ virtual int GetPacketFlags()
+ virtual void GetProperties( ObjectPropertyList list )
+ bool GetSavedFlag( int flag )
+ SecureTradeContainer GetSecureTradeCont()
+ Point3D GetSurfaceTop()
+ bool GetTempFlag( int flag )
+ virtual int GetTotal( TotalType type )
+ virtual int GetUpdateRange( Mobile m )
+ Point3D GetWorldLocation()
+ virtual Packet GetWorldPacketFor( NetState state )
+ Point3D GetWorldTop()
+ virtual void HandleInvalidTransfer( Mobile from )
+ void Internalize()
+ void InvalidateProperties()
+ virtual bool IsAccessibleTo( Mobile check )
+ bool IsChildOf( object o )
+ bool IsChildOf( object o, bool allowNull )
+ virtual bool IsChildVisibleTo( Mobile m, Item child )
+ virtual bool IsStandardLoot()
+ virtual void LabelLootTypeTo( Mobile to )
+ void LabelTo( Mobile to, int number )
+ void LabelTo( Mobile to, string text )
+ void LabelTo( Mobile to, string format, object[] args )
+ void LabelTo( Mobile to, int number, string args )
+ void LabelToAffix( Mobile to, int number, AffixType type, string affix )
+ void LabelToAffix( Mobile to, int number, AffixType type, string affix, string args )
+ CompactInfo LookupCompactInfo()
+ List<Item> LookupItems()
+ virtual void MoveToWorld( Point3D location )
+ virtual void MoveToWorld( Point3D location, Map map )
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDelete()
+ virtual void OnAfterDuped( Item newItem )
+ virtual void OnAfterSpawn()
+ virtual void OnAmountChange( int oldValue )
+ virtual void OnAosSingleClick( Mobile from )
+ virtual void OnBeforeSpawn( Point3D location, Map m )
+ virtual bool OnDecay()
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnDoubleClickCantSee( Mobile from )
+ virtual void OnDoubleClickDead( Mobile from )
+ virtual void OnDoubleClickNotAccessible( Mobile from )
+ virtual void OnDoubleClickOutOfRange( Mobile from )
+ virtual void OnDoubleClickSecureTrade( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragLift( Mobile from )
+ virtual bool OnDroppedInto( Mobile from, Container target, Point3D p )
+ virtual bool OnDroppedOnto( Mobile from, Item target )
+ virtual bool OnDroppedToMobile( Mobile from, Mobile target )
+ virtual bool OnDroppedToWorld( Mobile from, Point3D p )
+ virtual bool OnEquip( Mobile from )
+ virtual void OnHelpRequest( Mobile from )
+ virtual DeathMoveResult OnInventoryDeath( Mobile parent )
+ virtual void OnItemAdded( Item item )
+ virtual void OnItemBounceCleared( Item item )
+ virtual void OnItemLifted( Mobile from, Item item )
+ virtual void OnItemRemoved( Item item )
+ virtual void OnItemUsed( Mobile from, Item item )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual bool OnMoveOff( Mobile m )
+ virtual bool OnMoveOver( Mobile m )
+ virtual DeathMoveResult OnParentDeath( Mobile parent )
+ virtual void OnParentDeleted( object parent )
+ virtual void OnRemoved( object parent )
+ virtual void OnSectorActivate()
+ virtual void OnSectorDeactivate()
+ virtual void OnSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnSingleClickContained( Mobile from, Item item )
+ virtual void OnSnoop( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void OnSubItemAdded( Item item )
+ virtual void OnSubItemBounceCleared( Item item )
+ virtual void OnSubItemRemoved( Item item )
+ bool ParentsContain()
+ virtual void ProcessDelta()
+ void PublicOverheadMessage( MessageType type, int hue, int number )
+ void PublicOverheadMessage( MessageType type, int hue, bool ascii, string text )
+ void PublicOverheadMessage( MessageType type, int hue, int number, string args )
+ void RecordBounce()
+ void ReleaseCompactInfo()
+ void ReleaseWorldPackets()
+ void RemDelta( ItemDelta flags )
+ virtual void RemoveItem( Item item )
+ virtual void ScissorHelper( Mobile from, Item newItem, int amountPerOldItem )
+ virtual void ScissorHelper( Mobile from, Item newItem, int amountPerOldItem, bool carryHue )
+ void SendInfoTo( NetState state )
+ virtual void SendInfoTo( NetState state, bool sendOplPacket )
+ void SendLocalizedMessageTo( Mobile to, int number )
+ void SendLocalizedMessageTo( Mobile to, int number, string args )
+ void SendLocalizedMessageTo( Mobile to, int number, AffixType affixType, string affix, string args )
+ virtual void SendPropertiesTo( Mobile from )
+ void SendRemovePacket()
+ virtual void Serialize( GenericWriter writer )
+ void SetFlag( ImplFlag flag, bool value )
+ void SetLastMoved()
+ void SetSavedFlag( int flag, bool value )
+ void SetTempFlag( int flag, bool value )
+ bool StackWith( Mobile from, Item dropped )
+ virtual bool StackWith( Mobile from, Item dropped, bool playSound )
+ virtual string ToString()
+ virtual void UpdateTotal( Item sender, TotalType type, int delta )
+ virtual void UpdateTotals()
+ void VerifyCompactInfo()
+ virtual bool VerifyMove( Mobile from )
+ + diff --git a/Docs/types/ItemBounds.html b/Docs/types/ItemBounds.html new file mode 100644 index 0000000..dfb4500 --- /dev/null +++ b/Docs/types/ItemBounds.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ItemBounds + + +

Back to Server

+

ItemBounds

+ (static) Rectangle2D[] Table( get; )
+ + diff --git a/Docs/types/ItemData.html b/Docs/types/ItemData.html new file mode 100644 index 0000000..68098c5 --- /dev/null +++ b/Docs/types/ItemData.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ItemData + + +

Back to Server

+

ItemData

+ (ctor) ItemData( string name, TileFlag flags, int weight, int quality, int quantity, int value, int height )
+ bool Bridge( get; set; )
+ int CalcHeight( get; )
+ TileFlag Flags( get; set; )
+ int Height( get; set; )
+ bool Impassable( get; set; )
+ string Name( get; set; )
+ int Quality( get; set; )
+ int Quantity( get; set; )
+ bool Surface( get; set; )
+ int Value( get; set; )
+ int Weight( get; set; )
+ + diff --git a/Docs/types/ItemDelta.html b/Docs/types/ItemDelta.html new file mode 100644 index 0000000..2cb694e --- /dev/null +++ b/Docs/types/ItemDelta.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ItemDelta + + +

Back to Server

+

ItemDelta (Enum)

+ None = 0x00000000,
+ Update = 0x00000001,
+ EquipOnly = 0x00000002,
+ Properties = 0x00000004
+ + diff --git a/Docs/types/ItemEntry.html b/Docs/types/ItemEntry.html new file mode 100644 index 0000000..5c8da49 --- /dev/null +++ b/Docs/types/ItemEntry.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ItemEntry + + +

Back to Server

+

(World) - ItemEntry : IEntityEntry

+ (ctor) ItemEntry( Item item, int typeID, string typeName, long pos, int length )
+ Item Item( get; )
+ int Length( get; )
+ long Position( get; )
+ Serial Serial( get; )
+ int TypeID( get; )
+ string TypeName( get; )
+ + diff --git a/Docs/types/ItemIdentification.html b/Docs/types/ItemIdentification.html new file mode 100644 index 0000000..db87798 --- /dev/null +++ b/Docs/types/ItemIdentification.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ItemIdentification + + +

Back to Server.Items

+

ItemIdentification

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile from )
+ (ctor) ItemIdentification()
+ + diff --git a/Docs/types/ItemListEntry.html b/Docs/types/ItemListEntry.html new file mode 100644 index 0000000..3555ae0 --- /dev/null +++ b/Docs/types/ItemListEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ItemListEntry + + +

Back to Server.Menus.ItemLists

+

ItemListEntry

+ (ctor) ItemListEntry( string name, int itemID )
+ (ctor) ItemListEntry( string name, int itemID, int hue )
+ int Hue( get; )
+ int ItemID( get; )
+ string Name( get; )
+ + diff --git a/Docs/types/ItemListMenu.html b/Docs/types/ItemListMenu.html new file mode 100644 index 0000000..faba09d --- /dev/null +++ b/Docs/types/ItemListMenu.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ItemListMenu + + +

Back to Server.Menus.ItemLists

+

ItemListMenu : IMenu

+

Derived Types: EquipMenu

+ (ctor) ItemListMenu( string question, ItemListEntry[] entries )
+ ItemListEntry[] Entries( get; set; )
+ string Question( get; )
+ int Server.Menus.IMenu.EntryLength( get; )
+ int Server.Menus.IMenu.Serial( get; )
+ virtual void OnCancel( NetState state )
+ virtual void OnResponse( NetState state, int index )
+ virtual void SendTo( NetState state )
+ + diff --git a/Docs/types/ItemTileButtonInfo.html b/Docs/types/ItemTileButtonInfo.html new file mode 100644 index 0000000..01621b5 --- /dev/null +++ b/Docs/types/ItemTileButtonInfo.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ItemTileButtonInfo + + +

Back to Server.Gumps

+

ItemTileButtonInfo : ImageTileButtonInfo

+ (ctor) ItemTileButtonInfo( Item i )
+ Item Item( get; set; )
+ + diff --git a/Docs/types/ItemValue.html b/Docs/types/ItemValue.html new file mode 100644 index 0000000..d57e107 --- /dev/null +++ b/Docs/types/ItemValue.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ItemValue + + +

Back to Server.Engines.Reports

+

ItemValue : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) ItemValue()
+ (ctor) ItemValue( string value )
+ (ctor) ItemValue( string value, string format )
+ string Format( get; set; )
+ PersistableType TypeID( get; )
+ string Value( get; set; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ + diff --git a/Docs/types/ItemValueCollection.html b/Docs/types/ItemValueCollection.html new file mode 100644 index 0000000..5e93cb5 --- /dev/null +++ b/Docs/types/ItemValueCollection.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ItemValueCollection + + +

Back to Server.Engines.Reports

+

ItemValueCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: ItemValueCollectionEnumerator

+ (ctor) ItemValueCollection()
+ ItemValue Item( get; set; )
+ int Add( ItemValue value )
+ int Add( string value )
+ int Add( string value, string format )
+ bool Contains( ItemValue value )
+ ItemValueCollectionEnumerator GetEnumerator()
+ int IndexOf( ItemValue value )
+ void Insert( int index, ItemValue value )
+ void Remove( ItemValue value )
+ + diff --git a/Docs/types/ItemValueCollectionEnumerator.html b/Docs/types/ItemValueCollectionEnumerator.html new file mode 100644 index 0000000..c89fb34 --- /dev/null +++ b/Docs/types/ItemValueCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ItemValueCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(ItemValueCollection) - ItemValueCollectionEnumerator : IEnumerator

+ (ctor) ItemValueCollectionEnumerator( ItemValueCollection collection )
+ ItemValue Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/JackOLantern.html b/Docs/types/JackOLantern.html new file mode 100644 index 0000000..759845f --- /dev/null +++ b/Docs/types/JackOLantern.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - JackOLantern + + +

Back to Server.Items

+

JackOLantern : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) JackOLantern()
+ (ctor) JackOLantern( bool south )
+ (ctor) JackOLantern( Serial serial )
+ bool ShareHue( get; )
+ void b__0()
+ virtual void Deserialize( GenericReader reader )
+ AddonComponent GetComponent( int itemID, int hue )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JackRabbit.html b/Docs/types/JackRabbit.html new file mode 100644 index 0000000..a5af8ae --- /dev/null +++ b/Docs/types/JackRabbit.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - JackRabbit + + +

Back to Server.Mobiles

+

JackRabbit : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) JackRabbit()
+ (ctor) JackRabbit( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JackalsCollar.html b/Docs/types/JackalsCollar.html new file mode 100644 index 0000000..41a081b --- /dev/null +++ b/Docs/types/JackalsCollar.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - JackalsCollar + + +

Back to Server.Items

+

JackalsCollar : PlateGorget, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) JackalsCollar()
+ (ctor) JackalsCollar( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseColdResistance( get; )
+ int BaseFireResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JadeStatueMaker.html b/Docs/types/JadeStatueMaker.html new file mode 100644 index 0000000..e87d6f0 --- /dev/null +++ b/Docs/types/JadeStatueMaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - JadeStatueMaker + + +

Back to Server.Items

+

JadeStatueMaker : CharacterStatueMaker, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) JadeStatueMaker()
+ (ctor) JadeStatueMaker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Jail.html b/Docs/types/Jail.html new file mode 100644 index 0000000..73a2ef6 --- /dev/null +++ b/Docs/types/Jail.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Jail + + +

Back to Server.Regions

+

Jail : BaseRegion, IComparable

+ (ctor) Jail( XmlElement xml, Map map, Region parent )
+ virtual bool AllowBeneficial( Mobile from, Mobile target )
+ virtual bool AllowHarmful( Mobile from, Mobile target )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ virtual void AlterLightLevel( Mobile m, ref int global, ref int personal )
+ virtual bool OnBeginSpellCast( Mobile from, ISpell s )
+ virtual bool OnCombatantChange( Mobile from, Mobile Old, Mobile New )
+ virtual bool OnSkillUse( Mobile from, int Skill )
+ + diff --git a/Docs/types/JarHoney.html b/Docs/types/JarHoney.html new file mode 100644 index 0000000..1866b33 --- /dev/null +++ b/Docs/types/JarHoney.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - JarHoney + + +

Back to Server.Items

+

JarHoney : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) JarHoney()
+ (ctor) JarHoney( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Jars2.html b/Docs/types/Jars2.html new file mode 100644 index 0000000..d7e21e8 --- /dev/null +++ b/Docs/types/Jars2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Jars2 + + +

Back to Server.Items

+

Jars2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Jars2()
+ (ctor) Jars2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Jars3.html b/Docs/types/Jars3.html new file mode 100644 index 0000000..3ae661a --- /dev/null +++ b/Docs/types/Jars3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Jars3 + + +

Back to Server.Items

+

Jars3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Jars3()
+ (ctor) Jars3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Jars4.html b/Docs/types/Jars4.html new file mode 100644 index 0000000..a22be10 --- /dev/null +++ b/Docs/types/Jars4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Jars4 + + +

Back to Server.Items

+

Jars4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Jars4()
+ (ctor) Jars4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JedahEntille.html b/Docs/types/JedahEntille.html new file mode 100644 index 0000000..d2f8023 --- /dev/null +++ b/Docs/types/JedahEntille.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - JedahEntille + + +

Back to Server.Engines.Quests.Ninja

+

JedahEntille : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) JedahEntille()
+ (ctor) JedahEntille( Serial serial )
+ int TalkNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JesterHat.html b/Docs/types/JesterHat.html new file mode 100644 index 0000000..e7dbf3e --- /dev/null +++ b/Docs/types/JesterHat.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - JesterHat + + +

Back to Server.Items

+

JesterHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) JesterHat()
+ (ctor) JesterHat( Serial serial )
+ (ctor) JesterHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JesterHatofChuckles.html b/Docs/types/JesterHatofChuckles.html new file mode 100644 index 0000000..5186947 --- /dev/null +++ b/Docs/types/JesterHatofChuckles.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - JesterHatofChuckles + + +

Back to Server.Items

+

JesterHatofChuckles : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem, ITokunoDyable

+ (ctor) JesterHatofChuckles()
+ (ctor) JesterHatofChuckles( Serial serial )
+ (ctor) JesterHatofChuckles( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JesterSuit.html b/Docs/types/JesterSuit.html new file mode 100644 index 0000000..c4bf164 --- /dev/null +++ b/Docs/types/JesterSuit.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - JesterSuit + + +

Back to Server.Items

+

JesterSuit : BaseMiddleTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) JesterSuit()
+ (ctor) JesterSuit( int hue )
+ (ctor) JesterSuit( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JeweledFiligree.html b/Docs/types/JeweledFiligree.html new file mode 100644 index 0000000..acb1dc2 --- /dev/null +++ b/Docs/types/JeweledFiligree.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - JeweledFiligree + + +

Back to Server.Items

+

JeweledFiligree : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) JeweledFiligree()
+ (ctor) JeweledFiligree( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Jeweler.html b/Docs/types/Jeweler.html new file mode 100644 index 0000000..9a5c2ce --- /dev/null +++ b/Docs/types/Jeweler.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Jeweler + + +

Back to Server.Mobiles

+

Jeweler : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Jeweler()
+ (ctor) Jeweler( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JinBaori.html b/Docs/types/JinBaori.html new file mode 100644 index 0000000..061f4a6 --- /dev/null +++ b/Docs/types/JinBaori.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - JinBaori + + +

Back to Server.Items

+

JinBaori : BaseMiddleTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) JinBaori()
+ (ctor) JinBaori( int hue )
+ (ctor) JinBaori( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JoinStone.html b/Docs/types/JoinStone.html new file mode 100644 index 0000000..7da85ea --- /dev/null +++ b/Docs/types/JoinStone.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - JoinStone + + +

Back to Server.Factions

+

JoinStone : BaseSystemController, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) JoinStone()
+ (ctor) JoinStone( Faction faction )
+ (ctor) JoinStone( Serial serial )
+ string DefaultName( get; )
+ Faction Faction( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JoinStoneGump.html b/Docs/types/JoinStoneGump.html new file mode 100644 index 0000000..fb5eef4 --- /dev/null +++ b/Docs/types/JoinStoneGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - JoinStoneGump + + +

Back to Server.Factions

+

JoinStoneGump : FactionGump

+ (ctor) JoinStoneGump( PlayerMobile from, Faction faction )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/JointingPlane.html b/Docs/types/JointingPlane.html new file mode 100644 index 0000000..8b2061b --- /dev/null +++ b/Docs/types/JointingPlane.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - JointingPlane + + +

Back to Server.Items

+

JointingPlane : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) JointingPlane()
+ (ctor) JointingPlane( int uses )
+ (ctor) JointingPlane( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Jug.html b/Docs/types/Jug.html new file mode 100644 index 0000000..316d20d --- /dev/null +++ b/Docs/types/Jug.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Jug + + +

Back to Server.Items

+

Jug : BaseBeverage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) Jug( Serial serial )
+ (ctor) Jug( BeverageType type )
+ int BaseLabelNumber( get; )
+ bool Fillable( get; )
+ int MaxQuantity( get; )
+ virtual int ComputeItemID()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Juggernaut.html b/Docs/types/Juggernaut.html new file mode 100644 index 0000000..b288865 --- /dev/null +++ b/Docs/types/Juggernaut.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Juggernaut + + +

Back to Server.Mobiles

+

Juggernaut : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Juggernaut()
+ (ctor) Juggernaut( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool BardImmune( get; )
+ bool BleedImmune( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void OnDeath( Container c )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ void Recover_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JukaBow.html b/Docs/types/JukaBow.html new file mode 100644 index 0000000..ae1dfaf --- /dev/null +++ b/Docs/types/JukaBow.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - JukaBow + + +

Back to Server.Items

+

JukaBow : Bow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) JukaBow()
+ (ctor) JukaBow( Serial serial )
+ int AosDexterityReq( get; )
+ int AosStrengthReq( get; )
+ bool IsModified( get; )
+ int OldDexterityReq( get; )
+ int OldStrengthReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void OnTargetGears( Mobile from, object targ )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JukaLord.html b/Docs/types/JukaLord.html new file mode 100644 index 0000000..d5deb41 --- /dev/null +++ b/Docs/types/JukaLord.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - JukaLord + + +

Back to Server.Mobiles

+

JukaLord : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) JukaLord()
+ (ctor) JukaLord( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool BardImmune( get; )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JukaMage.html b/Docs/types/JukaMage.html new file mode 100644 index 0000000..43c0294 --- /dev/null +++ b/Docs/types/JukaMage.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - JukaMage + + +

Back to Server.Mobiles

+

JukaMage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) JukaMage()
+ (ctor) JukaMage( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ void Unbuff( object state )
+ + diff --git a/Docs/types/JukaWarrior.html b/Docs/types/JukaWarrior.html new file mode 100644 index 0000000..2bcf4f9 --- /dev/null +++ b/Docs/types/JukaWarrior.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - JukaWarrior + + +

Back to Server.Mobiles

+

JukaWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) JukaWarrior()
+ (ctor) JukaWarrior( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/JusticeVirtue.html b/Docs/types/JusticeVirtue.html new file mode 100644 index 0000000..324c2dc --- /dev/null +++ b/Docs/types/JusticeVirtue.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - JusticeVirtue + + +

Back to Server

+

JusticeVirtue

+ (static) void CheckAtrophy( Mobile from )
+ (static) bool CheckMapRegion( Mobile first, Mobile second )
+ (static) int GetMapRegion( Map map, Point3D loc )
+ (static) void Initialize()
+ (static) void OnVirtueAccepted( PlayerMobile protector, PlayerMobile protectee )
+ (static) void OnVirtueRejected( PlayerMobile protector, PlayerMobile protectee )
+ (static) void OnVirtueTargeted( Mobile from, object obj )
+ (static) void OnVirtueUsed( Mobile from )
+ (static) void RejectDelay_Callback( object state )
+ (ctor) JusticeVirtue()
+ + diff --git a/Docs/types/Jwilson.html b/Docs/types/Jwilson.html new file mode 100644 index 0000000..7010c9d --- /dev/null +++ b/Docs/types/Jwilson.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Jwilson + + +

Back to Server.Mobiles

+

Jwilson : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Jwilson()
+ (ctor) Jwilson( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KaburJournal.html b/Docs/types/KaburJournal.html new file mode 100644 index 0000000..6801c37 --- /dev/null +++ b/Docs/types/KaburJournal.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - KaburJournal + + +

Back to Server.Items

+

KaburJournal : RedBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) KaburJournal()
+ (ctor) KaburJournal( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Kama.html b/Docs/types/Kama.html new file mode 100644 index 0000000..83b5268 --- /dev/null +++ b/Docs/types/Kama.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Kama + + +

Back to Server.Items

+

Kama : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: DarkenedSky

+ (ctor) Kama()
+ (ctor) Kama( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Kamishimo.html b/Docs/types/Kamishimo.html new file mode 100644 index 0000000..62ab02a --- /dev/null +++ b/Docs/types/Kamishimo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Kamishimo + + +

Back to Server.Items

+

Kamishimo : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Kamishimo()
+ (ctor) Kamishimo( int hue )
+ (ctor) Kamishimo( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Kappa.html b/Docs/types/Kappa.html new file mode 100644 index 0000000..6dde0b8 --- /dev/null +++ b/Docs/types/Kappa.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Kappa + + +

Back to Server.Mobiles

+

Kappa : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: InternalTimer

+ (static) void BeginLifeDrain( Mobile m, Mobile from )
+ (static) void DrainLife( Mobile m, Mobile from )
+ (static) void EndLifeDrain( Mobile m )
+ (static) bool IsBeingDrained( Mobile m )
+ (ctor) Kappa()
+ (ctor) Kappa( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual Item NewHarmfulItem()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KarmaEntry.html b/Docs/types/KarmaEntry.html new file mode 100644 index 0000000..8559eab --- /dev/null +++ b/Docs/types/KarmaEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - KarmaEntry + + +

Back to Server.Misc

+

KarmaEntry

+ (ctor) KarmaEntry( int karma, string title )
+ + diff --git a/Docs/types/Kasa.html b/Docs/types/Kasa.html new file mode 100644 index 0000000..c3395a4 --- /dev/null +++ b/Docs/types/Kasa.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Kasa + + +

Back to Server.Items

+

Kasa : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: AncientFarmersKasa, KasaOfTheRajin

+ (ctor) Kasa()
+ (ctor) Kasa( Serial serial )
+ (ctor) Kasa( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KasaOfTheRajin.html b/Docs/types/KasaOfTheRajin.html new file mode 100644 index 0000000..078fb60 --- /dev/null +++ b/Docs/types/KasaOfTheRajin.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - KasaOfTheRajin + + +

Back to Server.Items

+

KasaOfTheRajin : Kasa, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) KasaOfTheRajin()
+ (ctor) KasaOfTheRajin( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Katana.html b/Docs/types/Katana.html new file mode 100644 index 0000000..9611821 --- /dev/null +++ b/Docs/types/Katana.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Katana + + +

Back to Server.Items

+

Katana : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BladeOfInsanity, BraveKnightOfTheBritannia

+ (ctor) Katana()
+ (ctor) Katana( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KazeKemono.html b/Docs/types/KazeKemono.html new file mode 100644 index 0000000..1c5edfd --- /dev/null +++ b/Docs/types/KazeKemono.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - KazeKemono + + +

Back to Server.Mobiles

+

KazeKemono : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: ExpireTimer

+ (ctor) KazeKemono()
+ (ctor) KazeKemono( Serial serial )
+ bool BleedImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Keep.html b/Docs/types/Keep.html new file mode 100644 index 0000000..d83de0e --- /dev/null +++ b/Docs/types/Keep.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Keep + + +

Back to Server.Multis

+

Keep : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Keep( Serial serial )
+ (ctor) Keep( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KeepDeed.html b/Docs/types/KeepDeed.html new file mode 100644 index 0000000..f627c97 --- /dev/null +++ b/Docs/types/KeepDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - KeepDeed + + +

Back to Server.Multis.Deeds

+

KeepDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) KeepDeed()
+ (ctor) KeepDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KeeperOfChivalry.html b/Docs/types/KeeperOfChivalry.html new file mode 100644 index 0000000..37c4741 --- /dev/null +++ b/Docs/types/KeeperOfChivalry.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - KeeperOfChivalry + + +

Back to Server.Mobiles

+

KeeperOfChivalry : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) KeeperOfChivalry()
+ (ctor) KeeperOfChivalry( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Keg.html b/Docs/types/Keg.html new file mode 100644 index 0000000..b50dd29 --- /dev/null +++ b/Docs/types/Keg.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Keg + + +

Back to Server.Items

+

Keg : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Keg()
+ (ctor) Keg( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Key.html b/Docs/types/Key.html new file mode 100644 index 0000000..5bc830d --- /dev/null +++ b/Docs/types/Key.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - Key + + +

Back to Server.Items

+

Key : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: CopyTarget, RenamePrompt, UnlockTarget

+ (static) bool ContainsKey( Container cont, uint keyValue )
+ (static) uint RandomValue()
+ (static) void RemoveKeys( Mobile m, uint keyValue )
+ (static) void RemoveKeys( Container cont, uint keyValue )
+ (ctor) Key()
+ (ctor) Key( KeyType type )
+ (ctor) Key( Serial serial )
+ (ctor) Key( uint val )
+ (ctor) Key( KeyType type, uint LockVal )
+ (ctor) Key( KeyType type, uint LockVal, Item link )
+ string Description( get; set; )
+ uint KeyValue( get; set; )
+ Item Link( get; set; )
+ int MaxRange( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ bool UseOn( Mobile from, ILockable o )
+ + diff --git a/Docs/types/KeyRing.html b/Docs/types/KeyRing.html new file mode 100644 index 0000000..e01623b --- /dev/null +++ b/Docs/types/KeyRing.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - KeyRing + + +

Back to Server.Items

+

KeyRing : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) KeyRing()
+ (ctor) KeyRing( Serial serial )
+ List<Key> Keys( get; )
+ void Add( Key key )
+ bool ContainsKey( uint keyValue )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ void Open( Mobile from )
+ void RemoveKeys( uint keyValue )
+ virtual void Serialize( GenericWriter writer )
+ void UpdateItemID()
+ + diff --git a/Docs/types/KeyType.html b/Docs/types/KeyType.html new file mode 100644 index 0000000..5c4317d --- /dev/null +++ b/Docs/types/KeyType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - KeyType + + +

Back to Server.Items

+

KeyType (Enum)

+ Copper = 4110,
+ Gold = 4111,
+ Iron = 4112,
+ Rusty = 4115
+ + diff --git a/Docs/types/KeywordList.html b/Docs/types/KeywordList.html new file mode 100644 index 0000000..0f58b98 --- /dev/null +++ b/Docs/types/KeywordList.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - KeywordList + + +

Back to Server

+

KeywordList

+ (ctor) KeywordList()
+ int Count( get; )
+ void Add( int keyword )
+ bool Contains( int keyword )
+ int[] ToArray()
+ + diff --git a/Docs/types/KeywordTeleporter.html b/Docs/types/KeywordTeleporter.html new file mode 100644 index 0000000..2f39d19 --- /dev/null +++ b/Docs/types/KeywordTeleporter.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - KeywordTeleporter + + +

Back to Server.Items

+

KeywordTeleporter : Teleporter, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) KeywordTeleporter()
+ (ctor) KeywordTeleporter( Serial serial )
+ bool HandlesOnSpeech( get; )
+ int Keyword( get; set; )
+ int Range( get; set; )
+ string Substring( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Keywords.html b/Docs/types/Keywords.html new file mode 100644 index 0000000..b922651 --- /dev/null +++ b/Docs/types/Keywords.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Keywords + + +

Back to Server.Misc

+

Keywords

+ (static) void EventSink_Speech( SpeechEventArgs args )
+ (static) void Initialize()
+ (ctor) Keywords()
+ + diff --git a/Docs/types/KhaldunPitTeleporter.html b/Docs/types/KhaldunPitTeleporter.html new file mode 100644 index 0000000..188465f --- /dev/null +++ b/Docs/types/KhaldunPitTeleporter.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - KhaldunPitTeleporter + + +

Back to Server.Items

+

KhaldunPitTeleporter : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) KhaldunPitTeleporter()
+ (ctor) KhaldunPitTeleporter( Serial serial )
+ (ctor) KhaldunPitTeleporter( Point3D pointDest, Map mapDest )
+ bool Active( get; set; )
+ int LabelNumber( get; )
+ Map MapDest( get; set; )
+ Point3D PointDest( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile m )
+ virtual void OnDoubleClickDead( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KhaldunRevenant.html b/Docs/types/KhaldunRevenant.html new file mode 100644 index 0000000..59f5a71 --- /dev/null +++ b/Docs/types/KhaldunRevenant.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - KhaldunRevenant + + +

Back to Server.Mobiles

+

KhaldunRevenant : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) void EventSink_PlayerDeath( PlayerDeathEventArgs e )
+ (static) void Initialize()
+ (static) bool IsInsideKhaldun( Mobile from )
+ (static) void SummonRevenant( Mobile victim, Mobile killer )
+ (ctor) KhaldunRevenant( Serial serial )
+ (ctor) KhaldunRevenant( Mobile target )
+ bool AlwaysAttackable( get; )
+ bool BardImmune( get; )
+ Mobile ConstantFocus( get; )
+ bool DeleteCorpseOnDeath( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayPaperdollTo( Mobile to )
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void OnDelete()
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KhaldunSummoner.html b/Docs/types/KhaldunSummoner.html new file mode 100644 index 0000000..8af4925 --- /dev/null +++ b/Docs/types/KhaldunSummoner.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - KhaldunSummoner + + +

Back to Server.Mobiles

+

KhaldunSummoner : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) KhaldunSummoner()
+ (ctor) KhaldunSummoner( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ bool ShowFameTitle( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KhaldunZealot.html b/Docs/types/KhaldunZealot.html new file mode 100644 index 0000000..0fd3c7f --- /dev/null +++ b/Docs/types/KhaldunZealot.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - KhaldunZealot + + +

Back to Server.Mobiles

+

KhaldunZealot : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) KhaldunZealot()
+ (ctor) KhaldunZealot( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ Poison PoisonImmune( get; )
+ bool ShowFameTitle( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KiAttack.html b/Docs/types/KiAttack.html new file mode 100644 index 0000000..11e0711 --- /dev/null +++ b/Docs/types/KiAttack.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - KiAttack + + +

Back to Server.Spells.Ninjitsu

+

KiAttack : NinjaMove

+

Nested Types: KiAttackInfo

+ (static) void EndKiAttack( object state )
+ (static) double GetBonus( Mobile from )
+ (ctor) KiAttack()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ double RequiredSkill( get; )
+ virtual double GetDamageScalar( Mobile attacker, Mobile defender )
+ virtual void OnClearMove( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual void OnUse( Mobile from )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/KiAttackInfo.html b/Docs/types/KiAttackInfo.html new file mode 100644 index 0000000..5850746 --- /dev/null +++ b/Docs/types/KiAttackInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - KiAttackInfo + + +

Back to Server.Spells.Ninjitsu

+

(KiAttack) - KiAttackInfo

+ (ctor) KiAttackInfo( Mobile m )
+ + diff --git a/Docs/types/KickCommand.html b/Docs/types/KickCommand.html new file mode 100644 index 0000000..e5abdeb --- /dev/null +++ b/Docs/types/KickCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - KickCommand + + +

Back to Server.Commands.Generic

+

KickCommand : BaseCommand

+ (ctor) KickCommand( bool ban )
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/KillCommand.html b/Docs/types/KillCommand.html new file mode 100644 index 0000000..fd8c997 --- /dev/null +++ b/Docs/types/KillCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - KillCommand + + +

Back to Server.Commands.Generic

+

KillCommand : BaseCommand

+ (ctor) KillCommand( bool value )
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/KillHordeMinionsObjective.html b/Docs/types/KillHordeMinionsObjective.html new file mode 100644 index 0000000..4494aad --- /dev/null +++ b/Docs/types/KillHordeMinionsObjective.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - KillHordeMinionsObjective + + +

Back to Server.Engines.Quests.Haven

+

KillHordeMinionsObjective : QuestObjective

+ (ctor) KillHordeMinionsObjective()
+ (ctor) KillHordeMinionsObjective( KillHordeMinionsStep step )
+ bool Completed( get; )
+ int MaxProgress( get; )
+ object Message( get; )
+ KillHordeMinionsStep Step( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void OnRead()
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/KillHordeMinionsStep.html b/Docs/types/KillHordeMinionsStep.html new file mode 100644 index 0000000..0b5307b --- /dev/null +++ b/Docs/types/KillHordeMinionsStep.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - KillHordeMinionsStep + + +

Back to Server.Engines.Quests.Haven

+

KillHordeMinionsStep (Enum)

+ First = 0,
+ LearnKarma = 1,
+ Others = 2
+ + diff --git a/Docs/types/KillImpsObjective.html b/Docs/types/KillImpsObjective.html new file mode 100644 index 0000000..75683ed --- /dev/null +++ b/Docs/types/KillImpsObjective.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - KillImpsObjective + + +

Back to Server.Engines.Quests.Hag

+

KillImpsObjective : QuestObjective

+ (ctor) KillImpsObjective()
+ (ctor) KillImpsObjective( bool init )
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ + diff --git a/Docs/types/KillInfiltratorsObjective.html b/Docs/types/KillInfiltratorsObjective.html new file mode 100644 index 0000000..c4f5374 --- /dev/null +++ b/Docs/types/KillInfiltratorsObjective.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - KillInfiltratorsObjective + + +

Back to Server.Engines.Quests.Matriarch

+

KillInfiltratorsObjective : QuestObjective

+ (ctor) KillInfiltratorsObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/KillQueensObjective.html b/Docs/types/KillQueensObjective.html new file mode 100644 index 0000000..492df12 --- /dev/null +++ b/Docs/types/KillQueensObjective.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - KillQueensObjective + + +

Back to Server.Engines.Quests.Ambitious

+

KillQueensObjective : QuestObjective

+ (ctor) KillQueensObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/Kilt.html b/Docs/types/Kilt.html new file mode 100644 index 0000000..8760283 --- /dev/null +++ b/Docs/types/Kilt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Kilt + + +

Back to Server.Items

+

Kilt : BaseOuterLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Kilt()
+ (ctor) Kilt( int hue )
+ (ctor) Kilt( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Kindling.html b/Docs/types/Kindling.html new file mode 100644 index 0000000..0068ebc --- /dev/null +++ b/Docs/types/Kindling.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Kindling + + +

Back to Server.Items

+

Kindling : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Kindling()
+ (ctor) Kindling( int amount )
+ (ctor) Kindling( Serial serial )
+ void AddOffsetLocation( Mobile from, int offsetX, int offsetY, ArrayList list )
+ virtual void Deserialize( GenericReader reader )
+ Point3D GetFireLocation( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Kirin.html b/Docs/types/Kirin.html new file mode 100644 index 0000000..9ccaad7 --- /dev/null +++ b/Docs/types/Kirin.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Kirin + + +

Back to Server.Mobiles

+

Kirin : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) Kirin()
+ (ctor) Kirin( Serial serial )
+ (ctor) Kirin( string name )
+ bool AllowFemaleRider( get; )
+ bool AllowFemaleTamer( get; )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ bool InitialInnocent( get; )
+ int Meat( get; )
+ TimeSpan MountAbilityDelay( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool DoMountAbility( int damage, Mobile attacker )
+ virtual void GenerateLoot()
+ virtual void OnDisallowedRider( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Knife.html b/Docs/types/Knife.html new file mode 100644 index 0000000..8792179 --- /dev/null +++ b/Docs/types/Knife.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Knife + + +

Back to Server.Items

+

Knife : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Knife()
+ (ctor) Knife( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KnifeLeft.html b/Docs/types/KnifeLeft.html new file mode 100644 index 0000000..f77b6a7 --- /dev/null +++ b/Docs/types/KnifeLeft.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - KnifeLeft + + +

Back to Server.Items

+

KnifeLeft : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) KnifeLeft()
+ (ctor) KnifeLeft( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KnifeRight.html b/Docs/types/KnifeRight.html new file mode 100644 index 0000000..0faa080 --- /dev/null +++ b/Docs/types/KnifeRight.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - KnifeRight + + +

Back to Server.Items

+

KnifeRight : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) KnifeRight()
+ (ctor) KnifeRight( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Kraken.html b/Docs/types/Kraken.html new file mode 100644 index 0000000..1372126 --- /dev/null +++ b/Docs/types/Kraken.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Kraken + + +

Back to Server.Mobiles

+

Kraken : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Kraken()
+ (ctor) Kraken( Serial serial )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KrisnaHair.html b/Docs/types/KrisnaHair.html new file mode 100644 index 0000000..333e41c --- /dev/null +++ b/Docs/types/KrisnaHair.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - KrisnaHair + + +

Back to Server.Items

+

KrisnaHair : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) KrisnaHair()
+ (ctor) KrisnaHair( int hue )
+ (ctor) KrisnaHair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KronusScroll.html b/Docs/types/KronusScroll.html new file mode 100644 index 0000000..4bdd188 --- /dev/null +++ b/Docs/types/KronusScroll.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - KronusScroll + + +

Back to Server.Engines.Quests.Necro

+

KronusScroll : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: CallingTimer

+ (ctor) KronusScroll()
+ (ctor) KronusScroll( Serial serial )
+ int LabelNumber( get; )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/KronusScrollBox.html b/Docs/types/KronusScrollBox.html new file mode 100644 index 0000000..0d63c1f --- /dev/null +++ b/Docs/types/KronusScrollBox.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - KronusScrollBox + + +

Back to Server.Engines.Quests.Necro

+

KronusScrollBox : MetalBox, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) KronusScrollBox()
+ (ctor) KronusScrollBox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Kryss.html b/Docs/types/Kryss.html new file mode 100644 index 0000000..1f4a5da --- /dev/null +++ b/Docs/types/Kryss.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Kryss + + +

Back to Server.Items

+

Kryss : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: FangOfRactus, SerpentsFang

+ (ctor) Kryss()
+ (ctor) Kryss( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LOSBlocker.html b/Docs/types/LOSBlocker.html new file mode 100644 index 0000000..f274c4d --- /dev/null +++ b/Docs/types/LOSBlocker.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LOSBlocker + + +

Back to Server.Items

+

LOSBlocker : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: GMItemPacket

+ (static) void Initialize()
+ (ctor) LOSBlocker()
+ (ctor) LOSBlocker( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual Packet GetWorldPacketFor( NetState state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LRReason.html b/Docs/types/LRReason.html new file mode 100644 index 0000000..fc1babb --- /dev/null +++ b/Docs/types/LRReason.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LRReason + + +

Back to Server.Network

+

LRReason (Enum)

+ CannotLift = 0,
+ OutOfRange = 1,
+ OutOfSight = 2,
+ TryToSteal = 3,
+ AreHolding = 4,
+ Inspecific = 5
+ + diff --git a/Docs/types/LadyOfTheSnow.html b/Docs/types/LadyOfTheSnow.html new file mode 100644 index 0000000..ab69ad1 --- /dev/null +++ b/Docs/types/LadyOfTheSnow.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - LadyOfTheSnow + + +

Back to Server.Mobiles

+

LadyOfTheSnow : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: ExpireTimer

+ (ctor) LadyOfTheSnow()
+ (ctor) LadyOfTheSnow( Serial serial )
+ bool BleedImmune( get; )
+ bool CanRummageCorpses( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetDeathSound()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LadyPortrait1.html b/Docs/types/LadyPortrait1.html new file mode 100644 index 0000000..8c40b7f --- /dev/null +++ b/Docs/types/LadyPortrait1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LadyPortrait1 + + +

Back to Server.Items

+

LadyPortrait1 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LadyPortrait1()
+ (ctor) LadyPortrait1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LadyPortrait2.html b/Docs/types/LadyPortrait2.html new file mode 100644 index 0000000..9130732 --- /dev/null +++ b/Docs/types/LadyPortrait2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LadyPortrait2 + + +

Back to Server.Items

+

LadyPortrait2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LadyPortrait2()
+ (ctor) LadyPortrait2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lajatang.html b/Docs/types/Lajatang.html new file mode 100644 index 0000000..13c81ab --- /dev/null +++ b/Docs/types/Lajatang.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - Lajatang + + +

Back to Server.Items

+

Lajatang : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Lajatang()
+ (ctor) Lajatang( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LambLeg.html b/Docs/types/LambLeg.html new file mode 100644 index 0000000..741edb6 --- /dev/null +++ b/Docs/types/LambLeg.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LambLeg + + +

Back to Server.Items

+

LambLeg : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LambLeg()
+ (ctor) LambLeg( int amount )
+ (ctor) LambLeg( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LampPost1.html b/Docs/types/LampPost1.html new file mode 100644 index 0000000..bae123e --- /dev/null +++ b/Docs/types/LampPost1.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LampPost1 + + +

Back to Server.Items

+

LampPost1 : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LampPost1()
+ (ctor) LampPost1( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LampPost2.html b/Docs/types/LampPost2.html new file mode 100644 index 0000000..f205f20 --- /dev/null +++ b/Docs/types/LampPost2.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LampPost2 + + +

Back to Server.Items

+

LampPost2 : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LampPost2()
+ (ctor) LampPost2( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LampPost3.html b/Docs/types/LampPost3.html new file mode 100644 index 0000000..f3dc021 --- /dev/null +++ b/Docs/types/LampPost3.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LampPost3 + + +

Back to Server.Items

+

LampPost3 : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LampPost3()
+ (ctor) LampPost3( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LampPostArtifact.html b/Docs/types/LampPostArtifact.html new file mode 100644 index 0000000..b348880 --- /dev/null +++ b/Docs/types/LampPostArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LampPostArtifact + + +

Back to Server.Items

+

LampPostArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LampPostArtifact()
+ (ctor) LampPostArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LampRoomBox.html b/Docs/types/LampRoomBox.html new file mode 100644 index 0000000..b8de4fc --- /dev/null +++ b/Docs/types/LampRoomBox.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LampRoomBox + + +

Back to Server.Engines.Doom

+

LampRoomBox : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LampRoomBox( Serial serial )
+ (ctor) LampRoomBox( LeverPuzzleController controller )
+ void CallBackMessage()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LampRoomKickTimer.html b/Docs/types/LampRoomKickTimer.html new file mode 100644 index 0000000..4cde9ea --- /dev/null +++ b/Docs/types/LampRoomKickTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LampRoomKickTimer + + +

Back to Server.Engines.Doom

+

(LeverPuzzleController) - LampRoomKickTimer : Timer

+ (ctor) LampRoomKickTimer( Mobile player )
+ virtual void OnTick()
+ + diff --git a/Docs/types/LampRoomRegion.html b/Docs/types/LampRoomRegion.html new file mode 100644 index 0000000..956cdfd --- /dev/null +++ b/Docs/types/LampRoomRegion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LampRoomRegion + + +

Back to Server.Engines.Doom

+

LampRoomRegion : BaseRegion, IComparable

+ (static) void Initialize()
+ (static) void OnLogin( LoginEventArgs e )
+ (ctor) LampRoomRegion( LeverPuzzleController controller )
+ virtual void OnDeath( Mobile m )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ virtual bool OnSkillUse( Mobile m, int Skill )
+ + diff --git a/Docs/types/LampRoomTeleporter.html b/Docs/types/LampRoomTeleporter.html new file mode 100644 index 0000000..0fec4e8 --- /dev/null +++ b/Docs/types/LampRoomTeleporter.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LampRoomTeleporter + + +

Back to Server.Engines.Doom

+

LampRoomTeleporter : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LampRoomTeleporter( int[] dat )
+ (ctor) LampRoomTeleporter( Serial serial )
+ bool HandlesOnMovement( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LampRoomTimer.html b/Docs/types/LampRoomTimer.html new file mode 100644 index 0000000..3abc24b --- /dev/null +++ b/Docs/types/LampRoomTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LampRoomTimer + + +

Back to Server.Engines.Doom

+

(LeverPuzzleController) - LampRoomTimer : Timer

+ (ctor) LampRoomTimer( LeverPuzzleController controller )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Lance.html b/Docs/types/Lance.html new file mode 100644 index 0000000..e8499bf --- /dev/null +++ b/Docs/types/Lance.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Lance + + +

Back to Server.Items

+

Lance : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: LunaLance, TheDragonSlayer

+ (ctor) Lance()
+ (ctor) Lance( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LandData.html b/Docs/types/LandData.html new file mode 100644 index 0000000..53545b8 --- /dev/null +++ b/Docs/types/LandData.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LandData + + +

Back to Server

+

LandData

+ (ctor) LandData( string name, TileFlag flags )
+ TileFlag Flags( get; set; )
+ string Name( get; set; )
+ + diff --git a/Docs/types/LandTarget.html b/Docs/types/LandTarget.html new file mode 100644 index 0000000..b5310ee --- /dev/null +++ b/Docs/types/LandTarget.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LandTarget + + +

Back to Server.Targeting

+

LandTarget : IPoint3D, IPoint2D

+ (ctor) LandTarget( Point3D location, Map map )
+ TileFlag Flags( get; )
+ Point3D Location( get; )
+ string Name( get; )
+ int TileID( get; )
+ int X( get; )
+ int Y( get; )
+ int Z( get; )
+ + diff --git a/Docs/types/LandTile.html b/Docs/types/LandTile.html new file mode 100644 index 0000000..b163c3c --- /dev/null +++ b/Docs/types/LandTile.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LandTile + + +

Back to Server

+

LandTile

+ (ctor) LandTile( short id, sbyte z )
+ int Height( get; )
+ int ID( get; )
+ bool Ignored( get; )
+ int Z( get; set; )
+ void Set( short id, sbyte z )
+ + diff --git a/Docs/types/LandlordVendorRentalGump.html b/Docs/types/LandlordVendorRentalGump.html new file mode 100644 index 0000000..318f837 --- /dev/null +++ b/Docs/types/LandlordVendorRentalGump.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LandlordVendorRentalGump + + +

Back to Server.Gumps

+

LandlordVendorRentalGump : BaseVendorRentalGump

+

Nested Types: ContractRenewalPricePrompt

+ (ctor) LandlordVendorRentalGump( RentedVendor vendor )
+ virtual bool IsValidResponse( Mobile from )
+ virtual void LandlordRenewOnExpiration( Mobile from )
+ virtual void SetRenewalPrice( Mobile from )
+ + diff --git a/Docs/types/LanguageStatistics.html b/Docs/types/LanguageStatistics.html new file mode 100644 index 0000000..597a73b --- /dev/null +++ b/Docs/types/LanguageStatistics.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LanguageStatistics + + +

Back to Server.Misc

+

LanguageStatistics

+

Nested Types: InternationalCode, InternationalCodeComparer, InternationalCodeCounter

+ (static) string GetFormattedInfo( string code )
+ (static) void Initialize()
+ (static) void LanguageStatistics_OnCommand( CommandEventArgs e )
+ (ctor) LanguageStatistics()
+ + diff --git a/Docs/types/Lantern.html b/Docs/types/Lantern.html new file mode 100644 index 0000000..f05cd8b --- /dev/null +++ b/Docs/types/Lantern.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Lantern + + +

Back to Server.Items

+

Lantern : BaseEquipableLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: LanternOfSouls

+ (ctor) Lantern()
+ (ctor) Lantern( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LanternOfSouls.html b/Docs/types/LanternOfSouls.html new file mode 100644 index 0000000..773ce27 --- /dev/null +++ b/Docs/types/LanternOfSouls.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LanternOfSouls + + +

Back to Server.Items

+

LanternOfSouls : Lantern, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LanternOfSouls()
+ (ctor) LanternOfSouls( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LapHarp.html b/Docs/types/LapHarp.html new file mode 100644 index 0000000..ca730b1 --- /dev/null +++ b/Docs/types/LapHarp.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LapHarp + + +

Back to Server.Items

+

LapHarp : BaseInstrument, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+

Derived Types: GwennosHarp

+ (ctor) LapHarp()
+ (ctor) LapHarp( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LardOfParoxysmus.html b/Docs/types/LardOfParoxysmus.html new file mode 100644 index 0000000..4e56d06 --- /dev/null +++ b/Docs/types/LardOfParoxysmus.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LardOfParoxysmus + + +

Back to Server.Items

+

LardOfParoxysmus : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LardOfParoxysmus()
+ (ctor) LardOfParoxysmus( int amount )
+ (ctor) LardOfParoxysmus( Serial serial )
+ (ctor) LardOfParoxysmus( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBOD.html b/Docs/types/LargeBOD.html new file mode 100644 index 0000000..b5ab52d --- /dev/null +++ b/Docs/types/LargeBOD.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - LargeBOD + + +

Back to Server.Engines.BulkOrders

+

LargeBOD : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: LargeSmithBOD, LargeTailorBOD

+ (static) BulkMaterialType GetRandomMaterial( BulkMaterialType start, double[] chances )
+ (ctor) LargeBOD()
+ (ctor) LargeBOD( Serial serial )
+ (ctor) LargeBOD( int hue, int amountMax, bool requireExeptional, BulkMaterialType material, LargeBulkEntry[] entries )
+ int AmountMax( get; set; )
+ bool Complete( get; )
+ LargeBulkEntry[] Entries( get; set; )
+ int LabelNumber( get; )
+ BulkMaterialType Material( get; set; )
+ bool RequireExceptional( get; set; )
+ void BeginCombine( Mobile from )
+ virtual int ComputeFame()
+ virtual int ComputeGold()
+ virtual List<Item> ComputeRewards( bool full )
+ virtual void Deserialize( GenericReader reader )
+ void EndCombine( Mobile from, object o )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void GetRewards( out Item reward, out int gold, out int fame )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBODAcceptGump.html b/Docs/types/LargeBODAcceptGump.html new file mode 100644 index 0000000..fc434aa --- /dev/null +++ b/Docs/types/LargeBODAcceptGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LargeBODAcceptGump + + +

Back to Server.Engines.BulkOrders

+

LargeBODAcceptGump : Gump

+ (static) int GetMaterialNumberFor( BulkMaterialType material )
+ (ctor) LargeBODAcceptGump( Mobile from, LargeBOD deed )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/LargeBODGump.html b/Docs/types/LargeBODGump.html new file mode 100644 index 0000000..254689a --- /dev/null +++ b/Docs/types/LargeBODGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LargeBODGump + + +

Back to Server.Engines.BulkOrders

+

LargeBODGump : Gump

+ (static) int GetMaterialNumberFor( BulkMaterialType material )
+ (ctor) LargeBODGump( Mobile from, LargeBOD deed )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/LargeBODTarget.html b/Docs/types/LargeBODTarget.html new file mode 100644 index 0000000..0f8f36b --- /dev/null +++ b/Docs/types/LargeBODTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LargeBODTarget + + +

Back to Server.Engines.BulkOrders

+

LargeBODTarget : Target

+ (ctor) LargeBODTarget( LargeBOD deed )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/LargeBagBall.html b/Docs/types/LargeBagBall.html new file mode 100644 index 0000000..be0eb8c --- /dev/null +++ b/Docs/types/LargeBagBall.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeBagBall + + +

Back to Server.Items

+

LargeBagBall : BaseBagBall, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) LargeBagBall()
+ (ctor) LargeBagBall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBattleAxe.html b/Docs/types/LargeBattleAxe.html new file mode 100644 index 0000000..7cd553a --- /dev/null +++ b/Docs/types/LargeBattleAxe.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LargeBattleAxe + + +

Back to Server.Items

+

LargeBattleAxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) LargeBattleAxe()
+ (ctor) LargeBattleAxe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBedEastAddon.html b/Docs/types/LargeBedEastAddon.html new file mode 100644 index 0000000..08c5cd5 --- /dev/null +++ b/Docs/types/LargeBedEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LargeBedEastAddon + + +

Back to Server.Items

+

LargeBedEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LargeBedEastAddon()
+ (ctor) LargeBedEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBedEastDeed.html b/Docs/types/LargeBedEastDeed.html new file mode 100644 index 0000000..fc15dd7 --- /dev/null +++ b/Docs/types/LargeBedEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeBedEastDeed + + +

Back to Server.Items

+

LargeBedEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeBedEastDeed()
+ (ctor) LargeBedEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBedSouthAddon.html b/Docs/types/LargeBedSouthAddon.html new file mode 100644 index 0000000..6ec4b0c --- /dev/null +++ b/Docs/types/LargeBedSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LargeBedSouthAddon + + +

Back to Server.Items

+

LargeBedSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LargeBedSouthAddon()
+ (ctor) LargeBedSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBedSouthDeed.html b/Docs/types/LargeBedSouthDeed.html new file mode 100644 index 0000000..37388ad --- /dev/null +++ b/Docs/types/LargeBedSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeBedSouthDeed + + +

Back to Server.Items

+

LargeBedSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeBedSouthDeed()
+ (ctor) LargeBedSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBoat.html b/Docs/types/LargeBoat.html new file mode 100644 index 0000000..1becbcb --- /dev/null +++ b/Docs/types/LargeBoat.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - LargeBoat + + +

Back to Server.Multis

+

LargeBoat : BaseBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeBoat()
+ (ctor) LargeBoat( Serial serial )
+ BaseDockedBoat DockedBoat( get; )
+ int EastID( get; )
+ int HoldDistance( get; )
+ Point3D MarkOffset( get; )
+ int NorthID( get; )
+ Point2D PortOffset( get; )
+ int SouthID( get; )
+ Point2D StarboardOffset( get; )
+ int TillerManDistance( get; )
+ int WestID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBoatDeed.html b/Docs/types/LargeBoatDeed.html new file mode 100644 index 0000000..b4712fe --- /dev/null +++ b/Docs/types/LargeBoatDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeBoatDeed + + +

Back to Server.Multis

+

LargeBoatDeed : BaseBoatDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeBoatDeed()
+ (ctor) LargeBoatDeed( Serial serial )
+ BaseBoat Boat( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeBulkEntry.html b/Docs/types/LargeBulkEntry.html new file mode 100644 index 0000000..7c90fd0 --- /dev/null +++ b/Docs/types/LargeBulkEntry.html @@ -0,0 +1,39 @@ + + + RunUO Documentation - Class Overview - LargeBulkEntry + + +

Back to Server.Engines.BulkOrders

+

LargeBulkEntry

+ (static) SmallBulkEntry[] BoneSet( get; )
+ (static) SmallBulkEntry[] Farmer( get; )
+ (static) SmallBulkEntry[] FemaleLeatherSet( get; )
+ (static) SmallBulkEntry[] FisherGirl( get; )
+ (static) SmallBulkEntry[] Gypsy( get; )
+ (static) SmallBulkEntry[] HatSet( get; )
+ (static) SmallBulkEntry[] Jester( get; )
+ (static) SmallBulkEntry[] Lady( get; )
+ (static) SmallBulkEntry[] LargeAxes( get; )
+ (static) SmallBulkEntry[] LargeChain( get; )
+ (static) SmallBulkEntry[] LargeFencing( get; )
+ (static) SmallBulkEntry[] LargeMaces( get; )
+ (static) SmallBulkEntry[] LargePlate( get; )
+ (static) SmallBulkEntry[] LargePolearms( get; )
+ (static) SmallBulkEntry[] LargeRing( get; )
+ (static) SmallBulkEntry[] LargeSwords( get; )
+ (static) SmallBulkEntry[] MaleLeatherSet( get; )
+ (static) SmallBulkEntry[] Pirate( get; )
+ (static) SmallBulkEntry[] ShoeSet( get; )
+ (static) SmallBulkEntry[] StuddedSet( get; )
+ (static) SmallBulkEntry[] TownCrier( get; )
+ (static) SmallBulkEntry[] Wizard( get; )
+ (static) LargeBulkEntry[] ConvertEntries( LargeBOD owner, SmallBulkEntry[] small )
+ (static) SmallBulkEntry[] GetEntries( string type, string name )
+ (ctor) LargeBulkEntry( LargeBOD owner, SmallBulkEntry details )
+ (ctor) LargeBulkEntry( LargeBOD owner, GenericReader reader )
+ int Amount( get; set; )
+ SmallBulkEntry Details( get; )
+ LargeBOD Owner( get; set; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeCrate.html b/Docs/types/LargeCrate.html new file mode 100644 index 0000000..fe80b85 --- /dev/null +++ b/Docs/types/LargeCrate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeCrate + + +

Back to Server.Items

+

LargeCrate : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) LargeCrate()
+ (ctor) LargeCrate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeDockedBoat.html b/Docs/types/LargeDockedBoat.html new file mode 100644 index 0000000..0c71c60 --- /dev/null +++ b/Docs/types/LargeDockedBoat.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LargeDockedBoat + + +

Back to Server.Multis

+

LargeDockedBoat : BaseDockedBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeDockedBoat( Serial serial )
+ (ctor) LargeDockedBoat( BaseBoat boat )
+ BaseBoat Boat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeDockedDragonBoat.html b/Docs/types/LargeDockedDragonBoat.html new file mode 100644 index 0000000..c0efbd3 --- /dev/null +++ b/Docs/types/LargeDockedDragonBoat.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LargeDockedDragonBoat + + +

Back to Server.Multis

+

LargeDockedDragonBoat : BaseDockedBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeDockedDragonBoat( Serial serial )
+ (ctor) LargeDockedDragonBoat( BaseBoat boat )
+ BaseBoat Boat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeDragonBoat.html b/Docs/types/LargeDragonBoat.html new file mode 100644 index 0000000..9b37fc9 --- /dev/null +++ b/Docs/types/LargeDragonBoat.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - LargeDragonBoat + + +

Back to Server.Multis

+

LargeDragonBoat : BaseBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeDragonBoat()
+ (ctor) LargeDragonBoat( Serial serial )
+ BaseDockedBoat DockedBoat( get; )
+ int EastID( get; )
+ int HoldDistance( get; )
+ Point3D MarkOffset( get; )
+ int NorthID( get; )
+ Point2D PortOffset( get; )
+ int SouthID( get; )
+ Point2D StarboardOffset( get; )
+ int TillerManDistance( get; )
+ int WestID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeDragonBoatDeed.html b/Docs/types/LargeDragonBoatDeed.html new file mode 100644 index 0000000..fef6ab0 --- /dev/null +++ b/Docs/types/LargeDragonBoatDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeDragonBoatDeed + + +

Back to Server.Multis

+

LargeDragonBoatDeed : BaseBoatDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeDragonBoatDeed()
+ (ctor) LargeDragonBoatDeed( Serial serial )
+ BaseBoat Boat( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeEmptyFlask.html b/Docs/types/LargeEmptyFlask.html new file mode 100644 index 0000000..070ced2 --- /dev/null +++ b/Docs/types/LargeEmptyFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeEmptyFlask + + +

Back to Server.Items

+

LargeEmptyFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeEmptyFlask()
+ (ctor) LargeEmptyFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeEmptyPot.html b/Docs/types/LargeEmptyPot.html new file mode 100644 index 0000000..148310f --- /dev/null +++ b/Docs/types/LargeEmptyPot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeEmptyPot + + +

Back to Server.Items

+

LargeEmptyPot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeEmptyPot()
+ (ctor) LargeEmptyPot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeFishingNetAddon.html b/Docs/types/LargeFishingNetAddon.html new file mode 100644 index 0000000..3c57f5e --- /dev/null +++ b/Docs/types/LargeFishingNetAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LargeFishingNetAddon + + +

Back to Server.Items

+

LargeFishingNetAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LargeFishingNetAddon()
+ (ctor) LargeFishingNetAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeFishingNetComponent.html b/Docs/types/LargeFishingNetComponent.html new file mode 100644 index 0000000..e0368e0 --- /dev/null +++ b/Docs/types/LargeFishingNetComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LargeFishingNetComponent + + +

Back to Server.Items

+

LargeFishingNetComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) LargeFishingNetComponent()
+ (ctor) LargeFishingNetComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeFishingNetDeed.html b/Docs/types/LargeFishingNetDeed.html new file mode 100644 index 0000000..3a8cb87 --- /dev/null +++ b/Docs/types/LargeFishingNetDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeFishingNetDeed + + +

Back to Server.Items

+

LargeFishingNetDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeFishingNetDeed()
+ (ctor) LargeFishingNetDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeFlask.html b/Docs/types/LargeFlask.html new file mode 100644 index 0000000..fa11a34 --- /dev/null +++ b/Docs/types/LargeFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeFlask + + +

Back to Server.Items

+

LargeFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeFlask()
+ (ctor) LargeFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeForgeEast.html b/Docs/types/LargeForgeEast.html new file mode 100644 index 0000000..d6cb50b --- /dev/null +++ b/Docs/types/LargeForgeEast.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LargeForgeEast + + +

Back to Server.Items

+

LargeForgeEast : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem, InternalItem2

+ (ctor) LargeForgeEast()
+ (ctor) LargeForgeEast( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeForgeEastAddon.html b/Docs/types/LargeForgeEastAddon.html new file mode 100644 index 0000000..fb9dc02 --- /dev/null +++ b/Docs/types/LargeForgeEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LargeForgeEastAddon + + +

Back to Server.Items

+

LargeForgeEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LargeForgeEastAddon()
+ (ctor) LargeForgeEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeForgeEastDeed.html b/Docs/types/LargeForgeEastDeed.html new file mode 100644 index 0000000..ae7f5c6 --- /dev/null +++ b/Docs/types/LargeForgeEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeForgeEastDeed + + +

Back to Server.Items

+

LargeForgeEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeForgeEastDeed()
+ (ctor) LargeForgeEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeForgeSouthAddon.html b/Docs/types/LargeForgeSouthAddon.html new file mode 100644 index 0000000..8fa0641 --- /dev/null +++ b/Docs/types/LargeForgeSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LargeForgeSouthAddon + + +

Back to Server.Items

+

LargeForgeSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LargeForgeSouthAddon()
+ (ctor) LargeForgeSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeForgeSouthDeed.html b/Docs/types/LargeForgeSouthDeed.html new file mode 100644 index 0000000..bb84c38 --- /dev/null +++ b/Docs/types/LargeForgeSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeForgeSouthDeed + + +

Back to Server.Items

+

LargeForgeSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeForgeSouthDeed()
+ (ctor) LargeForgeSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeForgeWest.html b/Docs/types/LargeForgeWest.html new file mode 100644 index 0000000..90be276 --- /dev/null +++ b/Docs/types/LargeForgeWest.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LargeForgeWest + + +

Back to Server.Items

+

LargeForgeWest : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem, InternalItem2

+ (ctor) LargeForgeWest()
+ (ctor) LargeForgeWest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeMarbleDeed.html b/Docs/types/LargeMarbleDeed.html new file mode 100644 index 0000000..dc68563 --- /dev/null +++ b/Docs/types/LargeMarbleDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LargeMarbleDeed + + +

Back to Server.Multis.Deeds

+

LargeMarbleDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeMarbleDeed()
+ (ctor) LargeMarbleDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeMarbleHouse.html b/Docs/types/LargeMarbleHouse.html new file mode 100644 index 0000000..80b4093 --- /dev/null +++ b/Docs/types/LargeMarbleHouse.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - LargeMarbleHouse + + +

Back to Server.Multis

+

LargeMarbleHouse : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeMarbleHouse( Serial serial )
+ (ctor) LargeMarbleHouse( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int ConvertOffsetY( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargePainting.html b/Docs/types/LargePainting.html new file mode 100644 index 0000000..ae172ab --- /dev/null +++ b/Docs/types/LargePainting.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargePainting + + +

Back to Server.Items

+

LargePainting : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargePainting()
+ (ctor) LargePainting( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargePatioDeed.html b/Docs/types/LargePatioDeed.html new file mode 100644 index 0000000..740bd97 --- /dev/null +++ b/Docs/types/LargePatioDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LargePatioDeed + + +

Back to Server.Multis.Deeds

+

LargePatioDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargePatioDeed()
+ (ctor) LargePatioDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargePatioHouse.html b/Docs/types/LargePatioHouse.html new file mode 100644 index 0000000..7226df6 --- /dev/null +++ b/Docs/types/LargePatioHouse.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - LargePatioHouse + + +

Back to Server.Multis

+

LargePatioHouse : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargePatioHouse( Serial serial )
+ (ctor) LargePatioHouse( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int ConvertOffsetY( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeSmithBOD.html b/Docs/types/LargeSmithBOD.html new file mode 100644 index 0000000..d4877ce --- /dev/null +++ b/Docs/types/LargeSmithBOD.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LargeSmithBOD + + +

Back to Server.Engines.BulkOrders

+

LargeSmithBOD : LargeBOD, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeSmithBOD()
+ (ctor) LargeSmithBOD( Serial serial )
+ (ctor) LargeSmithBOD( int amountMax, bool reqExceptional, BulkMaterialType mat, LargeBulkEntry[] entries )
+ virtual int ComputeFame()
+ virtual int ComputeGold()
+ virtual List<Item> ComputeRewards( bool full )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeStoneTableEastAddon.html b/Docs/types/LargeStoneTableEastAddon.html new file mode 100644 index 0000000..32a6625 --- /dev/null +++ b/Docs/types/LargeStoneTableEastAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LargeStoneTableEastAddon + + +

Back to Server.Items

+

LargeStoneTableEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LargeStoneTableEastAddon()
+ (ctor) LargeStoneTableEastAddon( Serial serial )
+ (ctor) LargeStoneTableEastAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeStoneTableEastDeed.html b/Docs/types/LargeStoneTableEastDeed.html new file mode 100644 index 0000000..59dc97f --- /dev/null +++ b/Docs/types/LargeStoneTableEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeStoneTableEastDeed + + +

Back to Server.Items

+

LargeStoneTableEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeStoneTableEastDeed()
+ (ctor) LargeStoneTableEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeStoneTableSouthAddon.html b/Docs/types/LargeStoneTableSouthAddon.html new file mode 100644 index 0000000..dea6503 --- /dev/null +++ b/Docs/types/LargeStoneTableSouthAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LargeStoneTableSouthAddon + + +

Back to Server.Items

+

LargeStoneTableSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LargeStoneTableSouthAddon()
+ (ctor) LargeStoneTableSouthAddon( Serial serial )
+ (ctor) LargeStoneTableSouthAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeStoneTableSouthDeed.html b/Docs/types/LargeStoneTableSouthDeed.html new file mode 100644 index 0000000..1dee236 --- /dev/null +++ b/Docs/types/LargeStoneTableSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LargeStoneTableSouthDeed + + +

Back to Server.Items

+

LargeStoneTableSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeStoneTableSouthDeed()
+ (ctor) LargeStoneTableSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeTable.html b/Docs/types/LargeTable.html new file mode 100644 index 0000000..96be088 --- /dev/null +++ b/Docs/types/LargeTable.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeTable + + +

Back to Server.Items

+

LargeTable : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeTable()
+ (ctor) LargeTable( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeTailorBOD.html b/Docs/types/LargeTailorBOD.html new file mode 100644 index 0000000..7878531 --- /dev/null +++ b/Docs/types/LargeTailorBOD.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LargeTailorBOD + + +

Back to Server.Engines.BulkOrders

+

LargeTailorBOD : LargeBOD, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeTailorBOD()
+ (ctor) LargeTailorBOD( Serial serial )
+ (ctor) LargeTailorBOD( int amountMax, bool reqExceptional, BulkMaterialType mat, LargeBulkEntry[] entries )
+ virtual int ComputeFame()
+ virtual int ComputeGold()
+ virtual List<Item> ComputeRewards( bool full )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeVase.html b/Docs/types/LargeVase.html new file mode 100644 index 0000000..3a932c1 --- /dev/null +++ b/Docs/types/LargeVase.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeVase + + +

Back to Server.Items

+

LargeVase : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeVase()
+ (ctor) LargeVase( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeVioletFlask.html b/Docs/types/LargeVioletFlask.html new file mode 100644 index 0000000..2e6dd1d --- /dev/null +++ b/Docs/types/LargeVioletFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeVioletFlask + + +

Back to Server.Items

+

LargeVioletFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeVioletFlask()
+ (ctor) LargeVioletFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LargeYellowFlask.html b/Docs/types/LargeYellowFlask.html new file mode 100644 index 0000000..80feddd --- /dev/null +++ b/Docs/types/LargeYellowFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LargeYellowFlask + + +

Back to Server.Items

+

LargeYellowFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LargeYellowFlask()
+ (ctor) LargeYellowFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LastOnComparer.html b/Docs/types/LastOnComparer.html new file mode 100644 index 0000000..584879a --- /dev/null +++ b/Docs/types/LastOnComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LastOnComparer + + +

Back to Server.Guilds

+

(GuildRosterGump) - LastOnComparer : IComparer<PlayerMobile>

+ (ctor) LastOnComparer()
+ virtual int Compare( PlayerMobile x, PlayerMobile y )
+ + diff --git a/Docs/types/LaunchBrowser.html b/Docs/types/LaunchBrowser.html new file mode 100644 index 0000000..cd309ce --- /dev/null +++ b/Docs/types/LaunchBrowser.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - LaunchBrowser + + +

Back to Server.Network

+

LaunchBrowser : Packet

+ (ctor) LaunchBrowser( string url )
+ + diff --git a/Docs/types/LavaLizard.html b/Docs/types/LavaLizard.html new file mode 100644 index 0000000..54adc3d --- /dev/null +++ b/Docs/types/LavaLizard.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LavaLizard + + +

Back to Server.Mobiles

+

LavaLizard : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) LavaLizard()
+ (ctor) LavaLizard( Serial serial )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LavaSerpent.html b/Docs/types/LavaSerpent.html new file mode 100644 index 0000000..e6b43ac --- /dev/null +++ b/Docs/types/LavaSerpent.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - LavaSerpent + + +

Back to Server.Mobiles

+

LavaSerpent : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) LavaSerpent()
+ (ctor) LavaSerpent( Serial serial )
+ bool DeathAdderCharmable( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LavaSnake.html b/Docs/types/LavaSnake.html new file mode 100644 index 0000000..e59c5d3 --- /dev/null +++ b/Docs/types/LavaSnake.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LavaSnake + + +

Back to Server.Mobiles

+

LavaSnake : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) LavaSnake()
+ (ctor) LavaSnake( Serial serial )
+ bool DeathAdderCharmable( get; )
+ bool HasBreath( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LavaTile.html b/Docs/types/LavaTile.html new file mode 100644 index 0000000..2f3b184 --- /dev/null +++ b/Docs/types/LavaTile.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LavaTile + + +

Back to Server.Items

+

LavaTile : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LavaTile()
+ (ctor) LavaTile( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Layer.html b/Docs/types/Layer.html new file mode 100644 index 0000000..b299b8e --- /dev/null +++ b/Docs/types/Layer.html @@ -0,0 +1,42 @@ + + + RunUO Documentation - Class Overview - Layer + + +

Back to Server

+

Layer (Enum)

+ Invalid = 0,
+ FirstValid = 1,
+ OneHanded = 1,
+ TwoHanded = 2,
+ Shoes = 3,
+ Pants = 4,
+ Shirt = 5,
+ Helm = 6,
+ Gloves = 7,
+ Ring = 8,
+ Talisman = 9,
+ Neck = 10,
+ Hair = 11,
+ Waist = 12,
+ InnerTorso = 13,
+ Bracelet = 14,
+ Unused_xF = 15,
+ FacialHair = 16,
+ MiddleTorso = 17,
+ Earrings = 18,
+ Arms = 19,
+ Cloak = 20,
+ Backpack = 21,
+ OuterTorso = 22,
+ OuterLegs = 23,
+ InnerLegs = 24,
+ LastUserValid = 24,
+ Mount = 25,
+ ShopBuy = 26,
+ ShopResale = 27,
+ ShopSell = 28,
+ Bank = 29,
+ LastValid = 29
+ + diff --git a/Docs/types/LayerComparer.html b/Docs/types/LayerComparer.html new file mode 100644 index 0000000..3f1a2fd --- /dev/null +++ b/Docs/types/LayerComparer.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LayerComparer + + +

Back to Server.Engines.MyRunUO

+

LayerComparer : IComparer

+ (static) int[] TranslationTable( get; )
+ (static) bool IsValid( Item item )
+ (ctor) LayerComparer()
+ virtual int Compare( object x, object y )
+ Layer Fix( int itemID, Layer oldLayer )
+ + diff --git a/Docs/types/LeafArms.html b/Docs/types/LeafArms.html new file mode 100644 index 0000000..d8aeddf --- /dev/null +++ b/Docs/types/LeafArms.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - LeafArms + + +

Back to Server.Items

+

LeafArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: SongWovenMantle

+ (ctor) LeafArms()
+ (ctor) LeafArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeafChest.html b/Docs/types/LeafChest.html new file mode 100644 index 0000000..e6608dd --- /dev/null +++ b/Docs/types/LeafChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeafChest + + +

Back to Server.Items

+

LeafChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeafChest()
+ (ctor) LeafChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeafGloves.html b/Docs/types/LeafGloves.html new file mode 100644 index 0000000..8353dc2 --- /dev/null +++ b/Docs/types/LeafGloves.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - LeafGloves + + +

Back to Server.Items

+

LeafGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+

Derived Types: StitchersMittens

+ (ctor) LeafGloves()
+ (ctor) LeafGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int CurArcaneCharges( get; set; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ bool IsArcane( get; )
+ ArmorMaterialType MaterialType( get; )
+ int MaxArcaneCharges( get; set; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Update()
+ + diff --git a/Docs/types/LeafGorget.html b/Docs/types/LeafGorget.html new file mode 100644 index 0000000..4ca0f3e --- /dev/null +++ b/Docs/types/LeafGorget.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeafGorget + + +

Back to Server.Items

+

LeafGorget : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeafGorget()
+ (ctor) LeafGorget( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeafLegs.html b/Docs/types/LeafLegs.html new file mode 100644 index 0000000..33a4879 --- /dev/null +++ b/Docs/types/LeafLegs.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - LeafLegs + + +

Back to Server.Items

+

LeafLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: SpellWovenBritches

+ (ctor) LeafLegs()
+ (ctor) LeafLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeafTonlet.html b/Docs/types/LeafTonlet.html new file mode 100644 index 0000000..e8d7a2a --- /dev/null +++ b/Docs/types/LeafTonlet.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeafTonlet + + +

Back to Server.Items

+

LeafTonlet : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeafTonlet()
+ (ctor) LeafTonlet( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Leafblade.html b/Docs/types/Leafblade.html new file mode 100644 index 0000000..a3c05e6 --- /dev/null +++ b/Docs/types/Leafblade.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Leafblade + + +

Back to Server.Items

+

Leafblade : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Leafblade()
+ (ctor) Leafblade( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Leather.html b/Docs/types/Leather.html new file mode 100644 index 0000000..b56d693 --- /dev/null +++ b/Docs/types/Leather.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Leather + + +

Back to Server.Items

+

Leather : BaseLeather, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Leather()
+ (ctor) Leather( int amount )
+ (ctor) Leather( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherArms.html b/Docs/types/LeatherArms.html new file mode 100644 index 0000000..c4c7c59 --- /dev/null +++ b/Docs/types/LeatherArms.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherArms + + +

Back to Server.Items

+

LeatherArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherArms()
+ (ctor) LeatherArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherBustierArms.html b/Docs/types/LeatherBustierArms.html new file mode 100644 index 0000000..cc28b2c --- /dev/null +++ b/Docs/types/LeatherBustierArms.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherBustierArms + + +

Back to Server.Items

+

LeatherBustierArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherBustierArms()
+ (ctor) LeatherBustierArms( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherCap.html b/Docs/types/LeatherCap.html new file mode 100644 index 0000000..cda012e --- /dev/null +++ b/Docs/types/LeatherCap.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherCap + + +

Back to Server.Items

+

LeatherCap : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherCap()
+ (ctor) LeatherCap( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherChest.html b/Docs/types/LeatherChest.html new file mode 100644 index 0000000..8aa2ea2 --- /dev/null +++ b/Docs/types/LeatherChest.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherChest + + +

Back to Server.Items

+

LeatherChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherChest()
+ (ctor) LeatherChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherDo.html b/Docs/types/LeatherDo.html new file mode 100644 index 0000000..c60e84f --- /dev/null +++ b/Docs/types/LeatherDo.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherDo + + +

Back to Server.Items

+

LeatherDo : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherDo()
+ (ctor) LeatherDo( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherDyeTub.html b/Docs/types/LeatherDyeTub.html new file mode 100644 index 0000000..283e2ce --- /dev/null +++ b/Docs/types/LeatherDyeTub.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - LeatherDyeTub + + +

Back to Server.Items

+

LeatherDyeTub : DyeTub, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, IRewardItem

+ (ctor) LeatherDyeTub()
+ (ctor) LeatherDyeTub( Serial serial )
+ bool AllowDyables( get; )
+ bool AllowLeather( get; )
+ CustomHuePicker CustomHuePicker( get; )
+ int FailMessage( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int TargetMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherGloves.html b/Docs/types/LeatherGloves.html new file mode 100644 index 0000000..2d5374e --- /dev/null +++ b/Docs/types/LeatherGloves.html @@ -0,0 +1,34 @@ + + + RunUO Documentation - Class Overview - LeatherGloves + + +

Back to Server.Items

+

LeatherGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+

Derived Types: GlovesOfThePugilist

+ (ctor) LeatherGloves()
+ (ctor) LeatherGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int CurArcaneCharges( get; set; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ bool IsArcane( get; )
+ ArmorMaterialType MaterialType( get; )
+ int MaxArcaneCharges( get; set; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Update()
+ + diff --git a/Docs/types/LeatherGlovesOfMining.html b/Docs/types/LeatherGlovesOfMining.html new file mode 100644 index 0000000..590aa38 --- /dev/null +++ b/Docs/types/LeatherGlovesOfMining.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherGlovesOfMining + + +

Back to Server.Items

+

LeatherGlovesOfMining : BaseGlovesOfMining, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherGlovesOfMining( Serial serial )
+ (ctor) LeatherGlovesOfMining( int bonus )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherGorget.html b/Docs/types/LeatherGorget.html new file mode 100644 index 0000000..2dbcfe5 --- /dev/null +++ b/Docs/types/LeatherGorget.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherGorget + + +

Back to Server.Items

+

LeatherGorget : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: VoiceOfTheFallenKing

+ (ctor) LeatherGorget()
+ (ctor) LeatherGorget( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherHaidate.html b/Docs/types/LeatherHaidate.html new file mode 100644 index 0000000..7363b43 --- /dev/null +++ b/Docs/types/LeatherHaidate.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherHaidate + + +

Back to Server.Items

+

LeatherHaidate : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherHaidate()
+ (ctor) LeatherHaidate( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherHiroSode.html b/Docs/types/LeatherHiroSode.html new file mode 100644 index 0000000..5c02c6d --- /dev/null +++ b/Docs/types/LeatherHiroSode.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherHiroSode + + +

Back to Server.Items

+

LeatherHiroSode : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: ArmsOfTacticalExcellence

+ (ctor) LeatherHiroSode()
+ (ctor) LeatherHiroSode( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherJingasa.html b/Docs/types/LeatherJingasa.html new file mode 100644 index 0000000..b4e164f --- /dev/null +++ b/Docs/types/LeatherJingasa.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherJingasa + + +

Back to Server.Items

+

LeatherJingasa : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherJingasa()
+ (ctor) LeatherJingasa( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherLegs.html b/Docs/types/LeatherLegs.html new file mode 100644 index 0000000..5800544 --- /dev/null +++ b/Docs/types/LeatherLegs.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherLegs + + +

Back to Server.Items

+

LeatherLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: ShadowDancerLeggings

+ (ctor) LeatherLegs()
+ (ctor) LeatherLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherMempo.html b/Docs/types/LeatherMempo.html new file mode 100644 index 0000000..f974ed4 --- /dev/null +++ b/Docs/types/LeatherMempo.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherMempo + + +

Back to Server.Items

+

LeatherMempo : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: LeurociansMempoOfFortune

+ (ctor) LeatherMempo()
+ (ctor) LeatherMempo( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherNinjaBelt.html b/Docs/types/LeatherNinjaBelt.html new file mode 100644 index 0000000..87027bc --- /dev/null +++ b/Docs/types/LeatherNinjaBelt.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - LeatherNinjaBelt + + +

Back to Server.Items

+

LeatherNinjaBelt : BaseWaist, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, INinjaWeapon, IUsesRemaining

+ (ctor) LeatherNinjaBelt()
+ (ctor) LeatherNinjaBelt( Serial serial )
+ Type AmmoType( get; )
+ CraftResource DefaultResource( get; )
+ int EmptyWeaponMessage( get; )
+ int FullWeaponMessage( get; )
+ int NoFreeHandMessage( get; )
+ Poison Poison( get; set; )
+ int PoisonCharges( get; set; )
+ int RecentlyUsedMessage( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ int WeaponDamage( get; )
+ int WeaponMaxRange( get; )
+ int WeaponMinRange( get; )
+ int WrongAmmoMessage( get; )
+ virtual void AttackAnimation( Mobile from, Mobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnEquip( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherNinjaHood.html b/Docs/types/LeatherNinjaHood.html new file mode 100644 index 0000000..f319b0a --- /dev/null +++ b/Docs/types/LeatherNinjaHood.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherNinjaHood + + +

Back to Server.Items

+

LeatherNinjaHood : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherNinjaHood()
+ (ctor) LeatherNinjaHood( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherNinjaJacket.html b/Docs/types/LeatherNinjaJacket.html new file mode 100644 index 0000000..79c02ed --- /dev/null +++ b/Docs/types/LeatherNinjaJacket.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherNinjaJacket + + +

Back to Server.Items

+

LeatherNinjaJacket : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherNinjaJacket()
+ (ctor) LeatherNinjaJacket( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherNinjaMitts.html b/Docs/types/LeatherNinjaMitts.html new file mode 100644 index 0000000..08d928e --- /dev/null +++ b/Docs/types/LeatherNinjaMitts.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherNinjaMitts + + +

Back to Server.Items

+

LeatherNinjaMitts : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: GlovesOfTheSun, Stormgrip

+ (ctor) LeatherNinjaMitts()
+ (ctor) LeatherNinjaMitts( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherNinjaPants.html b/Docs/types/LeatherNinjaPants.html new file mode 100644 index 0000000..1d01dc4 --- /dev/null +++ b/Docs/types/LeatherNinjaPants.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherNinjaPants + + +

Back to Server.Items

+

LeatherNinjaPants : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherNinjaPants()
+ (ctor) LeatherNinjaPants( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherShorts.html b/Docs/types/LeatherShorts.html new file mode 100644 index 0000000..6787b78 --- /dev/null +++ b/Docs/types/LeatherShorts.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherShorts + + +

Back to Server.Items

+

LeatherShorts : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherShorts()
+ (ctor) LeatherShorts( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherSkirt.html b/Docs/types/LeatherSkirt.html new file mode 100644 index 0000000..997764d --- /dev/null +++ b/Docs/types/LeatherSkirt.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - LeatherSkirt + + +

Back to Server.Items

+

LeatherSkirt : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherSkirt()
+ (ctor) LeatherSkirt( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherSuneate.html b/Docs/types/LeatherSuneate.html new file mode 100644 index 0000000..9ca1b0d --- /dev/null +++ b/Docs/types/LeatherSuneate.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - LeatherSuneate + + +

Back to Server.Items

+

LeatherSuneate : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeatherSuneate()
+ (ctor) LeatherSuneate( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherTunicArtifact.html b/Docs/types/LeatherTunicArtifact.html new file mode 100644 index 0000000..45b24cb --- /dev/null +++ b/Docs/types/LeatherTunicArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LeatherTunicArtifact + + +

Back to Server.Items

+

LeatherTunicArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LeatherTunicArtifact()
+ (ctor) LeatherTunicArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeatherWorker.html b/Docs/types/LeatherWorker.html new file mode 100644 index 0000000..d7c57e8 --- /dev/null +++ b/Docs/types/LeatherWorker.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LeatherWorker + + +

Back to Server.Mobiles

+

LeatherWorker : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) LeatherWorker()
+ (ctor) LeatherWorker( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeaveFactionGump.html b/Docs/types/LeaveFactionGump.html new file mode 100644 index 0000000..6118cc3 --- /dev/null +++ b/Docs/types/LeaveFactionGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LeaveFactionGump + + +

Back to Server.Factions

+

LeaveFactionGump : FactionGump

+ (ctor) LeaveFactionGump( PlayerMobile from, Faction faction )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/LeftArm.html b/Docs/types/LeftArm.html new file mode 100644 index 0000000..c8253aa --- /dev/null +++ b/Docs/types/LeftArm.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LeftArm + + +

Back to Server.Items

+

LeftArm : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LeftArm()
+ (ctor) LeftArm( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeftLeg.html b/Docs/types/LeftLeg.html new file mode 100644 index 0000000..96b13a0 --- /dev/null +++ b/Docs/types/LeftLeg.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LeftLeg + + +

Back to Server.Items

+

LeftLeg : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LeftLeg()
+ (ctor) LeftLeg( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LegacyOfTheDreadLord.html b/Docs/types/LegacyOfTheDreadLord.html new file mode 100644 index 0000000..829507e --- /dev/null +++ b/Docs/types/LegacyOfTheDreadLord.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LegacyOfTheDreadLord + + +

Back to Server.Items

+

LegacyOfTheDreadLord : Bardiche, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+ (ctor) LegacyOfTheDreadLord()
+ (ctor) LegacyOfTheDreadLord( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeggingsOfBane.html b/Docs/types/LeggingsOfBane.html new file mode 100644 index 0000000..73f712a --- /dev/null +++ b/Docs/types/LeggingsOfBane.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - LeggingsOfBane + + +

Back to Server.Items

+

LeggingsOfBane : ChainLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeggingsOfBane()
+ (ctor) LeggingsOfBane( Serial serial )
+ int ArtifactRarity( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeggingsOfEmbers.html b/Docs/types/LeggingsOfEmbers.html new file mode 100644 index 0000000..5c5a392 --- /dev/null +++ b/Docs/types/LeggingsOfEmbers.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - LeggingsOfEmbers + + +

Back to Server.Items

+

LeggingsOfEmbers : PlateLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeggingsOfEmbers()
+ (ctor) LeggingsOfEmbers( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LegsOfStability.html b/Docs/types/LegsOfStability.html new file mode 100644 index 0000000..5d03876 --- /dev/null +++ b/Docs/types/LegsOfStability.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - LegsOfStability + + +

Back to Server.Items

+

LegsOfStability : PlateSuneate, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LegsOfStability()
+ (ctor) LegsOfStability( Serial serial )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lemon.html b/Docs/types/Lemon.html new file mode 100644 index 0000000..14f1fd8 --- /dev/null +++ b/Docs/types/Lemon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Lemon + + +

Back to Server.Items

+

Lemon : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Lemon()
+ (ctor) Lemon( int amount )
+ (ctor) Lemon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lemons.html b/Docs/types/Lemons.html new file mode 100644 index 0000000..01bcf5f --- /dev/null +++ b/Docs/types/Lemons.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Lemons + + +

Back to Server.Items

+

Lemons : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Lemons()
+ (ctor) Lemons( int amount )
+ (ctor) Lemons( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LesserCurePotion.html b/Docs/types/LesserCurePotion.html new file mode 100644 index 0000000..70821e4 --- /dev/null +++ b/Docs/types/LesserCurePotion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LesserCurePotion + + +

Back to Server.Items

+

LesserCurePotion : BaseCurePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) LesserCurePotion()
+ (ctor) LesserCurePotion( Serial serial )
+ CureLevelInfo[] LevelInfo( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LesserExplosionPotion.html b/Docs/types/LesserExplosionPotion.html new file mode 100644 index 0000000..efaf764 --- /dev/null +++ b/Docs/types/LesserExplosionPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LesserExplosionPotion + + +

Back to Server.Items

+

LesserExplosionPotion : BaseExplosionPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) LesserExplosionPotion()
+ (ctor) LesserExplosionPotion( Serial serial )
+ int MaxDamage( get; )
+ int MinDamage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LesserHealPotion.html b/Docs/types/LesserHealPotion.html new file mode 100644 index 0000000..1b3efd5 --- /dev/null +++ b/Docs/types/LesserHealPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LesserHealPotion + + +

Back to Server.Items

+

LesserHealPotion : BaseHealPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) LesserHealPotion()
+ (ctor) LesserHealPotion( Serial serial )
+ double Delay( get; )
+ int MaxHeal( get; )
+ int MinHeal( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LesserHiryu.html b/Docs/types/LesserHiryu.html new file mode 100644 index 0000000..aebb6de --- /dev/null +++ b/Docs/types/LesserHiryu.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - LesserHiryu + + +

Back to Server.Mobiles

+

LesserHiryu : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+

Nested Types: ExpireTimer

+ (static) int GetHue()
+ (ctor) LesserHiryu()
+ (ctor) LesserHiryu( Serial serial )
+ bool CanAngerOnTame( get; )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ bool StatLossAfterTame( get; )
+ int TreasureMapLevel( get; )
+ void b__0()
+ void b__1()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual double GetControlChance( Mobile m, bool useBaseSkill )
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual bool OverrideBondingReqs()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LesserPigmentType.html b/Docs/types/LesserPigmentType.html new file mode 100644 index 0000000..36297ef --- /dev/null +++ b/Docs/types/LesserPigmentType.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - LesserPigmentType + + +

Back to Server.Items

+

LesserPigmentType (Enum)

+ None = 0,
+ PaleOrange = 1,
+ FreshRose = 2,
+ ChaosBlue = 3,
+ Silver = 4,
+ NobleGold = 5,
+ LightGreen = 6,
+ PaleBlue = 7,
+ FreshPlum = 8,
+ DeepBrown = 9,
+ BurntBrown = 10
+ + diff --git a/Docs/types/LesserPigmentsOfTokuno.html b/Docs/types/LesserPigmentsOfTokuno.html new file mode 100644 index 0000000..ae0457f --- /dev/null +++ b/Docs/types/LesserPigmentsOfTokuno.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LesserPigmentsOfTokuno + + +

Back to Server.Items

+

LesserPigmentsOfTokuno : BasePigmentsOfTokuno, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining

+ (static) int[] GetInfo( LesserPigmentType type )
+ (ctor) LesserPigmentsOfTokuno()
+ (ctor) LesserPigmentsOfTokuno( LesserPigmentType type )
+ (ctor) LesserPigmentsOfTokuno( Serial serial )
+ LesserPigmentType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LesserPoisonPotion.html b/Docs/types/LesserPoisonPotion.html new file mode 100644 index 0000000..a58a266 --- /dev/null +++ b/Docs/types/LesserPoisonPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LesserPoisonPotion + + +

Back to Server.Items

+

LesserPoisonPotion : BasePoisonPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) LesserPoisonPotion()
+ (ctor) LesserPoisonPotion( Serial serial )
+ double MaxPoisoningSkill( get; )
+ double MinPoisoningSkill( get; )
+ Poison Poison( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lettuce.html b/Docs/types/Lettuce.html new file mode 100644 index 0000000..db828bd --- /dev/null +++ b/Docs/types/Lettuce.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Lettuce + + +

Back to Server.Items

+

Lettuce : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Lettuce()
+ (ctor) Lettuce( int amount )
+ (ctor) Lettuce( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeurociansMempoOfFortune.html b/Docs/types/LeurociansMempoOfFortune.html new file mode 100644 index 0000000..ee5798b --- /dev/null +++ b/Docs/types/LeurociansMempoOfFortune.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - LeurociansMempoOfFortune + + +

Back to Server.Items

+

LeurociansMempoOfFortune : LeatherMempo, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LeurociansMempoOfFortune()
+ (ctor) LeurociansMempoOfFortune( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeverPuzzleController.html b/Docs/types/LeverPuzzleController.html new file mode 100644 index 0000000..cace3d0 --- /dev/null +++ b/Docs/types/LeverPuzzleController.html @@ -0,0 +1,48 @@ + + + RunUO Documentation - Class Overview - LeverPuzzleController + + +

Back to Server.Engines.Doom

+

LeverPuzzleController : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: LampRoomKickTimer, LampRoomTimer, RockTimer

+ (static) Item AddLeverPuzzlePart( int[] Loc, Item newitem )
+ (static) bool AniSafe( Mobile m )
+ (static) void DoDamage( Mobile m, int min, int max, bool poison )
+ (static) void GenLampPuzzle_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (static) bool IsValidDamagable( Mobile m )
+ (static) void MoveMobileOut( Mobile m )
+ (static) void NukeItemList( List<Item> list )
+ (static) void PlayEffect( IEntity from, IEntity to, int itemid, int speed, bool explodes )
+ (static) void PlayerSendASCII( Mobile player, int index )
+ (static) void PlaySounds( Point3D location, int[] sounds )
+ (static) void POHMessage( Mobile from, int index )
+ (static) Point3D RandomPointIn( Rectangle2D rect, int z )
+ (static) Point3D RandomPointIn( Point3D point, int range )
+ (static) Point3D RandomPointIn( int x, int y, int x2, int y2, int z )
+ (static) void SendLocationEffect( IPoint3D p, int itemID, int speed, int duration, int hue )
+ (static) IEntity ZAdjustedIEFromMobile( Mobile m, int ZDelta )
+ (ctor) LeverPuzzleController()
+ (ctor) LeverPuzzleController( Serial serial )
+ bool CircleComplete( get; )
+ bool Enabled( get; set; )
+ ushort MyKey( get; set; )
+ Mobile Successful( get; )
+ ushort TheirKey( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenKey()
+ virtual LeverPuzzleLever GetLever( int index )
+ virtual PlayerMobile GetOccupant( int index )
+ virtual LeverPuzzleStatue GetStatue( int index )
+ virtual void KillTimers()
+ virtual void LeverPulled( ushort code )
+ virtual void OnAfterDelete()
+ virtual void OnDelete()
+ virtual void PuzzleStatus( int message, string fstring )
+ virtual void RemoveSuccessful()
+ virtual void ResetLevers()
+ virtual void ResetPuzzle()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeverPuzzleLever.html b/Docs/types/LeverPuzzleLever.html new file mode 100644 index 0000000..c7aa6a5 --- /dev/null +++ b/Docs/types/LeverPuzzleLever.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LeverPuzzleLever + + +

Back to Server.Engines.Doom

+

LeverPuzzleLever : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LeverPuzzleLever( Serial serial )
+ (ctor) LeverPuzzleLever( ushort code, LeverPuzzleController controller )
+ ushort Code( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LeverPuzzleRegion.html b/Docs/types/LeverPuzzleRegion.html new file mode 100644 index 0000000..1587586 --- /dev/null +++ b/Docs/types/LeverPuzzleRegion.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LeverPuzzleRegion + + +

Back to Server.Engines.Doom

+

LeverPuzzleRegion : BaseRegion, IComparable

+ (ctor) LeverPuzzleRegion( LeverPuzzleController controller, int[] loc )
+ Mobile Occupant( get; )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ + diff --git a/Docs/types/LeverPuzzleStatue.html b/Docs/types/LeverPuzzleStatue.html new file mode 100644 index 0000000..984be23 --- /dev/null +++ b/Docs/types/LeverPuzzleStatue.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LeverPuzzleStatue + + +

Back to Server.Engines.Doom

+

LeverPuzzleStatue : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LeverPuzzleStatue( Serial serial )
+ (ctor) LeverPuzzleStatue( int[] dat, LeverPuzzleController controller )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Leviathan.html b/Docs/types/Leviathan.html new file mode 100644 index 0000000..327d53d --- /dev/null +++ b/Docs/types/Leviathan.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - Leviathan + + +

Back to Server.Mobiles

+

Leviathan : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) Type[] Artifacts( get; )
+ (static) void GiveArtifactTo( Mobile m )
+ (ctor) Leviathan()
+ (ctor) Leviathan( Mobile fisher )
+ (ctor) Leviathan( Serial serial )
+ int BreathColdDamage( get; )
+ double BreathDamageScalar( get; )
+ int BreathEffectHue( get; )
+ int BreathFireDamage( get; )
+ double BreathMaxDelay( get; )
+ double BreathMinDelay( get; )
+ int BreathPhysicalDamage( get; )
+ Mobile Fisher( get; set; )
+ bool HasBreath( get; )
+ double TreasureMapChance( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnDeath( Container c )
+ virtual void OnKilledBy( Mobile mob )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LibraryBookcase.html b/Docs/types/LibraryBookcase.html new file mode 100644 index 0000000..606d44d --- /dev/null +++ b/Docs/types/LibraryBookcase.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LibraryBookcase + + +

Back to Server.Items

+

LibraryBookcase : FillableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) LibraryBookcase()
+ (ctor) LibraryBookcase( Serial serial )
+ bool IsLockable( get; )
+ int SpawnThreshold( get; )
+ virtual void AcquireContent()
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetSpawnCount()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lich.html b/Docs/types/Lich.html new file mode 100644 index 0000000..87dc2a3 --- /dev/null +++ b/Docs/types/Lich.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Lich + + +

Back to Server.Mobiles

+

Lich : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Lich()
+ (ctor) Lich( Serial serial )
+ bool BleedImmune( get; )
+ bool CanRummageCorpses( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LichFormScroll.html b/Docs/types/LichFormScroll.html new file mode 100644 index 0000000..81ab122 --- /dev/null +++ b/Docs/types/LichFormScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LichFormScroll + + +

Back to Server.Items

+

LichFormScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) LichFormScroll()
+ (ctor) LichFormScroll( int amount )
+ (ctor) LichFormScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LichFormSpell.html b/Docs/types/LichFormSpell.html new file mode 100644 index 0000000..f6cc085 --- /dev/null +++ b/Docs/types/LichFormSpell.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - LichFormSpell + + +

Back to Server.Spells.Necromancy

+

LichFormSpell : TransformationSpell, ISpell, ITransformationSpell

+ (ctor) LichFormSpell( Mobile caster, Item scroll )
+ int Body( get; )
+ TimeSpan CastDelayBase( get; )
+ int ColdResistOffset( get; )
+ int FireResistOffset( get; )
+ int PoisResistOffset( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ double TickRate( get; )
+ virtual void DoEffect( Mobile m )
+ virtual void OnTick( Mobile m )
+ + diff --git a/Docs/types/LichLord.html b/Docs/types/LichLord.html new file mode 100644 index 0000000..2d60845 --- /dev/null +++ b/Docs/types/LichLord.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - LichLord + + +

Back to Server.Mobiles

+

LichLord : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) LichLord()
+ (ctor) LichLord( Serial serial )
+ bool BleedImmune( get; )
+ bool CanRummageCorpses( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LieutenantOfTheBritannianRoyalGuard.html b/Docs/types/LieutenantOfTheBritannianRoyalGuard.html new file mode 100644 index 0000000..7f537b3 --- /dev/null +++ b/Docs/types/LieutenantOfTheBritannianRoyalGuard.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LieutenantOfTheBritannianRoyalGuard + + +

Back to Server.Items

+

LieutenantOfTheBritannianRoyalGuard : BodySash, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LieutenantOfTheBritannianRoyalGuard()
+ (ctor) LieutenantOfTheBritannianRoyalGuard( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LifeOfATravellingMinstrel.html b/Docs/types/LifeOfATravellingMinstrel.html new file mode 100644 index 0000000..7f549c6 --- /dev/null +++ b/Docs/types/LifeOfATravellingMinstrel.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LifeOfATravellingMinstrel + + +

Back to Server.Items

+

LifeOfATravellingMinstrel : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) LifeOfATravellingMinstrel()
+ (ctor) LifeOfATravellingMinstrel( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LiftRej.html b/Docs/types/LiftRej.html new file mode 100644 index 0000000..b286bbb --- /dev/null +++ b/Docs/types/LiftRej.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - LiftRej + + +

Back to Server.Network

+

LiftRej : Packet

+ (ctor) LiftRej( LRReason reason )
+ + diff --git a/Docs/types/LightCycle.html b/Docs/types/LightCycle.html new file mode 100644 index 0000000..22a6632 --- /dev/null +++ b/Docs/types/LightCycle.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LightCycle + + +

Back to Server

+

LightCycle

+

Nested Types: LightCycleTimer, NightSightTimer

+ (static) int LevelOverride( get; set; )
+ (static) int ComputeLevelFor( Mobile from )
+ (static) void Initialize()
+ (static) void Light_OnCommand( CommandEventArgs e )
+ (static) void OnLogin( LoginEventArgs args )
+ (ctor) LightCycle()
+ + diff --git a/Docs/types/LightCycleTimer.html b/Docs/types/LightCycleTimer.html new file mode 100644 index 0000000..c57d285 --- /dev/null +++ b/Docs/types/LightCycleTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LightCycleTimer + + +

Back to Server

+

(LightCycle) - LightCycleTimer : Timer

+ (ctor) LightCycleTimer()
+ virtual void OnTick()
+ + diff --git a/Docs/types/LightEntry.html b/Docs/types/LightEntry.html new file mode 100644 index 0000000..536938e --- /dev/null +++ b/Docs/types/LightEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - LightEntry + + +

Back to Server.Items

+

(AddonComponent) - LightEntry

+ (ctor) LightEntry( LightType light, int[] itemIDs )
+ + diff --git a/Docs/types/LightFlowerTapestryEastAddon.html b/Docs/types/LightFlowerTapestryEastAddon.html new file mode 100644 index 0000000..4416218 --- /dev/null +++ b/Docs/types/LightFlowerTapestryEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LightFlowerTapestryEastAddon + + +

Back to Server.Items

+

LightFlowerTapestryEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LightFlowerTapestryEastAddon()
+ (ctor) LightFlowerTapestryEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightFlowerTapestryEastDeed.html b/Docs/types/LightFlowerTapestryEastDeed.html new file mode 100644 index 0000000..737c97d --- /dev/null +++ b/Docs/types/LightFlowerTapestryEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LightFlowerTapestryEastDeed + + +

Back to Server.Items

+

LightFlowerTapestryEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LightFlowerTapestryEastDeed()
+ (ctor) LightFlowerTapestryEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightFlowerTapestrySouthAddon.html b/Docs/types/LightFlowerTapestrySouthAddon.html new file mode 100644 index 0000000..6d34c56 --- /dev/null +++ b/Docs/types/LightFlowerTapestrySouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LightFlowerTapestrySouthAddon + + +

Back to Server.Items

+

LightFlowerTapestrySouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) LightFlowerTapestrySouthAddon()
+ (ctor) LightFlowerTapestrySouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightFlowerTapestrySouthDeed.html b/Docs/types/LightFlowerTapestrySouthDeed.html new file mode 100644 index 0000000..1b50fe8 --- /dev/null +++ b/Docs/types/LightFlowerTapestrySouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LightFlowerTapestrySouthDeed + + +

Back to Server.Items

+

LightFlowerTapestrySouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LightFlowerTapestrySouthDeed()
+ (ctor) LightFlowerTapestrySouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightOfTheWinterSolstice.html b/Docs/types/LightOfTheWinterSolstice.html new file mode 100644 index 0000000..3cd4e87 --- /dev/null +++ b/Docs/types/LightOfTheWinterSolstice.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - LightOfTheWinterSolstice + + +

Back to Server.Items

+

LightOfTheWinterSolstice : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LightOfTheWinterSolstice()
+ (ctor) LightOfTheWinterSolstice( Serial serial )
+ (ctor) LightOfTheWinterSolstice( string dipper )
+ string Dipper( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightOfWayGlasses.html b/Docs/types/LightOfWayGlasses.html new file mode 100644 index 0000000..b252ffd --- /dev/null +++ b/Docs/types/LightOfWayGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - LightOfWayGlasses + + +

Back to Server.Items

+

LightOfWayGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LightOfWayGlasses()
+ (ctor) LightOfWayGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightPlateJingasa.html b/Docs/types/LightPlateJingasa.html new file mode 100644 index 0000000..d0674b7 --- /dev/null +++ b/Docs/types/LightPlateJingasa.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - LightPlateJingasa + + +

Back to Server.Items

+

LightPlateJingasa : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LightPlateJingasa()
+ (ctor) LightPlateJingasa( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightSource.html b/Docs/types/LightSource.html new file mode 100644 index 0000000..bc3da81 --- /dev/null +++ b/Docs/types/LightSource.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LightSource + + +

Back to Server.Items

+

LightSource : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LightSource()
+ (ctor) LightSource( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightType.html b/Docs/types/LightType.html new file mode 100644 index 0000000..9c45981 --- /dev/null +++ b/Docs/types/LightType.html @@ -0,0 +1,65 @@ + + + RunUO Documentation - Class Overview - LightType + + +

Back to Server

+

LightType (Enum)

+ ArchedWindowEast = 0,
+ Circle225 = 1,
+ Circle150 = 2,
+ DoorSouth = 3,
+ DoorEast = 4,
+ NorthBig = 5,
+ NorthEastBig = 6,
+ EastBig = 7,
+ WestBig = 8,
+ SouthWestBig = 9,
+ SouthBig = 10,
+ NorthSmall = 11,
+ NorthEastSmall = 12,
+ EastSmall = 13,
+ WestSmall = 14,
+ SouthSmall = 15,
+ DecorationNorth = 16,
+ DecorationNorthEast = 17,
+ EastTiny = 18,
+ DecorationWest = 19,
+ DecorationSouthWest = 20,
+ SouthTiny = 21,
+ RectWindowSouthNoRay = 22,
+ RectWindowEastNoRay = 23,
+ RectWindowSouth = 24,
+ RectWindowEast = 25,
+ ArchedWindowSouthNoRay = 26,
+ ArchedWindowEastNoRay = 27,
+ ArchedWindowSouth = 28,
+ Circle300 = 29,
+ NorthWestBig = 30,
+ DarkSouthEast = 31,
+ DarkSouth = 32,
+ DarkNorthWest = 33,
+ DarkSouthEast2 = 34,
+ DarkEast = 35,
+ DarkCircle300 = 36,
+ DoorOpenSouth = 37,
+ DoorOpenEast = 38,
+ SquareWindowEast = 39,
+ SquareWindowEastNoRay = 40,
+ SquareWindowSouth = 41,
+ SquareWindowSouthNoRay = 42,
+ Empty = 43,
+ SkinnyWindowSouthNoRay = 44,
+ SkinnyWindowEast = 45,
+ SkinnyWindowEastNoRay = 46,
+ HoleSouth = 47,
+ HoleEast = 48,
+ Moongate = 49,
+ Strips = 50,
+ SmallHoleSouth = 51,
+ SmallHoleEast = 52,
+ NorthBig2 = 53,
+ WestBig2 = 54,
+ NorthWestBig2 = 55
+ + diff --git a/Docs/types/LightWoodDoor.html b/Docs/types/LightWoodDoor.html new file mode 100644 index 0000000..567ded8 --- /dev/null +++ b/Docs/types/LightWoodDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LightWoodDoor + + +

Back to Server.Items

+

LightWoodDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) LightWoodDoor( DoorFacing facing )
+ (ctor) LightWoodDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightWoodGate.html b/Docs/types/LightWoodGate.html new file mode 100644 index 0000000..9229ca8 --- /dev/null +++ b/Docs/types/LightWoodGate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LightWoodGate + + +

Back to Server.Items

+

LightWoodGate : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) LightWoodGate( DoorFacing facing )
+ (ctor) LightWoodGate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightYarn.html b/Docs/types/LightYarn.html new file mode 100644 index 0000000..ef36645 --- /dev/null +++ b/Docs/types/LightYarn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LightYarn + + +

Back to Server.Items

+

LightYarn : BaseClothMaterial, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) LightYarn()
+ (ctor) LightYarn( int amount )
+ (ctor) LightYarn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightYarnUnraveled.html b/Docs/types/LightYarnUnraveled.html new file mode 100644 index 0000000..e938d1a --- /dev/null +++ b/Docs/types/LightYarnUnraveled.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LightYarnUnraveled + + +

Back to Server.Items

+

LightYarnUnraveled : BaseClothMaterial, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) LightYarnUnraveled()
+ (ctor) LightYarnUnraveled( int amount )
+ (ctor) LightYarnUnraveled( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightningScroll.html b/Docs/types/LightningScroll.html new file mode 100644 index 0000000..ff8d156 --- /dev/null +++ b/Docs/types/LightningScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LightningScroll + + +

Back to Server.Items

+

LightningScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) LightningScroll()
+ (ctor) LightningScroll( int amount )
+ (ctor) LightningScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LightningSpell.html b/Docs/types/LightningSpell.html new file mode 100644 index 0000000..e864d7e --- /dev/null +++ b/Docs/types/LightningSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LightningSpell + + +

Back to Server.Spells.Fourth

+

LightningSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) LightningSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/LightningStrike.html b/Docs/types/LightningStrike.html new file mode 100644 index 0000000..8652913 --- /dev/null +++ b/Docs/types/LightningStrike.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - LightningStrike + + +

Back to Server.Spells.Bushido

+

LightningStrike : SamuraiMove

+ (ctor) LightningStrike()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ bool DelayedContext( get; )
+ double RequiredSkill( get; )
+ bool ValidatesDuringHit( get; )
+ virtual int GetAccuracyBonus( Mobile attacker )
+ virtual bool IgnoreArmor( Mobile attacker )
+ virtual bool OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual void OnClearMove( Mobile attacker )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/LightningWand.html b/Docs/types/LightningWand.html new file mode 100644 index 0000000..364844c --- /dev/null +++ b/Docs/types/LightningWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LightningWand + + +

Back to Server.Items

+

LightningWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) LightningWand()
+ (ctor) LightningWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lime.html b/Docs/types/Lime.html new file mode 100644 index 0000000..c00d652 --- /dev/null +++ b/Docs/types/Lime.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Lime + + +

Back to Server.Items

+

Lime : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Lime()
+ (ctor) Lime( int amount )
+ (ctor) Lime( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Limes.html b/Docs/types/Limes.html new file mode 100644 index 0000000..3fe0d21 --- /dev/null +++ b/Docs/types/Limes.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Limes + + +

Back to Server.Items

+

Limes : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Limes()
+ (ctor) Limes( int amount )
+ (ctor) Limes( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LimitExtension.html b/Docs/types/LimitExtension.html new file mode 100644 index 0000000..09ac0d3 --- /dev/null +++ b/Docs/types/LimitExtension.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LimitExtension + + +

Back to Server.Commands.Generic

+

LimitExtension : BaseExtension

+ (static) BaseExtension <.cctor>b__0()
+ (static) void Initialize()
+ (ctor) LimitExtension()
+ ExtensionInfo Info( get; )
+ int Limit( get; )
+ virtual void Filter( ArrayList list )
+ virtual void Parse( Mobile from, string[] arguments, int offset, int size )
+ + diff --git a/Docs/types/Listener.html b/Docs/types/Listener.html new file mode 100644 index 0000000..1968233 --- /dev/null +++ b/Docs/types/Listener.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Listener + + +

Back to Server.Network

+

Listener : IDisposable

+ (static) IPEndPoint[] EndPoints( get; set; )
+ (ctor) Listener( IPEndPoint ipep )
+ Socket Bind( IPEndPoint ipep )
+ void DisplayListener()
+ virtual void Dispose()
+ void Enqueue( Socket socket )
+ void OnAccept( IAsyncResult asyncResult )
+ void Release( Socket socket )
+ Socket[] Slice()
+ bool VerifySocket( Socket socket )
+ + diff --git a/Docs/types/Lizardman.html b/Docs/types/Lizardman.html new file mode 100644 index 0000000..bda6ef5 --- /dev/null +++ b/Docs/types/Lizardman.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Lizardman + + +

Back to Server.Mobiles

+

Lizardman : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Lizardman()
+ (ctor) Lizardman( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ InhumanSpeech SpeechType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LizardmenCamp.html b/Docs/types/LizardmenCamp.html new file mode 100644 index 0000000..0fd8df1 --- /dev/null +++ b/Docs/types/LizardmenCamp.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - LizardmenCamp + + +

Back to Server.Multis

+

LizardmenCamp : BaseCamp, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LizardmenCamp()
+ (ctor) LizardmenCamp( Serial serial )
+ Mobile Lizardmen( get; )
+ void AddCampChests()
+ virtual void AddComponents()
+ virtual void AddItem( Item item, int xOffset, int yOffset, int zOffset )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Llama.html b/Docs/types/Llama.html new file mode 100644 index 0000000..cf0f1e2 --- /dev/null +++ b/Docs/types/Llama.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Llama + + +

Back to Server.Mobiles

+

Llama : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Llama()
+ (ctor) Llama( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LoadEntry.html b/Docs/types/LoadEntry.html new file mode 100644 index 0000000..4f041ba --- /dev/null +++ b/Docs/types/LoadEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LoadEntry + + +

Back to Server.Items

+

(NinjaWeapon) - LoadEntry : ContextMenuEntry

+ (ctor) LoadEntry( INinjaWeapon wep, int entry )
+ virtual void OnClick()
+ + diff --git a/Docs/types/LocalMap.html b/Docs/types/LocalMap.html new file mode 100644 index 0000000..d64c3cd --- /dev/null +++ b/Docs/types/LocalMap.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LocalMap + + +

Back to Server.Items

+

LocalMap : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) LocalMap()
+ (ctor) LocalMap( Serial serial )
+ int LabelNumber( get; )
+ virtual void CraftInit( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LocalizedAddonComponent.html b/Docs/types/LocalizedAddonComponent.html new file mode 100644 index 0000000..7b361f0 --- /dev/null +++ b/Docs/types/LocalizedAddonComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LocalizedAddonComponent + + +

Back to Server.Items

+

LocalizedAddonComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) LocalizedAddonComponent( Serial serial )
+ (ctor) LocalizedAddonComponent( int itemID, int labelNumber )
+ int LabelNumber( get; )
+ int Number( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LocalizedContainerComponent.html b/Docs/types/LocalizedContainerComponent.html new file mode 100644 index 0000000..5679737 --- /dev/null +++ b/Docs/types/LocalizedContainerComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LocalizedContainerComponent + + +

Back to Server.Items

+

LocalizedContainerComponent : AddonContainerComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) LocalizedContainerComponent( Serial serial )
+ (ctor) LocalizedContainerComponent( int itemID, int labelNumber )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LocalizedSign.html b/Docs/types/LocalizedSign.html new file mode 100644 index 0000000..2f27e7a --- /dev/null +++ b/Docs/types/LocalizedSign.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LocalizedSign + + +

Back to Server.Items

+

LocalizedSign : Sign, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LocalizedSign( Serial serial )
+ (ctor) LocalizedSign( int itemID, int labelNumber )
+ (ctor) LocalizedSign( SignType type, SignFacing facing, int labelNumber )
+ int LabelNumber( get; )
+ int Number( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LocalizedStatic.html b/Docs/types/LocalizedStatic.html new file mode 100644 index 0000000..411b13d --- /dev/null +++ b/Docs/types/LocalizedStatic.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LocalizedStatic + + +

Back to Server.Items

+

LocalizedStatic : Static, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LocalizedStatic( Serial serial )
+ (ctor) LocalizedStatic( int itemID )
+ (ctor) LocalizedStatic( int itemID, int labelNumber )
+ int LabelNumber( get; )
+ int Number( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LocationComparer.html b/Docs/types/LocationComparer.html new file mode 100644 index 0000000..034e5d1 --- /dev/null +++ b/Docs/types/LocationComparer.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LocationComparer + + +

Back to Server

+

(Mobile) - LocationComparer : IComparer

+ (static) LocationComparer GetInstance( IPoint3D relativeTo )
+ (ctor) LocationComparer( IPoint3D relativeTo )
+ IPoint3D RelativeTo( get; set; )
+ virtual int Compare( object x, object y )
+ int GetDistance( IPoint3D p )
+ + diff --git a/Docs/types/LocationEffect.html b/Docs/types/LocationEffect.html new file mode 100644 index 0000000..69604ca --- /dev/null +++ b/Docs/types/LocationEffect.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - LocationEffect + + +

Back to Server.Network

+

LocationEffect : HuedEffect

+ (ctor) LocationEffect( IPoint3D p, int itemID, int speed, int duration, int hue, int renderMode )
+ + diff --git a/Docs/types/LocationParticleEffect.html b/Docs/types/LocationParticleEffect.html new file mode 100644 index 0000000..f3898e6 --- /dev/null +++ b/Docs/types/LocationParticleEffect.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - LocationParticleEffect + + +

Back to Server.Network

+

LocationParticleEffect : ParticleEffect

+ (ctor) LocationParticleEffect( IEntity e, int itemID, int speed, int duration, int hue, int renderMode, int effect, int unknown )
+ + diff --git a/Docs/types/LocationTree.html b/Docs/types/LocationTree.html new file mode 100644 index 0000000..2f0552b --- /dev/null +++ b/Docs/types/LocationTree.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LocationTree + + +

Back to Server.Gumps

+

LocationTree

+ (ctor) LocationTree( string fileName, Map map )
+ Dictionary<Mobile,ParentNode> LastBranch( get; )
+ Map Map( get; )
+ ParentNode Root( get; )
+ ParentNode Parse( XmlTextReader xml )
+ + diff --git a/Docs/types/LockKarmaEntry.html b/Docs/types/LockKarmaEntry.html new file mode 100644 index 0000000..3fd808e --- /dev/null +++ b/Docs/types/LockKarmaEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LockKarmaEntry + + +

Back to Server.Items

+

(AnkhOfSacrificeComponent) - LockKarmaEntry : ContextMenuEntry

+ (ctor) LockKarmaEntry( PlayerMobile mobile, AnkhOfSacrificeAddon ankh )
+ virtual void OnClick()
+ + diff --git a/Docs/types/LockableBarrel.html b/Docs/types/LockableBarrel.html new file mode 100644 index 0000000..fb1a1f7 --- /dev/null +++ b/Docs/types/LockableBarrel.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LockableBarrel + + +

Back to Server.Multis

+

LockableBarrel : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) LockableBarrel()
+ (ctor) LockableBarrel( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LockableContainer.html b/Docs/types/LockableContainer.html new file mode 100644 index 0000000..4809598 --- /dev/null +++ b/Docs/types/LockableContainer.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - LockableContainer + + +

Back to Server.Items

+

LockableContainer : TrapableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Derived Types: BaseTreasureChest, ChestOfHeirlooms, FillableContainer, FinishedWoodenChest, GildedWoodenChest, LargeCrate, LockableBarrel, MarkContainer, MediumCrate, MetalBox, MetalChest, MetalGoldenChest, OrnateWoodenChest, ParagonChest, PlainWoodenChest, SmallCrate, TreasureMapChest, WoodenBox, WoodenChest, WoodenFootLocker

+ (ctor) LockableContainer( Serial serial )
+ (ctor) LockableContainer( int itemID )
+ bool DisplaysContent( get; )
+ bool IsShipwreckedItem( get; set; )
+ uint KeyValue( get; set; )
+ bool Locked( get; set; )
+ int LockLevel( get; set; )
+ int MaxLockLevel( get; set; )
+ Mobile Picker( get; set; )
+ int RequiredSkill( get; set; )
+ bool TrapOnLockpick( get; set; )
+ bool TrapOnOpen( get; )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual bool CheckContentDisplay( Mobile from )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ virtual bool CheckLocked( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void LockPick( Mobile from )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClickSecureTrade( Mobile from )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnSnoop( Mobile from )
+ virtual void OnTelekinesis( Mobile from )
+ virtual void Open( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage )
+ + diff --git a/Docs/types/LockdownTarget.html b/Docs/types/LockdownTarget.html new file mode 100644 index 0000000..dd6f8cb --- /dev/null +++ b/Docs/types/LockdownTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LockdownTarget + + +

Back to Server.Multis

+

LockdownTarget : Target

+ (ctor) LockdownTarget( bool release, BaseHouse house )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetNotAccessible( Mobile from, object targeted )
+ + diff --git a/Docs/types/Lockpick.html b/Docs/types/Lockpick.html new file mode 100644 index 0000000..ca5ced0 --- /dev/null +++ b/Docs/types/Lockpick.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Lockpick + + +

Back to Server.Items

+

Lockpick : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) Lockpick()
+ (ctor) Lockpick( int amount )
+ (ctor) Lockpick( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lockpicks.html b/Docs/types/Lockpicks.html new file mode 100644 index 0000000..adec4da --- /dev/null +++ b/Docs/types/Lockpicks.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Lockpicks + + +

Back to Server.Items

+

Lockpicks : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Lockpicks()
+ (ctor) Lockpicks( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Log.html b/Docs/types/Log.html new file mode 100644 index 0000000..4054bb6 --- /dev/null +++ b/Docs/types/Log.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Log + + +

Back to Server.Items

+

Log : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IAxe

+

Derived Types: AshLog, BloodwoodLog, FrostwoodLog, HeartwoodLog, OakLog, YewLog

+ (ctor) Log()
+ (ctor) Log( Serial serial )
+ (ctor) Log( CraftResource resource )
+ (ctor) Log( int amount )
+ (ctor) Log( CraftResource resource, int amount )
+ CraftResource Resource( get; set; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual bool Axe( Mobile from, BaseAxe axe )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool TryCreateBoards( Mobile from, double skill, Item item )
+ + diff --git a/Docs/types/LogCabin.html b/Docs/types/LogCabin.html new file mode 100644 index 0000000..25ce9c6 --- /dev/null +++ b/Docs/types/LogCabin.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - LogCabin + + +

Back to Server.Multis

+

LogCabin : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LogCabin( Serial serial )
+ (ctor) LogCabin( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LogCabinDeed.html b/Docs/types/LogCabinDeed.html new file mode 100644 index 0000000..534f518 --- /dev/null +++ b/Docs/types/LogCabinDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LogCabinDeed + + +

Back to Server.Multis.Deeds

+

LogCabinDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LogCabinDeed()
+ (ctor) LogCabinDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Login.html b/Docs/types/Login.html new file mode 100644 index 0000000..cc8ff70 --- /dev/null +++ b/Docs/types/Login.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Login + + +

Back to Server.RemoteAdmin

+

Login : Packet

+ (ctor) Login( LoginResponse resp )
+ + diff --git a/Docs/types/LoginComplete.html b/Docs/types/LoginComplete.html new file mode 100644 index 0000000..6a89f49 --- /dev/null +++ b/Docs/types/LoginComplete.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - LoginComplete + + +

Back to Server.Network

+

LoginComplete : Packet

+ (ctor) LoginComplete()
+ + diff --git a/Docs/types/LoginConfirm.html b/Docs/types/LoginConfirm.html new file mode 100644 index 0000000..2507107 --- /dev/null +++ b/Docs/types/LoginConfirm.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - LoginConfirm + + +

Back to Server.Network

+

LoginConfirm : Packet

+ (ctor) LoginConfirm( Mobile m )
+ + diff --git a/Docs/types/LoginEventArgs.html b/Docs/types/LoginEventArgs.html new file mode 100644 index 0000000..1058555 --- /dev/null +++ b/Docs/types/LoginEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LoginEventArgs + + +

Back to Server

+

LoginEventArgs : EventArgs

+ (ctor) LoginEventArgs( Mobile mobile )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/LoginEventHandler.html b/Docs/types/LoginEventHandler.html new file mode 100644 index 0000000..37f9de2 --- /dev/null +++ b/Docs/types/LoginEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LoginEventHandler + + +

Back to Server

+

LoginEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) LoginEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( LoginEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( LoginEventArgs e )
+ + diff --git a/Docs/types/LoginResponse.html b/Docs/types/LoginResponse.html new file mode 100644 index 0000000..0712641 --- /dev/null +++ b/Docs/types/LoginResponse.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LoginResponse + + +

Back to Server.RemoteAdmin

+

LoginResponse (Enum)

+ NoUser = 0,
+ BadIP = 1,
+ BadPass = 2,
+ NoAccess = 3,
+ OK = 4
+ + diff --git a/Docs/types/LoginStats.html b/Docs/types/LoginStats.html new file mode 100644 index 0000000..aafd521 --- /dev/null +++ b/Docs/types/LoginStats.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LoginStats + + +

Back to Server.Misc

+

LoginStats

+ (static) void EventSink_Login( LoginEventArgs args )
+ (static) void Initialize()
+ (ctor) LoginStats()
+ + diff --git a/Docs/types/LoginTimer.html b/Docs/types/LoginTimer.html new file mode 100644 index 0000000..7face45 --- /dev/null +++ b/Docs/types/LoginTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LoginTimer + + +

Back to Server.Network

+

(PacketHandlers) - LoginTimer : Timer

+ (ctor) LoginTimer( NetState state, Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/LogoutAck.html b/Docs/types/LogoutAck.html new file mode 100644 index 0000000..759cc85 --- /dev/null +++ b/Docs/types/LogoutAck.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - LogoutAck + + +

Back to Server.Network

+

LogoutAck : Packet

+ (ctor) LogoutAck()
+ + diff --git a/Docs/types/LogoutEventArgs.html b/Docs/types/LogoutEventArgs.html new file mode 100644 index 0000000..0d7138f --- /dev/null +++ b/Docs/types/LogoutEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LogoutEventArgs + + +

Back to Server

+

LogoutEventArgs : EventArgs

+ (ctor) LogoutEventArgs( Mobile m )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/LogoutEventHandler.html b/Docs/types/LogoutEventHandler.html new file mode 100644 index 0000000..de0aa88 --- /dev/null +++ b/Docs/types/LogoutEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LogoutEventHandler + + +

Back to Server

+

LogoutEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) LogoutEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( LogoutEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( LogoutEventArgs e )
+ + diff --git a/Docs/types/LogoutGump.html b/Docs/types/LogoutGump.html new file mode 100644 index 0000000..f336eaa --- /dev/null +++ b/Docs/types/LogoutGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LogoutGump + + +

Back to Server.Items

+

(Bedroll) - LogoutGump : Gump

+ (ctor) LogoutGump( CampfireEntry entry, Bedroll bedroll )
+ void CloseGump()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/LogoutTimer.html b/Docs/types/LogoutTimer.html new file mode 100644 index 0000000..801a813 --- /dev/null +++ b/Docs/types/LogoutTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - LogoutTimer + + +

Back to Server

+

(Mobile) - LogoutTimer : Timer

+ (ctor) LogoutTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/LongBeard.html b/Docs/types/LongBeard.html new file mode 100644 index 0000000..6c48604 --- /dev/null +++ b/Docs/types/LongBeard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LongBeard + + +

Back to Server.Items

+

LongBeard : Beard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LongBeard()
+ (ctor) LongBeard( int hue )
+ (ctor) LongBeard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LongFlask.html b/Docs/types/LongFlask.html new file mode 100644 index 0000000..943cc8e --- /dev/null +++ b/Docs/types/LongFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LongFlask + + +

Back to Server.Items

+

LongFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LongFlask()
+ (ctor) LongFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LongHair.html b/Docs/types/LongHair.html new file mode 100644 index 0000000..0aa4080 --- /dev/null +++ b/Docs/types/LongHair.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LongHair + + +

Back to Server.Items

+

LongHair : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LongHair()
+ (ctor) LongHair( int hue )
+ (ctor) LongHair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LongPants.html b/Docs/types/LongPants.html new file mode 100644 index 0000000..2068641 --- /dev/null +++ b/Docs/types/LongPants.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LongPants + + +

Back to Server.Items

+

LongPants : BasePants, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LongPants()
+ (ctor) LongPants( int hue )
+ (ctor) LongPants( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Longsword.html b/Docs/types/Longsword.html new file mode 100644 index 0000000..ea80656 --- /dev/null +++ b/Docs/types/Longsword.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Longsword + + +

Back to Server.Items

+

Longsword : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BladeOfTheRighteous, HolySword

+ (ctor) Longsword()
+ (ctor) Longsword( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LoomEastAddon.html b/Docs/types/LoomEastAddon.html new file mode 100644 index 0000000..aecca8d --- /dev/null +++ b/Docs/types/LoomEastAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LoomEastAddon + + +

Back to Server.Items

+

LoomEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, ILoom

+ (ctor) LoomEastAddon()
+ (ctor) LoomEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ int Phase( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LoomEastDeed.html b/Docs/types/LoomEastDeed.html new file mode 100644 index 0000000..b6e8eac --- /dev/null +++ b/Docs/types/LoomEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LoomEastDeed + + +

Back to Server.Items

+

LoomEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LoomEastDeed()
+ (ctor) LoomEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LoomSouthAddon.html b/Docs/types/LoomSouthAddon.html new file mode 100644 index 0000000..9d279e4 --- /dev/null +++ b/Docs/types/LoomSouthAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LoomSouthAddon + + +

Back to Server.Items

+

LoomSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, ILoom

+ (ctor) LoomSouthAddon()
+ (ctor) LoomSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ int Phase( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LoomSouthDeed.html b/Docs/types/LoomSouthDeed.html new file mode 100644 index 0000000..502c34b --- /dev/null +++ b/Docs/types/LoomSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LoomSouthDeed + + +

Back to Server.Items

+

LoomSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LoomSouthDeed()
+ (ctor) LoomSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Loot.html b/Docs/types/Loot.html new file mode 100644 index 0000000..e721c70 --- /dev/null +++ b/Docs/types/Loot.html @@ -0,0 +1,87 @@ + + + RunUO Documentation - Class Overview - Loot + + +

Back to Server

+

Loot

+ (static) Type[] AosClothingTypes( get; )
+ (static) Type[] AosHatTypes( get; )
+ (static) Type[] AosRangedWeaponTypes( get; )
+ (static) Type[] AosShieldTypes( get; )
+ (static) Type[] AosWeaponTypes( get; )
+ (static) Type[] ArcaneScrollTypes( get; )
+ (static) Type[] ArmorTypes( get; )
+ (static) Type[] ClothingTypes( get; )
+ (static) Type[] GemTypes( get; )
+ (static) Type[] GrimmochJournalTypes( get; )
+ (static) Type[] HatTypes( get; )
+ (static) Type[] InstrumentTypes( get; )
+ (static) Type[] JewelryTypes( get; )
+ (static) Type[] LibraryBookTypes( get; )
+ (static) Type[] LysanderNotebookTypes( get; )
+ (static) Type[] NecromancyScrollTypes( get; )
+ (static) Type[] NecroRegTypes( get; )
+ (static) Type[] PaladinScrollTypes( get; )
+ (static) Type[] PotionTypes( get; )
+ (static) Type[] RangedWeaponTypes( get; )
+ (static) Type[] RegTypes( get; )
+ (static) Type[] RegularScrollTypes( get; )
+ (static) Type[] SEArmorTypes( get; )
+ (static) Type[] SEClothingTypes( get; )
+ (static) Type[] SEHatTypes( get; )
+ (static) Type[] SEInstrumentTypes( get; )
+ (static) Type[] SENecromancyScrollTypes( get; )
+ (static) Type[] SERangedWeaponTypes( get; )
+ (static) Type[] SEWeaponTypes( get; )
+ (static) Type[] ShieldTypes( get; )
+ (static) Type[] StatueTypes( get; )
+ (static) Type[] TavarasJournalTypes( get; )
+ (static) Type[] WandTypes( get; )
+ (static) Type[] WeaponTypes( get; )
+ (static) Item ChestOfHeirloomsContains()
+ (static) Item Construct( Type[] types )
+ (static) Item Construct( Type[][] types )
+ (static) Item Construct( Type type )
+ (static) Item Construct( Type[] types, int index )
+ (static) BaseArmor RandomArmor()
+ (static) BaseArmor RandomArmor( bool inTokuno )
+ (static) Item RandomArmorOrHat()
+ (static) Item RandomArmorOrHat( bool inTokuno )
+ (static) BaseArmor RandomArmorOrShield()
+ (static) BaseArmor RandomArmorOrShield( bool inTokuno )
+ (static) Item RandomArmorOrShieldOrJewelry()
+ (static) Item RandomArmorOrShieldOrJewelry( bool inTokuno )
+ (static) Item RandomArmorOrShieldOrWeapon()
+ (static) Item RandomArmorOrShieldOrWeapon( bool inTokuno )
+ (static) Item RandomArmorOrShieldOrWeaponOrJewelry()
+ (static) Item RandomArmorOrShieldOrWeaponOrJewelry( bool inTokuno )
+ (static) BaseClothing RandomClothing()
+ (static) BaseClothing RandomClothing( bool inTokuno )
+ (static) Item RandomGem()
+ (static) BaseBook RandomGrimmochJournal()
+ (static) BaseHat RandomHat()
+ (static) BaseHat RandomHat( bool inTokuno )
+ (static) BaseInstrument RandomInstrument()
+ (static) BaseJewel RandomJewelry()
+ (static) BaseBook RandomLibraryBook()
+ (static) BaseBook RandomLysanderNotebook()
+ (static) Item RandomNecromancyReagent()
+ (static) Item RandomPossibleReagent()
+ (static) Item RandomPotion()
+ (static) BaseWeapon RandomRangedWeapon()
+ (static) BaseWeapon RandomRangedWeapon( bool inTokuno )
+ (static) Item RandomReagent()
+ (static) SpellScroll RandomScroll( int minIndex, int maxIndex, SpellbookType type )
+ (static) BaseShield RandomShield()
+ (static) Item RandomStatue()
+ (static) BaseTalisman RandomTalisman()
+ (static) BaseBook RandomTavarasJournal()
+ (static) BaseWand RandomWand()
+ (static) BaseWeapon RandomWeapon()
+ (static) BaseWeapon RandomWeapon( bool inTokuno )
+ (static) Item RandomWeaponOrJewelry()
+ (static) Item RandomWeaponOrJewelry( bool inTokuno )
+ (ctor) Loot()
+ + diff --git a/Docs/types/LootPack.html b/Docs/types/LootPack.html new file mode 100644 index 0000000..c4521c9 --- /dev/null +++ b/Docs/types/LootPack.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - LootPack + + +

Back to Server

+

LootPack

+ (static) LootPack Average( get; )
+ (static) LootPack FilthyRich( get; )
+ (static) LootPack Meager( get; )
+ (static) LootPack Poor( get; )
+ (static) LootPack Rich( get; )
+ (static) LootPack SuperBoss( get; )
+ (static) LootPack UltraRich( get; )
+ (static) bool CheckLuck( int chance )
+ (static) int GetLuckChance( Mobile killer, Mobile victim )
+ (static) int GetLuckChanceForKiller( Mobile dead )
+ (ctor) LootPack( LootPackEntry[] entries )
+ void Generate( Mobile from, Container cont, bool spawning, int luckChance )
+ + diff --git a/Docs/types/LootPackDice.html b/Docs/types/LootPackDice.html new file mode 100644 index 0000000..7768d0a --- /dev/null +++ b/Docs/types/LootPackDice.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LootPackDice + + +

Back to Server

+

LootPackDice

+ (ctor) LootPackDice( string str )
+ (ctor) LootPackDice( int count, int sides, int bonus )
+ int Bonus( get; set; )
+ int Count( get; set; )
+ int Sides( get; set; )
+ int Roll()
+ + diff --git a/Docs/types/LootPackEntry.html b/Docs/types/LootPackEntry.html new file mode 100644 index 0000000..35c894c --- /dev/null +++ b/Docs/types/LootPackEntry.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - LootPackEntry + + +

Back to Server

+

LootPackEntry

+ (static) bool IsInTokuno( Mobile m )
+ (ctor) LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, int quantity )
+ (ctor) LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, string quantity )
+ (ctor) LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, int quantity, int maxProps, int minIntensity, int maxIntensity )
+ (ctor) LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, LootPackDice quantity, int maxProps, int minIntensity, int maxIntensity )
+ (ctor) LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, string quantity, int maxProps, int minIntensity, int maxIntensity )
+ int Chance( get; set; )
+ LootPackItem[] Items( get; set; )
+ int MaxIntensity( get; set; )
+ int MaxProps( get; set; )
+ int MinIntensity( get; set; )
+ LootPackDice Quantity( get; set; )
+ Item Construct( Mobile from, int luckChance, bool spawning )
+ int GetBonusProperties()
+ int GetRandomOldBonus()
+ Item Mutate( Mobile from, int luckChance, Item item )
+ + diff --git a/Docs/types/LootPackItem.html b/Docs/types/LootPackItem.html new file mode 100644 index 0000000..91bae82 --- /dev/null +++ b/Docs/types/LootPackItem.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LootPackItem + + +

Back to Server

+

LootPackItem

+ (static) Item RandomScroll( int index, int minCircle, int maxCircle )
+ (ctor) LootPackItem( Type type, int chance )
+ int Chance( get; set; )
+ Type Type( get; set; )
+ Item Construct( bool inTokuno )
+ + diff --git a/Docs/types/LootType.html b/Docs/types/LootType.html new file mode 100644 index 0000000..1aae38e --- /dev/null +++ b/Docs/types/LootType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LootType + + +

Back to Server

+

LootType (Enum)

+ Regular = 0,
+ Newbied = 1,
+ Blessed = 2,
+ Cursed = 3
+ + diff --git a/Docs/types/LordBlackthorneSuit.html b/Docs/types/LordBlackthorneSuit.html new file mode 100644 index 0000000..cc16c5e --- /dev/null +++ b/Docs/types/LordBlackthorneSuit.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LordBlackthorneSuit + + +

Back to Server.Items

+

LordBlackthorneSuit : BaseSuit, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LordBlackthorneSuit()
+ (ctor) LordBlackthorneSuit( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LordBritishSuit.html b/Docs/types/LordBritishSuit.html new file mode 100644 index 0000000..453bd22 --- /dev/null +++ b/Docs/types/LordBritishSuit.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LordBritishSuit + + +

Back to Server.Items

+

LordBritishSuit : BaseSuit, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LordBritishSuit()
+ (ctor) LordBritishSuit( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LordOaks.html b/Docs/types/LordOaks.html new file mode 100644 index 0000000..b105d3a --- /dev/null +++ b/Docs/types/LordOaks.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - LordOaks + + +

Back to Server.Mobiles

+

LordOaks : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) LordOaks()
+ (ctor) LordOaks( Serial serial )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ Type[] DecorativeList( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ bool Uncalmable( get; )
+ Type[] UniqueList( get; )
+ bool Unprovokable( get; )
+ virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
+ void CheckQueen()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ void SpawnPixies( Mobile target )
+ + diff --git a/Docs/types/LostCallingScrollConversation.html b/Docs/types/LostCallingScrollConversation.html new file mode 100644 index 0000000..5dfd83f --- /dev/null +++ b/Docs/types/LostCallingScrollConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LostCallingScrollConversation + + +

Back to Server.Engines.Quests.Necro

+

LostCallingScrollConversation : QuestConversation

+ (ctor) LostCallingScrollConversation()
+ (ctor) LostCallingScrollConversation( bool fromMardoth )
+ bool Logged( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ + diff --git a/Docs/types/LostDaemonBloodConversation.html b/Docs/types/LostDaemonBloodConversation.html new file mode 100644 index 0000000..25b6843 --- /dev/null +++ b/Docs/types/LostDaemonBloodConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LostDaemonBloodConversation + + +

Back to Server.Engines.Quests.Haven

+

LostDaemonBloodConversation : QuestConversation

+ (ctor) LostDaemonBloodConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/LostDaemonBoneConversation.html b/Docs/types/LostDaemonBoneConversation.html new file mode 100644 index 0000000..de5e51c --- /dev/null +++ b/Docs/types/LostDaemonBoneConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LostDaemonBoneConversation + + +

Back to Server.Engines.Quests.Haven

+

LostDaemonBoneConversation : QuestConversation

+ (ctor) LostDaemonBoneConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/LostFertileDirtConversation.html b/Docs/types/LostFertileDirtConversation.html new file mode 100644 index 0000000..3571f7a --- /dev/null +++ b/Docs/types/LostFertileDirtConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LostFertileDirtConversation + + +

Back to Server.Engines.Quests.Haven

+

LostFertileDirtConversation : QuestConversation

+ (ctor) LostFertileDirtConversation()
+ (ctor) LostFertileDirtConversation( bool fromUzeraan )
+ bool Logged( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ + diff --git a/Docs/types/LostNoteConversation.html b/Docs/types/LostNoteConversation.html new file mode 100644 index 0000000..ea91aad --- /dev/null +++ b/Docs/types/LostNoteConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LostNoteConversation + + +

Back to Server.Engines.Quests.Ninja

+

LostNoteConversation : QuestConversation

+ (ctor) LostNoteConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/LostScrollOfPowerConversation.html b/Docs/types/LostScrollOfPowerConversation.html new file mode 100644 index 0000000..3870712 --- /dev/null +++ b/Docs/types/LostScrollOfPowerConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LostScrollOfPowerConversation + + +

Back to Server.Engines.Quests.Haven

+

LostScrollOfPowerConversation : QuestConversation

+ (ctor) LostScrollOfPowerConversation()
+ (ctor) LostScrollOfPowerConversation( bool fromUzeraan )
+ bool Logged( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ + diff --git a/Docs/types/LostSwordConversation.html b/Docs/types/LostSwordConversation.html new file mode 100644 index 0000000..30811db --- /dev/null +++ b/Docs/types/LostSwordConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LostSwordConversation + + +

Back to Server.Engines.Quests.Samurai

+

LostSwordConversation : QuestConversation

+ (ctor) LostSwordConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/LoyaltyTimer.html b/Docs/types/LoyaltyTimer.html new file mode 100644 index 0000000..a38802d --- /dev/null +++ b/Docs/types/LoyaltyTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - LoyaltyTimer + + +

Back to Server.Mobiles

+

LoyaltyTimer : Timer

+ (static) void Initialize()
+ (ctor) LoyaltyTimer()
+ virtual void OnTick()
+ + diff --git a/Docs/types/LtBlueCurvedFlask.html b/Docs/types/LtBlueCurvedFlask.html new file mode 100644 index 0000000..e485b2d --- /dev/null +++ b/Docs/types/LtBlueCurvedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - LtBlueCurvedFlask + + +

Back to Server.Items

+

LtBlueCurvedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LtBlueCurvedFlask()
+ (ctor) LtBlueCurvedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LuckyNecklace.html b/Docs/types/LuckyNecklace.html new file mode 100644 index 0000000..916f0c7 --- /dev/null +++ b/Docs/types/LuckyNecklace.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LuckyNecklace + + +

Back to Server.Items

+

LuckyNecklace : BaseJewel, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) LuckyNecklace()
+ (ctor) LuckyNecklace( Serial serial )
+ int Hue( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lumberjacking.html b/Docs/types/Lumberjacking.html new file mode 100644 index 0000000..a9adfeb --- /dev/null +++ b/Docs/types/Lumberjacking.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Lumberjacking + + +

Back to Server.Engines.Harvest

+

Lumberjacking : HarvestSystem

+ (static) Lumberjacking System( get; )
+ (static) void Initialize()
+ (ctor) Lumberjacking()
+ HarvestDefinition Definition( get; )
+ virtual bool CheckHarvest( Mobile from, Item tool )
+ virtual bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual void OnBadHarvestTarget( Mobile from, Item tool, object toHarvest )
+ virtual void OnHarvestStarted( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ + diff --git a/Docs/types/LuminescentFungi.html b/Docs/types/LuminescentFungi.html new file mode 100644 index 0000000..f76d8df --- /dev/null +++ b/Docs/types/LuminescentFungi.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LuminescentFungi + + +

Back to Server.Items

+

LuminescentFungi : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) LuminescentFungi()
+ (ctor) LuminescentFungi( int amount )
+ (ctor) LuminescentFungi( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LuminousRuneBlade.html b/Docs/types/LuminousRuneBlade.html new file mode 100644 index 0000000..5a4aa5f --- /dev/null +++ b/Docs/types/LuminousRuneBlade.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - LuminousRuneBlade + + +

Back to Server.Items

+

LuminousRuneBlade : RuneBlade, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) LuminousRuneBlade()
+ (ctor) LuminousRuneBlade( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LunaLance.html b/Docs/types/LunaLance.html new file mode 100644 index 0000000..cc40a55 --- /dev/null +++ b/Docs/types/LunaLance.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - LunaLance + + +

Back to Server.Items

+

LunaLance : Lance, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) LunaLance()
+ (ctor) LunaLance( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Lute.html b/Docs/types/Lute.html new file mode 100644 index 0000000..81a978e --- /dev/null +++ b/Docs/types/Lute.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Lute + + +

Back to Server.Items

+

Lute : BaseInstrument, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+

Derived Types: IolosLute

+ (ctor) Lute()
+ (ctor) Lute( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LyricalGlasses.html b/Docs/types/LyricalGlasses.html new file mode 100644 index 0000000..4a1a511 --- /dev/null +++ b/Docs/types/LyricalGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - LyricalGlasses + + +

Back to Server.Items

+

LyricalGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) LyricalGlasses()
+ (ctor) LyricalGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LysanderGathenwale.html b/Docs/types/LysanderGathenwale.html new file mode 100644 index 0000000..3c379eb --- /dev/null +++ b/Docs/types/LysanderGathenwale.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - LysanderGathenwale + + +

Back to Server.Mobiles

+

LysanderGathenwale : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) LysanderGathenwale()
+ (ctor) LysanderGathenwale( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ bool DeleteCorpseOnDeath( get; )
+ bool ShowFameTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LysanderNotebook1.html b/Docs/types/LysanderNotebook1.html new file mode 100644 index 0000000..0b7c9ff --- /dev/null +++ b/Docs/types/LysanderNotebook1.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LysanderNotebook1 + + +

Back to Server.Items

+

LysanderNotebook1 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) LysanderNotebook1()
+ (ctor) LysanderNotebook1( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LysanderNotebook11.html b/Docs/types/LysanderNotebook11.html new file mode 100644 index 0000000..8c246e0 --- /dev/null +++ b/Docs/types/LysanderNotebook11.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LysanderNotebook11 + + +

Back to Server.Items

+

LysanderNotebook11 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) LysanderNotebook11()
+ (ctor) LysanderNotebook11( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LysanderNotebook2.html b/Docs/types/LysanderNotebook2.html new file mode 100644 index 0000000..eb1cdd1 --- /dev/null +++ b/Docs/types/LysanderNotebook2.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LysanderNotebook2 + + +

Back to Server.Items

+

LysanderNotebook2 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) LysanderNotebook2()
+ (ctor) LysanderNotebook2( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LysanderNotebook3.html b/Docs/types/LysanderNotebook3.html new file mode 100644 index 0000000..011830e --- /dev/null +++ b/Docs/types/LysanderNotebook3.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LysanderNotebook3 + + +

Back to Server.Items

+

LysanderNotebook3 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) LysanderNotebook3()
+ (ctor) LysanderNotebook3( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LysanderNotebook7.html b/Docs/types/LysanderNotebook7.html new file mode 100644 index 0000000..f312567 --- /dev/null +++ b/Docs/types/LysanderNotebook7.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LysanderNotebook7 + + +

Back to Server.Items

+

LysanderNotebook7 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) LysanderNotebook7()
+ (ctor) LysanderNotebook7( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/LysanderNotebook8.html b/Docs/types/LysanderNotebook8.html new file mode 100644 index 0000000..9c91318 --- /dev/null +++ b/Docs/types/LysanderNotebook8.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - LysanderNotebook8 + + +

Back to Server.Items

+

LysanderNotebook8 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) LysanderNotebook8()
+ (ctor) LysanderNotebook8( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MLDryad.html b/Docs/types/MLDryad.html new file mode 100644 index 0000000..c64179b --- /dev/null +++ b/Docs/types/MLDryad.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - MLDryad + + +

Back to Server.Mobiles

+

MLDryad : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MLDryad()
+ (ctor) MLDryad( Serial serial )
+ bool InitialInnocent( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ void AreaPeace()
+ void AreaUndress()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ bool IsValidTarget( PlayerMobile m )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ void UndressItem( Mobile m, Layer layer )
+ + diff --git a/Docs/types/MRBucket.html b/Docs/types/MRBucket.html new file mode 100644 index 0000000..9137705 --- /dev/null +++ b/Docs/types/MRBucket.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MRBucket + + +

Back to Server.Spells.Necromancy

+

MRBucket

+ (ctor) MRBucket( double theScalar, MRExpireTimer theTimer )
+ + diff --git a/Docs/types/MRExpireTimer.html b/Docs/types/MRExpireTimer.html new file mode 100644 index 0000000..b5e7fed --- /dev/null +++ b/Docs/types/MRExpireTimer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MRExpireTimer + + +

Back to Server.Spells.Necromancy

+

MRExpireTimer : Timer

+ (ctor) MRExpireTimer( Mobile caster, Mobile target, TimeSpan delay )
+ void Halt()
+ virtual void OnTick()
+ void RenewDelay( TimeSpan delay )
+ + diff --git a/Docs/types/MaabasConversation.html b/Docs/types/MaabasConversation.html new file mode 100644 index 0000000..2547c34 --- /dev/null +++ b/Docs/types/MaabasConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MaabasConversation + + +

Back to Server.Engines.Quests.Necro

+

MaabasConversation : QuestConversation

+ (ctor) MaabasConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/Maabus.html b/Docs/types/Maabus.html new file mode 100644 index 0000000..4e7f77f --- /dev/null +++ b/Docs/types/Maabus.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Maabus + + +

Back to Server.Engines.Quests.Necro

+

Maabus : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Maabus()
+ (ctor) Maabus( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MaabusCoffin.html b/Docs/types/MaabusCoffin.html new file mode 100644 index 0000000..24789bb --- /dev/null +++ b/Docs/types/MaabusCoffin.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - MaabusCoffin + + +

Back to Server.Engines.Quests.Necro

+

MaabusCoffin : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MaabusCoffin()
+ (ctor) MaabusCoffin( Serial serial )
+ Maabus Maabus( get; )
+ Point3D SpawnLocation( get; set; )
+ void Awake( Mobile caller )
+ void BeginSleep()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ void Sleep()
+ + diff --git a/Docs/types/MaabusCoffinComponent.html b/Docs/types/MaabusCoffinComponent.html new file mode 100644 index 0000000..f87028a --- /dev/null +++ b/Docs/types/MaabusCoffinComponent.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - MaabusCoffinComponent + + +

Back to Server.Engines.Quests.Necro

+

MaabusCoffinComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) MaabusCoffinComponent( Serial serial )
+ (ctor) MaabusCoffinComponent( int itemID )
+ (ctor) MaabusCoffinComponent( int fullItemID, int emptyItemID )
+ Point3D SpawnLocation( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ void TurnToEmpty()
+ void TurnToFull()
+ + diff --git a/Docs/types/Mace.html b/Docs/types/Mace.html new file mode 100644 index 0000000..5949778 --- /dev/null +++ b/Docs/types/Mace.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Mace + + +

Back to Server.Items

+

Mace : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Mace()
+ (ctor) Mace( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MaceShieldGlasses.html b/Docs/types/MaceShieldGlasses.html new file mode 100644 index 0000000..c8f09b5 --- /dev/null +++ b/Docs/types/MaceShieldGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - MaceShieldGlasses + + +

Back to Server.Items

+

MaceShieldGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) MaceShieldGlasses()
+ (ctor) MaceShieldGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Mage.html b/Docs/types/Mage.html new file mode 100644 index 0000000..4fbe4f2 --- /dev/null +++ b/Docs/types/Mage.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Mage + + +

Back to Server.Mobiles

+

Mage : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Mage()
+ (ctor) Mage( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MageAI.html b/Docs/types/MageAI.html new file mode 100644 index 0000000..908920d --- /dev/null +++ b/Docs/types/MageAI.html @@ -0,0 +1,41 @@ + + + RunUO Documentation - Class Overview - MageAI + + +

Back to Server.Mobiles

+

MageAI : BaseAI

+ (ctor) MageAI( BaseCreature m )
+ double myMagery( get; )
+ double myNecro( get; )
+ double mySpiritSpeak( get; )
+ bool SmartAI( get; )
+ virtual bool CanCastNecro()
+ virtual bool CanCastNecroBias( int bias )
+ bool CanDispel( Mobile m )
+ Spell CheckCastHealingSpell()
+ virtual Spell ChooseSpell( Mobile c )
+ virtual bool DoActionCombat()
+ virtual bool DoActionFlee()
+ virtual bool DoActionGuard()
+ virtual bool DoActionWander()
+ virtual Spell DoCombo( Mobile c )
+ virtual Spell DoDispel( Mobile toDispel )
+ Mobile FindDispelTarget( bool activeOnly )
+ TimeSpan GetDelay()
+ virtual Spell GetRandomCurse()
+ virtual Spell GetRandomCurseSpell()
+ virtual Spell GetRandomDamage()
+ virtual Spell GetRandomDamageNecroSpell()
+ virtual Spell GetRandomDamageSpell()
+ virtual Spell GetRandomManaDrainSpell()
+ virtual Spell GetRandomNecroCurseSpell()
+ void OnFailedMove()
+ bool ProcessTarget()
+ void Run( Direction d )
+ void RunFrom( Mobile m )
+ void RunTo( Mobile m )
+ virtual double ScaleByMagery( double v )
+ virtual bool Think()
+ + diff --git a/Docs/types/MageCamp.html b/Docs/types/MageCamp.html new file mode 100644 index 0000000..b494b34 --- /dev/null +++ b/Docs/types/MageCamp.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MageCamp + + +

Back to Server.Multis

+

MageCamp : BaseCamp, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MageCamp()
+ (ctor) MageCamp( Serial serial )
+ virtual void AddComponents()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MageGuildmaster.html b/Docs/types/MageGuildmaster.html new file mode 100644 index 0000000..1ff71e0 --- /dev/null +++ b/Docs/types/MageGuildmaster.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MageGuildmaster + + +

Back to Server.Mobiles

+

MageGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) MageGuildmaster()
+ (ctor) MageGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagerySpell.html b/Docs/types/MagerySpell.html new file mode 100644 index 0000000..d997020 --- /dev/null +++ b/Docs/types/MagerySpell.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - MagerySpell + + +

Back to Server.Spells

+

MagerySpell : Spell, ISpell

+

Derived Types: AgilitySpell, AirElementalSpell, ArchCureSpell, ArchProtectionSpell, BladeSpiritsSpell, BlessSpell, ChainLightningSpell, ClumsySpell, CreateFoodSpell, CunningSpell, CureSpell, CurseSpell, DispelFieldSpell, DispelSpell, EarthElementalSpell, EarthquakeSpell, EnergyBoltSpell, EnergyFieldSpell, EnergyVortexSpell, ExplosionSpell, FeeblemindSpell, FireballSpell, FireElementalSpell, FireFieldSpell, FlameStrikeSpell, GateTravelSpell, GreaterHealSpell, HarmSpell, HealSpell, IncognitoSpell, InvisibilitySpell, LightningSpell, MagicArrowSpell, MagicLockSpell, MagicReflectSpell, MagicTrapSpell, ManaDrainSpell, ManaVampireSpell, MarkSpell, MassCurseSpell, MassDispelSpell, MeteorSwarmSpell, MindBlastSpell, NightSightSpell, ParalyzeFieldSpell, ParalyzeSpell, PoisonFieldSpell, PoisonSpell, PolymorphSpell, ProtectionSpell, ReactiveArmorSpell, RecallSpell, RemoveTrapSpell, ResurrectionSpell, RevealSpell, StrengthSpell, SummonCreatureSpell, SummonDaemonSpell, TelekinesisSpell, TeleportSpell, UnlockSpell, WallOfStoneSpell, WaterElementalSpell, WeakenSpell

+ (ctor) MagerySpell( Mobile caster, Item scroll, SpellInfo info )
+ TimeSpan CastDelayBase( get; )
+ SpellCircle Circle( get; )
+ virtual bool CheckResisted( Mobile target )
+ virtual bool ConsumeReagents()
+ virtual TimeSpan GetCastDelay()
+ virtual void GetCastSkills( out double min, out double max )
+ virtual int GetMana()
+ virtual double GetResistPercent( Mobile target )
+ virtual double GetResistPercentForCircle( Mobile target, SpellCircle circle )
+ virtual double GetResistSkill( Mobile m )
+ + diff --git a/Docs/types/MagicArrowScroll.html b/Docs/types/MagicArrowScroll.html new file mode 100644 index 0000000..2874cf7 --- /dev/null +++ b/Docs/types/MagicArrowScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicArrowScroll + + +

Back to Server.Items

+

MagicArrowScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MagicArrowScroll()
+ (ctor) MagicArrowScroll( int amount )
+ (ctor) MagicArrowScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicArrowSpell.html b/Docs/types/MagicArrowSpell.html new file mode 100644 index 0000000..71a6d90 --- /dev/null +++ b/Docs/types/MagicArrowSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MagicArrowSpell + + +

Back to Server.Spells.First

+

MagicArrowSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) MagicArrowSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ bool DelayedDamageStacking( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/MagicArrowWand.html b/Docs/types/MagicArrowWand.html new file mode 100644 index 0000000..2ef35b7 --- /dev/null +++ b/Docs/types/MagicArrowWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicArrowWand + + +

Back to Server.Items

+

MagicArrowWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) MagicArrowWand()
+ (ctor) MagicArrowWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicFlute.html b/Docs/types/MagicFlute.html new file mode 100644 index 0000000..c98c832 --- /dev/null +++ b/Docs/types/MagicFlute.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MagicFlute + + +

Back to Server.Engines.Quests.Hag

+

MagicFlute : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MagicFlute()
+ (ctor) MagicFlute( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicLockScroll.html b/Docs/types/MagicLockScroll.html new file mode 100644 index 0000000..e25796b --- /dev/null +++ b/Docs/types/MagicLockScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicLockScroll + + +

Back to Server.Items

+

MagicLockScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MagicLockScroll()
+ (ctor) MagicLockScroll( int amount )
+ (ctor) MagicLockScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicLockSpell.html b/Docs/types/MagicLockSpell.html new file mode 100644 index 0000000..ef6d35f --- /dev/null +++ b/Docs/types/MagicLockSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicLockSpell + + +

Back to Server.Spells.Third

+

MagicLockSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) MagicLockSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( LockableContainer targ )
+ + diff --git a/Docs/types/MagicReflectScroll.html b/Docs/types/MagicReflectScroll.html new file mode 100644 index 0000000..808eb65 --- /dev/null +++ b/Docs/types/MagicReflectScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicReflectScroll + + +

Back to Server.Items

+

MagicReflectScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MagicReflectScroll()
+ (ctor) MagicReflectScroll( int amount )
+ (ctor) MagicReflectScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicReflectSpell.html b/Docs/types/MagicReflectSpell.html new file mode 100644 index 0000000..8f7bd19 --- /dev/null +++ b/Docs/types/MagicReflectSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicReflectSpell + + +

Back to Server.Spells.Fifth

+

MagicReflectSpell : MagerySpell, ISpell

+ (static) void EndReflect( Mobile m )
+ (ctor) MagicReflectSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/MagicTrapScroll.html b/Docs/types/MagicTrapScroll.html new file mode 100644 index 0000000..0eb9645 --- /dev/null +++ b/Docs/types/MagicTrapScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicTrapScroll + + +

Back to Server.Items

+

MagicTrapScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MagicTrapScroll()
+ (ctor) MagicTrapScroll( int amount )
+ (ctor) MagicTrapScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicTrapSpell.html b/Docs/types/MagicTrapSpell.html new file mode 100644 index 0000000..9abccc5 --- /dev/null +++ b/Docs/types/MagicTrapSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicTrapSpell + + +

Back to Server.Spells.Second

+

MagicTrapSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) MagicTrapSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( TrapableContainer item )
+ + diff --git a/Docs/types/MagicUnTrapScroll.html b/Docs/types/MagicUnTrapScroll.html new file mode 100644 index 0000000..64c58c1 --- /dev/null +++ b/Docs/types/MagicUnTrapScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MagicUnTrapScroll + + +

Back to Server.Items

+

MagicUnTrapScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MagicUnTrapScroll()
+ (ctor) MagicUnTrapScroll( int amount )
+ (ctor) MagicUnTrapScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicWand.html b/Docs/types/MagicWand.html new file mode 100644 index 0000000..5d690df --- /dev/null +++ b/Docs/types/MagicWand.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - MagicWand + + +

Back to Server.Items

+

MagicWand : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: FireworksWand

+ (ctor) MagicWand()
+ (ctor) MagicWand( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicWizardsHat.html b/Docs/types/MagicWizardsHat.html new file mode 100644 index 0000000..d80bd2d --- /dev/null +++ b/Docs/types/MagicWizardsHat.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - MagicWizardsHat + + +

Back to Server.Items

+

MagicWizardsHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) MagicWizardsHat()
+ (ctor) MagicWizardsHat( Serial serial )
+ (ctor) MagicWizardsHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseDexBonus( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BaseIntBonus( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int BaseStrBonus( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MagicalShortbow.html b/Docs/types/MagicalShortbow.html new file mode 100644 index 0000000..35f0e92 --- /dev/null +++ b/Docs/types/MagicalShortbow.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - MagicalShortbow + + +

Back to Server.Items

+

MagicalShortbow : BaseRanged, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: Windsong

+ (ctor) MagicalShortbow()
+ (ctor) MagicalShortbow( Serial serial )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefMaxRange( get; )
+ int EffectID( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Magincia.html b/Docs/types/Magincia.html new file mode 100644 index 0000000..96bccc9 --- /dev/null +++ b/Docs/types/Magincia.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Magincia + + +

Back to Server.Factions

+

Magincia : Town, IComparable

+ (ctor) Magincia()
+ + diff --git a/Docs/types/MahjongDealerIndicator.html b/Docs/types/MahjongDealerIndicator.html new file mode 100644 index 0000000..1cd6ca2 --- /dev/null +++ b/Docs/types/MahjongDealerIndicator.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - MahjongDealerIndicator + + +

Back to Server.Engines.Mahjong

+

MahjongDealerIndicator

+ (static) MahjongPieceDim GetDimensions( Point2D position, MahjongPieceDirection direction )
+ (ctor) MahjongDealerIndicator( MahjongGame game, GenericReader reader )
+ (ctor) MahjongDealerIndicator( MahjongGame game, Point2D position, MahjongPieceDirection direction, MahjongWind wind )
+ MahjongPieceDim Dimensions( get; )
+ MahjongPieceDirection Direction( get; )
+ MahjongGame Game( get; )
+ Point2D Position( get; )
+ MahjongWind Wind( get; )
+ void Move( Point2D position, MahjongPieceDirection direction, MahjongWind wind )
+ void Save( GenericWriter writer )
+ + diff --git a/Docs/types/MahjongDices.html b/Docs/types/MahjongDices.html new file mode 100644 index 0000000..a7cab7c --- /dev/null +++ b/Docs/types/MahjongDices.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MahjongDices + + +

Back to Server.Engines.Mahjong

+

MahjongDices

+ (ctor) MahjongDices( MahjongGame game )
+ (ctor) MahjongDices( MahjongGame game, GenericReader reader )
+ int First( get; )
+ MahjongGame Game( get; )
+ int Second( get; )
+ void RollDices( Mobile from )
+ void Save( GenericWriter writer )
+ + diff --git a/Docs/types/MahjongGame.html b/Docs/types/MahjongGame.html new file mode 100644 index 0000000..bcca2ca --- /dev/null +++ b/Docs/types/MahjongGame.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - MahjongGame + + +

Back to Server.Engines.Mahjong

+

MahjongGame : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Nested Types: ResetGameEntry

+ (ctor) MahjongGame()
+ (ctor) MahjongGame( Serial serial )
+ MahjongDealerIndicator DealerIndicator( get; )
+ MahjongDices Dices( get; )
+ SecureLevel Level( get; set; )
+ MahjongPlayers Players( get; )
+ bool ShowScores( get; set; )
+ bool SpectatorVision( get; set; )
+ MahjongTile[] Tiles( get; )
+ MahjongWallBreakIndicator WallBreakIndicator( get; )
+ void BuildHorizontalWall( ref int index, int x, int y, int stackLevel, MahjongPieceDirection direction, MahjongTileTypeGenerator typeGenerator )
+ void BuildVerticalWall( ref int index, int x, int y, int stackLevel, MahjongPieceDirection direction, MahjongTileTypeGenerator typeGenerator )
+ void BuildWalls()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ int GetStackLevel( MahjongPieceDim dim )
+ virtual void OnDoubleClick( Mobile from )
+ void ResetGame( Mobile from )
+ void ResetWalls( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MahjongGeneralInfo.html b/Docs/types/MahjongGeneralInfo.html new file mode 100644 index 0000000..5498168 --- /dev/null +++ b/Docs/types/MahjongGeneralInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MahjongGeneralInfo + + +

Back to Server.Engines.Mahjong

+

MahjongGeneralInfo : Packet

+ (ctor) MahjongGeneralInfo( MahjongGame game )
+ + diff --git a/Docs/types/MahjongJoinGame.html b/Docs/types/MahjongJoinGame.html new file mode 100644 index 0000000..a26b7d6 --- /dev/null +++ b/Docs/types/MahjongJoinGame.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MahjongJoinGame + + +

Back to Server.Engines.Mahjong

+

MahjongJoinGame : Packet

+ (ctor) MahjongJoinGame( MahjongGame game )
+ + diff --git a/Docs/types/MahjongPacketHandlers.html b/Docs/types/MahjongPacketHandlers.html new file mode 100644 index 0000000..6b20964 --- /dev/null +++ b/Docs/types/MahjongPacketHandlers.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - MahjongPacketHandlers + + +

Back to Server.Engines.Mahjong

+

MahjongPacketHandlers

+ (static) void AssignDealer( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void BuildWalls( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void ChangeOption( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void ExitGame( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) MahjongPieceDirection GetDirection( int value )
+ (static) OnMahjongPacketReceive GetSubCommandDelegate( int cmd )
+ (static) MahjongWind GetWind( int value )
+ (static) void GivePoints( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void Initialize()
+ (static) void MoveDealerIndicator( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void MoveTile( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void MoveWallBreakIndicator( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void OnPacket( NetState state, PacketReader pvSrc )
+ (static) void OpenSeat( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void RegisterSubCommand( int subCmd, OnMahjongPacketReceive onReceive )
+ (static) void ResetScores( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void RollDice( MahjongGame game, NetState state, PacketReader pvSrc )
+ (static) void TogglePublicHand( MahjongGame game, NetState state, PacketReader pvSrc )
+ (ctor) MahjongPacketHandlers()
+ + diff --git a/Docs/types/MahjongPieceDim.html b/Docs/types/MahjongPieceDim.html new file mode 100644 index 0000000..3f9112d --- /dev/null +++ b/Docs/types/MahjongPieceDim.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MahjongPieceDim + + +

Back to Server.Engines.Mahjong

+

MahjongPieceDim

+ (ctor) MahjongPieceDim( Point2D position, int width, int height )
+ int Height( get; )
+ Point2D Position( get; )
+ int Width( get; )
+ int GetHandArea()
+ bool IsOverlapping( MahjongPieceDim dim )
+ bool IsValid()
+ + diff --git a/Docs/types/MahjongPieceDirection.html b/Docs/types/MahjongPieceDirection.html new file mode 100644 index 0000000..d4a9e6d --- /dev/null +++ b/Docs/types/MahjongPieceDirection.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MahjongPieceDirection + + +

Back to Server.Engines.Mahjong

+

MahjongPieceDirection (Enum)

+ Up = 0,
+ Left = 1,
+ Down = 2,
+ Right = 3
+ + diff --git a/Docs/types/MahjongPlayers.html b/Docs/types/MahjongPlayers.html new file mode 100644 index 0000000..f47e049 --- /dev/null +++ b/Docs/types/MahjongPlayers.html @@ -0,0 +1,47 @@ + + + RunUO Documentation - Class Overview - MahjongPlayers + + +

Back to Server.Engines.Mahjong

+

MahjongPlayers

+ (ctor) MahjongPlayers( MahjongGame game, GenericReader reader )
+ (ctor) MahjongPlayers( MahjongGame game, int maxPlayers, int baseScore )
+ Mobile Dealer( get; )
+ int DealerPosition( get; )
+ MahjongGame Game( get; )
+ int Seats( get; )
+ void AddPlayer( Mobile player, int index, bool sendJoinGame )
+ void AddSpectator( Mobile mobile )
+ void AssignDealer( int index )
+ void CheckPlayers()
+ ArrayList GetInGameMobiles( bool players, bool spectators )
+ int GetNextSeat()
+ Mobile GetPlayer( int index )
+ int GetPlayerIndex( Mobile mobile )
+ int GetScore( int index )
+ bool IsInGameDealer( Mobile mobile )
+ bool IsInGamePlayer( Mobile mobile )
+ bool IsInGamePlayer( int index )
+ bool IsPublic( int index )
+ bool IsSpectator( Mobile mobile )
+ void Join( Mobile mobile )
+ void LeaveGame( Mobile player )
+ void OpenSeat( int index )
+ void ResetScores( int value )
+ void Save( GenericWriter writer )
+ void SendDealerChangedMessage()
+ void SendGeneralPacket( bool players, bool spectators )
+ void SendLocalizedMessage( int number )
+ void SendLocalizedMessage( int number, string args )
+ void SendPlayerExitMessage( Mobile who )
+ void SendPlayersPacket( bool players, bool spectators )
+ void SendRelievePacket( bool players, bool spectators )
+ void SendTilePacket( MahjongTile tile, bool players, bool spectators )
+ void SendTilesPacket( bool players, bool spectators )
+ void SetPublic( int index, bool value )
+ void TransferScore( Mobile from, int toPosition, int amount )
+ void UpdateDealer( bool message )
+ bool UpdateSpectators()
+ + diff --git a/Docs/types/MahjongPlayersInfo.html b/Docs/types/MahjongPlayersInfo.html new file mode 100644 index 0000000..17b11db --- /dev/null +++ b/Docs/types/MahjongPlayersInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MahjongPlayersInfo + + +

Back to Server.Engines.Mahjong

+

MahjongPlayersInfo : Packet

+ (ctor) MahjongPlayersInfo( MahjongGame game, Mobile to )
+ + diff --git a/Docs/types/MahjongRelieve.html b/Docs/types/MahjongRelieve.html new file mode 100644 index 0000000..142c2a6 --- /dev/null +++ b/Docs/types/MahjongRelieve.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MahjongRelieve + + +

Back to Server.Engines.Mahjong

+

MahjongRelieve : Packet

+ (ctor) MahjongRelieve( MahjongGame game )
+ + diff --git a/Docs/types/MahjongTile.html b/Docs/types/MahjongTile.html new file mode 100644 index 0000000..10d2e97 --- /dev/null +++ b/Docs/types/MahjongTile.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - MahjongTile + + +

Back to Server.Engines.Mahjong

+

MahjongTile

+ (static) MahjongPieceDim GetDimensions( Point2D position, MahjongPieceDirection direction )
+ (ctor) MahjongTile( MahjongGame game, GenericReader reader )
+ (ctor) MahjongTile( MahjongGame game, int number, MahjongTileType value, Point2D position, int stackLevel, MahjongPieceDirection direction, bool flipped )
+ MahjongPieceDim Dimensions( get; )
+ MahjongPieceDirection Direction( get; )
+ bool Flipped( get; )
+ MahjongGame Game( get; )
+ bool IsMovable( get; )
+ int Number( get; )
+ Point2D Position( get; )
+ int StackLevel( get; )
+ MahjongTileType Value( get; )
+ void Move( Point2D position, MahjongPieceDirection direction, bool flip, int validHandArea )
+ void Save( GenericWriter writer )
+ + diff --git a/Docs/types/MahjongTileInfo.html b/Docs/types/MahjongTileInfo.html new file mode 100644 index 0000000..157267b --- /dev/null +++ b/Docs/types/MahjongTileInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MahjongTileInfo + + +

Back to Server.Engines.Mahjong

+

MahjongTileInfo : Packet

+ (ctor) MahjongTileInfo( MahjongTile tile, Mobile to )
+ + diff --git a/Docs/types/MahjongTileType.html b/Docs/types/MahjongTileType.html new file mode 100644 index 0000000..2d76fcc --- /dev/null +++ b/Docs/types/MahjongTileType.html @@ -0,0 +1,43 @@ + + + RunUO Documentation - Class Overview - MahjongTileType + + +

Back to Server.Engines.Mahjong

+

MahjongTileType (Enum)

+ Dagger1 = 1,
+ Dagger2 = 2,
+ Dagger3 = 3,
+ Dagger4 = 4,
+ Dagger5 = 5,
+ Dagger6 = 6,
+ Dagger7 = 7,
+ Dagger8 = 8,
+ Dagger9 = 9,
+ Gem1 = 10,
+ Gem2 = 11,
+ Gem3 = 12,
+ Gem4 = 13,
+ Gem5 = 14,
+ Gem6 = 15,
+ Gem7 = 16,
+ Gem8 = 17,
+ Gem9 = 18,
+ Number1 = 19,
+ Number2 = 20,
+ Number3 = 21,
+ Number4 = 22,
+ Number5 = 23,
+ Number6 = 24,
+ Number7 = 25,
+ Number8 = 26,
+ Number9 = 27,
+ North = 28,
+ East = 29,
+ South = 30,
+ West = 31,
+ Green = 32,
+ Red = 33,
+ White = 34
+ + diff --git a/Docs/types/MahjongTileTypeGenerator.html b/Docs/types/MahjongTileTypeGenerator.html new file mode 100644 index 0000000..4025395 --- /dev/null +++ b/Docs/types/MahjongTileTypeGenerator.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MahjongTileTypeGenerator + + +

Back to Server.Engines.Mahjong

+

MahjongTileTypeGenerator

+ (ctor) MahjongTileTypeGenerator( int count )
+ ArrayList LeftTileTypes( get; )
+ MahjongTileType Next()
+ + diff --git a/Docs/types/MahjongTilesInfo.html b/Docs/types/MahjongTilesInfo.html new file mode 100644 index 0000000..8886546 --- /dev/null +++ b/Docs/types/MahjongTilesInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MahjongTilesInfo + + +

Back to Server.Engines.Mahjong

+

MahjongTilesInfo : Packet

+ (ctor) MahjongTilesInfo( MahjongGame game, Mobile to )
+ + diff --git a/Docs/types/MahjongWallBreakIndicator.html b/Docs/types/MahjongWallBreakIndicator.html new file mode 100644 index 0000000..c1292c5 --- /dev/null +++ b/Docs/types/MahjongWallBreakIndicator.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - MahjongWallBreakIndicator + + +

Back to Server.Engines.Mahjong

+

MahjongWallBreakIndicator

+ (static) MahjongPieceDim GetDimensions( Point2D position )
+ (ctor) MahjongWallBreakIndicator( MahjongGame game, Point2D position )
+ (ctor) MahjongWallBreakIndicator( MahjongGame game, GenericReader reader )
+ MahjongPieceDim Dimensions( get; )
+ MahjongGame Game( get; )
+ Point2D Position( get; )
+ void Move( Point2D position )
+ void Save( GenericWriter writer )
+ + diff --git a/Docs/types/MahjongWind.html b/Docs/types/MahjongWind.html new file mode 100644 index 0000000..1841caf --- /dev/null +++ b/Docs/types/MahjongWind.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MahjongWind + + +

Back to Server.Engines.Mahjong

+

MahjongWind (Enum)

+ North = 0,
+ East = 1,
+ South = 2,
+ West = 3
+ + diff --git a/Docs/types/MainPlantGump.html b/Docs/types/MainPlantGump.html new file mode 100644 index 0000000..ea4dba0 --- /dev/null +++ b/Docs/types/MainPlantGump.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - MainPlantGump + + +

Back to Server.Engines.Plants

+

MainPlantGump : Gump

+ (static) Item GetPotion( Mobile from, PotionEffect[] effects )
+ (ctor) MainPlantGump( PlantItem plant )
+ void AddGrowthIndicator( int x, int y )
+ void AddLevel( int x, int y, int value )
+ void AddPlus( int x, int y, int value )
+ void AddPlusMinus( int x, int y, int value )
+ void AddPotion( Mobile from, PotionEffect[] effects )
+ void DrawBackground()
+ void DrawPlant()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/MajorTradeAssociation.html b/Docs/types/MajorTradeAssociation.html new file mode 100644 index 0000000..ba81751 --- /dev/null +++ b/Docs/types/MajorTradeAssociation.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MajorTradeAssociation + + +

Back to Server.Items

+

MajorTradeAssociation : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) MajorTradeAssociation()
+ (ctor) MajorTradeAssociation( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MakeRoomObjective.html b/Docs/types/MakeRoomObjective.html new file mode 100644 index 0000000..c32888b --- /dev/null +++ b/Docs/types/MakeRoomObjective.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MakeRoomObjective + + +

Back to Server.Engines.Quests.Collector

+

MakeRoomObjective : QuestObjective

+ (ctor) MakeRoomObjective()
+ object Message( get; )
+ + diff --git a/Docs/types/MaleElvenRobe.html b/Docs/types/MaleElvenRobe.html new file mode 100644 index 0000000..982fa19 --- /dev/null +++ b/Docs/types/MaleElvenRobe.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MaleElvenRobe + + +

Back to Server.Items

+

MaleElvenRobe : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) MaleElvenRobe()
+ (ctor) MaleElvenRobe( int hue )
+ (ctor) MaleElvenRobe( Serial serial )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MaleKimono.html b/Docs/types/MaleKimono.html new file mode 100644 index 0000000..3105244 --- /dev/null +++ b/Docs/types/MaleKimono.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MaleKimono + + +

Back to Server.Items

+

MaleKimono : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) MaleKimono()
+ (ctor) MaleKimono( int hue )
+ (ctor) MaleKimono( Serial serial )
+ bool AllowFemaleWearer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MalletAndChisel.html b/Docs/types/MalletAndChisel.html new file mode 100644 index 0000000..ec8cdf7 --- /dev/null +++ b/Docs/types/MalletAndChisel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MalletAndChisel + + +

Back to Server.Items

+

MalletAndChisel : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) MalletAndChisel()
+ (ctor) MalletAndChisel( int uses )
+ (ctor) MalletAndChisel( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ManPortrait1.html b/Docs/types/ManPortrait1.html new file mode 100644 index 0000000..429a073 --- /dev/null +++ b/Docs/types/ManPortrait1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ManPortrait1 + + +

Back to Server.Items

+

ManPortrait1 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ManPortrait1()
+ (ctor) ManPortrait1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ManPortrait2.html b/Docs/types/ManPortrait2.html new file mode 100644 index 0000000..83f87e2 --- /dev/null +++ b/Docs/types/ManPortrait2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ManPortrait2 + + +

Back to Server.Items

+

ManPortrait2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ManPortrait2()
+ (ctor) ManPortrait2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ManStatuetteEastArtifact.html b/Docs/types/ManStatuetteEastArtifact.html new file mode 100644 index 0000000..3424fb8 --- /dev/null +++ b/Docs/types/ManStatuetteEastArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ManStatuetteEastArtifact + + +

Back to Server.Items

+

ManStatuetteEastArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ManStatuetteEastArtifact()
+ (ctor) ManStatuetteEastArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ManStatuetteSouthArtifact.html b/Docs/types/ManStatuetteSouthArtifact.html new file mode 100644 index 0000000..26036e1 --- /dev/null +++ b/Docs/types/ManStatuetteSouthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ManStatuetteSouthArtifact + + +

Back to Server.Items

+

ManStatuetteSouthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ManStatuetteSouthArtifact()
+ (ctor) ManStatuetteSouthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ManaDrainScroll.html b/Docs/types/ManaDrainScroll.html new file mode 100644 index 0000000..48ec0bc --- /dev/null +++ b/Docs/types/ManaDrainScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ManaDrainScroll + + +

Back to Server.Items

+

ManaDrainScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ManaDrainScroll()
+ (ctor) ManaDrainScroll( int amount )
+ (ctor) ManaDrainScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ManaDrainSpell.html b/Docs/types/ManaDrainSpell.html new file mode 100644 index 0000000..fdd0339 --- /dev/null +++ b/Docs/types/ManaDrainSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ManaDrainSpell + + +

Back to Server.Spells.Fourth

+

ManaDrainSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) ManaDrainSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ void AosDelay_Callback( object state )
+ virtual double GetResistPercent( Mobile target )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/ManaDrainWand.html b/Docs/types/ManaDrainWand.html new file mode 100644 index 0000000..f2c7e7a --- /dev/null +++ b/Docs/types/ManaDrainWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ManaDrainWand + + +

Back to Server.Items

+

ManaDrainWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ManaDrainWand()
+ (ctor) ManaDrainWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ManaTimer.html b/Docs/types/ManaTimer.html new file mode 100644 index 0000000..d18e952 --- /dev/null +++ b/Docs/types/ManaTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ManaTimer + + +

Back to Server

+

(Mobile) - ManaTimer : Timer

+ (ctor) ManaTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ManaVampireScroll.html b/Docs/types/ManaVampireScroll.html new file mode 100644 index 0000000..a0d8958 --- /dev/null +++ b/Docs/types/ManaVampireScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ManaVampireScroll + + +

Back to Server.Items

+

ManaVampireScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ManaVampireScroll()
+ (ctor) ManaVampireScroll( int amount )
+ (ctor) ManaVampireScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ManaVampireSpell.html b/Docs/types/ManaVampireSpell.html new file mode 100644 index 0000000..afe2e52 --- /dev/null +++ b/Docs/types/ManaVampireSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ManaVampireSpell + + +

Back to Server.Spells.Seventh

+

ManaVampireSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) ManaVampireSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual double GetResistPercent( Mobile target )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/ManageBarkeeperEntry.html b/Docs/types/ManageBarkeeperEntry.html new file mode 100644 index 0000000..d32d8f2 --- /dev/null +++ b/Docs/types/ManageBarkeeperEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ManageBarkeeperEntry + + +

Back to Server.Mobiles

+

ManageBarkeeperEntry : ContextMenuEntry

+ (ctor) ManageBarkeeperEntry( Mobile from, PlayerBarkeeper barkeeper )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ManagementEntry.html b/Docs/types/ManagementEntry.html new file mode 100644 index 0000000..56cac04 --- /dev/null +++ b/Docs/types/ManagementEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ManagementEntry + + +

Back to Server.Items

+

(HouseRaffleStone) - ManagementEntry : RaffleContextMenuEntry

+ (ctor) ManagementEntry( Mobile from, HouseRaffleStone stone )
+ virtual void OnClick()
+ + diff --git a/Docs/types/MandrakeRoot.html b/Docs/types/MandrakeRoot.html new file mode 100644 index 0000000..c67af98 --- /dev/null +++ b/Docs/types/MandrakeRoot.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MandrakeRoot + + +

Back to Server.Items

+

MandrakeRoot : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MandrakeRoot()
+ (ctor) MandrakeRoot( Serial serial )
+ (ctor) MandrakeRoot( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MansionGuard.html b/Docs/types/MansionGuard.html new file mode 100644 index 0000000..998efeb --- /dev/null +++ b/Docs/types/MansionGuard.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - MansionGuard + + +

Back to Server.Engines.Quests.Haven

+

MansionGuard : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) MansionGuard()
+ (ctor) MansionGuard( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile pm )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Map.html b/Docs/types/Map.html new file mode 100644 index 0000000..e54da62 --- /dev/null +++ b/Docs/types/Map.html @@ -0,0 +1,99 @@ + + + RunUO Documentation - Class Overview - Map + + +

Back to Server

+

Map : IComparable, IComparable<Map>

+

Nested Types: MultiTileEnumerator, NullEnumerable, ObjectEnumerator, PooledEnumerable, SectorEnumerator, SectorEnumeratorType, TypedEnumerator, ZComparer

+ (static) List<Map> AllMaps( get; )
+ (static) Map Felucca( get; )
+ (static) Map Ilshenar( get; )
+ (static) Map Internal( get; )
+ (static) int[] InvalidLandTiles( get; set; )
+ (static) Map Malas( get; )
+ (static) Map[] Maps( get; )
+ (static) int MaxLOSDistance( get; set; )
+ (static) Map TerMur( get; )
+ (static) Map Tokuno( get; )
+ (static) Map Trammel( get; )
+ (static) void CheckNamesAndValues()
+ (static) int FloorAverage( int a, int b )
+ (static) string[] GetMapNames()
+ (static) Map[] GetMapValues()
+ (static) Map Parse( string value )
+ (ctor) Map( int mapID, int mapIndex, int fileIndex, int width, int height, int season, string name, MapRules rules )
+ Region DefaultRegion( get; set; )
+ int Height( get; )
+ Sector InvalidSector( get; )
+ int MapID( get; )
+ int MapIndex( get; )
+ string Name( get; set; )
+ Dictionary<String,Region> Regions( get; )
+ MapRules Rules( get; set; )
+ int Season( get; set; )
+ TileMatrix Tiles( get; )
+ int Width( get; )
+ void ActivateSectors( int cx, int cy )
+ void AddMulti( BaseMulti m, Sector start, Sector end )
+ Point2D Bound( Point2D p )
+ void Bound( int x, int y, out int newX, out int newY )
+ bool CanFit( Point3D p, int height )
+ bool CanFit( Point2D p, int z, int height )
+ bool CanFit( Point3D p, int height, bool checkBlocksFit )
+ bool CanFit( int x, int y, int z, int height )
+ bool CanFit( Point2D p, int z, int height, bool checkBlocksFit )
+ bool CanFit( Point3D p, int height, bool checkBlocksFit, bool checkMobiles )
+ bool CanFit( int x, int y, int z, int height, bool checksBlocksFit )
+ bool CanFit( int x, int y, int z, int height, bool checkBlocksFit, bool checkMobiles )
+ bool CanFit( int x, int y, int z, int height, bool checkBlocksFit, bool checkMobiles, bool requireSurface )
+ bool CanSpawnMobile( Point3D p )
+ bool CanSpawnMobile( Point2D p, int z )
+ bool CanSpawnMobile( int x, int y, int z )
+ virtual int CompareTo( Map other )
+ virtual int CompareTo( object other )
+ void DeactivateSectors( int cx, int cy )
+ void FixColumn( int x, int y )
+ int GetAverageZ( int x, int y )
+ void GetAverageZ( int x, int y, ref int z, ref int avg, ref int top )
+ IPooledEnumerable GetClientsInBounds( Rectangle2D bounds )
+ IPooledEnumerable GetClientsInRange( Point3D p )
+ IPooledEnumerable GetClientsInRange( Point3D p, int range )
+ IPooledEnumerable GetItemsInBounds( Rectangle2D bounds )
+ IPooledEnumerable GetItemsInRange( Point3D p )
+ IPooledEnumerable GetItemsInRange( Point3D p, int range )
+ IPooledEnumerable GetMobilesInBounds( Rectangle2D bounds )
+ IPooledEnumerable GetMobilesInRange( Point3D p )
+ IPooledEnumerable GetMobilesInRange( Point3D p, int range )
+ Sector GetMultiMaxSector( Point3D loc, MultiComponentList mcl )
+ Sector GetMultiMinSector( Point3D loc, MultiComponentList mcl )
+ IPooledEnumerable GetMultiTilesAt( int x, int y )
+ IPooledEnumerable GetObjectsInBounds( Rectangle2D bounds )
+ IPooledEnumerable GetObjectsInRange( Point3D p )
+ IPooledEnumerable GetObjectsInRange( Point3D p, int range )
+ Point3D GetPoint( object o, bool eye )
+ Sector GetRealSector( int x, int y )
+ Sector GetSector( IPoint2D p )
+ Sector GetSector( Point3D p )
+ Sector GetSector( Point2D p )
+ Sector GetSector( int x, int y )
+ object GetTopSurface( Point3D p )
+ Sector InternalGetSector( int x, int y )
+ bool LineOfSight( Mobile from, Point3D target )
+ bool LineOfSight( Mobile from, Mobile to )
+ bool LineOfSight( object from, object dest )
+ bool LineOfSight( Point3D org, Point3D dest )
+ void OnClientChange( NetState oldState, NetState newState, Mobile m )
+ void OnEnter( Item item )
+ void OnEnter( Mobile m )
+ void OnLeave( Mobile m )
+ void OnLeave( Item item )
+ void OnMove( Point3D oldLocation, Item item )
+ void OnMove( Point3D oldLocation, Mobile m )
+ bool PlayersInRange( Sector sect, int range )
+ void RegisterRegion( Region reg )
+ void RemoveMulti( BaseMulti m, Sector start, Sector end )
+ virtual string ToString()
+ void UnregisterRegion( Region reg )
+ + diff --git a/Docs/types/MapAddPin.html b/Docs/types/MapAddPin.html new file mode 100644 index 0000000..88a5f55 --- /dev/null +++ b/Docs/types/MapAddPin.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MapAddPin + + +

Back to Server.Items

+

(MapItem) - MapAddPin : MapCommand

+ (ctor) MapAddPin( MapItem map, Point2D point )
+ + diff --git a/Docs/types/MapChange.html b/Docs/types/MapChange.html new file mode 100644 index 0000000..31047bb --- /dev/null +++ b/Docs/types/MapChange.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MapChange + + +

Back to Server.Network

+

MapChange : Packet

+ (ctor) MapChange( Mobile m )
+ + diff --git a/Docs/types/MapCommand.html b/Docs/types/MapCommand.html new file mode 100644 index 0000000..8280b60 --- /dev/null +++ b/Docs/types/MapCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MapCommand + + +

Back to Server.Items

+

(MapItem) - MapCommand : Packet

+

Derived Types: MapAddPin, MapDisplay, MapSetEditable

+ (ctor) MapCommand( MapItem map, int command, int number, int x, int y )
+ + diff --git a/Docs/types/MapDefinitions.html b/Docs/types/MapDefinitions.html new file mode 100644 index 0000000..291fb34 --- /dev/null +++ b/Docs/types/MapDefinitions.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MapDefinitions + + +

Back to Server.Misc

+

MapDefinitions

+ (static) void Configure()
+ (static) void RegisterMap( int mapIndex, int mapID, int fileIndex, int width, int height, int season, string name, MapRules rules )
+ (ctor) MapDefinitions()
+ + diff --git a/Docs/types/MapDetails.html b/Docs/types/MapDetails.html new file mode 100644 index 0000000..e9a13cd --- /dev/null +++ b/Docs/types/MapDetails.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MapDetails + + +

Back to Server.Items

+

(MapItem) - MapDetails : Packet

+ (ctor) MapDetails( MapItem map )
+ + diff --git a/Docs/types/MapDisplay.html b/Docs/types/MapDisplay.html new file mode 100644 index 0000000..53421ec --- /dev/null +++ b/Docs/types/MapDisplay.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MapDisplay + + +

Back to Server.Items

+

(MapItem) - MapDisplay : MapCommand

+ (ctor) MapDisplay( MapItem map )
+ + diff --git a/Docs/types/MapItem.html b/Docs/types/MapItem.html new file mode 100644 index 0000000..de4d9c3 --- /dev/null +++ b/Docs/types/MapItem.html @@ -0,0 +1,44 @@ + + + RunUO Documentation - Class Overview - MapItem + + +

Back to Server.Items

+

MapItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: BlankMap, CityMap, IndecipherableMap, LocalMap, PresetMap, SeaChart, TreasureMap, WeatherMap, WorldMap

+

Nested Types: MapAddPin, MapCommand, MapDetails, MapDisplay, MapSetEditable

+ (static) void Initialize()
+ (static) void OnMapCommand( NetState state, PacketReader pvSrc )
+ (ctor) MapItem()
+ (ctor) MapItem( Serial serial )
+ Rectangle2D Bounds( get; set; )
+ int Height( get; set; )
+ List<Point2D> Pins( get; )
+ bool Protected( get; set; )
+ int Width( get; set; )
+ virtual void AddPin( int x, int y )
+ virtual void AddWorldPin( int x, int y )
+ virtual void ChangePin( int index, int x, int y )
+ virtual void ClearPins()
+ void ConvertToMap( int x, int y, out int mapX, out int mapY )
+ void ConvertToWorld( int x, int y, out int worldX, out int worldY )
+ virtual void CraftInit( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayTo( Mobile from )
+ virtual void InsertPin( int index, int x, int y )
+ virtual void OnAddPin( Mobile from, int x, int y )
+ virtual void OnChangePin( Mobile from, int number, int x, int y )
+ virtual void OnClearPins( Mobile from )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnInsertPin( Mobile from, int number, int x, int y )
+ virtual void OnRemovePin( Mobile from, int number )
+ virtual void OnToggleEditable( Mobile from )
+ virtual void RemovePin( int index )
+ virtual void Serialize( GenericWriter writer )
+ void SetDisplay( int x1, int y1, int x2, int y2, int w, int h )
+ virtual bool Validate( Mobile from )
+ virtual void Validate( ref int x, ref int y )
+ virtual bool ValidateEdit( Mobile from )
+ + diff --git a/Docs/types/MapPatches.html b/Docs/types/MapPatches.html new file mode 100644 index 0000000..66f9ce0 --- /dev/null +++ b/Docs/types/MapPatches.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MapPatches + + +

Back to Server.Network

+

MapPatches : Packet

+ (ctor) MapPatches()
+ + diff --git a/Docs/types/MapRules.html b/Docs/types/MapRules.html new file mode 100644 index 0000000..881e042 --- /dev/null +++ b/Docs/types/MapRules.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MapRules + + +

Back to Server

+

MapRules (Enum)

+ None = 0x00000000,
+ FeluccaRules = 0x00000000,
+ Internal = 0x00000001,
+ FreeMovement = 0x00000002,
+ BeneficialRestrictions = 0x00000004,
+ HarmfulRestrictions = 0x00000008,
+ TrammelRules = 0x0000000E
+ + diff --git a/Docs/types/MapSetEditable.html b/Docs/types/MapSetEditable.html new file mode 100644 index 0000000..c5a5b0e --- /dev/null +++ b/Docs/types/MapSetEditable.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MapSetEditable + + +

Back to Server.Items

+

(MapItem) - MapSetEditable : MapCommand

+ (ctor) MapSetEditable( MapItem map, bool editable )
+ + diff --git a/Docs/types/MapleArmoire.html b/Docs/types/MapleArmoire.html new file mode 100644 index 0000000..ed1a744 --- /dev/null +++ b/Docs/types/MapleArmoire.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MapleArmoire + + +

Back to Server.Items

+

MapleArmoire : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MapleArmoire()
+ (ctor) MapleArmoire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Mapmaker.html b/Docs/types/Mapmaker.html new file mode 100644 index 0000000..5235e1a --- /dev/null +++ b/Docs/types/Mapmaker.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Mapmaker + + +

Back to Server.Mobiles

+

Mapmaker : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Mapmaker()
+ (ctor) Mapmaker( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MapmakersPen.html b/Docs/types/MapmakersPen.html new file mode 100644 index 0000000..1ac506b --- /dev/null +++ b/Docs/types/MapmakersPen.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MapmakersPen + + +

Back to Server.Items

+

MapmakersPen : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) MapmakersPen()
+ (ctor) MapmakersPen( Serial serial )
+ (ctor) MapmakersPen( int uses )
+ CraftSystem CraftSystem( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MarbleFloor.html b/Docs/types/MarbleFloor.html new file mode 100644 index 0000000..d56dbf5 --- /dev/null +++ b/Docs/types/MarbleFloor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MarbleFloor + + +

Back to Server.Items

+

MarbleFloor : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MarbleFloor()
+ (ctor) MarbleFloor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MarblePavers.html b/Docs/types/MarblePavers.html new file mode 100644 index 0000000..9eac77c --- /dev/null +++ b/Docs/types/MarblePavers.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MarblePavers + + +

Back to Server.Items

+

MarblePavers : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MarblePavers()
+ (ctor) MarblePavers( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MarbleStatueMaker.html b/Docs/types/MarbleStatueMaker.html new file mode 100644 index 0000000..06b74fc --- /dev/null +++ b/Docs/types/MarbleStatueMaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MarbleStatueMaker + + +

Back to Server.Items

+

MarbleStatueMaker : CharacterStatueMaker, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) MarbleStatueMaker()
+ (ctor) MarbleStatueMaker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MarbleWorkshopDeed.html b/Docs/types/MarbleWorkshopDeed.html new file mode 100644 index 0000000..9fe0647 --- /dev/null +++ b/Docs/types/MarbleWorkshopDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MarbleWorkshopDeed + + +

Back to Server.Multis.Deeds

+

MarbleWorkshopDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MarbleWorkshopDeed()
+ (ctor) MarbleWorkshopDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Mardoth.html b/Docs/types/Mardoth.html new file mode 100644 index 0000000..ea1c3bd --- /dev/null +++ b/Docs/types/Mardoth.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Mardoth + + +

Back to Server.Engines.Quests.Necro

+

Mardoth : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Mardoth()
+ (ctor) Mardoth( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile m )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MardothEndConversation.html b/Docs/types/MardothEndConversation.html new file mode 100644 index 0000000..6cf2fcf --- /dev/null +++ b/Docs/types/MardothEndConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MardothEndConversation + + +

Back to Server.Engines.Quests.Necro

+

MardothEndConversation : QuestConversation

+ (ctor) MardothEndConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/MardothKronusConversation.html b/Docs/types/MardothKronusConversation.html new file mode 100644 index 0000000..df7e670 --- /dev/null +++ b/Docs/types/MardothKronusConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MardothKronusConversation + + +

Back to Server.Engines.Quests.Necro

+

MardothKronusConversation : QuestConversation

+ (ctor) MardothKronusConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/MardothVaultConversation.html b/Docs/types/MardothVaultConversation.html new file mode 100644 index 0000000..6605c2f --- /dev/null +++ b/Docs/types/MardothVaultConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MardothVaultConversation + + +

Back to Server.Engines.Quests.Necro

+

MardothVaultConversation : QuestConversation

+ (ctor) MardothVaultConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/MaritimeGlasses.html b/Docs/types/MaritimeGlasses.html new file mode 100644 index 0000000..5ebd6e7 --- /dev/null +++ b/Docs/types/MaritimeGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - MaritimeGlasses + + +

Back to Server.Items

+

MaritimeGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) MaritimeGlasses()
+ (ctor) MaritimeGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MarkContainer.html b/Docs/types/MarkContainer.html new file mode 100644 index 0000000..a20ef7b --- /dev/null +++ b/Docs/types/MarkContainer.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - MarkContainer + + +

Back to Server.Items

+

MarkContainer : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Nested Types: InternalTimer

+ (static) void CreateMalasPassage( int x, int y, int z, int xTarget, int yTarget, int zTarget, bool bone, bool locked )
+ (static) bool FindMarkContainer( Point3D p, Map map )
+ (static) void Initialize()
+ (static) void SecretLocGen_OnCommand( CommandEventArgs e )
+ (ctor) MarkContainer()
+ (ctor) MarkContainer( bool bone )
+ (ctor) MarkContainer( Serial serial )
+ (ctor) MarkContainer( bool bone, bool locked )
+ bool AutoLock( get; set; )
+ bool Bone( get; set; )
+ string Description( get; set; )
+ bool IsDecoContainer( get; )
+ bool Locked( get; set; )
+ Point3D Target( get; set; )
+ Map TargetMap( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void Mark( RecallRune rune )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragDropInto( Mobile from, Item dropped, Point3D p )
+ virtual void Serialize( GenericWriter writer )
+ void StopTimer()
+ + diff --git a/Docs/types/MarkScroll.html b/Docs/types/MarkScroll.html new file mode 100644 index 0000000..56dc770 --- /dev/null +++ b/Docs/types/MarkScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MarkScroll + + +

Back to Server.Items

+

MarkScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MarkScroll()
+ (ctor) MarkScroll( int amount )
+ (ctor) MarkScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MarkSpell.html b/Docs/types/MarkSpell.html new file mode 100644 index 0000000..f21a30d --- /dev/null +++ b/Docs/types/MarkSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MarkSpell + + +

Back to Server.Spells.Sixth

+

MarkSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) MarkSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ void Target( RecallRune rune )
+ + diff --git a/Docs/types/MasonryBook.html b/Docs/types/MasonryBook.html new file mode 100644 index 0000000..c3ef769 --- /dev/null +++ b/Docs/types/MasonryBook.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MasonryBook + + +

Back to Server.Items

+

MasonryBook : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MasonryBook()
+ (ctor) MasonryBook( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MassCurseScroll.html b/Docs/types/MassCurseScroll.html new file mode 100644 index 0000000..39bc96f --- /dev/null +++ b/Docs/types/MassCurseScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MassCurseScroll + + +

Back to Server.Items

+

MassCurseScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MassCurseScroll()
+ (ctor) MassCurseScroll( int amount )
+ (ctor) MassCurseScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MassCurseSpell.html b/Docs/types/MassCurseSpell.html new file mode 100644 index 0000000..de652f8 --- /dev/null +++ b/Docs/types/MassCurseSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MassCurseSpell + + +

Back to Server.Spells.Sixth

+

MassCurseSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) MassCurseSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/MassDispelScroll.html b/Docs/types/MassDispelScroll.html new file mode 100644 index 0000000..0916117 --- /dev/null +++ b/Docs/types/MassDispelScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MassDispelScroll + + +

Back to Server.Items

+

MassDispelScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MassDispelScroll()
+ (ctor) MassDispelScroll( int amount )
+ (ctor) MassDispelScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MassDispelSpell.html b/Docs/types/MassDispelSpell.html new file mode 100644 index 0000000..2575eff --- /dev/null +++ b/Docs/types/MassDispelSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MassDispelSpell + + +

Back to Server.Spells.Seventh

+

MassDispelSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) MassDispelSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/Maul.html b/Docs/types/Maul.html new file mode 100644 index 0000000..083ae9e --- /dev/null +++ b/Docs/types/Maul.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Maul + + +

Back to Server.Items

+

Maul : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: TheBeserkersMaul

+ (ctor) Maul()
+ (ctor) Maul( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeatPie.html b/Docs/types/MeatPie.html new file mode 100644 index 0000000..30a79c8 --- /dev/null +++ b/Docs/types/MeatPie.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MeatPie + + +

Back to Server.Items

+

MeatPie : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MeatPie()
+ (ctor) MeatPie( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeatType.html b/Docs/types/MeatType.html new file mode 100644 index 0000000..3855f2f --- /dev/null +++ b/Docs/types/MeatType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MeatType + + +

Back to Server.Mobiles

+

MeatType (Enum)

+ Ribs = 0,
+ Bird = 1,
+ LambLeg = 2
+ + diff --git a/Docs/types/Meditation.html b/Docs/types/Meditation.html new file mode 100644 index 0000000..d829b5c --- /dev/null +++ b/Docs/types/Meditation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Meditation + + +

Back to Server.SkillHandlers

+

Meditation

+ (static) bool CheckOkayHolding( Item item )
+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Meditation()
+ + diff --git a/Docs/types/MediumBoat.html b/Docs/types/MediumBoat.html new file mode 100644 index 0000000..adba226 --- /dev/null +++ b/Docs/types/MediumBoat.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - MediumBoat + + +

Back to Server.Multis

+

MediumBoat : BaseBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumBoat()
+ (ctor) MediumBoat( Serial serial )
+ BaseDockedBoat DockedBoat( get; )
+ int EastID( get; )
+ int HoldDistance( get; )
+ Point3D MarkOffset( get; )
+ int NorthID( get; )
+ Point2D PortOffset( get; )
+ int SouthID( get; )
+ Point2D StarboardOffset( get; )
+ int TillerManDistance( get; )
+ int WestID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumBoatDeed.html b/Docs/types/MediumBoatDeed.html new file mode 100644 index 0000000..24749a7 --- /dev/null +++ b/Docs/types/MediumBoatDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MediumBoatDeed + + +

Back to Server.Multis

+

MediumBoatDeed : BaseBoatDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumBoatDeed()
+ (ctor) MediumBoatDeed( Serial serial )
+ BaseBoat Boat( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumCrate.html b/Docs/types/MediumCrate.html new file mode 100644 index 0000000..169a6f3 --- /dev/null +++ b/Docs/types/MediumCrate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MediumCrate + + +

Back to Server.Items

+

MediumCrate : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) MediumCrate()
+ (ctor) MediumCrate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumDockedBoat.html b/Docs/types/MediumDockedBoat.html new file mode 100644 index 0000000..b2b560a --- /dev/null +++ b/Docs/types/MediumDockedBoat.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MediumDockedBoat + + +

Back to Server.Multis

+

MediumDockedBoat : BaseDockedBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumDockedBoat( Serial serial )
+ (ctor) MediumDockedBoat( BaseBoat boat )
+ BaseBoat Boat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumDockedDragonBoat.html b/Docs/types/MediumDockedDragonBoat.html new file mode 100644 index 0000000..61227cf --- /dev/null +++ b/Docs/types/MediumDockedDragonBoat.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MediumDockedDragonBoat + + +

Back to Server.Multis

+

MediumDockedDragonBoat : BaseDockedBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumDockedDragonBoat( Serial serial )
+ (ctor) MediumDockedDragonBoat( BaseBoat boat )
+ BaseBoat Boat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumDragonBoat.html b/Docs/types/MediumDragonBoat.html new file mode 100644 index 0000000..44786aa --- /dev/null +++ b/Docs/types/MediumDragonBoat.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - MediumDragonBoat + + +

Back to Server.Multis

+

MediumDragonBoat : BaseBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumDragonBoat()
+ (ctor) MediumDragonBoat( Serial serial )
+ BaseDockedBoat DockedBoat( get; )
+ int EastID( get; )
+ int HoldDistance( get; )
+ Point3D MarkOffset( get; )
+ int NorthID( get; )
+ Point2D PortOffset( get; )
+ int SouthID( get; )
+ Point2D StarboardOffset( get; )
+ int TillerManDistance( get; )
+ int WestID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumDragonBoatDeed.html b/Docs/types/MediumDragonBoatDeed.html new file mode 100644 index 0000000..f81811a --- /dev/null +++ b/Docs/types/MediumDragonBoatDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MediumDragonBoatDeed + + +

Back to Server.Multis

+

MediumDragonBoatDeed : BaseBoatDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumDragonBoatDeed()
+ (ctor) MediumDragonBoatDeed( Serial serial )
+ BaseBoat Boat( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumFlask.html b/Docs/types/MediumFlask.html new file mode 100644 index 0000000..7e6c443 --- /dev/null +++ b/Docs/types/MediumFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MediumFlask + + +

Back to Server.Items

+

MediumFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumFlask()
+ (ctor) MediumFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumLongBeard.html b/Docs/types/MediumLongBeard.html new file mode 100644 index 0000000..856afde --- /dev/null +++ b/Docs/types/MediumLongBeard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MediumLongBeard + + +

Back to Server.Items

+

MediumLongBeard : Beard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumLongBeard()
+ (ctor) MediumLongBeard( int hue )
+ (ctor) MediumLongBeard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumShortBeard.html b/Docs/types/MediumShortBeard.html new file mode 100644 index 0000000..5345add --- /dev/null +++ b/Docs/types/MediumShortBeard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MediumShortBeard + + +

Back to Server.Items

+

MediumShortBeard : Beard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumShortBeard()
+ (ctor) MediumShortBeard( int hue )
+ (ctor) MediumShortBeard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumStoneTableEastAddon.html b/Docs/types/MediumStoneTableEastAddon.html new file mode 100644 index 0000000..4f491e0 --- /dev/null +++ b/Docs/types/MediumStoneTableEastAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MediumStoneTableEastAddon + + +

Back to Server.Items

+

MediumStoneTableEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MediumStoneTableEastAddon()
+ (ctor) MediumStoneTableEastAddon( Serial serial )
+ (ctor) MediumStoneTableEastAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumStoneTableEastDeed.html b/Docs/types/MediumStoneTableEastDeed.html new file mode 100644 index 0000000..ea65eb9 --- /dev/null +++ b/Docs/types/MediumStoneTableEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MediumStoneTableEastDeed + + +

Back to Server.Items

+

MediumStoneTableEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumStoneTableEastDeed()
+ (ctor) MediumStoneTableEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumStoneTableSouthAddon.html b/Docs/types/MediumStoneTableSouthAddon.html new file mode 100644 index 0000000..f8c433f --- /dev/null +++ b/Docs/types/MediumStoneTableSouthAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MediumStoneTableSouthAddon + + +

Back to Server.Items

+

MediumStoneTableSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MediumStoneTableSouthAddon()
+ (ctor) MediumStoneTableSouthAddon( Serial serial )
+ (ctor) MediumStoneTableSouthAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumStoneTableSouthDeed.html b/Docs/types/MediumStoneTableSouthDeed.html new file mode 100644 index 0000000..2009863 --- /dev/null +++ b/Docs/types/MediumStoneTableSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MediumStoneTableSouthDeed + + +

Back to Server.Items

+

MediumStoneTableSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumStoneTableSouthDeed()
+ (ctor) MediumStoneTableSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumStretchedHideEastAddon.html b/Docs/types/MediumStretchedHideEastAddon.html new file mode 100644 index 0000000..776f981 --- /dev/null +++ b/Docs/types/MediumStretchedHideEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MediumStretchedHideEastAddon + + +

Back to Server.Items

+

MediumStretchedHideEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MediumStretchedHideEastAddon()
+ (ctor) MediumStretchedHideEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumStretchedHideEastDeed.html b/Docs/types/MediumStretchedHideEastDeed.html new file mode 100644 index 0000000..20b5e03 --- /dev/null +++ b/Docs/types/MediumStretchedHideEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MediumStretchedHideEastDeed + + +

Back to Server.Items

+

MediumStretchedHideEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumStretchedHideEastDeed()
+ (ctor) MediumStretchedHideEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumStretchedHideSouthAddon.html b/Docs/types/MediumStretchedHideSouthAddon.html new file mode 100644 index 0000000..b166566 --- /dev/null +++ b/Docs/types/MediumStretchedHideSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MediumStretchedHideSouthAddon + + +

Back to Server.Items

+

MediumStretchedHideSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MediumStretchedHideSouthAddon()
+ (ctor) MediumStretchedHideSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumStretchedHideSouthDeed.html b/Docs/types/MediumStretchedHideSouthDeed.html new file mode 100644 index 0000000..d4bc215 --- /dev/null +++ b/Docs/types/MediumStretchedHideSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MediumStretchedHideSouthDeed + + +

Back to Server.Items

+

MediumStretchedHideSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MediumStretchedHideSouthDeed()
+ (ctor) MediumStretchedHideSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MediumWoodDoor.html b/Docs/types/MediumWoodDoor.html new file mode 100644 index 0000000..ae5f4fd --- /dev/null +++ b/Docs/types/MediumWoodDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MediumWoodDoor + + +

Back to Server.Items

+

MediumWoodDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) MediumWoodDoor( DoorFacing facing )
+ (ctor) MediumWoodDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeerCaptain.html b/Docs/types/MeerCaptain.html new file mode 100644 index 0000000..8f778b5 --- /dev/null +++ b/Docs/types/MeerCaptain.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - MeerCaptain + + +

Back to Server.Mobiles

+

MeerCaptain : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MeerCaptain()
+ (ctor) MeerCaptain( Serial serial )
+ bool BardImmune( get; )
+ bool CanRummageCorpses( get; )
+ bool InitialInnocent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeerEternal.html b/Docs/types/MeerEternal.html new file mode 100644 index 0000000..99db0f6 --- /dev/null +++ b/Docs/types/MeerEternal.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - MeerEternal + + +

Back to Server.Mobiles

+

MeerEternal : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MeerEternal()
+ (ctor) MeerEternal( Serial serial )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ bool CanRummageCorpses( get; )
+ bool InitialInnocent( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoAreaLeech()
+ void DoAreaLeech_Finish()
+ void DoFocusedLeech( Mobile combatant, string message )
+ void DoFocusedLeech_Stage1( object state )
+ void DoFocusedLeech_Stage2( object state )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeerMage.html b/Docs/types/MeerMage.html new file mode 100644 index 0000000..e4671ef --- /dev/null +++ b/Docs/types/MeerMage.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - MeerMage + + +

Back to Server.Mobiles

+

MeerMage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) void StopEffect( Mobile m, bool message )
+ (static) bool UnderEffect( Mobile m )
+ (ctor) MeerMage()
+ (ctor) MeerMage( Serial serial )
+ bool AutoDispel( get; )
+ bool CanRummageCorpses( get; )
+ bool InitialInnocent( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoEffect( object state )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeerWarrior.html b/Docs/types/MeerWarrior.html new file mode 100644 index 0000000..17937b3 --- /dev/null +++ b/Docs/types/MeerWarrior.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MeerWarrior + + +

Back to Server.Mobiles

+

MeerWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MeerWarrior()
+ (ctor) MeerWarrior( Serial serial )
+ bool BardImmune( get; )
+ bool CanRummageCorpses( get; )
+ bool InitialInnocent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeleeAI.html b/Docs/types/MeleeAI.html new file mode 100644 index 0000000..32cca99 --- /dev/null +++ b/Docs/types/MeleeAI.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MeleeAI + + +

Back to Server.Mobiles

+

MeleeAI : BaseAI

+ (ctor) MeleeAI( BaseCreature m )
+ virtual bool DoActionCombat()
+ virtual bool DoActionFlee()
+ virtual bool DoActionGuard()
+ virtual bool DoActionWander()
+ + diff --git a/Docs/types/MelisandesCorrodedHatchet.html b/Docs/types/MelisandesCorrodedHatchet.html new file mode 100644 index 0000000..a8f44d9 --- /dev/null +++ b/Docs/types/MelisandesCorrodedHatchet.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MelisandesCorrodedHatchet + + +

Back to Server.Items

+

MelisandesCorrodedHatchet : Hatchet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) MelisandesCorrodedHatchet()
+ (ctor) MelisandesCorrodedHatchet( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeltedWax.html b/Docs/types/MeltedWax.html new file mode 100644 index 0000000..09a6a28 --- /dev/null +++ b/Docs/types/MeltedWax.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MeltedWax + + +

Back to Server.Items

+

MeltedWax : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MeltedWax()
+ (ctor) MeltedWax( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MemberComparer.html b/Docs/types/MemberComparer.html new file mode 100644 index 0000000..bfec73d --- /dev/null +++ b/Docs/types/MemberComparer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MemberComparer + + +

Back to Server.Commands

+

(Docs) - MemberComparer : IComparer

+ (ctor) MemberComparer()
+ virtual int Compare( object x, object y )
+ string GetNameFrom( ConstructorInfo ctor, PropertyInfo prop, MethodInfo method )
+ bool GetStaticFor( ConstructorInfo ctor, PropertyInfo prop, MethodInfo method )
+ + diff --git a/Docs/types/Mephitis.html b/Docs/types/Mephitis.html new file mode 100644 index 0000000..434a2ca --- /dev/null +++ b/Docs/types/Mephitis.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Mephitis + + +

Back to Server.Mobiles

+

Mephitis : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Mephitis()
+ (ctor) Mephitis( Serial serial )
+ Type[] DecorativeList( get; )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ Type[] UniqueList( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Meraktus.html b/Docs/types/Meraktus.html new file mode 100644 index 0000000..719f89d --- /dev/null +++ b/Docs/types/Meraktus.html @@ -0,0 +1,39 @@ + + + RunUO Documentation - Class Overview - Meraktus + + +

Back to Server.Mobiles

+

Meraktus : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Meraktus()
+ (ctor) Meraktus( Serial serial )
+ bool BardImmune( get; )
+ Type[] DecorativeList( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ int TreasureMapLevel( get; )
+ bool Uncalmable( get; )
+ Type[] UniqueList( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Earthquake()
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDeath( Container c )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void PackResources( int amount )
+ virtual void PackTalismans( int amount )
+ virtual void Serialize( GenericWriter writer )
+ void SpawnTormented()
+ + diff --git a/Docs/types/Merchant.html b/Docs/types/Merchant.html new file mode 100644 index 0000000..5e1929e --- /dev/null +++ b/Docs/types/Merchant.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Merchant + + +

Back to Server.Mobiles

+

Merchant : BaseEscortable, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) int GetRandomHue()
+ (ctor) Merchant()
+ (ctor) Merchant( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MerchantGuildmaster.html b/Docs/types/MerchantGuildmaster.html new file mode 100644 index 0000000..3f6d9e0 --- /dev/null +++ b/Docs/types/MerchantGuildmaster.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MerchantGuildmaster + + +

Back to Server.Mobiles

+

MerchantGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) MerchantGuildmaster()
+ (ctor) MerchantGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MerchantTitle.html b/Docs/types/MerchantTitle.html new file mode 100644 index 0000000..e31d748 --- /dev/null +++ b/Docs/types/MerchantTitle.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MerchantTitle + + +

Back to Server.Factions

+

MerchantTitle (Enum)

+ None = 0,
+ Scribe = 1,
+ Carpenter = 2,
+ Blacksmith = 3,
+ Bowyer = 4,
+ Tialor = 5
+ + diff --git a/Docs/types/MerchantTitleInfo.html b/Docs/types/MerchantTitleInfo.html new file mode 100644 index 0000000..8763e38 --- /dev/null +++ b/Docs/types/MerchantTitleInfo.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MerchantTitleInfo + + +

Back to Server.Factions

+

MerchantTitleInfo

+ (ctor) MerchantTitleInfo( SkillName skill, double requirement, TextDefinition title, TextDefinition label, TextDefinition assigned )
+ TextDefinition Assigned( get; )
+ TextDefinition Label( get; )
+ double Requirement( get; )
+ SkillName Skill( get; )
+ TextDefinition Title( get; )
+ + diff --git a/Docs/types/MerchantTitles.html b/Docs/types/MerchantTitles.html new file mode 100644 index 0000000..49d098b --- /dev/null +++ b/Docs/types/MerchantTitles.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MerchantTitles + + +

Back to Server.Factions

+

MerchantTitles

+ (static) MerchantTitleInfo[] Info( get; )
+ (static) MerchantTitleInfo GetInfo( MerchantTitle title )
+ (static) bool HasMerchantQualifications( Mobile mob )
+ (static) bool IsQualified( Mobile mob, MerchantTitle title )
+ (static) bool IsQualified( Mobile mob, MerchantTitleInfo info )
+ (ctor) MerchantTitles()
+ + diff --git a/Docs/types/MessageBoxMessage.html b/Docs/types/MessageBoxMessage.html new file mode 100644 index 0000000..00b205c --- /dev/null +++ b/Docs/types/MessageBoxMessage.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MessageBoxMessage + + +

Back to Server.RemoteAdmin

+

MessageBoxMessage : Packet

+ (ctor) MessageBoxMessage( string msg, string caption )
+ + diff --git a/Docs/types/MessageEntry.html b/Docs/types/MessageEntry.html new file mode 100644 index 0000000..b22b01d --- /dev/null +++ b/Docs/types/MessageEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MessageEntry + + +

Back to Server.Items

+

(SOS) - MessageEntry

+ (static) MessageEntry[] Entries( get; )
+ (ctor) MessageEntry( int width, int height, string message )
+ int Height( get; )
+ string Message( get; )
+ int Width( get; )
+ + diff --git a/Docs/types/MessageGump.html b/Docs/types/MessageGump.html new file mode 100644 index 0000000..4340efa --- /dev/null +++ b/Docs/types/MessageGump.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MessageGump + + +

Back to Server.Items

+

(SOS) - MessageGump : Gump

+ (ctor) MessageGump( MessageEntry entry, Map map, Point3D loc )
+ + diff --git a/Docs/types/MessageHelper.html b/Docs/types/MessageHelper.html new file mode 100644 index 0000000..a24e948 --- /dev/null +++ b/Docs/types/MessageHelper.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MessageHelper + + +

Back to Server

+

MessageHelper

+ (static) void SendLocalizedMessageTo( Item from, Mobile to, int number, int hue )
+ (static) void SendLocalizedMessageTo( Item from, Mobile to, int number, string args, int hue )
+ (ctor) MessageHelper()
+ + diff --git a/Docs/types/MessageInABottle.html b/Docs/types/MessageInABottle.html new file mode 100644 index 0000000..5763bcf --- /dev/null +++ b/Docs/types/MessageInABottle.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MessageInABottle + + +

Back to Server.Items

+

MessageInABottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetRandomLevel()
+ (ctor) MessageInABottle()
+ (ctor) MessageInABottle( Map map )
+ (ctor) MessageInABottle( Serial serial )
+ (ctor) MessageInABottle( Map map, int level )
+ int LabelNumber( get; )
+ int Level( get; set; )
+ Map TargetMap( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MessageLocalized.html b/Docs/types/MessageLocalized.html new file mode 100644 index 0000000..dbf8900 --- /dev/null +++ b/Docs/types/MessageLocalized.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MessageLocalized + + +

Back to Server.Network

+

MessageLocalized : Packet

+ (static) MessageLocalized InstantiateGeneric( int number )
+ (ctor) MessageLocalized( Serial serial, int graphic, MessageType type, int hue, int font, int number, string name, string args )
+ + diff --git a/Docs/types/MessageLocalizedAffix.html b/Docs/types/MessageLocalizedAffix.html new file mode 100644 index 0000000..f43ecd1 --- /dev/null +++ b/Docs/types/MessageLocalizedAffix.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MessageLocalizedAffix + + +

Back to Server.Network

+

MessageLocalizedAffix : Packet

+ (ctor) MessageLocalizedAffix( Serial serial, int graphic, MessageType messageType, int hue, int font, int number, string name, AffixType affixType, string affix, string args )
+ + diff --git a/Docs/types/MessagePump.html b/Docs/types/MessagePump.html new file mode 100644 index 0000000..91d92d5 --- /dev/null +++ b/Docs/types/MessagePump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MessagePump + + +

Back to Server.Network

+

MessagePump

+ (ctor) MessagePump()
+ Listener[] Listeners( get; set; )
+ void AddListener( Listener l )
+ void CheckListener()
+ bool HandleReceive( NetState ns )
+ void OnReceive( NetState ns )
+ void Slice()
+ + diff --git a/Docs/types/MessageSentGump.html b/Docs/types/MessageSentGump.html new file mode 100644 index 0000000..55bcd7e --- /dev/null +++ b/Docs/types/MessageSentGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MessageSentGump + + +

Back to Server.Engines.Help

+

MessageSentGump : Gump

+ (ctor) MessageSentGump( Mobile mobile, string name, string text )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/MessageType.html b/Docs/types/MessageType.html new file mode 100644 index 0000000..b8e575c --- /dev/null +++ b/Docs/types/MessageType.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - MessageType + + +

Back to Server.Network

+

MessageType (Enum)

+ Regular = 0,
+ System = 1,
+ Emote = 2,
+ Label = 6,
+ Focus = 7,
+ Whisper = 8,
+ Yell = 9,
+ Spell = 10,
+ Guild = 13,
+ Alliance = 14,
+ Command = 15,
+ Encoded = 192
+ + diff --git a/Docs/types/Messenger.html b/Docs/types/Messenger.html new file mode 100644 index 0000000..3c4a4fd --- /dev/null +++ b/Docs/types/Messenger.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Messenger + + +

Back to Server.Mobiles

+

Messenger : BaseEscortable, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) int GetRandomHue()
+ (ctor) Messenger()
+ (ctor) Messenger( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalBox.html b/Docs/types/MetalBox.html new file mode 100644 index 0000000..e89d5f5 --- /dev/null +++ b/Docs/types/MetalBox.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MetalBox + + +

Back to Server.Items

+

MetalBox : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Derived Types: KronusScrollBox

+ (ctor) MetalBox()
+ (ctor) MetalBox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalChest.html b/Docs/types/MetalChest.html new file mode 100644 index 0000000..77795a5 --- /dev/null +++ b/Docs/types/MetalChest.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MetalChest + + +

Back to Server.Items

+

MetalChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Derived Types: DaemonBloodChest

+ (ctor) MetalChest()
+ (ctor) MetalChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalDoor.html b/Docs/types/MetalDoor.html new file mode 100644 index 0000000..f7eabcc --- /dev/null +++ b/Docs/types/MetalDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MetalDoor + + +

Back to Server.Items

+

MetalDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) MetalDoor( DoorFacing facing )
+ (ctor) MetalDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalDoor2.html b/Docs/types/MetalDoor2.html new file mode 100644 index 0000000..02d6277 --- /dev/null +++ b/Docs/types/MetalDoor2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MetalDoor2 + + +

Back to Server.Items

+

MetalDoor2 : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) MetalDoor2( DoorFacing facing )
+ (ctor) MetalDoor2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalGoldenChest.html b/Docs/types/MetalGoldenChest.html new file mode 100644 index 0000000..c48898e --- /dev/null +++ b/Docs/types/MetalGoldenChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MetalGoldenChest + + +

Back to Server.Items

+

MetalGoldenChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) MetalGoldenChest()
+ (ctor) MetalGoldenChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalGoldenPuzzleChest.html b/Docs/types/MetalGoldenPuzzleChest.html new file mode 100644 index 0000000..2b0ae35 --- /dev/null +++ b/Docs/types/MetalGoldenPuzzleChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MetalGoldenPuzzleChest + + +

Back to Server.Items

+

MetalGoldenPuzzleChest : PuzzleChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) MetalGoldenPuzzleChest()
+ (ctor) MetalGoldenPuzzleChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalGoldenTreasureChest.html b/Docs/types/MetalGoldenTreasureChest.html new file mode 100644 index 0000000..0b2fc68 --- /dev/null +++ b/Docs/types/MetalGoldenTreasureChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MetalGoldenTreasureChest + + +

Back to Server.Items

+

MetalGoldenTreasureChest : BaseTreasureChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) MetalGoldenTreasureChest()
+ (ctor) MetalGoldenTreasureChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalHouseDoor.html b/Docs/types/MetalHouseDoor.html new file mode 100644 index 0000000..7dc8a9d --- /dev/null +++ b/Docs/types/MetalHouseDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MetalHouseDoor + + +

Back to Server.Items

+

MetalHouseDoor : BaseHouseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable, ISecurable

+ (ctor) MetalHouseDoor( DoorFacing facing )
+ (ctor) MetalHouseDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalKiteShield.html b/Docs/types/MetalKiteShield.html new file mode 100644 index 0000000..600e4e6 --- /dev/null +++ b/Docs/types/MetalKiteShield.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - MetalKiteShield + + +

Back to Server.Items

+

MetalKiteShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IDyable

+ (ctor) MetalKiteShield()
+ (ctor) MetalKiteShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalPigmentsOfTokuno.html b/Docs/types/MetalPigmentsOfTokuno.html new file mode 100644 index 0000000..9f26dfe --- /dev/null +++ b/Docs/types/MetalPigmentsOfTokuno.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MetalPigmentsOfTokuno + + +

Back to Server.Items

+

MetalPigmentsOfTokuno : BasePigmentsOfTokuno, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining

+ (ctor) MetalPigmentsOfTokuno()
+ (ctor) MetalPigmentsOfTokuno( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ void RandomHue()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalShield.html b/Docs/types/MetalShield.html new file mode 100644 index 0000000..d7717d3 --- /dev/null +++ b/Docs/types/MetalShield.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - MetalShield + + +

Back to Server.Items

+

MetalShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) MetalShield()
+ (ctor) MetalShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MetalTreasureChest.html b/Docs/types/MetalTreasureChest.html new file mode 100644 index 0000000..e12d6f2 --- /dev/null +++ b/Docs/types/MetalTreasureChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MetalTreasureChest + + +

Back to Server.Items

+

MetalTreasureChest : BaseTreasureChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) MetalTreasureChest()
+ (ctor) MetalTreasureChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeteorSwarmScroll.html b/Docs/types/MeteorSwarmScroll.html new file mode 100644 index 0000000..e098644 --- /dev/null +++ b/Docs/types/MeteorSwarmScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MeteorSwarmScroll + + +

Back to Server.Items

+

MeteorSwarmScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MeteorSwarmScroll()
+ (ctor) MeteorSwarmScroll( int amount )
+ (ctor) MeteorSwarmScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MeteorSwarmSpell.html b/Docs/types/MeteorSwarmSpell.html new file mode 100644 index 0000000..f06ec78 --- /dev/null +++ b/Docs/types/MeteorSwarmSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MeteorSwarmSpell + + +

Back to Server.Spells.Seventh

+

MeteorSwarmSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) MeteorSwarmSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/MethodEmitter.html b/Docs/types/MethodEmitter.html new file mode 100644 index 0000000..97d2477 --- /dev/null +++ b/Docs/types/MethodEmitter.html @@ -0,0 +1,54 @@ + + + RunUO Documentation - Class Overview - MethodEmitter + + +

Back to Server

+

MethodEmitter

+

Nested Types: (Anonymous-Type)--c__DisplayClass4, Callback, CallInfo

+ (static) bool b__1( Type type, object obj )
+ (ctor) MethodEmitter( TypeBuilder typeBuilder )
+ Type Active( get; )
+ ILGenerator Generator( get; )
+ MethodBuilder Method( get; )
+ TypeBuilder Type( get; )
+ LocalBuilder AcquireTemp( Type localType )
+ void ArgumentPushed()
+ void BeginCall( MethodInfo method )
+ void Branch( Label label )
+ void BranchIfFalse( Label label )
+ void BranchIfTrue( Label label )
+ void Call( MethodInfo method )
+ void CastAs( Type type )
+ void Chain( Property prop )
+ void Compare( OpCode opCode )
+ bool CompareTo( int sign, Callback argGenerator )
+ Label CreateLabel()
+ LocalBuilder CreateLocal( Type localType )
+ void Define( string name, MethodAttributes attr, Type returnType, Type[] parms )
+ void FinishCall()
+ void Load( double value )
+ void Load( int value )
+ void Load( char value )
+ void Load( bool value )
+ void Load( float value )
+ void Load( string value )
+ void Load( Enum value )
+ void Load( long value )
+ void LoadArgument( int index )
+ void LoadField( FieldInfo field )
+ void LoadLocal( LocalBuilder local )
+ void LoadNull()
+ void LoadNull( Type type )
+ void LogicalNot()
+ void MarkLabel( Label label )
+ void Neg()
+ void Pop()
+ void Pop( Type expected )
+ void Push( Type type )
+ void ReleaseTemp( LocalBuilder local )
+ void Return()
+ void StoreLocal( LocalBuilder local )
+ void Xor()
+ + diff --git a/Docs/types/MidnightBracers.html b/Docs/types/MidnightBracers.html new file mode 100644 index 0000000..fff2463 --- /dev/null +++ b/Docs/types/MidnightBracers.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - MidnightBracers + + +

Back to Server.Items

+

MidnightBracers : BoneArms, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) MidnightBracers()
+ (ctor) MidnightBracers( Serial serial )
+ int ArtifactRarity( get; )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MilitiaCanoneer.html b/Docs/types/MilitiaCanoneer.html new file mode 100644 index 0000000..bad9880 --- /dev/null +++ b/Docs/types/MilitiaCanoneer.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MilitiaCanoneer + + +

Back to Server.Engines.Quests.Haven

+

MilitiaCanoneer : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) MilitiaCanoneer()
+ (ctor) MilitiaCanoneer( Serial serial )
+ bool Active( get; set; )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ bool WillFire( Cannon cannon, Mobile target )
+ + diff --git a/Docs/types/MilitiaFighter.html b/Docs/types/MilitiaFighter.html new file mode 100644 index 0000000..14b0c8f --- /dev/null +++ b/Docs/types/MilitiaFighter.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MilitiaFighter + + +

Back to Server.Engines.Quests.Haven

+

MilitiaFighter : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MilitiaFighter()
+ (ctor) MilitiaFighter( Serial serial )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool IsEnemy( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MilitiaFighterCorpse.html b/Docs/types/MilitiaFighterCorpse.html new file mode 100644 index 0000000..75061c3 --- /dev/null +++ b/Docs/types/MilitiaFighterCorpse.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MilitiaFighterCorpse + + +

Back to Server.Engines.Quests.Haven

+

MilitiaFighterCorpse : Corpse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICarvable

+ (ctor) MilitiaFighterCorpse( Serial serial )
+ (ctor) MilitiaFighterCorpse( Mobile owner, HairInfo hair, FacialHairInfo facialhair, List<Item> equipItems )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Open( Mobile from, bool checkSelfLoot )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Miller.html b/Docs/types/Miller.html new file mode 100644 index 0000000..7ef7a92 --- /dev/null +++ b/Docs/types/Miller.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Miller + + +

Back to Server.Mobiles

+

Miller : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Miller()
+ (ctor) Miller( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Minax.html b/Docs/types/Minax.html new file mode 100644 index 0000000..82c071c --- /dev/null +++ b/Docs/types/Minax.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - Minax + + +

Back to Server.Factions

+

Minax : Faction, IComparable

+ (static) Faction Instance( get; )
+ (ctor) Minax()
+ + diff --git a/Docs/types/MinaxWarHorse.html b/Docs/types/MinaxWarHorse.html new file mode 100644 index 0000000..9f40efc --- /dev/null +++ b/Docs/types/MinaxWarHorse.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MinaxWarHorse + + +

Back to Server.Mobiles

+

MinaxWarHorse : BaseWarHorse, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) MinaxWarHorse()
+ (ctor) MinaxWarHorse( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MindBlastScroll.html b/Docs/types/MindBlastScroll.html new file mode 100644 index 0000000..a020538 --- /dev/null +++ b/Docs/types/MindBlastScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MindBlastScroll + + +

Back to Server.Items

+

MindBlastScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MindBlastScroll()
+ (ctor) MindBlastScroll( int amount )
+ (ctor) MindBlastScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MindBlastSpell.html b/Docs/types/MindBlastSpell.html new file mode 100644 index 0000000..f39f08b --- /dev/null +++ b/Docs/types/MindBlastSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - MindBlastSpell + + +

Back to Server.Spells.Fifth

+

MindBlastSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) MindBlastSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ bool DelayedDamage( get; )
+ void AosDelay_Callback( object state )
+ virtual double GetSlayerDamageScalar( Mobile target )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/MindRotScroll.html b/Docs/types/MindRotScroll.html new file mode 100644 index 0000000..517e1e1 --- /dev/null +++ b/Docs/types/MindRotScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MindRotScroll + + +

Back to Server.Items

+

MindRotScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) MindRotScroll()
+ (ctor) MindRotScroll( int amount )
+ (ctor) MindRotScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MindRotSpell.html b/Docs/types/MindRotSpell.html new file mode 100644 index 0000000..257e8f9 --- /dev/null +++ b/Docs/types/MindRotSpell.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MindRotSpell + + +

Back to Server.Spells.Necromancy

+

MindRotSpell : NecromancerSpell, ISpell

+

Nested Types: InternalTarget

+ (static) void ClearMindRotScalar( Mobile m )
+ (static) bool GetMindRotScalar( Mobile m, ref double scalar )
+ (static) bool HasMindRotScalar( Mobile m )
+ (static) void SetMindRotScalar( Mobile caster, Mobile target, double scalar, TimeSpan duration )
+ (ctor) MindRotSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/Miner.html b/Docs/types/Miner.html new file mode 100644 index 0000000..ef79f9c --- /dev/null +++ b/Docs/types/Miner.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Miner + + +

Back to Server.Mobiles

+

Miner : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Miner()
+ (ctor) Miner( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MinerGuildmaster.html b/Docs/types/MinerGuildmaster.html new file mode 100644 index 0000000..e70a184 --- /dev/null +++ b/Docs/types/MinerGuildmaster.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MinerGuildmaster + + +

Back to Server.Mobiles

+

MinerGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) MinerGuildmaster()
+ (ctor) MinerGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MiniHouseAddon.html b/Docs/types/MiniHouseAddon.html new file mode 100644 index 0000000..2a00fa2 --- /dev/null +++ b/Docs/types/MiniHouseAddon.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - MiniHouseAddon + + +

Back to Server.Items

+

MiniHouseAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Derived Types: ContestMiniHouse

+ (ctor) MiniHouseAddon()
+ (ctor) MiniHouseAddon( MiniHouseType type )
+ (ctor) MiniHouseAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ MiniHouseType Type( get; set; )
+ void Construct()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MiniHouseDeed.html b/Docs/types/MiniHouseDeed.html new file mode 100644 index 0000000..7261cb6 --- /dev/null +++ b/Docs/types/MiniHouseDeed.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - MiniHouseDeed + + +

Back to Server.Items

+

MiniHouseDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: ContestMiniHouseDeed

+ (ctor) MiniHouseDeed()
+ (ctor) MiniHouseDeed( MiniHouseType type )
+ (ctor) MiniHouseDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ MiniHouseType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MiniHouseInfo.html b/Docs/types/MiniHouseInfo.html new file mode 100644 index 0000000..5b184b8 --- /dev/null +++ b/Docs/types/MiniHouseInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MiniHouseInfo + + +

Back to Server.Items

+

MiniHouseInfo

+ (static) MiniHouseInfo GetInfo( MiniHouseType type )
+ (ctor) MiniHouseInfo( int labelNumber, int[] graphics )
+ (ctor) MiniHouseInfo( int start, int count, int labelNumber )
+ int[] Graphics( get; )
+ int LabelNumber( get; )
+ + diff --git a/Docs/types/MiniHouseType.html b/Docs/types/MiniHouseType.html new file mode 100644 index 0000000..0c58a41 --- /dev/null +++ b/Docs/types/MiniHouseType.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - MiniHouseType + + +

Back to Server.Items

+

MiniHouseType (Enum)

+ StoneAndPlaster = 0,
+ FieldStone = 1,
+ SmallBrick = 2,
+ Wooden = 3,
+ WoodAndPlaster = 4,
+ ThatchedRoof = 5,
+ Brick = 6,
+ TwoStoryWoodAndPlaster = 7,
+ TwoStoryStoneAndPlaster = 8,
+ Tower = 9,
+ SmallStoneKeep = 10,
+ Castle = 11,
+ LargeHouseWithPatio = 12,
+ MarbleHouseWithPatio = 13,
+ SmallStoneTower = 14,
+ TwoStoryLogCabin = 15,
+ TwoStoryVilla = 16,
+ SandstoneHouseWithPatio = 17,
+ SmallStoneWorkshop = 18,
+ SmallMarbleWorkshop = 19,
+ MalasMountainPass = 20,
+ ChurchAtNight = 21
+ + diff --git a/Docs/types/Mining.html b/Docs/types/Mining.html new file mode 100644 index 0000000..5c9010e --- /dev/null +++ b/Docs/types/Mining.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Mining + + +

Back to Server.Engines.Harvest

+

Mining : HarvestSystem

+ (static) Mining System( get; )
+ (ctor) Mining()
+ HarvestDefinition OreAndStone( get; )
+ HarvestDefinition Sand( get; )
+ virtual bool BeginHarvesting( Mobile from, Item tool )
+ virtual bool CheckHarvest( Mobile from, Item tool )
+ virtual bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual Type GetResourceType( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource )
+ virtual HarvestVein MutateVein( Mobile from, Item tool, HarvestDefinition def, HarvestBank bank, object toHarvest, HarvestVein vein )
+ virtual void OnBadHarvestTarget( Mobile from, Item tool, object toHarvest )
+ virtual void OnHarvestFinished( Mobile from, Item tool, HarvestDefinition def, HarvestVein vein, HarvestBank bank, HarvestResource resource, object harvested )
+ virtual void OnHarvestStarted( Mobile from, Item tool, HarvestDefinition def, object toHarvest )
+ virtual void SendSuccessTo( Mobile from, Item item, HarvestResource resource )
+ + diff --git a/Docs/types/MiningCart.html b/Docs/types/MiningCart.html new file mode 100644 index 0000000..674dadf --- /dev/null +++ b/Docs/types/MiningCart.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MiningCart + + +

Back to Server.Items

+

MiningCart : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IRewardItem

+ (ctor) MiningCart( Serial serial )
+ (ctor) MiningCart( MiningCartType type )
+ MiningCartType CartType( get; )
+ BaseAddonDeed Deed( get; )
+ int Gems( get; set; )
+ bool IsRewardItem( get; set; )
+ int Ore( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void GiveResources()
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MiningCartDeed.html b/Docs/types/MiningCartDeed.html new file mode 100644 index 0000000..c87d242 --- /dev/null +++ b/Docs/types/MiningCartDeed.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - MiningCartDeed + + +

Back to Server.Items

+

MiningCartDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem, IRewardOption

+ (ctor) MiningCartDeed()
+ (ctor) MiningCartDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int Gems( get; set; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int Ore( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetOptions( RewardOptionList list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnOptionSelected( Mobile from, int choice )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MiningCartType.html b/Docs/types/MiningCartType.html new file mode 100644 index 0000000..404d4b1 --- /dev/null +++ b/Docs/types/MiningCartType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MiningCartType + + +

Back to Server.Items

+

MiningCartType (Enum)

+ OreSouth = 100,
+ OreEast = 101,
+ GemSouth = 102,
+ GemEast = 103
+ + diff --git a/Docs/types/Minoc.html b/Docs/types/Minoc.html new file mode 100644 index 0000000..1baa71c --- /dev/null +++ b/Docs/types/Minoc.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Minoc + + +

Back to Server.Factions

+

Minoc : Town, IComparable

+ (ctor) Minoc()
+ + diff --git a/Docs/types/Minotaur.html b/Docs/types/Minotaur.html new file mode 100644 index 0000000..4c2802d --- /dev/null +++ b/Docs/types/Minotaur.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Minotaur + + +

Back to Server.Mobiles

+

Minotaur : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Minotaur()
+ (ctor) Minotaur( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MinotaurCaptain.html b/Docs/types/MinotaurCaptain.html new file mode 100644 index 0000000..448ddab --- /dev/null +++ b/Docs/types/MinotaurCaptain.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MinotaurCaptain + + +

Back to Server.Mobiles

+

MinotaurCaptain : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MinotaurCaptain()
+ (ctor) MinotaurCaptain( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MinotaurHedge.html b/Docs/types/MinotaurHedge.html new file mode 100644 index 0000000..c8b83c6 --- /dev/null +++ b/Docs/types/MinotaurHedge.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MinotaurHedge + + +

Back to Server.Items

+

MinotaurHedge : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MinotaurHedge()
+ (ctor) MinotaurHedge( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MinotaurScout.html b/Docs/types/MinotaurScout.html new file mode 100644 index 0000000..466bea1 --- /dev/null +++ b/Docs/types/MinotaurScout.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MinotaurScout + + +

Back to Server.Mobiles

+

MinotaurScout : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MinotaurScout()
+ (ctor) MinotaurScout( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MinotaurStatue.html b/Docs/types/MinotaurStatue.html new file mode 100644 index 0000000..9f428b1 --- /dev/null +++ b/Docs/types/MinotaurStatue.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MinotaurStatue + + +

Back to Server.Items

+

MinotaurStatue : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IRewardItem

+ (ctor) MinotaurStatue( Serial serial )
+ (ctor) MinotaurStatue( MinotaurStatueType type )
+ BaseAddonDeed Deed( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MinotaurStatueDeed.html b/Docs/types/MinotaurStatueDeed.html new file mode 100644 index 0000000..5a12aee --- /dev/null +++ b/Docs/types/MinotaurStatueDeed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MinotaurStatueDeed + + +

Back to Server.Items

+

MinotaurStatueDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem, IRewardOption

+ (ctor) MinotaurStatueDeed()
+ (ctor) MinotaurStatueDeed( Serial serial )
+ BaseAddon Addon( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetOptions( RewardOptionList list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnOptionSelected( Mobile from, int option )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MinotaurStatueType.html b/Docs/types/MinotaurStatueType.html new file mode 100644 index 0000000..0967a59 --- /dev/null +++ b/Docs/types/MinotaurStatueType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MinotaurStatueType + + +

Back to Server.Items

+

MinotaurStatueType (Enum)

+ AttackSouth = 100,
+ AttackEast = 101,
+ DefendSouth = 102,
+ DefendEast = 103
+ + diff --git a/Docs/types/Minter.html b/Docs/types/Minter.html new file mode 100644 index 0000000..e05b4d8 --- /dev/null +++ b/Docs/types/Minter.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Minter + + +

Back to Server.Mobiles

+

Minter : Banker, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Minter()
+ (ctor) Minter( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MirrorImage.html b/Docs/types/MirrorImage.html new file mode 100644 index 0000000..7c6cb91 --- /dev/null +++ b/Docs/types/MirrorImage.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - MirrorImage + + +

Back to Server.Spells.Ninjitsu

+

MirrorImage : NinjaSpell, ISpell

+ (static) void AddClone( Mobile m )
+ (static) bool HasClone( Mobile m )
+ (static) void RemoveClone( Mobile m )
+ (ctor) MirrorImage( Mobile caster, Item scroll )
+ bool BlockedByAnimalForm( get; )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual bool CheckDisturb( DisturbType type, bool firstCircle, bool resistable )
+ virtual void OnBeginCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/MisoSoup.html b/Docs/types/MisoSoup.html new file mode 100644 index 0000000..182fd91 --- /dev/null +++ b/Docs/types/MisoSoup.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MisoSoup + + +

Back to Server.Items

+

MisoSoup : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MisoSoup()
+ (ctor) MisoSoup( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MistletoeAddon.html b/Docs/types/MistletoeAddon.html new file mode 100644 index 0000000..3f3894b --- /dev/null +++ b/Docs/types/MistletoeAddon.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MistletoeAddon + + +

Back to Server.Items

+

MistletoeAddon : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IAddon

+

Nested Types: MistletoeAddonGump

+ (ctor) MistletoeAddon()
+ (ctor) MistletoeAddon( int hue )
+ (ctor) MistletoeAddon( Serial serial )
+ Item Deed( get; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ void FixMovingCrate()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MistletoeAddonGump.html b/Docs/types/MistletoeAddonGump.html new file mode 100644 index 0000000..e06feae --- /dev/null +++ b/Docs/types/MistletoeAddonGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MistletoeAddonGump + + +

Back to Server.Items

+

(MistletoeAddon) - MistletoeAddonGump : Gump

+ (ctor) MistletoeAddonGump( Mobile from, MistletoeAddon addon )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/MistletoeDeed.html b/Docs/types/MistletoeDeed.html new file mode 100644 index 0000000..9ae4a1e --- /dev/null +++ b/Docs/types/MistletoeDeed.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - MistletoeDeed + + +

Back to Server.Items

+

MistletoeDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: MistletoeDeedGump

+ (ctor) MistletoeDeed()
+ (ctor) MistletoeDeed( int hue )
+ (ctor) MistletoeDeed( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ void PlaceAddon( Mobile from, Point3D loc, bool northWall, bool westWall )
+ void Placement_OnTarget( Mobile from, object targeted, object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MistletoeDeedGump.html b/Docs/types/MistletoeDeedGump.html new file mode 100644 index 0000000..dbe41aa --- /dev/null +++ b/Docs/types/MistletoeDeedGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MistletoeDeedGump + + +

Back to Server.Items

+

(MistletoeDeed) - MistletoeDeedGump : Gump

+ (ctor) MistletoeDeedGump( Mobile from, Point3D loc, MistletoeDeed deed )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/Mobile.html b/Docs/types/Mobile.html new file mode 100644 index 0000000..2217e41 --- /dev/null +++ b/Docs/types/Mobile.html @@ -0,0 +1,636 @@ + + + RunUO Documentation - Class Overview - Mobile + + +

Back to Server

+

Mobile : IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: BaseCreature, BaseGuard, CharacterStatue, PlayerMobile, PlayerVendor, TownCrier, Wanderer

+

Nested Types: AutoManifestTimer, CombatTimer, ExpireAggressorsTimer, ExpireCombatantTimer, ExpireCriminalTimer, FrozenTimer, HitsTimer, LocationComparer, LogoutTimer, ManaTimer, MovementRecord, ParalyzedTimer, SimplePrompt, SimpleStatePrompt, SimpleStatePrompt<T>, SimpleStateTarget, SimpleStateTarget<T>, SimpleTarget, StamTimer, WarmodeTimer

+ (static) TimeSpan ActionMessageDelay( get; set; )
+ (static) AllowBeneficialHandler AllowBeneficialHandler( get; set; )
+ (static) AllowHarmfulHandler AllowHarmfulHandler( get; set; )
+ (static) bool AsciiClickMessage( get; set; )
+ (static) TimeSpan AutoManifestTimeout( get; set; )
+ (static) int BodyWeight( get; set; )
+ (static) CreateCorpseHandler CreateCorpseHandler( get; set; )
+ (static) TimeSpan DefaultHitsRate( get; set; )
+ (static) TimeSpan DefaultManaRate( get; set; )
+ (static) TimeSpan DefaultStamRate( get; set; )
+ (static) IWeapon DefaultWeapon( get; set; )
+ (static) bool DisableDismountInWarmode( get; set; )
+ (static) bool DisableHiddenSelfClick( get; set; )
+ (static) bool DragEffects( get; set; )
+ (static) TimeSpan ExpireCriminalDelay( get; set; )
+ (static) AccessLevel FwdAccessOverride( get; set; )
+ (static) bool FwdEnabled( get; set; )
+ (static) int FwdMaxSteps( get; set; )
+ (static) bool FwdUOTDOverride( get; set; )
+ (static) char[] GhostChars( get; set; )
+ (static) bool GlobalRegenThroughPoison( get; set; )
+ (static) bool GuildClickMessage( get; set; )
+ (static) RegenRateHandler HitsRegenRateHandler( get; set; )
+ (static) bool InsuranceEnabled( get; set; )
+ (static) RegenRateHandler ManaRegenRateHandler( get; set; )
+ (static) int MaxPlayerResistance( get; set; )
+ (static) bool NoSpeechLOS( get; set; )
+ (static) bool OldPropertyTitles( get; set; )
+ (static) TimeSpan RunFoot( get; )
+ (static) TimeSpan RunMount( get; )
+ (static) SkillCheckDirectLocationHandler SkillCheckDirectLocationHandler( get; set; )
+ (static) SkillCheckDirectTargetHandler SkillCheckDirectTargetHandler( get; set; )
+ (static) SkillCheckLocationHandler SkillCheckLocationHandler( get; set; )
+ (static) SkillCheckTargetHandler SkillCheckTargetHandler( get; set; )
+ (static) RegenRateHandler StamRegenRateHandler( get; set; )
+ (static) VisibleDamageType VisibleDamageType( get; set; )
+ (static) TimeSpan WalkFoot( get; )
+ (static) TimeSpan WalkMount( get; )
+ (static) string GetAccessLevelName( AccessLevel level )
+ (static) Mobile GetDamagerFrom( DamageEntry de )
+ (static) TimeSpan GetHitsRegenRate( Mobile m )
+ (static) TimeSpan GetManaRegenRate( Mobile m )
+ (static) TimeSpan GetStamRegenRate( Mobile m )
+ (static) Item LiftItemDupe( Item oldItem, int amount )
+ (static) void ProcessDeltaQueue()
+ (ctor) Mobile()
+ (ctor) Mobile( Serial serial )
+ AccessLevel AccessLevel( get; set; )
+ IAccount Account( get; set; )
+ List<AggressorInfo> Aggressed( get; )
+ List<AggressorInfo> Aggressors( get; )
+ bool Alive( get; )
+ int AllowedStealthSteps( get; set; )
+ double ArmorRating( get; )
+ Item ArmsArmor( get; )
+ bool AutoPageNotify( get; set; )
+ int BAC( get; set; )
+ Container Backpack( get; )
+ BankBox BankBox( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int BaseSoundID( get; set; )
+ bool Blessed( get; set; )
+ Body Body( get; set; )
+ Body BodyMod( get; set; )
+ int BodyValue( get; set; )
+ bool CanHearGhosts( get; set; )
+ bool CanRegenHits( get; )
+ bool CanRegenMana( get; )
+ bool CanRegenStam( get; )
+ bool CanSwim( get; set; )
+ bool CanTarget( get; )
+ bool CantWalk( get; set; )
+ bool ChangingCombatant( get; )
+ Item ChestArmor( get; )
+ bool ClickTitle( get; )
+ int ColdResistance( get; )
+ Mobile Combatant( get; set; )
+ ContextMenu ContextMenu( get; set; )
+ Container Corpse( get; set; )
+ DateTime CreationTime( get; )
+ bool Criminal( get; set; )
+ List<DamageEntry> DamageEntries( get; )
+ bool Deleted( get; )
+ int Dex( get; set; )
+ StatLockType DexLock( get; set; )
+ Direction Direction( get; set; )
+ bool DisarmReady( get; set; )
+ bool DisplayGuildTitle( get; set; )
+ int EmoteHue( get; set; )
+ int EnergyResistance( get; )
+ int FacialHairHue( get; set; )
+ int FacialHairItemID( get; set; )
+ int Fame( get; set; )
+ bool Female( get; set; )
+ int FireResistance( get; )
+ bool Flying( get; set; )
+ int Followers( get; set; )
+ int FollowersMax( get; set; )
+ bool Frozen( get; set; )
+ BaseGuild Guild( get; set; )
+ Mobile GuildFealty( get; set; )
+ string GuildTitle( get; set; )
+ int HairHue( get; set; )
+ int HairItemID( get; set; )
+ Item HandArmor( get; )
+ bool HasTrade( get; )
+ Item HeadArmor( get; )
+ bool Hidden( get; set; )
+ int Hits( get; set; )
+ int HitsMax( get; )
+ Item Holding( get; set; )
+ int Hue( get; set; )
+ int HuedItemID( get; )
+ int HueMod( get; set; )
+ int Hunger( get; set; )
+ int Int( get; set; )
+ StatLockType IntLock( get; set; )
+ bool IsBodyMod( get; )
+ bool IsDeadBondedPet( get; )
+ List<Item> Items( get; )
+ int Karma( get; set; )
+ bool KeepsItemsOnDeath( get; )
+ int Kills( get; set; )
+ string Language( get; set; )
+ DateTime LastDexGain( get; set; )
+ DateTime LastIntGain( get; set; )
+ Mobile LastKiller( get; set; )
+ DateTime LastMoveTime( get; set; )
+ DateTime LastStatGain( get; set; )
+ DateTime LastStrGain( get; set; )
+ Item LegsArmor( get; )
+ int LightLevel( get; set; )
+ Point3D Location( get; set; )
+ Point3D LogoutLocation( get; set; )
+ Map LogoutMap( get; set; )
+ int Luck( get; )
+ int MagicDamageAbsorb( get; set; )
+ int Mana( get; set; )
+ int ManaMax( get; )
+ Map Map( get; set; )
+ int MaxWeight( get; )
+ bool Meditating( get; set; )
+ int MeleeDamageAbsorb( get; set; )
+ IMount Mount( get; )
+ bool Mounted( get; )
+ string Name( get; set; )
+ int NameHue( get; set; )
+ string NameMod( get; set; )
+ Item NeckArmor( get; )
+ NetState NetState( get; set; )
+ bool NewGuildDisplay( get; )
+ DateTime NextActionMessage( get; set; )
+ DateTime NextActionTime( get; set; )
+ DateTime NextCombatTime( get; set; )
+ DateTime NextSkillTime( get; set; )
+ DateTime NextSpellTime( get; set; )
+ Packet OPLPacket( get; )
+ bool Paralyzed( get; set; )
+ object Party( get; set; )
+ int PhysicalResistance( get; )
+ bool Player( get; set; )
+ Poison Poison( get; set; )
+ bool Poisoned( get; )
+ int PoisonResistance( get; )
+ Timer PoisonTimer( get; )
+ string Profile( get; set; )
+ bool ProfileLocked( get; set; )
+ Prompt Prompt( get; set; )
+ ObjectPropertyList PropertyList( get; )
+ bool PropertyTitle( get; )
+ bool Pushing( get; set; )
+ QuestArrow QuestArrow( get; set; )
+ Race Race( get; set; )
+ double RacialSkillBonus( get; )
+ int RawDex( get; set; )
+ int RawInt( get; set; )
+ string RawName( get; set; )
+ int RawStatTotal( get; )
+ int RawStr( get; set; )
+ bool RegenThroughPoison( get; )
+ Region Region( get; )
+ Packet RemovePacket( get; )
+ List<ResistanceMod> ResistanceMods( get; set; )
+ int[] Resistances( get; )
+ bool RetainPackLocsOnDeath( get; )
+ Serial Serial( get; )
+ int Server.ISerializable.SerialIdentity( get; )
+ int Server.ISerializable.TypeReference( get; )
+ Item ShieldArmor( get; )
+ int ShortTermMurders( get; set; )
+ bool ShouldCheckStatTimers( get; )
+ bool ShowFameTitle( get; )
+ List<SkillMod> SkillMods( get; )
+ Skills Skills( get; set; )
+ int SkillsCap( get; set; )
+ int SkillsTotal( get; )
+ int SolidHueOverride( get; set; )
+ ISpawner Spawner( get; set; )
+ int SpeechHue( get; set; )
+ ISpell Spell( get; set; )
+ bool Squelched( get; set; )
+ List<Mobile> Stabled( get; )
+ int Stam( get; set; )
+ int StamMax( get; )
+ int StatCap( get; set; )
+ List<StatMod> StatMods( get; )
+ int Str( get; set; )
+ StatLockType StrLock( get; set; )
+ bool StunReady( get; set; )
+ Item Talisman( get; )
+ Target Target( get; set; )
+ bool TargetLocked( get; set; )
+ int Thirst( get; set; )
+ int TithingPoints( get; set; )
+ string Title( get; set; )
+ int TotalGold( get; )
+ int TotalItems( get; )
+ int TotalWeight( get; )
+ int VirtualArmor( get; set; )
+ int VirtualArmorMod( get; set; )
+ VirtueInfo Virtues( get; set; )
+ Region WalkRegion( get; set; )
+ bool Warmode( get; set; )
+ IWeapon Weapon( get; )
+ int WhisperHue( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ int YellHue( get; set; )
+ bool YellowHealthbar( get; set; )
+ int Z( get; set; )
+ void AddItem( Item item )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void AddResistanceMod( ResistanceMod toAdd )
+ virtual void AddSkillMod( SkillMod mod )
+ void AddSpeechItemsFrom( ArrayList list, Container cont )
+ void AddStatMod( StatMod mod )
+ bool AddToBackpack( Item item )
+ virtual void AggressiveAction( Mobile aggressor )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual bool AllowEquipFrom( Mobile mob )
+ virtual bool AllowItemUse( Item item )
+ virtual bool AllowSkillUse( SkillName name )
+ virtual void Animate( int action, int frameCount, int repeatCount, bool forward, bool repeat, int delay )
+ virtual string ApplyNameSuffix( string suffix )
+ virtual ApplyPoisonResult ApplyPoison( Mobile from, Poison poison )
+ virtual void Attack( Mobile m )
+ bool BeginAction( object toLock )
+ Prompt BeginPrompt( PromptCallback callback )
+ Prompt BeginPrompt( PromptStateCallback callback, object state )
+ Prompt BeginPrompt( PromptCallback callback, PromptCallback cancelCallback )
+ Prompt BeginPrompt( PromptCallback callback, bool callbackHandlesCancel )
+ Prompt BeginPrompt( PromptStateCallback<T> callback, T state )
+ Prompt BeginPrompt( PromptStateCallback<T> callback, PromptStateCallback<T> cancelCallback, T state )
+ Prompt BeginPrompt( PromptStateCallback callback, PromptStateCallback cancelCallback, object state )
+ Prompt BeginPrompt( PromptStateCallback<T> callback, bool callbackHandlesCancel, T state )
+ Prompt BeginPrompt( PromptStateCallback callback, bool callbackHandlesCancel, object state )
+ Target BeginTarget( int range, bool allowGround, TargetFlags flags, TargetCallback callback )
+ Target BeginTarget( int range, bool allowGround, TargetFlags flags, TargetStateCallback<T> callback, T state )
+ Target BeginTarget( int range, bool allowGround, TargetFlags flags, TargetStateCallback callback, object state )
+ virtual bool BeneficialCheck( Mobile target )
+ void BoltEffect( int hue )
+ virtual bool CanBeBeneficial( Mobile target )
+ virtual bool CanBeBeneficial( Mobile target, bool message )
+ virtual bool CanBeBeneficial( Mobile target, bool message, bool allowDead )
+ virtual bool CanBeDamaged()
+ bool CanBeginAction( object toLock )
+ virtual bool CanBeHarmful( Mobile target )
+ virtual bool CanBeHarmful( Mobile target, bool message )
+ virtual bool CanBeHarmful( Mobile target, bool message, bool ignoreOurBlessedness )
+ virtual bool CanBeRenamedBy( Mobile from )
+ virtual bool CanPaperdollBeOpenedBy( Mobile from )
+ virtual bool CanSee( Mobile m )
+ virtual bool CanSee( object o )
+ virtual bool CanSee( Item item )
+ virtual bool CanUseStuckMenu()
+ void CheckAggrExpire()
+ bool CheckAlive()
+ bool CheckAlive( bool message )
+ virtual bool CheckAttack( Mobile m )
+ virtual bool CheckContextMenuDisplay( IEntity target )
+ virtual bool CheckCure( Mobile from )
+ virtual bool CheckEquip( Item item )
+ virtual bool CheckHearsMutatedSpeech( Mobile m, object context )
+ virtual bool CheckHigherPoison( Mobile from, Poison poison )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ virtual void CheckLightLevels( bool forceResend )
+ virtual bool CheckMovement( Direction d, out int newZ )
+ virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target )
+ virtual bool CheckNonlocalLift( Mobile from, Item item )
+ virtual bool CheckPoisonImmunity( Mobile from, Poison poison )
+ virtual bool CheckResurrect()
+ virtual bool CheckShove( Mobile shoved )
+ bool CheckSkill( SkillName skill, double chance )
+ bool CheckSkill( SkillName skill, double minSkill, double maxSkill )
+ virtual bool CheckSpeechManifest()
+ virtual bool CheckSpellCast( ISpell spell )
+ virtual void CheckStatTimers()
+ virtual bool CheckTarget( Mobile from, Target targ, object targeted )
+ bool CheckTargetSkill( SkillName skill, object target, double chance )
+ bool CheckTargetSkill( SkillName skill, object target, double minSkill, double maxSkill )
+ virtual bool CheckTrade( Mobile to, Item item, SecureTradeContainer cont, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual void ClearFastwalkStack()
+ virtual void ClearHand( Item item )
+ virtual void ClearHands()
+ void ClearProperties()
+ void ClearQuestArrow()
+ void ClearScreen()
+ void ClearTarget()
+ bool CloseAllGumps()
+ bool CloseAllGumps( bool throwOnOffline )
+ bool CloseGump( Type type )
+ bool CloseGump( Type type, int buttonID )
+ bool CloseGump( Type type, int buttonID, bool throwOnOffline )
+ virtual int CompareTo( object other )
+ virtual int CompareTo( Mobile other )
+ virtual int CompareTo( IEntity other )
+ virtual void ComputeBaseLightLevels( out int global, out int personal )
+ virtual void ComputeLightLevels( out int global, out int personal )
+ TimeSpan ComputeMovementSpeed()
+ TimeSpan ComputeMovementSpeed( Direction dir )
+ virtual TimeSpan ComputeMovementSpeed( Direction dir, bool checkTurning )
+ virtual void ComputeResistances()
+ void ConvertHair()
+ virtual void CriminalAction( bool message )
+ virtual bool CurePoison( Mobile from )
+ virtual void Damage( int amount )
+ virtual void Damage( int amount, Mobile from )
+ virtual void Damage( int amount, Mobile from, bool informMount )
+ void DefaultMobileInit()
+ void DelayChangeWarmode( bool value )
+ virtual void Delete()
+ virtual void Delta( MobileDelta flag )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayPaperdollTo( Mobile to )
+ virtual void DisruptiveAction()
+ virtual void DoBeneficial( Mobile target )
+ virtual void DoHarmful( Mobile target )
+ virtual void DoHarmful( Mobile target, bool indirect )
+ virtual void DoSpeech( string text, int[] keywords, MessageType type, int hue )
+ virtual bool Drop( Point3D loc )
+ virtual bool Drop( Mobile to, Point3D loc )
+ virtual bool Drop( Item to, Point3D loc )
+ void DropHolding()
+ void Emote( string text )
+ void Emote( int number )
+ void Emote( string format, object[] args )
+ void Emote( int number, string args )
+ void EndAction( object toLock )
+ virtual bool EquipItem( Item item )
+ BankBox FindBankNoCreate()
+ DamageEntry FindDamageEntryFor( Mobile m )
+ Gump FindGump( Type type )
+ Item FindItemOnLayer( Layer layer )
+ DamageEntry FindLeastRecentDamageEntry( bool allowSelf )
+ Mobile FindLeastRecentDamager( bool allowSelf )
+ DamageEntry FindLeastTotalDamageEntry( bool allowSelf )
+ Mobile FindLeastTotalDamger( bool allowSelf )
+ DamageEntry FindMostRecentDamageEntry( bool allowSelf )
+ Mobile FindMostRecentDamager( bool allowSelf )
+ DamageEntry FindMostTotalDamageEntry( bool allowSelf )
+ Mobile FindMostTotalDamger( bool allowSelf )
+ void FixedEffect( int itemID, int speed, int duration )
+ void FixedEffect( int itemID, int speed, int duration, int hue, int renderMode )
+ void FixedParticles( int itemID, int speed, int duration, int effect, EffectLayer layer )
+ void FixedParticles( int itemID, int speed, int duration, int effect, EffectLayer layer, int unknown )
+ void FixedParticles( int itemID, int speed, int duration, int effect, int hue, int renderMode, EffectLayer layer )
+ void FixedParticles( int itemID, int speed, int duration, int effect, int hue, int renderMode, EffectLayer layer, int unknown )
+ void FreeCache()
+ void Freeze( TimeSpan duration )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual void GetChildContextMenuEntries( Mobile from, List<ContextMenuEntry> list, Item item )
+ virtual void GetChildNameProperties( ObjectPropertyList list, Item item )
+ virtual void GetChildProperties( ObjectPropertyList list, Item item )
+ IPooledEnumerable GetClientsInRange( int range )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual Mobile GetDamageMaster( Mobile damagee )
+ virtual int GetDeathSound()
+ virtual IWeapon GetDefaultWeapon()
+ Direction GetDirectionTo( Point2D p )
+ Direction GetDirectionTo( IPoint2D p )
+ Direction GetDirectionTo( Point3D p )
+ Direction GetDirectionTo( int x, int y )
+ double GetDistanceToSqrt( Point3D p )
+ double GetDistanceToSqrt( IPoint2D p )
+ double GetDistanceToSqrt( Mobile m )
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual DeathMoveResult GetInventoryMoveResultFor( Item item )
+ IPooledEnumerable GetItemsInRange( int range )
+ virtual TimeSpan GetLogoutDelay()
+ virtual int GetMaxResistance( ResistanceType type )
+ virtual int GetMinResistance( ResistanceType type )
+ IPooledEnumerable GetMobilesInRange( int range )
+ IPooledEnumerable GetObjectsInRange( int range )
+ virtual int GetOldPacketFlags()
+ virtual int GetPacketFlags()
+ virtual DeathMoveResult GetParentMoveResultFor( Item item )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int GetResistance( ResistanceType type )
+ virtual int GetSeason()
+ MobileDelta GetStatDelta( StatType type )
+ StatMod GetStatMod( string name )
+ int GetStatOffset( StatType type )
+ virtual int GetTotal( TotalType type )
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual bool HarmfulCheck( Mobile target )
+ bool HasFreeHand()
+ bool HasGump( Type type )
+ bool HasGump( Type type, bool throwOnOffline )
+ void Heal( int amount )
+ void Heal( int amount, Mobile from )
+ void Heal( int amount, Mobile from, bool message )
+ void InitStats( int str, int dex, int intel )
+ bool InLOS( Mobile target )
+ bool InLOS( object target )
+ bool InLOS( Point3D target )
+ bool InRange( Point3D p, int range )
+ bool InRange( IPoint2D p, int range )
+ bool InRange( Point2D p, int range )
+ void Internalize()
+ bool InternalOnMove( Direction d )
+ void InternalRemoveSkillMod( SkillMod mod )
+ void InvalidateProperties()
+ virtual bool IsBeneficialCriminal( Mobile target )
+ virtual bool IsHarmfulCriminal( Mobile target )
+ virtual bool IsSnoop( Mobile from )
+ virtual void Kill()
+ void LaunchBrowser( string url )
+ virtual void Lift( Item item, int amount, out bool rejected, out LRReason reject )
+ void LocalOverheadMessage( MessageType type, int hue, int number )
+ void LocalOverheadMessage( MessageType type, int hue, int number, string args )
+ void LocalOverheadMessage( MessageType type, int hue, bool ascii, string text )
+ virtual void Manifest( TimeSpan delay )
+ virtual bool Move( Direction d )
+ virtual void MoveToWorld( Point3D newLocation, Map map )
+ void MovingEffect( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes )
+ void MovingEffect( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode )
+ void MovingParticles( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int effect, int explodeEffect, int explodeSound )
+ void MovingParticles( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int effect, int explodeEffect, int explodeSound, int unknown )
+ void MovingParticles( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, int unknown )
+ void MovingParticles( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, EffectLayer layer, int unknown )
+ virtual bool MutateSpeech( List<Mobile> hears, ref string text, ref object context )
+ void NonlocalOverheadMessage( MessageType type, int hue, int number )
+ void NonlocalOverheadMessage( MessageType type, int hue, int number, string args )
+ void NonlocalOverheadMessage( MessageType type, int hue, bool ascii, string text )
+ virtual void OnAccessLevelChanged( AccessLevel oldLevel )
+ virtual void OnAfterDelete()
+ virtual void OnAfterMove( Point3D oldLocation )
+ virtual void OnAfterResurrect()
+ virtual void OnAfterSpawn()
+ virtual void OnAosSingleClick( Mobile from )
+ virtual bool OnBeforeDeath()
+ virtual void OnBeforeResurrect()
+ virtual void OnBeforeSpawn( Point3D location, Map m )
+ virtual void OnBeneficialAction( Mobile target, bool isCriminal )
+ virtual void OnCombatantChange()
+ virtual void OnConnected()
+ virtual void OnCured( Mobile from, Poison oldPoison )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnDeath( Container c )
+ virtual void OnDelete()
+ virtual void OnDisconnected()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnDoubleClickCantSee( Mobile from )
+ virtual void OnDoubleClickDead( Mobile from )
+ virtual void OnDoubleClickOutOfRange( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragLift( Item item )
+ virtual bool OnDroppedItemInto( Item item, Container container, Point3D loc )
+ virtual bool OnDroppedItemOnto( Item item, Item target )
+ virtual bool OnDroppedItemToItem( Item item, Item target, Point3D loc )
+ virtual bool OnDroppedItemToMobile( Item item, Mobile target )
+ virtual bool OnDroppedItemToWorld( Item item, Point3D location )
+ virtual bool OnEquip( Item item )
+ virtual void OnFailedCure( Mobile from )
+ virtual void OnFameChange( int oldValue )
+ virtual void OnGenderChanged( bool oldFemale )
+ virtual void OnGuildChange( BaseGuild oldGuild )
+ virtual void OnGuildTitleChange( string oldTitle )
+ virtual void OnHarmfulAction( Mobile target, bool isCriminal )
+ virtual void OnHeal( ref int amount, Mobile from )
+ virtual void OnHelpRequest( Mobile from )
+ virtual void OnHigherPoison( Mobile from, Poison poison )
+ virtual void OnHitsChange( int oldValue )
+ virtual void OnItemAdded( Item item )
+ virtual void OnItemBounceCleared( Item item )
+ virtual void OnItemLifted( Mobile from, Item item )
+ virtual void OnItemRemoved( Item item )
+ virtual void OnItemUsed( Mobile from, Item item )
+ virtual void OnKarmaChange( int oldValue )
+ virtual void OnKillsChange( int oldValue )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnManaChange( int oldValue )
+ virtual void OnMapChange( Map oldMap )
+ virtual bool OnMove( Direction d )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual bool OnMoveOff( Mobile m )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void OnNetStateChanged()
+ virtual void OnPaperdollRequest()
+ virtual void OnPoisoned( Mobile from, Poison poison, Poison oldPoison )
+ virtual void OnPoisonImmunity( Mobile from, Poison poison )
+ virtual void OnRaceChange( Race oldRace )
+ virtual void OnRawDexChange( int oldValue )
+ virtual void OnRawIntChange( int oldValue )
+ virtual void OnRawStatChange( StatType stat, int oldValue )
+ virtual void OnRawStrChange( int oldValue )
+ virtual void OnRegionChange( Region Old, Region New )
+ virtual void OnSaid( SpeechEventArgs e )
+ virtual void OnSectorActivate()
+ virtual void OnSectorDeactivate()
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnSkillChange( SkillName skill, double oldBase )
+ virtual void OnSkillInvalidated( Skill skill )
+ virtual void OnSkillsQuery( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void OnSpellCast( ISpell spell )
+ virtual void OnStamChange( int oldValue )
+ virtual void OnStatsQuery( Mobile from )
+ virtual void OnSubItemAdded( Item item )
+ virtual void OnSubItemBounceCleared( Item item )
+ virtual void OnSubItemRemoved( Item item )
+ virtual void OnTargetChange()
+ virtual void OnWarmodeChanged()
+ virtual void OnWeightChange( int oldValue )
+ void Paralyze( TimeSpan duration )
+ bool PlaceInBackpack( Item item )
+ void PlaySound( int soundID )
+ void PrivateOverheadMessage( MessageType type, int hue, int number, NetState state )
+ void PrivateOverheadMessage( MessageType type, int hue, int number, string args, NetState state )
+ void PrivateOverheadMessage( MessageType type, int hue, bool ascii, string text, NetState state )
+ virtual void ProcessDelta()
+ void PublicOverheadMessage( MessageType type, int hue, int number )
+ void PublicOverheadMessage( MessageType type, int hue, bool ascii, string text )
+ void PublicOverheadMessage( MessageType type, int hue, int number, string args )
+ void PublicOverheadMessage( MessageType type, int hue, bool ascii, string text, bool noLineOfSight )
+ void PublicOverheadMessage( MessageType type, int hue, int number, string args, bool noLineOfSight )
+ void PublicOverheadMessage( MessageType type, int hue, int number, AffixType affixType, string affix, string args )
+ void PublicOverheadMessage( MessageType type, int hue, int number, AffixType affixType, string affix, string args, bool noLineOfSight )
+ virtual DamageEntry RegisterDamage( int amount, Mobile from )
+ void RemoveAggressed( Mobile aggressed )
+ void RemoveAggressor( Mobile aggressor )
+ void RemoveItem( Item item )
+ virtual void RemoveResistanceMod( ResistanceMod toRemove )
+ virtual void RemoveSkillMod( SkillMod mod )
+ bool RemoveStatMod( string name )
+ virtual void Resurrect()
+ virtual void RevealingAction()
+ virtual int SafeBody( int body )
+ void Say( string text )
+ void Say( int number )
+ void Say( int number, string args )
+ void Say( string format, object[] args )
+ void Say( bool ascii, string text )
+ void Say( int number, AffixType type, string affix, string args )
+ void SayTo( Mobile to, int number )
+ void SayTo( Mobile to, string text )
+ void SayTo( Mobile to, int number, string args )
+ void SayTo( Mobile to, bool ascii, string text )
+ void SayTo( Mobile to, string format, object[] args )
+ void SayTo( Mobile to, bool ascii, string format, object[] args )
+ bool Send( Packet p )
+ bool Send( Packet p, bool throwOnOffline )
+ virtual void SendActionMessage()
+ void SendAsciiMessage( string text )
+ void SendAsciiMessage( string format, object[] args )
+ void SendAsciiMessage( int hue, string text )
+ void SendAsciiMessage( int hue, string format, object[] args )
+ virtual void SendDamageToAll( int amount )
+ virtual void SendDropEffect( Item item )
+ void SendEverything()
+ bool SendGump( Gump g )
+ bool SendGump( Gump g, bool throwOnOffline )
+ bool SendHuePicker( HuePicker p )
+ bool SendHuePicker( HuePicker p, bool throwOnOffline )
+ void SendIncomingPacket()
+ void SendLocalizedMessage( int number )
+ void SendLocalizedMessage( int number, string args )
+ void SendLocalizedMessage( int number, string args, int hue )
+ void SendLocalizedMessage( int number, bool append, string affix )
+ void SendLocalizedMessage( int number, bool append, string affix, string args )
+ void SendLocalizedMessage( int number, bool append, string affix, string args, int hue )
+ bool SendMenu( IMenu m )
+ bool SendMenu( IMenu m, bool throwOnOffline )
+ void SendMessage( string text )
+ void SendMessage( int hue, string text )
+ void SendMessage( string format, object[] args )
+ void SendMessage( int hue, string format, object[] args )
+ virtual void SendPropertiesTo( Mobile from )
+ void SendRemovePacket()
+ void SendRemovePacket( bool everyone )
+ virtual void SendSkillMessage()
+ void SendSound( int soundID )
+ void SendSound( int soundID, IPoint3D p )
+ virtual void Serialize( GenericWriter writer )
+ void SetDirection( Direction dir )
+ virtual void SetLocation( Point3D newLocation, bool isTeleport )
+ void StopAggrExpire()
+ virtual string ToString()
+ void UpdateAggrExpire()
+ void UpdateRegion()
+ virtual void UpdateResistances()
+ virtual void UpdateSkillMods()
+ virtual void UpdateTotal( Item sender, TotalType type, int delta )
+ virtual void UpdateTotals()
+ virtual void Use( Mobile m )
+ virtual void Use( Item item )
+ void UsedStuckMenu()
+ virtual bool UseSkill( SkillName name )
+ virtual bool UseSkill( int skillID )
+ virtual void ValidateSkillMods()
+ void Whisper( string text )
+ void Whisper( int number )
+ void Whisper( string format, object[] args )
+ void Whisper( int number, string args )
+ void Yell( int number )
+ void Yell( string text )
+ void Yell( string format, object[] args )
+ void Yell( int number, string args )
+ + diff --git a/Docs/types/MobileAnimation.html b/Docs/types/MobileAnimation.html new file mode 100644 index 0000000..a2522ea --- /dev/null +++ b/Docs/types/MobileAnimation.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileAnimation + + +

Back to Server.Network

+

MobileAnimation : Packet

+ (ctor) MobileAnimation( Mobile m, int action, int frameCount, int repeatCount, bool forward, bool repeat, int delay )
+ + diff --git a/Docs/types/MobileAttributes.html b/Docs/types/MobileAttributes.html new file mode 100644 index 0000000..cfe1bd4 --- /dev/null +++ b/Docs/types/MobileAttributes.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileAttributes + + +

Back to Server.Network

+

MobileAttributes : Packet

+ (ctor) MobileAttributes( Mobile m )
+ + diff --git a/Docs/types/MobileAttributesN.html b/Docs/types/MobileAttributesN.html new file mode 100644 index 0000000..25628f1 --- /dev/null +++ b/Docs/types/MobileAttributesN.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileAttributesN + + +

Back to Server.Network

+

MobileAttributesN : Packet

+ (ctor) MobileAttributesN( Mobile m )
+ + diff --git a/Docs/types/MobileDelta.html b/Docs/types/MobileDelta.html new file mode 100644 index 0000000..c8d250f --- /dev/null +++ b/Docs/types/MobileDelta.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - MobileDelta + + +

Back to Server

+

MobileDelta (Enum)

+ None = 0x00000000,
+ Name = 0x00000001,
+ Flags = 0x00000002,
+ Hits = 0x00000004,
+ Mana = 0x00000008,
+ Stam = 0x00000010,
+ Attributes = 0x0000001C,
+ Stat = 0x00000020,
+ Noto = 0x00000040,
+ Gold = 0x00000080,
+ Weight = 0x00000100,
+ Direction = 0x00000200,
+ Hue = 0x00000400,
+ Body = 0x00000800,
+ Armor = 0x00001000,
+ StatCap = 0x00002000,
+ GhostUpdate = 0x00004000,
+ Followers = 0x00008000,
+ Properties = 0x00010000,
+ TithingPoints = 0x00020000,
+ Resistances = 0x00040000,
+ WeaponDamage = 0x00080000,
+ Hair = 0x00100000,
+ FacialHair = 0x00200000,
+ Race = 0x00400000,
+ HealthbarYellow = 0x00800000,
+ HealthbarPoison = 0x01000000
+ + diff --git a/Docs/types/MobileEntry.html b/Docs/types/MobileEntry.html new file mode 100644 index 0000000..1fe077b --- /dev/null +++ b/Docs/types/MobileEntry.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MobileEntry + + +

Back to Server

+

(World) - MobileEntry : IEntityEntry

+ (ctor) MobileEntry( Mobile mobile, int typeID, string typeName, long pos, int length )
+ int Length( get; )
+ Mobile Mobile( get; )
+ long Position( get; )
+ Serial Serial( get; )
+ int TypeID( get; )
+ string TypeName( get; )
+ + diff --git a/Docs/types/MobileHits.html b/Docs/types/MobileHits.html new file mode 100644 index 0000000..b4e09b1 --- /dev/null +++ b/Docs/types/MobileHits.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileHits + + +

Back to Server.Network

+

MobileHits : Packet

+ (ctor) MobileHits( Mobile m )
+ + diff --git a/Docs/types/MobileHitsN.html b/Docs/types/MobileHitsN.html new file mode 100644 index 0000000..8baa002 --- /dev/null +++ b/Docs/types/MobileHitsN.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileHitsN + + +

Back to Server.Network

+

MobileHitsN : Packet

+ (ctor) MobileHitsN( Mobile m )
+ + diff --git a/Docs/types/MobileIncoming.html b/Docs/types/MobileIncoming.html new file mode 100644 index 0000000..791f759 --- /dev/null +++ b/Docs/types/MobileIncoming.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileIncoming + + +

Back to Server.Network

+

MobileIncoming : Packet

+ (ctor) MobileIncoming( Mobile beholder, Mobile beheld )
+ + diff --git a/Docs/types/MobileIncomingOld.html b/Docs/types/MobileIncomingOld.html new file mode 100644 index 0000000..5b7078f --- /dev/null +++ b/Docs/types/MobileIncomingOld.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileIncomingOld + + +

Back to Server.Network

+

MobileIncomingOld : Packet

+ (ctor) MobileIncomingOld( Mobile beholder, Mobile beheld )
+ + diff --git a/Docs/types/MobileMana.html b/Docs/types/MobileMana.html new file mode 100644 index 0000000..3fa1d72 --- /dev/null +++ b/Docs/types/MobileMana.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileMana + + +

Back to Server.Network

+

MobileMana : Packet

+ (ctor) MobileMana( Mobile m )
+ + diff --git a/Docs/types/MobileManaN.html b/Docs/types/MobileManaN.html new file mode 100644 index 0000000..303f5c6 --- /dev/null +++ b/Docs/types/MobileManaN.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileManaN + + +

Back to Server.Network

+

MobileManaN : Packet

+ (ctor) MobileManaN( Mobile m )
+ + diff --git a/Docs/types/MobileMoving.html b/Docs/types/MobileMoving.html new file mode 100644 index 0000000..78c68a1 --- /dev/null +++ b/Docs/types/MobileMoving.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileMoving + + +

Back to Server.Network

+

MobileMoving : Packet

+ (ctor) MobileMoving( Mobile m, int noto )
+ + diff --git a/Docs/types/MobileMovingOld.html b/Docs/types/MobileMovingOld.html new file mode 100644 index 0000000..c95912d --- /dev/null +++ b/Docs/types/MobileMovingOld.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileMovingOld + + +

Back to Server.Network

+

MobileMovingOld : Packet

+ (ctor) MobileMovingOld( Mobile m, int noto )
+ + diff --git a/Docs/types/MobileName.html b/Docs/types/MobileName.html new file mode 100644 index 0000000..cc208e3 --- /dev/null +++ b/Docs/types/MobileName.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileName + + +

Back to Server.Network

+

MobileName : Packet

+ (ctor) MobileName( Mobile m )
+ + diff --git a/Docs/types/MobileNotConnectedException.html b/Docs/types/MobileNotConnectedException.html new file mode 100644 index 0000000..96371f9 --- /dev/null +++ b/Docs/types/MobileNotConnectedException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileNotConnectedException + + +

Back to Server

+

MobileNotConnectedException : Exception, ISerializable, _Exception

+ (ctor) MobileNotConnectedException( Mobile source, string message )
+ + diff --git a/Docs/types/MobileStam.html b/Docs/types/MobileStam.html new file mode 100644 index 0000000..9414863 --- /dev/null +++ b/Docs/types/MobileStam.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileStam + + +

Back to Server.Network

+

MobileStam : Packet

+ (ctor) MobileStam( Mobile m )
+ + diff --git a/Docs/types/MobileStamN.html b/Docs/types/MobileStamN.html new file mode 100644 index 0000000..1b2ae59 --- /dev/null +++ b/Docs/types/MobileStamN.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileStamN + + +

Back to Server.Network

+

MobileStamN : Packet

+ (ctor) MobileStamN( Mobile m )
+ + diff --git a/Docs/types/MobileStatus.html b/Docs/types/MobileStatus.html new file mode 100644 index 0000000..d8b8c81 --- /dev/null +++ b/Docs/types/MobileStatus.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MobileStatus + + +

Back to Server.Network

+

MobileStatus : Packet

+ (ctor) MobileStatus( Mobile beholder, Mobile beheld )
+ (ctor) MobileStatus( Mobile beholder, Mobile beheld, NetState ns )
+ void WriteAttr( int current, int maximum )
+ void WriteAttrNorm( int current, int maximum )
+ + diff --git a/Docs/types/MobileStatusCompact.html b/Docs/types/MobileStatusCompact.html new file mode 100644 index 0000000..5a3e05b --- /dev/null +++ b/Docs/types/MobileStatusCompact.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileStatusCompact + + +

Back to Server.Network

+

MobileStatusCompact : Packet

+ (ctor) MobileStatusCompact( bool canBeRenamed, Mobile m )
+ + diff --git a/Docs/types/MobileStatusExtended.html b/Docs/types/MobileStatusExtended.html new file mode 100644 index 0000000..78c088b --- /dev/null +++ b/Docs/types/MobileStatusExtended.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MobileStatusExtended + + +

Back to Server.Network

+

MobileStatusExtended : Packet

+ (ctor) MobileStatusExtended( Mobile m )
+ (ctor) MobileStatusExtended( Mobile m, NetState ns )
+ + diff --git a/Docs/types/MobileUpdate.html b/Docs/types/MobileUpdate.html new file mode 100644 index 0000000..6d730ca --- /dev/null +++ b/Docs/types/MobileUpdate.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileUpdate + + +

Back to Server.Network

+

MobileUpdate : Packet

+ (ctor) MobileUpdate( Mobile m )
+ + diff --git a/Docs/types/MobileUpdateOld.html b/Docs/types/MobileUpdateOld.html new file mode 100644 index 0000000..1b4bdd8 --- /dev/null +++ b/Docs/types/MobileUpdateOld.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MobileUpdateOld + + +

Back to Server.Network

+

MobileUpdateOld : Packet

+ (ctor) MobileUpdateOld( Mobile m )
+ + diff --git a/Docs/types/ModelBodyType.html b/Docs/types/ModelBodyType.html new file mode 100644 index 0000000..0675e00 --- /dev/null +++ b/Docs/types/ModelBodyType.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ModelBodyType + + +

Back to Server.Commands

+

ModelBodyType (Enum)

+ Monsters = 0,
+ Sea = 1,
+ Animals = 2,
+ Human = 3,
+ Equipment = 4,
+ Invalid = -1
+ + diff --git a/Docs/types/Mohawk.html b/Docs/types/Mohawk.html new file mode 100644 index 0000000..9e9a31f --- /dev/null +++ b/Docs/types/Mohawk.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Mohawk + + +

Back to Server.Items

+

Mohawk : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Mohawk()
+ (ctor) Mohawk( int hue )
+ (ctor) Mohawk( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Moloch.html b/Docs/types/Moloch.html new file mode 100644 index 0000000..4986de6 --- /dev/null +++ b/Docs/types/Moloch.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Moloch + + +

Back to Server.Mobiles

+

Moloch : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Moloch()
+ (ctor) Moloch( Serial serial )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MomentumStrike.html b/Docs/types/MomentumStrike.html new file mode 100644 index 0000000..43ca2ab --- /dev/null +++ b/Docs/types/MomentumStrike.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MomentumStrike + + +

Back to Server.Spells.Bushido

+

MomentumStrike : SamuraiMove

+ (ctor) MomentumStrike()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ double RequiredSkill( get; )
+ virtual void CheckGain( Mobile m )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/Mongbat.html b/Docs/types/Mongbat.html new file mode 100644 index 0000000..96fdd71 --- /dev/null +++ b/Docs/types/Mongbat.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Mongbat + + +

Back to Server.Mobiles

+

Mongbat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Mongbat()
+ (ctor) Mongbat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Monk.html b/Docs/types/Monk.html new file mode 100644 index 0000000..660c195 --- /dev/null +++ b/Docs/types/Monk.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Monk + + +

Back to Server.Mobiles

+

Monk : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Monk()
+ (ctor) Monk( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MonkRobe.html b/Docs/types/MonkRobe.html new file mode 100644 index 0000000..9a0a724 --- /dev/null +++ b/Docs/types/MonkRobe.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - MonkRobe + + +

Back to Server.Items

+

MonkRobe : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) MonkRobe()
+ (ctor) MonkRobe( int hue )
+ (ctor) MonkRobe( Serial serial )
+ bool CanBeBlessed( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MonsterStatuette.html b/Docs/types/MonsterStatuette.html new file mode 100644 index 0000000..2a9f816 --- /dev/null +++ b/Docs/types/MonsterStatuette.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - MonsterStatuette + + +

Back to Server.Items

+

MonsterStatuette : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Derived Types: PhillipsWoodenSteed, SeahorseStatuette

+

Nested Types: OnOffGump

+ (ctor) MonsterStatuette()
+ (ctor) MonsterStatuette( Serial serial )
+ (ctor) MonsterStatuette( MonsterStatuetteType type )
+ double DefaultWeight( get; )
+ bool HandlesOnMovement( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ bool TurnedOn( get; set; )
+ MonsterStatuetteType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ bool IsOwner( Mobile mob )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MonsterStatuetteInfo.html b/Docs/types/MonsterStatuetteInfo.html new file mode 100644 index 0000000..d5211bd --- /dev/null +++ b/Docs/types/MonsterStatuetteInfo.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MonsterStatuetteInfo + + +

Back to Server.Items

+

MonsterStatuetteInfo

+ (static) MonsterStatuetteInfo GetInfo( MonsterStatuetteType type )
+ (ctor) MonsterStatuetteInfo( int labelNumber, int itemID, int[] sounds )
+ (ctor) MonsterStatuetteInfo( int labelNumber, int itemID, int baseSoundID )
+ int ItemID( get; )
+ int LabelNumber( get; )
+ int[] Sounds( get; )
+ + diff --git a/Docs/types/MonsterStatuetteType.html b/Docs/types/MonsterStatuetteType.html new file mode 100644 index 0000000..e943fcc --- /dev/null +++ b/Docs/types/MonsterStatuetteType.html @@ -0,0 +1,46 @@ + + + RunUO Documentation - Class Overview - MonsterStatuetteType + + +

Back to Server.Items

+

MonsterStatuetteType (Enum)

+ Crocodile = 0,
+ Daemon = 1,
+ Dragon = 2,
+ EarthElemental = 3,
+ Ettin = 4,
+ Gargoyle = 5,
+ Gorilla = 6,
+ Lich = 7,
+ Lizardman = 8,
+ Ogre = 9,
+ Orc = 10,
+ Ratman = 11,
+ Skeleton = 12,
+ Troll = 13,
+ Cow = 14,
+ Zombie = 15,
+ Llama = 16,
+ Ophidian = 17,
+ Reaper = 18,
+ Mongbat = 19,
+ Gazer = 20,
+ FireElemental = 21,
+ Wolf = 22,
+ PhillipsWoodenSteed = 23,
+ Seahorse = 24,
+ Harrower = 25,
+ Efreet = 26,
+ Slime = 27,
+ PlagueBeast = 28,
+ RedDeath = 29,
+ Spider = 30,
+ OphidianArchMage = 31,
+ OphidianWarrior = 32,
+ OphidianKnight = 33,
+ OphidianMage = 34,
+ DreadHorn = 35,
+ Minotaur = 36
+ + diff --git a/Docs/types/MoonPhase.html b/Docs/types/MoonPhase.html new file mode 100644 index 0000000..85bf6a1 --- /dev/null +++ b/Docs/types/MoonPhase.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - MoonPhase + + +

Back to Server.Items

+

MoonPhase (Enum)

+ NewMoon = 0,
+ WaxingCrescentMoon = 1,
+ FirstQuarter = 2,
+ WaxingGibbous = 3,
+ FullMoon = 4,
+ WaningGibbous = 5,
+ LastQuarter = 6,
+ WaningCrescent = 7
+ + diff --git a/Docs/types/MoonfireBrew.html b/Docs/types/MoonfireBrew.html new file mode 100644 index 0000000..dd1c566 --- /dev/null +++ b/Docs/types/MoonfireBrew.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MoonfireBrew + + +

Back to Server.Engines.Quests.Hag

+

MoonfireBrew : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MoonfireBrew()
+ (ctor) MoonfireBrew( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Moongate.html b/Docs/types/Moongate.html new file mode 100644 index 0000000..b49ddb1 --- /dev/null +++ b/Docs/types/Moongate.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - Moongate + + +

Back to Server.Items

+

Moongate : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: ConfirmationMoongate, HarrowerGate, HornOfRetreatMoongate, InternalItem, MoonstoneGate, StarRoomGate

+

Nested Types: DelayTimer

+ (static) bool IsInTown( Point3D p, Map map )
+ (ctor) Moongate()
+ (ctor) Moongate( bool bDispellable )
+ (ctor) Moongate( Serial serial )
+ (ctor) Moongate( Point3D target, Map targetMap )
+ bool Dispellable( get; set; )
+ bool ShowFeluccaWarning( get; )
+ Point3D Target( get; set; )
+ Map TargetMap( get; set; )
+ virtual void BeginConfirmation( Mobile from )
+ virtual void CheckGate( Mobile m, int range )
+ virtual void DelayCallback( Mobile from, int range )
+ virtual void Deserialize( GenericReader reader )
+ virtual void EndConfirmation( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnGateUsed( Mobile m )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ virtual void UseGate( Mobile m )
+ virtual bool ValidateUse( Mobile from, bool message )
+ + diff --git a/Docs/types/MoongateConfirmGump.html b/Docs/types/MoongateConfirmGump.html new file mode 100644 index 0000000..e6b8380 --- /dev/null +++ b/Docs/types/MoongateConfirmGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MoongateConfirmGump + + +

Back to Server.Items

+

MoongateConfirmGump : Gump

+ (ctor) MoongateConfirmGump( Mobile from, Moongate gate )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/MoongateGump.html b/Docs/types/MoongateGump.html new file mode 100644 index 0000000..3c6df4c --- /dev/null +++ b/Docs/types/MoongateGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MoongateGump + + +

Back to Server.Items

+

MoongateGump : Gump

+ (ctor) MoongateGump( Mobile mobile, Item moongate )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ void RenderPage( int index, int offset )
+ + diff --git a/Docs/types/Moonglow.html b/Docs/types/Moonglow.html new file mode 100644 index 0000000..d46cd99 --- /dev/null +++ b/Docs/types/Moonglow.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Moonglow + + +

Back to Server.Factions

+

Moonglow : Town, IComparable

+ (ctor) Moonglow()
+ + diff --git a/Docs/types/Moonstone.html b/Docs/types/Moonstone.html new file mode 100644 index 0000000..53c0396 --- /dev/null +++ b/Docs/types/Moonstone.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Moonstone + + +

Back to Server.Items

+

Moonstone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: SettleTimer

+ (ctor) Moonstone( Serial serial )
+ (ctor) Moonstone( MoonstoneType type )
+ int LabelNumber( get; )
+ MoonstoneType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ Map GetTargetMap()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MoonstoneGate.html b/Docs/types/MoonstoneGate.html new file mode 100644 index 0000000..eab6e59 --- /dev/null +++ b/Docs/types/MoonstoneGate.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MoonstoneGate + + +

Back to Server.Items

+

MoonstoneGate : Moongate, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer

+ (ctor) MoonstoneGate( Serial serial )
+ (ctor) MoonstoneGate( Point3D loc, Map map, Map targetMap, Mobile caster, int hue )
+ virtual void CheckGate( Mobile m, int range )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ virtual void UseGate( Mobile m )
+ + diff --git a/Docs/types/MoonstoneType.html b/Docs/types/MoonstoneType.html new file mode 100644 index 0000000..f905366 --- /dev/null +++ b/Docs/types/MoonstoneType.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MoonstoneType + + +

Back to Server.Items

+

MoonstoneType (Enum)

+ Felucca = 0,
+ Trammel = 1
+ + diff --git a/Docs/types/MorgBergen.html b/Docs/types/MorgBergen.html new file mode 100644 index 0000000..586d59a --- /dev/null +++ b/Docs/types/MorgBergen.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - MorgBergen + + +

Back to Server.Mobiles

+

MorgBergen : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MorgBergen()
+ (ctor) MorgBergen( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ bool DeleteCorpseOnDeath( get; )
+ bool ShowFameTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MorphItem.html b/Docs/types/MorphItem.html new file mode 100644 index 0000000..009e6f6 --- /dev/null +++ b/Docs/types/MorphItem.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - MorphItem + + +

Back to Server.Items

+

MorphItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MorphItem( Serial serial )
+ (ctor) MorphItem( int inactiveItemID, int activeItemID, int range )
+ (ctor) MorphItem( int inactiveItemID, int activeItemID, int inRange, int outRange )
+ int ActiveItemID( get; set; )
+ int CurrentRange( get; )
+ bool HandlesOnMovement( get; )
+ int InactiveItemID( get; set; )
+ int InRange( get; set; )
+ int OutRange( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnLocationChange( Point3D oldLoc )
+ virtual void OnMapChange()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ void Refresh()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MorphResult.html b/Docs/types/MorphResult.html new file mode 100644 index 0000000..fe4181f --- /dev/null +++ b/Docs/types/MorphResult.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MorphResult + + +

Back to Server.Spells.Ninjitsu

+

MorphResult (Enum)

+ Success = 0,
+ Fail = 1,
+ NoSkill = 2
+ + diff --git a/Docs/types/MortalStrike.html b/Docs/types/MortalStrike.html new file mode 100644 index 0000000..087de51 --- /dev/null +++ b/Docs/types/MortalStrike.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MortalStrike + + +

Back to Server.Items

+

MortalStrike : WeaponAbility

+

Nested Types: InternalTimer

+ (static) void BeginWound( Mobile m, TimeSpan duration )
+ (static) void EndWound( Mobile m )
+ (static) bool IsWounded( Mobile m )
+ (ctor) MortalStrike()
+ int BaseMana( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/MortarPestle.html b/Docs/types/MortarPestle.html new file mode 100644 index 0000000..c546bc1 --- /dev/null +++ b/Docs/types/MortarPestle.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MortarPestle + + +

Back to Server.Items

+

MortarPestle : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) MortarPestle()
+ (ctor) MortarPestle( int uses )
+ (ctor) MortarPestle( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MouldingPlane.html b/Docs/types/MouldingPlane.html new file mode 100644 index 0000000..2cccb36 --- /dev/null +++ b/Docs/types/MouldingPlane.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MouldingPlane + + +

Back to Server.Items

+

MouldingPlane : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) MouldingPlane()
+ (ctor) MouldingPlane( int uses )
+ (ctor) MouldingPlane( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MoundOfMaggots.html b/Docs/types/MoundOfMaggots.html new file mode 100644 index 0000000..7a028ef --- /dev/null +++ b/Docs/types/MoundOfMaggots.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MoundOfMaggots + + +

Back to Server.Mobiles

+

MoundOfMaggots : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MoundOfMaggots()
+ (ctor) MoundOfMaggots( Serial serial )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountItem.html b/Docs/types/MountItem.html new file mode 100644 index 0000000..85e2f71 --- /dev/null +++ b/Docs/types/MountItem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - MountItem + + +

Back to Server.Mobiles

+

MountItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMountItem

+ (ctor) MountItem( Serial serial )
+ (ctor) MountItem( BaseMount mount, int itemID )
+ double DefaultWeight( get; )
+ IMount Mount( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual DeathMoveResult OnParentDeath( Mobile parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountainGoat.html b/Docs/types/MountainGoat.html new file mode 100644 index 0000000..15d54e1 --- /dev/null +++ b/Docs/types/MountainGoat.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MountainGoat + + +

Back to Server.Mobiles

+

MountainGoat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) MountainGoat()
+ (ctor) MountainGoat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieBlueAddon.html b/Docs/types/MountedPixieBlueAddon.html new file mode 100644 index 0000000..1de198c --- /dev/null +++ b/Docs/types/MountedPixieBlueAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MountedPixieBlueAddon + + +

Back to Server.Items

+

MountedPixieBlueAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MountedPixieBlueAddon()
+ (ctor) MountedPixieBlueAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieBlueComponent.html b/Docs/types/MountedPixieBlueComponent.html new file mode 100644 index 0000000..95c38cd --- /dev/null +++ b/Docs/types/MountedPixieBlueComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieBlueComponent + + +

Back to Server.Items

+

MountedPixieBlueComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) MountedPixieBlueComponent()
+ (ctor) MountedPixieBlueComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieBlueDeed.html b/Docs/types/MountedPixieBlueDeed.html new file mode 100644 index 0000000..72bf03f --- /dev/null +++ b/Docs/types/MountedPixieBlueDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieBlueDeed + + +

Back to Server.Items

+

MountedPixieBlueDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MountedPixieBlueDeed()
+ (ctor) MountedPixieBlueDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieGreenAddon.html b/Docs/types/MountedPixieGreenAddon.html new file mode 100644 index 0000000..6c712b7 --- /dev/null +++ b/Docs/types/MountedPixieGreenAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MountedPixieGreenAddon + + +

Back to Server.Items

+

MountedPixieGreenAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MountedPixieGreenAddon()
+ (ctor) MountedPixieGreenAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieGreenComponent.html b/Docs/types/MountedPixieGreenComponent.html new file mode 100644 index 0000000..c369a6b --- /dev/null +++ b/Docs/types/MountedPixieGreenComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieGreenComponent + + +

Back to Server.Items

+

MountedPixieGreenComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) MountedPixieGreenComponent()
+ (ctor) MountedPixieGreenComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieGreenDeed.html b/Docs/types/MountedPixieGreenDeed.html new file mode 100644 index 0000000..86fbdaa --- /dev/null +++ b/Docs/types/MountedPixieGreenDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieGreenDeed + + +

Back to Server.Items

+

MountedPixieGreenDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MountedPixieGreenDeed()
+ (ctor) MountedPixieGreenDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieLimeAddon.html b/Docs/types/MountedPixieLimeAddon.html new file mode 100644 index 0000000..826e84f --- /dev/null +++ b/Docs/types/MountedPixieLimeAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MountedPixieLimeAddon + + +

Back to Server.Items

+

MountedPixieLimeAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MountedPixieLimeAddon()
+ (ctor) MountedPixieLimeAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieLimeComponent.html b/Docs/types/MountedPixieLimeComponent.html new file mode 100644 index 0000000..25175b6 --- /dev/null +++ b/Docs/types/MountedPixieLimeComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieLimeComponent + + +

Back to Server.Items

+

MountedPixieLimeComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) MountedPixieLimeComponent()
+ (ctor) MountedPixieLimeComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieLimeDeed.html b/Docs/types/MountedPixieLimeDeed.html new file mode 100644 index 0000000..09a562d --- /dev/null +++ b/Docs/types/MountedPixieLimeDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieLimeDeed + + +

Back to Server.Items

+

MountedPixieLimeDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MountedPixieLimeDeed()
+ (ctor) MountedPixieLimeDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieOrangeAddon.html b/Docs/types/MountedPixieOrangeAddon.html new file mode 100644 index 0000000..e5bc243 --- /dev/null +++ b/Docs/types/MountedPixieOrangeAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MountedPixieOrangeAddon + + +

Back to Server.Items

+

MountedPixieOrangeAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MountedPixieOrangeAddon()
+ (ctor) MountedPixieOrangeAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieOrangeComponent.html b/Docs/types/MountedPixieOrangeComponent.html new file mode 100644 index 0000000..9c06b84 --- /dev/null +++ b/Docs/types/MountedPixieOrangeComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieOrangeComponent + + +

Back to Server.Items

+

MountedPixieOrangeComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) MountedPixieOrangeComponent()
+ (ctor) MountedPixieOrangeComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieOrangeDeed.html b/Docs/types/MountedPixieOrangeDeed.html new file mode 100644 index 0000000..ccf22b5 --- /dev/null +++ b/Docs/types/MountedPixieOrangeDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieOrangeDeed + + +

Back to Server.Items

+

MountedPixieOrangeDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MountedPixieOrangeDeed()
+ (ctor) MountedPixieOrangeDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieWhiteAddon.html b/Docs/types/MountedPixieWhiteAddon.html new file mode 100644 index 0000000..634941f --- /dev/null +++ b/Docs/types/MountedPixieWhiteAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MountedPixieWhiteAddon + + +

Back to Server.Items

+

MountedPixieWhiteAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) MountedPixieWhiteAddon()
+ (ctor) MountedPixieWhiteAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieWhiteComponent.html b/Docs/types/MountedPixieWhiteComponent.html new file mode 100644 index 0000000..053f899 --- /dev/null +++ b/Docs/types/MountedPixieWhiteComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieWhiteComponent + + +

Back to Server.Items

+

MountedPixieWhiteComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) MountedPixieWhiteComponent()
+ (ctor) MountedPixieWhiteComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MountedPixieWhiteDeed.html b/Docs/types/MountedPixieWhiteDeed.html new file mode 100644 index 0000000..54d32ad --- /dev/null +++ b/Docs/types/MountedPixieWhiteDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MountedPixieWhiteDeed + + +

Back to Server.Items

+

MountedPixieWhiteDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MountedPixieWhiteDeed()
+ (ctor) MountedPixieWhiteDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MoveDelayTimer.html b/Docs/types/MoveDelayTimer.html new file mode 100644 index 0000000..81eec1c --- /dev/null +++ b/Docs/types/MoveDelayTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MoveDelayTimer + + +

Back to Server.Items

+

(Fists) - MoveDelayTimer : Timer

+ (ctor) MoveDelayTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/MoveMethod.html b/Docs/types/MoveMethod.html new file mode 100644 index 0000000..5950676 --- /dev/null +++ b/Docs/types/MoveMethod.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MoveMethod + + +

Back to Server

+

MoveMethod : MulticastDelegate, ICloneable, ISerializable

+ (ctor) MoveMethod( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Direction d, AsyncCallback callback, object object )
+ virtual MoveResult EndInvoke( IAsyncResult result )
+ virtual MoveResult Invoke( Direction d )
+ + diff --git a/Docs/types/MoveResult.html b/Docs/types/MoveResult.html new file mode 100644 index 0000000..02b5b4a --- /dev/null +++ b/Docs/types/MoveResult.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MoveResult + + +

Back to Server

+

MoveResult (Enum)

+ BadState = 0,
+ Blocked = 1,
+ Success = 2,
+ SuccessAutoTurn = 3
+ + diff --git a/Docs/types/MoveTarget.html b/Docs/types/MoveTarget.html new file mode 100644 index 0000000..2db4e32 --- /dev/null +++ b/Docs/types/MoveTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MoveTarget + + +

Back to Server.Targets

+

MoveTarget : Target

+ (ctor) MoveTarget( object o )
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/MoveTimer.html b/Docs/types/MoveTimer.html new file mode 100644 index 0000000..4cffd4e --- /dev/null +++ b/Docs/types/MoveTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MoveTimer + + +

Back to Server.Multis

+

(BaseBoat) - MoveTimer : Timer

+ (ctor) MoveTimer( BaseBoat boat, TimeSpan interval, bool single )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Movement.html b/Docs/types/Movement.html new file mode 100644 index 0000000..1f0e696 --- /dev/null +++ b/Docs/types/Movement.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Movement + + +

Back to Server.Movement

+

Movement

+ (static) IMovementImpl Impl( get; set; )
+ (static) bool CheckMovement( Mobile m, Direction d, out int newZ )
+ (static) bool CheckMovement( Mobile m, Map map, Point3D loc, Direction d, out int newZ )
+ (static) void Offset( Direction d, ref int x, ref int y )
+ + diff --git a/Docs/types/MovementAck.html b/Docs/types/MovementAck.html new file mode 100644 index 0000000..b78a278 --- /dev/null +++ b/Docs/types/MovementAck.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MovementAck + + +

Back to Server.Network

+

MovementAck : Packet

+ (static) MovementAck Instantiate( int seq, Mobile m )
+ (ctor) MovementAck( int seq, int noto )
+ + diff --git a/Docs/types/MovementEventArgs.html b/Docs/types/MovementEventArgs.html new file mode 100644 index 0000000..322b45b --- /dev/null +++ b/Docs/types/MovementEventArgs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MovementEventArgs + + +

Back to Server

+

MovementEventArgs : EventArgs

+ (static) MovementEventArgs Create( Mobile mobile, Direction dir )
+ (ctor) MovementEventArgs( Mobile mobile, Direction dir )
+ bool Blocked( get; set; )
+ Direction Direction( get; )
+ Mobile Mobile( get; )
+ void Free()
+ + diff --git a/Docs/types/MovementEventHandler.html b/Docs/types/MovementEventHandler.html new file mode 100644 index 0000000..fc5817b --- /dev/null +++ b/Docs/types/MovementEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MovementEventHandler + + +

Back to Server

+

MovementEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) MovementEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( MovementEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( MovementEventArgs e )
+ + diff --git a/Docs/types/MovementImpl.html b/Docs/types/MovementImpl.html new file mode 100644 index 0000000..b195560 --- /dev/null +++ b/Docs/types/MovementImpl.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - MovementImpl + + +

Back to Server.Movement

+

MovementImpl : IMovementImpl

+ (static) bool AlwaysIgnoreDoors( get; set; )
+ (static) bool IgnoreMovableImpassables( get; set; )
+ (static) bool IgnoreSpellFields( get; set; )
+ (static) void Configure()
+ (ctor) MovementImpl()
+ bool Check( Map map, Mobile m, List<Item> items, int x, int y, int startTop, int startZ, bool canSwim, bool cantWalk, out int newZ )
+ virtual bool CheckMovement( Mobile m, Direction d, out int newZ )
+ virtual bool CheckMovement( Mobile m, Map map, Point3D loc, Direction d, out int newZ )
+ void GetStartZ( Mobile m, Map map, Point3D loc, List<Item> itemList, out int zLow, out int zTop )
+ bool IsOk( bool ignoreDoors, bool ignoreSpellFields, int ourZ, int ourTop, StaticTile[] tiles, List<Item> items )
+ void Offset( Direction d, ref int x, ref int y )
+ + diff --git a/Docs/types/MovementPath.html b/Docs/types/MovementPath.html new file mode 100644 index 0000000..ec82271 --- /dev/null +++ b/Docs/types/MovementPath.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - MovementPath + + +

Back to Server

+

MovementPath

+ (static) PathAlgorithm OverrideAlgorithm( get; set; )
+ (static) void Initialize()
+ (static) void Path( Mobile from, IPoint3D p, PathAlgorithm alg, string name, int zOffset )
+ (static) void Path_OnCommand( CommandEventArgs e )
+ (static) void Path_OnTarget( Mobile from, object obj )
+ (static) void Pathfind( object state )
+ (ctor) MovementPath( Mobile m, Point3D goal )
+ Direction[] Directions( get; )
+ Point3D Goal( get; )
+ Map Map( get; )
+ Point3D Start( get; )
+ bool Success( get; )
+ + diff --git a/Docs/types/MovementRecord.html b/Docs/types/MovementRecord.html new file mode 100644 index 0000000..f24aa62 --- /dev/null +++ b/Docs/types/MovementRecord.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MovementRecord + + +

Back to Server

+

(Mobile) - MovementRecord

+ (static) MovementRecord NewInstance( DateTime end )
+ (ctor) MovementRecord( DateTime end )
+ bool Expired()
+ + diff --git a/Docs/types/MovementRej.html b/Docs/types/MovementRej.html new file mode 100644 index 0000000..eb64176 --- /dev/null +++ b/Docs/types/MovementRej.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MovementRej + + +

Back to Server.Network

+

MovementRej : Packet

+ (ctor) MovementRej( int seq, Mobile m )
+ + diff --git a/Docs/types/MovementType.html b/Docs/types/MovementType.html new file mode 100644 index 0000000..aababe0 --- /dev/null +++ b/Docs/types/MovementType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MovementType + + +

Back to Server.Factions.AI

+

MovementType (Enum)

+ Stand = 0,
+ Patrol = 1,
+ Follow = 2
+ + diff --git a/Docs/types/MovingCrate.html b/Docs/types/MovingCrate.html new file mode 100644 index 0000000..4eb5f22 --- /dev/null +++ b/Docs/types/MovingCrate.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - MovingCrate + + +

Back to Server.Multis

+

MovingCrate : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalizeTimer

+ (ctor) MovingCrate( Serial serial )
+ (ctor) MovingCrate( BaseHouse house )
+ int DefaultMaxItems( get; )
+ int DefaultMaxWeight( get; )
+ BaseHouse House( get; set; )
+ bool IsDecoContainer( get; )
+ int LabelNumber( get; )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DropItem( Item dropped )
+ Point3D GetFreeLocation()
+ void Hide()
+ virtual void OnAfterDelete()
+ virtual void OnItemRemoved( Item item )
+ void RestartTimer()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MovingEffect.html b/Docs/types/MovingEffect.html new file mode 100644 index 0000000..8a4d354 --- /dev/null +++ b/Docs/types/MovingEffect.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MovingEffect + + +

Back to Server.Network

+

MovingEffect : HuedEffect

+ (ctor) MovingEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode )
+ + diff --git a/Docs/types/MovingParticleEffect.html b/Docs/types/MovingParticleEffect.html new file mode 100644 index 0000000..b56b4fc --- /dev/null +++ b/Docs/types/MovingParticleEffect.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MovingParticleEffect + + +

Back to Server.Network

+

MovingParticleEffect : ParticleEffect

+ (ctor) MovingParticleEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, EffectLayer layer, int unknown )
+ + diff --git a/Docs/types/MovingShot.html b/Docs/types/MovingShot.html new file mode 100644 index 0000000..6ed2557 --- /dev/null +++ b/Docs/types/MovingShot.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MovingShot + + +

Back to Server.Items

+

MovingShot : WeaponAbility

+ (ctor) MovingShot()
+ int AccuracyBonus( get; )
+ int BaseMana( get; )
+ bool ValidatesDuringHit( get; )
+ virtual bool OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual void OnMiss( Mobile attacker, Mobile defender )
+ + diff --git a/Docs/types/Muculent.html b/Docs/types/Muculent.html new file mode 100644 index 0000000..25ab03e --- /dev/null +++ b/Docs/types/Muculent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Muculent + + +

Back to Server.Items

+

Muculent : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Muculent()
+ (ctor) Muculent( int amount )
+ (ctor) Muculent( Serial serial )
+ (ctor) Muculent( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Muffins.html b/Docs/types/Muffins.html new file mode 100644 index 0000000..7f7cd9d --- /dev/null +++ b/Docs/types/Muffins.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Muffins + + +

Back to Server.Items

+

Muffins : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Muffins()
+ (ctor) Muffins( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MultiCommandImplementor.html b/Docs/types/MultiCommandImplementor.html new file mode 100644 index 0000000..63453fe --- /dev/null +++ b/Docs/types/MultiCommandImplementor.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MultiCommandImplementor + + +

Back to Server.Commands.Generic

+

MultiCommandImplementor : BaseCommandImplementor

+ (ctor) MultiCommandImplementor()
+ void OnTarget( Mobile from, object targeted, object state )
+ virtual void Process( Mobile from, BaseCommand command, string[] args )
+ + diff --git a/Docs/types/MultiComponentList.html b/Docs/types/MultiComponentList.html new file mode 100644 index 0000000..f1926fd --- /dev/null +++ b/Docs/types/MultiComponentList.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - MultiComponentList + + +

Back to Server

+

MultiComponentList

+ (static) bool PostHSFormat( get; set; )
+ (ctor) MultiComponentList()
+ (ctor) MultiComponentList( GenericReader reader )
+ (ctor) MultiComponentList( MultiComponentList toCopy )
+ (ctor) MultiComponentList( BinaryReader reader, int count )
+ Point2D Center( get; )
+ int Height( get; )
+ MultiTileEntry[] List( get; )
+ Point2D Max( get; )
+ Point2D Min( get; )
+ StaticTile[][][] Tiles( get; )
+ int Width( get; )
+ void Add( int itemID, int x, int y, int z )
+ void Remove( int itemID, int x, int y, int z )
+ void RemoveXYZH( int x, int y, int z, int minHeight )
+ void Resize( int newWidth, int newHeight )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MultiData.html b/Docs/types/MultiData.html new file mode 100644 index 0000000..4157128 --- /dev/null +++ b/Docs/types/MultiData.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - MultiData + + +

Back to Server

+

MultiData

+ (static) MultiComponentList GetComponents( int multiID )
+ (static) MultiComponentList Load( int multiID )
+ + diff --git a/Docs/types/MultiTarget.html b/Docs/types/MultiTarget.html new file mode 100644 index 0000000..c250cb5 --- /dev/null +++ b/Docs/types/MultiTarget.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - MultiTarget + + +

Back to Server.Targeting

+

MultiTarget : Target

+

Derived Types: HousePlacementTarget, InternalTarget, InternalTarget, NewHousePlacementTarget

+ (ctor) MultiTarget( int multiID, Point3D offset )
+ (ctor) MultiTarget( int multiID, Point3D offset, int range, bool allowGround, TargetFlags flags )
+ int MultiID( get; set; )
+ Point3D Offset( get; set; )
+ virtual Packet GetPacketFor( NetState ns )
+ + diff --git a/Docs/types/MultiTargetReq.html b/Docs/types/MultiTargetReq.html new file mode 100644 index 0000000..4705eab --- /dev/null +++ b/Docs/types/MultiTargetReq.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MultiTargetReq + + +

Back to Server.Network

+

MultiTargetReq : Packet

+ (ctor) MultiTargetReq( MultiTarget t )
+ + diff --git a/Docs/types/MultiTargetReqHS.html b/Docs/types/MultiTargetReqHS.html new file mode 100644 index 0000000..182ee5c --- /dev/null +++ b/Docs/types/MultiTargetReqHS.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MultiTargetReqHS + + +

Back to Server.Network

+

MultiTargetReqHS : Packet

+ (ctor) MultiTargetReqHS( MultiTarget t )
+ + diff --git a/Docs/types/MultiTextWriter.html b/Docs/types/MultiTextWriter.html new file mode 100644 index 0000000..f87f826 --- /dev/null +++ b/Docs/types/MultiTextWriter.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - MultiTextWriter + + +

Back to Server

+

MultiTextWriter : TextWriter, IDisposable

+ (ctor) MultiTextWriter( TextWriter[] streams )
+ Encoding Encoding( get; )
+ void Add( TextWriter tw )
+ void Remove( TextWriter tw )
+ virtual void Write( char ch )
+ virtual void WriteLine( string line )
+ virtual void WriteLine( string line, object[] args )
+ + diff --git a/Docs/types/MultiTileEntry.html b/Docs/types/MultiTileEntry.html new file mode 100644 index 0000000..0ad41c8 --- /dev/null +++ b/Docs/types/MultiTileEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MultiTileEntry + + +

Back to Server

+

MultiTileEntry

+ (ctor) MultiTileEntry( ushort itemID, short xOffset, short yOffset, short zOffset, int flags )
+ + diff --git a/Docs/types/MultiTileEnumerator.html b/Docs/types/MultiTileEnumerator.html new file mode 100644 index 0000000..3fce16c --- /dev/null +++ b/Docs/types/MultiTileEnumerator.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - MultiTileEnumerator + + +

Back to Server

+

(Map) - MultiTileEnumerator : IPooledEnumerator, IEnumerator, IDisposable

+ (static) MultiTileEnumerator Instantiate( Sector sector, Point2D loc )
+ (ctor) MultiTileEnumerator( Sector sector, Point2D loc )
+ object Current( get; )
+ IPooledEnumerable Enumerable( get; set; )
+ virtual void Dispose()
+ virtual void Free()
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/Mummy.html b/Docs/types/Mummy.html new file mode 100644 index 0000000..43131a1 --- /dev/null +++ b/Docs/types/Mummy.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Mummy + + +

Back to Server.Mobiles

+

Mummy : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Mummy()
+ (ctor) Mummy( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MurderConversation.html b/Docs/types/MurderConversation.html new file mode 100644 index 0000000..064a8c9 --- /dev/null +++ b/Docs/types/MurderConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - MurderConversation + + +

Back to Server.Engines.Quests.Hag

+

MurderConversation : QuestConversation

+ (ctor) MurderConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/MushroomTrap.html b/Docs/types/MushroomTrap.html new file mode 100644 index 0000000..06b6c4c --- /dev/null +++ b/Docs/types/MushroomTrap.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - MushroomTrap + + +

Back to Server.Items

+

MushroomTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) MushroomTrap()
+ (ctor) MushroomTrap( Serial serial )
+ bool PassivelyTriggered( get; )
+ TimeSpan PassiveTriggerDelay( get; )
+ int PassiveTriggerRange( get; )
+ TimeSpan ResetDelay( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnMushroomReset()
+ virtual void OnTrigger( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MusicName.html b/Docs/types/MusicName.html new file mode 100644 index 0000000..3b4db97 --- /dev/null +++ b/Docs/types/MusicName.html @@ -0,0 +1,77 @@ + + + RunUO Documentation - Class Overview - MusicName + + +

Back to Server

+

MusicName (Enum)

+ OldUlt01 = 0,
+ Create1 = 1,
+ DragFlit = 2,
+ OldUlt02 = 3,
+ OldUlt03 = 4,
+ OldUlt04 = 5,
+ OldUlt05 = 6,
+ OldUlt06 = 7,
+ Stones2 = 8,
+ Britain1 = 9,
+ Britain2 = 10,
+ Bucsden = 11,
+ Jhelom = 12,
+ LBCastle = 13,
+ Linelle = 14,
+ Magincia = 15,
+ Minoc = 16,
+ Ocllo = 17,
+ Samlethe = 18,
+ Serpents = 19,
+ Skarabra = 20,
+ Trinsic = 21,
+ Vesper = 22,
+ Wind = 23,
+ Yew = 24,
+ Cave01 = 25,
+ Dungeon9 = 26,
+ Forest_a = 27,
+ InTown01 = 28,
+ Jungle_a = 29,
+ Mountn_a = 30,
+ Plains_a = 31,
+ Sailing = 32,
+ Swamp_a = 33,
+ Tavern01 = 34,
+ Tavern02 = 35,
+ Tavern03 = 36,
+ Tavern04 = 37,
+ Combat1 = 38,
+ Combat2 = 39,
+ Combat3 = 40,
+ Approach = 41,
+ Death = 42,
+ Victory = 43,
+ BTCastle = 44,
+ Nujelm = 45,
+ Dungeon2 = 46,
+ Cove = 47,
+ Moonglow = 48,
+ Zento = 49,
+ TokunoDungeon = 50,
+ Taiko = 51,
+ DreadHornArea = 52,
+ ElfCity = 53,
+ GrizzleDungeon = 54,
+ MelisandesLair = 55,
+ ParoxysmusLair = 56,
+ GwennoConversation = 57,
+ GoodEndGame = 58,
+ GoodVsEvil = 59,
+ GreatEarthSerpents = 60,
+ Humanoids_U9 = 61,
+ MinocNegative = 62,
+ Paws = 63,
+ SelimsBar = 64,
+ SerpentIsleCombat_U7 = 65,
+ ValoriaShips = 66,
+ Invalid = -1
+ + diff --git a/Docs/types/Mustache.html b/Docs/types/Mustache.html new file mode 100644 index 0000000..93097f3 --- /dev/null +++ b/Docs/types/Mustache.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Mustache + + +

Back to Server.Items

+

Mustache : Beard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Mustache()
+ (ctor) Mustache( int hue )
+ (ctor) Mustache( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/MutateEntry.html b/Docs/types/MutateEntry.html new file mode 100644 index 0000000..33c72ab --- /dev/null +++ b/Docs/types/MutateEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - MutateEntry + + +

Back to Server.Engines.Harvest

+

(Fishing) - MutateEntry

+ (ctor) MutateEntry( double reqSkill, double minSkill, double maxSkill, bool deepWater, Type[] types )
+ + diff --git a/Docs/types/MyRunUO.html b/Docs/types/MyRunUO.html new file mode 100644 index 0000000..9ff9c95 --- /dev/null +++ b/Docs/types/MyRunUO.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - MyRunUO + + +

Back to Server.Engines.MyRunUO

+

MyRunUO : Timer

+

Nested Types: Stage

+ (static) void Begin()
+ (static) void Initialize()
+ (static) void PrivateChar_OnCommand( CommandEventArgs e )
+ (static) void PublicChar_OnCommand( CommandEventArgs e )
+ (static) void QueueMobileUpdate( Mobile m )
+ (static) void UpdateMyRunUO_OnCommand( CommandEventArgs e )
+ (ctor) MyRunUO()
+ void AppendCharEntity( string input, int charIndex, ref StringBuilder sb, char c )
+ void AppendEntityRef( string input, int charIndex, ref StringBuilder sb, string ent )
+ void CheckConnection()
+ void CollectGuilds( DateTime endTime )
+ void CollectMobiles( DateTime endTime )
+ void DeleteMobile( Mobile mob )
+ void DumpGuilds( DateTime endTime )
+ void DumpMobiles( DateTime endTime )
+ void ExecuteNonQuery( string text )
+ void ExecuteNonQuery( string format, string[] args )
+ void ExecuteNonQueryIfNull( string select, string insert )
+ StreamWriter GetUniqueWriter( string type, out string filePath )
+ void InsertGuild( Guild guild )
+ void InsertItem( string serial, int index, int itemID, int hue )
+ void InsertItems( Mobile mob )
+ void InsertMobile( Mobile mob )
+ void InsertSkills( Mobile mob )
+ void InsertWars( Guild guild )
+ virtual void OnTick()
+ bool Process( DateTime endTime )
+ string SafeString( string input )
+ + diff --git a/Docs/types/MyRunUOStatus.html b/Docs/types/MyRunUOStatus.html new file mode 100644 index 0000000..7bbb545 --- /dev/null +++ b/Docs/types/MyRunUOStatus.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - MyRunUOStatus + + +

Back to Server.Engines.MyRunUO

+

MyRunUOStatus

+ (static) void Begin()
+ (static) void Initialize()
+ (static) void UpdateWebStatus_OnCommand( CommandEventArgs e )
+ (ctor) MyRunUOStatus()
+ + diff --git a/Docs/types/MyStory.html b/Docs/types/MyStory.html new file mode 100644 index 0000000..46955e3 --- /dev/null +++ b/Docs/types/MyStory.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - MyStory + + +

Back to Server.Items

+

MyStory : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) MyStory()
+ (ctor) MyStory( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Nails.html b/Docs/types/Nails.html new file mode 100644 index 0000000..96e9904 --- /dev/null +++ b/Docs/types/Nails.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Nails + + +

Back to Server.Items

+

Nails : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Nails()
+ (ctor) Nails( int uses )
+ (ctor) Nails( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NameBookEntry.html b/Docs/types/NameBookEntry.html new file mode 100644 index 0000000..144e6fb --- /dev/null +++ b/Docs/types/NameBookEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NameBookEntry + + +

Back to Server.Engines.BulkOrders

+

(BulkOrderBook) - NameBookEntry : ContextMenuEntry

+ (ctor) NameBookEntry( Mobile from, BulkOrderBook book )
+ virtual void OnClick()
+ + diff --git a/Docs/types/NameBookPrompt.html b/Docs/types/NameBookPrompt.html new file mode 100644 index 0000000..7d1bff9 --- /dev/null +++ b/Docs/types/NameBookPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NameBookPrompt + + +

Back to Server.Engines.BulkOrders

+

(BulkOrderBook) - NameBookPrompt : Prompt

+ (ctor) NameBookPrompt( BulkOrderBook book )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/NameChangeDeed.html b/Docs/types/NameChangeDeed.html new file mode 100644 index 0000000..6b6e2f2 --- /dev/null +++ b/Docs/types/NameChangeDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - NameChangeDeed + + +

Back to Server.Items

+

NameChangeDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) NameChangeDeed()
+ (ctor) NameChangeDeed( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NameComparer.html b/Docs/types/NameComparer.html new file mode 100644 index 0000000..dde2c9a --- /dev/null +++ b/Docs/types/NameComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NameComparer + + +

Back to Server.Gumps

+

(HouseRaffleManagementGump) - NameComparer : IComparer<RaffleEntry>

+ (ctor) NameComparer()
+ virtual int Compare( RaffleEntry x, RaffleEntry y )
+ + diff --git a/Docs/types/NameList.html b/Docs/types/NameList.html new file mode 100644 index 0000000..7b14171 --- /dev/null +++ b/Docs/types/NameList.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - NameList + + +

Back to Server

+

NameList

+ (static) NameList GetNameList( string type )
+ (static) void Load( string filePath )
+ (static) string RandomName( string type )
+ (ctor) NameList( string type, XmlElement xml )
+ string[] List( get; )
+ string Type( get; )
+ bool ContainsName( string name )
+ string GetRandomName()
+ + diff --git a/Docs/types/NameVerification.html b/Docs/types/NameVerification.html new file mode 100644 index 0000000..dbe6e8a --- /dev/null +++ b/Docs/types/NameVerification.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - NameVerification + + +

Back to Server.Misc

+

NameVerification

+ (static) string[] Disallowed( get; )
+ (static) string[] StartDisallowed( get; )
+ (static) void Initialize()
+ (static) bool Validate( string name, int minLength, int maxLength, bool allowLetters, bool allowDigits, bool noExceptionsAtStart, int maxExceptions, char[] exceptions )
+ (static) bool Validate( string name, int minLength, int maxLength, bool allowLetters, bool allowDigits, bool noExceptionsAtStart, int maxExceptions, char[] exceptions, string[] disallowed, string[] startDisallowed )
+ (static) void ValidateName_OnCommand( CommandEventArgs e )
+ (ctor) NameVerification()
+ + diff --git a/Docs/types/NativeReader.html b/Docs/types/NativeReader.html new file mode 100644 index 0000000..57ac7fa --- /dev/null +++ b/Docs/types/NativeReader.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - NativeReader + + +

Back to Server

+

NativeReader

+ (static) void Read( IntPtr ptr, void *buffer, int length )
+ + diff --git a/Docs/types/NativeReaderUnix.html b/Docs/types/NativeReaderUnix.html new file mode 100644 index 0000000..95c5d05 --- /dev/null +++ b/Docs/types/NativeReaderUnix.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NativeReaderUnix + + +

Back to Server

+

NativeReaderUnix : INativeReader

+ (static) int read( IntPtr ptr, void *buffer, int length )
+ (ctor) NativeReaderUnix()
+ virtual void Read( IntPtr ptr, void *buffer, int length )
+ + diff --git a/Docs/types/NativeReaderWin32.html b/Docs/types/NativeReaderWin32.html new file mode 100644 index 0000000..6e4879b --- /dev/null +++ b/Docs/types/NativeReaderWin32.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NativeReaderWin32 + + +

Back to Server

+

NativeReaderWin32 : INativeReader

+ (static) int _lread( IntPtr hFile, void *lpBuffer, int wBytes )
+ (ctor) NativeReaderWin32()
+ virtual void Read( IntPtr ptr, void *buffer, int length )
+ + diff --git a/Docs/types/Naturalist.html b/Docs/types/Naturalist.html new file mode 100644 index 0000000..06ef299 --- /dev/null +++ b/Docs/types/Naturalist.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Naturalist + + +

Back to Server.Engines.Quests.Naturalist

+

Naturalist : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Naturalist()
+ (ctor) Naturalist( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NaturalistDuringStudyConversation.html b/Docs/types/NaturalistDuringStudyConversation.html new file mode 100644 index 0000000..5c68f80 --- /dev/null +++ b/Docs/types/NaturalistDuringStudyConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NaturalistDuringStudyConversation + + +

Back to Server.Engines.Quests.Naturalist

+

NaturalistDuringStudyConversation : QuestConversation

+ (ctor) NaturalistDuringStudyConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/NatureFury.html b/Docs/types/NatureFury.html new file mode 100644 index 0000000..e93fc8d --- /dev/null +++ b/Docs/types/NatureFury.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - NatureFury + + +

Back to Server.Mobiles

+

NatureFury : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) NatureFury()
+ (ctor) NatureFury( Mobile target )
+ (ctor) NatureFury( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool BleedImmune( get; )
+ Mobile ConstantFocus( get; )
+ bool DeleteCorpseOnDeath( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ bool IsHouseSummonable( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoEffects()
+ virtual void MoveToWorld( Point3D loc, Map map )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NatureFuryScroll.html b/Docs/types/NatureFuryScroll.html new file mode 100644 index 0000000..4b16b4f --- /dev/null +++ b/Docs/types/NatureFuryScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - NatureFuryScroll + + +

Back to Server.Items

+

NatureFuryScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) NatureFuryScroll()
+ (ctor) NatureFuryScroll( int amount )
+ (ctor) NatureFuryScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NatureFurySpell.html b/Docs/types/NatureFurySpell.html new file mode 100644 index 0000000..50d08fe --- /dev/null +++ b/Docs/types/NatureFurySpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - NatureFurySpell + + +

Back to Server.Spells.Spellweaving

+

NatureFurySpell : ArcanistSpell, ISpell

+

Nested Types: (Anonymous-Type)--c__DisplayClass1, InternalTarget

+ (ctor) NatureFurySpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual int GetMana()
+ virtual void OnCast()
+ void Target( IPoint3D point )
+ + diff --git a/Docs/types/Necklace.html b/Docs/types/Necklace.html new file mode 100644 index 0000000..34f7403 --- /dev/null +++ b/Docs/types/Necklace.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Necklace + + +

Back to Server.Items

+

Necklace : BaseNecklace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) Necklace()
+ (ctor) Necklace( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NecromancerSpell.html b/Docs/types/NecromancerSpell.html new file mode 100644 index 0000000..a5d39e8 --- /dev/null +++ b/Docs/types/NecromancerSpell.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - NecromancerSpell + + +

Back to Server.Spells.Necromancy

+

NecromancerSpell : Spell, ISpell

+

Derived Types: AnimateDeadSpell, BloodOathSpell, CorpseSkinSpell, CurseWeaponSpell, EvilOmenSpell, ExorcismSpell, MindRotSpell, PainSpikeSpell, PoisonStrikeSpell, StrangleSpell, SummonFamiliarSpell, TransformationSpell, VengefulSpiritSpell, WitherSpell

+ (ctor) NecromancerSpell( Mobile caster, Item scroll, SpellInfo info )
+ double CastDelayFastScalar( get; )
+ SkillName CastSkill( get; )
+ bool ClearHandsOnCast( get; )
+ SkillName DamageSkill( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual int ComputeKarmaAward()
+ virtual bool ConsumeReagents()
+ virtual void GetCastSkills( out double min, out double max )
+ virtual int GetMana()
+ + diff --git a/Docs/types/NecromancerSpellbook.html b/Docs/types/NecromancerSpellbook.html new file mode 100644 index 0000000..1cfed2c --- /dev/null +++ b/Docs/types/NecromancerSpellbook.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - NecromancerSpellbook + + +

Back to Server.Items

+

NecromancerSpellbook : Spellbook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+

Derived Types: OssianGrimoire

+ (ctor) NecromancerSpellbook()
+ (ctor) NecromancerSpellbook( ulong content )
+ (ctor) NecromancerSpellbook( Serial serial )
+ int BookCount( get; )
+ int BookOffset( get; )
+ SpellbookType SpellbookType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NecromanticGlasses.html b/Docs/types/NecromanticGlasses.html new file mode 100644 index 0000000..a8606b3 --- /dev/null +++ b/Docs/types/NecromanticGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - NecromanticGlasses + + +

Back to Server.Items

+

NecromanticGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) NecromanticGlasses()
+ (ctor) NecromanticGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NeedDelegate.html b/Docs/types/NeedDelegate.html new file mode 100644 index 0000000..fa979f5 --- /dev/null +++ b/Docs/types/NeedDelegate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - NeedDelegate + + +

Back to Server.Mobiles

+

(HealerAI) - NeedDelegate : MulticastDelegate, ICloneable, ISerializable

+ (ctor) NeedDelegate( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile m, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Mobile m )
+ + diff --git a/Docs/types/NeedToHideConversation.html b/Docs/types/NeedToHideConversation.html new file mode 100644 index 0000000..6659291 --- /dev/null +++ b/Docs/types/NeedToHideConversation.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NeedToHideConversation + + +

Back to Server.Engines.Quests.Ninja

+

NeedToHideConversation : QuestConversation

+ (ctor) NeedToHideConversation()
+ object Message( get; )
+ + diff --git a/Docs/types/Neira.html b/Docs/types/Neira.html new file mode 100644 index 0000000..4d68739 --- /dev/null +++ b/Docs/types/Neira.html @@ -0,0 +1,34 @@ + + + RunUO Documentation - Class Overview - Neira + + +

Back to Server.Mobiles

+

Neira : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: DelayTimer, VirtualMount, VirtualMountItem

+ (ctor) Neira()
+ (ctor) Neira( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool BardImmune( get; )
+ bool ClickTitle( get; )
+ Type[] DecorativeList( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ bool ShowFameTitle( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ bool Uncalmable( get; )
+ Type[] UniqueList( get; )
+ bool Unprovokable( get; )
+ void AddUnholyBone( Mobile target, double chanceToThrow )
+ virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
+ void CheckSpeedBoost()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool OnBeforeDeath()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NerveStrike.html b/Docs/types/NerveStrike.html new file mode 100644 index 0000000..93f26ce --- /dev/null +++ b/Docs/types/NerveStrike.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - NerveStrike + + +

Back to Server.Items

+

NerveStrike : WeaponAbility

+ (ctor) NerveStrike()
+ int BaseMana( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual bool OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/NestArea.html b/Docs/types/NestArea.html new file mode 100644 index 0000000..ec93981 --- /dev/null +++ b/Docs/types/NestArea.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - NestArea + + +

Back to Server.Engines.Quests.Naturalist

+

NestArea

+ (static) int NonSpecialCount( get; )
+ (static) NestArea Find( IPoint2D p )
+ (static) NestArea GetByID( int id )
+ (ctor) NestArea( bool special, Rectangle2D[] rects )
+ int ID( get; )
+ bool Special( get; )
+ bool Contains( IPoint2D p )
+ + diff --git a/Docs/types/NetState.html b/Docs/types/NetState.html new file mode 100644 index 0000000..758c4a7 --- /dev/null +++ b/Docs/types/NetState.html @@ -0,0 +1,97 @@ + + + RunUO Documentation - Class Overview - NetState + + +

Back to Server.Network

+

NetState

+

Nested Types: AsyncState, ProtocolChanges

+ (static) int CoalesceSleep( get; set; )
+ (static) NetStateCreatedCallback CreatedCallback( get; set; )
+ (static) int GumpCap( get; set; )
+ (static) int HuePickerCap( get; set; )
+ (static) List<NetState> Instances( get; )
+ (static) int MenuCap( get; set; )
+ (static) void CheckAllAlive()
+ (static) void FlushAll()
+ (static) void Initialize()
+ (static) void Pause()
+ (static) void ProcessDisposedQueue()
+ (static) void Resume()
+ (static) void TraceException( Exception ex )
+ (ctor) NetState( Socket socket, MessagePump messagePump )
+ IAccount Account( get; set; )
+ IPAddress Address( get; )
+ bool BlockAllPackets( get; set; )
+ ByteQueue Buffer( get; )
+ bool BuffIcon( get; )
+ CityInfo[] CityInfo( get; set; )
+ bool CompressionEnabled( get; set; )
+ TimeSpan ConnectedFor( get; )
+ DateTime ConnectedOn( get; )
+ bool ContainerGridLines( get; )
+ bool DamagePacket( get; )
+ Expansion Expansion( get; )
+ ExpansionInfo ExpansionInfo( get; )
+ bool ExtendedSupportedFeatures( get; )
+ ClientFlags Flags( get; set; )
+ IEnumerable<Gump> Gumps( get; )
+ bool HighSeas( get; )
+ IEnumerable<HuePicker> HuePickers( get; )
+ bool IsSAClient( get; )
+ bool IsUOTDClient( get; )
+ IEnumerable<IMenu> Menus( get; )
+ Mobile Mobile( get; set; )
+ bool NewCharacterCreation( get; )
+ bool NewCharacterList( get; )
+ bool NewHaven( get; )
+ bool NewSpellbook( get; )
+ IPacketEncoder PacketEncoder( get; set; )
+ bool Running( get; )
+ bool Seeded( get; set; )
+ bool SentFirstPacket( get; set; )
+ int Sequence( get; set; )
+ ServerInfo[] ServerInfo( get; set; )
+ Socket Socket( get; )
+ bool StygianAbyss( get; )
+ List<SecureTrade> Trades( get; )
+ bool Unpack( get; )
+ ClientVersion Version( get; set; )
+ void AddGump( Gump gump )
+ void AddHuePicker( HuePicker huePicker )
+ void AddMenu( IMenu menu )
+ SecureTradeContainer AddTrade( NetState state )
+ void CancelAllTrades()
+ bool CheckAlive()
+ void ClearGumps()
+ void ClearHuePickers()
+ void ClearMenus()
+ void Dispose()
+ virtual void Dispose( bool flush )
+ SecureTrade FindTrade( Mobile m )
+ SecureTradeContainer FindTradeContainer( Mobile m )
+ bool Flush()
+ PacketHandler GetHandler( int packetID )
+ void InternalBeginReceive()
+ void LaunchBrowser( string url )
+ void OnReceive( IAsyncResult asyncResult )
+ void OnSend( IAsyncResult asyncResult )
+ void RemoveGump( Gump gump )
+ void RemoveGump( int index )
+ void RemoveHuePicker( int index )
+ void RemoveHuePicker( HuePicker huePicker )
+ void RemoveMenu( int index )
+ void RemoveMenu( IMenu menu )
+ void RemoveTrade( SecureTrade trade )
+ virtual void Send( Packet p )
+ void Start()
+ bool SupportsExpansion( Expansion ex )
+ bool SupportsExpansion( ExpansionInfo info )
+ bool SupportsExpansion( Expansion ex, bool checkCoreExpansion )
+ bool SupportsExpansion( ExpansionInfo info, bool checkCoreExpansion )
+ virtual string ToString()
+ void ValidateAllTrades()
+ void WriteConsole( string text )
+ void WriteConsole( string format, object[] args )
+ + diff --git a/Docs/types/NetStateComparer.html b/Docs/types/NetStateComparer.html new file mode 100644 index 0000000..1a4fc15 --- /dev/null +++ b/Docs/types/NetStateComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NetStateComparer + + +

Back to Server.Gumps

+

(AdminGump) - NetStateComparer : IComparer

+ (ctor) NetStateComparer()
+ virtual int Compare( object x, object y )
+ + diff --git a/Docs/types/NetStateCreatedCallback.html b/Docs/types/NetStateCreatedCallback.html new file mode 100644 index 0000000..8f15503 --- /dev/null +++ b/Docs/types/NetStateCreatedCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - NetStateCreatedCallback + + +

Back to Server.Network

+

NetStateCreatedCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) NetStateCreatedCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( NetState ns, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( NetState ns )
+ + diff --git a/Docs/types/NewHousePlacementTarget.html b/Docs/types/NewHousePlacementTarget.html new file mode 100644 index 0000000..4be88db --- /dev/null +++ b/Docs/types/NewHousePlacementTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NewHousePlacementTarget + + +

Back to Server.Items

+

NewHousePlacementTarget : MultiTarget

+ (ctor) NewHousePlacementTarget( HousePlacementEntry[] entries, HousePlacementEntry entry )
+ virtual void OnTarget( Mobile from, object o )
+ virtual void OnTargetFinish( Mobile from )
+ + diff --git a/Docs/types/NewMobileAnimation.html b/Docs/types/NewMobileAnimation.html new file mode 100644 index 0000000..5150179 --- /dev/null +++ b/Docs/types/NewMobileAnimation.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - NewMobileAnimation + + +

Back to Server.Network

+

NewMobileAnimation : Packet

+ (ctor) NewMobileAnimation( Mobile m, int action, int frameCount, int delay )
+ + diff --git a/Docs/types/NewPlayerTicket.html b/Docs/types/NewPlayerTicket.html new file mode 100644 index 0000000..3122146 --- /dev/null +++ b/Docs/types/NewPlayerTicket.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - NewPlayerTicket + + +

Back to Server.Items

+

NewPlayerTicket : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump, InternalTarget

+ (ctor) NewPlayerTicket()
+ (ctor) NewPlayerTicket( Serial serial )
+ bool DisplayLootType( get; )
+ int LabelNumber( get; )
+ Mobile Owner( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NewPlayerVendorCustomizeGump.html b/Docs/types/NewPlayerVendorCustomizeGump.html new file mode 100644 index 0000000..32c5414 --- /dev/null +++ b/Docs/types/NewPlayerVendorCustomizeGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NewPlayerVendorCustomizeGump + + +

Back to Server.Gumps

+

NewPlayerVendorCustomizeGump : Gump

+

Nested Types: HairOrBeard, PVHuePicker

+ (ctor) NewPlayerVendorCustomizeGump( PlayerVendor vendor )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/NewPlayerVendorOwnerGump.html b/Docs/types/NewPlayerVendorOwnerGump.html new file mode 100644 index 0000000..d95f725 --- /dev/null +++ b/Docs/types/NewPlayerVendorOwnerGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NewPlayerVendorOwnerGump + + +

Back to Server.Gumps

+

NewPlayerVendorOwnerGump : Gump

+ (ctor) NewPlayerVendorOwnerGump( PlayerVendor vendor )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/NewPolymorphGump.html b/Docs/types/NewPolymorphGump.html new file mode 100644 index 0000000..19a2f8d --- /dev/null +++ b/Docs/types/NewPolymorphGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NewPolymorphGump + + +

Back to Server.Gumps

+

NewPolymorphGump : Gump

+ (ctor) NewPolymorphGump( Mobile caster, Item scroll )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/NewSpellbookContent.html b/Docs/types/NewSpellbookContent.html new file mode 100644 index 0000000..0dea21f --- /dev/null +++ b/Docs/types/NewSpellbookContent.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - NewSpellbookContent + + +

Back to Server.Network

+

NewSpellbookContent : Packet

+ (ctor) NewSpellbookContent( Item item, int graphic, int offset, ulong content )
+ + diff --git a/Docs/types/NextPointTarget.html b/Docs/types/NextPointTarget.html new file mode 100644 index 0000000..6b2edc5 --- /dev/null +++ b/Docs/types/NextPointTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NextPointTarget + + +

Back to Server.Items

+

NextPointTarget : Target

+ (ctor) NextPointTarget( WayPoint pt )
+ virtual void OnTarget( Mobile from, object target )
+ + diff --git a/Docs/types/NightSightPotion.html b/Docs/types/NightSightPotion.html new file mode 100644 index 0000000..e542c90 --- /dev/null +++ b/Docs/types/NightSightPotion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - NightSightPotion + + +

Back to Server.Items

+

NightSightPotion : BasePotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) NightSightPotion()
+ (ctor) NightSightPotion( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Drink( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NightSightScroll.html b/Docs/types/NightSightScroll.html new file mode 100644 index 0000000..c4336ee --- /dev/null +++ b/Docs/types/NightSightScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - NightSightScroll + + +

Back to Server.Items

+

NightSightScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) NightSightScroll()
+ (ctor) NightSightScroll( int amount )
+ (ctor) NightSightScroll( Serial ser )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NightSightSpell.html b/Docs/types/NightSightSpell.html new file mode 100644 index 0000000..b5ee4a4 --- /dev/null +++ b/Docs/types/NightSightSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - NightSightSpell + + +

Back to Server.Spells.First

+

NightSightSpell : MagerySpell, ISpell

+

Nested Types: NightSightTarget

+ (ctor) NightSightSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/NightSightTarget.html b/Docs/types/NightSightTarget.html new file mode 100644 index 0000000..4585ea1 --- /dev/null +++ b/Docs/types/NightSightTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NightSightTarget + + +

Back to Server.Spells.First

+

(NightSightSpell) - NightSightTarget : Target

+ (ctor) NightSightTarget( Spell spell )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetFinish( Mobile from )
+ + diff --git a/Docs/types/NightSightTimer.html b/Docs/types/NightSightTimer.html new file mode 100644 index 0000000..8d2fd41 --- /dev/null +++ b/Docs/types/NightSightTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NightSightTimer + + +

Back to Server

+

(LightCycle) - NightSightTimer : Timer

+ (ctor) NightSightTimer( Mobile owner )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Nightmare.html b/Docs/types/Nightmare.html new file mode 100644 index 0000000..2726499 --- /dev/null +++ b/Docs/types/Nightmare.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Nightmare + + +

Back to Server.Mobiles

+

Nightmare : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) Nightmare()
+ (ctor) Nightmare( Serial serial )
+ (ctor) Nightmare( string name )
+ bool CanAngerOnTame( get; )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NightsKiss.html b/Docs/types/NightsKiss.html new file mode 100644 index 0000000..a856179 --- /dev/null +++ b/Docs/types/NightsKiss.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - NightsKiss + + +

Back to Server.Items

+

NightsKiss : Dagger, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) NightsKiss()
+ (ctor) NightsKiss( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Nightshade.html b/Docs/types/Nightshade.html new file mode 100644 index 0000000..17559a8 --- /dev/null +++ b/Docs/types/Nightshade.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Nightshade + + +

Back to Server.Items

+

Nightshade : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Nightshade()
+ (ctor) Nightshade( Serial serial )
+ (ctor) Nightshade( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Nightstand.html b/Docs/types/Nightstand.html new file mode 100644 index 0000000..1a9c2e0 --- /dev/null +++ b/Docs/types/Nightstand.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Nightstand + + +

Back to Server.Items

+

Nightstand : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Nightstand()
+ (ctor) Nightstand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ninja.html b/Docs/types/Ninja.html new file mode 100644 index 0000000..27fb7ce --- /dev/null +++ b/Docs/types/Ninja.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Ninja + + +

Back to Server.Mobiles

+

Ninja : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Ninja()
+ (ctor) Ninja( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NinjaMove.html b/Docs/types/NinjaMove.html new file mode 100644 index 0000000..5e24dc7 --- /dev/null +++ b/Docs/types/NinjaMove.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - NinjaMove + + +

Back to Server.Spells

+

NinjaMove : SpecialMove

+

Derived Types: Backstab, DeathStrike, FocusAttack, KiAttack, SurpriseAttack

+ (ctor) NinjaMove()
+ SkillName MoveSkill( get; )
+ virtual void CheckGain( Mobile m )
+ + diff --git a/Docs/types/NinjaSpell.html b/Docs/types/NinjaSpell.html new file mode 100644 index 0000000..ec0d7b1 --- /dev/null +++ b/Docs/types/NinjaSpell.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - NinjaSpell + + +

Back to Server.Spells.Ninjitsu

+

NinjaSpell : Spell, ISpell

+

Derived Types: AnimalForm, MirrorImage, Shadowjump

+ (static) bool CheckExpansion( Mobile from )
+ (ctor) NinjaSpell( Mobile caster, Item scroll, SpellInfo info )
+ bool BlocksMovement( get; )
+ int CastRecoveryBase( get; )
+ SkillName CastSkill( get; )
+ bool ClearHandsOnCast( get; )
+ SkillName DamageSkill( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ bool RevealOnCast( get; )
+ bool ShowHandMovement( get; )
+ virtual bool CheckCast()
+ virtual bool CheckFizzle()
+ virtual void GetCastSkills( out double min, out double max )
+ virtual int GetMana()
+ + diff --git a/Docs/types/NinjaTabi.html b/Docs/types/NinjaTabi.html new file mode 100644 index 0000000..1491237 --- /dev/null +++ b/Docs/types/NinjaTabi.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - NinjaTabi + + +

Back to Server.Items

+

NinjaTabi : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) NinjaTabi()
+ (ctor) NinjaTabi( int hue )
+ (ctor) NinjaTabi( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NinjaWeapon.html b/Docs/types/NinjaWeapon.html new file mode 100644 index 0000000..7ee7a2e --- /dev/null +++ b/Docs/types/NinjaWeapon.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - NinjaWeapon + + +

Back to Server.Items

+

NinjaWeapon

+

Nested Types: LoadEntry, UnloadEntry

+ (static) void AttemptShoot( PlayerMobile from, INinjaWeapon weapon )
+ (static) bool CanUseWeapon( PlayerMobile from, INinjaWeapon weapon )
+ (static) bool CombatCheck( Mobile attacker, Mobile defender )
+ (static) void ConsumeUse( INinjaWeapon weapon )
+ (static) void OnHit( object[] states )
+ (static) void OnTarget( Mobile from, object targeted, INinjaWeapon weapon )
+ (static) void Reload( PlayerMobile from, INinjaWeapon weapon, INinjaAmmo ammo )
+ (static) void ResetUsing( PlayerMobile from )
+ (static) void Shoot( PlayerMobile from, Mobile target, INinjaWeapon weapon )
+ (static) void Unload( Mobile from, INinjaWeapon weapon )
+ (static) bool WeaponIsValid( INinjaWeapon weapon, Mobile from )
+ (ctor) NinjaWeapon()
+ + diff --git a/Docs/types/NoDachi.html b/Docs/types/NoDachi.html new file mode 100644 index 0000000..1694ce7 --- /dev/null +++ b/Docs/types/NoDachi.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - NoDachi + + +

Back to Server.Items

+

NoDachi : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: SwordOfTheStampede, TheDestroyer

+ (ctor) NoDachi()
+ (ctor) NoDachi( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NoHousingRegion.html b/Docs/types/NoHousingRegion.html new file mode 100644 index 0000000..ae43cc5 --- /dev/null +++ b/Docs/types/NoHousingRegion.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NoHousingRegion + + +

Back to Server.Regions

+

NoHousingRegion : BaseRegion, IComparable

+ (ctor) NoHousingRegion( XmlElement xml, Map map, Region parent )
+ bool SmartChecking( get; )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ + diff --git a/Docs/types/NoSheetMusicConversation.html b/Docs/types/NoSheetMusicConversation.html new file mode 100644 index 0000000..5a59f98 --- /dev/null +++ b/Docs/types/NoSheetMusicConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NoSheetMusicConversation + + +

Back to Server.Engines.Quests.Collector

+

NoSheetMusicConversation : QuestConversation

+ (ctor) NoSheetMusicConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/NoSortAttribute.html b/Docs/types/NoSortAttribute.html new file mode 100644 index 0000000..6de5272 --- /dev/null +++ b/Docs/types/NoSortAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - NoSortAttribute + + +

Back to Server

+

NoSortAttribute : Attribute, _Attribute

+ (ctor) NoSortAttribute()
+ + diff --git a/Docs/types/Noble.html b/Docs/types/Noble.html new file mode 100644 index 0000000..6fb428f --- /dev/null +++ b/Docs/types/Noble.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Noble + + +

Back to Server.Mobiles

+

Noble : BaseEscortable, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) int GetRandomHue()
+ (ctor) Noble()
+ (ctor) Noble( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NobleSacrificeSpell.html b/Docs/types/NobleSacrificeSpell.html new file mode 100644 index 0000000..5fefadd --- /dev/null +++ b/Docs/types/NobleSacrificeSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - NobleSacrificeSpell + + +

Back to Server.Spells.Chivalry

+

NobleSacrificeSpell : PaladinSpell, ISpell

+ (ctor) NobleSacrificeSpell( Mobile caster, Item scroll )
+ bool BlocksMovement( get; )
+ TimeSpan CastDelayBase( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/Node.html b/Docs/types/Node.html new file mode 100644 index 0000000..795c12d --- /dev/null +++ b/Docs/types/Node.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Node + + +

Back to Server.Items

+

(ControlPanel) - Node

+ (ctor) Node( int x, int y )
+ int X( get; set; )
+ int Y( get; set; )
+ + diff --git a/Docs/types/NodeHue.html b/Docs/types/NodeHue.html new file mode 100644 index 0000000..fde129f --- /dev/null +++ b/Docs/types/NodeHue.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - NodeHue + + +

Back to Server.Items

+

NodeHue (Enum)

+ Gray = 0,
+ Blue = 1,
+ Red = 2
+ + diff --git a/Docs/types/NorseHelm.html b/Docs/types/NorseHelm.html new file mode 100644 index 0000000..b380ee4 --- /dev/null +++ b/Docs/types/NorseHelm.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - NorseHelm + + +

Back to Server.Items

+

NorseHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) NorseHelm()
+ (ctor) NorseHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NotYetBoundException.html b/Docs/types/NotYetBoundException.html new file mode 100644 index 0000000..8300c5d --- /dev/null +++ b/Docs/types/NotYetBoundException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - NotYetBoundException + + +

Back to Server

+

NotYetBoundException : BindingException, ISerializable, _Exception

+ (ctor) NotYetBoundException( Property property )
+ + diff --git a/Docs/types/NoteForZoel.html b/Docs/types/NoteForZoel.html new file mode 100644 index 0000000..b92854d --- /dev/null +++ b/Docs/types/NoteForZoel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - NoteForZoel + + +

Back to Server.Engines.Quests.Ninja

+

NoteForZoel : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) NoteForZoel()
+ (ctor) NoteForZoel( Serial serial )
+ int LabelNumber( get; )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NoticeGump.html b/Docs/types/NoticeGump.html new file mode 100644 index 0000000..b1d76aa --- /dev/null +++ b/Docs/types/NoticeGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - NoticeGump + + +

Back to Server.Gumps

+

NoticeGump : Gump

+ (ctor) NoticeGump( int header, int headerColor, object content, int contentColor, int width, int height, NoticeGumpCallback callback, object state )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/NoticeGumpCallback.html b/Docs/types/NoticeGumpCallback.html new file mode 100644 index 0000000..ed45576 --- /dev/null +++ b/Docs/types/NoticeGumpCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - NoticeGumpCallback + + +

Back to Server.Gumps

+

NoticeGumpCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) NoticeGumpCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, object state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, object state )
+ + diff --git a/Docs/types/Notoriety.html b/Docs/types/Notoriety.html new file mode 100644 index 0000000..4ed0289 --- /dev/null +++ b/Docs/types/Notoriety.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Notoriety + + +

Back to Server

+

Notoriety

+ (static) NotorietyHandler Handler( get; set; )
+ (static) int[] Hues( get; set; )
+ (static) int Compute( Mobile source, Mobile target )
+ (static) int GetHue( int noto )
+ + diff --git a/Docs/types/NotorietyHandler.html b/Docs/types/NotorietyHandler.html new file mode 100644 index 0000000..673933b --- /dev/null +++ b/Docs/types/NotorietyHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - NotorietyHandler + + +

Back to Server

+

NotorietyHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) NotorietyHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile source, Mobile target, AsyncCallback callback, object object )
+ virtual int EndInvoke( IAsyncResult result )
+ virtual int Invoke( Mobile source, Mobile target )
+ + diff --git a/Docs/types/NotorietyHandlers.html b/Docs/types/NotorietyHandlers.html new file mode 100644 index 0000000..e0f0262 --- /dev/null +++ b/Docs/types/NotorietyHandlers.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - NotorietyHandlers + + +

Back to Server.Misc

+

NotorietyHandlers

+

Nested Types: GuildStatus

+ (static) bool CheckAggressed( List<AggressorInfo> list, Mobile target )
+ (static) bool CheckAggressor( List<AggressorInfo> list, Mobile target )
+ (static) bool CheckBeneficialStatus( GuildStatus from, GuildStatus target )
+ (static) bool CheckHouseFlag( Mobile from, Mobile m, Point3D p, Map map )
+ (static) int CorpseNotoriety( Mobile source, Corpse target )
+ (static) Guild GetGuildFor( Guild def, Mobile m )
+ (static) GuildStatus GetGuildStatus( Mobile m )
+ (static) void Initialize()
+ (static) bool IsPet( BaseCreature c )
+ (static) bool IsSummoned( BaseCreature c )
+ (static) bool Mobile_AllowBeneficial( Mobile from, Mobile target )
+ (static) bool Mobile_AllowHarmful( Mobile from, Mobile target )
+ (static) int MobileNotoriety( Mobile source, Mobile target )
+ (ctor) NotorietyHandlers()
+ + diff --git a/Docs/types/NoxCrystal.html b/Docs/types/NoxCrystal.html new file mode 100644 index 0000000..27b6794 --- /dev/null +++ b/Docs/types/NoxCrystal.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - NoxCrystal + + +

Back to Server.Items

+

NoxCrystal : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) NoxCrystal()
+ (ctor) NoxCrystal( Serial serial )
+ (ctor) NoxCrystal( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NoxRangersHeavyCrossbow.html b/Docs/types/NoxRangersHeavyCrossbow.html new file mode 100644 index 0000000..d723562 --- /dev/null +++ b/Docs/types/NoxRangersHeavyCrossbow.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - NoxRangersHeavyCrossbow + + +

Back to Server.Items

+

NoxRangersHeavyCrossbow : HeavyCrossbow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) NoxRangersHeavyCrossbow()
+ (ctor) NoxRangersHeavyCrossbow( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/NpcGuild.html b/Docs/types/NpcGuild.html new file mode 100644 index 0000000..767e8cf --- /dev/null +++ b/Docs/types/NpcGuild.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - NpcGuild + + +

Back to Server.Mobiles

+

NpcGuild (Enum)

+ None = 0,
+ MagesGuild = 1,
+ WarriorsGuild = 2,
+ ThievesGuild = 3,
+ RangersGuild = 4,
+ HealersGuild = 5,
+ MinersGuild = 6,
+ MerchantsGuild = 7,
+ TinkersGuild = 8,
+ TailorsGuild = 9,
+ FishermensGuild = 10,
+ BardsGuild = 11,
+ BlacksmithsGuild = 12
+ + diff --git a/Docs/types/NullEnumerable.html b/Docs/types/NullEnumerable.html new file mode 100644 index 0000000..12b875e --- /dev/null +++ b/Docs/types/NullEnumerable.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - NullEnumerable + + +

Back to Server

+

(Map) - NullEnumerable : IPooledEnumerable, IEnumerable

+

Nested Types: InternalEnumerator

+ (ctor) NullEnumerable()
+ virtual void Free()
+ virtual IEnumerator GetEnumerator()
+ + diff --git a/Docs/types/NullFastwalkStack.html b/Docs/types/NullFastwalkStack.html new file mode 100644 index 0000000..bbc28e8 --- /dev/null +++ b/Docs/types/NullFastwalkStack.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - NullFastwalkStack + + +

Back to Server.Network

+

NullFastwalkStack : Packet

+ (ctor) NullFastwalkStack()
+ + diff --git a/Docs/types/Nunchaku.html b/Docs/types/Nunchaku.html new file mode 100644 index 0000000..caddd72 --- /dev/null +++ b/Docs/types/Nunchaku.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Nunchaku + + +

Back to Server.Items

+

Nunchaku : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: DragonNunchaku

+ (ctor) Nunchaku()
+ (ctor) Nunchaku( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OPLInfo.html b/Docs/types/OPLInfo.html new file mode 100644 index 0000000..61230e8 --- /dev/null +++ b/Docs/types/OPLInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - OPLInfo + + +

Back to Server

+

OPLInfo : Packet

+ (ctor) OPLInfo( ObjectPropertyList list )
+ + diff --git a/Docs/types/OakBoard.html b/Docs/types/OakBoard.html new file mode 100644 index 0000000..36002fb --- /dev/null +++ b/Docs/types/OakBoard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OakBoard + + +

Back to Server.Items

+

OakBoard : Board, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) OakBoard()
+ (ctor) OakBoard( int amount )
+ (ctor) OakBoard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OakLog.html b/Docs/types/OakLog.html new file mode 100644 index 0000000..19f34cc --- /dev/null +++ b/Docs/types/OakLog.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - OakLog + + +

Back to Server.Items

+

OakLog : Log, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IAxe

+ (ctor) OakLog()
+ (ctor) OakLog( Serial serial )
+ (ctor) OakLog( int amount )
+ virtual bool Axe( Mobile from, BaseAxe axe )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Obelisk.html b/Docs/types/Obelisk.html new file mode 100644 index 0000000..ef926b6 --- /dev/null +++ b/Docs/types/Obelisk.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Obelisk + + +

Back to Server.Items

+

Obelisk : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Obelisk()
+ (ctor) Obelisk( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Obi.html b/Docs/types/Obi.html new file mode 100644 index 0000000..4c1d4ac --- /dev/null +++ b/Docs/types/Obi.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Obi + + +

Back to Server.Items

+

Obi : BaseWaist, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Obi()
+ (ctor) Obi( int hue )
+ (ctor) Obi( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ObjectCollection.html b/Docs/types/ObjectCollection.html new file mode 100644 index 0000000..d80f464 --- /dev/null +++ b/Docs/types/ObjectCollection.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ObjectCollection + + +

Back to Server.Engines.Reports

+

ObjectCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: ObjectCollectionEnumerator

+ (ctor) ObjectCollection()
+ PersistableObject Item( get; set; )
+ int Add( PersistableObject value )
+ void AddRange( PersistableObject[] col )
+ bool Contains( PersistableObject value )
+ ObjectCollectionEnumerator GetEnumerator()
+ int IndexOf( PersistableObject value )
+ void Insert( int index, PersistableObject value )
+ void Remove( PersistableObject value )
+ + diff --git a/Docs/types/ObjectCollectionEnumerator.html b/Docs/types/ObjectCollectionEnumerator.html new file mode 100644 index 0000000..15a8251 --- /dev/null +++ b/Docs/types/ObjectCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ObjectCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(ObjectCollection) - ObjectCollectionEnumerator : IEnumerator

+ (ctor) ObjectCollectionEnumerator( ObjectCollection collection )
+ PersistableObject Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/ObjectConditional.html b/Docs/types/ObjectConditional.html new file mode 100644 index 0000000..f4e2153 --- /dev/null +++ b/Docs/types/ObjectConditional.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ObjectConditional + + +

Back to Server.Commands.Generic

+

ObjectConditional

+ (static) ObjectConditional Parse( Mobile from, ref string[] args )
+ (static) ObjectConditional ParseDirect( Mobile from, string[] args, int offset, int size )
+ (ctor) ObjectConditional( Type objectType, ICondition[][] conditions )
+ bool HasCompiled( get; )
+ bool IsItem( get; )
+ bool IsMobile( get; )
+ Type Type( get; )
+ bool CheckCondition( object obj )
+ void Compile( ref AssemblyEmitter emitter )
+ + diff --git a/Docs/types/ObjectEnumerator.html b/Docs/types/ObjectEnumerator.html new file mode 100644 index 0000000..738b208 --- /dev/null +++ b/Docs/types/ObjectEnumerator.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ObjectEnumerator + + +

Back to Server

+

(Map) - ObjectEnumerator : IPooledEnumerator, IEnumerator, IDisposable

+ (static) ObjectEnumerator Instantiate( Map map, Rectangle2D bounds )
+ (ctor) ObjectEnumerator( Map map, Rectangle2D bounds )
+ object Current( get; )
+ IPooledEnumerable Enumerable( get; set; )
+ virtual void Dispose()
+ virtual void Free()
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/ObjectHelpResponse.html b/Docs/types/ObjectHelpResponse.html new file mode 100644 index 0000000..316f06c --- /dev/null +++ b/Docs/types/ObjectHelpResponse.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ObjectHelpResponse + + +

Back to Server.Network

+

ObjectHelpResponse : Packet

+ (ctor) ObjectHelpResponse( IEntity e, string text )
+ + diff --git a/Docs/types/ObjectPropertyList.html b/Docs/types/ObjectPropertyList.html new file mode 100644 index 0000000..0a9b4a4 --- /dev/null +++ b/Docs/types/ObjectPropertyList.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - ObjectPropertyList + + +

Back to Server

+

ObjectPropertyList : Packet

+ (static) bool Enabled( get; set; )
+ (ctor) ObjectPropertyList( IEntity e )
+ IEntity Entity( get; )
+ int Hash( get; )
+ int Header( get; set; )
+ string HeaderArgs( get; set; )
+ void Add( int number )
+ void Add( string text )
+ void Add( string format, object[] args )
+ void Add( string format, string arg0 )
+ void Add( int number, string arguments )
+ void Add( int number, string format, object[] args )
+ void Add( int number, string format, object arg0 )
+ void Add( string format, string arg0, string arg1 )
+ void Add( string format, string arg0, string arg1, string arg2 )
+ void Add( int number, string format, object arg0, object arg1 )
+ void Add( int number, string format, object arg0, object arg1, object arg2 )
+ void AddHash( int val )
+ int GetStringNumber()
+ void Terminate()
+ + diff --git a/Docs/types/ObjectTypes.html b/Docs/types/ObjectTypes.html new file mode 100644 index 0000000..7afbd54 --- /dev/null +++ b/Docs/types/ObjectTypes.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ObjectTypes + + +

Back to Server.Commands.Generic

+

ObjectTypes (Enum)

+ Both = 0,
+ Items = 1,
+ Mobiles = 2,
+ All = 3
+ + diff --git a/Docs/types/OblivionsNeedle.html b/Docs/types/OblivionsNeedle.html new file mode 100644 index 0000000..7a8dc97 --- /dev/null +++ b/Docs/types/OblivionsNeedle.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - OblivionsNeedle + + +

Back to Server.Items

+

OblivionsNeedle : Dagger, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) OblivionsNeedle()
+ (ctor) OblivionsNeedle( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Obsidian.html b/Docs/types/Obsidian.html new file mode 100644 index 0000000..9417d92 --- /dev/null +++ b/Docs/types/Obsidian.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Obsidian + + +

Back to Server.Engines.Quests.Collector

+

Obsidian : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: DisassembleEntry, InternalTarget

+ (static) string RandomName( Mobile from )
+ (ctor) Obsidian()
+ (ctor) Obsidian( Serial serial )
+ bool ForceShowProperties( get; )
+ int Quantity( get; set; )
+ string StatueName( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OfferContractTarget.html b/Docs/types/OfferContractTarget.html new file mode 100644 index 0000000..d6abeaa --- /dev/null +++ b/Docs/types/OfferContractTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - OfferContractTarget + + +

Back to Server.Gumps

+

(VendorRentalContractGump) - OfferContractTarget : Target

+ (ctor) OfferContractTarget( VendorRentalContract contract )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType )
+ + diff --git a/Docs/types/OfferExpireTimer.html b/Docs/types/OfferExpireTimer.html new file mode 100644 index 0000000..8f26c7b --- /dev/null +++ b/Docs/types/OfferExpireTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OfferExpireTimer + + +

Back to Server.Items

+

(VendorRentalContract) - OfferExpireTimer : Timer

+ (ctor) OfferExpireTimer( VendorRentalContract contract )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Ogre.html b/Docs/types/Ogre.html new file mode 100644 index 0000000..9580262 --- /dev/null +++ b/Docs/types/Ogre.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Ogre + + +

Back to Server.Mobiles

+

Ogre : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Ogre()
+ (ctor) Ogre( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OgreLord.html b/Docs/types/OgreLord.html new file mode 100644 index 0000000..7908989 --- /dev/null +++ b/Docs/types/OgreLord.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - OgreLord + + +

Back to Server.Mobiles

+

OgreLord : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OgreLord()
+ (ctor) OgreLord( Serial serial )
+ bool CanRummageCorpses( get; )
+ Ethic EthicAllegiance( get; )
+ Faction FactionAllegiance( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OilCloth.html b/Docs/types/OilCloth.html new file mode 100644 index 0000000..356c83b --- /dev/null +++ b/Docs/types/OilCloth.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - OilCloth + + +

Back to Server.Items

+

OilCloth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IDyable

+ (ctor) OilCloth()
+ (ctor) OilCloth( Serial serial )
+ double DefaultWeight( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnDoubleClick( Mobile from )
+ void OnTarget( Mobile from, object obj )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OldClientResponse.html b/Docs/types/OldClientResponse.html new file mode 100644 index 0000000..0381bf2 --- /dev/null +++ b/Docs/types/OldClientResponse.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OldClientResponse + + +

Back to Server.Misc

+

OldClientResponse (Enum)

+ Ignore = 0,
+ Warn = 1,
+ Annoy = 2,
+ LenientKick = 3,
+ Kick = 4
+ + diff --git a/Docs/types/OnChatAction.html b/Docs/types/OnChatAction.html new file mode 100644 index 0000000..56fe921 --- /dev/null +++ b/Docs/types/OnChatAction.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnChatAction + + +

Back to Server.Engines.Chat

+

OnChatAction : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnChatAction( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ChatUser from, Channel channel, string param, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ChatUser from, Channel channel, string param )
+ + diff --git a/Docs/types/OnConsoleChar.html b/Docs/types/OnConsoleChar.html new file mode 100644 index 0000000..8c61d79 --- /dev/null +++ b/Docs/types/OnConsoleChar.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnConsoleChar + + +

Back to Server.RemoteAdmin

+

(EventTextWriter) - OnConsoleChar : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnConsoleChar( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( char ch, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( char ch )
+ + diff --git a/Docs/types/OnConsoleLine.html b/Docs/types/OnConsoleLine.html new file mode 100644 index 0000000..307fb97 --- /dev/null +++ b/Docs/types/OnConsoleLine.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnConsoleLine + + +

Back to Server.RemoteAdmin

+

(EventTextWriter) - OnConsoleLine : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnConsoleLine( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( string line, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( string line )
+ + diff --git a/Docs/types/OnConsoleStr.html b/Docs/types/OnConsoleStr.html new file mode 100644 index 0000000..f91d0f9 --- /dev/null +++ b/Docs/types/OnConsoleStr.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnConsoleStr + + +

Back to Server.RemoteAdmin

+

(EventTextWriter) - OnConsoleStr : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnConsoleStr( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( string str, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( string str )
+ + diff --git a/Docs/types/OnEncodedPacketReceive.html b/Docs/types/OnEncodedPacketReceive.html new file mode 100644 index 0000000..c3e3865 --- /dev/null +++ b/Docs/types/OnEncodedPacketReceive.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnEncodedPacketReceive + + +

Back to Server.Network

+

OnEncodedPacketReceive : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnEncodedPacketReceive( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( NetState state, IEntity ent, EncodedReader pvSrc, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( NetState state, IEntity ent, EncodedReader pvSrc )
+ + diff --git a/Docs/types/OnItemConsumed.html b/Docs/types/OnItemConsumed.html new file mode 100644 index 0000000..c03e604 --- /dev/null +++ b/Docs/types/OnItemConsumed.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnItemConsumed + + +

Back to Server.Items

+

OnItemConsumed : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnItemConsumed( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Item item, int amount, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Item item, int amount )
+ + diff --git a/Docs/types/OnMahjongPacketReceive.html b/Docs/types/OnMahjongPacketReceive.html new file mode 100644 index 0000000..b2c8f97 --- /dev/null +++ b/Docs/types/OnMahjongPacketReceive.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnMahjongPacketReceive + + +

Back to Server.Engines.Mahjong

+

OnMahjongPacketReceive : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnMahjongPacketReceive( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( MahjongGame game, NetState state, PacketReader pvSrc, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( MahjongGame game, NetState state, PacketReader pvSrc )
+ + diff --git a/Docs/types/OnOffGump.html b/Docs/types/OnOffGump.html new file mode 100644 index 0000000..82047b2 --- /dev/null +++ b/Docs/types/OnOffGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OnOffGump + + +

Back to Server.Items

+

(MonsterStatuette) - OnOffGump : Gump

+ (ctor) OnOffGump( MonsterStatuette statuette )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/OnPacketReceive.html b/Docs/types/OnPacketReceive.html new file mode 100644 index 0000000..fc0b91c --- /dev/null +++ b/Docs/types/OnPacketReceive.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnPacketReceive + + +

Back to Server.Network

+

OnPacketReceive : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnPacketReceive( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( NetState state, PacketReader pvSrc, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( NetState state, PacketReader pvSrc )
+ + diff --git a/Docs/types/OnVirtueUsed.html b/Docs/types/OnVirtueUsed.html new file mode 100644 index 0000000..3a59a73 --- /dev/null +++ b/Docs/types/OnVirtueUsed.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OnVirtueUsed + + +

Back to Server

+

OnVirtueUsed : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OnVirtueUsed( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from )
+ + diff --git a/Docs/types/Oni.html b/Docs/types/Oni.html new file mode 100644 index 0000000..885f6ec --- /dev/null +++ b/Docs/types/Oni.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Oni + + +

Back to Server.Mobiles

+

Oni : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Oni()
+ (ctor) Oni( Serial serial )
+ bool CanRummageCorpses( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Onion.html b/Docs/types/Onion.html new file mode 100644 index 0000000..757ab41 --- /dev/null +++ b/Docs/types/Onion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Onion + + +

Back to Server.Items

+

Onion : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Onion()
+ (ctor) Onion( int amount )
+ (ctor) Onion( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OnlineCommandImplementor.html b/Docs/types/OnlineCommandImplementor.html new file mode 100644 index 0000000..7e8410f --- /dev/null +++ b/Docs/types/OnlineCommandImplementor.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OnlineCommandImplementor + + +

Back to Server.Commands.Generic

+

OnlineCommandImplementor : BaseCommandImplementor

+ (ctor) OnlineCommandImplementor()
+ virtual void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj )
+ + diff --git a/Docs/types/OpenBackpackEntry.html b/Docs/types/OpenBackpackEntry.html new file mode 100644 index 0000000..bb05fe9 --- /dev/null +++ b/Docs/types/OpenBackpackEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OpenBackpackEntry + + +

Back to Server.ContextMenus

+

OpenBackpackEntry : ContextMenuEntry

+ (ctor) OpenBackpackEntry( Mobile m )
+ virtual void OnClick()
+ + diff --git a/Docs/types/OpenBankEntry.html b/Docs/types/OpenBankEntry.html new file mode 100644 index 0000000..757bfae --- /dev/null +++ b/Docs/types/OpenBankEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OpenBankEntry + + +

Back to Server.ContextMenus

+

OpenBankEntry : ContextMenuEntry

+ (ctor) OpenBankEntry( Mobile from, Mobile banker )
+ virtual void OnClick()
+ + diff --git a/Docs/types/OpenBrowserCommand.html b/Docs/types/OpenBrowserCommand.html new file mode 100644 index 0000000..fcc8804 --- /dev/null +++ b/Docs/types/OpenBrowserCommand.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - OpenBrowserCommand + + +

Back to Server.Commands.Generic

+

OpenBrowserCommand : BaseCommand

+ (static) void OpenBrowser_Callback( Mobile from, bool okay, object state )
+ (ctor) OpenBrowserCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/OpenCoconut.html b/Docs/types/OpenCoconut.html new file mode 100644 index 0000000..2fc24fe --- /dev/null +++ b/Docs/types/OpenCoconut.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OpenCoconut + + +

Back to Server.Items

+

OpenCoconut : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OpenCoconut()
+ (ctor) OpenCoconut( int amount )
+ (ctor) OpenCoconut( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OpenCorpseEntry.html b/Docs/types/OpenCorpseEntry.html new file mode 100644 index 0000000..7ac30cb --- /dev/null +++ b/Docs/types/OpenCorpseEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OpenCorpseEntry + + +

Back to Server.Items

+

(Corpse) - OpenCorpseEntry : ContextMenuEntry

+ (ctor) OpenCorpseEntry()
+ virtual void OnClick()
+ + diff --git a/Docs/types/OpenDoorMacroEventArgs.html b/Docs/types/OpenDoorMacroEventArgs.html new file mode 100644 index 0000000..a3682be --- /dev/null +++ b/Docs/types/OpenDoorMacroEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OpenDoorMacroEventArgs + + +

Back to Server

+

OpenDoorMacroEventArgs : EventArgs

+ (ctor) OpenDoorMacroEventArgs( Mobile mobile )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/OpenDoorMacroEventHandler.html b/Docs/types/OpenDoorMacroEventHandler.html new file mode 100644 index 0000000..c773a65 --- /dev/null +++ b/Docs/types/OpenDoorMacroEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OpenDoorMacroEventHandler + + +

Back to Server

+

OpenDoorMacroEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OpenDoorMacroEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( OpenDoorMacroEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( OpenDoorMacroEventArgs e )
+ + diff --git a/Docs/types/OpenMapEntry.html b/Docs/types/OpenMapEntry.html new file mode 100644 index 0000000..3df42d4 --- /dev/null +++ b/Docs/types/OpenMapEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OpenMapEntry + + +

Back to Server.Items

+

(TreasureMap) - OpenMapEntry : ContextMenuEntry

+ (ctor) OpenMapEntry( TreasureMap map )
+ virtual void OnClick()
+ + diff --git a/Docs/types/OpenSpellbookRequestEventArgs.html b/Docs/types/OpenSpellbookRequestEventArgs.html new file mode 100644 index 0000000..a12fa32 --- /dev/null +++ b/Docs/types/OpenSpellbookRequestEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - OpenSpellbookRequestEventArgs + + +

Back to Server

+

OpenSpellbookRequestEventArgs : EventArgs

+ (ctor) OpenSpellbookRequestEventArgs( Mobile m, int type )
+ Mobile Mobile( get; )
+ int Type( get; )
+ + diff --git a/Docs/types/OpenSpellbookRequestEventHandler.html b/Docs/types/OpenSpellbookRequestEventHandler.html new file mode 100644 index 0000000..8ab46a1 --- /dev/null +++ b/Docs/types/OpenSpellbookRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OpenSpellbookRequestEventHandler + + +

Back to Server

+

OpenSpellbookRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) OpenSpellbookRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( OpenSpellbookRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( OpenSpellbookRequestEventArgs e )
+ + diff --git a/Docs/types/OphidianArchmage.html b/Docs/types/OphidianArchmage.html new file mode 100644 index 0000000..25fcd7d --- /dev/null +++ b/Docs/types/OphidianArchmage.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - OphidianArchmage + + +

Back to Server.Mobiles

+

OphidianArchmage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OphidianArchmage()
+ (ctor) OphidianArchmage( Serial serial )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OphidianKnight.html b/Docs/types/OphidianKnight.html new file mode 100644 index 0000000..abf54ca --- /dev/null +++ b/Docs/types/OphidianKnight.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - OphidianKnight + + +

Back to Server.Mobiles

+

OphidianKnight : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OphidianKnight()
+ (ctor) OphidianKnight( Serial serial )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OphidianMage.html b/Docs/types/OphidianMage.html new file mode 100644 index 0000000..288a672 --- /dev/null +++ b/Docs/types/OphidianMage.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - OphidianMage + + +

Back to Server.Mobiles

+

OphidianMage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OphidianMage()
+ (ctor) OphidianMage( Serial serial )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OphidianMatriarch.html b/Docs/types/OphidianMatriarch.html new file mode 100644 index 0000000..ce2a880 --- /dev/null +++ b/Docs/types/OphidianMatriarch.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - OphidianMatriarch + + +

Back to Server.Mobiles

+

OphidianMatriarch : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OphidianMatriarch()
+ (ctor) OphidianMatriarch( Serial serial )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OphidianWarrior.html b/Docs/types/OphidianWarrior.html new file mode 100644 index 0000000..17a5b57 --- /dev/null +++ b/Docs/types/OphidianWarrior.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - OphidianWarrior + + +

Back to Server.Mobiles

+

OphidianWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OphidianWarrior()
+ (ctor) OphidianWarrior( Serial serial )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OppositionGroup.html b/Docs/types/OppositionGroup.html new file mode 100644 index 0000000..d0005fb --- /dev/null +++ b/Docs/types/OppositionGroup.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - OppositionGroup + + +

Back to Server

+

OppositionGroup

+ (static) OppositionGroup FeyAndUndead( get; )
+ (static) OppositionGroup SavagesAndOrcs( get; )
+ (static) OppositionGroup TerathansAndOphidians( get; )
+ (ctor) OppositionGroup( Type[][] types )
+ int IndexOf( object obj )
+ bool IsEnemy( object from, object target )
+ + diff --git a/Docs/types/OrangePetals.html b/Docs/types/OrangePetals.html new file mode 100644 index 0000000..1ba8107 --- /dev/null +++ b/Docs/types/OrangePetals.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - OrangePetals + + +

Back to Server.Items

+

OrangePetals : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: OrangePetalsContext, OrangePetalsTimer

+ (static) void AddContext( Mobile m, OrangePetalsContext context )
+ (static) OrangePetalsContext GetContext( Mobile m )
+ (static) void RemoveContext( Mobile m )
+ (static) void RemoveContext( Mobile m, OrangePetalsContext context )
+ (static) bool UnderEffect( Mobile m )
+ (ctor) OrangePetals()
+ (ctor) OrangePetals( int amount )
+ (ctor) OrangePetals( Serial serial )
+ double DefaultWeight( get; )
+ int LabelNumber( get; )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrangePetalsContext.html b/Docs/types/OrangePetalsContext.html new file mode 100644 index 0000000..20db312 --- /dev/null +++ b/Docs/types/OrangePetalsContext.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OrangePetalsContext + + +

Back to Server.Items

+

(OrangePetals) - OrangePetalsContext

+ (ctor) OrangePetalsContext( Timer timer )
+ Timer Timer( get; )
+ + diff --git a/Docs/types/OrangePetalsTimer.html b/Docs/types/OrangePetalsTimer.html new file mode 100644 index 0000000..71d0d21 --- /dev/null +++ b/Docs/types/OrangePetalsTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - OrangePetalsTimer + + +

Back to Server.Items

+

(OrangePetals) - OrangePetalsTimer : Timer

+ (ctor) OrangePetalsTimer( Mobile from )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Orc.html b/Docs/types/Orc.html new file mode 100644 index 0000000..05ebc7d --- /dev/null +++ b/Docs/types/Orc.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Orc + + +

Back to Server.Mobiles

+

Orc : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Orc()
+ (ctor) Orc( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ InhumanSpeech SpeechType( get; )
+ int TreasureMapLevel( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrcBomber.html b/Docs/types/OrcBomber.html new file mode 100644 index 0000000..91d4c48 --- /dev/null +++ b/Docs/types/OrcBomber.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - OrcBomber + + +

Back to Server.Mobiles

+

OrcBomber : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: InternalTimer

+ (ctor) OrcBomber()
+ (ctor) OrcBomber( Serial serial )
+ bool CanRummageCorpses( get; )
+ OppositionGroup OppositionGroup( get; )
+ InhumanSpeech SpeechType( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnActionCombat()
+ virtual void Serialize( GenericWriter writer )
+ void ThrowBomb( Mobile m )
+ + diff --git a/Docs/types/OrcBrute.html b/Docs/types/OrcBrute.html new file mode 100644 index 0000000..eefce0c --- /dev/null +++ b/Docs/types/OrcBrute.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - OrcBrute + + +

Back to Server.Mobiles

+

OrcBrute : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OrcBrute()
+ (ctor) OrcBrute( Serial serial )
+ bool AutoDispel( get; )
+ bool BardImmune( get; )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnDamagedBySpell( Mobile caster )
+ virtual void Serialize( GenericWriter writer )
+ void SpawnOrcLord( Mobile target )
+ + diff --git a/Docs/types/OrcCamp.html b/Docs/types/OrcCamp.html new file mode 100644 index 0000000..2f134a9 --- /dev/null +++ b/Docs/types/OrcCamp.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - OrcCamp + + +

Back to Server.Multis

+

OrcCamp : BaseCamp, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrcCamp()
+ (ctor) OrcCamp( Serial serial )
+ Mobile Orcs( get; )
+ void AddCampChests()
+ virtual void AddComponents()
+ virtual void AddItem( Item item, int xOffset, int yOffset, int zOffset )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrcCaptain.html b/Docs/types/OrcCaptain.html new file mode 100644 index 0000000..a8b92b2 --- /dev/null +++ b/Docs/types/OrcCaptain.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - OrcCaptain + + +

Back to Server.Mobiles

+

OrcCaptain : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OrcCaptain()
+ (ctor) OrcCaptain( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ InhumanSpeech SpeechType( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrcChieftainHelm.html b/Docs/types/OrcChieftainHelm.html new file mode 100644 index 0000000..1547958 --- /dev/null +++ b/Docs/types/OrcChieftainHelm.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - OrcChieftainHelm + + +

Back to Server.Items

+

OrcChieftainHelm : OrcHelm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) OrcChieftainHelm()
+ (ctor) OrcChieftainHelm( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrcHelm.html b/Docs/types/OrcHelm.html new file mode 100644 index 0000000..772b816 --- /dev/null +++ b/Docs/types/OrcHelm.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - OrcHelm + + +

Back to Server.Items

+

OrcHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: OrcChieftainHelm, OrcishVisage

+ (ctor) OrcHelm()
+ (ctor) OrcHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ double DefaultWeight( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrcishKinMask.html b/Docs/types/OrcishKinMask.html new file mode 100644 index 0000000..a112828 --- /dev/null +++ b/Docs/types/OrcishKinMask.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - OrcishKinMask + + +

Back to Server.Items

+

OrcishKinMask : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) OrcishKinMask()
+ (ctor) OrcishKinMask( int hue )
+ (ctor) OrcishKinMask( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ string DefaultName( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual bool CanEquip( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnAdded( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrcishLord.html b/Docs/types/OrcishLord.html new file mode 100644 index 0000000..3ff3186 --- /dev/null +++ b/Docs/types/OrcishLord.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - OrcishLord + + +

Back to Server.Mobiles

+

OrcishLord : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Derived Types: SpawnedOrcishLord

+ (ctor) OrcishLord()
+ (ctor) OrcishLord( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ InhumanSpeech SpeechType( get; )
+ int TreasureMapLevel( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrcishMage.html b/Docs/types/OrcishMage.html new file mode 100644 index 0000000..cd41932 --- /dev/null +++ b/Docs/types/OrcishMage.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - OrcishMage + + +

Back to Server.Mobiles

+

OrcishMage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OrcishMage()
+ (ctor) OrcishMage( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ InhumanSpeech SpeechType( get; )
+ int TreasureMapLevel( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrcishVisage.html b/Docs/types/OrcishVisage.html new file mode 100644 index 0000000..eb47b04 --- /dev/null +++ b/Docs/types/OrcishVisage.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - OrcishVisage + + +

Back to Server.Items

+

OrcishVisage : OrcHelm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) OrcishVisage()
+ (ctor) OrcishVisage( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrderGuard.html b/Docs/types/OrderGuard.html new file mode 100644 index 0000000..dd547ed --- /dev/null +++ b/Docs/types/OrderGuard.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - OrderGuard + + +

Back to Server.Mobiles

+

OrderGuard : BaseShieldGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) OrderGuard()
+ (ctor) OrderGuard( Serial serial )
+ bool BardImmune( get; )
+ int Keyword( get; )
+ BaseShield Shield( get; )
+ int SignupNumber( get; )
+ GuildType Type( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrderInfo.html b/Docs/types/OrderInfo.html new file mode 100644 index 0000000..192f41b --- /dev/null +++ b/Docs/types/OrderInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrderInfo + + +

Back to Server.Commands.Generic

+

OrderInfo

+ (ctor) OrderInfo( Property property, bool isAscending )
+ bool IsAscending( get; set; )
+ bool IsDescending( get; set; )
+ Property Property( get; set; )
+ int Sign( get; set; )
+ + diff --git a/Docs/types/OrderShield.html b/Docs/types/OrderShield.html new file mode 100644 index 0000000..b9fa4d0 --- /dev/null +++ b/Docs/types/OrderShield.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - OrderShield + + +

Back to Server.Items

+

OrderShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: ShieldOfInvulnerability

+ (ctor) OrderShield()
+ (ctor) OrderShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnEquip( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool Validate( Mobile m )
+ + diff --git a/Docs/types/OrderType.html b/Docs/types/OrderType.html new file mode 100644 index 0000000..088f3c8 --- /dev/null +++ b/Docs/types/OrderType.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - OrderType + + +

Back to Server.Mobiles

+

OrderType (Enum)

+ None = 0,
+ Come = 1,
+ Drop = 2,
+ Follow = 3,
+ Friend = 4,
+ Unfriend = 5,
+ Guard = 6,
+ Attack = 7,
+ Patrol = 8,
+ Release = 9,
+ Stay = 10,
+ Stop = 11,
+ Transfer = 12
+ + diff --git a/Docs/types/Orders.html b/Docs/types/Orders.html new file mode 100644 index 0000000..00f2934 --- /dev/null +++ b/Docs/types/Orders.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Orders + + +

Back to Server.Factions.AI

+

Orders

+ (ctor) Orders( BaseFactionGuard guard )
+ (ctor) Orders( BaseFactionGuard guard, GenericReader reader )
+ Mobile Follow( get; set; )
+ BaseFactionGuard Guard( get; )
+ MovementType Movement( get; set; )
+ Reaction GetReaction( Faction faction )
+ void Serialize( GenericWriter writer )
+ void SetReaction( Faction faction, ReactionType type )
+ + diff --git a/Docs/types/OreInfo.html b/Docs/types/OreInfo.html new file mode 100644 index 0000000..61872a1 --- /dev/null +++ b/Docs/types/OreInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OreInfo + + +

Back to Server.Items

+

OreInfo

+ (ctor) OreInfo( int level, int hue, string name )
+ int Hue( get; )
+ int Level( get; )
+ string Name( get; )
+ + diff --git a/Docs/types/OrigamiButterfly.html b/Docs/types/OrigamiButterfly.html new file mode 100644 index 0000000..3598d3c --- /dev/null +++ b/Docs/types/OrigamiButterfly.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrigamiButterfly + + +

Back to Server.Items

+

OrigamiButterfly : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrigamiButterfly()
+ (ctor) OrigamiButterfly( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrigamiFish.html b/Docs/types/OrigamiFish.html new file mode 100644 index 0000000..6248f1f --- /dev/null +++ b/Docs/types/OrigamiFish.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrigamiFish + + +

Back to Server.Items

+

OrigamiFish : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrigamiFish()
+ (ctor) OrigamiFish( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrigamiFrog.html b/Docs/types/OrigamiFrog.html new file mode 100644 index 0000000..65815e8 --- /dev/null +++ b/Docs/types/OrigamiFrog.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrigamiFrog + + +

Back to Server.Items

+

OrigamiFrog : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrigamiFrog()
+ (ctor) OrigamiFrog( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrigamiPaper.html b/Docs/types/OrigamiPaper.html new file mode 100644 index 0000000..de7e7c6 --- /dev/null +++ b/Docs/types/OrigamiPaper.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - OrigamiPaper + + +

Back to Server.Items

+

OrigamiPaper : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrigamiPaper()
+ (ctor) OrigamiPaper( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrigamiShape.html b/Docs/types/OrigamiShape.html new file mode 100644 index 0000000..a55ba88 --- /dev/null +++ b/Docs/types/OrigamiShape.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrigamiShape + + +

Back to Server.Items

+

OrigamiShape : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrigamiShape()
+ (ctor) OrigamiShape( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrigamiSongbird.html b/Docs/types/OrigamiSongbird.html new file mode 100644 index 0000000..582f2db --- /dev/null +++ b/Docs/types/OrigamiSongbird.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrigamiSongbird + + +

Back to Server.Items

+

OrigamiSongbird : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrigamiSongbird()
+ (ctor) OrigamiSongbird( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrigamiSwan.html b/Docs/types/OrigamiSwan.html new file mode 100644 index 0000000..03c321b --- /dev/null +++ b/Docs/types/OrigamiSwan.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrigamiSwan + + +

Back to Server.Items

+

OrigamiSwan : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrigamiSwan()
+ (ctor) OrigamiSwan( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ornament.html b/Docs/types/Ornament.html new file mode 100644 index 0000000..29739da --- /dev/null +++ b/Docs/types/Ornament.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Ornament + + +

Back to Server.Items

+

(HolidayTree) - Ornament : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Ornament( int itemID )
+ (ctor) Ornament( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnamentOfTheMagician.html b/Docs/types/OrnamentOfTheMagician.html new file mode 100644 index 0000000..6758dc0 --- /dev/null +++ b/Docs/types/OrnamentOfTheMagician.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - OrnamentOfTheMagician + + +

Back to Server.Items

+

OrnamentOfTheMagician : GoldBracelet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) OrnamentOfTheMagician()
+ (ctor) OrnamentOfTheMagician( Serial serial )
+ int ArtifactRarity( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnateAxe.html b/Docs/types/OrnateAxe.html new file mode 100644 index 0000000..555fba5 --- /dev/null +++ b/Docs/types/OrnateAxe.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - OrnateAxe + + +

Back to Server.Items

+

OrnateAxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: TalonBite

+ (ctor) OrnateAxe()
+ (ctor) OrnateAxe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnateCrownOfTheHarrower.html b/Docs/types/OrnateCrownOfTheHarrower.html new file mode 100644 index 0000000..1f98084 --- /dev/null +++ b/Docs/types/OrnateCrownOfTheHarrower.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - OrnateCrownOfTheHarrower + + +

Back to Server.Items

+

OrnateCrownOfTheHarrower : BoneHelm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) OrnateCrownOfTheHarrower()
+ (ctor) OrnateCrownOfTheHarrower( Serial serial )
+ int ArtifactRarity( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnateElvenChair.html b/Docs/types/OrnateElvenChair.html new file mode 100644 index 0000000..0d1eef6 --- /dev/null +++ b/Docs/types/OrnateElvenChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OrnateElvenChair + + +

Back to Server.Items

+

OrnateElvenChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrnateElvenChair()
+ (ctor) OrnateElvenChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnateElvenTableEastAddon.html b/Docs/types/OrnateElvenTableEastAddon.html new file mode 100644 index 0000000..058fd33 --- /dev/null +++ b/Docs/types/OrnateElvenTableEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrnateElvenTableEastAddon + + +

Back to Server.Items

+

OrnateElvenTableEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) OrnateElvenTableEastAddon()
+ (ctor) OrnateElvenTableEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnateElvenTableEastDeed.html b/Docs/types/OrnateElvenTableEastDeed.html new file mode 100644 index 0000000..a5719dc --- /dev/null +++ b/Docs/types/OrnateElvenTableEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - OrnateElvenTableEastDeed + + +

Back to Server.Items

+

OrnateElvenTableEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrnateElvenTableEastDeed()
+ (ctor) OrnateElvenTableEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnateElvenTableSouthAddon.html b/Docs/types/OrnateElvenTableSouthAddon.html new file mode 100644 index 0000000..a3612f3 --- /dev/null +++ b/Docs/types/OrnateElvenTableSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OrnateElvenTableSouthAddon + + +

Back to Server.Items

+

OrnateElvenTableSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) OrnateElvenTableSouthAddon()
+ (ctor) OrnateElvenTableSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnateElvenTableSouthDeed.html b/Docs/types/OrnateElvenTableSouthDeed.html new file mode 100644 index 0000000..27c4fb6 --- /dev/null +++ b/Docs/types/OrnateElvenTableSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - OrnateElvenTableSouthDeed + + +

Back to Server.Items

+

OrnateElvenTableSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) OrnateElvenTableSouthDeed()
+ (ctor) OrnateElvenTableSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OrnateWoodenChest.html b/Docs/types/OrnateWoodenChest.html new file mode 100644 index 0000000..7976d60 --- /dev/null +++ b/Docs/types/OrnateWoodenChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - OrnateWoodenChest + + +

Back to Server.Items

+

OrnateWoodenChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) OrnateWoodenChest()
+ (ctor) OrnateWoodenChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OssianGrimoire.html b/Docs/types/OssianGrimoire.html new file mode 100644 index 0000000..c742fbc --- /dev/null +++ b/Docs/types/OssianGrimoire.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OssianGrimoire + + +

Back to Server.Items

+

OssianGrimoire : NecromancerSpellbook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer, ITokunoDyable

+ (ctor) OssianGrimoire()
+ (ctor) OssianGrimoire( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/OtherGuildInfo.html b/Docs/types/OtherGuildInfo.html new file mode 100644 index 0000000..347f8de --- /dev/null +++ b/Docs/types/OtherGuildInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - OtherGuildInfo + + +

Back to Server.Guilds

+

OtherGuildInfo : BaseGuildGump

+ (ctor) OtherGuildInfo( PlayerMobile pm, Guild g, Guild otherGuild )
+ void AddButtonAndBackground( int x, int y, int buttonID, int locNum )
+ void CreateAlliance_Callback( Mobile from, string text )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ virtual void PopulateGump()
+ + diff --git a/Docs/types/OverseerSunderedBlade.html b/Docs/types/OverseerSunderedBlade.html new file mode 100644 index 0000000..2ee2f5c --- /dev/null +++ b/Docs/types/OverseerSunderedBlade.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - OverseerSunderedBlade + + +

Back to Server.Items

+

OverseerSunderedBlade : RadiantScimitar, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) OverseerSunderedBlade()
+ (ctor) OverseerSunderedBlade( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PMEntry.html b/Docs/types/PMEntry.html new file mode 100644 index 0000000..7f6c33d --- /dev/null +++ b/Docs/types/PMEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PMEntry + + +

Back to Server.Items

+

PMEntry

+ (ctor) PMEntry( Point3D loc, int number )
+ Point3D Location( get; )
+ int Number( get; )
+ + diff --git a/Docs/types/PMList.html b/Docs/types/PMList.html new file mode 100644 index 0000000..834a791 --- /dev/null +++ b/Docs/types/PMList.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PMList + + +

Back to Server.Items

+

PMList

+ (ctor) PMList( int number, int selNumber, Map map, PMEntry[] entries )
+ PMEntry[] Entries( get; )
+ Map Map( get; )
+ int Number( get; )
+ int SelNumber( get; )
+ + diff --git a/Docs/types/PMMessage.html b/Docs/types/PMMessage.html new file mode 100644 index 0000000..a9c9745 --- /dev/null +++ b/Docs/types/PMMessage.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PMMessage + + +

Back to Server.Network

+

PMMessage (Enum)

+ CharNoExist = 1,
+ CharExists = 2,
+ CharInWorld = 5,
+ LoginSyncError = 6,
+ IdleWarning = 7
+ + diff --git a/Docs/types/PVBuyTarget.html b/Docs/types/PVBuyTarget.html new file mode 100644 index 0000000..5bc2733 --- /dev/null +++ b/Docs/types/PVBuyTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PVBuyTarget + + +

Back to Server.Mobiles

+

(PlayerVendor) - PVBuyTarget : Target

+ (ctor) PVBuyTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/PVHuePicker.html b/Docs/types/PVHuePicker.html new file mode 100644 index 0000000..14b29c0 --- /dev/null +++ b/Docs/types/PVHuePicker.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PVHuePicker + + +

Back to Server.Gumps

+

(PlayerVendorCustomizeGump) - PVHuePicker : HuePicker

+ (ctor) PVHuePicker( Item item, Mobile v, Mobile from )
+ virtual void OnResponse( int hue )
+ + diff --git a/Docs/types/Pacify.html b/Docs/types/Pacify.html new file mode 100644 index 0000000..30a5f07 --- /dev/null +++ b/Docs/types/Pacify.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Pacify + + +

Back to Server.Items

+

Pacify : Pike, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Pacify()
+ (ctor) Pacify( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PackAnimal.html b/Docs/types/PackAnimal.html new file mode 100644 index 0000000..07ca86b --- /dev/null +++ b/Docs/types/PackAnimal.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PackAnimal + + +

Back to Server.Mobiles

+

PackAnimal

+ (static) bool CheckAccess( BaseCreature animal, Mobile from )
+ (static) void CombineBackpacks( BaseCreature animal )
+ (static) void GetContextMenuEntries( BaseCreature animal, Mobile from, List<ContextMenuEntry> list )
+ (static) void TryPackOpen( BaseCreature animal, Mobile from )
+ (ctor) PackAnimal()
+ + diff --git a/Docs/types/PackAnimalBackpackEntry.html b/Docs/types/PackAnimalBackpackEntry.html new file mode 100644 index 0000000..7a0b8de --- /dev/null +++ b/Docs/types/PackAnimalBackpackEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PackAnimalBackpackEntry + + +

Back to Server.Mobiles

+

PackAnimalBackpackEntry : ContextMenuEntry

+ (ctor) PackAnimalBackpackEntry( BaseCreature animal, Mobile from )
+ virtual void OnClick()
+ + diff --git a/Docs/types/PackHorse.html b/Docs/types/PackHorse.html new file mode 100644 index 0000000..000d185 --- /dev/null +++ b/Docs/types/PackHorse.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PackHorse + + +

Back to Server.Mobiles

+

PackHorse : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) PackHorse()
+ (ctor) PackHorse( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target )
+ virtual bool CheckNonlocalLift( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual DeathMoveResult GetInventoryMoveResultFor( Item item )
+ virtual bool IsSnoop( Mobile from )
+ virtual bool OnBeforeDeath()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item item )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PackInstinct.html b/Docs/types/PackInstinct.html new file mode 100644 index 0000000..52e367a --- /dev/null +++ b/Docs/types/PackInstinct.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PackInstinct + + +

Back to Server.Mobiles

+

PackInstinct (Enum)

+ None = 0x00000000,
+ Canine = 0x00000001,
+ Ostard = 0x00000002,
+ Feline = 0x00000004,
+ Arachnid = 0x00000008,
+ Daemon = 0x00000010,
+ Bear = 0x00000020,
+ Equine = 0x00000040,
+ Bull = 0x00000080
+ + diff --git a/Docs/types/PackLlama.html b/Docs/types/PackLlama.html new file mode 100644 index 0000000..060d4fd --- /dev/null +++ b/Docs/types/PackLlama.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - PackLlama + + +

Back to Server.Mobiles

+

PackLlama : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) PackLlama()
+ (ctor) PackLlama( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target )
+ virtual bool CheckNonlocalLift( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual DeathMoveResult GetInventoryMoveResultFor( Item item )
+ virtual bool IsSnoop( Mobile from )
+ virtual bool OnBeforeDeath()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item item )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Packet.html b/Docs/types/Packet.html new file mode 100644 index 0000000..8b2f37d --- /dev/null +++ b/Docs/types/Packet.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - Packet + + +

Back to Server.Network

+

Packet

+

Derived Types: AccountLoginAck, AccountLoginRej, AccountSearchResults, AddBuffPacket, AdminCompressedPacket, AsciiMessage, AssistVersionReq, BBDisplayBoard, BBMessageContent, BBMessageHeader, BeginHouseCustomization, BoltEffect, BondedStatus, BookHeader, BookPageDetails, CancelArrow, CancelArrowHS, CancelTarget, ChangeCharacter, ChangeCombatant, ChangeUpdateRange, CharacterList, CharacterListOld, CharacterListUpdate, ChatMessagePacket, ClearWeaponAbility, ClientVersionReq, CloseGump, CloseSecureTrade, ConsoleData, ContainerContent, ContainerContent6017, ContainerContentUpdate, ContainerContentUpdate6017, ContainerDisplay, ContainerDisplayHS, CorpseContent, CorpseEquip, CurrentTime, DamagePacket, DamagePacketOld, DeathAnimation, DeathStatus, DeleteResult, DesignStateDetailed, DesignStateGeneral, DisplayBuyList, DisplayBuyListHS, DisplayContextMenu, DisplayEquipmentInfo, DisplayGump, DisplayGumpFast, DisplayGumpPacked, DisplayHelpTopic, DisplayHuePicker, DisplayItemListMenu, DisplayPaperdoll, DisplayProfile, DisplayQuestionMenu, DisplaySecureTrade, DisplaySignGump, DisplaySpellbook, DisplaySpellbookHS, DragEffect, EndHouseCustomization, EndVendorBuy, EndVendorSell, EquipUpdate, FacialHairEquipUpdate, FollowMessage, GlobalLightLevel, GMItemPacket, GMItemPacket, GodModeReply, GQCount, GQRequest, HairEquipUpdate, HealthbarPoison, HealthbarYellow, HuedEffect, InvalidMapEnable, LaunchBrowser, LiftRej, Login, LoginComplete, LoginConfirm, LogoutAck, MahjongGeneralInfo, MahjongJoinGame, MahjongPlayersInfo, MahjongRelieve, MahjongTileInfo, MahjongTilesInfo, MapChange, MapCommand, MapDetails, MapPatches, MessageBoxMessage, MessageLocalized, MessageLocalizedAffix, MobileAnimation, MobileAttributes, MobileAttributesN, MobileHits, MobileHitsN, MobileIncoming, MobileIncomingOld, MobileMana, MobileManaN, MobileMoving, MobileMovingOld, MobileName, MobileStam, MobileStamN, MobileStatus, MobileStatusCompact, MobileStatusExtended, MobileUpdate, MobileUpdateOld, MovementAck, MovementRej, MultiTargetReq, MultiTargetReqHS, NewMobileAnimation, NewSpellbookContent, NullFastwalkStack, ObjectHelpResponse, ObjectPropertyList, OPLInfo, ParticleEffect, PartyEmptyList, PartyInvitation, PartyMemberList, PartyRemoveMember, PartyTextMessage, PathfindMessage, PersonalLightLevel, PersonalLightLevelZero, PingAck, PlayerMove, PlayMusic, PlayServerAck, PlaySound, PopupMessage, ProtocolExtension, RemoveBuffPacket, RemoveFacialHair, RemoveHair, RemoveItem, RemoveMobile, ScrollMessage, SeasonChange, SecureTradeEquip, SecureTradeEquip6017, Sequence, ServerChange, ServerInfo, SetArrow, SetArrowHS, SetWarMode, SkillChange, SkillUpdate, SpeedControl, SpellbookContent, SpellbookContent6017, StatLockInfo, StopMusic, SupportedFeatures, Swing, TargetReq, ToggleSpecialAbility, TripTimeResponse, UnicodeMessage, UnicodePrompt, UnkD3, UOGInfo, UpdateSecureTrade, UpdateStatueAnimation, UTripTimeResponse, VendorBuyContent, VendorBuyContent6017, VendorBuyList, VendorSellList, Weather, WorldItem, WorldItemHS, WorldItemSA

+

Nested Types: State

+ (static) Packet Acquire( Packet p )
+ (static) void Release( ref RemoveItem p )
+ (static) void Release( ref OPLInfo p )
+ (static) void Release( Packet p )
+ (static) void Release( ref Packet p )
+ (static) void Release( ref RemoveMobile p )
+ (static) void Release( ref ObjectPropertyList p )
+ (static) Packet SetStatic( Packet p )
+ (ctor) Packet( int packetID )
+ (ctor) Packet( int packetID, int length )
+ int PacketID( get; )
+ PacketWriter UnderlyingStream( get; )
+ void Acquire()
+ byte[] Compile( bool compress, out int length )
+ void EnsureCapacity( int length )
+ void Free()
+ void InternalCompile( bool compress )
+ void OnSend()
+ void Release()
+ void SetStatic()
+ + diff --git a/Docs/types/PacketHandler.html b/Docs/types/PacketHandler.html new file mode 100644 index 0000000..725d293 --- /dev/null +++ b/Docs/types/PacketHandler.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PacketHandler + + +

Back to Server.Network

+

PacketHandler

+ (ctor) PacketHandler( int packetID, int length, bool ingame, OnPacketReceive onReceive )
+ bool Ingame( get; )
+ int Length( get; )
+ OnPacketReceive OnReceive( get; )
+ int PacketID( get; )
+ ThrottlePacketCallback ThrottleCallback( get; set; )
+ + diff --git a/Docs/types/PacketHandlers.html b/Docs/types/PacketHandlers.html new file mode 100644 index 0000000..e68aaef --- /dev/null +++ b/Docs/types/PacketHandlers.html @@ -0,0 +1,121 @@ + + + RunUO Documentation - Class Overview - PacketHandlers + + +

Back to Server.Network

+

PacketHandlers

+

Nested Types: AuthIDPersistence, LoginTimer

+ (static) bool ClientVerification( get; set; )
+ (static) PacketHandler[] Handlers( get; )
+ (static) bool SingleClickProps( get; set; )
+ (static) int[] ValidAnimations( get; set; )
+ (static) void AccountID( NetState state, PacketReader pvSrc )
+ (static) void AccountLogin( NetState state, PacketReader pvSrc )
+ (static) void AccountLogin_ReplyAck( NetState state )
+ (static) void AccountLogin_ReplyRej( NetState state, ALRReason reason )
+ (static) void Animate( NetState state, PacketReader pvSrc )
+ (static) void AsciiPromptResponse( NetState state, PacketReader pvSrc )
+ (static) void AsciiSpeech( NetState state, PacketReader pvSrc )
+ (static) void AssistVersion( NetState state, PacketReader pvSrc )
+ (static) void AttackReq( NetState state, PacketReader pvSrc )
+ (static) void BatchQueryProperties( NetState state, PacketReader pvSrc )
+ (static) void CastSpell( NetState state, PacketReader pvSrc )
+ (static) void ChangeSkillLock( NetState state, PacketReader pvSrc )
+ (static) void ChangeZ( NetState state, PacketReader pvSrc )
+ (static) void ChatRequest( NetState state, PacketReader pvSrc )
+ (static) void ClientType( NetState state, PacketReader pvSrc )
+ (static) void ClientVersion( NetState state, PacketReader pvSrc )
+ (static) void CloseStatus( NetState state, PacketReader pvSrc )
+ (static) void ConfigurationFile( NetState state, PacketReader pvSrc )
+ (static) void ContextMenuRequest( NetState state, PacketReader pvSrc )
+ (static) void ContextMenuResponse( NetState state, PacketReader pvSrc )
+ (static) void CreateCharacter( NetState state, PacketReader pvSrc )
+ (static) void CreateCharacter70160( NetState state, PacketReader pvSrc )
+ (static) void DeathStatusResponse( NetState state, PacketReader pvSrc )
+ (static) void DeleteCharacter( NetState state, PacketReader pvSrc )
+ (static) void DeleteStatic( NetState state, PacketReader pvSrc )
+ (static) void DisarmRequest( NetState state, PacketReader pvSrc )
+ (static) void Disconnect( NetState state, PacketReader pvSrc )
+ (static) void DisplayGumpResponse( NetState state, PacketReader pvSrc )
+ (static) void DoLogin( NetState state, Mobile m )
+ (static) void DropReq( NetState state, PacketReader pvSrc )
+ (static) void DropReq6017( NetState state, PacketReader pvSrc )
+ (static) void Edit( NetState state, PacketReader pvSrc )
+ (static) void Empty( NetState state, PacketReader pvSrc )
+ (static) void EncodedCommand( NetState state, PacketReader pvSrc )
+ (static) void EquipReq( NetState state, PacketReader pvSrc )
+ (static) void ExtendedCommand( NetState state, PacketReader pvSrc )
+ (static) void GameCentralMoniter( NetState state, PacketReader pvSrc )
+ (static) void GameLogin( NetState state, PacketReader pvSrc )
+ (static) int GenerateAuthID( NetState state )
+ (static) PacketHandler Get6017Handler( int packetID )
+ (static) EncodedPacketHandler GetEncodedHandler( int packetID )
+ (static) PacketHandler GetExtendedHandler( int packetID )
+ (static) PacketHandler GetHandler( int packetID )
+ (static) void GMSingle( NetState state, PacketReader pvSrc )
+ (static) void GodModeRequest( NetState state, PacketReader pvSrc )
+ (static) void GodviewQuery( NetState state, PacketReader pvSrc )
+ (static) void GuildGumpRequest( NetState state, IEntity e, EncodedReader reader )
+ (static) void HelpRequest( NetState state, PacketReader pvSrc )
+ (static) void HuePickerResponse( NetState state, PacketReader pvSrc )
+ (static) void Language( NetState state, PacketReader pvSrc )
+ (static) void LiftReq( NetState state, PacketReader pvSrc )
+ (static) void LoginServerSeed( NetState state, PacketReader pvSrc )
+ (static) void LogoutReq( NetState state, PacketReader pvSrc )
+ (static) void LookReq( NetState state, PacketReader pvSrc )
+ (static) void MenuResponse( NetState state, PacketReader pvSrc )
+ (static) void MobileNameRequest( NetState state, PacketReader pvSrc )
+ (static) void MobileQuery( NetState state, PacketReader pvSrc )
+ (static) void MovementReq( NetState state, PacketReader pvSrc )
+ (static) void NewAnimData( NetState state, PacketReader pvSrc )
+ (static) void NewRegion( NetState state, PacketReader pvSrc )
+ (static) void NewTerrain( NetState state, PacketReader pvSrc )
+ (static) void ObjectHelpRequest( NetState state, PacketReader pvSrc )
+ (static) void PartyMessage( NetState state, PacketReader pvSrc )
+ (static) void PartyMessage_Accept( NetState state, PacketReader pvSrc )
+ (static) void PartyMessage_AddMember( NetState state, PacketReader pvSrc )
+ (static) void PartyMessage_Decline( NetState state, PacketReader pvSrc )
+ (static) void PartyMessage_PrivateMessage( NetState state, PacketReader pvSrc )
+ (static) void PartyMessage_PublicMessage( NetState state, PacketReader pvSrc )
+ (static) void PartyMessage_RemoveMember( NetState state, PacketReader pvSrc )
+ (static) void PartyMessage_SetCanLoot( NetState state, PacketReader pvSrc )
+ (static) void PingReq( NetState state, PacketReader pvSrc )
+ (static) void PlayCharacter( NetState state, PacketReader pvSrc )
+ (static) void PlayServer( NetState state, PacketReader pvSrc )
+ (static) void ProfileReq( NetState state, PacketReader pvSrc )
+ (static) void QueryProperties( NetState state, PacketReader pvSrc )
+ (static) void QuestArrow( NetState state, PacketReader pvSrc )
+ (static) void QuestGumpRequest( NetState state, IEntity e, EncodedReader reader )
+ (static) void Register( int packetID, int length, bool ingame, OnPacketReceive onReceive )
+ (static) void Register6017( int packetID, int length, bool ingame, OnPacketReceive onReceive )
+ (static) void RegisterEncoded( int packetID, bool ingame, OnEncodedPacketReceive onReceive )
+ (static) void RegisterExtended( int packetID, bool ingame, OnPacketReceive onReceive )
+ (static) void RegisterThrottler( int packetID, ThrottlePacketCallback t )
+ (static) void RemoveEncodedHandler( int packetID )
+ (static) void RemoveExtendedHandler( int packetID )
+ (static) void RenameRequest( NetState state, PacketReader pvSrc )
+ (static) void RequestScrollWindow( NetState state, PacketReader pvSrc )
+ (static) void ResourceQuery( NetState state, PacketReader pvSrc )
+ (static) void Resynchronize( NetState state, PacketReader pvSrc )
+ (static) void ScreenSize( NetState state, PacketReader pvSrc )
+ (static) void SecureTrade( NetState state, PacketReader pvSrc )
+ (static) void SetAbility( NetState state, IEntity e, EncodedReader reader )
+ (static) void SetUpdateRange( NetState state, PacketReader pvSrc )
+ (static) void SetWarMode( NetState state, PacketReader pvSrc )
+ (static) void StatLockChange( NetState state, PacketReader pvSrc )
+ (static) void StunRequest( NetState state, PacketReader pvSrc )
+ (static) void SystemInfo( NetState state, PacketReader pvSrc )
+ (static) void TargetResponse( NetState state, PacketReader pvSrc )
+ (static) void TextCommand( NetState state, PacketReader pvSrc )
+ (static) void TripTime( NetState state, PacketReader pvSrc )
+ (static) void UnhandledBF( NetState state, PacketReader pvSrc )
+ (static) void UnicodePromptResponse( NetState state, PacketReader pvSrc )
+ (static) void UnicodeSpeech( NetState state, PacketReader pvSrc )
+ (static) void UseReq( NetState state, PacketReader pvSrc )
+ (static) void UTripTime( NetState state, PacketReader pvSrc )
+ (static) void VendorBuyReply( NetState state, PacketReader pvSrc )
+ (static) void VendorSellReply( NetState state, PacketReader pvSrc )
+ (static) bool VerifyGC( NetState state )
+ + diff --git a/Docs/types/PacketReader.html b/Docs/types/PacketReader.html new file mode 100644 index 0000000..dfe531f --- /dev/null +++ b/Docs/types/PacketReader.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - PacketReader + + +

Back to Server.Network

+

PacketReader

+ (ctor) PacketReader( byte[] data, int size, bool fixedSize )
+ byte[] Buffer( get; )
+ int Size( get; )
+ bool IsSafeChar( int c )
+ bool ReadBoolean()
+ byte ReadByte()
+ short ReadInt16()
+ int ReadInt32()
+ sbyte ReadSByte()
+ string ReadString()
+ string ReadString( int fixedLength )
+ string ReadStringSafe()
+ string ReadStringSafe( int fixedLength )
+ ushort ReadUInt16()
+ uint ReadUInt32()
+ string ReadUnicodeString()
+ string ReadUnicodeString( int fixedLength )
+ string ReadUnicodeStringLE()
+ string ReadUnicodeStringLESafe()
+ string ReadUnicodeStringLESafe( int fixedLength )
+ string ReadUnicodeStringSafe()
+ string ReadUnicodeStringSafe( int fixedLength )
+ string ReadUTF8String()
+ string ReadUTF8StringSafe()
+ string ReadUTF8StringSafe( int fixedLength )
+ int Seek( int offset, SeekOrigin origin )
+ void Trace( NetState state )
+ + diff --git a/Docs/types/PacketReceiveProfile.html b/Docs/types/PacketReceiveProfile.html new file mode 100644 index 0000000..27c7ade --- /dev/null +++ b/Docs/types/PacketReceiveProfile.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PacketReceiveProfile + + +

Back to Server.Diagnostics

+

PacketReceiveProfile : BasePacketProfile

+ (static) IEnumerable<PacketReceiveProfile> Profiles( get; )
+ (static) PacketReceiveProfile Acquire( int packetId )
+ (ctor) PacketReceiveProfile( int packetId )
+ + diff --git a/Docs/types/PacketSendProfile.html b/Docs/types/PacketSendProfile.html new file mode 100644 index 0000000..3e54f86 --- /dev/null +++ b/Docs/types/PacketSendProfile.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PacketSendProfile + + +

Back to Server.Diagnostics

+

PacketSendProfile : BasePacketProfile

+ (static) IEnumerable<PacketSendProfile> Profiles( get; )
+ (static) PacketSendProfile Acquire( Type type )
+ (ctor) PacketSendProfile( Type type )
+ long Created( get; set; )
+ virtual void WriteTo( TextWriter op )
+ + diff --git a/Docs/types/PacketWriter.html b/Docs/types/PacketWriter.html new file mode 100644 index 0000000..2f5805b --- /dev/null +++ b/Docs/types/PacketWriter.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - PacketWriter + + +

Back to Server.Network

+

PacketWriter

+ (static) PacketWriter CreateInstance()
+ (static) PacketWriter CreateInstance( int capacity )
+ (static) void ReleaseInstance( PacketWriter pw )
+ (ctor) PacketWriter()
+ (ctor) PacketWriter( int capacity )
+ long Length( get; )
+ long Position( get; set; )
+ MemoryStream UnderlyingStream( get; )
+ void Fill()
+ void Fill( int length )
+ long Seek( long offset, SeekOrigin origin )
+ byte[] ToArray()
+ void Write( short value )
+ void Write( uint value )
+ void Write( int value )
+ void Write( ushort value )
+ void Write( bool value )
+ void Write( sbyte value )
+ void Write( byte value )
+ void Write( byte[] buffer, int offset, int size )
+ void WriteAsciiFixed( string value, int size )
+ void WriteAsciiNull( string value )
+ void WriteBigUniFixed( string value, int size )
+ void WriteBigUniNull( string value )
+ void WriteLittleUniFixed( string value, int size )
+ void WriteLittleUniNull( string value )
+ + diff --git a/Docs/types/PackingBox.html b/Docs/types/PackingBox.html new file mode 100644 index 0000000..bb4a891 --- /dev/null +++ b/Docs/types/PackingBox.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - PackingBox + + +

Back to Server.Multis

+

PackingBox : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PackingBox()
+ (ctor) PackingBox( Serial serial )
+ Rectangle2D Bounds( get; )
+ int DefaultDropSound( get; )
+ int DefaultGumpID( get; )
+ int DefaultMaxItems( get; )
+ int DefaultMaxWeight( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnItemBounceCleared( Item item )
+ virtual void OnItemRemoved( Item item )
+ virtual void SendCantStoreMessage( Mobile to, Item item )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PadsOfTheCuSidhe.html b/Docs/types/PadsOfTheCuSidhe.html new file mode 100644 index 0000000..823df4a --- /dev/null +++ b/Docs/types/PadsOfTheCuSidhe.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PadsOfTheCuSidhe + + +

Back to Server.Items

+

PadsOfTheCuSidhe : FurBoots, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) PadsOfTheCuSidhe()
+ (ctor) PadsOfTheCuSidhe( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Page.html b/Docs/types/Page.html new file mode 100644 index 0000000..9395ab0 --- /dev/null +++ b/Docs/types/Page.html @@ -0,0 +1,9 @@ + + + RunUO Documentation - Class Overview - Page + + +

Back to Server

+

(FileQueue) - Page

+ + diff --git a/Docs/types/PageEntry.html b/Docs/types/PageEntry.html new file mode 100644 index 0000000..b12a1cd --- /dev/null +++ b/Docs/types/PageEntry.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - PageEntry + + +

Back to Server.Engines.Help

+

PageEntry

+

Nested Types: InternalTimer

+ (ctor) PageEntry( Mobile sender, string message, PageType type )
+ Mobile Handler( get; set; )
+ string Message( get; )
+ PageInfo PageInfo( get; )
+ Point3D PageLocation( get; )
+ Map PageMap( get; )
+ Mobile Sender( get; )
+ DateTime Sent( get; )
+ List<SpeechLogEntry> SpeechLog( get; )
+ PageType Type( get; )
+ void AddResponse( Mobile mob, string text )
+ void Stop()
+ + diff --git a/Docs/types/PageEntryGump.html b/Docs/types/PageEntryGump.html new file mode 100644 index 0000000..477f159 --- /dev/null +++ b/Docs/types/PageEntryGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PageEntryGump + + +

Back to Server.Engines.Help

+

PageEntryGump : Gump

+ (ctor) PageEntryGump( Mobile m, PageEntry entry )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ void Resend( NetState state )
+ + diff --git a/Docs/types/PageInfo.html b/Docs/types/PageInfo.html new file mode 100644 index 0000000..5d398cb --- /dev/null +++ b/Docs/types/PageInfo.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - PageInfo + + +

Back to Server.Engines.Reports

+

PageInfo : PersistableObject

+ (static) PersistableObject Construct()
+ (static) string GetAccount( Mobile mob )
+ (static) PageResolution ResFromResp( string resp )
+ (ctor) PageInfo()
+ (ctor) PageInfo( PageEntry entry )
+ StaffHistory History( get; set; )
+ string Message( get; set; )
+ PageType PageType( get; set; )
+ PageResolution Resolution( get; )
+ string ResolvedBy( get; )
+ StaffInfo Resolver( get; set; )
+ ResponseInfoCollection Responses( get; set; )
+ UserInfo Sender( get; set; )
+ string SentBy( get; set; )
+ DateTime TimeResolved( get; )
+ DateTime TimeSent( get; set; )
+ PersistableType TypeID( get; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void DeserializeChildren( PersistanceReader ip )
+ PageResolution GetResolution( out string resolvedBy, out DateTime timeResolved )
+ bool IsStaffResolution( PageResolution res )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ virtual void SerializeChildren( PersistanceWriter op )
+ void UpdateResolver()
+ + diff --git a/Docs/types/PageInfoCollection.html b/Docs/types/PageInfoCollection.html new file mode 100644 index 0000000..f2194c0 --- /dev/null +++ b/Docs/types/PageInfoCollection.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PageInfoCollection + + +

Back to Server.Engines.Reports

+

PageInfoCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: PageInfoCollectionEnumerator

+ (ctor) PageInfoCollection()
+ PageInfo Item( get; set; )
+ int Add( PageInfo value )
+ bool Contains( PageInfo value )
+ PageInfoCollectionEnumerator GetEnumerator()
+ int IndexOf( PageInfo value )
+ void Insert( int index, PageInfo value )
+ void Remove( PageInfo value )
+ + diff --git a/Docs/types/PageInfoCollectionEnumerator.html b/Docs/types/PageInfoCollectionEnumerator.html new file mode 100644 index 0000000..73fbb0f --- /dev/null +++ b/Docs/types/PageInfoCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PageInfoCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(PageInfoCollection) - PageInfoCollectionEnumerator : IEnumerator

+ (ctor) PageInfoCollectionEnumerator( PageInfoCollection collection )
+ PageInfo Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/PagePrompt.html b/Docs/types/PagePrompt.html new file mode 100644 index 0000000..c8dba49 --- /dev/null +++ b/Docs/types/PagePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PagePrompt + + +

Back to Server.Engines.Help

+

PagePrompt : Prompt

+ (ctor) PagePrompt( PageType type )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/PagePromptGump.html b/Docs/types/PagePromptGump.html new file mode 100644 index 0000000..7a3dfbc --- /dev/null +++ b/Docs/types/PagePromptGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PagePromptGump + + +

Back to Server.Engines.Help

+

PagePromptGump : Gump

+ (ctor) PagePromptGump( Mobile from, PageType type )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/PageQueue.html b/Docs/types/PageQueue.html new file mode 100644 index 0000000..be89cf4 --- /dev/null +++ b/Docs/types/PageQueue.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - PageQueue + + +

Back to Server.Engines.Help

+

PageQueue

+ (static) ArrayList List( get; )
+ (static) void Cancel( Mobile sender )
+ (static) bool CheckAllowedToPage( Mobile from )
+ (static) bool Contains( Mobile sender )
+ (static) void Enqueue( PageEntry entry )
+ (static) PageEntry GetEntry( Mobile sender )
+ (static) string GetPageTypeName( PageType type )
+ (static) int IndexOf( PageEntry e )
+ (static) void Initialize()
+ (static) bool IsHandling( Mobile check )
+ (static) void OnHandlerChanged( Mobile old, Mobile value, PageEntry entry )
+ (static) void Pages_OnCommand( CommandEventArgs e )
+ (static) void Remove( Mobile sender )
+ (static) void Remove( PageEntry e )
+ (static) void SendEmail( PageEntry entry )
+ (ctor) PageQueue()
+ + diff --git a/Docs/types/PageQueueGump.html b/Docs/types/PageQueueGump.html new file mode 100644 index 0000000..297a797 --- /dev/null +++ b/Docs/types/PageQueueGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PageQueueGump + + +

Back to Server.Engines.Help

+

PageQueueGump : Gump

+ (ctor) PageQueueGump()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/PageResolution.html b/Docs/types/PageResolution.html new file mode 100644 index 0000000..2df77c0 --- /dev/null +++ b/Docs/types/PageResolution.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PageResolution + + +

Back to Server.Engines.Reports

+

PageResolution (Enum)

+ None = 0,
+ Handled = 1,
+ Deleted = 2,
+ Logged = 3,
+ Canceled = 4
+ + diff --git a/Docs/types/PageResponseGump.html b/Docs/types/PageResponseGump.html new file mode 100644 index 0000000..1113d62 --- /dev/null +++ b/Docs/types/PageResponseGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PageResponseGump + + +

Back to Server.Engines.Help

+

PageResponseGump : Gump

+ (ctor) PageResponseGump( Mobile from, string name, string text )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/PageType.html b/Docs/types/PageType.html new file mode 100644 index 0000000..418ff25 --- /dev/null +++ b/Docs/types/PageType.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PageType + + +

Back to Server.Engines.Help

+

PageType (Enum)

+ Bug = 0,
+ Stuck = 1,
+ Account = 2,
+ Question = 3,
+ Suggestion = 4,
+ Other = 5,
+ VerbalHarassment = 6,
+ PhysicalHarassment = 7
+ + diff --git a/Docs/types/PageboyHair.html b/Docs/types/PageboyHair.html new file mode 100644 index 0000000..a4d1914 --- /dev/null +++ b/Docs/types/PageboyHair.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PageboyHair + + +

Back to Server.Items

+

PageboyHair : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PageboyHair()
+ (ctor) PageboyHair( int hue )
+ (ctor) PageboyHair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PainSpikeScroll.html b/Docs/types/PainSpikeScroll.html new file mode 100644 index 0000000..d47591d --- /dev/null +++ b/Docs/types/PainSpikeScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PainSpikeScroll + + +

Back to Server.Items

+

PainSpikeScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) PainSpikeScroll()
+ (ctor) PainSpikeScroll( int amount )
+ (ctor) PainSpikeScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PainSpikeSpell.html b/Docs/types/PainSpikeSpell.html new file mode 100644 index 0000000..beead30 --- /dev/null +++ b/Docs/types/PainSpikeSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PainSpikeSpell + + +

Back to Server.Spells.Necromancy

+

PainSpikeSpell : NecromancerSpell, ISpell

+

Nested Types: InternalTarget, InternalTimer

+ (ctor) PainSpikeSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ bool DelayedDamage( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/PaintedImage.html b/Docs/types/PaintedImage.html new file mode 100644 index 0000000..84013f1 --- /dev/null +++ b/Docs/types/PaintedImage.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PaintedImage + + +

Back to Server.Engines.Quests.Collector

+

PaintedImage : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) PaintedImage( Serial serial )
+ (ctor) PaintedImage( ImageType image )
+ ImageType Image( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting1NorthArtifact.html b/Docs/types/Painting1NorthArtifact.html new file mode 100644 index 0000000..53bff85 --- /dev/null +++ b/Docs/types/Painting1NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting1NorthArtifact + + +

Back to Server.Items

+

Painting1NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting1NorthArtifact()
+ (ctor) Painting1NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting1WestArtifact.html b/Docs/types/Painting1WestArtifact.html new file mode 100644 index 0000000..6891204 --- /dev/null +++ b/Docs/types/Painting1WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting1WestArtifact + + +

Back to Server.Items

+

Painting1WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting1WestArtifact()
+ (ctor) Painting1WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting2NorthArtifact.html b/Docs/types/Painting2NorthArtifact.html new file mode 100644 index 0000000..8c1db60 --- /dev/null +++ b/Docs/types/Painting2NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting2NorthArtifact + + +

Back to Server.Items

+

Painting2NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting2NorthArtifact()
+ (ctor) Painting2NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting2WestArtifact.html b/Docs/types/Painting2WestArtifact.html new file mode 100644 index 0000000..b63ab0e --- /dev/null +++ b/Docs/types/Painting2WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting2WestArtifact + + +

Back to Server.Items

+

Painting2WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting2WestArtifact()
+ (ctor) Painting2WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting3Artifact.html b/Docs/types/Painting3Artifact.html new file mode 100644 index 0000000..d092d0a --- /dev/null +++ b/Docs/types/Painting3Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting3Artifact + + +

Back to Server.Items

+

Painting3Artifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting3Artifact()
+ (ctor) Painting3Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting4NorthArtifact.html b/Docs/types/Painting4NorthArtifact.html new file mode 100644 index 0000000..a666ebe --- /dev/null +++ b/Docs/types/Painting4NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting4NorthArtifact + + +

Back to Server.Items

+

Painting4NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting4NorthArtifact()
+ (ctor) Painting4NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting4WestArtifact.html b/Docs/types/Painting4WestArtifact.html new file mode 100644 index 0000000..70d6abc --- /dev/null +++ b/Docs/types/Painting4WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting4WestArtifact + + +

Back to Server.Items

+

Painting4WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting4WestArtifact()
+ (ctor) Painting4WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting5NorthArtifact.html b/Docs/types/Painting5NorthArtifact.html new file mode 100644 index 0000000..19a03e4 --- /dev/null +++ b/Docs/types/Painting5NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting5NorthArtifact + + +

Back to Server.Items

+

Painting5NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting5NorthArtifact()
+ (ctor) Painting5NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting5WestArtifact.html b/Docs/types/Painting5WestArtifact.html new file mode 100644 index 0000000..d1589f6 --- /dev/null +++ b/Docs/types/Painting5WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting5WestArtifact + + +

Back to Server.Items

+

Painting5WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting5WestArtifact()
+ (ctor) Painting5WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting6NorthArtifact.html b/Docs/types/Painting6NorthArtifact.html new file mode 100644 index 0000000..253594e --- /dev/null +++ b/Docs/types/Painting6NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting6NorthArtifact + + +

Back to Server.Items

+

Painting6NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting6NorthArtifact()
+ (ctor) Painting6NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Painting6WestArtifact.html b/Docs/types/Painting6WestArtifact.html new file mode 100644 index 0000000..27a2abc --- /dev/null +++ b/Docs/types/Painting6WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Painting6WestArtifact + + +

Back to Server.Items

+

Painting6WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Painting6WestArtifact()
+ (ctor) Painting6WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PaintsAndBrush.html b/Docs/types/PaintsAndBrush.html new file mode 100644 index 0000000..743fd85 --- /dev/null +++ b/Docs/types/PaintsAndBrush.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PaintsAndBrush + + +

Back to Server.Items

+

PaintsAndBrush : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PaintsAndBrush()
+ (ctor) PaintsAndBrush( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PaladinSpell.html b/Docs/types/PaladinSpell.html new file mode 100644 index 0000000..94690b5 --- /dev/null +++ b/Docs/types/PaladinSpell.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - PaladinSpell + + +

Back to Server.Spells.Chivalry

+

PaladinSpell : Spell, ISpell

+

Derived Types: CleanseByFireSpell, CloseWoundsSpell, ConsecrateWeaponSpell, DispelEvilSpell, DivineFurySpell, EnemyOfOneSpell, HolyLightSpell, NobleSacrificeSpell, RemoveCurseSpell, SacredJourneySpell

+ (static) int ComputePowerValue( Mobile from, int div )
+ (ctor) PaladinSpell( Mobile caster, Item scroll, SpellInfo info )
+ int CastRecoveryBase( get; )
+ SkillName CastSkill( get; )
+ bool ClearHandsOnCast( get; )
+ SkillName DamageSkill( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual bool CheckCast()
+ virtual bool CheckFizzle()
+ int ComputePowerValue( int div )
+ virtual void DoFizzle()
+ virtual void DoHurtFizzle()
+ virtual void GetCastSkills( out double min, out double max )
+ virtual int GetMana()
+ virtual void OnBeginCast()
+ virtual void OnDisturb( DisturbType type, bool message )
+ virtual void SayMantra()
+ virtual void SendCastEffect()
+ + diff --git a/Docs/types/Panther.html b/Docs/types/Panther.html new file mode 100644 index 0000000..6f04161 --- /dev/null +++ b/Docs/types/Panther.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Panther + + +

Back to Server.Mobiles

+

Panther : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Panther()
+ (ctor) Panther( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PaperLantern.html b/Docs/types/PaperLantern.html new file mode 100644 index 0000000..d3dfc99 --- /dev/null +++ b/Docs/types/PaperLantern.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PaperLantern + + +

Back to Server.Items

+

PaperLantern : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PaperLantern()
+ (ctor) PaperLantern( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Paperdoll.html b/Docs/types/Paperdoll.html new file mode 100644 index 0000000..126195b --- /dev/null +++ b/Docs/types/Paperdoll.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Paperdoll + + +

Back to Server.Misc

+

Paperdoll

+ (static) void EventSink_PaperdollRequest( PaperdollRequestEventArgs e )
+ (static) void Initialize()
+ (ctor) Paperdoll()
+ + diff --git a/Docs/types/PaperdollEntry.html b/Docs/types/PaperdollEntry.html new file mode 100644 index 0000000..4c182e4 --- /dev/null +++ b/Docs/types/PaperdollEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PaperdollEntry + + +

Back to Server.ContextMenus

+

PaperdollEntry : ContextMenuEntry

+ (ctor) PaperdollEntry( Mobile m )
+ virtual void OnClick()
+ + diff --git a/Docs/types/PaperdollRequestEventArgs.html b/Docs/types/PaperdollRequestEventArgs.html new file mode 100644 index 0000000..e16eab1 --- /dev/null +++ b/Docs/types/PaperdollRequestEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PaperdollRequestEventArgs + + +

Back to Server

+

PaperdollRequestEventArgs : EventArgs

+ (ctor) PaperdollRequestEventArgs( Mobile beholder, Mobile beheld )
+ Mobile Beheld( get; )
+ Mobile Beholder( get; )
+ + diff --git a/Docs/types/PaperdollRequestEventHandler.html b/Docs/types/PaperdollRequestEventHandler.html new file mode 100644 index 0000000..8cccd26 --- /dev/null +++ b/Docs/types/PaperdollRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PaperdollRequestEventHandler + + +

Back to Server

+

PaperdollRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) PaperdollRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( PaperdollRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( PaperdollRequestEventArgs e )
+ + diff --git a/Docs/types/Paragon.html b/Docs/types/Paragon.html new file mode 100644 index 0000000..877ce63 --- /dev/null +++ b/Docs/types/Paragon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Paragon + + +

Back to Server.Mobiles

+

Paragon

+ (static) bool CheckArtifactChance( Mobile m, BaseCreature bc )
+ (static) bool CheckConvert( BaseCreature bc )
+ (static) bool CheckConvert( BaseCreature bc, Point3D location, Map m )
+ (static) void Convert( BaseCreature bc )
+ (static) void GiveArtifactTo( Mobile m )
+ (static) void UnConvert( BaseCreature bc )
+ (ctor) Paragon()
+ + diff --git a/Docs/types/ParagonChest.html b/Docs/types/ParagonChest.html new file mode 100644 index 0000000..bf12d8c --- /dev/null +++ b/Docs/types/ParagonChest.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ParagonChest + + +

Back to Server.Items

+

ParagonChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (static) void GetRandomAOSStats( out int attributeCount, out int min, out int max )
+ (ctor) ParagonChest( Serial serial )
+ (ctor) ParagonChest( string name, int level )
+ virtual void Deserialize( GenericReader reader )
+ void Fill( int level )
+ void Flip()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ParallelSaveStrategy.html b/Docs/types/ParallelSaveStrategy.html new file mode 100644 index 0000000..71f9ee8 --- /dev/null +++ b/Docs/types/ParallelSaveStrategy.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - ParallelSaveStrategy + + +

Back to Server

+

ParallelSaveStrategy : SaveStrategy

+

Nested Types: ConsumableEntry, Consumer, Producer

+ (static) WaitHandle b__0( Consumer input )
+ (ctor) ParallelSaveStrategy( int processorCount )
+ string Name( get; )
+ void CloseFiles()
+ bool Commit()
+ bool Enqueue( ISerializable value )
+ int GetThreadCount()
+ void OnSerialized( ConsumableEntry entry )
+ void OpenFiles()
+ virtual void ProcessDecay()
+ void Save( Item item, BinaryMemoryWriter writer )
+ virtual void Save( SaveMetrics metrics, bool permitBackgroundWrite )
+ void Save( Mobile mob, BinaryMemoryWriter writer )
+ void Save( BaseGuild guild, BinaryMemoryWriter writer )
+ void SaveTypeDatabase( string path, List<Type> types )
+ void SaveTypeDatabases()
+ void WriteCount( SequentialFileWriter indexFile, int count )
+ + diff --git a/Docs/types/ParalyzeFieldScroll.html b/Docs/types/ParalyzeFieldScroll.html new file mode 100644 index 0000000..2e877cd --- /dev/null +++ b/Docs/types/ParalyzeFieldScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ParalyzeFieldScroll + + +

Back to Server.Items

+

ParalyzeFieldScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ParalyzeFieldScroll()
+ (ctor) ParalyzeFieldScroll( int amount )
+ (ctor) ParalyzeFieldScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ParalyzeFieldSpell.html b/Docs/types/ParalyzeFieldSpell.html new file mode 100644 index 0000000..9275ad9 --- /dev/null +++ b/Docs/types/ParalyzeFieldSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ParalyzeFieldSpell + + +

Back to Server.Spells.Sixth

+

ParalyzeFieldSpell : MagerySpell, ISpell

+

Nested Types: InternalItem, InternalTarget

+ (ctor) ParalyzeFieldSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/ParalyzeScroll.html b/Docs/types/ParalyzeScroll.html new file mode 100644 index 0000000..38cdb4e --- /dev/null +++ b/Docs/types/ParalyzeScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ParalyzeScroll + + +

Back to Server.Items

+

ParalyzeScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ParalyzeScroll()
+ (ctor) ParalyzeScroll( int amount )
+ (ctor) ParalyzeScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ParalyzeSpell.html b/Docs/types/ParalyzeSpell.html new file mode 100644 index 0000000..80f54f1 --- /dev/null +++ b/Docs/types/ParalyzeSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ParalyzeSpell + + +

Back to Server.Spells.Fifth

+

ParalyzeSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) ParalyzeSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/ParalyzedTimer.html b/Docs/types/ParalyzedTimer.html new file mode 100644 index 0000000..db14aea --- /dev/null +++ b/Docs/types/ParalyzedTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ParalyzedTimer + + +

Back to Server

+

(Mobile) - ParalyzedTimer : Timer

+ (ctor) ParalyzedTimer( Mobile m, TimeSpan duration )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ParalyzingBlow.html b/Docs/types/ParalyzingBlow.html new file mode 100644 index 0000000..ac702d0 --- /dev/null +++ b/Docs/types/ParalyzingBlow.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ParalyzingBlow + + +

Back to Server.Items

+

ParalyzingBlow : WeaponAbility

+

Nested Types: InternalTimer

+ (static) void BeginImmunity( Mobile m, TimeSpan duration )
+ (static) void EndImmunity( Mobile m )
+ (static) bool IsImmune( Mobile m )
+ (ctor) ParalyzingBlow()
+ int BaseMana( get; )
+ virtual bool OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual bool RequiresTactics( Mobile from )
+ + diff --git a/Docs/types/ParasiticPlant.html b/Docs/types/ParasiticPlant.html new file mode 100644 index 0000000..cfb91f7 --- /dev/null +++ b/Docs/types/ParasiticPlant.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ParasiticPlant + + +

Back to Server.Items

+

ParasiticPlant : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ParasiticPlant()
+ (ctor) ParasiticPlant( int amount )
+ (ctor) ParasiticPlant( Serial serial )
+ (ctor) ParasiticPlant( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ParentNode.html b/Docs/types/ParentNode.html new file mode 100644 index 0000000..d18f49f --- /dev/null +++ b/Docs/types/ParentNode.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ParentNode + + +

Back to Server.Gumps

+

ParentNode

+ (ctor) ParentNode( XmlTextReader xml, ParentNode parent )
+ object[] Children( get; )
+ string Name( get; )
+ ParentNode Parent( get; )
+ void Parse( XmlTextReader xml )
+ + diff --git a/Docs/types/Parrot.html b/Docs/types/Parrot.html new file mode 100644 index 0000000..3831659 --- /dev/null +++ b/Docs/types/Parrot.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Parrot + + +

Back to Server.Mobiles

+

Parrot : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Parrot()
+ (ctor) Parrot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ParrotPerchAddon.html b/Docs/types/ParrotPerchAddon.html new file mode 100644 index 0000000..d5ce6be --- /dev/null +++ b/Docs/types/ParrotPerchAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ParrotPerchAddon + + +

Back to Server.Items

+

ParrotPerchAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ParrotPerchAddon()
+ (ctor) ParrotPerchAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ParrotPerchDeed.html b/Docs/types/ParrotPerchDeed.html new file mode 100644 index 0000000..96b47ef --- /dev/null +++ b/Docs/types/ParrotPerchDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ParrotPerchDeed + + +

Back to Server.Items

+

ParrotPerchDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ParrotPerchDeed()
+ (ctor) ParrotPerchDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ParsableAttribute.html b/Docs/types/ParsableAttribute.html new file mode 100644 index 0000000..dfcd044 --- /dev/null +++ b/Docs/types/ParsableAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ParsableAttribute + + +

Back to Server

+

ParsableAttribute : Attribute, _Attribute

+ (ctor) ParsableAttribute()
+ + diff --git a/Docs/types/ParticleEffect.html b/Docs/types/ParticleEffect.html new file mode 100644 index 0000000..64aabdd --- /dev/null +++ b/Docs/types/ParticleEffect.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ParticleEffect + + +

Back to Server.Network

+

ParticleEffect : Packet

+

Derived Types: LocationParticleEffect, MovingParticleEffect, TargetParticleEffect

+ (ctor) ParticleEffect( EffectType type, Serial from, Serial to, int itemID, IPoint3D fromPoint, IPoint3D toPoint, int speed, int duration, bool fixedDirection, bool explode, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, Serial serial, int layer, int unknown )
+ (ctor) ParticleEffect( EffectType type, Serial from, Serial to, int itemID, Point3D fromPoint, Point3D toPoint, int speed, int duration, bool fixedDirection, bool explode, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, Serial serial, int layer, int unknown )
+ + diff --git a/Docs/types/ParticleSupportType.html b/Docs/types/ParticleSupportType.html new file mode 100644 index 0000000..b5282b6 --- /dev/null +++ b/Docs/types/ParticleSupportType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ParticleSupportType + + +

Back to Server

+

ParticleSupportType (Enum)

+ Full = 0,
+ Detect = 1,
+ None = 2
+ + diff --git a/Docs/types/Party.html b/Docs/types/Party.html new file mode 100644 index 0000000..aa443ae --- /dev/null +++ b/Docs/types/Party.html @@ -0,0 +1,44 @@ + + + RunUO Documentation - Class Overview - Party + + +

Back to Server.Engines.PartySystem

+

Party : IParty

+

Nested Types: RejoinTimer

+ (static) void EventSink_Login( LoginEventArgs e )
+ (static) void EventSink_Logout( LogoutEventArgs e )
+ (static) void EventSink_PlayerDeath( PlayerDeathEventArgs e )
+ (static) Party Get( Mobile m )
+ (static) void Initialize()
+ (static) void Invite( Mobile from, Mobile target )
+ (static) void ListenToParty_OnCommand( CommandEventArgs e )
+ (static) void ListenToParty_OnTarget( Mobile from, object obj )
+ (ctor) Party( Mobile leader )
+ bool Active( get; )
+ List<Mobile> Candidates( get; )
+ int Count( get; )
+ PartyMemberInfo Item( get; )
+ PartyMemberInfo Item( get; )
+ Mobile Leader( get; )
+ List<PartyMemberInfo> Members( get; )
+ void Add( Mobile m )
+ bool Contains( Mobile m )
+ void Disband()
+ void OnAccept( Mobile from )
+ void OnAccept( Mobile from, bool force )
+ void OnDecline( Mobile from, Mobile leader )
+ virtual void OnManaChanged( Mobile m )
+ virtual void OnStamChanged( Mobile m )
+ virtual void OnStatsQuery( Mobile beholder, Mobile beheld )
+ void Remove( Mobile m )
+ void SendPrivateMessage( Mobile from, Mobile to, string text )
+ void SendPublicMessage( Mobile from, string text )
+ void SendToAll( Packet p )
+ void SendToAll( int number )
+ void SendToAll( int number, string args )
+ void SendToAll( int number, string args, int hue )
+ void SendToStaffMessage( Mobile from, string text )
+ void SendToStaffMessage( Mobile from, string format, object[] args )
+ + diff --git a/Docs/types/PartyCommandHandlers.html b/Docs/types/PartyCommandHandlers.html new file mode 100644 index 0000000..d1c258c --- /dev/null +++ b/Docs/types/PartyCommandHandlers.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PartyCommandHandlers + + +

Back to Server.Engines.PartySystem

+

PartyCommandHandlers : PartyCommands

+ (static) void Initialize()
+ (ctor) PartyCommandHandlers()
+ virtual void OnAccept( Mobile from, Mobile sentLeader )
+ virtual void OnAdd( Mobile from )
+ virtual void OnDecline( Mobile from, Mobile sentLeader )
+ virtual void OnPrivateMessage( Mobile from, Mobile target, string text )
+ virtual void OnPublicMessage( Mobile from, string text )
+ virtual void OnRemove( Mobile from, Mobile target )
+ virtual void OnSetCanLoot( Mobile from, bool canLoot )
+ + diff --git a/Docs/types/PartyCommands.html b/Docs/types/PartyCommands.html new file mode 100644 index 0000000..5f5ee3b --- /dev/null +++ b/Docs/types/PartyCommands.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - PartyCommands + + +

Back to Server

+

PartyCommands

+

Derived Types: PartyCommandHandlers

+ (static) PartyCommands Handler( get; set; )
+ (ctor) PartyCommands()
+ virtual void OnAccept( Mobile from, Mobile leader )
+ virtual void OnAdd( Mobile from )
+ virtual void OnDecline( Mobile from, Mobile leader )
+ virtual void OnPrivateMessage( Mobile from, Mobile target, string text )
+ virtual void OnPublicMessage( Mobile from, string text )
+ virtual void OnRemove( Mobile from, Mobile target )
+ virtual void OnSetCanLoot( Mobile from, bool canLoot )
+ + diff --git a/Docs/types/PartyEmptyList.html b/Docs/types/PartyEmptyList.html new file mode 100644 index 0000000..fdefc6c --- /dev/null +++ b/Docs/types/PartyEmptyList.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PartyEmptyList + + +

Back to Server.Engines.PartySystem

+

PartyEmptyList : Packet

+ (ctor) PartyEmptyList( Mobile m )
+ + diff --git a/Docs/types/PartyInvitation.html b/Docs/types/PartyInvitation.html new file mode 100644 index 0000000..fb5574b --- /dev/null +++ b/Docs/types/PartyInvitation.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PartyInvitation + + +

Back to Server.Engines.PartySystem

+

PartyInvitation : Packet

+ (ctor) PartyInvitation( Mobile leader )
+ + diff --git a/Docs/types/PartyMemberInfo.html b/Docs/types/PartyMemberInfo.html new file mode 100644 index 0000000..a98e0f6 --- /dev/null +++ b/Docs/types/PartyMemberInfo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PartyMemberInfo + + +

Back to Server.Engines.PartySystem

+

PartyMemberInfo

+ (ctor) PartyMemberInfo( Mobile m )
+ bool CanLoot( get; set; )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/PartyMemberList.html b/Docs/types/PartyMemberList.html new file mode 100644 index 0000000..484e730 --- /dev/null +++ b/Docs/types/PartyMemberList.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PartyMemberList + + +

Back to Server.Engines.PartySystem

+

PartyMemberList : Packet

+ (ctor) PartyMemberList( Party p )
+ + diff --git a/Docs/types/PartyRemoveMember.html b/Docs/types/PartyRemoveMember.html new file mode 100644 index 0000000..f49568d --- /dev/null +++ b/Docs/types/PartyRemoveMember.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PartyRemoveMember + + +

Back to Server.Engines.PartySystem

+

PartyRemoveMember : Packet

+ (ctor) PartyRemoveMember( Mobile removed, Party p )
+ + diff --git a/Docs/types/PartyTextMessage.html b/Docs/types/PartyTextMessage.html new file mode 100644 index 0000000..ee8082d --- /dev/null +++ b/Docs/types/PartyTextMessage.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PartyTextMessage + + +

Back to Server.Engines.PartySystem

+

PartyTextMessage : Packet

+ (ctor) PartyTextMessage( bool toAll, Mobile from, string text )
+ + diff --git a/Docs/types/PasswordProtection.html b/Docs/types/PasswordProtection.html new file mode 100644 index 0000000..e7e8711 --- /dev/null +++ b/Docs/types/PasswordProtection.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PasswordProtection + + +

Back to Server.Misc

+

PasswordProtection (Enum)

+ None = 0,
+ Crypt = 1,
+ NewCrypt = 2
+ + diff --git a/Docs/types/PatchworkSkeleton.html b/Docs/types/PatchworkSkeleton.html new file mode 100644 index 0000000..cefa875 --- /dev/null +++ b/Docs/types/PatchworkSkeleton.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PatchworkSkeleton + + +

Back to Server.Mobiles

+

PatchworkSkeleton : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) PatchworkSkeleton()
+ (ctor) PatchworkSkeleton( Serial serial )
+ bool BleedImmune( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PathAlgorithm.html b/Docs/types/PathAlgorithm.html new file mode 100644 index 0000000..38e7ab1 --- /dev/null +++ b/Docs/types/PathAlgorithm.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PathAlgorithm + + +

Back to Server.PathAlgorithms

+

PathAlgorithm

+

Derived Types: FastAStarAlgorithm, SlowAStarAlgorithm

+ (ctor) PathAlgorithm()
+ virtual bool CheckCondition( Mobile m, Map map, Point3D start, Point3D goal )
+ virtual Direction[] Find( Mobile m, Map map, Point3D start, Point3D goal )
+ Direction GetDirection( int xSource, int ySource, int xDest, int yDest )
+ + diff --git a/Docs/types/PathDirection.html b/Docs/types/PathDirection.html new file mode 100644 index 0000000..d71f6d6 --- /dev/null +++ b/Docs/types/PathDirection.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PathDirection + + +

Back to Server.Items

+

PathDirection (Enum)

+ Left = 0,
+ Up = 1,
+ Right = 2,
+ Down = 3
+ + diff --git a/Docs/types/PathFollower.html b/Docs/types/PathFollower.html new file mode 100644 index 0000000..cae424d --- /dev/null +++ b/Docs/types/PathFollower.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - PathFollower + + +

Back to Server

+

PathFollower

+ (ctor) PathFollower( Mobile from, IPoint3D goal )
+ IPoint3D Goal( get; )
+ MoveMethod Mover( get; set; )
+ void Advance( ref Point3D p, int index )
+ bool Check( Point3D loc, Point3D goal, int range )
+ bool CheckPath()
+ bool Follow( bool run, int range )
+ void ForceRepath()
+ Point3D GetGoalLocation()
+ MoveResult Move( Direction d )
+ + diff --git a/Docs/types/PathNode.html b/Docs/types/PathNode.html new file mode 100644 index 0000000..43395db --- /dev/null +++ b/Docs/types/PathNode.html @@ -0,0 +1,9 @@ + + + RunUO Documentation - Class Overview - PathNode + + +

Back to Server.PathAlgorithms.SlowAStar

+

PathNode

+ + diff --git a/Docs/types/PathfindMessage.html b/Docs/types/PathfindMessage.html new file mode 100644 index 0000000..755e6ea --- /dev/null +++ b/Docs/types/PathfindMessage.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PathfindMessage + + +

Back to Server.Network

+

PathfindMessage : Packet

+ (ctor) PathfindMessage( IPoint3D p )
+ + diff --git a/Docs/types/PayTimer.html b/Docs/types/PayTimer.html new file mode 100644 index 0000000..2778f26 --- /dev/null +++ b/Docs/types/PayTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PayTimer + + +

Back to Server.Mobiles

+

(PlayerVendor) - PayTimer : Timer

+ (static) TimeSpan GetInterval()
+ (ctor) PayTimer( PlayerVendor vendor, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Peacemaking.html b/Docs/types/Peacemaking.html new file mode 100644 index 0000000..62a5be5 --- /dev/null +++ b/Docs/types/Peacemaking.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Peacemaking + + +

Back to Server.SkillHandlers

+

Peacemaking

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) void OnPickedInstrument( Mobile from, BaseInstrument instrument )
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Peacemaking()
+ + diff --git a/Docs/types/Peach.html b/Docs/types/Peach.html new file mode 100644 index 0000000..bcf7752 --- /dev/null +++ b/Docs/types/Peach.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Peach + + +

Back to Server.Items

+

Peach : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Peach()
+ (ctor) Peach( int amount )
+ (ctor) Peach( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PeachCobbler.html b/Docs/types/PeachCobbler.html new file mode 100644 index 0000000..d3f4b64 --- /dev/null +++ b/Docs/types/PeachCobbler.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PeachCobbler + + +

Back to Server.Items

+

PeachCobbler : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PeachCobbler()
+ (ctor) PeachCobbler( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PeachTreeAddon.html b/Docs/types/PeachTreeAddon.html new file mode 100644 index 0000000..49309c8 --- /dev/null +++ b/Docs/types/PeachTreeAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PeachTreeAddon + + +

Back to Server.Items

+

PeachTreeAddon : BaseFruitTreeAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PeachTreeAddon()
+ (ctor) PeachTreeAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ Item Fruit( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PeachTreeDeed.html b/Docs/types/PeachTreeDeed.html new file mode 100644 index 0000000..c09893c --- /dev/null +++ b/Docs/types/PeachTreeDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PeachTreeDeed + + +

Back to Server.Items

+

PeachTreeDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PeachTreeDeed()
+ (ctor) PeachTreeDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PeachTrunkAddon.html b/Docs/types/PeachTrunkAddon.html new file mode 100644 index 0000000..57cbc1d --- /dev/null +++ b/Docs/types/PeachTrunkAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PeachTrunkAddon + + +

Back to Server.Items

+

PeachTrunkAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PeachTrunkAddon()
+ (ctor) PeachTrunkAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PeachTrunkDeed.html b/Docs/types/PeachTrunkDeed.html new file mode 100644 index 0000000..0368fdb --- /dev/null +++ b/Docs/types/PeachTrunkDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PeachTrunkDeed + + +

Back to Server.Items

+

PeachTrunkDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PeachTrunkDeed()
+ (ctor) PeachTrunkDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Pear.html b/Docs/types/Pear.html new file mode 100644 index 0000000..77cc8b4 --- /dev/null +++ b/Docs/types/Pear.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Pear + + +

Back to Server.Items

+

Pear : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Pear()
+ (ctor) Pear( int amount )
+ (ctor) Pear( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Peasant.html b/Docs/types/Peasant.html new file mode 100644 index 0000000..42436a0 --- /dev/null +++ b/Docs/types/Peasant.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Peasant + + +

Back to Server.Mobiles

+

Peasant : BaseEscortable, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) int GetRandomHue()
+ (ctor) Peasant()
+ (ctor) Peasant( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PeasantsBokuto.html b/Docs/types/PeasantsBokuto.html new file mode 100644 index 0000000..d6a690f --- /dev/null +++ b/Docs/types/PeasantsBokuto.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PeasantsBokuto + + +

Back to Server.Items

+

PeasantsBokuto : Bokuto, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) PeasantsBokuto()
+ (ctor) PeasantsBokuto( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PeculiarFish.html b/Docs/types/PeculiarFish.html new file mode 100644 index 0000000..bbeb903 --- /dev/null +++ b/Docs/types/PeculiarFish.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PeculiarFish + + +

Back to Server.Items

+

PeculiarFish : BaseMagicFish, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PeculiarFish()
+ (ctor) PeculiarFish( Serial serial )
+ int LabelNumber( get; )
+ virtual bool Apply( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PenAndInk.html b/Docs/types/PenAndInk.html new file mode 100644 index 0000000..13b8e86 --- /dev/null +++ b/Docs/types/PenAndInk.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PenAndInk + + +

Back to Server.Items

+

PenAndInk : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PenAndInk()
+ (ctor) PenAndInk( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PendantOfTheMagi.html b/Docs/types/PendantOfTheMagi.html new file mode 100644 index 0000000..018c27d --- /dev/null +++ b/Docs/types/PendantOfTheMagi.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PendantOfTheMagi + + +

Back to Server.Items

+

PendantOfTheMagi : GoldNecklace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) PendantOfTheMagi()
+ (ctor) PendantOfTheMagi( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PentagramAddon.html b/Docs/types/PentagramAddon.html new file mode 100644 index 0000000..0480367 --- /dev/null +++ b/Docs/types/PentagramAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PentagramAddon + + +

Back to Server.Items

+

PentagramAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Derived Types: ChampionAltar

+ (ctor) PentagramAddon()
+ (ctor) PentagramAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PentagramDeed.html b/Docs/types/PentagramDeed.html new file mode 100644 index 0000000..67ac721 --- /dev/null +++ b/Docs/types/PentagramDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PentagramDeed + + +

Back to Server.Items

+

PentagramDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PentagramDeed()
+ (ctor) PentagramDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PerfectEmerald.html b/Docs/types/PerfectEmerald.html new file mode 100644 index 0000000..2a171a6 --- /dev/null +++ b/Docs/types/PerfectEmerald.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PerfectEmerald + + +

Back to Server.Items

+

PerfectEmerald : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PerfectEmerald()
+ (ctor) PerfectEmerald( int amount )
+ (ctor) PerfectEmerald( Serial serial )
+ (ctor) PerfectEmerald( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PersistableObject.html b/Docs/types/PersistableObject.html new file mode 100644 index 0000000..0e41c30 --- /dev/null +++ b/Docs/types/PersistableObject.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PersistableObject + + +

Back to Server.Engines.Reports

+

PersistableObject

+

Derived Types: Chart, ChartItem, ItemValue, PageInfo, QueueStatus, Report, ReportColumn, ReportItem, ResponseInfo, Snapshot, SnapshotHistory, StaffHistory

+ (ctor) PersistableObject()
+ PersistableType TypeID( get; )
+ void Deserialize( PersistanceReader ip )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void DeserializeChildren( PersistanceReader ip )
+ void Serialize( PersistanceWriter op )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ virtual void SerializeChildren( PersistanceWriter op )
+ + diff --git a/Docs/types/PersistableType.html b/Docs/types/PersistableType.html new file mode 100644 index 0000000..8e082e6 --- /dev/null +++ b/Docs/types/PersistableType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PersistableType + + +

Back to Server.Engines.Reports

+

PersistableType

+ (ctor) PersistableType( string name, ConstructCallback constructor )
+ ConstructCallback Constructor( get; )
+ string Name( get; )
+ + diff --git a/Docs/types/PersistableTypeRegistry.html b/Docs/types/PersistableTypeRegistry.html new file mode 100644 index 0000000..4eefdd0 --- /dev/null +++ b/Docs/types/PersistableTypeRegistry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PersistableTypeRegistry + + +

Back to Server.Engines.Reports

+

PersistableTypeRegistry

+ (static) PersistableType Find( string name )
+ (static) void Register( PersistableType type )
+ (ctor) PersistableTypeRegistry()
+ + diff --git a/Docs/types/PersistanceReader.html b/Docs/types/PersistanceReader.html new file mode 100644 index 0000000..bae4d36 --- /dev/null +++ b/Docs/types/PersistanceReader.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - PersistanceReader + + +

Back to Server.Engines.Reports

+

PersistanceReader

+

Derived Types: XmlPersistanceReader

+ (ctor) PersistanceReader()
+ bool HasChild( get; )
+ virtual bool BeginChildren()
+ virtual void Close()
+ virtual void FinishChildren()
+ virtual bool GetBoolean( string key )
+ virtual PersistableObject GetChild()
+ virtual DateTime GetDateTime( string key )
+ virtual int GetInt32( string key )
+ virtual string GetString( string key )
+ virtual void ReadDocument( PersistableObject root )
+ + diff --git a/Docs/types/PersistanceWriter.html b/Docs/types/PersistanceWriter.html new file mode 100644 index 0000000..4265093 --- /dev/null +++ b/Docs/types/PersistanceWriter.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - PersistanceWriter + + +

Back to Server.Engines.Reports

+

PersistanceWriter

+

Derived Types: XmlPersistanceWriter

+ (ctor) PersistanceWriter()
+ virtual void BeginChildren()
+ virtual void BeginObject( PersistableType typeID )
+ virtual void Close()
+ virtual void FinishChildren()
+ virtual void FinishObject()
+ virtual void SetBoolean( string key, bool value )
+ virtual void SetDateTime( string key, DateTime value )
+ virtual void SetInt32( string key, int value )
+ virtual void SetString( string key, string value )
+ virtual void WriteDocument( PersistableObject root )
+ + diff --git a/Docs/types/PersistedType.html b/Docs/types/PersistedType.html new file mode 100644 index 0000000..14be4b7 --- /dev/null +++ b/Docs/types/PersistedType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PersistedType + + +

Back to Server.Factions

+

PersistedType (Enum)

+ Terminator = 0,
+ Faction = 1,
+ Town = 2
+ + diff --git a/Docs/types/PersonalLightLevel.html b/Docs/types/PersonalLightLevel.html new file mode 100644 index 0000000..d44bec8 --- /dev/null +++ b/Docs/types/PersonalLightLevel.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PersonalLightLevel + + +

Back to Server.Network

+

PersonalLightLevel : Packet

+ (ctor) PersonalLightLevel( Mobile m )
+ (ctor) PersonalLightLevel( Mobile m, int level )
+ + diff --git a/Docs/types/PersonalLightLevelZero.html b/Docs/types/PersonalLightLevelZero.html new file mode 100644 index 0000000..7204610 --- /dev/null +++ b/Docs/types/PersonalLightLevelZero.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PersonalLightLevelZero + + +

Back to Server.Network

+

PersonalLightLevelZero : Packet

+ (ctor) PersonalLightLevelZero( Mobile m )
+ + diff --git a/Docs/types/PestilentBandage.html b/Docs/types/PestilentBandage.html new file mode 100644 index 0000000..fbef376 --- /dev/null +++ b/Docs/types/PestilentBandage.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PestilentBandage + + +

Back to Server.Mobiles

+

PestilentBandage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) PestilentBandage()
+ (ctor) PestilentBandage( Serial serial )
+ bool CanHeal( get; )
+ Poison HitPoison( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PetLinkTarget.html b/Docs/types/PetLinkTarget.html new file mode 100644 index 0000000..00a7b1d --- /dev/null +++ b/Docs/types/PetLinkTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PetLinkTarget + + +

Back to Server.Items

+

(BallOfSummoning) - PetLinkTarget : Target

+ (ctor) PetLinkTarget( BallOfSummoning ball )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/PetResurrectGump.html b/Docs/types/PetResurrectGump.html new file mode 100644 index 0000000..b301a59 --- /dev/null +++ b/Docs/types/PetResurrectGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PetResurrectGump + + +

Back to Server.Gumps

+

PetResurrectGump : Gump

+ (ctor) PetResurrectGump( Mobile from, BaseCreature pet )
+ (ctor) PetResurrectGump( Mobile from, BaseCreature pet, double hitsScalar )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/PetSummoningSpell.html b/Docs/types/PetSummoningSpell.html new file mode 100644 index 0000000..8c8577a --- /dev/null +++ b/Docs/types/PetSummoningSpell.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PetSummoningSpell + + +

Back to Server.Items

+

(BallOfSummoning) - PetSummoningSpell : Spell, ISpell

+ (ctor) PetSummoningSpell( BallOfSummoning ball, Mobile caster )
+ TimeSpan CastDelayBase( get; )
+ double CastDelayFastScalar( get; )
+ bool ClearHandsOnCast( get; )
+ bool RevealOnCast( get; )
+ virtual bool CheckDisturb( DisturbType type, bool checkFirst, bool resistable )
+ virtual bool CheckFizzle()
+ virtual bool ConsumeReagents()
+ virtual void DoFizzle()
+ virtual void DoHurtFizzle()
+ virtual TimeSpan GetCastRecovery()
+ virtual int GetMana()
+ virtual void OnCast()
+ virtual void OnDisturb( DisturbType type, bool message )
+ void Stop()
+ + diff --git a/Docs/types/PewterBowlOfCarrots.html b/Docs/types/PewterBowlOfCarrots.html new file mode 100644 index 0000000..9cc1a12 --- /dev/null +++ b/Docs/types/PewterBowlOfCarrots.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PewterBowlOfCarrots + + +

Back to Server.Items

+

PewterBowlOfCarrots : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PewterBowlOfCarrots()
+ (ctor) PewterBowlOfCarrots( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PewterBowlOfCorn.html b/Docs/types/PewterBowlOfCorn.html new file mode 100644 index 0000000..bfb2f60 --- /dev/null +++ b/Docs/types/PewterBowlOfCorn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PewterBowlOfCorn + + +

Back to Server.Items

+

PewterBowlOfCorn : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PewterBowlOfCorn()
+ (ctor) PewterBowlOfCorn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PewterBowlOfLettuce.html b/Docs/types/PewterBowlOfLettuce.html new file mode 100644 index 0000000..c3e0b8d --- /dev/null +++ b/Docs/types/PewterBowlOfLettuce.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PewterBowlOfLettuce + + +

Back to Server.Items

+

PewterBowlOfLettuce : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PewterBowlOfLettuce()
+ (ctor) PewterBowlOfLettuce( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PewterBowlOfPeas.html b/Docs/types/PewterBowlOfPeas.html new file mode 100644 index 0000000..6088a60 --- /dev/null +++ b/Docs/types/PewterBowlOfPeas.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PewterBowlOfPeas + + +

Back to Server.Items

+

PewterBowlOfPeas : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PewterBowlOfPeas()
+ (ctor) PewterBowlOfPeas( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PewterBowlOfPotatos.html b/Docs/types/PewterBowlOfPotatos.html new file mode 100644 index 0000000..d73f01b --- /dev/null +++ b/Docs/types/PewterBowlOfPotatos.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PewterBowlOfPotatos + + +

Back to Server.Items

+

PewterBowlOfPotatos : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PewterBowlOfPotatos()
+ (ctor) PewterBowlOfPotatos( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PewterMug.html b/Docs/types/PewterMug.html new file mode 100644 index 0000000..2df89a6 --- /dev/null +++ b/Docs/types/PewterMug.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PewterMug + + +

Back to Server.Items

+

PewterMug : BaseBeverage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) PewterMug()
+ (ctor) PewterMug( BeverageType type )
+ (ctor) PewterMug( Serial serial )
+ int BaseLabelNumber( get; )
+ int MaxQuantity( get; )
+ virtual int ComputeItemID()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PhantomStaff.html b/Docs/types/PhantomStaff.html new file mode 100644 index 0000000..5a2c0af --- /dev/null +++ b/Docs/types/PhantomStaff.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PhantomStaff + + +

Back to Server.Items

+

PhantomStaff : WildStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) PhantomStaff()
+ (ctor) PhantomStaff( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PhillipsWoodenSteed.html b/Docs/types/PhillipsWoodenSteed.html new file mode 100644 index 0000000..e9222cb --- /dev/null +++ b/Docs/types/PhillipsWoodenSteed.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PhillipsWoodenSteed + + +

Back to Server.Items

+

PhillipsWoodenSteed : MonsterStatuette, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) PhillipsWoodenSteed()
+ (ctor) PhillipsWoodenSteed( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Phoenix.html b/Docs/types/Phoenix.html new file mode 100644 index 0000000..fff6e6d --- /dev/null +++ b/Docs/types/Phoenix.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Phoenix + + +

Back to Server.Mobiles

+

Phoenix : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Phoenix()
+ (ctor) Phoenix( Serial serial )
+ int Feathers( get; )
+ int Meat( get; )
+ MeatType MeatType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PickLoomTarget.html b/Docs/types/PickLoomTarget.html new file mode 100644 index 0000000..7325ced --- /dev/null +++ b/Docs/types/PickLoomTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PickLoomTarget + + +

Back to Server.Items

+

(BaseClothMaterial) - PickLoomTarget : Target

+ (ctor) PickLoomTarget( BaseClothMaterial material )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/PickMoveTarget.html b/Docs/types/PickMoveTarget.html new file mode 100644 index 0000000..11ce2cc --- /dev/null +++ b/Docs/types/PickMoveTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PickMoveTarget + + +

Back to Server.Targets

+

PickMoveTarget : Target

+ (ctor) PickMoveTarget()
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/PickTarget.html b/Docs/types/PickTarget.html new file mode 100644 index 0000000..4a707bb --- /dev/null +++ b/Docs/types/PickTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PickTarget + + +

Back to Server

+

(BoundingBoxPicker) - PickTarget : Target

+ (ctor) PickTarget( BoundingBoxCallback callback, object state )
+ (ctor) PickTarget( Point3D store, bool first, Map map, BoundingBoxCallback callback, object state )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/PickWheelTarget.html b/Docs/types/PickWheelTarget.html new file mode 100644 index 0000000..8b2980b --- /dev/null +++ b/Docs/types/PickWheelTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PickWheelTarget + + +

Back to Server.Items

+

(Wool) - PickWheelTarget : Target

+ (ctor) PickWheelTarget( Wool wool )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/Pickaxe.html b/Docs/types/Pickaxe.html new file mode 100644 index 0000000..b66a85d --- /dev/null +++ b/Docs/types/Pickaxe.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Pickaxe + + +

Back to Server.Items

+

Pickaxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+ (ctor) Pickaxe()
+ (ctor) Pickaxe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ HarvestSystem HarvestSystem( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PickpocketDip.html b/Docs/types/PickpocketDip.html new file mode 100644 index 0000000..e62ba10 --- /dev/null +++ b/Docs/types/PickpocketDip.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - PickpocketDip + + +

Back to Server.Items

+

PickpocketDip : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: InternalTimer

+ (ctor) PickpocketDip( Serial serial )
+ (ctor) PickpocketDip( int itemID )
+ double MaxSkill( get; set; )
+ double MinSkill( get; set; )
+ bool Swinging( get; )
+ void BeginSwing()
+ virtual void Deserialize( GenericReader reader )
+ void EndSwing()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void UpdateItemID()
+ void Use( Mobile from )
+ + diff --git a/Docs/types/PickpocketDipEastAddon.html b/Docs/types/PickpocketDipEastAddon.html new file mode 100644 index 0000000..0fb96e8 --- /dev/null +++ b/Docs/types/PickpocketDipEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PickpocketDipEastAddon + + +

Back to Server.Items

+

PickpocketDipEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PickpocketDipEastAddon()
+ (ctor) PickpocketDipEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PickpocketDipEastDeed.html b/Docs/types/PickpocketDipEastDeed.html new file mode 100644 index 0000000..e7d9692 --- /dev/null +++ b/Docs/types/PickpocketDipEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PickpocketDipEastDeed + + +

Back to Server.Items

+

PickpocketDipEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PickpocketDipEastDeed()
+ (ctor) PickpocketDipEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PickpocketDipSouthAddon.html b/Docs/types/PickpocketDipSouthAddon.html new file mode 100644 index 0000000..fcfb2d9 --- /dev/null +++ b/Docs/types/PickpocketDipSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PickpocketDipSouthAddon + + +

Back to Server.Items

+

PickpocketDipSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PickpocketDipSouthAddon()
+ (ctor) PickpocketDipSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PickpocketDipSouthDeed.html b/Docs/types/PickpocketDipSouthDeed.html new file mode 100644 index 0000000..c60a7ef --- /dev/null +++ b/Docs/types/PickpocketDipSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PickpocketDipSouthDeed + + +

Back to Server.Items

+

PickpocketDipSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PickpocketDipSouthDeed()
+ (ctor) PickpocketDipSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PicnicBasket.html b/Docs/types/PicnicBasket.html new file mode 100644 index 0000000..2140937 --- /dev/null +++ b/Docs/types/PicnicBasket.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PicnicBasket + + +

Back to Server.Items

+

PicnicBasket : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PicnicBasket()
+ (ctor) PicnicBasket( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieChart.html b/Docs/types/PieChart.html new file mode 100644 index 0000000..178cb70 --- /dev/null +++ b/Docs/types/PieChart.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PieChart + + +

Back to Server.Engines.Reports

+

PieChart : Chart

+ (static) PersistableObject Construct()
+ (ctor) PieChart()
+ (ctor) PieChart( string name, string fileName, bool showPercents )
+ bool ShowPercents( get; set; )
+ PersistableType TypeID( get; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ + diff --git a/Docs/types/PieChartRenderer.html b/Docs/types/PieChartRenderer.html new file mode 100644 index 0000000..ab2625e --- /dev/null +++ b/Docs/types/PieChartRenderer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PieChartRenderer + + +

Back to Server.Engines.Reports

+

PieChartRenderer : ChartRenderer

+ (ctor) PieChartRenderer()
+ (ctor) PieChartRenderer( Color bgColor )
+ bool ShowPercents( get; set; )
+ void CalculateLegendWidthHeight()
+ void CollectDataPoints( string[] xValues, string[] yValues )
+ virtual Bitmap Draw()
+ + diff --git a/Docs/types/PieceBlackBishop.html b/Docs/types/PieceBlackBishop.html new file mode 100644 index 0000000..3c672f8 --- /dev/null +++ b/Docs/types/PieceBlackBishop.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceBlackBishop + + +

Back to Server.Items

+

PieceBlackBishop : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceBlackBishop( BaseBoard board )
+ (ctor) PieceBlackBishop( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceBlackChecker.html b/Docs/types/PieceBlackChecker.html new file mode 100644 index 0000000..0405f33 --- /dev/null +++ b/Docs/types/PieceBlackChecker.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceBlackChecker + + +

Back to Server.Items

+

PieceBlackChecker : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceBlackChecker( BaseBoard board )
+ (ctor) PieceBlackChecker( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceBlackKing.html b/Docs/types/PieceBlackKing.html new file mode 100644 index 0000000..c15be23 --- /dev/null +++ b/Docs/types/PieceBlackKing.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceBlackKing + + +

Back to Server.Items

+

PieceBlackKing : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceBlackKing( BaseBoard board )
+ (ctor) PieceBlackKing( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceBlackKnight.html b/Docs/types/PieceBlackKnight.html new file mode 100644 index 0000000..e2a80e7 --- /dev/null +++ b/Docs/types/PieceBlackKnight.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceBlackKnight + + +

Back to Server.Items

+

PieceBlackKnight : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceBlackKnight( BaseBoard board )
+ (ctor) PieceBlackKnight( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceBlackPawn.html b/Docs/types/PieceBlackPawn.html new file mode 100644 index 0000000..3fcbd6b --- /dev/null +++ b/Docs/types/PieceBlackPawn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceBlackPawn + + +

Back to Server.Items

+

PieceBlackPawn : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceBlackPawn( BaseBoard board )
+ (ctor) PieceBlackPawn( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceBlackQueen.html b/Docs/types/PieceBlackQueen.html new file mode 100644 index 0000000..f25bd15 --- /dev/null +++ b/Docs/types/PieceBlackQueen.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceBlackQueen + + +

Back to Server.Items

+

PieceBlackQueen : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceBlackQueen( BaseBoard board )
+ (ctor) PieceBlackQueen( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceBlackRook.html b/Docs/types/PieceBlackRook.html new file mode 100644 index 0000000..9eeda18 --- /dev/null +++ b/Docs/types/PieceBlackRook.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceBlackRook + + +

Back to Server.Items

+

PieceBlackRook : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceBlackRook( BaseBoard board )
+ (ctor) PieceBlackRook( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceWhiteBishop.html b/Docs/types/PieceWhiteBishop.html new file mode 100644 index 0000000..aecc937 --- /dev/null +++ b/Docs/types/PieceWhiteBishop.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceWhiteBishop + + +

Back to Server.Items

+

PieceWhiteBishop : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceWhiteBishop( BaseBoard board )
+ (ctor) PieceWhiteBishop( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceWhiteChecker.html b/Docs/types/PieceWhiteChecker.html new file mode 100644 index 0000000..328e132 --- /dev/null +++ b/Docs/types/PieceWhiteChecker.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceWhiteChecker + + +

Back to Server.Items

+

PieceWhiteChecker : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceWhiteChecker( BaseBoard board )
+ (ctor) PieceWhiteChecker( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceWhiteKing.html b/Docs/types/PieceWhiteKing.html new file mode 100644 index 0000000..5f50157 --- /dev/null +++ b/Docs/types/PieceWhiteKing.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceWhiteKing + + +

Back to Server.Items

+

PieceWhiteKing : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceWhiteKing( BaseBoard board )
+ (ctor) PieceWhiteKing( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceWhiteKnight.html b/Docs/types/PieceWhiteKnight.html new file mode 100644 index 0000000..a55d3a3 --- /dev/null +++ b/Docs/types/PieceWhiteKnight.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceWhiteKnight + + +

Back to Server.Items

+

PieceWhiteKnight : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceWhiteKnight( BaseBoard board )
+ (ctor) PieceWhiteKnight( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceWhitePawn.html b/Docs/types/PieceWhitePawn.html new file mode 100644 index 0000000..1107629 --- /dev/null +++ b/Docs/types/PieceWhitePawn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceWhitePawn + + +

Back to Server.Items

+

PieceWhitePawn : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceWhitePawn( BaseBoard board )
+ (ctor) PieceWhitePawn( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceWhiteQueen.html b/Docs/types/PieceWhiteQueen.html new file mode 100644 index 0000000..4aebff7 --- /dev/null +++ b/Docs/types/PieceWhiteQueen.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceWhiteQueen + + +

Back to Server.Items

+

PieceWhiteQueen : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceWhiteQueen( BaseBoard board )
+ (ctor) PieceWhiteQueen( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PieceWhiteRook.html b/Docs/types/PieceWhiteRook.html new file mode 100644 index 0000000..37e2a7f --- /dev/null +++ b/Docs/types/PieceWhiteRook.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PieceWhiteRook + + +

Back to Server.Items

+

PieceWhiteRook : BasePiece, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PieceWhiteRook( BaseBoard board )
+ (ctor) PieceWhiteRook( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Pier.html b/Docs/types/Pier.html new file mode 100644 index 0000000..936ffe5 --- /dev/null +++ b/Docs/types/Pier.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Pier + + +

Back to Server.Items

+

Pier : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Pier()
+ (ctor) Pier( Serial serial )
+ (ctor) Pier( int itemid )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Pig.html b/Docs/types/Pig.html new file mode 100644 index 0000000..609588d --- /dev/null +++ b/Docs/types/Pig.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Pig + + +

Back to Server.Mobiles

+

Pig : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Pig()
+ (ctor) Pig( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PigIron.html b/Docs/types/PigIron.html new file mode 100644 index 0000000..aec4446 --- /dev/null +++ b/Docs/types/PigIron.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PigIron + + +

Back to Server.Items

+

PigIron : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) PigIron()
+ (ctor) PigIron( Serial serial )
+ (ctor) PigIron( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PigmentType.html b/Docs/types/PigmentType.html new file mode 100644 index 0000000..d3c1861 --- /dev/null +++ b/Docs/types/PigmentType.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - PigmentType + + +

Back to Server.Items

+

PigmentType (Enum)

+ None = 0,
+ ParagonGold = 1,
+ VioletCouragePurple = 2,
+ InvulnerabilityBlue = 3,
+ LunaWhite = 4,
+ DryadGreen = 5,
+ ShadowDancerBlack = 6,
+ BerserkerRed = 7,
+ NoxGreen = 8,
+ RumRed = 9,
+ FireOrange = 10,
+ FadedCoal = 11,
+ Coal = 12,
+ FadedGold = 13,
+ StormBronze = 14,
+ Rose = 15,
+ MidnightCoal = 16,
+ FadedBronze = 17,
+ FadedRose = 18,
+ DeepRose = 19
+ + diff --git a/Docs/types/PigmentsOfTokuno.html b/Docs/types/PigmentsOfTokuno.html new file mode 100644 index 0000000..24f1573 --- /dev/null +++ b/Docs/types/PigmentsOfTokuno.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PigmentsOfTokuno + + +

Back to Server.Items

+

PigmentsOfTokuno : BasePigmentsOfTokuno, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining

+ (static) int[] GetInfo( PigmentType type )
+ (ctor) PigmentsOfTokuno()
+ (ctor) PigmentsOfTokuno( Serial serial )
+ (ctor) PigmentsOfTokuno( PigmentType type )
+ (ctor) PigmentsOfTokuno( PigmentType type, int uses )
+ int LabelNumber( get; )
+ PigmentType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PigmentsTileButtonInfo.html b/Docs/types/PigmentsTileButtonInfo.html new file mode 100644 index 0000000..59005c4 --- /dev/null +++ b/Docs/types/PigmentsTileButtonInfo.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PigmentsTileButtonInfo + + +

Back to Server.Gumps

+

(ToTRedeemGump) - PigmentsTileButtonInfo : ImageTileButtonInfo

+ (ctor) PigmentsTileButtonInfo( PigmentType p )
+ PigmentType Pigment( get; set; )
+ + diff --git a/Docs/types/Pike.html b/Docs/types/Pike.html new file mode 100644 index 0000000..15f1733 --- /dev/null +++ b/Docs/types/Pike.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Pike + + +

Back to Server.Items

+

Pike : BaseSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: Pacify

+ (ctor) Pike()
+ (ctor) Pike( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PileOfGlacialSnow.html b/Docs/types/PileOfGlacialSnow.html new file mode 100644 index 0000000..d5cfeef --- /dev/null +++ b/Docs/types/PileOfGlacialSnow.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PileOfGlacialSnow + + +

Back to Server.Items

+

PileOfGlacialSnow : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer, SnowTarget

+ (ctor) PileOfGlacialSnow()
+ (ctor) PileOfGlacialSnow( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PilferedDancerFans.html b/Docs/types/PilferedDancerFans.html new file mode 100644 index 0000000..8c1ce8c --- /dev/null +++ b/Docs/types/PilferedDancerFans.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PilferedDancerFans + + +

Back to Server.Items

+

PilferedDancerFans : Tessen, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) PilferedDancerFans()
+ (ctor) PilferedDancerFans( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PingAck.html b/Docs/types/PingAck.html new file mode 100644 index 0000000..60ac724 --- /dev/null +++ b/Docs/types/PingAck.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PingAck + + +

Back to Server.Network

+

PingAck : Packet

+ (static) PingAck Instantiate( byte ping )
+ (ctor) PingAck( byte ping )
+ + diff --git a/Docs/types/PinkFancyRugAddon.html b/Docs/types/PinkFancyRugAddon.html new file mode 100644 index 0000000..9bdd935 --- /dev/null +++ b/Docs/types/PinkFancyRugAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PinkFancyRugAddon + + +

Back to Server.Items

+

PinkFancyRugAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PinkFancyRugAddon()
+ (ctor) PinkFancyRugAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PinkFancyRugDeed.html b/Docs/types/PinkFancyRugDeed.html new file mode 100644 index 0000000..f3bcc64 --- /dev/null +++ b/Docs/types/PinkFancyRugDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PinkFancyRugDeed + + +

Back to Server.Items

+

PinkFancyRugDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PinkFancyRugDeed()
+ (ctor) PinkFancyRugDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Pitcher.html b/Docs/types/Pitcher.html new file mode 100644 index 0000000..dec9af8 --- /dev/null +++ b/Docs/types/Pitcher.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Pitcher + + +

Back to Server.Items

+

Pitcher : BaseBeverage, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) Pitcher()
+ (ctor) Pitcher( BeverageType type )
+ (ctor) Pitcher( Serial serial )
+ int BaseLabelNumber( get; )
+ int MaxQuantity( get; )
+ virtual int ComputeItemID()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Pitchfork.html b/Docs/types/Pitchfork.html new file mode 100644 index 0000000..910982c --- /dev/null +++ b/Docs/types/Pitchfork.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Pitchfork + + +

Back to Server.Items

+

Pitchfork : BaseSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Pitchfork()
+ (ctor) Pitchfork( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Pixie.html b/Docs/types/Pixie.html new file mode 100644 index 0000000..6b158e2 --- /dev/null +++ b/Docs/types/Pixie.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Pixie + + +

Back to Server.Mobiles

+

Pixie : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Pixie()
+ (ctor) Pixie( Serial serial )
+ int Hides( get; )
+ HideType HideType( get; )
+ bool InitialInnocent( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PixieSwatter.html b/Docs/types/PixieSwatter.html new file mode 100644 index 0000000..697d5d3 --- /dev/null +++ b/Docs/types/PixieSwatter.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PixieSwatter + + +

Back to Server.Items

+

PixieSwatter : Scepter, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) PixieSwatter()
+ (ctor) PixieSwatter( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeast.html b/Docs/types/PlagueBeast.html new file mode 100644 index 0000000..1808498 --- /dev/null +++ b/Docs/types/PlagueBeast.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - PlagueBeast + + +

Back to Server.Mobiles

+

PlagueBeast : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IDevourer

+ (ctor) PlagueBeast()
+ (ctor) PlagueBeast( Serial serial )
+ bool AutoDispel( get; )
+ int DevourGoal( get; set; )
+ bool HasMetalChest( get; )
+ Poison PoisonImmune( get; )
+ int TotalDevoured( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Devour( Corpse corpse )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ void IncreaseHits( int hp )
+ virtual void OnDamagedBySpell( Mobile caster )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastBackpack.html b/Docs/types/PlagueBeastBackpack.html new file mode 100644 index 0000000..5846cc8 --- /dev/null +++ b/Docs/types/PlagueBeastBackpack.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - PlagueBeastBackpack + + +

Back to Server.Items

+

PlagueBeastBackpack : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PlagueBeastBackpack()
+ (ctor) PlagueBeastBackpack( Serial serial )
+ int DefaultDropSound( get; )
+ int DefaultGumpID( get; )
+ int DefaultMaxItems( get; )
+ int DefaultMaxWeight( get; )
+ void AddInnard( PlagueBeastInnard innard, int x, int y )
+ void AddInnard( int itemID, int hue, int x, int y )
+ virtual void Deserialize( GenericReader reader )
+ void Initialize()
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage )
+ + diff --git a/Docs/types/PlagueBeastBackupOrgan.html b/Docs/types/PlagueBeastBackupOrgan.html new file mode 100644 index 0000000..881ae9b --- /dev/null +++ b/Docs/types/PlagueBeastBackupOrgan.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - PlagueBeastBackupOrgan + + +

Back to Server.Items

+

PlagueBeastBackupOrgan : PlagueBeastOrgan, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+ (ctor) PlagueBeastBackupOrgan()
+ (ctor) PlagueBeastBackupOrgan( Serial serial )
+ bool IsCuttable( get; )
+ virtual void Carve( Mobile from, Item with )
+ virtual void Deserialize( GenericReader reader )
+ void FinishHealing()
+ virtual void FinishOpening( Mobile from )
+ virtual void Initialize()
+ virtual bool OnDropped( Mobile from, Item item, PlagueBeastComponent to )
+ virtual bool OnLifted( Mobile from, PlagueBeastComponent c )
+ void OpenOrgan()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastBlood.html b/Docs/types/PlagueBeastBlood.html new file mode 100644 index 0000000..f5f56c0 --- /dev/null +++ b/Docs/types/PlagueBeastBlood.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PlagueBeastBlood + + +

Back to Server.Items

+

PlagueBeastBlood : PlagueBeastComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+ (ctor) PlagueBeastBlood()
+ (ctor) PlagueBeastBlood( Serial serial )
+ bool Patched( get; )
+ bool Starting( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Hemorrhage()
+ virtual void OnAfterDelete()
+ virtual bool OnBandage( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastComponent.html b/Docs/types/PlagueBeastComponent.html new file mode 100644 index 0000000..5c54a72 --- /dev/null +++ b/Docs/types/PlagueBeastComponent.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - PlagueBeastComponent + + +

Back to Server.Items

+

PlagueBeastComponent : PlagueBeastInnard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+

Derived Types: PlagueBeastBlood, PlagueBeastVein

+ (ctor) PlagueBeastComponent( Serial serial )
+ (ctor) PlagueBeastComponent( int itemID, int hue )
+ (ctor) PlagueBeastComponent( int itemID, int hue, bool movable )
+ bool IsBrain( get; )
+ bool IsGland( get; )
+ bool IsReceptacle( get; )
+ PlagueBeastOrgan Organ( get; set; )
+ virtual bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool DropToItem( Mobile from, Item target, Point3D p )
+ virtual bool DropToMobile( Mobile from, Mobile target, Point3D p )
+ virtual bool DropToWorld( Mobile from, Point3D p )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragLift( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastGland.html b/Docs/types/PlagueBeastGland.html new file mode 100644 index 0000000..0cf3bd3 --- /dev/null +++ b/Docs/types/PlagueBeastGland.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PlagueBeastGland + + +

Back to Server.Items

+

PlagueBeastGland : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PlagueBeastGland()
+ (ctor) PlagueBeastGland( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastHeart.html b/Docs/types/PlagueBeastHeart.html new file mode 100644 index 0000000..15ff9c1 --- /dev/null +++ b/Docs/types/PlagueBeastHeart.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PlagueBeastHeart + + +

Back to Server.Items

+

PlagueBeastHeart : PlagueBeastInnard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+

Nested Types: InternalTimer

+ (ctor) PlagueBeastHeart()
+ (ctor) PlagueBeastHeart( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastInnard.html b/Docs/types/PlagueBeastInnard.html new file mode 100644 index 0000000..def7094 --- /dev/null +++ b/Docs/types/PlagueBeastInnard.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - PlagueBeastInnard + + +

Back to Server.Items

+

PlagueBeastInnard : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+

Derived Types: PlagueBeastComponent, PlagueBeastHeart, PlagueBeastOrgan

+ (ctor) PlagueBeastInnard( Serial serial )
+ (ctor) PlagueBeastInnard( int itemID, int hue )
+ PlagueBeastLord Owner( get; )
+ virtual void Carve( Mobile from, Item with )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool IsAccessibleTo( Mobile check )
+ virtual bool OnBandage( Mobile from )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastLord.html b/Docs/types/PlagueBeastLord.html new file mode 100644 index 0000000..e12ab00 --- /dev/null +++ b/Docs/types/PlagueBeastLord.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - PlagueBeastLord + + +

Back to Server.Mobiles

+

PlagueBeastLord : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, ICarvable, IScissorable

+

Nested Types: DecayTimer

+ (ctor) PlagueBeastLord()
+ (ctor) PlagueBeastLord( Serial serial )
+ bool IsBleeding( get; )
+ Mobile OpenedBy( get; set; )
+ Poison PoisonImmune( get; )
+ void BroadcastMessage()
+ virtual void Carve( Mobile from, Item item )
+ virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target )
+ virtual bool CheckNonlocalLift( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsAccessibleTo( Mobile check )
+ virtual bool IsSnoop( Mobile from )
+ virtual void OnDeath( Container c )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnParalyzed( Mobile from )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ void Unfreeze()
+ + diff --git a/Docs/types/PlagueBeastMaidenOrgan.html b/Docs/types/PlagueBeastMaidenOrgan.html new file mode 100644 index 0000000..32b44f3 --- /dev/null +++ b/Docs/types/PlagueBeastMaidenOrgan.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PlagueBeastMaidenOrgan + + +

Back to Server.Items

+

PlagueBeastMaidenOrgan : PlagueBeastOrgan, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+ (ctor) PlagueBeastMaidenOrgan()
+ (ctor) PlagueBeastMaidenOrgan( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void FinishOpening( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastMainOrgan.html b/Docs/types/PlagueBeastMainOrgan.html new file mode 100644 index 0000000..e876275 --- /dev/null +++ b/Docs/types/PlagueBeastMainOrgan.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PlagueBeastMainOrgan + + +

Back to Server.Items

+

PlagueBeastMainOrgan : PlagueBeastOrgan, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+ (ctor) PlagueBeastMainOrgan()
+ (ctor) PlagueBeastMainOrgan( Serial serial )
+ bool Complete( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void FinishOpening( Mobile from )
+ virtual void Initialize()
+ virtual bool OnDropped( Mobile from, Item item, PlagueBeastComponent to )
+ virtual bool OnLifted( Mobile from, PlagueBeastComponent c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastMutationCore.html b/Docs/types/PlagueBeastMutationCore.html new file mode 100644 index 0000000..a2d23a3 --- /dev/null +++ b/Docs/types/PlagueBeastMutationCore.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PlagueBeastMutationCore + + +

Back to Server.Items

+

PlagueBeastMutationCore : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable

+ (ctor) PlagueBeastMutationCore()
+ (ctor) PlagueBeastMutationCore( Serial serial )
+ bool Cut( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void KillParent( PlagueBeastLord parent )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastOrgan.html b/Docs/types/PlagueBeastOrgan.html new file mode 100644 index 0000000..1c10b4a --- /dev/null +++ b/Docs/types/PlagueBeastOrgan.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - PlagueBeastOrgan + + +

Back to Server.Items

+

PlagueBeastOrgan : PlagueBeastInnard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+

Derived Types: PlagueBeastBackupOrgan, PlagueBeastMaidenOrgan, PlagueBeastMainOrgan, PlagueBeastRockOrgan, PlagueBeastRubbleOrgan

+ (ctor) PlagueBeastOrgan()
+ (ctor) PlagueBeastOrgan( Serial serial )
+ (ctor) PlagueBeastOrgan( int itemID, int hue )
+ int BrainHue( get; set; )
+ List<PlagueBeastComponent> Components( get; )
+ bool IsCuttable( get; )
+ bool Opened( get; set; )
+ void AddComponent( PlagueBeastComponent c, int x, int y )
+ virtual void Deserialize( GenericReader reader )
+ virtual void FinishOpening( Mobile from )
+ virtual void Initialize()
+ virtual void OnAfterDelete()
+ virtual bool OnDropped( Mobile from, Item item, PlagueBeastComponent to )
+ virtual bool OnLifted( Mobile from, PlagueBeastComponent c )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastRockOrgan.html b/Docs/types/PlagueBeastRockOrgan.html new file mode 100644 index 0000000..763b5d5 --- /dev/null +++ b/Docs/types/PlagueBeastRockOrgan.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PlagueBeastRockOrgan + + +

Back to Server.Items

+

PlagueBeastRockOrgan : PlagueBeastOrgan, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+ (ctor) PlagueBeastRockOrgan()
+ (ctor) PlagueBeastRockOrgan( Serial serial )
+ bool IsCuttable( get; )
+ virtual void Carve( Mobile from, Item with )
+ virtual void Deserialize( GenericReader reader )
+ virtual void FinishOpening( Mobile from )
+ virtual bool OnLifted( Mobile from, PlagueBeastComponent c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastRubbleOrgan.html b/Docs/types/PlagueBeastRubbleOrgan.html new file mode 100644 index 0000000..1e3ff5d --- /dev/null +++ b/Docs/types/PlagueBeastRubbleOrgan.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PlagueBeastRubbleOrgan + + +

Back to Server.Items

+

PlagueBeastRubbleOrgan : PlagueBeastOrgan, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+ (static) int RandomHue( int exculde )
+ (ctor) PlagueBeastRubbleOrgan()
+ (ctor) PlagueBeastRubbleOrgan( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void FinishOpening( Mobile from )
+ virtual void Initialize()
+ virtual bool OnLifted( Mobile from, PlagueBeastComponent c )
+ virtual void OnVeinCut( Mobile from, PlagueBeastVein vein )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueBeastVein.html b/Docs/types/PlagueBeastVein.html new file mode 100644 index 0000000..5154aed --- /dev/null +++ b/Docs/types/PlagueBeastVein.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PlagueBeastVein + + +

Back to Server.Items

+

PlagueBeastVein : PlagueBeastComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, ICarvable

+ (ctor) PlagueBeastVein( Serial serial )
+ (ctor) PlagueBeastVein( int itemID, int hue )
+ bool Cut( get; )
+ void CuttingDone( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlagueSpawn.html b/Docs/types/PlagueSpawn.html new file mode 100644 index 0000000..32062fd --- /dev/null +++ b/Docs/types/PlagueSpawn.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - PlagueSpawn + + +

Back to Server.Mobiles

+

PlagueSpawn : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) PlagueSpawn()
+ (ctor) PlagueSpawn( Serial serial )
+ (ctor) PlagueSpawn( Mobile owner )
+ bool AlwaysMurderer( get; )
+ DateTime ExpireTime( get; set; )
+ Mobile Owner( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayPaperdollTo( Mobile to )
+ virtual void GenerateLoot()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlainDress.html b/Docs/types/PlainDress.html new file mode 100644 index 0000000..bf6ca84 --- /dev/null +++ b/Docs/types/PlainDress.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PlainDress + + +

Back to Server.Items

+

PlainDress : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) PlainDress()
+ (ctor) PlainDress( int hue )
+ (ctor) PlainDress( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlainLowTable.html b/Docs/types/PlainLowTable.html new file mode 100644 index 0000000..e4589e5 --- /dev/null +++ b/Docs/types/PlainLowTable.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PlainLowTable + + +

Back to Server.Items

+

PlainLowTable : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PlainLowTable()
+ (ctor) PlainLowTable( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlainWoodenChest.html b/Docs/types/PlainWoodenChest.html new file mode 100644 index 0000000..5a24c6c --- /dev/null +++ b/Docs/types/PlainWoodenChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PlainWoodenChest + + +

Back to Server.Items

+

PlainWoodenChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) PlainWoodenChest()
+ (ctor) PlainWoodenChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Plank.html b/Docs/types/Plank.html new file mode 100644 index 0000000..3e848f9 --- /dev/null +++ b/Docs/types/Plank.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Plank + + +

Back to Server.Items

+

Plank : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable

+

Nested Types: CloseTimer

+ (ctor) Plank( Serial serial )
+ (ctor) Plank( BaseBoat boat, PlankSide side, uint keyValue )
+ BaseBoat Boat( get; set; )
+ bool IsOpen( get; )
+ uint KeyValue( get; set; )
+ bool Locked( get; set; )
+ PlankSide Side( get; set; )
+ bool Starboard( get; )
+ bool CanClose()
+ void Close()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnDoubleClickDead( Mobile from )
+ virtual bool OnMoveOver( Mobile from )
+ void Open()
+ virtual void Serialize( GenericWriter writer )
+ void SetFacing( Direction dir )
+ + diff --git a/Docs/types/PlankSide.html b/Docs/types/PlankSide.html new file mode 100644 index 0000000..d2954e9 --- /dev/null +++ b/Docs/types/PlankSide.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PlankSide + + +

Back to Server.Items

+

PlankSide (Enum)

+ Port = 0,
+ Starboard = 1
+ + diff --git a/Docs/types/PlantBowl.html b/Docs/types/PlantBowl.html new file mode 100644 index 0000000..a8ea6c4 --- /dev/null +++ b/Docs/types/PlantBowl.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PlantBowl + + +

Back to Server.Engines.Plants

+

PlantBowl : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (static) bool IsDirtPatch( object obj )
+ (ctor) PlantBowl()
+ (ctor) PlantBowl( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlantGrowthIndicator.html b/Docs/types/PlantGrowthIndicator.html new file mode 100644 index 0000000..07ce904 --- /dev/null +++ b/Docs/types/PlantGrowthIndicator.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PlantGrowthIndicator + + +

Back to Server.Engines.Plants

+

PlantGrowthIndicator (Enum)

+ None = 0,
+ InvalidLocation = 1,
+ NotHealthy = 2,
+ Delay = 3,
+ Grown = 4,
+ DoubleGrown = 5
+ + diff --git a/Docs/types/PlantHealth.html b/Docs/types/PlantHealth.html new file mode 100644 index 0000000..0db9278 --- /dev/null +++ b/Docs/types/PlantHealth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PlantHealth + + +

Back to Server.Engines.Plants

+

PlantHealth (Enum)

+ Dying = 0,
+ Wilted = 1,
+ Healthy = 2,
+ Vibrant = 3
+ + diff --git a/Docs/types/PlantHue.html b/Docs/types/PlantHue.html new file mode 100644 index 0000000..3c20bc1 --- /dev/null +++ b/Docs/types/PlantHue.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - PlantHue + + +

Back to Server.Engines.Plants

+

PlantHue (Enum)

+ None = 0x00000000,
+ Black = 0x00000010,
+ White = 0x00000020,
+ Pink = 0x00000040,
+ Magenta = 0x00000080,
+ Aqua = 0x00000100,
+ FireRed = 0x00000200,
+ Crossable = 0x04000000,
+ Plain = 0x04000001,
+ Red = 0x04000002,
+ Blue = 0x04000004,
+ Purple = 0x04000006,
+ Yellow = 0x04000008,
+ Orange = 0x0400000A,
+ Green = 0x0400000C,
+ Bright = 0x08000000,
+ BrightRed = 0x0C000002,
+ BrightBlue = 0x0C000004,
+ BrightPurple = 0x0C000006,
+ BrightYellow = 0x0C000008,
+ BrightOrange = 0x0C00000A,
+ BrightGreen = 0x0C00000C
+ + diff --git a/Docs/types/PlantHueInfo.html b/Docs/types/PlantHueInfo.html new file mode 100644 index 0000000..c3cce30 --- /dev/null +++ b/Docs/types/PlantHueInfo.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - PlantHueInfo + + +

Back to Server.Engines.Plants

+

PlantHueInfo

+ (static) PlantHue Cross( PlantHue first, PlantHue second )
+ (static) PlantHueInfo GetInfo( PlantHue plantHue )
+ (static) PlantHue GetNotBright( PlantHue plantHue )
+ (static) bool IsBright( PlantHue plantHue )
+ (static) bool IsCrossable( PlantHue plantHue )
+ (static) bool IsPrimary( PlantHue plantHue )
+ (static) PlantHue RandomFirstGeneration()
+ (ctor) PlantHueInfo( int hue, int name, PlantHue plantHue )
+ (ctor) PlantHueInfo( int hue, int name, PlantHue plantHue, int gumpHue )
+ int GumpHue( get; )
+ int Hue( get; )
+ int Name( get; )
+ PlantHue PlantHue( get; )
+ PlantHue GetNotBright()
+ bool IsBright()
+ bool IsCrossable()
+ bool IsPrimary()
+ + diff --git a/Docs/types/PlantItem.html b/Docs/types/PlantItem.html new file mode 100644 index 0000000..43886c9 --- /dev/null +++ b/Docs/types/PlantItem.html @@ -0,0 +1,37 @@ + + + RunUO Documentation - Class Overview - PlantItem + + +

Back to Server.Engines.Plants

+

PlantItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (static) ArrayList Plants( get; )
+ (ctor) PlantItem()
+ (ctor) PlantItem( Serial serial )
+ (ctor) PlantItem( bool fertileDirt )
+ bool ForceShowProperties( get; )
+ bool IsCrossable( get; )
+ bool IsGrowable( get; )
+ int LabelNumber( get; )
+ SecureLevel Level( get; set; )
+ PlantHue PlantHue( get; set; )
+ PlantStatus PlantStatus( get; set; )
+ PlantSystem PlantSystem( get; )
+ PlantType PlantType( get; set; )
+ bool ShowType( get; set; )
+ bool ValidGrowthLocation( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ bool ApplyPotion( PotionEffect effect, bool testOnly, out int message )
+ virtual void Deserialize( GenericReader reader )
+ void Die()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ int GetLocalizedPlantStatus()
+ bool IsUsableBy( Mobile from )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ void PlantSeed( Mobile from, Seed seed )
+ void Pour( Mobile from, Item item )
+ virtual void Serialize( GenericWriter writer )
+ void Update()
+ + diff --git a/Docs/types/PlantPourTarget.html b/Docs/types/PlantPourTarget.html new file mode 100644 index 0000000..94c1692 --- /dev/null +++ b/Docs/types/PlantPourTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PlantPourTarget + + +

Back to Server.Engines.Plants

+

PlantPourTarget : Target

+ (ctor) PlantPourTarget( PlantItem plant )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetFinish( Mobile from )
+ + diff --git a/Docs/types/PlantResourceInfo.html b/Docs/types/PlantResourceInfo.html new file mode 100644 index 0000000..72d64de --- /dev/null +++ b/Docs/types/PlantResourceInfo.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PlantResourceInfo + + +

Back to Server.Engines.Plants

+

PlantResourceInfo

+ (static) PlantResourceInfo GetInfo( PlantType plantType, PlantHue plantHue )
+ (ctor) PlantResourceInfo( PlantType plantType, PlantHue plantHue, Type resourceType )
+ PlantHue PlantHue( get; )
+ PlantType PlantType( get; )
+ Type ResourceType( get; )
+ Item CreateResource()
+ + diff --git a/Docs/types/PlantStatus.html b/Docs/types/PlantStatus.html new file mode 100644 index 0000000..2b16325 --- /dev/null +++ b/Docs/types/PlantStatus.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - PlantStatus + + +

Back to Server.Engines.Plants

+

PlantStatus (Enum)

+ BowlOfDirt = 0,
+ Stage1 = 1,
+ Seed = 1,
+ Stage2 = 2,
+ Sapling = 2,
+ Stage3 = 3,
+ Stage4 = 4,
+ Plant = 4,
+ Stage5 = 5,
+ Stage6 = 6,
+ FullGrownPlant = 7,
+ Stage7 = 7,
+ Stage8 = 8,
+ Stage9 = 9,
+ DecorativePlant = 10,
+ DeadTwigs = 11
+ + diff --git a/Docs/types/PlantSystem.html b/Docs/types/PlantSystem.html new file mode 100644 index 0000000..0989655 --- /dev/null +++ b/Docs/types/PlantSystem.html @@ -0,0 +1,55 @@ + + + RunUO Documentation - Class Overview - PlantSystem + + +

Back to Server.Engines.Plants

+

PlantSystem

+ (static) void Configure()
+ (static) void EventSink_Login( LoginEventArgs args )
+ (static) void EventSink_WorldLoad()
+ (static) void EventSink_WorldSave( WorldSaveEventArgs args )
+ (static) void GrowAll()
+ (ctor) PlantSystem( PlantItem plant, bool fertileDirt )
+ (ctor) PlantSystem( PlantItem plant, GenericReader reader )
+ int AvailableResources( get; set; )
+ int AvailableSeeds( get; set; )
+ int CurePotion( get; set; )
+ int Disease( get; set; )
+ bool FertileDirt( get; set; )
+ int Fungus( get; set; )
+ PlantGrowthIndicator GrowthIndicator( get; )
+ bool HasMaladies( get; )
+ int HealPotion( get; set; )
+ PlantHealth Health( get; )
+ int Hits( get; set; )
+ int Infestation( get; set; )
+ bool IsFullCurePotion( get; )
+ bool IsFullHealPotion( get; )
+ bool IsFullPoisonPotion( get; )
+ bool IsFullStrengthPotion( get; )
+ bool IsFullWater( get; )
+ int LeftResources( get; set; )
+ int LeftSeeds( get; set; )
+ int MaxHits( get; )
+ DateTime NextGrowth( get; )
+ PlantItem Plant( get; )
+ int Poison( get; set; )
+ int PoisonPotion( get; set; )
+ bool PollenProducing( get; )
+ bool Pollinated( get; set; )
+ PlantHue SeedHue( get; set; )
+ PlantType SeedType( get; set; )
+ int StrengthPotion( get; set; )
+ int Water( get; set; )
+ void ApplyBeneficEffects()
+ bool ApplyMaladiesEffects()
+ void DoGrowthCheck()
+ int GetLocalizedDirtStatus()
+ int GetLocalizedHealth()
+ void Grow()
+ void Reset( bool potions )
+ void Save( GenericWriter writer )
+ void UpdateMaladies()
+ + diff --git a/Docs/types/PlantType.html b/Docs/types/PlantType.html new file mode 100644 index 0000000..8354d21 --- /dev/null +++ b/Docs/types/PlantType.html @@ -0,0 +1,51 @@ + + + RunUO Documentation - Class Overview - PlantType + + +

Back to Server.Engines.Plants

+

PlantType (Enum)

+ CampionFlowers = 0,
+ Poppies = 1,
+ Snowdrops = 2,
+ Bulrushes = 3,
+ Lilies = 4,
+ PampasGrass = 5,
+ Rushes = 6,
+ ElephantEarPlant = 7,
+ Fern = 8,
+ PonytailPalm = 9,
+ SmallPalm = 10,
+ CenturyPlant = 11,
+ WaterPlant = 12,
+ SnakePlant = 13,
+ PricklyPearCactus = 14,
+ BarrelCactus = 15,
+ TribarrelCactus = 16,
+ CommonGreenBonsai = 17,
+ CommonPinkBonsai = 18,
+ UncommonGreenBonsai = 19,
+ UncommonPinkBonsai = 20,
+ RareGreenBonsai = 21,
+ RarePinkBonsai = 22,
+ ExceptionalBonsai = 23,
+ ExoticBonsai = 24,
+ Cactus = 25,
+ FlaxFlowers = 26,
+ FoxgloveFlowers = 27,
+ HopsEast = 28,
+ OrfluerFlowers = 29,
+ CypressTwisted = 30,
+ HedgeShort = 31,
+ JuniperBush = 32,
+ SnowdropPatch = 33,
+ Cattails = 34,
+ PoppyPatch = 35,
+ SpiderTree = 36,
+ WaterLily = 37,
+ CypressStraight = 38,
+ HedgeTall = 39,
+ HopsSouth = 40,
+ SugarCanes = 41
+ + diff --git a/Docs/types/PlantTypeInfo.html b/Docs/types/PlantTypeInfo.html new file mode 100644 index 0000000..40ad79f --- /dev/null +++ b/Docs/types/PlantTypeInfo.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - PlantTypeInfo + + +

Back to Server.Engines.Plants

+

PlantTypeInfo

+ (static) PlantType Cross( PlantType first, PlantType second )
+ (static) int GetBonsaiTitle( PlantType plantType )
+ (static) PlantTypeInfo GetInfo( PlantType plantType )
+ (static) bool IsCrossable( PlantType plantType )
+ (static) PlantType RandomBonsai( double increaseRatio )
+ (static) PlantType RandomFirstGeneration()
+ (static) PlantType RandomPeculiarGroupFour()
+ (static) PlantType RandomPeculiarGroupOne()
+ (static) PlantType RandomPeculiarGroupThree()
+ (static) PlantType RandomPeculiarGroupTwo()
+ (ctor) PlantTypeInfo( int itemID, int offsetX, int offsetY, PlantType plantType, bool containsPlant, bool flowery, bool crossable )
+ bool ContainsPlant( get; )
+ bool Crossable( get; )
+ bool Flowery( get; )
+ int ItemID( get; )
+ int Name( get; )
+ int OffsetX( get; )
+ int OffsetY( get; )
+ PlantType PlantType( get; )
+ + diff --git a/Docs/types/Plate.html b/Docs/types/Plate.html new file mode 100644 index 0000000..4a60365 --- /dev/null +++ b/Docs/types/Plate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Plate + + +

Back to Server.Items

+

Plate : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Plate()
+ (ctor) Plate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateArms.html b/Docs/types/PlateArms.html new file mode 100644 index 0000000..be79b9d --- /dev/null +++ b/Docs/types/PlateArms.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - PlateArms + + +

Back to Server.Items

+

PlateArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) PlateArms()
+ (ctor) PlateArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateBattleKabuto.html b/Docs/types/PlateBattleKabuto.html new file mode 100644 index 0000000..b62d255 --- /dev/null +++ b/Docs/types/PlateBattleKabuto.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - PlateBattleKabuto + + +

Back to Server.Items

+

PlateBattleKabuto : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: DaimyosHelm

+ (ctor) PlateBattleKabuto()
+ (ctor) PlateBattleKabuto( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateChest.html b/Docs/types/PlateChest.html new file mode 100644 index 0000000..33a960a --- /dev/null +++ b/Docs/types/PlateChest.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - PlateChest + + +

Back to Server.Items

+

PlateChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: HeartOfTheLion, HolyKnightsBreastplate

+ (ctor) PlateChest()
+ (ctor) PlateChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateDo.html b/Docs/types/PlateDo.html new file mode 100644 index 0000000..c0a9469 --- /dev/null +++ b/Docs/types/PlateDo.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - PlateDo + + +

Back to Server.Items

+

PlateDo : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: AncientSamuraiDo, RuneBeetleCarapace

+ (ctor) PlateDo()
+ (ctor) PlateDo( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateGloves.html b/Docs/types/PlateGloves.html new file mode 100644 index 0000000..0cc579d --- /dev/null +++ b/Docs/types/PlateGloves.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - PlateGloves + + +

Back to Server.Items

+

PlateGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: GuantletsOfAnger, InquisitorsResolution

+ (ctor) PlateGloves()
+ (ctor) PlateGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateGorget.html b/Docs/types/PlateGorget.html new file mode 100644 index 0000000..020aabb --- /dev/null +++ b/Docs/types/PlateGorget.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - PlateGorget + + +

Back to Server.Items

+

PlateGorget : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: GladiatorsCollar, JackalsCollar

+ (ctor) PlateGorget()
+ (ctor) PlateGorget( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateHaidate.html b/Docs/types/PlateHaidate.html new file mode 100644 index 0000000..ac47285 --- /dev/null +++ b/Docs/types/PlateHaidate.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PlateHaidate + + +

Back to Server.Items

+

PlateHaidate : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) PlateHaidate()
+ (ctor) PlateHaidate( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateHatsuburi.html b/Docs/types/PlateHatsuburi.html new file mode 100644 index 0000000..d034243 --- /dev/null +++ b/Docs/types/PlateHatsuburi.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PlateHatsuburi + + +

Back to Server.Items

+

PlateHatsuburi : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) PlateHatsuburi()
+ (ctor) PlateHatsuburi( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateHelm.html b/Docs/types/PlateHelm.html new file mode 100644 index 0000000..cee3be1 --- /dev/null +++ b/Docs/types/PlateHelm.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - PlateHelm + + +

Back to Server.Items

+

PlateHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: HelmOfInsight

+ (ctor) PlateHelm()
+ (ctor) PlateHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateHiroSode.html b/Docs/types/PlateHiroSode.html new file mode 100644 index 0000000..652239d --- /dev/null +++ b/Docs/types/PlateHiroSode.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PlateHiroSode + + +

Back to Server.Items

+

PlateHiroSode : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) PlateHiroSode()
+ (ctor) PlateHiroSode( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateLegs.html b/Docs/types/PlateLegs.html new file mode 100644 index 0000000..d553e8f --- /dev/null +++ b/Docs/types/PlateLegs.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - PlateLegs + + +

Back to Server.Items

+

PlateLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: LeggingsOfEmbers

+ (ctor) PlateLegs()
+ (ctor) PlateLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateMempo.html b/Docs/types/PlateMempo.html new file mode 100644 index 0000000..7b94b3d --- /dev/null +++ b/Docs/types/PlateMempo.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PlateMempo + + +

Back to Server.Items

+

PlateMempo : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) PlateMempo()
+ (ctor) PlateMempo( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlateSuneate.html b/Docs/types/PlateSuneate.html new file mode 100644 index 0000000..8e277fe --- /dev/null +++ b/Docs/types/PlateSuneate.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - PlateSuneate + + +

Back to Server.Items

+

PlateSuneate : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: LegsOfStability

+ (ctor) PlateSuneate()
+ (ctor) PlateSuneate( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlayMusic.html b/Docs/types/PlayMusic.html new file mode 100644 index 0000000..61d8e30 --- /dev/null +++ b/Docs/types/PlayMusic.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PlayMusic + + +

Back to Server.Network

+

PlayMusic : Packet

+ (static) Packet GetInstance( MusicName name )
+ (ctor) PlayMusic( MusicName name )
+ + diff --git a/Docs/types/PlayServerAck.html b/Docs/types/PlayServerAck.html new file mode 100644 index 0000000..a03f1a9 --- /dev/null +++ b/Docs/types/PlayServerAck.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PlayServerAck + + +

Back to Server.Network

+

PlayServerAck : Packet

+ (ctor) PlayServerAck( ServerInfo si )
+ + diff --git a/Docs/types/PlaySound.html b/Docs/types/PlaySound.html new file mode 100644 index 0000000..43fcf94 --- /dev/null +++ b/Docs/types/PlaySound.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PlaySound + + +

Back to Server.Network

+

PlaySound : Packet

+ (ctor) PlaySound( int soundID, IPoint3D target )
+ + diff --git a/Docs/types/Player.html b/Docs/types/Player.html new file mode 100644 index 0000000..1a25d13 --- /dev/null +++ b/Docs/types/Player.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Player + + +

Back to Server.Ethics

+

Player

+ (static) Player Find( Mobile mob )
+ (static) Player Find( Mobile mob, bool inherit )
+ (ctor) Player( Ethic ethic, Mobile mobile )
+ (ctor) Player( Ethic ethic, GenericReader reader )
+ Ethic Ethic( get; )
+ Mobile Familiar( get; set; )
+ int History( get; set; )
+ bool IsShielded( get; )
+ Mobile Mobile( get; )
+ int Power( get; set; )
+ Mobile Steed( get; set; )
+ void Attach()
+ void BeginShield()
+ void CheckAttach()
+ void Detach()
+ void FinishShield()
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlayerBBEast.html b/Docs/types/PlayerBBEast.html new file mode 100644 index 0000000..359c30b --- /dev/null +++ b/Docs/types/PlayerBBEast.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PlayerBBEast + + +

Back to Server.Items

+

PlayerBBEast : BasePlayerBB, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) PlayerBBEast()
+ (ctor) PlayerBBEast( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlayerBBGump.html b/Docs/types/PlayerBBGump.html new file mode 100644 index 0000000..c3a2ce4 --- /dev/null +++ b/Docs/types/PlayerBBGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PlayerBBGump + + +

Back to Server.Items

+

PlayerBBGump : Gump

+ (ctor) PlayerBBGump( Mobile from, BaseHouse house, BasePlayerBB board, int page )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/PlayerBBMessage.html b/Docs/types/PlayerBBMessage.html new file mode 100644 index 0000000..59399e1 --- /dev/null +++ b/Docs/types/PlayerBBMessage.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PlayerBBMessage + + +

Back to Server.Items

+

PlayerBBMessage

+ (ctor) PlayerBBMessage( GenericReader reader )
+ (ctor) PlayerBBMessage( DateTime time, Mobile poster, string message )
+ string Message( get; set; )
+ Mobile Poster( get; set; )
+ DateTime Time( get; set; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlayerBBSouth.html b/Docs/types/PlayerBBSouth.html new file mode 100644 index 0000000..cf02517 --- /dev/null +++ b/Docs/types/PlayerBBSouth.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PlayerBBSouth + + +

Back to Server.Items

+

PlayerBBSouth : BasePlayerBB, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) PlayerBBSouth()
+ (ctor) PlayerBBSouth( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlayerBarkeeper.html b/Docs/types/PlayerBarkeeper.html new file mode 100644 index 0000000..e4f05ad --- /dev/null +++ b/Docs/types/PlayerBarkeeper.html @@ -0,0 +1,50 @@ + + + RunUO Documentation - Class Overview - PlayerBarkeeper + + +

Back to Server.Mobiles

+

PlayerBarkeeper : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) PlayerBarkeeper( Serial serial )
+ (ctor) PlayerBarkeeper( Mobile owner, BaseHouse house )
+ bool DisallowAllMoves( get; )
+ BaseHouse House( get; set; )
+ bool IsActiveBuyer( get; )
+ bool IsActiveSeller( get; )
+ bool NoHouseRestrictions( get; )
+ Mobile Owner( get; set; )
+ BarkeeperRumor[] Rumors( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ string TipMessage( get; set; )
+ void BeginChangeAppearance( Mobile from )
+ void BeginChangeRumor( Mobile from, int index )
+ void BeginChangeTip( Mobile from )
+ void BeginChangeTitle( Mobile from )
+ void BeginManagement( Mobile from )
+ void CancelChangeTitle( Mobile from )
+ void ChangeGender( Mobile from )
+ virtual bool CheckGold( Mobile from, Item dropped )
+ virtual void Deserialize( GenericReader reader )
+ void Dismiss()
+ void EndChangeKeyword( Mobile from, int index, string text )
+ void EndChangeRumor( Mobile from, int index, string text )
+ void EndChangeTip( Mobile from, string text )
+ void EndChangeTitle( Mobile from, string title, bool vendor )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual bool GetGender()
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ bool IsOwner( Mobile from )
+ virtual void OnAfterDelete()
+ virtual bool OnBeforeDeath()
+ virtual void OnSpeech( SpeechEventArgs e )
+ void RemoveRumor( Mobile from, int index )
+ void RemoveTip( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void ShoutNews_Callback( object state )
+ void UpgradeFromVersion0()
+ + diff --git a/Docs/types/PlayerCollection.html b/Docs/types/PlayerCollection.html new file mode 100644 index 0000000..156eb59 --- /dev/null +++ b/Docs/types/PlayerCollection.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PlayerCollection + + +

Back to Server.Ethics

+

PlayerCollection : Collection`1, IList<Player>, ICollection<Player>, IEnumerable<Player>, IEnumerable, IList, ICollection

+ (ctor) PlayerCollection()
+ + diff --git a/Docs/types/PlayerDeathEventArgs.html b/Docs/types/PlayerDeathEventArgs.html new file mode 100644 index 0000000..9118321 --- /dev/null +++ b/Docs/types/PlayerDeathEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PlayerDeathEventArgs + + +

Back to Server

+

PlayerDeathEventArgs : EventArgs

+ (ctor) PlayerDeathEventArgs( Mobile mobile )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/PlayerDeathEventHandler.html b/Docs/types/PlayerDeathEventHandler.html new file mode 100644 index 0000000..68c905f --- /dev/null +++ b/Docs/types/PlayerDeathEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PlayerDeathEventHandler + + +

Back to Server

+

PlayerDeathEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) PlayerDeathEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( PlayerDeathEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( PlayerDeathEventArgs e )
+ + diff --git a/Docs/types/PlayerFlag.html b/Docs/types/PlayerFlag.html new file mode 100644 index 0000000..6dfbc5a --- /dev/null +++ b/Docs/types/PlayerFlag.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PlayerFlag + + +

Back to Server.Mobiles

+

PlayerFlag (Enum)

+ None = 0x00000000,
+ Glassblowing = 0x00000001,
+ Masonry = 0x00000002,
+ SandMining = 0x00000004,
+ StoneMining = 0x00000008,
+ ToggleMiningStone = 0x00000010,
+ KarmaLocked = 0x00000020,
+ AutoRenewInsurance = 0x00000040,
+ UseOwnFilter = 0x00000080,
+ PublicMyRunUO = 0x00000100,
+ PagingSquelched = 0x00000200,
+ Young = 0x00000400,
+ AcceptGuildInvites = 0x00000800,
+ DisplayChampionTitle = 0x00001000,
+ HasStatReward = 0x00002000
+ + diff --git a/Docs/types/PlayerMobile.html b/Docs/types/PlayerMobile.html new file mode 100644 index 0000000..13d5d52 --- /dev/null +++ b/Docs/types/PlayerMobile.html @@ -0,0 +1,235 @@ + + + RunUO Documentation - Class Overview - PlayerMobile + + +

Back to Server.Mobiles

+

PlayerMobile : Mobile, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: CallbackEntry, CancelRenewInventoryInsuranceGump, ChampionTitleInfo, ContextCallback, CountAndTimeStamp

+ (static) void CheckAtrophies( Mobile m )
+ (static) int CheckContentForTrade( Item item )
+ (static) void CheckPets()
+ (static) void ClearSpecialMovesCallback( object state )
+ (static) void Disconnect( object state )
+ (static) void EventSink_Connected( ConnectedEventArgs e )
+ (static) void EventSink_Disconnected( DisconnectedEventArgs e )
+ (static) Direction GetDirection4( Point3D from, Point3D to )
+ (static) void Initialize()
+ (static) bool MovementThrottle_Callback( NetState ns )
+ (static) void OnLogin( LoginEventArgs e )
+ (static) void OnLogout( LogoutEventArgs e )
+ (static) void SendToStaffMessage( Mobile from, string text )
+ (static) void SendToStaffMessage( Mobile from, string format, object[] args )
+ (ctor) PlayerMobile()
+ (ctor) PlayerMobile( Serial s )
+ SkillName AcceleratedSkill( get; set; )
+ DateTime AcceleratedStart( get; set; )
+ bool AcceptGuildInvites( get; set; )
+ List<Mobile> AllFollowers( get; )
+ int AllianceMessageHue( get; set; )
+ SkillName[] AnimalFormRestrictedSkills( get; )
+ DateTime AnkhNextUse( get; set; )
+ double ArmorRating( get; )
+ bool AutoRenewInsurance( get; set; )
+ List<Mobile> AutoStabled( get; )
+ int AvailableResurrects( get; set; )
+ bool BedrollLogout( get; set; )
+ BOBFilter BOBFilter( get; )
+ ChampionTitleInfo ChampionTitles( get; set; )
+ bool ChangedMyRunUO( get; set; )
+ int CompassionGains( get; set; )
+ DesignContext DesignContext( get; set; )
+ int Dex( get; set; )
+ TimeSpan DisguiseTimeLeft( get; )
+ bool DisplayChampionTitle( get; set; )
+ List<QuestRestartInfo> DoneQuests( get; set; )
+ Type EnemyOfOneType( get; set; )
+ Player EthicPlayer( get; set; )
+ int ExecutesLightningStrike( get; set; )
+ PlayerState FactionPlayerState( get; set; )
+ PlayerFlag Flags( get; set; )
+ TimeSpan GameTime( get; )
+ bool Glassblowing( get; set; )
+ int GuildMessageHue( get; set; )
+ RankDefinition GuildRank( get; set; )
+ bool HasStatReward( get; set; )
+ bool Hidden( get; set; )
+ int HitsMax( get; )
+ bool HonorActive( get; set; )
+ bool IgnoreMobiles( get; set; )
+ int Int( get; set; )
+ bool IsStealthing( get; set; )
+ List<Mobile> JusticeProtectors( get; set; )
+ bool KarmaLocked( get; set; )
+ int KnownRecipes( get; )
+ DateTime LastCompassionLoss( get; set; )
+ DateTime LastEscortTime( get; set; )
+ DateTime LastHonorLoss( get; set; )
+ DateTime LastHonorUse( get; set; )
+ DateTime LastJusticeLoss( get; set; )
+ DateTime LastOnline( get; set; )
+ DateTime LastPetBallTime( get; set; )
+ DateTime LastSacrificeGain( get; set; )
+ DateTime LastSacrificeLoss( get; set; )
+ DateTime LastValorLoss( get; set; )
+ SkillName Learning( get; set; )
+ int Luck( get; )
+ int ManaMax( get; )
+ bool Masonry( get; set; )
+ int MaxWeight( get; )
+ bool NewGuildDisplay( get; )
+ DateTime NextBODTurnInTime( get; set; )
+ DateTime NextCompassionDay( get; set; )
+ TimeSpan NextSmithBulkOrder( get; set; )
+ TimeSpan NextTailorBulkOrder( get; set; )
+ bool NinjaWepCooldown( get; set; )
+ NpcGuild NpcGuild( get; set; )
+ TimeSpan NpcGuildGameTime( get; set; )
+ DateTime NpcGuildJoinTime( get; set; )
+ bool PagingSquelched( get; set; )
+ bool Paralyzed( get; set; )
+ DateTime PeacedUntil( get; set; )
+ List<Mobile> PermaFlags( get; )
+ int Profession( get; set; )
+ bool PublicMyRunUO( get; set; )
+ QuestSystem Quest( get; set; )
+ double RacialSkillBonus( get; )
+ HonorContext ReceivedHonorContext( get; set; )
+ List<Mobile> RecentlyReported( get; set; )
+ Dictionary<Type,Int32> RecoverableAmmo( get; )
+ bool SandMining( get; set; )
+ TimeSpan SavagePaintExpiration( get; set; )
+ HonorContext SentHonorContext( get; set; )
+ DateTime SessionStart( get; )
+ SolenFriendship SolenFriendship( get; set; )
+ SpeechLog SpeechLog( get; )
+ int StamMax( get; )
+ int StepsTaken( get; set; )
+ bool StoneMining( get; set; )
+ int Str( get; set; )
+ bool ToggleMiningStone( get; set; )
+ int ToTItemsTurnedIn( get; set; )
+ int ToTTotalMonsterFame( get; set; )
+ bool UseOwnFilter( get; set; )
+ bool UsesFastwalkPrevention( get; )
+ List<Mobile> VisibilityList( get; )
+ bool WaitingForEnemy( get; set; )
+ bool Young( get; set; )
+ virtual void AcquireRecipe( Recipe r )
+ virtual void AcquireRecipe( int recipeID )
+ void AddArmorRating( ref double rating, Item armor )
+ void AddBuff( BuffInfo b )
+ virtual bool AllowItemUse( Item item )
+ virtual bool AllowSkillUse( SkillName skill )
+ bool AntiMacroCheck( Skill skill, object obj )
+ virtual string ApplyNameSuffix( string suffix )
+ virtual ApplyPoisonResult ApplyPoison( Mobile from, Poison poison )
+ void AutoRenewInventoryInsurance()
+ void AutoStablePets()
+ virtual bool CanBeBeneficial( Mobile target, bool message, bool allowDead )
+ virtual bool CanBeHarmful( Mobile target, bool message, bool ignoreOurBlessedness )
+ void CancelProtection()
+ void CancelRenewInventoryInsurance()
+ bool CanInsure( Item item )
+ virtual bool CanSee( Mobile m )
+ virtual bool CanSee( Item item )
+ virtual bool CheckContextMenuDisplay( IEntity target )
+ virtual bool CheckEquip( Item item )
+ bool CheckInsuranceOnDeath( Item item )
+ void CheckKillDecay()
+ virtual void CheckLightLevels( bool forceResend )
+ virtual bool CheckMovement( Direction d, out int newZ )
+ virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target )
+ virtual bool CheckPoisonImmunity( Mobile from, Poison poison )
+ virtual bool CheckShove( Mobile shoved )
+ virtual bool CheckTrade( Mobile to, Item item, SecureTradeContainer cont, bool message, bool checkItems, int plusItems, int plusWeight )
+ bool CheckYoungHealTime()
+ bool CheckYoungProtection( Mobile from )
+ void ClaimAutoStabledPets()
+ virtual void ComputeBaseLightLevels( out int global, out int personal )
+ virtual TimeSpan ComputeMovementSpeed( Direction dir, bool checkTurning )
+ void CreateHair( bool hair, int id, int hue )
+ virtual void Damage( int amount, Mobile from )
+ virtual void Delta( MobileDelta flag )
+ void DeltaEnemies( Type oldType, Type newType )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayPaperdollTo( Mobile to )
+ virtual void DisruptiveAction()
+ virtual void DoSpeech( string text, int[] keywords, MessageType type, int hue )
+ bool FindItems_Callback( Item item )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ bool GetFlag( PlayerFlag flag )
+ virtual DeathMoveResult GetInventoryMoveResultFor( Item item )
+ virtual TimeSpan GetLogoutDelay()
+ virtual int GetMaxResistance( ResistanceType type )
+ virtual int GetMinResistance( ResistanceType type )
+ virtual int GetOldPacketFlags()
+ virtual int GetPacketFlags()
+ virtual DeathMoveResult GetParentMoveResultFor( Item item )
+ virtual void GetProperties( ObjectPropertyList list )
+ void GetVendor()
+ virtual bool HasRecipe( Recipe r )
+ virtual bool HasRecipe( int recipeID )
+ void InternalChangeHair( bool hair, int id, ref int storeID, ref int storeHue )
+ void InternalRestoreHair( bool hair, ref int id, ref int hue )
+ void InvalidateMyRunUO()
+ virtual bool IsHarmfulCriminal( Mobile target )
+ void LeaveHouse()
+ virtual bool Move( Direction d )
+ virtual void MoveToWorld( Point3D loc, Map map )
+ virtual bool MutateSpeech( List<Mobile> hears, ref string text, ref object context )
+ virtual void OnAccessLevelChanged( AccessLevel oldLevel )
+ virtual void OnAfterDelete()
+ virtual bool OnBeforeDeath()
+ virtual void OnBeneficialAction( Mobile target, bool isCriminal )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void OnDeath( Container c )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDroppedItemToWorld( Item item, Point3D location )
+ virtual void OnFameChange( int oldValue )
+ virtual void OnGenderChanged( bool oldFemale )
+ virtual void OnGuildChange( BaseGuild oldGuild )
+ virtual void OnGuildTitleChange( string oldTitle )
+ virtual void OnItemAdded( Item item )
+ virtual void OnItemRemoved( Item item )
+ virtual void OnKarmaChange( int oldValue )
+ virtual void OnKillsChange( int oldValue )
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnManaChange( int oldValue )
+ virtual void OnMapChange( Map oldMap )
+ virtual bool OnMove( Direction d )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void OnNetStateChanged()
+ virtual void OnPoisonImmunity( Mobile from, Poison poison )
+ virtual void OnRaceChange( Race oldRace )
+ virtual void OnRawStatChange( StatType stat, int oldValue )
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnSkillChange( SkillName skill, double oldBase )
+ virtual void OnSkillInvalidated( Skill skill )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void OnSubItemAdded( Item item )
+ virtual void OnWarmodeChanged()
+ virtual void RecheckTownProtection()
+ void RecoverAmmo()
+ void RemoveBuff( BuffInfo b )
+ void RemoveBuff( BuffIcon b )
+ void ResendBuffs()
+ void ResetKillTime()
+ virtual void ResetRecipes()
+ virtual void Resurrect()
+ virtual void RevealingAction()
+ void RevertHair()
+ void SendYoungDeathNotice()
+ virtual void Serialize( GenericWriter writer )
+ void SetFlag( PlayerFlag flag, bool value )
+ void SetHairMods( int hairID, int beardID )
+ virtual void SetLocation( Point3D loc, bool isTeleport )
+ void ToggleChampionTitleDisplay()
+ void ToggleItemInsurance()
+ void ToggleItemInsurance_Callback( Mobile from, object obj )
+ void ValidateEquipment()
+ void ValidateEquipment_Sandbox()
+ bool YoungDeathTeleport()
+ + diff --git a/Docs/types/PlayerMove.html b/Docs/types/PlayerMove.html new file mode 100644 index 0000000..f37e4c1 --- /dev/null +++ b/Docs/types/PlayerMove.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PlayerMove + + +

Back to Server.Network

+

PlayerMove : Packet

+ (ctor) PlayerMove( Direction d )
+ + diff --git a/Docs/types/PlayerState.html b/Docs/types/PlayerState.html new file mode 100644 index 0000000..d08fe97 --- /dev/null +++ b/Docs/types/PlayerState.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - PlayerState + + +

Back to Server.Factions

+

PlayerState : IComparable

+ (static) PlayerState Find( Mobile mob )
+ (ctor) PlayerState( GenericReader reader, Faction faction, List<PlayerState> owner )
+ (ctor) PlayerState( Mobile mob, Faction faction, List<PlayerState> owner )
+ Faction Faction( get; )
+ Town Finance( get; set; )
+ bool IsActive( get; set; )
+ bool IsLeaving( get; )
+ int KillPoints( get; set; )
+ DateTime LastHonorTime( get; set; )
+ DateTime Leaving( get; set; )
+ MerchantTitle MerchantTitle( get; set; )
+ Mobile Mobile( get; )
+ List<PlayerState> Owner( get; )
+ RankDefinition Rank( get; )
+ int RankIndex( get; set; )
+ Town Sheriff( get; set; )
+ List<SilverGivenEntry> SilverGiven( get; )
+ void Attach()
+ bool CanGiveSilverTo( Mobile mob )
+ virtual int CompareTo( object obj )
+ void Invalidate()
+ void OnGivenSilverTo( Mobile mob )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlayerVendor.html b/Docs/types/PlayerVendor.html new file mode 100644 index 0000000..8921ecb --- /dev/null +++ b/Docs/types/PlayerVendor.html @@ -0,0 +1,68 @@ + + + RunUO Documentation - Class Overview - PlayerVendor + + +

Back to Server.Mobiles

+

PlayerVendor : Mobile, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: RentedVendor

+

Nested Types: CollectGoldPrompt, PayTimer, PVBuyTarget, ReturnVendorEntry, ShopNamePrompt, VendorNamePrompt, VendorPricePrompt

+ (static) void TryToBuy( Item item, Mobile from )
+ (ctor) PlayerVendor( Serial serial )
+ (ctor) PlayerVendor( Mobile owner, BaseHouse house )
+ int BankAccount( get; set; )
+ int ChargePerDay( get; )
+ int ChargePerRealWorldDay( get; )
+ int HoldGold( get; set; )
+ BaseHouse House( get; set; )
+ DateTime NextPayTime( get; )
+ Mobile Owner( get; set; )
+ PlayerVendorPlaceholder Placeholder( get; set; )
+ string ShopName( get; set; )
+ void ActivateNewVendorSystem()
+ virtual bool AllowEquipFrom( Mobile from )
+ virtual bool CanBeDamaged()
+ bool CanBeVendorItem( Item item )
+ bool CanInteractWith( Mobile from, bool ownerOnly )
+ virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target )
+ virtual bool CheckNonlocalLift( Mobile from, Item item )
+ bool CheckTeleport( Mobile to )
+ void CollectGold( Mobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Destroy( bool toBackpack )
+ void Dismiss( Mobile from )
+ virtual void DisplayPaperdollTo( Mobile m )
+ void FixDresswear()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ List<Item> GetItems()
+ virtual void GetProperties( ObjectPropertyList list )
+ VendorItem GetVendorItem( Item item )
+ int GiveGold( Mobile to, int amount )
+ virtual bool HandlesOnSpeech( Mobile from )
+ void InitBody()
+ virtual void InitOutfit()
+ virtual bool IsOwner( Mobile m )
+ virtual bool IsSnoop( Mobile from )
+ void NonLocalDropCallback( object state )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item item )
+ void OnItemGiven( Mobile from, Item item )
+ virtual void OnItemRemoved( Item item )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void OnSubItemAdded( Item item )
+ virtual void OnSubItemBounceCleared( Item item )
+ virtual void OnSubItemRemoved( Item item )
+ void OpenBackpack( Mobile from )
+ void RemoveVendorItem( Item item )
+ void Rename( Mobile from )
+ void RenameShop( Mobile from )
+ void Return()
+ void SendOwnerGump( Mobile to )
+ virtual void Serialize( GenericWriter writer )
+ VendorItem SetVendorItem( Item item, int price, string description )
+ VendorItem SetVendorItem( Item item, int price, string description, DateTime created )
+ void UpgradeFromVersion0( object newVendorSystem )
+ bool WasNamed( string speech )
+ + diff --git a/Docs/types/PlayerVendorBuyGump.html b/Docs/types/PlayerVendorBuyGump.html new file mode 100644 index 0000000..b1ca24b --- /dev/null +++ b/Docs/types/PlayerVendorBuyGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PlayerVendorBuyGump + + +

Back to Server.Gumps

+

PlayerVendorBuyGump : Gump

+ (ctor) PlayerVendorBuyGump( PlayerVendor vendor, VendorItem vi )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/PlayerVendorCustomizeGump.html b/Docs/types/PlayerVendorCustomizeGump.html new file mode 100644 index 0000000..d5389fd --- /dev/null +++ b/Docs/types/PlayerVendorCustomizeGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PlayerVendorCustomizeGump + + +

Back to Server.Gumps

+

PlayerVendorCustomizeGump : Gump

+

Nested Types: CustomCategory, CustomItem, PVHuePicker

+ (ctor) PlayerVendorCustomizeGump( Mobile v, Mobile from )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/PlayerVendorOwnerGump.html b/Docs/types/PlayerVendorOwnerGump.html new file mode 100644 index 0000000..bbd9fd9 --- /dev/null +++ b/Docs/types/PlayerVendorOwnerGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PlayerVendorOwnerGump + + +

Back to Server.Gumps

+

PlayerVendorOwnerGump : Gump

+ (ctor) PlayerVendorOwnerGump( PlayerVendor vendor )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/PlayerVendorPlaceholder.html b/Docs/types/PlayerVendorPlaceholder.html new file mode 100644 index 0000000..5f85c3e --- /dev/null +++ b/Docs/types/PlayerVendorPlaceholder.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PlayerVendorPlaceholder + + +

Back to Server.Mobiles

+

PlayerVendorPlaceholder : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: ExpireTimer

+ (ctor) PlayerVendorPlaceholder( Serial serial )
+ (ctor) PlayerVendorPlaceholder( PlayerVendor vendor )
+ PlayerVendor Vendor( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDelete()
+ void RestartTimer()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlayerVendorTargetAttribute.html b/Docs/types/PlayerVendorTargetAttribute.html new file mode 100644 index 0000000..e41203d --- /dev/null +++ b/Docs/types/PlayerVendorTargetAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PlayerVendorTargetAttribute + + +

Back to Server.Mobiles

+

PlayerVendorTargetAttribute : Attribute, _Attribute

+ (ctor) PlayerVendorTargetAttribute()
+ + diff --git a/Docs/types/PlayingCards.html b/Docs/types/PlayingCards.html new file mode 100644 index 0000000..dd9c0f7 --- /dev/null +++ b/Docs/types/PlayingCards.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PlayingCards + + +

Back to Server.Items

+

PlayingCards : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PlayingCards()
+ (ctor) PlayingCards( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PlayingCards2.html b/Docs/types/PlayingCards2.html new file mode 100644 index 0000000..90bea20 --- /dev/null +++ b/Docs/types/PlayingCards2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PlayingCards2 + + +

Back to Server.Items

+

PlayingCards2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PlayingCards2()
+ (ctor) PlayingCards2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Point2D.html b/Docs/types/Point2D.html new file mode 100644 index 0000000..1f4fe69 --- /dev/null +++ b/Docs/types/Point2D.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Point2D + + +

Back to Server

+

Point2D : IPoint2D, IComparable, IComparable<Point2D>

+ (static) Point2D Parse( string value )
+ (ctor) Point2D( IPoint2D p )
+ (ctor) Point2D( int x, int y )
+ int X( get; set; )
+ int Y( get; set; )
+ virtual int CompareTo( object other )
+ virtual int CompareTo( Point2D other )
+ virtual bool Equals( object o )
+ virtual int GetHashCode()
+ virtual string ToString()
+ + diff --git a/Docs/types/Point3D.html b/Docs/types/Point3D.html new file mode 100644 index 0000000..66c4dbe --- /dev/null +++ b/Docs/types/Point3D.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Point3D + + +

Back to Server

+

Point3D : IPoint3D, IPoint2D, IComparable, IComparable<Point3D>

+ (static) Point3D Parse( string value )
+ (ctor) Point3D( IPoint3D p )
+ (ctor) Point3D( IPoint2D p, int z )
+ (ctor) Point3D( int x, int y, int z )
+ int X( get; set; )
+ int Y( get; set; )
+ int Z( get; set; )
+ virtual int CompareTo( object other )
+ virtual int CompareTo( Point3D other )
+ virtual bool Equals( object o )
+ virtual int GetHashCode()
+ virtual string ToString()
+ + diff --git a/Docs/types/Point3DList.html b/Docs/types/Point3DList.html new file mode 100644 index 0000000..ccf51bc --- /dev/null +++ b/Docs/types/Point3DList.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Point3DList + + +

Back to Server

+

Point3DList

+ (ctor) Point3DList()
+ int Count( get; )
+ Point3D Item( get; )
+ Point3D Last( get; )
+ void Add( Point3D p )
+ void Add( int x, int y, int z )
+ void Clear()
+ Point3D[] ToArray()
+ + diff --git a/Docs/types/Poison.html b/Docs/types/Poison.html new file mode 100644 index 0000000..8d8c947 --- /dev/null +++ b/Docs/types/Poison.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Poison + + +

Back to Server

+

Poison

+

Derived Types: PoisonImpl

+ (static) Poison Deadly( get; )
+ (static) Poison Greater( get; )
+ (static) Poison Lesser( get; )
+ (static) Poison Lethal( get; )
+ (static) List<Poison> Poisons( get; )
+ (static) Poison Regular( get; )
+ (static) Poison Deserialize( GenericReader reader )
+ (static) Poison GetPoison( string name )
+ (static) Poison GetPoison( int level )
+ (static) Poison Parse( string value )
+ (static) void Register( Poison reg )
+ (static) void Serialize( Poison p, GenericWriter writer )
+ (ctor) Poison()
+ int Level( get; )
+ string Name( get; )
+ virtual Timer ConstructTimer( Mobile m )
+ virtual string ToString()
+ + diff --git a/Docs/types/PoisonElemental.html b/Docs/types/PoisonElemental.html new file mode 100644 index 0000000..e4fa323 --- /dev/null +++ b/Docs/types/PoisonElemental.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - PoisonElemental + + +

Back to Server.Mobiles

+

PoisonElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) PoisonElemental()
+ (ctor) PoisonElemental( Serial serial )
+ bool BleedImmune( get; )
+ Poison HitPoison( get; )
+ double HitPoisonChance( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PoisonFieldScroll.html b/Docs/types/PoisonFieldScroll.html new file mode 100644 index 0000000..ba89015 --- /dev/null +++ b/Docs/types/PoisonFieldScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PoisonFieldScroll + + +

Back to Server.Items

+

PoisonFieldScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) PoisonFieldScroll()
+ (ctor) PoisonFieldScroll( int amount )
+ (ctor) PoisonFieldScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PoisonFieldSpell.html b/Docs/types/PoisonFieldSpell.html new file mode 100644 index 0000000..5ab266c --- /dev/null +++ b/Docs/types/PoisonFieldSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PoisonFieldSpell + + +

Back to Server.Spells.Fifth

+

PoisonFieldSpell : MagerySpell, ISpell

+

Nested Types: InternalItem, InternalTarget

+ (ctor) PoisonFieldSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/PoisonImpl.html b/Docs/types/PoisonImpl.html new file mode 100644 index 0000000..113ee1f --- /dev/null +++ b/Docs/types/PoisonImpl.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PoisonImpl + + +

Back to Server

+

PoisonImpl : Poison

+

Nested Types: PoisonTimer

+ (static) void Configure()
+ (static) Poison IncreaseLevel( Poison oldPoison )
+ (ctor) PoisonImpl( string name, int level, int min, int max, double percent, double delay, double interval, int count, int messageInterval )
+ int Level( get; )
+ string Name( get; )
+ virtual Timer ConstructTimer( Mobile m )
+ + diff --git a/Docs/types/PoisonPotion.html b/Docs/types/PoisonPotion.html new file mode 100644 index 0000000..db1bf08 --- /dev/null +++ b/Docs/types/PoisonPotion.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PoisonPotion + + +

Back to Server.Items

+

PoisonPotion : BasePoisonPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) PoisonPotion()
+ (ctor) PoisonPotion( Serial serial )
+ double MaxPoisoningSkill( get; )
+ double MinPoisoningSkill( get; )
+ Poison Poison( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PoisonScroll.html b/Docs/types/PoisonScroll.html new file mode 100644 index 0000000..b561f96 --- /dev/null +++ b/Docs/types/PoisonScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PoisonScroll + + +

Back to Server.Items

+

PoisonScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) PoisonScroll()
+ (ctor) PoisonScroll( int amount )
+ (ctor) PoisonScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PoisonSpell.html b/Docs/types/PoisonSpell.html new file mode 100644 index 0000000..0bcab8c --- /dev/null +++ b/Docs/types/PoisonSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PoisonSpell + + +

Back to Server.Spells.Third

+

PoisonSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) PoisonSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/PoisonStrikeScroll.html b/Docs/types/PoisonStrikeScroll.html new file mode 100644 index 0000000..23c5e79 --- /dev/null +++ b/Docs/types/PoisonStrikeScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PoisonStrikeScroll + + +

Back to Server.Items

+

PoisonStrikeScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) PoisonStrikeScroll()
+ (ctor) PoisonStrikeScroll( int amount )
+ (ctor) PoisonStrikeScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PoisonStrikeSpell.html b/Docs/types/PoisonStrikeSpell.html new file mode 100644 index 0000000..745737e --- /dev/null +++ b/Docs/types/PoisonStrikeSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PoisonStrikeSpell + + +

Back to Server.Spells.Necromancy

+

PoisonStrikeSpell : NecromancerSpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) PoisonStrikeSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ bool DelayedDamage( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/PoisonTimer.html b/Docs/types/PoisonTimer.html new file mode 100644 index 0000000..8cb63a4 --- /dev/null +++ b/Docs/types/PoisonTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PoisonTimer + + +

Back to Server

+

(PoisonImpl) - PoisonTimer : Timer

+ (ctor) PoisonTimer( Mobile m, PoisonImpl p )
+ Mobile From( get; set; )
+ virtual void OnTick()
+ + diff --git a/Docs/types/PoisonTrapCraft.html b/Docs/types/PoisonTrapCraft.html new file mode 100644 index 0000000..697601e --- /dev/null +++ b/Docs/types/PoisonTrapCraft.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PoisonTrapCraft + + +

Back to Server.Engines.Craft

+

PoisonTrapCraft : TrapCraft

+ (ctor) PoisonTrapCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality )
+ TrapType TrapType( get; )
+ + diff --git a/Docs/types/PoisonedGlasses.html b/Docs/types/PoisonedGlasses.html new file mode 100644 index 0000000..04822be --- /dev/null +++ b/Docs/types/PoisonedGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - PoisonedGlasses + + +

Back to Server.Items

+

PoisonedGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) PoisonedGlasses()
+ (ctor) PoisonedGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Poisoning.html b/Docs/types/Poisoning.html new file mode 100644 index 0000000..66d9286 --- /dev/null +++ b/Docs/types/Poisoning.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Poisoning + + +

Back to Server.SkillHandlers

+

Poisoning

+

Nested Types: InternalTargetPoison

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Poisoning()
+ + diff --git a/Docs/types/PolarBear.html b/Docs/types/PolarBear.html new file mode 100644 index 0000000..c9e21f7 --- /dev/null +++ b/Docs/types/PolarBear.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PolarBear + + +

Back to Server.Mobiles

+

PolarBear : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) PolarBear()
+ (ctor) PolarBear( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PolarBearMask.html b/Docs/types/PolarBearMask.html new file mode 100644 index 0000000..a4d27f6 --- /dev/null +++ b/Docs/types/PolarBearMask.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PolarBearMask + + +

Back to Server.Items

+

PolarBearMask : BearMask, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) PolarBearMask()
+ (ctor) PolarBearMask( Serial serial )
+ int BaseColdResistance( get; )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PolarBearRugEastAddon.html b/Docs/types/PolarBearRugEastAddon.html new file mode 100644 index 0000000..8c39c4b --- /dev/null +++ b/Docs/types/PolarBearRugEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PolarBearRugEastAddon + + +

Back to Server.Items

+

PolarBearRugEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PolarBearRugEastAddon()
+ (ctor) PolarBearRugEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PolarBearRugEastDeed.html b/Docs/types/PolarBearRugEastDeed.html new file mode 100644 index 0000000..edaebae --- /dev/null +++ b/Docs/types/PolarBearRugEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PolarBearRugEastDeed + + +

Back to Server.Items

+

PolarBearRugEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PolarBearRugEastDeed()
+ (ctor) PolarBearRugEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PolarBearRugSouthAddon.html b/Docs/types/PolarBearRugSouthAddon.html new file mode 100644 index 0000000..f39cba8 --- /dev/null +++ b/Docs/types/PolarBearRugSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PolarBearRugSouthAddon + + +

Back to Server.Items

+

PolarBearRugSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PolarBearRugSouthAddon()
+ (ctor) PolarBearRugSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PolarBearRugSouthDeed.html b/Docs/types/PolarBearRugSouthDeed.html new file mode 100644 index 0000000..f66fbc9 --- /dev/null +++ b/Docs/types/PolarBearRugSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PolarBearRugSouthDeed + + +

Back to Server.Items

+

PolarBearRugSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PolarBearRugSouthDeed()
+ (ctor) PolarBearRugSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PollinateTarget.html b/Docs/types/PollinateTarget.html new file mode 100644 index 0000000..028944a --- /dev/null +++ b/Docs/types/PollinateTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PollinateTarget + + +

Back to Server.Engines.Plants

+

PollinateTarget : Target

+ (ctor) PollinateTarget( PlantItem plant )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetFinish( Mobile from )
+ + diff --git a/Docs/types/PolymorphCategory.html b/Docs/types/PolymorphCategory.html new file mode 100644 index 0000000..6a64e98 --- /dev/null +++ b/Docs/types/PolymorphCategory.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PolymorphCategory + + +

Back to Server.Gumps

+

(PolymorphGump) - PolymorphCategory

+ (ctor) PolymorphCategory( int num, PolymorphEntry[] entries )
+ PolymorphEntry[] Entries( get; )
+ int LocNumber( get; )
+ + diff --git a/Docs/types/PolymorphEntry.html b/Docs/types/PolymorphEntry.html new file mode 100644 index 0000000..7df3495 --- /dev/null +++ b/Docs/types/PolymorphEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PolymorphEntry + + +

Back to Server.Gumps

+

PolymorphEntry

+ (ctor) PolymorphEntry( int Art, int Body, int LocNum, int X, int Y )
+ int ArtID( get; )
+ int BodyID( get; )
+ int LocNumber( get; )
+ int X( get; )
+ int Y( get; )
+ + diff --git a/Docs/types/PolymorphGump.html b/Docs/types/PolymorphGump.html new file mode 100644 index 0000000..fb2d5c5 --- /dev/null +++ b/Docs/types/PolymorphGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PolymorphGump + + +

Back to Server.Gumps

+

PolymorphGump : Gump

+

Nested Types: PolymorphCategory

+ (ctor) PolymorphGump( Mobile caster, Item scroll )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/PolymorphScroll.html b/Docs/types/PolymorphScroll.html new file mode 100644 index 0000000..b7d193e --- /dev/null +++ b/Docs/types/PolymorphScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PolymorphScroll + + +

Back to Server.Items

+

PolymorphScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) PolymorphScroll()
+ (ctor) PolymorphScroll( int amount )
+ (ctor) PolymorphScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PolymorphSpell.html b/Docs/types/PolymorphSpell.html new file mode 100644 index 0000000..8669363 --- /dev/null +++ b/Docs/types/PolymorphSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - PolymorphSpell + + +

Back to Server.Spells.Seventh

+

PolymorphSpell : MagerySpell, ISpell

+

Nested Types: InternalTimer

+ (static) void EndPolymorph( Mobile m )
+ (static) bool StopTimer( Mobile m )
+ (ctor) PolymorphSpell( Mobile caster, Item scroll )
+ (ctor) PolymorphSpell( Mobile caster, Item scroll, int body )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/PonyTail.html b/Docs/types/PonyTail.html new file mode 100644 index 0000000..4c68daf --- /dev/null +++ b/Docs/types/PonyTail.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PonyTail + + +

Back to Server.Items

+

PonyTail : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PonyTail()
+ (ctor) PonyTail( int hue )
+ (ctor) PonyTail( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PoolOfAcid.html b/Docs/types/PoolOfAcid.html new file mode 100644 index 0000000..be8b362 --- /dev/null +++ b/Docs/types/PoolOfAcid.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - PoolOfAcid + + +

Back to Server.Items

+

PoolOfAcid : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PoolOfAcid()
+ (ctor) PoolOfAcid( Serial serial )
+ (ctor) PoolOfAcid( TimeSpan duration, int minDamage, int maxDamage )
+ string DefaultName( get; )
+ void Damage( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual bool OnMoveOver( Mobile m )
+ void OnTick()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PooledEnumerable.html b/Docs/types/PooledEnumerable.html new file mode 100644 index 0000000..8717d18 --- /dev/null +++ b/Docs/types/PooledEnumerable.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PooledEnumerable + + +

Back to Server

+

(Map) - PooledEnumerable : IPooledEnumerable, IEnumerable, IDisposable

+ (static) PooledEnumerable Instantiate( IPooledEnumerator etor )
+ (ctor) PooledEnumerable( IPooledEnumerator etor )
+ virtual void Dispose()
+ virtual void Free()
+ virtual IEnumerator GetEnumerator()
+ + diff --git a/Docs/types/PopupMessage.html b/Docs/types/PopupMessage.html new file mode 100644 index 0000000..da579a1 --- /dev/null +++ b/Docs/types/PopupMessage.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PopupMessage + + +

Back to Server.Network

+

PopupMessage : Packet

+ (ctor) PopupMessage( PMMessage msg )
+ + diff --git a/Docs/types/PortcullisEW.html b/Docs/types/PortcullisEW.html new file mode 100644 index 0000000..5b25877 --- /dev/null +++ b/Docs/types/PortcullisEW.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PortcullisEW + + +

Back to Server.Items

+

PortcullisEW : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) PortcullisEW()
+ (ctor) PortcullisEW( Serial serial )
+ bool UseChainedFunctionality( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PortcullisNS.html b/Docs/types/PortcullisNS.html new file mode 100644 index 0000000..5679add --- /dev/null +++ b/Docs/types/PortcullisNS.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PortcullisNS + + +

Back to Server.Items

+

PortcullisNS : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) PortcullisNS()
+ (ctor) PortcullisNS( Serial serial )
+ bool UseChainedFunctionality( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PostPrompt.html b/Docs/types/PostPrompt.html new file mode 100644 index 0000000..78786a1 --- /dev/null +++ b/Docs/types/PostPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PostPrompt + + +

Back to Server.Items

+

(BasePlayerBB) - PostPrompt : Prompt

+ (ctor) PostPrompt( int page, BaseHouse house, BasePlayerBB board, bool greeting )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/PotionEffect.html b/Docs/types/PotionEffect.html new file mode 100644 index 0000000..92d5808 --- /dev/null +++ b/Docs/types/PotionEffect.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - PotionEffect + + +

Back to Server.Items

+

PotionEffect (Enum)

+ Nightsight = 0,
+ CureLesser = 1,
+ Cure = 2,
+ CureGreater = 3,
+ Agility = 4,
+ AgilityGreater = 5,
+ Strength = 6,
+ StrengthGreater = 7,
+ PoisonLesser = 8,
+ Poison = 9,
+ PoisonGreater = 10,
+ PoisonDeadly = 11,
+ Refresh = 12,
+ RefreshTotal = 13,
+ HealLesser = 14,
+ Heal = 15,
+ HealGreater = 16,
+ ExplosionLesser = 17,
+ Explosion = 18,
+ ExplosionGreater = 19,
+ Conflagration = 20,
+ ConflagrationGreater = 21,
+ MaskOfDeath = 22,
+ MaskOfDeathGreater = 23,
+ ConfusionBlast = 24,
+ ConfusionBlastGreater = 25
+ + diff --git a/Docs/types/PotionKeg.html b/Docs/types/PotionKeg.html new file mode 100644 index 0000000..6997374 --- /dev/null +++ b/Docs/types/PotionKeg.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PotionKeg + + +

Back to Server.Items

+

PotionKeg : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) void Initialize()
+ (ctor) PotionKeg()
+ (ctor) PotionKeg( Serial serial )
+ int Held( get; set; )
+ int LabelNumber( get; )
+ PotionEffect Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ BasePotion FillBottle()
+ virtual void GetProperties( ObjectPropertyList list )
+ bool GiveBottle( Mobile m, int amount )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item item )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void UpdateWeight()
+ + diff --git a/Docs/types/PottedCactus.html b/Docs/types/PottedCactus.html new file mode 100644 index 0000000..87ffb2e --- /dev/null +++ b/Docs/types/PottedCactus.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedCactus + + +

Back to Server.Items

+

PottedCactus : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedCactus()
+ (ctor) PottedCactus( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedCactus1.html b/Docs/types/PottedCactus1.html new file mode 100644 index 0000000..bd1f87d --- /dev/null +++ b/Docs/types/PottedCactus1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedCactus1 + + +

Back to Server.Items

+

PottedCactus1 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedCactus1()
+ (ctor) PottedCactus1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedCactus2.html b/Docs/types/PottedCactus2.html new file mode 100644 index 0000000..d263552 --- /dev/null +++ b/Docs/types/PottedCactus2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedCactus2 + + +

Back to Server.Items

+

PottedCactus2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedCactus2()
+ (ctor) PottedCactus2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedCactus3.html b/Docs/types/PottedCactus3.html new file mode 100644 index 0000000..4270238 --- /dev/null +++ b/Docs/types/PottedCactus3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedCactus3 + + +

Back to Server.Items

+

PottedCactus3 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedCactus3()
+ (ctor) PottedCactus3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedCactus4.html b/Docs/types/PottedCactus4.html new file mode 100644 index 0000000..f2c1328 --- /dev/null +++ b/Docs/types/PottedCactus4.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedCactus4 + + +

Back to Server.Items

+

PottedCactus4 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedCactus4()
+ (ctor) PottedCactus4( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedCactus5.html b/Docs/types/PottedCactus5.html new file mode 100644 index 0000000..390ca90 --- /dev/null +++ b/Docs/types/PottedCactus5.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedCactus5 + + +

Back to Server.Items

+

PottedCactus5 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedCactus5()
+ (ctor) PottedCactus5( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedCactusDeed.html b/Docs/types/PottedCactusDeed.html new file mode 100644 index 0000000..52a6f97 --- /dev/null +++ b/Docs/types/PottedCactusDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PottedCactusDeed + + +

Back to Server.Items

+

PottedCactusDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: InternalGump

+ (ctor) PottedCactusDeed()
+ (ctor) PottedCactusDeed( Serial serial )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedPlant.html b/Docs/types/PottedPlant.html new file mode 100644 index 0000000..4197ea6 --- /dev/null +++ b/Docs/types/PottedPlant.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedPlant + + +

Back to Server.Items

+

PottedPlant : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedPlant()
+ (ctor) PottedPlant( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedPlant1.html b/Docs/types/PottedPlant1.html new file mode 100644 index 0000000..e5fec58 --- /dev/null +++ b/Docs/types/PottedPlant1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedPlant1 + + +

Back to Server.Items

+

PottedPlant1 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedPlant1()
+ (ctor) PottedPlant1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedPlant2.html b/Docs/types/PottedPlant2.html new file mode 100644 index 0000000..ced8be7 --- /dev/null +++ b/Docs/types/PottedPlant2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedPlant2 + + +

Back to Server.Items

+

PottedPlant2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedPlant2()
+ (ctor) PottedPlant2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedTree.html b/Docs/types/PottedTree.html new file mode 100644 index 0000000..1f17ff3 --- /dev/null +++ b/Docs/types/PottedTree.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedTree + + +

Back to Server.Items

+

PottedTree : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedTree()
+ (ctor) PottedTree( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PottedTree1.html b/Docs/types/PottedTree1.html new file mode 100644 index 0000000..03b91ac --- /dev/null +++ b/Docs/types/PottedTree1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PottedTree1 + + +

Back to Server.Items

+

PottedTree1 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PottedTree1()
+ (ctor) PottedTree1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Pouch.html b/Docs/types/Pouch.html new file mode 100644 index 0000000..9d2b36d --- /dev/null +++ b/Docs/types/Pouch.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Pouch + + +

Back to Server.Items

+

Pouch : TrapableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable

+ (ctor) Pouch()
+ (ctor) Pouch( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PowderOfTemperament.html b/Docs/types/PowderOfTemperament.html new file mode 100644 index 0000000..4e46a09 --- /dev/null +++ b/Docs/types/PowderOfTemperament.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - PowderOfTemperament + + +

Back to Server.Items

+

PowderOfTemperament : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining

+

Nested Types: InternalTarget

+ (ctor) PowderOfTemperament()
+ (ctor) PowderOfTemperament( Serial serial )
+ (ctor) PowderOfTemperament( int charges )
+ int LabelNumber( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayDurabilityTo( Mobile m )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PowderOfTranslocation.html b/Docs/types/PowderOfTranslocation.html new file mode 100644 index 0000000..f355d32 --- /dev/null +++ b/Docs/types/PowderOfTranslocation.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PowderOfTranslocation + + +

Back to Server.Items

+

PowderOfTranslocation : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) PowderOfTranslocation()
+ (ctor) PowderOfTranslocation( int amount )
+ (ctor) PowderOfTranslocation( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Power.html b/Docs/types/Power.html new file mode 100644 index 0000000..c207f89 --- /dev/null +++ b/Docs/types/Power.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Power + + +

Back to Server.Ethics

+

Power

+

Derived Types: Bless, Blight, HolyBlade, HolyItem, HolySense, HolyShield, HolySteed, HolyWord, SummonFamiliar, SummonFamiliar, UnholyItem, UnholySense, UnholyShield, UnholySteed, UnholyWord, VileBlade

+ (ctor) Power()
+ PowerDefinition Definition( get; )
+ virtual void BeginInvoke( Player from )
+ virtual bool CheckInvoke( Player from )
+ virtual void FinishInvoke( Player from )
+ + diff --git a/Docs/types/PowerCrystal.html b/Docs/types/PowerCrystal.html new file mode 100644 index 0000000..449dd39 --- /dev/null +++ b/Docs/types/PowerCrystal.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PowerCrystal + + +

Back to Server.Items

+

PowerCrystal : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PowerCrystal()
+ (ctor) PowerCrystal( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PowerDefinition.html b/Docs/types/PowerDefinition.html new file mode 100644 index 0000000..c2a46fa --- /dev/null +++ b/Docs/types/PowerDefinition.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PowerDefinition + + +

Back to Server.Ethics

+

PowerDefinition

+ (ctor) PowerDefinition( int power, TextDefinition name, TextDefinition phrase, TextDefinition description )
+ TextDefinition Description( get; )
+ TextDefinition Name( get; )
+ TextDefinition Phrase( get; )
+ int Power( get; )
+ + diff --git a/Docs/types/PowerGenerator.html b/Docs/types/PowerGenerator.html new file mode 100644 index 0000000..996a0f5 --- /dev/null +++ b/Docs/types/PowerGenerator.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PowerGenerator + + +

Back to Server.Items

+

PowerGenerator : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PowerGenerator()
+ (ctor) PowerGenerator( int sideLength )
+ (ctor) PowerGenerator( Serial serial )
+ bool ShareHue( get; )
+ void AddGeneratorComponent( int itemID, int x, int y, int z )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PowerScroll.html b/Docs/types/PowerScroll.html new file mode 100644 index 0000000..fb5adec --- /dev/null +++ b/Docs/types/PowerScroll.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - PowerScroll + + +

Back to Server.Items

+

PowerScroll : SpecialScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) List<SkillName> Skills( get; )
+ (static) PowerScroll CreateRandom( int min, int max )
+ (static) PowerScroll CreateRandomNoCraft( int min, int max )
+ (ctor) PowerScroll()
+ (ctor) PowerScroll( Serial serial )
+ (ctor) PowerScroll( SkillName skill, double value )
+ string DefaultTitle( get; )
+ int Message( get; )
+ int Title( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual bool CanUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void Use( Mobile from )
+ + diff --git a/Docs/types/PredatorAI.html b/Docs/types/PredatorAI.html new file mode 100644 index 0000000..814bada --- /dev/null +++ b/Docs/types/PredatorAI.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PredatorAI + + +

Back to Server.Mobiles

+

PredatorAI : BaseAI

+ (ctor) PredatorAI( BaseCreature m )
+ virtual bool DoActionBackoff()
+ virtual bool DoActionCombat()
+ virtual bool DoActionWander()
+ + diff --git a/Docs/types/PredatorHellCat.html b/Docs/types/PredatorHellCat.html new file mode 100644 index 0000000..165dc38 --- /dev/null +++ b/Docs/types/PredatorHellCat.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - PredatorHellCat + + +

Back to Server.Mobiles

+

PredatorHellCat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) PredatorHellCat()
+ (ctor) PredatorHellCat( Serial serial )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PredefGump.html b/Docs/types/PredefGump.html new file mode 100644 index 0000000..0dcaf8a --- /dev/null +++ b/Docs/types/PredefGump.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PredefGump + + +

Back to Server.Engines.Help

+

PredefGump : Gump

+ (ctor) PredefGump( Mobile from, PredefinedResponse response )
+ void AddTextInput( int x, int y, int w, int h, int id, string def )
+ string Center( string text )
+ string Color( string text, int color )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/PredefinedResponse.html b/Docs/types/PredefinedResponse.html new file mode 100644 index 0000000..a061b48 --- /dev/null +++ b/Docs/types/PredefinedResponse.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PredefinedResponse + + +

Back to Server.Engines.Help

+

PredefinedResponse

+ (static) ArrayList List( get; )
+ (static) PredefinedResponse Add( string title, string message )
+ (static) ArrayList Load()
+ (static) void Save()
+ (ctor) PredefinedResponse( string title, string message )
+ string Message( get; set; )
+ string Title( get; set; )
+ + diff --git a/Docs/types/PresetMap.html b/Docs/types/PresetMap.html new file mode 100644 index 0000000..2c40642 --- /dev/null +++ b/Docs/types/PresetMap.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PresetMap + + +

Back to Server.Items

+

PresetMap : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) PresetMap( Serial serial )
+ (ctor) PresetMap( PresetMapEntry entry )
+ (ctor) PresetMap( PresetMapType type )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ void InitEntry( PresetMapEntry entry )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PresetMapBuyInfo.html b/Docs/types/PresetMapBuyInfo.html new file mode 100644 index 0000000..891db2c --- /dev/null +++ b/Docs/types/PresetMapBuyInfo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PresetMapBuyInfo + + +

Back to Server.Mobiles

+

PresetMapBuyInfo : GenericBuyInfo, IBuyItemInfo

+ (ctor) PresetMapBuyInfo( PresetMapEntry entry, int price, int amount )
+ bool CanCacheDisplay( get; )
+ virtual IEntity GetEntity()
+ + diff --git a/Docs/types/PresetMapEntry.html b/Docs/types/PresetMapEntry.html new file mode 100644 index 0000000..587a81d --- /dev/null +++ b/Docs/types/PresetMapEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PresetMapEntry + + +

Back to Server.Items

+

PresetMapEntry

+ (static) PresetMapEntry[] Table( get; )
+ (ctor) PresetMapEntry( int name, int width, int height, int xLeft, int yTop, int xRight, int yBottom )
+ Rectangle2D Bounds( get; )
+ int Height( get; )
+ int Name( get; )
+ int Width( get; )
+ + diff --git a/Docs/types/PresetMapType.html b/Docs/types/PresetMapType.html new file mode 100644 index 0000000..f9e0589 --- /dev/null +++ b/Docs/types/PresetMapType.html @@ -0,0 +1,37 @@ + + + RunUO Documentation - Class Overview - PresetMapType + + +

Back to Server.Items

+

PresetMapType (Enum)

+ Britain = 0,
+ BritainToSkaraBrae = 1,
+ BritainToTrinsic = 2,
+ BucsDen = 3,
+ BucsDenToMagincia = 4,
+ BucsDenToOcllo = 5,
+ Jhelom = 6,
+ Magincia = 7,
+ MaginciaToOcllo = 8,
+ Minoc = 9,
+ MinocToYew = 10,
+ MinocToVesper = 11,
+ Moonglow = 12,
+ MoonglowToNujelm = 13,
+ Nujelm = 14,
+ NujelmToMagincia = 15,
+ Ocllo = 16,
+ SerpentsHold = 17,
+ SerpentsHoldToOcllo = 18,
+ SkaraBrae = 19,
+ TheWorld = 20,
+ Trinsic = 21,
+ TrinsicToBucsDen = 22,
+ TrinsicToJhelom = 23,
+ Vesper = 24,
+ VesperToNujelm = 25,
+ Yew = 26,
+ YewToBritain = 27
+ + diff --git a/Docs/types/PreviewHouse.html b/Docs/types/PreviewHouse.html new file mode 100644 index 0000000..9b727c9 --- /dev/null +++ b/Docs/types/PreviewHouse.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PreviewHouse + + +

Back to Server.Multis

+

PreviewHouse : BaseMulti, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: DecayTimer

+ (ctor) PreviewHouse( Serial serial )
+ (ctor) PreviewHouse( int multiID )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PricePerRentalPrompt.html b/Docs/types/PricePerRentalPrompt.html new file mode 100644 index 0000000..f26ce67 --- /dev/null +++ b/Docs/types/PricePerRentalPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PricePerRentalPrompt + + +

Back to Server.Gumps

+

(VendorRentalContractGump) - PricePerRentalPrompt : Prompt

+ (ctor) PricePerRentalPrompt( VendorRentalContract contract )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/PricedHealer.html b/Docs/types/PricedHealer.html new file mode 100644 index 0000000..6114de5 --- /dev/null +++ b/Docs/types/PricedHealer.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - PricedHealer + + +

Back to Server.Mobiles

+

PricedHealer : BaseHealer, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) PricedHealer()
+ (ctor) PricedHealer( Serial serial )
+ (ctor) PricedHealer( int price )
+ bool HealsYoungPlayers( get; )
+ bool IsInvulnerable( get; )
+ int Price( get; set; )
+ virtual bool CheckResurrect( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void OfferResurrection( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PristineDreadHorn.html b/Docs/types/PristineDreadHorn.html new file mode 100644 index 0000000..84cac14 --- /dev/null +++ b/Docs/types/PristineDreadHorn.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PristineDreadHorn + + +

Back to Server.Items

+

PristineDreadHorn : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PristineDreadHorn()
+ (ctor) PristineDreadHorn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PrivSoundCommand.html b/Docs/types/PrivSoundCommand.html new file mode 100644 index 0000000..d890fed --- /dev/null +++ b/Docs/types/PrivSoundCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PrivSoundCommand + + +

Back to Server.Commands.Generic

+

PrivSoundCommand : BaseCommand

+ (ctor) PrivSoundCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/PrizedFish.html b/Docs/types/PrizedFish.html new file mode 100644 index 0000000..7a31405 --- /dev/null +++ b/Docs/types/PrizedFish.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PrizedFish + + +

Back to Server.Items

+

PrizedFish : BaseMagicFish, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PrizedFish()
+ (ctor) PrizedFish( Serial serial )
+ int Bonus( get; )
+ int LabelNumber( get; )
+ StatType Type( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ProcessFungiConversation.html b/Docs/types/ProcessFungiConversation.html new file mode 100644 index 0000000..cb5b56c --- /dev/null +++ b/Docs/types/ProcessFungiConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ProcessFungiConversation + + +

Back to Server.Engines.Quests.Matriarch

+

ProcessFungiConversation : QuestConversation

+ (ctor) ProcessFungiConversation()
+ (ctor) ProcessFungiConversation( bool friend )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ProcessFungiObjective.html b/Docs/types/ProcessFungiObjective.html new file mode 100644 index 0000000..bdbfb22 --- /dev/null +++ b/Docs/types/ProcessFungiObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ProcessFungiObjective + + +

Back to Server.Engines.Quests.Matriarch

+

ProcessFungiObjective : QuestObjective

+ (ctor) ProcessFungiObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ProcessFungiTarget.html b/Docs/types/ProcessFungiTarget.html new file mode 100644 index 0000000..5ced65a --- /dev/null +++ b/Docs/types/ProcessFungiTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ProcessFungiTarget + + +

Back to Server.Engines.Quests.Matriarch

+

(BaseSolenMatriarch) - ProcessFungiTarget : Target

+ (ctor) ProcessFungiTarget( BaseSolenMatriarch matriarch, PlayerMobile from )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType )
+ + diff --git a/Docs/types/ProcessZoogiFungusEntry.html b/Docs/types/ProcessZoogiFungusEntry.html new file mode 100644 index 0000000..ee86419 --- /dev/null +++ b/Docs/types/ProcessZoogiFungusEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ProcessZoogiFungusEntry + + +

Back to Server.Engines.Quests.Matriarch

+

(BaseSolenMatriarch) - ProcessZoogiFungusEntry : ContextMenuEntry

+ (ctor) ProcessZoogiFungusEntry( BaseSolenMatriarch matriarch, PlayerMobile from )
+ virtual void OnClick()
+ + diff --git a/Docs/types/Producer.html b/Docs/types/Producer.html new file mode 100644 index 0000000..0d9ed8e --- /dev/null +++ b/Docs/types/Producer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Producer + + +

Back to Server

+

(ParallelSaveStrategy) - Producer : IEnumerable<ISerializable>, IEnumerable

+

Nested Types: (Anonymous-Type)-GetEnumerator-d__2

+ (ctor) Producer()
+ virtual IEnumerator<ISerializable> GetEnumerator()
+ virtual IEnumerator System.Collections.IEnumerable.GetEnumerator()
+ + diff --git a/Docs/types/ProfanityAction.html b/Docs/types/ProfanityAction.html new file mode 100644 index 0000000..317f7e0 --- /dev/null +++ b/Docs/types/ProfanityAction.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ProfanityAction + + +

Back to Server.Misc

+

ProfanityAction (Enum)

+ None = 0,
+ Disallow = 1,
+ Criminal = 2,
+ CriminalAction = 3,
+ Disconnect = 4,
+ Other = 5
+ + diff --git a/Docs/types/ProfanityProtection.html b/Docs/types/ProfanityProtection.html new file mode 100644 index 0000000..23b9f86 --- /dev/null +++ b/Docs/types/ProfanityProtection.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ProfanityProtection + + +

Back to Server.Misc

+

ProfanityProtection

+ (static) string[] Disallowed( get; )
+ (static) char[] Exceptions( get; )
+ (static) string[] StartDisallowed( get; )
+ (static) void EventSink_Speech( SpeechEventArgs e )
+ (static) void Initialize()
+ (static) bool OnProfanityDetected( Mobile from, string speech )
+ (ctor) ProfanityProtection()
+ + diff --git a/Docs/types/Profile.html b/Docs/types/Profile.html new file mode 100644 index 0000000..3557fe1 --- /dev/null +++ b/Docs/types/Profile.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Profile + + +

Back to Server.Misc

+

Profile

+ (static) void EventSink_ChangeProfileRequest( ChangeProfileRequestEventArgs e )
+ (static) void EventSink_ProfileRequest( ProfileRequestEventArgs e )
+ (static) bool Format( double value, string format, out string op )
+ (static) string GetAccountDuration( Mobile m )
+ (static) void Initialize()
+ (ctor) Profile()
+ + diff --git a/Docs/types/ProfileRequestEventArgs.html b/Docs/types/ProfileRequestEventArgs.html new file mode 100644 index 0000000..65dbee2 --- /dev/null +++ b/Docs/types/ProfileRequestEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ProfileRequestEventArgs + + +

Back to Server

+

ProfileRequestEventArgs : EventArgs

+ (ctor) ProfileRequestEventArgs( Mobile beholder, Mobile beheld )
+ Mobile Beheld( get; )
+ Mobile Beholder( get; )
+ + diff --git a/Docs/types/ProfileRequestEventHandler.html b/Docs/types/ProfileRequestEventHandler.html new file mode 100644 index 0000000..54220b0 --- /dev/null +++ b/Docs/types/ProfileRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ProfileRequestEventHandler + + +

Back to Server

+

ProfileRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ProfileRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ProfileRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ProfileRequestEventArgs e )
+ + diff --git a/Docs/types/Profiling.html b/Docs/types/Profiling.html new file mode 100644 index 0000000..1db130e --- /dev/null +++ b/Docs/types/Profiling.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Profiling + + +

Back to Server.Commands

+

Profiling

+

Nested Types: CountSorter

+ (static) void CountObjects_OnCommand( CommandEventArgs e )
+ (static) void DumpTimers_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (static) void ProfileWorld( string type, string opFile )
+ (static) void ProfileWorld_OnCommand( CommandEventArgs e )
+ (static) void SetProfiles_OnCommand( CommandEventArgs e )
+ (static) void TraceExpanded_OnCommand( CommandEventArgs e )
+ (static) void TraceInternal_OnCommand( CommandEventArgs e )
+ (static) void WriteProfiles_OnCommand( CommandEventArgs e )
+ (ctor) Profiling()
+ + diff --git a/Docs/types/PromotionalToken.html b/Docs/types/PromotionalToken.html new file mode 100644 index 0000000..a4df0f3 --- /dev/null +++ b/Docs/types/PromotionalToken.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - PromotionalToken + + +

Back to Server.Items

+

PromotionalToken : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: SoulstoneFragmentToken

+

Nested Types: PromotionalTokenGump

+ (ctor) PromotionalToken()
+ (ctor) PromotionalToken( Serial serial )
+ TextDefinition ItemGumpName( get; )
+ TextDefinition ItemName( get; )
+ TextDefinition ItemReceiveMessage( get; )
+ int LabelNumber( get; )
+ virtual Item CreateItemFor( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PromotionalTokenGump.html b/Docs/types/PromotionalTokenGump.html new file mode 100644 index 0000000..e8df44b --- /dev/null +++ b/Docs/types/PromotionalTokenGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PromotionalTokenGump + + +

Back to Server.Items

+

(PromotionalToken) - PromotionalTokenGump : Gump

+ (ctor) PromotionalTokenGump( PromotionalToken token )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/Prompt.html b/Docs/types/Prompt.html new file mode 100644 index 0000000..162b5a3 --- /dev/null +++ b/Docs/types/Prompt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Prompt + + +

Back to Server.Prompts

+

Prompt

+

Derived Types: AddCommentPrompt, AddTagNamePrompt, AddTagValuePrompt, BroadcastPrompt, ChangeRumorKeywordPrompt, ChangeRumorMessagePrompt, ChangeTipMessagePrompt, CollectGoldPrompt, ContractRenewalPricePrompt, GuildAbbrvPrompt, GuildCharterPrompt, GuildDeclareWarPrompt, GuildNamePrompt, GuildTitlePrompt, GuildWebsitePrompt, InscribePrompt, InternalPrompt, InternalPrompt, InternalPrompt, NameBookPrompt, PagePrompt, PostPrompt, PricePerRentalPrompt, RefundOfferPrompt, RenameBoatPrompt, RenamePrompt, RenamePrompt, RenamePrompt, SetPricePrompt, SetTitlePrompt, ShardPollPrompt, ShopNamePrompt, SimplePrompt, SimpleStatePrompt, SimpleStatePrompt<T>, TopicPrompt, TownCrierDurationPrompt, TownCrierLinesPrompt, VendorNamePrompt, VendorPricePrompt

+ (ctor) Prompt()
+ int Serial( get; )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/PromptCallback.html b/Docs/types/PromptCallback.html new file mode 100644 index 0000000..3751fb7 --- /dev/null +++ b/Docs/types/PromptCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PromptCallback + + +

Back to Server

+

PromptCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) PromptCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, string text, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, string text )
+ + diff --git a/Docs/types/PromptStateCallback-T-.html b/Docs/types/PromptStateCallback-T-.html new file mode 100644 index 0000000..2c8c923 --- /dev/null +++ b/Docs/types/PromptStateCallback-T-.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PromptStateCallback<T> + + +

Back to Server

+

PromptStateCallback<T> : MulticastDelegate, ICloneable, ISerializable

+ (ctor) PromptStateCallback<T>( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, string text, T state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, string text, T state )
+ + diff --git a/Docs/types/PromptStateCallback.html b/Docs/types/PromptStateCallback.html new file mode 100644 index 0000000..259c8dd --- /dev/null +++ b/Docs/types/PromptStateCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PromptStateCallback + + +

Back to Server

+

PromptStateCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) PromptStateCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, string text, object state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, string text, object state )
+ + diff --git a/Docs/types/Properties.html b/Docs/types/Properties.html new file mode 100644 index 0000000..8c6b1ea --- /dev/null +++ b/Docs/types/Properties.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - Properties + + +

Back to Server.Commands

+

Properties

+

Nested Types: PropsTarget

+ (static) bool CIEqual( string l, string r )
+ (static) string ConstructFromString( Type type, object obj, string value, ref object constructed )
+ (static) CommandPropertyAttribute GetCPA( PropertyInfo p )
+ (static) PropertyInfo GetPropertyInfo( ref object obj, PropertyInfo[] chain, ref string failReason )
+ (static) PropertyInfo GetPropertyInfo( Mobile from, ref object obj, string propertyName, PropertyAccess access, ref string failReason )
+ (static) PropertyInfo[] GetPropertyInfoChain( Mobile from, Type type, string propertyString, PropertyAccess endAccess, ref string failReason )
+ (static) string GetValue( Mobile from, object o, string name )
+ (static) string IncreaseValue( Mobile from, object o, string[] args )
+ (static) void Initialize()
+ (static) string InternalGetValue( object o, PropertyInfo p )
+ (static) string InternalGetValue( object o, PropertyInfo p, PropertyInfo[] chain )
+ (static) string InternalSetValue( object o, PropertyInfo p, string value )
+ (static) string InternalSetValue( Mobile from, object logobj, object o, PropertyInfo p, string pname, string value, bool shouldLog )
+ (static) bool IsChar( Type t )
+ (static) bool IsEnum( Type t )
+ (static) bool IsNumeric( Type t )
+ (static) bool IsParsable( Type t )
+ (static) bool IsSerial( Type t )
+ (static) bool IsString( Type t )
+ (static) bool IsType( Type t )
+ (static) object Parse( object o, Type t, string value )
+ (static) void Props_OnCommand( CommandEventArgs e )
+ (static) string SetDirect( object obj, PropertyInfo prop, object toSet )
+ (static) string SetDirect( Mobile from, object logObject, object obj, PropertyInfo prop, string givenName, object toSet, bool shouldLog )
+ (static) string SetValue( Mobile from, object o, string name, string value )
+ (ctor) Properties()
+ + diff --git a/Docs/types/PropertiesGump.html b/Docs/types/PropertiesGump.html new file mode 100644 index 0000000..a429118 --- /dev/null +++ b/Docs/types/PropertiesGump.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - PropertiesGump + + +

Back to Server.Gumps

+

PropertiesGump : Gump

+

Nested Types: GroupComparer, PropertySorter, StackEntry

+ (static) CommandPropertyAttribute GetCPA( PropertyInfo prop )
+ (static) string[] GetCustomEnumNames( Type type )
+ (static) object GetObjectFromString( Type t, string s )
+ (static) object[] GetObjects( Array a )
+ (static) string GetStringFromObject( object o )
+ (static) bool HasAttribute( Type type, Type check, bool inherit )
+ (static) bool IsCustomEnum( Type type )
+ (static) bool IsType( Type type, Type[] check )
+ (static) bool IsType( Type type, Type check )
+ (static) void OnValueChanged( object obj, PropertyInfo prop, Stack stack )
+ (static) string ValueToString( object o )
+ (static) string ValueToString( object obj, PropertyInfo prop )
+ (ctor) PropertiesGump( Mobile mobile, object o )
+ (ctor) PropertiesGump( Mobile mobile, object o, Stack stack, StackEntry parent )
+ (ctor) PropertiesGump( Mobile mobile, object o, Stack stack, ArrayList list, int page )
+ ArrayList BuildList()
+ ArrayList GetGroups( Type objectType, PropertyInfo[] props )
+ void Initialize( int page )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ string ValueToString( PropertyInfo prop )
+ + diff --git a/Docs/types/Property.html b/Docs/types/Property.html new file mode 100644 index 0000000..317da5d --- /dev/null +++ b/Docs/types/Property.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Property + + +

Back to Server

+

Property

+ (static) Property Parse( Type type, string binding, PropertyAccess access )
+ (ctor) Property( PropertyInfo[] chain )
+ (ctor) Property( string binding )
+ PropertyAccess Access( get; )
+ string Binding( get; )
+ PropertyInfo[] Chain( get; )
+ bool IsBound( get; )
+ Type Type( get; )
+ void BindTo( Type objectType, PropertyAccess desiredAccess )
+ bool CheckAccess( Mobile from )
+ virtual string ToString()
+ + diff --git a/Docs/types/PropertyAccess.html b/Docs/types/PropertyAccess.html new file mode 100644 index 0000000..c0fcf59 --- /dev/null +++ b/Docs/types/PropertyAccess.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PropertyAccess + + +

Back to Server.Commands

+

PropertyAccess (Enum)

+ Read = 1,
+ Write = 2,
+ ReadWrite = 3
+ + diff --git a/Docs/types/PropertyCondition.html b/Docs/types/PropertyCondition.html new file mode 100644 index 0000000..1aeb826 --- /dev/null +++ b/Docs/types/PropertyCondition.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PropertyCondition + + +

Back to Server.Commands.Generic

+

PropertyCondition : ICondition

+

Derived Types: ComparisonCondition, StringCondition

+ (ctor) PropertyCondition( Property property, bool not )
+ virtual void Compile( MethodEmitter emitter )
+ virtual void Construct( TypeBuilder typeBuilder, ILGenerator il, int index )
+ + diff --git a/Docs/types/PropertyException.html b/Docs/types/PropertyException.html new file mode 100644 index 0000000..b0a0a58 --- /dev/null +++ b/Docs/types/PropertyException.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - PropertyException + + +

Back to Server

+

PropertyException : ApplicationException, ISerializable, _Exception

+

Derived Types: AccessException, BindingException

+ (ctor) PropertyException( Property property, string message )
+ Property Property( get; )
+ + diff --git a/Docs/types/PropertyObjectAttribute.html b/Docs/types/PropertyObjectAttribute.html new file mode 100644 index 0000000..a3d37d4 --- /dev/null +++ b/Docs/types/PropertyObjectAttribute.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PropertyObjectAttribute + + +

Back to Server

+

PropertyObjectAttribute : Attribute, _Attribute

+ (ctor) PropertyObjectAttribute()
+ + diff --git a/Docs/types/PropertySorter.html b/Docs/types/PropertySorter.html new file mode 100644 index 0000000..8c94495 --- /dev/null +++ b/Docs/types/PropertySorter.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PropertySorter + + +

Back to Server.Gumps

+

(PropertiesGump) - PropertySorter : IComparer

+ (ctor) PropertySorter()
+ virtual int Compare( object x, object y )
+ + diff --git a/Docs/types/PropertyValue.html b/Docs/types/PropertyValue.html new file mode 100644 index 0000000..82255c0 --- /dev/null +++ b/Docs/types/PropertyValue.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - PropertyValue + + +

Back to Server.Commands.Generic

+

PropertyValue

+ (ctor) PropertyValue( Type type, object value )
+ FieldInfo Field( get; )
+ bool HasField( get; )
+ Type Type( get; )
+ object Value( get; )
+ void Acquire( TypeBuilder typeBuilder, ILGenerator il, string fieldName )
+ void Load( MethodEmitter method )
+ + diff --git a/Docs/types/PropsConfig.html b/Docs/types/PropsConfig.html new file mode 100644 index 0000000..69ace7c --- /dev/null +++ b/Docs/types/PropsConfig.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - PropsConfig + + +

Back to Server.Gumps

+

PropsConfig

+ (ctor) PropsConfig()
+ + diff --git a/Docs/types/PropsTarget.html b/Docs/types/PropsTarget.html new file mode 100644 index 0000000..e94f9d5 --- /dev/null +++ b/Docs/types/PropsTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - PropsTarget + + +

Back to Server.Commands

+

(Properties) - PropsTarget : Target

+ (ctor) PropsTarget()
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/ProspectorsTool.html b/Docs/types/ProspectorsTool.html new file mode 100644 index 0000000..c91b90d --- /dev/null +++ b/Docs/types/ProspectorsTool.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - ProspectorsTool + + +

Back to Server.Items

+

ProspectorsTool : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+

Nested Types: InternalTarget

+ (ctor) ProspectorsTool()
+ (ctor) ProspectorsTool( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int LabelNumber( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void Prospect( Mobile from, object toProspect )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ProtectionScroll.html b/Docs/types/ProtectionScroll.html new file mode 100644 index 0000000..cfebe7a --- /dev/null +++ b/Docs/types/ProtectionScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ProtectionScroll + + +

Back to Server.Items

+

ProtectionScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ProtectionScroll()
+ (ctor) ProtectionScroll( int amount )
+ (ctor) ProtectionScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ProtectionSpell.html b/Docs/types/ProtectionSpell.html new file mode 100644 index 0000000..e2575ca --- /dev/null +++ b/Docs/types/ProtectionSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ProtectionSpell + + +

Back to Server.Spells.Second

+

ProtectionSpell : MagerySpell, ISpell

+

Nested Types: InternalTimer

+ (static) Hashtable Registry( get; )
+ (static) void EndProtection( Mobile m )
+ (static) void Toggle( Mobile caster, Mobile target )
+ (ctor) ProtectionSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/ProtocolChanges.html b/Docs/types/ProtocolChanges.html new file mode 100644 index 0000000..3ed5cbc --- /dev/null +++ b/Docs/types/ProtocolChanges.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - ProtocolChanges + + +

Back to Server.Network

+

ProtocolChanges (Enum)

+ Version400a = 1,
+ NewSpellbook = 1,
+ DamagePacket = 2,
+ Version407a = 3,
+ Unpack = 4,
+ Version500a = 7,
+ BuffIcon = 8,
+ Version502b = 15,
+ NewHaven = 16,
+ Version6000 = 31,
+ ContainerGridLines = 32,
+ Version6017 = 63,
+ ExtendedSupportedFeatures = 64,
+ Version60142 = 127,
+ StygianAbyss = 128,
+ Version7000 = 255,
+ HighSeas = 256,
+ Version7090 = 511,
+ NewCharacterList = 512,
+ Version70130 = 1023,
+ NewCharacterCreation = 1024,
+ Version70160 = 2047
+ + diff --git a/Docs/types/ProtocolExtension.html b/Docs/types/ProtocolExtension.html new file mode 100644 index 0000000..7bc1271 --- /dev/null +++ b/Docs/types/ProtocolExtension.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ProtocolExtension + + +

Back to Server.Misc

+

ProtocolExtension : Packet

+

Derived Types: AckPartyLocations

+ (ctor) ProtocolExtension( int packetID, int capacity )
+ + diff --git a/Docs/types/ProtocolExtensions.html b/Docs/types/ProtocolExtensions.html new file mode 100644 index 0000000..752fd03 --- /dev/null +++ b/Docs/types/ProtocolExtensions.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ProtocolExtensions + + +

Back to Server.Misc

+

ProtocolExtensions

+ (static) void DecodeBundledPacket( NetState state, PacketReader pvSrc )
+ (static) PacketHandler GetHandler( int packetID )
+ (static) void Initialize()
+ (static) void QueryPartyLocations( NetState state, PacketReader pvSrc )
+ (static) void Register( int packetID, bool ingame, OnPacketReceive onReceive )
+ (ctor) ProtocolExtensions()
+ + diff --git a/Docs/types/Provisioner.html b/Docs/types/Provisioner.html new file mode 100644 index 0000000..d2a940c --- /dev/null +++ b/Docs/types/Provisioner.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Provisioner + + +

Back to Server.Mobiles

+

Provisioner : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Provisioner()
+ (ctor) Provisioner( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Provocation.html b/Docs/types/Provocation.html new file mode 100644 index 0000000..cf3d46e --- /dev/null +++ b/Docs/types/Provocation.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Provocation + + +

Back to Server.SkillHandlers

+

Provocation

+

Nested Types: InternalFirstTarget, InternalSecondTarget

+ (static) void Initialize()
+ (static) void OnPickedInstrument( Mobile from, BaseInstrument instrument )
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Provocation()
+ + diff --git a/Docs/types/PublicMoongate.html b/Docs/types/PublicMoongate.html new file mode 100644 index 0000000..b9395db --- /dev/null +++ b/Docs/types/PublicMoongate.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - PublicMoongate + + +

Back to Server.Items

+

PublicMoongate : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) void DeleteAll()
+ (static) void Initialize()
+ (static) int MoonGen( PMList list )
+ (static) void MoonGen_OnCommand( CommandEventArgs e )
+ (ctor) PublicMoongate()
+ (ctor) PublicMoongate( Serial serial )
+ bool ForceShowProperties( get; )
+ bool HandlesOnMovement( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ bool UseGate( Mobile m )
+ + diff --git a/Docs/types/Pumpkin.html b/Docs/types/Pumpkin.html new file mode 100644 index 0000000..2335e1c --- /dev/null +++ b/Docs/types/Pumpkin.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Pumpkin + + +

Back to Server.Items

+

Pumpkin : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Pumpkin()
+ (ctor) Pumpkin( int amount )
+ (ctor) Pumpkin( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PumpkinPie.html b/Docs/types/PumpkinPie.html new file mode 100644 index 0000000..f8f8160 --- /dev/null +++ b/Docs/types/PumpkinPie.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PumpkinPie + + +

Back to Server.Items

+

PumpkinPie : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) PumpkinPie()
+ (ctor) PumpkinPie( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Putrefication.html b/Docs/types/Putrefication.html new file mode 100644 index 0000000..b6066e9 --- /dev/null +++ b/Docs/types/Putrefication.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Putrefication + + +

Back to Server.Items

+

Putrefication : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Putrefication()
+ (ctor) Putrefication( int amount )
+ (ctor) Putrefication( Serial serial )
+ (ctor) Putrefication( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PuzzleChest.html b/Docs/types/PuzzleChest.html new file mode 100644 index 0000000..a71cfb7 --- /dev/null +++ b/Docs/types/PuzzleChest.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - PuzzleChest + + +

Back to Server.Items

+

PuzzleChest : BaseTreasureChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Derived Types: MetalGoldenPuzzleChest, StrongBoxPuzzle

+

Nested Types: PuzzleGump, StatusGump

+ (static) void GetRandomAOSStats( out int attributeCount, out int min, out int max )
+ (ctor) PuzzleChest( int itemID )
+ (ctor) PuzzleChest( Serial serial )
+ string DefaultName( get; )
+ PuzzleChestCylinder FirstHint( get; set; )
+ PuzzleChestCylinder[] Hints( get; )
+ PuzzleChestCylinder SecondHint( get; set; )
+ PuzzleChestSolution Solution( get; set; )
+ PuzzleChestCylinder ThirdHint( get; set; )
+ virtual bool CheckLocked( Mobile from )
+ void CleanupGuesses()
+ virtual void Deserialize( GenericReader reader )
+ void DoDamage( Mobile to )
+ virtual void GenerateTreasure()
+ PuzzleChestSolutionAndTime GetLastGuess( Mobile m )
+ void InitHints()
+ virtual void LockPick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void SetLockLevel()
+ void SubmitSolution( Mobile m, PuzzleChestSolution solution )
+ + diff --git a/Docs/types/PuzzleChestCylinder.html b/Docs/types/PuzzleChestCylinder.html new file mode 100644 index 0000000..f9c701f --- /dev/null +++ b/Docs/types/PuzzleChestCylinder.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - PuzzleChestCylinder + + +

Back to Server.Items

+

PuzzleChestCylinder (Enum)

+ None = 3699,
+ DarkBlue = 6249,
+ Blue = 6250,
+ Green = 6251,
+ Orange = 6252,
+ Purple = 6253,
+ Red = 6254,
+ LightBlue = 6255,
+ Yellow = 6256
+ + diff --git a/Docs/types/PuzzleChestSolution.html b/Docs/types/PuzzleChestSolution.html new file mode 100644 index 0000000..c441bdc --- /dev/null +++ b/Docs/types/PuzzleChestSolution.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - PuzzleChestSolution + + +

Back to Server.Items

+

PuzzleChestSolution

+

Derived Types: PuzzleChestSolutionAndTime

+ (static) PuzzleChestCylinder RandomCylinder()
+ (ctor) PuzzleChestSolution()
+ (ctor) PuzzleChestSolution( PuzzleChestSolution solution )
+ (ctor) PuzzleChestSolution( GenericReader reader )
+ (ctor) PuzzleChestSolution( PuzzleChestCylinder first, PuzzleChestCylinder second, PuzzleChestCylinder third, PuzzleChestCylinder fourth, PuzzleChestCylinder fifth )
+ PuzzleChestCylinder[] Cylinders( get; )
+ PuzzleChestCylinder Fifth( get; set; )
+ PuzzleChestCylinder First( get; set; )
+ PuzzleChestCylinder Fourth( get; set; )
+ PuzzleChestCylinder Second( get; set; )
+ PuzzleChestCylinder Third( get; set; )
+ bool Matches( PuzzleChestSolution solution, out int cylinders, out int colors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PuzzleChestSolutionAndTime.html b/Docs/types/PuzzleChestSolutionAndTime.html new file mode 100644 index 0000000..3a11d7e --- /dev/null +++ b/Docs/types/PuzzleChestSolutionAndTime.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - PuzzleChestSolutionAndTime + + +

Back to Server.Items

+

PuzzleChestSolutionAndTime : PuzzleChestSolution

+ (ctor) PuzzleChestSolutionAndTime( GenericReader reader )
+ (ctor) PuzzleChestSolutionAndTime( DateTime when, PuzzleChestSolution solution )
+ DateTime When( get; )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/PuzzleGump.html b/Docs/types/PuzzleGump.html new file mode 100644 index 0000000..8306f00 --- /dev/null +++ b/Docs/types/PuzzleGump.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - PuzzleGump + + +

Back to Server.Items

+

(PuzzleChest) - PuzzleGump : Gump

+ (ctor) PuzzleGump( Mobile from, PuzzleChest chest, PuzzleChestSolution solution, int check )
+ void AddCylinder( int x, int y, PuzzleChestCylinder cylinder )
+ void AddLeftCylinderButton( int x, int y, PuzzleChestCylinder cylinder, int buttonID )
+ void AddPedestal( int x, int y, PuzzleChestCylinder cylinder, int switchID, bool initialState )
+ void AddRightCylinderButton( int x, int y, PuzzleChestCylinder cylinder, int buttonID )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/PyramidAddon.html b/Docs/types/PyramidAddon.html new file mode 100644 index 0000000..939973d --- /dev/null +++ b/Docs/types/PyramidAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - PyramidAddon + + +

Back to Server.Items

+

PyramidAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) PyramidAddon()
+ (ctor) PyramidAddon( Serial serial )
+ bool ShareHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Quagmire.html b/Docs/types/Quagmire.html new file mode 100644 index 0000000..8c85a14 --- /dev/null +++ b/Docs/types/Quagmire.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Quagmire + + +

Back to Server.Mobiles

+

Quagmire : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Quagmire()
+ (ctor) Quagmire( Serial serial )
+ Poison HitPoison( get; )
+ double HitPoisonChance( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuarterStaff.html b/Docs/types/QuarterStaff.html new file mode 100644 index 0000000..2425124 --- /dev/null +++ b/Docs/types/QuarterStaff.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - QuarterStaff + + +

Back to Server.Items

+

QuarterStaff : BaseStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) QuarterStaff()
+ (ctor) QuarterStaff( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Quell.html b/Docs/types/Quell.html new file mode 100644 index 0000000..7229ced --- /dev/null +++ b/Docs/types/Quell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Quell + + +

Back to Server.Items

+

Quell : Bardiche, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+ (ctor) Quell()
+ (ctor) Quell( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QueryMakersMarkGump.html b/Docs/types/QueryMakersMarkGump.html new file mode 100644 index 0000000..e6783d8 --- /dev/null +++ b/Docs/types/QueryMakersMarkGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - QueryMakersMarkGump + + +

Back to Server.Engines.Craft

+

QueryMakersMarkGump : Gump

+ (ctor) QueryMakersMarkGump( int quality, Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/QuestArrow.html b/Docs/types/QuestArrow.html new file mode 100644 index 0000000..6596750 --- /dev/null +++ b/Docs/types/QuestArrow.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - QuestArrow + + +

Back to Server

+

QuestArrow

+

Derived Types: TrackArrow

+ (ctor) QuestArrow( Mobile m, Mobile t )
+ (ctor) QuestArrow( Mobile m, Mobile t, int x, int y )
+ Mobile Mobile( get; )
+ bool Running( get; )
+ Mobile Target( get; )
+ virtual void OnClick( bool rightClick )
+ virtual void OnStop()
+ void Stop()
+ void Stop( int x, int y )
+ void Update()
+ void Update( int x, int y )
+ + diff --git a/Docs/types/QuestCallback.html b/Docs/types/QuestCallback.html new file mode 100644 index 0000000..e09d7b9 --- /dev/null +++ b/Docs/types/QuestCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - QuestCallback + + +

Back to Server.Engines.Quests

+

QuestCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) QuestCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke()
+ + diff --git a/Docs/types/QuestCallbackEntry.html b/Docs/types/QuestCallbackEntry.html new file mode 100644 index 0000000..6607cfc --- /dev/null +++ b/Docs/types/QuestCallbackEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - QuestCallbackEntry + + +

Back to Server.Engines.Quests

+

QuestCallbackEntry : ContextMenuEntry

+ (ctor) QuestCallbackEntry( int number, QuestCallback callback )
+ (ctor) QuestCallbackEntry( int number, int range, QuestCallback callback )
+ virtual void OnClick()
+ + diff --git a/Docs/types/QuestCancelGump.html b/Docs/types/QuestCancelGump.html new file mode 100644 index 0000000..76af6a6 --- /dev/null +++ b/Docs/types/QuestCancelGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - QuestCancelGump + + +

Back to Server.Engines.Quests

+

QuestCancelGump : BaseQuestGump

+ (ctor) QuestCancelGump( QuestSystem system )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/QuestCompleteObjectiveRegion.html b/Docs/types/QuestCompleteObjectiveRegion.html new file mode 100644 index 0000000..087f93b --- /dev/null +++ b/Docs/types/QuestCompleteObjectiveRegion.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - QuestCompleteObjectiveRegion + + +

Back to Server.Engines.Quests

+

QuestCompleteObjectiveRegion : BaseRegion, IComparable

+ (ctor) QuestCompleteObjectiveRegion( XmlElement xml, Map map, Region parent )
+ Type Objective( get; )
+ Type Quest( get; )
+ virtual void OnEnter( Mobile m )
+ + diff --git a/Docs/types/QuestConversation.html b/Docs/types/QuestConversation.html new file mode 100644 index 0000000..1e36356 --- /dev/null +++ b/Docs/types/QuestConversation.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - QuestConversation + + +

Back to Server.Engines.Quests

+

QuestConversation

+

Derived Types: AcceptConversation, AcceptConversation, AcceptConversation, AcceptConversation, AcceptConversation, AcceptConversation, AcceptConversation, AcceptConversation, AcceptConversation, AcceptConversation, AcceptConversation, AlbertaAfterPaintingConversation, AlbertaEndPaintingConversation, AlbertaPaintingConversation, AlbertaStoolConversation, ApprenticeCorpseConversation, BankerConversation, BankerConversation, BlackheartFirstConversation, BlackheartNoPirateConversation, BlackheartPirateConversation, ContinueSlayHenchmenConversation, DeclineConversation, DirectionConversation, DontOfferConversation, DontOfferConversation, DontOfferConversation, DontOfferConversation, DontOfferConversation, DryadAppleConversation, DryadConversation, DuringFungiGatheringConversation, DuringFungiProcessConversation, DuringKillInfiltratorsConversation, DuringKillQueensConversation, DuringWaterGatheringConversation, EarnGiftsConversation, EarnLessGiftsConversation, ElwoodDuringAutograph1Conversation, ElwoodDuringAutograph2Conversation, ElwoodDuringAutograph3Conversation, ElwoodDuringFishConversation, ElwoodDuringPainting1Conversation, ElwoodDuringPainting2Conversation, ElwoodDuringToys1Conversation, ElwoodDuringToys2Conversation, ElwoodDuringToys3Conversation, End2Conversation, EndConversation, EndConversation, EndConversation, EndConversation, EndConversation, EndConversation, EndConversation, EnterCaveConversation, FewReagentsConversation, FifthTrialIntroConversation, FifthTrialReturnConversation, FindZoelConversation, FirstTrialIntroConversation, FirstTrialKillConversation, FourthTrialCatsConversation, FourthTrialIntroConversation, FullBackpackConversation, FullBackpackConversation, FullBackpackConversation, FullEndConversation, GabrielAutographConversation, GabrielIgnoreConversation, GabrielNoSheetMusicConversation, GabrielSheetMusicConversation, GainInnInformationConversation, GainKarmaConversation, GatherFungiConversation, GatherWaterConversation, GetSheetMusicConversation, GiveEminoSwordConversation, GiveZoelNoteConversation, HagDuringCorpseSearchConversation, HagDuringImpSearchConversation, HagDuringIngredientsConversation, HallwayWalkConversation, HealConversation, HorusConversation, HorusRewardConversation, ImpDeathConversation, LostCallingScrollConversation, LostDaemonBloodConversation, LostDaemonBoneConversation, LostFertileDirtConversation, LostNoteConversation, LostScrollOfPowerConversation, LostSwordConversation, LostSwordConversation, MaabasConversation, MardothEndConversation, MardothKronusConversation, MardothVaultConversation, MurderConversation, NaturalistDuringStudyConversation, NeedToHideConversation, NoSheetMusicConversation, ProcessFungiConversation, RadarConversation, RadarConversation, RadarConversation, RadarConversation, ReadAbraxusScrollConversation, ReanimateMaabusConversation, RecentlyFinishedConversation, RecipeConversation, ReturnAutographConversation, ReturnFromInnConversation, ReturnImagesConversation, ReturnPaintingConversation, ReturnPearlsConversation, ReturnSwordConversation, SchmendrickConversation, SearchForSwordConversation, SecondHorusConversation, SecondTrialAttackConversation, SecondTrialIntroConversation, SeventhTrialIntroConversation, SixthTrialIntroConversation, SlayHenchmenConversation, SneakPastGuardiansConversation, SpecialEndConversation, TakeCareConversation, ThirdTrialIntroConversation, ThirdTrialKillConversation, TomasDuringCollectingConversation, TomasToysConversation, UseTeleporterConversation, UzeraanDaemonBloodConversation, UzeraanDaemonBoneConversation, UzeraanFertileDirtConversation, UzeraanFirstTaskConversation, UzeraanReportConversation, UzeraanScrollOfPowerConversation, UzeraanTitheConversation, VanquishDaemonConversation, VaultOfSecretsConversation, ZeefzorpulConversation

+ (ctor) QuestConversation()
+ bool HasBeenRead( get; set; )
+ QuestItemInfo[] Info( get; )
+ bool Logged( get; )
+ object Message( get; )
+ QuestSystem System( get; set; )
+ virtual void BaseDeserialize( GenericReader reader )
+ virtual void BaseSerialize( GenericWriter writer )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnRead()
+ + diff --git a/Docs/types/QuestConversationsGump.html b/Docs/types/QuestConversationsGump.html new file mode 100644 index 0000000..f636102 --- /dev/null +++ b/Docs/types/QuestConversationsGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - QuestConversationsGump + + +

Back to Server.Engines.Quests

+

QuestConversationsGump : BaseQuestGump

+ (ctor) QuestConversationsGump( ArrayList conversations )
+ (ctor) QuestConversationsGump( QuestConversation conv )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/QuestDaemonBlood.html b/Docs/types/QuestDaemonBlood.html new file mode 100644 index 0000000..63af020 --- /dev/null +++ b/Docs/types/QuestDaemonBlood.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - QuestDaemonBlood + + +

Back to Server.Engines.Quests.Haven

+

QuestDaemonBlood : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) QuestDaemonBlood()
+ (ctor) QuestDaemonBlood( Serial serial )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuestDaemonBone.html b/Docs/types/QuestDaemonBone.html new file mode 100644 index 0000000..a613471 --- /dev/null +++ b/Docs/types/QuestDaemonBone.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - QuestDaemonBone + + +

Back to Server.Engines.Quests.Haven

+

QuestDaemonBone : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) QuestDaemonBone()
+ (ctor) QuestDaemonBone( Serial serial )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuestFertileDirt.html b/Docs/types/QuestFertileDirt.html new file mode 100644 index 0000000..62be376 --- /dev/null +++ b/Docs/types/QuestFertileDirt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - QuestFertileDirt + + +

Back to Server.Engines.Quests.Haven

+

QuestFertileDirt : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) QuestFertileDirt()
+ (ctor) QuestFertileDirt( Serial serial )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuestGumpRequestArgs.html b/Docs/types/QuestGumpRequestArgs.html new file mode 100644 index 0000000..49d604a --- /dev/null +++ b/Docs/types/QuestGumpRequestArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - QuestGumpRequestArgs + + +

Back to Server

+

QuestGumpRequestArgs : EventArgs

+ (ctor) QuestGumpRequestArgs( Mobile mobile )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/QuestGumpRequestHandler.html b/Docs/types/QuestGumpRequestHandler.html new file mode 100644 index 0000000..1e98074 --- /dev/null +++ b/Docs/types/QuestGumpRequestHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - QuestGumpRequestHandler + + +

Back to Server

+

QuestGumpRequestHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) QuestGumpRequestHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( QuestGumpRequestArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( QuestGumpRequestArgs e )
+ + diff --git a/Docs/types/QuestItem.html b/Docs/types/QuestItem.html new file mode 100644 index 0000000..5eab51f --- /dev/null +++ b/Docs/types/QuestItem.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - QuestItem + + +

Back to Server.Engines.Quests

+

QuestItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: EminosKatana, EnchantedPaints, HaochisKatana, KronusScroll, NoteForZoel, QuestDaemonBlood, QuestDaemonBone, QuestFertileDirt, SchmendrickScrollOfPower, ScrollOfAbraxus

+ (ctor) QuestItem( int itemID )
+ (ctor) QuestItem( Serial serial )
+ bool Accepted( get; )
+ virtual bool CanDrop( PlayerMobile pm )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool DropToItem( Mobile from, Item target, Point3D p )
+ virtual bool DropToMobile( Mobile from, Mobile target, Point3D p )
+ virtual bool DropToWorld( Mobile from, Point3D p )
+ virtual DeathMoveResult OnParentDeath( Mobile parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuestItemInfo.html b/Docs/types/QuestItemInfo.html new file mode 100644 index 0000000..47add4d --- /dev/null +++ b/Docs/types/QuestItemInfo.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - QuestItemInfo + + +

Back to Server.Engines.Quests

+

QuestItemInfo

+ (ctor) QuestItemInfo( object name, int itemID )
+ int ItemID( get; set; )
+ object Name( get; set; )
+ + diff --git a/Docs/types/QuestItemInfoGump.html b/Docs/types/QuestItemInfoGump.html new file mode 100644 index 0000000..349f0da --- /dev/null +++ b/Docs/types/QuestItemInfoGump.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - QuestItemInfoGump + + +

Back to Server.Engines.Quests

+

QuestItemInfoGump : BaseQuestGump

+ (ctor) QuestItemInfoGump( QuestItemInfo[] info )
+ + diff --git a/Docs/types/QuestLogUpdatedGump.html b/Docs/types/QuestLogUpdatedGump.html new file mode 100644 index 0000000..eba4eb2 --- /dev/null +++ b/Docs/types/QuestLogUpdatedGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - QuestLogUpdatedGump + + +

Back to Server.Engines.Quests

+

QuestLogUpdatedGump : BaseQuestGump

+ (ctor) QuestLogUpdatedGump( QuestSystem system )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/QuestNoEntryRegion.html b/Docs/types/QuestNoEntryRegion.html new file mode 100644 index 0000000..f7f8852 --- /dev/null +++ b/Docs/types/QuestNoEntryRegion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - QuestNoEntryRegion + + +

Back to Server.Engines.Quests

+

QuestNoEntryRegion : BaseRegion, IComparable

+ (ctor) QuestNoEntryRegion( XmlElement xml, Map map, Region parent )
+ Type MaxObjective( get; )
+ int Message( get; )
+ Type MinObjective( get; )
+ Type Quest( get; )
+ virtual bool OnMoveInto( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation )
+ + diff --git a/Docs/types/QuestObjective.html b/Docs/types/QuestObjective.html new file mode 100644 index 0000000..5bee54b --- /dev/null +++ b/Docs/types/QuestObjective.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - QuestObjective + + +

Back to Server.Engines.Quests

+

QuestObjective

+

Derived Types: AnimateMaabusCorpseObjective, CaptureImagesObjective, CashBankCheckObjective, CashBankCheckObjective, CollectBonesObjective, EnterCaveObjective, FetchAbraxusScrollObjective, FifthTrialIntroObjective, FifthTrialReturnObjective, FindAlbertaObjective, FindApprenticeObjective, FindApprenticeObjective, FindBankObjective, FindCallingScrollObjective, FindCityOfLightObjective, FindCrystalCaveObjective, FindDryadObjective, FindEminoBeginObjective, FindGabrielObjective, FindGrizeldaAboutMurderObjective, FindHaochiObjective, FindHorusAboutRewardObjective, FindIngredientObjective, FindMaabusCorpseObjective, FindMaabusTombObjective, FindMardothAboutKronusObjective, FindMardothAboutVaultObjective, FindMardothEndObjective, FindSchmendrickObjective, FindSheetMusicObjective, FindTomasObjective, FindUzeraanAboutReportObjective, FindUzeraanBeginObjective, FindUzeraanFirstTaskObjective, FindVaultOfSecretsObjective, FindWellOfTearsObjective, FindZeefzorpulObjective, FindZoelObjective, FirstKillObjective, FirstTrialIntroObjective, FirstTrialKillObjective, FirstTrialReturnObjective, FishPearlsObjective, FourthTrialCatsObjective, FourthTrialIntroObjective, FourthTrialReturnObjective, GainInnInformationObjective, GatherFungiObjective, GatherWaterObjective, GetDaemonBloodObjective, GetDaemonBoneObjective, GetRewardObjective, GetRewardObjective, GiveEminoSwordObjective, GiveZoelNoteObjective, HallwayWalkObjective, KillHordeMinionsObjective, KillImpsObjective, KillInfiltratorsObjective, KillQueensObjective, MakeRoomObjective, ProcessFungiObjective, ReadAbraxusScrollObjective, RetrieveAbraxusScrollObjective, ReturnAfterKillsObjective, ReturnAfterKillsObjective, ReturnAfterWaterObjective, ReturnAutographObjective, ReturnDaemonBloodObjective, ReturnDaemonBoneObjective, ReturnFertileDirtObjective, ReturnFromInnObjective, ReturnImagesObjective, ReturnIngredientsObjective, ReturnObjective, ReturnPaintingObjective, ReturnPearlsObjective, ReturnRecipeObjective, ReturnScrollOfPowerObjective, ReturnSheetMusicObjective, ReturnSwordObjective, ReturnToCrystalCaveObjective, ReturnToNaturalistObjective, ReturnToysObjective, SearchForSwordObjective, SecondKillObjective, SecondTrialAttackObjective, SecondTrialIntroObjective, SecondTrialReturnObjective, SeventhTrialIntroObjective, SeventhTrialReturnObjective, SitOnTheStoolObjective, SixthTrialIntroObjective, SixthTrialReturnObjective, SlayHenchmenObjective, SneakPastGuardiansObjective, SpeakCavePasswordObjective, StudyNestsObjective, ThirdKillObjective, ThirdTrialIntroObjective, ThirdTrialKillObjective, ThirdTrialReturnObjective, TitheGoldObjective, UseCallingScrollObjective, UseTeleporterObjective, VanquishDaemonObjective

+ (ctor) QuestObjective()
+ bool Completed( get; )
+ int CurProgress( get; set; )
+ bool HasBeenRead( get; set; )
+ bool HasCompleted( get; set; )
+ QuestItemInfo[] Info( get; )
+ bool IsSingleObjective( get; )
+ int MaxProgress( get; )
+ object Message( get; )
+ QuestSystem System( get; set; )
+ virtual void BaseDeserialize( GenericReader reader )
+ virtual void BaseSerialize( GenericWriter writer )
+ virtual void CheckCompletionStatus()
+ virtual void CheckProgress()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void Complete()
+ virtual bool GetKillEvent( BaseCreature creature, Container corpse )
+ virtual bool GetTimerEvent()
+ virtual bool IgnoreYoungProtection( Mobile from )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void OnRead()
+ virtual void RenderMessage( BaseQuestGump gump )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/QuestObjectivesGump.html b/Docs/types/QuestObjectivesGump.html new file mode 100644 index 0000000..51de520 --- /dev/null +++ b/Docs/types/QuestObjectivesGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - QuestObjectivesGump + + +

Back to Server.Engines.Quests

+

QuestObjectivesGump : BaseQuestGump

+ (ctor) QuestObjectivesGump( ArrayList objectives )
+ (ctor) QuestObjectivesGump( QuestObjective obj )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/QuestOfVirtues.html b/Docs/types/QuestOfVirtues.html new file mode 100644 index 0000000..ddb7e3e --- /dev/null +++ b/Docs/types/QuestOfVirtues.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - QuestOfVirtues + + +

Back to Server.Items

+

QuestOfVirtues : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) QuestOfVirtues()
+ (ctor) QuestOfVirtues( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuestOfferGump.html b/Docs/types/QuestOfferGump.html new file mode 100644 index 0000000..13c0c34 --- /dev/null +++ b/Docs/types/QuestOfferGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - QuestOfferGump + + +

Back to Server.Engines.Quests

+

QuestOfferGump : BaseQuestGump

+ (ctor) QuestOfferGump( QuestSystem system )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/QuestOfferRegion.html b/Docs/types/QuestOfferRegion.html new file mode 100644 index 0000000..3743516 --- /dev/null +++ b/Docs/types/QuestOfferRegion.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - QuestOfferRegion + + +

Back to Server.Engines.Quests

+

QuestOfferRegion : BaseRegion, IComparable

+ (ctor) QuestOfferRegion( XmlElement xml, Map map, Region parent )
+ Type Quest( get; )
+ virtual void OnEnter( Mobile m )
+ + diff --git a/Docs/types/QuestRestartInfo.html b/Docs/types/QuestRestartInfo.html new file mode 100644 index 0000000..cdfae64 --- /dev/null +++ b/Docs/types/QuestRestartInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - QuestRestartInfo + + +

Back to Server.Engines.Quests

+

QuestRestartInfo

+ (ctor) QuestRestartInfo( Type questType, DateTime restartTime )
+ (ctor) QuestRestartInfo( Type questType, TimeSpan restartDelay )
+ Type QuestType( get; set; )
+ DateTime RestartTime( get; set; )
+ void Reset( TimeSpan restartDelay )
+ + diff --git a/Docs/types/QuestSerializer.html b/Docs/types/QuestSerializer.html new file mode 100644 index 0000000..75a013a --- /dev/null +++ b/Docs/types/QuestSerializer.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - QuestSerializer + + +

Back to Server.Engines.Quests

+

QuestSerializer

+ (static) object Construct( Type type )
+ (static) QuestConversation DeserializeConversation( Type[] referenceTable, GenericReader reader )
+ (static) QuestObjective DeserializeObjective( Type[] referenceTable, GenericReader reader )
+ (static) QuestSystem DeserializeQuest( GenericReader reader )
+ (static) Type ReadType( Type[] referenceTable, GenericReader reader )
+ (static) void Serialize( QuestSystem qs, GenericWriter writer )
+ (static) void Serialize( Type[] referenceTable, QuestConversation conv, GenericWriter writer )
+ (static) void Serialize( Type[] referenceTable, QuestObjective obj, GenericWriter writer )
+ (static) void Write( Type type, Type[] referenceTable, GenericWriter writer )
+ (ctor) QuestSerializer()
+ + diff --git a/Docs/types/QuestSystem.html b/Docs/types/QuestSystem.html new file mode 100644 index 0000000..81bb31e --- /dev/null +++ b/Docs/types/QuestSystem.html @@ -0,0 +1,50 @@ + + + RunUO Documentation - Class Overview - QuestSystem + + +

Back to Server.Engines.Quests

+

QuestSystem

+

Derived Types: AmbitiousQueenQuest, CollectorQuest, DarkTidesQuest, EminosUndertakingQuest, HaochisTrialsQuest, SolenMatriarchQuest, StudyOfSolenQuest, TerribleHatchlingsQuest, TheSummoningQuest, UzeraanTurmoilQuest, WitchApprenticeQuest

+ (static) bool CanOfferQuest( Mobile check, Type questType )
+ (static) bool CanOfferQuest( Mobile check, Type questType, out bool inRestartPeriod )
+ (static) void FocusTo( Mobile who, Mobile to )
+ (static) int RandomBrightHue()
+ (ctor) QuestSystem()
+ (ctor) QuestSystem( PlayerMobile from )
+ ArrayList Conversations( get; set; )
+ PlayerMobile From( get; set; )
+ bool IsTutorial( get; )
+ object Name( get; )
+ ArrayList Objectives( get; set; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual void AddConversation( QuestConversation conv )
+ virtual void AddObjective( QuestObjective obj )
+ virtual void BaseDeserialize( GenericReader reader )
+ virtual void BaseSerialize( GenericWriter writer )
+ virtual void BeginCancelQuest()
+ virtual void Cancel()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void ClearQuest( bool completed )
+ virtual void Complete()
+ virtual void Decline()
+ virtual void EndCancelQuest( bool shouldCancel )
+ QuestObjective FindObjective( Type type )
+ virtual void GetContextMenuEntries( List<ContextMenuEntry> list )
+ virtual bool IgnoreYoungProtection( Mobile from )
+ bool IsObjectiveInProgress( Type type )
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void SendOffer()
+ virtual void ShowQuestConversation()
+ virtual void ShowQuestLog()
+ virtual void ShowQuestLogUpdated()
+ virtual void Slice()
+ virtual void StartTimer()
+ virtual void StopTimer()
+ + diff --git a/Docs/types/QuestionMenu.html b/Docs/types/QuestionMenu.html new file mode 100644 index 0000000..844c25b --- /dev/null +++ b/Docs/types/QuestionMenu.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - QuestionMenu + + +

Back to Server.Menus.Questions

+

QuestionMenu : IMenu

+

Derived Types: ContainedMenu, EquipDetailsMenu

+ (ctor) QuestionMenu( string question, string[] answers )
+ string[] Answers( get; )
+ string Question( get; set; )
+ int Server.Menus.IMenu.EntryLength( get; )
+ int Server.Menus.IMenu.Serial( get; )
+ virtual void OnCancel( NetState state )
+ virtual void OnResponse( NetState state, int index )
+ virtual void SendTo( NetState state )
+ + diff --git a/Docs/types/QueueStatus.html b/Docs/types/QueueStatus.html new file mode 100644 index 0000000..b2fb017 --- /dev/null +++ b/Docs/types/QueueStatus.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - QueueStatus + + +

Back to Server.Engines.Reports

+

QueueStatus : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) QueueStatus()
+ (ctor) QueueStatus( int count )
+ int Count( get; set; )
+ DateTime TimeStamp( get; set; )
+ PersistableType TypeID( get; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ + diff --git a/Docs/types/QueueStatusCollection.html b/Docs/types/QueueStatusCollection.html new file mode 100644 index 0000000..0d59b6f --- /dev/null +++ b/Docs/types/QueueStatusCollection.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - QueueStatusCollection + + +

Back to Server.Engines.Reports

+

QueueStatusCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: QueueStatusCollectionEnumerator

+ (ctor) QueueStatusCollection()
+ QueueStatus Item( get; set; )
+ int Add( QueueStatus value )
+ bool Contains( QueueStatus value )
+ QueueStatusCollectionEnumerator GetEnumerator()
+ int IndexOf( QueueStatus value )
+ void Insert( int index, QueueStatus value )
+ void Remove( QueueStatus value )
+ + diff --git a/Docs/types/QueueStatusCollectionEnumerator.html b/Docs/types/QueueStatusCollectionEnumerator.html new file mode 100644 index 0000000..b98e8ac --- /dev/null +++ b/Docs/types/QueueStatusCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - QueueStatusCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(QueueStatusCollection) - QueueStatusCollectionEnumerator : IEnumerator

+ (ctor) QueueStatusCollectionEnumerator( QueueStatusCollection collection )
+ QueueStatus Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/QueuedMemoryWriter.html b/Docs/types/QueuedMemoryWriter.html new file mode 100644 index 0000000..9f9d96b --- /dev/null +++ b/Docs/types/QueuedMemoryWriter.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - QueuedMemoryWriter + + +

Back to Server

+

QueuedMemoryWriter : BinaryFileWriter

+

Nested Types: IndexInfo

+ (ctor) QueuedMemoryWriter()
+ int BufferSize( get; )
+ void CommitTo( SequentialFileWriter dataFile, SequentialFileWriter indexFile )
+ void QueueForIndex( ISerializable serializable, int size )
+ + diff --git a/Docs/types/Quiche.html b/Docs/types/Quiche.html new file mode 100644 index 0000000..2564b20 --- /dev/null +++ b/Docs/types/Quiche.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Quiche + + +

Back to Server.Items

+

Quiche : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Quiche()
+ (ctor) Quiche( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuiverOfBlight.html b/Docs/types/QuiverOfBlight.html new file mode 100644 index 0000000..2ccab6e --- /dev/null +++ b/Docs/types/QuiverOfBlight.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - QuiverOfBlight + + +

Back to Server.Items

+

QuiverOfBlight : ElvenQuiver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) QuiverOfBlight()
+ (ctor) QuiverOfBlight( Serial serial )
+ int LabelNumber( get; )
+ virtual void AlterBowDamage( ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy, ref int chaos, ref int direct )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuiverOfElements.html b/Docs/types/QuiverOfElements.html new file mode 100644 index 0000000..8bdb538 --- /dev/null +++ b/Docs/types/QuiverOfElements.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - QuiverOfElements + + +

Back to Server.Items

+

QuiverOfElements : BaseQuiver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) QuiverOfElements()
+ (ctor) QuiverOfElements( Serial serial )
+ int LabelNumber( get; )
+ virtual void AlterBowDamage( ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy, ref int chaos, ref int direct )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuiverOfFire.html b/Docs/types/QuiverOfFire.html new file mode 100644 index 0000000..d7355d9 --- /dev/null +++ b/Docs/types/QuiverOfFire.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - QuiverOfFire + + +

Back to Server.Items

+

QuiverOfFire : ElvenQuiver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) QuiverOfFire()
+ (ctor) QuiverOfFire( Serial serial )
+ int LabelNumber( get; )
+ virtual void AlterBowDamage( ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy, ref int chaos, ref int direct )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuiverOfIce.html b/Docs/types/QuiverOfIce.html new file mode 100644 index 0000000..415f75f --- /dev/null +++ b/Docs/types/QuiverOfIce.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - QuiverOfIce + + +

Back to Server.Items

+

QuiverOfIce : ElvenQuiver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) QuiverOfIce()
+ (ctor) QuiverOfIce( Serial serial )
+ int LabelNumber( get; )
+ virtual void AlterBowDamage( ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy, ref int chaos, ref int direct )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuiverOfInfinity.html b/Docs/types/QuiverOfInfinity.html new file mode 100644 index 0000000..f4c1b58 --- /dev/null +++ b/Docs/types/QuiverOfInfinity.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - QuiverOfInfinity + + +

Back to Server.Items

+

QuiverOfInfinity : BaseQuiver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ITokunoDyable

+ (ctor) QuiverOfInfinity()
+ (ctor) QuiverOfInfinity( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuiverOfLightning.html b/Docs/types/QuiverOfLightning.html new file mode 100644 index 0000000..b434d8f --- /dev/null +++ b/Docs/types/QuiverOfLightning.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - QuiverOfLightning + + +

Back to Server.Items

+

QuiverOfLightning : ElvenQuiver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) QuiverOfLightning()
+ (ctor) QuiverOfLightning( Serial serial )
+ int LabelNumber( get; )
+ virtual void AlterBowDamage( ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy, ref int chaos, ref int direct )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/QuiverOfRage.html b/Docs/types/QuiverOfRage.html new file mode 100644 index 0000000..60dabfa --- /dev/null +++ b/Docs/types/QuiverOfRage.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - QuiverOfRage + + +

Back to Server.Items

+

QuiverOfRage : BaseQuiver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) QuiverOfRage()
+ (ctor) QuiverOfRage( Serial serial )
+ int LabelNumber( get; )
+ virtual void AlterBowDamage( ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy, ref int chaos, ref int direct )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Rabbit.html b/Docs/types/Rabbit.html new file mode 100644 index 0000000..e9f6d04 --- /dev/null +++ b/Docs/types/Rabbit.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Rabbit + + +

Back to Server.Mobiles

+

Rabbit : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Rabbit()
+ (ctor) Rabbit( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Race.html b/Docs/types/Race.html new file mode 100644 index 0000000..b4babb9 --- /dev/null +++ b/Docs/types/Race.html @@ -0,0 +1,47 @@ + + + RunUO Documentation - Class Overview - Race + + +

Back to Server

+

Race

+

Derived Types: Elf, Human

+ (static) List<Race> AllRaces( get; )
+ (static) Race DefaultRace( get; )
+ (static) Race Elf( get; )
+ (static) Race Human( get; )
+ (static) Race[] Races( get; )
+ (static) void CheckNamesAndValues()
+ (static) string[] GetRaceNames()
+ (static) Race[] GetRaceValues()
+ (static) Race Parse( string value )
+ (ctor) Race( int raceID, int raceIndex, string name, string pluralName, int maleBody, int femaleBody, int maleGhostBody, int femaleGhostBody, Expansion requiredExpansion )
+ int FemaleBody( get; )
+ int FemaleGhostBody( get; )
+ int MaleBody( get; )
+ int MaleGhostBody( get; )
+ string Name( get; set; )
+ string PluralName( get; set; )
+ int RaceID( get; )
+ int RaceIndex( get; )
+ Expansion RequiredExpansion( get; )
+ virtual int AliveBody( bool female )
+ virtual int AliveBody( Mobile m )
+ virtual int Body( Mobile m )
+ virtual int ClipHairHue( int hue )
+ virtual int ClipSkinHue( int hue )
+ virtual int GhostBody( bool female )
+ virtual int GhostBody( Mobile m )
+ virtual int RandomFacialHair( bool female )
+ virtual int RandomFacialHair( Mobile m )
+ virtual int RandomHair( Mobile m )
+ virtual int RandomHair( bool female )
+ virtual int RandomHairHue()
+ virtual int RandomSkinHue()
+ virtual string ToString()
+ virtual bool ValidateFacialHair( bool female, int itemID )
+ virtual bool ValidateFacialHair( Mobile m, int itemID )
+ virtual bool ValidateHair( bool female, int itemID )
+ virtual bool ValidateHair( Mobile m, int itemID )
+ + diff --git a/Docs/types/RaceDefinitions.html b/Docs/types/RaceDefinitions.html new file mode 100644 index 0000000..a54e452 --- /dev/null +++ b/Docs/types/RaceDefinitions.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RaceDefinitions + + +

Back to Server.Misc

+

RaceDefinitions

+

Nested Types: Elf, Human

+ (static) void Configure()
+ (static) void RegisterRace( Race race )
+ (ctor) RaceDefinitions()
+ + diff --git a/Docs/types/RadarConversation.html b/Docs/types/RadarConversation.html new file mode 100644 index 0000000..114be37 --- /dev/null +++ b/Docs/types/RadarConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RadarConversation + + +

Back to Server.Engines.Quests.Samurai

+

RadarConversation : QuestConversation

+ (ctor) RadarConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/RadiantScimitar.html b/Docs/types/RadiantScimitar.html new file mode 100644 index 0000000..c8705cf --- /dev/null +++ b/Docs/types/RadiantScimitar.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - RadiantScimitar + + +

Back to Server.Items

+

RadiantScimitar : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: OverseerSunderedBlade, SoulSeeker

+ (ctor) RadiantScimitar()
+ (ctor) RadiantScimitar( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RaedsGlory.html b/Docs/types/RaedsGlory.html new file mode 100644 index 0000000..7b5f203 --- /dev/null +++ b/Docs/types/RaedsGlory.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RaedsGlory + + +

Back to Server.Items

+

RaedsGlory : WarCleaver, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) RaedsGlory()
+ (ctor) RaedsGlory( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RaffleContextMenuEntry.html b/Docs/types/RaffleContextMenuEntry.html new file mode 100644 index 0000000..d059712 --- /dev/null +++ b/Docs/types/RaffleContextMenuEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RaffleContextMenuEntry + + +

Back to Server.Items

+

(HouseRaffleStone) - RaffleContextMenuEntry : ContextMenuEntry

+

Derived Types: ActivateEntry, EditEntry, ManagementEntry

+ (ctor) RaffleContextMenuEntry( Mobile from, HouseRaffleStone stone, int label )
+ + diff --git a/Docs/types/RaffleEntry.html b/Docs/types/RaffleEntry.html new file mode 100644 index 0000000..ecc3309 --- /dev/null +++ b/Docs/types/RaffleEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RaffleEntry + + +

Back to Server.Items

+

RaffleEntry

+ (ctor) RaffleEntry( Mobile from )
+ (ctor) RaffleEntry( GenericReader reader, int version )
+ IPAddress Address( get; )
+ DateTime Date( get; )
+ Mobile From( get; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RagingGrizzlyBear.html b/Docs/types/RagingGrizzlyBear.html new file mode 100644 index 0000000..31127a7 --- /dev/null +++ b/Docs/types/RagingGrizzlyBear.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RagingGrizzlyBear + + +

Back to Server.Mobiles

+

RagingGrizzlyBear : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RagingGrizzlyBear()
+ (ctor) RagingGrizzlyBear( Serial serial )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RaiJu.html b/Docs/types/RaiJu.html new file mode 100644 index 0000000..97e0acb --- /dev/null +++ b/Docs/types/RaiJu.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - RaiJu + + +

Back to Server.Mobiles

+

RaiJu : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: ExpireTimer

+ (ctor) RaiJu()
+ (ctor) RaiJu( Serial serial )
+ bool BleedImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ bool IsStunned( Mobile m )
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RaisableItem.html b/Docs/types/RaisableItem.html new file mode 100644 index 0000000..80f3c6d --- /dev/null +++ b/Docs/types/RaisableItem.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - RaisableItem + + +

Back to Server.Items

+

RaisableItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: RaiseTimer

+ (ctor) RaisableItem( int itemID )
+ (ctor) RaisableItem( Serial serial )
+ (ctor) RaisableItem( int itemID, int maxElevation, TimeSpan closeDelay )
+ (ctor) RaisableItem( int itemID, int maxElevation, int moveSound, int stopSound, TimeSpan closeDelay )
+ TimeSpan CloseDelay( get; set; )
+ bool IsRaisable( get; )
+ int MaxElevation( get; set; )
+ int MoveSound( get; set; )
+ int StopSound( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void Raise()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RaiseSwitch.html b/Docs/types/RaiseSwitch.html new file mode 100644 index 0000000..63d7d52 --- /dev/null +++ b/Docs/types/RaiseSwitch.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - RaiseSwitch + + +

Back to Server.Items

+

RaiseSwitch : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: DisappearingRaiseSwitch

+

Nested Types: ResetTimer

+ (ctor) RaiseSwitch()
+ (ctor) RaiseSwitch( int itemID )
+ (ctor) RaiseSwitch( Serial serial )
+ RaisableItem RaisableItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Flip()
+ virtual void OnDoubleClick( Mobile m )
+ virtual void Reset()
+ virtual void Serialize( GenericWriter writer )
+ void StartResetTimer( TimeSpan delay )
+ void StopResetTimer()
+ + diff --git a/Docs/types/RaiseTimer.html b/Docs/types/RaiseTimer.html new file mode 100644 index 0000000..4574fd7 --- /dev/null +++ b/Docs/types/RaiseTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RaiseTimer + + +

Back to Server.Items

+

(RaisableItem) - RaiseTimer : Timer

+ (ctor) RaiseTimer( RaisableItem item )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Rancher.html b/Docs/types/Rancher.html new file mode 100644 index 0000000..915ea3b --- /dev/null +++ b/Docs/types/Rancher.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Rancher + + +

Back to Server.Mobiles

+

Rancher : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Rancher()
+ (ctor) Rancher( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RandomTalisman.html b/Docs/types/RandomTalisman.html new file mode 100644 index 0000000..a0e0c57 --- /dev/null +++ b/Docs/types/RandomTalisman.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RandomTalisman + + +

Back to Server.Items

+

RandomTalisman : BaseTalisman, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RandomTalisman()
+ (ctor) RandomTalisman( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RandomWand.html b/Docs/types/RandomWand.html new file mode 100644 index 0000000..831a6b6 --- /dev/null +++ b/Docs/types/RandomWand.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RandomWand + + +

Back to Server.Items

+

RandomWand

+ (static) BaseWand CreateRandomWand()
+ (static) BaseWand CreateWand()
+ (ctor) RandomWand()
+ + diff --git a/Docs/types/Ranger.html b/Docs/types/Ranger.html new file mode 100644 index 0000000..5a81edb --- /dev/null +++ b/Docs/types/Ranger.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Ranger + + +

Back to Server.Mobiles

+

Ranger : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Ranger()
+ (ctor) Ranger( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RangerArms.html b/Docs/types/RangerArms.html new file mode 100644 index 0000000..2ed1adb --- /dev/null +++ b/Docs/types/RangerArms.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RangerArms + + +

Back to Server.Items

+

RangerArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RangerArms()
+ (ctor) RangerArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RangerChest.html b/Docs/types/RangerChest.html new file mode 100644 index 0000000..5559fba --- /dev/null +++ b/Docs/types/RangerChest.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RangerChest + + +

Back to Server.Items

+

RangerChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RangerChest()
+ (ctor) RangerChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RangerGloves.html b/Docs/types/RangerGloves.html new file mode 100644 index 0000000..64aa621 --- /dev/null +++ b/Docs/types/RangerGloves.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RangerGloves + + +

Back to Server.Items

+

RangerGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RangerGloves()
+ (ctor) RangerGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RangerGorget.html b/Docs/types/RangerGorget.html new file mode 100644 index 0000000..2b23215 --- /dev/null +++ b/Docs/types/RangerGorget.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RangerGorget + + +

Back to Server.Items

+

RangerGorget : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RangerGorget()
+ (ctor) RangerGorget( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RangerGuildmaster.html b/Docs/types/RangerGuildmaster.html new file mode 100644 index 0000000..0c1ab77 --- /dev/null +++ b/Docs/types/RangerGuildmaster.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RangerGuildmaster + + +

Back to Server.Mobiles

+

RangerGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) RangerGuildmaster()
+ (ctor) RangerGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RangerLegs.html b/Docs/types/RangerLegs.html new file mode 100644 index 0000000..348271d --- /dev/null +++ b/Docs/types/RangerLegs.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RangerLegs + + +

Back to Server.Items

+

RangerLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RangerLegs()
+ (ctor) RangerLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RankComparer.html b/Docs/types/RankComparer.html new file mode 100644 index 0000000..737c502 --- /dev/null +++ b/Docs/types/RankComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RankComparer + + +

Back to Server.Guilds

+

(GuildRosterGump) - RankComparer : IComparer<PlayerMobile>

+ (ctor) RankComparer()
+ virtual int Compare( PlayerMobile x, PlayerMobile y )
+ + diff --git a/Docs/types/RankDefinition.html b/Docs/types/RankDefinition.html new file mode 100644 index 0000000..f474f9d --- /dev/null +++ b/Docs/types/RankDefinition.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - RankDefinition + + +

Back to Server.Guilds

+

RankDefinition

+ (static) RankDefinition Leader( get; )
+ (static) RankDefinition Lowest( get; )
+ (static) RankDefinition Member( get; )
+ (ctor) RankDefinition( TextDefinition name, int rank, RankFlags flags )
+ RankFlags Flags( get; )
+ TextDefinition Name( get; )
+ int Rank( get; )
+ bool GetFlag( RankFlags flag )
+ void SetFlag( RankFlags flag, bool value )
+ + diff --git a/Docs/types/RankFlags.html b/Docs/types/RankFlags.html new file mode 100644 index 0000000..2ee796c --- /dev/null +++ b/Docs/types/RankFlags.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - RankFlags + + +

Back to Server.Guilds

+

RankFlags (Enum)

+ None = 0x00000000,
+ CanInvitePlayer = 0x00000001,
+ AccessGuildItems = 0x00000002,
+ RemoveLowestRank = 0x00000004,
+ RemovePlayers = 0x00000008,
+ CanPromoteDemote = 0x00000010,
+ ControlWarStatus = 0x00000020,
+ AllianceControl = 0x00000040,
+ CanSetGuildTitle = 0x00000080,
+ CanVote = 0x00000100,
+ Member = 0x00000106,
+ All = 0x000001FF
+ + diff --git a/Docs/types/RankingsOfTrades.html b/Docs/types/RankingsOfTrades.html new file mode 100644 index 0000000..7e42e59 --- /dev/null +++ b/Docs/types/RankingsOfTrades.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RankingsOfTrades + + +

Back to Server.Items

+

RankingsOfTrades : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) RankingsOfTrades()
+ (ctor) RankingsOfTrades( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Rat.html b/Docs/types/Rat.html new file mode 100644 index 0000000..5c99365 --- /dev/null +++ b/Docs/types/Rat.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Rat + + +

Back to Server.Mobiles

+

Rat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Rat()
+ (ctor) Rat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RatCamp.html b/Docs/types/RatCamp.html new file mode 100644 index 0000000..82fa4aa --- /dev/null +++ b/Docs/types/RatCamp.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - RatCamp + + +

Back to Server.Multis

+

RatCamp : BaseCamp, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RatCamp()
+ (ctor) RatCamp( Serial serial )
+ Mobile Ratmen( get; )
+ void AddCampChests()
+ virtual void AddComponents()
+ virtual void AddItem( Item item, int xOffset, int yOffset, int zOffset )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ratman.html b/Docs/types/Ratman.html new file mode 100644 index 0000000..732fea0 --- /dev/null +++ b/Docs/types/Ratman.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Ratman + + +

Back to Server.Mobiles

+

Ratman : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Ratman()
+ (ctor) Ratman( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ InhumanSpeech SpeechType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RatmanArcher.html b/Docs/types/RatmanArcher.html new file mode 100644 index 0000000..c2ad4ea --- /dev/null +++ b/Docs/types/RatmanArcher.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - RatmanArcher + + +

Back to Server.Mobiles

+

RatmanArcher : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RatmanArcher()
+ (ctor) RatmanArcher( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ InhumanSpeech SpeechType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RatmanMage.html b/Docs/types/RatmanMage.html new file mode 100644 index 0000000..52c06b9 --- /dev/null +++ b/Docs/types/RatmanMage.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - RatmanMage + + +

Back to Server.Mobiles

+

RatmanMage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RatmanMage()
+ (ctor) RatmanMage( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ InhumanSpeech SpeechType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RattanDoor.html b/Docs/types/RattanDoor.html new file mode 100644 index 0000000..3e0d6fa --- /dev/null +++ b/Docs/types/RattanDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RattanDoor + + +

Back to Server.Items

+

RattanDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) RattanDoor( DoorFacing facing )
+ (ctor) RattanDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ravager.html b/Docs/types/Ravager.html new file mode 100644 index 0000000..25e7f7f --- /dev/null +++ b/Docs/types/Ravager.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Ravager + + +

Back to Server.Mobiles

+

Ravager : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Ravager()
+ (ctor) Ravager( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RavenHelm.html b/Docs/types/RavenHelm.html new file mode 100644 index 0000000..04d2d98 --- /dev/null +++ b/Docs/types/RavenHelm.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RavenHelm + + +

Back to Server.Items

+

RavenHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: IronwoodCrown

+ (ctor) RavenHelm()
+ (ctor) RavenHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RawBird.html b/Docs/types/RawBird.html new file mode 100644 index 0000000..87dc460 --- /dev/null +++ b/Docs/types/RawBird.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RawBird + + +

Back to Server.Items

+

RawBird : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RawBird()
+ (ctor) RawBird( Serial serial )
+ (ctor) RawBird( int amount )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RawChickenLeg.html b/Docs/types/RawChickenLeg.html new file mode 100644 index 0000000..19db161 --- /dev/null +++ b/Docs/types/RawChickenLeg.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RawChickenLeg + + +

Back to Server.Items

+

RawChickenLeg : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RawChickenLeg()
+ (ctor) RawChickenLeg( Serial serial )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RawFishSteak.html b/Docs/types/RawFishSteak.html new file mode 100644 index 0000000..2e3489f --- /dev/null +++ b/Docs/types/RawFishSteak.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RawFishSteak + + +

Back to Server.Items

+

RawFishSteak : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RawFishSteak()
+ (ctor) RawFishSteak( int amount )
+ (ctor) RawFishSteak( Serial serial )
+ double DefaultWeight( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RawLambLeg.html b/Docs/types/RawLambLeg.html new file mode 100644 index 0000000..be6c9f0 --- /dev/null +++ b/Docs/types/RawLambLeg.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RawLambLeg + + +

Back to Server.Items

+

RawLambLeg : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RawLambLeg()
+ (ctor) RawLambLeg( Serial serial )
+ (ctor) RawLambLeg( int amount )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RawRibs.html b/Docs/types/RawRibs.html new file mode 100644 index 0000000..b9a4075 --- /dev/null +++ b/Docs/types/RawRibs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RawRibs + + +

Back to Server.Items

+

RawRibs : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RawRibs()
+ (ctor) RawRibs( Serial serial )
+ (ctor) RawRibs( int amount )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Reaction.html b/Docs/types/Reaction.html new file mode 100644 index 0000000..540749d --- /dev/null +++ b/Docs/types/Reaction.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Reaction + + +

Back to Server.Factions.AI

+

Reaction

+ (ctor) Reaction( GenericReader reader )
+ (ctor) Reaction( Faction faction, ReactionType type )
+ Faction Faction( get; )
+ ReactionType Type( get; set; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ReactionType.html b/Docs/types/ReactionType.html new file mode 100644 index 0000000..8acb7da --- /dev/null +++ b/Docs/types/ReactionType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReactionType + + +

Back to Server.Factions.AI

+

ReactionType (Enum)

+ Ignore = 0,
+ Warn = 1,
+ Attack = 2
+ + diff --git a/Docs/types/ReactiveArmorScroll.html b/Docs/types/ReactiveArmorScroll.html new file mode 100644 index 0000000..c796e45 --- /dev/null +++ b/Docs/types/ReactiveArmorScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ReactiveArmorScroll + + +

Back to Server.Items

+

ReactiveArmorScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ReactiveArmorScroll()
+ (ctor) ReactiveArmorScroll( int amount )
+ (ctor) ReactiveArmorScroll( Serial ser )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ReactiveArmorSpell.html b/Docs/types/ReactiveArmorSpell.html new file mode 100644 index 0000000..91a6879 --- /dev/null +++ b/Docs/types/ReactiveArmorSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ReactiveArmorSpell + + +

Back to Server.Spells.First

+

ReactiveArmorSpell : MagerySpell, ISpell

+ (static) void EndArmor( Mobile m )
+ (ctor) ReactiveArmorSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/ReadAbraxusScrollConversation.html b/Docs/types/ReadAbraxusScrollConversation.html new file mode 100644 index 0000000..ec39a20 --- /dev/null +++ b/Docs/types/ReadAbraxusScrollConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReadAbraxusScrollConversation + + +

Back to Server.Engines.Quests.Necro

+

ReadAbraxusScrollConversation : QuestConversation

+ (ctor) ReadAbraxusScrollConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ReadAbraxusScrollObjective.html b/Docs/types/ReadAbraxusScrollObjective.html new file mode 100644 index 0000000..e82ea48 --- /dev/null +++ b/Docs/types/ReadAbraxusScrollObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReadAbraxusScrollObjective + + +

Back to Server.Engines.Quests.Necro

+

ReadAbraxusScrollObjective : QuestObjective

+ (ctor) ReadAbraxusScrollObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReadAccessException.html b/Docs/types/ReadAccessException.html new file mode 100644 index 0000000..dd66a0f --- /dev/null +++ b/Docs/types/ReadAccessException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ReadAccessException + + +

Back to Server

+

ReadAccessException : ClearanceException, ISerializable, _Exception

+ (ctor) ReadAccessException( Property property, AccessLevel playerAccess, AccessLevel neededAccess )
+ + diff --git a/Docs/types/ReadOnlyException.html b/Docs/types/ReadOnlyException.html new file mode 100644 index 0000000..8fa654e --- /dev/null +++ b/Docs/types/ReadOnlyException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ReadOnlyException + + +

Back to Server

+

ReadOnlyException : BindingException, ISerializable, _Exception

+ (ctor) ReadOnlyException( Property property )
+ + diff --git a/Docs/types/Reagent.html b/Docs/types/Reagent.html new file mode 100644 index 0000000..7829360 --- /dev/null +++ b/Docs/types/Reagent.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Reagent + + +

Back to Server.Spells

+

Reagent

+ (static) Type BatWing( get; set; )
+ (static) Type BlackPearl( get; set; )
+ (static) Type Bloodmoss( get; set; )
+ (static) Type DaemonBlood( get; set; )
+ (static) Type Garlic( get; set; )
+ (static) Type Ginseng( get; set; )
+ (static) Type GraveDust( get; set; )
+ (static) Type MandrakeRoot( get; set; )
+ (static) Type Nightshade( get; set; )
+ (static) Type NoxCrystal( get; set; )
+ (static) Type PigIron( get; set; )
+ (static) Type SpidersSilk( get; set; )
+ (static) Type SulfurousAsh( get; set; )
+ (ctor) Reagent()
+ Type[] Types( get; )
+ + diff --git a/Docs/types/RealEstateBroker.html b/Docs/types/RealEstateBroker.html new file mode 100644 index 0000000..1473aba --- /dev/null +++ b/Docs/types/RealEstateBroker.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - RealEstateBroker + + +

Back to Server.Mobiles

+

RealEstateBroker : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) RealEstateBroker()
+ (ctor) RealEstateBroker( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ void Appraise_OnTarget( Mobile from, object obj )
+ int ComputePriceFor( HouseDeed deed )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void InitSBInfo()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ReanimateMaabusConversation.html b/Docs/types/ReanimateMaabusConversation.html new file mode 100644 index 0000000..9499905 --- /dev/null +++ b/Docs/types/ReanimateMaabusConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ReanimateMaabusConversation + + +

Back to Server.Engines.Quests.Necro

+

ReanimateMaabusConversation : QuestConversation

+ (ctor) ReanimateMaabusConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/Reaper.html b/Docs/types/Reaper.html new file mode 100644 index 0000000..b54424d --- /dev/null +++ b/Docs/types/Reaper.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Reaper + + +

Back to Server.Mobiles

+

Reaper : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Reaper()
+ (ctor) Reaper( Serial serial )
+ bool DisallowAllMoves( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ReaperFormScroll.html b/Docs/types/ReaperFormScroll.html new file mode 100644 index 0000000..cf68423 --- /dev/null +++ b/Docs/types/ReaperFormScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ReaperFormScroll + + +

Back to Server.Items

+

ReaperFormScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ReaperFormScroll()
+ (ctor) ReaperFormScroll( int amount )
+ (ctor) ReaperFormScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ReaperFormSpell.html b/Docs/types/ReaperFormSpell.html new file mode 100644 index 0000000..45425a0 --- /dev/null +++ b/Docs/types/ReaperFormSpell.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - ReaperFormSpell + + +

Back to Server.Spells.Spellweaving

+

ReaperFormSpell : ArcaneForm, ISpell, ITransformationSpell

+ (static) void Initialize()
+ (static) void OnLogin( LoginEventArgs e )
+ (ctor) ReaperFormSpell( Mobile caster, Item scroll )
+ int Body( get; )
+ TimeSpan CastDelayBase( get; )
+ int ColdResistOffset( get; )
+ int FireResistOffset( get; )
+ int NrgyResistOffset( get; )
+ int PhysResistOffset( get; )
+ int PoisResistOffset( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int SpellDamageBonus( get; )
+ int SwingSpeedBonus( get; )
+ virtual void DoEffect( Mobile m )
+ virtual void RemoveEffect( Mobile m )
+ + diff --git a/Docs/types/RecallRune.html b/Docs/types/RecallRune.html new file mode 100644 index 0000000..f597f58 --- /dev/null +++ b/Docs/types/RecallRune.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - RecallRune + + +

Back to Server.Items

+

RecallRune : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: RenamePrompt

+ (ctor) RecallRune()
+ (ctor) RecallRune( Serial serial )
+ string Description( get; set; )
+ BaseHouse House( get; set; )
+ bool Marked( get; set; )
+ Point3D Target( get; set; )
+ Map TargetMap( get; set; )
+ void CalculateHue()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ void Mark( Mobile m )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RecallScroll.html b/Docs/types/RecallScroll.html new file mode 100644 index 0000000..8119c77 --- /dev/null +++ b/Docs/types/RecallScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RecallScroll + + +

Back to Server.Items

+

RecallScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) RecallScroll()
+ (ctor) RecallScroll( int amount )
+ (ctor) RecallScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RecallSpell.html b/Docs/types/RecallSpell.html new file mode 100644 index 0000000..264afc9 --- /dev/null +++ b/Docs/types/RecallSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RecallSpell + + +

Back to Server.Spells.Fourth

+

RecallSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) RecallSpell( Mobile caster, Item scroll )
+ (ctor) RecallSpell( Mobile caster, Item scroll, RunebookEntry entry, Runebook book )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ void Effect( Point3D loc, Map map, bool checkMulti )
+ virtual void GetCastSkills( out double min, out double max )
+ virtual void OnCast()
+ + diff --git a/Docs/types/ReceedingHair.html b/Docs/types/ReceedingHair.html new file mode 100644 index 0000000..a01fe1a --- /dev/null +++ b/Docs/types/ReceedingHair.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ReceedingHair + + +

Back to Server.Items

+

ReceedingHair : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ReceedingHair()
+ (ctor) ReceedingHair( int hue )
+ (ctor) ReceedingHair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ReceiverCrystal.html b/Docs/types/ReceiverCrystal.html new file mode 100644 index 0000000..be9b5ed --- /dev/null +++ b/Docs/types/ReceiverCrystal.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ReceiverCrystal + + +

Back to Server.Items

+

ReceiverCrystal : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) ReceiverCrystal()
+ (ctor) ReceiverCrystal( Serial serial )
+ bool Active( get; set; )
+ int LabelNumber( get; )
+ BroadcastCrystal Sender( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void TransmitMessage( Mobile from, string message )
+ + diff --git a/Docs/types/RecentlyFinishedConversation.html b/Docs/types/RecentlyFinishedConversation.html new file mode 100644 index 0000000..1edd121 --- /dev/null +++ b/Docs/types/RecentlyFinishedConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RecentlyFinishedConversation + + +

Back to Server.Engines.Quests.Hag

+

RecentlyFinishedConversation : QuestConversation

+ (ctor) RecentlyFinishedConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/RechargeEntry.html b/Docs/types/RechargeEntry.html new file mode 100644 index 0000000..62edba9 --- /dev/null +++ b/Docs/types/RechargeEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RechargeEntry + + +

Back to Server.Mobiles

+

(TinkerGuildmaster) - RechargeEntry : ContextMenuEntry

+ (ctor) RechargeEntry( Mobile from, Mobile vendor )
+ virtual void OnClick()
+ + diff --git a/Docs/types/Recipe.html b/Docs/types/Recipe.html new file mode 100644 index 0000000..d048ee3 --- /dev/null +++ b/Docs/types/Recipe.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Recipe + + +

Back to Server.Engines.Craft

+

Recipe

+

Nested Types: (Anonymous-Type)--c__DisplayClass1, (Anonymous-Type)--c__DisplayClass4

+ (static) int LargestRecipeID( get; )
+ (static) Dictionary<Int32,Recipe> Recipes( get; )
+ (static) void ForgetAllRecipes_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (static) void LearnAllRecipes_OnCommand( CommandEventArgs e )
+ (ctor) Recipe( int id, CraftSystem system, CraftItem item )
+ CraftItem CraftItem( get; set; )
+ CraftSystem CraftSystem( get; set; )
+ int ID( get; )
+ TextDefinition TextDefinition( get; )
+ + diff --git a/Docs/types/RecipeConversation.html b/Docs/types/RecipeConversation.html new file mode 100644 index 0000000..1dcd1ea --- /dev/null +++ b/Docs/types/RecipeConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RecipeConversation + + +

Back to Server.Engines.Quests.Hag

+

RecipeConversation : QuestConversation

+ (ctor) RecipeConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/RecipeScroll.html b/Docs/types/RecipeScroll.html new file mode 100644 index 0000000..1b26363 --- /dev/null +++ b/Docs/types/RecipeScroll.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - RecipeScroll + + +

Back to Server.Items

+

RecipeScroll : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RecipeScroll( Serial serial )
+ (ctor) RecipeScroll( int recipeID )
+ (ctor) RecipeScroll( Recipe r )
+ int LabelNumber( get; )
+ Recipe Recipe( get; )
+ int RecipeID( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ReclaimVendorGump.html b/Docs/types/ReclaimVendorGump.html new file mode 100644 index 0000000..f5291cd --- /dev/null +++ b/Docs/types/ReclaimVendorGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ReclaimVendorGump + + +

Back to Server.Gumps

+

ReclaimVendorGump : Gump

+ (ctor) ReclaimVendorGump( BaseHouse house )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ReclaimVendorInventoryEntry.html b/Docs/types/ReclaimVendorInventoryEntry.html new file mode 100644 index 0000000..bf1ebfe --- /dev/null +++ b/Docs/types/ReclaimVendorInventoryEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ReclaimVendorInventoryEntry + + +

Back to Server.Multis

+

(HouseSign) - ReclaimVendorInventoryEntry : ContextMenuEntry

+ (ctor) ReclaimVendorInventoryEntry( HouseSign sign )
+ virtual void OnClick()
+ + diff --git a/Docs/types/Rectangle2D.html b/Docs/types/Rectangle2D.html new file mode 100644 index 0000000..0ff3249 --- /dev/null +++ b/Docs/types/Rectangle2D.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Rectangle2D + + +

Back to Server

+

Rectangle2D

+ (static) Rectangle2D Parse( string value )
+ (ctor) Rectangle2D( IPoint2D start, IPoint2D end )
+ (ctor) Rectangle2D( int x, int y, int width, int height )
+ Point2D End( get; set; )
+ int Height( get; set; )
+ Point2D Start( get; set; )
+ int Width( get; set; )
+ int X( get; set; )
+ int Y( get; set; )
+ bool Contains( IPoint2D p )
+ bool Contains( Point3D p )
+ bool Contains( Point2D p )
+ void MakeHold( Rectangle2D r )
+ void Set( int x, int y, int width, int height )
+ virtual string ToString()
+ + diff --git a/Docs/types/Rectangle3D.html b/Docs/types/Rectangle3D.html new file mode 100644 index 0000000..f49a83f --- /dev/null +++ b/Docs/types/Rectangle3D.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Rectangle3D + + +

Back to Server

+

Rectangle3D

+ (ctor) Rectangle3D( Point3D start, Point3D end )
+ (ctor) Rectangle3D( int x, int y, int z, int width, int height, int depth )
+ int Depth( get; )
+ Point3D End( get; set; )
+ int Height( get; )
+ Point3D Start( get; set; )
+ int Width( get; )
+ bool Contains( Point3D p )
+ bool Contains( IPoint3D p )
+ + diff --git a/Docs/types/RedAmbitiousSolenQueen.html b/Docs/types/RedAmbitiousSolenQueen.html new file mode 100644 index 0000000..d608cc8 --- /dev/null +++ b/Docs/types/RedAmbitiousSolenQueen.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RedAmbitiousSolenQueen + + +

Back to Server.Engines.Quests.Ambitious

+

RedAmbitiousSolenQueen : BaseAmbitiousSolenQueen, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) RedAmbitiousSolenQueen()
+ (ctor) RedAmbitiousSolenQueen( Serial serial )
+ bool RedSolen( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedArmoire.html b/Docs/types/RedArmoire.html new file mode 100644 index 0000000..a87e8ed --- /dev/null +++ b/Docs/types/RedArmoire.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RedArmoire + + +

Back to Server.Items

+

RedArmoire : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedArmoire()
+ (ctor) RedArmoire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedBeaker.html b/Docs/types/RedBeaker.html new file mode 100644 index 0000000..1260281 --- /dev/null +++ b/Docs/types/RedBeaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RedBeaker + + +

Back to Server.Items

+

RedBeaker : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedBeaker()
+ (ctor) RedBeaker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedBook.html b/Docs/types/RedBook.html new file mode 100644 index 0000000..5e145be --- /dev/null +++ b/Docs/types/RedBook.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RedBook + + +

Back to Server.Items

+

RedBook : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Derived Types: BlackthornWelcomeBook, FropozJournal, KaburJournal

+ (ctor) RedBook()
+ (ctor) RedBook( Serial serial )
+ (ctor) RedBook( bool writable )
+ (ctor) RedBook( int pageCount, bool writable )
+ (ctor) RedBook( string title, string author, int pageCount, bool writable )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedBottle.html b/Docs/types/RedBottle.html new file mode 100644 index 0000000..9a68f6a --- /dev/null +++ b/Docs/types/RedBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RedBottle + + +

Back to Server.Items

+

RedBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedBottle()
+ (ctor) RedBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedCurvedFlask.html b/Docs/types/RedCurvedFlask.html new file mode 100644 index 0000000..73f0602 --- /dev/null +++ b/Docs/types/RedCurvedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RedCurvedFlask + + +

Back to Server.Items

+

RedCurvedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedCurvedFlask()
+ (ctor) RedCurvedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedHangingLantern.html b/Docs/types/RedHangingLantern.html new file mode 100644 index 0000000..34d8ae7 --- /dev/null +++ b/Docs/types/RedHangingLantern.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RedHangingLantern + + +

Back to Server.Items

+

RedHangingLantern : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedHangingLantern()
+ (ctor) RedHangingLantern( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedLeaves.html b/Docs/types/RedLeaves.html new file mode 100644 index 0000000..476ae9f --- /dev/null +++ b/Docs/types/RedLeaves.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - RedLeaves + + +

Back to Server.Items

+

RedLeaves : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) RedLeaves()
+ (ctor) RedLeaves( Serial serial )
+ (ctor) RedLeaves( int amount )
+ double DefaultWeight( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedMisoSoup.html b/Docs/types/RedMisoSoup.html new file mode 100644 index 0000000..0b6d7a3 --- /dev/null +++ b/Docs/types/RedMisoSoup.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RedMisoSoup + + +

Back to Server.Items

+

RedMisoSoup : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedMisoSoup()
+ (ctor) RedMisoSoup( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedPlainRugAddon.html b/Docs/types/RedPlainRugAddon.html new file mode 100644 index 0000000..4d88f34 --- /dev/null +++ b/Docs/types/RedPlainRugAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RedPlainRugAddon + + +

Back to Server.Items

+

RedPlainRugAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) RedPlainRugAddon()
+ (ctor) RedPlainRugAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedPlainRugDeed.html b/Docs/types/RedPlainRugDeed.html new file mode 100644 index 0000000..a9ca8fd --- /dev/null +++ b/Docs/types/RedPlainRugDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RedPlainRugDeed + + +

Back to Server.Items

+

RedPlainRugDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedPlainRugDeed()
+ (ctor) RedPlainRugDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedPoinsettia.html b/Docs/types/RedPoinsettia.html new file mode 100644 index 0000000..0197adc --- /dev/null +++ b/Docs/types/RedPoinsettia.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RedPoinsettia + + +

Back to Server.Items

+

RedPoinsettia : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedPoinsettia()
+ (ctor) RedPoinsettia( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedRibbedFlask.html b/Docs/types/RedRibbedFlask.html new file mode 100644 index 0000000..3504b10 --- /dev/null +++ b/Docs/types/RedRibbedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RedRibbedFlask + + +

Back to Server.Items

+

RedRibbedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedRibbedFlask()
+ (ctor) RedRibbedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedScales.html b/Docs/types/RedScales.html new file mode 100644 index 0000000..1370999 --- /dev/null +++ b/Docs/types/RedScales.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RedScales + + +

Back to Server.Items

+

RedScales : BaseScales, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) RedScales()
+ (ctor) RedScales( int amount )
+ (ctor) RedScales( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedSolenInfiltratorQueen.html b/Docs/types/RedSolenInfiltratorQueen.html new file mode 100644 index 0000000..596f220 --- /dev/null +++ b/Docs/types/RedSolenInfiltratorQueen.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - RedSolenInfiltratorQueen + + +

Back to Server.Mobiles

+

RedSolenInfiltratorQueen : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RedSolenInfiltratorQueen()
+ (ctor) RedSolenInfiltratorQueen( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedSolenInfiltratorWarrior.html b/Docs/types/RedSolenInfiltratorWarrior.html new file mode 100644 index 0000000..581eb3c --- /dev/null +++ b/Docs/types/RedSolenInfiltratorWarrior.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - RedSolenInfiltratorWarrior + + +

Back to Server.Mobiles

+

RedSolenInfiltratorWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RedSolenInfiltratorWarrior()
+ (ctor) RedSolenInfiltratorWarrior( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedSolenMatriarch.html b/Docs/types/RedSolenMatriarch.html new file mode 100644 index 0000000..0b83877 --- /dev/null +++ b/Docs/types/RedSolenMatriarch.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RedSolenMatriarch + + +

Back to Server.Engines.Quests.Matriarch

+

RedSolenMatriarch : BaseSolenMatriarch, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) RedSolenMatriarch()
+ (ctor) RedSolenMatriarch( Serial serial )
+ bool RedSolen( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedSolenQueen.html b/Docs/types/RedSolenQueen.html new file mode 100644 index 0000000..a45144e --- /dev/null +++ b/Docs/types/RedSolenQueen.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - RedSolenQueen + + +

Back to Server.Mobiles

+

RedSolenQueen : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RedSolenQueen()
+ (ctor) RedSolenQueen( Serial serial )
+ bool BurstSac( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual bool OnBeforeDeath()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedSolenWarrior.html b/Docs/types/RedSolenWarrior.html new file mode 100644 index 0000000..c29e498 --- /dev/null +++ b/Docs/types/RedSolenWarrior.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - RedSolenWarrior + + +

Back to Server.Mobiles

+

RedSolenWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RedSolenWarrior()
+ (ctor) RedSolenWarrior( Serial serial )
+ bool BurstSac( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual bool OnBeforeDeath()
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedSolenWorker.html b/Docs/types/RedSolenWorker.html new file mode 100644 index 0000000..2f94a9d --- /dev/null +++ b/Docs/types/RedSolenWorker.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - RedSolenWorker + + +

Back to Server.Mobiles

+

RedSolenWorker : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RedSolenWorker()
+ (ctor) RedSolenWorker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnDamage( int amount, Mobile from, bool willKill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedSoulstone.html b/Docs/types/RedSoulstone.html new file mode 100644 index 0000000..5c6d883 --- /dev/null +++ b/Docs/types/RedSoulstone.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RedSoulstone + + +

Back to Server.Items

+

RedSoulstone : SoulStone, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, IRewardItem

+ (ctor) RedSoulstone()
+ (ctor) RedSoulstone( string account )
+ (ctor) RedSoulstone( Serial serial )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedStocking.html b/Docs/types/RedStocking.html new file mode 100644 index 0000000..85f2132 --- /dev/null +++ b/Docs/types/RedStocking.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RedStocking + + +

Back to Server.Items

+

RedStocking : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RedStocking()
+ (ctor) RedStocking( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RedVelvetGiftBox.html b/Docs/types/RedVelvetGiftBox.html new file mode 100644 index 0000000..005c972 --- /dev/null +++ b/Docs/types/RedVelvetGiftBox.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - RedVelvetGiftBox + + +

Back to Server.Items

+

RedVelvetGiftBox : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: EarringBoxSet

+ (ctor) RedVelvetGiftBox()
+ (ctor) RedVelvetGiftBox( bool fill )
+ (ctor) RedVelvetGiftBox( Serial serial )
+ int DefaultGumpID( get; )
+ int LabelNumber( get; )
+ virtual void AddToBox( Item item, Point3D loc )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Reflector.html b/Docs/types/Reflector.html new file mode 100644 index 0000000..558bc80 --- /dev/null +++ b/Docs/types/Reflector.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Reflector + + +

Back to Server.Factions

+

Reflector

+ (static) List<Faction> Factions( get; )
+ (static) List<Town> Towns( get; )
+ (static) void Configure()
+ (static) object Construct( Type type )
+ (static) Type Deserialize( GenericReader reader )
+ (static) void EventSink_WorldSave( WorldSaveEventArgs e )
+ (static) void ProcessTypes()
+ (static) void Serialize( GenericWriter writer, Type type )
+ (ctor) Reflector()
+ + diff --git a/Docs/types/RefreshHouseCommand.html b/Docs/types/RefreshHouseCommand.html new file mode 100644 index 0000000..5207f12 --- /dev/null +++ b/Docs/types/RefreshHouseCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RefreshHouseCommand + + +

Back to Server.Commands.Generic

+

RefreshHouseCommand : BaseCommand

+ (ctor) RefreshHouseCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/RefreshPotion.html b/Docs/types/RefreshPotion.html new file mode 100644 index 0000000..68f1434 --- /dev/null +++ b/Docs/types/RefreshPotion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RefreshPotion + + +

Back to Server.Items

+

RefreshPotion : BaseRefreshPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) RefreshPotion()
+ (ctor) RefreshPotion( Serial serial )
+ double Refresh( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RefundOfferPrompt.html b/Docs/types/RefundOfferPrompt.html new file mode 100644 index 0000000..c04f043 --- /dev/null +++ b/Docs/types/RefundOfferPrompt.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RefundOfferPrompt + + +

Back to Server.Mobiles

+

(RentedVendor) - RefundOfferPrompt : Prompt

+ (ctor) RefundOfferPrompt( RentedVendor vendor )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/Reg.html b/Docs/types/Reg.html new file mode 100644 index 0000000..8a810da --- /dev/null +++ b/Docs/types/Reg.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Reg + + +

Back to Server.Engines.Craft

+

Reg (Enum)

+ BlackPearl = 0,
+ Bloodmoss = 1,
+ Garlic = 2,
+ Ginseng = 3,
+ MandrakeRoot = 4,
+ Nightshade = 5,
+ SulfurousAsh = 6,
+ SpidersSilk = 7
+ + diff --git a/Docs/types/RegStone.html b/Docs/types/RegStone.html new file mode 100644 index 0000000..92a10f4 --- /dev/null +++ b/Docs/types/RegStone.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RegStone + + +

Back to Server.Items

+

RegStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RegStone()
+ (ctor) RegStone( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RegardingLlamas.html b/Docs/types/RegardingLlamas.html new file mode 100644 index 0000000..669b1dc --- /dev/null +++ b/Docs/types/RegardingLlamas.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RegardingLlamas + + +

Back to Server.Items

+

RegardingLlamas : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) RegardingLlamas()
+ (ctor) RegardingLlamas( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RegenRateHandler.html b/Docs/types/RegenRateHandler.html new file mode 100644 index 0000000..03ebd5c --- /dev/null +++ b/Docs/types/RegenRateHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RegenRateHandler + + +

Back to Server

+

RegenRateHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) RegenRateHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, AsyncCallback callback, object object )
+ virtual TimeSpan EndInvoke( IAsyncResult result )
+ virtual TimeSpan Invoke( Mobile from )
+ + diff --git a/Docs/types/RegenRates.html b/Docs/types/RegenRates.html new file mode 100644 index 0000000..76b270e --- /dev/null +++ b/Docs/types/RegenRates.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - RegenRates + + +

Back to Server.Misc

+

RegenRates

+ (static) bool CheckAnimal( Mobile m, Type type )
+ (static) void CheckBonusSkill( Mobile m, int cur, int max, SkillName skill )
+ (static) bool CheckTransform( Mobile m, Type type )
+ (static) void Configure()
+ (static) double GetArmorMeditationValue( BaseArmor ar )
+ (static) double GetArmorOffset( Mobile from )
+ (static) TimeSpan Mobile_HitsRegenRate( Mobile from )
+ (static) TimeSpan Mobile_ManaRegenRate( Mobile from )
+ (static) TimeSpan Mobile_StamRegenRate( Mobile from )
+ (ctor) RegenRates()
+ + diff --git a/Docs/types/RegenTimer.html b/Docs/types/RegenTimer.html new file mode 100644 index 0000000..f34990f --- /dev/null +++ b/Docs/types/RegenTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RegenTimer + + +

Back to Server.Spells.Bushido

+

(Confidence) - RegenTimer : Timer

+ (ctor) RegenTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Region.html b/Docs/types/Region.html new file mode 100644 index 0000000..36a3ddb --- /dev/null +++ b/Docs/types/Region.html @@ -0,0 +1,117 @@ + + + RunUO Documentation - Class Overview - Region + + +

Back to Server

+

Region : IComparable

+

Derived Types: BaseRegion

+ (static) TimeSpan DefaultLogoutDelay( get; set; )
+ (static) Type DefaultRegionType( get; set; )
+ (static) List<Region> Regions( get; )
+ (static) TimeSpan StaffLogoutDelay( get; set; )
+ (static) bool CanMove( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation, Map map )
+ (static) Rectangle3D[] ConvertTo3D( Rectangle2D[] rects )
+ (static) Rectangle3D ConvertTo3D( Rectangle2D rect )
+ (static) Region Find( Point3D p, Map map )
+ (static) string GetAttribute( XmlElement xml, string attribute, bool mandatory )
+ (static) void Load()
+ (static) void LoadRegions( XmlElement xml, Map map, Region parent )
+ (static) void OnRegionChange( Mobile m, Region oldRegion, Region newRegion )
+ (static) bool ReadBoolean( XmlElement xml, string attribute, ref bool value )
+ (static) bool ReadBoolean( XmlElement xml, string attribute, ref bool value, bool mandatory )
+ (static) bool ReadDateTime( XmlElement xml, string attribute, ref DateTime value )
+ (static) bool ReadDateTime( XmlElement xml, string attribute, ref DateTime value, bool mandatory )
+ (static) bool ReadEnum( XmlElement xml, string attribute, ref T value )
+ (static) bool ReadEnum( XmlElement xml, string attribute, ref T value, bool mandatory )
+ (static) bool ReadInt32( XmlElement xml, string attribute, ref int value )
+ (static) bool ReadInt32( XmlElement xml, string attribute, ref int value, bool mandatory )
+ (static) bool ReadMap( XmlElement xml, string attribute, ref Map value )
+ (static) bool ReadMap( XmlElement xml, string attribute, ref Map value, bool mandatory )
+ (static) bool ReadPoint3D( XmlElement xml, Map map, ref Point3D value )
+ (static) bool ReadPoint3D( XmlElement xml, Map map, ref Point3D value, bool mandatory )
+ (static) bool ReadRectangle3D( XmlElement xml, int defaultMinZ, int defaultMaxZ, ref Rectangle3D value )
+ (static) bool ReadRectangle3D( XmlElement xml, int defaultMinZ, int defaultMaxZ, ref Rectangle3D value, bool mandatory )
+ (static) bool ReadString( XmlElement xml, string attribute, ref string value )
+ (static) bool ReadString( XmlElement xml, string attribute, ref string value, bool mandatory )
+ (static) bool ReadTimeSpan( XmlElement xml, string attribute, ref TimeSpan value )
+ (static) bool ReadTimeSpan( XmlElement xml, string attribute, ref TimeSpan value, bool mandatory )
+ (static) bool ReadType( XmlElement xml, string attribute, ref Type value )
+ (static) bool ReadType( XmlElement xml, string attribute, ref Type value, bool mandatory )
+ (ctor) Region( XmlElement xml, Map map, Region parent )
+ (ctor) Region( string name, Map map, Region parent, Rectangle3D[] area )
+ (ctor) Region( string name, Map map, int priority, Rectangle3D[] area )
+ (ctor) Region( string name, Map map, int priority, Rectangle2D[] area )
+ (ctor) Region( string name, Map map, Region parent, Rectangle2D[] area )
+ Rectangle3D[] Area( get; )
+ int ChildLevel( get; )
+ List<Region> Children( get; )
+ MusicName DefaultMusic( get; )
+ bool Dynamic( get; )
+ Point3D GoLocation( get; set; )
+ bool IsDefault( get; )
+ Map Map( get; )
+ MusicName Music( get; set; )
+ string Name( get; )
+ Region Parent( get; )
+ int Priority( get; )
+ bool Registered( get; )
+ Sector[] Sectors( get; )
+ virtual bool AcceptsSpawnsFrom( Region region )
+ virtual bool AllowBeneficial( Mobile from, Mobile target )
+ virtual bool AllowHarmful( Mobile from, Mobile target )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ virtual bool AllowSpawn()
+ virtual void AlterLightLevel( Mobile m, ref int global, ref int personal )
+ virtual bool CanUseStuckMenu( Mobile m )
+ virtual bool CheckAccessibility( Item item, Mobile from )
+ bool Contains( Point3D p )
+ virtual TimeSpan GetLogoutDelay( Mobile m )
+ int GetMobileCount()
+ List<Mobile> GetMobiles()
+ int GetPlayerCount()
+ List<Mobile> GetPlayers()
+ Region GetRegion( string regionName )
+ Region GetRegion( Type regionType )
+ virtual Type GetResource( Type type )
+ bool IsChildOf( Region region )
+ bool IsPartOf( string regionName )
+ bool IsPartOf( Region region )
+ bool IsPartOf( Type regionType )
+ virtual void MakeGuard( Mobile focus )
+ virtual void OnAggressed( Mobile aggressor, Mobile aggressed, bool criminal )
+ virtual bool OnBeforeDeath( Mobile m )
+ virtual bool OnBeginSpellCast( Mobile m, ISpell s )
+ virtual void OnBeneficialAction( Mobile helper, Mobile target )
+ virtual void OnChildAdded( Region child )
+ virtual void OnChildRemoved( Region child )
+ virtual bool OnCombatantChange( Mobile m, Mobile Old, Mobile New )
+ virtual void OnCriminalAction( Mobile m, bool message )
+ virtual bool OnDamage( Mobile m, ref int Damage )
+ virtual void OnDeath( Mobile m )
+ virtual bool OnDecay( Item item )
+ virtual void OnDidHarmful( Mobile harmer, Mobile harmed )
+ virtual bool OnDoubleClick( Mobile m, object o )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ virtual void OnGotBeneficialAction( Mobile helper, Mobile target )
+ virtual void OnGotHarmful( Mobile harmer, Mobile harmed )
+ virtual bool OnHeal( Mobile m, ref int Heal )
+ virtual void OnLocationChanged( Mobile m, Point3D oldLocation )
+ virtual bool OnMoveInto( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation )
+ virtual void OnRegister()
+ virtual bool OnResurrect( Mobile m )
+ virtual bool OnSingleClick( Mobile m, object o )
+ virtual bool OnSkillUse( Mobile m, int Skill )
+ virtual void OnSpeech( SpeechEventArgs args )
+ virtual void OnSpellCast( Mobile m, ISpell s )
+ virtual bool OnTarget( Mobile m, Target t, object o )
+ virtual void OnUnregister()
+ void Register()
+ virtual bool SendInaccessibleMessage( Item item, Mobile from )
+ virtual void SpellDamageScalar( Mobile caster, Mobile target, ref double damage )
+ virtual int System.IComparable.CompareTo( object obj )
+ virtual string ToString()
+ void Unregister()
+ + diff --git a/Docs/types/RegionCommandImplementor.html b/Docs/types/RegionCommandImplementor.html new file mode 100644 index 0000000..f221d69 --- /dev/null +++ b/Docs/types/RegionCommandImplementor.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RegionCommandImplementor + + +

Back to Server.Commands.Generic

+

RegionCommandImplementor : BaseCommandImplementor

+ (ctor) RegionCommandImplementor()
+ virtual void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj )
+ + diff --git a/Docs/types/RegionRect.html b/Docs/types/RegionRect.html new file mode 100644 index 0000000..d47c9c7 --- /dev/null +++ b/Docs/types/RegionRect.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RegionRect + + +

Back to Server

+

RegionRect : IComparable

+ (ctor) RegionRect( Region region, Rectangle3D rect )
+ Rectangle3D Rect( get; )
+ Region Region( get; )
+ bool Contains( Point3D loc )
+ virtual int System.IComparable.CompareTo( object obj )
+ + diff --git a/Docs/types/RejoinTimer.html b/Docs/types/RejoinTimer.html new file mode 100644 index 0000000..aab278a --- /dev/null +++ b/Docs/types/RejoinTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RejoinTimer + + +

Back to Server.Engines.PartySystem

+

(Party) - RejoinTimer : Timer

+ (ctor) RejoinTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/RejuvinationAddonComponent.html b/Docs/types/RejuvinationAddonComponent.html new file mode 100644 index 0000000..4ce7b09 --- /dev/null +++ b/Docs/types/RejuvinationAddonComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RejuvinationAddonComponent + + +

Back to Server.Items

+

RejuvinationAddonComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) RejuvinationAddonComponent( int itemID )
+ (ctor) RejuvinationAddonComponent( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void ReleaseUseLock_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RejuvinationAnkhNorth.html b/Docs/types/RejuvinationAnkhNorth.html new file mode 100644 index 0000000..d3704a7 --- /dev/null +++ b/Docs/types/RejuvinationAnkhNorth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RejuvinationAnkhNorth + + +

Back to Server.Items

+

RejuvinationAnkhNorth : BaseRejuvinationAnkh, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) RejuvinationAnkhNorth()
+ (ctor) RejuvinationAnkhNorth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RejuvinationAnkhWest.html b/Docs/types/RejuvinationAnkhWest.html new file mode 100644 index 0000000..9b7cdf3 --- /dev/null +++ b/Docs/types/RejuvinationAnkhWest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RejuvinationAnkhWest + + +

Back to Server.Items

+

RejuvinationAnkhWest : BaseRejuvinationAnkh, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) RejuvinationAnkhWest()
+ (ctor) RejuvinationAnkhWest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RelayInfo.html b/Docs/types/RelayInfo.html new file mode 100644 index 0000000..56addae --- /dev/null +++ b/Docs/types/RelayInfo.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RelayInfo + + +

Back to Server.Gumps

+

RelayInfo

+ (ctor) RelayInfo( int buttonID, int[] switches, TextRelay[] textEntries )
+ int ButtonID( get; )
+ int[] Switches( get; )
+ TextRelay[] TextEntries( get; )
+ TextRelay GetTextEntry( int entryID )
+ bool IsSwitched( int switchID )
+ + diff --git a/Docs/types/ReleaseEntry.html b/Docs/types/ReleaseEntry.html new file mode 100644 index 0000000..cf8585a --- /dev/null +++ b/Docs/types/ReleaseEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ReleaseEntry + + +

Back to Server.Mobiles

+

(BaseFamiliar) - ReleaseEntry : ContextMenuEntry

+ (ctor) ReleaseEntry( Mobile from, BaseFamiliar familiar )
+ virtual void OnClick()
+ + diff --git a/Docs/types/Relnia.html b/Docs/types/Relnia.html new file mode 100644 index 0000000..2d15ca8 --- /dev/null +++ b/Docs/types/Relnia.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Relnia + + +

Back to Server.Engines.Quests.Samurai

+

Relnia : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Relnia()
+ (ctor) Relnia( Serial serial )
+ int TalkNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RelocatedEntity.html b/Docs/types/RelocatedEntity.html new file mode 100644 index 0000000..d450760 --- /dev/null +++ b/Docs/types/RelocatedEntity.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RelocatedEntity + + +

Back to Server.Multis

+

RelocatedEntity

+ (ctor) RelocatedEntity( IEntity entity, Point3D relativeLocation )
+ IEntity Entity( get; )
+ Point3D RelativeLocation( get; )
+ + diff --git a/Docs/types/RemoteAdminHandlers.html b/Docs/types/RemoteAdminHandlers.html new file mode 100644 index 0000000..4a32079 --- /dev/null +++ b/Docs/types/RemoteAdminHandlers.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RemoteAdminHandlers + + +

Back to Server.RemoteAdmin

+

RemoteAdminHandlers

+

Nested Types: AcctSearchType

+ (static) void AccountSearch( NetState state, PacketReader pvSrc )
+ (static) bool Handle( byte command, NetState state, PacketReader pvSrc )
+ (static) void Register( byte command, OnPacketReceive handler )
+ (static) void RemoveAccount( NetState state, PacketReader pvSrc )
+ (static) void ServerInfoRequest( NetState state, PacketReader pvSrc )
+ (static) void UpdateAccount( NetState state, PacketReader pvSrc )
+ (ctor) RemoteAdminHandlers()
+ + diff --git a/Docs/types/RemoveBuffPacket.html b/Docs/types/RemoveBuffPacket.html new file mode 100644 index 0000000..7e0b593 --- /dev/null +++ b/Docs/types/RemoveBuffPacket.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RemoveBuffPacket + + +

Back to Server

+

RemoveBuffPacket : Packet

+ (ctor) RemoveBuffPacket( Mobile mob, BuffIcon iconID )
+ (ctor) RemoveBuffPacket( Mobile mob, BuffInfo info )
+ + diff --git a/Docs/types/RemoveCurseSpell.html b/Docs/types/RemoveCurseSpell.html new file mode 100644 index 0000000..1509f98 --- /dev/null +++ b/Docs/types/RemoveCurseSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - RemoveCurseSpell + + +

Back to Server.Spells.Chivalry

+

RemoveCurseSpell : PaladinSpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) RemoveCurseSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/RemoveEntry.html b/Docs/types/RemoveEntry.html new file mode 100644 index 0000000..4d681bb --- /dev/null +++ b/Docs/types/RemoveEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RemoveEntry + + +

Back to Server.Items

+

(TreasureMapChest) - RemoveEntry : ContextMenuEntry

+ (ctor) RemoveEntry( Mobile from, TreasureMapChest chest )
+ virtual void OnClick()
+ + diff --git a/Docs/types/RemoveFacialHair.html b/Docs/types/RemoveFacialHair.html new file mode 100644 index 0000000..3079c6d --- /dev/null +++ b/Docs/types/RemoveFacialHair.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - RemoveFacialHair + + +

Back to Server

+

RemoveFacialHair : Packet

+ (ctor) RemoveFacialHair( Mobile parent )
+ + diff --git a/Docs/types/RemoveFromPartyEntry.html b/Docs/types/RemoveFromPartyEntry.html new file mode 100644 index 0000000..ba7c90e --- /dev/null +++ b/Docs/types/RemoveFromPartyEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RemoveFromPartyEntry + + +

Back to Server.ContextMenus

+

RemoveFromPartyEntry : ContextMenuEntry

+ (ctor) RemoveFromPartyEntry( Mobile from, Mobile target )
+ virtual void OnClick()
+ + diff --git a/Docs/types/RemoveGump.html b/Docs/types/RemoveGump.html new file mode 100644 index 0000000..78d9388 --- /dev/null +++ b/Docs/types/RemoveGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RemoveGump + + +

Back to Server.Items

+

(TreasureMapChest) - RemoveGump : Gump

+ (ctor) RemoveGump( Mobile from, TreasureMapChest chest )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/RemoveHair.html b/Docs/types/RemoveHair.html new file mode 100644 index 0000000..fb32a48 --- /dev/null +++ b/Docs/types/RemoveHair.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - RemoveHair + + +

Back to Server

+

RemoveHair : Packet

+ (ctor) RemoveHair( Mobile parent )
+ + diff --git a/Docs/types/RemoveItem.html b/Docs/types/RemoveItem.html new file mode 100644 index 0000000..5e65430 --- /dev/null +++ b/Docs/types/RemoveItem.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - RemoveItem + + +

Back to Server.Network

+

RemoveItem : Packet

+ (ctor) RemoveItem( Item item )
+ + diff --git a/Docs/types/RemoveMobile.html b/Docs/types/RemoveMobile.html new file mode 100644 index 0000000..c796821 --- /dev/null +++ b/Docs/types/RemoveMobile.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - RemoveMobile + + +

Back to Server.Network

+

RemoveMobile : Packet

+ (ctor) RemoveMobile( Mobile m )
+ + diff --git a/Docs/types/RemovePartyTarget.html b/Docs/types/RemovePartyTarget.html new file mode 100644 index 0000000..d4b04b1 --- /dev/null +++ b/Docs/types/RemovePartyTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RemovePartyTarget + + +

Back to Server.Engines.PartySystem

+

RemovePartyTarget : Target

+ (ctor) RemovePartyTarget()
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/RemoveTrap.html b/Docs/types/RemoveTrap.html new file mode 100644 index 0000000..9f853a8 --- /dev/null +++ b/Docs/types/RemoveTrap.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RemoveTrap + + +

Back to Server.SkillHandlers

+

RemoveTrap

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) RemoveTrap()
+ + diff --git a/Docs/types/RemoveTrapSpell.html b/Docs/types/RemoveTrapSpell.html new file mode 100644 index 0000000..05ff668 --- /dev/null +++ b/Docs/types/RemoveTrapSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RemoveTrapSpell + + +

Back to Server.Spells.Second

+

RemoveTrapSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) RemoveTrapSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( TrapableContainer item )
+ + diff --git a/Docs/types/RenameBoatPrompt.html b/Docs/types/RenameBoatPrompt.html new file mode 100644 index 0000000..c545188 --- /dev/null +++ b/Docs/types/RenameBoatPrompt.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RenameBoatPrompt + + +

Back to Server.Multis

+

RenameBoatPrompt : Prompt

+ (ctor) RenameBoatPrompt( BaseBoat boat )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/RenamePrompt.html b/Docs/types/RenamePrompt.html new file mode 100644 index 0000000..8eb9f0c --- /dev/null +++ b/Docs/types/RenamePrompt.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RenamePrompt + + +

Back to Server.Prompts

+

RenamePrompt : Prompt

+ (ctor) RenamePrompt( BaseHouse house )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/RenameRequestEventArgs.html b/Docs/types/RenameRequestEventArgs.html new file mode 100644 index 0000000..1055b7e --- /dev/null +++ b/Docs/types/RenameRequestEventArgs.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RenameRequestEventArgs + + +

Back to Server

+

RenameRequestEventArgs : EventArgs

+ (ctor) RenameRequestEventArgs( Mobile from, Mobile target, string name )
+ Mobile From( get; )
+ string Name( get; )
+ Mobile Target( get; )
+ + diff --git a/Docs/types/RenameRequestEventHandler.html b/Docs/types/RenameRequestEventHandler.html new file mode 100644 index 0000000..b3b0f19 --- /dev/null +++ b/Docs/types/RenameRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RenameRequestEventHandler + + +

Back to Server

+

RenameRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) RenameRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( RenameRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( RenameRequestEventArgs e )
+ + diff --git a/Docs/types/RenameRequests.html b/Docs/types/RenameRequests.html new file mode 100644 index 0000000..e7b27a3 --- /dev/null +++ b/Docs/types/RenameRequests.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RenameRequests + + +

Back to Server.Misc

+

RenameRequests

+ (static) void EventSink_RenameRequest( RenameRequestEventArgs e )
+ (static) void Initialize()
+ (ctor) RenameRequests()
+ + diff --git a/Docs/types/RenounceYoungGump.html b/Docs/types/RenounceYoungGump.html new file mode 100644 index 0000000..fdf4b0e --- /dev/null +++ b/Docs/types/RenounceYoungGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RenounceYoungGump + + +

Back to Server.Gumps

+

RenounceYoungGump : Gump

+ (ctor) RenounceYoungGump()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/RentTarget.html b/Docs/types/RentTarget.html new file mode 100644 index 0000000..7e759b8 --- /dev/null +++ b/Docs/types/RentTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RentTarget + + +

Back to Server.Items

+

(VendorRentalContract) - RentTarget : Target

+ (ctor) RentTarget( VendorRentalContract contract )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType )
+ + diff --git a/Docs/types/RentalExpireTimer.html b/Docs/types/RentalExpireTimer.html new file mode 100644 index 0000000..156d7d0 --- /dev/null +++ b/Docs/types/RentalExpireTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RentalExpireTimer + + +

Back to Server.Mobiles

+

(RentedVendor) - RentalExpireTimer : Timer

+ (ctor) RentalExpireTimer( RentedVendor vendor, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/RentedVendor.html b/Docs/types/RentedVendor.html new file mode 100644 index 0000000..c0c4a5c --- /dev/null +++ b/Docs/types/RentedVendor.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - RentedVendor + + +

Back to Server.Mobiles

+

RentedVendor : PlayerVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: CollectRentEntry, ContractOptionsEntry, RefundOfferPrompt, RentalExpireTimer, TerminateContractEntry

+ (ctor) RentedVendor( Serial serial )
+ (ctor) RentedVendor( Mobile owner, BaseHouse house, VendorRentalDuration duration, int rentalPrice, bool landlordRenew, int rentalGold )
+ Mobile Landlord( get; )
+ bool LandlordRenew( get; set; )
+ bool Renew( get; )
+ int RenewalPrice( get; set; )
+ VendorRentalDuration RentalDuration( get; )
+ DateTime RentalExpireTime( get; )
+ int RentalGold( get; set; )
+ int RentalPrice( get; set; )
+ bool RenterRenew( get; set; )
+ void ComputeRentalExpireDelay( out int days, out int hours )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Destroy( bool toBackpack )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ bool IsLandlord( Mobile m )
+ virtual bool IsOwner( Mobile m )
+ virtual void OnAfterDelete()
+ void SendRentalExpireMessage( Mobile to )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RenterVendorRentalGump.html b/Docs/types/RenterVendorRentalGump.html new file mode 100644 index 0000000..642618a --- /dev/null +++ b/Docs/types/RenterVendorRentalGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RenterVendorRentalGump + + +

Back to Server.Gumps

+

RenterVendorRentalGump : BaseVendorRentalGump

+ (ctor) RenterVendorRentalGump( RentedVendor vendor )
+ virtual bool IsValidResponse( Mobile from )
+ virtual void RenterRenewOnExpiration( Mobile from )
+ + diff --git a/Docs/types/Repair.html b/Docs/types/Repair.html new file mode 100644 index 0000000..c518387 --- /dev/null +++ b/Docs/types/Repair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Repair + + +

Back to Server.Engines.Craft

+

Repair

+

Nested Types: InternalTarget

+ (static) void Do( Mobile from, CraftSystem craftSystem, RepairDeed deed )
+ (static) void Do( Mobile from, CraftSystem craftSystem, BaseTool tool )
+ (ctor) Repair()
+ + diff --git a/Docs/types/RepairDeed.html b/Docs/types/RepairDeed.html new file mode 100644 index 0000000..5cb08c1 --- /dev/null +++ b/Docs/types/RepairDeed.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - RepairDeed + + +

Back to Server.Items

+

RepairDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: RepairSkillInfo, RepairSkillType

+ (static) TextDefinition GetSkillTitle( double skillLevel )
+ (static) RepairSkillType GetTypeFor( CraftSystem s )
+ (ctor) RepairDeed()
+ (ctor) RepairDeed( Serial serial )
+ (ctor) RepairDeed( RepairSkillType skill, double level )
+ (ctor) RepairDeed( RepairSkillType skill, double level, bool normalizeLevel )
+ (ctor) RepairDeed( RepairSkillType skill, double level, Mobile crafter )
+ (ctor) RepairDeed( RepairSkillType skill, double level, Mobile crafter, bool normalizeLevel )
+ Mobile Crafter( get; set; )
+ bool DisplayLootType( get; )
+ RepairSkillType RepairSkill( get; set; )
+ double SkillLevel( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ bool Check( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ bool VerifyRegion( Mobile m )
+ + diff --git a/Docs/types/RepairSkillInfo.html b/Docs/types/RepairSkillInfo.html new file mode 100644 index 0000000..9737d21 --- /dev/null +++ b/Docs/types/RepairSkillInfo.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RepairSkillInfo + + +

Back to Server.Items

+

(RepairDeed) - RepairSkillInfo

+ (static) RepairSkillInfo[] Table( get; )
+ (static) RepairSkillInfo GetInfo( RepairSkillType type )
+ (ctor) RepairSkillInfo( CraftSystem system, Type nearbyType, TextDefinition notNearbyMessage, TextDefinition name )
+ (ctor) RepairSkillInfo( CraftSystem system, Type[] nearbyTypes, TextDefinition notNearbyMessage, TextDefinition name )
+ TextDefinition Name( get; )
+ Type[] NearbyTypes( get; )
+ TextDefinition NotNearbyMessage( get; )
+ CraftSystem System( get; )
+ + diff --git a/Docs/types/RepairSkillType.html b/Docs/types/RepairSkillType.html new file mode 100644 index 0000000..2561cb4 --- /dev/null +++ b/Docs/types/RepairSkillType.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RepairSkillType + + +

Back to Server.Items

+

RepairSkillType (Enum)

+ Smithing = 0,
+ Tailoring = 1,
+ Tinkering = 2,
+ Carpentry = 3,
+ Fletching = 4
+ + diff --git a/Docs/types/RepeatingCrossbow.html b/Docs/types/RepeatingCrossbow.html new file mode 100644 index 0000000..55eb82c --- /dev/null +++ b/Docs/types/RepeatingCrossbow.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - RepeatingCrossbow + + +

Back to Server.Items

+

RepeatingCrossbow : BaseRanged, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: ShaminoCrossbow, TheNightReaper

+ (ctor) RepeatingCrossbow()
+ (ctor) RepeatingCrossbow( Serial serial )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefMaxRange( get; )
+ int EffectID( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Report.html b/Docs/types/Report.html new file mode 100644 index 0000000..e0c4dad --- /dev/null +++ b/Docs/types/Report.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Report + + +

Back to Server.Engines.Reports

+

Report : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) Report()
+ (ctor) Report( string name, string width )
+ ReportColumnCollection Columns( get; )
+ ReportItemCollection Items( get; )
+ string Name( get; set; )
+ PersistableType TypeID( get; )
+ string Width( get; set; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void DeserializeChildren( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ virtual void SerializeChildren( PersistanceWriter op )
+ + diff --git a/Docs/types/ReportColumn.html b/Docs/types/ReportColumn.html new file mode 100644 index 0000000..27bd094 --- /dev/null +++ b/Docs/types/ReportColumn.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ReportColumn + + +

Back to Server.Engines.Reports

+

ReportColumn : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) ReportColumn()
+ (ctor) ReportColumn( string width, string align )
+ (ctor) ReportColumn( string width, string align, string name )
+ string Align( get; set; )
+ string Name( get; set; )
+ PersistableType TypeID( get; )
+ string Width( get; set; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ + diff --git a/Docs/types/ReportColumnCollection.html b/Docs/types/ReportColumnCollection.html new file mode 100644 index 0000000..2467859 --- /dev/null +++ b/Docs/types/ReportColumnCollection.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ReportColumnCollection + + +

Back to Server.Engines.Reports

+

ReportColumnCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: ReportColumnCollectionEnumerator

+ (ctor) ReportColumnCollection()
+ ReportColumn Item( get; set; )
+ int Add( ReportColumn value )
+ int Add( string width, string align )
+ int Add( string width, string align, string name )
+ bool Contains( ReportColumn value )
+ ReportColumnCollectionEnumerator GetEnumerator()
+ int IndexOf( ReportColumn value )
+ void Insert( int index, ReportColumn value )
+ void Remove( ReportColumn value )
+ + diff --git a/Docs/types/ReportColumnCollectionEnumerator.html b/Docs/types/ReportColumnCollectionEnumerator.html new file mode 100644 index 0000000..4add3d7 --- /dev/null +++ b/Docs/types/ReportColumnCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ReportColumnCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(ReportColumnCollection) - ReportColumnCollectionEnumerator : IEnumerator

+ (ctor) ReportColumnCollectionEnumerator( ReportColumnCollection collection )
+ ReportColumn Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/ReportItem.html b/Docs/types/ReportItem.html new file mode 100644 index 0000000..ccb5ac3 --- /dev/null +++ b/Docs/types/ReportItem.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ReportItem + + +

Back to Server.Engines.Reports

+

ReportItem : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) ReportItem()
+ PersistableType TypeID( get; )
+ ItemValueCollection Values( get; )
+ virtual void DeserializeChildren( PersistanceReader ip )
+ virtual void SerializeChildren( PersistanceWriter op )
+ + diff --git a/Docs/types/ReportItemCollection.html b/Docs/types/ReportItemCollection.html new file mode 100644 index 0000000..5c7d7f0 --- /dev/null +++ b/Docs/types/ReportItemCollection.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ReportItemCollection + + +

Back to Server.Engines.Reports

+

ReportItemCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: ReportItemCollectionEnumerator

+ (ctor) ReportItemCollection()
+ ReportItem Item( get; set; )
+ int Add( ReportItem value )
+ int Add( string name, object value )
+ int Add( string name, object value, string format )
+ bool Contains( ReportItem value )
+ ReportItemCollectionEnumerator GetEnumerator()
+ int IndexOf( ReportItem value )
+ void Insert( int index, ReportItem value )
+ void Remove( ReportItem value )
+ + diff --git a/Docs/types/ReportItemCollectionEnumerator.html b/Docs/types/ReportItemCollectionEnumerator.html new file mode 100644 index 0000000..49ee389 --- /dev/null +++ b/Docs/types/ReportItemCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ReportItemCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(ReportItemCollection) - ReportItemCollectionEnumerator : IEnumerator

+ (ctor) ReportItemCollectionEnumerator( ReportItemCollection collection )
+ ReportItem Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/ReportMurdererGump.html b/Docs/types/ReportMurdererGump.html new file mode 100644 index 0000000..d4b9277 --- /dev/null +++ b/Docs/types/ReportMurdererGump.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ReportMurdererGump + + +

Back to Server.Gumps

+

ReportMurdererGump : Gump

+

Nested Types: GumpTimer

+ (static) void EventSink_PlayerDeath( PlayerDeathEventArgs e )
+ (static) void Initialize()
+ (static) void ReportedListExpiry_Callback( object state )
+ (ctor) ReportMurdererGump( Mobile victum, List<Mobile> killers )
+ (ctor) ReportMurdererGump( Mobile victum, List<Mobile> killers, int idx )
+ void BuildGump()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/Reports.html b/Docs/types/Reports.html new file mode 100644 index 0000000..fd27083 --- /dev/null +++ b/Docs/types/Reports.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Reports + + +

Back to Server.Engines.Reports

+

Reports

+

Nested Types: SkillDistribution

+ (static) StaffHistory StaffHistory( get; )
+ (static) void CheckRegenerate()
+ (static) Report CompileFactionLeaderboard()
+ (static) Chart CompileFactionMembershipChart()
+ (static) Report CompileFactionReport()
+ (static) PersistableObject[] CompileFactionReports()
+ (static) Report CompileFactionTownReport()
+ (static) Report CompileGeneralStats()
+ (static) Report CompileSigilReport()
+ (static) Chart CompileSkillChart( SkillDistribution[] distribs )
+ (static) Report CompileSkillReport( SkillDistribution[] distribs )
+ (static) PersistableObject[] CompileSkillReports()
+ (static) Chart CompileStatChart()
+ (static) void FillSnapshot( Snapshot ss )
+ (static) void Generate()
+ (static) SkillDistribution[] GetSkillDistribution()
+ (static) void Initialize()
+ (static) void UpdateOutput( object state )
+ (ctor) Reports()
+ + diff --git a/Docs/types/ReproductionGump.html b/Docs/types/ReproductionGump.html new file mode 100644 index 0000000..bc4ccd9 --- /dev/null +++ b/Docs/types/ReproductionGump.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ReproductionGump + + +

Back to Server.Engines.Plants

+

ReproductionGump : Gump

+ (ctor) ReproductionGump( PlantItem plant )
+ void AddPollinationState( int x, int y )
+ void AddResourcesState( int x, int y )
+ void AddSeedsState( int x, int y )
+ void DrawBackground()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/Reptalon.html b/Docs/types/Reptalon.html new file mode 100644 index 0000000..6a04a41 --- /dev/null +++ b/Docs/types/Reptalon.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Reptalon + + +

Back to Server.Mobiles

+

Reptalon : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) Reptalon()
+ (ctor) Reptalon( Serial serial )
+ bool CanAngerOnTame( get; )
+ bool CanBreath( get; )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ bool StatLossAfterTame( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ReptalonFormTalisman.html b/Docs/types/ReptalonFormTalisman.html new file mode 100644 index 0000000..a20b30a --- /dev/null +++ b/Docs/types/ReptalonFormTalisman.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ReptalonFormTalisman + + +

Back to Server.Items

+

ReptalonFormTalisman : BaseFormTalisman, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITokunoDyable

+ (ctor) ReptalonFormTalisman()
+ (ctor) ReptalonFormTalisman( Serial serial )
+ TalismanForm Form( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ResGate.html b/Docs/types/ResGate.html new file mode 100644 index 0000000..5132da2 --- /dev/null +++ b/Docs/types/ResGate.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ResGate + + +

Back to Server.Items

+

ResGate : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ResGate()
+ (ctor) ResGate( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ResetEquipTimer.html b/Docs/types/ResetEquipTimer.html new file mode 100644 index 0000000..c033f83 --- /dev/null +++ b/Docs/types/ResetEquipTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ResetEquipTimer + + +

Back to Server.Items

+

(BaseWeapon) - ResetEquipTimer : Timer

+ (ctor) ResetEquipTimer( Mobile m, TimeSpan duration )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ResetGameEntry.html b/Docs/types/ResetGameEntry.html new file mode 100644 index 0000000..4900561 --- /dev/null +++ b/Docs/types/ResetGameEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ResetGameEntry + + +

Back to Server.Engines.Mahjong

+

(MahjongGame) - ResetGameEntry : ContextMenuEntry

+ (ctor) ResetGameEntry( MahjongGame game )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ResetTimer.html b/Docs/types/ResetTimer.html new file mode 100644 index 0000000..86f4a9a --- /dev/null +++ b/Docs/types/ResetTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ResetTimer + + +

Back to Server.Items

+

(RaiseSwitch) - ResetTimer : Timer

+ (ctor) ResetTimer( RaiseSwitch raiseSwitch, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ResilientBracer.html b/Docs/types/ResilientBracer.html new file mode 100644 index 0000000..8814754 --- /dev/null +++ b/Docs/types/ResilientBracer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ResilientBracer + + +

Back to Server.Items

+

ResilientBracer : GoldBracelet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) ResilientBracer()
+ (ctor) ResilientBracer( Serial serial )
+ int LabelNumber( get; )
+ int PhysicalResistance( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ResistanceMod.html b/Docs/types/ResistanceMod.html new file mode 100644 index 0000000..f888000 --- /dev/null +++ b/Docs/types/ResistanceMod.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ResistanceMod + + +

Back to Server

+

ResistanceMod

+ (ctor) ResistanceMod( ResistanceType type, int offset )
+ int Offset( get; set; )
+ Mobile Owner( get; set; )
+ ResistanceType Type( get; set; )
+ + diff --git a/Docs/types/ResistanceType.html b/Docs/types/ResistanceType.html new file mode 100644 index 0000000..c03fdac --- /dev/null +++ b/Docs/types/ResistanceType.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ResistanceType + + +

Back to Server

+

ResistanceType (Enum)

+ Physical = 0,
+ Fire = 1,
+ Cold = 2,
+ Poison = 3,
+ Energy = 4
+ + diff --git a/Docs/types/Resmelt.html b/Docs/types/Resmelt.html new file mode 100644 index 0000000..8ae99ca --- /dev/null +++ b/Docs/types/Resmelt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Resmelt + + +

Back to Server.Engines.Craft

+

Resmelt

+

Nested Types: InternalTarget

+ (static) void Do( Mobile from, CraftSystem craftSystem, BaseTool tool )
+ (ctor) Resmelt()
+ + diff --git a/Docs/types/ResponseInfo.html b/Docs/types/ResponseInfo.html new file mode 100644 index 0000000..b0921dc --- /dev/null +++ b/Docs/types/ResponseInfo.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ResponseInfo + + +

Back to Server.Engines.Reports

+

ResponseInfo : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) ResponseInfo()
+ (ctor) ResponseInfo( string sentBy, string message )
+ string Message( get; set; )
+ string SentBy( get; set; )
+ DateTime TimeStamp( get; set; )
+ PersistableType TypeID( get; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ + diff --git a/Docs/types/ResponseInfoCollection.html b/Docs/types/ResponseInfoCollection.html new file mode 100644 index 0000000..25fdeda --- /dev/null +++ b/Docs/types/ResponseInfoCollection.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ResponseInfoCollection + + +

Back to Server.Engines.Reports

+

ResponseInfoCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: ResponseInfoCollectionEnumerator

+ (ctor) ResponseInfoCollection()
+ ResponseInfo Item( get; set; )
+ int Add( ResponseInfo value )
+ int Add( string sentBy, string message )
+ bool Contains( ResponseInfo value )
+ ResponseInfoCollectionEnumerator GetEnumerator()
+ int IndexOf( ResponseInfo value )
+ void Insert( int index, ResponseInfo value )
+ void Remove( ResponseInfo value )
+ + diff --git a/Docs/types/ResponseInfoCollectionEnumerator.html b/Docs/types/ResponseInfoCollectionEnumerator.html new file mode 100644 index 0000000..72f63a1 --- /dev/null +++ b/Docs/types/ResponseInfoCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ResponseInfoCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(ResponseInfoCollection) - ResponseInfoCollectionEnumerator : IEnumerator

+ (ctor) ResponseInfoCollectionEnumerator( ResponseInfoCollection collection )
+ ResponseInfo Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/RestartTimer.html b/Docs/types/RestartTimer.html new file mode 100644 index 0000000..1de1e46 --- /dev/null +++ b/Docs/types/RestartTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RestartTimer + + +

Back to Server.Engines.CannedEvil

+

RestartTimer : Timer

+ (ctor) RestartTimer( ChampionSpawn spawn, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/RestlessSoul.html b/Docs/types/RestlessSoul.html new file mode 100644 index 0000000..d0e33fb --- /dev/null +++ b/Docs/types/RestlessSoul.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - RestlessSoul + + +

Back to Server.Mobiles

+

RestlessSoul : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RestlessSoul()
+ (ctor) RestlessSoul( Serial serial )
+ bool AlwaysAttackable( get; )
+ bool BleedImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayPaperdollTo( Mobile to )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual int GetDeathSound()
+ virtual int GetIdleSound()
+ virtual bool IsEnemy( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RestockCommand.html b/Docs/types/RestockCommand.html new file mode 100644 index 0000000..ae5837e --- /dev/null +++ b/Docs/types/RestockCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RestockCommand + + +

Back to Server.Commands.Generic

+

RestockCommand : BaseCommand

+ (ctor) RestockCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/ResurrectEntry.html b/Docs/types/ResurrectEntry.html new file mode 100644 index 0000000..ccded69 --- /dev/null +++ b/Docs/types/ResurrectEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ResurrectEntry + + +

Back to Server.Items

+

(AnkhOfSacrificeComponent) - ResurrectEntry : ContextMenuEntry

+ (ctor) ResurrectEntry( Mobile mobile, AnkhOfSacrificeAddon ankh )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ResurrectGump.html b/Docs/types/ResurrectGump.html new file mode 100644 index 0000000..d0addf6 --- /dev/null +++ b/Docs/types/ResurrectGump.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ResurrectGump + + +

Back to Server.Gumps

+

ResurrectGump : Gump

+

Derived Types: AnkhResurrectGump

+ (ctor) ResurrectGump( Mobile owner )
+ (ctor) ResurrectGump( Mobile owner, bool fromSacrifice )
+ (ctor) ResurrectGump( Mobile owner, Mobile healer )
+ (ctor) ResurrectGump( Mobile owner, ResurrectMessage msg )
+ (ctor) ResurrectGump( Mobile owner, double hitsScalar )
+ (ctor) ResurrectGump( Mobile owner, Mobile healer, int price )
+ (ctor) ResurrectGump( Mobile owner, Mobile healer, ResurrectMessage msg )
+ (ctor) ResurrectGump( Mobile owner, Mobile healer, ResurrectMessage msg, bool fromSacrifice )
+ (ctor) ResurrectGump( Mobile owner, Mobile healer, ResurrectMessage msg, bool fromSacrifice, double hitsScalar )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/ResurrectMessage.html b/Docs/types/ResurrectMessage.html new file mode 100644 index 0000000..73531d7 --- /dev/null +++ b/Docs/types/ResurrectMessage.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ResurrectMessage + + +

Back to Server.Gumps

+

ResurrectMessage (Enum)

+ ChaosShrine = 0,
+ VirtueShrine = 1,
+ Healer = 2,
+ Generic = 3
+ + diff --git a/Docs/types/ResurrectionScroll.html b/Docs/types/ResurrectionScroll.html new file mode 100644 index 0000000..91bbc0e --- /dev/null +++ b/Docs/types/ResurrectionScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ResurrectionScroll + + +

Back to Server.Items

+

ResurrectionScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ResurrectionScroll()
+ (ctor) ResurrectionScroll( int amount )
+ (ctor) ResurrectionScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ResurrectionSpell.html b/Docs/types/ResurrectionSpell.html new file mode 100644 index 0000000..00a3dbc --- /dev/null +++ b/Docs/types/ResurrectionSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ResurrectionSpell + + +

Back to Server.Spells.Eighth

+

ResurrectionSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) ResurrectionSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/RetrieveAbraxusScrollObjective.html b/Docs/types/RetrieveAbraxusScrollObjective.html new file mode 100644 index 0000000..f84eed9 --- /dev/null +++ b/Docs/types/RetrieveAbraxusScrollObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RetrieveAbraxusScrollObjective + + +

Back to Server.Engines.Quests.Necro

+

RetrieveAbraxusScrollObjective : QuestObjective

+ (ctor) RetrieveAbraxusScrollObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnAfterKillsObjective.html b/Docs/types/ReturnAfterKillsObjective.html new file mode 100644 index 0000000..914489a --- /dev/null +++ b/Docs/types/ReturnAfterKillsObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnAfterKillsObjective + + +

Back to Server.Engines.Quests.Matriarch

+

ReturnAfterKillsObjective : QuestObjective

+ (ctor) ReturnAfterKillsObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnAfterWaterObjective.html b/Docs/types/ReturnAfterWaterObjective.html new file mode 100644 index 0000000..e9d8612 --- /dev/null +++ b/Docs/types/ReturnAfterWaterObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnAfterWaterObjective + + +

Back to Server.Engines.Quests.Matriarch

+

ReturnAfterWaterObjective : QuestObjective

+ (ctor) ReturnAfterWaterObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnAutographConversation.html b/Docs/types/ReturnAutographConversation.html new file mode 100644 index 0000000..195f24a --- /dev/null +++ b/Docs/types/ReturnAutographConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnAutographConversation + + +

Back to Server.Engines.Quests.Collector

+

ReturnAutographConversation : QuestConversation

+ (ctor) ReturnAutographConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ReturnAutographObjective.html b/Docs/types/ReturnAutographObjective.html new file mode 100644 index 0000000..5cca8e6 --- /dev/null +++ b/Docs/types/ReturnAutographObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnAutographObjective + + +

Back to Server.Engines.Quests.Collector

+

ReturnAutographObjective : QuestObjective

+ (ctor) ReturnAutographObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnDaemonBloodObjective.html b/Docs/types/ReturnDaemonBloodObjective.html new file mode 100644 index 0000000..72f3e2d --- /dev/null +++ b/Docs/types/ReturnDaemonBloodObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnDaemonBloodObjective + + +

Back to Server.Engines.Quests.Haven

+

ReturnDaemonBloodObjective : QuestObjective

+ (ctor) ReturnDaemonBloodObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnDaemonBoneObjective.html b/Docs/types/ReturnDaemonBoneObjective.html new file mode 100644 index 0000000..9d61ea2 --- /dev/null +++ b/Docs/types/ReturnDaemonBoneObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnDaemonBoneObjective + + +

Back to Server.Engines.Quests.Haven

+

ReturnDaemonBoneObjective : QuestObjective

+ (ctor) ReturnDaemonBoneObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnFertileDirtObjective.html b/Docs/types/ReturnFertileDirtObjective.html new file mode 100644 index 0000000..d7a8465 --- /dev/null +++ b/Docs/types/ReturnFertileDirtObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnFertileDirtObjective + + +

Back to Server.Engines.Quests.Haven

+

ReturnFertileDirtObjective : QuestObjective

+ (ctor) ReturnFertileDirtObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnFromInnConversation.html b/Docs/types/ReturnFromInnConversation.html new file mode 100644 index 0000000..bc71882 --- /dev/null +++ b/Docs/types/ReturnFromInnConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnFromInnConversation + + +

Back to Server.Engines.Quests.Ninja

+

ReturnFromInnConversation : QuestConversation

+ (ctor) ReturnFromInnConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ReturnFromInnObjective.html b/Docs/types/ReturnFromInnObjective.html new file mode 100644 index 0000000..f1e8911 --- /dev/null +++ b/Docs/types/ReturnFromInnObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnFromInnObjective + + +

Back to Server.Engines.Quests.Ninja

+

ReturnFromInnObjective : QuestObjective

+ (ctor) ReturnFromInnObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnImagesConversation.html b/Docs/types/ReturnImagesConversation.html new file mode 100644 index 0000000..c493bdc --- /dev/null +++ b/Docs/types/ReturnImagesConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnImagesConversation + + +

Back to Server.Engines.Quests.Collector

+

ReturnImagesConversation : QuestConversation

+ (ctor) ReturnImagesConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ReturnImagesObjective.html b/Docs/types/ReturnImagesObjective.html new file mode 100644 index 0000000..af3f5fe --- /dev/null +++ b/Docs/types/ReturnImagesObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnImagesObjective + + +

Back to Server.Engines.Quests.Collector

+

ReturnImagesObjective : QuestObjective

+ (ctor) ReturnImagesObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnIngredientsObjective.html b/Docs/types/ReturnIngredientsObjective.html new file mode 100644 index 0000000..a60a54d --- /dev/null +++ b/Docs/types/ReturnIngredientsObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnIngredientsObjective + + +

Back to Server.Engines.Quests.Hag

+

ReturnIngredientsObjective : QuestObjective

+ (ctor) ReturnIngredientsObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnObjective.html b/Docs/types/ReturnObjective.html new file mode 100644 index 0000000..b30121a --- /dev/null +++ b/Docs/types/ReturnObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnObjective + + +

Back to Server.Engines.Quests.Zento

+

ReturnObjective : QuestObjective

+ (ctor) ReturnObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnPaintingConversation.html b/Docs/types/ReturnPaintingConversation.html new file mode 100644 index 0000000..70e89eb --- /dev/null +++ b/Docs/types/ReturnPaintingConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnPaintingConversation + + +

Back to Server.Engines.Quests.Collector

+

ReturnPaintingConversation : QuestConversation

+ (ctor) ReturnPaintingConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ReturnPaintingObjective.html b/Docs/types/ReturnPaintingObjective.html new file mode 100644 index 0000000..5084e49 --- /dev/null +++ b/Docs/types/ReturnPaintingObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnPaintingObjective + + +

Back to Server.Engines.Quests.Collector

+

ReturnPaintingObjective : QuestObjective

+ (ctor) ReturnPaintingObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnPearlsConversation.html b/Docs/types/ReturnPearlsConversation.html new file mode 100644 index 0000000..cbc822b --- /dev/null +++ b/Docs/types/ReturnPearlsConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnPearlsConversation + + +

Back to Server.Engines.Quests.Collector

+

ReturnPearlsConversation : QuestConversation

+ (ctor) ReturnPearlsConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ReturnPearlsObjective.html b/Docs/types/ReturnPearlsObjective.html new file mode 100644 index 0000000..e753a1a --- /dev/null +++ b/Docs/types/ReturnPearlsObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnPearlsObjective + + +

Back to Server.Engines.Quests.Collector

+

ReturnPearlsObjective : QuestObjective

+ (ctor) ReturnPearlsObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnRecipeObjective.html b/Docs/types/ReturnRecipeObjective.html new file mode 100644 index 0000000..82500c8 --- /dev/null +++ b/Docs/types/ReturnRecipeObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnRecipeObjective + + +

Back to Server.Engines.Quests.Hag

+

ReturnRecipeObjective : QuestObjective

+ (ctor) ReturnRecipeObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnScrollOfPowerObjective.html b/Docs/types/ReturnScrollOfPowerObjective.html new file mode 100644 index 0000000..f007b40 --- /dev/null +++ b/Docs/types/ReturnScrollOfPowerObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnScrollOfPowerObjective + + +

Back to Server.Engines.Quests.Haven

+

ReturnScrollOfPowerObjective : QuestObjective

+ (ctor) ReturnScrollOfPowerObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnSheetMusicObjective.html b/Docs/types/ReturnSheetMusicObjective.html new file mode 100644 index 0000000..2a9ee68 --- /dev/null +++ b/Docs/types/ReturnSheetMusicObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnSheetMusicObjective + + +

Back to Server.Engines.Quests.Collector

+

ReturnSheetMusicObjective : QuestObjective

+ (ctor) ReturnSheetMusicObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnSwordConversation.html b/Docs/types/ReturnSwordConversation.html new file mode 100644 index 0000000..89ee892 --- /dev/null +++ b/Docs/types/ReturnSwordConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnSwordConversation + + +

Back to Server.Engines.Quests.Ninja

+

ReturnSwordConversation : QuestConversation

+ (ctor) ReturnSwordConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ReturnSwordObjective.html b/Docs/types/ReturnSwordObjective.html new file mode 100644 index 0000000..efb61e7 --- /dev/null +++ b/Docs/types/ReturnSwordObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ReturnSwordObjective + + +

Back to Server.Engines.Quests.Ninja

+

ReturnSwordObjective : QuestObjective

+ (ctor) ReturnSwordObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnToCrystalCaveObjective.html b/Docs/types/ReturnToCrystalCaveObjective.html new file mode 100644 index 0000000..f144afd --- /dev/null +++ b/Docs/types/ReturnToCrystalCaveObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ReturnToCrystalCaveObjective + + +

Back to Server.Engines.Quests.Necro

+

ReturnToCrystalCaveObjective : QuestObjective

+ (ctor) ReturnToCrystalCaveObjective()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ReturnToNaturalistObjective.html b/Docs/types/ReturnToNaturalistObjective.html new file mode 100644 index 0000000..6777be7 --- /dev/null +++ b/Docs/types/ReturnToNaturalistObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ReturnToNaturalistObjective + + +

Back to Server.Engines.Quests.Naturalist

+

ReturnToNaturalistObjective : QuestObjective

+ (ctor) ReturnToNaturalistObjective()
+ object Message( get; )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/ReturnToysObjective.html b/Docs/types/ReturnToysObjective.html new file mode 100644 index 0000000..5794b13 --- /dev/null +++ b/Docs/types/ReturnToysObjective.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ReturnToysObjective + + +

Back to Server.Engines.Quests.Collector

+

ReturnToysObjective : QuestObjective

+ (ctor) ReturnToysObjective()
+ object Message( get; )
+ + diff --git a/Docs/types/ReturnVendorEntry.html b/Docs/types/ReturnVendorEntry.html new file mode 100644 index 0000000..9eaa2d5 --- /dev/null +++ b/Docs/types/ReturnVendorEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ReturnVendorEntry + + +

Back to Server.Mobiles

+

(PlayerVendor) - ReturnVendorEntry : ContextMenuEntry

+ (ctor) ReturnVendorEntry( PlayerVendor vendor )
+ virtual void OnClick()
+ + diff --git a/Docs/types/RevealScroll.html b/Docs/types/RevealScroll.html new file mode 100644 index 0000000..1fdf9b3 --- /dev/null +++ b/Docs/types/RevealScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RevealScroll + + +

Back to Server.Items

+

RevealScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) RevealScroll()
+ (ctor) RevealScroll( int amount )
+ (ctor) RevealScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RevealSpell.html b/Docs/types/RevealSpell.html new file mode 100644 index 0000000..ae39e92 --- /dev/null +++ b/Docs/types/RevealSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RevealSpell + + +

Back to Server.Spells.Sixth

+

RevealSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (static) bool CheckDifficulty( Mobile from, Mobile m )
+ (ctor) RevealSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/Revenant.html b/Docs/types/Revenant.html new file mode 100644 index 0000000..8f5f329 --- /dev/null +++ b/Docs/types/Revenant.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Revenant + + +

Back to Server.Mobiles

+

Revenant : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Revenant( Serial serial )
+ (ctor) Revenant( Mobile caster, Mobile target, TimeSpan duration )
+ bool AlwaysMurderer( get; )
+ bool BardImmune( get; )
+ bool BleedImmune( get; )
+ Mobile ConstantFocus( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ bool NoHouseRestrictions( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayPaperdollTo( Mobile to )
+ virtual bool OnBeforeDeath()
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RevenantLion.html b/Docs/types/RevenantLion.html new file mode 100644 index 0000000..365539a --- /dev/null +++ b/Docs/types/RevenantLion.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - RevenantLion + + +

Back to Server.Mobiles

+

RevenantLion : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RevenantLion()
+ (ctor) RevenantLion( Serial serial )
+ bool BleedImmune( get; )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RewardBlackDyeTub.html b/Docs/types/RewardBlackDyeTub.html new file mode 100644 index 0000000..5065c26 --- /dev/null +++ b/Docs/types/RewardBlackDyeTub.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RewardBlackDyeTub + + +

Back to Server.Items

+

RewardBlackDyeTub : DyeTub, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, IRewardItem

+ (ctor) RewardBlackDyeTub()
+ (ctor) RewardBlackDyeTub( Serial serial )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RewardBrazier.html b/Docs/types/RewardBrazier.html new file mode 100644 index 0000000..7eed40c --- /dev/null +++ b/Docs/types/RewardBrazier.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - RewardBrazier + + +

Back to Server.Items

+

RewardBrazier : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) RewardBrazier()
+ (ctor) RewardBrazier( Serial serial )
+ (ctor) RewardBrazier( int itemID )
+ bool ForceShowProperties( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnLocationChange( Point3D old )
+ virtual void Serialize( GenericWriter writer )
+ void TurnOff()
+ void TurnOn()
+ + diff --git a/Docs/types/RewardBrazierDeed.html b/Docs/types/RewardBrazierDeed.html new file mode 100644 index 0000000..0a27167 --- /dev/null +++ b/Docs/types/RewardBrazierDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - RewardBrazierDeed + + +

Back to Server.Items

+

RewardBrazierDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: InternalGump

+ (ctor) RewardBrazierDeed()
+ (ctor) RewardBrazierDeed( Serial serial )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RewardCake.html b/Docs/types/RewardCake.html new file mode 100644 index 0000000..021fca1 --- /dev/null +++ b/Docs/types/RewardCake.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RewardCake + + +

Back to Server.Items

+

RewardCake : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RewardCake()
+ (ctor) RewardCake( Serial serial )
+ bool DisplayLootType( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RewardCalculator.html b/Docs/types/RewardCalculator.html new file mode 100644 index 0000000..fa55175 --- /dev/null +++ b/Docs/types/RewardCalculator.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - RewardCalculator + + +

Back to Server.Engines.BulkOrders

+

RewardCalculator

+

Derived Types: SmithRewardCalculator, TailorRewardCalculator

+ (ctor) RewardCalculator()
+ RewardGroup[] Groups( get; set; )
+ virtual int ComputeFame( LargeBOD bod )
+ virtual int ComputeFame( SmallBOD bod )
+ virtual int ComputeGold( LargeBOD bod )
+ virtual int ComputeGold( SmallBOD bod )
+ virtual int ComputeGold( int quantity, bool exceptional, BulkMaterialType material, int itemCount, Type type )
+ virtual int ComputePoints( SmallBOD bod )
+ virtual int ComputePoints( LargeBOD bod )
+ virtual int ComputePoints( int quantity, bool exceptional, BulkMaterialType material, int itemCount, Type type )
+ virtual RewardGroup LookupRewards( int points )
+ virtual int LookupTypePoints( RewardType[] types, Type type )
+ + diff --git a/Docs/types/RewardCategory.html b/Docs/types/RewardCategory.html new file mode 100644 index 0000000..7d48162 --- /dev/null +++ b/Docs/types/RewardCategory.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RewardCategory + + +

Back to Server.Engines.VeteranRewards

+

RewardCategory

+ (ctor) RewardCategory( string name )
+ (ctor) RewardCategory( int name )
+ List<RewardEntry> Entries( get; )
+ int Name( get; )
+ string NameString( get; )
+ + diff --git a/Docs/types/RewardChoiceGump.html b/Docs/types/RewardChoiceGump.html new file mode 100644 index 0000000..de1972b --- /dev/null +++ b/Docs/types/RewardChoiceGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RewardChoiceGump + + +

Back to Server.Engines.VeteranRewards

+

RewardChoiceGump : Gump

+ (ctor) RewardChoiceGump( Mobile from )
+ int GetButtonID( int type, int index )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ int PagesPerCategory( RewardCategory category )
+ void RenderBackground()
+ void RenderCategories()
+ void RenderCategory( RewardCategory category, int index, ref int page )
+ + diff --git a/Docs/types/RewardCloak.html b/Docs/types/RewardCloak.html new file mode 100644 index 0000000..6ddd519 --- /dev/null +++ b/Docs/types/RewardCloak.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - RewardCloak + + +

Back to Server.Items

+

RewardCloak : BaseCloak, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IRewardItem

+ (ctor) RewardCloak()
+ (ctor) RewardCloak( Serial serial )
+ (ctor) RewardCloak( int hue )
+ (ctor) RewardCloak( int hue, int labelNumber )
+ int BasePhysicalResistance( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int Number( get; set; )
+ virtual bool CanEquip( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAdded( object parent )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RewardConfirmGump.html b/Docs/types/RewardConfirmGump.html new file mode 100644 index 0000000..2de6f9b --- /dev/null +++ b/Docs/types/RewardConfirmGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RewardConfirmGump + + +

Back to Server.Engines.VeteranRewards

+

RewardConfirmGump : Gump

+ (ctor) RewardConfirmGump( Mobile from, RewardEntry entry )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/RewardDemolitionGump.html b/Docs/types/RewardDemolitionGump.html new file mode 100644 index 0000000..4f820ae --- /dev/null +++ b/Docs/types/RewardDemolitionGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RewardDemolitionGump + + +

Back to Server.Gumps

+

RewardDemolitionGump : Gump

+

Nested Types: Buttons

+ (ctor) RewardDemolitionGump( IAddon addon, int question )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/RewardDress.html b/Docs/types/RewardDress.html new file mode 100644 index 0000000..07631d8 --- /dev/null +++ b/Docs/types/RewardDress.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - RewardDress + + +

Back to Server.Items

+

RewardDress : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IRewardItem

+ (ctor) RewardDress()
+ (ctor) RewardDress( Serial serial )
+ (ctor) RewardDress( int hue )
+ (ctor) RewardDress( int hue, int labelNumber )
+ int BasePhysicalResistance( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int Number( get; set; )
+ virtual bool CanEquip( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAdded( object parent )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RewardEntry.html b/Docs/types/RewardEntry.html new file mode 100644 index 0000000..138dab3 --- /dev/null +++ b/Docs/types/RewardEntry.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - RewardEntry + + +

Back to Server.Engines.VeteranRewards

+

RewardEntry

+ (ctor) RewardEntry( RewardCategory category, string name, Type itemType, object[] args )
+ (ctor) RewardEntry( RewardCategory category, int name, Type itemType, object[] args )
+ (ctor) RewardEntry( RewardCategory category, string name, Type itemType, Expansion requiredExpansion, object[] args )
+ (ctor) RewardEntry( RewardCategory category, int name, Type itemType, Expansion requiredExpansion, object[] args )
+ object[] Args( get; )
+ RewardCategory Category( get; )
+ Type ItemType( get; )
+ RewardList List( get; set; )
+ int Name( get; )
+ string NameString( get; )
+ Expansion RequiredExpansion( get; )
+ Item Construct()
+ + diff --git a/Docs/types/RewardGroup.html b/Docs/types/RewardGroup.html new file mode 100644 index 0000000..c9d134b --- /dev/null +++ b/Docs/types/RewardGroup.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RewardGroup + + +

Back to Server.Engines.BulkOrders

+

RewardGroup

+ (ctor) RewardGroup( int points, RewardItem[] items )
+ RewardItem[] Items( get; )
+ int Points( get; )
+ RewardItem AcquireItem()
+ + diff --git a/Docs/types/RewardItem.html b/Docs/types/RewardItem.html new file mode 100644 index 0000000..009e3c0 --- /dev/null +++ b/Docs/types/RewardItem.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RewardItem + + +

Back to Server.Engines.BulkOrders

+

RewardItem

+ (ctor) RewardItem( int weight, ConstructCallback constructor )
+ (ctor) RewardItem( int weight, ConstructCallback constructor, int type )
+ ConstructCallback Constructor( get; )
+ int Type( get; )
+ int Weight( get; )
+ Item Construct()
+ + diff --git a/Docs/types/RewardList.html b/Docs/types/RewardList.html new file mode 100644 index 0000000..67381dd --- /dev/null +++ b/Docs/types/RewardList.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RewardList + + +

Back to Server.Engines.VeteranRewards

+

RewardList

+ (ctor) RewardList( TimeSpan interval, int index, RewardEntry[] entries )
+ TimeSpan Age( get; )
+ RewardEntry[] Entries( get; )
+ + diff --git a/Docs/types/RewardNoticeGump.html b/Docs/types/RewardNoticeGump.html new file mode 100644 index 0000000..cdfe035 --- /dev/null +++ b/Docs/types/RewardNoticeGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RewardNoticeGump + + +

Back to Server.Engines.VeteranRewards

+

RewardNoticeGump : Gump

+ (ctor) RewardNoticeGump( Mobile from )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/RewardOption.html b/Docs/types/RewardOption.html new file mode 100644 index 0000000..1f26bfb --- /dev/null +++ b/Docs/types/RewardOption.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RewardOption + + +

Back to Server.Gumps

+

RewardOption

+ (ctor) RewardOption( int id, int cliloc )
+ int Cliloc( get; )
+ int ID( get; )
+ + diff --git a/Docs/types/RewardOptionGump.html b/Docs/types/RewardOptionGump.html new file mode 100644 index 0000000..a28ec24 --- /dev/null +++ b/Docs/types/RewardOptionGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RewardOptionGump + + +

Back to Server.Gumps

+

RewardOptionGump : Gump

+ (ctor) RewardOptionGump( IRewardOption option )
+ (ctor) RewardOptionGump( IRewardOption option, int title )
+ bool Contains( int chosen )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/RewardOptionList.html b/Docs/types/RewardOptionList.html new file mode 100644 index 0000000..fe9cc20 --- /dev/null +++ b/Docs/types/RewardOptionList.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - RewardOptionList + + +

Back to Server.Gumps

+

RewardOptionList : List`1, IList<RewardOption>, ICollection<RewardOption>, IEnumerable<RewardOption>, IEnumerable, IList, ICollection

+ (ctor) RewardOptionList()
+ void Add( int id, int cliloc )
+ + diff --git a/Docs/types/RewardPottedCactus.html b/Docs/types/RewardPottedCactus.html new file mode 100644 index 0000000..22f5d3c --- /dev/null +++ b/Docs/types/RewardPottedCactus.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RewardPottedCactus + + +

Back to Server.Items

+

RewardPottedCactus : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) RewardPottedCactus()
+ (ctor) RewardPottedCactus( Serial serial )
+ (ctor) RewardPottedCactus( int itemID )
+ bool ForceShowProperties( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RewardRobe.html b/Docs/types/RewardRobe.html new file mode 100644 index 0000000..480e3ea --- /dev/null +++ b/Docs/types/RewardRobe.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - RewardRobe + + +

Back to Server.Items

+

RewardRobe : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IRewardItem

+ (ctor) RewardRobe()
+ (ctor) RewardRobe( Serial serial )
+ (ctor) RewardRobe( int hue )
+ (ctor) RewardRobe( int hue, int labelNumber )
+ int BasePhysicalResistance( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int Number( get; set; )
+ virtual bool CanEquip( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAdded( object parent )
+ virtual void OnRemoved( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RewardSystem.html b/Docs/types/RewardSystem.html new file mode 100644 index 0000000..601feaa --- /dev/null +++ b/Docs/types/RewardSystem.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - RewardSystem + + +

Back to Server.Engines.VeteranRewards

+

RewardSystem

+ (static) RewardCategory[] Categories( get; )
+ (static) RewardList[] Lists( get; )
+ (static) bool CheckIsUsableBy( Mobile from, Item item, object[] args )
+ (static) void ComputeRewardInfo( Mobile mob, out int cur, out int max )
+ (static) void ComputeRewardInfo( Mobile mob, out int cur, out int max, out int level )
+ (static) bool ConsumeRewardPoint( Mobile mob )
+ (static) void EventSink_Login( LoginEventArgs e )
+ (static) int GetRewardLevel( Account acct )
+ (static) int GetRewardLevel( Mobile mob )
+ (static) int GetRewardYear( Item item, object[] args )
+ (static) int GetRewardYearLabel( Item item, object[] args )
+ (static) bool HasAccess( Mobile mob, RewardCategory category )
+ (static) bool HasAccess( Mobile mob, RewardEntry entry )
+ (static) bool HasAccess( Mobile mob, RewardList list, out TimeSpan ts )
+ (static) bool HasHalfLevel( Account acct )
+ (static) bool HasHalfLevel( Mobile mob )
+ (static) void Initialize()
+ (static) void SetupRewardTables()
+ (ctor) RewardSystem()
+ + diff --git a/Docs/types/RewardType.html b/Docs/types/RewardType.html new file mode 100644 index 0000000..a7e7f19 --- /dev/null +++ b/Docs/types/RewardType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RewardType + + +

Back to Server.Engines.BulkOrders

+

RewardType

+ (ctor) RewardType( int points, Type[] types )
+ int Points( get; )
+ Type[] Types( get; )
+ bool Contains( Type type )
+ + diff --git a/Docs/types/RibCage.html b/Docs/types/RibCage.html new file mode 100644 index 0000000..183829f --- /dev/null +++ b/Docs/types/RibCage.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RibCage + + +

Back to Server.Items

+

RibCage : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable

+ (ctor) RibCage()
+ (ctor) RibCage( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ribs.html b/Docs/types/Ribs.html new file mode 100644 index 0000000..64343ac --- /dev/null +++ b/Docs/types/Ribs.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Ribs + + +

Back to Server.Items

+

Ribs : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Ribs()
+ (ctor) Ribs( int amount )
+ (ctor) Ribs( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RidableLlama.html b/Docs/types/RidableLlama.html new file mode 100644 index 0000000..40a6fcd --- /dev/null +++ b/Docs/types/RidableLlama.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RidableLlama + + +

Back to Server.Mobiles

+

RidableLlama : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) RidableLlama()
+ (ctor) RidableLlama( string name )
+ (ctor) RidableLlama( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RideablePolarBear.html b/Docs/types/RideablePolarBear.html new file mode 100644 index 0000000..84e5e0a --- /dev/null +++ b/Docs/types/RideablePolarBear.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RideablePolarBear + + +

Back to Server.Mobiles

+

RideablePolarBear : EtherealMount, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMount, IMountItem, IRewardItem

+ (ctor) RideablePolarBear()
+ (ctor) RideablePolarBear( Serial serial )
+ int EtherealHue( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ridgeback.html b/Docs/types/Ridgeback.html new file mode 100644 index 0000000..a2339b6 --- /dev/null +++ b/Docs/types/Ridgeback.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Ridgeback + + +

Back to Server.Mobiles

+

Ridgeback : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) Ridgeback()
+ (ctor) Ridgeback( Serial serial )
+ (ctor) Ridgeback( string name )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual double GetControlChance( Mobile m, bool useBaseSkill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RidingSwipe.html b/Docs/types/RidingSwipe.html new file mode 100644 index 0000000..36ce3da --- /dev/null +++ b/Docs/types/RidingSwipe.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RidingSwipe + + +

Back to Server.Items

+

RidingSwipe : WeaponAbility

+ (ctor) RidingSwipe()
+ int BaseMana( get; )
+ bool RequiresSE( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/RightArm.html b/Docs/types/RightArm.html new file mode 100644 index 0000000..42b39b9 --- /dev/null +++ b/Docs/types/RightArm.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RightArm + + +

Back to Server.Items

+

RightArm : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RightArm()
+ (ctor) RightArm( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RightLeg.html b/Docs/types/RightLeg.html new file mode 100644 index 0000000..51fe959 --- /dev/null +++ b/Docs/types/RightLeg.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RightLeg + + +

Back to Server.Items

+

RightLeg : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RightLeg()
+ (ctor) RightLeg( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RighteousAnger.html b/Docs/types/RighteousAnger.html new file mode 100644 index 0000000..b2f2cc8 --- /dev/null +++ b/Docs/types/RighteousAnger.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RighteousAnger + + +

Back to Server.Items

+

RighteousAnger : ElvenMachete, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) RighteousAnger()
+ (ctor) RighteousAnger( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Rikktor.html b/Docs/types/Rikktor.html new file mode 100644 index 0000000..3ea8cf9 --- /dev/null +++ b/Docs/types/Rikktor.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Rikktor + + +

Back to Server.Mobiles

+

Rikktor : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Rikktor()
+ (ctor) Rikktor( Serial serial )
+ Type[] DecorativeList( get; )
+ Poison PoisonImmune( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ Type[] SharedList( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ Type[] UniqueList( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Earthquake()
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RingOfTheElements.html b/Docs/types/RingOfTheElements.html new file mode 100644 index 0000000..5e66937 --- /dev/null +++ b/Docs/types/RingOfTheElements.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RingOfTheElements + + +

Back to Server.Items

+

RingOfTheElements : GoldRing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) RingOfTheElements()
+ (ctor) RingOfTheElements( Serial serial )
+ int ArtifactRarity( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RingOfTheVile.html b/Docs/types/RingOfTheVile.html new file mode 100644 index 0000000..4475edf --- /dev/null +++ b/Docs/types/RingOfTheVile.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RingOfTheVile + + +

Back to Server.Items

+

RingOfTheVile : GoldRing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) RingOfTheVile()
+ (ctor) RingOfTheVile( Serial serial )
+ int ArtifactRarity( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RingmailArms.html b/Docs/types/RingmailArms.html new file mode 100644 index 0000000..305a253 --- /dev/null +++ b/Docs/types/RingmailArms.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - RingmailArms + + +

Back to Server.Items

+

RingmailArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RingmailArms()
+ (ctor) RingmailArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RingmailChest.html b/Docs/types/RingmailChest.html new file mode 100644 index 0000000..eaaa98b --- /dev/null +++ b/Docs/types/RingmailChest.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - RingmailChest + + +

Back to Server.Items

+

RingmailChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RingmailChest()
+ (ctor) RingmailChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RingmailGloves.html b/Docs/types/RingmailGloves.html new file mode 100644 index 0000000..bf05ef2 --- /dev/null +++ b/Docs/types/RingmailGloves.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RingmailGloves + + +

Back to Server.Items

+

RingmailGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: GauntletsOfNobility

+ (ctor) RingmailGloves()
+ (ctor) RingmailGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RingmailGlovesOfMining.html b/Docs/types/RingmailGlovesOfMining.html new file mode 100644 index 0000000..49a7c7b --- /dev/null +++ b/Docs/types/RingmailGlovesOfMining.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RingmailGlovesOfMining + + +

Back to Server.Items

+

RingmailGlovesOfMining : BaseGlovesOfMining, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RingmailGlovesOfMining( Serial serial )
+ (ctor) RingmailGlovesOfMining( int bonus )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RingmailLegs.html b/Docs/types/RingmailLegs.html new file mode 100644 index 0000000..6994126 --- /dev/null +++ b/Docs/types/RingmailLegs.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - RingmailLegs + + +

Back to Server.Items

+

RingmailLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RingmailLegs()
+ (ctor) RingmailLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldDexBonus( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RoastPig.html b/Docs/types/RoastPig.html new file mode 100644 index 0000000..fc6d202 --- /dev/null +++ b/Docs/types/RoastPig.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RoastPig + + +

Back to Server.Items

+

RoastPig : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RoastPig()
+ (ctor) RoastPig( int amount )
+ (ctor) RoastPig( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Robe.html b/Docs/types/Robe.html new file mode 100644 index 0000000..789173c --- /dev/null +++ b/Docs/types/Robe.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Robe + + +

Back to Server.Items

+

Robe : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+

Derived Types: AcidProofRobe, ANecromancerShroud, DeathRobe, SamaritanRobe

+ (ctor) Robe()
+ (ctor) Robe( Serial serial )
+ (ctor) Robe( int hue )
+ int CurArcaneCharges( get; set; )
+ bool IsArcane( get; )
+ int MaxArcaneCharges( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Update()
+ + diff --git a/Docs/types/RobeOfTheEclipse.html b/Docs/types/RobeOfTheEclipse.html new file mode 100644 index 0000000..140482f --- /dev/null +++ b/Docs/types/RobeOfTheEclipse.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RobeOfTheEclipse + + +

Back to Server.Items

+

RobeOfTheEclipse : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RobeOfTheEclipse()
+ (ctor) RobeOfTheEclipse( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RobeOfTheEquinox.html b/Docs/types/RobeOfTheEquinox.html new file mode 100644 index 0000000..086cf3d --- /dev/null +++ b/Docs/types/RobeOfTheEquinox.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RobeOfTheEquinox + + +

Back to Server.Items

+

RobeOfTheEquinox : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RobeOfTheEquinox()
+ (ctor) RobeOfTheEquinox( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RockArtifact.html b/Docs/types/RockArtifact.html new file mode 100644 index 0000000..740f854 --- /dev/null +++ b/Docs/types/RockArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RockArtifact + + +

Back to Server.Items

+

RockArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RockArtifact()
+ (ctor) RockArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RockTimer.html b/Docs/types/RockTimer.html new file mode 100644 index 0000000..aeceaf7 --- /dev/null +++ b/Docs/types/RockTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - RockTimer + + +

Back to Server.Engines.Doom

+

(LeverPuzzleController) - RockTimer : Timer

+ (ctor) RockTimer( Mobile player, LeverPuzzleController Controller )
+ virtual void OnTick()
+ int Rock()
+ + diff --git a/Docs/types/RollingPin.html b/Docs/types/RollingPin.html new file mode 100644 index 0000000..766a81d --- /dev/null +++ b/Docs/types/RollingPin.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RollingPin + + +

Back to Server.Items

+

RollingPin : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) RollingPin()
+ (ctor) RollingPin( int uses )
+ (ctor) RollingPin( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ronin.html b/Docs/types/Ronin.html new file mode 100644 index 0000000..5fd3e27 --- /dev/null +++ b/Docs/types/Ronin.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Ronin + + +

Back to Server.Mobiles

+

Ronin : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Ronin()
+ (ctor) Ronin( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool BardImmune( get; )
+ bool CanRummageCorpses( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Rope.html b/Docs/types/Rope.html new file mode 100644 index 0000000..0590f2a --- /dev/null +++ b/Docs/types/Rope.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Rope + + +

Back to Server.Items

+

Rope : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Rope()
+ (ctor) Rope( int amount )
+ (ctor) Rope( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RoseInAVase.html b/Docs/types/RoseInAVase.html new file mode 100644 index 0000000..a29a7b0 --- /dev/null +++ b/Docs/types/RoseInAVase.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RoseInAVase + + +

Back to Server.Items

+

RoseInAVase : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RoseInAVase()
+ (ctor) RoseInAVase( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RoseOfTrinsic.html b/Docs/types/RoseOfTrinsic.html new file mode 100644 index 0000000..e46c9ef --- /dev/null +++ b/Docs/types/RoseOfTrinsic.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - RoseOfTrinsic + + +

Back to Server.Items

+

RoseOfTrinsic : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Nested Types: SpawnTimer

+ (ctor) RoseOfTrinsic()
+ (ctor) RoseOfTrinsic( Serial serial )
+ int LabelNumber( get; )
+ SecureLevel Level( get; set; )
+ int Petals( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void StartSpawnTimer( TimeSpan delay )
+ void StopSpawnTimer()
+ + diff --git a/Docs/types/RoseOfTrinsicPetal.html b/Docs/types/RoseOfTrinsicPetal.html new file mode 100644 index 0000000..38e2cff --- /dev/null +++ b/Docs/types/RoseOfTrinsicPetal.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RoseOfTrinsicPetal + + +

Back to Server.Items

+

RoseOfTrinsicPetal : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RoseOfTrinsicPetal()
+ (ctor) RoseOfTrinsicPetal( int amount )
+ (ctor) RoseOfTrinsicPetal( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RottingCorpse.html b/Docs/types/RottingCorpse.html new file mode 100644 index 0000000..aa020db --- /dev/null +++ b/Docs/types/RottingCorpse.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - RottingCorpse + + +

Back to Server.Mobiles

+

RottingCorpse : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) RottingCorpse()
+ (ctor) RottingCorpse( Serial serial )
+ bool BleedImmune( get; )
+ Poison HitPoison( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RoundPaperLantern.html b/Docs/types/RoundPaperLantern.html new file mode 100644 index 0000000..e7909b4 --- /dev/null +++ b/Docs/types/RoundPaperLantern.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - RoundPaperLantern + + +

Back to Server.Items

+

RoundPaperLantern : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RoundPaperLantern()
+ (ctor) RoundPaperLantern( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RoyalCirclet.html b/Docs/types/RoyalCirclet.html new file mode 100644 index 0000000..bde711e --- /dev/null +++ b/Docs/types/RoyalCirclet.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RoyalCirclet + + +

Back to Server.Items

+

RoyalCirclet : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RoyalCirclet()
+ (ctor) RoyalCirclet( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RoyalGuardSurvivalKnife.html b/Docs/types/RoyalGuardSurvivalKnife.html new file mode 100644 index 0000000..8edf648 --- /dev/null +++ b/Docs/types/RoyalGuardSurvivalKnife.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RoyalGuardSurvivalKnife + + +

Back to Server.Items

+

RoyalGuardSurvivalKnife : SkinningKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) RoyalGuardSurvivalKnife()
+ (ctor) RoyalGuardSurvivalKnife( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Ruby.html b/Docs/types/Ruby.html new file mode 100644 index 0000000..48e1e61 --- /dev/null +++ b/Docs/types/Ruby.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Ruby + + +

Back to Server.Items

+

Ruby : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Ruby()
+ (ctor) Ruby( int amount )
+ (ctor) Ruby( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedArmoire.html b/Docs/types/RuinedArmoire.html new file mode 100644 index 0000000..f9abff8 --- /dev/null +++ b/Docs/types/RuinedArmoire.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedArmoire + + +

Back to Server.Items

+

RuinedArmoire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedArmoire()
+ (ctor) RuinedArmoire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedBookcase.html b/Docs/types/RuinedBookcase.html new file mode 100644 index 0000000..5882d92 --- /dev/null +++ b/Docs/types/RuinedBookcase.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedBookcase + + +

Back to Server.Items

+

RuinedBookcase : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedBookcase()
+ (ctor) RuinedBookcase( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedBooks.html b/Docs/types/RuinedBooks.html new file mode 100644 index 0000000..6c73d9e --- /dev/null +++ b/Docs/types/RuinedBooks.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedBooks + + +

Back to Server.Items

+

RuinedBooks : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedBooks()
+ (ctor) RuinedBooks( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedChair.html b/Docs/types/RuinedChair.html new file mode 100644 index 0000000..d132b74 --- /dev/null +++ b/Docs/types/RuinedChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedChair + + +

Back to Server.Items

+

RuinedChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedChair()
+ (ctor) RuinedChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedClock.html b/Docs/types/RuinedClock.html new file mode 100644 index 0000000..860ec13 --- /dev/null +++ b/Docs/types/RuinedClock.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedClock + + +

Back to Server.Items

+

RuinedClock : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedClock()
+ (ctor) RuinedClock( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedDrawers.html b/Docs/types/RuinedDrawers.html new file mode 100644 index 0000000..acdc612 --- /dev/null +++ b/Docs/types/RuinedDrawers.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedDrawers + + +

Back to Server.Items

+

RuinedDrawers : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedDrawers()
+ (ctor) RuinedDrawers( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedFallenChairA.html b/Docs/types/RuinedFallenChairA.html new file mode 100644 index 0000000..2cd7462 --- /dev/null +++ b/Docs/types/RuinedFallenChairA.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedFallenChairA + + +

Back to Server.Items

+

RuinedFallenChairA : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedFallenChairA()
+ (ctor) RuinedFallenChairA( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedFallenChairB.html b/Docs/types/RuinedFallenChairB.html new file mode 100644 index 0000000..1131061 --- /dev/null +++ b/Docs/types/RuinedFallenChairB.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedFallenChairB + + +

Back to Server.Items

+

RuinedFallenChairB : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedFallenChairB()
+ (ctor) RuinedFallenChairB( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedPainting.html b/Docs/types/RuinedPainting.html new file mode 100644 index 0000000..40f48b9 --- /dev/null +++ b/Docs/types/RuinedPainting.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - RuinedPainting + + +

Back to Server.Items

+

RuinedPainting : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedPainting()
+ (ctor) RuinedPainting( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuinedPaintingArtifact.html b/Docs/types/RuinedPaintingArtifact.html new file mode 100644 index 0000000..222c62c --- /dev/null +++ b/Docs/types/RuinedPaintingArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RuinedPaintingArtifact + + +

Back to Server.Items

+

RuinedPaintingArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RuinedPaintingArtifact()
+ (ctor) RuinedPaintingArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuneBeetle.html b/Docs/types/RuneBeetle.html new file mode 100644 index 0000000..4fcbccf --- /dev/null +++ b/Docs/types/RuneBeetle.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - RuneBeetle + + +

Back to Server.Mobiles

+

RuneBeetle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: ExpireTimer

+ (ctor) RuneBeetle()
+ (ctor) RuneBeetle( Serial serial )
+ bool CanAngerOnTame( get; )
+ FoodType FavoriteFood( get; )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuneBeetleCarapace.html b/Docs/types/RuneBeetleCarapace.html new file mode 100644 index 0000000..2ab6cd9 --- /dev/null +++ b/Docs/types/RuneBeetleCarapace.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - RuneBeetleCarapace + + +

Back to Server.Items

+

RuneBeetleCarapace : PlateDo, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) RuneBeetleCarapace()
+ (ctor) RuneBeetleCarapace( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuneBlade.html b/Docs/types/RuneBlade.html new file mode 100644 index 0000000..1f366f5 --- /dev/null +++ b/Docs/types/RuneBlade.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - RuneBlade + + +

Back to Server.Items

+

RuneBlade : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: BladeDance, LuminousRuneBlade

+ (ctor) RuneBlade()
+ (ctor) RuneBlade( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RuneCarvingKnife.html b/Docs/types/RuneCarvingKnife.html new file mode 100644 index 0000000..0a1a985 --- /dev/null +++ b/Docs/types/RuneCarvingKnife.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RuneCarvingKnife + + +

Back to Server.Items

+

RuneCarvingKnife : AssassinSpike, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) RuneCarvingKnife()
+ (ctor) RuneCarvingKnife( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Runebook.html b/Docs/types/Runebook.html new file mode 100644 index 0000000..d4e5048 --- /dev/null +++ b/Docs/types/Runebook.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - Runebook + + +

Back to Server.Items

+

Runebook : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, ICraftable

+ (ctor) Runebook()
+ (ctor) Runebook( int maxCharges )
+ (ctor) Runebook( Serial serial )
+ Mobile Crafter( get; set; )
+ int CurCharges( get; set; )
+ RunebookEntry Default( get; set; )
+ string Description( get; set; )
+ bool DisplayLootType( get; )
+ List<RunebookEntry> Entries( get; )
+ int LabelNumber( get; )
+ SecureLevel Level( get; set; )
+ int MaxCharges( get; set; )
+ DateTime NextUse( get; set; )
+ List<Mobile> Openers( get; set; )
+ virtual bool AllowEquipedCast( Mobile from )
+ bool CheckAccess( Mobile m )
+ virtual void Deserialize( GenericReader reader )
+ void DropRune( Mobile from, RunebookEntry e, int index )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ bool IsOpen( Mobile toCheck )
+ virtual void OnAfterDuped( Item newItem )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragLift( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void OnTravel()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RunebookDyeTub.html b/Docs/types/RunebookDyeTub.html new file mode 100644 index 0000000..1b695e5 --- /dev/null +++ b/Docs/types/RunebookDyeTub.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - RunebookDyeTub + + +

Back to Server.Items

+

RunebookDyeTub : DyeTub, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, IRewardItem

+ (ctor) RunebookDyeTub()
+ (ctor) RunebookDyeTub( Serial serial )
+ bool AllowDyables( get; )
+ bool AllowRunebooks( get; )
+ CustomHuePicker CustomHuePicker( get; )
+ int FailMessage( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int TargetMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RunebookEntry.html b/Docs/types/RunebookEntry.html new file mode 100644 index 0000000..5531e3a --- /dev/null +++ b/Docs/types/RunebookEntry.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RunebookEntry + + +

Back to Server.Items

+

RunebookEntry

+ (ctor) RunebookEntry( GenericReader reader )
+ (ctor) RunebookEntry( Point3D loc, Map map, string desc, BaseHouse house )
+ string Description( get; )
+ BaseHouse House( get; )
+ Point3D Location( get; )
+ Map Map( get; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RunebookGump.html b/Docs/types/RunebookGump.html new file mode 100644 index 0000000..e1470c7 --- /dev/null +++ b/Docs/types/RunebookGump.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - RunebookGump + + +

Back to Server.Gumps

+

RunebookGump : Gump

+

Nested Types: InternalPrompt

+ (static) bool HasSpell( Mobile from, int spellID )
+ (ctor) RunebookGump( Mobile from, Runebook book )
+ Runebook Book( get; )
+ void AddBackground()
+ void AddDetails( int index, int half )
+ void AddIndex()
+ int GetMapHue( Map map )
+ string GetName( string name )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/RunedPrism.html b/Docs/types/RunedPrism.html new file mode 100644 index 0000000..a6c9bf2 --- /dev/null +++ b/Docs/types/RunedPrism.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - RunedPrism + + +

Back to Server.Items

+

RunedPrism : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) RunedPrism()
+ (ctor) RunedPrism( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RunedSwitch.html b/Docs/types/RunedSwitch.html new file mode 100644 index 0000000..90ffe9f --- /dev/null +++ b/Docs/types/RunedSwitch.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - RunedSwitch + + +

Back to Server.Items

+

RunedSwitch : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) RunedSwitch()
+ (ctor) RunedSwitch( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RunicDovetailSaw.html b/Docs/types/RunicDovetailSaw.html new file mode 100644 index 0000000..3ab3b24 --- /dev/null +++ b/Docs/types/RunicDovetailSaw.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RunicDovetailSaw + + +

Back to Server.Items

+

RunicDovetailSaw : BaseRunicTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) RunicDovetailSaw( Serial serial )
+ (ctor) RunicDovetailSaw( CraftResource resource )
+ (ctor) RunicDovetailSaw( CraftResource resource, int uses )
+ CraftSystem CraftSystem( get; )
+ int LabelNumber( get; )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RunicHammer.html b/Docs/types/RunicHammer.html new file mode 100644 index 0000000..b8d3d46 --- /dev/null +++ b/Docs/types/RunicHammer.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RunicHammer + + +

Back to Server.Items

+

RunicHammer : BaseRunicTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) RunicHammer( Serial serial )
+ (ctor) RunicHammer( CraftResource resource )
+ (ctor) RunicHammer( CraftResource resource, int uses )
+ CraftSystem CraftSystem( get; )
+ int LabelNumber( get; )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/RunicSewingKit.html b/Docs/types/RunicSewingKit.html new file mode 100644 index 0000000..65493fb --- /dev/null +++ b/Docs/types/RunicSewingKit.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - RunicSewingKit + + +

Back to Server.Items

+

RunicSewingKit : BaseRunicTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) RunicSewingKit( CraftResource resource )
+ (ctor) RunicSewingKit( Serial serial )
+ (ctor) RunicSewingKit( CraftResource resource, int uses )
+ CraftSystem CraftSystem( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SBAlchemist.html b/Docs/types/SBAlchemist.html new file mode 100644 index 0000000..e4696c6 --- /dev/null +++ b/Docs/types/SBAlchemist.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBAlchemist + + +

Back to Server.Mobiles

+

SBAlchemist : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBAlchemist()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBAnimalTrainer.html b/Docs/types/SBAnimalTrainer.html new file mode 100644 index 0000000..5f900a9 --- /dev/null +++ b/Docs/types/SBAnimalTrainer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBAnimalTrainer + + +

Back to Server.Mobiles

+

SBAnimalTrainer : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBAnimalTrainer()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBArchitect.html b/Docs/types/SBArchitect.html new file mode 100644 index 0000000..4d8e1a4 --- /dev/null +++ b/Docs/types/SBArchitect.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBArchitect + + +

Back to Server.Mobiles

+

SBArchitect : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBArchitect()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBAxeWeapon.html b/Docs/types/SBAxeWeapon.html new file mode 100644 index 0000000..88ead7e --- /dev/null +++ b/Docs/types/SBAxeWeapon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBAxeWeapon + + +

Back to Server.Mobiles

+

SBAxeWeapon : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBAxeWeapon()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBBaker.html b/Docs/types/SBBaker.html new file mode 100644 index 0000000..5673204 --- /dev/null +++ b/Docs/types/SBBaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBBaker + + +

Back to Server.Mobiles

+

SBBaker : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBBaker()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBBanker.html b/Docs/types/SBBanker.html new file mode 100644 index 0000000..d1407a4 --- /dev/null +++ b/Docs/types/SBBanker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBBanker + + +

Back to Server.Mobiles

+

SBBanker : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBBanker()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBBard.html b/Docs/types/SBBard.html new file mode 100644 index 0000000..918e085 --- /dev/null +++ b/Docs/types/SBBard.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBBard + + +

Back to Server.Mobiles

+

SBBard : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBBard()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBBarkeeper.html b/Docs/types/SBBarkeeper.html new file mode 100644 index 0000000..faf9b4f --- /dev/null +++ b/Docs/types/SBBarkeeper.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBBarkeeper + + +

Back to Server.Mobiles

+

SBBarkeeper : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBBarkeeper()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBBeekeeper.html b/Docs/types/SBBeekeeper.html new file mode 100644 index 0000000..c474d27 --- /dev/null +++ b/Docs/types/SBBeekeeper.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBBeekeeper + + +

Back to Server.Mobiles

+

SBBeekeeper : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBBeekeeper()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBBlacksmith.html b/Docs/types/SBBlacksmith.html new file mode 100644 index 0000000..c549e7f --- /dev/null +++ b/Docs/types/SBBlacksmith.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBBlacksmith + + +

Back to Server.Mobiles

+

SBBlacksmith : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBBlacksmith()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBBowyer.html b/Docs/types/SBBowyer.html new file mode 100644 index 0000000..7f123b7 --- /dev/null +++ b/Docs/types/SBBowyer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBBowyer + + +

Back to Server.Mobiles

+

SBBowyer : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBBowyer()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBButcher.html b/Docs/types/SBButcher.html new file mode 100644 index 0000000..ad42c0c --- /dev/null +++ b/Docs/types/SBButcher.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBButcher + + +

Back to Server.Mobiles

+

SBButcher : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBButcher()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBCarpenter.html b/Docs/types/SBCarpenter.html new file mode 100644 index 0000000..352c1e6 --- /dev/null +++ b/Docs/types/SBCarpenter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBCarpenter + + +

Back to Server.Mobiles

+

SBCarpenter : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBCarpenter()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBChainmailArmor.html b/Docs/types/SBChainmailArmor.html new file mode 100644 index 0000000..94fbd09 --- /dev/null +++ b/Docs/types/SBChainmailArmor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBChainmailArmor + + +

Back to Server.Mobiles

+

SBChainmailArmor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBChainmailArmor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBCobbler.html b/Docs/types/SBCobbler.html new file mode 100644 index 0000000..f56a511 --- /dev/null +++ b/Docs/types/SBCobbler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBCobbler + + +

Back to Server.Mobiles

+

SBCobbler : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBCobbler()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBCook.html b/Docs/types/SBCook.html new file mode 100644 index 0000000..76e5cbf --- /dev/null +++ b/Docs/types/SBCook.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBCook + + +

Back to Server.Mobiles

+

SBCook : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBCook()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBDryad.html b/Docs/types/SBDryad.html new file mode 100644 index 0000000..8050113 --- /dev/null +++ b/Docs/types/SBDryad.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBDryad + + +

Back to Server.Engines.Quests.Haven

+

SBDryad : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBDryad()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBFactionBoard.html b/Docs/types/SBFactionBoard.html new file mode 100644 index 0000000..74f37f6 --- /dev/null +++ b/Docs/types/SBFactionBoard.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBFactionBoard + + +

Back to Server.Factions

+

SBFactionBoard : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBFactionBoard()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBFactionBottle.html b/Docs/types/SBFactionBottle.html new file mode 100644 index 0000000..45e983d --- /dev/null +++ b/Docs/types/SBFactionBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBFactionBottle + + +

Back to Server.Factions

+

SBFactionBottle : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBFactionBottle()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBFactionOre.html b/Docs/types/SBFactionOre.html new file mode 100644 index 0000000..8f7a481 --- /dev/null +++ b/Docs/types/SBFactionOre.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBFactionOre + + +

Back to Server.Factions

+

SBFactionOre : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBFactionOre()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBFactionReagent.html b/Docs/types/SBFactionReagent.html new file mode 100644 index 0000000..08cf779 --- /dev/null +++ b/Docs/types/SBFactionReagent.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBFactionReagent + + +

Back to Server.Factions

+

SBFactionReagent : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBFactionReagent()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBFarmer.html b/Docs/types/SBFarmer.html new file mode 100644 index 0000000..517027b --- /dev/null +++ b/Docs/types/SBFarmer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBFarmer + + +

Back to Server.Mobiles

+

SBFarmer : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBFarmer()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBFisherman.html b/Docs/types/SBFisherman.html new file mode 100644 index 0000000..b736427 --- /dev/null +++ b/Docs/types/SBFisherman.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBFisherman + + +

Back to Server.Mobiles

+

SBFisherman : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBFisherman()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBFortuneTeller.html b/Docs/types/SBFortuneTeller.html new file mode 100644 index 0000000..895ed31 --- /dev/null +++ b/Docs/types/SBFortuneTeller.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBFortuneTeller + + +

Back to Server.Mobiles

+

SBFortuneTeller : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBFortuneTeller()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBFurtrader.html b/Docs/types/SBFurtrader.html new file mode 100644 index 0000000..6384c0d --- /dev/null +++ b/Docs/types/SBFurtrader.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBFurtrader + + +

Back to Server.Mobiles

+

SBFurtrader : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBFurtrader()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBGlassblower.html b/Docs/types/SBGlassblower.html new file mode 100644 index 0000000..6542b58 --- /dev/null +++ b/Docs/types/SBGlassblower.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBGlassblower + + +

Back to Server.Mobiles

+

SBGlassblower : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBGlassblower()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBHairStylist.html b/Docs/types/SBHairStylist.html new file mode 100644 index 0000000..6c7943d --- /dev/null +++ b/Docs/types/SBHairStylist.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBHairStylist + + +

Back to Server.Mobiles

+

SBHairStylist : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBHairStylist()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBHealer.html b/Docs/types/SBHealer.html new file mode 100644 index 0000000..6d98ab7 --- /dev/null +++ b/Docs/types/SBHealer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBHealer + + +

Back to Server.Mobiles

+

SBHealer : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBHealer()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBHelmetArmor.html b/Docs/types/SBHelmetArmor.html new file mode 100644 index 0000000..6f621f4 --- /dev/null +++ b/Docs/types/SBHelmetArmor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBHelmetArmor + + +

Back to Server.Mobiles

+

SBHelmetArmor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBHelmetArmor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBHerbalist.html b/Docs/types/SBHerbalist.html new file mode 100644 index 0000000..09437a8 --- /dev/null +++ b/Docs/types/SBHerbalist.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBHerbalist + + +

Back to Server.Mobiles

+

SBHerbalist : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBHerbalist()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBHolyMage.html b/Docs/types/SBHolyMage.html new file mode 100644 index 0000000..097696d --- /dev/null +++ b/Docs/types/SBHolyMage.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBHolyMage + + +

Back to Server.Mobiles

+

SBHolyMage : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBHolyMage()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBHouseDeed.html b/Docs/types/SBHouseDeed.html new file mode 100644 index 0000000..5da207b --- /dev/null +++ b/Docs/types/SBHouseDeed.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBHouseDeed + + +

Back to Server.Mobiles

+

SBHouseDeed : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBHouseDeed()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBInfo.html b/Docs/types/SBInfo.html new file mode 100644 index 0000000..75f9b57 --- /dev/null +++ b/Docs/types/SBInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBInfo + + +

Back to Server.Mobiles

+

SBInfo

+

Derived Types: SBAlchemist, SBAnimalTrainer, SBArchitect, SBAxeWeapon, SBBaker, SBBanker, SBBard, SBBarkeeper, SBBeekeeper, SBBlacksmith, SBBowyer, SBButcher, SBCarpenter, SBChainmailArmor, SBCobbler, SBCook, SBDryad, SBFactionBoard, SBFactionBottle, SBFactionOre, SBFactionReagent, SBFarmer, SBFisherman, SBFortuneTeller, SBFurtrader, SBGlassblower, SBHairStylist, SBHealer, SBHelmetArmor, SBHerbalist, SBHolyMage, SBHouseDeed, SBInnKeeper, SBJewel, SBKeeperOfChivalry, SBKnifeWeapon, SBLeatherArmor, SBLeatherWorker, SBMaceWeapon, SBMage, SBMapmaker, SBMetalShields, SBMiller, SBMiner, SBMonk, SBPlateArmor, SBPlayerBarkeeper, SBPoleArmWeapon, SBProvisioner, SBRancher, SBRangedWeapon, SBRanger, SBRealEstateBroker, SBRingmailArmor, SBScribe, SBSEArmor, SBSEBowyer, SBSECarpenter, SBSECook, SBSEFood, SBSEHats, SBSELeatherArmor, SBSEWeapons, SBShipwright, SBSmithTools, SBSpearForkWeapon, SBStavesWeapon, SBStoneCrafter, SBStuddedArmor, SBSwordWeapon, SBTailor, SBTanner, SBTavernKeeper, SBThief, SBTinker, SBVagabond, SBVarietyDealer, SBVeterinarian, SBWaiter, SBWeaponSmith, SBWeaver, SBWoodenShields

+ (ctor) SBInfo()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBInnKeeper.html b/Docs/types/SBInnKeeper.html new file mode 100644 index 0000000..cbec57b --- /dev/null +++ b/Docs/types/SBInnKeeper.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBInnKeeper + + +

Back to Server.Mobiles

+

SBInnKeeper : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBInnKeeper()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBJewel.html b/Docs/types/SBJewel.html new file mode 100644 index 0000000..06988bb --- /dev/null +++ b/Docs/types/SBJewel.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBJewel + + +

Back to Server.Mobiles

+

SBJewel : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBJewel()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBKeeperOfChivalry.html b/Docs/types/SBKeeperOfChivalry.html new file mode 100644 index 0000000..47af27c --- /dev/null +++ b/Docs/types/SBKeeperOfChivalry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBKeeperOfChivalry + + +

Back to Server.Mobiles

+

SBKeeperOfChivalry : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBKeeperOfChivalry()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBKnifeWeapon.html b/Docs/types/SBKnifeWeapon.html new file mode 100644 index 0000000..499678a --- /dev/null +++ b/Docs/types/SBKnifeWeapon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBKnifeWeapon + + +

Back to Server.Mobiles

+

SBKnifeWeapon : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBKnifeWeapon()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBLeatherArmor.html b/Docs/types/SBLeatherArmor.html new file mode 100644 index 0000000..2d85965 --- /dev/null +++ b/Docs/types/SBLeatherArmor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBLeatherArmor + + +

Back to Server.Mobiles

+

SBLeatherArmor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBLeatherArmor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBLeatherWorker.html b/Docs/types/SBLeatherWorker.html new file mode 100644 index 0000000..d87119d --- /dev/null +++ b/Docs/types/SBLeatherWorker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBLeatherWorker + + +

Back to Server.Mobiles

+

SBLeatherWorker : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBLeatherWorker()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBMaceWeapon.html b/Docs/types/SBMaceWeapon.html new file mode 100644 index 0000000..2653392 --- /dev/null +++ b/Docs/types/SBMaceWeapon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBMaceWeapon + + +

Back to Server.Mobiles

+

SBMaceWeapon : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBMaceWeapon()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBMage.html b/Docs/types/SBMage.html new file mode 100644 index 0000000..5680f9b --- /dev/null +++ b/Docs/types/SBMage.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBMage + + +

Back to Server.Mobiles

+

SBMage : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBMage()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBMapmaker.html b/Docs/types/SBMapmaker.html new file mode 100644 index 0000000..650ea0c --- /dev/null +++ b/Docs/types/SBMapmaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBMapmaker + + +

Back to Server.Mobiles

+

SBMapmaker : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBMapmaker()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBMetalShields.html b/Docs/types/SBMetalShields.html new file mode 100644 index 0000000..0c052d2 --- /dev/null +++ b/Docs/types/SBMetalShields.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBMetalShields + + +

Back to Server.Mobiles

+

SBMetalShields : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBMetalShields()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBMiller.html b/Docs/types/SBMiller.html new file mode 100644 index 0000000..559b1ca --- /dev/null +++ b/Docs/types/SBMiller.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBMiller + + +

Back to Server.Mobiles

+

SBMiller : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBMiller()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBMiner.html b/Docs/types/SBMiner.html new file mode 100644 index 0000000..22fef85 --- /dev/null +++ b/Docs/types/SBMiner.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBMiner + + +

Back to Server.Mobiles

+

SBMiner : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBMiner()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBMonk.html b/Docs/types/SBMonk.html new file mode 100644 index 0000000..b1739bf --- /dev/null +++ b/Docs/types/SBMonk.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBMonk + + +

Back to Server.Mobiles

+

SBMonk : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBMonk()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBPlateArmor.html b/Docs/types/SBPlateArmor.html new file mode 100644 index 0000000..fef51a2 --- /dev/null +++ b/Docs/types/SBPlateArmor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBPlateArmor + + +

Back to Server.Mobiles

+

SBPlateArmor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBPlateArmor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBPlayerBarkeeper.html b/Docs/types/SBPlayerBarkeeper.html new file mode 100644 index 0000000..9cc5e18 --- /dev/null +++ b/Docs/types/SBPlayerBarkeeper.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBPlayerBarkeeper + + +

Back to Server.Mobiles

+

SBPlayerBarkeeper : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBPlayerBarkeeper()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBPoleArmWeapon.html b/Docs/types/SBPoleArmWeapon.html new file mode 100644 index 0000000..a873c59 --- /dev/null +++ b/Docs/types/SBPoleArmWeapon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBPoleArmWeapon + + +

Back to Server.Mobiles

+

SBPoleArmWeapon : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBPoleArmWeapon()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBProvisioner.html b/Docs/types/SBProvisioner.html new file mode 100644 index 0000000..2200ad8 --- /dev/null +++ b/Docs/types/SBProvisioner.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBProvisioner + + +

Back to Server.Mobiles

+

SBProvisioner : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBProvisioner()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBRancher.html b/Docs/types/SBRancher.html new file mode 100644 index 0000000..e58396f --- /dev/null +++ b/Docs/types/SBRancher.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBRancher + + +

Back to Server.Mobiles

+

SBRancher : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBRancher()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBRangedWeapon.html b/Docs/types/SBRangedWeapon.html new file mode 100644 index 0000000..aa1f91f --- /dev/null +++ b/Docs/types/SBRangedWeapon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBRangedWeapon + + +

Back to Server.Mobiles

+

SBRangedWeapon : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBRangedWeapon()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBRanger.html b/Docs/types/SBRanger.html new file mode 100644 index 0000000..52349d1 --- /dev/null +++ b/Docs/types/SBRanger.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBRanger + + +

Back to Server.Mobiles

+

SBRanger : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBRanger()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBRealEstateBroker.html b/Docs/types/SBRealEstateBroker.html new file mode 100644 index 0000000..4dce216 --- /dev/null +++ b/Docs/types/SBRealEstateBroker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBRealEstateBroker + + +

Back to Server.Mobiles

+

SBRealEstateBroker : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBRealEstateBroker()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBRingmailArmor.html b/Docs/types/SBRingmailArmor.html new file mode 100644 index 0000000..519ca63 --- /dev/null +++ b/Docs/types/SBRingmailArmor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBRingmailArmor + + +

Back to Server.Mobiles

+

SBRingmailArmor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBRingmailArmor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSEArmor.html b/Docs/types/SBSEArmor.html new file mode 100644 index 0000000..26c3795 --- /dev/null +++ b/Docs/types/SBSEArmor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSEArmor + + +

Back to Server.Mobiles

+

SBSEArmor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSEArmor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSEBowyer.html b/Docs/types/SBSEBowyer.html new file mode 100644 index 0000000..878d4cd --- /dev/null +++ b/Docs/types/SBSEBowyer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSEBowyer + + +

Back to Server.Mobiles

+

SBSEBowyer : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSEBowyer()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSECarpenter.html b/Docs/types/SBSECarpenter.html new file mode 100644 index 0000000..4da9c3e --- /dev/null +++ b/Docs/types/SBSECarpenter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSECarpenter + + +

Back to Server.Mobiles

+

SBSECarpenter : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSECarpenter()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSECook.html b/Docs/types/SBSECook.html new file mode 100644 index 0000000..6b88d13 --- /dev/null +++ b/Docs/types/SBSECook.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSECook + + +

Back to Server.Mobiles

+

SBSECook : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSECook()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSEFood.html b/Docs/types/SBSEFood.html new file mode 100644 index 0000000..c87b982 --- /dev/null +++ b/Docs/types/SBSEFood.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSEFood + + +

Back to Server.Mobiles

+

SBSEFood : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSEFood()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSEHats.html b/Docs/types/SBSEHats.html new file mode 100644 index 0000000..1ef553f --- /dev/null +++ b/Docs/types/SBSEHats.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSEHats + + +

Back to Server.Mobiles

+

SBSEHats : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSEHats()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSELeatherArmor.html b/Docs/types/SBSELeatherArmor.html new file mode 100644 index 0000000..c4d7700 --- /dev/null +++ b/Docs/types/SBSELeatherArmor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSELeatherArmor + + +

Back to Server.Mobiles

+

SBSELeatherArmor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSELeatherArmor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSEWeapons.html b/Docs/types/SBSEWeapons.html new file mode 100644 index 0000000..d243a93 --- /dev/null +++ b/Docs/types/SBSEWeapons.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSEWeapons + + +

Back to Server.Mobiles

+

SBSEWeapons : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSEWeapons()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBScribe.html b/Docs/types/SBScribe.html new file mode 100644 index 0000000..4b6c5ea --- /dev/null +++ b/Docs/types/SBScribe.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBScribe + + +

Back to Server.Mobiles

+

SBScribe : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBScribe()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBShipwright.html b/Docs/types/SBShipwright.html new file mode 100644 index 0000000..e2cddd4 --- /dev/null +++ b/Docs/types/SBShipwright.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBShipwright + + +

Back to Server.Mobiles

+

SBShipwright : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBShipwright()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSmithTools.html b/Docs/types/SBSmithTools.html new file mode 100644 index 0000000..5277752 --- /dev/null +++ b/Docs/types/SBSmithTools.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSmithTools + + +

Back to Server.Mobiles

+

SBSmithTools : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSmithTools()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSpearForkWeapon.html b/Docs/types/SBSpearForkWeapon.html new file mode 100644 index 0000000..afa7bf3 --- /dev/null +++ b/Docs/types/SBSpearForkWeapon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSpearForkWeapon + + +

Back to Server.Mobiles

+

SBSpearForkWeapon : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSpearForkWeapon()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBStavesWeapon.html b/Docs/types/SBStavesWeapon.html new file mode 100644 index 0000000..9c675ae --- /dev/null +++ b/Docs/types/SBStavesWeapon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBStavesWeapon + + +

Back to Server.Mobiles

+

SBStavesWeapon : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBStavesWeapon()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBStoneCrafter.html b/Docs/types/SBStoneCrafter.html new file mode 100644 index 0000000..26adaf2 --- /dev/null +++ b/Docs/types/SBStoneCrafter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBStoneCrafter + + +

Back to Server.Mobiles

+

SBStoneCrafter : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBStoneCrafter()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBStuddedArmor.html b/Docs/types/SBStuddedArmor.html new file mode 100644 index 0000000..f565c90 --- /dev/null +++ b/Docs/types/SBStuddedArmor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBStuddedArmor + + +

Back to Server.Mobiles

+

SBStuddedArmor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBStuddedArmor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBSwordWeapon.html b/Docs/types/SBSwordWeapon.html new file mode 100644 index 0000000..cd770a5 --- /dev/null +++ b/Docs/types/SBSwordWeapon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBSwordWeapon + + +

Back to Server.Mobiles

+

SBSwordWeapon : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBSwordWeapon()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBTailor.html b/Docs/types/SBTailor.html new file mode 100644 index 0000000..bd8536a --- /dev/null +++ b/Docs/types/SBTailor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBTailor + + +

Back to Server.Mobiles

+

SBTailor : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBTailor()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBTanner.html b/Docs/types/SBTanner.html new file mode 100644 index 0000000..2635acb --- /dev/null +++ b/Docs/types/SBTanner.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBTanner + + +

Back to Server.Mobiles

+

SBTanner : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBTanner()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBTavernKeeper.html b/Docs/types/SBTavernKeeper.html new file mode 100644 index 0000000..47b50f8 --- /dev/null +++ b/Docs/types/SBTavernKeeper.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBTavernKeeper + + +

Back to Server.Mobiles

+

SBTavernKeeper : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBTavernKeeper()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBThief.html b/Docs/types/SBThief.html new file mode 100644 index 0000000..0f249c5 --- /dev/null +++ b/Docs/types/SBThief.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBThief + + +

Back to Server.Mobiles

+

SBThief : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBThief()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBTinker.html b/Docs/types/SBTinker.html new file mode 100644 index 0000000..98a8c99 --- /dev/null +++ b/Docs/types/SBTinker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBTinker + + +

Back to Server.Mobiles

+

SBTinker : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBTinker()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBVagabond.html b/Docs/types/SBVagabond.html new file mode 100644 index 0000000..c255bdf --- /dev/null +++ b/Docs/types/SBVagabond.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBVagabond + + +

Back to Server.Mobiles

+

SBVagabond : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBVagabond()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBVarietyDealer.html b/Docs/types/SBVarietyDealer.html new file mode 100644 index 0000000..219b08f --- /dev/null +++ b/Docs/types/SBVarietyDealer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBVarietyDealer + + +

Back to Server.Mobiles

+

SBVarietyDealer : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBVarietyDealer()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBVeterinarian.html b/Docs/types/SBVeterinarian.html new file mode 100644 index 0000000..146b69f --- /dev/null +++ b/Docs/types/SBVeterinarian.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBVeterinarian + + +

Back to Server.Mobiles

+

SBVeterinarian : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBVeterinarian()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBWaiter.html b/Docs/types/SBWaiter.html new file mode 100644 index 0000000..c92c694 --- /dev/null +++ b/Docs/types/SBWaiter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBWaiter + + +

Back to Server.Mobiles

+

SBWaiter : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBWaiter()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBWeaponSmith.html b/Docs/types/SBWeaponSmith.html new file mode 100644 index 0000000..2a56238 --- /dev/null +++ b/Docs/types/SBWeaponSmith.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBWeaponSmith + + +

Back to Server.Mobiles

+

SBWeaponSmith : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBWeaponSmith()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBWeaver.html b/Docs/types/SBWeaver.html new file mode 100644 index 0000000..38a994f --- /dev/null +++ b/Docs/types/SBWeaver.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBWeaver + + +

Back to Server.Mobiles

+

SBWeaver : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBWeaver()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SBWoodenShields.html b/Docs/types/SBWoodenShields.html new file mode 100644 index 0000000..3cfd038 --- /dev/null +++ b/Docs/types/SBWoodenShields.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SBWoodenShields + + +

Back to Server.Mobiles

+

SBWoodenShields : SBInfo

+

Nested Types: InternalBuyInfo, InternalSellInfo

+ (ctor) SBWoodenShields()
+ List<GenericBuyInfo> BuyInfo( get; )
+ IShopSellInfo SellInfo( get; )
+ + diff --git a/Docs/types/SHTeleComponent.html b/Docs/types/SHTeleComponent.html new file mode 100644 index 0000000..57fbfcf --- /dev/null +++ b/Docs/types/SHTeleComponent.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - SHTeleComponent + + +

Back to Server.Items

+

SHTeleComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) SHTeleComponent()
+ (ctor) SHTeleComponent( Serial serial )
+ (ctor) SHTeleComponent( int itemID )
+ (ctor) SHTeleComponent( int itemID, Point3D offset )
+ bool Active( get; set; )
+ string DefaultName( get; )
+ SHTeleComponent TeleDest( get; set; )
+ Point3D TeleOffset( get; set; )
+ Point3D TelePoint( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile m )
+ virtual void OnDoubleClickDead( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SHTeleporter.html b/Docs/types/SHTeleporter.html new file mode 100644 index 0000000..af2c9a8 --- /dev/null +++ b/Docs/types/SHTeleporter.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - SHTeleporter + + +

Back to Server.Items

+

SHTeleporter : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Nested Types: SHTeleporterCreator

+ (static) void Initialize()
+ (static) void SHTelGen_OnCommand( CommandEventArgs e )
+ (ctor) SHTeleporter()
+ (ctor) SHTeleporter( Serial serial )
+ (ctor) SHTeleporter( bool external )
+ SHTeleComponent DownTele( get; )
+ bool External( get; )
+ SHTeleComponent LeftTele( get; )
+ SHTeleComponent RightTele( get; )
+ bool ShareHue( get; )
+ SHTeleComponent UpTele( get; )
+ void ChangeActive( bool active )
+ void ChangeDest( SHTeleporter destAddon )
+ void ChangeDest( SHTeleComponent dest )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SHTeleporterCreator.html b/Docs/types/SHTeleporterCreator.html new file mode 100644 index 0000000..81a4f99 --- /dev/null +++ b/Docs/types/SHTeleporterCreator.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SHTeleporterCreator + + +

Back to Server.Items

+

(SHTeleporter) - SHTeleporterCreator

+ (static) SHTeleporter FindSHTeleporter( Map map, Point3D p )
+ (static) void Link( SHTeleporter tele1, SHTeleporter tele2 )
+ (ctor) SHTeleporterCreator()
+ SHTeleporter AddSHT( Map map, bool ext, int x, int y, int z )
+ void AddSHTCouple( bool ext1, int x1, int y1, int z1, bool ext2, int x2, int y2, int z2 )
+ void AddSHTCouple( Map map, bool ext1, int x1, int y1, int z1, bool ext2, int x2, int y2, int z2 )
+ int CreateSHTeleporters()
+ + diff --git a/Docs/types/SLWarHorse.html b/Docs/types/SLWarHorse.html new file mode 100644 index 0000000..d1c4616 --- /dev/null +++ b/Docs/types/SLWarHorse.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SLWarHorse + + +

Back to Server.Mobiles

+

SLWarHorse : BaseWarHorse, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) SLWarHorse()
+ (ctor) SLWarHorse( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SOS.html b/Docs/types/SOS.html new file mode 100644 index 0000000..7d70718 --- /dev/null +++ b/Docs/types/SOS.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - SOS + + +

Back to Server.Items

+

SOS : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: MessageEntry, MessageGump

+ (static) Point3D FindLocation( Map map )
+ (static) bool ValidateDeepWater( Map map, int x, int y )
+ (ctor) SOS()
+ (ctor) SOS( Map map )
+ (ctor) SOS( Serial serial )
+ (ctor) SOS( Map map, int level )
+ bool IsAncient( get; )
+ int LabelNumber( get; )
+ int Level( get; set; )
+ int MessageIndex( get; set; )
+ Point3D TargetLocation( get; set; )
+ Map TargetMap( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void UpdateHue()
+ + diff --git a/Docs/types/SackFlour.html b/Docs/types/SackFlour.html new file mode 100644 index 0000000..b66d85f --- /dev/null +++ b/Docs/types/SackFlour.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SackFlour + + +

Back to Server.Items

+

SackFlour : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) SackFlour()
+ (ctor) SackFlour( Serial serial )
+ int Quantity( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SacredJourneySpell.html b/Docs/types/SacredJourneySpell.html new file mode 100644 index 0000000..884e8b0 --- /dev/null +++ b/Docs/types/SacredJourneySpell.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - SacredJourneySpell + + +

Back to Server.Spells.Chivalry

+

SacredJourneySpell : PaladinSpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) SacredJourneySpell( Mobile caster, Item scroll )
+ (ctor) SacredJourneySpell( Mobile caster, Item scroll, RunebookEntry entry, Runebook book )
+ bool BlocksMovement( get; )
+ TimeSpan CastDelayBase( get; )
+ int MantraNumber( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int RequiredTithing( get; )
+ virtual bool CheckCast()
+ void Effect( Point3D loc, Map map, bool checkMulti )
+ virtual void OnCast()
+ + diff --git a/Docs/types/SacrificeTarget.html b/Docs/types/SacrificeTarget.html new file mode 100644 index 0000000..3e41140 --- /dev/null +++ b/Docs/types/SacrificeTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SacrificeTarget + + +

Back to Server.Engines.CannedEvil

+

(ChampionSkullBrazier) - SacrificeTarget : Target

+ (ctor) SacrificeTarget( ChampionSkullBrazier brazier )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/SacrificeVirtue.html b/Docs/types/SacrificeVirtue.html new file mode 100644 index 0000000..43c6b8d --- /dev/null +++ b/Docs/types/SacrificeVirtue.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SacrificeVirtue + + +

Back to Server

+

SacrificeVirtue

+

Nested Types: InternalTarget

+ (static) void CheckAtrophy( Mobile from )
+ (static) void Initialize()
+ (static) void OnVirtueUsed( Mobile from )
+ (static) void Resurrect( Mobile from )
+ (static) void Sacrifice( Mobile from, object targeted )
+ (static) bool ValidateCreature( Mobile m )
+ (ctor) SacrificeVirtue()
+ + diff --git a/Docs/types/SacrificialAltarAddon.html b/Docs/types/SacrificialAltarAddon.html new file mode 100644 index 0000000..67f65c4 --- /dev/null +++ b/Docs/types/SacrificialAltarAddon.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - SacrificialAltarAddon + + +

Back to Server.Items

+

SacrificialAltarAddon : BaseAddonContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SacrificialAltarAddon()
+ (ctor) SacrificialAltarAddon( Serial serial )
+ BaseAddonContainerDeed Deed( get; )
+ int DefaultDropSound( get; )
+ int DefaultGumpID( get; )
+ int DefaultMaxWeight( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Empty()
+ virtual void Flip( Mobile from, Direction direction )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SacrificialAltarDeed.html b/Docs/types/SacrificialAltarDeed.html new file mode 100644 index 0000000..af8af82 --- /dev/null +++ b/Docs/types/SacrificialAltarDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SacrificialAltarDeed + + +

Back to Server.Items

+

SacrificialAltarDeed : BaseAddonContainerDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) SacrificialAltarDeed()
+ (ctor) SacrificialAltarDeed( Serial serial )
+ BaseAddonContainer Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SaddleArtifact.html b/Docs/types/SaddleArtifact.html new file mode 100644 index 0000000..72a5ba3 --- /dev/null +++ b/Docs/types/SaddleArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SaddleArtifact + + +

Back to Server.Items

+

SaddleArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SaddleArtifact()
+ (ctor) SaddleArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sai.html b/Docs/types/Sai.html new file mode 100644 index 0000000..67b7493 --- /dev/null +++ b/Docs/types/Sai.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Sai + + +

Back to Server.Items

+

Sai : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: DemonForks

+ (ctor) Sai()
+ (ctor) Sai( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SakeArtifact.html b/Docs/types/SakeArtifact.html new file mode 100644 index 0000000..b0db26e --- /dev/null +++ b/Docs/types/SakeArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SakeArtifact + + +

Back to Server.Items

+

SakeArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SakeArtifact()
+ (ctor) SakeArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SalvageAllEntry.html b/Docs/types/SalvageAllEntry.html new file mode 100644 index 0000000..594e33b --- /dev/null +++ b/Docs/types/SalvageAllEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SalvageAllEntry + + +

Back to Server.Items

+

(SalvageBag) - SalvageAllEntry : ContextMenuEntry

+ (ctor) SalvageAllEntry( SalvageBag bag, bool enabled )
+ virtual void OnClick()
+ + diff --git a/Docs/types/SalvageBag.html b/Docs/types/SalvageBag.html new file mode 100644 index 0000000..bb5f9c2 --- /dev/null +++ b/Docs/types/SalvageBag.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SalvageBag + + +

Back to Server.Items

+

SalvageBag : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Nested Types: SalvageAllEntry, SalvageClothEntry, SalvageIngotsEntry

+ (ctor) SalvageBag()
+ (ctor) SalvageBag( int hue )
+ (ctor) SalvageBag( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ bool Resmelt( Mobile from, Item item, CraftResource resource )
+ bool Resmeltables()
+ void SalvageAll( Mobile from )
+ void SalvageCloth( Mobile from )
+ void SalvageIngots( Mobile from )
+ bool Scissorables()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SalvageClothEntry.html b/Docs/types/SalvageClothEntry.html new file mode 100644 index 0000000..2c742ee --- /dev/null +++ b/Docs/types/SalvageClothEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SalvageClothEntry + + +

Back to Server.Items

+

(SalvageBag) - SalvageClothEntry : ContextMenuEntry

+ (ctor) SalvageClothEntry( SalvageBag bag, bool enabled )
+ virtual void OnClick()
+ + diff --git a/Docs/types/SalvageIngotsEntry.html b/Docs/types/SalvageIngotsEntry.html new file mode 100644 index 0000000..92b1dee --- /dev/null +++ b/Docs/types/SalvageIngotsEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SalvageIngotsEntry + + +

Back to Server.Items

+

(SalvageBag) - SalvageIngotsEntry : ContextMenuEntry

+ (ctor) SalvageIngotsEntry( SalvageBag bag, bool enabled )
+ virtual void OnClick()
+ + diff --git a/Docs/types/SamaritanRobe.html b/Docs/types/SamaritanRobe.html new file mode 100644 index 0000000..156619d --- /dev/null +++ b/Docs/types/SamaritanRobe.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SamaritanRobe + + +

Back to Server.Items

+

SamaritanRobe : Robe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+ (ctor) SamaritanRobe()
+ (ctor) SamaritanRobe( Serial serial )
+ int BasePhysicalResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Samurai.html b/Docs/types/Samurai.html new file mode 100644 index 0000000..739fa56 --- /dev/null +++ b/Docs/types/Samurai.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Samurai + + +

Back to Server.Mobiles

+

Samurai : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Samurai()
+ (ctor) Samurai( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SamuraiHelm.html b/Docs/types/SamuraiHelm.html new file mode 100644 index 0000000..43c2c39 --- /dev/null +++ b/Docs/types/SamuraiHelm.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - SamuraiHelm + + +

Back to Server.Items

+

SamuraiHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) SamuraiHelm()
+ (ctor) SamuraiHelm( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SamuraiMove.html b/Docs/types/SamuraiMove.html new file mode 100644 index 0000000..93834fd --- /dev/null +++ b/Docs/types/SamuraiMove.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SamuraiMove + + +

Back to Server.Spells

+

SamuraiMove : SpecialMove

+

Derived Types: HonorableExecution, LightningStrike, MomentumStrike

+ (ctor) SamuraiMove()
+ SkillName MoveSkill( get; )
+ virtual void CheckGain( Mobile m )
+ + diff --git a/Docs/types/SamuraiSpell.html b/Docs/types/SamuraiSpell.html new file mode 100644 index 0000000..326e3f5 --- /dev/null +++ b/Docs/types/SamuraiSpell.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - SamuraiSpell + + +

Back to Server.Spells.Bushido

+

SamuraiSpell : Spell, ISpell

+

Derived Types: Confidence, CounterAttack, Evasion

+ (static) bool CheckExpansion( Mobile from )
+ (static) void OnEffectEnd( Mobile caster, Type type )
+ (ctor) SamuraiSpell( Mobile caster, Item scroll, SpellInfo info )
+ bool BlocksMovement( get; )
+ double CastDelayFastScalar( get; )
+ int CastRecoveryBase( get; )
+ SkillName CastSkill( get; )
+ bool ClearHandsOnCast( get; )
+ SkillName DamageSkill( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ bool ShowHandMovement( get; )
+ virtual bool CheckCast()
+ virtual bool CheckFizzle()
+ virtual void GetCastSkills( out double min, out double max )
+ virtual int GetMana()
+ virtual void OnCastSuccessful( Mobile caster )
+ + diff --git a/Docs/types/SamuraiTabi.html b/Docs/types/SamuraiTabi.html new file mode 100644 index 0000000..0770eec --- /dev/null +++ b/Docs/types/SamuraiTabi.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SamuraiTabi + + +

Back to Server.Items

+

SamuraiTabi : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) SamuraiTabi()
+ (ctor) SamuraiTabi( int hue )
+ (ctor) SamuraiTabi( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sand.html b/Docs/types/Sand.html new file mode 100644 index 0000000..1ea5a47 --- /dev/null +++ b/Docs/types/Sand.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Sand + + +

Back to Server.Items

+

Sand : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Sand()
+ (ctor) Sand( int amount )
+ (ctor) Sand( Serial serial )
+ int LabelNumber( get; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandFlagstones.html b/Docs/types/SandFlagstones.html new file mode 100644 index 0000000..d7c8c43 --- /dev/null +++ b/Docs/types/SandFlagstones.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SandFlagstones + + +

Back to Server.Items

+

SandFlagstones : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SandFlagstones()
+ (ctor) SandFlagstones( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandGreenThornsEffect.html b/Docs/types/SandGreenThornsEffect.html new file mode 100644 index 0000000..e777879 --- /dev/null +++ b/Docs/types/SandGreenThornsEffect.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SandGreenThornsEffect + + +

Back to Server.Items

+

SandGreenThornsEffect : GreenThornsEffect

+ (ctor) SandGreenThornsEffect( Point3D location, Map map, Mobile from )
+ virtual TimeSpan Play( int step )
+ + diff --git a/Docs/types/SandMiningBook.html b/Docs/types/SandMiningBook.html new file mode 100644 index 0000000..e15d281 --- /dev/null +++ b/Docs/types/SandMiningBook.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SandMiningBook + + +

Back to Server.Items

+

SandMiningBook : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SandMiningBook()
+ (ctor) SandMiningBook( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandStonePatio.html b/Docs/types/SandStonePatio.html new file mode 100644 index 0000000..74ed603 --- /dev/null +++ b/Docs/types/SandStonePatio.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - SandStonePatio + + +

Back to Server.Multis

+

SandStonePatio : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SandStonePatio( Serial serial )
+ (ctor) SandStonePatio( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int ConvertOffsetY( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandVortex.html b/Docs/types/SandVortex.html new file mode 100644 index 0000000..451b1cc --- /dev/null +++ b/Docs/types/SandVortex.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SandVortex + + +

Back to Server.Mobiles

+

SandVortex : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: InternalTimer

+ (ctor) SandVortex()
+ (ctor) SandVortex( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnActionCombat()
+ void SandAttack( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sandals.html b/Docs/types/Sandals.html new file mode 100644 index 0000000..012bcbc --- /dev/null +++ b/Docs/types/Sandals.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Sandals + + +

Back to Server.Items

+

Sandals : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Sandals()
+ (ctor) Sandals( int hue )
+ (ctor) Sandals( Serial serial )
+ CraftResource DefaultResource( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandstoneFireplaceEastAddon.html b/Docs/types/SandstoneFireplaceEastAddon.html new file mode 100644 index 0000000..891320a --- /dev/null +++ b/Docs/types/SandstoneFireplaceEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SandstoneFireplaceEastAddon + + +

Back to Server.Items

+

SandstoneFireplaceEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SandstoneFireplaceEastAddon()
+ (ctor) SandstoneFireplaceEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandstoneFireplaceEastDeed.html b/Docs/types/SandstoneFireplaceEastDeed.html new file mode 100644 index 0000000..d73f660 --- /dev/null +++ b/Docs/types/SandstoneFireplaceEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SandstoneFireplaceEastDeed + + +

Back to Server.Items

+

SandstoneFireplaceEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SandstoneFireplaceEastDeed()
+ (ctor) SandstoneFireplaceEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandstoneFireplaceSouthAddon.html b/Docs/types/SandstoneFireplaceSouthAddon.html new file mode 100644 index 0000000..152b35c --- /dev/null +++ b/Docs/types/SandstoneFireplaceSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SandstoneFireplaceSouthAddon + + +

Back to Server.Items

+

SandstoneFireplaceSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SandstoneFireplaceSouthAddon()
+ (ctor) SandstoneFireplaceSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandstoneFireplaceSouthDeed.html b/Docs/types/SandstoneFireplaceSouthDeed.html new file mode 100644 index 0000000..c8ee3cd --- /dev/null +++ b/Docs/types/SandstoneFireplaceSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SandstoneFireplaceSouthDeed + + +

Back to Server.Items

+

SandstoneFireplaceSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SandstoneFireplaceSouthDeed()
+ (ctor) SandstoneFireplaceSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandstoneFloorN.html b/Docs/types/SandstoneFloorN.html new file mode 100644 index 0000000..b04b9ee --- /dev/null +++ b/Docs/types/SandstoneFloorN.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SandstoneFloorN + + +

Back to Server.Items

+

SandstoneFloorN : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SandstoneFloorN()
+ (ctor) SandstoneFloorN( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandstoneFloorW.html b/Docs/types/SandstoneFloorW.html new file mode 100644 index 0000000..3042bf0 --- /dev/null +++ b/Docs/types/SandstoneFloorW.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SandstoneFloorW + + +

Back to Server.Items

+

SandstoneFloorW : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SandstoneFloorW()
+ (ctor) SandstoneFloorW( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandstoneFountainAddon.html b/Docs/types/SandstoneFountainAddon.html new file mode 100644 index 0000000..67e6a14 --- /dev/null +++ b/Docs/types/SandstoneFountainAddon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SandstoneFountainAddon + + +

Back to Server.Items

+

SandstoneFountainAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SandstoneFountainAddon()
+ (ctor) SandstoneFountainAddon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SandstonePatioDeed.html b/Docs/types/SandstonePatioDeed.html new file mode 100644 index 0000000..b01f243 --- /dev/null +++ b/Docs/types/SandstonePatioDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SandstonePatioDeed + + +

Back to Server.Multis.Deeds

+

SandstonePatioDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SandstonePatioDeed()
+ (ctor) SandstonePatioDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sapphire.html b/Docs/types/Sapphire.html new file mode 100644 index 0000000..f0c5779 --- /dev/null +++ b/Docs/types/Sapphire.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Sapphire + + +

Back to Server.Items

+

Sapphire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Sapphire()
+ (ctor) Sapphire( int amount )
+ (ctor) Sapphire( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Satyr.html b/Docs/types/Satyr.html new file mode 100644 index 0000000..d8e8053 --- /dev/null +++ b/Docs/types/Satyr.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Satyr + + +

Back to Server.Mobiles

+

Satyr : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: AnimateTimer

+ (static) void SuppressRemove( Mobile target )
+ (ctor) Satyr()
+ (ctor) Satyr( Serial serial )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnThink()
+ void Peace( Mobile target )
+ void Provoke( Mobile target )
+ virtual void Serialize( GenericWriter writer )
+ void Suppress( Mobile target )
+ void Undress( Mobile target )
+ void UndressItem( Mobile m, Layer layer )
+ + diff --git a/Docs/types/Sausage.html b/Docs/types/Sausage.html new file mode 100644 index 0000000..5fe83dc --- /dev/null +++ b/Docs/types/Sausage.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Sausage + + +

Back to Server.Items

+

Sausage : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Sausage()
+ (ctor) Sausage( int amount )
+ (ctor) Sausage( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SausagePizza.html b/Docs/types/SausagePizza.html new file mode 100644 index 0000000..dce5222 --- /dev/null +++ b/Docs/types/SausagePizza.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SausagePizza + + +

Back to Server.Items

+

SausagePizza : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SausagePizza()
+ (ctor) SausagePizza( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Savage.html b/Docs/types/Savage.html new file mode 100644 index 0000000..ea6c816 --- /dev/null +++ b/Docs/types/Savage.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Savage + + +

Back to Server.Mobiles

+

Savage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Savage()
+ (ctor) Savage( Serial serial )
+ bool AlwaysMurderer( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ bool ShowFameTitle( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void AlterMeleeDamageTo( Mobile to, ref int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SavageMask.html b/Docs/types/SavageMask.html new file mode 100644 index 0000000..ca578c9 --- /dev/null +++ b/Docs/types/SavageMask.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SavageMask + + +

Back to Server.Items

+

SavageMask : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (static) int GetRandomHue()
+ (ctor) SavageMask()
+ (ctor) SavageMask( Serial serial )
+ (ctor) SavageMask( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SavageRider.html b/Docs/types/SavageRider.html new file mode 100644 index 0000000..d80138e --- /dev/null +++ b/Docs/types/SavageRider.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - SavageRider + + +

Back to Server.Mobiles

+

SavageRider : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SavageRider()
+ (ctor) SavageRider( Serial serial )
+ bool AlwaysMurderer( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ bool ShowFameTitle( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void AlterMeleeDamageTo( Mobile to, ref int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SavageRidgeback.html b/Docs/types/SavageRidgeback.html new file mode 100644 index 0000000..64494d3 --- /dev/null +++ b/Docs/types/SavageRidgeback.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - SavageRidgeback + + +

Back to Server.Mobiles

+

SavageRidgeback : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) SavageRidgeback()
+ (ctor) SavageRidgeback( Serial serial )
+ (ctor) SavageRidgeback( string name )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual double GetControlChance( Mobile m, bool useBaseSkill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SavageShaman.html b/Docs/types/SavageShaman.html new file mode 100644 index 0000000..f514444 --- /dev/null +++ b/Docs/types/SavageShaman.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - SavageShaman + + +

Back to Server.Mobiles

+

SavageShaman : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SavageShaman()
+ (ctor) SavageShaman( Serial serial )
+ bool AlwaysMurderer( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ bool ShowFameTitle( get; )
+ virtual void AggressiveAction( Mobile aggressor, bool criminal )
+ virtual void AlterMeleeDamageTo( Mobile to, ref int damage )
+ void BeginSavageDance()
+ virtual void Deserialize( GenericReader reader )
+ void EndSavageDance()
+ virtual void GenerateLoot()
+ virtual bool IsEnemy( Mobile m )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SaveFlag.html b/Docs/types/SaveFlag.html new file mode 100644 index 0000000..f71785d --- /dev/null +++ b/Docs/types/SaveFlag.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SaveFlag + + +

Back to Server.Items

+

SaveFlag (Enum)

+ None = 0x00000000,
+ Attributes = 0x00000001,
+ DamageModifier = 0x00000002,
+ LowerAmmoCost = 0x00000004,
+ WeightReduction = 0x00000008,
+ Crafter = 0x00000010,
+ Quality = 0x00000020,
+ Capacity = 0x00000040,
+ DamageIncrease = 0x00000080
+ + diff --git a/Docs/types/SaveFlags.html b/Docs/types/SaveFlags.html new file mode 100644 index 0000000..603a01e --- /dev/null +++ b/Docs/types/SaveFlags.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SaveFlags + + +

Back to Server.Items

+

SaveFlags (Enum)

+ None = 0x00000000,
+ Title = 0x00000001,
+ Author = 0x00000002,
+ Writable = 0x00000004,
+ Content = 0x00000008
+ + diff --git a/Docs/types/SaveMetrics.html b/Docs/types/SaveMetrics.html new file mode 100644 index 0000000..7697a3e --- /dev/null +++ b/Docs/types/SaveMetrics.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SaveMetrics + + +

Back to Server

+

SaveMetrics : IDisposable

+ (ctor) SaveMetrics()
+ virtual void Dispose()
+ void OnFileWritten( int numberOfBytes )
+ void OnGuildSaved( int numberOfBytes )
+ void OnItemSaved( int numberOfBytes )
+ void OnMobileSaved( int numberOfBytes )
+ + diff --git a/Docs/types/SaveOption.html b/Docs/types/SaveOption.html new file mode 100644 index 0000000..06fa54e --- /dev/null +++ b/Docs/types/SaveOption.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SaveOption + + +

Back to Server

+

SaveOption (Enum)

+ Normal = 0,
+ Threaded = 1
+ + diff --git a/Docs/types/SaveStrategy.html b/Docs/types/SaveStrategy.html new file mode 100644 index 0000000..8cb647e --- /dev/null +++ b/Docs/types/SaveStrategy.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SaveStrategy + + +

Back to Server

+

SaveStrategy

+

Derived Types: ParallelSaveStrategy, StandardSaveStrategy

+ (static) SaveStrategy Acquire()
+ (ctor) SaveStrategy()
+ string Name( get; )
+ virtual void ProcessDecay()
+ virtual void Save( SaveMetrics metrics, bool permitBackgroundWrite )
+ + diff --git a/Docs/types/Saw.html b/Docs/types/Saw.html new file mode 100644 index 0000000..af92ee9 --- /dev/null +++ b/Docs/types/Saw.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Saw + + +

Back to Server.Items

+

Saw : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Saw()
+ (ctor) Saw( int uses )
+ (ctor) Saw( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SawTrap.html b/Docs/types/SawTrap.html new file mode 100644 index 0000000..9de2577 --- /dev/null +++ b/Docs/types/SawTrap.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - SawTrap + + +

Back to Server.Items

+

SawTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetBaseID( SawTrapType type )
+ (ctor) SawTrap()
+ (ctor) SawTrap( SawTrapType type )
+ (ctor) SawTrap( Serial serial )
+ bool PassivelyTriggered( get; )
+ TimeSpan PassiveTriggerDelay( get; )
+ int PassiveTriggerRange( get; )
+ TimeSpan ResetDelay( get; )
+ SawTrapType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnTrigger( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SawTrapType.html b/Docs/types/SawTrapType.html new file mode 100644 index 0000000..0a8fd87 --- /dev/null +++ b/Docs/types/SawTrapType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SawTrapType + + +

Back to Server.Items

+

SawTrapType (Enum)

+ WestWall = 0,
+ NorthWall = 1,
+ WestFloor = 2,
+ NorthFloor = 3
+ + diff --git a/Docs/types/ScaleType.html b/Docs/types/ScaleType.html new file mode 100644 index 0000000..7095766 --- /dev/null +++ b/Docs/types/ScaleType.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ScaleType + + +

Back to Server.Mobiles

+

ScaleType (Enum)

+ Red = 0,
+ Yellow = 1,
+ Black = 2,
+ Green = 3,
+ White = 4,
+ Blue = 5,
+ All = 6
+ + diff --git a/Docs/types/ScaledSwampDragon.html b/Docs/types/ScaledSwampDragon.html new file mode 100644 index 0000000..23a8704 --- /dev/null +++ b/Docs/types/ScaledSwampDragon.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ScaledSwampDragon + + +

Back to Server.Mobiles

+

ScaledSwampDragon : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) ScaledSwampDragon()
+ (ctor) ScaledSwampDragon( string name )
+ (ctor) ScaledSwampDragon( Serial serial )
+ bool AutoDispel( get; )
+ FoodType FavoriteFood( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual double GetControlChance( Mobile m, bool useBaseSkill )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Scales.html b/Docs/types/Scales.html new file mode 100644 index 0000000..39d9fff --- /dev/null +++ b/Docs/types/Scales.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Scales + + +

Back to Server.Items

+

Scales : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) Scales()
+ (ctor) Scales( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScarecrowAddon.html b/Docs/types/ScarecrowAddon.html new file mode 100644 index 0000000..c8eadf3 --- /dev/null +++ b/Docs/types/ScarecrowAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ScarecrowAddon + + +

Back to Server.Items

+

ScarecrowAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ScarecrowAddon()
+ (ctor) ScarecrowAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScarecrowComponent.html b/Docs/types/ScarecrowComponent.html new file mode 100644 index 0000000..284360e --- /dev/null +++ b/Docs/types/ScarecrowComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ScarecrowComponent + + +

Back to Server.Items

+

ScarecrowComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) ScarecrowComponent()
+ (ctor) ScarecrowComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScarecrowDeed.html b/Docs/types/ScarecrowDeed.html new file mode 100644 index 0000000..a9daaf4 --- /dev/null +++ b/Docs/types/ScarecrowDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ScarecrowDeed + + +

Back to Server.Items

+

ScarecrowDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ScarecrowDeed()
+ (ctor) ScarecrowDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Scepter.html b/Docs/types/Scepter.html new file mode 100644 index 0000000..45f949f --- /dev/null +++ b/Docs/types/Scepter.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Scepter + + +

Back to Server.Items

+

Scepter : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: PixieSwatter

+ (ctor) Scepter()
+ (ctor) Scepter( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Schmendrick.html b/Docs/types/Schmendrick.html new file mode 100644 index 0000000..45b21b0 --- /dev/null +++ b/Docs/types/Schmendrick.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Schmendrick + + +

Back to Server.Engines.Quests.Haven

+

Schmendrick : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Schmendrick()
+ (ctor) Schmendrick( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile pm )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SchmendrickApprenticeCorpse.html b/Docs/types/SchmendrickApprenticeCorpse.html new file mode 100644 index 0000000..4d7ea42 --- /dev/null +++ b/Docs/types/SchmendrickApprenticeCorpse.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SchmendrickApprenticeCorpse + + +

Back to Server.Engines.Quests.Haven

+

SchmendrickApprenticeCorpse : Corpse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICarvable

+ (static) List<Item> GetEquipment()
+ (static) FacialHairInfo GetFacialHair()
+ (static) HairInfo GetHair()
+ (static) Mobile GetOwner()
+ (ctor) SchmendrickApprenticeCorpse()
+ (ctor) SchmendrickApprenticeCorpse( Serial serial )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLoc )
+ virtual void OnMapChange()
+ virtual void OnSingleClick( Mobile from )
+ virtual void Open( Mobile from, bool checkSelfLoot )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SchmendrickConversation.html b/Docs/types/SchmendrickConversation.html new file mode 100644 index 0000000..88c9a35 --- /dev/null +++ b/Docs/types/SchmendrickConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SchmendrickConversation + + +

Back to Server.Engines.Quests.Haven

+

SchmendrickConversation : QuestConversation

+ (ctor) SchmendrickConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SchmendrickScrollOfPower.html b/Docs/types/SchmendrickScrollOfPower.html new file mode 100644 index 0000000..6df2c80 --- /dev/null +++ b/Docs/types/SchmendrickScrollOfPower.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SchmendrickScrollOfPower + + +

Back to Server.Engines.Quests.Haven

+

SchmendrickScrollOfPower : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SchmendrickScrollOfPower()
+ (ctor) SchmendrickScrollOfPower( Serial serial )
+ int LabelNumber( get; )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Scimitar.html b/Docs/types/Scimitar.html new file mode 100644 index 0000000..0461d6d --- /dev/null +++ b/Docs/types/Scimitar.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Scimitar + + +

Back to Server.Items

+

Scimitar : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Scimitar()
+ (ctor) Scimitar( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Scissors.html b/Docs/types/Scissors.html new file mode 100644 index 0000000..95f8a65 --- /dev/null +++ b/Docs/types/Scissors.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Scissors + + +

Back to Server.Items

+

Scissors : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) Scissors()
+ (ctor) Scissors( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScoreEntry.html b/Docs/types/ScoreEntry.html new file mode 100644 index 0000000..5f0f14b --- /dev/null +++ b/Docs/types/ScoreEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ScoreEntry + + +

Back to Server.Items

+

(ArcheryButte) - ScoreEntry

+ (ctor) ScoreEntry()
+ int Count( get; set; )
+ int Total( get; set; )
+ void Record( int score )
+ + diff --git a/Docs/types/Scorp.html b/Docs/types/Scorp.html new file mode 100644 index 0000000..dc5115a --- /dev/null +++ b/Docs/types/Scorp.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Scorp + + +

Back to Server.Items

+

Scorp : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Scorp()
+ (ctor) Scorp( int uses )
+ (ctor) Scorp( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Scorpion.html b/Docs/types/Scorpion.html new file mode 100644 index 0000000..c84815e --- /dev/null +++ b/Docs/types/Scorpion.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Scorpion + + +

Back to Server.Mobiles

+

Scorpion : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Scorpion()
+ (ctor) Scorpion( Serial serial )
+ FoodType FavoriteFood( get; )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Scourge.html b/Docs/types/Scourge.html new file mode 100644 index 0000000..806d025 --- /dev/null +++ b/Docs/types/Scourge.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Scourge + + +

Back to Server.Items

+

Scourge : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Scourge()
+ (ctor) Scourge( int amount )
+ (ctor) Scourge( Serial serial )
+ (ctor) Scourge( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Scribe.html b/Docs/types/Scribe.html new file mode 100644 index 0000000..f850c12 --- /dev/null +++ b/Docs/types/Scribe.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Scribe + + +

Back to Server.Mobiles

+

Scribe : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Scribe()
+ (ctor) Scribe( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScribeBag.html b/Docs/types/ScribeBag.html new file mode 100644 index 0000000..3fe8852 --- /dev/null +++ b/Docs/types/ScribeBag.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ScribeBag + + +

Back to Server.Items

+

ScribeBag : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) ScribeBag()
+ (ctor) ScribeBag( int amount )
+ (ctor) ScribeBag( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScribeStone.html b/Docs/types/ScribeStone.html new file mode 100644 index 0000000..6e74e4f --- /dev/null +++ b/Docs/types/ScribeStone.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ScribeStone + + +

Back to Server.Items

+

ScribeStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ScribeStone()
+ (ctor) ScribeStone( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScribesPen.html b/Docs/types/ScribesPen.html new file mode 100644 index 0000000..750ff90 --- /dev/null +++ b/Docs/types/ScribesPen.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ScribesPen + + +

Back to Server.Items

+

ScribesPen : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) ScribesPen()
+ (ctor) ScribesPen( Serial serial )
+ (ctor) ScribesPen( int uses )
+ CraftSystem CraftSystem( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScriptCompiler.html b/Docs/types/ScriptCompiler.html new file mode 100644 index 0000000..c95f505 --- /dev/null +++ b/Docs/types/ScriptCompiler.html @@ -0,0 +1,36 @@ + + + RunUO Documentation - Class Overview - ScriptCompiler + + +

Back to Server

+

ScriptCompiler

+

Nested Types: Compiler

+ (static) Assembly[] Assemblies( get; set; )
+ (static) void AppendDefine( ref StringBuilder sb, string define )
+ (static) bool Compile()
+ (static) bool Compile( bool debug )
+ (static) bool Compile( bool debug, bool cache )
+ (static) bool CompileCSScripts( out Assembly assembly )
+ (static) bool CompileCSScripts( bool debug, out Assembly assembly )
+ (static) bool CompileCSScripts( bool debug, bool cache, out Assembly assembly )
+ (static) bool CompileVBScripts( out Assembly assembly )
+ (static) bool CompileVBScripts( bool debug, out Assembly assembly )
+ (static) bool CompileVBScripts( bool debug, bool cache, out Assembly assembly )
+ (static) void DeleteFiles( string mask )
+ (static) void Display( CompilerResults results )
+ (static) void EnsureDirectory( string dir )
+ (static) Type FindTypeByFullName( string fullName )
+ (static) Type FindTypeByFullName( string fullName, bool ignoreCase )
+ (static) Type FindTypeByName( string name )
+ (static) Type FindTypeByName( string name, bool ignoreCase )
+ (static) string GetDefines()
+ (static) byte[] GetHashCode( string compiledFile, string[] scriptFiles, bool debug )
+ (static) string[] GetReferenceAssemblies()
+ (static) string[] GetScripts( string filter )
+ (static) void GetScripts( List<String> list, string path, string filter )
+ (static) TypeCache GetTypeCache( Assembly asm )
+ (static) string GetUnusedPath( string name )
+ (static) void Invoke( string method )
+ + diff --git a/Docs/types/ScrollMessage.html b/Docs/types/ScrollMessage.html new file mode 100644 index 0000000..862bb5c --- /dev/null +++ b/Docs/types/ScrollMessage.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ScrollMessage + + +

Back to Server.Network

+

ScrollMessage : Packet

+ (ctor) ScrollMessage( int type, int tip, string text )
+ + diff --git a/Docs/types/ScrollOfAbraxus.html b/Docs/types/ScrollOfAbraxus.html new file mode 100644 index 0000000..f7ff8c9 --- /dev/null +++ b/Docs/types/ScrollOfAbraxus.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ScrollOfAbraxus + + +

Back to Server.Engines.Quests.Necro

+

ScrollOfAbraxus : QuestItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ScrollOfAbraxus()
+ (ctor) ScrollOfAbraxus( Serial serial )
+ int LabelNumber( get; )
+ virtual bool CanDrop( PlayerMobile player )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAdded( object parent )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ScrollOfAbraxusGump.html b/Docs/types/ScrollOfAbraxusGump.html new file mode 100644 index 0000000..5369e3c --- /dev/null +++ b/Docs/types/ScrollOfAbraxusGump.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ScrollOfAbraxusGump + + +

Back to Server.Engines.Quests.Necro

+

ScrollOfAbraxusGump : Gump

+ (ctor) ScrollOfAbraxusGump()
+ + diff --git a/Docs/types/ScrollofAlacrity.html b/Docs/types/ScrollofAlacrity.html new file mode 100644 index 0000000..9655138 --- /dev/null +++ b/Docs/types/ScrollofAlacrity.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ScrollofAlacrity + + +

Back to Server.Items

+

ScrollofAlacrity : SpecialScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) void Expire_Callback( object state )
+ (ctor) ScrollofAlacrity()
+ (ctor) ScrollofAlacrity( SkillName skill )
+ (ctor) ScrollofAlacrity( Serial serial )
+ string DefaultTitle( get; )
+ int LabelNumber( get; )
+ int Message( get; )
+ virtual bool CanUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ virtual void Use( Mobile from )
+ + diff --git a/Docs/types/ScrollofTranscendence.html b/Docs/types/ScrollofTranscendence.html new file mode 100644 index 0000000..c13e921 --- /dev/null +++ b/Docs/types/ScrollofTranscendence.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ScrollofTranscendence + + +

Back to Server.Items

+

ScrollofTranscendence : SpecialScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) ScrollofTranscendence CreateRandom( int min, int max )
+ (ctor) ScrollofTranscendence()
+ (ctor) ScrollofTranscendence( Serial serial )
+ (ctor) ScrollofTranscendence( SkillName skill, double value )
+ string DefaultTitle( get; )
+ int LabelNumber( get; )
+ int Message( get; )
+ virtual bool CanUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ virtual void Use( Mobile from )
+ + diff --git a/Docs/types/Sculptor.html b/Docs/types/Sculptor.html new file mode 100644 index 0000000..f69a505 --- /dev/null +++ b/Docs/types/Sculptor.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Sculptor + + +

Back to Server.Mobiles

+

Sculptor : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Sculptor()
+ (ctor) Sculptor( Serial serial )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sculpture1Artifact.html b/Docs/types/Sculpture1Artifact.html new file mode 100644 index 0000000..d1ea985 --- /dev/null +++ b/Docs/types/Sculpture1Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Sculpture1Artifact + + +

Back to Server.Items

+

Sculpture1Artifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Sculpture1Artifact()
+ (ctor) Sculpture1Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sculpture2Artifact.html b/Docs/types/Sculpture2Artifact.html new file mode 100644 index 0000000..6fd6b79 --- /dev/null +++ b/Docs/types/Sculpture2Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Sculpture2Artifact + + +

Back to Server.Items

+

Sculpture2Artifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Sculpture2Artifact()
+ (ctor) Sculpture2Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Scythe.html b/Docs/types/Scythe.html new file mode 100644 index 0000000..423f5ae --- /dev/null +++ b/Docs/types/Scythe.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Scythe + + +

Back to Server.Items

+

Scythe : BasePoleArm, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+

Derived Types: Subdue

+ (ctor) Scythe()
+ (ctor) Scythe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ HarvestSystem HarvestSystem( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SeaChart.html b/Docs/types/SeaChart.html new file mode 100644 index 0000000..43312a9 --- /dev/null +++ b/Docs/types/SeaChart.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SeaChart + + +

Back to Server.Items

+

SeaChart : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) SeaChart()
+ (ctor) SeaChart( Serial serial )
+ int LabelNumber( get; )
+ virtual void CraftInit( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SeaHorse.html b/Docs/types/SeaHorse.html new file mode 100644 index 0000000..9235aeb --- /dev/null +++ b/Docs/types/SeaHorse.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SeaHorse + + +

Back to Server.Mobiles

+

SeaHorse : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) SeaHorse()
+ (ctor) SeaHorse( string name )
+ (ctor) SeaHorse( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SeaSerpent.html b/Docs/types/SeaSerpent.html new file mode 100644 index 0000000..380bb03 --- /dev/null +++ b/Docs/types/SeaSerpent.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SeaSerpent + + +

Back to Server.Mobiles

+

SeaSerpent : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SeaSerpent()
+ (ctor) SeaSerpent( Serial serial )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SeahorseStatuette.html b/Docs/types/SeahorseStatuette.html new file mode 100644 index 0000000..39b5534 --- /dev/null +++ b/Docs/types/SeahorseStatuette.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SeahorseStatuette + + +

Back to Server.Items

+

SeahorseStatuette : MonsterStatuette, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+ (ctor) SeahorseStatuette()
+ (ctor) SeahorseStatuette( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SearchForSwordConversation.html b/Docs/types/SearchForSwordConversation.html new file mode 100644 index 0000000..af37b13 --- /dev/null +++ b/Docs/types/SearchForSwordConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SearchForSwordConversation + + +

Back to Server.Engines.Quests.Ninja

+

SearchForSwordConversation : QuestConversation

+ (ctor) SearchForSwordConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SearchForSwordObjective.html b/Docs/types/SearchForSwordObjective.html new file mode 100644 index 0000000..e3648b0 --- /dev/null +++ b/Docs/types/SearchForSwordObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SearchForSwordObjective + + +

Back to Server.Engines.Quests.Ninja

+

SearchForSwordObjective : QuestObjective

+ (ctor) SearchForSwordObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/SearchSelectionCallback.html b/Docs/types/SearchSelectionCallback.html new file mode 100644 index 0000000..613415c --- /dev/null +++ b/Docs/types/SearchSelectionCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SearchSelectionCallback + + +

Back to Server.Guilds

+

SearchSelectionCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SearchSelectionCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( GuildDisplayType display, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( GuildDisplayType display )
+ + diff --git a/Docs/types/SeasonChange.html b/Docs/types/SeasonChange.html new file mode 100644 index 0000000..1eafd6e --- /dev/null +++ b/Docs/types/SeasonChange.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SeasonChange + + +

Back to Server.Network

+

SeasonChange : Packet

+ (static) SeasonChange Instantiate( int season )
+ (static) SeasonChange Instantiate( int season, bool playSound )
+ (ctor) SeasonChange( int season )
+ (ctor) SeasonChange( int season, bool playSound )
+ + diff --git a/Docs/types/SecondHorusConversation.html b/Docs/types/SecondHorusConversation.html new file mode 100644 index 0000000..aca7f75 --- /dev/null +++ b/Docs/types/SecondHorusConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SecondHorusConversation + + +

Back to Server.Engines.Quests.Necro

+

SecondHorusConversation : QuestConversation

+ (ctor) SecondHorusConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SecondKillObjective.html b/Docs/types/SecondKillObjective.html new file mode 100644 index 0000000..10929c2 --- /dev/null +++ b/Docs/types/SecondKillObjective.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SecondKillObjective + + +

Back to Server.Engines.Quests.Zento

+

SecondKillObjective : QuestObjective

+ (ctor) SecondKillObjective()
+ object Message( get; )
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void OnRead()
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/SecondTrialAttackConversation.html b/Docs/types/SecondTrialAttackConversation.html new file mode 100644 index 0000000..fc3361f --- /dev/null +++ b/Docs/types/SecondTrialAttackConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SecondTrialAttackConversation + + +

Back to Server.Engines.Quests.Samurai

+

SecondTrialAttackConversation : QuestConversation

+ (ctor) SecondTrialAttackConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SecondTrialAttackObjective.html b/Docs/types/SecondTrialAttackObjective.html new file mode 100644 index 0000000..d54e096 --- /dev/null +++ b/Docs/types/SecondTrialAttackObjective.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SecondTrialAttackObjective + + +

Back to Server.Engines.Quests.Samurai

+

SecondTrialAttackObjective : QuestObjective

+ (ctor) SecondTrialAttackObjective()
+ object Message( get; )
+ + diff --git a/Docs/types/SecondTrialIntroConversation.html b/Docs/types/SecondTrialIntroConversation.html new file mode 100644 index 0000000..99b7c93 --- /dev/null +++ b/Docs/types/SecondTrialIntroConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SecondTrialIntroConversation + + +

Back to Server.Engines.Quests.Samurai

+

SecondTrialIntroConversation : QuestConversation

+ (ctor) SecondTrialIntroConversation()
+ (ctor) SecondTrialIntroConversation( bool cursedSoul )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SecondTrialIntroObjective.html b/Docs/types/SecondTrialIntroObjective.html new file mode 100644 index 0000000..fca5736 --- /dev/null +++ b/Docs/types/SecondTrialIntroObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SecondTrialIntroObjective + + +

Back to Server.Engines.Quests.Samurai

+

SecondTrialIntroObjective : QuestObjective

+ (ctor) SecondTrialIntroObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/SecondTrialReturnObjective.html b/Docs/types/SecondTrialReturnObjective.html new file mode 100644 index 0000000..193b3fb --- /dev/null +++ b/Docs/types/SecondTrialReturnObjective.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SecondTrialReturnObjective + + +

Back to Server.Engines.Quests.Samurai

+

SecondTrialReturnObjective : QuestObjective

+ (ctor) SecondTrialReturnObjective()
+ (ctor) SecondTrialReturnObjective( bool dragon )
+ bool Dragon( get; )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/SecretDungeonDoor.html b/Docs/types/SecretDungeonDoor.html new file mode 100644 index 0000000..80c552f --- /dev/null +++ b/Docs/types/SecretDungeonDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SecretDungeonDoor + + +

Back to Server.Items

+

SecretDungeonDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) SecretDungeonDoor( DoorFacing facing )
+ (ctor) SecretDungeonDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SecretLightWoodDoor.html b/Docs/types/SecretLightWoodDoor.html new file mode 100644 index 0000000..0d783d8 --- /dev/null +++ b/Docs/types/SecretLightWoodDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SecretLightWoodDoor + + +

Back to Server.Items

+

SecretLightWoodDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) SecretLightWoodDoor( DoorFacing facing )
+ (ctor) SecretLightWoodDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SecretStoneDoor1.html b/Docs/types/SecretStoneDoor1.html new file mode 100644 index 0000000..0b10153 --- /dev/null +++ b/Docs/types/SecretStoneDoor1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SecretStoneDoor1 + + +

Back to Server.Items

+

SecretStoneDoor1 : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) SecretStoneDoor1( DoorFacing facing )
+ (ctor) SecretStoneDoor1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SecretStoneDoor2.html b/Docs/types/SecretStoneDoor2.html new file mode 100644 index 0000000..d28d46d --- /dev/null +++ b/Docs/types/SecretStoneDoor2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SecretStoneDoor2 + + +

Back to Server.Items

+

SecretStoneDoor2 : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) SecretStoneDoor2( DoorFacing facing )
+ (ctor) SecretStoneDoor2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SecretStoneDoor3.html b/Docs/types/SecretStoneDoor3.html new file mode 100644 index 0000000..978f920 --- /dev/null +++ b/Docs/types/SecretStoneDoor3.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SecretStoneDoor3 + + +

Back to Server.Items

+

SecretStoneDoor3 : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) SecretStoneDoor3( DoorFacing facing )
+ (ctor) SecretStoneDoor3( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SecretWoodenDoor.html b/Docs/types/SecretWoodenDoor.html new file mode 100644 index 0000000..c3bc91c --- /dev/null +++ b/Docs/types/SecretWoodenDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SecretWoodenDoor + + +

Back to Server.Items

+

SecretWoodenDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) SecretWoodenDoor( DoorFacing facing )
+ (ctor) SecretWoodenDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sector.html b/Docs/types/Sector.html new file mode 100644 index 0000000..bba26e3 --- /dev/null +++ b/Docs/types/Sector.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - Sector + + +

Back to Server

+

Sector

+ (ctor) Sector( int x, int y, Map owner )
+ bool Active( get; )
+ List<NetState> Clients( get; )
+ List<Item> Items( get; )
+ List<Mobile> Mobiles( get; )
+ List<BaseMulti> Multis( get; )
+ Map Owner( get; )
+ List<Mobile> Players( get; )
+ List<RegionRect> RegionRects( get; )
+ int X( get; )
+ int Y( get; )
+ void Activate()
+ void Add( ref List<T> list, T value )
+ void Deactivate()
+ void OnClientChange( NetState oldState, NetState newState )
+ void OnEnter( Mobile mob )
+ void OnEnter( Item item )
+ void OnEnter( Region region, Rectangle3D rect )
+ void OnLeave( Item item )
+ void OnLeave( Region region )
+ void OnLeave( Mobile mob )
+ void OnMultiEnter( BaseMulti multi )
+ void OnMultiLeave( BaseMulti multi )
+ void Remove( ref List<T> list, T value )
+ void Replace( ref List<T> list, T oldValue, T newValue )
+ void UpdateMobileRegions()
+ + diff --git a/Docs/types/SectorEnumerator.html b/Docs/types/SectorEnumerator.html new file mode 100644 index 0000000..251f98e --- /dev/null +++ b/Docs/types/SectorEnumerator.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SectorEnumerator + + +

Back to Server

+

(Map) - SectorEnumerator : IPooledEnumerator, IEnumerator, IDisposable

+ (static) SectorEnumerator Instantiate( Map map, Rectangle2D bounds, SectorEnumeratorType type )
+ (ctor) SectorEnumerator( Map map, Rectangle2D bounds, SectorEnumeratorType type )
+ object Current( get; )
+ IPooledEnumerable Enumerable( get; set; )
+ virtual void Dispose()
+ virtual void Free()
+ IList GetListForSector( Sector sector )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/SectorEnumeratorType.html b/Docs/types/SectorEnumeratorType.html new file mode 100644 index 0000000..080e36f --- /dev/null +++ b/Docs/types/SectorEnumeratorType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SectorEnumeratorType + + +

Back to Server

+

SectorEnumeratorType (Enum)

+ Mobiles = 0,
+ Items = 1,
+ Clients = 2
+ + diff --git a/Docs/types/SecureAccessResult.html b/Docs/types/SecureAccessResult.html new file mode 100644 index 0000000..4ecbddf --- /dev/null +++ b/Docs/types/SecureAccessResult.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SecureAccessResult + + +

Back to Server.Multis

+

SecureAccessResult (Enum)

+ Insecure = 0,
+ Accessible = 1,
+ Inaccessible = 2
+ + diff --git a/Docs/types/SecureInfo.html b/Docs/types/SecureInfo.html new file mode 100644 index 0000000..93f72a7 --- /dev/null +++ b/Docs/types/SecureInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SecureInfo + + +

Back to Server.Multis

+

SecureInfo : ISecurable

+ (ctor) SecureInfo( GenericReader reader )
+ (ctor) SecureInfo( Container item, SecureLevel level )
+ Container Item( get; )
+ SecureLevel Level( get; set; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SecureLevel.html b/Docs/types/SecureLevel.html new file mode 100644 index 0000000..b602380 --- /dev/null +++ b/Docs/types/SecureLevel.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SecureLevel + + +

Back to Server.Multis

+

SecureLevel (Enum)

+ Owner = 0,
+ CoOwners = 1,
+ Friends = 2,
+ Anyone = 3,
+ Guild = 4
+ + diff --git a/Docs/types/SecureTarget.html b/Docs/types/SecureTarget.html new file mode 100644 index 0000000..99a2444 --- /dev/null +++ b/Docs/types/SecureTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SecureTarget + + +

Back to Server.Multis

+

SecureTarget : Target

+ (ctor) SecureTarget( bool release, BaseHouse house )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetNotAccessible( Mobile from, object targeted )
+ + diff --git a/Docs/types/SecureTrade.html b/Docs/types/SecureTrade.html new file mode 100644 index 0000000..f627163 --- /dev/null +++ b/Docs/types/SecureTrade.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SecureTrade + + +

Back to Server

+

SecureTrade

+ (ctor) SecureTrade( Mobile from, Mobile to )
+ SecureTradeInfo From( get; )
+ SecureTradeInfo To( get; )
+ bool Valid( get; )
+ void b__0()
+ void b__1()
+ void Cancel()
+ void Close()
+ void Update()
+ + diff --git a/Docs/types/SecureTradeContainer.html b/Docs/types/SecureTradeContainer.html new file mode 100644 index 0000000..872d817 --- /dev/null +++ b/Docs/types/SecureTradeContainer.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - SecureTradeContainer + + +

Back to Server.Items

+

SecureTradeContainer : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SecureTradeContainer( Serial serial )
+ (ctor) SecureTradeContainer( SecureTrade trade )
+ SecureTrade Trade( get; )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ void ClearChecks()
+ virtual void Deserialize( GenericReader reader )
+ virtual bool IsAccessibleTo( Mobile check )
+ virtual void OnItemAdded( Item item )
+ virtual void OnItemRemoved( Item item )
+ virtual void OnSubItemAdded( Item item )
+ virtual void OnSubItemRemoved( Item item )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SecureTradeEquip.html b/Docs/types/SecureTradeEquip.html new file mode 100644 index 0000000..0fc07b7 --- /dev/null +++ b/Docs/types/SecureTradeEquip.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SecureTradeEquip + + +

Back to Server.Network

+

SecureTradeEquip : Packet

+ (ctor) SecureTradeEquip( Item item, Mobile m )
+ + diff --git a/Docs/types/SecureTradeEquip6017.html b/Docs/types/SecureTradeEquip6017.html new file mode 100644 index 0000000..691235f --- /dev/null +++ b/Docs/types/SecureTradeEquip6017.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SecureTradeEquip6017 + + +

Back to Server.Network

+

SecureTradeEquip6017 : Packet

+ (ctor) SecureTradeEquip6017( Item item, Mobile m )
+ + diff --git a/Docs/types/SecureTradeInfo.html b/Docs/types/SecureTradeInfo.html new file mode 100644 index 0000000..692b8eb --- /dev/null +++ b/Docs/types/SecureTradeInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SecureTradeInfo + + +

Back to Server

+

SecureTradeInfo

+ (ctor) SecureTradeInfo( SecureTrade owner, Mobile m, SecureTradeContainer c )
+ bool Accepted( get; set; )
+ SecureTradeContainer Container( get; )
+ Mobile Mobile( get; )
+ SecureTrade Owner( get; )
+ + diff --git a/Docs/types/Seed.html b/Docs/types/Seed.html new file mode 100644 index 0000000..941b087 --- /dev/null +++ b/Docs/types/Seed.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Seed + + +

Back to Server.Engines.Plants

+

Seed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (static) Seed RandomBonsaiSeed()
+ (static) Seed RandomBonsaiSeed( double increaseRatio )
+ (static) Seed RandomPeculiarSeed( int group )
+ (ctor) Seed()
+ (ctor) Seed( Serial serial )
+ (ctor) Seed( PlantType plantType, PlantHue plantHue, bool showType )
+ bool ForceShowProperties( get; )
+ int LabelNumber( get; )
+ PlantHue PlantHue( get; set; )
+ PlantType PlantType( get; set; )
+ bool ShowType( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SeekerOfAdventure.html b/Docs/types/SeekerOfAdventure.html new file mode 100644 index 0000000..873fd26 --- /dev/null +++ b/Docs/types/SeekerOfAdventure.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SeekerOfAdventure + + +

Back to Server.Mobiles

+

SeekerOfAdventure : BaseEscortable, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (static) int GetRandomHue()
+ (ctor) SeekerOfAdventure()
+ (ctor) SeekerOfAdventure( Serial serial )
+ bool ClickTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual string[] GetPossibleDestinations()
+ virtual void InitOutfit()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SeerRobe.html b/Docs/types/SeerRobe.html new file mode 100644 index 0000000..74ae9e7 --- /dev/null +++ b/Docs/types/SeerRobe.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SeerRobe + + +

Back to Server.Items

+

SeerRobe : BaseSuit, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SeerRobe()
+ (ctor) SeerRobe( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SelectSkillGump.html b/Docs/types/SelectSkillGump.html new file mode 100644 index 0000000..c498b57 --- /dev/null +++ b/Docs/types/SelectSkillGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SelectSkillGump + + +

Back to Server.Items

+

(SoulStone) - SelectSkillGump : Gump

+ (ctor) SelectSkillGump( SoulStone stone, Mobile from )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SelfCommandImplementor.html b/Docs/types/SelfCommandImplementor.html new file mode 100644 index 0000000..08d3835 --- /dev/null +++ b/Docs/types/SelfCommandImplementor.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SelfCommandImplementor + + +

Back to Server.Commands.Generic

+

SelfCommandImplementor : BaseCommandImplementor

+ (ctor) SelfCommandImplementor()
+ virtual void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj )
+ + diff --git a/Docs/types/SellItemResponse.html b/Docs/types/SellItemResponse.html new file mode 100644 index 0000000..c6e42cc --- /dev/null +++ b/Docs/types/SellItemResponse.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SellItemResponse + + +

Back to Server.Mobiles

+

SellItemResponse

+ (ctor) SellItemResponse( Item i, int amount )
+ int Amount( get; )
+ Item Item( get; )
+ + diff --git a/Docs/types/SellItemState.html b/Docs/types/SellItemState.html new file mode 100644 index 0000000..202313d --- /dev/null +++ b/Docs/types/SellItemState.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SellItemState + + +

Back to Server.Mobiles

+

SellItemState

+ (ctor) SellItemState( Item item, int price, string name )
+ Item Item( get; )
+ string Name( get; )
+ int Price( get; )
+ + diff --git a/Docs/types/Semidar.html b/Docs/types/Semidar.html new file mode 100644 index 0000000..b34eb95 --- /dev/null +++ b/Docs/types/Semidar.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Semidar + + +

Back to Server.Mobiles

+

Semidar : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Semidar()
+ (ctor) Semidar( Serial serial )
+ Type[] DecorativeList( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ Type[] UniqueList( get; )
+ bool Unprovokable( get; )
+ virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
+ virtual void CheckReflect( Mobile caster, ref bool reflect )
+ virtual void Deserialize( GenericReader reader )
+ void DrainLife()
+ virtual void GenerateLoot()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SendQueue.html b/Docs/types/SendQueue.html new file mode 100644 index 0000000..fd9a529 --- /dev/null +++ b/Docs/types/SendQueue.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - SendQueue + + +

Back to Server.Network

+

SendQueue

+

Nested Types: Gram

+ (static) int CoalesceBufferSize( get; set; )
+ (static) byte[] AcquireBuffer()
+ (static) void ReleaseBuffer( byte[] buffer )
+ (ctor) SendQueue()
+ bool IsEmpty( get; )
+ bool IsFlushReady( get; )
+ Gram CheckFlushReady()
+ void Clear()
+ Gram Dequeue()
+ Gram Enqueue( byte[] buffer, int length )
+ Gram Enqueue( byte[] buffer, int offset, int length )
+ + diff --git a/Docs/types/SendQueueEntry.html b/Docs/types/SendQueueEntry.html new file mode 100644 index 0000000..ab2ae39 --- /dev/null +++ b/Docs/types/SendQueueEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SendQueueEntry + + +

Back to Server.Multis

+

(DesignStateDetailed) - SendQueueEntry

+ (ctor) SendQueueEntry( NetState ns, HouseFoundation foundation, DesignState state )
+ + diff --git a/Docs/types/SendTarget.html b/Docs/types/SendTarget.html new file mode 100644 index 0000000..09ef5ab --- /dev/null +++ b/Docs/types/SendTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SendTarget + + +

Back to Server.Items

+

(BagOfSending) - SendTarget : Target

+ (ctor) SendTarget( BagOfSending bag )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/Sequence.html b/Docs/types/Sequence.html new file mode 100644 index 0000000..09e7b4e --- /dev/null +++ b/Docs/types/Sequence.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Sequence + + +

Back to Server.Network

+

Sequence : Packet

+ (ctor) Sequence( int num )
+ + diff --git a/Docs/types/SequentialFileWriter.html b/Docs/types/SequentialFileWriter.html new file mode 100644 index 0000000..f28895a --- /dev/null +++ b/Docs/types/SequentialFileWriter.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SequentialFileWriter + + +

Back to Server

+

SequentialFileWriter : Stream, IDisposable

+ (ctor) SequentialFileWriter( string path, SaveMetrics metrics )
+ bool CanRead( get; )
+ bool CanSeek( get; )
+ bool CanWrite( get; )
+ long Length( get; )
+ long Position( get; set; )
+ virtual void Dispose( bool disposing )
+ void FileCallback( Chunk chunk )
+ virtual void Flush()
+ void OnWrite( IAsyncResult asyncResult )
+ virtual int Read( byte[] buffer, int offset, int count )
+ virtual long Seek( long offset, SeekOrigin origin )
+ virtual void SetLength( long value )
+ virtual void Write( byte[] buffer, int offset, int size )
+ + diff --git a/Docs/types/Serado.html b/Docs/types/Serado.html new file mode 100644 index 0000000..8d314b4 --- /dev/null +++ b/Docs/types/Serado.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - Serado + + +

Back to Server.Mobiles

+

Serado : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Serado()
+ (ctor) Serado( Serial serial )
+ bool ClickTitle( get; )
+ Type[] DecorativeList( get; )
+ int Feathers( get; )
+ Poison HitPoison( get; )
+ double HitPoisonChance( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ bool ShowFameTitle( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ int TreasureMapLevel( get; )
+ Type[] UniqueList( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoCounter( Mobile attacker )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDamagedBySpell( Mobile attacker )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ void ScaleResistances()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Serial.html b/Docs/types/Serial.html new file mode 100644 index 0000000..a3c932b --- /dev/null +++ b/Docs/types/Serial.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Serial + + +

Back to Server

+

Serial : IComparable, IComparable<Serial>

+ (static) Serial LastItem( get; )
+ (static) Serial LastMobile( get; )
+ (static) Serial NewItem( get; )
+ (static) Serial NewMobile( get; )
+ (ctor) Serial( int serial )
+ bool IsItem( get; )
+ bool IsMobile( get; )
+ bool IsValid( get; )
+ int Value( get; )
+ virtual int CompareTo( Serial other )
+ virtual int CompareTo( object other )
+ virtual bool Equals( object o )
+ virtual int GetHashCode()
+ virtual string ToString()
+ + diff --git a/Docs/types/SerialCommandImplementor.html b/Docs/types/SerialCommandImplementor.html new file mode 100644 index 0000000..4883504 --- /dev/null +++ b/Docs/types/SerialCommandImplementor.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SerialCommandImplementor + + +

Back to Server.Commands.Generic

+

SerialCommandImplementor : BaseCommandImplementor

+ (ctor) SerialCommandImplementor()
+ virtual void Execute( CommandEventArgs e )
+ + diff --git a/Docs/types/SerpentPillar.html b/Docs/types/SerpentPillar.html new file mode 100644 index 0000000..873c64d --- /dev/null +++ b/Docs/types/SerpentPillar.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SerpentPillar + + +

Back to Server.Items

+

SerpentPillar : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SerpentPillar()
+ (ctor) SerpentPillar( Serial serial )
+ (ctor) SerpentPillar( string word, Rectangle2D destination )
+ (ctor) SerpentPillar( string word, Rectangle2D destination, bool active )
+ bool Active( get; set; )
+ Rectangle2D Destination( get; set; )
+ bool HandlesOnSpeech( get; )
+ string Word( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SerpentPillarAddon.html b/Docs/types/SerpentPillarAddon.html new file mode 100644 index 0000000..8b47a7c --- /dev/null +++ b/Docs/types/SerpentPillarAddon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SerpentPillarAddon + + +

Back to Server.Items

+

SerpentPillarAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SerpentPillarAddon()
+ (ctor) SerpentPillarAddon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SerpentineDragon.html b/Docs/types/SerpentineDragon.html new file mode 100644 index 0000000..35e9e1f --- /dev/null +++ b/Docs/types/SerpentineDragon.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - SerpentineDragon + + +

Back to Server.Mobiles

+

SerpentineDragon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SerpentineDragon()
+ (ctor) SerpentineDragon( Serial serial )
+ bool AutoDispel( get; )
+ double BonusPetDamageScalar( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ bool ReacquireOnMovement( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SerpentsFang.html b/Docs/types/SerpentsFang.html new file mode 100644 index 0000000..b766c72 --- /dev/null +++ b/Docs/types/SerpentsFang.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SerpentsFang + + +

Back to Server.Items

+

SerpentsFang : Kryss, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) SerpentsFang()
+ (ctor) SerpentsFang( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ServantOfSemidar.html b/Docs/types/ServantOfSemidar.html new file mode 100644 index 0000000..e3eee32 --- /dev/null +++ b/Docs/types/ServantOfSemidar.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ServantOfSemidar + + +

Back to Server.Mobiles

+

ServantOfSemidar : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ServantOfSemidar()
+ (ctor) ServantOfSemidar( Serial serial )
+ bool DisallowAllMoves( get; )
+ bool InitialInnocent( get; )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual bool CanBeDamaged()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ServerChange.html b/Docs/types/ServerChange.html new file mode 100644 index 0000000..e014646 --- /dev/null +++ b/Docs/types/ServerChange.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ServerChange + + +

Back to Server.Network

+

ServerChange : Packet

+ (ctor) ServerChange( Mobile m, Map map )
+ + diff --git a/Docs/types/ServerInfo.html b/Docs/types/ServerInfo.html new file mode 100644 index 0000000..9756f9d --- /dev/null +++ b/Docs/types/ServerInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ServerInfo + + +

Back to Server.RemoteAdmin

+

ServerInfo : Packet

+ (ctor) ServerInfo()
+ + diff --git a/Docs/types/ServerList.html b/Docs/types/ServerList.html new file mode 100644 index 0000000..565f3ed --- /dev/null +++ b/Docs/types/ServerList.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ServerList + + +

Back to Server.Misc

+

ServerList

+ (static) void AutoDetection()
+ (static) void EventSink_ServerList( ServerListEventArgs e )
+ (static) IPAddress FindPublicAddress()
+ (static) bool HasPublicIPAddress()
+ (static) void Initialize()
+ (static) bool IsPrivateNetwork( IPAddress ip )
+ (static) void Resolve( string addr, out IPAddress outValue )
+ (ctor) ServerList()
+ + diff --git a/Docs/types/ServerListEventArgs.html b/Docs/types/ServerListEventArgs.html new file mode 100644 index 0000000..32e9530 --- /dev/null +++ b/Docs/types/ServerListEventArgs.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ServerListEventArgs + + +

Back to Server

+

ServerListEventArgs : EventArgs

+ (ctor) ServerListEventArgs( NetState state, IAccount account )
+ IAccount Account( get; )
+ bool Rejected( get; set; )
+ List<ServerInfo> Servers( get; )
+ NetState State( get; )
+ void AddServer( string name, IPEndPoint address )
+ void AddServer( string name, int fullPercent, TimeZone tz, IPEndPoint address )
+ + diff --git a/Docs/types/ServerListEventHandler.html b/Docs/types/ServerListEventHandler.html new file mode 100644 index 0000000..3739158 --- /dev/null +++ b/Docs/types/ServerListEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ServerListEventHandler + + +

Back to Server

+

ServerListEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ServerListEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ServerListEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ServerListEventArgs e )
+ + diff --git a/Docs/types/ServerStartedEventHandler.html b/Docs/types/ServerStartedEventHandler.html new file mode 100644 index 0000000..091e992 --- /dev/null +++ b/Docs/types/ServerStartedEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ServerStartedEventHandler + + +

Back to Server

+

ServerStartedEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ServerStartedEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke()
+ + diff --git a/Docs/types/SetAbilityEventArgs.html b/Docs/types/SetAbilityEventArgs.html new file mode 100644 index 0000000..f9fb03f --- /dev/null +++ b/Docs/types/SetAbilityEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetAbilityEventArgs + + +

Back to Server

+

SetAbilityEventArgs : EventArgs

+ (ctor) SetAbilityEventArgs( Mobile mobile, int index )
+ int Index( get; )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/SetAbilityEventHandler.html b/Docs/types/SetAbilityEventHandler.html new file mode 100644 index 0000000..5fc08a7 --- /dev/null +++ b/Docs/types/SetAbilityEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SetAbilityEventHandler + + +

Back to Server

+

SetAbilityEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SetAbilityEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( SetAbilityEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( SetAbilityEventArgs e )
+ + diff --git a/Docs/types/SetArrow.html b/Docs/types/SetArrow.html new file mode 100644 index 0000000..f1e2e11 --- /dev/null +++ b/Docs/types/SetArrow.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SetArrow + + +

Back to Server.Network

+

SetArrow : Packet

+ (ctor) SetArrow( int x, int y )
+ + diff --git a/Docs/types/SetArrowHS.html b/Docs/types/SetArrowHS.html new file mode 100644 index 0000000..b1c6802 --- /dev/null +++ b/Docs/types/SetArrowHS.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SetArrowHS + + +

Back to Server.Network

+

SetArrowHS : Packet

+ (ctor) SetArrowHS( int x, int y, Serial s )
+ + diff --git a/Docs/types/SetBodyGump.html b/Docs/types/SetBodyGump.html new file mode 100644 index 0000000..f9ed697 --- /dev/null +++ b/Docs/types/SetBodyGump.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SetBodyGump + + +

Back to Server.Gumps

+

SetBodyGump : Gump

+

Nested Types: InternalEntry

+ (static) void LoadLists()
+ (ctor) SetBodyGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list )
+ (ctor) SetBodyGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list, int ourPage, ArrayList ourList, ModelBodyType ourType )
+ void AddTypeButton( int x, int y, int buttonID, string text, ModelBodyType type )
+ string Center( string text )
+ string Color( string text, int color )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SetCommand.html b/Docs/types/SetCommand.html new file mode 100644 index 0000000..b356098 --- /dev/null +++ b/Docs/types/SetCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SetCommand + + +

Back to Server.Commands.Generic

+

SetCommand : BaseCommand

+ (ctor) SetCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/SetCustomEnumGump.html b/Docs/types/SetCustomEnumGump.html new file mode 100644 index 0000000..e24890e --- /dev/null +++ b/Docs/types/SetCustomEnumGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SetCustomEnumGump + + +

Back to Server.Gumps

+

SetCustomEnumGump : SetListOptionGump

+ (ctor) SetCustomEnumGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int propspage, ArrayList list, string[] names )
+ virtual void OnResponse( NetState sender, RelayInfo relayInfo )
+ + diff --git a/Docs/types/SetGump.html b/Docs/types/SetGump.html new file mode 100644 index 0000000..b741ba8 --- /dev/null +++ b/Docs/types/SetGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetGump + + +

Back to Server.Gumps

+

SetGump : Gump

+

Nested Types: InternalPicker

+ (ctor) SetGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SetListOptionGump.html b/Docs/types/SetListOptionGump.html new file mode 100644 index 0000000..0d998ff --- /dev/null +++ b/Docs/types/SetListOptionGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SetListOptionGump + + +

Back to Server.Gumps

+

SetListOptionGump : Gump

+

Derived Types: SetCustomEnumGump

+ (ctor) SetListOptionGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int propspage, ArrayList list, string[] names, object[] values )
+ void AddRect( int index, string str, int button )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SetObjectGump.html b/Docs/types/SetObjectGump.html new file mode 100644 index 0000000..0d692d9 --- /dev/null +++ b/Docs/types/SetObjectGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetObjectGump + + +

Back to Server.Gumps

+

SetObjectGump : Gump

+

Nested Types: InternalPrompt

+ (ctor) SetObjectGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, Type type, int page, ArrayList list )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SetObjectTarget.html b/Docs/types/SetObjectTarget.html new file mode 100644 index 0000000..030b088 --- /dev/null +++ b/Docs/types/SetObjectTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetObjectTarget + + +

Back to Server.Gumps

+

SetObjectTarget : Target

+ (ctor) SetObjectTarget( PropertyInfo prop, Mobile mobile, object o, Stack stack, Type type, int page, ArrayList list )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetFinish( Mobile from )
+ + diff --git a/Docs/types/SetPoint2DGump.html b/Docs/types/SetPoint2DGump.html new file mode 100644 index 0000000..ae4d7ca --- /dev/null +++ b/Docs/types/SetPoint2DGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetPoint2DGump + + +

Back to Server.Gumps

+

SetPoint2DGump : Gump

+

Nested Types: InternalTarget

+ (ctor) SetPoint2DGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SetPoint3DGump.html b/Docs/types/SetPoint3DGump.html new file mode 100644 index 0000000..6827e78 --- /dev/null +++ b/Docs/types/SetPoint3DGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetPoint3DGump + + +

Back to Server.Gumps

+

SetPoint3DGump : Gump

+

Nested Types: InternalTarget

+ (ctor) SetPoint3DGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SetPricePrompt.html b/Docs/types/SetPricePrompt.html new file mode 100644 index 0000000..a595e32 --- /dev/null +++ b/Docs/types/SetPricePrompt.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SetPricePrompt + + +

Back to Server.Engines.BulkOrders

+

(BOBGump) - SetPricePrompt : Prompt

+ (ctor) SetPricePrompt( BulkOrderBook book, object obj, int page, ArrayList list )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/SetSecureLevelEntry.html b/Docs/types/SetSecureLevelEntry.html new file mode 100644 index 0000000..9432ced --- /dev/null +++ b/Docs/types/SetSecureLevelEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SetSecureLevelEntry + + +

Back to Server.Multis

+

SetSecureLevelEntry : ContextMenuEntry

+ (static) void AddTo( Mobile from, Item item, List<ContextMenuEntry> list )
+ (static) ISecurable GetSecurable( Mobile from, Item item )
+ (ctor) SetSecureLevelEntry( Item item, ISecurable securable )
+ virtual void OnClick()
+ + diff --git a/Docs/types/SetSecureLevelGump.html b/Docs/types/SetSecureLevelGump.html new file mode 100644 index 0000000..fdecefd --- /dev/null +++ b/Docs/types/SetSecureLevelGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SetSecureLevelGump + + +

Back to Server.Gumps

+

SetSecureLevelGump : Gump

+ (ctor) SetSecureLevelGump( Mobile owner, ISecurable info, BaseHouse house )
+ int GetColor( SecureLevel level )
+ int GetFirstID( SecureLevel level )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/SetTimeSpanGump.html b/Docs/types/SetTimeSpanGump.html new file mode 100644 index 0000000..382e94e --- /dev/null +++ b/Docs/types/SetTimeSpanGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetTimeSpanGump + + +

Back to Server.Gumps

+

SetTimeSpanGump : Gump

+ (ctor) SetTimeSpanGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list )
+ void AddRect( int index, string str, int button, int text )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SetTitlePrompt.html b/Docs/types/SetTitlePrompt.html new file mode 100644 index 0000000..4293d6f --- /dev/null +++ b/Docs/types/SetTitlePrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetTitlePrompt + + +

Back to Server.Items

+

(BasePlayerBB) - SetTitlePrompt : Prompt

+ (ctor) SetTitlePrompt( int page, BaseHouse house, BasePlayerBB board )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/SetToDecorativeGump.html b/Docs/types/SetToDecorativeGump.html new file mode 100644 index 0000000..9e97691 --- /dev/null +++ b/Docs/types/SetToDecorativeGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SetToDecorativeGump + + +

Back to Server.Engines.Plants

+

SetToDecorativeGump : Gump

+ (ctor) SetToDecorativeGump( PlantItem plant )
+ void DrawBackground()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SetWarMode.html b/Docs/types/SetWarMode.html new file mode 100644 index 0000000..7ac8ca9 --- /dev/null +++ b/Docs/types/SetWarMode.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SetWarMode + + +

Back to Server.Network

+

SetWarMode : Packet

+ (static) Packet Instantiate( bool mode )
+ (ctor) SetWarMode( bool mode )
+ + diff --git a/Docs/types/SettleTimer.html b/Docs/types/SettleTimer.html new file mode 100644 index 0000000..dff82c5 --- /dev/null +++ b/Docs/types/SettleTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SettleTimer + + +

Back to Server.Items

+

(Moonstone) - SettleTimer : Timer

+ (ctor) SettleTimer( Item stone, Point3D loc, Map map, Map targetMap, Mobile caster )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SeventhTrialIntroConversation.html b/Docs/types/SeventhTrialIntroConversation.html new file mode 100644 index 0000000..43047d5 --- /dev/null +++ b/Docs/types/SeventhTrialIntroConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SeventhTrialIntroConversation + + +

Back to Server.Engines.Quests.Samurai

+

SeventhTrialIntroConversation : QuestConversation

+ (ctor) SeventhTrialIntroConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SeventhTrialIntroObjective.html b/Docs/types/SeventhTrialIntroObjective.html new file mode 100644 index 0000000..822d1c3 --- /dev/null +++ b/Docs/types/SeventhTrialIntroObjective.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SeventhTrialIntroObjective + + +

Back to Server.Engines.Quests.Samurai

+

SeventhTrialIntroObjective : QuestObjective

+ (ctor) SeventhTrialIntroObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ + diff --git a/Docs/types/SeventhTrialReturnObjective.html b/Docs/types/SeventhTrialReturnObjective.html new file mode 100644 index 0000000..5b4efdd --- /dev/null +++ b/Docs/types/SeventhTrialReturnObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SeventhTrialReturnObjective + + +

Back to Server.Engines.Quests.Samurai

+

SeventhTrialReturnObjective : QuestObjective

+ (ctor) SeventhTrialReturnObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/Sewerrat.html b/Docs/types/Sewerrat.html new file mode 100644 index 0000000..65725d6 --- /dev/null +++ b/Docs/types/Sewerrat.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Sewerrat + + +

Back to Server.Mobiles

+

Sewerrat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Sewerrat()
+ (ctor) Sewerrat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SewingKit.html b/Docs/types/SewingKit.html new file mode 100644 index 0000000..554f502 --- /dev/null +++ b/Docs/types/SewingKit.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SewingKit + + +

Back to Server.Items

+

SewingKit : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) SewingKit()
+ (ctor) SewingKit( int uses )
+ (ctor) SewingKit( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sextant.html b/Docs/types/Sextant.html new file mode 100644 index 0000000..de13550 --- /dev/null +++ b/Docs/types/Sextant.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Sextant + + +

Back to Server.Items

+

Sextant : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) bool ComputeMapDetails( Map map, int x, int y, out int xCenter, out int yCenter, out int xWidth, out int yHeight )
+ (static) bool Format( Point3D p, Map map, ref int xLong, ref int yLat, ref int xMins, ref int yMins, ref bool xEast, ref bool ySouth )
+ (static) Point3D ReverseLookup( Map map, int xLong, int yLat, int xMins, int yMins, bool xEast, bool ySouth )
+ (ctor) Sextant()
+ (ctor) Sextant( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SextantParts.html b/Docs/types/SextantParts.html new file mode 100644 index 0000000..53f29a4 --- /dev/null +++ b/Docs/types/SextantParts.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SextantParts + + +

Back to Server.Items

+

SextantParts : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SextantParts()
+ (ctor) SextantParts( int amount )
+ (ctor) SextantParts( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Shade.html b/Docs/types/Shade.html new file mode 100644 index 0000000..693d100 --- /dev/null +++ b/Docs/types/Shade.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Shade + + +

Back to Server.Mobiles

+

Shade : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Shade()
+ (ctor) Shade( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowDancerLeggings.html b/Docs/types/ShadowDancerLeggings.html new file mode 100644 index 0000000..7c2faf6 --- /dev/null +++ b/Docs/types/ShadowDancerLeggings.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ShadowDancerLeggings + + +

Back to Server.Items

+

ShadowDancerLeggings : LeatherLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ShadowDancerLeggings()
+ (ctor) ShadowDancerLeggings( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseEnergyResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowFiend.html b/Docs/types/ShadowFiend.html new file mode 100644 index 0000000..322df04 --- /dev/null +++ b/Docs/types/ShadowFiend.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - ShadowFiend + + +

Back to Server.Mobiles

+

ShadowFiend : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: UnhideTimer

+ (ctor) ShadowFiend()
+ (ctor) ShadowFiend( Serial serial )
+ bool CanRummageCorpses( get; )
+ bool DeleteCorpseOnDeath( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnAfterDelete()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowIronElemental.html b/Docs/types/ShadowIronElemental.html new file mode 100644 index 0000000..63c7327 --- /dev/null +++ b/Docs/types/ShadowIronElemental.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - ShadowIronElemental + + +

Back to Server.Mobiles

+

ShadowIronElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ShadowIronElemental()
+ (ctor) ShadowIronElemental( Serial serial )
+ (ctor) ShadowIronElemental( int oreAmount )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ bool BreathImmune( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
+ virtual void AlterMeleeDamageFrom( Mobile from, ref int damage )
+ virtual void AlterSpellDamageFrom( Mobile from, ref int damage )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowIronGranite.html b/Docs/types/ShadowIronGranite.html new file mode 100644 index 0000000..27a2b50 --- /dev/null +++ b/Docs/types/ShadowIronGranite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ShadowIronGranite + + +

Back to Server.Items

+

ShadowIronGranite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ShadowIronGranite()
+ (ctor) ShadowIronGranite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowIronIngot.html b/Docs/types/ShadowIronIngot.html new file mode 100644 index 0000000..79907cb --- /dev/null +++ b/Docs/types/ShadowIronIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShadowIronIngot + + +

Back to Server.Items

+

ShadowIronIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ShadowIronIngot()
+ (ctor) ShadowIronIngot( int amount )
+ (ctor) ShadowIronIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowIronOre.html b/Docs/types/ShadowIronOre.html new file mode 100644 index 0000000..fbeac07 --- /dev/null +++ b/Docs/types/ShadowIronOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ShadowIronOre + + +

Back to Server.Items

+

ShadowIronOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ShadowIronOre()
+ (ctor) ShadowIronOre( int amount )
+ (ctor) ShadowIronOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowKnight.html b/Docs/types/ShadowKnight.html new file mode 100644 index 0000000..83d7917 --- /dev/null +++ b/Docs/types/ShadowKnight.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - ShadowKnight + + +

Back to Server.Mobiles

+

ShadowKnight : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ShadowKnight()
+ (ctor) ShadowKnight( Serial serial )
+ bool AreaPeaceImmune( get; )
+ bool BardImmune( get; )
+ bool IgnoreYoungProtection( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnCombatantChange()
+ virtual void OnDeath( Container c )
+ virtual void OnThink()
+ virtual void SendTrackingSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowStrike.html b/Docs/types/ShadowStrike.html new file mode 100644 index 0000000..8589526 --- /dev/null +++ b/Docs/types/ShadowStrike.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ShadowStrike + + +

Back to Server.Items

+

ShadowStrike : WeaponAbility

+ (ctor) ShadowStrike()
+ int BaseMana( get; )
+ double DamageScalar( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual bool RequiresTactics( Mobile from )
+ + diff --git a/Docs/types/ShadowWisp.html b/Docs/types/ShadowWisp.html new file mode 100644 index 0000000..c297a5f --- /dev/null +++ b/Docs/types/ShadowWisp.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShadowWisp + + +

Back to Server.Mobiles

+

ShadowWisp : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ShadowWisp()
+ (ctor) ShadowWisp( Serial serial )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowWispFamiliar.html b/Docs/types/ShadowWispFamiliar.html new file mode 100644 index 0000000..0a4c227 --- /dev/null +++ b/Docs/types/ShadowWispFamiliar.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ShadowWispFamiliar + + +

Back to Server.Mobiles

+

ShadowWispFamiliar : BaseFamiliar, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ShadowWispFamiliar()
+ (ctor) ShadowWispFamiliar( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ void Flare()
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShadowWyrm.html b/Docs/types/ShadowWyrm.html new file mode 100644 index 0000000..3a7aaf2 --- /dev/null +++ b/Docs/types/ShadowWyrm.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - ShadowWyrm + + +

Back to Server.Mobiles

+

ShadowWyrm : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ShadowWyrm()
+ (ctor) ShadowWyrm( Serial serial )
+ bool AutoDispel( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ bool ReacquireOnMovement( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Shadowjump.html b/Docs/types/Shadowjump.html new file mode 100644 index 0000000..1f976b0 --- /dev/null +++ b/Docs/types/Shadowjump.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Shadowjump + + +

Back to Server.Spells.Ninjitsu

+

Shadowjump : NinjaSpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) Shadowjump( Mobile caster, Item scroll )
+ bool BlockedByAnimalForm( get; )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual bool CheckDisturb( DisturbType type, bool firstCircle, bool resistable )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/Shadowlords.html b/Docs/types/Shadowlords.html new file mode 100644 index 0000000..cd08a59 --- /dev/null +++ b/Docs/types/Shadowlords.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - Shadowlords + + +

Back to Server.Factions

+

Shadowlords : Faction, IComparable

+ (static) Faction Instance( get; )
+ (ctor) Shadowlords()
+ + diff --git a/Docs/types/Shaft.html b/Docs/types/Shaft.html new file mode 100644 index 0000000..8b907c4 --- /dev/null +++ b/Docs/types/Shaft.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Shaft + + +

Back to Server.Items

+

Shaft : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) Shaft()
+ (ctor) Shaft( int amount )
+ (ctor) Shaft( Serial serial )
+ double DefaultWeight( get; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShaminoCrossbow.html b/Docs/types/ShaminoCrossbow.html new file mode 100644 index 0000000..d64c2b1 --- /dev/null +++ b/Docs/types/ShaminoCrossbow.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ShaminoCrossbow + + +

Back to Server.Items

+

ShaminoCrossbow : RepeatingCrossbow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ShaminoCrossbow()
+ (ctor) ShaminoCrossbow( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShardPollGump.html b/Docs/types/ShardPollGump.html new file mode 100644 index 0000000..aa8a339 --- /dev/null +++ b/Docs/types/ShardPollGump.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ShardPollGump + + +

Back to Server.Misc

+

ShardPollGump : Gump

+ (ctor) ShardPollGump( Mobile from, ShardPoller poller, bool editing, Queue<ShardPoller> polls )
+ bool Editing( get; )
+ string Center( string text )
+ string Color( string text, int color )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void QueuePoll( ShardPoller poller )
+ + diff --git a/Docs/types/ShardPollOption.html b/Docs/types/ShardPollOption.html new file mode 100644 index 0000000..f0daf63 --- /dev/null +++ b/Docs/types/ShardPollOption.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ShardPollOption + + +

Back to Server.Misc

+

ShardPollOption

+ (ctor) ShardPollOption( GenericReader reader )
+ (ctor) ShardPollOption( string title )
+ int LineBreaks( get; )
+ string Title( get; set; )
+ IPAddress[] Voters( get; set; )
+ int Votes( get; )
+ void AddVote( NetState ns )
+ int ComputeHeight()
+ int GetBreaks( string title )
+ bool HasAlreadyVoted( NetState ns )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShardPollPrompt.html b/Docs/types/ShardPollPrompt.html new file mode 100644 index 0000000..1a0f677 --- /dev/null +++ b/Docs/types/ShardPollPrompt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShardPollPrompt + + +

Back to Server.Misc

+

ShardPollPrompt : Prompt

+ (static) string UrlRegex_Match( Match m )
+ (static) string UrlToHref( string text )
+ (ctor) ShardPollPrompt( ShardPoller poller, ShardPollOption opt )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/ShardPoller.html b/Docs/types/ShardPoller.html new file mode 100644 index 0000000..f4a8f21 --- /dev/null +++ b/Docs/types/ShardPoller.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - ShardPoller + + +

Back to Server.Misc

+

ShardPoller : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) void EventSink_Login( LoginEventArgs e )
+ (static) void EventSink_Login_Callback( object state )
+ (static) void Initialize()
+ (ctor) ShardPoller()
+ (ctor) ShardPoller( Serial serial )
+ bool Active( get; set; )
+ IPAddress[] Addresses( get; set; )
+ string DefaultName( get; )
+ TimeSpan Duration( get; set; )
+ ShardPollOption[] Options( get; set; )
+ DateTime StartTime( get; set; )
+ TimeSpan TimeRemaining( get; )
+ string Title( get; set; )
+ void AddOption( ShardPollOption option )
+ void AddVote( NetState ns, ShardPollOption option )
+ virtual void Deserialize( GenericReader reader )
+ bool HasAlreadyVoted( NetState ns )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ void RemoveOption( ShardPollOption option )
+ void SendQueuedPoll_Callback( object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShardThrasher.html b/Docs/types/ShardThrasher.html new file mode 100644 index 0000000..e603bd4 --- /dev/null +++ b/Docs/types/ShardThrasher.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShardThrasher + + +

Back to Server.Items

+

ShardThrasher : DiamondMace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ShardThrasher()
+ (ctor) ShardThrasher( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SharedAccountComparer.html b/Docs/types/SharedAccountComparer.html new file mode 100644 index 0000000..409496f --- /dev/null +++ b/Docs/types/SharedAccountComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SharedAccountComparer + + +

Back to Server.Gumps

+

(AdminGump) - SharedAccountComparer : IComparer

+ (ctor) SharedAccountComparer()
+ virtual int Compare( object x, object y )
+ + diff --git a/Docs/types/SheafOfHay.html b/Docs/types/SheafOfHay.html new file mode 100644 index 0000000..2860e52 --- /dev/null +++ b/Docs/types/SheafOfHay.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SheafOfHay + + +

Back to Server.Items

+

SheafOfHay : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SheafOfHay()
+ (ctor) SheafOfHay( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Sheep.html b/Docs/types/Sheep.html new file mode 100644 index 0000000..bda3fb9 --- /dev/null +++ b/Docs/types/Sheep.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Sheep + + +

Back to Server.Mobiles

+

Sheep : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, ICarvable

+ (ctor) Sheep()
+ (ctor) Sheep( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ MeatType MeatType( get; )
+ DateTime NextWoolTime( get; set; )
+ int Wool( get; )
+ virtual void Carve( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SheetMusicOfferGump.html b/Docs/types/SheetMusicOfferGump.html new file mode 100644 index 0000000..fee908e --- /dev/null +++ b/Docs/types/SheetMusicOfferGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SheetMusicOfferGump + + +

Back to Server.Engines.Quests.Collector

+

SheetMusicOfferGump : BaseQuestGump

+ (ctor) SheetMusicOfferGump()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ShepherdsCrook.html b/Docs/types/ShepherdsCrook.html new file mode 100644 index 0000000..76e5aee --- /dev/null +++ b/Docs/types/ShepherdsCrook.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - ShepherdsCrook + + +

Back to Server.Items

+

ShepherdsCrook : BaseStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Nested Types: HerdingTarget

+ (ctor) ShepherdsCrook()
+ (ctor) ShepherdsCrook( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SheriffGump.html b/Docs/types/SheriffGump.html new file mode 100644 index 0000000..7c0a5be --- /dev/null +++ b/Docs/types/SheriffGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SheriffGump + + +

Back to Server.Factions

+

SheriffGump : FactionGump

+ (ctor) SheriffGump( PlayerMobile from, Faction faction, Town town )
+ void CenterItem( int itemID, int x, int y, int w, int h )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ShieldOfInvulnerability.html b/Docs/types/ShieldOfInvulnerability.html new file mode 100644 index 0000000..c9751a1 --- /dev/null +++ b/Docs/types/ShieldOfInvulnerability.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - ShieldOfInvulnerability + + +

Back to Server.Items

+

ShieldOfInvulnerability : OrderShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ShieldOfInvulnerability()
+ (ctor) ShieldOfInvulnerability( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool Validate( Mobile m )
+ + diff --git a/Docs/types/ShipModelOfTheHMSCape.html b/Docs/types/ShipModelOfTheHMSCape.html new file mode 100644 index 0000000..402037e --- /dev/null +++ b/Docs/types/ShipModelOfTheHMSCape.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShipModelOfTheHMSCape + + +

Back to Server.Items

+

ShipModelOfTheHMSCape : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ShipModelOfTheHMSCape()
+ (ctor) ShipModelOfTheHMSCape( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShipwreckedItem.html b/Docs/types/ShipwreckedItem.html new file mode 100644 index 0000000..c24f3ef --- /dev/null +++ b/Docs/types/ShipwreckedItem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - ShipwreckedItem + + +

Back to Server.Items

+

ShipwreckedItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IShipwreckedItem

+ (ctor) ShipwreckedItem( int itemID )
+ (ctor) ShipwreckedItem( Serial serial )
+ bool IsShipwreckedItem( get; set; )
+ virtual void AddNameProperties( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Shipwright.html b/Docs/types/Shipwright.html new file mode 100644 index 0000000..adbe25b --- /dev/null +++ b/Docs/types/Shipwright.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Shipwright + + +

Back to Server.Mobiles

+

Shipwright : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Shipwright()
+ (ctor) Shipwright( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Shirt.html b/Docs/types/Shirt.html new file mode 100644 index 0000000..037a25f --- /dev/null +++ b/Docs/types/Shirt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Shirt + + +

Back to Server.Items

+

Shirt : BaseShirt, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Shirt()
+ (ctor) Shirt( int hue )
+ (ctor) Shirt( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Shoes.html b/Docs/types/Shoes.html new file mode 100644 index 0000000..6c6283f --- /dev/null +++ b/Docs/types/Shoes.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Shoes + + +

Back to Server.Items

+

Shoes : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Shoes()
+ (ctor) Shoes( int hue )
+ (ctor) Shoes( Serial serial )
+ CraftResource DefaultResource( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShojiLantern.html b/Docs/types/ShojiLantern.html new file mode 100644 index 0000000..194f157 --- /dev/null +++ b/Docs/types/ShojiLantern.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ShojiLantern + + +

Back to Server.Items

+

ShojiLantern : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ShojiLantern()
+ (ctor) ShojiLantern( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShojiScreen.html b/Docs/types/ShojiScreen.html new file mode 100644 index 0000000..3d39684 --- /dev/null +++ b/Docs/types/ShojiScreen.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ShojiScreen + + +

Back to Server.Items

+

ShojiScreen : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ShojiScreen()
+ (ctor) ShojiScreen( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShopFlags.html b/Docs/types/ShopFlags.html new file mode 100644 index 0000000..76c783d --- /dev/null +++ b/Docs/types/ShopFlags.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ShopFlags + + +

Back to Server

+

ShopFlags (Enum)

+ None = 0x00000000,
+ Armor = 0x00000001,
+ MetalWeapon = 0x00000002,
+ Jewel = 0x00000004,
+ Reagent = 0x00000008,
+ Potion = 0x00000010,
+ Bread = 0x00000020,
+ Clothes = 0x00000040,
+ ArcheryWeapon = 0x00000080,
+ Scroll = 0x00000100,
+ Spellbook = 0x00000200
+ + diff --git a/Docs/types/ShopInfo.html b/Docs/types/ShopInfo.html new file mode 100644 index 0000000..1e76a4f --- /dev/null +++ b/Docs/types/ShopInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ShopInfo + + +

Back to Server

+

(VendorGenerator) - ShopInfo

+ (ctor) ShopInfo()
+ + diff --git a/Docs/types/ShopNamePrompt.html b/Docs/types/ShopNamePrompt.html new file mode 100644 index 0000000..2c5d481 --- /dev/null +++ b/Docs/types/ShopNamePrompt.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ShopNamePrompt + + +

Back to Server.Mobiles

+

(PlayerVendor) - ShopNamePrompt : Prompt

+ (ctor) ShopNamePrompt( PlayerVendor vendor )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/ShortBeard.html b/Docs/types/ShortBeard.html new file mode 100644 index 0000000..1eb449d --- /dev/null +++ b/Docs/types/ShortBeard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShortBeard + + +

Back to Server.Items

+

ShortBeard : Beard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ShortBeard()
+ (ctor) ShortBeard( int hue )
+ (ctor) ShortBeard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShortCabinet.html b/Docs/types/ShortCabinet.html new file mode 100644 index 0000000..bb04e7d --- /dev/null +++ b/Docs/types/ShortCabinet.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ShortCabinet + + +

Back to Server.Items

+

ShortCabinet : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ShortCabinet()
+ (ctor) ShortCabinet( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShortHair.html b/Docs/types/ShortHair.html new file mode 100644 index 0000000..a3d9d5e --- /dev/null +++ b/Docs/types/ShortHair.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShortHair + + +

Back to Server.Items

+

ShortHair : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ShortHair()
+ (ctor) ShortHair( int hue )
+ (ctor) ShortHair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShortMusicStand.html b/Docs/types/ShortMusicStand.html new file mode 100644 index 0000000..c55e0fb --- /dev/null +++ b/Docs/types/ShortMusicStand.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ShortMusicStand + + +

Back to Server.Items

+

ShortMusicStand : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ShortMusicStand()
+ (ctor) ShortMusicStand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShortPants.html b/Docs/types/ShortPants.html new file mode 100644 index 0000000..300e79a --- /dev/null +++ b/Docs/types/ShortPants.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShortPants + + +

Back to Server.Items

+

ShortPants : BasePants, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ShortPants()
+ (ctor) ShortPants( int hue )
+ (ctor) ShortPants( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShortSpear.html b/Docs/types/ShortSpear.html new file mode 100644 index 0000000..fab299b --- /dev/null +++ b/Docs/types/ShortSpear.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - ShortSpear + + +

Back to Server.Items

+

ShortSpear : BaseSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: EnchantedTitanLegBone

+ (ctor) ShortSpear()
+ (ctor) ShortSpear( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Shovel.html b/Docs/types/Shovel.html new file mode 100644 index 0000000..8f58e8b --- /dev/null +++ b/Docs/types/Shovel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Shovel + + +

Back to Server.Items

+

Shovel : BaseHarvestTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Shovel()
+ (ctor) Shovel( int uses )
+ (ctor) Shovel( Serial serial )
+ HarvestSystem HarvestSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShowStew.html b/Docs/types/ShowStew.html new file mode 100644 index 0000000..f0c0fdb --- /dev/null +++ b/Docs/types/ShowStew.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ShowStew + + +

Back to Server.Items

+

(HagStew) - ShowStew : Timer

+ (ctor) ShowStew( AddonComponent ac )
+ virtual void OnTick()
+ + diff --git a/Docs/types/ShrineOfWisdomAddon.html b/Docs/types/ShrineOfWisdomAddon.html new file mode 100644 index 0000000..2c5499c --- /dev/null +++ b/Docs/types/ShrineOfWisdomAddon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ShrineOfWisdomAddon + + +

Back to Server.Items

+

ShrineOfWisdomAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) ShrineOfWisdomAddon()
+ (ctor) ShrineOfWisdomAddon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShrineOfWisdomComponent.html b/Docs/types/ShrineOfWisdomComponent.html new file mode 100644 index 0000000..ea48596 --- /dev/null +++ b/Docs/types/ShrineOfWisdomComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ShrineOfWisdomComponent + + +

Back to Server.Items

+

ShrineOfWisdomComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) ShrineOfWisdomComponent( int itemID )
+ (ctor) ShrineOfWisdomComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShrinkTable.html b/Docs/types/ShrinkTable.html new file mode 100644 index 0000000..424ca35 --- /dev/null +++ b/Docs/types/ShrinkTable.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ShrinkTable + + +

Back to Server

+

ShrinkTable

+ (static) void Load()
+ (static) int Lookup( Mobile m )
+ (static) int Lookup( int body )
+ (static) int Lookup( int body, int defaultValue )
+ (static) int Lookup( Mobile m, int defaultValue )
+ (ctor) ShrinkTable()
+ + diff --git a/Docs/types/ShroudOfDeciet.html b/Docs/types/ShroudOfDeciet.html new file mode 100644 index 0000000..9b58dbf --- /dev/null +++ b/Docs/types/ShroudOfDeciet.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - ShroudOfDeciet + + +

Back to Server.Items

+

ShroudOfDeciet : BoneChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) ShroudOfDeciet()
+ (ctor) ShroudOfDeciet( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Shuriken.html b/Docs/types/Shuriken.html new file mode 100644 index 0000000..aade698 --- /dev/null +++ b/Docs/types/Shuriken.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Shuriken + + +

Back to Server.Items

+

Shuriken : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, INinjaAmmo, IUsesRemaining

+ (ctor) Shuriken()
+ (ctor) Shuriken( Serial serial )
+ (ctor) Shuriken( int amount )
+ Poison Poison( get; set; )
+ int PoisonCharges( get; set; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ShutdownEventArgs.html b/Docs/types/ShutdownEventArgs.html new file mode 100644 index 0000000..e0809dc --- /dev/null +++ b/Docs/types/ShutdownEventArgs.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ShutdownEventArgs + + +

Back to Server

+

ShutdownEventArgs : EventArgs

+ (ctor) ShutdownEventArgs()
+ + diff --git a/Docs/types/ShutdownEventHandler.html b/Docs/types/ShutdownEventHandler.html new file mode 100644 index 0000000..00208a7 --- /dev/null +++ b/Docs/types/ShutdownEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ShutdownEventHandler + + +

Back to Server

+

ShutdownEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ShutdownEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ShutdownEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ShutdownEventArgs e )
+ + diff --git a/Docs/types/Sigil.html b/Docs/types/Sigil.html new file mode 100644 index 0000000..51b7a61 --- /dev/null +++ b/Docs/types/Sigil.html @@ -0,0 +1,43 @@ + + + RunUO Documentation - Class Overview - Sigil + + +

Back to Server.Factions

+

Sigil : BaseSystemController, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) List<Sigil> Sigils( get; )
+ (static) bool ExistsOn( Mobile mob )
+ (ctor) Sigil( Serial serial )
+ (ctor) Sigil( Town town )
+ Faction Corrupted( get; set; )
+ Faction Corrupting( get; set; )
+ DateTime CorruptionStart( get; set; )
+ DateTime GraceStart( get; set; )
+ bool IsBeingCorrupted( get; )
+ bool IsCorrupted( get; )
+ bool IsCorrupting( get; )
+ bool IsPurifying( get; )
+ BaseMonolith LastMonolith( get; set; )
+ DateTime LastStolen( get; set; )
+ DateTime PurificationStart( get; set; )
+ TimeSpan TimeUntilCorruption( get; )
+ Town Town( get; set; )
+ void BeginCorrupting( Faction faction )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ void ClearCorrupting()
+ virtual void Delete()
+ virtual void Deserialize( GenericReader reader )
+ Mobile FindOwner( object parent )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnParentDeleted( object parent )
+ virtual void OnRemoved( object parent )
+ virtual void OnSingleClick( Mobile from )
+ bool ReturnHome()
+ virtual void Serialize( GenericWriter writer )
+ void Sigil_OnTarget( Mobile from, object obj )
+ void Update()
+ + diff --git a/Docs/types/Sign.html b/Docs/types/Sign.html new file mode 100644 index 0000000..85d4e93 --- /dev/null +++ b/Docs/types/Sign.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Sign + + +

Back to Server.Items

+

Sign : BaseSign, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: LocalizedSign

+ (ctor) Sign( int itemID )
+ (ctor) Sign( Serial serial )
+ (ctor) Sign( SignType type, SignFacing facing )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SignEntry.html b/Docs/types/SignEntry.html new file mode 100644 index 0000000..4d8366c --- /dev/null +++ b/Docs/types/SignEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SignEntry + + +

Back to Server.Commands

+

(SignParser) - SignEntry

+ (ctor) SignEntry( string text, Point3D pt, int itemID, int mapLoc )
+ + diff --git a/Docs/types/SignFacing.html b/Docs/types/SignFacing.html new file mode 100644 index 0000000..70d6ab4 --- /dev/null +++ b/Docs/types/SignFacing.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SignFacing + + +

Back to Server.Items

+

SignFacing (Enum)

+ North = 0,
+ West = 1
+ + diff --git a/Docs/types/SignParser.html b/Docs/types/SignParser.html new file mode 100644 index 0000000..b0a0ef8 --- /dev/null +++ b/Docs/types/SignParser.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SignParser + + +

Back to Server.Commands

+

SignParser

+

Nested Types: SignEntry

+ (static) void Add_Static( int itemID, Point3D location, Map map, string name )
+ (static) void Initialize()
+ (static) void Parse( Mobile from )
+ (static) void SignGen_OnCommand( CommandEventArgs c )
+ (ctor) SignParser()
+ + diff --git a/Docs/types/SignType.html b/Docs/types/SignType.html new file mode 100644 index 0000000..d173872 --- /dev/null +++ b/Docs/types/SignType.html @@ -0,0 +1,70 @@ + + + RunUO Documentation - Class Overview - SignType + + +

Back to Server.Items

+

SignType (Enum)

+ Library = 0,
+ DarkWoodenPost = 1,
+ LightWoodenPost = 2,
+ MetalPostC = 3,
+ MetalPostB = 4,
+ MetalPostA = 5,
+ MetalPost = 6,
+ Bakery = 7,
+ Tailor = 8,
+ Tinker = 9,
+ Butcher = 10,
+ Healer = 11,
+ Mage = 12,
+ Woodworker = 13,
+ Customs = 14,
+ Inn = 15,
+ Shipwright = 16,
+ Stables = 17,
+ BarberShop = 18,
+ Bard = 19,
+ Fletcher = 20,
+ Armourer = 21,
+ Jeweler = 22,
+ Tavern = 23,
+ ReagentShop = 24,
+ Blacksmith = 25,
+ Painter = 26,
+ Provisioner = 27,
+ Bowyer = 28,
+ WoodenSign = 29,
+ BrassSign = 30,
+ ArmamentsGuild = 31,
+ ArmourersGuild = 32,
+ BlacksmithsGuild = 33,
+ WeaponsGuild = 34,
+ BardicGuild = 35,
+ BartersGuild = 36,
+ ProvisionersGuild = 37,
+ TradersGuild = 38,
+ CooksGuild = 39,
+ HealersGuild = 40,
+ MagesGuild = 41,
+ SorcerersGuild = 42,
+ IllusionistGuild = 43,
+ MinersGuild = 44,
+ ArchersGuild = 45,
+ SeamensGuild = 46,
+ FishermensGuild = 47,
+ SailorsGuild = 48,
+ ShipwrightsGuild = 49,
+ TailorsGuild = 50,
+ ThievesGuild = 51,
+ RoguesGuild = 52,
+ AssassinsGuild = 53,
+ TinkersGuild = 54,
+ WarriorsGuild = 55,
+ CavalryGuild = 56,
+ FightersGuild = 57,
+ MerchantsGuild = 58,
+ Bank = 59,
+ Theatre = 60
+ + diff --git a/Docs/types/Silvani.html b/Docs/types/Silvani.html new file mode 100644 index 0000000..c920b96 --- /dev/null +++ b/Docs/types/Silvani.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Silvani + + +

Back to Server.Mobiles

+

Silvani : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Silvani()
+ (ctor) Silvani( Serial serial )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ bool Unprovokable( get; )
+ virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ void SpawnPixies( Mobile target )
+ + diff --git a/Docs/types/SilvanisFeywoodBow.html b/Docs/types/SilvanisFeywoodBow.html new file mode 100644 index 0000000..dc1a4f2 --- /dev/null +++ b/Docs/types/SilvanisFeywoodBow.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SilvanisFeywoodBow + + +

Back to Server.Items

+

SilvanisFeywoodBow : ElvenCompositeLongbow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) SilvanisFeywoodBow()
+ (ctor) SilvanisFeywoodBow( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Silver.html b/Docs/types/Silver.html new file mode 100644 index 0000000..6aaefc1 --- /dev/null +++ b/Docs/types/Silver.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Silver + + +

Back to Server.Factions

+

Silver : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Silver()
+ (ctor) Silver( int amount )
+ (ctor) Silver( Serial serial )
+ (ctor) Silver( int amountFrom, int amountTo )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetDropSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SilverBeadNecklace.html b/Docs/types/SilverBeadNecklace.html new file mode 100644 index 0000000..34f1b21 --- /dev/null +++ b/Docs/types/SilverBeadNecklace.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SilverBeadNecklace + + +

Back to Server.Items

+

SilverBeadNecklace : BaseNecklace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) SilverBeadNecklace()
+ (ctor) SilverBeadNecklace( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SilverBracelet.html b/Docs/types/SilverBracelet.html new file mode 100644 index 0000000..1f040da --- /dev/null +++ b/Docs/types/SilverBracelet.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SilverBracelet + + +

Back to Server.Items

+

SilverBracelet : BaseBracelet, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) SilverBracelet()
+ (ctor) SilverBracelet( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SilverEarrings.html b/Docs/types/SilverEarrings.html new file mode 100644 index 0000000..e487556 --- /dev/null +++ b/Docs/types/SilverEarrings.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SilverEarrings + + +

Back to Server.Items

+

SilverEarrings : BaseEarrings, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) SilverEarrings()
+ (ctor) SilverEarrings( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SilverGivenEntry.html b/Docs/types/SilverGivenEntry.html new file mode 100644 index 0000000..5178355 --- /dev/null +++ b/Docs/types/SilverGivenEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SilverGivenEntry + + +

Back to Server.Factions

+

SilverGivenEntry

+ (ctor) SilverGivenEntry( Mobile givenTo )
+ Mobile GivenTo( get; )
+ bool IsExpired( get; )
+ DateTime TimeOfGift( get; )
+ + diff --git a/Docs/types/SilverNecklace.html b/Docs/types/SilverNecklace.html new file mode 100644 index 0000000..6be83af --- /dev/null +++ b/Docs/types/SilverNecklace.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SilverNecklace + + +

Back to Server.Items

+

SilverNecklace : BaseNecklace, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) SilverNecklace()
+ (ctor) SilverNecklace( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SilverRing.html b/Docs/types/SilverRing.html new file mode 100644 index 0000000..1de614c --- /dev/null +++ b/Docs/types/SilverRing.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SilverRing + + +

Back to Server.Items

+

SilverRing : BaseRing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Derived Types: DjinnisRing

+ (ctor) SilverRing()
+ (ctor) SilverRing( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SilverSerpent.html b/Docs/types/SilverSerpent.html new file mode 100644 index 0000000..56a9319 --- /dev/null +++ b/Docs/types/SilverSerpent.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SilverSerpent + + +

Back to Server.Mobiles

+

SilverSerpent : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SilverSerpent()
+ (ctor) SilverSerpent( Serial serial )
+ bool DeathAdderCharmable( get; )
+ Ethic EthicAllegiance( get; )
+ Faction FactionAllegiance( get; )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SilverSteed.html b/Docs/types/SilverSteed.html new file mode 100644 index 0000000..3f7e78e --- /dev/null +++ b/Docs/types/SilverSteed.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SilverSteed + + +

Back to Server.Mobiles

+

SilverSteed : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) SilverSteed()
+ (ctor) SilverSteed( string name )
+ (ctor) SilverSteed( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SilverWire.html b/Docs/types/SilverWire.html new file mode 100644 index 0000000..9f6d2e7 --- /dev/null +++ b/Docs/types/SilverWire.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SilverWire + + +

Back to Server.Items

+

SilverWire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SilverWire()
+ (ctor) SilverWire( int amount )
+ (ctor) SilverWire( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SimplePrompt.html b/Docs/types/SimplePrompt.html new file mode 100644 index 0000000..b8e7e78 --- /dev/null +++ b/Docs/types/SimplePrompt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SimplePrompt + + +

Back to Server

+

(Mobile) - SimplePrompt : Prompt

+ (ctor) SimplePrompt( PromptCallback callback )
+ (ctor) SimplePrompt( PromptCallback callback, bool callbackHandlesCancel )
+ (ctor) SimplePrompt( PromptCallback callback, PromptCallback cancelCallback )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/SimpleStatePrompt-T-.html b/Docs/types/SimpleStatePrompt-T-.html new file mode 100644 index 0000000..420fb34 --- /dev/null +++ b/Docs/types/SimpleStatePrompt-T-.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SimpleStatePrompt<T> + + +

Back to Server

+

(Mobile) - SimpleStatePrompt<T> : Prompt

+ (ctor) SimpleStatePrompt<T>( PromptStateCallback<T> callback, T state )
+ (ctor) SimpleStatePrompt<T>( PromptStateCallback<T> callback, bool callbackHandlesCancel, T state )
+ (ctor) SimpleStatePrompt<T>( PromptStateCallback<T> callback, PromptStateCallback<T> cancelCallback, T state )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/SimpleStatePrompt.html b/Docs/types/SimpleStatePrompt.html new file mode 100644 index 0000000..6b88ad8 --- /dev/null +++ b/Docs/types/SimpleStatePrompt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SimpleStatePrompt + + +

Back to Server

+

(Mobile) - SimpleStatePrompt : Prompt

+ (ctor) SimpleStatePrompt( PromptStateCallback callback, object state )
+ (ctor) SimpleStatePrompt( PromptStateCallback callback, bool callbackHandlesCancel, object state )
+ (ctor) SimpleStatePrompt( PromptStateCallback callback, PromptStateCallback cancelCallback, object state )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/SimpleStateTarget-T-.html b/Docs/types/SimpleStateTarget-T-.html new file mode 100644 index 0000000..21e52e4 --- /dev/null +++ b/Docs/types/SimpleStateTarget-T-.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SimpleStateTarget<T> + + +

Back to Server

+

(Mobile) - SimpleStateTarget<T> : Target

+ (ctor) SimpleStateTarget<T>( int range, TargetFlags flags, bool allowGround, TargetStateCallback<T> callback, T state )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/SimpleStateTarget.html b/Docs/types/SimpleStateTarget.html new file mode 100644 index 0000000..4112437 --- /dev/null +++ b/Docs/types/SimpleStateTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SimpleStateTarget + + +

Back to Server

+

(Mobile) - SimpleStateTarget : Target

+ (ctor) SimpleStateTarget( int range, TargetFlags flags, bool allowGround, TargetStateCallback callback, object state )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/SimpleTarget.html b/Docs/types/SimpleTarget.html new file mode 100644 index 0000000..036f618 --- /dev/null +++ b/Docs/types/SimpleTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SimpleTarget + + +

Back to Server

+

(Mobile) - SimpleTarget : Target

+ (ctor) SimpleTarget( int range, TargetFlags flags, bool allowGround, TargetCallback callback )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/SingleCommandImplementor.html b/Docs/types/SingleCommandImplementor.html new file mode 100644 index 0000000..97a81fc --- /dev/null +++ b/Docs/types/SingleCommandImplementor.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SingleCommandImplementor + + +

Back to Server.Commands.Generic

+

SingleCommandImplementor : BaseCommandImplementor

+ (ctor) SingleCommandImplementor()
+ void OnTarget( Mobile from, object targeted, object state )
+ virtual void Process( Mobile from, BaseCommand command, string[] args )
+ void Redirect( CommandEventArgs e )
+ virtual void Register( BaseCommand command )
+ + diff --git a/Docs/types/SitOnTheStoolObjective.html b/Docs/types/SitOnTheStoolObjective.html new file mode 100644 index 0000000..97d7999 --- /dev/null +++ b/Docs/types/SitOnTheStoolObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SitOnTheStoolObjective + + +

Back to Server.Engines.Quests.Collector

+

SitOnTheStoolObjective : QuestObjective

+ (ctor) SitOnTheStoolObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/SixthTrialIntroConversation.html b/Docs/types/SixthTrialIntroConversation.html new file mode 100644 index 0000000..a14e2cc --- /dev/null +++ b/Docs/types/SixthTrialIntroConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SixthTrialIntroConversation + + +

Back to Server.Engines.Quests.Samurai

+

SixthTrialIntroConversation : QuestConversation

+ (ctor) SixthTrialIntroConversation()
+ (ctor) SixthTrialIntroConversation( bool stolenTreasure )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SixthTrialIntroObjective.html b/Docs/types/SixthTrialIntroObjective.html new file mode 100644 index 0000000..014b67b --- /dev/null +++ b/Docs/types/SixthTrialIntroObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SixthTrialIntroObjective + + +

Back to Server.Engines.Quests.Samurai

+

SixthTrialIntroObjective : QuestObjective

+ (ctor) SixthTrialIntroObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/SixthTrialReturnObjective.html b/Docs/types/SixthTrialReturnObjective.html new file mode 100644 index 0000000..3a96fb1 --- /dev/null +++ b/Docs/types/SixthTrialReturnObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SixthTrialReturnObjective + + +

Back to Server.Engines.Quests.Samurai

+

SixthTrialReturnObjective : QuestObjective

+ (ctor) SixthTrialReturnObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/SkaraBrae.html b/Docs/types/SkaraBrae.html new file mode 100644 index 0000000..fd98949 --- /dev/null +++ b/Docs/types/SkaraBrae.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SkaraBrae + + +

Back to Server.Factions

+

SkaraBrae : Town, IComparable

+ (ctor) SkaraBrae()
+ + diff --git a/Docs/types/SkeletalDragon.html b/Docs/types/SkeletalDragon.html new file mode 100644 index 0000000..336a035 --- /dev/null +++ b/Docs/types/SkeletalDragon.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - SkeletalDragon + + +

Back to Server.Mobiles

+

SkeletalDragon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SkeletalDragon()
+ (ctor) SkeletalDragon( Serial serial )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ double BonusPetDamageScalar( get; )
+ int BreathColdDamage( get; )
+ int BreathEffectHue( get; )
+ int BreathFireDamage( get; )
+ bool HasBreath( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ bool ReacquireOnMovement( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkeletalKnight.html b/Docs/types/SkeletalKnight.html new file mode 100644 index 0000000..9035048 --- /dev/null +++ b/Docs/types/SkeletalKnight.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SkeletalKnight + + +

Back to Server.Mobiles

+

SkeletalKnight : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SkeletalKnight()
+ (ctor) SkeletalKnight( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkeletalMage.html b/Docs/types/SkeletalMage.html new file mode 100644 index 0000000..a9889fa --- /dev/null +++ b/Docs/types/SkeletalMage.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SkeletalMage + + +

Back to Server.Mobiles

+

SkeletalMage : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SkeletalMage()
+ (ctor) SkeletalMage( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkeletalMount.html b/Docs/types/SkeletalMount.html new file mode 100644 index 0000000..f94345c --- /dev/null +++ b/Docs/types/SkeletalMount.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SkeletalMount + + +

Back to Server.Mobiles

+

SkeletalMount : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+

Derived Types: GrizzledMare

+ (ctor) SkeletalMount()
+ (ctor) SkeletalMount( string name )
+ (ctor) SkeletalMount( Serial serial )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Skeleton.html b/Docs/types/Skeleton.html new file mode 100644 index 0000000..1ed3e39 --- /dev/null +++ b/Docs/types/Skeleton.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Skeleton + + +

Back to Server.Mobiles

+

Skeleton : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Skeleton()
+ (ctor) Skeleton( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Skill.html b/Docs/types/Skill.html new file mode 100644 index 0000000..751afc0 --- /dev/null +++ b/Docs/types/Skill.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Skill + + +

Back to Server

+

Skill

+ (static) bool UseStatMods( get; set; )
+ (ctor) Skill( Skills owner, SkillInfo info, GenericReader reader )
+ (ctor) Skill( Skills owner, SkillInfo info, int baseValue, int cap, SkillLock skillLock )
+ double Base( get; set; )
+ int BaseFixedPoint( get; set; )
+ double Cap( get; set; )
+ int CapFixedPoint( get; set; )
+ int Fixed( get; )
+ SkillInfo Info( get; )
+ SkillLock Lock( get; )
+ string Name( get; )
+ double NonRacialValue( get; )
+ Skills Owner( get; )
+ int SkillID( get; )
+ SkillName SkillName( get; )
+ double Value( get; )
+ void Serialize( GenericWriter writer )
+ void SetLockNoRelay( SkillLock skillLock )
+ virtual string ToString()
+ void Update()
+ + diff --git a/Docs/types/SkillChange.html b/Docs/types/SkillChange.html new file mode 100644 index 0000000..43bc6ef --- /dev/null +++ b/Docs/types/SkillChange.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SkillChange + + +

Back to Server.Network

+

SkillChange : Packet

+ (ctor) SkillChange( Skill skill )
+ + diff --git a/Docs/types/SkillCheck.html b/Docs/types/SkillCheck.html new file mode 100644 index 0000000..b865566 --- /dev/null +++ b/Docs/types/SkillCheck.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SkillCheck + + +

Back to Server.Misc

+

SkillCheck

+

Nested Types: Stat

+ (static) bool AllowGain( Mobile from, Skill skill, object obj )
+ (static) bool CanLower( Mobile from, Stat stat )
+ (static) bool CanRaise( Mobile from, Stat stat )
+ (static) bool CheckSkill( Mobile from, Skill skill, object amObj, double chance )
+ (static) void Gain( Mobile from, Skill skill )
+ (static) void GainStat( Mobile from, Stat stat )
+ (static) void IncreaseStat( Mobile from, Stat stat, bool atrophy )
+ (static) void Initialize()
+ (static) bool Mobile_SkillCheckDirectLocation( Mobile from, SkillName skillName, double chance )
+ (static) bool Mobile_SkillCheckDirectTarget( Mobile from, SkillName skillName, object target, double chance )
+ (static) bool Mobile_SkillCheckLocation( Mobile from, SkillName skillName, double minSkill, double maxSkill )
+ (static) bool Mobile_SkillCheckTarget( Mobile from, SkillName skillName, object target, double minSkill, double maxSkill )
+ (ctor) SkillCheck()
+ + diff --git a/Docs/types/SkillCheckDirectLocationHandler.html b/Docs/types/SkillCheckDirectLocationHandler.html new file mode 100644 index 0000000..954245a --- /dev/null +++ b/Docs/types/SkillCheckDirectLocationHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SkillCheckDirectLocationHandler + + +

Back to Server

+

SkillCheckDirectLocationHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SkillCheckDirectLocationHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, SkillName skill, double chance, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Mobile from, SkillName skill, double chance )
+ + diff --git a/Docs/types/SkillCheckDirectTargetHandler.html b/Docs/types/SkillCheckDirectTargetHandler.html new file mode 100644 index 0000000..6227f89 --- /dev/null +++ b/Docs/types/SkillCheckDirectTargetHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SkillCheckDirectTargetHandler + + +

Back to Server

+

SkillCheckDirectTargetHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SkillCheckDirectTargetHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, SkillName skill, object target, double chance, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Mobile from, SkillName skill, object target, double chance )
+ + diff --git a/Docs/types/SkillCheckLocationHandler.html b/Docs/types/SkillCheckLocationHandler.html new file mode 100644 index 0000000..bbec94e --- /dev/null +++ b/Docs/types/SkillCheckLocationHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SkillCheckLocationHandler + + +

Back to Server

+

SkillCheckLocationHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SkillCheckLocationHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, SkillName skill, double minSkill, double maxSkill, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Mobile from, SkillName skill, double minSkill, double maxSkill )
+ + diff --git a/Docs/types/SkillCheckTargetHandler.html b/Docs/types/SkillCheckTargetHandler.html new file mode 100644 index 0000000..e64c09e --- /dev/null +++ b/Docs/types/SkillCheckTargetHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SkillCheckTargetHandler + + +

Back to Server

+

SkillCheckTargetHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SkillCheckTargetHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, SkillName skill, object target, double minSkill, double maxSkill, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Mobile from, SkillName skill, object target, double minSkill, double maxSkill )
+ + diff --git a/Docs/types/SkillDistribution.html b/Docs/types/SkillDistribution.html new file mode 100644 index 0000000..0736b56 --- /dev/null +++ b/Docs/types/SkillDistribution.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SkillDistribution + + +

Back to Server.Engines.Reports

+

(Reports) - SkillDistribution : IComparable

+ (ctor) SkillDistribution( SkillInfo skill )
+ virtual int CompareTo( object obj )
+ + diff --git a/Docs/types/SkillInfo.html b/Docs/types/SkillInfo.html new file mode 100644 index 0000000..2cf7a45 --- /dev/null +++ b/Docs/types/SkillInfo.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SkillInfo + + +

Back to Server

+

SkillInfo

+ (static) SkillInfo[] Table( get; set; )
+ (ctor) SkillInfo( int skillID, string name, double strScale, double dexScale, double intScale, string title, SkillUseCallback callback, double strGain, double dexGain, double intGain, double gainFactor )
+ SkillUseCallback Callback( get; set; )
+ double DexGain( get; set; )
+ double DexScale( get; set; )
+ double GainFactor( get; set; )
+ double IntGain( get; set; )
+ double IntScale( get; set; )
+ string Name( get; set; )
+ int SkillID( get; )
+ double StatTotal( get; set; )
+ double StrGain( get; set; )
+ double StrScale( get; set; )
+ string Title( get; set; )
+ + diff --git a/Docs/types/SkillLock.html b/Docs/types/SkillLock.html new file mode 100644 index 0000000..2991d78 --- /dev/null +++ b/Docs/types/SkillLock.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SkillLock + + +

Back to Server

+

SkillLock (Enum)

+ Up = 0,
+ Down = 1,
+ Locked = 2
+ + diff --git a/Docs/types/SkillLossContext.html b/Docs/types/SkillLossContext.html new file mode 100644 index 0000000..d1e415f --- /dev/null +++ b/Docs/types/SkillLossContext.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SkillLossContext + + +

Back to Server.Factions

+

(Faction) - SkillLossContext

+ (ctor) SkillLossContext()
+ + diff --git a/Docs/types/SkillMod.html b/Docs/types/SkillMod.html new file mode 100644 index 0000000..24d070c --- /dev/null +++ b/Docs/types/SkillMod.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - SkillMod + + +

Back to Server

+

SkillMod

+

Derived Types: DefaultSkillMod, EquipedSkillMod, TimedSkillMod

+ (ctor) SkillMod( SkillName skill, bool relative, double value )
+ bool Absolute( get; set; )
+ bool ObeyCap( get; set; )
+ Mobile Owner( get; set; )
+ bool Relative( get; set; )
+ SkillName Skill( get; set; )
+ double Value( get; set; )
+ virtual bool CheckCondition()
+ void Remove()
+ + diff --git a/Docs/types/SkillName.html b/Docs/types/SkillName.html new file mode 100644 index 0000000..a8203cf --- /dev/null +++ b/Docs/types/SkillName.html @@ -0,0 +1,67 @@ + + + RunUO Documentation - Class Overview - SkillName + + +

Back to Server

+

SkillName (Enum)

+ Alchemy = 0,
+ Anatomy = 1,
+ AnimalLore = 2,
+ ItemID = 3,
+ ArmsLore = 4,
+ Parry = 5,
+ Begging = 6,
+ Blacksmith = 7,
+ Fletching = 8,
+ Peacemaking = 9,
+ Camping = 10,
+ Carpentry = 11,
+ Cartography = 12,
+ Cooking = 13,
+ DetectHidden = 14,
+ Discordance = 15,
+ EvalInt = 16,
+ Healing = 17,
+ Fishing = 18,
+ Forensics = 19,
+ Herding = 20,
+ Hiding = 21,
+ Provocation = 22,
+ Inscribe = 23,
+ Lockpicking = 24,
+ Magery = 25,
+ MagicResist = 26,
+ Tactics = 27,
+ Snooping = 28,
+ Musicianship = 29,
+ Poisoning = 30,
+ Archery = 31,
+ SpiritSpeak = 32,
+ Stealing = 33,
+ Tailoring = 34,
+ AnimalTaming = 35,
+ TasteID = 36,
+ Tinkering = 37,
+ Tracking = 38,
+ Veterinary = 39,
+ Swords = 40,
+ Macing = 41,
+ Fencing = 42,
+ Wrestling = 43,
+ Lumberjacking = 44,
+ Mining = 45,
+ Meditation = 46,
+ Stealth = 47,
+ RemoveTrap = 48,
+ Necromancy = 49,
+ Focus = 50,
+ Chivalry = 51,
+ Bushido = 52,
+ Ninjitsu = 53,
+ Spellweaving = 54,
+ Mysticism = 55,
+ Imbuing = 56,
+ Throwing = 57
+ + diff --git a/Docs/types/SkillNameComparer.html b/Docs/types/SkillNameComparer.html new file mode 100644 index 0000000..bb80296 --- /dev/null +++ b/Docs/types/SkillNameComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SkillNameComparer + + +

Back to Server.Gumps

+

(SkillsGumpGroup) - SkillNameComparer : IComparer

+ (ctor) SkillNameComparer()
+ virtual int Compare( object x, object y )
+ + diff --git a/Docs/types/SkillNameValue.html b/Docs/types/SkillNameValue.html new file mode 100644 index 0000000..5a75fbf --- /dev/null +++ b/Docs/types/SkillNameValue.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SkillNameValue + + +

Back to Server

+

SkillNameValue

+ (ctor) SkillNameValue( SkillName name, int value )
+ SkillName Name( get; )
+ int Value( get; )
+ + diff --git a/Docs/types/SkillTarget.html b/Docs/types/SkillTarget.html new file mode 100644 index 0000000..892d40e --- /dev/null +++ b/Docs/types/SkillTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SkillTarget + + +

Back to Server.Commands

+

(SkillsCommand) - SkillTarget : Target

+ (ctor) SkillTarget( SkillName skill )
+ (ctor) SkillTarget( SkillName skill, double value )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/SkillTeleporter.html b/Docs/types/SkillTeleporter.html new file mode 100644 index 0000000..c9d198f --- /dev/null +++ b/Docs/types/SkillTeleporter.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SkillTeleporter + + +

Back to Server.Items

+

SkillTeleporter : Teleporter, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SkillTeleporter()
+ (ctor) SkillTeleporter( Serial serial )
+ int MessageNumber( get; set; )
+ string MessageString( get; set; )
+ double Required( get; set; )
+ SkillName Skill( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void EndMessageLock( object state )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkillUpdate.html b/Docs/types/SkillUpdate.html new file mode 100644 index 0000000..2d9c2f4 --- /dev/null +++ b/Docs/types/SkillUpdate.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SkillUpdate + + +

Back to Server.Network

+

SkillUpdate : Packet

+ (ctor) SkillUpdate( Skills skills )
+ + diff --git a/Docs/types/SkillUseCallback.html b/Docs/types/SkillUseCallback.html new file mode 100644 index 0000000..2414315 --- /dev/null +++ b/Docs/types/SkillUseCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SkillUseCallback + + +

Back to Server

+

SkillUseCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SkillUseCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile user, AsyncCallback callback, object object )
+ virtual TimeSpan EndInvoke( IAsyncResult result )
+ virtual TimeSpan Invoke( Mobile user )
+ + diff --git a/Docs/types/Skillet.html b/Docs/types/Skillet.html new file mode 100644 index 0000000..a3e4c2d --- /dev/null +++ b/Docs/types/Skillet.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Skillet + + +

Back to Server.Items

+

Skillet : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Skillet()
+ (ctor) Skillet( int uses )
+ (ctor) Skillet( Serial serial )
+ CraftSystem CraftSystem( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Skills.html b/Docs/types/Skills.html new file mode 100644 index 0000000..4704601 --- /dev/null +++ b/Docs/types/Skills.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Skills + + +

Back to Server.Commands

+

Skills

+

Nested Types: SkillsTarget

+ (static) void Initialize()
+ (static) void Register()
+ (static) void Skills_OnCommand( CommandEventArgs e )
+ (ctor) Skills()
+ + diff --git a/Docs/types/SkillsCommand.html b/Docs/types/SkillsCommand.html new file mode 100644 index 0000000..b68a168 --- /dev/null +++ b/Docs/types/SkillsCommand.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SkillsCommand + + +

Back to Server.Commands

+

SkillsCommand

+

Nested Types: AllSkillsTarget, SkillTarget

+ (static) void GetSkill_OnCommand( CommandEventArgs arg )
+ (static) void Initialize()
+ (static) void SetAllSkills_OnCommand( CommandEventArgs arg )
+ (static) void SetSkill_OnCommand( CommandEventArgs arg )
+ (ctor) SkillsCommand()
+ + diff --git a/Docs/types/SkillsGump.html b/Docs/types/SkillsGump.html new file mode 100644 index 0000000..9a99288 --- /dev/null +++ b/Docs/types/SkillsGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SkillsGump + + +

Back to Server.Gumps

+

SkillsGump : Gump

+ (ctor) SkillsGump( Mobile from, Mobile target )
+ (ctor) SkillsGump( Mobile from, Mobile target, SkillsGumpGroup selected )
+ int GetButtonID( int type, int index )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SkillsGumpGroup.html b/Docs/types/SkillsGumpGroup.html new file mode 100644 index 0000000..601b4be --- /dev/null +++ b/Docs/types/SkillsGumpGroup.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SkillsGumpGroup + + +

Back to Server.Gumps

+

SkillsGumpGroup

+

Nested Types: SkillNameComparer

+ (static) SkillsGumpGroup[] Groups( get; )
+ (ctor) SkillsGumpGroup( string name, SkillName[] skills )
+ string Name( get; )
+ SkillName[] Skills( get; )
+ + diff --git a/Docs/types/SkillsTarget.html b/Docs/types/SkillsTarget.html new file mode 100644 index 0000000..539b7e4 --- /dev/null +++ b/Docs/types/SkillsTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SkillsTarget + + +

Back to Server.Commands

+

(Skills) - SkillsTarget : Target

+ (ctor) SkillsTarget()
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/SkinnedDeerArtifact.html b/Docs/types/SkinnedDeerArtifact.html new file mode 100644 index 0000000..f9d1f4b --- /dev/null +++ b/Docs/types/SkinnedDeerArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SkinnedDeerArtifact + + +

Back to Server.Items

+

SkinnedDeerArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SkinnedDeerArtifact()
+ (ctor) SkinnedDeerArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkinnedGoatArtifact.html b/Docs/types/SkinnedGoatArtifact.html new file mode 100644 index 0000000..28ecee5 --- /dev/null +++ b/Docs/types/SkinnedGoatArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SkinnedGoatArtifact + + +

Back to Server.Items

+

SkinnedGoatArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SkinnedGoatArtifact()
+ (ctor) SkinnedGoatArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkinningKnife.html b/Docs/types/SkinningKnife.html new file mode 100644 index 0000000..49fd645 --- /dev/null +++ b/Docs/types/SkinningKnife.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - SkinningKnife + + +

Back to Server.Items

+

SkinningKnife : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: RoyalGuardSurvivalKnife

+ (ctor) SkinningKnife()
+ (ctor) SkinningKnife( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Skirt.html b/Docs/types/Skirt.html new file mode 100644 index 0000000..eee5497 --- /dev/null +++ b/Docs/types/Skirt.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Skirt + + +

Back to Server.Items

+

Skirt : BaseOuterLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Skirt()
+ (ctor) Skirt( int hue )
+ (ctor) Skirt( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkitteringHopper.html b/Docs/types/SkitteringHopper.html new file mode 100644 index 0000000..1400f42 --- /dev/null +++ b/Docs/types/SkitteringHopper.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SkitteringHopper + + +

Back to Server.Mobiles

+

SkitteringHopper : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SkitteringHopper()
+ (ctor) SkitteringHopper( Serial serial )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkullCandleArtifact.html b/Docs/types/SkullCandleArtifact.html new file mode 100644 index 0000000..91fffe1 --- /dev/null +++ b/Docs/types/SkullCandleArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SkullCandleArtifact + + +

Back to Server.Items

+

SkullCandleArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SkullCandleArtifact()
+ (ctor) SkullCandleArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkullCap.html b/Docs/types/SkullCap.html new file mode 100644 index 0000000..2300e8e --- /dev/null +++ b/Docs/types/SkullCap.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - SkullCap + + +

Back to Server.Items

+

SkullCap : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) SkullCap()
+ (ctor) SkullCap( Serial serial )
+ (ctor) SkullCap( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkullPileAddon.html b/Docs/types/SkullPileAddon.html new file mode 100644 index 0000000..7198be0 --- /dev/null +++ b/Docs/types/SkullPileAddon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SkullPileAddon + + +

Back to Server.Items

+

SkullPileAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SkullPileAddon()
+ (ctor) SkullPileAddon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SkullPole.html b/Docs/types/SkullPole.html new file mode 100644 index 0000000..ec01c79 --- /dev/null +++ b/Docs/types/SkullPole.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SkullPole + + +

Back to Server.Items

+

SkullPole : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SkullPole()
+ (ctor) SkullPole( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SlabOfBacon.html b/Docs/types/SlabOfBacon.html new file mode 100644 index 0000000..3091309 --- /dev/null +++ b/Docs/types/SlabOfBacon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SlabOfBacon + + +

Back to Server.Items

+

SlabOfBacon : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SlabOfBacon()
+ (ctor) SlabOfBacon( int amount )
+ (ctor) SlabOfBacon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SlayHenchmenConversation.html b/Docs/types/SlayHenchmenConversation.html new file mode 100644 index 0000000..e9550fb --- /dev/null +++ b/Docs/types/SlayHenchmenConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SlayHenchmenConversation + + +

Back to Server.Engines.Quests.Ninja

+

SlayHenchmenConversation : QuestConversation

+ (ctor) SlayHenchmenConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SlayHenchmenObjective.html b/Docs/types/SlayHenchmenObjective.html new file mode 100644 index 0000000..a20c660 --- /dev/null +++ b/Docs/types/SlayHenchmenObjective.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SlayHenchmenObjective + + +

Back to Server.Engines.Quests.Ninja

+

SlayHenchmenObjective : QuestObjective

+ (ctor) SlayHenchmenObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/SlayerEntry.html b/Docs/types/SlayerEntry.html new file mode 100644 index 0000000..9d456b2 --- /dev/null +++ b/Docs/types/SlayerEntry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SlayerEntry + + +

Back to Server.Items

+

SlayerEntry

+ (ctor) SlayerEntry( SlayerName name, Type[] types )
+ SlayerGroup Group( get; set; )
+ SlayerName Name( get; )
+ int Title( get; )
+ Type[] Types( get; )
+ bool Slays( Mobile m )
+ + diff --git a/Docs/types/SlayerGroup.html b/Docs/types/SlayerGroup.html new file mode 100644 index 0000000..0f1e4b2 --- /dev/null +++ b/Docs/types/SlayerGroup.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SlayerGroup + + +

Back to Server.Items

+

SlayerGroup

+ (static) SlayerGroup[] Groups( get; )
+ (static) SlayerEntry[] TotalEntries( get; )
+ (static) SlayerEntry[] CompileEntries( SlayerGroup[] groups )
+ (static) SlayerEntry GetEntryByName( SlayerName name )
+ (static) SlayerName GetLootSlayerType( Type type )
+ (ctor) SlayerGroup()
+ SlayerEntry[] Entries( get; set; )
+ Type[] FoundOn( get; set; )
+ SlayerGroup[] Opposition( get; set; )
+ SlayerEntry Super( get; set; )
+ bool OppositionSuperSlays( Mobile m )
+ + diff --git a/Docs/types/SlayerName.html b/Docs/types/SlayerName.html new file mode 100644 index 0000000..4b9ecd5 --- /dev/null +++ b/Docs/types/SlayerName.html @@ -0,0 +1,37 @@ + + + RunUO Documentation - Class Overview - SlayerName + + +

Back to Server.Items

+

SlayerName (Enum)

+ None = 0,
+ Silver = 1,
+ OrcSlaying = 2,
+ TrollSlaughter = 3,
+ OgreTrashing = 4,
+ Repond = 5,
+ DragonSlaying = 6,
+ Terathan = 7,
+ SnakesBane = 8,
+ LizardmanSlaughter = 9,
+ ReptilianDeath = 10,
+ DaemonDismissal = 11,
+ GargoylesFoe = 12,
+ BalronDamnation = 13,
+ Exorcism = 14,
+ Ophidian = 15,
+ SpidersDeath = 16,
+ ScorpionsBane = 17,
+ ArachnidDoom = 18,
+ FlameDousing = 19,
+ WaterDissipation = 20,
+ Vacuum = 21,
+ ElementalHealth = 22,
+ EarthShatter = 23,
+ BloodDrinking = 24,
+ SummerWind = 25,
+ ElementalBan = 26,
+ Fey = 27
+ + diff --git a/Docs/types/SledgeHammer.html b/Docs/types/SledgeHammer.html new file mode 100644 index 0000000..732d9e8 --- /dev/null +++ b/Docs/types/SledgeHammer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SledgeHammer + + +

Back to Server.Items

+

SledgeHammer : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) SledgeHammer()
+ (ctor) SledgeHammer( int uses )
+ (ctor) SledgeHammer( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Slice.html b/Docs/types/Slice.html new file mode 100644 index 0000000..cc74789 --- /dev/null +++ b/Docs/types/Slice.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Slice + + +

Back to Server

+

Slice : MulticastDelegate, ICloneable, ISerializable

+ (ctor) Slice( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke()
+ + diff --git a/Docs/types/SliceTimer.html b/Docs/types/SliceTimer.html new file mode 100644 index 0000000..445a338 --- /dev/null +++ b/Docs/types/SliceTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SliceTimer + + +

Back to Server.Engines.CannedEvil

+

SliceTimer : Timer

+ (ctor) SliceTimer( ChampionSpawn spawn )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Slime.html b/Docs/types/Slime.html new file mode 100644 index 0000000..8e295d0 --- /dev/null +++ b/Docs/types/Slime.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Slime + + +

Back to Server.Mobiles

+

Slime : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Slime()
+ (ctor) Slime( Serial serial )
+ FoodType FavoriteFood( get; )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SlowAStarAlgorithm.html b/Docs/types/SlowAStarAlgorithm.html new file mode 100644 index 0000000..0125cb9 --- /dev/null +++ b/Docs/types/SlowAStarAlgorithm.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SlowAStarAlgorithm + + +

Back to Server.PathAlgorithms.SlowAStar

+

SlowAStarAlgorithm : PathAlgorithm

+ (ctor) SlowAStarAlgorithm()
+ virtual bool CheckCondition( Mobile m, Map map, Point3D start, Point3D goal )
+ virtual Direction[] Find( Mobile m, Map map, Point3D start, Point3D goal )
+ int Heuristic( int x, int y, int z )
+ + diff --git a/Docs/types/SmallBOD.html b/Docs/types/SmallBOD.html new file mode 100644 index 0000000..2f6436a --- /dev/null +++ b/Docs/types/SmallBOD.html @@ -0,0 +1,34 @@ + + + RunUO Documentation - Class Overview - SmallBOD + + +

Back to Server.Engines.BulkOrders

+

SmallBOD : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: SmallSmithBOD, SmallTailorBOD

+ (static) BulkMaterialType GetMaterial( CraftResource resource )
+ (static) BulkMaterialType GetRandomMaterial( BulkMaterialType start, double[] chances )
+ (ctor) SmallBOD()
+ (ctor) SmallBOD( Serial serial )
+ (ctor) SmallBOD( int hue, int amountMax, Type type, int number, int graphic, bool requireExeptional, BulkMaterialType material )
+ int AmountCur( get; set; )
+ int AmountMax( get; set; )
+ bool Complete( get; )
+ int Graphic( get; set; )
+ int LabelNumber( get; )
+ BulkMaterialType Material( get; set; )
+ int Number( get; set; )
+ bool RequireExceptional( get; set; )
+ Type Type( get; set; )
+ void BeginCombine( Mobile from )
+ virtual int ComputeFame()
+ virtual int ComputeGold()
+ virtual List<Item> ComputeRewards( bool full )
+ virtual void Deserialize( GenericReader reader )
+ void EndCombine( Mobile from, object o )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void GetRewards( out Item reward, out int gold, out int fame )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBODAcceptGump.html b/Docs/types/SmallBODAcceptGump.html new file mode 100644 index 0000000..3425f60 --- /dev/null +++ b/Docs/types/SmallBODAcceptGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SmallBODAcceptGump + + +

Back to Server.Engines.BulkOrders

+

SmallBODAcceptGump : Gump

+ (static) int GetMaterialNumberFor( BulkMaterialType material )
+ (ctor) SmallBODAcceptGump( Mobile from, SmallBOD deed )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SmallBODGump.html b/Docs/types/SmallBODGump.html new file mode 100644 index 0000000..d39d04f --- /dev/null +++ b/Docs/types/SmallBODGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SmallBODGump + + +

Back to Server.Engines.BulkOrders

+

SmallBODGump : Gump

+ (static) int GetMaterialNumberFor( BulkMaterialType material )
+ (ctor) SmallBODGump( Mobile from, SmallBOD deed )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SmallBODTarget.html b/Docs/types/SmallBODTarget.html new file mode 100644 index 0000000..0c72b60 --- /dev/null +++ b/Docs/types/SmallBODTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SmallBODTarget + + +

Back to Server.Engines.BulkOrders

+

SmallBODTarget : Target

+ (ctor) SmallBODTarget( SmallBOD deed )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/SmallBagBall.html b/Docs/types/SmallBagBall.html new file mode 100644 index 0000000..882868b --- /dev/null +++ b/Docs/types/SmallBagBall.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallBagBall + + +

Back to Server.Items

+

SmallBagBall : BaseBagBall, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) SmallBagBall()
+ (ctor) SmallBagBall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBedEastAddon.html b/Docs/types/SmallBedEastAddon.html new file mode 100644 index 0000000..32d569d --- /dev/null +++ b/Docs/types/SmallBedEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallBedEastAddon + + +

Back to Server.Items

+

SmallBedEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SmallBedEastAddon()
+ (ctor) SmallBedEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBedEastDeed.html b/Docs/types/SmallBedEastDeed.html new file mode 100644 index 0000000..fe786e9 --- /dev/null +++ b/Docs/types/SmallBedEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmallBedEastDeed + + +

Back to Server.Items

+

SmallBedEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallBedEastDeed()
+ (ctor) SmallBedEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBedSouthAddon.html b/Docs/types/SmallBedSouthAddon.html new file mode 100644 index 0000000..5775b3e --- /dev/null +++ b/Docs/types/SmallBedSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallBedSouthAddon + + +

Back to Server.Items

+

SmallBedSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SmallBedSouthAddon()
+ (ctor) SmallBedSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBedSouthDeed.html b/Docs/types/SmallBedSouthDeed.html new file mode 100644 index 0000000..54fbf94 --- /dev/null +++ b/Docs/types/SmallBedSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmallBedSouthDeed + + +

Back to Server.Items

+

SmallBedSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallBedSouthDeed()
+ (ctor) SmallBedSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBlueBottle.html b/Docs/types/SmallBlueBottle.html new file mode 100644 index 0000000..c5c9f84 --- /dev/null +++ b/Docs/types/SmallBlueBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallBlueBottle + + +

Back to Server.Items

+

SmallBlueBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallBlueBottle()
+ (ctor) SmallBlueBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBlueFlask.html b/Docs/types/SmallBlueFlask.html new file mode 100644 index 0000000..97a686b --- /dev/null +++ b/Docs/types/SmallBlueFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallBlueFlask + + +

Back to Server.Items

+

SmallBlueFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallBlueFlask()
+ (ctor) SmallBlueFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBoat.html b/Docs/types/SmallBoat.html new file mode 100644 index 0000000..404489a --- /dev/null +++ b/Docs/types/SmallBoat.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SmallBoat + + +

Back to Server.Multis

+

SmallBoat : BaseBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallBoat()
+ (ctor) SmallBoat( Serial serial )
+ BaseDockedBoat DockedBoat( get; )
+ int EastID( get; )
+ int HoldDistance( get; )
+ Point3D MarkOffset( get; )
+ int NorthID( get; )
+ Point2D PortOffset( get; )
+ int SouthID( get; )
+ Point2D StarboardOffset( get; )
+ int TillerManDistance( get; )
+ int WestID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBoatDeed.html b/Docs/types/SmallBoatDeed.html new file mode 100644 index 0000000..6cabd8d --- /dev/null +++ b/Docs/types/SmallBoatDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmallBoatDeed + + +

Back to Server.Multis

+

SmallBoatDeed : BaseBoatDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallBoatDeed()
+ (ctor) SmallBoatDeed( Serial serial )
+ BaseBoat Boat( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBrickHouseDeed.html b/Docs/types/SmallBrickHouseDeed.html new file mode 100644 index 0000000..ccf0535 --- /dev/null +++ b/Docs/types/SmallBrickHouseDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SmallBrickHouseDeed + + +

Back to Server.Multis.Deeds

+

SmallBrickHouseDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallBrickHouseDeed()
+ (ctor) SmallBrickHouseDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBrownBottle.html b/Docs/types/SmallBrownBottle.html new file mode 100644 index 0000000..6a40c91 --- /dev/null +++ b/Docs/types/SmallBrownBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallBrownBottle + + +

Back to Server.Items

+

SmallBrownBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallBrownBottle()
+ (ctor) SmallBrownBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallBulkEntry.html b/Docs/types/SmallBulkEntry.html new file mode 100644 index 0000000..46848a1 --- /dev/null +++ b/Docs/types/SmallBulkEntry.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SmallBulkEntry + + +

Back to Server.Engines.BulkOrders

+

SmallBulkEntry

+ (static) SmallBulkEntry[] BlacksmithArmor( get; )
+ (static) SmallBulkEntry[] BlacksmithWeapons( get; )
+ (static) SmallBulkEntry[] TailorCloth( get; )
+ (static) SmallBulkEntry[] TailorLeather( get; )
+ (static) SmallBulkEntry[] GetEntries( string type, string name )
+ (static) SmallBulkEntry[] LoadEntries( string path )
+ (static) SmallBulkEntry[] LoadEntries( string type, string name )
+ (ctor) SmallBulkEntry( Type type, int number, int graphic )
+ int Graphic( get; )
+ int Number( get; )
+ Type Type( get; )
+ + diff --git a/Docs/types/SmallCrate.html b/Docs/types/SmallCrate.html new file mode 100644 index 0000000..006d689 --- /dev/null +++ b/Docs/types/SmallCrate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallCrate + + +

Back to Server.Items

+

SmallCrate : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) SmallCrate()
+ (ctor) SmallCrate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallDockedBoat.html b/Docs/types/SmallDockedBoat.html new file mode 100644 index 0000000..0107a75 --- /dev/null +++ b/Docs/types/SmallDockedBoat.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallDockedBoat + + +

Back to Server.Multis

+

SmallDockedBoat : BaseDockedBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallDockedBoat( Serial serial )
+ (ctor) SmallDockedBoat( BaseBoat boat )
+ BaseBoat Boat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallDockedDragonBoat.html b/Docs/types/SmallDockedDragonBoat.html new file mode 100644 index 0000000..3d1b0cb --- /dev/null +++ b/Docs/types/SmallDockedDragonBoat.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallDockedDragonBoat + + +

Back to Server.Multis

+

SmallDockedDragonBoat : BaseDockedBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallDockedDragonBoat( Serial serial )
+ (ctor) SmallDockedDragonBoat( BaseBoat boat )
+ BaseBoat Boat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallDragonBoat.html b/Docs/types/SmallDragonBoat.html new file mode 100644 index 0000000..ae1b2a3 --- /dev/null +++ b/Docs/types/SmallDragonBoat.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SmallDragonBoat + + +

Back to Server.Multis

+

SmallDragonBoat : BaseBoat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallDragonBoat()
+ (ctor) SmallDragonBoat( Serial serial )
+ BaseDockedBoat DockedBoat( get; )
+ int EastID( get; )
+ int HoldDistance( get; )
+ Point3D MarkOffset( get; )
+ int NorthID( get; )
+ Point2D PortOffset( get; )
+ int SouthID( get; )
+ Point2D StarboardOffset( get; )
+ int TillerManDistance( get; )
+ int WestID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallDragonBoatDeed.html b/Docs/types/SmallDragonBoatDeed.html new file mode 100644 index 0000000..272771d --- /dev/null +++ b/Docs/types/SmallDragonBoatDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmallDragonBoatDeed + + +

Back to Server.Multis

+

SmallDragonBoatDeed : BaseBoatDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallDragonBoatDeed()
+ (ctor) SmallDragonBoatDeed( Serial serial )
+ BaseBoat Boat( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallEmptyFlask.html b/Docs/types/SmallEmptyFlask.html new file mode 100644 index 0000000..91f1462 --- /dev/null +++ b/Docs/types/SmallEmptyFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallEmptyFlask + + +

Back to Server.Items

+

SmallEmptyFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallEmptyFlask()
+ (ctor) SmallEmptyFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallEmptyPot.html b/Docs/types/SmallEmptyPot.html new file mode 100644 index 0000000..905d55a --- /dev/null +++ b/Docs/types/SmallEmptyPot.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallEmptyPot + + +

Back to Server.Items

+

SmallEmptyPot : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallEmptyPot()
+ (ctor) SmallEmptyPot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallFishingNetAddon.html b/Docs/types/SmallFishingNetAddon.html new file mode 100644 index 0000000..c0a9f81 --- /dev/null +++ b/Docs/types/SmallFishingNetAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallFishingNetAddon + + +

Back to Server.Items

+

SmallFishingNetAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SmallFishingNetAddon()
+ (ctor) SmallFishingNetAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallFishingNetComponent.html b/Docs/types/SmallFishingNetComponent.html new file mode 100644 index 0000000..7cfd001 --- /dev/null +++ b/Docs/types/SmallFishingNetComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallFishingNetComponent + + +

Back to Server.Items

+

SmallFishingNetComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) SmallFishingNetComponent()
+ (ctor) SmallFishingNetComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallFishingNetDeed.html b/Docs/types/SmallFishingNetDeed.html new file mode 100644 index 0000000..4ebe91e --- /dev/null +++ b/Docs/types/SmallFishingNetDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmallFishingNetDeed + + +

Back to Server.Items

+

SmallFishingNetDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallFishingNetDeed()
+ (ctor) SmallFishingNetDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallFlask.html b/Docs/types/SmallFlask.html new file mode 100644 index 0000000..f7faee1 --- /dev/null +++ b/Docs/types/SmallFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallFlask + + +

Back to Server.Items

+

SmallFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallFlask()
+ (ctor) SmallFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallForgeAddon.html b/Docs/types/SmallForgeAddon.html new file mode 100644 index 0000000..efdb57a --- /dev/null +++ b/Docs/types/SmallForgeAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallForgeAddon + + +

Back to Server.Items

+

SmallForgeAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SmallForgeAddon()
+ (ctor) SmallForgeAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallForgeDeed.html b/Docs/types/SmallForgeDeed.html new file mode 100644 index 0000000..06e579d --- /dev/null +++ b/Docs/types/SmallForgeDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmallForgeDeed + + +

Back to Server.Items

+

SmallForgeDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallForgeDeed()
+ (ctor) SmallForgeDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallGreenBottle.html b/Docs/types/SmallGreenBottle.html new file mode 100644 index 0000000..a9aacd9 --- /dev/null +++ b/Docs/types/SmallGreenBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallGreenBottle + + +

Back to Server.Items

+

SmallGreenBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallGreenBottle()
+ (ctor) SmallGreenBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallGreenBottle2.html b/Docs/types/SmallGreenBottle2.html new file mode 100644 index 0000000..3045ecc --- /dev/null +++ b/Docs/types/SmallGreenBottle2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallGreenBottle2 + + +

Back to Server.Items

+

SmallGreenBottle2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallGreenBottle2()
+ (ctor) SmallGreenBottle2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallOldHouse.html b/Docs/types/SmallOldHouse.html new file mode 100644 index 0000000..b3ae64f --- /dev/null +++ b/Docs/types/SmallOldHouse.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SmallOldHouse + + +

Back to Server.Multis

+

SmallOldHouse : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallOldHouse( Serial serial )
+ (ctor) SmallOldHouse( Mobile owner, int id )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallPlateJingasa.html b/Docs/types/SmallPlateJingasa.html new file mode 100644 index 0000000..6c10b2e --- /dev/null +++ b/Docs/types/SmallPlateJingasa.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - SmallPlateJingasa + + +

Back to Server.Items

+

SmallPlateJingasa : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) SmallPlateJingasa()
+ (ctor) SmallPlateJingasa( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallPumpkin.html b/Docs/types/SmallPumpkin.html new file mode 100644 index 0000000..9424333 --- /dev/null +++ b/Docs/types/SmallPumpkin.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallPumpkin + + +

Back to Server.Items

+

SmallPumpkin : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallPumpkin()
+ (ctor) SmallPumpkin( int amount )
+ (ctor) SmallPumpkin( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallRedFlask.html b/Docs/types/SmallRedFlask.html new file mode 100644 index 0000000..43749a2 --- /dev/null +++ b/Docs/types/SmallRedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallRedFlask + + +

Back to Server.Items

+

SmallRedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallRedFlask()
+ (ctor) SmallRedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallShop.html b/Docs/types/SmallShop.html new file mode 100644 index 0000000..7abb5d5 --- /dev/null +++ b/Docs/types/SmallShop.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SmallShop + + +

Back to Server.Multis

+

SmallShop : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallShop( Serial serial )
+ (ctor) SmallShop( Mobile owner, int id )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallSmithBOD.html b/Docs/types/SmallSmithBOD.html new file mode 100644 index 0000000..64c6775 --- /dev/null +++ b/Docs/types/SmallSmithBOD.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - SmallSmithBOD + + +

Back to Server.Engines.BulkOrders

+

SmallSmithBOD : SmallBOD, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) SmallSmithBOD CreateRandomFor( Mobile m )
+ (ctor) SmallSmithBOD()
+ (ctor) SmallSmithBOD( Serial serial )
+ (ctor) SmallSmithBOD( SmallBulkEntry entry, BulkMaterialType material, int amountMax, bool reqExceptional )
+ (ctor) SmallSmithBOD( int amountCur, int amountMax, Type type, int number, int graphic, bool reqExceptional, BulkMaterialType mat )
+ virtual int ComputeFame()
+ virtual int ComputeGold()
+ virtual List<Item> ComputeRewards( bool full )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallStretchedHideEastAddon.html b/Docs/types/SmallStretchedHideEastAddon.html new file mode 100644 index 0000000..3f253a7 --- /dev/null +++ b/Docs/types/SmallStretchedHideEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallStretchedHideEastAddon + + +

Back to Server.Items

+

SmallStretchedHideEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SmallStretchedHideEastAddon()
+ (ctor) SmallStretchedHideEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallStretchedHideEastDeed.html b/Docs/types/SmallStretchedHideEastDeed.html new file mode 100644 index 0000000..968c101 --- /dev/null +++ b/Docs/types/SmallStretchedHideEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmallStretchedHideEastDeed + + +

Back to Server.Items

+

SmallStretchedHideEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallStretchedHideEastDeed()
+ (ctor) SmallStretchedHideEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallStretchedHideSouthAddon.html b/Docs/types/SmallStretchedHideSouthAddon.html new file mode 100644 index 0000000..67c0d9f --- /dev/null +++ b/Docs/types/SmallStretchedHideSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallStretchedHideSouthAddon + + +

Back to Server.Items

+

SmallStretchedHideSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SmallStretchedHideSouthAddon()
+ (ctor) SmallStretchedHideSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallStretchedHideSouthDeed.html b/Docs/types/SmallStretchedHideSouthDeed.html new file mode 100644 index 0000000..11a6adb --- /dev/null +++ b/Docs/types/SmallStretchedHideSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmallStretchedHideSouthDeed + + +

Back to Server.Items

+

SmallStretchedHideSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallStretchedHideSouthDeed()
+ (ctor) SmallStretchedHideSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallTailorBOD.html b/Docs/types/SmallTailorBOD.html new file mode 100644 index 0000000..14d11f5 --- /dev/null +++ b/Docs/types/SmallTailorBOD.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - SmallTailorBOD + + +

Back to Server.Engines.BulkOrders

+

SmallTailorBOD : SmallBOD, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) SmallTailorBOD CreateRandomFor( Mobile m )
+ (ctor) SmallTailorBOD()
+ (ctor) SmallTailorBOD( Serial serial )
+ (ctor) SmallTailorBOD( SmallBulkEntry entry, BulkMaterialType material, int amountMax, bool reqExceptional )
+ (ctor) SmallTailorBOD( int amountCur, int amountMax, Type type, int number, int graphic, bool reqExceptional, BulkMaterialType mat )
+ virtual int ComputeFame()
+ virtual int ComputeGold()
+ virtual List<Item> ComputeRewards( bool full )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallTower.html b/Docs/types/SmallTower.html new file mode 100644 index 0000000..57fd087 --- /dev/null +++ b/Docs/types/SmallTower.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SmallTower + + +

Back to Server.Multis

+

SmallTower : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallTower( Serial serial )
+ (ctor) SmallTower( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallTowerDeed.html b/Docs/types/SmallTowerDeed.html new file mode 100644 index 0000000..d21b1b9 --- /dev/null +++ b/Docs/types/SmallTowerDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SmallTowerDeed + + +

Back to Server.Multis.Deeds

+

SmallTowerDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallTowerDeed()
+ (ctor) SmallTowerDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallTowerSculpture.html b/Docs/types/SmallTowerSculpture.html new file mode 100644 index 0000000..c68c3d2 --- /dev/null +++ b/Docs/types/SmallTowerSculpture.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallTowerSculpture + + +

Back to Server.Items

+

SmallTowerSculpture : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallTowerSculpture()
+ (ctor) SmallTowerSculpture( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallUrn.html b/Docs/types/SmallUrn.html new file mode 100644 index 0000000..3ed8531 --- /dev/null +++ b/Docs/types/SmallUrn.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallUrn + + +

Back to Server.Items

+

SmallUrn : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallUrn()
+ (ctor) SmallUrn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallVioletBottle.html b/Docs/types/SmallVioletBottle.html new file mode 100644 index 0000000..30d394d --- /dev/null +++ b/Docs/types/SmallVioletBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallVioletBottle + + +

Back to Server.Items

+

SmallVioletBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallVioletBottle()
+ (ctor) SmallVioletBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallWatermelon.html b/Docs/types/SmallWatermelon.html new file mode 100644 index 0000000..fa147db --- /dev/null +++ b/Docs/types/SmallWatermelon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmallWatermelon + + +

Back to Server.Items

+

SmallWatermelon : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallWatermelon()
+ (ctor) SmallWatermelon( int amount )
+ (ctor) SmallWatermelon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmallYellowFlask.html b/Docs/types/SmallYellowFlask.html new file mode 100644 index 0000000..ef9cb38 --- /dev/null +++ b/Docs/types/SmallYellowFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SmallYellowFlask + + +

Back to Server.Items

+

SmallYellowFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmallYellowFlask()
+ (ctor) SmallYellowFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmeltResult.html b/Docs/types/SmeltResult.html new file mode 100644 index 0000000..2d0d9f1 --- /dev/null +++ b/Docs/types/SmeltResult.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SmeltResult + + +

Back to Server.Engines.Craft

+

SmeltResult (Enum)

+ Success = 0,
+ Invalid = 1,
+ NoSkill = 2
+ + diff --git a/Docs/types/SmithBag.html b/Docs/types/SmithBag.html new file mode 100644 index 0000000..3644b8c --- /dev/null +++ b/Docs/types/SmithBag.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmithBag + + +

Back to Server.Items

+

SmithBag : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) SmithBag()
+ (ctor) SmithBag( int amount )
+ (ctor) SmithBag( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmithHammer.html b/Docs/types/SmithHammer.html new file mode 100644 index 0000000..bc9f41e --- /dev/null +++ b/Docs/types/SmithHammer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmithHammer + + +

Back to Server.Items

+

SmithHammer : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) SmithHammer()
+ (ctor) SmithHammer( int uses )
+ (ctor) SmithHammer( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmithRewardCalculator.html b/Docs/types/SmithRewardCalculator.html new file mode 100644 index 0000000..c59c07b --- /dev/null +++ b/Docs/types/SmithRewardCalculator.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SmithRewardCalculator + + +

Back to Server.Engines.BulkOrders

+

SmithRewardCalculator : RewardCalculator

+ (static) Item CreateAncientHammer( int type )
+ (static) Item CreateColoredAnvil( int type )
+ (static) Item CreateGargoylesPickaxe( int type )
+ (static) Item CreateMiningGloves( int type )
+ (static) Item CreatePowderOfTemperament( int type )
+ (static) Item CreatePowerScroll( int type )
+ (static) Item CreateProspectorsTool( int type )
+ (static) Item CreateRunicHammer( int type )
+ (static) Item CreateSturdyPickaxe( int type )
+ (static) Item CreateSturdyShovel( int type )
+ (ctor) SmithRewardCalculator()
+ virtual int ComputeGold( int quantity, bool exceptional, BulkMaterialType material, int itemCount, Type type )
+ virtual int ComputePoints( int quantity, bool exceptional, BulkMaterialType material, int itemCount, Type type )
+ int ComputeType( Type type, int itemCount )
+ + diff --git a/Docs/types/SmithStone.html b/Docs/types/SmithStone.html new file mode 100644 index 0000000..75d11b3 --- /dev/null +++ b/Docs/types/SmithStone.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmithStone + + +

Back to Server.Items

+

SmithStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmithStone()
+ (ctor) SmithStone( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmokeBomb.html b/Docs/types/SmokeBomb.html new file mode 100644 index 0000000..138f623 --- /dev/null +++ b/Docs/types/SmokeBomb.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SmokeBomb + + +

Back to Server.Items

+

SmokeBomb : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SmokeBomb()
+ (ctor) SmokeBomb( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SmoothingPlane.html b/Docs/types/SmoothingPlane.html new file mode 100644 index 0000000..d04595e --- /dev/null +++ b/Docs/types/SmoothingPlane.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SmoothingPlane + + +

Back to Server.Items

+

SmoothingPlane : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) SmoothingPlane()
+ (ctor) SmoothingPlane( int uses )
+ (ctor) SmoothingPlane( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Snake.html b/Docs/types/Snake.html new file mode 100644 index 0000000..5152d5d --- /dev/null +++ b/Docs/types/Snake.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Snake + + +

Back to Server.Mobiles

+

Snake : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Snake()
+ (ctor) Snake( Serial serial )
+ bool DeathAdderCharmable( get; )
+ FoodType FavoriteFood( get; )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Snapshot.html b/Docs/types/Snapshot.html new file mode 100644 index 0000000..efb703b --- /dev/null +++ b/Docs/types/Snapshot.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Snapshot + + +

Back to Server.Engines.Reports

+

Snapshot : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) Snapshot()
+ ObjectCollection Children( get; set; )
+ DateTime TimeStamp( get; set; )
+ PersistableType TypeID( get; )
+ virtual void DeserializeAttributes( PersistanceReader ip )
+ virtual void DeserializeChildren( PersistanceReader ip )
+ virtual void SerializeAttributes( PersistanceWriter op )
+ virtual void SerializeChildren( PersistanceWriter op )
+ + diff --git a/Docs/types/SnapshotCollection.html b/Docs/types/SnapshotCollection.html new file mode 100644 index 0000000..8fcdad3 --- /dev/null +++ b/Docs/types/SnapshotCollection.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SnapshotCollection + + +

Back to Server.Engines.Reports

+

SnapshotCollection : CollectionBase, IList, ICollection, IEnumerable

+

Nested Types: SnapshotCollectionEnumerator

+ (ctor) SnapshotCollection()
+ Snapshot Item( get; set; )
+ int Add( Snapshot value )
+ bool Contains( Snapshot value )
+ SnapshotCollectionEnumerator GetEnumerator()
+ int IndexOf( Snapshot value )
+ void Insert( int index, Snapshot value )
+ void Remove( Snapshot value )
+ + diff --git a/Docs/types/SnapshotCollectionEnumerator.html b/Docs/types/SnapshotCollectionEnumerator.html new file mode 100644 index 0000000..55289e7 --- /dev/null +++ b/Docs/types/SnapshotCollectionEnumerator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SnapshotCollectionEnumerator + + +

Back to Server.Engines.Reports

+

(SnapshotCollection) - SnapshotCollectionEnumerator : IEnumerator

+ (ctor) SnapshotCollectionEnumerator( SnapshotCollection collection )
+ Snapshot Current( get; )
+ object System.Collections.IEnumerator.Current( get; )
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/SnapshotHistory.html b/Docs/types/SnapshotHistory.html new file mode 100644 index 0000000..a205abd --- /dev/null +++ b/Docs/types/SnapshotHistory.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SnapshotHistory + + +

Back to Server.Engines.Reports

+

SnapshotHistory : PersistableObject

+ (static) PersistableObject Construct()
+ (ctor) SnapshotHistory()
+ SnapshotCollection Snapshots( get; set; )
+ PersistableType TypeID( get; )
+ virtual void DeserializeChildren( PersistanceReader ip )
+ void Load()
+ void Save()
+ virtual void SerializeChildren( PersistanceWriter op )
+ + diff --git a/Docs/types/SneakPastGuardiansConversation.html b/Docs/types/SneakPastGuardiansConversation.html new file mode 100644 index 0000000..2f17e57 --- /dev/null +++ b/Docs/types/SneakPastGuardiansConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SneakPastGuardiansConversation + + +

Back to Server.Engines.Quests.Ninja

+

SneakPastGuardiansConversation : QuestConversation

+ (ctor) SneakPastGuardiansConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SneakPastGuardiansObjective.html b/Docs/types/SneakPastGuardiansObjective.html new file mode 100644 index 0000000..4d20791 --- /dev/null +++ b/Docs/types/SneakPastGuardiansObjective.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SneakPastGuardiansObjective + + +

Back to Server.Engines.Quests.Ninja

+

SneakPastGuardiansObjective : QuestObjective

+ (ctor) SneakPastGuardiansObjective()
+ object Message( get; )
+ bool TaughtHowToUseSkills( get; set; )
+ virtual void CheckProgress()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/Snooping.html b/Docs/types/Snooping.html new file mode 100644 index 0000000..47c0adf --- /dev/null +++ b/Docs/types/Snooping.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Snooping + + +

Back to Server.SkillHandlers

+

Snooping

+ (static) bool CheckSnoopAllowed( Mobile from, Mobile to )
+ (static) void Configure()
+ (static) void Container_Snoop( Container cont, Mobile from )
+ (ctor) Snooping()
+ + diff --git a/Docs/types/SnowElemental.html b/Docs/types/SnowElemental.html new file mode 100644 index 0000000..458931c --- /dev/null +++ b/Docs/types/SnowElemental.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SnowElemental + + +

Back to Server.Mobiles

+

SnowElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SnowElemental()
+ (ctor) SnowElemental( Serial serial )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SnowGreenThornsEffect.html b/Docs/types/SnowGreenThornsEffect.html new file mode 100644 index 0000000..cb10e4b --- /dev/null +++ b/Docs/types/SnowGreenThornsEffect.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SnowGreenThornsEffect + + +

Back to Server.Items

+

SnowGreenThornsEffect : GreenThornsEffect

+ (ctor) SnowGreenThornsEffect( Point3D location, Map map, Mobile from )
+ virtual TimeSpan Play( int step )
+ + diff --git a/Docs/types/SnowLeopard.html b/Docs/types/SnowLeopard.html new file mode 100644 index 0000000..ec84fe1 --- /dev/null +++ b/Docs/types/SnowLeopard.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SnowLeopard + + +

Back to Server.Mobiles

+

SnowLeopard : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SnowLeopard()
+ (ctor) SnowLeopard( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SnowPile.html b/Docs/types/SnowPile.html new file mode 100644 index 0000000..3435c12 --- /dev/null +++ b/Docs/types/SnowPile.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SnowPile + + +

Back to Server.Items

+

SnowPile : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer, SnowTarget

+ (ctor) SnowPile()
+ (ctor) SnowPile( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SnowPileDeco.html b/Docs/types/SnowPileDeco.html new file mode 100644 index 0000000..db555e4 --- /dev/null +++ b/Docs/types/SnowPileDeco.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SnowPileDeco + + +

Back to Server.Items

+

SnowPileDeco : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SnowPileDeco()
+ (ctor) SnowPileDeco( Serial serial )
+ (ctor) SnowPileDeco( int itemid )
+ string DefaultName( get; )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SnowTarget.html b/Docs/types/SnowTarget.html new file mode 100644 index 0000000..43cdc34 --- /dev/null +++ b/Docs/types/SnowTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SnowTarget + + +

Back to Server.Items

+

(PileOfGlacialSnow) - SnowTarget : Target

+ (ctor) SnowTarget( Mobile thrower, Item snow )
+ virtual void OnTarget( Mobile from, object target )
+ + diff --git a/Docs/types/Snowman.html b/Docs/types/Snowman.html new file mode 100644 index 0000000..7a1dcf0 --- /dev/null +++ b/Docs/types/Snowman.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Snowman + + +

Back to Server.Items

+

Snowman : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (static) string GetRandomTitle()
+ (ctor) Snowman()
+ (ctor) Snowman( string title )
+ (ctor) Snowman( int hue )
+ (ctor) Snowman( Serial serial )
+ (ctor) Snowman( int hue, string title )
+ string Title( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SnowyTree.html b/Docs/types/SnowyTree.html new file mode 100644 index 0000000..9c04d5b --- /dev/null +++ b/Docs/types/SnowyTree.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SnowyTree + + +

Back to Server.Items

+

SnowyTree : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SnowyTree()
+ (ctor) SnowyTree( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SocketConnectEventArgs.html b/Docs/types/SocketConnectEventArgs.html new file mode 100644 index 0000000..9d8a21a --- /dev/null +++ b/Docs/types/SocketConnectEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SocketConnectEventArgs + + +

Back to Server

+

SocketConnectEventArgs : EventArgs

+ (ctor) SocketConnectEventArgs( Socket s )
+ bool AllowConnection( get; set; )
+ Socket Socket( get; )
+ + diff --git a/Docs/types/SocketConnectEventHandler.html b/Docs/types/SocketConnectEventHandler.html new file mode 100644 index 0000000..5980753 --- /dev/null +++ b/Docs/types/SocketConnectEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SocketConnectEventHandler + + +

Back to Server

+

SocketConnectEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SocketConnectEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( SocketConnectEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( SocketConnectEventArgs e )
+ + diff --git a/Docs/types/SocketOptions.html b/Docs/types/SocketOptions.html new file mode 100644 index 0000000..4eb6b5b --- /dev/null +++ b/Docs/types/SocketOptions.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SocketOptions + + +

Back to Server

+

SocketOptions

+ (static) void EventSink_SocketConnect( SocketConnectEventArgs e )
+ (static) void Initialize()
+ (ctor) SocketOptions()
+ + diff --git a/Docs/types/SolenAntHole.html b/Docs/types/SolenAntHole.html new file mode 100644 index 0000000..dba91d1 --- /dev/null +++ b/Docs/types/SolenAntHole.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SolenAntHole + + +

Back to Server.Items

+

SolenAntHole : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SolenAntHole()
+ (ctor) SolenAntHole( Serial serial )
+ bool HandlesOnMovement( get; )
+ bool ShareHue( get; )
+ void AddComponent( AddonComponent c, string name, int hue, int x, int y, int z )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void Serialize( GenericWriter writer )
+ void SpawnAnt()
+ void SpawnAnt( BaseCreature ant )
+ bool SpawnKilled()
+ + diff --git a/Docs/types/SolenAntHoleComponent.html b/Docs/types/SolenAntHoleComponent.html new file mode 100644 index 0000000..fc66ce0 --- /dev/null +++ b/Docs/types/SolenAntHoleComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SolenAntHoleComponent + + +

Back to Server.Items

+

SolenAntHoleComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) SolenAntHoleComponent( int itemID )
+ (ctor) SolenAntHoleComponent( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SolenFriendship.html b/Docs/types/SolenFriendship.html new file mode 100644 index 0000000..7af805f --- /dev/null +++ b/Docs/types/SolenFriendship.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SolenFriendship + + +

Back to Server.Mobiles

+

SolenFriendship (Enum)

+ None = 0,
+ Red = 1,
+ Black = 2
+ + diff --git a/Docs/types/SolenHelper.html b/Docs/types/SolenHelper.html new file mode 100644 index 0000000..15d5087 --- /dev/null +++ b/Docs/types/SolenHelper.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SolenHelper + + +

Back to Server.Mobiles

+

SolenHelper

+ (static) bool CheckBlackFriendship( Mobile m )
+ (static) bool CheckRedFriendship( Mobile m )
+ (static) void OnBlackDamage( Mobile from )
+ (static) void OnRedDamage( Mobile from )
+ (static) void PackPicnicBasket( BaseCreature solen )
+ (ctor) SolenHelper()
+ + diff --git a/Docs/types/SolenMatriarchQuest.html b/Docs/types/SolenMatriarchQuest.html new file mode 100644 index 0000000..4400c9c --- /dev/null +++ b/Docs/types/SolenMatriarchQuest.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SolenMatriarchQuest + + +

Back to Server.Engines.Quests.Matriarch

+

SolenMatriarchQuest : QuestSystem

+ (static) bool GiveRewardTo( PlayerMobile player )
+ (static) bool IsFriend( PlayerMobile player, bool redSolen )
+ (ctor) SolenMatriarchQuest()
+ (ctor) SolenMatriarchQuest( PlayerMobile from, bool redSolen )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ bool RedSolen( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ + diff --git a/Docs/types/SongOfSamlethe.html b/Docs/types/SongOfSamlethe.html new file mode 100644 index 0000000..12f9bb0 --- /dev/null +++ b/Docs/types/SongOfSamlethe.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SongOfSamlethe + + +

Back to Server.Items

+

SongOfSamlethe : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) SongOfSamlethe()
+ (ctor) SongOfSamlethe( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SongWovenMantle.html b/Docs/types/SongWovenMantle.html new file mode 100644 index 0000000..2d51f64 --- /dev/null +++ b/Docs/types/SongWovenMantle.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SongWovenMantle + + +

Back to Server.Items

+

SongWovenMantle : LeafArms, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) SongWovenMantle()
+ (ctor) SongWovenMantle( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BasePhysicalResistance( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SortCompiler.html b/Docs/types/SortCompiler.html new file mode 100644 index 0000000..7ca8f67 --- /dev/null +++ b/Docs/types/SortCompiler.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SortCompiler + + +

Back to Server.Commands.Generic

+

SortCompiler

+

Nested Types: (Anonymous-Type)--c__DisplayClass1, (Anonymous-Type)--c__DisplayClass3

+ (static) IComparer Compile( AssemblyEmitter assembly, Type objectType, OrderInfo[] orders )
+ + diff --git a/Docs/types/SortExtension.html b/Docs/types/SortExtension.html new file mode 100644 index 0000000..1900bdb --- /dev/null +++ b/Docs/types/SortExtension.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SortExtension + + +

Back to Server.Commands.Generic

+

SortExtension : BaseExtension

+ (static) BaseExtension <.cctor>b__0()
+ (static) void Initialize()
+ (ctor) SortExtension()
+ ExtensionInfo Info( get; )
+ virtual void Filter( ArrayList list )
+ virtual void Optimize( Mobile from, Type baseType, ref AssemblyEmitter assembly )
+ virtual void Parse( Mobile from, string[] arguments, int offset, int size )
+ + diff --git a/Docs/types/SortMethod.html b/Docs/types/SortMethod.html new file mode 100644 index 0000000..9e6953f --- /dev/null +++ b/Docs/types/SortMethod.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SortMethod + + +

Back to Server.Gumps

+

SortMethod (Enum)

+ Default = 0,
+ Name = 1,
+ Account = 2,
+ Address = 3
+ + diff --git a/Docs/types/SoulSeeker.html b/Docs/types/SoulSeeker.html new file mode 100644 index 0000000..763ede2 --- /dev/null +++ b/Docs/types/SoulSeeker.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SoulSeeker + + +

Back to Server.Items

+

SoulSeeker : RadiantScimitar, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) SoulSeeker()
+ (ctor) SoulSeeker( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SoulStone.html b/Docs/types/SoulStone.html new file mode 100644 index 0000000..900af86 --- /dev/null +++ b/Docs/types/SoulStone.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - SoulStone + + +

Back to Server.Items

+

SoulStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Derived Types: BlueSoulstone, RedSoulstone, SoulstoneFragment

+

Nested Types: ConfirmRemovalGump, ConfirmSkillGump, ConfirmTransferGump, ErrorGump, SelectSkillGump

+ (static) bool CheckCombat( Mobile m, TimeSpan time )
+ (ctor) SoulStone()
+ (ctor) SoulStone( Serial serial )
+ (ctor) SoulStone( string account )
+ (ctor) SoulStone( string account, int itemID )
+ (ctor) SoulStone( string account, int inactiveItemID, int activeItemID )
+ string Account( get; set; )
+ int ActiveItemID( get; set; )
+ int InactiveItemID( get; set; )
+ bool IsEmpty( get; )
+ int LabelNumber( get; )
+ string LastUserName( get; set; )
+ SecureLevel Level( get; set; )
+ SkillName Skill( get; set; )
+ double SkillValue( get; set; )
+ virtual bool CheckUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SoulstoneFragment.html b/Docs/types/SoulstoneFragment.html new file mode 100644 index 0000000..c6a7b2b --- /dev/null +++ b/Docs/types/SoulstoneFragment.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - SoulstoneFragment + + +

Back to Server.Items

+

SoulstoneFragment : SoulStone, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, IUsesRemaining

+ (ctor) SoulstoneFragment()
+ (ctor) SoulstoneFragment( Serial serial )
+ (ctor) SoulstoneFragment( int usesRemaining )
+ (ctor) SoulstoneFragment( string account )
+ (ctor) SoulstoneFragment( int usesRemaining, string account )
+ int LabelNumber( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual bool CheckUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SoulstoneFragmentToken.html b/Docs/types/SoulstoneFragmentToken.html new file mode 100644 index 0000000..668d77e --- /dev/null +++ b/Docs/types/SoulstoneFragmentToken.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SoulstoneFragmentToken + + +

Back to Server.Items

+

SoulstoneFragmentToken : PromotionalToken, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SoulstoneFragmentToken()
+ (ctor) SoulstoneFragmentToken( Serial serial )
+ TextDefinition ItemGumpName( get; )
+ TextDefinition ItemName( get; )
+ TextDefinition ItemReceiveMessage( get; )
+ virtual Item CreateItemFor( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SoundEffectTimer.html b/Docs/types/SoundEffectTimer.html new file mode 100644 index 0000000..76ae3e7 --- /dev/null +++ b/Docs/types/SoundEffectTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SoundEffectTimer + + +

Back to Server.Spells.Necromancy

+

(CurseWeaponSpell) - SoundEffectTimer : Timer

+ (ctor) SoundEffectTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SoundTimer.html b/Docs/types/SoundTimer.html new file mode 100644 index 0000000..98ef1d7 --- /dev/null +++ b/Docs/types/SoundTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SoundTimer + + +

Back to Server.Items

+

(DigTimer) - SoundTimer : Timer

+ (ctor) SoundTimer( Mobile from, int soundID )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Spam.html b/Docs/types/Spam.html new file mode 100644 index 0000000..e91352a --- /dev/null +++ b/Docs/types/Spam.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Spam + + +

Back to Server.Items

+

Spam : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Spam()
+ (ctor) Spam( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpawnDefinition.html b/Docs/types/SpawnDefinition.html new file mode 100644 index 0000000..d546e5f --- /dev/null +++ b/Docs/types/SpawnDefinition.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SpawnDefinition + + +

Back to Server.Regions

+

SpawnDefinition

+

Derived Types: SpawnGroup, SpawnType

+ (static) SpawnDefinition GetSpawnDefinition( XmlElement xml )
+ (ctor) SpawnDefinition()
+ virtual bool CanSpawn( Type[] types )
+ virtual ISpawnable Spawn( SpawnEntry entry )
+ + diff --git a/Docs/types/SpawnEntry.html b/Docs/types/SpawnEntry.html new file mode 100644 index 0000000..eff9555 --- /dev/null +++ b/Docs/types/SpawnEntry.html @@ -0,0 +1,53 @@ + + + RunUO Documentation - Class Overview - SpawnEntry + + +

Back to Server.Regions

+

SpawnEntry : ISpawner

+ (static) Hashtable Table( get; )
+ (static) void DelAllRegionSpawns_OnCommand( CommandEventArgs args )
+ (static) void DelRegionSpawns_OnCommand( CommandEventArgs args )
+ (static) BaseRegion GetCommandData( CommandEventArgs args )
+ (static) void Initialize()
+ (static) void Remove( GenericReader reader, int version )
+ (static) void RespawnAllRegions_OnCommand( CommandEventArgs args )
+ (static) void RespawnRegion_OnCommand( CommandEventArgs args )
+ (static) void StartAllRegionSpawns_OnCommand( CommandEventArgs args )
+ (static) void StartRegionSpawns_OnCommand( CommandEventArgs args )
+ (static) void StopAllRegionSpawns_OnCommand( CommandEventArgs args )
+ (static) void StopRegionSpawns_OnCommand( CommandEventArgs args )
+ (ctor) SpawnEntry( int id, BaseRegion region, Point3D home, int range, Direction direction, SpawnDefinition definition, int max, TimeSpan minSpawnTime, TimeSpan maxSpawnTime )
+ bool Complete( get; )
+ SpawnDefinition Definition( get; )
+ Direction Direction( get; )
+ Point3D HomeLocation( get; )
+ int HomeRange( get; )
+ int ID( get; )
+ int Max( get; )
+ TimeSpan MaxSpawnTime( get; )
+ TimeSpan MinSpawnTime( get; )
+ BaseRegion Region( get; )
+ bool RemoveIfUntamed( get; )
+ bool ReturnOnDeactivate( get; )
+ bool Running( get; )
+ List<ISpawnable> SpawnedObjects( get; )
+ bool Spawning( get; )
+ bool UnlinkOnTaming( get; )
+ void Add( ISpawnable spawn )
+ void CheckTimer()
+ void Delete()
+ void DeleteSpawnedObjects()
+ void Deserialize( GenericReader reader, int version )
+ void InternalDeleteSpawnedObjects()
+ Point3D RandomSpawnLocation( int spawnHeight, bool land, bool water )
+ TimeSpan RandomTime()
+ void Respawn()
+ void Serialize( GenericWriter writer )
+ virtual void Server.ISpawner.Remove( ISpawnable spawn )
+ void Spawn()
+ void Start()
+ void Stop()
+ void TimerCallback()
+ + diff --git a/Docs/types/SpawnGroup.html b/Docs/types/SpawnGroup.html new file mode 100644 index 0000000..5e5a1e9 --- /dev/null +++ b/Docs/types/SpawnGroup.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SpawnGroup + + +

Back to Server.Regions

+

SpawnGroup : SpawnDefinition

+ (static) Hashtable Table( get; )
+ (static) void Register( SpawnGroup group )
+ (ctor) SpawnGroup( string name, SpawnGroupElement[] elements )
+ SpawnGroupElement[] Elements( get; )
+ string Name( get; )
+ virtual bool CanSpawn( Type[] types )
+ virtual ISpawnable Spawn( SpawnEntry entry )
+ + diff --git a/Docs/types/SpawnGroupElement.html b/Docs/types/SpawnGroupElement.html new file mode 100644 index 0000000..25f8c40 --- /dev/null +++ b/Docs/types/SpawnGroupElement.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpawnGroupElement + + +

Back to Server.Regions

+

SpawnGroupElement

+ (ctor) SpawnGroupElement( SpawnDefinition spawnDefinition, int weight )
+ SpawnDefinition SpawnDefinition( get; )
+ int Weight( get; )
+ + diff --git a/Docs/types/SpawnItem.html b/Docs/types/SpawnItem.html new file mode 100644 index 0000000..a8b13e8 --- /dev/null +++ b/Docs/types/SpawnItem.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SpawnItem + + +

Back to Server.Regions

+

SpawnItem : SpawnType

+

Derived Types: SpawnTreasureChest

+ (static) SpawnItem Get( Type type )
+ (ctor) SpawnItem( Type type )
+ int Height( get; )
+ bool Land( get; )
+ bool Water( get; )
+ virtual ISpawnable Construct( SpawnEntry entry, Point3D loc, Map map )
+ virtual Item CreateItem()
+ virtual void Init()
+ + diff --git a/Docs/types/SpawnMobile.html b/Docs/types/SpawnMobile.html new file mode 100644 index 0000000..6cdaaa4 --- /dev/null +++ b/Docs/types/SpawnMobile.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SpawnMobile + + +

Back to Server.Regions

+

SpawnMobile : SpawnType

+ (static) SpawnMobile Get( Type type )
+ (ctor) SpawnMobile( Type type )
+ int Height( get; )
+ bool Land( get; )
+ bool Water( get; )
+ virtual ISpawnable Construct( SpawnEntry entry, Point3D loc, Map map )
+ virtual Mobile CreateMobile()
+ virtual void Init()
+ + diff --git a/Docs/types/SpawnPersistence.html b/Docs/types/SpawnPersistence.html new file mode 100644 index 0000000..4a575ce --- /dev/null +++ b/Docs/types/SpawnPersistence.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SpawnPersistence + + +

Back to Server.Regions

+

SpawnPersistence : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) void EnsureExistence()
+ (ctor) SpawnPersistence()
+ (ctor) SpawnPersistence( Serial serial )
+ string DefaultName( get; )
+ SpawnPersistence Instance( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpawnTimer.html b/Docs/types/SpawnTimer.html new file mode 100644 index 0000000..3b8b1b1 --- /dev/null +++ b/Docs/types/SpawnTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpawnTimer + + +

Back to Server.Items

+

(UnholyBone) - SpawnTimer : Timer

+ (ctor) SpawnTimer( Item item )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SpawnTreasureChest.html b/Docs/types/SpawnTreasureChest.html new file mode 100644 index 0000000..8e1def0 --- /dev/null +++ b/Docs/types/SpawnTreasureChest.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SpawnTreasureChest + + +

Back to Server.Regions

+

SpawnTreasureChest : SpawnItem

+ (ctor) SpawnTreasureChest( int itemID, TreasureLevel level )
+ int ItemID( get; )
+ TreasureLevel Level( get; )
+ virtual Item CreateItem()
+ virtual void Init()
+ + diff --git a/Docs/types/SpawnType.html b/Docs/types/SpawnType.html new file mode 100644 index 0000000..ddadd11 --- /dev/null +++ b/Docs/types/SpawnType.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SpawnType + + +

Back to Server.Regions

+

SpawnType : SpawnDefinition

+

Derived Types: SpawnItem, SpawnMobile

+ (ctor) SpawnType( Type type )
+ int Height( get; )
+ bool Land( get; )
+ Type Type( get; )
+ bool Water( get; )
+ virtual bool CanSpawn( Type[] types )
+ virtual ISpawnable Construct( SpawnEntry entry, Point3D loc, Map map )
+ void EnsureInit()
+ virtual void Init()
+ virtual ISpawnable Spawn( SpawnEntry entry )
+ + diff --git a/Docs/types/SpawnZLevel.html b/Docs/types/SpawnZLevel.html new file mode 100644 index 0000000..1d8fbfc --- /dev/null +++ b/Docs/types/SpawnZLevel.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpawnZLevel + + +

Back to Server.Regions

+

SpawnZLevel (Enum)

+ Lowest = 0,
+ Highest = 1,
+ Random = 2
+ + diff --git a/Docs/types/SpawnedOrcishLord.html b/Docs/types/SpawnedOrcishLord.html new file mode 100644 index 0000000..5ca13d6 --- /dev/null +++ b/Docs/types/SpawnedOrcishLord.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SpawnedOrcishLord + + +

Back to Server.Mobiles

+

SpawnedOrcishLord : OrcishLord, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SpawnedOrcishLord()
+ (ctor) SpawnedOrcishLord( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDeath( Container c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Spawner.html b/Docs/types/Spawner.html new file mode 100644 index 0000000..5172d83 --- /dev/null +++ b/Docs/types/Spawner.html @@ -0,0 +1,58 @@ + + + RunUO Documentation - Class Overview - Spawner + + +

Back to Server.Mobiles

+

Spawner : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISpawner

+

Nested Types: InternalTimer, WarnTimer

+ (static) ISpawnable Build( Type type, string[] args )
+ (static) string ParseType( string s )
+ (ctor) Spawner()
+ (ctor) Spawner( Serial serial )
+ (ctor) Spawner( string spawnName )
+ (ctor) Spawner( int amount, int minDelay, int maxDelay, int team, int homeRange, string spawnName )
+ (ctor) Spawner( int amount, TimeSpan minDelay, TimeSpan maxDelay, int team, int homeRange, List<String> spawnNames )
+ int Count( get; set; )
+ string DefaultName( get; )
+ bool Group( get; set; )
+ Point3D HomeLocation( get; )
+ int HomeRange( get; set; )
+ bool IsFull( get; )
+ TimeSpan MaxDelay( get; set; )
+ TimeSpan MinDelay( get; set; )
+ TimeSpan NextSpawn( get; set; )
+ bool Running( get; set; )
+ bool Server.ISpawner.UnlinkOnTaming( get; )
+ List<String> SpawnNames( get; set; )
+ int SpawnNamesCount( get; )
+ int Team( get; set; )
+ int WalkingRange( get; set; )
+ WayPoint WayPoint( get; set; )
+ void BringToHome()
+ int CountCreatures( string creatureName )
+ virtual ISpawnable CreateSpawnedObject( int index )
+ void Defrag()
+ virtual void Deserialize( GenericReader reader )
+ void DoTimer()
+ void DoTimer( TimeSpan delay )
+ virtual void GetProperties( ObjectPropertyList list )
+ Point3D GetSpawnPosition()
+ void InitSpawner( int amount, TimeSpan minDelay, TimeSpan maxDelay, int team, int homeRange, List<String> spawnNames )
+ virtual void OnAfterDuped( Item newItem )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ void OnTick()
+ void RemoveSpawned()
+ void RemoveSpawned( string creatureName )
+ void Respawn()
+ virtual void Serialize( GenericWriter writer )
+ virtual void Server.ISpawner.Remove( ISpawnable spawn )
+ void Spawn()
+ void Spawn( string creatureName )
+ void Spawn( int index )
+ void Start()
+ void Stop()
+ + diff --git a/Docs/types/SpawnerGump.html b/Docs/types/SpawnerGump.html new file mode 100644 index 0000000..443cfb0 --- /dev/null +++ b/Docs/types/SpawnerGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpawnerGump + + +

Back to Server.Mobiles

+

SpawnerGump : Gump

+ (ctor) SpawnerGump( Spawner spawner )
+ List<String> CreateArray( RelayInfo info, Mobile from )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/SpawnerType.html b/Docs/types/SpawnerType.html new file mode 100644 index 0000000..006d82c --- /dev/null +++ b/Docs/types/SpawnerType.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpawnerType + + +

Back to Server.Mobiles

+

SpawnerType

+ (static) Type GetType( string name )
+ (ctor) SpawnerType()
+ + diff --git a/Docs/types/SpeakCavePasswordObjective.html b/Docs/types/SpeakCavePasswordObjective.html new file mode 100644 index 0000000..aae1715 --- /dev/null +++ b/Docs/types/SpeakCavePasswordObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpeakCavePasswordObjective + + +

Back to Server.Engines.Quests.Necro

+

SpeakCavePasswordObjective : QuestObjective

+ (ctor) SpeakCavePasswordObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/SpeakPasswordEntry.html b/Docs/types/SpeakPasswordEntry.html new file mode 100644 index 0000000..07a7767 --- /dev/null +++ b/Docs/types/SpeakPasswordEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpeakPasswordEntry + + +

Back to Server.Engines.Quests.Necro

+

(Horus) - SpeakPasswordEntry : ContextMenuEntry

+ (ctor) SpeakPasswordEntry( Horus horus, PlayerMobile from, bool enabled )
+ virtual void OnClick()
+ + diff --git a/Docs/types/Spear.html b/Docs/types/Spear.html new file mode 100644 index 0000000..07af6a5 --- /dev/null +++ b/Docs/types/Spear.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Spear + + +

Back to Server.Items

+

Spear : BaseSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Spear()
+ (ctor) Spear( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpecialBeardDye.html b/Docs/types/SpecialBeardDye.html new file mode 100644 index 0000000..fd66c15 --- /dev/null +++ b/Docs/types/SpecialBeardDye.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SpecialBeardDye + + +

Back to Server.Items

+

SpecialBeardDye : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SpecialBeardDye()
+ (ctor) SpecialBeardDye( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpecialBeardDyeEntry.html b/Docs/types/SpecialBeardDyeEntry.html new file mode 100644 index 0000000..0019d50 --- /dev/null +++ b/Docs/types/SpecialBeardDyeEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpecialBeardDyeEntry + + +

Back to Server.Items

+

(SpecialBeardDyeGump) - SpecialBeardDyeEntry

+ (ctor) SpecialBeardDyeEntry( string name, int hueStart, int hueCount )
+ int HueCount( get; )
+ int HueStart( get; )
+ string Name( get; )
+ + diff --git a/Docs/types/SpecialBeardDyeGump.html b/Docs/types/SpecialBeardDyeGump.html new file mode 100644 index 0000000..b3986ca --- /dev/null +++ b/Docs/types/SpecialBeardDyeGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpecialBeardDyeGump + + +

Back to Server.Items

+

SpecialBeardDyeGump : Gump

+

Nested Types: SpecialBeardDyeEntry

+ (ctor) SpecialBeardDyeGump( SpecialBeardDye dye )
+ virtual void OnResponse( NetState from, RelayInfo info )
+ + diff --git a/Docs/types/SpecialDyeTub.html b/Docs/types/SpecialDyeTub.html new file mode 100644 index 0000000..342af25 --- /dev/null +++ b/Docs/types/SpecialDyeTub.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SpecialDyeTub + + +

Back to Server.Items

+

SpecialDyeTub : DyeTub, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, IRewardItem

+ (ctor) SpecialDyeTub()
+ (ctor) SpecialDyeTub( Serial serial )
+ CustomHuePicker CustomHuePicker( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpecialEndConversation.html b/Docs/types/SpecialEndConversation.html new file mode 100644 index 0000000..b9bedec --- /dev/null +++ b/Docs/types/SpecialEndConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpecialEndConversation + + +

Back to Server.Engines.Quests.Naturalist

+

SpecialEndConversation : QuestConversation

+ (ctor) SpecialEndConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/SpecialFishingNet.html b/Docs/types/SpecialFishingNet.html new file mode 100644 index 0000000..12813ef --- /dev/null +++ b/Docs/types/SpecialFishingNet.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - SpecialFishingNet + + +

Back to Server.Items

+

SpecialFishingNet : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: FabledFishingNet

+ (static) bool FullValidation( Map map, int x, int y )
+ (static) bool ValidateDeepWater( Map map, int x, int y )
+ (ctor) SpecialFishingNet()
+ (ctor) SpecialFishingNet( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoEffect( object state )
+ virtual void FinishEffect( Point3D p, Map map, Mobile from )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual int GetSpawnCount()
+ virtual void OnDoubleClick( Mobile from )
+ void OnTarget( Mobile from, object obj )
+ virtual void Serialize( GenericWriter writer )
+ void Spawn( Point3D p, Map map, BaseCreature spawn )
+ + diff --git a/Docs/types/SpecialHairDye.html b/Docs/types/SpecialHairDye.html new file mode 100644 index 0000000..e687637 --- /dev/null +++ b/Docs/types/SpecialHairDye.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SpecialHairDye + + +

Back to Server.Items

+

SpecialHairDye : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SpecialHairDye()
+ (ctor) SpecialHairDye( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpecialHairDyeEntry.html b/Docs/types/SpecialHairDyeEntry.html new file mode 100644 index 0000000..609e1db --- /dev/null +++ b/Docs/types/SpecialHairDyeEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpecialHairDyeEntry + + +

Back to Server.Items

+

(SpecialHairDyeGump) - SpecialHairDyeEntry

+ (ctor) SpecialHairDyeEntry( string name, int hueStart, int hueCount )
+ int HueCount( get; )
+ int HueStart( get; )
+ string Name( get; )
+ + diff --git a/Docs/types/SpecialHairDyeGump.html b/Docs/types/SpecialHairDyeGump.html new file mode 100644 index 0000000..90f4362 --- /dev/null +++ b/Docs/types/SpecialHairDyeGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpecialHairDyeGump + + +

Back to Server.Items

+

SpecialHairDyeGump : Gump

+

Nested Types: SpecialHairDyeEntry

+ (ctor) SpecialHairDyeGump( SpecialHairDye dye )
+ virtual void OnResponse( NetState from, RelayInfo info )
+ + diff --git a/Docs/types/SpecialMove.html b/Docs/types/SpecialMove.html new file mode 100644 index 0000000..f6b3840 --- /dev/null +++ b/Docs/types/SpecialMove.html @@ -0,0 +1,44 @@ + + + RunUO Documentation - Class Overview - SpecialMove + + +

Back to Server.Spells

+

SpecialMove

+

Derived Types: NinjaMove, SamuraiMove

+

Nested Types: SpecialMoveContext, SpecialMoveTimer

+ (static) Dictionary<Mobile,SpecialMove> Table( get; )
+ (static) void AddContext( Mobile m, SpecialMoveContext context )
+ (static) void ClearAllMoves( Mobile m )
+ (static) void ClearCurrentMove( Mobile m )
+ (static) SpecialMoveContext GetContext( Mobile m )
+ (static) bool GetContext( Mobile m, Type type )
+ (static) SpecialMove GetCurrentMove( Mobile m )
+ (static) void RemoveContext( Mobile m )
+ (static) bool SetCurrentMove( Mobile m, SpecialMove move )
+ (ctor) SpecialMove()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ bool BlockedByAnimalForm( get; )
+ bool DelayedContext( get; )
+ SkillName MoveSkill( get; )
+ double RequiredSkill( get; )
+ bool ValidatesDuringHit( get; )
+ virtual void CheckGain( Mobile m )
+ virtual bool CheckMana( Mobile from, bool consume )
+ virtual bool CheckSkills( Mobile m )
+ virtual int GetAccuracyBonus( Mobile attacker )
+ virtual double GetDamageScalar( Mobile attacker, Mobile defender )
+ virtual double GetPropertyBonus( Mobile attacker )
+ virtual bool IgnoreArmor( Mobile attacker )
+ virtual bool OnBeforeDamage( Mobile attacker, Mobile defender )
+ virtual bool OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual void OnClearMove( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual void OnMiss( Mobile attacker, Mobile defender )
+ virtual void OnUse( Mobile from )
+ virtual int ScaleMana( Mobile m, int mana )
+ virtual void SetContext( Mobile from )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/SpecialMoveContext.html b/Docs/types/SpecialMoveContext.html new file mode 100644 index 0000000..3323ade --- /dev/null +++ b/Docs/types/SpecialMoveContext.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpecialMoveContext + + +

Back to Server.Spells

+

(SpecialMove) - SpecialMoveContext

+ (ctor) SpecialMoveContext( Timer timer, Type type )
+ Timer Timer( get; )
+ Type Type( get; )
+ + diff --git a/Docs/types/SpecialMoveTimer.html b/Docs/types/SpecialMoveTimer.html new file mode 100644 index 0000000..76d63b5 --- /dev/null +++ b/Docs/types/SpecialMoveTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpecialMoveTimer + + +

Back to Server.Spells

+

(SpecialMove) - SpecialMoveTimer : Timer

+ (ctor) SpecialMoveTimer( Mobile from )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SpecialScroll.html b/Docs/types/SpecialScroll.html new file mode 100644 index 0000000..7522995 --- /dev/null +++ b/Docs/types/SpecialScroll.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - SpecialScroll + + +

Back to Server.Items

+

SpecialScroll : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: PowerScroll, ScrollofAlacrity, ScrollofTranscendence, StatCapScroll

+

Nested Types: InternalGump

+ (ctor) SpecialScroll( Serial serial )
+ (ctor) SpecialScroll( SkillName skill, double value )
+ string DefaultTitle( get; )
+ bool InheritsItem( get; )
+ int Message( get; )
+ SkillName Skill( get; set; )
+ int Title( get; )
+ double Value( get; set; )
+ virtual bool CanUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual string GetName()
+ virtual string GetNameLocalized()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void Use( Mobile from )
+ + diff --git a/Docs/types/SpectralArmour.html b/Docs/types/SpectralArmour.html new file mode 100644 index 0000000..4cd3b77 --- /dev/null +++ b/Docs/types/SpectralArmour.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SpectralArmour + + +

Back to Server.Mobiles

+

SpectralArmour : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SpectralArmour()
+ (ctor) SpectralArmour( Serial serial )
+ bool DeleteCorpseOnDeath( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Spectre.html b/Docs/types/Spectre.html new file mode 100644 index 0000000..d6b6a7e --- /dev/null +++ b/Docs/types/Spectre.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Spectre + + +

Back to Server.Mobiles

+

Spectre : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Spectre()
+ (ctor) Spectre( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpeechEntry.html b/Docs/types/SpeechEntry.html new file mode 100644 index 0000000..f0e5132 --- /dev/null +++ b/Docs/types/SpeechEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpeechEntry + + +

Back to Server.Commands

+

(Docs) - SpeechEntry

+ (ctor) SpeechEntry( int index )
+ int Index( get; )
+ List<String> Strings( get; )
+ + diff --git a/Docs/types/SpeechEntrySorter.html b/Docs/types/SpeechEntrySorter.html new file mode 100644 index 0000000..c019c5e --- /dev/null +++ b/Docs/types/SpeechEntrySorter.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpeechEntrySorter + + +

Back to Server.Commands

+

(Docs) - SpeechEntrySorter : IComparer<SpeechEntry>

+ (ctor) SpeechEntrySorter()
+ virtual int Compare( SpeechEntry x, SpeechEntry y )
+ + diff --git a/Docs/types/SpeechEventArgs.html b/Docs/types/SpeechEventArgs.html new file mode 100644 index 0000000..2385eff --- /dev/null +++ b/Docs/types/SpeechEventArgs.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SpeechEventArgs + + +

Back to Server

+

SpeechEventArgs : EventArgs

+ (ctor) SpeechEventArgs( Mobile mobile, string speech, MessageType type, int hue, int[] keywords )
+ bool Blocked( get; set; )
+ bool Handled( get; set; )
+ int Hue( get; )
+ int[] Keywords( get; )
+ Mobile Mobile( get; )
+ string Speech( get; set; )
+ MessageType Type( get; )
+ bool HasKeyword( int keyword )
+ + diff --git a/Docs/types/SpeechEventHandler.html b/Docs/types/SpeechEventHandler.html new file mode 100644 index 0000000..9fbf100 --- /dev/null +++ b/Docs/types/SpeechEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpeechEventHandler + + +

Back to Server

+

SpeechEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SpeechEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( SpeechEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( SpeechEventArgs e )
+ + diff --git a/Docs/types/SpeechLog.html b/Docs/types/SpeechLog.html new file mode 100644 index 0000000..99e1549 --- /dev/null +++ b/Docs/types/SpeechLog.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SpeechLog + + +

Back to Server.Engines.Help

+

SpeechLog : IEnumerable<SpeechLogEntry>, IEnumerable

+

Nested Types: SpeechLogTarget

+ (static) void Initialize()
+ (static) void SpeechLog_OnCommand( CommandEventArgs e )
+ (ctor) SpeechLog()
+ int Count( get; )
+ void Add( SpeechLogEntry entry )
+ void Add( Mobile from, string speech )
+ void Clean()
+ void CopyTo( SpeechLogEntry[] array, int index )
+ virtual IEnumerator<SpeechLogEntry> System.Collections.Generic.IEnumerable.GetEnumerator()
+ virtual IEnumerator System.Collections.IEnumerable.GetEnumerator()
+ + diff --git a/Docs/types/SpeechLogEntry.html b/Docs/types/SpeechLogEntry.html new file mode 100644 index 0000000..9396f96 --- /dev/null +++ b/Docs/types/SpeechLogEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpeechLogEntry + + +

Back to Server.Engines.Help

+

SpeechLogEntry

+ (ctor) SpeechLogEntry( Mobile from, string speech )
+ DateTime Created( get; )
+ Mobile From( get; )
+ string Speech( get; )
+ + diff --git a/Docs/types/SpeechLogGump.html b/Docs/types/SpeechLogGump.html new file mode 100644 index 0000000..965bde2 --- /dev/null +++ b/Docs/types/SpeechLogGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpeechLogGump + + +

Back to Server.Engines.Help

+

SpeechLogGump : Gump

+ (ctor) SpeechLogGump( Mobile player, List<SpeechLogEntry> log )
+ (ctor) SpeechLogGump( Mobile player, SpeechLog log )
+ (ctor) SpeechLogGump( Mobile player, List<SpeechLogEntry> log, int page )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SpeechLogTarget.html b/Docs/types/SpeechLogTarget.html new file mode 100644 index 0000000..2077b5f --- /dev/null +++ b/Docs/types/SpeechLogTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpeechLogTarget + + +

Back to Server.Engines.Help

+

(SpeechLog) - SpeechLogTarget : Target

+ (ctor) SpeechLogTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/SpeedControl.html b/Docs/types/SpeedControl.html new file mode 100644 index 0000000..8d82c63 --- /dev/null +++ b/Docs/types/SpeedControl.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SpeedControl + + +

Back to Server.Network

+

SpeedControl : Packet

+ (ctor) SpeedControl( int speedControl )
+ + diff --git a/Docs/types/SpeedInfo.html b/Docs/types/SpeedInfo.html new file mode 100644 index 0000000..f422a82 --- /dev/null +++ b/Docs/types/SpeedInfo.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SpeedInfo + + +

Back to Server

+

SpeedInfo

+ (static) bool Contains( object obj )
+ (static) bool GetSpeeds( object obj, ref double activeSpeed, ref double passiveSpeed )
+ (static) void LoadTable()
+ (ctor) SpeedInfo( double activeSpeed, double passiveSpeed, Type[] types )
+ double ActiveSpeed( get; set; )
+ double PassiveSpeed( get; set; )
+ Type[] Types( get; set; )
+ + diff --git a/Docs/types/Spell.html b/Docs/types/Spell.html new file mode 100644 index 0000000..07b86dc --- /dev/null +++ b/Docs/types/Spell.html @@ -0,0 +1,85 @@ + + + RunUO Documentation - Class Overview - Spell + + +

Back to Server.Spells

+

Spell : ISpell

+

Derived Types: ArcanistSpell, EtherealSpell, MagerySpell, NecromancerSpell, NinjaSpell, PaladinSpell, PetSummoningSpell, SamuraiSpell, SpiritSpeakSpell

+

Nested Types: AnimTimer, CastTimer, DelayedDamageContextWrapper

+ (ctor) Spell( Mobile caster, Item scroll, SpellInfo info )
+ bool BlockedByAnimalForm( get; )
+ bool BlockedByHorrificBeast( get; )
+ bool BlocksMovement( get; )
+ TimeSpan CastDelayBase( get; )
+ double CastDelayFastScalar( get; )
+ TimeSpan CastDelayMinimum( get; )
+ double CastDelaySecondsPerTick( get; )
+ Mobile Caster( get; )
+ int CastRecoveryBase( get; )
+ int CastRecoveryFastScalar( get; )
+ int CastRecoveryMinimum( get; )
+ int CastRecoveryPerSecond( get; )
+ SkillName CastSkill( get; )
+ bool CheckNextSpellTime( get; )
+ bool ClearHandsOnCast( get; )
+ SkillName DamageSkill( get; )
+ bool DelayedDamage( get; )
+ bool DelayedDamageStacking( get; )
+ SpellInfo Info( get; )
+ bool IsCasting( get; )
+ string Mantra( get; )
+ string Name( get; )
+ Type[] Reagents( get; )
+ bool RevealOnCast( get; )
+ Item Scroll( get; )
+ bool ShowHandMovement( get; )
+ DateTime StartCastTime( get; )
+ SpellState State( get; set; )
+ bool Cast()
+ bool CheckBSequence( Mobile target )
+ bool CheckBSequence( Mobile target, bool allowDead )
+ virtual bool CheckCast()
+ virtual bool CheckDisturb( DisturbType type, bool firstCircle, bool resistable )
+ virtual bool CheckFizzle()
+ bool CheckHSequence( Mobile target )
+ virtual bool CheckSequence()
+ virtual int ComputeKarmaAward()
+ virtual bool ConsumeReagents()
+ void Disturb( DisturbType type )
+ void Disturb( DisturbType type, bool firstCircle, bool resistable )
+ virtual void DoFizzle()
+ virtual void DoHurtFizzle()
+ virtual void FinishSequence()
+ virtual TimeSpan GetCastDelay()
+ virtual TimeSpan GetCastRecovery()
+ virtual void GetCastSkills( out double min, out double max )
+ virtual int GetDamageFixed( Mobile m )
+ virtual double GetDamageScalar( Mobile target )
+ virtual double GetDamageSkill( Mobile m )
+ virtual TimeSpan GetDisturbRecovery()
+ virtual int GetInscribeFixed( Mobile m )
+ virtual double GetInscribeSkill( Mobile m )
+ virtual int GetMana()
+ virtual int GetNewAosDamage( int bonus, int dice, int sides, Mobile singleTarget )
+ virtual int GetNewAosDamage( int bonus, int dice, int sides, bool playerVsPlayer )
+ virtual int GetNewAosDamage( int bonus, int dice, int sides, bool playerVsPlayer, double scalar )
+ virtual double GetResistSkill( Mobile m )
+ virtual double GetSlayerDamageScalar( Mobile defender )
+ void HarmfulSpell( Mobile m )
+ virtual void OnBeginCast()
+ virtual void OnCast()
+ virtual bool OnCasterEquiping( Item item )
+ virtual void OnCasterHurt()
+ virtual void OnCasterKilled()
+ virtual bool OnCasterMoving( Direction d )
+ virtual bool OnCasterUsingObject( object o )
+ virtual bool OnCastInTown( Region r )
+ virtual void OnConnectionChanged()
+ virtual void OnDisturb( DisturbType type, bool message )
+ void RemoveDelayedDamageContext( Mobile m )
+ virtual void SayMantra()
+ virtual int ScaleMana( int mana )
+ void StartDelayedDamageContext( Mobile m, Timer t )
+ + diff --git a/Docs/types/SpellCircle.html b/Docs/types/SpellCircle.html new file mode 100644 index 0000000..3eef273 --- /dev/null +++ b/Docs/types/SpellCircle.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SpellCircle + + +

Back to Server.Spells

+

SpellCircle (Enum)

+ First = 0,
+ Second = 1,
+ Third = 2,
+ Fourth = 3,
+ Fifth = 4,
+ Sixth = 5,
+ Seventh = 6,
+ Eighth = 7
+ + diff --git a/Docs/types/SpellCombo.html b/Docs/types/SpellCombo.html new file mode 100644 index 0000000..973fb14 --- /dev/null +++ b/Docs/types/SpellCombo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpellCombo + + +

Back to Server.Factions

+

SpellCombo

+ (static) Spell Process( Mobile mob, Mobile targ, ref SpellCombo combo, ref int index, ref DateTime releaseTime )
+ (ctor) SpellCombo( int mana, ComboEntry[] entries )
+ ComboEntry[] Entries( get; )
+ int Mana( get; )
+ + diff --git a/Docs/types/SpellDamageTimer.html b/Docs/types/SpellDamageTimer.html new file mode 100644 index 0000000..5862490 --- /dev/null +++ b/Docs/types/SpellDamageTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpellDamageTimer + + +

Back to Server.Spells

+

(SpellHelper) - SpellDamageTimer : Timer

+ (ctor) SpellDamageTimer( Spell s, Mobile target, Mobile from, int damage, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SpellDamageTimerAOS.html b/Docs/types/SpellDamageTimerAOS.html new file mode 100644 index 0000000..63ea4b3 --- /dev/null +++ b/Docs/types/SpellDamageTimerAOS.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpellDamageTimerAOS + + +

Back to Server.Spells

+

(SpellHelper) - SpellDamageTimerAOS : Timer

+ (ctor) SpellDamageTimerAOS( Spell s, Mobile target, Mobile from, int damage, int phys, int fire, int cold, int pois, int nrgy, TimeSpan delay, DFAlgorithm dfa )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SpellHelper.html b/Docs/types/SpellHelper.html new file mode 100644 index 0000000..f5b936d --- /dev/null +++ b/Docs/types/SpellHelper.html @@ -0,0 +1,76 @@ + + + RunUO Documentation - Class Overview - SpellHelper + + +

Back to Server.Spells

+

SpellHelper

+

Nested Types: SpellDamageTimer, SpellDamageTimerAOS, TravelValidator

+ (static) bool DisableSkillCheck( get; set; )
+ (static) bool AddStatBonus( Mobile caster, Mobile target, StatType type )
+ (static) bool AddStatBonus( Mobile caster, Mobile target, StatType type, int bonus, TimeSpan duration )
+ (static) bool AddStatCurse( Mobile caster, Mobile target, StatType type )
+ (static) bool AddStatCurse( Mobile caster, Mobile target, StatType type, int curse, TimeSpan duration )
+ (static) bool AddStatOffset( Mobile m, StatType type, int offset, TimeSpan duration )
+ (static) bool AdjustField( ref Point3D p, Map map, int height, bool mobsBlock )
+ (static) bool CanRevealCaster( Mobile m )
+ (static) bool CheckCombat( Mobile m )
+ (static) bool CheckMulti( Point3D p, Map map )
+ (static) bool CheckMulti( Point3D p, Map map, bool houses )
+ (static) bool CheckMulti( Point3D p, Map map, bool houses, int housingrange )
+ (static) void CheckReflect( int circle, Mobile caster, ref Mobile target )
+ (static) void CheckReflect( int circle, ref Mobile caster, ref Mobile target )
+ (static) bool CheckTown( IPoint3D loc, Mobile caster )
+ (static) bool CheckTown( Point3D loc, Mobile caster )
+ (static) bool CheckTravel( Mobile caster, TravelCheckType type )
+ (static) bool CheckTravel( Map map, Point3D loc, TravelCheckType type )
+ (static) bool CheckTravel( Mobile caster, Map map, Point3D loc, TravelCheckType type )
+ (static) void Damage( TimeSpan delay, Mobile target, double damage )
+ (static) void Damage( Spell spell, Mobile target, double damage )
+ (static) void Damage( TimeSpan delay, Mobile target, Mobile from, double damage )
+ (static) void Damage( Spell spell, TimeSpan delay, Mobile target, Mobile from, double damage )
+ (static) void Damage( Spell spell, Mobile target, double damage, int phys, int fire, int cold, int pois, int nrgy )
+ (static) void Damage( TimeSpan delay, Mobile target, double damage, int phys, int fire, int cold, int pois, int nrgy )
+ (static) void Damage( TimeSpan delay, Mobile target, Mobile from, double damage, int phys, int fire, int cold, int pois, int nrgy )
+ (static) void Damage( Spell spell, Mobile target, double damage, int phys, int fire, int cold, int pois, int nrgy, DFAlgorithm dfa )
+ (static) void Damage( TimeSpan delay, Mobile target, Mobile from, double damage, int phys, int fire, int cold, int pois, int nrgy, DFAlgorithm dfa )
+ (static) void Damage( Spell spell, TimeSpan delay, Mobile target, Mobile from, double damage, int phys, int fire, int cold, int pois, int nrgy, DFAlgorithm dfa )
+ (static) void DoLeech( int damageGiven, Mobile from, Mobile target )
+ (static) bool FindValidSpawnLocation( Map map, ref Point3D p, bool surroundingsOnly )
+ (static) TimeSpan GetDamageDelayForSpell( Spell sp )
+ (static) TimeSpan GetDuration( Mobile caster, Mobile target )
+ (static) Guild GetGuildFor( Mobile m )
+ (static) int GetOffset( Mobile caster, Mobile target, StatType type, bool curse )
+ (static) double GetOffsetScalar( Mobile caster, Mobile target, bool curse )
+ (static) void GetSurfaceTop( ref IPoint3D p )
+ (static) void Heal( int amount, Mobile target, Mobile from )
+ (static) void Heal( int amount, Mobile target, Mobile from, bool message )
+ (static) bool IsAnyT2A( Map map, Point3D loc )
+ (static) bool IsChampionSpawn( Map map, Point3D loc )
+ (static) bool IsCrystalCave( Map map, Point3D loc )
+ (static) bool IsDoomFerry( Map map, Point3D loc )
+ (static) bool IsDoomGauntlet( Map map, Point3D loc )
+ (static) bool IsFactionStronghold( Map map, Point3D loc )
+ (static) bool IsFeluccaDungeon( Map map, Point3D loc )
+ (static) bool IsFeluccaSolenHive( Map map, Point3D loc )
+ (static) bool IsFeluccaT2A( Map map, Point3D loc )
+ (static) bool IsFeluccaWind( Map map, Point3D loc )
+ (static) bool IsGuardianRoom( Map map, Point3D loc )
+ (static) bool IsHeartwood( Map map, Point3D loc )
+ (static) bool IsIlshenar( Map map, Point3D loc )
+ (static) bool IsInvalid( Map map, Point3D loc )
+ (static) bool IsLampRoom( Map map, Point3D loc )
+ (static) bool IsSolenHiveLoc( Point3D loc )
+ (static) bool IsTokunoDungeon( Map map, Point3D loc )
+ (static) bool IsTown( IPoint3D loc, Mobile caster )
+ (static) bool IsTown( Point3D loc, Mobile caster )
+ (static) bool IsTrammelSolenHive( Map map, Point3D loc )
+ (static) bool IsTrammelWind( Map map, Point3D loc )
+ (static) bool IsWindLoc( Point3D loc )
+ (static) void SendInvalidMessage( Mobile caster, TravelCheckType type )
+ (static) void Summon( BaseCreature creature, Mobile caster, int sound, TimeSpan duration, bool scaleDuration, bool scaleStats )
+ (static) void Turn( Mobile from, object to )
+ (static) bool ValidIndirectTarget( Mobile from, Mobile to )
+ (ctor) SpellHelper()
+ + diff --git a/Docs/types/SpellInfo.html b/Docs/types/SpellInfo.html new file mode 100644 index 0000000..5a84f98 --- /dev/null +++ b/Docs/types/SpellInfo.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - SpellInfo + + +

Back to Server.Spells

+

SpellInfo

+ (ctor) SpellInfo( string name, string mantra, Type[] regs )
+ (ctor) SpellInfo( string name, string mantra, bool allowTown, Type[] regs )
+ (ctor) SpellInfo( string name, string mantra, int action, Type[] regs )
+ (ctor) SpellInfo( string name, string mantra, int action, int handEffect, Type[] regs )
+ (ctor) SpellInfo( string name, string mantra, int action, bool allowTown, Type[] regs )
+ (ctor) SpellInfo( string name, string mantra, int action, int handEffect, bool allowTown, Type[] regs )
+ (ctor) SpellInfo( string name, string mantra, int action, int leftHandEffect, int rightHandEffect, bool allowTown, Type[] regs )
+ int Action( get; set; )
+ bool AllowTown( get; set; )
+ int[] Amounts( get; set; )
+ int LeftHandEffect( get; set; )
+ string Mantra( get; set; )
+ string Name( get; set; )
+ Type[] Reagents( get; set; )
+ int RightHandEffect( get; set; )
+ + diff --git a/Docs/types/SpellRegistry.html b/Docs/types/SpellRegistry.html new file mode 100644 index 0000000..1aee053 --- /dev/null +++ b/Docs/types/SpellRegistry.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SpellRegistry + + +

Back to Server.Spells

+

SpellRegistry

+ (static) int Count( get; )
+ (static) Dictionary<Int32,SpecialMove> SpecialMoves( get; )
+ (static) Type[] Types( get; )
+ (static) int GetRegistryNumber( SpecialMove s )
+ (static) int GetRegistryNumber( ISpell s )
+ (static) int GetRegistryNumber( Type type )
+ (static) SpecialMove GetSpecialMove( int spellID )
+ (static) Spell NewSpell( int spellID, Mobile caster, Item scroll )
+ (static) Spell NewSpell( string name, Mobile caster, Item scroll )
+ (static) void Register( int spellID, Type type )
+ (ctor) SpellRegistry()
+ + diff --git a/Docs/types/SpellScroll.html b/Docs/types/SpellScroll.html new file mode 100644 index 0000000..7350252 --- /dev/null +++ b/Docs/types/SpellScroll.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SpellScroll + + +

Back to Server.Items

+

SpellScroll : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+

Derived Types: AgilityScroll, AnimateDeadScroll, ArcaneCircleScroll, ArcaneEmpowermentScroll, ArchCureScroll, ArchProtectionScroll, AttuneWeaponScroll, BladeSpiritsScroll, BlessScroll, BloodOathScroll, ChainLightningScroll, ClumsyScroll, CorpseSkinScroll, CreateFoodScroll, CunningScroll, CureScroll, CurseScroll, CurseWeaponScroll, DispelFieldScroll, DispelScroll, DryadAllureScroll, EarthquakeScroll, EnergyBoltScroll, EnergyFieldScroll, EnergyVortexScroll, EssenceOfWindScroll, EtherealVoyageScroll, EvilOmenScroll, ExorcismScroll, ExplosionScroll, FeeblemindScroll, FireballScroll, FireFieldScroll, FlamestrikeScroll, GateTravelScroll, GiftOfLifeScroll, GiftOfRenewalScroll, GreaterHealScroll, HarmScroll, HealScroll, HorrificBeastScroll, ImmolatingWeaponScroll, IncognitoScroll, InvisibilityScroll, LichFormScroll, LightningScroll, MagicArrowScroll, MagicLockScroll, MagicReflectScroll, MagicTrapScroll, MagicUnTrapScroll, ManaDrainScroll, ManaVampireScroll, MarkScroll, MassCurseScroll, MassDispelScroll, MeteorSwarmScroll, MindBlastScroll, MindRotScroll, NatureFuryScroll, NightSightScroll, PainSpikeScroll, ParalyzeFieldScroll, ParalyzeScroll, PoisonFieldScroll, PoisonScroll, PoisonStrikeScroll, PolymorphScroll, ProtectionScroll, ReactiveArmorScroll, ReaperFormScroll, RecallScroll, ResurrectionScroll, RevealScroll, StrangleScroll, StrengthScroll, SummonAirElementalScroll, SummonCreatureScroll, SummonDaemonScroll, SummonEarthElementalScroll, SummonFamiliarScroll, SummonFeyScroll, SummonFiendScroll, SummonFireElementalScroll, SummonWaterElementalScroll, TelekinisisScroll, TeleportScroll, ThunderstormScroll, UnlockScroll, VampiricEmbraceScroll, VengefulSpiritScroll, WallOfStoneScroll, WeakenScroll, WildfireScroll, WitherScroll, WordOfDeathScroll, WraithFormScroll

+ (ctor) SpellScroll( Serial serial )
+ (ctor) SpellScroll( int spellID, int itemID )
+ (ctor) SpellScroll( int spellID, int itemID, int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ int SpellID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpellState.html b/Docs/types/SpellState.html new file mode 100644 index 0000000..7b1a0c5 --- /dev/null +++ b/Docs/types/SpellState.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SpellState + + +

Back to Server.Spells

+

SpellState (Enum)

+ None = 0,
+ Casting = 1,
+ Sequencing = 2
+ + diff --git a/Docs/types/SpellWovenBritches.html b/Docs/types/SpellWovenBritches.html new file mode 100644 index 0000000..7c0c46b --- /dev/null +++ b/Docs/types/SpellWovenBritches.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SpellWovenBritches + + +

Back to Server.Items

+

SpellWovenBritches : LeafLegs, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) SpellWovenBritches()
+ (ctor) SpellWovenBritches( Serial serial )
+ int BaseFireResistance( get; )
+ int BasePoisonResistance( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Spellbook.html b/Docs/types/Spellbook.html new file mode 100644 index 0000000..26ba151 --- /dev/null +++ b/Docs/types/Spellbook.html @@ -0,0 +1,59 @@ + + + RunUO Documentation - Class Overview - Spellbook + + +

Back to Server.Items

+

Spellbook : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+

Derived Types: BookOfBushido, BookOfChivalry, BookOfNinjitsu, NecromancerSpellbook, SpellweavingBook, TomeOfEnlightenment, TomeOfLostKnowledge

+ (static) void AllSpells_OnCommand( CommandEventArgs e )
+ (static) void AllSpells_OnTarget( Mobile from, object obj )
+ (static) void EventSink_CastSpellRequest( CastSpellRequestEventArgs e )
+ (static) void EventSink_OpenSpellbookRequest( OpenSpellbookRequestEventArgs e )
+ (static) Spellbook Find( Mobile from, int spellID )
+ (static) Spellbook Find( Mobile from, int spellID, SpellbookType type )
+ (static) List<Spellbook> FindAllSpellbooks( Mobile from )
+ (static) Spellbook FindArcanist( Mobile from )
+ (static) Spellbook FindEquippedSpellbook( Mobile from )
+ (static) Spellbook FindNecromancer( Mobile from )
+ (static) Spellbook FindNinja( Mobile from )
+ (static) Spellbook FindPaladin( Mobile from )
+ (static) Spellbook FindRegular( Mobile from )
+ (static) Spellbook FindSamurai( Mobile from )
+ (static) Spellbook FindSpellbookInList( List<Spellbook> list, Mobile from, int spellID, SpellbookType type )
+ (static) SpellbookType GetTypeForSpell( int spellID )
+ (static) void Initialize()
+ (static) bool ValidateSpellbook( Spellbook book, int spellID, SpellbookType type )
+ (ctor) Spellbook()
+ (ctor) Spellbook( ulong content )
+ (ctor) Spellbook( Serial serial )
+ (ctor) Spellbook( ulong content, int itemID )
+ AosAttributes Attributes( get; set; )
+ int BookCount( get; )
+ int BookOffset( get; )
+ ulong Content( get; set; )
+ Mobile Crafter( get; set; )
+ bool DisplayLootType( get; )
+ bool DisplayWeight( get; )
+ AosSkillBonuses SkillBonuses( get; set; )
+ SlayerName Slayer( get; set; )
+ SlayerName Slayer2( get; set; )
+ SpellbookType SpellbookType( get; )
+ int SpellCount( get; )
+ virtual bool AllowEquipedCast( Mobile from )
+ virtual bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ virtual bool CanEquip( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ void DisplayTo( Mobile to )
+ virtual void GetProperties( ObjectPropertyList list )
+ bool HasSpell( int spellID )
+ virtual void OnAdded( object parent )
+ virtual void OnAfterDuped( Item newItem )
+ virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnRemoved( object parent )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpellbookContent.html b/Docs/types/SpellbookContent.html new file mode 100644 index 0000000..70d94e5 --- /dev/null +++ b/Docs/types/SpellbookContent.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SpellbookContent + + +

Back to Server.Network

+

SpellbookContent : Packet

+ (ctor) SpellbookContent( int count, int offset, ulong content, Item item )
+ + diff --git a/Docs/types/SpellbookContent6017.html b/Docs/types/SpellbookContent6017.html new file mode 100644 index 0000000..3d5221b --- /dev/null +++ b/Docs/types/SpellbookContent6017.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SpellbookContent6017 + + +

Back to Server.Network

+

SpellbookContent6017 : Packet

+ (ctor) SpellbookContent6017( int count, int offset, ulong content, Item item )
+ + diff --git a/Docs/types/SpellbookType.html b/Docs/types/SpellbookType.html new file mode 100644 index 0000000..3fb7534 --- /dev/null +++ b/Docs/types/SpellbookType.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SpellbookType + + +

Back to Server.Items

+

SpellbookType (Enum)

+ Regular = 0,
+ Necromancer = 1,
+ Paladin = 2,
+ Ninja = 3,
+ Samurai = 4,
+ Arcanist = 5,
+ Invalid = -1
+ + diff --git a/Docs/types/SpellweavingBook.html b/Docs/types/SpellweavingBook.html new file mode 100644 index 0000000..98c4bba --- /dev/null +++ b/Docs/types/SpellweavingBook.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SpellweavingBook + + +

Back to Server.Items

+

SpellweavingBook : Spellbook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) SpellweavingBook()
+ (ctor) SpellweavingBook( ulong content )
+ (ctor) SpellweavingBook( Serial serial )
+ int BookCount( get; )
+ int BookOffset( get; )
+ SpellbookType SpellbookType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpidersSilk.html b/Docs/types/SpidersSilk.html new file mode 100644 index 0000000..edc4953 --- /dev/null +++ b/Docs/types/SpidersSilk.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SpidersSilk + + +

Back to Server.Items

+

SpidersSilk : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SpidersSilk()
+ (ctor) SpidersSilk( Serial serial )
+ (ctor) SpidersSilk( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpikeTrap.html b/Docs/types/SpikeTrap.html new file mode 100644 index 0000000..a674e56 --- /dev/null +++ b/Docs/types/SpikeTrap.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - SpikeTrap + + +

Back to Server.Items

+

SpikeTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) int GetBaseID( SpikeTrapType type )
+ (static) int GetExtendedID( SpikeTrapType type )
+ (static) int GetExtendedOffset( SpikeTrapType type )
+ (ctor) SpikeTrap()
+ (ctor) SpikeTrap( Serial serial )
+ (ctor) SpikeTrap( SpikeTrapType type )
+ bool Extended( get; set; )
+ bool PassivelyTriggered( get; )
+ TimeSpan PassiveTriggerDelay( get; )
+ int PassiveTriggerRange( get; )
+ TimeSpan ResetDelay( get; )
+ SpikeTrapType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSpikeExtended()
+ virtual void OnSpikeRetracted()
+ virtual void OnTrigger( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpikeTrapType.html b/Docs/types/SpikeTrapType.html new file mode 100644 index 0000000..01f30c4 --- /dev/null +++ b/Docs/types/SpikeTrapType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpikeTrapType + + +

Back to Server.Items

+

SpikeTrapType (Enum)

+ WestWall = 0,
+ NorthWall = 1,
+ WestFloor = 2,
+ NorthFloor = 3
+ + diff --git a/Docs/types/SpinCallback.html b/Docs/types/SpinCallback.html new file mode 100644 index 0000000..630ab79 --- /dev/null +++ b/Docs/types/SpinCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpinCallback + + +

Back to Server.Items

+

SpinCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) SpinCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( ISpinningWheel sender, Mobile from, int hue, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( ISpinningWheel sender, Mobile from, int hue )
+ + diff --git a/Docs/types/SpinTimer.html b/Docs/types/SpinTimer.html new file mode 100644 index 0000000..aa74947 --- /dev/null +++ b/Docs/types/SpinTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpinTimer + + +

Back to Server.Items

+

(SpinningwheelSouthAddon) - SpinTimer : Timer

+ (ctor) SpinTimer( SpinningwheelSouthAddon wheel, SpinCallback callback, Mobile from, int hue )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SpinedHides.html b/Docs/types/SpinedHides.html new file mode 100644 index 0000000..a5d15ac --- /dev/null +++ b/Docs/types/SpinedHides.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SpinedHides + + +

Back to Server.Items

+

SpinedHides : BaseHides, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IScissorable

+ (ctor) SpinedHides()
+ (ctor) SpinedHides( int amount )
+ (ctor) SpinedHides( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpinedLeather.html b/Docs/types/SpinedLeather.html new file mode 100644 index 0000000..76813c6 --- /dev/null +++ b/Docs/types/SpinedLeather.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SpinedLeather + + +

Back to Server.Items

+

SpinedLeather : BaseLeather, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SpinedLeather()
+ (ctor) SpinedLeather( int amount )
+ (ctor) SpinedLeather( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpinningHourglass.html b/Docs/types/SpinningHourglass.html new file mode 100644 index 0000000..e4b8548 --- /dev/null +++ b/Docs/types/SpinningHourglass.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpinningHourglass + + +

Back to Server.Items

+

SpinningHourglass : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SpinningHourglass()
+ (ctor) SpinningHourglass( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpinningwheelEastAddon.html b/Docs/types/SpinningwheelEastAddon.html new file mode 100644 index 0000000..f6f5cdf --- /dev/null +++ b/Docs/types/SpinningwheelEastAddon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - SpinningwheelEastAddon + + +

Back to Server.Items

+

SpinningwheelEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, ISpinningWheel

+

Nested Types: SpinTimer

+ (ctor) SpinningwheelEastAddon()
+ (ctor) SpinningwheelEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ bool Spinning( get; )
+ virtual void BeginSpin( SpinCallback callback, Mobile from, int hue )
+ virtual void Deserialize( GenericReader reader )
+ void EndSpin( SpinCallback callback, Mobile from, int hue )
+ virtual void OnComponentLoaded( AddonComponent c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpinningwheelEastDeed.html b/Docs/types/SpinningwheelEastDeed.html new file mode 100644 index 0000000..77b57ac --- /dev/null +++ b/Docs/types/SpinningwheelEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SpinningwheelEastDeed + + +

Back to Server.Items

+

SpinningwheelEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SpinningwheelEastDeed()
+ (ctor) SpinningwheelEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpinningwheelSouthAddon.html b/Docs/types/SpinningwheelSouthAddon.html new file mode 100644 index 0000000..09a8d5d --- /dev/null +++ b/Docs/types/SpinningwheelSouthAddon.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - SpinningwheelSouthAddon + + +

Back to Server.Items

+

SpinningwheelSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, ISpinningWheel

+

Nested Types: SpinTimer

+ (ctor) SpinningwheelSouthAddon()
+ (ctor) SpinningwheelSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ bool Spinning( get; )
+ virtual void BeginSpin( SpinCallback callback, Mobile from, int hue )
+ virtual void Deserialize( GenericReader reader )
+ void EndSpin( SpinCallback callback, Mobile from, int hue )
+ virtual void OnComponentLoaded( AddonComponent c )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpinningwheelSouthDeed.html b/Docs/types/SpinningwheelSouthDeed.html new file mode 100644 index 0000000..b0904c5 --- /dev/null +++ b/Docs/types/SpinningwheelSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SpinningwheelSouthDeed + + +

Back to Server.Items

+

SpinningwheelSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SpinningwheelSouthDeed()
+ (ctor) SpinningwheelSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpiritOfTheTotem.html b/Docs/types/SpiritOfTheTotem.html new file mode 100644 index 0000000..a186eb9 --- /dev/null +++ b/Docs/types/SpiritOfTheTotem.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - SpiritOfTheTotem + + +

Back to Server.Items

+

SpiritOfTheTotem : BearMask, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) SpiritOfTheTotem()
+ (ctor) SpiritOfTheTotem( Serial serial )
+ int ArtifactRarity( get; )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpiritSpeak.html b/Docs/types/SpiritSpeak.html new file mode 100644 index 0000000..8c1f91e --- /dev/null +++ b/Docs/types/SpiritSpeak.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpiritSpeak + + +

Back to Server.SkillHandlers

+

SpiritSpeak

+

Nested Types: SpiritSpeakSpell, SpiritSpeakTimer

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) SpiritSpeak()
+ + diff --git a/Docs/types/SpiritSpeakSpell.html b/Docs/types/SpiritSpeakSpell.html new file mode 100644 index 0000000..b0b515d --- /dev/null +++ b/Docs/types/SpiritSpeakSpell.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - SpiritSpeakSpell + + +

Back to Server.SkillHandlers

+

(SpiritSpeak) - SpiritSpeakSpell : Spell, ISpell

+ (ctor) SpiritSpeakSpell( Mobile caster )
+ bool BlockedByHorrificBeast( get; )
+ TimeSpan CastDelayBase( get; )
+ double CastDelayFastScalar( get; )
+ bool CheckNextSpellTime( get; )
+ bool ClearHandsOnCast( get; )
+ virtual bool CheckDisturb( DisturbType type, bool checkFirst, bool resistable )
+ virtual bool CheckFizzle()
+ virtual bool ConsumeReagents()
+ virtual int GetMana()
+ virtual void OnCast()
+ virtual void OnCasterHurt()
+ virtual void OnDisturb( DisturbType type, bool message )
+ virtual void SayMantra()
+ + diff --git a/Docs/types/SpiritSpeakTimer.html b/Docs/types/SpiritSpeakTimer.html new file mode 100644 index 0000000..f1d3742 --- /dev/null +++ b/Docs/types/SpiritSpeakTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SpiritSpeakTimer + + +

Back to Server.SkillHandlers

+

(SpiritSpeak) - SpiritSpeakTimer : Timer

+ (ctor) SpiritSpeakTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SplitCoconut.html b/Docs/types/SplitCoconut.html new file mode 100644 index 0000000..112ad12 --- /dev/null +++ b/Docs/types/SplitCoconut.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SplitCoconut + + +

Back to Server.Items

+

SplitCoconut : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SplitCoconut()
+ (ctor) SplitCoconut( int amount )
+ (ctor) SplitCoconut( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpoolOfThread.html b/Docs/types/SpoolOfThread.html new file mode 100644 index 0000000..e62febd --- /dev/null +++ b/Docs/types/SpoolOfThread.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SpoolOfThread + + +

Back to Server.Items

+

SpoolOfThread : BaseClothMaterial, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) SpoolOfThread()
+ (ctor) SpoolOfThread( int amount )
+ (ctor) SpoolOfThread( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Spoon.html b/Docs/types/Spoon.html new file mode 100644 index 0000000..0878c35 --- /dev/null +++ b/Docs/types/Spoon.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Spoon + + +

Back to Server.Items

+

Spoon : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Spoon()
+ (ctor) Spoon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpoonLeft.html b/Docs/types/SpoonLeft.html new file mode 100644 index 0000000..ed7582c --- /dev/null +++ b/Docs/types/SpoonLeft.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpoonLeft + + +

Back to Server.Items

+

SpoonLeft : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SpoonLeft()
+ (ctor) SpoonLeft( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SpoonRight.html b/Docs/types/SpoonRight.html new file mode 100644 index 0000000..6adcbb9 --- /dev/null +++ b/Docs/types/SpoonRight.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SpoonRight + + +

Back to Server.Items

+

SpoonRight : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SpoonRight()
+ (ctor) SpoonRight( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Spreadsheet.html b/Docs/types/Spreadsheet.html new file mode 100644 index 0000000..a62bf8e --- /dev/null +++ b/Docs/types/Spreadsheet.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Spreadsheet + + +

Back to Server.Multis

+

Spreadsheet

+

Nested Types: ColumnInfo

+ (ctor) Spreadsheet( string path )
+ DataRecord[] Records( get; )
+ int GetColumnID( string name )
+ string[] ReadLine( StreamReader ip )
+ + diff --git a/Docs/types/Springs.html b/Docs/types/Springs.html new file mode 100644 index 0000000..adbe8e6 --- /dev/null +++ b/Docs/types/Springs.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Springs + + +

Back to Server.Items

+

Springs : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Springs()
+ (ctor) Springs( int amount )
+ (ctor) Springs( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Spyglass.html b/Docs/types/Spyglass.html new file mode 100644 index 0000000..ea618b6 --- /dev/null +++ b/Docs/types/Spyglass.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Spyglass + + +

Back to Server.Items

+

Spyglass : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Spyglass()
+ (ctor) Spyglass( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquareGozaMatEastAddon.html b/Docs/types/SquareGozaMatEastAddon.html new file mode 100644 index 0000000..223eacf --- /dev/null +++ b/Docs/types/SquareGozaMatEastAddon.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SquareGozaMatEastAddon + + +

Back to Server.Items

+

SquareGozaMatEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SquareGozaMatEastAddon()
+ (ctor) SquareGozaMatEastAddon( Serial serial )
+ (ctor) SquareGozaMatEastAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ int LabelNumber( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquareGozaMatEastDeed.html b/Docs/types/SquareGozaMatEastDeed.html new file mode 100644 index 0000000..ef6055a --- /dev/null +++ b/Docs/types/SquareGozaMatEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SquareGozaMatEastDeed + + +

Back to Server.Items

+

SquareGozaMatEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SquareGozaMatEastDeed()
+ (ctor) SquareGozaMatEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquareGozaMatSouthAddon.html b/Docs/types/SquareGozaMatSouthAddon.html new file mode 100644 index 0000000..fa82ced --- /dev/null +++ b/Docs/types/SquareGozaMatSouthAddon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SquareGozaMatSouthAddon + + +

Back to Server.Items

+

SquareGozaMatSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SquareGozaMatSouthAddon()
+ (ctor) SquareGozaMatSouthAddon( Serial serial )
+ (ctor) SquareGozaMatSouthAddon( int hue )
+ BaseAddonDeed Deed( get; )
+ bool RetainDeedHue( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquareGozaMatSouthDeed.html b/Docs/types/SquareGozaMatSouthDeed.html new file mode 100644 index 0000000..7696eac --- /dev/null +++ b/Docs/types/SquareGozaMatSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SquareGozaMatSouthDeed + + +

Back to Server.Items

+

SquareGozaMatSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SquareGozaMatSouthDeed()
+ (ctor) SquareGozaMatSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Squash.html b/Docs/types/Squash.html new file mode 100644 index 0000000..16014be --- /dev/null +++ b/Docs/types/Squash.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Squash + + +

Back to Server.Items

+

Squash : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Squash()
+ (ctor) Squash( int amount )
+ (ctor) Squash( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Squirrel.html b/Docs/types/Squirrel.html new file mode 100644 index 0000000..e2bf01f --- /dev/null +++ b/Docs/types/Squirrel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Squirrel + + +

Back to Server.Mobiles

+

Squirrel : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Squirrel()
+ (ctor) Squirrel( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquirrelFormTalisman.html b/Docs/types/SquirrelFormTalisman.html new file mode 100644 index 0000000..3f6776f --- /dev/null +++ b/Docs/types/SquirrelFormTalisman.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SquirrelFormTalisman + + +

Back to Server.Items

+

SquirrelFormTalisman : BaseFormTalisman, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITokunoDyable

+ (ctor) SquirrelFormTalisman()
+ (ctor) SquirrelFormTalisman( Serial serial )
+ TalismanForm Form( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquirrelStatueEastAddon.html b/Docs/types/SquirrelStatueEastAddon.html new file mode 100644 index 0000000..236d2d8 --- /dev/null +++ b/Docs/types/SquirrelStatueEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SquirrelStatueEastAddon + + +

Back to Server.Items

+

SquirrelStatueEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SquirrelStatueEastAddon()
+ (ctor) SquirrelStatueEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquirrelStatueEastDeed.html b/Docs/types/SquirrelStatueEastDeed.html new file mode 100644 index 0000000..366fd05 --- /dev/null +++ b/Docs/types/SquirrelStatueEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SquirrelStatueEastDeed + + +

Back to Server.Items

+

SquirrelStatueEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SquirrelStatueEastDeed()
+ (ctor) SquirrelStatueEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquirrelStatueSouthAddon.html b/Docs/types/SquirrelStatueSouthAddon.html new file mode 100644 index 0000000..426cfe4 --- /dev/null +++ b/Docs/types/SquirrelStatueSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SquirrelStatueSouthAddon + + +

Back to Server.Items

+

SquirrelStatueSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SquirrelStatueSouthAddon()
+ (ctor) SquirrelStatueSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SquirrelStatueSouthDeed.html b/Docs/types/SquirrelStatueSouthDeed.html new file mode 100644 index 0000000..ad25396 --- /dev/null +++ b/Docs/types/SquirrelStatueSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SquirrelStatueSouthDeed + + +

Back to Server.Items

+

SquirrelStatueSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SquirrelStatueSouthDeed()
+ (ctor) SquirrelStatueSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StableEntry.html b/Docs/types/StableEntry.html new file mode 100644 index 0000000..c17e532 --- /dev/null +++ b/Docs/types/StableEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - StableEntry + + +

Back to Server.Mobiles

+

(AnimalTrainer) - StableEntry : ContextMenuEntry

+ (ctor) StableEntry( AnimalTrainer trainer, Mobile from )
+ virtual void OnClick()
+ + diff --git a/Docs/types/StableTarget.html b/Docs/types/StableTarget.html new file mode 100644 index 0000000..65edab8 --- /dev/null +++ b/Docs/types/StableTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - StableTarget + + +

Back to Server.Mobiles

+

(AnimalTrainer) - StableTarget : Target

+ (ctor) StableTarget( AnimalTrainer trainer )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/StackEntry.html b/Docs/types/StackEntry.html new file mode 100644 index 0000000..e7c2642 --- /dev/null +++ b/Docs/types/StackEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - StackEntry + + +

Back to Server.Gumps

+

(PropertiesGump) - StackEntry

+ (ctor) StackEntry( object obj, PropertyInfo prop )
+ + diff --git a/Docs/types/StaffHistory.html b/Docs/types/StaffHistory.html new file mode 100644 index 0000000..74695cd --- /dev/null +++ b/Docs/types/StaffHistory.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - StaffHistory + + +

Back to Server.Engines.Reports

+

StaffHistory : PersistableObject

+ (static) PersistableObject Construct()
+ (static) int GetPageCount( StaffInfo staff, DateTime min, DateTime max )
+ (static) int GetPageCount( PageInfoCollection pages, PageResolution res, DateTime min, DateTime max )
+ (ctor) StaffHistory()
+ PageInfoCollection Pages( get; set; )
+ QueueStatusCollection QueueStats( get; set; )
+ Hashtable StaffInfo( get; set; )
+ PersistableType TypeID( get; )
+ Hashtable UserInfo( get; set; )
+ void AddPage( PageInfo info )
+ PieChart[] ChartTotalPages( StaffInfo[] staff, TimeSpan ts, string title, string fname )
+ virtual void DeserializeChildren( PersistanceReader ip )
+ StaffInfo[] GetStaff()
+ StaffInfo GetStaffInfo( string account )
+ UserInfo GetUserInfo( string account )
+ BarGraph GraphHourlyPages( StaffInfo staff )
+ BarGraph GraphHourlyPages( PageInfoCollection pages, PageResolution res, string title, string fname )
+ BarGraph GraphQueueStatus()
+ void Load()
+ void Render( ObjectCollection objects )
+ Report ReportTotalPages( StaffInfo[] staff, TimeSpan ts, string title )
+ void Save()
+ virtual void SerializeChildren( PersistanceWriter op )
+ + diff --git a/Docs/types/StaffInfo.html b/Docs/types/StaffInfo.html new file mode 100644 index 0000000..63b3985 --- /dev/null +++ b/Docs/types/StaffInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - StaffInfo + + +

Back to Server.Engines.Reports

+

StaffInfo : BaseInfo, IComparable

+ (ctor) StaffInfo( string account )
+ + diff --git a/Docs/types/StaffOfPower.html b/Docs/types/StaffOfPower.html new file mode 100644 index 0000000..9b483a3 --- /dev/null +++ b/Docs/types/StaffOfPower.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - StaffOfPower + + +

Back to Server.Items

+

StaffOfPower : BlackStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) StaffOfPower()
+ (ctor) StaffOfPower( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StaffOfTheMagi.html b/Docs/types/StaffOfTheMagi.html new file mode 100644 index 0000000..803f4fa --- /dev/null +++ b/Docs/types/StaffOfTheMagi.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - StaffOfTheMagi + + +

Back to Server.Items

+

StaffOfTheMagi : BlackStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) StaffOfTheMagi()
+ (ctor) StaffOfTheMagi( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Stage.html b/Docs/types/Stage.html new file mode 100644 index 0000000..42c4529 --- /dev/null +++ b/Docs/types/Stage.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Stage + + +

Back to Server.Engines.MyRunUO

+

Stage (Enum)

+ CollectingMobiles = 0,
+ DumpingMobiles = 1,
+ CollectingGuilds = 2,
+ DumpingGuilds = 3,
+ Complete = 4
+ + diff --git a/Docs/types/StainedOoze.html b/Docs/types/StainedOoze.html new file mode 100644 index 0000000..419b1ff --- /dev/null +++ b/Docs/types/StainedOoze.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - StainedOoze + + +

Back to Server.Mobiles

+

StainedOoze : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StainedOoze()
+ (ctor) StainedOoze( Serial serial )
+ (ctor) StainedOoze( bool corrosive )
+ bool Corrosive( get; set; )
+ virtual void Damage( Mobile m )
+ void Damage_Callback( object state )
+ bool DamageSelector( ref bool z, ref int hp, ref int mhp )
+ virtual void Decay()
+ virtual void Deserialize( GenericReader reader )
+ bool IsUsingDurability( IDurability item )
+ virtual void Morph()
+ virtual bool OnMoveOff( Mobile m )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ virtual void StopTimer( Mobile m )
+ IDurability ValidDurabilityEquipment( Mobile m, Item item )
+ bool ValidMobile( Mobile m )
+ + diff --git a/Docs/types/StamTimer.html b/Docs/types/StamTimer.html new file mode 100644 index 0000000..d296d66 --- /dev/null +++ b/Docs/types/StamTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - StamTimer + + +

Back to Server

+

(Mobile) - StamTimer : Timer

+ (ctor) StamTimer( Mobile m )
+ virtual void OnTick()
+ + diff --git a/Docs/types/StandardPlateKabuto.html b/Docs/types/StandardPlateKabuto.html new file mode 100644 index 0000000..2fa570f --- /dev/null +++ b/Docs/types/StandardPlateKabuto.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - StandardPlateKabuto + + +

Back to Server.Items

+

StandardPlateKabuto : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StandardPlateKabuto()
+ (ctor) StandardPlateKabuto( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StandardSaveStrategy.html b/Docs/types/StandardSaveStrategy.html new file mode 100644 index 0000000..73ae9e7 --- /dev/null +++ b/Docs/types/StandardSaveStrategy.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - StandardSaveStrategy + + +

Back to Server

+

StandardSaveStrategy : SaveStrategy

+

Derived Types: DualSaveStrategy

+ (ctor) StandardSaveStrategy()
+ string Name( get; )
+ bool PermitBackgroundWrite( get; set; )
+ bool UseSequentialWriters( get; )
+ virtual void ProcessDecay()
+ virtual void Save( SaveMetrics metrics, bool permitBackgroundWrite )
+ void SaveGuilds( SaveMetrics metrics )
+ void SaveItems( SaveMetrics metrics )
+ void SaveMobiles( SaveMetrics metrics )
+ + diff --git a/Docs/types/StandingBrokenChairAddon.html b/Docs/types/StandingBrokenChairAddon.html new file mode 100644 index 0000000..78cc0f3 --- /dev/null +++ b/Docs/types/StandingBrokenChairAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StandingBrokenChairAddon + + +

Back to Server.Items

+

StandingBrokenChairAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) StandingBrokenChairAddon()
+ (ctor) StandingBrokenChairAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StandingBrokenChairComponent.html b/Docs/types/StandingBrokenChairComponent.html new file mode 100644 index 0000000..933a246 --- /dev/null +++ b/Docs/types/StandingBrokenChairComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StandingBrokenChairComponent + + +

Back to Server.Items

+

StandingBrokenChairComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) StandingBrokenChairComponent()
+ (ctor) StandingBrokenChairComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StandingBrokenChairDeed.html b/Docs/types/StandingBrokenChairDeed.html new file mode 100644 index 0000000..407c795 --- /dev/null +++ b/Docs/types/StandingBrokenChairDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StandingBrokenChairDeed + + +

Back to Server.Items

+

StandingBrokenChairDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StandingBrokenChairDeed()
+ (ctor) StandingBrokenChairDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StarRoomGate.html b/Docs/types/StarRoomGate.html new file mode 100644 index 0000000..241889e --- /dev/null +++ b/Docs/types/StarRoomGate.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - StarRoomGate + + +

Back to Server.Items

+

StarRoomGate : Moongate, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer

+ (ctor) StarRoomGate()
+ (ctor) StarRoomGate( Serial serial )
+ (ctor) StarRoomGate( bool decays )
+ (ctor) StarRoomGate( bool decays, Point3D loc, Map map )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StarSapphire.html b/Docs/types/StarSapphire.html new file mode 100644 index 0000000..221e7dd --- /dev/null +++ b/Docs/types/StarSapphire.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StarSapphire + + +

Back to Server.Items

+

StarSapphire : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StarSapphire()
+ (ctor) StarSapphire( int amount )
+ (ctor) StarSapphire( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Stat.html b/Docs/types/Stat.html new file mode 100644 index 0000000..109459e --- /dev/null +++ b/Docs/types/Stat.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Stat + + +

Back to Server.Misc

+

Stat (Enum)

+ Str = 0,
+ Dex = 1,
+ Int = 2
+ + diff --git a/Docs/types/StatCapScroll.html b/Docs/types/StatCapScroll.html new file mode 100644 index 0000000..cab6cb1 --- /dev/null +++ b/Docs/types/StatCapScroll.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - StatCapScroll + + +

Back to Server.Items

+

StatCapScroll : SpecialScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatCapScroll()
+ (ctor) StatCapScroll( Serial serial )
+ (ctor) StatCapScroll( int value )
+ string DefaultTitle( get; )
+ int Message( get; )
+ int Title( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual bool CanUse( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void Use( Mobile from )
+ + diff --git a/Docs/types/StatLockInfo.html b/Docs/types/StatLockInfo.html new file mode 100644 index 0000000..1e203a1 --- /dev/null +++ b/Docs/types/StatLockInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - StatLockInfo + + +

Back to Server.Network

+

StatLockInfo : Packet

+ (ctor) StatLockInfo( Mobile m )
+ + diff --git a/Docs/types/StatLockType.html b/Docs/types/StatLockType.html new file mode 100644 index 0000000..b32a7f1 --- /dev/null +++ b/Docs/types/StatLockType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - StatLockType + + +

Back to Server

+

StatLockType (Enum)

+ Up = 0,
+ Down = 1,
+ Locked = 2
+ + diff --git a/Docs/types/StatMod.html b/Docs/types/StatMod.html new file mode 100644 index 0000000..8a85074 --- /dev/null +++ b/Docs/types/StatMod.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatMod + + +

Back to Server

+

StatMod

+ (ctor) StatMod( StatType type, string name, int offset, TimeSpan duration )
+ string Name( get; )
+ int Offset( get; )
+ StatType Type( get; )
+ bool HasElapsed()
+ + diff --git a/Docs/types/StatType.html b/Docs/types/StatType.html new file mode 100644 index 0000000..6c3153f --- /dev/null +++ b/Docs/types/StatType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StatType + + +

Back to Server

+

StatType (Enum)

+ Str = 0x00000001,
+ Dex = 0x00000002,
+ Int = 0x00000004,
+ All = 0x00000007
+ + diff --git a/Docs/types/State.html b/Docs/types/State.html new file mode 100644 index 0000000..c2b0796 --- /dev/null +++ b/Docs/types/State.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - State + + +

Back to Server.Network

+

State (Enum)

+ Inactive = 0x00000000,
+ Static = 0x00000001,
+ Acquired = 0x00000002,
+ Accessed = 0x00000004,
+ Buffered = 0x00000008,
+ Warned = 0x00000010
+ + diff --git a/Docs/types/StateInfo.html b/Docs/types/StateInfo.html new file mode 100644 index 0000000..1f0569c --- /dev/null +++ b/Docs/types/StateInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - StateInfo + + +

Back to Server

+

(Statics) - StateInfo

+ (ctor) StateInfo( Map map, Point3D start, Point3D end )
+ + diff --git a/Docs/types/Static.html b/Docs/types/Static.html new file mode 100644 index 0000000..763ab38 --- /dev/null +++ b/Docs/types/Static.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Static + + +

Back to Server.Items

+

Static : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: CharacterStatuePlinth, LocalizedStatic

+ (ctor) Static()
+ (ctor) Static( int itemID )
+ (ctor) Static( Serial serial )
+ (ctor) Static( int itemID, int count )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StaticTarget.html b/Docs/types/StaticTarget.html new file mode 100644 index 0000000..2b044a1 --- /dev/null +++ b/Docs/types/StaticTarget.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - StaticTarget + + +

Back to Server.Targeting

+

StaticTarget : IPoint3D, IPoint2D

+ (ctor) StaticTarget( Point3D location, int itemID )
+ TileFlag Flags( get; )
+ int ItemID( get; )
+ Point3D Location( get; )
+ string Name( get; )
+ int X( get; )
+ int Y( get; )
+ int Z( get; )
+ + diff --git a/Docs/types/StaticTile.html b/Docs/types/StaticTile.html new file mode 100644 index 0000000..80664a9 --- /dev/null +++ b/Docs/types/StaticTile.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - StaticTile + + +

Back to Server

+

StaticTile

+ (ctor) StaticTile( ushort id, sbyte z )
+ (ctor) StaticTile( ushort id, byte x, byte y, sbyte z, short hue )
+ int Height( get; )
+ int Hue( get; set; )
+ int ID( get; )
+ int X( get; set; )
+ int Y( get; set; )
+ int Z( get; set; )
+ void Set( ushort id, sbyte z )
+ void Set( ushort id, byte x, byte y, sbyte z, short hue )
+ + diff --git a/Docs/types/Statics.html b/Docs/types/Statics.html new file mode 100644 index 0000000..4bf525a --- /dev/null +++ b/Docs/types/Statics.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - Statics + + +

Back to Server

+

Statics

+

Nested Types: DeltaState, StateInfo

+ (static) void DoUnfreeze( Map map, ref bool badDataFile, ref int totalUnfrozen )
+ (static) void DoUnfreeze( Map map, Point2D start, Point2D end, ref bool badDataFile, ref int totalUnfrozen )
+ (static) void Freeze( Mobile from, Map targetMap, Point3D start3d, Point3D end3d )
+ (static) void Freeze_OnCommand( CommandEventArgs e )
+ (static) void FreezeBox_Callback( Mobile from, Map map, Point3D start, Point3D end, object state )
+ (static) void FreezeMap_OnCommand( CommandEventArgs e )
+ (static) void FreezeWarning_Callback( Mobile from, bool okay, object state )
+ (static) void FreezeWorld_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (static) FileStream OpenWrite( FileStream orig )
+ (static) StaticTile[] ReadStaticBlock( BinaryReader idxReader, FileStream mulStream, int x, int y, int width, int height, out int count )
+ (static) void SendWarning( Mobile m, string header, string baseWarning, Map map, Point3D start, Point3D end, WarningGumpCallback callback )
+ (static) void Unfreeze( Mobile from, Map map, Point3D start, Point3D end )
+ (static) void Unfreeze_OnCommand( CommandEventArgs e )
+ (static) void UnfreezeBox_Callback( Mobile from, Map map, Point3D start, Point3D end, object state )
+ (static) void UnfreezeMap_OnCommand( CommandEventArgs e )
+ (static) void UnfreezeWarning_Callback( Mobile from, bool okay, object state )
+ (static) void UnfreezeWorld_OnCommand( CommandEventArgs e )
+ (ctor) Statics()
+ + diff --git a/Docs/types/StatueEast.html b/Docs/types/StatueEast.html new file mode 100644 index 0000000..7e13b59 --- /dev/null +++ b/Docs/types/StatueEast.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatueEast + + +

Back to Server.Items

+

StatueEast : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatueEast()
+ (ctor) StatueEast( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatueEast2.html b/Docs/types/StatueEast2.html new file mode 100644 index 0000000..1b68401 --- /dev/null +++ b/Docs/types/StatueEast2.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatueEast2 + + +

Back to Server.Items

+

StatueEast2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatueEast2()
+ (ctor) StatueEast2( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatueMaterial.html b/Docs/types/StatueMaterial.html new file mode 100644 index 0000000..f639983 --- /dev/null +++ b/Docs/types/StatueMaterial.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StatueMaterial + + +

Back to Server.Mobiles

+

StatueMaterial (Enum)

+ Antique = 0,
+ Dark = 1,
+ Medium = 2,
+ Light = 3
+ + diff --git a/Docs/types/StatueNorth.html b/Docs/types/StatueNorth.html new file mode 100644 index 0000000..b4384a2 --- /dev/null +++ b/Docs/types/StatueNorth.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatueNorth + + +

Back to Server.Items

+

StatueNorth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatueNorth()
+ (ctor) StatueNorth( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatuePegasus.html b/Docs/types/StatuePegasus.html new file mode 100644 index 0000000..eaf330a --- /dev/null +++ b/Docs/types/StatuePegasus.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatuePegasus + + +

Back to Server.Items

+

StatuePegasus : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatuePegasus()
+ (ctor) StatuePegasus( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatuePegasus2.html b/Docs/types/StatuePegasus2.html new file mode 100644 index 0000000..e04c7c3 --- /dev/null +++ b/Docs/types/StatuePegasus2.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatuePegasus2 + + +

Back to Server.Items

+

StatuePegasus2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatuePegasus2()
+ (ctor) StatuePegasus2( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatuePose.html b/Docs/types/StatuePose.html new file mode 100644 index 0000000..54403fa --- /dev/null +++ b/Docs/types/StatuePose.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StatuePose + + +

Back to Server.Mobiles

+

StatuePose (Enum)

+ Ready = 0,
+ Casting = 1,
+ Salute = 2,
+ AllPraiseMe = 3,
+ Fighting = 4,
+ HandsOnHips = 5
+ + diff --git a/Docs/types/StatueSouth.html b/Docs/types/StatueSouth.html new file mode 100644 index 0000000..c485423 --- /dev/null +++ b/Docs/types/StatueSouth.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatueSouth + + +

Back to Server.Items

+

StatueSouth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatueSouth()
+ (ctor) StatueSouth( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatueSouth2.html b/Docs/types/StatueSouth2.html new file mode 100644 index 0000000..d25d90f --- /dev/null +++ b/Docs/types/StatueSouth2.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatueSouth2 + + +

Back to Server.Items

+

StatueSouth2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatueSouth2()
+ (ctor) StatueSouth2( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatueSouthEast.html b/Docs/types/StatueSouthEast.html new file mode 100644 index 0000000..f3fb825 --- /dev/null +++ b/Docs/types/StatueSouthEast.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatueSouthEast + + +

Back to Server.Items

+

StatueSouthEast : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatueSouthEast()
+ (ctor) StatueSouthEast( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatueType.html b/Docs/types/StatueType.html new file mode 100644 index 0000000..09527bf --- /dev/null +++ b/Docs/types/StatueType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - StatueType + + +

Back to Server.Mobiles

+

StatueType (Enum)

+ Marble = 0,
+ Jade = 1,
+ Bronze = 2
+ + diff --git a/Docs/types/StatueWest.html b/Docs/types/StatueWest.html new file mode 100644 index 0000000..adbb6f9 --- /dev/null +++ b/Docs/types/StatueWest.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StatueWest + + +

Back to Server.Items

+

StatueWest : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StatueWest()
+ (ctor) StatueWest( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatuetteDyeTub.html b/Docs/types/StatuetteDyeTub.html new file mode 100644 index 0000000..c1d439f --- /dev/null +++ b/Docs/types/StatuetteDyeTub.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - StatuetteDyeTub + + +

Back to Server.Items

+

StatuetteDyeTub : DyeTub, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable, IRewardItem

+ (ctor) StatuetteDyeTub()
+ (ctor) StatuetteDyeTub( Serial serial )
+ bool AllowDyables( get; )
+ bool AllowStatuettes( get; )
+ CustomHuePicker CustomHuePicker( get; )
+ int FailMessage( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int TargetMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StatusComparer.html b/Docs/types/StatusComparer.html new file mode 100644 index 0000000..4a4873e --- /dev/null +++ b/Docs/types/StatusComparer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - StatusComparer + + +

Back to Server.Guilds

+

(GuildDiplomacyGump) - StatusComparer : IComparer<Guild>

+

Nested Types: GuildCompareStatus

+ (ctor) StatusComparer( Guild g )
+ virtual int Compare( Guild x, Guild y )
+ + diff --git a/Docs/types/StatusGump.html b/Docs/types/StatusGump.html new file mode 100644 index 0000000..e26c6a2 --- /dev/null +++ b/Docs/types/StatusGump.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - StatusGump + + +

Back to Server.Items

+

(PuzzleChest) - StatusGump : Gump

+ (ctor) StatusGump( int correctCylinders, int correctColors )
+ + diff --git a/Docs/types/StatusPage.html b/Docs/types/StatusPage.html new file mode 100644 index 0000000..67a4282 --- /dev/null +++ b/Docs/types/StatusPage.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StatusPage + + +

Back to Server.Misc

+

StatusPage : Timer

+ (static) string Encode( string input )
+ (static) void Initialize()
+ (ctor) StatusPage()
+ virtual void OnTick()
+ + diff --git a/Docs/types/StealableArtifactsSpawner.html b/Docs/types/StealableArtifactsSpawner.html new file mode 100644 index 0000000..30eacc6 --- /dev/null +++ b/Docs/types/StealableArtifactsSpawner.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - StealableArtifactsSpawner + + +

Back to Server.Items

+

StealableArtifactsSpawner : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: StealableEntry, StealableInstance

+ (static) StealableEntry[] Entries( get; )
+ (static) StealableArtifactsSpawner Instance( get; )
+ (static) Type[] TypesOfEntires( get; )
+ (static) bool Create()
+ (static) void GenStealArties_OnCommand( CommandEventArgs args )
+ (static) int GetLampPostHue()
+ (static) StealableInstance GetStealableInstance( Item item )
+ (static) void Initialize()
+ (static) bool Remove()
+ (static) void RemoveStealArties_OnCommand( CommandEventArgs args )
+ (ctor) StealableArtifactsSpawner()
+ (ctor) StealableArtifactsSpawner( Serial serial )
+ string DefaultName( get; )
+ void CheckRespawn()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StealableEntry.html b/Docs/types/StealableEntry.html new file mode 100644 index 0000000..cd85d6b --- /dev/null +++ b/Docs/types/StealableEntry.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - StealableEntry + + +

Back to Server.Items

+

(StealableArtifactsSpawner) - StealableEntry

+ (ctor) StealableEntry( Map map, Point3D location, int minDelay, int maxDelay, Type type )
+ (ctor) StealableEntry( Map map, Point3D location, int minDelay, int maxDelay, Type type, int hue )
+ int Hue( get; )
+ Point3D Location( get; )
+ Map Map( get; )
+ int MaxDelay( get; )
+ int MinDelay( get; )
+ Type Type( get; )
+ Item CreateInstance()
+ + diff --git a/Docs/types/StealableInstance.html b/Docs/types/StealableInstance.html new file mode 100644 index 0000000..b678d49 --- /dev/null +++ b/Docs/types/StealableInstance.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StealableInstance + + +

Back to Server.Items

+

(StealableArtifactsSpawner) - StealableInstance

+ (ctor) StealableInstance( StealableEntry entry )
+ (ctor) StealableInstance( StealableEntry entry, Item item, DateTime nextRespawn )
+ StealableEntry Entry( get; )
+ Item Item( get; set; )
+ DateTime NextRespawn( get; set; )
+ void CheckRespawn()
+ + diff --git a/Docs/types/Stealing.html b/Docs/types/Stealing.html new file mode 100644 index 0000000..776aef6 --- /dev/null +++ b/Docs/types/Stealing.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Stealing + + +

Back to Server.SkillHandlers

+

Stealing

+

Nested Types: StealingTarget

+ (static) void Initialize()
+ (static) bool IsEmptyHanded( Mobile from )
+ (static) bool IsInGuild( Mobile m )
+ (static) bool IsInnocentTo( Mobile from, Mobile to )
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Stealing()
+ + diff --git a/Docs/types/StealingTarget.html b/Docs/types/StealingTarget.html new file mode 100644 index 0000000..c68a611 --- /dev/null +++ b/Docs/types/StealingTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - StealingTarget + + +

Back to Server.SkillHandlers

+

(Stealing) - StealingTarget : Target

+ (ctor) StealingTarget( Mobile thief )
+ virtual void OnTarget( Mobile from, object target )
+ Item TryStealItem( Item toSteal, ref bool caught )
+ + diff --git a/Docs/types/Stealth.html b/Docs/types/Stealth.html new file mode 100644 index 0000000..88cf603 --- /dev/null +++ b/Docs/types/Stealth.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Stealth + + +

Back to Server.SkillHandlers

+

Stealth

+ (static) int[,] ArmorTable( get; )
+ (static) int GetArmorRating( Mobile m )
+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Stealth()
+ + diff --git a/Docs/types/StitchersMittens.html b/Docs/types/StitchersMittens.html new file mode 100644 index 0000000..6849ea3 --- /dev/null +++ b/Docs/types/StitchersMittens.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - StitchersMittens + + +

Back to Server.Items

+

StitchersMittens : LeafGloves, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+ (ctor) StitchersMittens()
+ (ctor) StitchersMittens( Serial serial )
+ int BaseColdResistance( get; )
+ int BasePhysicalResistance( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StolenItem.html b/Docs/types/StolenItem.html new file mode 100644 index 0000000..1440877 --- /dev/null +++ b/Docs/types/StolenItem.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - StolenItem + + +

Back to Server.SkillHandlers

+

StolenItem

+ (static) void Add( Item item, Mobile thief, Mobile victim )
+ (static) void Clean()
+ (static) bool IsStolen( Item item )
+ (static) bool IsStolen( Item item, ref Mobile victim )
+ (static) void ReturnOnDeath( Mobile killed, Container corpse )
+ (ctor) StolenItem( Item stolen, Mobile thief, Mobile victim )
+ DateTime Expires( get; )
+ bool IsExpired( get; )
+ Item Stolen( get; )
+ Mobile Thief( get; )
+ Mobile Victim( get; )
+ + diff --git a/Docs/types/StoneAnkh.html b/Docs/types/StoneAnkh.html new file mode 100644 index 0000000..ddf7592 --- /dev/null +++ b/Docs/types/StoneAnkh.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - StoneAnkh + + +

Back to Server.Items

+

StoneAnkh : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IRewardItem

+ (ctor) StoneAnkh()
+ (ctor) StoneAnkh( bool east )
+ (ctor) StoneAnkh( Serial serial )
+ BaseAddonDeed Deed( get; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnChop( Mobile from )
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneAnkhComponent.html b/Docs/types/StoneAnkhComponent.html new file mode 100644 index 0000000..0872aa3 --- /dev/null +++ b/Docs/types/StoneAnkhComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StoneAnkhComponent + + +

Back to Server.Items

+

StoneAnkhComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) StoneAnkhComponent( int itemID )
+ (ctor) StoneAnkhComponent( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneAnkhDeed.html b/Docs/types/StoneAnkhDeed.html new file mode 100644 index 0000000..eceb271 --- /dev/null +++ b/Docs/types/StoneAnkhDeed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - StoneAnkhDeed + + +

Back to Server.Items

+

StoneAnkhDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: InternalGump

+ (ctor) StoneAnkhDeed()
+ (ctor) StoneAnkhDeed( Serial serial )
+ BaseAddon Addon( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneChair.html b/Docs/types/StoneChair.html new file mode 100644 index 0000000..0164ff6 --- /dev/null +++ b/Docs/types/StoneChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StoneChair + + +

Back to Server.Items

+

StoneChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StoneChair()
+ (ctor) StoneChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneCrafter.html b/Docs/types/StoneCrafter.html new file mode 100644 index 0000000..0271ba4 --- /dev/null +++ b/Docs/types/StoneCrafter.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - StoneCrafter + + +

Back to Server.Mobiles

+

StoneCrafter : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) StoneCrafter()
+ (ctor) StoneCrafter( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneFaceTrap.html b/Docs/types/StoneFaceTrap.html new file mode 100644 index 0000000..5ce5c63 --- /dev/null +++ b/Docs/types/StoneFaceTrap.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - StoneFaceTrap + + +

Back to Server.Items

+

StoneFaceTrap : BaseTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: StoneFaceTrapNoDamage

+ (static) int GetBaseID( StoneFaceTrapType type )
+ (static) int GetFireID( StoneFaceTrapType type )
+ (ctor) StoneFaceTrap()
+ (ctor) StoneFaceTrap( Serial serial )
+ bool Breathing( get; set; )
+ bool PassivelyTriggered( get; )
+ TimeSpan PassiveTriggerDelay( get; )
+ int PassiveTriggerRange( get; )
+ TimeSpan ResetDelay( get; )
+ StoneFaceTrapType Type( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void FinishBreath()
+ virtual void OnTrigger( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void TriggerDamage()
+ + diff --git a/Docs/types/StoneFaceTrapNoDamage.html b/Docs/types/StoneFaceTrapNoDamage.html new file mode 100644 index 0000000..de5e91d --- /dev/null +++ b/Docs/types/StoneFaceTrapNoDamage.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StoneFaceTrapNoDamage + + +

Back to Server.Items

+

StoneFaceTrapNoDamage : StoneFaceTrap, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: FlamingHead

+ (ctor) StoneFaceTrapNoDamage()
+ (ctor) StoneFaceTrapNoDamage( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ virtual void TriggerDamage()
+ + diff --git a/Docs/types/StoneFaceTrapType.html b/Docs/types/StoneFaceTrapType.html new file mode 100644 index 0000000..1fa8e34 --- /dev/null +++ b/Docs/types/StoneFaceTrapType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - StoneFaceTrapType + + +

Back to Server.Items

+

StoneFaceTrapType (Enum)

+ NorthWestWall = 0,
+ NorthWall = 1,
+ WestWall = 2
+ + diff --git a/Docs/types/StoneFireplaceEastAddon.html b/Docs/types/StoneFireplaceEastAddon.html new file mode 100644 index 0000000..04e59e3 --- /dev/null +++ b/Docs/types/StoneFireplaceEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StoneFireplaceEastAddon + + +

Back to Server.Items

+

StoneFireplaceEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) StoneFireplaceEastAddon()
+ (ctor) StoneFireplaceEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneFireplaceEastDeed.html b/Docs/types/StoneFireplaceEastDeed.html new file mode 100644 index 0000000..ac896aa --- /dev/null +++ b/Docs/types/StoneFireplaceEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StoneFireplaceEastDeed + + +

Back to Server.Items

+

StoneFireplaceEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StoneFireplaceEastDeed()
+ (ctor) StoneFireplaceEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneFireplaceSouthAddon.html b/Docs/types/StoneFireplaceSouthAddon.html new file mode 100644 index 0000000..5fa12a1 --- /dev/null +++ b/Docs/types/StoneFireplaceSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StoneFireplaceSouthAddon + + +

Back to Server.Items

+

StoneFireplaceSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) StoneFireplaceSouthAddon()
+ (ctor) StoneFireplaceSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneFireplaceSouthDeed.html b/Docs/types/StoneFireplaceSouthDeed.html new file mode 100644 index 0000000..e47222e --- /dev/null +++ b/Docs/types/StoneFireplaceSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StoneFireplaceSouthDeed + + +

Back to Server.Items

+

StoneFireplaceSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StoneFireplaceSouthDeed()
+ (ctor) StoneFireplaceSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneFountainAddon.html b/Docs/types/StoneFountainAddon.html new file mode 100644 index 0000000..e87f058 --- /dev/null +++ b/Docs/types/StoneFountainAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StoneFountainAddon + + +

Back to Server.Items

+

StoneFountainAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+

Derived Types: FountainAddon

+ (ctor) StoneFountainAddon()
+ (ctor) StoneFountainAddon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneGargoyle.html b/Docs/types/StoneGargoyle.html new file mode 100644 index 0000000..a780faa --- /dev/null +++ b/Docs/types/StoneGargoyle.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StoneGargoyle + + +

Back to Server.Mobiles

+

StoneGargoyle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) StoneGargoyle()
+ (ctor) StoneGargoyle( Serial serial )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneHarpy.html b/Docs/types/StoneHarpy.html new file mode 100644 index 0000000..6c5a542 --- /dev/null +++ b/Docs/types/StoneHarpy.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - StoneHarpy + + +

Back to Server.Mobiles

+

StoneHarpy : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) StoneHarpy()
+ (ctor) StoneHarpy( Serial serial )
+ int Feathers( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneMiningBook.html b/Docs/types/StoneMiningBook.html new file mode 100644 index 0000000..7faa9fb --- /dev/null +++ b/Docs/types/StoneMiningBook.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StoneMiningBook + + +

Back to Server.Items

+

StoneMiningBook : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StoneMiningBook()
+ (ctor) StoneMiningBook( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneOvenEastAddon.html b/Docs/types/StoneOvenEastAddon.html new file mode 100644 index 0000000..5242d8e --- /dev/null +++ b/Docs/types/StoneOvenEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StoneOvenEastAddon + + +

Back to Server.Items

+

StoneOvenEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) StoneOvenEastAddon()
+ (ctor) StoneOvenEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneOvenEastDeed.html b/Docs/types/StoneOvenEastDeed.html new file mode 100644 index 0000000..bdc6f04 --- /dev/null +++ b/Docs/types/StoneOvenEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StoneOvenEastDeed + + +

Back to Server.Items

+

StoneOvenEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StoneOvenEastDeed()
+ (ctor) StoneOvenEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneOvenSouthAddon.html b/Docs/types/StoneOvenSouthAddon.html new file mode 100644 index 0000000..c3f9c89 --- /dev/null +++ b/Docs/types/StoneOvenSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StoneOvenSouthAddon + + +

Back to Server.Items

+

StoneOvenSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) StoneOvenSouthAddon()
+ (ctor) StoneOvenSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneOvenSouthDeed.html b/Docs/types/StoneOvenSouthDeed.html new file mode 100644 index 0000000..4379a8e --- /dev/null +++ b/Docs/types/StoneOvenSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StoneOvenSouthDeed + + +

Back to Server.Items

+

StoneOvenSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StoneOvenSouthDeed()
+ (ctor) StoneOvenSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StonePaversDark.html b/Docs/types/StonePaversDark.html new file mode 100644 index 0000000..da460b7 --- /dev/null +++ b/Docs/types/StonePaversDark.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StonePaversDark + + +

Back to Server.Items

+

StonePaversDark : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StonePaversDark()
+ (ctor) StonePaversDark( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StonePaversLight.html b/Docs/types/StonePaversLight.html new file mode 100644 index 0000000..2ec9663 --- /dev/null +++ b/Docs/types/StonePaversLight.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StonePaversLight + + +

Back to Server.Items

+

StonePaversLight : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StonePaversLight()
+ (ctor) StonePaversLight( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StonePaversMedium.html b/Docs/types/StonePaversMedium.html new file mode 100644 index 0000000..b3cba2a --- /dev/null +++ b/Docs/types/StonePaversMedium.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StonePaversMedium + + +

Back to Server.Items

+

StonePaversMedium : BaseFloor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StonePaversMedium()
+ (ctor) StonePaversMedium( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StonePlasterHouseDeed.html b/Docs/types/StonePlasterHouseDeed.html new file mode 100644 index 0000000..0e4483d --- /dev/null +++ b/Docs/types/StonePlasterHouseDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - StonePlasterHouseDeed + + +

Back to Server.Multis.Deeds

+

StonePlasterHouseDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StonePlasterHouseDeed()
+ (ctor) StonePlasterHouseDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneStatueAddon.html b/Docs/types/StoneStatueAddon.html new file mode 100644 index 0000000..94c1e6a --- /dev/null +++ b/Docs/types/StoneStatueAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StoneStatueAddon + + +

Back to Server.Items

+

StoneStatueAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) StoneStatueAddon( bool east )
+ (ctor) StoneStatueAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneStatueDeed.html b/Docs/types/StoneStatueDeed.html new file mode 100644 index 0000000..70899df --- /dev/null +++ b/Docs/types/StoneStatueDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - StoneStatueDeed + + +

Back to Server.Items

+

StoneStatueDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) StoneStatueDeed()
+ (ctor) StoneStatueDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StoneWorkshopDeed.html b/Docs/types/StoneWorkshopDeed.html new file mode 100644 index 0000000..8b41e9f --- /dev/null +++ b/Docs/types/StoneWorkshopDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - StoneWorkshopDeed + + +

Back to Server.Multis.Deeds

+

StoneWorkshopDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StoneWorkshopDeed()
+ (ctor) StoneWorkshopDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Stool.html b/Docs/types/Stool.html new file mode 100644 index 0000000..d6807ae --- /dev/null +++ b/Docs/types/Stool.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Stool + + +

Back to Server.Items

+

Stool : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Stool()
+ (ctor) Stool( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StopMusic.html b/Docs/types/StopMusic.html new file mode 100644 index 0000000..cf5c9c2 --- /dev/null +++ b/Docs/types/StopMusic.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - StopMusic + + +

Back to Server.Items

+

StopMusic : Packet

+ (ctor) StopMusic()
+ + diff --git a/Docs/types/Stormgrip.html b/Docs/types/Stormgrip.html new file mode 100644 index 0000000..e45a38b --- /dev/null +++ b/Docs/types/Stormgrip.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Stormgrip + + +

Back to Server.Items

+

Stormgrip : LeatherNinjaMitts, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Stormgrip()
+ (ctor) Stormgrip( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Strandedness.html b/Docs/types/Strandedness.html new file mode 100644 index 0000000..f7cfca4 --- /dev/null +++ b/Docs/types/Strandedness.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Strandedness + + +

Back to Server.Misc

+

Strandedness

+ (static) void EventSink_Login( LoginEventArgs e )
+ (static) void Initialize()
+ (static) bool IsStranded( Mobile from )
+ (ctor) Strandedness()
+ + diff --git a/Docs/types/StrangleScroll.html b/Docs/types/StrangleScroll.html new file mode 100644 index 0000000..a0d584e --- /dev/null +++ b/Docs/types/StrangleScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StrangleScroll + + +

Back to Server.Items

+

StrangleScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) StrangleScroll()
+ (ctor) StrangleScroll( int amount )
+ (ctor) StrangleScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrangleSpell.html b/Docs/types/StrangleSpell.html new file mode 100644 index 0000000..4f670ff --- /dev/null +++ b/Docs/types/StrangleSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - StrangleSpell + + +

Back to Server.Spells.Necromancy

+

StrangleSpell : NecromancerSpell, ISpell

+

Nested Types: InternalTarget, InternalTimer

+ (static) bool RemoveCurse( Mobile m )
+ (ctor) StrangleSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/StrawHat.html b/Docs/types/StrawHat.html new file mode 100644 index 0000000..6494919 --- /dev/null +++ b/Docs/types/StrawHat.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - StrawHat + + +

Back to Server.Items

+

StrawHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) StrawHat()
+ (ctor) StrawHat( Serial serial )
+ (ctor) StrawHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrengthPotion.html b/Docs/types/StrengthPotion.html new file mode 100644 index 0000000..9065d32 --- /dev/null +++ b/Docs/types/StrengthPotion.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - StrengthPotion + + +

Back to Server.Items

+

StrengthPotion : BaseStrengthPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) StrengthPotion()
+ (ctor) StrengthPotion( Serial serial )
+ TimeSpan Duration( get; )
+ int StrOffset( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrengthScroll.html b/Docs/types/StrengthScroll.html new file mode 100644 index 0000000..876bc24 --- /dev/null +++ b/Docs/types/StrengthScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StrengthScroll + + +

Back to Server.Items

+

StrengthScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) StrengthScroll()
+ (ctor) StrengthScroll( int amount )
+ (ctor) StrengthScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrengthSpell.html b/Docs/types/StrengthSpell.html new file mode 100644 index 0000000..2e5d0bb --- /dev/null +++ b/Docs/types/StrengthSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StrengthSpell + + +

Back to Server.Spells.Second

+

StrengthSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) StrengthSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/StretchedHideArtifact.html b/Docs/types/StretchedHideArtifact.html new file mode 100644 index 0000000..fdd5380 --- /dev/null +++ b/Docs/types/StretchedHideArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StretchedHideArtifact + + +

Back to Server.Items

+

StretchedHideArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StretchedHideArtifact()
+ (ctor) StretchedHideArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StringCondition.html b/Docs/types/StringCondition.html new file mode 100644 index 0000000..010da7c --- /dev/null +++ b/Docs/types/StringCondition.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - StringCondition + + +

Back to Server.Commands.Generic

+

StringCondition : PropertyCondition, ICondition

+ (ctor) StringCondition( Property property, bool not, StringOperator op, object value, bool ignoreCase )
+ virtual void Compile( MethodEmitter emitter )
+ virtual void Construct( TypeBuilder typeBuilder, ILGenerator il, int index )
+ + diff --git a/Docs/types/StringOperator.html b/Docs/types/StringOperator.html new file mode 100644 index 0000000..c55995a --- /dev/null +++ b/Docs/types/StringOperator.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StringOperator + + +

Back to Server.Commands.Generic

+

StringOperator (Enum)

+ Equal = 0,
+ NotEqual = 1,
+ Contains = 2,
+ StartsWith = 3,
+ EndsWith = 4
+ + diff --git a/Docs/types/StrongBackpack.html b/Docs/types/StrongBackpack.html new file mode 100644 index 0000000..945c630 --- /dev/null +++ b/Docs/types/StrongBackpack.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - StrongBackpack + + +

Back to Server.Items

+

StrongBackpack : Backpack, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) StrongBackpack()
+ (ctor) StrongBackpack( Serial serial )
+ int DefaultMaxWeight( get; )
+ virtual bool CheckContentDisplay( Mobile from )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrongBox.html b/Docs/types/StrongBox.html new file mode 100644 index 0000000..0813c3d --- /dev/null +++ b/Docs/types/StrongBox.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - StrongBox + + +

Back to Server.Items

+

StrongBox : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) StrongBox( Serial serial )
+ (ctor) StrongBox( Mobile owner, BaseHouse house )
+ bool Decays( get; )
+ TimeSpan DecayTime( get; )
+ int DefaultMaxWeight( get; )
+ double DefaultWeight( get; )
+ int LabelNumber( get; )
+ Mobile Owner( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ void Chop( Mobile from )
+ Container ConvertToStandardContainer()
+ virtual void Deserialize( GenericReader reader )
+ virtual bool IsAccessibleTo( Mobile m )
+ virtual void OnChop( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Validate()
+ + diff --git a/Docs/types/StrongBoxPuzzle.html b/Docs/types/StrongBoxPuzzle.html new file mode 100644 index 0000000..114c8ae --- /dev/null +++ b/Docs/types/StrongBoxPuzzle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StrongBoxPuzzle + + +

Back to Server.Items

+

StrongBoxPuzzle : PuzzleChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) StrongBoxPuzzle()
+ (ctor) StrongBoxPuzzle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrongMongbat.html b/Docs/types/StrongMongbat.html new file mode 100644 index 0000000..8862ad7 --- /dev/null +++ b/Docs/types/StrongMongbat.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - StrongMongbat + + +

Back to Server.Mobiles

+

StrongMongbat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) StrongMongbat()
+ (ctor) StrongMongbat( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrongWoodDoor.html b/Docs/types/StrongWoodDoor.html new file mode 100644 index 0000000..acd50b3 --- /dev/null +++ b/Docs/types/StrongWoodDoor.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StrongWoodDoor + + +

Back to Server.Items

+

StrongWoodDoor : BaseDoor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ILockable, ITelekinesisable

+ (ctor) StrongWoodDoor( DoorFacing facing )
+ (ctor) StrongWoodDoor( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrongholdDefinition.html b/Docs/types/StrongholdDefinition.html new file mode 100644 index 0000000..1ebe9e9 --- /dev/null +++ b/Docs/types/StrongholdDefinition.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StrongholdDefinition + + +

Back to Server.Factions

+

StrongholdDefinition

+ (ctor) StrongholdDefinition( Rectangle2D[] area, Point3D joinStone, Point3D factionStone, Point3D[] monoliths )
+ Rectangle2D[] Area( get; )
+ Point3D FactionStone( get; )
+ Point3D JoinStone( get; )
+ Point3D[] Monoliths( get; )
+ + diff --git a/Docs/types/StrongholdMonolith.html b/Docs/types/StrongholdMonolith.html new file mode 100644 index 0000000..ae0a429 --- /dev/null +++ b/Docs/types/StrongholdMonolith.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - StrongholdMonolith + + +

Back to Server.Factions

+

StrongholdMonolith : BaseMonolith, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StrongholdMonolith()
+ (ctor) StrongholdMonolith( Serial serial )
+ (ctor) StrongholdMonolith( Town town, Faction faction )
+ int DefaultLabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnTownChanged()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StrongholdRegion.html b/Docs/types/StrongholdRegion.html new file mode 100644 index 0000000..5ad508d --- /dev/null +++ b/Docs/types/StrongholdRegion.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StrongholdRegion + + +

Back to Server.Factions

+

StrongholdRegion : BaseRegion, IComparable

+ (ctor) StrongholdRegion( Faction faction )
+ Faction Faction( get; set; )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ virtual bool OnMoveInto( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation )
+ + diff --git a/Docs/types/StuckMenu.html b/Docs/types/StuckMenu.html new file mode 100644 index 0000000..95fed83 --- /dev/null +++ b/Docs/types/StuckMenu.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - StuckMenu + + +

Back to Server.Menus.Questions

+

StuckMenu : Gump

+

Nested Types: CloseTimer, TeleportTimer

+ (static) bool IsInSecondAgeArea( Mobile m )
+ (ctor) StuckMenu( Mobile beholder, Mobile beheld, bool markUse )
+ void BeginClose()
+ virtual void OnResponse( NetState state, RelayInfo info )
+ void StopClose()
+ void Teleport( StuckMenuEntry entry )
+ + diff --git a/Docs/types/StuckMenuEntry.html b/Docs/types/StuckMenuEntry.html new file mode 100644 index 0000000..72db300 --- /dev/null +++ b/Docs/types/StuckMenuEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - StuckMenuEntry + + +

Back to Server.Menus.Questions

+

StuckMenuEntry

+ (ctor) StuckMenuEntry( int name, Point3D[] locations )
+ Point3D[] Locations( get; )
+ int Name( get; )
+ + diff --git a/Docs/types/StuckMenuTarget.html b/Docs/types/StuckMenuTarget.html new file mode 100644 index 0000000..1dff842 --- /dev/null +++ b/Docs/types/StuckMenuTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - StuckMenuTarget + + +

Back to Server.Commands

+

(CommandHandlers) - StuckMenuTarget : Target

+ (ctor) StuckMenuTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/StuddedArms.html b/Docs/types/StuddedArms.html new file mode 100644 index 0000000..abb26aa --- /dev/null +++ b/Docs/types/StuddedArms.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - StuddedArms + + +

Back to Server.Items

+

StuddedArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedArms()
+ (ctor) StuddedArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedBustierArms.html b/Docs/types/StuddedBustierArms.html new file mode 100644 index 0000000..95839d2 --- /dev/null +++ b/Docs/types/StuddedBustierArms.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - StuddedBustierArms + + +

Back to Server.Items

+

StuddedBustierArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedBustierArms()
+ (ctor) StuddedBustierArms( Serial serial )
+ bool AllowMaleWearer( get; )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedChest.html b/Docs/types/StuddedChest.html new file mode 100644 index 0000000..12bc572 --- /dev/null +++ b/Docs/types/StuddedChest.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - StuddedChest + + +

Back to Server.Items

+

StuddedChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: ArmorOfFortune

+ (ctor) StuddedChest()
+ (ctor) StuddedChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedDo.html b/Docs/types/StuddedDo.html new file mode 100644 index 0000000..4bf764f --- /dev/null +++ b/Docs/types/StuddedDo.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - StuddedDo + + +

Back to Server.Items

+

StuddedDo : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedDo()
+ (ctor) StuddedDo( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedGloves.html b/Docs/types/StuddedGloves.html new file mode 100644 index 0000000..15a6f71 --- /dev/null +++ b/Docs/types/StuddedGloves.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - StuddedGloves + + +

Back to Server.Items

+

StuddedGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedGloves()
+ (ctor) StuddedGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedGlovesOfMining.html b/Docs/types/StuddedGlovesOfMining.html new file mode 100644 index 0000000..77aeda6 --- /dev/null +++ b/Docs/types/StuddedGlovesOfMining.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - StuddedGlovesOfMining + + +

Back to Server.Items

+

StuddedGlovesOfMining : BaseGlovesOfMining, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedGlovesOfMining( Serial serial )
+ (ctor) StuddedGlovesOfMining( int bonus )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedGorget.html b/Docs/types/StuddedGorget.html new file mode 100644 index 0000000..bfe27fa --- /dev/null +++ b/Docs/types/StuddedGorget.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - StuddedGorget + + +

Back to Server.Items

+

StuddedGorget : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedGorget()
+ (ctor) StuddedGorget( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedHaidate.html b/Docs/types/StuddedHaidate.html new file mode 100644 index 0000000..24dbeaa --- /dev/null +++ b/Docs/types/StuddedHaidate.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - StuddedHaidate + + +

Back to Server.Items

+

StuddedHaidate : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedHaidate()
+ (ctor) StuddedHaidate( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedHiroSode.html b/Docs/types/StuddedHiroSode.html new file mode 100644 index 0000000..ca3319a --- /dev/null +++ b/Docs/types/StuddedHiroSode.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - StuddedHiroSode + + +

Back to Server.Items

+

StuddedHiroSode : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedHiroSode()
+ (ctor) StuddedHiroSode( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedLeggingsArtifact.html b/Docs/types/StuddedLeggingsArtifact.html new file mode 100644 index 0000000..ba5e55d --- /dev/null +++ b/Docs/types/StuddedLeggingsArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StuddedLeggingsArtifact + + +

Back to Server.Items

+

StuddedLeggingsArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StuddedLeggingsArtifact()
+ (ctor) StuddedLeggingsArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedLegs.html b/Docs/types/StuddedLegs.html new file mode 100644 index 0000000..25db752 --- /dev/null +++ b/Docs/types/StuddedLegs.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - StuddedLegs + + +

Back to Server.Items

+

StuddedLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedLegs()
+ (ctor) StuddedLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ ArmorMeditationAllowance DefMedAllowance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedMempo.html b/Docs/types/StuddedMempo.html new file mode 100644 index 0000000..a949d87 --- /dev/null +++ b/Docs/types/StuddedMempo.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - StuddedMempo + + +

Back to Server.Items

+

StuddedMempo : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedMempo()
+ (ctor) StuddedMempo( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedSuneate.html b/Docs/types/StuddedSuneate.html new file mode 100644 index 0000000..cc54ad1 --- /dev/null +++ b/Docs/types/StuddedSuneate.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - StuddedSuneate + + +

Back to Server.Items

+

StuddedSuneate : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) StuddedSuneate()
+ (ctor) StuddedSuneate( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ CraftResource DefaultResource( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StuddedTunicArtifact.html b/Docs/types/StuddedTunicArtifact.html new file mode 100644 index 0000000..998fba7 --- /dev/null +++ b/Docs/types/StuddedTunicArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - StuddedTunicArtifact + + +

Back to Server.Items

+

StuddedTunicArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) StuddedTunicArtifact()
+ (ctor) StuddedTunicArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/StudyNestsObjective.html b/Docs/types/StudyNestsObjective.html new file mode 100644 index 0000000..1be2a6a --- /dev/null +++ b/Docs/types/StudyNestsObjective.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - StudyNestsObjective + + +

Back to Server.Engines.Quests.Naturalist

+

StudyNestsObjective : QuestObjective

+

Nested Types: StudyState

+ (ctor) StudyNestsObjective()
+ int MaxProgress( get; )
+ object Message( get; )
+ bool StudiedSpecialNest( get; )
+ virtual void CheckProgress()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual bool GetTimerEvent()
+ virtual void OnComplete()
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/StudyOfSolenQuest.html b/Docs/types/StudyOfSolenQuest.html new file mode 100644 index 0000000..68f1066 --- /dev/null +++ b/Docs/types/StudyOfSolenQuest.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - StudyOfSolenQuest + + +

Back to Server.Engines.Quests.Naturalist

+

StudyOfSolenQuest : QuestSystem

+ (ctor) StudyOfSolenQuest()
+ (ctor) StudyOfSolenQuest( PlayerMobile from, Naturalist naturalist )
+ bool IsTutorial( get; )
+ object Name( get; )
+ Naturalist Naturalist( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ + diff --git a/Docs/types/StudyState.html b/Docs/types/StudyState.html new file mode 100644 index 0000000..ce31b74 --- /dev/null +++ b/Docs/types/StudyState.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - StudyState + + +

Back to Server.Engines.Quests.Naturalist

+

StudyState (Enum)

+ Inactive = 0,
+ FirstStep = 1,
+ SecondStep = 2
+ + diff --git a/Docs/types/StunRequestEventArgs.html b/Docs/types/StunRequestEventArgs.html new file mode 100644 index 0000000..9115bc4 --- /dev/null +++ b/Docs/types/StunRequestEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - StunRequestEventArgs + + +

Back to Server

+

StunRequestEventArgs : EventArgs

+ (ctor) StunRequestEventArgs( Mobile m )
+ Mobile Mobile( get; )
+ + diff --git a/Docs/types/StunRequestEventHandler.html b/Docs/types/StunRequestEventHandler.html new file mode 100644 index 0000000..14c2353 --- /dev/null +++ b/Docs/types/StunRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - StunRequestEventHandler + + +

Back to Server

+

StunRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) StunRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( StunRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( StunRequestEventArgs e )
+ + diff --git a/Docs/types/SturdyPickaxe.html b/Docs/types/SturdyPickaxe.html new file mode 100644 index 0000000..b89e35d --- /dev/null +++ b/Docs/types/SturdyPickaxe.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - SturdyPickaxe + + +

Back to Server.Items

+

SturdyPickaxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+ (ctor) SturdyPickaxe()
+ (ctor) SturdyPickaxe( Serial serial )
+ (ctor) SturdyPickaxe( int uses )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ HarvestSystem HarvestSystem( get; )
+ int LabelNumber( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SturdyShovel.html b/Docs/types/SturdyShovel.html new file mode 100644 index 0000000..4d6d5e9 --- /dev/null +++ b/Docs/types/SturdyShovel.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SturdyShovel + + +

Back to Server.Items

+

SturdyShovel : BaseHarvestTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) SturdyShovel()
+ (ctor) SturdyShovel( int uses )
+ (ctor) SturdyShovel( Serial serial )
+ HarvestSystem HarvestSystem( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Subdue.html b/Docs/types/Subdue.html new file mode 100644 index 0000000..422690e --- /dev/null +++ b/Docs/types/Subdue.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Subdue + + +

Back to Server.Items

+

Subdue : Scythe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability, IUsesRemaining

+ (ctor) Subdue()
+ (ctor) Subdue( Serial serial )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Succubus.html b/Docs/types/Succubus.html new file mode 100644 index 0000000..fb05b17 --- /dev/null +++ b/Docs/types/Succubus.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Succubus + + +

Back to Server.Mobiles

+

Succubus : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Succubus()
+ (ctor) Succubus( Serial serial )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DrainLife()
+ virtual void GenerateLoot()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SuitOfGoldArmorAddon.html b/Docs/types/SuitOfGoldArmorAddon.html new file mode 100644 index 0000000..2715161 --- /dev/null +++ b/Docs/types/SuitOfGoldArmorAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SuitOfGoldArmorAddon + + +

Back to Server.Items

+

SuitOfGoldArmorAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SuitOfGoldArmorAddon()
+ (ctor) SuitOfGoldArmorAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SuitOfGoldArmorComponent.html b/Docs/types/SuitOfGoldArmorComponent.html new file mode 100644 index 0000000..845946c --- /dev/null +++ b/Docs/types/SuitOfGoldArmorComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SuitOfGoldArmorComponent + + +

Back to Server.Items

+

SuitOfGoldArmorComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) SuitOfGoldArmorComponent()
+ (ctor) SuitOfGoldArmorComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SuitOfGoldArmorDeed.html b/Docs/types/SuitOfGoldArmorDeed.html new file mode 100644 index 0000000..91fb9b2 --- /dev/null +++ b/Docs/types/SuitOfGoldArmorDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SuitOfGoldArmorDeed + + +

Back to Server.Items

+

SuitOfGoldArmorDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SuitOfGoldArmorDeed()
+ (ctor) SuitOfGoldArmorDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SuitOfSilverArmorAddon.html b/Docs/types/SuitOfSilverArmorAddon.html new file mode 100644 index 0000000..800ff5f --- /dev/null +++ b/Docs/types/SuitOfSilverArmorAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SuitOfSilverArmorAddon + + +

Back to Server.Items

+

SuitOfSilverArmorAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SuitOfSilverArmorAddon()
+ (ctor) SuitOfSilverArmorAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SuitOfSilverArmorComponent.html b/Docs/types/SuitOfSilverArmorComponent.html new file mode 100644 index 0000000..4cc71b8 --- /dev/null +++ b/Docs/types/SuitOfSilverArmorComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SuitOfSilverArmorComponent + + +

Back to Server.Items

+

SuitOfSilverArmorComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) SuitOfSilverArmorComponent()
+ (ctor) SuitOfSilverArmorComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SuitOfSilverArmorDeed.html b/Docs/types/SuitOfSilverArmorDeed.html new file mode 100644 index 0000000..5f1d6b6 --- /dev/null +++ b/Docs/types/SuitOfSilverArmorDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SuitOfSilverArmorDeed + + +

Back to Server.Items

+

SuitOfSilverArmorDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SuitOfSilverArmorDeed()
+ (ctor) SuitOfSilverArmorDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SulfurousAsh.html b/Docs/types/SulfurousAsh.html new file mode 100644 index 0000000..56cc7c4 --- /dev/null +++ b/Docs/types/SulfurousAsh.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SulfurousAsh + + +

Back to Server.Items

+

SulfurousAsh : BaseReagent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SulfurousAsh()
+ (ctor) SulfurousAsh( Serial serial )
+ (ctor) SulfurousAsh( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonAirElementalScroll.html b/Docs/types/SummonAirElementalScroll.html new file mode 100644 index 0000000..b1928ec --- /dev/null +++ b/Docs/types/SummonAirElementalScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonAirElementalScroll + + +

Back to Server.Items

+

SummonAirElementalScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonAirElementalScroll()
+ (ctor) SummonAirElementalScroll( int amount )
+ (ctor) SummonAirElementalScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonCreatureScroll.html b/Docs/types/SummonCreatureScroll.html new file mode 100644 index 0000000..9d6de87 --- /dev/null +++ b/Docs/types/SummonCreatureScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonCreatureScroll + + +

Back to Server.Items

+

SummonCreatureScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonCreatureScroll()
+ (ctor) SummonCreatureScroll( int amount )
+ (ctor) SummonCreatureScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonCreatureSpell.html b/Docs/types/SummonCreatureSpell.html new file mode 100644 index 0000000..797519d --- /dev/null +++ b/Docs/types/SummonCreatureSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonCreatureSpell + + +

Back to Server.Spells.Fifth

+

SummonCreatureSpell : MagerySpell, ISpell

+ (ctor) SummonCreatureSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual TimeSpan GetCastDelay()
+ virtual void OnCast()
+ + diff --git a/Docs/types/SummonDaemonScroll.html b/Docs/types/SummonDaemonScroll.html new file mode 100644 index 0000000..da7d756 --- /dev/null +++ b/Docs/types/SummonDaemonScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonDaemonScroll + + +

Back to Server.Items

+

SummonDaemonScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonDaemonScroll()
+ (ctor) SummonDaemonScroll( int amount )
+ (ctor) SummonDaemonScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonDaemonSpell.html b/Docs/types/SummonDaemonSpell.html new file mode 100644 index 0000000..64b2e0c --- /dev/null +++ b/Docs/types/SummonDaemonSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonDaemonSpell + + +

Back to Server.Spells.Eighth

+

SummonDaemonSpell : MagerySpell, ISpell

+ (ctor) SummonDaemonSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/SummonEarthElementalScroll.html b/Docs/types/SummonEarthElementalScroll.html new file mode 100644 index 0000000..c32a684 --- /dev/null +++ b/Docs/types/SummonEarthElementalScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonEarthElementalScroll + + +

Back to Server.Items

+

SummonEarthElementalScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonEarthElementalScroll()
+ (ctor) SummonEarthElementalScroll( int amount )
+ (ctor) SummonEarthElementalScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonEntry.html b/Docs/types/SummonEntry.html new file mode 100644 index 0000000..02d4898 --- /dev/null +++ b/Docs/types/SummonEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SummonEntry + + +

Back to Server.Spells.Necromancy

+

(AnimateDeadSpell) - SummonEntry

+ (ctor) SummonEntry( int requirement, Type[] toSummon )
+ + diff --git a/Docs/types/SummonFamiliar.html b/Docs/types/SummonFamiliar.html new file mode 100644 index 0000000..9f1905e --- /dev/null +++ b/Docs/types/SummonFamiliar.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SummonFamiliar + + +

Back to Server.Ethics.Hero

+

SummonFamiliar : Power

+ (ctor) SummonFamiliar()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/SummonFamiliarEntry.html b/Docs/types/SummonFamiliarEntry.html new file mode 100644 index 0000000..2e49c5a --- /dev/null +++ b/Docs/types/SummonFamiliarEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonFamiliarEntry + + +

Back to Server.Spells.Necromancy

+

SummonFamiliarEntry

+ (ctor) SummonFamiliarEntry( Type type, object name, double reqNecromancy, double reqSpiritSpeak )
+ object Name( get; )
+ double ReqNecromancy( get; )
+ double ReqSpiritSpeak( get; )
+ Type Type( get; )
+ + diff --git a/Docs/types/SummonFamiliarGump.html b/Docs/types/SummonFamiliarGump.html new file mode 100644 index 0000000..bf3fd2f --- /dev/null +++ b/Docs/types/SummonFamiliarGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SummonFamiliarGump + + +

Back to Server.Spells.Necromancy

+

SummonFamiliarGump : Gump

+ (ctor) SummonFamiliarGump( Mobile from, SummonFamiliarEntry[] entries, SummonFamiliarSpell spell )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/SummonFamiliarScroll.html b/Docs/types/SummonFamiliarScroll.html new file mode 100644 index 0000000..daa57b3 --- /dev/null +++ b/Docs/types/SummonFamiliarScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonFamiliarScroll + + +

Back to Server.Items

+

SummonFamiliarScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonFamiliarScroll()
+ (ctor) SummonFamiliarScroll( int amount )
+ (ctor) SummonFamiliarScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonFamiliarSpell.html b/Docs/types/SummonFamiliarSpell.html new file mode 100644 index 0000000..ec06eb6 --- /dev/null +++ b/Docs/types/SummonFamiliarSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SummonFamiliarSpell + + +

Back to Server.Spells.Necromancy

+

SummonFamiliarSpell : NecromancerSpell, ISpell

+ (static) SummonFamiliarEntry[] Entries( get; )
+ (static) Hashtable Table( get; )
+ (ctor) SummonFamiliarSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/SummonFeyScroll.html b/Docs/types/SummonFeyScroll.html new file mode 100644 index 0000000..0ce4106 --- /dev/null +++ b/Docs/types/SummonFeyScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonFeyScroll + + +

Back to Server.Items

+

SummonFeyScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonFeyScroll()
+ (ctor) SummonFeyScroll( int amount )
+ (ctor) SummonFeyScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonFeySpell.html b/Docs/types/SummonFeySpell.html new file mode 100644 index 0000000..004db55 --- /dev/null +++ b/Docs/types/SummonFeySpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonFeySpell + + +

Back to Server.Spells.Spellweaving

+

SummonFeySpell : ArcaneSummon<ArcaneFey>, ISpell

+ (ctor) SummonFeySpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int Sound( get; )
+ + diff --git a/Docs/types/SummonFiendScroll.html b/Docs/types/SummonFiendScroll.html new file mode 100644 index 0000000..a44e09e --- /dev/null +++ b/Docs/types/SummonFiendScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonFiendScroll + + +

Back to Server.Items

+

SummonFiendScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonFiendScroll()
+ (ctor) SummonFiendScroll( int amount )
+ (ctor) SummonFiendScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonFiendSpell.html b/Docs/types/SummonFiendSpell.html new file mode 100644 index 0000000..3452965 --- /dev/null +++ b/Docs/types/SummonFiendSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonFiendSpell + + +

Back to Server.Spells.Spellweaving

+

SummonFiendSpell : ArcaneSummon<ArcaneFiend>, ISpell

+ (ctor) SummonFiendSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ int Sound( get; )
+ + diff --git a/Docs/types/SummonFireElementalScroll.html b/Docs/types/SummonFireElementalScroll.html new file mode 100644 index 0000000..610ba32 --- /dev/null +++ b/Docs/types/SummonFireElementalScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonFireElementalScroll + + +

Back to Server.Items

+

SummonFireElementalScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonFireElementalScroll()
+ (ctor) SummonFireElementalScroll( int amount )
+ (ctor) SummonFireElementalScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonTimer.html b/Docs/types/SummonTimer.html new file mode 100644 index 0000000..de5086a --- /dev/null +++ b/Docs/types/SummonTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SummonTimer + + +

Back to Server.Engines.Quests.Necro

+

(SummonedPaladin) - SummonTimer : Timer

+ (ctor) SummonTimer( PlayerMobile player )
+ virtual void OnTick()
+ + diff --git a/Docs/types/SummonWaterElementalScroll.html b/Docs/types/SummonWaterElementalScroll.html new file mode 100644 index 0000000..0a27302 --- /dev/null +++ b/Docs/types/SummonWaterElementalScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonWaterElementalScroll + + +

Back to Server.Items

+

SummonWaterElementalScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) SummonWaterElementalScroll()
+ (ctor) SummonWaterElementalScroll( int amount )
+ (ctor) SummonWaterElementalScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedAirElemental.html b/Docs/types/SummonedAirElemental.html new file mode 100644 index 0000000..0b232c8 --- /dev/null +++ b/Docs/types/SummonedAirElemental.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SummonedAirElemental + + +

Back to Server.Mobiles

+

SummonedAirElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedAirElemental()
+ (ctor) SummonedAirElemental( Serial serial )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedAntLion.html b/Docs/types/SummonedAntLion.html new file mode 100644 index 0000000..5dd0e26 --- /dev/null +++ b/Docs/types/SummonedAntLion.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedAntLion + + +

Back to Server.Mobiles

+

SummonedAntLion : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedAntLion()
+ (ctor) SummonedAntLion( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedArcticOgreLord.html b/Docs/types/SummonedArcticOgreLord.html new file mode 100644 index 0000000..1379654 --- /dev/null +++ b/Docs/types/SummonedArcticOgreLord.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedArcticOgreLord + + +

Back to Server.Mobiles

+

SummonedArcticOgreLord : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedArcticOgreLord()
+ (ctor) SummonedArcticOgreLord( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedBakeKitsune.html b/Docs/types/SummonedBakeKitsune.html new file mode 100644 index 0000000..61175d2 --- /dev/null +++ b/Docs/types/SummonedBakeKitsune.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedBakeKitsune + + +

Back to Server.Mobiles

+

SummonedBakeKitsune : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedBakeKitsune()
+ (ctor) SummonedBakeKitsune( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedBogling.html b/Docs/types/SummonedBogling.html new file mode 100644 index 0000000..ec9e912 --- /dev/null +++ b/Docs/types/SummonedBogling.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedBogling + + +

Back to Server.Mobiles

+

SummonedBogling : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedBogling()
+ (ctor) SummonedBogling( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedBullFrog.html b/Docs/types/SummonedBullFrog.html new file mode 100644 index 0000000..1701911 --- /dev/null +++ b/Docs/types/SummonedBullFrog.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedBullFrog + + +

Back to Server.Mobiles

+

SummonedBullFrog : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedBullFrog()
+ (ctor) SummonedBullFrog( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedChicken.html b/Docs/types/SummonedChicken.html new file mode 100644 index 0000000..723f508 --- /dev/null +++ b/Docs/types/SummonedChicken.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedChicken + + +

Back to Server.Mobiles

+

SummonedChicken : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedChicken()
+ (ctor) SummonedChicken( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedCow.html b/Docs/types/SummonedCow.html new file mode 100644 index 0000000..e67e1f9 --- /dev/null +++ b/Docs/types/SummonedCow.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedCow + + +

Back to Server.Mobiles

+

SummonedCow : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedCow()
+ (ctor) SummonedCow( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedDaemon.html b/Docs/types/SummonedDaemon.html new file mode 100644 index 0000000..32d7504 --- /dev/null +++ b/Docs/types/SummonedDaemon.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - SummonedDaemon + + +

Back to Server.Mobiles

+

SummonedDaemon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedDaemon()
+ (ctor) SummonedDaemon( Serial serial )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedDoppleganger.html b/Docs/types/SummonedDoppleganger.html new file mode 100644 index 0000000..6ff625a --- /dev/null +++ b/Docs/types/SummonedDoppleganger.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedDoppleganger + + +

Back to Server.Mobiles

+

SummonedDoppleganger : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedDoppleganger()
+ (ctor) SummonedDoppleganger( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedEarthElemental.html b/Docs/types/SummonedEarthElemental.html new file mode 100644 index 0000000..9288795 --- /dev/null +++ b/Docs/types/SummonedEarthElemental.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SummonedEarthElemental + + +

Back to Server.Mobiles

+

SummonedEarthElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedEarthElemental()
+ (ctor) SummonedEarthElemental( Serial serial )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedFireElemental.html b/Docs/types/SummonedFireElemental.html new file mode 100644 index 0000000..f25a458 --- /dev/null +++ b/Docs/types/SummonedFireElemental.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SummonedFireElemental + + +

Back to Server.Mobiles

+

SummonedFireElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedFireElemental()
+ (ctor) SummonedFireElemental( Serial serial )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedFrostSpider.html b/Docs/types/SummonedFrostSpider.html new file mode 100644 index 0000000..e81efb5 --- /dev/null +++ b/Docs/types/SummonedFrostSpider.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedFrostSpider + + +

Back to Server.Mobiles

+

SummonedFrostSpider : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedFrostSpider()
+ (ctor) SummonedFrostSpider( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedGreatHart.html b/Docs/types/SummonedGreatHart.html new file mode 100644 index 0000000..fd59aee --- /dev/null +++ b/Docs/types/SummonedGreatHart.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedGreatHart + + +

Back to Server.Mobiles

+

SummonedGreatHart : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedGreatHart()
+ (ctor) SummonedGreatHart( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedLavaSerpent.html b/Docs/types/SummonedLavaSerpent.html new file mode 100644 index 0000000..1526391 --- /dev/null +++ b/Docs/types/SummonedLavaSerpent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SummonedLavaSerpent + + +

Back to Server.Mobiles

+

SummonedLavaSerpent : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedLavaSerpent()
+ (ctor) SummonedLavaSerpent( Serial serial )
+ void AreaHeatDamage()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedOrcBrute.html b/Docs/types/SummonedOrcBrute.html new file mode 100644 index 0000000..bf7936e --- /dev/null +++ b/Docs/types/SummonedOrcBrute.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedOrcBrute + + +

Back to Server.Mobiles

+

SummonedOrcBrute : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedOrcBrute()
+ (ctor) SummonedOrcBrute( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedPaladin.html b/Docs/types/SummonedPaladin.html new file mode 100644 index 0000000..b2f4f9b --- /dev/null +++ b/Docs/types/SummonedPaladin.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - SummonedPaladin + + +

Back to Server.Engines.Quests.Necro

+

SummonedPaladin : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: SummonTimer

+ (static) void BeginSummon( PlayerMobile player )
+ (ctor) SummonedPaladin( PlayerMobile necromancer )
+ (ctor) SummonedPaladin( Serial serial )
+ bool ClickTitle( get; )
+ bool PlayerRangeSensitive( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool IsHarmfulCriminal( Mobile target )
+ virtual void OnDeath( Container c )
+ virtual void OnThink()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedPaladinMoongate.html b/Docs/types/SummonedPaladinMoongate.html new file mode 100644 index 0000000..736a4c0 --- /dev/null +++ b/Docs/types/SummonedPaladinMoongate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedPaladinMoongate + + +

Back to Server.Engines.Quests.Necro

+

SummonedPaladinMoongate : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SummonedPaladinMoongate()
+ (ctor) SummonedPaladinMoongate( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedPanther.html b/Docs/types/SummonedPanther.html new file mode 100644 index 0000000..1d9d61e --- /dev/null +++ b/Docs/types/SummonedPanther.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedPanther + + +

Back to Server.Mobiles

+

SummonedPanther : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedPanther()
+ (ctor) SummonedPanther( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedSheep.html b/Docs/types/SummonedSheep.html new file mode 100644 index 0000000..531e7f3 --- /dev/null +++ b/Docs/types/SummonedSheep.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedSheep + + +

Back to Server.Mobiles

+

SummonedSheep : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedSheep()
+ (ctor) SummonedSheep( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedSkeletalKnight.html b/Docs/types/SummonedSkeletalKnight.html new file mode 100644 index 0000000..5af3d67 --- /dev/null +++ b/Docs/types/SummonedSkeletalKnight.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedSkeletalKnight + + +

Back to Server.Mobiles

+

SummonedSkeletalKnight : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedSkeletalKnight()
+ (ctor) SummonedSkeletalKnight( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedVorpalBunny.html b/Docs/types/SummonedVorpalBunny.html new file mode 100644 index 0000000..880fef2 --- /dev/null +++ b/Docs/types/SummonedVorpalBunny.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SummonedVorpalBunny + + +

Back to Server.Mobiles

+

SummonedVorpalBunny : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedVorpalBunny()
+ (ctor) SummonedVorpalBunny( Serial serial )
+ virtual void BeginTunnel()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedWailingBanshee.html b/Docs/types/SummonedWailingBanshee.html new file mode 100644 index 0000000..4bdbb67 --- /dev/null +++ b/Docs/types/SummonedWailingBanshee.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SummonedWailingBanshee + + +

Back to Server.Mobiles

+

SummonedWailingBanshee : BaseTalismanSummon, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedWailingBanshee()
+ (ctor) SummonedWailingBanshee( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummonedWaterElemental.html b/Docs/types/SummonedWaterElemental.html new file mode 100644 index 0000000..2c7be88 --- /dev/null +++ b/Docs/types/SummonedWaterElemental.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SummonedWaterElemental + + +

Back to Server.Mobiles

+

SummonedWaterElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SummonedWaterElemental()
+ (ctor) SummonedWaterElemental( Serial serial )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SummoningAltar.html b/Docs/types/SummoningAltar.html new file mode 100644 index 0000000..c8624c8 --- /dev/null +++ b/Docs/types/SummoningAltar.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SummoningAltar + + +

Back to Server.Engines.Quests.Doom

+

SummoningAltar : AbbatoirAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) SummoningAltar()
+ (ctor) SummoningAltar( Serial serial )
+ BoneDemon Daemon( get; set; )
+ void CheckDaemon()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SupportedFeatures.html b/Docs/types/SupportedFeatures.html new file mode 100644 index 0000000..8739105 --- /dev/null +++ b/Docs/types/SupportedFeatures.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - SupportedFeatures + + +

Back to Server.Network

+

SupportedFeatures : Packet

+ (static) FeatureFlags Value( get; set; )
+ (static) SupportedFeatures Instantiate( NetState ns )
+ (ctor) SupportedFeatures( NetState ns )
+ + diff --git a/Docs/types/Surcoat.html b/Docs/types/Surcoat.html new file mode 100644 index 0000000..cd8bcd1 --- /dev/null +++ b/Docs/types/Surcoat.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Surcoat + + +

Back to Server.Items

+

Surcoat : BaseMiddleTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Surcoat()
+ (ctor) Surcoat( int hue )
+ (ctor) Surcoat( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SurpriseAttack.html b/Docs/types/SurpriseAttack.html new file mode 100644 index 0000000..4591150 --- /dev/null +++ b/Docs/types/SurpriseAttack.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - SurpriseAttack + + +

Back to Server.Spells.Ninjitsu

+

SurpriseAttack : NinjaMove

+

Nested Types: (Anonymous-Type)--c__DisplayClass2, SurpriseAttackInfo

+ (static) void EndSurprise( object state )
+ (static) bool GetMalus( Mobile target, ref int malus )
+ (ctor) SurpriseAttack()
+ TextDefinition AbilityMessage( get; )
+ int BaseMana( get; )
+ double RequiredSkill( get; )
+ bool ValidatesDuringHit( get; )
+ virtual bool OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual void OnMiss( Mobile attacker, Mobile defender )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/SurpriseAttackInfo.html b/Docs/types/SurpriseAttackInfo.html new file mode 100644 index 0000000..4383651 --- /dev/null +++ b/Docs/types/SurpriseAttackInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - SurpriseAttackInfo + + +

Back to Server.Spells.Ninjitsu

+

(SurpriseAttack) - SurpriseAttackInfo

+ (ctor) SurpriseAttackInfo( Mobile target, int effect )
+ + diff --git a/Docs/types/SushiPlatter.html b/Docs/types/SushiPlatter.html new file mode 100644 index 0000000..e74e713 --- /dev/null +++ b/Docs/types/SushiPlatter.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SushiPlatter + + +

Back to Server.Items

+

SushiPlatter : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SushiPlatter()
+ (ctor) SushiPlatter( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SushiRolls.html b/Docs/types/SushiRolls.html new file mode 100644 index 0000000..99bb2d6 --- /dev/null +++ b/Docs/types/SushiRolls.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SushiRolls + + +

Back to Server.Items

+

SushiRolls : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SushiRolls()
+ (ctor) SushiRolls( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwampDragon.html b/Docs/types/SwampDragon.html new file mode 100644 index 0000000..66e86e8 --- /dev/null +++ b/Docs/types/SwampDragon.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - SwampDragon + + +

Back to Server.Mobiles

+

SwampDragon : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) SwampDragon()
+ (ctor) SwampDragon( string name )
+ (ctor) SwampDragon( Serial serial )
+ bool AutoDispel( get; )
+ Mobile BardingCrafter( get; set; )
+ bool BardingExceptional( get; set; )
+ int BardingHP( get; set; )
+ int BardingMaxHP( get; )
+ CraftResource BardingResource( get; set; )
+ bool CanAngerOnTame( get; )
+ FoodType FavoriteFood( get; )
+ bool HasBarding( get; set; )
+ int Hides( get; )
+ int Meat( get; )
+ bool ReacquireOnMovement( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAttackSound()
+ virtual double GetControlChance( Mobile m, bool useBaseSkill )
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual bool OverrideBondingReqs()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwampGreenThornsEffect.html b/Docs/types/SwampGreenThornsEffect.html new file mode 100644 index 0000000..cba7cd0 --- /dev/null +++ b/Docs/types/SwampGreenThornsEffect.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - SwampGreenThornsEffect + + +

Back to Server.Items

+

SwampGreenThornsEffect : GreenThornsEffect

+ (ctor) SwampGreenThornsEffect( Point3D location, Map map, Mobile from )
+ virtual TimeSpan Play( int step )
+ + diff --git a/Docs/types/SwampTentacle.html b/Docs/types/SwampTentacle.html new file mode 100644 index 0000000..934b15e --- /dev/null +++ b/Docs/types/SwampTentacle.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SwampTentacle + + +

Back to Server.Mobiles

+

SwampTentacle : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) SwampTentacle()
+ (ctor) SwampTentacle( Serial serial )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwampTile.html b/Docs/types/SwampTile.html new file mode 100644 index 0000000..0767125 --- /dev/null +++ b/Docs/types/SwampTile.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - SwampTile + + +

Back to Server.Items

+

SwampTile : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwampTile()
+ (ctor) SwampTile( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwarmOfFlies.html b/Docs/types/SwarmOfFlies.html new file mode 100644 index 0000000..879c64d --- /dev/null +++ b/Docs/types/SwarmOfFlies.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwarmOfFlies + + +

Back to Server.Items

+

SwarmOfFlies : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwarmOfFlies()
+ (ctor) SwarmOfFlies( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SweetDough.html b/Docs/types/SweetDough.html new file mode 100644 index 0000000..6818b6f --- /dev/null +++ b/Docs/types/SweetDough.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SweetDough + + +

Back to Server.Items

+

SweetDough : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) SweetDough()
+ (ctor) SweetDough( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Swing.html b/Docs/types/Swing.html new file mode 100644 index 0000000..f35d7f6 --- /dev/null +++ b/Docs/types/Swing.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Swing + + +

Back to Server.Network

+

Swing : Packet

+ (ctor) Swing( int flag, Mobile attacker, Mobile defender )
+ + diff --git a/Docs/types/SwitchItem.html b/Docs/types/SwitchItem.html new file mode 100644 index 0000000..35712f5 --- /dev/null +++ b/Docs/types/SwitchItem.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - SwitchItem + + +

Back to Server.Items

+

SwitchItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwitchItem()
+ (ctor) SwitchItem( int amount )
+ (ctor) SwitchItem( Serial serial )
+ (ctor) SwitchItem( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay1NorthArtifact.html b/Docs/types/SwordDisplay1NorthArtifact.html new file mode 100644 index 0000000..7e3218e --- /dev/null +++ b/Docs/types/SwordDisplay1NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay1NorthArtifact + + +

Back to Server.Items

+

SwordDisplay1NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay1NorthArtifact()
+ (ctor) SwordDisplay1NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay1WestArtifact.html b/Docs/types/SwordDisplay1WestArtifact.html new file mode 100644 index 0000000..9738b39 --- /dev/null +++ b/Docs/types/SwordDisplay1WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay1WestArtifact + + +

Back to Server.Items

+

SwordDisplay1WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay1WestArtifact()
+ (ctor) SwordDisplay1WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay2NorthArtifact.html b/Docs/types/SwordDisplay2NorthArtifact.html new file mode 100644 index 0000000..9b49631 --- /dev/null +++ b/Docs/types/SwordDisplay2NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay2NorthArtifact + + +

Back to Server.Items

+

SwordDisplay2NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay2NorthArtifact()
+ (ctor) SwordDisplay2NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay2WestArtifact.html b/Docs/types/SwordDisplay2WestArtifact.html new file mode 100644 index 0000000..1275599 --- /dev/null +++ b/Docs/types/SwordDisplay2WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay2WestArtifact + + +

Back to Server.Items

+

SwordDisplay2WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay2WestArtifact()
+ (ctor) SwordDisplay2WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay3EastArtifact.html b/Docs/types/SwordDisplay3EastArtifact.html new file mode 100644 index 0000000..3d6665e --- /dev/null +++ b/Docs/types/SwordDisplay3EastArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay3EastArtifact + + +

Back to Server.Items

+

SwordDisplay3EastArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay3EastArtifact()
+ (ctor) SwordDisplay3EastArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay3SouthArtifact.html b/Docs/types/SwordDisplay3SouthArtifact.html new file mode 100644 index 0000000..430840b --- /dev/null +++ b/Docs/types/SwordDisplay3SouthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay3SouthArtifact + + +

Back to Server.Items

+

SwordDisplay3SouthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay3SouthArtifact()
+ (ctor) SwordDisplay3SouthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay4NorthArtifact.html b/Docs/types/SwordDisplay4NorthArtifact.html new file mode 100644 index 0000000..1d77a45 --- /dev/null +++ b/Docs/types/SwordDisplay4NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay4NorthArtifact + + +

Back to Server.Items

+

SwordDisplay4NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay4NorthArtifact()
+ (ctor) SwordDisplay4NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay4WestArtifact.html b/Docs/types/SwordDisplay4WestArtifact.html new file mode 100644 index 0000000..bb9ec92 --- /dev/null +++ b/Docs/types/SwordDisplay4WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay4WestArtifact + + +

Back to Server.Items

+

SwordDisplay4WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay4WestArtifact()
+ (ctor) SwordDisplay4WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay5NorthArtifact.html b/Docs/types/SwordDisplay5NorthArtifact.html new file mode 100644 index 0000000..ad87778 --- /dev/null +++ b/Docs/types/SwordDisplay5NorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay5NorthArtifact + + +

Back to Server.Items

+

SwordDisplay5NorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay5NorthArtifact()
+ (ctor) SwordDisplay5NorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordDisplay5WestArtifact.html b/Docs/types/SwordDisplay5WestArtifact.html new file mode 100644 index 0000000..a47ef5e --- /dev/null +++ b/Docs/types/SwordDisplay5WestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - SwordDisplay5WestArtifact + + +

Back to Server.Items

+

SwordDisplay5WestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) SwordDisplay5WestArtifact()
+ (ctor) SwordDisplay5WestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordOfTheStampede.html b/Docs/types/SwordOfTheStampede.html new file mode 100644 index 0000000..79a866e --- /dev/null +++ b/Docs/types/SwordOfTheStampede.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SwordOfTheStampede + + +

Back to Server.Items

+

SwordOfTheStampede : NoDachi, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) SwordOfTheStampede()
+ (ctor) SwordOfTheStampede( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/SwordsOfProsperity.html b/Docs/types/SwordsOfProsperity.html new file mode 100644 index 0000000..7e2b480 --- /dev/null +++ b/Docs/types/SwordsOfProsperity.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - SwordsOfProsperity + + +

Back to Server.Items

+

SwordsOfProsperity : Daisho, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) SwordsOfProsperity()
+ (ctor) SwordsOfProsperity( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TBWarHorse.html b/Docs/types/TBWarHorse.html new file mode 100644 index 0000000..092adb8 --- /dev/null +++ b/Docs/types/TBWarHorse.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TBWarHorse + + +

Back to Server.Mobiles

+

TBWarHorse : BaseWarHorse, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) TBWarHorse()
+ (ctor) TBWarHorse( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TCHelpGump.html b/Docs/types/TCHelpGump.html new file mode 100644 index 0000000..7d7a047 --- /dev/null +++ b/Docs/types/TCHelpGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TCHelpGump + + +

Back to Server.Misc

+

(TestCenter) - TCHelpGump : Gump

+ (ctor) TCHelpGump()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/TableWithBlueClothAddon.html b/Docs/types/TableWithBlueClothAddon.html new file mode 100644 index 0000000..41fc625 --- /dev/null +++ b/Docs/types/TableWithBlueClothAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TableWithBlueClothAddon + + +

Back to Server.Items

+

TableWithBlueClothAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) TableWithBlueClothAddon()
+ (ctor) TableWithBlueClothAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TableWithBlueClothDeed.html b/Docs/types/TableWithBlueClothDeed.html new file mode 100644 index 0000000..bf43c3d --- /dev/null +++ b/Docs/types/TableWithBlueClothDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TableWithBlueClothDeed + + +

Back to Server.Items

+

TableWithBlueClothDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TableWithBlueClothDeed()
+ (ctor) TableWithBlueClothDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TableWithOrangeClothAddon.html b/Docs/types/TableWithOrangeClothAddon.html new file mode 100644 index 0000000..dc4436e --- /dev/null +++ b/Docs/types/TableWithOrangeClothAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TableWithOrangeClothAddon + + +

Back to Server.Items

+

TableWithOrangeClothAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) TableWithOrangeClothAddon()
+ (ctor) TableWithOrangeClothAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TableWithOrangeClothDeed.html b/Docs/types/TableWithOrangeClothDeed.html new file mode 100644 index 0000000..b459ec6 --- /dev/null +++ b/Docs/types/TableWithOrangeClothDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TableWithOrangeClothDeed + + +

Back to Server.Items

+

TableWithOrangeClothDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TableWithOrangeClothDeed()
+ (ctor) TableWithOrangeClothDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TableWithPurpleClothAddon.html b/Docs/types/TableWithPurpleClothAddon.html new file mode 100644 index 0000000..ffad017 --- /dev/null +++ b/Docs/types/TableWithPurpleClothAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TableWithPurpleClothAddon + + +

Back to Server.Items

+

TableWithPurpleClothAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) TableWithPurpleClothAddon()
+ (ctor) TableWithPurpleClothAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TableWithPurpleClothDeed.html b/Docs/types/TableWithPurpleClothDeed.html new file mode 100644 index 0000000..3149dc8 --- /dev/null +++ b/Docs/types/TableWithPurpleClothDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TableWithPurpleClothDeed + + +

Back to Server.Items

+

TableWithPurpleClothDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TableWithPurpleClothDeed()
+ (ctor) TableWithPurpleClothDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TableWithRedClothAddon.html b/Docs/types/TableWithRedClothAddon.html new file mode 100644 index 0000000..2ae32c2 --- /dev/null +++ b/Docs/types/TableWithRedClothAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TableWithRedClothAddon + + +

Back to Server.Items

+

TableWithRedClothAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) TableWithRedClothAddon()
+ (ctor) TableWithRedClothAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TableWithRedClothDeed.html b/Docs/types/TableWithRedClothDeed.html new file mode 100644 index 0000000..250db05 --- /dev/null +++ b/Docs/types/TableWithRedClothDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TableWithRedClothDeed + + +

Back to Server.Items

+

TableWithRedClothDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TableWithRedClothDeed()
+ (ctor) TableWithRedClothDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tailor.html b/Docs/types/Tailor.html new file mode 100644 index 0000000..e6be0a2 --- /dev/null +++ b/Docs/types/Tailor.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Tailor + + +

Back to Server.Mobiles

+

Tailor : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Tailor()
+ (ctor) Tailor( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual Item CreateBulkOrder( Mobile from, bool fromContextMenu )
+ virtual void Deserialize( GenericReader reader )
+ virtual TimeSpan GetNextBulkOrder( Mobile from )
+ virtual void InitSBInfo()
+ virtual bool IsValidBulkOrder( Item item )
+ virtual void OnSuccessfulBulkOrderReceive( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool SupportsBulkOrders( Mobile from )
+ + diff --git a/Docs/types/TailorBag.html b/Docs/types/TailorBag.html new file mode 100644 index 0000000..384c328 --- /dev/null +++ b/Docs/types/TailorBag.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TailorBag + + +

Back to Server.Items

+

TailorBag : Bag, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (ctor) TailorBag()
+ (ctor) TailorBag( int amount )
+ (ctor) TailorBag( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TailorGuildmaster.html b/Docs/types/TailorGuildmaster.html new file mode 100644 index 0000000..aeefaf5 --- /dev/null +++ b/Docs/types/TailorGuildmaster.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TailorGuildmaster + + +

Back to Server.Mobiles

+

TailorGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) TailorGuildmaster()
+ (ctor) TailorGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TailorRewardCalculator.html b/Docs/types/TailorRewardCalculator.html new file mode 100644 index 0000000..08ce0ff --- /dev/null +++ b/Docs/types/TailorRewardCalculator.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - TailorRewardCalculator + + +

Back to Server.Engines.BulkOrders

+

TailorRewardCalculator : RewardCalculator

+ (static) Item CreateBearRug( int type )
+ (static) Item CreateCBD( int type )
+ (static) Item CreateCloth( int type )
+ (static) Item CreatePowerScroll( int type )
+ (static) Item CreateRunicKit( int type )
+ (static) Item CreateSandals( int type )
+ (static) Item CreateStretchedHide( int type )
+ (static) Item CreateTapestry( int type )
+ (ctor) TailorRewardCalculator()
+ virtual int ComputeGold( int quantity, bool exceptional, BulkMaterialType material, int itemCount, Type type )
+ virtual int ComputePoints( int quantity, bool exceptional, BulkMaterialType material, int itemCount, Type type )
+ + diff --git a/Docs/types/TailorStone.html b/Docs/types/TailorStone.html new file mode 100644 index 0000000..54057b9 --- /dev/null +++ b/Docs/types/TailorStone.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TailorStone + + +

Back to Server.Items

+

TailorStone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TailorStone()
+ (ctor) TailorStone( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Taint.html b/Docs/types/Taint.html new file mode 100644 index 0000000..6e28e65 --- /dev/null +++ b/Docs/types/Taint.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Taint + + +

Back to Server.Items

+

Taint : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Taint()
+ (ctor) Taint( int amount )
+ (ctor) Taint( Serial serial )
+ (ctor) Taint( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TaintedWool.html b/Docs/types/TaintedWool.html new file mode 100644 index 0000000..c8d20c6 --- /dev/null +++ b/Docs/types/TaintedWool.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TaintedWool + + +

Back to Server.Items

+

TaintedWool : Wool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+ (static) void OnSpun( ISpinningWheel wheel, Mobile from, int hue )
+ (ctor) TaintedWool()
+ (ctor) TaintedWool( int amount )
+ (ctor) TaintedWool( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TakeCareConversation.html b/Docs/types/TakeCareConversation.html new file mode 100644 index 0000000..2b1ecf4 --- /dev/null +++ b/Docs/types/TakeCareConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TakeCareConversation + + +

Back to Server.Engines.Quests.Zento

+

TakeCareConversation : QuestConversation

+ (ctor) TakeCareConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/TaleOfThreeTribes.html b/Docs/types/TaleOfThreeTribes.html new file mode 100644 index 0000000..2072fd3 --- /dev/null +++ b/Docs/types/TaleOfThreeTribes.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TaleOfThreeTribes + + +

Back to Server.Items

+

TaleOfThreeTribes : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TaleOfThreeTribes()
+ (ctor) TaleOfThreeTribes( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TalesOfVesperVol1.html b/Docs/types/TalesOfVesperVol1.html new file mode 100644 index 0000000..d1fb8c4 --- /dev/null +++ b/Docs/types/TalesOfVesperVol1.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TalesOfVesperVol1 + + +

Back to Server.Items

+

TalesOfVesperVol1 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TalesOfVesperVol1()
+ (ctor) TalesOfVesperVol1( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TalismanAttribute.html b/Docs/types/TalismanAttribute.html new file mode 100644 index 0000000..beacbc3 --- /dev/null +++ b/Docs/types/TalismanAttribute.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - TalismanAttribute + + +

Back to Server.Items

+

TalismanAttribute

+

Nested Types: SaveFlag

+ (static) bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
+ (static) void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
+ (ctor) TalismanAttribute()
+ (ctor) TalismanAttribute( TalismanAttribute copy )
+ (ctor) TalismanAttribute( GenericReader reader )
+ (ctor) TalismanAttribute( Type type, TextDefinition name )
+ (ctor) TalismanAttribute( Type type, TextDefinition name, int amount )
+ int Amount( get; set; )
+ bool IsEmpty( get; )
+ bool IsItem( get; )
+ TextDefinition Name( get; set; )
+ Type Type( get; set; )
+ int DamageBonus( Mobile to )
+ virtual void Serialize( GenericWriter writer )
+ virtual string ToString()
+ + diff --git a/Docs/types/TalismanForm.html b/Docs/types/TalismanForm.html new file mode 100644 index 0000000..9ffdd84 --- /dev/null +++ b/Docs/types/TalismanForm.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TalismanForm + + +

Back to Server.Items

+

TalismanForm (Enum)

+ CuSidhe = 1031670,
+ Squirrel = 1031671,
+ Ferret = 1031672,
+ Reptalon = 1075202
+ + diff --git a/Docs/types/TalismanReleaseEntry.html b/Docs/types/TalismanReleaseEntry.html new file mode 100644 index 0000000..9771302 --- /dev/null +++ b/Docs/types/TalismanReleaseEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TalismanReleaseEntry + + +

Back to Server.Mobiles

+

(BaseTalismanSummon) - TalismanReleaseEntry : ContextMenuEntry

+ (ctor) TalismanReleaseEntry( Mobile m )
+ virtual void OnClick()
+ + diff --git a/Docs/types/TalismanRemoval.html b/Docs/types/TalismanRemoval.html new file mode 100644 index 0000000..9e7bc47 --- /dev/null +++ b/Docs/types/TalismanRemoval.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TalismanRemoval + + +

Back to Server.Items

+

TalismanRemoval (Enum)

+ None = 0,
+ Ward = 390,
+ Damage = 404,
+ Curse = 407,
+ Wildfire = 2843
+ + diff --git a/Docs/types/TalismanSlayer.html b/Docs/types/TalismanSlayer.html new file mode 100644 index 0000000..24f5cbc --- /dev/null +++ b/Docs/types/TalismanSlayer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TalismanSlayer + + +

Back to Server.Items

+

TalismanSlayer

+ (static) void Initialize()
+ (static) bool Slays( TalismanSlayerName name, Mobile m )
+ + diff --git a/Docs/types/TalismanSlayerName.html b/Docs/types/TalismanSlayerName.html new file mode 100644 index 0000000..499d9c0 --- /dev/null +++ b/Docs/types/TalismanSlayerName.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - TalismanSlayerName + + +

Back to Server.Items

+

TalismanSlayerName (Enum)

+ None = 0,
+ Bear = 1,
+ Vermin = 2,
+ Bat = 3,
+ Mage = 4,
+ Beetle = 5,
+ Bird = 6,
+ Ice = 7,
+ Flame = 8,
+ Bovine = 9
+ + diff --git a/Docs/types/TalismanTarget.html b/Docs/types/TalismanTarget.html new file mode 100644 index 0000000..175ad91 --- /dev/null +++ b/Docs/types/TalismanTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TalismanTarget + + +

Back to Server.Items

+

(BaseTalisman) - TalismanTarget : Target

+ (ctor) TalismanTarget( BaseTalisman talisman )
+ virtual void OnTarget( Mobile from, object o )
+ + diff --git a/Docs/types/TalkEntry.html b/Docs/types/TalkEntry.html new file mode 100644 index 0000000..d799ff2 --- /dev/null +++ b/Docs/types/TalkEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TalkEntry + + +

Back to Server.Engines.Quests

+

TalkEntry : ContextMenuEntry

+ (ctor) TalkEntry( BaseQuester quester )
+ virtual void OnClick()
+ + diff --git a/Docs/types/TalkingToWisps.html b/Docs/types/TalkingToWisps.html new file mode 100644 index 0000000..3aaaaf8 --- /dev/null +++ b/Docs/types/TalkingToWisps.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TalkingToWisps + + +

Back to Server.Items

+

TalkingToWisps : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TalkingToWisps()
+ (ctor) TalkingToWisps( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TallCabinet.html b/Docs/types/TallCabinet.html new file mode 100644 index 0000000..99f6c42 --- /dev/null +++ b/Docs/types/TallCabinet.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TallCabinet + + +

Back to Server.Items

+

TallCabinet : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TallCabinet()
+ (ctor) TallCabinet( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TallElvenBedEastAddon.html b/Docs/types/TallElvenBedEastAddon.html new file mode 100644 index 0000000..79eded0 --- /dev/null +++ b/Docs/types/TallElvenBedEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TallElvenBedEastAddon + + +

Back to Server.Items

+

TallElvenBedEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) TallElvenBedEastAddon()
+ (ctor) TallElvenBedEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TallElvenBedEastDeed.html b/Docs/types/TallElvenBedEastDeed.html new file mode 100644 index 0000000..c8fc727 --- /dev/null +++ b/Docs/types/TallElvenBedEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TallElvenBedEastDeed + + +

Back to Server.Items

+

TallElvenBedEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TallElvenBedEastDeed()
+ (ctor) TallElvenBedEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TallElvenBedSouthAddon.html b/Docs/types/TallElvenBedSouthAddon.html new file mode 100644 index 0000000..214a774 --- /dev/null +++ b/Docs/types/TallElvenBedSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TallElvenBedSouthAddon + + +

Back to Server.Items

+

TallElvenBedSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) TallElvenBedSouthAddon()
+ (ctor) TallElvenBedSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TallElvenBedSouthDeed.html b/Docs/types/TallElvenBedSouthDeed.html new file mode 100644 index 0000000..fae8003 --- /dev/null +++ b/Docs/types/TallElvenBedSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TallElvenBedSouthDeed + + +

Back to Server.Items

+

TallElvenBedSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TallElvenBedSouthDeed()
+ (ctor) TallElvenBedSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TallMusicStand.html b/Docs/types/TallMusicStand.html new file mode 100644 index 0000000..cb6e7b9 --- /dev/null +++ b/Docs/types/TallMusicStand.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TallMusicStand + + +

Back to Server.Items

+

TallMusicStand : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TallMusicStand()
+ (ctor) TallMusicStand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TallStrawHat.html b/Docs/types/TallStrawHat.html new file mode 100644 index 0000000..060f65b --- /dev/null +++ b/Docs/types/TallStrawHat.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - TallStrawHat + + +

Back to Server.Items

+

TallStrawHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) TallStrawHat()
+ (ctor) TallStrawHat( Serial serial )
+ (ctor) TallStrawHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TalonBite.html b/Docs/types/TalonBite.html new file mode 100644 index 0000000..85363d4 --- /dev/null +++ b/Docs/types/TalonBite.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TalonBite + + +

Back to Server.Items

+

TalonBite : OrnateAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TalonBite()
+ (ctor) TalonBite( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TalonStrike.html b/Docs/types/TalonStrike.html new file mode 100644 index 0000000..17e663d --- /dev/null +++ b/Docs/types/TalonStrike.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TalonStrike + + +

Back to Server.Items

+

TalonStrike : WeaponAbility

+

Nested Types: InternalTimer

+ (static) Hashtable Registry( get; )
+ (ctor) TalonStrike()
+ int BaseMana( get; )
+ double DamageScalar( get; )
+ virtual bool CheckSkills( Mobile from )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/Tambourine.html b/Docs/types/Tambourine.html new file mode 100644 index 0000000..e9f9ed9 --- /dev/null +++ b/Docs/types/Tambourine.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Tambourine + + +

Back to Server.Items

+

Tambourine : BaseInstrument, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) Tambourine()
+ (ctor) Tambourine( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TambourineTassel.html b/Docs/types/TambourineTassel.html new file mode 100644 index 0000000..c98f9ca --- /dev/null +++ b/Docs/types/TambourineTassel.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TambourineTassel + + +

Back to Server.Items

+

TambourineTassel : BaseInstrument, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) TambourineTassel()
+ (ctor) TambourineTassel( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TameEntry.html b/Docs/types/TameEntry.html new file mode 100644 index 0000000..4b85648 --- /dev/null +++ b/Docs/types/TameEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TameEntry + + +

Back to Server.Mobiles

+

(BaseCreature) - TameEntry : ContextMenuEntry

+ (ctor) TameEntry( Mobile from, BaseCreature creature )
+ virtual void OnClick()
+ + diff --git a/Docs/types/TamingDragons.html b/Docs/types/TamingDragons.html new file mode 100644 index 0000000..bc5cff4 --- /dev/null +++ b/Docs/types/TamingDragons.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TamingDragons + + +

Back to Server.Items

+

TamingDragons : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TamingDragons()
+ (ctor) TamingDragons( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TanBook.html b/Docs/types/TanBook.html new file mode 100644 index 0000000..1ccff84 --- /dev/null +++ b/Docs/types/TanBook.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TanBook + + +

Back to Server.Items

+

TanBook : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TanBook()
+ (ctor) TanBook( Serial serial )
+ (ctor) TanBook( bool writable )
+ (ctor) TanBook( int pageCount, bool writable )
+ (ctor) TanBook( string title, string author, int pageCount, bool writable )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tanner.html b/Docs/types/Tanner.html new file mode 100644 index 0000000..16662d3 --- /dev/null +++ b/Docs/types/Tanner.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Tanner + + +

Back to Server.Mobiles

+

Tanner : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Tanner()
+ (ctor) Tanner( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry1N.html b/Docs/types/Tapestry1N.html new file mode 100644 index 0000000..f6fb333 --- /dev/null +++ b/Docs/types/Tapestry1N.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry1N + + +

Back to Server.Items

+

Tapestry1N : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry1N()
+ (ctor) Tapestry1N( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry2N.html b/Docs/types/Tapestry2N.html new file mode 100644 index 0000000..cbd7442 --- /dev/null +++ b/Docs/types/Tapestry2N.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry2N + + +

Back to Server.Items

+

Tapestry2N : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry2N()
+ (ctor) Tapestry2N( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry2W.html b/Docs/types/Tapestry2W.html new file mode 100644 index 0000000..714bb42 --- /dev/null +++ b/Docs/types/Tapestry2W.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry2W + + +

Back to Server.Items

+

Tapestry2W : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry2W()
+ (ctor) Tapestry2W( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry3N.html b/Docs/types/Tapestry3N.html new file mode 100644 index 0000000..7275694 --- /dev/null +++ b/Docs/types/Tapestry3N.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry3N + + +

Back to Server.Items

+

Tapestry3N : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry3N()
+ (ctor) Tapestry3N( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry3W.html b/Docs/types/Tapestry3W.html new file mode 100644 index 0000000..ad8dfde --- /dev/null +++ b/Docs/types/Tapestry3W.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry3W + + +

Back to Server.Items

+

Tapestry3W : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry3W()
+ (ctor) Tapestry3W( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry4N.html b/Docs/types/Tapestry4N.html new file mode 100644 index 0000000..ec23b86 --- /dev/null +++ b/Docs/types/Tapestry4N.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry4N + + +

Back to Server.Items

+

Tapestry4N : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry4N()
+ (ctor) Tapestry4N( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry4W.html b/Docs/types/Tapestry4W.html new file mode 100644 index 0000000..ec37508 --- /dev/null +++ b/Docs/types/Tapestry4W.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry4W + + +

Back to Server.Items

+

Tapestry4W : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry4W()
+ (ctor) Tapestry4W( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry5N.html b/Docs/types/Tapestry5N.html new file mode 100644 index 0000000..6798ae8 --- /dev/null +++ b/Docs/types/Tapestry5N.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry5N + + +

Back to Server.Items

+

Tapestry5N : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry5N()
+ (ctor) Tapestry5N( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry5W.html b/Docs/types/Tapestry5W.html new file mode 100644 index 0000000..e621937 --- /dev/null +++ b/Docs/types/Tapestry5W.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry5W + + +

Back to Server.Items

+

Tapestry5W : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry5W()
+ (ctor) Tapestry5W( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry6N.html b/Docs/types/Tapestry6N.html new file mode 100644 index 0000000..5e6bc6f --- /dev/null +++ b/Docs/types/Tapestry6N.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry6N + + +

Back to Server.Items

+

Tapestry6N : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry6N()
+ (ctor) Tapestry6N( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tapestry6W.html b/Docs/types/Tapestry6W.html new file mode 100644 index 0000000..91c343d --- /dev/null +++ b/Docs/types/Tapestry6W.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tapestry6W + + +

Back to Server.Items

+

Tapestry6W : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalItem

+ (ctor) Tapestry6W()
+ (ctor) Tapestry6W( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnLocationChange( Point3D oldLocation )
+ virtual void OnMapChange()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TapestryOfSosaria.html b/Docs/types/TapestryOfSosaria.html new file mode 100644 index 0000000..6c3aa65 --- /dev/null +++ b/Docs/types/TapestryOfSosaria.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TapestryOfSosaria + + +

Back to Server.Items

+

TapestryOfSosaria : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+

Nested Types: InternalGump

+ (ctor) TapestryOfSosaria()
+ (ctor) TapestryOfSosaria( Serial serial )
+ int LabelNumber( get; )
+ SecureLevel Level( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Target.html b/Docs/types/Target.html new file mode 100644 index 0000000..07c267b --- /dev/null +++ b/Docs/types/Target.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - Target + + +

Back to Server.Targeting

+

Target

+

Derived Types: AddPartyTarget, AddTarget, AIControlMobileTarget, AllSkillsTarget, BankTarget, BindTarget, BladedItemTarget, BolaTarget, CharacterStatueTarget, ClientTarget, ClothingBlessTarget, ContainerTarget, CoOwnerTarget, CopyTarget, CorpseTarget, DeathAdderCharmTarget, DesignInsertTarget, DigTarget, DiscordanceTarget, DismountTarget, DupeTarget, FlipTarget, ForensicTarget, GuildPropsTarget, GuildRecruitTarget, HarvestTarget, HerdingTarget, HouseAccessTarget, HouseBanTarget, HouseFriendTarget, HouseKickTarget, HouseOwnerTarget, InternalFirstTarget, InternalSecondTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTarget, InternalTargetDst, InternalTargetPoison, InternalTargetSrc, LargeBODTarget, LockdownTarget, MoveTarget, MultiTarget, NextPointTarget, NightSightTarget, OfferContractTarget, PetLinkTarget, PickLoomTarget, PickMoveTarget, PickTarget, PickWheelTarget, PickWheelTarget, PickWheelTarget, PlantPourTarget, PollinateTarget, ProcessFungiTarget, PropsTarget, PVBuyTarget, RemovePartyTarget, RentTarget, SacrificeTarget, SecureTarget, SendTarget, SetObjectTarget, SimpleStateTarget, SimpleStateTarget<T>, SimpleTarget, SkillsTarget, SkillTarget, SmallBODTarget, SnowTarget, SnowTarget, SpeechLogTarget, StableTarget, StealingTarget, StuckMenuTarget, TalismanTarget, TargetWeapon, ThrowTarget, ThrowTarget, ThrowTarget, UnlockTarget, ViewEqTarget, VisTarget, WandTarget, WayPointSeqTarget

+

Nested Types: TimeoutTimer

+ (static) void Cancel( Mobile m )
+ (ctor) Target( int range, bool allowGround, TargetFlags flags )
+ bool AllowGround( get; set; )
+ bool AllowNonlocal( get; set; )
+ bool CheckLOS( get; set; )
+ bool DisallowMultis( get; set; )
+ TargetFlags Flags( get; set; )
+ int Range( get; set; )
+ int TargetID( get; )
+ DateTime TimeoutTime( get; )
+ void BeginTimeout( Mobile from, TimeSpan delay )
+ void Cancel( Mobile from, TargetCancelType type )
+ void CancelTimeout()
+ virtual Packet GetPacketFor( NetState ns )
+ void Invoke( Mobile from, object targeted )
+ virtual void OnCantSeeTarget( Mobile from, object targeted )
+ virtual void OnNonlocalTarget( Mobile from, object targeted )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType )
+ virtual void OnTargetDeleted( Mobile from, object targeted )
+ virtual void OnTargetFinish( Mobile from )
+ virtual void OnTargetInSecureTrade( Mobile from, object targeted )
+ virtual void OnTargetNotAccessible( Mobile from, object targeted )
+ virtual void OnTargetOutOfLOS( Mobile from, object targeted )
+ virtual void OnTargetOutOfRange( Mobile from, object targeted )
+ virtual void OnTargetUntargetable( Mobile from, object targeted )
+ void Timeout( Mobile from )
+ + diff --git a/Docs/types/TargetCallback.html b/Docs/types/TargetCallback.html new file mode 100644 index 0000000..e5b5a80 --- /dev/null +++ b/Docs/types/TargetCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TargetCallback + + +

Back to Server

+

TargetCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) TargetCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, object targeted, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, object targeted )
+ + diff --git a/Docs/types/TargetCancelType.html b/Docs/types/TargetCancelType.html new file mode 100644 index 0000000..0df8bc9 --- /dev/null +++ b/Docs/types/TargetCancelType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TargetCancelType + + +

Back to Server.Targeting

+

TargetCancelType (Enum)

+ Overriden = 0,
+ Canceled = 1,
+ Disconnected = 2,
+ Timeout = 3
+ + diff --git a/Docs/types/TargetCommands.html b/Docs/types/TargetCommands.html new file mode 100644 index 0000000..6756629 --- /dev/null +++ b/Docs/types/TargetCommands.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TargetCommands + + +

Back to Server.Commands.Generic

+

TargetCommands

+ (static) List<BaseCommand> AllCommands( get; )
+ (static) void Initialize()
+ (static) void Register( BaseCommand command )
+ (ctor) TargetCommands()
+ + diff --git a/Docs/types/TargetEffect.html b/Docs/types/TargetEffect.html new file mode 100644 index 0000000..29b64fc --- /dev/null +++ b/Docs/types/TargetEffect.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - TargetEffect + + +

Back to Server.Network

+

TargetEffect : HuedEffect

+ (ctor) TargetEffect( IEntity e, int itemID, int speed, int duration, int hue, int renderMode )
+ + diff --git a/Docs/types/TargetFlags.html b/Docs/types/TargetFlags.html new file mode 100644 index 0000000..bd3df91 --- /dev/null +++ b/Docs/types/TargetFlags.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TargetFlags + + +

Back to Server.Targeting

+

TargetFlags (Enum)

+ None = 0,
+ Harmful = 1,
+ Beneficial = 2
+ + diff --git a/Docs/types/TargetParticleEffect.html b/Docs/types/TargetParticleEffect.html new file mode 100644 index 0000000..ce5a06e --- /dev/null +++ b/Docs/types/TargetParticleEffect.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - TargetParticleEffect + + +

Back to Server.Network

+

TargetParticleEffect : ParticleEffect

+ (ctor) TargetParticleEffect( IEntity e, int itemID, int speed, int duration, int hue, int renderMode, int effect, int layer, int unknown )
+ + diff --git a/Docs/types/TargetProfile.html b/Docs/types/TargetProfile.html new file mode 100644 index 0000000..83fd1cb --- /dev/null +++ b/Docs/types/TargetProfile.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TargetProfile + + +

Back to Server.Diagnostics

+

TargetProfile : BaseProfile

+ (static) IEnumerable<TargetProfile> Profiles( get; )
+ (static) TargetProfile Acquire( Type type )
+ (ctor) TargetProfile( Type type )
+ + diff --git a/Docs/types/TargetReq.html b/Docs/types/TargetReq.html new file mode 100644 index 0000000..87b40af --- /dev/null +++ b/Docs/types/TargetReq.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - TargetReq + + +

Back to Server.Network

+

TargetReq : Packet

+ (ctor) TargetReq( Target t )
+ + diff --git a/Docs/types/TargetStateCallback-T-.html b/Docs/types/TargetStateCallback-T-.html new file mode 100644 index 0000000..e802e02 --- /dev/null +++ b/Docs/types/TargetStateCallback-T-.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TargetStateCallback<T> + + +

Back to Server

+

TargetStateCallback<T> : MulticastDelegate, ICloneable, ISerializable

+ (ctor) TargetStateCallback<T>( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, object targeted, T state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, object targeted, T state )
+ + diff --git a/Docs/types/TargetStateCallback.html b/Docs/types/TargetStateCallback.html new file mode 100644 index 0000000..d10580e --- /dev/null +++ b/Docs/types/TargetStateCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TargetStateCallback + + +

Back to Server

+

TargetStateCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) TargetStateCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, object targeted, object state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, object targeted, object state )
+ + diff --git a/Docs/types/TargetWeapon.html b/Docs/types/TargetWeapon.html new file mode 100644 index 0000000..bbf80a8 --- /dev/null +++ b/Docs/types/TargetWeapon.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TargetWeapon + + +

Back to Server.Items

+

(WeaponEngravingTool) - TargetWeapon : Target

+ (ctor) TargetWeapon( WeaponEngravingTool tool )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/TarotCardsArtifact.html b/Docs/types/TarotCardsArtifact.html new file mode 100644 index 0000000..1397eb2 --- /dev/null +++ b/Docs/types/TarotCardsArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TarotCardsArtifact + + +

Back to Server.Items

+

TarotCardsArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TarotCardsArtifact()
+ (ctor) TarotCardsArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TasteID.html b/Docs/types/TasteID.html new file mode 100644 index 0000000..6eacea1 --- /dev/null +++ b/Docs/types/TasteID.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TasteID + + +

Back to Server.SkillHandlers

+

TasteID

+

Nested Types: InternalTarget

+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) TasteID()
+ + diff --git a/Docs/types/TatteredAncientMummyWrapping.html b/Docs/types/TatteredAncientMummyWrapping.html new file mode 100644 index 0000000..1de12d0 --- /dev/null +++ b/Docs/types/TatteredAncientMummyWrapping.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TatteredAncientMummyWrapping + + +

Back to Server.Items

+

TatteredAncientMummyWrapping : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TatteredAncientMummyWrapping()
+ (ctor) TatteredAncientMummyWrapping( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TattsukeHakama.html b/Docs/types/TattsukeHakama.html new file mode 100644 index 0000000..2e1d150 --- /dev/null +++ b/Docs/types/TattsukeHakama.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TattsukeHakama + + +

Back to Server.Items

+

TattsukeHakama : BasePants, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) TattsukeHakama()
+ (ctor) TattsukeHakama( int hue )
+ (ctor) TattsukeHakama( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavaraSewel.html b/Docs/types/TavaraSewel.html new file mode 100644 index 0000000..a708c7c --- /dev/null +++ b/Docs/types/TavaraSewel.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - TavaraSewel + + +

Back to Server.Mobiles

+

TavaraSewel : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) TavaraSewel()
+ (ctor) TavaraSewel( Serial serial )
+ bool AlwaysMurderer( get; )
+ bool ClickTitle( get; )
+ bool DeleteCorpseOnDeath( get; )
+ bool ShowFameTitle( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAngerSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal1.html b/Docs/types/TavarasJournal1.html new file mode 100644 index 0000000..7eb9da2 --- /dev/null +++ b/Docs/types/TavarasJournal1.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal1 + + +

Back to Server.Items

+

TavarasJournal1 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal1()
+ (ctor) TavarasJournal1( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal11.html b/Docs/types/TavarasJournal11.html new file mode 100644 index 0000000..49057ec --- /dev/null +++ b/Docs/types/TavarasJournal11.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal11 + + +

Back to Server.Items

+

TavarasJournal11 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal11()
+ (ctor) TavarasJournal11( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal14.html b/Docs/types/TavarasJournal14.html new file mode 100644 index 0000000..c80f43c --- /dev/null +++ b/Docs/types/TavarasJournal14.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal14 + + +

Back to Server.Items

+

TavarasJournal14 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal14()
+ (ctor) TavarasJournal14( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal16.html b/Docs/types/TavarasJournal16.html new file mode 100644 index 0000000..2b644a9 --- /dev/null +++ b/Docs/types/TavarasJournal16.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal16 + + +

Back to Server.Items

+

TavarasJournal16 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal16()
+ (ctor) TavarasJournal16( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal16b.html b/Docs/types/TavarasJournal16b.html new file mode 100644 index 0000000..becc598 --- /dev/null +++ b/Docs/types/TavarasJournal16b.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal16b + + +

Back to Server.Items

+

TavarasJournal16b : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal16b()
+ (ctor) TavarasJournal16b( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal17.html b/Docs/types/TavarasJournal17.html new file mode 100644 index 0000000..7a2aec5 --- /dev/null +++ b/Docs/types/TavarasJournal17.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal17 + + +

Back to Server.Items

+

TavarasJournal17 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal17()
+ (ctor) TavarasJournal17( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal19.html b/Docs/types/TavarasJournal19.html new file mode 100644 index 0000000..0a5ea65 --- /dev/null +++ b/Docs/types/TavarasJournal19.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal19 + + +

Back to Server.Items

+

TavarasJournal19 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal19()
+ (ctor) TavarasJournal19( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal2.html b/Docs/types/TavarasJournal2.html new file mode 100644 index 0000000..d3a8edc --- /dev/null +++ b/Docs/types/TavarasJournal2.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal2 + + +

Back to Server.Items

+

TavarasJournal2 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal2()
+ (ctor) TavarasJournal2( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal3.html b/Docs/types/TavarasJournal3.html new file mode 100644 index 0000000..458885c --- /dev/null +++ b/Docs/types/TavarasJournal3.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal3 + + +

Back to Server.Items

+

TavarasJournal3 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal3()
+ (ctor) TavarasJournal3( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal6.html b/Docs/types/TavarasJournal6.html new file mode 100644 index 0000000..84983ad --- /dev/null +++ b/Docs/types/TavarasJournal6.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal6 + + +

Back to Server.Items

+

TavarasJournal6 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal6()
+ (ctor) TavarasJournal6( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal7.html b/Docs/types/TavarasJournal7.html new file mode 100644 index 0000000..6db6c29 --- /dev/null +++ b/Docs/types/TavarasJournal7.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal7 + + +

Back to Server.Items

+

TavarasJournal7 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal7()
+ (ctor) TavarasJournal7( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal8.html b/Docs/types/TavarasJournal8.html new file mode 100644 index 0000000..f75422c --- /dev/null +++ b/Docs/types/TavarasJournal8.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal8 + + +

Back to Server.Items

+

TavarasJournal8 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal8()
+ (ctor) TavarasJournal8( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavarasJournal9.html b/Docs/types/TavarasJournal9.html new file mode 100644 index 0000000..a5f97b6 --- /dev/null +++ b/Docs/types/TavarasJournal9.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TavarasJournal9 + + +

Back to Server.Items

+

TavarasJournal9 : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TavarasJournal9()
+ (ctor) TavarasJournal9( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TavernKeeper.html b/Docs/types/TavernKeeper.html new file mode 100644 index 0000000..5d950d2 --- /dev/null +++ b/Docs/types/TavernKeeper.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TavernKeeper + + +

Back to Server.Mobiles

+

TavernKeeper : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) TavernKeeper()
+ (ctor) TavernKeeper( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TaxidermyKit.html b/Docs/types/TaxidermyKit.html new file mode 100644 index 0000000..0d62928 --- /dev/null +++ b/Docs/types/TaxidermyKit.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TaxidermyKit + + +

Back to Server.Items

+

TaxidermyKit : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: CorpseTarget, TrophyInfo

+ (ctor) TaxidermyKit()
+ (ctor) TaxidermyKit( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TeachEntry.html b/Docs/types/TeachEntry.html new file mode 100644 index 0000000..61d2bef --- /dev/null +++ b/Docs/types/TeachEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TeachEntry + + +

Back to Server.ContextMenus

+

TeachEntry : ContextMenuEntry

+ (ctor) TeachEntry( SkillName skill, BaseCreature m, Mobile from, bool enabled )
+ virtual void OnClick()
+ + diff --git a/Docs/types/TeachResult.html b/Docs/types/TeachResult.html new file mode 100644 index 0000000..e51972c --- /dev/null +++ b/Docs/types/TeachResult.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TeachResult + + +

Back to Server.Mobiles

+

TeachResult (Enum)

+ Success = 0,
+ Failure = 1,
+ KnowsMoreThanMe = 2,
+ KnowsWhatIKnow = 3,
+ SkillNotRaisable = 4,
+ NotEnoughFreePoints = 5
+ + diff --git a/Docs/types/TeapotNorthArtifact.html b/Docs/types/TeapotNorthArtifact.html new file mode 100644 index 0000000..17e210a --- /dev/null +++ b/Docs/types/TeapotNorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TeapotNorthArtifact + + +

Back to Server.Items

+

TeapotNorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TeapotNorthArtifact()
+ (ctor) TeapotNorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TeapotWestArtifact.html b/Docs/types/TeapotWestArtifact.html new file mode 100644 index 0000000..dd9490e --- /dev/null +++ b/Docs/types/TeapotWestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TeapotWestArtifact + + +

Back to Server.Items

+

TeapotWestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TeapotWestArtifact()
+ (ctor) TeapotWestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tekagi.html b/Docs/types/Tekagi.html new file mode 100644 index 0000000..525dd35 --- /dev/null +++ b/Docs/types/Tekagi.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - Tekagi + + +

Back to Server.Items

+

Tekagi : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Tekagi()
+ (ctor) Tekagi( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TeleCommand.html b/Docs/types/TeleCommand.html new file mode 100644 index 0000000..a124a1d --- /dev/null +++ b/Docs/types/TeleCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TeleCommand + + +

Back to Server.Commands.Generic

+

TeleCommand : BaseCommand

+ (ctor) TeleCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/TelekinesisSpell.html b/Docs/types/TelekinesisSpell.html new file mode 100644 index 0000000..ad1f354 --- /dev/null +++ b/Docs/types/TelekinesisSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TelekinesisSpell + + +

Back to Server.Spells.Third

+

TelekinesisSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) TelekinesisSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Container item )
+ void Target( ITelekinesisable obj )
+ + diff --git a/Docs/types/TelekinisisScroll.html b/Docs/types/TelekinisisScroll.html new file mode 100644 index 0000000..f1436b5 --- /dev/null +++ b/Docs/types/TelekinisisScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TelekinisisScroll + + +

Back to Server.Items

+

TelekinisisScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) TelekinisisScroll()
+ (ctor) TelekinisisScroll( int amount )
+ (ctor) TelekinisisScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TeleportScroll.html b/Docs/types/TeleportScroll.html new file mode 100644 index 0000000..4b43ef6 --- /dev/null +++ b/Docs/types/TeleportScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TeleportScroll + + +

Back to Server.Items

+

TeleportScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) TeleportScroll()
+ (ctor) TeleportScroll( int amount )
+ (ctor) TeleportScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TeleportSpell.html b/Docs/types/TeleportSpell.html new file mode 100644 index 0000000..88950bc --- /dev/null +++ b/Docs/types/TeleportSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TeleportSpell + + +

Back to Server.Spells.Third

+

TeleportSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) TeleportSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/TeleportTimer.html b/Docs/types/TeleportTimer.html new file mode 100644 index 0000000..80d16d3 --- /dev/null +++ b/Docs/types/TeleportTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TeleportTimer + + +

Back to Server.Mobiles

+

(Harrower) - TeleportTimer : Timer

+ (ctor) TeleportTimer( Mobile owner )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Teleporter.html b/Docs/types/Teleporter.html new file mode 100644 index 0000000..9867328 --- /dev/null +++ b/Docs/types/Teleporter.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Teleporter + + +

Back to Server.Items

+

Teleporter : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: KeywordTeleporter, SkillTeleporter

+ (ctor) Teleporter()
+ (ctor) Teleporter( Serial serial )
+ (ctor) Teleporter( Point3D pointDest, Map mapDest )
+ (ctor) Teleporter( Point3D pointDest, Map mapDest, bool creatures )
+ bool Active( get; set; )
+ bool CombatCheck( get; set; )
+ bool Creatures( get; set; )
+ TimeSpan Delay( get; set; )
+ bool DestEffect( get; set; )
+ int LabelNumber( get; )
+ Map MapDest( get; set; )
+ Point3D PointDest( get; set; )
+ int SoundID( get; set; )
+ bool SourceEffect( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DoTeleport( Mobile m )
+ void DoTeleport_Callback( object state )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual void StartTeleport( Mobile m )
+ + diff --git a/Docs/types/TeleportersCreator.html b/Docs/types/TeleportersCreator.html new file mode 100644 index 0000000..ab08a52 --- /dev/null +++ b/Docs/types/TeleportersCreator.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - TeleportersCreator + + +

Back to Server.Commands

+

(GenTeleporter) - TeleportersCreator

+ (static) bool FindTeleporter( Map map, Point3D p )
+ (ctor) TeleportersCreator()
+ void CreateTeleporter( Point3D pointLocation, Point3D pointDestination, Map mapLocation, Map mapDestination, bool back )
+ void CreateTeleporter( int xLoc, int yLoc, int zLoc, int xDest, int yDest, int zDest, Map map, bool back )
+ void CreateTeleporter( int xLoc, int yLoc, int zLoc, int xDest, int yDest, int zDest, Map mapLocation, Map mapDestination, bool back )
+ int CreateTeleporters()
+ void CreateTeleportersFelucca( Map map )
+ void CreateTeleportersMap( Map map )
+ void CreateTeleportersMap2( Map map )
+ void CreateTeleportersMap3( Map map )
+ void CreateTeleportersMap4( Map map )
+ void CreateTeleportersTrammel( Map map )
+ void DestroyTeleporter( int x, int y, int z, Map map )
+ + diff --git a/Docs/types/Telescope.html b/Docs/types/Telescope.html new file mode 100644 index 0000000..24b2a74 --- /dev/null +++ b/Docs/types/Telescope.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Telescope + + +

Back to Server.Items

+

Telescope : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) Telescope()
+ (ctor) Telescope( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TellCommand.html b/Docs/types/TellCommand.html new file mode 100644 index 0000000..4588dfa --- /dev/null +++ b/Docs/types/TellCommand.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TellCommand + + +

Back to Server.Commands.Generic

+

TellCommand : BaseCommand

+ (ctor) TellCommand()
+ virtual void Execute( CommandEventArgs e, object obj )
+ + diff --git a/Docs/types/TempNoHousingRegion.html b/Docs/types/TempNoHousingRegion.html new file mode 100644 index 0000000..69b4120 --- /dev/null +++ b/Docs/types/TempNoHousingRegion.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TempNoHousingRegion + + +

Back to Server.Multis

+

TempNoHousingRegion : BaseRegion, IComparable

+ (ctor) TempNoHousingRegion( BaseHouse house, Mobile regionowner )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ bool CheckAccount( Mobile mobCheck, Mobile accCheck )
+ + diff --git a/Docs/types/TerathanAvenger.html b/Docs/types/TerathanAvenger.html new file mode 100644 index 0000000..add94a7 --- /dev/null +++ b/Docs/types/TerathanAvenger.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - TerathanAvenger + + +

Back to Server.Mobiles

+

TerathanAvenger : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) TerathanAvenger()
+ (ctor) TerathanAvenger( Serial serial )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TerathanDrone.html b/Docs/types/TerathanDrone.html new file mode 100644 index 0000000..bd93998 --- /dev/null +++ b/Docs/types/TerathanDrone.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TerathanDrone + + +

Back to Server.Mobiles

+

TerathanDrone : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) TerathanDrone()
+ (ctor) TerathanDrone( Serial serial )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TerathanMatriarch.html b/Docs/types/TerathanMatriarch.html new file mode 100644 index 0000000..c19f10a --- /dev/null +++ b/Docs/types/TerathanMatriarch.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TerathanMatriarch + + +

Back to Server.Mobiles

+

TerathanMatriarch : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) TerathanMatriarch()
+ (ctor) TerathanMatriarch( Serial serial )
+ OppositionGroup OppositionGroup( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TerathanWarrior.html b/Docs/types/TerathanWarrior.html new file mode 100644 index 0000000..5f56078 --- /dev/null +++ b/Docs/types/TerathanWarrior.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TerathanWarrior + + +

Back to Server.Mobiles

+

TerathanWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) TerathanWarrior()
+ (ctor) TerathanWarrior( Serial serial )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TerminateContractEntry.html b/Docs/types/TerminateContractEntry.html new file mode 100644 index 0000000..aa7e513 --- /dev/null +++ b/Docs/types/TerminateContractEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TerminateContractEntry + + +

Back to Server.Mobiles

+

(RentedVendor) - TerminateContractEntry : ContextMenuEntry

+ (ctor) TerminateContractEntry( RentedVendor vendor )
+ virtual void OnClick()
+ + diff --git a/Docs/types/TerribleHatchlingsQuest.html b/Docs/types/TerribleHatchlingsQuest.html new file mode 100644 index 0000000..01ac795 --- /dev/null +++ b/Docs/types/TerribleHatchlingsQuest.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TerribleHatchlingsQuest + + +

Back to Server.Engines.Quests.Zento

+

TerribleHatchlingsQuest : QuestSystem

+ (ctor) TerribleHatchlingsQuest()
+ (ctor) TerribleHatchlingsQuest( PlayerMobile from )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ + diff --git a/Docs/types/Tessen.html b/Docs/types/Tessen.html new file mode 100644 index 0000000..dcbae91 --- /dev/null +++ b/Docs/types/Tessen.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - Tessen + + +

Back to Server.Items

+

Tessen : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: PilferedDancerFans, WindsEdge

+ (ctor) Tessen()
+ (ctor) Tessen( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TestCenter.html b/Docs/types/TestCenter.html new file mode 100644 index 0000000..b1874a2 --- /dev/null +++ b/Docs/types/TestCenter.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TestCenter + + +

Back to Server.Misc

+

TestCenter

+

Nested Types: TCHelpGump

+ (static) bool Enabled( get; )
+ (static) void ChangeDexterity( Mobile from, int value )
+ (static) void ChangeIntelligence( Mobile from, int value )
+ (static) void ChangeSkill( Mobile from, string name, double value )
+ (static) void ChangeStrength( Mobile from, int value )
+ (static) void EventSink_Speech( SpeechEventArgs args )
+ (static) void Initialize()
+ (ctor) TestCenter()
+ + diff --git a/Docs/types/Tetsubo.html b/Docs/types/Tetsubo.html new file mode 100644 index 0000000..4677538 --- /dev/null +++ b/Docs/types/Tetsubo.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - Tetsubo + + +

Back to Server.Items

+

Tetsubo : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: Exiler

+ (ctor) Tetsubo()
+ (ctor) Tetsubo( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TextDefinition.html b/Docs/types/TextDefinition.html new file mode 100644 index 0000000..1756603 --- /dev/null +++ b/Docs/types/TextDefinition.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - TextDefinition + + +

Back to Server

+

TextDefinition

+ (static) void AddHtmlText( Gump g, int x, int y, int width, int height, TextDefinition text, bool back, bool scroll )
+ (static) void AddHtmlText( Gump g, int x, int y, int width, int height, TextDefinition text, bool back, bool scroll, int numberColor, int stringColor )
+ (static) void AddTo( ObjectPropertyList list, TextDefinition def )
+ (static) void SendMessageTo( Mobile m, TextDefinition def )
+ (ctor) TextDefinition( int number )
+ (ctor) TextDefinition( GenericReader reader )
+ (ctor) TextDefinition( string text )
+ (ctor) TextDefinition( int number, string text )
+ int Number( get; )
+ string String( get; )
+ virtual void Serialize( GenericWriter writer )
+ virtual string ToString()
+ + diff --git a/Docs/types/TextRelay.html b/Docs/types/TextRelay.html new file mode 100644 index 0000000..34a12b0 --- /dev/null +++ b/Docs/types/TextRelay.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TextRelay + + +

Back to Server.Gumps

+

TextRelay

+ (ctor) TextRelay( int entryID, string text )
+ int EntryID( get; )
+ string Text( get; )
+ + diff --git a/Docs/types/ThatchedRoofCottageDeed.html b/Docs/types/ThatchedRoofCottageDeed.html new file mode 100644 index 0000000..5ead434 --- /dev/null +++ b/Docs/types/ThatchedRoofCottageDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ThatchedRoofCottageDeed + + +

Back to Server.Multis.Deeds

+

ThatchedRoofCottageDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ThatchedRoofCottageDeed()
+ (ctor) ThatchedRoofCottageDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheBeserkersMaul.html b/Docs/types/TheBeserkersMaul.html new file mode 100644 index 0000000..b4c09fa --- /dev/null +++ b/Docs/types/TheBeserkersMaul.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TheBeserkersMaul + + +

Back to Server.Items

+

TheBeserkersMaul : Maul, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TheBeserkersMaul()
+ (ctor) TheBeserkersMaul( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheDestroyer.html b/Docs/types/TheDestroyer.html new file mode 100644 index 0000000..6b183ff --- /dev/null +++ b/Docs/types/TheDestroyer.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TheDestroyer + + +

Back to Server.Items

+

TheDestroyer : NoDachi, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TheDestroyer()
+ (ctor) TheDestroyer( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheDragonSlayer.html b/Docs/types/TheDragonSlayer.html new file mode 100644 index 0000000..666ab67 --- /dev/null +++ b/Docs/types/TheDragonSlayer.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TheDragonSlayer + + +

Back to Server.Items

+

TheDragonSlayer : Lance, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TheDragonSlayer()
+ (ctor) TheDragonSlayer( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheDryadBow.html b/Docs/types/TheDryadBow.html new file mode 100644 index 0000000..f94a4ac --- /dev/null +++ b/Docs/types/TheDryadBow.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TheDryadBow + + +

Back to Server.Items

+

TheDryadBow : Bow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TheDryadBow()
+ (ctor) TheDryadBow( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheFight.html b/Docs/types/TheFight.html new file mode 100644 index 0000000..7052f4e --- /dev/null +++ b/Docs/types/TheFight.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TheFight + + +

Back to Server.Items

+

TheFight : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TheFight()
+ (ctor) TheFight( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheHorselord.html b/Docs/types/TheHorselord.html new file mode 100644 index 0000000..10cecd3 --- /dev/null +++ b/Docs/types/TheHorselord.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TheHorselord + + +

Back to Server.Items

+

TheHorselord : Yumi, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TheHorselord()
+ (ctor) TheHorselord( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheMostKnowledgePerson.html b/Docs/types/TheMostKnowledgePerson.html new file mode 100644 index 0000000..f073dd9 --- /dev/null +++ b/Docs/types/TheMostKnowledgePerson.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TheMostKnowledgePerson + + +

Back to Server.Items

+

TheMostKnowledgePerson : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) TheMostKnowledgePerson()
+ (ctor) TheMostKnowledgePerson( Serial serial )
+ bool CanBeBlessed( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheNightReaper.html b/Docs/types/TheNightReaper.html new file mode 100644 index 0000000..3ff84c9 --- /dev/null +++ b/Docs/types/TheNightReaper.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TheNightReaper + + +

Back to Server.Items

+

TheNightReaper : RepeatingCrossbow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TheNightReaper()
+ (ctor) TheNightReaper( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheRobeOfBritanniaAri.html b/Docs/types/TheRobeOfBritanniaAri.html new file mode 100644 index 0000000..39cb511 --- /dev/null +++ b/Docs/types/TheRobeOfBritanniaAri.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TheRobeOfBritanniaAri + + +

Back to Server.Items

+

TheRobeOfBritanniaAri : BaseOuterTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) TheRobeOfBritanniaAri()
+ (ctor) TheRobeOfBritanniaAri( Serial serial )
+ int BasePhysicalResistance( get; )
+ bool CanFortify( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TheSummoningQuest.html b/Docs/types/TheSummoningQuest.html new file mode 100644 index 0000000..9f70c42 --- /dev/null +++ b/Docs/types/TheSummoningQuest.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - TheSummoningQuest + + +

Back to Server.Engines.Quests.Doom

+

TheSummoningQuest : QuestSystem

+ (static) int GetDaemonBonesFor( BaseCreature creature )
+ (ctor) TheSummoningQuest()
+ (ctor) TheSummoningQuest( Victoria victoria, PlayerMobile from )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ Victoria Victoria( get; )
+ bool WaitForSummon( get; set; )
+ virtual void Accept()
+ virtual void Cancel()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void Slice()
+ + diff --git a/Docs/types/TheTaskmaster.html b/Docs/types/TheTaskmaster.html new file mode 100644 index 0000000..77b44bc --- /dev/null +++ b/Docs/types/TheTaskmaster.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TheTaskmaster + + +

Back to Server.Items

+

TheTaskmaster : WarFork, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TheTaskmaster()
+ (ctor) TheTaskmaster( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Theater.html b/Docs/types/Theater.html new file mode 100644 index 0000000..e06bc81 --- /dev/null +++ b/Docs/types/Theater.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - Theater + + +

Back to Server.Engines.Quests.Collector

+

Theater (Enum)

+ Britain = 0,
+ Nujelm = 1,
+ Jhelom = 2
+ + diff --git a/Docs/types/ThickGrayStoneWall.html b/Docs/types/ThickGrayStoneWall.html new file mode 100644 index 0000000..04b4810 --- /dev/null +++ b/Docs/types/ThickGrayStoneWall.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ThickGrayStoneWall + + +

Back to Server.Items

+

ThickGrayStoneWall : BaseWall, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ThickGrayStoneWall( ThickGrayStoneWallTypes type )
+ (ctor) ThickGrayStoneWall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThickGrayStoneWallTypes.html b/Docs/types/ThickGrayStoneWallTypes.html new file mode 100644 index 0000000..50a37d8 --- /dev/null +++ b/Docs/types/ThickGrayStoneWallTypes.html @@ -0,0 +1,31 @@ + + + RunUO Documentation - Class Overview - ThickGrayStoneWallTypes + + +

Back to Server.Items

+

ThickGrayStoneWallTypes (Enum)

+ WestArch = 0,
+ NorthArch = 1,
+ SouthArchTop = 2,
+ EastArchTop = 3,
+ EastArch = 4,
+ SouthArch = 5,
+ Wall1 = 6,
+ Wall2 = 7,
+ Wall3 = 8,
+ SouthWindow = 9,
+ Wall4 = 10,
+ EastWindow = 11,
+ WestArch2 = 12,
+ NorthArch2 = 13,
+ SouthArchTop2 = 14,
+ EastArchTop2 = 15,
+ EastArch2 = 16,
+ SouthArch2 = 17,
+ SWArchEdge2 = 18,
+ SouthWindow2 = 19,
+ NEArchEdge2 = 20,
+ EastWindow2 = 21
+ + diff --git a/Docs/types/Thief.html b/Docs/types/Thief.html new file mode 100644 index 0000000..5fd0865 --- /dev/null +++ b/Docs/types/Thief.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Thief + + +

Back to Server.Mobiles

+

Thief : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Thief()
+ (ctor) Thief( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThiefAI.html b/Docs/types/ThiefAI.html new file mode 100644 index 0000000..7279d6a --- /dev/null +++ b/Docs/types/ThiefAI.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ThiefAI + + +

Back to Server.Mobiles

+

ThiefAI : BaseAI

+ (ctor) ThiefAI( BaseCreature m )
+ virtual bool DoActionCombat()
+ virtual bool DoActionFlee()
+ virtual bool DoActionGuard()
+ virtual bool DoActionWander()
+ + diff --git a/Docs/types/ThiefGuildmaster.html b/Docs/types/ThiefGuildmaster.html new file mode 100644 index 0000000..1b3c1c8 --- /dev/null +++ b/Docs/types/ThiefGuildmaster.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ThiefGuildmaster + + +

Back to Server.Mobiles

+

ThiefGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) ThiefGuildmaster()
+ (ctor) ThiefGuildmaster( Serial serial )
+ TimeSpan JoinAge( get; )
+ NpcGuild NpcGuild( get; )
+ virtual bool CheckCustomReqs( PlayerMobile pm )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void InitOutfit()
+ virtual bool OnGoldGiven( Mobile from, Gold dropped )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void SayWelcomeTo( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThighBoots.html b/Docs/types/ThighBoots.html new file mode 100644 index 0000000..3f2baef --- /dev/null +++ b/Docs/types/ThighBoots.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - ThighBoots + + +

Back to Server.Items

+

ThighBoots : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IArcaneEquip

+ (ctor) ThighBoots()
+ (ctor) ThighBoots( Serial serial )
+ (ctor) ThighBoots( int hue )
+ int CurArcaneCharges( get; set; )
+ CraftResource DefaultResource( get; )
+ bool IsArcane( get; )
+ int MaxArcaneCharges( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Update()
+ + diff --git a/Docs/types/ThinBrickWall.html b/Docs/types/ThinBrickWall.html new file mode 100644 index 0000000..f16a550 --- /dev/null +++ b/Docs/types/ThinBrickWall.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ThinBrickWall + + +

Back to Server.Items

+

ThinBrickWall : BaseWall, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ThinBrickWall( ThinBrickWallTypes type )
+ (ctor) ThinBrickWall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThinBrickWallTypes.html b/Docs/types/ThinBrickWallTypes.html new file mode 100644 index 0000000..7f5e6f5 --- /dev/null +++ b/Docs/types/ThinBrickWallTypes.html @@ -0,0 +1,45 @@ + + + RunUO Documentation - Class Overview - ThinBrickWallTypes + + +

Back to Server.Items

+

ThinBrickWallTypes (Enum)

+ Corner = 0,
+ SouthWall = 1,
+ EastWall = 2,
+ CornerPost = 3,
+ EastDoorFrame = 4,
+ SouthDoorFrame = 5,
+ WestDoorFrame = 6,
+ NorthDoorFrame = 7,
+ SouthWindow = 8,
+ EastWindow = 9,
+ CornerMedium = 10,
+ SouthWallMedium = 11,
+ EastWallMedium = 12,
+ CornerPostMedium = 13,
+ CornerShort = 14,
+ SouthWallShort = 15,
+ EastWallShort = 16,
+ CornerPostShort = 17,
+ CornerArch = 18,
+ SouthArch = 19,
+ WestArch = 20,
+ EastArch = 21,
+ NorthArch = 22,
+ SouthCenterArchTall = 23,
+ EastCenterArchTall = 24,
+ EastCornerArchTall = 25,
+ SouthCornerArchTall = 26,
+ SouthCornerArch = 27,
+ EastCornerArch = 28,
+ SouthCenterArch = 29,
+ EastCenterArch = 30,
+ CornerVVShort = 31,
+ SouthWallVVShort = 32,
+ EastWallVVShort = 33,
+ SouthWallVShort = 34,
+ EastWallVShort = 35
+ + diff --git a/Docs/types/ThinLongsword.html b/Docs/types/ThinLongsword.html new file mode 100644 index 0000000..a442964 --- /dev/null +++ b/Docs/types/ThinLongsword.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - ThinLongsword + + +

Back to Server.Items

+

ThinLongsword : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ThinLongsword()
+ (ctor) ThinLongsword( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThinStoneWall.html b/Docs/types/ThinStoneWall.html new file mode 100644 index 0000000..6835da7 --- /dev/null +++ b/Docs/types/ThinStoneWall.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ThinStoneWall + + +

Back to Server.Items

+

ThinStoneWall : BaseWall, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ThinStoneWall( ThinStoneWallTypes type )
+ (ctor) ThinStoneWall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThinStoneWallTypes.html b/Docs/types/ThinStoneWallTypes.html new file mode 100644 index 0000000..325d09c --- /dev/null +++ b/Docs/types/ThinStoneWallTypes.html @@ -0,0 +1,34 @@ + + + RunUO Documentation - Class Overview - ThinStoneWallTypes + + +

Back to Server.Items

+

ThinStoneWallTypes (Enum)

+ Corner = 0,
+ EastWall = 1,
+ SouthWall = 2,
+ CornerPost = 3,
+ EastDoorFrame = 4,
+ SouthDoorFrame = 5,
+ NorthDoorFrame = 6,
+ WestDoorFrame = 7,
+ SouthWindow = 8,
+ EastWindow = 9,
+ CornerMedium = 10,
+ SouthWallMedium = 11,
+ EastWallMedium = 12,
+ CornerPostMedium = 13,
+ CornerArch = 14,
+ EastArch = 15,
+ SouthArch = 16,
+ NorthArch = 17,
+ WestArch = 18,
+ CornerShort = 19,
+ EastWallShort = 20,
+ SouthWallShort = 21,
+ CornerPostShort = 22,
+ SouthWallShort2 = 23,
+ EastWallShort2 = 24
+ + diff --git a/Docs/types/ThirdKillObjective.html b/Docs/types/ThirdKillObjective.html new file mode 100644 index 0000000..7e6f5f8 --- /dev/null +++ b/Docs/types/ThirdKillObjective.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ThirdKillObjective + + +

Back to Server.Engines.Quests.Zento

+

ThirdKillObjective : QuestObjective

+ (ctor) ThirdKillObjective()
+ (ctor) ThirdKillObjective( int startingProgress )
+ int MaxProgress( get; )
+ object Message( get; )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ virtual void RenderProgress( BaseQuestGump gump )
+ + diff --git a/Docs/types/ThirdTrialIntroConversation.html b/Docs/types/ThirdTrialIntroConversation.html new file mode 100644 index 0000000..d02dbcb --- /dev/null +++ b/Docs/types/ThirdTrialIntroConversation.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ThirdTrialIntroConversation + + +

Back to Server.Engines.Quests.Samurai

+

ThirdTrialIntroConversation : QuestConversation

+ (ctor) ThirdTrialIntroConversation()
+ (ctor) ThirdTrialIntroConversation( bool dragon )
+ object Message( get; )
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ThirdTrialIntroObjective.html b/Docs/types/ThirdTrialIntroObjective.html new file mode 100644 index 0000000..17d0269 --- /dev/null +++ b/Docs/types/ThirdTrialIntroObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ThirdTrialIntroObjective + + +

Back to Server.Engines.Quests.Samurai

+

ThirdTrialIntroObjective : QuestObjective

+ (ctor) ThirdTrialIntroObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/ThirdTrialKillConversation.html b/Docs/types/ThirdTrialKillConversation.html new file mode 100644 index 0000000..2e5d0a7 --- /dev/null +++ b/Docs/types/ThirdTrialKillConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ThirdTrialKillConversation + + +

Back to Server.Engines.Quests.Samurai

+

ThirdTrialKillConversation : QuestConversation

+ (ctor) ThirdTrialKillConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ThirdTrialKillObjective.html b/Docs/types/ThirdTrialKillObjective.html new file mode 100644 index 0000000..98c390e --- /dev/null +++ b/Docs/types/ThirdTrialKillObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ThirdTrialKillObjective + + +

Back to Server.Engines.Quests.Samurai

+

ThirdTrialKillObjective : QuestObjective

+ (ctor) ThirdTrialKillObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ virtual void OnKill( BaseCreature creature, Container corpse )
+ + diff --git a/Docs/types/ThirdTrialReturnObjective.html b/Docs/types/ThirdTrialReturnObjective.html new file mode 100644 index 0000000..ade9eea --- /dev/null +++ b/Docs/types/ThirdTrialReturnObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ThirdTrialReturnObjective + + +

Back to Server.Engines.Quests.Samurai

+

ThirdTrialReturnObjective : QuestObjective

+ (ctor) ThirdTrialReturnObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/Throne.html b/Docs/types/Throne.html new file mode 100644 index 0000000..2bed6fb --- /dev/null +++ b/Docs/types/Throne.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Throne + + +

Back to Server.Items

+

Throne : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Throne()
+ (ctor) Throne( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThrottlePacketCallback.html b/Docs/types/ThrottlePacketCallback.html new file mode 100644 index 0000000..ad7a410 --- /dev/null +++ b/Docs/types/ThrottlePacketCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ThrottlePacketCallback + + +

Back to Server.Network

+

ThrottlePacketCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) ThrottlePacketCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( NetState state, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( NetState state )
+ + diff --git a/Docs/types/ThrowTarget.html b/Docs/types/ThrowTarget.html new file mode 100644 index 0000000..a2b0a36 --- /dev/null +++ b/Docs/types/ThrowTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ThrowTarget + + +

Back to Server.Items

+

(BaseConflagrationPotion) - ThrowTarget : Target

+ (ctor) ThrowTarget( BaseConflagrationPotion potion )
+ BaseConflagrationPotion Potion( get; )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/ThrowingDagger.html b/Docs/types/ThrowingDagger.html new file mode 100644 index 0000000..2b99adf --- /dev/null +++ b/Docs/types/ThrowingDagger.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ThrowingDagger + + +

Back to Server.Items

+

ThrowingDagger : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTarget

+ (ctor) ThrowingDagger()
+ (ctor) ThrowingDagger( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThunderstormScroll.html b/Docs/types/ThunderstormScroll.html new file mode 100644 index 0000000..cfc0aed --- /dev/null +++ b/Docs/types/ThunderstormScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ThunderstormScroll + + +

Back to Server.Items

+

ThunderstormScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ThunderstormScroll()
+ (ctor) ThunderstormScroll( int amount )
+ (ctor) ThunderstormScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ThunderstormSpell.html b/Docs/types/ThunderstormSpell.html new file mode 100644 index 0000000..78f2d0d --- /dev/null +++ b/Docs/types/ThunderstormSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ThunderstormSpell + + +

Back to Server.Spells.Spellweaving

+

ThunderstormSpell : ArcanistSpell, ISpell

+ (static) void DoExpire( Mobile m )
+ (static) int GetCastRecoveryMalus( Mobile m )
+ (ctor) ThunderstormSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/TileData.html b/Docs/types/TileData.html new file mode 100644 index 0000000..eb02414 --- /dev/null +++ b/Docs/types/TileData.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TileData + + +

Back to Server

+

TileData

+ (static) ItemData[] ItemTable( get; )
+ (static) LandData[] LandTable( get; )
+ (static) int MaxItemValue( get; )
+ (static) int MaxLandValue( get; )
+ (static) string ReadNameString( BinaryReader bin )
+ + diff --git a/Docs/types/TileFlag.html b/Docs/types/TileFlag.html new file mode 100644 index 0000000..1940c7e --- /dev/null +++ b/Docs/types/TileFlag.html @@ -0,0 +1,42 @@ + + + RunUO Documentation - Class Overview - TileFlag + + +

Back to Server

+

TileFlag (Enum)

+ None = 0x0000000000000000,
+ Background = 0x0000000000000001,
+ Weapon = 0x0000000000000002,
+ Transparent = 0x0000000000000004,
+ Translucent = 0x0000000000000008,
+ Wall = 0x0000000000000010,
+ Damaging = 0x0000000000000020,
+ Impassable = 0x0000000000000040,
+ Wet = 0x0000000000000080,
+ Unknown1 = 0x0000000000000100,
+ Surface = 0x0000000000000200,
+ Bridge = 0x0000000000000400,
+ Generic = 0x0000000000000800,
+ Window = 0x0000000000001000,
+ NoShoot = 0x0000000000002000,
+ ArticleA = 0x0000000000004000,
+ ArticleAn = 0x0000000000008000,
+ Internal = 0x0000000000010000,
+ Foliage = 0x0000000000020000,
+ PartialHue = 0x0000000000040000,
+ Unknown2 = 0x0000000000080000,
+ Map = 0x0000000000100000,
+ Container = 0x0000000000200000,
+ Wearable = 0x0000000000400000,
+ LightSource = 0x0000000000800000,
+ Animation = 0x0000000001000000,
+ NoDiagonal = 0x0000000002000000,
+ Unknown3 = 0x0000000004000000,
+ Armor = 0x0000000008000000,
+ Roof = 0x0000000010000000,
+ Door = 0x0000000020000000,
+ StairBack = 0x0000000040000000,
+ StairRight = 0x0000000080000000
+ + diff --git a/Docs/types/TileList.html b/Docs/types/TileList.html new file mode 100644 index 0000000..fb10191 --- /dev/null +++ b/Docs/types/TileList.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TileList + + +

Back to Server

+

TileList

+ (ctor) TileList()
+ int Count( get; )
+ void Add( ushort id, sbyte z )
+ void AddRange( StaticTile[] tiles )
+ StaticTile[] ToArray()
+ + diff --git a/Docs/types/TileMatrix.html b/Docs/types/TileMatrix.html new file mode 100644 index 0000000..3f22352 --- /dev/null +++ b/Docs/types/TileMatrix.html @@ -0,0 +1,33 @@ + + + RunUO Documentation - Class Overview - TileMatrix + + +

Back to Server

+

TileMatrix

+ (ctor) TileMatrix( Map owner, int fileIndex, int mapID, int width, int height )
+ int BlockHeight( get; )
+ int BlockWidth( get; )
+ FileStream DataStream( get; set; )
+ StaticTile[][][] EmptyStaticBlock( get; )
+ bool Exists( get; )
+ int Height( get; )
+ BinaryReader IndexReader( get; set; )
+ FileStream IndexStream( get; set; )
+ FileStream MapStream( get; set; )
+ Map Owner( get; )
+ TileMatrixPatch Patch( get; )
+ int Width( get; )
+ void Dispose()
+ void Force()
+ LandTile[] GetLandBlock( int x, int y )
+ LandTile GetLandTile( int x, int y )
+ StaticTile[][][] GetStaticBlock( int x, int y )
+ StaticTile[] GetStaticTiles( int x, int y )
+ StaticTile[] GetStaticTiles( int x, int y, bool multis )
+ LandTile[] ReadLandBlock( int x, int y )
+ StaticTile[][][] ReadStaticBlock( int x, int y )
+ void SetLandBlock( int x, int y, LandTile[] value )
+ void SetStaticBlock( int x, int y, StaticTile[][][] value )
+ + diff --git a/Docs/types/TileMatrixPatch.html b/Docs/types/TileMatrixPatch.html new file mode 100644 index 0000000..ddc1737 --- /dev/null +++ b/Docs/types/TileMatrixPatch.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TileMatrixPatch + + +

Back to Server

+

TileMatrixPatch

+ (static) bool Enabled( get; set; )
+ (ctor) TileMatrixPatch( TileMatrix matrix, int index )
+ int LandBlocks( get; )
+ int StaticBlocks( get; )
+ int PatchLand( TileMatrix matrix, string dataPath, string indexPath )
+ int PatchStatics( TileMatrix matrix, string dataPath, string indexPath, string lookupPath )
+ + diff --git a/Docs/types/TileState.html b/Docs/types/TileState.html new file mode 100644 index 0000000..d92bc3a --- /dev/null +++ b/Docs/types/TileState.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TileState + + +

Back to Server.Commands

+

(Add) - TileState

+ (ctor) TileState( string[] args )
+ (ctor) TileState( int fixedZ, string[] args )
+ (ctor) TileState( bool useFixedZ, int fixedZ, string[] args )
+ + diff --git a/Docs/types/TilesAndEffect.html b/Docs/types/TilesAndEffect.html new file mode 100644 index 0000000..176ef0d --- /dev/null +++ b/Docs/types/TilesAndEffect.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TilesAndEffect + + +

Back to Server.Items

+

(GreenThornsEffect) - TilesAndEffect

+ (ctor) TilesAndEffect( int[] tiles, Type effect )
+ Type Effect( get; )
+ int[] Tiles( get; )
+ + diff --git a/Docs/types/TillerMan.html b/Docs/types/TillerMan.html new file mode 100644 index 0000000..4f3409e --- /dev/null +++ b/Docs/types/TillerMan.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - TillerMan + + +

Back to Server.Items

+

TillerMan : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TillerMan( Serial serial )
+ (ctor) TillerMan( BaseBoat boat )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnSingleClick( Mobile from )
+ void Say( int number )
+ void Say( int number, string args )
+ virtual void Serialize( GenericWriter writer )
+ void SetFacing( Direction dir )
+ + diff --git a/Docs/types/TimberWolf.html b/Docs/types/TimberWolf.html new file mode 100644 index 0000000..f885390 --- /dev/null +++ b/Docs/types/TimberWolf.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TimberWolf + + +

Back to Server.Mobiles

+

TimberWolf : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) TimberWolf()
+ (ctor) TimberWolf( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TimedSkillMod.html b/Docs/types/TimedSkillMod.html new file mode 100644 index 0000000..7d3ac53 --- /dev/null +++ b/Docs/types/TimedSkillMod.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TimedSkillMod + + +

Back to Server

+

TimedSkillMod : SkillMod

+ (ctor) TimedSkillMod( SkillName skill, bool relative, double value, DateTime expire )
+ (ctor) TimedSkillMod( SkillName skill, bool relative, double value, TimeSpan delay )
+ virtual bool CheckCondition()
+ + diff --git a/Docs/types/TimeoutTimer.html b/Docs/types/TimeoutTimer.html new file mode 100644 index 0000000..1ccf4bc --- /dev/null +++ b/Docs/types/TimeoutTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TimeoutTimer + + +

Back to Server.Targeting

+

(Target) - TimeoutTimer : Timer

+ (ctor) TimeoutTimer( Target target, Mobile m, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Timer.html b/Docs/types/Timer.html new file mode 100644 index 0000000..9122594 --- /dev/null +++ b/Docs/types/Timer.html @@ -0,0 +1,40 @@ + + + RunUO Documentation - Class Overview - Timer + + +

Back to Server

+

Timer

+

Derived Types: AITimer, AnimalFormTimer, AnimateTimer, AnimTimer, AttackTimer, AttackTimer, AttackTimer, AutokillTimer, AutoManifestTimer, AutoRestart, AutoSave, AvengeTimer, AvengeTimer, BadStartMessage, CallingTimer, CandyCaneTimer, CastTimer, CloseTimer, CloseTimer, CombatTimer, DamageTimer, DecayTimer, DecayTimer, DecayTimer, DeclineTimer, DefenseTimer, DelayCallTimer, DelayStateCallTimer, DelayStateCallTimer<T>, DelayTimer, DelayTimer, DelayTimer, DeleteTimer, DeleteTimer, DeleteTimer, DigTimer, DrainTimer, DualWieldTimer, EffectTimer, EmptyTimer, EndActionTimer, ExpireAggressorsTimer, ExpireCombatantTimer, ExpireCriminalTimer, ExpirePolymorphTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, ExpireTimer, FeintTimer, FixColumnTimer, FoodDecayTimer, FreeTimer, FrozenTimer, FurnitureTimer, GoodiesTimer, GoodiesTimer, GreenThornsEffect, GuardTimer, GumpTimer, HarvestSoundTimer, HarvestTimer, HeaveTimer, HitsTimer, IdleTimer, IdleTimer, InternalizeTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, InternalTimer, LampRoomKickTimer, LampRoomTimer, LightCycleTimer, LoginTimer, LogoutTimer, LoyaltyTimer, ManaTimer, MoveDelayTimer, MoveTimer, MRExpireTimer, MyRunUO, NightSightTimer, OfferExpireTimer, OrangePetalsTimer, ParalyzedTimer, PayTimer, PoisonTimer, RaiseTimer, RegenTimer, RejoinTimer, RentalExpireTimer, ResetEquipTimer, ResetTimer, RestartTimer, RockTimer, SettleTimer, ShowStew, SliceTimer, SoundEffectTimer, SoundTimer, SpawnTimer, SpawnTimer, SpecialMoveTimer, SpellDamageTimer, SpellDamageTimerAOS, SpinTimer, SpinTimer, SpinTimer, SpinTimer, SpiritSpeakTimer, StamTimer, StatusPage, SummonTimer, TeleportTimer, TeleportTimer, TimeoutTimer, TrackTimer, TransformTimer, TransportTimer, TreasureResetTimer, TurnTimer, UnhideTimer, UnsummonTimer, UpdateAllTimer, WarmodeTimer, WarnTimer, WarTimer, WeaponAbilityTimer, WelcomeTimer, YoungTimer

+

Nested Types: DelayCallTimer, DelayStateCallTimer, DelayStateCallTimer<T>, TimerThread

+ (static) int BreakCount( get; set; )
+ (static) TimerPriority ComputePriority( TimeSpan ts )
+ (static) Timer DelayCall( TimeSpan delay, TimerCallback callback )
+ (static) Timer DelayCall( TimeSpan delay, TimerStateCallback callback, object state )
+ (static) Timer DelayCall( TimeSpan delay, TimeSpan interval, TimerCallback callback )
+ (static) Timer DelayCall( TimeSpan delay, TimerStateCallback<T> callback, T state )
+ (static) Timer DelayCall( TimeSpan delay, TimeSpan interval, TimerStateCallback<T> callback, T state )
+ (static) Timer DelayCall( TimeSpan delay, TimeSpan interval, TimerStateCallback callback, object state )
+ (static) Timer DelayCall( TimeSpan delay, TimeSpan interval, int count, TimerCallback callback )
+ (static) Timer DelayCall( TimeSpan delay, TimeSpan interval, int count, TimerStateCallback<T> callback, T state )
+ (static) Timer DelayCall( TimeSpan delay, TimeSpan interval, int count, TimerStateCallback callback, object state )
+ (static) void DumpInfo( TextWriter tw )
+ (static) string FormatDelegate( Delegate callback )
+ (static) void Slice()
+ (ctor) Timer( TimeSpan delay )
+ (ctor) Timer( TimeSpan delay, TimeSpan interval )
+ (ctor) Timer( TimeSpan delay, TimeSpan interval, int count )
+ bool DefRegCreation( get; )
+ TimeSpan Delay( get; set; )
+ TimeSpan Interval( get; set; )
+ DateTime Next( get; )
+ TimerPriority Priority( get; set; )
+ bool Running( get; set; )
+ TimerProfile GetProfile()
+ virtual void OnTick()
+ virtual void RegCreation()
+ void Start()
+ void Stop()
+ virtual string ToString()
+ + diff --git a/Docs/types/TimerCallback.html b/Docs/types/TimerCallback.html new file mode 100644 index 0000000..9df52f2 --- /dev/null +++ b/Docs/types/TimerCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TimerCallback + + +

Back to Server

+

TimerCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) TimerCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke()
+ + diff --git a/Docs/types/TimerChangeEntry.html b/Docs/types/TimerChangeEntry.html new file mode 100644 index 0000000..995944d --- /dev/null +++ b/Docs/types/TimerChangeEntry.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TimerChangeEntry + + +

Back to Server

+

(TimerThread) - TimerChangeEntry

+ (static) TimerChangeEntry GetInstance( Timer t, int newIndex, bool isAdd )
+ (ctor) TimerChangeEntry( Timer t, int newIndex, bool isAdd )
+ void Free()
+ + diff --git a/Docs/types/TimerPriority.html b/Docs/types/TimerPriority.html new file mode 100644 index 0000000..e81e47c --- /dev/null +++ b/Docs/types/TimerPriority.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TimerPriority + + +

Back to Server

+

TimerPriority (Enum)

+ EveryTick = 0,
+ TenMS = 1,
+ TwentyFiveMS = 2,
+ FiftyMS = 3,
+ TwoFiftyMS = 4,
+ OneSecond = 5,
+ FiveSeconds = 6,
+ OneMinute = 7
+ + diff --git a/Docs/types/TimerProfile.html b/Docs/types/TimerProfile.html new file mode 100644 index 0000000..be98527 --- /dev/null +++ b/Docs/types/TimerProfile.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TimerProfile + + +

Back to Server.Diagnostics

+

TimerProfile : BaseProfile

+ (static) IEnumerable<TimerProfile> Profiles( get; )
+ (static) TimerProfile Acquire( string name )
+ (ctor) TimerProfile( string name )
+ long Created( get; set; )
+ long Started( get; set; )
+ long Stopped( get; set; )
+ virtual void WriteTo( TextWriter op )
+ + diff --git a/Docs/types/TimerStateCallback-T-.html b/Docs/types/TimerStateCallback-T-.html new file mode 100644 index 0000000..f745b72 --- /dev/null +++ b/Docs/types/TimerStateCallback-T-.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TimerStateCallback<T> + + +

Back to Server

+

TimerStateCallback<T> : MulticastDelegate, ICloneable, ISerializable

+ (ctor) TimerStateCallback<T>( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( T state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( T state )
+ + diff --git a/Docs/types/TimerStateCallback.html b/Docs/types/TimerStateCallback.html new file mode 100644 index 0000000..91511d8 --- /dev/null +++ b/Docs/types/TimerStateCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TimerStateCallback + + +

Back to Server

+

TimerStateCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) TimerStateCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( object state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( object state )
+ + diff --git a/Docs/types/TimerThread.html b/Docs/types/TimerThread.html new file mode 100644 index 0000000..b8f7039 --- /dev/null +++ b/Docs/types/TimerThread.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - TimerThread + + +

Back to Server

+

(Timer) - TimerThread

+

Nested Types: TimerChangeEntry

+ (static) void AddTimer( Timer t )
+ (static) void Change( Timer t, int newIndex, bool isAdd )
+ (static) void DumpInfo( TextWriter tw )
+ (static) void PriorityChange( Timer t, int newPrio )
+ (static) void ProcessChangeQueue()
+ (static) void RemoveTimer( Timer t )
+ (static) void Set()
+ (ctor) TimerThread()
+ void TimerMain()
+ + diff --git a/Docs/types/Tinker.html b/Docs/types/Tinker.html new file mode 100644 index 0000000..b36ecce --- /dev/null +++ b/Docs/types/Tinker.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Tinker + + +

Back to Server.Mobiles

+

Tinker : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Tinker()
+ (ctor) Tinker( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TinkerGuildmaster.html b/Docs/types/TinkerGuildmaster.html new file mode 100644 index 0000000..fd84f9f --- /dev/null +++ b/Docs/types/TinkerGuildmaster.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TinkerGuildmaster + + +

Back to Server.Mobiles

+

TinkerGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+

Nested Types: RechargeEntry

+ (ctor) TinkerGuildmaster()
+ (ctor) TinkerGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TinkerTools.html b/Docs/types/TinkerTools.html new file mode 100644 index 0000000..5f27a36 --- /dev/null +++ b/Docs/types/TinkerTools.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TinkerTools + + +

Back to Server.Items

+

TinkerTools : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) TinkerTools()
+ (ctor) TinkerTools( int uses )
+ (ctor) TinkerTools( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TinkersTools.html b/Docs/types/TinkersTools.html new file mode 100644 index 0000000..a3c97d1 --- /dev/null +++ b/Docs/types/TinkersTools.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TinkersTools + + +

Back to Server.Items

+

TinkersTools : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) TinkersTools()
+ (ctor) TinkersTools( int uses )
+ (ctor) TinkersTools( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TinyRedBottle.html b/Docs/types/TinyRedBottle.html new file mode 100644 index 0000000..87f1b24 --- /dev/null +++ b/Docs/types/TinyRedBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TinyRedBottle + + +

Back to Server.Items

+

TinyRedBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TinyRedBottle()
+ (ctor) TinyRedBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TinyYellowBottle.html b/Docs/types/TinyYellowBottle.html new file mode 100644 index 0000000..b82c4cf --- /dev/null +++ b/Docs/types/TinyYellowBottle.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TinyYellowBottle + + +

Back to Server.Items

+

TinyYellowBottle : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TinyYellowBottle()
+ (ctor) TinyYellowBottle( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Titan.html b/Docs/types/Titan.html new file mode 100644 index 0000000..84dcc0c --- /dev/null +++ b/Docs/types/Titan.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Titan + + +

Back to Server.Mobiles

+

Titan : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Titan()
+ (ctor) Titan( Serial serial )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TitansHammer.html b/Docs/types/TitansHammer.html new file mode 100644 index 0000000..8468015 --- /dev/null +++ b/Docs/types/TitansHammer.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TitansHammer + + +

Back to Server.Items

+

TitansHammer : WarHammer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TitansHammer()
+ (ctor) TitansHammer( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TitheEntry.html b/Docs/types/TitheEntry.html new file mode 100644 index 0000000..89e4f98 --- /dev/null +++ b/Docs/types/TitheEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TitheEntry + + +

Back to Server.Items

+

(Ankhs) - TitheEntry : ContextMenuEntry

+ (ctor) TitheEntry( Mobile mobile )
+ virtual void OnClick()
+ + diff --git a/Docs/types/TitheGoldObjective.html b/Docs/types/TitheGoldObjective.html new file mode 100644 index 0000000..b2a9487 --- /dev/null +++ b/Docs/types/TitheGoldObjective.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TitheGoldObjective + + +

Back to Server.Engines.Quests.Haven

+

TitheGoldObjective : QuestObjective

+ (ctor) TitheGoldObjective()
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void OnComplete()
+ + diff --git a/Docs/types/TithingGump.html b/Docs/types/TithingGump.html new file mode 100644 index 0000000..4be1839 --- /dev/null +++ b/Docs/types/TithingGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TithingGump + + +

Back to Server.Gumps

+

TithingGump : Gump

+ (ctor) TithingGump( Mobile from, int offer )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/TitleComparer.html b/Docs/types/TitleComparer.html new file mode 100644 index 0000000..d1a5555 --- /dev/null +++ b/Docs/types/TitleComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TitleComparer + + +

Back to Server.Guilds

+

(GuildRosterGump) - TitleComparer : IComparer<PlayerMobile>

+ (ctor) TitleComparer()
+ virtual int Compare( PlayerMobile x, PlayerMobile y )
+ + diff --git a/Docs/types/TitleInfo.html b/Docs/types/TitleInfo.html new file mode 100644 index 0000000..19ffb2d --- /dev/null +++ b/Docs/types/TitleInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TitleInfo + + +

Back to Server.Mobiles

+

(ChampionTitleInfo) - TitleInfo

+ (static) void Serialize( GenericWriter writer, TitleInfo info )
+ (ctor) TitleInfo()
+ (ctor) TitleInfo( GenericReader reader )
+ DateTime LastDecay( get; set; )
+ int Value( get; set; )
+ + diff --git a/Docs/types/Titles.html b/Docs/types/Titles.html new file mode 100644 index 0000000..f7874d6 --- /dev/null +++ b/Docs/types/Titles.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - Titles + + +

Back to Server.Misc

+

Titles

+ (static) void AwardFame( Mobile m, int offset, bool message )
+ (static) void AwardKarma( Mobile m, int offset, bool message )
+ (static) string ComputeTitle( Mobile beholder, Mobile beheld )
+ (static) Skill GetHighestSkill( Mobile m )
+ (static) string GetSkillLevel( Skill skill )
+ (static) string GetSkillTitle( Mobile mob )
+ (static) int GetTableIndex( Skill skill )
+ (static) int GetTableType( Skill skill )
+ (ctor) Titles()
+ + diff --git a/Docs/types/ToTAdminGump.html b/Docs/types/ToTAdminGump.html new file mode 100644 index 0000000..e135074 --- /dev/null +++ b/Docs/types/ToTAdminGump.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ToTAdminGump + + +

Back to Server.Gumps

+

ToTAdminGump : Gump

+ (static) void Initialize()
+ (static) void ToTAdmin_OnCommand( CommandEventArgs e )
+ (ctor) ToTAdminGump()
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ void SetupToTEras()
+ + diff --git a/Docs/types/ToTRedeemGump.html b/Docs/types/ToTRedeemGump.html new file mode 100644 index 0000000..692c113 --- /dev/null +++ b/Docs/types/ToTRedeemGump.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ToTRedeemGump + + +

Back to Server.Gumps

+

ToTRedeemGump : BaseImageTileButtonsGump

+

Nested Types: PigmentsTileButtonInfo, TypeTileButtonInfo

+ (static) TypeTileButtonInfo[][] NormalRewards( get; )
+ (static) PigmentsTileButtonInfo[][] PigmentRewards( get; )
+ (ctor) ToTRedeemGump( Mobile collector, bool pigments )
+ virtual void HandleButtonResponse( NetState sender, int adjustedButton, ImageTileButtonInfo buttonInfo )
+ virtual void HandleCancel( NetState sender )
+ + diff --git a/Docs/types/ToTTurnInGump.html b/Docs/types/ToTTurnInGump.html new file mode 100644 index 0000000..c652f3e --- /dev/null +++ b/Docs/types/ToTTurnInGump.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ToTTurnInGump + + +

Back to Server.Gumps

+

ToTTurnInGump : BaseImageTileButtonsGump

+ (static) ArrayList FindRedeemableItems( Mobile m )
+ (ctor) ToTTurnInGump( Mobile collector, ArrayList buttons )
+ (ctor) ToTTurnInGump( Mobile collector, ItemTileButtonInfo[] buttons )
+ virtual void HandleButtonResponse( NetState sender, int adjustedButton, ImageTileButtonInfo buttonInfo )
+ virtual void HandleCancel( NetState sender )
+ + diff --git a/Docs/types/ToggleMiningStoneEntry.html b/Docs/types/ToggleMiningStoneEntry.html new file mode 100644 index 0000000..30f4d22 --- /dev/null +++ b/Docs/types/ToggleMiningStoneEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ToggleMiningStoneEntry + + +

Back to Server.Items

+

(BaseHarvestTool) - ToggleMiningStoneEntry : ContextMenuEntry

+ (ctor) ToggleMiningStoneEntry( PlayerMobile mobile, bool value, int number )
+ virtual void OnClick()
+ + diff --git a/Docs/types/ToggleSpecialAbility.html b/Docs/types/ToggleSpecialAbility.html new file mode 100644 index 0000000..e22d9d8 --- /dev/null +++ b/Docs/types/ToggleSpecialAbility.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - ToggleSpecialAbility + + +

Back to Server.Network

+

ToggleSpecialAbility : Packet

+ (ctor) ToggleSpecialAbility( int abilityID, bool active )
+ + diff --git a/Docs/types/TomasDuringCollectingConversation.html b/Docs/types/TomasDuringCollectingConversation.html new file mode 100644 index 0000000..8645bfc --- /dev/null +++ b/Docs/types/TomasDuringCollectingConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TomasDuringCollectingConversation + + +

Back to Server.Engines.Quests.Collector

+

TomasDuringCollectingConversation : QuestConversation

+ (ctor) TomasDuringCollectingConversation()
+ bool Logged( get; )
+ object Message( get; )
+ + diff --git a/Docs/types/TomasONeerlan.html b/Docs/types/TomasONeerlan.html new file mode 100644 index 0000000..c1a715b --- /dev/null +++ b/Docs/types/TomasONeerlan.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TomasONeerlan + + +

Back to Server.Engines.Quests.Collector

+

TomasONeerlan : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) TomasONeerlan()
+ (ctor) TomasONeerlan( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TomasToysConversation.html b/Docs/types/TomasToysConversation.html new file mode 100644 index 0000000..66d1ad1 --- /dev/null +++ b/Docs/types/TomasToysConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TomasToysConversation + + +

Back to Server.Engines.Quests.Collector

+

TomasToysConversation : QuestConversation

+ (ctor) TomasToysConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/TomeOfEnlightenment.html b/Docs/types/TomeOfEnlightenment.html new file mode 100644 index 0000000..1a1f500 --- /dev/null +++ b/Docs/types/TomeOfEnlightenment.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TomeOfEnlightenment + + +

Back to Server.Items

+

TomeOfEnlightenment : Spellbook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) TomeOfEnlightenment()
+ (ctor) TomeOfEnlightenment( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TomeOfLostKnowledge.html b/Docs/types/TomeOfLostKnowledge.html new file mode 100644 index 0000000..e5b5c00 --- /dev/null +++ b/Docs/types/TomeOfLostKnowledge.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TomeOfLostKnowledge + + +

Back to Server.Items

+

TomeOfLostKnowledge : Spellbook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ISlayer

+ (ctor) TomeOfLostKnowledge()
+ (ctor) TomeOfLostKnowledge( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tongs.html b/Docs/types/Tongs.html new file mode 100644 index 0000000..743c6e5 --- /dev/null +++ b/Docs/types/Tongs.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Tongs + + +

Back to Server.Items

+

Tongs : BaseTool, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, ICraftable

+ (ctor) Tongs()
+ (ctor) Tongs( int uses )
+ (ctor) Tongs( Serial serial )
+ CraftSystem CraftSystem( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ToolKit.html b/Docs/types/ToolKit.html new file mode 100644 index 0000000..2a1a1b2 --- /dev/null +++ b/Docs/types/ToolKit.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ToolKit + + +

Back to Server.Items

+

ToolKit : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ToolKit()
+ (ctor) ToolKit( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ToolQuality.html b/Docs/types/ToolQuality.html new file mode 100644 index 0000000..32462ee --- /dev/null +++ b/Docs/types/ToolQuality.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ToolQuality + + +

Back to Server.Items

+

ToolQuality (Enum)

+ Low = 0,
+ Regular = 1,
+ Exceptional = 2
+ + diff --git a/Docs/types/TopicPrompt.html b/Docs/types/TopicPrompt.html new file mode 100644 index 0000000..b70cd9a --- /dev/null +++ b/Docs/types/TopicPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TopicPrompt + + +

Back to Server.Items

+

(BallotBox) - TopicPrompt : Prompt

+ (ctor) TopicPrompt( BallotBox box )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/Torch.html b/Docs/types/Torch.html new file mode 100644 index 0000000..1b537e7 --- /dev/null +++ b/Docs/types/Torch.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Torch + + +

Back to Server.Items

+

Torch : BaseEquipableLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Torch()
+ (ctor) Torch( Serial serial )
+ int LitItemID( get; )
+ int LitSound( get; )
+ int UnlitItemID( get; )
+ int UnlitSound( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Ignite()
+ virtual void OnAdded( object parent )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TormentedChains.html b/Docs/types/TormentedChains.html new file mode 100644 index 0000000..9d05f42 --- /dev/null +++ b/Docs/types/TormentedChains.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TormentedChains + + +

Back to Server.Items

+

TormentedChains : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TormentedChains()
+ (ctor) TormentedChains( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TormentedMinotaur.html b/Docs/types/TormentedMinotaur.html new file mode 100644 index 0000000..b82abb2 --- /dev/null +++ b/Docs/types/TormentedMinotaur.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - TormentedMinotaur + + +

Back to Server.Mobiles

+

TormentedMinotaur : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) TormentedMinotaur()
+ (ctor) TormentedMinotaur( Serial serial )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Torso.html b/Docs/types/Torso.html new file mode 100644 index 0000000..9cf9a0f --- /dev/null +++ b/Docs/types/Torso.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Torso + + +

Back to Server.Items

+

Torso : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Torso()
+ (ctor) Torso( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TotalRefreshPotion.html b/Docs/types/TotalRefreshPotion.html new file mode 100644 index 0000000..6a73b8a --- /dev/null +++ b/Docs/types/TotalRefreshPotion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TotalRefreshPotion + + +

Back to Server.Items

+

TotalRefreshPotion : BaseRefreshPotion, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable, ICommodity

+ (ctor) TotalRefreshPotion()
+ (ctor) TotalRefreshPotion( Serial serial )
+ double Refresh( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TotalType.html b/Docs/types/TotalType.html new file mode 100644 index 0000000..6d292c9 --- /dev/null +++ b/Docs/types/TotalType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TotalType + + +

Back to Server

+

TotalType (Enum)

+ Gold = 0,
+ Items = 1,
+ Weight = 2
+ + diff --git a/Docs/types/TotemOfVoid.html b/Docs/types/TotemOfVoid.html new file mode 100644 index 0000000..9d63665 --- /dev/null +++ b/Docs/types/TotemOfVoid.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TotemOfVoid + + +

Back to Server.Items

+

TotemOfVoid : BaseTalisman, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TotemOfVoid()
+ (ctor) TotemOfVoid( Serial serial )
+ bool ForceShowName( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual Type GetSummoner()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tourmaline.html b/Docs/types/Tourmaline.html new file mode 100644 index 0000000..15efdbf --- /dev/null +++ b/Docs/types/Tourmaline.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Tourmaline + + +

Back to Server.Items

+

Tourmaline : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Tourmaline()
+ (ctor) Tourmaline( int amount )
+ (ctor) Tourmaline( Serial serial )
+ double DefaultWeight( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tower.html b/Docs/types/Tower.html new file mode 100644 index 0000000..0b20262 --- /dev/null +++ b/Docs/types/Tower.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Tower + + +

Back to Server.Multis

+

Tower : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Tower( Serial serial )
+ (ctor) Tower( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int ConvertOffsetY( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TowerDeed.html b/Docs/types/TowerDeed.html new file mode 100644 index 0000000..b24db1f --- /dev/null +++ b/Docs/types/TowerDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TowerDeed + + +

Back to Server.Multis.Deeds

+

TowerDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TowerDeed()
+ (ctor) TowerDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TowerLanternArtifact.html b/Docs/types/TowerLanternArtifact.html new file mode 100644 index 0000000..9aa7486 --- /dev/null +++ b/Docs/types/TowerLanternArtifact.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TowerLanternArtifact + + +

Back to Server.Items

+

TowerLanternArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TowerLanternArtifact()
+ (ctor) TowerLanternArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ bool IsOn( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Town.html b/Docs/types/Town.html new file mode 100644 index 0000000..b37e58f --- /dev/null +++ b/Docs/types/Town.html @@ -0,0 +1,55 @@ + + + RunUO Documentation - Class Overview - Town + + +

Back to Server.Factions

+

Town : IComparable

+

Derived Types: Britain, Magincia, Minoc, Moonglow, SkaraBrae, Trinsic, Vesper, Yew

+ (static) List<Town> Towns( get; )
+ (static) Town FromRegion( Region reg )
+ (static) void GrantTownSilver_OnCommand( CommandEventArgs e )
+ (static) void Initialize()
+ (static) Town Parse( string name )
+ (static) Town ReadReference( GenericReader reader )
+ (static) void WriteReference( GenericWriter writer, Town town )
+ (ctor) Town()
+ int DailyIncome( get; )
+ TownDefinition Definition( get; set; )
+ Mobile Finance( get; set; )
+ int FinanceUpkeep( get; )
+ List<GuardList> GuardLists( get; set; )
+ DateTime LastIncome( get; set; )
+ DateTime LastTaxChange( get; set; )
+ TownMonolith Monolith( get; )
+ int NetCashFlow( get; )
+ Faction Owner( get; set; )
+ Mobile Sheriff( get; set; )
+ int SheriffUpkeep( get; )
+ int Silver( get; set; )
+ TownState State( get; set; )
+ int Tax( get; set; )
+ bool TaxChangeReady( get; )
+ List<VendorList> VendorLists( get; set; )
+ void BeginOrderFiring( Mobile from )
+ ArrayList BuildFinanceList()
+ void Capture( Faction f )
+ void CheckIncome()
+ virtual int CompareTo( object obj )
+ void ConstructGuardLists()
+ void ConstructVendorLists()
+ void EndOrderFiring( Mobile from, object obj )
+ GuardList FindGuardList( Type type )
+ VendorList FindVendorList( Type type )
+ bool IsFinance( Mobile mob )
+ bool IsSheriff( Mobile mob )
+ void ProcessIncome()
+ bool RegisterGuard( BaseFactionGuard guard )
+ bool RegisterVendor( BaseFactionVendor vendor )
+ void StartIncomeTimer()
+ void StopIncomeTimer()
+ virtual string ToString()
+ bool UnregisterGuard( BaseFactionGuard guard )
+ bool UnregisterVendor( BaseFactionVendor vendor )
+ + diff --git a/Docs/types/TownCrier.html b/Docs/types/TownCrier.html new file mode 100644 index 0000000..c4c04db --- /dev/null +++ b/Docs/types/TownCrier.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - TownCrier + + +

Back to Server.Mobiles

+

TownCrier : Mobile, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITownCrierEntryList

+ (static) List<TownCrier> Instances( get; )
+ (ctor) TownCrier()
+ (ctor) TownCrier( Serial serial )
+ List<TownCrierEntry> Entries( get; )
+ virtual TownCrierEntry AddEntry( string[] lines, TimeSpan duration )
+ void AutoShout_Callback()
+ virtual bool CanBeDamaged()
+ virtual void Deserialize( GenericReader reader )
+ void ForceBeginAutoShout()
+ virtual TownCrierEntry GetRandomEntry()
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ virtual void RemoveEntry( TownCrierEntry tce )
+ virtual void Serialize( GenericWriter writer )
+ void ShoutNews_Callback( object state )
+ + diff --git a/Docs/types/TownCrierDurationPrompt.html b/Docs/types/TownCrierDurationPrompt.html new file mode 100644 index 0000000..0be97ed --- /dev/null +++ b/Docs/types/TownCrierDurationPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TownCrierDurationPrompt + + +

Back to Server.Mobiles

+

TownCrierDurationPrompt : Prompt

+ (ctor) TownCrierDurationPrompt( ITownCrierEntryList owner )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/TownCrierEntry.html b/Docs/types/TownCrierEntry.html new file mode 100644 index 0000000..6a2f251 --- /dev/null +++ b/Docs/types/TownCrierEntry.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TownCrierEntry + + +

Back to Server.Mobiles

+

TownCrierEntry

+ (ctor) TownCrierEntry( string[] lines, TimeSpan duration )
+ bool Expired( get; )
+ DateTime ExpireTime( get; )
+ string[] Lines( get; )
+ + diff --git a/Docs/types/TownCrierGump.html b/Docs/types/TownCrierGump.html new file mode 100644 index 0000000..4d590fd --- /dev/null +++ b/Docs/types/TownCrierGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TownCrierGump + + +

Back to Server.Mobiles

+

TownCrierGump : Gump

+ (ctor) TownCrierGump( Mobile from, ITownCrierEntryList owner )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/TownCrierLinesPrompt.html b/Docs/types/TownCrierLinesPrompt.html new file mode 100644 index 0000000..b99c5f9 --- /dev/null +++ b/Docs/types/TownCrierLinesPrompt.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TownCrierLinesPrompt + + +

Back to Server.Mobiles

+

TownCrierLinesPrompt : Prompt

+ (ctor) TownCrierLinesPrompt( ITownCrierEntryList owner, TownCrierEntry entry, List<String> lines, TimeSpan duration )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/TownDefinition.html b/Docs/types/TownDefinition.html new file mode 100644 index 0000000..8d48818 --- /dev/null +++ b/Docs/types/TownDefinition.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - TownDefinition + + +

Back to Server.Factions

+

TownDefinition

+ (ctor) TownDefinition( int sort, int sigilID, string region, string friendlyName, TextDefinition townName, TextDefinition townStoneHeader, TextDefinition strongholdMonolithName, TextDefinition townMonolithName, TextDefinition townStoneName, TextDefinition sigilName, TextDefinition corruptedSigilName, Point3D monolith, Point3D townStone )
+ TextDefinition CorruptedSigilName( get; )
+ string FriendlyName( get; )
+ Point3D Monolith( get; )
+ string Region( get; )
+ int SigilID( get; )
+ TextDefinition SigilName( get; )
+ int Sort( get; )
+ TextDefinition StrongholdMonolithName( get; )
+ TextDefinition TownMonolithName( get; )
+ TextDefinition TownName( get; )
+ Point3D TownStone( get; )
+ TextDefinition TownStoneHeader( get; )
+ TextDefinition TownStoneName( get; )
+ + diff --git a/Docs/types/TownMonolith.html b/Docs/types/TownMonolith.html new file mode 100644 index 0000000..65bd14d --- /dev/null +++ b/Docs/types/TownMonolith.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TownMonolith + + +

Back to Server.Factions

+

TownMonolith : BaseMonolith, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TownMonolith()
+ (ctor) TownMonolith( Town town )
+ (ctor) TownMonolith( Serial serial )
+ int DefaultLabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnTownChanged()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TownRegion.html b/Docs/types/TownRegion.html new file mode 100644 index 0000000..18cff0a --- /dev/null +++ b/Docs/types/TownRegion.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - TownRegion + + +

Back to Server.Regions

+

TownRegion : GuardedRegion, IComparable

+ (ctor) TownRegion( XmlElement xml, Map map, Region parent )
+ + diff --git a/Docs/types/TownState.html b/Docs/types/TownState.html new file mode 100644 index 0000000..f9b790d --- /dev/null +++ b/Docs/types/TownState.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - TownState + + +

Back to Server.Factions

+

TownState

+ (ctor) TownState( GenericReader reader )
+ (ctor) TownState( Town town )
+ Mobile Finance( get; set; )
+ DateTime LastIncome( get; set; )
+ DateTime LastTaxChange( get; set; )
+ Faction Owner( get; set; )
+ Mobile Sheriff( get; set; )
+ int Silver( get; set; )
+ int Tax( get; set; )
+ Town Town( get; set; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TownStone.html b/Docs/types/TownStone.html new file mode 100644 index 0000000..dc2ac34 --- /dev/null +++ b/Docs/types/TownStone.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TownStone + + +

Back to Server.Factions

+

TownStone : BaseSystemController, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TownStone()
+ (ctor) TownStone( Town town )
+ (ctor) TownStone( Serial serial )
+ string DefaultName( get; )
+ Town Town( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TownStoneGump.html b/Docs/types/TownStoneGump.html new file mode 100644 index 0000000..5b7261c --- /dev/null +++ b/Docs/types/TownStoneGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TownStoneGump + + +

Back to Server.Factions

+

TownStoneGump : FactionGump

+ (ctor) TownStoneGump( PlayerMobile from, Faction faction, Town town )
+ void HireFinanceMinister_OnTarget( Mobile from, object obj )
+ void HireSheriff_OnTarget( Mobile from, object obj )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/ToxicElemental.html b/Docs/types/ToxicElemental.html new file mode 100644 index 0000000..2eef704 --- /dev/null +++ b/Docs/types/ToxicElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ToxicElemental + + +

Back to Server.Mobiles

+

ToxicElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ToxicElemental()
+ (ctor) ToxicElemental( Serial serial )
+ bool BleedImmune( get; )
+ Poison HitPoison( get; )
+ double HitPoisonChance( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrackArrow.html b/Docs/types/TrackArrow.html new file mode 100644 index 0000000..d4359ce --- /dev/null +++ b/Docs/types/TrackArrow.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TrackArrow + + +

Back to Server.SkillHandlers

+

TrackArrow : QuestArrow

+ (ctor) TrackArrow( Mobile from, Mobile target, int range )
+ virtual void OnClick( bool rightClick )
+ virtual void OnStop()
+ + diff --git a/Docs/types/TrackTimer.html b/Docs/types/TrackTimer.html new file mode 100644 index 0000000..e4a6f2a --- /dev/null +++ b/Docs/types/TrackTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TrackTimer + + +

Back to Server.SkillHandlers

+

TrackTimer : Timer

+ (ctor) TrackTimer( Mobile from, Mobile target, int range, QuestArrow arrow )
+ virtual void OnTick()
+ + diff --git a/Docs/types/TrackTypeDelegate.html b/Docs/types/TrackTypeDelegate.html new file mode 100644 index 0000000..c0c4b61 --- /dev/null +++ b/Docs/types/TrackTypeDelegate.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TrackTypeDelegate + + +

Back to Server.SkillHandlers

+

TrackTypeDelegate : MulticastDelegate, ICloneable, ISerializable

+ (ctor) TrackTypeDelegate( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile m, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Mobile m )
+ + diff --git a/Docs/types/TrackWhatGump.html b/Docs/types/TrackWhatGump.html new file mode 100644 index 0000000..7cc1e64 --- /dev/null +++ b/Docs/types/TrackWhatGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TrackWhatGump + + +

Back to Server.SkillHandlers

+

TrackWhatGump : Gump

+ (ctor) TrackWhatGump( Mobile from )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/TrackWhoGump.html b/Docs/types/TrackWhoGump.html new file mode 100644 index 0000000..72bc459 --- /dev/null +++ b/Docs/types/TrackWhoGump.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TrackWhoGump + + +

Back to Server.SkillHandlers

+

TrackWhoGump : Gump

+

Nested Types: InternalSorter

+ (static) bool CheckDifficulty( Mobile from, Mobile m )
+ (static) void DisplayTo( bool success, Mobile from, int type )
+ (static) bool IsAnimal( Mobile m )
+ (static) bool IsHumanNPC( Mobile m )
+ (static) bool IsMonster( Mobile m )
+ (static) bool IsPlayer( Mobile m )
+ (ctor) TrackWhoGump( Mobile from, List<Mobile> list, int range )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/Tracking.html b/Docs/types/Tracking.html new file mode 100644 index 0000000..1443012 --- /dev/null +++ b/Docs/types/Tracking.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Tracking + + +

Back to Server.SkillHandlers

+

Tracking

+

Nested Types: TrackingInfo

+ (static) void AddInfo( Mobile tracker, Mobile target )
+ (static) void ClearTrackingInfo( Mobile tracker )
+ (static) double GetStalkingBonus( Mobile tracker, Mobile target )
+ (static) void Initialize()
+ (static) TimeSpan OnUse( Mobile m )
+ (ctor) Tracking()
+ + diff --git a/Docs/types/TrackingInfo.html b/Docs/types/TrackingInfo.html new file mode 100644 index 0000000..c8912d8 --- /dev/null +++ b/Docs/types/TrackingInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - TrackingInfo + + +

Back to Server.SkillHandlers

+

(Tracking) - TrackingInfo

+ (ctor) TrackingInfo( Mobile tracker, Mobile target )
+ + diff --git a/Docs/types/TradeGlasses.html b/Docs/types/TradeGlasses.html new file mode 100644 index 0000000..0e2bbfb --- /dev/null +++ b/Docs/types/TradeGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - TradeGlasses + + +

Back to Server.Items

+

TradeGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) TradeGlasses()
+ (ctor) TradeGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrainingDummy.html b/Docs/types/TrainingDummy.html new file mode 100644 index 0000000..5349555 --- /dev/null +++ b/Docs/types/TrainingDummy.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - TrainingDummy + + +

Back to Server.Items

+

TrainingDummy : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: InternalTimer

+ (ctor) TrainingDummy()
+ (ctor) TrainingDummy( Serial serial )
+ (ctor) TrainingDummy( int itemID )
+ double MaxSkill( get; set; )
+ double MinSkill( get; set; )
+ bool Swinging( get; )
+ void BeginSwing()
+ virtual void Deserialize( GenericReader reader )
+ void EndSwing()
+ virtual void OnDoubleClick( Mobile from )
+ void OnHit()
+ virtual void Serialize( GenericWriter writer )
+ void UpdateItemID()
+ void Use( Mobile from, BaseWeapon weapon )
+ + diff --git a/Docs/types/TrainingDummyEastAddon.html b/Docs/types/TrainingDummyEastAddon.html new file mode 100644 index 0000000..bc48098 --- /dev/null +++ b/Docs/types/TrainingDummyEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TrainingDummyEastAddon + + +

Back to Server.Items

+

TrainingDummyEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) TrainingDummyEastAddon()
+ (ctor) TrainingDummyEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrainingDummyEastDeed.html b/Docs/types/TrainingDummyEastDeed.html new file mode 100644 index 0000000..6ab57f9 --- /dev/null +++ b/Docs/types/TrainingDummyEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TrainingDummyEastDeed + + +

Back to Server.Items

+

TrainingDummyEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TrainingDummyEastDeed()
+ (ctor) TrainingDummyEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrainingDummySouthAddon.html b/Docs/types/TrainingDummySouthAddon.html new file mode 100644 index 0000000..83b2131 --- /dev/null +++ b/Docs/types/TrainingDummySouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TrainingDummySouthAddon + + +

Back to Server.Items

+

TrainingDummySouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) TrainingDummySouthAddon()
+ (ctor) TrainingDummySouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrainingDummySouthDeed.html b/Docs/types/TrainingDummySouthDeed.html new file mode 100644 index 0000000..2d6e84e --- /dev/null +++ b/Docs/types/TrainingDummySouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TrainingDummySouthDeed + + +

Back to Server.Items

+

TrainingDummySouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TrainingDummySouthDeed()
+ (ctor) TrainingDummySouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TransferItem.html b/Docs/types/TransferItem.html new file mode 100644 index 0000000..f6183bb --- /dev/null +++ b/Docs/types/TransferItem.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TransferItem + + +

Back to Server.Multis

+

(BaseHouse) - TransferItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TransferItem( Serial serial )
+ (ctor) TransferItem( BaseHouse house )
+ string DefaultName( get; )
+ virtual bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TransformContext.html b/Docs/types/TransformContext.html new file mode 100644 index 0000000..92ee233 --- /dev/null +++ b/Docs/types/TransformContext.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TransformContext + + +

Back to Server.Spells

+

TransformContext

+ (ctor) TransformContext( Timer timer, List<ResistanceMod> mods, Type type, ITransformationSpell spell )
+ List<ResistanceMod> Mods( get; )
+ ITransformationSpell Spell( get; )
+ Timer Timer( get; )
+ Type Type( get; )
+ + diff --git a/Docs/types/TransformTimer.html b/Docs/types/TransformTimer.html new file mode 100644 index 0000000..c861191 --- /dev/null +++ b/Docs/types/TransformTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TransformTimer + + +

Back to Server.Spells

+

TransformTimer : Timer

+ (ctor) TransformTimer( Mobile from, ITransformationSpell spell )
+ virtual void OnTick()
+ + diff --git a/Docs/types/TransformationSpell.html b/Docs/types/TransformationSpell.html new file mode 100644 index 0000000..3f4a8aa --- /dev/null +++ b/Docs/types/TransformationSpell.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - TransformationSpell + + +

Back to Server.Spells.Necromancy

+

TransformationSpell : NecromancerSpell, ISpell, ITransformationSpell

+

Derived Types: HorrificBeastSpell, LichFormSpell, VampiricEmbraceSpell, WraithFormSpell

+ (ctor) TransformationSpell( Mobile caster, Item scroll, SpellInfo info )
+ bool BlockedByHorrificBeast( get; )
+ int Body( get; )
+ int ColdResistOffset( get; )
+ int FireResistOffset( get; )
+ int Hue( get; )
+ int NrgyResistOffset( get; )
+ int PhysResistOffset( get; )
+ int PoisResistOffset( get; )
+ double TickRate( get; )
+ virtual bool CheckCast()
+ virtual void DoEffect( Mobile m )
+ virtual void OnCast()
+ virtual void OnTick( Mobile m )
+ virtual void RemoveEffect( Mobile m )
+ + diff --git a/Docs/types/TransformationSpellHelper.html b/Docs/types/TransformationSpellHelper.html new file mode 100644 index 0000000..c32795b --- /dev/null +++ b/Docs/types/TransformationSpellHelper.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TransformationSpellHelper + + +

Back to Server.Spells

+

TransformationSpellHelper

+ (static) void AddContext( Mobile m, TransformContext context )
+ (static) bool CheckCast( Mobile caster, Spell spell )
+ (static) TransformContext GetContext( Mobile m )
+ (static) bool OnCast( Mobile caster, Spell spell )
+ (static) void RemoveContext( Mobile m, bool resetGraphics )
+ (static) void RemoveContext( Mobile m, TransformContext context, bool resetGraphics )
+ (static) bool UnderTransformation( Mobile m )
+ (static) bool UnderTransformation( Mobile m, Type type )
+ (ctor) TransformationSpellHelper()
+ + diff --git a/Docs/types/TransientItem.html b/Docs/types/TransientItem.html new file mode 100644 index 0000000..f1dd851 --- /dev/null +++ b/Docs/types/TransientItem.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - TransientItem + + +

Back to Server.Items

+

TransientItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: ArcaneFocus

+ (ctor) TransientItem( Serial serial )
+ (ctor) TransientItem( int itemID, TimeSpan lifeSpan )
+ DateTime CreationTime( get; set; )
+ TextDefinition InvalidTransferMessage( get; )
+ TimeSpan LifeSpan( get; set; )
+ bool Nontransferable( get; )
+ virtual void CheckExpiry()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Expire( Mobile parent )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void HandleInvalidTransfer( Mobile from )
+ virtual void OnDelete()
+ virtual void SendTimeRemainingMessage( Mobile to )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TranslatedGargoyleJournal.html b/Docs/types/TranslatedGargoyleJournal.html new file mode 100644 index 0000000..5aac207 --- /dev/null +++ b/Docs/types/TranslatedGargoyleJournal.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TranslatedGargoyleJournal + + +

Back to Server.Items

+

TranslatedGargoyleJournal : BlueBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TranslatedGargoyleJournal()
+ (ctor) TranslatedGargoyleJournal( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TranslocationItem.html b/Docs/types/TranslocationItem.html new file mode 100644 index 0000000..8b5eede --- /dev/null +++ b/Docs/types/TranslocationItem.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TranslocationItem + + +

Back to Server.Items

+

TranslocationItem

+

Derived Types: BagOfSending, BallOfSummoning, BraceletOfBinding

+ int Charges( get; set; )
+ int MaxCharges( get; )
+ int MaxRecharges( get; )
+ int Recharges( get; set; )
+ string TranslocationItemName( get; )
+ + diff --git a/Docs/types/TransportTimer.html b/Docs/types/TransportTimer.html new file mode 100644 index 0000000..46e446c --- /dev/null +++ b/Docs/types/TransportTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TransportTimer + + +

Back to Server.Items

+

(BraceletOfBinding) - TransportTimer : Timer

+ (ctor) TransportTimer( BraceletOfBinding bracelet, Mobile from )
+ virtual void OnTick()
+ + diff --git a/Docs/types/TrapCraft.html b/Docs/types/TrapCraft.html new file mode 100644 index 0000000..9c88037 --- /dev/null +++ b/Docs/types/TrapCraft.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TrapCraft + + +

Back to Server.Engines.Craft

+

TrapCraft : CustomCraft

+

Derived Types: DartTrapCraft, ExplosionTrapCraft, PoisonTrapCraft

+

Nested Types: ContainerTarget

+ (ctor) TrapCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality )
+ LockableContainer Container( get; )
+ TrapType TrapType( get; )
+ bool Acquire( object target, out int message )
+ virtual Item CompleteCraft( out int message )
+ virtual void EndCraftAction()
+ int Verify( LockableContainer container )
+ + diff --git a/Docs/types/TrapType.html b/Docs/types/TrapType.html new file mode 100644 index 0000000..2e20a14 --- /dev/null +++ b/Docs/types/TrapType.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TrapType + + +

Back to Server.Items

+

TrapType (Enum)

+ None = 0,
+ MagicTrap = 1,
+ ExplosionTrap = 2,
+ DartTrap = 3,
+ PoisonTrap = 4
+ + diff --git a/Docs/types/TrapableContainer.html b/Docs/types/TrapableContainer.html new file mode 100644 index 0000000..c0a3b98 --- /dev/null +++ b/Docs/types/TrapableContainer.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - TrapableContainer + + +

Back to Server.Items

+

TrapableContainer : BaseContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable

+

Derived Types: ClosedBarrel, LockableContainer, Pouch

+ (ctor) TrapableContainer( int itemID )
+ (ctor) TrapableContainer( Serial serial )
+ int TrapLevel( get; set; )
+ bool TrapOnOpen( get; )
+ int TrapPower( get; set; )
+ TrapType TrapType( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool ExecuteTrap( Mobile from )
+ virtual void OnTelekinesis( Mobile from )
+ virtual void Open( Mobile from )
+ void SendMessageTo( Mobile to, int number, int hue )
+ void SendMessageTo( Mobile to, string text, int hue )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrashBarrel.html b/Docs/types/TrashBarrel.html new file mode 100644 index 0000000..2050f74 --- /dev/null +++ b/Docs/types/TrashBarrel.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - TrashBarrel + + +

Back to Server.Items

+

TrashBarrel : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+

Nested Types: EmptyTimer

+ (ctor) TrashBarrel()
+ (ctor) TrashBarrel( Serial serial )
+ int DefaultMaxWeight( get; )
+ bool IsDecoContainer( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Empty( int message )
+ virtual void OnChop( Mobile from )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrashChest.html b/Docs/types/TrashChest.html new file mode 100644 index 0000000..903a49c --- /dev/null +++ b/Docs/types/TrashChest.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TrashChest + + +

Back to Server.Items

+

TrashChest : Container, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TrashChest()
+ (ctor) TrashChest( Serial serial )
+ int DefaultMaxWeight( get; )
+ bool IsDecoContainer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual bool OnDragDropInto( Mobile from, Item item, Point3D p )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TravelCheckType.html b/Docs/types/TravelCheckType.html new file mode 100644 index 0000000..343046c --- /dev/null +++ b/Docs/types/TravelCheckType.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TravelCheckType + + +

Back to Server.Spells

+

TravelCheckType (Enum)

+ RecallFrom = 0,
+ RecallTo = 1,
+ GateFrom = 2,
+ GateTo = 3,
+ Mark = 4,
+ TeleportFrom = 5,
+ TeleportTo = 6
+ + diff --git a/Docs/types/TravelValidator.html b/Docs/types/TravelValidator.html new file mode 100644 index 0000000..8212e0c --- /dev/null +++ b/Docs/types/TravelValidator.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TravelValidator + + +

Back to Server.Spells

+

(SpellHelper) - TravelValidator : MulticastDelegate, ICloneable, ISerializable

+ (ctor) TravelValidator( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Map map, Point3D loc, AsyncCallback callback, object object )
+ virtual bool EndInvoke( IAsyncResult result )
+ virtual bool Invoke( Map map, Point3D loc )
+ + diff --git a/Docs/types/TreasureChestDirt.html b/Docs/types/TreasureChestDirt.html new file mode 100644 index 0000000..5197729 --- /dev/null +++ b/Docs/types/TreasureChestDirt.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TreasureChestDirt + + +

Back to Server.Items

+

TreasureChestDirt : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TreasureChestDirt()
+ (ctor) TreasureChestDirt( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ void Turn1()
+ void Turn2()
+ + diff --git a/Docs/types/TreasureLevel.html b/Docs/types/TreasureLevel.html new file mode 100644 index 0000000..cc7856b --- /dev/null +++ b/Docs/types/TreasureLevel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TreasureLevel + + +

Back to Server.Items

+

TreasureLevel (Enum)

+ Level1 = 0,
+ Level2 = 1,
+ Level3 = 2,
+ Level4 = 3,
+ Level5 = 4,
+ Level6 = 5
+ + diff --git a/Docs/types/TreasureMap.html b/Docs/types/TreasureMap.html new file mode 100644 index 0000000..9a17332 --- /dev/null +++ b/Docs/types/TreasureMap.html @@ -0,0 +1,38 @@ + + + RunUO Documentation - Class Overview - TreasureMap + + +

Back to Server.Items

+

TreasureMap : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Nested Types: DecodeMapEntry, DigEntry, DigTarget, DigTimer, OpenMapEntry

+ (static) Point2D GetRandomHavenLocation()
+ (static) Point2D GetRandomLocation()
+ (static) bool HasDiggingTool( Mobile m )
+ (static) bool IsInHavenIsland( IPoint2D loc )
+ (static) void LoadLocations()
+ (static) BaseCreature Spawn( int level, Point3D p, bool guardian )
+ (static) BaseCreature Spawn( int level, Point3D p, Map map, Mobile target, bool guardian )
+ (ctor) TreasureMap( Serial serial )
+ (ctor) TreasureMap( int level, Map map )
+ Point2D ChestLocation( get; set; )
+ Map ChestMap( get; set; )
+ bool Completed( get; set; )
+ Mobile CompletedBy( get; set; )
+ Mobile Decoder( get; set; )
+ int LabelNumber( get; )
+ int Level( get; set; )
+ bool CheckYoung( Mobile from )
+ void Decode( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void DisplayTo( Mobile from )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ double GetMinSkillLevel()
+ virtual void GetProperties( ObjectPropertyList list )
+ bool HasRequiredSkill( Mobile from )
+ void OnBeginDig( Mobile from )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TreasureMapChest.html b/Docs/types/TreasureMapChest.html new file mode 100644 index 0000000..529b725 --- /dev/null +++ b/Docs/types/TreasureMapChest.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - TreasureMapChest + + +

Back to Server.Items

+

TreasureMapChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Nested Types: DeleteTimer, RemoveEntry, RemoveGump

+ (static) Type[] Artifacts( get; )
+ (static) void Fill( LockableContainer cont, int level )
+ (static) void GetRandomAOSStats( out int attributeCount, out int min, out int max )
+ (ctor) TreasureMapChest( int level )
+ (ctor) TreasureMapChest( Serial serial )
+ (ctor) TreasureMapChest( Mobile owner, int level, bool temporary )
+ DateTime DeleteTime( get; )
+ List<Mobile> Guardians( get; )
+ bool IsDecoContainer( get; )
+ int LabelNumber( get; )
+ int Level( get; set; )
+ Mobile Owner( get; set; )
+ bool Temporary( get; set; )
+ void BeginRemove( Mobile from )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckLift( Mobile from, Item item, ref LRReason reject )
+ virtual bool CheckLocked( Mobile from )
+ bool CheckLoot( Mobile m, bool criminalAction )
+ virtual void Deserialize( GenericReader reader )
+ void EndRemove( Mobile from )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void OnAfterDelete()
+ virtual void OnItemLifted( Mobile from, Item item )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TreasureRegion.html b/Docs/types/TreasureRegion.html new file mode 100644 index 0000000..ab071cc --- /dev/null +++ b/Docs/types/TreasureRegion.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TreasureRegion + + +

Back to Server

+

TreasureRegion : BaseRegion, IComparable

+ (static) void Initialize()
+ (ctor) TreasureRegion( int x, int y, Map map )
+ virtual bool AllowHousing( Mobile from, Point3D p )
+ virtual void OnEnter( Mobile m )
+ virtual void OnExit( Mobile m )
+ + diff --git a/Docs/types/TreasureResetTimer.html b/Docs/types/TreasureResetTimer.html new file mode 100644 index 0000000..93aee06 --- /dev/null +++ b/Docs/types/TreasureResetTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TreasureResetTimer + + +

Back to Server.Items

+

(BaseTreasureChest) - TreasureResetTimer : Timer

+ (ctor) TreasureResetTimer( BaseTreasureChest chest )
+ virtual void OnTick()
+ + diff --git a/Docs/types/TreasureTrinketGlasses.html b/Docs/types/TreasureTrinketGlasses.html new file mode 100644 index 0000000..43b3986 --- /dev/null +++ b/Docs/types/TreasureTrinketGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - TreasureTrinketGlasses + + +

Back to Server.Items

+

TreasureTrinketGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) TreasureTrinketGlasses()
+ (ctor) TreasureTrinketGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TreasuresOfTokuno.html b/Docs/types/TreasuresOfTokuno.html new file mode 100644 index 0000000..9b02d2f --- /dev/null +++ b/Docs/types/TreasuresOfTokuno.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TreasuresOfTokuno + + +

Back to Server.Misc

+

TreasuresOfTokuno

+ (static) TreasuresOfTokunoEra DropEra( get; set; )
+ (static) Type[] GreaterArtifacts( get; )
+ (static) Type[] LesserArtifacts( get; )
+ (static) Type[] LesserArtifactsTotal( get; )
+ (static) TreasuresOfTokunoEra RewardEra( get; set; )
+ (static) bool CheckLocation( Mobile m )
+ (static) void HandleKill( Mobile victim, Mobile killer )
+ (ctor) TreasuresOfTokuno()
+ + diff --git a/Docs/types/TreasuresOfTokunoEra.html b/Docs/types/TreasuresOfTokunoEra.html new file mode 100644 index 0000000..541e032 --- /dev/null +++ b/Docs/types/TreasuresOfTokunoEra.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TreasuresOfTokunoEra + + +

Back to Server.Misc

+

TreasuresOfTokunoEra (Enum)

+ None = 0,
+ ToTOne = 1,
+ ToTTwo = 2,
+ ToTThree = 3
+ + diff --git a/Docs/types/TreasuresOfTokunoPersistance.html b/Docs/types/TreasuresOfTokunoPersistance.html new file mode 100644 index 0000000..0fa5b50 --- /dev/null +++ b/Docs/types/TreasuresOfTokunoPersistance.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TreasuresOfTokunoPersistance + + +

Back to Server.Misc

+

TreasuresOfTokunoPersistance : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) TreasuresOfTokunoPersistance Instance( get; )
+ (static) void Initialize()
+ (ctor) TreasuresOfTokunoPersistance()
+ (ctor) TreasuresOfTokunoPersistance( Serial serial )
+ string DefaultName( get; )
+ virtual void Delete()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TreatiseOnAlchemy.html b/Docs/types/TreatiseOnAlchemy.html new file mode 100644 index 0000000..91e65f5 --- /dev/null +++ b/Docs/types/TreatiseOnAlchemy.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TreatiseOnAlchemy + + +

Back to Server.Items

+

TreatiseOnAlchemy : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) TreatiseOnAlchemy()
+ (ctor) TreatiseOnAlchemy( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TreeStump.html b/Docs/types/TreeStump.html new file mode 100644 index 0000000..7173c96 --- /dev/null +++ b/Docs/types/TreeStump.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TreeStump + + +

Back to Server.Items

+

TreeStump : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IRewardItem

+ (ctor) TreeStump( Serial serial )
+ (ctor) TreeStump( int itemID )
+ BaseAddonDeed Deed( get; )
+ bool IsRewardItem( get; set; )
+ int Logs( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ void GiveLogs()
+ virtual void OnComponentUsed( AddonComponent c, Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TreeStumpDeed.html b/Docs/types/TreeStumpDeed.html new file mode 100644 index 0000000..86fbf52 --- /dev/null +++ b/Docs/types/TreeStumpDeed.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - TreeStumpDeed + + +

Back to Server.Items

+

TreeStumpDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem, IRewardOption

+ (ctor) TreeStumpDeed()
+ (ctor) TreeStumpDeed( Serial serial )
+ BaseAddon Addon( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ int Logs( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetOptions( RewardOptionList list )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnOptionSelected( Mobile from, int option )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TreeTrunk.html b/Docs/types/TreeTrunk.html new file mode 100644 index 0000000..863f2a4 --- /dev/null +++ b/Docs/types/TreeTrunk.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TreeTrunk + + +

Back to Server.Items

+

(HolidayTree) - TreeTrunk : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TreeTrunk( Serial serial )
+ (ctor) TreeTrunk( HolidayTree tree, int itemID )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Treefellow.html b/Docs/types/Treefellow.html new file mode 100644 index 0000000..18b477e --- /dev/null +++ b/Docs/types/Treefellow.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Treefellow + + +

Back to Server.Mobiles

+

Treefellow : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Treefellow()
+ (ctor) Treefellow( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TribalBerry.html b/Docs/types/TribalBerry.html new file mode 100644 index 0000000..d6fa934 --- /dev/null +++ b/Docs/types/TribalBerry.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TribalBerry + + +

Back to Server.Items

+

TribalBerry : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TribalBerry()
+ (ctor) TribalBerry( int amount )
+ (ctor) TribalBerry( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TribalMask.html b/Docs/types/TribalMask.html new file mode 100644 index 0000000..957454d --- /dev/null +++ b/Docs/types/TribalMask.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - TribalMask + + +

Back to Server.Items

+

TribalMask : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) TribalMask()
+ (ctor) TribalMask( Serial serial )
+ (ctor) TribalMask( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TribalPaint.html b/Docs/types/TribalPaint.html new file mode 100644 index 0000000..a5c57d4 --- /dev/null +++ b/Docs/types/TribalPaint.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TribalPaint + + +

Back to Server.Items

+

TribalPaint : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TribalPaint()
+ (ctor) TribalPaint( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TribalSpear.html b/Docs/types/TribalSpear.html new file mode 100644 index 0000000..f99449c --- /dev/null +++ b/Docs/types/TribalSpear.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - TribalSpear + + +

Back to Server.Items

+

TribalSpear : BaseSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TribalSpear()
+ (ctor) TribalSpear( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ string DefaultName( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ int VirtualDamageBonus( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TricorneHat.html b/Docs/types/TricorneHat.html new file mode 100644 index 0000000..9792925 --- /dev/null +++ b/Docs/types/TricorneHat.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - TricorneHat + + +

Back to Server.Items

+

TricorneHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: CaptainJohnsHat, DreadPirateHat

+ (ctor) TricorneHat()
+ (ctor) TricorneHat( Serial serial )
+ (ctor) TricorneHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Trinsic.html b/Docs/types/Trinsic.html new file mode 100644 index 0000000..514e845 --- /dev/null +++ b/Docs/types/Trinsic.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Trinsic + + +

Back to Server.Factions

+

Trinsic : Town, IComparable

+ (ctor) Trinsic()
+ + diff --git a/Docs/types/TripTimeResponse.html b/Docs/types/TripTimeResponse.html new file mode 100644 index 0000000..0cb9df6 --- /dev/null +++ b/Docs/types/TripTimeResponse.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - TripTimeResponse + + +

Back to Server.Network

+

TripTimeResponse : Packet

+ (ctor) TripTimeResponse( int unk )
+ + diff --git a/Docs/types/TripleFanNorthArtifact.html b/Docs/types/TripleFanNorthArtifact.html new file mode 100644 index 0000000..b03b2ba --- /dev/null +++ b/Docs/types/TripleFanNorthArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TripleFanNorthArtifact + + +

Back to Server.Items

+

TripleFanNorthArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TripleFanNorthArtifact()
+ (ctor) TripleFanNorthArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TripleFanWestArtifact.html b/Docs/types/TripleFanWestArtifact.html new file mode 100644 index 0000000..9541a4f --- /dev/null +++ b/Docs/types/TripleFanWestArtifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TripleFanWestArtifact + + +

Back to Server.Items

+

TripleFanWestArtifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TripleFanWestArtifact()
+ (ctor) TripleFanWestArtifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Troglodyte.html b/Docs/types/Troglodyte.html new file mode 100644 index 0000000..e18c7aa --- /dev/null +++ b/Docs/types/Troglodyte.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Troglodyte + + +

Back to Server.Mobiles

+

Troglodyte : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Troglodyte()
+ (ctor) Troglodyte( Serial serial )
+ bool CanHeal( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Troll.html b/Docs/types/Troll.html new file mode 100644 index 0000000..8c32ec4 --- /dev/null +++ b/Docs/types/Troll.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Troll + + +

Back to Server.Mobiles

+

Troll : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Troll()
+ (ctor) Troll( Serial serial )
+ bool CanRummageCorpses( get; )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrophyAddon.html b/Docs/types/TrophyAddon.html new file mode 100644 index 0000000..b5c62c1 --- /dev/null +++ b/Docs/types/TrophyAddon.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - TrophyAddon + + +

Back to Server.Items

+

TrophyAddon : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IAddon

+ (ctor) TrophyAddon( Serial serial )
+ (ctor) TrophyAddon( Mobile from, int itemID, int westID, int northID, int deedNumber, int addonNumber )
+ (ctor) TrophyAddon( Mobile from, int itemID, int westID, int northID, int deedNumber, int addonNumber, Mobile hunter, int animalWeight )
+ int AddonNumber( get; set; )
+ Item Deed( get; )
+ int DeedNumber( get; set; )
+ bool ForceShowProperties( get; )
+ int LabelNumber( get; )
+ int NorthID( get; set; )
+ int WestID( get; set; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ void FixMovingCrate()
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrophyDeed.html b/Docs/types/TrophyDeed.html new file mode 100644 index 0000000..17420bc --- /dev/null +++ b/Docs/types/TrophyDeed.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - TrophyDeed + + +

Back to Server.Items

+

TrophyDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TrophyDeed( Serial serial )
+ (ctor) TrophyDeed( TrophyInfo info, Mobile hunter, int animalWeight )
+ (ctor) TrophyDeed( int westID, int northID, int deedNumber, int addonNumber )
+ (ctor) TrophyDeed( int westID, int northID, int deedNumber, int addonNumber, Mobile hunter, int animalWeight )
+ int AddonNumber( get; set; )
+ int AnimalWeight( get; set; )
+ int DeedNumber( get; set; )
+ Mobile Hunter( get; set; )
+ int LabelNumber( get; )
+ int NorthID( get; set; )
+ int WestID( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrophyInfo.html b/Docs/types/TrophyInfo.html new file mode 100644 index 0000000..e06d984 --- /dev/null +++ b/Docs/types/TrophyInfo.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TrophyInfo + + +

Back to Server.Items

+

(TaxidermyKit) - TrophyInfo

+ (ctor) TrophyInfo( Type type, int id, int deedNum, int addonNum )
+ int AddonNumber( get; )
+ Type CreatureType( get; )
+ int DeedNumber( get; )
+ int NorthID( get; )
+ + diff --git a/Docs/types/TropicalBird.html b/Docs/types/TropicalBird.html new file mode 100644 index 0000000..c6eacc7 --- /dev/null +++ b/Docs/types/TropicalBird.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TropicalBird + + +

Back to Server.Mobiles

+

TropicalBird : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) TropicalBird()
+ (ctor) TropicalBird( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Feathers( get; )
+ int Meat( get; )
+ MeatType MeatType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TrueBritannians.html b/Docs/types/TrueBritannians.html new file mode 100644 index 0000000..de0f1c8 --- /dev/null +++ b/Docs/types/TrueBritannians.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TrueBritannians + + +

Back to Server.Factions

+

TrueBritannians : Faction, IComparable

+ (static) Faction Instance( get; )
+ (ctor) TrueBritannians()
+ + diff --git a/Docs/types/TrulyRareFish.html b/Docs/types/TrulyRareFish.html new file mode 100644 index 0000000..d76828d --- /dev/null +++ b/Docs/types/TrulyRareFish.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TrulyRareFish + + +

Back to Server.Items

+

TrulyRareFish : BaseMagicFish, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TrulyRareFish()
+ (ctor) TrulyRareFish( Serial serial )
+ int Bonus( get; )
+ int LabelNumber( get; )
+ StatType Type( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TsukiWolf.html b/Docs/types/TsukiWolf.html new file mode 100644 index 0000000..e32efd2 --- /dev/null +++ b/Docs/types/TsukiWolf.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - TsukiWolf + + +

Back to Server.Mobiles

+

TsukiWolf : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: ExpireTimer

+ (ctor) TsukiWolf()
+ (ctor) TsukiWolf( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tub.html b/Docs/types/Tub.html new file mode 100644 index 0000000..8e73a1e --- /dev/null +++ b/Docs/types/Tub.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Tub + + +

Back to Server.Items

+

Tub : BaseWaterContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) Tub()
+ (ctor) Tub( Serial serial )
+ (ctor) Tub( bool filled )
+ int fullItem_ID( get; )
+ int MaxQuantity( get; )
+ int voidItem_ID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Tunic.html b/Docs/types/Tunic.html new file mode 100644 index 0000000..28f65d3 --- /dev/null +++ b/Docs/types/Tunic.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Tunic + + +

Back to Server.Items

+

Tunic : BaseMiddleTorso, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Tunic()
+ (ctor) Tunic( int hue )
+ (ctor) Tunic( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TunicOfFire.html b/Docs/types/TunicOfFire.html new file mode 100644 index 0000000..cdb035f --- /dev/null +++ b/Docs/types/TunicOfFire.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - TunicOfFire + + +

Back to Server.Items

+

TunicOfFire : ChainChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) TunicOfFire()
+ (ctor) TunicOfFire( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TurnTimer.html b/Docs/types/TurnTimer.html new file mode 100644 index 0000000..0593329 --- /dev/null +++ b/Docs/types/TurnTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TurnTimer + + +

Back to Server.Multis

+

(BaseBoat) - TurnTimer : Timer

+ (ctor) TurnTimer( BaseBoat boat, int offset )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Turnip.html b/Docs/types/Turnip.html new file mode 100644 index 0000000..b46f960 --- /dev/null +++ b/Docs/types/Turnip.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Turnip + + +

Back to Server.Items

+

Turnip : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Turnip()
+ (ctor) Turnip( int amount )
+ (ctor) Turnip( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Turquoise.html b/Docs/types/Turquoise.html new file mode 100644 index 0000000..0a6ee74 --- /dev/null +++ b/Docs/types/Turquoise.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Turquoise + + +

Back to Server.Items

+

Turquoise : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Turquoise()
+ (ctor) Turquoise( int amount )
+ (ctor) Turquoise( Serial serial )
+ (ctor) Turquoise( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Twaulo.html b/Docs/types/Twaulo.html new file mode 100644 index 0000000..bf98d18 --- /dev/null +++ b/Docs/types/Twaulo.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - Twaulo + + +

Back to Server.Mobiles

+

Twaulo : BaseChampion, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Twaulo()
+ (ctor) Twaulo( Serial serial )
+ Type[] DecorativeList( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ Type[] SharedList( get; )
+ ChampionSkullType SkullType( get; )
+ MonsterStatuetteType[] StatueTypes( get; )
+ int TreasureMapLevel( get; )
+ Type[] UniqueList( get; )
+ bool Unprovokable( get; )
+ virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ void SpawnPixies( Mobile target )
+ + diff --git a/Docs/types/TwoHandedAxe.html b/Docs/types/TwoHandedAxe.html new file mode 100644 index 0000000..54d50d0 --- /dev/null +++ b/Docs/types/TwoHandedAxe.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - TwoHandedAxe + + +

Back to Server.Items

+

TwoHandedAxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) TwoHandedAxe()
+ (ctor) TwoHandedAxe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TwoPigTails.html b/Docs/types/TwoPigTails.html new file mode 100644 index 0000000..7bed36a --- /dev/null +++ b/Docs/types/TwoPigTails.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - TwoPigTails + + +

Back to Server.Items

+

TwoPigTails : Hair, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TwoPigTails()
+ (ctor) TwoPigTails( int hue )
+ (ctor) TwoPigTails( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TwoStoryHouse.html b/Docs/types/TwoStoryHouse.html new file mode 100644 index 0000000..aae03f5 --- /dev/null +++ b/Docs/types/TwoStoryHouse.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TwoStoryHouse + + +

Back to Server.Multis

+

TwoStoryHouse : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TwoStoryHouse( Serial serial )
+ (ctor) TwoStoryHouse( Mobile owner, int id )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TwoStoryStonePlasterHouseDeed.html b/Docs/types/TwoStoryStonePlasterHouseDeed.html new file mode 100644 index 0000000..913be4a --- /dev/null +++ b/Docs/types/TwoStoryStonePlasterHouseDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TwoStoryStonePlasterHouseDeed + + +

Back to Server.Multis.Deeds

+

TwoStoryStonePlasterHouseDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TwoStoryStonePlasterHouseDeed()
+ (ctor) TwoStoryStonePlasterHouseDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TwoStoryVilla.html b/Docs/types/TwoStoryVilla.html new file mode 100644 index 0000000..56e084b --- /dev/null +++ b/Docs/types/TwoStoryVilla.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - TwoStoryVilla + + +

Back to Server.Multis

+

TwoStoryVilla : BaseHouse, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TwoStoryVilla( Serial serial )
+ (ctor) TwoStoryVilla( Mobile owner )
+ Rectangle2D[] Area( get; )
+ Point3D BaseBanLocation( get; )
+ HousePlacementEntry ConvertEntry( get; )
+ int DefaultPrice( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual HouseDeed GetDeed()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TwoStoryWoodPlasterHouseDeed.html b/Docs/types/TwoStoryWoodPlasterHouseDeed.html new file mode 100644 index 0000000..3b7460c --- /dev/null +++ b/Docs/types/TwoStoryWoodPlasterHouseDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - TwoStoryWoodPlasterHouseDeed + + +

Back to Server.Multis.Deeds

+

TwoStoryWoodPlasterHouseDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) TwoStoryWoodPlasterHouseDeed()
+ (ctor) TwoStoryWoodPlasterHouseDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/TypeAliasAttribute.html b/Docs/types/TypeAliasAttribute.html new file mode 100644 index 0000000..3181e08 --- /dev/null +++ b/Docs/types/TypeAliasAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TypeAliasAttribute + + +

Back to Server

+

TypeAliasAttribute : Attribute, _Attribute

+ (ctor) TypeAliasAttribute( string[] aliases )
+ string[] Aliases( get; )
+ + diff --git a/Docs/types/TypeCache.html b/Docs/types/TypeCache.html new file mode 100644 index 0000000..561d681 --- /dev/null +++ b/Docs/types/TypeCache.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - TypeCache + + +

Back to Server

+

TypeCache

+ (ctor) TypeCache( Assembly asm )
+ TypeTable FullNames( get; )
+ TypeTable Names( get; )
+ Type[] Types( get; )
+ Type GetTypeByFullName( string fullName, bool ignoreCase )
+ Type GetTypeByName( string name, bool ignoreCase )
+ + diff --git a/Docs/types/TypeComparer.html b/Docs/types/TypeComparer.html new file mode 100644 index 0000000..9621964 --- /dev/null +++ b/Docs/types/TypeComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TypeComparer + + +

Back to Server.Commands

+

(Docs) - TypeComparer : IComparer<TypeInfo>

+ (ctor) TypeComparer()
+ virtual int Compare( TypeInfo x, TypeInfo y )
+ + diff --git a/Docs/types/TypeCondition.html b/Docs/types/TypeCondition.html new file mode 100644 index 0000000..8f9b7d8 --- /dev/null +++ b/Docs/types/TypeCondition.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TypeCondition + + +

Back to Server.Commands.Generic

+

TypeCondition : ICondition

+ (ctor) TypeCondition()
+ virtual void Server.Commands.Generic.ICondition.Compile( MethodEmitter emitter )
+ virtual void Server.Commands.Generic.ICondition.Construct( TypeBuilder typeBuilder, ILGenerator il, int index )
+ + diff --git a/Docs/types/TypeInfo.html b/Docs/types/TypeInfo.html new file mode 100644 index 0000000..396a44a --- /dev/null +++ b/Docs/types/TypeInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TypeInfo + + +

Back to Server.Commands

+

(Docs) - TypeInfo

+ (ctor) TypeInfo( Type type )
+ string FileName( get; )
+ string TypeName( get; )
+ string LinkName( string dirRoot )
+ + diff --git a/Docs/types/TypeNameComparer.html b/Docs/types/TypeNameComparer.html new file mode 100644 index 0000000..6d439b6 --- /dev/null +++ b/Docs/types/TypeNameComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - TypeNameComparer + + +

Back to Server.Gumps

+

(AddGump) - TypeNameComparer : IComparer<Type>

+ (ctor) TypeNameComparer()
+ virtual int Compare( Type x, Type y )
+ + diff --git a/Docs/types/TypeTable.html b/Docs/types/TypeTable.html new file mode 100644 index 0000000..8e310c9 --- /dev/null +++ b/Docs/types/TypeTable.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - TypeTable + + +

Back to Server

+

TypeTable

+ (ctor) TypeTable( int capacity )
+ void Add( string key, Type type )
+ Type Get( string key, bool ignoreCase )
+ + diff --git a/Docs/types/TypeTileButtonInfo.html b/Docs/types/TypeTileButtonInfo.html new file mode 100644 index 0000000..dc0ce13 --- /dev/null +++ b/Docs/types/TypeTileButtonInfo.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - TypeTileButtonInfo + + +

Back to Server.Gumps

+

(ToTRedeemGump) - TypeTileButtonInfo : ImageTileButtonInfo

+ (ctor) TypeTileButtonInfo( Type type, int itemID, TextDefinition label )
+ (ctor) TypeTileButtonInfo( Type type, int itemID, TextDefinition label, int localizedToolTip )
+ (ctor) TypeTileButtonInfo( Type type, int itemID, int hue, TextDefinition label, int localizedToolTip )
+ Type Type( get; )
+ + diff --git a/Docs/types/TypedEnumerator.html b/Docs/types/TypedEnumerator.html new file mode 100644 index 0000000..a362677 --- /dev/null +++ b/Docs/types/TypedEnumerator.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - TypedEnumerator + + +

Back to Server

+

(Map) - TypedEnumerator : IPooledEnumerator, IEnumerator, IDisposable

+ (static) TypedEnumerator Instantiate( Map map, Rectangle2D bounds, SectorEnumeratorType type )
+ (ctor) TypedEnumerator( Map map, Rectangle2D bounds, SectorEnumeratorType type )
+ object Current( get; )
+ IPooledEnumerable Enumerable( get; set; )
+ virtual void Dispose()
+ virtual void Free()
+ virtual bool MoveNext()
+ virtual void Reset()
+ + diff --git a/Docs/types/UOAMVendorGenerator.html b/Docs/types/UOAMVendorGenerator.html new file mode 100644 index 0000000..f4258be --- /dev/null +++ b/Docs/types/UOAMVendorGenerator.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - UOAMVendorGenerator + + +

Back to Server

+

UOAMVendorGenerator

+ (static) void ClearSpawners( int x, int y, int z, Map map )
+ (static) void Generate_OnCommand( CommandEventArgs e )
+ (static) int GetSpawnerZ( int x, int y, Map map )
+ (static) void Initialize()
+ (static) void MakeSpawner( string[] types, int x, int y, Map map )
+ (static) void Parse( Mobile from )
+ (static) void PlaceNPC( string sx, string sy, string sm, string[] types )
+ (ctor) UOAMVendorGenerator()
+ + diff --git a/Docs/types/UOGInfo.html b/Docs/types/UOGInfo.html new file mode 100644 index 0000000..40cea7b --- /dev/null +++ b/Docs/types/UOGInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UOGInfo + + +

Back to Server.RemoteAdmin

+

UOGInfo : Packet

+ (ctor) UOGInfo( string str )
+ + diff --git a/Docs/types/UTripTimeResponse.html b/Docs/types/UTripTimeResponse.html new file mode 100644 index 0000000..b584245 --- /dev/null +++ b/Docs/types/UTripTimeResponse.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UTripTimeResponse + + +

Back to Server.Network

+

UTripTimeResponse : Packet

+ (ctor) UTripTimeResponse( int unk )
+ + diff --git a/Docs/types/UnbakedApplePie.html b/Docs/types/UnbakedApplePie.html new file mode 100644 index 0000000..b56e15d --- /dev/null +++ b/Docs/types/UnbakedApplePie.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UnbakedApplePie + + +

Back to Server.Items

+

UnbakedApplePie : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UnbakedApplePie()
+ (ctor) UnbakedApplePie( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnbakedFruitPie.html b/Docs/types/UnbakedFruitPie.html new file mode 100644 index 0000000..5d71898 --- /dev/null +++ b/Docs/types/UnbakedFruitPie.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UnbakedFruitPie + + +

Back to Server.Items

+

UnbakedFruitPie : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UnbakedFruitPie()
+ (ctor) UnbakedFruitPie( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnbakedMeatPie.html b/Docs/types/UnbakedMeatPie.html new file mode 100644 index 0000000..c789951 --- /dev/null +++ b/Docs/types/UnbakedMeatPie.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UnbakedMeatPie + + +

Back to Server.Items

+

UnbakedMeatPie : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UnbakedMeatPie()
+ (ctor) UnbakedMeatPie( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnbakedPeachCobbler.html b/Docs/types/UnbakedPeachCobbler.html new file mode 100644 index 0000000..6d8ea4f --- /dev/null +++ b/Docs/types/UnbakedPeachCobbler.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UnbakedPeachCobbler + + +

Back to Server.Items

+

UnbakedPeachCobbler : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UnbakedPeachCobbler()
+ (ctor) UnbakedPeachCobbler( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnbakedPumpkinPie.html b/Docs/types/UnbakedPumpkinPie.html new file mode 100644 index 0000000..de2cb58 --- /dev/null +++ b/Docs/types/UnbakedPumpkinPie.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UnbakedPumpkinPie + + +

Back to Server.Items

+

UnbakedPumpkinPie : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UnbakedPumpkinPie()
+ (ctor) UnbakedPumpkinPie( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnbakedQuiche.html b/Docs/types/UnbakedQuiche.html new file mode 100644 index 0000000..2cb8850 --- /dev/null +++ b/Docs/types/UnbakedQuiche.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UnbakedQuiche + + +

Back to Server.Items

+

UnbakedQuiche : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UnbakedQuiche()
+ (ctor) UnbakedQuiche( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnbufferedFileStream.html b/Docs/types/UnbufferedFileStream.html new file mode 100644 index 0000000..5a15cf4 --- /dev/null +++ b/Docs/types/UnbufferedFileStream.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - UnbufferedFileStream + + +

Back to Server

+

(FileOperations) - UnbufferedFileStream : FileStream, IDisposable

+ (ctor) UnbufferedFileStream( SafeFileHandle fileHandle, FileAccess access, int bufferSize, bool isAsync )
+ virtual IAsyncResult BeginWrite( byte[] array, int offset, int numBytes, AsyncCallback userCallback, object stateObject )
+ virtual void Dispose( bool disposing )
+ virtual void Write( byte[] array, int offset, int count )
+ + diff --git a/Docs/types/UncookedCheesePizza.html b/Docs/types/UncookedCheesePizza.html new file mode 100644 index 0000000..0403c36 --- /dev/null +++ b/Docs/types/UncookedCheesePizza.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UncookedCheesePizza + + +

Back to Server.Items

+

UncookedCheesePizza : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UncookedCheesePizza()
+ (ctor) UncookedCheesePizza( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UncookedSausagePizza.html b/Docs/types/UncookedSausagePizza.html new file mode 100644 index 0000000..34ab9fe --- /dev/null +++ b/Docs/types/UncookedSausagePizza.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UncookedSausagePizza + + +

Back to Server.Items

+

UncookedSausagePizza : CookableFood, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UncookedSausagePizza()
+ (ctor) UncookedSausagePizza( Serial serial )
+ int LabelNumber( get; )
+ virtual Food Cook()
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UncutCloth.html b/Docs/types/UncutCloth.html new file mode 100644 index 0000000..5ed93ae --- /dev/null +++ b/Docs/types/UncutCloth.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - UncutCloth + + +

Back to Server.Items

+

UncutCloth : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IDyable, ICommodity

+ (ctor) UncutCloth()
+ (ctor) UncutCloth( Serial serial )
+ (ctor) UncutCloth( int amount )
+ double DefaultWeight( get; )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnSingleClick( Mobile from )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnfinishedBarrel.html b/Docs/types/UnfinishedBarrel.html new file mode 100644 index 0000000..1a0c8ba --- /dev/null +++ b/Docs/types/UnfinishedBarrel.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - UnfinishedBarrel + + +

Back to Server.Items

+

UnfinishedBarrel : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UnfinishedBarrel()
+ (ctor) UnfinishedBarrel( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnhideTimer.html b/Docs/types/UnhideTimer.html new file mode 100644 index 0000000..dcd5377 --- /dev/null +++ b/Docs/types/UnhideTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UnhideTimer + + +

Back to Server.Mobiles

+

(ShadowFiend) - UnhideTimer : Timer

+ (ctor) UnhideTimer( ShadowFiend owner )
+ virtual void OnTick()
+ + diff --git a/Docs/types/UnholyBone.html b/Docs/types/UnholyBone.html new file mode 100644 index 0000000..1a0e3a6 --- /dev/null +++ b/Docs/types/UnholyBone.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - UnholyBone + + +

Back to Server.Items

+

UnholyBone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICarvable

+

Nested Types: SpawnTimer

+ (ctor) UnholyBone()
+ (ctor) UnholyBone( Serial serial )
+ string DefaultName( get; )
+ virtual void Carve( Mobile from, Item item )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnholyFamiliar.html b/Docs/types/UnholyFamiliar.html new file mode 100644 index 0000000..f3d7805 --- /dev/null +++ b/Docs/types/UnholyFamiliar.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - UnholyFamiliar + + +

Back to Server.Mobiles

+

UnholyFamiliar : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) UnholyFamiliar()
+ (ctor) UnholyFamiliar( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ bool IsBondable( get; )
+ bool IsDispellable( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual string ApplyNameSuffix( string suffix )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnholyItem.html b/Docs/types/UnholyItem.html new file mode 100644 index 0000000..c354c66 --- /dev/null +++ b/Docs/types/UnholyItem.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - UnholyItem + + +

Back to Server.Ethics.Evil

+

UnholyItem : Power

+ (ctor) UnholyItem()
+ virtual void BeginInvoke( Player from )
+ void Power_OnTarget( Mobile fromMobile, object obj, object state )
+ + diff --git a/Docs/types/UnholySense.html b/Docs/types/UnholySense.html new file mode 100644 index 0000000..d44e753 --- /dev/null +++ b/Docs/types/UnholySense.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UnholySense + + +

Back to Server.Ethics.Evil

+

UnholySense : Power

+ (ctor) UnholySense()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/UnholyShield.html b/Docs/types/UnholyShield.html new file mode 100644 index 0000000..86d686e --- /dev/null +++ b/Docs/types/UnholyShield.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UnholyShield + + +

Back to Server.Ethics.Evil

+

UnholyShield : Power

+ (ctor) UnholyShield()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/UnholySteed.html b/Docs/types/UnholySteed.html new file mode 100644 index 0000000..2363bf8 --- /dev/null +++ b/Docs/types/UnholySteed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - UnholySteed + + +

Back to Server.Mobiles

+

UnholySteed : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) UnholySteed()
+ (ctor) UnholySteed( Serial serial )
+ bool CanBreath( get; )
+ FoodType FavoriteFood( get; )
+ bool HasBreath( get; )
+ bool IsBondable( get; )
+ bool IsDispellable( get; )
+ virtual string ApplyNameSuffix( string suffix )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnholyWord.html b/Docs/types/UnholyWord.html new file mode 100644 index 0000000..0622a55 --- /dev/null +++ b/Docs/types/UnholyWord.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UnholyWord + + +

Back to Server.Ethics.Evil

+

UnholyWord : Power

+ (ctor) UnholyWord()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/UnicodeMessage.html b/Docs/types/UnicodeMessage.html new file mode 100644 index 0000000..93e3d5e --- /dev/null +++ b/Docs/types/UnicodeMessage.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UnicodeMessage + + +

Back to Server.Network

+

UnicodeMessage : Packet

+ (ctor) UnicodeMessage( Serial serial, int graphic, MessageType type, int hue, int font, string lang, string name, string text )
+ + diff --git a/Docs/types/UnicodePrompt.html b/Docs/types/UnicodePrompt.html new file mode 100644 index 0000000..66714a4 --- /dev/null +++ b/Docs/types/UnicodePrompt.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UnicodePrompt + + +

Back to Server.Network

+

UnicodePrompt : Packet

+ (ctor) UnicodePrompt( Prompt prompt )
+ + diff --git a/Docs/types/Unicorn.html b/Docs/types/Unicorn.html new file mode 100644 index 0000000..b9e9bd2 --- /dev/null +++ b/Docs/types/Unicorn.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - Unicorn + + +

Back to Server.Mobiles

+

Unicorn : BaseMount, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IMount

+ (ctor) Unicorn()
+ (ctor) Unicorn( Serial serial )
+ (ctor) Unicorn( string name )
+ bool AllowMaleRider( get; )
+ bool AllowMaleTamer( get; )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ bool InitialInnocent( get; )
+ int Meat( get; )
+ TimeSpan MountAbilityDelay( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool DoMountAbility( int damage, Mobile attacker )
+ virtual void GenerateLoot()
+ virtual void OnDisallowedRider( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnkD3.html b/Docs/types/UnkD3.html new file mode 100644 index 0000000..67f2388 --- /dev/null +++ b/Docs/types/UnkD3.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UnkD3 + + +

Back to Server.Network

+

UnkD3 : Packet

+ (ctor) UnkD3( Mobile beholder, Mobile beheld )
+ + diff --git a/Docs/types/UnknownPropertyException.html b/Docs/types/UnknownPropertyException.html new file mode 100644 index 0000000..f617ca3 --- /dev/null +++ b/Docs/types/UnknownPropertyException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UnknownPropertyException + + +

Back to Server

+

UnknownPropertyException : BindingException, ISerializable, _Exception

+ (ctor) UnknownPropertyException( Property property, string current )
+ + diff --git a/Docs/types/UnloadEntry.html b/Docs/types/UnloadEntry.html new file mode 100644 index 0000000..ca5d6a2 --- /dev/null +++ b/Docs/types/UnloadEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UnloadEntry + + +

Back to Server.Items

+

(NinjaWeapon) - UnloadEntry : ContextMenuEntry

+ (ctor) UnloadEntry( INinjaWeapon wep, int entry )
+ virtual void OnClick()
+ + diff --git a/Docs/types/UnlockScroll.html b/Docs/types/UnlockScroll.html new file mode 100644 index 0000000..54265a3 --- /dev/null +++ b/Docs/types/UnlockScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - UnlockScroll + + +

Back to Server.Items

+

UnlockScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) UnlockScroll()
+ (ctor) UnlockScroll( int amount )
+ (ctor) UnlockScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnlockSpell.html b/Docs/types/UnlockSpell.html new file mode 100644 index 0000000..effe3f2 --- /dev/null +++ b/Docs/types/UnlockSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - UnlockSpell + + +

Back to Server.Spells.Third

+

UnlockSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) UnlockSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/UnlockTarget.html b/Docs/types/UnlockTarget.html new file mode 100644 index 0000000..4ce3136 --- /dev/null +++ b/Docs/types/UnlockTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UnlockTarget + + +

Back to Server.Items

+

(Key) - UnlockTarget : Target

+ (ctor) UnlockTarget( Key key )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/UnmadeBedAddon.html b/Docs/types/UnmadeBedAddon.html new file mode 100644 index 0000000..cea48b2 --- /dev/null +++ b/Docs/types/UnmadeBedAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - UnmadeBedAddon + + +

Back to Server.Items

+

UnmadeBedAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) UnmadeBedAddon( bool east )
+ (ctor) UnmadeBedAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnmadeBedDeed.html b/Docs/types/UnmadeBedDeed.html new file mode 100644 index 0000000..f425080 --- /dev/null +++ b/Docs/types/UnmadeBedDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - UnmadeBedDeed + + +

Back to Server.Items

+

UnmadeBedDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) UnmadeBedDeed()
+ (ctor) UnmadeBedDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnsettlingPortraitAddon.html b/Docs/types/UnsettlingPortraitAddon.html new file mode 100644 index 0000000..e919401 --- /dev/null +++ b/Docs/types/UnsettlingPortraitAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - UnsettlingPortraitAddon + + +

Back to Server.Items

+

UnsettlingPortraitAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) UnsettlingPortraitAddon()
+ (ctor) UnsettlingPortraitAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnsettlingPortraitComponent.html b/Docs/types/UnsettlingPortraitComponent.html new file mode 100644 index 0000000..b3e2f6b --- /dev/null +++ b/Docs/types/UnsettlingPortraitComponent.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - UnsettlingPortraitComponent + + +

Back to Server.Items

+

UnsettlingPortraitComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) UnsettlingPortraitComponent()
+ (ctor) UnsettlingPortraitComponent( Serial serial )
+ int LabelNumber( get; )
+ void ChangeDirection()
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnsettlingPortraitDeed.html b/Docs/types/UnsettlingPortraitDeed.html new file mode 100644 index 0000000..d47a269 --- /dev/null +++ b/Docs/types/UnsettlingPortraitDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - UnsettlingPortraitDeed + + +

Back to Server.Items

+

UnsettlingPortraitDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UnsettlingPortraitDeed()
+ (ctor) UnsettlingPortraitDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UnsummonTimer.html b/Docs/types/UnsummonTimer.html new file mode 100644 index 0000000..18076ac --- /dev/null +++ b/Docs/types/UnsummonTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UnsummonTimer + + +

Back to Server.Spells

+

UnsummonTimer : Timer

+ (ctor) UnsummonTimer( Mobile caster, BaseCreature creature, TimeSpan delay )
+ virtual void OnTick()
+ + diff --git a/Docs/types/UpdateAllTimer.html b/Docs/types/UpdateAllTimer.html new file mode 100644 index 0000000..86517e6 --- /dev/null +++ b/Docs/types/UpdateAllTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UpdateAllTimer + + +

Back to Server.Multis

+

(BaseBoat) - UpdateAllTimer : Timer

+ (ctor) UpdateAllTimer()
+ virtual void OnTick()
+ + diff --git a/Docs/types/UpdateSecureTrade.html b/Docs/types/UpdateSecureTrade.html new file mode 100644 index 0000000..1685d16 --- /dev/null +++ b/Docs/types/UpdateSecureTrade.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UpdateSecureTrade + + +

Back to Server.Network

+

UpdateSecureTrade : Packet

+ (ctor) UpdateSecureTrade( Container cont, bool first, bool second )
+ + diff --git a/Docs/types/UpdateStatueAnimation.html b/Docs/types/UpdateStatueAnimation.html new file mode 100644 index 0000000..d33ae8e --- /dev/null +++ b/Docs/types/UpdateStatueAnimation.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UpdateStatueAnimation + + +

Back to Server.Network

+

UpdateStatueAnimation : Packet

+ (ctor) UpdateStatueAnimation( Mobile m, int status, int animation, int frame )
+ + diff --git a/Docs/types/Urn1Artifact.html b/Docs/types/Urn1Artifact.html new file mode 100644 index 0000000..3f6435a --- /dev/null +++ b/Docs/types/Urn1Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Urn1Artifact + + +

Back to Server.Items

+

Urn1Artifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Urn1Artifact()
+ (ctor) Urn1Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Urn2Artifact.html b/Docs/types/Urn2Artifact.html new file mode 100644 index 0000000..09d998c --- /dev/null +++ b/Docs/types/Urn2Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Urn2Artifact + + +

Back to Server.Items

+

Urn2Artifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Urn2Artifact()
+ (ctor) Urn2Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UsageAttribute.html b/Docs/types/UsageAttribute.html new file mode 100644 index 0000000..357710f --- /dev/null +++ b/Docs/types/UsageAttribute.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UsageAttribute + + +

Back to Server

+

UsageAttribute : Attribute, _Attribute

+ (ctor) UsageAttribute( string usage )
+ string Usage( get; )
+ + diff --git a/Docs/types/UseBagEntry.html b/Docs/types/UseBagEntry.html new file mode 100644 index 0000000..c6c2398 --- /dev/null +++ b/Docs/types/UseBagEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UseBagEntry + + +

Back to Server.Items

+

(BagOfSending) - UseBagEntry : ContextMenuEntry

+ (ctor) UseBagEntry( BagOfSending bag, bool enabled )
+ virtual void OnClick()
+ + diff --git a/Docs/types/UseCallingScrollObjective.html b/Docs/types/UseCallingScrollObjective.html new file mode 100644 index 0000000..e6b11c4 --- /dev/null +++ b/Docs/types/UseCallingScrollObjective.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UseCallingScrollObjective + + +

Back to Server.Engines.Quests.Necro

+

UseCallingScrollObjective : QuestObjective

+ (ctor) UseCallingScrollObjective()
+ object Message( get; )
+ + diff --git a/Docs/types/UseTeleporterConversation.html b/Docs/types/UseTeleporterConversation.html new file mode 100644 index 0000000..43377b8 --- /dev/null +++ b/Docs/types/UseTeleporterConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - UseTeleporterConversation + + +

Back to Server.Engines.Quests.Ninja

+

UseTeleporterConversation : QuestConversation

+ (ctor) UseTeleporterConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/UseTeleporterObjective.html b/Docs/types/UseTeleporterObjective.html new file mode 100644 index 0000000..474dccb --- /dev/null +++ b/Docs/types/UseTeleporterObjective.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - UseTeleporterObjective + + +

Back to Server.Engines.Quests.Ninja

+

UseTeleporterObjective : QuestObjective

+ (ctor) UseTeleporterObjective()
+ object Message( get; )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/UserInfo.html b/Docs/types/UserInfo.html new file mode 100644 index 0000000..1c3a622 --- /dev/null +++ b/Docs/types/UserInfo.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - UserInfo + + +

Back to Server.Engines.Reports

+

UserInfo : BaseInfo, IComparable

+ (ctor) UserInfo( string account )
+ + diff --git a/Docs/types/Utility.html b/Docs/types/Utility.html new file mode 100644 index 0000000..0bec6b6 --- /dev/null +++ b/Docs/types/Utility.html @@ -0,0 +1,94 @@ + + + RunUO Documentation - Class Overview - Utility + + +

Back to Server

+

Utility

+ (static) Encoding UTF8( get; )
+ (static) Encoding UTF8WithEncoding( get; )
+ (static) TOutput b__0( TInput value )
+ (static) void AssignRandomFacialHair( Mobile m )
+ (static) void AssignRandomFacialHair( Mobile m, int hue )
+ (static) void AssignRandomFacialHair( Mobile m, bool randomHue )
+ (static) void AssignRandomHair( Mobile m )
+ (static) void AssignRandomHair( Mobile m, bool randomHue )
+ (static) void AssignRandomHair( Mobile m, int hue )
+ (static) ArrayList BuildArrayList( IEnumerable enumerable )
+ (static) List<TOutput> CastConvertList( List<TInput> list )
+ (static) int ClipDyedHue( int hue )
+ (static) int ClipHairHue( int hue )
+ (static) int ClipSkinHue( int hue )
+ (static) int Dice( int numDice, int numSides, int bonus )
+ (static) string FixHtml( string str )
+ (static) void FixPoints( ref Point3D top, ref Point3D bottom )
+ (static) void FormatBuffer( TextWriter output, Stream input, int length )
+ (static) int GetAddressValue( IPAddress address )
+ (static) object GetArrayCap( Array array, int index )
+ (static) object GetArrayCap( Array array, int index, object emptyValue )
+ (static) string GetAttribute( XmlElement node, string attributeName )
+ (static) string GetAttribute( XmlElement node, string attributeName, string defaultValue )
+ (static) Direction GetDirection( IPoint2D from, IPoint2D to )
+ (static) long GetLongAddressValue( IPAddress address )
+ (static) string GetText( XmlElement node, string defaultValue )
+ (static) DateTime GetXMLDateTime( string dateTimeString, DateTime defaultValue )
+ (static) int GetXMLInt32( string intString, int defaultValue )
+ (static) TimeSpan GetXMLTimeSpan( string timeSpanString, TimeSpan defaultValue )
+ (static) bool InRange( Point3D p1, Point3D p2, int range )
+ (static) int InsensitiveCompare( string first, string second )
+ (static) bool InsensitiveStartsWith( string first, string second )
+ (static) IPAddress Intern( IPAddress ipAddress )
+ (static) string Intern( string str )
+ (static) void Intern( ref string str )
+ (static) void Intern( ref IPAddress ipAddress )
+ (static) bool InUpdateRange( Point3D p1, Point3D p2 )
+ (static) bool InUpdateRange( IPoint2D p1, IPoint2D p2 )
+ (static) bool InUpdateRange( Point2D p1, Point2D p2 )
+ (static) bool IPMatch( string val, IPAddress ip )
+ (static) bool IPMatch( string val, IPAddress ip, ref bool valid )
+ (static) bool IPMatchCIDR( string cidr, IPAddress ip )
+ (static) bool IPMatchCIDR( IPAddress cidrPrefix, IPAddress ip, int cidrLength )
+ (static) bool IPMatchCIDR( uint cidrPrefixValue, uint ipValue, int cidrLength )
+ (static) bool IPMatchCIDR( uint cidrPrefixValue, IPAddress ip, int cidrLength )
+ (static) bool IPMatchClassC( IPAddress ip1, IPAddress ip2 )
+ (static) bool IsValidIP( string text )
+ (static) bool NumberBetween( double num, int bound1, int bound2, double allowance )
+ (static) uint OrderedAddressValue( byte[] bytes )
+ (static) void PopColor()
+ (static) void PushColor( ConsoleColor color )
+ (static) int Random( int count )
+ (static) int Random( int from, int count )
+ (static) int RandomAnimalHue()
+ (static) int RandomBirdHue()
+ (static) int RandomBlueHue()
+ (static) bool RandomBool()
+ (static) SkillName RandomCombatSkill()
+ (static) SkillName RandomCraftSkill()
+ (static) double RandomDouble()
+ (static) int RandomDyedHue()
+ (static) int RandomGreenHue()
+ (static) int RandomHairHue()
+ (static) int RandomList( int[] list )
+ (static) int RandomMetalHue()
+ (static) int RandomMinMax( int min, int max )
+ (static) int RandomNeutralHue()
+ (static) int RandomNondyedHue()
+ (static) int RandomOrangeHue()
+ (static) int RandomPinkHue()
+ (static) int RandomRedHue()
+ (static) SkillName RandomSkill()
+ (static) int RandomSkinHue()
+ (static) int RandomSlimeHue()
+ (static) int RandomSnakeHue()
+ (static) int RandomYellowHue()
+ (static) bool RangeCheck( IPoint2D p1, IPoint2D p2, int range )
+ (static) List<TOutput> SafeConvertList( List<TInput> list )
+ (static) void Separate( StringBuilder sb, string value, string separator )
+ (static) uint SwapUnsignedInt( uint source )
+ (static) bool ToBoolean( string value )
+ (static) double ToDouble( string value )
+ (static) int ToInt32( string value )
+ (static) TimeSpan ToTimeSpan( string value )
+ (static) bool TryConvertIPv6toIPv4( ref IPAddress address )
+ + diff --git a/Docs/types/UtilityItem.html b/Docs/types/UtilityItem.html new file mode 100644 index 0000000..f95045f --- /dev/null +++ b/Docs/types/UtilityItem.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - UtilityItem + + +

Back to Server.Items

+

UtilityItem

+ (static) int RandomChoice( int itemID1, int itemID2 )
+ (ctor) UtilityItem()
+ + diff --git a/Docs/types/Uzeraan.html b/Docs/types/Uzeraan.html new file mode 100644 index 0000000..4ba541b --- /dev/null +++ b/Docs/types/Uzeraan.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - Uzeraan + + +

Back to Server.Engines.Quests.Haven

+

Uzeraan : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Uzeraan()
+ (ctor) Uzeraan( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile pm )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/UzeraanDaemonBloodConversation.html b/Docs/types/UzeraanDaemonBloodConversation.html new file mode 100644 index 0000000..1e97855 --- /dev/null +++ b/Docs/types/UzeraanDaemonBloodConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - UzeraanDaemonBloodConversation + + +

Back to Server.Engines.Quests.Haven

+

UzeraanDaemonBloodConversation : QuestConversation

+ (ctor) UzeraanDaemonBloodConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/UzeraanDaemonBoneConversation.html b/Docs/types/UzeraanDaemonBoneConversation.html new file mode 100644 index 0000000..9486f60 --- /dev/null +++ b/Docs/types/UzeraanDaemonBoneConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - UzeraanDaemonBoneConversation + + +

Back to Server.Engines.Quests.Haven

+

UzeraanDaemonBoneConversation : QuestConversation

+ (ctor) UzeraanDaemonBoneConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/UzeraanFertileDirtConversation.html b/Docs/types/UzeraanFertileDirtConversation.html new file mode 100644 index 0000000..b1f7639 --- /dev/null +++ b/Docs/types/UzeraanFertileDirtConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - UzeraanFertileDirtConversation + + +

Back to Server.Engines.Quests.Haven

+

UzeraanFertileDirtConversation : QuestConversation

+ (ctor) UzeraanFertileDirtConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/UzeraanFirstTaskConversation.html b/Docs/types/UzeraanFirstTaskConversation.html new file mode 100644 index 0000000..1359b06 --- /dev/null +++ b/Docs/types/UzeraanFirstTaskConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - UzeraanFirstTaskConversation + + +

Back to Server.Engines.Quests.Haven

+

UzeraanFirstTaskConversation : QuestConversation

+ (ctor) UzeraanFirstTaskConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/UzeraanReportConversation.html b/Docs/types/UzeraanReportConversation.html new file mode 100644 index 0000000..3142a7a --- /dev/null +++ b/Docs/types/UzeraanReportConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - UzeraanReportConversation + + +

Back to Server.Engines.Quests.Haven

+

UzeraanReportConversation : QuestConversation

+ (ctor) UzeraanReportConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/UzeraanScrollOfPowerConversation.html b/Docs/types/UzeraanScrollOfPowerConversation.html new file mode 100644 index 0000000..6540fe1 --- /dev/null +++ b/Docs/types/UzeraanScrollOfPowerConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - UzeraanScrollOfPowerConversation + + +

Back to Server.Engines.Quests.Haven

+

UzeraanScrollOfPowerConversation : QuestConversation

+ (ctor) UzeraanScrollOfPowerConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/UzeraanTitheConversation.html b/Docs/types/UzeraanTitheConversation.html new file mode 100644 index 0000000..100d553 --- /dev/null +++ b/Docs/types/UzeraanTitheConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - UzeraanTitheConversation + + +

Back to Server.Engines.Quests.Haven

+

UzeraanTitheConversation : QuestConversation

+ (ctor) UzeraanTitheConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/UzeraanTurmoilHorn.html b/Docs/types/UzeraanTurmoilHorn.html new file mode 100644 index 0000000..f5a3403 --- /dev/null +++ b/Docs/types/UzeraanTurmoilHorn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - UzeraanTurmoilHorn + + +

Back to Server.Engines.Quests.Haven

+

UzeraanTurmoilHorn : HornOfRetreat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UzeraanTurmoilHorn()
+ (ctor) UzeraanTurmoilHorn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool ValidateUse( Mobile from )
+ + diff --git a/Docs/types/UzeraanTurmoilQuest.html b/Docs/types/UzeraanTurmoilQuest.html new file mode 100644 index 0000000..a13a5fa --- /dev/null +++ b/Docs/types/UzeraanTurmoilQuest.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - UzeraanTurmoilQuest + + +

Back to Server.Engines.Quests.Haven

+

UzeraanTurmoilQuest : QuestSystem

+ (static) bool HasLostDaemonBlood( Mobile from )
+ (static) bool HasLostDaemonBone( Mobile from )
+ (static) bool HasLostFertileDirt( Mobile from )
+ (static) bool HasLostScrollOfPower( Mobile from )
+ (ctor) UzeraanTurmoilQuest()
+ (ctor) UzeraanTurmoilQuest( PlayerMobile from )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void Slice()
+ + diff --git a/Docs/types/UzeraanTurmoilTeleporter.html b/Docs/types/UzeraanTurmoilTeleporter.html new file mode 100644 index 0000000..d0508ab --- /dev/null +++ b/Docs/types/UzeraanTurmoilTeleporter.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - UzeraanTurmoilTeleporter + + +

Back to Server.Engines.Quests.Haven

+

UzeraanTurmoilTeleporter : DynamicTeleporter, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) UzeraanTurmoilTeleporter()
+ (ctor) UzeraanTurmoilTeleporter( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool GetDestination( PlayerMobile player, ref Point3D loc, ref Map map )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Vagabond.html b/Docs/types/Vagabond.html new file mode 100644 index 0000000..83969d1 --- /dev/null +++ b/Docs/types/Vagabond.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Vagabond + + +

Back to Server.Mobiles

+

Vagabond : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Vagabond()
+ (ctor) Vagabond( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ValentinesCard.html b/Docs/types/ValentinesCard.html new file mode 100644 index 0000000..9492fa9 --- /dev/null +++ b/Docs/types/ValentinesCard.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - ValentinesCard + + +

Back to Server.Items

+

ValentinesCard : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: ValentinesCardEast, ValentinesCardSouth

+ (ctor) ValentinesCard( int itemid )
+ (ctor) ValentinesCard( Serial serial )
+ string From( get; set; )
+ string To( get; set; )
+ virtual void AddNameProperty( ObjectPropertyList list )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnTarget( Mobile from, object targeted )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ValentinesCardEast.html b/Docs/types/ValentinesCardEast.html new file mode 100644 index 0000000..8675990 --- /dev/null +++ b/Docs/types/ValentinesCardEast.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ValentinesCardEast + + +

Back to Server.Items

+

ValentinesCardEast : ValentinesCard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ValentinesCardEast()
+ (ctor) ValentinesCardEast( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ValentinesCardSouth.html b/Docs/types/ValentinesCardSouth.html new file mode 100644 index 0000000..0f4e7a4 --- /dev/null +++ b/Docs/types/ValentinesCardSouth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ValentinesCardSouth + + +

Back to Server.Items

+

ValentinesCardSouth : ValentinesCard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ValentinesCardSouth()
+ (ctor) ValentinesCardSouth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ValorVirtue.html b/Docs/types/ValorVirtue.html new file mode 100644 index 0000000..560d8a0 --- /dev/null +++ b/Docs/types/ValorVirtue.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ValorVirtue + + +

Back to Server

+

ValorVirtue

+

Nested Types: InternalTarget

+ (static) void CheckAtrophy( Mobile from )
+ (static) void Initialize()
+ (static) void OnVirtueUsed( Mobile from )
+ (static) void Valor( Mobile from, object targ )
+ (ctor) ValorVirtue()
+ + diff --git a/Docs/types/ValoriteElemental.html b/Docs/types/ValoriteElemental.html new file mode 100644 index 0000000..63acd71 --- /dev/null +++ b/Docs/types/ValoriteElemental.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - ValoriteElemental + + +

Back to Server.Mobiles

+

ValoriteElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) ValoriteElemental()
+ (ctor) ValoriteElemental( Serial serial )
+ (ctor) ValoriteElemental( int oreAmount )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void AlterMeleeDamageFrom( Mobile from, ref int damage )
+ virtual void CheckReflect( Mobile caster, ref bool reflect )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ValoriteGranite.html b/Docs/types/ValoriteGranite.html new file mode 100644 index 0000000..47b3bcc --- /dev/null +++ b/Docs/types/ValoriteGranite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ValoriteGranite + + +

Back to Server.Items

+

ValoriteGranite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ValoriteGranite()
+ (ctor) ValoriteGranite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ValoriteIngot.html b/Docs/types/ValoriteIngot.html new file mode 100644 index 0000000..4331c17 --- /dev/null +++ b/Docs/types/ValoriteIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ValoriteIngot + + +

Back to Server.Items

+

ValoriteIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ValoriteIngot()
+ (ctor) ValoriteIngot( int amount )
+ (ctor) ValoriteIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ValoriteOre.html b/Docs/types/ValoriteOre.html new file mode 100644 index 0000000..ece31d3 --- /dev/null +++ b/Docs/types/ValoriteOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - ValoriteOre + + +

Back to Server.Items

+

ValoriteOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ValoriteOre()
+ (ctor) ValoriteOre( int amount )
+ (ctor) ValoriteOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VampireBat.html b/Docs/types/VampireBat.html new file mode 100644 index 0000000..0b16eb1 --- /dev/null +++ b/Docs/types/VampireBat.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - VampireBat + + +

Back to Server.Mobiles

+

VampireBat : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) VampireBat()
+ (ctor) VampireBat( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VampireBatFamiliar.html b/Docs/types/VampireBatFamiliar.html new file mode 100644 index 0000000..8412616 --- /dev/null +++ b/Docs/types/VampireBatFamiliar.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VampireBatFamiliar + + +

Back to Server.Mobiles

+

VampireBatFamiliar : BaseFamiliar, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) VampireBatFamiliar()
+ (ctor) VampireBatFamiliar( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VampiricEmbraceScroll.html b/Docs/types/VampiricEmbraceScroll.html new file mode 100644 index 0000000..9805ba0 --- /dev/null +++ b/Docs/types/VampiricEmbraceScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - VampiricEmbraceScroll + + +

Back to Server.Items

+

VampiricEmbraceScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) VampiricEmbraceScroll()
+ (ctor) VampiricEmbraceScroll( int amount )
+ (ctor) VampiricEmbraceScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VampiricEmbraceSpell.html b/Docs/types/VampiricEmbraceSpell.html new file mode 100644 index 0000000..ac587ca --- /dev/null +++ b/Docs/types/VampiricEmbraceSpell.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - VampiricEmbraceSpell + + +

Back to Server.Spells.Necromancy

+

VampiricEmbraceSpell : TransformationSpell, ISpell, ITransformationSpell

+ (ctor) VampiricEmbraceSpell( Mobile caster, Item scroll )
+ int Body( get; )
+ TimeSpan CastDelayBase( get; )
+ int FireResistOffset( get; )
+ int Hue( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void DoEffect( Mobile m )
+ virtual void GetCastSkills( out double min, out double max )
+ + diff --git a/Docs/types/Vandyke.html b/Docs/types/Vandyke.html new file mode 100644 index 0000000..0ce5699 --- /dev/null +++ b/Docs/types/Vandyke.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Vandyke + + +

Back to Server.Items

+

Vandyke : Beard, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Vandyke()
+ (ctor) Vandyke( int hue )
+ (ctor) Vandyke( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VanityAddon.html b/Docs/types/VanityAddon.html new file mode 100644 index 0000000..966379d --- /dev/null +++ b/Docs/types/VanityAddon.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - VanityAddon + + +

Back to Server.Items

+

VanityAddon : BaseAddonContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) VanityAddon( Serial serial )
+ (ctor) VanityAddon( bool east )
+ BaseAddonContainerDeed Deed( get; )
+ int DefaultDropSound( get; )
+ int DefaultGumpID( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VanityDeed.html b/Docs/types/VanityDeed.html new file mode 100644 index 0000000..63e36fa --- /dev/null +++ b/Docs/types/VanityDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - VanityDeed + + +

Back to Server.Items

+

VanityDeed : BaseAddonContainerDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+

Nested Types: InternalGump

+ (ctor) VanityDeed()
+ (ctor) VanityDeed( Serial serial )
+ BaseAddonContainer Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VanquishDaemonConversation.html b/Docs/types/VanquishDaemonConversation.html new file mode 100644 index 0000000..a77f4b3 --- /dev/null +++ b/Docs/types/VanquishDaemonConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - VanquishDaemonConversation + + +

Back to Server.Engines.Quests.Doom

+

VanquishDaemonConversation : QuestConversation

+ (ctor) VanquishDaemonConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/VanquishDaemonObjective.html b/Docs/types/VanquishDaemonObjective.html new file mode 100644 index 0000000..fa83e84 --- /dev/null +++ b/Docs/types/VanquishDaemonObjective.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - VanquishDaemonObjective + + +

Back to Server.Engines.Quests.Doom

+

VanquishDaemonObjective : QuestObjective

+ (ctor) VanquishDaemonObjective()
+ (ctor) VanquishDaemonObjective( BoneDemon daemon )
+ Corpse CorpseWithSkull( get; set; )
+ object Message( get; )
+ virtual void CheckProgress()
+ virtual void ChildDeserialize( GenericReader reader )
+ virtual void ChildSerialize( GenericWriter writer )
+ virtual void OnComplete()
+ + diff --git a/Docs/types/VarietyDealer.html b/Docs/types/VarietyDealer.html new file mode 100644 index 0000000..9603ec7 --- /dev/null +++ b/Docs/types/VarietyDealer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - VarietyDealer + + +

Back to Server.Mobiles

+

VarietyDealer : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) VarietyDealer()
+ (ctor) VarietyDealer( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Vase.html b/Docs/types/Vase.html new file mode 100644 index 0000000..f66e39f --- /dev/null +++ b/Docs/types/Vase.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Vase + + +

Back to Server.Items

+

Vase : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Vase()
+ (ctor) Vase( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VaultOfSecretsBarrier.html b/Docs/types/VaultOfSecretsBarrier.html new file mode 100644 index 0000000..9fbf388 --- /dev/null +++ b/Docs/types/VaultOfSecretsBarrier.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - VaultOfSecretsBarrier + + +

Back to Server.Engines.Quests.Necro

+

VaultOfSecretsBarrier : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) VaultOfSecretsBarrier()
+ (ctor) VaultOfSecretsBarrier( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool OnMoveOver( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VaultOfSecretsConversation.html b/Docs/types/VaultOfSecretsConversation.html new file mode 100644 index 0000000..b245ad1 --- /dev/null +++ b/Docs/types/VaultOfSecretsConversation.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VaultOfSecretsConversation + + +

Back to Server.Engines.Quests.Necro

+

VaultOfSecretsConversation : QuestConversation

+ (ctor) VaultOfSecretsConversation()
+ QuestItemInfo[] Info( get; )
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/VendorAI.html b/Docs/types/VendorAI.html new file mode 100644 index 0000000..aafaeea --- /dev/null +++ b/Docs/types/VendorAI.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - VendorAI + + +

Back to Server.Mobiles

+

VendorAI : BaseAI

+ (ctor) VendorAI( BaseCreature m )
+ virtual bool DoActionGuard()
+ virtual bool DoActionInteract()
+ virtual bool DoActionWander()
+ virtual bool HandlesOnSpeech( Mobile from )
+ virtual void OnSpeech( SpeechEventArgs e )
+ + diff --git a/Docs/types/VendorBackpack.html b/Docs/types/VendorBackpack.html new file mode 100644 index 0000000..a2b08a6 --- /dev/null +++ b/Docs/types/VendorBackpack.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - VendorBackpack + + +

Back to Server.Mobiles

+

VendorBackpack : Backpack, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Nested Types: BuyEntry

+ (ctor) VendorBackpack()
+ (ctor) VendorBackpack( Serial serial )
+ int DefaultMaxWeight( get; )
+ virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
+ virtual bool CheckItemUse( Mobile from, Item item )
+ virtual bool CheckTarget( Mobile from, Target targ, object targeted )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetChildContextMenuEntries( Mobile from, List<ContextMenuEntry> list, Item item )
+ virtual void GetChildNameProperties( ObjectPropertyList list, Item item )
+ virtual void GetChildProperties( ObjectPropertyList list, Item item )
+ virtual bool IsAccessibleTo( Mobile m )
+ virtual void OnSingleClickContained( Mobile from, Item item )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VendorBuyContent.html b/Docs/types/VendorBuyContent.html new file mode 100644 index 0000000..b9b31fb --- /dev/null +++ b/Docs/types/VendorBuyContent.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - VendorBuyContent + + +

Back to Server.Network

+

VendorBuyContent : Packet

+ (ctor) VendorBuyContent( List<BuyItemState> list )
+ + diff --git a/Docs/types/VendorBuyContent6017.html b/Docs/types/VendorBuyContent6017.html new file mode 100644 index 0000000..f0a5d73 --- /dev/null +++ b/Docs/types/VendorBuyContent6017.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - VendorBuyContent6017 + + +

Back to Server.Network

+

VendorBuyContent6017 : Packet

+ (ctor) VendorBuyContent6017( List<BuyItemState> list )
+ + diff --git a/Docs/types/VendorBuyEntry.html b/Docs/types/VendorBuyEntry.html new file mode 100644 index 0000000..8fbae63 --- /dev/null +++ b/Docs/types/VendorBuyEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VendorBuyEntry + + +

Back to Server.ContextMenus

+

VendorBuyEntry : ContextMenuEntry

+ (ctor) VendorBuyEntry( Mobile from, BaseVendor vendor )
+ virtual void OnClick()
+ + diff --git a/Docs/types/VendorBuyList.html b/Docs/types/VendorBuyList.html new file mode 100644 index 0000000..41e6fc2 --- /dev/null +++ b/Docs/types/VendorBuyList.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - VendorBuyList + + +

Back to Server.Network

+

VendorBuyList : Packet

+ (ctor) VendorBuyList( Mobile vendor, List<BuyItemState> list )
+ + diff --git a/Docs/types/VendorDefinition.html b/Docs/types/VendorDefinition.html new file mode 100644 index 0000000..63dd8f6 --- /dev/null +++ b/Docs/types/VendorDefinition.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - VendorDefinition + + +

Back to Server.Factions

+

VendorDefinition

+ (static) VendorDefinition[] Definitions( get; )
+ (ctor) VendorDefinition( Type type, int itemID, int price, int upkeep, int maximum, TextDefinition header, TextDefinition label )
+ TextDefinition Header( get; )
+ int ItemID( get; )
+ TextDefinition Label( get; )
+ int Maximum( get; )
+ int Price( get; )
+ Type Type( get; )
+ int Upkeep( get; )
+ + diff --git a/Docs/types/VendorGenerator.html b/Docs/types/VendorGenerator.html new file mode 100644 index 0000000..fda7ff8 --- /dev/null +++ b/Docs/types/VendorGenerator.html @@ -0,0 +1,29 @@ + + + RunUO Documentation - Class Overview - VendorGenerator + + +

Back to Server

+

VendorGenerator

+

Nested Types: ShopFlags, ShopInfo

+ (static) bool CanFit( Map map, int x, int y, int z )
+ (static) void CheckFloor( Map map, int x, int y )
+ (static) void CheckPoint( Map map, int x, int y )
+ (static) bool GetFloorZ( Map map, int x, int y, out int z )
+ (static) void Initialize()
+ (static) bool IsArcheryWeapon( int itemID )
+ (static) bool IsArmor( int itemID )
+ (static) bool IsClothes( int itemID )
+ (static) bool IsDisplayCase( int itemID )
+ (static) bool IsFloor( int itemID )
+ (static) bool IsFloor( Map map, int x, int y, bool canFit )
+ (static) bool IsMetalWeapon( int itemID )
+ (static) bool IsStaticFloor( int itemID )
+ (static) void Process( Map map, Rectangle2D[] regions )
+ (static) void ProcessDisplayCase( Map map, StaticTile[] tiles, int x, int y )
+ (static) ShopFlags ProcessDisplayedItem( int itemID )
+ (static) void RecurseFindFloor( Map map, int x, int y, ArrayList floor )
+ (static) void VendorGen_OnCommand( CommandEventArgs e )
+ (ctor) VendorGenerator()
+ + diff --git a/Docs/types/VendorInventory.html b/Docs/types/VendorInventory.html new file mode 100644 index 0000000..44e648c --- /dev/null +++ b/Docs/types/VendorInventory.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - VendorInventory + + +

Back to Server.Mobiles

+

VendorInventory

+

Nested Types: ExpireTimer

+ (ctor) VendorInventory( BaseHouse house, GenericReader reader )
+ (ctor) VendorInventory( BaseHouse house, Mobile owner, string vendorName, string shopName )
+ DateTime ExpireTime( get; )
+ int Gold( get; set; )
+ BaseHouse House( get; set; )
+ List<Item> Items( get; )
+ Mobile Owner( get; set; )
+ string ShopName( get; set; )
+ string VendorName( get; set; )
+ void AddItem( Item item )
+ void Delete()
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VendorInventoryGump.html b/Docs/types/VendorInventoryGump.html new file mode 100644 index 0000000..d6b8985 --- /dev/null +++ b/Docs/types/VendorInventoryGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VendorInventoryGump + + +

Back to Server.Gumps

+

VendorInventoryGump : Gump

+ (ctor) VendorInventoryGump( BaseHouse house, Mobile from )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/VendorItem.html b/Docs/types/VendorItem.html new file mode 100644 index 0000000..0f893cd --- /dev/null +++ b/Docs/types/VendorItem.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - VendorItem + + +

Back to Server.Mobiles

+

VendorItem

+ (ctor) VendorItem( Item item, int price, string description, DateTime created )
+ DateTime Created( get; )
+ string Description( get; set; )
+ string FormattedPrice( get; )
+ bool IsForFree( get; )
+ bool IsForSale( get; )
+ Item Item( get; )
+ int Price( get; )
+ bool Valid( get; )
+ void Invalidate()
+ + diff --git a/Docs/types/VendorList.html b/Docs/types/VendorList.html new file mode 100644 index 0000000..7fe47d4 --- /dev/null +++ b/Docs/types/VendorList.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VendorList + + +

Back to Server.Factions

+

VendorList

+ (ctor) VendorList( VendorDefinition definition )
+ VendorDefinition Definition( get; )
+ List<BaseFactionVendor> Vendors( get; )
+ BaseFactionVendor Construct( Town town, Faction faction )
+ + diff --git a/Docs/types/VendorNamePrompt.html b/Docs/types/VendorNamePrompt.html new file mode 100644 index 0000000..0c82d49 --- /dev/null +++ b/Docs/types/VendorNamePrompt.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VendorNamePrompt + + +

Back to Server.Mobiles

+

(PlayerVendor) - VendorNamePrompt : Prompt

+ (ctor) VendorNamePrompt( PlayerVendor vendor )
+ virtual void OnResponse( Mobile from, string text )
+ + diff --git a/Docs/types/VendorPricePrompt.html b/Docs/types/VendorPricePrompt.html new file mode 100644 index 0000000..0393657 --- /dev/null +++ b/Docs/types/VendorPricePrompt.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VendorPricePrompt + + +

Back to Server.Mobiles

+

(PlayerVendor) - VendorPricePrompt : Prompt

+ (ctor) VendorPricePrompt( PlayerVendor vendor, VendorItem vi )
+ virtual void OnCancel( Mobile from )
+ virtual void OnResponse( Mobile from, string text )
+ void SetInfo( Mobile from, int price, string description )
+ + diff --git a/Docs/types/VendorRentalContract.html b/Docs/types/VendorRentalContract.html new file mode 100644 index 0000000..6e2df18 --- /dev/null +++ b/Docs/types/VendorRentalContract.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - VendorRentalContract + + +

Back to Server.Items

+

VendorRentalContract : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: ContractOptionEntry, OfferExpireTimer, RentTarget

+ (ctor) VendorRentalContract()
+ (ctor) VendorRentalContract( Serial serial )
+ VendorRentalDuration Duration( get; set; )
+ int LabelNumber( get; )
+ bool LandlordRenew( get; set; )
+ Mobile Offeree( get; set; )
+ int Price( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
+ virtual void GetProperties( ObjectPropertyList list )
+ bool IsLandlord( Mobile m )
+ bool IsUsableBy( Mobile from, bool byLandlord, bool byBackpack, bool noOfferee, bool sendMessage )
+ virtual void OnDelete()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VendorRentalContractGump.html b/Docs/types/VendorRentalContractGump.html new file mode 100644 index 0000000..18ee402 --- /dev/null +++ b/Docs/types/VendorRentalContractGump.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - VendorRentalContractGump + + +

Back to Server.Gumps

+

VendorRentalContractGump : BaseVendorRentalGump

+

Nested Types: OfferContractTarget, PricePerRentalPrompt

+ (ctor) VendorRentalContractGump( VendorRentalContract contract, Mobile from )
+ virtual bool IsValidResponse( Mobile from )
+ virtual void LandlordRenewOnExpiration( Mobile from )
+ virtual void OfferContract( Mobile from )
+ virtual void SetContractDuration( Mobile from, VendorRentalDuration duration )
+ virtual void SetPricePerRental( Mobile from )
+ + diff --git a/Docs/types/VendorRentalDuration.html b/Docs/types/VendorRentalDuration.html new file mode 100644 index 0000000..e526859 --- /dev/null +++ b/Docs/types/VendorRentalDuration.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VendorRentalDuration + + +

Back to Server.Mobiles

+

VendorRentalDuration

+ (ctor) VendorRentalDuration( TimeSpan duration, int name )
+ TimeSpan Duration( get; )
+ int ID( get; )
+ int Name( get; )
+ + diff --git a/Docs/types/VendorRentalOfferGump.html b/Docs/types/VendorRentalOfferGump.html new file mode 100644 index 0000000..43d1455 --- /dev/null +++ b/Docs/types/VendorRentalOfferGump.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VendorRentalOfferGump + + +

Back to Server.Gumps

+

VendorRentalOfferGump : BaseVendorRentalGump

+ (ctor) VendorRentalOfferGump( VendorRentalContract contract, Mobile landlord )
+ virtual void AcceptOffer( Mobile from )
+ virtual void Cancel( Mobile from )
+ virtual bool IsValidResponse( Mobile from )
+ + diff --git a/Docs/types/VendorRentalRefundGump.html b/Docs/types/VendorRentalRefundGump.html new file mode 100644 index 0000000..b8907aa --- /dev/null +++ b/Docs/types/VendorRentalRefundGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VendorRentalRefundGump + + +

Back to Server.Gumps

+

VendorRentalRefundGump : Gump

+ (ctor) VendorRentalRefundGump( RentedVendor vendor, Mobile landlord, int refundAmount )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/VendorSellEntry.html b/Docs/types/VendorSellEntry.html new file mode 100644 index 0000000..dc59eef --- /dev/null +++ b/Docs/types/VendorSellEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VendorSellEntry + + +

Back to Server.ContextMenus

+

VendorSellEntry : ContextMenuEntry

+ (ctor) VendorSellEntry( Mobile from, BaseVendor vendor )
+ virtual void OnClick()
+ + diff --git a/Docs/types/VendorSellList.html b/Docs/types/VendorSellList.html new file mode 100644 index 0000000..5c98397 --- /dev/null +++ b/Docs/types/VendorSellList.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - VendorSellList + + +

Back to Server.Network

+

VendorSellList : Packet

+ (ctor) VendorSellList( Mobile shopkeeper, Hashtable table )
+ + diff --git a/Docs/types/VendorShoeType.html b/Docs/types/VendorShoeType.html new file mode 100644 index 0000000..7a812de --- /dev/null +++ b/Docs/types/VendorShoeType.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - VendorShoeType + + +

Back to Server.Mobiles

+

VendorShoeType (Enum)

+ None = 0,
+ Shoes = 1,
+ Boots = 2,
+ Sandals = 3,
+ ThighBoots = 4
+ + diff --git a/Docs/types/VendorsEntry.html b/Docs/types/VendorsEntry.html new file mode 100644 index 0000000..7940567 --- /dev/null +++ b/Docs/types/VendorsEntry.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VendorsEntry + + +

Back to Server.Multis

+

(HouseSign) - VendorsEntry : ContextMenuEntry

+ (ctor) VendorsEntry( HouseSign sign )
+ virtual void OnClick()
+ + diff --git a/Docs/types/VengefulSpiritScroll.html b/Docs/types/VengefulSpiritScroll.html new file mode 100644 index 0000000..906f5f3 --- /dev/null +++ b/Docs/types/VengefulSpiritScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - VengefulSpiritScroll + + +

Back to Server.Items

+

VengefulSpiritScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) VengefulSpiritScroll()
+ (ctor) VengefulSpiritScroll( int amount )
+ (ctor) VengefulSpiritScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VengefulSpiritSpell.html b/Docs/types/VengefulSpiritSpell.html new file mode 100644 index 0000000..6a8f7dd --- /dev/null +++ b/Docs/types/VengefulSpiritSpell.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - VengefulSpiritSpell + + +

Back to Server.Spells.Necromancy

+

VengefulSpiritSpell : NecromancerSpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) VengefulSpiritSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/VeriteElemental.html b/Docs/types/VeriteElemental.html new file mode 100644 index 0000000..115bee8 --- /dev/null +++ b/Docs/types/VeriteElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - VeriteElemental + + +

Back to Server.Mobiles

+

VeriteElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) VeriteElemental()
+ (ctor) VeriteElemental( Serial serial )
+ (ctor) VeriteElemental( int oreAmount )
+ bool AutoDispel( get; )
+ bool BleedImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VeriteGranite.html b/Docs/types/VeriteGranite.html new file mode 100644 index 0000000..2119245 --- /dev/null +++ b/Docs/types/VeriteGranite.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VeriteGranite + + +

Back to Server.Items

+

VeriteGranite : BaseGranite, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) VeriteGranite()
+ (ctor) VeriteGranite( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VeriteIngot.html b/Docs/types/VeriteIngot.html new file mode 100644 index 0000000..774ea3d --- /dev/null +++ b/Docs/types/VeriteIngot.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - VeriteIngot + + +

Back to Server.Items

+

VeriteIngot : BaseIngot, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) VeriteIngot()
+ (ctor) VeriteIngot( int amount )
+ (ctor) VeriteIngot( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VeriteOre.html b/Docs/types/VeriteOre.html new file mode 100644 index 0000000..938fa96 --- /dev/null +++ b/Docs/types/VeriteOre.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - VeriteOre + + +

Back to Server.Items

+

VeriteOre : BaseOre, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) VeriteOre()
+ (ctor) VeriteOre( int amount )
+ (ctor) VeriteOre( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseIngot GetIngot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Vesper.html b/Docs/types/Vesper.html new file mode 100644 index 0000000..d32c45b --- /dev/null +++ b/Docs/types/Vesper.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Vesper + + +

Back to Server.Factions

+

Vesper : Town, IComparable

+ (ctor) Vesper()
+ + diff --git a/Docs/types/Veterinarian.html b/Docs/types/Veterinarian.html new file mode 100644 index 0000000..819249d --- /dev/null +++ b/Docs/types/Veterinarian.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Veterinarian + + +

Back to Server.Mobiles

+

Veterinarian : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Veterinarian()
+ (ctor) Veterinarian( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Victoria.html b/Docs/types/Victoria.html new file mode 100644 index 0000000..94fe56f --- /dev/null +++ b/Docs/types/Victoria.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - Victoria + + +

Back to Server.Engines.Quests.Doom

+

Victoria : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Victoria()
+ (ctor) Victoria( Serial serial )
+ SummoningAltar Altar( get; )
+ bool ClickTitle( get; )
+ bool DisallowAllMoves( get; )
+ bool IsActiveVendor( get; )
+ int TalkNumber( get; )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ViewEqTarget.html b/Docs/types/ViewEqTarget.html new file mode 100644 index 0000000..abdfe3f --- /dev/null +++ b/Docs/types/ViewEqTarget.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ViewEqTarget + + +

Back to Server.Commands

+

(CommandHandlers) - ViewEqTarget : Target

+

Nested Types: EquipMenu

+ (static) ItemListEntry[] GetEquip( Mobile m )
+ (ctor) ViewEqTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/ViewHousesGump.html b/Docs/types/ViewHousesGump.html new file mode 100644 index 0000000..33e83df --- /dev/null +++ b/Docs/types/ViewHousesGump.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - ViewHousesGump + + +

Back to Server.Gumps

+

ViewHousesGump : Gump

+

Nested Types: HouseComparer

+ (static) List<BaseHouse> GetHouses( Mobile owner )
+ (static) void Initialize()
+ (static) void ViewHouses_OnCommand( CommandEventArgs e )
+ (static) void ViewHouses_OnTarget( Mobile from, object targeted )
+ (ctor) ViewHousesGump( Mobile from, List<BaseHouse> list, BaseHouse sel )
+ void AddBlackAlpha( int x, int y, int width, int height )
+ string Center( string text )
+ string Color( string text, int color )
+ object FindHouseName( BaseHouse house )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ string Right( string text )
+ + diff --git a/Docs/types/VikingSword.html b/Docs/types/VikingSword.html new file mode 100644 index 0000000..462ac31 --- /dev/null +++ b/Docs/types/VikingSword.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - VikingSword + + +

Back to Server.Items

+

VikingSword : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) VikingSword()
+ (ctor) VikingSword( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VileBlade.html b/Docs/types/VileBlade.html new file mode 100644 index 0000000..395a8fe --- /dev/null +++ b/Docs/types/VileBlade.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VileBlade + + +

Back to Server.Ethics.Evil

+

VileBlade : Power

+ (ctor) VileBlade()
+ virtual void BeginInvoke( Player from )
+ + diff --git a/Docs/types/VillaDeed.html b/Docs/types/VillaDeed.html new file mode 100644 index 0000000..ccdf05b --- /dev/null +++ b/Docs/types/VillaDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - VillaDeed + + +

Back to Server.Multis.Deeds

+

VillaDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) VillaDeed()
+ (ctor) VillaDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Vines.html b/Docs/types/Vines.html new file mode 100644 index 0000000..e7d0251 --- /dev/null +++ b/Docs/types/Vines.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Vines + + +

Back to Server.Items

+

Vines : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Vines()
+ (ctor) Vines( int v )
+ (ctor) Vines( Serial serial )
+ bool ForceShowProperties( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VioletCourage.html b/Docs/types/VioletCourage.html new file mode 100644 index 0000000..b538deb --- /dev/null +++ b/Docs/types/VioletCourage.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - VioletCourage + + +

Back to Server.Items

+

VioletCourage : FemalePlateChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) VioletCourage()
+ (ctor) VioletCourage( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VioletRibbedFlask.html b/Docs/types/VioletRibbedFlask.html new file mode 100644 index 0000000..292b97e --- /dev/null +++ b/Docs/types/VioletRibbedFlask.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VioletRibbedFlask + + +

Back to Server.Items

+

VioletRibbedFlask : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) VioletRibbedFlask()
+ (ctor) VioletRibbedFlask( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VirtualMount.html b/Docs/types/VirtualMount.html new file mode 100644 index 0000000..b15492b --- /dev/null +++ b/Docs/types/VirtualMount.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - VirtualMount + + +

Back to Server.Mobiles

+

(Neira) - VirtualMount : IMount

+ (ctor) VirtualMount( VirtualMountItem item )
+ Mobile Rider( get; set; )
+ virtual void OnRiderDamaged( int amount, Mobile from, bool willKill )
+ + diff --git a/Docs/types/VirtualMountItem.html b/Docs/types/VirtualMountItem.html new file mode 100644 index 0000000..23cd3a2 --- /dev/null +++ b/Docs/types/VirtualMountItem.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - VirtualMountItem + + +

Back to Server.Mobiles

+

(Neira) - VirtualMountItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IMountItem

+ (ctor) VirtualMountItem( Serial serial )
+ (ctor) VirtualMountItem( Mobile mob )
+ IMount Mount( get; )
+ Mobile Rider( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VirtueBook.html b/Docs/types/VirtueBook.html new file mode 100644 index 0000000..3f2131e --- /dev/null +++ b/Docs/types/VirtueBook.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - VirtueBook + + +

Back to Server.Items

+

VirtueBook : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) VirtueBook()
+ (ctor) VirtueBook( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VirtueGump.html b/Docs/types/VirtueGump.html new file mode 100644 index 0000000..24de009 --- /dev/null +++ b/Docs/types/VirtueGump.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - VirtueGump + + +

Back to Server

+

VirtueGump : Gump

+

Nested Types: InternalEntry

+ (static) void EventSink_VirtueGumpRequest( VirtueGumpRequestEventArgs e )
+ (static) void EventSink_VirtueItemRequest( VirtueItemRequestEventArgs e )
+ (static) void EventSink_VirtueMacroRequest( VirtueMacroRequestEventArgs e )
+ (static) void Initialize()
+ (static) void Register( int gumpID, OnVirtueUsed callback )
+ (ctor) VirtueGump( Mobile beholder, Mobile beheld )
+ int GetHueFor( int index )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/VirtueGumpRequestEventArgs.html b/Docs/types/VirtueGumpRequestEventArgs.html new file mode 100644 index 0000000..fded2f0 --- /dev/null +++ b/Docs/types/VirtueGumpRequestEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - VirtueGumpRequestEventArgs + + +

Back to Server

+

VirtueGumpRequestEventArgs : EventArgs

+ (ctor) VirtueGumpRequestEventArgs( Mobile beholder, Mobile beheld )
+ Mobile Beheld( get; )
+ Mobile Beholder( get; )
+ + diff --git a/Docs/types/VirtueGumpRequestEventHandler.html b/Docs/types/VirtueGumpRequestEventHandler.html new file mode 100644 index 0000000..aedd43b --- /dev/null +++ b/Docs/types/VirtueGumpRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VirtueGumpRequestEventHandler + + +

Back to Server

+

VirtueGumpRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) VirtueGumpRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( VirtueGumpRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( VirtueGumpRequestEventArgs e )
+ + diff --git a/Docs/types/VirtueHelper.html b/Docs/types/VirtueHelper.html new file mode 100644 index 0000000..bc776f0 --- /dev/null +++ b/Docs/types/VirtueHelper.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - VirtueHelper + + +

Back to Server

+

VirtueHelper

+ (static) bool Atrophy( Mobile from, VirtueName virtue )
+ (static) bool Atrophy( Mobile from, VirtueName virtue, int amount )
+ (static) bool Award( Mobile from, VirtueName virtue, int amount, ref bool gainedPath )
+ (static) VirtueLevel GetLevel( Mobile from, VirtueName virtue )
+ (static) int GetMaxAmount( VirtueName virtue )
+ (static) bool HasAny( Mobile from, VirtueName virtue )
+ (static) bool IsFollower( Mobile from, VirtueName virtue )
+ (static) bool IsHighestPath( Mobile from, VirtueName virtue )
+ (static) bool IsKnight( Mobile from, VirtueName virtue )
+ (static) bool IsSeeker( Mobile from, VirtueName virtue )
+ (ctor) VirtueHelper()
+ + diff --git a/Docs/types/VirtueInfo.html b/Docs/types/VirtueInfo.html new file mode 100644 index 0000000..5c94dce --- /dev/null +++ b/Docs/types/VirtueInfo.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - VirtueInfo + + +

Back to Server

+

VirtueInfo

+ (static) void Serialize( GenericWriter writer, VirtueInfo info )
+ (ctor) VirtueInfo()
+ (ctor) VirtueInfo( GenericReader reader )
+ int Compassion( get; set; )
+ int Honesty( get; set; )
+ int Honor( get; set; )
+ int Humility( get; set; )
+ int Justice( get; set; )
+ int Sacrifice( get; set; )
+ int Spirituality( get; set; )
+ int Valor( get; set; )
+ int[] Values( get; )
+ int GetValue( int index )
+ void SetValue( int index, int value )
+ virtual string ToString()
+ + diff --git a/Docs/types/VirtueInfoGump.html b/Docs/types/VirtueInfoGump.html new file mode 100644 index 0000000..ec48c9e --- /dev/null +++ b/Docs/types/VirtueInfoGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - VirtueInfoGump + + +

Back to Server

+

VirtueInfoGump : Gump

+ (ctor) VirtueInfoGump( Mobile beholder, VirtueName virtue, int description )
+ (ctor) VirtueInfoGump( Mobile beholder, VirtueName virtue, int description, string webPage )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/VirtueItemRequestEventArgs.html b/Docs/types/VirtueItemRequestEventArgs.html new file mode 100644 index 0000000..587383e --- /dev/null +++ b/Docs/types/VirtueItemRequestEventArgs.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VirtueItemRequestEventArgs + + +

Back to Server

+

VirtueItemRequestEventArgs : EventArgs

+ (ctor) VirtueItemRequestEventArgs( Mobile beholder, Mobile beheld, int gumpID )
+ Mobile Beheld( get; )
+ Mobile Beholder( get; )
+ int GumpID( get; )
+ + diff --git a/Docs/types/VirtueItemRequestEventHandler.html b/Docs/types/VirtueItemRequestEventHandler.html new file mode 100644 index 0000000..b6c7c04 --- /dev/null +++ b/Docs/types/VirtueItemRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VirtueItemRequestEventHandler + + +

Back to Server

+

VirtueItemRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) VirtueItemRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( VirtueItemRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( VirtueItemRequestEventArgs e )
+ + diff --git a/Docs/types/VirtueLevel.html b/Docs/types/VirtueLevel.html new file mode 100644 index 0000000..3df6b88 --- /dev/null +++ b/Docs/types/VirtueLevel.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VirtueLevel + + +

Back to Server

+

VirtueLevel (Enum)

+ None = 0,
+ Seeker = 1,
+ Follower = 2,
+ Knight = 3
+ + diff --git a/Docs/types/VirtueMacroRequestEventArgs.html b/Docs/types/VirtueMacroRequestEventArgs.html new file mode 100644 index 0000000..dab43de --- /dev/null +++ b/Docs/types/VirtueMacroRequestEventArgs.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - VirtueMacroRequestEventArgs + + +

Back to Server

+

VirtueMacroRequestEventArgs : EventArgs

+ (ctor) VirtueMacroRequestEventArgs( Mobile mobile, int virtueID )
+ Mobile Mobile( get; )
+ int VirtueID( get; )
+ + diff --git a/Docs/types/VirtueMacroRequestEventHandler.html b/Docs/types/VirtueMacroRequestEventHandler.html new file mode 100644 index 0000000..7634f33 --- /dev/null +++ b/Docs/types/VirtueMacroRequestEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - VirtueMacroRequestEventHandler + + +

Back to Server

+

VirtueMacroRequestEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) VirtueMacroRequestEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( VirtueMacroRequestEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( VirtueMacroRequestEventArgs e )
+ + diff --git a/Docs/types/VirtueName.html b/Docs/types/VirtueName.html new file mode 100644 index 0000000..a904001 --- /dev/null +++ b/Docs/types/VirtueName.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - VirtueName + + +

Back to Server

+

VirtueName (Enum)

+ Humility = 0,
+ Sacrifice = 1,
+ Compassion = 2,
+ Spirituality = 3,
+ Valor = 4,
+ Honor = 5,
+ Justice = 6,
+ Honesty = 7
+ + diff --git a/Docs/types/VirtueStatusGump.html b/Docs/types/VirtueStatusGump.html new file mode 100644 index 0000000..f9a6db5 --- /dev/null +++ b/Docs/types/VirtueStatusGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VirtueStatusGump + + +

Back to Server

+

VirtueStatusGump : Gump

+ (ctor) VirtueStatusGump( Mobile beholder )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/VisTarget.html b/Docs/types/VisTarget.html new file mode 100644 index 0000000..4b54b58 --- /dev/null +++ b/Docs/types/VisTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VisTarget + + +

Back to Server.Commands

+

(VisibilityList) - VisTarget : Target

+ (ctor) VisTarget()
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/VisibilityList.html b/Docs/types/VisibilityList.html new file mode 100644 index 0000000..a63c81a --- /dev/null +++ b/Docs/types/VisibilityList.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - VisibilityList + + +

Back to Server.Commands

+

VisibilityList

+

Nested Types: VisTarget

+ (static) void Initialize()
+ (static) void OnLogin( LoginEventArgs e )
+ (static) void Vis_OnCommand( CommandEventArgs e )
+ (static) void VisClear_OnCommand( CommandEventArgs e )
+ (static) void VisList_OnCommand( CommandEventArgs e )
+ (ctor) VisibilityList()
+ + diff --git a/Docs/types/VisibleDamageType.html b/Docs/types/VisibleDamageType.html new file mode 100644 index 0000000..607b226 --- /dev/null +++ b/Docs/types/VisibleDamageType.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - VisibleDamageType + + +

Back to Server

+

VisibleDamageType (Enum)

+ None = 0,
+ Related = 1,
+ Everyone = 2
+ + diff --git a/Docs/types/VoiceOfTheFallenKing.html b/Docs/types/VoiceOfTheFallenKing.html new file mode 100644 index 0000000..6f4713a --- /dev/null +++ b/Docs/types/VoiceOfTheFallenKing.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - VoiceOfTheFallenKing + + +

Back to Server.Items

+

VoiceOfTheFallenKing : LeatherGorget, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) VoiceOfTheFallenKing()
+ (ctor) VoiceOfTheFallenKing( Serial serial )
+ int ArtifactRarity( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VorpalBunny.html b/Docs/types/VorpalBunny.html new file mode 100644 index 0000000..ae5dc33 --- /dev/null +++ b/Docs/types/VorpalBunny.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - VorpalBunny + + +

Back to Server.Mobiles

+

VorpalBunny : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+

Nested Types: BunnyHole

+ (ctor) VorpalBunny()
+ (ctor) VorpalBunny( Serial serial )
+ bool BardImmune( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void BeginTunnel()
+ virtual void DelayBeginTunnel()
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VoteGump.html b/Docs/types/VoteGump.html new file mode 100644 index 0000000..38bd31f --- /dev/null +++ b/Docs/types/VoteGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - VoteGump + + +

Back to Server.Factions

+

VoteGump : FactionGump

+ (ctor) VoteGump( PlayerMobile from, Election election )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/Voter.html b/Docs/types/Voter.html new file mode 100644 index 0000000..2bff777 --- /dev/null +++ b/Docs/types/Voter.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Voter + + +

Back to Server.Factions

+

Voter

+ (ctor) Voter( Mobile from, Mobile candidate )
+ (ctor) Voter( GenericReader reader, Mobile candidate )
+ IPAddress Address( get; )
+ Mobile Candidate( get; )
+ Mobile From( get; )
+ DateTime Time( get; )
+ object[] AcquireFields()
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/VultureHelm.html b/Docs/types/VultureHelm.html new file mode 100644 index 0000000..2334d60 --- /dev/null +++ b/Docs/types/VultureHelm.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - VultureHelm + + +

Back to Server.Items

+

VultureHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) VultureHelm()
+ (ctor) VultureHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WailingBanshee.html b/Docs/types/WailingBanshee.html new file mode 100644 index 0000000..f4ca565 --- /dev/null +++ b/Docs/types/WailingBanshee.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WailingBanshee + + +

Back to Server.Mobiles

+

WailingBanshee : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) WailingBanshee()
+ (ctor) WailingBanshee( Serial serial )
+ bool BleedImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Waiter.html b/Docs/types/Waiter.html new file mode 100644 index 0000000..c35e9a0 --- /dev/null +++ b/Docs/types/Waiter.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Waiter + + +

Back to Server.Mobiles

+

Waiter : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Waiter()
+ (ctor) Waiter( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Wakizashi.html b/Docs/types/Wakizashi.html new file mode 100644 index 0000000..9511a37 --- /dev/null +++ b/Docs/types/Wakizashi.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Wakizashi + + +

Back to Server.Items

+

Wakizashi : BaseSword, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Wakizashi()
+ (ctor) Wakizashi( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallBanner.html b/Docs/types/WallBanner.html new file mode 100644 index 0000000..ddf5dde --- /dev/null +++ b/Docs/types/WallBanner.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WallBanner + + +

Back to Server.Items

+

WallBanner : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IRewardItem

+ (ctor) WallBanner( Serial serial )
+ (ctor) WallBanner( int bannerID )
+ BaseAddonDeed Deed( get; )
+ bool East( get; set; )
+ bool IsRewardItem( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallBannerComponent.html b/Docs/types/WallBannerComponent.html new file mode 100644 index 0000000..123b53d --- /dev/null +++ b/Docs/types/WallBannerComponent.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WallBannerComponent + + +

Back to Server.Items

+

WallBannerComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IDyable

+ (ctor) WallBannerComponent( Serial serial )
+ (ctor) WallBannerComponent( int itemID )
+ bool East( get; )
+ bool NeedsWall( get; )
+ Point3D WallPosition( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallBannerDeed.html b/Docs/types/WallBannerDeed.html new file mode 100644 index 0000000..cbecf82 --- /dev/null +++ b/Docs/types/WallBannerDeed.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - WallBannerDeed + + +

Back to Server.Items

+

WallBannerDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IRewardItem

+

Nested Types: InternalGump

+ (ctor) WallBannerDeed()
+ (ctor) WallBannerDeed( Serial serial )
+ BaseAddon Addon( get; )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ void Use( Mobile m, int bannerID )
+ + diff --git a/Docs/types/WallBlood.html b/Docs/types/WallBlood.html new file mode 100644 index 0000000..edaf659 --- /dev/null +++ b/Docs/types/WallBlood.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WallBlood + + +

Back to Server.Items

+

WallBlood : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WallBlood()
+ (ctor) WallBlood( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallOfStoneScroll.html b/Docs/types/WallOfStoneScroll.html new file mode 100644 index 0000000..9f47b3e --- /dev/null +++ b/Docs/types/WallOfStoneScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WallOfStoneScroll + + +

Back to Server.Items

+

WallOfStoneScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) WallOfStoneScroll()
+ (ctor) WallOfStoneScroll( int amount )
+ (ctor) WallOfStoneScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallOfStoneSpell.html b/Docs/types/WallOfStoneSpell.html new file mode 100644 index 0000000..c3531f1 --- /dev/null +++ b/Docs/types/WallOfStoneSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WallOfStoneSpell + + +

Back to Server.Spells.Third

+

WallOfStoneSpell : MagerySpell, ISpell

+

Nested Types: InternalItem, InternalTarget

+ (ctor) WallOfStoneSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( IPoint3D p )
+ + diff --git a/Docs/types/WallSconce.html b/Docs/types/WallSconce.html new file mode 100644 index 0000000..d0119af --- /dev/null +++ b/Docs/types/WallSconce.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WallSconce + + +

Back to Server.Items

+

WallSconce : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WallSconce()
+ (ctor) WallSconce( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallTorch.html b/Docs/types/WallTorch.html new file mode 100644 index 0000000..67a7bcc --- /dev/null +++ b/Docs/types/WallTorch.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WallTorch + + +

Back to Server.Items

+

WallTorch : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WallTorch()
+ (ctor) WallTorch( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallTorchAddon.html b/Docs/types/WallTorchAddon.html new file mode 100644 index 0000000..5004904 --- /dev/null +++ b/Docs/types/WallTorchAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WallTorchAddon + + +

Back to Server.Items

+

WallTorchAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) WallTorchAddon()
+ (ctor) WallTorchAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallTorchComponent.html b/Docs/types/WallTorchComponent.html new file mode 100644 index 0000000..8ecc5c6 --- /dev/null +++ b/Docs/types/WallTorchComponent.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WallTorchComponent + + +

Back to Server.Items

+

WallTorchComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) WallTorchComponent()
+ (ctor) WallTorchComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WallTorchDeed.html b/Docs/types/WallTorchDeed.html new file mode 100644 index 0000000..1f9d738 --- /dev/null +++ b/Docs/types/WallTorchDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WallTorchDeed + + +

Back to Server.Items

+

WallTorchDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WallTorchDeed()
+ (ctor) WallTorchDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Walrus.html b/Docs/types/Walrus.html new file mode 100644 index 0000000..b77383c --- /dev/null +++ b/Docs/types/Walrus.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Walrus + + +

Back to Server.Mobiles

+

Walrus : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Walrus()
+ (ctor) Walrus( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WandEffect.html b/Docs/types/WandEffect.html new file mode 100644 index 0000000..65a867b --- /dev/null +++ b/Docs/types/WandEffect.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - WandEffect + + +

Back to Server.Items

+

WandEffect (Enum)

+ Clumsiness = 0,
+ Identification = 1,
+ Healing = 2,
+ Feeblemindedness = 3,
+ Weakness = 4,
+ MagicArrow = 5,
+ Harming = 6,
+ Fireball = 7,
+ GreaterHealing = 8,
+ Lightning = 9,
+ ManaDraining = 10
+ + diff --git a/Docs/types/WandTarget.html b/Docs/types/WandTarget.html new file mode 100644 index 0000000..dcdef02 --- /dev/null +++ b/Docs/types/WandTarget.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - WandTarget + + +

Back to Server.Targeting

+

WandTarget : Target

+ (static) int GetOffset( Mobile caster )
+ (ctor) WandTarget( BaseWand item )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/Wanderer.html b/Docs/types/Wanderer.html new file mode 100644 index 0000000..8df470a --- /dev/null +++ b/Docs/types/Wanderer.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - Wanderer + + +

Back to Server.Mobiles

+

Wanderer : Mobile, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalTimer

+ (ctor) Wanderer()
+ (ctor) Wanderer( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDelete()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WandererOfTheVoid.html b/Docs/types/WandererOfTheVoid.html new file mode 100644 index 0000000..cb8f667 --- /dev/null +++ b/Docs/types/WandererOfTheVoid.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WandererOfTheVoid + + +

Back to Server.Mobiles

+

WandererOfTheVoid : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) WandererOfTheVoid()
+ (ctor) WandererOfTheVoid( Serial serial )
+ bool BleedImmune( get; )
+ Poison PoisonImmune( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WanderingHealer.html b/Docs/types/WanderingHealer.html new file mode 100644 index 0000000..9a4b626 --- /dev/null +++ b/Docs/types/WanderingHealer.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WanderingHealer + + +

Back to Server.Mobiles

+

WanderingHealer : BaseHealer, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) WanderingHealer()
+ (ctor) WanderingHealer( Serial serial )
+ bool CanTeach( get; )
+ bool ClickTitle( get; )
+ virtual bool CheckResurrect( Mobile m )
+ virtual bool CheckTeach( SkillName skill, Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarAxe.html b/Docs/types/WarAxe.html new file mode 100644 index 0000000..905122a --- /dev/null +++ b/Docs/types/WarAxe.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - WarAxe + + +

Back to Server.Items

+

WarAxe : BaseAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) WarAxe()
+ (ctor) WarAxe( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ HarvestSystem HarvestSystem( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarCleaver.html b/Docs/types/WarCleaver.html new file mode 100644 index 0000000..5addaf9 --- /dev/null +++ b/Docs/types/WarCleaver.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - WarCleaver + + +

Back to Server.Items

+

WarCleaver : BaseKnife, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: RaedsGlory

+ (ctor) WarCleaver()
+ (ctor) WarCleaver( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ SkillName DefSkill( get; )
+ WeaponType DefType( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarDeclaration.html b/Docs/types/WarDeclaration.html new file mode 100644 index 0000000..d00fc31 --- /dev/null +++ b/Docs/types/WarDeclaration.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - WarDeclaration + + +

Back to Server.Guilds

+

WarDeclaration

+ (ctor) WarDeclaration( GenericReader reader )
+ (ctor) WarDeclaration( Guild g, Guild opponent, int maxKills, TimeSpan warLength, bool warRequester )
+ Guild Guild( get; )
+ int Kills( get; set; )
+ int MaxKills( get; set; )
+ Guild Opponent( get; )
+ WarStatus Status( get; )
+ DateTime WarBeginning( get; set; )
+ TimeSpan WarLength( get; set; )
+ bool WarRequester( get; set; )
+ void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarDeclarationGump.html b/Docs/types/WarDeclarationGump.html new file mode 100644 index 0000000..66d69d5 --- /dev/null +++ b/Docs/types/WarDeclarationGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - WarDeclarationGump + + +

Back to Server.Guilds

+

WarDeclarationGump : BaseGuildGump

+ (ctor) WarDeclarationGump( PlayerMobile pm, Guild g, Guild otherGuild )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/WarFork.html b/Docs/types/WarFork.html new file mode 100644 index 0000000..ca4b72f --- /dev/null +++ b/Docs/types/WarFork.html @@ -0,0 +1,30 @@ + + + RunUO Documentation - Class Overview - WarFork + + +

Back to Server.Items

+

WarFork : BaseSpear, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: TheTaskmaster

+ (ctor) WarFork()
+ (ctor) WarFork( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefHitSound( get; )
+ int DefMissSound( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarHammer.html b/Docs/types/WarHammer.html new file mode 100644 index 0000000..6448fc3 --- /dev/null +++ b/Docs/types/WarHammer.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - WarHammer + + +

Back to Server.Items

+

WarHammer : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: TitansHammer

+ (ctor) WarHammer()
+ (ctor) WarHammer( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarMace.html b/Docs/types/WarMace.html new file mode 100644 index 0000000..7f15c4f --- /dev/null +++ b/Docs/types/WarMace.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - WarMace + + +

Back to Server.Items

+

WarMace : BaseBashing, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: ArcticDeathDealer, BoneCrusher

+ (ctor) WarMace()
+ (ctor) WarMace( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarStatus.html b/Docs/types/WarStatus.html new file mode 100644 index 0000000..ca0c5b8 --- /dev/null +++ b/Docs/types/WarStatus.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WarStatus + + +

Back to Server.Guilds

+

WarStatus (Enum)

+ Win = 0,
+ Lose = 1,
+ Draw = 2,
+ Pending = 3,
+ InProgress = -1
+ + diff --git a/Docs/types/WarTimer.html b/Docs/types/WarTimer.html new file mode 100644 index 0000000..139a727 --- /dev/null +++ b/Docs/types/WarTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - WarTimer + + +

Back to Server.Guilds

+

WarTimer : Timer

+ (static) void Initialize()
+ (ctor) WarTimer()
+ virtual void OnTick()
+ + diff --git a/Docs/types/Waraji.html b/Docs/types/Waraji.html new file mode 100644 index 0000000..6d0095a --- /dev/null +++ b/Docs/types/Waraji.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Waraji + + +

Back to Server.Items

+

Waraji : BaseShoes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) Waraji()
+ (ctor) Waraji( int hue )
+ (ctor) Waraji( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarmodeTimer.html b/Docs/types/WarmodeTimer.html new file mode 100644 index 0000000..5ff7d97 --- /dev/null +++ b/Docs/types/WarmodeTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - WarmodeTimer + + +

Back to Server

+

(Mobile) - WarmodeTimer : Timer

+ (ctor) WarmodeTimer( Mobile m, bool value )
+ bool Value( get; set; )
+ virtual void OnTick()
+ + diff --git a/Docs/types/WarnEntry.html b/Docs/types/WarnEntry.html new file mode 100644 index 0000000..32d0c67 --- /dev/null +++ b/Docs/types/WarnEntry.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - WarnEntry + + +

Back to Server.Mobiles

+

(WarnTimer) - WarnEntry

+ (ctor) WarnEntry( Point3D p, Map map, string name )
+ + diff --git a/Docs/types/WarnTimer.html b/Docs/types/WarnTimer.html new file mode 100644 index 0000000..2c51f53 --- /dev/null +++ b/Docs/types/WarnTimer.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WarnTimer + + +

Back to Server.Mobiles

+

(Spawner) - WarnTimer : Timer

+

Nested Types: WarnEntry

+ (ctor) WarnTimer()
+ void Add( Point3D p, Map map, string name )
+ virtual void OnTick()
+ + diff --git a/Docs/types/WarningGump.html b/Docs/types/WarningGump.html new file mode 100644 index 0000000..5ad83f9 --- /dev/null +++ b/Docs/types/WarningGump.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - WarningGump + + +

Back to Server.Gumps

+

WarningGump : Gump

+ (ctor) WarningGump( int header, int headerColor, object content, int contentColor, int width, int height, WarningGumpCallback callback, object state )
+ (ctor) WarningGump( int header, int headerColor, object content, int contentColor, int width, int height, WarningGumpCallback callback, object state, bool cancelButton )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/WarningGumpCallback.html b/Docs/types/WarningGumpCallback.html new file mode 100644 index 0000000..7fd51b9 --- /dev/null +++ b/Docs/types/WarningGumpCallback.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WarningGumpCallback + + +

Back to Server.Gumps

+

WarningGumpCallback : MulticastDelegate, ICloneable, ISerializable

+ (ctor) WarningGumpCallback( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( Mobile from, bool okay, object state, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( Mobile from, bool okay, object state )
+ + diff --git a/Docs/types/WarningItem.html b/Docs/types/WarningItem.html new file mode 100644 index 0000000..84b7737 --- /dev/null +++ b/Docs/types/WarningItem.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - WarningItem + + +

Back to Server.Items

+

WarningItem : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Derived Types: HintItem

+ (ctor) WarningItem( Serial serial )
+ (ctor) WarningItem( int itemID, int range, int warning )
+ (ctor) WarningItem( int itemID, int range, string warning )
+ bool HandlesOnMovement( get; )
+ int NeighborRange( get; )
+ bool OnlyToTriggerer( get; )
+ int Range( get; set; )
+ TimeSpan ResetDelay( get; set; )
+ int WarningNumber( get; set; )
+ string WarningString( get; set; )
+ virtual void Broadcast( Mobile triggerer )
+ virtual void Deserialize( GenericReader reader )
+ void InternalCallback()
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void SendMessage( Mobile triggerer, bool onlyToTriggerer, string messageString, int messageNumber )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarriorGuard.html b/Docs/types/WarriorGuard.html new file mode 100644 index 0000000..c44ded8 --- /dev/null +++ b/Docs/types/WarriorGuard.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - WarriorGuard + + +

Back to Server.Mobiles

+

WarriorGuard : BaseGuard, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: AttackTimer, AvengeTimer, IdleTimer

+ (ctor) WarriorGuard()
+ (ctor) WarriorGuard( Serial serial )
+ (ctor) WarriorGuard( Mobile target )
+ Mobile Focus( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnAfterDelete()
+ virtual bool OnBeforeDeath()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarriorGuildmaster.html b/Docs/types/WarriorGuildmaster.html new file mode 100644 index 0000000..ae96c5b --- /dev/null +++ b/Docs/types/WarriorGuildmaster.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WarriorGuildmaster + + +

Back to Server.Mobiles

+

WarriorGuildmaster : BaseGuildmaster, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) WarriorGuildmaster()
+ (ctor) WarriorGuildmaster( Serial serial )
+ NpcGuild NpcGuild( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarriorStatueEastAddon.html b/Docs/types/WarriorStatueEastAddon.html new file mode 100644 index 0000000..2ec52fe --- /dev/null +++ b/Docs/types/WarriorStatueEastAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WarriorStatueEastAddon + + +

Back to Server.Items

+

WarriorStatueEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) WarriorStatueEastAddon()
+ (ctor) WarriorStatueEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarriorStatueEastDeed.html b/Docs/types/WarriorStatueEastDeed.html new file mode 100644 index 0000000..1d44ca5 --- /dev/null +++ b/Docs/types/WarriorStatueEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WarriorStatueEastDeed + + +

Back to Server.Items

+

WarriorStatueEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WarriorStatueEastDeed()
+ (ctor) WarriorStatueEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarriorStatueSouthAddon.html b/Docs/types/WarriorStatueSouthAddon.html new file mode 100644 index 0000000..11d364a --- /dev/null +++ b/Docs/types/WarriorStatueSouthAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WarriorStatueSouthAddon + + +

Back to Server.Items

+

WarriorStatueSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) WarriorStatueSouthAddon()
+ (ctor) WarriorStatueSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WarriorStatueSouthDeed.html b/Docs/types/WarriorStatueSouthDeed.html new file mode 100644 index 0000000..d9b633a --- /dev/null +++ b/Docs/types/WarriorStatueSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WarriorStatueSouthDeed + + +

Back to Server.Items

+

WarriorStatueSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WarriorStatueSouthDeed()
+ (ctor) WarriorStatueSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Wasabi.html b/Docs/types/Wasabi.html new file mode 100644 index 0000000..7563618 --- /dev/null +++ b/Docs/types/Wasabi.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Wasabi + + +

Back to Server.Items

+

Wasabi : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Wasabi()
+ (ctor) Wasabi( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WasabiClumps.html b/Docs/types/WasabiClumps.html new file mode 100644 index 0000000..3d8ecb1 --- /dev/null +++ b/Docs/types/WasabiClumps.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WasabiClumps + + +

Back to Server.Items

+

WasabiClumps : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WasabiClumps()
+ (ctor) WasabiClumps( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterBarrel.html b/Docs/types/WaterBarrel.html new file mode 100644 index 0000000..e8556ad --- /dev/null +++ b/Docs/types/WaterBarrel.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - WaterBarrel + + +

Back to Server.Items

+

WaterBarrel : BaseWaterContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHasQuantity

+ (ctor) WaterBarrel()
+ (ctor) WaterBarrel( Serial serial )
+ (ctor) WaterBarrel( bool filled )
+ int fullItem_ID( get; )
+ int LabelNumber( get; )
+ int MaxQuantity( get; )
+ int voidItem_ID( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterElemental.html b/Docs/types/WaterElemental.html new file mode 100644 index 0000000..0072939 --- /dev/null +++ b/Docs/types/WaterElemental.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - WaterElemental + + +

Back to Server.Mobiles

+

WaterElemental : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) WaterElemental()
+ (ctor) WaterElemental( Serial serial )
+ bool BleedImmune( get; )
+ double DispelDifficulty( get; )
+ double DispelFocus( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterElementalSpell.html b/Docs/types/WaterElementalSpell.html new file mode 100644 index 0000000..fb9b1ef --- /dev/null +++ b/Docs/types/WaterElementalSpell.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WaterElementalSpell + + +

Back to Server.Spells.Eighth

+

WaterElementalSpell : MagerySpell, ISpell

+ (ctor) WaterElementalSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual bool CheckCast()
+ virtual void OnCast()
+ + diff --git a/Docs/types/WaterTile.html b/Docs/types/WaterTile.html new file mode 100644 index 0000000..18493b9 --- /dev/null +++ b/Docs/types/WaterTile.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WaterTile + + +

Back to Server.Items

+

WaterTile : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WaterTile()
+ (ctor) WaterTile( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterTroughEastAddon.html b/Docs/types/WaterTroughEastAddon.html new file mode 100644 index 0000000..cad07c9 --- /dev/null +++ b/Docs/types/WaterTroughEastAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WaterTroughEastAddon + + +

Back to Server.Items

+

WaterTroughEastAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IWaterSource, IHasQuantity

+ (ctor) WaterTroughEastAddon()
+ (ctor) WaterTroughEastAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ int Quantity( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterTroughEastDeed.html b/Docs/types/WaterTroughEastDeed.html new file mode 100644 index 0000000..dcc8223 --- /dev/null +++ b/Docs/types/WaterTroughEastDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WaterTroughEastDeed + + +

Back to Server.Items

+

WaterTroughEastDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WaterTroughEastDeed()
+ (ctor) WaterTroughEastDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterTroughSouthAddon.html b/Docs/types/WaterTroughSouthAddon.html new file mode 100644 index 0000000..d7c11c0 --- /dev/null +++ b/Docs/types/WaterTroughSouthAddon.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WaterTroughSouthAddon + + +

Back to Server.Items

+

WaterTroughSouthAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon, IWaterSource, IHasQuantity

+ (ctor) WaterTroughSouthAddon()
+ (ctor) WaterTroughSouthAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ int Quantity( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterTroughSouthDeed.html b/Docs/types/WaterTroughSouthDeed.html new file mode 100644 index 0000000..03356e9 --- /dev/null +++ b/Docs/types/WaterTroughSouthDeed.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WaterTroughSouthDeed + + +

Back to Server.Items

+

WaterTroughSouthDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WaterTroughSouthDeed()
+ (ctor) WaterTroughSouthDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterVatEast.html b/Docs/types/WaterVatEast.html new file mode 100644 index 0000000..818471c --- /dev/null +++ b/Docs/types/WaterVatEast.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WaterVatEast + + +

Back to Server.Items

+

WaterVatEast : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) WaterVatEast()
+ (ctor) WaterVatEast( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WaterVatSouth.html b/Docs/types/WaterVatSouth.html new file mode 100644 index 0000000..ec0a64f --- /dev/null +++ b/Docs/types/WaterVatSouth.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WaterVatSouth + + +

Back to Server.Items

+

WaterVatSouth : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) WaterVatSouth()
+ (ctor) WaterVatSouth( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Watermelon.html b/Docs/types/Watermelon.html new file mode 100644 index 0000000..dd1b690 --- /dev/null +++ b/Docs/types/Watermelon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Watermelon + + +

Back to Server.Items

+

Watermelon : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Watermelon()
+ (ctor) Watermelon( int amount )
+ (ctor) Watermelon( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WayPoint.html b/Docs/types/WayPoint.html new file mode 100644 index 0000000..4d58cb0 --- /dev/null +++ b/Docs/types/WayPoint.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - WayPoint + + +

Back to Server.Items

+

WayPoint : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (static) void Initialize()
+ (static) void WayPointSeq_OnCommand( CommandEventArgs arg )
+ (ctor) WayPoint()
+ (ctor) WayPoint( WayPoint prev )
+ (ctor) WayPoint( Serial serial )
+ string DefaultName( get; )
+ WayPoint NextPoint( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnSingleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WayPointSeqTarget.html b/Docs/types/WayPointSeqTarget.html new file mode 100644 index 0000000..02f5a6d --- /dev/null +++ b/Docs/types/WayPointSeqTarget.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - WayPointSeqTarget + + +

Back to Server.Items

+

WayPointSeqTarget : Target

+ (ctor) WayPointSeqTarget( WayPoint last )
+ virtual void OnTarget( Mobile from, object targeted )
+ + diff --git a/Docs/types/WeakenScroll.html b/Docs/types/WeakenScroll.html new file mode 100644 index 0000000..15d4ff0 --- /dev/null +++ b/Docs/types/WeakenScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WeakenScroll + + +

Back to Server.Items

+

WeakenScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) WeakenScroll()
+ (ctor) WeakenScroll( int amount )
+ (ctor) WeakenScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WeakenSpell.html b/Docs/types/WeakenSpell.html new file mode 100644 index 0000000..0ee73ea --- /dev/null +++ b/Docs/types/WeakenSpell.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WeakenSpell + + +

Back to Server.Spells.First

+

WeakenSpell : MagerySpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) WeakenSpell( Mobile caster, Item scroll )
+ SpellCircle Circle( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/WeaknessWand.html b/Docs/types/WeaknessWand.html new file mode 100644 index 0000000..e3a97aa --- /dev/null +++ b/Docs/types/WeaknessWand.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WeaknessWand + + +

Back to Server.Items

+

WeaknessWand : BaseWand, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) WeaknessWand()
+ (ctor) WeaknessWand( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnWandUse( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WeaponAbility.html b/Docs/types/WeaponAbility.html new file mode 100644 index 0000000..87556c7 --- /dev/null +++ b/Docs/types/WeaponAbility.html @@ -0,0 +1,41 @@ + + + RunUO Documentation - Class Overview - WeaponAbility + + +

Back to Server.Items

+

WeaponAbility

+

Derived Types: ArmorIgnore, ArmorPierce, BleedAttack, Block, ConcussionBlow, CrushingBlow, DefenseMastery, Disarm, Dismount, Disrobe, DoubleShot, DoubleStrike, DualWield, Feint, FrenziedWhirlwind, InfectiousStrike, MortalStrike, MovingShot, NerveStrike, ParalyzingBlow, RidingSwipe, ShadowStrike, TalonStrike, WhirlwindAttack

+

Nested Types: WeaponAbilityContext, WeaponAbilityTimer

+ (static) WeaponAbility[] Abilities( get; )
+ (static) Hashtable Table( get; )
+ (static) void AddContext( Mobile m, WeaponAbilityContext context )
+ (static) void ClearCurrentAbility( Mobile m )
+ (static) void EventSink_SetAbility( SetAbilityEventArgs e )
+ (static) WeaponAbilityContext GetContext( Mobile m )
+ (static) WeaponAbility GetCurrentAbility( Mobile m )
+ (static) void Initialize()
+ (static) bool IsWeaponAbility( Mobile m, WeaponAbility a )
+ (static) void RemoveContext( Mobile m )
+ (static) void RemoveContext( Mobile m, WeaponAbilityContext context )
+ (static) bool SetCurrentAbility( Mobile m, WeaponAbility a )
+ (ctor) WeaponAbility()
+ int AccuracyBonus( get; )
+ int BaseMana( get; )
+ double DamageScalar( get; )
+ bool RequiresSE( get; )
+ bool ValidatesDuringHit( get; )
+ virtual int CalculateMana( Mobile from )
+ virtual bool CheckMana( Mobile from, bool consume )
+ virtual bool CheckSkills( Mobile from )
+ virtual bool CheckWeaponSkill( Mobile from )
+ virtual double GetRequiredSkill( Mobile from )
+ virtual double GetSkill( Mobile from, SkillName skillName )
+ virtual bool OnBeforeDamage( Mobile attacker, Mobile defender )
+ virtual bool OnBeforeSwing( Mobile attacker, Mobile defender )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ virtual void OnMiss( Mobile attacker, Mobile defender )
+ virtual bool RequiresTactics( Mobile from )
+ virtual bool Validate( Mobile from )
+ + diff --git a/Docs/types/WeaponAbilityContext.html b/Docs/types/WeaponAbilityContext.html new file mode 100644 index 0000000..c9e6abe --- /dev/null +++ b/Docs/types/WeaponAbilityContext.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - WeaponAbilityContext + + +

Back to Server.Items

+

(WeaponAbility) - WeaponAbilityContext

+ (ctor) WeaponAbilityContext( Timer timer )
+ Timer Timer( get; )
+ + diff --git a/Docs/types/WeaponAbilityTimer.html b/Docs/types/WeaponAbilityTimer.html new file mode 100644 index 0000000..7ee102e --- /dev/null +++ b/Docs/types/WeaponAbilityTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - WeaponAbilityTimer + + +

Back to Server.Items

+

(WeaponAbility) - WeaponAbilityTimer : Timer

+ (ctor) WeaponAbilityTimer( Mobile from )
+ virtual void OnTick()
+ + diff --git a/Docs/types/WeaponAccuracyLevel.html b/Docs/types/WeaponAccuracyLevel.html new file mode 100644 index 0000000..e5805f5 --- /dev/null +++ b/Docs/types/WeaponAccuracyLevel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WeaponAccuracyLevel + + +

Back to Server.Items

+

WeaponAccuracyLevel (Enum)

+ Regular = 0,
+ Accurate = 1,
+ Surpassingly = 2,
+ Eminently = 3,
+ Exceedingly = 4,
+ Supremely = 5
+ + diff --git a/Docs/types/WeaponAnimation.html b/Docs/types/WeaponAnimation.html new file mode 100644 index 0000000..8c976a1 --- /dev/null +++ b/Docs/types/WeaponAnimation.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - WeaponAnimation + + +

Back to Server.Items

+

WeaponAnimation (Enum)

+ Slash1H = 9,
+ Pierce1H = 10,
+ Bash1H = 11,
+ Bash2H = 12,
+ Slash2H = 13,
+ Pierce2H = 14,
+ ShootBow = 18,
+ ShootXBow = 19,
+ Wrestle = 31
+ + diff --git a/Docs/types/WeaponDamageLevel.html b/Docs/types/WeaponDamageLevel.html new file mode 100644 index 0000000..1cceeed --- /dev/null +++ b/Docs/types/WeaponDamageLevel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WeaponDamageLevel + + +

Back to Server.Items

+

WeaponDamageLevel (Enum)

+ Regular = 0,
+ Ruin = 1,
+ Might = 2,
+ Force = 3,
+ Power = 4,
+ Vanq = 5
+ + diff --git a/Docs/types/WeaponDurabilityLevel.html b/Docs/types/WeaponDurabilityLevel.html new file mode 100644 index 0000000..3f188af --- /dev/null +++ b/Docs/types/WeaponDurabilityLevel.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WeaponDurabilityLevel + + +

Back to Server.Items

+

WeaponDurabilityLevel (Enum)

+ Regular = 0,
+ Durable = 1,
+ Substantial = 2,
+ Massive = 3,
+ Fortified = 4,
+ Indestructible = 5
+ + diff --git a/Docs/types/WeaponEngravingTool.html b/Docs/types/WeaponEngravingTool.html new file mode 100644 index 0000000..799d78d --- /dev/null +++ b/Docs/types/WeaponEngravingTool.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - WeaponEngravingTool + + +

Back to Server.Items

+

WeaponEngravingTool : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IUsesRemaining, IRewardItem

+

Nested Types: ConfirmGump, InternalGump, TargetWeapon

+ (static) WeaponEngravingTool Find( Mobile from )
+ (ctor) WeaponEngravingTool()
+ (ctor) WeaponEngravingTool( Serial serial )
+ (ctor) WeaponEngravingTool( int uses )
+ bool IsRewardItem( get; set; )
+ int LabelNumber( get; )
+ bool ShowUsesRemaining( get; set; )
+ int UsesRemaining( get; set; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetProperties( ObjectPropertyList list )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Recharge( Mobile from, Mobile guildmaster )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WeaponQuality.html b/Docs/types/WeaponQuality.html new file mode 100644 index 0000000..669bff3 --- /dev/null +++ b/Docs/types/WeaponQuality.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - WeaponQuality + + +

Back to Server.Items

+

WeaponQuality (Enum)

+ Low = 0,
+ Regular = 1,
+ Exceptional = 2
+ + diff --git a/Docs/types/WeaponType.html b/Docs/types/WeaponType.html new file mode 100644 index 0000000..21cf55a --- /dev/null +++ b/Docs/types/WeaponType.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WeaponType + + +

Back to Server.Items

+

WeaponType (Enum)

+ Axe = 0,
+ Slashing = 1,
+ Staff = 2,
+ Bashing = 3,
+ Piercing = 4,
+ Polearm = 5,
+ Ranged = 6,
+ Fists = 7
+ + diff --git a/Docs/types/Weaponsmith.html b/Docs/types/Weaponsmith.html new file mode 100644 index 0000000..e8ef8fc --- /dev/null +++ b/Docs/types/Weaponsmith.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - Weaponsmith + + +

Back to Server.Mobiles

+

Weaponsmith : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Weaponsmith()
+ (ctor) Weaponsmith( Serial serial )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual Item CreateBulkOrder( Mobile from, bool fromContextMenu )
+ virtual void Deserialize( GenericReader reader )
+ virtual TimeSpan GetNextBulkOrder( Mobile from )
+ virtual int GetShoeHue()
+ virtual void InitOutfit()
+ virtual void InitSBInfo()
+ virtual bool IsValidBulkOrder( Item item )
+ virtual void OnSuccessfulBulkOrderReceive( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool SupportsBulkOrders( Mobile from )
+ + diff --git a/Docs/types/Weather.html b/Docs/types/Weather.html new file mode 100644 index 0000000..ad73741 --- /dev/null +++ b/Docs/types/Weather.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Weather + + +

Back to Server.Network

+

Weather : Packet

+ (ctor) Weather( int v1, int v2, int v3 )
+ + diff --git a/Docs/types/WeatherMap.html b/Docs/types/WeatherMap.html new file mode 100644 index 0000000..d508207 --- /dev/null +++ b/Docs/types/WeatherMap.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WeatherMap + + +

Back to Server.Misc

+

WeatherMap : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) WeatherMap()
+ (ctor) WeatherMap( Serial serial )
+ string DefaultName( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Weaver.html b/Docs/types/Weaver.html new file mode 100644 index 0000000..9b4f4b4 --- /dev/null +++ b/Docs/types/Weaver.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - Weaver + + +

Back to Server.Mobiles

+

Weaver : BaseVendor, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Weaver()
+ (ctor) Weaver( Serial serial )
+ NpcGuild NpcGuild( get; )
+ List<SBInfo> SBInfos( get; )
+ VendorShoeType ShoeType( get; )
+ virtual Item CreateBulkOrder( Mobile from, bool fromContextMenu )
+ virtual void Deserialize( GenericReader reader )
+ virtual TimeSpan GetNextBulkOrder( Mobile from )
+ virtual void InitSBInfo()
+ virtual bool IsValidBulkOrder( Item item )
+ virtual void OnSuccessfulBulkOrderReceive( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ virtual bool SupportsBulkOrders( Mobile from )
+ + diff --git a/Docs/types/Web.html b/Docs/types/Web.html new file mode 100644 index 0000000..2aece14 --- /dev/null +++ b/Docs/types/Web.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - Web + + +

Back to Server.Items

+

Web : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Web()
+ (ctor) Web( Serial serial )
+ (ctor) Web( int itemid )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WeightOverloading.html b/Docs/types/WeightOverloading.html new file mode 100644 index 0000000..e1c324f --- /dev/null +++ b/Docs/types/WeightOverloading.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WeightOverloading + + +

Back to Server.Misc

+

WeightOverloading

+ (static) DFAlgorithm DFA( get; set; )
+ (static) void EventSink_Movement( MovementEventArgs e )
+ (static) void FatigueOnDamage( Mobile m, int damage )
+ (static) int GetMaxWeight( Mobile m )
+ (static) int GetStamLoss( Mobile from, int overWeight, bool running )
+ (static) void Initialize()
+ (static) bool IsOverloaded( Mobile m )
+ (ctor) WeightOverloading()
+ + diff --git a/Docs/types/WelcomeTimer.html b/Docs/types/WelcomeTimer.html new file mode 100644 index 0000000..c4d294f --- /dev/null +++ b/Docs/types/WelcomeTimer.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - WelcomeTimer + + +

Back to Server.Misc

+

WelcomeTimer : Timer

+ (ctor) WelcomeTimer( Mobile m )
+ (ctor) WelcomeTimer( Mobile m, int count )
+ virtual void OnTick()
+ + diff --git a/Docs/types/WheatSheaf.html b/Docs/types/WheatSheaf.html new file mode 100644 index 0000000..30afd32 --- /dev/null +++ b/Docs/types/WheatSheaf.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WheatSheaf + + +

Back to Server.Items

+

WheatSheaf : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WheatSheaf()
+ (ctor) WheatSheaf( Serial serial )
+ (ctor) WheatSheaf( int amount )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void OnTarget( Mobile from, object obj )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhereExtension.html b/Docs/types/WhereExtension.html new file mode 100644 index 0000000..b097cdd --- /dev/null +++ b/Docs/types/WhereExtension.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WhereExtension + + +

Back to Server.Commands.Generic

+

WhereExtension : BaseExtension

+ (static) BaseExtension <.cctor>b__0()
+ (static) void Initialize()
+ (ctor) WhereExtension()
+ ObjectConditional Conditional( get; )
+ ExtensionInfo Info( get; )
+ virtual bool IsValid( object obj )
+ virtual void Optimize( Mobile from, Type baseType, ref AssemblyEmitter assembly )
+ virtual void Parse( Mobile from, string[] arguments, int offset, int size )
+ + diff --git a/Docs/types/Whip.html b/Docs/types/Whip.html new file mode 100644 index 0000000..45be86b --- /dev/null +++ b/Docs/types/Whip.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - Whip + + +

Back to Server.Items

+

Whip : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) Whip()
+ (ctor) Whip( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhippingVine.html b/Docs/types/WhippingVine.html new file mode 100644 index 0000000..15f248b --- /dev/null +++ b/Docs/types/WhippingVine.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WhippingVine + + +

Back to Server.Mobiles

+

WhippingVine : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) WhippingVine()
+ (ctor) WhippingVine( Serial serial )
+ bool BardImmune( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhirlwindAttack.html b/Docs/types/WhirlwindAttack.html new file mode 100644 index 0000000..ef6a769 --- /dev/null +++ b/Docs/types/WhirlwindAttack.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - WhirlwindAttack + + +

Back to Server.Items

+

WhirlwindAttack : WeaponAbility

+ (ctor) WhirlwindAttack()
+ int BaseMana( get; )
+ virtual void OnHit( Mobile attacker, Mobile defender, int damage )
+ + diff --git a/Docs/types/WhiteDriedFlowers.html b/Docs/types/WhiteDriedFlowers.html new file mode 100644 index 0000000..2e5abbc --- /dev/null +++ b/Docs/types/WhiteDriedFlowers.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WhiteDriedFlowers + + +

Back to Server.Items

+

WhiteDriedFlowers : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WhiteDriedFlowers()
+ (ctor) WhiteDriedFlowers( int amount )
+ (ctor) WhiteDriedFlowers( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhiteHangingLantern.html b/Docs/types/WhiteHangingLantern.html new file mode 100644 index 0000000..cfeb7e3 --- /dev/null +++ b/Docs/types/WhiteHangingLantern.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WhiteHangingLantern + + +

Back to Server.Items

+

WhiteHangingLantern : BaseLight, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WhiteHangingLantern()
+ (ctor) WhiteHangingLantern( Serial serial )
+ int LitItemID( get; )
+ int UnlitItemID( get; )
+ virtual void Deserialize( GenericReader reader )
+ void Flip()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhiteMisoSoup.html b/Docs/types/WhiteMisoSoup.html new file mode 100644 index 0000000..fa89ae5 --- /dev/null +++ b/Docs/types/WhiteMisoSoup.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WhiteMisoSoup + + +

Back to Server.Items

+

WhiteMisoSoup : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WhiteMisoSoup()
+ (ctor) WhiteMisoSoup( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhiteNinjaQuestTeleporter.html b/Docs/types/WhiteNinjaQuestTeleporter.html new file mode 100644 index 0000000..3ab48ef --- /dev/null +++ b/Docs/types/WhiteNinjaQuestTeleporter.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WhiteNinjaQuestTeleporter + + +

Back to Server.Engines.Quests.Ninja

+

WhiteNinjaQuestTeleporter : DynamicTeleporter, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WhiteNinjaQuestTeleporter()
+ (ctor) WhiteNinjaQuestTeleporter( Serial serial )
+ int LabelNumber( get; )
+ int NotWorkingMessage( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool GetDestination( PlayerMobile player, ref Point3D loc, ref Map map )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhitePearl.html b/Docs/types/WhitePearl.html new file mode 100644 index 0000000..824395b --- /dev/null +++ b/Docs/types/WhitePearl.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WhitePearl + + +

Back to Server.Items

+

WhitePearl : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WhitePearl()
+ (ctor) WhitePearl( int amount )
+ (ctor) WhitePearl( Serial serial )
+ (ctor) WhitePearl( int amountFrom, int amountTo )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhitePoinsettia.html b/Docs/types/WhitePoinsettia.html new file mode 100644 index 0000000..5af72cf --- /dev/null +++ b/Docs/types/WhitePoinsettia.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WhitePoinsettia + + +

Back to Server.Items

+

WhitePoinsettia : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WhitePoinsettia()
+ (ctor) WhitePoinsettia( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhiteScales.html b/Docs/types/WhiteScales.html new file mode 100644 index 0000000..e77f02b --- /dev/null +++ b/Docs/types/WhiteScales.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WhiteScales + + +

Back to Server.Items

+

WhiteScales : BaseScales, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) WhiteScales()
+ (ctor) WhiteScales( int amount )
+ (ctor) WhiteScales( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhiteSnowflake.html b/Docs/types/WhiteSnowflake.html new file mode 100644 index 0000000..245accb --- /dev/null +++ b/Docs/types/WhiteSnowflake.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WhiteSnowflake + + +

Back to Server.Items

+

WhiteSnowflake : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WhiteSnowflake()
+ (ctor) WhiteSnowflake( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhiteStoneWall.html b/Docs/types/WhiteStoneWall.html new file mode 100644 index 0000000..2c0063e --- /dev/null +++ b/Docs/types/WhiteStoneWall.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WhiteStoneWall + + +

Back to Server.Items

+

WhiteStoneWall : BaseWall, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WhiteStoneWall( WhiteStoneWallTypes type )
+ (ctor) WhiteStoneWall( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhiteStoneWallTypes.html b/Docs/types/WhiteStoneWallTypes.html new file mode 100644 index 0000000..f9eff59 --- /dev/null +++ b/Docs/types/WhiteStoneWallTypes.html @@ -0,0 +1,44 @@ + + + RunUO Documentation - Class Overview - WhiteStoneWallTypes + + +

Back to Server.Items

+

WhiteStoneWallTypes (Enum)

+ EastWall = 0,
+ SouthWall = 1,
+ SECorner = 2,
+ NWCornerPost = 3,
+ EastArrowLoop = 4,
+ SouthArrowLoop = 5,
+ EastWindow = 6,
+ SouthWindow = 7,
+ SouthWallMedium = 8,
+ EastWallMedium = 9,
+ SECornerMedium = 10,
+ NWCornerPostMedium = 11,
+ SouthWallShort = 12,
+ EastWallShort = 13,
+ SECornerShort = 14,
+ NWCornerPostShort = 15,
+ NECornerPostShort = 16,
+ SWCornerPostShort = 17,
+ SouthWallVShort = 18,
+ EastWallVShort = 19,
+ SECornerVShort = 20,
+ NWCornerPostVShort = 21,
+ SECornerArch = 22,
+ SouthArch = 23,
+ WestArch = 24,
+ EastArch = 25,
+ NorthArch = 26,
+ EastBattlement = 27,
+ SECornerBattlement = 28,
+ SouthBattlement = 29,
+ NECornerBattlement = 30,
+ SWCornerBattlement = 31,
+ Column = 32,
+ SouthWallVVShort = 33,
+ EastWallVVShort = 34
+ + diff --git a/Docs/types/WhiteWolf.html b/Docs/types/WhiteWolf.html new file mode 100644 index 0000000..febbe25 --- /dev/null +++ b/Docs/types/WhiteWolf.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WhiteWolf + + +

Back to Server.Mobiles

+

WhiteWolf : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) WhiteWolf()
+ (ctor) WhiteWolf( Serial serial )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ int Meat( get; )
+ PackInstinct PackInstinct( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhiteWyrm.html b/Docs/types/WhiteWyrm.html new file mode 100644 index 0000000..8e0e308 --- /dev/null +++ b/Docs/types/WhiteWyrm.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - WhiteWyrm + + +

Back to Server.Mobiles

+

WhiteWyrm : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) WhiteWyrm()
+ (ctor) WhiteWyrm( Serial serial )
+ bool CanAngerOnTame( get; )
+ FoodType FavoriteFood( get; )
+ int Hides( get; )
+ HideType HideType( get; )
+ int Meat( get; )
+ bool ReacquireOnMovement( get; )
+ int Scales( get; )
+ ScaleType ScaleType( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WhoGump.html b/Docs/types/WhoGump.html new file mode 100644 index 0000000..9f9e84b --- /dev/null +++ b/Docs/types/WhoGump.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - WhoGump + + +

Back to Server.Gumps

+

WhoGump : Gump

+

Nested Types: InternalComparer

+ (static) List<Mobile> BuildList( Mobile owner, string filter )
+ (static) int GetHueFor( Mobile m )
+ (static) void Initialize()
+ (static) void WhoList_OnCommand( CommandEventArgs e )
+ (ctor) WhoGump( Mobile owner, string filter )
+ (ctor) WhoGump( Mobile owner, List<Mobile> list, int page )
+ void Initialize( int page )
+ virtual void OnResponse( NetState state, RelayInfo info )
+ + diff --git a/Docs/types/WideBrimHat.html b/Docs/types/WideBrimHat.html new file mode 100644 index 0000000..7757aa9 --- /dev/null +++ b/Docs/types/WideBrimHat.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - WideBrimHat + + +

Back to Server.Items

+

WideBrimHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+ (ctor) WideBrimHat()
+ (ctor) WideBrimHat( Serial serial )
+ (ctor) WideBrimHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WildGirlOfTheForest.html b/Docs/types/WildGirlOfTheForest.html new file mode 100644 index 0000000..f071c68 --- /dev/null +++ b/Docs/types/WildGirlOfTheForest.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WildGirlOfTheForest + + +

Back to Server.Items

+

WildGirlOfTheForest : BaseBook, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ISecurable

+ (ctor) WildGirlOfTheForest()
+ (ctor) WildGirlOfTheForest( Serial serial )
+ BookContent DefaultContent( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WildStaff.html b/Docs/types/WildStaff.html new file mode 100644 index 0000000..7c7cb59 --- /dev/null +++ b/Docs/types/WildStaff.html @@ -0,0 +1,27 @@ + + + RunUO Documentation - Class Overview - WildStaff + + +

Back to Server.Items

+

WildStaff : BaseStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: Boomstick, PhantomStaff

+ (ctor) WildStaff()
+ (ctor) WildStaff( Serial serial )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WildcardIPFirewallEntry.html b/Docs/types/WildcardIPFirewallEntry.html new file mode 100644 index 0000000..3c7a788 --- /dev/null +++ b/Docs/types/WildcardIPFirewallEntry.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WildcardIPFirewallEntry + + +

Back to Server

+

(Firewall) - WildcardIPFirewallEntry : IFirewallEntry

+ (ctor) WildcardIPFirewallEntry( string entry )
+ virtual bool Equals( object obj )
+ virtual int GetHashCode()
+ virtual bool IsBlocked( IPAddress address )
+ virtual string ToString()
+ + diff --git a/Docs/types/WildfireBow.html b/Docs/types/WildfireBow.html new file mode 100644 index 0000000..a6f7a21 --- /dev/null +++ b/Docs/types/WildfireBow.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WildfireBow + + +

Back to Server.Items

+

WildfireBow : ElvenCompositeLongbow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) WildfireBow()
+ (ctor) WildfireBow( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WildfireScroll.html b/Docs/types/WildfireScroll.html new file mode 100644 index 0000000..b95ec72 --- /dev/null +++ b/Docs/types/WildfireScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WildfireScroll + + +

Back to Server.Items

+

WildfireScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) WildfireScroll()
+ (ctor) WildfireScroll( int amount )
+ (ctor) WildfireScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WindChimes.html b/Docs/types/WindChimes.html new file mode 100644 index 0000000..37db52e --- /dev/null +++ b/Docs/types/WindChimes.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WindChimes + + +

Back to Server.Items

+

WindChimes : BaseWindChimes, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WindChimes()
+ (ctor) WindChimes( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WindSpirit.html b/Docs/types/WindSpirit.html new file mode 100644 index 0000000..a7e4db0 --- /dev/null +++ b/Docs/types/WindSpirit.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WindSpirit + + +

Back to Server.Items

+

WindSpirit : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WindSpirit()
+ (ctor) WindSpirit( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WindsEdge.html b/Docs/types/WindsEdge.html new file mode 100644 index 0000000..50eea13 --- /dev/null +++ b/Docs/types/WindsEdge.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WindsEdge + + +

Back to Server.Items

+

WindsEdge : Tessen, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) WindsEdge()
+ (ctor) WindsEdge( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Windsong.html b/Docs/types/Windsong.html new file mode 100644 index 0000000..ed582e8 --- /dev/null +++ b/Docs/types/Windsong.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Windsong + + +

Back to Server.Items

+

Windsong : MagicalShortbow, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) Windsong()
+ (ctor) Windsong( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WingedHelm.html b/Docs/types/WingedHelm.html new file mode 100644 index 0000000..3e608ab --- /dev/null +++ b/Docs/types/WingedHelm.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - WingedHelm + + +

Back to Server.Items

+

WingedHelm : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: HelmOfSwiftness

+ (ctor) WingedHelm()
+ (ctor) WingedHelm( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WinterGiftGiver2004.html b/Docs/types/WinterGiftGiver2004.html new file mode 100644 index 0000000..6ad64df --- /dev/null +++ b/Docs/types/WinterGiftGiver2004.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WinterGiftGiver2004 + + +

Back to Server.Misc

+

WinterGiftGiver2004 : GiftGiver

+ (static) void Initialize()
+ (ctor) WinterGiftGiver2004()
+ DateTime Finish( get; )
+ DateTime Start( get; )
+ virtual void GiveGift( Mobile mob )
+ + diff --git a/Docs/types/WinterGiftPackage2003.html b/Docs/types/WinterGiftPackage2003.html new file mode 100644 index 0000000..7ca3dbf --- /dev/null +++ b/Docs/types/WinterGiftPackage2003.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WinterGiftPackage2003 + + +

Back to Server.Items

+

WinterGiftPackage2003 : GiftBox, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WinterGiftPackage2003()
+ (ctor) WinterGiftPackage2003( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Wipe.html b/Docs/types/Wipe.html new file mode 100644 index 0000000..f6c468c --- /dev/null +++ b/Docs/types/Wipe.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Wipe + + +

Back to Server.Commands

+

Wipe

+

Nested Types: WipeType

+ (static) void BeginWipe( Mobile from, WipeType type )
+ (static) void DoWipe( Mobile from, Map map, Point3D start, Point3D end, WipeType type )
+ (static) void Initialize()
+ (static) void WipeAll_OnCommand( CommandEventArgs e )
+ (static) void WipeBox_Callback( Mobile from, Map map, Point3D start, Point3D end, object state )
+ (static) void WipeItems_OnCommand( CommandEventArgs e )
+ (static) void WipeMultis_OnCommand( CommandEventArgs e )
+ (static) void WipeNPCs_OnCommand( CommandEventArgs e )
+ (ctor) Wipe()
+ + diff --git a/Docs/types/WipeType.html b/Docs/types/WipeType.html new file mode 100644 index 0000000..f6ecf5f --- /dev/null +++ b/Docs/types/WipeType.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WipeType + + +

Back to Server.Commands

+

WipeType (Enum)

+ Items = 0x00000001,
+ Mobiles = 0x00000002,
+ Multis = 0x00000004,
+ All = 0x00000007
+ + diff --git a/Docs/types/Wisp.html b/Docs/types/Wisp.html new file mode 100644 index 0000000..6107c1a --- /dev/null +++ b/Docs/types/Wisp.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Wisp + + +

Back to Server.Mobiles

+

Wisp : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Wisp()
+ (ctor) Wisp( Serial serial )
+ Ethic EthicAllegiance( get; )
+ Faction FactionAllegiance( get; )
+ OppositionGroup OppositionGroup( get; )
+ TimeSpan ReacquireDelay( get; )
+ InhumanSpeech SpeechType( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WitchApprenticeQuest.html b/Docs/types/WitchApprenticeQuest.html new file mode 100644 index 0000000..3513f25 --- /dev/null +++ b/Docs/types/WitchApprenticeQuest.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - WitchApprenticeQuest + + +

Back to Server.Engines.Quests.Hag

+

WitchApprenticeQuest : QuestSystem

+ (static) Point3D RandomZeefzorpulLocation()
+ (ctor) WitchApprenticeQuest()
+ (ctor) WitchApprenticeQuest( PlayerMobile from )
+ bool IsTutorial( get; )
+ object Name( get; )
+ object OfferMessage( get; )
+ int Picture( get; )
+ TimeSpan RestartDelay( get; )
+ Type[] TypeReferenceTable( get; )
+ virtual void Accept()
+ + diff --git a/Docs/types/WitherScroll.html b/Docs/types/WitherScroll.html new file mode 100644 index 0000000..6377dfa --- /dev/null +++ b/Docs/types/WitherScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WitherScroll + + +

Back to Server.Items

+

WitherScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) WitherScroll()
+ (ctor) WitherScroll( int amount )
+ (ctor) WitherScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WitherSpell.html b/Docs/types/WitherSpell.html new file mode 100644 index 0000000..e64b64b --- /dev/null +++ b/Docs/types/WitherSpell.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WitherSpell + + +

Back to Server.Spells.Necromancy

+

WitherSpell : NecromancerSpell, ISpell

+ (ctor) WitherSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ bool DelayedDamage( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ + diff --git a/Docs/types/WizardsGlasses.html b/Docs/types/WizardsGlasses.html new file mode 100644 index 0000000..23e24af --- /dev/null +++ b/Docs/types/WizardsGlasses.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - WizardsGlasses + + +

Back to Server.Items

+

WizardsGlasses : ElvenGlasses, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) WizardsGlasses()
+ (ctor) WizardsGlasses( Serial serial )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WizardsHat.html b/Docs/types/WizardsHat.html new file mode 100644 index 0000000..848901a --- /dev/null +++ b/Docs/types/WizardsHat.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - WizardsHat + + +

Back to Server.Items

+

WizardsHat : BaseHat, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability, IShipwreckedItem

+

Derived Types: HatOfTheMagi

+ (ctor) WizardsHat()
+ (ctor) WizardsHat( Serial serial )
+ (ctor) WizardsHat( int hue )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WomanPortrait1.html b/Docs/types/WomanPortrait1.html new file mode 100644 index 0000000..4c7d251 --- /dev/null +++ b/Docs/types/WomanPortrait1.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WomanPortrait1 + + +

Back to Server.Items

+

WomanPortrait1 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WomanPortrait1()
+ (ctor) WomanPortrait1( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WomanPortrait2.html b/Docs/types/WomanPortrait2.html new file mode 100644 index 0000000..995a9d9 --- /dev/null +++ b/Docs/types/WomanPortrait2.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WomanPortrait2 + + +

Back to Server.Items

+

WomanPortrait2 : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WomanPortrait2()
+ (ctor) WomanPortrait2( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WondrousFish.html b/Docs/types/WondrousFish.html new file mode 100644 index 0000000..26c9281 --- /dev/null +++ b/Docs/types/WondrousFish.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WondrousFish + + +

Back to Server.Items

+

WondrousFish : BaseMagicFish, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WondrousFish()
+ (ctor) WondrousFish( Serial serial )
+ int Bonus( get; )
+ int LabelNumber( get; )
+ StatType Type( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodDebris.html b/Docs/types/WoodDebris.html new file mode 100644 index 0000000..11964f6 --- /dev/null +++ b/Docs/types/WoodDebris.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WoodDebris + + +

Back to Server.Items

+

WoodDebris : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodDebris()
+ (ctor) WoodDebris( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodHouseDeed.html b/Docs/types/WoodHouseDeed.html new file mode 100644 index 0000000..fd2c747 --- /dev/null +++ b/Docs/types/WoodHouseDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WoodHouseDeed + + +

Back to Server.Multis.Deeds

+

WoodHouseDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodHouseDeed()
+ (ctor) WoodHouseDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodPlasterHouseDeed.html b/Docs/types/WoodPlasterHouseDeed.html new file mode 100644 index 0000000..33ac875 --- /dev/null +++ b/Docs/types/WoodPlasterHouseDeed.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WoodPlasterHouseDeed + + +

Back to Server.Multis.Deeds

+

WoodPlasterHouseDeed : HouseDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodPlasterHouseDeed()
+ (ctor) WoodPlasterHouseDeed( Serial serial )
+ Rectangle2D[] Area( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual BaseHouse GetHouse( Mobile owner )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBench.html b/Docs/types/WoodenBench.html new file mode 100644 index 0000000..149e802 --- /dev/null +++ b/Docs/types/WoodenBench.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WoodenBench + + +

Back to Server.Items

+

WoodenBench : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenBench()
+ (ctor) WoodenBench( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBowl.html b/Docs/types/WoodenBowl.html new file mode 100644 index 0000000..f03bd66 --- /dev/null +++ b/Docs/types/WoodenBowl.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WoodenBowl + + +

Back to Server.Items

+

WoodenBowl : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenBowl()
+ (ctor) WoodenBowl( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBowlOfCarrots.html b/Docs/types/WoodenBowlOfCarrots.html new file mode 100644 index 0000000..6f29855 --- /dev/null +++ b/Docs/types/WoodenBowlOfCarrots.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenBowlOfCarrots + + +

Back to Server.Items

+

WoodenBowlOfCarrots : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenBowlOfCarrots()
+ (ctor) WoodenBowlOfCarrots( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBowlOfCorn.html b/Docs/types/WoodenBowlOfCorn.html new file mode 100644 index 0000000..3e3e67b --- /dev/null +++ b/Docs/types/WoodenBowlOfCorn.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenBowlOfCorn + + +

Back to Server.Items

+

WoodenBowlOfCorn : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenBowlOfCorn()
+ (ctor) WoodenBowlOfCorn( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBowlOfLettuce.html b/Docs/types/WoodenBowlOfLettuce.html new file mode 100644 index 0000000..b8ce195 --- /dev/null +++ b/Docs/types/WoodenBowlOfLettuce.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenBowlOfLettuce + + +

Back to Server.Items

+

WoodenBowlOfLettuce : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenBowlOfLettuce()
+ (ctor) WoodenBowlOfLettuce( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBowlOfPeas.html b/Docs/types/WoodenBowlOfPeas.html new file mode 100644 index 0000000..6e642a6 --- /dev/null +++ b/Docs/types/WoodenBowlOfPeas.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenBowlOfPeas + + +

Back to Server.Items

+

WoodenBowlOfPeas : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenBowlOfPeas()
+ (ctor) WoodenBowlOfPeas( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBowlOfStew.html b/Docs/types/WoodenBowlOfStew.html new file mode 100644 index 0000000..31ffbd2 --- /dev/null +++ b/Docs/types/WoodenBowlOfStew.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenBowlOfStew + + +

Back to Server.Items

+

WoodenBowlOfStew : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenBowlOfStew()
+ (ctor) WoodenBowlOfStew( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBowlOfTomatoSoup.html b/Docs/types/WoodenBowlOfTomatoSoup.html new file mode 100644 index 0000000..3757ad8 --- /dev/null +++ b/Docs/types/WoodenBowlOfTomatoSoup.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenBowlOfTomatoSoup + + +

Back to Server.Items

+

WoodenBowlOfTomatoSoup : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenBowlOfTomatoSoup()
+ (ctor) WoodenBowlOfTomatoSoup( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Eat( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenBox.html b/Docs/types/WoodenBox.html new file mode 100644 index 0000000..3ae2d67 --- /dev/null +++ b/Docs/types/WoodenBox.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WoodenBox + + +

Back to Server.Items

+

WoodenBox : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) WoodenBox()
+ (ctor) WoodenBox( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenChair.html b/Docs/types/WoodenChair.html new file mode 100644 index 0000000..04afee8 --- /dev/null +++ b/Docs/types/WoodenChair.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WoodenChair + + +

Back to Server.Items

+

WoodenChair : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenChair()
+ (ctor) WoodenChair( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenChairCushion.html b/Docs/types/WoodenChairCushion.html new file mode 100644 index 0000000..26d2129 --- /dev/null +++ b/Docs/types/WoodenChairCushion.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WoodenChairCushion + + +

Back to Server.Items

+

WoodenChairCushion : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenChairCushion()
+ (ctor) WoodenChairCushion( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenChest.html b/Docs/types/WoodenChest.html new file mode 100644 index 0000000..3eefed7 --- /dev/null +++ b/Docs/types/WoodenChest.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenChest + + +

Back to Server.Items

+

WoodenChest : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Derived Types: EminosKatanaChest

+ (ctor) WoodenChest()
+ (ctor) WoodenChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenCoffinAddon.html b/Docs/types/WoodenCoffinAddon.html new file mode 100644 index 0000000..d18598b --- /dev/null +++ b/Docs/types/WoodenCoffinAddon.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenCoffinAddon + + +

Back to Server.Items

+

WoodenCoffinAddon : BaseAddon, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable, IAddon

+ (ctor) WoodenCoffinAddon( bool east )
+ (ctor) WoodenCoffinAddon( Serial serial )
+ BaseAddonDeed Deed( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenCoffinComponent.html b/Docs/types/WoodenCoffinComponent.html new file mode 100644 index 0000000..95bbd70 --- /dev/null +++ b/Docs/types/WoodenCoffinComponent.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenCoffinComponent + + +

Back to Server.Items

+

WoodenCoffinComponent : AddonComponent, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IChopable

+ (ctor) WoodenCoffinComponent( int itemID )
+ (ctor) WoodenCoffinComponent( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenCoffinDeed.html b/Docs/types/WoodenCoffinDeed.html new file mode 100644 index 0000000..34301bf --- /dev/null +++ b/Docs/types/WoodenCoffinDeed.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - WoodenCoffinDeed + + +

Back to Server.Items

+

WoodenCoffinDeed : BaseAddonDeed, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: InternalGump

+ (ctor) WoodenCoffinDeed()
+ (ctor) WoodenCoffinDeed( Serial serial )
+ BaseAddon Addon( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void SendTarget( Mobile m )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenFootLocker.html b/Docs/types/WoodenFootLocker.html new file mode 100644 index 0000000..0f3d142 --- /dev/null +++ b/Docs/types/WoodenFootLocker.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WoodenFootLocker + + +

Back to Server.Items

+

WoodenFootLocker : LockableContainer, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+

Derived Types: HaochisTreasureChest

+ (ctor) WoodenFootLocker()
+ (ctor) WoodenFootLocker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenKiteShield.html b/Docs/types/WoodenKiteShield.html new file mode 100644 index 0000000..f1d87ad --- /dev/null +++ b/Docs/types/WoodenKiteShield.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - WoodenKiteShield + + +

Back to Server.Items

+

WoodenKiteShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: ArcaneShield

+ (ctor) WoodenKiteShield()
+ (ctor) WoodenKiteShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenShield.html b/Docs/types/WoodenShield.html new file mode 100644 index 0000000..dc75b1b --- /dev/null +++ b/Docs/types/WoodenShield.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - WoodenShield + + +

Back to Server.Items

+

WoodenShield : BaseShield, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) WoodenShield()
+ (ctor) WoodenShield( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenThrone.html b/Docs/types/WoodenThrone.html new file mode 100644 index 0000000..76b853c --- /dev/null +++ b/Docs/types/WoodenThrone.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WoodenThrone + + +

Back to Server.Items

+

WoodenThrone : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WoodenThrone()
+ (ctor) WoodenThrone( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodenTreasureChest.html b/Docs/types/WoodenTreasureChest.html new file mode 100644 index 0000000..eb66568 --- /dev/null +++ b/Docs/types/WoodenTreasureChest.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WoodenTreasureChest + + +

Back to Server.Items

+

WoodenTreasureChest : BaseTreasureChest, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ITelekinesisable, ILockable, ILockpickable, ICraftable, IShipwreckedItem

+ (ctor) WoodenTreasureChest()
+ (ctor) WoodenTreasureChest( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodlandArms.html b/Docs/types/WoodlandArms.html new file mode 100644 index 0000000..d63455a --- /dev/null +++ b/Docs/types/WoodlandArms.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - WoodlandArms + + +

Back to Server.Items

+

WoodlandArms : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) WoodlandArms()
+ (ctor) WoodlandArms( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodlandBelt.html b/Docs/types/WoodlandBelt.html new file mode 100644 index 0000000..0da07ed --- /dev/null +++ b/Docs/types/WoodlandBelt.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WoodlandBelt + + +

Back to Server.Items

+

WoodlandBelt : BaseWaist, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) WoodlandBelt()
+ (ctor) WoodlandBelt( int hue )
+ (ctor) WoodlandBelt( Serial serial )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual bool Scissor( Mobile from, Scissors scissors )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodlandChest.html b/Docs/types/WoodlandChest.html new file mode 100644 index 0000000..bbf7dd7 --- /dev/null +++ b/Docs/types/WoodlandChest.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - WoodlandChest + + +

Back to Server.Items

+

WoodlandChest : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+

Derived Types: BrambleCoat

+ (ctor) WoodlandChest()
+ (ctor) WoodlandChest( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodlandGloves.html b/Docs/types/WoodlandGloves.html new file mode 100644 index 0000000..066ed06 --- /dev/null +++ b/Docs/types/WoodlandGloves.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - WoodlandGloves + + +

Back to Server.Items

+

WoodlandGloves : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) WoodlandGloves()
+ (ctor) WoodlandGloves( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodlandGorget.html b/Docs/types/WoodlandGorget.html new file mode 100644 index 0000000..2fd836e --- /dev/null +++ b/Docs/types/WoodlandGorget.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - WoodlandGorget + + +

Back to Server.Items

+

WoodlandGorget : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) WoodlandGorget()
+ (ctor) WoodlandGorget( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WoodlandLegs.html b/Docs/types/WoodlandLegs.html new file mode 100644 index 0000000..b23c941 --- /dev/null +++ b/Docs/types/WoodlandLegs.html @@ -0,0 +1,25 @@ + + + RunUO Documentation - Class Overview - WoodlandLegs + + +

Back to Server.Items

+

WoodlandLegs : BaseArmor, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IScissorable, IFactionItem, ICraftable, IWearableDurability, IDurability

+ (ctor) WoodlandLegs()
+ (ctor) WoodlandLegs( Serial serial )
+ int AosStrReq( get; )
+ int ArmorBase( get; )
+ int BaseColdResistance( get; )
+ int BaseEnergyResistance( get; )
+ int BaseFireResistance( get; )
+ int BasePhysicalResistance( get; )
+ int BasePoisonResistance( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ ArmorMaterialType MaterialType( get; )
+ int OldStrReq( get; )
+ Race RequiredRace( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Wool.html b/Docs/types/Wool.html new file mode 100644 index 0000000..a1d8a5b --- /dev/null +++ b/Docs/types/Wool.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - Wool + + +

Back to Server.Items

+

Wool : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable

+

Derived Types: TaintedWool

+

Nested Types: PickWheelTarget

+ (static) void OnSpun( ISpinningWheel wheel, Mobile from, int hue )
+ (ctor) Wool()
+ (ctor) Wool( Serial serial )
+ (ctor) Wool( int amount )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WordOfDeathScroll.html b/Docs/types/WordOfDeathScroll.html new file mode 100644 index 0000000..c7f8b40 --- /dev/null +++ b/Docs/types/WordOfDeathScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WordOfDeathScroll + + +

Back to Server.Items

+

WordOfDeathScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) WordOfDeathScroll()
+ (ctor) WordOfDeathScroll( int amount )
+ (ctor) WordOfDeathScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WordOfDeathSpell.html b/Docs/types/WordOfDeathSpell.html new file mode 100644 index 0000000..9128368 --- /dev/null +++ b/Docs/types/WordOfDeathSpell.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - WordOfDeathSpell + + +

Back to Server.Spells.Spellweaving

+

WordOfDeathSpell : ArcanistSpell, ISpell

+

Nested Types: InternalTarget

+ (ctor) WordOfDeathSpell( Mobile caster, Item scroll )
+ TimeSpan CastDelayBase( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void OnCast()
+ void Target( Mobile m )
+ + diff --git a/Docs/types/WorkerThread.html b/Docs/types/WorkerThread.html new file mode 100644 index 0000000..4663ebf --- /dev/null +++ b/Docs/types/WorkerThread.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - WorkerThread + + +

Back to Server

+

(AsyncWriter) - WorkerThread

+ (ctor) WorkerThread( AsyncWriter owner )
+ void Worker()
+ + diff --git a/Docs/types/World.html b/Docs/types/World.html new file mode 100644 index 0000000..1523092 --- /dev/null +++ b/Docs/types/World.html @@ -0,0 +1,35 @@ + + + RunUO Documentation - Class Overview - World + + +

Back to Server

+

World

+

Nested Types: GuildEntry, IEntityEntry, ItemEntry, MobileEntry, SaveOption

+ (static) Dictionary<Serial,Item> Items( get; )
+ (static) bool Loaded( get; )
+ (static) bool Loading( get; )
+ (static) string LoadingType( get; )
+ (static) Dictionary<Serial,Mobile> Mobiles( get; )
+ (static) bool Saving( get; )
+ (static) void AddItem( Item item )
+ (static) void AddMobile( Mobile m )
+ (static) void AppendSafetyLog( string action, IEntity entity )
+ (static) void Broadcast( int hue, bool ascii, string text )
+ (static) void Broadcast( int hue, bool ascii, string format, object[] args )
+ (static) IEntity FindEntity( Serial serial )
+ (static) Item FindItem( Serial serial )
+ (static) Mobile FindMobile( Serial serial )
+ (static) void Load()
+ (static) void NotifyDiskWriteComplete()
+ (static) bool OnDelete( IEntity entity )
+ (static) void ProcessSafetyQueues()
+ (static) List<Object[]> ReadTypes( BinaryReader tdbReader )
+ (static) void RemoveItem( Item item )
+ (static) void RemoveMobile( Mobile m )
+ (static) void Save()
+ (static) void Save( bool message, bool permitBackgroundWrite )
+ (static) void SaveIndex( List<T> list, string path )
+ (static) void WaitForWriteCompletion()
+ + diff --git a/Docs/types/WorldItem.html b/Docs/types/WorldItem.html new file mode 100644 index 0000000..cbafa57 --- /dev/null +++ b/Docs/types/WorldItem.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - WorldItem + + +

Back to Server.Network

+

WorldItem : Packet

+ (ctor) WorldItem( Item item )
+ + diff --git a/Docs/types/WorldItemHS.html b/Docs/types/WorldItemHS.html new file mode 100644 index 0000000..6a6d9ec --- /dev/null +++ b/Docs/types/WorldItemHS.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - WorldItemHS + + +

Back to Server.Network

+

WorldItemHS : Packet

+ (ctor) WorldItemHS( Item item )
+ + diff --git a/Docs/types/WorldItemSA.html b/Docs/types/WorldItemSA.html new file mode 100644 index 0000000..e4418dd --- /dev/null +++ b/Docs/types/WorldItemSA.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - WorldItemSA + + +

Back to Server.Network

+

WorldItemSA : Packet

+ (ctor) WorldItemSA( Item item )
+ + diff --git a/Docs/types/WorldLoadEventHandler.html b/Docs/types/WorldLoadEventHandler.html new file mode 100644 index 0000000..f2c3286 --- /dev/null +++ b/Docs/types/WorldLoadEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WorldLoadEventHandler + + +

Back to Server

+

WorldLoadEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) WorldLoadEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke()
+ + diff --git a/Docs/types/WorldMap.html b/Docs/types/WorldMap.html new file mode 100644 index 0000000..6d75d30 --- /dev/null +++ b/Docs/types/WorldMap.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - WorldMap + + +

Back to Server.Items

+

WorldMap : MapItem, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICraftable

+ (ctor) WorldMap()
+ (ctor) WorldMap( Serial serial )
+ int LabelNumber( get; )
+ virtual void CraftInit( Mobile from )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WorldSaveEventArgs.html b/Docs/types/WorldSaveEventArgs.html new file mode 100644 index 0000000..7e7bb06 --- /dev/null +++ b/Docs/types/WorldSaveEventArgs.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - WorldSaveEventArgs + + +

Back to Server

+

WorldSaveEventArgs : EventArgs

+ (ctor) WorldSaveEventArgs( bool msg )
+ bool Message( get; )
+ + diff --git a/Docs/types/WorldSaveEventHandler.html b/Docs/types/WorldSaveEventHandler.html new file mode 100644 index 0000000..4578463 --- /dev/null +++ b/Docs/types/WorldSaveEventHandler.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WorldSaveEventHandler + + +

Back to Server

+

WorldSaveEventHandler : MulticastDelegate, ICloneable, ISerializable

+ (ctor) WorldSaveEventHandler( object object, IntPtr method )
+ virtual IAsyncResult BeginInvoke( WorldSaveEventArgs e, AsyncCallback callback, object object )
+ virtual void EndInvoke( IAsyncResult result )
+ virtual void Invoke( WorldSaveEventArgs e )
+ + diff --git a/Docs/types/Wraith.html b/Docs/types/Wraith.html new file mode 100644 index 0000000..5538e56 --- /dev/null +++ b/Docs/types/Wraith.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Wraith + + +

Back to Server.Mobiles

+

Wraith : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Wraith()
+ (ctor) Wraith( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WraithFormScroll.html b/Docs/types/WraithFormScroll.html new file mode 100644 index 0000000..a33d689 --- /dev/null +++ b/Docs/types/WraithFormScroll.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - WraithFormScroll + + +

Back to Server.Items

+

WraithFormScroll : SpellScroll, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) WraithFormScroll()
+ (ctor) WraithFormScroll( int amount )
+ (ctor) WraithFormScroll( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WraithFormSpell.html b/Docs/types/WraithFormSpell.html new file mode 100644 index 0000000..64cdf4d --- /dev/null +++ b/Docs/types/WraithFormSpell.html @@ -0,0 +1,22 @@ + + + RunUO Documentation - Class Overview - WraithFormSpell + + +

Back to Server.Spells.Necromancy

+

WraithFormSpell : TransformationSpell, ISpell, ITransformationSpell

+ (ctor) WraithFormSpell( Mobile caster, Item scroll )
+ int Body( get; )
+ TimeSpan CastDelayBase( get; )
+ int ColdResistOffset( get; )
+ int FireResistOffset( get; )
+ int Hue( get; )
+ int NrgyResistOffset( get; )
+ int PhysResistOffset( get; )
+ int PoisResistOffset( get; )
+ int RequiredMana( get; )
+ double RequiredSkill( get; )
+ virtual void DoEffect( Mobile m )
+ virtual void RemoveEffect( Mobile m )
+ + diff --git a/Docs/types/WrathOfTheDryad.html b/Docs/types/WrathOfTheDryad.html new file mode 100644 index 0000000..c50b562 --- /dev/null +++ b/Docs/types/WrathOfTheDryad.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - WrathOfTheDryad + + +

Back to Server.Items

+

WrathOfTheDryad : GnarledStaff, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) WrathOfTheDryad()
+ (ctor) WrathOfTheDryad( Serial serial )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WreathAddon.html b/Docs/types/WreathAddon.html new file mode 100644 index 0000000..cc0a10c --- /dev/null +++ b/Docs/types/WreathAddon.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - WreathAddon + + +

Back to Server.Items

+

WreathAddon : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IDyable, IAddon

+

Nested Types: WreathAddonGump

+ (ctor) WreathAddon()
+ (ctor) WreathAddon( int hue )
+ (ctor) WreathAddon( Serial serial )
+ Item Deed( get; )
+ virtual bool CouldFit( IPoint3D p, Map map )
+ virtual void Deserialize( GenericReader reader )
+ virtual bool Dye( Mobile from, DyeTub sender )
+ void FixMovingCrate()
+ virtual void OnDoubleClick( Mobile from )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WreathAddonGump.html b/Docs/types/WreathAddonGump.html new file mode 100644 index 0000000..a032e72 --- /dev/null +++ b/Docs/types/WreathAddonGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - WreathAddonGump + + +

Back to Server.Items

+

(WreathAddon) - WreathAddonGump : Gump

+ (ctor) WreathAddonGump( Mobile from, WreathAddon addon )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/WreathDeed.html b/Docs/types/WreathDeed.html new file mode 100644 index 0000000..e5aaf68 --- /dev/null +++ b/Docs/types/WreathDeed.html @@ -0,0 +1,19 @@ + + + RunUO Documentation - Class Overview - WreathDeed + + +

Back to Server.Items

+

WreathDeed : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+

Nested Types: WreathDeedGump

+ (ctor) WreathDeed()
+ (ctor) WreathDeed( int hue )
+ (ctor) WreathDeed( Serial serial )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void OnDoubleClick( Mobile from )
+ void PlaceAddon( Mobile from, Point3D loc, bool northWall, bool westWall )
+ void Placement_OnTarget( Mobile from, object targeted, object state )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/WreathDeedGump.html b/Docs/types/WreathDeedGump.html new file mode 100644 index 0000000..586e7d5 --- /dev/null +++ b/Docs/types/WreathDeedGump.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - WreathDeedGump + + +

Back to Server.Items

+

(WreathDeed) - WreathDeedGump : Gump

+ (ctor) WreathDeedGump( Mobile from, Point3D loc, WreathDeed deed )
+ virtual void OnResponse( NetState sender, RelayInfo info )
+ + diff --git a/Docs/types/WriteAccessException.html b/Docs/types/WriteAccessException.html new file mode 100644 index 0000000..ffd8ee5 --- /dev/null +++ b/Docs/types/WriteAccessException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - WriteAccessException + + +

Back to Server

+

WriteAccessException : ClearanceException, ISerializable, _Exception

+ (ctor) WriteAccessException( Property property, AccessLevel playerAccess, AccessLevel neededAccess )
+ + diff --git a/Docs/types/WriteOnlyException.html b/Docs/types/WriteOnlyException.html new file mode 100644 index 0000000..b8a4ced --- /dev/null +++ b/Docs/types/WriteOnlyException.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - WriteOnlyException + + +

Back to Server

+

WriteOnlyException : BindingException, ISerializable, _Exception

+ (ctor) WriteOnlyException( Property property )
+ + diff --git a/Docs/types/WritingTable.html b/Docs/types/WritingTable.html new file mode 100644 index 0000000..e516853 --- /dev/null +++ b/Docs/types/WritingTable.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - WritingTable + + +

Back to Server.Items

+

WritingTable : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) WritingTable()
+ (ctor) WritingTable( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Wyvern.html b/Docs/types/Wyvern.html new file mode 100644 index 0000000..233aaf7 --- /dev/null +++ b/Docs/types/Wyvern.html @@ -0,0 +1,26 @@ + + + RunUO Documentation - Class Overview - Wyvern + + +

Back to Server.Mobiles

+

Wyvern : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Wyvern()
+ (ctor) Wyvern( Serial serial )
+ int Hides( get; )
+ HideType HideType( get; )
+ Poison HitPoison( get; )
+ int Meat( get; )
+ Poison PoisonImmune( get; )
+ bool ReacquireOnMovement( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/XmlPersistanceReader.html b/Docs/types/XmlPersistanceReader.html new file mode 100644 index 0000000..4c5bff9 --- /dev/null +++ b/Docs/types/XmlPersistanceReader.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - XmlPersistanceReader + + +

Back to Server.Engines.Reports

+

XmlPersistanceReader : PersistanceReader

+ (ctor) XmlPersistanceReader( string filePath, string title )
+ bool HasChild( get; )
+ virtual bool BeginChildren()
+ virtual void Close()
+ virtual void FinishChildren()
+ virtual bool GetBoolean( string key )
+ virtual PersistableObject GetChild()
+ virtual DateTime GetDateTime( string key )
+ virtual int GetInt32( string key )
+ virtual string GetString( string key )
+ virtual void ReadDocument( PersistableObject root )
+ + diff --git a/Docs/types/XmlPersistanceWriter.html b/Docs/types/XmlPersistanceWriter.html new file mode 100644 index 0000000..eb898cf --- /dev/null +++ b/Docs/types/XmlPersistanceWriter.html @@ -0,0 +1,20 @@ + + + RunUO Documentation - Class Overview - XmlPersistanceWriter + + +

Back to Server.Engines.Reports

+

XmlPersistanceWriter : PersistanceWriter

+ (ctor) XmlPersistanceWriter( string filePath, string title )
+ virtual void BeginChildren()
+ virtual void BeginObject( PersistableType typeID )
+ virtual void Close()
+ virtual void FinishChildren()
+ virtual void FinishObject()
+ virtual void SetBoolean( string key, bool value )
+ virtual void SetDateTime( string key, DateTime value )
+ virtual void SetInt32( string key, int value )
+ virtual void SetString( string key, string value )
+ virtual void WriteDocument( PersistableObject root )
+ + diff --git a/Docs/types/Yamandon.html b/Docs/types/Yamandon.html new file mode 100644 index 0000000..1a8ebf1 --- /dev/null +++ b/Docs/types/Yamandon.html @@ -0,0 +1,28 @@ + + + RunUO Documentation - Class Overview - Yamandon + + +

Back to Server.Mobiles

+

Yamandon : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Yamandon()
+ (ctor) Yamandon( Serial serial )
+ int Hides( get; )
+ Poison HitPoison( get; )
+ Poison PoisonImmune( get; )
+ bool ReacquireOnMovement( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ void DoCounter( Mobile attacker )
+ virtual void GenerateLoot()
+ virtual int GetAngerSound()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnDamagedBySpell( Mobile attacker )
+ virtual void OnGotMeleeAttack( Mobile attacker )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YellowBeaker.html b/Docs/types/YellowBeaker.html new file mode 100644 index 0000000..9f918a3 --- /dev/null +++ b/Docs/types/YellowBeaker.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - YellowBeaker + + +

Back to Server.Items

+

YellowBeaker : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) YellowBeaker()
+ (ctor) YellowBeaker( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YellowGourd.html b/Docs/types/YellowGourd.html new file mode 100644 index 0000000..5a8b83e --- /dev/null +++ b/Docs/types/YellowGourd.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - YellowGourd + + +

Back to Server.Items

+

YellowGourd : Food, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) YellowGourd()
+ (ctor) YellowGourd( int amount )
+ (ctor) YellowGourd( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YellowScales.html b/Docs/types/YellowScales.html new file mode 100644 index 0000000..625d088 --- /dev/null +++ b/Docs/types/YellowScales.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - YellowScales + + +

Back to Server.Items

+

YellowScales : BaseScales, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) YellowScales()
+ (ctor) YellowScales( int amount )
+ (ctor) YellowScales( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Yew.html b/Docs/types/Yew.html new file mode 100644 index 0000000..8981d05 --- /dev/null +++ b/Docs/types/Yew.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - Yew + + +

Back to Server.Factions

+

Yew : Town, IComparable

+ (ctor) Yew()
+ + diff --git a/Docs/types/YewBoard.html b/Docs/types/YewBoard.html new file mode 100644 index 0000000..78ec0e7 --- /dev/null +++ b/Docs/types/YewBoard.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - YewBoard + + +

Back to Server.Items

+

YewBoard : Board, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) YewBoard()
+ (ctor) YewBoard( int amount )
+ (ctor) YewBoard( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YewLog.html b/Docs/types/YewLog.html new file mode 100644 index 0000000..76db0c3 --- /dev/null +++ b/Docs/types/YewLog.html @@ -0,0 +1,15 @@ + + + RunUO Documentation - Class Overview - YewLog + + +

Back to Server.Items

+

YewLog : Log, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity, IAxe

+ (ctor) YewLog()
+ (ctor) YewLog( Serial serial )
+ (ctor) YewLog( int amount )
+ virtual bool Axe( Mobile from, BaseAxe axe )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YewWoodTable.html b/Docs/types/YewWoodTable.html new file mode 100644 index 0000000..0e327e1 --- /dev/null +++ b/Docs/types/YewWoodTable.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - YewWoodTable + + +

Back to Server.Items

+

YewWoodTable : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) YewWoodTable()
+ (ctor) YewWoodTable( Serial serial )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YomotsuElder.html b/Docs/types/YomotsuElder.html new file mode 100644 index 0000000..de5bb16 --- /dev/null +++ b/Docs/types/YomotsuElder.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - YomotsuElder + + +

Back to Server.Mobiles

+

YomotsuElder : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) YomotsuElder()
+ (ctor) YomotsuElder( Serial serial )
+ bool CanRummageCorpses( get; )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YomotsuPriest.html b/Docs/types/YomotsuPriest.html new file mode 100644 index 0000000..e90545a --- /dev/null +++ b/Docs/types/YomotsuPriest.html @@ -0,0 +1,23 @@ + + + RunUO Documentation - Class Overview - YomotsuPriest + + +

Back to Server.Mobiles

+

YomotsuPriest : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) YomotsuPriest()
+ (ctor) YomotsuPriest( Serial serial )
+ bool CanRummageCorpses( get; )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YomotsuWarrior.html b/Docs/types/YomotsuWarrior.html new file mode 100644 index 0000000..b32f123 --- /dev/null +++ b/Docs/types/YomotsuWarrior.html @@ -0,0 +1,24 @@ + + + RunUO Documentation - Class Overview - YomotsuWarrior + + +

Back to Server.Mobiles

+

YomotsuWarrior : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) YomotsuWarrior()
+ (ctor) YomotsuWarrior( Serial serial )
+ bool CanRummageCorpses( get; )
+ FoodType FavoriteFood( get; )
+ int Meat( get; )
+ int TreasureMapLevel( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual int GetAttackSound()
+ virtual int GetDeathSound()
+ virtual int GetHurtSound()
+ virtual int GetIdleSound()
+ virtual WeaponAbility GetWeaponAbility()
+ virtual void OnGaveMeleeAttack( Mobile defender )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YoungDeathNotice.html b/Docs/types/YoungDeathNotice.html new file mode 100644 index 0000000..4770053 --- /dev/null +++ b/Docs/types/YoungDeathNotice.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - YoungDeathNotice + + +

Back to Server.Gumps

+

YoungDeathNotice : Gump

+ (ctor) YoungDeathNotice()
+ + diff --git a/Docs/types/YoungDungeonWarning.html b/Docs/types/YoungDungeonWarning.html new file mode 100644 index 0000000..0be26a2 --- /dev/null +++ b/Docs/types/YoungDungeonWarning.html @@ -0,0 +1,10 @@ + + + RunUO Documentation - Class Overview - YoungDungeonWarning + + +

Back to Server.Gumps

+

YoungDungeonWarning : Gump

+ (ctor) YoungDungeonWarning()
+ + diff --git a/Docs/types/YoungNinja.html b/Docs/types/YoungNinja.html new file mode 100644 index 0000000..3c016ce --- /dev/null +++ b/Docs/types/YoungNinja.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - YoungNinja + + +

Back to Server.Engines.Quests.Samurai

+

YoungNinja : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) YoungNinja()
+ (ctor) YoungNinja( Serial serial )
+ bool AlwaysMurderer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YoungRonin.html b/Docs/types/YoungRonin.html new file mode 100644 index 0000000..9107dfd --- /dev/null +++ b/Docs/types/YoungRonin.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - YoungRonin + + +

Back to Server.Engines.Quests.Samurai

+

YoungRonin : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) YoungRonin()
+ (ctor) YoungRonin( Serial serial )
+ bool AlwaysMurderer( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/YoungTimer.html b/Docs/types/YoungTimer.html new file mode 100644 index 0000000..c45e7c0 --- /dev/null +++ b/Docs/types/YoungTimer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - YoungTimer + + +

Back to Server.Accounting

+

(Account) - YoungTimer : Timer

+ (ctor) YoungTimer( Account account )
+ virtual void OnTick()
+ + diff --git a/Docs/types/Yumi.html b/Docs/types/Yumi.html new file mode 100644 index 0000000..7a8336c --- /dev/null +++ b/Docs/types/Yumi.html @@ -0,0 +1,32 @@ + + + RunUO Documentation - Class Overview - Yumi + + +

Back to Server.Items

+

Yumi : BaseRanged, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+

Derived Types: HanzosBow, TheHorselord

+ (ctor) Yumi()
+ (ctor) Yumi( Serial serial )
+ Item Ammo( get; )
+ Type AmmoType( get; )
+ int AosMaxDamage( get; )
+ int AosMinDamage( get; )
+ int AosSpeed( get; )
+ int AosStrengthReq( get; )
+ WeaponAnimation DefAnimation( get; )
+ int DefMaxRange( get; )
+ int EffectID( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ float MlSpeed( get; )
+ int OldMaxDamage( get; )
+ int OldMinDamage( get; )
+ int OldSpeed( get; )
+ int OldStrengthReq( get; )
+ WeaponAbility PrimaryAbility( get; )
+ WeaponAbility SecondaryAbility( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ZComparer.html b/Docs/types/ZComparer.html new file mode 100644 index 0000000..ae30a41 --- /dev/null +++ b/Docs/types/ZComparer.html @@ -0,0 +1,11 @@ + + + RunUO Documentation - Class Overview - ZComparer + + +

Back to Server

+

(Map) - ZComparer : IComparer<Item>

+ (ctor) ZComparer()
+ virtual int Compare( Item x, Item y )
+ + diff --git a/Docs/types/ZLibError.html b/Docs/types/ZLibError.html new file mode 100644 index 0000000..891abd7 --- /dev/null +++ b/Docs/types/ZLibError.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ZLibError + + +

Back to Server.Network

+

ZLibError (Enum)

+ Okay = 0,
+ StreamEnd = 1,
+ NeedDictionary = 2,
+ VersionError = -6,
+ BufferError = -5,
+ MemoryError = -4,
+ DataError = -3,
+ StreamError = -2,
+ FileError = -1
+ + diff --git a/Docs/types/ZLibQuality.html b/Docs/types/ZLibQuality.html new file mode 100644 index 0000000..5588b60 --- /dev/null +++ b/Docs/types/ZLibQuality.html @@ -0,0 +1,13 @@ + + + RunUO Documentation - Class Overview - ZLibQuality + + +

Back to Server.Network

+

ZLibQuality (Enum)

+ None = 0,
+ Speed = 1,
+ Size = 9,
+ Default = -1
+ + diff --git a/Docs/types/Zeefzorpul.html b/Docs/types/Zeefzorpul.html new file mode 100644 index 0000000..2e938b1 --- /dev/null +++ b/Docs/types/Zeefzorpul.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - Zeefzorpul + + +

Back to Server.Engines.Quests.Hag

+

Zeefzorpul : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Zeefzorpul()
+ (ctor) Zeefzorpul( Serial serial )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual void InitBody()
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ZeefzorpulConversation.html b/Docs/types/ZeefzorpulConversation.html new file mode 100644 index 0000000..95ad92d --- /dev/null +++ b/Docs/types/ZeefzorpulConversation.html @@ -0,0 +1,12 @@ + + + RunUO Documentation - Class Overview - ZeefzorpulConversation + + +

Back to Server.Engines.Quests.Hag

+

ZeefzorpulConversation : QuestConversation

+ (ctor) ZeefzorpulConversation()
+ object Message( get; )
+ virtual void OnRead()
+ + diff --git a/Docs/types/ZenRock1Artifact.html b/Docs/types/ZenRock1Artifact.html new file mode 100644 index 0000000..a00ffb6 --- /dev/null +++ b/Docs/types/ZenRock1Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ZenRock1Artifact + + +

Back to Server.Items

+

ZenRock1Artifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ZenRock1Artifact()
+ (ctor) ZenRock1Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ZenRock2Artifact.html b/Docs/types/ZenRock2Artifact.html new file mode 100644 index 0000000..e19b8a3 --- /dev/null +++ b/Docs/types/ZenRock2Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ZenRock2Artifact + + +

Back to Server.Items

+

ZenRock2Artifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ZenRock2Artifact()
+ (ctor) ZenRock2Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ZenRock3Artifact.html b/Docs/types/ZenRock3Artifact.html new file mode 100644 index 0000000..955cf67 --- /dev/null +++ b/Docs/types/ZenRock3Artifact.html @@ -0,0 +1,14 @@ + + + RunUO Documentation - Class Overview - ZenRock3Artifact + + +

Back to Server.Items

+

ZenRock3Artifact : BaseDecorationArtifact, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>

+ (ctor) ZenRock3Artifact()
+ (ctor) ZenRock3Artifact( Serial serial )
+ int ArtifactRarity( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Zoel.html b/Docs/types/Zoel.html new file mode 100644 index 0000000..7c31d18 --- /dev/null +++ b/Docs/types/Zoel.html @@ -0,0 +1,21 @@ + + + RunUO Documentation - Class Overview - Zoel + + +

Back to Server.Engines.Quests.Ninja

+

Zoel : BaseQuester, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget, IVendor

+ (ctor) Zoel()
+ (ctor) Zoel( Serial serial )
+ int TalkNumber( get; )
+ virtual bool CanTalkTo( PlayerMobile to )
+ virtual void Deserialize( GenericReader reader )
+ virtual int GetAutoTalkRange( PlayerMobile pm )
+ virtual void InitBody()
+ virtual void InitOutfit()
+ virtual bool OnDragDrop( Mobile from, Item dropped )
+ virtual void OnMovement( Mobile m, Point3D oldLocation )
+ virtual void OnTalk( PlayerMobile player, bool contextMenu )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/Zombie.html b/Docs/types/Zombie.html new file mode 100644 index 0000000..26d92dc --- /dev/null +++ b/Docs/types/Zombie.html @@ -0,0 +1,17 @@ + + + RunUO Documentation - Class Overview - Zombie + + +

Back to Server.Mobiles

+

Zombie : BaseCreature, IHued, IComparable<Mobile>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IHonorTarget

+ (ctor) Zombie()
+ (ctor) Zombie( Serial serial )
+ bool BleedImmune( get; )
+ OppositionGroup OppositionGroup( get; )
+ Poison PoisonImmune( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GenerateLoot()
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ZoogiFungus.html b/Docs/types/ZoogiFungus.html new file mode 100644 index 0000000..dc89530 --- /dev/null +++ b/Docs/types/ZoogiFungus.html @@ -0,0 +1,16 @@ + + + RunUO Documentation - Class Overview - ZoogiFungus + + +

Back to Server.Items

+

ZoogiFungus : Item, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, ICommodity

+ (ctor) ZoogiFungus()
+ (ctor) ZoogiFungus( Serial serial )
+ (ctor) ZoogiFungus( int amount )
+ int Server.Items.ICommodity.DescriptionNumber( get; )
+ bool Server.Items.ICommodity.IsDeedable( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/Docs/types/ZyronicClaw.html b/Docs/types/ZyronicClaw.html new file mode 100644 index 0000000..cdcd7e4 --- /dev/null +++ b/Docs/types/ZyronicClaw.html @@ -0,0 +1,18 @@ + + + RunUO Documentation - Class Overview - ZyronicClaw + + +

Back to Server.Items

+

ZyronicClaw : ExecutionersAxe, IHued, IComparable<Item>, ISerializable, ISpawnable, IEntity, IPoint3D, IPoint2D, IComparable, IComparable<IEntity>, IWeapon, IFactionItem, ICraftable, ISlayer, IDurability

+ (ctor) ZyronicClaw()
+ (ctor) ZyronicClaw( Serial serial )
+ int ArtifactRarity( get; )
+ int InitMaxHits( get; )
+ int InitMinHits( get; )
+ int LabelNumber( get; )
+ virtual void Deserialize( GenericReader reader )
+ virtual void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )
+ virtual void Serialize( GenericWriter writer )
+ + diff --git a/README.md b/README.md new file mode 100644 index 0000000..83357ac --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Avatars Conquest is based on the latest work by Djeryv the creator of UO Ruin & Riches. His latest work is Britain Knights. I know very little about it other than its a new map and lots of game changes. diff --git a/Scripts/Accounting/AccessRestrictions.cs b/Scripts/Accounting/AccessRestrictions.cs new file mode 100644 index 0000000..71d2efb --- /dev/null +++ b/Scripts/Accounting/AccessRestrictions.cs @@ -0,0 +1,46 @@ +using System; +using System.IO; +using System.Net; +using System.Net.Sockets; +using Server; +using Server.Misc; + +namespace Server +{ + public class AccessRestrictions + { + public static void Initialize() + { + EventSink.SocketConnect += new SocketConnectEventHandler( EventSink_SocketConnect ); + } + + private static void EventSink_SocketConnect( SocketConnectEventArgs e ) + { + try + { + IPAddress ip = ((IPEndPoint)e.Socket.RemoteEndPoint).Address; + + if ( Firewall.IsBlocked( ip ) ) + { + Console.WriteLine( "Client: {0}: Firewall blocked connection attempt.", ip ); + e.AllowConnection = false; + return; + } + else if ( IPLimiter.SocketBlock && !IPLimiter.Verify( ip ) ) + { + Console.WriteLine( "Client: {0}: Past IP limit threshold", ip ); + + using ( StreamWriter op = new StreamWriter( "ipLimits.log", true ) ) + op.WriteLine( "{0}\tPast IP limit threshold\t{1}", ip, DateTime.Now ); + + e.AllowConnection = false; + return; + } + } + catch + { + e.AllowConnection = false; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Accounting/Account.cs b/Scripts/Accounting/Account.cs new file mode 100644 index 0000000..afc76ea --- /dev/null +++ b/Scripts/Accounting/Account.cs @@ -0,0 +1,1094 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Security; +using System.Security.Cryptography; +using System.Text; +using System.Xml; +using Server; +using Server.Misc; +using Server.Mobiles; +using Server.Multis; +using Server.Network; + +namespace Server.Accounting +{ + public class Account : IAccount, IComparable, IComparable + { + public static readonly TimeSpan InactiveDuration = TimeSpan.FromDays( 180.0 ); + + private string m_Username, m_PlainPassword, m_CryptPassword, m_NewCryptPassword; + private AccessLevel m_AccessLevel; + private int m_Flags; + private DateTime m_Created, m_LastLogin; + private TimeSpan m_TotalGameTime; + private List m_Comments; + private List m_Tags; + private Mobile[] m_Mobiles; + private string[] m_IPRestrictions; + private IPAddress[] m_LoginIPs; + private HardwareInfo m_HardwareInfo; + + /// + /// Deletes the account, all characters of the account, and all houses of those characters + /// + public void Delete() + { + for ( int i = 0; i < this.Length; ++i ) + { + Mobile m = this[i]; + + if ( m == null ) + continue; + + List list = BaseHouse.GetHouses( m ); + + for ( int j = 0; j < list.Count; ++j ) + list[j].Delete(); + + m.Delete(); + + m.Account = null; + m_Mobiles[i] = null; + } + + Accounts.Remove( m_Username ); + } + + /// + /// Object detailing information about the hardware of the last person to log into this account + /// + public HardwareInfo HardwareInfo + { + get { return m_HardwareInfo; } + set { m_HardwareInfo = value; } + } + + /// + /// List of IP addresses for restricted access. '*' wildcard supported. If the array contains zero entries, all IP addresses are allowed. + /// + public string[] IPRestrictions + { + get { return m_IPRestrictions; } + set { m_IPRestrictions = value; } + } + + /// + /// List of IP addresses which have successfully logged into this account. + /// + public IPAddress[] LoginIPs + { + get { return m_LoginIPs; } + set { m_LoginIPs = value; } + } + + /// + /// List of account comments. Type of contained objects is AccountComment. + /// + public List Comments + { + get { if ( m_Comments == null ) m_Comments = new List(); return m_Comments; } + } + + /// + /// List of account tags. Type of contained objects is AccountTag. + /// + public List Tags + { + get { if ( m_Tags == null ) m_Tags = new List(); return m_Tags; } + } + + /// + /// Account username. Case insensitive validation. + /// + public string Username + { + get { return m_Username; } + set { m_Username = value; } + } + + /// + /// Account password. Plain text. Case sensitive validation. May be null. + /// + public string PlainPassword + { + get { return m_PlainPassword; } + set { m_PlainPassword = value; } + } + + /// + /// Account password. Hashed with MD5. May be null. + /// + public string CryptPassword + { + get { return m_CryptPassword; } + set { m_CryptPassword = value; } + } + + /// + /// Account username and password hashed with SHA1. May be null. + /// + public string NewCryptPassword + { + get { return m_NewCryptPassword; } + set { m_NewCryptPassword = value; } + } + + /// + /// Initial AccessLevel for new characters created on this account. + /// + public AccessLevel AccessLevel + { + get { return m_AccessLevel; } + set { m_AccessLevel = value; } + } + + /// + /// Internal bitfield of account flags. Consider using direct access properties (Banned), or GetFlag/SetFlag methods + /// + public int Flags + { + get { return m_Flags; } + set { m_Flags = value; } + } + + /// + /// Gets or sets a flag indiciating if this account is banned. + /// + public bool Banned + { + get + { + bool isBanned = GetFlag( 0 ); + + if ( !isBanned ) + return false; + + DateTime banTime; + TimeSpan banDuration; + + if ( GetBanTags( out banTime, out banDuration ) ) + { + if ( banDuration != TimeSpan.MaxValue && DateTime.Now >= ( banTime + banDuration ) ) + { + SetUnspecifiedBan( null ); // clear + Banned = false; + return false; + } + } + + return true; + } + set { SetFlag( 0, value ); } + } + + /// + /// The date and time of when this account was created. + /// + public DateTime Created + { + get { return m_Created; } + } + + /// + /// Gets or sets the date and time when this account was last accessed. + /// + public DateTime LastLogin + { + get { return m_LastLogin; } + set { m_LastLogin = value; } + } + + /// + /// An account is considered inactive based upon LastLogin and InactiveDuration + /// + public bool Inactive + { + get { return ( ( m_LastLogin + InactiveDuration ) <= DateTime.Now && AccessLevel == AccessLevel.Player ); } + } + + /// + /// Gets the total game time of this account, also considering the game time of characters + /// that have been deleted. + /// + public TimeSpan TotalGameTime + { + get + { + for ( int i = 0; i < m_Mobiles.Length; i++ ) + { + PlayerMobile m = m_Mobiles[i] as PlayerMobile; + + if ( m != null && m.NetState != null ) + return m_TotalGameTime + ( DateTime.Now - m.SessionStart ); + } + + return m_TotalGameTime; + } + } + + /// + /// Gets the value of a specific flag in the Flags bitfield. + /// + /// The zero-based flag index. + public bool GetFlag( int index ) + { + return ( m_Flags & ( 1 << index ) ) != 0; + } + + /// + /// Sets the value of a specific flag in the Flags bitfield. + /// + /// The zero-based flag index. + /// The value to set. + public void SetFlag( int index, bool value ) + { + if ( value ) + m_Flags |= ( 1 << index ); + else + m_Flags &= ~( 1 << index ); + } + + /// + /// Adds a new tag to this account. This method does not check for duplicate names. + /// + /// New tag name. + /// New tag value. + public void AddTag( string name, string value ) + { + Tags.Add( new AccountTag( name, value ) ); + } + + /// + /// Removes all tags with the specified name from this account. + /// + /// Tag name to remove. + public void RemoveTag( string name ) + { + for ( int i = Tags.Count - 1; i >= 0; --i ) + { + if ( i >= Tags.Count ) + continue; + + AccountTag tag = Tags[i]; + + if ( tag.Name == name ) + Tags.RemoveAt( i ); + } + } + + /// + /// Modifies an existing tag or adds a new tag if no tag exists. + /// + /// Tag name. + /// Tag value. + public void SetTag( string name, string value ) + { + for ( int i = 0; i < Tags.Count; ++i ) + { + AccountTag tag = Tags[i]; + + if ( tag.Name == name ) + { + tag.Value = value; + return; + } + } + + AddTag( name, value ); + } + + /// + /// Gets the value of a tag -or- null if there are no tags with the specified name. + /// + /// Name of the desired tag value. + public string GetTag( string name ) + { + for ( int i = 0; i < Tags.Count; ++i ) + { + AccountTag tag = Tags[i]; + + if ( tag.Name == name ) + return tag.Value; + } + + return null; + } + + public void SetUnspecifiedBan( Mobile from ) + { + SetBanTags( from, DateTime.MinValue, TimeSpan.Zero ); + } + + public void SetBanTags( Mobile from, DateTime banTime, TimeSpan banDuration ) + { + if ( from == null ) + RemoveTag( "BanDealer" ); + else + SetTag( "BanDealer", from.ToString() ); + + if ( banTime == DateTime.MinValue ) + RemoveTag( "BanTime" ); + else + SetTag( "BanTime", XmlConvert.ToString( banTime, XmlDateTimeSerializationMode.Local ) ); + + if ( banDuration == TimeSpan.Zero ) + RemoveTag( "BanDuration" ); + else + SetTag( "BanDuration", banDuration.ToString() ); + } + + public bool GetBanTags( out DateTime banTime, out TimeSpan banDuration ) + { + string tagTime = GetTag( "BanTime" ); + string tagDuration = GetTag( "BanDuration" ); + + if ( tagTime != null ) + banTime = Utility.GetXMLDateTime( tagTime, DateTime.MinValue ); + else + banTime = DateTime.MinValue; + + if ( tagDuration == "Infinite" ) + { + banDuration = TimeSpan.MaxValue; + } + else if ( tagDuration != null ) + { + banDuration = Utility.ToTimeSpan( tagDuration ); + } + else + { + banDuration = TimeSpan.Zero; + } + + return ( banTime != DateTime.MinValue && banDuration != TimeSpan.Zero ); + } + + private static MD5CryptoServiceProvider m_MD5HashProvider; + private static SHA1CryptoServiceProvider m_SHA1HashProvider; + private static byte[] m_HashBuffer; + + public static string HashMD5( string phrase ) + { + if ( m_MD5HashProvider == null ) + m_MD5HashProvider = new MD5CryptoServiceProvider(); + + if ( m_HashBuffer == null ) + m_HashBuffer = new byte[256]; + + int length = Encoding.ASCII.GetBytes( phrase, 0, phrase.Length > 256 ? 256 : phrase.Length, m_HashBuffer, 0 ); + byte[] hashed = m_MD5HashProvider.ComputeHash( m_HashBuffer, 0, length ); + + return BitConverter.ToString( hashed ); + } + + public static string HashSHA1( string phrase ) + { + if ( m_SHA1HashProvider == null ) + m_SHA1HashProvider = new SHA1CryptoServiceProvider(); + + if ( m_HashBuffer == null ) + m_HashBuffer = new byte[256]; + + int length = Encoding.ASCII.GetBytes( phrase, 0, phrase.Length > 256 ? 256 : phrase.Length, m_HashBuffer, 0 ); + byte[] hashed = m_SHA1HashProvider.ComputeHash( m_HashBuffer, 0, length ); + + return BitConverter.ToString( hashed ); + } + + public void SetPassword( string plainPassword ) + { + switch ( AccountHandler.ProtectPasswords ) + { + case PasswordProtection.None: + { + m_PlainPassword = plainPassword; + m_CryptPassword = null; + m_NewCryptPassword = null; + + break; + } + case PasswordProtection.Crypt: + { + m_PlainPassword = null; + m_CryptPassword = HashMD5( plainPassword ); + m_NewCryptPassword = null; + + break; + } + default: // PasswordProtection.NewCrypt + { + m_PlainPassword = null; + m_CryptPassword = null; + m_NewCryptPassword = HashSHA1( m_Username + plainPassword ); + + break; + } + } + } + + public bool CheckPassword( string plainPassword ) + { + bool ok; + PasswordProtection curProt; + + if ( m_PlainPassword != null ) + { + ok = ( m_PlainPassword == plainPassword ); + curProt = PasswordProtection.None; + } + else if ( m_CryptPassword != null ) + { + ok = ( m_CryptPassword == HashMD5( plainPassword ) ); + curProt = PasswordProtection.Crypt; + } + else + { + ok = ( m_NewCryptPassword == HashSHA1( m_Username + plainPassword ) ); + curProt = PasswordProtection.NewCrypt; + } + + if ( ok && curProt != AccountHandler.ProtectPasswords ) + SetPassword( plainPassword ); + + return ok; + } + + public static void Initialize() + { + EventSink.Connected += new ConnectedEventHandler( EventSink_Connected ); + EventSink.Disconnected += new DisconnectedEventHandler( EventSink_Disconnected ); + EventSink.Login += new LoginEventHandler( EventSink_Login ); + } + + private static void EventSink_Connected( ConnectedEventArgs e ) + { + Account acc = e.Mobile.Account as Account; + + if ( acc == null ) + return; + } + + private static void EventSink_Disconnected( DisconnectedEventArgs e ) + { + Account acc = e.Mobile.Account as Account; + + if ( acc == null ) + return; + + PlayerMobile m = e.Mobile as PlayerMobile; + if ( m == null ) + return; + + acc.m_TotalGameTime += DateTime.Now - m.SessionStart; + } + + private static void EventSink_Login( LoginEventArgs e ) + { + PlayerMobile m = e.Mobile as PlayerMobile; + + if ( m == null ) + return; + + Account acc = m.Account as Account; + + if ( acc == null ) + return; + } + + public Account( string username, string password ) + { + m_Username = username; + + SetPassword( password ); + + m_AccessLevel = AccessLevel.Player; + + m_Created = m_LastLogin = DateTime.Now; + m_TotalGameTime = TimeSpan.Zero; + + m_Mobiles = new Mobile[7]; + + m_IPRestrictions = new string[0]; + m_LoginIPs = new IPAddress[0]; + + Accounts.Add( this ); + } + + public Account( XmlElement node ) + { + m_Username = Utility.GetText( node["username"], "empty" ); + + string plainPassword = Utility.GetText( node["password"], null ); + string cryptPassword = Utility.GetText( node["cryptPassword"], null ); + string newCryptPassword = Utility.GetText( node["newCryptPassword"], null ); + + switch ( AccountHandler.ProtectPasswords ) + { + case PasswordProtection.None: + { + if ( plainPassword != null ) + SetPassword( plainPassword ); + else if ( newCryptPassword != null ) + m_NewCryptPassword = newCryptPassword; + else if ( cryptPassword != null ) + m_CryptPassword = cryptPassword; + else + SetPassword( "empty" ); + + break; + } + case PasswordProtection.Crypt: + { + if ( cryptPassword != null ) + m_CryptPassword = cryptPassword; + else if ( plainPassword != null ) + SetPassword( plainPassword ); + else if ( newCryptPassword != null ) + m_NewCryptPassword = newCryptPassword; + else + SetPassword( "empty" ); + + break; + } + default: // PasswordProtection.NewCrypt + { + if ( newCryptPassword != null ) + m_NewCryptPassword = newCryptPassword; + else if ( plainPassword != null ) + SetPassword( plainPassword ); + else if ( cryptPassword != null ) + m_CryptPassword = cryptPassword; + else + SetPassword( "empty" ); + + break; + } + } + + m_AccessLevel = (AccessLevel)Enum.Parse( typeof( AccessLevel ), Utility.GetText( node["accessLevel"], "Player" ), true ); + m_Flags = Utility.GetXMLInt32( Utility.GetText( node["flags"], "0" ), 0 ); + m_Created = Utility.GetXMLDateTime( Utility.GetText( node["created"], null ), DateTime.Now ); + m_LastLogin = Utility.GetXMLDateTime( Utility.GetText( node["lastLogin"], null ), DateTime.Now ); + + m_Mobiles = LoadMobiles( node ); + m_Comments = LoadComments( node ); + m_Tags = LoadTags( node ); + m_LoginIPs = LoadAddressList( node ); + m_IPRestrictions = LoadAccessCheck( node ); + + for ( int i = 0; i < m_Mobiles.Length; ++i ) + { + if ( m_Mobiles[i] != null ) + m_Mobiles[i].Account = this; + } + + TimeSpan totalGameTime = Utility.GetXMLTimeSpan( Utility.GetText( node["totalGameTime"], null ), TimeSpan.Zero ); + if ( totalGameTime == TimeSpan.Zero ) + { + for ( int i = 0; i < m_Mobiles.Length; i++ ) + { + PlayerMobile m = m_Mobiles[i] as PlayerMobile; + + if ( m != null ) + totalGameTime += m.GameTime; + } + } + m_TotalGameTime = totalGameTime; + + Accounts.Add( this ); + } + + /// + /// Deserializes a list of string values from an xml element. Null values are not added to the list. + /// + /// The XmlElement from which to deserialize. + /// String list. Value will never be null. + public static string[] LoadAccessCheck( XmlElement node ) + { + string[] stringList; + XmlElement accessCheck = node["accessCheck"]; + + if ( accessCheck != null ) + { + List list = new List(); + + foreach ( XmlElement ip in accessCheck.GetElementsByTagName( "ip" ) ) + { + string text = Utility.GetText( ip, null ); + + if ( text != null ) + list.Add( text ); + } + + stringList = list.ToArray(); + } + else + { + stringList = new string[0]; + } + + return stringList; + } + + /// + /// Deserializes a list of IPAddress values from an xml element. + /// + /// The XmlElement from which to deserialize. + /// Address list. Value will never be null. + public static IPAddress[] LoadAddressList( XmlElement node ) + { + IPAddress[] list; + XmlElement addressList = node["addressList"]; + + if ( addressList != null ) + { + int count = Utility.GetXMLInt32( Utility.GetAttribute( addressList, "count", "0" ), 0 ); + + list = new IPAddress[count]; + + count = 0; + + foreach ( XmlElement ip in addressList.GetElementsByTagName( "ip" ) ) + { + if ( count < list.Length ) + { + IPAddress address; + + if( IPAddress.TryParse( Utility.GetText( ip, null ), out address ) ) + { + list[count] = Utility.Intern( address ); + count++; + } + } + } + + if ( count != list.Length ) + { + IPAddress[] old = list; + list = new IPAddress[count]; + + for ( int i = 0; i < count && i < old.Length; ++i ) + list[i] = old[i]; + } + } + else + { + list = new IPAddress[0]; + } + + return list; + } + + /// + /// Deserializes a list of Mobile instances from an xml element. + /// + /// The XmlElement instance from which to deserialize. + /// Mobile list. Value will never be null. + public static Mobile[] LoadMobiles( XmlElement node ) + { + Mobile[] list = new Mobile[7]; + XmlElement chars = node["chars"]; + + //int length = Accounts.GetInt32( Accounts.GetAttribute( chars, "length", "6" ), 6 ); + //list = new Mobile[length]; + //Above is legacy, no longer used + + if ( chars != null ) + { + foreach ( XmlElement ele in chars.GetElementsByTagName( "char" ) ) + { + try + { + int index = Utility.GetXMLInt32( Utility.GetAttribute( ele, "index", "0" ), 0 ); + int serial = Utility.GetXMLInt32( Utility.GetText( ele, "0" ), 0 ); + + if ( index >= 0 && index < list.Length ) + list[index] = World.FindMobile( serial ); + } + catch + { + } + } + } + + return list; + } + + /// + /// Deserializes a list of AccountComment instances from an xml element. + /// + /// The XmlElement from which to deserialize. + /// Comment list. Value will never be null. + public static List LoadComments( XmlElement node ) + { + List list = null; + XmlElement comments = node["comments"]; + + if ( comments != null ) + { + list = new List(); + + foreach ( XmlElement comment in comments.GetElementsByTagName( "comment" ) ) + { + try { list.Add( new AccountComment( comment ) ); } + catch { } + } + } + + return list; + } + + /// + /// Deserializes a list of AccountTag instances from an xml element. + /// + /// The XmlElement from which to deserialize. + /// Tag list. Value will never be null. + public static List LoadTags( XmlElement node ) + { + List list = null; + XmlElement tags = node["tags"]; + + if ( tags != null ) + { + list = new List(); + + foreach ( XmlElement tag in tags.GetElementsByTagName( "tag" ) ) + { + try { list.Add( new AccountTag( tag ) ); } + catch { } + } + } + + return list; + } + + /// + /// Checks if a specific NetState is allowed access to this account. + /// + /// NetState instance to check. + /// True if allowed, false if not. + public bool HasAccess( NetState ns ) + { + return ( ns != null && HasAccess( ns.Address ) ); + } + + public bool HasAccess( IPAddress ipAddress ) { + AccessLevel level = Misc.AccountHandler.LockdownLevel; + + if ( level > AccessLevel.Player ) + { + bool hasAccess = false; + + if ( m_AccessLevel >= level ) + { + hasAccess = true; + } + else + { + for ( int i = 0; !hasAccess && i < this.Length; ++i ) + { + Mobile m = this[i]; + + if ( m != null && m.AccessLevel >= level ) + hasAccess = true; + } + } + + if ( !hasAccess ) + return false; + } + + bool accessAllowed = ( m_IPRestrictions.Length == 0 || IPLimiter.IsExempt( ipAddress ) ); + + for ( int i = 0; !accessAllowed && i < m_IPRestrictions.Length; ++i ) + accessAllowed = Utility.IPMatch( m_IPRestrictions[i], ipAddress ); + + return accessAllowed; + } + + /// + /// Records the IP address of 'ns' in its 'LoginIPs' list. + /// + /// NetState instance to record. + public void LogAccess( NetState ns ) + { + if ( ns != null ) { + LogAccess( ns.Address ); + } + } + + public void LogAccess( IPAddress ipAddress ) { + if ( IPLimiter.IsExempt( ipAddress ) ) + return; + + if ( m_LoginIPs.Length == 0 ) { + if ( AccountHandler.IPTable.ContainsKey( ipAddress ) ) + AccountHandler.IPTable[ipAddress]++; + else + AccountHandler.IPTable[ipAddress] = 1; + } + + bool contains = false; + + for ( int i = 0; !contains && i < m_LoginIPs.Length; ++i ) + contains = m_LoginIPs[i].Equals( ipAddress ); + + if ( contains ) + return; + + IPAddress[] old = m_LoginIPs; + m_LoginIPs = new IPAddress[old.Length + 1]; + + for ( int i = 0; i < old.Length; ++i ) + m_LoginIPs[i] = old[i]; + + m_LoginIPs[old.Length] = ipAddress; + } + + /// + /// Checks if a specific NetState is allowed access to this account. If true, the NetState IPAddress is added to the address list. + /// + /// NetState instance to check. + /// True if allowed, false if not. + public bool CheckAccess( NetState ns ) + { + return ( ns != null && CheckAccess( ns.Address ) ); + } + + public bool CheckAccess( IPAddress ipAddress ) { + bool hasAccess = this.HasAccess( ipAddress ); + + if ( hasAccess ) { + LogAccess( ipAddress ); + } + + return hasAccess; + } + + /// + /// Serializes this Account instance to an XmlTextWriter. + /// + /// The XmlTextWriter instance from which to serialize. + public void Save( XmlTextWriter xml ) + { + xml.WriteStartElement( "account" ); + + xml.WriteStartElement( "username" ); + xml.WriteString( m_Username ); + xml.WriteEndElement(); + + if ( m_PlainPassword != null ) + { + xml.WriteStartElement( "password" ); + xml.WriteString( m_PlainPassword ); + xml.WriteEndElement(); + } + + if ( m_CryptPassword != null ) + { + xml.WriteStartElement( "cryptPassword" ); + xml.WriteString( m_CryptPassword ); + xml.WriteEndElement(); + } + + if ( m_NewCryptPassword != null ) + { + xml.WriteStartElement( "newCryptPassword" ); + xml.WriteString( m_NewCryptPassword ); + xml.WriteEndElement(); + } + + if ( m_AccessLevel != AccessLevel.Player ) + { + xml.WriteStartElement( "accessLevel" ); + xml.WriteString( m_AccessLevel.ToString() ); + xml.WriteEndElement(); + } + + if ( m_Flags != 0 ) + { + xml.WriteStartElement( "flags" ); + xml.WriteString( XmlConvert.ToString( m_Flags ) ); + xml.WriteEndElement(); + } + + xml.WriteStartElement( "created" ); + xml.WriteString( XmlConvert.ToString( m_Created, XmlDateTimeSerializationMode.Local ) ); + xml.WriteEndElement(); + + xml.WriteStartElement( "lastLogin" ); + xml.WriteString( XmlConvert.ToString( m_LastLogin, XmlDateTimeSerializationMode.Local ) ); + xml.WriteEndElement(); + + xml.WriteStartElement( "totalGameTime" ); + xml.WriteString( XmlConvert.ToString( TotalGameTime ) ); + xml.WriteEndElement(); + + xml.WriteStartElement( "chars" ); + + //xml.WriteAttributeString( "length", m_Mobiles.Length.ToString() ); //Legacy, Not used anymore + + for ( int i = 0; i < m_Mobiles.Length; ++i ) + { + Mobile m = m_Mobiles[i]; + + if ( m != null && !m.Deleted ) + { + xml.WriteStartElement( "char" ); + xml.WriteAttributeString( "index", i.ToString() ); + xml.WriteString( m.Serial.Value.ToString() ); + xml.WriteEndElement(); + } + } + + xml.WriteEndElement(); + + if ( m_Comments != null && m_Comments.Count > 0 ) + { + xml.WriteStartElement( "comments" ); + + for ( int i = 0; i < m_Comments.Count; ++i ) + m_Comments[i].Save( xml ); + + xml.WriteEndElement(); + } + + if ( m_Tags != null && m_Tags.Count > 0 ) + { + xml.WriteStartElement( "tags" ); + + for ( int i = 0; i < m_Tags.Count; ++i ) + m_Tags[i].Save( xml ); + + xml.WriteEndElement(); + } + + if ( m_LoginIPs.Length > 0 ) + { + xml.WriteStartElement( "addressList" ); + + xml.WriteAttributeString( "count", m_LoginIPs.Length.ToString() ); + + for ( int i = 0; i < m_LoginIPs.Length; ++i ) + { + xml.WriteStartElement( "ip" ); + xml.WriteString( m_LoginIPs[i].ToString() ); + xml.WriteEndElement(); + } + + xml.WriteEndElement(); + } + + if ( m_IPRestrictions.Length > 0 ) + { + xml.WriteStartElement( "accessCheck" ); + + for ( int i = 0; i < m_IPRestrictions.Length; ++i ) + { + xml.WriteStartElement( "ip" ); + xml.WriteString( m_IPRestrictions[i] ); + xml.WriteEndElement(); + } + + xml.WriteEndElement(); + } + + xml.WriteEndElement(); + } + + /// + /// Gets the current number of characters on this account. + /// + public int Count + { + get + { + int count = 0; + + for ( int i = 0; i < this.Length; ++i ) + { + if ( this[i] != null ) + ++count; + } + + return count; + } + } + + /// + /// Gets the maximum amount of characters allowed to be created on this account. Values other than 1, 5, 6, or 7 are not supported by the client. + /// + public int Limit + { + get { return 7; } + } + + /// + /// Gets the maxmimum amount of characters that this account can hold. + /// + public int Length + { + get { return m_Mobiles.Length; } + } + + /// + /// Gets or sets the character at a specified index for this account. Out of bound index values are handled; null returned for get, ignored for set. + /// + public Mobile this[int index] + { + get + { + if ( index >= 0 && index < m_Mobiles.Length ) + { + Mobile m = m_Mobiles[index]; + + if ( m != null && m.Deleted ) + { + m.Account = null; + m_Mobiles[index] = m = null; + } + + return m; + } + + return null; + } + set + { + if ( index >= 0 && index < m_Mobiles.Length ) + { + if ( m_Mobiles[index] != null ) + m_Mobiles[index].Account = null; + + m_Mobiles[index] = value; + + if ( m_Mobiles[index] != null ) + m_Mobiles[index].Account = this; + } + } + } + + public override string ToString() + { + return m_Username; + } + + public int CompareTo( Account other ) + { + if ( other == null ) + return -1; + + return m_Username.CompareTo( other.m_Username ); + } + + public int CompareTo( object obj ) + { + if ( obj is Account ) + return this.CompareTo( (Account) obj ); + + throw new ArgumentException(); + } + } +} \ No newline at end of file diff --git a/Scripts/Accounting/AccountAttackLimiter.cs b/Scripts/Accounting/AccountAttackLimiter.cs new file mode 100644 index 0000000..3c264d0 --- /dev/null +++ b/Scripts/Accounting/AccountAttackLimiter.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Sockets; +using Server; +using Server.Network; + +namespace Server.Accounting +{ + public class AccountAttackLimiter + { + public static bool Enabled = true; + + public static void Initialize() + { + if ( !Enabled ) + return; + + PacketHandlers.RegisterThrottler( 0x80, new ThrottlePacketCallback( Throttle_Callback ) ); + PacketHandlers.RegisterThrottler( 0x91, new ThrottlePacketCallback( Throttle_Callback ) ); + PacketHandlers.RegisterThrottler( 0xCF, new ThrottlePacketCallback( Throttle_Callback ) ); + } + + public static bool Throttle_Callback( NetState ns ) + { + InvalidAccountAccessLog accessLog = FindAccessLog( ns ); + + if ( accessLog == null ) + return true; + + return ( DateTime.Now >= (accessLog.LastAccessTime + ComputeThrottle( accessLog.Counts )) ); + } + + private static List m_List = new List(); + + public static InvalidAccountAccessLog FindAccessLog( NetState ns ) + { + if ( ns == null ) + return null; + + IPAddress ipAddress = ns.Address; + + for ( int i = 0; i < m_List.Count; ++i ) + { + InvalidAccountAccessLog accessLog = m_List[i]; + + if ( accessLog.HasExpired ) + m_List.RemoveAt( i-- ); + else if ( accessLog.Address.Equals( ipAddress ) ) + return accessLog; + } + + return null; + } + + public static void RegisterInvalidAccess( NetState ns ) + { + if ( ns == null || !Enabled ) + return; + + InvalidAccountAccessLog accessLog = FindAccessLog( ns ); + + if ( accessLog == null ) + m_List.Add( accessLog = new InvalidAccountAccessLog( ns.Address ) ); + + accessLog.Counts += 1; + accessLog.RefreshAccessTime(); + + if ( accessLog.Counts >= 3 ) { + try { + using ( StreamWriter op = new StreamWriter( "throttle.log", true ) ) { + op.WriteLine( + "{0}\t{1}\t{2}", + DateTime.Now, + ns, + accessLog.Counts + ); + } + } + catch { + } + } + } + + public static TimeSpan ComputeThrottle( int counts ) + { + if ( counts >= 15 ) + return TimeSpan.FromMinutes( 5.0 ); + + if ( counts >= 10 ) + return TimeSpan.FromMinutes( 1.0 ); + + if ( counts >= 5 ) + return TimeSpan.FromSeconds( 20.0 ); + + if ( counts >= 3 ) + return TimeSpan.FromSeconds( 10.0 ); + + if ( counts >= 1 ) + return TimeSpan.FromSeconds( 2.0 ); + + return TimeSpan.Zero; + } + } + + public class InvalidAccountAccessLog + { + private IPAddress m_Address; + private DateTime m_LastAccessTime; + private int m_Counts; + + public IPAddress Address + { + get{ return m_Address; } + set{ m_Address = value; } + } + + public DateTime LastAccessTime + { + get{ return m_LastAccessTime; } + set{ m_LastAccessTime = value; } + } + + public bool HasExpired + { + get{ return ( DateTime.Now >= ( m_LastAccessTime + TimeSpan.FromHours( 1.0 ) ) ); } + } + + public int Counts + { + get{ return m_Counts; } + set{ m_Counts = value; } + } + + public void RefreshAccessTime() + { + m_LastAccessTime = DateTime.Now; + } + + public InvalidAccountAccessLog( IPAddress address ) + { + m_Address = address; + RefreshAccessTime(); + } + } +} \ No newline at end of file diff --git a/Scripts/Accounting/AccountComment.cs b/Scripts/Accounting/AccountComment.cs new file mode 100644 index 0000000..778e755 --- /dev/null +++ b/Scripts/Accounting/AccountComment.cs @@ -0,0 +1,77 @@ +using System; +using System.Xml; + +namespace Server.Accounting +{ + public class AccountComment + { + private string m_AddedBy; + private string m_Content; + private DateTime m_LastModified; + + /// + /// A string representing who added this comment. + /// + public string AddedBy + { + get{ return m_AddedBy; } + } + + /// + /// Gets or sets the body of this comment. Setting this value will reset LastModified. + /// + public string Content + { + get{ return m_Content; } + set{ m_Content = value; m_LastModified = DateTime.Now; } + } + + /// + /// The date and time when this account was last modified -or- the comment creation time, if never modified. + /// + public DateTime LastModified + { + get{ return m_LastModified; } + } + + /// + /// Constructs a new AccountComment instance. + /// + /// Initial AddedBy value. + /// Initial Content value. + public AccountComment( string addedBy, string content ) + { + m_AddedBy = addedBy; + m_Content = content; + m_LastModified = DateTime.Now; + } + + /// + /// Deserializes an AccountComment instance from an xml element. + /// + /// The XmlElement instance from which to deserialize. + public AccountComment( XmlElement node ) + { + m_AddedBy = Utility.GetAttribute( node, "addedBy", "empty" ); + m_LastModified = Utility.GetXMLDateTime( Utility.GetAttribute( node, "lastModified" ), DateTime.Now ); + m_Content = Utility.GetText( node, "" ); + } + + /// + /// Serializes this AccountComment instance to an XmlTextWriter. + /// + /// The XmlTextWriter instance from which to serialize. + public void Save( XmlTextWriter xml ) + { + xml.WriteStartElement( "comment" ); + + xml.WriteAttributeString( "addedBy", m_AddedBy ); + + xml.WriteAttributeString( "lastModified", XmlConvert.ToString( m_LastModified, XmlDateTimeSerializationMode.Local ) ); + + xml.WriteString( m_Content ); + + xml.WriteEndElement(); + } + } +} \ No newline at end of file diff --git a/Scripts/Accounting/AccountHandler.cs b/Scripts/Accounting/AccountHandler.cs new file mode 100644 index 0000000..9ece382 --- /dev/null +++ b/Scripts/Accounting/AccountHandler.cs @@ -0,0 +1,372 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using Server; +using Server.Accounting; +using Server.Commands; +using Server.Engines.Help; +using Server.Network; +using Server.Regions; + +namespace Server.Misc +{ + public enum PasswordProtection + { + None, + Crypt, + NewCrypt + } + + public class AccountHandler + { + private static int MaxAccountsPerIP = Server.Misc.Settings.MaxAccountsPerIP(); + private static bool AutoAccountCreation = Server.Misc.Settings.AutoAccountCreation(); + private static bool RestrictDeletion = Server.Misc.Settings.RestrictDeletion(); + private static TimeSpan DeleteDelay = TimeSpan.FromDays( Server.Misc.Settings.DeleteDelay() ); + + public static PasswordProtection ProtectPasswords = PasswordProtection.NewCrypt; + + private static AccessLevel m_LockdownLevel; + + public static AccessLevel LockdownLevel + { + get{ return m_LockdownLevel; } + set{ m_LockdownLevel = value; } + } + + private static CityInfo[] StartingCities = new CityInfo[] + { + new CityInfo( " ", " ", 1150168, 2081, 1585, 0 ), + }; + + private static bool PasswordCommandEnabled = true; + + public static void Initialize() + { + EventSink.DeleteRequest += new DeleteRequestEventHandler( EventSink_DeleteRequest ); + EventSink.AccountLogin += new AccountLoginEventHandler( EventSink_AccountLogin ); + EventSink.GameLogin += new GameLoginEventHandler( EventSink_GameLogin ); + + if ( PasswordCommandEnabled ) + CommandSystem.Register( "Password", AccessLevel.Player, new CommandEventHandler( Password_OnCommand ) ); + } + + [Usage( "Password " )] + [Description( "Changes the password of the commanding players account. Requires the same C-class IP address as the account's creator." )] + public static void Password_OnCommand( CommandEventArgs e ) + { + Mobile from = e.Mobile; + Account acct = from.Account as Account; + + if ( acct == null ) + return; + + IPAddress[] accessList = acct.LoginIPs; + + if ( accessList.Length == 0 ) + return; + + NetState ns = from.NetState; + + if ( ns == null ) + return; + + if ( e.Length == 0 ) + { + from.SendMessage( "You must specify the new password." ); + return; + } + else if ( e.Length == 1 ) + { + from.SendMessage( "To prevent potential typing mistakes, you must type the password twice. Use the format:" ); + from.SendMessage( "Password \"(newPassword)\" \"(repeated)\"" ); + return; + } + + string pass = e.GetString( 0 ); + string pass2 = e.GetString( 1 ); + + if ( pass != pass2 ) + { + from.SendMessage( "The passwords do not match." ); + return; + } + + bool isSafe = true; + + for ( int i = 0; isSafe && i < pass.Length; ++i ) + isSafe = ( pass[i] >= 0x20 && pass[i] < 0x80 ); + + if ( !isSafe ) + { + from.SendMessage( "That is not a valid password." ); + return; + } + + try + { + IPAddress ipAddress = ns.Address; + + if ( Utility.IPMatchClassC( accessList[0], ipAddress ) ) + { + acct.SetPassword( pass ); + from.SendMessage( "The password to your account has changed." ); + } + else + { + PageEntry entry = PageQueue.GetEntry( from ); + + if ( entry != null ) + { + if ( entry.Message.StartsWith( "[Automated: Change Password]" ) ) + from.SendMessage( "You already have a password change request in the help system queue." ); + else + from.SendMessage( "Your IP address does not match that which created this account." ); + } + else if ( PageQueue.CheckAllowedToPage( from ) ) + { + from.SendMessage( "Your IP address does not match that which created this account. A page has been entered into the help system on your behalf." ); + + from.SendLocalizedMessage( 501234, "", 0x35 ); /* The next available Counselor/Game Master will respond as soon as possible. + * Please check your Journal for messages every few minutes. + */ + + PageQueue.Enqueue( new PageEntry( from, String.Format( "[Automated: Change Password]
Desired password: {0}
Current IP address: {1}
Account IP address: {2}", pass, ipAddress, accessList[0] ), PageType.Account ) ); + } + + } + } + catch + { + } + } + + 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.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 ) ); + } + } + } + + public static bool CanCreate( IPAddress ip ) + { + if ( !IPTable.ContainsKey( ip ) ) + return true; + + return ( IPTable[ip] < MaxAccountsPerIP ); + } + + private static Dictionary m_IPTable; + + public static Dictionary IPTable + { + get + { + if ( m_IPTable == null ) + { + m_IPTable = new Dictionary(); + + foreach ( Account a in Accounts.GetAccounts() ) + if ( a.LoginIPs.Length > 0 ) + { + IPAddress ip = a.LoginIPs[0]; + + if ( m_IPTable.ContainsKey( ip ) ) + m_IPTable[ip]++; + else + m_IPTable[ip] = 1; + } + } + + return m_IPTable; + } + } + + private static Account CreateAccount( NetState state, string un, string pw ) + { + if ( un.Length == 0 || pw.Length == 0 ) + return null; + + bool isSafe = true; + + for ( int i = 0; isSafe && i < un.Length; ++i ) + isSafe = ( un[i] >= 0x20 && un[i] < 0x80 ); + + for ( int i = 0; isSafe && i < pw.Length; ++i ) + isSafe = ( pw[i] >= 0x20 && pw[i] < 0x80 ); + + if ( !isSafe ) + return null; + + if ( !CanCreate( state.Address ) ) + { + Console.WriteLine( "Login: {0}: Account '{1}' not created, ip already has {2} account{3}.", state, un, MaxAccountsPerIP, MaxAccountsPerIP == 1 ? "" : "s" ); + return null; + } + + Console.WriteLine( "Login: {0}: Creating new account '{1}'", state, un ); + + Account a = new Account( un, pw ); + + return a; + } + + public static void EventSink_AccountLogin( AccountLoginEventArgs e ) + { + if ( !IPLimiter.SocketBlock && !IPLimiter.Verify( e.State.Address ) ) + { + e.Accepted = false; + e.RejectReason = ALRReason.InUse; + + Console.WriteLine( "Login: {0}: Past IP limit threshold", e.State ); + + using ( StreamWriter op = new StreamWriter( "ipLimits.log", true ) ) + op.WriteLine( "{0}\tPast IP limit threshold\t{1}", e.State, DateTime.Now ); + + return; + } + + string un = e.Username; + string pw = e.Password; + + e.Accepted = false; + Account acct = Accounts.GetAccount( un ) as Account; + + if ( acct == null ) + { + if ( AutoAccountCreation && un.Trim().Length > 0 ) //To prevent someone from making an account of just '' or a bunch of meaningless spaces + { + e.State.Account = acct = CreateAccount( e.State, un, pw ); + e.Accepted = acct == null ? false : acct.CheckAccess( e.State ); + + if ( !e.Accepted ) + e.RejectReason = ALRReason.BadComm; + } + else + { + Console.WriteLine( "Login: {0}: Invalid username '{1}'", e.State, un ); + e.RejectReason = ALRReason.Invalid; + } + } + else if ( !acct.HasAccess( e.State ) ) + { + Console.WriteLine( "Login: {0}: Access denied for '{1}'", e.State, un ); + e.RejectReason = ( m_LockdownLevel > AccessLevel.Player ? ALRReason.BadComm : ALRReason.BadPass ); + } + else if ( !acct.CheckPassword( pw ) ) + { + Console.WriteLine( "Login: {0}: Invalid password for '{1}'", e.State, un ); + e.RejectReason = ALRReason.BadPass; + } + else if ( acct.Banned ) + { + Console.WriteLine( "Login: {0}: Banned account '{1}'", e.State, un ); + e.RejectReason = ALRReason.Blocked; + } + else + { + Console.WriteLine( "Login: {0}: Valid credentials for '{1}'", e.State, un ); + e.State.Account = acct; + e.Accepted = true; + + acct.LogAccess( e.State ); + } + + if ( !e.Accepted ) + AccountAttackLimiter.RegisterInvalidAccess( e.State ); + } + + public static void EventSink_GameLogin( GameLoginEventArgs e ) + { + if ( !IPLimiter.SocketBlock && !IPLimiter.Verify( e.State.Address ) ) + { + e.Accepted = false; + + Console.WriteLine( "Login: {0}: Past IP limit threshold", e.State ); + + using ( StreamWriter op = new StreamWriter( "ipLimits.log", true ) ) + op.WriteLine( "{0}\tPast IP limit threshold\t{1}", e.State, DateTime.Now ); + + return; + } + + string un = e.Username; + string pw = e.Password; + + Account acct = Accounts.GetAccount( un ) as Account; + + if ( acct == null ) + { + e.Accepted = false; + } + else if ( !acct.HasAccess( e.State ) ) + { + Console.WriteLine( "Login: {0}: Access denied for '{1}'", e.State, un ); + e.Accepted = false; + } + else if ( !acct.CheckPassword( pw ) ) + { + Console.WriteLine( "Login: {0}: Invalid password for '{1}'", e.State, un ); + e.Accepted = false; + } + else if ( acct.Banned ) + { + Console.WriteLine( "Login: {0}: Banned account '{1}'", e.State, un ); + e.Accepted = false; + } + else + { + acct.LogAccess( e.State ); + + Console.WriteLine( "Login: {0}: Account '{1}' at character list", e.State, un ); + e.State.Account = acct; + e.Accepted = true; + e.CityInfo = StartingCities; + } + + if ( !e.Accepted ) + AccountAttackLimiter.RegisterInvalidAccess( e.State ); + } + } +} \ No newline at end of file diff --git a/Scripts/Accounting/AccountTag.cs b/Scripts/Accounting/AccountTag.cs new file mode 100644 index 0000000..5f977cd --- /dev/null +++ b/Scripts/Accounting/AccountTag.cs @@ -0,0 +1,61 @@ +using System; +using System.Xml; + +namespace Server.Accounting +{ + public class AccountTag + { + private string m_Name, m_Value; + + /// + /// Gets or sets the name of this tag. + /// + public string Name + { + get{ return m_Name; } + set{ m_Name = value; } + } + + /// + /// Gets or sets the value of this tag. + /// + public string Value + { + get{ return m_Value; } + set{ m_Value = value; } + } + + /// + /// Constructs a new AccountTag instance with a specific name and value. + /// + /// Initial name. + /// Initial value. + public AccountTag( string name, string value ) + { + m_Name = name; + m_Value = value; + } + + /// + /// Deserializes an AccountTag instance from an xml element. + /// + /// The XmlElement instance from which to deserialize. + public AccountTag( XmlElement node ) + { + m_Name = Utility.GetAttribute( node, "name", "empty" ); + m_Value = Utility.GetText( node, "" ); + } + + /// + /// Serializes this AccountTag instance to an XmlTextWriter. + /// + /// The XmlTextWriter instance from which to serialize. + public void Save( XmlTextWriter xml ) + { + xml.WriteStartElement( "tag" ); + xml.WriteAttributeString( "name", m_Name ); + xml.WriteString( m_Value ); + xml.WriteEndElement(); + } + } +} \ No newline at end of file diff --git a/Scripts/Accounting/Accounts.cs b/Scripts/Accounting/Accounts.cs new file mode 100644 index 0000000..d79fd7a --- /dev/null +++ b/Scripts/Accounting/Accounts.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Xml; + +namespace Server.Accounting +{ + public class Accounts + { + private static Dictionary m_Accounts = new Dictionary(); + + public static void Configure() + { + EventSink.WorldLoad += new WorldLoadEventHandler( Load ); + EventSink.WorldSave += new WorldSaveEventHandler( Save ); + } + + static Accounts() + { + } + + public static int Count { get { return m_Accounts.Count; } } + + public static ICollection GetAccounts() + { +#if !MONO + return m_Accounts.Values; +#else + return new List( m_Accounts.Values ); +#endif + } + + public static IAccount GetAccount( string username ) + { + IAccount a; + + m_Accounts.TryGetValue( username, out a ); + + return a; + } + + public static void Add( IAccount a ) + { + m_Accounts[a.Username] = a; + } + + public static void Remove( string username ) + { + m_Accounts.Remove( username ); + } + + public static void Load() + { + m_Accounts = new Dictionary( 32, StringComparer.OrdinalIgnoreCase ); + + string filePath = Path.Combine( "Saves/Accounts", "accounts.xml" ); + + if ( !File.Exists( filePath ) ) + return; + + XmlDocument doc = new XmlDocument(); + doc.Load( filePath ); + + XmlElement root = doc["accounts"]; + + foreach ( XmlElement account in root.GetElementsByTagName( "account" ) ) + { + try + { + Account acct = new Account( account ); + } + catch + { + Console.WriteLine( "Warning: Account instance load failed" ); + } + } + } + + public static void Save( WorldSaveEventArgs e ) + { + if ( !Directory.Exists( "Saves/Accounts" ) ) + Directory.CreateDirectory( "Saves/Accounts" ); + + string filePath = Path.Combine( "Saves/Accounts", "accounts.xml" ); + + using ( StreamWriter op = new StreamWriter( filePath ) ) + { + XmlTextWriter xml = new XmlTextWriter( op ); + + xml.Formatting = Formatting.Indented; + xml.IndentChar = '\t'; + xml.Indentation = 1; + + xml.WriteStartDocument( true ); + + xml.WriteStartElement( "accounts" ); + + xml.WriteAttributeString( "count", m_Accounts.Count.ToString() ); + + foreach ( Account a in GetAccounts() ) + a.Save( xml ); + + xml.WriteEndElement(); + + xml.Close(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Accounting/Firewall.cs b/Scripts/Accounting/Firewall.cs new file mode 100644 index 0000000..03ff2ff --- /dev/null +++ b/Scripts/Accounting/Firewall.cs @@ -0,0 +1,344 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; + +namespace Server +{ + public class Firewall + { + #region Firewall Entries + public interface IFirewallEntry + { + bool IsBlocked( IPAddress address ); + } + + public class IPFirewallEntry : IFirewallEntry + { + IPAddress m_Address; + public IPFirewallEntry( IPAddress address ) + { + m_Address = address; + } + + public bool IsBlocked( IPAddress address ) + { + return m_Address.Equals( address ); + } + + public override string ToString() + { + return m_Address.ToString(); + } + + public override bool Equals( object obj ) + { + if( obj is IPAddress ) + { + return obj.Equals( m_Address ); + } + else if( obj is string ) + { + IPAddress otherAddress; + + if( IPAddress.TryParse( (string)obj, out otherAddress ) ) + return otherAddress.Equals( m_Address ); + } + else if( obj is IPFirewallEntry ) + { + return m_Address.Equals( ((IPFirewallEntry)obj).m_Address ); + } + + return false; + } + + public override int GetHashCode() + { + return m_Address.GetHashCode(); + } + } + + public class CIDRFirewallEntry : IFirewallEntry + { + IPAddress m_CIDRPrefix; + int m_CIDRLength; + + public CIDRFirewallEntry( IPAddress cidrPrefix, int cidrLength ) + { + m_CIDRPrefix = cidrPrefix; + m_CIDRLength = cidrLength; + } + + public bool IsBlocked( IPAddress address ) + { + return Utility.IPMatchCIDR( m_CIDRPrefix, address, m_CIDRLength ); + } + + public override string ToString() + { + return String.Format( "{0}/{1}", m_CIDRPrefix, m_CIDRLength ); + } + + public override bool Equals( object obj ) + { + + if( obj is string ) + { + string entry= (string)obj; + + string[] str = entry.Split( '/' ); + + if( str.Length == 2 ) + { + IPAddress cidrPrefix; + + if( IPAddress.TryParse( str[0], out cidrPrefix ) ) + { + int cidrLength; + + if( int.TryParse( str[1], out cidrLength ) ) + return m_CIDRPrefix.Equals( cidrPrefix ) && m_CIDRLength.Equals( cidrLength ); + } + } + } + else if( obj is CIDRFirewallEntry ) + { + CIDRFirewallEntry entry = obj as CIDRFirewallEntry; + + return m_CIDRPrefix.Equals( entry.m_CIDRPrefix ) && m_CIDRLength.Equals( entry.m_CIDRLength ); + } + + return false; + } + + public override int GetHashCode() + { + return m_CIDRPrefix.GetHashCode() ^ m_CIDRLength.GetHashCode(); + } + } + + public class WildcardIPFirewallEntry : IFirewallEntry + { + string m_Entry; + + bool m_Valid = true; + + public WildcardIPFirewallEntry( string entry ) + { + m_Entry = entry; + } + + public bool IsBlocked( IPAddress address ) + { + if( !m_Valid ) + return false; //Why process if it's invalid? it'll return false anyway after processing it. + + return Utility.IPMatch( m_Entry, address, ref m_Valid ); + } + + public override string ToString() + { + return m_Entry.ToString(); + } + + public override bool Equals( object obj ) + { + if( obj is string ) + return obj.Equals( m_Entry ); + else if( obj is WildcardIPFirewallEntry ) + return m_Entry.Equals( ((WildcardIPFirewallEntry)obj).m_Entry ); + + return false; + } + + public override int GetHashCode() + { + return m_Entry.GetHashCode(); + } + } + #endregion + + private static List m_Blocked; + + static Firewall() + { + m_Blocked = new List(); + + string path = "firewall.cfg"; + + if ( File.Exists( path ) ) + { + using ( StreamReader ip = new StreamReader( path ) ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + line = line.Trim(); + + if ( line.Length == 0 ) + continue; + + m_Blocked.Add( ToFirewallEntry( line ) ); + + /* + object toAdd; + + IPAddress addr; + if( IPAddress.TryParse( line, out addr ) ) + toAdd = addr; + else + toAdd = line; + + m_Blocked.Add( toAdd.ToString() ); + * */ + } + } + } + } + + public static List List + { + get + { + return m_Blocked; + } + } + + public static IFirewallEntry ToFirewallEntry( object entry ) + { + if( entry is IFirewallEntry ) + return (IFirewallEntry)entry; + else if( entry is IPAddress ) + return new IPFirewallEntry( (IPAddress)entry ); + else if( entry is string ) + return ToFirewallEntry( (string)entry ); + + return null; + } + + public static IFirewallEntry ToFirewallEntry( string entry ) + { + IPAddress addr; + + if( IPAddress.TryParse( entry, out addr ) ) + return new IPFirewallEntry( addr ); + + //Try CIDR parse + string[] str = entry.Split( '/' ); + + if( str.Length == 2 ) + { + IPAddress cidrPrefix; + + if( IPAddress.TryParse( str[0], out cidrPrefix ) ) + { + int cidrLength; + + if( int.TryParse( str[1], out cidrLength ) ) + return new CIDRFirewallEntry( cidrPrefix, cidrLength ); + } + } + + return new WildcardIPFirewallEntry( entry ); + } + + public static void RemoveAt( int index ) + { + m_Blocked.RemoveAt( index ); + Save(); + } + + public static void Remove( object obj ) + { + IFirewallEntry entry = ToFirewallEntry( obj ); + + if( entry != null ) + { + m_Blocked.Remove( entry ); + Save(); + } + } + + public static void Add( object obj ) + { + if( obj is IPAddress ) + Add( (IPAddress)obj ); + else if( obj is string ) + Add( (string)obj ); + else if( obj is IFirewallEntry ) + Add( (IFirewallEntry)obj ); + } + + public static void Add( IFirewallEntry entry ) + { + if( !m_Blocked.Contains( entry ) ) + m_Blocked.Add( entry ); + + Save(); + } + + public static void Add( string pattern ) + { + IFirewallEntry entry = ToFirewallEntry( pattern ); + + if( !m_Blocked.Contains( entry ) ) + m_Blocked.Add( entry ); + + Save(); + } + + public static void Add( IPAddress ip ) + { + IFirewallEntry entry = new IPFirewallEntry( ip ); + + if( !m_Blocked.Contains( entry ) ) + m_Blocked.Add( entry ); + + Save(); + } + + public static void Save() + { + string path = "firewall.cfg"; + + using ( StreamWriter op = new StreamWriter( path ) ) + { + for ( int i = 0; i < m_Blocked.Count; ++i ) + op.WriteLine( m_Blocked[i] ); + } + } + + public static bool IsBlocked( IPAddress ip ) + { + for( int i = 0; i < m_Blocked.Count; i++ ) + { + if( m_Blocked[i].IsBlocked( ip ) ) + return true; + } + + return false; + /* + bool contains = false; + + for ( int i = 0; !contains && i < m_Blocked.Count; ++i ) + { + if ( m_Blocked[i] is IPAddress ) + contains = ip.Equals( m_Blocked[i] ); + else if ( m_Blocked[i] is String ) + { + string s = (string)m_Blocked[i]; + + contains = Utility.IPMatchCIDR( s, ip ); + + if( !contains ) + contains = Utility.IPMatch( s, ip ); + } + } + + return contains; + * */ + } + } +} \ No newline at end of file diff --git a/Scripts/Accounting/IPLimiter.cs b/Scripts/Accounting/IPLimiter.cs new file mode 100644 index 0000000..f43c2e5 --- /dev/null +++ b/Scripts/Accounting/IPLimiter.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using Server; +using Server.Network; + +namespace Server.Misc +{ + public class IPLimiter + { + public static bool Enabled = true; + public static bool SocketBlock = true; // true to block at connection, false to block at login request + + public static int MaxAddresses = 10; + + public static IPAddress[] Exemptions = new IPAddress[] //For hosting services where there are cases where IPs can be proxied + { + //IPAddress.Parse( "127.0.0.1" ), + }; + + public static bool IsExempt( IPAddress ip ) + { + for ( int i = 0; i < Exemptions.Length; i++ ) + { + if ( ip.Equals( Exemptions[i] ) ) + return true; + } + + return false; + } + + public static bool Verify( IPAddress ourAddress ) + { + if ( !Enabled || IsExempt( ourAddress ) ) + return true; + + List netStates = NetState.Instances; + + int count = 0; + + for ( int i = 0; i < netStates.Count; ++i ) + { + NetState compState = netStates[i]; + + if ( ourAddress.Equals( compState.Address ) ) + { + ++count; + + if ( count >= MaxAddresses ) + return false; + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Add.cs b/Scripts/Commands/Add.cs new file mode 100644 index 0000000..9de5d39 --- /dev/null +++ b/Scripts/Commands/Add.cs @@ -0,0 +1,604 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; +using Server; +using Server.Items; +using Server.Network; +using Server.Targeting; +using CPA = Server.CommandPropertyAttribute; + +namespace Server.Commands +{ + public class Add + { + public static void Initialize() + { + CommandSystem.Register( "Tile", AccessLevel.GameMaster, new CommandEventHandler( Tile_OnCommand ) ); + CommandSystem.Register( "TileRXYZ", AccessLevel.GameMaster, new CommandEventHandler( TileRXYZ_OnCommand ) ); + CommandSystem.Register( "TileXYZ", AccessLevel.GameMaster, new CommandEventHandler( TileXYZ_OnCommand ) ); + CommandSystem.Register( "TileZ", AccessLevel.GameMaster, new CommandEventHandler( TileZ_OnCommand ) ); + } + + public static void Invoke( Mobile from, Point3D start, Point3D end, string[] args ) + { + Invoke( from, start, end, args, null ); + } + + public static void Invoke( Mobile from, Point3D start, Point3D end, string[] args, List packs ) + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat( "{0} {1} building ", from.AccessLevel, CommandLogging.Format( from ) ); + + if ( start == end ) + sb.AppendFormat( "at {0} in {1}", start, from.Map ); + else + sb.AppendFormat( "from {0} to {1} in {2}", start, end, from.Map ); + + sb.Append( ":" ); + + for ( int i = 0; i < args.Length; ++i ) + sb.AppendFormat( " \"{0}\"", args[i] ); + + CommandLogging.WriteLine( from, sb.ToString() ); + + string name = args[0]; + + FixArgs( ref args ); + + string[,] props = null; + + for ( int i = 0; i < args.Length; ++i ) + { + if ( Insensitive.Equals( args[i], "set" ) ) + { + int remains = args.Length - i - 1; + + if ( remains >= 2 ) + { + props = new string[remains / 2, 2]; + + remains /= 2; + + for ( int j = 0; j < remains; ++j ) + { + props[j, 0] = args[i + (j * 2) + 1]; + props[j, 1] = args[i + (j * 2) + 2]; + } + + FixSetString( ref args, i ); + } + + break; + } + } + + Type type = ScriptCompiler.FindTypeByName( name ); + + if ( !IsEntity( type ) ) { + from.SendMessage( "No type with that name was found." ); + return; + } + + DateTime time = DateTime.Now; + + int built = BuildObjects( from, type, start, end, args, props, packs ); + + if ( built > 0 ) + from.SendMessage( "{0} object{1} generated in {2:F1} seconds.", built, built != 1 ? "s" : "", (DateTime.Now - time).TotalSeconds ); + else + SendUsage( type, from ); + } + + public static void FixSetString( ref string[] args, int index ) + { + string[] old = args; + args = new string[index]; + + Array.Copy( old, 0, args, 0, index ); + } + + public static void FixArgs( ref string[] args ) + { + string[] old = args; + args = new string[args.Length - 1]; + + Array.Copy( old, 1, args, 0, args.Length ); + } + + public static int BuildObjects( Mobile from, Type type, Point3D start, Point3D end, string[] args, string[,] props, List packs ) + { + Utility.FixPoints( ref start, ref end ); + + PropertyInfo[] realProps = null; + + if ( props != null ) + { + realProps = new PropertyInfo[props.GetLength( 0 )]; + + PropertyInfo[] allProps = type.GetProperties( BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public ); + + for ( int i = 0; i < realProps.Length; ++i ) + { + PropertyInfo thisProp = null; + + string propName = props[i, 0]; + + for ( int j = 0; thisProp == null && j < allProps.Length; ++j ) + { + if ( Insensitive.Equals( propName, allProps[j].Name ) ) + thisProp = allProps[j]; + } + + if ( thisProp == null ) + { + from.SendMessage( "Property not found: {0}", propName ); + } + else + { + CPA attr = Properties.GetCPA( thisProp ); + + if ( attr == null ) + from.SendMessage( "Property ({0}) not found.", propName ); + else if ( from.AccessLevel < attr.WriteLevel ) + from.SendMessage( "Setting this property ({0}) requires at least {1} access level.", propName, Mobile.GetAccessLevelName( attr.WriteLevel ) ); + else if ( !thisProp.CanWrite || attr.ReadOnly ) + from.SendMessage( "Property ({0}) is read only.", propName ); + else + realProps[i] = thisProp; + } + } + } + + ConstructorInfo[] ctors = type.GetConstructors(); + + for ( int i = 0; i < ctors.Length; ++i ) + { + ConstructorInfo ctor = ctors[i]; + + if ( !IsConstructable( ctor, from.AccessLevel ) ) + continue; + + ParameterInfo[] paramList = ctor.GetParameters(); + + if ( args.Length == paramList.Length ) + { + object[] paramValues = ParseValues( paramList, args ); + + if ( paramValues == null ) + continue; + + int built = Build( from, start, end, ctor, paramValues, props, realProps, packs ); + + if ( built > 0 ) + return built; + } + } + + return 0; + } + + public static object[] ParseValues( ParameterInfo[] paramList, string[] args ) + { + object[] values = new object[args.Length]; + + for ( int i = 0; i < args.Length; ++i ) + { + object value = ParseValue( paramList[i].ParameterType, args[i] ); + + if ( value != null ) + values[i] = value; + else + return null; + } + + return values; + } + + public static object ParseValue( Type type, string value ) + { + try + { + if ( IsEnum( type ) ) + { + return Enum.Parse( type, value, true ); + } + else if ( IsType( type ) ) + { + return ScriptCompiler.FindTypeByName( value ); + } + else if ( IsParsable( type ) ) + { + return ParseParsable( type, value ); + } + else + { + object obj = value; + + if ( value != null && value.StartsWith( "0x" ) ) + { + if ( IsSignedNumeric( type ) ) + obj = Convert.ToInt64( value.Substring( 2 ), 16 ); + else if ( IsUnsignedNumeric( type ) ) + obj = Convert.ToUInt64( value.Substring( 2 ), 16 ); + + obj = Convert.ToInt32( value.Substring( 2 ), 16 ); + } + + if ( obj == null && !type.IsValueType ) + return null; + else + return Convert.ChangeType( obj, type ); + } + } + catch + { + return null; + } + } + + public static IEntity Build( Mobile from, ConstructorInfo ctor, object[] values, string[,] props, PropertyInfo[] realProps, ref bool sendError ) + { + object built = ctor.Invoke( values ); + + if ( built != null && realProps != null ) + { + bool hadError = false; + + for ( int i = 0; i < realProps.Length; ++i ) + { + if ( realProps[i] == null ) + continue; + + string result = Properties.InternalSetValue( from, built, built, realProps[i], props[i, 1], props[i, 1], false ); + + if ( result != "Property has been set." ) + { + if ( sendError ) + from.SendMessage( result ); + + hadError = true; + } + } + + if ( hadError ) + sendError = false; + } + + return (IEntity)built; + } + + public static int Build( Mobile from, Point3D start, Point3D end, ConstructorInfo ctor, object[] values, string[,] props, PropertyInfo[] realProps, List packs ) + { + try + { + Map map = from.Map; + + int objectCount = ( packs == null ? (((end.X - start.X) + 1) * ((end.Y - start.Y) + 1)) : packs.Count ); + + if ( objectCount >= 20 ) + from.SendMessage( "Constructing {0} objects, please wait.", objectCount ); + + bool sendError = true; + + StringBuilder sb = new StringBuilder(); + sb.Append( "Serials: " ); + + if ( packs != null ) + { + for ( int i = 0; i < packs.Count; ++i ) + { + IEntity built = Build( from, ctor, values, props, realProps, ref sendError ); + + sb.AppendFormat( "0x{0:X}; ", built.Serial.Value ); + + if ( built is Item ) { + Container pack = packs[i]; + pack.DropItem( (Item)built ); + } + else if ( built is Mobile ) { + Mobile m = (Mobile)built; + m.MoveToWorld( new Point3D( start.X, start.Y, start.Z ), map ); + } + } + } + else + { + for ( int x = start.X; x <= end.X; ++x ) + { + for ( int y = start.Y; y <= end.Y; ++y ) + { + IEntity built = Build( from, ctor, values, props, realProps, ref sendError ); + + sb.AppendFormat( "0x{0:X}; ", built.Serial.Value ); + + if ( built is Item ) { + Item item = (Item)built; + item.MoveToWorld( new Point3D( x, y, start.Z ), map ); + } + else if ( built is Mobile ) { + Mobile m = (Mobile)built; + m.MoveToWorld( new Point3D( x, y, start.Z ), map ); + } + } + } + } + + CommandLogging.WriteLine( from, sb.ToString() ); + + return objectCount; + } + catch ( Exception ex ) + { + Console.WriteLine(ex); + return 0; + } + } + + public static void SendUsage( Type type, Mobile from ) + { + ConstructorInfo[] ctors = type.GetConstructors(); + bool foundCtor = false; + + for ( int i = 0; i < ctors.Length; ++i ) + { + ConstructorInfo ctor = ctors[i]; + + if ( !IsConstructable( ctor, from.AccessLevel ) ) + continue; + + if ( !foundCtor ) + { + foundCtor = true; + from.SendMessage( "Usage:" ); + } + + SendCtor( type, ctor, from ); + } + + if ( !foundCtor ) + from.SendMessage( "That type is not marked constructable." ); + } + + public static void SendCtor( Type type, ConstructorInfo ctor, Mobile from ) + { + ParameterInfo[] paramList = ctor.GetParameters(); + + StringBuilder sb = new StringBuilder(); + + sb.Append( type.Name ); + + for ( int i = 0; i < paramList.Length; ++i ) + { + if ( i != 0 ) + sb.Append( ',' ); + + sb.Append( ' ' ); + + sb.Append( paramList[i].ParameterType.Name ); + sb.Append( ' ' ); + sb.Append( paramList[i].Name ); + } + + from.SendMessage( sb.ToString() ); + } + + public class AddTarget : Target + { + private string[] m_Args; + + public AddTarget( string[] args ) : base( -1, true, TargetFlags.None ) + { + m_Args = args; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + { + if ( p is Item ) + p = ((Item)p).GetWorldTop(); + else if ( p is Mobile ) + p = ((Mobile)p).Location; + + Point3D point = new Point3D( p ); + Add.Invoke( from, point, point, m_Args ); + } + } + } + + private class TileState + { + public bool m_UseFixedZ; + public int m_FixedZ; + public string[] m_Args; + + public TileState( string[] args ) : this( false, 0, args ) + { + } + + public TileState( int fixedZ, string[] args ) : this( true, fixedZ, args ) + { + } + + public TileState( bool useFixedZ, int fixedZ, string[] args ) + { + m_UseFixedZ = useFixedZ; + m_FixedZ = fixedZ; + m_Args = args; + } + } + + private static void TileBox_Callback( Mobile from, Map map, Point3D start, Point3D end, object state ) + { + TileState ts = (TileState)state; + + if ( ts.m_UseFixedZ ) + start.Z = end.Z = ts.m_FixedZ; + + Invoke( from, start, end, ts.m_Args ); + } + + [Usage( "Tile [params] [set { ...}]" )] + [Description( "Tiles an item or npc by name into a targeted bounding box. Optional constructor parameters. Optional set property list." )] + public static void Tile_OnCommand( CommandEventArgs e ) + { + if ( e.Length >= 1 ) + BoundingBoxPicker.Begin( e.Mobile, new BoundingBoxCallback( TileBox_Callback ), new TileState( e.Arguments ) ); + else + e.Mobile.SendMessage( "Format: Add [params] [set { ...}]" ); + } + + [Usage( "TileRXYZ [params] [set { ...}]" )] + [Description( "Tiles an item or npc by name into a given bounding box, (x, y) parameters are relative to your characters position. Optional constructor parameters. Optional set property list." )] + public static void TileRXYZ_OnCommand( CommandEventArgs e ) + { + if ( e.Length >= 6 ) + { + Point3D p = new Point3D( e.Mobile.X + e.GetInt32( 0 ), e.Mobile.Y + e.GetInt32( 1 ), e.Mobile.Z + e.GetInt32( 4 ) ); + Point3D p2 = new Point3D( p.X + e.GetInt32( 2 ) - 1, p.Y + e.GetInt32( 3 ) - 1, p.Z ); + + string[] subArgs = new string[e.Length - 5]; + + for ( int i = 0; i < subArgs.Length; ++i ) + subArgs[i] = e.Arguments[i + 5]; + + Add.Invoke( e.Mobile, p, p2, subArgs ); + } + else + { + e.Mobile.SendMessage( "Format: TileRXYZ [params] [set { ...}]" ); + } + } + + [Usage( "TileXYZ [params] [set { ...}]" )] + [Description( "Tiles an item or npc by name into a given bounding box. Optional constructor parameters. Optional set property list." )] + public static void TileXYZ_OnCommand( CommandEventArgs e ) + { + if ( e.Length >= 6 ) + { + Point3D p = new Point3D( e.GetInt32( 0 ), e.GetInt32( 1 ), e.GetInt32( 4 ) ); + Point3D p2 = new Point3D( p.X + e.GetInt32( 2 ) - 1, p.Y + e.GetInt32( 3 ) - 1, e.GetInt32( 4 ) ); + + string[] subArgs = new string[e.Length - 5]; + + for ( int i = 0; i < subArgs.Length; ++i ) + subArgs[i] = e.Arguments[i + 5]; + + Add.Invoke( e.Mobile, p, p2, subArgs ); + } + else + { + e.Mobile.SendMessage( "Format: TileXYZ [params] [set { ...}]" ); + } + } + + [Usage( "TileZ [params] [set { ...}]" )] + [Description( "Tiles an item or npc by name into a targeted bounding box at a fixed Z location. Optional constructor parameters. Optional set property list." )] + public static void TileZ_OnCommand( CommandEventArgs e ) + { + if ( e.Length >= 2 ) + { + string[] subArgs = new string[e.Length - 1]; + + for ( int i = 0; i < subArgs.Length; ++i ) + subArgs[i] = e.Arguments[i + 1]; + + BoundingBoxPicker.Begin( e.Mobile, new BoundingBoxCallback( TileBox_Callback ), new TileState( e.GetInt32( 0 ), subArgs ) ); + } + else + { + e.Mobile.SendMessage( "Format: TileZ [params] [set { ...}]" ); + } + } + + private static Type m_EntityType = typeof( IEntity ); + + public static bool IsEntity( Type t ) + { + return m_EntityType.IsAssignableFrom( t ); + } + + private static Type m_ConstructableType = typeof( ConstructableAttribute ); + + public static bool IsConstructable( ConstructorInfo ctor, AccessLevel accessLevel ) + { + object[] attrs = ctor.GetCustomAttributes( m_ConstructableType, false ); + + if ( attrs.Length == 0 ) + return false; + + return accessLevel >= ((ConstructableAttribute)attrs[0]).AccessLevel; + } + + private static Type m_EnumType = typeof( Enum ); + + public static bool IsEnum( Type type ) + { + return type.IsSubclassOf( m_EnumType ); + } + + private static Type m_TypeType = typeof( Type ); + + public static bool IsType( Type type ) + { + return ( type == m_TypeType || type.IsSubclassOf( m_TypeType ) ); + } + + private static Type m_ParsableType = typeof( ParsableAttribute ); + + public static bool IsParsable( Type type ) + { + return type.IsDefined( m_ParsableType, false ); + } + + private static Type[] m_ParseTypes = new Type[]{ typeof( string ) }; + private static object[] m_ParseArgs = new object[1]; + + public static object ParseParsable( Type type, string value ) + { + MethodInfo method = type.GetMethod( "Parse", m_ParseTypes ); + + m_ParseArgs[0] = value; + + return method.Invoke( null, m_ParseArgs ); + } + + private static Type[] m_SignedNumerics = new Type[] + { + typeof( Int64 ), + typeof( Int32 ), + typeof( Int16 ), + typeof( SByte ) + }; + + public static bool IsSignedNumeric( Type type ) + { + for ( int i = 0; i < m_SignedNumerics.Length; ++i ) + if ( type == m_SignedNumerics[i] ) + return true; + + return false; + } + + private static Type[] m_UnsignedNumerics = new Type[] + { + typeof( UInt64 ), + typeof( UInt32 ), + typeof( UInt16 ), + typeof( Byte ) + }; + + public static bool IsUnsignedNumeric( Type type ) + { + for ( int i = 0; i < m_UnsignedNumerics.Length; ++i ) + if ( type == m_UnsignedNumerics[i] ) + return true; + + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/AddonGenerator.cs b/Scripts/Commands/Admin/AddonGenerator.cs new file mode 100644 index 0000000..41db08e --- /dev/null +++ b/Scripts/Commands/Admin/AddonGenerator.cs @@ -0,0 +1,907 @@ +/* +Package Name: CEO's Yet Another Arya Addon Generator (YAAAG) +Author: CEO +Version: 1.2 +Public Release: 09/25/07 +Purpose: Generates AddOns from statics, items, and tiles. Oh my! +*/ +/* Modified to work with the new SA & High Seas items by Hammerhand */ +// If you're using an SVN that supports List<> methods (remove the //s) to use those instead of arrays or add them for RC1. +#define RC2 +//#define DEBUG +#undef DEBUG +using System; +using System.Collections; +using System.IO; +using Server; +using Server.Items; +using Server.Gumps; +using Server.Commands; +using System.Collections.Generic; +using Server.ContextMenus; +using Server.Network; +using Server.Targeting; + +namespace Arya.Misc +{ + public class AddonGenerator + { + /// + /// Set this value if you wish the scripts to be output somewhere else rather than in the default RunUO\TheBox + /// directory. This should be a full valid path on your computer + /// + /// Example: + /// + /// private static string m_CustomOutputDirector = @"C:\Program Files\RunUO\Scripts\Custom\Addons"; + /// + private static string m_CustomOutputDirectory = null; + + #region Template + + private const string m_SimpleCode = @" + for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] );"; + + private const string m_ComplexCode = @" + for (int i = 0; i < m_AddOnComplexComponents.Length / 6; i++) + AddComplexComponent( (BaseAddon)this, m_AddOnComplexComponents[i,0], m_AddOnComplexComponents[i,1], m_AddOnComplexComponents[i,2], m_AddOnComplexComponents[i,3], m_AddOnComplexComponents[i,4], m_AddOnComplexComponents[i,5] );"; + + private const string m_ComplexNameCode = @" + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource) + { + AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1); + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount) + { + AddonComponent ac; + ac = new AddonComponent(item); + if (name != null && name.Length > 0) + ac.Name = name; + if (hue != 0) + ac.Hue = hue; + if (amount > 1) + { + ac.Stackable = true; + ac.Amount = amount; + } + if (lightsource != -1) + ac.Light = (LightType) lightsource; + addon.AddComponent(ac, xoffset, yoffset, zoffset); + }"; + + private const string m_Template = @" +//////////////////////////////////////// +// // +// Generated by CEO's YAAAG - Ver 2 // +// (Yet Another Arya Addon Generator) // +// Modified by Hammerhand for // +// SA & High Seas content // +// // +//////////////////////////////////////// +using System; +using Server; +using Server.Items; + +namespace {namespace} +{ + public class {name}Addon : BaseAddon + { + {simplelist} + {complexlist} + public override BaseAddonDeed Deed + { + get + { + return new {name}AddonDeed(); + } + } + + [ Constructable ] + public {name}Addon() + { +{simplecomponentscode} +{complexcomponentscode} +{namedcomponentscode} + } + + public {name}Addon( Serial serial ) : base( serial ) + { + } +{complexnamecomponentscode} + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class {name}AddonDeed : BaseAddonDeed + { + public override BaseAddon Addon + { + get + { + return new {name}Addon(); + } + } + + [Constructable] + public {name}AddonDeed() + { + Name = ""{name}""; + } + + public {name}AddonDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +}"; + + #endregion + + public static void Initialize() + { + CommandSystem.Register("AddonGen", AccessLevel.Administrator, new CommandEventHandler(OnAddonGen)); + } + + #region Command + [Usage("AddonGen [ [namespace]]"), + Description("Brings up the addon script generator gump. When used with the name (and eventually namespace) parameter generates an addon script from the targeted region.")] + private static void OnAddonGen(CommandEventArgs e) + { + + object[] state = new object[18]; + + state[0] = ""; + state[1] = "Server.Items"; + state[2] = true; + state[3] = false; + state[4] = false; + state[5] = true; + state[6] = true; + state[7] = true; + state[8] = true; + state[9] = -128; + state[10] = 127; + state[11] = state[13] = state[15] = 2; + state[12] = state[14] = state[16] = 36653; + + if (e.Arguments.Length > 0) + { + state[0] = e.Arguments[0]; + + if (e.Arguments.Length > 1) + state[1] = e.Arguments[1]; + } + e.Mobile.SendGump(new InternalGump(e.Mobile, state)); + } + #endregion + + private static void PickerCallback(Mobile from, Map map, Point3D start, Point3D end, object state) + { + object[] args = state as object[]; + int m_SimpleComponents = 0; + int m_ComplexComponents = 0; + int m_NamedComponents = 0; + int m_TotalComponents = 0; + + if (start.X > end.X) + { + int x = start.X; + start.X = end.X; + end.X = x; + } + + if (start.Y > end.Y) + { + int y = start.Y; + start.Y = end.Y; + end.Y = y; + } + + Rectangle2D bounds = new Rectangle2D(start, end); + + string name = args[0] as string; + string ns = args[1] as string; + + bool getStatics = (bool)args[2]; + bool getItems = (bool)args[3]; + bool getTiles = (bool)args[4]; + bool includeStaticRange = (bool)args[5]; + bool includeItemRange = (bool)args[6]; + bool includeTileRange = (bool)args[7]; + bool includeZRange = (bool)args[8]; + bool generateTest = (bool)args[17]; + + sbyte min = sbyte.MinValue; + sbyte max = sbyte.MaxValue; + + int minStaticID = 2; + int maxStaticID = 36653; + int minItemID = 2; + int maxItemID = 36653; + int minTileID = 2; + int maxTileID = 36653; + + try { min = sbyte.Parse(args[9] as string); } + catch { } + try { max = sbyte.Parse(args[10] as string); } + catch { } + try { minStaticID = int.Parse(args[11] as string); } + catch { } + try { maxStaticID = int.Parse(args[12] as string); } + catch { } + try { minItemID = int.Parse(args[13] as string); } + catch { } + try { maxItemID = int.Parse(args[14] as string); } + catch { } + try { minTileID = int.Parse(args[15] as string); } + catch { } + try { maxTileID = int.Parse(args[16] as string); } + catch { } + + Hashtable tiles = new Hashtable(); + + if (getTiles) + { + for (int x = start.X; x <= end.X; x++) + { + for (int y = start.Y; y <= end.Y; y++) + { +#if RC2 + StaticTile[] stlist = map.Tiles.GetStaticTiles(x, y, true); + List list = new List(); + List remove = new List(); +#else + ArrayList list = map.GetTilesAt(new Point2D(x, y), false, false, true); + ArrayList remove = new ArrayList(); +#endif + + foreach (StaticTile t in stlist) + { + list.Add(t); + + int id = t.ID - 36653; + if (id < 2 || id > 36653) + remove.Add(t); + else if (includeZRange && (t.Z < min || t.Z > max)) + remove.Add(t); + else if (!includeZRange && (t.Z >= min && t.Z <= max)) + remove.Add(t); + else if (includeTileRange && (id < minTileID || id > maxTileID)) + remove.Add(t); + else if (!includeTileRange && (id >= minTileID && id <= maxTileID)) + remove.Add(t); + } + + foreach (StaticTile t in remove) + { + list.Remove(t); + } + + if (list != null && list.Count > 0) + { + tiles[new Point2D(x, y)] = list; + } + } + } + } + + IPooledEnumerable en = map.GetItemsInBounds(bounds); + ArrayList target = new ArrayList(); + bool fail = false; + + try + { + foreach (object o in en) + { + if (getStatics) + { + Static s = o as Static; + if (s == null) + { } + else if (s.Deleted) + { } + else if (includeZRange && (s.Z < min || s.Z > max)) + continue; + else if (!includeZRange && (s.Z >= min && s.Z <= max)) + continue; + else if (includeStaticRange && (s.ItemID < minStaticID || s.ItemID > maxStaticID)) + continue; + else if (!includeStaticRange && (s.ItemID >= minStaticID && s.ItemID <= maxStaticID)) + continue; + else + { + target.Add(o); +#if DEBUG + Console.WriteLine("Static={0}:{1}", s.GetType().ToString(), s.ItemID); +#endif + continue; + } + } + if (getItems) + { + Static s = o as Static; + if (s != null) // Don't want a static + continue; + Item i = o as Item; + if (i == null) + continue; + else if (i.Deleted) + continue; + else if (i is BaseAddon) // Not a good idea to add a BaseAddOn for obvious reasons + continue; + else if (i.ItemID < 2 || i.ItemID > 36653) // This is not an Item within the normal artwork.. multi... etc.. Toss it + continue; + else if (includeZRange && (i.Z < min || i.Z > max)) + continue; + else if (!includeZRange && (i.Z >= min && i.Z <= max)) + continue; + else if (includeItemRange && (i.ItemID < minItemID || i.ItemID > maxItemID)) + continue; + else if (!includeItemRange && (i.ItemID >= minItemID && i.ItemID <= maxItemID)) + continue; +#if DEBUG + Console.WriteLine("item={0}:{1}, {2}-map{3}", i.GetType().ToString(), i.ItemID, i.Deleted, i.Map); +#endif + target.Add(o); + } + } + } + catch (Exception err) + { + Console.WriteLine(err.ToString()); + from.SendMessage(0x40, "The targeted components have been modified. Please retry."); + fail = true; + } + finally + { + en.Free(); + } + + if (fail) + return; + + if (target.Count == 0 && tiles.Keys.Count == 0) + { + from.SendMessage(0x40, "No components have been selected."); + from.SendGump(new InternalGump(from, args)); + return; + } + + // Get center + Point3D center = new Point3D(); + center.Z = 127; + + int x1 = bounds.End.X; + int y1 = bounds.End.Y; + int x2 = bounds.Start.X; + int y2 = bounds.Start.Y; + + // Get correct bounds + foreach (Item item in target) + { + if (item.Z < center.Z) + { + center.Z = item.Z; + } + + x1 = Math.Min(x1, item.X); + y1 = Math.Min(y1, item.Y); + x2 = Math.Max(x2, item.X); + y2 = Math.Max(y2, item.Y); + } + CEOIdentifyAddon IdentifyAddon = null; + + if (generateTest) + IdentifyAddon = new CEOIdentifyAddon("init"); + + foreach (Point2D p in tiles.Keys) + { +#if RC2 + List list = tiles[p] as List; +#else + ArrayList list = tiles[p] as ArrayList; +#endif + + if (list == null) + { + Console.WriteLine("The list is null... "); + return; + } + + foreach (StaticTile t in list) + { + if (t.Z < center.Z) + { + center.Z = t.Z; + } + } + + x1 = Math.Min(x1, p.X); + y1 = Math.Min(y1, p.Y); + x2 = Math.Max(x2, p.X); + y2 = Math.Max(y2, p.Y); + } + + center.X = x1 + ((x2 - x1) / 2); + center.Y = y1 + ((y2 - y1) / 2); + + // Build items + System.Text.StringBuilder nc = new System.Text.StringBuilder(); + nc.Append("\n"); + System.Text.StringBuilder sl = new System.Text.StringBuilder(); + sl.Append("private static int[,] m_AddOnSimpleComponents = new int[,] {\n\t\t\t "); + System.Text.StringBuilder cl = new System.Text.StringBuilder(); + cl.Append("private static int[,] m_AddOnComplexComponents = new int[,] {\n\t\t\t "); + System.Text.StringBuilder sc = new System.Text.StringBuilder(); + sc.Append("// "); + System.Text.StringBuilder cc = new System.Text.StringBuilder(); + cc.Append("// "); + + int simplecount = 0; + int complexcount = 0; + // Tiles + foreach (Point2D p in tiles.Keys) + { +#if RC2 + List list = tiles[p] as List; +#else + ArrayList list = tiles[p] as ArrayList; +#endif + int xOffset = p.X - center.X; + int yOffset = p.Y - center.Y; + + foreach (StaticTile t in list) + { + int zOffset = t.Z - center.Z; + int id = t.ID - 36653; + m_SimpleComponents++; + simplecount++; + m_TotalComponents++; + sc.AppendFormat("{0}\t ", m_TotalComponents); + if (simplecount > 1) + sl.Append(", "); + sl.Append("{"); + sl.AppendFormat("{0}, {1}, {2}, {3}", id, xOffset, yOffset, zOffset); + sl.Append("}"); + if (simplecount % 3 == 0) + { + sl.AppendFormat("{0}\n\t\t\t", sc.ToString()); + sc.Length = 0; + sc.Append("// "); + } + if (generateTest) + AddIdentifyAddOnComponent(IdentifyAddon, id, xOffset, yOffset, zOffset, 0, -1, string.Format("({0}):{1},{2},{3}", m_TotalComponents, xOffset, yOffset, zOffset), 0); + } + } + // Statics & Items + foreach (Item item in target) + { + if (item.Deleted) + continue; + int xOffset = item.X - center.X; + int yOffset = item.Y - center.Y; + int zOffset = item.Z - center.Z; + int id = item.ItemID; + + if (((item.ItemData.Flags & TileFlag.LightSource) == TileFlag.LightSource) || (item.Hue != 0) || (item.Name != null) || item.Amount > 1) // Use old method + { + if (item.Name != null || item.Amount != 0) // Have to do this one the old method + { + m_NamedComponents++; + m_TotalComponents++; + int lightsource = -1; + if ((item.ItemData.Flags & TileFlag.LightSource) == TileFlag.LightSource) + lightsource = (int)item.Light; + nc.AppendFormat("\t\t\tAddComplexComponent( (BaseAddon) this, {0}, {1}, {2}, {3}, {4}, {5}, \"{6}\", {7});// {8}\n", id, xOffset, yOffset, zOffset, item.Hue, lightsource, item.Name, item.Amount, m_TotalComponents); + if (generateTest) + AddIdentifyAddOnComponent(IdentifyAddon, id, xOffset, yOffset, zOffset, item.Hue, -1, string.Format("({0},{1}): {2}, {3}, {4}", m_TotalComponents, id, xOffset, yOffset, zOffset), item.Amount); + + } + else //if (item.Hue != 0 || (item.ItemData.Flags & TileFlag.LightSource) == TileFlag.LightSource) + { + int lightsource = -1; + if ((item.ItemData.Flags & TileFlag.LightSource) == TileFlag.LightSource) + lightsource = (int)item.Light; + m_ComplexComponents++; + m_TotalComponents++; + cc.AppendFormat("{0}\t", m_TotalComponents); + complexcount++; + if (complexcount > 1) + cl.Append(", "); + cl.Append("{"); + cl.AppendFormat("{0}, {1}, {2}, {3}, {4}, {5} ", id, xOffset, yOffset, zOffset, item.Hue, lightsource); + cl.Append("}"); + if (complexcount % 3 == 0) + { + cl.AppendFormat("{0}\n\t\t\t", cc.ToString()); + cc.Length = 0; + cc.Append("// "); + } + if (generateTest) + AddIdentifyAddOnComponent(IdentifyAddon, id, xOffset, yOffset, zOffset, item.Hue, -1, string.Format("({0},{1}): {2}, {3}, {4}", m_TotalComponents, id, xOffset, yOffset, zOffset), 0); + } + } + else // Add data to static table + { + m_SimpleComponents++; + m_TotalComponents++; + sc.AppendFormat("{0}\t", m_TotalComponents); + simplecount++; + if (simplecount > 1) + sl.Append(", "); + sl.Append("{"); + sl.AppendFormat("{0}, {1}, {2}, {3}", id, xOffset, yOffset, zOffset); + sl.Append("}"); + if (simplecount % 3 == 0) + { + sl.AppendFormat("{0}\n\t\t\t", sc.ToString()); + sc.Length = 0; + sc.Append("// "); + } + if (generateTest) + AddIdentifyAddOnComponent(IdentifyAddon, id, xOffset, yOffset, zOffset, item.Hue, -1, string.Format("({0},{1}): {2}, {3}, {4}", m_TotalComponents, id, xOffset, yOffset, zOffset), 0); + } + } + if (sc.Length > 4) + sl.AppendFormat("{0}\n", sc.ToString()); + if (cc.Length > 4) + cl.AppendFormat("{0}\n", cc.ToString()); + if (m_SimpleComponents > 0) + sl.Append("\t\t};\n\n"); + if (m_ComplexComponents > 0) + cl.Append("\t\t};\n\n"); + + string output = m_Template.Replace("{name}", name); + output = output.Replace("{simplelist}", m_SimpleComponents > 0 ? sl.ToString() : ""); + output = output.Replace("{simplecomponentscode}", m_SimpleComponents > 0 ? m_SimpleCode : ""); + output = output.Replace("{complexlist}", m_ComplexComponents > 0 ? cl.ToString() : ""); + output = output.Replace("{complexcomponentscode}", m_ComplexComponents > 0 ? m_ComplexCode : ""); + output = output.Replace("{namedcomponentscode}", m_NamedComponents > 0 ? nc.ToString() : ""); + output = output.Replace("{complexnamecomponentscode}", (m_ComplexComponents > 0 || m_NamedComponents > 0) ? m_ComplexNameCode : ""); + + output = output.Replace("{namespace}", ns); + + StreamWriter writer = null; + string path = null; + + if (m_CustomOutputDirectory != null) + path = Path.Combine(m_CustomOutputDirectory, string.Format(@"TheBox\{0}Addon.cs", name)); + else + path = Path.Combine(Core.BaseDirectory, string.Format(@"TheBox\{0}Addon.cs", name)); + + fail = false; + + try + { + string folder = Path.GetDirectoryName(path); + + if (!Directory.Exists(folder)) + { + Directory.CreateDirectory(folder); + } + + writer = new StreamWriter(path, false); + writer.Write(output); + } + catch + { + from.SendMessage(0x40, "An error occurred when writing the file."); + fail = true; + } + finally + { + if (writer != null) + writer.Close(); + } + + if (!fail) + { + from.SendMessage(0x40, "Script saved to {0}", path); + from.SendMessage(0x40, "Total components in AddOn: {0}", m_TotalComponents); + if (generateTest && IdentifyAddon != null) + { + from.SendMessage(0x37, "Now target a land tile to place a your addon."); + from.Target = new InternalTarget(IdentifyAddon); + } + } + } + + private static void AddIdentifyAddOnComponent(CEOIdentifyAddon ai, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount) + { + if (ai == null) + return; + AddonComponent ac; + ac = new AddonComponent(item); + if (name != null && name.Length > 0) + ac.Name = name; + if (hue != 0) + ac.Hue = hue; + if (amount > 1) // Note: a warning will show on the console regarding a non-stackable item.... + { + ac.Stackable = true; + ac.Amount = amount; + } + if (lightsource != -1) + ac.Light = (LightType)lightsource; + ai.AddComponent(ac, xoffset, yoffset, zoffset); + } + + private class InternalTarget : Target + { + private CEOIdentifyAddon m_IdentifyAddon; + + public InternalTarget(CEOIdentifyAddon IdentifyAddon) + : base(12, false, TargetFlags.None) + { + m_IdentifyAddon = IdentifyAddon; + CheckLOS = true; + AllowGround = true; + DisallowMultis = true; + Range = 15; + } + + protected override void OnTargetCancel(Mobile from, TargetCancelType cancelType) + { + if (m_IdentifyAddon != null) + m_IdentifyAddon.Delete(); + } + + protected override void OnTarget(Mobile from, object o) + { + if (o != null) + { + if (o is LandTarget) + { + LandTarget l = o as LandTarget; + m_IdentifyAddon.MoveToWorld(l.Location, from.Map); + } + else + { + from.SendMessage(37, "Use must target a land tile to place your addon."); + if (m_IdentifyAddon != null) + m_IdentifyAddon.Delete(); + } + + } + } + + } + #region Gump + private class InternalGump : Gump + { + private const int LabelHue = 0x480; + private const int TitleHue = 0x35; + private object[] m_State; + + public InternalGump(Mobile m, object[] state) + : base(100, 50) + { + m.CloseGump(typeof(InternalGump)); + m_State = state; + MakeGump(); + } + + private void MakeGump() + { + Closable = true; + Disposable = true; + Dragable = true; + Resizable = false; + AddPage(0); + AddBackground(0, 0, 440, 260, 9260); + //AddAlphaRegion(10, 10, 430, 260); //uncomment this line if you like see-thru menus + AddHtml(0, 15, 440, 20, Center(Color("CEO's Yet Another Arya Addon Generator(YAAAG)", 0x000080)), false, false); + int x = 40; + AddLabel(20, x, LabelHue, @"Name"); + AddImageTiled(95, x, 165, 18, 9274); + AddTextEntry(95, x, 165, 20, LabelHue, 0, m_State[0] as string); // Name + x += 20; + AddLabel(20, x, LabelHue, @"Namespace"); + AddImageTiled(95, x, 165, 18, 9274); + AddTextEntry(95, x, 165, 20, LabelHue, 1, m_State[1] as string); // Namespace + AddLabel(340, x, TitleHue, @"ID Range"); + x += 20; + AddLabel(20, x, TitleHue, @"Export"); + AddLabel(170, x, TitleHue, @"ID Range"); + AddLabel(320, x, TitleHue, @"Include/Exclude"); + x += 25; + // Export Statics, Items, and Tiles + string[] exportString = new string[] { "Statics", "Items", "Tiles" }; + for (int i = 0; i < 3; i++) + { + DisplayExportLine(x, i, ((bool)m_State[i + 2]), ((bool)m_State[i + 5]), exportString[i], m_State[11 + (i * 2)].ToString(), m_State[12 + (i * 2)].ToString()); + x += (i < 2 ? 25 : 15); + } + AddImageTiled(15, x + 15, 420, 1, 9304); + x += 25; + // Z Range + AddCheck(350, x, 9026, 9027, ((bool)m_State[8]), 6); + AddLabel(20, x, LabelHue, @"Z Range"); + AddImageTiled(115, x + 15, 50, 1, 9274); + AddTextEntry(115, x - 5, 50, 20, LabelHue, 2, m_State[9].ToString()); + AddLabel(185, x, LabelHue, @"to"); + AddImageTiled(225, x + 15, 50, 1, 9274); + AddTextEntry(225, x - 5, 50, 20, LabelHue, 3, m_State[10].ToString()); + x += 25; + + // Buttons + AddButton(20, x, 4020, 4021, 0, GumpButtonType.Reply, 0); + AddLabel(55, x, LabelHue, @"Cancel"); + AddButton(155, x, 4005, 4006, 1, GumpButtonType.Reply, 0); + AddLabel(195, x, LabelHue, @"Generate"); + AddButton(300, x, 4005, 4006, 2, GumpButtonType.Reply, 0); + AddLabel(340, x, LabelHue, @"Test & Gen"); + } + + private void DisplayExportLine(int x, int index, bool state, bool include, string heading, string min, string max) + { + AddCheck(20, x, 9026, 9027, state, index); + AddLabel(40, x, LabelHue, heading); + AddImageTiled(115, x + 15, 50, 1, 9274); + AddTextEntry(115, x - 5, 50, 20, LabelHue, 4 + (index * 2), min);// Tile ID Min + AddLabel(185, x, LabelHue, @"to"); + AddImageTiled(225, x + 15, 50, 1, 9274); + AddTextEntry(225, x - 5, 50, 20, LabelHue, 5 + (index * 2), max);// Tile ID Max + AddCheck(350, x, 9026, 9027, include, index + 3); // Include or Exclude compare? + } + + private string Center(string text) + { + return String.Format("
{0}
", text); + } + + private string Color(string text, int color) + { + return String.Format("{1}", color, text); + } + + public override void OnResponse(Server.Network.NetState sender, RelayInfo info) + { + if (info.ButtonID == 0) + return; + else if (info.ButtonID == 1) + m_State[17] = false; + else + m_State[17] = true; + + foreach (TextRelay text in info.TextEntries) + m_State[text.EntryID < 2 ? text.EntryID : text.EntryID + 7] = text.Text; + + // Reset checks + for (int x = 2; x <= 8; x++) + m_State[x] = false; + + foreach (int check in info.Switches) + m_State[check + 2] = true; // Offset by 2 in the state object + + if (Verify(sender.Mobile, m_State)) + { + BoundingBoxPicker.Begin(sender.Mobile, new BoundingBoxCallback(AddonGenerator.PickerCallback), m_State); + } + else + { + sender.Mobile.SendMessage(0x40, "Please review the generation parameters, some are invalid."); + sender.Mobile.SendGump(new InternalGump(sender.Mobile, m_State)); + } + } + + private static bool Verify(Mobile from, object[] state) + { + if (state[0] == null || (state[0] as string).Length == 0) + { + from.SendMessage(0x40, "Name field is invalid or missing."); + return false; + } + + if (state[1] == null || (state[1] as string).Length == 0) + { + from.SendMessage(0x40, "Namespace field is invalid or missing."); + return false; + } + + if (!((bool)state[2] || (bool)state[3] || (bool)state[4])) + { + from.SendMessage(0x40, "You must have least one Export button selected. (Static/Items/Tiles)"); + return false; + } + + string[] errors = new string[] {"Z Range Min", "Z Range Max","Static Min ID", "Static Max ID", + "Item Min ID", "Item Max ID", "Tile Min ID", "Tile Max ID"}; + + for (int x = 0; x < 8; x++) + if (!CheckNumber(x < 2 ? 0 : 1, state[x + 9] as string, errors[x], from)) + return false; + return true; + } + + private static bool CheckNumber(int numType, string number, string error, Mobile from) + { + sbyte sbyteTemp; + int intTemp; + try + { + if (numType == 0) + sbyteTemp = sbyte.Parse(number); + else + intTemp = int.Parse(number); + } + catch + { + from.SendMessage(0x40, "There's a problem with the {0} field.", error); + return false; + } + + return true; + } + } + #endregion + } +} + +#region CEOIdentifyAddon +namespace Server.Items +{ + public class CEOIdentifyAddon : BaseAddon + { + + [Constructable] + public CEOIdentifyAddon(string init) + { + // Nothing really here, just prevents adding a null contruct via [add command + } + + [Constructable] + public CEOIdentifyAddon() + { + this.Delete(); + } + + public CEOIdentifyAddon(Serial serial) + : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write(0); // Version + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + if (this.Map == null || this.Map == Map.Internal) + this.Delete(); // Remove it because it's most + } + + public void ReDeed(Mobile m) + { + this.Delete(); + } + + } +} +#endregion diff --git a/Scripts/Commands/Admin/AreaLog.cs b/Scripts/Commands/Admin/AreaLog.cs new file mode 100644 index 0000000..28c228b --- /dev/null +++ b/Scripts/Commands/Admin/AreaLog.cs @@ -0,0 +1,47 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Items; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; +using Server.Mobiles; +using Server.Accounting; +using Server.Regions; +using System.IO; +using Server.Targeting; +using System.Text; + +namespace Server.Scripts.Commands +{ + public class AreaLog + { + public static void Initialize() + { + CommandSystem.Register("AreaLog", AccessLevel.Counselor, new CommandEventHandler( AreaLogs )); + } + + [Usage("AreaLog")] + [Description("Records the x and y coordinates of an area.")] + public static void AreaLogs( CommandEventArgs e ) + { + e.Mobile.SendMessage( "What area do you want to log?" ); + BeginArea( e.Mobile ); + } + + public static void BeginArea( Mobile mob ) + { + BoundingBoxPicker.Begin(mob, new BoundingBoxCallback(Area_Callback), new object[]{ "area.txt" } ); + } + + private static void Area_Callback(Mobile mob, Map map, Point3D start, Point3D end, object state ) + { + StreamWriter w = File.AppendText("area.txt"); + w.WriteLine( "" ); + w.Close(); + mob.SendMessage( ( start.X - 1 ) + " " + ( start.Y - 1 ) + " " + ( end.X + 1 ) + " " + ( end.Y + 1 ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/BodyTypes.cs b/Scripts/Commands/Admin/BodyTypes.cs new file mode 100644 index 0000000..ea8f381 --- /dev/null +++ b/Scripts/Commands/Admin/BodyTypes.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Items; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; +using Server.Mobiles; +using Server.Accounting; +using Server.Regions; +using System.IO; +using Server.Targeting; + +namespace Server.Scripts.Commands +{ + public class BodyTypes + { + public static void Initialize() + { + CommandSystem.Register("BodyTypes", AccessLevel.Counselor, new CommandEventHandler( BodyTypess )); + } + + [Usage("BodyTypes")] + [Description("Increments a nearby creature's body by 1 point.")] + public static void BodyTypess( CommandEventArgs e ) + { + foreach ( Mobile m in (e.Mobile).GetMobilesInRange( 5 ) ) + { + if ( m is BaseCreature ) + { + m.BodyValue = m.BodyValue + 1; + m.Say( "" + m.BodyValue + "" ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/BuildWorld.cs b/Scripts/Commands/Admin/BuildWorld.cs new file mode 100644 index 0000000..67499d3 --- /dev/null +++ b/Scripts/Commands/Admin/BuildWorld.cs @@ -0,0 +1,43 @@ +using Server.Accounting; +using Server.Commands.Generic; +using Server.Commands; +using Server.Items; +using Server.Misc; +using Server.Mobiles; +using Server.Network; +using Server.Regions; +using Server; +using System.Collections.Generic; +using System.Collections; +using System.IO; +using System; + +namespace Server.Scripts.Commands +{ + public class BuildWorld + { + public static void Initialize() + { + CommandSystem.Register("BuildWorld", AccessLevel.Counselor, new CommandEventHandler( BuildWorlds )); + } + + [Usage("BuildWorld")] + [Description("This cleans up the world and rebuilds it, leaving players intact.")] + public static void BuildWorlds( CommandEventArgs e ) + { + Server.Commands.Decorate.Decorate_OnCommand( e ); + + Server.SpawnGenerator.Parse( e.Mobile, "towns.map" ); + Server.SpawnGenerator.Parse( e.Mobile, "graveyards.map" ); + Server.SpawnGenerator.Parse( e.Mobile, "land.map" ); + Server.SpawnGenerator.Parse( e.Mobile, "dungeons.map" ); + Server.SpawnGenerator.Parse( e.Mobile, "labyrinths.map" ); + Server.SpawnGenerator.Parse( e.Mobile, "mazes.map" ); + if ( Server.Misc.Settings.PopulateTowns() ){ Server.SpawnGenerator.Parse( e.Mobile, "citizens.map" ); } + + Server.Regions.SpawnEntry.RespawnAllRegions_OnCommand( e ); + + e.Mobile.SendMessage( "The world has been rebuilt." ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/FaceLog.cs b/Scripts/Commands/Admin/FaceLog.cs new file mode 100644 index 0000000..ec210de --- /dev/null +++ b/Scripts/Commands/Admin/FaceLog.cs @@ -0,0 +1,57 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Items; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; +using Server.Mobiles; +using Server.Accounting; +using Server.Regions; +using System.IO; + +namespace Server.Scripts.Commands +{ + public class FaceLog + { + public static void Initialize() + { + CommandSystem.Register("FaceLog", AccessLevel.Counselor, new CommandEventHandler( FaceLogs )); + } + + [Usage("FaceLog")] + [Description("Records the x, y, and z coordinates of the caller...along with the map they are in.")] + public static void FaceLogs( CommandEventArgs e ) + { + Mobile m = e.Mobile; + string sX = m.X.ToString(); + string sY = m.Y.ToString(); + string sZ = m.Z.ToString(); + + string sRegion = m.Region.Name; + + string sMap = "Map.Britannia"; + if ( m.Map == Map.Underworld ){ sMap = "Map.Underworld"; } + + string sDirection = "East"; + + if ( m.Direction == Direction.North ){ sDirection = "North"; } + else if ( m.Direction == Direction.Right ){ sDirection = "Right"; } + else if ( m.Direction == Direction.East ){ sDirection = "East"; } + else if ( m.Direction == Direction.Down ){ sDirection = "Down"; } + else if ( m.Direction == Direction.South ){ sDirection = "South"; } + else if ( m.Direction == Direction.Left ){ sDirection = "Left"; } + else if ( m.Direction == Direction.West ){ sDirection = "West"; } + else if ( m.Direction == Direction.Up ){ sDirection = "Up"; } + + StreamWriter w = File.AppendText("facing.txt"); + w.WriteLine( sRegion + "\t" + "(" + sX + ", " + sY + ", " + sZ + ")\t" + sMap + "\t" + sDirection ); + + w.Close(); + + m.SendMessage( sRegion + " " + "(" + sX + ", " + sY + ", " + sZ + ") " + sMap + " " + sDirection ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/FullExport.cs b/Scripts/Commands/Admin/FullExport.cs new file mode 100644 index 0000000..c6fa4b4 --- /dev/null +++ b/Scripts/Commands/Admin/FullExport.cs @@ -0,0 +1,331 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Server; +using Server.Mobiles; +using Server.Items; +using Server.Commands; +using Server.Targeting; + +namespace Server.Misc +{ + public class Dumps + { + public const int Version = 200; // Script version (do not change) + public static string FilePath = @".\Export\"; + + public static void Initialize() + { + CommandSystem.Register("FullExport" , AccessLevel.Administrator, new CommandEventHandler(FullExport_OnCommand)); + CommandSystem.Register("FullEx" , AccessLevel.Administrator, new CommandEventHandler(FullExport_OnCommand)); + } + + [Usage( "FullExport [string filename]" )] + [Aliases( "FullEx" )] + [Description( "Exports statics to a cfg decoration file." )] + public static void FullExport_OnCommand(CommandEventArgs e ) + { + if( e.Arguments.Length > 0 ) + BeginStaEx(e.Mobile, e.ArgString ); + else + e.Mobile.SendMessage("Format: FullExport [string filename]" ); + } + + public static void BeginStaEx(Mobile mob, string file ) + { + Export(mob, file, new Rectangle2D(new Point2D(0, 0), new Point2D(7168, 4096))); + } + + private static void Export(Mobile mob, string file, Rectangle2D rect) + { + Map map = mob.Map; + + if( !Directory.Exists(FilePath) ) + Directory.CreateDirectory(FilePath); + + using(StreamWriter op = new StreamWriter(String.Format(@".\Export\{0}.cfg", file))) + { + mob.SendMessage("Exporting statics..."); + + IPooledEnumerable eable = mob.Map.GetItemsInBounds(rect); + int i = 0; + + try + { + foreach(Item item in eable) + { + if( item == null || item.Deleted ) + continue; + if( item is AddonComponent && !(item is DartBoard) ) + continue; + + if ( item.Weight >= 0 && !(item is BaseMulti) ) + { + string s = Construct(item); + if( !s.Substring(0, s.IndexOf(' ')+1).Contains("+") ) // Make sure this isn't an InternalItem of a class... + { + op.WriteLine(s); + op.WriteLine("{0} {1} {2}", item.X, item.Y, item.Z); + op.WriteLine(); + i++; + } + } + } + + mob.SendMessage("You exported {0} statics from this facet.", i); + } + catch(Exception e){ mob.SendMessage(e.Message); } + + eable.Free(); + } + } + + public static List List = new List(); + + public static void Add(string s){ Add(s, ""); } + public static void Add(string s1, string s2) + { + List.Add(new string[]{s1, s2}); + } + + public static string Construct(Item item) + { + string s; + + int itemID = item.ItemID; + + if( item is BaseAddon ) + for( int i = 0; i < ((BaseAddon)item).Components.Count; i++ ) + if( ((BaseAddon)item).Components[i].Offset == Point3D.Zero ) + { + itemID = ((BaseAddon)item).Components[i].ItemID; + break; + } + + if( item is LocalizedStatic ) + Add("LabelNumber", ((LocalizedStatic)item).Number.ToString()); + else if( item is LocalizedSign ) + Add("LabelNumber", ((LocalizedSign)item).Number.ToString()); + else if( item is AnkhWest ) + Add("Bloodied", (item.ItemID == 0x1D98).ToString()); + else if( item is AnkhNorth ) + Add("Bloodied", (item.ItemID == 0x1E5D).ToString()); + else if( item is WarningItem ) + { + Add("Range", ((WarningItem)item).Range.ToString()); + if( VS(((WarningItem)item).WarningString) ) + Add("WarningString", ((WarningItem)item).WarningString); + Add("WarningNumber", ((WarningItem)item).WarningNumber.ToString()); + if( item is HintItem ) + { + if( VS(((HintItem)item).HintString) ) + Add("HintString", ((HintItem)item).HintString); + Add("HintNumber", ((HintItem)item).HintNumber.ToString()); + } + Add("Range", ((WarningItem)item).ResetDelay.ToString()); + } + else if( item.GetType().IsSubclassOf(typeof(BaseBeverage)) ) + Add("Content", ((BaseBeverage)item).Content.ToString()); + else if( item.GetType().IsSubclassOf(typeof(BaseDoor)) ) + { + if ( ( item.ItemID == 0x3B1 ) ) + { + Add("Facing", "WestSS"); + } + else if ( ( item.ItemID == 0x3B2 ) ) + { + Add("Facing", "SouthSW"); + } + else if ( ( item.ItemID == 1663 ) || + ( item.ItemID == 1743 ) || + ( item.ItemID == 1695 ) || + ( item.ItemID == 1711 ) || + ( item.ItemID == 1759 ) || + ( item.ItemID == 1775 ) || + ( item.ItemID == 2115 ) || + ( item.ItemID == 2160 ) || + ( item.ItemID == 1727 ) || + ( item.ItemID == 846 ) || + ( item.ItemID == 830 ) || + ( item.ItemID == 798 ) || + ( item.ItemID == 242 ) || + ( item.ItemID == 814 ) || + ( item.ItemID == 862 ) || + ( item.ItemID == 2134 ) || + ( item.ItemID == 2094 ) || + ( item.ItemID == 1679 ) || + ( item.ItemID == 8183 ) ) + { + Add("Facing", "NorthCCW"); + } + else if ( ( item.ItemID == 1661 ) || + ( item.ItemID == 1741 ) || + ( item.ItemID == 1693 ) || + ( item.ItemID == 1709 ) || + ( item.ItemID == 1757 ) || + ( item.ItemID == 1773 ) || + ( item.ItemID == 2113 ) || + ( item.ItemID == 2158 ) || + ( item.ItemID == 1725 ) || + ( item.ItemID == 844 ) || + ( item.ItemID == 828 ) || + ( item.ItemID == 796 ) || + ( item.ItemID == 240 ) || + ( item.ItemID == 812 ) || + ( item.ItemID == 860 ) || + ( item.ItemID == 2132 ) || + ( item.ItemID == 2092 ) || + ( item.ItemID == 1677 ) || + ( item.ItemID == 8181 ) ) + { + Add("Facing", "SouthCW"); + } + else + { + Add("Facing", GetFacing(((BaseDoor)item).Offset).ToString()); + } + } + + if( item is BaseLight ) + { + if( !((BaseLight)item).Burning ) + Add("Unlit", String.Empty); + if( !((BaseLight)item).Protected ) + Add("Unprotected", String.Empty); + } + else if( item is Spawner ) + { + Spawner sp = (Spawner)item; + + for(int i = 0; i < sp.SpawnNames.Count; i++) + if( VS(sp.SpawnNames[i]) ) + Add("Spawn", sp.SpawnNames[i]); + // if( sp.MinDelay > TimeSpan.Zero ) + Add("MinDelay", sp.MinDelay.ToString()); + // if( sp.MaxDelay > TimeSpan.Zero ) + Add("MaxDelay", sp.MaxDelay.ToString()); + // if( sp.NextSpawn > TimeSpan.Zero ) + //Add("NextSpawn", sp.NextSpawn.ToString()); + // if( sp.Count > 0 ) + Add("Count", sp.Count.ToString()); + // if( sp.Team > 0 ) + //Add("Team", sp.Team.ToString()); + // if( sp.HomeRange > 0 ) + Add("HomeRange", sp.HomeRange.ToString()); + // if( sp.Running ) + Add("Running", sp.Running.ToString()); + // if( sp.Group ) + Add("Group", sp.Group.ToString()); + } + else if( item is Teleporter ) + { + Teleporter tp = (Teleporter)item; + + if( item is SkillTeleporter ) + { + SkillTeleporter st = (SkillTeleporter)item; + + Add("Skill", st.Skill.ToString()); + // "RequiredFixedPoint" == Required * 0.1 ? + Add("Required", st.Required.ToString()); + if( VS(st.MessageString) ) + Add("MessageString", st.MessageString); + Add("MessageNumber", st.MessageNumber.ToString()); + } + else if( item is KeywordTeleporter ) + { + KeywordTeleporter kt = (KeywordTeleporter)item; + + if( VS(kt.Substring) ) + Add("Substring", kt.Substring); + Add("Keyword", kt.Keyword.ToString()); + Add("Range", kt.Range.ToString()); + } + Add("PointDest", tp.PointDest.ToString()); + if( tp.MapDest != null ) + Add("MapDest", tp.MapDest.ToString()); + Add("Creatures", tp.Creatures.ToString()); + Add("SourceEffect", tp.SourceEffect.ToString()); + Add("DestEffect", tp.DestEffect.ToString()); + Add("SoundID", tp.SoundID.ToString()); + Add("Delay", tp.Delay.ToString()); + } + + if( item.Light != LightType.ArchedWindowEast ) + Add("Light", item.Light.ToString()); + if( item.Hue > 0 ) + Add("Hue", item.Hue.ToString()); + if( VS(item.Name) ) + Add("Name", item.Name); + if( item.Amount > 1 ) + Add("Amount", item.Amount.ToString()); + + s = String.Format("{0} {1}", ConstructType(item), itemID); + + if( List.Count > 0 ) + { + s += " ("; + for( int i = 0; i < List.Count; i++ ) + { + if( List[i][1] == String.Empty ) + s += String.Format("{0}{1}", List[i][0], (i < List.Count-1 ? "; " : String.Empty)); + else + s += String.Format("{0}={1}{2}", List[i][0], List[i][1], (i < List.Count-1 ? "; " : String.Empty)); + } + s += ")"; + } + + List.Clear(); + return s; + } + + public static bool VS(string s) + { + if( s == null || s == String.Empty ) + return false; + return true; + } + + public static string ConstructType(Item item) + { + string s = item.GetType().ToString(); + + if( s.LastIndexOf('.') > -1 ) + s = s.Remove(0, s.LastIndexOf('.')+1); + + return s; + } + + public static DoorFacing GetFacing(Point3D p) + { + DoorFacing facing = DoorFacing.WestCW; + for(int i = 0; i < m_Offsets.Length; i++) + { + if( p == m_Offsets[i] ) + { + facing = (DoorFacing)i; + break; + } + } + + return facing; + } + private static Point3D[] m_Offsets = new Point3D[] + { + new Point3D(-1, 1, 0 ), + new Point3D( 1, 1, 0 ), + new Point3D(-1, 0, 0 ), + new Point3D( 1,-1, 0 ), + new Point3D( 1, 1, 0 ), + new Point3D( 1,-1, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0,-1, 0 ), + + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ) + }; + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/GetLevel.cs b/Scripts/Commands/Admin/GetLevel.cs new file mode 100644 index 0000000..13448bf --- /dev/null +++ b/Scripts/Commands/Admin/GetLevel.cs @@ -0,0 +1,54 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Items; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; +using Server.Mobiles; +using Server.Accounting; +using Server.Regions; +using System.IO; +using Server.Targeting; + +namespace Server.Scripts.Commands +{ + public class GetLevel + { + public static void Initialize() + { + CommandSystem.Register("GetLevel", AccessLevel.Counselor, new CommandEventHandler( GetLevels )); + } + + [Usage("GetLevel")] + [Description("Gets the level of the creature.")] + public static void GetLevels( CommandEventArgs e ) + { + e.Mobile.SendMessage( "What target do you want to inspect?" ); + e.Mobile.Target = new InternalTarget(); + } + + private class InternalTarget : Target + { + public InternalTarget() : base ( 8, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + { + Mobile m = (Mobile)targeted; + + from.SendMessage( "" + BaseCreature.MyLevel( m ) + "" ); + } + else + { + from.SendMessage( "Not a valid creature!" ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/GoLog.cs b/Scripts/Commands/Admin/GoLog.cs new file mode 100644 index 0000000..6b21204 --- /dev/null +++ b/Scripts/Commands/Admin/GoLog.cs @@ -0,0 +1,45 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Items; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; +using Server.Mobiles; +using Server.Accounting; +using Server.Regions; +using System.IO; + +namespace Server.Scripts.Commands +{ + public class GoLog + { + public static void Initialize() + { + CommandSystem.Register("GoLog", AccessLevel.Counselor, new CommandEventHandler( GoLogs )); + } + + [Usage("GoLog")] + [Description("Records the x, y, and z coordinates of the caller...for the go menu.")] + public static void GoLogs( CommandEventArgs e ) + { + string sX = e.Mobile.X.ToString(); + string sY = e.Mobile.Y.ToString(); + string sZ = e.Mobile.Z.ToString(); + + string sRegion = e.Mobile.Region.Name; + + string sMap = "Map.Britannia"; + if ( e.Mobile.Map == Map.Underworld ){ sMap = "Map.Underworld"; } + + StreamWriter w = File.AppendText("go.txt"); + w.WriteLine( "" ); + + w.Close(); + + e.Mobile.SendMessage( sRegion + " " + "(" + sX + ", " + sY + ", " + sZ + ") " + sMap ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/PointLog.cs b/Scripts/Commands/Admin/PointLog.cs new file mode 100644 index 0000000..119f49a --- /dev/null +++ b/Scripts/Commands/Admin/PointLog.cs @@ -0,0 +1,59 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Items; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; +using Server.Mobiles; +using Server.Accounting; +using Server.Regions; +using System.IO; + +namespace Server.Scripts.Commands +{ + public class PointLog + { + public static void Initialize() + { + CommandSystem.Register("PointLog", AccessLevel.Counselor, new CommandEventHandler( PointLogs )); + } + + [Usage("PointLog")] + [Description("Records the x, y, and z coordinates of the caller...along with the map they are in.")] + public static void PointLogs( CommandEventArgs e ) + { + string sX = e.Mobile.X.ToString(); + string sY = e.Mobile.Y.ToString(); + string sZ = e.Mobile.Z.ToString(); + + string sRegion = e.Mobile.Region.Name; + + string sMap = "Map.Britannia"; + if ( e.Mobile.Map == Map.Underworld ){ sMap = "Map.Underworld"; } + + StreamWriter w = File.AppendText("points.txt"); + w.WriteLine( sRegion + "\t" + "(" + sX + ", " + sY + ", " + sZ + ")\t" + sMap ); + + w.Close(); + + e.Mobile.SendMessage( sRegion + " " + "(" + sX + ", " + sY + ", " + sZ + ") " + sMap ); + } + } + + public class ContainerLog + { + public static void ContainerLogs( int x, int y, int item, int gump, Mobile from ) + { + StreamWriter w = File.AppendText("containers.txt"); + w.WriteLine( "X\tY\tItemID\tGump" ); + w.WriteLine( "" + x + "\t" + y + "\t" + item + "\t" + gump + "" ); + + w.Close(); + + from.SendMessage( "" + x + " --- " + y + " --- " + item + " --- " + gump + "" ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/StaticExport.cs b/Scripts/Commands/Admin/StaticExport.cs new file mode 100644 index 0000000..a7cf157 --- /dev/null +++ b/Scripts/Commands/Admin/StaticExport.cs @@ -0,0 +1,339 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Server; +using Server.Mobiles; +using Server.Items; +using Server.Commands; +using Server.Targeting; + +namespace Server.Misc +{ + public class Exporters + { + public const int Version = 200; // Script version (do not change) + public static string FilePath = @".\Export\"; + + public static void Initialize() + { + CommandSystem.Register("StaticExport" , AccessLevel.Administrator, new CommandEventHandler(StaticExport_OnCommand)); + CommandSystem.Register("StaEx" , AccessLevel.Administrator, new CommandEventHandler(StaticExport_OnCommand)); + } + + [Usage( "StaticExport [string filename]" )] + [Aliases( "StaEx" )] + [Description( "Exports statics to a cfg decoration file." )] + public static void StaticExport_OnCommand(CommandEventArgs e ) + { + if( e.Arguments.Length > 0 ) + BeginStaEx(e.Mobile, e.ArgString ); + else + e.Mobile.SendMessage("Format: StaticExport [string filename]" ); + } + + public static void BeginStaEx(Mobile mob, string file ) + { + BoundingBoxPicker.Begin(mob, new BoundingBoxCallback(StaExBox_Callback), new object[]{ file }); + } + + private static void StaExBox_Callback(Mobile mob, Map map, Point3D start, Point3D end, object state) + { + object[] states = (object[])state; + string file = (string)states[0]; + + Export(mob, file, new Rectangle2D(new Point2D(start.X, start.Y), new Point2D(end.X+1, end.Y+1))); + } + + private static void Export(Mobile mob, string file, Rectangle2D rect) + { + Map map = mob.Map; + + if( !Directory.Exists(FilePath) ) + Directory.CreateDirectory(FilePath); + + using(StreamWriter op = new StreamWriter(String.Format(@".\Export\{0}.cfg", file))) + { + mob.SendMessage("Exporting statics..."); + + IPooledEnumerable eable = mob.Map.GetItemsInBounds(rect); + int i = 0; + + try + { + foreach(Item item in eable) + { + if( item == null || item.Deleted ) + continue; + if( item is AddonComponent && !(item is DartBoard) ) + continue; + + if ( item.Weight >= 0 && !(item is BaseMulti) ) + { + string s = Construct(item); + if( !s.Substring(0, s.IndexOf(' ')+1).Contains("+") ) // Make sure this isn't an InternalItem of a class... + { + op.WriteLine(s); + op.WriteLine("{0} {1} {2}", item.X, item.Y, item.Z); + op.WriteLine(); + i++; + } + } + } + + mob.SendMessage("You exported {0} statics from this facet.", i); + } + catch(Exception e){ mob.SendMessage(e.Message); } + + eable.Free(); + } + } + + public static List List = new List(); + + public static void Add(string s){ Add(s, ""); } + public static void Add(string s1, string s2) + { + List.Add(new string[]{s1, s2}); + } + + public static string Construct(Item item) + { + string s; + + int itemID = item.ItemID; + + if( item is BaseAddon ) + for( int i = 0; i < ((BaseAddon)item).Components.Count; i++ ) + if( ((BaseAddon)item).Components[i].Offset == Point3D.Zero ) + { + itemID = ((BaseAddon)item).Components[i].ItemID; + break; + } + + if( item is LocalizedStatic ) + Add("LabelNumber", ((LocalizedStatic)item).Number.ToString()); + else if( item is LocalizedSign ) + Add("LabelNumber", ((LocalizedSign)item).Number.ToString()); + else if( item is AnkhWest ) + Add("Bloodied", (item.ItemID == 0x1D98).ToString()); + else if( item is AnkhNorth ) + Add("Bloodied", (item.ItemID == 0x1E5D).ToString()); + else if( item is WarningItem ) + { + Add("Range", ((WarningItem)item).Range.ToString()); + if( VS(((WarningItem)item).WarningString) ) + Add("WarningString", ((WarningItem)item).WarningString); + Add("WarningNumber", ((WarningItem)item).WarningNumber.ToString()); + if( item is HintItem ) + { + if( VS(((HintItem)item).HintString) ) + Add("HintString", ((HintItem)item).HintString); + Add("HintNumber", ((HintItem)item).HintNumber.ToString()); + } + Add("Range", ((WarningItem)item).ResetDelay.ToString()); + } + else if( item.GetType().IsSubclassOf(typeof(BaseBeverage)) ) + Add("Content", ((BaseBeverage)item).Content.ToString()); + else if( item.GetType().IsSubclassOf(typeof(BaseDoor)) ) + { + if ( ( item.ItemID == 0x3B1 ) ) + { + Add("Facing", "WestSS"); + } + else if ( ( item.ItemID == 0x3B2 ) ) + { + Add("Facing", "SouthSW"); + } + else if ( ( item.ItemID == 1663 ) || + ( item.ItemID == 1743 ) || + ( item.ItemID == 1695 ) || + ( item.ItemID == 1711 ) || + ( item.ItemID == 1759 ) || + ( item.ItemID == 1775 ) || + ( item.ItemID == 2115 ) || + ( item.ItemID == 2160 ) || + ( item.ItemID == 1727 ) || + ( item.ItemID == 846 ) || + ( item.ItemID == 830 ) || + ( item.ItemID == 798 ) || + ( item.ItemID == 242 ) || + ( item.ItemID == 814 ) || + ( item.ItemID == 862 ) || + ( item.ItemID == 2134 ) || + ( item.ItemID == 2094 ) || + ( item.ItemID == 1679 ) || + ( item.ItemID == 8183 ) ) + { + Add("Facing", "NorthCCW"); + } + else if ( ( item.ItemID == 1661 ) || + ( item.ItemID == 1741 ) || + ( item.ItemID == 1693 ) || + ( item.ItemID == 1709 ) || + ( item.ItemID == 1757 ) || + ( item.ItemID == 1773 ) || + ( item.ItemID == 2113 ) || + ( item.ItemID == 2158 ) || + ( item.ItemID == 1725 ) || + ( item.ItemID == 844 ) || + ( item.ItemID == 828 ) || + ( item.ItemID == 796 ) || + ( item.ItemID == 240 ) || + ( item.ItemID == 812 ) || + ( item.ItemID == 860 ) || + ( item.ItemID == 2132 ) || + ( item.ItemID == 2092 ) || + ( item.ItemID == 1677 ) || + ( item.ItemID == 8181 ) ) + { + Add("Facing", "SouthCW"); + } + else + { + Add("Facing", GetFacing(((BaseDoor)item).Offset).ToString()); + } + } + + if( item is BaseLight ) + { + if( !((BaseLight)item).Burning ) + Add("Unlit", String.Empty); + if( !((BaseLight)item).Protected ) + Add("Unprotected", String.Empty); + } + else if( item is Spawner ) + { + Spawner sp = (Spawner)item; + + for(int i = 0; i < sp.SpawnNames.Count; i++) + if( VS(sp.SpawnNames[i]) ) + Add("Spawn", sp.SpawnNames[i]); + // if( sp.MinDelay > TimeSpan.Zero ) + Add("MinDelay", sp.MinDelay.ToString()); + // if( sp.MaxDelay > TimeSpan.Zero ) + Add("MaxDelay", sp.MaxDelay.ToString()); + // if( sp.NextSpawn > TimeSpan.Zero ) + //Add("NextSpawn", sp.NextSpawn.ToString()); + // if( sp.Count > 0 ) + Add("Count", sp.Count.ToString()); + // if( sp.Team > 0 ) + //Add("Team", sp.Team.ToString()); + // if( sp.HomeRange > 0 ) + Add("HomeRange", sp.HomeRange.ToString()); + // if( sp.Running ) + Add("Running", sp.Running.ToString()); + // if( sp.Group ) + Add("Group", sp.Group.ToString()); + } + else if( item is Teleporter ) + { + Teleporter tp = (Teleporter)item; + + if( item is SkillTeleporter ) + { + SkillTeleporter st = (SkillTeleporter)item; + + Add("Skill", st.Skill.ToString()); + // "RequiredFixedPoint" == Required * 0.1 ? + Add("Required", st.Required.ToString()); + if( VS(st.MessageString) ) + Add("MessageString", st.MessageString); + Add("MessageNumber", st.MessageNumber.ToString()); + } + else if( item is KeywordTeleporter ) + { + KeywordTeleporter kt = (KeywordTeleporter)item; + + if( VS(kt.Substring) ) + Add("Substring", kt.Substring); + Add("Keyword", kt.Keyword.ToString()); + Add("Range", kt.Range.ToString()); + } + Add("PointDest", tp.PointDest.ToString()); + if( tp.MapDest != null ) + Add("MapDest", tp.MapDest.ToString()); + Add("Creatures", tp.Creatures.ToString()); + Add("SourceEffect", tp.SourceEffect.ToString()); + Add("DestEffect", tp.DestEffect.ToString()); + Add("SoundID", tp.SoundID.ToString()); + Add("Delay", tp.Delay.ToString()); + } + + if( item.Light != LightType.ArchedWindowEast ) + Add("Light", item.Light.ToString()); + if( item.Hue > 0 ) + Add("Hue", item.Hue.ToString()); + if( VS(item.Name) ) + Add("Name", item.Name); + if( item.Amount > 1 ) + Add("Amount", item.Amount.ToString()); + + s = String.Format("{0} {1}", ConstructType(item), itemID); + + if( List.Count > 0 ) + { + s += " ("; + for( int i = 0; i < List.Count; i++ ) + { + if( List[i][1] == String.Empty ) + s += String.Format("{0}{1}", List[i][0], (i < List.Count-1 ? "; " : String.Empty)); + else + s += String.Format("{0}={1}{2}", List[i][0], List[i][1], (i < List.Count-1 ? "; " : String.Empty)); + } + s += ")"; + } + + List.Clear(); + return s; + } + + public static bool VS(string s) + { + if( s == null || s == String.Empty ) + return false; + return true; + } + + public static string ConstructType(Item item) + { + string s = item.GetType().ToString(); + + if( s.LastIndexOf('.') > -1 ) + s = s.Remove(0, s.LastIndexOf('.')+1); + + return s; + } + + public static DoorFacing GetFacing(Point3D p) + { + DoorFacing facing = DoorFacing.WestCW; + for(int i = 0; i < m_Offsets.Length; i++) + { + if( p == m_Offsets[i] ) + { + facing = (DoorFacing)i; + break; + } + } + + return facing; + } + private static Point3D[] m_Offsets = new Point3D[] + { + new Point3D(-1, 1, 0 ), + new Point3D( 1, 1, 0 ), + new Point3D(-1, 0, 0 ), + new Point3D( 1,-1, 0 ), + new Point3D( 1, 1, 0 ), + new Point3D( 1,-1, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0,-1, 0 ), + + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ) + }; + } +} \ No newline at end of file diff --git a/Scripts/Commands/Admin/TargetLog.cs b/Scripts/Commands/Admin/TargetLog.cs new file mode 100644 index 0000000..6f629bb --- /dev/null +++ b/Scripts/Commands/Admin/TargetLog.cs @@ -0,0 +1,82 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Items; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; +using Server.Mobiles; +using Server.Accounting; +using Server.Regions; +using System.IO; +using Server.Targeting; + +namespace Server.Scripts.Commands +{ + public class TargetLog + { + public static void Initialize() + { + CommandSystem.Register("TargetLog", AccessLevel.Counselor, new CommandEventHandler( TargetLogs )); + } + + [Usage("TargetLog")] + [Description("Records the x, y, and z coordinates of the caller...along with the map they are in.")] + public static void TargetLogs( CommandEventArgs e ) + { + e.Mobile.SendMessage( "What target do you want to log?" ); + e.Mobile.Target = new InternalTarget(); + } + + private class InternalTarget : Target + { + public InternalTarget() : base ( 8, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + string sX = ""; + string sY = ""; + string sZ = ""; + string sItem = ""; + + if ( targeted is Item ) + { + sX = ((Item)targeted).X.ToString(); + sY = ((Item)targeted).Y.ToString(); + sZ = ((Item)targeted).Z.ToString(); + sItem = ((Item)targeted).ItemID.ToString(); + } + else if ( targeted is StaticTarget ) + { + sX = ((StaticTarget)targeted).X.ToString(); + sY = ((StaticTarget)targeted).Y.ToString(); + sZ = ((StaticTarget)targeted).Z.ToString(); + sItem = ((StaticTarget)targeted).ItemID.ToString(); + } + + string sRegion = from.Region.Name; + + string sMap = "Map.Britannia"; + if ( from.Map == Map.Underworld ){ sMap = "Map.Underworld"; } + + if ( sX != "" ) + { + StreamWriter w = File.AppendText("targets.txt"); + w.WriteLine( sRegion + "\t" + sItem + "\t" + sX + "\t" + sY + "\t" + sZ + "\t" + sMap ); + + w.Close(); + + from.SendMessage( sRegion + " " + sItem + " " + sX + " " + sY + " " + sZ + " " + sMap ); + } + else + { + from.SendMessage( "Target failed to log!" ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Attributes.cs b/Scripts/Commands/Attributes.cs new file mode 100644 index 0000000..7891dde --- /dev/null +++ b/Scripts/Commands/Attributes.cs @@ -0,0 +1,40 @@ +using System; + +namespace Server +{ + public class UsageAttribute : Attribute + { + private string m_Usage; + + public string Usage{ get{ return m_Usage; } } + + public UsageAttribute( string usage ) + { + m_Usage = usage; + } + } + + public class DescriptionAttribute : Attribute + { + private string m_Description; + + public string Description{ get{ return m_Description; } } + + public DescriptionAttribute( string description ) + { + m_Description = description; + } + } + + public class AliasesAttribute : Attribute + { + private string[] m_Aliases; + + public string[] Aliases{ get{ return m_Aliases; } } + + public AliasesAttribute( params string[] aliases ) + { + m_Aliases = aliases; + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Batch.cs b/Scripts/Commands/Batch.cs new file mode 100644 index 0000000..c382c5b --- /dev/null +++ b/Scripts/Commands/Batch.cs @@ -0,0 +1,458 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; + +namespace Server.Commands +{ + public class Batch : BaseCommand + { + private BaseCommandImplementor m_Scope; + private string m_Condition; + private ArrayList m_BatchCommands; + + public BaseCommandImplementor Scope + { + get{ return m_Scope; } + set{ m_Scope = value; } + } + + public string Condition + { + get{ return m_Condition; } + set{ m_Condition = value; } + } + + public ArrayList BatchCommands + { + get{ return m_BatchCommands; } + } + + public Batch() + { + Commands = new string[]{ "Batch" }; + ListOptimized = true; + + m_BatchCommands = new ArrayList(); + m_Condition = ""; + } + + public override void ExecuteList( CommandEventArgs e, ArrayList list ) + { + if ( list.Count == 0 ) + { + LogFailure( "Nothing was found to use this command on." ); + return; + } + + try + { + BaseCommand[] commands = new BaseCommand[m_BatchCommands.Count]; + CommandEventArgs[] eventArgs = new CommandEventArgs[m_BatchCommands.Count]; + + for ( int i = 0; i < m_BatchCommands.Count; ++i ) + { + BatchCommand bc = (BatchCommand)m_BatchCommands[i]; + + string commandString, argString; + string[] args; + + bc.GetDetails( out commandString, out argString, out args ); + + BaseCommand command = m_Scope.Commands[commandString]; + + commands[i] = command; + eventArgs[i] = new CommandEventArgs( e.Mobile, commandString, argString, args ); + + if ( command == null ) + { + e.Mobile.SendMessage( "That is either an invalid command name or one that does not support this modifier: {0}.", commandString ); + return; + } + else if ( e.Mobile.AccessLevel < command.AccessLevel ) + { + e.Mobile.SendMessage( "You do not have access to that command: {0}.", commandString ); + return; + } + else if ( !command.ValidateArgs( m_Scope, eventArgs[i] ) ) + { + return; + } + } + + for ( int i = 0; i < commands.Length; ++i ) + { + BaseCommand command = commands[i]; + BatchCommand bc = (BatchCommand)m_BatchCommands[i]; + + if ( list.Count > 20 ) + CommandLogging.Enabled = false; + + ArrayList usedList; + + if ( Utility.InsensitiveCompare( bc.Object, "Current" ) == 0 ) + { + usedList = list; + } + else + { + Hashtable propertyChains = new Hashtable(); + + usedList = new ArrayList( list.Count ); + + for ( int j = 0; j < list.Count; ++j ) + { + object obj = list[j]; + + if ( obj == null ) + continue; + + Type type = obj.GetType(); + + PropertyInfo[] chain = (PropertyInfo[])propertyChains[type]; + + string failReason = ""; + + if ( chain == null && !propertyChains.Contains( type ) ) + propertyChains[type] = chain = Properties.GetPropertyInfoChain( e.Mobile, type, bc.Object, PropertyAccess.Read, ref failReason ); + + if ( chain == null ) + continue; + + PropertyInfo endProp = Properties.GetPropertyInfo( ref obj, chain, ref failReason ); + + if ( endProp == null ) + continue; + + try + { + obj = endProp.GetValue( obj, null ); + + if ( obj != null ) + usedList.Add( obj ); + } + catch + { + } + } + } + + command.ExecuteList( eventArgs[i], usedList ); + + if ( list.Count > 20 ) + CommandLogging.Enabled = true; + + command.Flush( e.Mobile, list.Count > 20 ); + } + } + catch ( Exception ex ) + { + e.Mobile.SendMessage( ex.Message ); + } + } + + public bool Run( Mobile from ) + { + if ( m_Scope == null ) + { + from.SendMessage( "You must select the batch command scope." ); + return false; + } + else if ( m_Condition.Length > 0 && !m_Scope.SupportsConditionals ) + { + from.SendMessage( "This command scope does not support conditionals." ); + return false; + } + else if ( m_Condition.Length > 0 && !Utility.InsensitiveStartsWith( m_Condition, "where" ) ) + { + from.SendMessage( "The condition field must start with \"where\"." ); + return false; + } + + string[] args = CommandSystem.Split( m_Condition ); + + m_Scope.Process( from, this, args ); + + return true; + } + + public static void Initialize() + { + CommandSystem.Register( "Batch", AccessLevel.Counselor, new CommandEventHandler( Batch_OnCommand ) ); + } + + [Usage( "Batch" )] + [Description( "Allows multiple commands to be run at the same time." )] + public static void Batch_OnCommand( CommandEventArgs e ) + { + Batch batch = new Batch(); + + e.Mobile.SendGump( new BatchGump( e.Mobile, batch ) ); + } + } + + public class BatchCommand + { + private string m_Command; + private string m_Object; + + public string Command + { + get{ return m_Command; } + set{ m_Command = value; } + } + + public string Object + { + get{ return m_Object; } + set{ m_Object = value; } + } + + public void GetDetails( out string command, out string argString, out string[] args ) + { + int indexOf = m_Command.IndexOf( ' ' ); + + if ( indexOf >= 0 ) + { + argString = m_Command.Substring( indexOf + 1 ); + + command = m_Command.Substring( 0, indexOf ); + args = CommandSystem.Split( argString ); + } + else + { + argString = ""; + command = m_Command.ToLower(); + args = new string[0]; + } + } + + public BatchCommand( string command, string obj ) + { + m_Command = command; + m_Object = obj; + } + } + + public class BatchGump : BaseGridGump + { + private Mobile m_From; + private Batch m_Batch; + + public BatchGump( Mobile from, Batch batch ) : base( 30, 30 ) + { + m_From = from; + m_Batch = batch; + + Render(); + } + + public void Render() + { + AddNewPage(); + + /* Header */ + AddEntryHeader( 20 ); + AddEntryHtml( 180, Center( "Batch Commands" ) ); + AddEntryHeader( 20 ); + AddNewLine(); + + AddEntryHeader( 9 ); + AddEntryLabel( 191, "Run Batch" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, GetButtonID( 1, 0, 0 ), ArrowRightWidth, ArrowRightHeight ); + AddNewLine(); + + AddBlankLine(); + + /* Scope */ + AddEntryHeader( 20 ); + AddEntryHtml( 180, Center( "Scope" ) ); + AddEntryHeader( 20 ); + AddNewLine(); + + AddEntryHeader( 9 ); + AddEntryLabel( 191, m_Batch.Scope == null ? "Select Scope" : m_Batch.Scope.Accessors[0] ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, GetButtonID( 1, 0, 1 ), ArrowRightWidth, ArrowRightHeight ); + AddNewLine(); + + AddBlankLine(); + + /* Condition */ + AddEntryHeader( 20 ); + AddEntryHtml( 180, Center( "Condition" ) ); + AddEntryHeader( 20 ); + AddNewLine(); + + AddEntryHeader( 9 ); + AddEntryText( 202, 0, m_Batch.Condition ); + AddEntryHeader( 9 ); + AddNewLine(); + + AddBlankLine(); + + /* Commands */ + AddEntryHeader( 20 ); + AddEntryHtml( 180, Center( "Commands" ) ); + AddEntryHeader( 20 ); + + for ( int i = 0; i < m_Batch.BatchCommands.Count; ++i ) + { + BatchCommand bc = (BatchCommand)m_Batch.BatchCommands[i]; + + AddNewLine(); + + AddImageTiled( CurrentX, CurrentY, 9, 2, 0x24A8 ); + AddImageTiled( CurrentX, CurrentY + 2, 2, EntryHeight + OffsetSize + EntryHeight - 4, 0x24A8 ); + AddImageTiled( CurrentX, CurrentY + EntryHeight + OffsetSize + EntryHeight - 2, 9, 2, 0x24A8 ); + AddImageTiled( CurrentX + 3, CurrentY + 3, 6, EntryHeight + EntryHeight - 4 - OffsetSize, HeaderGumpID ); + + IncreaseX( 9 ); + AddEntryText( 202, 1+(i*2), bc.Command ); + AddEntryHeader( 9, 2 ); + + AddNewLine(); + + IncreaseX( 9 ); + AddEntryText( 202, 2+(i*2), bc.Object ); + } + + AddNewLine(); + + AddEntryHeader( 9 ); + AddEntryLabel( 191, "Add New Command" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, GetButtonID( 1, 0, 2 ), ArrowRightWidth, ArrowRightHeight ); + + FinishPage(); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int type, index; + + if ( !SplitButtonID( info.ButtonID, 1, out type, out index ) ) + return; + + TextRelay entry = info.GetTextEntry( 0 ); + + if ( entry != null ) + m_Batch.Condition = entry.Text; + + for ( int i = m_Batch.BatchCommands.Count - 1; i >= 0; --i ) + { + BatchCommand sc = (BatchCommand)m_Batch.BatchCommands[i]; + + entry = info.GetTextEntry( 1 + (i * 2) ); + + if ( entry != null ) + sc.Command = entry.Text; + + entry = info.GetTextEntry( 2 + (i * 2) ); + + if ( entry != null ) + sc.Object = entry.Text; + + if ( sc.Command.Length == 0 && sc.Object.Length == 0 ) + m_Batch.BatchCommands.RemoveAt( i ); + } + + switch ( type ) + { + case 0: // main + { + switch ( index ) + { + case 0: // run + { + m_Batch.Run( m_From ); + break; + } + case 1: // set scope + { + m_From.SendGump( new BatchScopeGump( m_From, m_Batch ) ); + return; + } + case 2: // add command + { + m_Batch.BatchCommands.Add( new BatchCommand( "", "" ) ); + break; + } + } + + break; + } + } + + m_From.SendGump( new BatchGump( m_From, m_Batch ) ); + } + } + + public class BatchScopeGump : BaseGridGump + { + private Mobile m_From; + private Batch m_Batch; + + public BatchScopeGump( Mobile from, Batch batch ) : base( 30, 30 ) + { + m_From = from; + m_Batch = batch; + + Render(); + } + + public void Render() + { + AddNewPage(); + + /* Header */ + AddEntryHeader( 20 ); + AddEntryHtml( 140, Center( "Change Scope" ) ); + AddEntryHeader( 20 ); + + /* Options */ + for ( int i = 0; i < BaseCommandImplementor.Implementors.Count; ++i ) + { + BaseCommandImplementor impl = BaseCommandImplementor.Implementors[i]; + + if ( m_From.AccessLevel < impl.AccessLevel ) + continue; + + AddNewLine(); + + AddEntryLabel( 20 + OffsetSize + 140, impl.Accessors[0] ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, GetButtonID( 1, 0, i ), ArrowRightWidth, ArrowRightHeight ); + } + + FinishPage(); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int type, index; + + if ( SplitButtonID( info.ButtonID, 1, out type, out index ) ) + { + switch ( type ) + { + case 0: + { + if ( index < BaseCommandImplementor.Implementors.Count ) + { + BaseCommandImplementor impl = BaseCommandImplementor.Implementors[index]; + + if ( m_From.AccessLevel >= impl.AccessLevel ) + m_Batch.Scope = impl; + } + + break; + } + } + } + + m_From.SendGump( new BatchGump( m_From, m_Batch ) ); + } + } +} diff --git a/Scripts/Commands/BoundingBoxPicker.cs b/Scripts/Commands/BoundingBoxPicker.cs new file mode 100644 index 0000000..d0a5e84 --- /dev/null +++ b/Scripts/Commands/BoundingBoxPicker.cs @@ -0,0 +1,68 @@ +using System; +using Server; +using Server.Targeting; + +namespace Server +{ + public delegate void BoundingBoxCallback( Mobile from, Map map, Point3D start, Point3D end, object state ); + + public class BoundingBoxPicker + { + public static void Begin( Mobile from, BoundingBoxCallback callback, object state ) + { + from.SendMessage( "Target the first location of the bounding box." ); + from.Target = new PickTarget( callback, state ); + } + + private class PickTarget : Target + { + private Point3D m_Store; + private bool m_First; + private Map m_Map; + private BoundingBoxCallback m_Callback; + private object m_State; + + public PickTarget( BoundingBoxCallback callback, object state ) : this( Point3D.Zero, true, null, callback, state ) + { + } + + public PickTarget( Point3D store, bool first, Map map, BoundingBoxCallback callback, object state ) : base( -1, true, TargetFlags.None ) + { + m_Store = store; + m_First = first; + m_Map = map; + m_Callback = callback; + m_State = state; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + IPoint3D p = targeted as IPoint3D; + + if ( p == null ) + return; + else if ( p is Item ) + p = ((Item)p).GetWorldTop(); + + if ( m_First ) + { + from.SendMessage( "Target another location to complete the bounding box." ); + from.Target = new PickTarget( new Point3D( p ), false, from.Map, m_Callback, m_State ); + } + else if ( from.Map != m_Map ) + { + from.SendMessage( "Both locations must reside on the same map." ); + } + else if ( m_Map != null && m_Map != Map.Internal && m_Callback != null ) + { + Point3D start = m_Store; + Point3D end = new Point3D( p ); + + Utility.FixPoints( ref start, ref end ); + + m_Callback( from, m_Map, start, end, m_State ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/ConvertPlayers.cs b/Scripts/Commands/ConvertPlayers.cs new file mode 100644 index 0000000..4412b17 --- /dev/null +++ b/Scripts/Commands/ConvertPlayers.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Network; + +namespace Server.Commands +{ + public class ConvertPlayers + { + public static void Initialize() + { + CommandSystem.Register( "ConvertPlayers", AccessLevel.Administrator, new CommandEventHandler( Convert_OnCommand ) ); + } + + public static void Convert_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendMessage( "Converting all players to PlayerMobile. You will be disconnected. Please Restart the server after the world has finished saving." ); + List mobs = new List( World.Mobiles.Values ); + int count = 0; + + foreach ( Mobile m in mobs ) + { + if ( m.Player && !(m is PlayerMobile ) ) + { + count++; + if ( m.NetState != null ) + m.NetState.Dispose(); + + PlayerMobile pm = new PlayerMobile( m.Serial ); + pm.DefaultMobileInit(); + + List copy = new List( m.Items ); + for (int i=0;i 0 ) + { + NetState.ProcessDisposedQueue(); + World.Save(); + + Console.WriteLine( "{0} players have been converted to PlayerMobile. {1}.", count, Core.Service ? "The server is now restarting" : "Press any key to restart the server" ); + + if ( !Core.Service ) + Console.ReadKey( true ); + + Core.Kill( true ); + } + else + { + e.Mobile.SendMessage( "Couldn't find any Players to convert." ); + } + } + + private static void CopyProps( Mobile to, Mobile from ) + { + Type type = typeof( Mobile ); + + PropertyInfo[] props = type.GetProperties( BindingFlags.Public | BindingFlags.Instance ); + + for (int p=0;p= 0 ) + { + labelNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + break; + } + } + } + + item = new LocalizedSign( m_ItemID, labelNumber ); + } + else if ( m_Type == typeofAnkhWest || m_Type == typeofAnkhNorth ) + { + bool bloodied = false; + + for ( int i = 0; !bloodied && i < m_Params.Length; ++i ) + bloodied = ( m_Params[i] == "Bloodied" ); + + if ( m_Type == typeofAnkhWest ) + item = new AnkhWest( bloodied ); + else + item = new AnkhNorth( bloodied ); + } + else if ( m_Type == typeofHintItem ) + { + int range = 0; + int messageNumber = 0; + string messageString = null; + int hintNumber = 0; + string hintString = null; + TimeSpan resetDelay = TimeSpan.Zero; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Range" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + range = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "WarningString" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + messageString = m_Params[i].Substring( ++indexOf ); + } + else if ( m_Params[i].StartsWith( "WarningNumber" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + messageNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "HintString" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + hintString = m_Params[i].Substring( ++indexOf ); + } + else if ( m_Params[i].StartsWith( "HintNumber" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + hintNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "ResetDelay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + resetDelay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) ); + } + } + + HintItem hi = new HintItem( m_ItemID, range, messageNumber, hintNumber ); + + hi.WarningString = messageString; + hi.HintString = hintString; + hi.ResetDelay = resetDelay; + + item = hi; + } + else if ( m_Type == typeofWarningItem ) + { + int range = 0; + int messageNumber = 0; + string messageString = null; + TimeSpan resetDelay = TimeSpan.Zero; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Range" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + range = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "WarningString" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + messageString = m_Params[i].Substring( ++indexOf ); + } + else if ( m_Params[i].StartsWith( "WarningNumber" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + messageNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "ResetDelay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + resetDelay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) ); + } + } + + WarningItem wi = new WarningItem( m_ItemID, range, messageNumber ); + + wi.WarningString = messageString; + wi.ResetDelay = resetDelay; + + item = wi; + } + else if ( m_Type.IsSubclassOf( typeofBeverage ) ) + { + BeverageType content = BeverageType.Liquor; + bool fill = false; + + for ( int i = 0; !fill && i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Content" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + { + content = (BeverageType)Enum.Parse( typeof( BeverageType ), m_Params[i].Substring( ++indexOf ), true ); + fill = true; + } + } + } + + if ( fill ) + item = (Item)Activator.CreateInstance( m_Type, new object[]{ content } ); + else + item = (Item)Activator.CreateInstance( m_Type ); + } + else if ( m_Type.IsSubclassOf( typeofBaseDoor ) ) + { + DoorFacing facing = DoorFacing.WestCW; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Facing" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + { + facing = (DoorFacing)Enum.Parse( typeof( DoorFacing ), m_Params[i].Substring( ++indexOf ), true ); + break; + } + } + } + + item = (Item)Activator.CreateInstance( m_Type, new object[]{ facing } ); + } + else + { + item = (Item)Activator.CreateInstance( m_Type ); + } + } + catch ( Exception e ) + { + throw new Exception( String.Format( "Bad type: {0}", m_Type ), e ); + } + + if ( item is BaseAddon ) + { + if ( m_ItemID > 0 ) + { + List comps = ((BaseAddon)item).Components; + + for ( int i = 0; i < comps.Count; ++i ) + { + AddonComponent comp = (AddonComponent)comps[i]; + + if ( comp.Offset == Point3D.Zero ) + comp.ItemID = m_ItemID; + } + } + } + else if ( item is BaseLight ) + { + bool unlit = false, unprotected = false; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( !unlit && m_Params[i] == "Unlit" ) + unlit = true; + else if ( !unprotected && m_Params[i] == "Unprotected" ) + unprotected = true; + + if ( unlit && unprotected ) + break; + } + + if ( !unlit ) + ((BaseLight)item).Ignite(); + if ( !unprotected ) + ((BaseLight)item).Protected = true; + + if ( m_ItemID > 0 ) + item.ItemID = m_ItemID; + } + else if ( item is Server.Mobiles.Spawner ) + { + Server.Mobiles.Spawner sp = (Server.Mobiles.Spawner)item; + + sp.NextSpawn = TimeSpan.Zero; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Spawn" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.SpawnNames.Add( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "MinDelay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.MinDelay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "MaxDelay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.MaxDelay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "NextSpawn" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.NextSpawn = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Count" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.Count = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Team" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.Team = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "HomeRange" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.HomeRange = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Running" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.Running = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Group" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.Group = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + } + } + else if ( item is SkillTeleporter ) + { + SkillTeleporter tp = (SkillTeleporter)item; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Skill" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Skill = (SkillName)Enum.Parse( typeof( SkillName ), m_Params[i].Substring( ++indexOf ), true ); + } + else if ( m_Params[i].StartsWith( "RequiredFixedPoint" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Required = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ) * 0.01; + } + else if ( m_Params[i].StartsWith( "Required" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Required = Utility.ToDouble( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "MessageString" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.MessageString = m_Params[i].Substring( ++indexOf ); + } + else if ( m_Params[i].StartsWith( "MessageNumber" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.MessageNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "PointDest" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.PointDest = Point3D.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "MapDest" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.MapDest = Map.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Creatures" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Creatures = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "SourceEffect" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.SourceEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "DestEffect" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.DestEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "SoundID" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.SoundID = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Delay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Delay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) ); + } + } + + if ( m_ItemID > 0 ) + item.ItemID = m_ItemID; + } + else if ( item is KeywordTeleporter ) + { + KeywordTeleporter tp = (KeywordTeleporter)item; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Substring" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Substring = m_Params[i].Substring( ++indexOf ); + } + else if ( m_Params[i].StartsWith( "Keyword" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Keyword = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Range" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Range = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "PointDest" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.PointDest = Point3D.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "MapDest" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.MapDest = Map.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Creatures" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Creatures = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "SourceEffect" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.SourceEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "DestEffect" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.DestEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "SoundID" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.SoundID = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Delay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Delay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) ); + } + } + + if ( m_ItemID > 0 ) + item.ItemID = m_ItemID; + } + else if ( item is Teleporter ) + { + Teleporter tp = (Teleporter)item; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "PointDest" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.PointDest = Point3D.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "MapDest" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.MapDest = Map.Parse( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Creatures" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Creatures = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "SourceEffect" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.SourceEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "DestEffect" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.DestEffect = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "SoundID" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.SoundID = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Delay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + tp.Delay = TimeSpan.Parse( m_Params[i].Substring( ++indexOf ) ); + } + } + + if ( m_ItemID > 0 ) + item.ItemID = m_ItemID; + } + else if ( m_ItemID > 0 ) + { + item.ItemID = m_ItemID; + } + + item.Movable = false; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Light" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + item.Light = (LightType)Enum.Parse( typeof( LightType ), m_Params[i].Substring( ++indexOf ), true ); + } + else if ( m_Params[i].StartsWith( "Hue" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + { + int hue = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + + if ( item is DyeTub ) + ((DyeTub)item).DyedHue = hue; + else + item.Hue = hue; + } + } + else if ( m_Params[i].StartsWith( "Visible" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + item.Visible = Utility.ToBoolean( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "Name" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + item.Name = m_Params[i].Substring( ++indexOf ); + } + else if ( m_Params[i].StartsWith( "Amount" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + { + // Must supress stackable warnings + + bool wasStackable = item.Stackable; + + item.Stackable = true; + item.Amount = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + item.Stackable = wasStackable; + } + } + } + + item.Weight = -2; + + return item; + } + + private static Queue m_DeleteQueue = new Queue(); + + private static bool FindItem( int x, int y, int z, Map map, Item srcItem ) + { + int itemID = srcItem.ItemID; + + bool res = false; + + IPooledEnumerable eable; + + if ( srcItem is BaseDoor ) + { + eable = map.GetItemsInRange( new Point3D( x, y, z ), 1 ); + + foreach ( Item item in eable ) + { + if ( !(item is BaseDoor) ) + continue; + + BaseDoor bd = (BaseDoor)item; + Point3D p; + int bdItemID; + + if ( bd.Open ) + { + p = new Point3D( bd.X - bd.Offset.X, bd.Y - bd.Offset.Y, bd.Z - bd.Offset.Z ); + bdItemID = bd.ClosedID; + } + else + { + p = bd.Location; + bdItemID = bd.ItemID; + } + + if ( p.X != x || p.Y != y ) + continue; + + if ( item.Z == z && bdItemID == itemID ) + res = true; + else if ( Math.Abs( item.Z - z ) < 8 ) + m_DeleteQueue.Enqueue( item ); + } + } + else if ( (TileData.ItemTable[itemID & TileData.MaxItemValue].Flags & TileFlag.LightSource) != 0 ) + { + eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 ); + + LightType lt = srcItem.Light; + string srcName = srcItem.ItemData.Name; + + foreach ( Item item in eable ) + { + if ( item.Z == z ) + { + if ( item.ItemID == itemID ) + { + if ( item.Light != lt ) + m_DeleteQueue.Enqueue( item ); + else + res = true; + } + else if ( (item.ItemData.Flags & TileFlag.LightSource) != 0 && item.ItemData.Name == srcName ) + { + m_DeleteQueue.Enqueue( item ); + } + } + } + } + else if ( srcItem is Teleporter || srcItem is BaseBook ) + { + eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 ); + + Type type = srcItem.GetType(); + + foreach ( Item item in eable ) + { + if ( item.Z == z && item.ItemID == itemID ) + { + if ( item.GetType() != type ) + m_DeleteQueue.Enqueue( item ); + else + res = true; + } + } + } + else + { + eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 ); + + foreach ( Item item in eable ) + { + if ( item.Z == z && item.ItemID == itemID ) + { + eable.Free(); + return true; + } + } + } + + eable.Free(); + + while ( m_DeleteQueue.Count > 0 ) + ((Item)m_DeleteQueue.Dequeue()).Delete(); + + return res; + } + + public int Generate( Map[] maps ) + { + int count = 0; + + Item item = null; + + for ( int i = 0; i < m_Entries.Count; ++i ) + { + DecorationEntry entry = (DecorationEntry)m_Entries[i]; + Point3D loc = entry.Location; + string extra = entry.Extra; + + for ( int j = 0; j < maps.Length; ++j ) + { + if ( item == null ) + item = Construct(); + + if ( item == null ) + continue; + + if ( FindItem( loc.X, loc.Y, loc.Z, maps[j], item ) ) + { + } + else + { + item.MoveToWorld( loc, maps[j] ); + item.OnAfterSpawn(); + ++count; + + if ( item is BaseDoor ) + { + IPooledEnumerable eable = maps[j].GetItemsInRange( loc, 1 ); + + Type itemType = item.GetType(); + + foreach ( Item link in eable ) + { + if ( link != item && link.Z == item.Z && link.GetType() == itemType && ( link.X == item.X || link.Y == item.Y ) ) + { + ((BaseDoor)item).Link = (BaseDoor)link; + ((BaseDoor)link).Link = (BaseDoor)item; + break; + } + } + + eable.Free(); + } + + item = null; + } + } + } + + if ( item != null ) + item.Delete(); + + return count; + } + + public static ArrayList ReadAll( string path ) + { + using ( StreamReader ip = new StreamReader( path ) ) + { + ArrayList list = new ArrayList(); + + for ( DecorationList v = Read( ip ); v != null; v = Read( ip ) ) + list.Add( v ); + + return list; + } + } + + private static string[] m_EmptyParams = new string[0]; + + public static DecorationList Read( StreamReader ip ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + line = line.Trim(); + + if ( line.Length > 0 && !line.StartsWith( "#" ) ) + break; + } + + if ( string.IsNullOrEmpty( line ) ) + return null; + + DecorationList list = new DecorationList(); + + int indexOf = line.IndexOf( ' ' ); + + list.m_Type = ScriptCompiler.FindTypeByName( line.Substring( 0, indexOf++ ), true ); + + if ( list.m_Type == null ) + throw new ArgumentException( String.Format( "Type not found for header: '{0}'", line ) ); + + line = line.Substring( indexOf ); + indexOf = line.IndexOf( '(' ); + if ( indexOf >= 0 ) + { + list.m_ItemID = Utility.ToInt32( line.Substring( 0, indexOf - 1 ) ); + + string parms = line.Substring( ++indexOf ); + + if ( line.EndsWith( ")" ) ) + parms = parms.Substring( 0, parms.Length - 1 ); + + list.m_Params = parms.Split( ';' ); + + for ( int i = 0; i < list.m_Params.Length; ++i ) + list.m_Params[i] = list.m_Params[i].Trim(); + } + else + { + list.m_ItemID = Utility.ToInt32( line ); + list.m_Params = m_EmptyParams; + } + + list.m_Entries = new ArrayList(); + + while ( (line = ip.ReadLine()) != null ) + { + line = line.Trim(); + + if ( line.Length == 0 ) + break; + + if ( line.StartsWith( "#" ) ) + continue; + + list.m_Entries.Add( new DecorationEntry( line ) ); + } + + return list; + } + } + + public class DecorationEntry + { + private Point3D m_Location; + private string m_Extra; + + public Point3D Location{ get{ return m_Location; } } + public string Extra{ get{ return m_Extra; } } + + public DecorationEntry( string line ) + { + string x, y, z; + + Pop( out x, ref line ); + Pop( out y, ref line ); + Pop( out z, ref line ); + + m_Location = new Point3D( Utility.ToInt32( x ), Utility.ToInt32( y ), Utility.ToInt32( z ) ); + m_Extra = line; + } + + public void Pop( out string v, ref string line ) + { + int space = line.IndexOf( ' ' ); + + if ( space >= 0 ) + { + v = line.Substring( 0, space++ ); + line = line.Substring( space ); + } + else + { + v = line; + line = ""; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Docs.cs b/Scripts/Commands/Docs.cs new file mode 100644 index 0000000..58f9d51 --- /dev/null +++ b/Scripts/Commands/Docs.cs @@ -0,0 +1,1858 @@ +using System; +using System.IO; +using System.Text; +using System.Reflection; +using System.Collections; +using Server; +using Server.Items; +using Server.Commands.Generic; +using System.Collections.Generic; + +namespace Server.Commands +{ + public class Docs + { + public static void Initialize() + { + CommandSystem.Register( "DocGen", AccessLevel.Administrator, new CommandEventHandler( DocGen_OnCommand ) ); + } + + [Usage( "DocGen" )] + [Description( "Generates RunUO documentation." )] + private static void DocGen_OnCommand( CommandEventArgs e ) + { + World.Broadcast( 0x35, true, "Documentation is being generated, please wait." ); + Console.WriteLine( "Documentation is being generated, please wait." ); + + Network.NetState.FlushAll(); + Network.NetState.Pause(); + + DateTime startTime = DateTime.Now; + + bool generated = Document(); + + DateTime endTime = DateTime.Now; + + Network.NetState.Resume(); + + if( generated ) + { + World.Broadcast( 0x35, true, "Documentation has been completed. The entire process took {0:F1} seconds.", (endTime - startTime).TotalSeconds ); + Console.WriteLine( "Documentation complete." ); + } + else + { + World.Broadcast( 0x35, true, "Docmentation failed: Documentation directories are locked and in use. Please close all open files and directories and try again." ); + Console.WriteLine( "Documentation failed." ); + } + } + + private class MemberComparer : IComparer + { + public int Compare( object x, object y ) + { + if( x == y ) + return 0; + + ConstructorInfo aCtor = x as ConstructorInfo; + ConstructorInfo bCtor = y as ConstructorInfo; + + PropertyInfo aProp = x as PropertyInfo; + PropertyInfo bProp = y as PropertyInfo; + + MethodInfo aMethod = x as MethodInfo; + MethodInfo bMethod = y as MethodInfo; + + bool aStatic = GetStaticFor( aCtor, aProp, aMethod ); + bool bStatic = GetStaticFor( bCtor, bProp, bMethod ); + + if( aStatic && !bStatic ) + return -1; + else if( !aStatic && bStatic ) + return 1; + + int v = 0; + + if( aCtor != null ) + { + if( bCtor == null ) + v = -1; + } + else if( bCtor != null ) + { + if( aCtor == null ) + v = 1; + } + else if( aProp != null ) + { + if( bProp == null ) + v = -1; + } + else if( bProp != null ) + { + if( aProp == null ) + v = 1; + } + + if( v == 0 ) + { + v = GetNameFrom( aCtor, aProp, aMethod ).CompareTo( GetNameFrom( bCtor, bProp, bMethod ) ); + } + + if( v == 0 && aCtor != null && bCtor != null ) + { + v = aCtor.GetParameters().Length.CompareTo( bCtor.GetParameters().Length ); + } + else if( v == 0 && aMethod != null && bMethod != null ) + { + v = aMethod.GetParameters().Length.CompareTo( bMethod.GetParameters().Length ); + } + + return v; + } + + private bool GetStaticFor( ConstructorInfo ctor, PropertyInfo prop, MethodInfo method ) + { + if( ctor != null ) + return ctor.IsStatic; + else if( method != null ) + return method.IsStatic; + + if( prop != null ) + { + MethodInfo getMethod = prop.GetGetMethod(); + MethodInfo setMethod = prop.GetGetMethod(); + + return (getMethod != null && getMethod.IsStatic) || (setMethod != null && setMethod.IsStatic); + } + + return false; + } + + private string GetNameFrom( ConstructorInfo ctor, PropertyInfo prop, MethodInfo method ) + { + if( ctor != null ) + return ctor.DeclaringType.Name; + else if( prop != null ) + return prop.Name; + else if( method != null ) + return method.Name; + else + return ""; + } + } + + private class TypeComparer : IComparer + { + public int Compare( TypeInfo x, TypeInfo y ) + { + if( x == null && y == null ) + return 0; + else if( x == null ) + return -1; + else if( y == null ) + return 1; + + return x.TypeName.CompareTo( y.TypeName ); + } + } + + private class TypeInfo + { + public Type m_Type, m_BaseType, m_Declaring; + public List m_Derived, m_Nested; + public Type[] m_Interfaces; + private string m_FileName, m_TypeName, m_LinkName; + + public TypeInfo( Type type ) + { + m_Type = type; + + m_BaseType = type.BaseType; + m_Declaring = type.DeclaringType; + m_Interfaces = type.GetInterfaces(); + + FormatGeneric( m_Type, ref m_TypeName, ref m_FileName, ref m_LinkName ); + + // Console.WriteLine( ">> inline typeinfo: "+m_TypeName ); + // m_TypeName = GetGenericTypeName( m_Type ); + // m_FileName = Docs.GetFileName( "docs/types/", GetGenericTypeName( m_Type, "-", "-" ), ".html" ); + // m_Writer = Docs.GetWriter( "docs/types/", m_FileName ); + } + + public string FileName { get { return m_FileName; } } + public string TypeName { get { return m_TypeName; } } + + public string LinkName( string dirRoot ) + { + return m_LinkName.Replace( "@directory@", dirRoot ); + } + } + + #region FileSystem + private static readonly char[] ReplaceChars = "<>".ToCharArray(); + + public static string GetFileName( string root, string name, string ext ) + { + if( name.IndexOfAny( ReplaceChars ) >= 0 ) + { + StringBuilder sb = new StringBuilder( name ); + + for( int i = 0; i < ReplaceChars.Length; ++i ) + { + sb.Replace( ReplaceChars[i], '-' ); + } + + name = sb.ToString(); + } + + int index = 0; + string file = String.Concat( name, ext ); + + while( File.Exists( Path.Combine( root, file ) ) ) + { + file = String.Concat( name, ++index, ext ); + } + + return file; + } + + private static string m_RootDirectory = Path.GetDirectoryName( Environment.GetCommandLineArgs()[0] ); + + private static void EnsureDirectory( string path ) + { + path = Path.Combine( m_RootDirectory, path ); + + if( !Directory.Exists( path ) ) + Directory.CreateDirectory( path ); + } + + private static void DeleteDirectory( string path ) + { + path = Path.Combine( m_RootDirectory, path ); + + if( Directory.Exists( path ) ) + Directory.Delete( path, true ); + } + + private static StreamWriter GetWriter( string root, string name ) + { + return new StreamWriter( Path.Combine( Path.Combine( m_RootDirectory, root ), name ) ); + } + + private static StreamWriter GetWriter( string path ) + { + return new StreamWriter( Path.Combine( m_RootDirectory, path ) ); + } + #endregion + + #region GetPair + + private static string[,] m_Aliases = new string[,] + { + { "System.Object", "object" }, + { "System.String", "string" }, + { "System.Boolean", "bool" }, + { "System.Byte", "byte" }, + { "System.SByte", "sbyte" }, + { "System.Int16", "short" }, + { "System.UInt16", "ushort" }, + { "System.Int32", "int" }, + { "System.UInt32", "uint" }, + { "System.Int64", "long" }, + { "System.UInt64", "ulong" }, + { "System.Single", "float" }, + { "System.Double", "double" }, + { "System.Decimal", "decimal" }, + { "System.Char", "char" }, + { "System.Void", "void" }, + }; + + private static int m_AliasLength = m_Aliases.GetLength( 0 ); + + public static string GetPair( Type varType, string name, bool ignoreRef ) + { + string prepend = ""; + StringBuilder append = new StringBuilder(); + + Type realType = varType; + + if( varType.IsByRef ) + { + if( !ignoreRef ) + prepend = RefString; + + realType = varType.GetElementType(); + } + + if( realType.IsPointer ) + { + if( realType.IsArray ) + { + append.Append( '*' ); + + do + { + append.Append( '[' ); + + for( int i = 1; i < realType.GetArrayRank(); ++i ) + append.Append( ',' ); + + append.Append( ']' ); + + realType = realType.GetElementType(); + } while( realType.IsArray ); + + append.Append( ' ' ); + } + else + { + realType = realType.GetElementType(); + append.Append( " *" ); + } + } + else if( realType.IsArray ) + { + do + { + append.Append( '[' ); + + for( int i = 1; i < realType.GetArrayRank(); ++i ) + append.Append( ',' ); + + append.Append( ']' ); + + realType = realType.GetElementType(); + } while( realType.IsArray ); + + append.Append( ' ' ); + } + else + { + append.Append( ' ' ); + } + + string fullName = realType.FullName; + string aliased = null;// = realType.Name; + + TypeInfo info = null; + m_Types.TryGetValue( realType, out info ); + + if( info != null ) + { + aliased = ""+info.LinkName( null ); + //aliased = String.Format( "{1}", info.m_FileName, info.m_TypeName ); + } + else + { + //FormatGeneric( ); + if( realType.IsGenericType ) + { + string typeName = ""; + string fileName = ""; + string linkName = ""; + + FormatGeneric( realType, ref typeName, ref fileName, ref linkName ); + linkName = linkName.Replace( "@directory@", null ); + aliased = linkName; + } + else + { + for( int i = 0; i < m_AliasLength; ++i ) + { + if( m_Aliases[i, 0] == fullName ) + { + aliased = m_Aliases[i, 1]; + break; + } + } + } + + if( aliased == null ) + aliased = realType.Name; + } + + string retval = String.Concat( prepend, aliased, append, name ); + //Console.WriteLine(">> getpair: "+retval); + return retval; + } + + #endregion + + private static Dictionary m_Types; + private static Dictionary> m_Namespaces; + + #region Root documentation + + private static bool Document() + { + try { DeleteDirectory( "docs/" ); } + catch { return false; } + + EnsureDirectory( "docs/" ); + EnsureDirectory( "docs/namespaces/" ); + EnsureDirectory( "docs/types/" ); + EnsureDirectory( "docs/bods/" ); + + GenerateStyles(); + GenerateIndex(); + + DocumentCommands(); + DocumentKeywords(); + DocumentBodies(); + + m_Types = new Dictionary(); + m_Namespaces = new Dictionary>(); + + List assemblies = new List(); + + assemblies.Add( Core.Assembly ); + + foreach( Assembly asm in ScriptCompiler.Assemblies ) + assemblies.Add( asm ); + + Assembly[] asms = assemblies.ToArray(); + + for( int i = 0; i < asms.Length; ++i ) + LoadTypes( asms[i], asms ); + + DocumentLoadedTypes(); + DocumentConstructableObjects(); + + return true; + } + + private static void AddIndexLink( StreamWriter html, string filePath, string label, string desc ) + { + html.WriteLine( "

{2}

", filePath, desc, label ); + } + + private static void GenerateStyles() + { + using( StreamWriter css = GetWriter( "docs/", "styles.css" ) ) + { + css.WriteLine( "body { background-color: #FFFFFF; font-family: verdana, arial; font-size: 11px; }" ); + css.WriteLine( "a { color: #28435E; }" ); + css.WriteLine( "a:hover { color: #4878A9; }" ); + css.WriteLine( "td.header { background-color: #9696AA; font-weight: bold; font-size: 12px; }" ); + css.WriteLine( "td.lentry { background-color: #D7D7EB; width: 10%; }" ); + css.WriteLine( "td.rentry { background-color: #FFFFFF; width: 90%; }" ); + css.WriteLine( "td.entry { background-color: #FFFFFF; }" ); + css.WriteLine( "td { font-size: 11px; }" ); + css.WriteLine( ".tbl-border { background-color: #46465A; }" ); + + css.WriteLine( "td.ir {{ background-color: #{0:X6}; }}", Iron ); + css.WriteLine( "td.cl {{ background-color: #{0:X6}; }}", Cloth ); + css.WriteLine( "td.pl {{ background-color: #{0:X6}; }}", Plain ); + } + } + + private static void GenerateIndex() + { + using( StreamWriter html = GetWriter( "docs/", "index.html" ) ) + { + html.WriteLine( "" ); + html.WriteLine( " " ); + html.WriteLine( " RunUO Documentation - Index" ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( " " ); + + AddIndexLink( html, "commands.html", "Commands", "Every available command. This contains command name, usage, aliases, and description." ); + AddIndexLink( html, "objects.html", "Constructable Objects", "Every constructable item or npc. This contains object name and usage. Hover mouse over parameters to see type description." ); + AddIndexLink( html, "keywords.html", "Speech Keywords", "Lists speech keyword numbers and associated match patterns. These are used in some scripts for multi-language matching of client speech." ); + AddIndexLink( html, "bodies.html", "Body List", "Every usable body number and name. Table is generated from a UO:3D client datafile. If you do not have UO:3D installed, this may be blank." ); + AddIndexLink( html, "overview.html", "Class Overview", "Scripting reference. Contains every class type and contained methods in the core and scripts." ); + + html.WriteLine( " " ); + html.WriteLine( "" ); + } + } + + #endregion + + #region BODs + + private const int Iron = 0xCCCCDD; + private const int Cloth = 0xDDDDDD; + private const int Plain = 0xCCAA88; + + #endregion + + #region Bodies + public static List LoadBodies() + { + List list = new List(); + + string path = Core.FindDataFile( "models/models.txt" ); + + if( File.Exists( path ) ) + { + using( StreamReader ip = new StreamReader( path ) ) + { + string line; + + while( (line = ip.ReadLine()) != null ) + { + line = line.Trim(); + + if( line.Length == 0 || line.StartsWith( "#" ) ) + continue; + + string[] split = line.Split( '\t' ); + + if( split.Length >= 9 ) + { + Body body = Utility.ToInt32( split[0] ); + ModelBodyType type = (ModelBodyType)Utility.ToInt32( split[1] ); + string name = split[8]; + + BodyEntry entry = new BodyEntry( body, type, name ); + + if( !list.Contains( entry ) ) + list.Add( entry ); + } + } + } + } + + return list; + } + + private static void DocumentBodies() + { + List list = LoadBodies(); + + using( StreamWriter html = GetWriter( "docs/", "bodies.html" ) ) + { + html.WriteLine( "" ); + html.WriteLine( " " ); + html.WriteLine( " RunUO Documentation - Body List" ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( "

Back to the index

" ); + + if( list.Count > 0 ) + { + html.WriteLine( "

Body List

" ); + + list.Sort( new BodyEntrySorter() ); + + ModelBodyType lastType = ModelBodyType.Invalid; + + for( int i = 0; i < list.Count; ++i ) + { + BodyEntry entry = list[i]; + ModelBodyType type = entry.BodyType; + + if( type != lastType ) + { + if( lastType != ModelBodyType.Invalid ) + html.WriteLine( "
" ); + + lastType = type; + + html.WriteLine( " ", type ); + + switch( type ) + { + case ModelBodyType.Monsters: html.WriteLine( " Monsters | Sea | Animals | Human | Equipment

" ); break; + case ModelBodyType.Sea: html.WriteLine( " Monsters | Sea | Animals | Human | Equipment

" ); break; + case ModelBodyType.Animals: html.WriteLine( " Monsters | Sea | Animals | Human | Equipment

" ); break; + case ModelBodyType.Human: html.WriteLine( " Monsters | Sea | Animals | Human | Equipment

" ); break; + case ModelBodyType.Equipment: html.WriteLine( " Monsters | Sea | Animals | Human | Equipment

" ); break; + } + + html.WriteLine( " " ); + html.WriteLine( "
" ); + html.WriteLine( " " ); + html.WriteLine( " ", type ); + } + + html.WriteLine( " ", entry.Body.BodyID, entry.Name ); + } + + html.WriteLine( "
{0}
{0}{1}
" ); + } + else + { + html.WriteLine( " This feature requires a UO:3D installation." ); + } + + html.WriteLine( " " ); + html.WriteLine( "" ); + } + } + #endregion + + #region Speech + private static void DocumentKeywords() + { + List> tables = LoadSpeechFile(); + + using( StreamWriter html = GetWriter( "docs/", "keywords.html" ) ) + { + html.WriteLine( "" ); + html.WriteLine( " " ); + html.WriteLine( " RunUO Documentation - Speech Keywords" ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( "

Back to the index

" ); + html.WriteLine( "

Speech Keywords

" ); + + for( int p = 0; p < 1 && p < tables.Count; ++p ) + { + Dictionary table = tables[p]; + + if( p > 0 ) + html.WriteLine( "
" ); + + html.WriteLine( " " ); + html.WriteLine( "
" ); + html.WriteLine( " " ); + html.WriteLine( " " ); + + List list = new List( table.Values ); + list.Sort( new SpeechEntrySorter() ); + + for( int i = 0; i < list.Count; ++i ) + { + SpeechEntry entry = list[i]; + + html.Write( " " ); + } + + html.WriteLine( "
NumberText
0x{0:X4}", entry.Index ); + + entry.Strings.Sort();//( new EnglishPrioStringSorter() ); + + for( int j = 0; j < entry.Strings.Count; ++j ) + { + if( j > 0 ) + html.Write( "
" ); + + string v = entry.Strings[j]; + + for( int k = 0; k < v.Length; ++k ) + { + char c = v[k]; + + if( c == '<' ) + html.Write( "<" ); + else if( c == '>' ) + html.Write( ">" ); + else if( c == '&' ) + html.Write( "&" ); + else if( c == '"' ) + html.Write( """ ); + else if( c == '\'' ) + html.Write( "'" ); + else if( c >= 0x20 && c < 0x80 ) + html.Write( c ); + else + html.Write( "&#{0};", (int)c ); + } + } + + html.WriteLine( "
" ); + } + + html.WriteLine( " " ); + html.WriteLine( "" ); + } + } + + private class SpeechEntry + { + private int m_Index; + private List m_Strings; + + public int Index { get { return m_Index; } } + public List Strings { get { return m_Strings; } } + + public SpeechEntry( int index ) + { + m_Index = index; + m_Strings = new List(); + } + } + + private class SpeechEntrySorter : IComparer + { + public int Compare( SpeechEntry x, SpeechEntry y ) + { + return x.Index.CompareTo( y.Index ); + } + } + + private static List> LoadSpeechFile() + { + List> tables = new List>(); + int lastIndex = -1; + + Dictionary table = null; + + string path = Core.FindDataFile( "speech.mul" ); + + if( File.Exists( path ) ) + { + using( FileStream ip = new FileStream( path, FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + BinaryReader bin = new BinaryReader( ip ); + + while( bin.PeekChar() >= 0 ) + { + int index = (bin.ReadByte() << 8) | bin.ReadByte(); + int length = (bin.ReadByte() << 8) | bin.ReadByte(); + string text = Encoding.UTF8.GetString( bin.ReadBytes( length ) ).Trim(); + + if( text.Length == 0 ) + continue; + + if( table == null || lastIndex > index ) + { + if( index == 0 && text == "*withdraw*" ) + tables.Insert( 0, table = new Dictionary() ); + else + tables.Add( table = new Dictionary() ); + } + + lastIndex = index; + + SpeechEntry entry = null; + table.TryGetValue( index, out entry ); + + if( entry == null ) + table[index] = entry = new SpeechEntry( index ); + + entry.Strings.Add( text ); + } + } + } + + return tables; + } + #endregion + + #region Commands + + public class DocCommandEntry + { + private AccessLevel m_AccessLevel; + private string m_Name; + private string[] m_Aliases; + private string m_Usage; + private string m_Description; + + public AccessLevel AccessLevel { get { return m_AccessLevel; } } + public string Name { get { return m_Name; } } + public string[] Aliases { get { return m_Aliases; } } + public string Usage { get { return m_Usage; } } + public string Description { get { return m_Description; } } + + public DocCommandEntry( AccessLevel accessLevel, string name, string[] aliases, string usage, string description ) + { + m_AccessLevel = accessLevel; + m_Name = name; + m_Aliases = aliases; + m_Usage = usage; + m_Description = description; + } + } + + public class CommandEntrySorter : IComparer + { + public int Compare( DocCommandEntry a, DocCommandEntry b ) + { + int v = b.AccessLevel.CompareTo( a.AccessLevel ); + + if( v == 0 ) + v = a.Name.CompareTo( b.Name ); + + return v; + } + } + + private static void DocumentCommands() + { + using( StreamWriter html = GetWriter( "docs/", "commands.html" ) ) + { + html.WriteLine( "" ); + html.WriteLine( " " ); + html.WriteLine( " RunUO Documentation - Commands" ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( "

Back to the index

" ); + html.WriteLine( "

Commands

" ); + + List commands = new List( CommandSystem.Entries.Values ); + List list = new List(); + + commands.Sort(); + commands.Reverse(); + Clean( commands ); + + for( int i = 0; i < commands.Count; ++i ) + { + CommandEntry e = commands[i]; + + MethodInfo mi = e.Handler.Method; + + object[] attrs = mi.GetCustomAttributes( typeof( UsageAttribute ), false ); + + if( attrs.Length == 0 ) + continue; + + UsageAttribute usage = attrs[0] as UsageAttribute; + + attrs = mi.GetCustomAttributes( typeof( DescriptionAttribute ), false ); + + if( attrs.Length == 0 ) + continue; + + DescriptionAttribute desc = attrs[0] as DescriptionAttribute; + + if( usage == null || desc == null ) + continue; + + attrs = mi.GetCustomAttributes( typeof( AliasesAttribute ), false ); + + AliasesAttribute aliases = (attrs.Length == 0 ? null : attrs[0] as AliasesAttribute); + + string descString = desc.Description.Replace( "<", "<" ).Replace( ">", ">" ); + + if( aliases == null ) + list.Add( new DocCommandEntry( e.AccessLevel, e.Command, null, usage.Usage, descString ) ); + else + list.Add( new DocCommandEntry( e.AccessLevel, e.Command, aliases.Aliases, usage.Usage, descString ) ); + } + + for( int i = 0; i < TargetCommands.AllCommands.Count; ++i ) + { + BaseCommand command = TargetCommands.AllCommands[i]; + + string usage = command.Usage; + string desc = command.Description; + + if( usage == null || desc == null ) + continue; + + string[] cmds = command.Commands; + string cmd = cmds[0]; + string[] aliases = new string[cmds.Length - 1]; + + for( int j = 0; j < aliases.Length; ++j ) + aliases[j] = cmds[j + 1]; + + desc = desc.Replace( "<", "<" ).Replace( ">", ">" ); + + if( command.Supports != CommandSupport.Single ) + { + StringBuilder sb = new StringBuilder( 50 + desc.Length ); + + sb.Append( "Modifiers: " ); + + if( (command.Supports & CommandSupport.Global) != 0 ) + sb.Append( "Global, " ); + + if( (command.Supports & CommandSupport.Online) != 0 ) + sb.Append( "Online, " ); + + if( (command.Supports & CommandSupport.Region) != 0 ) + sb.Append( "Region, " ); + + if( (command.Supports & CommandSupport.Contained) != 0 ) + sb.Append( "Contained, " ); + + if( (command.Supports & CommandSupport.Multi) != 0 ) + sb.Append( "Multi, " ); + + if( (command.Supports & CommandSupport.Area) != 0 ) + sb.Append( "Area, " ); + + if( (command.Supports & CommandSupport.Self) != 0 ) + sb.Append( "Self, " ); + + sb.Remove( sb.Length - 2, 2 ); + sb.Append( "
" ); + sb.Append( desc ); + + desc = sb.ToString(); + } + + list.Add( new DocCommandEntry( command.AccessLevel, cmd, aliases, usage, desc ) ); + } + + List commandImpls = BaseCommandImplementor.Implementors; + + for( int i = 0; i < commandImpls.Count; ++i ) + { + BaseCommandImplementor command = commandImpls[i]; + + string usage = command.Usage; + string desc = command.Description; + + if( usage == null || desc == null ) + continue; + + string[] cmds = command.Accessors; + string cmd = cmds[0]; + string[] aliases = new string[cmds.Length - 1]; + + for( int j = 0; j < aliases.Length; ++j ) + aliases[j] = cmds[j + 1]; + + desc = desc.Replace( "<", "<" ).Replace( ">", ">" ); + + list.Add( new DocCommandEntry( command.AccessLevel, cmd, aliases, usage, desc ) ); + } + + list.Sort( new CommandEntrySorter() ); + + AccessLevel last = AccessLevel.Player; + + foreach( DocCommandEntry e in list ) + { + if( e.AccessLevel != last ) + { + if( last != AccessLevel.Player ) + html.WriteLine( "

" ); + + last = e.AccessLevel; + + html.WriteLine( " ", last ); + + switch( last ) + { + case AccessLevel.Administrator: html.WriteLine( " Administrator | Game Master | Counselor | Player

" ); break; + case AccessLevel.GameMaster: html.WriteLine( " Administrator | Game Master | Counselor | Player

" ); break; + case AccessLevel.Seer: html.WriteLine( " Administrator | Game Master | Counselor | Player

" ); break; + case AccessLevel.Counselor: html.WriteLine( " Administrator | Game Master | Counselor | Player

" ); break; + case AccessLevel.Player: html.WriteLine( " Administrator | Game Master | Counselor | Player

" ); break; + } + + html.WriteLine( " " ); + html.WriteLine( "
" ); + html.WriteLine( " " ); + html.WriteLine( " ", last == AccessLevel.GameMaster ? "Game Master" : last.ToString() ); + } + + DocumentCommand( html, e ); + } + + html.WriteLine( "
{0}
" ); + html.WriteLine( " " ); + html.WriteLine( "" ); + } + } + + public static void Clean( List list ) + { + for( int i = 0; i < list.Count; ++i ) + { + CommandEntry e = list[i]; + + for( int j = i + 1; j < list.Count; ++j ) + { + CommandEntry c = list[j]; + + if( e.Handler.Method == c.Handler.Method ) + { + list.RemoveAt( j ); + --j; + } + } + } + } + + private static void DocumentCommand( StreamWriter html, DocCommandEntry e ) + { + string usage = e.Usage; + string desc = e.Description; + string[] aliases = e.Aliases; + + html.Write( " {0}", e.Name ); + + if( aliases == null || aliases.Length == 0 ) + { + html.Write( "Usage: {0}
{1}", usage.Replace( "<", "<" ).Replace( ">", ">" ), desc ); + } + else + { + html.Write( "Usage: {0}
Alias{1}: ", usage.Replace( "<", "<" ).Replace( ">", ">" ), aliases.Length == 1 ? "" : "es" ); + + for( int i = 0; i < aliases.Length; ++i ) + { + if( i != 0 ) + html.Write( ", " ); + + html.Write( aliases[i] ); + } + + html.Write( "
{0}", desc ); + } + + html.WriteLine( "" ); + } + + #endregion + + private static void LoadTypes( Assembly a, Assembly[] asms ) + { + Type[] types = a.GetTypes(); + + for( int i = 0; i < types.Length; ++i ) + { + Type type = types[i]; + + string nspace = type.Namespace; + + if( nspace == null || type.IsSpecialName ) + continue; + + TypeInfo info = new TypeInfo( type ); + m_Types[type] = info; + + List nspaces = null; + m_Namespaces.TryGetValue( nspace, out nspaces ); + + if( nspaces == null ) + m_Namespaces[nspace] = nspaces = new List(); + + nspaces.Add( info ); + + Type baseType = info.m_BaseType; + + if( baseType != null && InAssemblies( baseType, asms ) ) + { + TypeInfo baseInfo = null; + m_Types.TryGetValue( baseType, out baseInfo ); + + if( baseInfo == null ) + m_Types[baseType] = baseInfo = new TypeInfo( baseType ); + + if( baseInfo.m_Derived == null ) + baseInfo.m_Derived = new List(); + + baseInfo.m_Derived.Add( info ); + } + + Type decType = info.m_Declaring; + + if( decType != null ) + { + TypeInfo decInfo = null; + m_Types.TryGetValue( decType, out decInfo ); + + if( decInfo == null ) + m_Types[decType] = decInfo = new TypeInfo( decType ); + + if( decInfo.m_Nested == null ) + decInfo.m_Nested = new List(); + + decInfo.m_Nested.Add( info ); + } + + for( int j = 0; j < info.m_Interfaces.Length; ++j ) + { + Type iface = info.m_Interfaces[j]; + + if( !InAssemblies( iface, asms ) ) + continue; + + TypeInfo ifaceInfo = null; + m_Types.TryGetValue( iface, out ifaceInfo ); + + if( ifaceInfo == null ) + m_Types[iface] = ifaceInfo = new TypeInfo( iface ); + + if( ifaceInfo.m_Derived == null ) + ifaceInfo.m_Derived = new List(); + + ifaceInfo.m_Derived.Add( info ); + } + } + } + + private static bool InAssemblies( Type t, Assembly[] asms ) + { + Assembly a = t.Assembly; + + for( int i = 0; i < asms.Length; ++i ) + if( a == asms[i] ) + return true; + + return false; + } + + #region Constructable Objects + private static Type typeofItem = typeof( Item ), typeofMobile = typeof( Mobile ), typeofMap = typeof( Map ); + private static Type typeofCustomEnum = typeof( CustomEnumAttribute ); + + private static bool IsConstructable( Type t, out bool isItem ) + { + if( isItem = typeofItem.IsAssignableFrom( t ) ) + return true; + + return typeofMobile.IsAssignableFrom( t ); + } + + private static bool IsConstructable( ConstructorInfo ctor ) + { + return ctor.IsDefined( typeof( ConstructableAttribute ), false ); + } + + private static void DocumentConstructableObjects() + { + List types = new List( m_Types.Values ); + types.Sort( new TypeComparer() ); + + ArrayList items = new ArrayList(), mobiles = new ArrayList(); + + for( int i = 0; i < types.Count; ++i ) + { + Type t = types[i].m_Type; + bool isItem; + + if( t.IsAbstract || !IsConstructable( t, out isItem ) ) + continue; + + ConstructorInfo[] ctors = t.GetConstructors(); + bool anyConstructable = false; + + for( int j = 0; !anyConstructable && j < ctors.Length; ++j ) + anyConstructable = IsConstructable( ctors[j] ); + + if( anyConstructable ) + { + (isItem ? items : mobiles).Add( t ); + (isItem ? items : mobiles).Add( ctors ); + } + } + + using( StreamWriter html = GetWriter( "docs/", "objects.html" ) ) + { + html.WriteLine( "" ); + html.WriteLine( " " ); + html.WriteLine( " RunUO Documentation - Constructable Objects" ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( "

Back to the index

" ); + html.WriteLine( "

Constructable Items and Mobiles

" ); + + html.WriteLine( " " ); + html.WriteLine( " " ); + html.WriteLine( "
" ); + html.WriteLine( " " ); + html.WriteLine( " " ); + + for( int i = 0; i < items.Count; i += 2 ) + DocumentConstructableObject( html, (Type)items[i], (ConstructorInfo[])items[i + 1] ); + + html.WriteLine( "
Item NameUsage


" ); + + html.WriteLine( "
" ); + html.WriteLine( " " ); + html.WriteLine( "
" ); + html.WriteLine( " " ); + html.WriteLine( " " ); + + for( int i = 0; i < mobiles.Count; i += 2 ) + DocumentConstructableObject( html, (Type)mobiles[i], (ConstructorInfo[])mobiles[i + 1] ); + + html.WriteLine( "
Mobile NameUsage
" ); + + html.WriteLine( " " ); + html.WriteLine( "" ); + } + } + + private static void DocumentConstructableObject( StreamWriter html, Type t, ConstructorInfo[] ctors ) + { + html.Write( " {0}", t.Name ); + + bool first = true; + + for( int i = 0; i < ctors.Length; ++i ) + { + ConstructorInfo ctor = ctors[i]; + + if( !IsConstructable( ctor ) ) + continue; + + if( !first ) + html.Write( "
" ); + + first = false; + + html.Write( "{0}Add {1}", CommandSystem.Prefix, t.Name ); + + ParameterInfo[] parms = ctor.GetParameters(); + + for( int j = 0; j < parms.Length; ++j ) + { + html.Write( "
{1}", GetTooltipFor( parms[j] ), parms[j].Name ); + } + } + + html.WriteLine( "" ); + } + + #endregion + + #region Tooltips + + private const string HtmlNewLine = " "; + + private static object[,] m_Tooltips = new object[,] + { + { typeof( Byte ), "Numeric value in the range from 0 to 255, inclusive." }, + { typeof( SByte ), "Numeric value in the range from negative 128 to positive 127, inclusive." }, + { typeof( UInt16 ), "Numeric value in the range from 0 to 65,535, inclusive." }, + { typeof( Int16 ), "Numeric value in the range from negative 32,768 to positive 32,767, inclusive." }, + { typeof( UInt32 ), "Numeric value in the range from 0 to 4,294,967,295, inclusive." }, + { typeof( Int32 ), "Numeric value in the range from negative 2,147,483,648 to positive 2,147,483,647, inclusive." }, + { typeof( UInt64 ), "Numeric value in the range from 0 through about 10^20." }, + { typeof( Int64 ), "Numeric value in the approximate range from negative 10^19 through 10^19." }, + { typeof( String ), "Text value. To specify a value containing spaces, encapsulate the value in quote characters:{0}{0}"Spaced text example"" }, + { typeof( Boolean ), "Boolean value which can be either True or False." }, + { typeof( Map ), "Map or facet name. Possible values include:{0}{0}- Britannia{0}- Underworld{0}- Darkness{0}- Ocean" }, + { typeof( Poison ), "Poison name or level. Possible values include:{0}{0}- Lesser{0}- Regular{0}- Greater{0}- Deadly{0}- Lethal" }, + { typeof( Point3D ), "Three-dimensional coordinate value. Format as follows:{0}{0}"(, , )"" } + }; + + private static string GetTooltipFor( ParameterInfo param ) + { + Type paramType = param.ParameterType; + + for( int i = 0; i < m_Tooltips.GetLength( 0 ); ++i ) + { + Type checkType = (Type)m_Tooltips[i, 0]; + + if( paramType == checkType ) + return String.Format( (string)m_Tooltips[i, 1], HtmlNewLine ); + } + + if( paramType.IsEnum ) + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat( "Enumeration value or name. Possible named values include:{0}", HtmlNewLine ); + + string[] names = Enum.GetNames( paramType ); + + for( int i = 0; i < names.Length; ++i ) + sb.AppendFormat( "{0}- {1}", HtmlNewLine, names[i] ); + + return sb.ToString(); + } + else if( paramType.IsDefined( typeofCustomEnum, false ) ) + { + object[] attributes = paramType.GetCustomAttributes( typeofCustomEnum, false ); + + if( attributes != null && attributes.Length > 0 ) + { + CustomEnumAttribute attr = attributes[0] as CustomEnumAttribute; + + if( attr != null ) + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat( "Enumeration value or name. Possible named values include:{0}", HtmlNewLine ); + + string[] names = attr.Names; + + for( int i = 0; i < names.Length; ++i ) + sb.AppendFormat( "{0}- {1}", HtmlNewLine, names[i] ); + + return sb.ToString(); + } + } + } + else if( paramType == typeofMap ) + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat( "Enumeration value or name. Possible named values include:{0}", HtmlNewLine ); + + string[] names = Map.GetMapNames(); + + for( int i = 0; i < names.Length; ++i ) + sb.AppendFormat( "{0}- {1}", HtmlNewLine, names[i] ); + + return sb.ToString(); + } + + return ""; + } + + #endregion + + #region Const Strings + + private const string RefString = "ref "; + private const string GetString = " get;"; + private const string SetString = " set;"; + + private const string InString = "in "; + private const string OutString = "out "; + + private const string VirtString = "virtual "; + private const string CtorString ="(ctor) "; + private const string StaticString = "(static) "; + #endregion + + private static void DocumentLoadedTypes() + { + using( StreamWriter indexHtml = GetWriter( "docs/", "overview.html" ) ) + { + indexHtml.WriteLine( "" ); + indexHtml.WriteLine( " " ); + indexHtml.WriteLine( " RunUO Documentation - Class Overview" ); + indexHtml.WriteLine( " " ); + indexHtml.WriteLine( " " ); + indexHtml.WriteLine( "

Back to the index

" ); + indexHtml.WriteLine( "

Namespaces

" ); + + SortedList> nspaces = new SortedList>( m_Namespaces ); + + foreach( KeyValuePair> kvp in nspaces ) + { + kvp.Value.Sort( new TypeComparer() ); + + SaveNamespace( kvp.Key, kvp.Value, indexHtml ); + } + + indexHtml.WriteLine( " " ); + indexHtml.WriteLine( "" ); + } + } + + private static void SaveNamespace( string name, List types, StreamWriter indexHtml ) + { + string fileName = GetFileName( "docs/namespaces/", name, ".html" ); + + indexHtml.WriteLine( " {1}
", fileName, name ); + + using( StreamWriter nsHtml = GetWriter( "docs/namespaces/", fileName ) ) + { + nsHtml.WriteLine( "" ); + nsHtml.WriteLine( " " ); + nsHtml.WriteLine( " RunUO Documentation - Class Overview - {0}", name ); + nsHtml.WriteLine( " " ); + nsHtml.WriteLine( " " ); + nsHtml.WriteLine( "

Back to the namespace index

" ); + nsHtml.WriteLine( "

{0}

", name ); + + for( int i = 0; i < types.Count; ++i ) + SaveType( types[i], nsHtml, fileName, name ); + + nsHtml.WriteLine( " " ); + nsHtml.WriteLine( "" ); + } + } + + private static void SaveType( TypeInfo info, StreamWriter nsHtml, string nsFileName, string nsName ) + { + if( info.m_Declaring == null ) + nsHtml.WriteLine( " "+info.LinkName( "../types/" ) + "
" ); + + using( StreamWriter typeHtml = Docs.GetWriter( info.FileName ) ) + { + typeHtml.WriteLine( "" ); + typeHtml.WriteLine( " " ); + typeHtml.WriteLine( " RunUO Documentation - Class Overview - {0}", info.TypeName ); + typeHtml.WriteLine( " " ); + typeHtml.WriteLine( " " ); + typeHtml.WriteLine( "

Back to {1}

", nsFileName, nsName ); + + if( info.m_Type.IsEnum ) + WriteEnum( info, typeHtml ); + else + WriteType( info, typeHtml ); + + typeHtml.WriteLine( " " ); + typeHtml.WriteLine( "" ); + } + } + + #region Write[...] + private static void WriteEnum( TypeInfo info, StreamWriter typeHtml ) + { + Type type = info.m_Type; + + typeHtml.WriteLine( "

{0} (Enum)

", info.TypeName ); + + string[] names = Enum.GetNames( type ); + + bool flags = type.IsDefined( typeof( FlagsAttribute ), false ); + string format; + + if( flags ) + format = " {0:G} = 0x{1:X}{2}
"; + else + format = " {0:G} = {1:D}{2}
"; + + for( int i = 0; i < names.Length; ++i ) + { + object value = Enum.Parse( type, names[i] ); + + typeHtml.WriteLine( format, names[i], value, i < (names.Length - 1) ? "," : "" ); + } + } + + private static void WriteType( TypeInfo info, StreamWriter typeHtml ) + { + Type type = info.m_Type; + + typeHtml.Write( "

" ); + + Type decType = info.m_Declaring; + + if( decType != null ) + { + // We are a nested type + + typeHtml.Write( '(' ); + + TypeInfo decInfo = null; + m_Types.TryGetValue( decType, out decInfo ); + + if( decInfo == null ) + typeHtml.Write( decType.Name ); + else + //typeHtml.Write( "{1}", decInfo.m_FileName, decInfo.m_TypeName ); + typeHtml.Write( decInfo.LinkName( null ) ); + + typeHtml.Write( ") - " ); + } + + typeHtml.Write( info.TypeName ); + + Type[] ifaces = info.m_Interfaces; + Type baseType = info.m_BaseType; + + int extendCount = 0; + + if( baseType != null && baseType != typeof( object ) && baseType != typeof( ValueType ) && !baseType.IsPrimitive ) + { + typeHtml.Write( " : " ); + + TypeInfo baseInfo = null; + m_Types.TryGetValue( baseType, out baseInfo ); + + if( baseInfo == null ) + typeHtml.Write( baseType.Name ); + else + { + typeHtml.Write( ""+baseInfo.LinkName( null ) ); + } + + ++extendCount; + } + + if( ifaces.Length > 0 ) + { + if( extendCount == 0 ) + typeHtml.Write( " : " ); + + for( int i = 0; i < ifaces.Length; ++i ) + { + Type iface = ifaces[i]; + TypeInfo ifaceInfo = null; + m_Types.TryGetValue( iface, out ifaceInfo ); + + if( extendCount != 0 ) + typeHtml.Write( ", " ); + + ++extendCount; + + if( ifaceInfo == null ) + { + string typeName = ""; + string fileName = ""; + string linkName = ""; + FormatGeneric( iface, ref typeName, ref fileName, ref linkName ); + linkName = linkName.Replace( "@directory@", null ); + typeHtml.Write( ""+linkName ); + } + else + { + typeHtml.Write( ""+ifaceInfo.LinkName( null ) ); + } + } + } + + typeHtml.WriteLine( "

" ); + + List derived = info.m_Derived; + + if( derived != null ) + { + typeHtml.Write( "

Derived Types: " ); + + derived.Sort( new TypeComparer() ); + + for( int i = 0; i < derived.Count; ++i ) + { + TypeInfo derivedInfo = derived[i]; + + if( i != 0 ) + typeHtml.Write( ", " ); + + //typeHtml.Write( "{1}", derivedInfo.m_FileName, derivedInfo.m_TypeName ); + typeHtml.Write( ""+derivedInfo.LinkName( null ) ); + } + + typeHtml.WriteLine( "

" ); + } + + List nested = info.m_Nested; + + if( nested != null ) + { + typeHtml.Write( "

Nested Types: " ); + + nested.Sort( new TypeComparer() ); + + for( int i = 0; i < nested.Count; ++i ) + { + TypeInfo nestedInfo = nested[i]; + + if( i != 0 ) + typeHtml.Write( ", " ); + + //typeHtml.Write( "{1}", nestedInfo.m_FileName, nestedInfo.m_TypeName ); + typeHtml.Write( ""+nestedInfo.LinkName( null ) ); + } + + typeHtml.WriteLine( "

" ); + } + + MemberInfo[] membs = type.GetMembers( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly ); + + Array.Sort( membs, new MemberComparer() ); + + for( int i = 0; i < membs.Length; ++i ) + { + MemberInfo mi = membs[i]; + + if( mi is PropertyInfo ) + WriteProperty( (PropertyInfo)mi, typeHtml ); + else if( mi is ConstructorInfo ) + WriteCtor( info.TypeName, (ConstructorInfo)mi, typeHtml ); + else if( mi is MethodInfo ) + WriteMethod( (MethodInfo)mi, typeHtml ); + } + } + + private static void WriteProperty( PropertyInfo pi, StreamWriter html ) + { + html.Write( " " ); + + MethodInfo getMethod = pi.GetGetMethod(); + MethodInfo setMethod = pi.GetSetMethod(); + + if( (getMethod != null && getMethod.IsStatic) || (setMethod != null && setMethod.IsStatic) ) + html.Write( StaticString ); + + html.Write( GetPair( pi.PropertyType, pi.Name, false ) ); + html.Write( '(' ); + + if( pi.CanRead ) + html.Write( GetString ); + + if( pi.CanWrite ) + html.Write( SetString ); + + html.WriteLine( " )
" ); + } + + private static void WriteCtor( string name, ConstructorInfo ctor, StreamWriter html ) + { + if( ctor.IsStatic ) + return; + + html.Write( " " ); + html.Write( CtorString ); + html.Write( name ); + html.Write( '(' ); + + ParameterInfo[] parms = ctor.GetParameters(); + + if( parms.Length > 0 ) + { + html.Write( ' ' ); + + for( int i = 0; i < parms.Length; ++i ) + { + ParameterInfo pi = parms[i]; + + if( i != 0 ) + html.Write( ", " ); + + if( pi.IsIn ) + html.Write( InString ); + else if( pi.IsOut ) + html.Write( OutString ); + + html.Write( GetPair( pi.ParameterType, pi.Name, pi.IsOut ) ); + } + + html.Write( ' ' ); + } + + html.WriteLine( ")
" ); + } + + private static void WriteMethod( MethodInfo mi, StreamWriter html ) + { + if( mi.IsSpecialName ) + return; + + html.Write( " " ); + + if( mi.IsStatic ) + html.Write( StaticString ); + + if( mi.IsVirtual ) + html.Write( VirtString ); + + html.Write( GetPair( mi.ReturnType, mi.Name, false ) ); + html.Write( '(' ); + + ParameterInfo[] parms = mi.GetParameters(); + + if( parms.Length > 0 ) + { + html.Write( ' ' ); + + for( int i = 0; i < parms.Length; ++i ) + { + ParameterInfo pi = parms[i]; + + if( i != 0 ) + html.Write( ", " ); + + if( pi.IsIn ) + html.Write( InString ); + else if( pi.IsOut ) + html.Write( OutString ); + + html.Write( GetPair( pi.ParameterType, pi.Name, pi.IsOut ) ); + } + + html.Write( ' ' ); + } + + html.WriteLine( ")
" ); + } + #endregion + + public static void FormatGeneric( Type type, ref string typeName, ref string fileName, ref string linkName ) + { + string name = null; + string fnam = null; + string link = null; + + if( type.IsGenericType ) + { + int index = type.Name.IndexOf( '`' ); + string rootType = type.Name.Substring( 0, index ); + + if( index > 0 ) + { + StringBuilder nameBuilder = new StringBuilder( rootType ); + StringBuilder fnamBuilder = new StringBuilder( "docs/types/" + Docs.SanitizeType( rootType ) ); + StringBuilder linkBuilder; + if( DontLink( type ) )//if( DontLink( rootType ) ) + linkBuilder = new StringBuilder( "" + rootType + "" ); + else + linkBuilder = new StringBuilder( "" + rootType + "" ); + + nameBuilder.Append( "<" ); + fnamBuilder.Append( "-" ); + linkBuilder.Append( "<" ); + + Type[] typeArguments = type.GetGenericArguments(); + + for( int i = 0; i < typeArguments.Length; i++ ) + { + if( i != 0 ) + { + nameBuilder.Append( ',' ); + fnamBuilder.Append( ',' ); + linkBuilder.Append( ',' ); + } + + string sanitizedName = Docs.SanitizeType( typeArguments[i].Name ); + string aliasedName = Docs.AliasForName( sanitizedName ); + + nameBuilder.Append( sanitizedName ); + fnamBuilder.Append( "T" ); + if( DontLink( typeArguments[i] ) )//if( DontLink( typeArguments[i].Name ) ) + linkBuilder.Append( "" + aliasedName + "" ); + else + linkBuilder.Append( "" + aliasedName + "" ); + } + + nameBuilder.Append( ">" ); + fnamBuilder.Append( "-" ); + linkBuilder.Append( ">" ); + + name = nameBuilder.ToString(); + fnam = fnamBuilder.ToString(); + link = linkBuilder.ToString(); + } + } + if( name == null ) typeName = type.Name; + else typeName = name; + + if( fnam == null ) fileName = "docs/types/" + Docs.SanitizeType( type.Name ) + ".html"; + else fileName = fnam + ".html"; + + if( link == null ) + { + if( DontLink( type ) ) //if( DontLink( type.Name ) ) + linkName = "" + Docs.SanitizeType( type.Name ) + ""; + else + linkName = "" + Docs.SanitizeType( type.Name ) + ""; + } + else linkName = link; + + //Console.WriteLine( typeName+":"+fileName+":"+linkName ); + } + + public static string SanitizeType( string name ) + { + bool anonymousType = false; + if( name.Contains( "<" ) ) anonymousType = true; + StringBuilder sb = new StringBuilder( name ); + for( int i = 0; i < ReplaceChars.Length; ++i ) { sb.Replace( ReplaceChars[i], '-' ); } + + if( anonymousType ) return "(Anonymous-Type)"+sb.ToString(); + else return sb.ToString(); + } + + public static string AliasForName( string name ) + { + for( int i = 0; i < m_AliasLength; ++i ) + { + if( m_Aliases[i, 0] == name ) + { + return m_Aliases[i, 1]; + } + } + return name; + } + + /* + // For stuff we don't want to links to + private static string[] m_DontLink = new string[] + { + "List", + "Stack", + "Queue", + "Dictionary", + "LinkedList", + "SortedList", + "SortedDictionary", + "IComparable", + "IComparer", + "ICloneable", + "Type" + }; + + public static bool DontLink( string name ) + { + foreach( string dontLink in m_DontLink ) + if( dontLink == name ) return true; + return false; + } + */ + public static bool DontLink( Type type ) + { + // MONO: type.Namespace is null/empty for generic arguments + + if ( type.Name == "T" || String.IsNullOrEmpty( type.Namespace ) || m_Namespaces == null ) + return true; + + if( type.Namespace.StartsWith( "Server" ) ) + return false; + + return !m_Namespaces.ContainsKey( type.Namespace ); + } + } + + #region BodyEntry & BodyType + public enum ModelBodyType + { + Invalid=-1, + Monsters, + Sea, + Animals, + Human, + Equipment + } + + public class BodyEntry + { + private Body m_Body; + private ModelBodyType m_BodyType; + private string m_Name; + + public Body Body { get { return m_Body; } } + public ModelBodyType BodyType { get { return m_BodyType; } } + public string Name { get { return m_Name; } } + + public BodyEntry( Body body, ModelBodyType bodyType, string name ) + { + m_Body = body; + m_BodyType = bodyType; + m_Name = name; + } + + public override bool Equals( object obj ) + { + BodyEntry e = (BodyEntry)obj; + + return (m_Body == e.m_Body && m_BodyType == e.m_BodyType && m_Name == e.m_Name); + } + + public override int GetHashCode() + { + return m_Body.BodyID ^ (int)m_BodyType ^ m_Name.GetHashCode(); + } + } + + public class BodyEntrySorter : IComparer + { + public int Compare( BodyEntry a, BodyEntry b ) + { + int v = a.BodyType.CompareTo( b.BodyType ); + + if( v == 0 ) + v = a.Body.BodyID.CompareTo( b.Body.BodyID ); + + if( v == 0 ) + v = a.Name.CompareTo( b.Name ); + + return v; + } + } + #endregion +} diff --git a/Scripts/Commands/Dupe.cs b/Scripts/Commands/Dupe.cs new file mode 100644 index 0000000..de31174 --- /dev/null +++ b/Scripts/Commands/Dupe.cs @@ -0,0 +1,147 @@ +using System; +using System.Reflection; +using Server.Items; +using Server.Targeting; + +namespace Server.Commands +{ + public class Dupe + { + public static void Initialize() + { + CommandSystem.Register( "Dupe", AccessLevel.GameMaster, new CommandEventHandler( Dupe_OnCommand ) ); + CommandSystem.Register( "DupeInBag", AccessLevel.GameMaster, new CommandEventHandler( DupeInBag_OnCommand ) ); + } + + [Usage( "Dupe [amount]" )] + [Description( "Dupes a targeted item." )] + private static void Dupe_OnCommand( CommandEventArgs e ) + { + int amount = 1; + if ( e.Length >= 1 ) + amount = e.GetInt32( 0 ); + e.Mobile.Target = new DupeTarget( false, amount > 0 ? amount : 1 ); + e.Mobile.SendMessage( "What do you wish to dupe?" ); + } + + [Usage( "DupeInBag " )] + [Description( "Dupes an item at it's current location (count) number of times." )] + private static void DupeInBag_OnCommand( CommandEventArgs e ) + { + int amount = 1; + if ( e.Length >= 1 ) + amount = e.GetInt32( 0 ); + + e.Mobile.Target = new DupeTarget( true, amount > 0 ? amount : 1 ); + e.Mobile.SendMessage( "What do you wish to dupe?" ); + } + + private class DupeTarget : Target + { + private bool m_InBag; + private int m_Amount; + + public DupeTarget( bool inbag, int amount ) + : base( 15, false, TargetFlags.None ) + { + m_InBag = inbag; + m_Amount = amount; + } + + protected override void OnTarget( Mobile from, object targ ) + { + bool done = false; + if ( !( targ is Item ) ) + { + from.SendMessage( "You can only dupe items." ); + return; + } + + CommandLogging.WriteLine( from, "{0} {1} duping {2} (inBag={3}; amount={4})", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targ ), m_InBag, m_Amount ); + + Item copy = (Item)targ; + Container pack; + + if ( m_InBag ) + { + if ( copy.Parent is Container ) + pack = (Container)copy.Parent; + else if ( copy.Parent is Mobile ) + pack = ( (Mobile)copy.Parent ).Backpack; + else + pack = null; + } + else + pack = from.Backpack; + + Type t = copy.GetType(); + + //ConstructorInfo[] info = t.GetConstructors(); + + ConstructorInfo c = t.GetConstructor( Type.EmptyTypes ); + + if ( c != null ) + { + try + { + from.SendMessage( "Duping {0}...", m_Amount ); + for ( int i = 0; i < m_Amount; i++ ) + { + object o = c.Invoke( null ); + + if ( o != null && o is Item ) + { + Item newItem = (Item)o; + CopyProperties( newItem, copy );//copy.Dupe( item, copy.Amount ); + copy.OnAfterDuped( newItem ); + newItem.Parent = null; + + if ( pack != null ) + pack.DropItem( newItem ); + else + newItem.MoveToWorld( from.Location, from.Map ); + + newItem.InvalidateProperties(); + + CommandLogging.WriteLine( from, "{0} {1} duped {2} creating {3}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targ ), CommandLogging.Format( newItem ) ); + } + } + from.SendMessage( "Done" ); + done = true; + } + catch + { + from.SendMessage( "Error!" ); + return; + } + } + + if ( !done ) + { + from.SendMessage( "Unable to dupe. Item must have a 0 parameter constructor." ); + } + } + } + + public static void CopyProperties( Item dest, Item src ) + { + PropertyInfo[] props = src.GetType().GetProperties(); + + for ( int i = 0; i < props.Length; i++ ) + { + try + { + if ( props[i].CanRead && props[i].CanWrite ) + { + //Console.WriteLine( "Setting {0} = {1}", props[i].Name, props[i].GetValue( src, null ) ); + props[i].SetValue( dest, props[i].GetValue( src, null ), null ); + } + } + catch + { + //Console.WriteLine( "Denied" ); + } + } + } + } +} diff --git a/Scripts/Commands/GenCategorization.cs b/Scripts/Commands/GenCategorization.cs new file mode 100644 index 0000000..fd4b9d3 --- /dev/null +++ b/Scripts/Commands/GenCategorization.cs @@ -0,0 +1,426 @@ +using System; +using System.IO; +using System.Xml; +using System.Collections; +using System.Reflection; +using Server; +using Server.Items; + +namespace Server.Commands +{ + public class Categorization + { + private static CategoryEntry m_RootItems, m_RootMobiles; + + public static CategoryEntry Items + { + get + { + if ( m_RootItems == null ) + Load(); + + return m_RootItems; + } + } + + public static CategoryEntry Mobiles + { + get + { + if ( m_RootMobiles == null ) + Load(); + + return m_RootMobiles; + } + } + + public static void Initialize() + { + CommandSystem.Register( "RebuildCategorization", AccessLevel.Administrator, new CommandEventHandler( RebuildCategorization_OnCommand ) ); + } + + [Usage( "RebuildCategorization" )] + [Description( "Rebuilds the categorization data file used by the Add command." )] + public static void RebuildCategorization_OnCommand( CommandEventArgs e ) + { + CategoryEntry root = new CategoryEntry( null, "Add Menu", new CategoryEntry[]{ Items, Mobiles } ); + + Export( root, "Data/Config/objects.xml", "Objects" ); + + e.Mobile.SendMessage( "Categorization menu rebuilt." ); + } + + public static void RecurseFindCategories( CategoryEntry ce, ArrayList list ) + { + list.Add( ce ); + + for ( int i = 0; i < ce.SubCategories.Length; ++i ) + RecurseFindCategories( ce.SubCategories[i], list ); + } + + public static void Export( CategoryEntry ce, string fileName, string title ) + { + XmlTextWriter xml = new XmlTextWriter( fileName, System.Text.Encoding.UTF8 ); + + xml.Indentation = 1; + xml.IndentChar = '\t'; + xml.Formatting = Formatting.Indented; + + xml.WriteStartDocument( true ); + + RecurseExport( xml, ce ); + + xml.Flush(); + xml.Close(); + } + + public static void RecurseExport( XmlTextWriter xml, CategoryEntry ce ) + { + xml.WriteStartElement( "category" ); + + xml.WriteAttributeString( "title", ce.Title ); + + ArrayList subCats = new ArrayList( ce.SubCategories ); + + subCats.Sort( new CategorySorter() ); + + for ( int i = 0; i < subCats.Count; ++i ) + RecurseExport( xml, (CategoryEntry)subCats[i] ); + + ce.Matched.Sort( new CategorySorter() ); + + for ( int i = 0; i < ce.Matched.Count; ++i ) + { + CategoryTypeEntry cte = (CategoryTypeEntry)ce.Matched[i]; + + xml.WriteStartElement( "object" ); + + xml.WriteAttributeString( "type", cte.Type.ToString() ); + + object obj = cte.Object; + + if ( obj is Item ) + { + Item item = (Item)obj; + + int itemID = item.ItemID; + + if ( item is BaseAddon && ((BaseAddon)item).Components.Count == 1 ) + itemID = ((AddonComponent)(((BaseAddon)item).Components[0])).ItemID; + + if ( itemID > TileData.MaxItemValue ) + itemID = 1; + + xml.WriteAttributeString( "gfx", XmlConvert.ToString( itemID ) ); + + int hue = item.Hue & 0x7FFF; + + if ( (hue & 0x4000) != 0 ) + hue = 0; + + if ( hue != 0 ) + xml.WriteAttributeString( "hue", XmlConvert.ToString( hue ) ); + + item.Delete(); + } + else if ( obj is Mobile ) + { + Mobile mob = (Mobile)obj; + + int itemID = ShrinkTable.Lookup( mob, 1 ); + + xml.WriteAttributeString( "gfx", XmlConvert.ToString( itemID ) ); + + int hue = mob.Hue & 0x7FFF; + + if ( (hue & 0x4000) != 0 ) + hue = 0; + + if ( hue != 0 ) + xml.WriteAttributeString( "hue", XmlConvert.ToString( hue ) ); + + mob.Delete(); + } + + xml.WriteEndElement(); + } + + xml.WriteEndElement(); + } + + public static void Load() + { + ArrayList types = new ArrayList(); + + AddTypes( Core.Assembly, types ); + + for ( int i = 0; i < ScriptCompiler.Assemblies.Length; ++i ) + AddTypes( ScriptCompiler.Assemblies[i], types ); + + m_RootItems = Load( types, "Data/Config/items.cfg" ); + m_RootMobiles = Load( types, "Data/Config/mobiles.cfg" ); + } + + private static CategoryEntry Load( ArrayList types, string config ) + { + CategoryLine[] lines = CategoryLine.Load( config ); + + if ( lines.Length > 0 ) + { + int index = 0; + CategoryEntry root = new CategoryEntry( null, lines, ref index ); + + Fill( root, types ); + + return root; + } + + return new CategoryEntry(); + } + + private static Type typeofItem = typeof( Item ); + private static Type typeofMobile = typeof( Mobile ); + private static Type typeofConstructable = typeof( ConstructableAttribute ); + + private static bool IsConstructable( Type type ) + { + if ( !type.IsSubclassOf( typeofItem ) && !type.IsSubclassOf( typeofMobile ) ) + return false; + + ConstructorInfo ctor = type.GetConstructor( Type.EmptyTypes ); + + return ( ctor != null && ctor.IsDefined( typeofConstructable, false ) ); + } + + private static void AddTypes( Assembly asm, ArrayList types ) + { + Type[] allTypes = asm.GetTypes(); + + for ( int i = 0; i < allTypes.Length; ++i ) + { + Type type = allTypes[i]; + + if ( type.IsAbstract ) + continue; + + if ( IsConstructable( type ) ) + types.Add( type ); + } + } + + private static void Fill( CategoryEntry root, ArrayList list ) + { + for ( int i = 0; i < list.Count; ++i ) + { + Type type = (Type)list[i]; + CategoryEntry match = GetDeepestMatch( root, type ); + + if ( match == null ) + continue; + + try + { + match.Matched.Add( new CategoryTypeEntry( type ) ); + } + catch + { + } + } + } + + private static CategoryEntry GetDeepestMatch( CategoryEntry root, Type type ) + { + if ( !root.IsMatch( type ) ) + return null; + + for ( int i = 0; i < root.SubCategories.Length; ++i ) + { + CategoryEntry check = GetDeepestMatch( root.SubCategories[i], type ); + + if ( check != null ) + return check; + } + + return root; + } + } + + public class CategorySorter : IComparer + { + public int Compare( object x, object y ) + { + string a = null, b = null; + + if ( x is CategoryEntry ) + a = ((CategoryEntry)x).Title; + else if ( x is CategoryTypeEntry ) + a = ((CategoryTypeEntry)x).Type.Name; + + if ( y is CategoryEntry ) + b = ((CategoryEntry)y).Title; + else if ( y is CategoryTypeEntry ) + b = ((CategoryTypeEntry)y).Type.Name; + + if ( a == null && b == null ) + return 0; + + if ( a == null ) + return 1; + + if ( b == null ) + return -1; + + return a.CompareTo( b ); + } + } + + public class CategoryTypeEntry + { + private Type m_Type; + private object m_Object; + + public Type Type{ get{ return m_Type; } } + public object Object{ get{ return m_Object; } } + + public CategoryTypeEntry( Type type ) + { + m_Type = type; + m_Object = Activator.CreateInstance( type ); + } + } + + public class CategoryEntry + { + private string m_Title; + private Type[] m_Matches; + private CategoryEntry[] m_SubCategories; + private CategoryEntry m_Parent; + private ArrayList m_Matched; + + public string Title{ get{ return m_Title; } } + public Type[] Matches{ get{ return m_Matches; } } + public CategoryEntry Parent{ get{ return m_Parent; } } + public CategoryEntry[] SubCategories{ get{ return m_SubCategories; } } + public ArrayList Matched{ get{ return m_Matched; } } + + public CategoryEntry() + { + m_Title = "(empty)"; + m_Matches = new Type[0]; + m_SubCategories = new CategoryEntry[0]; + m_Matched = new ArrayList(); + } + + public CategoryEntry( CategoryEntry parent, string title, CategoryEntry[] subCats ) + { + m_Parent = parent; + m_Title = title; + m_SubCategories = subCats; + m_Matches = new Type[0]; + m_Matched = new ArrayList(); + } + + public bool IsMatch( Type type ) + { + bool isMatch = false; + + for ( int i = 0; !isMatch && i < m_Matches.Length; ++i ) + isMatch = ( type == m_Matches[i] || type.IsSubclassOf( m_Matches[i] ) ); + + return isMatch; + } + + public CategoryEntry( CategoryEntry parent, CategoryLine[] lines, ref int index ) + { + m_Parent = parent; + + string text = lines[index].Text; + + int start = text.IndexOf( '(' ); + + if ( start < 0 ) + throw new FormatException( String.Format( "Input string not correctly formatted ('{0}')", text ) ); + + m_Title = text.Substring( 0, start ).Trim(); + + int end = text.IndexOf( ')', ++start ); + + if ( end < start ) + throw new FormatException( String.Format( "Input string not correctly formatted ('{0}')", text ) ); + + text = text.Substring( start, end-start ); + string[] split = text.Split( ';' ); + + ArrayList list = new ArrayList(); + + for ( int i = 0; i < split.Length; ++i ) + { + Type type = ScriptCompiler.FindTypeByName( split[i].Trim() ); + + if ( type == null ) + Console.WriteLine( "Match type not found ('{0}')", split[i].Trim() ); + else + list.Add( type ); + } + + m_Matches = (Type[])list.ToArray( typeof( Type ) ); + list.Clear(); + + int ourIndentation = lines[index].Indentation; + + ++index; + + while ( index < lines.Length && lines[index].Indentation > ourIndentation ) + list.Add( new CategoryEntry( this, lines, ref index ) ); + + m_SubCategories = (CategoryEntry[])list.ToArray( typeof( CategoryEntry ) ); + list.Clear(); + + m_Matched = list; + } + } + + public class CategoryLine + { + private int m_Indentation; + private string m_Text; + + public int Indentation{ get{ return m_Indentation; } } + public string Text{ get{ return m_Text; } } + + public CategoryLine( string input ) + { + int index; + + for ( index = 0; index < input.Length; ++index ) + { + if ( Char.IsLetter( input, index ) ) + break; + } + + if ( index >= input.Length ) + throw new FormatException( String.Format( "Input string not correctly formatted ('{0}')", input ) ); + + m_Indentation = index; + m_Text = input.Substring( index ); + } + + public static CategoryLine[] Load( string path ) + { + ArrayList list = new ArrayList(); + + if ( File.Exists( path ) ) + { + using ( StreamReader ip = new StreamReader( path ) ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + list.Add( new CategoryLine( line ) ); + } + } + + return (CategoryLine[])list.ToArray( typeof( CategoryLine ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Commands/BaseCommand.cs b/Scripts/Commands/Generic/Commands/BaseCommand.cs new file mode 100644 index 0000000..07d2022 --- /dev/null +++ b/Scripts/Commands/Generic/Commands/BaseCommand.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections; +using Server; +using Server.Gumps; + +namespace Server.Commands.Generic +{ + public enum ObjectTypes + { + Both, + Items, + Mobiles, + All + } + + public abstract class BaseCommand + { + private string[] m_Commands; + private AccessLevel m_AccessLevel; + private CommandSupport m_Implementors; + private ObjectTypes m_ObjectTypes; + private bool m_ListOptimized; + private string m_Usage; + private string m_Description; + + public bool ListOptimized + { + get{ return m_ListOptimized; } + set{ m_ListOptimized = value; } + } + + public string[] Commands + { + get{ return m_Commands; } + set{ m_Commands = value; } + } + + public string Usage + { + get{ return m_Usage; } + set{ m_Usage = value; } + } + + public string Description + { + get{ return m_Description; } + set{ m_Description = value; } + } + + public AccessLevel AccessLevel + { + get{ return m_AccessLevel; } + set{ m_AccessLevel = value; } + } + + public ObjectTypes ObjectTypes + { + get{ return m_ObjectTypes; } + set{ m_ObjectTypes = value; } + } + + public CommandSupport Supports + { + get{ return m_Implementors; } + set{ m_Implementors = value; } + } + + public BaseCommand() + { + m_Responses = new ArrayList(); + m_Failures = new ArrayList(); + } + + public static bool IsAccessible( Mobile from, object obj ) + { + if ( from.AccessLevel >= AccessLevel.Administrator || obj == null ) + return true; + + Mobile mob; + + if ( obj is Mobile ) + mob = (Mobile)obj; + else if ( obj is Item ) + mob = ((Item)obj).RootParent as Mobile; + else + mob = null; + + if ( mob == null || mob == from || from.AccessLevel > mob.AccessLevel ) + return true; + + return false; + } + + public virtual void ExecuteList( CommandEventArgs e, ArrayList list ) + { + for ( int i = 0; i < list.Count; ++i ) + Execute( e, list[i] ); + } + + public virtual void Execute( CommandEventArgs e, object obj ) + { + } + + public virtual bool ValidateArgs( BaseCommandImplementor impl, CommandEventArgs e ) + { + return true; + } + + private ArrayList m_Responses, m_Failures; + + private class MessageEntry + { + public string m_Message; + public int m_Count; + + public MessageEntry( string message ) + { + m_Message = message; + m_Count = 1; + } + + public override string ToString() + { + if ( m_Count > 1 ) + return String.Format( "{0} ({1})", m_Message, m_Count ); + + return m_Message; + } + } + + public void AddResponse( string message ) + { + for ( int i = 0; i < m_Responses.Count; ++i ) + { + MessageEntry entry = (MessageEntry)m_Responses[i]; + + if ( entry.m_Message == message ) + { + ++entry.m_Count; + return; + } + } + + if ( m_Responses.Count == 10 ) + return; + + m_Responses.Add( new MessageEntry( message ) ); + } + + public void AddResponse( Gump gump ) + { + m_Responses.Add( gump ); + } + + public void LogFailure( string message ) + { + for ( int i = 0; i < m_Failures.Count; ++i ) + { + MessageEntry entry = (MessageEntry)m_Failures[i]; + + if ( entry.m_Message == message ) + { + ++entry.m_Count; + return; + } + } + + if ( m_Failures.Count == 10 ) + return; + + m_Failures.Add( new MessageEntry( message ) ); + } + + public void Flush( Mobile from, bool flushToLog ) + { + if ( m_Responses.Count > 0 ) + { + for ( int i = 0; i < m_Responses.Count; ++i ) + { + object obj = m_Responses[i]; + + if ( obj is MessageEntry ) + { + from.SendMessage( ((MessageEntry)obj).ToString() ); + + if ( flushToLog ) + CommandLogging.WriteLine( from, ((MessageEntry)obj).ToString() ); + } + else if ( obj is Gump ) + { + from.SendGump( (Gump) obj ); + } + } + } + else + { + for ( int i = 0; i < m_Failures.Count; ++i ) + from.SendMessage( ((MessageEntry)m_Failures[i]).ToString() ); + } + + m_Responses.Clear(); + m_Failures.Clear(); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Commands/Commands.cs b/Scripts/Commands/Generic/Commands/Commands.cs new file mode 100644 index 0000000..60e6dd0 --- /dev/null +++ b/Scripts/Commands/Generic/Commands/Commands.cs @@ -0,0 +1,1039 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using Server; +using Server.Accounting; +using Server.Items; +using Server.Gumps; +using Server.Mobiles; +using Server.Multis; +using Server.Network; +using Server.Spells; + +namespace Server.Commands.Generic +{ + public class TargetCommands + { + public static void Initialize() + { + Register( new KillCommand( true ) ); + Register( new KillCommand( false ) ); + Register( new HideCommand( true ) ); + Register( new HideCommand( false ) ); + Register( new KickCommand( true ) ); + Register( new KickCommand( false ) ); + Register( new FirewallCommand() ); + Register( new TeleCommand() ); + Register( new SetCommand() ); + Register( new AliasedSetCommand( AccessLevel.GameMaster, "Immortal", "blessed", "true", ObjectTypes.Mobiles ) ); + Register( new AliasedSetCommand( AccessLevel.GameMaster, "Invul", "blessed", "true", ObjectTypes.Mobiles ) ); + Register( new AliasedSetCommand( AccessLevel.GameMaster, "Mortal", "blessed", "false", ObjectTypes.Mobiles ) ); + Register( new AliasedSetCommand( AccessLevel.GameMaster, "NoInvul", "blessed", "false", ObjectTypes.Mobiles ) ); + Register( new AliasedSetCommand( AccessLevel.GameMaster, "Squelch", "squelched", "true", ObjectTypes.Mobiles ) ); + Register( new AliasedSetCommand( AccessLevel.GameMaster, "Unsquelch", "squelched", "false", ObjectTypes.Mobiles ) ); + + Register( new AliasedSetCommand( AccessLevel.GameMaster, "ShaveHair", "HairItemID", "0", ObjectTypes.Mobiles ) ); + Register( new AliasedSetCommand( AccessLevel.GameMaster, "ShaveBeard", "FacialHairItemID", "0", ObjectTypes.Mobiles ) ); + + Register( new GetCommand() ); + Register( new GetTypeCommand() ); + Register( new DeleteCommand() ); + Register( new RestockCommand() ); + Register( new DismountCommand() ); + Register( new AddCommand() ); + Register( new AddToPackCommand() ); + Register( new TellCommand() ); + Register( new PrivSoundCommand() ); + Register( new IncreaseCommand() ); + Register( new OpenBrowserCommand() ); + Register( new CountCommand() ); + Register( new InterfaceCommand() ); + Register( new RefreshHouseCommand() ); + Register( new ConditionCommand() ); + Register( new BringToPackCommand() ); + } + + private static List m_AllCommands = new List(); + + public static List AllCommands{ get{ return m_AllCommands; } } + + public static void Register( BaseCommand command ) + { + m_AllCommands.Add( command ); + + List impls = BaseCommandImplementor.Implementors; + + for ( int i = 0; i < impls.Count; ++i ) + { + BaseCommandImplementor impl = impls[i]; + + if ( (command.Supports & impl.SupportRequirement) != 0 ) + impl.Register( command ); + } + } + } + + public class ConditionCommand : BaseCommand + { + public ConditionCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.Simple | CommandSupport.Complex | CommandSupport.Self; + Commands = new string[]{ "Condition" }; + ObjectTypes = ObjectTypes.All; + Usage = "Condition "; + Description = "Checks that the given condition matches a targeted object."; + ListOptimized = true; + } + + public override void ExecuteList( CommandEventArgs e, ArrayList list ) + { + try + { + string[] args = e.Arguments; + ObjectConditional condition = ObjectConditional.Parse( e.Mobile, ref args ); + + for ( int i = 0; i < list.Count; ++i ) + { + if ( condition.CheckCondition( list[i] ) ) + AddResponse( "True - that object matches the condition." ); + else + AddResponse( "False - that object does not match the condition." ); + } + } + catch ( Exception ex ) + { + e.Mobile.SendMessage( ex.Message ); + } + } + } + + public class BringToPackCommand : BaseCommand + { + public BringToPackCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.AllItems; + Commands = new string[]{ "BringToPack" }; + ObjectTypes = ObjectTypes.Items; + Usage = "BringToPack"; + Description = "Brings a targeted item to your backpack."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + Item item = obj as Item; + + if ( item != null ) + { + if ( e.Mobile.PlaceInBackpack( item ) ) + AddResponse( "The item has been placed in your backpack." ); + else + AddResponse( "Your backpack could not hold the item." ); + } + } + } + + public class RefreshHouseCommand : BaseCommand + { + public RefreshHouseCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.Simple; + Commands = new string[]{ "RefreshHouse" }; + ObjectTypes = ObjectTypes.Items; + Usage = "RefreshHouse"; + Description = "Refreshes a targeted house sign."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( obj is HouseSign ) + { + BaseHouse house = ((HouseSign)obj).Owner; + + if ( house == null ) + { + LogFailure( "That sign has no house attached." ); + } + else + { + house.RefreshDecay(); + AddResponse( "The house has been refreshed." ); + } + } + else + { + LogFailure( "That is not a house sign." ); + } + } + } + + public class CountCommand : BaseCommand + { + public CountCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.Complex; + Commands = new string[]{ "Count" }; + ObjectTypes = ObjectTypes.All; + Usage = "Count"; + Description = "Counts the number of objects that a command modifier would use. Generally used with condition arguments."; + ListOptimized = true; + } + + public override void ExecuteList( CommandEventArgs e, ArrayList list ) + { + if ( list.Count == 1 ) + AddResponse( "There is one matching object." ); + else + AddResponse( String.Format( "There are {0} matching objects.", list.Count ) ); + } + } + + public class OpenBrowserCommand : BaseCommand + { + public OpenBrowserCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.AllMobiles; + Commands = new string[]{ "OpenBrowser", "OB" }; + ObjectTypes = ObjectTypes.Mobiles; + Usage = "OpenBrowser "; + Description = "Opens the web browser of a targeted player to a specified url."; + } + + public static void OpenBrowser_Callback( Mobile from, bool okay, object state ) + { + object[] states = (object[])state; + Mobile gm = (Mobile)states[0]; + string url = (string)states[1]; + + if ( okay ) + { + gm.SendMessage( "{0} : has opened their web browser to : {1}", from.Name, url ); + from.LaunchBrowser( url ); + } + else + { + from.SendMessage( "You have chosen not to open your web browser." ); + gm.SendMessage( "{0} : has chosen not to open their web browser to : {1}", from.Name, url ); + } + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( e.Length == 1 ) + { + Mobile mob = (Mobile)obj; + Mobile from = e.Mobile; + + if ( mob.Player ) + { + NetState ns = mob.NetState; + + if ( ns == null ) + { + LogFailure( "That player is not online." ); + } + else + { + string url = e.GetString( 0 ); + + CommandLogging.WriteLine( from, "{0} {1} requesting to open web browser of {2} to {3}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( mob ), url ); + AddResponse( "Awaiting user confirmation..." ); + mob.SendGump( new WarningGump( 1060637, 30720, String.Format( "A game master is requesting to open your web browser to the following URL:
{0}", url ), 0xFFC000, 320, 240, new WarningGumpCallback( OpenBrowser_Callback ), new object[]{ from, url } ) ); + } + } + else + { + LogFailure( "That is not a player." ); + } + } + else + { + LogFailure( "Format: OpenBrowser " ); + } + } + } + + public class IncreaseCommand : BaseCommand + { + public IncreaseCommand() + { + AccessLevel = AccessLevel.Counselor; + Supports = CommandSupport.All; + Commands = new string[]{ "Increase", "Inc" }; + ObjectTypes = ObjectTypes.Both; + Usage = "Increase { ...}"; + Description = "Increases the value of a specified property by the specified offset."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( obj is BaseMulti ) + { + LogFailure( "This command does not work on multis." ); + } + else if ( e.Length >= 2 ) + { + string result = Properties.IncreaseValue( e.Mobile, obj, e.Arguments ); + + if ( result == "The property has been increased." || result == "The properties have been increased." || result == "The property has been decreased." || result == "The properties have been decreased." || result == "The properties have been changed." ) + AddResponse( result ); + else + LogFailure( result ); + } + else + { + LogFailure( "Format: Increase { ...}" ); + } + } + } + + public class PrivSoundCommand : BaseCommand + { + public PrivSoundCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.AllMobiles; + Commands = new string[]{ "PrivSound" }; + ObjectTypes = ObjectTypes.Mobiles; + Usage = "PrivSound "; + Description = "Plays a sound to a given target."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + Mobile from = e.Mobile; + + if ( e.Length == 1 ) + { + int index = e.GetInt32( 0 ); + Mobile mob = (Mobile)obj; + + CommandLogging.WriteLine( from, "{0} {1} playing sound {2} for {3}", from.AccessLevel, CommandLogging.Format( from ), index, CommandLogging.Format( mob ) ); + mob.Send( new PlaySound( index, mob.Location ) ); + } + else + { + from.SendMessage( "Format: PrivSound " ); + } + } + } + + public class TellCommand : BaseCommand + { + public TellCommand() + { + AccessLevel = AccessLevel.Counselor; + Supports = CommandSupport.AllMobiles; + Commands = new string[]{ "Tell" }; + ObjectTypes = ObjectTypes.Mobiles; + Usage = "Tell \"text\""; + Description = "Sends a system message to a targeted player."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + Mobile mob = (Mobile)obj; + Mobile from = e.Mobile; + + CommandLogging.WriteLine( from, "{0} {1} telling {2} \"{3}\"", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( mob ), e.ArgString ); + + mob.SendMessage( e.ArgString ); + } + } + + public class AddToPackCommand : BaseCommand + { + public AddToPackCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.All; + Commands = new string[]{ "AddToPack", "AddToCont" }; + ObjectTypes = ObjectTypes.Both; + ListOptimized = true; + Usage = "AddToPack [params] [set { ...}]"; + Description = "Adds an item by name to the backpack of a targeted player or npc, or a targeted container. Optional constructor parameters. Optional set property list."; + } + + public override void ExecuteList( CommandEventArgs e, ArrayList list ) + { + if ( e.Arguments.Length == 0 ) + return; + + List packs = new List( list.Count ); + + for ( int i = 0; i < list.Count; ++i ) + { + object obj = list[i]; + Container cont = null; + + if ( obj is Mobile ) + cont = ((Mobile)obj).Backpack; + else if ( obj is Container ) + cont = (Container)obj; + + if ( cont != null ) + packs.Add( cont ); + else + LogFailure( "That is not a container." ); + } + + Add.Invoke( e.Mobile, e.Mobile.Location, e.Mobile.Location, e.Arguments, packs ); + } + } + + public class AddCommand : BaseCommand + { + public AddCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.Simple | CommandSupport.Self; + Commands = new string[]{ "Add" }; + ObjectTypes = ObjectTypes.All; + Usage = "Add [ [params] [set { ...}]]"; + Description = "Adds an item or npc by name to a targeted location. Optional constructor parameters. Optional set property list. If no arguments are specified, this brings up a categorized add menu."; + } + + public override bool ValidateArgs( BaseCommandImplementor impl, CommandEventArgs e ) + { + if ( e.Length >= 1 ) + { + Type t = ScriptCompiler.FindTypeByName( e.GetString( 0 ) ); + + if ( t == null ) + { + e.Mobile.SendMessage( "No type with that name was found." ); + + string match = e.GetString( 0 ).Trim(); + + if ( match.Length < 3 ) + { + e.Mobile.SendMessage( "Invalid search string." ); + e.Mobile.SendGump( new AddGump( e.Mobile, match, 0, Type.EmptyTypes, false ) ); + } + else + { + e.Mobile.SendGump( new AddGump( e.Mobile, match, 0, AddGump.Match( match ).ToArray(), true ) ); + } + } + else + { + return true; + } + } + else + { + e.Mobile.SendGump( new CategorizedAddGump( e.Mobile ) ); + } + + return false; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + IPoint3D p = obj as IPoint3D; + + if ( p == null ) + return; + + if ( p is Item ) + p = ((Item)p).GetWorldTop(); + else if ( p is Mobile ) + p = ((Mobile)p).Location; + + Add.Invoke( e.Mobile, new Point3D( p ), new Point3D( p ), e.Arguments ); + } + } + + public class TeleCommand : BaseCommand + { + public TeleCommand() + { + AccessLevel = AccessLevel.Counselor; + Supports = CommandSupport.Simple; + Commands = new string[]{ "Teleport", "Tele" }; + ObjectTypes = ObjectTypes.All; + Usage = "Teleport"; + Description = "Teleports your character to a targeted location."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + IPoint3D p = obj as IPoint3D; + + if ( p == null ) + return; + + Mobile from = e.Mobile; + + SpellHelper.GetSurfaceTop( ref p ); + + //CommandLogging.WriteLine( from, "{0} {1} teleporting to {2}", from.AccessLevel, CommandLogging.Format( from ), new Point3D( p ) ); + + Point3D fromLoc = from.Location; + Point3D toLoc = new Point3D( p ); + + from.Location = toLoc; + from.ProcessDelta(); + + if ( !from.Hidden ) + { + Effects.SendLocationParticles( EffectItem.Create( fromLoc, from.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023 ); + Effects.SendLocationParticles( EffectItem.Create( toLoc, from.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 5023 ); + + from.PlaySound( 0x1FE ); + } + } + } + + public class DismountCommand : BaseCommand + { + public DismountCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.AllMobiles; + Commands = new string[]{ "Dismount" }; + ObjectTypes = ObjectTypes.Mobiles; + Usage = "Dismount"; + Description = "Forcefully dismounts a given target."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + Mobile from = e.Mobile; + Mobile mob = (Mobile)obj; + + CommandLogging.WriteLine( from, "{0} {1} dismounting {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( mob ) ); + + bool takenAction = false; + + for ( int i = 0; i < mob.Items.Count; ++i ) + { + Item item = mob.Items[i]; + + if ( item is IMountItem ) + { + IMount mount = ((IMountItem)item).Mount; + + if ( mount != null ) + { + mount.Rider = null; + takenAction = true; + } + + if ( mob.Items.IndexOf( item ) == -1 ) + --i; + } + } + + for ( int i = 0; i < mob.Items.Count; ++i ) + { + Item item = mob.Items[i]; + + if ( item.Layer == Layer.Mount ) + { + takenAction = true; + item.Delete(); + --i; + } + } + + if ( takenAction ) + AddResponse( "They have been dismounted." ); + else + LogFailure( "They were not mounted." ); + } + } + + public class RestockCommand : BaseCommand + { + public RestockCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.AllNPCs; + Commands = new string[]{ "Restock" }; + ObjectTypes = ObjectTypes.Mobiles; + Usage = "Restock"; + Description = "Manually restocks a targeted vendor, refreshing the quantity of every item the vendor sells to the maximum. This also invokes the maximum quantity adjustment algorithms."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( obj is BaseVendor ) + { + CommandLogging.WriteLine( e.Mobile, "{0} {1} restocking {2}", e.Mobile.AccessLevel, CommandLogging.Format( e.Mobile ), CommandLogging.Format( obj ) ); + + ((BaseVendor)obj).Restock(); + AddResponse( "The vendor has been restocked." ); + } + else + { + AddResponse( "That is not a vendor." ); + } + } + } + + public class GetTypeCommand : BaseCommand + { + public GetTypeCommand() + { + AccessLevel = AccessLevel.Counselor; + Supports = CommandSupport.All; + Commands = new string[]{ "GetType" }; + ObjectTypes = ObjectTypes.All; + Usage = "GetType"; + Description = "Gets the type name of a targeted object."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( obj == null ) + { + AddResponse( "The object is null." ); + } + else + { + Type type = obj.GetType(); + + if ( type.DeclaringType == null ) + AddResponse( String.Format( "The type of that object is {0}.", type.Name ) ); + else + AddResponse( String.Format( "The type of that object is {0}.", type.FullName ) ); + } + } + } + + public class GetCommand : BaseCommand + { + public GetCommand() + { + AccessLevel = AccessLevel.Counselor; + Supports = CommandSupport.All; + Commands = new string[]{ "Get" }; + ObjectTypes = ObjectTypes.All; + Usage = "Get "; + Description = "Gets one or more property values by name of a targeted object."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( e.Length >= 1 ) + { + for ( int i = 0; i < e.Length; ++i ) + { + string result = Properties.GetValue( e.Mobile, obj, e.GetString( i ) ); + + if ( result == "Property not found." || result == "Property is write only." || result.StartsWith( "Getting this property" ) ) + LogFailure( result ); + else + AddResponse( result ); + } + } + else + { + LogFailure( "Format: Get " ); + } + } + } + + public class AliasedSetCommand : BaseCommand + { + private string m_Name; + private string m_Value; + + public AliasedSetCommand( AccessLevel level, string command, string name, string value, ObjectTypes objects ) + { + m_Name = name; + m_Value = value; + + AccessLevel = level; + + if ( objects == ObjectTypes.Items ) + Supports = CommandSupport.AllItems; + else if ( objects == ObjectTypes.Mobiles ) + Supports = CommandSupport.AllMobiles; + else + Supports = CommandSupport.All; + + Commands = new string[]{ command }; + ObjectTypes = objects; + Usage = command; + Description = String.Format( "Sets the {0} property to {1}.", name, value ); + } + + public override void Execute( CommandEventArgs e, object obj ) + { + string result = Properties.SetValue( e.Mobile, obj, m_Name, m_Value ); + + if ( result == "Property has been set." ) + AddResponse( result ); + else + LogFailure( result ); + } + } + + public class SetCommand : BaseCommand + { + public SetCommand() + { + AccessLevel = AccessLevel.Counselor; + Supports = CommandSupport.All; + Commands = new string[]{ "Set" }; + ObjectTypes = ObjectTypes.Both; + Usage = "Set [...]"; + Description = "Sets one or more property values by name of a targeted object."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( e.Length >= 2 ) + { + for ( int i = 0; (i+1) < e.Length; i += 2 ) + { + string result = Properties.SetValue( e.Mobile, obj, e.GetString( i ), e.GetString( i+1 ) ); + + if ( result == "Property has been set." ) + AddResponse( result ); + else + LogFailure( result ); + } + } + else + { + LogFailure( "Format: Set " ); + } + } + } + + public class DeleteCommand : BaseCommand + { + public DeleteCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.AllNPCs | CommandSupport.AllItems; + Commands = new string[]{ "Delete", "Remove" }; + ObjectTypes = ObjectTypes.Both; + Usage = "Delete"; + Description = "Deletes a targeted item or mobile. Does not delete players."; + } + + private void OnConfirmCallback( Mobile from, bool okay, object state ) + { + object[] states = (object[])state; + CommandEventArgs e = (CommandEventArgs)states[0]; + ArrayList list = (ArrayList)states[1]; + + bool flushToLog = false; + + if ( okay ) + { + AddResponse( "Delete command confirmed." ); + + if ( list.Count > 20 ) + { + CommandLogging.Enabled = false; + NetState.Pause(); + } + + base.ExecuteList( e, list ); + + if ( list.Count > 20 ) + { + NetState.Resume(); + flushToLog = true; + CommandLogging.Enabled = true; + } + } + else + { + AddResponse( "Delete command aborted." ); + } + + Flush( from, flushToLog ); + } + + public override void ExecuteList( CommandEventArgs e, ArrayList list ) + { + if ( list.Count > 1 ) + { + e.Mobile.SendGump( new WarningGump( 1060637, 30720, String.Format( "You are about to delete {0} objects. This cannot be undone without a full server revert.

Continue?", list.Count ), 0xFFC000, 420, 280, new WarningGumpCallback( OnConfirmCallback ), new object[]{ e, list } ) ); + AddResponse( "Awaiting confirmation..." ); + } + else + { + base.ExecuteList( e, list ); + } + } + + public override void Execute( CommandEventArgs e, object obj ) + { + if ( obj is Item ) + { + CommandLogging.WriteLine( e.Mobile, "{0} {1} deleting {2}", e.Mobile.AccessLevel, CommandLogging.Format( e.Mobile ), CommandLogging.Format( obj ) ); + ((Item)obj).Delete(); + AddResponse( "The item has been deleted." ); + } + else if ( obj is Mobile && !((Mobile)obj).Player ) + { + CommandLogging.WriteLine( e.Mobile, "{0} {1} deleting {2}", e.Mobile.AccessLevel, CommandLogging.Format( e.Mobile ), CommandLogging.Format( obj ) ); + ((Mobile)obj).Delete(); + AddResponse( "The mobile has been deleted." ); + } + else + { + LogFailure( "That cannot be deleted." ); + } + } + } + + public class KillCommand : BaseCommand + { + private bool m_Value; + + public KillCommand( bool value ) + { + m_Value = value; + + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.AllMobiles; + Commands = value ? new string[]{ "Kill" } : new string[]{ "Resurrect", "Res" }; + ObjectTypes = ObjectTypes.Mobiles; + + if ( value ) + { + Usage = "Kill"; + Description = "Kills a targeted player or npc."; + } + else + { + Usage = "Resurrect"; + Description = "Resurrects a targeted ghost."; + } + } + + public override void Execute( CommandEventArgs e, object obj ) + { + Mobile mob = (Mobile)obj; + Mobile from = e.Mobile; + + if ( m_Value ) + { + if ( !mob.Alive ) + { + LogFailure( "They are already dead." ); + } + else if ( !mob.CanBeDamaged() ) + { + LogFailure( "They cannot be harmed." ); + } + else + { + CommandLogging.WriteLine( from, "{0} {1} killing {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( mob ) ); + mob.Kill(); + + AddResponse( "They have been killed." ); + } + } + else + { + if ( mob.IsDeadBondedPet ) + { + BaseCreature bc = mob as BaseCreature; + + if ( bc != null ) + { + CommandLogging.WriteLine( from, "{0} {1} resurrecting {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( mob ) ); + + bc.PlaySound( 0x214 ); + bc.FixedEffect( 0x376A, 10, 16 ); + + bc.ResurrectPet(); + + AddResponse( "It has been resurrected." ); + } + } + else if ( !mob.Alive ) + { + CommandLogging.WriteLine( from, "{0} {1} resurrecting {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( mob ) ); + + mob.PlaySound( 0x214 ); + mob.FixedEffect( 0x376A, 10, 16 ); + + mob.Resurrect(); + + AddResponse( "They have been resurrected." ); + } + else + { + LogFailure( "They are not dead." ); + } + } + } + } + + public class HideCommand : BaseCommand + { + private bool m_Value; + + public HideCommand( bool value ) + { + m_Value = value; + + AccessLevel = AccessLevel.Counselor; + Supports = CommandSupport.AllMobiles; + Commands = new string[]{ value ? "Hide" : "Unhide" }; + ObjectTypes = ObjectTypes.Mobiles; + + if ( value ) + { + Usage = "Hide"; + Description = "Makes a targeted mobile disappear in a puff of smoke."; + } + else + { + Usage = "Unhide"; + Description = "Makes a targeted mobile appear in a puff of smoke."; + } + } + + public override void Execute( CommandEventArgs e, object obj ) + { + Mobile m = (Mobile)obj; + + CommandLogging.WriteLine( e.Mobile, "{0} {1} {2} {3}", e.Mobile.AccessLevel, CommandLogging.Format( e.Mobile ), m_Value ? "hiding" : "unhiding", CommandLogging.Format( m ) ); + + Effects.SendLocationEffect( new Point3D( m.X + 1, m.Y, m.Z + 4 ), m.Map, 0x3728, 13 ); + Effects.SendLocationEffect( new Point3D( m.X + 1, m.Y, m.Z ), m.Map, 0x3728, 13 ); + Effects.SendLocationEffect( new Point3D( m.X + 1, m.Y, m.Z - 4 ), m.Map, 0x3728, 13 ); + Effects.SendLocationEffect( new Point3D( m.X, m.Y + 1, m.Z + 4 ), m.Map, 0x3728, 13 ); + Effects.SendLocationEffect( new Point3D( m.X, m.Y + 1, m.Z ), m.Map, 0x3728, 13 ); + Effects.SendLocationEffect( new Point3D( m.X, m.Y + 1, m.Z - 4 ), m.Map, 0x3728, 13 ); + + Effects.SendLocationEffect( new Point3D( m.X + 1, m.Y + 1, m.Z + 11 ), m.Map, 0x3728, 13 ); + Effects.SendLocationEffect( new Point3D( m.X + 1, m.Y + 1, m.Z + 7 ), m.Map, 0x3728, 13 ); + Effects.SendLocationEffect( new Point3D( m.X + 1, m.Y + 1, m.Z + 3 ), m.Map, 0x3728, 13 ); + Effects.SendLocationEffect( new Point3D( m.X + 1, m.Y + 1, m.Z - 1 ), m.Map, 0x3728, 13 ); + + m.PlaySound( 0x228 ); + m.Hidden = m_Value; + + if ( m_Value ) + AddResponse( "They have been hidden." ); + else + AddResponse( "They have been revealed." ); + } + } + + public class FirewallCommand : BaseCommand + { + public FirewallCommand() + { + AccessLevel = AccessLevel.Administrator; + Supports = CommandSupport.AllMobiles; + Commands = new string[]{ "Firewall" }; + ObjectTypes = ObjectTypes.Mobiles; + Usage = "Firewall"; + Description = "Adds a targeted player to the firewall (list of blocked IP addresses). This command does not ban or kick."; + } + + public override void Execute( CommandEventArgs e, object obj ) + { + Mobile from = e.Mobile; + Mobile targ = (Mobile)obj; + NetState state = targ.NetState; + + if ( state != null ) + { + CommandLogging.WriteLine( from, "{0} {1} firewalling {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targ ) ); + + try + { + Firewall.Add( state.Address ); + AddResponse( "They have been firewalled." ); + } + catch ( Exception ex ) + { + LogFailure( ex.Message ); + } + } + else + { + LogFailure( "They are not online." ); + } + } + } + + public class KickCommand : BaseCommand + { + private bool m_Ban; + + public KickCommand( bool ban ) + { + m_Ban = ban; + + AccessLevel = ( ban ? AccessLevel.Administrator : AccessLevel.GameMaster ); + Supports = CommandSupport.AllMobiles; + Commands = new string[]{ ban ? "Ban" : "Kick" }; + ObjectTypes = ObjectTypes.Mobiles; + + if ( ban ) + { + Usage = "Ban"; + Description = "Bans the account of a targeted player."; + } + else + { + Usage = "Kick"; + Description = "Disconnects a targeted player."; + } + } + + public override void Execute( CommandEventArgs e, object obj ) + { + Mobile from = e.Mobile; + Mobile targ = (Mobile)obj; + + if ( from.AccessLevel > targ.AccessLevel ) + { + NetState fromState = from.NetState, targState = targ.NetState; + + if ( fromState != null && targState != null ) + { + Account fromAccount = fromState.Account as Account; + Account targAccount = targState.Account as Account; + + if ( fromAccount != null && targAccount != null ) + { + CommandLogging.WriteLine( from, "{0} {1} {2} {3}", from.AccessLevel, CommandLogging.Format( from ), m_Ban ? "banning" : "kicking", CommandLogging.Format( targ ) ); + + targ.Say( "I've been {0}!", m_Ban ? "banned" : "kicked" ); + + AddResponse( String.Format( "They have been {0}.", m_Ban ? "banned" : "kicked" ) ); + + targState.Dispose(); + + if ( m_Ban ) + { + targAccount.Banned = true; + targAccount.SetUnspecifiedBan( from ); + from.SendGump( new BanDurationGump( targAccount ) ); + } + } + } + else if ( targState == null ) + { + LogFailure( "They are not online." ); + } + } + else + { + LogFailure( "You do not have the required access level to do this." ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Commands/Interface.cs b/Scripts/Commands/Generic/Commands/Interface.cs new file mode 100644 index 0000000..d41964e --- /dev/null +++ b/Scripts/Commands/Generic/Commands/Interface.cs @@ -0,0 +1,570 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Targeting; +using Server.Targets; + +namespace Server.Commands.Generic +{ + public class InterfaceCommand : BaseCommand + { + public InterfaceCommand() + { + AccessLevel = AccessLevel.GameMaster; + Supports = CommandSupport.Complex | CommandSupport.Simple; + Commands = new string[]{ "Interface" }; + ObjectTypes = ObjectTypes.Both; + Usage = "Interface [view ]"; + Description = "Opens an interface to interact with matched objects. Generally used with condition arguments."; + ListOptimized = true; + } + + public override void ExecuteList( CommandEventArgs e, ArrayList list ) + { + if ( list.Count > 0 ) + { + List columns = new List(); + + columns.Add( "Object" ); + + if ( e.Length > 0 ) + { + int offset = 0; + + if ( Insensitive.Equals( e.GetString( 0 ), "view" ) ) + ++offset; + + while ( offset < e.Length ) + columns.Add( e.GetString( offset++ ) ); + } + + e.Mobile.SendGump( new InterfaceGump( e.Mobile, columns.ToArray(), list, 0, null ) ); + } + else + { + AddResponse( "No matching objects found." ); + } + } + } + + public class InterfaceGump : BaseGridGump + { + private Mobile m_From; + + private string[] m_Columns; + + private ArrayList m_List; + private int m_Page; + + private object m_Select; + + private const int EntriesPerPage = 15; + + public InterfaceGump( Mobile from, string[] columns, ArrayList list, int page, object select ) : base( 30, 30 ) + { + m_From = from; + + m_Columns = columns; + + m_List = list; + m_Page = page; + + m_Select = select; + + Render(); + } + + public void Render() + { + AddNewPage(); + + if ( m_Page > 0 ) + AddEntryButton( 20, ArrowLeftID1, ArrowLeftID2, 1, ArrowLeftWidth, ArrowLeftHeight ); + else + AddEntryHeader( 20 ); + + AddEntryHtml( 40 + ( m_Columns.Length * 130 ) - 20 + ( ( m_Columns.Length - 2 ) * OffsetSize ), Center( String.Format( "Page {0} of {1}", m_Page+1, (m_List.Count + EntriesPerPage - 1) / EntriesPerPage ) ) ); + + if ( (m_Page + 1) * EntriesPerPage < m_List.Count ) + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 2, ArrowRightWidth, ArrowRightHeight ); + else + AddEntryHeader( 20 ); + + if ( m_Columns.Length > 1 ) + { + AddNewLine(); + + for ( int i = 0; i < m_Columns.Length; ++i ) + { + if ( i > 0 && m_List.Count > 0 ) + { + object obj = m_List[0]; + + if ( obj != null ) + { + string failReason = null; + PropertyInfo[] chain = Properties.GetPropertyInfoChain( m_From, obj.GetType(), m_Columns[i], PropertyAccess.Read, ref failReason ); + + if ( chain != null && chain.Length > 0 ) + { + m_Columns[i] = ""; + + for ( int j = 0; j < chain.Length; ++j ) + { + if ( j > 0 ) + m_Columns[i] += '.'; + + m_Columns[i] += chain[j].Name; + } + } + } + } + + AddEntryHtml( 130 + ( i == 0 ? 40 : 0 ), m_Columns[i] ); + } + + AddEntryHeader( 20 ); + } + + for ( int i = m_Page * EntriesPerPage, line = 0; line < EntriesPerPage && i < m_List.Count; ++i, ++line ) + { + AddNewLine(); + + object obj = m_List[i]; + bool isDeleted = false; + + if ( obj is Item ) + { + Item item = (Item)obj; + + if ( !(isDeleted = item.Deleted) ) + AddEntryHtml( 40 + 130, item.GetType().Name ); + } + else if ( obj is Mobile ) + { + Mobile mob = (Mobile)obj; + + if ( !(isDeleted = mob.Deleted) ) + AddEntryHtml( 40 + 130, mob.Name ); + } + + if ( isDeleted ) + { + AddEntryHtml( 40 + 130, "(deleted)" ); + + for ( int j = 1; j < m_Columns.Length; ++j ) + AddEntryHtml( 130, "---" ); + + AddEntryHeader( 20 ); + } + else + { + for ( int j = 1; j < m_Columns.Length; ++j ) + { + object src = obj; + + string value; + string failReason = ""; + + PropertyInfo[] chain = Properties.GetPropertyInfoChain( m_From, src.GetType(), m_Columns[j], PropertyAccess.Read, ref failReason ); + + if ( chain == null || chain.Length == 0 ) + { + value = "---"; + } + else + { + PropertyInfo p = Properties.GetPropertyInfo( ref src, chain, ref failReason ); + + if ( p == null ) + value = "---"; + else + value = PropertiesGump.ValueToString( src, p ); + } + + AddEntryHtml( 130, value ); + } + + bool isSelected = ( m_Select != null && obj == m_Select ); + + AddEntryButton( 20, ( isSelected ? 9762 : ArrowRightID1 ), ( isSelected ? 9763 : ArrowRightID2 ), 3 + i, ArrowRightWidth, ArrowRightHeight ); + } + } + + FinishPage(); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + switch ( info.ButtonID ) + { + case 1: + { + if ( m_Page > 0 ) + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page - 1, m_Select ) ); + + break; + } + case 2: + { + if ( (m_Page + 1) * EntriesPerPage < m_List.Count ) + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page + 1, m_Select ) ); + + break; + } + default: + { + int v = info.ButtonID - 3; + + if ( v >= 0 && v < m_List.Count ) + { + object obj = m_List[v]; + + if ( !BaseCommand.IsAccessible( m_From, obj ) ) + { + m_From.SendMessage( "That is not accessible." ); + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Select ) ); + break; + } + + if ( obj is Item && !((Item)obj).Deleted ) + m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, (Item) obj ) ); + else if ( obj is Mobile && !((Mobile)obj).Deleted ) + m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, (Mobile) obj ) ); + else + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Select ) ); + } + + break; + } + } + } + } + + public class InterfaceItemGump : BaseGridGump + { + private Mobile m_From; + + private string[] m_Columns; + + private ArrayList m_List; + private int m_Page; + + private Item m_Item; + + public InterfaceItemGump( Mobile from, string[] columns, ArrayList list, int page, Item item ) : base( 30, 30 ) + { + m_From = from; + + m_Columns = columns; + + m_List = list; + m_Page = page; + + m_Item = item; + + Render(); + } + + public void Render() + { + AddNewPage(); + + AddEntryButton( 20, ArrowLeftID1, ArrowLeftID2, 1, ArrowLeftWidth, ArrowLeftHeight ); + AddEntryHtml( 160, m_Item.GetType().Name ); + AddEntryHeader( 20 ); + + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Properties" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 2, ArrowRightWidth, ArrowRightHeight ); + + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Delete" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 3, ArrowRightWidth, ArrowRightHeight ); + + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Go there" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 4, ArrowRightWidth, ArrowRightHeight ); + + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Move to target" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 5, ArrowRightWidth, ArrowRightHeight ); + + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Bring to pack" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 6, ArrowRightWidth, ArrowRightHeight ); + + FinishPage(); + } + + private void InvokeCommand( string ip ) + { + CommandSystem.Handle( m_From, String.Format( "{0}{1}", CommandSystem.Prefix, ip ) ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( m_Item.Deleted ) + { + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Item ) ); + return; + } + else if ( !BaseCommand.IsAccessible( m_From, m_Item ) ) + { + m_From.SendMessage( "That is no longer accessible." ); + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Item ) ); + return; + } + + switch ( info.ButtonID ) + { + case 0: + case 1: + { + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Item ) ); + break; + } + case 2: // Properties + { + m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, m_Item ) ); + m_From.SendGump( new PropertiesGump( m_From, m_Item ) ); + break; + } + case 3: // Delete + { + CommandLogging.WriteLine( m_From, "{0} {1} deleting {2}", m_From.AccessLevel, CommandLogging.Format( m_From ), CommandLogging.Format( m_Item ) ); + m_Item.Delete(); + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Item ) ); + break; + } + case 4: // Go there + { + m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, m_Item ) ); + InvokeCommand( String.Format( "Go {0}", m_Item.Serial.Value ) ); + break; + } + case 5: // Move to target + { + m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, m_Item ) ); + m_From.Target = new MoveTarget( m_Item ); + break; + } + case 6: // Bring to pack + { + Mobile owner = m_Item.RootParent as Mobile; + + if ( owner != null && (owner.Map != null && owner.Map != Map.Internal) && !BaseCommand.IsAccessible( m_From, owner ) /* !m_From.CanSee( owner )*/ ) + { + m_From.SendMessage( "You can not get what you can not see." ); + } + else if ( owner != null && (owner.Map == null || owner.Map == Map.Internal) && owner.Hidden && owner.AccessLevel >= m_From.AccessLevel ) + { + m_From.SendMessage( "You can not get what you can not see." ); + } + else + { + m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, m_Item ) ); + m_From.AddToBackpack( m_Item ); + } + + break; + } + } + } + } + + public class InterfaceMobileGump : BaseGridGump + { + private Mobile m_From; + + private string[] m_Columns; + + private ArrayList m_List; + private int m_Page; + + private Mobile m_Mobile; + + public InterfaceMobileGump( Mobile from, string[] columns, ArrayList list, int page, Mobile mob ) + : base( 30, 30 ) + { + m_From = from; + + m_Columns = columns; + + m_List = list; + m_Page = page; + + m_Mobile = mob; + + Render(); + } + + public void Render() + { + AddNewPage(); + + AddEntryButton( 20, ArrowLeftID1, ArrowLeftID2, 1, ArrowLeftWidth, ArrowLeftHeight ); + AddEntryHtml( 160, m_Mobile.Name ); + AddEntryHeader( 20 ); + + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Properties" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 2, ArrowRightWidth, ArrowRightHeight ); + + if ( !m_Mobile.Player ) + { + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Delete" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 3, ArrowRightWidth, ArrowRightHeight ); + } + + if ( m_Mobile != m_From ) + { + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Go to there" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 4, ArrowRightWidth, ArrowRightHeight ); + + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Bring them here" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 5, ArrowRightWidth, ArrowRightHeight ); + } + + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Move to target" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 6, ArrowRightWidth, ArrowRightHeight ); + + if ( m_From == m_Mobile || m_From.AccessLevel > m_Mobile.AccessLevel ) + { + AddNewLine(); + if ( m_Mobile.Alive ) + { + AddEntryHtml( 20 + OffsetSize + 160, "Kill" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 7, ArrowRightWidth, ArrowRightHeight ); + } + else + { + AddEntryHtml( 20 + OffsetSize + 160, "Resurrect" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 8, ArrowRightWidth, ArrowRightHeight ); + } + } + + if ( m_Mobile.NetState != null ) + { + AddNewLine(); + AddEntryHtml( 20 + OffsetSize + 160, "Client" ); + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 9, ArrowRightWidth, ArrowRightHeight ); + } + + FinishPage(); + } + + private void InvokeCommand( string ip ) + { + CommandSystem.Handle( m_From, String.Format( "{0}{1}", CommandSystem.Prefix, ip ) ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( m_Mobile.Deleted ) + { + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + return; + } + else if ( !BaseCommand.IsAccessible( m_From, m_Mobile ) ) + { + m_From.SendMessage( "That is no longer accessible." ); + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + return; + } + + switch ( info.ButtonID ) + { + case 0: + case 1: + { + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + break; + } + case 2: // Properties + { + m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + m_From.SendGump( new PropertiesGump( m_From, m_Mobile ) ); + break; + } + case 3: // Delete + { + if ( !m_Mobile.Player ) + { + CommandLogging.WriteLine( m_From, "{0} {1} deleting {2}", m_From.AccessLevel, CommandLogging.Format( m_From ), CommandLogging.Format( m_Mobile ) ); + m_Mobile.Delete(); + m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + } + + break; + } + case 4: // Go there + { + m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + InvokeCommand( String.Format( "Go {0}", m_Mobile.Serial.Value ) ); + break; + } + case 5: // Bring them here + { + if ( m_From.Map == null || m_From.Map == Map.Internal ) + { + m_From.SendMessage( "You cannot bring that person here." ); + } + else + { + m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + m_Mobile.MoveToWorld( m_From.Location, m_From.Map ); + } + + break; + } + case 6: // Move to target + { + m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + m_From.Target = new MoveTarget( m_Mobile ); + break; + } + case 7: // Kill + { + if ( m_From == m_Mobile || m_From.AccessLevel > m_Mobile.AccessLevel ) + m_Mobile.Kill(); + + m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + + break; + } + case 8: // Res + { + if ( m_From == m_Mobile || m_From.AccessLevel > m_Mobile.AccessLevel ) + { + m_Mobile.PlaySound( 0x214 ); + m_Mobile.FixedEffect( 0x376A, 10, 16 ); + + m_Mobile.Resurrect(); + } + + m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + + break; + } + case 9: // Client + { + m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) ); + + if ( m_Mobile.NetState != null ) + m_From.SendGump( new ClientGump( m_From, m_Mobile.NetState ) ); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Extensions/BaseExtension.cs b/Scripts/Commands/Generic/Extensions/BaseExtension.cs new file mode 100644 index 0000000..62bdd87 --- /dev/null +++ b/Scripts/Commands/Generic/Extensions/BaseExtension.cs @@ -0,0 +1,184 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace Server.Commands.Generic +{ + public delegate BaseExtension ExtensionConstructor(); + + public sealed class ExtensionInfo + { + private static Dictionary m_Table = new Dictionary( StringComparer.InvariantCultureIgnoreCase ); + + public static Dictionary Table + { + get { return m_Table; } + } + + public static void Register( ExtensionInfo ext ) + { + m_Table[ext.m_Name] = ext; + } + + private int m_Order; + + private string m_Name; + private int m_Size; + + private ExtensionConstructor m_Constructor; + + public int Order + { + get { return m_Order; } + } + + public string Name + { + get { return m_Name; } + } + + public int Size + { + get { return m_Size; } + } + + public bool IsFixedSize + { + get { return ( m_Size >= 0 ); } + } + + public ExtensionConstructor Constructor + { + get { return m_Constructor; } + } + + public ExtensionInfo( int order, string name, int size, ExtensionConstructor constructor ) + { + m_Name = name; + m_Size = size; + + m_Order = order; + + m_Constructor = constructor; + } + } + + public sealed class Extensions : List + { + public Extensions() + { + } + + public bool IsValid( object obj ) + { + for ( int i = 0; i < this.Count; ++i ) + { + if ( !this[i].IsValid( obj ) ) + return false; + } + + return true; + } + + public void Filter( ArrayList list ) + { + for ( int i = 0; i < this.Count; ++i ) + this[i].Filter( list ); + } + + public static Extensions Parse( Mobile from, ref string[] args ) + { + Extensions parsed = new Extensions(); + + int size = args.Length; + + Type baseType = null; + + for ( int i = args.Length - 1; i >= 0; --i ) + { + ExtensionInfo extInfo = null; + + if ( !ExtensionInfo.Table.TryGetValue( args[i], out extInfo ) ) + continue; + + if ( extInfo.IsFixedSize && i != ( size - extInfo.Size - 1 ) ) + throw new Exception( "Invalid extended argument count." ); + + BaseExtension ext = extInfo.Constructor(); + + ext.Parse( from, args, i + 1, size - i - 1 ); + + if ( ext is WhereExtension ) + baseType = ( ext as WhereExtension ).Conditional.Type; + + parsed.Add( ext ); + + size = i; + } + + parsed.Sort( delegate( BaseExtension a, BaseExtension b ) + { + return ( a.Order - b.Order ); + } ); + + AssemblyEmitter emitter = null; + + foreach ( BaseExtension update in parsed ) + update.Optimize( from, baseType, ref emitter ); + + if ( size != args.Length ) + { + string[] old = args; + args = new string[size]; + + for ( int i = 0; i < args.Length; ++i ) + args[i] = old[i]; + } + + return parsed; + } + } + + public abstract class BaseExtension + { + public abstract ExtensionInfo Info { get; } + + public string Name + { + get { return Info.Name; } + } + + public int Size + { + get { return Info.Size; } + } + + public bool IsFixedSize + { + get { return Info.IsFixedSize; } + } + + public int Order + { + get { return Info.Order; } + } + + public virtual void Optimize( Mobile from, Type baseType, ref AssemblyEmitter assembly ) + { + } + + public virtual void Parse( Mobile from, string[] arguments, int offset, int size ) + { + } + + public virtual bool IsValid( object obj ) + { + return true; + } + + public virtual void Filter( ArrayList list ) + { + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Extensions/Compilers/ConditionalCompiler.cs b/Scripts/Commands/Generic/Extensions/Compilers/ConditionalCompiler.cs new file mode 100644 index 0000000..3e438b3 --- /dev/null +++ b/Scripts/Commands/Generic/Extensions/Compilers/ConditionalCompiler.cs @@ -0,0 +1,569 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection; +using System.Reflection.Emit; +using System.Text; +using Server; + +namespace Server.Commands.Generic +{ + public interface IConditional + { + bool Verify( object obj ); + } + + public interface ICondition + { + // Invoked during the constructor + void Construct( TypeBuilder typeBuilder, ILGenerator il, int index ); + + // Target object will be loaded on the stack + void Compile( MethodEmitter emitter ); + } + + public sealed class TypeCondition : ICondition + { + public static TypeCondition Default = new TypeCondition(); + + void ICondition.Construct( TypeBuilder typeBuilder, ILGenerator il, int index ) + { + } + + void ICondition.Compile( MethodEmitter emitter ) + { + // The object was safely cast to be the conditionals type + // If it's null, then the type cast didn't work... + + emitter.LoadNull(); + emitter.Compare( OpCodes.Ceq ); + emitter.LogicalNot(); + } + } + + public sealed class PropertyValue + { + private Type m_Type; + private object m_Value; + private FieldInfo m_Field; + + public Type Type + { + get { return m_Type; } + } + + public object Value + { + get { return m_Value; } + } + + public FieldInfo Field + { + get { return m_Field; } + } + + public bool HasField + { + get { return ( m_Field != null ); } + } + + public PropertyValue( Type type, object value ) + { + m_Type = type; + m_Value = value; + } + + public void Load( MethodEmitter method ) + { + if ( m_Field != null ) + { + method.LoadArgument( 0 ); + method.LoadField( m_Field ); + } + else if ( m_Value == null ) + { + method.LoadNull( m_Type ); + } + else + { + if ( m_Value is int ) + method.Load( (int) m_Value ); + else if ( m_Value is long ) + method.Load( (long) m_Value ); + else if ( m_Value is float ) + method.Load( (float) m_Value ); + else if ( m_Value is double ) + method.Load( (double) m_Value ); + else if ( m_Value is char ) + method.Load( (char) m_Value ); + else if ( m_Value is bool ) + method.Load( (bool) m_Value ); + else if ( m_Value is string ) + method.Load( (string) m_Value ); + else if ( m_Value is Enum ) + method.Load( (Enum) m_Value ); + else + throw new InvalidOperationException( "Unrecognized comparison value." ); + } + } + + public void Acquire( TypeBuilder typeBuilder, ILGenerator il, string fieldName ) + { + if ( m_Value is string ) + { + string toParse = (string) m_Value; + + if ( !m_Type.IsValueType && toParse == "null" ) + { + m_Value = null; + } + else if ( m_Type == typeof( string ) ) + { + if ( toParse == @"@""null""" ) + toParse = "null"; + + m_Value = toParse; + } + else if ( m_Type.IsEnum ) + { + m_Value = Enum.Parse( m_Type, toParse, true ); + } + else + { + MethodInfo parseMethod = null; + object[] parseArgs = null; + + MethodInfo parseNumber = m_Type.GetMethod( + "Parse", + BindingFlags.Public | BindingFlags.Static, + null, + new Type[] { typeof( string ), typeof( NumberStyles ) }, + null + ); + + if ( parseNumber != null ) + { + NumberStyles style = NumberStyles.Integer; + + if ( Insensitive.StartsWith( toParse, "0x" ) ) + { + style = NumberStyles.HexNumber; + toParse = toParse.Substring( 2 ); + } + + parseMethod = parseNumber; + parseArgs = new object[] { toParse, style }; + } + else + { + MethodInfo parseGeneral = m_Type.GetMethod( + "Parse", + BindingFlags.Public | BindingFlags.Static, + null, + new Type[] { typeof( string ) }, + null + ); + + parseMethod = parseGeneral; + parseArgs = new object[] { toParse }; + } + + if ( parseMethod != null ) + { + m_Value = parseMethod.Invoke( null, parseArgs ); + + if ( !m_Type.IsPrimitive ) + { + m_Field = typeBuilder.DefineField( + fieldName, + m_Type, + FieldAttributes.Private | FieldAttributes.InitOnly + ); + + il.Emit( OpCodes.Ldarg_0 ); + + il.Emit( OpCodes.Ldstr, toParse ); + + if ( parseArgs.Length == 2 ) // dirty evil hack :-( + il.Emit( OpCodes.Ldc_I4, (int) parseArgs[1] ); + + il.Emit( OpCodes.Call, parseMethod ); + il.Emit( OpCodes.Stfld, m_Field ); + } + } + else + { + throw new InvalidOperationException( + String.Format( + "Unable to convert string \"{0}\" into type '{1}'.", + m_Value, + m_Type + ) + ); + } + } + } + } + } + + public abstract class PropertyCondition : ICondition + { + protected Property m_Property; + protected bool m_Not; + + public PropertyCondition( Property property, bool not ) + { + m_Property = property; + m_Not = not; + } + + public abstract void Construct( TypeBuilder typeBuilder, ILGenerator il, int index ); + + public abstract void Compile( MethodEmitter emitter ); + } + + public enum StringOperator + { + Equal, + NotEqual, + + Contains, + + StartsWith, + EndsWith + } + + public sealed class StringCondition : PropertyCondition + { + private StringOperator m_Operator; + private PropertyValue m_Value; + + private bool m_IgnoreCase; + + public StringCondition( Property property, bool not, StringOperator op, object value, bool ignoreCase ) + : base( property, not ) + { + m_Operator = op; + m_Value = new PropertyValue( property.Type, value ); + + m_IgnoreCase = ignoreCase; + } + + public override void Construct( TypeBuilder typeBuilder, ILGenerator il, int index ) + { + m_Value.Acquire( typeBuilder, il, "v" + index ); + } + + public override void Compile( MethodEmitter emitter ) + { + bool inverse = false; + + string methodName; + + switch ( m_Operator ) + { + case StringOperator.Equal: + methodName = "Equals"; + break; + + case StringOperator.NotEqual: + methodName = "Equals"; + inverse = true; + break; + + case StringOperator.Contains: + methodName = "Contains"; + break; + + case StringOperator.StartsWith: + methodName = "StartsWith"; + break; + + case StringOperator.EndsWith: + methodName = "EndsWith"; + break; + + default: + throw new InvalidOperationException( "Invalid string comparison operator." ); + } + + if ( m_IgnoreCase || methodName == "Equals" ) + { + Type type = ( m_IgnoreCase ? typeof( Insensitive ) : typeof( String ) ); + + emitter.BeginCall( + type.GetMethod( + methodName, + BindingFlags.Public | BindingFlags.Static, + null, + new Type[] + { + typeof( string ), + typeof( string ) + }, + null + ) + ); + + emitter.Chain( m_Property ); + m_Value.Load( emitter ); + + emitter.FinishCall(); + } + else + { + Label notNull = emitter.CreateLabel(); + Label moveOn = emitter.CreateLabel(); + + LocalBuilder temp = emitter.AcquireTemp( m_Property.Type ); + + emitter.Chain( m_Property ); + + emitter.StoreLocal( temp ); + emitter.LoadLocal( temp ); + + emitter.BranchIfTrue( notNull ); + + emitter.Load( false ); + emitter.Pop(); + emitter.Branch( moveOn ); + + emitter.MarkLabel( notNull ); + emitter.LoadLocal( temp ); + + emitter.BeginCall( + typeof( string ).GetMethod( + methodName, + BindingFlags.Public | BindingFlags.Instance, + null, + new Type[] + { + typeof( string ) + }, + null + ) + ); + + m_Value.Load( emitter ); + + emitter.FinishCall(); + + emitter.MarkLabel( moveOn ); + } + + if ( m_Not != inverse ) + emitter.LogicalNot(); + } + } + + public enum ComparisonOperator + { + Equal, + NotEqual, + Greater, + GreaterEqual, + Lesser, + LesserEqual + } + + public sealed class ComparisonCondition : PropertyCondition + { + private ComparisonOperator m_Operator; + private PropertyValue m_Value; + + public ComparisonCondition( Property property, bool not, ComparisonOperator op, object value ) + : base( property, not ) + { + m_Operator = op; + m_Value = new PropertyValue( property.Type, value ); + } + + public override void Construct( TypeBuilder typeBuilder, ILGenerator il, int index ) + { + m_Value.Acquire( typeBuilder, il, "v" + index ); + } + + public override void Compile( MethodEmitter emitter ) + { + emitter.Chain( m_Property ); + + bool inverse = false; + + bool couldCompare = + emitter.CompareTo( 1, delegate() + { + m_Value.Load( emitter ); + } ); + + if ( couldCompare ) + { + emitter.Load( 0 ); + + switch ( m_Operator ) + { + case ComparisonOperator.Equal: + emitter.Compare( OpCodes.Ceq ); + break; + + case ComparisonOperator.NotEqual: + emitter.Compare( OpCodes.Ceq ); + inverse = true; + break; + + case ComparisonOperator.Greater: + emitter.Compare( OpCodes.Cgt ); + break; + + case ComparisonOperator.GreaterEqual: + emitter.Compare( OpCodes.Clt ); + inverse = true; + break; + + case ComparisonOperator.Lesser: + emitter.Compare( OpCodes.Clt ); + break; + + case ComparisonOperator.LesserEqual: + emitter.Compare( OpCodes.Cgt ); + inverse = true; + break; + + default: + throw new InvalidOperationException( "Invalid comparison operator." ); + } + } + else + { + // This type is -not- comparable + // We can only support == and != operations + + m_Value.Load( emitter ); + + switch ( m_Operator ) + { + case ComparisonOperator.Equal: + emitter.Compare( OpCodes.Ceq ); + break; + + case ComparisonOperator.NotEqual: + emitter.Compare( OpCodes.Ceq ); + inverse = true; + break; + + case ComparisonOperator.Greater: + case ComparisonOperator.GreaterEqual: + case ComparisonOperator.Lesser: + case ComparisonOperator.LesserEqual: + throw new InvalidOperationException( "Property does not support relational comparisons." ); + + default: + throw new InvalidOperationException( "Invalid operator." ); + } + } + + if ( m_Not != inverse ) + emitter.LogicalNot(); + } + } + + public static class ConditionalCompiler + { + public static IConditional Compile( AssemblyEmitter assembly, Type objectType, ICondition[] conditions, int index ) + { + TypeBuilder typeBuilder = assembly.DefineType( + "__conditional" + index, + TypeAttributes.Public, + typeof( object ) + ); + + #region Constructor + { + ConstructorBuilder ctor = typeBuilder.DefineConstructor( + MethodAttributes.Public, + CallingConventions.Standard, + Type.EmptyTypes + ); + + ILGenerator il = ctor.GetILGenerator(); + + // : base() + il.Emit( OpCodes.Ldarg_0 ); + il.Emit( OpCodes.Call, typeof( object ).GetConstructor( Type.EmptyTypes ) ); + + for ( int i = 0; i < conditions.Length; ++i ) + conditions[i].Construct( typeBuilder, il, i ); + + // return; + il.Emit( OpCodes.Ret ); + } + #endregion + + #region IComparer + typeBuilder.AddInterfaceImplementation( typeof( IConditional ) ); + + MethodBuilder compareMethod; + + #region Compare + { + MethodEmitter emitter = new MethodEmitter( typeBuilder ); + + emitter.Define( + /* name */ "Verify", + /* attr */ MethodAttributes.Public | MethodAttributes.Virtual, + /* return */ typeof( bool ), + /* params */ new Type[] { typeof( object ) } ); + + LocalBuilder obj = emitter.CreateLocal( objectType ); + LocalBuilder eq = emitter.CreateLocal( typeof( bool ) ); + + emitter.LoadArgument( 1 ); + emitter.CastAs( objectType ); + emitter.StoreLocal( obj ); + + Label done = emitter.CreateLabel(); + + for ( int i = 0; i < conditions.Length; ++i ) + { + if ( i > 0 ) + { + emitter.LoadLocal( eq ); + + emitter.BranchIfFalse( done ); + } + + emitter.LoadLocal( obj ); + + conditions[i].Compile( emitter ); + + emitter.StoreLocal( eq ); + } + + emitter.MarkLabel( done ); + + emitter.LoadLocal( eq ); + + emitter.Return(); + + typeBuilder.DefineMethodOverride( + emitter.Method, + typeof( IConditional ).GetMethod( + "Verify", + new Type[] + { + typeof( object ) + } + ) + ); + + compareMethod = emitter.Method; + } + #endregion + #endregion + + Type conditionalType = typeBuilder.CreateType(); + + return (IConditional) Activator.CreateInstance( conditionalType ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Extensions/Compilers/DistinctCompiler.cs b/Scripts/Commands/Generic/Extensions/Compilers/DistinctCompiler.cs new file mode 100644 index 0000000..e171728 --- /dev/null +++ b/Scripts/Commands/Generic/Extensions/Compilers/DistinctCompiler.cs @@ -0,0 +1,249 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; +using System.Text; +using Server; + +namespace Server.Commands.Generic +{ + public static class DistinctCompiler + { + public static IComparer Compile( AssemblyEmitter assembly, Type objectType, Property[] props ) + { + TypeBuilder typeBuilder = assembly.DefineType( + "__distinct", + TypeAttributes.Public, + typeof( object ) + ); + + #region Constructor + { + ConstructorBuilder ctor = typeBuilder.DefineConstructor( + MethodAttributes.Public, + CallingConventions.Standard, + Type.EmptyTypes + ); + + ILGenerator il = ctor.GetILGenerator(); + + // : base() + il.Emit( OpCodes.Ldarg_0 ); + il.Emit( OpCodes.Call, typeof( object ).GetConstructor( Type.EmptyTypes ) ); + + // return; + il.Emit( OpCodes.Ret ); + } + #endregion + + #region IComparer + typeBuilder.AddInterfaceImplementation( typeof( IComparer ) ); + + MethodBuilder compareMethod; + + #region Compare + { + MethodEmitter emitter = new MethodEmitter( typeBuilder ); + + emitter.Define( + /* name */ "Compare", + /* attr */ MethodAttributes.Public | MethodAttributes.Virtual, + /* return */ typeof( int ), + /* params */ new Type[] { typeof( object ), typeof( object ) } ); + + LocalBuilder a = emitter.CreateLocal( objectType ); + LocalBuilder b = emitter.CreateLocal( objectType ); + + LocalBuilder v = emitter.CreateLocal( typeof( int ) ); + + emitter.LoadArgument( 1 ); + emitter.CastAs( objectType ); + emitter.StoreLocal( a ); + + emitter.LoadArgument( 2 ); + emitter.CastAs( objectType ); + emitter.StoreLocal( b ); + + emitter.Load( 0 ); + emitter.StoreLocal( v ); + + Label end = emitter.CreateLabel(); + + for ( int i = 0; i < props.Length; ++i ) + { + if ( i > 0 ) + { + emitter.LoadLocal( v ); + emitter.BranchIfTrue( end ); // if ( v != 0 ) return v; + } + + Property prop = props[i]; + + emitter.LoadLocal( a ); + emitter.Chain( prop ); + + bool couldCompare = + emitter.CompareTo( 1, delegate() + { + emitter.LoadLocal( b ); + emitter.Chain( prop ); + } ); + + if ( !couldCompare ) + throw new InvalidOperationException( "Property is not comparable." ); + + emitter.StoreLocal( v ); + } + + emitter.MarkLabel( end ); + + emitter.LoadLocal( v ); + emitter.Return(); + + typeBuilder.DefineMethodOverride( + emitter.Method, + typeof( IComparer ).GetMethod( + "Compare", + new Type[] + { + typeof( object ), + typeof( object ) + } + ) + ); + + compareMethod = emitter.Method; + } + #endregion + #endregion + + #region IEqualityComparer + typeBuilder.AddInterfaceImplementation( typeof( IEqualityComparer ) ); + + #region Equals + { + MethodEmitter emitter = new MethodEmitter( typeBuilder ); + + emitter.Define( + /* name */ "Equals", + /* attr */ MethodAttributes.Public | MethodAttributes.Virtual, + /* return */ typeof( bool ), + /* params */ new Type[] { typeof( object ), typeof( object ) } ); + + emitter.Generator.Emit( OpCodes.Ldarg_0 ); + emitter.Generator.Emit( OpCodes.Ldarg_1 ); + emitter.Generator.Emit( OpCodes.Ldarg_2 ); + + emitter.Generator.Emit( OpCodes.Call, compareMethod ); + + emitter.Generator.Emit( OpCodes.Ldc_I4_0 ); + + emitter.Generator.Emit( OpCodes.Ceq ); + + emitter.Generator.Emit( OpCodes.Ret ); + + typeBuilder.DefineMethodOverride( + emitter.Method, + typeof( IEqualityComparer ).GetMethod( + "Equals", + new Type[] + { + typeof( object ), + typeof( object ) + } + ) + ); + } + #endregion + + #region GetHashCode + { + MethodEmitter emitter = new MethodEmitter( typeBuilder ); + + emitter.Define( + /* name */ "GetHashCode", + /* attr */ MethodAttributes.Public | MethodAttributes.Virtual, + /* return */ typeof( int ), + /* params */ new Type[] { typeof( object ) } ); + + LocalBuilder obj = emitter.CreateLocal( objectType ); + + emitter.LoadArgument( 1 ); + emitter.CastAs( objectType ); + emitter.StoreLocal( obj ); + + for ( int i = 0; i < props.Length; ++i ) + { + Property prop = props[i]; + + emitter.LoadLocal( obj ); + emitter.Chain( prop ); + + Type active = emitter.Active; + + MethodInfo getHashCode = active.GetMethod( "GetHashCode", Type.EmptyTypes ); + + if ( getHashCode == null ) + getHashCode = typeof( object ).GetMethod( "GetHashCode", Type.EmptyTypes ); + + if ( active != typeof( int ) ) + { + if ( !active.IsValueType ) + { + LocalBuilder value = emitter.AcquireTemp( active ); + + Label valueNotNull = emitter.CreateLabel(); + Label done = emitter.CreateLabel(); + + emitter.StoreLocal( value ); + emitter.LoadLocal( value ); + + emitter.BranchIfTrue( valueNotNull ); + + emitter.Load( 0 ); + emitter.Pop( typeof( int ) ); + + emitter.Branch( done ); + + emitter.MarkLabel( valueNotNull ); + + emitter.LoadLocal( value ); + emitter.Call( getHashCode ); + + emitter.ReleaseTemp( value ); + + emitter.MarkLabel( done ); + } + else + { + emitter.Call( getHashCode ); + } + } + + if ( i > 0 ) + emitter.Xor(); + } + + emitter.Return(); + + typeBuilder.DefineMethodOverride( + emitter.Method, + typeof( IEqualityComparer ).GetMethod( + "GetHashCode", + new Type[] + { + typeof( object ) + } + ) + ); + } + #endregion + #endregion + + Type comparerType = typeBuilder.CreateType(); + + return (IComparer) Activator.CreateInstance( comparerType ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Extensions/Compilers/SortCompiler.cs b/Scripts/Commands/Generic/Extensions/Compilers/SortCompiler.cs new file mode 100644 index 0000000..8c4f5be --- /dev/null +++ b/Scripts/Commands/Generic/Extensions/Compilers/SortCompiler.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; +using System.Text; +using Server; + +namespace Server.Commands.Generic +{ + public sealed class OrderInfo + { + private Property m_Property; + private int m_Order; + + public Property Property + { + get { return m_Property; } + set { m_Property = value; } + } + + public bool IsAscending + { + get { return ( m_Order > 0 ); } + set { m_Order = ( value ? +1 : -1 ); } + } + + public bool IsDescending + { + get { return ( m_Order < 0 ); } + set { m_Order = ( value ? -1 : +1 ); } + } + + public int Sign + { + get { return Math.Sign( m_Order ); } + set + { + m_Order = Math.Sign( value ); + + if ( m_Order == 0 ) + throw new InvalidOperationException( "Sign cannot be zero." ); + } + } + + public OrderInfo( Property property, bool isAscending ) + { + m_Property = property; + + this.IsAscending = isAscending; + } + } + + public static class SortCompiler + { + public static IComparer Compile( AssemblyEmitter assembly, Type objectType, OrderInfo[] orders ) + { + TypeBuilder typeBuilder = assembly.DefineType( + "__sort", + TypeAttributes.Public, + typeof( object ) + ); + + #region Constructor + { + ConstructorBuilder ctor = typeBuilder.DefineConstructor( + MethodAttributes.Public, + CallingConventions.Standard, + Type.EmptyTypes + ); + + ILGenerator il = ctor.GetILGenerator(); + + // : base() + il.Emit( OpCodes.Ldarg_0 ); + il.Emit( OpCodes.Call, typeof( object ).GetConstructor( Type.EmptyTypes ) ); + + // return; + il.Emit( OpCodes.Ret ); + } + #endregion + + #region IComparer + typeBuilder.AddInterfaceImplementation( typeof( IComparer ) ); + + MethodBuilder compareMethod; + + #region Compare + { + MethodEmitter emitter = new MethodEmitter( typeBuilder ); + + emitter.Define( + /* name */ "Compare", + /* attr */ MethodAttributes.Public | MethodAttributes.Virtual, + /* return */ typeof( int ), + /* params */ new Type[] { typeof( object ), typeof( object ) } ); + + LocalBuilder a = emitter.CreateLocal( objectType ); + LocalBuilder b = emitter.CreateLocal( objectType ); + + LocalBuilder v = emitter.CreateLocal( typeof( int ) ); + + emitter.LoadArgument( 1 ); + emitter.CastAs( objectType ); + emitter.StoreLocal( a ); + + emitter.LoadArgument( 2 ); + emitter.CastAs( objectType ); + emitter.StoreLocal( b ); + + emitter.Load( 0 ); + emitter.StoreLocal( v ); + + Label end = emitter.CreateLabel(); + + for ( int i = 0; i < orders.Length; ++i ) + { + if ( i > 0 ) + { + emitter.LoadLocal( v ); + emitter.BranchIfTrue( end ); // if ( v != 0 ) return v; + } + + OrderInfo orderInfo = orders[i]; + + Property prop = orderInfo.Property; + int sign = orderInfo.Sign; + + emitter.LoadLocal( a ); + emitter.Chain( prop ); + + bool couldCompare = + emitter.CompareTo( sign, delegate() + { + emitter.LoadLocal( b ); + emitter.Chain( prop ); + } ); + + if ( !couldCompare ) + throw new InvalidOperationException( "Property is not comparable." ); + + emitter.StoreLocal( v ); + } + + emitter.MarkLabel( end ); + + emitter.LoadLocal( v ); + emitter.Return(); + + typeBuilder.DefineMethodOverride( + emitter.Method, + typeof( IComparer ).GetMethod( + "Compare", + new Type[] + { + typeof( object ), + typeof( object ) + } + ) + ); + + compareMethod = emitter.Method; + } + #endregion + #endregion + + Type comparerType = typeBuilder.CreateType(); + + return (IComparer) Activator.CreateInstance( comparerType ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Extensions/DistinctExtension.cs b/Scripts/Commands/Generic/Extensions/DistinctExtension.cs new file mode 100644 index 0000000..396cf72 --- /dev/null +++ b/Scripts/Commands/Generic/Extensions/DistinctExtension.cs @@ -0,0 +1,89 @@ +using System; +using System.Reflection; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace Server.Commands.Generic +{ + public sealed class DistinctExtension : BaseExtension + { + public static ExtensionInfo ExtInfo = new ExtensionInfo( 30, "Distinct", -1, delegate() { return new DistinctExtension(); } ); + + public static void Initialize() + { + ExtensionInfo.Register( ExtInfo ); + } + + public override ExtensionInfo Info + { + get { return ExtInfo; } + } + + private List m_Properties; + + private IComparer m_Comparer; + + public DistinctExtension() + { + m_Properties = new List(); + } + + public override void Optimize( Mobile from, Type baseType, ref AssemblyEmitter assembly ) + { + if ( baseType == null ) + throw new Exception( "Distinct extension may only be used in combination with an object conditional." ); + + foreach ( Property prop in m_Properties ) + { + prop.BindTo( baseType, PropertyAccess.Read ); + prop.CheckAccess( from ); + } + + if ( assembly == null ) + assembly = new AssemblyEmitter( "__dynamic", false ); + + m_Comparer = DistinctCompiler.Compile( assembly, baseType, m_Properties.ToArray() ); + } + + public override void Parse( Mobile from, string[] arguments, int offset, int size ) + { + if ( size < 1 ) + throw new Exception( "Invalid distinction syntax." ); + + int end = offset + size; + + while ( offset < end ) + { + string binding = arguments[offset++]; + + m_Properties.Add( new Property( binding ) ); + } + } + + public override void Filter( ArrayList list ) + { + if ( m_Comparer == null ) + throw new InvalidOperationException( "The extension must first be optimized." ); + + ArrayList copy = new ArrayList( list ); + + copy.Sort( m_Comparer ); + + list.Clear(); + + object last = null; + + for ( int i = 0; i < copy.Count; ++i ) + { + object obj = copy[i]; + + if ( last == null || m_Comparer.Compare( obj, last ) != 0 ) + { + list.Add( obj ); + last = obj; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Extensions/LimitExtension.cs b/Scripts/Commands/Generic/Extensions/LimitExtension.cs new file mode 100644 index 0000000..9836445 --- /dev/null +++ b/Scripts/Commands/Generic/Extensions/LimitExtension.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections; +using System.Text; + +namespace Server.Commands.Generic +{ + public sealed class LimitExtension : BaseExtension + { + public static ExtensionInfo ExtInfo = new ExtensionInfo( 80, "Limit", 1, delegate() { return new LimitExtension(); } ); + + public static void Initialize() + { + ExtensionInfo.Register( ExtInfo ); + } + + public override ExtensionInfo Info + { + get { return ExtInfo; } + } + + private int m_Limit; + + public int Limit + { + get { return m_Limit; } + } + + public LimitExtension() + { + } + + public override void Parse( Mobile from, string[] arguments, int offset, int size ) + { + m_Limit = Utility.ToInt32( arguments[offset] ); + + if ( m_Limit < 0 ) + throw new Exception( "Limit cannot be less than zero." ); + } + + public override void Filter( ArrayList list ) + { + if ( list.Count > m_Limit ) + list.RemoveRange( m_Limit, list.Count - m_Limit ); + } + } +} diff --git a/Scripts/Commands/Generic/Extensions/SortExtension.cs b/Scripts/Commands/Generic/Extensions/SortExtension.cs new file mode 100644 index 0000000..713afc3 --- /dev/null +++ b/Scripts/Commands/Generic/Extensions/SortExtension.cs @@ -0,0 +1,109 @@ +using System; +using System.Reflection; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace Server.Commands.Generic +{ + public sealed class SortExtension : BaseExtension + { + public static ExtensionInfo ExtInfo = new ExtensionInfo( 40, "Order", -1, delegate() { return new SortExtension(); } ); + + public static void Initialize() + { + ExtensionInfo.Register( ExtInfo ); + } + + public override ExtensionInfo Info + { + get { return ExtInfo; } + } + + private List m_Orders; + + private IComparer m_Comparer; + + public SortExtension() + { + m_Orders = new List(); + } + + public override void Optimize( Mobile from, Type baseType, ref AssemblyEmitter assembly ) + { + if ( baseType == null ) + throw new Exception( "The ordering extension may only be used in combination with an object conditional." ); + + foreach ( OrderInfo order in m_Orders ) + { + order.Property.BindTo( baseType, PropertyAccess.Read ); + order.Property.CheckAccess( from ); + } + + if ( assembly == null ) + assembly = new AssemblyEmitter( "__dynamic", false ); + + m_Comparer = SortCompiler.Compile( assembly, baseType, m_Orders.ToArray() ); + } + + public override void Parse( Mobile from, string[] arguments, int offset, int size ) + { + if ( size < 1 ) + throw new Exception( "Invalid ordering syntax." ); + + if ( Insensitive.Equals( arguments[offset], "by" ) ) + { + ++offset; + --size; + + if ( size < 1 ) + throw new Exception( "Invalid ordering syntax." ); + } + + int end = offset + size; + + while ( offset < end ) + { + string binding = arguments[offset++]; + + bool isAscending = true; + + if ( offset < end ) + { + string next = arguments[offset]; + + switch ( next.ToLower() ) + { + case "+": + case "up": + case "asc": + case "ascending": + isAscending = true; + ++offset; + break; + + case "-": + case "down": + case "desc": + case "descending": + isAscending = false; + ++offset; + break; + } + } + + Property property = new Property( binding ); + + m_Orders.Add( new OrderInfo( property, isAscending ) ); + } + } + + public override void Filter( ArrayList list ) + { + if ( m_Comparer == null ) + throw new InvalidOperationException( "The extension must first be optimized." ); + + list.Sort( m_Comparer ); + } + } +} diff --git a/Scripts/Commands/Generic/Extensions/WhereExtension.cs b/Scripts/Commands/Generic/Extensions/WhereExtension.cs new file mode 100644 index 0000000..3d9be7d --- /dev/null +++ b/Scripts/Commands/Generic/Extensions/WhereExtension.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using Server.Commands; + +namespace Server.Commands.Generic +{ + public sealed class WhereExtension : BaseExtension + { + public static ExtensionInfo ExtInfo = new ExtensionInfo( 20, "Where", -1, delegate() { return new WhereExtension(); } ); + + public static void Initialize() + { + ExtensionInfo.Register( ExtInfo ); + } + + public override ExtensionInfo Info + { + get { return ExtInfo; } + } + + private ObjectConditional m_Conditional; + + public ObjectConditional Conditional + { + get { return m_Conditional; } + } + + public WhereExtension() + { + } + + public override void Optimize( Mobile from, Type baseType, ref AssemblyEmitter assembly ) + { + if ( baseType == null ) + throw new InvalidOperationException( "Insanity." ); + + m_Conditional.Compile( ref assembly ); + } + + public override void Parse( Mobile from, string[] arguments, int offset, int size ) + { + if ( size < 1 ) + throw new Exception( "Invalid condition syntax." ); + + m_Conditional = ObjectConditional.ParseDirect( from, arguments, offset, size ); + } + + public override bool IsValid( object obj ) + { + return m_Conditional.CheckCondition( obj ); + } + } +} diff --git a/Scripts/Commands/Generic/Implementors/AreaCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/AreaCommandImplementor.cs new file mode 100644 index 0000000..47a48a3 --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/AreaCommandImplementor.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; + +namespace Server.Commands.Generic +{ + public class AreaCommandImplementor : BaseCommandImplementor + { + public AreaCommandImplementor() + { + Accessors = new string[]{ "Area", "Group" }; + SupportRequirement = CommandSupport.Area; + SupportsConditionals = true; + AccessLevel = AccessLevel.GameMaster; + Usage = "Area [condition]"; + Description = "Invokes the command on all appropriate objects in a targeted area. Optional condition arguments can further restrict the set of objects."; + } + + public override void Process( Mobile from, BaseCommand command, string[] args ) + { + BoundingBoxPicker.Begin( from, new BoundingBoxCallback( OnTarget ), new object[]{ command, args } ); + } + + public void OnTarget( Mobile from, Map map, Point3D start, Point3D end, object state ) + { + try + { + object[] states = (object[])state; + BaseCommand command = (BaseCommand)states[0]; + string[] args = (string[])states[1]; + + Rectangle2D rect = new Rectangle2D( start.X, start.Y, end.X - start.X + 1, end.Y - start.Y + 1 ); + + Extensions ext = Extensions.Parse( from, ref args ); + + bool items, mobiles; + + if ( !CheckObjectTypes( command, ext, out items, out mobiles ) ) + return; + + IPooledEnumerable eable; + + if ( items && mobiles ) + eable = map.GetObjectsInBounds( rect ); + else if ( items ) + eable = map.GetItemsInBounds( rect ); + else if ( mobiles ) + eable = map.GetMobilesInBounds( rect ); + else + return; + + ArrayList objs = new ArrayList(); + + foreach ( object obj in eable ) + { + if ( mobiles && obj is Mobile && !BaseCommand.IsAccessible( from, obj ) ) + continue; + + if ( ext.IsValid( obj ) ) + objs.Add( obj ); + } + + eable.Free(); + + ext.Filter( objs ); + + RunCommand( from, objs, command, args ); + } + catch ( Exception ex ) + { + from.SendMessage( ex.Message ); + } + } + + public void OnTarget( Mobile from, object targeted, object state ) + { + try + { + object[] states = (object[])state; + BaseCommand command = (BaseCommand)states[0]; + string[] args = (string[])states[1]; + + switch ( command.ObjectTypes ) + { + case ObjectTypes.Both: + { + if ( !(targeted is Item) && !(targeted is Mobile) ) + { + from.SendMessage( "This command does not work on that." ); + return; + } + + break; + } + case ObjectTypes.Items: + { + if ( !(targeted is Item) ) + { + from.SendMessage( "This command only works on items." ); + return; + } + + break; + } + case ObjectTypes.Mobiles: + { + if ( !(targeted is Mobile) ) + { + from.SendMessage( "This command only works on mobiles." ); + return; + } + + break; + } + } + + RunCommand( from, targeted, command, args ); + + from.BeginTarget( -1, command.ObjectTypes == ObjectTypes.All, TargetFlags.None, new TargetStateCallback( OnTarget ), new object[]{ command, args } ); + } + catch ( Exception ex ) + { + from.SendMessage( ex.Message ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/BaseCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/BaseCommandImplementor.cs new file mode 100644 index 0000000..113f859 --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/BaseCommandImplementor.cs @@ -0,0 +1,338 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using Server; + +namespace Server.Commands.Generic +{ + [Flags] + public enum CommandSupport + { + Single = 0x0001, + Global = 0x0002, + Online = 0x0004, + Multi = 0x0008, + Area = 0x0010, + Self = 0x0020, + Region = 0x0040, + Contained = 0x0080, + + All = Single | Global | Online | Multi | Area | Self | Region | Contained, + AllMobiles = All & ~Contained, + AllNPCs = All & ~(Online | Self | Contained), + AllItems = All & ~(Online | Self | Region), + + Simple = Single | Multi, + Complex = Global | Online | Area | Region | Contained + } + + public abstract class BaseCommandImplementor + { + public static void RegisterImplementors() + { + Register( new RegionCommandImplementor() ); + Register( new GlobalCommandImplementor() ); + Register( new OnlineCommandImplementor() ); + Register( new SingleCommandImplementor() ); + Register( new SerialCommandImplementor() ); + Register( new MultiCommandImplementor() ); + Register( new AreaCommandImplementor() ); + Register( new SelfCommandImplementor() ); + Register( new ContainedCommandImplementor() ); + } + + private string[] m_Accessors; + private AccessLevel m_AccessLevel; + private CommandSupport m_SupportRequirement; + private Dictionary m_Commands; + private string m_Usage; + private string m_Description; + private bool m_SupportsConditionals; + + public bool SupportsConditionals + { + get{ return m_SupportsConditionals; } + set{ m_SupportsConditionals = value; } + } + + public string[] Accessors + { + get{ return m_Accessors; } + set{ m_Accessors = value; } + } + + public string Usage + { + get{ return m_Usage; } + set{ m_Usage = value; } + } + + public string Description + { + get{ return m_Description; } + set{ m_Description = value; } + } + + public AccessLevel AccessLevel + { + get{ return m_AccessLevel; } + set{ m_AccessLevel = value; } + } + + public CommandSupport SupportRequirement + { + get{ return m_SupportRequirement; } + set{ m_SupportRequirement = value; } + } + + public Dictionary Commands + { + get{ return m_Commands; } + } + + public BaseCommandImplementor() + { + m_Commands = new Dictionary( StringComparer.OrdinalIgnoreCase ); + } + + public virtual void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj ) + { + obj = null; + } + + public virtual void Register( BaseCommand command ) + { + for ( int i = 0; i < command.Commands.Length; ++i ) + m_Commands[command.Commands[i]] = command; + } + + public bool CheckObjectTypes( BaseCommand command, Extensions ext, out bool items, out bool mobiles ) + { + items = mobiles = false; + + ObjectConditional cond = ObjectConditional.Empty; + + foreach ( BaseExtension check in ext ) + { + if ( check is WhereExtension ) + { + cond = ( check as WhereExtension ).Conditional; + + break; + } + } + + bool condIsItem = cond.IsItem; + bool condIsMobile = cond.IsMobile; + + switch ( command.ObjectTypes ) + { + case ObjectTypes.All: + case ObjectTypes.Both: + { + if ( condIsItem ) + items = true; + + if ( condIsMobile ) + mobiles = true; + + break; + } + case ObjectTypes.Items: + { + if ( condIsItem ) + { + items = true; + } + else if ( condIsMobile ) + { + command.LogFailure( "You may not use a mobile type condition for this command." ); + return false; + } + + break; + } + case ObjectTypes.Mobiles: + { + if ( condIsMobile ) + { + mobiles = true; + } + else if ( condIsItem ) + { + command.LogFailure( "You may not use an item type condition for this command." ); + return false; + } + + break; + } + } + + return true; + } + + public void RunCommand( Mobile from, BaseCommand command, string[] args ) + { + try + { + object obj = null; + + Compile( from, command, ref args, ref obj ); + + RunCommand( from, obj, command, args ); + } + catch ( Exception ex ) + { + from.SendMessage( ex.Message ); + } + } + + public string GenerateArgString( string[] args ) + { + if ( args.Length == 0 ) + return ""; + + // NOTE: this does not preserve the case where quotation marks are used on a single word + + StringBuilder sb = new StringBuilder(); + + for ( int i = 0; i < args.Length; ++i ) + { + if ( i > 0 ) + sb.Append( ' ' ); + + if ( args[i].IndexOf( ' ' ) >= 0 ) + { + sb.Append( '"' ); + sb.Append( args[i] ); + sb.Append( '"' ); + } + else + { + sb.Append( args[i] ); + } + } + + return sb.ToString(); + } + + public void RunCommand( Mobile from, object obj, BaseCommand command, string[] args ) + { + // try + // { + CommandEventArgs e = new CommandEventArgs( from, command.Commands[0], GenerateArgString( args ), args ); + + if ( !command.ValidateArgs( this, e ) ) + return; + + bool flushToLog = false; + + if ( obj is ArrayList ) + { + ArrayList list = (ArrayList)obj; + + if ( list.Count > 20 ) + CommandLogging.Enabled = false; + else if ( list.Count == 0 ) + command.LogFailure( "Nothing was found to use this command on." ); + + command.ExecuteList( e, list ); + + if ( list.Count > 20 ) + { + flushToLog = true; + CommandLogging.Enabled = true; + } + } + else if ( obj != null ) + { + if ( command.ListOptimized ) + { + ArrayList list = new ArrayList(); + list.Add( obj ); + command.ExecuteList( e, list ); + } + else + { + command.Execute( e, obj ); + } + } + + command.Flush( from, flushToLog ); + // } + // catch ( Exception ex ) + // { + // from.SendMessage( ex.Message ); + // } + } + + public virtual void Process( Mobile from, BaseCommand command, string[] args ) + { + RunCommand( from, command, args ); + } + + public virtual void Execute( CommandEventArgs e ) + { + if ( e.Length >= 1 ) + { + BaseCommand command = null; + m_Commands.TryGetValue( e.GetString( 0 ), out command ); + + if ( command == null ) + { + e.Mobile.SendMessage( "That is either an invalid command name or one that does not support this modifier." ); + } + else if ( e.Mobile.AccessLevel < command.AccessLevel ) + { + e.Mobile.SendMessage( "You do not have access to that command." ); + } + else + { + string[] oldArgs = e.Arguments; + string[] args = new string[oldArgs.Length - 1]; + + for ( int i = 0; i < args.Length; ++i ) + args[i] = oldArgs[i + 1]; + + Process( e.Mobile, command, args ); + } + } + else + { + e.Mobile.SendMessage( "You must supply a command name." ); + } + } + + public void Register() + { + if ( m_Accessors == null ) + return; + + for ( int i = 0; i < m_Accessors.Length; ++i ) + CommandSystem.Register( m_Accessors[i], m_AccessLevel, new CommandEventHandler( Execute ) ); + } + + public static void Register( BaseCommandImplementor impl ) + { + m_Implementors.Add( impl ); + impl.Register(); + } + + private static List m_Implementors; + + public static List Implementors + { + get + { + if ( m_Implementors == null ) + { + m_Implementors = new List(); + RegisterImplementors(); + } + + return m_Implementors; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/ContainedCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/ContainedCommandImplementor.cs new file mode 100644 index 0000000..3e979f8 --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/ContainedCommandImplementor.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using Server; +using Server.Items; +using Server.Targeting; + +namespace Server.Commands.Generic +{ + public class ContainedCommandImplementor : BaseCommandImplementor + { + public ContainedCommandImplementor() + { + Accessors = new string[]{ "Contained" }; + SupportRequirement = CommandSupport.Contained; + AccessLevel = AccessLevel.GameMaster; + Usage = "Contained [condition]"; + Description = "Invokes the command on all child items in a targeted container. Optional condition arguments can further restrict the set of objects."; + } + + public override void Process( Mobile from, BaseCommand command, string[] args ) + { + if ( command.ValidateArgs( this, new CommandEventArgs( from, command.Commands[0], GenerateArgString( args ), args ) ) ) + from.BeginTarget( -1, command.ObjectTypes == ObjectTypes.All, TargetFlags.None, new TargetStateCallback( OnTarget ), new object[]{ command, args } ); + } + + public void OnTarget( Mobile from, object targeted, object state ) + { + if ( !BaseCommand.IsAccessible( from, targeted ) ) + { + from.SendMessage( "That is not accessible." ); + return; + } + + object[] states = (object[])state; + BaseCommand command = (BaseCommand)states[0]; + string[] args = (string[])states[1]; + + if ( command.ObjectTypes == ObjectTypes.Mobiles ) + return; // sanity check + + if ( !(targeted is Container) ) + { + from.SendMessage( "That is not a container." ); + } + else + { + try + { + Extensions ext = Extensions.Parse( from, ref args ); + + bool items, mobiles; + + if ( !CheckObjectTypes( command, ext, out items, out mobiles ) ) + return; + + if ( !items ) + { + from.SendMessage( "This command only works on items." ); + return; + } + + Container cont = (Container)targeted; + + Item[] found = cont.FindItemsByType( typeof( Item ), true ); + + ArrayList list = new ArrayList(); + + for ( int i = 0; i < found.Length; ++i ) + { + if ( ext.IsValid( found[i] ) ) + list.Add( found[i] ); + } + + ext.Filter( list ); + + RunCommand( from, list, command, args ); + } + catch ( Exception e ) + { + from.SendMessage( e.Message ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/GlobalCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/GlobalCommandImplementor.cs new file mode 100644 index 0000000..b91ef5f --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/GlobalCommandImplementor.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Commands.Generic +{ + public class GlobalCommandImplementor : BaseCommandImplementor + { + public GlobalCommandImplementor() + { + Accessors = new string[]{ "Global" }; + SupportRequirement = CommandSupport.Global; + SupportsConditionals = true; + AccessLevel = AccessLevel.Administrator; + Usage = "Global [condition]"; + Description = "Invokes the command on all appropriate objects in the world. Optional condition arguments can further restrict the set of objects."; + } + + public override void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj ) + { + try + { + Extensions ext = Extensions.Parse( from, ref args ); + + bool items, mobiles; + + if ( !CheckObjectTypes( command, ext, out items, out mobiles ) ) + return; + + ArrayList list = new ArrayList(); + + if ( items ) + { + foreach ( Item item in World.Items.Values ) + { + if ( ext.IsValid( item ) ) + list.Add( item ); + } + } + + if ( mobiles ) + { + foreach ( Mobile mob in World.Mobiles.Values ) + { + if ( ext.IsValid( mob ) ) + list.Add( mob ); + } + } + + ext.Filter( list ); + + obj = list; + } + catch ( Exception ex ) + { + from.SendMessage( ex.Message ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/MultiCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/MultiCommandImplementor.cs new file mode 100644 index 0000000..4a44c2f --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/MultiCommandImplementor.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; + +namespace Server.Commands.Generic +{ + public class MultiCommandImplementor : BaseCommandImplementor + { + public MultiCommandImplementor() + { + Accessors = new string[]{ "Multi", "m" }; + SupportRequirement = CommandSupport.Multi; + AccessLevel = AccessLevel.Counselor; + Usage = "Multi "; + Description = "Invokes the command on multiple targeted objects."; + } + + public override void Process( Mobile from, BaseCommand command, string[] args ) + { + if ( command.ValidateArgs( this, new CommandEventArgs( from, command.Commands[0], GenerateArgString( args ), args ) ) ) + from.BeginTarget( -1, command.ObjectTypes == ObjectTypes.All, TargetFlags.None, new TargetStateCallback( OnTarget ), new object[]{ command, args } ); + } + + public void OnTarget( Mobile from, object targeted, object state ) + { + object[] states = (object[])state; + BaseCommand command = (BaseCommand)states[0]; + string[] args = (string[])states[1]; + + if ( !BaseCommand.IsAccessible( from, targeted ) ) + { + from.SendMessage( "That is not accessible." ); + from.BeginTarget( -1, command.ObjectTypes == ObjectTypes.All, TargetFlags.None, new TargetStateCallback( OnTarget ), new object[]{ command, args } ); + return; + } + + switch ( command.ObjectTypes ) + { + case ObjectTypes.Both: + { + if ( !(targeted is Item) && !(targeted is Mobile) ) + { + from.SendMessage( "This command does not work on that." ); + return; + } + + break; + } + case ObjectTypes.Items: + { + if ( !(targeted is Item) ) + { + from.SendMessage( "This command only works on items." ); + return; + } + + break; + } + case ObjectTypes.Mobiles: + { + if ( !(targeted is Mobile) ) + { + from.SendMessage( "This command only works on mobiles." ); + return; + } + + break; + } + } + + RunCommand( from, targeted, command, args ); + + from.BeginTarget( -1, command.ObjectTypes == ObjectTypes.All, TargetFlags.None, new TargetStateCallback( OnTarget ), new object[]{ command, args } ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/ObjectConditional.cs b/Scripts/Commands/Generic/Implementors/ObjectConditional.cs new file mode 100644 index 0000000..6a0959e --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/ObjectConditional.cs @@ -0,0 +1,266 @@ +using System; +using System.Reflection; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Targeting; +using CPA = Server.CommandPropertyAttribute; + +namespace Server.Commands.Generic +{ + public sealed class ObjectConditional + { + private static readonly Type typeofItem = typeof( Item ); + private static readonly Type typeofMobile = typeof( Mobile ); + + private Type m_ObjectType; + + private ICondition[][] m_Conditions; + + private IConditional[] m_Conditionals; + + public Type Type + { + get { return m_ObjectType; } + } + + public bool IsItem + { + get { return ( m_ObjectType == null || m_ObjectType == typeofItem || m_ObjectType.IsSubclassOf( typeofItem ) ); } + } + + public bool IsMobile + { + get { return ( m_ObjectType == null || m_ObjectType == typeofMobile || m_ObjectType.IsSubclassOf( typeofMobile ) ); } + } + + public static readonly ObjectConditional Empty = new ObjectConditional( null, null ); + + public bool HasCompiled + { + get { return ( m_Conditionals != null ); } + } + + public void Compile( ref AssemblyEmitter emitter ) + { + if ( emitter == null ) + emitter = new AssemblyEmitter( "__dynamic", false ); + + m_Conditionals = new IConditional[m_Conditions.Length]; + + for ( int i = 0; i < m_Conditionals.Length; ++i ) + m_Conditionals[i] = ConditionalCompiler.Compile( emitter, m_ObjectType, m_Conditions[i], i ); + } + + public bool CheckCondition( object obj ) + { + if ( m_ObjectType == null ) + return true; // null type means no condition + + if ( !HasCompiled ) + { + AssemblyEmitter emitter = null; + + Compile( ref emitter ); + } + + for ( int i = 0; i < m_Conditionals.Length; ++i ) + { + if ( m_Conditionals[i].Verify( obj ) ) + return true; + } + + return false; // all conditions false + } + + public static ObjectConditional Parse( Mobile from, ref string[] args ) + { + string[] conditionArgs = null; + + for ( int i = 0; i < args.Length; ++i ) + { + if ( Insensitive.Equals( args[i], "where" ) ) + { + string[] origArgs = args; + + args = new string[i]; + + for ( int j = 0; j < args.Length; ++j ) + args[j] = origArgs[j]; + + conditionArgs = new string[origArgs.Length - i - 1]; + + for ( int j = 0; j < conditionArgs.Length; ++j ) + conditionArgs[j] = origArgs[i + j + 1]; + + break; + } + } + + return ParseDirect( from, conditionArgs, 0, conditionArgs.Length ); + } + + public static ObjectConditional ParseDirect( Mobile from, string[] args, int offset, int size ) + { + if ( args == null || size == 0 ) + return ObjectConditional.Empty; + + int index = 0; + + Type objectType = ScriptCompiler.FindTypeByName( args[offset + index], true ); + + if ( objectType == null ) + throw new Exception( String.Format( "No type with that name ({0}) was found.", args[offset + index] ) ); + + ++index; + + List conditions = new List(); + List current = new List(); + + current.Add( TypeCondition.Default ); + + while ( index < size ) + { + string cur = args[offset + index]; + + bool inverse = false; + + if ( Insensitive.Equals( cur, "not" ) || cur == "!" ) + { + inverse = true; + ++index; + + if ( index >= size ) + throw new Exception( "Improperly formatted object conditional." ); + } + else if ( Insensitive.Equals( cur, "or" ) || cur == "||" ) + { + if ( conditions.Count > 1 ) + { + conditions.Add( current.ToArray() ); + + current.Clear(); + current.Add( TypeCondition.Default ); + } + + ++index; + + continue; + } + + string binding = args[offset + index]; + index++; + + if ( index >= size ) + throw new Exception( "Improperly formatted object conditional." ); + + string oper = args[offset + index]; + index++; + + if ( index >= size ) + throw new Exception( "Improperly formatted object conditional." ); + + string val = args[offset + index]; + index++; + + Property prop = new Property( binding ); + + prop.BindTo( objectType, PropertyAccess.Read ); + prop.CheckAccess( from ); + + ICondition condition = null; + + switch ( oper ) + { + #region Equality + case "=": + case "==": + case "is": + condition = new ComparisonCondition( prop, inverse, ComparisonOperator.Equal, val ); + break; + + case "!=": + condition = new ComparisonCondition( prop, inverse, ComparisonOperator.NotEqual, val ); + break; + #endregion + + #region Relational + case ">": + condition = new ComparisonCondition( prop, inverse, ComparisonOperator.Greater, val ); + break; + + case "<": + condition = new ComparisonCondition( prop, inverse, ComparisonOperator.Lesser, val ); + break; + + case ">=": + condition = new ComparisonCondition( prop, inverse, ComparisonOperator.GreaterEqual, val ); + break; + + case "<=": + condition = new ComparisonCondition( prop, inverse, ComparisonOperator.LesserEqual, val ); + break; + #endregion + + #region Strings + case "==~": + case "~==": + case "=~": + case "~=": + case "is~": + case "~is": + condition = new StringCondition( prop, inverse, StringOperator.Equal, val, true ); + break; + + case "!=~": + case "~!=": + condition = new StringCondition( prop, inverse, StringOperator.NotEqual, val, true ); + break; + + case "starts": + condition = new StringCondition( prop, inverse, StringOperator.StartsWith, val, false ); + break; + + case "starts~": + case "~starts": + condition = new StringCondition( prop, inverse, StringOperator.StartsWith, val, true ); + break; + + case "ends": + condition = new StringCondition( prop, inverse, StringOperator.EndsWith, val, false ); + break; + + case "ends~": + case "~ends": + condition = new StringCondition( prop, inverse, StringOperator.EndsWith, val, true ); + break; + + case "contains": + condition = new StringCondition( prop, inverse, StringOperator.Contains, val, false ); + break; + + case "contains~": + case "~contains": + condition = new StringCondition( prop, inverse, StringOperator.Contains, val, true ); + break; + #endregion + } + + if ( condition == null ) + throw new InvalidOperationException( String.Format( "Unrecognized operator (\"{0}\").", oper ) ); + + current.Add( condition ); + } + + conditions.Add( current.ToArray() ); + + return new ObjectConditional( objectType, conditions.ToArray() ); + } + + public ObjectConditional( Type objectType, ICondition[][] conditions ) + { + m_ObjectType = objectType; + m_Conditions = conditions; + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/OnlineCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/OnlineCommandImplementor.cs new file mode 100644 index 0000000..92429b5 --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/OnlineCommandImplementor.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Network; + +namespace Server.Commands.Generic +{ + public class OnlineCommandImplementor : BaseCommandImplementor + { + public OnlineCommandImplementor() + { + Accessors = new string[]{ "Online" }; + SupportRequirement = CommandSupport.Online; + SupportsConditionals = true; + AccessLevel = AccessLevel.GameMaster; + Usage = "Online [condition]"; + Description = "Invokes the command on all mobiles that are currently logged in. Optional condition arguments can further restrict the set of objects."; + } + + public override void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj ) + { + try + { + Extensions ext = Extensions.Parse( from, ref args ); + + bool items, mobiles; + + if ( !CheckObjectTypes( command, ext, out items, out mobiles ) ) + return; + + if ( !mobiles ) // sanity check + { + command.LogFailure( "This command does not support mobiles." ); + return; + } + + ArrayList list = new ArrayList(); + + List states = NetState.Instances; + + for ( int i = 0; i < states.Count; ++i ) + { + NetState ns = states[i]; + Mobile mob = ns.Mobile; + + if ( mob == null ) + continue; + + if( !BaseCommand.IsAccessible( from, mob ) ) + continue; + + if ( ext.IsValid( mob ) ) + list.Add( mob ); + } + + ext.Filter( list ); + + obj = list; + } + catch ( Exception ex ) + { + from.SendMessage( ex.Message ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/RegionCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/RegionCommandImplementor.cs new file mode 100644 index 0000000..4fae4f0 --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/RegionCommandImplementor.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Commands.Generic +{ + public class RegionCommandImplementor : BaseCommandImplementor + { + public RegionCommandImplementor() + { + Accessors = new string[]{ "Region" }; + SupportRequirement = CommandSupport.Region; + SupportsConditionals = true; + AccessLevel = AccessLevel.GameMaster; + Usage = "Region [condition]"; + Description = "Invokes the command on all appropriate mobiles in your current region. Optional condition arguments can further restrict the set of objects."; + } + + public override void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj ) + { + try + { + Extensions ext = Extensions.Parse( from, ref args ); + + bool items, mobiles; + + if ( !CheckObjectTypes( command, ext, out items, out mobiles ) ) + return; + + Region reg = from.Region; + + ArrayList list = new ArrayList(); + + if ( mobiles ) + { + foreach ( Mobile mob in reg.GetMobiles() ) + { + if( !BaseCommand.IsAccessible( from, mob ) ) + continue; + + if ( ext.IsValid( mob ) ) + list.Add( mob ); + } + } + else + { + command.LogFailure( "This command does not support items." ); + return; + } + + ext.Filter( list ); + + obj = list; + } + catch ( Exception ex ) + { + from.SendMessage( ex.Message ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/SelfCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/SelfCommandImplementor.cs new file mode 100644 index 0000000..d052f8b --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/SelfCommandImplementor.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; + +namespace Server.Commands.Generic +{ + public class SelfCommandImplementor : BaseCommandImplementor + { + public SelfCommandImplementor() + { + Accessors = new string[]{ "Self" }; + SupportRequirement = CommandSupport.Self; + AccessLevel = AccessLevel.Counselor; + Usage = "Self "; + Description = "Invokes the command on the commanding player."; + } + + public override void Compile( Mobile from, BaseCommand command, ref string[] args, ref object obj ) + { + if ( command.ObjectTypes == ObjectTypes.Items ) + return; // sanity check + + obj = from; + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/SerialCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/SerialCommandImplementor.cs new file mode 100644 index 0000000..da8aa4d --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/SerialCommandImplementor.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; + +namespace Server.Commands.Generic +{ + public class SerialCommandImplementor : BaseCommandImplementor + { + public SerialCommandImplementor() + { + Accessors = new string[]{ "Serial" }; + SupportRequirement = CommandSupport.Single; + AccessLevel = AccessLevel.Counselor; + Usage = "Serial "; + Description = "Invokes the command on a single object by serial."; + } + + public override void Execute( CommandEventArgs e ) + { + if ( e.Length >= 2 ) + { + Serial serial = e.GetInt32( 0 ); + + object obj = null; + + if ( serial.IsItem ) + obj = World.FindItem( serial ); + else if ( serial.IsMobile ) + obj = World.FindMobile( serial ); + + if ( obj == null ) + { + e.Mobile.SendMessage( "That is not a valid serial." ); + } + else + { + BaseCommand command = null; + Commands.TryGetValue( e.GetString( 1 ), out command ); + + if ( command == null ) + { + e.Mobile.SendMessage( "That is either an invalid command name or one that does not support this modifier." ); + } + else if ( e.Mobile.AccessLevel < command.AccessLevel ) + { + e.Mobile.SendMessage( "You do not have access to that command." ); + } + else + { + string[] oldArgs = e.Arguments; + string[] args = new string[oldArgs.Length - 2]; + + for ( int i = 0; i < args.Length; ++i ) + args[i] = oldArgs[i + 2]; + + RunCommand( e.Mobile, obj, command, args ); + } + } + } + else + { + e.Mobile.SendMessage( "You must supply an object serial and a command name." ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Generic/Implementors/SingleCommandImplementor.cs b/Scripts/Commands/Generic/Implementors/SingleCommandImplementor.cs new file mode 100644 index 0000000..1f01bce --- /dev/null +++ b/Scripts/Commands/Generic/Implementors/SingleCommandImplementor.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; + +namespace Server.Commands.Generic +{ + public class SingleCommandImplementor : BaseCommandImplementor + { + public SingleCommandImplementor() + { + Accessors = new string[]{ "Single" }; + SupportRequirement = CommandSupport.Single; + AccessLevel = AccessLevel.Counselor; + Usage = "Single "; + Description = "Invokes the command on a single targeted object. This is the same as just invoking the command directly."; + } + + public override void Register( BaseCommand command ) + { + base.Register( command ); + + for ( int i = 0; i < command.Commands.Length; ++i ) + CommandSystem.Register( command.Commands[i], command.AccessLevel, new CommandEventHandler( Redirect ) ); + } + + public void Redirect( CommandEventArgs e ) + { + BaseCommand command = null; + + Commands.TryGetValue( e.Command, out command ); + + if ( command == null ) + e.Mobile.SendMessage( "That is either an invalid command name or one that does not support this modifier." ); + else if ( e.Mobile.AccessLevel < command.AccessLevel ) + e.Mobile.SendMessage( "You do not have access to that command." ); + else if ( command.ValidateArgs( this, e ) ) + Process( e.Mobile, command, e.Arguments ); + } + + public override void Process( Mobile from, BaseCommand command, string[] args ) + { + if ( command.ValidateArgs( this, new CommandEventArgs( from, command.Commands[0], GenerateArgString( args ), args ) ) ) + from.BeginTarget( -1, command.ObjectTypes == ObjectTypes.All, TargetFlags.None, new TargetStateCallback( OnTarget ), new object[]{ command, args } ); + } + + public void OnTarget( Mobile from, object targeted, object state ) + { + if ( !BaseCommand.IsAccessible( from, targeted ) ) + { + from.SendMessage( "That is not accessible." ); + return; + } + + object[] states = (object[])state; + BaseCommand command = (BaseCommand)states[0]; + string[] args = (string[])states[1]; + + switch ( command.ObjectTypes ) + { + case ObjectTypes.Both: + { + if ( !(targeted is Item) && !(targeted is Mobile) ) + { + from.SendMessage( "This command does not work on that." ); + return; + } + + break; + } + case ObjectTypes.Items: + { + if ( !(targeted is Item) ) + { + from.SendMessage( "This command only works on items." ); + return; + } + + break; + } + case ObjectTypes.Mobiles: + { + if ( !(targeted is Mobile) ) + { + from.SendMessage( "This command only works on mobiles." ); + return; + } + + break; + } + } + + RunCommand( from, targeted, command, args ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Handlers.cs b/Scripts/Commands/Handlers.cs new file mode 100644 index 0000000..9a15e0f --- /dev/null +++ b/Scripts/Commands/Handlers.cs @@ -0,0 +1,1018 @@ +using System; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using Server; +using Server.Accounting; +using Server.Mobiles; +using Server.Items; +using Server.Menus; +using Server.Menus.Questions; +using Server.Menus.ItemLists; +using Server.Network; +using Server.Spells; +using Server.Targeting; +using Server.Targets; +using Server.Gumps; +using Server.Commands.Generic; + +namespace Server.Commands +{ + public class CommandHandlers + { + public static void Initialize() + { + CommandSystem.Prefix = "["; + + Register( "Go", AccessLevel.Counselor, new CommandEventHandler( Go_OnCommand ) ); + + Register( "DropHolding", AccessLevel.Counselor, new CommandEventHandler( DropHolding_OnCommand ) ); + + Register( "GetFollowers", AccessLevel.GameMaster, new CommandEventHandler( GetFollowers_OnCommand ) ); + + Register( "ClearFacet", AccessLevel.Administrator, new CommandEventHandler( ClearFacet_OnCommand ) ); + + Register( "Where", AccessLevel.Counselor, new CommandEventHandler( Where_OnCommand ) ); + + Register( "AutoPageNotify", AccessLevel.Counselor, new CommandEventHandler( APN_OnCommand ) ); + Register( "APN", AccessLevel.Counselor, new CommandEventHandler( APN_OnCommand ) ); + + Register( "Animate", AccessLevel.GameMaster, new CommandEventHandler( Animate_OnCommand ) ); + + Register( "Cast", AccessLevel.Counselor, new CommandEventHandler( Cast_OnCommand ) ); + + Register( "Stuck", AccessLevel.Counselor, new CommandEventHandler( Stuck_OnCommand ) ); + + Register( "Help", AccessLevel.Player, new CommandEventHandler( Help_OnCommand ) ); + + Register( "Save", AccessLevel.Administrator, new CommandEventHandler( Save_OnCommand ) ); + Register( "BackgroundSave", AccessLevel.Administrator, new CommandEventHandler( BackgroundSave_OnCommand ) ); + Register( "BGSave", AccessLevel.Administrator, new CommandEventHandler( BackgroundSave_OnCommand ) ); + Register( "SaveBG", AccessLevel.Administrator, new CommandEventHandler( BackgroundSave_OnCommand ) ); + + Register( "Move", AccessLevel.GameMaster, new CommandEventHandler( Move_OnCommand ) ); + Register( "Client", AccessLevel.Counselor, new CommandEventHandler( Client_OnCommand ) ); + + Register( "SMsg", AccessLevel.Counselor, new CommandEventHandler( StaffMessage_OnCommand ) ); + Register( "SM", AccessLevel.Counselor, new CommandEventHandler( StaffMessage_OnCommand ) ); + Register( "S", AccessLevel.Counselor, new CommandEventHandler( StaffMessage_OnCommand ) ); + + Register( "BCast", AccessLevel.GameMaster, new CommandEventHandler( BroadcastMessage_OnCommand ) ); + Register( "BC", AccessLevel.GameMaster, new CommandEventHandler( BroadcastMessage_OnCommand ) ); + Register( "B", AccessLevel.GameMaster, new CommandEventHandler( BroadcastMessage_OnCommand ) ); + + Register( "Inn", AccessLevel.GameMaster, new CommandEventHandler( Inn_OnCommand ) ); + + Register( "Echo", AccessLevel.Counselor, new CommandEventHandler( Echo_OnCommand ) ); + + Register( "Sound", AccessLevel.GameMaster, new CommandEventHandler( Sound_OnCommand ) ); + + Register( "ViewEquip", AccessLevel.GameMaster, new CommandEventHandler( ViewEquip_OnCommand ) ); + + Register( "Light", AccessLevel.Counselor, new CommandEventHandler( Light_OnCommand ) ); + Register( "Stats", AccessLevel.Counselor, new CommandEventHandler( Stats_OnCommand ) ); + + Register( "ReplaceInnkeepers", AccessLevel.Administrator, new CommandEventHandler( ReplaceInnkeepers_OnCommand ) ); + + Register( "SpeedBoost", AccessLevel.Counselor, new CommandEventHandler( SpeedBoost_OnCommand ) ); + } + + public static void Register( string command, AccessLevel access, CommandEventHandler handler ) + { + CommandSystem.Register( command, access, handler ); + } + + [Usage( "SpeedBoost [true|false]" )] + [Description( "Enables a speed boost for the invoker. Disable with paramaters." )] + private static void SpeedBoost_OnCommand( CommandEventArgs e ) + { + Mobile from = e.Mobile; + + if ( e.Length <= 1 ) + { + if ( e.Length == 1 && !e.GetBoolean( 0 ) ) + { + from.Send( SpeedControl.Disable ); + from.SendMessage( "Speed boost has been disabled." ); + } + else + { + from.Send( SpeedControl.MountSpeed ); + from.SendMessage( "Speed boost has been enabled." ); + } + } + else + { + from.SendMessage( "Format: SpeedBoost [true|false]" ); + } + } + + [Usage( "Where" )] + [Description( "Tells the commanding player his coordinates, region, and facet." )] + public static void Where_OnCommand( CommandEventArgs e ) + { + Mobile from = e.Mobile; + Map map = from.Map; + + from.SendMessage( "You are at {0} {1} {2} in {3}.", from.X, from.Y, from.Z, map ); + + if ( map != null ) + { + Region reg = from.Region; + + if ( !reg.IsDefault ) + { + StringBuilder builder = new StringBuilder(); + + builder.Append( reg.ToString() ); + reg = reg.Parent; + + while ( reg != null ) + { + builder.Append( " <- " + reg.ToString() ); + reg = reg.Parent; + } + + from.SendMessage( "Your region is {0}.", builder.ToString() ); + } + } + } + + [Usage( "DropHolding" )] + [Description( "Drops the item, if any, that a targeted player is holding. The item is placed into their backpack, or if that's full, at their feet." )] + public static void DropHolding_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( DropHolding_OnTarget ) ); + e.Mobile.SendMessage( "Target the player to drop what they are holding." ); + } + + public static void DropHolding_OnTarget( Mobile from, object obj ) + { + if ( obj is Mobile && ((Mobile)obj).Player ) + { + Mobile targ = (Mobile)obj; + Item held = targ.Holding; + + if ( held == null ) + { + from.SendMessage( "They are not holding anything." ); + } + else + { + if ( from.AccessLevel == AccessLevel.Counselor ) + { + Engines.Help.PageEntry pe = Engines.Help.PageQueue.GetEntry( targ ); + + if ( pe == null || pe.Handler != from ) + { + if ( pe == null ) + from.SendMessage( "You may only use this command on someone who has paged you." ); + else + from.SendMessage( "You may only use this command if you are handling their help page." ); + + return; + } + } + + if ( targ.AddToBackpack( held ) ) + from.SendMessage( "The item they were holding has been placed into their backpack." ); + else + from.SendMessage( "The item they were holding has been placed at their feet." ); + + held.ClearBounce(); + + targ.Holding = null; + } + } + else + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( DropHolding_OnTarget ) ); + from.SendMessage( "That is not a player. Try again." ); + } + } + + public static void DeleteList_Callback( Mobile from, bool okay, object state ) + { + if ( okay ) + { + List list = (List)state; + + CommandLogging.WriteLine( from, "{0} {1} deleting {2} object{3}", from.AccessLevel, CommandLogging.Format( from ), list.Count, list.Count == 1 ? "" : "s" ); + + NetState.Pause(); + + for ( int i = 0; i < list.Count; ++i ) + list[i].Delete(); + + NetState.Resume(); + + from.SendMessage( "You have deleted {0} object{1}.", list.Count, list.Count == 1 ? "" : "s" ); + } + else + { + from.SendMessage( "You have chosen not to delete those objects." ); + } + } + + [Usage( "ClearFacet" )] + [Description( "Deletes all items and mobiles in your facet. Players and their inventory will not be deleted." )] + public static void ClearFacet_OnCommand( CommandEventArgs e ) + { + Map map = e.Mobile.Map; + + if ( map == null || map == Map.Internal ) + { + e.Mobile.SendMessage( "You may not run that command here." ); + return; + } + + List list = new List(); + + foreach ( Item item in World.Items.Values ) + if ( item.Map == map && item.Parent == null ) + list.Add( item ); + + foreach ( Mobile m in World.Mobiles.Values ) + if ( m.Map == map && !m.Player ) + list.Add( m ); + + if ( list.Count > 0 ) + { + CommandLogging.WriteLine( e.Mobile, "{0} {1} starting facet clear of {2} ({3} object{4})", e.Mobile.AccessLevel, CommandLogging.Format( e.Mobile ), map, list.Count, list.Count == 1 ? "" : "s" ); + + e.Mobile.SendGump( + new WarningGump( 1060635, 30720, + String.Format( "You are about to delete {0} object{1} from this facet. Do you really wish to continue?", + list.Count, list.Count == 1 ? "" : "s" ), + 0xFFC000, 360, 260, new WarningGumpCallback( DeleteList_Callback ), list ) ); + } + else + { + e.Mobile.SendMessage( "There were no objects found to delete." ); + } + } + + [Usage( "GetFollowers" )] + [Description( "Teleports all pets of a targeted player to your location." )] + public static void GetFollowers_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( GetFollowers_OnTarget ) ); + e.Mobile.SendMessage( "Target a player to get their pets." ); + } + + public static void GetFollowers_OnTarget( Mobile from, object obj ) + { + if ( obj is PlayerMobile ) + { + PlayerMobile master = (PlayerMobile)obj; + List pets = master.AllFollowers; + + if ( pets.Count > 0 ) + { + CommandLogging.WriteLine( from, "{0} {1} getting all followers of {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( master ) ); + + from.SendMessage( "That player has {0} pet{1}.", pets.Count, pets.Count != 1 ? "s" : "" ); + + for ( int i = 0; i < pets.Count; ++i ) + { + Mobile pet = (Mobile)pets[i]; + + if ( pet is IMount ) + ((IMount)pet).Rider = null; // make sure it's dismounted + + pet.MoveToWorld( from.Location, from.Map ); + } + } + else + { + from.SendMessage( "There were no pets found for that player." ); + } + } + else if ( obj is Mobile && ((Mobile)obj).Player ) + { + Mobile master = (Mobile)obj; + ArrayList pets = new ArrayList(); + + foreach ( Mobile m in World.Mobiles.Values ) + { + if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + + if ( (bc.Controlled && bc.ControlMaster == master) || (bc.Summoned && bc.SummonMaster == master) ) + pets.Add( bc ); + } + } + + if ( pets.Count > 0 ) + { + CommandLogging.WriteLine( from, "{0} {1} getting all followers of {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( master ) ); + + from.SendMessage( "That player has {0} pet{1}.", pets.Count, pets.Count != 1 ? "s" : "" ); + + for ( int i = 0; i < pets.Count; ++i ) + { + Mobile pet = (Mobile)pets[i]; + + if ( pet is IMount ) + ((IMount)pet).Rider = null; // make sure it's dismounted + + pet.MoveToWorld( from.Location, from.Map ); + } + } + else + { + from.SendMessage( "There were no pets found for that player." ); + } + } + else + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( GetFollowers_OnTarget ) ); + from.SendMessage( "That is not a player. Try again." ); + } + } + + public static void ReplaceInnkeepers_OnCommand( CommandEventArgs e ) + { + List list = new List(); + + foreach ( Mobile m in World.Mobiles.Values ) + if ( (m is Innkeeper) && !(m is BaseCreature) ) + list.Add( m ); + + foreach ( Mobile m in list ) + { + Map map = m.Map; + + if ( map != null ) + { + bool hasInnkeeperSpawner = false; + + foreach ( Item item in m.GetItemsInRange( 0 ) ) + { + if ( item is Spawner ) + { + Spawner spawner = (Spawner)item; + + for ( int i = 0; !hasInnkeeperSpawner && i < spawner.SpawnNames.Count; ++i ) + hasInnkeeperSpawner = Insensitive.Equals( (string)spawner.SpawnNames[i], "innkeeper" ); + + if ( hasInnkeeperSpawner ) + break; + } + } + + if ( !hasInnkeeperSpawner ) + { + Spawner spawner = new Spawner( 1, 1, 5, 0, 4, "innkeeper" ); + + spawner.MoveToWorld( m.Location, map ); + } + } + } + } + + private class ViewEqTarget : Target + { + public ViewEqTarget() : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !BaseCommand.IsAccessible( from, targeted ) ) + { + from.SendMessage( "That is not accessible." ); + return; + } + + if ( targeted is Mobile ) + from.SendMenu( new EquipMenu( from, (Mobile)targeted, GetEquip( (Mobile)targeted ) ) ); + } + + private static ItemListEntry[] GetEquip( Mobile m ) + { + ItemListEntry[] entries = new ItemListEntry[m.Items.Count]; + + for ( int i = 0; i < m.Items.Count; ++i ) + { + Item item = m.Items[i]; + + entries[i] = new ItemListEntry( String.Format( "{0}: {1}", item.Layer, item.GetType().Name ), item.ItemID, item.Hue ); + } + + return entries; + } + + private class EquipMenu : ItemListMenu + { + private Mobile m_Mobile; + + public EquipMenu( Mobile from, Mobile m, ItemListEntry[] entries ) : base( "Equipment", entries ) + { + m_Mobile = m; + + CommandLogging.WriteLine( from, "{0} {1} viewing equipment of {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( m ) ); + } + + public override void OnResponse( NetState state, int index ) + { + if ( index >= 0 && index < m_Mobile.Items.Count ) + { + Item item = m_Mobile.Items[index]; + + state.Mobile.SendMenu( new EquipDetailsMenu( m_Mobile, item ) ); + } + } + + private class EquipDetailsMenu : QuestionMenu + { + private Mobile m_Mobile; + private Item m_Item; + + public EquipDetailsMenu( Mobile m, Item item ) : base( String.Format( "{0}: {1}", item.Layer, item.GetType().Name ), new string[]{"Move","Delete","Props"}) + { + m_Mobile = m; + m_Item = item; + } + + public override void OnCancel( NetState state ) + { + state.Mobile.SendMenu( new EquipMenu( state.Mobile, m_Mobile, ViewEqTarget.GetEquip( m_Mobile ) ) ); + } + + public override void OnResponse( NetState state, int index ) + { + if ( index == 0 ) + { + CommandLogging.WriteLine( state.Mobile, "{0} {1} moving equipment item {2} of {3}", state.Mobile.AccessLevel, CommandLogging.Format( state.Mobile ), CommandLogging.Format( m_Item ), CommandLogging.Format( m_Mobile ) ); + state.Mobile.Target = new MoveTarget( m_Item ); + } + else if ( index == 1 ) + { + CommandLogging.WriteLine( state.Mobile, "{0} {1} deleting equipment item {2} of {3}", state.Mobile.AccessLevel, CommandLogging.Format( state.Mobile ), CommandLogging.Format( m_Item ), CommandLogging.Format( m_Mobile ) ); + m_Item.Delete(); + } + else if ( index == 2 ) + { + CommandLogging.WriteLine( state.Mobile, "{0} {1} opening properties for equipment item {2} of {3}", state.Mobile.AccessLevel, CommandLogging.Format( state.Mobile ), CommandLogging.Format( m_Item ), CommandLogging.Format( m_Mobile ) ); + state.Mobile.SendGump( new PropertiesGump( state.Mobile, m_Item ) ); + } + } + } + } + } + + [Usage( "ViewEquip" )] + [Description( "Lists equipment of a targeted mobile. From the list you can move, delete, or open props." )] + public static void ViewEquip_OnCommand( CommandEventArgs e ) + { + e.Mobile.Target = new ViewEqTarget(); + } + + [Usage( "Sound [toAll=true]" )] + [Description( "Plays a sound to players within 12 tiles of you. The (toAll) argument specifies to everyone, or just those who can see you." )] + public static void Sound_OnCommand( CommandEventArgs e ) + { + if ( e.Length == 1 ) + PlaySound( e.Mobile, e.GetInt32( 0 ), true ); + else if ( e.Length == 2 ) + PlaySound( e.Mobile, e.GetInt32( 0 ), e.GetBoolean( 1 ) ); + else + e.Mobile.SendMessage( "Format: Sound [toAll]" ); + } + + private static void PlaySound( Mobile m, int index, bool toAll ) + { + Map map = m.Map; + + if ( map == null ) + return; + + CommandLogging.WriteLine( m, "{0} {1} playing sound {2} (toAll={3})", m.AccessLevel, CommandLogging.Format( m ), index, toAll ); + + Packet p = new PlaySound( index, m.Location ); + + p.Acquire(); + + foreach ( NetState state in m.GetClientsInRange( 12 ) ) + { + if ( toAll || state.Mobile.CanSee( m ) ) + state.Send( p ); + } + + p.Release(); + } + + private class InnTarget : Target + { + public InnTarget() : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + { + Mobile m = (Mobile)targeted; + + InnBox box = ( m.Player ? m.InnBox : m.FindInnNoCreate() ); + + if ( box != null ) + { + CommandLogging.WriteLine( from, "{0} {1} opening inn chest of {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targeted ) ); + + if ( from == targeted ) + box.Open(); + else + box.DisplayTo( from ); + } + else + { + from.SendMessage( "They have no inn chest." ); + } + } + } + } + + [Usage( "Echo " )] + [Description( "Relays (text) as a system message." )] + public static void Echo_OnCommand( CommandEventArgs e ) + { + string toEcho = e.ArgString.Trim(); + + if ( toEcho.Length > 0 ) + e.Mobile.SendMessage( toEcho ); + else + e.Mobile.SendMessage( "Format: Echo \"\"" ); + } + + [Usage( "Inn" )] + [Description( "Opens the inn chest of a given target." )] + public static void Inn_OnCommand( CommandEventArgs e ) + { + e.Mobile.Target = new InnTarget(); + } + + private class DismountTarget : Target + { + public DismountTarget() : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + { + CommandLogging.WriteLine( from, "{0} {1} dismounting {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targeted ) ); + + Mobile targ = (Mobile)targeted; + + for ( int i = 0; i < targ.Items.Count; ++i ) + { + Item item = targ.Items[i]; + + if ( item is IMountItem ) + { + IMount mount = ((IMountItem)item).Mount; + + if ( mount != null ) + mount.Rider = null; + + if ( targ.Items.IndexOf( item ) == -1 ) + --i; + } + } + + for ( int i = 0; i < targ.Items.Count; ++i ) + { + Item item = targ.Items[i]; + + if ( item.Layer == Layer.Mount ) + { + item.Delete(); + --i; + } + } + } + } + } + + private class ClientTarget : Target + { + public ClientTarget() : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + { + Mobile targ = (Mobile)targeted; + + if ( targ.NetState != null ) + { + CommandLogging.WriteLine( from, "{0} {1} opening client menu of {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targeted ) ); + from.SendGump( new ClientGump( from, targ.NetState ) ); + } + } + } + } + + [Usage( "Client" )] + [Description( "Opens the client gump menu for a given player." )] + private static void Client_OnCommand( CommandEventArgs e ) + { + e.Mobile.Target = new ClientTarget(); + } + + [Usage( "Move" )] + [Description( "Repositions a targeted item or mobile." )] + private static void Move_OnCommand( CommandEventArgs e ) + { + e.Mobile.Target = new PickMoveTarget(); + } + + [Usage( "Save" )] + [Description( "Saves the world." )] + private static void Save_OnCommand( CommandEventArgs e ) + { + Misc.AutoSave.Save(); + } + + [Usage("BackgroundSave")] + [Aliases("BGSave", "SaveBG")] + [Description("Saves the world, writing to the disk in the background")] + private static void BackgroundSave_OnCommand(CommandEventArgs e) + { + Misc.AutoSave.Save( true ); + } + + private static bool FixMap( ref Map map, ref Point3D loc, Item item ) + { + if ( map == null || map == Map.Internal ) + { + Mobile m = item.RootParent as Mobile; + + return ( m != null && FixMap( ref map, ref loc, m ) ); + } + + return true; + } + + private static bool FixMap( ref Map map, ref Point3D loc, Mobile m ) + { + if ( map == null || map == Map.Internal ) + { + map = m.LogoutMap; + loc = m.LogoutLocation; + } + + return ( map != null && map != Map.Internal ); + } + + [Usage( "Go [name | serial | (x y [z]) | (deg min (N | S) deg min (E | W))]" )] + [Description( "With no arguments, this command brings up the go menu. With one argument, (name), you are moved to that regions \"go location.\" Or, if a numerical value is specified for one argument, (serial), you are moved to that object. Two or three arguments, (x y [z]), will move your character to that location. When six arguments are specified, (deg min (N | S) deg min (E | W)), your character will go to an approximate of those sextant coordinates." )] + private static void Go_OnCommand( CommandEventArgs e ) + { + Mobile from = e.Mobile; + + if ( e.Length == 0 ) + { + GoGump.DisplayTo( from ); + return; + } + + if ( e.Length == 1 ) + { + try + { + int ser = e.GetInt32( 0 ); + + IEntity ent = World.FindEntity( ser ); + + if ( ent is Item ) + { + Item item = (Item)ent; + + Map map = item.Map; + Point3D loc = item.GetWorldLocation(); + + Mobile owner = item.RootParent as Mobile; + + if( owner != null && (owner.Map != null && owner.Map != Map.Internal) && !BaseCommand.IsAccessible( from, owner ) /* !from.CanSee( owner )*/ ) + { + from.SendMessage( "You can not go to what you can not see." ); + return; + } + else if ( owner != null && (owner.Map == null || owner.Map == Map.Internal) && owner.Hidden && owner.AccessLevel >= from.AccessLevel ) + { + from.SendMessage( "You can not go to what you can not see." ); + return; + } + else if ( !FixMap( ref map, ref loc, item ) ) + { + from.SendMessage( "That is an internal item and you cannot go to it." ); + return; + } + + from.MoveToWorld( loc, map ); + + return; + } + else if ( ent is Mobile ) + { + Mobile m = (Mobile)ent; + + Map map = m.Map; + Point3D loc = m.Location; + + Mobile owner = m; + + if ( owner != null && (owner.Map != null && owner.Map != Map.Internal) && !BaseCommand.IsAccessible( from, owner ) /* !from.CanSee( owner )*/ ) + { + from.SendMessage( "You can not go to what you can not see." ); + return; + } + else if ( owner != null && (owner.Map == null || owner.Map == Map.Internal) && owner.Hidden && owner.AccessLevel >= from.AccessLevel ) + { + from.SendMessage( "You can not go to what you can not see." ); + return; + } + else if ( !FixMap( ref map, ref loc, m ) ) + { + from.SendMessage( "That is an internal mobile and you cannot go to it." ); + return; + } + + from.MoveToWorld( loc, map ); + + return; + } + else + { + string name = e.GetString( 0 ); + Map map; + + for ( int i = 0; i < Map.AllMaps.Count; ++i ) + { + map = Map.AllMaps[i]; + + if ( map.MapIndex == 0x7F || map.MapIndex == 0xFF ) + continue; + + if ( Insensitive.Equals( name, map.Name ) ) + { + from.Map = map; + return; + } + } + + Dictionary list = from.Map.Regions; + + foreach( KeyValuePair kvp in list ) + { + Region r = kvp.Value; + + if ( Insensitive.Equals( r.Name, name ) ) + { + from.Location = new Point3D( r.GoLocation ); + return; + } + } + + for( int i = 0; i < Map.AllMaps.Count; ++i ) + { + Map m = Map.AllMaps[i]; + + if( m.MapIndex == 0x7F || m.MapIndex == 0xFF || from.Map == m ) + continue; + + foreach( Region r in m.Regions.Values ) + { + if( Insensitive.Equals( r.Name, name ) ) + { + from.MoveToWorld( r.GoLocation, m ); + return; + } + } + } + + if ( ser != 0 ) + from.SendMessage( "No object with that serial was found." ); + else + from.SendMessage( "No region with that name was found." ); + + return; + } + } + catch + { + } + + from.SendMessage( "Region name not found" ); + } + else if ( e.Length == 2 || e.Length == 3 ) + { + Map map = from.Map; + + if ( map != null ) + { + try + { + /* + * This to avoid being teleported to (0,0) if trying to teleport + * to a region with spaces in its name. + */ + int x = int.Parse( e.GetString( 0 ) ); + int y = int.Parse( e.GetString( 1 ) ); + int z = (e.Length == 3 ) ? int.Parse( e.GetString( 2 ) ) : map.GetAverageZ( x, y ); + + from.Location = new Point3D( x, y, z ); + } + catch + { + from.SendMessage( "Region name not found." ); + } + } + } + else if ( e.Length == 6 ) + { + Map map = from.Map; + + if ( map != null ) + { + Point3D p = Sextant.ReverseLookup( map, e.GetInt32( 3 ), e.GetInt32( 0 ), e.GetInt32( 4 ), e.GetInt32( 1 ), Insensitive.Equals( e.GetString( 5 ), "E" ), Insensitive.Equals( e.GetString( 2 ), "S" ) ); + + if ( p != Point3D.Zero ) + from.Location = p; + else + from.SendMessage( "Sextant reverse lookup failed." ); + } + } + else + { + from.SendMessage( "Format: Go [name | serial | (x y [z]) | (deg min (N | S) deg min (E | W)]" ); + } + } + + [Usage( "Help" )] + [Description( "Lists all available commands." )] + public static void Help_OnCommand( CommandEventArgs e ) + { + Mobile m = e.Mobile; + + List list = new List(); + + foreach ( CommandEntry entry in CommandSystem.Entries.Values ) + if ( m.AccessLevel >= entry.AccessLevel ) + list.Add( entry ); + + list.Sort(); + + StringBuilder sb = new StringBuilder(); + + if ( list.Count > 0 ) + sb.Append( list[0].Command ); + + for ( int i = 1; i < list.Count; ++i ) + { + string v = list[i].Command; + + if ( (sb.Length + 1 + v.Length) >= 256 ) + { + m.SendAsciiMessage( 0x482, sb.ToString() ); + sb = new StringBuilder(); + sb.Append( v ); + } + else + { + sb.Append( ' ' ); + sb.Append( v ); + } + } + + if ( sb.Length > 0 ) + m.SendAsciiMessage( 0x482, sb.ToString() ); + } + + [Usage( "SMsg " )] + [Aliases( "S", "SM" )] + [Description( "Broadcasts a message to all online staff." )] + public static void StaffMessage_OnCommand( CommandEventArgs e ) + { + BroadcastMessage( AccessLevel.Counselor, e.Mobile.SpeechHue, String.Format( "[{0}] {1}", e.Mobile.Name, e.ArgString ) ); + } + + [Usage( "BCast " )] + [Aliases( "B", "BC" )] + [Description( "Broadcasts a message to everyone online." )] + public static void BroadcastMessage_OnCommand( CommandEventArgs e ) + { + BroadcastMessage( AccessLevel.Player, 0x482, String.Format( "Staff message from {0}:", e.Mobile.Name ) ); + BroadcastMessage( AccessLevel.Player, 0x482, e.ArgString ); + } + + public static void BroadcastMessage ( AccessLevel ac, int hue, string message ) + { + foreach ( NetState state in NetState.Instances ) + { + Mobile m = state.Mobile; + + if ( m != null && m.AccessLevel >= ac ) + m.SendMessage( hue, message ); + } + } + + [Usage( "AutoPageNotify" )] + [Aliases( "APN" )] + [Description( "Toggles your auto-page-notify status." )] + public static void APN_OnCommand( CommandEventArgs e ) + { + Mobile m = e.Mobile; + + m.AutoPageNotify = !m.AutoPageNotify; + + m.SendMessage( "Your auto-page-notify has been turned {0}.", m.AutoPageNotify ? "on" : "off" ); + } + + [Usage( "Animate " )] + [Description( "Makes your character do a specified animation." )] + public static void Animate_OnCommand( CommandEventArgs e ) + { + if ( e.Length == 6 ) + { + e.Mobile.Animate( e.GetInt32( 0 ), e.GetInt32( 1 ), e.GetInt32( 2 ), e.GetBoolean( 3 ), e.GetBoolean( 4 ), e.GetInt32( 5 ) ); + } + else + { + e.Mobile.SendMessage( "Format: Animate " ); + } + } + + [Usage( "Cast " )] + [Description( "Casts a spell by name." )] + public static void Cast_OnCommand( CommandEventArgs e ) + { + if ( e.Length == 1 ) + { + if ( !Multis.DesignContext.Check( e.Mobile ) ) + return; // They are customizing + + Spell spell = SpellRegistry.NewSpell( e.GetString( 0 ), e.Mobile, null ); + + if ( spell != null ) + spell.Cast(); + else + e.Mobile.SendMessage( "That spell was not found." ); + } + else + { + e.Mobile.SendMessage( "Format: Cast " ); + } + } + + private class StuckMenuTarget : Target + { + public StuckMenuTarget() : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + { + if( ((Mobile)targeted).AccessLevel >= from.AccessLevel && targeted != from ) + from.SendMessage( "You can't do that to someone with higher Accesslevel than you!" ); + else + from.SendGump( new StuckMenu( from, (Mobile) targeted, false ) ); + } + } + } + + [Usage( "Stuck" )] + [Description( "Opens a menu of towns, used for teleporting stuck mobiles." )] + public static void Stuck_OnCommand( CommandEventArgs e ) + { + e.Mobile.Target = new StuckMenuTarget(); + } + + [Usage( "Light ")] + [Description( "Set your local lightlevel." )] + public static void Light_OnCommand( CommandEventArgs e ) + { + e.Mobile.LightLevel = e.GetInt32( 0 ); + } + + [Usage( "Stats")] + [Description( "View some stats about the server." )] + public static void Stats_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendMessage( "Open Connections: {0}", Network.NetState.Instances.Count ); + e.Mobile.SendMessage( "Mobiles: {0}", World.Mobiles.Count ); + e.Mobile.SendMessage( "Items: {0}", World.Items.Count ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/HelpInfo.cs b/Scripts/Commands/HelpInfo.cs new file mode 100644 index 0000000..4d2a29e --- /dev/null +++ b/Scripts/Commands/HelpInfo.cs @@ -0,0 +1,422 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Reflection; +using Server.Gumps; +using Server.Network; +using Server.Commands; +using Server.Commands.Generic; +using CommandInfo=Server.Commands.Docs.DocCommandEntry; +using CommandInfoSorter=Server.Commands.Docs.CommandEntrySorter; + +namespace Server.Commands +{ + public class HelpInfo + { + + private static Dictionary m_HelpInfos = new Dictionary(); + private static List m_SortedHelpInfo = new List(); //No need for SortedList cause it's only sorted once at creation... + + public static Dictionary HelpInfos{ get { return m_HelpInfos; } } + public static List SortedHelpInfo { get { return m_SortedHelpInfo; } } + + [CallPriority( 100 )] + public static void Initialize() + { + CommandSystem.Register( "HelpInfo", AccessLevel.Player, new CommandEventHandler( HelpInfo_OnCommand ) ); + + FillTable(); + } + + [Usage( "HelpInfo []" )] + [Description( "Gives information on a specified command, or when no argument specified, displays a gump containing all commands" )] + private static void HelpInfo_OnCommand( CommandEventArgs e ) + { + if( e.Length > 0 ) + { + string arg = e.GetString( 0 ).ToLower(); + CommandInfo c; + + if( m_HelpInfos.TryGetValue( arg, out c ) ) + { + Mobile m = e.Mobile; + + if( m.AccessLevel >= c.AccessLevel ) + m.SendGump( new CommandInfoGump( c ) ); + else + m.SendMessage( "You don't have access to that command." ); + + return; + } + else + e.Mobile.SendMessage( String.Format( "Command '{0}' not found!", arg ) ); + } + + e.Mobile.SendGump( new CommandListGump( 0, e.Mobile, null ) ); + + } + + public static void FillTable() + { + List commands = new List( CommandSystem.Entries.Values ); + List list = new List(); + + commands.Sort(); + commands.Reverse(); + Docs.Clean( commands ); + + for( int i = 0; i < commands.Count; ++i ) + { + CommandEntry e =commands[i]; + + MethodInfo mi = e.Handler.Method; + + object[] attrs = mi.GetCustomAttributes( typeof( UsageAttribute ), false ); + + if( attrs.Length == 0 ) + continue; + + UsageAttribute usage = attrs[0] as UsageAttribute; + + attrs = mi.GetCustomAttributes( typeof( DescriptionAttribute ), false ); + + if( attrs.Length == 0 ) + continue; + + DescriptionAttribute desc = attrs[0] as DescriptionAttribute; + + if( usage == null || desc == null ) + continue; + + attrs = mi.GetCustomAttributes( typeof( AliasesAttribute ), false ); + + AliasesAttribute aliases = (attrs.Length == 0 ? null : attrs[0] as AliasesAttribute); + + string descString = desc.Description.Replace( "<", "(" ).Replace( ">", ")" ); + + if( aliases == null ) + list.Add( new CommandInfo( e.AccessLevel, e.Command, null, usage.Usage, descString ) ); + else + { + list.Add( new CommandInfo( e.AccessLevel, e.Command, aliases.Aliases, usage.Usage, descString ) ); + + for( int j = 0; j < aliases.Aliases.Length; j++ ) + { + string[] newAliases = new string[aliases.Aliases.Length]; + + aliases.Aliases.CopyTo( newAliases, 0 ); + + newAliases[j] = e.Command; + + list.Add( new CommandInfo( e.AccessLevel, aliases.Aliases[j], newAliases, usage.Usage, descString ) ); + } + } + } + + + for( int i = 0; i < TargetCommands.AllCommands.Count; ++i ) + { + BaseCommand command = TargetCommands.AllCommands[i]; + + string usage = command.Usage; + string desc = command.Description; + + if( usage == null || desc == null ) + continue; + + string[] cmds = command.Commands; + string cmd = cmds[0]; + string[] aliases = new string[cmds.Length - 1]; + + for( int j = 0; j < aliases.Length; ++j ) + aliases[j] = cmds[j + 1]; + + desc = desc.Replace( "<", "(" ).Replace( ">", ")" ); + + if( command.Supports != CommandSupport.Single ) + { + StringBuilder sb = new StringBuilder( 50 + desc.Length ); + + sb.Append( "Modifiers: " ); + + if( (command.Supports & CommandSupport.Global) != 0 ) + sb.Append( ", " ); + + if( (command.Supports & CommandSupport.Online) != 0 ) + sb.Append( "Online, " ); + + if( (command.Supports & CommandSupport.Region) != 0 ) + sb.Append( "Region, " ); + + if( (command.Supports & CommandSupport.Contained) != 0 ) + sb.Append( "Contained, " ); + + if( (command.Supports & CommandSupport.Multi) != 0 ) + sb.Append( "Multi, " ); + + if( (command.Supports & CommandSupport.Area) != 0 ) + sb.Append( "Area, " ); + + if( (command.Supports & CommandSupport.Self) != 0 ) + sb.Append( "Self, " ); + + sb.Remove( sb.Length - 2, 2 ); + sb.Append( "
" ); + sb.Append( desc ); + + desc = sb.ToString(); + } + + list.Add( new CommandInfo( command.AccessLevel, cmd, aliases, usage, desc ) ); + + for( int j = 0; j < aliases.Length; j++ ) + { + string[] newAliases = new string[aliases.Length]; + + aliases.CopyTo( newAliases, 0 ); + + newAliases[j] = cmd; + + list.Add( new CommandInfo( command.AccessLevel, aliases[j], newAliases, usage, desc ) ); + } + } + + List commandImpls = BaseCommandImplementor.Implementors; + + for( int i = 0; i < commandImpls.Count; ++i ) + { + BaseCommandImplementor command = commandImpls[i]; + + string usage = command.Usage; + string desc = command.Description; + + if( usage == null || desc == null ) + continue; + + string[] cmds = command.Accessors; + string cmd = cmds[0]; + string[] aliases = new string[cmds.Length - 1]; + + for( int j = 0; j < aliases.Length; ++j ) + aliases[j] = cmds[j + 1]; + + desc = desc.Replace( "<", ")" ).Replace( ">", ")" ); + + list.Add( new CommandInfo( command.AccessLevel, cmd, aliases, usage, desc ) ); + + for( int j = 0; j < aliases.Length; j++ ) + { + string[] newAliases = new string[aliases.Length]; + + aliases.CopyTo( newAliases, 0 ); + + newAliases[j] = cmd; + + list.Add( new CommandInfo( command.AccessLevel, aliases[j], newAliases, usage, desc ) ); + } + } + + list.Sort( new CommandInfoSorter() ); + + m_SortedHelpInfo = list; + + foreach( CommandInfo c in m_SortedHelpInfo ) + { + if( !m_HelpInfos.ContainsKey( c.Name.ToLower() ) ) + m_HelpInfos.Add( c.Name.ToLower(), c ); + } + } + + public class CommandListGump : BaseGridGump + { + private const int EntriesPerPage = 15; + + int m_Page; + List m_List; + + public CommandListGump( int page, Mobile from, List list ) + : base( 30, 30 ) + { + m_Page = page; + + if( list == null ) + { + m_List = new List(); + + foreach( CommandInfo c in m_SortedHelpInfo ) + { + if( from.AccessLevel >= c.AccessLevel ) + m_List.Add( c ); + } + } + else + m_List = list; + + + AddNewPage(); + + if( m_Page > 0 ) + AddEntryButton( 20, ArrowLeftID1, ArrowLeftID2, 1, ArrowLeftWidth, ArrowLeftHeight ); + else + AddEntryHeader( 20 ); + + AddEntryHtml( 160, Center( String.Format( "Page {0} of {1}", m_Page+1, (m_List.Count + EntriesPerPage - 1) / EntriesPerPage ) ) ); + + if( (m_Page + 1) * EntriesPerPage < m_List.Count ) + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 2, ArrowRightWidth, ArrowRightHeight ); + else + AddEntryHeader( 20 ); + + int last = (int)AccessLevel.Player - 1; + + for( int i = m_Page * EntriesPerPage, line = 0; line < EntriesPerPage && i < m_List.Count; ++i, ++line ) + { + CommandInfo c = m_List[i]; + if( from.AccessLevel >= c.AccessLevel ) + { + if( (int)c.AccessLevel != last ) + { + AddNewLine(); + + AddEntryHtml( 20 + OffsetSize + 160, Color( c.AccessLevel.ToString(), 0xFF0000 ) ); + AddEntryHeader( 20 ); + line++; + } + + last = (int)c.AccessLevel; + + AddNewLine(); + + AddEntryHtml( 20 + OffsetSize + 160, c.Name ); + + AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 3 + i, ArrowRightWidth, ArrowRightHeight ); + } + } + + FinishPage(); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile m = sender.Mobile; + switch( info.ButtonID ) + { + case 0: + { + m.CloseGump( typeof( CommandInfoGump ) ); + break; + } + case 1: + { + if( m_Page > 0 ) + m.SendGump( new CommandListGump( m_Page - 1, m, m_List ) ); + + break; + } + case 2: + { + if( (m_Page + 1) * EntriesPerPage < m_SortedHelpInfo.Count ) + m.SendGump( new CommandListGump( m_Page + 1, m, m_List ) ); + + break; + } + default: + { + + int v = info.ButtonID - 3; + + if( v >= 0 && v < m_List.Count ) + { + CommandInfo c = m_List[v]; + + if( m.AccessLevel >= c.AccessLevel ) + { + m.SendGump( new CommandInfoGump( c ) ); + m.SendGump( new CommandListGump( m_Page, m, m_List ) ); + } + else + { + m.SendMessage( "You no longer have access to that command." ); + m.SendGump( new CommandListGump( m_Page, m, null ) ); + } + } + break; + } + } + } + } + + + public class CommandInfoGump : Gump + { + public string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + + public string Center( string text ) + { + return String.Format( "
{0}
", text ); + } + + public CommandInfoGump( CommandInfo info ) + : this( info, 320, 200 ) + { + } + + public CommandInfoGump( CommandInfo info, int width, int height ) + : base( 300, 50 ) + { + AddPage( 0 ); + + AddBackground( 0, 0, width, height, 5054 ); + + //AddImageTiled( 10, 10, width - 20, 20, 2624 ); + //AddAlphaRegion( 10, 10, width - 20, 20 ); + //AddHtmlLocalized( 10, 10, width - 20, 20, header, headerColor, false, false ); + AddHtml( 10, 10, width - 20, 20, Color( Center( info.Name ), 0xFF0000 ), false, false ); + + //AddImageTiled( 10, 40, width - 20, height - 80, 2624 ); + //AddAlphaRegion( 10, 40, width - 20, height - 80 ); + + StringBuilder sb = new StringBuilder(); + + sb.Append( "Usage: " ); + sb.Append( info.Usage.Replace( "<", "(" ).Replace( ">", ")" ) ); + sb.Append( "
" ); + + string[] aliases = info.Aliases; + + if( aliases != null && aliases.Length != 0 ) + { + sb.Append( String.Format( "Alias{0}: ", aliases.Length == 1 ? "" : "es" ) ); + + for( int i = 0; i < aliases.Length; ++i ) + { + if( i != 0 ) + sb.Append( ", " ); + + sb.Append( aliases[i] ); + } + + sb.Append( "
" ); + } + + sb.Append( "AccessLevel: " ); + sb.Append( info.AccessLevel.ToString() ); + sb.Append( "
" ); + sb.Append( "
" ); + + sb.Append( info.Description ); + + AddHtml( 10, 40, width - 20, height - 80, sb.ToString(), false, true ); + + //AddImageTiled( 10, height - 30, width - 20, 20, 2624 ); + //AddAlphaRegion( 10, height - 30, width - 20, 20 ); + + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Logging.cs b/Scripts/Commands/Logging.cs new file mode 100644 index 0000000..76a4c4e --- /dev/null +++ b/Scripts/Commands/Logging.cs @@ -0,0 +1,147 @@ +using System; +using System.IO; +using Server; +using Server.Accounting; + +namespace Server.Commands +{ + public class CommandLogging + { + private static StreamWriter m_Output; + private static bool m_Enabled = true; + + public static bool Enabled{ get{ return m_Enabled; } set{ m_Enabled = value; } } + + public static StreamWriter Output{ get{ return m_Output; } } + + public static void Initialize() + { + EventSink.Command += new CommandEventHandler( EventSink_Command ); + + if ( !Directory.Exists( "Data/Logs" ) ) + Directory.CreateDirectory( "Data/Logs" ); + + string directory = "Data/Logs/Commands"; + + if ( !Directory.Exists( directory ) ) + Directory.CreateDirectory( directory ); + + try + { + m_Output = new StreamWriter( Path.Combine( directory, String.Format( "{0}.log", DateTime.Now.ToLongDateString() ) ), true ); + + m_Output.AutoFlush = true; + + m_Output.WriteLine( "##############################" ); + m_Output.WriteLine( "Log started on {0}", DateTime.Now ); + m_Output.WriteLine(); + } + catch + { + } + } + + public static object Format( object o ) + { + if ( o is Mobile ) + { + Mobile m = (Mobile)o; + + if ( m.Account == null ) + return String.Format( "{0} (no account)", m ); + else + return String.Format( "{0} ('{1}')", m, m.Account.Username ); + } + else if ( o is Item ) + { + Item item = (Item)o; + + return String.Format( "0x{0:X} ({1})", item.Serial.Value, item.GetType().Name ); + } + + return o; + } + + public static void WriteLine( Mobile from, string format, params object[] args ) + { + if ( !m_Enabled ) + return; + + WriteLine( from, String.Format( format, args ) ); + } + + public static void WriteLine( Mobile from, string text ) + { + if ( !m_Enabled ) + return; + + try + { + m_Output.WriteLine( "{0}: {1}: {2}", DateTime.Now, from.NetState, text ); + + string path = Core.BaseDirectory; + + Account acct = from.Account as Account; + + string name = ( acct == null ? from.Name : acct.Username ); + + AppendPath( ref path, "Data/Logs" ); + AppendPath( ref path, "Commands" ); + AppendPath( ref path, from.AccessLevel.ToString() ); + path = Path.Combine( path, String.Format( "{0}.log", name ) ); + + using ( StreamWriter sw = new StreamWriter( path, true ) ) + sw.WriteLine( "{0}: {1}: {2}", DateTime.Now, from.NetState, text ); + } + catch + { + } + } + + private static char[] m_NotSafe = new char[]{ '\\', '/', ':', '*', '?', '"', '<', '>', '|' }; + + public static void AppendPath( ref string path, string toAppend ) + { + path = Path.Combine( path, toAppend ); + + if ( !Directory.Exists( path ) ) + Directory.CreateDirectory( path ); + } + + public static string Safe( string ip ) + { + if ( ip == null ) + return "null"; + + ip = ip.Trim(); + + if ( ip.Length == 0 ) + return "empty"; + + bool isSafe = true; + + for ( int i = 0; isSafe && i < m_NotSafe.Length; ++i ) + isSafe = ( ip.IndexOf( m_NotSafe[i] ) == -1 ); + + if ( isSafe ) + return ip; + + System.Text.StringBuilder sb = new System.Text.StringBuilder( ip ); + + for ( int i = 0; i < m_NotSafe.Length; ++i ) + sb.Replace( m_NotSafe[i], '_' ); + + return sb.ToString(); + } + + public static void EventSink_Command( CommandEventArgs e ) + { + WriteLine( e.Mobile, "{0} {1} used command '{2} {3}'", e.Mobile.AccessLevel, Format( e.Mobile ), e.Command, e.ArgString ); + } + + public static void LogChangeProperty( Mobile from, object o, string name, string value ) + { + WriteLine( from, "{0} {1} set property '{2}' of {3} to '{4}'", from.AccessLevel, Format( from ), name, Format( o ), value ); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Profiling.cs b/Scripts/Commands/Profiling.cs new file mode 100644 index 0000000..554efef --- /dev/null +++ b/Scripts/Commands/Profiling.cs @@ -0,0 +1,400 @@ +using System; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Diagnostics; + +namespace Server.Commands +{ + public class Profiling + { + public static void Initialize() + { + CommandSystem.Register( "DumpTimers", AccessLevel.Administrator, new CommandEventHandler( DumpTimers_OnCommand ) ); + CommandSystem.Register( "CountObjects", AccessLevel.Administrator, new CommandEventHandler( CountObjects_OnCommand ) ); + CommandSystem.Register( "ProfileWorld", AccessLevel.Administrator, new CommandEventHandler( ProfileWorld_OnCommand ) ); + CommandSystem.Register( "TraceInternal", AccessLevel.Administrator, new CommandEventHandler( TraceInternal_OnCommand ) ); + CommandSystem.Register( "TraceExpanded", AccessLevel.Administrator, new CommandEventHandler( TraceExpanded_OnCommand ) ); + CommandSystem.Register( "WriteProfiles", AccessLevel.Administrator, new CommandEventHandler( WriteProfiles_OnCommand ) ); + CommandSystem.Register( "SetProfiles", AccessLevel.Administrator, new CommandEventHandler( SetProfiles_OnCommand ) ); + } + + [Usage( "WriteProfiles" )] + [Description( "Generates a log files containing performance diagnostic information." )] + public static void WriteProfiles_OnCommand( CommandEventArgs e ) + { + try + { + using ( StreamWriter sw = new StreamWriter( "profiles.log", true ) ) + { + sw.WriteLine( "# Dump on {0:f}", DateTime.Now ); + sw.WriteLine( "# Core profiling for " + Core.ProfileTime ); + + sw.WriteLine( "# Packet send" ); + BaseProfile.WriteAll( sw, PacketSendProfile.Profiles ); + sw.WriteLine(); + + sw.WriteLine( "# Packet receive" ); + BaseProfile.WriteAll( sw, PacketReceiveProfile.Profiles ); + sw.WriteLine(); + + sw.WriteLine( "# Timer" ); + BaseProfile.WriteAll( sw, TimerProfile.Profiles ); + sw.WriteLine(); + + sw.WriteLine( "# Gump response" ); + BaseProfile.WriteAll( sw, GumpProfile.Profiles ); + sw.WriteLine(); + + sw.WriteLine( "# Target response" ); + BaseProfile.WriteAll( sw, TargetProfile.Profiles ); + sw.WriteLine(); + } + } + catch + { + } + } + + [Usage( "SetProfiles [true | false]" )] + [Description( "Enables, disables, or toggles the state of core packet and timer profiling." )] + public static void SetProfiles_OnCommand( CommandEventArgs e ) + { + if ( e.Length == 1 ) + Core.Profiling = e.GetBoolean( 0 ); + else + Core.Profiling = !Core.Profiling; + + e.Mobile.SendMessage( "Profiling has been {0}.", Core.Profiling ? "enabled" : "disabled" ); + } + + [Usage( "DumpTimers" )] + [Description( "Generates a log file of all currently executing timers. Used for tracing timer leaks." )] + public static void DumpTimers_OnCommand( CommandEventArgs e ) + { + try + { + using ( StreamWriter sw = new StreamWriter( "timerdump.log", true ) ) + Timer.DumpInfo( sw ); + } + catch + { + } + } + + private class CountSorter : IComparer + { + public int Compare( object x, object y ) + { + DictionaryEntry a = (DictionaryEntry)x; + DictionaryEntry b = (DictionaryEntry)y; + + int aCount = GetCount( a.Value ); + int bCount = GetCount( b.Value ); + + int v = -aCount.CompareTo( bCount ); + + if ( v == 0 ) + { + Type aType = (Type)a.Key; + Type bType = (Type)b.Key; + + v = aType.FullName.CompareTo( bType.FullName ); + } + + return v; + } + + private int GetCount( object obj ) + { + if ( obj is int ) + return (int) obj; + + if ( obj is int[] ) + { + int[] list = (int[]) obj; + + int total = 0; + + for ( int i = 0; i < list.Length; ++i ) + total += list[i]; + + return total; + } + + return 0; + } + } + + [Usage( "CountObjects" )] + [Description( "Generates a log file detailing all item and mobile types in the world." )] + public static void CountObjects_OnCommand( CommandEventArgs e ) + { + using ( StreamWriter op = new StreamWriter( "objects.log" ) ) + { + Hashtable table = new Hashtable(); + + foreach ( Item item in World.Items.Values ) + { + Type type = item.GetType(); + + object o = (object)table[type]; + + if ( o == null ) + table[type] = 1; + else + table[type] = 1 + (int)o; + } + + ArrayList items = new ArrayList( table ); + + table.Clear(); + + foreach ( Mobile m in World.Mobiles.Values ) + { + Type type = m.GetType(); + + object o = (object)table[type]; + + if ( o == null ) + table[type] = 1; + else + table[type] = 1 + (int)o; + } + + ArrayList mobiles = new ArrayList( table ); + + items.Sort( new CountSorter() ); + mobiles.Sort( new CountSorter() ); + + op.WriteLine( "# Object count table generated on {0}", DateTime.Now ); + op.WriteLine(); + op.WriteLine(); + + op.WriteLine( "# Items:" ); + + foreach ( DictionaryEntry de in items ) + op.WriteLine( "{0}\t{1:F2}%\t{2}", de.Value, (100 * (int)de.Value) / (double)World.Items.Count, de.Key ); + + op.WriteLine(); + op.WriteLine(); + + op.WriteLine( "#Mobiles:" ); + + foreach ( DictionaryEntry de in mobiles ) + op.WriteLine( "{0}\t{1:F2}%\t{2}", de.Value, (100 * (int)de.Value) / (double)World.Mobiles.Count, de.Key ); + } + + e.Mobile.SendMessage( "Object table has been generated. See the file : /objects.log" ); + } + + [Usage( "TraceExpanded" )] + [Description( "Generates a log file describing all items using expanded memory." )] + public static void TraceExpanded_OnCommand( CommandEventArgs e ) + { + Hashtable typeTable = new Hashtable(); + + foreach ( Item item in World.Items.Values ) + { + ExpandFlag flags = item.GetExpandFlags(); + + if ( ( flags & ~(ExpandFlag.TempFlag | ExpandFlag.SaveFlag) ) == 0 ) + continue; + + Type itemType = item.GetType(); + + do + { + int[] countTable = typeTable[itemType] as int[]; + + if ( countTable == null ) + typeTable[itemType] = countTable = new int[8]; + + if ( ( flags & ExpandFlag.Name ) != 0 ) + ++countTable[0]; + + if ( ( flags & ExpandFlag.Items ) != 0 ) + ++countTable[1]; + + if ( ( flags & ExpandFlag.Bounce ) != 0 ) + ++countTable[2]; + + if ( ( flags & ExpandFlag.Holder ) != 0 ) + ++countTable[3]; + + if ( ( flags & ExpandFlag.Blessed ) != 0 ) + ++countTable[4]; + + /*if ( ( flags & ExpandFlag.TempFlag ) != 0 ) + ++countTable[5]; + + if ( ( flags & ExpandFlag.SaveFlag ) != 0 ) + ++countTable[6];*/ + + if ( ( flags & ExpandFlag.Weight ) != 0 ) + ++countTable[7]; + + itemType = itemType.BaseType; + } while ( itemType != typeof( object ) ); + } + + try + { + using ( StreamWriter op = new StreamWriter( "expandedItems.log", true ) ) + { + string[] names = new string[] + { + "Name", + "Items", + "Bounce", + "Holder", + "Blessed", + "TempFlag", + "SaveFlag", + "Weight" + }; + + ArrayList list = new ArrayList( typeTable ); + + list.Sort( new CountSorter() ); + + foreach ( DictionaryEntry de in list ) + { + Type itemType = de.Key as Type; + int[] countTable = de.Value as int[]; + + op.WriteLine( "# {0}", itemType.FullName ); + + for ( int i = 0; i < countTable.Length; ++i ) + { + if ( countTable[i] > 0 ) + op.WriteLine( "{0}\t{1:N0}", names[i], countTable[i] ); + } + + op.WriteLine(); + } + } + } + catch + { + } + } + + [Usage( "TraceInternal" )] + [Description( "Generates a log file describing all items in the 'internal' map." )] + public static void TraceInternal_OnCommand( CommandEventArgs e ) + { + int totalCount = 0; + Hashtable table = new Hashtable(); + + foreach ( Item item in World.Items.Values ) + { + if ( item.Parent != null || item.Map != Map.Internal ) + continue; + + ++totalCount; + + Type type = item.GetType(); + int[] parms = (int[])table[type]; + + if ( parms == null ) + table[type] = parms = new int[]{ 0, 0 }; + + parms[0]++; + parms[1] += item.Amount; + } + + using ( StreamWriter op = new StreamWriter( "internal.log" ) ) + { + op.WriteLine( "# {0} items found", totalCount ); + op.WriteLine( "# {0} different types", table.Count ); + op.WriteLine(); + op.WriteLine(); + op.WriteLine( "Type\t\tCount\t\tAmount\t\tAvg. Amount" ); + + foreach ( DictionaryEntry de in table ) + { + Type type = (Type)de.Key; + int[] parms = (int[])de.Value; + + op.WriteLine( "{0}\t\t{1}\t\t{2}\t\t{3:F2}", type.Name, parms[0], parms[1], (double)parms[1] / parms[0] ); + } + } + } + + [Usage( "ProfileWorld" )] + [Description( "Prints the amount of data serialized for every object type in your world file." )] + public static void ProfileWorld_OnCommand( CommandEventArgs e ) + { + ProfileWorld( "items", "worldprofile_items.log" ); + ProfileWorld( "mobiles", "worldprofile_mobiles.log" ); + } + + public static void ProfileWorld( string type, string opFile ) + { + try + { + ArrayList types = new ArrayList(); + + using ( BinaryReader bin = new BinaryReader( new FileStream( String.Format( "Saves/{0}/{0}.tdb", type ), FileMode.Open, FileAccess.Read, FileShare.Read ) ) ) + { + int count = bin.ReadInt32(); + + for ( int i = 0; i < count; ++i ) + types.Add( ScriptCompiler.FindTypeByFullName( bin.ReadString() ) ); + } + + long total = 0; + + Hashtable table = new Hashtable(); + + using ( BinaryReader bin = new BinaryReader( new FileStream( String.Format( "Saves/{0}/{0}.idx", type ), FileMode.Open, FileAccess.Read, FileShare.Read ) ) ) + { + int count = bin.ReadInt32(); + + for ( int i = 0; i < count; ++i ) + { + int typeID = bin.ReadInt32(); + int serial = bin.ReadInt32(); + long pos = bin.ReadInt64(); + int length = bin.ReadInt32(); + Type objType = (Type)types[typeID]; + + while ( objType != null && objType != typeof( object ) ) + { + object obj = table[objType]; + + if ( obj == null ) + table[objType] = length; + else + table[objType] = length + (int)obj; + + objType = objType.BaseType; + total += length; + } + } + } + + ArrayList list = new ArrayList( table ); + + list.Sort( new CountSorter() ); + + using ( StreamWriter op = new StreamWriter( opFile ) ) + { + op.WriteLine( "# Profile of world {0}", type ); + op.WriteLine( "# Generated on {0}", DateTime.Now ); + op.WriteLine(); + op.WriteLine(); + + foreach ( DictionaryEntry de in list ) + op.WriteLine( "{0}\t{1:F2}%\t{2}", de.Value, (100 * (int)de.Value) / (double)total, de.Key ); + } + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Properties.cs b/Scripts/Commands/Properties.cs new file mode 100644 index 0000000..0ce7558 --- /dev/null +++ b/Scripts/Commands/Properties.cs @@ -0,0 +1,837 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Targeting; +using Server.Items; +using Server.Gumps; +using CPA = Server.CommandPropertyAttribute; +using Server.Commands; +using Server.Commands.Generic; + +namespace Server.Commands +{ + public enum PropertyAccess + { + Read = 0x01, + Write = 0x02, + ReadWrite = Read | Write + } + + public class Properties + { + public static void Initialize() + { + CommandSystem.Register( "Props", AccessLevel.Counselor, new CommandEventHandler( Props_OnCommand ) ); + } + + private class PropsTarget : Target + { + public PropsTarget() : base( -1, true, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( !BaseCommand.IsAccessible( from, o ) ) + from.SendMessage( "That is not accessible." ); + else + from.SendGump( new PropertiesGump( from, o ) ); + } + } + + [Usage( "Props [serial]" )] + [Description( "Opens a menu where you can view and edit all properties of a targeted (or specified) object." )] + private static void Props_OnCommand( CommandEventArgs e ) + { + if ( e.Length == 1 ) + { + IEntity ent = World.FindEntity( e.GetInt32( 0 ) ); + + if ( ent == null ) + e.Mobile.SendMessage( "No object with that serial was found." ); + else if ( !BaseCommand.IsAccessible( e.Mobile, ent ) ) + e.Mobile.SendMessage( "That is not accessible." ); + else + e.Mobile.SendGump( new PropertiesGump( e.Mobile, ent ) ); + } + else + { + e.Mobile.Target = new PropsTarget(); + } + } + + private static bool CIEqual( string l, string r ) + { + return Insensitive.Equals( l, r ); + } + + private static Type typeofCPA = typeof( CPA ); + + public static CPA GetCPA( PropertyInfo p ) + { + object[] attrs = p.GetCustomAttributes( typeofCPA, false ); + + if ( attrs.Length == 0 ) + return null; + + return attrs[0] as CPA; + } + + public static PropertyInfo[] GetPropertyInfoChain( Mobile from, Type type, string propertyString, PropertyAccess endAccess, ref string failReason ) + { + string[] split = propertyString.Split( '.' ); + + if ( split.Length == 0 ) + return null; + + PropertyInfo[] info = new PropertyInfo[split.Length]; + + for ( int i = 0; i < info.Length; ++i ) + { + string propertyName = split[i]; + + if ( CIEqual( propertyName, "current" ) ) + continue; + + PropertyInfo[] props = type.GetProperties( BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public ); + + bool isFinal = ( i == (info.Length - 1) ); + + PropertyAccess access = endAccess; + + if ( !isFinal ) + access |= PropertyAccess.Read; + + for ( int j = 0; j < props.Length; ++j ) + { + PropertyInfo p = props[j]; + + if ( CIEqual( p.Name, propertyName ) ) + { + CPA attr = GetCPA( p ); + + if ( attr == null ) + { + failReason = String.Format( "Property '{0}' not found.", propertyName ); + return null; + } + else if ( (access & PropertyAccess.Read) != 0 && from.AccessLevel < attr.ReadLevel ) + { + failReason = String.Format( "You must be at least {0} to get the property '{1}'.", + Mobile.GetAccessLevelName( attr.ReadLevel ), propertyName ); + + return null; + } + else if ( (access & PropertyAccess.Write) != 0 && from.AccessLevel < attr.WriteLevel ) + { + failReason = String.Format( "You must be at least {0} to set the property '{1}'.", + Mobile.GetAccessLevelName( attr.WriteLevel ), propertyName ); + + return null; + } + else if ( (access & PropertyAccess.Read) != 0 && !p.CanRead ) + { + failReason = String.Format( "Property '{0}' is write only.", propertyName ); + return null; + } + else if ( (access & PropertyAccess.Write) != 0 && (!p.CanWrite || attr.ReadOnly) && isFinal ) + { + failReason = String.Format( "Property '{0}' is read only.", propertyName ); + return null; + } + + info[i] = p; + type = p.PropertyType; + break; + } + } + + if ( info[i] == null ) + { + failReason = String.Format( "Property '{0}' not found.", propertyName ); + return null; + } + } + + return info; + } + + public static PropertyInfo GetPropertyInfo( Mobile from, ref object obj, string propertyName, PropertyAccess access, ref string failReason ) + { + PropertyInfo[] chain = GetPropertyInfoChain( from, obj.GetType(), propertyName, access, ref failReason ); + + if ( chain == null ) + return null; + + return GetPropertyInfo( ref obj, chain, ref failReason ); + } + + public static PropertyInfo GetPropertyInfo( ref object obj, PropertyInfo[] chain, ref string failReason ) + { + if ( chain == null || chain.Length == 0 ) + { + failReason = "Property chain is empty."; + return null; + } + + for ( int i = 0; i < chain.Length - 1; ++i ) + { + if ( chain[i] == null ) + continue; + + obj = chain[i].GetValue( obj, null ); + + if ( obj == null ) + { + failReason = String.Format( "Property '{0}' is null.", chain[i] ); + return null; + } + } + + return chain[chain.Length-1]; + } + + public static string GetValue( Mobile from, object o, string name ) + { + string failReason = ""; + + PropertyInfo[] chain = GetPropertyInfoChain( from, o.GetType(), name, PropertyAccess.Read, ref failReason ); + + if ( chain == null || chain.Length == 0 ) + return failReason; + + PropertyInfo p = GetPropertyInfo( ref o, chain, ref failReason ); + + if ( p == null ) + return failReason; + + return InternalGetValue( o, p, chain ); + } + + public static string IncreaseValue( Mobile from, object o, string[] args ) + { + Type type = o.GetType(); + + object[] realObjs = new object[args.Length/2]; + PropertyInfo[] realProps = new PropertyInfo[args.Length/2]; + int[] realValues = new int[args.Length/2]; + + bool positive = false, negative = false; + + for ( int i = 0; i < realProps.Length; ++i ) + { + string name = args[i*2]; + + try + { + string valueString = args[1 + (i*2)]; + + if ( valueString.StartsWith( "0x" ) ) + { + realValues[i] = Convert.ToInt32( valueString.Substring( 2 ), 16 ); + } + else + { + realValues[i] = Convert.ToInt32( valueString ); + } + } + catch + { + return "Offset value could not be parsed."; + } + + if ( realValues[i] > 0 ) + positive = true; + else if ( realValues[i] < 0 ) + negative = true; + else + return "Zero is not a valid value to offset."; + + string failReason = null; + realObjs[i] = o; + realProps[i] = GetPropertyInfo( from, ref realObjs[i], name, PropertyAccess.ReadWrite, ref failReason ); + + if ( failReason != null ) + return failReason; + + if ( realProps[i] == null ) + return "Property not found."; + } + + for ( int i = 0; i < realProps.Length; ++i ) + { + object obj = realProps[i].GetValue( realObjs[i], null ); + + if( !( obj is IConvertible ) ) + return "Property is not IConvertable."; + + try + { + + long v = (long)Convert.ChangeType( obj, TypeCode.Int64 ); + v += realValues[i]; + + realProps[i].SetValue( realObjs[i], Convert.ChangeType( v, realProps[i].PropertyType ), null ); + } + catch + { + return "Value could not be converted"; + } + } + + if ( realProps.Length == 1 ) + { + if ( positive ) + return "The property has been increased."; + + return "The property has been decreased."; + } + + if ( positive && negative ) + return "The properties have been changed."; + + if ( positive ) + return "The properties have been increased."; + + return "The properties have been decreased."; + } + + private static string InternalGetValue( object o, PropertyInfo p ) + { + return InternalGetValue( o, p, null ); + } + + private static string InternalGetValue( object o, PropertyInfo p, PropertyInfo[] chain ) + { + Type type = p.PropertyType; + + object value = p.GetValue( o, null ); + string toString; + + if ( value == null ) + toString = "null"; + else if ( IsNumeric( type ) ) + toString = String.Format( "{0} (0x{0:X})", value ); + else if ( IsChar( type ) ) + toString = String.Format( "'{0}' ({1} [0x{1:X}])", value, (int) value ); + else if ( IsString( type ) ) + toString = ( (string) value == "null" ? @"@""null""" : String.Format( "\"{0}\"", value ) ); + else + toString = value.ToString(); + + if ( chain == null ) + return String.Format( "{0} = {1}", p.Name, toString ); + + string[] concat = new string[chain.Length*2+1]; + + for ( int i = 0; i < chain.Length; ++i ) + { + concat[(i*2)+0] = chain[i].Name; + concat[(i*2)+1] = ( i < (chain.Length - 1) ) ? "." : " = "; + } + + concat[concat.Length-1] = toString; + + return String.Concat( concat ); + } + + public static string SetValue( Mobile from, object o, string name, string value ) + { + object logObject = o; + + string failReason = ""; + PropertyInfo p = GetPropertyInfo( from, ref o, name, PropertyAccess.Write, ref failReason ); + + if ( p == null ) + return failReason; + + return InternalSetValue( from, logObject, o, p, name, value, true ); + } + + private static Type typeofSerial = typeof( Serial ); + + private static bool IsSerial( Type t ) + { + return ( t == typeofSerial ); + } + + private static Type typeofType = typeof( Type ); + + private static bool IsType( Type t ) + { + return ( t == typeofType ); + } + + private static Type typeofChar = typeof( Char ); + + private static bool IsChar( Type t ) + { + return ( t == typeofChar ); + } + + private static Type typeofString = typeof( String ); + + private static bool IsString( Type t ) + { + return ( t == typeofString ); + } + + private static bool IsEnum( Type t ) + { + return t.IsEnum; + } + + private static Type typeofTimeSpan = typeof( TimeSpan ); + private static Type typeofParsable = typeof( ParsableAttribute ); + + private static bool IsParsable( Type t ) + { + return ( t == typeofTimeSpan || t.IsDefined( typeofParsable, false ) ); + } + + private static Type[] m_ParseTypes = new Type[]{ typeof( string ) }; + private static object[] m_ParseParams = new object[1]; + + private static object Parse( object o, Type t, string value ) + { + MethodInfo method = t.GetMethod( "Parse", m_ParseTypes ); + + m_ParseParams[0] = value; + + return method.Invoke( o, m_ParseParams ); + } + + private static Type[] m_NumericTypes = new Type[] + { + typeof( Byte ), typeof( SByte ), + typeof( Int16 ), typeof( UInt16 ), + typeof( Int32 ), typeof( UInt32 ), + typeof( Int64 ), typeof( UInt64 ) + }; + + private static bool IsNumeric( Type t ) + { + return ( Array.IndexOf( m_NumericTypes, t ) >= 0 ); + } + + public static string ConstructFromString( Type type, object obj, string value, ref object constructed ) + { + object toSet; + bool isSerial = IsSerial( type ); + + if ( isSerial ) // mutate into int32 + type = m_NumericTypes[4]; + + if ( value == "(-null-)" && !type.IsValueType ) + value = null; + + if ( IsEnum( type ) ) + { + try + { + toSet = Enum.Parse( type, value, true ); + } + catch + { + return "That is not a valid enumeration member."; + } + } + else if ( IsType( type ) ) + { + try + { + toSet = ScriptCompiler.FindTypeByName( value ); + + if ( toSet == null ) + return "No type with that name was found."; + } + catch + { + return "No type with that name was found."; + } + } + else if ( IsParsable( type ) ) + { + try + { + toSet = Parse( obj, type, value ); + } + catch + { + return "That is not properly formatted."; + } + } + else if ( value == null ) + { + toSet = null; + } + else if ( value.StartsWith( "0x" ) && IsNumeric( type ) ) + { + try + { + toSet = Convert.ChangeType( Convert.ToUInt64( value.Substring( 2 ), 16 ), type ); + } + catch + { + return "That is not properly formatted."; + } + } + else + { + try + { + toSet = Convert.ChangeType( value, type ); + } + catch + { + return "That is not properly formatted."; + } + } + + if ( isSerial ) // mutate back + toSet = (Serial)((Int32)toSet); + + constructed = toSet; + return null; + } + + public static string SetDirect( Mobile from, object logObject, object obj, PropertyInfo prop, string givenName, object toSet, bool shouldLog ) + { + try + { + if ( toSet is AccessLevel ) + { + AccessLevel newLevel = (AccessLevel) toSet; + AccessLevel reqLevel = AccessLevel.Administrator; + + if ( newLevel == AccessLevel.Administrator ) + reqLevel = AccessLevel.Developer; + else if ( newLevel >= AccessLevel.Developer ) + reqLevel = AccessLevel.Owner; + + if ( from.AccessLevel < reqLevel ) + return "You do not have access to that level."; + } + + if ( shouldLog ) + CommandLogging.LogChangeProperty( from, logObject, givenName, toSet == null ? "(-null-)" : toSet.ToString() ); + + prop.SetValue( obj, toSet, null ); + return "Property has been set."; + } + catch + { + return "An exception was caught, the property may not be set."; + } + } + + public static string SetDirect( object obj, PropertyInfo prop, object toSet ) + { + try + { + if ( toSet is AccessLevel ) + { + return "You do not have access to that level."; + } + + prop.SetValue( obj, toSet, null ); + return "Property has been set."; + } + catch + { + return "An exception was caught, the property may not be set."; + } + } + + public static string InternalSetValue( Mobile from, object logobj, object o, PropertyInfo p, string pname, string value, bool shouldLog ) + { + object toSet = null; + string result = ConstructFromString( p.PropertyType, o, value, ref toSet ); + + if ( result != null ) + return result; + + return SetDirect( from, logobj, o, p, pname, toSet, shouldLog ); + } + + public static string InternalSetValue( object o, PropertyInfo p, string value ) + { + object toSet = null; + string result = ConstructFromString( p.PropertyType, o, value, ref toSet ); + + if ( result != null ) + return result; + + return SetDirect( o, p, toSet ); + } + } +} + +namespace Server +{ + public abstract class PropertyException : ApplicationException + { + protected Property m_Property; + + public Property Property + { + get { return m_Property; } + } + + public PropertyException( Property property, string message ) + : base( message ) + { + m_Property = property; + } + } + + public abstract class BindingException : PropertyException + { + public BindingException( Property property, string message ) + : base( property, message ) + { + } + } + + public sealed class NotYetBoundException : BindingException + { + public NotYetBoundException( Property property ) + : base( property, String.Format( "Property has not yet been bound." ) ) + { + } + } + + public sealed class AlreadyBoundException : BindingException + { + public AlreadyBoundException( Property property ) + : base( property, String.Format( "Property has already been bound." ) ) + { + } + } + + public sealed class UnknownPropertyException : BindingException + { + public UnknownPropertyException( Property property, string current ) + : base( property, String.Format( "Property '{0}' not found.", current ) ) + { + } + } + + public sealed class ReadOnlyException : BindingException + { + public ReadOnlyException( Property property ) + : base( property, "Property is read-only." ) + { + } + } + + public sealed class WriteOnlyException : BindingException + { + public WriteOnlyException( Property property ) + : base( property, "Property is write-only." ) + { + } + } + + public abstract class AccessException : PropertyException + { + public AccessException( Property property, string message ) + : base( property, message ) + { + } + } + + public sealed class InternalAccessException : AccessException + { + public InternalAccessException( Property property ) + : base( property, "Property is internal." ) + { + } + } + + public abstract class ClearanceException : AccessException + { + protected AccessLevel m_PlayerAccess; + protected AccessLevel m_NeededAccess; + + public AccessLevel PlayerAccess + { + get { return m_PlayerAccess; } + } + + public AccessLevel NeededAccess + { + get { return m_NeededAccess; } + } + + public ClearanceException( Property property, AccessLevel playerAccess, AccessLevel neededAccess, string accessType ) + : base( property, string.Format( + "You must be at least {0} to {1} this property.", + Mobile.GetAccessLevelName( neededAccess ), + accessType + ) ) + { + } + } + + public sealed class ReadAccessException : ClearanceException + { + public ReadAccessException( Property property, AccessLevel playerAccess, AccessLevel neededAccess ) + : base( property, playerAccess, neededAccess, "read" ) + { + } + } + + public sealed class WriteAccessException : ClearanceException + { + public WriteAccessException( Property property, AccessLevel playerAccess, AccessLevel neededAccess ) + : base( property, playerAccess, neededAccess, "write" ) + { + } + } + + public sealed class Property + { + private string m_Binding; + + private PropertyInfo[] m_Chain; + private PropertyAccess m_Access; + + public string Binding + { + get { return m_Binding; } + } + + public bool IsBound + { + get { return ( m_Chain != null ); } + } + + public PropertyAccess Access + { + get { return m_Access; } + } + + public PropertyInfo[] Chain + { + get + { + if ( !IsBound ) + throw new NotYetBoundException( this ); + + return m_Chain; + } + } + + public Type Type + { + get + { + if ( !IsBound ) + throw new NotYetBoundException( this ); + + return m_Chain[m_Chain.Length - 1].PropertyType; + } + } + + public bool CheckAccess( Mobile from ) + { + if ( !IsBound ) + throw new NotYetBoundException( this ); + + for ( int i = 0; i < m_Chain.Length; ++i ) + { + PropertyInfo prop = m_Chain[i]; + + bool isFinal = ( i == ( m_Chain.Length - 1 ) ); + + PropertyAccess access = m_Access; + + if ( !isFinal ) + access |= PropertyAccess.Read; + + CPA security = Properties.GetCPA( prop ); + + if ( security == null ) + throw new InternalAccessException( this ); + + if ( ( access & PropertyAccess.Read ) != 0 && from.AccessLevel < security.ReadLevel ) + throw new ReadAccessException( this, from.AccessLevel, security.ReadLevel ); + + if ( ( access & PropertyAccess.Write ) != 0 && (from.AccessLevel < security.WriteLevel || security.ReadOnly) ) + throw new WriteAccessException( this, from.AccessLevel, security.ReadLevel ); + } + + return true; + } + + public void BindTo( Type objectType, PropertyAccess desiredAccess ) + { + if ( IsBound ) + throw new AlreadyBoundException( this ); + + string[] split = m_Binding.Split( '.' ); + + PropertyInfo[] chain = new PropertyInfo[split.Length]; + + for ( int i = 0; i < split.Length; ++i ) + { + bool isFinal = ( i == ( chain.Length - 1 ) ); + + chain[i] = objectType.GetProperty( split[i], BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase ); + + if ( chain[i] == null ) + throw new UnknownPropertyException( this, split[i] ); + + objectType = chain[i].PropertyType; + + PropertyAccess access = desiredAccess; + + if ( !isFinal ) + access |= PropertyAccess.Read; + + if ( ( access & PropertyAccess.Read ) != 0 && !chain[i].CanRead ) + throw new WriteOnlyException( this ); + + if ( ( access & PropertyAccess.Write ) != 0 && !chain[i].CanWrite ) + throw new ReadOnlyException( this ); + } + + m_Access = desiredAccess; + m_Chain = chain; + } + + public Property( string binding ) + { + m_Binding = binding; + } + + public Property( PropertyInfo[] chain ) + { + m_Chain = chain; + } + + public override string ToString() + { + if ( !IsBound ) + return m_Binding; + + string[] toJoin = new string[m_Chain.Length]; + + for ( int i = 0; i < toJoin.Length; ++i ) + toJoin[i] = m_Chain[i].Name; + + return string.Join( ".", toJoin ); + } + + public static Property Parse( Type type, string binding, PropertyAccess access ) + { + Property prop = new Property( binding ); + + prop.BindTo( type, access ); + + return prop; + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Skills.cs b/Scripts/Commands/Skills.cs new file mode 100644 index 0000000..67fc939 --- /dev/null +++ b/Scripts/Commands/Skills.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; + +namespace Server.Commands +{ + public class SkillsCommand + { + public static void Initialize() + { + CommandSystem.Register( "SetSkill", AccessLevel.GameMaster, new CommandEventHandler( SetSkill_OnCommand ) ); + CommandSystem.Register( "GetSkill", AccessLevel.GameMaster, new CommandEventHandler( GetSkill_OnCommand ) ); + CommandSystem.Register( "SetAllSkills", AccessLevel.GameMaster, new CommandEventHandler( SetAllSkills_OnCommand ) ); + } + + [Usage( "SetSkill " )] + [Description( "Sets a skill value by name of a targeted mobile." )] + public static void SetSkill_OnCommand( CommandEventArgs arg ) + { + if ( arg.Length != 2 ) + { + arg.Mobile.SendMessage( "SetSkill " ); + } + else + { + SkillName skill; + try + { + skill = (SkillName)Enum.Parse( typeof( SkillName ), arg.GetString( 0 ), true ); + } + catch + { + arg.Mobile.SendLocalizedMessage( 1005631 ); // You have specified an invalid skill to set. + return; + } + arg.Mobile.Target = new SkillTarget( skill, arg.GetDouble( 1 ) ); + } + } + + [Usage( "SetAllSkills " )] + [Description( "Sets all skill values of a targeted mobile." )] + public static void SetAllSkills_OnCommand( CommandEventArgs arg ) + { + if ( arg.Length != 1 ) + { + arg.Mobile.SendMessage( "SetAllSkills " ); + } + else + { + arg.Mobile.Target = new AllSkillsTarget( arg.GetDouble( 0 ) ); + } + } + + [Usage( "GetSkill " )] + [Description( "Gets a skill value by name of a targeted mobile." )] + public static void GetSkill_OnCommand( CommandEventArgs arg ) + { + if ( arg.Length != 1 ) + { + arg.Mobile.SendMessage( "GetSkill " ); + } + else + { + SkillName skill; + try + { + skill = (SkillName)Enum.Parse( typeof( SkillName ), arg.GetString( 0 ), true ); + } + catch + { + arg.Mobile.SendLocalizedMessage( 1005631 ); // You have specified an invalid skill to set. + return; + } + + arg.Mobile.Target = new SkillTarget( skill ); + } + } + + public class AllSkillsTarget : Target + { + private double m_Value; + + public AllSkillsTarget( double value ) : base( -1, false, TargetFlags.None ) + { + m_Value = value; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + { + Mobile targ = (Mobile)targeted; + Server.Skills skills = targ.Skills; + + for ( int i = 0; i < skills.Length; ++i ) + skills[i].Base = m_Value; + + CommandLogging.LogChangeProperty( from, targ, "EverySkill.Base", m_Value.ToString() ); + } + else + { + from.SendMessage( "That does not have skills!" ); + } + } + } + + public class SkillTarget : Target + { + private bool m_Set; + private SkillName m_Skill; + private double m_Value; + + public SkillTarget( SkillName skill, double value ) : base( -1, false, TargetFlags.None ) + { + m_Set = true; + m_Skill = skill; + m_Value = value; + } + + public SkillTarget( SkillName skill ) : base( -1, false, TargetFlags.None ) + { + m_Set = false; + m_Skill = skill; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + { + Mobile targ = (Mobile)targeted; + Skill skill = targ.Skills[m_Skill]; + + if ( skill == null ) + return; + + if ( m_Set ) + { + skill.Base = m_Value; + CommandLogging.LogChangeProperty( from, targ, String.Format( "{0}.Base", m_Skill ), m_Value.ToString() ); + } + + from.SendMessage( "{0} : {1} (Base: {2})", m_Skill, skill.Value, skill.Base ); + } + else + { + from.SendMessage( "That does not have skills!" ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/SkillsMenu.cs b/Scripts/Commands/SkillsMenu.cs new file mode 100644 index 0000000..fbd8e3e --- /dev/null +++ b/Scripts/Commands/SkillsMenu.cs @@ -0,0 +1,40 @@ +using System; +using Server; +using Server.Targeting; +using Server.Gumps; + +namespace Server.Commands +{ + public class Skills + { + public static void Initialize() + { + Register(); + } + + public static void Register() + { + CommandSystem.Register( "Skills", AccessLevel.Counselor, new CommandEventHandler( Skills_OnCommand ) ); + } + + private class SkillsTarget : Target + { + public SkillsTarget( ) : base( -1, true, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + from.SendGump( new SkillsGump( from, (Mobile)o ) ); + } + } + + [Usage( "Skills" )] + [Description( "Opens a menu where you can view or edit skills of a targeted mobile." )] + private static void Skills_OnCommand( CommandEventArgs e ) + { + e.Mobile.Target = new SkillsTarget(); + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/Statics.cs b/Scripts/Commands/Statics.cs new file mode 100644 index 0000000..e47b19f --- /dev/null +++ b/Scripts/Commands/Statics.cs @@ -0,0 +1,570 @@ +using System; +using System.IO; +using System.Collections; +using Server; +using Server.Gumps; +using Server.Items; +using Server.Commands; +using Server.Targeting; +using System.Collections.Generic; + +namespace Server +{ + public class Statics + { + public static void Initialize() + { + CommandSystem.Register( "Freeze", AccessLevel.Administrator, new CommandEventHandler( Freeze_OnCommand ) ); + CommandSystem.Register( "FreezeMap", AccessLevel.Administrator, new CommandEventHandler( FreezeMap_OnCommand ) ); + CommandSystem.Register( "FreezeWorld", AccessLevel.Administrator, new CommandEventHandler( FreezeWorld_OnCommand ) ); + + CommandSystem.Register( "Unfreeze", AccessLevel.Administrator, new CommandEventHandler( Unfreeze_OnCommand ) ); + CommandSystem.Register( "UnfreezeMap", AccessLevel.Administrator, new CommandEventHandler( UnfreezeMap_OnCommand ) ); + CommandSystem.Register( "UnfreezeWorld", AccessLevel.Administrator, new CommandEventHandler( UnfreezeWorld_OnCommand ) ); + } + + private static Point3D NullP3D = new Point3D( int.MinValue, int.MinValue, int.MinValue ); + + [Usage( "Freeze" )] + [Description( "Makes a targeted area of dynamic items static." )] + public static void Freeze_OnCommand( CommandEventArgs e ) + { + BoundingBoxPicker.Begin( e.Mobile, new BoundingBoxCallback( FreezeBox_Callback ), null ); + } + + [Usage( "FreezeMap" )] + [Description( "Makes every dynamic item in your map static." )] + public static void FreezeMap_OnCommand( CommandEventArgs e ) + { + Map map = e.Mobile.Map; + + if ( map != null && map != Map.Internal ) + SendWarning( e.Mobile, "You are about to freeze all items in {0}.", BaseFreezeWarning, map, NullP3D, NullP3D, new WarningGumpCallback( FreezeWarning_Callback ) ); + } + + [Usage( "FreezeWorld" )] + [Description( "Makes every dynamic item on all maps static." )] + public static void FreezeWorld_OnCommand( CommandEventArgs e ) + { + SendWarning( e.Mobile, "You are about to freeze every item on every map.", BaseFreezeWarning, null, NullP3D, NullP3D, new WarningGumpCallback( FreezeWarning_Callback ) ); + } + + public static void SendWarning( Mobile m, string header, string baseWarning, Map map, Point3D start, Point3D end, WarningGumpCallback callback ) + { + m.SendGump( new WarningGump( 1060635, 30720, String.Format( baseWarning, String.Format( header, map ) ), 0xFFC000, 420, 400, callback, new StateInfo( map, start, end ) ) ); + } + + private const string BaseFreezeWarning = "{0} " + + "Those items will be removed from the world and placed into the server data files. " + + "Other players will not see the changes unless you distribute your data files to them.

" + + "This operation may not complete unless the server and client are using different data files. " + + "If you receive a message stating 'output data files could not be opened,' then you are probably sharing data files. " + + "Create a new directory for the world data files (statics*.mul and staidx*.mul) and add that to Scritps/Misc/DataPath.cs.

" + + "The change will be in effect immediately on the server, however, you must restart your client and update it's data files for the changes to become visible. " + + "It is strongly recommended that you make backup of the data files mentioned above. " + + "Do you wish to proceed?"; + + private static void FreezeBox_Callback( Mobile from, Map map, Point3D start, Point3D end, object state ) + { + SendWarning( from, "You are about to freeze a section of items.", BaseFreezeWarning, map, start, end, new WarningGumpCallback( FreezeWarning_Callback ) ); + } + + private static void FreezeWarning_Callback( Mobile from, bool okay, object state ) + { + if ( !okay ) + return; + + StateInfo si = (StateInfo)state; + + Freeze( from, si.m_Map, si.m_Start, si.m_End ); + } + + public static void Freeze( Mobile from, Map targetMap, Point3D start3d, Point3D end3d ) + { + Hashtable mapTable = new Hashtable(); + + if ( start3d == NullP3D && end3d == NullP3D ) + { + if ( targetMap == null ) + CommandLogging.WriteLine( from, "{0} {1} invoking freeze for every item in every map", from.AccessLevel, CommandLogging.Format( from ) ); + else + CommandLogging.WriteLine( from, "{0} {1} invoking freeze for every item in {0}", from.AccessLevel, CommandLogging.Format( from ), targetMap ); + + foreach ( Item item in World.Items.Values ) + { + if ( targetMap != null && item.Map != targetMap ) + continue; + + if ( item.Parent != null ) + continue; + + if ( item is Static || item is BaseFloor || item is BaseWall ) + { + Map itemMap = item.Map; + + if ( itemMap == null || itemMap == Map.Internal ) + continue; + + Hashtable table = (Hashtable)mapTable[itemMap]; + + if ( table == null ) + mapTable[itemMap] = table = new Hashtable(); + + Point2D p = new Point2D( item.X >> 3, item.Y >> 3 ); + + DeltaState state = (DeltaState)table[p]; + + if ( state == null ) + table[p] = state = new DeltaState( p ); + + state.m_List.Add( item ); + } + } + } + else if ( targetMap != null ) + { + Point2D start = targetMap.Bound( new Point2D( start3d ) ), end = targetMap.Bound( new Point2D( end3d ) ); + + CommandLogging.WriteLine( from, "{0} {1} invoking freeze from {2} to {3} in {4}", from.AccessLevel, CommandLogging.Format( from ), start, end, targetMap ); + + IPooledEnumerable eable = targetMap.GetItemsInBounds( new Rectangle2D( start.X, start.Y, end.X - start.X + 1, end.Y - start.Y + 1 ) ); + + foreach ( Item item in eable ) + { + if ( item is Static || item is BaseFloor || item is BaseWall ) + { + Map itemMap = item.Map; + + if ( itemMap == null || itemMap == Map.Internal ) + continue; + + Hashtable table = (Hashtable)mapTable[itemMap]; + + if ( table == null ) + mapTable[itemMap] = table = new Hashtable(); + + Point2D p = new Point2D( item.X >> 3, item.Y >> 3 ); + + DeltaState state = (DeltaState)table[p]; + + if ( state == null ) + table[p] = state = new DeltaState( p ); + + state.m_List.Add( item ); + } + } + + eable.Free(); + } + + if ( mapTable.Count == 0 ) + { + from.SendGump( new NoticeGump( 1060637, 30720, "No freezable items were found. Only the following item types are frozen:
- Static
- BaseFloor
- BaseWall", 0xFFC000, 320, 240, null, null ) ); + return; + } + + bool badDataFile = false; + + int totalFrozen = 0; + + foreach ( DictionaryEntry de in mapTable ) + { + Map map = (Map)de.Key; + Hashtable table = (Hashtable)de.Value; + + TileMatrix matrix = map.Tiles; + + using ( FileStream idxStream = OpenWrite( matrix.IndexStream ) ) + { + using ( FileStream mulStream = OpenWrite( matrix.DataStream ) ) + { + if ( idxStream == null || mulStream == null ) + { + badDataFile = true; + continue; + } + + BinaryReader idxReader = new BinaryReader( idxStream ); + + BinaryWriter idxWriter = new BinaryWriter( idxStream ); + BinaryWriter mulWriter = new BinaryWriter( mulStream ); + + foreach ( DeltaState state in table.Values ) + { + int oldTileCount; + StaticTile[] oldTiles = ReadStaticBlock( idxReader, mulStream, state.m_X, state.m_Y, matrix.BlockWidth, matrix.BlockHeight, out oldTileCount ); + + if ( oldTileCount < 0 ) + continue; + + int newTileCount = 0; + StaticTile[] newTiles = new StaticTile[state.m_List.Count]; + + for ( int i = 0; i < state.m_List.Count; ++i ) + { + Item item = state.m_List[i]; + + int xOffset = item.X - (state.m_X * 8); + int yOffset = item.Y - (state.m_Y * 8); + + if ( xOffset < 0 || xOffset >= 8 || yOffset < 0 || yOffset >= 8 ) + continue; + + StaticTile newTile = new StaticTile( (ushort)item.ItemID, (byte)xOffset, (byte)yOffset, (sbyte)item.Z, (short)item.Hue ); + + newTiles[newTileCount++] = newTile; + + item.Delete(); + + ++totalFrozen; + } + + int mulPos = -1; + int length = -1; + int extra = 0; + + if ( (oldTileCount + newTileCount) > 0 ) + { + mulWriter.Seek( 0, SeekOrigin.End ); + + mulPos = (int)mulWriter.BaseStream.Position; + length = (oldTileCount + newTileCount) * 7; + extra = 1; + + for ( int i = 0; i < oldTileCount; ++i ) + { + StaticTile toWrite = oldTiles[i]; + + mulWriter.Write( (ushort) toWrite.ID ); + mulWriter.Write( (byte) toWrite.X ); + mulWriter.Write( (byte) toWrite.Y ); + mulWriter.Write( (sbyte) toWrite.Z ); + mulWriter.Write( (short) toWrite.Hue ); + } + + for ( int i = 0; i < newTileCount; ++i ) + { + StaticTile toWrite = newTiles[i]; + + mulWriter.Write( (ushort) toWrite.ID ); + mulWriter.Write( (byte) toWrite.X ); + mulWriter.Write( (byte) toWrite.Y ); + mulWriter.Write( (sbyte) toWrite.Z ); + mulWriter.Write( (short) toWrite.Hue ); + } + + mulWriter.Flush(); + } + + int idxPos = ((state.m_X * matrix.BlockHeight) + state.m_Y) * 12; + + idxWriter.Seek( idxPos, SeekOrigin.Begin ); + idxWriter.Write( mulPos ); + idxWriter.Write( length ); + idxWriter.Write( extra ); + + idxWriter.Flush(); + + matrix.SetStaticBlock( state.m_X, state.m_Y, null ); + } + } + } + } + + if ( totalFrozen == 0 && badDataFile ) + from.SendGump( new NoticeGump( 1060637, 30720, "Output data files could not be opened and the freeze operation has been aborted.

This probably means your server and client are using the same data files. Instructions on how to resolve this can be found in the first warning window.", 0xFFC000, 320, 240, null, null ) ); + else + from.SendGump( new NoticeGump( 1060637, 30720, String.Format( "Freeze operation completed successfully.

{0} item{1} frozen.

You must restart your client and update it's data files to see the changes.", totalFrozen, totalFrozen != 1 ? "s were" : " was" ), 0xFFC000, 320, 240, null, null ) ); + } + + private const string BaseUnfreezeWarning = "{0} " + + "Those items will be removed from the static files and exchanged with unmovable dynamic items. " + + "Other players will not see the changes unless you distribute your data files to them.

" + + "This operation may not complete unless the server and client are using different data files. " + + "If you receive a message stating 'output data files could not be opened,' then you are probably sharing data files. " + + "Create a new directory for the world data files (statics*.mul and staidx*.mul) and add that to Scritps/Misc/DataPath.cs.

" + + "The change will be in effect immediately on the server, however, you must restart your client and update it's data files for the changes to become visible. " + + "It is strongly recommended that you make backup of the data files mentioned above. " + + "Do you wish to proceed?"; + + [Usage( "Unfreeze" )] + [Description( "Makes a targeted area of static items dynamic." )] + public static void Unfreeze_OnCommand( CommandEventArgs e ) + { + BoundingBoxPicker.Begin( e.Mobile, new BoundingBoxCallback( UnfreezeBox_Callback ), null ); + } + + [Usage( "UnfreezeMap" )] + [Description( "Makes every static item in your map dynamic." )] + public static void UnfreezeMap_OnCommand( CommandEventArgs e ) + { + Map map = e.Mobile.Map; + + if ( map != null && map != Map.Internal ) + SendWarning( e.Mobile, "You are about to unfreeze all items in {0}.", BaseUnfreezeWarning, map, NullP3D, NullP3D, new WarningGumpCallback( UnfreezeWarning_Callback ) ); + } + + [Usage( "UnfreezeWorld" )] + [Description( "Makes every static item on all maps dynamic." )] + public static void UnfreezeWorld_OnCommand( CommandEventArgs e ) + { + SendWarning( e.Mobile, "You are about to unfreeze every item on every map.", BaseUnfreezeWarning, null, NullP3D, NullP3D, new WarningGumpCallback( UnfreezeWarning_Callback ) ); + } + + private static void UnfreezeBox_Callback( Mobile from, Map map, Point3D start, Point3D end, object state ) + { + SendWarning( from, "You are about to unfreeze a section of items.", BaseUnfreezeWarning, map, start, end, new WarningGumpCallback( UnfreezeWarning_Callback ) ); + } + + private static void UnfreezeWarning_Callback( Mobile from, bool okay, object state ) + { + if ( !okay ) + return; + + StateInfo si = (StateInfo)state; + + Unfreeze( from, si.m_Map, si.m_Start, si.m_End ); + } + + private static void DoUnfreeze( Map map, Point2D start, Point2D end, ref bool badDataFile, ref int totalUnfrozen ) + { + start = map.Bound( start ); + end = map.Bound( end ); + + int xStartBlock = start.X >> 3; + int yStartBlock = start.Y >> 3; + int xEndBlock = end.X >> 3; + int yEndBlock = end.Y >> 3; + + int xTileStart = start.X, yTileStart = start.Y; + int xTileWidth = end.X - start.X + 1, yTileHeight = end.Y - start.Y + 1; + + TileMatrix matrix = map.Tiles; + + using ( FileStream idxStream = OpenWrite( matrix.IndexStream ) ) + { + using ( FileStream mulStream = OpenWrite( matrix.DataStream ) ) + { + if ( idxStream == null || mulStream == null ) + { + badDataFile = true; + return; + } + + BinaryReader idxReader = new BinaryReader( idxStream ); + + BinaryWriter idxWriter = new BinaryWriter( idxStream ); + BinaryWriter mulWriter = new BinaryWriter( mulStream ); + + for ( int x = xStartBlock; x <= xEndBlock; ++x ) + { + for ( int y = yStartBlock; y <= yEndBlock; ++y ) + { + int oldTileCount; + StaticTile[] oldTiles = ReadStaticBlock( idxReader, mulStream, x, y, matrix.BlockWidth, matrix.BlockHeight, out oldTileCount ); + + if ( oldTileCount < 0 ) + continue; + + int newTileCount = 0; + StaticTile[] newTiles = new StaticTile[oldTileCount]; + + int baseX = (x << 3) - xTileStart, baseY = (y << 3) - yTileStart; + + for ( int i = 0; i < oldTileCount; ++i ) + { + StaticTile oldTile = oldTiles[i]; + + int px = baseX + oldTile.X; + int py = baseY + oldTile.Y; + + if ( px < 0 || px >= xTileWidth || py < 0 || py >= yTileHeight ) + { + newTiles[newTileCount++] = oldTile; + } + else + { + ++totalUnfrozen; + + Item item = new Static( oldTile.ID ); + + item.Hue = oldTile.Hue; + + item.MoveToWorld( new Point3D( px + xTileStart, py + yTileStart, oldTile.Z ), map ); + } + } + + int mulPos = -1; + int length = -1; + int extra = 0; + + if ( newTileCount > 0 ) + { + mulWriter.Seek( 0, SeekOrigin.End ); + + mulPos = (int)mulWriter.BaseStream.Position; + length = newTileCount * 7; + extra = 1; + + for ( int i = 0; i < newTileCount; ++i ) + { + StaticTile toWrite = newTiles[i]; + + mulWriter.Write( (ushort) toWrite.ID ); + mulWriter.Write( (byte) toWrite.X ); + mulWriter.Write( (byte) toWrite.Y ); + mulWriter.Write( (sbyte) toWrite.Z ); + mulWriter.Write( (short) toWrite.Hue ); + } + + mulWriter.Flush(); + } + + int idxPos = ((x * matrix.BlockHeight) + y) * 12; + + idxWriter.Seek( idxPos, SeekOrigin.Begin ); + idxWriter.Write( mulPos ); + idxWriter.Write( length ); + idxWriter.Write( extra ); + + idxWriter.Flush(); + + matrix.SetStaticBlock( x, y, null ); + } + } + } + } + } + + public static void DoUnfreeze( Map map, ref bool badDataFile, ref int totalUnfrozen ) + { + DoUnfreeze( map, Point2D.Zero, new Point2D( map.Width - 1, map.Height - 1 ), ref badDataFile, ref totalUnfrozen ); + } + + public static void Unfreeze( Mobile from, Map map, Point3D start, Point3D end ) + { + int totalUnfrozen = 0; + bool badDataFile = false; + + if ( map == null ) + { + CommandLogging.WriteLine( from, "{0} {1} invoking unfreeze for every item in every map", from.AccessLevel, CommandLogging.Format( from ) ); + + DoUnfreeze( Map.Britannia, ref badDataFile, ref totalUnfrozen ); + DoUnfreeze( Map.Underworld, ref badDataFile, ref totalUnfrozen ); + DoUnfreeze( Map.Darkness, ref badDataFile, ref totalUnfrozen ); + DoUnfreeze( Map.Ocean, ref badDataFile, ref totalUnfrozen ); + DoUnfreeze( Map.Grassland, ref badDataFile, ref totalUnfrozen ); + } + else if ( start == NullP3D && end == NullP3D ) + { + CommandLogging.WriteLine( from, "{0} {1} invoking unfreeze for every item in {2}", from.AccessLevel, CommandLogging.Format( from ), map ); + + DoUnfreeze( map, ref badDataFile, ref totalUnfrozen ); + } + else + { + CommandLogging.WriteLine( from, "{0} {1} invoking unfreeze from {2} to {3} in {4}", from.AccessLevel, CommandLogging.Format( from ), new Point2D( start ), new Point2D( end ), map ); + + DoUnfreeze( map, new Point2D( start ), new Point2D( end ), ref badDataFile, ref totalUnfrozen ); + } + + if ( totalUnfrozen == 0 && badDataFile ) + from.SendGump( new NoticeGump( 1060637, 30720, "Output data files could not be opened and the unfreeze operation has been aborted.

This probably means your server and client are using the same data files. Instructions on how to resolve this can be found in the first warning window.", 0xFFC000, 320, 240, null, null ) ); + else + from.SendGump( new NoticeGump( 1060637, 30720, String.Format( "Unfreeze operation completed successfully.

{0} item{1} unfrozen.

You must restart your client and update it's data files to see the changes.", totalUnfrozen, totalUnfrozen != 1 ? "s were" : " was" ), 0xFFC000, 320, 240, null, null ) ); + } + + private static FileStream OpenWrite( FileStream orig ) + { + if ( orig == null ) + return null; + + try{ return new FileStream( orig.Name, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite ); } + catch{ return null; } + } + + private static byte[] m_Buffer; + + private static StaticTile[] m_TileBuffer = new StaticTile[128]; + + private static StaticTile[] ReadStaticBlock( BinaryReader idxReader, FileStream mulStream, int x, int y, int width, int height, out int count ) + { + try + { + if ( x < 0 || x >= width || y < 0 || y >= height ) + { + count = -1; + return m_TileBuffer; + } + + idxReader.BaseStream.Seek( ((x * height) + y) * 12, SeekOrigin.Begin ); + + int lookup = idxReader.ReadInt32(); + int length = idxReader.ReadInt32(); + + if ( lookup < 0 || length <= 0 ) + { + count = 0; + } + else + { + count = length / 7; + + mulStream.Seek( lookup, SeekOrigin.Begin ); + + if ( m_TileBuffer.Length < count ) + m_TileBuffer = new StaticTile[count]; + + StaticTile[] staTiles = m_TileBuffer; + + if ( m_Buffer == null || length > m_Buffer.Length ) + m_Buffer = new byte[length]; + + mulStream.Read( m_Buffer, 0, length ); + + int index = 0; + + for ( int i = 0; i < count; ++i ) + { + staTiles[i].Set((ushort)(m_Buffer[index++] | (m_Buffer[index++] << 8)), + (byte)m_Buffer[index++], (byte)m_Buffer[index++], (sbyte)m_Buffer[index++], + (short)(m_Buffer[index++] | (m_Buffer[index++] << 8))); + } + } + } + catch + { + count = -1; + } + + return m_TileBuffer; + } + + private class DeltaState + { + public int m_X, m_Y; + public List m_List; + + public DeltaState( Point2D p ) + { + m_X = p.X; + m_Y = p.Y; + m_List = new List(); + } + } + + private class StateInfo + { + public Map m_Map; + public Point3D m_Start, m_End; + + public StateInfo( Map map, Point3D start, Point3D end ) + { + m_Map = map; + m_Start = start; + m_End = end; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Commands/VisibilityList.cs b/Scripts/Commands/VisibilityList.cs new file mode 100644 index 0000000..796f9c0 --- /dev/null +++ b/Scripts/Commands/VisibilityList.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections; +using Server; +using Server.Mobiles; +using Server.Targeting; +using Server.Network; +using System.Collections.Generic; + +namespace Server.Commands +{ + public class VisibilityList + { + public static void Initialize() + { + EventSink.Login += new LoginEventHandler( OnLogin ); + + CommandSystem.Register( "Vis", AccessLevel.Counselor, new CommandEventHandler( Vis_OnCommand ) ); + CommandSystem.Register( "VisList", AccessLevel.Counselor, new CommandEventHandler( VisList_OnCommand ) ); + CommandSystem.Register( "VisClear", AccessLevel.Counselor, new CommandEventHandler( VisClear_OnCommand ) ); + } + + public static void OnLogin( LoginEventArgs e ) + { + if ( e.Mobile is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)e.Mobile; + + pm.VisibilityList.Clear(); + } + } + + [Usage( "Vis" )] + [Description( "Adds or removes a targeted player from your visibility list. Anyone on your visibility list will be able to see you at all times, even when you're hidden." )] + public static void Vis_OnCommand( CommandEventArgs e ) + { + if ( e.Mobile is PlayerMobile ) + { + e.Mobile.Target = new VisTarget(); + e.Mobile.SendMessage( "Select person to add or remove from your visibility list." ); + } + } + + [Usage( "VisList" )] + [Description( "Shows the names of everyone in your visibility list." )] + public static void VisList_OnCommand( CommandEventArgs e ) + { + if ( e.Mobile is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)e.Mobile; + List list = pm.VisibilityList; + + if ( list.Count > 0 ) + { + pm.SendMessage( "You are visible to {0} mobile{1}:", list.Count, list.Count == 1 ? "" : "s" ); + + for ( int i = 0; i < list.Count; ++i ) + pm.SendMessage( "#{0}: {1}", i+1, list[i].Name ); + } + else + { + pm.SendMessage( "Your visibility list is empty." ); + } + } + } + + [Usage( "VisClear" )] + [Description( "Removes everyone from your visibility list." )] + public static void VisClear_OnCommand( CommandEventArgs e ) + { + if ( e.Mobile is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)e.Mobile; + List list = new List( pm.VisibilityList ); + + pm.VisibilityList.Clear(); + pm.SendMessage( "Your visibility list has been cleared." ); + + for ( int i = 0; i < list.Count; ++i ) + { + Mobile m = list[i]; + + if ( !m.CanSee( pm ) && Utility.InUpdateRange( m, pm ) ) + m.Send( pm.RemovePacket ); + } + } + } + + private class VisTarget : Target + { + public VisTarget() : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( from is PlayerMobile && targeted is Mobile ) + { + PlayerMobile pm = (PlayerMobile)from; + Mobile targ = (Mobile)targeted; + + if ( targ.AccessLevel <= from.AccessLevel ) + { + List list = pm.VisibilityList; + + if ( list.Contains( targ ) ) + { + list.Remove( targ ); + from.SendMessage( "{0} has been removed from your visibility list.", targ.Name ); + } + else + { + list.Add( targ ); + from.SendMessage( "{0} has been added to your visibility list.", targ.Name ); + } + + if ( Utility.InUpdateRange( targ, from ) ) + { + NetState ns = targ.NetState; + + if ( ns != null ) { + if ( targ.CanSee( from ) ) + { + if ( ns.StygianAbyss ) + ns.Send( new MobileIncoming( targ, from ) ); + else + ns.Send( new MobileIncomingOld( targ, from ) ); + + if ( ObjectPropertyList.Enabled ) + { + ns.Send( from.OPLPacket ); + + foreach ( Item item in from.Items ) + ns.Send( item.OPLPacket ); + } + } + else + { + ns.Send( from.RemovePacket ); + } + } + } + } + else + { + from.SendMessage( "They can already see you!" ); + } + } + else + { + from.SendMessage( "Add only mobiles to your visibility list." ); + } + } + } + } +} diff --git a/Scripts/Commands/Wipe.cs b/Scripts/Commands/Wipe.cs new file mode 100644 index 0000000..c594ee7 --- /dev/null +++ b/Scripts/Commands/Wipe.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Multis; +using Server.Targeting; + +namespace Server.Commands +{ + public class Wipe + { + [Flags] + public enum WipeType + { + Items = 0x01, + Mobiles = 0x02, + Multis = 0x04, + All = Items | Mobiles | Multis + } + + public static void Initialize() + { + CommandSystem.Register( "Wipe", AccessLevel.GameMaster, new CommandEventHandler( WipeAll_OnCommand ) ); + CommandSystem.Register( "WipeItems", AccessLevel.GameMaster, new CommandEventHandler( WipeItems_OnCommand ) ); + CommandSystem.Register( "WipeNPCs", AccessLevel.GameMaster, new CommandEventHandler( WipeNPCs_OnCommand ) ); + CommandSystem.Register( "WipeMultis", AccessLevel.GameMaster, new CommandEventHandler( WipeMultis_OnCommand ) ); + } + + [Usage( "Wipe" )] + [Description( "Wipes all items and npcs in a targeted bounding box." )] + private static void WipeAll_OnCommand( CommandEventArgs e ) + { + BeginWipe( e.Mobile, WipeType.Items | WipeType.Mobiles ); + } + + [Usage( "WipeItems" )] + [Description( "Wipes all items in a targeted bounding box." )] + private static void WipeItems_OnCommand( CommandEventArgs e ) + { + BeginWipe( e.Mobile, WipeType.Items ); + } + + [Usage( "WipeNPCs" )] + [Description( "Wipes all npcs in a targeted bounding box." )] + private static void WipeNPCs_OnCommand( CommandEventArgs e ) + { + BeginWipe( e.Mobile, WipeType.Mobiles ); + } + + [Usage( "WipeMultis" )] + [Description( "Wipes all multis in a targeted bounding box." )] + private static void WipeMultis_OnCommand( CommandEventArgs e ) + { + BeginWipe( e.Mobile, WipeType.Multis ); + } + + public static void BeginWipe( Mobile from, WipeType type ) + { + BoundingBoxPicker.Begin( from, new BoundingBoxCallback( WipeBox_Callback ), type ); + } + + private static void WipeBox_Callback( Mobile from, Map map, Point3D start, Point3D end, object state ) + { + DoWipe( from, map, start, end, (WipeType)state ); + } + + public static void DoWipe( Mobile from, Map map, Point3D start, Point3D end, WipeType type ) + { + CommandLogging.WriteLine( from, "{0} {1} wiping from {2} to {3} in {5} ({4})", from.AccessLevel, CommandLogging.Format( from ), start, end, type, map ); + + bool mobiles = ( (type & WipeType.Mobiles) != 0 ); + bool multis = ( (type & WipeType.Multis) != 0 ); + bool items = ( (type & WipeType.Items) != 0 ); + + List toDelete = new List(); + + Rectangle2D rect = new Rectangle2D( start.X, start.Y, end.X - start.X + 1, end.Y - start.Y + 1 ); + + IPooledEnumerable eable; + + if ( (items || multis) && mobiles ) + eable = map.GetObjectsInBounds( rect ); + else if ( items || multis ) + eable = map.GetItemsInBounds( rect ); + else if ( mobiles ) + eable = map.GetMobilesInBounds( rect ); + else + return; + + foreach ( IEntity obj in eable ) + { + if ( items && (obj is Item) && !((obj is BaseMulti) || (obj is HouseSign)) ) + toDelete.Add( obj ); + else if ( multis && (obj is BaseMulti) ) + toDelete.Add( obj ); + else if ( mobiles && (obj is Mobile) && !((Mobile)obj).Player ) + toDelete.Add( obj ); + } + + eable.Free(); + + for ( int i = 0; i < toDelete.Count; ++i ) + toDelete[i].Delete(); + } + } +} \ No newline at end of file diff --git a/Scripts/Context Menus/AddToParty.cs b/Scripts/Context Menus/AddToParty.cs new file mode 100644 index 0000000..a666231 --- /dev/null +++ b/Scripts/Context Menus/AddToParty.cs @@ -0,0 +1,39 @@ +using System; +using Server.Mobiles; +using Server.Engines.PartySystem; + +namespace Server.ContextMenus +{ + public class AddToPartyEntry : ContextMenuEntry + { + private Mobile m_From; + private Mobile m_Target; + + public AddToPartyEntry( Mobile from, Mobile target ) : base( 0197, 12 ) + { + m_From = from; + m_Target = target; + } + + public override void OnClick() + { + Party p = Party.Get( m_From ); + Party mp = Party.Get( m_Target ); + + if ( m_From == m_Target ) + m_From.SendLocalizedMessage( 1005439 ); // You cannot add yourself to a party. + else if ( p != null && p.Leader != m_From ) + m_From.SendLocalizedMessage( 1005453 ); // You may only add members to the party if you are the leader. + else if ( p != null && (p.Members.Count + p.Candidates.Count) >= Party.Capacity ) + m_From.SendLocalizedMessage( 1008095 ); // You may only have 10 in your party (this includes candidates). + else if ( !m_Target.Player ) + m_From.SendLocalizedMessage( 1005444 ); // The creature ignores your offer. + else if ( mp != null && mp == p ) + m_From.SendLocalizedMessage( 1005440 ); // This person is already in your party! + else if ( mp != null ) + m_From.SendLocalizedMessage( 1005441 ); // This person is already in a party! + else + Party.Invite( m_From, m_Target ); + } + } +} diff --git a/Scripts/Context Menus/AddToSpellbookEntry.cs b/Scripts/Context Menus/AddToSpellbookEntry.cs new file mode 100644 index 0000000..3ec24ec --- /dev/null +++ b/Scripts/Context Menus/AddToSpellbookEntry.cs @@ -0,0 +1,64 @@ +using System; +using Server.Items; +using Server.Network; +using Server.Targeting; + +namespace Server.ContextMenus +{ + public class AddToSpellbookEntry : ContextMenuEntry + { + public AddToSpellbookEntry() : base( 6144, 3 ) + { + } + + public override void OnClick() + { + if ( Owner.From.CheckAlive() && Owner.Target is SpellScroll ) + Owner.From.Target = new InternalTarget( (SpellScroll)Owner.Target ); + } + + private class InternalTarget : Target + { + private SpellScroll m_Scroll; + + public InternalTarget( SpellScroll scroll ) : base( 3, false, TargetFlags.None ) + { + m_Scroll = scroll; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Spellbook ) + { + if ( from.CheckAlive() && !m_Scroll.Deleted && m_Scroll.Movable && m_Scroll.Amount >= 1 && m_Scroll.CheckItemUse( from ) ) + { + Spellbook book = (Spellbook)targeted; + + SpellbookType type = Spellbook.GetTypeForSpell( m_Scroll.SpellID ); + + if ( type != book.SpellbookType ) + { + } + else if ( book.HasSpell( m_Scroll.SpellID ) ) + { + from.SendLocalizedMessage( 500179 ); // That spell is already present in that spellbook. + } + else + { + int val = m_Scroll.SpellID - book.BookOffset; + + if ( val >= 0 && val < book.BookCount ) + { + book.Content |= (ulong)1 << val; + + m_Scroll.Consume(); + + from.Send( new Network.PlaySound( 0x249, book.GetWorldLocation() ) ); + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Context Menus/EatEntry.cs b/Scripts/Context Menus/EatEntry.cs new file mode 100644 index 0000000..83b21b9 --- /dev/null +++ b/Scripts/Context Menus/EatEntry.cs @@ -0,0 +1,25 @@ +using System; +using Server.Items; + +namespace Server.ContextMenus +{ + public class EatEntry : ContextMenuEntry + { + private Mobile m_From; + private Food m_Food; + + public EatEntry( Mobile from, Food food ) : base( 6135, 1 ) + { + m_From = from; + m_Food = food; + } + + public override void OnClick() + { + if ( m_Food.Deleted || !m_Food.Movable || !m_From.CheckAlive() || !m_Food.CheckItemUse( m_From ) ) + return; + + m_Food.Eat( m_From ); + } + } +} \ No newline at end of file diff --git a/Scripts/Context Menus/EjectPlayer.cs b/Scripts/Context Menus/EjectPlayer.cs new file mode 100644 index 0000000..bcbaec0 --- /dev/null +++ b/Scripts/Context Menus/EjectPlayer.cs @@ -0,0 +1,31 @@ +using System; +using Server.Mobiles; +using Server.Multis; + +namespace Server.ContextMenus +{ + public class EjectPlayerEntry : ContextMenuEntry + { + private Mobile m_From; + private Mobile m_Target; + private BaseHouse m_TargetHouse; + + public EjectPlayerEntry( Mobile from, Mobile target ) : base( 6206, 12 ) + { + m_From = from; + m_Target = target; + m_TargetHouse = BaseHouse.FindHouseAt( m_Target ); + } + + public override void OnClick() + { + if ( !m_From.Alive || m_TargetHouse.Deleted || !m_TargetHouse.IsFriend( m_From ) ) + return; + + if ( m_Target is Mobile ) + { + m_TargetHouse.Kick( m_From, (Mobile)m_Target ); + } + } + } +} diff --git a/Scripts/Context Menus/OpenInnEntry.cs b/Scripts/Context Menus/OpenInnEntry.cs new file mode 100644 index 0000000..cd2c178 --- /dev/null +++ b/Scripts/Context Menus/OpenInnEntry.cs @@ -0,0 +1,30 @@ +using System; +using Server.Items; + +namespace Server.ContextMenus +{ + public class OpenInnEntry : ContextMenuEntry + { + private Mobile m_Innkeeper; + + public OpenInnEntry( Mobile from, Mobile inn ) : base( 6105, 12 ) + { + m_Innkeeper = inn; + } + + public override void OnClick() + { + if ( !Owner.From.CheckAlive() ) + return; + + if ( Owner.From.Criminal ) + { + m_Innkeeper.Say( 500378 ); // Thou art a criminal and cannot access thy inn chest. + } + else + { + this.Owner.From.InnBox.Open(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Context Menus/TeachEntry.cs b/Scripts/Context Menus/TeachEntry.cs new file mode 100644 index 0000000..fcf6826 --- /dev/null +++ b/Scripts/Context Menus/TeachEntry.cs @@ -0,0 +1,30 @@ +using System; +using Server.Mobiles; + +namespace Server.ContextMenus +{ + public class TeachEntry : ContextMenuEntry + { + private SkillName m_Skill; + private BaseCreature m_Mobile; + private Mobile m_From; + + public TeachEntry( SkillName skill, BaseCreature m, Mobile from, bool enabled ) : base( 6000 + (int)skill ) + { + m_Skill = skill; + m_Mobile = m; + m_From = from; + + if ( !enabled ) + Flags |= Network.CMEFlags.Disabled; + } + + public override void OnClick() + { + if ( !m_From.CheckAlive() ) + return; + + m_Mobile.Teach( m_Skill, m_From, 0, false ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Chat/Channel.cs b/Scripts/Engines/Chat/Channel.cs new file mode 100644 index 0000000..4c9e429 --- /dev/null +++ b/Scripts/Engines/Chat/Channel.cs @@ -0,0 +1,548 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Engines.Chat +{ + public class Channel + { + private string m_Name; + private string m_Password; + private List m_Users, m_Banned, m_Moderators, m_Voices; + private bool m_VoiceRestricted; + private bool m_AlwaysAvailable; + + public Channel( string name ) + { + m_Name = name; + + m_Users = new List(); + m_Banned = new List(); + m_Moderators = new List(); + m_Voices = new List(); + } + + public Channel( string name, string password ) : this( name ) + { + m_Password = password; + } + + public string Name + { + get + { + return m_Name; + } + set + { + SendCommand( ChatCommand.RemoveChannel, m_Name ); + m_Name = value; + SendCommand( ChatCommand.AddChannel, m_Name ); + SendCommand( ChatCommand.JoinedChannel, m_Name ); + } + } + + public string Password + { + get + { + return m_Password; + } + set + { + string newValue = null; + + if ( value != null ) + { + newValue = value.Trim(); + + if ( String.IsNullOrEmpty( newValue ) ) + newValue = null; + } + + m_Password = newValue; + } + } + + public bool Contains( ChatUser user ) + { + return m_Users.Contains( user ); + } + + public bool IsBanned( ChatUser user ) + { + return m_Banned.Contains( user ); + } + + public bool CanTalk( ChatUser user ) + { + return ( !m_VoiceRestricted || m_Voices.Contains( user ) || m_Moderators.Contains( user ) ); + } + + public bool IsModerator( ChatUser user ) + { + return m_Moderators.Contains( user ); + } + + public bool IsVoiced( ChatUser user ) + { + return m_Voices.Contains( user ); + } + + public bool ValidatePassword( string password ) + { + return ( m_Password == null || Insensitive.Equals( m_Password, password ) ); + } + + public bool ValidateModerator( ChatUser user ) + { + if ( user != null && !IsModerator( user ) ) + { + user.SendMessage( 29 ); // You must have operator status to do this. + return false; + } + + return true; + } + + public bool ValidateAccess( ChatUser from, ChatUser target ) + { + if ( from != null && target != null && from.Mobile.AccessLevel < target.Mobile.AccessLevel ) + { + from.Mobile.SendMessage( "Your access level is too low to do this." ); + return false; + } + + return true; + } + + public bool AddUser( ChatUser user ) + { + return AddUser( user, null ); + } + + public bool AddUser( ChatUser user, string password ) + { + if ( Contains( user ) ) + { + user.SendMessage( 46, m_Name ); // You are already in the conference '%1'. + return true; + } + else if ( IsBanned( user ) ) + { + user.SendMessage( 64 ); // You have been banned from this conference. + return false; + } + else if ( !ValidatePassword( password ) ) + { + user.SendMessage( 34 ); // That is not the correct password. + return false; + } + else + { + if ( user.CurrentChannel != null ) + user.CurrentChannel.RemoveUser( user ); // Remove them from their current channel first + + ChatSystem.SendCommandTo( user.Mobile, ChatCommand.JoinedChannel, m_Name ); + + SendCommand( ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username ); + + m_Users.Add( user ); + user.CurrentChannel = this; + + if ( user.Mobile.AccessLevel >= AccessLevel.GameMaster || (!m_AlwaysAvailable && m_Users.Count == 1) ) + AddModerator( user ); + + SendUsersTo( user ); + + return true; + } + } + + public void RemoveUser( ChatUser user ) + { + if ( Contains( user ) ) + { + m_Users.Remove( user ); + user.CurrentChannel = null; + + if ( m_Moderators.Contains( user ) ) + m_Moderators.Remove( user ); + + if ( m_Voices.Contains( user ) ) + m_Voices.Remove( user ); + + SendCommand( ChatCommand.RemoveUserFromChannel, user, user.Username ); + ChatSystem.SendCommandTo( user.Mobile, ChatCommand.LeaveChannel ); + + if ( m_Users.Count == 0 && !m_AlwaysAvailable ) + RemoveChannel( this ); + } + } + + public void AdBan( ChatUser user ) + { + AddBan( user, null ); + } + + public void AddBan( ChatUser user, ChatUser moderator ) + { + if ( !ValidateModerator( moderator ) || !ValidateAccess( moderator, user ) ) + return; + + if ( !m_Banned.Contains( user ) ) + m_Banned.Add( user ); + + Kick( user, moderator, true ); + } + + public void RemoveBan( ChatUser user ) + { + if ( m_Banned.Contains( user ) ) + m_Banned.Remove( user ); + } + + public void Kick( ChatUser user ) + { + Kick( user, null ); + } + + public void Kick( ChatUser user, ChatUser moderator ) + { + Kick( user, moderator, false ); + } + + public void Kick( ChatUser user, ChatUser moderator, bool wasBanned ) + { + if ( !ValidateModerator( moderator ) || !ValidateAccess( moderator, user ) ) + return; + + if ( Contains( user ) ) + { + if ( moderator != null ) + { + if ( wasBanned ) + user.SendMessage( 63, moderator.Username ); // %1, a conference moderator, has banned you from the conference. + else + user.SendMessage( 45, moderator.Username ); // %1, a conference moderator, has kicked you out of the conference. + } + + RemoveUser( user ); + ChatSystem.SendCommandTo( user.Mobile, ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username ); + + SendMessage( 44, user.Username ) ; // %1 has been kicked out of the conference. + } + + if ( wasBanned && moderator != null ) + moderator.SendMessage( 62, user.Username ); // You are banning %1 from this conference. + } + + public bool VoiceRestricted + { + get + { + return m_VoiceRestricted; + } + set + { + m_VoiceRestricted = value; + + if ( value ) + SendMessage( 56 ); // From now on, only moderators will have speaking privileges in this conference by default. + else + SendMessage( 55 ); // From now on, everyone in the conference will have speaking privileges by default. + } + } + + public bool AlwaysAvailable + { + get + { + return m_AlwaysAvailable; + } + set + { + m_AlwaysAvailable = value; + } + } + + public void AddVoiced( ChatUser user ) + { + AddVoiced( user, null ); + } + + public void AddVoiced( ChatUser user, ChatUser moderator ) + { + if ( !ValidateModerator( moderator ) ) + return; + + if ( !IsBanned( user ) && !IsModerator( user ) && !IsVoiced( user ) ) + { + m_Voices.Add( user ); + + if ( moderator != null ) + user.SendMessage( 54, moderator.Username ); // %1, a conference moderator, has granted you speaking priviledges in this conference. + + SendMessage( 52, user, user.Username ); // %1 now has speaking privileges in this conference. + SendCommand( ChatCommand.AddUserToChannel, user, user.GetColorCharacter() + user.Username ); + } + } + + public void RemoveVoiced( ChatUser user, ChatUser moderator ) + { + if ( !ValidateModerator( moderator ) || !ValidateAccess( moderator, user ) ) + return; + + if ( !IsModerator( user ) && IsVoiced( user ) ) + { + m_Voices.Remove( user ); + + if ( moderator != null ) + user.SendMessage( 53, moderator.Username ); // %1, a conference moderator, has removed your speaking priviledges for this conference. + + SendMessage( 51, user, user.Username ); // %1 no longer has speaking privileges in this conference. + SendCommand( ChatCommand.AddUserToChannel, user, user.GetColorCharacter() + user.Username ); + } + } + + public void AddModerator( ChatUser user ) + { + AddModerator( user, null ); + } + + public void AddModerator( ChatUser user, ChatUser moderator ) + { + if ( !ValidateModerator( moderator ) ) + return; + + if ( IsBanned( user ) || IsModerator( user ) ) + return; + + if ( IsVoiced( user ) ) + m_Voices.Remove( user ); + + m_Moderators.Add( user ); + + if ( moderator != null ) + user.SendMessage( 50, moderator.Username ); // %1 has made you a conference moderator. + + SendMessage( 48, user, user.Username ); // %1 is now a conference moderator. + SendCommand( ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username ); + } + + public void RemoveModerator( ChatUser user ) + { + RemoveModerator( user, null ); + } + + public void RemoveModerator( ChatUser user, ChatUser moderator ) + { + if ( !ValidateModerator( moderator ) || !ValidateAccess( moderator, user ) ) + return; + + if ( IsModerator( user ) ) + { + m_Moderators.Remove( user ); + + if ( moderator != null ) + user.SendMessage( 49, moderator.Username ); // %1 has removed you from the list of conference moderators. + + SendMessage( 47, user, user.Username ); // %1 is no longer a conference moderator. + SendCommand( ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username ); + } + } + + public void SendMessage( int number ) + { + SendMessage( number, null, null, null ); + } + + public void SendMessage( int number, string param1 ) + { + SendMessage( number, null, param1, null ); + } + + public void SendMessage( int number, string param1, string param2 ) + { + SendMessage( number, null, param1, param2 ); + } + + public void SendMessage( int number, ChatUser initiator ) + { + SendMessage( number, initiator, null, null ); + } + + public void SendMessage( int number, ChatUser initiator, string param1 ) + { + SendMessage( number, initiator, param1, null ); + } + + public void SendMessage( int number, ChatUser initiator, string param1, string param2 ) + { + for ( int i = 0; i < m_Users.Count; ++i ) + { + ChatUser user = m_Users[i]; + + if ( user == initiator ) + continue; + + if ( user.CheckOnline() ) + user.SendMessage( number, param1, param2 ); + else if ( !Contains( user ) ) + --i; + } + } + + public void SendIgnorableMessage( int number, ChatUser from, string param1, string param2 ) + { + for ( int i = 0; i < m_Users.Count; ++i ) + { + ChatUser user = m_Users[i]; + + if ( user.IsIgnored( from ) ) + continue; + + if ( user.CheckOnline() ) + user.SendMessage( number, from.Mobile, param1, param2 ); + else if ( !Contains( user ) ) + --i; + } + } + + public void SendCommand( ChatCommand command ) + { + SendCommand( command, null, null, null ); + } + + public void SendCommand( ChatCommand command, string param1 ) + { + SendCommand( command, null, param1, null ); + } + + public void SendCommand( ChatCommand command, string param1, string param2 ) + { + SendCommand( command, null, param1, param2 ); + } + + public void SendCommand( ChatCommand command, ChatUser initiator ) + { + SendCommand( command, initiator, null, null ); + } + + public void SendCommand( ChatCommand command, ChatUser initiator, string param1 ) + { + SendCommand( command, initiator, param1, null ); + } + + public void SendCommand( ChatCommand command, ChatUser initiator, string param1, string param2 ) + { + for ( int i = 0; i < m_Users.Count; ++i ) + { + ChatUser user = m_Users[i]; + + if ( user == initiator ) + continue; + + if ( user.CheckOnline() ) + ChatSystem.SendCommandTo( user.Mobile, command, param1, param2 ); + else if ( !Contains( user ) ) + --i; + } + } + + public void SendUsersTo( ChatUser to ) + { + for ( int i = 0; i < m_Users.Count; ++i ) + { + ChatUser user = m_Users[i]; + + ChatSystem.SendCommandTo( to.Mobile, ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username ); + } + } + + private static List m_Channels = new List(); + + public static List Channels + { + get + { + return m_Channels; + } + } + + public static void SendChannelsTo( ChatUser user ) + { + for ( int i = 0; i < m_Channels.Count; ++i ) + { + Channel channel = m_Channels[i]; + + if ( !channel.IsBanned( user ) ) + ChatSystem.SendCommandTo( user.Mobile, ChatCommand.AddChannel, channel.Name, "0" ); + } + } + + public static Channel AddChannel( string name ) + { + return AddChannel( name, null ); + } + + public static Channel AddChannel( string name, string password ) + { + Channel channel = FindChannelByName( name ); + + if ( channel == null ) + { + channel = new Channel( name, password ); + m_Channels.Add( channel ); + } + + ChatUser.GlobalSendCommand( ChatCommand.AddChannel, name, "0" ) ; + + return channel; + } + + public static void RemoveChannel( string name ) + { + RemoveChannel( FindChannelByName( name ) ); + } + + public static void RemoveChannel( Channel channel ) + { + if ( channel == null ) + return; + + if ( m_Channels.Contains( channel ) && channel.m_Users.Count == 0 ) + { + ChatUser.GlobalSendCommand( ChatCommand.RemoveChannel, channel.Name ) ; + + channel.m_Moderators.Clear(); + channel.m_Voices.Clear(); + + m_Channels.Remove( channel ); + } + } + + public static Channel FindChannelByName( string name ) + { + for ( int i = 0; i < m_Channels.Count; ++i ) + { + Channel channel = m_Channels[i]; + + if ( channel.m_Name == name ) + return channel; + } + + return null; + } + + public static void Initialize() + { + AddStaticChannel( "Newbie Help" ); + } + + public static void AddStaticChannel( string name ) + { + AddChannel( name ).AlwaysAvailable = true; + } + } +} diff --git a/Scripts/Engines/Chat/Chat.cs b/Scripts/Engines/Chat/Chat.cs new file mode 100644 index 0000000..93956e7 --- /dev/null +++ b/Scripts/Engines/Chat/Chat.cs @@ -0,0 +1,174 @@ +using System; +using Server; +using Server.Misc; +using Server.Network; +using Server.Accounting; + +namespace Server.Engines.Chat +{ + public class ChatSystem + { + private static bool m_Enabled = true; + + public static bool Enabled + { + get{ return m_Enabled; } + set{ m_Enabled = value; } + } + + public static void Initialize() + { + PacketHandlers.Register( 0xB5, 0x40, true, new OnPacketReceive( OpenChatWindowRequest ) ); + PacketHandlers.Register( 0xB3, 0, true, new OnPacketReceive( ChatAction ) ); + } + + public static void SendCommandTo( Mobile to, ChatCommand type ) + { + SendCommandTo( to, type, null, null ); + } + + public static void SendCommandTo( Mobile to, ChatCommand type, string param1 ) + { + SendCommandTo( to, type, param1, null ); + } + + public static void SendCommandTo( Mobile to, ChatCommand type, string param1, string param2 ) + { + if ( to != null ) + to.Send( new ChatMessagePacket( null, (int)type + 20, param1, param2 ) ); + } + + public static void OpenChatWindowRequest( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + if ( !m_Enabled ) + { + from.SendMessage( "The chat system has been disabled." ); + return; + } + + pvSrc.Seek( 2, System.IO.SeekOrigin.Begin ); + string chatName = pvSrc.ReadUnicodeStringSafe( ( 0x40 - 2 ) >> 1 ).Trim(); + + Account acct = state.Account as Account; + + string accountChatName = null; + + if ( acct != null ) + accountChatName = acct.GetTag( "ChatName" ); + + if ( accountChatName != null ) + accountChatName = accountChatName.Trim(); + + if ( accountChatName != null && accountChatName.Length > 0 ) + { + if ( chatName.Length > 0 && chatName != accountChatName ) + from.SendMessage( "You cannot change chat nickname once it has been set." ); + } + else + { + if ( chatName == null || chatName.Length == 0 ) + { + SendCommandTo( from, ChatCommand.AskNewNickname ); + return; + } + + if ( NameVerification.Validate( chatName, 2, 31, true, true, true, 0, NameVerification.SpaceDashPeriodQuote ) && chatName.ToLower().IndexOf( "system" ) == -1 ) + { + // TODO: Optimize this search + + foreach ( Account checkAccount in Accounts.GetAccounts() ) + { + string existingName = checkAccount.GetTag( "ChatName" ); + + if ( existingName != null ) + { + existingName = existingName.Trim(); + + if ( Insensitive.Equals( existingName, chatName ) ) + { + from.SendMessage( "Nickname already in use." ); + SendCommandTo( from, ChatCommand.AskNewNickname ); + return; + } + } + } + + accountChatName = chatName; + + if ( acct != null ) + acct.AddTag( "ChatName", chatName ); + } + else + { + from.SendLocalizedMessage( 501173 ); // That name is disallowed. + SendCommandTo( from, ChatCommand.AskNewNickname ); + return; + } + } + + SendCommandTo( from, ChatCommand.OpenChatWindow, accountChatName ); + ChatUser.AddChatUser( from ); + } + + public static ChatUser SearchForUser( ChatUser from, string name ) + { + ChatUser user = ChatUser.GetChatUser( name ); + + if ( user == null ) + from.SendMessage( 32, name ); // There is no player named '%1'. + + return user; + } + + public static void ChatAction( NetState state, PacketReader pvSrc ) + { + if ( !m_Enabled ) + return; + + try + { + Mobile from = state.Mobile; + ChatUser user = ChatUser.GetChatUser( from ); + + if ( user == null ) + return; + + string lang = pvSrc.ReadStringSafe( 4 ); + int actionID = pvSrc.ReadInt16(); + string param = pvSrc.ReadUnicodeString(); + + ChatActionHandler handler = ChatActionHandlers.GetHandler( actionID ); + + if ( handler != null ) + { + Channel channel = user.CurrentChannel; + + if ( handler.RequireConference && channel == null ) + { + user.SendMessage( 31 ); /* You must be in a conference to do this. + * To join a conference, select one from the Conference menu. + */ + } + else if ( handler.RequireModerator && !user.IsModerator ) + { + user.SendMessage( 29 ); // You must have operator status to do this. + } + else + { + handler.Callback( user, channel, param ); + } + } + else + { + Console.WriteLine( "Client: {0}: Unknown chat action 0x{1:X}: {2}", state, actionID, param ); + } + } + catch ( Exception e ) + { + Console.WriteLine( e ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Chat/ChatActionHandler.cs b/Scripts/Engines/Chat/ChatActionHandler.cs new file mode 100644 index 0000000..c1bb659 --- /dev/null +++ b/Scripts/Engines/Chat/ChatActionHandler.cs @@ -0,0 +1,24 @@ +using System; + +namespace Server.Engines.Chat +{ + public delegate void OnChatAction( ChatUser from, Channel channel, string param ); + + public class ChatActionHandler + { + private bool m_RequireModerator; + private bool m_RequireConference; + private OnChatAction m_Callback; + + public bool RequireModerator{ get{ return m_RequireModerator; } } + public bool RequireConference{ get{ return m_RequireConference; } } + public OnChatAction Callback{ get{ return m_Callback; } } + + public ChatActionHandler( bool requireModerator, bool requireConference, OnChatAction callback ) + { + m_RequireModerator = requireModerator; + m_RequireConference = requireConference; + m_Callback = callback; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Chat/ChatActionHandlers.cs b/Scripts/Engines/Chat/ChatActionHandlers.cs new file mode 100644 index 0000000..9269993 --- /dev/null +++ b/Scripts/Engines/Chat/ChatActionHandlers.cs @@ -0,0 +1,359 @@ +using System; + +namespace Server.Engines.Chat +{ + public class ChatActionHandlers + { + private static ChatActionHandler[] m_Handlers; + + static ChatActionHandlers() + { + m_Handlers = new ChatActionHandler[0x100]; + + Register( 0x41, true, true, new OnChatAction( ChangeChannelPassword ) ); + + Register( 0x58, false, false, new OnChatAction( LeaveChat ) ); + + Register( 0x61, false, true, new OnChatAction( ChannelMessage ) ); + Register( 0x62, false, false, new OnChatAction( JoinChannel ) ); + Register( 0x63, false, false, new OnChatAction( JoinNewChannel ) ); + Register( 0x64, true, true, new OnChatAction( RenameChannel ) ); + Register( 0x65, false, false, new OnChatAction( PrivateMessage ) ); + Register( 0x66, false, false, new OnChatAction( AddIgnore ) ); + Register( 0x67, false, false, new OnChatAction( RemoveIgnore ) ); + Register( 0x68, false, false, new OnChatAction( ToggleIgnore ) ); + Register( 0x69, true, true, new OnChatAction( AddVoice ) ); + Register( 0x6A, true, true, new OnChatAction( RemoveVoice ) ); + Register( 0x6B, true, true, new OnChatAction( ToggleVoice ) ); + Register( 0x6C, true, true, new OnChatAction( AddModerator ) ); + Register( 0x6D, true, true, new OnChatAction( RemoveModerator ) ); + Register( 0x6E, true, true, new OnChatAction( ToggleModerator ) ); + Register( 0x6F, false, false, new OnChatAction( AllowPrivateMessages ) ); + Register( 0x70, false, false, new OnChatAction( DisallowPrivateMessages ) ); + Register( 0x71, false, false, new OnChatAction( TogglePrivateMessages ) ); + Register( 0x72, false, false, new OnChatAction( ShowCharacterName ) ); + Register( 0x73, false, false, new OnChatAction( HideCharacterName ) ); + Register( 0x74, false, false, new OnChatAction( ToggleCharacterName ) ); + Register( 0x75, false, false, new OnChatAction( QueryWhoIs ) ); + Register( 0x76, true, true, new OnChatAction( Kick ) ); + Register( 0x77, true, true, new OnChatAction( EnableDefaultVoice ) ); + Register( 0x78, true, true, new OnChatAction( DisableDefaultVoice ) ); + Register( 0x79, true, true, new OnChatAction( ToggleDefaultVoice ) ); + Register( 0x7A, false, true, new OnChatAction( EmoteMessage ) ); + } + + public static void Register( int actionID, bool requireModerator, bool requireConference, OnChatAction callback ) + { + if ( actionID >= 0 && actionID < m_Handlers.Length ) + m_Handlers[actionID] = new ChatActionHandler( requireModerator, requireConference, callback ); + } + + public static ChatActionHandler GetHandler( int actionID ) + { + if ( actionID >= 0 && actionID < m_Handlers.Length ) + return m_Handlers[actionID]; + + return null; + } + + public static void ChannelMessage( ChatUser from, Channel channel, string param ) + { + if ( channel.CanTalk( from ) ) + channel.SendIgnorableMessage( 57, from, from.GetColorCharacter() + from.Username, param ); // %1: %2 + else + from.SendMessage( 36 ); // The moderator of this conference has not given you speaking priviledges. + } + + public static void EmoteMessage( ChatUser from, Channel channel, string param ) + { + if ( channel.CanTalk( from ) ) + channel.SendIgnorableMessage( 58, from, from.GetColorCharacter() + from.Username, param ); // %1 %2 + else + from.SendMessage( 36 ); // The moderator of this conference has not given you speaking priviledges. + } + + public static void PrivateMessage( ChatUser from, Channel channel, string param ) + { + int indexOf = param.IndexOf( ' ' ); + + string name = param.Substring( 0, indexOf ); + string text = param.Substring( indexOf + 1 ); + + ChatUser target = ChatSystem.SearchForUser( from, name ); + + if ( target == null ) + return; + + if ( target.IsIgnored( from ) ) + from.SendMessage( 35, target.Username ); // %1 has chosen to ignore you. None of your messages to them will get through. + else if ( target.IgnorePrivateMessage ) + from.SendMessage( 42, target.Username ); // %1 has chosen to not receive private messages at the moment. + else + target.SendMessage( 59, from.Mobile, from.GetColorCharacter() + from.Username, text ); // [%1]: %2 + } + + public static void LeaveChat( ChatUser from, Channel channel, string param ) + { + ChatUser.RemoveChatUser( from ); + } + + public static void ChangeChannelPassword( ChatUser from, Channel channel, string param ) + { + channel.Password = param; + from.SendMessage( 60 ); // The password to the conference has been changed. + } + + public static void AllowPrivateMessages( ChatUser from, Channel channel, string param ) + { + from.IgnorePrivateMessage = false; + from.SendMessage( 37 ); // You can now receive private messages. + } + + public static void DisallowPrivateMessages( ChatUser from, Channel channel, string param ) + { + from.IgnorePrivateMessage = true; + from.SendMessage( 38 ); /* You will no longer receive private messages. + * Those who send you a message will be notified that you are blocking incoming messages. + */ + } + + public static void TogglePrivateMessages( ChatUser from, Channel channel, string param ) + { + from.IgnorePrivateMessage = !from.IgnorePrivateMessage; + from.SendMessage( from.IgnorePrivateMessage ? 38 : 37 ); // See above for messages + } + + public static void ShowCharacterName( ChatUser from, Channel channel, string param ) + { + from.Anonymous = false; + from.SendMessage( 39 ); // You are now showing your character name to any players who inquire with the whois command. + } + + public static void HideCharacterName( ChatUser from, Channel channel, string param ) + { + from.Anonymous = true; + from.SendMessage( 40 ); // You are no longer showing your character name to any players who inquire with the whois command. + } + + public static void ToggleCharacterName( ChatUser from, Channel channel, string param ) + { + from.Anonymous = !from.Anonymous; + from.SendMessage( from.Anonymous ? 40 : 39 ); // See above for messages + } + + public static void JoinChannel( ChatUser from, Channel channel, string param ) + { + string name; + string password = null; + + int start = param.IndexOf( '\"' ); + + if ( start >= 0 ) + { + int end = param.IndexOf( '\"', ++start ); + + if ( end >= 0 ) + { + name = param.Substring( start, end - start ); + password = param.Substring( ++end ); + } + else + { + name = param.Substring( start ); + } + } + else + { + int indexOf = param.IndexOf( ' ' ); + + if ( indexOf >= 0 ) + { + name = param.Substring( 0, indexOf++ ); + password = param.Substring( indexOf ); + } + else + { + name = param; + } + } + + if ( password != null ) + password = password.Trim(); + + if ( password != null && password.Length == 0 ) + password = null; + + Channel joined = Channel.FindChannelByName( name ); + + if ( joined == null ) + from.SendMessage( 33, name ); // There is no conference named '%1'. + else + joined.AddUser( from, password ); + } + + public static void JoinNewChannel( ChatUser from, Channel channel, string param ) + { + if ( (param = param.Trim()).Length == 0 ) + return; + + string name; + string password = null; + + int start = param.IndexOf( '{' ); + + if ( start >= 0 ) + { + name = param.Substring( 0, start++ ); + + int end = param.IndexOf( '}', start ); + + if ( end >= start ) + password = param.Substring( start, end - start ); + } + else + { + name = param; + } + + if ( password != null ) + password = password.Trim(); + + if ( password != null && password.Length == 0 ) + password = null; + + Channel.AddChannel( name, password ).AddUser( from, password ); + } + + public static void AddIgnore( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target == null ) + return; + + from.AddIgnored( target ); + } + + public static void RemoveIgnore( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target == null ) + return; + + from.RemoveIgnored( target ); + } + + public static void ToggleIgnore( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target == null ) + return; + + if ( from.IsIgnored( target ) ) + from.RemoveIgnored( target ); + else + from.AddIgnored( target ); + } + + public static void AddVoice( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target != null ) + channel.AddVoiced( target, from ); + } + + public static void RemoveVoice( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target != null ) + channel.RemoveVoiced( target, from ); + } + + public static void ToggleVoice( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target == null ) + return; + + if ( channel.IsVoiced( target ) ) + channel.RemoveVoiced( target, from ); + else + channel.AddVoiced( target, from ); + } + + public static void AddModerator( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target != null ) + channel.AddModerator( target, from ); + } + + public static void RemoveModerator( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target != null ) + channel.RemoveModerator( target, from ); + } + + public static void ToggleModerator( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target == null ) + return; + + if ( channel.IsModerator( target ) ) + channel.RemoveModerator( target, from ); + else + channel.AddModerator( target, from ); + } + + public static void RenameChannel( ChatUser from, Channel channel, string param ) + { + channel.Name = param; + } + + public static void QueryWhoIs( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target == null ) + return; + + if ( target.Anonymous ) + from.SendMessage( 41, target.Username ); // %1 is remaining anonymous. + else + from.SendMessage( 43, target.Username, target.Mobile.Name ); // %2 is known in the lands of Britannia as %2. + } + + public static void Kick( ChatUser from, Channel channel, string param ) + { + ChatUser target = ChatSystem.SearchForUser( from, param ); + + if ( target != null ) + channel.Kick( target, from ); + } + + public static void EnableDefaultVoice( ChatUser from, Channel channel, string param ) + { + channel.VoiceRestricted = false; + } + + public static void DisableDefaultVoice( ChatUser from, Channel channel, string param ) + { + channel.VoiceRestricted = true; + } + + public static void ToggleDefaultVoice( ChatUser from, Channel channel, string param ) + { + channel.VoiceRestricted = !channel.VoiceRestricted; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Chat/ChatCommand.cs b/Scripts/Engines/Chat/ChatCommand.cs new file mode 100644 index 0000000..6694a55 --- /dev/null +++ b/Scripts/Engines/Chat/ChatCommand.cs @@ -0,0 +1,44 @@ +using System; + +namespace Server.Engines.Chat +{ + public enum ChatCommand + { + /// + /// Add a channel to top list. + /// + AddChannel = 0x3E8, + /// + /// Remove channel from top list. + /// + RemoveChannel = 0x3E9, + /// + /// Queries for a new chat nickname. + /// + AskNewNickname = 0x3EB, + /// + /// Closes the chat window. + /// + CloseChatWindow = 0x3EC, + /// + /// Opens the chat window. + /// + OpenChatWindow = 0x3ED, + /// + /// Add a user to current channel. + /// + AddUserToChannel = 0x3EE, + /// + /// Remove a user from current channel. + /// + RemoveUserFromChannel = 0x3EF, + /// + /// Send a message putting generic conference name at top when player leaves a channel. + /// + LeaveChannel = 0x3F0, + /// + /// Send a message putting Channel name at top and telling player he joined the channel. + /// + JoinedChannel = 0x3F1 + } +} \ No newline at end of file diff --git a/Scripts/Engines/Chat/ChatUser.cs b/Scripts/Engines/Chat/ChatUser.cs new file mode 100644 index 0000000..cce6883 --- /dev/null +++ b/Scripts/Engines/Chat/ChatUser.cs @@ -0,0 +1,321 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Accounting; + +namespace Server.Engines.Chat +{ + public class ChatUser + { + private Mobile m_Mobile; + private Channel m_Channel; + private bool m_Anonymous; + private bool m_IgnorePrivateMessage; + private List m_Ignored, m_Ignoring; + + public ChatUser( Mobile m ) + { + m_Mobile = m; + m_Ignored = new List(); + m_Ignoring = new List(); + } + + public Mobile Mobile + { + get + { + return m_Mobile; + } + } + + public List Ignored + { + get + { + return m_Ignored; + } + } + + public List Ignoring + { + get + { + return m_Ignoring; + } + } + + public string Username + { + get + { + Account acct = m_Mobile.Account as Account; + + if ( acct != null ) + return acct.GetTag( "ChatName" ); + + return null; + } + set + { + Account acct = m_Mobile.Account as Account; + + if ( acct != null ) + acct.SetTag( "ChatName", value ); + } + } + + public Channel CurrentChannel + { + get + { + return m_Channel; + } + set + { + m_Channel = value; + } + } + + public bool IsOnline + { + get + { + return ( m_Mobile.NetState != null ); + } + } + + public bool Anonymous + { + get + { + return m_Anonymous; + } + set + { + m_Anonymous = value; + } + } + + public bool IgnorePrivateMessage + { + get + { + return m_IgnorePrivateMessage; + } + set + { + m_IgnorePrivateMessage = value; + } + } + + public const char NormalColorCharacter = '0'; + public const char ModeratorColorCharacter = '1'; + public const char VoicedColorCharacter = '2'; + + public char GetColorCharacter() + { + if ( m_Channel != null && m_Channel.IsModerator( this ) ) + return ModeratorColorCharacter; + + if ( m_Channel != null && m_Channel.IsVoiced( this ) ) + return VoicedColorCharacter; + + return NormalColorCharacter; + } + + public bool CheckOnline() + { + if ( IsOnline ) + return true; + + RemoveChatUser( this ); + return false; + } + + public void SendMessage( int number ) + { + SendMessage( number, null, null ); + } + + public void SendMessage( int number, string param1 ) + { + SendMessage( number, param1, null ); + } + + public void SendMessage( int number, string param1, string param2 ) + { + if ( m_Mobile.NetState != null ) + m_Mobile.Send( new ChatMessagePacket( m_Mobile, number, param1, param2 ) ); + } + + public void SendMessage( int number, Mobile from, string param1, string param2 ) + { + if ( m_Mobile.NetState != null ) + m_Mobile.Send( new ChatMessagePacket( from, number, param1, param2 ) ); + } + + public bool IsIgnored( ChatUser check ) + { + return m_Ignored.Contains( check ); + } + + public bool IsModerator + { + get + { + return ( m_Channel != null && m_Channel.IsModerator( this ) ); + } + } + + public void AddIgnored( ChatUser user ) + { + if ( IsIgnored( user ) ) + { + SendMessage( 22, user.Username ); // You are already ignoring %1. + } + else + { + m_Ignored.Add( user ); + user.m_Ignoring.Add( this ); + + SendMessage( 23, user.Username ); // You are now ignoring %1. + } + } + + public void RemoveIgnored( ChatUser user ) + { + if ( IsIgnored( user ) ) + { + m_Ignored.Remove( user ); + user.m_Ignoring.Remove( this ); + + SendMessage( 24, user.Username ); // You are no longer ignoring %1. + + if ( m_Ignored.Count == 0 ) + SendMessage( 26 ); // You are no longer ignoring anyone. + } + else + { + SendMessage( 25, user.Username ); // You are not ignoring %1. + } + } + + private static List m_Users = new List(); + private static Dictionary m_Table = new Dictionary(); + + public static ChatUser AddChatUser( Mobile from ) + { + ChatUser user = GetChatUser( from ); + + if ( user == null ) + { + user = new ChatUser( from ); + + m_Users.Add( user ); + m_Table[from] = user; + + Channel.SendChannelsTo( user ); + + List list = Channel.Channels; + + for ( int i = 0; i < list.Count; ++i ) + { + Channel c = list[i]; + + if ( c.AddUser( user ) ) + break; + } + + //ChatSystem.SendCommandTo( user.m_Mobile, ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username ); + } + + return user; + } + + public static void RemoveChatUser( ChatUser user ) + { + if ( user == null ) + return; + + for ( int i = 0; i < user.m_Ignoring.Count; ++i ) + user.m_Ignoring[i].RemoveIgnored( user ); + + if ( m_Users.Contains( user ) ) + { + ChatSystem.SendCommandTo( user.Mobile, ChatCommand.CloseChatWindow ); + + if ( user.m_Channel != null ) + user.m_Channel.RemoveUser( user ); + + m_Users.Remove( user ); + m_Table.Remove( user.m_Mobile ); + } + } + + public static void RemoveChatUser( Mobile from ) + { + ChatUser user = GetChatUser( from ); + + RemoveChatUser( user ); + } + + public static ChatUser GetChatUser( Mobile from ) + { + ChatUser c; + m_Table.TryGetValue( from, out c ); + return c; + } + + public static ChatUser GetChatUser( string username ) + { + for ( int i = 0; i < m_Users.Count; ++i ) + { + ChatUser user = m_Users[i]; + + if ( user.Username == username ) + return user; + } + + return null; + } + + public static void GlobalSendCommand( ChatCommand command ) + { + GlobalSendCommand( command, null, null, null ); + } + + public static void GlobalSendCommand( ChatCommand command, string param1 ) + { + GlobalSendCommand( command, null, param1, null ); + } + + public static void GlobalSendCommand( ChatCommand command, string param1, string param2 ) + { + GlobalSendCommand( command, null, param1, param2 ); + } + + public static void GlobalSendCommand( ChatCommand command, ChatUser initiator ) + { + GlobalSendCommand( command, initiator, null, null ); + } + + public static void GlobalSendCommand( ChatCommand command, ChatUser initiator, string param1 ) + { + GlobalSendCommand( command, initiator, param1, null ); + } + + public static void GlobalSendCommand( ChatCommand command, ChatUser initiator, string param1, string param2 ) + { + for ( int i = 0; i < m_Users.Count; ++i ) + { + ChatUser user = m_Users[i]; + + if ( user == initiator ) + continue; + + if ( user.CheckOnline() ) + ChatSystem.SendCommandTo( user.m_Mobile, command, param1, param2 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Chat/Chatold.cs b/Scripts/Engines/Chat/Chatold.cs new file mode 100644 index 0000000..ece5bbc --- /dev/null +++ b/Scripts/Engines/Chat/Chatold.cs @@ -0,0 +1,20 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; + +namespace Server.Chat +{ + public class ChatSystem + { + public static void Initialize() + { + EventSink.ChatRequest += new ChatRequestEventHandler( EventSink_ChatRequest ); + } + + private static void EventSink_ChatRequest( ChatRequestEventArgs e ) + { + e.Mobile.SendMessage( "Chat is not currently supported." ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Chat/Packets.cs b/Scripts/Engines/Chat/Packets.cs new file mode 100644 index 0000000..ace0cc1 --- /dev/null +++ b/Scripts/Engines/Chat/Packets.cs @@ -0,0 +1,30 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Engines.Chat +{ + public sealed class ChatMessagePacket : Packet + { + public ChatMessagePacket( Mobile who, int number, string param1, string param2 ) : base( 0xB2 ) + { + if ( param1 == null ) + param1 = String.Empty; + + if ( param2 == null ) + param2 = String.Empty; + + EnsureCapacity( 13 + ((param1.Length + param2.Length) * 2) ); + + m_Stream.Write( (ushort) (number - 20) ); + + if ( who != null ) + m_Stream.WriteAsciiFixed( who.Language, 4 ); + else + m_Stream.Write( (int) 0 ); + + m_Stream.WriteBigUniNull( param1 ); + m_Stream.WriteBigUniNull( param2 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftContext.cs b/Scripts/Engines/Craft/Core/CraftContext.cs new file mode 100644 index 0000000..292abd6 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftContext.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Engines.Craft +{ + public enum CraftMarkOption + { + MarkItem, + DoNotMark, + PromptForMark + } + + public class CraftContext + { + private List m_Items; + private int m_LastResourceIndex; + private int m_LastGroupIndex; + private bool m_DoNotColor; + private CraftMarkOption m_MarkOption; + + public List Items { get { return m_Items; } } + public int LastResourceIndex{ get{ return m_LastResourceIndex; } set{ m_LastResourceIndex = value; } } + public int LastGroupIndex{ get{ return m_LastGroupIndex; } set{ m_LastGroupIndex = value; } } + public bool DoNotColor{ get{ return m_DoNotColor; } set{ m_DoNotColor = value; } } + public CraftMarkOption MarkOption{ get{ return m_MarkOption; } set{ m_MarkOption = value; } } + + public CraftContext() + { + m_Items = new List(); + m_LastResourceIndex = -1; + m_LastGroupIndex = -1; + } + + public CraftItem LastMade + { + get + { + if ( m_Items.Count > 0 ) + return m_Items[0]; + + return null; + } + } + + public void OnMade( CraftItem item ) + { + m_Items.Remove( item ); + + if ( m_Items.Count == 10 ) + m_Items.RemoveAt( 9 ); + + m_Items.Insert( 0, item ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftGroup.cs b/Scripts/Engines/Craft/Core/CraftGroup.cs new file mode 100644 index 0000000..10626b8 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftGroup.cs @@ -0,0 +1,39 @@ +using System; + +namespace Server.Engines.Craft +{ + public class CraftGroup + { + private CraftItemCol m_arCraftItem; + + private string m_NameString; + private int m_NameNumber; + + public CraftGroup( TextDefinition groupName ) + { + m_NameNumber = groupName; + m_NameString = groupName; + m_arCraftItem = new CraftItemCol(); + } + + public void AddCraftItem( CraftItem craftItem ) + { + m_arCraftItem.Add( craftItem ); + } + + public CraftItemCol CraftItems + { + get { return m_arCraftItem; } + } + + public string NameString + { + get { return m_NameString; } + } + + public int NameNumber + { + get { return m_NameNumber; } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftGroupCol.cs b/Scripts/Engines/Craft/Core/CraftGroupCol.cs new file mode 100644 index 0000000..887ded5 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftGroupCol.cs @@ -0,0 +1,48 @@ +using System; + +namespace Server.Engines.Craft +{ + public class CraftGroupCol : System.Collections.CollectionBase + { + public CraftGroupCol() + { + } + + public int Add( CraftGroup craftGroup ) + { + return List.Add( craftGroup ); + } + + public void Remove( int index ) + { + if ( index > Count - 1 || index < 0 ) + { + } + else + { + List.RemoveAt( index ); + } + } + + public CraftGroup GetAt( int index ) + { + return ( CraftGroup ) List[index]; + } + + public int SearchFor( TextDefinition groupName ) + { + for ( int i = 0; i < List.Count; i++ ) + { + CraftGroup craftGroup = (CraftGroup)List[i]; + + int nameNumber = craftGroup.NameNumber; + string nameString = craftGroup.NameString; + + if ( ( nameNumber != 0 && nameNumber == groupName.Number ) || ( nameString != null && nameString == groupName.String ) ) + return i; + } + + return -1; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftGump.cs b/Scripts/Engines/Craft/Core/CraftGump.cs new file mode 100644 index 0000000..3bda0cc --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftGump.cs @@ -0,0 +1,539 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Gumps; +using Server.Network; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class CraftGump : Gump + { + private Mobile m_From; + private CraftSystem m_CraftSystem; + private BaseTool m_Tool; + + private CraftPage m_Page; + + private const int LabelHue = 0x480; + private const int LabelColor = 0x7FFF; + private const int FontColor = 0xFFFFFF; + + private enum CraftPage + { + None, + PickResource + } + + /*public CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool ): this( from, craftSystem, -1, -1, tool, null ) + { + }*/ + + public CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool, object notice ) : this( from, craftSystem, tool, notice, CraftPage.None ) + { + } + + private CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool, object notice, CraftPage page ) : base( 40, 40 ) + { + m_From = from; + m_CraftSystem = craftSystem; + m_Tool = tool; + m_Page = page; + + CraftContext context = craftSystem.GetContext( from ); + + from.CloseGump( typeof( CraftGump ) ); + from.CloseGump( typeof( CraftGumpItem ) ); + + AddPage( 0 ); + + AddBackground( 0, 0, 530, 437, 5054 ); + AddImageTiled( 10, 10, 510, 22, 2624 ); + AddImageTiled( 10, 292, 150, 45, 2624 ); + AddImageTiled( 165, 292, 355, 45, 2624 ); + AddImageTiled( 10, 342, 510, 85, 2624 ); + AddImageTiled( 10, 37, 200, 250, 2624 ); + AddImageTiled( 215, 37, 305, 250, 2624 ); + AddAlphaRegion( 10, 10, 510, 417 ); + + if ( craftSystem.GumpTitleNumber > 0 ) + AddHtmlLocalized( 10, 12, 510, 20, craftSystem.GumpTitleNumber, LabelColor, false, false ); + else + AddHtml( 10, 12, 510, 20, craftSystem.GumpTitleString, false, false ); + + AddHtmlLocalized( 10, 37, 200, 22, 1044010, LabelColor, false, false ); //
CATEGORIES
+ AddHtmlLocalized( 215, 37, 305, 22, 1044011, LabelColor, false, false ); //
SELECTIONS
+ AddHtmlLocalized( 10, 302, 150, 25, 1044012, LabelColor, false, false ); //
NOTICES
+ + AddButton( 15, 402, 4017, 4019, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 405, 150, 18, 1011441, LabelColor, false, false ); // EXIT + + AddButton( 270, 402, 4005, 4007, GetButtonID( 6, 2 ), GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 305, 405, 150, 18, 1044013, LabelColor, false, false ); // MAKE LAST + + // Mark option + if ( craftSystem.MarkOption ) + { + AddButton( 270, 362, 4005, 4007, GetButtonID( 6, 6 ), GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 305, 365, 150, 18, 1044017 + (context == null ? 0 : (int)context.MarkOption), LabelColor, false, false ); // MARK ITEM + } + // **************************************** + + // Resmelt option + if ( craftSystem.Resmelt ) + { + AddButton( 15, 342, 4005, 4007, GetButtonID( 6, 1 ), GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 345, 150, 18, 1044259, LabelColor, false, false ); // SMELT ITEM + } + // **************************************** + + // Repair option + if ( craftSystem.Repair ) + { + AddButton( 270, 342, 4005, 4007, GetButtonID( 6, 5 ), GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 305, 345, 150, 18, 1044260, LabelColor, false, false ); // REPAIR ITEM + } + // **************************************** + + if ( notice is int && (int)notice > 0 ) + AddHtmlLocalized( 170, 295, 350, 40, (int)notice, LabelColor, false, false ); + else if ( notice is string ) + AddHtml( 170, 295, 350, 40, String.Format( "{1}", FontColor, notice ), false, false ); + + // If the system has more than one resource + if ( craftSystem.CraftSubRes.Init ) + { + string nameString = craftSystem.CraftSubRes.NameString; + int nameNumber = craftSystem.CraftSubRes.NameNumber; + + int resIndex = ( context == null ? -1 : context.LastResourceIndex ); + + Type resourceType = craftSystem.CraftSubRes.ResType; + + if ( resIndex > -1 ) + { + CraftSubRes subResource = craftSystem.CraftSubRes.GetAt( resIndex ); + + nameString = subResource.NameString; + nameNumber = subResource.NameNumber; + resourceType = subResource.ItemType; + } + + int resourceCount = 0; + + if ( from.Backpack != null ) + { + Item[] items = from.Backpack.FindItemsByType( resourceType, true ); + + for ( int i = 0; i < items.Length; ++i ) + resourceCount += items[i].Amount; + } + + AddButton( 15, 362, 4005, 4007, GetButtonID( 6, 0 ), GumpButtonType.Reply, 0 ); + + if ( nameNumber > 0 ) + AddHtmlLocalized( 50, 365, 250, 18, nameNumber, resourceCount.ToString(), LabelColor, false, false ); + else + AddLabel( 50, 362, LabelHue, String.Format( "{0} ({1} Available)", nameString, resourceCount ) ); + } + // **************************************** + + CreateGroupList(); + + if ( page == CraftPage.PickResource ) + CreateResList( false, from ); + else if ( context != null && context.LastGroupIndex > -1 ) + CreateItemList( context.LastGroupIndex ); + } + + public void CreateResList( bool opt, Mobile from ) + { + CraftSubResCol res = ( m_CraftSystem.CraftSubRes ); + + for ( int i = 0; i < res.Count; ++i ) + { + int index = i % 10; + + CraftSubRes subResource = res.GetAt( i ); + + if ( index == 0 ) + { + if ( i > 0 ) + AddButton( 485, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 ); + + AddPage( (i / 10) + 1 ); + + if ( i > 0 ) + AddButton( 455, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 ); + + CraftContext context = m_CraftSystem.GetContext( m_From ); + + AddButton( 220, 260, 4005, 4007, GetButtonID( 6, 4 ), GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 255, 263, 200, 18, (context == null || !context.DoNotColor) ? 1061591 : 1061590, LabelColor, false, false ); + } + + int resourceCount = 0; + + if ( from.Backpack != null ) + { + Item[] items = from.Backpack.FindItemsByType( subResource.ItemType, true ); + + for ( int j = 0; j < items.Length; ++j ) + resourceCount += items[j].Amount; + } + + AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 5, i ), GumpButtonType.Reply, 0 ); + + if ( subResource.NameNumber > 0 ) + AddHtmlLocalized( 255, 63 + (index * 20), 250, 18, subResource.NameNumber, resourceCount.ToString(), LabelColor, false, false ); + else + AddLabel( 255, 60 + ( index * 20 ), LabelHue, String.Format( "{0} ({1})", subResource.NameString, resourceCount ) ); + } + } + + public void CreateMakeLastList() + { + CraftContext context = m_CraftSystem.GetContext( m_From ); + + if ( context == null ) + return; + + List items = context.Items; + + if ( items.Count > 0 ) + { + for ( int i = 0; i < items.Count; ++i ) + { + int index = i % 10; + + CraftItem craftItem = items[i]; + + if ( index == 0 ) + { + if ( i > 0 ) + { + AddButton( 370, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 ); + AddHtmlLocalized( 405, 263, 100, 18, 1044045, LabelColor, false, false ); // NEXT PAGE + } + + AddPage( (i / 10) + 1 ); + + if ( i > 0 ) + { + AddButton( 220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 ); + AddHtmlLocalized( 255, 263, 100, 18, 1044044, LabelColor, false, false ); // PREV PAGE + } + } + + AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 3, i ), GumpButtonType.Reply, 0 ); + + if ( craftItem.NameNumber > 0 ) + AddHtmlLocalized( 255, 63 + (index * 20), 220, 18, craftItem.NameNumber, LabelColor, false, false ); + else + AddLabel( 255, 60 + (index * 20), LabelHue, craftItem.NameString ); + + AddButton( 480, 60 + (index * 20), 4011, 4012, GetButtonID( 4, i ), GumpButtonType.Reply, 0 ); + } + } + else + { + // NOTE: This is not as OSI; it is an intentional difference + + AddHtmlLocalized( 230, 62, 200, 22, 1044165, LabelColor, false, false ); // You haven't made anything yet. + } + } + + public void CreateItemList( int selectedGroup ) + { + if ( selectedGroup == 501 ) // 501 : Last 10 + { + CreateMakeLastList(); + return; + } + + CraftGroupCol craftGroupCol = m_CraftSystem.CraftGroups; + CraftGroup craftGroup = craftGroupCol.GetAt( selectedGroup ); + CraftItemCol craftItemCol = craftGroup.CraftItems; + + for ( int i = 0; i < craftItemCol.Count; ++i ) + { + int index = i % 10; + + CraftItem craftItem = craftItemCol.GetAt( i ); + + if ( index == 0 ) + { + if ( i > 0 ) + { + AddButton( 370, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 ); + AddHtmlLocalized( 405, 263, 100, 18, 1044045, LabelColor, false, false ); // NEXT PAGE + } + + AddPage( (i / 10) + 1 ); + + if ( i > 0 ) + { + AddButton( 220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 ); + AddHtmlLocalized( 255, 263, 100, 18, 1044044, LabelColor, false, false ); // PREV PAGE + } + } + + AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 1, i ), GumpButtonType.Reply, 0 ); + + if ( craftItem.NameNumber > 0 ) + AddHtmlLocalized( 255, 63 + (index * 20), 220, 18, craftItem.NameNumber, LabelColor, false, false ); + else + AddLabel( 255, 60 + (index * 20), LabelHue, craftItem.NameString ); + + AddButton( 480, 60 + (index * 20), 4011, 4012, GetButtonID( 2, i ), GumpButtonType.Reply, 0 ); + } + } + + public int CreateGroupList() + { + CraftGroupCol craftGroupCol = m_CraftSystem.CraftGroups; + + AddButton( 15, 60, 4005, 4007, GetButtonID( 6, 3 ), GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 63, 150, 18, 1044014, LabelColor, false, false ); // LAST TEN + + for ( int i = 0; i < craftGroupCol.Count; i++ ) + { + CraftGroup craftGroup = craftGroupCol.GetAt( i ); + + AddButton( 15, 80 + (i * 20), 4005, 4007, GetButtonID( 0, i ), GumpButtonType.Reply, 0 ); + + if ( craftGroup.NameNumber > 0 ) + AddHtmlLocalized( 50, 83 + (i * 20), 150, 18, craftGroup.NameNumber, LabelColor, false, false ); + else + AddLabel( 50, 80 + (i * 20), LabelHue, craftGroup.NameString ); + } + + return craftGroupCol.Count; + } + + public static int GetButtonID( int type, int index ) + { + return 1 + type + (index * 7); + } + + public void CraftItem( CraftItem item ) + { + int num = m_CraftSystem.CanCraft( m_From, m_Tool, item.ItemType ); + + if ( num > 0 ) + { + m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, num ) ); + } + else + { + Type type = null; + + CraftContext context = m_CraftSystem.GetContext( m_From ); + + if ( context != null ) + { + CraftSubResCol res = ( m_CraftSystem.CraftSubRes ); + int resIndex = ( context.LastResourceIndex ); + + if ( resIndex >= 0 && resIndex < res.Count ) + type = res.GetAt( resIndex ).ItemType; + } + + m_CraftSystem.CreateItem( m_From, item.ItemType, type, m_Tool, item ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID <= 0 ) + return; // Canceled + + int buttonID = info.ButtonID - 1; + int type = buttonID % 7; + int index = buttonID / 7; + + CraftSystem system = m_CraftSystem; + CraftGroupCol groups = system.CraftGroups; + CraftContext context = system.GetContext( m_From ); + + switch ( type ) + { + case 0: // Show group + { + if ( context == null ) + break; + + if ( index >= 0 && index < groups.Count ) + { + context.LastGroupIndex = index; + m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) ); + } + + break; + } + case 1: // Create item + { + if ( context == null ) + break; + + int groupIndex = context.LastGroupIndex; + + if ( groupIndex >= 0 && groupIndex < groups.Count ) + { + CraftGroup group = groups.GetAt( groupIndex ); + + if ( index >= 0 && index < group.CraftItems.Count ) + CraftItem( group.CraftItems.GetAt( index ) ); + } + + break; + } + case 2: // Item details + { + if ( context == null ) + break; + + int groupIndex = context.LastGroupIndex; + + if ( groupIndex >= 0 && groupIndex < groups.Count ) + { + CraftGroup group = groups.GetAt( groupIndex ); + + if ( index >= 0 && index < group.CraftItems.Count ) + m_From.SendGump( new CraftGumpItem( m_From, system, group.CraftItems.GetAt( index ), m_Tool ) ); + } + + break; + } + case 3: // Create item (last 10) + { + if ( context == null ) + break; + + List lastTen = context.Items; + + if ( index >= 0 && index < lastTen.Count ) + CraftItem( lastTen[index] ); + + break; + } + case 4: // Item details (last 10) + { + if ( context == null ) + break; + + List lastTen = context.Items; + + if ( index >= 0 && index < lastTen.Count ) + m_From.SendGump( new CraftGumpItem( m_From, system, lastTen[index], m_Tool ) ); + + break; + } + case 5: // Resource selected + { + if ( m_Page == CraftPage.PickResource && index >= 0 && index < system.CraftSubRes.Count ) + { + int groupIndex = ( context == null ? -1 : context.LastGroupIndex ); + + CraftSubRes res = system.CraftSubRes.GetAt( index ); + + if ( SkillCheck.TradeSkill( m_From, system.MainSkill, false ) < res.RequiredSkill ) + { + m_From.SendGump( new CraftGump( m_From, system, m_Tool, res.Message ) ); + } + else + { + if ( context != null ) + context.LastResourceIndex = index; + + m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) ); + } + } + + break; + } + case 6: // Misc. buttons + { + switch ( index ) + { + case 0: // Resource selection + { + if ( system.CraftSubRes.Init ) + m_From.SendGump( new CraftGump( m_From, system, m_Tool, null, CraftPage.PickResource ) ); + + break; + } + case 1: // Smelt item + { + if ( system.Resmelt ) + Resmelt.Do( m_From, system, m_Tool ); + + break; + } + case 2: // Make last + { + if ( context == null ) + break; + + CraftItem item = context.LastMade; + + if ( item != null ) + CraftItem( item ); + else + m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, 1044165, m_Page ) ); // You haven't made anything yet. + + break; + } + case 3: // Last 10 + { + if ( context == null ) + break; + + context.LastGroupIndex = 501; + m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) ); + + break; + } + case 4: // Toggle use resource hue + { + if ( context == null ) + break; + + context.DoNotColor = !context.DoNotColor; + + m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, null, m_Page ) ); + + break; + } + case 5: // Repair item + { + if ( system.Repair ) + Repair.Do( m_From, system, m_Tool ); + + break; + } + case 6: // Toggle mark option + { + if ( context == null || !system.MarkOption ) + break; + + switch ( context.MarkOption ) + { + case CraftMarkOption.MarkItem: context.MarkOption = CraftMarkOption.DoNotMark; break; + case CraftMarkOption.DoNotMark: context.MarkOption = CraftMarkOption.PromptForMark; break; + case CraftMarkOption.PromptForMark: context.MarkOption = CraftMarkOption.MarkItem; break; + } + + m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, null, m_Page ) ); + + break; + } + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftGumpItem.cs b/Scripts/Engines/Craft/Core/CraftGumpItem.cs new file mode 100644 index 0000000..8a54d9f --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftGumpItem.cs @@ -0,0 +1,244 @@ +using System; +using Server.Gumps; +using Server.Network; +using Server.Items; +using Server.Misc; +using Server.Mobiles; + +namespace Server.Engines.Craft +{ + public class CraftGumpItem : Gump + { + private Mobile m_From; + private CraftSystem m_CraftSystem; + private CraftItem m_CraftItem; + private BaseTool m_Tool; + + private const int LabelHue = 0x480; // 0x384 + private const int RedLabelHue = 0x20; + + private const int LabelColor = 0x7FFF; + private const int RedLabelColor = 0x6400; + + private const int GreyLabelColor = 0x3DEF; + + private int m_OtherCount; + + public CraftGumpItem( Mobile from, CraftSystem craftSystem, CraftItem craftItem, BaseTool tool ) : base( 40, 40 ) + { + m_From = from; + m_CraftSystem = craftSystem; + m_CraftItem = craftItem; + m_Tool = tool; + + from.CloseGump( typeof( CraftGump ) ); + from.CloseGump( typeof( CraftGumpItem ) ); + + AddPage( 0 ); + AddBackground( 0, 0, 530, 417, 5054 ); + AddImageTiled( 10, 10, 510, 22, 2624 ); + AddImageTiled( 10, 37, 150, 148, 2624 ); + AddImageTiled( 165, 37, 355, 90, 2624 ); + AddImageTiled( 10, 190, 155, 22, 2624 ); + AddImageTiled( 10, 217, 150, 53, 2624 ); + AddImageTiled( 165, 132, 355, 80, 2624 ); + AddImageTiled( 10, 275, 155, 22, 2624 ); + AddImageTiled( 10, 302, 150, 53, 2624 ); + AddImageTiled( 165, 217, 355, 80, 2624 ); + AddImageTiled( 10, 360, 155, 22, 2624 ); + AddImageTiled( 165, 302, 355, 80, 2624 ); + AddImageTiled( 10, 387, 510, 22, 2624 ); + AddAlphaRegion( 10, 10, 510, 399 ); + + AddHtmlLocalized( 170, 40, 150, 20, 1044053, LabelColor, false, false ); // ITEM + AddHtmlLocalized( 10, 192, 150, 22, 1044054, LabelColor, false, false ); //
SKILLS
+ AddHtmlLocalized( 10, 277, 150, 22, 1044055, LabelColor, false, false ); //
MATERIALS
+ AddHtmlLocalized( 10, 362, 150, 22, 1044056, LabelColor, false, false ); //
OTHER
+ + if ( craftSystem.GumpTitleNumber > 0 ) + AddHtmlLocalized( 10, 12, 510, 20, craftSystem.GumpTitleNumber, LabelColor, false, false ); + else + AddHtml( 10, 12, 510, 20, craftSystem.GumpTitleString, false, false ); + + AddButton( 15, 387, 4014, 4016, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 390, 150, 18, 1044150, LabelColor, false, false ); // BACK + + AddButton( 270, 387, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 305, 390, 150, 18, 1044151, LabelColor, false, false ); // MAKE NOW + + if ( craftItem.NameNumber > 0 ) + AddHtmlLocalized( 330, 40, 180, 18, craftItem.NameNumber, LabelColor, false, false ); + else + AddLabel( 330, 40, LabelHue, craftItem.NameString ); + + if ( craftItem.UseAllRes ) + AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 310, 18, 1048176, LabelColor, false, false ); // Makes as many as possible at once + + DrawItem(); + DrawSkill(); + DrawResource(); + } + + private bool m_ShowExceptionalChance; + + public void DrawItem() + { + Type type = m_CraftItem.ItemType; + + AddItem( 20, 50, CraftItem.ItemIDOf( type ) ); + + if ( m_CraftItem.IsMarkable( type ) ) + { + AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 310, 18, 1044059, LabelColor, false, false ); // This item may hold its maker's mark + m_ShowExceptionalChance = true; + } + } + + public void DrawSkill() + { + for ( int i = 0; i < m_CraftItem.Skills.Count; i++ ) + { + CraftSkill skill = m_CraftItem.Skills.GetAt( i ); + double minSkill = skill.MinSkill, maxSkill = skill.MaxSkill; + + if ( minSkill < 0 ) + minSkill = 0; + + AddLabel( 170, 132 + (i * 20), LabelHue, SkillCheck.TradeName( skill.SkillToMake ) ); + AddLabel( 430, 132 + (i * 20), LabelHue, String.Format( "{0:F1}", minSkill ) ); + } + + CraftSubResCol res = ( m_CraftSystem.CraftSubRes ); + int resIndex = -1; + + CraftContext context = m_CraftSystem.GetContext( m_From ); + + if ( context != null ) + resIndex = ( context.LastResourceIndex ); + + bool allRequiredSkills = true; + double chance = m_CraftItem.GetSuccessChance( m_From, resIndex > -1 ? res.GetAt( resIndex ).ItemType : null, m_CraftSystem, ref allRequiredSkills ); + double excepChance = m_CraftItem.GetExceptionalChance( m_CraftSystem, chance, m_From ); + + if ( chance < 0.0 ) + chance = 0.0; + else if ( chance > 1.0 ) + chance = 1.0; + + AddHtmlLocalized( 170, 80, 250, 18, 1044057, LabelColor, false, false ); // Success Chance: + AddLabel( 430, 80, LabelHue, String.Format( "{0:F1}%", chance * 100 ) ); + + if ( m_ShowExceptionalChance ) + { + if( excepChance < 0.0 ) + excepChance = 0.0; + else if( excepChance > 1.0 ) + excepChance = 1.0; + + AddHtmlLocalized( 170, 100, 250, 18, 1044058, 32767, false, false ); // Exceptional Chance: + AddLabel( 430, 100, LabelHue, String.Format( "{0:F1}%", excepChance * 100 ) ); + } + } + + private static Type typeofBlankScroll = typeof( BlankScroll ); + private static Type typeofSpellScroll = typeof( SpellScroll ); + + public void DrawResource() + { + bool retainedColor = false; + + CraftContext context = m_CraftSystem.GetContext( m_From ); + + CraftSubResCol res = ( m_CraftSystem.CraftSubRes ); + int resIndex = -1; + + if ( context != null ) + resIndex = ( context.LastResourceIndex ); + + bool cropScroll = ( m_CraftItem.Resources.Count > 1 ) + && m_CraftItem.Resources.GetAt( m_CraftItem.Resources.Count - 1 ).ItemType == typeofBlankScroll + && typeofSpellScroll.IsAssignableFrom( m_CraftItem.ItemType ); + + for ( int i = 0; i < m_CraftItem.Resources.Count - (cropScroll ? 1 : 0) && i < 4; i++ ) + { + Type type; + string nameString; + int nameNumber; + + CraftRes craftResource = m_CraftItem.Resources.GetAt( i ); + + type = craftResource.ItemType; + nameString = craftResource.NameString; + nameNumber = craftResource.NameNumber; + + // Resource Mutation + if ( type == res.ResType && resIndex > -1 ) + { + CraftSubRes subResource = res.GetAt( resIndex ); + + type = subResource.ItemType; + + nameString = subResource.NameString; + nameNumber = subResource.GenericNameNumber; + + if ( nameNumber <= 0 ) + nameNumber = subResource.NameNumber; + } + // ****************** + + if ( !retainedColor && m_CraftItem.RetainsColorFrom( m_CraftSystem, type ) ) + { + retainedColor = true; + AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 310, 18, 1044152, LabelColor, false, false ); // * The item retains the color of this material + AddLabel( 500, 219 + (i * 20), LabelHue, "*" ); + } + + if ( nameNumber > 0 ) + AddHtmlLocalized( 170, 219 + (i * 20), 310, 18, nameNumber, LabelColor, false, false ); + else + AddLabel( 170, 219 + (i * 20), LabelHue, nameString ); + + AddLabel( 430, 219 + (i * 20), LabelHue, craftResource.Amount.ToString() ); + } + + if ( cropScroll ) + AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 360, 18, 1044379, LabelColor, false, false ); // Inscribing scrolls also requires a blank scroll and mana. + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + // Back Button + if ( info.ButtonID == 0 ) + { + CraftGump craftGump = new CraftGump( m_From, m_CraftSystem, m_Tool, null ); + m_From.SendGump( craftGump ); + } + else // Make Button + { + int num = m_CraftSystem.CanCraft( m_From, m_Tool, m_CraftItem.ItemType ); + + if ( num > 0 ) + { + m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, num ) ); + } + else + { + Type type = null; + + CraftContext context = m_CraftSystem.GetContext( m_From ); + + if ( context != null ) + { + CraftSubResCol res = ( m_CraftSystem.CraftSubRes ); + int resIndex = ( context.LastResourceIndex ); + + if ( resIndex > -1 ) + type = res.GetAt( resIndex ).ItemType; + } + + m_CraftSystem.CreateItem( m_From, m_CraftItem.ItemType, type, m_Tool, m_CraftItem ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftItem.cs b/Scripts/Engines/Craft/Core/CraftItem.cs new file mode 100644 index 0000000..f066eff --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftItem.cs @@ -0,0 +1,1161 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Misc; +using Server.Mobiles; +using Server.Commands; + +namespace Server.Engines.Craft +{ + public enum ConsumeType + { + All, Half, None + } + + public interface ICraftable + { + int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ); + } + + public class CraftItem + { + private CraftResCol m_arCraftRes; + private CraftSkillCol m_arCraftSkill; + private Type m_Type; + + private string m_GroupNameString; + private int m_GroupNameNumber; + + private string m_NameString; + private int m_NameNumber; + + private int m_Mana; + private int m_Hits; + private int m_Stam; + + private bool m_UseAllRes; + + private bool m_NeedHeat; + private bool m_NeedOven; + private bool m_NeedMill; + + private bool m_ForceNonExceptional; + + public bool ForceNonExceptional + { + get { return m_ForceNonExceptional; } + set { m_ForceNonExceptional = value; } + } + + + private Expansion m_RequiredExpansion; + + public Expansion RequiredExpansion + { + get { return m_RequiredExpansion; } + set { m_RequiredExpansion = value; } + } + + private static Dictionary _itemIds = new Dictionary(); + + public static int ItemIDOf( Type type ) { + int itemId; + + if ( !_itemIds.TryGetValue( type, out itemId ) ) { + + if ( itemId == 0 ) { + object[] attrs = type.GetCustomAttributes( typeof( CraftItemIDAttribute ), false ); + + if ( attrs.Length > 0 ) { + CraftItemIDAttribute craftItemID = ( CraftItemIDAttribute ) attrs[0]; + itemId = craftItemID.ItemID; + } + } + + if ( itemId == 0 ) { + Item item = null; + + try { item = Activator.CreateInstance( type ) as Item; } catch { } + + if ( item != null ) { + itemId = item.ItemID; + item.Delete(); + } + } + + _itemIds[type] = itemId; + } + + return itemId; + } + + public CraftItem( Type type, TextDefinition groupName, TextDefinition name ) + { + m_arCraftRes = new CraftResCol(); + m_arCraftSkill = new CraftSkillCol(); + + m_Type = type; + + m_GroupNameString = groupName; + m_NameString = name; + + m_GroupNameNumber = groupName; + m_NameNumber = name; + } + + public void AddRes( Type type, TextDefinition name, int amount ) + { + AddRes( type, name, amount, "" ); + } + + public void AddRes( Type type, TextDefinition name, int amount, TextDefinition message ) + { + CraftRes craftRes = new CraftRes( type, name, amount, message ); + m_arCraftRes.Add( craftRes ); + } + + + public void AddSkill( Trades skillToMake, double minSkill, double maxSkill ) + { + CraftSkill craftSkill = new CraftSkill( skillToMake, minSkill, maxSkill ); + m_arCraftSkill.Add( craftSkill ); + } + + public int Mana + { + get { return m_Mana; } + set { m_Mana = value; } + } + + public int Hits + { + get { return m_Hits; } + set { m_Hits = value; } + } + + public int Stam + { + get { return m_Stam; } + set { m_Stam = value; } + } + + public bool UseAllRes + { + get { return m_UseAllRes; } + set { m_UseAllRes = value; } + } + + public bool NeedHeat + { + get { return m_NeedHeat; } + set { m_NeedHeat = value; } + } + + public bool NeedOven + { + get { return m_NeedOven; } + set { m_NeedOven = value; } + } + + public bool NeedMill + { + get { return m_NeedMill; } + set { m_NeedMill = value; } + } + + public Type ItemType + { + get { return m_Type; } + } + + public string GroupNameString + { + get { return m_GroupNameString; } + } + + public int GroupNameNumber + { + get { return m_GroupNameNumber; } + } + + public string NameString + { + get { return m_NameString; } + } + + public int NameNumber + { + get { return m_NameNumber; } + } + + public CraftResCol Resources + { + get { return m_arCraftRes; } + } + + public CraftSkillCol Skills + { + get { return m_arCraftSkill; } + } + + public bool ConsumeAttributes( Mobile from, ref object message, bool consume ) + { + bool consumMana = false; + bool consumHits = false; + bool consumStam = false; + + if ( Hits > 0 && from.Hits < Hits ) + { + message = "You lack the required hit points to make that."; + return false; + } + else + { + consumHits = consume; + } + + if ( Mana > 0 && from.Mana < Mana ) + { + message = "You lack the required mana to make that."; + return false; + } + else + { + consumMana = consume; + } + + if ( Stam > 0 && from.Stam < Stam ) + { + message = "You lack the required stamina to make that."; + return false; + } + else + { + consumStam = consume; + } + + if ( consumMana ) + from.Mana -= Mana; + + if ( consumHits ) + from.Hits -= Hits; + + if ( consumStam ) + from.Stam -= Stam; + + return true; + } + + #region Tables + private static int[] m_HeatSources = new int[] + { + 0x461, 0x48E, // Sandstone oven/fireplace + 0x92B, 0x96C, // Stone oven/fireplace + 0xDE3, 0xDE9, // Campfire + 0xFAC, 0xFAC, // Firepit + 0x184A, 0x184C, // Heating stand (left) + 0x184E, 0x1850, // Heating stand (right) + 0x398C, 0x399F, // Fire field + 0x197A, 0x19A9, // Large Forge + 0x0FB1, 0x0FB1/ // Small Forge + 0x3E4, 0x3E5, 0x3E6, 0x3E7, 0x3E8, 0x3E9, // Bonfire + 0x29FD, 0x29FE, 0x29FF, 0x2A00, 0x2A01, 0x2A02, 0x2A03 // Stone Firepit + }; + + private static int[] m_Ovens = new int[] + { + 0x461, 0x46F, // Sandstone oven + 0x92B, 0x93F // Stone oven + }; + + private static int[] m_Mills = new int[] + { + 0x1920, 0x1921, 0x1922, 0x1923, 0x1924, 0x1295, 0x1926, 0x1928, + 0x192C, 0x192D, 0x192E, 0x129F, 0x1930, 0x1931, 0x1932, 0x1934 + }; + + private static Type[][] m_TypesTable = new Type[][] + { + new Type[]{ typeof( WoodBoard ) }, + new Type[]{ typeof( Leather ), typeof( Hides ) }, + new Type[]{ typeof( BlankMap ), typeof( BlankScroll ) }, + new Type[]{ typeof( Cloth ), typeof( UncutCloth ) }, + new Type[]{ typeof( CheeseWheel ), typeof( CheeseWedge ) }, + new Type[]{ typeof( Pumpkin ), typeof( SmallPumpkin ) }, + new Type[]{ typeof( WoodenBowlOfPeas ), typeof( PewterBowlOfPeas ) } + }; + + private static Type[] m_ColoredItemTable = new Type[] + { + typeof( BaseWeapon ), typeof( BaseArmor ), typeof( BaseClothing ), + typeof( BaseJewel ) + }; + + private static Type[] m_ColoredResourceTable = new Type[] + { + typeof( BaseIngot ), typeof( BaseOre ), + typeof( BaseLeather ), typeof( BaseHides ), + typeof( UncutCloth ), typeof( Cloth ) + }; + + private static Type[] m_MarkableTable = new Type[] + { + typeof( BaseArmor ), + typeof( BaseWeapon ), + typeof( BaseClothing ), + typeof( BaseInstrument ), + typeof( BaseTool ), + typeof( BaseHarvestTool ), + typeof( Spellbook ) + }; + #endregion + + public bool IsMarkable( Type type ) + { + if( m_ForceNonExceptional ) //Don't even display the stuff for marking if it can't ever be exceptional. + return false; + + for ( int i = 0; i < m_MarkableTable.Length; ++i ) + { + if ( type == m_MarkableTable[i] || type.IsSubclassOf( m_MarkableTable[i] ) ) + return true; + } + + return false; + } + + public bool RetainsColorFrom( CraftSystem system, Type type ) + { + if (DefTailoring.IsNonColorable(m_Type)) + { + return false; + } + + if ( system.RetainsColorFrom( this, type ) ) + return true; + + bool inItemTable = false, inResourceTable = false; + + for ( int i = 0; !inItemTable && i < m_ColoredItemTable.Length; ++i ) + inItemTable = ( m_Type == m_ColoredItemTable[i] || m_Type.IsSubclassOf( m_ColoredItemTable[i] ) ); + + for ( int i = 0; inItemTable && !inResourceTable && i < m_ColoredResourceTable.Length; ++i ) + inResourceTable = ( type == m_ColoredResourceTable[i] || type.IsSubclassOf( m_ColoredResourceTable[i] ) ); + + return ( inItemTable && inResourceTable ); + } + + public bool Find( Mobile from, int[] itemIDs ) + { + Map map = from.Map; + + if ( map == null ) + return false; + + IPooledEnumerable eable = map.GetItemsInRange( from.Location, 2 ); + + foreach ( Item item in eable ) + { + if ( (item.Z + 16) > from.Z && (from.Z + 16) > item.Z && Find( item.ItemID, itemIDs ) ) + { + eable.Free(); + return true; + } + } + + eable.Free(); + + for ( int x = -2; x <= 2; ++x ) + { + for ( int y = -2; y <= 2; ++y ) + { + int vx = from.X + x; + int vy = from.Y + y; + + StaticTile[] tiles = map.Tiles.GetStaticTiles( vx, vy, true ); + + for ( int i = 0; i < tiles.Length; ++i ) + { + int z = tiles[i].Z; + int id = tiles[i].ID; + + if ( (z + 16) > from.Z && (from.Z + 16) > z && Find( id, itemIDs ) ) + return true; + } + } + } + + return false; + } + + public bool Find( int itemID, int[] itemIDs ) + { + bool contains = false; + + for ( int i = 0; !contains && i < itemIDs.Length; i += 2 ) + contains = ( itemID >= itemIDs[i] && itemID <= itemIDs[i + 1] ); + + return contains; + } + + public bool IsQuantityType( Type[][] types ) + { + for ( int i = 0; i < types.Length; ++i ) + { + Type[] check = types[i]; + + for ( int j = 0; j < check.Length; ++j ) + { + if ( typeof( IHasQuantity ).IsAssignableFrom( check[j] ) ) + return true; + } + } + + return false; + } + + public int ConsumeQuantity( Container cont, Type[][] types, int[] amounts ) + { + if ( types.Length != amounts.Length ) + throw new ArgumentException(); + + Item[][] items = new Item[types.Length][]; + int[] totals = new int[types.Length]; + + for ( int i = 0; i < types.Length; ++i ) + { + items[i] = cont.FindItemsByType( types[i], true ); + + for ( int j = 0; j < items[i].Length; ++j ) + { + IHasQuantity hq = items[i][j] as IHasQuantity; + + if ( hq == null ) + { + totals[i] += items[i][j].Amount; + } + else + { + if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water ) + continue; + + totals[i] += hq.Quantity; + } + } + + if ( totals[i] < amounts[i] ) + return i; + } + + for ( int i = 0; i < types.Length; ++i ) + { + int need = amounts[i]; + + for ( int j = 0; j < items[i].Length; ++j ) + { + Item item = items[i][j]; + IHasQuantity hq = item as IHasQuantity; + + if ( hq == null ) + { + int theirAmount = item.Amount; + + if ( theirAmount < need ) + { + item.Delete(); + need -= theirAmount; + } + else + { + item.Consume( need ); + break; + } + } + else + { + if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water ) + continue; + + int theirAmount = hq.Quantity; + + if ( theirAmount < need ) + { + hq.Quantity -= theirAmount; + need -= theirAmount; + } + else + { + hq.Quantity -= need; + break; + } + } + } + } + + return -1; + } + + public int GetQuantity( Container cont, Type[] types ) + { + Item[] items = cont.FindItemsByType( types, true ); + + int amount = 0; + + for ( int i = 0; i < items.Length; ++i ) + { + IHasQuantity hq = items[i] as IHasQuantity; + + if ( hq == null ) + { + amount += items[i].Amount; + } + else + { + if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water ) + continue; + + amount += hq.Quantity; + } + } + + return amount; + } + + public bool ConsumeRes( Mobile from, Type typeRes, CraftSystem craftSystem, ref int resHue, ref int maxAmount, ConsumeType consumeType, ref object message ) + { + return ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, false ); + } + + public bool ConsumeRes( Mobile from, Type typeRes, CraftSystem craftSystem, ref int resHue, ref int maxAmount, ConsumeType consumeType, ref object message, bool isFailure ) + { + Container ourPack = from.Backpack; + + if ( ourPack == null ) + return false; + + if ( m_NeedHeat && !Find( from, m_HeatSources ) ) + { + message = 1044487; // You must be near a fire source to cook. + return false; + } + + if ( m_NeedOven && !Find( from, m_Ovens ) ) + { + message = 1044493; // You must be near an oven to bake that. + return false; + } + + if ( m_NeedMill && !Find( from, m_Mills ) ) + { + message = 1044491; // You must be near a flour mill to do that. + return false; + } + + Type[][] types = new Type[m_arCraftRes.Count][]; + int[] amounts = new int[m_arCraftRes.Count]; + + maxAmount = int.MaxValue; + + CraftSubResCol resCol = ( craftSystem.CraftSubRes ); + + for ( int i = 0; i < types.Length; ++i ) + { + CraftRes craftRes = m_arCraftRes.GetAt( i ); + Type baseType = craftRes.ItemType; + + // Resource Mutation + if ( (baseType == resCol.ResType) && ( typeRes != null ) ) + { + baseType = typeRes; + + CraftSubRes subResource = resCol.SearchFor( baseType ); + + if ( subResource != null && SkillCheck.TradeSkill( from, craftSystem.MainSkill, false ) < subResource.RequiredSkill ) + { + message = subResource.Message; + return false; + } + } + // ****************** + + for ( int j = 0; types[i] == null && j < m_TypesTable.Length; ++j ) + { + if ( m_TypesTable[j][0] == baseType ) + types[i] = m_TypesTable[j]; + } + + if ( types[i] == null ) + types[i] = new Type[]{ baseType }; + + amounts[i] = craftRes.Amount; + + // For stackable items that can ben crafted more than one at a time + if ( UseAllRes ) + { + int tempAmount = ourPack.GetAmount( types[i] ); + tempAmount /= amounts[i]; + if ( tempAmount < maxAmount ) + { + maxAmount = tempAmount; + + if ( maxAmount == 0 ) + { + CraftRes res = m_arCraftRes.GetAt( i ); + + if ( res.MessageNumber > 0 ) + message = res.MessageNumber; + else if ( !String.IsNullOrEmpty( res.MessageString ) ) + message = res.MessageString; + else + message = 502925; // You don't have the resources required to make that item. + + return false; + } + } + } + // **************************** + + if ( isFailure && !craftSystem.ConsumeOnFailure( from, types[i][0], this ) ) + amounts[i] = 0; + } + + // We adjust the amount of each resource to consume the max posible + if ( UseAllRes ) + { + for ( int i = 0; i < amounts.Length; ++i ) + amounts[i] *= maxAmount; + } + else + maxAmount = -1; + + Item consumeExtra = null; + + int index = 0; + + // Consume ALL + if ( consumeType == ConsumeType.All ) + { + m_ResHue = 0; m_ResAmount = 0; m_System = craftSystem; + + if ( IsQuantityType( types ) ) + index = ConsumeQuantity( ourPack, types, amounts ); + else + index = ourPack.ConsumeTotalGrouped( types, amounts, true, new OnItemConsumed( OnResourceConsumed ), new CheckItemGroup( CheckHueGrouping ) ); + + resHue = m_ResHue; + } + + // Consume Half ( for use all resource craft type ) + else if ( consumeType == ConsumeType.Half ) + { + for ( int i = 0; i < amounts.Length; i++ ) + { + amounts[i] /= 2; + + if ( amounts[i] < 1 ) + amounts[i] = 1; + } + + m_ResHue = 0; m_ResAmount = 0; m_System = craftSystem; + + if ( IsQuantityType( types ) ) + index = ConsumeQuantity( ourPack, types, amounts ); + else + index = ourPack.ConsumeTotalGrouped( types, amounts, true, new OnItemConsumed( OnResourceConsumed ), new CheckItemGroup( CheckHueGrouping ) ); + + resHue = m_ResHue; + } + + else // ConstumeType.None ( it's basicaly used to know if the crafter has enough resource before starting the process ) + { + index = -1; + + if ( IsQuantityType( types ) ) + { + for ( int i = 0; i < types.Length; i++ ) + { + if ( GetQuantity( ourPack, types[i] ) < amounts[i] ) + { + index = i; + break; + } + } + } + else + { + for ( int i = 0; i < types.Length; i++ ) + { + if ( ourPack.GetBestGroupAmount( types[i], true, new CheckItemGroup( CheckHueGrouping ) ) < amounts[i] ) + { + index = i; + break; + } + } + } + } + + if ( index == -1 ) + { + if ( consumeType != ConsumeType.None ) + if ( consumeExtra != null ) + consumeExtra.Delete(); + + return true; + } + else + { + CraftRes res = m_arCraftRes.GetAt( index ); + + if ( res.MessageNumber > 0 ) + message = res.MessageNumber; + else if ( res.MessageString != null && res.MessageString != String.Empty ) + message = res.MessageString; + else + message = 502925; // You don't have the resources required to make that item. + + return false; + } + } + + private int m_ResHue; + private int m_ResAmount; + private CraftSystem m_System; + + private void OnResourceConsumed( Item item, int amount ) + { + if ( !RetainsColorFrom( m_System, item.GetType() ) ) + return; + + if ( amount >= m_ResAmount ) + { + m_ResHue = item.Hue; + m_ResAmount = amount; + } + } + + private int CheckHueGrouping( Item a, Item b ) + { + return b.Hue.CompareTo( a.Hue ); + } + + public double GetExceptionalChance( CraftSystem system, double chance, Mobile from ) + { + if( m_ForceNonExceptional ) + return 0.0; + + double bonus = 0.0; + + switch ( system.ECA ) + { + default: + case CraftECA.ChanceMinusSixty: chance -= 0.6; break; + case CraftECA.FiftyPercentChanceMinusTenPercent: chance = chance * 0.5 - 0.1; break; + case CraftECA.ChanceMinusSixtyToFourtyFive: + { + double offset = 0.60 - ((SkillCheck.TradeSkill( from, system.MainSkill, false ) - 95.0) * 0.03); + + if ( offset < 0.45 ) + offset = 0.45; + else if ( offset > 0.60 ) + offset = 0.60; + + chance -= offset; + break; + } + } + + if ( chance > 0 ) + return chance + bonus; + + return chance; + } + + public bool CheckSkills( Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality, ref bool allRequiredSkills ) + { + double chance = GetSuccessChance( from, typeRes, craftSystem, ref allRequiredSkills ); + + if ( GetExceptionalChance( craftSystem, chance, from ) > Utility.RandomDouble() ) + quality = 2; + + return ( chance > Utility.RandomDouble() ); + } + + public double GetSuccessChance( Mobile from, Type typeRes, CraftSystem craftSystem, ref bool allRequiredSkills ) + { + double minMainSkill = 0.0; + double maxMainSkill = 0.0; + double valMainSkill = 0.0; + + allRequiredSkills = true; + + for ( int i = 0; i < m_arCraftSkill.Count; i++) + { + CraftSkill craftSkill = m_arCraftSkill.GetAt(i); + + double minSkill = craftSkill.MinSkill; + double maxSkill = craftSkill.MaxSkill; + double valSkill = SkillCheck.TradeSkill( from, craftSkill.SkillToMake, false ); + + if ( valSkill < minSkill ) + allRequiredSkills = false; + + if ( craftSkill.SkillToMake == craftSystem.MainSkill ) + { + minMainSkill = minSkill; + maxMainSkill = maxSkill; + valMainSkill = valSkill; + } + } + + double chance; + + if ( allRequiredSkills ) + chance = craftSystem.GetChanceAtMin( this ) + ((valMainSkill - minMainSkill) / (maxMainSkill - minMainSkill) * (1.0 - craftSystem.GetChanceAtMin( this ))); + else + chance = 0.0; + + if ( allRequiredSkills && valMainSkill == maxMainSkill ) + chance = 1.0; + + return chance; + } + + public void Craft( Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool ) + { + if ( from.BeginAction( typeof( CraftSystem ) ) ) + { + bool allRequiredSkills = true; + double chance = GetSuccessChance( from, typeRes, craftSystem, ref allRequiredSkills ); + + if ( allRequiredSkills && chance >= 0.0 ) + { + int badCraft = craftSystem.CanCraft( from, tool, m_Type ); + + if( badCraft <= 0 ) + { + int resHue = 0; + int maxAmount = 0; + object message = null; + + if( ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.None, ref message ) ) + { + message = null; + + if( ConsumeAttributes( from, ref message, false ) ) + { + CraftContext context = craftSystem.GetContext( from ); + + if( context != null ) + context.OnMade( this ); + + int iMin = craftSystem.MinCraftEffect; + int iMax = (craftSystem.MaxCraftEffect - iMin) + 1; + int iRandom = Utility.Random( iMax ); + iRandom += iMin + 1; + new InternalTimer( from, craftSystem, this, typeRes, tool, iRandom ).Start(); + } + else + { + from.EndAction( typeof( CraftSystem ) ); + from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); + } + } + else + { + from.EndAction( typeof( CraftSystem ) ); + from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); + } + } + else + { + from.EndAction( typeof( CraftSystem ) ); + from.SendGump( new CraftGump( from, craftSystem, tool, badCraft ) ); + } + } + else + { + from.EndAction( typeof( CraftSystem ) ); + from.SendGump( new CraftGump( from, craftSystem, tool, 1044153 ) ); // You don't have the required skills to attempt this item. + } + } + else + { + from.SendLocalizedMessage( 500119 ); // You must wait to perform another action + } + } + + public void CompleteCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CustomCraft customCraft ) + { + int badCraft = craftSystem.CanCraft( from, tool, m_Type ); + + if ( badCraft > 0 ) + { + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, badCraft ) ); + else + from.SendLocalizedMessage( badCraft ); + + return; + } + + int checkResHue = 0, checkMaxAmount = 0; + object checkMessage = null; + + // Not enough resource to craft it + if ( !ConsumeRes( from, typeRes, craftSystem, ref checkResHue, ref checkMaxAmount, ConsumeType.None, ref checkMessage ) ) + { + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, checkMessage ) ); + else if ( checkMessage is int && (int)checkMessage > 0 ) + from.SendLocalizedMessage( (int)checkMessage ); + else if ( checkMessage is string ) + from.SendMessage( (string)checkMessage ); + + return; + } + else if ( !ConsumeAttributes( from, ref checkMessage, false ) ) + { + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, checkMessage ) ); + else if ( checkMessage is int && (int)checkMessage > 0 ) + from.SendLocalizedMessage( (int)checkMessage ); + else if ( checkMessage is string ) + from.SendMessage( (string)checkMessage ); + + return; + } + + bool toolBroken = false; + + int ignored = 1; + int endquality = 1; + + bool allRequiredSkills = true; + + if ( CheckSkills( from, typeRes, craftSystem, ref ignored, ref allRequiredSkills ) ) + { + // Resource + int resHue = 0; + int maxAmount = 0; + + object message = null; + + // Not enough resource to craft it + if ( !ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref message ) ) + { + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); + else if ( message is int && (int)message > 0 ) + from.SendLocalizedMessage( (int)message ); + else if ( message is string ) + from.SendMessage( (string)message ); + + return; + } + else if ( !ConsumeAttributes( from, ref message, true ) ) + { + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); + else if ( message is int && (int)message > 0 ) + from.SendLocalizedMessage( (int)message ); + else if ( message is string ) + from.SendMessage( (string)message ); + + return; + } + + tool.UsesRemaining--; + + if ( tool.UsesRemaining < 1 ) + toolBroken = true; + + if ( toolBroken ) + tool.Delete(); + + int num = 0; + + Item item; + if ( customCraft != null ) + { + item = customCraft.CompleteCraft( out num ); + } + else if ( typeof( MapItem ).IsAssignableFrom( ItemType ) && from.Map != Map.Britannia ) + { + item = new IndecipherableMap(); + from.SendLocalizedMessage( 1070800 ); // The map you create becomes mysteriously indecipherable. + } + else + { + item = Activator.CreateInstance( ItemType ) as Item; + } + + if ( item != null ) + { + if( item is ICraftable ) + endquality = ((ICraftable)item).OnCraft( quality, makersMark, from, craftSystem, typeRes, tool, this, resHue ); + else if ( item.Hue == 0 ) + item.Hue = resHue; + + if ( maxAmount > 0 ) + { + if ( !item.Stackable && item is IUsesRemaining ) + ((IUsesRemaining)item).UsesRemaining *= maxAmount; + else + item.Amount = maxAmount; + } + + from.AddToBackpack( item ); + + if( from.AccessLevel > AccessLevel.Player ) + CommandLogging.WriteLine( from, "Crafting {0} with craft system {1}", CommandLogging.Format( item ), craftSystem.GetType().Name ); + + //from.PlaySound( 0x57 ); + } + + if ( num == 0 ) + num = craftSystem.PlayEndingEffect( from, false, true, toolBroken, endquality, makersMark, this ); + + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, num ) ); + else if ( num > 0 ) + from.SendLocalizedMessage( num ); + } + else if ( !allRequiredSkills ) + { + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, 1044153 ) ); + else + from.SendLocalizedMessage( 1044153 ); // You don't have the required skills to attempt this item. + } + else + { + ConsumeType consumeType = ( UseAllRes ? ConsumeType.Half : ConsumeType.All ); + int resHue = 0; + int maxAmount = 0; + + object message = null; + + // Not enough resource to craft it + if ( !ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, true ) ) + { + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, message ) ); + else if ( message is int && (int)message > 0 ) + from.SendLocalizedMessage( (int)message ); + else if ( message is string ) + from.SendMessage( (string)message ); + + return; + } + + tool.UsesRemaining--; + + if ( tool.UsesRemaining < 1 ) + toolBroken = true; + + if ( toolBroken ) + tool.Delete(); + + // SkillCheck failed. + int num = craftSystem.PlayEndingEffect( from, true, true, toolBroken, endquality, false, this ); + + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, craftSystem, tool, num ) ); + else if ( num > 0 ) + from.SendLocalizedMessage( num ); + } + } + + private class InternalTimer : Timer + { + private Mobile m_From; + private int m_iCount; + private int m_iCountMax; + private CraftItem m_CraftItem; + private CraftSystem m_CraftSystem; + private Type m_TypeRes; + private BaseTool m_Tool; + + public InternalTimer( Mobile from, CraftSystem craftSystem, CraftItem craftItem, Type typeRes, BaseTool tool, int iCountMax ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( craftSystem.Delay ), iCountMax ) + { + m_From = from; + m_CraftItem = craftItem; + m_iCount = 0; + m_iCountMax = iCountMax; + m_CraftSystem = craftSystem; + m_TypeRes = typeRes; + m_Tool = tool; + } + + protected override void OnTick() + { + m_iCount++; + + m_From.DisruptiveAction(); + + if ( m_iCount < m_iCountMax ) + { + m_CraftSystem.PlayCraftEffect( m_From ); + } + else + { + m_From.EndAction( typeof( CraftSystem ) ); + + int badCraft = m_CraftSystem.CanCraft( m_From, m_Tool, m_CraftItem.m_Type ); + + if ( badCraft > 0 ) + { + if ( m_Tool != null && !m_Tool.Deleted && m_Tool.UsesRemaining > 0 ) + m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, badCraft ) ); + else + m_From.SendLocalizedMessage( badCraft ); + + return; + } + + int quality = 1; + bool allRequiredSkills = true; + + m_CraftItem.CheckSkills( m_From, m_TypeRes, m_CraftSystem, ref quality, ref allRequiredSkills ); + + CraftContext context = m_CraftSystem.GetContext( m_From ); + + if ( context == null ) + return; + + if ( typeof( CustomCraft ).IsAssignableFrom( m_CraftItem.ItemType ) ) + { + CustomCraft cc = null; + + try{ cc = Activator.CreateInstance( m_CraftItem.ItemType, new object[] { m_From, m_CraftItem, m_CraftSystem, m_TypeRes, m_Tool, quality } ) as CustomCraft; } + catch{} + + if ( cc != null ) + cc.EndCraftAction(); + + return; + } + + bool makersMark = false; + + if ( quality == 2 && SkillCheck.TradeSkill( m_From, m_CraftSystem.MainSkill, false ) >= 100.0 ) + makersMark = m_CraftItem.IsMarkable( m_CraftItem.ItemType ); + + if ( makersMark && context.MarkOption == CraftMarkOption.PromptForMark ) + { + m_From.SendGump( new QueryMakersMarkGump( quality, m_From, m_CraftItem, m_CraftSystem, m_TypeRes, m_Tool ) ); + } + else + { + if ( context.MarkOption == CraftMarkOption.DoNotMark ) + makersMark = false; + + m_CraftItem.CompleteCraft( quality, makersMark, m_From, m_CraftSystem, m_TypeRes, m_Tool, null ); + } + } + } + } + } +} diff --git a/Scripts/Engines/Craft/Core/CraftItemCol.cs b/Scripts/Engines/Craft/Core/CraftItemCol.cs new file mode 100644 index 0000000..44e8fe8 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftItemCol.cs @@ -0,0 +1,58 @@ +using System; + +namespace Server.Engines.Craft +{ + public class CraftItemCol : System.Collections.CollectionBase + { + public CraftItemCol() + { + } + + public int Add( CraftItem craftItem ) + { + return List.Add( craftItem ); + } + + public void Remove( int index ) + { + if ( index > Count - 1 || index < 0 ) + { + } + else + { + List.RemoveAt( index ); + } + } + + public CraftItem GetAt( int index ) + { + return ( CraftItem ) List[index]; + } + + public CraftItem SearchForSubclass( Type type ) + { + for ( int i = 0; i < List.Count; i++ ) + { + CraftItem craftItem = ( CraftItem )List[i]; + + if ( craftItem.ItemType == type || type.IsSubclassOf( craftItem.ItemType ) ) + return craftItem; + } + + return null; + } + + public CraftItem SearchFor( Type type ) + { + for ( int i = 0; i < List.Count; i++ ) + { + CraftItem craftItem = ( CraftItem )List[i]; + if ( craftItem.ItemType == type ) + { + return craftItem; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftItemIDAttribute.cs b/Scripts/Engines/Craft/Core/CraftItemIDAttribute.cs new file mode 100644 index 0000000..c8e4a32 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftItemIDAttribute.cs @@ -0,0 +1,18 @@ +using System; +using Server; + +namespace Server.Engines.Craft +{ + [AttributeUsage( AttributeTargets.Class )] + public class CraftItemIDAttribute : Attribute + { + private int m_ItemID; + + public int ItemID{ get{ return m_ItemID; } } + + public CraftItemIDAttribute( int itemID ) + { + m_ItemID = itemID; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftRes.cs b/Scripts/Engines/Craft/Core/CraftRes.cs new file mode 100644 index 0000000..00ed12e --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftRes.cs @@ -0,0 +1,71 @@ +using System; + +namespace Server.Engines.Craft +{ + public class CraftRes + { + private Type m_Type; + private int m_Amount; + + private string m_MessageString; + private int m_MessageNumber; + + private string m_NameString; + private int m_NameNumber; + + public CraftRes( Type type, int amount ) + { + m_Type = type; + m_Amount = amount; + } + + public CraftRes( Type type, TextDefinition name, int amount, TextDefinition message ): this ( type, amount ) + { + m_NameNumber = name; + m_MessageNumber = message; + + m_NameString = name; + m_MessageString = message; + } + + public void SendMessage( Mobile from ) + { + if ( m_MessageNumber > 0 ) + from.SendLocalizedMessage( m_MessageNumber ); + else if ( !String.IsNullOrEmpty( m_MessageString ) ) + from.SendMessage( m_MessageString ); + else + from.SendLocalizedMessage( 502925 ); // You don't have the resources required to make that item. + } + + public Type ItemType + { + get { return m_Type; } + } + + public string MessageString + { + get { return m_MessageString; } + } + + public int MessageNumber + { + get { return m_MessageNumber; } + } + + public string NameString + { + get { return m_NameString; } + } + + public int NameNumber + { + get { return m_NameNumber; } + } + + public int Amount + { + get { return m_Amount; } + } + } +} diff --git a/Scripts/Engines/Craft/Core/CraftResCol.cs b/Scripts/Engines/Craft/Core/CraftResCol.cs new file mode 100644 index 0000000..3491c2c --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftResCol.cs @@ -0,0 +1,32 @@ +using System; + +namespace Server.Engines.Craft +{ + public class CraftResCol : System.Collections.CollectionBase + { + public CraftResCol() + { + } + + public void Add( CraftRes craftRes ) + { + List.Add( craftRes ); + } + + public void Remove( int index ) + { + if ( index > Count - 1 || index < 0 ) + { + } + else + { + List.RemoveAt( index ); + } + } + + public CraftRes GetAt( int index ) + { + return ( CraftRes ) List[index]; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftSkill.cs b/Scripts/Engines/Craft/Core/CraftSkill.cs new file mode 100644 index 0000000..16ef844 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftSkill.cs @@ -0,0 +1,34 @@ +using System; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class CraftSkill + { + private Trades m_SkillToMake; + private double m_MinSkill; + private double m_MaxSkill; + + public CraftSkill( Trades skillToMake, double minSkill, double maxSkill ) + { + m_SkillToMake = skillToMake; + m_MinSkill = minSkill; + m_MaxSkill = maxSkill; + } + + public Trades SkillToMake + { + get { return m_SkillToMake; } + } + + public double MinSkill + { + get { return m_MinSkill; } + } + + public double MaxSkill + { + get { return m_MaxSkill; } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftSkillCol.cs b/Scripts/Engines/Craft/Core/CraftSkillCol.cs new file mode 100644 index 0000000..87914bd --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftSkillCol.cs @@ -0,0 +1,32 @@ +using System; + +namespace Server.Engines.Craft +{ + public class CraftSkillCol : System.Collections.CollectionBase + { + public CraftSkillCol() + { + } + + public void Add( CraftSkill craftSkill ) + { + List.Add( craftSkill ); + } + + public void Remove( int index ) + { + if ( index > Count - 1 || index < 0 ) + { + } + else + { + List.RemoveAt( index ); + } + } + + public CraftSkill GetAt( int index ) + { + return ( CraftSkill ) List[index]; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftSubRes.cs b/Scripts/Engines/Craft/Core/CraftSubRes.cs new file mode 100644 index 0000000..acef6a6 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftSubRes.cs @@ -0,0 +1,58 @@ +using System; + +namespace Server.Engines.Craft +{ + public class CraftSubRes + { + private Type m_Type; + private double m_ReqSkill; + private string m_NameString; + private int m_NameNumber; + private int m_GenericNameNumber; + private object m_Message; + + public CraftSubRes( Type type, TextDefinition name, double reqSkill, object message ) : this( type, name, reqSkill, 0, message ) + { + } + + public CraftSubRes( Type type, TextDefinition name, double reqSkill, int genericNameNumber, object message ) + { + m_Type = type; + m_NameNumber = name; + m_NameString = name; + m_ReqSkill = reqSkill; + m_GenericNameNumber = genericNameNumber; + m_Message = message; + } + + public Type ItemType + { + get { return m_Type; } + } + + public string NameString + { + get { return m_NameString; } + } + + public int NameNumber + { + get { return m_NameNumber; } + } + + public int GenericNameNumber + { + get { return m_GenericNameNumber; } + } + + public object Message + { + get { return m_Message; } + } + + public double RequiredSkill + { + get { return m_ReqSkill; } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftSubResCol.cs b/Scripts/Engines/Craft/Core/CraftSubResCol.cs new file mode 100644 index 0000000..2ffb189 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftSubResCol.cs @@ -0,0 +1,75 @@ +using System; + +namespace Server.Engines.Craft +{ + public class CraftSubResCol : System.Collections.CollectionBase + { + private Type m_Type; + private string m_NameString; + private int m_NameNumber; + private bool m_Init; + + public bool Init + { + get { return m_Init; } + set { m_Init = value; } + } + + public Type ResType + { + get { return m_Type; } + set { m_Type = value; } + } + + public string NameString + { + get { return m_NameString; } + set { m_NameString = value; } + } + + public int NameNumber + { + get { return m_NameNumber; } + set { m_NameNumber = value; } + } + + public CraftSubResCol() + { + m_Init = false; + } + + public void Add( CraftSubRes craftSubRes ) + { + List.Add( craftSubRes ); + } + + public void Remove( int index ) + { + if ( index > Count - 1 || index < 0 ) + { + } + else + { + List.RemoveAt( index ); + } + } + + public CraftSubRes GetAt( int index ) + { + return ( CraftSubRes ) List[index]; + } + + public CraftSubRes SearchFor( Type type ) + { + for ( int i = 0; i < List.Count; i++ ) + { + CraftSubRes craftSubRes = ( CraftSubRes )List[i]; + if ( craftSubRes.ItemType == type ) + { + return craftSubRes; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CraftSystem.cs b/Scripts/Engines/Craft/Core/CraftSystem.cs new file mode 100644 index 0000000..6e0a9da --- /dev/null +++ b/Scripts/Engines/Craft/Core/CraftSystem.cs @@ -0,0 +1,283 @@ +using System; +using System.Collections.Generic; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public enum CraftECA + { + ChanceMinusSixty, + FiftyPercentChanceMinusTenPercent, + ChanceMinusSixtyToFourtyFive + } + + public abstract class CraftSystem + { + private int m_MinCraftEffect; + private int m_MaxCraftEffect; + private double m_Delay; + private bool m_Resmelt; + private bool m_Repair; + private bool m_MarkOption; + + private CraftItemCol m_CraftItems; + private CraftGroupCol m_CraftGroups; + private CraftSubResCol m_CraftSubRes; + + public int MinCraftEffect { get { return m_MinCraftEffect; } } + public int MaxCraftEffect { get { return m_MaxCraftEffect; } } + public double Delay { get { return m_Delay; } } + + public CraftItemCol CraftItems{ get { return m_CraftItems; } } + public CraftGroupCol CraftGroups{ get { return m_CraftGroups; } } + public CraftSubResCol CraftSubRes{ get { return m_CraftSubRes; } } + + public abstract Trades MainSkill{ get; } + + public virtual int GumpTitleNumber{ get{ return 0; } } + public virtual string GumpTitleString{ get{ return ""; } } + + public virtual CraftECA ECA{ get{ return CraftECA.ChanceMinusSixty; } } + + private Dictionary m_ContextTable = new Dictionary(); + + public abstract double GetChanceAtMin( CraftItem item ); + + public virtual bool RetainsColorFrom( CraftItem item, Type type ) + { + return false; + } + + public CraftContext GetContext( Mobile m ) + { + if ( m == null ) + return null; + + if ( m.Deleted ) + { + m_ContextTable.Remove( m ); + return null; + } + + CraftContext c = null; + m_ContextTable.TryGetValue( m, out c ); + + if ( c == null ) + m_ContextTable[m] = c = new CraftContext(); + + return c; + } + + public void OnMade( Mobile m, CraftItem item ) + { + CraftContext c = GetContext( m ); + + if ( c != null ) + c.OnMade( item ); + } + + public bool Resmelt + { + get { return m_Resmelt; } + set { m_Resmelt = value; } + } + + public bool Repair + { + get{ return m_Repair; } + set{ m_Repair = value; } + } + + public bool MarkOption + { + get{ return m_MarkOption; } + set{ m_MarkOption = value; } + } + + public CraftSystem( int minCraftEffect, int maxCraftEffect, double delay ) + { + m_MinCraftEffect = minCraftEffect; + m_MaxCraftEffect = maxCraftEffect; + m_Delay = delay; + + m_CraftItems = new CraftItemCol(); + m_CraftGroups = new CraftGroupCol(); + m_CraftSubRes = new CraftSubResCol(); + + InitCraftList(); + } + + public virtual bool ConsumeOnFailure( Mobile from, Type resourceType, CraftItem craftItem ) + { + return true; + } + + public void CreateItem( Mobile from, Type type, Type typeRes, BaseTool tool, CraftItem realCraftItem ) + { + // Verify if the type is in the list of the craftable item + CraftItem craftItem = m_CraftItems.SearchFor( type ); + if ( craftItem != null ) + { + // The item is in the list, try to create it + // Test code: items like sextant parts can be crafted either directly from ingots, or from different parts + realCraftItem.Craft( from, this, typeRes, tool ); + //craftItem.Craft( from, this, typeRes, tool ); + } + } + + + public int AddCraft( Type typeItem, TextDefinition group, TextDefinition name, double minSkill, double maxSkill, Type typeRes, TextDefinition nameRes, int amount ) + { + return AddCraft( typeItem, group, name, MainSkill, minSkill, maxSkill, typeRes, nameRes, amount, "" ); + } + + public int AddCraft( Type typeItem, TextDefinition group, TextDefinition name, double minSkill, double maxSkill, Type typeRes, TextDefinition nameRes, int amount, TextDefinition message ) + { + return AddCraft( typeItem, group, name, MainSkill, minSkill, maxSkill, typeRes, nameRes, amount, message ); + } + + public int AddCraft( Type typeItem, TextDefinition group, TextDefinition name, Trades skillToMake, double minSkill, double maxSkill, Type typeRes, TextDefinition nameRes, int amount ) + { + return AddCraft( typeItem, group, name, skillToMake, minSkill, maxSkill, typeRes, nameRes, amount, "" ); + } + + public int AddCraft( Type typeItem, TextDefinition group, TextDefinition name, Trades skillToMake, double minSkill, double maxSkill, Type typeRes, TextDefinition nameRes, int amount, TextDefinition message ) + { + CraftItem craftItem = new CraftItem( typeItem, group, name ); + craftItem.AddRes( typeRes, nameRes, amount, message ); + craftItem.AddSkill( skillToMake, minSkill, maxSkill ); + + DoGroup( group, craftItem ); + return m_CraftItems.Add( craftItem ); + } + + + private void DoGroup( TextDefinition groupName, CraftItem craftItem ) + { + int index = m_CraftGroups.SearchFor( groupName ); + + if ( index == -1) + { + CraftGroup craftGroup = new CraftGroup( groupName ); + craftGroup.AddCraftItem( craftItem ); + m_CraftGroups.Add( craftGroup ); + } + else + { + m_CraftGroups.GetAt( index ).AddCraftItem( craftItem ); + } + } + + + public void SetManaReq( int index, int mana ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.Mana = mana; + } + + public void SetStamReq( int index, int stam ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.Stam = stam; + } + + public void SetHitsReq( int index, int hits ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.Hits = hits; + } + + public void SetUseAllRes( int index, bool useAll ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.UseAllRes = useAll; + } + + public void SetNeedHeat( int index, bool needHeat ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.NeedHeat = needHeat; + } + + public void SetNeedOven( int index, bool needOven ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.NeedOven = needOven; + } + + public void SetNeedMill( int index, bool needMill ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.NeedMill = needMill; + } + + public void SetNeededExpansion( int index, Expansion expansion ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.RequiredExpansion = expansion; + } + + public void AddRes( int index, Type type, TextDefinition name, int amount ) + { + AddRes( index, type, name, amount, "" ); + } + + public void AddRes( int index, Type type, TextDefinition name, int amount, TextDefinition message ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.AddRes( type, name, amount, message ); + } + + public void AddSkill( int index, Trades skillToMake, double minSkill, double maxSkill ) + { + CraftItem craftItem = m_CraftItems.GetAt(index); + craftItem.AddSkill(skillToMake, minSkill, maxSkill); + } + + public void ForceNonExceptional( int index ) + { + CraftItem craftItem = m_CraftItems.GetAt( index ); + craftItem.ForceNonExceptional = true; + } + + public void SetSubRes( Type type, string name ) + { + m_CraftSubRes.ResType = type; + m_CraftSubRes.NameString = name; + m_CraftSubRes.Init = true; + } + + public void SetSubRes( Type type, int name ) + { + m_CraftSubRes.ResType = type; + m_CraftSubRes.NameNumber = name; + m_CraftSubRes.Init = true; + } + + public void AddSubRes( Type type, int name, double reqSkill, object message ) + { + CraftSubRes craftSubRes = new CraftSubRes( type, name, reqSkill, message ); + m_CraftSubRes.Add( craftSubRes ); + } + + public void AddSubRes( Type type, int name, double reqSkill, int genericName, object message ) + { + CraftSubRes craftSubRes = new CraftSubRes( type, name, reqSkill, genericName, message ); + m_CraftSubRes.Add( craftSubRes ); + } + + public void AddSubRes( Type type, string name, double reqSkill, object message ) + { + CraftSubRes craftSubRes = new CraftSubRes( type, name, reqSkill, message ); + m_CraftSubRes.Add( craftSubRes ); + } + + public abstract void InitCraftList(); + + public abstract void PlayCraftEffect( Mobile from ); + public abstract int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ); + + public abstract int CanCraft( Mobile from, BaseTool tool, Type itemType ); + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/CustomCraft.cs b/Scripts/Engines/Craft/Core/CustomCraft.cs new file mode 100644 index 0000000..3685394 --- /dev/null +++ b/Scripts/Engines/Craft/Core/CustomCraft.cs @@ -0,0 +1,36 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Engines.Craft +{ + public abstract class CustomCraft + { + private Mobile m_From; + private CraftItem m_CraftItem; + private CraftSystem m_CraftSystem; + private Type m_TypeRes; + private BaseTool m_Tool; + private int m_Quality; + + public Mobile From{ get{ return m_From; } } + public CraftItem CraftItem{ get{ return m_CraftItem; } } + public CraftSystem CraftSystem{ get{ return m_CraftSystem; } } + public Type TypeRes{ get{ return m_TypeRes; } } + public BaseTool Tool{ get{ return m_Tool; } } + public int Quality{ get{ return m_Quality; } } + + public CustomCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality ) + { + m_From = from; + m_CraftItem = craftItem; + m_CraftSystem = craftSystem; + m_TypeRes = typeRes; + m_Tool = tool; + m_Quality = quality; + } + + public abstract void EndCraftAction(); + public abstract Item CompleteCraft( out int message ); + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/QueryMakersMarkGump.cs b/Scripts/Engines/Craft/Core/QueryMakersMarkGump.cs new file mode 100644 index 0000000..0f3121f --- /dev/null +++ b/Scripts/Engines/Craft/Core/QueryMakersMarkGump.cs @@ -0,0 +1,54 @@ +using System; +using Server; +using Server.Gumps; +using Server.Items; + +namespace Server.Engines.Craft +{ + public class QueryMakersMarkGump : Gump + { + private int m_Quality; + private Mobile m_From; + private CraftItem m_CraftItem; + private CraftSystem m_CraftSystem; + private Type m_TypeRes; + private BaseTool m_Tool; + + public QueryMakersMarkGump( int quality, Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool ) : base( 100, 200 ) + { + from.CloseGump( typeof( QueryMakersMarkGump ) ); + + m_Quality = quality; + m_From = from; + m_CraftItem = craftItem; + m_CraftSystem = craftSystem; + m_TypeRes = typeRes; + m_Tool = tool; + + AddPage( 0 ); + + AddBackground( 0, 0, 220, 170, 5054 ); + AddBackground( 10, 10, 200, 150, 3000 ); + + AddHtmlLocalized( 20, 20, 180, 80, 1018317, false, false ); // Do you wish to place your maker's mark on this item? + + AddHtmlLocalized( 55, 100, 140, 25, 1011011, false, false ); // CONTINUE + AddButton( 20, 100, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 55, 125, 140, 25, 1011012, false, false ); // CANCEL + AddButton( 20, 125, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + } + + public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) + { + bool makersMark = ( info.ButtonID == 1 ); + + if ( makersMark ) + m_From.SendLocalizedMessage( 501808 ); // You mark the item. + else + m_From.SendLocalizedMessage( 501809 ); // Cancelled mark. + + m_CraftItem.CompleteCraft( m_Quality, makersMark, m_From, m_CraftSystem, m_TypeRes, m_Tool, null ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/Repair.cs b/Scripts/Engines/Craft/Core/Repair.cs new file mode 100644 index 0000000..de8e814 --- /dev/null +++ b/Scripts/Engines/Craft/Core/Repair.cs @@ -0,0 +1,230 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Targeting; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class Repair + { + public Repair() + { + } + + public static void Do( Mobile from, CraftSystem craftSystem, BaseTool tool ) + { + from.Target = new InternalTarget( craftSystem, tool ); + from.SendLocalizedMessage( 1044276 ); // Target an item to repair. + } + + private class InternalTarget : Target + { + private CraftSystem m_CraftSystem; + private BaseTool m_Tool; + + public InternalTarget( CraftSystem craftSystem, BaseTool tool ) : base ( 2, false, TargetFlags.None ) + { + m_CraftSystem = craftSystem; + m_Tool = tool; + } + + private static void EndGolemRepair( object state ) + { + ((Mobile)state).EndAction( typeof( Golem ) ); + } + + private int GetWeakenChance( Mobile mob, Trades trade, int curHits, int maxHits ) + { + // 40% - (1% per hp lost) - (1% per 10 craft skill) + return (40 + (maxHits - curHits)) - (int)((SkillCheck.TradeSkill( mob, trade, false ) ) / 10); + } + + private bool CheckWeaken( Mobile mob, Trades trade, int curHits, int maxHits ) + { + return ( GetWeakenChance( mob, trade, curHits, maxHits ) > Utility.Random( 100 ) ); + } + + private int GetRepairDifficulty( int curHits, int maxHits ) + { + return (((maxHits - curHits) * 1250) / Math.Max( maxHits, 1 )) - 250; + } + + private bool CheckRepairDifficulty( Mobile mob, Trades trade, int curHits, int maxHits ) + { + double difficulty = GetRepairDifficulty( curHits, maxHits ) * 0.1; + + return SkillCheck.TestTrade( mob, trade, difficulty - 25.0, difficulty + 25.0 ); + } + + private bool IsSpecialClothing( BaseClothing clothing ) + { + // Armor repairable but not craftable + + if( m_CraftSystem is DefTailoring ) + { + return (clothing is BearMask) + || (clothing is DeerMask); + } + + return false; + } + + private bool IsSpecialWeapon( BaseWeapon weapon ) + { + // Weapons repairable but not craftable + + if ( m_CraftSystem is DefTinkering ) + { + return ( weapon is Cleaver ) + || ( weapon is Hatchet ) + || ( weapon is Pickaxe ) + || ( weapon is ButcherKnife ) + || ( weapon is SkinningKnife ); + } + else if ( m_CraftSystem is DefCarpentry ) + { + return ( weapon is Club ) + || ( weapon is BlackStaff ); + } + else if ( m_CraftSystem is DefTailoring ) + { + return ( weapon is Whip ); + } + else if ( m_CraftSystem is DefBlacksmithy ) + { + return ( weapon is Pitchfork ); + } + + return false; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + int number; + + if ( m_CraftSystem.CanCraft( from, m_Tool, targeted.GetType() ) == 1044267 ) + { + number = 1044282; // You must be near a forge and and anvil to repair items. * Yes, there are two and's * + } + else if ( targeted is BaseWeapon ) + { + BaseWeapon weapon = (BaseWeapon)targeted; + Trades trade = m_CraftSystem.MainSkill; + int toWeaken = 0; + + double skillLevel = SkillCheck.TradeSkill( from, trade, false ); + + if ( skillLevel >= 90.0 ) + toWeaken = 1; + else if ( skillLevel >= 70.0 ) + toWeaken = 2; + else + toWeaken = 3; + + if ( m_CraftSystem.CraftItems.SearchForSubclass( weapon.GetType() ) == null && !IsSpecialWeapon( weapon ) ) + { + number = 1044277; // That item cannot be repaired. + } + else if ( !weapon.IsChildOf( from.Backpack ) ) + { + number = 1044275; // The item must be in your backpack to repair it. + } + else if ( weapon.MaxHitPoints <= 0 || weapon.HitPoints == weapon.MaxHitPoints ) + { + number = 1044281; // That item is in full repair + } + else if ( weapon.MaxHitPoints <= toWeaken ) + { + number = 1044278; // That item has been repaired many times, and will break if repairs are attempted again. + } + else + { + if ( CheckWeaken( from, trade, weapon.HitPoints, weapon.MaxHitPoints ) ) + { + weapon.MaxHitPoints -= toWeaken; + weapon.HitPoints = Math.Max( 0, weapon.HitPoints - toWeaken ); + } + + if ( CheckRepairDifficulty( from, trade, weapon.HitPoints, weapon.MaxHitPoints ) ) + { + number = 1044279; // You repair the item. + m_CraftSystem.PlayCraftEffect( from ); + weapon.HitPoints = weapon.MaxHitPoints; + } + else + { + number = 1044280; // You fail to repair the item. + m_CraftSystem.PlayCraftEffect( from ); + } + + } + } + else if ( targeted is BaseArmor ) + { + BaseArmor armor = (BaseArmor)targeted; + Trades trade = m_CraftSystem.MainSkill; + int toWeaken = 0; + + double skillLevel = SkillCheck.TradeSkill( from, trade, false ); + + if ( skillLevel >= 90.0 ) + toWeaken = 1; + else if ( skillLevel >= 70.0 ) + toWeaken = 2; + else + toWeaken = 3; + + if ( m_CraftSystem.CraftItems.SearchForSubclass( armor.GetType() ) == null ) + { + number = 1044277; // That item cannot be repaired. + } + else if ( !armor.IsChildOf( from.Backpack ) ) + { + number = 1044275; // The item must be in your backpack to repair it. + } + else if ( armor.MaxHitPoints <= 0 || armor.HitPoints == armor.MaxHitPoints ) + { + number = 1044281; // That item is in full repair + } + else if ( armor.MaxHitPoints <= toWeaken ) + { + number = 1044278; // That item has been repaired many times, and will break if repairs are attempted again. + } + else + { + if ( CheckWeaken( from, trade, armor.HitPoints, armor.MaxHitPoints ) ) + { + armor.MaxHitPoints -= toWeaken; + armor.HitPoints = Math.Max( 0, armor.HitPoints - toWeaken ); + } + + if ( CheckRepairDifficulty( from, trade, armor.HitPoints, armor.MaxHitPoints ) ) + { + number = 1044279; // You repair the item. + m_CraftSystem.PlayCraftEffect( from ); + armor.HitPoints = armor.MaxHitPoints; + } + else + { + number = 1044280; // You fail to repair the item. + m_CraftSystem.PlayCraftEffect( from ); + } + } + } + else if ( targeted is Item ) + { + number = 1044277; + } + else + { + number = 500426; // You can't repair that. + } + + CraftContext context = m_CraftSystem.GetContext( from ); + from.SendGump( new CraftGump( from, m_CraftSystem, m_Tool, number ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/Core/Resmelt.cs b/Scripts/Engines/Craft/Core/Resmelt.cs new file mode 100644 index 0000000..5a35c2c --- /dev/null +++ b/Scripts/Engines/Craft/Core/Resmelt.cs @@ -0,0 +1,147 @@ +using System; +using Server; +using Server.Targeting; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public enum SmeltResult + { + Success, + Invalid, + NoSkill + } + + public class Resmelt + { + public Resmelt() + { + } + + public static void Do( Mobile from, CraftSystem craftSystem, BaseTool tool ) + { + int num = craftSystem.CanCraft( from, tool, null ); + + if ( num > 0 && num != 1044267 ) + { + from.SendGump( new CraftGump( from, craftSystem, tool, num ) ); + } + else + { + from.Target = new InternalTarget( craftSystem, tool ); + from.SendLocalizedMessage( 1044273 ); // Target an item to recycle. + } + } + + private class InternalTarget : Target + { + private CraftSystem m_CraftSystem; + private BaseTool m_Tool; + + public InternalTarget( CraftSystem craftSystem, BaseTool tool ) : base ( 2, false, TargetFlags.None ) + { + m_CraftSystem = craftSystem; + m_Tool = tool; + } + + private SmeltResult Resmelt( Mobile from, Item item, CraftResource resource ) + { + try + { + if ( CraftResources.GetType( resource ) != CraftResourceType.Metal ) + return SmeltResult.Invalid; + + CraftResourceInfo info = CraftResources.GetInfo( resource ); + + if ( info == null || info.ResourceTypes.Length == 0 ) + return SmeltResult.Invalid; + + CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor( item.GetType() ); + + if ( craftItem == null || craftItem.Resources.Count == 0 ) + return SmeltResult.Invalid; + + CraftRes craftResource = craftItem.Resources.GetAt( 0 ); + + if ( craftResource.Amount < 2 ) + return SmeltResult.Invalid; // Not enough metal to resmelt + + double difficulty = 0.0; + + if ( difficulty > SkillCheck.TradeSkill( from, Trades.Mining, false ) ) + return SmeltResult.NoSkill; + + Type resourceType = info.ResourceTypes[0]; + Item ingot = (Item)Activator.CreateInstance( resourceType ); + + if ( (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed) ) + ingot.Amount = craftResource.Amount / 2; + else + ingot.Amount = 1; + + item.Delete(); + from.AddToBackpack( ingot ); + + from.PlaySound( 0x2A ); + from.PlaySound( 0x240 ); + return SmeltResult.Success; + } + catch + { + } + + return SmeltResult.Invalid; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + int num = m_CraftSystem.CanCraft( from, m_Tool, null ); + + if ( num > 0 ) + { + if ( num == 1044267 ) + { + bool anvil, forge; + + DefBlacksmithy.CheckAnvilAndForge( from, 2, out anvil, out forge ); + + if ( !anvil ) + num = 1044266; // You must be near an anvil + else if ( !forge ) + num = 1044265; // You must be near a forge. + } + + from.SendGump( new CraftGump( from, m_CraftSystem, m_Tool, num ) ); + } + else + { + SmeltResult result = SmeltResult.Invalid; + bool isStoreBought = false; + int message; + + if ( targeted is BaseArmor ) + { + result = Resmelt( from, (BaseArmor)targeted, ((BaseArmor)targeted).Resource ); + isStoreBought = !((BaseArmor)targeted).PlayerConstructed; + } + else if ( targeted is BaseWeapon ) + { + result = Resmelt( from, (BaseWeapon)targeted, ((BaseWeapon)targeted).Resource ); + isStoreBought = !((BaseWeapon)targeted).PlayerConstructed; + } + + switch ( result ) + { + default: + case SmeltResult.Invalid: message = 1044272; break; // You can't melt that down into ingots. + case SmeltResult.NoSkill: message = 1044269; break; // You have no idea how to work this metal. + case SmeltResult.Success: message = isStoreBought ? 500418 : 1044270; break; // You melt the item down into ingots. + } + + from.SendGump( new CraftGump( from, m_CraftSystem, m_Tool, message ) ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefAlchemy.cs b/Scripts/Engines/Craft/DefAlchemy.cs new file mode 100644 index 0000000..b29d9ea --- /dev/null +++ b/Scripts/Engines/Craft/DefAlchemy.cs @@ -0,0 +1,159 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class DefAlchemy : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Alchemy; } + } + + public override int GumpTitleNumber + { + get { return 1044001; } //
ALCHEMY MENU
+ } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if ( m_CraftSystem == null ) + m_CraftSystem = new DefAlchemy(); + + return m_CraftSystem; + } + } + + public override double GetChanceAtMin( CraftItem item ) + { + return 0.0; // 0% + } + + private DefAlchemy() : base( 1, 1, 1.25 )// base( 1, 1, 3.1 ) + { + } + + public override int CanCraft( Mobile from, BaseTool tool, Type itemType ) + { + if( tool == null || tool.Deleted || tool.UsesRemaining < 0 ) + return 1044038; // You have worn out your tool! + else if ( !BaseTool.CheckAccessible( tool, from ) ) + return 1044263; // The tool must be on your person to use. + + return 0; + } + + public override void PlayCraftEffect( Mobile from ) + { + from.PlaySound( 0x242 ); + } + + private static Type typeofPotion = typeof( BasePotion ); + + public static bool IsPotion( Type type ) + { + return typeofPotion.IsAssignableFrom( type ); + } + + public override int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ) + { + if ( toolBroken ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool + + if ( failed ) + { + if ( IsPotion( item.ItemType ) ) + { + from.AddToBackpack( new Bottle() ); + return 500287; // You fail to create a useful potion. + } + else + { + return 1044043; // You failed to create the item, and some of your materials are lost. + } + } + else + { + from.PlaySound( 0x240 ); // Sound of a filling bottle + + if ( IsPotion( item.ItemType ) ) + { + if ( quality == -1 ) + return 1048136; // You create the potion and pour it into a keg. + else + return 500279; // You pour the potion into a bottle... + } + else + { + return 1044154; // You create the item. + } + } + } + + public override void InitCraftList() + { + int index = -1; + + // Refresh Potion + index = AddCraft( typeof( RefreshPotion ), 1044530, 1044538, -25, 25.0, typeof( BlackPearl ), 1044353, 1, 1044361 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( TotalRefreshPotion ), 1044530, 1044539, 25.0, 75.0, typeof( BlackPearl ), 1044353, 5, 1044361 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + + // Agility Potion + index = AddCraft( typeof( AgilityPotion ), 1044531, 1044540, 15.0, 65.0, typeof( Bloodmoss ), 1044354, 1, 1044362 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( GreaterAgilityPotion ), 1044531, 1044541, 35.0, 85.0, typeof( Bloodmoss ), 1044354, 3, 1044362 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + + // Nightsight Potion + index = AddCraft( typeof( NightSightPotion ), 1044532, 1044542, -25.0, 25.0, typeof( SpidersSilk ), 1044360, 1, 1044368 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + + // Heal Potion + index = AddCraft( typeof( LesserHealPotion ), 1044533, 1044543, -25.0, 25.0, typeof( Ginseng ), 1044356, 1, 1044364 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( HealPotion ), 1044533, 1044544, 15.0, 65.0, typeof( Ginseng ), 1044356, 3, 1044364 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( GreaterHealPotion ), 1044533, 1044545, 55.0, 105.0, typeof( Ginseng ), 1044356, 7, 1044364 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + + // Strength Potion + index = AddCraft( typeof( StrengthPotion ), 1044534, 1044546, 25.0, 75.0, typeof( MandrakeRoot ), 1044357, 2, 1044365 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( GreaterStrengthPotion ), 1044534, 1044547, 45.0, 95.0, typeof( MandrakeRoot ), 1044357, 5, 1044365 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + + // Poison Potion + index = AddCraft( typeof( LesserPoisonPotion ), 1044535, 1044548, -5.0, 45.0, typeof( Nightshade ), 1044358, 1, 1044366 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( PoisonPotion ), 1044535, 1044549, 15.0, 65.0, typeof( Nightshade ), 1044358, 2, 1044366 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( GreaterPoisonPotion ), 1044535, 1044550, 55.0, 105.0, typeof( Nightshade ), 1044358, 4, 1044366 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( DeadlyPoisonPotion ), 1044535, 1044551, 90.0, 140.0, typeof( Nightshade ), 1044358, 8, 1044366 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + + // Cure Potion + index = AddCraft( typeof( LesserCurePotion ), 1044536, 1044552, -10.0, 40.0, typeof( Garlic ), 1044355, 1, 1044363 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( CurePotion ), 1044536, 1044553, 25.0, 75.0, typeof( Garlic ), 1044355, 3, 1044363 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( GreaterCurePotion ), 1044536, 1044554, 65.0, 115.0, typeof( Garlic ), 1044355, 6, 1044363 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + + // Explosion Potion + index = AddCraft( typeof( LesserExplosionPotion ), 1044537, 1044555, 5.0, 55.0, typeof( SulfurousAsh ), 1044359, 3, 1044367 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( ExplosionPotion ), 1044537, 1044556, 35.0, 85.0, typeof( SulfurousAsh ), 1044359, 5, 1044367 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + index = AddCraft( typeof( GreaterExplosionPotion ), 1044537, 1044557, 65.0, 115.0, typeof( SulfurousAsh ), 1044359, 10, 1044367 ); + AddRes( index, typeof ( Bottle ), 1044529, 1, 500315 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefBlacksmithy.cs b/Scripts/Engines/Craft/DefBlacksmithy.cs new file mode 100644 index 0000000..021a6c0 --- /dev/null +++ b/Scripts/Engines/Craft/DefBlacksmithy.cs @@ -0,0 +1,307 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class DefBlacksmithy : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Blacksmith; } + } + + public override int GumpTitleNumber + { + get { return 1044002; } //
BLACKSMITHY MENU
+ } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if ( m_CraftSystem == null ) + m_CraftSystem = new DefBlacksmithy(); + + return m_CraftSystem; + } + } + + public override CraftECA ECA{ get{ return CraftECA.ChanceMinusSixtyToFourtyFive; } } + + public override double GetChanceAtMin( CraftItem item ) + { + return 0.0; // 0% + } + + private DefBlacksmithy() : base( 1, 1, 1.25 )// base( 1, 2, 1.7 ) + { + /* + + base( MinCraftEffect, MaxCraftEffect, Delay ) + + MinCraftEffect : The minimum number of time the mobile will play the craft effect + MaxCraftEffect : The maximum number of time the mobile will play the craft effect + Delay : The delay between each craft effect + + Example: (3, 6, 1.7) would make the mobile do the PlayCraftEffect override + function between 3 and 6 time, with a 1.7 second delay each time. + + */ + } + + private static Type typeofAnvil = typeof( AnvilAttribute ); + private static Type typeofForge = typeof( ForgeAttribute ); + + public static void CheckAnvilAndForge( Mobile from, int range, out bool anvil, out bool forge ) + { + anvil = false; + forge = false; + + Map map = from.Map; + + if ( map == null ) + return; + + IPooledEnumerable eable = map.GetItemsInRange( from.Location, range ); + + foreach ( Item item in eable ) + { + Type type = item.GetType(); + + bool isAnvil = ( type.IsDefined( typeofAnvil, false ) || item.ItemID == 4015 || item.ItemID == 4016 || item.ItemID == 0x2DD5 || item.ItemID == 0x2DD6 ); + bool isForge = ( type.IsDefined( typeofForge, false ) || item.ItemID == 4017 || (item.ItemID >= 6522 && item.ItemID <= 6569) || item.ItemID == 0x2DD8 ); + + if ( isAnvil || isForge ) + { + if ( (from.Z + 16) < item.Z || (item.Z + 16) < from.Z || !from.InLOS( item ) ) + continue; + + anvil = anvil || isAnvil; + forge = forge || isForge; + + if ( anvil && forge ) + break; + } + } + + eable.Free(); + + for ( int x = -range; (!anvil || !forge) && x <= range; ++x ) + { + for ( int y = -range; (!anvil || !forge) && y <= range; ++y ) + { + StaticTile[] tiles = map.Tiles.GetStaticTiles( from.X+x, from.Y+y, true ); + + for ( int i = 0; (!anvil || !forge) && i < tiles.Length; ++i ) + { + int id = tiles[i].ID; + + bool isAnvil = ( id == 4015 || id == 4016 || id == 0x2DD5 || id == 0x2DD6 ); + bool isForge = ( id == 4017 || (id >= 6522 && id <= 6569) || id == 0x2DD8 ); + + if ( isAnvil || isForge ) + { + if ( (from.Z + 16) < tiles[i].Z || (tiles[i].Z + 16) < from.Z || !from.InLOS( new Point3D( from.X+x, from.Y+y, tiles[i].Z + (tiles[i].Height/2) + 1 ) ) ) + continue; + + anvil = anvil || isAnvil; + forge = forge || isForge; + } + } + } + } + } + + public override int CanCraft( Mobile from, BaseTool tool, Type itemType ) + { + if ( tool == null || tool.Deleted || tool.UsesRemaining < 0 ) + return 1044038; // You have worn out your tool! + else if ( !BaseTool.CheckTool( tool, from ) ) + return 1048146; // If you have a tool equipped, you must use that tool. + else if ( !BaseTool.CheckAccessible( tool, from ) ) + return 1044263; // The tool must be on your person to use. + + bool anvil, forge; + CheckAnvilAndForge( from, 2, out anvil, out forge ); + + if ( anvil && forge ) + return 0; + + return 1044267; // You must be near an anvil and a forge to smith items. + } + + public override void PlayCraftEffect( Mobile from ) + { + // no animation, instant sound + //if ( from.Body.Type == BodyType.Human && !from.Mounted ) + // from.Animate( 9, 5, 1, true, false, 0 ); + //new InternalTimer( from ).Start(); + + from.PlaySound( 0x2A ); + } + + // Delay to synchronize the sound with the hit on the anvil + private class InternalTimer : Timer + { + private Mobile m_From; + + public InternalTimer( Mobile from ) : base( TimeSpan.FromSeconds( 0.7 ) ) + { + m_From = from; + } + + protected override void OnTick() + { + m_From.PlaySound( 0x2A ); + } + } + + public override int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ) + { + if ( toolBroken ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool + + if ( failed ) + { + if ( lostMaterial ) + return 1044043; // You failed to create the item, and some of your materials are lost. + else + return 1044157; // You failed to create the item, but no materials were lost. + } + else + { + if ( quality == 0 ) + return 502785; // You were barely able to make this item. It's quality is below average. + else if ( makersMark && quality == 2 ) + return 1044156; // You create an exceptional quality item and affix your maker's mark. + else if ( quality == 2 ) + return 1044155; // You create an exceptional quality item. + else + return 1044154; // You create the item. + } + } + + public override void InitCraftList() + { + /* + Synthax for a SIMPLE craft item + AddCraft( ObjectType, Group, MinSkill, MaxSkill, ResourceType, Amount, Message ) + + ObjectType : The type of the object you want to add to the build list. + Group : The group in wich the object will be showed in the craft menu. + MinSkill : The minimum of skill value + MaxSkill : The maximum of skill value + ResourceType : The type of the resource the mobile need to create the item + Amount : The amount of the ResourceType it need to create the item + Message : String or Int for Localized. The message that will be sent to the mobile, if the specified resource is missing. + + Synthax for a COMPLEXE craft item. A complexe item is an item that need either more than + only one skill, or more than only one resource. + + Coming soon.... + */ + + #region Ringmail + AddCraft( typeof( RingmailGloves ), 1011076, 1025099, 12.0, 62.0, typeof( IronIngot ), 1044036, 10, 1044037 ); + AddCraft( typeof( RingmailLegs ), 1011076, 1025104, 19.4, 69.4, typeof( IronIngot ), 1044036, 16, 1044037 ); + AddCraft( typeof( RingmailArms ), 1011076, 1025103, 16.9, 66.9, typeof( IronIngot ), 1044036, 14, 1044037 ); + AddCraft( typeof( RingmailChest ), 1011076, 1025100, 21.9, 71.9, typeof( IronIngot ), 1044036, 18, 1044037 ); + #endregion + + #region Chainmail + AddCraft( typeof( ChainCoif ), 1011077, 1025051, 14.5, 64.5, typeof( IronIngot ), 1044036, 10, 1044037 ); + AddCraft( typeof( ChainLegs ), 1011077, 1025054, 36.7, 86.7, typeof( IronIngot ), 1044036, 18, 1044037 ); + AddCraft( typeof( ChainChest ), 1011077, 1025055, 39.1, 89.1, typeof( IronIngot ), 1044036, 20, 1044037 ); + #endregion + + #region Platemail + AddCraft( typeof( PlateArms ), 1011078, 1025136, 66.3, 116.3, typeof( IronIngot ), 1044036, 18, 1044037 ); + AddCraft( typeof( PlateGloves ), 1011078, 1025140, 58.9, 108.9, typeof( IronIngot ), 1044036, 12, 1044037 ); + AddCraft( typeof( PlateGorget ), 1011078, 1025139, 56.4, 106.4, typeof( IronIngot ), 1044036, 10, 1044037 ); + AddCraft( typeof( PlateLegs ), 1011078, 1025137, 68.8, 118.8, typeof( IronIngot ), 1044036, 20, 1044037 ); + AddCraft( typeof( PlateChest ), 1011078, 1046431, 75.0, 125.0, typeof( IronIngot ), 1044036, 25, 1044037 ); + AddCraft( typeof( FemalePlateChest ), 1011078, 1046430, 44.1, 94.1, typeof( IronIngot ), 1044036, 20, 1044037 ); + #endregion + + #region Helmets + AddCraft( typeof( Bascinet ), 1011079, 1025132, 8.3, 58.3, typeof( IronIngot ), 1044036, 15, 1044037 ); + AddCraft( typeof( CloseHelm ), 1011079, 1025128, 37.9, 87.9, typeof( IronIngot ), 1044036, 15, 1044037 ); + AddCraft( typeof( Helmet ), 1011079, 1025130, 37.9, 87.9, typeof( IronIngot ), 1044036, 15, 1044037 ); + AddCraft( typeof( NorseHelm ), 1011079, 1025134, 37.9, 87.9, typeof( IronIngot ), 1044036, 15, 1044037 ); + AddCraft( typeof( PlateHelm ), 1011079, 1025138, 62.6, 112.6, typeof( IronIngot ), 1044036, 15, 1044037 ); + #endregion + + #region Shields + AddCraft( typeof( Buckler ), 1011080, 1027027, -25.0, 25.0, typeof( IronIngot ), 1044036, 10, 1044037 ); + AddCraft( typeof( BronzeShield ), 1011080, 1027026, -15.2, 34.8, typeof( IronIngot ), 1044036, 12, 1044037 ); + AddCraft( typeof( HeaterShield ), 1011080, 1027030, 24.3, 74.3, typeof( IronIngot ), 1044036, 18, 1044037 ); + AddCraft( typeof( MetalShield ), 1011080, 1027035, -10.2, 39.8, typeof( IronIngot ), 1044036, 14, 1044037 ); + AddCraft( typeof( MetalKiteShield ), 1011080, 1027028, 4.6, 54.6, typeof( IronIngot ), 1044036, 16, 1044037 ); + AddCraft( typeof( ChaosShield ), 1011080, 1027107, 85.0, 135.0, typeof( IronIngot ), 1044036, 25, 1044037 ); + AddCraft( typeof( OrderShield ), 1011080, 1027108, 85.0, 135.0, typeof( IronIngot ), 1044036, 25, 1044037 ); + #endregion + + #region Bladed + AddCraft( typeof( Broadsword ), 1011081, 1023934, 35.4, 85.4, typeof( IronIngot ), 1044036, 10, 1044037 ); + AddCraft( typeof( Cutlass ), 1011081, 1025185, 24.3, 74.3, typeof( IronIngot ), 1044036, 8, 1044037 ); + AddCraft( typeof( Dagger ), 1011081, 1023921, -0.4, 49.6, typeof( IronIngot ), 1044036, 3, 1044037 ); + AddCraft( typeof( Katana ),1011081, 1025119, 44.1, 94.1, typeof( IronIngot ), 1044036, 8, 1044037 ); + AddCraft( typeof( Kryss ), 1011081, 1025121, 36.7, 86.7, typeof( IronIngot ), 1044036, 8, 1044037 ); + AddCraft( typeof( Longsword ), 1011081, 1023937, 28.0, 78.0, typeof( IronIngot ), 1044036, 12, 1044037 ); + AddCraft( typeof( Rapier ), 1011081, 1025123, 45.3, 95.3, typeof( IronIngot ), 1044036, 6, 1044037 ); + AddCraft( typeof( Scimitar ), 1011081, 1025046, 31.7, 81.7, typeof( IronIngot ), 1044036, 10, 1044037 ); + AddCraft( typeof( VikingSword ), 1011081, 1025049, 24.3, 74.3, typeof( IronIngot ), 1044036, 14, 1044037 ); + #endregion + + #region Axes + AddCraft( typeof( Axe ), 1011082, 1023913, 34.2, 84.2, typeof( IronIngot ), 1044036, 14, 1044037 ); + AddCraft( typeof( BattleAxe ), 1011082, 1023911, 30.5, 80.5, typeof( IronIngot ), 1044036, 14, 1044037 ); + AddCraft( typeof( DoubleAxe ), 1011082, 1023915, 29.3, 79.3, typeof( IronIngot ), 1044036, 12, 1044037 ); + AddCraft( typeof( GreatAxe ), 1011082, 1023909, 34.2, 84.2, typeof( IronIngot ), 1044036, 14, 1044037 ); + AddCraft( typeof( LargeBattleAxe ), 1011082, 1025115, 28.0, 78.0, typeof( IronIngot ), 1044036, 12, 1044037 ); + AddCraft( typeof( TwoHandedAxe ), 1011082, 1025187, 33.0, 83.0, typeof( IronIngot ), 1044036, 16, 1044037 ); + AddCraft( typeof( WarAxe ), 1011082, 1025040, 39.1, 89.1, typeof( IronIngot ), 1044036, 16, 1044037 ); + #endregion + + #region Pole Arms + + AddCraft( typeof( Bardiche ), 1011083, 1023917, 31.7, 81.7, typeof( IronIngot ), 1044036, 18, 1044037 ); + AddCraft( typeof( Halberd ), 1011083, 1025183, 39.1, 89.1, typeof( IronIngot ), 1044036, 20, 1044037 ); + AddCraft( typeof( Pike ), 1011083, 1029918, 47.0, 97.0, typeof( IronIngot ), 1044036, 12, 1044037 ); + AddCraft( typeof( Scythe ), 1011083, 1029914, 39.0, 89.0, typeof( IronIngot ), 1044036, 14, 1044037 ); + AddCraft( typeof( Spear ), 1011083, 1023938, 49.0, 99.0, typeof( IronIngot ), 1044036, 12, 1044037 ); + AddCraft( typeof( WarFork ), 1011083, 1025125, 42.9, 92.9, typeof( IronIngot ), 1044036, 12, 1044037 ); + AddCraft( typeof( Pitchfork ), 1011083, 1023720, 36.1, 86.1, typeof( IronIngot ), 1044036, 12, 1044037 ); + #endregion + + #region Bashing + AddCraft( typeof( HammerPick ), 1011084, 1025181, 34.2, 84.2, typeof( IronIngot ), 1044036, 16, 1044037 ); + AddCraft( typeof( Mace ), 1011084, 1023932, 14.5, 64.5, typeof( IronIngot ), 1044036, 6, 1044037 ); + AddCraft( typeof( Maul ), 1011084, 1025179, 19.4, 69.4, typeof( IronIngot ), 1044036, 10, 1044037 ); + AddCraft( typeof( WarMace ), 1011084, 1025127, 28.0, 78.0, typeof( IronIngot ), 1044036, 14, 1044037 ); + AddCraft( typeof( WarHammer ), 1011084, 1025177, 34.2, 84.2, typeof( IronIngot ), 1044036, 16, 1044037 ); + #endregion + + Resmelt = true; + Repair = true; + MarkOption = true; + } + } + + public class ForgeAttribute : Attribute + { + public ForgeAttribute() + { + } + } + + public class AnvilAttribute : Attribute + { + public AnvilAttribute() + { + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefBowFletching.cs b/Scripts/Engines/Craft/DefBowFletching.cs new file mode 100644 index 0000000..e404147 --- /dev/null +++ b/Scripts/Engines/Craft/DefBowFletching.cs @@ -0,0 +1,111 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class DefBowFletching : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Fletching; } + } + + public override int GumpTitleNumber + { + get { return 1044006; } //
BOWCRAFT AND FLETCHING MENU
+ } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if ( m_CraftSystem == null ) + m_CraftSystem = new DefBowFletching(); + + return m_CraftSystem; + } + } + + public override double GetChanceAtMin( CraftItem item ) + { + return 0.5; // 50% + } + + private DefBowFletching() : base( 1, 1, 1.25 )// base( 1, 2, 1.7 ) + { + } + + public override int CanCraft( Mobile from, BaseTool tool, Type itemType ) + { + if( tool == null || tool.Deleted || tool.UsesRemaining < 0 ) + return 1044038; // You have worn out your tool! + else if ( !BaseTool.CheckAccessible( tool, from ) ) + return 1044263; // The tool must be on your person to use. + + return 0; + } + + public override void PlayCraftEffect( Mobile from ) + { + from.PlaySound( 0x55 ); + } + + public override int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ) + { + if ( toolBroken ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool + + if ( failed ) + { + if ( lostMaterial ) + return 1044043; // You failed to create the item, and some of your materials are lost. + else + return 1044157; // You failed to create the item, but no materials were lost. + } + else + { + if ( quality == 0 ) + return 502785; // You were barely able to make this item. It's quality is below average. + else if ( makersMark && quality == 2 ) + return 1044156; // You create an exceptional quality item and affix your maker's mark. + else if ( quality == 2 ) + return 1044155; // You create an exceptional quality item. + else + return 1044154; // You create the item. + } + } + + public override CraftECA ECA{ get{ return CraftECA.FiftyPercentChanceMinusTenPercent; } } + + public override void InitCraftList() + { + int index = -1; + + // Materials + AddCraft( typeof( Kindling ), 1044457, 1023553, 0.0, 00.0, typeof( WoodBoard ), 1044041, 1, 1044351 ); + + index = AddCraft( typeof( Shaft ), 1044457, 1027124, 0.0, 40.0, typeof( WoodBoard ), 1044041, 1, 1044351 ); + SetUseAllRes( index, true ); + + // Ammunition + index = AddCraft( typeof( Arrow ), 1044565, 1023903, 0.0, 40.0, typeof( Shaft ), 1044560, 1, 1044561 ); + AddRes( index, typeof( Feather ), 1044562, 1, 1044563 ); + SetUseAllRes( index, true ); + + index = AddCraft( typeof( Bolt ), 1044565, 1027163, 0.0, 40.0, typeof( Shaft ), 1044560, 1, 1044561 ); + AddRes( index, typeof( Feather ), 1044562, 1, 1044563 ); + SetUseAllRes( index, true ); + + // Weapons + AddCraft( typeof( Bow ), 1044566, 1025042, 30.0, 70.0, typeof( WoodBoard ), 1044041, 7, 1044351 ); + AddCraft( typeof( Crossbow ), 1044566, 1023919, 60.0, 100.0, typeof( WoodBoard ), 1044041, 7, 1044351 ); + AddCraft( typeof( HeavyCrossbow ), 1044566, 1025117, 80.0, 120.0, typeof( WoodBoard ), 1044041, 10, 1044351 ); + + MarkOption = true; + Repair = true; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefCarpentry.cs b/Scripts/Engines/Craft/DefCarpentry.cs new file mode 100644 index 0000000..288e1f2 --- /dev/null +++ b/Scripts/Engines/Craft/DefCarpentry.cs @@ -0,0 +1,289 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class DefCarpentry : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Carpentry; } + } + + public override int GumpTitleNumber + { + get { return 1044004; } //
CARPENTRY MENU
+ } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if ( m_CraftSystem == null ) + m_CraftSystem = new DefCarpentry(); + + return m_CraftSystem; + } + } + + public override double GetChanceAtMin( CraftItem item ) + { + return 0.5; // 50% + } + + private DefCarpentry() : base( 1, 1, 1.25 )// base( 1, 1, 3.0 ) + { + } + + public override int CanCraft( Mobile from, BaseTool tool, Type itemType ) + { + if( tool == null || tool.Deleted || tool.UsesRemaining < 0 ) + return 1044038; // You have worn out your tool! + else if ( !BaseTool.CheckAccessible( tool, from ) ) + return 1044263; // The tool must be on your person to use. + + return 0; + } + + public override void PlayCraftEffect( Mobile from ) + { + from.PlaySound( 0x23D ); + } + + public override int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ) + { + if ( toolBroken ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool + + if ( failed ) + { + if ( lostMaterial ) + return 1044043; // You failed to create the item, and some of your materials are lost. + else + return 1044157; // You failed to create the item, but no materials were lost. + } + else + { + if ( quality == 0 ) + return 502785; // You were barely able to make this item. It's quality is below average. + else if ( makersMark && quality == 2 ) + return 1044156; // You create an exceptional quality item and affix your maker's mark. + else if ( quality == 2 ) + return 1044155; // You create an exceptional quality item. + else + return 1044154; // You create the item. + } + } + + public override void InitCraftList() + { + int index = -1; + + AddCraft( typeof( BarrelStaves ), 1044294, 1027857, 00.0, 25.0, typeof( WoodBoard ), 1044041, 5, 1044351 ); + AddCraft( typeof( BarrelLid ), 1044294, 1027608, 11.0, 36.0, typeof( WoodBoard ), 1044041, 4, 1044351 ); + AddCraft( typeof( ShortMusicStand ), 1044294, 1044313, 78.9, 103.9, typeof( WoodBoard ), 1044041, 15, 1044351 ); + AddCraft( typeof( TallMusicStand ), 1044294, 1044315, 81.5, 106.5, typeof( WoodBoard ), 1044041, 20, 1044351 ); + AddCraft( typeof( Easle ), 1044294, 1044317, 86.8, 111.8, typeof( WoodBoard ), 1044041, 20, 1044351 ); + + index = AddCraft( typeof( FishingPole ), 1044294, 1023519, 68.4, 93.4, typeof( WoodBoard ), 1044041, 5, 1044351 ); + AddSkill( index, Trades.Tailoring, 40.0, 45.0 ); + AddRes( index, typeof( Cloth ), 1044286, 5, 1044287 ); + + // Furniture + AddCraft( typeof( FootStool ), 1044291, 1022910, 11.0, 36.0, typeof( WoodBoard ), 1044041, 9, 1044351 ); + AddCraft( typeof( Stool ), 1044291, 1022602, 11.0, 36.0, typeof( WoodBoard ), 1044041, 9, 1044351 ); + AddCraft( typeof( BambooChair ), 1044291, 1044300, 21.0, 46.0, typeof( WoodBoard ), 1044041, 13, 1044351 ); + AddCraft( typeof( WoodenChair ), 1044291, 1044301, 21.0, 46.0, typeof( WoodBoard ), 1044041, 13, 1044351 ); + AddCraft( typeof( FancyWoodenChairCushion ), 1044291, 1044302, 42.1, 67.1, typeof( WoodBoard ), 1044041, 15, 1044351 ); + AddCraft( typeof( WoodenChairCushion ), 1044291, 1044303, 42.1, 67.1, typeof( WoodBoard ), 1044041, 13, 1044351 ); + AddCraft( typeof( WoodenBench ), 1044291, 1022860, 52.6, 77.6, typeof( WoodBoard ), 1044041, 17, 1044351 ); + AddCraft( typeof( WoodenThrone ), 1044291, 1044304, 52.6, 77.6, typeof( WoodBoard ), 1044041, 17, 1044351 ); + AddCraft( typeof( Throne ), 1044291, 1044305, 73.6, 98.6, typeof( WoodBoard ), 1044041, 19, 1044351 ); + AddCraft( typeof( Nightstand ), 1044291, 1044306, 42.1, 67.1, typeof( WoodBoard ), 1044041, 17, 1044351 ); + AddCraft( typeof( WritingTable ), 1044291, 1022890, 63.1, 88.1, typeof( WoodBoard ), 1044041, 17, 1044351 ); + AddCraft( typeof( YewWoodTable ), 1044291, 1044307, 63.1, 88.1, typeof( WoodBoard ), 1044041, 23, 1044351 ); + AddCraft( typeof( LargeTable ), 1044291, 1044308, 84.2, 109.2, typeof( WoodBoard ), 1044041, 27, 1044351 ); + AddCraft( typeof( StoneChair ), 1044291, 1024635, 55.0, 105.0, typeof( IronOre ), 1072392, 4, 1044513 ); + AddCraft( typeof( MediumStoneTableEastDeed ), 1044291, 1044508, 65.0, 115.0, typeof( IronOre ), 1072392, 6, 1044513 ); + AddCraft( typeof( MediumStoneTableSouthDeed ), 1044291, 1044509, 65.0, 115.0, typeof( IronOre ), 1072392, 6, 1044513 ); + AddCraft( typeof( LargeStoneTableEastDeed ), 1044291, 1044511, 75.0, 125.0, typeof( IronOre ), 1072392, 9, 1044513 ); + AddCraft( typeof( LargeStoneTableSouthDeed ), 1044291, 1044512, 75.0, 125.0, typeof( IronOre ), 1072392, 9, 1044513 ); + + // Containers + AddCraft( typeof( WoodenBox ), 1044292, 1023709, 21.0, 46.0, typeof( WoodBoard ), 1044041, 10, 1044351 ); + AddCraft( typeof( SmallCrate ), 1044292, 1044309, 10.0, 35.0, typeof( WoodBoard ), 1044041, 8 , 1044351 ); + AddCraft( typeof( MediumCrate ), 1044292, 1044310, 31.0, 56.0, typeof( WoodBoard ), 1044041, 15, 1044351 ); + AddCraft( typeof( LargeCrate ), 1044292, 1044311, 47.3, 72.3, typeof( WoodBoard ), 1044041, 18, 1044351 ); + AddCraft( typeof( WoodenChest ), 1044292, 1023650, 73.6, 98.6, typeof( WoodBoard ), 1044041, 20, 1044351 ); + AddCraft( typeof( EmptyBookcase ), 1044292, 1022718, 31.5, 56.5, typeof( WoodBoard ), 1044041, 25, 1044351 ); + AddCraft( typeof( FancyArmoire ), 1044292, 1044312, 84.2, 109.2, typeof( WoodBoard ), 1044041, 35, 1044351 ); + AddCraft( typeof( Armoire ), 1044292, 1022643, 84.2, 109.2, typeof( WoodBoard ), 1044041, 35, 1044351 ); + AddCraft( typeof( CratePlain ), 1044292, 1045025, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateCarpenter ), 1044292, 1045026, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateJewels ), 1044292, 1045027, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateWizard ), 1044292, 1045028, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateSmithing ), 1044292, 1045029, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateProvisions ), 1044292, 1045030, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateTailor ), 1044292, 1045031, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateMaps ), 1044292, 1045032, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateSailing ), 1044292, 1045033, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateInn ), 1044292, 1045034, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateArms ), 1044292, 1045035, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateStable ), 1044292, 1045036, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateFletcher ), 1044292, 1045037, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateMeat ), 1044292, 1045038, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateTinker ), 1044292, 1045039, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CratePotions ), 1044292, 1045040, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateFood ), 1044292, 1045041, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateGold ), 1044292, 1045042, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateBard ), 1044292, 1045043, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateWax ), 1044292, 1045044, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateBooks ), 1044292, 1045045, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateBows ), 1044292, 1045046, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateHealer ), 1044292, 1045047, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + AddCraft( typeof( CrateTavern ), 1044292, 1045048, 57.3, 82.3, typeof( WoodBoard ), 1044041, 22, 1044351 ); + index = AddCraft( typeof( Keg ), 1044292, 1023711, 57.8, 82.8, typeof( BarrelStaves ), 1044288, 3, 1044253 ); + AddRes( index, typeof( BarrelHoops ), 1044289, 1, 1044253 ); + AddRes( index, typeof( BarrelLid ), 1044251, 1, 1044253 ); + + // Staves and Shields + AddCraft( typeof( ShepherdsCrook ), 1044295, 1023713, 78.9, 103.9, typeof( WoodBoard ), 1044041, 7, 1044351 ); + AddCraft( typeof( QuarterStaff ), 1044295, 1023721, 73.6, 98.6, typeof( WoodBoard ), 1044041, 6, 1044351 ); + AddCraft( typeof( GnarledStaff ), 1044295, 1025112, 78.9, 103.9, typeof( WoodBoard ), 1044041, 7, 1044351 ); + AddCraft( typeof( WoodenShield ), 1044295, 1027034, 52.6, 77.6, typeof( WoodBoard ), 1044041, 9, 1044351 ); + AddCraft( typeof( WoodenKiteShield ), 1044295, 1027032, 82.6, 97.6, typeof( WoodBoard ), 1044041, 12, 1044351 ); + AddCraft( typeof( Club ), 1044295, 1025043, 53.9, 78.9, typeof( WoodBoard ), 1044041, 4, 1044351 ); + + // Instruments + index = AddCraft( typeof( LapHarp ), 1044293, 1023762, 63.1, 88.1, typeof( WoodBoard ), 1044041, 20, 1044351 ); + AddSkill( index, Trades.Musicianship, 45.0, 50.0 ); + AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 ); + + index = AddCraft( typeof( Harp ), 1044293, 1023761, 78.9, 103.9, typeof( WoodBoard ), 1044041, 35, 1044351 ); + AddSkill( index, Trades.Musicianship, 45.0, 50.0 ); + AddRes( index, typeof( Cloth ), 1044286, 15, 1044287 ); + + index = AddCraft( typeof( Drums ), 1044293, 1023740, 57.8, 82.8, typeof( WoodBoard ), 1044041, 20, 1044351 ); + AddSkill( index, Trades.Musicianship, 45.0, 50.0 ); + AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 ); + + index = AddCraft( typeof( Flute ), 1044293, 1023738, 68.4, 93.4, typeof( WoodBoard ), 1044041, 25, 1044351 ); + AddSkill( index, Trades.Musicianship, 45.0, 50.0 ); + + index = AddCraft( typeof( Lute ), 1044293, 1023763, 68.4, 93.4, typeof( WoodBoard ), 1044041, 25, 1044351 ); + AddSkill( index, Trades.Musicianship, 45.0, 50.0 ); + AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 ); + + index = AddCraft( typeof( Pipes ), 1044293, 1023737, 68.4, 93.4, typeof( WoodBoard ), 1044041, 25, 1044351 ); + AddSkill( index, Trades.Musicianship, 45.0, 50.0 ); + + index = AddCraft( typeof( Tambourine ), 1044293, 1023741, 57.8, 82.8, typeof( WoodBoard ), 1044041, 15, 1044351 ); + AddSkill( index, Trades.Musicianship, 45.0, 50.0 ); + AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 ); + + index = AddCraft( typeof( TambourineTassel ), 1044293, 1044320, 57.8, 82.8, typeof( WoodBoard ), 1044041, 15, 1044351 ); + AddSkill( index, Trades.Musicianship, 45.0, 50.0 ); + AddRes( index, typeof( Cloth ), 1044286, 15, 1044287 ); + + // Misc + index = AddCraft( typeof( SmallBedSouthDeed ), 1044290, 1044321, 94.7, 119.8, typeof( WoodBoard ), 1044041, 100, 1044351 ); + AddSkill( index, Trades.Tailoring, 75.0, 80.0 ); + AddRes( index, typeof( Cloth ), 1044286, 100, 1044287 ); + index = AddCraft(typeof(SmallBedEastDeed), 1044290, 1044322, 94.7, 119.8, typeof(WoodBoard), 1044041, 100, 1044351); + AddSkill( index, Trades.Tailoring, 75.0, 80.0 ); + AddRes( index, typeof( Cloth ), 1044286, 100, 1044287 ); + index = AddCraft(typeof(LargeBedSouthDeed), 1044290, 1044323, 94.7, 119.8, typeof(WoodBoard), 1044041, 150, 1044351); + AddSkill( index, Trades.Tailoring, 75.0, 80.0 ); + AddRes( index, typeof( Cloth ), 1044286, 150, 1044287 ); + index = AddCraft(typeof(LargeBedEastDeed), 1044290, 1044324, 94.7, 119.8, typeof(WoodBoard), 1044041, 150, 1044351); + AddSkill( index, Trades.Tailoring, 75.0, 80.0 ); + AddRes( index, typeof( Cloth ), 1044286, 150, 1044287 ); + AddCraft( typeof( DartBoardSouthDeed ), 1044290, 1044325, 15.7, 40.7, typeof( WoodBoard ), 1044041, 5, 1044351 ); + AddCraft( typeof( DartBoardEastDeed ), 1044290, 1044326, 15.7, 40.7, typeof( WoodBoard ), 1044041, 5, 1044351 ); + index = AddCraft( typeof( PentagramDeed ), 1044290, 1044328, 100.0, 125.0, typeof( WoodBoard ), 1044041, 100, 1044351 ); + AddSkill( index, Trades.Magery, 75.0, 80.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 40, 1044037 ); + index = AddCraft( typeof( AbbatoirDeed ), 1044290, 1044329, 100.0, 125.0, typeof( IronOre ), 1072392, 100, 1044513 ); + AddSkill( index, Trades.Magery, 50.0, 55.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 40, 1044037 ); + AddCraft( typeof( Vase ), 1044290, 1022888, 52.5, 102.5, typeof( IronOre ), 1072392, 1, 1044513 ); + AddCraft( typeof( LargeVase ), 1044290, 1022887, 52.5, 102.5, typeof( IronOre ), 1072392, 3, 1044513 ); + AddCraft( typeof( StatueSouth ), 1044290, 1044505, 60.0, 120.0, typeof( IronOre ), 1072392, 3, 1044513 ); + AddCraft( typeof( StatueNorth ), 1044290, 1044506, 60.0, 120.0, typeof( IronOre ), 1072392, 3, 1044513 ); + AddCraft( typeof( StatueEast ), 1044290, 1044507, 60.0, 120.0, typeof( IronOre ), 1072392, 3, 1044513 ); + AddCraft( typeof( StatuePegasus ), 1044290, 1044510, 70.0, 130.0, typeof( IronOre ), 1072392, 4, 1044513 ); + + // Blacksmithy + index = AddCraft( typeof( SmallForgeDeed ), 1044296, 1044330, 73.6, 98.6, typeof( WoodBoard ), 1044041, 5, 1044351 ); + AddSkill( index, Trades.Blacksmith, 75.0, 80.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 75, 1044037 ); + index = AddCraft( typeof( LargeForgeEastDeed ), 1044296, 1044331, 78.9, 103.9, typeof( WoodBoard ), 1044041, 5, 1044351 ); + AddSkill( index, Trades.Blacksmith, 80.0, 85.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 100, 1044037 ); + index = AddCraft( typeof( LargeForgeSouthDeed ), 1044296, 1044332, 78.9, 103.9, typeof( WoodBoard ), 1044041, 5, 1044351 ); + AddSkill( index, Trades.Blacksmith, 80.0, 85.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 100, 1044037 ); + index = AddCraft( typeof( AnvilEastDeed ), 1044296, 1044333, 73.6, 98.6, typeof( WoodBoard ), 1044041, 5, 1044351 ); + AddSkill( index, Trades.Blacksmith, 75.0, 80.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 150, 1044037 ); + index = AddCraft( typeof( AnvilSouthDeed ), 1044296, 1044334, 73.6, 98.6, typeof( WoodBoard ), 1044041, 5, 1044351 ); + AddSkill( index, Trades.Blacksmith, 75.0, 80.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 150, 1044037 ); + + // Training + index = AddCraft( typeof( TrainingDummyEastDeed ), 1044297, 1044335, 68.4, 93.4, typeof( WoodBoard ), 1044041, 55, 1044351 ); + AddSkill( index, Trades.Tailoring, 50.0, 55.0 ); + AddRes( index, typeof( Cloth ), 1044286, 60, 1044287 ); + index = AddCraft( typeof( TrainingDummySouthDeed ), 1044297, 1044336, 68.4, 93.4, typeof( WoodBoard ), 1044041, 55, 1044351 ); + AddSkill( index, Trades.Tailoring, 50.0, 55.0 ); + AddRes( index, typeof( Cloth ), 1044286, 60, 1044287 ); + index = AddCraft( typeof( PickpocketDipEastDeed ), 1044297, 1044337, 73.6, 98.6, typeof( WoodBoard ), 1044041, 65, 1044351 ); + AddSkill( index, Trades.Tailoring, 50.0, 55.0 ); + AddRes( index, typeof( Cloth ), 1044286, 60, 1044287 ); + index = AddCraft( typeof( PickpocketDipSouthDeed ), 1044297, 1044338, 73.6, 98.6, typeof( WoodBoard ), 1044041, 65, 1044351 ); + AddSkill( index, Trades.Tailoring, 50.0, 55.0 ); + AddRes( index, typeof( Cloth ), 1044286, 60, 1044287 ); + + // Tailoring + index = AddCraft( typeof( Dressform ), 1044298, 1044339, 63.1, 88.1, typeof( WoodBoard ), 1044041, 25, 1044351 ); + AddSkill( index, Trades.Tailoring, 65.0, 70.0 ); + AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 ); + index = AddCraft( typeof( SpinningwheelEastDeed ), 1044298, 1044341, 73.6, 98.6, typeof( WoodBoard ), 1044041, 75, 1044351 ); + AddSkill( index, Trades.Tailoring, 65.0, 70.0 ); + AddRes( index, typeof( Cloth ), 1044286, 25, 1044287 ); + index = AddCraft( typeof( SpinningwheelSouthDeed ), 1044298, 1044342, 73.6, 98.6, typeof( WoodBoard ), 1044041, 75, 1044351 ); + AddSkill( index, Trades.Tailoring, 65.0, 70.0 ); + AddRes( index, typeof( Cloth ), 1044286, 25, 1044287 ); + index = AddCraft( typeof( LoomEastDeed ), 1044298, 1044343, 84.2, 109.2, typeof( WoodBoard ), 1044041, 85, 1044351 ); + AddSkill( index, Trades.Tailoring, 65.0, 70.0 ); + AddRes( index, typeof( Cloth ), 1044286, 25, 1044287 ); + index = AddCraft( typeof( LoomSouthDeed ), 1044298, 1044344, 84.2, 109.2, typeof( WoodBoard ), 1044041, 85, 1044351 ); + AddSkill( index, Trades.Tailoring, 65.0, 70.0 ); + AddRes( index, typeof( Cloth ), 1044286, 25, 1044287 ); + + // Cooking + index = AddCraft( typeof( Bonfire ), 1044299, 1044230, 84.7, 109.7, typeof( WoodBoard ), 1044041, 100, 1044351 ); + AddRes( index, typeof( IronOre ), 1072392, 10, 1044513 ); + index = AddCraft( typeof( StoneOvenEastDeed ), 1044299, 1044345, 68.4, 93.4, typeof( WoodBoard ), 1044041, 85, 1044351 ); + AddSkill( index, Trades.Tinkering, 50.0, 55.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 125, 1044037 ); + index = AddCraft( typeof( StoneOvenSouthDeed ), 1044299, 1044346, 68.4, 93.4, typeof( WoodBoard ), 1044041, 85, 1044351 ); + AddSkill( index, Trades.Tinkering, 50.0, 55.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 125, 1044037 ); + index = AddCraft( typeof( FlourMillEastDeed ), 1044299, 1044347, 94.7, 119.7, typeof( WoodBoard ), 1044041, 100, 1044351 ); + AddSkill( index, Trades.Tinkering, 50.0, 55.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 50, 1044037 ); + index = AddCraft( typeof( FlourMillSouthDeed ), 1044299, 1044348, 94.7, 119.7, typeof( WoodBoard ), 1044041, 100, 1044351 ); + AddSkill( index, Trades.Tinkering, 50.0, 55.0 ); + AddRes( index, typeof( IronIngot ), 1044036, 50, 1044037 ); + AddCraft( typeof( WaterTroughEastDeed ), 1044299, 1044349, 94.7, 119.7, typeof( WoodBoard ), 1044041, 150, 1044351 ); + AddCraft( typeof( WaterTroughSouthDeed ), 1044299, 1044350, 94.7, 119.7, typeof( WoodBoard ), 1044041, 150, 1044351 ); + + MarkOption = true; + Repair = true; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefCartography.cs b/Scripts/Engines/Craft/DefCartography.cs new file mode 100644 index 0000000..b4ba44e --- /dev/null +++ b/Scripts/Engines/Craft/DefCartography.cs @@ -0,0 +1,89 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class DefCartography : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Cartography; } + } + + public override int GumpTitleNumber + { + get { return 1044008; } //
CARTOGRAPHY MENU
+ } + + public override double GetChanceAtMin( CraftItem item ) + { + return 0.0; // 0% + } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if ( m_CraftSystem == null ) + m_CraftSystem = new DefCartography(); + + return m_CraftSystem; + } + } + + private DefCartography() : base( 1, 1, 1.25 )// base( 1, 1, 3.0 ) + { + } + + public override int CanCraft( Mobile from, BaseTool tool, Type itemType ) + { + if( tool == null || tool.Deleted || tool.UsesRemaining < 0 ) + return 1044038; // You have worn out your tool! + else if ( !BaseTool.CheckAccessible( tool, from ) ) + return 1044263; // The tool must be on your person to use. + + return 0; + } + + public override void PlayCraftEffect( Mobile from ) + { + from.PlaySound( 0x249 ); + } + + public override int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ) + { + if ( toolBroken ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool + + if ( failed ) + { + if ( lostMaterial ) + return 1044043; // You failed to create the item, and some of your materials are lost. + else + return 1044157; // You failed to create the item, but no materials were lost. + } + else + { + if ( quality == 0 ) + return 502785; // You were barely able to make this item. It's quality is below average. + else if ( makersMark && quality == 2 ) + return 1044156; // You create an exceptional quality item and affix your maker's mark. + else if ( quality == 2 ) + return 1044155; // You create an exceptional quality item. + else + return 1044154; // You create the item. + } + } + + public override void InitCraftList() + { + AddCraft( typeof( LocalMap ), 1044448, 1015230, 10.0, 70.0, typeof( BlankMap ), 1044449, 1, 1044450 ); + AddCraft( typeof( CityMap ), 1044448, 1015231, 25.0, 85.0, typeof( BlankMap ), 1044449, 1, 1044450 ); + AddCraft( typeof( SeaChart ), 1044448, 1015232, 35.0, 95.0, typeof( BlankMap ), 1044449, 1, 1044450 ); + AddCraft( typeof( WorldMap ), 1044448, 1015233, 39.5, 99.5, typeof( BlankMap ), 1044449, 1, 1044450 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefCooking.cs b/Scripts/Engines/Craft/DefCooking.cs new file mode 100644 index 0000000..8927811 --- /dev/null +++ b/Scripts/Engines/Craft/DefCooking.cs @@ -0,0 +1,203 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class DefCooking : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Cooking; } + } + + public override int GumpTitleNumber + { + get { return 1044003; } //
COOKING MENU
+ } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if ( m_CraftSystem == null ) + m_CraftSystem = new DefCooking(); + + return m_CraftSystem; + } + } + + public override CraftECA ECA{ get{ return CraftECA.ChanceMinusSixtyToFourtyFive; } } + + public override double GetChanceAtMin( CraftItem item ) + { + return 0.0; // 0% + } + + private DefCooking() : base( 1, 1, 1.25 ) + { + } + + public override int CanCraft( Mobile from, BaseTool tool, Type itemType ) + { + if( tool == null || tool.Deleted || tool.UsesRemaining < 0 ) + return 1044038; // You have worn out your tool! + else if ( !BaseTool.CheckAccessible( tool, from ) ) + return 1044263; // The tool must be on your person to use. + + return 0; + } + + public override void PlayCraftEffect( Mobile from ) + { + } + + public override int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ) + { + if ( toolBroken ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool + + if ( failed ) + { + if ( lostMaterial ) + return 1044043; // You failed to create the item, and some of your materials are lost. + else + return 1044157; // You failed to create the item, but no materials were lost. + } + else + { + if ( quality == 0 ) + return 502785; // You were barely able to make this item. It's quality is below average. + else if ( makersMark && quality == 2 ) + return 1044156; // You create an exceptional quality item and affix your maker's mark. + else if ( quality == 2 ) + return 1044155; // You create an exceptional quality item. + else + return 1044154; // You create the item. + } + } + + public override void InitCraftList() + { + int index = -1; + + /* Begin Ingredients */ + index = AddCraft( typeof( SackFlour ), 1044495, 1024153, 0.0, 100.0, typeof( WheatSheaf ), 1044489, 2, 1044490 ); + SetNeedMill( index, true ); + + index = AddCraft( typeof( Dough ), 1044495, 1024157, 0.0, 100.0, typeof( SackFlour ), 1044468, 1, 1044253 ); + AddRes( index, typeof( BaseBeverage ), 1046458, 1, 1044253 ); + + index = AddCraft( typeof( SweetDough ), 1044495, 1041340, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( JarHoney ), 1044472, 1, 1044253 ); + + index = AddCraft( typeof( CakeMix ), 1044495, 1041002, 0.0, 100.0, typeof( SackFlour ), 1044468, 1, 1044253 ); + AddRes( index, typeof( SweetDough ), 1044475, 1, 1044253 ); + + index = AddCraft( typeof( CookieMix ), 1044495, 1024159, 0.0, 100.0, typeof( JarHoney ), 1044472, 1, 1044253 ); + AddRes( index, typeof( SweetDough ), 1044475, 1, 1044253 ); + /* End Ingredients */ + + /* Begin Preparations */ + index = AddCraft( typeof( UnbakedQuiche ), 1044496, 1041339, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( Eggs ), 1044477, 1, 1044253 ); + + // TODO: This must also support chicken and lamb legs + index = AddCraft( typeof( UnbakedMeatPie ), 1044496, 1041338, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( RawRibs ), 1044482, 1, 1044253 ); + + index = AddCraft( typeof( UncookedSausagePizza ), 1044496, 1041337, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( Sausage ), 1044483, 1, 1044253 ); + + index = AddCraft( typeof( UncookedCheesePizza ), 1044496, 1041341, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( CheeseWheel ), 1044486, 1, 1044253 ); + + index = AddCraft( typeof( UnbakedFruitPie ), 1044496, 1041334, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( Pear ), 1044481, 1, 1044253 ); + + index = AddCraft( typeof( UnbakedPeachCobbler ), 1044496, 1041335, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( Peach ), 1044480, 1, 1044253 ); + + index = AddCraft( typeof( UnbakedApplePie ), 1044496, 1041336, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( Apple ), 1044479, 1, 1044253 ); + + index = AddCraft( typeof( UnbakedPumpkinPie ), 1044496, 1041342, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + AddRes( index, typeof( Pumpkin ), 1044484, 1, 1044253 ); + /* End Preparations */ + + /* Begin Baking */ + index = AddCraft( typeof( BreadLoaf ), 1044497, 1024156, 0.0, 100.0, typeof( Dough ), 1044469, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( Cookies ), 1044497, 1025643, 0.0, 100.0, typeof( CookieMix ), 1044474, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( Cake ), 1044497, 1022537, 0.0, 100.0, typeof( CakeMix ), 1044471, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( Muffins ), 1044497, 1022539, 0.0, 100.0, typeof( SweetDough ), 1044475, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( Quiche ), 1044497, 1041345, 0.0, 100.0, typeof( UnbakedQuiche ), 1044518, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( MeatPie ), 1044497, 1041347, 0.0, 100.0, typeof( UnbakedMeatPie ), 1044519, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( SausagePizza ), 1044497, 1044517, 0.0, 100.0, typeof( UncookedSausagePizza ), 1044520, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( CheesePizza ), 1044497, 1044516, 0.0, 100.0, typeof( UncookedCheesePizza ), 1044521, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( FruitPie ), 1044497, 1041346, 0.0, 100.0, typeof( UnbakedFruitPie ), 1044522, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( PeachCobbler ), 1044497, 1041344, 0.0, 100.0, typeof( UnbakedPeachCobbler ), 1044523, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( ApplePie ), 1044497, 1041343, 0.0, 100.0, typeof( UnbakedApplePie ), 1044524, 1, 1044253 ); + SetNeedOven( index, true ); + + index = AddCraft( typeof( PumpkinPie ), 1044497, 1041348, 0.0, 100.0, typeof( UnbakedPumpkinPie ), 1046461, 1, 1044253 ); + SetNeedOven( index, true ); + /* End Baking */ + + /* Begin Barbecue */ + index = AddCraft( typeof( CookedBird ), 1044498, 1022487, 0.0, 100.0, typeof( RawBird ), 1044470, 1, 1044253 ); + SetNeedHeat( index, true ); + SetUseAllRes( index, true ); + + index = AddCraft( typeof( ChickenLeg ), 1044498, 1025640, 0.0, 100.0, typeof( RawChickenLeg ), 1044473, 1, 1044253 ); + SetNeedHeat( index, true ); + SetUseAllRes( index, true ); + + index = AddCraft( typeof( Ham ), 1044498, 1022505, 0.0, 100.0, typeof( RawHam ), 1044499, 1, 1044253 ); + SetNeedHeat( index, true ); + SetUseAllRes( index, true ); + + index = AddCraft( typeof( FishSteak ), 1044498, 1022427, 0.0, 100.0, typeof( RawFishSteak ), 1044476, 1, 1044253 ); + SetNeedHeat( index, true ); + SetUseAllRes( index, true ); + + index = AddCraft( typeof( FriedEggs ), 1044498, 1022486, 0.0, 100.0, typeof( Eggs ), 1044477, 1, 1044253 ); + SetNeedHeat( index, true ); + SetUseAllRes( index, true ); + + index = AddCraft( typeof( LambLeg ), 1044498, 1025642, 0.0, 100.0, typeof( RawLambLeg ), 1044478, 1, 1044253 ); + SetNeedHeat( index, true ); + SetUseAllRes( index, true ); + + index = AddCraft( typeof( Ribs ), 1044498, 1022546, 0.0, 100.0, typeof( RawRibs ), 1044485, 1, 1044253 ); + SetNeedHeat( index, true ); + SetUseAllRes( index, true ); + + index = AddCraft( typeof( SlabOfBacon ), 1044498, 1022422, 0.0, 100.0, typeof( RawSlabOfBacon ), 1044574, 1, 1044253 ); + SetNeedHeat( index, true ); + SetUseAllRes( index, true ); + /* End Barbecue */ + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefInscription.cs b/Scripts/Engines/Craft/DefInscription.cs new file mode 100644 index 0000000..e61dd65 --- /dev/null +++ b/Scripts/Engines/Craft/DefInscription.cs @@ -0,0 +1,298 @@ +using System; +using Server.Items; +using Server.Misc; +using Server.Spells; + +namespace Server.Engines.Craft +{ + public class DefInscription : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Inscribe; } + } + + public override int GumpTitleNumber + { + get { return 1044009; } //
INSCRIPTION MENU
+ } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if (m_CraftSystem == null) + m_CraftSystem = new DefInscription(); + + return m_CraftSystem; + } + } + + public override double GetChanceAtMin(CraftItem item) + { + return 0.0; // 0% + } + + private DefInscription() + : base(1, 1, 1.25)// base( 1, 1, 3.0 ) + { + } + + public override int CanCraft(Mobile from, BaseTool tool, Type typeItem) + { + if (tool == null || tool.Deleted || tool.UsesRemaining < 0) + return 1044038; // You have worn out your tool! + else if (!BaseTool.CheckAccessible(tool, from)) + return 1044263; // The tool must be on your person to use. + + if (typeItem != null) + { + object o = Activator.CreateInstance(typeItem); + + if (o is SpellScroll) + { + SpellScroll scroll = (SpellScroll)o; + Spellbook book = Spellbook.Find(from, scroll.SpellID); + + bool hasSpell = (book != null && book.HasSpell(scroll.SpellID)); + + scroll.Delete(); + + return (hasSpell ? 0 : 1042404); // null : You don't have that spell! + } + else if (o is Item) + { + ((Item)o).Delete(); + } + } + + return 0; + } + + public override void PlayCraftEffect(Mobile from) + { + from.PlaySound(0x249); + } + + private static Type typeofSpellScroll = typeof(SpellScroll); + + public override int PlayEndingEffect(Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item) + { + if (toolBroken) + from.SendLocalizedMessage(1044038); // You have worn out your tool + + if (!typeofSpellScroll.IsAssignableFrom(item.ItemType)) // not a scroll + { + if (failed) + { + if (lostMaterial) + return 1044043; // You failed to create the item, and some of your materials are lost. + else + return 1044157; // You failed to create the item, but no materials were lost. + } + else + { + if (quality == 0) + return 502785; // You were barely able to make this item. It's quality is below average. + else if (makersMark && quality == 2) + return 1044156; // You create an exceptional quality item and affix your maker's mark. + else if (quality == 2) + return 1044155; // You create an exceptional quality item. + else + return 1044154; // You create the item. + } + } + else + { + if (failed) + return 501630; // You fail to inscribe the scroll, and the scroll is ruined. + else + return 501629; // You inscribe the spell and put the scroll in your backpack. + } + } + + private int m_Circle, m_Mana; + + private enum Reg { BlackPearl, Bloodmoss, Garlic, Ginseng, MandrakeRoot, Nightshade, SulfurousAsh, SpidersSilk } + + private Type[] m_RegTypes = new Type[] + { + typeof( BlackPearl ), + typeof( Bloodmoss ), + typeof( Garlic ), + typeof( Ginseng ), + typeof( MandrakeRoot ), + typeof( Nightshade ), + typeof( SulfurousAsh ), + typeof( SpidersSilk ) + }; + + private int m_Index; + + private void AddSpell(Type type, params Reg[] regs) + { + double minSkill, maxSkill; + + switch (m_Circle) + { + default: + case 0: minSkill = -25.0; maxSkill = 25.0; break; + case 1: minSkill = -10.8; maxSkill = 39.2; break; + case 2: minSkill = 03.5; maxSkill = 53.5; break; + case 3: minSkill = 17.8; maxSkill = 67.8; break; + case 4: minSkill = 32.1; maxSkill = 82.1; break; + case 5: minSkill = 46.4; maxSkill = 96.4; break; + case 6: minSkill = 60.7; maxSkill = 110.7; break; + case 7: minSkill = 75.0; maxSkill = 125.0; break; + } + + int index = AddCraft(type, 1044369 + m_Circle, 1044381 + m_Index++, minSkill, maxSkill, m_RegTypes[(int)regs[0]], 1044353 + (int)regs[0], 1, 1044361 + (int)regs[0]); + + for (int i = 1; i < regs.Length; ++i) + AddRes(index, m_RegTypes[(int)regs[i]], 1044353 + (int)regs[i], 1, 1044361 + (int)regs[i]); + + AddRes(index, typeof(BlankScroll), 1044377, 1, 1044378); + + SetManaReq(index, m_Mana); + } + + public override void InitCraftList() + { + m_Circle = 0; + m_Mana = 4; + + AddSpell(typeof(ReactiveArmorScroll), Reg.Garlic, Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(ClumsyScroll), Reg.Bloodmoss, Reg.Nightshade); + AddSpell(typeof(CreateFoodScroll), Reg.Garlic, Reg.Ginseng, Reg.MandrakeRoot); + AddSpell(typeof(FeeblemindScroll), Reg.Nightshade, Reg.Ginseng); + AddSpell(typeof(HealScroll), Reg.Garlic, Reg.Ginseng, Reg.SpidersSilk); + AddSpell(typeof(MagicArrowScroll), Reg.SulfurousAsh); + AddSpell(typeof(NightSightScroll), Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(WeakenScroll), Reg.Garlic, Reg.Nightshade); + + m_Circle = 1; + m_Mana = 6; + + AddSpell(typeof(AgilityScroll), Reg.Bloodmoss, Reg.MandrakeRoot); + AddSpell(typeof(CunningScroll), Reg.Nightshade, Reg.MandrakeRoot); + AddSpell(typeof(CureScroll), Reg.Garlic, Reg.Ginseng); + AddSpell(typeof(HarmScroll), Reg.Nightshade, Reg.SpidersSilk); + AddSpell(typeof(MagicTrapScroll), Reg.Garlic, Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(MagicUnTrapScroll), Reg.Bloodmoss, Reg.SulfurousAsh); + AddSpell(typeof(ProtectionScroll), Reg.Garlic, Reg.Ginseng, Reg.SulfurousAsh); + AddSpell(typeof(StrengthScroll), Reg.Nightshade, Reg.MandrakeRoot); + + m_Circle = 2; + m_Mana = 9; + + AddSpell(typeof(BlessScroll), Reg.Garlic, Reg.MandrakeRoot); + AddSpell(typeof(FireballScroll), Reg.BlackPearl); + AddSpell(typeof(MagicLockScroll), Reg.Bloodmoss, Reg.Garlic, Reg.SulfurousAsh); + AddSpell(typeof(PoisonScroll), Reg.Nightshade); + AddSpell(typeof(TelekinisisScroll), Reg.Bloodmoss, Reg.MandrakeRoot); + AddSpell(typeof(TeleportScroll), Reg.Bloodmoss, Reg.MandrakeRoot); + AddSpell(typeof(UnlockScroll), Reg.Bloodmoss, Reg.SulfurousAsh); + AddSpell(typeof(WallOfStoneScroll), Reg.Bloodmoss, Reg.Garlic); + + m_Circle = 3; + m_Mana = 11; + + AddSpell(typeof(ArchCureScroll), Reg.Garlic, Reg.Ginseng, Reg.MandrakeRoot); + AddSpell(typeof(ArchProtectionScroll), Reg.Garlic, Reg.Ginseng, Reg.MandrakeRoot, Reg.SulfurousAsh); + AddSpell(typeof(CurseScroll), Reg.Garlic, Reg.Nightshade, Reg.SulfurousAsh); + AddSpell(typeof(FireFieldScroll), Reg.BlackPearl, Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(GreaterHealScroll), Reg.Garlic, Reg.SpidersSilk, Reg.MandrakeRoot, Reg.Ginseng); + AddSpell(typeof(LightningScroll), Reg.MandrakeRoot, Reg.SulfurousAsh); + AddSpell(typeof(ManaDrainScroll), Reg.BlackPearl, Reg.SpidersSilk, Reg.MandrakeRoot); + AddSpell(typeof(RecallScroll), Reg.BlackPearl, Reg.Bloodmoss, Reg.MandrakeRoot); + + m_Circle = 4; + m_Mana = 14; + + AddSpell(typeof(BladeSpiritsScroll), Reg.BlackPearl, Reg.Nightshade, Reg.MandrakeRoot); + AddSpell(typeof(DispelFieldScroll), Reg.BlackPearl, Reg.Garlic, Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(IncognitoScroll), Reg.Bloodmoss, Reg.Garlic, Reg.Nightshade); + AddSpell(typeof(MagicReflectScroll), Reg.Garlic, Reg.MandrakeRoot, Reg.SpidersSilk); + AddSpell(typeof(MindBlastScroll), Reg.BlackPearl, Reg.MandrakeRoot, Reg.Nightshade, Reg.SulfurousAsh); + AddSpell(typeof(ParalyzeScroll), Reg.Garlic, Reg.MandrakeRoot, Reg.SpidersSilk); + AddSpell(typeof(PoisonFieldScroll), Reg.BlackPearl, Reg.Nightshade, Reg.SpidersSilk); + AddSpell(typeof(SummonCreatureScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SpidersSilk); + + m_Circle = 5; + m_Mana = 20; + + AddSpell(typeof(DispelScroll), Reg.Garlic, Reg.MandrakeRoot, Reg.SulfurousAsh); + AddSpell(typeof(EnergyBoltScroll), Reg.BlackPearl, Reg.Nightshade); + AddSpell(typeof(ExplosionScroll), Reg.Bloodmoss, Reg.MandrakeRoot); + AddSpell(typeof(InvisibilityScroll), Reg.Bloodmoss, Reg.Nightshade); + AddSpell(typeof(MarkScroll), Reg.Bloodmoss, Reg.BlackPearl, Reg.MandrakeRoot); + AddSpell(typeof(MassCurseScroll), Reg.Garlic, Reg.MandrakeRoot, Reg.Nightshade, Reg.SulfurousAsh); + AddSpell(typeof(ParalyzeFieldScroll), Reg.BlackPearl, Reg.Ginseng, Reg.SpidersSilk); + AddSpell(typeof(RevealScroll), Reg.Bloodmoss, Reg.SulfurousAsh); + + m_Circle = 6; + m_Mana = 40; + + AddSpell(typeof(ChainLightningScroll), Reg.BlackPearl, Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SulfurousAsh); + AddSpell(typeof(EnergyFieldScroll), Reg.BlackPearl, Reg.MandrakeRoot, Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(FlamestrikeScroll), Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(GateTravelScroll), Reg.BlackPearl, Reg.MandrakeRoot, Reg.SulfurousAsh); + AddSpell(typeof(ManaVampireScroll), Reg.BlackPearl, Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SpidersSilk); + AddSpell(typeof(MassDispelScroll), Reg.BlackPearl, Reg.Garlic, Reg.MandrakeRoot, Reg.SulfurousAsh); + AddSpell(typeof(MeteorSwarmScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SulfurousAsh, Reg.SpidersSilk); + AddSpell(typeof(PolymorphScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SpidersSilk); + + m_Circle = 7; + m_Mana = 50; + + AddSpell(typeof(EarthquakeScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.Ginseng, Reg.SulfurousAsh); + AddSpell(typeof(EnergyVortexScroll), Reg.BlackPearl, Reg.Bloodmoss, Reg.MandrakeRoot, Reg.Nightshade); + AddSpell(typeof(ResurrectionScroll), Reg.Bloodmoss, Reg.Garlic, Reg.Ginseng); + AddSpell(typeof(SummonAirElementalScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SpidersSilk); + AddSpell(typeof(SummonDaemonScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(SummonEarthElementalScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SpidersSilk); + AddSpell(typeof(SummonFireElementalScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SpidersSilk, Reg.SulfurousAsh); + AddSpell(typeof(SummonWaterElementalScroll), Reg.Bloodmoss, Reg.MandrakeRoot, Reg.SpidersSilk); + + int index = -1; + + index = AddCraft(typeof(TanBook), 1074906, 1072870, 30.0, 106, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(BlueBook), 1074906, 1032440, 30.0, 106, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(BrownBook), 1074906, 1073383, 30.0, 106, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(RedBook), 1074906, 1032441, 30.0, 106, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(Grimoire), 1074906, 1032431, 50.0, 116, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(Lexicon), 1074906, 1032433, 50.0, 116, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(Journal), 1074906, 1032430, 50.0, 116, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(Diary), 1074906, 1032429, 50.0, 116, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(Codex), 1074906, 1032432, 50.0, 116, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(Tome), 1074906, 1072862, 60.0, 126, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + index = AddCraft(typeof(Spellbook), 1074906, 1023834, 70.0, 126, typeof(BlankScroll), 1044377, 10, 1044378); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( Leather ), 1044462, 4, 1044463 ); + + MarkOption = true; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefTailoring.cs b/Scripts/Engines/Craft/DefTailoring.cs new file mode 100644 index 0000000..35cdf94 --- /dev/null +++ b/Scripts/Engines/Craft/DefTailoring.cs @@ -0,0 +1,226 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Craft +{ + public class DefTailoring : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Tailoring; } + } + + public override int GumpTitleNumber + { + get { return 1044005; } //
TAILORING MENU
+ } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if ( m_CraftSystem == null ) + m_CraftSystem = new DefTailoring(); + + return m_CraftSystem; + } + } + + public override CraftECA ECA{ get{ return CraftECA.ChanceMinusSixtyToFourtyFive; } } + + public override double GetChanceAtMin( CraftItem item ) + { + return 0.5; // 50% + } + + private DefTailoring() : base( 1, 1, 1.25 )// base( 1, 1, 4.5 ) + { + } + + public override int CanCraft( Mobile from, BaseTool tool, Type itemType ) + { + if( tool == null || tool.Deleted || tool.UsesRemaining < 0 ) + return 1044038; // You have worn out your tool! + else if ( !BaseTool.CheckAccessible( tool, from ) ) + return 1044263; // The tool must be on your person to use. + + return 0; + } + + public static bool IsNonColorable(Type type) + { + for (int i = 0; i < m_TailorNonColorables.Length; ++i) + { + if (m_TailorNonColorables[i] == type) + { + return true; + } + } + + return false; + } + + private static Type[] m_TailorNonColorables = new Type[] + { + typeof( OrcHelm ) + }; + + private static Type[] m_TailorColorables = new Type[] + { + typeof( PlateHelm ) + }; + + public override bool RetainsColorFrom( CraftItem item, Type type ) + { + if ( type != typeof( Cloth ) && type != typeof( UncutCloth ) ) + return false; + + type = item.ItemType; + + bool contains = false; + + for ( int i = 0; !contains && i < m_TailorColorables.Length; ++i ) + contains = ( m_TailorColorables[i] == type ); + + return contains; + } + + public override void PlayCraftEffect( Mobile from ) + { + from.PlaySound( 0x248 ); + } + + public override int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ) + { + if ( toolBroken ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool + + if ( failed ) + { + if ( lostMaterial ) + return 1044043; // You failed to create the item, and some of your materials are lost. + else + return 1044157; // You failed to create the item, but no materials were lost. + } + else + { + if ( quality == 0 ) + return 502785; // You were barely able to make this item. It's quality is below average. + else if ( makersMark && quality == 2 ) + return 1044156; // You create an exceptional quality item and affix your maker's mark. + else if ( quality == 2 ) + return 1044155; // You create an exceptional quality item. + else + return 1044154; // You create the item. + } + } + + public override void InitCraftList() + { + int index = -1; + + #region Hats + AddCraft( typeof( SkullCap ), 1011375, 1025444, 0.0, 25.0, typeof( Cloth ), 1044286, 2, 1044287 ); + AddCraft( typeof( Bandana ), 1011375, 1025440, 0.0, 25.0, typeof( Cloth ), 1044286, 2, 1044287 ); + AddCraft( typeof( FloppyHat ), 1011375, 1025907, 6.2, 31.2, typeof( Cloth ), 1044286, 11, 1044287 ); + AddCraft( typeof( Hood ), 1011375, "hood", 6.2, 31.2, typeof( Cloth ), 1044286, 11, 1044287 ); + AddCraft( typeof( Cap ), 1011375, 1025909, 6.2, 31.2, typeof( Cloth ), 1044286, 11, 1044287 ); + AddCraft( typeof( WideBrimHat ), 1011375, 1025908, 6.2, 31.2, typeof( Cloth ), 1044286, 12, 1044287 ); + AddCraft( typeof( StrawHat ), 1011375, 1025911, 6.2, 31.2, typeof( Cloth ), 1044286, 10, 1044287 ); + AddCraft( typeof( TallStrawHat ), 1011375, 1025910, 6.7, 31.7, typeof( Cloth ), 1044286, 13, 1044287 ); + AddCraft( typeof( WizardsHat ), 1011375, 1025912, 7.2, 32.2, typeof( Cloth ), 1044286, 15, 1044287 ); + AddCraft( typeof( Bonnet ), 1011375, 1025913, 6.2, 31.2, typeof( Cloth ), 1044286, 11, 1044287 ); + AddCraft( typeof( FeatheredHat ), 1011375, 1025914, 6.2, 31.2, typeof( Cloth ), 1044286, 12, 1044287 ); + AddCraft( typeof( TricorneHat ), 1011375, 1025915, 6.2, 31.2, typeof( Cloth ), 1044286, 12, 1044287 ); + AddCraft( typeof( JesterHat ), 1011375, 1025916, 7.2, 32.2, typeof( Cloth ), 1044286, 15, 1044287 ); + #endregion + + #region Shirts + AddCraft( typeof( Doublet ), 1015269, 1028059, 0, 25.0, typeof( Cloth ), 1044286, 8, 1044287 ); + AddCraft( typeof( Shirt ), 1015269, 1025399, 20.7, 45.7, typeof( Cloth ), 1044286, 8, 1044287 ); + AddCraft( typeof( FancyShirt ), 1015269, 1027933, 24.8, 49.8, typeof( Cloth ), 1044286, 8, 1044287 ); + AddCraft( typeof( Tunic ), 1015269, 1028097, 00.0, 25.0, typeof( Cloth ), 1044286, 12, 1044287 ); + AddCraft( typeof( Surcoat ), 1015269, 1028189, 8.2, 33.2, typeof( Cloth ), 1044286, 14, 1044287 ); + AddCraft( typeof( PlainDress ), 1015269, 1027937, 12.4, 37.4, typeof( Cloth ), 1044286, 10, 1044287 ); + AddCraft( typeof( FancyDress ), 1015269, 1027935, 33.1, 58.1, typeof( Cloth ), 1044286, 12, 1044287 ); + AddCraft( typeof( Cloak ), 1015269, 1025397, 41.4, 66.4, typeof( Cloth ), 1044286, 14, 1044287 ); + AddCraft( typeof( Robe ), 1015269, 1027939, 53.9, 78.9, typeof( Cloth ), 1044286, 16, 1044287 ); + AddCraft( typeof( JesterSuit ), 1015269, 1028095, 8.2, 33.2, typeof( Cloth ), 1044286, 24, 1044287 ); + #endregion + + #region Pants + AddCraft( typeof( ShortPants ), 1015279, 1025422, 24.8, 49.8, typeof( Cloth ), 1044286, 6, 1044287 ); + AddCraft( typeof( LongPants ), 1015279, 1025433, 24.8, 49.8, typeof( Cloth ), 1044286, 8, 1044287 ); + AddCraft( typeof( Kilt ), 1015279, 1025431, 20.7, 45.7, typeof( Cloth ), 1044286, 8, 1044287 ); + AddCraft( typeof( Skirt ), 1015279, 1025398, 29.0, 54.0, typeof( Cloth ), 1044286, 10, 1044287 ); + #endregion + + #region Misc + AddCraft( typeof( BodySash ), 1015283, 1025441, 4.1, 29.1, typeof( Cloth ), 1044286, 4, 1044287 ); + AddCraft( typeof( HalfApron ), 1015283, 1025435, 20.7, 45.7, typeof( Cloth ), 1044286, 6, 1044287 ); + AddCraft( typeof( FullApron ), 1015283, 1025437, 29.0, 54.0, typeof( Cloth ), 1044286, 10, 1044287 ); + AddCraft( typeof( OilCloth ), 1015283, 1041498, 74.6, 99.6, typeof( Cloth ), 1044286, 1, 1044287 ); + AddCraft( typeof( Whip ), 1015283, "whip", 53.9, 78.9, typeof( Leather ), 1044462, 4, 1044463 ); + #endregion + + #region Footwear + AddCraft( typeof( Sandals ), 1015288, 1025901, 12.4, 37.4, typeof( Leather ), 1044462, 4, 1044463 ); + AddCraft( typeof( Shoes ), 1015288, 1025904, 16.5, 41.5, typeof( Leather ), 1044462, 6, 1044463 ); + AddCraft( typeof( Boots ), 1015288, 1025899, 33.1, 58.1, typeof( Leather ), 1044462, 8, 1044463 ); + AddCraft( typeof( ThighBoots ), 1015288, 1025906, 41.4, 66.4, typeof( Leather ), 1044462, 10, 1044463 ); + #endregion + + #region Leather Armor + AddCraft( typeof( LeatherGorget ), 1015293, 1025063, 53.9, 78.9, typeof( Leather ), 1044462, 4, 1044463 ); + AddCraft( typeof( LeatherCap ), 1015293, 1027609, 6.2, 31.2, typeof( Leather ), 1044462, 2, 1044463 ); + AddCraft( typeof( LeatherGloves ), 1015293, 1025062, 51.8, 76.8, typeof( Leather ), 1044462, 3, 1044463 ); + AddCraft( typeof( LeatherArms ), 1015293, 1025061, 53.9, 78.9, typeof( Leather ), 1044462, 4, 1044463 ); + AddCraft( typeof( LeatherLegs ), 1015293, 1025067, 66.3, 91.3, typeof( Leather ), 1044462, 10, 1044463 ); + AddCraft( typeof( LeatherChest ), 1015293, 1025068, 70.5, 95.5, typeof( Leather ), 1044462, 12, 1044463 ); + #endregion + + #region Studded Armor + AddCraft( typeof( StuddedGorget ), 1015300, 1025078, 78.8, 103.8, typeof( Leather ), 1044462, 6, 1044463 ); + AddCraft( typeof( StuddedGloves ), 1015300, 1025077, 82.9, 107.9, typeof( Leather ), 1044462, 8, 1044463 ); + AddCraft( typeof( StuddedArms ), 1015300, 1025076, 87.1, 112.1, typeof( Leather ), 1044462, 10, 1044463 ); + AddCraft( typeof( StuddedLegs ), 1015300, 1025082, 91.2, 116.2, typeof( Leather ), 1044462, 12, 1044463 ); + AddCraft( typeof( StuddedChest ), 1015300, 1025083, 94.0, 119.0, typeof( Leather ), 1044462, 14, 1044463 ); + #endregion + + #region Female Armor + AddCraft( typeof( LeatherShorts ), 1015306, 1027168, 62.2, 87.2, typeof( Leather ), 1044462, 8, 1044463 ); + AddCraft( typeof( LeatherSkirt ), 1015306, 1027176, 58.0, 83.0, typeof( Leather ), 1044462, 6, 1044463 ); + AddCraft( typeof( LeatherBustierArms ), 1015306, 1027178, 58.0, 83.0, typeof( Leather ), 1044462, 6, 1044463 ); + AddCraft( typeof( StuddedBustierArms ), 1015306, 1027180, 82.9, 107.9, typeof( Leather ), 1044462, 8, 1044463 ); + AddCraft( typeof( FemaleLeatherChest ), 1015306, 1027174, 62.2, 87.2, typeof( Leather ), 1044462, 8, 1044463 ); + AddCraft( typeof( FemaleStuddedChest ), 1015306, 1027170, 87.1, 112.1, typeof( Leather ), 1044462, 10, 1044463 ); + #endregion + + #region Bone Armor + index = AddCraft( typeof( BoneHelm ), 1049149, 1025206, 85.0, 110.0, typeof( Leather ), 1044462, 4, 1044463 ); + AddRes( index, typeof( Bone ), 1049064, 2, 1049063 ); + + index = AddCraft( typeof( BoneGloves ), 1049149, 1025205, 89.0, 114.0, typeof( Leather ), 1044462, 6, 1044463 ); + AddRes( index, typeof( Bone ), 1049064, 2, 1049063 ); + + index = AddCraft( typeof( BoneArms ), 1049149, 1025203, 92.0, 117.0, typeof( Leather ), 1044462, 8, 1044463 ); + AddRes( index, typeof( Bone ), 1049064, 4, 1049063 ); + + index = AddCraft( typeof( BoneLegs ), 1049149, 1025202, 95.0, 120.0, typeof( Leather ), 1044462, 10, 1044463 ); + AddRes( index, typeof( Bone ), 1049064, 6, 1049063 ); + + index = AddCraft( typeof( BoneChest ), 1049149, 1025199, 96.0, 121.0, typeof( Leather ), 1044462, 12, 1044463 ); + AddRes( index, typeof( Bone ), 1049064, 10, 1049063 ); + + index = AddCraft(typeof(OrcHelm), 1049149, 1027947, 90.0, 115.0, typeof(Leather), 1044462, 6, 1044463); + AddRes(index, typeof(Bone), 1049064, 4, 1049063); + #endregion + + MarkOption = true; + Repair = true; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Craft/DefTinkering.cs b/Scripts/Engines/Craft/DefTinkering.cs new file mode 100644 index 0000000..660e701 --- /dev/null +++ b/Scripts/Engines/Craft/DefTinkering.cs @@ -0,0 +1,454 @@ +using System; +using Server; +using Server.Items; +using Server.Misc; +using Server.Targeting; + +namespace Server.Engines.Craft +{ + public class DefTinkering : CraftSystem + { + public override Trades MainSkill + { + get { return Trades.Tinkering; } + } + + public override int GumpTitleNumber + { + get { return 1044007; } //
TINKERING MENU
+ } + + private static CraftSystem m_CraftSystem; + + public static CraftSystem CraftSystem + { + get + { + if ( m_CraftSystem == null ) + m_CraftSystem = new DefTinkering(); + + return m_CraftSystem; + } + } + + private DefTinkering() : base( 1, 1, 1.25 )// base( 1, 1, 3.0 ) + { + } + + public override double GetChanceAtMin( CraftItem item ) + { + if ( item.NameNumber == 1044258 ) // potion keg + return 0.5; // 50% + + return 0.0; // 0% + } + + public override int CanCraft( Mobile from, BaseTool tool, Type itemType ) + { + if( tool == null || tool.Deleted || tool.UsesRemaining < 0 ) + return 1044038; // You have worn out your tool! + else if ( !BaseTool.CheckAccessible( tool, from ) ) + return 1044263; // The tool must be on your person to use. + + return 0; + } + + private static Type[] m_TinkerColorables = new Type[] + { + typeof( ForkLeft ), typeof( ForkRight ), + typeof( SpoonLeft ), typeof( SpoonRight ), + typeof( KnifeLeft ), typeof( KnifeRight ), + typeof( Plate ), + typeof( Goblet ), typeof( PewterMug ), + typeof( KeyRing ), + typeof( Candelabra ), typeof( Scales ), + typeof( Key ), typeof( Globe ), + typeof( Spyglass ), typeof( Lantern ), + typeof( HeatingStand ) + }; + + public override bool RetainsColorFrom( CraftItem item, Type type ) + { + if ( !type.IsSubclassOf( typeof( BaseIngot ) ) ) + return false; + + type = item.ItemType; + + bool contains = false; + + for ( int i = 0; !contains && i < m_TinkerColorables.Length; ++i ) + contains = ( m_TinkerColorables[i] == type ); + + return contains; + } + + public override void PlayCraftEffect( Mobile from ) + { + from.PlaySound( Utility.RandomList( 0x241, 0x5D9 ) ); + } + + public override int PlayEndingEffect( Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item ) + { + if ( toolBroken ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool + + if ( failed ) + { + if ( lostMaterial ) + return 1044043; // You failed to create the item, and some of your materials are lost. + else + return 1044157; // You failed to create the item, but no materials were lost. + } + else + { + if ( quality == 0 ) + return 502785; // You were barely able to make this item. It's quality is below average. + else if ( makersMark && quality == 2 ) + return 1044156; // You create an exceptional quality item and affix your maker's mark. + else if ( quality == 2 ) + return 1044155; // You create an exceptional quality item. + else + return 1044154; // You create the item. + } + } + + public void AddJewelrySet( GemType gemType, Type itemType ) + { + int offset = (int)gemType - 1; + + int index = AddCraft( typeof( GoldRing ), 1044049, 1044176 + offset, 40.0, 90.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddRes( index, itemType, 1044231 + offset, 1, 1044240 ); + + index = AddCraft( typeof( SilverBeadNecklace ), 1044049, 1044185 + offset, 40.0, 90.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddRes( index, itemType, 1044231 + offset, 1, 1044240 ); + + index = AddCraft( typeof( GoldNecklace ), 1044049, 1044194 + offset, 40.0, 90.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddRes( index, itemType, 1044231 + offset, 1, 1044240 ); + + index = AddCraft( typeof( GoldEarrings ), 1044049, 1044203 + offset, 40.0, 90.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddRes( index, itemType, 1044231 + offset, 1, 1044240 ); + + index = AddCraft( typeof( GoldBeadNecklace ), 1044049, 1044212 + offset, 40.0, 90.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddRes( index, itemType, 1044231 + offset, 1, 1044240 ); + + index = AddCraft( typeof( GoldBracelet ), 1044049, 1044221 + offset, 40.0, 90.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddRes( index, itemType, 1044231 + offset, 1, 1044240 ); + } + + public override void InitCraftList() + { + int index = -1; + + #region Wooden Items + AddCraft( typeof( JointingPlane ), 1044042, 1024144, 0.0, 50.0, typeof( WoodBoard ), 1044041, 4, 1044351 ); + AddCraft( typeof( MouldingPlane ), 1044042, 1024140, 0.0, 50.0, typeof( WoodBoard ), 1044041, 4, 1044351 ); + AddCraft( typeof( SmoothingPlane ), 1044042, 1024146, 0.0, 50.0, typeof( WoodBoard ), 1044041, 4, 1044351 ); + AddCraft( typeof( ClockFrame ), 1044042, 1024173, 0.0, 50.0, typeof( WoodBoard ), 1044041, 6, 1044351 ); + AddCraft( typeof( Axle ), 1044042, 1024187, -25.0, 25.0, typeof( WoodBoard ), 1044041, 2, 1044351 ); + AddCraft( typeof( RollingPin ), 1044042, 1024163, 0.0, 50.0, typeof( WoodBoard ), 1044041, 5, 1044351 ); + #endregion + + #region Tools + AddCraft( typeof( Scissors ), 1044046, 1023998, 5.0, 55.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( MortarPestle ), 1044046, 1023739, 20.0, 70.0, typeof( IronIngot ), 1044036, 3, 1044037 ); + AddCraft( typeof( Scorp ), 1044046, 1024327, 30.0, 80.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( TinkerTools ), 1044046, 1044164, 10.0, 60.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( Hatchet ), 1044046, 1023907, 30.0, 80.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( DrawKnife ), 1044046, 1024324, 30.0, 80.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( SewingKit ), 1044046, 1023997, 10.0, 70.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( Saw ), 1044046, 1024148, 30.0, 80.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( DovetailSaw ), 1044046, 1024136, 30.0, 80.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( Froe ), 1044046, 1024325, 30.0, 80.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( Shovel ), 1044046, 1023898, 40.0, 90.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( Hammer ), 1044046, 1024138, 30.0, 80.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( Tongs ), 1044046, 1024028, 35.0, 85.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( SmithHammer ), 1044046, 1025091, 40.0, 90.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( SledgeHammer ), 1044046, 1024021, 40.0, 90.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( Inshave ), 1044046, 1024326, 30.0, 80.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( Pickaxe ), 1044046, 1023718, 40.0, 90.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( Lockpick ), 1044046, 1025371, 45.0, 95.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( Skillet ), 1044046, 1044567, 30.0, 80.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( FlourSifter ), 1044046, 1024158, 50.0, 100.0, typeof( IronIngot ), 1044036, 3, 1044037 ); + AddCraft( typeof( FletcherTools ), 1044046, 1044166, 35.0, 85.0, typeof( IronIngot ), 1044036, 3, 1044037 ); + AddCraft( typeof( MapmakersPen ), 1044046, 1044167, 25.0, 75.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( ScribesPen ), 1044046, 1044168, 25.0, 75.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + #endregion + + #region Parts + AddCraft( typeof( Gears ), 1044047, 1024179, 5.0, 55.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( ClockParts ), 1044047, 1024175, 25.0, 75.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( BarrelTap ), 1044047, 1024100, 35.0, 85.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( Springs ), 1044047, 1024189, 5.0, 55.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( SextantParts ), 1044047, 1024185, 30.0, 80.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( BarrelHoops ), 1044047, 1024321, -15.0, 35.0, typeof( IronIngot ), 1044036, 5, 1044037 ); + AddCraft( typeof( Hinge ), 1044047, 1024181, 5.0, 55.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + #endregion + + #region Utensils + AddCraft( typeof( ButcherKnife ), 1044048, 1025110, 25.0, 75.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( SpoonLeft ), 1044048, 1044158, 0.0, 50.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( SpoonRight ), 1044048, 1044159, 0.0, 50.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( Plate ), 1044048, 1022519, 0.0, 50.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( ForkLeft ), 1044048, 1044160, 0.0, 50.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( ForkRight ), 1044048, 1044161, 0.0, 50.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( Cleaver ), 1044048, 1023778, 20.0, 70.0, typeof( IronIngot ), 1044036, 3, 1044037 ); + AddCraft( typeof( KnifeLeft ), 1044048, 1044162, 0.0, 50.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( KnifeRight ), 1044048, 1044163, 0.0, 50.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddCraft( typeof( Goblet ), 1044048, 1022458, 10.0, 60.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( PewterMug ), 1044048, 1024097, 10.0, 60.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( SkinningKnife ), 1044048, 1023781, 25.0, 75.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + #endregion + + #region Misc + + index = AddCraft( typeof( CandleShort ), 1044050, 1022575, 25.0, 35.0, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( BaseString ), 1025149, 1, 1042081 ); + index = AddCraft( typeof( CandleMedium ), 1044050, 1022575, 35.0, 45.0, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( BaseString ), 1025149, 1, 1042081 ); + index = AddCraft( typeof( CandleLong ), 1044050, 1022575, 45.0, 55.0, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( BaseString ), 1025149, 1, 1042081 ); + + index = AddCraft( typeof( IronBrazierShort ), 1044050, 1023633, 55.0, 105.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddRes( index, typeof( SulfurousAsh ), 1023980, 20, 1042081 ); + index = AddCraft( typeof( IronBrazier ), 1044050, 1023633, 65.0, 115.0, typeof( IronIngot ), 1044036, 8, 1044037 ); + AddRes( index, typeof( SulfurousAsh ), 1023980, 40, 1042081 ); + index = AddCraft( typeof( IronBrazierStand ), 1044050, 1023633, 75.0, 125.0, typeof( IronIngot ), 1044036, 16, 1044037 ); + AddRes( index, typeof( SulfurousAsh ), 1023980, 60, 1042081 ); + + index = AddCraft( typeof( IronCandle ), 1044050, 1022599, 55.0, 105.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( BaseString ), 1025149, 1, 1042081 ); + index = AddCraft( typeof( IronCandelabra ), 1044050, 1022599, 65.0, 115.0, typeof( IronIngot ), 1044036, 8, 1044037 ); + AddRes( index, typeof( Beeswax ), 1025156, 6, 1042081 ); + AddRes( index, typeof( BaseString ), 1025149, 1, 1042081 ); + index = AddCraft( typeof( IronCandelabraStand ), 1044050, 1022599, 75.0, 125.0, typeof( IronIngot ), 1044036, 16, 1044037 ); + AddRes( index, typeof( Beeswax ), 1025156, 6, 1042081 ); + AddRes( index, typeof( BaseString ), 1025149, 1, 1042081 ); + + AddCraft( typeof( Globe ), 1044050, 1024167, 55.0, 105.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + + index = AddCraft( typeof( HeatingStand ), 1044050, 1026217, 60.0, 110.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddRes( index, typeof( Beeswax ), 1025156, 2, 1042081 ); + AddRes( index, typeof( BaseString ), 1025149, 2, 1042081 ); + + AddCraft( typeof( Key ), 1044050, 1024112, 20.0, 70.0, typeof( IronIngot ), 1044036, 3, 1044037 ); + AddCraft( typeof( KeyRing ), 1044050, 1024113, 10.0, 60.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( Lantern ), 1044050, 1022597, 30.0, 80.0, typeof( IronIngot ), 1044036, 2, 1044037 ); + AddCraft( typeof( Scales ), 1044050, 1026225, 60.0, 110.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + AddCraft( typeof( Spyglass ), 1044050, 1025365, 60.0, 110.0, typeof( IronIngot ), 1044036, 4, 1044037 ); + #endregion + + #region Jewelry + AddJewelrySet( GemType.StarSapphire, typeof( StarSapphire ) ); + AddJewelrySet( GemType.Emerald, typeof( Emerald ) ); + AddJewelrySet( GemType.Sapphire, typeof( Sapphire ) ); + AddJewelrySet( GemType.Ruby, typeof( Ruby ) ); + AddJewelrySet( GemType.Citrine, typeof( Citrine ) ); + AddJewelrySet( GemType.Amethyst, typeof( Amethyst ) ); + AddJewelrySet( GemType.Tourmaline, typeof( Tourmaline ) ); + AddJewelrySet( GemType.Amber, typeof( Amber ) ); + AddJewelrySet( GemType.Diamond, typeof( Diamond ) ); + #endregion + + #region Multi-Component Items + index = AddCraft( typeof( AxleGears ), 1044051, 1024177, 0.0, 0.0, typeof( Axle ), 1044169, 1, 1044253 ); + AddRes( index, typeof( Gears ), 1044254, 1, 1044253 ); + + index = AddCraft( typeof( ClockParts ), 1044051, 1024175, 0.0, 0.0, typeof( AxleGears ), 1044170, 1, 1044253 ); + AddRes( index, typeof( Springs ), 1044171, 1, 1044253 ); + + index = AddCraft( typeof( SextantParts ), 1044051, 1024185, 0.0, 0.0, typeof( AxleGears ), 1044170, 1, 1044253 ); + AddRes( index, typeof( Hinge ), 1044172, 1, 1044253 ); + + index = AddCraft( typeof( ClockRight ), 1044051, 1044257, 0.0, 0.0, typeof( ClockFrame ), 1044174, 1, 1044253 ); + AddRes( index, typeof( ClockParts ), 1044173, 1, 1044253 ); + + index = AddCraft( typeof( ClockLeft ), 1044051, 1044256, 0.0, 0.0, typeof( ClockFrame ), 1044174, 1, 1044253 ); + AddRes( index, typeof( ClockParts ), 1044173, 1, 1044253 ); + + AddCraft( typeof( Sextant ), 1044051, 1024183, 0.0, 0.0, typeof( SextantParts ), 1044175, 1, 1044253 ); + + index = AddCraft( typeof( PotionKeg ), 1044051, 1044258, 75.0, 100.0, typeof( Keg ), 1044255, 1, 1044253 ); + AddRes( index, typeof( Bottle ), 1044250, 10, 1044253 ); + AddRes( index, typeof( BarrelLid ), 1044251, 1, 1044253 ); + AddRes( index, typeof( BarrelTap ), 1044252, 1, 1044253 ); + + #endregion + + #region Traps + // Dart Trap + index = AddCraft( typeof( DartTrapCraft ), 1044052, 1024396, 30.0, 80.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddRes( index, typeof( Bolt ), 1044570, 1, 1044253 ); + + // Poison Trap + index = AddCraft( typeof( PoisonTrapCraft ), 1044052, 1044593, 30.0, 80.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddRes( index, typeof( BasePoisonPotion ), 1044571, 1, 1044253 ); + + // Explosion Trap + index = AddCraft( typeof( ExplosionTrapCraft ), 1044052, 1044597, 55.0, 105.0, typeof( IronIngot ), 1044036, 1, 1044037 ); + AddRes( index, typeof( BaseExplosionPotion ), 1044569, 1, 1044253 ); + + #endregion + + #region Glass + index = AddCraft( typeof( Bottle ), 1072393, 1023854, 52.5, 102.5, typeof( CrystalPowder ), 1044625, 1, 1044627 ); + SetUseAllRes( index, true ); + AddCraft( typeof( SmallFlask ), 1072393, 1044610, 52.5, 102.5, typeof( CrystalPowder ), 1044625, 20, 1044627 ); + AddCraft( typeof( MediumFlask ), 1072393, 1044611, 52.5, 102.5, typeof( CrystalPowder ), 1044625, 30, 1044627 ); + AddCraft( typeof( CurvedFlask ), 1072393, 1044612, 55.0, 105.0, typeof( CrystalPowder ), 1044625, 20, 1044627 ); + AddCraft( typeof( LongFlask ), 1072393, 1044613, 57.5, 107.5, typeof( CrystalPowder ), 1044625, 40, 1044627 ); + AddCraft( typeof( LargeFlask ), 1072393, 1044623, 60.0, 110.0, typeof( CrystalPowder ), 1044625, 50, 1044627 ); + AddCraft( typeof( AniSmallBlueFlask ), 1072393, 1044614, 60.0, 110.0, typeof( CrystalPowder ), 1044625, 50, 1044627 ); + AddCraft( typeof( AniLargeVioletFlask ), 1072393, 1044615, 60.0, 110.0, typeof( CrystalPowder ), 1044625, 50, 1044627 ); + AddCraft( typeof( AniRedRibbedFlask ), 1072393, 1044624, 60.0, 110.0, typeof( CrystalPowder ), 1044625, 70, 1044627 ); + AddCraft( typeof( EmptyVialsWRack ), 1072393, 1044616, 65.0, 115.0, typeof( CrystalPowder ), 1044625, 80, 1044627 ); + AddCraft( typeof( FullVialsWRack ), 1072393, 1044617, 65.0, 115.0, typeof( CrystalPowder ), 1044625, 90, 1044627 ); + AddCraft( typeof( SpinningHourglass ), 1072393, 1044618, 75.0, 125.0, typeof( CrystalPowder ), 1044625, 100, 1044627 ); + + #endregion + + MarkOption = true; + Repair = true; + } + } + + public abstract class TrapCraft : CustomCraft + { + private LockableContainer m_Container; + + public LockableContainer Container{ get{ return m_Container; } } + + public abstract TrapType TrapType{ get; } + + public TrapCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality ) : base( from, craftItem, craftSystem, typeRes, tool, quality ) + { + } + + private int Verify( LockableContainer container ) + { + if ( container == null || container.KeyValue == 0 ) + return 1005638; // You can only trap lockable chests. + if ( From.Map != container.Map || !From.InRange( container.GetWorldLocation(), 2 ) ) + return 500446; // That is too far away. + if ( !container.Movable ) + return 502944; // You cannot trap this item because it is locked down. + if ( !container.IsAccessibleTo( From ) ) + return 502946; // That belongs to someone else. + if ( container.Locked ) + return 502943; // You can only trap an unlocked object. + if ( container.TrapType != TrapType.None ) + return 502945; // You can only place one trap on an object at a time. + + return 0; + } + + private bool Acquire( object target, out int message ) + { + LockableContainer container = target as LockableContainer; + + message = Verify( container ); + + if ( message > 0 ) + { + return false; + } + else + { + m_Container = container; + return true; + } + } + + public override void EndCraftAction() + { + From.SendLocalizedMessage( 502921 ); // What would you like to set a trap on? + From.Target = new ContainerTarget( this ); + } + + private class ContainerTarget : Target + { + private TrapCraft m_TrapCraft; + + public ContainerTarget( TrapCraft trapCraft ) : base( -1, false, TargetFlags.None ) + { + m_TrapCraft = trapCraft; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + int message; + + if ( m_TrapCraft.Acquire( targeted, out message ) ) + m_TrapCraft.CraftItem.CompleteCraft( m_TrapCraft.Quality, false, m_TrapCraft.From, m_TrapCraft.CraftSystem, m_TrapCraft.TypeRes, m_TrapCraft.Tool, m_TrapCraft ); + else + Failure( message ); + } + + protected override void OnTargetCancel( Mobile from, TargetCancelType cancelType ) + { + if ( cancelType == TargetCancelType.Canceled ) + Failure( 0 ); + } + + private void Failure( int message ) + { + Mobile from = m_TrapCraft.From; + BaseTool tool = m_TrapCraft.Tool; + + if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) + from.SendGump( new CraftGump( from, m_TrapCraft.CraftSystem, tool, message ) ); + else if ( message > 0 ) + from.SendLocalizedMessage( message ); + } + } + + public override Item CompleteCraft( out int message ) + { + message = Verify( this.Container ); + + if ( message == 0 ) + { + int trapLevel = (int)( SkillCheck.TradeSkill( From, Trades.Tinkering, false ) / 10 ); + + Container.TrapType = this.TrapType; + Container.TrapPower = trapLevel * 9; + Container.TrapLevel = trapLevel; + Container.TrapOnLockpick = true; + + message = 1005639; // Trap is disabled until you lock the chest. + } + + return null; + } + } + + [CraftItemID( 0x1BFC )] + public class DartTrapCraft : TrapCraft + { + public override TrapType TrapType{ get{ return TrapType.DartTrap; } } + + public DartTrapCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality ) : base( from, craftItem, craftSystem, typeRes, tool, quality ) + { + } + } + + [CraftItemID( 0x113E )] + public class PoisonTrapCraft : TrapCraft + { + public override TrapType TrapType{ get{ return TrapType.PoisonTrap; } } + + public PoisonTrapCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality ) : base( from, craftItem, craftSystem, typeRes, tool, quality ) + { + } + } + + [CraftItemID( 0x370C )] + public class ExplosionTrapCraft : TrapCraft + { + public override TrapType TrapType{ get{ return TrapType.ExplosionTrap; } } + + public ExplosionTrapCraft( Mobile from, CraftItem craftItem, CraftSystem craftSystem, Type typeRes, BaseTool tool, int quality ) : base( from, craftItem, craftSystem, typeRes, tool, quality ) + { + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/DeclareFealtyGump.cs b/Scripts/Engines/Guilds/DeclareFealtyGump.cs new file mode 100644 index 0000000..33c3ab7 --- /dev/null +++ b/Scripts/Engines/Guilds/DeclareFealtyGump.cs @@ -0,0 +1,54 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class DeclareFealtyGump : GuildMobileListGump + { + public DeclareFealtyGump( Mobile from, Guild guild ) : base( from, guild, true, guild.Members ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1011097, false, false ); // Declare your fealty + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 250, 35, 1011098, false, false ); // I have selected my new lord. + + AddButton( 300, 400, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadMember( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Mobile m = (Mobile)m_List[index]; + + if ( m != null && !m.Deleted ) + { + state.Mobile.GuildFealty = m; + } + } + } + } + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildGump( m_Mobile, m_Guild ) ); + } + } +} diff --git a/Scripts/Engines/Guilds/GrantGuildTitleGump.cs b/Scripts/Engines/Guilds/GrantGuildTitleGump.cs new file mode 100644 index 0000000..3ae8f70 --- /dev/null +++ b/Scripts/Engines/Guilds/GrantGuildTitleGump.cs @@ -0,0 +1,57 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GrantGuildTitleGump : GuildMobileListGump + { + public GrantGuildTitleGump( Mobile from, Guild guild ) : base( from, guild, true, guild.Members ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1011118, false, false ); // Grant a title to another member. + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 245, 30, 1011127, false, false ); // I dub thee... + + AddButton( 300, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Mobile m = (Mobile)m_List[index]; + + if ( m != null && !m.Deleted ) + { + m_Mobile.SendLocalizedMessage( 1013074 ); // New title (20 characters max): + m_Mobile.Prompt = new GuildTitlePrompt( m_Mobile, m, m_Guild ); + } + } + } + } + else if ( info.ButtonID == 2 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/Guild.cs b/Scripts/Engines/Guilds/Guild.cs new file mode 100644 index 0000000..84cf4e4 --- /dev/null +++ b/Scripts/Engines/Guilds/Guild.cs @@ -0,0 +1,1880 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Items; +using Server.Mobiles; +using Server.Gumps; +using Server.Network; +using Server.Targeting; +using Server.Commands; +using Server.Commands.Generic; + +namespace Server.Guilds +{ + #region Ranks + [Flags] + public enum RankFlags + { + None = 0x00000000, + CanInvitePlayer = 0x00000001, + AccessGuildItems = 0x00000002, + RemoveLowestRank = 0x00000004, + RemovePlayers = 0x00000008, + CanPromoteDemote = 0x00000010, + ControlWarStatus = 0x00000020, + AllianceControl = 0x00000040, + CanSetGuildTitle = 0x00000080, + CanVote = 0x00000100, + + All = Member | CanInvitePlayer | RemovePlayers | CanPromoteDemote | ControlWarStatus | AllianceControl | CanSetGuildTitle, + Member = RemoveLowestRank | AccessGuildItems | CanVote + } + + public class RankDefinition + { + public static RankDefinition[] Ranks = new RankDefinition[] + { + new RankDefinition( 1062963, 0, RankFlags.None ), //Ronin + new RankDefinition( 1062962, 1, RankFlags.Member ), //Member + new RankDefinition( 1062961, 2, RankFlags.Member | RankFlags.RemovePlayers | RankFlags.CanInvitePlayer | RankFlags.CanSetGuildTitle | RankFlags.CanPromoteDemote ), //Emmissary + new RankDefinition( 1062960, 3, RankFlags.Member | RankFlags.ControlWarStatus ), //Warlord + new RankDefinition( 1062959, 4, RankFlags.All ) //Leader + }; + public static RankDefinition Leader{ get{ return Ranks[4]; } } + public static RankDefinition Member{ get{ return Ranks[1]; } } + public static RankDefinition Lowest{ get{ return Ranks[0]; } } + + private TextDefinition m_Name; + private int m_Rank; + private RankFlags m_Flags; + + public TextDefinition Name{ get{ return m_Name; } } + public int Rank{ get{ return m_Rank; } } + public RankFlags Flags{ get{ return m_Flags; } } + + public RankDefinition( TextDefinition name, int rank, RankFlags flags ) + { + m_Name = name; + m_Rank = rank; + m_Flags = flags; + } + + public bool GetFlag( RankFlags flag ) + { + return ( (m_Flags & flag) != 0 ); + } + + public void SetFlag( RankFlags flag, bool value ) + { + if ( value ) + m_Flags |= flag; + else + m_Flags &= ~flag; + } + } + + #endregion + + #region Alliances + public class AllianceInfo + { + private static Dictionary m_Alliances = new Dictionary(); + + public static Dictionary Alliances + { + get{ return m_Alliances; } + } + + private string m_Name; + private Guild m_Leader; + private List m_Members; + private List m_PendingMembers; + + public string Name + { + get{ return m_Name; } + } + + public void CalculateAllianceLeader() + { + m_Leader = ((m_Members.Count >= 2) ? m_Members[Utility.Random( m_Members.Count )] : null); + } + + public void CheckLeader() + { + if( m_Leader == null || m_Leader.Disbanded ) + { + CalculateAllianceLeader(); + + if( m_Leader == null ) + Disband(); + } + } + + public Guild Leader + { + get + { + CheckLeader(); + return m_Leader; + } + set + { + if( m_Leader != value && value != null ) + AllianceMessage( 1070765, value.Name ); // Your Alliance is now led by ~1_GUILDNAME~ + + m_Leader = value; + + if( m_Leader == null ) + CalculateAllianceLeader(); + } + } + + public bool IsPendingMember( Guild g ) + { + if( g.Alliance != this ) + return false; + + return m_PendingMembers.Contains( g ); + } + + public bool IsMember( Guild g ) + { + if( g.Alliance != this ) + return false; + + return m_Members.Contains( g ); + } + + public AllianceInfo( Guild leader, string name, Guild partner ) + { + m_Leader = leader; + m_Name = name; + + m_Members = new List(); + m_PendingMembers = new List(); + + leader.Alliance = this; + partner.Alliance = this; + + if( !m_Alliances.ContainsKey( m_Name.ToLower() ) ) + m_Alliances.Add( m_Name.ToLower(), this ); + } + + public void Serialize( GenericWriter writer ) + { + writer.Write( (int)0 ); //Version + + writer.Write( m_Name ); + writer.Write( m_Leader ); + + writer.WriteGuildList( m_Members, true ); + writer.WriteGuildList( m_PendingMembers, true ); + + if( !m_Alliances.ContainsKey( m_Name.ToLower() ) ) + m_Alliances.Add( m_Name.ToLower(), this ); + } + + public AllianceInfo( GenericReader reader ) + { + int version = reader.ReadInt(); + + switch( version ) + { + case 0: + { + m_Name = reader.ReadString(); + m_Leader = reader.ReadGuild() as Guild; + + m_Members = reader.ReadStrongGuildList(); + m_PendingMembers = reader.ReadStrongGuildList(); + + break; + } + } + } + + public void AddPendingGuild( Guild g ) + { + if( g.Alliance != this || m_PendingMembers.Contains( g ) || m_Members.Contains( g ) ) + return; + + m_PendingMembers.Add( g ); + } + + public void TurnToMember( Guild g ) + { + if( g.Alliance != this || !m_PendingMembers.Contains( g ) || m_Members.Contains( g ) ) + return; + + g.GuildMessage( 1070760, this.Name ); // Your Guild has joined the ~1_ALLIANCENAME~ Alliance. + AllianceMessage( 1070761, g.Name ); // A new Guild has joined your Alliance: ~1_GUILDNAME~ + + m_PendingMembers.Remove( g ); + m_Members.Add( g ); + g.Alliance.InvalidateMemberProperties(); + } + + public void RemoveGuild( Guild g ) + { + if( m_PendingMembers.Contains( g ) ) + { + m_PendingMembers.Remove( g ); + } + + if( m_Members.Contains( g ) ) //Sanity, just incase someone with a custom script adds a character to BOTH arrays + { + m_Members.Remove( g ); + g.InvalidateMemberProperties(); + + g.GuildMessage( 1070763, this.Name ); // Your Guild has been removed from the ~1_ALLIANCENAME~ Alliance. + AllianceMessage( 1070764, g.Name ); // A Guild has left your Alliance: ~1_GUILDNAME~ + } + + //g.Alliance = null; //NO G.Alliance call here. Set the Guild's Alliance to null, if you JUST use RemoveGuild, it removes it from the alliance, but doesn't remove the link from the guild to the alliance. setting g.Alliance will call this method. + //to check on OSI: have 3 guilds, make 2 of them a member, one pending. remove one of the memebers. alliance still exist? + //ANSWER: NO + + if( g == m_Leader ) + { + CalculateAllianceLeader(); + + /* + if( m_Leader == null ) //only when m_members.count < 2 + Disband(); + else + AllianceMessage( 1070765, m_Leader.Name ); // Your Alliance is now led by ~1_GUILDNAME~ + */ + } + + if( m_Members.Count < 2 ) + Disband(); + } + + public void Disband() + { + AllianceMessage( 1070762 ); // Your Alliance has dissolved. + + for( int i = 0; i < m_PendingMembers.Count; i++ ) + m_PendingMembers[i].Alliance = null; + + for( int i = 0; i < m_Members.Count; i++ ) + m_Members[i].Alliance = null; + + + AllianceInfo aInfo = null; + + m_Alliances.TryGetValue( m_Name.ToLower(), out aInfo ); + + if( aInfo == this ) + m_Alliances.Remove( m_Name.ToLower() ); + } + + public void InvalidateMemberProperties() + { + InvalidateMemberProperties( false ); + } + + public void InvalidateMemberProperties( bool onlyOPL ) + { + for ( int i = 0; i < m_Members.Count; i++ ) + { + Guild g = m_Members[i]; + + g.InvalidateMemberProperties( onlyOPL ); + } + } + + public void InvalidateMemberNotoriety() + { + for ( int i = 0; i < m_Members.Count; i++ ) + m_Members[i].InvalidateMemberNotoriety(); + } + + #region Alliance[Text]Message(...) + public void AllianceMessage( int num, bool append, string format, params object[] args ) + { + AllianceMessage( num, append, String.Format( format, args) ); + } + public void AllianceMessage( int number ) + { + for ( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].GuildMessage( number ); + } + public void AllianceMessage( int number, string args ) + { + AllianceMessage( number, args, 0x3B2 ); + } + public void AllianceMessage( int number, string args, int hue ) + { + for ( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].GuildMessage( number, args, hue ); + } + public void AllianceMessage( int number, bool append, string affix ) + { + AllianceMessage( number, append, affix, "", 0x3B2 ); + } + public void AllianceMessage( int number, bool append, string affix, string args ) + { + AllianceMessage( number, append, affix, args, 0x3B2 ); + } + public void AllianceMessage( int number, bool append, string affix, string args, int hue ) + { + for ( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].GuildMessage( number, append, affix, args, hue ); + } + + public void AllianceTextMessage( string text ) + { + AllianceTextMessage( 0x3B2, text ); + } + public void AllianceTextMessage( string format, params object[] args ) + { + AllianceTextMessage( 0x3B2, String.Format( format, args ) ); + } + public void AllianceTextMessage( int hue, string text ) + { + for( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].GuildTextMessage( hue, text ); + } + public void AllianceTextMessage( int hue, string format, params object[] args ) + { + AllianceTextMessage( hue, String.Format( format, args ) ); + } + + public void AllianceChat( Mobile from, int hue, string text ) + { + Packet p = null; + for( int i = 0; i < m_Members.Count; i++ ) + { + Guild g = m_Members[i]; + + for( int j = 0; j < g.Members.Count; j++ ) + { + Mobile m = g.Members[j]; + + NetState state = m.NetState; + + if( state != null ) + { + if( p == null ) + p = Packet.Acquire( new UnicodeMessage( from.Serial, from.Body, MessageType.Alliance, hue, 3, from.Language, from.Name, text ) ); + + state.Send( p ); + } + } + } + + Packet.Release( p ); + } + + public void AllianceChat( Mobile from, string text ) + { + PlayerMobile pm = from as PlayerMobile; + + AllianceChat( from, (pm == null) ? 0x3B2 : pm.AllianceMessageHue, text ); + } + #endregion + + public class AllianceRosterGump : GuildDiplomacyGump + { + protected override bool AllowAdvancedSearch{ get{ return false; } } + + private AllianceInfo m_Alliance; + + public AllianceRosterGump( PlayerMobile pm, Guild g, AllianceInfo alliance ): base( pm, g, true, "", 0, alliance.m_Members, alliance.Name ) + { + m_Alliance = alliance; + } + + public AllianceRosterGump( PlayerMobile pm, Guild g, AllianceInfo alliance, IComparer currentComparer, bool ascending, string filter, int startNumber ) : base( pm, g, currentComparer, ascending, filter, startNumber, alliance.m_Members, alliance.Name ) + { + m_Alliance = alliance; + } + + public override Gump GetResentGump( PlayerMobile pm, Guild g, IComparer comparer, bool ascending, string filter, int startNumber ) + { + return new AllianceRosterGump( pm, g, m_Alliance, comparer, ascending, filter, startNumber ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if( info.ButtonID != 8 ) //So that they can't get to the AdvancedSearch button + base.OnResponse( sender, info ); + } + } + } + #endregion + + #region Wars + public enum WarStatus + { + InProgress = -1, + Win, + Lose, + Draw, + Pending + } + + public class WarDeclaration + { + private int m_Kills; + private int m_MaxKills; + + private TimeSpan m_WarLength; + private DateTime m_WarBeginning; + + private Guild m_Guild; + private Guild m_Opponent; + + private bool m_WarRequester; + + public int Kills + { + get{ return m_Kills; } + set{ m_Kills = value; } + } + public int MaxKills + { + get{ return m_MaxKills; } + set{ m_MaxKills = value; } + } + public TimeSpan WarLength + { + get{ return m_WarLength; } + set{ m_WarLength = value; } + } + public Guild Opponent + { + get{ return m_Opponent; } + } + public Guild Guild + { + get{ return m_Guild; } + } + public DateTime WarBeginning + { + get{ return m_WarBeginning; } + set{ m_WarBeginning = value; } + } + public bool WarRequester + { + get{ return m_WarRequester; } + set{ m_WarRequester = value; } + } + + public WarDeclaration( Guild g, Guild opponent, int maxKills, TimeSpan warLength, bool warRequester ) + { + m_Guild = g; + m_MaxKills = maxKills; + m_Opponent = opponent; + m_WarLength = warLength; + m_WarRequester = warRequester; + } + + public WarDeclaration( GenericReader reader ) + { + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Kills = reader.ReadInt(); + m_MaxKills = reader.ReadInt(); + + m_WarLength = reader.ReadTimeSpan(); + m_WarBeginning = reader.ReadDateTime(); + + m_Guild = reader.ReadGuild() as Guild; + m_Opponent = reader.ReadGuild() as Guild; + + m_WarRequester = reader.ReadBool(); + + break; + } + } + } + + public void Serialize( GenericWriter writer ) + { + writer.Write( (int)0 ); //version + + writer.Write( m_Kills ); + writer.Write( m_MaxKills ); + + writer.Write( m_WarLength ); + writer.Write( m_WarBeginning ); + + writer.Write( m_Guild ); + writer.Write( m_Opponent ); + + writer.Write( m_WarRequester ); + } + + public WarStatus Status + { + get + { + if( m_Opponent == null || m_Opponent.Disbanded ) + return WarStatus.Win; + + if( m_Guild == null || m_Guild.Disbanded ) + return WarStatus.Lose; + + WarDeclaration w = m_Opponent.FindActiveWar( m_Guild ); + + if( m_Opponent.FindPendingWar( m_Guild ) != null && m_Guild.FindPendingWar( m_Opponent ) != null ) + return WarStatus.Pending; + + if( w == null ) + return WarStatus.Win; + + if( m_WarLength != TimeSpan.Zero && (m_WarBeginning + m_WarLength) < DateTime.Now ) + { + if( m_Kills > w.m_Kills ) + return WarStatus.Win; + else if( m_Kills < w.m_Kills ) + return WarStatus.Lose; + else + return WarStatus.Draw; + } + else if( m_MaxKills > 0 ) + { + if( m_Kills >= m_MaxKills ) + return WarStatus.Win; + else if( w.m_Kills >= w.MaxKills ) + return WarStatus.Lose; + } + + return WarStatus.InProgress; + } + } + } + + public class WarTimer : Timer + { + private static TimeSpan InternalDelay = TimeSpan.FromMinutes( 1.0 ); + + public static void Initialize() + { + if( Guild.NewGuildSystem ) + new WarTimer().Start(); + } + + public WarTimer() : base( InternalDelay, InternalDelay ) + { + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + foreach( Guild g in Guild.List.Values ) + g.CheckExpiredWars(); + } + } + + #endregion + + public class Guild : BaseGuild + { + public static void Configure() + { + EventSink.CreateGuild += new CreateGuildHandler( EventSink_CreateGuild ); + EventSink.GuildGumpRequest += new GuildGumpRequestHandler( EventSink_GuildGumpRequest ); + + CommandSystem.Register( "GuildProps", AccessLevel.Counselor, new CommandEventHandler( GuildProps_OnCommand ) ); + } + + #region GuildProps + [Usage( "GuildProps" )] + [Description( "Opens a menu where you can view and edit guild properties of a targeted player or guild stone. If the new Guild system is active, also brings up the guild gump." )] + private static void GuildProps_OnCommand( CommandEventArgs e ) + { + string arg = e.ArgString.Trim(); + Mobile from = e.Mobile; + + if( arg.Length == 0 ) + { + e.Mobile.Target = new GuildPropsTarget(); + } + else + { + Guild g = null; + + int id; + + if( int.TryParse( arg, out id ) ) + g = Guild.Find( id ) as Guild; + + if( g == null ) + { + g = Guild.FindByAbbrev( arg ) as Guild; + + if( g == null ) + g = Guild.FindByName( arg ) as Guild; + } + + if ( g != null ) + { + from.SendGump( new PropertiesGump( from, g ) ); + + if ( NewGuildSystem && from.AccessLevel >= AccessLevel.GameMaster && from is PlayerMobile ) + from.SendGump( new GuildInfoGump( (PlayerMobile)from, g ) ); + } + } + + } + + private class GuildPropsTarget : Target + { + public GuildPropsTarget() : base( -1, true, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object o ) + { + if( !BaseCommand.IsAccessible( from, o ) ) + { + from.SendMessage( "That is not accessible." ); + return; + } + + Guild g = null; + + if( o is Guildstone ) + { + Guildstone stone = o as Guildstone; + if( stone.Guild == null || stone.Guild.Disbanded ) + { + from.SendMessage( "The guild associated with that Guildstone no longer exists" ); + return; + } + else + g = stone.Guild; + } + else if( o is Mobile ) + { + g = ((Mobile)o).Guild as Guild; + } + + if( g != null ) + { + from.SendGump( new PropertiesGump( from, g ) ); + + if( NewGuildSystem && from.AccessLevel >= AccessLevel.GameMaster && from is PlayerMobile ) + from.SendGump( new GuildInfoGump( (PlayerMobile)from, g ) ); + } + else + { + from.SendMessage( "That is not in a guild!" ); + } + } + } + #endregion + + #region EventSinks + public static void EventSink_GuildGumpRequest( GuildGumpRequestArgs args ) + { + Mobile m = args.Mobile; + if( m == null ) + return; + + m.CloseGump( typeof( TradesGump ) ); + m.SendGump( new TradesGump( m ) ); + } + + public static BaseGuild EventSink_CreateGuild( CreateGuildEventArgs args ) + { + return (BaseGuild)(new Guild( args.Id )); + } + #endregion + + public static bool NewGuildSystem{ get{ return false; } } + + public static readonly int RegistrationFee = 25000; + public static readonly int AbbrevLimit = 4; + public static readonly int NameLimit = 40; + public static readonly int MajorityPercentage = 66; + public static readonly TimeSpan InactiveTime = TimeSpan.FromDays( 30 ); + + + #region New Alliances + + public AllianceInfo Alliance + { + get{ + if( m_AllianceInfo != null ) + return m_AllianceInfo; + else if ( m_AllianceLeader != null ) + return m_AllianceLeader.m_AllianceInfo; + else + return null; + } + set + { + AllianceInfo current = this.Alliance; + + if( value == current ) + return; + + if( current != null ) + { + current.RemoveGuild( this ); + } + + if( value != null ) + { + + if( value.Leader == this ) + m_AllianceInfo = value; + else + m_AllianceLeader = value.Leader; + + value.AddPendingGuild( this ); + } + else + { + m_AllianceInfo = null; + m_AllianceLeader = null; + } + } + } + + [CommandProperty( AccessLevel.Counselor )] + public string AllianceName + { + get + { + AllianceInfo al = this.Alliance; + if( al != null ) + return al.Name; + + return null; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public Guild AllianceLeader + { + get + { + AllianceInfo al = this.Alliance; + + if( al != null ) + return al.Leader; + + return null; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public bool IsAllianceMember + { + get + { + AllianceInfo al = this.Alliance; + + if( al != null ) + return al.IsMember( this ); + + return false; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public bool IsAlliancePendingMember + { + get + { + AllianceInfo al = this.Alliance; + + if( al != null ) + return al.IsPendingMember( this ); + + return false; + } + } + + public static Guild GetAllianceLeader( Guild g ) + { + AllianceInfo alliance = g.Alliance; + + if ( alliance != null && alliance.Leader != null && alliance.IsMember( g ) ) + return alliance.Leader; + + return g; + } + + #endregion + + #region New Wars + + public List PendingWars + { + get{ return m_PendingWars; } + } + public List AcceptedWars + { + get{ return m_AcceptedWars; } + } + + + public WarDeclaration FindPendingWar( Guild g ) + { + for( int i = 0; i < PendingWars.Count; i++ ) + { + WarDeclaration w = PendingWars[i]; + + if( w.Opponent == g ) + return w; + } + + return null; + } + + public WarDeclaration FindActiveWar( Guild g ) + { + for( int i = 0; i < AcceptedWars.Count; i++ ) + { + WarDeclaration w = AcceptedWars[i]; + + if( w.Opponent == g ) + return w; + } + + return null; + } + + public void CheckExpiredWars() + { + for( int i = 0; i < AcceptedWars.Count; i++ ) + { + WarDeclaration w = AcceptedWars[i]; + Guild g = w.Opponent; + + WarStatus status = w.Status; + + if( status != WarStatus.InProgress ) + { + AllianceInfo myAlliance = this.Alliance; + bool inAlliance = ( myAlliance != null && myAlliance.IsMember( this ) ); + + AllianceInfo otherAlliance = ((g != null) ? g.Alliance : null); + bool otherInAlliance = ( otherAlliance != null && otherAlliance.IsMember( this ) ); + + if( inAlliance ) + { + myAlliance.AllianceMessage( 1070739 + (int)status, (g == null) ? "a deleted opponent" : (otherInAlliance ? otherAlliance.Name : g.Name) ); + myAlliance.InvalidateMemberProperties(); + } + else + { + GuildMessage( 1070739 + (int)status, (g == null) ? "a deleted opponent" : (otherInAlliance ? otherAlliance.Name : g.Name) ); + InvalidateMemberProperties(); + } + + this.AcceptedWars.Remove( w ); + + if( g != null ) + { + if( status != WarStatus.Draw ) + status = (WarStatus)((int)status + 1 % 2); + + if( otherInAlliance ) + { + otherAlliance.AllianceMessage( 1070739 + (int)status, ( inAlliance ? this.Alliance.Name : this.Name ) ); + otherAlliance.InvalidateMemberProperties(); + } + else + { + g.GuildMessage( 1070739 + (int)status, (inAlliance ? this.Alliance.Name : this.Name) ); + g.InvalidateMemberProperties(); + } + + g.AcceptedWars.Remove( g.FindActiveWar( this ) ); + } + } + } + + for( int i = 0; i < PendingWars.Count; i++ ) + { + WarDeclaration w = PendingWars[i]; + Guild g = w.Opponent; + + if( w.Status != WarStatus.Pending ) + { + //All sanity in here + this.PendingWars.Remove( w ); + + if( g != null ) + { + g.PendingWars.Remove( g.FindPendingWar( this ) ); + } + } + } + } + + public static void HandleDeath( Mobile victim ) + { + HandleDeath( victim, null ); + } + + public static void HandleDeath( Mobile victim, Mobile killer ) + { + if( !NewGuildSystem ) + return; + + if ( killer == null ) + killer = victim.FindMostRecentDamager( false ); + + if( killer == null || victim.Guild == null || killer.Guild == null ) + return; + + Guild victimGuild = GetAllianceLeader( victim.Guild as Guild ); + Guild killerGuild = GetAllianceLeader( killer.Guild as Guild ); + + WarDeclaration war = killerGuild.FindActiveWar( victimGuild ); + + if( war == null ) + return; + + war.Kills++; + + if ( war.Opponent == victimGuild ) + killerGuild.CheckExpiredWars(); + else + victimGuild.CheckExpiredWars(); + } + #endregion + + #region Var declarations + private Mobile m_Leader; + + private string m_Name; + private string m_Abbreviation; + + private List m_Allies; + private List m_Enemies; + + private List m_Members; + + private Item m_Guildstone; + private Item m_Teleporter; + + private string m_Charter; + private string m_Website; + + private DateTime m_LastFealty; + + private GuildType m_Type; + private DateTime m_TypeLastChange; + + private List m_AllyDeclarations, m_AllyInvitations; + + private List m_WarDeclarations, m_WarInvitations; + private List m_Candidates, m_Accepted; + + private List m_PendingWars, m_AcceptedWars; + + private AllianceInfo m_AllianceInfo; + private Guild m_AllianceLeader; + #endregion + + public Guild( Mobile leader, string name, string abbreviation ) + { + #region Ctor mumbo-jumbo + m_Leader = leader; + + m_Members = new List(); + m_Allies = new List(); + m_Enemies = new List(); + m_WarDeclarations = new List(); + m_WarInvitations = new List(); + m_AllyDeclarations = new List(); + m_AllyInvitations = new List(); + m_Candidates = new List(); + m_Accepted = new List(); + + m_LastFealty = DateTime.Now; + + m_Name = name; + m_Abbreviation = abbreviation; + + m_TypeLastChange = DateTime.MinValue; + + AddMember( m_Leader ); + + if( m_Leader is PlayerMobile ) + ((PlayerMobile)m_Leader).GuildRank = RankDefinition.Leader; + + m_AcceptedWars = new List(); + m_PendingWars = new List(); + #endregion + } + + public Guild( int id ) : base( id )//serialization ctor + { + } + + public void InvalidateMemberProperties() + { + InvalidateMemberProperties( false ); + } + + public void InvalidateMemberProperties( bool onlyOPL ) + { + if ( m_Members != null ) + { + for ( int i = 0; i < m_Members.Count; i++ ) + { + Mobile m = m_Members[i]; + m.InvalidateProperties(); + + if ( !onlyOPL ) + m.Delta( MobileDelta.Noto ); + } + } + } + + public void InvalidateMemberNotoriety() + { + if ( m_Members != null ) + { + for (int i=0;i= 0; --i ) + if ( i < m_Allies.Count ) + RemoveAlly( m_Allies[i] ); + + for ( int i = m_Enemies.Count - 1; i >= 0; --i ) + if ( i < m_Enemies.Count ) + RemoveEnemy( m_Enemies[i] ); + + if ( !NewGuildSystem && m_Guildstone != null ) + m_Guildstone.Delete(); + + m_Guildstone = null; + + CheckExpiredWars(); + + Alliance = null; + } + + #region Is(...) + public bool IsMember( Mobile m ) + { + return m_Members.Contains( m ); + } + + public bool IsAlly( Guild g ) + { + if( NewGuildSystem ) + { + return (Alliance != null && Alliance.IsMember( this ) && Alliance.IsMember( g )); + } + + return m_Allies.Contains( g ); + } + + public bool IsEnemy( Guild g ) + { + if( NewGuildSystem ) + return IsWar( g ); + + if( m_Type != GuildType.Regular && g.m_Type != GuildType.Regular && m_Type != g.m_Type ) + return true; + + return m_Enemies.Contains( g ); + } + + public bool IsWar( Guild g ) + { + if( g == null ) + return false; + + if( NewGuildSystem ) + { + Guild guild = GetAllianceLeader( this ); + Guild otherGuild = GetAllianceLeader( g ); + + if ( guild.FindActiveWar( otherGuild ) != null ) + return true; + + return false; + } + + + return m_Enemies.Contains( g ); + } + #endregion + + #region Serialization + public override void Serialize( GenericWriter writer ) + { + if ( this.LastFealty+TimeSpan.FromDays( 1.0 ) < DateTime.Now ) + this.CalculateGuildmaster(); + + CheckExpiredWars(); + + if( Alliance != null ) + Alliance.CheckLeader(); + + writer.Write( (int) 5 );//version + + #region War Serialization + writer.Write( m_PendingWars.Count ); + + for( int i = 0; i < m_PendingWars.Count; i++ ) + { + m_PendingWars[i].Serialize( writer ); + } + + writer.Write( m_AcceptedWars.Count ); + + for( int i = 0; i < m_AcceptedWars.Count; i++ ) + { + m_AcceptedWars[i].Serialize( writer ); + } + #endregion + + #region Alliances + + bool isAllianceLeader = (m_AllianceLeader == null && m_AllianceInfo != null ); + writer.Write( isAllianceLeader ); + + if( isAllianceLeader ) + m_AllianceInfo.Serialize( writer ); + else + writer.Write( m_AllianceLeader ); + + #endregion + + // + + writer.WriteGuildList( m_AllyDeclarations, true ); + writer.WriteGuildList( m_AllyInvitations, true ); + + writer.Write( m_TypeLastChange ); + + writer.Write( (int)m_Type ); + + writer.Write( m_LastFealty ); + + writer.Write( m_Leader ); + writer.Write( m_Name ); + writer.Write( m_Abbreviation ); + + writer.WriteGuildList( m_Allies, true ); + writer.WriteGuildList( m_Enemies, true ); + writer.WriteGuildList( m_WarDeclarations, true ); + writer.WriteGuildList( m_WarInvitations, true ); + + writer.Write( m_Members, true ); + writer.Write( m_Candidates, true ); + writer.Write( m_Accepted, true ); + + writer.Write( m_Guildstone ); + writer.Write( m_Teleporter ); + + writer.Write( m_Charter ); + writer.Write( m_Website ); + } + + public override void Deserialize( GenericReader reader ) + { + int version = reader.ReadInt(); + + switch ( version ) + { + case 5: + { + int count = reader.ReadInt(); + + m_PendingWars = new List(); + for( int i = 0; i < count; i++ ) + { + m_PendingWars.Add( new WarDeclaration( reader ) ); + } + + count = reader.ReadInt(); + m_AcceptedWars = new List(); + for( int i = 0; i < count; i++ ) + { + m_AcceptedWars.Add( new WarDeclaration( reader ) ); + } + + bool isAllianceLeader = reader.ReadBool(); + + if( isAllianceLeader ) + m_AllianceInfo = new AllianceInfo( reader ); + else + m_AllianceLeader = reader.ReadGuild() as Guild; + + + goto case 4; + } + case 4: + { + m_AllyDeclarations = reader.ReadStrongGuildList(); + m_AllyInvitations = reader.ReadStrongGuildList(); + + goto case 3; + } + case 3: + { + m_TypeLastChange = reader.ReadDateTime(); + + goto case 2; + } + case 2: + { + m_Type = (GuildType)reader.ReadInt(); + + goto case 1; + } + case 1: + { + m_LastFealty = reader.ReadDateTime(); + + goto case 0; + } + case 0: + { + m_Leader = reader.ReadMobile(); + + if( m_Leader is PlayerMobile ) + ((PlayerMobile)m_Leader).GuildRank = RankDefinition.Leader; + + m_Name = reader.ReadString(); + m_Abbreviation = reader.ReadString(); + + m_Allies = reader.ReadStrongGuildList(); + m_Enemies = reader.ReadStrongGuildList(); + m_WarDeclarations = reader.ReadStrongGuildList(); + m_WarInvitations = reader.ReadStrongGuildList(); + + m_Members = reader.ReadStrongMobileList(); + m_Candidates = reader.ReadStrongMobileList(); + m_Accepted = reader.ReadStrongMobileList(); + + m_Guildstone = reader.ReadItem(); + m_Teleporter = reader.ReadItem(); + + m_Charter = reader.ReadString(); + m_Website = reader.ReadString(); + + break; + } + } + + if ( m_AllyDeclarations == null ) + m_AllyDeclarations = new List(); + + if ( m_AllyInvitations == null ) + m_AllyInvitations = new List(); + + + if ( m_AcceptedWars == null ) + m_AcceptedWars = new List(); + + if ( m_PendingWars == null ) + m_PendingWars = new List(); + + + /* + if ( ( !NewGuildSystem && m_Guildstone == null )|| m_Members.Count == 0 ) + Disband(); + */ + + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( VerifyGuild_Callback ) ); + } + + private void VerifyGuild_Callback() + { + if( (!NewGuildSystem && m_Guildstone == null) || m_Members.Count == 0 ) + Disband(); + + CheckExpiredWars(); + + AllianceInfo alliance = this.Alliance; + + if( alliance != null ) + alliance.CheckLeader(); + + alliance = this.Alliance; //CheckLeader could possibly change the value of this.Alliance + + if( alliance != null && !alliance.IsMember( this ) && !alliance.IsPendingMember( this ) ) //This block is there to fix a bug in the code in an older version. + this.Alliance = null; //Will call Alliance.RemoveGuild which will set it null & perform all the pertient checks as far as alliacne disbanding + + } + + #endregion + + #region Add/Remove Member/Old Ally/Old Enemy + public void AddMember( Mobile m ) + { + if ( !m_Members.Contains( m ) ) + { + if ( m.Guild != null && m.Guild != this ) + ((Guild)m.Guild).RemoveMember( m ); + + m_Members.Add( m ); + m.Guild = this; + + if( !NewGuildSystem ) + m.GuildFealty = m_Leader; + else + m.GuildFealty = null; + + if( m is PlayerMobile ) + ((PlayerMobile)m).GuildRank = RankDefinition.Lowest; + + Guild guild = m.Guild as Guild; + + if ( guild != null ) + guild.InvalidateWarNotoriety(); + } + } + + public void RemoveMember( Mobile m ) + { + RemoveMember( m, 1018028 ); // You have been dismissed from your guild. + } + public void RemoveMember( Mobile m, int message ) + { + if ( m_Members.Contains( m ) ) + { + m_Members.Remove( m ); + + Guild guild = m.Guild as Guild; + + m.Guild = null; + + if( m is PlayerMobile ) + ((PlayerMobile)m).GuildRank = RankDefinition.Lowest; + + if( message > 0 ) + m.SendLocalizedMessage( message ); + + if ( m == m_Leader ) + { + CalculateGuildmaster(); + + if ( m_Leader == null ) + Disband(); + } + + if ( m_Members.Count == 0 ) + Disband(); + + if ( guild != null ) + guild.InvalidateWarNotoriety(); + + m.Delta( MobileDelta.Noto ); + } + } + + public void AddAlly( Guild g ) + { + if ( !m_Allies.Contains( g ) ) + { + m_Allies.Add( g ); + + g.AddAlly( this ); + } + } + + public void RemoveAlly( Guild g ) + { + if ( m_Allies.Contains( g ) ) + { + m_Allies.Remove( g ); + + g.RemoveAlly( this ); + } + } + + public void AddEnemy( Guild g ) + { + if ( !m_Enemies.Contains( g ) ) + { + m_Enemies.Add( g ); + + g.AddEnemy( this ); + } + } + + public void RemoveEnemy( Guild g ) + { + if ( m_Enemies != null && m_Enemies.Contains( g ) ) + { + m_Enemies.Remove( g ); + + g.RemoveEnemy( this ); + } + } + + #endregion + + #region Guild[Text]Message(...) + public void GuildMessage( int num, bool append, string format, params object[] args ) + { + GuildMessage( num, append, String.Format( format, args) ); + } + public void GuildMessage( int number ) + { + for ( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].SendLocalizedMessage( number ); + } + public void GuildMessage( int number, string args ) + { + GuildMessage( number, args, 0x3B2 ); + } + public void GuildMessage( int number, string args, int hue ) + { + for ( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].SendLocalizedMessage( number, args, hue ); + } + public void GuildMessage( int number, bool append, string affix ) + { + GuildMessage( number, append, affix, "", 0x3B2 ); + } + public void GuildMessage( int number, bool append, string affix, string args ) + { + GuildMessage( number, append, affix, args, 0x3B2 ); + } + public void GuildMessage( int number, bool append, string affix, string args, int hue ) + { + for ( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].SendLocalizedMessage( number, append, affix, args, hue ); + } + + public void GuildTextMessage( string text ) + { + GuildTextMessage( 0x3B2, text ); + } + public void GuildTextMessage( string format, params object[] args ) + { + GuildTextMessage( 0x3B2, String.Format( format, args ) ); + } + public void GuildTextMessage( int hue, string text ) + { + for( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].SendMessage( hue, text ); + } + public void GuildTextMessage( int hue, string format, params object[] args ) + { + GuildTextMessage( hue, String.Format( format, args ) ); + } + + public void GuildChat( Mobile from, int hue, string text ) + { + Packet p = null; + for( int i = 0; i < m_Members.Count; i++ ) + { + Mobile m = m_Members[i]; + + NetState state = m.NetState; + + if( state != null ) + { + if( p == null ) + p = Packet.Acquire( new UnicodeMessage( from.Serial, from.Body, MessageType.Guild, hue, 3, from.Language, from.Name, text ) ); + + state.Send( p ); + } + } + + Packet.Release( p ); + } + + public void GuildChat( Mobile from, string text ) + { + PlayerMobile pm = from as PlayerMobile; + + GuildChat( from, (pm == null) ? 0x3B2 : pm.GuildMessageHue, text ); + } + #endregion + + #region Voting + public bool CanVote( Mobile m ) + { + if( NewGuildSystem ) + { + PlayerMobile pm = m as PlayerMobile; + if( pm == null || !pm.GuildRank.GetFlag( RankFlags.CanVote ) ) + return false; + } + + return ( m != null && !m.Deleted && m.Guild == this ); + } + public bool CanBeVotedFor( Mobile m ) + { + if( NewGuildSystem ) + { + PlayerMobile pm = m as PlayerMobile; + if( pm == null || pm.LastOnline + InactiveTime < DateTime.Now ) + return false; + } + + return ( m != null && !m.Deleted && m.Guild == this ); + } + + public void CalculateGuildmaster() + { + Dictionary votes = new Dictionary(); + + int votingMembers = 0; + + for ( int i = 0; m_Members != null && i < m_Members.Count; ++i ) + { + Mobile memb = m_Members[i]; + + if ( !CanVote( memb ) ) + continue; + + Mobile m = memb.GuildFealty; + + if( !CanBeVotedFor( m ) ) + { + if ( m_Leader != null && !m_Leader.Deleted && m_Leader.Guild == this ) + m = m_Leader; + else + m = memb; + } + + if ( m == null ) + continue; + + int v; + + if( !votes.TryGetValue( m, out v ) ) + votes[m] = 1; + else + votes[m] = v + 1; + + votingMembers++; + } + + Mobile winner = null; + int highVotes = 0; + + foreach ( KeyValuePair kvp in votes ) + { + Mobile m = (Mobile)kvp.Key; + int val = (int)kvp.Value; + + if ( winner == null || val > highVotes ) + { + winner = m; + highVotes = val; + } + } + + if( NewGuildSystem && (highVotes * 100) / Math.Max( votingMembers, 1 ) < MajorityPercentage && m_Leader != null && winner != m_Leader && !m_Leader.Deleted && m_Leader.Guild == this ) + winner = m_Leader; + + if ( m_Leader != winner && winner != null ) + GuildMessage( 1018015, true, winner.Name ); // Guild Message: Guildmaster changed to: + + Leader = winner; + m_LastFealty = DateTime.Now; + } + + #endregion + + #region Getters & Setters + [CommandProperty( AccessLevel.GameMaster )] + public Item Guildstone + { + get + { + return m_Guildstone; + } + set + { + m_Guildstone = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Item Teleporter + { + get + { + return m_Teleporter; + } + set + { + m_Teleporter = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override string Name + { + get + { + return m_Name; + } + set + { + m_Name = value; + + InvalidateMemberProperties( true ); + + if ( m_Guildstone != null ) + m_Guildstone.InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Website + { + get + { + return m_Website; + } + set + { + m_Website = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override string Abbreviation + { + get + { + return m_Abbreviation; + } + set + { + m_Abbreviation = value; + + InvalidateMemberProperties( true ); + + if( m_Guildstone != null ) + m_Guildstone.InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Charter + { + get + { + return m_Charter; + } + set + { + m_Charter = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override GuildType Type + { + get + { + return m_Type; + } + set + { + if ( m_Type != value ) + { + m_Type = value; + m_TypeLastChange = DateTime.Now; + + InvalidateMemberProperties(); + } + } + } + + + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime LastFealty + { + get + { + return m_LastFealty; + } + set + { + m_LastFealty = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime TypeLastChange + { + get + { + return m_TypeLastChange; + } + } + + + public List Allies + { + get + { + return m_Allies; + } + } + + public List Enemies + { + get + { + return m_Enemies; + } + } + + public List AllyDeclarations + { + get + { + return m_AllyDeclarations; + } + } + + public List AllyInvitations + { + get + { + return m_AllyInvitations; + } + } + + public List WarDeclarations + { + get + { + return m_WarDeclarations; + } + } + + public List WarInvitations + { + get + { + return m_WarInvitations; + } + } + + public List Candidates + { + get + { + return m_Candidates; + } + } + + public List Accepted + { + get + { + return m_Accepted; + } + } + + public List Members + { + get + { + return m_Members; + } + } + + #endregion + + } +} diff --git a/Scripts/Engines/Guilds/GuildAbbrvPrompt.cs b/Scripts/Engines/Guilds/GuildAbbrvPrompt.cs new file mode 100644 index 0000000..5703597 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildAbbrvPrompt.cs @@ -0,0 +1,55 @@ +using System; +using Server; +using Server.Guilds; +using Server.Prompts; + +namespace Server.Gumps +{ + public class GuildAbbrvPrompt : Prompt + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildAbbrvPrompt( Mobile m, Guild g ) + { + m_Mobile = m; + m_Guild = g; + } + + public override void OnCancel( Mobile from ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + text = text.Trim(); + + if ( text.Length > 3 ) + text = text.Substring( 0, 3 ); + + if ( text.Length > 0 ) + { + if ( Guild.FindByAbbrev( text ) != null ) + { + m_Mobile.SendMessage( "{0} conflicts with the abbreviation of an existing guild.", text ); + } + else + { + m_Guild.Abbreviation = text; + m_Guild.GuildMessage( 1018025, true, text ); // Your guild abbreviation has changed: + } + } + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildAcceptWarGump.cs b/Scripts/Engines/Guilds/GuildAcceptWarGump.cs new file mode 100644 index 0000000..132f78a --- /dev/null +++ b/Scripts/Engines/Guilds/GuildAcceptWarGump.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildAcceptWarGump : GuildListGump + { + public GuildAcceptWarGump( Mobile from, Guild guild ) : base( from, guild, true, guild.WarInvitations ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1011147, false, false ); // Select the guild to accept the invitations: + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 245, 30, 1011100, false, false ); // Accept war invitations. + + AddButton( 300, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Guild g = (Guild)m_List[index]; + + if ( g != null ) + { + m_Guild.WarInvitations.Remove( g ); + g.WarDeclarations.Remove( m_Guild ); + + m_Guild.AddEnemy( g ); + m_Guild.GuildMessage( 1018020, true, "{0} ({1})", g.Name, g.Abbreviation ); + + GuildGump.EnsureClosed( m_Mobile ); + + if ( m_Guild.WarInvitations.Count > 0 ) + m_Mobile.SendGump( new GuildAcceptWarGump( m_Mobile, m_Guild ) ); + else + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } + } + else if ( info.ButtonID == 2 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildAdminCandidatesGump.cs b/Scripts/Engines/Guilds/GuildAdminCandidatesGump.cs new file mode 100644 index 0000000..1d30541 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildAdminCandidatesGump.cs @@ -0,0 +1,99 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildAdminCandidatesGump : GuildMobileListGump + { + public GuildAdminCandidatesGump( Mobile from, Guild guild ) : base( from, guild, true, guild.Candidates ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1013075, false, false ); // Accept or Refuse candidates for membership + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 245, 30, 1013076, false, false ); // Accept + + AddButton( 300, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1013077, false, false ); // Refuse + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + switch ( info.ButtonID ) + { + case 0: + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + + break; + } + case 1: // Accept + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Mobile m = (Mobile)m_List[index]; + + if ( m != null && !m.Deleted ) + { + m_Guild.Candidates.Remove( m ); + m_Guild.Accepted.Add( m ); + + GuildGump.EnsureClosed( m_Mobile ); + + if ( m_Guild.Candidates.Count > 0 ) + m_Mobile.SendGump( new GuildAdminCandidatesGump( m_Mobile, m_Guild ) ); + else + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } + + break; + } + case 2: // Refuse + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Mobile m = (Mobile)m_List[index]; + + if ( m != null && !m.Deleted ) + { + m_Guild.Candidates.Remove( m ); + + GuildGump.EnsureClosed( m_Mobile ); + + if ( m_Guild.Candidates.Count > 0 ) + m_Mobile.SendGump( new GuildAdminCandidatesGump( m_Mobile, m_Guild ) ); + else + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildCandidatesGump.cs b/Scripts/Engines/Guilds/GuildCandidatesGump.cs new file mode 100644 index 0000000..a441ff7 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildCandidatesGump.cs @@ -0,0 +1,34 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildCandidatesGump : GuildMobileListGump + { + public GuildCandidatesGump( Mobile from, Guild guild ) : base( from, guild, false, guild.Candidates ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 500, 35, 1013030, false, false ); //
Candidates
+ + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 300, 35, 1011120, false, false ); // Return to the main menu. + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadMember( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildChangeTypeGump.cs b/Scripts/Engines/Guilds/GuildChangeTypeGump.cs new file mode 100644 index 0000000..5ea3283 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildChangeTypeGump.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildChangeTypeGump : Gump + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildChangeTypeGump( Mobile from, Guild guild ) : base( 20, 30 ) + { + m_Mobile = from; + m_Guild = guild; + + Dragable = false; + + AddPage( 0 ); + AddBackground( 0, 0, 550, 400, 5054 ); + AddBackground( 10, 10, 530, 380, 3000 ); + + AddHtmlLocalized( 20, 15, 510, 30, 1013062, false, false ); //
Change Guild Type Menu
+ + AddHtmlLocalized( 50, 50, 450, 30, 1013066, false, false ); // Please select the type of guild you would like to change to + + AddButton( 20, 100, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 85, 100, 300, 30, 1013063, false, false ); // Standard guild + + AddButton( 20, 150, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddItem( 50, 143, 7109 ); + AddHtmlLocalized( 85, 150, 300, 300, 1013064, false, false ); // Order guild + + AddButton( 20, 200, 4005, 4007, 3, GumpButtonType.Reply, 0 ); + AddItem( 45, 200, 7107 ); + AddHtmlLocalized( 85, 200, 300, 300, 1013065, false, false ); // Chaos guild + + AddButton( 300, 360, 4005, 4007, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 360, 150, 30, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + if ( m_Guild.TypeLastChange.AddDays( 7 ) > DateTime.Now ) + { + m_Mobile.SendLocalizedMessage( 1005292 ); // Your guild type will be changed in one week. + } + else + { + GuildType newType; + + switch ( info.ButtonID ) + { + default: return; // Close + case 1: newType = GuildType.Regular; break; + case 2: newType = GuildType.Order; break; + case 3: newType = GuildType.Chaos; break; + } + + if ( m_Guild.Type == newType ) + return; + + m_Guild.Type = newType; + m_Guild.GuildMessage( 1018022, true, newType.ToString() ); // Guild Message: Your guild type has changed: + } + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } +} diff --git a/Scripts/Engines/Guilds/GuildCharterGump.cs b/Scripts/Engines/Guilds/GuildCharterGump.cs new file mode 100644 index 0000000..4cee9af --- /dev/null +++ b/Scripts/Engines/Guilds/GuildCharterGump.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildCharterGump : Gump + { + private Mobile m_Mobile; + private Guild m_Guild; + + private const string DefaultWebsite = "http://www.runuo.com/"; + + public GuildCharterGump( Mobile from, Guild guild ) : base( 20, 30 ) + { + m_Mobile = from; + m_Guild = guild; + + Dragable = false; + + AddPage( 0 ); + AddBackground( 0, 0, 550, 400, 5054 ); + AddBackground( 10, 10, 530, 380, 3000 ); + + AddButton( 20, 360, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 360, 300, 35, 1011120, false, false ); // Return to the main menu. + + string charter; + + if ( (charter = guild.Charter) == null || (charter = charter.Trim()).Length <= 0 ) + AddHtmlLocalized( 20, 20, 400, 35, 1013032, false, false ); // No charter has been defined. + else + AddHtml( 20, 20, 510, 75, charter, true, true ); + + AddButton( 20, 200, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 200, 300, 20, 1011122, false, false ); // Visit the guild website : + + string website; + + if ( (website = guild.Website) == null || (website = website.Trim()).Length <= 0 ) + website = DefaultWebsite; + + AddHtml( 55, 220, 300, 20, website, false, false ); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadMember( m_Mobile, m_Guild ) ) + return; + + switch ( info.ButtonID ) + { + case 0: return; // Close + case 1: break; // Return to main menu + case 2: + { + string website; + + if ( (website = m_Guild.Website) == null || (website = website.Trim()).Length <= 0 ) + website = DefaultWebsite; + + m_Mobile.LaunchBrowser( website ); + break; + } + } + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildGump( m_Mobile, m_Guild ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildCharterPrompt.cs b/Scripts/Engines/Guilds/GuildCharterPrompt.cs new file mode 100644 index 0000000..e56661a --- /dev/null +++ b/Scripts/Engines/Guilds/GuildCharterPrompt.cs @@ -0,0 +1,48 @@ +using System; +using Server; +using Server.Guilds; +using Server.Prompts; + +namespace Server.Gumps +{ + public class GuildCharterPrompt : Prompt + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildCharterPrompt( Mobile m, Guild g ) + { + m_Mobile = m; + m_Guild = g; + } + + public override void OnCancel( Mobile from ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + text = text.Trim(); + + if ( text.Length > 50 ) + text = text.Substring( 0, 50 ); + + if ( text.Length > 0 ) + m_Guild.Charter = text; + + m_Mobile.SendLocalizedMessage( 1013072 ); // Enter the new website for the guild (50 characters max): + m_Mobile.Prompt = new GuildWebsitePrompt( m_Mobile, m_Guild ); + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildDeclarePeaceGump.cs b/Scripts/Engines/Guilds/GuildDeclarePeaceGump.cs new file mode 100644 index 0000000..0481268 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildDeclarePeaceGump.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildDeclarePeaceGump : GuildListGump + { + public GuildDeclarePeaceGump( Mobile from, Guild guild ) : base( from, guild, true, guild.Enemies ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1011137, false, false ); // Select the guild you wish to declare peace with. + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 245, 30, 1011138, false, false ); // Send the olive branch. + + AddButton( 300, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Guild g = (Guild)m_List[index]; + + if ( g != null ) + { + m_Guild.RemoveEnemy( g ); + m_Guild.GuildMessage( 1018018, true, "{0} ({1})", g.Name, g.Abbreviation ); // Guild Message: You are now at peace with this guild: + + GuildGump.EnsureClosed( m_Mobile ); + + if ( m_Guild.Enemies.Count > 0 ) + m_Mobile.SendGump( new GuildDeclarePeaceGump( m_Mobile, m_Guild ) ); + else + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } + } + else if ( info.ButtonID == 2 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildDeclareWarGump.cs b/Scripts/Engines/Guilds/GuildDeclareWarGump.cs new file mode 100644 index 0000000..b6d5e33 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildDeclareWarGump.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using Server.Network; +using System.Collections.Generic; + +namespace Server.Gumps +{ + public class GuildDeclareWarGump : GuildListGump + { + public GuildDeclareWarGump( Mobile from, Guild guild, List list ) + : base( from, guild, true, list ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1011065, false, false ); // Select the guild you wish to declare war on. + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 245, 30, 1011068, false, false ); // Send the challenge! + + AddButton( 300, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Guild g = m_List[index]; + + if ( g != null ) + { + if ( g == m_Guild ) + { + m_Mobile.SendLocalizedMessage( 501184 ); // You cannot declare war against yourself! + } + else if ( (g.WarInvitations.Contains( m_Guild ) && m_Guild.WarDeclarations.Contains( g )) || m_Guild.IsWar( g ) ) + { + m_Mobile.SendLocalizedMessage( 501183 ); // You are already at war with that guild. + } + else + { + if ( !m_Guild.WarDeclarations.Contains( g ) ) + { + m_Guild.WarDeclarations.Add( g ); + m_Guild.GuildMessage( 1018019, true, "{0} ({1})", g.Name, g.Abbreviation ); // Guild Message: Your guild has sent an invitation for war: + } + + if ( !g.WarInvitations.Contains( m_Guild ) ) + { + g.WarInvitations.Add( m_Guild ); + g.GuildMessage( 1018021, true, "{0} ({1})", m_Guild.Name, m_Guild.Abbreviation ); // Guild Message: Your guild has received an invitation to war: + } + } + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildWarAdminGump( m_Mobile, m_Guild ) ); + } + } + } + } + else if ( info.ButtonID == 2 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildDeclareWarPrompt.cs b/Scripts/Engines/Guilds/GuildDeclareWarPrompt.cs new file mode 100644 index 0000000..a472751 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildDeclareWarPrompt.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using Server.Prompts; +using System.Collections.Generic; + +namespace Server.Gumps +{ + public class GuildDeclareWarPrompt : Prompt + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildDeclareWarPrompt( Mobile m, Guild g ) + { + m_Mobile = m; + m_Guild = g; + } + + public override void OnCancel( Mobile from ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildWarAdminGump( m_Mobile, m_Guild ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + text = text.Trim(); + + if ( text.Length >= 3 ) + { + List guilds = Utility.CastConvertList( Guild.Search( text ) ); + + GuildGump.EnsureClosed( m_Mobile ); + + if ( guilds.Count > 0 ) + { + m_Mobile.SendGump( new GuildDeclareWarGump( m_Mobile, m_Guild, guilds ) ); + } + else + { + m_Mobile.SendGump( new GuildWarAdminGump( m_Mobile, m_Guild ) ); + m_Mobile.SendLocalizedMessage( 1018003 ); // No guilds found matching - try another name in the search + } + } + else + { + m_Mobile.SendMessage( "Search string must be at least three letters in length." ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildDeed.cs b/Scripts/Engines/Guilds/GuildDeed.cs new file mode 100644 index 0000000..4360ac7 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildDeed.cs @@ -0,0 +1,143 @@ +using System; +using Server.Network; +using Server.Prompts; +using Server.Guilds; +using Server.Multis; +using Server.Regions; + +namespace Server.Items +{ + public class GuildDeed : Item + { + public override int LabelNumber{ get{ return 1041055; } } // a guild deed + + [Constructable] + public GuildDeed() : base( 0x14F0 ) + { + Weight = 1.0; + } + + public GuildDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 0.0 ) + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if( Guild.NewGuildSystem ) + return; + + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( from.Guild != null ) + { + from.SendLocalizedMessage( 501137 ); // You must resign from your current guild before founding another! + } + else + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if ( house == null ) + { + from.SendLocalizedMessage( 501138 ); // You can only place a guildstone in a house. + } + else if ( house.FindGuildstone() != null ) + { + from.SendLocalizedMessage( 501142 );//Only one guildstone may reside in a given house. + } + else if ( !house.IsOwner( from ) ) + { + from.SendLocalizedMessage( 501141 ); // You can only place a guildstone in a house you own! + } + else + { + from.SendLocalizedMessage( 1013060 ); // Enter new guild name (40 characters max): + from.Prompt = new InternalPrompt( this ); + } + } + } + + private class InternalPrompt : Prompt + { + private GuildDeed m_Deed; + + public InternalPrompt( GuildDeed deed ) + { + m_Deed = deed; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( m_Deed.Deleted ) + return; + + if ( !m_Deed.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( from.Guild != null ) + { + from.SendLocalizedMessage( 501137 ); // You must resign from your current guild before founding another! + } + else + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if ( house == null ) + { + from.SendLocalizedMessage( 501138 ); // You can only place a guildstone in a house. + } + else if ( house.FindGuildstone() != null ) + { + from.SendLocalizedMessage( 501142 );//Only one guildstone may reside in a given house. + } + else if ( !house.IsOwner( from ) ) + { + from.SendLocalizedMessage( 501141 ); // You can only place a guildstone in a house you own! + } + else + { + m_Deed.Delete(); + + if ( text.Length > 40 ) + text = text.Substring( 0, 40 ); + + Guild guild = new Guild( from, text, "none" ); + + from.Guild = guild; + from.GuildTitle = "Guildmaster"; + + Guildstone stone = new Guildstone( guild ); + + stone.MoveToWorld( from.Location, from.Map ); + + guild.Guildstone = stone; + } + } + } + + public override void OnCancel( Mobile from ) + { + from.SendLocalizedMessage( 501145 ); // Placement of guildstone cancelled. + } + } + } +} diff --git a/Scripts/Engines/Guilds/GuildDismissGump.cs b/Scripts/Engines/Guilds/GuildDismissGump.cs new file mode 100644 index 0000000..31e1e3f --- /dev/null +++ b/Scripts/Engines/Guilds/GuildDismissGump.cs @@ -0,0 +1,62 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildDismissGump : GuildMobileListGump + { + public GuildDismissGump ( Mobile from, Guild guild ) : base( from, guild, true, guild.Members ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1011124, false, false ); // Whom do you wish to dismiss? + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 245, 30, 1011125, false, false ); // Kick them out! + + AddButton( 300, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Mobile m = (Mobile)m_List[index]; + + if ( m != null && !m.Deleted ) + { + m_Guild.RemoveMember( m ); + + if ( m_Mobile.AccessLevel >= AccessLevel.GameMaster || m_Mobile == m_Guild.Leader ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } + } + } + else if ( info.ButtonID == 2 && (m_Mobile.AccessLevel >= AccessLevel.GameMaster || m_Mobile == m_Guild.Leader) ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildGump.cs b/Scripts/Engines/Guilds/GuildGump.cs new file mode 100644 index 0000000..2905274 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildGump.cs @@ -0,0 +1,225 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using Server.Network; +using Server.Prompts; +using Server.Targeting; + +namespace Server.Gumps +{ + public class GuildGump : Gump + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildGump( Mobile beholder, Guild guild ) : base( 20, 30 ) + { + m_Mobile = beholder; + m_Guild = guild; + + Dragable = false; + + AddPage( 0 ); + AddBackground( 0, 0, 550, 400, 5054 ); + AddBackground( 10, 10, 530, 380, 3000 ); + + AddHtml( 20, 15, 200, 35, guild.Name, false, false ); + + Mobile leader = guild.Leader; + + if ( leader != null ) + { + string leadTitle; + + if ( (leadTitle = leader.GuildTitle) != null && (leadTitle = leadTitle.Trim()).Length > 0 ) + leadTitle += ": "; + else + leadTitle = ""; + + string leadName; + + if ( (leadName = leader.Name) == null || (leadName = leadName.Trim()).Length <= 0 ) + leadName = "(empty)"; + + AddHtml( 220, 15, 250, 35, leadTitle + leadName, false, false ); + } + + AddButton( 20, 50, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 50, 100, 20, 1013022, false, false ); // Loyal to + + Mobile fealty = beholder.GuildFealty; + + if ( fealty == null || !guild.IsMember( fealty ) ) + fealty = leader; + + if ( fealty == null ) + fealty = beholder; + + string fealtyName; + + if ( fealty == null || (fealtyName = fealty.Name) == null || (fealtyName = fealtyName.Trim()).Length <= 0 ) + fealtyName = "(empty)"; + + if ( beholder == fealty ) + AddHtmlLocalized( 55, 70, 470, 20, 1018002, false, false ); // yourself + else + AddHtml( 55, 70, 470, 20, fealtyName, false, false ); + + AddButton( 215, 50, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 250, 50, 170, 20, 1013023, false, false ); // Display guild abbreviation + AddHtmlLocalized( 250, 70, 50, 20, beholder.DisplayGuildTitle ? 1011262 : 1011263, false, false ); // on/off + + AddButton( 20, 100, 4005, 4007, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 100, 470, 30, 1011086, false, false ); // View the current roster. + + AddButton( 20, 130, 4005, 4007, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 130, 470, 30, 1011085, false, false ); // Recruit someone into the guild. + + if ( guild.Candidates.Count > 0 ) + { + AddButton( 20, 160, 4005, 4007, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 160, 470, 30, 1011093, false, false ); // View list of candidates who have been sponsored to the guild. + } + else + { + AddImage( 20, 160, 4020 ); + AddHtmlLocalized( 55, 160, 470, 30, 1013031, false, false ); // There are currently no candidates for membership. + } + + AddButton( 20, 220, 4005, 4007, 6, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 220, 470, 30, 1011087, false, false ); // View the guild's charter. + + AddButton( 20, 250, 4005, 4007, 7, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 250, 470, 30, 1011092, false, false ); // Resign from the guild. + + AddButton( 20, 280, 4005, 4007, 8, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 280, 470, 30, 1011095, false, false ); // View list of guilds you are at war with. + + if ( beholder.AccessLevel >= AccessLevel.GameMaster || beholder == leader ) + { + AddButton( 20, 310, 4005, 4007, 9, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 310, 470, 30, 1011094, false, false ); // Access guildmaster functions. + } + else + { + AddImage( 20, 310, 4020 ); + AddHtmlLocalized( 55, 310, 470, 30, 1018013, false, false ); // Reserved for guildmaster + } + + AddButton( 20, 360, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 360, 470, 30, 1011441, false, false ); // EXIT + } + + public static void EnsureClosed( Mobile m ) + { + m.CloseGump( typeof( DeclareFealtyGump ) ); + m.CloseGump( typeof( GrantGuildTitleGump ) ); + m.CloseGump( typeof( GuildAdminCandidatesGump ) ); + m.CloseGump( typeof( GuildCandidatesGump ) ); + m.CloseGump( typeof( GuildChangeTypeGump ) ); + m.CloseGump( typeof( GuildCharterGump ) ); + m.CloseGump( typeof( GuildDismissGump ) ); + m.CloseGump( typeof( GuildGump ) ); + m.CloseGump( typeof( GuildmasterGump ) ); + m.CloseGump( typeof( GuildRosterGump ) ); + m.CloseGump( typeof( GuildWarGump ) ); + } + + public static bool BadLeader( Mobile m, Guild g ) + { + if ( m.Deleted || g.Disbanded || (m.AccessLevel < AccessLevel.GameMaster && g.Leader != m) ) + return true; + + Item stone = g.Guildstone; + + return ( stone == null || stone.Deleted || !m.InRange( stone.GetWorldLocation(), 2 ) ); + } + + public static bool BadMember( Mobile m, Guild g ) + { + if ( m.Deleted || g.Disbanded || (m.AccessLevel < AccessLevel.GameMaster && !g.IsMember( m )) ) + return true; + + Item stone = g.Guildstone; + + return ( stone == null || stone.Deleted || !m.InRange( stone.GetWorldLocation(), 2 ) ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( BadMember( m_Mobile, m_Guild ) ) + return; + + switch ( info.ButtonID ) + { + case 1: // Loyalty + { + EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new DeclareFealtyGump( m_Mobile, m_Guild ) ); + + break; + } + case 2: // Toggle display abbreviation + { + m_Mobile.DisplayGuildTitle = !m_Mobile.DisplayGuildTitle; + + EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildGump( m_Mobile, m_Guild ) ); + + break; + } + case 3: // View the current roster + { + EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildRosterGump( m_Mobile, m_Guild ) ); + + break; + } + case 4: // Recruit + { + m_Mobile.Target = new GuildRecruitTarget( m_Mobile, m_Guild ); + + break; + } + case 5: // Membership candidates + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildCandidatesGump( m_Mobile, m_Guild ) ); + + break; + } + case 6: // View charter + { + EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildCharterGump( m_Mobile, m_Guild ) ); + + break; + } + case 7: // Resign + { + m_Guild.RemoveMember( m_Mobile ); + + break; + } + case 8: // View wars + { + EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildWarGump( m_Mobile, m_Guild ) ); + + break; + } + case 9: // Guildmaster functions + { + if ( m_Mobile.AccessLevel >= AccessLevel.GameMaster || m_Guild.Leader == m_Mobile ) + { + EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildListGump.cs b/Scripts/Engines/Guilds/GuildListGump.cs new file mode 100644 index 0000000..04e888e --- /dev/null +++ b/Scripts/Engines/Guilds/GuildListGump.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using System.Collections.Generic; + +namespace Server.Gumps +{ + public abstract class GuildListGump : Gump + { + protected Mobile m_Mobile; + protected Guild m_Guild; + protected List m_List; + + public GuildListGump( Mobile from, Guild guild, bool radio, List list ) : base( 20, 30 ) + { + m_Mobile = from; + m_Guild = guild; + + Dragable = false; + + AddPage( 0 ); + AddBackground( 0, 0, 550, 440, 5054 ); + AddBackground( 10, 10, 530, 420, 3000 ); + + Design(); + + m_List = new List( list ); + + for ( int i = 0; i < m_List.Count; ++i ) + { + if ( (i % 11) == 0 ) + { + if ( i != 0 ) + { + AddButton( 300, 370, 4005, 4007, 0, GumpButtonType.Page, (i / 11) + 1 ); + AddHtmlLocalized( 335, 370, 300, 35, 1011066, false, false ); // Next page + } + + AddPage( (i / 11) + 1 ); + + if ( i != 0 ) + { + AddButton( 20, 370, 4014, 4016, 0, GumpButtonType.Page, (i / 11) ); + AddHtmlLocalized( 55, 370, 300, 35, 1011067, false, false ); // Previous page + } + } + + if ( radio ) + AddRadio( 20, 35 + ((i % 11) * 30), 208, 209, false, i ); + + Guild g = m_List[i]; + + string name; + + if ( (name = g.Name) != null && (name = name.Trim()).Length <= 0 ) + name = "(empty)"; + + AddLabel( (radio ? 55 : 20), 35 + ((i % 11) * 30), 0, name ); + } + } + + protected virtual void Design() + { + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildMobileListGump.cs b/Scripts/Engines/Guilds/GuildMobileListGump.cs new file mode 100644 index 0000000..b749d20 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildMobileListGump.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using System.Collections.Generic; + +namespace Server.Gumps +{ + public abstract class GuildMobileListGump : Gump + { + protected Mobile m_Mobile; + protected Guild m_Guild; + protected List m_List; + + public GuildMobileListGump( Mobile from, Guild guild, bool radio, List list ) + : base( 20, 30 ) + { + m_Mobile = from; + m_Guild = guild; + + Dragable = false; + + AddPage( 0 ); + AddBackground( 0, 0, 550, 440, 5054 ); + AddBackground( 10, 10, 530, 420, 3000 ); + + Design(); + + m_List = new List( list ); + + for ( int i = 0; i < m_List.Count; ++i ) + { + if ( (i % 11) == 0 ) + { + if ( i != 0 ) + { + AddButton( 300, 370, 4005, 4007, 0, GumpButtonType.Page, (i / 11) + 1 ); + AddHtmlLocalized( 335, 370, 300, 35, 1011066, false, false ); // Next page + } + + AddPage( (i / 11) + 1 ); + + if ( i != 0 ) + { + AddButton( 20, 370, 4014, 4016, 0, GumpButtonType.Page, (i / 11) ); + AddHtmlLocalized( 55, 370, 300, 35, 1011067, false, false ); // Previous page + } + } + + if ( radio ) + AddRadio( 20, 35 + ((i % 11) * 30), 208, 209, false, i ); + + Mobile m = m_List[i]; + + string name; + + if ( (name = m.Name) != null && (name = name.Trim()).Length <= 0 ) + name = "(empty)"; + + AddLabel( (radio ? 55 : 20), 35 + ((i % 11) * 30), 0, name ); + } + } + + protected virtual void Design() + { + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildNamePrompt.cs b/Scripts/Engines/Guilds/GuildNamePrompt.cs new file mode 100644 index 0000000..d817628 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildNamePrompt.cs @@ -0,0 +1,55 @@ +using System; +using Server; +using Server.Guilds; +using Server.Prompts; + +namespace Server.Gumps +{ + public class GuildNamePrompt : Prompt + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildNamePrompt( Mobile m, Guild g ) + { + m_Mobile = m; + m_Guild = g; + } + + public override void OnCancel( Mobile from ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + text = text.Trim(); + + if ( text.Length > 40 ) + text = text.Substring( 0, 40 ); + + if ( text.Length > 0 ) + { + if ( Guild.FindByName( text ) != null ) + { + m_Mobile.SendMessage( "{0} conflicts with the name of an existing guild.", text ); + } + else + { + m_Guild.Name = text; + m_Guild.GuildMessage( 1018024, true, text ); // The name of your guild has changed: + } + } + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildRejectWarGump.cs b/Scripts/Engines/Guilds/GuildRejectWarGump.cs new file mode 100644 index 0000000..4215dcb --- /dev/null +++ b/Scripts/Engines/Guilds/GuildRejectWarGump.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildRejectWarGump : GuildListGump + { + public GuildRejectWarGump( Mobile from, Guild guild ) : base( from, guild, true, guild.WarInvitations ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1011148, false, false ); // Select the guild to reject their invitations: + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 245, 30, 1011101, false, false ); // Reject war invitations. + + AddButton( 300, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Guild g = (Guild)m_List[index]; + + if ( g != null ) + { + m_Guild.WarInvitations.Remove( g ); + g.WarDeclarations.Remove( m_Guild ); + + GuildGump.EnsureClosed( m_Mobile ); + + if ( m_Guild.WarInvitations.Count > 0 ) + m_Mobile.SendGump( new GuildRejectWarGump( m_Mobile, m_Guild ) ); + else + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } + } + else if ( info.ButtonID == 2 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildRescindDeclarationGump.cs b/Scripts/Engines/Guilds/GuildRescindDeclarationGump.cs new file mode 100644 index 0000000..5a3139e --- /dev/null +++ b/Scripts/Engines/Guilds/GuildRescindDeclarationGump.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildRescindDeclarationGump : GuildListGump + { + public GuildRescindDeclarationGump( Mobile from, Guild guild ) : base( from, guild, true, guild.WarDeclarations ) + { + } + + protected override void Design() + { + AddHtmlLocalized( 20, 10, 400, 35, 1011150, false, false ); // Select the guild to rescind our invitations: + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 245, 30, 1011102, false, false ); // Rescind your war declarations. + + AddButton( 300, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 400, 100, 35, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_List.Count ) + { + Guild g = (Guild)m_List[index]; + + if ( g != null ) + { + m_Guild.WarDeclarations.Remove( g ); + g.WarInvitations.Remove( m_Guild ); + + GuildGump.EnsureClosed( m_Mobile ); + + if ( m_Guild.WarDeclarations.Count > 0 ) + m_Mobile.SendGump( new GuildRescindDeclarationGump( m_Mobile, m_Guild ) ); + else + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } + } + else if ( info.ButtonID == 2 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildRosterGump.cs b/Scripts/Engines/Guilds/GuildRosterGump.cs new file mode 100644 index 0000000..7e7662d --- /dev/null +++ b/Scripts/Engines/Guilds/GuildRosterGump.cs @@ -0,0 +1,34 @@ +using System; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildRosterGump : GuildMobileListGump + { + public GuildRosterGump( Mobile from, Guild guild ) : base( from, guild, false, guild.Members ) + { + } + + protected override void Design() + { + AddHtml( 20, 10, 500, 35, String.Format( "
{0}
", m_Guild.Name ), false, false ); + + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 300, 35, 1011120, false, false ); // Return to the main menu. + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadMember( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildTeleporter.cs b/Scripts/Engines/Guilds/GuildTeleporter.cs new file mode 100644 index 0000000..ef756d0 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildTeleporter.cs @@ -0,0 +1,105 @@ +using System; +using Server.Network; +using Server.Prompts; +using Server.Guilds; +using Server.Multis; +using Server.Regions; + +namespace Server.Items +{ + public class GuildTeleporter : Item + { + private Item m_Stone; + + public override int LabelNumber{ get{ return 1041054; } } // guildstone teleporter + + [Constructable] + public GuildTeleporter() : this( null ) + { + } + + public GuildTeleporter( Item stone ) : base( 0x1869 ) + { + Weight = 1.0; + LootType = LootType.Blessed; + + m_Stone = stone; + } + + public GuildTeleporter( Serial serial ) : base( serial ) + { + } + + public override bool DisplayLootType{ get{ return false; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Stone ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + LootType = LootType.Blessed; + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Stone = reader.ReadItem(); + + break; + } + } + + if ( Weight == 0.0 ) + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if( Guild.NewGuildSystem ) + return; + + Guildstone stone = m_Stone as Guildstone; + + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( stone == null || stone.Deleted || stone.Guild == null || stone.Guild.Teleporter != this ) + { + from.SendLocalizedMessage( 501197 ); // This teleporting object can not determine what guildstone to teleport + } + else + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if ( house == null ) + { + from.SendLocalizedMessage( 501138 ); // You can only place a guildstone in a house. + } + else if ( !house.IsOwner( from ) ) + { + from.SendLocalizedMessage( 501141 ); // You can only place a guildstone in a house you own! + } + else if( house.FindGuildstone() != null ) + { + from.SendLocalizedMessage( 501142 );//Only one guildstone may reside in a given house. + } + else + { + m_Stone.MoveToWorld( from.Location, from.Map ); + Delete(); + stone.Guild.Teleporter = null; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildTitlePrompt.cs b/Scripts/Engines/Guilds/GuildTitlePrompt.cs new file mode 100644 index 0000000..777d4e5 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildTitlePrompt.cs @@ -0,0 +1,50 @@ +using System; +using Server; +using Server.Guilds; +using Server.Prompts; + +namespace Server.Gumps +{ + public class GuildTitlePrompt : Prompt + { + private Mobile m_Leader, m_Target; + private Guild m_Guild; + + public GuildTitlePrompt( Mobile leader, Mobile target, Guild g ) + { + m_Leader = leader; + m_Target = target; + m_Guild = g; + } + + public override void OnCancel( Mobile from ) + { + if ( GuildGump.BadLeader( m_Leader, m_Guild ) ) + return; + else if ( m_Target.Deleted || !m_Guild.IsMember( m_Target ) ) + return; + + GuildGump.EnsureClosed( m_Leader ); + m_Leader.SendGump( new GuildmasterGump( m_Leader, m_Guild ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( GuildGump.BadLeader( m_Leader, m_Guild ) ) + return; + else if ( m_Target.Deleted || !m_Guild.IsMember( m_Target ) ) + return; + + text = text.Trim(); + + if ( text.Length > 20 ) + text = text.Substring( 0, 20 ); + + if ( text.Length > 0 ) + m_Target.GuildTitle = text; + + GuildGump.EnsureClosed( m_Leader ); + m_Leader.SendGump( new GuildmasterGump( m_Leader, m_Guild ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildWarAdminGump.cs b/Scripts/Engines/Guilds/GuildWarAdminGump.cs new file mode 100644 index 0000000..fd389b1 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildWarAdminGump.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildWarAdminGump : Gump + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildWarAdminGump( Mobile from, Guild guild ) : base( 20, 30 ) + { + m_Mobile = from; + m_Guild = guild; + + Dragable = false; + + AddPage( 0 ); + AddBackground( 0, 0, 550, 440, 5054 ); + AddBackground( 10, 10, 530, 420, 3000 ); + + AddHtmlLocalized( 20, 10, 510, 35, 1011105, false, false ); //
WAR FUNCTIONS
+ + AddButton( 20, 40, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 40, 400, 30, 1011099, false, false ); // Declare war through guild name search. + + int count = 0; + + if ( guild.Enemies.Count > 0 ) + { + AddButton( 20, 160 + (count * 30), 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 160 + (count++ * 30), 400, 30, 1011103, false, false ); // Declare peace. + } + else + { + AddHtmlLocalized( 20, 160 + (count++ * 30), 400, 30, 1013033, false, false ); // No current wars + } + + if ( guild.WarInvitations.Count > 0 ) + { + AddButton( 20, 160 + (count * 30), 4005, 4007, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 160 + (count++ * 30), 400, 30, 1011100, false, false ); // Accept war invitations. + + AddButton( 20, 160 + (count * 30), 4005, 4007, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 160 + (count++ * 30), 400, 30, 1011101, false, false ); // Reject war invitations. + } + else + { + AddHtmlLocalized( 20, 160 + (count++ * 30), 400, 30, 1018012, false, false ); // No current invitations received for war. + } + + if ( guild.WarDeclarations.Count > 0 ) + { + AddButton( 20, 160 + (count * 30), 4005, 4007, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 160 + (count++ * 30), 400, 30, 1011102, false, false ); // Rescind your war declarations. + } + else + { + AddHtmlLocalized( 20, 160 + (count++ * 30), 400, 30, 1013055, false, false ); // No current war declarations + } + + AddButton( 20, 400, 4005, 4007, 6, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 400, 35, 1011104, false, false ); // Return to the previous menu. + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + switch ( info.ButtonID ) + { + case 1: // Declare war + { + m_Mobile.SendLocalizedMessage( 1018001 ); // Declare war through search - Enter Guild Name: + m_Mobile.Prompt = new GuildDeclareWarPrompt( m_Mobile, m_Guild ); + + break; + } + case 2: // Declare peace + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildDeclarePeaceGump( m_Mobile, m_Guild ) ); + + break; + } + case 3: // Accept war + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildAcceptWarGump( m_Mobile, m_Guild ) ); + + break; + } + case 4: // Reject war + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildRejectWarGump( m_Mobile, m_Guild ) ); + + break; + } + case 5: // Rescind declarations + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildRescindDeclarationGump( m_Mobile, m_Guild ) ); + + break; + } + case 6: // Return + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildWarGump.cs b/Scripts/Engines/Guilds/GuildWarGump.cs new file mode 100644 index 0000000..b777034 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildWarGump.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections; +using Server; +using Server.Guilds; +using Server.Network; +using System.Collections.Generic; + +namespace Server.Gumps +{ + public class GuildWarGump : Gump + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildWarGump( Mobile from, Guild guild ) : base( 20, 30 ) + { + m_Mobile = from; + m_Guild = guild; + + Dragable = false; + + AddPage( 0 ); + AddBackground( 0, 0, 550, 440, 5054 ); + AddBackground( 10, 10, 530, 420, 3000 ); + + AddHtmlLocalized( 20, 10, 500, 35, 1011133, false, false ); //
WARFARE STATUS
+ + AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 400, 300, 35, 1011120, false, false ); // Return to the main menu. + + AddPage( 1 ); + + AddButton( 375, 375, 5224, 5224, 0, GumpButtonType.Page, 2 ); + AddHtmlLocalized( 410, 373, 100, 25, 1011066, false, false ); // Next page + + AddHtmlLocalized( 20, 45, 400, 20, 1011134, false, false ); // We are at war with: + + List enemies = guild.Enemies; + + if ( enemies.Count == 0 ) + { + AddHtmlLocalized( 20, 65, 400, 20, 1013033, false, false ); // No current wars + } + else + { + for ( int i = 0; i < enemies.Count; ++i ) + { + Guild g = enemies[i]; + + AddHtml( 20, 65 + (i * 20), 300, 20, g.Name, false, false ); + } + } + + AddPage( 2 ); + + AddButton( 375, 375, 5224, 5224, 0, GumpButtonType.Page, 3 ); + AddHtmlLocalized( 410, 373, 100, 25, 1011066, false, false ); // Next page + + AddButton( 30, 375, 5223, 5223, 0, GumpButtonType.Page, 1 ); + AddHtmlLocalized( 65, 373, 150, 25, 1011067, false, false ); // Previous page + + AddHtmlLocalized( 20, 45, 400, 20, 1011136, false, false ); // Guilds that we have declared war on: + + List declared = guild.WarDeclarations; + + if ( declared.Count == 0 ) + { + AddHtmlLocalized( 20, 65, 400, 20, 1018012, false, false ); // No current invitations received for war. + } + else + { + for ( int i = 0; i < declared.Count; ++i ) + { + Guild g = (Guild)declared[i]; + + AddHtml( 20, 65 + (i * 20), 300, 20, g.Name, false, false ); + } + } + + AddPage( 3 ); + + AddButton( 30, 375, 5223, 5223, 0, GumpButtonType.Page, 2 ); + AddHtmlLocalized( 65, 373, 150, 25, 1011067, false, false ); // Previous page + + AddHtmlLocalized( 20, 45, 400, 20, 1011135, false, false ); // Guilds that have declared war on us: + + List invites = guild.WarInvitations; + + if ( invites.Count == 0 ) + { + AddHtmlLocalized( 20, 65, 400, 20, 1013055, false, false ); // No current war declarations + } + else + { + for ( int i = 0; i < invites.Count; ++i ) + { + Guild g = invites[i]; + + AddHtml( 20, 65 + (i * 20), 300, 20, g.Name, false, false ); + } + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadMember( m_Mobile, m_Guild ) ) + return; + + if ( info.ButtonID == 1 ) + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildGump( m_Mobile, m_Guild ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildWebsitePrompt.cs b/Scripts/Engines/Guilds/GuildWebsitePrompt.cs new file mode 100644 index 0000000..164c0a0 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildWebsitePrompt.cs @@ -0,0 +1,45 @@ +using System; +using Server; +using Server.Guilds; +using Server.Prompts; + +namespace Server.Gumps +{ + public class GuildWebsitePrompt : Prompt + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildWebsitePrompt( Mobile m, Guild g ) + { + m_Mobile = m; + m_Guild = g; + } + + public override void OnCancel( Mobile from ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + text = text.Trim(); + + if ( text.Length > 50 ) + text = text.Substring( 0, 50 ); + + if ( text.Length > 0 ) + m_Guild.Website = text; + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/GuildmasterGump.cs b/Scripts/Engines/Guilds/GuildmasterGump.cs new file mode 100644 index 0000000..3616c60 --- /dev/null +++ b/Scripts/Engines/Guilds/GuildmasterGump.cs @@ -0,0 +1,184 @@ +using System; +using System.Collections; +using Server; +using Server.Items; +using Server.Guilds; +using Server.Network; + +namespace Server.Gumps +{ + public class GuildmasterGump : Gump + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildmasterGump( Mobile from, Guild guild ) : base( 20, 30 ) + { + m_Mobile = from; + m_Guild = guild; + + Dragable = false; + + AddPage( 0 ); + AddBackground( 0, 0, 550, 400, 5054 ); + AddBackground( 10, 10, 530, 380, 3000 ); + + AddHtmlLocalized( 20, 15, 510, 35, 1011121, false, false ); //
GUILDMASTER FUNCTIONS
+ + AddButton( 20, 40, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 40, 470, 30, 1011107, false, false ); // Set the guild name. + + AddButton( 20, 70, 4005, 4007, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 70, 470, 30, 1011109, false, false ); // Set the guild's abbreviation. + + AddButton( 20, 100, 4005, 4007, 4, GumpButtonType.Reply, 0 ); + switch ( m_Guild.Type ) + { + case GuildType.Regular: + AddHtmlLocalized( 55, 100, 470, 30, 1013059, false, false ); // Change guild type: Currently Standard + break; + case GuildType.Order: + AddHtmlLocalized( 55, 100, 470, 30, 1013057, false, false ); // Change guild type: Currently Order + break; + case GuildType.Chaos: + AddHtmlLocalized( 55, 100, 470, 30, 1013058, false, false ); // Change guild type: Currently Chaos + break; + } + + AddButton( 20, 130, 4005, 4007, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 130, 470, 30, 1011112, false, false ); // Set the guild's charter. + + AddButton( 20, 160, 4005, 4007, 6, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 160, 470, 30, 1011113, false, false ); // Dismiss a member. + + AddButton( 20, 190, 4005, 4007, 7, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 190, 470, 30, 1011114, false, false ); // Go to the WAR menu. + + if ( m_Guild.Candidates.Count > 0 ) + { + AddButton( 20, 220, 4005, 4007, 8, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 220, 470, 30, 1013056, false, false ); // Administer the list of candidates + } + else + { + AddImage( 20, 220, 4020 ); + AddHtmlLocalized( 55, 220, 470, 30, 1013031, false, false ); // There are currently no candidates for membership. + } + + AddButton( 20, 250, 4005, 4007, 9, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 250, 470, 30, 1011117, false, false ); // Set the guildmaster's title. + + AddButton( 20, 280, 4005, 4007, 10, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 280, 470, 30, 1011118, false, false ); // Grant a title to another member. + + AddButton( 20, 310, 4005, 4007, 11, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 310, 470, 30, 1011119, false, false ); // Move this guildstone. + + AddButton( 20, 360, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 360, 245, 30, 1011120, false, false ); // Return to the main menu. + + AddButton( 300, 360, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 335, 360, 100, 30, 1011441, false, false ); // EXIT + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( GuildGump.BadLeader( m_Mobile, m_Guild ) ) + return; + + switch ( info.ButtonID ) + { + case 1: // Main menu + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildGump( m_Mobile, m_Guild ) ); + + break; + } + case 2: // Set guild name + { + m_Mobile.SendLocalizedMessage( 1013060 ); // Enter new guild name (40 characters max): + m_Mobile.Prompt = new GuildNamePrompt( m_Mobile, m_Guild ); + + break; + } + case 3: // Set guild abbreviation + { + m_Mobile.SendLocalizedMessage( 1013061 ); // Enter new guild abbreviation (3 characters max): + m_Mobile.Prompt = new GuildAbbrvPrompt( m_Mobile, m_Guild ); + + break; + } + case 4: // Change guild type + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildChangeTypeGump( m_Mobile, m_Guild ) ); + + break; + } + case 5: // Set charter + { + m_Mobile.SendLocalizedMessage( 1013071 ); // Enter the new guild charter (50 characters max): + m_Mobile.Prompt = new GuildCharterPrompt( m_Mobile, m_Guild ); + + break; + } + case 6: // Dismiss member + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildDismissGump( m_Mobile, m_Guild ) ); + + break; + } + case 7: // War menu + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildWarAdminGump( m_Mobile, m_Guild ) ); + + break; + } + case 8: // Administer candidates + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildAdminCandidatesGump( m_Mobile, m_Guild ) ); + + break; + } + case 9: // Set guildmaster's title + { + m_Mobile.SendLocalizedMessage( 1013073 ); // Enter new guildmaster title (20 characters max): + m_Mobile.Prompt = new GuildTitlePrompt( m_Mobile, m_Mobile, m_Guild ); + + break; + } + case 10: // Grant title + { + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GrantGuildTitleGump( m_Mobile, m_Guild ) ); + + break; + } + case 11: // Move guildstone + { + if ( m_Guild.Guildstone != null ) + { + GuildTeleporter item = new GuildTeleporter( m_Guild.Guildstone ); + + if ( m_Guild.Teleporter != null ) + m_Guild.Teleporter.Delete(); + + m_Mobile.SendLocalizedMessage( 501133 ); // Use the teleporting object placed in your backpack to move this guildstone. + + m_Mobile.AddToBackpack( item ); + m_Guild.Teleporter = item; + } + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildmasterGump( m_Mobile, m_Guild ) ); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/Guildstone.cs b/Scripts/Engines/Guilds/Guildstone.cs new file mode 100644 index 0000000..ef4fe0b --- /dev/null +++ b/Scripts/Engines/Guilds/Guildstone.cs @@ -0,0 +1,364 @@ +using System; +using System.IO; +using Server.Gumps; +using Server.Guilds; +using Server.Network; +using Server.Multis; + +namespace Server.Items +{ + public class Guildstone : Item, IAddon, IChopable + { + private Guild m_Guild; + private string m_GuildName; + private string m_GuildAbbrev; + + public Guild Guild + { + get + { + return m_Guild; + } + } + + public override int LabelNumber { get { return 1041429; } } // a guildstone + + public Guildstone( Guild g ) : this( g, g.Name, g.Abbreviation ) + { + } + + public Guildstone( Guild g, string guildName, string abbrev ) : base( Guild.NewGuildSystem ? 0xED6 : 0xED4 ) + { + m_Guild = g; + m_GuildName = guildName; + m_GuildAbbrev = abbrev; + + Movable = false; + } + + public Guildstone( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + if( m_Guild != null && !m_Guild.Disbanded ) + { + m_GuildName = m_Guild.Name; + m_GuildAbbrev = m_Guild.Abbreviation; + } + + writer.Write( (int)3 ); // version + + writer.Write( m_BeforeChangeover ); + + writer.Write( m_GuildName ); + writer.Write( m_GuildAbbrev ); + + writer.Write( m_Guild ); + } + + private bool m_BeforeChangeover; + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch( version ) + { + case 3: + { + m_BeforeChangeover = reader.ReadBool(); + goto case 2; + } + case 2: + { + m_GuildName = reader.ReadString(); + m_GuildAbbrev = reader.ReadString(); + + goto case 1; + } + case 1: + { + m_Guild = reader.ReadGuild() as Guild; + + goto case 0; + } + case 0: + { + break; + } + } + + if( Guild.NewGuildSystem && ItemID == 0xED4 ) + ItemID = 0xED6; + + if( m_Guild != null ) + { + m_GuildName = m_Guild.Name; + m_GuildAbbrev = m_Guild.Abbreviation; + } + + if( version <= 2 ) + m_BeforeChangeover = true; + + if( Guild.NewGuildSystem && m_BeforeChangeover ) + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( AddToHouse ) ); + + if( !Guild.NewGuildSystem && m_Guild == null ) + this.Delete(); + } + + private void AddToHouse() + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if( Guild.NewGuildSystem && m_BeforeChangeover && house != null && !house.Addons.Contains( this ) ) + { + house.Addons.Add( this ); + m_BeforeChangeover = false; + } + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if( m_Guild != null && !m_Guild.Disbanded ) + { + string name; + string abbr; + + if( (name = m_Guild.Name) == null || (name = name.Trim()).Length <= 0 ) + name = "(unnamed)"; + + if( (abbr = m_Guild.Abbreviation) == null || (abbr = abbr.Trim()).Length <= 0 ) + abbr = ""; + + //list.Add( 1060802, Utility.FixHtml( name ) ); // Guild name: ~1_val~ + list.Add( 1060802, String.Format( "{0} [{1}]", Utility.FixHtml( name ), Utility.FixHtml( abbr ) ) ); + } + else + { + list.Add( 1060802, String.Format( "{0} [{1}]", Utility.FixHtml( m_GuildName ), Utility.FixHtml( m_GuildAbbrev ) ) ); + } + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + string name; + + if( m_Guild == null ) + name = "(unfounded)"; + else if( (name = m_Guild.Name) == null || (name = name.Trim()).Length <= 0 ) + name = "(unnamed)"; + + this.LabelTo( from, name ); + } + + public override void OnAfterDelete() + { + if( !Guild.NewGuildSystem && m_Guild != null && !m_Guild.Disbanded ) + m_Guild.Disband(); + } + + public override void OnDoubleClick( Mobile from ) + { + if( Guild.NewGuildSystem ) + return; + + if( m_Guild == null || m_Guild.Disbanded ) + { + Delete(); + } + else if( !from.InRange( GetWorldLocation(), 2 ) ) + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + else if( m_Guild.Accepted.Contains( from ) ) + { + m_Guild.Accepted.Remove( from ); + m_Guild.AddMember( from ); + + GuildGump.EnsureClosed( from ); + from.SendGump( new GuildGump( from, m_Guild ) ); + } + else if( from.AccessLevel < AccessLevel.GameMaster && !m_Guild.IsMember( from ) ) + { + from.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, 501158, "", "" ) ); // You are not a member ... + } + else + { + GuildGump.EnsureClosed( from ); + from.SendGump( new GuildGump( from, m_Guild ) ); + } + } + + #region IAddon Members + public Item Deed + { + get { return new GuildstoneDeed( m_Guild, m_GuildName, m_GuildAbbrev ); } + } + + public bool CouldFit( IPoint3D p, Map map ) + { + return map.CanFit( p.X, p.Y, p.Z, this.ItemData.Height ); + } + + #endregion + + #region IChopable Members + + public void OnChop( Mobile from ) + { + if( !Guild.NewGuildSystem ) + return; + + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if( ( house == null && m_BeforeChangeover ) || ( house != null && house.IsOwner( from ) && house.Addons.Contains( this ) )) + { + Effects.PlaySound( GetWorldLocation(), Map, 0x3B3 ); + from.SendLocalizedMessage( 500461 ); // You destroy the item. + + Delete(); + + if( house != null && house.Addons.Contains( this ) ) + house.Addons.Remove( this ); + + Item deed = Deed; + + if( deed != null ) + { + from.AddToBackpack( deed ); + } + } + } + + #endregion + } + + [Flipable( 0x14F0, 0x14EF )] + public class GuildstoneDeed : Item + { + public override int LabelNumber { get { return 1041233; } } // deed to a guildstone + + private Guild m_Guild; + private string m_GuildName; + private string m_GuildAbbrev; + + [Constructable] + public GuildstoneDeed( Guild g, string guildName, string abbrev ) : base( 0x14F0 ) + { + m_Guild = g; + m_GuildName = guildName; + m_GuildAbbrev = abbrev; + + Weight = 1.0; + } + + public GuildstoneDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if( m_Guild != null && !m_Guild.Disbanded ) + { + string name; + string abbr; + + if( (name = m_Guild.Name) == null || (name = name.Trim()).Length <= 0 ) + name = "(unnamed)"; + + if( (abbr = m_Guild.Abbreviation) == null || (abbr = abbr.Trim()).Length <= 0 ) + abbr = ""; + + //list.Add( 1060802, Utility.FixHtml( name ) ); // Guild name: ~1_val~ + list.Add( 1060802, String.Format( "{0} [{1}]", Utility.FixHtml( name ), Utility.FixHtml( abbr ) ) ); + } + else + { + list.Add( 1060802, String.Format( "{0} [{1}]", Utility.FixHtml( m_GuildName ), Utility.FixHtml( m_GuildAbbrev ) ) ); + } + } + + public override void OnDoubleClick( Mobile from ) + { + if( IsChildOf( from.Backpack ) ) + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if( house != null && house.IsOwner( from ) ) + { + from.SendLocalizedMessage( 1062838 ); // Where would you like to place this decoration? + from.BeginTarget( -1, true, Targeting.TargetFlags.None, new TargetStateCallback( Placement_OnTarget ), null ); + } + else + { + from.SendLocalizedMessage( 502092 ); // You must be in your house to do this. + } + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + public void Placement_OnTarget( Mobile from, object targeted, object state ) + { + IPoint3D p = targeted as IPoint3D; + + if( p == null || Deleted ) + return; + + Point3D loc = new Point3D( p ); + + BaseHouse house = BaseHouse.FindHouseAt( loc, from.Map, 16 ); + + if( IsChildOf( from.Backpack ) ) + { + if( house != null && house.IsOwner( from ) ) + { + Item addon = new Guildstone( m_Guild, m_GuildName, m_GuildAbbrev ); + + addon.MoveToWorld( loc, from.Map ); + + house.Addons.Add( addon ); + Delete(); + } + else + { + from.SendLocalizedMessage( 1042036 ); // That location is not in your house. + } + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + } +} diff --git a/Scripts/Engines/Guilds/New Guild System/AdvancedSearch.cs b/Scripts/Engines/Guilds/New Guild System/AdvancedSearch.cs new file mode 100644 index 0000000..3e4df3c --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/AdvancedSearch.cs @@ -0,0 +1,75 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; + +namespace Server.Guilds +{ + public delegate void SearchSelectionCallback( GuildDisplayType display ); + + public class GuildAdvancedSearchGump : BaseGuildGump + { + private GuildDisplayType m_Display; + private SearchSelectionCallback m_Callback; + + public GuildAdvancedSearchGump( PlayerMobile pm, Guild g, GuildDisplayType display, SearchSelectionCallback callback ) : base( pm, g ) + { + m_Callback = callback; + m_Display = display; + PopulateGump(); + } + + public override void PopulateGump() + { + base.PopulateGump(); + + AddHtmlLocalized( 431, 43, 110, 26, 1062978, 0xF, false, false ); // Diplomacy + + AddHtmlLocalized( 65, 80, 480, 26, 1063124, 0xF, true, false ); // Advanced Search Options + + AddHtmlLocalized( 65, 110, 480, 26, 1063136 + (int)m_Display, 0xF, false, false ); // Showing All Guilds/w/Relation/Waiting Relation + + AddGroup( 1 ); + AddRadio( 75, 140, 0xD2, 0xD3, false, 2 ); + AddHtmlLocalized( 105, 140, 200, 26, 1063006, 0x0, false, false ); // Show Guilds with Relationship + AddRadio( 75, 170, 0xD2, 0xD3, false, 1 ); + AddHtmlLocalized( 105, 170, 200, 26, 1063005, 0x0, false, false ); // Show Guilds Awaiting Action + AddRadio( 75, 200, 0xD2, 0xD3, false, 0 ); + AddHtmlLocalized( 105, 200, 200, 26, 1063007, 0x0, false, false ); // Show All Guilds + + AddBackground( 450, 370, 100, 26, 0x2486 ); + AddButton( 455, 375, 0x845, 0x846, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 480, 373, 60, 26, 1006044, 0x0, false, false ); // OK + AddBackground( 340, 370, 100, 26, 0x2486 ); + AddButton( 345, 375, 0x845, 0x846, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 370, 373, 60, 26, 1006045, 0x0, false, false ); // Cancel + } + + + public override void OnResponse( NetState sender, RelayInfo info ) + { + base.OnResponse( sender, info ); + + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( pm == null || !IsMember( pm, guild ) ) + return; + + GuildDisplayType display = m_Display; + + if( info.ButtonID == 5 ) + { + for( int i = 0; i < 3; i++ ) + { + if( info.IsSwitched( i ) ) + { + display = (GuildDisplayType)i; + m_Callback( display ); + break; + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/BaseGuildGump.cs b/Scripts/Engines/Guilds/New Guild System/BaseGuildGump.cs new file mode 100644 index 0000000..02c9195 --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/BaseGuildGump.cs @@ -0,0 +1,143 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Gumps; +using Server.Network; +using Server.Misc; + +namespace Server.Guilds +{ + public abstract class BaseGuildGump : Gump + { + private Guild m_Guild; + private PlayerMobile m_Player; + + protected Guild guild{ get{ return m_Guild; } } + protected PlayerMobile player{ get{ return m_Player; } } + + public BaseGuildGump( PlayerMobile pm, Guild g ) : this( pm, g, 10, 10 ) + { + } + + public BaseGuildGump( PlayerMobile pm, Guild g, int x, int y ) : base( x, y ) + { + m_Guild = g; + m_Player = pm; + + pm.CloseGump( typeof( BaseGuildGump ) ); + } + + //There's prolly a way to have all the vars set of inherited classes before something is called in the Ctor... but... I can't think of it right now, and I can't use Timer.DelayCall here :< + + public virtual void PopulateGump() + { + AddPage( 0 ); + + AddBackground( 0, 0, 600, 440, 0x24AE ); + AddBackground( 66, 40, 150, 26, 0x2486 ); + AddButton( 71, 45, 0x845, 0x846, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 96, 43, 110, 26, 1063014, 0x0, false, false ); // My Guild + AddBackground( 236, 40, 150, 26, 0x2486 ); + AddButton( 241, 45, 0x845, 0x846, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 266, 43, 110, 26, 1062974, 0x0, false, false ); // Guild Roster + AddBackground( 401, 40, 150, 26, 0x2486 ); + AddButton( 406, 45, 0x845, 0x846, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 431, 43, 110, 26, 1062978, 0x0, false, false ); // Diplomacy + AddPage( 1 ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( !IsMember( pm, guild ) ) + return; + + switch( info.ButtonID ) + { + case 1: + { + pm.SendGump( new GuildInfoGump( pm, guild ) ); + break; + } + case 2: + { + pm.SendGump( new GuildRosterGump( pm, guild ) ); + break; + } + case 3: + { + pm.SendGump( new GuildDiplomacyGump( pm, guild ) ); + break; + } + } + } + + public static bool IsLeader( Mobile m, Guild g ) + { + return !( m.Deleted || g.Disbanded || !( m is PlayerMobile ) || (m.AccessLevel < AccessLevel.GameMaster && g.Leader != m) ); + } + + public static bool IsMember( Mobile m, Guild g ) + { + return !( m.Deleted || g.Disbanded || !( m is PlayerMobile ) || (m.AccessLevel < AccessLevel.GameMaster && !g.IsMember( m )) ); + } + + public static bool CheckProfanity( string s ) + { + return CheckProfanity( s, 50 ); + } + public static bool CheckProfanity( string s, int maxLength ) + { + //return NameVerification.Validate( s, 1, 50, true, true, false, int.MaxValue, ProfanityProtection.Exceptions, ProfanityProtection.Disallowed, ProfanityProtection.StartDisallowed ); //What am I doing wrong, this still allows chars like the <3 symbol... 3 AM. someone change this to use this + + //With testing on OSI, Guild stuff seems to follow a 'simpler' method of profanity protection + if( s.Length < 1 || s.Length > maxLength ) + return false; + + char[] exceptions = ProfanityProtection.Exceptions; + + s = s.ToLower(); + + for ( int i = 0; i < s.Length; ++i ) + { + char c = s[i]; + + if ( (c < 'a' || c > 'z') && (c < '0' || c > '9')) + { + bool except = false; + + for( int j = 0; !except && j < exceptions.Length; j++ ) + if( c == exceptions[j] ) + except = true; + + if( !except ) + return false; + } + } + + string[] disallowed = ProfanityProtection.Disallowed; + + for( int i = 0; i < disallowed.Length; i++ ) + { + if ( s.IndexOf( disallowed[i] ) != -1 ) + return false; + } + + return true; + } + + public void AddHtmlText( int x, int y, int width, int height, TextDefinition text, bool back, bool scroll ) + { + if ( text != null && text.Number > 0 ) + AddHtmlLocalized( x, y, width, height, text.Number, back, scroll ); + else if ( text != null && text.String != null ) + AddHtml( x, y, width, height, text.String, back, scroll ); + } + + public static string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/BaseGuildListGump.cs b/Scripts/Engines/Guilds/New Guild System/BaseGuildListGump.cs new file mode 100644 index 0000000..6dc2307 --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/BaseGuildListGump.cs @@ -0,0 +1,209 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Guilds +{ + public abstract class BaseGuildListGump : BaseGuildGump + { + List m_List; + IComparer m_Comparer; + InfoField[] m_Fields; + bool m_Ascending; + string m_Filter; + int m_StartNumber; + + private const int itemsPerPage = 8; + + public BaseGuildListGump( PlayerMobile pm, Guild g, List list, IComparer currentComparer, bool ascending, string filter, int startNumber, InfoField[] fields ) + : base( pm, g ) + { + m_Filter = filter.Trim(); + + m_Comparer = currentComparer; + m_Fields = fields; + m_Ascending = ascending; + m_StartNumber = startNumber; + m_List = list; + } + + public virtual bool WillFilter{ get{ return (m_Filter.Length >= 0); } } + + public override void PopulateGump() + { + base.PopulateGump(); + + List list = m_List; + if( WillFilter ) + { + m_List = new List(); + for( int i = 0; i < list.Count; i++ ) + { + if( !IsFiltered( list[i], m_Filter ) ) + m_List.Add( list[i] ); + } + } + else + { + m_List = new List( list ); + } + + m_List.Sort( m_Comparer ); + m_StartNumber = Math.Max( Math.Min( m_StartNumber, m_List.Count - 1 ), 0 ); + + + + AddBackground( 130, 75, 385, 30, 0xBB8 ); + AddTextEntry( 135, 80, 375, 30, 0x481, 1, m_Filter ); + AddButton( 520, 75, 0x867, 0x868, 5, GumpButtonType.Reply, 0 ); //Filter Button + + int width = 0; + for( int i = 0; i < m_Fields.Length; i++ ) + { + InfoField f = m_Fields[i]; + + AddImageTiled( 65 + width, 110, f.Width + 10, 26, 0xA40 ); + AddImageTiled( 67 + width, 112, f.Width + 6, 22, 0xBBC ); + AddHtmlText( 70 + width, 113, f.Width, 20, f.Name, false, false ); + + bool isComparer = ( m_Fields[i].Comparer.GetType() == m_Comparer.GetType() ); + + int ButtonID = ( isComparer ) ? ( m_Ascending ? 0x983 : 0x985 ) : 0x2716; + + AddButton( 59 + width + f.Width, 117, ButtonID, ButtonID + (isComparer ? 1 : 0) , 100 + i, GumpButtonType.Reply, 0 ); + + width += (f.Width + 12); + } + + if( m_StartNumber <= 0 ) + AddButton( 65, 80, 0x15E3, 0x15E7, 0, GumpButtonType.Page, 0 ); + else + AddButton( 65, 80, 0x15E3, 0x15E7, 6, GumpButtonType.Reply, 0 ); // Back + + if( m_StartNumber + itemsPerPage > m_List.Count ) + AddButton( 95, 80, 0x15E1, 0x15E5, 0, GumpButtonType.Page, 0 ); + else + AddButton( 95, 80, 0x15E1, 0x15E5, 7, GumpButtonType.Reply, 0 ); // Forward + + + + int itemNumber = 0; + + if( m_Ascending ) + for( int i = m_StartNumber; i < m_StartNumber + itemsPerPage && i < m_List.Count; i++ ) + DrawEntry( m_List[i], i, itemNumber++ ); + else //descending, go from bottom of list to the top + for( int i = m_List.Count - 1 - m_StartNumber; i >= 0 && i >= (m_List.Count - itemsPerPage - m_StartNumber); i-- ) + DrawEntry( m_List[i], i, itemNumber++ ); + + DrawEndingEntry( itemNumber ); + } + + public virtual void DrawEndingEntry( int itemNumber ) + { + } + + public virtual bool HasRelationship( T o ) + { + return false; + } + + public virtual void DrawEntry( T o, int index, int itemNumber ) + { + int width = 0; + for( int j = 0; j < m_Fields.Length; j++ ) + { + InfoField f = m_Fields[j]; + + AddImageTiled( 65 + width, 138 + itemNumber * 28, f.Width + 10, 26, 0xA40 ); + AddImageTiled( 67 + width, 140 + itemNumber * 28, f.Width + 6, 22, 0xBBC ); + AddHtmlText( 70 + width, 141 + itemNumber * 28, f.Width, 20, GetValuesFor( o, m_Fields.Length )[j], false, false ); + + width += (f.Width + 12); + } + + if( HasRelationship( o ) ) + AddButton( 40, 143 + itemNumber * 28, 0x8AF, 0x8AF, 200 + index, GumpButtonType.Reply, 0 ); //Info Button + else + AddButton( 40, 143 + itemNumber * 28, 0x4B9, 0x4BA, 200 + index, GumpButtonType.Reply, 0 ); //Info Button + } + + protected abstract TextDefinition[] GetValuesFor( T o, int aryLength ); + protected abstract bool IsFiltered( T o, string filter ); + + public override void OnResponse( NetState sender, RelayInfo info ) + { + base.OnResponse( sender, info ); + + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( pm == null || !IsMember( pm, guild ) ) + return; + + int id = info.ButtonID; + + switch( id ) + { + case 5: //Filter + { + TextRelay t = info.GetTextEntry( 1 ); + pm.SendGump( GetResentGump( player, guild, m_Comparer, m_Ascending, ( t == null ) ? "" : t.Text, 0 ) ); + break; + } + case 6: //Back + { + pm.SendGump( GetResentGump( player, guild, m_Comparer, m_Ascending, m_Filter, m_StartNumber - itemsPerPage ) ); + break; + } + case 7: //Forward + { + pm.SendGump( GetResentGump( player, guild, m_Comparer, m_Ascending, m_Filter, m_StartNumber + itemsPerPage ) ); + break; + } + } + + if( id >= 100 && id < (100 + m_Fields.Length) ) + { + IComparer comparer = m_Fields[id-100].Comparer; + + if( m_Comparer.GetType() == comparer.GetType() ) + m_Ascending = !m_Ascending; + + pm.SendGump( GetResentGump( player, guild, comparer, m_Ascending, m_Filter, 0 ) ); + } + else if( id >= 200 && id < ( 200 + m_List.Count ) ) + { + pm.SendGump( GetObjectInfoGump( player, guild, m_List[id - 200] ) ); + } + } + + + public abstract Gump GetResentGump( PlayerMobile pm, Guild g, IComparer comparer, bool ascending, string filter, int startNumber ); + public abstract Gump GetObjectInfoGump( PlayerMobile pm, Guild g, T o ); + + public void ResendGump() + { + player.SendGump( GetResentGump( player, guild, m_Comparer, m_Ascending, m_Filter, m_StartNumber ) ); + } + } + public struct InfoField + { + private TextDefinition m_Name; + private int m_Width; + private IComparer m_Comparer; + + public TextDefinition Name{ get{ return m_Name; } } + public int Width{ get{ return m_Width; } } + public IComparer Comparer { get { return m_Comparer; } } + public InfoField( TextDefinition name, int width, IComparer comparer ) + { + m_Name = name; + m_Width = width; + m_Comparer = comparer; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/Create Guild Gump.cs b/Scripts/Engines/Guilds/New Guild System/Create Guild Gump.cs new file mode 100644 index 0000000..f71d961 --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/Create Guild Gump.cs @@ -0,0 +1,101 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; + +namespace Server.Guilds +{ + public class CreateGuildGump : Gump + { + public CreateGuildGump( PlayerMobile pm ) : this( pm, "Guild Name", "" ) + { + } + + public CreateGuildGump( PlayerMobile pm, string guildName, string guildAbbrev ) : base( 10, 10 ) + { + pm.CloseGump( typeof( CreateGuildGump ) ); + pm.CloseGump( typeof( BaseGuildGump ) ); + + AddPage( 0 ); + + AddBackground( 0, 0, 500, 300, 0x2422 ); + AddHtmlLocalized( 25, 20, 450, 25, 1062939, 0x0, true, false ); //
GUILD MENU
+ AddHtmlLocalized( 25, 60, 450, 60, 1062940, 0x0, false, false ); // As you are not a member of any guild, you can create your own by providing a unique guild name and paying the standard guild registration fee. + AddHtmlLocalized( 25, 135, 120, 25, 1062941, 0x0, false, false ); // Registration Fee: + AddLabel( 155, 135, 0x481, Guild.RegistrationFee.ToString() ); + AddHtmlLocalized( 25, 165, 120, 25, 1011140, 0x0, false, false ); // Enter Guild Name: + AddBackground( 155, 160, 320, 26, 0xBB8 ); + AddTextEntry( 160, 163, 315, 21, 0x481, 5, guildName ); + AddHtmlLocalized( 25, 191, 120, 26, 1063035, 0x0, false, false ); // Abbreviation: + AddBackground( 155, 186, 320, 26, 0xBB8 ); + AddTextEntry( 160, 189, 315, 21, 0x481, 6, guildAbbrev ); + AddButton( 415, 217, 0xF7, 0xF8, 1, GumpButtonType.Reply, 0 ); + AddButton( 345, 217, 0xF2, 0xF1, 0, GumpButtonType.Reply, 0 ); + + if( pm.AcceptGuildInvites ) + AddButton( 20, 260, 0xD2, 0xD3, 2, GumpButtonType.Reply, 0 ); + else + AddButton( 20, 260, 0xD3, 0xD2, 2, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 45, 260, 200, 30, 1062943, 0x0, false, false ); // Ignore Guild Invites + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( pm == null || pm.Guild != null ) + return; //Sanity + + switch( info.ButtonID ) + { + case 1: + { + TextRelay tName = info.GetTextEntry( 5 ); + TextRelay tAbbrev = info.GetTextEntry( 6 ); + + string guildName = (tName == null) ? "" : tName.Text; + string guildAbbrev = (tAbbrev == null) ? "" : tAbbrev.Text; + + guildName = Utility.FixHtml( guildName.Trim() ); + guildAbbrev = Utility.FixHtml( guildAbbrev.Trim() ); + + if( guildName.Length <= 0 ) + pm.SendLocalizedMessage( 1070884 ); // Guild name cannot be blank. + else if( guildAbbrev.Length <= 0 ) + pm.SendLocalizedMessage( 1070885 ); // You must provide a guild abbreviation. + else if( guildName.Length > Guild.NameLimit ) + pm.SendLocalizedMessage( 1063036, Guild.NameLimit.ToString() ); // A guild name cannot be more than ~1_val~ characters in length. + else if( guildAbbrev.Length > Guild.AbbrevLimit ) + pm.SendLocalizedMessage( 1063037, Guild.AbbrevLimit.ToString() ); // An abbreviation cannot exceed ~1_val~ characters in length. + else if( Guild.FindByAbbrev( guildAbbrev ) != null || !BaseGuildGump.CheckProfanity( guildAbbrev ) ) + pm.SendLocalizedMessage( 501153 ); // That abbreviation is not available. + else if( Guild.FindByName( guildName ) != null || !BaseGuildGump.CheckProfanity( guildName ) ) + pm.SendLocalizedMessage( 1063000 ); // That guild name is not available. + else if( !Innkeeper.Withdraw( pm, Guild.RegistrationFee ) ) + pm.SendLocalizedMessage( 1063001, Guild.RegistrationFee.ToString() ); // You do not possess the ~1_val~ gold piece fee required to create a guild. + else + { + pm.SendLocalizedMessage( 1060398, Guild.RegistrationFee.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your inn chest. + pm.SendLocalizedMessage( 1063238 ); // Your new guild has been founded. + pm.Guild = new Guild( pm, guildName, guildAbbrev ); + } + + break; + } + case 2: + { + pm.AcceptGuildInvites = !pm.AcceptGuildInvites; + + if( pm.AcceptGuildInvites ) + pm.SendLocalizedMessage( 1070699 ); // You are now accepting guild invitations. + else + pm.SendLocalizedMessage( 1070698 ); // You are now ignoring guild invitations. + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/DiplomacyGump.cs b/Scripts/Engines/Guilds/New Guild System/DiplomacyGump.cs new file mode 100644 index 0000000..4b93127 --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/DiplomacyGump.cs @@ -0,0 +1,291 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Guilds +{ + public enum GuildDisplayType + { + All, + AwaitingAction, + Relations + } + + public class GuildDiplomacyGump : BaseGuildListGump + { + protected virtual bool AllowAdvancedSearch{ get{ return true; } } + #region Comparers + private class NameComparer : IComparer + { + public static readonly IComparer Instance = new NameComparer(); + + public NameComparer() + { + } + + public int Compare( Guild x, Guild y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + return Insensitive.Compare( x.Name, y.Name ); + } + } + + private class StatusComparer : IComparer + { + private enum GuildCompareStatus + { + Peace, + Ally, + War + } + private Guild m_Guild; + public StatusComparer( Guild g ) + { + m_Guild = g; + } + + public int Compare( Guild x, Guild y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + GuildCompareStatus aStatus = GuildCompareStatus.Peace; + GuildCompareStatus bStatus = GuildCompareStatus.Peace; + + if( m_Guild.IsAlly( x ) ) + aStatus = GuildCompareStatus.Ally; + else if( m_Guild.IsWar( x ) ) + aStatus = GuildCompareStatus.War; + + + if( m_Guild.IsAlly( y ) ) + bStatus = GuildCompareStatus.Ally; + else if( m_Guild.IsWar( y ) ) + bStatus = GuildCompareStatus.War; + + return ((int)aStatus).CompareTo( (int)bStatus ); + } + } + private class AbbrevComparer : IComparer + { + public static readonly IComparer Instance = new AbbrevComparer(); + + public AbbrevComparer() + { + } + + public int Compare( Guild x, Guild y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + return Insensitive.Compare( x.Abbreviation, y.Abbreviation ); + } + } + + #endregion + + GuildDisplayType m_Display; + TextDefinition m_LowerText; + + public GuildDiplomacyGump( PlayerMobile pm, Guild g ) + : this( pm, g, GuildDiplomacyGump.NameComparer.Instance, true, "", 0, GuildDisplayType.All, Utility.CastConvertList( new List( Guild.List.Values ) ), (1063136 + (int)GuildDisplayType.All) ) + { + } + + public GuildDiplomacyGump( PlayerMobile pm, Guild g, IComparer currentComparer, bool ascending, string filter, int startNumber, GuildDisplayType display ) + : this( pm, g, currentComparer, ascending, filter, startNumber, display, Utility.CastConvertList( new List( Guild.List.Values ) ), (1063136 + (int)display) ) + { + } + + public GuildDiplomacyGump( PlayerMobile pm, Guild g, IComparer currentComparer, bool ascending, string filter, int startNumber, List list, TextDefinition lowerText ) + : this( pm, g, currentComparer, ascending, filter, startNumber, GuildDisplayType.All, list, lowerText ) + { + } + + public GuildDiplomacyGump( PlayerMobile pm, Guild g, bool ascending, string filter, int startNumber, List list, TextDefinition lowerText ) + : this( pm, g, GuildDiplomacyGump.NameComparer.Instance, ascending, filter, startNumber, GuildDisplayType.All, list, lowerText ) + { + } + + public GuildDiplomacyGump( PlayerMobile pm, Guild g, IComparer currentComparer, bool ascending, string filter, int startNumber, GuildDisplayType display, List list, TextDefinition lowerText ) + : base( pm, g, list, currentComparer, ascending, filter, startNumber, + new InfoField[] + { + new InfoField( 1062954, 280, GuildDiplomacyGump.NameComparer.Instance ), //Guild Name + new InfoField( 1062957, 50, GuildDiplomacyGump.AbbrevComparer.Instance ), //Abbrev + new InfoField( 1062958, 120, new GuildDiplomacyGump.StatusComparer( g ) ) //Guild Title + }) + { + + m_Display = display; + m_LowerText = lowerText; + PopulateGump(); + } + + public override void PopulateGump() + { + base.PopulateGump(); + + AddHtmlLocalized( 431, 43, 110, 26, 1062978, 0xF, false, false ); // Diplomacy + } + + protected override TextDefinition[] GetValuesFor( Guild g, int aryLength ) + { + TextDefinition[] defs = new TextDefinition[aryLength]; + + defs[0] = ( g == guild ) ? Color( g.Name, 0x006600 ) : g.Name; + defs[1] = g.Abbreviation; + + defs[2] = 3000085; //Peace + + + if( guild.IsAlly( g ) ) + { + if( guild.Alliance.Leader == g ) + defs[2] = 1063237; // Alliance Leader + else + defs[2] = 1062964; // Ally + } + else if( guild.IsWar( g ) ) + { + defs[2] = 3000086; // War + } + + return defs; + } + + public override bool HasRelationship( Guild g ) + { + if( g == guild ) + return false; + + if( guild.FindPendingWar( g ) != null ) + return true; + + AllianceInfo alliance = guild.Alliance; + + if( alliance != null ) + { + Guild leader = alliance.Leader; + + if ( leader != null ) + { + if ( guild == leader && alliance.IsPendingMember( g ) || g == leader && alliance.IsPendingMember( guild ) ) + return true; + } + else if ( alliance.IsPendingMember( g ) ) + return true; + } + + return false; + } + + public override void DrawEndingEntry( int itemNumber ) + { + //AddHtmlLocalized( 66, 153 + itemNumber * 28, 280, 26, 1063136 + (int)m_Display, 0xF, false, false ); // Showing All Guilds/Awaiting Action/ w/Relation Ship + //AddHtmlText( 66, 153 + itemNumber * 28, 280, 26, m_LowerText, false, false ); + + if ( m_LowerText != null && m_LowerText.Number > 0 ) + AddHtmlLocalized( 66, 153 + itemNumber * 28, 280, 26, m_LowerText.Number, 0xF, false, false ); + else if ( m_LowerText != null && m_LowerText.String != null ) + AddHtml( 66, 153 + itemNumber * 28, 280, 26, Color( m_LowerText.String, 0x99 ), false, false ); + + if( AllowAdvancedSearch ) + { + AddBackground( 350, 148 + itemNumber * 28, 200, 26, 0x2486 ); + AddButton( 355, 153 + itemNumber * 28, 0x845, 0x846, 8, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 380, 151 + itemNumber * 28, 160, 26, 1063083, 0x0, false, false ); // Advanced Search + } + } + + + protected override bool IsFiltered( Guild g, string filter ) + { + if( g == null ) + return true; + + switch( m_Display ) + { + case GuildDisplayType.Relations: + { + //if( !( guild.IsWar( g ) || guild.IsAlly( g ) ) ) + + if( !( guild.FindActiveWar( g ) != null || guild.IsAlly( g ) ) ) //As per OSI, only the guild leader wars show up under the sorting by relation + return true; + + return false; + } + case GuildDisplayType.AwaitingAction: + { + return !HasRelationship( g ); + } + } + + return !( Insensitive.Contains( g.Name, filter ) || Insensitive.Contains( g.Abbreviation, filter ) ); + } + + public override bool WillFilter + { + get + { + if( m_Display == GuildDisplayType.All ) + return base.WillFilter; + + return true; + } + } + + + public override Gump GetResentGump( PlayerMobile pm, Guild g, IComparer comparer, bool ascending, string filter, int startNumber ) + { + return new GuildDiplomacyGump( pm, g, comparer, ascending, filter, startNumber, m_Display ); + } + + public override Gump GetObjectInfoGump( PlayerMobile pm, Guild g, Guild o ) + { + if( guild == o ) + return new GuildInfoGump( pm, g ); + + return new OtherGuildInfo( pm, g, (Guild)o ) ; + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + base.OnResponse( sender, info ); + + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( pm == null || !IsMember( pm, guild ) ) + return; + + if( AllowAdvancedSearch && info.ButtonID == 8 ) + pm.SendGump( new GuildAdvancedSearchGump( pm, guild, m_Display, new SearchSelectionCallback( AdvancedSearch_Callback ) )); + + } + + public void AdvancedSearch_Callback( GuildDisplayType display ) + { + m_Display = display; + ResendGump(); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/GuildInfoGump.cs b/Scripts/Engines/Guilds/New Guild System/GuildInfoGump.cs new file mode 100644 index 0000000..acc26fd --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/GuildInfoGump.cs @@ -0,0 +1,165 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Gumps; +using Server.Network; +using Server.Prompts; + +namespace Server.Guilds +{ + public class GuildInfoGump : BaseGuildGump + { + private bool m_IsResigning; + + public GuildInfoGump( PlayerMobile pm, Guild g ) : this( pm, g, false ) + { + } + public GuildInfoGump( PlayerMobile pm, Guild g, bool isResigning ) : base( pm, g ) + { + m_IsResigning = isResigning; + PopulateGump(); + } + + public override void PopulateGump() + { + bool isLeader = IsLeader( player, guild ); + base.PopulateGump(); + + AddHtmlLocalized( 96, 43, 110, 26, 1063014, 0xF, false, false ); // My Guild + + AddImageTiled( 65, 80, 160, 26, 0xA40 ); + AddImageTiled( 67, 82, 156, 22, 0xBBC ); + AddHtmlLocalized( 70, 83, 150, 20, 1062954, 0x0, false, false ); // Guild Name + AddHtml( 233, 84, 320, 26, guild.Name, false, false ); + + AddImageTiled( 65, 114, 160, 26, 0xA40 ); + AddImageTiled( 67, 116, 156, 22, 0xBBC ); + AddHtmlLocalized( 70, 117, 150, 20, 1063025, 0x0, false, false ); // Alliance + + if( guild.Alliance != null && guild.Alliance.IsMember( guild ) ) + { + AddHtml( 233, 118, 320, 26, guild.Alliance.Name, false, false ); + AddButton( 40, 120, 0x4B9, 0x4BA, 6, GumpButtonType.Reply, 0 ); //Alliance Roster + } + + AddImageTiled( 65, 196, 480, 4, 0x238D ); + + string s = guild.Charter; + if( String.IsNullOrEmpty( s ) ) + s = "The guild leader has not yet set the guild charter."; + + AddHtml( 65, 216, 480, 80, s, true, true ); + if( isLeader ) + AddButton( 40, 251, 0x4B9, 0x4BA, 4, GumpButtonType.Reply, 0 ); //Charter Edit button + + s = guild.Website; + if( string.IsNullOrEmpty( s ) ) + s = "Guild website not yet set."; + AddHtml( 65, 306, 480, 30, s, true, false ); + if( isLeader ) + AddButton( 40, 313, 0x4B9, 0x4BA, 5, GumpButtonType.Reply, 0 ); //Website Edit button + + AddCheck( 65, 370, 0xD2, 0xD3, player.DisplayGuildTitle, 0 ); + AddHtmlLocalized( 95, 370, 150, 26, 1063085, 0x0, false, false ); // Show Guild Title + AddBackground( 450, 370, 100, 26, 0x2486 ); + + AddButton( 455, 375, 0x845, 0x846, 7, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 480, 373, 60, 26, 3006115, (m_IsResigning) ? 0x5000 : 0, false, false ); // Resign + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + base.OnResponse( sender, info ); + + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( !IsMember( pm, guild ) ) + return; + + + pm.DisplayGuildTitle = info.IsSwitched( 0 ); + + switch( info.ButtonID ) + { + //1-3 handled by base.OnResponse + case 4: + { + if( IsLeader( pm, guild ) ) + { + pm.SendLocalizedMessage( 1013071 ); // Enter the new guild charter (50 characters max): + + pm.BeginPrompt( new PromptCallback( SetCharter_Callback ), true ); //Have the same callback handle both canceling and deletion cause the 2nd callback would just get a text of "" + } + break; + } + case 5: + { + if( IsLeader( pm, guild ) ) + { + pm.SendLocalizedMessage( 1013072 ); // Enter the new website for the guild (50 characters max): + pm.BeginPrompt( new PromptCallback( SetWebsite_Callback ), true ); //Have the same callback handle both canceling and deletion cause the 2nd callback would just get a text of "" + } + break; + } + case 6: + { + //Alliance Roster + if( guild.Alliance != null && guild.Alliance.IsMember( guild ) ) + pm.SendGump( new AllianceInfo.AllianceRosterGump( pm, guild, guild.Alliance ) ); + + break; + } + case 7: + { + //Resign + if( !m_IsResigning ) + { + pm.SendLocalizedMessage( 1063332 ); // Are you sure you wish to resign from your guild? + pm.SendGump( new GuildInfoGump( pm, guild, true ) ); + } + else + { + guild.RemoveMember( pm, 1063411 ); // You resign from your guild. + } + break; + } + } + } + + public void SetCharter_Callback( Mobile from, string text ) + { + if( !IsLeader( from, guild ) ) + return; + + string charter = Utility.FixHtml( text.Trim() ); + + if( charter.Length > 50 ) + { + from.SendLocalizedMessage( 1070774, "50" ); // Your guild charter cannot exceed ~1_val~ characters. + } + else + { + guild.Charter = charter; + from.SendLocalizedMessage( 1070775 ); // You submit a new guild charter. + return; + } + } + + public void SetWebsite_Callback( Mobile from, string text ) + { + if( !IsLeader( from, guild ) ) + return; + + string site = Utility.FixHtml( text.Trim() ); + + if( site.Length > 50 ) + from.SendLocalizedMessage( 1070777, "50" ); // Your guild website cannot exceed ~1_val~ characters. + else + { + guild.Website = site; + from.SendLocalizedMessage( 1070778 ); // You submit a new guild website. + return; + } + } + } +} diff --git a/Scripts/Engines/Guilds/New Guild System/GuildInvitationRequest.cs b/Scripts/Engines/Guilds/New Guild System/GuildInvitationRequest.cs new file mode 100644 index 0000000..6653f20 --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/GuildInvitationRequest.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; + +namespace Server.Guilds +{ + public class GuildInvitationRequest : BaseGuildGump + { + PlayerMobile m_Inviter; + public GuildInvitationRequest( PlayerMobile pm, Guild g, PlayerMobile inviter ) : base( pm, g ) + { + m_Inviter = inviter; + + PopulateGump(); + } + + public override void PopulateGump() + { + AddPage( 0 ); + + AddBackground( 0, 0, 350, 170, 0x2422 ); + AddHtmlLocalized( 25, 20, 300, 45, 1062946, 0x0, true, false ); //
You have been invited to join a guild! (Warning: Accepting will make you attackable!)
+ AddHtml( 25, 75, 300, 25, String.Format( "
{0}
", guild.Name ), true, false ); + AddButton( 265, 130, 0xF7, 0xF8, 1, GumpButtonType.Reply, 0 ); + AddButton( 195, 130, 0xF2, 0xF1, 0, GumpButtonType.Reply, 0 ); + AddButton( 20, 130, 0xD2, 0xD3, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 130, 150, 30, 1062943, 0x0, false, false ); // Ignore Guild Invites + } + + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if( guild.Disbanded || player.Guild != null ) + return; + + switch( info.ButtonID ) + { + case 0: + { + m_Inviter.SendLocalizedMessage( 1063250, String.Format( "{0}\t{1}", player.Name, guild.Name ) ); // ~1_val~ has declined your invitation to join ~2_val~. + break; + } + case 1: + { + guild.AddMember( player ); + player.SendLocalizedMessage( 1063056, guild.Name ); // You have joined ~1_val~. + m_Inviter.SendLocalizedMessage( 1063249, String.Format( "{0}\t{1}", player.Name, guild.Name ) ); // ~1_val~ has accepted your invitation to join ~2_val~. + + break; + } + case 2: + { + player.AcceptGuildInvites = false; + player.SendLocalizedMessage( 1070698 ); // You are now ignoring guild invitations. + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/GuildMemberInfoGump.cs b/Scripts/Engines/Guilds/New Guild System/GuildMemberInfoGump.cs new file mode 100644 index 0000000..d0c7f1d --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/GuildMemberInfoGump.cs @@ -0,0 +1,231 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; +using Server.Targeting; +using Server.Prompts; + +namespace Server.Guilds +{ + public class GuildMemberInfoGump : BaseGuildGump + { + PlayerMobile m_Member; + bool m_ToLeader, m_toKick; + + public GuildMemberInfoGump( PlayerMobile pm, Guild g, PlayerMobile member, bool toKick, bool toPromoteToLeader ) : base( pm, g, 10, 40 ) + { + m_ToLeader = toPromoteToLeader; + m_toKick = toKick; + m_Member = member; + PopulateGump(); + } + + public override void PopulateGump() + { + AddPage( 0 ); + + AddBackground( 0, 0, 350, 255, 0x242C ); + AddHtmlLocalized( 20, 15, 310, 26, 1063018, 0x0, false, false ); //
Guild Member Information
+ AddImageTiled( 20, 40, 310, 2, 0x2711 ); + + AddHtmlLocalized( 20, 50, 150, 26, 1062955, 0x0, true, false ); // Name + AddHtml( 180, 53, 150, 26, m_Member.Name, false, false ); + + AddHtmlLocalized( 20, 80, 150, 26, 1062956, 0x0, true, false ); // Rank + AddHtmlLocalized( 180, 83, 150, 26, m_Member.GuildRank.Name, 0x0, false, false ); + + AddHtmlLocalized( 20, 110, 150, 26, 1062953, 0x0, true, false ); // Guild Title + AddHtml( 180, 113, 150, 26, m_Member.GuildTitle, false, false ); + AddImageTiled( 20, 142, 310, 2, 0x2711 ); + + AddBackground( 20, 150, 310, 26, 0x2486 ); + AddButton( 25, 155, 0x845, 0x846, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 153, 270, 26, (m_Member == player.GuildFealty && guild.Leader != m_Member) ? 1063082 : 1062996, 0x0, false, false ); // Clear/Cast Vote For This Member + + AddBackground( 20, 180, 150, 26, 0x2486 ); + AddButton( 25, 185, 0x845, 0x846, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 183, 110, 26, 1062993, (m_ToLeader)? 0x990000 : 0, false, false ); // Promote + + AddBackground( 180, 180, 150, 26, 0x2486 ); + AddButton( 185, 185, 0x845, 0x846, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 210, 183, 110, 26, 1062995, 0x0, false, false ); // Set Guild Title + + AddBackground( 20, 210, 150, 26, 0x2486 ); + AddButton( 25, 215, 0x845, 0x846, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 213, 110, 26, 1062994, 0x0, false, false ); // Demote + + AddBackground( 180, 210, 150, 26, 0x2486 ); + AddButton( 185, 215, 0x845, 0x846, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 210, 213, 110, 26, 1062997, (m_toKick)? 0x5000 : 0, false, false ); // Kick + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( pm == null || !IsMember( pm, guild ) || !IsMember( m_Member, guild ) ) + return; + + RankDefinition playerRank = pm.GuildRank; + RankDefinition targetRank = m_Member.GuildRank; + + switch( info.ButtonID ) + { + case 1: //Promote + { + if( playerRank.GetFlag( RankFlags.CanPromoteDemote ) && ((playerRank.Rank -1 ) > targetRank.Rank || ( playerRank == RankDefinition.Leader && playerRank.Rank > targetRank.Rank )) ) + { + targetRank = RankDefinition.Ranks[targetRank.Rank + 1]; + + if( targetRank == RankDefinition.Leader ) + { + if( m_ToLeader ) + { + m_Member.GuildRank = targetRank; + pm.SendLocalizedMessage( 1063156, m_Member.Name ); // The guild information for ~1_val~ has been updated. + pm.SendLocalizedMessage( 1063156, pm.Name ); // The guild information for ~1_val~ has been updated. + guild.Leader = m_Member; + } + else + { + pm.SendLocalizedMessage( 1063144 ); // Are you sure you wish to make this member the new guild leader? + pm.SendGump( new GuildMemberInfoGump( player, guild, m_Member, false, true ) ); + } + } + else + { + m_Member.GuildRank = targetRank; + pm.SendLocalizedMessage( 1063156, m_Member.Name ); // The guild information for ~1_val~ has been updated. + } + } + else + pm.SendLocalizedMessage( 1063143 ); // You don't have permission to promote this member. + + break; + } + case 2: //Demote + { + if( playerRank.GetFlag( RankFlags.CanPromoteDemote ) && playerRank.Rank > targetRank.Rank ) + { + if( targetRank == RankDefinition.Lowest ) + { + if( RankDefinition.Lowest.Name.Number == 1062963 ) + pm.SendLocalizedMessage( 1063333 ); // You can't demote a ronin. + else + pm.SendMessage( "You can't demote a {0}.", RankDefinition.Lowest.Name ); + } + else + { + m_Member.GuildRank = RankDefinition.Ranks[targetRank.Rank - 1]; + pm.SendLocalizedMessage( 1063156, m_Member.Name ); // The guild information for ~1_val~ has been updated. + } + } + else + pm.SendLocalizedMessage( 1063146 ); // You don't have permission to demote this member. + + + break; + } + case 3: //Set Guild title + { + if( playerRank.GetFlag( RankFlags.CanSetGuildTitle ) && ( playerRank.Rank > targetRank.Rank || m_Member == player)) + { + pm.SendLocalizedMessage( 1011128 ); // Enter the new title for this guild member or 'none' to remove a title: + + pm.BeginPrompt( new PromptCallback( SetTitle_Callback ) ); + } + else if( m_Member.GuildTitle == null || m_Member.GuildTitle.Length <= 0 ) + { + pm.SendLocalizedMessage( 1070746 ); // You don't have the permission to set that member's guild title. + } + else + { + pm.SendLocalizedMessage( 1063148 ); // You don't have permission to change this member's guild title. + } + + break; + } + case 4: //Vote + { + if( m_Member == pm.GuildFealty && guild.Leader != m_Member ) + pm.SendLocalizedMessage( 1063158 ); // You have cleared your vote for guild leader. + else if( guild.CanVote( m_Member ) )//( playerRank.GetFlag( RankFlags.CanVote ) ) + { + if( m_Member == guild.Leader ) + pm.SendLocalizedMessage( 1063424 ); // You can't vote for the current guild leader. + else if( !guild.CanBeVotedFor( m_Member ) ) + pm.SendLocalizedMessage( 1063425 ); // You can't vote for an inactive guild member. + else + { + pm.GuildFealty = m_Member; + pm.SendLocalizedMessage( 1063159, m_Member.Name ); // You cast your vote for ~1_val~ for guild leader. + } + } + else + pm.SendLocalizedMessage( 1063149 ); // You don't have permission to vote. + + break; + } + case 5: //Kick + { + if( ( playerRank.GetFlag( RankFlags.RemovePlayers ) && playerRank.Rank > targetRank.Rank ) || ( playerRank.GetFlag( RankFlags.RemoveLowestRank ) && targetRank == RankDefinition.Lowest ) ) + { + if( m_toKick ) + { + guild.RemoveMember( m_Member ); + pm.SendLocalizedMessage( 1063157 ); // The member has been removed from your guild. + } + else + { + pm.SendLocalizedMessage( 1063152 ); // Are you sure you wish to kick this member from the guild? + pm.SendGump( new GuildMemberInfoGump( player, guild, m_Member, true, false ) ); + } + } + else + pm.SendLocalizedMessage( 1063151 ); // You don't have permission to remove this member. + + break; + } + } + } + + public void SetTitle_Callback( Mobile from, string text ) + { + PlayerMobile pm = from as PlayerMobile; + PlayerMobile targ = m_Member; + + if( pm == null || targ == null ) + return; + + Guild g = targ.Guild as Guild; + + if( g == null || !IsMember( pm, g ) || !(pm.GuildRank.GetFlag( RankFlags.CanSetGuildTitle ) && (pm.GuildRank.Rank > targ.GuildRank.Rank || pm == targ)) ) + { + if( m_Member.GuildTitle == null || m_Member.GuildTitle.Length <= 0 ) + pm.SendLocalizedMessage( 1070746 ); // You don't have the permission to set that member's guild title. + else + pm.SendLocalizedMessage( 1063148 ); // You don't have permission to change this member's guild title. + + return; + } + + + string title = Utility.FixHtml( text.Trim() ); + + if( title.Length > 20 ) + from.SendLocalizedMessage( 501178 ); // That title is too long. + else if( !BaseGuildGump.CheckProfanity( title ) ) + from.SendLocalizedMessage( 501179 ); // That title is disallowed. + else + { + if( Insensitive.Equals( title, "none" ) ) + targ.GuildTitle = null; + else + targ.GuildTitle = title; + + pm.SendLocalizedMessage( 1063156, targ.Name ); // The guild information for ~1_val~ has been updated. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/GuildRosterGump.cs b/Scripts/Engines/Guilds/New Guild System/GuildRosterGump.cs new file mode 100644 index 0000000..13f68dc --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/GuildRosterGump.cs @@ -0,0 +1,239 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; +using System.Collections; +using Server.Targets; +using System.Collections.Generic; + +namespace Server.Guilds +{ + public class GuildRosterGump : BaseGuildListGump + { + #region Comparers + private class NameComparer : IComparer + { + public static readonly IComparer Instance = new NameComparer(); + + public NameComparer() + { + } + + public int Compare( PlayerMobile x, PlayerMobile y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + return Insensitive.Compare( x.Name, y.Name ); + } + } + + private class LastOnComparer : IComparer + { + public static readonly IComparer Instance = new LastOnComparer(); + + public LastOnComparer() + { + } + + public int Compare( PlayerMobile x, PlayerMobile y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + NetState aState = x.NetState; + NetState bState = y.NetState; + + if ( aState == null && bState == null ) + return x.LastOnline.CompareTo( y.LastOnline ); + else if ( aState == null ) + return 1; + else if ( bState == null ) + return -1; + else + return 0; + } + } + private class TitleComparer : IComparer + { + public static readonly IComparer Instance = new TitleComparer(); + + public TitleComparer() + { + } + + public int Compare( PlayerMobile x, PlayerMobile y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + return Insensitive.Compare( x.GuildTitle, y.GuildTitle ); + } + } + + private class RankComparer : IComparer + { + public static readonly IComparer Instance = new RankComparer(); + + public RankComparer() + { + } + + public int Compare( PlayerMobile x, PlayerMobile y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + return x.GuildRank.Rank.CompareTo( y.GuildRank.Rank ); + } + } + + #endregion + + private static InfoField[] m_Fields = + new InfoField[] + { + new InfoField( 1062955, 130, GuildRosterGump.NameComparer.Instance ), //Name + new InfoField( 1062956, 80, GuildRosterGump.RankComparer.Instance ), //Rank + new InfoField( 1062952, 80, GuildRosterGump.LastOnComparer.Instance), //Last On + new InfoField( 1062953, 150, GuildRosterGump.TitleComparer.Instance ) //Guild Title + }; + + public GuildRosterGump( PlayerMobile pm, Guild g ) : this( pm, g, GuildRosterGump.LastOnComparer.Instance, true, "", 0 ) + { + } + + public GuildRosterGump( PlayerMobile pm, Guild g, IComparer currentComparer, bool ascending, string filter, int startNumber ) + : base( pm, g, Utility.SafeConvertList( g.Members ), currentComparer, ascending, filter, startNumber, m_Fields ) + { + PopulateGump(); + } + + public override void PopulateGump() + { + base.PopulateGump(); + + AddHtmlLocalized( 266, 43, 110, 26, 1062974, 0xF, false, false ); // Guild Roster + } + + public override void DrawEndingEntry( int itemNumber ) + { + AddBackground( 225, 148 + itemNumber * 28, 150, 26, 0x2486 ); + AddButton( 230, 153 + itemNumber * 28, 0x845, 0x846, 8, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 255, 151 + itemNumber * 28, 110, 26, 1062992, 0x0, false, false ); // Invite Player + } + + protected override TextDefinition[] GetValuesFor( PlayerMobile pm, int aryLength ) + { + TextDefinition[] defs = new TextDefinition[aryLength]; + + string name = String.Format( "{0}{1}", pm.Name, ( player.GuildFealty == pm && player.GuildFealty != guild.Leader ) ? " *" : "" ); + + if( pm == player ) + name = Color( name, 0x006600 ); + else if( pm.NetState != null ) + name = Color( name, 0x000066 ); + + defs[0] = name; + defs[1] = pm.GuildRank.Name; + defs[2] = (pm.NetState != null) ? new TextDefinition( 1063015 ): new TextDefinition( pm.LastOnline.ToString( "yyyy-MM-dd" ) ); + defs[3] = (pm.GuildTitle == null) ? "" : pm.GuildTitle; + + return defs; + } + + protected override bool IsFiltered( PlayerMobile pm, string filter ) + { + if( pm == null ) + return true; + + return !Insensitive.Contains( pm.Name, filter ); + } + + public override Gump GetResentGump( PlayerMobile pm, Guild g, IComparer comparer, bool ascending, string filter, int startNumber ) + { + return new GuildRosterGump( pm, g, comparer, ascending, filter, startNumber ); + } + + public override Gump GetObjectInfoGump( PlayerMobile pm, Guild g, PlayerMobile o ) + { + return new GuildMemberInfoGump( pm, g, o, false, false ) ; + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + base.OnResponse( sender, info ); + + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( pm == null || !IsMember( pm, guild ) ) + return; + + if( info.ButtonID == 8 ) + { + if( pm.GuildRank.GetFlag( RankFlags.CanInvitePlayer ) ) + { + pm.SendLocalizedMessage( 1063048 ); // Whom do you wish to invite into your guild? + pm.BeginTarget( -1, false, Targeting.TargetFlags.None, new TargetStateCallback( InvitePlayer_Callback ), guild ); + } + else + pm.SendLocalizedMessage( 503301 ); // You don't have permission to do that. + } + } + + public void InvitePlayer_Callback( Mobile from, object targeted, object state ) + { + PlayerMobile pm = from as PlayerMobile; + PlayerMobile targ = targeted as PlayerMobile; + + Guild g = state as Guild; + + if( pm == null || !IsMember( pm, guild ) || !pm.GuildRank.GetFlag( RankFlags.CanInvitePlayer ) ) + { + pm.SendLocalizedMessage( 503301 ); // You don't have permission to do that. + } + else if( targ == null ) + { + pm.SendLocalizedMessage( 1063334 ); // That isn't a valid player. + } + else if( !targ.AcceptGuildInvites ) + { + pm.SendLocalizedMessage( 1063049, targ.Name ); // ~1_val~ is not accepting guild invitations. + } + else if( g.IsMember( targ ) ) + { + pm.SendLocalizedMessage( 1063050, targ.Name ); // ~1_val~ is already a member of your guild! + } + else if( targ.Guild != null ) + { + pm.SendLocalizedMessage( 1063051, targ.Name ); // ~1_val~ is already a member of a guild. + } + else if( targ.HasGump( typeof( BaseGuildGump ) ) || targ.HasGump( typeof( CreateGuildGump ) )) //TODO: Check message if CreateGuildGump Open + { + pm.SendLocalizedMessage( 1063052, targ.Name ); // ~1_val~ is currently considering another guild invitation. + } + else + { + pm.SendLocalizedMessage( 1063053, targ.Name ); // You invite ~1_val~ to join your guild. + targ.SendGump( new GuildInvitationRequest( targ, guild, pm ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/OtherGuildInfo.cs b/Scripts/Engines/Guilds/New Guild System/OtherGuildInfo.cs new file mode 100644 index 0000000..83f6f77 --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/OtherGuildInfo.cs @@ -0,0 +1,622 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Gumps; +using Server.Network; +using Server.Prompts; + +namespace Server.Guilds +{ + public class OtherGuildInfo : BaseGuildGump + { + private Guild m_Other; + public OtherGuildInfo( PlayerMobile pm, Guild g, Guild otherGuild ) : base( pm, g, 10, 40 ) + { + m_Other = otherGuild; + + g.CheckExpiredWars(); + + PopulateGump(); + } + + public void AddButtonAndBackground( int x, int y, int buttonID, int locNum ) + { + AddBackground( x, y, 225, 26, 0x2486 ); + AddButton( x+5, y+5, 0x845, 0x846, buttonID, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( x+30, y+3, 185, 26, locNum, 0x0, false, false ); + } + + public override void PopulateGump() + { + Guild g = Guild.GetAllianceLeader( guild ); + Guild other = Guild.GetAllianceLeader( m_Other ); + + WarDeclaration war = g.FindPendingWar( other ); + WarDeclaration activeWar = g.FindActiveWar( other ); + + AllianceInfo alliance = guild.Alliance; + AllianceInfo otherAlliance = m_Other.Alliance; + //NOTE TO SELF: Only only alliance leader can see pending guild alliance statuses + + bool PendingWar = (war != null); + bool ActiveWar = (activeWar != null); + AddPage( 0 ); + + AddBackground( 0, 0, 520, 335, 0x242C ); + AddHtmlLocalized( 20, 15, 480, 26, 1062975, 0x0, false, false ); //
Guild Relationship
+ AddImageTiled( 20, 40, 480, 2, 0x2711 ); + AddHtmlLocalized( 20, 50, 120, 26, 1062954, 0x0, true, false ); // Guild Name + AddHtml( 150, 53, 360, 26, m_Other.Name, false, false ); + + AddHtmlLocalized( 20, 80, 120, 26, 1063025, 0x0, true, false ); // Alliance + + if( otherAlliance != null ) + { + if( otherAlliance.IsMember( m_Other )) + { + AddHtml( 150, 83, 360, 26, otherAlliance.Name, false, false ); + } + //else if( otherAlliance.Leader == guild && ( otherAlliance.IsPendingMember( m_Other ) || otherAlliance.IsPendingMember( guild ) ) ) + /* else if( (otherAlliance.Leader == guild && otherAlliance.IsPendingMember( m_Other ) ) || ( otherAlliance.Leader == m_Other && otherAlliance.IsPendingMember( guild ) ) ) + { + AddHtml( 150, 83, 360, 26, Color( alliance.Name, 0xF), false, false ); + } + //AddHtml( 150, 83, 360, 26, ( alliance.PendingMembers.Contains( guild ) || alliance.PendingMembers.Contains( m_Other ) ) ? String.Format( "{0}", alliance.Name ) : alliance.Name, false, false ); + //AddHtml( 150, 83, 360, 26, ( otherAlliance == alliance && otherAlliance.PendingMembers.Contains( guild ) || otherAlliance.PendingMembers.Contains( m_Other ) ) ? String.Format( "{0}", otherAlliance.Name ) : otherAlliance.Name, false, false ); + */ + } + + AddHtmlLocalized( 20, 110, 120, 26, 1063139, 0x0, true, false ); // Abbreviation + AddHtml( 150, 113, 120, 26, m_Other.Abbreviation, false, false ); + + + string kills = "0/0"; + string time = "00:00"; + string otherKills = "0/0"; + + WarDeclaration otherWar; + + if( ActiveWar ) + { + kills = String.Format( "{0}/{1}", activeWar.Kills, activeWar.MaxKills ); + + TimeSpan timeRemaining = TimeSpan.Zero; + + if( activeWar.WarLength != TimeSpan.Zero && (activeWar.WarBeginning + activeWar.WarLength) > DateTime.Now ) + timeRemaining = (activeWar.WarBeginning + activeWar.WarLength) - DateTime.Now; + + //time = String.Format( "{0:D2}:{1:D2}", timeRemaining.Hours.ToString(), timeRemaining.Subtract( TimeSpan.FromHours( timeRemaining.Hours ) ).Minutes ); //Is there a formatter for htis? it's 2AM and I'm tired and can't find it + time = String.Format( "{0:D2}:{1:mm}", timeRemaining.Hours, DateTime.MinValue + timeRemaining ); + + otherWar = m_Other.FindActiveWar( guild ); + if( otherWar != null ) + otherKills = String.Format( "{0}/{1}", otherWar.Kills, otherWar.MaxKills ); + } + else if( PendingWar ) + { + kills = Color( String.Format( "{0}/{1}", war.Kills, war.MaxKills ), 0x990000 ); + //time = Color( String.Format( "{0}:{1}", war.WarLength.Hours, ((TimeSpan)(war.WarLength - TimeSpan.FromHours( war.WarLength.Hours ))).Minutes ), 0xFF0000 ); + time = Color( String.Format( "{0:D2}:{1:mm}", war.WarLength.Hours, DateTime.MinValue + war.WarLength ), 0x990000 ); + + otherWar = m_Other.FindPendingWar( guild ); + if( otherWar != null ) + otherKills = Color( String.Format( "{0}/{1}", otherWar.Kills, otherWar.MaxKills ), 0x990000 ); + } + + AddHtmlLocalized( 280, 110, 120, 26, 1062966, 0x0, true, false ); // Your Kills + AddHtml( 410, 113, 120, 26, kills , false, false ); + + AddHtmlLocalized( 20, 140, 120, 26, 1062968, 0x0, true, false ); // Time Remaining + AddHtml( 150, 143, 120, 26, time, false, false ); + + AddHtmlLocalized( 280, 140, 120, 26, 1062967, 0x0, true, false ); // Their Kills + AddHtml( 410, 143, 120, 26, otherKills, false, false ); + + AddImageTiled( 20, 172, 480, 2, 0x2711 ); + + int number = 1062973;//
You are at peace with this guild.
+ + + if( PendingWar ) + { + if( war.WarRequester ) + { + number = 1063027; //
You have challenged this guild to war!
+ } + else + { + number = 1062969; //
This guild has challenged you to war!
+ + AddButtonAndBackground( 20, 260, 5, 1062981 ); // Accept Challenge + AddButtonAndBackground( 275, 260, 6, 1062983 ); //Modify Terms + } + + AddButtonAndBackground( 20, 290, 7, 1062982 ); // Dismiss Challenge + } + else if( ActiveWar ) + { + number = 1062965; //
You are at war with this guild!
+ AddButtonAndBackground( 20, 290, 8, 1062980 ); // Surrender + } + else if ( alliance != null && alliance == otherAlliance ) //alliance, Same Alliance + { + if( alliance.IsMember( guild ) && alliance.IsMember( m_Other ) ) //Both in Same alliance, full members + { + number = 1062970; //
You are allied with this guild.
+ + if( alliance.Leader == guild ) + { + AddButtonAndBackground( 20, 260, 12, 1062984 ); // Remove Guild from Alliance + AddButtonAndBackground( 275, 260, 13, 1063433 ); // Promote to Alliance Leader //Note: No 'confirmation' like the other leader guild promotion things + //Remove guild from alliance //Promote to Alliance Leader + } + + //Show roster, Centered, up + AddButtonAndBackground( 148, 215, 10, 1063164 ); //Show Alliance Roster + //Leave Alliance + AddButtonAndBackground( 20, 290, 11, 1062985 ); // Leave Alliance + } + else if( alliance.Leader == guild && alliance.IsPendingMember( m_Other ) ) + { + number = 1062971; //
You have requested an alliance with this guild.
+ + //Show Alliance Roster, Centered, down. + AddButtonAndBackground( 148, 245, 10, 1063164 ); //Show Alliance Roster + //Withdraw Request + AddButtonAndBackground( 20, 290, 14, 1062986 ); // Withdraw Request + + AddHtml( 150, 83, 360, 26, Color( alliance.Name, 0x99 ), false, false ); + } + else if( alliance.Leader == m_Other && alliance.IsPendingMember( guild ) ) + { + number = 1062972; //
This guild has requested an alliance.
+ + //Show alliance Roster, top + AddButtonAndBackground( 148, 215, 10, 1063164 ); //Show Alliance Roster + //Deny Request + //Accept Request + AddButtonAndBackground( 20, 260, 15, 1062988 ); // Deny Request + AddButtonAndBackground( 20, 290, 16, 1062987 ); // Accept Request + + AddHtml( 150, 83, 360, 26, Color( alliance.Name, 0x99 ), false, false ); + } + } + else + { + AddButtonAndBackground( 20, 260, 2, 1062990 ); // Request Alliance + AddButtonAndBackground( 20, 290, 1, 1062989 ); // Declare War! + } + + AddButtonAndBackground( 275, 290, 0, 3000091 ); //Cancel + + AddHtmlLocalized( 20, 180, 480, 30, number, 0x0, true, false ); + AddImageTiled( 20, 245, 480, 2, 0x2711 ); + } + + + public override void OnResponse( NetState sender, RelayInfo info ) + { + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( !IsMember( pm, guild ) ) + return; + + RankDefinition playerRank = pm.GuildRank; + + Guild guildLeader = Guild.GetAllianceLeader( guild ); + Guild otherGuild = Guild.GetAllianceLeader( m_Other ); + + WarDeclaration war = guildLeader.FindPendingWar( otherGuild ); + WarDeclaration activeWar = guildLeader.FindActiveWar( otherGuild ); + WarDeclaration otherWar = otherGuild.FindPendingWar( guildLeader ); + + AllianceInfo alliance = guild.Alliance; + AllianceInfo otherAlliance = otherGuild.Alliance; + + switch( info.ButtonID ) + { + #region War + case 5: //Accept the war + { + if( war != null && !war.WarRequester && activeWar == null ) + { + if( !playerRank.GetFlag( RankFlags.ControlWarStatus ) ) + { + pm.SendLocalizedMessage( 1063440 ); // You don't have permission to negotiate wars. + } + else if( alliance != null && alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + pm.SendLocalizedMessage( 1070707, alliance.Leader.Name ); // You need to negotiate via ~1_val~ instead. + } + else + { + //Accept the war + guild.PendingWars.Remove( war ); + war.WarBeginning = DateTime.Now; + guild.AcceptedWars.Add( war ); + + if( alliance != null && alliance.IsMember( guild ) ) + { + alliance.AllianceMessage( 1070769, ((otherAlliance != null) ? otherAlliance.Name : otherGuild.Name) ); // Guild Message: Your guild is now at war with ~1_GUILDNAME~ + alliance.InvalidateMemberProperties(); + } + else + { + guild.GuildMessage( 1070769, ((otherAlliance != null) ? otherAlliance.Name : otherGuild.Name) ); // Guild Message: Your guild is now at war with ~1_GUILDNAME~ + guild.InvalidateMemberProperties(); + } + //Technically SHOULD say Your guild is now at war w/out any info, intentional diff. + + otherGuild.PendingWars.Remove( otherWar ); + otherWar.WarBeginning = DateTime.Now; + otherGuild.AcceptedWars.Add( otherWar ); + + if( otherAlliance != null && m_Other.Alliance.IsMember( m_Other ) ) + { + otherAlliance.AllianceMessage( 1070769, ((alliance != null) ? alliance.Name : guild.Name) ); // Guild Message: Your guild is now at war with ~1_GUILDNAME~ + otherAlliance.InvalidateMemberProperties(); + } + else + { + otherGuild.GuildMessage( 1070769, ((alliance != null) ? alliance.Name : guild.Name) ); // Guild Message: Your guild is now at war with ~1_GUILDNAME~ + otherGuild.InvalidateMemberProperties(); + } + } + } + + break; + } + case 6: //Modify war terms + { + if( war != null && !war.WarRequester && activeWar == null ) + { + if( !playerRank.GetFlag( RankFlags.ControlWarStatus ) ) + { + pm.SendLocalizedMessage( 1063440 ); // You don't have permission to negotiate wars. + } + else if( alliance != null && alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + pm.SendLocalizedMessage( 1070707, alliance.Leader.Name ); // You need to negotiate via ~1_val~ instead. + } + else + { + pm.SendGump( new WarDeclarationGump( pm, guild, otherGuild ) ); + } + } + break; + } + case 7: //Dismiss war + { + if( war != null ) + { + if( !playerRank.GetFlag( RankFlags.ControlWarStatus ) ) + { + pm.SendLocalizedMessage( 1063440 ); // You don't have permission to negotiate wars. + } + else if( alliance != null && alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + pm.SendLocalizedMessage( 1070707, alliance.Leader.Name ); // You need to negotiate via ~1_val~ instead. + } + else + { + //Dismiss the war + guild.PendingWars.Remove( war ); + otherGuild.PendingWars.Remove( otherWar ); + pm.SendLocalizedMessage( 1070752 ); // The proposal has been updated. + //Messages to opposing guild? (Testing on OSI says no) + } + } + break; + } + case 8: //Surrender + { + if( !playerRank.GetFlag( RankFlags.ControlWarStatus ) ) + { + pm.SendLocalizedMessage( 1063440 ); // You don't have permission to negotiate wars. + } + else if( alliance != null && alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + pm.SendLocalizedMessage( 1070707, alliance.Leader.Name ); // You need to negotiate via ~1_val~ instead. + } + else + { + if( activeWar != null ) + { + if( alliance != null && alliance.IsMember( guild ) ) + { + alliance.AllianceMessage( 1070740, ((otherAlliance != null) ? otherAlliance.Name : otherGuild.Name) );// You have lost the war with ~1_val~. + alliance.InvalidateMemberProperties(); + } + else + { + guild.GuildMessage( 1070740, ((otherAlliance != null) ? otherAlliance.Name : otherGuild.Name) );// You have lost the war with ~1_val~. + guild.InvalidateMemberProperties(); + } + + guild.AcceptedWars.Remove( activeWar ); + + if( otherAlliance != null && otherAlliance.IsMember( otherGuild ) ) + { + otherAlliance.AllianceMessage( 1070739, ((guild.Alliance != null) ? guild.Alliance.Name : guild.Name) );// You have won the war against ~1_val~! + otherAlliance.InvalidateMemberProperties(); + } + else + { + otherGuild.GuildMessage( 1070739, ((guild.Alliance != null) ? guild.Alliance.Name : guild.Name) );// You have won the war against ~1_val~! + otherGuild.InvalidateMemberProperties(); + } + + otherGuild.AcceptedWars.Remove( otherGuild.FindActiveWar( guild ) ); + } + } + break; + } + case 1: //Declare War + { + if( war == null && activeWar == null ) + { + if( !playerRank.GetFlag( RankFlags.ControlWarStatus ) ) + { + pm.SendLocalizedMessage( 1063440 ); // You don't have permission to negotiate wars. + } + else if( alliance != null && alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + pm.SendLocalizedMessage( 1070707, alliance.Leader.Name ); // You need to negotiate via ~1_val~ instead. + } + else if( otherAlliance != null && otherAlliance.Leader != m_Other ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", m_Other.Name, otherAlliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + pm.SendLocalizedMessage( 1070707, otherAlliance.Leader.Name ); // You need to negotiate via ~1_val~ instead. + } + else + { + pm.SendGump( new WarDeclarationGump( pm, guild, m_Other ) ); + } + } + break; + } + #endregion + case 2: //Request Alliance + { + #region New alliance + if( alliance == null ) + { + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1070747 ); // You don't have permission to create an alliance. + } + else if( otherAlliance != null ) + { + if( otherAlliance.IsPendingMember( m_Other ) ) + pm.SendLocalizedMessage( 1063416, m_Other.Name ); // ~1_val~ is currently considering another alliance proposal. + else + pm.SendLocalizedMessage( 1063426, m_Other.Name ); // ~1_val~ already belongs to an alliance. + } + else if( m_Other.AcceptedWars.Count > 0 || m_Other.PendingWars.Count > 0 ) + { + pm.SendLocalizedMessage( 1063427, m_Other.Name ); // ~1_val~ is currently involved in a guild war. + } + else if( guild.AcceptedWars.Count > 0 || guild.PendingWars.Count > 0 ) + { + pm.SendLocalizedMessage( 1063427, guild.Name ); // ~1_val~ is currently involved in a guild war. + } + else + { + pm.SendLocalizedMessage( 1063439 ); // Enter a name for the new alliance: + pm.BeginPrompt( new PromptCallback( CreateAlliance_Callback ) ); + } + } + #endregion + #region Existing Alliance + else + { + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1063436 ); // You don't have permission to negotiate an alliance. + } + else if( alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + } + else if( otherAlliance != null ) + { + if( otherAlliance.IsPendingMember( m_Other ) ) + pm.SendLocalizedMessage( 1063416, m_Other.Name ); // ~1_val~ is currently considering another alliance proposal. + else + pm.SendLocalizedMessage( 1063426, m_Other.Name ); // ~1_val~ already belongs to an alliance. + } + else if( alliance.IsPendingMember( guild ) ) + { + pm.SendLocalizedMessage( 1063416, guild.Name ); // ~1_val~ is currently considering another alliance proposal. + } + else if( m_Other.AcceptedWars.Count > 0 || m_Other.PendingWars.Count > 0 ) + { + pm.SendLocalizedMessage( 1063427, m_Other.Name ); // ~1_val~ is currently involved in a guild war. + } + else if( guild.AcceptedWars.Count > 0 || guild.PendingWars.Count > 0 ) + { + pm.SendLocalizedMessage( 1063427, guild.Name ); // ~1_val~ is currently involved in a guild war. + } + else + { + pm.SendLocalizedMessage( 1070750, m_Other.Name ); // An invitation to join your alliance has been sent to ~1_val~. + + m_Other.GuildMessage( 1070780, guild.Name ); // ~1_val~ has proposed an alliance. + + m_Other.Alliance = alliance; //Calls addPendingGuild + //alliance.AddPendingGuild( m_Other ); + } + } + #endregion + break; + } + case 10: //Show Alliance Roster + { + if( alliance != null && alliance == otherAlliance ) + pm.SendGump( new AllianceInfo.AllianceRosterGump( pm, guild, alliance ) ); + + break; + } + case 11: //Leave Alliance + { + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1063436 ); // You don't have permission to negotiate an alliance. + } + else if( alliance != null && alliance.IsMember( guild ) ) + { + guild.Alliance = null; //Calls alliance.Removeguild +// alliance.RemoveGuild( guild ); + + m_Other.InvalidateWarNotoriety(); + + guild.InvalidateMemberNotoriety(); + } + break; + } + case 12: //Remove Guild from alliance + { + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1063436 ); // You don't have permission to negotiate an alliance. + } + else if( alliance != null && alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + } + else if( alliance != null && alliance.IsMember( guild ) && alliance.IsMember( m_Other ) ) + { + m_Other.Alliance = null; + + m_Other.InvalidateMemberNotoriety(); + + guild.InvalidateWarNotoriety(); + } + break; + } + case 13: //Promote to Alliance leader + { + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1063436 ); // You don't have permission to negotiate an alliance. + } + else if( alliance != null && alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + } + else if( alliance != null && alliance.IsMember( guild ) && alliance.IsMember( m_Other ) ) + { + pm.SendLocalizedMessage( 1063434, String.Format( "{0}\t{1}", m_Other.Name, alliance.Name ) ); // ~1_val~ is now the leader of ~2_val~. + + alliance.Leader = m_Other; + } + break; + } + case 14: //Withdraw Request + { + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1063436 ); // You don't have permission to negotiate an alliance. + } + else if( alliance != null && alliance.Leader == guild && alliance.IsPendingMember( m_Other ) ) + { + m_Other.Alliance = null; + pm.SendLocalizedMessage( 1070752 ); // The proposal has been updated. + } + break; + } + case 15: //Deny Alliance Request + { + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1063436 ); // You don't have permission to negotiate an alliance. + } + else if( alliance != null && otherAlliance != null && alliance.Leader == m_Other && otherAlliance.IsPendingMember( guild ) ) + { + pm.SendLocalizedMessage( 1070752 ); // The proposal has been updated. + //m_Other.GuildMessage( 1070782 ); // ~1_val~ has responded to your proposal. //Per OSI commented out. + + guild.Alliance = null; + } + break; + } + case 16: //Accept Alliance Request + { + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1063436 ); // You don't have permission to negotiate an alliance. + } + else if( otherAlliance != null && otherAlliance.Leader == m_Other && otherAlliance.IsPendingMember( guild ) ) + { + pm.SendLocalizedMessage( 1070752 ); // The proposal has been updated. + + otherAlliance.TurnToMember( m_Other ); //No need to verify it's in the guild or already a member, the function does this + + otherAlliance.TurnToMember( guild ); + } + break; + } + } + } + + public void CreateAlliance_Callback( Mobile from, string text ) + { + PlayerMobile pm = from as PlayerMobile; + + + AllianceInfo alliance = guild.Alliance; + AllianceInfo otherAlliance = m_Other.Alliance; + + if( !IsMember( from, guild ) || alliance != null ) + return; + + + RankDefinition playerRank = pm.GuildRank; + + + if( !playerRank.GetFlag( RankFlags.AllianceControl ) ) + { + pm.SendLocalizedMessage( 1070747 ); // You don't have permission to create an alliance. + } + else if( otherAlliance != null ) + { + if( otherAlliance.IsPendingMember( m_Other ) ) + pm.SendLocalizedMessage( 1063416, m_Other.Name ); // ~1_val~ is currently considering another alliance proposal. + else + pm.SendLocalizedMessage( 1063426, m_Other.Name ); // ~1_val~ already belongs to an alliance. + } + else if( m_Other.AcceptedWars.Count > 0 || m_Other.PendingWars.Count > 0 ) + { + pm.SendLocalizedMessage( 1063427, m_Other.Name ); // ~1_val~ is currently involved in a guild war. + } + else if( guild.AcceptedWars.Count > 0 || guild.PendingWars.Count > 0 ) + { + pm.SendLocalizedMessage( 1063427, guild.Name ); // ~1_val~ is currently involved in a guild war. + } + else + { + string name = Utility.FixHtml( text.Trim() ); + + if( !BaseGuildGump.CheckProfanity( name ) ) + pm.SendLocalizedMessage( 1070886 ); // That alliance name is not allowed. + else if( name.Length > Guild.NameLimit ) + pm.SendLocalizedMessage( 1070887, Guild.NameLimit.ToString() ); // An alliance name cannot exceed ~1_val~ characters in length. + else if( AllianceInfo.Alliances.ContainsKey( name.ToLower() ) ) + pm.SendLocalizedMessage( 1063428 ); // That alliance name is not available. + else + { + pm.SendLocalizedMessage( 1070750, m_Other.Name ); // An invitation to join your alliance has been sent to ~1_val~. + + m_Other.GuildMessage( 1070780, guild.Name ); // ~1_val~ has proposed an alliance. + + new AllianceInfo( guild, name, m_Other ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/New Guild System/War Declaration gump.cs b/Scripts/Engines/Guilds/New Guild System/War Declaration gump.cs new file mode 100644 index 0000000..d08deae --- /dev/null +++ b/Scripts/Engines/Guilds/New Guild System/War Declaration gump.cs @@ -0,0 +1,130 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; + +namespace Server.Guilds +{ + public class WarDeclarationGump : BaseGuildGump + { + private Guild m_Other; + + public WarDeclarationGump( PlayerMobile pm, Guild g, Guild otherGuild ) : base( pm, g ) + { + m_Other = otherGuild; + WarDeclaration war = g.FindPendingWar( otherGuild ); + + AddPage( 0 ); + + AddBackground( 0, 0, 500, 340, 0x24AE ); + AddBackground( 65, 50, 370, 30, 0x2486 ); + AddHtmlLocalized( 75, 55, 370, 26, 1062979, 0x3C00, false, false ); //
Declaration of War
+ AddImage( 410, 45, 0x232C ); + AddHtmlLocalized( 65, 95, 200, 20, 1063009, 0x14AF, false, false ); // Duration of War + AddHtmlLocalized( 65, 120, 400, 20, 1063010, 0x0, false, false ); // Enter the number of hours the war will last. + AddBackground( 65, 150, 40, 30, 0x2486 ); + AddTextEntry( 70, 154, 50, 30, 0x481, 10, (war != null) ? war.WarLength.Hours.ToString() : "0" ); + AddHtmlLocalized( 65, 195, 200, 20, 1063011, 0x14AF, false, false ); // Victory Condition + AddHtmlLocalized( 65, 220, 400, 20, 1063012, 0x0, false, false ); // Enter the winning number of kills. + AddBackground( 65, 250, 40, 30, 0x2486 ); + AddTextEntry( 70, 254, 50, 30, 0x481, 11, (war != null) ? war.MaxKills.ToString() : "0" ); + AddBackground( 190, 270, 130, 26, 0x2486 ); + AddButton( 195, 275, 0x845, 0x846, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 220, 273, 90, 26, 1006045, 0x0, false, false ); // Cancel + AddBackground( 330, 270, 130, 26, 0x2486 ); + AddButton( 335, 275, 0x845, 0x846, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 360, 273, 90, 26, 1062989, 0x5000, false, false ); // Declare War! + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + + PlayerMobile pm = sender.Mobile as PlayerMobile; + + if( !IsMember( pm, guild ) ) + return; + + RankDefinition playerRank = pm.GuildRank; + + switch( info.ButtonID ) + { + case 1: + { + AllianceInfo alliance = guild.Alliance; + AllianceInfo otherAlliance = m_Other.Alliance; + + if( !playerRank.GetFlag( RankFlags.ControlWarStatus ) ) + { + pm.SendLocalizedMessage( 1063440 ); // You don't have permission to negotiate wars. + } + else if( alliance != null && alliance.Leader != guild ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", guild.Name, alliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + pm.SendLocalizedMessage( 1070707, alliance.Leader.Name ); // You need to negotiate via ~1_val~ instead. + } + else if( otherAlliance != null && otherAlliance.Leader != m_Other ) + { + pm.SendLocalizedMessage( 1063239, String.Format( "{0}\t{1}", m_Other.Name, otherAlliance.Name ) ); // ~1_val~ is not the leader of the ~2_val~ alliance. + pm.SendLocalizedMessage( 1070707, otherAlliance.Leader.Name ); // You need to negotiate via ~1_val~ instead. + } + else + { + WarDeclaration activeWar = guild.FindActiveWar( m_Other ); + + if( activeWar == null ) + { + WarDeclaration war = guild.FindPendingWar( m_Other ); + WarDeclaration otherWar = m_Other.FindPendingWar( guild ); + + //Note: OSI differs from what it says on website. unlimited war = 0 kills/ 0 hrs. Not > 999. (sidenote: they both cap at 65535, 7.5 years, but, still.) + TextRelay tKills = info.GetTextEntry( 11 ); + TextRelay tWarLength = info.GetTextEntry( 10 ); + + int maxKills = (tKills == null)? 0 : Math.Max( Math.Min( Utility.ToInt32( info.GetTextEntry( 11 ).Text ), 0xFFFF ), 0 ); + TimeSpan warLength = TimeSpan.FromHours( (tWarLength == null) ? 0 : Math.Max( Math.Min( Utility.ToInt32( info.GetTextEntry( 10 ).Text ), 0xFFFF ), 0 ) ); + + if( war != null ) + { + war.MaxKills = maxKills; + war.WarLength = warLength; + war.WarRequester = true; + } + else + { + guild.PendingWars.Add( new WarDeclaration( guild, m_Other, maxKills, warLength, true ) ); + } + + if( otherWar != null ) + { + otherWar.MaxKills = maxKills; + otherWar.WarLength = warLength; + otherWar.WarRequester = false; + } + else + { + m_Other.PendingWars.Add( new WarDeclaration( m_Other, guild, maxKills, warLength, false ) ); + } + + if( war != null ) + { + pm.SendLocalizedMessage( 1070752 ); // The proposal has been updated. + //m_Other.GuildMessage( 1070782 ); // ~1_val~ has responded to your proposal. + } + else + m_Other.GuildMessage( 1070781, ((guild.Alliance != null ) ? guild.Alliance.Name : guild.Name ) ); // ~1_val~ has proposed a war. + + pm.SendLocalizedMessage( 1070751, ((m_Other.Alliance != null ) ? m_Other.Alliance.Name : m_Other.Name ) ); // War proposal has been sent to ~1_val~. + } + } + break; + } + default: + { + pm.SendGump( new OtherGuildInfo( pm, guild, m_Other ) ); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Guilds/RecruitTarget.cs b/Scripts/Engines/Guilds/RecruitTarget.cs new file mode 100644 index 0000000..9149726 --- /dev/null +++ b/Scripts/Engines/Guilds/RecruitTarget.cs @@ -0,0 +1,72 @@ +using System; +using Server; +using Server.Guilds; +using Server.Targeting; + +namespace Server.Gumps +{ + public class GuildRecruitTarget : Target + { + private Mobile m_Mobile; + private Guild m_Guild; + + public GuildRecruitTarget( Mobile m, Guild guild ) : base( 10, false, TargetFlags.None ) + { + m_Mobile = m; + m_Guild = guild; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( GuildGump.BadMember( m_Mobile, m_Guild ) ) + return; + + if ( targeted is Mobile ) + { + Mobile m = (Mobile)targeted; + + if ( !m.Player ) + { + m_Mobile.SendLocalizedMessage( 501161 ); // You may only recruit players into the guild. + } + else if ( !m.Alive ) + { + m_Mobile.SendLocalizedMessage( 501162 ); // Only the living may be recruited. + } + else if ( m_Guild.IsMember( m ) ) + { + m_Mobile.SendLocalizedMessage( 501163 ); // They are already a guildmember! + } + else if ( m_Guild.Candidates.Contains( m ) ) + { + m_Mobile.SendLocalizedMessage( 501164 ); // They are already a candidate. + } + else if ( m_Guild.Accepted.Contains( m ) ) + { + m_Mobile.SendLocalizedMessage( 501165 ); // They have already been accepted for membership, and merely need to use the Guildstone to gain full membership. + } + else if ( m.Guild != null ) + { + m_Mobile.SendLocalizedMessage( 501166 ); // You can only recruit candidates who are not already in a guild. + } + else if ( m_Mobile.AccessLevel >= AccessLevel.GameMaster || m_Guild.Leader == m_Mobile ) + { + m_Guild.Accepted.Add( m ); + } + else + { + m_Guild.Candidates.Add( m ); + } + } + } + + protected override void OnTargetFinish( Mobile from ) + { + if ( GuildGump.BadMember( m_Mobile, m_Guild ) ) + return; + + GuildGump.EnsureClosed( m_Mobile ); + m_Mobile.SendGump( new GuildGump( m_Mobile, m_Guild ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Core/HarvestBank.cs b/Scripts/Engines/Harvest/Core/HarvestBank.cs new file mode 100644 index 0000000..023ada8 --- /dev/null +++ b/Scripts/Engines/Harvest/Core/HarvestBank.cs @@ -0,0 +1,100 @@ +using System; + +namespace Server.Engines.Harvest +{ + public class HarvestBank + { + private int m_Current; + private int m_Maximum; + private DateTime m_NextRespawn; + private HarvestVein m_Vein, m_DefaultVein; + + HarvestDefinition m_Definition; + + public HarvestDefinition Definition + { + get { return m_Definition; } + } + + public int Current + { + get + { + CheckRespawn(); + return m_Current; + } + } + + public HarvestVein Vein + { + get + { + CheckRespawn(); + return m_Vein; + } + set + { + m_Vein = value; + } + } + + public HarvestVein DefaultVein + { + get + { + CheckRespawn(); + return m_DefaultVein; + } + } + + public void CheckRespawn() + { + if ( m_Current == m_Maximum || m_NextRespawn > DateTime.Now ) + return; + + m_Current = m_Maximum; + + if ( m_Definition.RandomizeVeins ) + { + m_DefaultVein = m_Definition.GetVeinFrom( Utility.RandomDouble() ); + } + + m_Vein = m_DefaultVein; + } + + public void Consume( int amount, Mobile from ) + { + CheckRespawn(); + + if ( m_Current == m_Maximum ) + { + double min = m_Definition.MinRespawn.TotalMinutes; + double max = m_Definition.MaxRespawn.TotalMinutes; + double rnd = Utility.RandomDouble(); + + m_Current = m_Maximum - amount; + + double minutes = min + (rnd * (max - min)); + + m_NextRespawn = DateTime.Now + TimeSpan.FromMinutes( minutes ); + } + else + { + m_Current -= amount; + } + + if ( m_Current < 0 ) + m_Current = 0; + } + + public HarvestBank( HarvestDefinition def, HarvestVein defaultVein ) + { + m_Maximum = Utility.RandomMinMax( def.MinTotal, def.MaxTotal ); + m_Current = m_Maximum; + m_DefaultVein = defaultVein; + m_Vein = m_DefaultVein; + + m_Definition = def; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Core/HarvestDefinition.cs b/Scripts/Engines/Harvest/Core/HarvestDefinition.cs new file mode 100644 index 0000000..7906c45 --- /dev/null +++ b/Scripts/Engines/Harvest/Core/HarvestDefinition.cs @@ -0,0 +1,159 @@ +using System; +using Server.Misc; +using System.Collections.Generic; + +namespace Server.Engines.Harvest +{ + public class HarvestDefinition + { + private int m_BankWidth, m_BankHeight; + private int m_MinTotal, m_MaxTotal; + private int[] m_Tiles; + private bool m_RangedTiles; + private TimeSpan m_MinRespawn, m_MaxRespawn; + private int m_MaxRange; + private int m_ConsumedPerHarvest; + private bool m_PlaceAtFeetIfFull; + private Trades m_Trade; + private int[] m_EffectActions; + private int[] m_EffectCounts; + private int[] m_EffectSounds; + private TimeSpan m_EffectSoundDelay; + private TimeSpan m_EffectDelay; + private object m_NoResourcesMessage, m_OutOfRangeMessage, m_TimedOutOfRangeMessage, m_DoubleHarvestMessage, m_FailMessage, m_PackFullMessage, m_ToolBrokeMessage; + private HarvestResource[] m_Resources; + private HarvestVein[] m_Veins; + private bool m_RaceBonus; + private bool m_RandomizeVeins; + + public int BankWidth{ get{ return m_BankWidth; } set{ m_BankWidth = value; } } + public int BankHeight{ get{ return m_BankHeight; } set{ m_BankHeight = value; } } + public int MinTotal{ get{ return m_MinTotal; } set{ m_MinTotal = value; } } + public int MaxTotal{ get{ return m_MaxTotal; } set{ m_MaxTotal = value; } } + public int[] Tiles{ get{ return m_Tiles; } set{ m_Tiles = value; } } + public bool RangedTiles{ get{ return m_RangedTiles; } set{ m_RangedTiles = value; } } + public TimeSpan MinRespawn{ get{ return m_MinRespawn; } set{ m_MinRespawn = value; } } + public TimeSpan MaxRespawn{ get{ return m_MaxRespawn; } set{ m_MaxRespawn = value; } } + public int MaxRange{ get{ return m_MaxRange; } set{ m_MaxRange = value; } } + public int ConsumedPerHarvest{ get{ return m_ConsumedPerHarvest; } set{ m_ConsumedPerHarvest = value; } } + public bool PlaceAtFeetIfFull{ get{ return m_PlaceAtFeetIfFull; } set{ m_PlaceAtFeetIfFull = value; } } + public Trades Trade{ get{ return m_Trade; } set{ m_Trade = value; } } + public int[] EffectActions{ get{ return m_EffectActions; } set{ m_EffectActions = value; } } + public int[] EffectCounts{ get{ return m_EffectCounts; } set{ m_EffectCounts = value; } } + public int[] EffectSounds{ get{ return m_EffectSounds; } set{ m_EffectSounds = value; } } + public TimeSpan EffectSoundDelay{ get{ return m_EffectSoundDelay; } set{ m_EffectSoundDelay = value; } } + public TimeSpan EffectDelay{ get{ return m_EffectDelay; } set{ m_EffectDelay = value; } } + public object NoResourcesMessage{ get{ return m_NoResourcesMessage; } set{ m_NoResourcesMessage = value; } } + public object OutOfRangeMessage{ get{ return m_OutOfRangeMessage; } set{ m_OutOfRangeMessage = value; } } + public object TimedOutOfRangeMessage{ get{ return m_TimedOutOfRangeMessage; } set{ m_TimedOutOfRangeMessage = value; } } + public object DoubleHarvestMessage{ get{ return m_DoubleHarvestMessage; } set{ m_DoubleHarvestMessage = value; } } + public object FailMessage{ get{ return m_FailMessage; } set{ m_FailMessage = value; } } + public object PackFullMessage{ get{ return m_PackFullMessage; } set{ m_PackFullMessage = value; } } + public object ToolBrokeMessage{ get{ return m_ToolBrokeMessage; } set{ m_ToolBrokeMessage = value; } } + public HarvestResource[] Resources{ get{ return m_Resources; } set{ m_Resources = value; } } + public HarvestVein[] Veins{ get{ return m_Veins; } set{ m_Veins = value; } } + public bool RaceBonus { get { return m_RaceBonus; } set { m_RaceBonus = value; } } + public bool RandomizeVeins { get { return m_RandomizeVeins; } set { m_RandomizeVeins = value; } } + + private Dictionary> m_BanksByMap; + + public Dictionary> Banks{ get{ return m_BanksByMap; } set{ m_BanksByMap = value; } } + + public void SendMessageTo( Mobile from, object message ) + { + if ( message is int ) + from.SendLocalizedMessage( (int)message ); + else if ( message is string ) + from.SendMessage( (string)message ); + } + + public HarvestBank GetBank( Map map, int x, int y ) + { + if ( map == null || map == Map.Internal ) + return null; + + x /= m_BankWidth; + y /= m_BankHeight; + + Dictionary banks = null; + m_BanksByMap.TryGetValue( map, out banks ); + + if ( banks == null ) + m_BanksByMap[map] = banks = new Dictionary(); + + Point2D key = new Point2D( x, y ); + HarvestBank bank = null; + banks.TryGetValue( key, out bank ); + + if ( bank == null ) + banks[key] = bank = new HarvestBank( this, GetVeinAt( map, x, y ) ); + + return bank; + } + + public HarvestVein GetVeinAt( Map map, int x, int y ) + { + if ( m_Veins.Length == 1 ) + return m_Veins[0]; + + double randomValue; + + if ( m_RandomizeVeins ) + { + randomValue = Utility.RandomDouble(); + } + else + { + Random random = new Random( ( x * 17 ) + ( y * 11 ) + ( map.MapID * 3 ) ); + randomValue = random.NextDouble(); + } + + return GetVeinFrom( randomValue ); + } + + public HarvestVein GetVeinFrom( double randomValue ) + { + if ( m_Veins.Length == 1 ) + return m_Veins[0]; + + randomValue *= 100; + + for ( int i = 0; i < m_Veins.Length; ++i ) + { + if ( randomValue <= m_Veins[i].VeinChance ) + return m_Veins[i]; + + randomValue -= m_Veins[i].VeinChance; + } + + return null; + } + + public HarvestDefinition() + { + m_BanksByMap = new Dictionary>(); + } + + public bool Validate( int tileID ) + { + if ( m_RangedTiles ) + { + bool contains = false; + + for ( int i = 0; !contains && i < m_Tiles.Length; i += 2 ) + contains = ( tileID >= m_Tiles[i] && tileID <= m_Tiles[i + 1] ); + + return contains; + } + else + { + int dist = -1; + + for ( int i = 0; dist < 0 && i < m_Tiles.Length; ++i ) + dist = ( m_Tiles[i] - tileID ); + + return ( dist == 0 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Core/HarvestResource.cs b/Scripts/Engines/Harvest/Core/HarvestResource.cs new file mode 100644 index 0000000..05ff7d4 --- /dev/null +++ b/Scripts/Engines/Harvest/Core/HarvestResource.cs @@ -0,0 +1,34 @@ +using System; + +namespace Server.Engines.Harvest +{ + public class HarvestResource + { + private Type[] m_Types; + private double m_ReqSkill, m_MinSkill, m_MaxSkill; + private object m_SuccessMessage; + + public Type[] Types{ get{ return m_Types; } set{ m_Types = value; } } + public double ReqSkill{ get{ return m_ReqSkill; } set{ m_ReqSkill = value; } } + public double MinSkill{ get{ return m_MinSkill; } set{ m_MinSkill = value; } } + public double MaxSkill{ get{ return m_MaxSkill; } set{ m_MaxSkill = value; } } + public object SuccessMessage{ get{ return m_SuccessMessage; } } + + public void SendSuccessTo( Mobile m ) + { + if ( m_SuccessMessage is int ) + m.SendLocalizedMessage( (int)m_SuccessMessage ); + else if ( m_SuccessMessage is string ) + m.SendMessage( (string)m_SuccessMessage ); + } + + public HarvestResource( double reqSkill, double minSkill, double maxSkill, object message, params Type[] types ) + { + m_ReqSkill = reqSkill; + m_MinSkill = minSkill; + m_MaxSkill = maxSkill; + m_Types = types; + m_SuccessMessage = message; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Core/HarvestSoundTimer.cs b/Scripts/Engines/Harvest/Core/HarvestSoundTimer.cs new file mode 100644 index 0000000..ddb6af8 --- /dev/null +++ b/Scripts/Engines/Harvest/Core/HarvestSoundTimer.cs @@ -0,0 +1,33 @@ +using System; + +namespace Server.Engines.Harvest +{ + public class HarvestSoundTimer : Timer + { + private Mobile m_From; + private Item m_Tool; + private HarvestSystem m_System; + private HarvestDefinition m_Definition; + private object m_ToHarvest, m_Locked; + private bool m_Last; + + public HarvestSoundTimer( Mobile from, Item tool, HarvestSystem system, HarvestDefinition def, object toHarvest, object locked, bool last ) : base( def.EffectSoundDelay ) + { + m_From = from; + m_Tool = tool; + m_System = system; + m_Definition = def; + m_ToHarvest = toHarvest; + m_Locked = locked; + m_Last = last; + } + + protected override void OnTick() + { + m_System.DoHarvestingSound( m_From, m_Tool, m_Definition, m_ToHarvest ); + + if ( m_Last ) + m_System.FinishHarvesting( m_From, m_Tool, m_Definition, m_ToHarvest, m_Locked ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Core/HarvestSystem.cs b/Scripts/Engines/Harvest/Core/HarvestSystem.cs new file mode 100644 index 0000000..695c889 --- /dev/null +++ b/Scripts/Engines/Harvest/Core/HarvestSystem.cs @@ -0,0 +1,498 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Misc; +using Server.Targeting; +using Server.Regions; + +namespace Server.Engines.Harvest +{ + public abstract class HarvestSystem + { + private List m_Definitions; + + public List Definitions { get { return m_Definitions; } } + + public HarvestSystem() + { + m_Definitions = new List(); + } + + public virtual bool CheckTool( Mobile from, Item tool ) + { + bool wornOut = ( tool == null || tool.Deleted || (tool is IUsesRemaining && ((IUsesRemaining)tool).UsesRemaining <= 0) ); + + if ( wornOut ) + from.SendLocalizedMessage( 1044038 ); // You have worn out your tool! + + return !wornOut; + } + + public virtual bool CheckHarvest( Mobile from, Item tool ) + { + if ( from.Region is DungeonRegion ) + { + from.SendLocalizedMessage( 1005213 ); // You can't do that. + return false; + } + + return CheckTool( from, tool ); + } + + public virtual bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + if ( from.Region is DungeonRegion ) + { + from.SendLocalizedMessage( 1005213 ); // You can't do that. + return false; + } + + return CheckTool( from, tool ); + } + + public virtual bool CheckRange( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, bool timed ) + { + bool inRange = ( from.Map == map && from.InRange( loc, def.MaxRange ) ); + + if ( !inRange ) + def.SendMessageTo( from, timed ? def.TimedOutOfRangeMessage : def.OutOfRangeMessage ); + + return inRange; + } + + public virtual bool CheckResources( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, bool timed ) + { + HarvestBank bank = def.GetBank( map, loc.X, loc.Y ); + bool available = ( bank != null && bank.Current >= def.ConsumedPerHarvest ); + + if ( !available ) + def.SendMessageTo( from, timed ? def.DoubleHarvestMessage : def.NoResourcesMessage ); + + return available; + } + + public virtual void OnBadHarvestTarget( Mobile from, Item tool, object toHarvest ) + { + } + + public virtual object GetLock( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + /* Here we prevent multiple harvesting. + * + * Some options: + * - 'return tool;' : This will allow the player to harvest more than once concurrently, but only if they use multiple tools. This seems to be as OSI. + * - 'return GetType();' : This will disallow multiple harvesting of the same type. That is, we couldn't mine more than once concurrently, but we could be both mining and lumberjacking. + * - 'return typeof( HarvestSystem );' : This will completely restrict concurrent harvesting. + */ + + return tool; + } + + public virtual void OnConcurrentHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + } + + public virtual void OnHarvestStarted( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + } + + public virtual bool BeginHarvesting( Mobile from, Item tool ) + { + if ( !CheckHarvest( from, tool ) ) + return false; + + from.Target = new HarvestTarget( tool, this ); + return true; + } + + public virtual void FinishHarvesting( Mobile from, Item tool, HarvestDefinition def, object toHarvest, object locked ) + { + from.EndAction( locked ); + + if ( !CheckHarvest( from, tool ) ) + return; + + int tileID; + Map map; + Point3D loc; + + if ( !GetHarvestDetails( from, tool, toHarvest, out tileID, out map, out loc ) ) + { + OnBadHarvestTarget( from, tool, toHarvest ); + return; + } + else if ( !def.Validate( tileID ) ) + { + OnBadHarvestTarget( from, tool, toHarvest ); + return; + } + + if ( !CheckRange( from, tool, def, map, loc, true ) ) + return; + else if ( !CheckResources( from, tool, def, map, loc, true ) ) + return; + else if ( !CheckHarvest( from, tool, def, toHarvest ) ) + return; + + if ( SpecialHarvest( from, tool, def, map, loc ) ) + return; + + HarvestBank bank = def.GetBank( map, loc.X, loc.Y ); + + if ( bank == null ) + return; + + HarvestVein vein = bank.Vein; + + if ( vein != null ) + vein = MutateVein( from, tool, def, bank, toHarvest, vein ); + + if ( vein == null ) + return; + + HarvestResource primary = vein.PrimaryResource; + HarvestResource fallback = vein.FallbackResource; + HarvestResource resource = MutateResource( from, tool, def, map, loc, vein, primary, fallback ); + + double skillBase = SkillCheck.TradeSkill( from, def.Trade, false ); + double skillValue = skillBase; + + Type type = null; + + if ( skillBase >= resource.ReqSkill && SkillCheck.TestTrade( from, def.Trade, resource.MinSkill, resource.MaxSkill ) ) + { + type = GetResourceType( from, tool, def, map, loc, resource ); + + if ( type != null ) + type = MutateType( type, from, tool, def, map, loc, resource ); + + if ( type != null ) + { + Item item = Construct( type, from ); + + if ( item == null ) + { + type = null; + } + else + { + //The whole harvest system is kludgy and I'm sure this is just adding to it. + if ( item.Stackable ) + { + item.Amount = def.ConsumedPerHarvest; + } + + if ( item is WoodBoard ) + { + item.ItemID = 0x1BE0; + item.Weight = 2.0; + } + + bank.Consume( item.Amount, from ); + + if ( Give( from, item, def.PlaceAtFeetIfFull ) ) + { + SendSuccessTo( from, item, resource ); + } + else + { + SendPackFullTo( from, item, def, resource ); + item.Delete(); + } + + if ( tool is BaseAxe && !(tool is Pickaxe) ) + { + ((BaseWeapon)tool).HitPoints--; + } + else if ( tool is IUsesRemaining ) + { + IUsesRemaining toolWithUses = (IUsesRemaining)tool; + + toolWithUses.ShowUsesRemaining = true; + + if ( toolWithUses.UsesRemaining > 0 ) + --toolWithUses.UsesRemaining; + + if ( toolWithUses.UsesRemaining < 1 ) + { + tool.Delete(); + def.SendMessageTo( from, def.ToolBrokeMessage ); + } + } + } + } + } + + if ( type == null ) + def.SendMessageTo( from, def.FailMessage ); + + OnHarvestFinished( from, tool, def, vein, bank, resource, toHarvest ); + } + + public virtual void OnHarvestFinished( Mobile from, Item tool, HarvestDefinition def, HarvestVein vein, HarvestBank bank, HarvestResource resource, object harvested ) + { + } + + public virtual bool SpecialHarvest( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc ) + { + return false; + } + + public virtual Item Construct( Type type, Mobile from ) + { + try{ return Activator.CreateInstance( type ) as Item; } + catch{ return null; } + } + + public virtual HarvestVein MutateVein( Mobile from, Item tool, HarvestDefinition def, HarvestBank bank, object toHarvest, HarvestVein vein ) + { + return vein; + } + + public virtual void SendSuccessTo( Mobile from, Item item, HarvestResource resource ) + { + resource.SendSuccessTo( from ); + } + + public virtual void SendPackFullTo( Mobile from, Item item, HarvestDefinition def, HarvestResource resource ) + { + def.SendMessageTo( from, def.PackFullMessage ); + } + + public virtual bool Give( Mobile m, Item item, bool placeAtFeet ) + { + if ( m.PlaceInBackpack( item ) ) + return true; + + if ( !placeAtFeet ) + return false; + + Map map = m.Map; + + if ( map == null ) + return false; + + List atFeet = new List(); + + foreach ( Item obj in m.GetItemsInRange( 0 ) ) + atFeet.Add( obj ); + + for ( int i = 0; i < atFeet.Count; ++i ) + { + Item check = atFeet[i]; + + if ( check.StackWith( m, item, false ) ) + return true; + } + + item.MoveToWorld( m.Location, map ); + return true; + } + + public virtual Type MutateType( Type type, Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource ) + { + return from.Region.GetResource( type ); + } + + public virtual Type GetResourceType( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource ) + { + if ( resource.Types.Length > 0 ) + return resource.Types[Utility.Random( resource.Types.Length )]; + + return null; + } + + public virtual HarvestResource MutateResource( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestVein vein, HarvestResource primary, HarvestResource fallback ) + { + bool racialBonus = (def.RaceBonus && from.Race == Race.Orc ); + + if( vein.ChanceToFallback > (Utility.RandomDouble() + (racialBonus ? .20 : 0)) ) + return fallback; + + double skillValue = SkillCheck.TradeSkill( from, def.Trade, false ); + + if ( fallback != null && (skillValue < primary.ReqSkill || skillValue < primary.MinSkill) ) + return fallback; + + return primary; + } + + public virtual bool OnHarvesting( Mobile from, Item tool, HarvestDefinition def, object toHarvest, object locked, bool last ) + { + if ( !CheckHarvest( from, tool ) ) + { + from.EndAction( locked ); + return false; + } + + int tileID; + Map map; + Point3D loc; + + if ( !GetHarvestDetails( from, tool, toHarvest, out tileID, out map, out loc ) ) + { + from.EndAction( locked ); + OnBadHarvestTarget( from, tool, toHarvest ); + return false; + } + else if ( !def.Validate( tileID ) ) + { + from.EndAction( locked ); + OnBadHarvestTarget( from, tool, toHarvest ); + return false; + } + else if ( !CheckRange( from, tool, def, map, loc, true ) ) + { + from.EndAction( locked ); + return false; + } + else if ( !CheckResources( from, tool, def, map, loc, true ) ) + { + from.EndAction( locked ); + return false; + } + else if ( !CheckHarvest( from, tool, def, toHarvest ) ) + { + from.EndAction( locked ); + return false; + } + + DoHarvestingEffect( from, tool, def, map, loc ); + + new HarvestSoundTimer( from, tool, this, def, toHarvest, locked, last ).Start(); + + return !last; + } + + public virtual void DoHarvestingSound( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + if ( def.EffectSounds.Length > 0 ) + from.PlaySound( Utility.RandomList( def.EffectSounds ) ); + } + + public virtual void DoHarvestingEffect( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc ) + { + from.Direction = from.GetDirectionTo( loc ); + + if ( !from.Mounted ) + from.Animate( Utility.RandomList( def.EffectActions ), 5, 1, true, false, 0 ); + } + + public virtual HarvestDefinition GetDefinition( int tileID ) + { + HarvestDefinition def = null; + + for ( int i = 0; def == null && i < m_Definitions.Count; ++i ) + { + HarvestDefinition check = m_Definitions[i]; + + if ( check.Validate( tileID ) ) + def = check; + } + + return def; + } + + public virtual void StartHarvesting( Mobile from, Item tool, object toHarvest ) + { + if ( !CheckHarvest( from, tool ) ) + return; + + int tileID; + Map map; + Point3D loc; + + if ( !GetHarvestDetails( from, tool, toHarvest, out tileID, out map, out loc ) ) + { + OnBadHarvestTarget( from, tool, toHarvest ); + return; + } + + HarvestDefinition def = GetDefinition( tileID ); + + if ( def == null ) + { + OnBadHarvestTarget( from, tool, toHarvest ); + return; + } + + if ( !CheckRange( from, tool, def, map, loc, false ) ) + return; + else if ( !CheckResources( from, tool, def, map, loc, false ) ) + return; + else if ( !CheckHarvest( from, tool, def, toHarvest ) ) + return; + + object toLock = GetLock( from, tool, def, toHarvest ); + + if ( !from.BeginAction( toLock ) ) + { + OnConcurrentHarvest( from, tool, def, toHarvest ); + return; + } + + new HarvestTimer( from, tool, this, def, toHarvest, toLock ).Start(); + OnHarvestStarted( from, tool, def, toHarvest ); + } + + public virtual bool GetHarvestDetails( Mobile from, Item tool, object toHarvest, out int tileID, out Map map, out Point3D loc ) + { + if ( toHarvest is Static && !((Static)toHarvest).Movable ) + { + Static obj = (Static)toHarvest; + + tileID = (obj.ItemID & 0x3FFF) | 0x4000; + map = obj.Map; + loc = obj.GetWorldLocation(); + } + else if ( toHarvest is StaticTarget ) + { + StaticTarget obj = (StaticTarget)toHarvest; + + tileID = (obj.ItemID & 0x3FFF) | 0x4000; + map = from.Map; + loc = obj.Location; + } + else if ( toHarvest is LandTarget ) + { + LandTarget obj = (LandTarget)toHarvest; + + tileID = obj.TileID; + map = from.Map; + loc = obj.Location; + } + else + { + tileID = 0; + map = null; + loc = Point3D.Zero; + return false; + } + + return ( map != null && map != Map.Internal ); + } + } +} + +namespace Server +{ + public interface IChopable + { + void OnChop( Mobile from ); + } + + [AttributeUsage( AttributeTargets.Class )] + public class FurnitureAttribute : Attribute + { + public static bool Check( Item item ) + { + return ( item != null && item.GetType().IsDefined( typeof( FurnitureAttribute ), false ) ); + } + + public FurnitureAttribute() + { + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Core/HarvestTarget.cs b/Scripts/Engines/Harvest/Core/HarvestTarget.cs new file mode 100644 index 0000000..802b7f3 --- /dev/null +++ b/Scripts/Engines/Harvest/Core/HarvestTarget.cs @@ -0,0 +1,80 @@ +using System; +using Server; +using Server.Items; +using Server.Targeting; +using Server.Multis; +using Server.Mobiles; + +namespace Server.Engines.Harvest +{ + public class HarvestTarget : Target + { + private Item m_Tool; + private HarvestSystem m_System; + + public HarvestTarget( Item tool, HarvestSystem system ) : base( -1, true, TargetFlags.None ) + { + m_Tool = tool; + m_System = system; + + DisallowMultis = true; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + IPoint3D p3D = targeted as IPoint3D; + + if ( m_System is Fishing && ( from.Map != Map.Britannia || p3D.Z != -5 ) ) + from.SendMessage( "You cannot fish here!" ); + else if ( m_System is Lumberjacking && targeted is IChopable ) + ((IChopable)targeted).OnChop( from ); + else if ( m_System is Lumberjacking && targeted is IAxe && m_Tool is BaseAxe ) + { + IAxe obj = (IAxe)targeted; + Item item = (Item)targeted; + + if ( !item.IsChildOf( from.Backpack ) ) + from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used. + else if ( obj.Axe( from, (BaseAxe)m_Tool ) ) + from.PlaySound( 0x13E ); + } + else if ( m_System is Lumberjacking && targeted is ICarvable ) + ((ICarvable)targeted).Carve( from, (Item)m_Tool ); + else if ( m_System is Lumberjacking && FurnitureAttribute.Check( targeted as Item ) ) + DestroyFurniture( from, (Item)targeted ); + else if ( m_System is Mining && targeted is TreasureMap ) + ((TreasureMap)targeted).OnBeginDig( from ); + else + m_System.StartHarvesting( from, m_Tool, targeted ); + } + + private void DestroyFurniture( Mobile from, Item item ) + { + if ( !from.InRange( item.GetWorldLocation(), 3 ) ) + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + return; + } + else if ( !item.IsChildOf( from.Backpack ) && !item.Movable ) + { + from.SendLocalizedMessage( 500462 ); // You can't destroy that while it is here. + return; + } + + from.SendLocalizedMessage( 500461 ); // You destroy the item. + Effects.PlaySound( item.GetWorldLocation(), item.Map, 0x3B3 ); + + if ( item is Container ) + { + if ( item is TrapableContainer ) + (item as TrapableContainer).ExecuteTrap( from ); + + ((Container)item).Destroy(); + } + else + { + item.Delete(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Core/HarvestTimer.cs b/Scripts/Engines/Harvest/Core/HarvestTimer.cs new file mode 100644 index 0000000..a91c6f7 --- /dev/null +++ b/Scripts/Engines/Harvest/Core/HarvestTimer.cs @@ -0,0 +1,31 @@ +using System; + +namespace Server.Engines.Harvest +{ + public class HarvestTimer : Timer + { + private Mobile m_From; + private Item m_Tool; + private HarvestSystem m_System; + private HarvestDefinition m_Definition; + private object m_ToHarvest, m_Locked; + private int m_Index, m_Count; + + public HarvestTimer( Mobile from, Item tool, HarvestSystem system, HarvestDefinition def, object toHarvest, object locked ) : base( TimeSpan.Zero, def.EffectDelay ) + { + m_From = from; + m_Tool = tool; + m_System = system; + m_Definition = def; + m_ToHarvest = toHarvest; + m_Locked = locked; + m_Count = Utility.RandomList( def.EffectCounts ); + } + + protected override void OnTick() + { + if ( !m_System.OnHarvesting( m_From, m_Tool, m_Definition, m_ToHarvest, m_Locked, ++m_Index == m_Count ) ) + Stop(); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Core/HarvestVein.cs b/Scripts/Engines/Harvest/Core/HarvestVein.cs new file mode 100644 index 0000000..c793657 --- /dev/null +++ b/Scripts/Engines/Harvest/Core/HarvestVein.cs @@ -0,0 +1,25 @@ +using System; + +namespace Server.Engines.Harvest +{ + public class HarvestVein + { + private double m_VeinChance; + private double m_ChanceToFallback; + private HarvestResource m_PrimaryResource; + private HarvestResource m_FallbackResource; + + public double VeinChance{ get{ return m_VeinChance; } set{ m_VeinChance = value; } } + public double ChanceToFallback{ get{ return m_ChanceToFallback; } set{ m_ChanceToFallback = value; } } + public HarvestResource PrimaryResource{ get{ return m_PrimaryResource; } set{ m_PrimaryResource = value; } } + public HarvestResource FallbackResource{ get{ return m_FallbackResource; } set{ m_FallbackResource = value; } } + + public HarvestVein( double veinChance, double chanceToFallback, HarvestResource primaryResource, HarvestResource fallbackResource ) + { + m_VeinChance = veinChance; + m_ChanceToFallback = chanceToFallback; + m_PrimaryResource = primaryResource; + m_FallbackResource = fallbackResource; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Fishing.cs b/Scripts/Engines/Harvest/Fishing.cs new file mode 100644 index 0000000..dc0890c --- /dev/null +++ b/Scripts/Engines/Harvest/Fishing.cs @@ -0,0 +1,527 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; +using Server.Mobiles; +using System.Collections.Generic; + +namespace Server.Engines.Harvest +{ + public class Fishing : HarvestSystem + { + private static Fishing m_System; + + public static Fishing System + { + get + { + if ( m_System == null ) + m_System = new Fishing(); + + return m_System; + } + } + + private HarvestDefinition m_Definition; + + public HarvestDefinition Definition + { + get{ return m_Definition; } + } + + private Fishing() + { + HarvestResource[] res = new HarvestResource[]{ new HarvestResource( 00.0, 00.0, 100.0, 1043297, typeof( Fish ) ) }; + HarvestVein[] veins = new HarvestVein[]{ new HarvestVein( 100.0, 0.0, res[0], null ) }; + + #region Fishing + HarvestDefinition fish = new HarvestDefinition(); + + // Resource banks are every 8x8 tiles + fish.BankWidth = 8; + fish.BankHeight = 8; + + // Every bank holds from 5 to 15 fish + fish.MinTotal = 5; + fish.MaxTotal = 15; + + // A resource bank will respawn its content every 10 to 20 minutes + fish.MinRespawn = TimeSpan.FromMinutes( 10.0 ); + fish.MaxRespawn = TimeSpan.FromMinutes( 20.0 ); + + fish.Trade = Trades.Fishing; + + // Set the list of harvestable tiles + fish.Tiles = m_WaterTiles; + fish.RangedTiles = true; + + // Players must be within 4 tiles to harvest + fish.MaxRange = 4; + + // One fish per harvest action + fish.ConsumedPerHarvest = 1; + + // The fishing + fish.EffectActions = new int[]{ 12 }; + fish.EffectSounds = new int[0]; + fish.EffectCounts = new int[]{ 1 }; + fish.EffectDelay = TimeSpan.Zero; + fish.EffectSoundDelay = TimeSpan.FromSeconds( 8.0 ); + + fish.NoResourcesMessage = 503172; // The fish don't seem to be biting here. + fish.FailMessage = 503171; // You fish a while, but fail to catch anything. + fish.TimedOutOfRangeMessage = 500976; // You need to be closer to the water to fish! + fish.OutOfRangeMessage = 500976; // You need to be closer to the water to fish! + fish.PackFullMessage = 503176; // You do not have room in your backpack for a fish. + fish.ToolBrokeMessage = 503174; // You broke your fishing pole. + + fish.Resources = res; + fish.Veins = veins; + + m_Definition = fish; + Definitions.Add( fish ); + #endregion + } + + public override void OnConcurrentHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + from.SendLocalizedMessage( 500972 ); // You are already fishing. + } + + private class MutateEntry + { + public double m_ReqSkill, m_MinSkill, m_MaxSkill; + public bool m_DeepWater; + public Type[] m_Types; + + public MutateEntry( double reqSkill, double minSkill, double maxSkill, bool deepWater, params Type[] types ) + { + m_ReqSkill = reqSkill; + m_MinSkill = minSkill; + m_MaxSkill = maxSkill; + m_DeepWater = deepWater; + m_Types = types; + } + } + + private static MutateEntry[] m_MutateTable = new MutateEntry[] + { + new MutateEntry( 80.0, 80.0, 4080.0, true, typeof( SpecialFishingNet ) ), + new MutateEntry( 80.0, 80.0, 4080.0, true, typeof( BigFish ) ), + new MutateEntry( 90.0, 80.0, 4080.0, true, typeof( TreasureMap ) ), + new MutateEntry( 100.0, 80.0, 4080.0, true, typeof( MessageInABottle ) ), + new MutateEntry( 0.0, 125.0, -2375.0, false, typeof( PrizedFish ), typeof( WondrousFish ), typeof( TrulyRareFish ), typeof( PeculiarFish ) ), + new MutateEntry( 0.0, 105.0, -420.0, false, typeof( Boots ), typeof( Shoes ), typeof( Sandals ), typeof( ThighBoots ) ), + new MutateEntry( 0.0, 200.0, -200.0, false, new Type[1]{ null } ) + }; + + public override Type MutateType( Type type, Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource ) + { + if ( !IsOnBoat( from ) ) + return type; + + bool deepWater = SpecialFishingNet.FullValidation( map, loc.X, loc.Y ); + if ( !IsOnBoat( from ) ) + deepWater = false; + + double skillBase = SkillCheck.TradeSkill( from, Trades.Fishing, false ); + double skillValue = skillBase; + + for ( int i = 0; i < m_MutateTable.Length; ++i ) + { + MutateEntry entry = m_MutateTable[i]; + + if ( !deepWater && entry.m_DeepWater ) + continue; + + if ( skillBase >= entry.m_ReqSkill ) + { + double chance = (skillValue - entry.m_MinSkill) / (entry.m_MaxSkill - entry.m_MinSkill); + + if ( chance > Utility.RandomDouble() ) + return entry.m_Types[Utility.Random( entry.m_Types.Length )]; + } + } + + return type; + } + + private static Map SafeMap( Map map ) + { + if ( map == null || map == Map.Internal ) + return Map.Britannia; + + return map; + } + + public override bool CheckResources( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, bool timed ) + { + Container pack = from.Backpack; + + if ( pack != null ) + { + List messages = pack.FindItemsByType(); + + for ( int i = 0; i < messages.Count; ++i ) + { + SOS sos = messages[i]; + + if ( from.Map == Map.Britannia && from.InRange( sos.TargetLocation, 60 ) ) + return true; + } + } + + return base.CheckResources( from, tool, def, map, loc, timed ); + } + + public static bool IsOnBoat( Mobile m ) + { + if ( m.Z != -2 ) + return false; + + bool KeepSearching = true; + bool IsOnShip = false; + + foreach ( Item boatman in m.GetItemsInRange( 15 ) ) + { + if ( KeepSearching ) + { + if ( boatman is TillerMan ) + { + IsOnShip = true; + if ( IsOnShip == true ){ KeepSearching = false; } + } + } + } + return IsOnShip; + } + + public override Item Construct( Type type, Mobile from ) + { + if ( type == typeof( TreasureMap ) ) + { + int level = 1; + + return new TreasureMap( level, Map.Britannia ); + } + else if ( type == typeof( MessageInABottle ) ) + { + return new MessageInABottle(); + } + + Container pack = from.Backpack; + + if ( pack != null ) + { + List messages = pack.FindItemsByType(); + + for ( int i = 0; i < messages.Count; ++i ) + { + SOS sos = messages[i]; + + if ( from.Map == Map.Britannia && from.InRange( sos.TargetLocation, 60 ) ) + { + Item preLoot = null; + + switch ( Utility.Random( 8 ) ) + { + case 0: // Body parts + { + int[] list = new int[] + { + 0x1CDD, 0x1CE5, // arm + 0x1CE0, 0x1CE8, // torso + 0x1CE1, 0x1CE9, // head + 0x1CE2, 0x1CEC // leg + }; + + preLoot = new ShipwreckedItem( Utility.RandomList( list ) ); + break; + } + case 1: // Bone parts + { + int[] list = new int[] + { + 0x1AE0, 0x1AE1, 0x1AE2, 0x1AE3, 0x1AE4, // skulls + 0x1B09, 0x1B0A, 0x1B0B, 0x1B0C, 0x1B0D, 0x1B0E, 0x1B0F, 0x1B10, // bone piles + 0x1B15, 0x1B16 // pelvis bones + }; + + preLoot = new ShipwreckedItem( Utility.RandomList( list ) ); + break; + } + case 2: // Paintings and portraits + { + preLoot = new ShipwreckedItem( Utility.RandomPainting() ); + break; + } + case 3: // Pillows + { + preLoot = new ShipwreckedItem( Utility.Random( 0x13A4, 11 ) ); + break; + } + case 4: // Shells + { + preLoot = new ShipwreckedItem( Utility.Random( 0xFC4, 9 ) ); + break; + } + case 5: //Hats + { + if ( Utility.RandomBool() ) + preLoot = new SkullCap(); + else + preLoot = new TricorneHat(); + + break; + } + case 6: // Misc + { + int[] list = new int[] + { + 0x1EB5, // unfinished barrel + 0xA2A, // stool + 0xC1F, // broken clock + 0x1047, 0x1048, // globe + 0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4 // barrel staves + }; + + if ( Utility.Random( list.Length + 1 ) == 0 ) + preLoot = new Candelabra(); + else + preLoot = new ShipwreckedItem( Utility.RandomList( list ) ); + + break; + } + } + + if ( preLoot != null ) + { + if ( preLoot is IShipwreckedItem ) + ( (IShipwreckedItem)preLoot ).IsShipwreckedItem = true; + + return preLoot; + } + + LockableContainer chest; + + if ( sos.IsAncient ) + chest = new AncientChest(); + else + chest = new SunkenChest(); + + TreasureMapChest.Fill( chest, Math.Max( 1, Math.Max( 4, sos.Level ) ) ); + + if ( sos.IsAncient ) + chest.DropItem( new FabledFishingNet() ); + else + chest.DropItem( new SpecialFishingNet() ); + + chest.Movable = true; + chest.Locked = false; + chest.TrapType = TrapType.None; + chest.TrapPower = 0; + chest.TrapLevel = 0; + + sos.Delete(); + + return chest; + } + } + } + + return base.Construct( type, from ); + } + + public override bool Give( Mobile m, Item item, bool placeAtFeet ) + { + if ( item is TreasureMap || item is MessageInABottle || item is SpecialFishingNet ) + { + BaseCreature serp; + + if ( 0.25 > Utility.RandomDouble() ) + serp = new DeepSeaSerpent(); + else + serp = new SeaSerpent(); + + int x = m.X, y = m.Y; + + Map map = m.Map; + + for ( int i = 0; map != null && i < 20; ++i ) + { + int tx = m.X - 10 + Utility.Random( 21 ); + int ty = m.Y - 10 + Utility.Random( 21 ); + + LandTile t = map.Tiles.GetLandTile( tx, ty ); + + if ( t.Z == -5 && ( (t.ID >= 0xA8 && t.ID <= 0xAB) || (t.ID >= 0x136 && t.ID <= 0x137) ) && !Spells.SpellHelper.CheckMulti( new Point3D( tx, ty, -5 ), map ) ) + { + x = tx; + y = ty; + break; + } + } + + serp.MoveToWorld( new Point3D( x, y, -5 ), map ); + + serp.Home = serp.Location; + serp.RangeHome = 10; + + serp.PackItem( item ); + + m.SendLocalizedMessage( 503170 ); // Uh oh! That doesn't look like a fish! + + return true; // we don't want to give the item to the player, it's on the serpent + } + + if ( item is BigFish || item is WoodenChest || item is MetalGoldenChest ) + placeAtFeet = true; + + return base.Give( m, item, placeAtFeet ); + } + + public override void SendSuccessTo( Mobile from, Item item, HarvestResource resource ) + { + if ( item is BigFish ) + { + from.SendLocalizedMessage( 1042635 ); // Your fishing pole bends as you pull a big fish from the depths! + + ((BigFish)item).Fisher = from; + } + else if ( item is WoodenChest || item is MetalGoldenChest ) + { + from.SendLocalizedMessage( 503175 ); // You pull up a heavy chest from the depths of the ocean! + } + else + { + int number; + string name; + + if ( item is BaseMagicFish ) + { + number = 1008124; + name = "a mess of small fish"; + } + else if ( item is Fish ) + { + number = 1008124; + name = "a fish"; + } + else if ( item is BaseShoes ) + { + number = 1008124; + name = item.ItemData.Name; + } + else if ( item is TreasureMap ) + { + number = 1008125; + name = "a sodden piece of parchment"; + } + else if ( item is MessageInABottle ) + { + number = 1008125; + name = "a bottle, with a message in it"; + } + else if ( item is SpecialFishingNet ) + { + number = 1008125; + name = "a special fishing net"; // TODO: this is just a guess--what should it really be named? + } + else + { + number = 1043297; + + if ( (item.ItemData.Flags & TileFlag.ArticleA) != 0 ) + name = "a " + item.ItemData.Name; + else if ( (item.ItemData.Flags & TileFlag.ArticleAn) != 0 ) + name = "an " + item.ItemData.Name; + else + name = item.ItemData.Name; + } + + if ( number == 1043297 ) + from.SendLocalizedMessage( number, name ); + else + from.SendLocalizedMessage( number, true, name ); + } + } + + public override void OnHarvestStarted( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + base.OnHarvestStarted( from, tool, def, toHarvest ); + + int tileID; + Map map; + Point3D loc; + + if ( GetHarvestDetails( from, tool, toHarvest, out tileID, out map, out loc ) ) + Timer.DelayCall( TimeSpan.FromSeconds( 1.5 ), + delegate + { + Effects.SendLocationEffect( loc, map, 0x352D, 16, 4 ); + Effects.PlaySound( loc, map, 0x364 ); + } ); + } + + public override void OnHarvestFinished( Mobile from, Item tool, HarvestDefinition def, HarvestVein vein, HarvestBank bank, HarvestResource resource, object harvested ) + { + base.OnHarvestFinished( from, tool, def, vein, bank, resource, harvested ); + } + + public override object GetLock( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + return this; + } + + public override bool BeginHarvesting( Mobile from, Item tool ) + { + if ( !base.BeginHarvesting( from, tool ) ) + return false; + + from.SendLocalizedMessage( 500974 ); // What water do you want to fish in? + return true; + } + + public override bool CheckHarvest( Mobile from, Item tool ) + { + if ( !base.CheckHarvest( from, tool ) ) + return false; + + if ( from.Mounted ) + { + from.SendLocalizedMessage( 500971 ); // You can't fish while riding! + return false; + } + + return true; + } + + public override bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + if ( !base.CheckHarvest( from, tool, def, toHarvest ) ) + return false; + + if ( from.Mounted ) + { + from.SendLocalizedMessage( 500971 ); // You can't fish while riding! + return false; + } + + return true; + } + + public static int[] m_WaterTiles = new int[] + { + 0x00A8, 0x00A9, 0x00AA, 0x00AB, + 0x0136, 0x0137, + + 0x5797, 0x5798, 0x5799, 0x579A, 0x579B, 0x579C, + 0x746E, 0x746F, 0x7470, 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7476, 0x7477, 0x7478, 0x7479, 0x747A, 0x747B, 0x747C, 0x747ED, 0x747E, 0x747F, + 0x7480, 0x7481, 0x7482, 0x7483, 0x7484, 0x7485, + 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749A, 0x749B, 0x749C, 0x749D, 0x749E, + 0x74A0, 0x74A1, 0x74A2, 0x74A3, 0x74A4, 0x74A5, 0x74A6, 0x74A7, 0x74A8, 0x74A9, 0x74AA, 0x74AB, + 0x74B8, 0x74BA, 0x74BB, 0x74BD, 0x74BE, 0x74BF, + 0x74C0, 0x74C2, 0x74C3, 0x74C4, 0x74C5, 0x74C7, 0x74C8, 0x74C9, 0x74CA + }; + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Lumberjacking.cs b/Scripts/Engines/Harvest/Lumberjacking.cs new file mode 100644 index 0000000..9b00f62 --- /dev/null +++ b/Scripts/Engines/Harvest/Lumberjacking.cs @@ -0,0 +1,161 @@ +using System; +using Server; +using Server.Items; +using Server.Misc; + +namespace Server.Engines.Harvest +{ + public class Lumberjacking : HarvestSystem + { + private static Lumberjacking m_System; + + public static Lumberjacking System + { + get + { + if ( m_System == null ) + m_System = new Lumberjacking(); + + return m_System; + } + } + + private HarvestDefinition m_Definition; + + public HarvestDefinition Definition + { + get{ return m_Definition; } + } + + private Lumberjacking() + { + HarvestResource[] res = new HarvestResource[]{ new HarvestResource( 00.0, 00.0, 100.0, 500498, typeof( WoodBoard ) ) }; + HarvestVein[] veins = new HarvestVein[]{ new HarvestVein( 100.0, 0.0, res[0], null ) }; + + #region Lumberjacking + HarvestDefinition lumber = new HarvestDefinition(); + + // Resource banks are every 4x3 tiles + lumber.BankWidth = 4; + lumber.BankHeight = 3; + + // Every bank holds from 20 to 45 logs + lumber.MinTotal = 20; + lumber.MaxTotal = 45; + + // A resource bank will respawn its content every 20 to 30 minutes + lumber.MinRespawn = TimeSpan.FromMinutes( 20.0 ); + lumber.MaxRespawn = TimeSpan.FromMinutes( 30.0 ); + + lumber.Trade = Trades.Lumberjacking; + + // Set the list of harvestable tiles + lumber.Tiles = m_TreeTiles; + + // Players must be within 2 tiles to harvest + lumber.MaxRange = 2; + + // Ten logs per harvest action + lumber.ConsumedPerHarvest = 10; + + // The chopping effect + lumber.EffectActions = new int[]{ 13 }; + lumber.EffectSounds = new int[]{ 0x13E }; + lumber.EffectCounts = new int[]{ 1, 2, 2, 2, 3 }; + lumber.EffectDelay = TimeSpan.FromSeconds( 1.6 ); + lumber.EffectSoundDelay = TimeSpan.FromSeconds( 0.9 ); + + lumber.NoResourcesMessage = 500493; // There's not enough wood here to harvest. + lumber.FailMessage = 500495; // You hack at the tree for a while, but fail to produce any useable wood. + lumber.OutOfRangeMessage = 500446; // That is too far away. + lumber.PackFullMessage = 500497; // You can't place any wood into your backpack! + lumber.ToolBrokeMessage = 500499; // You broke your axe. + + lumber.Resources = res; + lumber.Veins = veins; + + lumber.RandomizeVeins = false; + + m_Definition = lumber; + Definitions.Add( lumber ); + #endregion + } + + public override bool CheckHarvest( Mobile from, Item tool ) + { + if ( !base.CheckHarvest( from, tool ) ) + return false; + + return true; + } + + public override bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + if ( !base.CheckHarvest( from, tool, def, toHarvest ) ) + return false; + + if ( tool.Parent != from ) + { + from.SendLocalizedMessage( 500487 ); // The axe must be equipped for any serious wood chopping. + return false; + } + + return true; + } + + public override void OnBadHarvestTarget( Mobile from, Item tool, object toHarvest ) + { + if ( toHarvest is Mobile ) + { + Mobile obj = (Mobile)toHarvest; + obj.PublicOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 500450 ); // You can only skin dead creatures. + } + else if ( toHarvest is Item ) + { + Item obj = (Item)toHarvest; + obj.PublicOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 500464 ); // Use this on corpses to carve away meat and hide + } + else if ( toHarvest is Targeting.StaticTarget || toHarvest is Targeting.LandTarget ) + from.SendLocalizedMessage( 500489 ); // You can't use an axe on that. + else + from.SendLocalizedMessage( 1005213 ); // You can't do that + } + + public override void OnHarvestStarted( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + base.OnHarvestStarted( from, tool, def, toHarvest ); + } + + public static void Initialize() + { + Array.Sort( m_TreeTiles ); + } + + #region Tile lists + private static int[] m_TreeTiles = new int[] + { + 0x4CCA, 0x4CCB, 0x4CCC, 0x4CCD, 0x4CD0, 0x4CD3, 0x4CD6, 0x4CD8, + 0x4CDA, 0x4CDD, 0x4CE0, 0x4CE3, 0x4CE6, 0x4CF8, 0x4CFB, 0x4CFE, + 0x4D01, 0x4D41, 0x4D42, 0x4D43, 0x4D44, 0x4D57, 0x4D58, 0x4D59, + 0x4D5A, 0x4D5B, 0x4D6E, 0x4D6F, 0x4D70, 0x4D71, 0x4D72, 0x4D84, + 0x4D85, 0x4D86, 0x4D94, 0x4D98, 0x4D9C, 0x4DA0, 0x4DA4, 0x4DA8, + 0x4CCE, 0x4CCF, 0x4CD1, 0x4CD2, 0x4CD4, 0x4CD5, 0x4CD7, 0x4CD9, + 0x4CDB, 0x4CDC, 0x4CDE, 0x4CDF, 0x4CE1, 0x4CE2, 0x4CE4, 0x4CE5, + 0x4CE7, 0x4CE8, 0x4CF9, 0x4CFA, 0x4CFC, 0x4CFD, 0x4CFF, 0x4D00, + 0x4D02, 0x4D03, 0x4D45, 0x4D46, 0x4D47, 0x4D48, 0x4D49, 0x4D4A, + 0x4D4B, 0x4D4C, 0x4D4D, 0x4D4E, 0x4D4F, 0x4D50, 0x4D51, 0x4D52, + 0x4D53, 0x4D5C, 0x4D5D, 0x4D5E, 0x4D5F, 0x4D60, 0x4D61, 0x4D62, + 0x4D63, 0x4D64, 0x4D65, 0x4D66, 0x4D67, 0x4D68, 0x4D69, 0x4D73, + 0x4D74, 0x4D75, 0x4D76, 0x4D77, 0x4D78, 0x4D79, 0x4D7A, 0x4D7B, + 0x4D7C, 0x4D7D, 0x4D7E, 0x4D7F, 0x4D87, 0x4D88, 0x4D89, 0x4D8A, + 0x4D8B, 0x4D8C, 0x4D8D, 0x4D8E, 0x4D8F, 0x4D90, 0x4D95, 0x4D96, + 0x4D97, 0x4D99, 0x4D9A, 0x4D9B, 0x4D9D, 0x4D9E, 0x4D9F, 0x4DA1, + 0x4DA2, 0x4DA3, 0x4DA5, 0x4DA6, 0x4DA7, 0x4DA9, 0x4DAA, 0x4DAB, + 0x52B5, 0x52B6, 0x52B7, 0x52B8, 0x52B9, 0x52BA, 0x52BB, 0x52BC, + 0x52BD, 0x52BE, 0x52BF, 0x52C0, 0x52C1, 0x52C2, 0x52C3, 0x52C4, + 0x52C5, 0x52C6, 0x52C7, 0x624A, 0x624C, 0x624D, 0x58D4, 0x58D5, + 0x58D6, 0x58D7, 0x58D8, 0x58D9, 0x58DA, 0x58DB, 0x58DC + }; + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Engines/Harvest/Mining.cs b/Scripts/Engines/Harvest/Mining.cs new file mode 100644 index 0000000..07d487e --- /dev/null +++ b/Scripts/Engines/Harvest/Mining.cs @@ -0,0 +1,211 @@ +using System; +using Server; +using Server.Items; +using Server.Misc; +using Server.Mobiles; +using Server.Targeting; + +namespace Server.Engines.Harvest +{ + public class Mining : HarvestSystem + { + private static Mining m_System; + + public static Mining System + { + get + { + if ( m_System == null ) + m_System = new Mining(); + + return m_System; + } + } + + private HarvestDefinition m_OreAndStone; + + public HarvestDefinition OreAndStone + { + get{ return m_OreAndStone; } + } + + private Mining() + { + HarvestResource[] res = new HarvestResource[]{ new HarvestResource( 00.0, 00.0, 100.0, 503044, typeof( IronOre ) ) }; + HarvestVein[] veins = new HarvestVein[]{ new HarvestVein( 100.0, 0.0, res[0], null ) }; + + #region Mining for ore and stone + HarvestDefinition oreAndStone = m_OreAndStone = new HarvestDefinition(); + + // Resource banks are every 8x8 tiles + oreAndStone.BankWidth = 8; + oreAndStone.BankHeight = 8; + + // Every bank holds from 10 to 34 ore + oreAndStone.MinTotal = 10; + oreAndStone.MaxTotal = 34; + + // A resource bank will respawn its content every 10 to 20 minutes + oreAndStone.MinRespawn = TimeSpan.FromMinutes( 10.0 ); + oreAndStone.MaxRespawn = TimeSpan.FromMinutes( 20.0 ); + + oreAndStone.Trade = Trades.Mining; + + // Set the list of harvestable tiles + oreAndStone.Tiles = m_MountainAndCaveTiles; + + // Players must be within 2 tiles to harvest + oreAndStone.MaxRange = 2; + + // One ore per harvest action + oreAndStone.ConsumedPerHarvest = 1; + + // The digging effect + oreAndStone.EffectActions = new int[]{ 11 }; + oreAndStone.EffectSounds = new int[]{ 0x125, 0x126 }; + oreAndStone.EffectCounts = new int[]{ 1 }; + oreAndStone.EffectDelay = TimeSpan.FromSeconds( 1.6 ); + oreAndStone.EffectSoundDelay = TimeSpan.FromSeconds( 0.9 ); + + oreAndStone.NoResourcesMessage = 503040; // There is no metal here to mine. + oreAndStone.DoubleHarvestMessage = 503042; // Someone has gotten to the metal before you. + oreAndStone.TimedOutOfRangeMessage = 503041; // You have moved too far away to continue mining. + oreAndStone.OutOfRangeMessage = 500446; // That is too far away. + oreAndStone.FailMessage = 503043; // You loosen some rocks but fail to find any useable ore. + oreAndStone.PackFullMessage = 1010481; // Your backpack is full, so the ore you mined is lost. + oreAndStone.ToolBrokeMessage = 1044038; // You have worn out your tool! + + oreAndStone.Resources = res; + oreAndStone.Veins = veins; + + oreAndStone.RandomizeVeins = false; + + Definitions.Add( oreAndStone ); + #endregion + } + + public override Type GetResourceType( Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource ) + { + return base.GetResourceType( from, tool, def, map, loc, resource ); + } + + public override bool CheckHarvest( Mobile from, Item tool ) + { + if ( !base.CheckHarvest( from, tool ) ) + return false; + + if ( from.Mounted ) + { + from.SendLocalizedMessage( 501864 ); // You can't mine while riding. + return false; + } + else if ( from.IsBodyMod && !from.Body.IsHuman ) + { + from.SendLocalizedMessage( 501865 ); // You can't mine while polymorphed. + return false; + } + + return true; + } + + public override void SendSuccessTo( Mobile from, Item item, HarvestResource resource ) + { + base.SendSuccessTo( from, item, resource ); + } + + public override bool CheckHarvest( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + if ( !base.CheckHarvest( from, tool, def, toHarvest ) ) + return false; + + if ( from.Mounted ) + { + from.SendLocalizedMessage( 501864 ); // You can't mine while riding. + return false; + } + else if ( from.IsBodyMod && !from.Body.IsHuman ) + { + from.SendLocalizedMessage( 501865 ); // You can't mine while polymorphed. + return false; + } + + return true; + } + + private static int[] m_Offsets = new int[] + { + -1, -1, + -1, 0, + -1, 1, + 0, -1, + 0, 1, + 1, -1, + 1, 0, + 1, 1 + }; + + public override bool BeginHarvesting( Mobile from, Item tool ) + { + if ( !base.BeginHarvesting( from, tool ) ) + return false; + + from.SendLocalizedMessage( 503033 ); // Where do you wish to dig? + return true; + } + + public override void OnHarvestStarted( Mobile from, Item tool, HarvestDefinition def, object toHarvest ) + { + base.OnHarvestStarted( from, tool, def, toHarvest ); + } + + public override void OnBadHarvestTarget( Mobile from, Item tool, object toHarvest ) + { + if ( toHarvest is LandTarget ) + from.SendLocalizedMessage( 501862 ); // You can't mine there. + else + from.SendLocalizedMessage( 501863 ); // You can't mine that. + } + + #region Tile lists + private static int[] m_MountainAndCaveTiles = new int[] + { + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 296, 296, 297, + 321, 322, 323, 324, 467, 468, 469, 470, 471, 472, + 473, 474, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 492, 493, 494, 495, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 610, 611, 612, 613, + + 1010, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, + 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1771, 1772, + 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, + 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1801, 1802, + 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1811, 1812, 1813, + 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, + 1824, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, + 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, + 1850, 1851, 1852, 1853, 1854, 1861, 1862, 1863, 1864, 1865, + 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, + 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1981, + 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, + 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, + 2002, 2003, 2004, 2028, 2029, 2030, 2031, 2032, 2033, 2100, + 2101, 2102, 2103, 2104, 2105, + + 0x453B, 0x453C, 0x453D, 0x453E, 0x453F, 0x4540, 0x4541, + 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548, + 0x4549, 0x454A, 0x454B, 0x454C, 0x454D, 0x454E, 0x454F + }; + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/HelpGump.cs b/Scripts/Engines/Help/HelpGump.cs new file mode 100644 index 0000000..38b9597 --- /dev/null +++ b/Scripts/Engines/Help/HelpGump.cs @@ -0,0 +1,241 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Menus; +using Server.Menus.Questions; +using Server.Accounting; +using Server.Multis; +using Server.Mobiles; +using Server.Regions; +using System.Collections; +using System.Collections.Generic; +using Server.Commands; +using Server.Misc; +using Server.Items; +using System.Globalization; + +namespace Server.Engines.Help +{ + public class HelpGump : Gump + { + public static void Initialize() + { + EventSink.HelpRequest += new HelpRequestEventHandler( EventSink_HelpRequest ); + } + + private static void EventSink_HelpRequest( HelpRequestEventArgs e ) + { + foreach ( Gump g in e.Mobile.NetState.Gumps ) + { + if ( g is HelpGump ) + return; + } + + e.Mobile.SendGump( new HelpGump( e.Mobile, 1 ) ); + } + + public static bool CheckCombat( Mobile m ) + { + for ( int i = 0; i < m.Aggressed.Count; ++i ) + { + AggressorInfo info = m.Aggressed[i]; + + if ( DateTime.Now - info.LastCombatTime < TimeSpan.FromSeconds( 30.0 ) ) + return true; + } + + return false; + } + + public HelpGump( Mobile from, int page ) : base( 25, 50 ) + { + this.Closable=true; + this.Disposable=true; + this.Dragable=true; + this.Resizable=false; + + + + + AddPage(0); + AddImage(0, 0, 2520); + AddImage(38, 0, 2521); + AddImage(208, 0, 2522); + AddImage(0, 38, 2523); + AddImage(0, 150, 2523); + AddImage(0, 262, 2523); + AddImage(0, 374, 2523); + AddImage(0, 486, 2523); + AddImage(209, 38, 2525); + AddImage(209, 150, 2525); + AddImage(209, 262, 2525); + AddImage(209, 374, 2525); + AddImage(209, 486, 2525); + AddImage(0, 598, 2526); + AddImage(38, 598, 2527); + AddImage(208, 598, 2528); + AddImage(37, 37, 2524); + AddImage(36, 146, 2524); + AddImage(36, 255, 2524); + AddImage(37, 362, 2524); + AddImage(35, 472, 2524); + AddImage(36, 486, 2524); + AddImage(40, 38, 2524); + AddImage(41, 147, 2524); + AddImage(41, 252, 2524); + AddImage(39, 349, 2524); + AddImage(39, 439, 2524); + AddImage(39, 488, 2524); + AddImage(246, 32, 2520); + AddImage(284, 32, 2521); + AddImage(1127, 32, 2522); + AddImage(246, 70, 2523); + AddImage(246, 182, 2523); + AddImage(246, 294, 2523); + AddImage(246, 406, 2523); + AddImage(246, 518, 2523); + AddImage(1128, 70, 2525); + AddImage(1128, 182, 2525); + AddImage(1128, 294, 2525); + AddImage(1128, 406, 2525); + AddImage(1128, 518, 2525); + AddImage(246, 630, 2526); + AddImage(284, 630, 2527); + AddImage(1127, 630, 2528); + AddImage(283, 69, 2524); + AddImage(282, 178, 2524); + AddImage(282, 287, 2524); + AddImage(283, 394, 2524); + AddImage(281, 504, 2524); + AddImage(282, 518, 2524); + AddImage(286, 70, 2524); + AddImage(287, 179, 2524); + AddImage(287, 284, 2524); + AddImage(285, 381, 2524); + AddImage(285, 471, 2524); + AddImage(285, 520, 2524); + AddImage(454, 32, 2534); + AddImage(454, 630, 2535); + AddImage(453, 69, 2524); + AddImage(452, 178, 2524); + AddImage(452, 287, 2524); + AddImage(453, 394, 2524); + AddImage(451, 504, 2524); + AddImage(452, 518, 2524); + AddImage(456, 70, 2524); + AddImage(457, 179, 2524); + AddImage(457, 284, 2524); + AddImage(455, 381, 2524); + AddImage(455, 471, 2524); + AddImage(455, 520, 2524); + AddImage(624, 32, 2521); + AddImage(624, 630, 2527); + AddImage(623, 69, 2524); + AddImage(622, 178, 2524); + AddImage(622, 287, 2524); + AddImage(623, 394, 2524); + AddImage(621, 504, 2524); + AddImage(622, 518, 2524); + AddImage(626, 70, 2524); + AddImage(627, 179, 2524); + AddImage(627, 284, 2524); + AddImage(625, 381, 2524); + AddImage(625, 471, 2524); + AddImage(625, 520, 2524); + AddImage(792, 32, 2534); + AddImage(792, 630, 2535); + AddImage(791, 69, 2524); + AddImage(790, 178, 2524); + AddImage(790, 287, 2524); + AddImage(791, 394, 2524); + AddImage(789, 504, 2524); + AddImage(790, 518, 2524); + AddImage(794, 70, 2524); + AddImage(795, 179, 2524); + AddImage(795, 284, 2524); + AddImage(793, 381, 2524); + AddImage(793, 471, 2524); + AddImage(793, 520, 2524); + AddImage(960, 32, 2521); + AddImage(960, 630, 2527); + AddImage(959, 69, 2524); + AddImage(958, 178, 2524); + AddImage(958, 287, 2524); + AddImage(959, 394, 2524); + AddImage(957, 504, 2524); + AddImage(958, 518, 2524); + AddImage(962, 70, 2524); + AddImage(963, 179, 2524); + AddImage(963, 284, 2524); + AddImage(961, 381, 2524); + AddImage(961, 471, 2524); + AddImage(961, 520, 2524); + + + AddHtml( 26, 14, 200, 20, @"
HELP
", (bool)false, (bool)false); + + + int v = 35; + int b = 60; + int i = 15; + int s = 0; + string c = "5c4c32"; + + + s++; i=i+30; if ( page == s ){ c = "2a335d"; } else { c = "5c4c32"; } + AddButton(v, i, 2536, 2536, 1, GumpButtonType.Reply, 0); + AddHtml( b, i+2, 156, 20, @"Basics", (bool)false, (bool)false); + + s++; i=i+30; if ( page == s ){ c = "2a335d"; } else { c = "5c4c32"; } + AddButton(v, i, 2536, 2536, 2, GumpButtonType.Reply, 0); + AddHtml( b, i+2, 156, 20, @"Trades", (bool)false, (bool)false); + + s++; i=i+30; if ( page == s ){ c = "2a335d"; } else { c = "5c4c32"; } + AddButton(v, i, 2536, 2536, 3, GumpButtonType.Reply, 0); + AddHtml( b, i+2, 156, 20, @"Guilds", (bool)false, (bool)false); + + s++; i=i+30; if ( page == s ){ c = "2a335d"; } else { c = "5c4c32"; } + AddButton(v, i, 2536, 2536, 4, GumpButtonType.Reply, 0); + AddHtml( b, i+2, 156, 20, @"Homes", (bool)false, (bool)false); + + s++; i=i+30; if ( page == s ){ c = "2a335d"; } else { c = "5c4c32"; } + AddButton(v, i, 2536, 2536, 5, GumpButtonType.Reply, 0); + AddHtml( b, i+2, 156, 20, @"Ships", (bool)false, (bool)false); + + s++; i=i+30; if ( page == s ){ c = "2a335d"; } else { c = "5c4c32"; } + AddButton(v, i, 2536, 2536, 6, GumpButtonType.Reply, 0); + AddHtml( b, i+2, 156, 20, @"Skills", (bool)false, (bool)false); + + + AddHtml( 298, 46, 604, 20, @"" + ( HelpText( page, 1 ) ).ToUpper() + "", (bool)false, (bool)false); + + + AddHtml( 284, 79, 844, 547, @"" + HelpText( page, 3 ) + "", (bool)false, (bool)(bool.Parse(HelpText( page, 2 )))); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + + if ( info.ButtonID > 0 ) + from.SendGump( new Server.Engines.Help.HelpGump( from, info.ButtonID ) ); + } + + public static string HelpText( int page, int part ) + { + string val = ""; + + if ( page == 1 ){ val = HPBasics.HelpPageBasics( part ); } + else if ( page == 2 ){ val = HPTrades.HelpPageTrades( part ); } + else if ( page == 3 ){ val = HPGuilds.HelpPageGuilds( part ); } + else if ( page == 4 ){ val = HPHomes.HelpPageHomes( part ); } + else if ( page == 5 ){ val = HPShips.HelpPageShips( part ); } + else if ( page == 6 ){ val = HPSkills.HelpPageSkills( part ); } + + + + return val; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/Index/HelpPageBasics.cs b/Scripts/Engines/Help/Index/HelpPageBasics.cs new file mode 100644 index 0000000..b43007c --- /dev/null +++ b/Scripts/Engines/Help/Index/HelpPageBasics.cs @@ -0,0 +1,28 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class HPBasics + { + public static string HelpPageBasics( int part ) + { + string title = "Basics"; + string scroll = "false"; + +string text = @"This is the main page! + + + +"; + + if ( part == 1 ) + return title; + else if ( part == 2 ) + return scroll; + + return text; + + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/Index/HelpPageGuilds.cs b/Scripts/Engines/Help/Index/HelpPageGuilds.cs new file mode 100644 index 0000000..f7f581b --- /dev/null +++ b/Scripts/Engines/Help/Index/HelpPageGuilds.cs @@ -0,0 +1,73 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class HPGuilds + { + public static string HelpPageGuilds( int part ) + { + + string title = "Guilds"; + string scroll = "true"; + +string text = @"Player characters can start their own guilds, where they need only a guildstone and a house. Deeds for guildstones can be purchase from a provisioner. + +There are also local guilds one can join. Some join them for increased learning, and thus quicker acquisition of skills. Other guild also may provide an advantage toward a trade skill. Search the towns and cities for a guildmaster of your desired guild. Single click on them and choose the JOIN option. They will tell you the price to join, where you can hand them the gold if you have it. If you are already a member of a guild, they will inform you that you need to resign from that guild first. Find your current guildmaster, and single click on them to choose the RESIGN option. Then you can join another guild. If you have over 4 murders reported against you, you will not be able to join any guilds and you will be suspended from any guild you are a member of. The exceptions to this are the Assassins Guild and Thieves Guild. Guildmasters will sell things to members as well. + +Below are the various local guilds you can join: + +ALCHEMISTS GUILD +Members of this guild have an advantage toward creating potions. + +ASSASSINS GUILD +This dark guild usually attracts members that want an increased learning in fencing, hiding, poisoning, and stealth. + +BARDS GUILD +Musicians join this guild to have an increased learning in music, discordance, peacemaking, and provocation. + +BLACKSMITHS GUILD +Guild members have an advantage toward mining and blacksmithing. + +CARPENTERS GUILD +Members have an advantage toward the woodworking trade. + +HEALERS GUILD +Those that join this guild have a much increased learning in using bandages. Only guild members are able to resurrect another with bandages. + +LIBRARIANS GUILD +Those that work on scribing magic scrolls, drawing maps, or deciphering treasure maps often join this guild to get an advantage in doing such tasks. + +MAGES GUILD +Joining this guild gives the aspiring wizard an improved learning in magery, meditation, and concentration. + +MARINERS GUILD +Fisherman often join this guild to have a much improved chance of acquiring things below the surface of the sea. Mariner guild members can also dock or launch their ship from any shore in the land. + +RANGERS GUILD +Members of this guild get an advantage when crafting bows, arrows, or bolts. Rangers also have an increased learning in archery, tactics, and tracking. + +TAILORS GUILD +Having an advantage in the tailoring trade come with membership in this guild. + +THIEVES GUILD +Those seeking to pilfer things that don't belong to them, will seek out this guild. Members have an increased learning in hiding, lockpicking, stealing, and stealth. + +TINKERS GUILD +Members of this guild get an advantage when creating things within this trade. + +WARRIORS GUILD +Those seeking to be great warriors, eventually join this elite guild. Members have an increased learning in bludgeoning, fencing, parrying, swords, and tactics. + +"; + + if ( part == 1 ) + return title; + else if ( part == 2 ) + return scroll; + + return text; + + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/Index/HelpPageHomes.cs b/Scripts/Engines/Help/Index/HelpPageHomes.cs new file mode 100644 index 0000000..1f62755 --- /dev/null +++ b/Scripts/Engines/Help/Index/HelpPageHomes.cs @@ -0,0 +1,86 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class HPHomes + { + public static string HelpPageHomes( int part ) + { + + string title = "Trades"; + string scroll = "true"; + +string text = @"Trades are secondary skills you can use to produce or create items. All characters can use any of the trades available in the game as the base value of trade skills is 10. The proficiency in trades is dependent on the character's statistics (strength, intelligence, and dexterity). The higher the appropriate statistics, the better the trade skill. Most trades are influenced by a primary attribute, and slightly affected by a secondary attribute. These are listed with the trades below, where the primary is first, followed by the secondary. If you are a member of the associated guild, you will get a bonus of 20 to the trade(s). Like ordinary skills, trade skills cannot be higher than 100. Trade skills are not a part of a characters overall regular skill cap. The trade skills are listed below: + +ALCHEMY +- Int / Dex +- Alchemists Guild +Get some empty bottles, a mortar & pestle, and some reagents to start creating potions. Reagents used are black pearl, bloodmoss, garlic, ginseng, mandrake root, nightshade, spiders silk, and sulfurous ash. + +BLACKSMITHING +- Str / Dex +- Blacksmiths Guild +Using a tool like tongs or a hammer, with some ingots, and you can begin crafting armor and weapons. You can also repair such items that are made of metal, but you need to be near an anvil and forge to perform this trade. + +CARPENTRY +- Dex / Str +- Carpentry Guild +Tools, like a saw, can be used with logs to create items like chairs, tables, or staves. You can also create stone chairs or stone tables if you have the right amount of ore. + +CARTOGRAPHY +- Int / Dex +- Librarians Guild +With a mapmaking pen and some blank scrolls, you can start mapping the area around you. These maps can come in handy as sea charts as well, plotting courses to give to your ship's tillerman. A good cartographer can also decipher treasure maps, to discover where they are buried. + +COOKING +- Int / Dex +Using an item like a frying pan, you can take various ingredients to create edible foods. Some ingredients can be purchases where others can be acquired from gardens. You can also harvest wheat and use a nearby mill to create some flour. + +FISHING +- Str / Dex +- Mariners Guild +Grab a fishing pole, place it in your hand, and use it to cast a line onto the water. This trade is mostly a way to feed yourself with fresh fish, but some use the skill to help them learn the fates of discovered messages in bottles. Also using fishing nets is something fisherman do. + +FLETCHING +- Dex / Str +- Rangers Guild +With some fletching tools, you can take some logs and create bows and arrows. For arrows you will need some feathers, but killing some birds will help with that. Use a bladed item (dagger, sword, etc.) on a dead bird to cut the feathers off. You can also repair bows. + +INSCRIPTION +- Int / Dex +- Librarians Guild +Using a scribe pen and some blank scrolls, mages often use this to create scrolls from the spells they have learned. Creating a scroll requires a spellbook with the spell already in it, and also the reagents required to cast the spell. + +LUMBERJACKING +- Str / Dex +- Carpentry Guild +Grab an axe, double click it, and then target a tree to chop some wood. Logs are pretty heavy so you may want to acquire a pack mule from the local stable master to help you haul it away. Logs can be used for carpentry or fletching. + +MINING +- Str +- Blacksmiths Guild +With a shovel or pickaxe, you can go along a mountainside or into a cave and dig up some ore. Ore is pretty heavy so you may want to acquire a pack mule from the local stable master to help you haul it away. Using the ore on a forge will turn that into ingots you can use for blacksmithing. + +TAILORING +- Dex / Int +- Tailors Guild +A sewing kit can be used to make some elegant clothing, leather armor, and even stitch bones together to make some horrific bone armor. You can repair such armor with this trade as well. Leather can be acquired from skinning many slain creatures by using a bladed item (dagger, sword, etc.) on the dead creature. Using scissors on the acquired hides will turn it into leather you can use. Bones can be found on slain skeletal creatures. To acquire cloth, you can buy it or you can pick the cotton and flax from gardens and use that on a spinning wheel. Then you can use the thread on a loom to make some cloth. You can do something similar by sheering sheep. Using scissors on the bolts of cloth will produce sheets of cloth you can craft with. Using scissors on cut cloth will turn that into bandages, which is used with the healing skill. + +TINKERING +- Dex / Int +- Tinkers Guild +Tinkering is a handy craft as it allows you to make many tools that are used for other trades. With a set of tinker tools, and usually some ingots, you can create such items. You can even crush gems into a crystal powder and make glass items like bottles and vials. Just drop some gems onto a mortar and pestle and you will grind it into this fine powder. + +"; + + if ( part == 1 ) + return title; + else if ( part == 2 ) + return scroll; + + return text; + + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/Index/HelpPageShips.cs b/Scripts/Engines/Help/Index/HelpPageShips.cs new file mode 100644 index 0000000..caf1159 --- /dev/null +++ b/Scripts/Engines/Help/Index/HelpPageShips.cs @@ -0,0 +1,60 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class HPShips + { + public static string HelpPageShips( int part ) + { + string days = ((int)(Server.Misc.Settings. BoatDelete())).ToString(); + + string title = "Ships"; + string scroll = "true"; + +string text = @"If one wants to venture out onto the high seas, they will need to acquire a ship. Shipwrights sell such vessels, but sometimes a provisioner may have a small ship for sale as well. When you buy a ship, you will be given a deed that you would use near a dock to launch your new ship. When you choose a valid place for your ship, it will appear on the sea where a key will be provided in your backpack and another in your chest back at the inn. You can use this key by double clicking it and then selecting the side plank doors of the ship to either lock or unlock them. + +To board your ship, you can double click the side door of the boat to extend the plank. You can then double click the plank to board your ship. To disembark, double click the door again to extend the plank and then walk onto it. You may have to step on and off a couple of times until you disembark onto land. + +While on your ship, double click the tillerman to have a navigation window open. This will help you navigate your ship on the sea. If you want to rename your ship, then select the shipwright sign symbol on the lower right of this window. There is also a small X button near that if you want to close the navigation window. Much of the other buttons consists of arrows to steer your ship, drop or raise the anchor, and even extend or close the planks. + +To dock your ship, you must first ensure that the hold is clear and the deck is clean. Then drop the anchor and disembark your ship. Once on shore, you can double click the tillerman to get a confirmation window about docking your ship. If this window does not appear, wait a few seconds and try again. Docking your ship will place a small ship model in your backpack that you can take with you and launch elsewhere. + +Ships come in different sizes, and you should buy a ship that will hold the amount of goods you need it to. Below is a list of ships you can get: + +Small Ship +Hold: 1,000 stones of weight + +Small Dragon Ship +Hold: 1,400 stones of weight + +Medium Ship +Hold: 1,800 stones of weight + +Medium Dragon Ship +Hold: 2,200 stones of weight + +Large Ship +Hold: 2,600 stones of weight + +Large Dragon Ship +Hold: 3,200 stones of weight + +Each ship has a hold at the front, that you can access like any other container by double clicking it. You cannot dock a ship while there are items in this hold or on the deck. You must be near a dock to launch or dock your ship. Being near a home you own will also allow you to do these actions. A member of the Mariners Guild can launch or dock their ship from any shore in the land. + +Ships not only allow you to travel to far off lands, but they also provide different types of items to be fished up from the sea as opposed to just fishing from the shore. You could battle hideous sea creatures, or find a message in a bottle that contains a note to some sunken treasure. + +An unattended ship will eventually have its hold rot and sink into the ocean. "; + +text = text + "This will occur if nobody uses the ship within about " + days + " real world days."; + + if ( part == 1 ) + return title; + else if ( part == 2 ) + return scroll; + + return text; + + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/Index/HelpPageSkills.cs b/Scripts/Engines/Help/Index/HelpPageSkills.cs new file mode 100644 index 0000000..0fddf64 --- /dev/null +++ b/Scripts/Engines/Help/Index/HelpPageSkills.cs @@ -0,0 +1,107 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class HPSkills + { + public static string HelpPageSkills( int part ) + { + string days = ((int)(Server.Misc.Settings. BoatDelete())).ToString(); + + string title = "Skills"; + string scroll = "true"; + +string text = @"There are 25 available skills, and they rank from 0 to 100. Some of your attributes (strength, dexterity, or intelligence) can affect these values. A character has the opportunity to acquire a total of 700 skill points that can be gained. Once a character acquires 700 skill points, they can gain no more. A character can manage these gains and losses, however, and they would do that by using the SKILLS button on their character's PAPERDOLL. Each skill has arrows that can be set to gain, lower, or lock. So if you want to train a new skill, but are out of available points to gain, you can set a current skill to lower. If you want a skill to stop advancing, you can lock it at that value. + +Some skills are used naturally during gameplay, while others have an action button associated with it. You can identify these on the SKILLS window if they have a blue gem icon on the left. You can click this gem to activate the skill, you or can click and drag the skill name from the SKILLS window, onto the view screen. A button will appear that will let you use the skill, and you can place that quick button wherever you want. + +Below are the available skills, and a description of each: + +ARCHERY +Determines the accuracy and effectiveness with bows and crossbows. You can do some rudimentary practicing on archery buttes. + +BLUDGEONING +This skill is used for blunt weapons like staves, maces, mauls, whips, or clubs. You can do some rudimentary practicing on training dummies. Attacks can provide a bonus when averaging a warrior's skill with bludgeoning, swords, and fencing weapons. + +CONCENTRATION +Wizards often practice this skill, that makes their spells more effective. It also helps them use less mana for casting spells. + +DISCORDANCE +This is a bardic ability, where a musical instrument can be used to play a song that causes another to fight less effectively. + +DODGING +This provides the ability to dodge physical attacks from others. It is influenced by dexterity and the amount of armor worn. The more armor (and heavier the armor) being worn will reduce the chance to dodge. It may also help one avoid dungeon floor and wall traps. + +FENCING +This skill is used for piercing weapons like spears, pikes, rapiers, daggers, forks, or a kryss. You can do some rudimentary practicing on training dummies. Attacks can provide a bonus when averaging a warrior's skill with bludgeoning, swords, and fencing weapons. + +HAND-TO-HAND +Using your bare hands for combat isn't the most effective of offensive skills, but it does provide ways for mages to be more defensive and effective. It has the benefits of faster spell casting and faster spell casting recovery. It also helps mages perhaps avoid having their spells interrupted. You can do some rudimentary practicing on training dummies. + +HEALING +Bandages are used for this skill, and will allow for one to heal another or even cure poisons if talented enough. As a healer gets better with this skill, their ability to wrap a bandage is quicker. Those in the Healers Guild are said to be able to resurrect others with this method. + +HIDING +This allows one to hide from others. Someone with revealing magic, or a good searching skill, may be able to find you. Hiding is also important for being able to walk around stealthily. + +LOCKPICKING +Using lockpicks, a good thief can bypass almost any locked chest or dungeon door. Where most leave a dungeon with treasure, thieves often leave with much more since they can open what others cannot. + +MAGERY +The art of magic can be powerful. Seek a mage to acquire a spellbook and some scrolls to get started. Do not forget to buy reagents, as spells require them to cast. The spellbook will inform you on everything you need to know about magery. Hovering your cursor over the spell page icon will briefly describe the spell for you. + +MEDITATION +The ability to regain mana quickly is quite beneficial for a mage. This skill improves that recovery. + +MUSICIANSHIP +This is the art of playing musical instruments. Without this skill, then a bard would not be able to use skills like discordance, peacemaking, and provocation. + +PARRYING +Wielding a shield, a warrior can possibly avoid or reduce damages from physical attacks. + +PEACEMAKING +Using this skill with an instrument will put even the angriest monster at ease, making them calm and unwilling to fight. + +POISONING +Using poisons on bladed weapons, can only be accomplished with this skill. The better the skill, the deadlier of poisons one can use. Use the skill on a bottle of poison, and select the edged weapon you wish to poison. Whenever you strike an opponent with the weapon, they will also be poisoned if they are not immune to such things. If you ever want to wipe the poison off of the blade, then use an oil cloth to clean it. + +PROVOCATION +Playing the proper musical tune will cause creatures to fight each other instead of you or your comrades. + +REMOVE TRAPS +This skill can actively be used on containers and dungeon doors, and passively checked when passing near dungeon floor and wall traps. If successful, you would render the trap useless. + +RESISTING SPELLS +The ability to avoid the effects of spells, or lessen the negative effects of spells, is determined by this skill. + +SEARCHING +If you want to find a hidden creature, then you would use this skill to do that. This skill is also helpful in finding more treasure in dungeons, from both creatures and containers. Searching for more treasure is also enhanced if you have recently been magically night sighted. Holding a lit lantern, torch, or candle in your hands also enhances the search for hidden treasure. + +STEALING +Stealing is seldom employed by thieves to take things from citizens, but more used for taking from monstrous creatures or murderous humanoids. You can double click a creature to open their pack, or double click a human to open their PAPERDOLL and then double click their backpack. Your stealing skill will be tested to see if you can peek into the pack. If you manage to open it, then you can try to take things from it. You must have both hands free to steal, and you cannot steal things from creatures if they are too heavy. Stealing is also used to take things from ornate dungeon chests, that require a sleight of hand to grab before they magically vanishing. Stealing from these chests do not have the weight restriction as creatures have, so you can attempt to steal anything within the chest. You can do some rudimentary practicing on pickpocket dips. + +STEALTH +The better your hiding skill, the better you can use the stealth skill. Walking around without being noticed can be beneficial to anyone, but this skill is often used by rangers, thieves, and assassins. The amount and weight of equipped armor pieces will affect this ability, so the lighter your gear the easier it is to sneak around. Wearing heavier armor can help you get better with this skill. + +SWORDSMANSHIP +This skill is used for sharp weapons like swords, axes, and polearms like halberds. You can do some rudimentary practicing on training dummies. Attacks can provide a bonus when averaging a warrior's skill with bludgeoning, swords, and fencing weapons. + +TACTICS +This is a general warrior skill, that allows for more effective attacks with weapons. Archers also can benefit from this with their ranged weapons, as well as those that fight hand-to-hand. + +TRACKING +Following the path of nearby creatures can come in handy when hunting for prey. The better you are at tracking, the further you can track them. + +"; + + if ( part == 1 ) + return title; + else if ( part == 2 ) + return scroll; + + return text; + + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/Index/HelpPageTrades.cs b/Scripts/Engines/Help/Index/HelpPageTrades.cs new file mode 100644 index 0000000..6e066b5 --- /dev/null +++ b/Scripts/Engines/Help/Index/HelpPageTrades.cs @@ -0,0 +1,86 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class HPTrades + { + public static string HelpPageTrades( int part ) + { + + string title = "Trades"; + string scroll = "true"; + +string text = @"Trades are secondary skills you can use to produce or create items. All characters can use any of the trades available in the game as the base value of trade skills is 10. The proficiency in trades is dependent on the character's statistics (strength, intelligence, and dexterity). The higher the appropriate statistics, the better the trade skill. Most trades are influenced by a primary attribute, and slightly affected by a secondary attribute. These are listed with the trades below, where the primary is first, followed by the secondary. If you are a member of the associated guild, you will get a bonus of 20 to the trade(s). Like ordinary skills, trade skills cannot be higher than 100. Trade skills are not a part of a character's overall regular skill cap. The trade skills are listed below: + +ALCHEMY +- Int / Dex +- Alchemists Guild +Get some empty bottles, a mortar & pestle, and some reagents to start creating potions. Reagents used are black pearl, bloodmoss, garlic, ginseng, mandrake root, nightshade, spiders silk, and sulfurous ash. + +BLACKSMITHING +- Str / Dex +- Blacksmiths Guild +Using a tool like tongs or a hammer, with some ingots, and you can begin crafting armor and weapons. You can also repair such items that are made of metal, but you need to be near an anvil and forge to perform this trade. + +CARPENTRY +- Dex / Str +- Carpentry Guild +Tools, like a saw, can be used with logs to create items like chairs, tables, or staves. You can also create stone chairs or stone tables if you have the right amount of ore. + +CARTOGRAPHY +- Int / Dex +- Librarians Guild +With a mapmaking pen and some blank scrolls, you can start mapping the area around you. These maps can come in handy as sea charts as well, plotting courses to give to your ship's tillerman. A good cartographer can also decipher treasure maps, to discover where they are buried. If you discover the location of a buried treasure, get yourself a shovel and travel to that location. Use the shovel on the map and you should start digging it up. Be careful when removing treasure from the chest, as monsters will surely be guarding it from trespassers. + +COOKING +- Int / Dex +Using an item like a frying pan, you can take various ingredients to create edible foods. Some ingredients can be purchases where others can be acquired from gardens. You can also harvest wheat and use a nearby mill to create some flour. + +FISHING +- Str / Dex +- Mariners Guild +Grab a fishing pole, place it in your hand, and use it to cast a line onto the water. This trade is mostly a way to feed yourself with fresh fish, but some use the skill to help them learn the fates of discovered messages in bottles. Also using fishing nets is something fisherman do. + +FLETCHING +- Dex / Str +- Rangers Guild +With some fletching tools, you can take some logs and create bows and arrows. For arrows you will need some feathers, but killing some birds will help with that. Use a bladed item (dagger, sword, etc.) on a dead bird to cut the feathers off. You can also repair bows. + +INSCRIPTION +- Int / Dex +- Librarians Guild +Using a scribe pen and some blank scrolls, mages often use this to create scrolls from the spells they have learned. Creating a scroll requires a spellbook with the spell already in it, and also the reagents required to cast the spell. + +LUMBERJACKING +- Str / Dex +- Carpentry Guild +Grab an axe, double click it, and then target a tree to chop some wood. Logs are pretty heavy so you may want to acquire a pack mule from the local stable master to help you haul it away. Logs can be used for carpentry or fletching. Logs can get a bit heavy, so using your axe on them will turn them into lighter weight boards. + +MINING +- Str +- Blacksmiths Guild +With a shovel or pickaxe, you can go along a mountainside or into a cave and dig up some ore. Ore is pretty heavy so you may want to acquire a pack mule from the local stable master to help you haul it away. Using the ore on a forge will turn that into ingots you can use for blacksmithing. + +TAILORING +- Dex / Int +- Tailors Guild +A sewing kit can be used to make some elegant clothing, leather armor, and even stitch bones together to make some horrific bone armor. You can repair such armor with this trade as well. Leather can be acquired from skinning many slain creatures by using a bladed item (dagger, sword, etc.) on the dead creature. Using scissors on the acquired hides will turn it into leather you can use. Bones can be found on slain skeletal creatures. To acquire cloth, you can buy it or you can pick the cotton and flax from gardens and use that on a spinning wheel. Then you can use the thread on a loom to make some cloth. You can do something similar by sheering sheep. Using scissors on the bolts of cloth will produce sheets of cloth you can craft with. Using scissors on cut cloth will turn that into bandages, which is used with the healing skill. + +TINKERING +- Dex / Int +- Tinkers Guild +Tinkering is a handy craft as it allows you to make many tools that are used for other trades. With a set of tinker tools, and usually some ingots, you can create such items. You can even crush gems into a crystal powder and make glass items like bottles and vials. Just drop some gems onto a mortar and pestle and you will grind it into this fine powder. + +"; + + if ( part == 1 ) + return title; + else if ( part == 2 ) + return scroll; + + return text; + + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/PagePrompt.cs b/Scripts/Engines/Help/PagePrompt.cs new file mode 100644 index 0000000..372ab0c --- /dev/null +++ b/Scripts/Engines/Help/PagePrompt.cs @@ -0,0 +1,30 @@ +using System; +using Server.Network; +using Server.Prompts; + +namespace Server.Engines.Help +{ + public class PagePrompt : Prompt + { + private PageType m_Type; + + public PagePrompt( PageType type ) + { + m_Type = type; + } + + public override void OnCancel( Mobile from ) + { + from.SendLocalizedMessage( 501235, "", 0x35 ); // Help request aborted. + } + + public override void OnResponse( Mobile from, string text ) + { + from.SendLocalizedMessage( 501234, "", 0x35 ); /* The next available Counselor/Game Master will respond as soon as possible. + * Please check your Journal for messages every few minutes. + */ + + PageQueue.Enqueue( new PageEntry( from, text, m_Type ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/PagePromptGump.cs b/Scripts/Engines/Help/PagePromptGump.cs new file mode 100644 index 0000000..a4e93ad --- /dev/null +++ b/Scripts/Engines/Help/PagePromptGump.cs @@ -0,0 +1,61 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; + +namespace Server.Engines.Help +{ + public class PagePromptGump : Gump + { + private Mobile m_From; + private PageType m_Type; + + public PagePromptGump( Mobile from, PageType type ) : base( 0, 0 ) + { + m_From = from; + m_Type = type; + + from.CloseGump( typeof( PagePromptGump ) ); + + AddBackground( 50, 50, 540, 350, 2600 ); + + AddPage( 0 ); + + AddHtmlLocalized( 264, 80, 200, 24, 1062524, false, false ); // Enter Description + AddHtmlLocalized( 120, 108, 420, 48, 1062638, false, false ); // Please enter a brief description (up to 200 characters) of your problem: + + AddBackground( 100, 148, 440, 200, 3500 ); + AddTextEntry( 120, 168, 400, 200, 1153, 0, "" ); + + AddButton( 175, 355, 2074, 2075, 1, GumpButtonType.Reply, 0 ); // Okay + AddButton( 405, 355, 2073, 2072, 0, GumpButtonType.Reply, 0 ); // Cancel + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 0 ) + { + m_From.SendLocalizedMessage( 501235, "", 0x35 ); // Help request aborted. + } + else + { + TextRelay entry = info.GetTextEntry( 0 ); + string text = ( entry == null ? "" : entry.Text.Trim() ); + + if ( text.Length == 0 ) + { + m_From.SendMessage( 0x35, "You must enter a description." ); + m_From.SendGump( new PagePromptGump( m_From, m_Type ) ); + } + else + { + m_From.SendLocalizedMessage( 501234, "", 0x35 ); /* The next available Counselor/Game Master will respond as soon as possible. + * Please check your Journal for messages every few minutes. + */ + + PageQueue.Enqueue( new PageEntry( m_From, text, m_Type ) ); + } + } + } + } +} diff --git a/Scripts/Engines/Help/PageQueue.cs b/Scripts/Engines/Help/PageQueue.cs new file mode 100644 index 0000000..c0fab13 --- /dev/null +++ b/Scripts/Engines/Help/PageQueue.cs @@ -0,0 +1,395 @@ +using System; +using System.Collections; +using System.Net.Mail; +using System.IO; +using Server; +using Server.Mobiles; +using Server.Network; +using Server.Misc; +using Server.Accounting; +using Server.Engines.Reports; +using Server.Commands; +using System.Collections.Generic; + +namespace Server.Engines.Help +{ + public enum PageType + { + Bug, + Stuck, + Account, + Question, + Suggestion, + Other, + VerbalHarassment, + PhysicalHarassment + } + + public class PageEntry + { + // What page types should have a speech log as attachment? + public static readonly PageType[] SpeechLogAttachment = new PageType[] + { + PageType.VerbalHarassment + }; + + private Mobile m_Sender; + private Mobile m_Handler; + private DateTime m_Sent; + private string m_Message; + private PageType m_Type; + private Point3D m_PageLocation; + private Map m_PageMap; + private List m_SpeechLog; + + private PageInfo m_PageInfo; + + public PageInfo PageInfo + { + get{ return m_PageInfo; } + } + + public Mobile Sender + { + get + { + return m_Sender; + } + } + + public Mobile Handler + { + get + { + return m_Handler; + } + set + { + PageQueue.OnHandlerChanged( m_Handler, value, this ); + m_Handler = value; + } + } + + public DateTime Sent + { + get + { + return m_Sent; + } + } + + public string Message + { + get + { + return m_Message; + } + } + + public PageType Type + { + get + { + return m_Type; + } + } + + public Point3D PageLocation + { + get + { + return m_PageLocation; + } + } + + public Map PageMap + { + get + { + return m_PageMap; + } + } + + public List SpeechLog + { + get + { + return m_SpeechLog; + } + } + + private Timer m_Timer; + + public void Stop() + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + } + + public void AddResponse( Mobile mob, string text ) + { + if ( m_PageInfo != null ) + { + lock ( m_PageInfo ) + m_PageInfo.Responses.Add( PageInfo.GetAccount( mob ), text ); + + if ( PageInfo.ResFromResp( text ) != PageResolution.None ) + m_PageInfo.UpdateResolver(); + } + } + + public PageEntry( Mobile sender, string message, PageType type ) + { + m_Sender = sender; + m_Sent = DateTime.Now; + m_Message = Utility.FixHtml( message ); + m_Type = type; + m_PageLocation = sender.Location; + m_PageMap = sender.Map; + + PlayerMobile pm = sender as PlayerMobile; + if ( pm != null && pm.SpeechLog != null && Array.IndexOf( SpeechLogAttachment, type ) >= 0 ) + m_SpeechLog = new List( pm.SpeechLog ); + + m_Timer = new InternalTimer( this ); + m_Timer.Start(); + + StaffHistory history = Reports.Reports.StaffHistory; + + if ( history != null ) + { + m_PageInfo = new PageInfo( this ); + + history.AddPage( m_PageInfo ); + } + } + + private class InternalTimer : Timer + { + private static TimeSpan StatusDelay = TimeSpan.FromMinutes( 2.0 ); + + private PageEntry m_Entry; + + public InternalTimer( PageEntry entry ) : base( TimeSpan.FromSeconds( 1.0 ), StatusDelay ) + { + m_Entry = entry; + } + + protected override void OnTick() + { + int index = PageQueue.IndexOf( m_Entry ); + + if ( m_Entry.Sender.NetState != null && index != -1 ) + { + m_Entry.Sender.SendLocalizedMessage( 1008077, true, (index + 1).ToString() ); // Thank you for paging. Queue status : + m_Entry.Sender.SendLocalizedMessage( 1008084 ); // You can reference our website at www.uo.com or contact us at support@uo.com. To cancel your page, please select the help button again and select cancel. + + if ( m_Entry.Handler != null && m_Entry.Handler.NetState == null ) { + m_Entry.Handler = null; + } + } + else + { + if ( index != -1 ) + m_Entry.AddResponse( m_Entry.Sender, "[Logout]" ); + + PageQueue.Remove( m_Entry ); + } + } + } + } + + public class PageQueue + { + private static ArrayList m_List = new ArrayList(); + private static Hashtable m_KeyedByHandler = new Hashtable(); + private static Hashtable m_KeyedBySender = new Hashtable(); + + public static void Initialize() + { + CommandSystem.Register( "Pages", AccessLevel.Counselor, new CommandEventHandler( Pages_OnCommand ) ); + } + + public static bool CheckAllowedToPage( Mobile from ) + { + PlayerMobile pm = from as PlayerMobile; + + if ( pm == null ) + return true; + + if ( pm.DesignContext != null ) + { + from.SendLocalizedMessage( 500182 ); // You cannot request help while customizing a house or transferring a character. + return false; + } + else if ( pm.PagingSquelched ) + { + from.SendMessage( "You cannot request help, sorry." ); + return false; + } + + return true; + } + + public static string GetPageTypeName( PageType type ) + { + if ( type == PageType.VerbalHarassment ) + return "Verbal Harassment"; + else if ( type == PageType.PhysicalHarassment ) + return "Physical Harassment"; + else + return type.ToString(); + } + + public static void OnHandlerChanged( Mobile old, Mobile value, PageEntry entry ) + { + if ( old != null ) + m_KeyedByHandler.Remove( old ); + + if ( value != null ) + m_KeyedByHandler[value] = entry; + } + + [Usage( "Pages" )] + [Description( "Opens the page queue menu." )] + private static void Pages_OnCommand( CommandEventArgs e ) + { + PageEntry entry = (PageEntry)m_KeyedByHandler[e.Mobile]; + + if ( entry != null ) + { + e.Mobile.SendGump( new PageEntryGump( e.Mobile, entry ) ); + } + else if ( m_List.Count > 0 ) + { + e.Mobile.SendGump( new PageQueueGump() ); + } + else + { + e.Mobile.SendMessage( "The page queue is empty." ); + } + } + + public static bool IsHandling( Mobile check ) + { + return m_KeyedByHandler.ContainsKey( check ); + } + + public static bool Contains( Mobile sender ) + { + return m_KeyedBySender.ContainsKey( sender ); + } + + public static int IndexOf( PageEntry e ) + { + return m_List.IndexOf( e ); + } + + public static void Cancel( Mobile sender ) + { + Remove( (PageEntry) m_KeyedBySender[sender] ); + } + + public static void Remove( PageEntry e ) + { + if ( e == null ) + return; + + e.Stop(); + + m_List.Remove( e ); + m_KeyedBySender.Remove( e.Sender ); + + if ( e.Handler != null ) + m_KeyedByHandler.Remove( e.Handler ); + } + + public static PageEntry GetEntry( Mobile sender ) + { + return (PageEntry)m_KeyedBySender[sender]; + } + + public static void Remove( Mobile sender ) + { + Remove( GetEntry( sender ) ); + } + + public static ArrayList List + { + get + { + return m_List; + } + } + + public static void Enqueue( PageEntry entry ) + { + m_List.Add( entry ); + m_KeyedBySender[entry.Sender] = entry; + + bool isStaffOnline = false; + + foreach ( NetState ns in NetState.Instances ) + { + Mobile m = ns.Mobile; + + if ( m != null && m.AccessLevel >= AccessLevel.Counselor && m.AutoPageNotify && !IsHandling( m ) ) + m.SendMessage( "A new page has been placed in the queue." ); + + if ( m != null && m.AccessLevel >= AccessLevel.Counselor && m.AutoPageNotify && m.LastMoveTime >= (DateTime.Now - TimeSpan.FromMinutes( 10.0 )) ) + isStaffOnline = true; + } + + if ( !isStaffOnline ) + entry.Sender.SendMessage( "We are sorry, but no staff members are currently available to assist you. Your page will remain in the queue until one becomes available, or until you cancel it manually." ); + + if ( Email.SpeechLogPageAddresses != null && entry.SpeechLog != null ) + SendEmail( entry ); + } + + private static void SendEmail( PageEntry entry ) + { + Mobile sender = entry.Sender; + DateTime time = DateTime.Now; + + MailMessage mail = new MailMessage( "RunUO", Email.SpeechLogPageAddresses ); + + mail.Subject = "RunUO Speech Log Page Forwarding"; + + using ( StringWriter writer = new StringWriter() ) + { + writer.WriteLine( "RunUO Speech Log Page - {0}", PageQueue.GetPageTypeName( entry.Type ) ); + writer.WriteLine(); + + writer.WriteLine( "From: '{0}', Account: '{1}'", sender.RawName, sender.Account is Account ? sender.Account.Username : "???" ); + writer.WriteLine( "Location: {0} [{1}]", sender.Location, sender.Map ); + writer.WriteLine( "Sent on: {0}/{1:00}/{2:00} {3}:{4:00}:{5:00}", time.Year, time.Month, time.Day, time.Hour, time.Minute, time.Second ); + writer.WriteLine(); + + writer.WriteLine( "Message:" ); + writer.WriteLine( "'{0}'", entry.Message ); + writer.WriteLine(); + + writer.WriteLine( "Speech Log" ); + writer.WriteLine( "==========" ); + + foreach ( SpeechLogEntry logEntry in entry.SpeechLog ) + { + Mobile from = logEntry.From; + string fromName = from.RawName; + string fromAccount = from.Account is Account ? from.Account.Username : "???"; + DateTime created = logEntry.Created; + string speech = logEntry.Speech; + + writer.WriteLine( "{0}:{1:00}:{2:00} - {3} ({4}): '{5}'", created.Hour, created.Minute, created.Second, fromName, fromAccount, speech ); + } + + mail.Body = writer.ToString(); + } + + Email.AsyncSend( mail ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/PageQueueGump.cs b/Scripts/Engines/Help/PageQueueGump.cs new file mode 100644 index 0000000..39dc0b0 --- /dev/null +++ b/Scripts/Engines/Help/PageQueueGump.cs @@ -0,0 +1,834 @@ +using System; +using System.IO; +using System.Collections; +using Server; +using Server.Network; +using Server.Gumps; + +namespace Server.Engines.Help +{ + public class MessageSentGump : Gump + { + private string m_Name, m_Text; + private Mobile m_Mobile; + + public MessageSentGump( Mobile mobile, string name, string text ) : base( 30, 30 ) + { + m_Name = name; + m_Text = text; + m_Mobile = mobile; + + Closable = false; + + AddPage( 0 ); + + AddBackground( 0, 0, 92, 75, 0xA3C ); + + AddImageTiled( 5, 7, 82, 61, 0xA40 ); + AddAlphaRegion( 5, 7, 82, 61 ); + + AddImageTiled( 9, 11, 21, 53, 0xBBC ); + + AddButton( 10, 12, 0x7D2, 0x7D2, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 34, 28, 65, 24, 3001002, 0xFFFFFF, false, false ); // Message + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + m_Mobile.SendGump( new PageResponseGump( m_Mobile, m_Name, m_Text ) ); + + //m_Mobile.SendMessage( 0x482, "{0} tells you:", m_Name ); + //m_Mobile.SendMessage( 0x482, m_Text ); + } + } + + public class PageQueueGump : Gump + { + private PageEntry[] m_List; + + public PageQueueGump() : base( 30, 30 ) + { + Add( new GumpPage( 0 ) ); + //Add( new GumpBackground( 0, 0, 410, 448, 9200 ) ); + Add( new GumpImageTiled( 0, 0, 410, 448, 0xA40 ) ); + Add( new GumpAlphaRegion( 1, 1, 408, 446 ) ); + + Add( new GumpLabel( 180, 12, 2100, "Page Queue" ) ); + + ArrayList list = PageQueue.List; + + for ( int i = 0; i < list.Count; ) + { + PageEntry e = (PageEntry)list[i]; + + if ( e.Sender.Deleted || e.Sender.NetState == null ) + { + e.AddResponse( e.Sender, "[Logout]" ); + PageQueue.Remove( e ); + } + else + { + ++i; + } + } + + m_List = (PageEntry[])list.ToArray( typeof( PageEntry ) ); + + if ( m_List.Length > 0 ) + { + Add( new GumpPage( 1 ) ); + + for ( int i = 0; i < m_List.Length; ++i ) + { + PageEntry e = m_List[i]; + + if ( i >= 5 && (i % 5) == 0 ) + { + Add( new GumpButton( 368, 12, 0xFA5, 0xFA7, 0, GumpButtonType.Page, (i / 5) + 1 ) ); + Add( new GumpLabel( 298, 12, 2100, "Next Page" ) ); + Add( new GumpPage( (i / 5) + 1 ) ); + Add( new GumpButton( 12, 12, 0xFAE, 0xFB0, 0, GumpButtonType.Page, (i / 5) ) ); + Add( new GumpLabel( 48, 12, 2100, "Previous Page" ) ); + } + + string typeString = PageQueue.GetPageTypeName( e.Type ); + + string html = String.Format( "[{0}] {1} [{3}]", typeString, e.Message, e.Handler == null ? 0xFF0000 : 0xFF, e.Handler == null ? "Unhandled" : "Handling" ); + + Add( new GumpHtml( 12, 44 + ((i % 5) * 80), 350, 70, html, true, true ) ); + Add( new GumpButton( 370, 44 + ((i % 5) * 80) + 24, 0xFA5, 0xFA7, i + 1, GumpButtonType.Reply, 0 ) ); + } + } + else + { + Add( new GumpLabel( 12, 44, 2100, "The page queue is empty." ) ); + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( info.ButtonID >= 1 && info.ButtonID <= m_List.Length ) + { + if ( PageQueue.List.IndexOf( m_List[info.ButtonID - 1] ) >= 0 ) + { + PageEntryGump g = new PageEntryGump( state.Mobile, m_List[info.ButtonID - 1] ); + + g.SendTo( state ); + } + else + { + state.Mobile.SendGump( new PageQueueGump() ); + state.Mobile.SendMessage( "That page has been removed." ); + } + } + } + } + + public class PredefinedResponse + { + private string m_Title; + private string m_Message; + + public string Title{ get{ return m_Title; } set{ m_Title = value; } } + public string Message{ get{ return m_Message; } set{ m_Message = value; } } + + public PredefinedResponse( string title, string message ) + { + m_Title = title; + m_Message = message; + } + + private static ArrayList m_List; + + public static ArrayList List + { + get + { + if ( m_List == null ) + m_List = Load(); + + return m_List; + } + } + + public static PredefinedResponse Add( string title, string message ) + { + if ( m_List == null ) + m_List = Load(); + + PredefinedResponse resp = new PredefinedResponse( title, message ); + + m_List.Add( resp ); + Save(); + + return resp; + } + + public static void Save() + { + if ( m_List == null ) + m_List = Load(); + + try + { + string path = Path.Combine( Core.BaseDirectory, "Data/Config/pageresponse.cfg" ); + + using ( StreamWriter op = new StreamWriter( path ) ) + { + for ( int i = 0; i < m_List.Count; ++i ) + { + PredefinedResponse resp = (PredefinedResponse)m_List[i]; + + op.WriteLine( "{0}\t{1}", resp.Title, resp.Message ); + } + } + } + catch ( Exception e ) + { + Console.WriteLine( e ); + } + } + + public static ArrayList Load() + { + ArrayList list = new ArrayList(); + + string path = Path.Combine( Core.BaseDirectory, "Data/Config/pageresponse.cfg" ); + + if ( File.Exists( path ) ) + { + try + { + using ( StreamReader ip = new StreamReader( path ) ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + try + { + line = line.Trim(); + + if ( line.Length == 0 || line.StartsWith( "#" ) ) + continue; + + string[] split = line.Split( '\t' ); + + if ( split.Length == 2 ) + list.Add( new PredefinedResponse( split[0], split[1] ) ); + } + catch + { + } + } + } + } + catch ( Exception e ) + { + Console.WriteLine( e ); + } + } + + return list; + } + } + + public class PredefGump : Gump + { + private const int LabelColor32 = 0xFFFFFF; + + public string Center( string text ) + { + return String.Format( "
{0}
", text ); + } + + public string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + + public void AddTextInput( int x, int y, int w, int h, int id, string def ) + { + AddImageTiled( x, y, w, h, 0xA40 ); + AddImageTiled( x + 1, y + 1, w - 2, h - 2, 0xBBC ); + AddTextEntry( x + 3, y + 1, w - 4, h - 2, 0x480, id, def ); + } + + private Mobile m_From; + private PredefinedResponse m_Response; + + public PredefGump( Mobile from, PredefinedResponse response ) : base( 30, 30 ) + { + m_From = from; + m_Response = response; + + from.CloseGump( typeof( PredefGump ) ); + + bool canEdit = ( from.AccessLevel >= AccessLevel.GameMaster ); + + AddPage( 0 ); + + if ( response == null ) + { + AddImageTiled( 0, 0, 410, 448, 0xA40 ); + AddAlphaRegion( 1, 1, 408, 446 ); + + AddHtml( 10, 10, 390, 20, Color( Center( "Predefined Responses" ), LabelColor32 ), false, false ); + + ArrayList list = PredefinedResponse.List; + + AddPage( 1 ); + + int i; + + for ( i = 0; i < list.Count; ++i ) + { + if ( i >= 5 && (i % 5) == 0 ) + { + AddButton( 368, 10, 0xFA5, 0xFA7, 0, GumpButtonType.Page, (i / 5) + 1 ); + AddLabel( 298, 10, 2100, "Next Page" ); + AddPage( (i / 5) + 1 ); + AddButton( 12, 10, 0xFAE, 0xFB0, 0, GumpButtonType.Page, i / 5 ); + AddLabel( 48, 10, 2100, "Previous Page" ); + } + + PredefinedResponse resp = (PredefinedResponse)list[i]; + + string html = String.Format( "{0}
{1}", resp.Title, resp.Message ); + + AddHtml( 12, 44 + ((i % 5) * 80), 350, 70, html, true, true ); + + if ( canEdit ) + { + AddButton( 370, 44 + ((i % 5) * 80) + 24, 0xFA5, 0xFA7, 2 + (i * 3), GumpButtonType.Reply, 0 ); + + if ( i > 0 ) + AddButton( 377, 44 + ((i % 5) * 80) + 2, 0x15E0, 0x15E4, 3 + (i * 3), GumpButtonType.Reply, 0 ); + else + AddImage( 377, 44 + ((i % 5) * 80) + 2, 0x25E4 ); + + if ( i < (list.Count - 1) ) + AddButton( 377, 44 + ((i % 5) * 80) + 70 - 2 - 16, 0x15E2, 0x15E6, 4 + (i * 3), GumpButtonType.Reply, 0 ); + else + AddImage( 377, 44 + ((i % 5) * 80) + 70 - 2 - 16, 0x25E8 ); + } + } + + if ( canEdit ) + { + if ( i >= 5 && (i % 5) == 0 ) + { + AddButton( 368, 10, 0xFA5, 0xFA7, 0, GumpButtonType.Page, (i / 5) + 1 ); + AddLabel( 298, 10, 2100, "Next Page" ); + AddPage( (i / 5) + 1 ); + AddButton( 12, 10, 0xFAE, 0xFB0, 0, GumpButtonType.Page, i / 5 ); + AddLabel( 48, 10, 2100, "Previous Page" ); + } + + AddButton( 12, 44 + ((i % 5) * 80), 0xFAB, 0xFAD, 1, GumpButtonType.Reply, 0 ); + AddHtml( 45, 44 + ((i % 5) * 80), 200, 20, Color( "New Response", LabelColor32 ), false, false ); + } + } + else if ( canEdit ) + { + AddImageTiled( 0, 0, 410, 250, 0xA40 ); + AddAlphaRegion( 1, 1, 408, 248 ); + + AddHtml( 10, 10, 390, 20, Color( Center( "Predefined Response Editor" ), LabelColor32 ), false, false ); + + AddButton( 10, 40, 0xFB1, 0xFB3, 1, GumpButtonType.Reply, 0 ); + AddHtml( 45, 40, 200, 20, Color( "Remove", LabelColor32 ), false, false ); + + AddButton( 10, 70, 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0 ); + AddHtml( 45, 70, 200, 20, Color( "Title:", LabelColor32 ), false, false ); + AddTextInput( 10, 90, 300, 20, 0, response.Title ); + + AddButton( 10, 120, 0xFA5, 0xFA7, 3, GumpButtonType.Reply, 0 ); + AddHtml( 45, 120, 200, 20, Color( "Message:", LabelColor32 ), false, false ); + AddTextInput( 10, 140, 390, 100, 1, response.Message ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( m_From.AccessLevel < AccessLevel.Administrator ) + return; + + if ( m_Response == null ) + { + int index = info.ButtonID - 1; + + if ( index == 0 ) + { + PredefinedResponse resp = new PredefinedResponse( "", "" ); + + ArrayList list = PredefinedResponse.List; + list.Add( resp ); + + m_From.SendGump( new PredefGump( m_From, resp ) ); + } + else + { + --index; + + int type = index % 3; + index /= 3; + + ArrayList list = PredefinedResponse.List; + + if ( index >= 0 && index < list.Count ) + { + PredefinedResponse resp = (PredefinedResponse)list[index]; + + switch ( type ) + { + case 0: // edit + { + m_From.SendGump( new PredefGump( m_From, resp ) ); + break; + } + case 1: // move up + { + if ( index > 0 ) + { + list.RemoveAt( index ); + list.Insert( index - 1, resp ); + + PredefinedResponse.Save(); + m_From.SendGump( new PredefGump( m_From, null ) ); + } + + break; + } + case 2: // move down + { + if ( index < (list.Count - 1) ) + { + list.RemoveAt( index ); + list.Insert( index + 1, resp ); + + PredefinedResponse.Save(); + m_From.SendGump( new PredefGump( m_From, null ) ); + } + + break; + } + } + } + } + } + else + { + ArrayList list = PredefinedResponse.List; + + switch ( info.ButtonID ) + { + case 1: + { + list.Remove( m_Response ); + + PredefinedResponse.Save(); + m_From.SendGump( new PredefGump( m_From, null ) ); + break; + } + case 2: + { + TextRelay te = info.GetTextEntry( 0 ); + + if ( te != null ) + m_Response.Title = te.Text; + + PredefinedResponse.Save(); + m_From.SendGump( new PredefGump( m_From, m_Response ) ); + + break; + } + case 3: + { + TextRelay te = info.GetTextEntry( 1 ); + + if ( te != null ) + m_Response.Message = te.Text; + + PredefinedResponse.Save(); + m_From.SendGump( new PredefGump( m_From, m_Response ) ); + + break; + } + } + } + } + } + + public class PageEntryGump : Gump + { + private PageEntry m_Entry; + private Mobile m_Mobile; + + private static int[] m_AccessLevelHues = new int[] + { + 2100, + 2122, + 2117, + 2129, + 2415, + 2415, + 2415 + }; + + public PageEntryGump( Mobile m, PageEntry entry ) : base( 30, 30 ) + { + try + { + m_Mobile = m; + m_Entry = entry; + + int buttons = 0; + + int bottom = 356; + + AddPage( 0 ); + + AddImageTiled( 0, 0, 410, 456, 0xA40 ); + AddAlphaRegion( 1, 1, 408, 454 ); + + AddPage( 1 ); + + AddLabel( 18, 18, 2100, "Sent:" ); + AddLabelCropped( 128, 18, 264, 20, 2100, entry.Sent.ToString() ); + + AddLabel( 18, 38, 2100, "Sender:" ); + AddLabelCropped( 128, 38, 264, 20, 2100, String.Format( "{0} {1} [{2}]", entry.Sender.RawName, entry.Sender.Location, entry.Sender.Map ) ); + + AddButton( 18, bottom - (buttons * 22), 0xFAB, 0xFAD, 8, GumpButtonType.Reply, 0 ); + AddImageTiled( 52, bottom - (buttons * 22) + 1, 340, 80, 0xA40/*0xBBC*//*0x2458*/ ); + AddImageTiled( 53, bottom - (buttons * 22) + 2, 338, 78, 0xBBC/*0x2426*/ ); + AddTextEntry( 55, bottom - (buttons++ * 22) + 2, 336, 78, 0x480, 0, "" ); + + AddButton( 18, bottom - (buttons * 22), 0xFA5, 0xFA7, 0, GumpButtonType.Page, 2 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "Predefined Response" ); + + if ( entry.Sender != m ) + { + AddButton( 18, bottom - (buttons * 22), 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "Go to Sender" ); + } + + AddLabel( 18, 58, 2100, "Handler:" ); + + if ( entry.Handler == null ) + { + AddLabelCropped( 128, 58, 264, 20, 2100, "Unhandled" ); + + AddButton( 18, bottom - (buttons * 22), 0xFB1, 0xFB3, 5, GumpButtonType.Reply, 0 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "Delete Page" ); + + AddButton( 18, bottom - (buttons * 22), 0xFB7, 0xFB9, 4, GumpButtonType.Reply, 0 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "Handle Page" ); + } + else + { + AddLabelCropped( 128, 58, 264, 20, m_AccessLevelHues[(int)entry.Handler.AccessLevel], entry.Handler.Name ); + + if ( entry.Handler != m ) + { + AddButton( 18, bottom - (buttons * 22), 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "Go to Handler" ); + } + else + { + AddButton( 18, bottom - (buttons * 22), 0xFA2, 0xFA4, 6, GumpButtonType.Reply, 0 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "Abandon Page" ); + + AddButton( 18, bottom - (buttons * 22), 0xFB7, 0xFB9, 7, GumpButtonType.Reply, 0 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "Page Handled" ); + } + } + + AddLabel( 18, 78, 2100, "Page Location:" ); + AddLabelCropped( 128, 78, 264, 20, 2100, String.Format( "{0} [{1}]", entry.PageLocation, entry.PageMap ) ); + + AddButton( 18, bottom - (buttons * 22), 0xFA5, 0xFA7, 3, GumpButtonType.Reply, 0 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "Go to Page Location" ); + + if ( entry.SpeechLog != null ) + { + AddButton( 18, bottom - (buttons * 22), 0xFA5, 0xFA7, 10, GumpButtonType.Reply, 0 ); + AddLabel( 52, bottom - (buttons++ * 22), 2100, "View Speech Log" ); + } + + AddLabel( 18, 98, 2100, "Page Type:" ); + AddLabelCropped( 128, 98, 264, 20, 2100, PageQueue.GetPageTypeName( entry.Type ) ); + + AddLabel( 18, 118, 2100, "Message:" ); + AddHtml( 128, 118, 250, 100, entry.Message, true, true ); + + AddPage( 2 ); + + ArrayList preresp = PredefinedResponse.List; + + AddButton( 18, 18, 0xFAE, 0xFB0, 0, GumpButtonType.Page, 1 ); + AddButton( 410 - 18 - 32, 18, 0xFAB, 0xFAC, 9, GumpButtonType.Reply, 0 ); + + if ( preresp.Count == 0 ) + { + AddLabel( 52, 18, 2100, "There are no predefined responses." ); + } + else + { + AddLabel( 52, 18, 2100, "Back" ); + + for ( int i = 0; i < preresp.Count; ++i ) + { + AddButton( 18, 40 + (i * 22), 0xFA5, 0xFA7, 100 + i, GumpButtonType.Reply, 0 ); + AddLabel( 52, 40 + (i * 22), 2100, ((PredefinedResponse)preresp[i]).Title ); + } + } + } + catch ( Exception e ) + { + Console.WriteLine(e); + } + } + + public void Resend( NetState state ) + { + PageEntryGump g = new PageEntryGump( m_Mobile, m_Entry ); + + g.SendTo( state ); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( info.ButtonID != 0 && PageQueue.List.IndexOf( m_Entry ) < 0 ) + { + state.Mobile.SendGump( new PageQueueGump() ); + state.Mobile.SendMessage( "That page has been removed." ); + return; + } + + switch ( info.ButtonID ) + { + case 0: // close + { + if ( m_Entry.Handler != state.Mobile ) + { + PageQueueGump g = new PageQueueGump(); + + g.SendTo( state ); + } + + break; + } + case 1: // go to sender + { + Mobile m = state.Mobile; + + if ( m_Entry.Sender.Deleted ) + { + m.SendMessage( "That character no longer exists." ); + } + else if ( m_Entry.Sender.Map == null || m_Entry.Sender.Map == Map.Internal ) + { + m.SendMessage( "That character is not in the world." ); + } + else + { + m_Entry.AddResponse( state.Mobile, "[Go Sender]" ); + m.MoveToWorld( m_Entry.Sender.Location, m_Entry.Sender.Map ); + + m.SendMessage( "You have been teleported to that pages sender." ); + + Resend( state ); + } + + break; + } + case 2: // go to handler + { + Mobile m = state.Mobile; + Mobile h = m_Entry.Handler; + + if ( h != null ) + { + if ( h.Deleted ) + { + m.SendMessage( "That character no longer exists." ); + } + else if ( h.Map == null || h.Map == Map.Internal ) + { + m.SendMessage( "That character is not in the world." ); + } + else + { + m_Entry.AddResponse( state.Mobile, "[Go Handler]" ); + m.MoveToWorld( h.Location, h.Map ); + + m.SendMessage( "You have been teleported to that pages handler." ); + Resend( state ); + } + } + else + { + m.SendMessage( "Nobody is handling that page." ); + Resend( state ); + } + + break; + } + case 3: // go to page location + { + Mobile m = state.Mobile; + + if ( m_Entry.PageMap == null || m_Entry.PageMap == Map.Internal ) + { + m.SendMessage( "That location is not in the world." ); + } + else + { + m_Entry.AddResponse( state.Mobile, "[Go PageLoc]" ); + m.MoveToWorld( m_Entry.PageLocation, m_Entry.PageMap ); + + state.Mobile.SendMessage( "You have been teleported to the original page location." ); + + Resend( state ); + } + + break; + } + case 4: // handle page + { + if ( m_Entry.Handler == null ) + { + m_Entry.AddResponse( state.Mobile, "[Handling]" ); + m_Entry.Handler = state.Mobile; + + state.Mobile.SendMessage( "You are now handling the page." ); + } + else + { + state.Mobile.SendMessage( "Someone is already handling that page." ); + } + + Resend( state ); + + break; + } + case 5: // delete page + { + if ( m_Entry.Handler == null ) + { + m_Entry.AddResponse( state.Mobile, "[Deleting]" ); + PageQueue.Remove( m_Entry ); + + state.Mobile.SendMessage( "You delete the page." ); + + PageQueueGump g = new PageQueueGump(); + + g.SendTo( state ); + } + else + { + state.Mobile.SendMessage( "Someone is handling that page, it can not be deleted." ); + + Resend( state ); + } + + break; + } + case 6: // abandon page + { + if ( m_Entry.Handler == state.Mobile ) + { + m_Entry.AddResponse( state.Mobile, "[Abandoning]" ); + state.Mobile.SendMessage( "You abandon the page." ); + + m_Entry.Handler = null; + } + else + { + state.Mobile.SendMessage( "You are not handling that page." ); + } + + Resend( state ); + + break; + } + case 7: // page handled + { + if ( m_Entry.Handler == state.Mobile ) + { + m_Entry.AddResponse( state.Mobile, "[Handled]" ); + PageQueue.Remove( m_Entry ); + + m_Entry.Handler = null; + + state.Mobile.SendMessage( "You mark the page as handled, and remove it from the queue." ); + + PageQueueGump g = new PageQueueGump(); + + g.SendTo( state ); + } + else + { + state.Mobile.SendMessage( "You are not handling that page." ); + + Resend( state ); + } + + break; + } + case 8: // Send message + { + TextRelay text = info.GetTextEntry( 0 ); + + if ( text != null ) + { + m_Entry.AddResponse( state.Mobile, "[Response] " + text.Text ); + m_Entry.Sender.SendGump( new MessageSentGump( m_Entry.Sender, state.Mobile.Name, text.Text ) ); + //m_Entry.Sender.SendMessage( 0x482, "{0} tells you:", state.Mobile.Name ); + //m_Entry.Sender.SendMessage( 0x482, text.Text ); + } + + Resend( state ); + + break; + } + case 9: // predef overview + { + Resend( state ); + state.Mobile.SendGump( new PredefGump( state.Mobile, null ) ); + + break; + } + case 10: // View Speech Log + { + Resend( state ); + + if ( m_Entry.SpeechLog != null ) + { + Gump gump = new SpeechLogGump( m_Entry.Sender, m_Entry.SpeechLog ); + state.Mobile.SendGump( gump ); + } + + break; + } + default: + { + int index = info.ButtonID - 100; + ArrayList preresp = PredefinedResponse.List; + + if ( index >= 0 && index < preresp.Count ) + { + m_Entry.AddResponse( state.Mobile, "[PreDef] " + ((PredefinedResponse)preresp[index]).Title ); + m_Entry.Sender.SendGump( new MessageSentGump( m_Entry.Sender, state.Mobile.Name, ((PredefinedResponse)preresp[index]).Message ) ); + } + + Resend( state ); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/PageResponseGump.cs b/Scripts/Engines/Help/PageResponseGump.cs new file mode 100644 index 0000000..5b39e89 --- /dev/null +++ b/Scripts/Engines/Help/PageResponseGump.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; + +namespace Server.Engines.Help +{ + public class PageResponseGump : Gump + { + private Mobile m_From; + private string m_Name, m_Text; + + public PageResponseGump( Mobile from, string name, string text ) : base( 0, 0 ) + { + m_From = from; + m_Name = name; + m_Text = text; + + AddBackground( 50, 25, 540, 430, 2600 ); + + AddPage( 0 ); + + AddHtmlLocalized( 150, 40, 360, 40, 1062610, false, false ); //
Ultima Online Help Response
+ + AddHtml( 80, 90, 480, 290, String.Format( "{0} tells {1}: {2}", name, from.Name, text ), true, true ); + + AddHtmlLocalized( 80, 390, 480, 40, 1062611, false, false ); // Clicking the OKAY button will remove the reponse you have received. + AddButton( 400, 417, 2074, 2075, 1, GumpButtonType.Reply, 0 ); // OKAY + + AddButton( 475, 417, 2073, 2072, 0, GumpButtonType.Reply, 0 ); // CANCEL + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID != 1 ) + m_From.SendGump( new MessageSentGump( m_From, m_Name, m_Text ) ); + } + } +} diff --git a/Scripts/Engines/Help/SpeechLog.cs b/Scripts/Engines/Help/SpeechLog.cs new file mode 100644 index 0000000..70b8183 --- /dev/null +++ b/Scripts/Engines/Help/SpeechLog.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections; +using Server; +using Server.Mobiles; +using Server.Targeting; +using Server.Gumps; +using Server.Commands; +using System.Collections.Generic; + +namespace Server.Engines.Help +{ + public class SpeechLog : IEnumerable + { + // Are speech logs enabled? + public static readonly bool Enabled = true; + + // How long should we maintain each speech entry? + public static readonly TimeSpan EntryDuration = TimeSpan.FromMinutes( 20.0 ); + + // What is the maximum number of entries a log can contain? (0 -> no limit) + public static readonly int MaxLength = 0; + + public static void Initialize() + { + CommandSystem.Register( "SpeechLog", AccessLevel.GameMaster, new CommandEventHandler( SpeechLog_OnCommand ) ); + } + + [Usage( "SpeechLog" )] + [Description( "Opens the speech log of a given target." )] + private static void SpeechLog_OnCommand( CommandEventArgs e ) + { + Mobile from = e.Mobile; + + from.SendMessage( "Target a player to view his speech log." ); + e.Mobile.Target = new SpeechLogTarget(); + } + + private class SpeechLogTarget : Target + { + public SpeechLogTarget() : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + PlayerMobile pm = targeted as PlayerMobile; + + if ( pm == null ) + { + from.SendMessage( "Speech logs aren't supported on that target." ); + } + else if ( from != targeted && from.AccessLevel <= pm.AccessLevel && from.AccessLevel != AccessLevel.Owner ) + { + from.SendMessage( "You don't have the required access level to view {0} speech log.", pm.Female ? "her" : "his" ); + } + else if ( pm.SpeechLog == null ) + { + from.SendMessage( "{0} has no speech log.", pm.Female ? "She" : "He" ); + } + else + { + CommandLogging.WriteLine( from, "{0} {1} viewing speech log of {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targeted ) ); + + Gump gump = new SpeechLogGump( pm, pm.SpeechLog ); + from.SendGump( gump ); + } + } + } + + private Queue m_Queue; + + public int Count{ get{ return m_Queue.Count; } } + + public SpeechLog() + { + m_Queue = new Queue(); + } + + public void Add( Mobile from, string speech ) + { + Add( new SpeechLogEntry( from, speech ) ); + } + + public void Add( SpeechLogEntry entry ) + { + if ( MaxLength > 0 && m_Queue.Count >= MaxLength ) + m_Queue.Dequeue(); + + Clean(); + + m_Queue.Enqueue( entry ); + } + + public void Clean() + { + while ( m_Queue.Count > 0 ) + { + SpeechLogEntry entry = (SpeechLogEntry) m_Queue.Peek(); + + if ( DateTime.Now - entry.Created > EntryDuration ) + m_Queue.Dequeue(); + else + break; + } + } + + public void CopyTo( SpeechLogEntry[] array, int index ) + { + m_Queue.CopyTo( array, index ); + } + + #region IEnumerable Members + + IEnumerator IEnumerable.GetEnumerator() + { + return m_Queue.GetEnumerator(); + } + + #endregion + + #region IEnumerable Members + + IEnumerator IEnumerable.GetEnumerator() + { + return m_Queue.GetEnumerator(); + } + + #endregion + } + + public class SpeechLogEntry + { + private Mobile m_From; + private string m_Speech; + private DateTime m_Created; + + public Mobile From{ get{ return m_From; } } + public string Speech{ get{ return m_Speech; } } + public DateTime Created{ get{ return m_Created; } } + + public SpeechLogEntry( Mobile from, string speech ) + { + m_From = from; + m_Speech = speech; + m_Created = DateTime.Now; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/SpeechLogGump.cs b/Scripts/Engines/Help/SpeechLogGump.cs new file mode 100644 index 0000000..9d8f649 --- /dev/null +++ b/Scripts/Engines/Help/SpeechLogGump.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using Server; +using Server.Gumps; +using Server.Accounting; +using Server.Network; + +namespace Server.Engines.Help +{ + public class SpeechLogGump : Gump + { + public static readonly int MaxEntriesPerPage = 30; + + private Mobile m_Player; + private List m_Log; + private int m_Page; + + public SpeechLogGump( Mobile player, SpeechLog log ) + : this( player, new List( log ) ) + { + } + + public SpeechLogGump( Mobile player, List log ) : this( player, log, ( log.Count - 1 ) / MaxEntriesPerPage ) + { + } + + public SpeechLogGump( Mobile player, List log, int page ) + : base( 500, 30 ) + { + m_Player = player; + m_Log = log; + m_Page = page; + + AddImageTiled( 0, 0, 300, 425, 0xA40 ); + AddAlphaRegion( 1, 1, 298, 423 ); + + string playerName = player.Name; + string playerAccount = player.Account is Account ? player.Account.Username : "???"; + + AddHtml( 10, 10, 280, 20, String.Format( "
SPEECH LOG - {0} ({1})
", playerName, Utility.FixHtml( playerAccount ) ), false, false ); + + int lastPage = ( log.Count - 1 ) / MaxEntriesPerPage; + + string sLog; + + if ( page < 0 || page > lastPage ) + { + sLog = ""; + } + else + { + int max = log.Count - ( lastPage - page ) * MaxEntriesPerPage; + int min = Math.Max( max - MaxEntriesPerPage, 0 ); + + StringBuilder builder = new StringBuilder(); + + for ( int i = min; i < max; i++ ) + { + SpeechLogEntry entry = log[i]; + + Mobile m = entry.From; + + string name = m.Name; + string account = m.Account is Account ? m.Account.Username : "???"; + string speech = entry.Speech; + + if ( i != min ) + builder.Append( "
" ); + + builder.AppendFormat( "{0} ({1}): {2}", name, Utility.FixHtml( account ), Utility.FixHtml( speech ) ); + } + + sLog = builder.ToString(); + } + + AddHtml( 10, 40, 280, 350, sLog, false, true ); + + if ( page > 0 ) + AddButton( 10, 395, 0xFAE, 0xFB0, 1, GumpButtonType.Reply, 0 ); // Previous page + + AddLabel( 45, 395, 0x481, String.Format( "Current page: {0}/{1}", page + 1, lastPage + 1 ) ); + + if ( page < lastPage ) + AddButton( 261, 395, 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0 ); // Next page + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + + switch ( info.ButtonID ) + { + case 1: // Previous page + { + if ( m_Page - 1 >= 0 ) + from.SendGump( new SpeechLogGump( m_Player, m_Log, m_Page - 1 ) ); + + break; + } + case 2: // Next page + { + if ( ( m_Page + 1 ) * MaxEntriesPerPage < m_Log.Count ) + from.SendGump( new SpeechLogGump( m_Player, m_Log, m_Page + 1 ) ); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Help/StuckMenu.cs b/Scripts/Engines/Help/StuckMenu.cs new file mode 100644 index 0000000..8e3873d --- /dev/null +++ b/Scripts/Engines/Help/StuckMenu.cs @@ -0,0 +1,237 @@ +using System; +using Server.Network; +using Server.Gumps; + +namespace Server.Menus.Questions +{ + public class StuckMenuEntry + { + private int m_Name; + private Point3D[] m_Locations; + + public int Name{ get{ return m_Name; } } + public Point3D[] Locations{ get{ return m_Locations; } } + + public StuckMenuEntry( int name, Point3D[] locations ) + { + m_Name = name; + m_Locations = locations; + } + } + + public class StuckMenu : Gump + { + private static StuckMenuEntry[] m_Entries = new StuckMenuEntry[] + { + // Britain + new StuckMenuEntry( 1011028, new Point3D[] + { + new Point3D( 1522, 1757, 28 ), + new Point3D( 1519, 1619, 10 ), + new Point3D( 1457, 1538, 30 ), + new Point3D( 1607, 1568, 20 ), + new Point3D( 1643, 1680, 18 ) + } ), + + // Trinsic + new StuckMenuEntry( 1011029, new Point3D[] + { + new Point3D( 2005, 2754, 30 ), + new Point3D( 1993, 2827, 0 ), + new Point3D( 2044, 2883, 0 ), + new Point3D( 1876, 2859, 20 ), + new Point3D( 1865, 2687, 0 ) + } ), + + // Vesper + new StuckMenuEntry( 1011030, new Point3D[] + { + new Point3D( 2973, 891, 0 ), + new Point3D( 3003, 776, 0 ), + new Point3D( 2910, 727, 0 ), + new Point3D( 2865, 804, 0 ), + new Point3D( 2832, 927, 0 ) + } ), + + // Minoc + new StuckMenuEntry( 1011031, new Point3D[] + { + new Point3D( 2498, 392, 0 ), + new Point3D( 2433, 541, 0 ), + new Point3D( 2445, 501, 15 ), + new Point3D( 2501, 469, 15 ), + new Point3D( 2444, 420, 15 ) + } ), + + // Yew + new StuckMenuEntry( 1011032, new Point3D[] + { + new Point3D( 490, 1166, 0 ), + new Point3D( 652, 1098, 0 ), + new Point3D( 650, 1013, 0 ), + new Point3D( 536, 979, 0 ), + new Point3D( 464, 970, 0 ) + } ), + + // Cove + new StuckMenuEntry( 1011033, new Point3D[] + { + new Point3D( 2230, 1159, 0 ), + new Point3D( 2218, 1203, 0 ), + new Point3D( 2247, 1194, 0 ), + new Point3D( 2236, 1224, 0 ), + new Point3D( 2273, 1231, 0 ) + } ) + }; + + private Mobile m_Mobile, m_Sender; + private bool m_MarkUse; + + private Timer m_Timer; + + public StuckMenu( Mobile beholder, Mobile beheld, bool markUse ) : base( 150, 50 ) + { + m_Sender = beholder; + m_Mobile = beheld; + m_MarkUse = markUse; + + Closable = false; + Dragable = false; + Disposable = false; + + AddBackground( 0, 0, 270, 320, 2600 ); + + AddHtmlLocalized( 50, 20, 250, 35, 1011027, false, false ); // Chose a town: + + StuckMenuEntry[] entries = m_Entries; + + for ( int i = 0; i < entries.Length; i++ ) + { + StuckMenuEntry entry = entries[i]; + + AddButton( 50, 55 + 35 * i, 208, 209, i + 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 75, 55 + 35 * i, 335, 40, entry.Name, false, false ); + } + + AddButton( 55, 263, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 90, 265, 200, 35, 1011012, false, false ); // CANCEL + } + + public void BeginClose() + { + StopClose(); + + m_Timer = new CloseTimer( m_Mobile ); + m_Timer.Start(); + + m_Mobile.Frozen = true; + } + + public void StopClose() + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Mobile.Frozen = false; + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + StopClose(); + + if ( info.ButtonID == 0 ) + { + if ( m_Mobile == m_Sender ) + m_Mobile.SendLocalizedMessage( 1010588 ); // You choose not to go to any city. + } + else + { + int index = info.ButtonID - 1; + StuckMenuEntry[] entries = m_Entries; + + if ( index >= 0 && index < entries.Length ) + Teleport( entries[index] ); + } + } + + private void Teleport( StuckMenuEntry entry ) + { + if ( m_MarkUse ) + { + m_Mobile.SendLocalizedMessage( 1010589 ); // You will be teleported within the next two minutes. + + new TeleportTimer( m_Mobile, entry, TimeSpan.FromSeconds( 10.0 + (Utility.RandomDouble() * 110.0) ) ).Start(); + + m_Mobile.UsedStuckMenu(); + } + else + { + new TeleportTimer( m_Mobile, entry, TimeSpan.Zero ).Start(); + } + } + + private class CloseTimer : Timer + { + private Mobile m_Mobile; + private DateTime m_End; + + public CloseTimer( Mobile m ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 1.0 ) ) + { + m_Mobile = m; + m_End = DateTime.Now + TimeSpan.FromMinutes( 3.0 ); + } + + protected override void OnTick() + { + if ( m_Mobile.NetState == null || DateTime.Now > m_End ) + { + m_Mobile.Frozen = false; + m_Mobile.CloseGump( typeof( StuckMenu ) ); + + Stop(); + } + else + { + m_Mobile.Frozen = true; + } + } + } + + private class TeleportTimer : Timer + { + private Mobile m_Mobile; + private StuckMenuEntry m_Destination; + private DateTime m_End; + + public TeleportTimer( Mobile mobile, StuckMenuEntry destination, TimeSpan delay ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 1.0 ) ) + { + Priority = TimerPriority.TwoFiftyMS; + + m_Mobile = mobile; + m_Destination = destination; + m_End = DateTime.Now + delay; + } + + protected override void OnTick() + { + if ( DateTime.Now < m_End ) + { + m_Mobile.Frozen = true; + } + else + { + m_Mobile.Frozen = false; + Stop(); + + int idx = Utility.Random( m_Destination.Locations.Length ); + Point3D dest = m_Destination.Locations[idx]; + + Map destMap = Map.Britannia; + + Mobiles.BaseCreature.TeleportPets( m_Mobile, dest, destMap ); + m_Mobile.MoveToWorld( dest, destMap ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Party/AddPartyTarget.cs b/Scripts/Engines/Party/AddPartyTarget.cs new file mode 100644 index 0000000..8217e28 --- /dev/null +++ b/Scripts/Engines/Party/AddPartyTarget.cs @@ -0,0 +1,47 @@ +using System; +using Server; +using Server.Targeting; + +namespace Server.Engines.PartySystem +{ + public class AddPartyTarget : Target + { + public AddPartyTarget( Mobile from ) : base( 8, false, TargetFlags.None ) + { + from.SendLocalizedMessage( 1005454 ); // Who would you like to add to your party? + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + Mobile m = (Mobile)o; + Party p = Party.Get( from ); + Party mp = Party.Get( m ); + + if ( from == m ) + from.SendLocalizedMessage( 1005439 ); // You cannot add yourself to a party. + else if ( p != null && p.Leader != from ) + from.SendLocalizedMessage( 1005453 ); // You may only add members to the party if you are the leader. + else if ( m.Party is Mobile ) + return; + else if ( p != null && (p.Members.Count + p.Candidates.Count) >= Party.Capacity ) + from.SendLocalizedMessage( 1008095 ); // You may only have 10 in your party (this includes candidates). + else if ( !m.Player && m.Body.IsHuman ) + m.SayTo( from, 1005443 ); // Nay, I would rather stay here and watch a nail rust. + else if ( !m.Player ) + from.SendLocalizedMessage( 1005444 ); // The creature ignores your offer. + else if ( mp != null && mp == p ) + from.SendLocalizedMessage( 1005440 ); // This person is already in your party! + else if ( mp != null ) + from.SendLocalizedMessage( 1005441 ); // This person is already in a party! + else + Party.Invite( from, m ); + } + else + { + from.SendLocalizedMessage( 1005442 ); // You may only add living things to your party! + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Party/DeclineTimer.cs b/Scripts/Engines/Party/DeclineTimer.cs new file mode 100644 index 0000000..c4ac7bc --- /dev/null +++ b/Scripts/Engines/Party/DeclineTimer.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Engines.PartySystem +{ + public class DeclineTimer : Timer + { + private Mobile m_Mobile, m_Leader; + + private static Hashtable m_Table = new Hashtable(); + + public static void Start( Mobile m, Mobile leader ) + { + DeclineTimer t = (DeclineTimer)m_Table[m]; + + if ( t != null ) + t.Stop(); + + m_Table[m] = t = new DeclineTimer( m, leader ); + t.Start(); + } + + private DeclineTimer( Mobile m, Mobile leader ) : base( TimeSpan.FromSeconds( 30.0 ) ) + { + m_Mobile = m; + m_Leader = leader; + } + + protected override void OnTick() + { + m_Table.Remove( m_Mobile ); + + if ( m_Mobile.Party == m_Leader && PartyCommands.Handler != null ) + PartyCommands.Handler.OnDecline( m_Mobile, m_Leader ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Party/Packets.cs b/Scripts/Engines/Party/Packets.cs new file mode 100644 index 0000000..c9ee9df --- /dev/null +++ b/Scripts/Engines/Party/Packets.cs @@ -0,0 +1,79 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Engines.PartySystem +{ + public sealed class PartyEmptyList : Packet + { + public PartyEmptyList( Mobile m ) : base( 0xBF ) + { + EnsureCapacity( 7 ); + + m_Stream.Write( (short) 0x0006 ); + m_Stream.Write( (byte) 0x02 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (int) m.Serial ); + } + } + + public sealed class PartyMemberList : Packet + { + public PartyMemberList( Party p ) : base( 0xBF ) + { + EnsureCapacity( 7 + p.Count*4 ); + + m_Stream.Write( (short) 0x0006 ); + m_Stream.Write( (byte) 0x01 ); + m_Stream.Write( (byte) p.Count ); + + for ( int i = 0; i < p.Count; ++i ) + m_Stream.Write( (int) p[i].Mobile.Serial ); + } + } + + public sealed class PartyRemoveMember : Packet + { + public PartyRemoveMember( Mobile removed, Party p ) : base( 0xBF ) + { + EnsureCapacity( 11 + p.Count*4 ); + + m_Stream.Write( (short) 0x0006 ); + m_Stream.Write( (byte) 0x02 ); + m_Stream.Write( (byte) p.Count ); + + m_Stream.Write( (int) removed.Serial ); + + for ( int i = 0; i < p.Count; ++i ) + m_Stream.Write( (int) p[i].Mobile.Serial ); + } + } + + public sealed class PartyTextMessage : Packet + { + public PartyTextMessage( bool toAll, Mobile from, string text ) : base( 0xBF ) + { + if ( text == null ) + text = ""; + + EnsureCapacity( 12 + text.Length*2 ); + + m_Stream.Write( (short) 0x0006 ); + m_Stream.Write( (byte) (toAll ? 0x04 : 0x03) ); + m_Stream.Write( (int) from.Serial ); + m_Stream.WriteBigUniNull( text ); + } + } + + public sealed class PartyInvitation : Packet + { + public PartyInvitation( Mobile leader ) : base( 0xBF ) + { + EnsureCapacity( 10 ); + + m_Stream.Write( (short) 0x0006 ); + m_Stream.Write( (byte) 0x07 ); + m_Stream.Write( (int) leader.Serial ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Party/Party.cs b/Scripts/Engines/Party/Party.cs new file mode 100644 index 0000000..bc72eea --- /dev/null +++ b/Scripts/Engines/Party/Party.cs @@ -0,0 +1,461 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Targeting; +using Server.Commands; +using System.Collections.Generic; + +namespace Server.Engines.PartySystem +{ + public class Party : IParty + { + private Mobile m_Leader; + private List m_Members; + private List m_Candidates; + private List m_Listeners; // staff listening + + public const int Capacity = 10; + + public static void Initialize() + { + EventSink.Logout += new LogoutEventHandler( EventSink_Logout ); + EventSink.Login += new LoginEventHandler( EventSink_Login ); + EventSink.PlayerDeath += new PlayerDeathEventHandler( EventSink_PlayerDeath ); + + CommandSystem.Register( "ListenToParty", AccessLevel.GameMaster, new CommandEventHandler( ListenToParty_OnCommand ) ); + } + + public static void ListenToParty_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ListenToParty_OnTarget ) ); + e.Mobile.SendMessage( "Target a partied player." ); + } + + public static void ListenToParty_OnTarget( Mobile from, object obj ) + { + if ( obj is Mobile ) + { + Party p = Party.Get( (Mobile) obj ); + + if ( p == null ) + { + from.SendMessage( "They are not in a party." ); + } + else if ( p.m_Listeners.Contains( from ) ) + { + p.m_Listeners.Remove( from ); + from.SendMessage( "You are no longer listening to that party." ); + } + else + { + p.m_Listeners.Add( from ); + from.SendMessage( "You are now listening to that party." ); + } + } + } + + public static void EventSink_PlayerDeath( PlayerDeathEventArgs e ) + { + Mobile from = e.Mobile; + Party p = Party.Get( from ); + + if ( p != null ) + { + Mobile m = from.LastKiller; + + if ( m == from ) + p.SendPublicMessage( from, "I killed myself !!" ); + else if ( m == null ) + p.SendPublicMessage( from, "I was killed !!" ); + else + p.SendPublicMessage( from, String.Format( "I was killed by {0} !!", m.Name ) ); + } + } + + private class RejoinTimer : Timer + { + private Mobile m_Mobile; + + public RejoinTimer( Mobile m ) : base( TimeSpan.FromSeconds( 1.0 ) ) + { + m_Mobile = m; + } + + protected override void OnTick() + { + Party p = Party.Get( m_Mobile ); + + if ( p == null ) + return; + + m_Mobile.SendLocalizedMessage( 1005437 ); // You have rejoined the party. + m_Mobile.Send( new PartyMemberList( p ) ); + + Packet message = Packet.Acquire( new MessageLocalizedAffix( Serial.MinusOne, -1, MessageType.Label, 0x3B2, 3, 1008087, "", AffixType.Prepend | AffixType.System, m_Mobile.Name, "" ) ); + Packet attrs = Packet.Acquire( new MobileAttributesN( m_Mobile ) ); + + foreach ( PartyMemberInfo mi in p.Members ) + { + Mobile m = mi.Mobile; + + if ( m != m_Mobile ) + { + m.Send( message ); + m.Send( new MobileStatusCompact( m_Mobile.CanBeRenamedBy( m ), m_Mobile ) ); + m.Send( attrs ); + m_Mobile.Send( new MobileStatusCompact( m.CanBeRenamedBy( m_Mobile ), m ) ); + m_Mobile.Send( new MobileAttributesN( m ) ); + } + } + + Packet.Release( message ); + Packet.Release( attrs ); + } + } + + public static void EventSink_Login( LoginEventArgs e ) + { + Mobile from = e.Mobile; + Party p = Party.Get( from ); + + if ( p != null ) + new RejoinTimer( from ).Start(); + else + from.Party = null; + } + + public static void EventSink_Logout( LogoutEventArgs e ) + { + Mobile from = e.Mobile; + Party p = Party.Get( from ); + + if ( p != null ) + p.Remove( from ); + + from.Party = null; + } + + public static Party Get( Mobile m ) + { + if ( m == null ) + return null; + + return m.Party as Party; + } + + public Party( Mobile leader ) + { + m_Leader = leader; + + m_Members = new List(); + m_Candidates = new List(); + m_Listeners = new List(); + + m_Members.Add( new PartyMemberInfo( leader ) ); + } + + public void Add( Mobile m ) + { + PartyMemberInfo mi = this[m]; + + if ( mi == null ) + { + m_Members.Add( new PartyMemberInfo( m ) ); + m.Party = this; + + Packet memberList = Packet.Acquire( new PartyMemberList( this ) ); + Packet attrs = Packet.Acquire( new MobileAttributesN( m ) ); + + for ( int i = 0; i < m_Members.Count; ++i ) + { + Mobile f = ((PartyMemberInfo)m_Members[i]).Mobile; + + f.Send( memberList ); + + if ( f != m ) + { + f.Send( new MobileStatusCompact( m.CanBeRenamedBy( f ), m ) ); + f.Send( attrs ); + m.Send( new MobileStatusCompact( f.CanBeRenamedBy( m ), f ) ); + m.Send( new MobileAttributesN( f ) ); + } + } + + Packet.Release( memberList ); + Packet.Release( attrs ); + } + } + + public void OnAccept( Mobile from ) + { + OnAccept( from, false ); + } + + public void OnAccept( Mobile from, bool force ) + { + // : joined the party. + SendToAll( new MessageLocalizedAffix( Serial.MinusOne, -1, MessageType.Label, 0x3B2, 3, 1008094, "", AffixType.Prepend | AffixType.System, from.Name, "" ) ); + + from.SendLocalizedMessage( 1005445 ); // You have been added to the party. + + m_Candidates.Remove( from ); + Add( from ); + } + + public void OnDecline( Mobile from, Mobile leader ) + { + // : Does not wish to join the party. + leader.SendLocalizedMessage( 1008091, false, from.Name ); + + from.SendLocalizedMessage( 1008092 ); // You notify them that you do not wish to join the party. + + m_Candidates.Remove( from ); + from.Send( new PartyEmptyList( from ) ); + + if ( m_Candidates.Count == 0 && m_Members.Count <= 1 ) + { + for ( int i = 0; i < m_Members.Count; ++i ) + { + this[i].Mobile.Send( new PartyEmptyList( this[i].Mobile ) ); + this[i].Mobile.Party = null; + } + + m_Members.Clear(); + } + } + + public void Remove( Mobile m ) + { + if ( m == m_Leader ) + { + Disband(); + } + else + { + for ( int i = 0; i < m_Members.Count; ++i ) + { + if ( ((PartyMemberInfo)m_Members[i]).Mobile == m ) + { + m_Members.RemoveAt( i ); + + m.Party = null; + m.Send( new PartyEmptyList( m ) ); + + m.SendLocalizedMessage( 1005451 ); // You have been removed from the party. + + SendToAll( new PartyRemoveMember( m, this ) ); + SendToAll( 1005452 ); // A player has been removed from your party. + + break; + } + } + + if ( m_Members.Count == 1 ) + { + SendToAll( 1005450 ); // The last person has left the party... + Disband(); + } + } + } + + public bool Contains( Mobile m ) + { + return ( this[m] != null ); + } + + public void Disband() + { + SendToAll( 1005449 ); // Your party has disbanded. + + for ( int i = 0; i < m_Members.Count; ++i ) + { + this[i].Mobile.Send( new PartyEmptyList( this[i].Mobile ) ); + this[i].Mobile.Party = null; + } + + m_Members.Clear(); + } + + public static void Invite( Mobile from, Mobile target ) + { + Party p = Party.Get( from ); + + if ( p == null ) + from.Party = p = new Party( from ); + + if ( !p.Candidates.Contains( target ) ) + p.Candidates.Add( target ); + + // : You are invited to join the party. Type /accept to join or /decline to decline the offer. + target.Send( new MessageLocalizedAffix( Serial.MinusOne, -1, MessageType.Label, 0x3B2, 3, 1008089, "", AffixType.Prepend | AffixType.System, from.Name, "" ) ); + + from.SendLocalizedMessage( 1008090 ); // You have invited them to join the party. + + target.Send( new PartyInvitation( from ) ); + target.Party = from; + + DeclineTimer.Start( target, from ); + } + + public void SendToAll( int number ) + { + SendToAll( number, "", 0x3B2 ); + } + + public void SendToAll( int number, string args ) + { + SendToAll( number, args, 0x3B2 ); + } + + public void SendToAll( int number, string args, int hue ) + { + SendToAll( new MessageLocalized( Serial.MinusOne, -1, MessageType.Regular, hue, 3, number, "System", args ) ); + } + + public void SendPublicMessage( Mobile from, string text ) + { + SendToAll( new PartyTextMessage( true, from, text ) ); + + for ( int i = 0; i < m_Listeners.Count; ++i ) + { + Mobile mob = m_Listeners[i]; + + if ( mob.Party != this ) + m_Listeners[i].SendMessage( "[{0}]: {1}", from.Name, text ); + } + + SendToStaffMessage( from, "[Party]: {0}", text ); + } + + public void SendPrivateMessage( Mobile from, Mobile to, string text ) + { + to.Send( new PartyTextMessage( false, from, text ) ); + + for ( int i = 0; i < m_Listeners.Count; ++i ) + { + Mobile mob = m_Listeners[i]; + + if ( mob.Party != this ) + m_Listeners[i].SendMessage( "[{0}]->[{1}]: {2}", from.Name, to.Name, text ); + } + + SendToStaffMessage( from, "[Party]->[{0}]: {1}", to.Name, text ); + } + + private void SendToStaffMessage( Mobile from, string text ) + { + Packet p = null; + + foreach( NetState ns in from.GetClientsInRange( 8 ) ) + { + Mobile mob = ns.Mobile; + + if( mob != null && mob.AccessLevel >= AccessLevel.GameMaster && mob.AccessLevel > from.AccessLevel && mob.Party != this && !m_Listeners.Contains( mob ) ) + { + if( p == null ) + p = Packet.Acquire( new UnicodeMessage( from.Serial, from.Body, MessageType.Regular, from.SpeechHue, 3, from.Language, from.Name, text ) ); + + ns.Send( p ); + } + } + + Packet.Release( p ); + } + private void SendToStaffMessage( Mobile from, string format, params object[] args ) + { + SendToStaffMessage( from, String.Format( format, args ) ); + } + + public void SendToAll( Packet p ) + { + p.Acquire(); + + for ( int i = 0; i < m_Members.Count; ++i ) + m_Members[i].Mobile.Send( p ); + + if ( p is MessageLocalized || p is MessageLocalizedAffix || p is UnicodeMessage || p is AsciiMessage ) + { + for ( int i = 0; i < m_Listeners.Count; ++i ) + { + Mobile mob = m_Listeners[i]; + + if ( mob.Party != this ) + mob.Send( p ); + } + } + + p.Release(); + } + + public void OnStamChanged( Mobile m ) + { + Packet p = null; + + for ( int i = 0; i < m_Members.Count; ++i ) + { + Mobile c = m_Members[i].Mobile; + + if ( c != m && m.Map == c.Map && Utility.InUpdateRange( c, m ) && c.CanSee( m ) ) + { + if ( p == null ) + p = Packet.Acquire( new MobileStamN( m ) ); + + c.Send( p ); + } + } + + Packet.Release( p ); + } + + public void OnManaChanged( Mobile m ) + { + Packet p = null; + + for ( int i = 0; i < m_Members.Count; ++i ) + { + Mobile c = m_Members[i].Mobile; + + if ( c != m && m.Map == c.Map && Utility.InUpdateRange( c, m ) && c.CanSee( m ) ) + { + if ( p == null ) + p = Packet.Acquire( new MobileManaN( m ) ); + + c.Send( p ); + } + } + + Packet.Release( p ); + } + + public void OnStatsQuery( Mobile beholder, Mobile beheld ) + { + if ( beholder != beheld && Contains( beholder ) && beholder.Map == beheld.Map && Utility.InUpdateRange( beholder, beheld ) ) + { + if ( !beholder.CanSee( beheld ) ) + beholder.Send( new MobileStatusCompact( beheld.CanBeRenamedBy( beholder ), beheld ) ); + + beholder.Send( new MobileAttributesN( beheld ) ); + } + } + + public int Count{ get{ return m_Members.Count; } } + public bool Active{ get{ return m_Members.Count > 1; } } + public Mobile Leader{ get{ return m_Leader; } } + public List Members{ get{ return m_Members; } } + public List Candidates { get { return m_Candidates; } } + + public PartyMemberInfo this[int index]{ get{ return m_Members[index]; } } + public PartyMemberInfo this[Mobile m] + { + get + { + for ( int i = 0; i < m_Members.Count; ++i ) + if ( m_Members[i].Mobile == m ) + return m_Members[i]; + + return null; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Party/PartyCommands.cs b/Scripts/Engines/Party/PartyCommands.cs new file mode 100644 index 0000000..7edf939 --- /dev/null +++ b/Scripts/Engines/Party/PartyCommands.cs @@ -0,0 +1,123 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Engines.PartySystem +{ + public class PartyCommandHandlers : PartyCommands + { + public static void Initialize() + { + PartyCommands.Handler = new PartyCommandHandlers(); + } + + public override void OnAdd( Mobile from ) + { + Party p = Party.Get( from ); + + if ( p != null && p.Leader != from ) + from.SendLocalizedMessage( 1005453 ); // You may only add members to the party if you are the leader. + else if ( p != null && (p.Members.Count + p.Candidates.Count) >= Party.Capacity ) + from.SendLocalizedMessage( 1008095 ); // You may only have 10 in your party (this includes candidates). + else + from.Target = new AddPartyTarget( from ); + } + + public override void OnRemove( Mobile from, Mobile target ) + { + Party p = Party.Get( from ); + + if ( p == null ) + { + from.SendLocalizedMessage( 3000211 ); // You are not in a party. + return; + } + + if ( p.Leader == from && target == null ) + { + from.SendLocalizedMessage( 1005455 ); // Who would you like to remove from your party? + from.Target = new RemovePartyTarget(); + } + else if ( (p.Leader == from || from == target) && p.Contains( target ) ) + { + p.Remove( target ); + } + } + + public override void OnPrivateMessage( Mobile from, Mobile target, string text ) + { + if ( text.Length > 128 || (text = text.Trim()).Length == 0 ) + return; + + Party p = Party.Get( from ); + + if ( p != null && p.Contains( target ) ) + p.SendPrivateMessage( from, target, text ); + else + from.SendLocalizedMessage( 3000211 ); // You are not in a party. + } + + public override void OnPublicMessage( Mobile from, string text ) + { + if ( text.Length > 128 || (text = text.Trim()).Length == 0 ) + return; + + Party p = Party.Get( from ); + + if ( p != null ) + p.SendPublicMessage( from, text ); + else + from.SendLocalizedMessage( 3000211 ); // You are not in a party. + } + + public override void OnSetCanLoot( Mobile from, bool canLoot ) + { + Party p = Party.Get( from ); + + if ( p == null ) + { + from.SendLocalizedMessage( 3000211 ); // You are not in a party. + } + else + { + PartyMemberInfo mi = p[from]; + + if ( mi != null ) + { + mi.CanLoot = canLoot; + + if ( canLoot ) + from.SendLocalizedMessage( 1005447 ); // You have chosen to allow your party to loot your corpse. + else + from.SendLocalizedMessage( 1005448 ); // You have chosen to prevent your party from looting your corpse. + } + } + } + + public override void OnAccept( Mobile from, Mobile sentLeader ) + { + Mobile leader = from.Party as Mobile; + from.Party = null; + + Party p = Party.Get( leader ); + + if ( leader == null || p == null || !p.Candidates.Contains( from ) ) + from.SendLocalizedMessage( 3000222 ); // No one has invited you to be in a party. + else if ( (p.Members.Count + p.Candidates.Count) <= Party.Capacity ) + p.OnAccept( from ); + } + + public override void OnDecline( Mobile from, Mobile sentLeader ) + { + Mobile leader = from.Party as Mobile; + from.Party = null; + + Party p = Party.Get( leader ); + + if ( leader == null || p == null || !p.Candidates.Contains( from ) ) + from.SendLocalizedMessage( 3000222 ); // No one has invited you to be in a party. + else + p.OnDecline( from, leader ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Party/PartyMemberInfo.cs b/Scripts/Engines/Party/PartyMemberInfo.cs new file mode 100644 index 0000000..6e6af25 --- /dev/null +++ b/Scripts/Engines/Party/PartyMemberInfo.cs @@ -0,0 +1,20 @@ +using System; +using Server; + +namespace Server.Engines.PartySystem +{ + public class PartyMemberInfo + { + private Mobile m_Mobile; + private bool m_CanLoot; + + public Mobile Mobile{ get{ return m_Mobile; } } + public bool CanLoot{ get{ return m_CanLoot; } set{ m_CanLoot = value; } } + + public PartyMemberInfo( Mobile m ) + { + m_Mobile = m; + m_CanLoot = true; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Party/RemoveFromParty.cs b/Scripts/Engines/Party/RemoveFromParty.cs new file mode 100644 index 0000000..f07242a --- /dev/null +++ b/Scripts/Engines/Party/RemoveFromParty.cs @@ -0,0 +1,31 @@ +using System; +using Server.Mobiles; +using Server.Engines.PartySystem; + +namespace Server.ContextMenus +{ + public class RemoveFromPartyEntry : ContextMenuEntry + { + private Mobile m_From; + private Mobile m_Target; + + public RemoveFromPartyEntry( Mobile from, Mobile target ) : base( 0198, 12 ) + { + m_From = from; + m_Target = target; + } + + public override void OnClick() + { + Party p = Party.Get( m_From ); + + if ( p == null || p.Leader != m_From || !p.Contains( m_Target ) ) + return; + + if ( m_From == m_Target ) + m_From.SendLocalizedMessage( 1005446 ); // You may only remove yourself from a party if you are not the leader. + else + p.Remove( m_Target ); + } + } +} diff --git a/Scripts/Engines/Party/RemovePartyTarget.cs b/Scripts/Engines/Party/RemovePartyTarget.cs new file mode 100644 index 0000000..b06945b --- /dev/null +++ b/Scripts/Engines/Party/RemovePartyTarget.cs @@ -0,0 +1,30 @@ +using System; +using Server; +using Server.Targeting; + +namespace Server.Engines.PartySystem +{ + public class RemovePartyTarget : Target + { + public RemovePartyTarget() : base( 8, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + Mobile m = (Mobile)o; + Party p = Party.Get( from ); + + if ( p == null || p.Leader != from || !p.Contains( m ) ) + return; + + if ( from == m ) + from.SendLocalizedMessage( 1005446 ); // You may only remove yourself from a party if you are not the leader. + else + p.Remove( m ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Pathing/FastAStarAlgorithm.cs b/Scripts/Engines/Pathing/FastAStarAlgorithm.cs new file mode 100644 index 0000000..a39e8e7 --- /dev/null +++ b/Scripts/Engines/Pathing/FastAStarAlgorithm.cs @@ -0,0 +1,292 @@ +using System; +using System.Collections; +using Server; +using Server.Mobiles; +using Server.PathAlgorithms; +using CalcMoves = Server.Movement.Movement; +using MoveImpl = Server.Movement.MovementImpl; + +namespace Server.PathAlgorithms.FastAStar +{ + public struct PathNode + { + public int cost, total; + public int parent, next, prev; + public int z; + } + + public class FastAStarAlgorithm : PathAlgorithm + { + public static PathAlgorithm Instance = new FastAStarAlgorithm(); + + private const int MaxDepth = 300; + private const int AreaSize = 38; + + private const int NodeCount = AreaSize * AreaSize * PlaneCount; + + private const int PlaneOffset = 128; + private const int PlaneCount = 13; + private const int PlaneHeight = 20; + + private static Direction[] m_Path = new Direction[AreaSize * AreaSize]; + private static PathNode[] m_Nodes = new PathNode[NodeCount]; + private static BitArray m_Touched = new BitArray( NodeCount ); + private static BitArray m_OnOpen = new BitArray( NodeCount ); + private static int[] m_Successors = new int[8]; + + private static int m_xOffset, m_yOffset; + private static int m_OpenList; + + private Point3D m_Goal; + + public int Heuristic( int x, int y, int z ) + { + x -= m_Goal.X - m_xOffset; + y -= m_Goal.Y - m_yOffset; + z -= m_Goal.Z; + + x *= 11; + y *= 11; + + return (x*x)+(y*y)+(z*z); + } + + public override bool CheckCondition( Mobile m, Map map, Point3D start, Point3D goal ) + { + return Utility.InRange( start, goal, AreaSize ); + } + + private void RemoveFromChain( int node ) + { + if ( node < 0 || node >= NodeCount ) + return; + + if ( !m_Touched[node] || !m_OnOpen[node] ) + return; + + int prev = m_Nodes[node].prev; + int next = m_Nodes[node].next; + + if ( m_OpenList == node ) + m_OpenList = next; + + if ( prev != -1 ) + m_Nodes[prev].next = next; + + if ( next != -1 ) + m_Nodes[next].prev = prev; + + m_Nodes[node].prev = -1; + m_Nodes[node].next = -1; + } + + private void AddToChain( int node ) + { + if ( node < 0 || node >= NodeCount ) + return; + + RemoveFromChain( node ); + + if ( m_OpenList != -1 ) + m_Nodes[m_OpenList].prev = node; + + m_Nodes[node].next = m_OpenList; + m_Nodes[node].prev = -1; + + m_OpenList = node; + + m_Touched[node] = true; + m_OnOpen[node] = true; + } + + public override Direction[] Find( Mobile m, Map map, Point3D start, Point3D goal ) + { + if ( !Utility.InRange( start, goal, AreaSize ) ) + return null; + + m_Touched.SetAll( false ); + + m_Goal = goal; + + m_xOffset = (start.X + goal.X - AreaSize) / 2; + m_yOffset = (start.Y + goal.Y - AreaSize) / 2; + + int fromNode = GetIndex( start.X, start.Y, start.Z ); + int destNode = GetIndex( goal.X, goal.Y, goal.Z ); + + m_OpenList = fromNode; + + m_Nodes[m_OpenList].cost = 0; + m_Nodes[m_OpenList].total = Heuristic( start.X - m_xOffset, start.Y - m_yOffset, start.Z ); + m_Nodes[m_OpenList].parent = -1; + m_Nodes[m_OpenList].next = -1; + m_Nodes[m_OpenList].prev = -1; + m_Nodes[m_OpenList].z = start.Z; + + m_OnOpen[m_OpenList] = true; + m_Touched[m_OpenList] = true; + + BaseCreature bc = m as BaseCreature; + + int pathCount, parent; + int backtrack = 0, depth = 0; + + Direction[] path = m_Path; + + while ( m_OpenList != -1 ) + { + int bestNode = FindBest( m_OpenList ); + + if ( ++depth > MaxDepth ) + break; + + if ( bc != null ) + { + MoveImpl.AlwaysIgnoreDoors = bc.CanOpenDoors; + MoveImpl.IgnoreMovableImpassables = bc.CanMoveOverObstacles; + } + + int[] vals = m_Successors; + int count = GetSuccessors( bestNode, m, map ); + + MoveImpl.AlwaysIgnoreDoors = false; + MoveImpl.IgnoreMovableImpassables = false; + + if ( count == 0 ) + break; + + for ( int i = 0; i < count; ++i ) + { + int newNode = vals[i]; + + bool wasTouched = m_Touched[newNode]; + + if ( !wasTouched ) + { + int newCost = m_Nodes[bestNode].cost + 1; + int newTotal = newCost + Heuristic( newNode % AreaSize, (newNode / AreaSize) % AreaSize, m_Nodes[newNode].z ); + + if ( !wasTouched || m_Nodes[newNode].total > newTotal ) + { + m_Nodes[newNode].parent = bestNode; + m_Nodes[newNode].cost = newCost; + m_Nodes[newNode].total = newTotal; + + if ( !wasTouched || !m_OnOpen[newNode] ) + { + AddToChain( newNode ); + + if ( newNode == destNode ) + { + pathCount = 0; + parent = m_Nodes[newNode].parent; + + while ( parent != -1 ) + { + path[pathCount++] = GetDirection( parent % AreaSize, (parent / AreaSize) % AreaSize, newNode % AreaSize, (newNode / AreaSize) % AreaSize ); + newNode = parent; + parent = m_Nodes[newNode].parent; + + if ( newNode == fromNode ) + break; + } + + Direction[] dirs = new Direction[pathCount]; + + while ( pathCount > 0 ) + dirs[backtrack++] = path[--pathCount]; + + return dirs; + } + } + } + } + } + } + + return null; + } + + private int GetIndex( int x, int y, int z ) + { + x -= m_xOffset; + y -= m_yOffset; + z += PlaneOffset; + z /= PlaneHeight; + + return x + (y * AreaSize) + (z * AreaSize * AreaSize); + } + + private int FindBest( int node ) + { + int least = m_Nodes[node].total; + int leastNode = node; + + while ( node != -1 ) + { + if ( m_Nodes[node].total < least ) + { + least = m_Nodes[node].total; + leastNode = node; + } + + node = m_Nodes[node].next; + } + + RemoveFromChain( leastNode ); + + m_Touched[leastNode] = true; + m_OnOpen[leastNode] = false; + + return leastNode; + } + + public int GetSuccessors( int p, Mobile m, Map map ) + { + int px = p % AreaSize; + int py = (p / AreaSize) % AreaSize; + int pz = m_Nodes[p].z; + int x, y, z; + + Point3D p3D = new Point3D( px + m_xOffset, py + m_yOffset, pz ); + + int[] vals = m_Successors; + int count = 0; + + for ( int i = 0; i < 8; ++i ) + { + switch ( i ) + { + default: + case 0: x = 0; y = -1; break; + case 1: x = 1; y = -1; break; + case 2: x = 1; y = 0; break; + case 3: x = 1; y = 1; break; + case 4: x = 0; y = 1; break; + case 5: x = -1; y = 1; break; + case 6: x = -1; y = 0; break; + case 7: x = -1; y = -1; break; + } + + x += px; + y += py; + + if ( x < 0 || x >= AreaSize || y < 0 || y >= AreaSize ) + continue; + + if ( CalcMoves.CheckMovement( m, map, p3D, (Direction)i, out z ) ) + { + int idx = GetIndex( x + m_xOffset, y + m_yOffset, z ); + + if ( idx >= 0 && idx < NodeCount ) + { + m_Nodes[idx].z = z; + vals[count++] = idx; + } + } + } + + return count; + } + } +} diff --git a/Scripts/Engines/Pathing/MoveResult.cs b/Scripts/Engines/Pathing/MoveResult.cs new file mode 100644 index 0000000..075ee1c --- /dev/null +++ b/Scripts/Engines/Pathing/MoveResult.cs @@ -0,0 +1,14 @@ +using System; + +namespace Server +{ + public delegate MoveResult MoveMethod( Direction d ); + + public enum MoveResult + { + BadState, + Blocked, + Success, + SuccessAutoTurn + } +} \ No newline at end of file diff --git a/Scripts/Engines/Pathing/Movement.cs b/Scripts/Engines/Pathing/Movement.cs new file mode 100644 index 0000000..baf3276 --- /dev/null +++ b/Scripts/Engines/Pathing/Movement.cs @@ -0,0 +1,529 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Movement +{ + public class MovementImpl : IMovementImpl + { + private const int PersonHeight = 16; + private const int StepHeight = 2; + + private const TileFlag ImpassableSurface = TileFlag.Impassable | TileFlag.Surface; + + private static bool m_AlwaysIgnoreDoors; + private static bool m_IgnoreMovableImpassables; + private static bool m_IgnoreSpellFields; + + public static bool AlwaysIgnoreDoors{ get{ return m_AlwaysIgnoreDoors; } set{ m_AlwaysIgnoreDoors = value; } } + public static bool IgnoreMovableImpassables{ get{ return m_IgnoreMovableImpassables; } set{ m_IgnoreMovableImpassables = value; } } + public static bool IgnoreSpellFields{ get{ return m_IgnoreSpellFields; } set{ m_IgnoreSpellFields = value; } } + + public static void Configure() + { + Movement.Impl = new MovementImpl(); + } + + private MovementImpl() + { + } + + private bool IsOk( bool ignoreDoors, bool ignoreSpellFields, int ourZ, int ourTop, StaticTile[] tiles, List items ) + { + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile check = tiles[i]; + ItemData itemData = TileData.ItemTable[check.ID & TileData.MaxItemValue]; + + if ( (itemData.Flags & ImpassableSurface) != 0 ) // Impassable || Surface + { + int checkZ = check.Z; + int checkTop = checkZ + itemData.CalcHeight; + + if ( checkTop > ourZ && ourTop > checkZ ) + return false; + } + } + + for ( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + int itemID = item.ItemID & TileData.MaxItemValue; + ItemData itemData = TileData.ItemTable[itemID]; + TileFlag flags = itemData.Flags; + + if ( (flags & ImpassableSurface) != 0 ) // Impassable || Surface + { + if ( ignoreDoors && ((flags & TileFlag.Door) != 0 || itemID == 0x692 || itemID == 0x846 || itemID == 0x873 || (itemID >= 0x6F5 && itemID <= 0x6F6)) ) + continue; + + if ( ignoreSpellFields && ( itemID == 0x82 || itemID == 0x3946 || itemID == 0x3956 ) ) + continue; + + int checkZ = item.Z; + int checkTop = checkZ + itemData.CalcHeight; + + if ( checkTop > ourZ && ourTop > checkZ ) + return false; + } + } + + return true; + } + + private List[] m_Pools = new List[4] + { + new List(), new List(), + new List(), new List(), + }; + + private List m_Sectors = new List(); + + private bool Check( Map map, Mobile m, List items, int x, int y, int startTop, int startZ, bool canSwim, bool cantWalk, out int newZ ) + { + newZ = 0; + + StaticTile[] tiles = map.Tiles.GetStaticTiles( x, y, true ); + LandTile landTile = map.Tiles.GetLandTile( x, y ); + + bool landBlocks = (TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Impassable) != 0; + bool considerLand = !landTile.Ignored; + + if ( landBlocks && canSwim && (TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Wet) != 0 ) //Impassable, Can Swim, and Is water. Don't block it. + landBlocks = false; + else if ( cantWalk && (TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Wet) == 0 ) //Can't walk and it's not water + landBlocks = true; + + int landZ = 0, landCenter = 0, landTop = 0; + + map.GetAverageZ( x, y, ref landZ, ref landCenter, ref landTop ); + + bool moveIsOk = false; + + int stepTop = startTop + StepHeight; + int checkTop = startZ + PersonHeight; + + bool ignoreDoors = ( m_AlwaysIgnoreDoors || !m.Alive || m.Body.BodyID == 0x3DB || m.IsDeadBondedPet ); + bool ignoreSpellFields = false; + + #region Tiles + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + ItemData itemData = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + TileFlag flags = itemData.Flags; + + if ( (flags & ImpassableSurface) == TileFlag.Surface || (canSwim && (flags & TileFlag.Wet) != 0) ) // Surface && !Impassable + { + if ( cantWalk && (flags & TileFlag.Wet) == 0 ) + continue; + + int itemZ = tile.Z; + int itemTop = itemZ; + int ourZ = itemZ + itemData.CalcHeight; + int ourTop = ourZ + PersonHeight; + int testTop = checkTop; + + if ( moveIsOk ) + { + int cmp = Math.Abs( ourZ - m.Z ) - Math.Abs( newZ - m.Z ); + + if ( cmp > 0 || (cmp == 0 && ourZ > newZ) ) + continue; + } + + if ( ourZ + PersonHeight > testTop ) + testTop = ourZ + PersonHeight; + + if ( !itemData.Bridge ) + itemTop += itemData.Height; + + if ( stepTop >= itemTop ) + { + int landCheck = itemZ; + + if ( itemData.Height >= StepHeight ) + landCheck += StepHeight; + else + landCheck += itemData.Height; + + if ( considerLand && landCheck < landCenter && landCenter > ourZ && testTop > landZ ) + continue; + + if ( IsOk( ignoreDoors, ignoreSpellFields, ourZ, testTop, tiles, items ) ) + { + newZ = ourZ; + moveIsOk = true; + } + } + } + } + #endregion + + #region Items + for ( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + ItemData itemData = item.ItemData; + TileFlag flags = itemData.Flags; + + if ( !item.Movable && ((flags & ImpassableSurface) == TileFlag.Surface || (m.CanSwim && (flags & TileFlag.Wet) != 0)) ) // Surface && !Impassable && !Movable + { + if ( cantWalk && (flags & TileFlag.Wet) == 0 ) + continue; + + int itemZ = item.Z; + int itemTop = itemZ; + int ourZ = itemZ + itemData.CalcHeight; + int ourTop = ourZ + PersonHeight; + int testTop = checkTop; + + if ( moveIsOk ) + { + int cmp = Math.Abs( ourZ - m.Z ) - Math.Abs( newZ - m.Z ); + + if ( cmp > 0 || (cmp == 0 && ourZ > newZ) ) + continue; + } + + if ( ourZ + PersonHeight > testTop ) + testTop = ourZ + PersonHeight; + + if ( !itemData.Bridge ) + itemTop += itemData.Height; + + if ( stepTop >= itemTop ) + { + int landCheck = itemZ; + + if ( itemData.Height >= StepHeight ) + landCheck += StepHeight; + else + landCheck += itemData.Height; + + if ( considerLand && landCheck < landCenter && landCenter > ourZ && testTop > landZ ) + continue; + + if ( IsOk( ignoreDoors, ignoreSpellFields, ourZ, testTop, tiles, items ) ) + { + newZ = ourZ; + moveIsOk = true; + } + } + } + } + + #endregion + + if ( considerLand && !landBlocks && stepTop >= landZ ) + { + int ourZ = landCenter; + int ourTop = ourZ + PersonHeight; + int testTop = checkTop; + + if ( ourZ + PersonHeight > testTop ) + testTop = ourZ + PersonHeight; + + bool shouldCheck = true; + + if ( moveIsOk ) + { + int cmp = Math.Abs( ourZ - m.Z ) - Math.Abs( newZ - m.Z ); + + if ( cmp > 0 || (cmp == 0 && ourZ > newZ) ) + shouldCheck = false; + } + + if ( shouldCheck && IsOk( ignoreDoors, ignoreSpellFields, ourZ, testTop, tiles, items ) ) + { + newZ = ourZ; + moveIsOk = true; + } + } + + return moveIsOk; + } + + public bool CheckMovement( Mobile m, Map map, Point3D loc, Direction d, out int newZ ) + { + if ( map == null || map == Map.Internal ) + { + newZ = 0; + return false; + } + + int xStart = loc.X; + int yStart = loc.Y; + int xForward = xStart, yForward = yStart; + int xRight = xStart, yRight = yStart; + int xLeft = xStart, yLeft = yStart; + + bool checkDiagonals = ((int)d & 0x1) == 0x1; + + Offset( d, ref xForward, ref yForward ); + Offset( (Direction)(((int)d - 1) & 0x7), ref xLeft, ref yLeft ); + Offset( (Direction)(((int)d + 1) & 0x7), ref xRight, ref yRight ); + + if ( xForward < 0 || yForward < 0 || xForward >= map.Width || yForward >= map.Height ) + { + newZ = 0; + return false; + } + + int startZ, startTop; + + List itemsStart = m_Pools[0]; + List itemsForward = m_Pools[1]; + List itemsLeft = m_Pools[2]; + List itemsRight = m_Pools[3]; + + bool ignoreMovableImpassables = m_IgnoreMovableImpassables; + TileFlag reqFlags = ImpassableSurface; + + if ( m.CanSwim ) + reqFlags |= TileFlag.Wet; + + if ( checkDiagonals ) + { + Sector sectorStart = map.GetSector( xStart, yStart ); + Sector sectorForward = map.GetSector( xForward, yForward ); + Sector sectorLeft = map.GetSector( xLeft, yLeft ); + Sector sectorRight = map.GetSector( xRight, yRight ); + + List sectors = m_Sectors; + + sectors.Add( sectorStart ); + + if ( !sectors.Contains( sectorForward ) ) + sectors.Add( sectorForward ); + + if ( !sectors.Contains( sectorLeft ) ) + sectors.Add( sectorLeft ); + + if ( !sectors.Contains( sectorRight ) ) + sectors.Add( sectorRight ); + + for ( int i = 0; i < sectors.Count; ++i ) + { + Sector sector = sectors[i]; + + for ( int j = 0; j < sector.Items.Count; ++j ) + { + Item item = sector.Items[j]; + + if ( ignoreMovableImpassables && item.Movable && item.ItemData.Impassable ) + continue; + + if ( (item.ItemData.Flags & reqFlags) == 0 ) + continue; + + if ( sector == sectorStart && item.AtWorldPoint( xStart, yStart ) && !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + itemsStart.Add( item ); + else if ( sector == sectorForward && item.AtWorldPoint( xForward, yForward ) && !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + itemsForward.Add( item ); + else if ( sector == sectorLeft && item.AtWorldPoint( xLeft, yLeft ) && !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + itemsLeft.Add( item ); + else if ( sector == sectorRight && item.AtWorldPoint( xRight, yRight ) && !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + itemsRight.Add( item ); + } + } + + if ( m_Sectors.Count > 0 ) + m_Sectors.Clear(); + } + else + { + Sector sectorStart = map.GetSector( xStart, yStart ); + Sector sectorForward = map.GetSector( xForward, yForward ); + + if ( sectorStart == sectorForward ) + { + for ( int i = 0; i < sectorStart.Items.Count; ++i ) + { + Item item = sectorStart.Items[i]; + + if ( ignoreMovableImpassables && item.Movable && item.ItemData.Impassable ) + continue; + + if ( (item.ItemData.Flags & reqFlags) == 0 ) + continue; + + if ( item.AtWorldPoint( xStart, yStart ) && !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + itemsStart.Add( item ); + else if ( item.AtWorldPoint( xForward, yForward ) && !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + itemsForward.Add( item ); + } + } + else + { + for ( int i = 0; i < sectorForward.Items.Count; ++i ) + { + Item item = sectorForward.Items[i]; + + if ( ignoreMovableImpassables && item.Movable && item.ItemData.Impassable ) + continue; + + if ( (item.ItemData.Flags & reqFlags) == 0 ) + continue; + + if ( item.AtWorldPoint( xForward, yForward ) && !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + itemsForward.Add( item ); + } + + for ( int i = 0; i < sectorStart.Items.Count; ++i ) + { + Item item = sectorStart.Items[i]; + + if ( ignoreMovableImpassables && item.Movable && item.ItemData.Impassable ) + continue; + + if ( (item.ItemData.Flags & reqFlags) == 0 ) + continue; + + if ( item.AtWorldPoint( xStart, yStart ) && !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + itemsStart.Add( item ); + } + } + } + + GetStartZ( m, map, loc, itemsStart, out startZ, out startTop ); + + bool moveIsOk = Check( map, m, itemsForward, xForward, yForward, startTop, startZ, m.CanSwim, m.CantWalk, out newZ ); + + if ( moveIsOk && checkDiagonals ) + { + int hold; + + if ( m.Player && m.AccessLevel < AccessLevel.GameMaster ) { + if ( !Check( map, m, itemsLeft, xLeft, yLeft, startTop, startZ, m.CanSwim, m.CantWalk, out hold ) || !Check( map, m, itemsRight, xRight, yRight, startTop, startZ, m.CanSwim, m.CantWalk, out hold ) ) + moveIsOk = false; + } else { + if ( !Check( map, m, itemsLeft, xLeft, yLeft, startTop, startZ, m.CanSwim, m.CantWalk, out hold ) && !Check( map, m, itemsRight, xRight, yRight, startTop, startZ, m.CanSwim, m.CantWalk, out hold ) ) + moveIsOk = false; + } + } + + for ( int i = 0; i < (checkDiagonals ? 4 : 2); ++i ) + { + if ( m_Pools[i].Count > 0 ) + m_Pools[i].Clear(); + } + + if ( !moveIsOk ) + newZ = startZ; + + return moveIsOk; + } + + public bool CheckMovement( Mobile m, Direction d, out int newZ ) + { + return CheckMovement( m, m.Map, m.Location, d, out newZ ); + } + + private void GetStartZ( Mobile m, Map map, Point3D loc, List itemList, out int zLow, out int zTop ) + { + int xCheck = loc.X, yCheck = loc.Y; + + LandTile landTile = map.Tiles.GetLandTile( xCheck, yCheck ); + int landZ = 0, landCenter = 0, landTop = 0; + bool landBlocks = (TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Impassable) != 0; + + if ( landBlocks && m.CanSwim && (TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Wet) != 0 ) + landBlocks = false; + else if ( m.CantWalk && (TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Wet) == 0 ) + landBlocks = true; + + map.GetAverageZ( xCheck, yCheck, ref landZ, ref landCenter, ref landTop ); + + bool considerLand = !landTile.Ignored; + + int zCenter = zLow = zTop = 0; + bool isSet = false; + + if ( considerLand && !landBlocks && loc.Z >= landCenter ) + { + zLow = landZ; + zCenter = landCenter; + + if ( !isSet || landTop > zTop ) + zTop = landTop; + + isSet = true; + } + + StaticTile[] staticTiles = map.Tiles.GetStaticTiles( xCheck, yCheck, true ); + + for ( int i = 0; i < staticTiles.Length; ++i ) + { + StaticTile tile = staticTiles[i]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + + int calcTop = (tile.Z + id.CalcHeight); + + if ( (!isSet || calcTop >= zCenter) && ( (id.Flags & TileFlag.Surface) != 0 || ( m.CanSwim && (id.Flags&TileFlag.Wet) != 0 ) ) && loc.Z >= calcTop ) + { + if ( m.CantWalk && (id.Flags & TileFlag.Wet) == 0 ) + continue; + + zLow = tile.Z; + zCenter = calcTop; + + int top = tile.Z + id.Height; + + if ( !isSet || top > zTop ) + zTop = top; + + isSet = true; + } + } + + for ( int i = 0; i < itemList.Count; ++i ) + { + Item item = itemList[i]; + + ItemData id = item.ItemData; + + int calcTop = item.Z + id.CalcHeight; + + if ( (!isSet || calcTop >= zCenter) && ( (id.Flags & TileFlag.Surface) != 0 || ( m.CanSwim && (id.Flags&TileFlag.Wet) != 0 ) ) && loc.Z >= calcTop ) + { + if ( m.CantWalk && (id.Flags & TileFlag.Wet) == 0 ) + continue; + + zLow = item.Z; + zCenter = calcTop; + + int top = item.Z + id.Height; + + if ( !isSet || top > zTop ) + zTop = top; + + isSet = true; + } + } + + if ( !isSet ) + zLow = zTop = loc.Z; + else if ( loc.Z > zTop ) + zTop = loc.Z; + } + + public void Offset( Direction d, ref int x, ref int y ) + { + switch ( d & Direction.Mask ) + { + case Direction.North: --y; break; + case Direction.South: ++y; break; + case Direction.West: --x; break; + case Direction.East: ++x; break; + case Direction.Right: ++x; --y; break; + case Direction.Left: --x; ++y; break; + case Direction.Down: ++x; ++y; break; + case Direction.Up: --x; --y; break; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Pathing/MovementPath.cs b/Scripts/Engines/Pathing/MovementPath.cs new file mode 100644 index 0000000..54764d0 --- /dev/null +++ b/Scripts/Engines/Pathing/MovementPath.cs @@ -0,0 +1,165 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Targeting; +using Server.PathAlgorithms; +using Server.PathAlgorithms.SlowAStar; +using Server.PathAlgorithms.FastAStar; +using Server.Commands; + +namespace Server +{ + public sealed class MovementPath + { + private Map m_Map; + private Point3D m_Start; + private Point3D m_Goal; + private Direction[] m_Directions; + + public Map Map{ get{ return m_Map; } } + public Point3D Start{ get{ return m_Start; } } + public Point3D Goal{ get{ return m_Goal; } } + public Direction[] Directions{ get{ return m_Directions; } } + public bool Success{ get{ return ( m_Directions != null && m_Directions.Length > 0 ); } } + + public static void Initialize() + { + CommandSystem.Register( "Path", AccessLevel.GameMaster, new CommandEventHandler( Path_OnCommand ) ); + } + + public static void Path_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, true, TargetFlags.None, new TargetCallback( Path_OnTarget ) ); + e.Mobile.SendMessage( "Target a location and a path will be drawn there." ); + } + + private static void Path( Mobile from, IPoint3D p, PathAlgorithm alg, string name, int zOffset ) + { + m_OverrideAlgorithm = alg; + + long start = DateTime.Now.Ticks; + MovementPath path = new MovementPath( from, new Point3D( p ) ); + long end = DateTime.Now.Ticks; + double len = Math.Round( (end-start) / 10000.0, 2 ); + + if ( !path.Success ) + { + from.SendMessage( "{0} path failed: {1}ms", name, len ); + } + else + { + from.SendMessage( "{0} path success: {1}ms", name, len ); + + int x = from.X; + int y = from.Y; + int z = from.Z; + + for ( int i = 0; i < path.Directions.Length; ++i ) + { + Movement.Movement.Offset( path.Directions[i], ref x, ref y ); + + new Items.MagicRune().MoveToWorld( new Point3D( x, y, z+zOffset ), from.Map ); + } + } + } + + public static void Path_OnTarget( Mobile from, object obj ) + { + IPoint3D p = obj as IPoint3D; + + if ( p == null ) + return; + + Spells.SpellHelper.GetSurfaceTop( ref p ); + + Path( from, p, FastAStarAlgorithm.Instance, "Fast", 0 ); + Path( from, p, SlowAStarAlgorithm.Instance, "Slow", 2 ); + m_OverrideAlgorithm = null; + + /*MovementPath path = new MovementPath( from, new Point3D( p ) ); + + if ( !path.Success ) + { + from.SendMessage( "No path to there could be found." ); + } + else + { + //for ( int i = 0; i < path.Directions.Length; ++i ) + // Timer.DelayCall( TimeSpan.FromSeconds( 0.1 + (i * 0.3) ), new TimerStateCallback( Pathfind ), new object[]{ from, path.Directions[i] } ); + int x = from.X; + int y = from.Y; + int z = from.Z; + + for ( int i = 0; i < path.Directions.Length; ++i ) + { + Movement.Movement.Offset( path.Directions[i], ref x, ref y ); + + new Items.MagicRune().MoveToWorld( new Point3D( x, y, z ), from.Map ); + } + }*/ + } + + public static void Pathfind( object state ) + { + object[] states = (object[])state; + Mobile from = (Mobile) states[0]; + Direction d = (Direction) states[1]; + + try + { + from.Direction = d; + from.NetState.BlockAllPackets=true; + from.Move( d ); + from.NetState.BlockAllPackets=false; + from.ProcessDelta(); + } + catch + { + } + } + + private static PathAlgorithm m_OverrideAlgorithm; + + public static PathAlgorithm OverrideAlgorithm + { + get{ return m_OverrideAlgorithm; } + set{ m_OverrideAlgorithm = value; } + } + + public MovementPath( Mobile m, Point3D goal ) + { + Point3D start = m.Location; + Map map = m.Map; + + m_Map = map; + m_Start = start; + m_Goal = goal; + + if ( map == null || map == Map.Internal ) + return; + + if ( Utility.InRange( start, goal, 1 ) ) + return; + + try + { + PathAlgorithm alg = m_OverrideAlgorithm; + + if ( alg == null ) + { + alg = FastAStarAlgorithm.Instance; + + //if ( !alg.CheckCondition( m, map, start, goal ) ) // SlowAstar is still broken + // alg = SlowAStarAlgorithm.Instance; // TODO: Fix SlowAstar + } + + if ( alg != null && alg.CheckCondition( m, map, start, goal ) ) + m_Directions = alg.Find( m, map, start, goal ); + } + catch ( Exception e ) + { + Console.WriteLine( "Warning: {0}: Pathing error from {1} to {2}", e.GetType().Name, start, goal ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Pathing/PathAlgorithm.cs b/Scripts/Engines/Pathing/PathAlgorithm.cs new file mode 100644 index 0000000..d7e7a51 --- /dev/null +++ b/Scripts/Engines/Pathing/PathAlgorithm.cs @@ -0,0 +1,35 @@ +using System; + +namespace Server.PathAlgorithms +{ + public abstract class PathAlgorithm + { + public abstract bool CheckCondition( Mobile m, Map map, Point3D start, Point3D goal ); + public abstract Direction[] Find( Mobile m, Map map, Point3D start, Point3D goal ); + + private static Direction[] m_CalcDirections = new Direction[9] + { + Direction.Up, + Direction.North, + Direction.Right, + Direction.West, + Direction.North, + Direction.East, + Direction.Left, + Direction.South, + Direction.Down + }; + + public Direction GetDirection( int xSource, int ySource, int xDest, int yDest ) + { + int x = xDest + 1 - xSource; + int y = yDest + 1 - ySource; + int v = (y * 3) + x; + + if ( v < 0 || v >= 9 ) + return Direction.North; + + return m_CalcDirections[v]; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Pathing/PathFollower.cs b/Scripts/Engines/Pathing/PathFollower.cs new file mode 100644 index 0000000..c814bf3 --- /dev/null +++ b/Scripts/Engines/Pathing/PathFollower.cs @@ -0,0 +1,204 @@ +using System; +using Server; +using Server.Movement; +using CalcMoves = Server.Movement.Movement; + +namespace Server +{ + public class PathFollower + { + // Should we use pathfinding? 'false' for not + private static bool Enabled = true; + + private Mobile m_From; + private IPoint3D m_Goal; + private MovementPath m_Path; + private int m_Index; + private Point3D m_Next, m_LastGoalLoc; + private DateTime m_LastPathTime; + private MoveMethod m_Mover; + + public MoveMethod Mover + { + get{ return m_Mover; } + set{ m_Mover = value; } + } + + public IPoint3D Goal + { + get{ return m_Goal; } + } + + public PathFollower( Mobile from, IPoint3D goal ) + { + m_From = from; + m_Goal = goal; + } + + public MoveResult Move( Direction d ) + { + if ( m_Mover == null ) + return ( m_From.Move( d ) ? MoveResult.Success : MoveResult.Blocked ); + + return m_Mover( d ); + } + + public Point3D GetGoalLocation() + { + if ( m_Goal is Item ) + return ((Item)m_Goal).GetWorldLocation(); + + return new Point3D( m_Goal ); + } + + private static TimeSpan RepathDelay = TimeSpan.FromSeconds( 2.0 ); + + public void Advance( ref Point3D p, int index ) + { + if ( m_Path != null && m_Path.Success ) + { + Direction[] dirs = m_Path.Directions; + + if ( index >= 0 && index < dirs.Length ) + { + int x = p.X, y = p.Y; + + CalcMoves.Offset( dirs[index], ref x, ref y ); + + p.X = x; + p.Y = y; + } + } + } + + public void ForceRepath() + { + m_Path = null; + } + + public bool CheckPath() + { + if ( !Enabled ) + return false; + + bool repath = false; + + Point3D goal = GetGoalLocation(); + + if ( m_Path == null ) + repath = true; + else if ( (!m_Path.Success || goal != m_LastGoalLoc) && (m_LastPathTime + RepathDelay) <= DateTime.Now ) + repath = true; + else if ( m_Path.Success && Check( m_From.Location, m_LastGoalLoc, 0 ) ) + repath = true; + + if ( !repath ) + return false; + + m_LastPathTime = DateTime.Now; + m_LastGoalLoc = goal; + + m_Path = new MovementPath( m_From, goal ); + + m_Index = 0; + m_Next = m_From.Location; + + Advance( ref m_Next, m_Index ); + + return true; + } + + public bool Check( Point3D loc, Point3D goal, int range ) + { + if ( !Utility.InRange( loc, goal, range ) ) + return false; + + if ( range <= 1 && Math.Abs( loc.Z - goal.Z ) >= 16 ) + return false; + + return true; + } + + public bool Follow( bool run, int range ) + { + Point3D goal = GetGoalLocation(); + Direction d; + + if ( Check( m_From.Location, goal, range ) ) + return true; + + bool repathed = CheckPath(); + + if ( !Enabled || !m_Path.Success ) + { + d = m_From.GetDirectionTo( goal ); + + if ( run ) + d |= Direction.Running; + + m_From.SetDirection( d ); + Move( d ); + + return Check( m_From.Location, goal, range ); + } + + d = m_From.GetDirectionTo( m_Next ); + + if ( run ) + d |= Direction.Running; + + m_From.SetDirection( d ); + + MoveResult res = Move( d ); + + if ( res == MoveResult.Blocked ) + { + if ( repathed ) + return false; + + m_Path = null; + CheckPath(); + + if ( !m_Path.Success ) + { + d = m_From.GetDirectionTo( goal ); + + if ( run ) + d |= Direction.Running; + + m_From.SetDirection( d ); + Move( d ); + + return Check( m_From.Location, goal, range ); + } + + d = m_From.GetDirectionTo( m_Next ); + + if ( run ) + d |= Direction.Running; + + m_From.SetDirection( d ); + + res = Move( d ); + + if ( res == MoveResult.Blocked ) + return false; + } + + if ( m_From.X == m_Next.X && m_From.Y == m_Next.Y ) + { + if ( m_From.Z == m_Next.Z ) + { + ++m_Index; + Advance( ref m_Next, m_Index ); + } + else + { + m_Path = null; + } + } + + return Check( m_From.Location, goal, range ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Pathing/SlowAStarAlgorithm.cs b/Scripts/Engines/Pathing/SlowAStarAlgorithm.cs new file mode 100644 index 0000000..a558c74 --- /dev/null +++ b/Scripts/Engines/Pathing/SlowAStarAlgorithm.cs @@ -0,0 +1,260 @@ +using System; +using Server; +using Server.Mobiles; +using Server.PathAlgorithms; +using CalcMoves = Server.Movement.Movement; +using MoveImpl = Server.Movement.MovementImpl; + +namespace Server.PathAlgorithms.SlowAStar +{ + public struct PathNode + { + public int x, y, z; + public int g, h; + public int px, py, pz; + public int dir; + } + + public class SlowAStarAlgorithm : PathAlgorithm + { + public static PathAlgorithm Instance = new SlowAStarAlgorithm(); + + private const int MaxDepth = 300; + private const int MaxNodes = MaxDepth * 16; + + private static PathNode[] m_Closed = new PathNode[MaxNodes]; + private static PathNode[] m_Open = new PathNode[MaxNodes]; + private static PathNode[] m_Successors = new PathNode[8]; + private static Direction[] m_Path = new Direction[MaxNodes]; + + private Point3D m_Goal; + + public int Heuristic( int x, int y, int z ) + { + x -= m_Goal.X; + y -= m_Goal.Y; + z -= m_Goal.Z; + + x *= 11; + y *= 11; + + return (x*x)+(y*y)+(z*z); + } + + public override bool CheckCondition( Mobile m, Map map, Point3D start, Point3D goal ) + { + return false; + } + + public override Direction[] Find( Mobile m, Map map, Point3D start, Point3D goal ) + { + m_Goal = goal; + + BaseCreature bc = m as BaseCreature; + + PathNode curNode; + + PathNode goalNode = new PathNode(); + goalNode.x = goal.X; + goalNode.y = goal.Y; + goalNode.z = goal.Z; + + PathNode startNode = new PathNode(); + startNode.x = start.X; + startNode.y = start.Y; + startNode.z = start.Z; + startNode.h = Heuristic( startNode.x, startNode.y, startNode.z ); + + PathNode[] closed = m_Closed, open = m_Open, successors = m_Successors; + Direction[] path = m_Path; + + int closedCount = 0, openCount = 0, sucCount = 0, pathCount = 0; + int popIndex, curF; + int x, y, z; + int depth = 0; + + int xBacktrack, yBacktrack, zBacktrack, iBacktrack = 0; + + open[openCount++] = startNode; + + while ( openCount > 0 ) + { + curNode = open[0]; + curF = curNode.g + curNode.h; + popIndex = 0; + + for ( int i = 1; i < openCount; ++i ) + { + if ( (open[i].g + open[i].h) < curF ) + { + curNode = open[i]; + curF = curNode.g + curNode.h; + popIndex = i; + } + } + + if ( curNode.x == goalNode.x && curNode.y == goalNode.y && Math.Abs( curNode.z-goalNode.z ) < 16 ) + { + if ( closedCount == MaxNodes ) + break; + + closed[closedCount++] = curNode; + + xBacktrack = curNode.px; + yBacktrack = curNode.py; + zBacktrack = curNode.pz; + + if ( pathCount == MaxNodes ) + break; + + path[pathCount++] = (Direction)curNode.dir; + + while ( xBacktrack != startNode.x || yBacktrack != startNode.y || zBacktrack != startNode.z ) + { + bool found = false; + + for ( int j = 0; !found && j < closedCount; ++j ) + { + if ( closed[j].x == xBacktrack && closed[j].y == yBacktrack && closed[j].z == zBacktrack ) + { + if ( pathCount == MaxNodes ) + break; + + curNode = closed[j]; + path[pathCount++] = (Direction)curNode.dir; + xBacktrack = curNode.px; + yBacktrack = curNode.py; + zBacktrack = curNode.pz; + found = true; + } + } + + if ( !found ) + { + Console.WriteLine( "bugaboo.." ); + return null; + } + + if ( pathCount == MaxNodes ) + break; + } + + if ( pathCount == MaxNodes ) + break; + + Direction[] dirs = new Direction[pathCount]; + + while ( pathCount > 0 ) + dirs[iBacktrack++] = path[--pathCount]; + + return dirs; + } + + --openCount; + + for ( int i = popIndex; i < openCount; ++i ) + open[i] = open[i + 1]; + + sucCount = 0; + + if ( bc != null ) + { + MoveImpl.AlwaysIgnoreDoors = bc.CanOpenDoors; + MoveImpl.IgnoreMovableImpassables = bc.CanMoveOverObstacles; + } + + for ( int i = 0; i < 8; ++i ) + { + switch ( i ) + { + default: + case 0: x = 0; y = -1; break; + case 1: x = 1; y = -1; break; + case 2: x = 1; y = 0; break; + case 3: x = 1; y = 1; break; + case 4: x = 0; y = 1; break; + case 5: x = -1; y = 1; break; + case 6: x = -1; y = 0; break; + case 7: x = -1; y = -1; break; + } + + if ( CalcMoves.CheckMovement( m, map, new Point3D( curNode.x, curNode.y, curNode.z ), (Direction)i, out z ) ) + { + successors[sucCount].x = x + curNode.x; + successors[sucCount].y = y + curNode.y; + successors[sucCount++].z = z; + } + } + + MoveImpl.AlwaysIgnoreDoors = false; + MoveImpl.IgnoreMovableImpassables = false; + + if ( sucCount == 0 || ++depth > MaxDepth ) + break; + + for ( int i = 0; i < sucCount; ++i ) + { + x = successors[i].x; + y = successors[i].y; + z = successors[i].z; + + successors[i].g = curNode.g + 1; + + int openIndex = -1, closedIndex = -1; + + for ( int j = 0; openIndex == -1 && j < openCount; ++j ) + { + if ( open[j].x == x && open[j].y == y && open[j].z == z ) + openIndex = j; + } + + if ( openIndex >= 0 && open[openIndex].g < successors[i].g ) + continue; + + for ( int j = 0; closedIndex == -1 && j < closedCount; ++j ) + { + if ( closed[j].x == x && closed[j].y == y && closed[j].z == z ) + closedIndex = j; + } + + if ( closedIndex >= 0 && closed[closedIndex].g < successors[i].g ) + continue; + + if ( openIndex >= 0 ) + { + --openCount; + + for ( int j = openIndex; j < openCount; ++j ) + open[j] = open[j + 1]; + } + + if ( closedIndex >= 0 ) + { + --closedCount; + + for ( int j = closedIndex; j < closedCount; ++j ) + closed[j] = closed[j + 1]; + } + + successors[i].px = curNode.x; + successors[i].py = curNode.y; + successors[i].pz = curNode.z; + successors[i].dir = (int)GetDirection( curNode.x, curNode.y, x, y ); + successors[i].h = Heuristic( x, y, z ); + + if ( openCount == MaxNodes ) + break; + + open[openCount++] = successors[i]; + } + + if ( openCount == MaxNodes || closedCount == MaxNodes ) + break; + + closed[closedCount++] = curNode; + } + + return null; + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Charts/BarGraph.cs b/Scripts/Engines/Reports/Objects/Charts/BarGraph.cs new file mode 100644 index 0000000..80afba9 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Charts/BarGraph.cs @@ -0,0 +1,311 @@ +using System; +using System.Collections; + +namespace Server.Engines.Reports +{ + public enum BarGraphRenderMode + { + Bars, + Lines + } + + public class BarGraph : Chart + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "bg", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new BarGraph(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private int m_Ticks; + private BarGraphRenderMode m_RenderMode; + + private string m_xTitle; + private string m_yTitle; + + private int m_FontSize = 7; + private int m_Interval = 1; + + private BarRegion[] m_Regions; + + public int Ticks{ get{ return m_Ticks; } set{ m_Ticks = value; } } + public BarGraphRenderMode RenderMode{ get{ return m_RenderMode; } set{ m_RenderMode = value; } } + + public string xTitle{ get{ return m_xTitle; } set{ m_xTitle = value; } } + public string yTitle{ get{ return m_yTitle; } set{ m_yTitle = value; } } + + public int FontSize{ get{ return m_FontSize; } set{ m_FontSize = value; } } + public int Interval{ get{ return m_Interval; } set{ m_Interval = value; } } + + public BarRegion[] Regions{ get{ return m_Regions; } set{ m_Regions = value; } } + + public BarGraph( string name, string fileName, int ticks, string xTitle, string yTitle, BarGraphRenderMode rm ) + { + m_Name = name; + m_FileName = fileName; + m_Ticks = ticks; + m_xTitle = xTitle; + m_yTitle = yTitle; + m_RenderMode = rm; + } + + private BarGraph() + { + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + base.SerializeAttributes( op ); + + op.SetInt32( "t", m_Ticks ); + op.SetInt32( "r", (int) m_RenderMode ); + + op.SetString( "x", m_xTitle ); + op.SetString( "y", m_yTitle ); + + op.SetInt32( "s", m_FontSize ); + op.SetInt32( "i", m_Interval ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + base.DeserializeAttributes( ip ); + + m_Ticks = ip.GetInt32( "t" ); + m_RenderMode = (BarGraphRenderMode) ip.GetInt32( "r" ); + + m_xTitle = Utility.Intern( ip.GetString( "x" ) ); + m_yTitle = Utility.Intern( ip.GetString( "y" ) ); + + m_FontSize = ip.GetInt32( "s" ); + m_Interval = ip.GetInt32( "i" ); + } + + public static int LookupReportValue( Snapshot ss, string reportName, string valueName ) + { + for ( int j = 0; j < ss.Children.Count; ++j ) + { + Report report = ss.Children[j] as Report; + + if ( report == null || report.Name != reportName ) + continue; + + for ( int k = 0; k < report.Items.Count; ++k ) + { + ReportItem item = report.Items[k]; + + if ( item.Values[0].Value == valueName ) + return Utility.ToInt32( item.Values[1].Value ); + } + + break; + } + + return -1; + } + + public static BarGraph DailyAverage( SnapshotHistory history, string reportName, string valueName ) + { + int[] totals = new int[24]; + int[] counts = new int[24]; + + int min = history.Snapshots.Count - (7 * 24); // averages over one week + + if ( min < 0 ) + min = 0; + + for ( int i = min; i < history.Snapshots.Count; ++i ) + { + Snapshot ss = history.Snapshots[i]; + + int val = LookupReportValue( ss, reportName, valueName ); + + if ( val == -1 ) + continue; + + int hour = ss.TimeStamp.TimeOfDay.Hours; + + totals[hour] += val; + counts[hour]++; + } + + BarGraph barGraph = new BarGraph( "Hourly average " + valueName, "graphs_" + valueName.ToLower() + "_avg", 10, "Time", valueName, BarGraphRenderMode.Lines ); + + barGraph.m_FontSize = 6; + + for ( int i = 7; i <= totals.Length+7; ++i ) + { + int val; + + if ( counts[i%totals.Length] == 0 ) + val = 0; + else + val = (totals[i%totals.Length] + (counts[i%totals.Length] / 2)) / counts[i%totals.Length]; + + int realHours = i%totals.Length; + int hours; + + if ( realHours == 0 ) + hours = 12; + else if ( realHours > 12 ) + hours = realHours - 12; + else + hours = realHours; + + barGraph.Items.Add( hours + (realHours >= 12 ? " PM" : " AM"), val ); + } + + return barGraph; + } + + public static BarGraph Growth( SnapshotHistory history, string reportName, string valueName ) + { + BarGraph barGraph = new BarGraph( "Growth of " + valueName + " over time", "graphs_" + valueName.ToLower() + "_growth", 10, "Time", valueName, BarGraphRenderMode.Lines ); + + barGraph.FontSize = 6; + barGraph.Interval = 7; + + DateTime startPeriod = history.Snapshots[0].TimeStamp.Date + TimeSpan.FromDays( 1.0 ); + DateTime endPeriod = history.Snapshots[history.Snapshots.Count - 1].TimeStamp.Date; + + ArrayList regions = new ArrayList(); + + DateTime curDate = DateTime.MinValue; + int curPeak = -1; + int curLow = 1000; + int curTotl = 0; + int curCont = 0; + int curValu = 0; + + for ( int i = 0; i < history.Snapshots.Count; ++i ) + { + Snapshot ss = history.Snapshots[i]; + DateTime timeStamp = ss.TimeStamp; + + if ( timeStamp < startPeriod || timeStamp >= endPeriod ) + continue; + + int val = LookupReportValue( ss, reportName, valueName ); + + if ( val == -1 ) + continue; + + DateTime thisDate = timeStamp.Date; + + if ( curDate == DateTime.MinValue ) + curDate = thisDate; + + curCont++; + curTotl += val; + curValu = curTotl / curCont; + + if ( curDate != thisDate && curValu >= 0 ) + { + string mnthName = thisDate.ToString( "MMMM" ); + + if ( regions.Count == 0 ) + { + regions.Add( new BarRegion( barGraph.Items.Count, barGraph.Items.Count, mnthName ) ); + } + else + { + BarRegion region = (BarRegion)regions[regions.Count - 1]; + + if ( region.m_Name == mnthName ) + region.m_RangeTo = barGraph.Items.Count; + else + regions.Add( new BarRegion( barGraph.Items.Count, barGraph.Items.Count, mnthName ) ); + } + + barGraph.Items.Add( thisDate.Day.ToString(), curValu ); + + curPeak = val; + curLow = val; + } + else + { + if ( val > curPeak ) + curPeak = val; + + if ( val > 0 && val < curLow ) + curLow = val; + } + + curDate = thisDate; + } + + barGraph.Regions = (BarRegion[])regions.ToArray( typeof( BarRegion ) ); + + return barGraph; + } + + public static BarGraph OverTime( SnapshotHistory history, string reportName, string valueName, int step, int max, int ival ) + { + BarGraph barGraph = new BarGraph( valueName + " over time", "graphs_" + valueName.ToLower() + "_ot", 10, "Time", valueName, BarGraphRenderMode.Lines ); + + TimeSpan ts = TimeSpan.FromHours( (max*step)-0.5 ); + + DateTime mostRecent = history.Snapshots[history.Snapshots.Count - 1].TimeStamp; + DateTime minTime = mostRecent - ts; + + barGraph.FontSize = 6; + barGraph.Interval = ival; + + ArrayList regions = new ArrayList(); + + for ( int i = 0; i < history.Snapshots.Count; ++i ) + { + Snapshot ss = history.Snapshots[i]; + DateTime timeStamp = ss.TimeStamp; + + if ( timeStamp < minTime ) + continue; + + if ( (i % step) != 0 ) + continue; + + int val = LookupReportValue( ss, reportName, valueName ); + + if ( val == -1 ) + continue; + + int realHours = timeStamp.TimeOfDay.Hours; + int hours; + + if ( realHours == 0 ) + hours = 12; + else if ( realHours > 12 ) + hours = realHours - 12; + else + hours = realHours; + + string dayName = timeStamp.DayOfWeek.ToString(); + + if ( regions.Count == 0 ) + { + regions.Add( new BarRegion( barGraph.Items.Count, barGraph.Items.Count, dayName ) ); + } + else + { + BarRegion region = (BarRegion) regions[regions.Count - 1]; + + if ( region.m_Name == dayName ) + region.m_RangeTo = barGraph.Items.Count; + else + regions.Add( new BarRegion( barGraph.Items.Count, barGraph.Items.Count, dayName ) ); + } + + barGraph.Items.Add( hours + (realHours >= 12 ? " PM" : " AM"), val ); + } + + barGraph.Regions = (BarRegion[])regions.ToArray( typeof( BarRegion ) ); + + return barGraph; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Charts/Chart.cs b/Scripts/Engines/Reports/Objects/Charts/Chart.cs new file mode 100644 index 0000000..3e9983c --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Charts/Chart.cs @@ -0,0 +1,44 @@ +using System; + +namespace Server.Engines.Reports +{ + public abstract class Chart : PersistableObject + { + protected string m_Name; + protected string m_FileName; + protected ChartItemCollection m_Items; + + public string Name{ get{ return m_Name; } set{ m_Name = value; } } + public string FileName{ get{ return m_FileName; } set{ m_FileName = value; } } + public ChartItemCollection Items{ get{ return m_Items; } } + + public Chart() + { + m_Items = new ChartItemCollection(); + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetString( "n", m_Name ); + op.SetString( "f", m_FileName ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_Name = Utility.Intern( ip.GetString( "n" ) ); + m_FileName = Utility.Intern( ip.GetString( "f" ) ); + } + + public override void SerializeChildren( PersistanceWriter op ) + { + for ( int i = 0; i < m_Items.Count; ++i ) + m_Items[i].Serialize( op ); + } + + public override void DeserializeChildren( PersistanceReader ip ) + { + while ( ip.HasChild ) + m_Items.Add( ip.GetChild() as ChartItem ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Charts/ChartItem.cs b/Scripts/Engines/Reports/Objects/Charts/ChartItem.cs new file mode 100644 index 0000000..5b5193f --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Charts/ChartItem.cs @@ -0,0 +1,46 @@ +using System; + +namespace Server.Engines.Reports +{ + public class ChartItem : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "ci", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new ChartItem(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private string m_Name; + private int m_Value; + + public string Name{ get{ return m_Name; } set{ m_Name = value; } } + public int Value{ get{ return m_Value; } set{ m_Value = value; } } + + private ChartItem() + { + } + + public ChartItem( string name, int value ) + { + m_Name = name; + m_Value = value; + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetString( "n", m_Name ); + op.SetInt32( "v", m_Value ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_Name = Utility.Intern( ip.GetString( "n" ) ); + m_Value = ip.GetInt32( "v" ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Charts/ChartItemCollection.cs b/Scripts/Engines/Reports/Objects/Charts/ChartItemCollection.cs new file mode 100644 index 0000000..90dfb26 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Charts/ChartItemCollection.cs @@ -0,0 +1,205 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.ChartItem. + /// + public class ChartItemCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public ChartItemCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.ChartItem at a specific position in the ChartItemCollection. + /// + public Server.Engines.Reports.ChartItem this[int index] + { + get + { + return ((Server.Engines.Reports.ChartItem)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + public int Add( string name, int value ) + { + return Add( new ChartItem( name, value ) ); + } + + /// + /// Append a Server.Engines.Reports.ChartItem entry to this collection. + /// + /// Server.Engines.Reports.ChartItem instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.ChartItem value) + { + return this.List.Add(value); + } + + /// + /// Determines whether a specified Server.Engines.Reports.ChartItem instance is in this collection. + /// + /// Server.Engines.Reports.ChartItem instance to search for. + /// True if the Server.Engines.Reports.ChartItem instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.ChartItem value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.ChartItem instance is in this collection. + /// + /// Server.Engines.Reports.ChartItem instance to find. + /// The zero-based index of the specified Server.Engines.Reports.ChartItem instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.ChartItem value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.ChartItem instance from this collection. + /// + /// The Server.Engines.Reports.ChartItem instance to remove. + public void Remove(Server.Engines.Reports.ChartItem value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.ChartItem instance. + /// + /// An Server.Engines.Reports.ChartItem's enumerator. + public new ChartItemCollectionEnumerator GetEnumerator() + { + return new ChartItemCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.ChartItem instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.ChartItem instance to insert. + public void Insert(int index, Server.Engines.Reports.ChartItem value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.ChartItem. + /// + public class ChartItemCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.ChartItem _currentElement; + + /// + /// Collection to enumerate. + /// + private ChartItemCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal ChartItemCollectionEnumerator(ChartItemCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.ChartItem object in the enumerated ChartItemCollection currently indexed by this instance. + /// + public Server.Engines.Reports.ChartItem Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Charts/PieChart.cs b/Scripts/Engines/Reports/Objects/Charts/PieChart.cs new file mode 100644 index 0000000..9a50e36 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Charts/PieChart.cs @@ -0,0 +1,47 @@ +using System; + +namespace Server.Engines.Reports +{ + public class PieChart : Chart + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "pc", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new PieChart(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private bool m_ShowPercents; + + public bool ShowPercents{ get{ return m_ShowPercents; } set{ m_ShowPercents = value; } } + + public PieChart( string name, string fileName, bool showPercents ) + { + m_Name = name; + m_FileName = fileName; + m_ShowPercents = showPercents; + } + + private PieChart() + { + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + base.SerializeAttributes( op ); + + op.SetBoolean( "p", m_ShowPercents ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + base.DeserializeAttributes( ip ); + + m_ShowPercents = ip.GetBoolean( "p" ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Reports/ItemValue.cs b/Scripts/Engines/Reports/Objects/Reports/ItemValue.cs new file mode 100644 index 0000000..8bc1d8a --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Reports/ItemValue.cs @@ -0,0 +1,53 @@ +using System; + +namespace Server.Engines.Reports +{ + public class ItemValue : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "iv", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new ItemValue(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private string m_Value; + private string m_Format; + + public string Value{ get{ return m_Value; } set{ m_Value = value; } } + public string Format{ get{ return m_Format; } set{ m_Format = value; } } + + private ItemValue() + { + } + + public ItemValue( string value ) : this( value, null ) + { + } + + public ItemValue( string value, string format ) + { + m_Value = value; + m_Format = format; + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetString( "v", m_Value ); + op.SetString( "f", m_Format ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_Value = ip.GetString( "v" ); + m_Format = Utility.Intern( ip.GetString( "f" ) ); + + if ( m_Format == null ) + Utility.Intern( ref m_Value ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Reports/ItemValueCollection.cs b/Scripts/Engines/Reports/Objects/Reports/ItemValueCollection.cs new file mode 100644 index 0000000..9fdaea6 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Reports/ItemValueCollection.cs @@ -0,0 +1,210 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.ItemValue. + /// + public class ItemValueCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public ItemValueCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.ItemValue at a specific position in the ItemValueCollection. + /// + public Server.Engines.Reports.ItemValue this[int index] + { + get + { + return ((Server.Engines.Reports.ItemValue)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + public int Add( string value ) + { + return Add( new ItemValue( value ) ); + } + + public int Add( string value, string format ) + { + return Add( new ItemValue( value, format ) ); + } + + /// + /// Append a Server.Engines.Reports.ItemValue entry to this collection. + /// + /// Server.Engines.Reports.ItemValue instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.ItemValue value) + { + return this.List.Add(value); + } + + /// + /// Determines whether a specified Server.Engines.Reports.ItemValue instance is in this collection. + /// + /// Server.Engines.Reports.ItemValue instance to search for. + /// True if the Server.Engines.Reports.ItemValue instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.ItemValue value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.ItemValue instance is in this collection. + /// + /// Server.Engines.Reports.ItemValue instance to find. + /// The zero-based index of the specified Server.Engines.Reports.ItemValue instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.ItemValue value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.ItemValue instance from this collection. + /// + /// The Server.Engines.Reports.ItemValue instance to remove. + public void Remove(Server.Engines.Reports.ItemValue value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.ItemValue instance. + /// + /// An Server.Engines.Reports.ItemValue's enumerator. + public new ItemValueCollectionEnumerator GetEnumerator() + { + return new ItemValueCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.ItemValue instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.ItemValue instance to insert. + public void Insert(int index, Server.Engines.Reports.ItemValue value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.ItemValue. + /// + public class ItemValueCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.ItemValue _currentElement; + + /// + /// Collection to enumerate. + /// + private ItemValueCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal ItemValueCollectionEnumerator(ItemValueCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.ItemValue object in the enumerated ItemValueCollection currently indexed by this instance. + /// + public Server.Engines.Reports.ItemValue Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Reports/Report.cs b/Scripts/Engines/Reports/Objects/Reports/Report.cs new file mode 100644 index 0000000..972e30e --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Reports/Report.cs @@ -0,0 +1,74 @@ +using System; + +namespace Server.Engines.Reports +{ + public class Report : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "rp", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new Report(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private string m_Name; + private string m_Width; + private ReportColumnCollection m_Columns; + private ReportItemCollection m_Items; + + public string Name{ get{ return m_Name; } set{ m_Name = value; } } + public string Width{ get{ return m_Width; } set{ m_Width = value; } } + public ReportColumnCollection Columns{ get{ return m_Columns; } } + public ReportItemCollection Items{ get{ return m_Items; } } + + private Report() : this( null, null ) + { + } + + public Report( string name, string width ) + { + m_Name = name; + m_Width = width; + m_Columns = new ReportColumnCollection(); + m_Items = new ReportItemCollection(); + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetString( "n", m_Name ); + op.SetString( "w", m_Width ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_Name = Utility.Intern( ip.GetString( "n" ) ); + m_Width = Utility.Intern( ip.GetString( "w" ) ); + } + + public override void SerializeChildren( PersistanceWriter op ) + { + for ( int i = 0; i < m_Columns.Count; ++i ) + m_Columns[i].Serialize( op ); + + for ( int i = 0; i < m_Items.Count; ++i ) + m_Items[i].Serialize( op ); + } + + public override void DeserializeChildren( PersistanceReader ip ) + { + while ( ip.HasChild ) + { + PersistableObject child = ip.GetChild(); + + if ( child is ReportColumn ) + m_Columns.Add( (ReportColumn) child ); + else if ( child is ReportItem ) + m_Items.Add( (ReportItem) child ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Reports/ReportColumn.cs b/Scripts/Engines/Reports/Objects/Reports/ReportColumn.cs new file mode 100644 index 0000000..de05459 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Reports/ReportColumn.cs @@ -0,0 +1,55 @@ +using System; + +namespace Server.Engines.Reports +{ + public class ReportColumn : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "rc", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new ReportColumn(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private string m_Width; + private string m_Align; + private string m_Name; + + public string Width{ get{ return m_Width; } set{ m_Width = value; } } + public string Align{ get{ return m_Align; } set{ m_Align = value; } } + public string Name{ get{ return m_Name; } set{ m_Name = value; } } + + private ReportColumn() + { + } + + public ReportColumn( string width, string align ) : this( width, align, null ) + { + } + + public ReportColumn( string width, string align, string name ) + { + m_Width = width; + m_Align = align; + m_Name = name; + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetString( "w", m_Width ); + op.SetString( "a", m_Align ); + op.SetString( "n", m_Name ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_Width = Utility.Intern( ip.GetString( "w" ) ); + m_Align = Utility.Intern( ip.GetString( "a" ) ); + m_Name = Utility.Intern( ip.GetString( "n" ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Reports/ReportColumnCollection.cs b/Scripts/Engines/Reports/Objects/Reports/ReportColumnCollection.cs new file mode 100644 index 0000000..7a01fc1 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Reports/ReportColumnCollection.cs @@ -0,0 +1,210 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.ReportColumn. + /// + public class ReportColumnCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public ReportColumnCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.ReportColumn at a specific position in the ReportColumnCollection. + /// + public Server.Engines.Reports.ReportColumn this[int index] + { + get + { + return ((Server.Engines.Reports.ReportColumn)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + public int Add( string width, string align ) + { + return Add( new ReportColumn( width, align ) ); + } + + public int Add( string width, string align, string name ) + { + return Add( new ReportColumn( width, align, name ) ); + } + + /// + /// Append a Server.Engines.Reports.ReportColumn entry to this collection. + /// + /// Server.Engines.Reports.ReportColumn instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.ReportColumn value) + { + return this.List.Add(value); + } + + /// + /// Determines whether a specified Server.Engines.Reports.ReportColumn instance is in this collection. + /// + /// Server.Engines.Reports.ReportColumn instance to search for. + /// True if the Server.Engines.Reports.ReportColumn instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.ReportColumn value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.ReportColumn instance is in this collection. + /// + /// Server.Engines.Reports.ReportColumn instance to find. + /// The zero-based index of the specified Server.Engines.Reports.ReportColumn instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.ReportColumn value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.ReportColumn instance from this collection. + /// + /// The Server.Engines.Reports.ReportColumn instance to remove. + public void Remove(Server.Engines.Reports.ReportColumn value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.ReportColumn instance. + /// + /// An Server.Engines.Reports.ReportColumn's enumerator. + public new ReportColumnCollectionEnumerator GetEnumerator() + { + return new ReportColumnCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.ReportColumn instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.ReportColumn instance to insert. + public void Insert(int index, Server.Engines.Reports.ReportColumn value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.ReportColumn. + /// + public class ReportColumnCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.ReportColumn _currentElement; + + /// + /// Collection to enumerate. + /// + private ReportColumnCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal ReportColumnCollectionEnumerator(ReportColumnCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.ReportColumn object in the enumerated ReportColumnCollection currently indexed by this instance. + /// + public Server.Engines.Reports.ReportColumn Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Reports/ReportItem.cs b/Scripts/Engines/Reports/Objects/Reports/ReportItem.cs new file mode 100644 index 0000000..09eabe5 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Reports/ReportItem.cs @@ -0,0 +1,39 @@ +using System; + +namespace Server.Engines.Reports +{ + public class ReportItem : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "ri", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new ReportItem(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private ItemValueCollection m_Values; + + public ItemValueCollection Values{ get{ return m_Values; } } + + public ReportItem() + { + m_Values = new ItemValueCollection(); + } + + public override void SerializeChildren( PersistanceWriter op ) + { + for ( int i = 0; i < m_Values.Count; ++i ) + m_Values[i].Serialize( op ); + } + + public override void DeserializeChildren( PersistanceReader ip ) + { + while ( ip.HasChild ) + m_Values.Add( ip.GetChild() as ItemValue ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Reports/ReportItemCollection.cs b/Scripts/Engines/Reports/Objects/Reports/ReportItemCollection.cs new file mode 100644 index 0000000..283c448 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Reports/ReportItemCollection.cs @@ -0,0 +1,215 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.ReportItem. + /// + public class ReportItemCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public ReportItemCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.ReportItem at a specific position in the ReportItemCollection. + /// + public Server.Engines.Reports.ReportItem this[int index] + { + get + { + return ((Server.Engines.Reports.ReportItem)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + public int Add( string name, object value ) + { + return Add( name, value, null ); + } + + public int Add( string name, object value, string format ) + { + ReportItem item = new ReportItem(); + + item.Values.Add( name ); + item.Values.Add( value == null ? "" : value.ToString(), format ); + + return Add( item ); + } + + /// + /// Append a Server.Engines.Reports.ReportItem entry to this collection. + /// + /// Server.Engines.Reports.ReportItem instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.ReportItem value) + { + return this.List.Add(value); + } + + /// + /// Determines whether a specified Server.Engines.Reports.ReportItem instance is in this collection. + /// + /// Server.Engines.Reports.ReportItem instance to search for. + /// True if the Server.Engines.Reports.ReportItem instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.ReportItem value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.ReportItem instance is in this collection. + /// + /// Server.Engines.Reports.ReportItem instance to find. + /// The zero-based index of the specified Server.Engines.Reports.ReportItem instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.ReportItem value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.ReportItem instance from this collection. + /// + /// The Server.Engines.Reports.ReportItem instance to remove. + public void Remove(Server.Engines.Reports.ReportItem value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.ReportItem instance. + /// + /// An Server.Engines.Reports.ReportItem's enumerator. + public new ReportItemCollectionEnumerator GetEnumerator() + { + return new ReportItemCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.ReportItem instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.ReportItem instance to insert. + public void Insert(int index, Server.Engines.Reports.ReportItem value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.ReportItem. + /// + public class ReportItemCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.ReportItem _currentElement; + + /// + /// Collection to enumerate. + /// + private ReportItemCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal ReportItemCollectionEnumerator(ReportItemCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.ReportItem object in the enumerated ReportItemCollection currently indexed by this instance. + /// + public Server.Engines.Reports.ReportItem Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Snapshots/Snapshot.cs b/Scripts/Engines/Reports/Objects/Snapshots/Snapshot.cs new file mode 100644 index 0000000..10944f7 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Snapshots/Snapshot.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; + +namespace Server.Engines.Reports +{ + public class Snapshot : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "ss", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new Snapshot(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private DateTime m_TimeStamp; + private ObjectCollection m_Children; + + public DateTime TimeStamp{ get{ return m_TimeStamp; } set{ m_TimeStamp = value; } } + public ObjectCollection Children{ get{ return m_Children; } set{ m_Children = value; } } + + public Snapshot() + { + m_Children = new ObjectCollection(); + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetDateTime( "t", m_TimeStamp ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_TimeStamp = ip.GetDateTime( "t" ); + } + + public override void SerializeChildren( PersistanceWriter op ) + { + for ( int i = 0; i < m_Children.Count; ++i ) + m_Children[i].Serialize( op ); + } + + public override void DeserializeChildren( PersistanceReader ip ) + { + while ( ip.HasChild ) + m_Children.Add( ip.GetChild() ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Snapshots/SnapshotCollection.cs b/Scripts/Engines/Reports/Objects/Snapshots/SnapshotCollection.cs new file mode 100644 index 0000000..7ff7bc5 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Snapshots/SnapshotCollection.cs @@ -0,0 +1,200 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.Snapshot. + /// + public class SnapshotCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public SnapshotCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.Snapshot at a specific position in the SnapshotCollection. + /// + public Server.Engines.Reports.Snapshot this[int index] + { + get + { + return ((Server.Engines.Reports.Snapshot)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + /// + /// Append a Server.Engines.Reports.Snapshot entry to this collection. + /// + /// Server.Engines.Reports.Snapshot instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.Snapshot value) + { + return this.List.Add(value); + } + + /// + /// Determines whether a specified Server.Engines.Reports.Snapshot instance is in this collection. + /// + /// Server.Engines.Reports.Snapshot instance to search for. + /// True if the Server.Engines.Reports.Snapshot instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.Snapshot value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.Snapshot instance is in this collection. + /// + /// Server.Engines.Reports.Snapshot instance to find. + /// The zero-based index of the specified Server.Engines.Reports.Snapshot instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.Snapshot value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.Snapshot instance from this collection. + /// + /// The Server.Engines.Reports.Snapshot instance to remove. + public void Remove(Server.Engines.Reports.Snapshot value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.Snapshot instance. + /// + /// An Server.Engines.Reports.Snapshot's enumerator. + public new SnapshotCollectionEnumerator GetEnumerator() + { + return new SnapshotCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.Snapshot instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.Snapshot instance to insert. + public void Insert(int index, Server.Engines.Reports.Snapshot value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.Snapshot. + /// + public class SnapshotCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.Snapshot _currentElement; + + /// + /// Collection to enumerate. + /// + private SnapshotCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal SnapshotCollectionEnumerator(SnapshotCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.Snapshot object in the enumerated SnapshotCollection currently indexed by this instance. + /// + public Server.Engines.Reports.Snapshot Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Snapshots/SnapshotHistory.cs b/Scripts/Engines/Reports/Objects/Snapshots/SnapshotHistory.cs new file mode 100644 index 0000000..b1144d1 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Snapshots/SnapshotHistory.cs @@ -0,0 +1,65 @@ +using System; +using System.IO; +using System.Xml; + +namespace Server.Engines.Reports +{ + public class SnapshotHistory : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "sh", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new SnapshotHistory(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private SnapshotCollection m_Snapshots; + + public SnapshotCollection Snapshots{ get{ return m_Snapshots; } set{ m_Snapshots = value; } } + + public SnapshotHistory() + { + m_Snapshots = new SnapshotCollection(); + } + + public void Save() + { + string path = Path.Combine( Core.BaseDirectory, "reportHistory.xml" ); + PersistanceWriter pw = new XmlPersistanceWriter( path, "Stats" ); + + pw.WriteDocument( this ); + + pw.Close(); + } + + public void Load() + { + string path = Path.Combine( Core.BaseDirectory, "reportHistory.xml" ); + + if ( !File.Exists( path ) ) + return; + + PersistanceReader pr = new XmlPersistanceReader( path, "Stats" ); + + pr.ReadDocument( this ); + + pr.Close(); + } + + public override void SerializeChildren( PersistanceWriter op ) + { + for ( int i = 0; i < m_Snapshots.Count; ++i ) + m_Snapshots[i].Serialize( op ); + } + + public override void DeserializeChildren( PersistanceReader ip ) + { + while ( ip.HasChild ) + m_Snapshots.Add( ip.GetChild() as Snapshot ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Staffing/Info.cs b/Scripts/Engines/Reports/Objects/Staffing/Info.cs new file mode 100644 index 0000000..a56cfa1 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Staffing/Info.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections; +using Server; +using Server.Accounting; +using Server.Engines; +using Server.Engines.Help; + +namespace Server.Engines.Reports +{ + public abstract class BaseInfo : IComparable + { + private static TimeSpan m_SortRange; + + public static TimeSpan SortRange{ get{ return m_SortRange; } set{ m_SortRange = value; } } + + private string m_Account; + private string m_Display; + private PageInfoCollection m_Pages; + + public string Account{ get{ return m_Account; } set{ m_Account = value; } } + public PageInfoCollection Pages{ get{ return m_Pages; } set{ m_Pages = value; } } + + public string Display + { + get + { + if ( m_Display != null ) + return m_Display; + + if ( m_Account != null ) + { + IAccount acct = Accounts.GetAccount( m_Account ); + + if ( acct != null ) + { + Mobile mob = null; + + for ( int i = 0; i < acct.Length; ++i ) + { + Mobile check = acct[i]; + + if ( check != null && (mob == null || check.AccessLevel > mob.AccessLevel) ) + mob = check; + } + + if ( mob != null && mob.Name != null && mob.Name.Length > 0 ) + return ( m_Display = mob.Name ); + } + } + + return ( m_Display = m_Account ); + } + } + + public int GetPageCount( PageResolution res, DateTime min, DateTime max ) + { + return StaffHistory.GetPageCount( m_Pages, res, min, max ); + } + + public BaseInfo( string account ) + { + m_Account = account; + m_Pages = new PageInfoCollection(); + } + + public void Register( PageInfo page ) + { + m_Pages.Add( page ); + } + + public void Unregister( PageInfo page ) + { + m_Pages.Remove( page ); + } + + public int CompareTo( object obj ) + { + BaseInfo cmp = obj as BaseInfo; + + int v = cmp.GetPageCount( cmp is StaffInfo ? PageResolution.Handled : PageResolution.None, DateTime.Now - m_SortRange, DateTime.Now ) + - this.GetPageCount( this is StaffInfo ? PageResolution.Handled : PageResolution.None, DateTime.Now - m_SortRange, DateTime.Now ); + + if ( v == 0 ) + v = String.Compare( this.Display, cmp.Display ); + + return v; + } + } + + public class StaffInfo : BaseInfo + { + public StaffInfo( string account ) : base( account ) + { + } + } + + public class UserInfo : BaseInfo + { + public UserInfo( string account ) : base( account ) + { + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Staffing/PageInfo.cs b/Scripts/Engines/Reports/Objects/Staffing/PageInfo.cs new file mode 100644 index 0000000..734f43c --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Staffing/PageInfo.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections; +using Server; +using Server.Engines; +using Server.Engines.Help; + +namespace Server.Engines.Reports +{ + public enum PageResolution + { + None, + Handled, + Deleted, + Logged, + Canceled + } + + public class PageInfo : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "pi", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new PageInfo(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private StaffHistory m_History; + private StaffInfo m_Resolver; + private UserInfo m_Sender; + + public StaffInfo Resolver + { + get{ return m_Resolver; } + set + { + if ( m_Resolver == value ) + return; + + lock ( StaffHistory.RenderLock ) + { + if ( m_Resolver != null ) + m_Resolver.Unregister( this ); + + m_Resolver = value; + + if ( m_Resolver != null ) + m_Resolver.Register( this ); + } + } + } + + public UserInfo Sender + { + get{ return m_Sender; } + set + { + if ( m_Sender == value ) + return; + + lock ( StaffHistory.RenderLock ) + { + if ( m_Sender != null ) + m_Sender.Unregister( this ); + + m_Sender = value; + + if ( m_Sender != null ) + m_Sender.Register( this ); + } + } + } + + private PageType m_PageType; + private PageResolution m_Resolution; + + private DateTime m_TimeSent; + private DateTime m_TimeResolved; + + private string m_SentBy; + private string m_ResolvedBy; + + private string m_Message; + private ResponseInfoCollection m_Responses; + + public StaffHistory History + { + get{ return m_History; } + set + { + if ( m_History == value ) + return; + + if ( m_History != null ) + { + Sender = null; + Resolver = null; + } + + m_History = value; + + if ( m_History != null ) + { + Sender = m_History.GetUserInfo( m_SentBy ); + UpdateResolver(); + } + } + } + + public PageType PageType{ get{ return m_PageType; } set{ m_PageType = value; } } + public PageResolution Resolution{ get{ return m_Resolution; } } + + public DateTime TimeSent{ get{ return m_TimeSent; } set{ m_TimeSent = value; } } + public DateTime TimeResolved{ get{ return m_TimeResolved; } } + + public string SentBy + { + get{ return m_SentBy; } + set + { + m_SentBy = value; + + if ( m_History != null ) + Sender = m_History.GetUserInfo( m_SentBy ); + } + } + + public string ResolvedBy + { + get{ return m_ResolvedBy; } + } + + public string Message{ get{ return m_Message; } set{ m_Message = value; } } + public ResponseInfoCollection Responses{ get{ return m_Responses; } set{ m_Responses = value; } } + + public void UpdateResolver() + { + string resolvedBy; + DateTime timeResolved; + PageResolution res = GetResolution( out resolvedBy, out timeResolved ); + + if ( m_History != null && IsStaffResolution( res ) ) + Resolver = m_History.GetStaffInfo( resolvedBy ); + else + Resolver = null; + + m_ResolvedBy = resolvedBy; + m_TimeResolved = timeResolved; + m_Resolution = res; + } + + public bool IsStaffResolution( PageResolution res ) + { + return ( res == PageResolution.Handled ); + } + + public static PageResolution ResFromResp( string resp ) + { + switch ( resp ) + { + case "[Handled]": return PageResolution.Handled; + case "[Deleting]": return PageResolution.Deleted; + case "[Logout]": return PageResolution.Logged; + case "[Canceled]": return PageResolution.Canceled; + } + + return PageResolution.None; + } + + public PageResolution GetResolution( out string resolvedBy, out DateTime timeResolved ) + { + for ( int i = m_Responses.Count - 1; i >= 0; --i ) + { + ResponseInfo resp = m_Responses[i]; + PageResolution res = ResFromResp( resp.Message ); + + if ( res != PageResolution.None ) + { + resolvedBy = resp.SentBy; + timeResolved = resp.TimeStamp; + return res; + } + } + + resolvedBy = m_SentBy; + timeResolved = m_TimeSent; + return PageResolution.None; + } + + public static string GetAccount( Mobile mob ) + { + if ( mob == null ) + return null; + + Accounting.Account acct = mob.Account as Accounting.Account; + + if ( acct == null ) + return null; + + return acct.Username; + } + + public PageInfo() + { + m_Responses = new ResponseInfoCollection(); + } + + public PageInfo( PageEntry entry ) + { + m_PageType = entry.Type; + + m_TimeSent = entry.Sent; + m_SentBy = GetAccount( entry.Sender ); + + m_Message = entry.Message; + m_Responses = new ResponseInfoCollection(); + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetInt32( "p", (int)m_PageType ); + + op.SetDateTime( "ts", m_TimeSent ); + op.SetString( "s", m_SentBy ); + + op.SetString( "m", m_Message ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_PageType = (PageType) ip.GetInt32( "p" ); + + m_TimeSent = ip.GetDateTime( "ts" ); + m_SentBy = ip.GetString( "s" ); + + m_Message = ip.GetString( "m" ); + } + + public override void SerializeChildren( PersistanceWriter op ) + { + lock ( this ) + { + for ( int i = 0; i < m_Responses.Count; ++i ) + m_Responses[i].Serialize( op ); + } + } + + public override void DeserializeChildren( PersistanceReader ip ) + { + while ( ip.HasChild ) + m_Responses.Add( ip.GetChild() as ResponseInfo ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Staffing/PageInfoCollection.cs b/Scripts/Engines/Reports/Objects/Staffing/PageInfoCollection.cs new file mode 100644 index 0000000..5bf6b23 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Staffing/PageInfoCollection.cs @@ -0,0 +1,200 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.PageInfo. + /// + public class PageInfoCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public PageInfoCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.PageInfo at a specific position in the PageInfoCollection. + /// + public Server.Engines.Reports.PageInfo this[int index] + { + get + { + return ((Server.Engines.Reports.PageInfo)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + /// + /// Append a Server.Engines.Reports.PageInfo entry to this collection. + /// + /// Server.Engines.Reports.PageInfo instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.PageInfo value) + { + return this.List.Add(value); + } + + /// + /// Determines whether a specified Server.Engines.Reports.PageInfo instance is in this collection. + /// + /// Server.Engines.Reports.PageInfo instance to search for. + /// True if the Server.Engines.Reports.PageInfo instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.PageInfo value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.PageInfo instance is in this collection. + /// + /// Server.Engines.Reports.PageInfo instance to find. + /// The zero-based index of the specified Server.Engines.Reports.PageInfo instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.PageInfo value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.PageInfo instance from this collection. + /// + /// The Server.Engines.Reports.PageInfo instance to remove. + public void Remove(Server.Engines.Reports.PageInfo value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.PageInfo instance. + /// + /// An Server.Engines.Reports.PageInfo's enumerator. + public new PageInfoCollectionEnumerator GetEnumerator() + { + return new PageInfoCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.PageInfo instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.PageInfo instance to insert. + public void Insert(int index, Server.Engines.Reports.PageInfo value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.PageInfo. + /// + public class PageInfoCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.PageInfo _currentElement; + + /// + /// Collection to enumerate. + /// + private PageInfoCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal PageInfoCollectionEnumerator(PageInfoCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.PageInfo object in the enumerated PageInfoCollection currently indexed by this instance. + /// + public Server.Engines.Reports.PageInfo Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Staffing/QueueStatus.cs b/Scripts/Engines/Reports/Objects/Staffing/QueueStatus.cs new file mode 100644 index 0000000..4c46ea7 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Staffing/QueueStatus.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections; +using Server; +using Server.Engines; +using Server.Engines.Help; + +namespace Server.Engines.Reports +{ + public class QueueStatus : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "qs", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new QueueStatus(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private DateTime m_TimeStamp; + private int m_Count; + + public DateTime TimeStamp{ get{ return m_TimeStamp; } set{ m_TimeStamp = value; } } + public int Count{ get{ return m_Count; } set{ m_Count = value; } } + + public QueueStatus() + { + } + + public QueueStatus( int count ) + { + m_TimeStamp = DateTime.Now; + m_Count = count; + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetDateTime( "t", m_TimeStamp ); + op.SetInt32( "c", m_Count ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_TimeStamp = ip.GetDateTime( "t" ); + m_Count = ip.GetInt32( "c" ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Staffing/QueueStatusCollection.cs b/Scripts/Engines/Reports/Objects/Staffing/QueueStatusCollection.cs new file mode 100644 index 0000000..c960ffb --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Staffing/QueueStatusCollection.cs @@ -0,0 +1,200 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.QueueStatus. + /// + public class QueueStatusCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public QueueStatusCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.QueueStatus at a specific position in the QueueStatusCollection. + /// + public Server.Engines.Reports.QueueStatus this[int index] + { + get + { + return ((Server.Engines.Reports.QueueStatus)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + /// + /// Append a Server.Engines.Reports.QueueStatus entry to this collection. + /// + /// Server.Engines.Reports.QueueStatus instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.QueueStatus value) + { + return this.List.Add(value); + } + + /// + /// Determines whether a specified Server.Engines.Reports.QueueStatus instance is in this collection. + /// + /// Server.Engines.Reports.QueueStatus instance to search for. + /// True if the Server.Engines.Reports.QueueStatus instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.QueueStatus value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.QueueStatus instance is in this collection. + /// + /// Server.Engines.Reports.QueueStatus instance to find. + /// The zero-based index of the specified Server.Engines.Reports.QueueStatus instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.QueueStatus value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.QueueStatus instance from this collection. + /// + /// The Server.Engines.Reports.QueueStatus instance to remove. + public void Remove(Server.Engines.Reports.QueueStatus value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.QueueStatus instance. + /// + /// An Server.Engines.Reports.QueueStatus's enumerator. + public new QueueStatusCollectionEnumerator GetEnumerator() + { + return new QueueStatusCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.QueueStatus instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.QueueStatus instance to insert. + public void Insert(int index, Server.Engines.Reports.QueueStatus value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.QueueStatus. + /// + public class QueueStatusCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.QueueStatus _currentElement; + + /// + /// Collection to enumerate. + /// + private QueueStatusCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal QueueStatusCollectionEnumerator(QueueStatusCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.QueueStatus object in the enumerated QueueStatusCollection currently indexed by this instance. + /// + public Server.Engines.Reports.QueueStatus Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Staffing/ResponseInfo.cs b/Scripts/Engines/Reports/Objects/Staffing/ResponseInfo.cs new file mode 100644 index 0000000..d56d504 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Staffing/ResponseInfo.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using Server; +using Server.Engines; +using Server.Engines.Help; + +namespace Server.Engines.Reports +{ + public class ResponseInfo : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "rs", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new ResponseInfo(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private DateTime m_TimeStamp; + + private string m_SentBy; + private string m_Message; + + public DateTime TimeStamp{ get{ return m_TimeStamp; } set{ m_TimeStamp = value; } } + + public string SentBy{ get{ return m_SentBy; } set{ m_SentBy = value; } } + public string Message{ get{ return m_Message; } set{ m_Message = value; } } + + public ResponseInfo() + { + } + + public ResponseInfo( string sentBy, string message ) + { + m_TimeStamp = DateTime.Now; + m_SentBy = sentBy; + m_Message = message; + } + + public override void SerializeAttributes( PersistanceWriter op ) + { + op.SetDateTime( "t", m_TimeStamp ); + + op.SetString( "s", m_SentBy ); + op.SetString( "m", m_Message ); + } + + public override void DeserializeAttributes( PersistanceReader ip ) + { + m_TimeStamp = ip.GetDateTime( "t" ); + + m_SentBy = ip.GetString( "s" ); + m_Message = ip.GetString( "m" ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Objects/Staffing/ResponseInfoCollection.cs b/Scripts/Engines/Reports/Objects/Staffing/ResponseInfoCollection.cs new file mode 100644 index 0000000..d5227ca --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Staffing/ResponseInfoCollection.cs @@ -0,0 +1,205 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.ResponseInfo. + /// + public class ResponseInfoCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public ResponseInfoCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.ResponseInfo at a specific position in the ResponseInfoCollection. + /// + public Server.Engines.Reports.ResponseInfo this[int index] + { + get + { + return ((Server.Engines.Reports.ResponseInfo)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + public int Add( string sentBy, string message ) + { + return Add( new ResponseInfo( sentBy, message ) ); + } + + /// + /// Append a Server.Engines.Reports.ResponseInfo entry to this collection. + /// + /// Server.Engines.Reports.ResponseInfo instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.ResponseInfo value) + { + return this.List.Add(value); + } + + /// + /// Determines whether a specified Server.Engines.Reports.ResponseInfo instance is in this collection. + /// + /// Server.Engines.Reports.ResponseInfo instance to search for. + /// True if the Server.Engines.Reports.ResponseInfo instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.ResponseInfo value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.ResponseInfo instance is in this collection. + /// + /// Server.Engines.Reports.ResponseInfo instance to find. + /// The zero-based index of the specified Server.Engines.Reports.ResponseInfo instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.ResponseInfo value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.ResponseInfo instance from this collection. + /// + /// The Server.Engines.Reports.ResponseInfo instance to remove. + public void Remove(Server.Engines.Reports.ResponseInfo value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.ResponseInfo instance. + /// + /// An Server.Engines.Reports.ResponseInfo's enumerator. + public new ResponseInfoCollectionEnumerator GetEnumerator() + { + return new ResponseInfoCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.ResponseInfo instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.ResponseInfo instance to insert. + public void Insert(int index, Server.Engines.Reports.ResponseInfo value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.ResponseInfo. + /// + public class ResponseInfoCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.ResponseInfo _currentElement; + + /// + /// Collection to enumerate. + /// + private ResponseInfoCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal ResponseInfoCollectionEnumerator(ResponseInfoCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.ResponseInfo object in the enumerated ResponseInfoCollection currently indexed by this instance. + /// + public Server.Engines.Reports.ResponseInfo Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Objects/Staffing/StaffHistory.cs b/Scripts/Engines/Reports/Objects/Staffing/StaffHistory.cs new file mode 100644 index 0000000..c9e48d5 --- /dev/null +++ b/Scripts/Engines/Reports/Objects/Staffing/StaffHistory.cs @@ -0,0 +1,406 @@ +using System; +using System.IO; +using System.Xml; +using System.Collections; + +namespace Server.Engines.Reports +{ + public class StaffHistory : PersistableObject + { + #region Type Identification + public static readonly PersistableType ThisTypeID = new PersistableType( "stfhst", new ConstructCallback( Construct ) ); + + private static PersistableObject Construct() + { + return new StaffHistory(); + } + + public override PersistableType TypeID{ get{ return ThisTypeID; } } + #endregion + + private PageInfoCollection m_Pages; + private QueueStatusCollection m_QueueStats; + + private Hashtable m_UserInfo; + private Hashtable m_StaffInfo; + + public PageInfoCollection Pages{ get{ return m_Pages; } set{ m_Pages = value; } } + public QueueStatusCollection QueueStats{ get{ return m_QueueStats; } set{ m_QueueStats = value; } } + + public Hashtable UserInfo{ get{ return m_UserInfo; } set{ m_UserInfo = value; } } + public Hashtable StaffInfo{ get{ return m_StaffInfo; } set{ m_StaffInfo = value; } } + + public void AddPage( PageInfo info ) + { + lock ( SaveLock ) + m_Pages.Add( info ); + + info.History = this; + } + + public StaffHistory() + { + m_Pages = new PageInfoCollection(); + m_QueueStats = new QueueStatusCollection(); + + m_UserInfo = new Hashtable( StringComparer.OrdinalIgnoreCase ); + m_StaffInfo = new Hashtable( StringComparer.OrdinalIgnoreCase ); + } + + public StaffInfo GetStaffInfo( string account ) + { + lock ( RenderLock ) + { + if ( account == null || account.Length == 0 ) + return null; + + StaffInfo info = m_StaffInfo[account] as StaffInfo; + + if ( info == null ) + m_StaffInfo[account] = info = new StaffInfo( account ); + + return info; + } + } + + public UserInfo GetUserInfo( string account ) + { + if ( account == null || account.Length == 0 ) + return null; + + UserInfo info = m_UserInfo[account] as UserInfo; + + if ( info == null ) + m_UserInfo[account] = info = new UserInfo( account ); + + return info; + } + + public static readonly object RenderLock = new object(); + public static readonly object SaveLock = new object(); + + public void Save() + { + lock ( SaveLock ) + { + string path = Path.Combine( Core.BaseDirectory, "staffHistory.xml" ); + PersistanceWriter pw = new XmlPersistanceWriter( path, "Staff" ); + + pw.WriteDocument( this ); + + pw.Close(); + } + } + + public void Load() + { + string path = Path.Combine( Core.BaseDirectory, "staffHistory.xml" ); + + if ( !File.Exists( path ) ) + return; + + PersistanceReader pr = new XmlPersistanceReader( path, "Staff" ); + + pr.ReadDocument( this ); + + pr.Close(); + } + + public override void SerializeChildren( PersistanceWriter op ) + { + for ( int i = 0; i < m_Pages.Count; ++i ) + m_Pages[i].Serialize( op ); + + for ( int i = 0; i < m_QueueStats.Count; ++i ) + m_QueueStats[i].Serialize( op ); + } + + public override void DeserializeChildren( PersistanceReader ip ) + { + DateTime min = DateTime.Now - TimeSpan.FromDays( 8.0 ); + + while ( ip.HasChild ) + { + PersistableObject obj = ip.GetChild(); + + if ( obj is PageInfo ) + { + PageInfo pageInfo = obj as PageInfo; + + pageInfo.UpdateResolver(); + + if ( pageInfo.TimeSent >= min || pageInfo.TimeResolved >= min ) + { + m_Pages.Add( pageInfo ); + pageInfo.History = this; + } + else + { + pageInfo.Sender = null; + pageInfo.Resolver = null; + } + } + else if ( obj is QueueStatus ) + { + QueueStatus queueStatus = obj as QueueStatus; + + if ( queueStatus.TimeStamp >= min ) + m_QueueStats.Add( queueStatus ); + } + } + } + + public StaffInfo[] GetStaff() + { + StaffInfo[] staff = new StaffInfo[m_StaffInfo.Count]; + int index = 0; + + foreach ( StaffInfo staffInfo in m_StaffInfo.Values ) + staff[index++] = staffInfo; + + return staff; + } + + public void Render( ObjectCollection objects ) + { + lock ( RenderLock ) + { + objects.Add( GraphQueueStatus() ); + + StaffInfo[] staff = GetStaff(); + + BaseInfo.SortRange = TimeSpan.FromDays( 7.0 ); + Array.Sort( staff ); + + objects.Add( GraphHourlyPages( m_Pages, PageResolution.None, "New pages by hour", "graph_new_pages_hr" ) ); + objects.Add( GraphHourlyPages( m_Pages, PageResolution.Handled, "Handled pages by hour", "graph_handled_pages_hr" ) ); + objects.Add( GraphHourlyPages( m_Pages, PageResolution.Deleted, "Deleted pages by hour", "graph_deleted_pages_hr" ) ); + objects.Add( GraphHourlyPages( m_Pages, PageResolution.Canceled, "Canceled pages by hour", "graph_canceled_pages_hr" ) ); + objects.Add( GraphHourlyPages( m_Pages, PageResolution.Logged, "Logged-out pages by hour", "graph_logged_pages_hr" ) ); + + BaseInfo.SortRange = TimeSpan.FromDays( 1.0 ); + Array.Sort( staff ); + + objects.Add( ReportTotalPages( staff, TimeSpan.FromDays( 1.0 ), "1 Day" ) ); + objects.AddRange( (PersistableObject[])ChartTotalPages( staff, TimeSpan.FromDays( 1.0 ), "1 Day", "graph_daily_pages" ) ); + + BaseInfo.SortRange = TimeSpan.FromDays( 7.0 ); + Array.Sort( staff ); + + objects.Add( ReportTotalPages( staff, TimeSpan.FromDays( 7.0 ), "1 Week" ) ); + objects.AddRange( (PersistableObject[])ChartTotalPages( staff, TimeSpan.FromDays( 7.0 ), "1 Week", "graph_weekly_pages" ) ); + + BaseInfo.SortRange = TimeSpan.FromDays( 30.0 ); + Array.Sort( staff ); + + objects.Add( ReportTotalPages( staff, TimeSpan.FromDays( 30.0 ), "1 Month" ) ); + objects.AddRange( (PersistableObject[])ChartTotalPages( staff, TimeSpan.FromDays( 30.0 ), "1 Month", "graph_monthly_pages" ) ); + + for ( int i = 0; i < staff.Length; ++i ) + objects.Add( GraphHourlyPages( staff[i] ) ); + } + } + + public static int GetPageCount( StaffInfo staff, DateTime min, DateTime max ) + { + return GetPageCount( staff.Pages, PageResolution.Handled, min, max ); + } + + public static int GetPageCount( PageInfoCollection pages, PageResolution res, DateTime min, DateTime max ) + { + int count = 0; + + for ( int i = 0; i < pages.Count; ++i ) + { + if ( res != PageResolution.None && pages[i].Resolution != res ) + continue; + + DateTime ts = pages[i].TimeResolved; + + if ( ts >= min && ts < max ) + ++count; + } + + return count; + } + + private BarGraph GraphQueueStatus() + { + int[] totals = new int[24]; + int[] counts = new int[24]; + + DateTime max = DateTime.Now; + DateTime min = max - TimeSpan.FromDays( 7.0 ); + + for ( int i = 0; i < m_QueueStats.Count; ++i ) + { + DateTime ts = m_QueueStats[i].TimeStamp; + + if ( ts >= min && ts < max ) + { + DateTime date = ts.Date; + TimeSpan time = ts.TimeOfDay; + + int hour = time.Hours; + + totals[hour] += m_QueueStats[i].Count; + counts[hour]++; + } + } + + BarGraph barGraph = new BarGraph( "Average pages in queue", "graph_pagequeue_avg", 10, "Time", "Pages", BarGraphRenderMode.Lines ); + + barGraph.FontSize = 6; + + for ( int i = 7; i <= totals.Length+7; ++i ) + { + int val; + + if ( counts[i%totals.Length] == 0 ) + val = 0; + else + val = (totals[i%totals.Length] + (counts[i%totals.Length] / 2)) / counts[i%totals.Length]; + + int realHours = i%totals.Length; + int hours; + + if ( realHours == 0 ) + hours = 12; + else if ( realHours > 12 ) + hours = realHours - 12; + else + hours = realHours; + + barGraph.Items.Add( hours + (realHours >= 12 ? " PM" : " AM"), val ); + } + + return barGraph; + } + + private BarGraph GraphHourlyPages( StaffInfo staff ) + { + return GraphHourlyPages( staff.Pages, PageResolution.Handled, "Average pages handled by " + staff.Display, "graphs_" + staff.Account.ToLower() + "_avg" ); + } + + private BarGraph GraphHourlyPages( PageInfoCollection pages, PageResolution res, string title, string fname ) + { + int[] totals = new int[24]; + int[] counts = new int[24]; + + DateTime[] dates = new DateTime[24]; + + DateTime max = DateTime.Now; + DateTime min = max - TimeSpan.FromDays( 7.0 ); + + bool sentStamp = ( res == PageResolution.None ); + + for ( int i = 0; i < pages.Count; ++i ) + { + if ( res != PageResolution.None && pages[i].Resolution != res ) + continue; + + DateTime ts = ( sentStamp ? pages[i].TimeSent : pages[i].TimeResolved ); + + if ( ts >= min && ts < max ) + { + DateTime date = ts.Date; + TimeSpan time = ts.TimeOfDay; + + int hour = time.Hours; + + totals[hour]++; + + if ( dates[hour] != date ) + { + counts[hour]++; + dates[hour] = date; + } + } + } + + BarGraph barGraph = new BarGraph( title, fname, 10, "Time", "Pages", BarGraphRenderMode.Lines ); + + barGraph.FontSize = 6; + + for ( int i = 7; i <= totals.Length+7; ++i ) + { + int val; + + if ( counts[i%totals.Length] == 0 ) + val = 0; + else + val = (totals[i%totals.Length] + (counts[i%totals.Length] / 2)) / counts[i%totals.Length]; + + int realHours = i%totals.Length; + int hours; + + if ( realHours == 0 ) + hours = 12; + else if ( realHours > 12 ) + hours = realHours - 12; + else + hours = realHours; + + barGraph.Items.Add( hours + (realHours >= 12 ? " PM" : " AM"), val ); + } + + return barGraph; + } + + private Report ReportTotalPages( StaffInfo[] staff, TimeSpan ts, string title ) + { + DateTime max = DateTime.Now; + DateTime min = max - ts; + + Report report = new Report( title + " Staff Report", "400" ); + + report.Columns.Add( "65%", "left", "Staff Name" ); + report.Columns.Add( "35%", "center", "Page Count" ); + + for ( int i = 0; i < staff.Length; ++i ) + report.Items.Add( staff[i].Display, GetPageCount( staff[i], min, max ) ); + + return report; + } + + private PieChart[] ChartTotalPages( StaffInfo[] staff, TimeSpan ts, string title, string fname ) + { + DateTime max = DateTime.Now; + DateTime min = max - ts; + + PieChart staffChart = new PieChart( title + " Staff Chart", fname + "_staff", true ); + + int other = 0; + + for ( int i = 0; i < staff.Length; ++i ) + { + int count = GetPageCount( staff[i], min, max ); + + if ( i < 12 && count > 0 ) + staffChart.Items.Add( staff[i].Display, count ); + else + other += count; + } + + if ( other > 0 ) + staffChart.Items.Add( "Other", other ); + + PieChart resChart = new PieChart( title + " Resolutions", fname + "_resol", true ); + + int countTotal = GetPageCount( m_Pages, PageResolution.None, min, max ); + int countHandled = GetPageCount( m_Pages, PageResolution.Handled, min, max ); + int countDeleted = GetPageCount( m_Pages, PageResolution.Deleted, min, max ); + int countCanceled = GetPageCount( m_Pages, PageResolution.Canceled, min, max ); + int countLogged = GetPageCount( m_Pages, PageResolution.Logged, min, max ); + int countUnres = countTotal - ( countHandled + countDeleted + countCanceled + countLogged ); + + resChart.Items.Add( "Handled", countHandled ); + resChart.Items.Add( "Deleted", countDeleted ); + resChart.Items.Add( "Canceled", countCanceled ); + resChart.Items.Add( "Logged Out", countLogged ); + resChart.Items.Add( "Unresolved", countUnres ); + + return new PieChart[]{ staffChart, resChart }; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Persistance/PersistableObject.cs b/Scripts/Engines/Reports/Persistance/PersistableObject.cs new file mode 100644 index 0000000..b6c05ec --- /dev/null +++ b/Scripts/Engines/Reports/Persistance/PersistableObject.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections; + +namespace Server.Engines.Reports +{ + public abstract class PersistableObject + { + public abstract PersistableType TypeID{ get; } + + public virtual void SerializeAttributes( PersistanceWriter op ) + { + } + + public virtual void SerializeChildren( PersistanceWriter op ) + { + } + + public void Serialize( PersistanceWriter op ) + { + op.BeginObject( this.TypeID ); + SerializeAttributes( op ); + op.BeginChildren(); + SerializeChildren( op ); + op.FinishChildren(); + op.FinishObject(); + } + + public virtual void DeserializeAttributes( PersistanceReader ip ) + { + } + + public virtual void DeserializeChildren( PersistanceReader ip ) + { + } + + public void Deserialize( PersistanceReader ip ) + { + DeserializeAttributes( ip ); + + if ( ip.BeginChildren() ) + { + DeserializeChildren( ip ); + ip.FinishChildren(); + } + } + + public PersistableObject() + { + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Persistance/PersistableObjectCollection.cs b/Scripts/Engines/Reports/Persistance/PersistableObjectCollection.cs new file mode 100644 index 0000000..5f13695 --- /dev/null +++ b/Scripts/Engines/Reports/Persistance/PersistableObjectCollection.cs @@ -0,0 +1,205 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 1.1.4322.573 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Server.Engines.Reports +{ + using System; + using System.Collections; + + + /// + /// Strongly typed collection of Server.Engines.Reports.PersistableObject. + /// + public class ObjectCollection : System.Collections.CollectionBase + { + + /// + /// Default constructor. + /// + public ObjectCollection() : + base() + { + } + + /// + /// Gets or sets the value of the Server.Engines.Reports.PersistableObject at a specific position in the ObjectCollection. + /// + public Server.Engines.Reports.PersistableObject this[int index] + { + get + { + return ((Server.Engines.Reports.PersistableObject)(this.List[index])); + } + set + { + this.List[index] = value; + } + } + + /// + /// Append a Server.Engines.Reports.PersistableObject entry to this collection. + /// + /// Server.Engines.Reports.PersistableObject instance. + /// The position into which the new element was inserted. + public int Add(Server.Engines.Reports.PersistableObject value) + { + return this.List.Add(value); + } + + public void AddRange( PersistableObject[] col ) + { + this.InnerList.AddRange( col ); + } + + /// + /// Determines whether a specified Server.Engines.Reports.PersistableObject instance is in this collection. + /// + /// Server.Engines.Reports.PersistableObject instance to search for. + /// True if the Server.Engines.Reports.PersistableObject instance is in the collection; otherwise false. + public bool Contains(Server.Engines.Reports.PersistableObject value) + { + return this.List.Contains(value); + } + + /// + /// Retrieve the index a specified Server.Engines.Reports.PersistableObject instance is in this collection. + /// + /// Server.Engines.Reports.PersistableObject instance to find. + /// The zero-based index of the specified Server.Engines.Reports.PersistableObject instance. If the object is not found, the return value is -1. + public int IndexOf(Server.Engines.Reports.PersistableObject value) + { + return this.List.IndexOf(value); + } + + /// + /// Removes a specified Server.Engines.Reports.PersistableObject instance from this collection. + /// + /// The Server.Engines.Reports.PersistableObject instance to remove. + public void Remove(Server.Engines.Reports.PersistableObject value) + { + this.List.Remove(value); + } + + /// + /// Returns an enumerator that can iterate through the Server.Engines.Reports.PersistableObject instance. + /// + /// An Server.Engines.Reports.PersistableObject's enumerator. + public new ObjectCollectionEnumerator GetEnumerator() + { + return new ObjectCollectionEnumerator(this); + } + + /// + /// Insert a Server.Engines.Reports.PersistableObject instance into this collection at a specified index. + /// + /// Zero-based index. + /// The Server.Engines.Reports.PersistableObject instance to insert. + public void Insert(int index, Server.Engines.Reports.PersistableObject value) + { + this.List.Insert(index, value); + } + + /// + /// Strongly typed enumerator of Server.Engines.Reports.PersistableObject. + /// + public class ObjectCollectionEnumerator : System.Collections.IEnumerator + { + + /// + /// Current index + /// + private int _index; + + /// + /// Current element pointed to. + /// + private Server.Engines.Reports.PersistableObject _currentElement; + + /// + /// Collection to enumerate. + /// + private ObjectCollection _collection; + + /// + /// Default constructor for enumerator. + /// + /// Instance of the collection to enumerate. + internal ObjectCollectionEnumerator(ObjectCollection collection) + { + _index = -1; + _collection = collection; + } + + /// + /// Gets the Server.Engines.Reports.PersistableObject object in the enumerated ObjectCollection currently indexed by this instance. + /// + public Server.Engines.Reports.PersistableObject Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Gets the current element in the collection. + /// + object IEnumerator.Current + { + get + { + if (((_index == -1) + || (_index >= _collection.Count))) + { + throw new System.IndexOutOfRangeException("Enumerator not started."); + } + else + { + return _currentElement; + } + } + } + + /// + /// Reset the cursor, so it points to the beginning of the enumerator. + /// + public void Reset() + { + _index = -1; + _currentElement = null; + } + + /// + /// Advances the enumerator to the next queue of the enumeration, if one is currently available. + /// + /// true, if the enumerator was succesfully advanced to the next queue; false, if the enumerator has reached the end of the enumeration. + public bool MoveNext() + { + if ((_index + < (_collection.Count - 1))) + { + _index = (_index + 1); + _currentElement = this._collection[_index]; + return true; + } + _index = _collection.Count; + return false; + } + } + } +} diff --git a/Scripts/Engines/Reports/Persistance/PersistableType.cs b/Scripts/Engines/Reports/Persistance/PersistableType.cs new file mode 100644 index 0000000..8ef17fa --- /dev/null +++ b/Scripts/Engines/Reports/Persistance/PersistableType.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; + +namespace Server.Engines.Reports +{ + public delegate PersistableObject ConstructCallback(); + + public sealed class PersistableTypeRegistry + { + private static Hashtable m_Table; + + public static PersistableType Find( string name ) + { + return m_Table[name] as PersistableType; + } + + public static void Register( PersistableType type ) + { + if ( type != null ) + m_Table[type.Name] = type; + } + + static PersistableTypeRegistry() + { + m_Table = new Hashtable( StringComparer.OrdinalIgnoreCase ); + + Register( Report.ThisTypeID ); + Register( BarGraph.ThisTypeID ); + Register( PieChart.ThisTypeID ); + Register( Snapshot.ThisTypeID ); + Register( ItemValue.ThisTypeID ); + Register( ChartItem.ThisTypeID ); + Register( ReportItem.ThisTypeID ); + Register( ReportColumn.ThisTypeID ); + Register( SnapshotHistory.ThisTypeID ); + + Register( PageInfo.ThisTypeID ); + Register( QueueStatus.ThisTypeID ); + Register( StaffHistory.ThisTypeID ); + Register( ResponseInfo.ThisTypeID ); + } + } + + public sealed class PersistableType + { + private string m_Name; + private ConstructCallback m_Constructor; + + public string Name{ get{ return m_Name; } } + public ConstructCallback Constructor{ get{ return m_Constructor; } } + + public PersistableType( string name, ConstructCallback constructor ) + { + m_Name = name; + m_Constructor = constructor; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Persistance/PersistanceReader.cs b/Scripts/Engines/Reports/Persistance/PersistanceReader.cs new file mode 100644 index 0000000..be3ba1a --- /dev/null +++ b/Scripts/Engines/Reports/Persistance/PersistanceReader.cs @@ -0,0 +1,122 @@ +using System; +using System.IO; +using System.Xml; + +namespace Server.Engines.Reports +{ + public abstract class PersistanceReader + { + public abstract int GetInt32( string key ); + public abstract bool GetBoolean( string key ); + public abstract string GetString( string key ); + public abstract DateTime GetDateTime( string key ); + + public abstract bool BeginChildren(); + public abstract void FinishChildren(); + public abstract bool HasChild{ get; } + public abstract PersistableObject GetChild(); + + public abstract void ReadDocument( PersistableObject root ); + public abstract void Close(); + + public PersistanceReader() + { + } + } + + public class XmlPersistanceReader : PersistanceReader + { + private StreamReader m_Reader; + private XmlTextReader m_Xml; + private string m_Title; + + public XmlPersistanceReader( string filePath, string title ) + { + m_Reader = new StreamReader( filePath ); + m_Xml = new XmlTextReader( m_Reader ); + m_Xml.WhitespaceHandling=WhitespaceHandling.None; + m_Title = title; + } + + public override int GetInt32( string key ) + { + return XmlConvert.ToInt32( m_Xml.GetAttribute( key ) ); + } + + public override bool GetBoolean( string key ) + { + return XmlConvert.ToBoolean( m_Xml.GetAttribute( key ) ); + } + + public override string GetString( string key ) + { + return m_Xml.GetAttribute( key ); + } + + public override DateTime GetDateTime( string key ) + { + string val = m_Xml.GetAttribute( key ); + + if ( val == null ) + return DateTime.MinValue; + + return XmlConvert.ToDateTime( val, XmlDateTimeSerializationMode.Local ); + } + + private bool m_HasChild; + + public override bool HasChild + { + get + { + return m_HasChild; + } + } + + private bool m_WasEmptyElement; + + public override bool BeginChildren() + { + m_HasChild = !m_WasEmptyElement; + + m_Xml.Read(); + + return m_HasChild; + } + + public override void FinishChildren() + { + m_Xml.Read(); + } + + public override PersistableObject GetChild() + { + PersistableType type = PersistableTypeRegistry.Find( m_Xml.Name ); + PersistableObject obj = type.Constructor(); + + m_WasEmptyElement = m_Xml.IsEmptyElement; + + obj.Deserialize( this ); + + m_HasChild = ( m_Xml.NodeType == XmlNodeType.Element ); + + return obj; + } + + public override void ReadDocument( PersistableObject root ) + { + Console.Write( "Reports: {0}: Loading...", m_Title ); + m_Xml.Read(); + m_Xml.Read(); + m_HasChild = !m_Xml.IsEmptyElement; + root.Deserialize( this ); + Console.WriteLine( "done" ); + } + + public override void Close() + { + m_Xml.Close(); + m_Reader.Close(); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Persistance/PersistanceWriter.cs b/Scripts/Engines/Reports/Persistance/PersistanceWriter.cs new file mode 100644 index 0000000..441fe3d --- /dev/null +++ b/Scripts/Engines/Reports/Persistance/PersistanceWriter.cs @@ -0,0 +1,129 @@ +using System; +using System.IO; +using System.Xml; + +namespace Server.Engines.Reports +{ + public abstract class PersistanceWriter + { + public abstract void SetInt32( string key, int value ); + public abstract void SetBoolean( string key, bool value ); + public abstract void SetString( string key, string value ); + public abstract void SetDateTime( string key, DateTime value ); + + public abstract void BeginObject( PersistableType typeID ); + public abstract void BeginChildren(); + public abstract void FinishChildren(); + public abstract void FinishObject(); + + public abstract void WriteDocument( PersistableObject root ); + public abstract void Close(); + + public PersistanceWriter() + { + } + } + + public sealed class XmlPersistanceWriter : PersistanceWriter + { + private string m_RealFilePath; + private string m_TempFilePath; + + private StreamWriter m_Writer; + private XmlTextWriter m_Xml; + private string m_Title; + + public XmlPersistanceWriter( string filePath, string title ) + { + m_RealFilePath = filePath; + m_TempFilePath = Path.ChangeExtension( filePath, ".tmp" ); + + m_Writer = new StreamWriter( m_TempFilePath ); + m_Xml = new XmlTextWriter( m_Writer ); + + m_Title = title; + } + + public override void SetInt32( string key, int value ) + { + m_Xml.WriteAttributeString( key, XmlConvert.ToString( value ) ); + } + + public override void SetBoolean( string key, bool value ) + { + m_Xml.WriteAttributeString( key, XmlConvert.ToString( value ) ); + } + + public override void SetString( string key, string value ) + { + if ( value != null ) + m_Xml.WriteAttributeString( key, value ); + } + + public override void SetDateTime( string key, DateTime value ) + { + if ( value != DateTime.MinValue ) + m_Xml.WriteAttributeString( key, XmlConvert.ToString( value, XmlDateTimeSerializationMode.Local ) ); + } + + public override void BeginObject( PersistableType typeID ) + { + m_Xml.WriteStartElement( typeID.Name ); + } + + public override void BeginChildren() + { + } + + public override void FinishChildren() + { + } + + public override void FinishObject() + { + m_Xml.WriteEndElement(); + } + + public override void WriteDocument( PersistableObject root ) + { + Console.WriteLine( "Reports: {0}: Save started", m_Title ); + + m_Xml.Formatting = Formatting.Indented; + m_Xml.IndentChar = '\t'; + m_Xml.Indentation = 1; + + m_Xml.WriteStartDocument( true ); + + root.Serialize( this ); + + Console.WriteLine( "Reports: {0}: Save complete", m_Title ); + } + + public override void Close() + { + m_Xml.Close(); + m_Writer.Close(); + + try + { + string renamed = null; + + if ( File.Exists( m_RealFilePath ) ) + { + renamed = Path.ChangeExtension( m_RealFilePath, ".rem" ); + File.Move( m_RealFilePath, renamed ); + File.Move( m_TempFilePath, m_RealFilePath ); + File.Delete( renamed ); + } + else + { + File.Move( m_TempFilePath, m_RealFilePath ); + } + } + catch ( Exception ex ) + { + Console.WriteLine( ex ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Rendering/BarGraphRenderer.cs b/Scripts/Engines/Reports/Rendering/BarGraphRenderer.cs new file mode 100644 index 0000000..5d73584 --- /dev/null +++ b/Scripts/Engines/Reports/Rendering/BarGraphRenderer.cs @@ -0,0 +1,923 @@ +using System; +using System.Drawing; +using System.Collections; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; + +namespace Server.Engines.Reports +{ + // Modified from MS sample + + //********************************************************************* + // + // BarGraph Class + // + // This class uses GDI+ to render Bar Chart. + // + //********************************************************************* + + public class BarRegion + { + public int m_RangeFrom, m_RangeTo; + public string m_Name; + + public BarRegion( int rangeFrom, int rangeTo, string name ) + { + m_RangeFrom = rangeFrom; + m_RangeTo = rangeTo; + m_Name = name; + } + } + + public class BarGraphRenderer : ChartRenderer + { + private const float _graphLegendSpacer = 15F; + private const float _labelFontSize = 7f; + private const int _legendFontSize = 9; + private const float _legendRectangleSize = 10F; + private const float _spacer = 5F; + + public BarRegion[] _regions; + + private BarGraphRenderMode _renderMode; + + // Overall related members + private Color _backColor; + private string _fontFamily; + private string _longestTickValue = string.Empty; // Used to calculate max value width + private float _maxTickValueWidth; // Used to calculate left offset of bar graph + private float _totalHeight; + private float _totalWidth; + + // Graph related members + private float _barWidth; + private float _bottomBuffer; // Space from bottom to x axis + private bool _displayBarData; + private Color _fontColor; + private float _graphHeight; + private float _graphWidth; + private float _maxValue = 0.0f; // = final tick value * tick count + private float _scaleFactor; // = _maxValue / _graphHeight + private float _spaceBtwBars; // For now same as _barWidth + private float _topBuffer; // Space from top to the top of y axis + private float _xOrigin; // x position where graph starts drawing + private float _yOrigin; // y position where graph starts drawing + private string _yLabel; + private int _yTickCount; + private float _yTickValue; // Value for each tick = _maxValue/_yTickCount + + // Legend related members + private bool _displayLegend; + private float _legendWidth; + private string _longestLabel = string.Empty; // Used to calculate legend width + private float _maxLabelWidth = 0.0f; + + public string FontFamily + { + get{ return _fontFamily; } + set{ _fontFamily = value; } + } + + public BarGraphRenderMode RenderMode + { + get{ return _renderMode; } + set{ _renderMode = value; } + } + + public Color BackgroundColor + { + set{ _backColor = value; } + } + + public int BottomBuffer + { + set { _bottomBuffer = Convert.ToSingle(value); } + } + + public Color FontColor + { + set{ _fontColor = value; } + } + + public int Height + { + get{ return Convert.ToInt32(_totalHeight); } + set{ _totalHeight = Convert.ToSingle(value); } + } + + public int Width + { + get{ return Convert.ToInt32(_totalWidth); } + set{ _totalWidth = Convert.ToSingle(value); } + } + + public bool ShowLegend + { + get{ return _displayLegend; } + set{ _displayLegend = value; } + } + + public bool ShowData + { + get{ return _displayBarData; } + set{ _displayBarData = value; } + } + public int TopBuffer + { + set { _topBuffer = Convert.ToSingle(value); } + } + + public string VerticalLabel + { + get{ return _yLabel; } + set{ _yLabel = value; } + } + + public int VerticalTickCount + { + get{ return _yTickCount; } + set{ _yTickCount = value; } + } + + private string _xTitle, _yTitle; + + public void SetTitles( string xTitle, string yTitle ) + { + _xTitle = xTitle; + _yTitle = yTitle; + } + + public BarGraphRenderer() + { + AssignDefaultSettings(); + } + + public BarGraphRenderer(Color bgColor) + { + AssignDefaultSettings(); + BackgroundColor = bgColor; + } + + //********************************************************************* + // + // This method collects all data points and calculate all the necessary dimensions + // to draw the bar graph. It is the method called before invoking the Draw() method. + // labels is the x values. + // values is the y values. + // + //********************************************************************* + + public void CollectDataPoints(string[] labels, string[] values) + { + if (labels.Length == values.Length) + { + for(int i=0; i _xOrigin+_graphWidth ) + rc.Width = _xOrigin+_graphWidth-rc.X; + + using ( SolidBrush brsh = new SolidBrush( Color.FromArgb( 48, GetColor( i ) ) ) ) + gfx.FillRectangle( brsh, rc ); + + rc.Offset( (rc.Width - 200.0f) * 0.5f, -16.0f ); + rc.Width = 200.0f; + rc.Height = 20.0f; + + gfx.DrawString( reg.m_Name, font, textBrush, rc, textFormat ); + } + } + } + } + } + } + } + + //********************************************************************* + // + // This method returns a bar graph bitmap to the calling function. It is called after + // all dimensions and data points are calculated. + // + //********************************************************************* + + public override Bitmap Draw() + { + int height = Convert.ToInt32(_totalHeight); + int width = Convert.ToInt32(_totalWidth); + + Bitmap bmp = new Bitmap(width, height); + + using(Graphics graph = Graphics.FromImage(bmp)) + { + graph.CompositingQuality = CompositingQuality.HighQuality; + graph.SmoothingMode = SmoothingMode.AntiAlias; + + using ( SolidBrush brsh = new SolidBrush( _backColor ) ) + graph.FillRectangle(brsh, -1, -1, bmp.Width+1, bmp.Height+1); + + DrawRegions(graph); + DrawVerticalLabelArea(graph); + DrawXLabelBack(graph); + DrawBars(graph); + DrawXLabelArea(graph); + + if (_displayLegend) + DrawLegend(graph); + } + + return bmp; + } + + //********************************************************************* + // + // This method draws all the bars for the graph. + // + //********************************************************************* + + public int _interval; + + private void DrawBars(Graphics graph) + { + SolidBrush brsFont = null; + Font valFont = null; + StringFormat sfFormat = null; + + try + { + brsFont = new SolidBrush(_fontColor); + valFont = new Font(_fontFamily, _labelFontSize); + sfFormat = new StringFormat(); + sfFormat.Alignment = StringAlignment.Center; + int i = 0; + + PointF[] linePoints = null; + + if ( _renderMode == BarGraphRenderMode.Lines ) + linePoints = new PointF[DataPoints.Count]; + + int pointIndex = 0; + + // Draw bars and the value above each bar + using ( Pen pen = new Pen(_fontColor,0.15f) ) + { + using ( SolidBrush whiteBrsh = new SolidBrush( Color.FromArgb( 128, Color.White ) ) ) + { + foreach(DataItem item in DataPoints) + { + using(SolidBrush barBrush = new SolidBrush(item.ItemColor)) + { + float itemY = _yOrigin + _graphHeight - item.SweepSize; + + if ( _renderMode == BarGraphRenderMode.Lines ) + { + linePoints[pointIndex++] = new PointF( _xOrigin + item.StartPos + (_barWidth / 2), itemY ); + } + else if ( _renderMode == BarGraphRenderMode.Bars ) + { + float ox = _xOrigin + item.StartPos; + float oy = itemY; + float ow = _barWidth; + float oh = item.SweepSize; + float of = 9.5f; + + PointF[] pts = new PointF[] + { + new PointF( ox, oy ), + new PointF( ox + ow, oy ), + new PointF( ox + of, oy + of ), + new PointF( ox + of + ow, oy + of ), + new PointF( ox, oy + oh ), + new PointF( ox + of, oy + of + oh ), + new PointF( ox + of + ow, oy + of + oh ) + }; + + graph.FillPolygon( barBrush, new PointF[]{ pts[2], pts[3], pts[6], pts[5] } ); + + using ( SolidBrush ltBrsh = new SolidBrush( System.Windows.Forms.ControlPaint.Light(item.ItemColor,0.1f) ) ) + graph.FillPolygon( ltBrsh, new PointF[]{ pts[0], pts[2], pts[5], pts[4] } ); + + using ( SolidBrush drkBrush = new SolidBrush( System.Windows.Forms.ControlPaint.Dark(item.ItemColor,0.05f) ) ) + graph.FillPolygon( drkBrush, new PointF[]{ pts[0], pts[1], pts[3], pts[2] } ); + + graph.DrawLine( pen, pts[0], pts[1] ); + graph.DrawLine( pen, pts[0], pts[2] ); + graph.DrawLine( pen, pts[1], pts[3] ); + graph.DrawLine( pen, pts[2], pts[3] ); + graph.DrawLine( pen, pts[2], pts[5] ); + graph.DrawLine( pen, pts[0], pts[4] ); + graph.DrawLine( pen, pts[4], pts[5] ); + graph.DrawLine( pen, pts[5], pts[6] ); + graph.DrawLine( pen, pts[3], pts[6] ); + + // Draw data value + if (_displayBarData&&(i%_interval)==0) + { + float sectionWidth = ( _barWidth + _spaceBtwBars ); + float startX = _xOrigin + (i * sectionWidth) + (sectionWidth / 2); // This draws the value on center of the bar + float startY = itemY - 2f - valFont.Height; // Positioned on top of each bar by 2 pixels + RectangleF recVal = new RectangleF(startX-((sectionWidth * _interval) / 2), startY, sectionWidth * _interval, valFont.Height); + SizeF sz = graph.MeasureString(item.Value.ToString("#,###.##"),valFont,recVal.Size,sfFormat); + //using ( SolidBrush brsh = new SolidBrush( Color.FromArgb( 180, 255, 255, 255 ) ) ) + // graph.FillRectangle( brsh, new RectangleF(recVal.X+((recVal.Width-sz.Width)/2),recVal.Y+((recVal.Height-sz.Height)/2),sz.Width+4,sz.Height) ); + + //graph.DrawString(item.Value.ToString("#,###.##"), valFont, brsFont, recVal, sfFormat); + + for ( int box = -1; box <= 1; ++box ) + { + for ( int boy = -1; boy <= 1; ++boy ) + { + if ( box == 0 && boy == 0 ) + continue; + + RectangleF rco = new RectangleF( recVal.X+box, recVal.Y+boy, recVal.Width, recVal.Height ); + graph.DrawString(item.Value.ToString("#,###.##"), valFont, whiteBrsh, rco, sfFormat); + } + } + + graph.DrawString(item.Value.ToString("#,###.##"), valFont, brsFont, recVal, sfFormat); + } + } + + i++; + } + } + + if ( _renderMode == BarGraphRenderMode.Lines ) + { + if ( linePoints.Length >= 2 ) + { + using ( Pen linePen = new Pen( Color.FromArgb(220,Color.Red), 2.5f ) ) + graph.DrawCurve( linePen, linePoints, 0.5f ); + } + + using ( Pen linePen = new Pen( Color.FromArgb(40,_fontColor), 0.8f ) ) + { + for ( int j = 0; j < linePoints.Length; ++j ) + { + graph.DrawLine( linePen, linePoints[j], new PointF( linePoints[j].X, _yOrigin + _graphHeight ) ); + + DataItem item = DataPoints[j]; + float itemY = _yOrigin + _graphHeight - item.SweepSize; + + // Draw data value + if (_displayBarData&&(j%_interval)==0) + { + graph.FillEllipse( brsFont, new RectangleF( linePoints[j].X-2.0f, linePoints[j].Y-2.0f, 4.0f, 4.0f ) ); + + float sectionWidth = ( _barWidth + _spaceBtwBars ); + float startX = _xOrigin + (j * sectionWidth) + (sectionWidth/2); // This draws the value on center of the bar + float startY = itemY - 2f - valFont.Height; // Positioned on top of each bar by 2 pixels + RectangleF recVal = new RectangleF(startX-((sectionWidth * _interval) / 2), startY, sectionWidth * _interval, valFont.Height); + SizeF sz = graph.MeasureString(item.Value.ToString("#,###.##"),valFont,recVal.Size,sfFormat); + //using ( SolidBrush brsh = new SolidBrush( Color.FromArgb( 48, 255, 255, 255 ) ) ) + // graph.FillRectangle( brsh, new RectangleF(recVal.X+((recVal.Width-sz.Width)/2),recVal.Y+((recVal.Height-sz.Height)/2),sz.Width+4,sz.Height) ); + + for ( int box = -1; box <= 1; ++box ) + { + for ( int boy = -1; boy <= 1; ++boy ) + { + if ( box == 0 && boy == 0 ) + continue; + + RectangleF rco = new RectangleF( recVal.X+box, recVal.Y+boy, recVal.Width, recVal.Height ); + graph.DrawString(item.Value.ToString("#,###.##"), valFont, whiteBrsh, rco, sfFormat); + } + } + + graph.DrawString(item.Value.ToString("#,###.##"), valFont, brsFont, recVal, sfFormat); + } + } + } + } + } + } + } + finally + { + if (brsFont != null) brsFont.Dispose(); + if (valFont != null) valFont.Dispose(); + if (sfFormat != null) sfFormat.Dispose(); + } + } + + //********************************************************************* + // + // This method draws the y label, tick marks, tick values, and the y axis. + // + //********************************************************************* + + private void DrawVerticalLabelArea(Graphics graph) + { + Font lblFont = null; + SolidBrush brs = null; + StringFormat lblFormat = null; + Pen pen = null; + StringFormat sfVLabel = null; + + float fo = (_yTitle==null?0.0f:20.0f); + + try + { + brs = new SolidBrush(_fontColor); + lblFormat = new StringFormat(); + pen = new Pen(_fontColor); + + if ( _yTitle != null ) + { + sfVLabel = new StringFormat(); + sfVLabel.Alignment = StringAlignment.Center; + sfVLabel.LineAlignment = StringAlignment.Center; + sfVLabel.FormatFlags=StringFormatFlags.DirectionVertical; + + lblFont = new Font(_fontFamily, _labelFontSize+4.0f); + graph.DrawString(_yTitle,lblFont,brs,new RectangleF( 0.0f, _yOrigin, 20.0f, _graphHeight ), sfVLabel ); + lblFont.Dispose(); + } + + sfVLabel = new StringFormat(); + lblFormat.Alignment = StringAlignment.Far; + lblFormat.FormatFlags|=StringFormatFlags.NoClip; + + // Draw vertical label at the top of y-axis and place it in the middle top of y-axis + lblFont = new Font(_fontFamily, _labelFontSize+2.0f,FontStyle.Bold); + RectangleF recVLabel = new RectangleF(0, _yOrigin-2*_spacer-lblFont.Height, _xOrigin*2, lblFont.Height); + sfVLabel.Alignment = StringAlignment.Center; + sfVLabel.FormatFlags|=StringFormatFlags.NoClip; + //graph.DrawRectangle(Pens.Black,Rectangle.Truncate(recVLabel)); + graph.DrawString(_yLabel, lblFont, brs, recVLabel, sfVLabel); + lblFont.Dispose(); + + lblFont = new Font(_fontFamily, _labelFontSize); + // Draw all tick values and tick marks + using ( Pen smallPen = new Pen(Color.FromArgb(96,_fontColor),0.8f) ) + { + for (int i=0; i<_yTickCount; i++) + { + float currentY = _topBuffer + (i * _yTickValue/_scaleFactor); // Position for tick mark + float labelY = currentY-lblFont.Height/2; // Place label in the middle of tick + RectangleF lblRec = new RectangleF(_spacer+fo-6, labelY, _maxTickValueWidth, lblFont.Height); + + float currentTick = _maxValue - i*_yTickValue; // Calculate tick value from top to bottom + graph.DrawString(currentTick.ToString("#,###.##"), lblFont, brs, lblRec, lblFormat); // Draw tick value + graph.DrawLine(pen, _xOrigin, currentY, _xOrigin - 4.0f, currentY); // Draw tick mark + + graph.DrawLine(smallPen, _xOrigin, currentY, _xOrigin + _graphWidth, currentY ); + } + } + + // Draw y axis + graph.DrawLine(pen, _xOrigin, _yOrigin, _xOrigin, _yOrigin + _graphHeight); + } + finally + { + if (lblFont != null) lblFont.Dispose(); + if (brs != null) brs.Dispose(); + if (lblFormat != null) lblFormat.Dispose(); + if (pen != null) pen.Dispose(); + if (sfVLabel != null) sfVLabel.Dispose(); + } + } + + //********************************************************************* + // + // This method draws x axis and all x labels + // + //********************************************************************* + + private void DrawXLabelBack(Graphics graph) + { + Font lblFont = null; + SolidBrush brs = null; + StringFormat lblFormat = null; + Pen pen = null; + + try + { + lblFont = new Font(_fontFamily, _labelFontSize); + brs = new SolidBrush(_fontColor); + lblFormat = new StringFormat(); + pen = new Pen(_fontColor); + + lblFormat.Alignment = StringAlignment.Center; + + // Draw x axis + graph.DrawLine(pen, _xOrigin, _yOrigin + _graphHeight, _xOrigin + _graphWidth, _yOrigin + _graphHeight ); + } + finally + { + if (lblFont != null) lblFont.Dispose(); + if (brs != null) brs.Dispose(); + if (lblFormat != null) lblFormat.Dispose(); + if (pen != null) pen.Dispose(); + } + } + + private void DrawXLabelArea(Graphics graph) + { + Font lblFont = null; + SolidBrush brs = null; + StringFormat lblFormat = null; + Pen pen = null; + + try + { + brs = new SolidBrush(_fontColor); + pen = new Pen(_fontColor); + + if ( _xTitle != null ) + { + lblFormat = new StringFormat(); + lblFormat.Alignment = StringAlignment.Center; + lblFormat.LineAlignment = StringAlignment.Center; + // sfVLabel.FormatFlags=StringFormatFlags.DirectionVertical; + + lblFont = new Font(_fontFamily, _labelFontSize+2.0f, FontStyle.Bold); + graph.DrawString(_xTitle,lblFont,brs,new RectangleF( _xOrigin, _yOrigin+_graphHeight+14.0f+(_renderMode==BarGraphRenderMode.Bars?10.0f:0.0f)+((DataPoints.Count/_interval)>24?16.0f:0.0f), _graphWidth, 20.0f ), lblFormat ); + } + + lblFont = new Font(_fontFamily, _labelFontSize); + lblFormat = new StringFormat(); + lblFormat.Alignment = StringAlignment.Center; + lblFormat.FormatFlags |= StringFormatFlags.NoClip; + lblFormat.Trimming = StringTrimming.None; + //lblFormat.FormatFlags |= StringFormatFlags.NoWrap; + + float of = 0.0f; + + if ( _renderMode == BarGraphRenderMode.Bars ) + { + of = 10.0f; + + // Draw x axis + graph.DrawLine( pen, _xOrigin + of, _yOrigin + _graphHeight + of, _xOrigin + _graphWidth + of, _yOrigin + _graphHeight + of ); + + graph.DrawLine( pen, _xOrigin, _yOrigin + _graphHeight, _xOrigin + of, _yOrigin + _graphHeight + of ); + graph.DrawLine( pen, _xOrigin + _graphWidth, _yOrigin + _graphHeight, _xOrigin + of + _graphWidth, _yOrigin + _graphHeight + of ); + } + + float currentX; + float currentY = _yOrigin + _graphHeight + 2.0f; // All x labels are drawn 2 pixels below x-axis + float labelWidth = _barWidth + _spaceBtwBars; // Fits exactly below the bar + int i = 0; + + // Draw x labels + foreach(DataItem item in DataPoints) + { + if((i%_interval)==0) + { + currentX = _xOrigin + (i * labelWidth)+of+(labelWidth/2); + RectangleF recLbl = new RectangleF(currentX-((labelWidth*_interval)/2), currentY+of, labelWidth*_interval, lblFont.Height*2); + string lblString = _displayLegend ? item.Label : item.Description; // Decide what to show: short or long + + graph.DrawString(lblString, lblFont, brs, recLbl, lblFormat); + } + i++; + } + } + finally + { + if (lblFont != null) lblFont.Dispose(); + if (brs != null) brs.Dispose(); + if (lblFormat != null) lblFormat.Dispose(); + if (pen != null) pen.Dispose(); + } + } + + //********************************************************************* + // + // This method determines where to place the legend box. + // It draws the legend border, legend description, and legend color code. + // + //********************************************************************* + + private void DrawLegend(Graphics graph) + { + Font lblFont = null; + SolidBrush brs = null; + StringFormat lblFormat = null; + Pen pen = null; + + try + { + lblFont = new Font(_fontFamily, _legendFontSize); + brs = new SolidBrush(_fontColor); + lblFormat = new StringFormat(); + pen = new Pen(_fontColor); + lblFormat.Alignment = StringAlignment.Near; + + // Calculate Legend drawing start point + float startX = _xOrigin + _graphWidth + _graphLegendSpacer; + float startY = _yOrigin; + + float xColorCode = startX + _spacer; + float xLegendText = xColorCode + _legendRectangleSize + _spacer; + float legendHeight = 0.0f; + for(int i=0; i _maxTickValueWidth ) + _maxTickValueWidth = measured; + } + + float leftOffset = _spacer + _maxTickValueWidth + (_yTitle == null ? 0.0f : 20.0f); + float rtOffset = 0.0f; + + if (_displayLegend) + { + _legendWidth = _spacer + _legendRectangleSize + _spacer + _maxLabelWidth + _spacer; + rtOffset = _graphLegendSpacer + _legendWidth + _spacer; + } + else + rtOffset = _spacer; // Make graph in the middle + + if ( _renderMode == BarGraphRenderMode.Bars ) + rtOffset += 10.0f; + + rtOffset+=10.0f; + + _graphHeight = _totalHeight - _topBuffer - _bottomBuffer - (_xTitle == null ? 0.0f : 20.0f); // Buffer spaces are used to print labels + _graphWidth = _totalWidth - leftOffset - rtOffset; + _xOrigin = leftOffset; + _yOrigin = _topBuffer; + + // Once the correct _maxValue is determined, then calculate _scaleFactor + _scaleFactor = _maxValue / _graphHeight; + } + + //********************************************************************* + // + // This method determines the longest tick value from the given data points. + // The result is needed to calculate the correct graph dimension. + // + //********************************************************************* + + private void FindLongestTickValue() + { + float currentTick; + string tickString; + for (int i=0; i<_yTickCount; i++) + { + currentTick = _maxValue - i*_yTickValue; + tickString = currentTick.ToString("#,###.##"); + if (_longestTickValue.Length < tickString.Length) + _longestTickValue = tickString; + } + } + + //********************************************************************* + // + // This method calculates the image width in pixel for a given text + // + //********************************************************************* + + private float CalculateImgFontWidth(string text, float size, string family) + { + Bitmap bmp = null; + Graphics graph = null; + Font font = null; + + try + { + font = new Font(family, size); + + // Calculate the size of the string. + bmp = new Bitmap(1,1,PixelFormat.Format32bppArgb); + graph = Graphics.FromImage(bmp); + SizeF oSize = graph.MeasureString(text, font); + oSize.Width=4+(float)Math.Ceiling(oSize.Width); + + return oSize.Width; + } + finally + { + if (graph != null) graph.Dispose(); + if (bmp != null) bmp.Dispose(); + if (font != null) font.Dispose(); + } + } + + //********************************************************************* + // + // This method creates abbreviation from long description; used for making legend + // + //********************************************************************* + + private string MakeShortLabel(string text) + { + string label = text; + if (text.Length > 2) + { + int midPostition = Convert.ToInt32(Math.Floor(text.Length/2.0)); + label = text.Substring(0,1) + text.Substring(midPostition, 1) + text.Substring(text.Length-1,1); + } + return label; + } + + //********************************************************************* + // + // This method calculates the max value and each tick mark value for the bar graph. + // + //********************************************************************* + + private void CalculateTickAndMax() + { + float tempMax = 0.0f; + + // Give graph some head room first about 10% of current max + _maxValue *= 1.1f; + + if (_maxValue != 0.0f) + { + // Find a rounded value nearest to the current max value + // Calculate this max first to give enough space to draw value on each bar + double exp = Convert.ToDouble(Math.Floor(Math.Log10(_maxValue))); + tempMax = Convert.ToSingle(Math.Ceiling(_maxValue / Math.Pow(10, exp)) * Math.Pow(10, exp)); + } + else + tempMax = 1.0f; + + // Once max value is calculated, tick value can be determined; tick value should be a whole number + _yTickValue = tempMax / _yTickCount; + double expTick = Convert.ToDouble(Math.Floor(Math.Log10(_yTickValue))); + _yTickValue = Convert.ToSingle(Math.Ceiling(_yTickValue / Math.Pow(10, expTick)) * Math.Pow(10, expTick)); + + // Re-calculate the max value with the new tick value + _maxValue = _yTickValue * _yTickCount; + } + + //********************************************************************* + // + // This method calculates the height for each bar in the graph + // + //********************************************************************* + + private void CalculateSweepValues() + { + // Called when all values and scale factor are known + // All values calculated here are relative from (_xOrigin, _yOrigin) + int i = 0; + foreach(DataItem item in DataPoints) + { + // This implementation does not support negative value + if (item.Value >= 0) item.SweepSize = item.Value/_scaleFactor; + + // (_spaceBtwBars/2) makes half white space for the first bar + item.StartPos = (_spaceBtwBars/2) + i * (_barWidth+_spaceBtwBars); + i++; + } + } + + //********************************************************************* + // + // This method calculates the width for each bar in the graph + // + //********************************************************************* + + private void CalculateBarWidth(int dataCount, float barGraphWidth) + { + // White space between each bar is the same as bar width itself + _barWidth = barGraphWidth / (dataCount * 2); // Each bar has 1 white space + //_barWidth =/* (float)Math.Floor(*/_barWidth/*)*/; + _spaceBtwBars = _barWidth; + } + + //********************************************************************* + // + // This method assigns default value to the bar graph properties and is only + // called from BarGraph constructors + // + //********************************************************************* + + private void AssignDefaultSettings() + { + // default values + _totalWidth = 680f; + _totalHeight = 450f; + _fontFamily = "Verdana"; + _backColor = Color.White; + _fontColor = Color.Black; + _topBuffer = 30f; + _bottomBuffer = 30f; + _yTickCount = 2; + _displayLegend = false; + _displayBarData = false; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Rendering/ChartRenderer.cs b/Scripts/Engines/Reports/Rendering/ChartRenderer.cs new file mode 100644 index 0000000..5b4c6f7 --- /dev/null +++ b/Scripts/Engines/Reports/Rendering/ChartRenderer.cs @@ -0,0 +1,71 @@ +using System; +using System.Drawing; +using System.Collections; + +namespace Server.Engines.Reports +{ + //********************************************************************* + // + // Chart Class + // + // Base class implementation for BarChart and PieChart + // + //********************************************************************* + + public abstract class ChartRenderer + { + private const int _colorLimit = 9; + + private Color[] _color = + { + Color.Firebrick, + Color.SkyBlue, + Color.MediumSeaGreen, + Color.MediumOrchid, + Color.Chocolate, + Color.SlateBlue, + Color.LightPink, + Color.LightGreen, + Color.Khaki + }; + + // Represent collection of all data points for the chart + private ChartItemsCollection _dataPoints = new ChartItemsCollection(); + + // The implementation of this method is provided by derived classes + public abstract Bitmap Draw(); + + public ChartItemsCollection DataPoints + { + get{ return _dataPoints; } + set{ _dataPoints = value; } + } + + public void SetColor(int index, Color NewColor) + { + if (index < _colorLimit) + { + _color[index] = NewColor; + } + else + { + throw new Exception("Color Limit is " + _colorLimit); + } + } + + public Color GetColor(int index) + { + //return _color[index%_colorLimit]; + + if (index < _colorLimit) + { + return _color[index]; + } + else + { + return _color[(index+2)%_colorLimit]; + //throw new Exception("Color Limit is " + _colorLimit); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Rendering/DataItem.cs b/Scripts/Engines/Reports/Rendering/DataItem.cs new file mode 100644 index 0000000..7ce48ae --- /dev/null +++ b/Scripts/Engines/Reports/Rendering/DataItem.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections; +using System.Diagnostics; +using System.Drawing; + +namespace Server.Engines.Reports +{ + // Modified from MS sample + + //********************************************************************* + // + // ChartItem Class + // + // This class represents a data point in a chart + // + //********************************************************************* + + public class DataItem + { + private string _label; + private string _description; + private float _value; + private Color _color; + private float _startPos; + private float _sweepSize; + + private DataItem() {} + + public DataItem(string label, string desc, float data, float start, float sweep, Color clr) + { + _label = label; + _description = desc; + _value = data; + _startPos = start; + _sweepSize = sweep; + _color = clr; + } + + public string Label + { + get{ return _label; } + set{ _label = value; } + } + + public string Description + { + get{ return _description; } + set{ _description = value; } + } + + public float Value + { + get{ return _value; } + set{ _value = value; } + } + + public Color ItemColor + { + get{ return _color; } + set{ _color = value; } + } + + public float StartPos + { + get{ return _startPos; } + set{ _startPos = value; } + } + + public float SweepSize + { + get{ return _sweepSize; } + set{ _sweepSize = value; } + } + } + + //********************************************************************* + // + // Custom Collection for ChartItems + // + //********************************************************************* + + public class ChartItemsCollection : CollectionBase + { + public DataItem this[int index] + { + get{ return (DataItem)(List[index]); } + set{ List[index] = value; } + } + + public int Add(DataItem value) + { + return List.Add(value); + } + + public int IndexOf(DataItem value) + { + return List.IndexOf(value); + } + + public bool Contains(DataItem value) + { + return List.Contains(value); + } + + public void Remove(DataItem value) + { + List.Remove(value); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Rendering/HtmlRenderer.cs b/Scripts/Engines/Reports/Rendering/HtmlRenderer.cs new file mode 100644 index 0000000..7bec01f --- /dev/null +++ b/Scripts/Engines/Reports/Rendering/HtmlRenderer.cs @@ -0,0 +1,541 @@ +using System; +using System.IO; +using System.Web; +using System.Web.UI; +using System.Net; +using System.Drawing; +using System.Drawing.Imaging; +using System.Collections; +using System.Diagnostics; +using HtmlTag = System.Web.UI.HtmlTextWriterTag; +using HtmlAttr = System.Web.UI.HtmlTextWriterAttribute; + +namespace Server.Engines.Reports +{ + public class HtmlRenderer + { + private string m_Type; + private string m_Title; + private string m_OutputDirectory; + + private DateTime m_TimeStamp; + private ObjectCollection m_Objects; + + private HtmlRenderer( string outputDirectory ) + { + m_Type = outputDirectory; + m_Title = ( m_Type == "staff" ? "Staff" : "Stats" ); + m_OutputDirectory = Path.Combine( Core.BaseDirectory, "output" ); + + if ( !Directory.Exists( m_OutputDirectory ) ) + Directory.CreateDirectory( m_OutputDirectory ); + + m_OutputDirectory = Path.Combine( m_OutputDirectory, outputDirectory ); + + if ( !Directory.Exists( m_OutputDirectory ) ) + Directory.CreateDirectory( m_OutputDirectory ); + } + + public HtmlRenderer( string outputDirectory, Snapshot ss, SnapshotHistory history ) : this( outputDirectory ) + { + m_TimeStamp = ss.TimeStamp; + + m_Objects = new ObjectCollection(); + + for ( int i = 0; i < ss.Children.Count; ++i ) + m_Objects.Add( ss.Children[i] ); + + m_Objects.Add( BarGraph.OverTime( history, "General Stats", "Clients", 1, 100, 6 ) ); + m_Objects.Add( BarGraph.OverTime( history, "General Stats", "Items", 24, 9, 1 ) ); + m_Objects.Add( BarGraph.OverTime( history, "General Stats", "Players", 24, 9, 1 ) ); + m_Objects.Add( BarGraph.OverTime( history, "General Stats", "NPCs", 24, 9, 1 ) ); + m_Objects.Add( BarGraph.DailyAverage( history, "General Stats", "Clients" ) ); + m_Objects.Add( BarGraph.Growth( history, "General Stats", "Clients" ) ); + } + + public HtmlRenderer( string outputDirectory, StaffHistory history ) : this( outputDirectory ) + { + m_TimeStamp = DateTime.Now; + + m_Objects = new ObjectCollection(); + + history.Render( m_Objects ); + } + + public void Render() + { + Console.WriteLine( "Reports: {0}: Render started", m_Title ); + + RenderFull(); + + for ( int i = 0; i < m_Objects.Count; ++i ) + RenderSingle( m_Objects[i] ); + + Console.WriteLine( "Reports: {0}: Render complete", m_Title ); + } + + private static readonly string FtpHost = null; + + private static readonly string FtpUsername = null; + private static readonly string FtpPassword = null; + + private static readonly string FtpStatsDirectory = null; + private static readonly string FtpStaffDirectory = null; + + public void Upload() + { + if ( FtpHost == null ) + return; + + Console.WriteLine( "Reports: {0}: Upload started", m_Title ); + + string filePath = Path.Combine( m_OutputDirectory, "upload.ftp" ); + + using ( StreamWriter op = new StreamWriter( filePath ) ) + { + op.WriteLine( "open \"{0}\"", FtpHost ); + op.WriteLine( FtpUsername ); + op.WriteLine( FtpPassword ); + op.WriteLine( "cd \"{0}\"", ( m_Type == "staff" ? FtpStaffDirectory : FtpStatsDirectory ) ); + op.WriteLine( "mput \"{0}\"", Path.Combine( m_OutputDirectory, "*.html" ) ); + op.WriteLine( "mput \"{0}\"", Path.Combine( m_OutputDirectory, "*.css" ) ); + op.WriteLine( "binary" ); + op.WriteLine( "mput \"{0}\"", Path.Combine( m_OutputDirectory, "*.png" ) ); + op.WriteLine( "disconnect" ); + op.Write( "quit" ); + } + + ProcessStartInfo psi = new ProcessStartInfo(); + + psi.FileName = "ftp"; + psi.Arguments = String.Format( "-i -s:\"{0}\"", filePath ); + + psi.CreateNoWindow = true; + psi.WindowStyle = ProcessWindowStyle.Hidden; + //psi.UseShellExecute = true; + + try + { + Process p = Process.Start( psi ); + + p.WaitForExit(); + } + catch + { + } + + Console.WriteLine( "Reports: {0}: Upload complete", m_Title ); + + try{ File.Delete( filePath ); } + catch{} + } + + public void RenderFull() + { + string filePath = Path.Combine( m_OutputDirectory, "reports.html" ); + + using ( StreamWriter op = new StreamWriter( filePath ) ) + { + using ( HtmlTextWriter html = new HtmlTextWriter( op, "\t" ) ) + RenderFull( html ); + } + + string cssPath = Path.Combine( m_OutputDirectory, "styles.css" ); + + if ( File.Exists( cssPath ) ) + return; + + using ( StreamWriter css = new StreamWriter( cssPath ) ) + { + css.WriteLine( "body { background-color: #FFFFFF; font-family: verdana, arial; font-size: 11px; }" ); + css.WriteLine( "a { color: #28435E; }" ); + css.WriteLine( "a:hover { color: #4878A9; }" ); + css.WriteLine( "td.header { background-color: #9696AA; font-weight: bold; font-size: 12px; }" ); + css.WriteLine( "td.lentry { background-color: #D7D7EB; width: 10%; }" ); + css.WriteLine( "td.rentry { background-color: #FFFFFF; width: 90%; }" ); + css.WriteLine( "td.entry { background-color: #FFFFFF; }" ); + css.WriteLine( "td { font-size: 11px; }" ); + css.Write ( ".tbl-border { background-color: #46465A; }" ); + } + } + + private const string ShardTitle = "Shard"; + + public void RenderFull( HtmlTextWriter html ) + { + html.RenderBeginTag( HtmlTag.Html ); + + html.RenderBeginTag( HtmlTag.Head ); + + html.RenderBeginTag( HtmlTag.Title ); + html.Write( "{0} Statistics", ShardTitle ); + html.RenderEndTag(); + + html.AddAttribute( "rel", "stylesheet" ); + html.AddAttribute( HtmlAttr.Type, "text/css" ); + html.AddAttribute( HtmlAttr.Href, "styles.css" ); + html.RenderBeginTag( HtmlTag.Link ); + html.RenderEndTag(); + + html.RenderEndTag(); + + html.RenderBeginTag( HtmlTag.Body ); + + for ( int i = 0; i < m_Objects.Count; ++i ) + { + RenderDirect( m_Objects[i], html ); + html.Write( "

" ); + } + + html.RenderBeginTag( HtmlTag.Center ); + TimeZone tz = TimeZone.CurrentTimeZone; + bool isDaylight = tz.IsDaylightSavingTime( m_TimeStamp ); + TimeSpan utcOffset = tz.GetUtcOffset( m_TimeStamp ); + + html.Write( "Snapshot taken at {0:d} {0:t}. All times are {1}.", m_TimeStamp, tz.StandardName ); + html.RenderEndTag(); + + html.RenderEndTag(); + + html.RenderEndTag(); + } + + public static string SafeFileName( string name ) + { + return name.ToLower().Replace( ' ', '_' ); + } + + public void RenderSingle( PersistableObject obj ) + { + string filePath = Path.Combine( m_OutputDirectory, SafeFileName( FindNameFrom( obj ) ) + ".html" ); + + using ( StreamWriter op = new StreamWriter( filePath ) ) + { + using ( HtmlTextWriter html = new HtmlTextWriter( op, "\t" ) ) + RenderSingle( obj, html ); + } + } + + private string FindNameFrom( PersistableObject obj ) + { + if ( obj is Report ) + return (obj as Report).Name; + else if ( obj is Chart ) + return (obj as Chart).Name; + + return "Invalid"; + } + + public void RenderSingle( PersistableObject obj, HtmlTextWriter html ) + { + html.RenderBeginTag( HtmlTag.Html ); + + html.RenderBeginTag( HtmlTag.Head ); + + html.RenderBeginTag( HtmlTag.Title ); + html.Write( "{0} Statistics - {1}", ShardTitle, FindNameFrom( obj ) ); + html.RenderEndTag(); + + html.AddAttribute( "rel", "stylesheet" ); + html.AddAttribute( HtmlAttr.Type, "text/css" ); + html.AddAttribute( HtmlAttr.Href, "styles.css" ); + html.RenderBeginTag( HtmlTag.Link ); + html.RenderEndTag(); + + html.RenderEndTag(); + + html.RenderBeginTag( HtmlTag.Body ); + + html.RenderBeginTag( HtmlTag.Center ); + + RenderDirect( obj, html ); + + html.Write( "
" ); + + TimeZone tz = TimeZone.CurrentTimeZone; + bool isDaylight = tz.IsDaylightSavingTime( m_TimeStamp ); + TimeSpan utcOffset = tz.GetUtcOffset( m_TimeStamp ); + + html.Write( "Snapshot taken at {0:d} {0:t}. All times are {1}.", m_TimeStamp, tz.StandardName ); + html.RenderEndTag(); + + html.RenderEndTag(); + + html.RenderEndTag(); + } + + public void RenderDirect( PersistableObject obj, HtmlTextWriter html ) + { + if ( obj is Report ) + RenderReport( obj as Report, html ); + else if ( obj is BarGraph ) + RenderBarGraph( obj as BarGraph, html ); + else if ( obj is PieChart ) + RenderPieChart( obj as PieChart, html ); + } + + private void RenderPieChart( PieChart chart, HtmlTextWriter html ) + { + PieChartRenderer pieChart = new PieChartRenderer( Color.White ); + + pieChart.ShowPercents = chart.ShowPercents; + + string[] labels = new string[chart.Items.Count]; + string[] values = new string[chart.Items.Count]; + + for ( int i = 0; i < chart.Items.Count; ++i ) + { + ChartItem item = chart.Items[i]; + + labels[i] = item.Name; + values[i] = item.Value.ToString(); + } + + pieChart.CollectDataPoints( labels, values ); + + Bitmap bmp = pieChart.Draw(); + + string fileName = chart.FileName + ".png"; + bmp.Save( Path.Combine( m_OutputDirectory, fileName ), ImageFormat.Png ); + + html.Write( "" ); + + html.AddAttribute( HtmlAttr.Cellpadding, "0" ); + html.AddAttribute( HtmlAttr.Cellspacing, "0" ); + html.AddAttribute( HtmlAttr.Border, "0" ); + html.RenderBeginTag( HtmlTag.Table ); + + html.RenderBeginTag( HtmlTag.Tr ); + html.AddAttribute( HtmlAttr.Class, "tbl-border" ); + html.RenderBeginTag( HtmlTag.Td ); + + html.AddAttribute( HtmlAttr.Width, "100%" ); + html.AddAttribute( HtmlAttr.Cellpadding, "4" ); + html.AddAttribute( HtmlAttr.Cellspacing, "1" ); + html.RenderBeginTag( HtmlTag.Table ); + + html.RenderBeginTag( HtmlTag.Tr ); + + html.AddAttribute( HtmlAttr.Colspan, "10" ); + html.AddAttribute( HtmlAttr.Width, "100%" ); + html.AddAttribute( HtmlAttr.Align, "center" ); + html.AddAttribute( HtmlAttr.Class, "header" ); + html.RenderBeginTag( HtmlTag.Td ); + html.Write( chart.Name ); + html.RenderEndTag(); + html.RenderEndTag(); + + html.RenderBeginTag( HtmlTag.Tr ); + + html.AddAttribute( HtmlAttr.Colspan, "10" ); + html.AddAttribute( HtmlAttr.Width, "100%" ); + html.AddAttribute( HtmlAttr.Align, "center" ); + html.AddAttribute( HtmlAttr.Class, "entry" ); + html.RenderBeginTag( HtmlTag.Td ); + + html.AddAttribute( HtmlAttr.Width, bmp.Width.ToString() ); + html.AddAttribute( HtmlAttr.Height, bmp.Height.ToString() ); + html.AddAttribute( HtmlAttr.Src, fileName ); + html.RenderBeginTag( HtmlTag.Img ); + html.RenderEndTag(); + + html.RenderEndTag(); + html.RenderEndTag(); + + html.RenderEndTag(); + html.RenderEndTag(); + html.RenderEndTag(); + html.RenderEndTag(); + + bmp.Dispose(); + } + + private void RenderBarGraph( BarGraph graph, HtmlTextWriter html ) + { + BarGraphRenderer barGraph = new BarGraphRenderer( Color.White ); + + barGraph.RenderMode = graph.RenderMode; + + barGraph._regions = graph.Regions; + barGraph.SetTitles( graph.xTitle, null ); + + if ( graph.yTitle != null ) + barGraph.VerticalLabel = graph.yTitle; + + barGraph.FontColor = Color.Black; + barGraph.ShowData = ( graph.Interval == 1 ); + barGraph.VerticalTickCount = graph.Ticks; + + string[] labels = new string[graph.Items.Count]; + string[] values = new string[graph.Items.Count]; + + for ( int i = 0; i < graph.Items.Count; ++i ) + { + ChartItem item = graph.Items[i]; + + labels[i] = item.Name; + values[i] = item.Value.ToString(); + } + + barGraph._interval = graph.Interval; + barGraph.CollectDataPoints( labels, values ); + + Bitmap bmp = barGraph.Draw(); + + string fileName = graph.FileName + ".png"; + bmp.Save( Path.Combine( m_OutputDirectory, fileName ), ImageFormat.Png ); + + html.Write( "" ); + + html.AddAttribute( HtmlAttr.Cellpadding, "0" ); + html.AddAttribute( HtmlAttr.Cellspacing, "0" ); + html.AddAttribute( HtmlAttr.Border, "0" ); + html.RenderBeginTag( HtmlTag.Table ); + + html.RenderBeginTag( HtmlTag.Tr ); + html.AddAttribute( HtmlAttr.Class, "tbl-border" ); + html.RenderBeginTag( HtmlTag.Td ); + + html.AddAttribute( HtmlAttr.Width, "100%" ); + html.AddAttribute( HtmlAttr.Cellpadding, "4" ); + html.AddAttribute( HtmlAttr.Cellspacing, "1" ); + html.RenderBeginTag( HtmlTag.Table ); + + html.RenderBeginTag( HtmlTag.Tr ); + + html.AddAttribute( HtmlAttr.Colspan, "10" ); + html.AddAttribute( HtmlAttr.Width, "100%" ); + html.AddAttribute( HtmlAttr.Align, "center" ); + html.AddAttribute( HtmlAttr.Class, "header" ); + html.RenderBeginTag( HtmlTag.Td ); + html.Write( graph.Name ); + html.RenderEndTag(); + html.RenderEndTag(); + + html.RenderBeginTag( HtmlTag.Tr ); + + html.AddAttribute( HtmlAttr.Colspan, "10" ); + html.AddAttribute( HtmlAttr.Width, "100%" ); + html.AddAttribute( HtmlAttr.Align, "center" ); + html.AddAttribute( HtmlAttr.Class, "entry" ); + html.RenderBeginTag( HtmlTag.Td ); + + html.AddAttribute( HtmlAttr.Width, bmp.Width.ToString() ); + html.AddAttribute( HtmlAttr.Height, bmp.Height.ToString() ); + html.AddAttribute( HtmlAttr.Src, fileName ); + html.RenderBeginTag( HtmlTag.Img ); + html.RenderEndTag(); + + html.RenderEndTag(); + html.RenderEndTag(); + + html.RenderEndTag(); + html.RenderEndTag(); + html.RenderEndTag(); + html.RenderEndTag(); + + bmp.Dispose(); + } + + private void RenderReport( Report report, HtmlTextWriter html ) + { + html.AddAttribute( HtmlAttr.Width, report.Width ); + html.AddAttribute( HtmlAttr.Cellpadding, "0" ); + html.AddAttribute( HtmlAttr.Cellspacing, "0" ); + html.AddAttribute( HtmlAttr.Border, "0" ); + html.RenderBeginTag( HtmlTag.Table ); + + html.RenderBeginTag( HtmlTag.Tr ); + html.AddAttribute( HtmlAttr.Class, "tbl-border" ); + html.RenderBeginTag( HtmlTag.Td ); + + html.AddAttribute( HtmlAttr.Width, "100%" ); + html.AddAttribute( HtmlAttr.Cellpadding, "4" ); + html.AddAttribute( HtmlAttr.Cellspacing, "1" ); + html.RenderBeginTag( HtmlTag.Table ); + + html.RenderBeginTag( HtmlTag.Tr ); + html.AddAttribute( HtmlAttr.Colspan, "10" ); + html.AddAttribute( HtmlAttr.Width, "100%" ); + html.AddAttribute( HtmlAttr.Align, "center" ); + html.AddAttribute( HtmlAttr.Class, "header" ); + html.RenderBeginTag( HtmlTag.Td ); + html.Write( report.Name ); + html.RenderEndTag(); + html.RenderEndTag(); + + bool isNamed = false; + + for ( int i = 0; i < report.Columns.Count && !isNamed; ++i ) + isNamed = ( report.Columns[i].Name != null ); + + if ( isNamed ) + { + html.RenderBeginTag( HtmlTag.Tr ); + + for ( int i = 0; i < report.Columns.Count; ++i ) + { + ReportColumn column = report.Columns[i]; + + html.AddAttribute( HtmlAttr.Class, "header" ); + html.AddAttribute( HtmlAttr.Width, column.Width ); + html.AddAttribute( HtmlAttr.Align, column.Align ); + html.RenderBeginTag( HtmlTag.Td ); + + html.Write( column.Name ); + + html.RenderEndTag(); + } + + html.RenderEndTag(); + } + + for ( int i = 0; i < report.Items.Count; ++i ) + { + ReportItem item = report.Items[i]; + + html.RenderBeginTag( HtmlTag.Tr ); + + for ( int j = 0; j < item.Values.Count; ++j ) + { + if ( !isNamed && j == 0 ) + html.AddAttribute( HtmlAttr.Width, report.Columns[j].Width ); + + html.AddAttribute( HtmlAttr.Align, report.Columns[j].Align ); + html.AddAttribute( HtmlAttr.Class, "entry" ); + html.RenderBeginTag( HtmlTag.Td ); + + if ( item.Values[j].Format == null ) + html.Write( item.Values[j].Value ); + else + html.Write( int.Parse( item.Values[j].Value ).ToString( item.Values[j].Format ) ); + + html.RenderEndTag(); + } + + html.RenderEndTag(); + } + + html.RenderEndTag(); + html.RenderEndTag(); + html.RenderEndTag(); + html.RenderEndTag(); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Rendering/PieChartRenderer.cs b/Scripts/Engines/Reports/Rendering/PieChartRenderer.cs new file mode 100644 index 0000000..5cd0e0f --- /dev/null +++ b/Scripts/Engines/Reports/Rendering/PieChartRenderer.cs @@ -0,0 +1,252 @@ +using System; +using System.Collections; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; + +namespace Server.Engines.Reports +{ + // Modified from MS sample + + //********************************************************************* + // + // PieChart Class + // + // This class uses GDI+ to render Pie Chart. + // + //********************************************************************* + + public class PieChartRenderer : ChartRenderer + { + private const int _bufferSpace = 125; + private ArrayList _chartItems; + private int _perimeter; + private Color _backgroundColor; + private Color _borderColor; + private float _total; + private int _legendWidth; + private int _legendHeight; + private int _legendFontHeight; + private string _legendFontStyle; + private float _legendFontSize; + private bool _showPercents; + + public bool ShowPercents{ get{ return _showPercents; } set{ _showPercents = value; } } + + public PieChartRenderer() + { + _chartItems = new ArrayList(); + _perimeter = 250; + _backgroundColor = Color.White; + _borderColor = Color.FromArgb(63,63,63); + _legendFontSize = 8; + _legendFontStyle = "Verdana"; + } + + public PieChartRenderer(Color bgColor) + { + _chartItems = new ArrayList(); + _perimeter = 250; + _backgroundColor = bgColor; + _borderColor = Color.FromArgb(63,63,63); + _legendFontSize = 8; + _legendFontStyle = "Verdana"; + } + + //********************************************************************* + // + // This method collects all data points and calculate all the necessary dimensions + // to draw the chart. It is the first method called before invoking the Draw() method. + // + //********************************************************************* + + public void CollectDataPoints(string[] xValues, string[] yValues) + { + _total = 0.0f; + + for (int i = 0;i < xValues.Length;i++) + { + float ftemp = Convert.ToSingle(yValues[i]); + _chartItems.Add(new DataItem(xValues[i], xValues.ToString(), ftemp, 0, 0, Color.AliceBlue)); + _total += ftemp; + } + + float nextStartPos = 0.0f; + int counter = 0; + foreach (DataItem item in _chartItems) + { + item.StartPos = nextStartPos; + item.SweepSize = item.Value / _total * 360; + nextStartPos = item.StartPos + item.SweepSize; + item.ItemColor = GetColor(counter++); + } + + CalculateLegendWidthHeight(); + } + + //********************************************************************* + // + // This method returns a bitmap to the calling function. This is the method + // that actually draws the pie chart and the legend with it. + // + //********************************************************************* + + public override Bitmap Draw() + { + int perimeter = _perimeter; + Rectangle pieRect = new Rectangle(0, 0, perimeter, perimeter-1); + Bitmap bmp = new Bitmap(perimeter + _legendWidth, perimeter); + Font fnt = null; + Pen pen = null; + Graphics grp = null; + StringFormat sf = null, sfp = null; + + try + { + grp = Graphics.FromImage(bmp); + grp.CompositingQuality = CompositingQuality.HighQuality; + grp.SmoothingMode = SmoothingMode.AntiAlias; + sf = new StringFormat(); + + //Paint Back ground + using ( SolidBrush brsh = new SolidBrush( _backgroundColor ) ) + grp.FillRectangle(brsh, -1, -1, perimeter + _legendWidth+1, perimeter+1); + + //Align text to the right + sf.Alignment = StringAlignment.Far; + + //Draw all wedges and legends + for(int i=0; i<_chartItems.Count; i++) + { + DataItem item = (DataItem) _chartItems[i]; + SolidBrush brs = null; + try + { + brs = new SolidBrush(item.ItemColor); + grp.FillPie(brs, pieRect, item.StartPos, item.SweepSize); + + //grp.DrawPie(new Pen(_borderColor,1.2f),pieRect,item.StartPos,item.SweepSize); + + if ( fnt == null ) + fnt = new Font( _legendFontStyle, _legendFontSize ); + + if ( _showPercents && item.SweepSize > 10 ) + { + if ( sfp == null ) + { + sfp = new StringFormat(); + sfp.Alignment = StringAlignment.Center; + sfp.LineAlignment = StringAlignment.Center; + } + + float perc = (item.SweepSize * 100.0f) / 360.0f; + string percString = String.Format( "{0:F0}%", perc ); + + float px = pieRect.X+(pieRect.Width/2); + float py = pieRect.Y+(pieRect.Height/2); + + double angle = item.StartPos + (item.SweepSize/2); + double rads = (angle/180.0)*Math.PI; + + px += (float)(Math.Cos( rads ) * perimeter / 3); + py += (float)(Math.Sin( rads ) * perimeter / 3); + + grp.DrawString( percString, fnt, Brushes.Gray, + new RectangleF( px - 30 - 1, py - 20, 60, 40 ), sfp ); + + grp.DrawString( percString, fnt, Brushes.Gray, + new RectangleF( px - 30 + 1, py - 20, 60, 40 ), sfp ); + + grp.DrawString( percString, fnt, Brushes.Gray, + new RectangleF( px - 30, py - 20 - 1, 60, 40 ), sfp ); + + grp.DrawString( percString, fnt, Brushes.Gray, + new RectangleF( px - 30, py - 20 + 1, 60, 40 ), sfp ); + + + grp.DrawString( percString, fnt, Brushes.White, + new RectangleF( px - 30, py - 20, 60, 40 ), sfp ); + } + + if ( pen == null ) + pen = new Pen( _borderColor, 0.5f ); + + grp.FillRectangle(brs, perimeter + _bufferSpace, i * _legendFontHeight + 15, 10, 10); + grp.DrawRectangle(pen, perimeter + _bufferSpace, i * _legendFontHeight + 15, 10, 10); + + grp.DrawString(item.Label, fnt, + Brushes.Black, perimeter + _bufferSpace + 20, i * _legendFontHeight + 13); + + grp.DrawString(item.Value.ToString("#,###.##"), fnt, + Brushes.Black, perimeter + _bufferSpace + 200, i * _legendFontHeight + 13,sf); + } + finally + { + if (brs !=null) + brs.Dispose(); + } + } + + for(int i=0; i<_chartItems.Count; i++) + { + DataItem item = (DataItem) _chartItems[i]; + SolidBrush brs = null; + try + { + grp.DrawPie(new Pen(_borderColor,0.5f),pieRect,item.StartPos,item.SweepSize); + } + finally + { + if (brs !=null) + brs.Dispose(); + } + } + + //draws the border around Pie + using ( Pen pen2 = new Pen( _borderColor, 2 ) ) + grp.DrawEllipse(pen2, pieRect); + + //draw border around legend + using ( Pen pen1 = new Pen( _borderColor, 1 ) ) + grp.DrawRectangle(pen1, perimeter + _bufferSpace - 10, 10, 220, _chartItems.Count * _legendFontHeight + 25); + + //Draw Total under legend + using ( Font fntb = new Font( _legendFontStyle, _legendFontSize, FontStyle.Bold ) ) + { + grp.DrawString("Total", fntb, + Brushes.Black, perimeter + _bufferSpace + 30, (_chartItems.Count+1) * _legendFontHeight,sf); + grp.DrawString(_total.ToString("#,###.##"), fntb, + Brushes.Black, perimeter + _bufferSpace + 200, (_chartItems.Count+1) * _legendFontHeight,sf); + } + + grp.SmoothingMode = SmoothingMode.AntiAlias; + } + finally + { + if (sf != null) sf.Dispose(); + if (grp != null) grp.Dispose(); + if (sfp != null) sfp.Dispose(); + if (fnt != null) fnt.Dispose(); + if (pen != null) pen.Dispose(); + } + return bmp; + } + + //********************************************************************* + // + // This method calculates the space required to draw the chart legend. + // + //********************************************************************* + + private void CalculateLegendWidthHeight() + { + Font fontLegend = new Font(_legendFontStyle, _legendFontSize); + _legendFontHeight = fontLegend.Height+3; + _legendHeight = fontLegend.Height * (_chartItems.Count + 1); + if (_legendHeight > _perimeter) _perimeter = _legendHeight; + + _legendWidth = _perimeter + _bufferSpace; + fontLegend.Dispose(); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Reports/Reports.cs b/Scripts/Engines/Reports/Reports.cs new file mode 100644 index 0000000..96d1fc7 --- /dev/null +++ b/Scripts/Engines/Reports/Reports.cs @@ -0,0 +1,230 @@ +using System; +using System.Threading; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Network; +using Server.Accounting; + +namespace Server.Engines.Reports +{ + public class Reports + { + public static bool Enabled = false; + + public static void Initialize() + { + if ( !Enabled ) + return; + + m_StatsHistory = new SnapshotHistory(); + m_StatsHistory.Load(); + + m_StaffHistory = new StaffHistory(); + m_StaffHistory.Load(); + + DateTime now = DateTime.Now; + + DateTime date = now.Date; + TimeSpan timeOfDay = now.TimeOfDay; + + m_GenerateTime = date + TimeSpan.FromHours( Math.Ceiling( timeOfDay.TotalHours ) ); + + Timer.DelayCall( TimeSpan.FromMinutes( 0.5 ), TimeSpan.FromMinutes( 0.5 ), new TimerCallback( CheckRegenerate ) ); + } + + private static DateTime m_GenerateTime; + + public static void CheckRegenerate() + { + if ( DateTime.Now < m_GenerateTime ) + return; + + Generate(); + m_GenerateTime += TimeSpan.FromHours( 1.0 ); + } + + private static SnapshotHistory m_StatsHistory; + private static StaffHistory m_StaffHistory; + + public static StaffHistory StaffHistory{ get{ return m_StaffHistory; } } + + public static void Generate() + { + Snapshot ss = new Snapshot(); + + ss.TimeStamp = DateTime.Now; + + FillSnapshot( ss ); + + m_StatsHistory.Snapshots.Add( ss ); + m_StaffHistory.QueueStats.Add( new QueueStatus( Engines.Help.PageQueue.List.Count ) ); + + ThreadPool.QueueUserWorkItem( new WaitCallback( UpdateOutput ), ss ); + } + + private static void UpdateOutput( object state ) + { + m_StatsHistory.Save(); + m_StaffHistory.Save(); + + HtmlRenderer renderer = new HtmlRenderer( "stats", (Snapshot) state, m_StatsHistory ); + renderer.Render(); + renderer.Upload(); + + renderer = new HtmlRenderer( "staff", m_StaffHistory ); + renderer.Render(); + renderer.Upload(); + } + + public static void FillSnapshot( Snapshot ss ) + { + ss.Children.Add( CompileGeneralStats() ); + ss.Children.Add( CompileStatChart() ); + + PersistableObject[] obs = CompileSkillReports(); + + for ( int i = 0; i < obs.Length; ++i ) + ss.Children.Add( obs[i] ); + + for ( int i = 0; i < obs.Length; ++i ) + ss.Children.Add( obs[i] ); + } + + public static Report CompileGeneralStats() + { + Report report = new Report( "General Stats", "200" ); + + report.Columns.Add( "50%", "left" ); + report.Columns.Add( "50%", "left" ); + + int npcs = 0, players = 0; + + foreach ( Mobile mob in World.Mobiles.Values ) + { + if ( mob.Player ) + ++players; + else + ++npcs; + } + + report.Items.Add( "NPCs", npcs, "N0" ); + report.Items.Add( "Players", players, "N0" ); + report.Items.Add( "Clients", NetState.Instances.Count, "N0" ); + report.Items.Add( "Accounts", Accounts.Count, "N0" ); + report.Items.Add( "Items", World.Items.Count, "N0" ); + + return report; + } + + public static Chart CompileStatChart() + { + PieChart chart = new PieChart( "Stat Distribution", "graphs_strdexint_distrib", true ); + + ChartItem strItem = new ChartItem( "Strength", 0 ); + ChartItem dexItem = new ChartItem( "Dexterity", 0 ); + ChartItem intItem = new ChartItem( "Intelligence", 0 ); + + foreach ( Mobile mob in World.Mobiles.Values ) + { + if ( mob.RawStatTotal == mob.StatCap && mob is PlayerMobile ) + { + strItem.Value += mob.RawStr; + dexItem.Value += mob.RawDex; + intItem.Value += mob.RawInt; + } + } + + chart.Items.Add( strItem ); + chart.Items.Add( dexItem ); + chart.Items.Add( intItem ); + + return chart; + } + + public class SkillDistribution : IComparable + { + public SkillInfo m_Skill; + public int m_NumberOfGMs; + + public SkillDistribution( SkillInfo skill ) + { + m_Skill = skill; + } + + public int CompareTo( object obj ) + { + return ( ((SkillDistribution)obj).m_NumberOfGMs - m_NumberOfGMs ); + } + } + + public static SkillDistribution[] GetSkillDistribution() + { + int skip = 0; + + SkillDistribution[] distribs = new SkillDistribution[SkillInfo.Table.Length - skip]; + + for ( int i = 0; i < distribs.Length; ++i ) + distribs[i] = new SkillDistribution( SkillInfo.Table[i] ); + + foreach ( Mobile mob in World.Mobiles.Values ) + { + if ( mob.SkillsTotal >= 1500 && mob.SkillsTotal <= 7200 && mob is PlayerMobile ) + { + Skills skills = mob.Skills; + + for ( int i = 0; i < skills.Length - skip; ++i ) + { + Skill skill = skills[i]; + + if ( skill.BaseFixedPoint >= 1000 ) + distribs[i].m_NumberOfGMs++; + } + } + } + + return distribs; + } + + public static PersistableObject[] CompileSkillReports() + { + SkillDistribution[] distribs = GetSkillDistribution(); + + Array.Sort( distribs ); + + return new PersistableObject[]{ CompileSkillChart( distribs ), CompileSkillReport( distribs ) }; + } + + public static Report CompileSkillReport( SkillDistribution[] distribs ) + { + Report report = new Report( "Skill Report", "300" ); + + report.Columns.Add( "70%", "left", "Name" ); + report.Columns.Add( "30%", "center", "GMs" ); + + for ( int i = 0; i < distribs.Length; ++i ) + report.Items.Add( distribs[i].m_Skill.Name, distribs[i].m_NumberOfGMs, "N0" ); + + return report; + } + + public static Chart CompileSkillChart( SkillDistribution[] distribs ) + { + PieChart chart = new PieChart( "GM Skill Distribution", "graphs_skill_distrib", true ); + + for ( int i = 0; i < 12; ++i ) + chart.Items.Add( distribs[i].m_Skill.Name, distribs[i].m_NumberOfGMs ); + + int rem = 0; + + for ( int i = 12; i < distribs.Length; ++i ) + rem += distribs[i].m_NumberOfGMs; + + chart.Items.Add( "Other", rem ); + + return chart; + } + } +} diff --git a/Scripts/Engines/Spawner/PSCount.cs b/Scripts/Engines/Spawner/PSCount.cs new file mode 100644 index 0000000..1eb4b1d --- /dev/null +++ b/Scripts/Engines/Spawner/PSCount.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using Server; +using System.Text; +using System.Collections.Generic; +using System.Net; +using Server.Mobiles; +using Server.Network; +using Server.Commands; + +namespace Server.Commands +{ + public class PSpawnerCount + { + public static void Initialize() + { + Register( "pscount", AccessLevel.Administrator, new CommandEventHandler( Clearall_OnCommand ) ); + } + + public static void Register( string command, AccessLevel access, CommandEventHandler handler ) + { + CommandSystem.Register( command, access, handler ); + } + + [Usage( "pscount" )] + [Description( "Count PremiumSpawners." )] + public static void Clearall_OnCommand( CommandEventArgs e ) + { + Mobile from = e.Mobile; + DateTime time = DateTime.Now; + + List pspawnerlist = new List(); + + foreach ( Item pspawner in World.Items.Values ) + { + if ( pspawner.Parent == null && pspawner is PremiumSpawner) + { + pspawnerlist.Add( pspawner ); + } + } + + from.SendMessage( "Premium Spawners: {0}", pspawnerlist.Count ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/PremiumSpawner.cs b/Scripts/Engines/Spawner/PremiumSpawner.cs new file mode 100644 index 0000000..ae7a979 --- /dev/null +++ b/Scripts/Engines/Spawner/PremiumSpawner.cs @@ -0,0 +1,1912 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using Server; +using Server.Commands; +using Server.Regions; +using Server.Items; +using Server.Network; +using Server.Misc; +using CPA = Server.CommandPropertyAttribute; + +namespace Server.Mobiles +{ + public class PremiumSpawner : Item + { + private int m_Team; + private int m_HomeRange; // = old SpawnRange + private int m_WalkingRange = -1; // = old HomeRange + private int m_SpawnID = 1; + private int m_Count; + private int m_CountA; + private int m_CountB; + private int m_CountC; + private int m_CountD; + private int m_CountE; + private TimeSpan m_MinDelay; + private TimeSpan m_MaxDelay; + private List m_CreaturesName; // creatures to be spawned + private List m_Creatures; // spawned creatures + private List m_CreaturesNameA; + private List m_CreaturesA; + private List m_CreaturesNameB; + private List m_CreaturesB; + private List m_CreaturesNameC; + private List m_CreaturesC; + private List m_CreaturesNameD; + private List m_CreaturesD; + private List m_CreaturesNameE; + private List m_CreaturesE; + private DateTime m_End; + private InternalTimer m_Timer; + private bool m_Running; + private bool m_Water; + private bool m_Group; + private WayPoint m_WayPoint; + private Map m_Land; + private Point3D m_Spot; + + public bool IsFull{ get{ return ( m_Creatures != null && m_Creatures.Count >= m_Count ); } } + public bool IsFulla{ get{ return ( m_CreaturesA != null && m_CreaturesA.Count >= m_CountA ); } } + public bool IsFullb{ get{ return ( m_CreaturesB != null && m_CreaturesB.Count >= m_CountB ); } } + public bool IsFullc{ get{ return ( m_CreaturesC != null && m_CreaturesC.Count >= m_CountC ); } } + public bool IsFulld{ get{ return ( m_CreaturesD != null && m_CreaturesD.Count >= m_CountD ); } } + public bool IsFulle{ get{ return ( m_CreaturesE != null && m_CreaturesE.Count >= m_CountE ); } } + + public List CreaturesName + { + get { return m_CreaturesName; } + set + { + m_CreaturesName = value; + if ( m_CreaturesName.Count < 1 ) + Stop(); + + InvalidateProperties(); + } + } + + public List SubSpawnerA + { + get { return m_CreaturesNameA; } + set + { + m_CreaturesNameA = value; + if ( m_CreaturesNameA.Count < 1 ) + Stop(); + + InvalidateProperties(); + } + } + + public List SubSpawnerB + { + get { return m_CreaturesNameB; } + set + { + m_CreaturesNameB = value; + if ( m_CreaturesNameB.Count < 1 ) + Stop(); + + InvalidateProperties(); + } + } + + public List SubSpawnerC + { + get { return m_CreaturesNameC; } + set + { + m_CreaturesNameC = value; + if ( m_CreaturesNameC.Count < 1 ) + Stop(); + + InvalidateProperties(); + } + } + + public List SubSpawnerD + { + get { return m_CreaturesNameD; } + set + { + m_CreaturesNameD = value; + if ( m_CreaturesNameD.Count < 1 ) + Stop(); + + InvalidateProperties(); + } + } + + public List SubSpawnerE + { + get { return m_CreaturesNameE; } + set + { + m_CreaturesNameE = value; + if ( m_CreaturesNameE.Count < 1 ) + Stop(); + + InvalidateProperties(); + } + } + + public virtual int CreaturesNameCount { get { return m_CreaturesName.Count; } } + public virtual int CreaturesNameCountA { get { return m_CreaturesNameA.Count; } } + public virtual int CreaturesNameCountB { get { return m_CreaturesNameB.Count; } } + public virtual int CreaturesNameCountC { get { return m_CreaturesNameC.Count; } } + public virtual int CreaturesNameCountD { get { return m_CreaturesNameD.Count; } } + public virtual int CreaturesNameCountE { get { return m_CreaturesNameE.Count; } } + + public override void OnAfterDuped( Item newItem ) + { + PremiumSpawner s = newItem as PremiumSpawner; + + if ( s == null ) + return; + + s.m_CreaturesName = new List( m_CreaturesName ); + s.m_CreaturesNameA = new List( m_CreaturesNameA ); + s.m_CreaturesNameB = new List( m_CreaturesNameB ); + s.m_CreaturesNameC = new List( m_CreaturesNameC ); + s.m_CreaturesNameD = new List( m_CreaturesNameD ); + s.m_CreaturesNameE = new List( m_CreaturesNameE ); + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Count + { + get { return m_Count; } + set { m_Count = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CountA + { + get { return m_CountA; } + set { m_CountA = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CountB + { + get { return m_CountB; } + set { m_CountB = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CountC + { + get { return m_CountC; } + set { m_CountC = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CountD + { + get { return m_CountD; } + set { m_CountD = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CountE + { + get { return m_CountE; } + set { m_CountE = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public WayPoint WayPoint + { + get + { + return m_WayPoint; + } + set + { + m_WayPoint = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Map Land + { + get + { + return m_Land; + } + set + { + m_Land = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Spot + { + get + { + return m_Spot; + } + set + { + m_Spot = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Running + { + get { return m_Running; } + set + { + if ( value ) + Start(); + else + Stop(); + + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int HomeRange + { + get { return m_HomeRange; } + set { m_HomeRange = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int WalkingRange + { + get { return m_WalkingRange; } + set { m_WalkingRange = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int SpawnID + { + get { return m_SpawnID; } + set { m_SpawnID = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Team + { + get { return m_Team; } + set { m_Team = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan MinDelay + { + get { return m_MinDelay; } + set { m_MinDelay = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan MaxDelay + { + get { return m_MaxDelay; } + set { m_MaxDelay = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan NextSpawn + { + get + { + if ( m_Running ) + return m_End - DateTime.Now; + else + return TimeSpan.FromSeconds( 0 ); + } + set + { + Start(); + DoTimer( value ); + } + } + + public static void DropSpawner( Mobile m ) + { + if ( m.FindItemOnLayer( Layer.Talisman ) != null && m is BaseCreature ) + { + Item item = m.FindItemOnLayer( Layer.Talisman ); + + if ( item is PremiumSpawner ) + { + PremiumSpawner spawner = (PremiumSpawner)item; + spawner.MoveToWorld(spawner.Spot, spawner.Land); + spawner.Running = true; + } + } + } + + public void SingleSpawner( Mobile m ) + { + if ( m.FindItemOnLayer( Layer.Talisman ) == null && m is BaseCreature && ( this.Count + this.CountA + this.CountB + this.CountC + this.CountD + this.CountE ) == 1 ) + { + m.AddItem( this ); + this.Running = false; + } + } + + public bool SpawnerEquipped() + { + if ( ParentEntity is Mobile ) + return true; + + return false; + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Group + { + get { return m_Group; } + set { m_Group = value; InvalidateProperties(); } + } + + [Constructable] + public PremiumSpawner( int amount, int subamountA, int subamountB, int subamountC, int subamountD, int subamountE, int spawnid, int minDelay, int maxDelay, int team, int homeRange, int walkingRange, string creatureName, string creatureNameA, string creatureNameB, string creatureNameC, string creatureNameD, string creatureNameE ) : base( 0x08AB ) + { + List creaturesName = new List(); + creaturesName.Add( creatureName ); + + List creatureNameAA = new List(); + creaturesName.Add( creatureNameA ); + + List creatureNameBB = new List(); + creaturesName.Add( creatureNameB ); + + List creatureNameCC = new List(); + creaturesName.Add( creatureNameC ); + + List creatureNameDD = new List(); + creaturesName.Add( creatureNameD ); + + List creatureNameEE = new List(); + creaturesName.Add( creatureNameE ); + + InitSpawn( amount, subamountA, subamountB, subamountC, subamountD, subamountE, spawnid, TimeSpan.FromMinutes( minDelay ), TimeSpan.FromMinutes( maxDelay ), team, homeRange, walkingRange, creaturesName, creatureNameAA, creatureNameBB, creatureNameCC, creatureNameDD, creatureNameEE ); + + Weight = -2.0; + } + + [Constructable] + public PremiumSpawner( string creatureName ) : base( 0x08AB ) + { + List creaturesName = new List(); + creaturesName.Add( creatureName ); + + List creatureNameAA = new List(); + List creatureNameBB = new List(); + List creatureNameCC = new List(); + List creatureNameDD = new List(); + List creatureNameEE = new List(); + + InitSpawn( 1, 0, 0, 0, 0, 0, 1, TimeSpan.FromMinutes( 5 ), TimeSpan.FromMinutes( 10 ), 0, 4, -1, creaturesName, creatureNameAA, creatureNameBB, creatureNameCC, creatureNameDD, creatureNameEE ); + + Weight = -2.0; + } + + [Constructable] + public PremiumSpawner() : base( 0x08AB ) + { + List creaturesName = new List(); + + List creatureNameAA = new List(); + List creatureNameBB = new List(); + List creatureNameCC = new List(); + List creatureNameDD = new List(); + List creatureNameEE = new List(); + + InitSpawn( 1, 0, 0, 0, 0, 0, 1, TimeSpan.FromMinutes( 5 ), TimeSpan.FromMinutes( 10 ), 0, 4, -1, creaturesName, creatureNameAA, creatureNameBB, creatureNameCC, creatureNameDD, creatureNameEE ); + + Weight = -2.0; + } + + public PremiumSpawner( int amount, int subamountA, int subamountB, int subamountC, int subamountD, int subamountE, int spawnid, TimeSpan minDelay, TimeSpan maxDelay, int team, int homeRange, int walkingRange, List creaturesName, List creatureNameAA, List creatureNameBB, List creatureNameCC, List creatureNameDD, List creatureNameEE ) + : base( 0x08AB ) + { + InitSpawn( amount, subamountA, subamountB, subamountC, subamountD, subamountE, spawnid, minDelay, maxDelay, team, homeRange, walkingRange, creaturesName, creatureNameAA, creatureNameBB, creatureNameCC, creatureNameDD, creatureNameEE ); + + Weight = -2.0; + } + + public override string DefaultName + { + get { return "PremiumSpawner"; } + } + + public void InitSpawn( int amount, int subamountA, int subamountB, int subamountC, int subamountD, int subamountE, int SpawnID, TimeSpan minDelay, TimeSpan maxDelay, int team, int homeRange, int walkingRange, List creaturesName, List creatureNameAA, List creatureNameBB, List creatureNameCC, List creatureNameDD, List creatureNameEE ) + { + Name = "PremiumSpawner"; + m_SpawnID = SpawnID; + Visible = false; + Movable = false; + m_Running = true; + m_Water = false; + m_Group = false; + m_MinDelay = minDelay; + m_MaxDelay = maxDelay; + m_Count = amount; + m_CountA = subamountA; + m_CountB = subamountB; + m_CountC = subamountC; + m_CountD = subamountD; + m_CountE = subamountE; + m_Team = team; + m_HomeRange = homeRange; + m_WalkingRange = walkingRange; + m_CreaturesName = creaturesName; + m_CreaturesNameA = creatureNameAA; + m_CreaturesNameB = creatureNameBB; + m_CreaturesNameC = creatureNameCC; + m_CreaturesNameD = creatureNameDD; + m_CreaturesNameE = creatureNameEE; + m_Creatures = new List(); + m_CreaturesA = new List(); + m_CreaturesB = new List(); + m_CreaturesC = new List(); + m_CreaturesD = new List(); + m_CreaturesE = new List(); + DoTimer( TimeSpan.FromSeconds( 1 ) ); + } + + public PremiumSpawner( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel < AccessLevel.GameMaster ) + return; + + PremiumSpawnerGump g = new PremiumSpawnerGump( this ); + from.SendGump( g ); + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Running ) + { + list.Add( 1060742 ); // active + + list.Add( 1060656, m_Count.ToString() ); + list.Add( 1061169, m_HomeRange.ToString() ); + list.Add( 1060658, "walking range\t{0}", m_WalkingRange ); + + list.Add( 1060663, "SpawnID\t{0}", m_SpawnID.ToString() ); + +// list.Add( 1060659, "group\t{0}", m_Group ); +// list.Add( 1060660, "team\t{0}", m_Team ); + list.Add( 1060661, "speed\t{0} to {1}", m_MinDelay, m_MaxDelay ); + + for ( int i = 0; i < 2 && i < m_CreaturesName.Count; ++i ) + list.Add( 1060662 + i, "{0}\t{1}", m_CreaturesName[i], CountCreatures( m_CreaturesName[i] ) ); + } + else + { + list.Add( 1060743 ); // inactive + } + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( m_Running ) + LabelTo( from, "[Running]" ); + else + LabelTo( from, "[Off]" ); + } + + public void SpawnWater() + { + } + + public void Start() + { + if ( SpawnerEquipped() ) + m_Running = false; + else if ( !m_Running ) + { + if ( m_CreaturesName.Count > 0 || m_CreaturesNameA.Count > 0 || m_CreaturesNameB.Count > 0 || m_CreaturesNameC.Count > 0 || m_CreaturesNameD.Count > 0 || m_CreaturesNameE.Count > 0 ) + { + m_Running = true; + DoTimer(); + } + } + } + + public void Stop() + { + if ( m_Running ) + { + m_Timer.Stop(); + m_Running = false; + } + } + + public static string ParseType( string s ) + { + return s.Split( null, 2 )[0]; + } + + public void Defrag() + { + bool removed = false; + + for ( int i = 0; i < m_Creatures.Count; ++i ) + { + IEntity e = m_Creatures[i]; + + if ( e is Item ) + { + Item item = (Item)e; + + if ( item.Deleted || item.Parent != null ) + { + m_Creatures.RemoveAt( i ); + --i; + removed = true; + } + } + else if ( e is Mobile ) + { + Mobile m = (Mobile)e; + + if ( m.Deleted ) + { + m_Creatures.RemoveAt( i ); + --i; + removed = true; + } + else if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + if ( bc.Controlled || bc.IsStabled ) + { + m_Creatures.RemoveAt( i ); + --i; + removed = true; + } + } + } + else + { + m_Creatures.RemoveAt( i ); + --i; + removed = true; + } + } + + for ( int i = 0; i < m_CreaturesA.Count; ++i ) + { + IEntity e = m_CreaturesA[i]; + + if ( e is Item ) + { + Item item = (Item)e; + + if ( item.Deleted || item.Parent != null ) + { + m_CreaturesA.RemoveAt( i ); + --i; + removed = true; + } + } + else if ( e is Mobile ) + { + Mobile m = (Mobile)e; + + if ( m.Deleted ) + { + m_CreaturesA.RemoveAt( i ); + --i; + removed = true; + } + else if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + if ( bc.Controlled || bc.IsStabled ) + { + m_CreaturesA.RemoveAt( i ); + --i; + removed = true; + } + } + } + else + { + m_CreaturesA.RemoveAt( i ); + --i; + removed = true; + } + } + + for ( int i = 0; i < m_CreaturesB.Count; ++i ) + { + IEntity e = m_CreaturesB[i]; + + if ( e is Item ) + { + Item item = (Item)e; + + if ( item.Deleted || item.Parent != null ) + { + m_CreaturesB.RemoveAt( i ); + --i; + removed = true; + } + } + else if ( e is Mobile ) + { + Mobile m = (Mobile)e; + + if ( m.Deleted ) + { + m_CreaturesB.RemoveAt( i ); + --i; + removed = true; + } + else if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + if ( bc.Controlled || bc.IsStabled ) + { + m_CreaturesB.RemoveAt( i ); + --i; + removed = true; + } + } + } + else + { + m_CreaturesB.RemoveAt( i ); + --i; + removed = true; + } + } + + for ( int i = 0; i < m_CreaturesC.Count; ++i ) + { + IEntity e = m_CreaturesC[i]; + + if ( e is Item ) + { + Item item = (Item)e; + + if ( item.Deleted || item.Parent != null ) + { + m_CreaturesC.RemoveAt( i ); + --i; + removed = true; + } + } + else if ( e is Mobile ) + { + Mobile m = (Mobile)e; + + if ( m.Deleted ) + { + m_CreaturesC.RemoveAt( i ); + --i; + removed = true; + } + else if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + if ( bc.Controlled || bc.IsStabled ) + { + m_CreaturesC.RemoveAt( i ); + --i; + removed = true; + } + } + } + else + { + m_CreaturesC.RemoveAt( i ); + --i; + removed = true; + } + } + + for ( int i = 0; i < m_CreaturesD.Count; ++i ) + { + IEntity e = m_CreaturesD[i]; + + if ( e is Item ) + { + Item item = (Item)e; + + if ( item.Deleted || item.Parent != null ) + { + m_CreaturesD.RemoveAt( i ); + --i; + removed = true; + } + } + else if ( e is Mobile ) + { + Mobile m = (Mobile)e; + + if ( m.Deleted ) + { + m_CreaturesD.RemoveAt( i ); + --i; + removed = true; + } + else if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + if ( bc.Controlled || bc.IsStabled ) + { + m_CreaturesD.RemoveAt( i ); + --i; + removed = true; + } + } + } + else + { + m_CreaturesD.RemoveAt( i ); + --i; + removed = true; + } + } + + for ( int i = 0; i < m_CreaturesE.Count; ++i ) + { + IEntity e = m_CreaturesE[i]; + + if ( e is Item ) + { + Item item = (Item)e; + + if ( item.Deleted || item.Parent != null ) + { + m_CreaturesE.RemoveAt( i ); + --i; + removed = true; + } + } + else if ( e is Mobile ) + { + Mobile m = (Mobile)e; + + if ( m.Deleted ) + { + m_CreaturesE.RemoveAt( i ); + --i; + removed = true; + } + else if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + if ( bc.Controlled || bc.IsStabled ) + { + m_CreaturesE.RemoveAt( i ); + --i; + removed = true; + } + } + } + else + { + m_CreaturesE.RemoveAt( i ); + --i; + removed = true; + } + } + + if ( removed ) + InvalidateProperties(); + } + + public void OnTick() + { + DoTimer(); + + if ( m_Group ) + { + Defrag(); + + if ( m_Creatures.Count == 0 || m_CreaturesA.Count == 0 || m_CreaturesB.Count == 0 || m_CreaturesC.Count == 0 || m_CreaturesD.Count == 0 || m_CreaturesE.Count == 0 ) + { + Respawn(); + } + else + { + return; + } + } + else + { + Spawn(CreaturesNameCount, m_Creatures, m_Count, m_CreaturesName); + Spawn(CreaturesNameCountA, m_CreaturesA, m_CountA, m_CreaturesNameA); + Spawn(CreaturesNameCountB, m_CreaturesB, m_CountB, m_CreaturesNameB); + Spawn(CreaturesNameCountC, m_CreaturesC, m_CountC, m_CreaturesNameC); + Spawn(CreaturesNameCountD, m_CreaturesD, m_CountD, m_CreaturesNameD); + Spawn(CreaturesNameCountE, m_CreaturesE, m_CountE, m_CreaturesNameE); + } + } + + public void Respawn() // remove all creatures and spawn all again + { + RemoveCreatures(m_Creatures); + RemoveCreatures(m_CreaturesA); + RemoveCreatures(m_CreaturesB); + RemoveCreatures(m_CreaturesC); + RemoveCreatures(m_CreaturesD); + RemoveCreatures(m_CreaturesE); + + for ( int i = 0; i < m_Count; i++ ) + Spawn(CreaturesNameCount, m_Creatures, m_Count, m_CreaturesName); + for ( int i = 0; i < m_CountA; i++ ) + Spawn(CreaturesNameCountA, m_CreaturesA, m_CountA, m_CreaturesNameA); + for ( int i = 0; i < m_CountB; i++ ) + Spawn(CreaturesNameCountB, m_CreaturesB, m_CountB, m_CreaturesNameB); + for ( int i = 0; i < m_CountC; i++ ) + Spawn(CreaturesNameCountC, m_CreaturesC, m_CountC, m_CreaturesNameC); + for ( int i = 0; i < m_CountD; i++ ) + Spawn(CreaturesNameCountD, m_CreaturesD, m_CountD, m_CreaturesNameD); + for ( int i = 0; i < m_CountE; i++ ) + Spawn(CreaturesNameCountE, m_CreaturesE, m_CountE, m_CreaturesNameE); + } + + public void Spawn( int CreatNameCount, List m_Creat, int m_Countt, List m_CreatName ) + { + if ( CreatNameCount > 0 ) + SpawnTwo( Utility.Random( CreatNameCount ), CreatNameCount, m_Creat, m_Countt, m_CreatName ); + + } + + // Spawn(string anystring) - all this works for PremiumSpawnerGump(line 422) and SpawnEditor(line 957) + // But this funcionality is broken in these scripts. + public void Spawn( string creatureName ) + { + for ( int i = 0; i < m_CreaturesName.Count; i++ ) + { + if ( m_CreaturesName[i] == creatureName ) + { + SpawnTwo( i, CreaturesNameCount, m_Creatures, m_Count, m_CreaturesName ); + break; + } + } + } + + public void SpawnA( string creatureNameA ) + { + for ( int i = 0; i < m_CreaturesNameA.Count; i++ ) + { + if ( (string)m_CreaturesNameA[i] == creatureNameA ) + { + SpawnTwo( i, CreaturesNameCountA, m_CreaturesA, m_CountA, m_CreaturesNameA ); + break; + } + } + } + + public void SpawnB( string creatureNameB ) + { + for ( int i = 0; i < m_CreaturesNameB.Count; i++ ) + { + if ( (string)m_CreaturesNameB[i] == creatureNameB ) + { + SpawnTwo( i, CreaturesNameCountB, m_CreaturesB, m_CountB, m_CreaturesNameB ); + break; + } + } + } + + public void SpawnC( string creatureNameC ) + { + for ( int i = 0; i < m_CreaturesNameC.Count; i++ ) + { + if ( (string)m_CreaturesNameC[i] == creatureNameC ) + { + SpawnTwo( i, CreaturesNameCountC, m_CreaturesC, m_CountC, m_CreaturesNameC ); + break; + } + } + } + + public void SpawnD( string creatureNameD ) + { + for ( int i = 0; i < m_CreaturesNameD.Count; i++ ) + { + if ( (string)m_CreaturesNameD[i] == creatureNameD ) + { + SpawnTwo( i, CreaturesNameCountD, m_CreaturesD, m_CountD, m_CreaturesNameD ); + break; + } + } + } + + public void SpawnE( string creatureNameE ) + { + for ( int i = 0; i < m_CreaturesNameE.Count; i++ ) + { + if ( (string)m_CreaturesNameE[i] == creatureNameE ) + { + SpawnTwo( i, CreaturesNameCountE, m_CreaturesE, m_CountE, m_CreaturesNameE ); + break; + } + } + } + + protected virtual IEntity CreateSpawnedObject( int index, List m_CreatName ) + { + if ( index >= m_CreatName.Count ) + return null; + + Type type = ScriptCompiler.FindTypeByName( ParseType( m_CreatName[index] ) ); + + if ( type != null ) + { + try + { + return Build( CommandSystem.Split( m_CreatName[index] ) ); + } + catch + { + } + } + + return null; + } + + public static IEntity Build( string[] args ) + { + string name = args[0]; + + Add.FixArgs( ref args ); + + string[,] props = null; + + for ( int i = 0; i < args.Length; ++i ) + { + if ( Insensitive.Equals( args[i], "set" ) ) + { + int remains = args.Length - i - 1; + + if ( remains >= 2 ) + { + props = new string[remains / 2, 2]; + + remains /= 2; + + for ( int j = 0; j < remains; ++j ) + { + props[j, 0] = args[i + (j * 2) + 1]; + props[j, 1] = args[i + (j * 2) + 2]; + } + + Add.FixSetString( ref args, i ); + } + + break; + } + } + + Type type = ScriptCompiler.FindTypeByName( name ); + + if ( !Add.IsEntity( type ) ) { + return null; + } + + PropertyInfo[] realProps = null; + + if ( props != null ) + { + realProps = new PropertyInfo[props.GetLength( 0 )]; + + PropertyInfo[] allProps = type.GetProperties( BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public ); + + for ( int i = 0; i < realProps.Length; ++i ) + { + PropertyInfo thisProp = null; + + string propName = props[i, 0]; + + for ( int j = 0; thisProp == null && j < allProps.Length; ++j ) + { + if ( Insensitive.Equals( propName, allProps[j].Name ) ) + thisProp = allProps[j]; + } + + if ( thisProp != null ) + { + CPA attr = Properties.GetCPA( thisProp ); + + if ( attr != null && AccessLevel.GameMaster >= attr.WriteLevel && thisProp.CanWrite && !attr.ReadOnly ) + realProps[i] = thisProp; + } + } + } + + ConstructorInfo[] ctors = type.GetConstructors(); + + for ( int i = 0; i < ctors.Length; ++i ) + { + ConstructorInfo ctor = ctors[i]; + + if ( !Add.IsConstructable( ctor, AccessLevel.GameMaster ) ) + continue; + + ParameterInfo[] paramList = ctor.GetParameters(); + + if ( args.Length == paramList.Length ) + { + object[] paramValues = Add.ParseValues( paramList, args ); + + if ( paramValues == null ) + continue; + + object built = ctor.Invoke( paramValues ); + + if ( built != null && realProps != null ) + { + for ( int j = 0; j < realProps.Length; ++j ) + { + if ( realProps[j] == null ) + continue; + + string result = Properties.InternalSetValue( built, realProps[j], props[j, 1] ); + } + } + + return (IEntity)built; + } + } + + return null; + } + + public void SpawnTwo( int index, int CreatNameCount, List m_Creat, int m_Countt, List m_CreatName ) + { + Map map = Map; + + if ( map == null || map == Map.Internal || CreatNameCount == 0 || index >= CreatNameCount || Parent != null ) + return; + + Defrag(); + + if ( m_Creat.Count >= m_Countt ) + return; + + + IEntity ent = CreateSpawnedObject( index, m_CreatName ); + + if ( ent is Mobile ) + { + Mobile m = (Mobile)ent; + + if ( m.CanSwim ) + { + m_Water = true; + } + else + { + m_Water = false; + } + + m_Creat.Add( m ); + + Point3D loc = ( m is BaseVendor ? this.Location : GetSpawnPosition() ); + + m.OnBeforeSpawn( loc, map ); + InvalidateProperties(); + + m.MoveToWorld( loc, map ); + + if ( m_SpawnID == 12345 ) + { + ((BaseCreature)m).SeaCreature = true; + loc = BaseRegion.GetOceanSpot(); + if ( loc.X == 100 && loc.Y == 100 ) + { + m.Delete(); + Defrag(); + return; + } + if ( !((BaseCreature)m).CantWalk ) + { + m.Warmode = false; + ((BaseCreature)m).CantWalk = true; + ((BaseCreature)m).CanSwim = false; + m.Hidden = true; + } + } + + m.MoveToWorld( loc, map ); + + if ( m is BaseCreature ) + { + BaseCreature c = (BaseCreature)m; + + if( m_WalkingRange >= 0 ) + c.RangeHome = m_WalkingRange; + else + c.RangeHome = m_HomeRange; + + c.CurrentWayPoint = m_WayPoint; + + if ( m_Team > 0 ) + c.Team = m_Team; + + c.Home = this.Location; + + if ( Region.Find( this.Location, this.Map ) != Region.Find( m.Location, m.Map ) ){ m.Delete(); Defrag(); return; } // REMOVE IF NOT IN SAME REGION + } + + m.OnAfterSpawn(); + + if ( m != null ) + SingleSpawner( m ); + } + else if ( ent is Item ) + { + Item item = (Item)ent; + + m_Creat.Add( item ); + + Point3D loc = GetSpawnPosition(); + + item.OnBeforeSpawn( loc, map ); + InvalidateProperties(); + + if ( m_SpawnID == 12345 ) + { + loc = BaseRegion.GetOceanSpot(); + if ( loc.X == 100 && loc.Y == 100 ) + { + item.Delete(); + Defrag(); + return; + } + } + + item.MoveToWorld( loc, map ); + + if ( Region.Find( this.Location, this.Map ) != Region.Find( item.Location, item.Map ) ){ item.Delete(); Defrag(); return; } // REMOVE IF NOT IN SAME REGION + + item.OnAfterSpawn(); + } + } + + public Point3D GetSpawnPosition() + { + Map map = Map; + + if ( map == null ) + return Location; + + // Try 10 times to find a Spawnable location. + for ( int i = 0; i < 10; i++ ) + { + int x, y; + + if ( m_HomeRange > 0 ) { + x = Location.X + (Utility.Random( (m_HomeRange * 2) + 1 ) - m_HomeRange); + y = Location.Y + (Utility.Random( (m_HomeRange * 2) + 1 ) - m_HomeRange); + } else { + x = Location.X; + y = Location.Y; + } + + int z = Map.GetAverageZ( x, y ); + + if ( m_Water ) + { + TileMatrix tiles = Map.Tiles; + LandTile _tile = tiles.GetLandTile(x,y); + int id = _tile.ID; + if((id >= 168 && id <= 171) || id == 100) + { + return new Point3D( x, y, this.Z ); + } + else + { + continue; + } + } + + if ( Map.CanSpawnMobile( new Point2D( x, y ), this.Z ) ) + return new Point3D( x, y, this.Z ); + else if ( Map.CanSpawnMobile( new Point2D( x, y ), z ) ) + return new Point3D( x, y, z ); + } + + return this.Location; + } + + public void DoTimer() + { + if ( !m_Running ) + return; + + int minSeconds = (int)m_MinDelay.TotalSeconds; + int maxSeconds = (int)m_MaxDelay.TotalSeconds; + + TimeSpan delay = TimeSpan.FromSeconds( Utility.RandomMinMax( minSeconds, maxSeconds ) ); + DoTimer( delay ); + } + + public void DoTimer( TimeSpan delay ) + { + if ( !m_Running ) + return; + + m_End = DateTime.Now + delay; + + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = new InternalTimer( this, delay ); + m_Timer.Start(); + } + + private class InternalTimer : Timer + { + private PremiumSpawner m_PremiumSpawner; + + public InternalTimer( PremiumSpawner spawner, TimeSpan delay ) : base( delay ) + { + if ( spawner.IsFull || spawner.IsFulla || spawner.IsFullb || spawner.IsFullc || spawner.IsFulld || spawner.IsFulle ) + Priority = TimerPriority.FiveSeconds; + else + Priority = TimerPriority.OneSecond; + + m_PremiumSpawner = spawner; + } + + protected override void OnTick() + { + if ( m_PremiumSpawner != null ) + if ( !m_PremiumSpawner.Deleted ) + m_PremiumSpawner.OnTick(); + } + } + + public int CountCreatures( string creatureName ) + { + Defrag(); + + int count = 0; + + for ( int i = 0; i < m_Creatures.Count; ++i ) + if ( Insensitive.Equals( creatureName, m_Creatures[i].GetType().Name ) ) + ++count; + + return count; + } + + public int CountCreaturesA( string creatureNameA ) + { + Defrag(); + + int count = 0; + + for ( int i = 0; i < m_CreaturesA.Count; ++i ) + if ( Insensitive.Equals( creatureNameA, m_CreaturesA[i].GetType().Name ) ) + ++count; + + return count; + } + + public int CountCreaturesB( string creatureNameB ) + { + Defrag(); + + int count = 0; + + for ( int i = 0; i < m_CreaturesB.Count; ++i ) + if ( Insensitive.Equals( creatureNameB, m_CreaturesB[i].GetType().Name ) ) + ++count; + + return count; + } + + public int CountCreaturesC( string creatureNameC ) + { + Defrag(); + + int count = 0; + + for ( int i = 0; i < m_CreaturesC.Count; ++i ) + if ( Insensitive.Equals( creatureNameC, m_CreaturesC[i].GetType().Name ) ) + ++count; + + return count; + } + + public int CountCreaturesD( string creatureNameD ) + { + Defrag(); + + int count = 0; + + for ( int i = 0; i < m_CreaturesD.Count; ++i ) + if ( Insensitive.Equals( creatureNameD, m_CreaturesD[i].GetType().Name ) ) + ++count; + + return count; + } + + public int CountCreaturesE( string creatureNameE ) + { + Defrag(); + + int count = 0; + + for ( int i = 0; i < m_CreaturesE.Count; ++i ) + if ( Insensitive.Equals( creatureNameE, m_CreaturesE[i].GetType().Name ) ) + ++count; + + return count; + } + + // RemoveCreatures(string anystring) - all this works for PremiumSpawnerGump(line 579) and SpawnEditor(line 957) + // But this funcionality is broken in these scripts. + public void RemoveCreatures( string creatureName ) + { + Defrag(); + + for ( int i = 0; i < m_Creatures.Count; ++i ) + { + IEntity e = m_Creatures[i]; + + if ( Insensitive.Equals( creatureName, e.GetType().Name ) ) + e.Delete(); + } + + InvalidateProperties(); + } + + public void RemoveCreaturesA( string creatureNameA ) + { + Defrag(); + + for ( int i = 0; i < m_CreaturesA.Count; ++i ) + { + IEntity e = m_CreaturesA[i]; + + if ( Insensitive.Equals( creatureNameA, e.GetType().Name ) ) + e.Delete(); + } + + InvalidateProperties(); + } + + public void RemoveCreaturesB( string creatureNameB ) + { + Defrag(); + + for ( int i = 0; i < m_CreaturesB.Count; ++i ) + { + IEntity e = m_CreaturesB[i]; + + if ( Insensitive.Equals( creatureNameB, e.GetType().Name ) ) + e.Delete(); + } + + InvalidateProperties(); + } + + public void RemoveCreaturesC( string creatureNameC ) + { + Defrag(); + + for ( int i = 0; i < m_CreaturesC.Count; ++i ) + { + IEntity e = m_CreaturesC[i]; + + if ( Insensitive.Equals( creatureNameC, e.GetType().Name ) ) + e.Delete(); + } + + InvalidateProperties(); + } + + public void RemoveCreaturesD( string creatureNameD ) + { + Defrag(); + + for ( int i = 0; i < m_CreaturesD.Count; ++i ) + { + IEntity e = m_CreaturesD[i]; + + if ( Insensitive.Equals( creatureNameD, e.GetType().Name ) ) + e.Delete(); + } + + InvalidateProperties(); + } + + public void RemoveCreaturesE( string creatureNameE ) + { + Defrag(); + + for ( int i = 0; i < m_CreaturesE.Count; ++i ) + { + IEntity e = m_CreaturesE[i]; + + if ( Insensitive.Equals( creatureNameE, e.GetType().Name ) ) + e.Delete(); + } + + InvalidateProperties(); + } + + public void RemoveCreatures( List m_Creatur ) + { + Defrag(); + + for ( int i = 0; i < m_Creatur.Count; ++i ) + m_Creatur[i].Delete(); + + InvalidateProperties(); + } + + //Used by PremiumSpawnerGump + public void BringToHome( List m_Beings ) + { + for ( int i = 0; i < m_Beings.Count; ++i ) + { + IEntity e = m_Beings[i]; + + if ( e is Mobile ) + { + Mobile m = (Mobile)e; + + m.MoveToWorld( Spot, Land ); + } + else if ( e is Item ) + { + Item item = (Item)e; + + item.MoveToWorld( Spot, Land ); + } + } + } + + //Used by PremiumSpawnerGump + public void BringToHome() + { + Defrag(); + + BringToHome(m_Creatures); + BringToHome(m_CreaturesA); + BringToHome(m_CreaturesB); + BringToHome(m_CreaturesC); + BringToHome(m_CreaturesD); + BringToHome(m_CreaturesE); + } + + public override void OnDelete() + { + base.OnDelete(); + + RemoveCreatures(m_Creatures); + RemoveCreatures(m_CreaturesA); + RemoveCreatures(m_CreaturesB); + RemoveCreatures(m_CreaturesC); + RemoveCreatures(m_CreaturesD); + RemoveCreatures(m_CreaturesE); + if ( m_Timer != null ) + m_Timer.Stop(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 4 ); // version + writer.Write( m_WalkingRange ); + + writer.Write( m_SpawnID ); + writer.Write( m_CountA ); + writer.Write( m_CountB ); + writer.Write( m_CountC ); + writer.Write( m_CountD ); + writer.Write( m_CountE ); + + writer.Write( m_WayPoint ); + writer.Write( m_Land ); + writer.Write( m_Spot ); + + writer.Write( m_Group ); + + writer.Write( m_MinDelay ); + writer.Write( m_MaxDelay ); + writer.Write( m_Count ); + writer.Write( m_Team ); + writer.Write( m_HomeRange ); + writer.Write( m_Running ); + + if ( m_Running ) + writer.WriteDeltaTime( m_End ); + + writer.Write( m_CreaturesName.Count ); + + for ( int i = 0; i < m_CreaturesName.Count; ++i ) + writer.Write( m_CreaturesName[i] ); + + writer.Write( m_CreaturesNameA.Count ); + + for ( int i = 0; i < m_CreaturesNameA.Count; ++i ) + writer.Write( (string)m_CreaturesNameA[i] ); + + writer.Write( m_CreaturesNameB.Count ); + + for ( int i = 0; i < m_CreaturesNameB.Count; ++i ) + writer.Write( (string)m_CreaturesNameB[i] ); + + writer.Write( m_CreaturesNameC.Count ); + + for ( int i = 0; i < m_CreaturesNameC.Count; ++i ) + writer.Write( (string)m_CreaturesNameC[i] ); + + writer.Write( m_CreaturesNameD.Count ); + + for ( int i = 0; i < m_CreaturesNameD.Count; ++i ) + writer.Write( (string)m_CreaturesNameD[i] ); + + writer.Write( m_CreaturesNameE.Count ); + + for ( int i = 0; i < m_CreaturesNameE.Count; ++i ) + writer.Write( (string)m_CreaturesNameE[i] ); + + writer.Write( m_Creatures.Count ); + + for ( int i = 0; i < m_Creatures.Count; ++i ) + { + IEntity e = m_Creatures[i]; + + if ( e is Item ) + writer.Write( (Item)e ); + else if ( e is Mobile ) + writer.Write( (Mobile)e ); + else + writer.Write( Serial.MinusOne ); + } + + writer.Write( m_CreaturesA.Count ); + + for ( int i = 0; i < m_CreaturesA.Count; ++i ) + { + IEntity e = m_CreaturesA[i]; + + if ( e is Item ) + writer.Write( (Item)e ); + else if ( e is Mobile ) + writer.Write( (Mobile)e ); + else + writer.Write( Serial.MinusOne ); + } + + writer.Write( m_CreaturesB.Count ); + + for ( int i = 0; i < m_CreaturesB.Count; ++i ) + { + IEntity e = m_CreaturesB[i]; + + if ( e is Item ) + writer.Write( (Item)e ); + else if ( e is Mobile ) + writer.Write( (Mobile)e ); + else + writer.Write( Serial.MinusOne ); + } + + writer.Write( m_CreaturesC.Count ); + + for ( int i = 0; i < m_CreaturesC.Count; ++i ) + { + IEntity e = m_CreaturesC[i]; + + if ( e is Item ) + writer.Write( (Item)e ); + else if ( e is Mobile ) + writer.Write( (Mobile)e ); + else + writer.Write( Serial.MinusOne ); + } + + writer.Write( m_CreaturesD.Count ); + + for ( int i = 0; i < m_CreaturesD.Count; ++i ) + { + IEntity e = m_CreaturesD[i]; + + if ( e is Item ) + writer.Write( (Item)e ); + else if ( e is Mobile ) + writer.Write( (Mobile)e ); + else + writer.Write( Serial.MinusOne ); + } + + writer.Write( m_CreaturesE.Count ); + + for ( int i = 0; i < m_CreaturesE.Count; ++i ) + { + IEntity e = m_CreaturesE[i]; + + if ( e is Item ) + writer.Write( (Item)e ); + else if ( e is Mobile ) + writer.Write( (Mobile)e ); + else + writer.Write( Serial.MinusOne ); + } + + } + + private static WarnTimer m_WarnTimer; + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_WalkingRange = reader.ReadInt(); + m_SpawnID = reader.ReadInt(); + m_CountA = reader.ReadInt(); + m_CountB = reader.ReadInt(); + m_CountC = reader.ReadInt(); + m_CountD = reader.ReadInt(); + m_CountE = reader.ReadInt(); + m_WayPoint = reader.ReadItem() as WayPoint; + m_Land = reader.ReadMap(); + m_Spot = reader.ReadPoint3D(); + m_Group = reader.ReadBool(); + m_MinDelay = reader.ReadTimeSpan(); + m_MaxDelay = reader.ReadTimeSpan(); + m_Count = reader.ReadInt(); + m_Team = reader.ReadInt(); + m_HomeRange = reader.ReadInt(); + m_Running = reader.ReadBool(); + + TimeSpan ts = TimeSpan.Zero; + + if ( m_Running ) + ts = reader.ReadDeltaTime() - DateTime.Now; + + int size = reader.ReadInt(); + m_CreaturesName = new List( size ); + for ( int i = 0; i < size; ++i ) + { + string creatureString = reader.ReadString(); + + m_CreaturesName.Add( creatureString ); + string typeName = ParseType( creatureString ); + + if ( ScriptCompiler.FindTypeByName( typeName ) == null ) + { + if ( m_WarnTimer == null ) + m_WarnTimer = new WarnTimer(); + + m_WarnTimer.Add( Location, Map, typeName ); + } + } + + int sizeA = reader.ReadInt(); + m_CreaturesNameA = new List( sizeA ); + for ( int i = 0; i < sizeA; ++i ) + { + string creatureString = reader.ReadString(); + + m_CreaturesNameA.Add( creatureString ); + string typeName = ParseType( creatureString ); + + if ( ScriptCompiler.FindTypeByName( typeName ) == null ) + { + if ( m_WarnTimer == null ) + m_WarnTimer = new WarnTimer(); + + m_WarnTimer.Add( Location, Map, typeName ); + } + } + + int sizeB = reader.ReadInt(); + m_CreaturesNameB = new List( sizeB ); + for ( int i = 0; i < sizeB; ++i ) + { + string creatureString = reader.ReadString(); + + m_CreaturesNameB.Add( creatureString ); + string typeName = ParseType( creatureString ); + + if ( ScriptCompiler.FindTypeByName( typeName ) == null ) + { + if ( m_WarnTimer == null ) + m_WarnTimer = new WarnTimer(); + + m_WarnTimer.Add( Location, Map, typeName ); + } + } + + int sizeC = reader.ReadInt(); + m_CreaturesNameC = new List( sizeC ); + for ( int i = 0; i < sizeC; ++i ) + { + string creatureString = reader.ReadString(); + + m_CreaturesNameC.Add( creatureString ); + string typeName = ParseType( creatureString ); + + if ( ScriptCompiler.FindTypeByName( typeName ) == null ) + { + if ( m_WarnTimer == null ) + m_WarnTimer = new WarnTimer(); + + m_WarnTimer.Add( Location, Map, typeName ); + } + } + + int sizeD = reader.ReadInt(); + m_CreaturesNameD = new List( sizeD ); + for ( int i = 0; i < sizeD; ++i ) + { + string creatureString = reader.ReadString(); + + m_CreaturesNameD.Add( creatureString ); + string typeName = ParseType( creatureString ); + + if ( ScriptCompiler.FindTypeByName( typeName ) == null ) + { + if ( m_WarnTimer == null ) + m_WarnTimer = new WarnTimer(); + + m_WarnTimer.Add( Location, Map, typeName ); + } + } + + int sizeE = reader.ReadInt(); + m_CreaturesNameE = new List( sizeE ); + for ( int i = 0; i < sizeE; ++i ) + { + string creatureString = reader.ReadString(); + + m_CreaturesNameE.Add( creatureString ); + string typeName = ParseType( creatureString ); + + if ( ScriptCompiler.FindTypeByName( typeName ) == null ) + { + if ( m_WarnTimer == null ) + m_WarnTimer = new WarnTimer(); + + m_WarnTimer.Add( Location, Map, typeName ); + } + } + + int count = reader.ReadInt(); + m_Creatures = new List( count ); + for ( int i = 0; i < count; ++i ) + { + IEntity e = World.FindEntity( reader.ReadInt() ); + + if ( e != null ) + m_Creatures.Add( e ); + } + + int countA = reader.ReadInt(); + m_CreaturesA = new List( countA ); + for ( int i = 0; i < countA; ++i ) + { + IEntity e = World.FindEntity( reader.ReadInt() ); + + if ( e != null ) + m_CreaturesA.Add( e ); + } + + int countB = reader.ReadInt(); + m_CreaturesB = new List( countB ); + for ( int i = 0; i < countB; ++i ) + { + IEntity e = World.FindEntity( reader.ReadInt() ); + + if ( e != null ) + m_CreaturesB.Add( e ); + } + + int countC = reader.ReadInt(); + m_CreaturesC = new List( countC ); + for ( int i = 0; i < countC; ++i ) + { + IEntity e = World.FindEntity( reader.ReadInt() ); + + if ( e != null ) + m_CreaturesC.Add( e ); + } + + int countD = reader.ReadInt(); + m_CreaturesD = new List( countD ); + for ( int i = 0; i < countD; ++i ) + { + IEntity e = World.FindEntity( reader.ReadInt() ); + + if ( e != null ) + m_CreaturesD.Add( e ); + } + + int countE = reader.ReadInt(); + m_CreaturesE = new List( countE ); + for ( int i = 0; i < countE; ++i ) + { + IEntity e = World.FindEntity( reader.ReadInt() ); + + if ( e != null ) + m_CreaturesE.Add( e ); + } + + if ( m_Running ) + DoTimer( ts ); + } + + private class WarnTimer : Timer + { + private List m_List; + + private class WarnEntry + { + public Point3D m_Point; + public Map m_Map; + public string m_Name; + + public WarnEntry( Point3D p, Map map, string name ) + { + m_Point = p; + m_Map = map; + m_Name = name; + } + } + + public WarnTimer() : base( TimeSpan.FromSeconds( 1.0 ) ) + { + m_List = new List(); + Start(); + } + + public void Add( Point3D p, Map map, string name ) + { + m_List.Add( new WarnEntry( p, map, name ) ); + } + + protected override void OnTick() + { + try + { + Console.WriteLine( "Warning: {0} bad spawns detected, logged: 'PremiumBadspawn.log'", m_List.Count ); + + using ( StreamWriter op = new StreamWriter( "PremiumBadspawn.log", true ) ) + { + op.WriteLine( "# Bad spawns : {0}", DateTime.Now ); + op.WriteLine( "# Format: X Y Z F Name" ); + op.WriteLine(); + + foreach ( WarnEntry e in m_List ) + op.WriteLine( "{0}\t{1}\t{2}\t{3}\t{4}", e.m_Point.X, e.m_Point.Y, e.m_Point.Z, e.m_Map, e.m_Name ); + + op.WriteLine(); + op.WriteLine(); + } + } + catch + { + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/PremiumSpawnerGump.cs b/Scripts/Engines/Spawner/PremiumSpawnerGump.cs new file mode 100644 index 0000000..32bce43 --- /dev/null +++ b/Scripts/Engines/Spawner/PremiumSpawnerGump.cs @@ -0,0 +1,495 @@ +using System; +using System.Collections; +using Server.Network; +using Server.Gumps; +using System.Collections.Generic; + +namespace Server.Mobiles +{ + public class PremiumSpawnerGump : Gump + { + private PremiumSpawner m_Spawner; + + public void AddBlackAlpha( int x, int y, int width, int height ) + { + AddImageTiled( x, y, width, height, 2624 ); + AddAlphaRegion( x, y, width, height ); + } + + public PremiumSpawnerGump( PremiumSpawner spawner ) : base( 50, 50 ) + { + m_Spawner = spawner; + + AddPage( 1 ); + + AddBackground( 0, 0, 350, 360, 5054 ); + + AddLabel( 80, 1, 52, "Creatures List 1" ); + + AddLabel( 215, 3, 52, "PREMIUM SPAWNER" ); + AddBlackAlpha( 213, 23, 125, 270 ); + + AddButton( 260, 40, 0xFB7, 0xFB9, 1000, GumpButtonType.Reply, 0 ); + AddLabel( 260, 60, 52, "Okay" ); + + AddButton( 260, 90, 0xFB4, 0xFB6, 200, GumpButtonType.Reply, 0 ); + AddLabel( 232, 110, 52, "Bring to Home" ); + + AddButton( 260, 140, 0xFA8, 0xFAA, 300, GumpButtonType.Reply, 0 ); + AddLabel( 232, 160, 52, "Total Respawn" ); + + AddButton( 260, 190, 0xFAB, 0xFAD, 400, GumpButtonType.Reply, 0 ); + AddLabel( 245, 210, 52, "Properties" ); + + AddButton( 260, 240, 0xFB1, 0xFB3, 500, GumpButtonType.Reply, 0 ); + AddLabel( 256, 260, 52, "Cancel" ); + + AddButton( 230, 320, 5603, 5607, 0, GumpButtonType.Page, 6 ); + AddButton( 302, 320, 5601, 5605, 0, GumpButtonType.Page, 2 ); + AddLabel( 258, 320, 52, "- 1 -" ); + + for ( int i = 0; i < 15; i++ ) + { + // AddButton ( x, y, image, imageOnClick, ButtonID ) + AddButton( 5, ( 22 * i ) + 20, 0xFA5, 0xFA7, (1 + i), GumpButtonType.Reply, 0 ); // > (spawn this creature) + AddButton( 38, ( 22 * i ) + 20, 0xFA2, 0xFA4, (91 + i), GumpButtonType.Reply, 0 ); // X (remove this creature) + + AddImageTiled( 71, ( 22 * i ) + 20, 119, 23, 0xA40 ); + AddImageTiled( 72, ( 22 * i ) + 21, 117, 21, 0xBBC ); + + string str = ""; + + if ( i < spawner.CreaturesName.Count ) + { + str = (string)spawner.CreaturesName[i]; + int count = m_Spawner.CountCreatures( str ); + + AddLabel( 192, ( 22 * i ) + 20, 0, count.ToString() ); + } + + AddTextEntry( 75, ( 22 * i ) + 21, 114, 21, 0, 101 + i, str ); + } + + AddPage( 2 ); + + AddBackground( 0, 0, 350, 360, 5054 ); + + AddLabel( 80, 1, 52, "Creatures List 2" ); + + AddLabel( 215, 3, 52, "PREMIUM SPAWNER" ); + AddBlackAlpha( 213, 23, 125, 270 ); + + AddButton( 260, 40, 0xFB7, 0xFB9, 1000, GumpButtonType.Reply, 0 ); + AddLabel( 260, 60, 52, "Okay" ); + + AddButton( 260, 90, 0xFB4, 0xFB6, 200, GumpButtonType.Reply, 0 ); + AddLabel( 232, 110, 52, "Bring to Home" ); + + AddButton( 260, 140, 0xFA8, 0xFAA, 300, GumpButtonType.Reply, 0 ); + AddLabel( 232, 160, 52, "Total Respawn" ); + + AddButton( 260, 190, 0xFAB, 0xFAD, 400, GumpButtonType.Reply, 0 ); + AddLabel( 245, 210, 52, "Properties" ); + + AddButton( 260, 240, 0xFB1, 0xFB3, 500, GumpButtonType.Reply, 0 ); + AddLabel( 256, 260, 52, "Cancel" ); + + AddButton( 230, 320, 5603, 5607, 0, GumpButtonType.Page, 1 ); + AddButton( 302, 320, 5601, 5605, 0, GumpButtonType.Page, 3 ); + AddLabel( 258, 320, 52, "- 2 -" ); + + for ( int i = 0; i < 15; i++ ) + { + AddButton( 5, ( 22 * i ) + 20, 0xFA5, 0xFA7, (16 + i), GumpButtonType.Reply, 0 ); + AddButton( 38, ( 22 * i ) + 20, 0xFA2, 0xFA4, (106 + i), GumpButtonType.Reply, 0 ); + + AddImageTiled( 71, ( 22 * i ) + 20, 119, 23, 0xA40 ); + AddImageTiled( 72, ( 22 * i ) + 21, 117, 21, 0xBBC ); + + string str = ""; + + if ( i < spawner.SubSpawnerA.Count ) + { + str = (string)spawner.SubSpawnerA[i]; + int count = m_Spawner.CountCreaturesA( str ); + + AddLabel( 192, ( 22 * i ) + 20, 0, count.ToString() ); + } + + AddTextEntry( 75, ( 22 * i ) + 21, 114, 21, 0, 201 + i, str ); + } + + AddPage( 3 ); + + AddBackground( 0, 0, 350, 360, 5054 ); + + AddLabel( 80, 1, 52, "Creatures List 3" ); + + AddLabel( 215, 3, 52, "PREMIUM SPAWNER" ); + AddBlackAlpha( 213, 23, 125, 270 ); + + AddButton( 260, 40, 0xFB7, 0xFB9, 1000, GumpButtonType.Reply, 0 ); + AddLabel( 260, 60, 52, "Okay" ); + + AddButton( 260, 90, 0xFB4, 0xFB6, 200, GumpButtonType.Reply, 0 ); + AddLabel( 232, 110, 52, "Bring to Home" ); + + AddButton( 260, 140, 0xFA8, 0xFAA, 300, GumpButtonType.Reply, 0 ); + AddLabel( 232, 160, 52, "Total Respawn" ); + + AddButton( 260, 190, 0xFAB, 0xFAD, 400, GumpButtonType.Reply, 0 ); + AddLabel( 245, 210, 52, "Properties" ); + + AddButton( 260, 240, 0xFB1, 0xFB3, 500, GumpButtonType.Reply, 0 ); + AddLabel( 256, 260, 52, "Cancel" ); + + AddButton( 230, 320, 5603, 5607, 0, GumpButtonType.Page, 2 ); + AddButton( 302, 320, 5601, 5605, 0, GumpButtonType.Page, 4 ); + AddLabel( 258, 320, 52, "- 3 -" ); + + for ( int i = 0; i < 15; i++ ) + { + AddButton( 5, ( 22 * i ) + 20, 0xFA5, 0xFA7, (31 + i), GumpButtonType.Reply, 0 ); + AddButton( 38, ( 22 * i ) + 20, 0xFA2, 0xFA4, (121 + i), GumpButtonType.Reply, 0 ); + + AddImageTiled( 71, ( 22 * i ) + 20, 119, 23, 0xA40 ); + AddImageTiled( 72, ( 22 * i ) + 21, 117, 21, 0xBBC ); + + string str = ""; + + if ( i < spawner.SubSpawnerB.Count ) + { + str = (string)spawner.SubSpawnerB[i]; + int count = m_Spawner.CountCreaturesB( str ); + + AddLabel( 192, ( 22 * i ) + 20, 0, count.ToString() ); + } + + AddTextEntry( 75, ( 22 * i ) + 21, 114, 21, 0, 301 + i, str ); + } + + AddPage( 4 ); + + AddBackground( 0, 0, 350, 360, 5054 ); + + AddLabel( 80, 1, 52, "Creatures List 4" ); + + AddLabel( 215, 3, 52, "PREMIUM SPAWNER" ); + AddBlackAlpha( 213, 23, 125, 270 ); + + AddButton( 260, 40, 0xFB7, 0xFB9, 1000, GumpButtonType.Reply, 0 ); + AddLabel( 260, 60, 52, "Okay" ); + + AddButton( 260, 90, 0xFB4, 0xFB6, 200, GumpButtonType.Reply, 0 ); + AddLabel( 232, 110, 52, "Bring to Home" ); + + AddButton( 260, 140, 0xFA8, 0xFAA, 300, GumpButtonType.Reply, 0 ); + AddLabel( 232, 160, 52, "Total Respawn" ); + + AddButton( 260, 190, 0xFAB, 0xFAD, 400, GumpButtonType.Reply, 0 ); + AddLabel( 245, 210, 52, "Properties" ); + + AddButton( 260, 240, 0xFB1, 0xFB3, 500, GumpButtonType.Reply, 0 ); + AddLabel( 256, 260, 52, "Cancel" ); + + AddButton( 230, 320, 5603, 5607, 0, GumpButtonType.Page, 3 ); + AddButton( 302, 320, 5601, 5605, 0, GumpButtonType.Page, 5 ); + AddLabel( 258, 320, 52, "- 4 -" ); + + for ( int i = 0; i < 15; i++ ) + { + AddButton( 5, ( 22 * i ) + 20, 0xFA5, 0xFA7, (46 + i), GumpButtonType.Reply, 0 ); + AddButton( 38, ( 22 * i ) + 20, 0xFA2, 0xFA4, (136 + i), GumpButtonType.Reply, 0 ); + + AddImageTiled( 71, ( 22 * i ) + 20, 119, 23, 0xA40 ); + AddImageTiled( 72, ( 22 * i ) + 21, 117, 21, 0xBBC ); + + string str = ""; + + if ( i < spawner.SubSpawnerC.Count ) + { + str = (string)spawner.SubSpawnerC[i]; + int count = m_Spawner.CountCreaturesC( str ); + + AddLabel( 192, ( 22 * i ) + 20, 0, count.ToString() ); + } + + AddTextEntry( 75, ( 22 * i ) + 21, 114, 21, 0, 401 + i, str ); + } + + AddPage( 5 ); + + AddBackground( 0, 0, 350, 360, 5054 ); + + AddLabel( 80, 1, 52, "Creatures List 5" ); + + AddLabel( 215, 3, 52, "PREMIUM SPAWNER" ); + AddBlackAlpha( 213, 23, 125, 270 ); + + AddButton( 260, 40, 0xFB7, 0xFB9, 1000, GumpButtonType.Reply, 0 ); + AddLabel( 260, 60, 52, "Okay" ); + + AddButton( 260, 90, 0xFB4, 0xFB6, 200, GumpButtonType.Reply, 0 ); + AddLabel( 232, 110, 52, "Bring to Home" ); + + AddButton( 260, 140, 0xFA8, 0xFAA, 300, GumpButtonType.Reply, 0 ); + AddLabel( 232, 160, 52, "Total Respawn" ); + + AddButton( 260, 190, 0xFAB, 0xFAD, 400, GumpButtonType.Reply, 0 ); + AddLabel( 245, 210, 52, "Properties" ); + + AddButton( 260, 240, 0xFB1, 0xFB3, 500, GumpButtonType.Reply, 0 ); + AddLabel( 256, 260, 52, "Cancel" ); + + AddButton( 230, 320, 5603, 5607, 0, GumpButtonType.Page, 4 ); + AddButton( 302, 320, 5601, 5605, 0, GumpButtonType.Page, 6 ); + AddLabel( 258, 320, 52, "- 5 -" ); + + for ( int i = 0; i < 15; i++ ) + { + AddButton( 5, ( 22 * i ) + 20, 0xFA5, 0xFA7, (61 + i), GumpButtonType.Reply, 0 ); + AddButton( 38, ( 22 * i ) + 20, 0xFA2, 0xFA4, (151 + i), GumpButtonType.Reply, 0 ); + + AddImageTiled( 71, ( 22 * i ) + 20, 119, 23, 0xA40 ); + AddImageTiled( 72, ( 22 * i ) + 21, 117, 21, 0xBBC ); + + string str = ""; + + if ( i < spawner.SubSpawnerD.Count ) + { + str = (string)spawner.SubSpawnerD[i]; + int count = m_Spawner.CountCreaturesD( str ); + + AddLabel( 192, ( 22 * i ) + 20, 0, count.ToString() ); + } + + AddTextEntry( 75, ( 22 * i ) + 21, 114, 21, 0, 501 + i, str ); + } + + AddPage( 6 ); + + AddBackground( 0, 0, 350, 360, 5054 ); + + AddLabel( 80, 1, 52, "Creatures List 6" ); + + AddLabel( 215, 3, 52, "PREMIUM SPAWNER" ); + AddBlackAlpha( 213, 23, 125, 270 ); + + AddButton( 260, 40, 0xFB7, 0xFB9, 1000, GumpButtonType.Reply, 0 ); + AddLabel( 260, 60, 52, "Okay" ); + + AddButton( 260, 90, 0xFB4, 0xFB6, 200, GumpButtonType.Reply, 0 ); + AddLabel( 232, 110, 52, "Bring to Home" ); + + AddButton( 260, 140, 0xFA8, 0xFAA, 300, GumpButtonType.Reply, 0 ); + AddLabel( 232, 160, 52, "Total Respawn" ); + + AddButton( 260, 190, 0xFAB, 0xFAD, 400, GumpButtonType.Reply, 0 ); + AddLabel( 245, 210, 52, "Properties" ); + + AddButton( 260, 240, 0xFB1, 0xFB3, 500, GumpButtonType.Reply, 0 ); + AddLabel( 256, 260, 52, "Cancel" ); + + AddButton( 230, 320, 5603, 5607, 0, GumpButtonType.Page, 5 ); + AddButton( 302, 320, 5601, 5605, 0, GumpButtonType.Page, 1 ); + AddLabel( 258, 320, 52, "- 6 -" ); + + for ( int i = 0; i < 15; i++ ) + { + AddButton( 5, ( 22 * i ) + 20, 0xFA5, 0xFA7, (76 + i), GumpButtonType.Reply, 0 ); + AddButton( 38, ( 22 * i ) + 20, 0xFA2, 0xFA4, (166 + i), GumpButtonType.Reply, 0 ); + + AddImageTiled( 71, ( 22 * i ) + 20, 119, 23, 0xA40 ); + AddImageTiled( 72, ( 22 * i ) + 21, 117, 21, 0xBBC ); + + string str = ""; + + if ( i < spawner.SubSpawnerE.Count ) + { + str = (string)spawner.SubSpawnerE[i]; + int count = m_Spawner.CountCreaturesE( str ); + + AddLabel( 192, ( 22 * i ) + 20, 0, count.ToString() ); + } + + AddTextEntry( 75, ( 22 * i ) + 21, 114, 21, 0, 601 + i, str ); + } + + } + + public List CreateArray( RelayInfo info, Mobile from, int TextIndex ) + { + List creaturesName = new List(); + + for ( int i = 0; i < 15; i++ ) + { + TextRelay te = info.GetTextEntry( TextIndex + i ); + + if ( te != null ) + { + string str = te.Text; + + if ( str.Length > 0 ) + { + str = str.Trim(); + + string t = Spawner.ParseType( str ); + + Type type = ScriptCompiler.FindTypeByName( t ); + + if ( type != null ) + creaturesName.Add( str ); + else + from.SendMessage( "{0} is not a valid type name.", t ); + } + } + } + + return creaturesName; + } + + public string GetEntry( int Type, RelayInfo info ) + { + TextRelay entry = info.GetTextEntry( Type ); + return entry.Text; + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( m_Spawner.Deleted ) + return; + + switch ( info.ButtonID ) + { + case 0: // Cancel (mouse's right button click anywhere on the gump) + { + break; + } + case 200: // Bring everything home + { + m_Spawner.BringToHome(); + break; + } + case 300: // Total respawn + { + // 1st save changes + m_Spawner.CreaturesName = CreateArray( info, state.Mobile, 100 ); + m_Spawner.SubSpawnerA = CreateArray( info, state.Mobile, 200 ); + m_Spawner.SubSpawnerB = CreateArray( info, state.Mobile, 300 ); + m_Spawner.SubSpawnerC = CreateArray( info, state.Mobile, 400 ); + m_Spawner.SubSpawnerD = CreateArray( info, state.Mobile, 500 ); + m_Spawner.SubSpawnerE = CreateArray( info, state.Mobile, 600 ); + // then respwan + m_Spawner.Respawn(); + m_Spawner.Running = true; + break; + } + case 400: // Props + { + state.Mobile.SendGump( new PropertiesGump( state.Mobile, m_Spawner ) ); + state.Mobile.SendGump( new PremiumSpawnerGump( m_Spawner ) ); + break; + } + case 500: // Cancel button + { + break; + } + case 1000: // Okay + { + m_Spawner.CreaturesName = CreateArray( info, state.Mobile, 100 ); + m_Spawner.SubSpawnerA = CreateArray( info, state.Mobile, 200 ); + m_Spawner.SubSpawnerB = CreateArray( info, state.Mobile, 300 ); + m_Spawner.SubSpawnerC = CreateArray( info, state.Mobile, 400 ); + m_Spawner.SubSpawnerD = CreateArray( info, state.Mobile, 500 ); + m_Spawner.SubSpawnerE = CreateArray( info, state.Mobile, 600 ); + m_Spawner.Running = true; + break; + } + default: + { //ButtonID: 1-90 spawn; 91-180 remove + int ID = info.ButtonID; + + int Type = 0; + + // Spawn creature + if ( (ID >= 1) && (ID <= 15) ) + { + Type += 100 + ID; + m_Spawner.Spawn( GetEntry(Type, info) ); + } + else if ( (ID >= 16) && (ID <= 30) ) + { + Type += 200 + ID - 15; + m_Spawner.SpawnA( GetEntry(Type, info) ); + } + else if ( (ID >= 31) && (ID <= 45) ) + { + Type += 300 + ID - 30; + m_Spawner.SpawnB( GetEntry(Type, info) ); + } + else if ( (ID >= 46) && (ID <= 60) ) + { + Type += 400 + ID - 45; + m_Spawner.SpawnC( GetEntry(Type, info) ); + } + else if ( (ID >= 61) && (ID <= 75) ) + { + Type += 500 + ID - 60; + m_Spawner.SpawnD( GetEntry(Type, info) ); + } + else if ( (ID >= 76) && (ID <= 90) ) + { + Type += 600 + ID - 75; + m_Spawner.SpawnE( GetEntry(Type, info) ); + } + // Remove creature + else if ( (ID >= 91) && (ID <= 105) ) + { + Type += 100 + ID - 90; + m_Spawner.RemoveCreatures( GetEntry(Type, info) ); + } + else if ( (ID >= 106) && (ID <= 120) ) + { + Type += 200 + ID - 105; + m_Spawner.RemoveCreaturesA( GetEntry(Type, info) ); + } + else if ( (ID >= 121) && (ID <= 135) ) + { + Type += 300 + ID - 120; + m_Spawner.RemoveCreaturesB( GetEntry(Type, info) ); + } + else if ( (ID >= 136) && (ID <= 150) ) + { + Type += 400 + ID - 135; + m_Spawner.RemoveCreaturesC( GetEntry(Type, info) ); + } + else if ( (ID >= 151) && (ID <= 165) ) + { + Type += 500 + ID - 150; + m_Spawner.RemoveCreaturesD( GetEntry(Type, info) ); + } + else if ( (ID >= 166) && (ID <= 180) ) + { + Type += 600 + ID - 165; + m_Spawner.RemoveCreaturesE( GetEntry(Type, info) ); + } + + string entry = GetEntry(Type, info); + + if ( entry != null && entry.Length > 0 ) + { + m_Spawner.CreaturesName = CreateArray( info, state.Mobile, 100 ); + m_Spawner.SubSpawnerA = CreateArray( info, state.Mobile, 200 ); + m_Spawner.SubSpawnerB = CreateArray( info, state.Mobile, 300 ); + m_Spawner.SubSpawnerC = CreateArray( info, state.Mobile, 400 ); + m_Spawner.SubSpawnerD = CreateArray( info, state.Mobile, 500 ); + m_Spawner.SubSpawnerE = CreateArray( info, state.Mobile, 600 ); + m_Spawner.Running = true; + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/PremiumSpawnerGumps.cs b/Scripts/Engines/Spawner/PremiumSpawnerGumps.cs new file mode 100644 index 0000000..83704f3 --- /dev/null +++ b/Scripts/Engines/Spawner/PremiumSpawnerGumps.cs @@ -0,0 +1,419 @@ +// Engine r117 +using System; +using System.Collections; +using System.IO; +using Server; +using Server.Mobiles; +using Server.Items; +using Server.Commands; +using Server.Network; +using Server.Gumps; +using Server.Regions; + +namespace Server.Commands +{ + public class OptionsGumps + { + public OptionsGumps() + { + } + + public static void Initialize() + { + CommandSystem.Register( "GumpSaveRegion", AccessLevel.Administrator, new CommandEventHandler( OptionsGumps1_OnCommand ) ); + CommandSystem.Register( "GumpSaveCoordinate", AccessLevel.Administrator, new CommandEventHandler( OptionsGumps2_OnCommand ) ); + CommandSystem.Register( "GumpRemoveID", AccessLevel.Administrator, new CommandEventHandler( OptionsGumps3_OnCommand ) ); + CommandSystem.Register( "GumpRemoveCoordinate", AccessLevel.Administrator, new CommandEventHandler( OptionsGumps4_OnCommand ) ); + CommandSystem.Register( "GumpRemoveRegion", AccessLevel.Administrator, new CommandEventHandler( OptionsGumps5_OnCommand ) ); + } + + [Usage( "[GumpSaveRegion" )] + [Description( "Gump to Save inside Region" )] + private static void OptionsGumps1_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new GumpSaveRegion( e ) ); + } + + [Usage( "[GumpSaveCoordinate" )] + [Description( "Gump to save by coordinates" )] + private static void OptionsGumps2_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new GumpSaveCoordinate( e ) ); + } + + [Usage( "[GumpRemoveID" )] + [Description( "Gump to remove by ID" )] + private static void OptionsGumps3_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new GumpRemoveID( e ) ); + } + + [Usage( "[GumpRemoveCoordinate" )] + [Description( "Gump to remove by coordinates" )] + private static void OptionsGumps4_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new GumpRemoveCoordinate( e ) ); + } + + [Usage( "[GumpRemoveRegion" )] + [Description( "Gump to remove inside region" )] + private static void OptionsGumps5_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new GumpRemoveRegion( e ) ); + } + } +} + +namespace Server.Gumps +{ + public class GumpSaveRegion : Gump + { + private CommandEventArgs m_CommandEventArgs; + + public GumpSaveRegion( CommandEventArgs e ) : base( 50,50 ) + { + m_CommandEventArgs = e; + Closable = true; + Dragable = true; + Mobile from = e.Mobile; + + AddPage(1); + //x, y, width, hight + AddBackground( 0, 0, 232, 210, 5054 ); + + AddImageTiled( 15, 30, 120, 20, 3004 ); + AddTextEntry( 15, 30, 120, 20, 0, 0, @"region to save"); + AddLabel( 15, 10, 52, "Enter a Region:" ); + AddButton( 140, 32, 0x15E1, 0x15E5, 101, GumpButtonType.Reply, 0 ); + + AddLabel( 15, 60, 52, "Tip:" ); + AddHtml( 15, 80, 200, 110, "This will SAVE the spawners, in a specified region, to Data/Spawns/'region name'.map. Type [where if you don't know the region you are. Copy to the text box the name of the region. You also can open Data/Regions.xml to a full list of regions.
Example: you type [where and appear 'your region is town of Britain'. Type 'Britain' in text box.", true, true ); + } + + public override void OnResponse(NetState state, RelayInfo info) + { + Mobile from = state.Mobile; + + switch ( info.ButtonID ) + { + case 0: // close the gump + { + break; + } + + case 101: + { + TextRelay oRegion = info.GetTextEntry( 0 ); + string sRegion = oRegion.Text; + if( sRegion != "" ) + { + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}Spawngen save {1}", prefix, sRegion ) ); + } + else + { + from.SendMessage( "You must specify a region!" ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}GumpSaveRegion", prefix ) ); + } + break; + } + } + } + } + + public class GumpRemoveRegion : Gump + { + private CommandEventArgs m_CommandEventArgs; + + public GumpRemoveRegion( CommandEventArgs e ) : base( 50,50 ) + { + m_CommandEventArgs = e; + Closable = true; + Dragable = true; + Mobile from = e.Mobile; + + AddPage(1); + + AddBackground( 0, 0, 232, 210, 5054 ); + + AddImageTiled( 15, 30, 120, 20, 3004 ); + AddTextEntry( 15, 30, 120, 20, 0, 0, @"region to remove"); + AddLabel( 15, 10, 52, "Enter a Region:" ); + AddButton( 140, 32, 0x15E1, 0x15E5, 101, GumpButtonType.Reply, 0 ); + + AddLabel( 15, 60, 52, "Tip:" ); + AddHtml( 15, 80, 200, 110, "This will REMOVE the spawners, in a specified region. Type [where if you don't know the region you are. Copy to the text box the name of the region. You also can open Data/Regions.xml to a full list of regions.
Example: you type [where and appear 'your region is town of Britain'. Type 'Britain' in text box.", true, true ); + } + + public override void OnResponse(NetState state, RelayInfo info) + { + Mobile from = state.Mobile; + + switch ( info.ButtonID ) + { + case 0: // close the gump + { + break; + } + + case 101: + { + TextRelay oRegion = info.GetTextEntry( 0 ); + string sRegion = oRegion.Text; + if( sRegion != "" ) + { + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}Spawngen remove {1}", prefix, sRegion ) ); + } + else + { + from.SendMessage( "You must specify a region!" ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}GumpRemoveRegion", prefix ) ); + } + break; + } + } + } + } + + public class GumpRemoveID : Gump + { + private CommandEventArgs m_CommandEventArgs; + + public GumpRemoveID( CommandEventArgs e ) : base( 50,50 ) + { + m_CommandEventArgs = e; + Closable = true; + Dragable = true; + Mobile from = e.Mobile; + + AddPage(1); + + AddBackground( 0, 0, 232, 210, 5054 ); + + AddImageTiled( 15, 30, 120, 20, 3004 ); + AddTextEntry( 15, 30, 120, 20, 0, 0, @"SpawnID to remove"); + AddLabel( 15, 10, 52, "Enter a SpawnID:" ); + AddButton( 140, 32, 0x15E1, 0x15E5, 101, GumpButtonType.Reply, 0 ); + + AddLabel( 15, 60, 52, "Tip:" ); + AddHtml( 15, 80, 200, 110, "This command was made to UNLOAD your own custom maps. This will REMOVE the spawners with the specified ID. Type '[get spawnid' in a spawner to know your ID. Remember: 'By Hand' spawns, i.e., those done with '[add premiumspawner' have ID = 1.", true, true ); + } + + public override void OnResponse(NetState state, RelayInfo info) + { + Mobile from = state.Mobile; + + switch ( info.ButtonID ) + { + case 0: // close the gump + { + break; + } + + case 101: + { + TextRelay oID = info.GetTextEntry( 0 ); + string sID = oID.Text; + if( sID != "" ) + { + try + { + int UnloadID = Convert.ToInt32( sID ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}Spawngen unload {1}", prefix, UnloadID ) ); + } + catch + { + from.SendMessage( "SpawnID must be a number!" ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}GumpRemoveID", prefix ) ); + } + } + + else + { + from.SendMessage( "You must specify an SpawnID!" ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}GumpRemoveID", prefix ) ); + } + break; + } + } + } + } + + public class GumpSaveCoordinate : Gump + { + private CommandEventArgs m_CommandEventArgs; + + public GumpSaveCoordinate( CommandEventArgs e ) : base( 50,50 ) + { + m_CommandEventArgs = e; + Closable = true; + Dragable = true; + Mobile from = e.Mobile; + + AddPage(1); + + AddBackground( 0, 0, 232, 235, 5054 ); + + AddImageTiled( 15, 30, 37, 20, 3004 ); + AddTextEntry( 15, 30, 37, 20, 0, 0, @"X1"); + + AddImageTiled( 57, 30, 37, 20, 3004 ); + AddTextEntry( 57, 30, 37, 20, 0, 1, @"Y1"); + + AddImageTiled( 15, 55, 37, 20, 3004 ); + AddTextEntry( 15, 55, 37, 20, 0, 2, @"X2"); + + AddImageTiled( 57, 55, 37, 20, 3004 ); + AddTextEntry( 57, 55, 37, 20, 0, 3, @"Y2"); + + AddLabel( 15, 10, 52, "Enter Coordinates:" ); + AddButton( 140, 32, 0x15E1, 0x15E5, 101, GumpButtonType.Reply, 0 ); + + AddLabel( 15, 85, 52, "Tip:" ); + AddHtml( 15, 105, 200, 110, "This will SAVE spawners inside specified coordinates. You can use [where in the first point and again [where in the second point to get the X and Y coordinates. You need 2: X1, Y1 for first point and X2, Y2 for the second point. The objective is determine a 'box'. This command will save all spawners inside this box.", true, true ); + } + + public override void OnResponse(NetState state, RelayInfo info) + { + Mobile from = state.Mobile; + + switch ( info.ButtonID ) + { + case 0: // close the gump + { + break; + } + + case 101: + { + TextRelay oX1 = info.GetTextEntry( 0 ); + TextRelay oY1 = info.GetTextEntry( 1 ); + TextRelay oX2 = info.GetTextEntry( 2 ); + TextRelay oY2 = info.GetTextEntry( 3 ); + string sX1 = oX1.Text; + string sY1 = oY1.Text; + string sX2 = oX2.Text; + string sY2 = oY2.Text; + if( sX1 != "" && sY1 != "" && sX2 != "" && sY2 != "" ) + { + try + { + int iX1 = Convert.ToInt32( sX1 ); + int iY1 = Convert.ToInt32( sY1 ); + int iX2 = Convert.ToInt32( sX2 ); + int iY2 = Convert.ToInt32( sY2 ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}Spawngen save {1} {2} {3} {4}", prefix, iX1, iY1, iX2, iY2 ) ); + } + catch + { + from.SendMessage( "Coordinates must be numbers!" ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}GumpSaveCoordinate", prefix ) ); + } + } + + else + { + from.SendMessage( "You must specify all coordinates!" ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}GumpSaveCoordinate", prefix ) ); + } + break; + } + } + } + } + + public class GumpRemoveCoordinate : Gump + { + private CommandEventArgs m_CommandEventArgs; + + public GumpRemoveCoordinate( CommandEventArgs e ) : base( 50,50 ) + { + m_CommandEventArgs = e; + Closable = true; + Dragable = true; + Mobile from = e.Mobile; + + AddPage(1); + + AddBackground( 0, 0, 232, 235, 5054 ); + + AddImageTiled( 15, 30, 37, 20, 3004 ); + AddTextEntry( 15, 30, 37, 20, 0, 0, @"X1"); + + AddImageTiled( 57, 30, 37, 20, 3004 ); + AddTextEntry( 57, 30, 37, 20, 0, 1, @"Y1"); + + AddImageTiled( 15, 55, 37, 20, 3004 ); + AddTextEntry( 15, 55, 37, 20, 0, 2, @"X2"); + + AddImageTiled( 57, 55, 37, 20, 3004 ); + AddTextEntry( 57, 55, 37, 20, 0, 3, @"Y2"); + + AddLabel( 15, 10, 52, "Enter Coordinates:" ); + AddButton( 140, 32, 0x15E1, 0x15E5, 101, GumpButtonType.Reply, 0 ); + + AddLabel( 15, 85, 52, "Tip:" ); + AddHtml( 15, 105, 200, 110, "This will REMOVE spawners inside specified coordinates. You can use [where in the first point and again [where in the second point to get the X and Y coordinates. You need 2: X1, Y1 for first point and X2, Y2 for the second point. The objective is determine a 'box'. This command will remove all spawners inside this box.", true, true ); + } + + public override void OnResponse(NetState state, RelayInfo info) + { + Mobile from = state.Mobile; + + switch ( info.ButtonID ) + { + case 0: // close the gump + { + break; + } + + case 101: + { + TextRelay oX1 = info.GetTextEntry( 0 ); + TextRelay oY1 = info.GetTextEntry( 1 ); + TextRelay oX2 = info.GetTextEntry( 2 ); + TextRelay oY2 = info.GetTextEntry( 3 ); + string sX1 = oX1.Text; + string sY1 = oY1.Text; + string sX2 = oX2.Text; + string sY2 = oY2.Text; + if( sX1 != "" && sY1 != "" && sX2 != "" && sY2 != "" ) + { + try + { + int iX1 = Convert.ToInt32( sX1 ); + int iY1 = Convert.ToInt32( sY1 ); + int iX2 = Convert.ToInt32( sX2 ); + int iY2 = Convert.ToInt32( sY2 ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}Spawngen remove {1} {2} {3} {4}", prefix, iX1, iY1, iX2, iY2 ) ); + } + catch + { + from.SendMessage( "Coordinates must be numbers!" ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}GumpRemoveCoordinate", prefix ) ); + } + } + + else + { + from.SendMessage( "You must specify all coordinates!" ); + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}GumpRemoveCoordinate", prefix ) ); + } + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/PremiumSpawnerMainGump.cs b/Scripts/Engines/Spawner/PremiumSpawnerMainGump.cs new file mode 100644 index 0000000..07221ef --- /dev/null +++ b/Scripts/Engines/Spawner/PremiumSpawnerMainGump.cs @@ -0,0 +1,288 @@ +// Engine r153 +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class PremiumSpawnerMainGump : Gump + { + public static void Initialize() + { + CommandSystem.Register("PremiumSpawner", AccessLevel.Administrator, new CommandEventHandler(PremiumSpawner_OnCommand)); + CommandSystem.Register("Spawner", AccessLevel.Administrator, new CommandEventHandler(PremiumSpawner_OnCommand)); + } + + [Usage("PremiumSpawner")] + [Aliases( "Spawner" )] + [Description("PremiumSpawner main gump.")] + public static void PremiumSpawner_OnCommand(CommandEventArgs e) + { + Mobile from = e.Mobile; + + if (from.HasGump(typeof(PremiumSpawnerMainGump))) + from.CloseGump(typeof(PremiumSpawnerMainGump)); + from.SendGump(new PremiumSpawnerMainGump(from)); + } + + public PremiumSpawnerMainGump(Mobile from) : this() + { + } + + public void AddBlackAlpha( int x, int y, int width, int height ) + { + AddImageTiled( x, y, width, height, 2624 ); + AddAlphaRegion( x, y, width, height ); + } + + public PremiumSpawnerMainGump() : base( 0, 0 ) + { + this.Closable=true; + this.Disposable=true; + this.Dragable=true; + //PAGE 1 + AddPage(1); + AddBackground(93, 68, 256, 423, 9200); + AddHtml( 98, 75, 244, 44, " PREMIUM SPAWNER
" + "by Nerun Rev.154", (bool)true, (bool)false); + AddBlackAlpha(100, 124, 241, 71); + AddLabel(109, 126, 52, @"WORLD CREATION"); + AddLabel(126, 148, 52, @"Let there be light (Create World)"); + AddLabel(126, 170, 52, @"Apocalypse now (Clear All Facets)"); + AddButton(109, 151, 1210, 1209, 101, GumpButtonType.Reply, 0); + AddButton(109, 173, 1210, 1209, 102, GumpButtonType.Reply, 0); + AddBlackAlpha(100, 200, 241, 89); + AddLabel(109, 202, 52, @"SELECT SPAWNS BY EXPANSION"); + AddLabel(126, 224, 52, @"UO Classic spawns (pre-T2A)"); + AddLabel(126, 244, 52, @"UO Mondain's Legacy spawns"); + AddLabel(126, 264, 52, @"UO KR, SA and HS spawns"); + //AddLabel(238, 224, 52, @"UO:ML spawns"); + //AddLabel(238, 244, 52, @"UO:KR, SA and HS spawns"); + //AddLabel(238, 264, 52, @"teste"); + AddButton(109, 227, 1210, 1209, 103, GumpButtonType.Reply, 0); + AddButton(109, 247, 1210, 1209, 104, GumpButtonType.Reply, 0); + AddButton(109, 267, 1210, 1209, 105, GumpButtonType.Reply, 0); + //AddButton(221, 227, 1210, 1209, 106, GumpButtonType.Reply, 0); + //AddButton(221, 247, 1210, 1209, 107, GumpButtonType.Reply, 0); + //AddButton(221, 267, 1210, 1209, 108, GumpButtonType.Reply, 0); + AddBlackAlpha(100, 294, 241, 89); + AddLabel(109, 296, 52, @"REMOVE SPAWNS BY EXPANSION"); + AddLabel(126, 318, 52, @"UO Classic spawns (pre-T2A)"); + AddLabel(126, 338, 52, @"UO Mondain's Legacy spawns"); + AddLabel(126, 358, 52, @"UO KR, SA and HS spawns"); + //AddLabel(238, 318, 52, @"Ter Mur"); + //AddLabel(238, 338, 52, @"Tokuno"); + //AddLabel(238, 358, 52, @"Trammel"); + AddButton(109, 321, 1210, 1209, 109, GumpButtonType.Reply, 0); + AddButton(109, 341, 1210, 1209, 110, GumpButtonType.Reply, 0); + AddButton(109, 361, 1210, 1209, 111, GumpButtonType.Reply, 0); + //AddButton(221, 321, 1210, 1209, 112, GumpButtonType.Reply, 0); + //AddButton(221, 341, 1210, 1209, 113, GumpButtonType.Reply, 0); + //AddButton(221, 361, 1210, 1209, 114, GumpButtonType.Reply, 0); + AddBlackAlpha(100, 388, 241, 68); + AddLabel(109, 391, 52, @"SMART PLAYER RANGE SENSITIVE"); + AddLabel(126, 413, 52, @"Generate Spawns' Overseer"); + AddLabel(126, 432, 52, @"Remove Spawns' Overseer"); + AddButton(109, 416, 1210, 1209, 115, GumpButtonType.Reply, 0); + AddButton(109, 435, 1210, 1209, 116, GumpButtonType.Reply, 0); + //Page change + AddLabel(207, 463, 200, @"1/3"); + AddButton(235, 465, 5601, 5605, 0, GumpButtonType.Page, 2); //advance + + // PAGE 2 + AddPage(2); + AddBackground(93, 68, 256, 423, 9200); + AddHtml( 98, 75, 244, 44, " PREMIUM SPAWNER
" + "by Nerun Rev.154", (bool)true, (bool)false); + AddBlackAlpha(100, 124, 241, 114); + AddLabel(109, 126, 52, @"SAVE SPAWNERS"); + AddLabel(126, 148, 52, @"All spawns (spawns.map)"); + AddLabel(126, 170, 52, @"'By hand' spawns (byhand.map)"); + AddLabel(126, 192, 52, @"Spawns inside region (region.map)"); + AddLabel(126, 214, 52, @"Spawns inside coordinates"); + AddButton(109, 151, 1210, 1209, 117, GumpButtonType.Reply, 0); + AddButton(109, 173, 1210, 1209, 118, GumpButtonType.Reply, 0); + AddButton(109, 195, 1210, 1209, 119, GumpButtonType.Reply, 0); + AddButton(109, 217, 1210, 1209, 120, GumpButtonType.Reply, 0); + AddBlackAlpha(100, 244, 241, 134); + AddLabel(109, 246, 52, @"REMOVE SPAWNERS"); + AddLabel(126, 268, 52, @"All spawners in ALL facets"); + AddLabel(126, 290, 52, @"All spawners in THIS facet"); + AddLabel(126, 312, 52, @"Remove spawners by SpawnID"); + AddLabel(126, 334, 52, @"Remove inside coordinates"); + AddLabel(126, 355, 52, @"Remove spawners inside region"); + AddButton(109, 271, 1210, 1209, 121, GumpButtonType.Reply, 0); + AddButton(109, 293, 1210, 1209, 122, GumpButtonType.Reply, 0); + AddButton(109, 315, 1210, 1209, 123, GumpButtonType.Reply, 0); + AddButton(109, 337, 1210, 1209, 124, GumpButtonType.Reply, 0); + AddButton(109, 358, 1210, 1209, 125, GumpButtonType.Reply, 0); + AddBlackAlpha(100, 385, 241, 71); + AddLabel(109, 387, 52, @"EDITOR"); + AddLabel(126, 408, 52, @"Spawn Editor (edit, find and list"); + AddLabel(126, 427, 52, @"all PremiumSpawners in the world)"); + AddButton(109, 411, 1210, 1209, 126, GumpButtonType.Reply, 0); + //Page change + AddLabel(207, 463, 200, @"2/3"); + AddButton(189, 465, 5603, 5607, 0, GumpButtonType.Page, 1); //back + AddButton(235, 465, 5601, 5605, 0, GumpButtonType.Page, 3); //advance + + //PAGE 3 + AddPage(3); + AddBackground(93, 68, 256, 423, 9200); + AddHtml( 98, 75, 244, 44, " PREMIUM SPAWNER
" + "by Nerun Rev.154", (bool)true, (bool)false); + AddBlackAlpha(101, 124, 241, 47); + AddLabel(109, 126, 52, @"CONVERSION UTILITY"); + AddLabel(127, 148, 52, @"RunUO Spawners to Premium"); + AddButton(110, 151, 1210, 1209, 127, GumpButtonType.Reply, 0); + AddBlackAlpha(101, 177, 241, 134); + AddLabel(109, 179, 52, @"CUSTOM REGIONS IN A BOX"); + AddLabel(127, 201, 52, @"Add a Region Controler"); + AddLabel(127, 222, 52, @"(double-click the Region"); + AddLabel(127, 243, 52, @"Controller to configure it region."); + AddLabel(127, 264, 52, @"Every Controller control one"); + AddLabel(127, 286, 52, @"region. Don't forget to prop)"); + AddButton(110, 204, 1210, 1209, 128, GumpButtonType.Reply, 0); + //Page change + AddLabel(207, 463, 200, @"3/3"); + AddButton(189, 465, 5603, 5607, 0, GumpButtonType.Page, 2); //back + } + + public static void DoThis( Mobile from, string command) + { + string prefix = Server.Commands.CommandSystem.Prefix; + CommandSystem.Handle( from, String.Format( "{0}{1}", prefix, command ) ); + CommandSystem.Handle( from, String.Format( "{0}spawner", prefix ) ); + } + + public override void OnResponse(NetState sender, RelayInfo info) + { + Mobile from = sender.Mobile; + + switch(info.ButtonID) + { + case 0: + { + //Quit + break; + } + case 101: + { + DoThis( from, "createworld" ); + break; + } + case 102: + { + DoThis( from, "clearall" ); + break; + } + case 103: + { + from.Say( "SPAWNING UO Classic..." ); + DoThis( from, "spawngen uoclassic/UOClassic.map" ); + break; + } + case 104: + { + DoThis( from, "SpawnUOML" ); + break; + } + case 105: + { + DoThis( from, "SpawnCurrent" ); + break; + } + //DoThis( from106, "" ); + //DoThis( from107, "" ); + //DoThis( from108, "" ); + case 109: + { + DoThis( from, "spawngen unload 1000" ); + break; + } + case 110: + { + DoThis( from, "UnloadUOML" ); + break; + } + case 111: + { + DoThis( from, "UnloadCurrent" ); + break; + } + //DoThis( from112, "" ); + //DoThis( from113, "" ); + //DoThis( from114, "" ); + case 115: + { + DoThis( from, "GenSeers" ); + break; + } + case 116: + { + DoThis( from, "RemSeers" ); + break; + } + case 117: + { + DoThis( from, "spawngen save" ); + break; + } + case 118: + { + DoThis( from, "spawngen savebyhand" ); + break; + } + case 119: + { + DoThis( from, "GumpSaveRegion" ); + break; + } + case 120: + { + DoThis( from, "GumpSaveCoordinate" ); + break; + } + case 121: + { + DoThis( from, "spawngen remove" ); + break; + } + case 122: + { + DoThis( from, "spawngen cleanfacet" ); + break; + } + case 123: + { + DoThis( from, "GumpRemoveID" ); + break; + } + case 124: + { + DoThis( from, "GumpRemoveCoordinate" ); + break; + } + case 125: + { + DoThis( from, "GumpRemoveRegion" ); + break; + } + case 126: + { + DoThis( from, "SpawnEditor" ); + break; + } + case 127: + { + DoThis( from, "RunUOSpawnerExporter" ); + break; + } + case 128: + { + DoThis( from, "Add RegionControl" ); + break; + } + } + } + } +} diff --git a/Scripts/Engines/Spawner/RunUOSpawnerExporter.cs b/Scripts/Engines/Spawner/RunUOSpawnerExporter.cs new file mode 100644 index 0000000..33f2c4a --- /dev/null +++ b/Scripts/Engines/Spawner/RunUOSpawnerExporter.cs @@ -0,0 +1,156 @@ +//Engine r154 +using System; +using System.IO; +using System.Text; +using System.Collections.Generic; +using Server; +using Server.Mobiles; +using Server.Items; + +namespace Server.Commands +{ + public class RunUOSpawnerExporter + { + public const bool Enabled = true; + + public static bool IsLinux + { + get + { + int p = (int) Environment.OSVersion.Platform; + return (p == 4) || (p == 6) || (p == 128); + } + } + + public static void Initialize() + { + CommandSystem.Register( "RunUOSpawnerExporter" , AccessLevel.Administrator, new CommandEventHandler( RunUOSpawnerExporter_OnCommand ) ); + CommandSystem.Register( "RSE" , AccessLevel.Administrator, new CommandEventHandler( RunUOSpawnerExporter_OnCommand ) ); + } + + public static int ConvertToInt( TimeSpan ts ) + { + return ( ( ts.Hours * 60 ) + ts.Minutes + (ts.Seconds/60) ); + } + + [Usage( "RunUOSpawnerExporter" )] + [Aliases( "RSE" )] + [Description( "Convert RunUO Spawners to PremiumSpawners." )] + public static void RunUOSpawnerExporter_OnCommand( CommandEventArgs e ) + { + Map map = e.Mobile.Map; + List list = new List(); + + string bar = "\\"; + + if (IsLinux == true) + bar = "/"; + + string path = @"."+bar+"Data"+bar+"Spawns"+bar; + + if ( !Directory.Exists( path ) ) + Directory.CreateDirectory( path ); + + using ( StreamWriter op = new StreamWriter( String.Format( path+"{0}-exported.map", map ) ) ) + { + + if ( map == null || map == Map.Internal ) + { + e.Mobile.SendMessage( "You may not run that command here." ); + return; + } + + e.Mobile.SendMessage( "Converting Spawners..." ); + + foreach ( Item item in World.Items.Values ) + { + if ( item.Map == map && item.Parent == null && item is Spawner ) + list.Add( item ); + } + + foreach ( Spawner spawner in list ) + { + string mapfinal = ""; + + string walkrange = ""; + + if(map == Map.Maps[0]) + { + mapfinal = "1"; + } + else if(map == Map.Maps[1]) + { + mapfinal = "2"; + } + else if(map == Map.Maps[2]) + { + mapfinal = "3"; + } + else if(map == Map.Maps[3]) + { + mapfinal = "4"; + } + else if(map == Map.Maps[4]) + { + mapfinal = "5"; + } + else + { + mapfinal = "6"; + } + + if( spawner.WalkingRange == -1 ) + { + walkrange = spawner.HomeRange.ToString(); + } + else + { + walkrange = spawner.WalkingRange.ToString(); + } + + int MinDelay = ConvertToInt(spawner.MinDelay); + + if (MinDelay < 1) + { + MinDelay = 1; + } + + int MaxDelay = ConvertToInt(spawner.MaxDelay); + + if (MaxDelay < MinDelay) + { + MaxDelay = MinDelay; + } + + string towrite = "*|"; + + if( spawner.SpawnNames.Count > 0 ) + { + towrite = "*|" + spawner.SpawnNames[0]; + + for ( int i = 1; i < spawner.SpawnNames.Count; ++i ) + { + towrite = towrite + ":" + spawner.SpawnNames[i].ToString(); + } + } + + if ( spawner.SpawnNames.Count > 0 && spawner.Running == true ) + { + op.WriteLine( "{0}||||||{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|1|{9}|0|0|0|0|0", towrite, spawner.X, spawner.Y, spawner.Z, mapfinal, MinDelay, MaxDelay, walkrange, spawner.HomeRange, spawner.Count); + } + + if( spawner.SpawnNames.Count == 0 ) + { + op.WriteLine( "## Void: {0}||||||{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|1|{9}|0|0|0|0|0", towrite, spawner.X, spawner.Y, spawner.Z, mapfinal, MinDelay, MaxDelay, walkrange, spawner.HomeRange, spawner.Count); + } + + if( spawner.SpawnNames.Count > 0 && spawner.Running == false ) + { + op.WriteLine( "## Inactive: {0}||||||{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|1|{9}|0|0|0|0|0", towrite, spawner.X, spawner.Y, spawner.Z, mapfinal, MinDelay, MaxDelay, walkrange, spawner.HomeRange, spawner.Count); + } + } + e.Mobile.SendMessage( String.Format( "You exported {0} RunUO Spawner{1} from this facet.", list.Count, list.Count == 1 ? "" : "s" ) ); + } + } + } +} diff --git a/Scripts/Engines/Spawner/SpawnEditor.cs b/Scripts/Engines/Spawner/SpawnEditor.cs new file mode 100644 index 0000000..c3b3ff4 --- /dev/null +++ b/Scripts/Engines/Spawner/SpawnEditor.cs @@ -0,0 +1,1017 @@ +///////////////////////////////////// +// SPAWN EDITOR // +// This SpawnEditor is a huge mod // +// of "ZenArcher's SpawnEditor v2" // +// By Nerun // +///////////////////////////////////// +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Network; +using Server.Regions; +using Server.Commands; + +namespace Server.Gumps +{ + public class SpawnEditorGump : Gump + { + private int m_page; + private ArrayList m_tempList; + public Item m_selSpawner; + + public int page + { + get{ return m_page; } + set{ m_page = value; } + } + + public Item selSpawner + { + get{ return m_selSpawner; } + set{ m_selSpawner = value; } + } + + public ArrayList tempList + { + get{ return m_tempList; } + set{ m_tempList = value; } + } + + public static void Initialize() + { + CommandSystem.Register( "SpawnEditor", AccessLevel.GameMaster, new CommandEventHandler( SpawnEditor_OnCommand ) ); + CommandSystem.Register( "Editor", AccessLevel.GameMaster, new CommandEventHandler( SpawnEditor_OnCommand ) ); + } + + public static void Register( string command, AccessLevel access, CommandEventHandler handler ) + { + CommandSystem.Register( command, access, handler ); + } + + [Usage( "SpawnEditor" )] + [Aliases( "Editor" )] + [Description( "Used to find and edit spawns" )] + public static void SpawnEditor_OnCommand( CommandEventArgs e ) + { + Mobile from = e.Mobile; + SpawnEditor_OnCommand( from ); + } + + public static void SpawnEditor_OnCommand( Mobile from ) + { + ArrayList worldList = new ArrayList(); + ArrayList facetList = new ArrayList(); + + Type type = ScriptCompiler.FindTypeByName( "PremiumSpawner", true ); + + if ( type == typeof( Item ) || type.IsSubclassOf( typeof( Item ) ) ) + { + bool isAbstract = type.IsAbstract; + + foreach ( Item item in World.Items.Values ) + { + if ( isAbstract ? item.GetType().IsSubclassOf( type ) : item.GetType() == type ) + worldList.Add( item ); + } + } + + foreach( PremiumSpawner worldSpnr in worldList ) + { + if( worldSpnr.Map == from.Map ) + facetList.Add( worldSpnr ); + } + +//TODO: Sort spawner list + + SpawnEditor_OnCommand( from, 0, facetList ); + } + + public static void SpawnEditor_OnCommand( Mobile from, int page, ArrayList currentList ) + { + SpawnEditor_OnCommand( from, page, currentList, 0 ); + } + + public static void SpawnEditor_OnCommand( Mobile from, int page, ArrayList currentList, int selected ) + { + SpawnEditor_OnCommand( from, page, currentList, selected, null ); + } + + public static void SpawnEditor_OnCommand( Mobile from, int page, ArrayList currentList, int selected, Item selSpawner ) + { + from.SendGump( new SpawnEditorGump( from, page, currentList, selected, selSpawner ) ); + } + + public SpawnEditorGump( Mobile from, int page, ArrayList currentList, int selected, Item spwnr ) : base( 50, 40 ) + { + tempList = new ArrayList(); + Mobile m = from; + m_page = page; + Region r = from.Region; + Map map = from.Map; + int buttony = 60; + int buttonID = 1; + int listnum = 0; + + tempList = currentList; + + selSpawner = spwnr; + + AddPage(0); + + AddBackground( 0, 0, 600, 450, 5054 ); + AddImageTiled( 8, 8, 584, 40, 2624 ); + AddAlphaRegion( 8, 8, 584, 40 ); + AddImageTiled( 8, 50, 250, 396, 2624 ); + AddAlphaRegion( 8, 50, 250, 396 ); + AddImageTiled( 260, 50, 332, 396, 2624 ); + AddAlphaRegion( 260, 50, 332, 396 ); + AddLabel( 220, 20, 52, "PREMIUM SPAWNER EDITOR" ); + AddButton( 550, 405, 0x158A, 0x158B, 10002, GumpButtonType.Reply, 1 ); //Quit Button + AddButton( 275, 412, 0x845, 0x846, 10008, GumpButtonType.Reply, 0 ); // Refresh button + AddLabel( 300, 410, 52, "Refresh" ); + + if( currentList.Count == 0 ) + AddLabel( 50, 210, 52, "No Premium Spawners Found" ); + else + { + if( page == 0 ) + { + if( currentList.Count < 15 ) + listnum = currentList.Count; + else + listnum = 15; + + for( int x = 0; x < listnum; x++ ) + { + Item spawnr = null; + + if( currentList[x] is Item ) + spawnr = currentList[x] as Item; + + string gumpMsg = ""; + + Point3D spawnr3D = new Point3D( ( new Point2D( spawnr.X, spawnr.Y ) ), spawnr.Z ); + Region spawnrRegion = Region.Find( spawnr3D, map ); + + if( spawnrRegion.ToString() == "" ) + gumpMsg = "PremiumSpawner at " + spawnr.X.ToString() + ", " + spawnr.Y.ToString(); + else + gumpMsg = spawnrRegion.ToString(); + + AddButton( 25, buttony, 0x845, 0x846, buttonID, GumpButtonType.Reply, 0 ); + AddLabel( 55, buttony, 52, gumpMsg ); + buttony += 25; + buttonID += 1; + } + } + + else if( page > 0 ) + { + if( currentList.Count < 15 + ( 15 * page ) ) + listnum = currentList.Count; + else + listnum = 15 + ( 15 * page ); + + for( int x = 15 * page; x < listnum; x++ ) + { + Item spawnr = null; + buttonID = x+1; + + if( currentList[x] is Item ) + spawnr = currentList[x] as Item; + + string gumpMsg = ""; + + Point3D spawnr3D = new Point3D( ( new Point2D( spawnr.X, spawnr.Y ) ), spawnr.Z ); + Region spawnrRegion = Region.Find( spawnr3D, map ); + + if( spawnrRegion.ToString() == "" ) + gumpMsg = "PremiumSpawner at " + spawnr.X.ToString() + ", " + spawnr.Y.ToString(); + else + gumpMsg = spawnrRegion.ToString(); + + AddButton( 25, buttony, 0x845, 0x846, buttonID, GumpButtonType.Reply, 0 ); + AddLabel( 55, buttony, 52, gumpMsg ); + buttony += 25; + } + } + } + + if( page == 0 && currentList.Count > 15 ) + AddButton( 450, 20, 0x15E1, 0x15E5, 10000, GumpButtonType.Reply, 0 ); + else if( page > 0 && currentList.Count > 15 + ( page * 15 ) ) + AddButton( 450, 20, 0x15E1, 0x15E5, 10000, GumpButtonType.Reply, 0 ); + + if( page != 0 ) + AddButton( 150, 20, 0x15E3, 0x15E7, 10001, GumpButtonType.Reply, 0 ); + + int pageNum = (int)currentList.Count / 15; + int rem = currentList.Count % 15; + int totPages = 0; + + string stotPages = ""; + + if( rem > 0 ) + { + totPages = pageNum + 1; + stotPages = totPages.ToString(); + } + else + stotPages = pageNum.ToString(); + + string pageText = "Page " + ( page + 1 ) + " of " + stotPages; + + AddLabel( 40, 20, 52, pageText ); + + if( selected == 0 ) + InitializeStartingRightPanel(); + else if( selected == 1 ) + InitializeSelectedRightPanel(); + } + + public void InitializeStartingRightPanel() + { + AddLabel( 275, 65, 52, "Filter to current region only" ); + AddButton( 500, 65, 0x15E1, 0x15E5, 10003, GumpButtonType.Reply, 0 ); + + AddTextField( 275, 140, 50, 20, 0 ); + AddLabel( 275, 115, 52, "Filter by Distance" ); + AddButton( 500, 115, 0x15E1, 0x15E5, 10004, GumpButtonType.Reply, 0 ); + + AddTextField( 275, 190, 120, 20, 1 ); + AddLabel( 275, 165, 52, "Search Spawners by Creature" ); + AddButton( 500, 165, 0x15E1, 0x15E5, 10009, GumpButtonType.Reply, 0 ); + + AddTextField( 275, 240, 50, 20, 2 ); + AddLabel( 275, 215, 52, "Search Spawners by SpawnID" ); + AddButton( 500, 215, 0x15E1, 0x15E5, 10010, GumpButtonType.Reply, 0 ); + } + + public void InitializeSelectedRightPanel() + { + string spX = selSpawner.X.ToString(); + string spY = selSpawner.Y.ToString(); + string spnText = "PremiumSpawner at " + spX + ", " + spY; + + AddLabel( 350, 65, 52, spnText ); + + PremiumSpawner initSpn = selSpawner as PremiumSpawner; + int strNum = 0; + string spns = "Containing: "; + string spnsNEW = ""; + string spns1 = ""; + string spns2 = ""; + string spns3 = ""; + + for( int i = 0; i < initSpn.CreaturesName.Count; i++ ) + { + if( strNum == 0 ) + { + if( i < initSpn.CreaturesName.Count - 1 ) + { + if( spns.Length + initSpn.CreaturesName[i].ToString().Length < 50 ) + spnsNEW += (string)initSpn.CreaturesName[i] + ", "; + else + { + strNum = 1; + spns1 += (string)initSpn.CreaturesName[i] + ", "; + } + } + else + spnsNEW += (string)initSpn.CreaturesName[i]; + } + else if( strNum == 1 ) + { + if( i < initSpn.CreaturesName.Count - 1 ) + { + if( spns1.Length + initSpn.CreaturesName[i].ToString().Length < 50 ) + spns1 += (string)initSpn.CreaturesName[i] + ", "; + else + { + strNum = 2; + spns2 += (string)initSpn.CreaturesName[i] + ", "; + } + } + else + { + if( spns1.Length + initSpn.CreaturesName[i].ToString().Length < 50 ) + spns1 += (string)initSpn.CreaturesName[i]; + else + { + strNum = 3; + spns2 += (string)initSpn.CreaturesName[i]; + } + } + } + else if( strNum == 2 ) + { + if( i < initSpn.CreaturesName.Count - 1 ) + { + if( spns2.Length + initSpn.CreaturesName[i].ToString().Length < 50 ) + spns2 += (string)initSpn.CreaturesName[i] + ", "; + else + { + strNum = 3; + spns3 += (string)initSpn.CreaturesName[i] + ", "; + } + } + else + { + if( spns2.Length + initSpn.CreaturesName[i].ToString().Length < 50 ) + spns2 += (string)initSpn.CreaturesName[i]; + else + { + strNum = 4; + spns3 += (string)initSpn.CreaturesName[i]; + } + } + } + else if( strNum == 3 ) + { + if( i < initSpn.CreaturesName.Count - 1 ) + spns3 += (string)initSpn.CreaturesName[i] + ", "; + else + spns3 += (string)initSpn.CreaturesName[i]; + } + } + + string spnsNEWa = ""; + string spns1a = ""; + string spns2a = ""; + string spns3a = ""; + + for( int i = 0; i < initSpn.SubSpawnerA.Count; i++ ) + { + if( strNum == 0 ) + { + if( i < initSpn.SubSpawnerA.Count - 1 ) + { + if( spns.Length + initSpn.SubSpawnerA[i].ToString().Length < 50 ) + spnsNEWa += (string)initSpn.SubSpawnerA[i] + ", "; + else + { + strNum = 1; + spns1a += (string)initSpn.SubSpawnerA[i] + ", "; + } + } + else + spnsNEWa += (string)initSpn.SubSpawnerA[i]; + } + else if( strNum == 1 ) + { + if( i < initSpn.SubSpawnerA.Count - 1 ) + { + if( spns1a.Length + initSpn.SubSpawnerA[i].ToString().Length < 50 ) + spns1a += (string)initSpn.SubSpawnerA[i] + ", "; + else + { + strNum = 2; + spns2a += (string)initSpn.SubSpawnerA[i] + ", "; + } + } + else + { + if( spns1a.Length + initSpn.SubSpawnerA[i].ToString().Length < 50 ) + spns1a += (string)initSpn.SubSpawnerA[i]; + else + { + strNum = 3; + spns2a += (string)initSpn.SubSpawnerA[i]; + } + } + } + else if( strNum == 2 ) + { + if( i < initSpn.SubSpawnerA.Count - 1 ) + { + if( spns2a.Length + initSpn.SubSpawnerA[i].ToString().Length < 50 ) + spns2a += (string)initSpn.SubSpawnerA[i] + ", "; + else + { + strNum = 3; + spns3a += (string)initSpn.SubSpawnerA[i] + ", "; + } + } + else + { + if( spns2a.Length + initSpn.SubSpawnerA[i].ToString().Length < 50 ) + spns2a += (string)initSpn.SubSpawnerA[i]; + else + { + strNum = 4; + spns3a += (string)initSpn.SubSpawnerA[i]; + } + } + } + else if( strNum == 3 ) + { + if( i < initSpn.SubSpawnerA.Count - 1 ) + spns3a += (string)initSpn.SubSpawnerA[i] + ", "; + else + spns3a += (string)initSpn.SubSpawnerA[i]; + } + } + + string spnsNEWb = ""; + string spns1b = ""; + string spns2b = ""; + string spns3b = ""; + + for( int i = 0; i < initSpn.SubSpawnerB.Count; i++ ) + { + if( strNum == 0 ) + { + if( i < initSpn.SubSpawnerB.Count - 1 ) + { + if( spns.Length + initSpn.SubSpawnerB[i].ToString().Length < 50 ) + spnsNEWb += (string)initSpn.SubSpawnerB[i] + ", "; + else + { + strNum = 1; + spns1b += (string)initSpn.SubSpawnerB[i] + ", "; + } + } + else + spnsNEWb += (string)initSpn.SubSpawnerB[i]; + } + else if( strNum == 1 ) + { + if( i < initSpn.SubSpawnerB.Count - 1 ) + { + if( spns1b.Length + initSpn.SubSpawnerB[i].ToString().Length < 50 ) + spns1b += (string)initSpn.SubSpawnerB[i] + ", "; + else + { + strNum = 2; + spns2b += (string)initSpn.SubSpawnerB[i] + ", "; + } + } + else + { + if( spns1b.Length + initSpn.SubSpawnerB[i].ToString().Length < 50 ) + spns1b += (string)initSpn.SubSpawnerB[i]; + else + { + strNum = 3; + spns2b += (string)initSpn.SubSpawnerB[i]; + } + } + } + else if( strNum == 2 ) + { + if( i < initSpn.SubSpawnerB.Count - 1 ) + { + if( spns2b.Length + initSpn.SubSpawnerB[i].ToString().Length < 50 ) + spns2b += (string)initSpn.SubSpawnerB[i] + ", "; + else + { + strNum = 3; + spns3b += (string)initSpn.SubSpawnerB[i] + ", "; + } + } + else + { + if( spns2b.Length + initSpn.SubSpawnerB[i].ToString().Length < 50 ) + spns2b += (string)initSpn.SubSpawnerB[i]; + else + { + strNum = 4; + spns3b += (string)initSpn.SubSpawnerB[i]; + } + } + } + else if( strNum == 3 ) + { + if( i < initSpn.SubSpawnerB.Count - 1 ) + spns3b += (string)initSpn.SubSpawnerB[i] + ", "; + else + spns3b += (string)initSpn.SubSpawnerB[i]; + } + } + + string spnsNEWc = ""; + string spns1c = ""; + string spns2c = ""; + string spns3c = ""; + + for( int i = 0; i < initSpn.SubSpawnerC.Count; i++ ) + { + if( strNum == 0 ) + { + if( i < initSpn.SubSpawnerC.Count - 1 ) + { + if( spns.Length + initSpn.SubSpawnerC[i].ToString().Length < 50 ) + spnsNEWc += (string)initSpn.SubSpawnerC[i] + ", "; + else + { + strNum = 1; + spns1c += (string)initSpn.SubSpawnerC[i] + ", "; + } + } + else + spnsNEWc += (string)initSpn.SubSpawnerC[i]; + } + else if( strNum == 1 ) + { + if( i < initSpn.SubSpawnerC.Count - 1 ) + { + if( spns1c.Length + initSpn.SubSpawnerC[i].ToString().Length < 50 ) + spns1c += (string)initSpn.SubSpawnerC[i] + ", "; + else + { + strNum = 2; + spns2c += (string)initSpn.SubSpawnerC[i] + ", "; + } + } + else + { + if( spns1c.Length + initSpn.SubSpawnerC[i].ToString().Length < 50 ) + spns1c += (string)initSpn.SubSpawnerC[i]; + else + { + strNum = 3; + spns2c += (string)initSpn.SubSpawnerC[i]; + } + } + } + else if( strNum == 2 ) + { + if( i < initSpn.SubSpawnerC.Count - 1 ) + { + if( spns2c.Length + initSpn.SubSpawnerC[i].ToString().Length < 50 ) + spns2c += (string)initSpn.SubSpawnerC[i] + ", "; + else + { + strNum = 3; + spns3c += (string)initSpn.SubSpawnerC[i] + ", "; + } + } + else + { + if( spns2c.Length + initSpn.SubSpawnerC[i].ToString().Length < 50 ) + spns2c += (string)initSpn.SubSpawnerC[i]; + else + { + strNum = 4; + spns3c += (string)initSpn.SubSpawnerC[i]; + } + } + } + else if( strNum == 3 ) + { + if( i < initSpn.SubSpawnerC.Count - 1 ) + spns3c += (string)initSpn.SubSpawnerC[i] + ", "; + else + spns3c += (string)initSpn.SubSpawnerC[i]; + } + } + + string spnsNEWd = ""; + string spns1d = ""; + string spns2d = ""; + string spns3d = ""; + + for( int i = 0; i < initSpn.SubSpawnerD.Count; i++ ) + { + if( strNum == 0 ) + { + if( i < initSpn.SubSpawnerD.Count - 1 ) + { + if( spns.Length + initSpn.SubSpawnerD[i].ToString().Length < 50 ) + spnsNEWd += (string)initSpn.SubSpawnerD[i] + ", "; + else + { + strNum = 1; + spns1d += (string)initSpn.SubSpawnerD[i] + ", "; + } + } + else + spnsNEWd += (string)initSpn.SubSpawnerD[i]; + } + else if( strNum == 1 ) + { + if( i < initSpn.SubSpawnerD.Count - 1 ) + { + if( spns1d.Length + initSpn.SubSpawnerD[i].ToString().Length < 50 ) + spns1d += (string)initSpn.SubSpawnerD[i] + ", "; + else + { + strNum = 2; + spns2d += (string)initSpn.SubSpawnerD[i] + ", "; + } + } + else + { + if( spns1d.Length + initSpn.SubSpawnerD[i].ToString().Length < 50 ) + spns1d += (string)initSpn.SubSpawnerD[i]; + else + { + strNum = 3; + spns2d += (string)initSpn.SubSpawnerD[i]; + } + } + } + else if( strNum == 2 ) + { + if( i < initSpn.SubSpawnerD.Count - 1 ) + { + if( spns2d.Length + initSpn.SubSpawnerD[i].ToString().Length < 50 ) + spns2d += (string)initSpn.SubSpawnerD[i] + ", "; + else + { + strNum = 3; + spns3d += (string)initSpn.SubSpawnerD[i] + ", "; + } + } + else + { + if( spns2d.Length + initSpn.SubSpawnerD[i].ToString().Length < 50 ) + spns2d += (string)initSpn.SubSpawnerD[i]; + else + { + strNum = 4; + spns3d += (string)initSpn.SubSpawnerD[i]; + } + } + } + else if( strNum == 3 ) + { + if( i < initSpn.SubSpawnerD.Count - 1 ) + spns3d += (string)initSpn.SubSpawnerD[i] + ", "; + else + spns3d += (string)initSpn.SubSpawnerD[i]; + } + } + + string spnsNEWe = ""; + string spns1e = ""; + string spns2e = ""; + string spns3e = ""; + + for( int i = 0; i < initSpn.SubSpawnerE.Count; i++ ) + { + if( strNum == 0 ) + { + if( i < initSpn.SubSpawnerE.Count - 1 ) + { + if( spns.Length + initSpn.SubSpawnerE[i].ToString().Length < 50 ) + spnsNEWe += (string)initSpn.SubSpawnerE[i] + ", "; + else + { + strNum = 1; + spns1e += (string)initSpn.SubSpawnerE[i] + ", "; + } + } + else + spnsNEWe += (string)initSpn.SubSpawnerE[i]; + } + else if( strNum == 1 ) + { + if( i < initSpn.SubSpawnerE.Count - 1 ) + { + if( spns1e.Length + initSpn.SubSpawnerE[i].ToString().Length < 50 ) + spns1e += (string)initSpn.SubSpawnerE[i] + ", "; + else + { + strNum = 2; + spns2e += (string)initSpn.SubSpawnerE[i] + ", "; + } + } + else + { + if( spns1e.Length + initSpn.SubSpawnerE[i].ToString().Length < 50 ) + spns1e += (string)initSpn.SubSpawnerE[i]; + else + { + strNum = 3; + spns2e += (string)initSpn.SubSpawnerE[i]; + } + } + } + else if( strNum == 2 ) + { + if( i < initSpn.SubSpawnerE.Count - 1 ) + { + if( spns2e.Length + initSpn.SubSpawnerE[i].ToString().Length < 50 ) + spns2e += (string)initSpn.SubSpawnerE[i] + ", "; + else + { + strNum = 3; + spns3e += (string)initSpn.SubSpawnerE[i] + ", "; + } + } + else + { + if( spns2e.Length + initSpn.SubSpawnerE[i].ToString().Length < 50 ) + spns2e += (string)initSpn.SubSpawnerE[i]; + else + { + strNum = 4; + spns3e += (string)initSpn.SubSpawnerE[i]; + } + } + } + else if( strNum == 3 ) + { + if( i < initSpn.SubSpawnerE.Count - 1 ) + spns3e += (string)initSpn.SubSpawnerE[i] + ", "; + else + spns3e += (string)initSpn.SubSpawnerE[i]; + } + } + + AddLabel( 275, 85, 52, spns ); + AddLabel( 280, 110, 52, "[1]" ); + AddLabel( 280, 180, 52, "[2]" ); + AddLabel( 280, 250, 52, "[3]" ); + AddLabel( 425, 110, 52, "[4]" ); + AddLabel( 425, 180, 52, "[5]" ); + AddLabel( 425, 250, 52, "[6]" ); + AddHtml( 300, 110, 115, 65, spnsNEW, true, true ); + AddHtml( 300, 180, 115, 65, spnsNEWa, true, true ); + AddHtml( 300, 250, 115, 65, spnsNEWb, true, true ); + AddHtml( 445, 110, 115, 65, spnsNEWc, true, true ); + AddHtml( 445, 180, 115, 65, spnsNEWd, true, true ); + AddHtml( 445, 250, 115, 65, spnsNEWe, true, true ); + if( spns1 != "" ) + AddLabel( 275, 105, 200, spns1 ); + + if( spns2 != "" ) + AddLabel( 275, 125, 200, spns2 ); + + if( spns3 != "" ) + AddLabel( 275, 145, 200, spns3 ); + + AddLabel( 320, 320, 52, "Go to Spawner" ); + AddButton( 525, 320, 0x15E1, 0x15E5, 10005, GumpButtonType.Reply, 1 ); + AddLabel( 320, 345, 52, "Delete Selected Spawner" ); + AddButton( 525, 345, 0x15E1, 0x15E5, 10006, GumpButtonType.Reply, 0 ); + AddLabel( 320, 370, 52, "Edit Spawns" ); + AddButton( 525, 370, 0x15E1, 0x15E5, 10007, GumpButtonType.Reply, 0 ); + } + + public List CreateArray( RelayInfo info, Mobile from ) + { + List creaturesName = new List(); + + for ( int i = 0; i < 13; i++ ) + { + TextRelay te = info.GetTextEntry( i ); + + if ( te != null ) + { + string str = te.Text; + + if ( str.Length > 0 ) + { + str = str.Trim(); + + Type type = SpawnerType.GetType( str ); + + if ( type != null ) + creaturesName.Add( str ); + else + AddLabel( 70, 230, 39, "Invalid Search String" ); + } + } + } + + return creaturesName; + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + int buttonNum = 0; + ArrayList currentList = new ArrayList( tempList ); + int page = m_page; + + if( info.ButtonID > 0 && info.ButtonID < 10000 ) + buttonNum = 1; + else + buttonNum = info.ButtonID; + + switch( buttonNum ) + { + case 0: + { + //Close + break; + } + case 1: + { + selSpawner = currentList[ info.ButtonID - 1 ] as Item; + SpawnEditor_OnCommand( from, page, currentList, 1, selSpawner ); + break; + } + case 10000: + { + if( m_page * 10 < currentList.Count ) + { + page = m_page += 1; + SpawnEditor_OnCommand( from, page, currentList ); + } + break; + } + case 10001: + { + if( m_page != 0 ) + { + page = m_page -= 1; + SpawnEditor_OnCommand( from, page, currentList ); + } + break; + } + case 10002: + { + //Close + break; + } + case 10003: // Filter to current region only + { + FilterByRegion( from, tempList, from.Region, from.Map, page ); + break; + } + case 10004: // Filter by Distance + { + TextRelay oDis = info.GetTextEntry( 0 ); + string sDis = ( oDis == null ? "" : oDis.Text.Trim() ); + if( sDis != "" ) + { + try + { + int distance = Convert.ToInt32( sDis ); + FilterByDistance( tempList, from, distance, page ); } + catch + { + from.SendMessage( "Distance must be a number" ); + SpawnEditor_OnCommand( from, page, currentList ); + } + } + else + { + from.SendMessage( "You must specify a distance" ); + SpawnEditor_OnCommand( from, page, currentList ); + } + break; + } + case 10005: // Go to Spawner + { + from.Location = new Point3D( selSpawner.X, selSpawner.Y, selSpawner.Z ); + SpawnEditor_OnCommand( from, page, currentList, 1, selSpawner ); + break; + } + case 10006: // Delete Selected Spawner + { + selSpawner.Delete(); + SpawnEditor_OnCommand( from ); + break; + } + case 10007: // Edit Spawns (Premium Sapwner Gump) + { + from.SendGump( new PremiumSpawnerGump( selSpawner as PremiumSpawner ) ); + SpawnEditor_OnCommand( from, page, currentList, 1, selSpawner ); + break; + } + case 10008: // Refresh button + { + SpawnEditor_OnCommand( from ); + break; + } + case 10009: // Search Spawners by Creature + { + TextRelay oSearch = info.GetTextEntry( 1 ); + string sSearch = ( oSearch == null ? null : oSearch.Text.Trim() ); + SearchByName( tempList, from, sSearch, page ); + break; + } + case 10010: // Search Spawners by SpawnID + { + TextRelay oID = info.GetTextEntry( 2 ); + string sID = ( oID == null ? "" : oID.Text.Trim() ); + if( sID != "" ) + { + try + { + int SearchID = Convert.ToInt32( sID ); + SearchByID( tempList, from, SearchID, page ); } + catch + { + from.SendMessage( "SpawnID must be a number" ); + SpawnEditor_OnCommand( from, page, currentList ); + } + } + else + { + from.SendMessage( "You must specify a SpawnID" ); + SpawnEditor_OnCommand( from, page, currentList ); + } + break; + } + } + } + + + public static void FilterByRegion( Mobile from, ArrayList facetList, Region regr, Map regmap, int page ) + { + ArrayList filregList = new ArrayList(); + + foreach( Item regItem in facetList ) + { + Point2D p2 = new Point2D( regItem.X, regItem.Y ); + Point3D p = new Point3D( p2, regItem.Z ); + + if( Region.Find( p, regmap ) == regr ) + filregList.Add( regItem ); + } + + from.SendGump( new SpawnEditorGump( from, 0, filregList, 0, null ) ); + } + + public static void FilterByDistance( ArrayList currentList, Mobile m, int dis, int page ) + { + ArrayList fildisList = new ArrayList(); + + for( int z = 0; z < currentList.Count; z ++ ) + { + Item disItem = currentList[z] as Item; + + if( disItem.X >= m.X - dis && disItem.X <= m.X + dis && disItem.Y >= m.Y - dis && disItem.Y <= m.Y + dis ) + fildisList.Add( disItem ); + } + + m.SendGump( new SpawnEditorGump( m, 0, fildisList, 0, null ) ); + } + + public static void SearchByName( ArrayList currentList, Mobile from, string search, int page ) + { + ArrayList searchList = new ArrayList(); + + foreach( PremiumSpawner spn in currentList ) + { + foreach( string str in spn.CreaturesName ) + { + if( str.ToLower().IndexOf( search ) >= 0 ) + searchList.Add( spn ); + } + + foreach( string str in spn.SubSpawnerA ) + { + if( str.ToLower().IndexOf( search ) >= 0 ) + searchList.Add( spn ); + } + + foreach( string str in spn.SubSpawnerB ) + { + if( str.ToLower().IndexOf( search ) >= 0 ) + searchList.Add( spn ); + } + + foreach( string str in spn.SubSpawnerC ) + { + if( str.ToLower().IndexOf( search ) >= 0 ) + searchList.Add( spn ); + } + + foreach( string str in spn.SubSpawnerD ) + { + if( str.ToLower().IndexOf( search ) >= 0 ) + searchList.Add( spn ); + } + + foreach( string str in spn.SubSpawnerE ) + { + if( str.ToLower().IndexOf( search ) >= 0 ) + searchList.Add( spn ); + } + } + + from.SendGump( new SpawnEditorGump( from, 0, searchList, 0, null ) ); + } + + public static void SearchByID( ArrayList currentList, Mobile from, int SearchID, int page ) + { + ArrayList searchList = new ArrayList(); + + foreach( PremiumSpawner spn in currentList ) + { + if ( ((PremiumSpawner)spn).SpawnID == SearchID ) + { + searchList.Add( spn ); + } + } + + from.SendGump( new SpawnEditorGump( from, 0, searchList, 0, null ) ); + } + + public void AddTextField( int x, int y, int width, int height, int index ) + { + AddBackground( x - 2, y - 2, width + 4, height + 4, 0x2486 ); + AddTextEntry( x + 2, y + 2, width - 4, height - 4, 0, index, "" ); + } + } +} diff --git a/Scripts/Engines/Spawner/SpawnGen.cs b/Scripts/Engines/Spawner/SpawnGen.cs new file mode 100644 index 0000000..cc4ae8b --- /dev/null +++ b/Scripts/Engines/Spawner/SpawnGen.cs @@ -0,0 +1,646 @@ +//Engine r117 +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Server; +using Server.Mobiles; +using Server.Items; +using Server.Network; +using Server.Commands; +using Server.Regions; +using Server.Misc; + +namespace Server +{ + public class SpawnGenerator + { + private static int m_Count; + private static int m_MapOverride = -1; + private static int m_IDOverride = -1; + private static double m_MinTimeOverride = -1; + private static double m_MaxTimeOverride = -1; + private const bool TotalRespawn = true; + private const int Team = 0; + + public static void Initialize() + { + CommandSystem.Register( "SpawnGen", AccessLevel.Administrator, new CommandEventHandler( SpawnGen_OnCommand ) ); + } + + [Usage( "SpawnGen []|[unload ]|[remove |]|[save |][savebyhand][cleanfacet]" )] + [Description( "Complex command, it generate and remove spawners." )] + private static void SpawnGen_OnCommand( CommandEventArgs e ) + { + //wrong use + if ( e.ArgString == null || e.ArgString == "" ) + { + e.Mobile.SendMessage( "Usage: SpawnGen []|[remove ||]|[save ||]" ); + } + //[spawngen remove and [spawngen remove region + else if ( e.Arguments[0].ToLower() == "remove" && e.Arguments.Length == 2 ) + { + Remove( e.Mobile, e.Arguments[1].ToLower() ); + } + //[spawngen remove x1 y1 x2 y2 + else if ( e.Arguments[0].ToLower() == "remove" && e.Arguments.Length == 5 ) + { + int x1 = Utility.ToInt32( e.Arguments[1] ); + int y1 = Utility.ToInt32( e.Arguments[2] ); + int x2 = Utility.ToInt32( e.Arguments[3] ); + int y2 = Utility.ToInt32( e.Arguments[4] ); + RemoveByCoord( e.Mobile, x1, y1, x2, y2 ); + } + //[spawngen remove + else if ( e.ArgString.ToLower() == "remove" ) + { + Remove( e.Mobile, "" ); + } + //[spawngen save and [spawngen save region + else if ( e.Arguments[0].ToLower() == "save" && e.Arguments.Length == 2 ) + { + Save( e.Mobile, e.Arguments[1].ToLower() ); + } + //[spawngen unload SpawnID + else if ( e.Arguments[0].ToLower() == "unload" && e.Arguments.Length == 2 ) + { + int ID = Utility.ToInt32( e.Arguments[1] ); + Unload( ID ); + } + //[spawngen savebyhand + else if ( e.Arguments[0].ToLower() == "savebyhand" ) + { + SaveByHand(); + } + //[spawngen cleanfacet + else if ( e.Arguments[0].ToLower() == "cleanfacet" ) + { + CleanFacet( e.Mobile ); + } + ////[spawngen save x1 y1 x2 y2 + else if ( e.Arguments[0].ToLower() == "save" && e.Arguments.Length == 5 ) + { + int x1 = Utility.ToInt32( e.Arguments[1] ); + int y1 = Utility.ToInt32( e.Arguments[2] ); + int x2 = Utility.ToInt32( e.Arguments[3] ); + int y2 = Utility.ToInt32( e.Arguments[4] ); + SaveByCoord( e.Mobile, x1, y1, x2, y2 ); + } + //[spawngen save + else if ( e.ArgString.ToLower() == "save" ) + { + Save( e.Mobile, "" ); + } + else + { + Parse( e.Mobile, e.ArgString ); + } + } + + public static void Talk( string alfa ) + { + World.Broadcast( 0x35, true, "Spawns are being {0}, please wait.", alfa ); + } + + public static string GetRegion(Item item) + { + Region re = Region.Find(item.Location, item.Map); + string regname = re.ToString().ToLower(); + return regname; + } + + //[spawngen remove and [spawngen remove region + private static void Remove( Mobile from, string region ) + { + DateTime aTime = DateTime.Now; + int count = 0; + List itemtodo = new List(); + + string prefix = Server.Commands.CommandSystem.Prefix; + + if( region == null || region == "" ) + { + CommandSystem.Handle( from, String.Format( "{0}Global remove where premiumspawner", prefix ) ); + } + else + { + foreach( Item itemdel in World.Items.Values ) + { + if( itemdel is PremiumSpawner && itemdel.Map == from.Map ) + { + if( GetRegion(itemdel) == region ) + { + itemtodo.Add(itemdel); + count += 1; + } + } + } + + GenericRemove( itemtodo, count, aTime); + } + } + + //[spawngen unload SpawnID + private static void Unload( int ID ) + { + DateTime aTime = DateTime.Now; + int count = 0; + List itemtodo = new List(); + + foreach ( Item itemremove in World.Items.Values ) + { + if ( itemremove is PremiumSpawner && ((PremiumSpawner)itemremove).SpawnID == ID ) + { + itemtodo.Add( itemremove ); + count +=1; + } + } + + GenericRemove( itemtodo, count, aTime); + } + + //[spawngen remove x1 y1 x2 y2 + private static void RemoveByCoord( Mobile from, int x1, int y1, int x2, int y2 ) + { + DateTime aTime = DateTime.Now; + int count = 0; + List itemtodo = new List(); + + foreach ( Item itemremove in World.Items.Values ) + { + if ( itemremove is PremiumSpawner && ( ( itemremove.X >= x1 && itemremove.X <= x2 ) && ( itemremove.Y >= y1 && itemremove.Y <= y2 ) && itemremove.Map == from.Map ) ) + { + itemtodo.Add( itemremove ); + count +=1; + } + } + + GenericRemove( itemtodo, count, aTime); + } + + //[spawngen cleanfacet + //this is the old [SpawnRem + public static void CleanFacet( Mobile from ) + { + DateTime aTime = DateTime.Now; + int count = 0; + List itemtodo = new List(); + + foreach ( Item itemremove in World.Items.Values ) + { + if ( itemremove is PremiumSpawner && itemremove.Map == from.Map && itemremove.Parent == null ) + { + itemtodo.Add( itemremove ); + count +=1; + } + } + + GenericRemove( itemtodo, count, aTime); + } + + private static void GenericRemove( List colecao, int count, DateTime aTime ) + { + if( colecao.Count == 0 ) + { + World.Broadcast( 0x35, true, "There are no PremiumSpawners to be removed." ); + } + else + { + Talk("removed"); + + foreach ( Item item in colecao ) + { + item.Delete(); + } + + DateTime bTime = DateTime.Now; + World.Broadcast( 0x35, true, "{0} PremiumSpawners have been removed in {1:F1} seconds.", count, (bTime - aTime).TotalSeconds ); + } + } + + //[spawngen save and [spawngen save region + private static void Save( Mobile from, string region ) + { + DateTime aTime = DateTime.Now; + int count = 0; + List itemtodo = new List(); + string mapanome = region; + + if( region == "" ) + mapanome = "Spawns"; + + foreach ( Item itemsave in World.Items.Values ) + { + if ( itemsave is PremiumSpawner && ( region == null || region == "" ) ) + { + itemtodo.Add( itemsave ); + count +=1; + } + + else if ( itemsave is PremiumSpawner && itemsave.Map == from.Map ) + { + if ( GetRegion(itemsave) == region ) + { + itemtodo.Add( itemsave ); + count += 1; + } + } + } + + GenericSave( itemtodo, mapanome, count, aTime ); + } + + //[spawngen SaveByHand + private static void SaveByHand() + { + DateTime aTime = DateTime.Now; + int count = 0; + List itemtodo = new List(); + string mapanome = "SpawnsByHand"; + + foreach ( Item itemsave in World.Items.Values ) + { + if ( itemsave is PremiumSpawner && ((PremiumSpawner)itemsave).SpawnID == 1 ) + { + itemtodo.Add( itemsave ); + count +=1; + } + } + + GenericSave( itemtodo, mapanome, count, aTime ); + } + + //[spawngen save x1 y1 x2 y2 + private static void SaveByCoord( Mobile from, int x1, int y1, int x2, int y2 ) + { + DateTime aTime = DateTime.Now; + int count = 0; + List itemtodo = new List(); + string mapanome = "SpawnsByCoords"; + + foreach ( Item itemsave in World.Items.Values ) + { + if ( itemsave is PremiumSpawner && ( ( itemsave.X >= x1 && itemsave.X <= x2 ) && ( itemsave.Y >= y1 && itemsave.Y <= y2 ) && itemsave.Map == from.Map ) ) + { + itemtodo.Add( itemsave ); + count +=1; + } + } + + GenericSave( itemtodo, mapanome, count, aTime ); + } + + private static void GenericSave( List colecao, string mapa, int count, DateTime startTime ) + { + List itemssave = new List( colecao ); + string mapanome = mapa; + + if( itemssave.Count == 0 ) + { + World.Broadcast( 0x35, true, "There are no PremiumSpawners to be saved." ); + } + else + { + Talk("saved"); + + if ( !Directory.Exists( "Data/Spawns" ) ) + Directory.CreateDirectory( "Data/Spawns" ); + + string escreva = "Data/Spawns/" + mapanome + ".map"; + + using ( StreamWriter op = new StreamWriter( escreva ) ) + { + foreach ( PremiumSpawner itemsave2 in itemssave ) + { + int mapnumber = 0; + switch ( itemsave2.Map.ToString() ) + { + case "Britannia": + mapnumber = 1; + break; + case "Underworld": + mapnumber = 2; + break; + case "Darkness": + mapnumber = 3; + break; + case "Ocean": + mapnumber = 4; + break; + case "Grassland": + mapnumber = 5; + break; + default: + mapnumber = 6; + Console.WriteLine( "Monster Parser: Warning, unknown map {0}", itemsave2.Map ); + break; + } + + string timer1a = itemsave2.MinDelay.ToString(); + string[] timer1b = timer1a.Split( ':' ); //Broke the string hh:mm:ss in an array (hh, mm, ss) + int timer1c = ( Utility.ToInt32( timer1b[0] ) * 60 ) + Utility.ToInt32( timer1b[1] ); //multiply hh * 60 to find mm, then add mm + string timer1d = timer1c.ToString(); + if ( Utility.ToInt32( timer1b[0] ) == 0 && Utility.ToInt32( timer1b[1] ) == 0 ) //If hh and mm are 0, use seconds, else drop ss + timer1d = Utility.ToInt32( timer1b[2] ) + "s"; + + string timer2a = itemsave2.MaxDelay.ToString(); + string[] timer2b = timer2a.Split( ':' ); + int timer2c = ( Utility.ToInt32( timer2b[0] ) * 60 ) + Utility.ToInt32( timer2b[1] ); + string timer2d = timer2c.ToString(); + if ( Utility.ToInt32( timer2b[0] ) == 0 && Utility.ToInt32( timer2b[1] ) == 0 ) + timer2d = Utility.ToInt32( timer2b[2] ) + "s"; + + string towrite = ""; + string towriteA = ""; + string towriteB = ""; + string towriteC = ""; + string towriteD = ""; + string towriteE = ""; + + if ( itemsave2.CreaturesName.Count > 0 ) + towrite = itemsave2.CreaturesName[0].ToString(); + + if ( itemsave2.SubSpawnerA.Count > 0 ) + towriteA = itemsave2.SubSpawnerA[0].ToString(); + + if ( itemsave2.SubSpawnerB.Count > 0 ) + towriteB = itemsave2.SubSpawnerB[0].ToString(); + + if ( itemsave2.SubSpawnerC.Count > 0 ) + towriteC = itemsave2.SubSpawnerC[0].ToString(); + + if ( itemsave2.SubSpawnerD.Count > 0 ) + towriteD = itemsave2.SubSpawnerD[0].ToString(); + + if ( itemsave2.SubSpawnerE.Count > 0 ) + towriteE = itemsave2.SubSpawnerE[0].ToString(); + + for ( int i = 1; i < itemsave2.CreaturesName.Count; ++i ) + { + if ( itemsave2.CreaturesName.Count > 0 ) + towrite = towrite + ":" + itemsave2.CreaturesName[i].ToString(); + } + + for ( int i = 1; i < itemsave2.SubSpawnerA.Count; ++i ) + { + if ( itemsave2.SubSpawnerA.Count > 0 ) + towriteA = towriteA + ":" + itemsave2.SubSpawnerA[i].ToString(); + } + + for ( int i = 1; i < itemsave2.SubSpawnerB.Count; ++i ) + { + if ( itemsave2.SubSpawnerB.Count > 0 ) + towriteB = towriteB + ":" + itemsave2.SubSpawnerB[i].ToString(); + } + + for ( int i = 1; i < itemsave2.SubSpawnerC.Count; ++i ) + { + if ( itemsave2.SubSpawnerC.Count > 0 ) + towriteC = towriteC + ":" + itemsave2.SubSpawnerC[i].ToString(); + } + + for ( int i = 1; i < itemsave2.SubSpawnerD.Count; ++i ) + { + if ( itemsave2.SubSpawnerD.Count > 0 ) + towriteD = towriteD + ":" + itemsave2.SubSpawnerD[i].ToString(); + } + + for ( int i = 1; i < itemsave2.SubSpawnerE.Count; ++i ) + { + if ( itemsave2.SubSpawnerE.Count > 0 ) + towriteE = towriteE + ":" + itemsave2.SubSpawnerE[i].ToString(); + } + + op.WriteLine( "*|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}|{13}|{14}|{15}|{16}|{17}|{18}|{19}|{20}", towrite, towriteA, towriteB, towriteC, towriteD, towriteE, itemsave2.X, itemsave2.Y, itemsave2.Z, mapnumber, timer1d, timer2d, itemsave2.WalkingRange, itemsave2.HomeRange, itemsave2.SpawnID, itemsave2.Count, itemsave2.CountA, itemsave2.CountB, itemsave2.CountC, itemsave2.CountD, itemsave2.CountE ); + } + } + + DateTime endTime = DateTime.Now; + World.Broadcast( 0x35, true, "{0} spawns have been saved. The entire process took {1:F1} seconds.", count, (endTime - startTime).TotalSeconds ); + } + } + + public static void Parse( Mobile from, string filename ) + { + string monster_path1 = Path.Combine( Core.BaseDirectory, "Data/Spawns" ); + string monster_path = Path.Combine( monster_path1, filename ); + m_Count = 0; + + if ( File.Exists( monster_path ) ) + { + from.SendMessage( "Spawning {0}...", filename ); + m_MapOverride = -1; + m_IDOverride = -1; + m_MinTimeOverride = -1; + m_MaxTimeOverride = -1; + + using ( StreamReader ip = new StreamReader( monster_path ) ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + string[] split = line.Split( '|' ); + string[] splitA = line.Split( ' ' ); + + if ( splitA.Length == 2 ) + { + if ( splitA[0].ToLower() == "overridemap" ) + m_MapOverride = Utility.ToInt32( splitA[1] ); + if ( splitA[0].ToLower() == "overrideid" ) + m_IDOverride = Utility.ToInt32( splitA[1] ); + if ( splitA[0].ToLower() == "overridemintime" ) + m_MinTimeOverride = Utility.ToDouble( splitA[1] ); + if ( splitA[0].ToLower() == "overridemaxtime" ) + m_MaxTimeOverride = Utility.ToDouble( splitA[1] ); + } + + if ( split.Length < 19 ) + continue; + + switch( split[0].ToLower() ) + { + //Comment Line + case "##": + break; + //Place By class + case "*": + PlaceNPC( split[2].Split(':'), split[3].Split(':'), split[4].Split(':'), split[5].Split(':'), split[6].Split(':'), split[7], split[8], split[9], split[10], split[11], split[12], split[14], split[13], split[15], split[16], split[17], split[18], split[19], split[20], split[21], split[1].Split(':') ); + break; + //Place By Type + case "r": + PlaceNPC( split[2].Split(':'), split[3].Split(':'), split[4].Split(':'), split[5].Split(':'), split[6].Split(':'), split[7], split[8], split[9], split[10], split[11], split[12], split[14], split[13], split[15], split[16], split[17], split[18], split[19], split[20], split[1], "bloodmoss", "sulfurousash", "spiderssilk", "mandrakeroot", "gravedust", "nightshade", "ginseng", "garlic", "batwing", "pigiron", "noxcrystal", "daemonblood", "blackpearl"); + break; + } + } + } + + m_MapOverride = -1; + m_IDOverride = -1; + m_MinTimeOverride = -1; + m_MaxTimeOverride = -1; + + from.SendMessage( "Done, added {0} spawners",m_Count ); + } + else + { + from.SendMessage( "{0} not found!", monster_path ); + } + } + + public static void PlaceNPC( string[] fakespawnsA, string[] fakespawnsB, string[] fakespawnsC, string[] fakespawnsD, string[] fakespawnsE, string sx, string sy, string sz, string sm, string smintime, string smaxtime, string swalkingrange, string shomerange, string sspawnid, string snpccount, string sfakecountA, string sfakecountB, string sfakecountC, string sfakecountD, string sfakecountE, params string[] types ) + { + if ( types.Length == 0 ) + return; + + int x = Utility.ToInt32( sx ); + int y = Utility.ToInt32( sy ); + int z = Utility.ToInt32( sz ); + int map = Utility.ToInt32( sm ); + + //MinTime + string samintime = smintime; + + if ( smintime.Contains("s") || smintime.Contains("m") || smintime.Contains("h") ) + samintime = smintime.Remove(smintime.Length - 1); + + if ( samintime == "888" ) + samintime = (Settings.MonsterSpawn()).ToString(); + else if ( samintime == "999" ) + samintime = (Settings.BossSpawn()).ToString(); + + double dmintime = Utility.ToDouble( samintime ); + + if ( m_MinTimeOverride != -1 ) + dmintime = m_MinTimeOverride; + + TimeSpan mintime = TimeSpan.FromMinutes( dmintime ); + + if ( smintime.Contains("s") ) + mintime = TimeSpan.FromSeconds( dmintime ); + else if ( smintime.Contains("m") ) + mintime = TimeSpan.FromMinutes( dmintime ); + else if ( smintime.Contains("h") ) + mintime = TimeSpan.FromHours( dmintime ); + + //MaxTime + + string samaxtime = smaxtime; + + if ( smaxtime.Contains("s") || smaxtime.Contains("m") || smaxtime.Contains("h") ) + samaxtime = smaxtime.Remove(smaxtime.Length - 1); + + if ( smaxtime == "888" ) + samaxtime = (Settings.MonsterSpawn()+30).ToString(); + else if ( smaxtime == "999" ) + samaxtime = (Settings.BossSpawn()+30).ToString(); + + double dmaxtime = Utility.ToDouble( samaxtime ); + + if ( m_MaxTimeOverride != -1 ) + { + if ( m_MaxTimeOverride < dmintime ) + dmaxtime = dmintime; + else + dmaxtime = m_MaxTimeOverride; + } + + TimeSpan maxtime = TimeSpan.FromMinutes( dmaxtime ); + + if ( smaxtime.Contains("s") ) + maxtime = TimeSpan.FromSeconds( dmaxtime ); + else if ( smaxtime.Contains("m") ) + maxtime = TimeSpan.FromMinutes( dmaxtime ); + else if ( smaxtime.Contains("h") ) + maxtime = TimeSpan.FromHours( dmaxtime ); + + // + int homerange = Utility.ToInt32( shomerange ); + int walkingrange = Utility.ToInt32( swalkingrange ); + int spawnid = Utility.ToInt32( sspawnid ); + int npccount = Utility.ToInt32( snpccount ); + int fakecountA = Utility.ToInt32( sfakecountA ); + int fakecountB = Utility.ToInt32( sfakecountB ); + int fakecountC = Utility.ToInt32( sfakecountC ); + int fakecountD = Utility.ToInt32( sfakecountD ); + int fakecountE = Utility.ToInt32( sfakecountE ); + + if ( m_MapOverride != -1 ) + map = m_MapOverride; + + if ( m_IDOverride != -1 ) + spawnid = m_IDOverride; + + switch ( map ) + { + case 1: + MakeSpawner( types, fakespawnsA, fakespawnsB, fakespawnsC, fakespawnsD, fakespawnsE, x, y, z, Map.Britannia, mintime, maxtime, walkingrange, homerange, spawnid, npccount, fakecountA, fakecountB, fakecountC, fakecountD, fakecountE ); + break; + case 2: + MakeSpawner( types, fakespawnsA, fakespawnsB, fakespawnsC, fakespawnsD, fakespawnsE, x, y, z, Map.Underworld, mintime, maxtime, walkingrange, homerange, spawnid, npccount, fakecountA, fakecountB, fakecountC, fakecountD, fakecountE ); + break; + case 3: + MakeSpawner( types, fakespawnsA, fakespawnsB, fakespawnsC, fakespawnsD, fakespawnsE, x, y, z, Map.Darkness, mintime, maxtime, walkingrange, homerange, spawnid, npccount, fakecountA, fakecountB, fakecountC, fakecountD, fakecountE ); + break; + case 4: + MakeSpawner( types, fakespawnsA, fakespawnsB, fakespawnsC, fakespawnsD, fakespawnsE, x, y, z, Map.Ocean, mintime, maxtime, walkingrange, homerange, spawnid, npccount, fakecountA, fakecountB, fakecountC, fakecountD, fakecountE ); + break; + case 5: + MakeSpawner( types, fakespawnsA, fakespawnsB, fakespawnsC, fakespawnsD, fakespawnsE, x, y, z, Map.Grassland, mintime, maxtime, walkingrange, homerange, spawnid, npccount, fakecountA, fakecountB, fakecountC, fakecountD, fakecountE ); + break; + + default: + Console.WriteLine( "Spawn Parser: Warning, unknown map {0}", map ); + break; + } + } + + private static void MakeSpawner( string[] types, string[] fakespawnsA, string[] fakespawnsB, string[] fakespawnsC, string[] fakespawnsD, string[] fakespawnsE, int x, int y, int z, Map map, TimeSpan mintime, TimeSpan maxtime, int walkingrange, int homerange, int spawnid, int npccount, int fakecountA, int fakecountB, int fakecountC, int fakecountD, int fakecountE ) + { + if ( types.Length == 0 ) + return; + + List tipos = new List( types ); + List noneA = new List(); + List noneB = new List(); + List noneC = new List(); + List noneD = new List(); + List noneE = new List(); + + if ( fakespawnsA[0] != "" ) + noneA = new List( fakespawnsA ); + + if ( fakespawnsB[0] != "" ) + noneB = new List( fakespawnsB ); + + if ( fakespawnsC[0] != "" ) + noneC = new List( fakespawnsC ); + + if ( fakespawnsD[0] != "" ) + noneD = new List( fakespawnsD ); + + if ( fakespawnsE[0] != "" ) + noneE = new List( fakespawnsE ); + + PremiumSpawner spawner = new PremiumSpawner( npccount, fakecountA, fakecountB, fakecountC, fakecountD, fakecountE, spawnid, mintime, maxtime, Team, walkingrange, homerange, tipos, noneA, noneB, noneC, noneD, noneE ); + + spawner.MoveToWorld( new Point3D( x, y, z ), map ); + spawner.Land = spawner.Map; + spawner.Spot = spawner.Location; + spawner.Layer = Layer.Talisman; + + if ( TotalRespawn ) + { + spawner.Respawn(); + + if ( ((PremiumSpawner)spawner).SpawnID == 132 ) // if is ChampionSpawn + { + spawner.BringToHome(); + } + } + + m_Count++; + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/SpawnMaps.cs b/Scripts/Engines/Spawner/SpawnMaps.cs new file mode 100644 index 0000000..b277a9d --- /dev/null +++ b/Scripts/Engines/Spawner/SpawnMaps.cs @@ -0,0 +1,412 @@ +// Engine r133 +#define RunUo2_0 +using System; +using System.Collections.Generic; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class SpawnCurrentGump : Gump + { + Mobile caller; + + public static void Initialize() + { +#if(RunUo2_0) + CommandSystem.Register("SpawnCurrent", AccessLevel.Administrator, new CommandEventHandler(SpawnCurrent_OnCommand)); +#else + Register("SpawnCurrent", AccessLevel.Administrator, new CommandEventHandler(SpawnCurrent_OnCommand)); +#endif + } + + [Usage("SpawnCurrent")] + [Description("Generate PremiumSpawners around the world with a gump.")] + public static void SpawnCurrent_OnCommand(CommandEventArgs e) + { + Mobile from = e.Mobile; + + if (from.HasGump(typeof(SpawnCurrentGump))) + from.CloseGump(typeof(SpawnCurrentGump)); + from.SendGump(new SpawnCurrentGump(from)); + } + + public SpawnCurrentGump(Mobile from) : this() + { + caller = from; + } + + public void AddBlackAlpha( int x, int y, int width, int height ) + { + AddImageTiled( x, y, width, height, 2624 ); + AddAlphaRegion( x, y, width, height ); + } + + public SpawnCurrentGump() : base( 30, 30 ) + { + this.Closable=true; + this.Disposable=true; + this.Dragable=true; + AddPage(1); + AddBackground(58, 22, 474, 540, 9200); + AddImage(305, 306, 1418); // Castle + AddBlackAlpha(66, 30, 458, 33); + AddLabel(213, 37, 52, @"SELECT MAPS TO SPAWN"); + AddBlackAlpha(66, 87, 239, 447); + AddLabel(69, 67, 200, @"DUNGEONS"); + AddLabel(69, 90, 52, @"Blighted Grove"); + AddLabel(69, 112, 52, @"Britain Sewer"); + AddLabel(69, 133, 52, @"Covetous"); + AddLabel(69, 154, 52, @"Deceit"); + AddLabel(69, 174, 52, @"Despise"); + AddLabel(69, 196, 52, @"Destard"); + AddLabel(69, 217, 52, @"Fire"); + AddLabel(69, 237, 52, @"Graveyards"); + AddLabel(69, 258, 52, @"Hythloth"); + AddLabel(69, 280, 52, @"Ice"); + AddLabel(69, 301, 52, @"Khaldun"); + AddLabel(69, 322, 52, @"Orc Caves"); + AddLabel(69, 343, 52, @"Painted Caves"); + AddLabel(69, 363, 52, @"Palace of Paroxysmus"); + AddLabel(69, 384, 52, @"Prism of Light"); + AddLabel(69, 405, 52, @"Sanctuary"); + AddLabel(69, 427, 52, @"Shame"); + AddLabel(69, 448, 52, @"Solen Hive"); + AddLabel(69, 469, 52, @"Terathan Keep"); + AddLabel(69, 489, 52, @"Trinsic Passage"); + AddLabel(69, 510, 52, @"Wrong"); + AddLabel(194, 66, 200, @"Felucca"); + AddCheck(210, 91, 210, 211, true, 201); + AddCheck(210, 112, 210, 211, true, 202); + AddCheck(210, 133, 210, 211, true, 203); + AddCheck(210, 154, 210, 211, true, 204); + AddCheck(210, 175, 210, 211, true, 205); + AddCheck(210, 196, 210, 211, true, 206); + AddCheck(210, 217, 210, 211, true, 207); + AddCheck(210, 238, 210, 211, true, 208); + AddCheck(210, 259, 210, 211, true, 209); + AddCheck(210, 280, 210, 211, true, 210); + AddCheck(210, 301, 210, 211, true, 228); + AddCheck(210, 322, 210, 211, true, 212); + AddCheck(210, 343, 210, 211, true, 214); + AddCheck(210, 364, 210, 211, true, 215); + AddCheck(210, 385, 210, 211, true, 216); + AddCheck(210, 406, 210, 211, true, 217); + AddCheck(210, 427, 210, 211, true, 219); + AddCheck(210, 448, 210, 211, true, 220); + AddCheck(210, 469, 210, 211, true, 221); + AddCheck(210, 490, 210, 211, true, 224); + AddCheck(210, 511, 210, 211, true, 227); + AddLabel(250, 66, 200, @"Trammel"); + AddCheck(268, 91, 210, 211, true, 101); + AddCheck(268, 112, 210, 211, true, 102); + AddCheck(268, 133, 210, 211, true, 103); + AddCheck(268, 154, 210, 211, true, 104); + AddCheck(268, 175, 210, 211, true, 105); + AddCheck(268, 196, 210, 211, true, 106); + AddCheck(268, 217, 210, 211, true, 107); + AddCheck(268, 238, 210, 211, true, 108); + AddCheck(268, 259, 210, 211, true, 109); + AddCheck(268, 280, 210, 211, true, 110); + //There is no Khaldun in Trammel (ID 128 reserved) + AddCheck(268, 322, 210, 211, true, 112); + AddCheck(268, 343, 210, 211, true, 114); + AddCheck(268, 364, 210, 211, true, 115); + AddCheck(268, 385, 210, 211, true, 116); + AddCheck(268, 406, 210, 211, true, 117); + AddCheck(268, 427, 210, 211, true, 119); + AddCheck(268, 448, 210, 211, true, 120); + AddCheck(268, 469, 210, 211, true, 121); + AddCheck(268, 490, 210, 211, true, 124); + AddCheck(268, 511, 210, 211, true, 127); + AddBlackAlpha(311, 87, 213, 70); + AddLabel(315, 67, 200, @"TOWNS"); + AddLabel(315, 91, 52, @"Animals"); + AddLabel(315, 112, 52, @"People (*)"); + AddLabel(315, 133, 52, @"Vendors"); + AddLabel(413, 66, 200, @"Felucca"); + AddCheck(429, 91, 210, 211, true, 222); + AddCheck(429, 112, 210, 211, true, 223); + AddCheck(429, 133, 210, 211, true, 225); + AddLabel(469, 66, 200, @"Trammel"); + AddCheck(487, 91, 210, 211, true, 122); + AddCheck(487, 112, 210, 211, true, 123); + AddCheck(487, 133, 210, 211, true, 125); + AddBlackAlpha(311, 183, 213, 114); + AddLabel(315, 162, 200, @"OUTDOORS"); + AddLabel(316, 187, 52, @"Animals"); + AddLabel(316, 207, 52, @"Lost Lands"); + AddLabel(316, 229, 52, @"Spawns"); + AddLabel(316, 249, 52, @"Reagents"); + AddLabel(316, 270, 52, @"Sea Life"); + AddLabel(413, 162, 200, @"Felucca"); + AddCheck(429, 187, 210, 211, true, 226); + AddCheck(429, 208, 210, 211, true, 211); + AddCheck(429, 229, 210, 211, true, 213); + AddCheck(429, 250, 210, 211, true, 229); + AddCheck(429, 271, 210, 211, true, 218); + AddLabel(469, 162, 200, @"Trammel"); + AddCheck(487, 187, 210, 211, true, 126); + AddCheck(487, 208, 210, 211, true, 111); + AddCheck(487, 229, 210, 211, true, 113); + AddCheck(487, 250, 210, 211, true, 129); + AddCheck(487, 271, 210, 211, true, 118); + AddLabel(316, 305, 200, @"(*) Escortables, Hireables,"); + AddLabel(316, 324, 200, @"Town Criers, Order and Chaos"); + AddLabel(316, 344, 200, @"guards etc."); + // END + AddLabel(361, 453, 52, @"Page: 1/2"); //Page + AddButton(423, 455, 5601, 5605, 0, GumpButtonType.Page, 2); // Change Page + + //PAGE 2 + AddPage(2); + AddBackground(58, 22, 474, 540, 9200); + AddImage(305, 306, 1418); // Castle + AddBlackAlpha(66, 30, 458, 33); + AddLabel(213, 37, 52, @"SELECT MAPS TO SPAWN"); + AddBlackAlpha(66, 87, 174, 300); + AddLabel(74, 67, 200, @"ILSHENAR"); + AddLabel(74, 90, 52, @"Ancient Lair"); + AddLabel(74, 112, 52, @"Ankh"); + AddLabel(74, 133, 52, @"Blood"); + AddLabel(74, 154, 52, @"Exodus"); + AddLabel(74, 174, 52, @"Mushroom"); + AddLabel(74, 196, 52, @"Outdoors"); + AddLabel(74, 217, 52, @"Ratman Cave"); + AddLabel(74, 237, 52, @"Rock"); + AddLabel(74, 258, 52, @"Sorcerers"); + AddLabel(74, 280, 52, @"Spectre"); + AddLabel(74, 301, 52, @"Towns"); + AddLabel(74, 322, 52, @"Twisted Weald"); + AddLabel(74, 343, 52, @"Vendors"); + AddLabel(74, 363, 52, @"Wisp"); + AddCheck(215, 91, 210, 211, true, 301); + AddCheck(215, 112, 210, 211, true, 302); + AddCheck(215, 133, 210, 211, true, 303); + AddCheck(215, 154, 210, 211, true, 304); + AddCheck(215, 175, 210, 211, true, 305); + AddCheck(215, 196, 210, 211, true, 306); + AddCheck(215, 217, 210, 211, true, 307); + AddCheck(215, 238, 210, 211, true, 308); + AddCheck(215, 259, 210, 211, true, 309); + AddCheck(215, 280, 210, 211, true, 310); + AddCheck(215, 301, 210, 211, true, 311); + AddCheck(215, 322, 210, 211, true, 314); + AddCheck(215, 343, 210, 211, true, 312); + AddCheck(215, 364, 210, 211, true, 313); + AddBlackAlpha(66, 414, 174, 133); + AddLabel(74, 393, 200, @"TOKUNO"); + AddLabel(74, 416, 52, @"Fan Dancers Dojo"); + AddLabel(74, 438, 52, @"Outdoors"); + AddLabel(74, 459, 52, @"Towns Life"); + AddLabel(74, 480, 52, @"Vendors"); + AddLabel(74, 500, 52, @"Wild Life"); + AddLabel(74, 522, 52, @"Yomutso Mines"); + AddCheck(215, 417, 210, 211, true, 501); + AddCheck(215, 438, 210, 211, true, 502); + AddCheck(215, 459, 210, 211, true, 503); + AddCheck(215, 480, 210, 211, true, 504); + AddCheck(215, 501, 210, 211, true, 505); + AddCheck(215, 522, 210, 211, true, 506); + AddBlackAlpha(246, 87, 174, 178); + AddLabel(253, 67, 200, @"MALAS"); + AddLabel(253, 90, 52, @"Bedlam"); + AddLabel(253, 112, 52, @"Citadel"); + AddLabel(253, 133, 52, @"Doom"); + AddLabel(253, 154, 52, @"Labyrinth"); + AddLabel(253, 174, 52, @"North (*)"); + AddLabel(253, 196, 52, @"Orc Forts"); + AddLabel(253, 217, 52, @"South (*)"); + AddLabel(253, 238, 52, @"Vendors"); + AddCheck(394, 91, 210, 211, true, 408); + AddCheck(394, 112, 210, 211, true, 406); + AddCheck(394, 133, 210, 211, true, 401); + AddCheck(394, 154, 210, 211, true, 407); + AddCheck(394, 175, 210, 211, true, 402); + AddCheck(394, 196, 210, 211, true, 403); + AddCheck(394, 217, 210, 211, true, 404); + AddCheck(394, 238, 210, 211, true, 405); + AddLabel(428, 91, 200, @"(*) Wild"); + AddLabel(428, 109, 200, @"Animals and"); + AddLabel(428, 129, 200, @"monsters."); + AddBlackAlpha(246, 292, 174, 117); + AddLabel(253, 272, 200, @"TER MUR"); + AddLabel(253, 295, 52, @"Abyss"); + AddLabel(253, 316, 52, @"TerMur"); + AddLabel(253, 337, 52, @"Underworld"); + AddLabel(253, 358, 52, @"Vendors"); + AddCheck(394, 296, 210, 211, true, 601); + AddCheck(394, 317, 210, 211, true, 602); + AddCheck(394, 338, 210, 211, true, 603); + AddCheck(394, 359, 210, 211, true, 604); + //END + AddLabel(381, 453, 52, @"Page: 2/2"); //Page + AddButton(361, 455, 5603, 5607, 0, GumpButtonType.Page, 1); //Change Page + AddButton(282, 452, 240, 239, 1, GumpButtonType.Reply, 0); // Apply + } + + public static void SpawnThis( Mobile from, List ListSwitches, int switche, int map, string mapfile) + { + string folder = ""; + + if( map == 1 ) + folder = "felucca"; + else if( map == 2) + folder = "trammel"; + else if( map == 3) + folder = "ilshenar"; + else if( map == 4) + folder = "malas"; + else if( map == 5) + folder = "tokuno"; + else if( map == 6) + folder = "termur"; + + string prefix = Server.Commands.CommandSystem.Prefix; + + if( ListSwitches.Contains( switche ) == true ) + CommandSystem.Handle( from, String.Format( "{0}Spawngen {1}/{2}.map", prefix, folder, mapfile ) ); + } + + public override void OnResponse(NetState sender, RelayInfo info) + { + Mobile from = sender.Mobile; + + switch(info.ButtonID) + { + case 0: //Closed or Cancel + { + break; + } + default: + { + // Make sure that the APPLY button was pressed + if( info.ButtonID == 1 ) + { + // Get the array of switches selected + List Selections = new List( info.Switches ); + + //TRAMMEL + from.Say( "SPAWNING TRAMMEL..." ); + // DUNGEONS + SpawnThis(from, Selections, 101, 2, "BlightedGrove"); + SpawnThis(from, Selections, 102, 2, "BritainSewer"); + SpawnThis(from, Selections, 103, 2, "Covetous"); + SpawnThis(from, Selections, 104, 2, "Deceit"); + SpawnThis(from, Selections, 105, 2, "Despise"); + SpawnThis(from, Selections, 106, 2, "Destard"); + SpawnThis(from, Selections, 107, 2, "Fire"); + SpawnThis(from, Selections, 108, 2, "Graveyards"); + SpawnThis(from, Selections, 109, 2, "Hythloth"); + SpawnThis(from, Selections, 110, 2, "Ice"); + //There is no Khaldun (118) + SpawnThis(from, Selections, 112, 2, "OrcCaves"); + SpawnThis(from, Selections, 114, 2, "PaintedCaves"); + SpawnThis(from, Selections, 115, 2, "PalaceOfParoxysmus"); + SpawnThis(from, Selections, 116, 2, "PrismOfLight"); + SpawnThis(from, Selections, 117, 2, "Sanctuary"); + SpawnThis(from, Selections, 119, 2, "Shame"); + SpawnThis(from, Selections, 120, 2, "SolenHive"); + SpawnThis(from, Selections, 121, 2, "TerathanKeep"); + SpawnThis(from, Selections, 124, 2, "TrinsicPassage"); + SpawnThis(from, Selections, 127, 2, "Wrong"); + //TOWNS + SpawnThis(from, Selections, 122, 2, "TownsLife"); + SpawnThis(from, Selections, 123, 2, "TownsPeople"); + SpawnThis(from, Selections, 125, 2, "Vendors"); + //OUTDOORS + SpawnThis(from, Selections, 126, 2, "WildLife"); + SpawnThis(from, Selections, 111, 2, "LostLands"); + SpawnThis(from, Selections, 113, 2, "Outdoors"); + SpawnThis(from, Selections, 129, 2, "Reagents"); + SpawnThis(from, Selections, 118, 2, "SeaLife"); + + //FELUCCA + from.Say( "SPAWNING FELUCCA..." ); + // DUNGEONS + SpawnThis(from, Selections, 201, 1, "BlightedGrove"); + SpawnThis(from, Selections, 202, 1, "BritainSewer"); + SpawnThis(from, Selections, 203, 1, "Covetous"); + SpawnThis(from, Selections, 204, 1, "Deceit"); + SpawnThis(from, Selections, 205, 1, "Despise"); + SpawnThis(from, Selections, 206, 1, "Destard"); + SpawnThis(from, Selections, 207, 1, "Fire"); + SpawnThis(from, Selections, 208, 1, "Graveyards"); + SpawnThis(from, Selections, 209, 1, "Hythloth"); + SpawnThis(from, Selections, 210, 1, "Ice"); + SpawnThis(from, Selections, 229, 1, "Khaldun"); + SpawnThis(from, Selections, 212, 1, "OrcCaves"); + SpawnThis(from, Selections, 214, 1, "PaintedCaves"); + SpawnThis(from, Selections, 215, 1, "PalaceOfParoxysmus"); + SpawnThis(from, Selections, 216, 1, "PrismOfLight"); + SpawnThis(from, Selections, 217, 1, "Sanctuary"); + SpawnThis(from, Selections, 219, 1, "Shame"); + SpawnThis(from, Selections, 220, 1, "SolenHive"); + SpawnThis(from, Selections, 221, 1, "TerathanKeep"); + SpawnThis(from, Selections, 224, 1, "TrinsicPassage"); + SpawnThis(from, Selections, 227, 1, "Wrong"); + //TOWNS + SpawnThis(from, Selections, 222, 1, "TownsLife"); + SpawnThis(from, Selections, 223, 1, "TownsPeople"); + SpawnThis(from, Selections, 225, 1, "Vendors"); + //OUTDOORS + SpawnThis(from, Selections, 226, 1, "WildLife"); + SpawnThis(from, Selections, 211, 1, "LostLands"); + SpawnThis(from, Selections, 213, 1, "Outdoors"); + SpawnThis(from, Selections, 229, 1, "Reagents"); + SpawnThis(from, Selections, 218, 1, "SeaLife"); + + //ILSHENAR + from.Say( "SPAWNING ILSHENAR..." ); + SpawnThis(from, Selections, 301, 3, "Ancientlair"); + SpawnThis(from, Selections, 302, 3, "Ankh"); + SpawnThis(from, Selections, 303, 3, "Blood"); + SpawnThis(from, Selections, 304, 3, "Exodus"); + SpawnThis(from, Selections, 305, 3, "Mushroom"); + SpawnThis(from, Selections, 306, 3, "Outdoors"); + SpawnThis(from, Selections, 307, 3, "Ratmancave"); + SpawnThis(from, Selections, 308, 3, "Rock"); + SpawnThis(from, Selections, 309, 3, "Sorcerers"); + SpawnThis(from, Selections, 310, 3, "Spectre"); + SpawnThis(from, Selections, 311, 3, "Towns"); + SpawnThis(from, Selections, 314, 3, "TwistedWeald"); + SpawnThis(from, Selections, 312, 3, "Vendors"); + SpawnThis(from, Selections, 313, 3, "Wisp"); + + //MALAS + from.Say( "SPAWNING MALAS..." ); + SpawnThis(from, Selections, 408, 4, "Bedlam"); + SpawnThis(from, Selections, 406, 4, "Citadel"); + SpawnThis(from, Selections, 401, 4, "Doom"); + SpawnThis(from, Selections, 407, 4, "Labyrinth"); + SpawnThis(from, Selections, 402, 4, "North"); + SpawnThis(from, Selections, 403, 4, "OrcForts"); + SpawnThis(from, Selections, 404, 4, "South"); + SpawnThis(from, Selections, 405, 4, "Vendors"); + + //TOKUNO + from.Say( "SPAWNING TOKUNO..." ); + SpawnThis(from, Selections, 501, 5, "FanDancersDojo"); + SpawnThis(from, Selections, 502, 5, "Outdoors"); + SpawnThis(from, Selections, 503, 5, "TownsLife"); + SpawnThis(from, Selections, 504, 5, "Vendors"); + SpawnThis(from, Selections, 505, 5, "WildLife"); + SpawnThis(from, Selections, 506, 5, "YomutsoMines"); + + //TER MUR + from.Say( "SPAWNING TER MUR..." ); + SpawnThis(from, Selections, 601, 6, "Abyss"); + SpawnThis(from, Selections, 602, 6, "TerMur"); + SpawnThis(from, Selections, 603, 6, "Underworld"); + SpawnThis(from, Selections, 604, 6, "Vendors"); + + from.Say( "SPAWN GENERATION COMPLETED" ); + } + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/Spawner.cs b/Scripts/Engines/Spawner/Spawner.cs new file mode 100644 index 0000000..67d8ea6 --- /dev/null +++ b/Scripts/Engines/Spawner/Spawner.cs @@ -0,0 +1,887 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using Server; +using Server.Commands; +using Server.Items; +using Server.Network; +using CPA = Server.CommandPropertyAttribute; + +namespace Server.Mobiles +{ + public class Spawner : Item, ISpawner + { + private int m_Team; + private int m_HomeRange; + private int m_WalkingRange; + private int m_Count; + private TimeSpan m_MinDelay; + private TimeSpan m_MaxDelay; + private List m_SpawnNames; + private List m_Spawned; + private DateTime m_End; + private InternalTimer m_Timer; + private bool m_Running; + private bool m_Group; + private WayPoint m_WayPoint; + + public bool IsFull{ get{ return ( m_Spawned != null && m_Spawned.Count >= m_Count ); } } + + public List SpawnNames + { + get { return m_SpawnNames; } + set + { + m_SpawnNames = value; + if ( m_SpawnNames.Count < 1 ) + Stop(); + + InvalidateProperties(); + } + } + + public virtual int SpawnNamesCount { get { return m_SpawnNames.Count; } } + + public override void OnAfterDuped( Item newItem ) + { + Spawner s = newItem as Spawner; + + if ( s == null ) + return; + + s.m_SpawnNames = new List( m_SpawnNames ); + s.m_Spawned = new List(); + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Count + { + get { return m_Count; } + set { m_Count = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public WayPoint WayPoint + { + get + { + return m_WayPoint; + } + set + { + m_WayPoint = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Running + { + get { return m_Running; } + set + { + if ( value ) + Start(); + else + Stop(); + + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int HomeRange + { + get { return m_HomeRange; } + set { m_HomeRange = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int WalkingRange + { + get { return m_WalkingRange; } + set { m_WalkingRange = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Team + { + get { return m_Team; } + set { m_Team = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan MinDelay + { + get { return m_MinDelay; } + set { m_MinDelay = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan MaxDelay + { + get { return m_MaxDelay; } + set { m_MaxDelay = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan NextSpawn + { + get + { + if ( m_Running ) + return m_End - DateTime.Now; + else + return TimeSpan.FromSeconds( 0 ); + } + set + { + Start(); + DoTimer( value ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Group + { + get { return m_Group; } + set { m_Group = value; InvalidateProperties(); } + } + + [Constructable] + public Spawner() + : this(null) + { + } + + [Constructable] + public Spawner( string spawnName ) + : this( 1, 5, 10, 0, 4, spawnName) + { + } + + [Constructable] + public Spawner(int amount, int minDelay, int maxDelay, int team, int homeRange, string spawnName) + : base(0x1f13) + { + List spawnNames = new List(); + + if (!String.IsNullOrEmpty(spawnName)) + spawnNames.Add(spawnName); + + InitSpawner(amount, TimeSpan.FromMinutes(minDelay), TimeSpan.FromMinutes(maxDelay), team, homeRange, spawnNames); + } + + public Spawner(int amount, TimeSpan minDelay, TimeSpan maxDelay, int team, int homeRange, List spawnNames) + : base(0x1f13) + { + InitSpawner(amount, minDelay, maxDelay, team, homeRange, spawnNames); + } + + public override string DefaultName + { + get { return "Spawner"; } + } + + private void InitSpawner( int amount, TimeSpan minDelay, TimeSpan maxDelay, int team, int homeRange, List spawnNames ) + { + Visible = false; + Movable = false; + m_Running = true; + m_Group = false; + m_MinDelay = minDelay; + m_MaxDelay = maxDelay; + m_Count = amount; + m_Team = team; + m_HomeRange = homeRange; + m_WalkingRange = -1; + m_SpawnNames = spawnNames; + m_Spawned = new List(); + DoTimer( TimeSpan.FromSeconds( 1 ) ); + } + + public Spawner( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel < AccessLevel.GameMaster ) + return; + + SpawnerGump g = new SpawnerGump( this ); + from.SendGump( g ); + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Running ) + { + list.Add( 1060742 ); // active + + list.Add( 1060656, m_Count.ToString() ); // amount to make: ~1_val~ + list.Add( 1061169, m_HomeRange.ToString() ); // range ~1_val~ + list.Add( 1060658, "walking range\t{0}", m_WalkingRange ); // ~1_val~: ~2_val~ + + list.Add( 1060659, "group\t{0}", m_Group ); // ~1_val~: ~2_val~ + list.Add( 1060660, "team\t{0}", m_Team ); // ~1_val~: ~2_val~ + list.Add( 1060661, "speed\t{0} to {1}", m_MinDelay, m_MaxDelay ); // ~1_val~: ~2_val~ + + for ( int i = 0; i < 2 && i < m_SpawnNames.Count; ++i ) + list.Add( 1060662 + i, "{0}\t{1}", m_SpawnNames[i], CountCreatures( m_SpawnNames[i] ) ); + } + else + { + list.Add( 1060743 ); // inactive + } + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( m_Running ) + LabelTo( from, "[Running]" ); + else + LabelTo( from, "[Off]" ); + } + + public void Start() + { + if ( !m_Running ) + { + if ( SpawnNamesCount > 0 ) + { + m_Running = true; + DoTimer(); + } + } + } + + public void Stop() + { + if ( m_Running ) + { + m_Timer.Stop(); + m_Running = false; + } + } + + public static string ParseType( string s ) + { + return s.Split( null, 2 )[0]; + } + + public void Defrag() + { + bool removed = false; + + for ( int i = 0; i < m_Spawned.Count; ++i ) + { + ISpawnable e = m_Spawned[i]; + + bool toRemove = false; + + if( e is Item ) + { + Item item = (Item)e; + + if (item.Deleted || item.Parent != null) + toRemove = true; + } + else if (e is Mobile) + { + Mobile m = (Mobile)e; + + if (m.Deleted) + { + toRemove = true; + } + else if (m is BaseCreature) + { + BaseCreature bc = (BaseCreature)m; + + if (bc.Controlled || bc.IsStabled) + { + toRemove = true; + } + } + } + + if (toRemove) + { + m_Spawned.RemoveAt(i); + --i; + removed = true; + } + } + + if ( removed ) + InvalidateProperties(); + } + + bool ISpawner.UnlinkOnTaming { get { return true; } } + + void ISpawner.Remove( ISpawnable spawn ) + { + m_Spawned.Remove( spawn ); + + InvalidateProperties(); + } + + public void OnTick() + { + DoTimer(); + + if ( m_Group ) + { + Defrag(); + + if ( m_Spawned.Count == 0 ) + { + Respawn(); + } + else + { + return; + } + } + else + { + Spawn(); + } + } + + public void Respawn() + { + RemoveSpawned(); + + for ( int i = 0; i < m_Count; i++ ) + Spawn(); + } + + public void Spawn() + { + if ( SpawnNamesCount > 0 ) + Spawn( Utility.Random( SpawnNamesCount ) ); + } + + public void Spawn( string creatureName ) + { + for ( int i = 0; i < m_SpawnNames.Count; i++ ) + { + if ( m_SpawnNames[i] == creatureName ) + { + Spawn( i ); + break; + } + } + } + + protected virtual ISpawnable CreateSpawnedObject( int index ) + { + if ( index >= m_SpawnNames.Count ) + return null; + + Type type = ScriptCompiler.FindTypeByName( ParseType( m_SpawnNames[index] ) ); + + if ( type != null ) + { + try + { + return Build( type, CommandSystem.Split( m_SpawnNames[index] ) ); + } + catch + { + } + } + + return null; + } + + public static ISpawnable Build( Type type, string[] args) + { + bool isISpawnable = typeof(ISpawnable).IsAssignableFrom( type ); + + if (!isISpawnable) + { + return null; + } + + Add.FixArgs( ref args ); + + string[,] props = null; + + for ( int i = 0; i < args.Length; ++i ) + { + if ( Insensitive.Equals( args[i], "set" ) ) + { + int remains = args.Length - i - 1; + + if ( remains >= 2 ) + { + props = new string[remains / 2, 2]; + + remains /= 2; + + for ( int j = 0; j < remains; ++j ) + { + props[j, 0] = args[i + (j * 2) + 1]; + props[j, 1] = args[i + (j * 2) + 2]; + } + + Add.FixSetString( ref args, i ); + } + + break; + } + } + + PropertyInfo[] realProps = null; + + if ( props != null ) + { + realProps = new PropertyInfo[props.GetLength( 0 )]; + + PropertyInfo[] allProps = type.GetProperties( BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public ); + + for ( int i = 0; i < realProps.Length; ++i ) + { + PropertyInfo thisProp = null; + + string propName = props[i, 0]; + + for ( int j = 0; thisProp == null && j < allProps.Length; ++j ) + { + if ( Insensitive.Equals( propName, allProps[j].Name ) ) + thisProp = allProps[j]; + } + + if ( thisProp != null ) + { + CPA attr = Properties.GetCPA( thisProp ); + + if ( attr != null && AccessLevel.GameMaster >= attr.WriteLevel && thisProp.CanWrite && !attr.ReadOnly ) + realProps[i] = thisProp; + } + } + } + + ConstructorInfo[] ctors = type.GetConstructors(); + + for ( int i = 0; i < ctors.Length; ++i ) + { + ConstructorInfo ctor = ctors[i]; + + if ( !Add.IsConstructable( ctor, AccessLevel.GameMaster ) ) + continue; + + ParameterInfo[] paramList = ctor.GetParameters(); + + if ( args.Length == paramList.Length ) + { + object[] paramValues = Add.ParseValues( paramList, args ); + + if ( paramValues == null ) + continue; + + object built = ctor.Invoke( paramValues ); + + if ( built != null && realProps != null ) + { + for ( int j = 0; j < realProps.Length; ++j ) + { + if ( realProps[j] == null ) + continue; + + string result = Properties.InternalSetValue( built, realProps[j], props[j, 1] ); + } + } + + return (ISpawnable)built; + } + } + + return null; + } + + public Point3D HomeLocation { get { return this.Location; } } + + public void Spawn( int index ) + { + Map map = Map; + + if ( map == null || map == Map.Internal || SpawnNamesCount == 0 || index >= SpawnNamesCount || Parent != null ) + return; + + Defrag(); + + if ( m_Spawned.Count >= m_Count ) + return; + + ISpawnable spawned = CreateSpawnedObject( index ); + + if (spawned == null) + return; + + spawned.Spawner = this; + m_Spawned.Add(spawned); + + Point3D loc = (spawned is BaseVendor ? this.Location : GetSpawnPosition()); + + spawned.OnBeforeSpawn(loc, map); + + InvalidateProperties(); + + spawned.MoveToWorld(loc, map); + spawned.OnAfterSpawn(); + + if (spawned is BaseCreature) + { + BaseCreature bc = (BaseCreature)spawned; + + if( m_WalkingRange >= 0 ) + bc.RangeHome = m_WalkingRange; + else + bc.RangeHome = m_HomeRange; + + bc.CurrentWayPoint = m_WayPoint; + + if ( m_Team > 0 ) + bc.Team = m_Team; + + bc.Home = this.HomeLocation; + } + } + + public Point3D GetSpawnPosition() + { + Map map = Map; + + if ( map == null ) + return Location; + + // Try 10 times to find a Spawnable location. + for ( int i = 0; i < 10; i++ ) + { + int x, y; + + if ( m_HomeRange > 0 ) { + x = Location.X + (Utility.Random( (m_HomeRange * 2) + 1 ) - m_HomeRange); + y = Location.Y + (Utility.Random( (m_HomeRange * 2) + 1 ) - m_HomeRange); + } else { + x = Location.X; + y = Location.Y; + } + + int z = Map.GetAverageZ( x, y ); + + if ( Map.CanSpawnMobile( new Point2D( x, y ), this.Z ) ) + return new Point3D( x, y, this.Z ); + else if ( Map.CanSpawnMobile( new Point2D( x, y ), z ) ) + return new Point3D( x, y, z ); + } + + return this.Location; + } + + public void DoTimer() + { + if ( !m_Running ) + return; + + int minSeconds = (int)m_MinDelay.TotalSeconds; + int maxSeconds = (int)m_MaxDelay.TotalSeconds; + + TimeSpan delay = TimeSpan.FromSeconds( Utility.RandomMinMax( minSeconds, maxSeconds ) ); + DoTimer( delay ); + } + + public void DoTimer( TimeSpan delay ) + { + if ( !m_Running ) + return; + + m_End = DateTime.Now + delay; + + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = new InternalTimer( this, delay ); + m_Timer.Start(); + } + + private class InternalTimer : Timer + { + private Spawner m_Spawner; + + public InternalTimer( Spawner spawner, TimeSpan delay ) : base( delay ) + { + if ( spawner.IsFull ) + Priority = TimerPriority.FiveSeconds; + else + Priority = TimerPriority.OneSecond; + + m_Spawner = spawner; + } + + protected override void OnTick() + { + if ( m_Spawner != null ) + if ( !m_Spawner.Deleted ) + m_Spawner.OnTick(); + } + } + + public int CountCreatures( string creatureName ) + { + Defrag(); + + int count = 0; + + for ( int i = 0; i < m_Spawned.Count; ++i ) + if ( Insensitive.Equals( creatureName, m_Spawned[i].GetType().Name ) ) + ++count; + + return count; + } + + public void RemoveSpawned( string creatureName ) + { + Defrag(); + + for ( int i = 0; i < m_Spawned.Count; ++i ) + { + IEntity e = m_Spawned[i]; + + if ( Insensitive.Equals( creatureName, e.GetType().Name ) ) + e.Delete(); + } + + InvalidateProperties(); + } + + public void RemoveSpawned() + { + Defrag(); + + for ( int i = 0; i < m_Spawned.Count; ++i ) + m_Spawned[i].Delete(); + + InvalidateProperties(); + } + + public void BringToHome() + { + Defrag(); + + for ( int i = 0; i < m_Spawned.Count; ++i ) + { + ISpawnable e = m_Spawned[i]; + + e.MoveToWorld( this.Location, this.Map ); + + } + } + + public override void OnDelete() + { + base.OnDelete(); + + RemoveSpawned(); + + if ( m_Timer != null ) + m_Timer.Stop(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 4 ); // version + writer.Write( m_WalkingRange ); + + writer.Write( m_WayPoint ); + + writer.Write( m_Group ); + + writer.Write( m_MinDelay ); + writer.Write( m_MaxDelay ); + writer.Write( m_Count ); + writer.Write( m_Team ); + writer.Write( m_HomeRange ); + writer.Write( m_Running ); + + if ( m_Running ) + writer.WriteDeltaTime( m_End ); + + writer.Write( m_SpawnNames.Count ); + + for ( int i = 0; i < m_SpawnNames.Count; ++i ) + writer.Write( m_SpawnNames[i] ); + + writer.Write( m_Spawned.Count ); + + for ( int i = 0; i < m_Spawned.Count; ++i ) + { + IEntity e = m_Spawned[i]; + + if ( e is Item ) + writer.Write( (Item)e ); + else if ( e is Mobile ) + writer.Write( (Mobile)e ); + else + writer.Write( Serial.MinusOne ); + } + } + + private static WarnTimer m_WarnTimer; + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 4: + { + m_WalkingRange = reader.ReadInt(); + + goto case 3; + } + case 3: + case 2: + { + m_WayPoint = reader.ReadItem() as WayPoint; + + goto case 1; + } + + case 1: + { + m_Group = reader.ReadBool(); + + goto case 0; + } + + case 0: + { + m_MinDelay = reader.ReadTimeSpan(); + m_MaxDelay = reader.ReadTimeSpan(); + m_Count = reader.ReadInt(); + m_Team = reader.ReadInt(); + m_HomeRange = reader.ReadInt(); + m_Running = reader.ReadBool(); + + TimeSpan ts = TimeSpan.Zero; + + if ( m_Running ) + ts = reader.ReadDeltaTime() - DateTime.Now; + + int size = reader.ReadInt(); + + m_SpawnNames = new List( size ); + + for ( int i = 0; i < size; ++i ) + { + string creatureString = reader.ReadString(); + + m_SpawnNames.Add( creatureString ); + string typeName = ParseType( creatureString ); + + if ( ScriptCompiler.FindTypeByName( typeName ) == null ) + { + if ( m_WarnTimer == null ) + m_WarnTimer = new WarnTimer(); + + m_WarnTimer.Add( Location, Map, typeName ); + } + } + + int count = reader.ReadInt(); + + m_Spawned = new List(count); + + for ( int i = 0; i < count; ++i ) + { + ISpawnable e = World.FindEntity(reader.ReadInt()) as ISpawnable; + + if (e != null) + { + e.Spawner = this; + m_Spawned.Add(e); + } + } + + if ( m_Running ) + DoTimer( ts ); + + break; + } + } + + if ( version < 3 && Weight == 0 ) + Weight = -1; + } + + private class WarnTimer : Timer + { + private List m_List; + + private class WarnEntry + { + public Point3D m_Point; + public Map m_Map; + public string m_Name; + + public WarnEntry( Point3D p, Map map, string name ) + { + m_Point = p; + m_Map = map; + m_Name = name; + } + } + + public WarnTimer() : base( TimeSpan.FromSeconds( 1.0 ) ) + { + m_List = new List(); + Start(); + } + + public void Add( Point3D p, Map map, string name ) + { + m_List.Add( new WarnEntry( p, map, name ) ); + } + + protected override void OnTick() + { + try + { + Console.WriteLine( "Warning: {0} bad spawns detected, logged: 'badspawn.log'", m_List.Count ); + + using ( StreamWriter op = new StreamWriter( "badspawn.log", true ) ) + { + op.WriteLine( "# Bad spawns : {0}", DateTime.Now ); + op.WriteLine( "# Format: X Y Z F Name" ); + op.WriteLine(); + + foreach ( WarnEntry e in m_List ) + op.WriteLine( "{0}\t{1}\t{2}\t{3}\t{4}", e.m_Point.X, e.m_Point.Y, e.m_Point.Z, e.m_Map, e.m_Name ); + + op.WriteLine(); + op.WriteLine(); + } + } + catch + { + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/SpawnerGump.cs b/Scripts/Engines/Spawner/SpawnerGump.cs new file mode 100644 index 0000000..97bf8b0 --- /dev/null +++ b/Scripts/Engines/Spawner/SpawnerGump.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections; +using Server.Network; +using Server.Gumps; +using System.Collections.Generic; + +namespace Server.Mobiles +{ + public class SpawnerGump : Gump + { + private Spawner m_Spawner; + + public SpawnerGump( Spawner spawner ) : base( 50, 50 ) + { + m_Spawner = spawner; + + AddPage( 0 ); + + AddBackground( 0, 0, 410, 371, 5054 ); + + AddLabel( 95, 1, 0, "Creatures List" ); + + AddButton( 5, 347, 0xFB1, 0xFB3, 0, GumpButtonType.Reply, 0 ); + AddLabel( 38, 347, 0x384, "Cancel" ); + + AddButton( 5, 325, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0 ); + AddLabel( 38, 325, 0x384, "Okay" ); + + AddButton( 110, 325, 0xFB4, 0xFB6, 2, GumpButtonType.Reply, 0 ); + AddLabel( 143, 325, 0x384, "Bring to Home" ); + + AddButton( 110, 347, 0xFA8, 0xFAA, 3, GumpButtonType.Reply, 0 ); + AddLabel( 143, 347, 0x384, "Total Respawn" ); + + for ( int i = 0; i < 13; i++ ) + { + AddButton( 5, ( 22 * i ) + 20, 0xFA5, 0xFA7, 4 + (i * 2), GumpButtonType.Reply, 0 ); + AddButton( 38, ( 22 * i ) + 20, 0xFA2, 0xFA4, 5 + (i * 2), GumpButtonType.Reply, 0 ); + + AddImageTiled( 71, ( 22 * i ) + 20, 309, 23, 0xA40 ); + AddImageTiled( 72, ( 22 * i ) + 21, 307, 21, 0xBBC ); + + string str = ""; + + if ( i < spawner.SpawnNames.Count ) + { + str = (string)spawner.SpawnNames[i]; + int count = m_Spawner.CountCreatures( str ); + + AddLabel( 382, ( 22 * i ) + 20, 0, count.ToString() ); + } + + AddTextEntry( 75, ( 22 * i ) + 21, 304, 21, 0, i, str ); + } + } + + public List CreateArray( RelayInfo info, Mobile from ) + { + List creaturesName = new List(); + + for ( int i = 0; i < 13; i++ ) + { + TextRelay te = info.GetTextEntry( i ); + + if ( te != null ) + { + string str = te.Text; + + if ( str.Length > 0 ) + { + str = str.Trim(); + + string t = Spawner.ParseType( str ); + + Type type = ScriptCompiler.FindTypeByName( t ); + + if ( type != null ) + creaturesName.Add( str ); + else + from.SendMessage( "{0} is not a valid type name.", t ); + } + } + } + + return creaturesName; + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( m_Spawner.Deleted ) + return; + + switch ( info.ButtonID ) + { + case 0: // Closed + { + break; + } + case 1: // Okay + { + m_Spawner.SpawnNames = CreateArray( info, state.Mobile ); + + break; + } + case 2: // Bring everything home + { + m_Spawner.BringToHome(); + + break; + } + case 3: // Complete respawn + { + m_Spawner.Respawn(); + + break; + } + default: + { + int buttonID = info.ButtonID - 4; + int index = buttonID / 2; + int type = buttonID % 2; + + TextRelay entry = info.GetTextEntry( index ); + + if ( entry != null && entry.Text.Length > 0 ) + { + if ( type == 0 ) // Spawn creature + m_Spawner.Spawn( entry.Text ); + else // Remove creatures + m_Spawner.RemoveSpawned( entry.Text ); + + m_Spawner.SpawnNames = CreateArray( info, state.Mobile ); + } + + break; + } + } + } + } +} diff --git a/Scripts/Engines/Spawner/SpawnerHowTo.txt b/Scripts/Engines/Spawner/SpawnerHowTo.txt new file mode 100644 index 0000000..64fdfa0 --- /dev/null +++ b/Scripts/Engines/Spawner/SpawnerHowTo.txt @@ -0,0 +1,613 @@ + Premium Spawner project was born as a "mod" of "Ultimate Spawner" +script created by a brazilian scripter called Atomic, who had a SHARD +called AtomicShard. It was based on a script that reads the spawns +information from a bunch of "map" files and then place it in the +world. The original script was modified by Nerun (myself) and when the +number of changes to the original script became great, i changed the +name of my version. The Premium is the successor of the Ultimate Spawner +v4.0 R5 (until then, the simple addition of "R", followed by a number +differentiated my version from original script designed by Atomic). +The fundamental differences between the default RunUO Spawner system are: + + - "Premium" has new properties: + 1. SpawnID - Spawners IDentity: used to unload or save spawns + 2. OverrideMap - automatically change all map files from the + spawners entries bellow it + 3. OverrideID - works as OverrideMap, but for SpawnID + 4. OverrideMinTime - works as OverrideMap, but for MinDelay + 5. OverrideMaxTime - works as OverrideMap, but for MaxDelay + + - "Premium" has it own engine, not using the default "Spawner" +that comes with RunUO, instead it uses the "PremiumSpawner". You can +use both systems simultaneously. + + - "Premium" has map files (pre-spawned world). + + - "Premium" is user friendly. + + The basics of basics that you need to know is that this system is +useful to remain "safe" (in a ".map" file) the spawners that you created +with so much effort. Well, suppose you have to erase everything and start +the world from scratch. You will have to place more than ten thousand +spawns, by hand, again? NO! You just use a command prompt, everything +will be generated again, and without effort. All effort is done in the +process of map file creation (that you can do in-game). + The current release is considered very mature (in terms of stability, +reliability, features and ease of use) and complete (in terms of world +spawns). + + +INDEX: + 1. PREMIUM SPAWNER INSTALATION + 2. PART I - Main Menu + 3. PART II - Writing a Map File (Basics) + 4. PART III - Using Maps "In-Game" (B�sics) + 5. PART IV - Writing a Map File (Advanced) + 6. PART V - Using Maps "In-Game" (Advanced) + 7. PART VI - Edition Options + 8. PART VII - Spawns' Overseer + + +>>>>>>>>>>>>>>>>>>>>>>>>>>> +PREMIUM SPAWNER INSTALATION +<<<<<<<<<<<<<<<<<<<<<<<<<<< + + Spawner creation system, Premium "Spawner" consists in a collection +of scripts. As I added many scripts, I will not list them here. Today this +system is distributed in a package called "Nerun's Distro". There were +several packages in the beginning, but for convenience I have grouped in +a single distribution. This package also includes other resources, such as +spawns maps for use with this system, as gumps (menus) easy to use to further +facilitate the settlement of your world. This distro can be found in the +RunUO forum at http://www.runuo.com/. + +To install the distro open READ-ME FIRST.txt and follow its instructions. + + +>>>>>>>>>>>>>>>>>> +PART I - Main Menu +<<<<<<<<<<<<<<<<<< + + To access the Main Menu wrote "[spawner" (without quotes) in the +command prompt. There are a lot of options in the menu, in two pages. These +options are self-explained: + + +GUMP NAME COMMAND PROMPT +=========================================================== +WORLD CREATION: + Let there be light (Create world) -- [createworld + Apocalypse now (Clear all facets) -- [clearall +SELECT SPAWNS BY EXPANSION: + UO Classic Spawns (pre-T2A) -------- [spawngen uoclassic/UOClassic.map + UO Mondain's Legacy Spawns --------- [SpawnUOML + UO KR, SA and HS Spawns ------------ [SpawnCurrent +REMOVE SPAWNS BY EXPANSION: + UO Classic Spawns (pre-T2A) -------- [spawngen unload 1000 + UO Mondain's Legacy Spawns --------- [UnloadUOML + UO KR, SA and HS Spawns ------------ [UnloadCurrent +SMART PLAYER RANGE SENSITIVE: + Generate Spawns' Overseer ---------- [GenSeers + Remove Spawns' Overseer ------------ [RemSeers +SAVE SPAWNERS: + All spawns (spawns.map) ------------ [spawngen save + 'By Hand' spawns (byhand.map) ------ [spawngen savebyhand + Spawns inside region (region.map) -- [spawngen save RegionName + Spawns inside coordinates ---------- [spawngen save x1 y1 x2 y2 +REMOVE SPAWNERS: + All spawner in ALL facets ---------- [spawngen remove + All spawners in THIS facet --------- [spawngen cleanfacet + Remove spawners by SpawnID --------- [spawngen unload SpawnID + Remove inside Coordinates ---------- [spawngen remove x1 y1 x2 y2 + Remove spawners inside Region ------ [spawngen remove RegionName +EDITOR: + Spawn Editor ----------------------- [editor +CONVERSION UTILITY: + RunUO Spawners to Premium ---------- [rse +CUSTOM REGIONS IN A BOX: + Add a Region Controller ------------ [Add RegionControl + + + As you can see, it centered on a single menu all the system commands, +you do not know how to write each line to use them, simply click, follow +the instructions and it is done. The following sections will describe how to +create a map file, and how to use the command line instead of the Menu. + + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +PART II - Writing a Map File (Basics) +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + Notepad can be used to create map files. You will see the following +basic information on a map: + +## Britain Graveyard: +*|Spectre:Wraith|Skeleton|Zombie||||1369|1475|10|2|5|10|30|20|1|2|3|4|0|0|0 + + This map above provides information from all spawns of the Britain +Graveyard. Let's analyze it: + + - 1st Line: Starts with "##", this double "sharp" marks the beginning of + a comment. In other words, what comes after him will not be read by the + script. It is usually used to provide information about the script: + Dungeon map name, actual review and so on. + + - 2nd Line: The spawner itself. Each line is a spawner, but the advantage + of PremiumSpawner is that it contains up to 6 FakeSpawners within + themselves, which are nothing more than spawners with the same + attributes of distance, time etc, but with different creatures and + amounts: + + *|Spectre:Wraith|Skeleton|Zombie||||1369|1475|10|2|5|10|30|20|1|2|3| + 4|0|0|0 + +- All Spawners starts with "*" followed by "|". This "|" separates the + information into the line. The first 6 spaces are the names of the + creatures, which in this case are: + + Spawner 1: Spectre OR Wraith (the ":" serves to add several + creatures in a random list) + Spawner 2: Skeleton + Spawner 3: Zombie + Spawner 4: Empty (none) + Spawner 5: Empty (none) + Spawner 6: Empty (none) + + Each of them are called "Fake Spawner": are 6 spawners inside only + one spawner. + +- The three numbers that come after the creatures lists define the place + where the spawner will be created. Following the "XYZ" format (all + details of Spawners are separated by a "|"). In this case, the spawner + will appear at coordinates "1369 | 1475 | 10", in other words, + X = 1369, Y = 1475 and Z = 10. If you type "[go 1369 1475 10" you will + go to the place where this Spawner will appear. + +- The fourth number says in wich facet the Spawner will be placed. Note + that this number is 2. The definition of the maps follow this pattern: + + 0 = Felucca AND Trammel + 1 = Felucca + 2 = Trammel + 3 = Ilshenar + 4 = Malas + 5 = Tokuno + + So deduct that the spawner will be placed in Trammel, because the room + number (the map) is the number 2. + +- Next 2 numbers after facet number: defines respectively the minimum + and the maximum respawn time. That is, the creatures that spawn will + respawn in a randomly chosen interval between the minimum and maximum + time. In the example We have "5 | 10 |" (always a "|"). Time is in + minutes, so creatures will respawn between 5 and 10 min after being + killed by players. + + But you could write otherwise, time in seconds, minutes or hours: + |10s| = ten seconds; + |10m| (or just |10|, the default) = ten minutes; + |10h| = ten hours. + +- Next 2 numbers after respawn time: defines WalkingRange and HomeRange. + In this case, 30 WalkingRange and 20 HomeRange. The creatures will walk + for up to 30 "boxes" (those who we see in a maximum zoom in game) + away from the spawner. But they will "respawn" randomly within a + radius of up to 20 "boxes" from the spawner. Note that the HomeRange + is always less than or equal to WalkingRange, NEVER MORE. + +- Next number after Ranges: identifies the spawn, is a "SpawnID", it + tell us to which "spawn group" it belongs. By default, it is always + 1. If you create any spawner in game using the "[add premiumspawner" + command, the SpawnID will be the number 1. This identifies the + spawners created "by hand". But the maps can have any number of + SpawnID. It is advisable that all spawners of the same map, have the + same SpawnID. We will see why bellow. + +- The last 6 numbers, also important, say how many monsters defined at + the beginning of the spawner (the first 6 spaces) will be generated + by that spawner. If the numbers are "2 | 3 | 4 | 0 | 0 | 0" will be + generated 2 Specters OR Wraiths (or 1 of each), 3 skeletons and 4 + Zombies. The latest figures are 0: nothing is created in the past + 3 spawners, even if you define a value, nothing could be generated, + because no creature was listed there (as we saw). + + As observation, note that most of spawner's properties, as +described above, can be defined without the need to "see" where the +spawner will appear, but the coordinates will need to "see". Because if +you choose coordinates randomly, risks creating a spawner in an +inaccessible place, for example, in the middle of the ocean! So you must +go to the place where you would like spawner appear and use the command +"[get location" or "[where" in that place. Then write down the details +that will appear on the screen. + Made the map, just save it in the folder Data / Monsters (if there +isn't a folder Date/Monsters, it's time to create one. Click "Save As", +select the Save as Type "All Files" and then type a name for the map, not +forgetting to set ".map" at the end of the name. In the above example, +if we had made that map, we could give him the name "graveyard.map". + +SUMMARIZING + Default spawner format: + +*|List1|List2|List3|List4|List5|List6|X|Y|Z|facet|MinTime|MaxTime| +WalkingRange|HomeRange|SpawnID|Count1|Count2|Count3|Count4|Count5|Count6 + + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +PART III - Using Maps "In-Game" (B�sics) +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + This is simple, are just a commands list to be used in game for +the PremiumSpawner's engine generates spawners from the maps created. On +the assumption that you already installed the required scripts in RunUO +folder, you can use the following commands: + + + - [spawngen MapName.map + Read maps and create spawners. In the example you should use + "[spawngen graveyard.map" (no quotes). + + - [spawngen remove + Dungerous command! It will DELETE all PremiumSpawners of ALL facets + of UO, done "by hand" or "by map"! + + - [spawngen save + Usefull command: saves in a file called "Spawns.map" ALL the + PremiumSpawners in ALL UO facets, done "by hand" or "by map"! + Usefull if tou did a lot of custom maps and use this distro too. + After this, a simple "[spawngen spawns.map" will spawn everything + again. + + - [spawnrem + It will DELETE all PremiumSpawners of actual facet (that one + where your character is standing). Other facets will remain + spawned. + + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +PART IV - Writing a Map File (Advanced) +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + +Multiple Creatures and Randomness +--------------------------------- + + You have learned to create maps using the class method, in other +words, you type the name of the creature and then the statistics (count, +delay, range etc). But what if you want more than one type of creature in +the same spawner? + + Use the method of two dots (":"). In this case, simply separate +the creatures that you want with a ":" as in the example below: + +*|Spectre:Wraith||||||1369|1475|10|2|5|10|30|20|1|10|0|0|0|0|0 + + As a result, the spawner randomly selecs within the amount +indicated, among the creatures on the list, separated by two dots. +Remembering that you can put as many creatures you like, all separated by +":". In the example, we could have 7 Wraith and 3 Specter, or 5 of each, +this number will vary, but the tendency is to remain in the ratio of +count / creatures. In the example: count = 10, creatures = 2. Ratio 5. +So the spawns will tend to 5 Wraith and 5 Specter. Now let's play with +statistics. And if we want to have a greater chance of appearing more +Spectres than Wraiths? So we can write in this way: + +*|Spectre:Spectre:Wraith||||||1369|1475|10|2|5|10|30|20|1|10|0|0|0|0|0 + + The ratio now is 3.3 for creature, so the chances will be now: +66.6% Spectres and 33.3% Wraiths. + As an advise, never place inside the same Spawner (FakeSpawner), +"target" creatures with "non-target" creatures or items. What i want to +say is: don't place a Spectre, a Wraith and a dog or a bottle to spawn +together: + +*|Spectre:Wraith:Dog||||||1369|1475|10|2|5|10|30|20|1|10|0|0|0|0|0 + + If you do it, sometime the players will kill all monsters, but +will not kill the dogs, and all the 10 creatures of that spawner will +be just dogs! It happens because the Spawner spawn just the remaning +amount (amount not spawned). If it spawn 10 creatures: 5 Spectres, +3 Wraiths and 2 Dog, and if players kill all monsters except the dogs, +next time the spawner will spawn 8 creatures (cause Dogs are alive) and +it can spawn a few Spectres and Wraiths and a lot of Dogs again! And +so on... I dit it in past releases, already fixed. + + +Override Maps +------------- + + And if you want to do a map that works both in Trammel and Felucca? +Instead of edit the facet number in each line (spawner) of your map, +you can superscribe the facet number with a simple, only, command line. +In our example above, that generates spawns only in Trammel, to generates +spawns in Trammel AND Felucca, we adds an "overridemap": + +overridemap 0 +## Britain Graveyard: +*|Spectre:Wraith|Skeleton|Zombie||||1369|1475|10|2|5|10|30|20|1|2|3|4|0|0|0 + + Here, the number "2" of that spawner (the facet), will be read as "0" +by the spawn generator engine. Facet numbers are the same as described in +"PART II - Writing a Map File (Basics)". + + +Override SpawnID +---------------- + + Do the same as OverrideMap, but for SpawnIDs. SpawnID "1" will be read +as "14", as bellow: + +overrideid 14 +overridemap 0 +## Britain Graveyard: +*|Spectre:Wraith|Skeleton|Zombie||||1369|1475|10|2|5|10|30|20|1|2|3|4|0|0|0 + + +Override DelayTime +------------------ + + Do the same as OverrideMap and OverrideID, but for delay time. + + overridemintime + + and or + + overridemaxtime + +Exemple: + +overridemintime 10 +overridemaxtime 20 +overrideid 14 +overridemap 0 +## Britain Graveyard: +*|Spectre:Wraith|Skeleton|Zombie||||1369|1475|10|2|5|10|30|20|1|2|3|4|0|0|0 + + The delays (min 5 and max 10 minutes) will be read as 10 and 20 +minutes. + + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +PART V - Using Maps "In-Game" (Advanced) +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + +Settlement In-Game +------------------ + + Another way to settlement your world (place spawns) is to go "in-game" +and adds spawners by hand, with command [add premiumspawner CreatureName. +And "set" the attributes (x = number): + +[set count x homerange x spawnrange x maxdelay x mindelay x + + +Commands to Save and to Remove Spawns +------------------------------------- + + After spawn the desired area, you need to save yours spawns either with +[spawngen save or with some advanced options. Just type [spawner and look under +SAVE/REMOVE OPTIONS. There is a GUMP for each command. But you can use the +command prompt instead: + +[spawngen savebyhand + To save spawns done "by hand" ([add premiumspawner... all by hand premium + spawners has SpawnID = 1). Spawns will be saved in "byhand.map" file in + Data/Monsters folder. + +[spawngen save x1 y1 x2 y2 + To save all premium spawners in a spawns.map file. All premium spawners + inside the rectangle area (x1 y1 x2 y2) will be saved. + + X and Y are coordinates: + + (x1,y1)------+ All premium spawners between coordinates (x1,y1) + | | and coordinates (x2,y2) will be saved. + | | + | | + +---------(x2,y2) + +[spawngen save + Save premium spawners inside a region defined by RunUO to a spawns.map + file, in Data/Monsters. + Complete list of regions are in c:/RunUO/Data/Regions.xml. + Use [where to see the region where you are. + Open Regions.xml to understand regions: + + + + + + + + + + + + + + + As you see, a Region is a lot of rectangles. + +NOTE: "[spawngen remove" can be used with the same options as for +"[spawngen save" above, but will remove spawns instead of save. + +NOTE: Go to Data/Monsters and rename spawns.map or byhand.map to another name, +because each time you save with those options, the old file will be deleted and +a new one will be saved over it. + +EXAMPLE: + "[spawngen save minoc" (save spawns inside Minoc region) + We can rename the spawns.map to Minoc.map. + + +Unloading Maps (recommended) +---------------------------- + + The better way to remove spawns instead of using "[spawngen remove" +and other Spartan options is the "Unload" method: + +[spawngen unload SpawnID + + If you define a SpawnID to each custom map you has you can unload +or remove the entire map easier. Example: Graveyards.map saw above. All the +premium spawners inside that map has SpawnID = 1. Lets see: + +## Britain Graveyard: +*|Spectre:Wraith|Skeleton|Zombie||||1369|1475|10|2|5|10|30|20|1|2|3|4|0|0|0 + + The problem is that 1 is the default number to "by hand" maps. +Lets change the ID of this map. In the example above we just need to change +one number (that between numbers 20 and 2). But if the map had 100, maybe +1000 premium spawners? hard work uh? Because of it there is the "overrideid" +option. It set all the SpawnIDs bellow it to the desired ID. So lets do it: + +overrideid 14 +## Britain Graveyard: +*|Spectre:Wraith|Skeleton|Zombie||||1369|1475|10|2|5|10|30|20|1|2|3|4|0|0|0 + + Although each spawner still have 1 as ID on each line, the +"overrideid 14" will force the spawn generator engine to read that "1" as +if "14". Later in the game, if I want to remove this map is just type +"[spawngen unload 14" and ready. None of my other spawns will be changed +or removed. + + +>>>>>>>>>>>>>>>>>>>>>>>>> +PART VI - Edition Options +<<<<<<<<<<<<<<<<<<<<<<<<< + +[editor + Opens the spawn editor of course. This will list all the + PremiumSpawners in the left side. In the right column you can see + a bunch of options to select only the desired spawners, go to it, + see it properties, and see it creatures. + +[clearall + Works as [Clearfacet but for ALL facets. Caution here. + +[GMbody + Will set some common attributes to GMs. Target yourself. A lot of + items, skills, stats, robes, full spellbooks etc, will appear in + your backpack. You always set your body to human body. You add + titles to [GM], [Admin], etc. + + +>>>>>>>>>>>>>>>>>>>>>>>>>>> +PART VII - SPAWNS' OVERSEER +<<<<<<<<<<<<<<<<<<<<<<<<<<< + +Revision 22 has added Spawners' Overseer engine, the new incarnation of +Smart Player Range Sensitive. + +How it works: +It has a range, that can be set by a GM or higher. It checks players in +range every time the clock time ticks. If there is a player in range (or +a non-hidden Staff Member) it will check players again only after 30 min +(this time can be changed). If there is no players in range (or if Staff +Members are hidden, but in range) it will disable all PremiumSpawners in +range, deleting mobiles and items in range, and it will check for +players every 5 seconds. + +[GenSeers - generates Overseers crystal by reading configuration files + at Data\Monsters\Overseers. + +There is no OverSeers configuration files yet. So it generates no +OverSeers. The engine is done, it is working, but you need a config file +to tells the engine where to place OverSeers. + +[RemSeers - removes all Overseers. + + +>>>>>> ADDING >>>>>> + +One option it to add OverSeers yourself, by hand. + +[add SpawnsOverseer +- this will add an OverSeer with range 20 (square of 40 x 40). + +[add SpawnsOverseer 50 +- this will add an OverSeer with range 50 (square of 100 x 100). + + +>>>>>> CONFIG FILES >>>>>> + +And look at: + +...\Data\Nerun's Distro\Spawns\overseers\trammel\Overseers.cfg + +It is an example of OverSeer config file: + +SpawnsOverseer 7966 +5433 1102 0 + +It is simple: bellow "SpawnsOverseer 7966" write coordinates (x,y,z) where +you want to put them. + + +>>>>>> RANGES >>>>>> + +I thin you can write different ranges too, something like this: + +SpawnsOverseer 7966 (Range=50) +5433 1102 0 + +Remember that default range is 20 if none specified. + +Range is the seer's "watching range". PremiumSpawners inside it range will +be watched by that seer. There is no limit to the range. + +You can place many seers with different ranges: + +SpawnsOverseer 7966 +5433 1102 0 +1234 970 0 +3456 456 0 + +SpawnsOverseer 7966 (Range=50) +5433 1102 0 + +You can change other parameters: + + SpawnsOverseer 7966 (InRangeDelay=30; OutRangeDelay=5) + 5433 1102 0 + +And use all the together: + + SpawnsOverseer 7966 (Range=50; InRangeDelay=30; OutRangeDelay=5) + 5433 1102 0 + +InRangeDelay = time in minutes to next check if players are in range + +OutRangeDelay = time in seconds to next check if there is no players in range + +>>>>>> ITEMID >>>>>> + +Always use "SpawnsOverseer 7966", the number is the ItemID of +SpawnsOverseer item. + +>>>>>> COMMENTS >>>>>> + +Use # to add comments that will not be read by [GenSeers: + +# This is a comment line +SpawnsOverseer 7966 (Range=50) +5433 1102 0 + +>>>>>> FOLDERS >>>>>> + +Place the CFG file in the right folder. + +Trammel: +...\Data\Nerun's Distro\Spawns\overseers\trammel\Overseers.cfg + +Felucca: +...\Data\Nerun's Distro\Spawns\overseers\felucca\Overseers.cfg + +etc + +>>>>>> .CFG FILE NAME >>>>>> + +You can place more then one cfg inside the same folder, and don't +need to have the name Overseers.cfg. Files can have any name. You +can do a file "Graveyards.cfg" for all graveyards in a facet. Plus +another called "Florests.cfg" for florests and open areas etc. \ No newline at end of file diff --git a/Scripts/Engines/Spawner/SpawnerType.cs b/Scripts/Engines/Spawner/SpawnerType.cs new file mode 100644 index 0000000..2b19d6e --- /dev/null +++ b/Scripts/Engines/Spawner/SpawnerType.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Mobiles +{ + public class SpawnerType + { + public static Type GetType( string name ) + { + return ScriptCompiler.FindTypeByName( name ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/SpawnsOverseer.cs b/Scripts/Engines/Spawner/SpawnsOverseer.cs new file mode 100644 index 0000000..0730a24 --- /dev/null +++ b/Scripts/Engines/Spawner/SpawnsOverseer.cs @@ -0,0 +1,340 @@ +using System; +using System.IO; +using Server; +using Server.Mobiles; +using System.Collections.Generic; +using Server.Network; + +namespace Server.Items +{ + public class SpawnsOverseer : Item + { + private int m_Range; + private int m_InRangeDelay; + private int m_OutRangeDelay; + private int m_Overseeing; + private CheckTimer m_Timer; + private bool m_Enable; + private TimeSpan m_CurrentDelay; // players out dungeon + private DateTime m_End; + + [CommandProperty( AccessLevel.GameMaster )] + public bool Enable + { + get { return m_Enable; } + set + { + if ( value ) + Begin(); + + else + End(); + + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Range + { + get { return m_Range; } + set { m_Range = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan CurrentDelay + { + get { return m_CurrentDelay; } + set { m_CurrentDelay = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan NextDelay + { + get + { + if ( m_Enable ) + return m_End - DateTime.Now; + else + return TimeSpan.FromSeconds( 0 ); + } + set + { + Begin(); + DoTimer( value ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int InRangeDelay + { + get { return m_InRangeDelay; } + set { m_InRangeDelay = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int OutRangeDelay + { + get { return m_OutRangeDelay; } + set { m_OutRangeDelay = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Overseeing + { + get { return m_Overseeing; } + set { m_Overseeing = value; InvalidateProperties(); } + } + + public void Begin() + { + if ( !m_Enable ) + { + m_Enable = true; + DoTimer(); + } + } + + public void End() + { + if ( m_Enable ) + { + m_Timer.Stop(); + m_Enable = false; + } + } + + public void Restart() + { + if ( m_Enable ) + { + m_Timer.Stop(); + DoTimer(); + } + } + + public void DoTimer() + { + if ( !m_Enable ) + return; + + int mSeconds = (int)m_CurrentDelay.TotalSeconds; + + TimeSpan delay = TimeSpan.FromSeconds( mSeconds ); + DoTimer( delay ); + } + + public void DoTimer( TimeSpan delay ) + { + if ( !m_Enable ) + return; + + if ( m_Timer != null ) + m_Timer.Stop(); + + m_End = DateTime.Now + delay; + + m_Timer = new CheckTimer( this, delay ); + m_Timer.Start(); + } + + [Constructable] + public SpawnsOverseer() : this( 20, 30, 5, 0 ) + { + } + + [Constructable] + public SpawnsOverseer( int startrange ) : this( startrange, 30, 5, 0 ) + { + } + + [Constructable] + public SpawnsOverseer( int startrange, int startIRD, int startORD, int startOverseeing ) : base( 0x1F1E ) + { + InitSeer( startrange, startIRD, startORD, startOverseeing ); + } + + private void InitSeer( int startrange, int startIRD, int startORD, int startOverseeing ) + { + Name = "Spawns' Overseer"; + Movable = false; + Light = LightType.Circle150; + Weight = 1; + Visible = false; + Enable = true; + Range = startrange; + CurrentDelay = TimeSpan.FromSeconds( 5 ); + InRangeDelay = startIRD; //minutes + OutRangeDelay = startORD; //seconds + Overseeing = startOverseeing; //PremiumSpawners under control + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Enable ) + { + list.Add( 1060742 ); // active + + list.Add( 1060662, "Range\t{0}", Range.ToString() ); + list.Add( 1060663, "In Range Delay\t{0} min", InRangeDelay.ToString() ); + list.Add( 1060661, "Out Range Delay\t{0} sec", OutRangeDelay.ToString() ); + list.Add( 1060658, "Overseeing\t{0} PremiumSpawners", Overseeing.ToString() ); + } + else + { + list.Add( 1060743 ); // inactive + } + } + + private class CheckTimer : Timer + { + private SpawnsOverseer m_SpawnsOverseer; + + public CheckTimer( SpawnsOverseer Crystal, TimeSpan delay ) : base( delay, delay ) + { + Priority = TimerPriority.OneSecond; + + m_SpawnsOverseer = Crystal; + } + + protected override void OnTick() + { + if ( ( m_SpawnsOverseer != null ) && ( !m_SpawnsOverseer.Deleted ) ) + { + m_SpawnsOverseer.OnTickDoThis(); + } + + else + { + Stop(); + } + } + } + + public void OnTickDoThis() + { + List ClosePremiumSpawners = new List(); + + List ClosePlayers = new List(); + + List MobsCleaning = new List(); + + List ItemsCleaning = new List(); + + foreach ( Item item in this.GetItemsInRange( Range ) ) // para cada item dentro do raio de alcance + { + if( item is PremiumSpawner ) // se for um PremiumSpawner + ClosePremiumSpawners.Add( item ); + } + + if ( ClosePremiumSpawners.Count > 0 ) + { + this.Overseeing = ClosePremiumSpawners.Count; + + foreach ( Mobile m in this.GetMobilesInRange( Range ) ) // para cada mobile dentro do raio de alcance + { + if( m is PlayerMobile && m.AccessLevel == AccessLevel.Player || m is PlayerMobile && m.AccessLevel > AccessLevel.Player && m.Hidden == false ) //se fôr player ou GM não oculto (hidden) + ClosePlayers.Add( m ); + } + + if ( ClosePlayers.Count > 0 ) // há pelo menos um player próximo + { + this.CurrentDelay = TimeSpan.FromMinutes( InRangeDelay ); // tempo para nova checagem + Restart(); + + foreach ( Item pspawner in ClosePremiumSpawners ) // pra cada PremiumSpawner próximo (na lista) + { + if ( ((PremiumSpawner)pspawner).Running == false ) // se estiver desativado + { + ((PremiumSpawner)pspawner).Running = true; // ativar! + ((PremiumSpawner)pspawner).NextSpawn = TimeSpan.FromSeconds( 1 ); // respawn total! + } + } + } + + else if ( ClosePlayers.Count <= 0 ) // não tem ninguém perto + { + this.CurrentDelay = TimeSpan.FromSeconds( OutRangeDelay ); // tempo para nova checagem + Restart(); + + foreach ( Item pspawner in ClosePremiumSpawners ) // pra cada Premium PremiumSpawner próximo (na lista) + { + if ( ((PremiumSpawner)pspawner).Running == true ) // se estiver ativado + { + ((PremiumSpawner)pspawner).Running = false; // desativar! + + foreach ( Mobile mobdel in this.GetMobilesInRange( Range ) ) + { + if( mobdel is BaseCreature || mobdel is TownCrier ) + MobsCleaning.Add( mobdel ); + } + + if ( MobsCleaning.Count > 0 ) + { + foreach ( Mobile mDel in MobsCleaning ) + mDel.Delete(); + } + + foreach ( Item itemdel in this.GetItemsInRange( Range ) ) + { + if( itemdel.Movable == true ) //se for um item móvel (não decoração) + ItemsCleaning.Add( itemdel ); + } + + if ( ItemsCleaning.Count > 0 ) + { + foreach ( Item iDel in ItemsCleaning ) + iDel.Delete(); + } + } + } + } + } + + else if ( ClosePremiumSpawners.Count <= 0 ) + { + this.Enable = false; + this.CurrentDelay = TimeSpan.FromSeconds( OutRangeDelay ); + this.Overseeing = ClosePremiumSpawners.Count; + } + } + + public SpawnsOverseer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( m_Range ); + writer.Write( m_InRangeDelay ); + writer.Write( m_OutRangeDelay ); + writer.Write( m_Overseeing ); + writer.Write( m_Enable ); + if ( m_Enable ) + writer.WriteDeltaTime( m_End ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Range = reader.ReadInt(); + m_InRangeDelay = reader.ReadInt(); + m_OutRangeDelay = reader.ReadInt(); + m_Overseeing = reader.ReadInt(); + m_Enable = reader.ReadBool(); + TimeSpan ts = TimeSpan.Zero; + if ( m_Enable ) + ts = reader.ReadDeltaTime() - DateTime.Now; + DoTimer( ts ); + } + } +} \ No newline at end of file diff --git a/Scripts/Engines/Spawner/SpawnsOverseerCommand.cs b/Scripts/Engines/Spawner/SpawnsOverseerCommand.cs new file mode 100644 index 0000000..7090dfe --- /dev/null +++ b/Scripts/Engines/Spawner/SpawnsOverseerCommand.cs @@ -0,0 +1,458 @@ +// Engine r117 +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Commands +{ + public class GenOverseer + { + public static void Initialize() + { + CommandSystem.Register( "GenSeers", AccessLevel.Administrator, new CommandEventHandler( GenOverseer_OnCommand ) ); + CommandSystem.Register( "GenOverseers", AccessLevel.Administrator, new CommandEventHandler( GenOverseer_OnCommand ) ); + CommandSystem.Register( "GenSeer", AccessLevel.Administrator, new CommandEventHandler( GenOverseer_OnCommand ) ); + CommandSystem.Register( "GenOverseer", AccessLevel.Administrator, new CommandEventHandler( GenOverseer_OnCommand ) ); + } + + [Usage( "GenSeers" )] + [Aliases( "GenSeer, GenOverseer and GenOverseers" )] + [Description( "Generates Spawns' Overseers around the world." )] + private static void GenOverseer_OnCommand( CommandEventArgs e ) + { + m_Mobile = e.Mobile; + m_Count = 0; + + m_Mobile.SendMessage( "Generating Spawns' Overseers, please wait." ); + + Generate( "Data/Spawns/britannia", Map.Britannia ); + Generate( "Data/Spawns/underworld", Map.Underworld ); + Generate( "Data/Spawns/darkness", Map.Darkness ); + Generate( "Data/Spawns/ocean", Map.Ocean ); + Generate( "Data/Spawns/grassland", Map.Grassland ); + + m_Mobile.SendMessage( "Spawns' Overseers generation complete. {0} seers were generated.", m_Count ); + } + + public static void Generate( string folder, params Map[] maps ) + { + if ( !Directory.Exists( folder ) ) + return; + + string[] files = Directory.GetFiles( folder, "*.cfg" ); + + for ( int i = 0; i < files.Length; ++i ) + { + ArrayList list = DecorationListSeers.ReadAll( files[i] ); + + for ( int j = 0; j < list.Count; ++j ) + m_Count += ((DecorationListSeers)list[j]).Generate( maps ); + } + } + + private static Mobile m_Mobile; + private static int m_Count; + } + + public class DecorationListSeers + { + private Type m_Type; + private int m_ItemID; + private string[] m_Params; + private ArrayList m_Entries; + + public DecorationListSeers() + { + } + + private static Type typeofStatic = typeof( Static ); + private static Type typeofLocalizedStatic = typeof( LocalizedStatic ); + + public Item Construct() + { + Item item; + + try + { + if ( m_Type == typeofStatic ) + { + item = new Static( m_ItemID ); + } + else if ( m_Type == typeofLocalizedStatic ) + { + int labelNumber = 0; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "LabelNumber" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + { + labelNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + break; + } + } + } + + item = new LocalizedStatic( m_ItemID, labelNumber ); + } + else + { + item = (Item)Activator.CreateInstance( m_Type ); + } + } + catch ( Exception e ) + { + throw new Exception( String.Format( "Bad type: {0}", m_Type ), e ); + } + + if ( item is Server.Items.SpawnsOverseer ) + { + Server.Items.SpawnsOverseer sp = (Server.Items.SpawnsOverseer)item; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Range" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.Range = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "InRangeDelay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.InRangeDelay = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + else if ( m_Params[i].StartsWith( "OutRangeDelay" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + sp.OutRangeDelay = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + } + } + } + + item.Movable = false; + + for ( int i = 0; i < m_Params.Length; ++i ) + { + if ( m_Params[i].StartsWith( "Light" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + item.Light = (LightType)Enum.Parse( typeof( LightType ), m_Params[i].Substring( ++indexOf ), true ); + } + else if ( m_Params[i].StartsWith( "Hue" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + { + int hue = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + + if ( item is DyeTub ) + ((DyeTub)item).DyedHue = hue; + else + item.Hue = hue; + } + } + else if ( m_Params[i].StartsWith( "Name" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + item.Name = m_Params[i].Substring( ++indexOf ); + } + else if ( m_Params[i].StartsWith( "Amount" ) ) + { + int indexOf = m_Params[i].IndexOf( '=' ); + + if ( indexOf >= 0 ) + { + // Must supress stackable warnings + + bool wasStackable = item.Stackable; + + item.Stackable = true; + item.Amount = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) ); + item.Stackable = wasStackable; + } + } + } + + return item; + } + + private static Queue m_DeleteQueue = new Queue(); + + private static bool FindItem( int x, int y, int z, Map map, Item srcItem ) + { + int itemID = srcItem.ItemID; + + bool res = false; + + IPooledEnumerable eable; + + if ( (TileData.ItemTable[itemID & TileData.MaxItemValue].Flags & TileFlag.LightSource) != 0 ) + { + eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 ); + + LightType lt = srcItem.Light; + string srcName = srcItem.ItemData.Name; + + foreach ( Item item in eable ) + { + if ( item.Z == z ) + { + if ( item.ItemID == itemID ) + { + if ( item.Light != lt ) + m_DeleteQueue.Enqueue( item ); + else + res = true; + } + else if ( (item.ItemData.Flags & TileFlag.LightSource) != 0 && item.ItemData.Name == srcName ) + { + m_DeleteQueue.Enqueue( item ); + } + } + } + } + else + { + eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 ); + + foreach ( Item item in eable ) + { + if ( item.Z == z && item.ItemID == itemID ) + { + eable.Free(); + return true; + } + } + } + + eable.Free(); + + while ( m_DeleteQueue.Count > 0 ) + ((Item)m_DeleteQueue.Dequeue()).Delete(); + + return res; + } + + public int Generate( Map[] maps ) + { + int count = 0; + + Item item = null; + + for ( int i = 0; i < m_Entries.Count; ++i ) + { + DecorationEntrySeers entry = (DecorationEntrySeers)m_Entries[i]; + Point3D loc = entry.Location; + string extra = entry.Extra; + + for ( int j = 0; j < maps.Length; ++j ) + { + if ( item == null ) + item = Construct(); + + if ( item == null ) + continue; + + if ( FindItem( loc.X, loc.Y, loc.Z, maps[j], item ) ) + { + } + else + { + item.MoveToWorld( loc, maps[j] ); + ++count; + + item = null; + } + } + } + + if ( item != null ) + item.Delete(); + + return count; + } + + public static ArrayList ReadAll( string path ) + { + using ( StreamReader ip = new StreamReader( path ) ) + { + ArrayList list = new ArrayList(); + + for ( DecorationListSeers v = Read( ip ); v != null; v = Read( ip ) ) + list.Add( v ); + + return list; + } + } + + private static string[] m_EmptyParams = new string[0]; + + public static DecorationListSeers Read( StreamReader ip ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + line = line.Trim(); + + if ( line.Length > 0 && !line.StartsWith( "#" ) ) + break; + } + + if ( string.IsNullOrEmpty( line ) ) + return null; + + DecorationListSeers list = new DecorationListSeers(); + + int indexOf = line.IndexOf( ' ' ); + + list.m_Type = ScriptCompiler.FindTypeByName( line.Substring( 0, indexOf++ ), true ); + + if ( list.m_Type == null ) + throw new ArgumentException( String.Format( "Type not found for header: '{0}'", line ) ); + + line = line.Substring( indexOf ); + indexOf = line.IndexOf( '(' ); + if ( indexOf >= 0 ) + { + list.m_ItemID = Utility.ToInt32( line.Substring( 0, indexOf - 1 ) ); + + string parms = line.Substring( ++indexOf ); + + if ( line.EndsWith( ")" ) ) + parms = parms.Substring( 0, parms.Length - 1 ); + + list.m_Params = parms.Split( ';' ); + + for ( int i = 0; i < list.m_Params.Length; ++i ) + list.m_Params[i] = list.m_Params[i].Trim(); + } + else + { + list.m_ItemID = Utility.ToInt32( line ); + list.m_Params = m_EmptyParams; + } + + list.m_Entries = new ArrayList(); + + while ( (line = ip.ReadLine()) != null ) + { + line = line.Trim(); + + if ( line.Length == 0 ) + break; + + if ( line.StartsWith( "#" ) ) + continue; + + list.m_Entries.Add( new DecorationEntrySeers( line ) ); + } + + return list; + } + } + + public class DecorationEntrySeers + { + private Point3D m_Location; + private string m_Extra; + + public Point3D Location{ get{ return m_Location; } } + public string Extra{ get{ return m_Extra; } } + + public DecorationEntrySeers( string line ) + { + string x, y, z; + + Pop( out x, ref line ); + Pop( out y, ref line ); + Pop( out z, ref line ); + + m_Location = new Point3D( Utility.ToInt32( x ), Utility.ToInt32( y ), Utility.ToInt32( z ) ); + m_Extra = line; + } + + public void Pop( out string v, ref string line ) + { + int space = line.IndexOf( ' ' ); + + if ( space >= 0 ) + { + v = line.Substring( 0, space++ ); + line = line.Substring( space ); + } + else + { + v = line; + line = ""; + } + } + } + + public class RemOverseer + { + public static void Initialize() + { + CommandSystem.Register( "RemOverseers", AccessLevel.Administrator, new CommandEventHandler( RemOverseers_OnCommand ) ); + CommandSystem.Register( "RemSeers", AccessLevel.Administrator, new CommandEventHandler( RemOverseers_OnCommand ) ); + CommandSystem.Register( "RemOverseer", AccessLevel.Administrator, new CommandEventHandler( RemOverseers_OnCommand ) ); + CommandSystem.Register( "RemSeer", AccessLevel.Administrator, new CommandEventHandler( RemOverseers_OnCommand ) ); + } + + [Usage( "RemSeers" )] + [Aliases( "RemSeer, RemOverseer, RemOverseers" )] + [Description( "Remove all Overseers in all facets." )] + public static void RemOverseers_OnCommand( CommandEventArgs e ) + { + Mobile from = e.Mobile; + World.Broadcast( 0x35, true, "Overseers are being removed, please wait." ); + DateTime startTime = DateTime.Now; + int count = 0; + List itemsremove = new List(); + + foreach ( Item itemremove in World.Items.Values ) + { + if ( itemremove is SpawnsOverseer && itemremove.Parent == null ) + { + itemsremove.Add( itemremove ); + count +=1; + } + } + + foreach ( Item itemremove2 in itemsremove ) + { + itemremove2.Delete(); + } + + foreach ( Item premiums in World.Items.Values ) + { + if ( premiums is PremiumSpawner && premiums.Parent == null && ((PremiumSpawner)premiums).Running == false ) + { + ((PremiumSpawner)premiums).Running = true; + ((PremiumSpawner)premiums).NextSpawn = TimeSpan.FromSeconds( 1 ); + } + } + + DateTime endTime = DateTime.Now; + World.Broadcast( 0x35, true, "{0} Overseers has been removed in {1:F1} seconds.", count, (endTime - startTime).TotalSeconds ); + } + } +} diff --git a/Scripts/Gumps/AddDoorGump.cs b/Scripts/Gumps/AddDoorGump.cs new file mode 100644 index 0000000..8445bdf --- /dev/null +++ b/Scripts/Gumps/AddDoorGump.cs @@ -0,0 +1,140 @@ +using System; +using Server; +using Server.Items; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class AddDoorGump : Gump + { + private int m_Type; + + public AddDoorGump() : this( -1 ) + { + } + + public void AddBlueBack( int width, int height ) + { + AddBackground ( 0, 0, width-00, height-00, 0xE10 ); + AddBackground ( 8, 5, width-16, height-11, 0x053 ); + AddImageTiled ( 15, 14, width-29, height-29, 0xE14 ); + AddAlphaRegion( 15, 14, width-29, height-29 ); + } + + public AddDoorGump( int type ) : base( 50, 40 ) + { + m_Type = type; + + AddPage( 0 ); + + if ( m_Type >= 0 && m_Type < m_Types.Length ) + { + AddBlueBack( 155, 174 ); + + int baseID = m_Types[m_Type].m_BaseID; + + AddItem( 25, 24, baseID ); + AddButton( 26, 37, 0x5782, 0x5782, 1, GumpButtonType.Reply, 0 ); + + AddItem( 47, 45, baseID + 2 ); + AddButton( 43, 57, 0x5783, 0x5783, 2, GumpButtonType.Reply, 0 ); + + AddItem( 87, 22, baseID + 10 ); + AddButton( 116, 35, 0x5785, 0x5785, 6, GumpButtonType.Reply, 0 ); + + AddItem( 65, 45, baseID + 8 ); + AddButton( 96, 55, 0x5784, 0x5784, 5, GumpButtonType.Reply, 0 ); + + AddButton( 73, 36, 0x2716, 0x2716, 9, GumpButtonType.Reply, 0 ); + } + else + { + AddBlueBack( 1010, 145 ); + + for ( int i = 0; i < m_Types.Length; ++i ) + { + AddButton( 30 + (i * 49), 13, 0x2624, 0x2625, i + 1, GumpButtonType.Reply, 0 ); + AddItem( 22 + (i * 49), 20, m_Types[i].m_BaseID ); + } + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + int button = info.ButtonID - 1; + + if ( m_Type == -1 ) + { + if ( button >= 0 && button < m_Types.Length ) + from.SendGump( new AddDoorGump( button ) ); + } + else + { + if ( button >= 0 && button < 8 ) + { + from.SendGump( new AddDoorGump( m_Type ) ); + CommandSystem.Handle( from, String.Format( "{0}Add {1} {2}", CommandSystem.Prefix, m_Types[m_Type].m_Type.Name, (DoorFacing) button ) ); + } + else if ( button == 8 ) + { + from.SendGump( new AddDoorGump( m_Type ) ); + CommandSystem.Handle( from, String.Format( "{0}Link", CommandSystem.Prefix ) ); + } + else + { + from.SendGump( new AddDoorGump() ); + } + } + } + + public static void Initialize() + { + CommandSystem.Register( "AddDoor", AccessLevel.GameMaster, new CommandEventHandler( AddDoor_OnCommand ) ); + } + + [Usage( "AddDoor" )] + [Description( "Displays a menu from which you can interactively add doors." )] + public static void AddDoor_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new AddDoorGump() ); + } + + public static DoorInfo[] m_Types = new DoorInfo[] + { + new DoorInfo( typeof( MetalDoor ), 0x675 ), + new DoorInfo( typeof( MetalDoor2), 0x6C5 ), + new DoorInfo( typeof( RattanDoor ), 0x695 ), + new DoorInfo( typeof( DarkWoodDoor ), 0x6A5 ), + new DoorInfo( typeof( LightWoodDoor ), 0x6D5 ), + new DoorInfo( typeof( StrongWoodDoor ), 0x6E5 ), + new DoorInfo( typeof( LightWoodGate ), 0x839 ), + new DoorInfo( typeof( DarkWoodGate ), 0x866 ), + new DoorInfo( typeof( MediumWoodDoor ), 0x6B5 ), + new DoorInfo( typeof( SecretLightWoodDoor ), 0x344 ), + new DoorInfo( typeof( SecretWoodenDoor ), 0x334 ), + new DoorInfo( typeof( SecretDungeonDoor), 0x314 ), + new DoorInfo( typeof( SecretStoneDoor1 ), 0xE8 ), + new DoorInfo( typeof( SecretStoneDoor2 ), 0x324 ), + new DoorInfo( typeof( SecretStoneDoor3 ), 0x354 ), + new DoorInfo( typeof( IronGateShort ), 0x84C ), + new DoorInfo( typeof( IronGate ), 0x824 ), + new DoorInfo( typeof( BarredMetalDoor ), 0x685 ), + new DoorInfo( typeof( BarredMetalDoor2 ), 0x1FED ), + new DoorInfo( typeof( SecretBookDoor ), 0x20F8 ) + }; + } + + public class DoorInfo + { + public Type m_Type; + public int m_BaseID; + + public DoorInfo( Type type, int baseID ) + { + m_Type = type; + m_BaseID = baseID; + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/AddGump.cs b/Scripts/Gumps/AddGump.cs new file mode 100644 index 0000000..c13e91c --- /dev/null +++ b/Scripts/Gumps/AddGump.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using Server; +using Server.Commands; +using Server.Network; +using Server.Targeting; + +namespace Server.Gumps +{ + public class AddGump : Gump + { + private string m_SearchString; + private Type[] m_SearchResults; + private int m_Page; + + public static void Initialize() + { + CommandSystem.Register( "AddMenu", AccessLevel.GameMaster, new CommandEventHandler( AddMenu_OnCommand ) ); + } + + [Usage( "AddMenu [searchString]" )] + [Description( "Opens an add menu, with an optional initial search string. This menu allows you to search for Items or Mobiles and add them interactively." )] + private static void AddMenu_OnCommand( CommandEventArgs e ) + { + string val = e.ArgString.Trim(); + Type[] types; + bool explicitSearch = false; + + if ( val.Length == 0 ) + { + types = Type.EmptyTypes; + } + else if ( val.Length < 3 ) + { + e.Mobile.SendMessage( "Invalid search string." ); + types = Type.EmptyTypes; + } + else + { + types = Match( val ).ToArray(); + explicitSearch = true; + } + + e.Mobile.SendGump( new AddGump( e.Mobile, val, 0, types, explicitSearch ) ); + } + + public AddGump( Mobile from, string searchString, int page, Type[] searchResults, bool explicitSearch ) : base( 50, 50 ) + { + m_SearchString = searchString; + m_SearchResults = searchResults; + m_Page = page; + + from.CloseGump( typeof( AddGump ) ); + + AddPage( 0 ); + + AddBackground( 0, 0, 420, 280, 5054 ); + + AddImageTiled( 10, 10, 400, 20, 2624 ); + AddAlphaRegion( 10, 10, 400, 20 ); + AddImageTiled( 41, 11, 184, 18, 0xBBC ); + AddImageTiled( 42, 12, 182, 16, 2624 ); + AddAlphaRegion( 42, 12, 182, 16 ); + + AddButton( 10, 9, 4011, 4013, 1, GumpButtonType.Reply, 0 ); + AddTextEntry( 44, 10, 180, 20, 0x480, 0, searchString ); + + AddHtmlLocalized( 230, 10, 100, 20, 3010005, 0x7FFF, false, false ); + + AddImageTiled( 10, 40, 400, 200, 2624 ); + AddAlphaRegion( 10, 40, 400, 200 ); + + if ( searchResults.Length > 0 ) + { + for ( int i = (page * 10); i < ((page + 1) * 10) && i < searchResults.Length; ++i ) + { + int index = i % 10; + + AddLabel( 44, 39 + (index * 20), 0x480, searchResults[i].Name ); + AddButton( 10, 39 + (index * 20), 4023, 4025, 4 + i, GumpButtonType.Reply, 0 ); + } + } + else + { + AddLabel( 15, 44, 0x480, explicitSearch ? "Nothing matched your search terms." : "No results to display." ); + } + + AddImageTiled( 10, 250, 400, 20, 2624 ); + AddAlphaRegion( 10, 250, 400, 20 ); + + if ( m_Page > 0 ) + AddButton( 10, 249, 4014, 4016, 2, GumpButtonType.Reply, 0 ); + else + AddImage( 10, 249, 4014 ); + + AddHtmlLocalized( 44, 250, 170, 20, 1061028, m_Page > 0 ? 0x7FFF : 0x5EF7, false, false ); // Previous page + + if ( ((m_Page + 1) * 10) < searchResults.Length ) + AddButton( 210, 249, 4005, 4007, 3, GumpButtonType.Reply, 0 ); + else + AddImage( 210, 249, 4005 ); + + AddHtmlLocalized( 244, 250, 170, 20, 1061027, ((m_Page + 1) * 10) < searchResults.Length ? 0x7FFF : 0x5EF7, false, false ); // Next page + } + + private static Type typeofItem = typeof( Item ), typeofMobile = typeof( Mobile ); + + private static void Match( string match, Type[] types, List results ) + { + if ( match.Length == 0 ) + return; + + match = match.ToLower(); + + for ( int i = 0; i < types.Length; ++i ) + { + Type t = types[i]; + + if ( (typeofMobile.IsAssignableFrom( t ) || typeofItem.IsAssignableFrom( t )) && t.Name.ToLower().IndexOf( match ) >= 0 && !results.Contains( t ) ) + { + ConstructorInfo[] ctors = t.GetConstructors(); + + for ( int j = 0; j < ctors.Length; ++j ) + { + if ( ctors[j].GetParameters().Length == 0 && ctors[j].IsDefined( typeof( ConstructableAttribute ), false ) ) + { + results.Add( t ); + break; + } + } + } + } + } + + public static List Match( string match ) + { + List results = new List(); + Type[] types; + + Assembly[] asms = ScriptCompiler.Assemblies; + + for ( int i = 0; i < asms.Length; ++i ) + { + types = ScriptCompiler.GetTypeCache( asms[i] ).Types; + Match( match, types, results ); + } + + types = ScriptCompiler.GetTypeCache( Core.Assembly ).Types; + Match( match, types, results ); + + results.Sort( new TypeNameComparer() ); + + return results; + } + + private class TypeNameComparer : IComparer + { + public int Compare( Type x, Type y ) + { + return x.Name.CompareTo( y.Name ); + } + } + + public class InternalTarget : Target + { + private Type m_Type; + private Type[] m_SearchResults; + private string m_SearchString; + private int m_Page; + + public InternalTarget( Type type, Type[] searchResults, string searchString, int page ) : base( -1, true, TargetFlags.None ) + { + m_Type = type; + m_SearchResults = searchResults; + m_SearchString = searchString; + m_Page = page; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + { + if ( p is Item ) + p = ((Item)p).GetWorldTop(); + else if ( p is Mobile ) + p = ((Mobile)p).Location; + + Server.Commands.Add.Invoke( from, new Point3D( p ), new Point3D( p ), new string[]{ m_Type.Name } ); + + from.Target = new InternalTarget( m_Type, m_SearchResults, m_SearchString, m_Page ); + } + } + + protected override void OnTargetCancel( Mobile from, TargetCancelType cancelType ) + { + if ( cancelType == TargetCancelType.Canceled ) + from.SendGump( new AddGump( from, m_SearchString, m_Page, m_SearchResults, true ) ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + + switch ( info.ButtonID ) + { + case 1: // Search + { + TextRelay te = info.GetTextEntry( 0 ); + string match = ( te == null ? "" : te.Text.Trim() ); + + if ( match.Length < 3 ) + { + from.SendMessage( "Invalid search string." ); + from.SendGump( new AddGump( from, match, m_Page, m_SearchResults, false ) ); + } + else + { + from.SendGump( new AddGump( from, match, 0, Match( match ).ToArray(), true ) ); + } + + break; + } + case 2: // Previous page + { + if ( m_Page > 0 ) + from.SendGump( new AddGump( from, m_SearchString, m_Page - 1, m_SearchResults, true ) ); + + break; + } + case 3: // Next page + { + if ( (m_Page + 1) * 10 < m_SearchResults.Length ) + from.SendGump( new AddGump( from, m_SearchString, m_Page + 1, m_SearchResults, true ) ); + + break; + } + default: + { + int index = info.ButtonID - 4; + + if ( index >= 0 && index < m_SearchResults.Length ) + { + from.SendMessage( "Where do you wish to place this object? to cancel." ); + from.Target = new InternalTarget( m_SearchResults[index], m_SearchResults, m_SearchString, m_Page ); + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/AdminGump.cs b/Scripts/Gumps/AdminGump.cs new file mode 100644 index 0000000..2222e28 --- /dev/null +++ b/Scripts/Gumps/AdminGump.cs @@ -0,0 +1,2896 @@ +using System; +using System.Net; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using Server; +using Server.Items; +using Server.Prompts; +using Server.Network; +using Server.Accounting; +using Server.Commands; + +namespace Server.Gumps +{ + public enum AdminGumpPage + { + Information_General, + Information_Perf, + Administer, + Clients, + Accounts, + Accounts_Shared, + Firewall, + Administer_WorldBuilding, + Administer_Server, + Administer_Access, + Administer_Access_Lockdown, + Administer_Commands, + ClientInfo, + AccountDetails, + AccountDetails_Information, + AccountDetails_Characters, + AccountDetails_Access, + AccountDetails_Access_ClientIPs, + AccountDetails_Access_Restrictions, + AccountDetails_Comments, + AccountDetails_Tags, + AccountDetails_ChangePassword, + AccountDetails_ChangeAccess, + FirewallInfo + } + + public class AdminGump : Gump + { + private Mobile m_From; + private AdminGumpPage m_PageType; + private ArrayList m_List; + private int m_ListPage; + private object m_State; + + private const int LabelColor = 0x7FFF; + private const int SelectedColor = 0x421F; + private const int DisabledColor = 0x4210; + + private const int LabelColor32 = 0xFFFFFF; + private const int SelectedColor32 = 0x8080FF; + private const int DisabledColor32 = 0x808080; + + private const int LabelHue = 0x480; + private const int GreenHue = 0x40; + private const int RedHue = 0x20; + + public void AddPageButton( int x, int y, int buttonID, string text, AdminGumpPage page, params AdminGumpPage[] subPages ) + { + bool isSelection = ( m_PageType == page ); + + for ( int i = 0; !isSelection && i < subPages.Length; ++i ) + isSelection = ( m_PageType == subPages[i] ); + + AddSelectedButton( x, y, buttonID, text, isSelection ); + } + + public void AddSelectedButton( int x, int y, int buttonID, string text, bool isSelection ) + { + AddButton( x, y - 1, isSelection ? 4006 : 4005, 4007, buttonID, GumpButtonType.Reply, 0 ); + AddHtml( x + 35, y, 200, 20, Color( text, isSelection ? SelectedColor32 : LabelColor32 ), false, false ); + } + + public void AddButtonLabeled( int x, int y, int buttonID, string text ) + { + AddButton( x, y - 1, 4005, 4007, buttonID, GumpButtonType.Reply, 0 ); + AddHtml( x + 35, y, 240, 20, Color( text, LabelColor32 ), false, false ); + } + + public string Center( string text ) + { + return String.Format( "
{0}
", text ); + } + + public string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + + public void AddBlackAlpha( int x, int y, int width, int height ) + { + AddImageTiled( x, y, width, height, 2624 ); + AddAlphaRegion( x, y, width, height ); + } + + public int GetButtonID( int type, int index ) + { + return 1 + (index * 10) + type; + } + + public static string FormatTimeSpan( TimeSpan ts ) + { + return String.Format( "{0:D2}:{1:D2}:{2:D2}:{3:D2}", ts.Days, ts.Hours % 24, ts.Minutes % 60, ts.Seconds % 60 ); + } + + public static string FormatByteAmount( long totalBytes ) + { + if ( totalBytes > 1000000000 ) + return String.Format( "{0:F1} GB", (double)totalBytes / 1073741824 ); + + if ( totalBytes > 1000000 ) + return String.Format( "{0:F1} MB", (double)totalBytes / 1048576 ); + + if ( totalBytes > 1000 ) + return String.Format( "{0:F1} KB", (double)totalBytes / 1024 ); + + return String.Format( "{0} Bytes", totalBytes ); + } + + public static void Initialize() + { + CommandSystem.Register( "Admin", AccessLevel.Administrator, new CommandEventHandler( Admin_OnCommand ) ); + } + + [Usage( "Admin" )] + [Description( "Opens an interface providing server information and administration features including client, account, and firewall management." )] + public static void Admin_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new AdminGump( e.Mobile, AdminGumpPage.Clients, 0, null, null, null ) ); + } + + public static int GetHueFor( Mobile m ) + { + if ( m == null ) + return LabelHue; + + switch ( m.AccessLevel ) + { + case AccessLevel.Owner: + case AccessLevel.Developer: + case AccessLevel.Administrator: return 0x516; + case AccessLevel.Seer: return 0x144; + case AccessLevel.GameMaster: return 0x21; + case AccessLevel.Counselor: return 0x2; + case AccessLevel.Player: default: + { + if ( m.Kills >= 5 ) + return 0x21; + else if ( m.Criminal ) + return 0x3B1; + + return 0x58; + } + } + } + + private static string[] m_AccessLevelStrings = new string[] + { + "Player", + "Counselor", + "Game Master", + "Seer", + "Administrator", + "Developer", + "Owner" + }; + + public static string FormatAccessLevel( AccessLevel level ) + { + int v = (int)level; + + if ( v >= 0 && v < m_AccessLevelStrings.Length ) + return m_AccessLevelStrings[v]; + + return "Unknown"; + } + + public AdminGump( Mobile from, AdminGumpPage pageType, int listPage, ArrayList list, string notice, object state ) : base( 50, 40 ) + { + from.CloseGump( typeof( AdminGump ) ); + + m_From = from; + m_PageType = pageType; + m_ListPage = listPage; + m_State = state; + m_List = list; + + AddPage( 0 ); + + AddBackground( 0, 0, 420, 440, 5054 ); + + AddBlackAlpha( 10, 10, 170, 100 ); + AddBlackAlpha( 190, 10, 220, 100 ); + AddBlackAlpha( 10, 120, 400, 260 ); + AddBlackAlpha( 10, 390, 400, 40 ); + + AddPageButton( 10, 10, GetButtonID( 0, 0 ), "INFORMATION", AdminGumpPage.Information_General, AdminGumpPage.Information_Perf ); + AddPageButton( 10, 30, GetButtonID( 0, 1 ), "ADMINISTER", AdminGumpPage.Administer, AdminGumpPage.Administer_Access, AdminGumpPage.Administer_Commands, AdminGumpPage.Administer_Server, AdminGumpPage.Administer_WorldBuilding, AdminGumpPage.Administer_Access_Lockdown ); + AddPageButton( 10, 50, GetButtonID( 0, 2 ), "CLIENT LIST", AdminGumpPage.Clients, AdminGumpPage.ClientInfo ); + AddPageButton( 10, 70, GetButtonID( 0, 3 ), "ACCOUNT LIST", AdminGumpPage.Accounts, AdminGumpPage.Accounts_Shared, AdminGumpPage.AccountDetails, AdminGumpPage.AccountDetails_Information, AdminGumpPage.AccountDetails_Characters, AdminGumpPage.AccountDetails_Access, AdminGumpPage.AccountDetails_Access_ClientIPs, AdminGumpPage.AccountDetails_Access_Restrictions, AdminGumpPage.AccountDetails_Comments, AdminGumpPage.AccountDetails_Tags, AdminGumpPage.AccountDetails_ChangeAccess, AdminGumpPage.AccountDetails_ChangePassword ); + AddPageButton( 10, 90, GetButtonID( 0, 4 ), "FIREWALL", AdminGumpPage.Firewall, AdminGumpPage.FirewallInfo ); + + if ( notice != null ) + AddHtml( 12, 392, 396, 36, Color( notice, LabelColor32 ), false, false ); + + switch ( pageType ) + { + case AdminGumpPage.Information_General: + { + int banned = 0; + int active = 0; + + foreach ( Account acct in Accounts.GetAccounts() ) + { + if ( acct.Banned ) + ++banned; + else + ++active; + } + + AddLabel( 20, 130, LabelHue, "Active Accounts:" ); + AddLabel( 150, 130, LabelHue, active.ToString() ); + + AddLabel( 20, 150, LabelHue, "Banned Accounts:" ); + AddLabel( 150, 150, LabelHue, banned.ToString() ); + + AddLabel( 20, 170, LabelHue, "Firewalled:" ); + AddLabel( 150, 170, LabelHue, Firewall.List.Count.ToString() ); + + AddLabel( 20, 190, LabelHue, "Clients:" ); + AddLabel( 150, 190, LabelHue, NetState.Instances.Count.ToString() ); + + AddLabel( 20, 210, LabelHue, "Mobiles:" ); + AddLabel( 150, 210, LabelHue, World.Mobiles.Count.ToString() ); + + AddLabel( 20, 230, LabelHue, "Mobile Scripts:" ); + AddLabel( 150, 230, LabelHue, Core.ScriptMobiles.ToString() ); + + AddLabel( 20, 250, LabelHue, "Items:" ); + AddLabel( 150, 250, LabelHue, World.Items.Count.ToString() ); + + AddLabel( 20, 270, LabelHue, "Item Scripts:" ); + AddLabel( 150, 270, LabelHue, Core.ScriptItems.ToString() ); + + AddLabel( 20, 290, LabelHue, "Uptime:" ); + AddLabel( 150, 290, LabelHue, FormatTimeSpan( DateTime.Now - Clock.ServerStart ) ); + + AddLabel( 20, 310, LabelHue, "Memory:" ); + AddLabel( 150, 310, LabelHue, FormatByteAmount( GC.GetTotalMemory( false ) ) ); + + AddLabel( 20, 330, LabelHue, "Framework:" ); + AddLabel( 150, 330, LabelHue, Environment.Version.ToString() ); + + AddLabel( 20, 350, LabelHue, "Operating System: " ); + string os = Environment.OSVersion.ToString(); + + os = os.Replace( "Microsoft", "MSFT" ); + os = os.Replace( "Service Pack", "SP" ); + + AddLabel( 150, 350, LabelHue, os ); + + /*string str; + + try{ str = FormatTimeSpan( Core.Process.TotalProcessorTime ); } + catch{ str = "(unable to retrieve)"; } + + AddLabel( 20, 330, LabelHue, "Process Time:" ); + AddLabel( 250, 330, LabelHue, str );*/ + + /*try{ str = Core.Process.PriorityClass.ToString(); } + catch{ str = "(unable to retrieve)"; } + + AddLabel( 20, 350, LabelHue, "Process Priority:" ); + AddLabel( 250, 350, LabelHue, str );*/ + + AddPageButton( 200, 20, GetButtonID( 0, 0 ), "General", AdminGumpPage.Information_General ); + AddPageButton( 200, 40, GetButtonID( 0, 5 ), "Performance", AdminGumpPage.Information_Perf ); + + break; + } + case AdminGumpPage.Information_Perf: + { + AddLabel( 20, 130, LabelHue, "Cycles Per Second:" ); + AddLabel( 40, 150, LabelHue, "Current: " + Core.CyclesPerSecond.ToString( "N2" ) ); + AddLabel( 40, 170, LabelHue, "Average: " + Core.AverageCPS.ToString( "N2" ) ); + + StringBuilder sb = new StringBuilder(); + + int curUser, maxUser; + int curIOCP, maxIOCP; + + System.Threading.ThreadPool.GetAvailableThreads( out curUser, out curIOCP ); + System.Threading.ThreadPool.GetMaxThreads( out maxUser, out maxIOCP ); + + sb.Append( "Worker Threads:
Capacity: " ); + sb.Append( maxUser ); + sb.Append( "
Available: " ); + sb.Append( curUser ); + sb.Append( "
Usage: " ); + sb.Append( ((maxUser - curUser) * 100) / maxUser ); + sb.Append( "%

IOCP Threads:
Capacity: " ); + sb.Append( maxIOCP ); + sb.Append( "
Available: " ); + sb.Append( curIOCP ); + sb.Append( "
Usage: " ); + sb.Append( ((maxIOCP - curIOCP) * 100) / maxIOCP ); + sb.Append( "%" ); + + List pools = BufferPool.Pools; + + lock ( pools ) + { + for ( int i = 0; i < pools.Count; ++i ) + { + BufferPool pool = pools[i]; + string name; + int freeCount; + int initialCapacity; + int currentCapacity; + int bufferSize; + int misses; + + pool.GetInfo( out name, out freeCount, out initialCapacity, out currentCapacity, out bufferSize, out misses ); + + if ( sb.Length > 0 ) + sb.Append( "

" ); + + sb.Append( name ); + sb.Append( "
Size: " ); + sb.Append( FormatByteAmount( bufferSize ) ); + sb.Append( "
Capacity: " ); + sb.Append( currentCapacity ); + sb.Append( " (" ); + sb.Append( misses ); + sb.Append( " misses)
Available: " ); + sb.Append( freeCount ); + sb.Append( "
Usage: " ); + sb.Append( ((currentCapacity - freeCount) * 100) / currentCapacity ); + sb.Append( "% : " ); + sb.Append( FormatByteAmount( (currentCapacity - freeCount) * bufferSize ) ); + sb.Append( " of " ); + sb.Append( FormatByteAmount( currentCapacity * bufferSize ) ); + } + } + + + AddLabel( 20, 200, LabelHue, "Pooling:" ); + AddHtml( 20, 220, 380, 150, sb.ToString(), true, true ); + + AddPageButton( 200, 20, GetButtonID( 0, 0 ), "General", AdminGumpPage.Information_General ); + AddPageButton( 200, 40, GetButtonID( 0, 5 ), "Performance", AdminGumpPage.Information_Perf ); + + break; + } + case AdminGumpPage.Administer_WorldBuilding: + { + AddHtml( 10, 125, 400, 20, Color( Center( "Build" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 150, GetButtonID( 3, 100 ), "Build World" ); + + AddHtml( 20, 275, 400, 30, Color( Center( "Statics" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 300, GetButtonID( 3, 110 ), "Freeze (Target)" ); + AddButtonLabeled( 20, 325, GetButtonID( 3, 111 ), "Freeze (World)" ); + AddButtonLabeled( 20, 350, GetButtonID( 3, 112 ), "Freeze (Map)" ); + + AddButtonLabeled( 220, 300, GetButtonID( 3, 120 ), "Unfreeze (Target)" ); + AddButtonLabeled( 220, 325, GetButtonID( 3, 121 ), "Unfreeze (World)" ); + AddButtonLabeled( 220, 350, GetButtonID( 3, 122 ), "Unfreeze (Map)" ); + + goto case AdminGumpPage.Administer; + } + case AdminGumpPage.Administer_Server: + { + AddHtml( 10, 125, 400, 20, Color( Center( "Server" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 150, GetButtonID( 3, 200 ), "Save" ); + + /*if ( !Core.Service ) + {*/ + AddButtonLabeled( 20, 180, GetButtonID( 3, 201 ), "Shutdown (With Save)" ); + AddButtonLabeled( 20, 200, GetButtonID( 3, 202 ), "Shutdown (Without Save)" ); + + AddButtonLabeled( 20, 230, GetButtonID( 3, 203 ), "Shutdown & Restart (With Save)" ); + AddButtonLabeled( 20, 250, GetButtonID( 3, 204 ), "Shutdown & Restart (Without Save)" ); + /*} + else + { + AddLabel( 20, 215, LabelHue, "Shutdown/Restart not available." ); + }*/ + + AddHtml( 10, 295, 400, 20, Color( Center( "Broadcast" ), LabelColor32 ), false, false ); + + AddTextField( 20, 320, 380, 20, 0 ); + AddButtonLabeled( 20, 350, GetButtonID( 3, 210 ), "To Everyone" ); + AddButtonLabeled( 220, 350, GetButtonID( 3, 211 ), "To Staff" ); + + goto case AdminGumpPage.Administer; + } + case AdminGumpPage.Administer_Access_Lockdown: + { + AddHtml( 10, 125, 400, 20, Color( Center( "Server Lockdown" ), LabelColor32 ), false, false ); + + AddHtml( 20, 150, 380, 80, Color( "When enabled, only clients with an access level equal to or greater than the specified lockdown level may access the server. After setting a lockdown level, use the Purge Invalid Clients button to disconnect those clients without access.", LabelColor32 ), false, false ); + + AccessLevel level = Misc.AccountHandler.LockdownLevel; + bool isLockedDown = ( level > AccessLevel.Player ); + + AddSelectedButton( 20, 230, GetButtonID( 3, 500 ), "Not Locked Down", !isLockedDown ); + AddSelectedButton( 20, 260, GetButtonID( 3, 504 ), "Administrators", ( isLockedDown && level <= AccessLevel.Administrator ) ); + AddSelectedButton( 20, 280, GetButtonID( 3, 503 ), "Seers", ( isLockedDown && level <= AccessLevel.Seer ) ); + AddSelectedButton( 20, 300, GetButtonID( 3, 502 ), "Game Masters", ( isLockedDown && level <= AccessLevel.GameMaster ) ); + AddSelectedButton( 20, 320, GetButtonID( 3, 501 ), "Counselors", ( isLockedDown && level <= AccessLevel.Counselor ) ); + + AddButtonLabeled( 20, 350, GetButtonID( 3, 510 ), "Purge Invalid Clients" ); + + goto case AdminGumpPage.Administer; + } + case AdminGumpPage.Administer_Access: + { + AddHtml( 10, 125, 400, 20, Color( Center( "Access" ), LabelColor32 ), false, false ); + + AddHtml( 10, 155, 400, 20, Color( Center( "Connectivity" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 180, GetButtonID( 3, 300 ), "Kick" ); + AddButtonLabeled( 220, 180, GetButtonID( 3, 301 ), "Ban" ); + + AddButtonLabeled( 20, 210, GetButtonID( 3, 302 ), "Firewall" ); + AddButtonLabeled( 220, 210, GetButtonID( 3, 303 ), "Lockdown" ); + + AddHtml( 10, 245, 400, 20, Color( Center( "Staff" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 270, GetButtonID( 3, 310 ), "Make Player" ); + AddButtonLabeled( 20, 290, GetButtonID( 3, 311 ), "Make Counselor" ); + AddButtonLabeled( 20, 310, GetButtonID( 3, 312 ), "Make Game Master" ); + AddButtonLabeled( 20, 330, GetButtonID( 3, 313 ), "Make Seer" ); + + if ( from.AccessLevel > AccessLevel.Administrator ) + { + AddButtonLabeled( 220, 270, GetButtonID( 3, 314 ), "Make Administrator" ); + + if ( from.AccessLevel > AccessLevel.Developer ) + { + AddButtonLabeled( 220, 290, GetButtonID( 3, 315 ), "Make Developer" ); + + if ( from.AccessLevel >= AccessLevel.Owner ) + AddButtonLabeled( 220, 310, GetButtonID( 3, 316 ), "Make Owner" ); + } + } + + goto case AdminGumpPage.Administer; + } + case AdminGumpPage.Administer_Commands: + { + AddHtml( 10, 125, 400, 20, Color( Center( "Commands" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 150, GetButtonID( 3, 400 ), "Add" ); + AddButtonLabeled( 220, 150, GetButtonID( 3, 401 ), "Remove" ); + + AddButtonLabeled( 20, 170, GetButtonID( 3, 402 ), "Dupe" ); + AddButtonLabeled( 220, 170, GetButtonID( 3, 403 ), "Dupe in bag" ); + + AddButtonLabeled( 20, 200, GetButtonID( 3, 404 ), "Properties" ); + AddButtonLabeled( 220, 200, GetButtonID( 3, 405 ), "Skills" ); + + AddButtonLabeled( 20, 230, GetButtonID( 3, 406 ), "Mortal" ); + AddButtonLabeled( 220, 230, GetButtonID( 3, 407 ), "Immortal" ); + + AddButtonLabeled( 20, 250, GetButtonID( 3, 408 ), "Squelch" ); + AddButtonLabeled( 220, 250, GetButtonID( 3, 409 ), "Unsquelch" ); + + AddButtonLabeled( 20, 270, GetButtonID( 3, 410 ), "Freeze" ); + AddButtonLabeled( 220, 270, GetButtonID( 3, 411 ), "Unfreeze" ); + + AddButtonLabeled( 20, 290, GetButtonID( 3, 412 ), "Hide" ); + AddButtonLabeled( 220, 290, GetButtonID( 3, 413 ), "Unhide" ); + + AddButtonLabeled( 20, 310, GetButtonID( 3, 414 ), "Kill" ); + AddButtonLabeled( 220, 310, GetButtonID( 3, 415 ), "Resurrect" ); + + AddButtonLabeled( 20, 330, GetButtonID( 3, 416 ), "Move" ); + AddButtonLabeled( 220, 330, GetButtonID( 3, 417 ), "Wipe" ); + + AddButtonLabeled( 20, 350, GetButtonID( 3, 418 ), "Teleport" ); + AddButtonLabeled( 220, 350, GetButtonID( 3, 419 ), "Teleport (Multiple)" ); + + goto case AdminGumpPage.Administer; + } + case AdminGumpPage.Administer: + { + AddPageButton( 200, 20, GetButtonID( 3, 0 ), "World Building", AdminGumpPage.Administer_WorldBuilding ); + AddPageButton( 200, 40, GetButtonID( 3, 1 ), "Server", AdminGumpPage.Administer_Server ); + AddPageButton( 200, 60, GetButtonID( 3, 2 ), "Access", AdminGumpPage.Administer_Access, AdminGumpPage.Administer_Access_Lockdown ); + AddPageButton( 200, 80, GetButtonID( 3, 3 ), "Commands", AdminGumpPage.Administer_Commands ); + + break; + } + case AdminGumpPage.Clients: + { + if ( m_List == null ) + { + m_List = new ArrayList( NetState.Instances ); + m_List.Sort( NetStateComparer.Instance ); + } + + AddClientHeader(); + + AddLabelCropped( 12, 120, 81, 20, LabelHue, "Name" ); + AddLabelCropped( 95, 120, 81, 20, LabelHue, "Account" ); + AddLabelCropped( 178, 120, 81, 20, LabelHue, "Access Level" ); + AddLabelCropped( 273, 120,109, 20, LabelHue, "IP Address" ); + + if ( listPage > 0 ) + AddButton( 375, 122, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 ); + else + AddImage( 375, 122, 0x25EA ); + + if ( (listPage + 1) * 12 < m_List.Count ) + AddButton( 392, 122, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 ); + else + AddImage( 392, 122, 0x25E6 ); + + if ( m_List.Count == 0 ) + AddLabel( 12, 140, LabelHue, "There are no clients to display." ); + + for ( int i = 0, index = (listPage * 12); i < 12 && index >= 0 && index < m_List.Count; ++i, ++index ) + { + NetState ns = m_List[index] as NetState; + + if ( ns == null ) + continue; + + Mobile m = ns.Mobile; + Account a = ns.Account as Account; + int offset = 140 + (i * 20); + + if ( m == null ) + { + AddLabelCropped( 12, offset, 81, 20, LabelHue, "(logging in)" ); + } + else + { + AddLabelCropped( 12, offset, 81, 20, GetHueFor( m ), m.Name ); + } + AddLabelCropped( 95, offset, 81, 20, LabelHue, a == null ? "(no account)" : a.Username ); + AddLabelCropped( 178, offset, 81, 20, LabelHue, m == null ? (a != null ? FormatAccessLevel( a.AccessLevel ) : "") : FormatAccessLevel( m.AccessLevel ) ); + AddLabelCropped( 273, offset,109, 20, LabelHue, ns.ToString() ); + + if ( a != null || m != null ) + AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 4, index + 2 ), GumpButtonType.Reply, 0 ); + } + + break; + } + case AdminGumpPage.ClientInfo: + { + Mobile m = state as Mobile; + + if ( m == null ) + break; + + AddClientHeader(); + + AddHtml( 10, 125, 400, 20, Color( Center( "Information" ), LabelColor32 ), false, false ); + + int y = 146; + + AddLabel( 20, y, LabelHue, "Name:" ); + AddLabel( 200, y, GetHueFor( m ), m.Name ); + y += 20; + + Account a = m.Account as Account; + + AddLabel( 20, y, LabelHue, "Account:" ); + AddLabel( 200, y, (a != null && a.Banned) ? RedHue : LabelHue, a == null ? "(no account)" : a.Username ); + AddButton( 380, y, 0xFA5, 0xFA7, GetButtonID( 7, 14 ), GumpButtonType.Reply, 0 ); + y += 20; + + NetState ns = m.NetState; + + if ( ns == null ) + { + AddLabel( 20, y, LabelHue, "Address:" ); + AddLabel( 200, y, RedHue, "Offline" ); + y += 20; + + AddLabel( 20, y, LabelHue, "Location:" ); + AddLabel( 200, y, LabelHue, String.Format( "{0} [{1}]", m.Location, m.Map ) ); + y += 44; + } + else + { + AddLabel( 20, y, LabelHue, "Address:" ); + AddLabel( 200, y, GreenHue, ns.ToString() ); + y += 20; + + ClientVersion v = ns.Version; + + AddLabel( 20, y, LabelHue, "Version:" ); + AddLabel( 200, y, LabelHue, v == null ? "(null)" : v.ToString() ); + y += 20; + + AddLabel( 20, y, LabelHue, "Location:" ); + AddLabel( 200, y, LabelHue, String.Format( "{0} [{1}]", m.Location, m.Map ) ); + y += 24; + } + + AddButtonLabeled( 20, y, GetButtonID( 7, 0 ), "Go to" ); + AddButtonLabeled( 200, y, GetButtonID( 7, 1 ), "Get" ); + y += 20; + + AddButtonLabeled( 20, y, GetButtonID( 7, 2 ), "Kick" ); + AddButtonLabeled( 200, y, GetButtonID( 7, 3 ), "Ban" ); + y += 20; + + AddButtonLabeled( 20, y, GetButtonID( 7, 4 ), "Properties" ); + AddButtonLabeled( 200, y, GetButtonID( 7, 5 ), "Skills" ); + y += 20; + + AddButtonLabeled( 20, y, GetButtonID( 7, 6 ), "Mortal" ); + AddButtonLabeled( 200, y, GetButtonID( 7, 7 ), "Immortal" ); + y += 20; + + AddButtonLabeled( 20, y, GetButtonID( 7, 8 ), "Squelch" ); + AddButtonLabeled( 200, y, GetButtonID( 7, 9 ), "Unsquelch" ); + y += 20; + + /*AddButtonLabeled( 20, y, GetButtonID( 7, 10 ), "Hide" ); + AddButtonLabeled( 200, y, GetButtonID( 7, 11 ), "Unhide" ); + y += 20;*/ + + AddButtonLabeled( 20, y, GetButtonID( 7, 12 ), "Kill" ); + AddButtonLabeled( 200, y, GetButtonID( 7, 13 ), "Resurrect" ); + y += 20; + + break; + } + case AdminGumpPage.Accounts_Shared: + { + if ( m_List == null ) + m_List = GetAllSharedAccounts(); + + AddLabelCropped( 12, 120, 60, 20, LabelHue, "Count" ); + AddLabelCropped( 72, 120, 120, 20, LabelHue, "Address" ); + AddLabelCropped( 192, 120, 180, 20, LabelHue, "Accounts" ); + + if ( listPage > 0 ) + AddButton( 375, 122, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 ); + else + AddImage( 375, 122, 0x25EA ); + + if ( (listPage + 1) * 12 < m_List.Count ) + AddButton( 392, 122, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 ); + else + AddImage( 392, 122, 0x25E6 ); + + if ( m_List.Count == 0 ) + AddLabel( 12, 140, LabelHue, "There are no accounts to display." ); + + StringBuilder sb = new StringBuilder(); + + for ( int i = 0, index = (listPage * 12); i < 12 && index >= 0 && index < m_List.Count; ++i, ++index ) + { + DictionaryEntry de = (DictionaryEntry)m_List[index]; + + IPAddress ipAddr = (IPAddress)de.Key; + ArrayList accts = (ArrayList)de.Value; + + int offset = 140 + (i * 20); + + AddLabelCropped( 12, offset, 60, 20, LabelHue, accts.Count.ToString() ); + AddLabelCropped( 72, offset, 120, 20, LabelHue, ipAddr.ToString() ); + + if ( sb.Length > 0 ) + sb.Length = 0; + + for ( int j = 0; j < accts.Count; ++j ) + { + if ( j > 0 ) + sb.Append( ", " ); + + if ( j < 4 ) + { + Account acct = (Account)accts[j]; + + sb.Append( acct.Username ); + } + else + { + sb.Append( "..." ); + break; + } + } + + AddLabelCropped( 192, offset, 180, 20, LabelHue, sb.ToString() ); + + AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 5, index + 56 ), GumpButtonType.Reply, 0 ); + } + + break; + } + case AdminGumpPage.Accounts: + { + if ( m_List == null ) + { + m_List = new ArrayList(); // new ArrayList( (ICollection)Accounts.GetAccounts() ); + // m_List.Sort( AccountComparer.Instance ); + } + + ArrayList rads = ( state as ArrayList ); + + AddAccountHeader(); + + if ( rads == null ) + AddLabelCropped( 12, 120, 120, 20, LabelHue, "Name" ); + else + AddLabelCropped( 32, 120, 100, 20, LabelHue, "Name" ); + + AddLabelCropped( 132, 120, 120, 20, LabelHue, "Access Level" ); + AddLabelCropped( 252, 120, 120, 20, LabelHue, "Status" ); + + if ( listPage > 0 ) + AddButton( 375, 122, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 ); + else + AddImage( 375, 122, 0x25EA ); + + if ( (listPage + 1) * 12 < m_List.Count ) + AddButton( 392, 122, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 ); + else + AddImage( 392, 122, 0x25E6 ); + + if ( m_List.Count == 0 ) + AddLabel( 12, 140, LabelHue, "There are no accounts to display." ); + + if ( rads != null && notice == null ) + { + AddButtonLabeled( 10, 390, GetButtonID( 5, 27 ), "Ban marked" ); + AddButtonLabeled( 10, 410, GetButtonID( 5, 28 ), "Delete marked" ); + + AddButtonLabeled( 210, 400, GetButtonID( 5, 29 ), "Mark all" ); + } + + for ( int i = 0, index = (listPage * 12); i < 12 && index >= 0 && index < m_List.Count; ++i, ++index ) + { + Account a = m_List[index] as Account; + + if ( a == null ) + continue; + + int offset = 140 + (i * 20); + + AccessLevel accessLevel; + bool online; + + GetAccountInfo( a, out accessLevel, out online ); + + if ( rads == null ) + { + AddLabelCropped( 12, offset, 120, 20, LabelHue, a.Username ); + } + else + { + AddCheck( 10, offset, 0xD2, 0xD3, rads.Contains( a ), index ); + AddLabelCropped( 32, offset, 100, 20, LabelHue, a.Username ); + } + + AddLabelCropped( 132, offset, 120, 20, LabelHue, FormatAccessLevel( accessLevel ) ); + + if ( online ) + AddLabelCropped( 252, offset, 120, 20, GreenHue, "Online" ); + else if ( a.Banned ) + AddLabelCropped( 252, offset, 120, 20, RedHue, "Banned" ); + else + AddLabelCropped( 252, offset, 120, 20, RedHue, "Offline" ); + + AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 5, index + 56 ), GumpButtonType.Reply, 0 ); + } + + break; + } + case AdminGumpPage.AccountDetails: + { + AddPageButton( 190, 10, GetButtonID( 5, 0 ), "Information", AdminGumpPage.AccountDetails_Information, AdminGumpPage.AccountDetails_ChangeAccess, AdminGumpPage.AccountDetails_ChangePassword ); + AddPageButton( 190, 30, GetButtonID( 5, 1 ), "Characters", AdminGumpPage.AccountDetails_Characters ); + AddPageButton( 190, 50, GetButtonID( 5, 13 ), "Access", AdminGumpPage.AccountDetails_Access, AdminGumpPage.AccountDetails_Access_ClientIPs, AdminGumpPage.AccountDetails_Access_Restrictions ); + AddPageButton( 190, 70, GetButtonID( 5, 2 ), "Comments", AdminGumpPage.AccountDetails_Comments ); + AddPageButton( 190, 90, GetButtonID( 5, 3 ), "Tags", AdminGumpPage.AccountDetails_Tags ); + break; + } + case AdminGumpPage.AccountDetails_ChangePassword: + { + Account a = state as Account; + + if ( a == null ) + break; + + AddHtml( 10, 125, 400, 20, Color( Center( "Change Password" ), LabelColor32 ), false, false ); + + AddLabel( 20, 150, LabelHue, "Username:" ); + AddLabel( 200, 150, LabelHue, a.Username ); + + AddLabel( 20, 180, LabelHue, "Password:" ); + AddTextField( 200, 180, 160, 20, 0 ); + + AddLabel( 20, 210, LabelHue, "Confirm:" ); + AddTextField( 200, 210, 160, 20, 1 ); + + AddButtonLabeled( 20, 240, GetButtonID( 5, 12 ), "Submit Change" ); + + goto case AdminGumpPage.AccountDetails; + } + case AdminGumpPage.AccountDetails_ChangeAccess: + { + Account a = state as Account; + + if ( a == null ) + break; + + AddHtml( 10, 125, 400, 20, Color( Center( "Change Access Level" ), LabelColor32 ), false, false ); + + AddLabel( 20, 150, LabelHue, "Username:" ); + AddLabel( 200, 150, LabelHue, a.Username ); + + AddLabel( 20, 170, LabelHue, "Current Level:" ); + AddLabel( 200, 170, LabelHue, FormatAccessLevel( a.AccessLevel ) ); + + AddButtonLabeled( 20, 200, GetButtonID( 5, 20 ), "Player" ); + AddButtonLabeled( 20, 220, GetButtonID( 5, 21 ), "Counselor" ); + AddButtonLabeled( 20, 240, GetButtonID( 5, 22 ), "Game Master" ); + AddButtonLabeled( 20, 260, GetButtonID( 5, 23 ), "Seer" ); + + if ( from.AccessLevel > AccessLevel.Administrator ) + { + AddButtonLabeled( 20, 280, GetButtonID( 5, 24 ), "Administrator" ); + + if ( from.AccessLevel > AccessLevel.Developer ) + { + AddButtonLabeled( 20, 300, GetButtonID( 5, 33 ), "Developer" ); + + if ( from.AccessLevel >= AccessLevel.Owner ) + AddButtonLabeled( 20, 320, GetButtonID( 5, 34 ), "Owner" ); + } + } + + goto case AdminGumpPage.AccountDetails; + } + case AdminGumpPage.AccountDetails_Information: + { + Account a = state as Account; + + if ( a == null ) + break; + + int charCount = 0; + + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] != null ) + ++charCount; + } + + AddHtml( 10, 125, 400, 20, Color( Center( "Information" ), LabelColor32 ), false, false ); + + AddLabel( 20, 150, LabelHue, "Username:" ); + AddLabel( 200, 150, LabelHue, a.Username ); + + AddLabel( 20, 170, LabelHue, "Access Level:" ); + AddLabel( 200, 170, LabelHue, FormatAccessLevel( a.AccessLevel ) ); + + AddLabel( 20, 190, LabelHue, "Status:" ); + AddLabel( 200, 190, a.Banned ? RedHue : GreenHue, a.Banned ? "Banned" : "Active" ); + + DateTime banTime; + TimeSpan banDuration; + + if ( a.Banned && a.GetBanTags( out banTime, out banDuration ) ) + { + if ( banDuration == TimeSpan.MaxValue ) + { + AddLabel( 250, 190, LabelHue, "(Infinite)" ); + } + else if ( banDuration == TimeSpan.Zero ) + { + AddLabel( 250, 190, LabelHue, "(Zero)" ); + } + else + { + TimeSpan remaining = (DateTime.Now - banTime); + + if ( remaining < TimeSpan.Zero ) + remaining = TimeSpan.Zero; + else if ( remaining > banDuration ) + remaining = banDuration; + + double remMinutes = remaining.TotalMinutes; + double totMinutes = banDuration.TotalMinutes; + + double perc = remMinutes / totMinutes; + + AddLabel( 250, 190, LabelHue, String.Format( "{0} [{1:F0}%]", FormatTimeSpan( banDuration ), perc*100 ) ); + } + } + else if ( a.Banned ) + { + AddLabel( 250, 190, LabelHue, "(Unspecified)" ); + } + + AddLabel( 20, 210, LabelHue, "Created:" ); + AddLabel( 200, 210, LabelHue, a.Created.ToString() ); + + AddLabel( 20, 230, LabelHue, "Last Login:" ); + AddLabel( 200, 230, LabelHue, a.LastLogin.ToString() ); + + AddLabel( 20, 250, LabelHue, "Character Count:" ); + AddLabel( 200, 250, LabelHue, charCount.ToString() ); + + AddLabel( 20, 270, LabelHue, "Comment Count:" ); + AddLabel( 200, 270, LabelHue, a.Comments.Count.ToString() ); + + AddLabel( 20, 290, LabelHue, "Tag Count:" ); + AddLabel( 200, 290, LabelHue, a.Tags.Count.ToString() ); + + AddButtonLabeled( 20, 320, GetButtonID( 5, 8 ), "Change Password" ); + AddButtonLabeled( 200, 320, GetButtonID( 5, 9 ), "Change Access Level" ); + + if ( !a.Banned ) + AddButtonLabeled( 20, 350, GetButtonID( 5, 10 ), "Ban Account" ); + else + AddButtonLabeled( 20, 350, GetButtonID( 5, 11 ), "Unban Account" ); + + AddButtonLabeled( 200, 350, GetButtonID( 5, 25 ), "Delete Account" ); + + goto case AdminGumpPage.AccountDetails; + } + case AdminGumpPage.AccountDetails_Access: + { + Account a = state as Account; + + if ( a == null ) + break; + + AddHtml( 10, 125, 400, 20, Color( Center( "Access" ), LabelColor32 ), false, false ); + + AddPageButton( 20, 150, GetButtonID( 5, 14 ), "View client addresses", AdminGumpPage.AccountDetails_Access_ClientIPs ); + AddPageButton( 20, 170, GetButtonID( 5, 15 ), "Manage restrictions", AdminGumpPage.AccountDetails_Access_Restrictions ); + + goto case AdminGumpPage.AccountDetails; + } + case AdminGumpPage.AccountDetails_Access_ClientIPs: + { + Account a = state as Account; + + if ( a == null ) + break; + + if ( m_List == null ) + m_List = new ArrayList( a.LoginIPs ); + + AddHtml( 10, 195, 400, 20, Color( Center( "Client Addresses" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 200, 225, GetButtonID( 5, 16 ), "View all shared accounts" ); + AddButtonLabeled( 200, 245, GetButtonID( 5, 17 ), "Ban all shared accounts" ); + AddButtonLabeled( 200, 265, GetButtonID( 5, 18 ), "Firewall all addresses" ); + + AddHtml( 195, 295, 210, 80, Color( "List of IP addresses which have accessed this account.", LabelColor32 ), false, false ); + + AddImageTiled( 15, 219, 176, 156, 0xBBC ); + AddBlackAlpha( 16, 220, 174, 154 ); + + AddHtml( 18, 221, 114, 20, Color( "IP Address", LabelColor32 ), false, false ); + + if ( listPage > 0 ) + AddButton( 154, 223, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 ); + else + AddImage( 154, 223, 0x25EA ); + + if ( (listPage + 1) * 6 < m_List.Count ) + AddButton( 171, 223, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 ); + else + AddImage( 171, 223, 0x25E6 ); + + if ( m_List.Count == 0 ) + AddHtml( 18, 243, 170, 60, Color( "This account has not yet been accessed.", LabelColor32 ), false, false ); + + for ( int i = 0, index = (listPage * 6); i < 6 && index >= 0 && index < m_List.Count; ++i, ++index ) + { + AddHtml( 18, 243 + (i * 22), 114, 20, Color( m_List[index].ToString(), LabelColor32 ), false, false ); + AddButton( 130, 242 + (i * 22), 0xFA2, 0xFA4, GetButtonID( 8, index ), GumpButtonType.Reply, 0 ); + AddButton( 160, 242 + (i * 22), 0xFA8, 0xFAA, GetButtonID( 9, index ), GumpButtonType.Reply, 0 ); + } + + goto case AdminGumpPage.AccountDetails_Access; + } + case AdminGumpPage.AccountDetails_Access_Restrictions: + { + Account a = state as Account; + + if ( a == null ) + break; + + if ( m_List == null ) + m_List = new ArrayList( a.IPRestrictions ); + + AddHtml( 10, 195, 400, 20, Color( Center( "Address Restrictions" ), LabelColor32 ), false, false ); + + AddTextField( 200, 225, 120, 20, 0 ); + + AddButtonLabeled( 330, 225, GetButtonID( 5, 19 ), "Add" ); + + AddHtml( 195, 255, 210, 120, Color( "Any clients connecting from an address not in this list will be rejected. Or, if the list is empty, any client may connect.", LabelColor32 ), false, false ); + + AddImageTiled( 15, 219, 176, 156, 0xBBC ); + AddBlackAlpha( 16, 220, 174, 154 ); + + AddHtml( 18, 221, 114, 20, Color( "IP Address", LabelColor32 ), false, false ); + + if ( listPage > 0 ) + AddButton( 154, 223, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 ); + else + AddImage( 154, 223, 0x25EA ); + + if ( (listPage + 1) * 6 < m_List.Count ) + AddButton( 171, 223, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 ); + else + AddImage( 171, 223, 0x25E6 ); + + if ( m_List.Count == 0 ) + AddHtml( 18, 243, 170, 60, Color( "There are no addresses in this list.", LabelColor32 ), false, false ); + + for ( int i = 0, index = (listPage * 6); i < 6 && index >= 0 && index < m_List.Count; ++i, ++index ) + { + AddHtml( 18, 243 + (i * 22), 114, 20, Color( m_List[index].ToString(), LabelColor32 ), false, false ); + AddButton( 160, 242 + (i * 22), 0xFB1, 0xFB3, GetButtonID( 8, index ), GumpButtonType.Reply, 0 ); + } + + goto case AdminGumpPage.AccountDetails_Access; + } + case AdminGumpPage.AccountDetails_Characters: + { + Account a = state as Account; + + if ( a == null ) + break; + + AddHtml( 10, 125, 400, 20, Color( Center( "Characters" ), LabelColor32 ), false, false ); + + AddLabelCropped( 12, 150, 120, 20, LabelHue, "Name" ); + AddLabelCropped( 132, 150, 120, 20, LabelHue, "Access Level" ); + AddLabelCropped( 252, 150, 120, 20, LabelHue, "Status" ); + + int index = 0; + + for ( int i = 0; i < a.Length; ++i ) + { + Mobile m = a[i]; + + if ( m == null ) + continue; + + int offset = 170 + (index * 20); + + AddLabelCropped( 12, offset, 120, 20, GetHueFor( m ), m.Name ); + AddLabelCropped( 132, offset, 120, 20, LabelHue, FormatAccessLevel( m.AccessLevel ) ); + + if ( m.NetState != null ) + AddLabelCropped( 252, offset, 120, 20, GreenHue, "Online" ); + else + AddLabelCropped( 252, offset, 120, 20, RedHue, "Offline" ); + + AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 5, i + 50 ), GumpButtonType.Reply, 0 ); + + ++index; + } + + if ( index == 0 ) + AddLabel( 12, 170, LabelHue, "The character list is empty." ); + + goto case AdminGumpPage.AccountDetails; + } + case AdminGumpPage.AccountDetails_Comments: + { + Account a = state as Account; + + if ( a == null ) + break; + + AddHtml( 10, 125, 400, 20, Color( Center( "Comments" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 150, GetButtonID( 5, 4 ), "Add Comment" ); + + StringBuilder sb = new StringBuilder(); + + if ( a.Comments.Count == 0 ) + sb.Append( "There are no comments for this account." ); + + for ( int i = 0; i < a.Comments.Count; ++i ) + { + if ( i > 0 ) + sb.Append( "

" ); + + AccountComment c = a.Comments[i]; + + sb.AppendFormat( "[{0} on {1}]
{2}", c.AddedBy, c.LastModified, c.Content ); + } + + AddHtml( 20, 180, 380, 190, sb.ToString(), true, true ); + + goto case AdminGumpPage.AccountDetails; + } + case AdminGumpPage.AccountDetails_Tags: + { + Account a = state as Account; + + if ( a == null ) + break; + + AddHtml( 10, 125, 400, 20, Color( Center( "Tags" ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 150, GetButtonID( 5, 5 ), "Add Tag" ); + + StringBuilder sb = new StringBuilder(); + + if ( a.Tags.Count == 0 ) + sb.Append( "There are no tags for this account." ); + + for ( int i = 0; i < a.Tags.Count; ++i ) + { + if ( i > 0 ) + sb.Append( "
" ); + + AccountTag tag = a.Tags[i]; + + sb.AppendFormat( "{0} = {1}", tag.Name, tag.Value ); + } + + AddHtml( 20, 180, 380, 190, sb.ToString(), true, true ); + + goto case AdminGumpPage.AccountDetails; + } + case AdminGumpPage.Firewall: + { + AddFirewallHeader(); + + if ( m_List == null ) + m_List = new ArrayList( Firewall.List ); + + AddLabelCropped( 12, 120, 358, 20, LabelHue, "IP Address" ); + + if ( listPage > 0 ) + AddButton( 375, 122, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 ); + else + AddImage( 375, 122, 0x25EA ); + + if ( (listPage + 1) * 12 < m_List.Count ) + AddButton( 392, 122, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 ); + else + AddImage( 392, 122, 0x25E6 ); + + if ( m_List.Count == 0 ) + AddLabel( 12, 140, LabelHue, "The firewall list is empty." ); + + for ( int i = 0, index = (listPage * 12); i < 12 && index >= 0 && index < m_List.Count; ++i, ++index ) + { + object obj = m_List[index]; + + if ( !(obj is Firewall.IFirewallEntry ) ) + break; + + int offset = 140 + (i * 20); + + AddLabelCropped( 12, offset, 358, 20, LabelHue, obj.ToString() ); + AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 6, index + 4 ), GumpButtonType.Reply, 0 ); + } + + break; + } + case AdminGumpPage.FirewallInfo: + { + AddFirewallHeader(); + + if ( !(state is Firewall.IFirewallEntry) ) + break; + + AddHtml( 10, 125, 400, 20, Color( Center( state.ToString() ), LabelColor32 ), false, false ); + + AddButtonLabeled( 20, 150, GetButtonID( 6, 3 ), "Remove" ); + + AddHtml( 10, 175, 400, 20, Color( Center( "Potentially Effected Accounts" ), LabelColor32 ), false, false ); + + if ( m_List == null ) + { + m_List = new ArrayList(); + + foreach ( Account acct in Accounts.GetAccounts() ) + { + IPAddress[] loginList = acct.LoginIPs; + + bool contains = false; + + for( int i = 0; !contains && i < loginList.Length; ++i ) + { + if( ((Firewall.IFirewallEntry)state).IsBlocked( loginList[i] ) ) + { + m_List.Add( acct ); + break; + } + } + } + + m_List.Sort( AccountComparer.Instance ); + } + + if ( listPage > 0 ) + AddButton( 375, 177, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 ); + else + AddImage( 375, 177, 0x25EA ); + + if ( (listPage + 1) * 12 < m_List.Count ) + AddButton( 392, 177, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 ); + else + AddImage( 392, 177, 0x25E6 ); + + if ( m_List.Count == 0 ) + AddLabelCropped( 12, 200, 398, 20, LabelHue, "No accounts found." ); + + for ( int i = 0, index = (listPage * 9); i < 9 && index >= 0 && index < m_List.Count; ++i, ++index ) + { + Account a = m_List[index] as Account; + + if ( a == null ) + continue; + + int offset = 200 + (i * 20); + + AccessLevel accessLevel; + bool online; + + GetAccountInfo( a, out accessLevel, out online ); + + AddLabelCropped( 12, offset, 120, 20, LabelHue, a.Username ); + AddLabelCropped( 132, offset, 120, 20, LabelHue, FormatAccessLevel( accessLevel ) ); + + if ( online ) + AddLabelCropped( 252, offset, 120, 20, GreenHue, "Online" ); + else if( a.Banned ) + AddLabelCropped( 252, offset, 120, 20, RedHue, "Banned" ); + else + AddLabelCropped( 252, offset, 120, 20, RedHue, "Offline" ); + + AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 5, index + 56 ), GumpButtonType.Reply, 0 ); + } + + break; + } + } + } + + public void AddTextField( int x, int y, int width, int height, int index ) + { + AddBackground( x - 2, y - 2, width + 4, height + 4, 0x2486 ); + AddTextEntry( x + 2, y + 2, width - 4, height - 4, 0, index, "" ); + } + + public void AddClientHeader() + { + AddTextField( 200, 20, 200, 20, 0 ); + AddButtonLabeled( 200, 50, GetButtonID( 4, 0 ), "Search For Name" ); + AddButtonLabeled( 200, 80, GetButtonID( 4, 1 ), "Search For IP Address" ); + } + + public void AddAccountHeader() + { + AddPage( 1 ); + + AddLabel( 200, 20, LabelHue, "Name:" ); + AddTextField( 250, 20, 150, 20, 0 ); + + AddLabel( 200, 50, LabelHue, "Pass:" ); + AddTextField( 250, 50, 150, 20, 1 ); + + AddButtonLabeled( 200, 80, GetButtonID( 5, 6 ), "Add" ); + AddButtonLabeled( 290, 80, GetButtonID( 5, 7 ), "Search" ); + + AddButton( 384, 84, 0x15E1, 0x15E5, 0, GumpButtonType.Page, 2 ); + + AddPage( 2 ); + + AddButtonLabeled( 200, 20, GetButtonID( 5, 31 ), "View All: Inactive" ); + AddButtonLabeled( 200, 40, GetButtonID( 5, 32 ), "View All: Banned" ); + AddButtonLabeled( 200, 60, GetButtonID( 5, 26 ), "View All: Shared" ); + AddButtonLabeled( 200, 80, GetButtonID( 5, 30 ), "View All: Empty" ); + + AddButton( 384, 84, 0x15E1, 0x15E5, 0, GumpButtonType.Page, 1 ); + + AddPage( 0 ); + } + + public void AddFirewallHeader() + { + AddTextField( 200, 20, 200, 20, 0 ); + AddButtonLabeled( 320, 50, GetButtonID( 6, 0 ), "Search" ); + AddButtonLabeled( 200, 50, GetButtonID( 6, 1 ), "Add (Input)" ); + AddButtonLabeled( 200, 80, GetButtonID( 6, 2 ), "Add (Target)" ); + } + + private static ArrayList GetAllSharedAccounts() + { + Hashtable table = new Hashtable(); + ArrayList list; + + foreach ( Account acct in Accounts.GetAccounts() ) + { + IPAddress[] theirAddresses = acct.LoginIPs; + + for ( int i = 0; i < theirAddresses.Length; ++i ) + { + list = (ArrayList)table[theirAddresses[i]]; + + if ( list == null ) + table[theirAddresses[i]] = list = new ArrayList(); + + list.Add( acct ); + } + } + + list = new ArrayList( table ); + + for ( int i = 0; i < list.Count; ++i ) + { + DictionaryEntry de = (DictionaryEntry)list[i]; + ArrayList accts = (ArrayList)de.Value; + + if ( accts.Count == 1 ) + list.RemoveAt( i-- ); + else + accts.Sort( AccountComparer.Instance ); + } + + list.Sort( SharedAccountComparer.Instance ); + + return list; + } + + private class SharedAccountComparer : IComparer + { + public static readonly IComparer Instance = new SharedAccountComparer(); + + public SharedAccountComparer() + { + } + + public int Compare( object x, object y ) + { + DictionaryEntry a = (DictionaryEntry)x; + DictionaryEntry b = (DictionaryEntry)y; + + ArrayList aList = (ArrayList)a.Value; + ArrayList bList = (ArrayList)b.Value; + + return bList.Count - aList.Count; + } + } + + + private static ArrayList GetSharedAccounts( IPAddress ipAddress ) + { + ArrayList list = new ArrayList(); + + foreach ( Account acct in Accounts.GetAccounts() ) + { + IPAddress[] theirAddresses = acct.LoginIPs; + bool contains = false; + + for ( int i = 0; !contains && i < theirAddresses.Length; ++i ) + contains = ipAddress.Equals( theirAddresses[i] ); + + if ( contains ) + list.Add( acct ); + } + + list.Sort( AccountComparer.Instance ); + return list; + } + + private static ArrayList GetSharedAccounts( IPAddress[] ipAddresses ) + { + ArrayList list = new ArrayList(); + + foreach ( Account acct in Accounts.GetAccounts() ) + { + IPAddress[] theirAddresses = acct.LoginIPs; + bool contains = false; + + for ( int i = 0; !contains && i < theirAddresses.Length; ++i ) + { + IPAddress check = theirAddresses[i]; + + for ( int j = 0; !contains && j < ipAddresses.Length; ++j ) + contains = check.Equals( ipAddresses[j] ); + } + + if ( contains ) + list.Add( acct ); + } + + list.Sort( AccountComparer.Instance ); + return list; + } + + public static void BanShared_Callback( Mobile from, bool okay, object state ) + { + if ( from.AccessLevel < AccessLevel.Administrator ) + return; + + string notice; + ArrayList list = null; + + if ( okay ) + { + Account a = (Account)state; + list = GetSharedAccounts( a.LoginIPs ); + + for ( int i = 0; i < list.Count; ++i ) + { + ((Account)list[i]).SetUnspecifiedBan( from ); + ((Account)list[i]).Banned = true; + } + + notice = "All addresses in the list have been banned."; + } + else + { + notice = "You have chosen not to ban all shared accounts."; + } + + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, notice, state ) ); + + if ( okay ) + from.SendGump( new BanDurationGump( list ) ); + } + + public static void AccountDelete_Callback( Mobile from, bool okay, object state ) + { + if ( from.AccessLevel < AccessLevel.Administrator ) + return; + + if ( okay ) + { + Account a = (Account)state; + + CommandLogging.WriteLine( from, "{0} {1} deleting account {2}", from.AccessLevel, CommandLogging.Format( from ), a.Username ); + a.Delete(); + + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, null, String.Format( "{0} : The account has been deleted.", a.Username ), null ) ); + } + else + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, "You have chosen not to delete the account.", state ) ); + } + } + + public static void ResendGump_Callback( Mobile from, object state ) + { + if ( from.AccessLevel < AccessLevel.Administrator ) + return; + + object[] states = (object[])state; + ArrayList list = (ArrayList)states[0]; + ArrayList rads = (ArrayList)states[1]; + int page = (int)states[2]; + + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, page, list, null, rads ) ); + } + + public static void Marked_Callback( Mobile from, bool okay, object state ) + { + if ( from.AccessLevel < AccessLevel.Administrator ) + return; + + object[] states = (object[])state; + bool ban = (bool)states[0]; + ArrayList list = (ArrayList)states[1]; + ArrayList rads = (ArrayList)states[2]; + int page = (int)states[3]; + + if ( okay ) + { + if ( !ban ) + NetState.Pause(); + + for ( int i = 0; i < rads.Count; ++i ) + { + Account acct = (Account)rads[i]; + + if ( ban ) + { + CommandLogging.WriteLine( from, "{0} {1} banning account {2}", from.AccessLevel, CommandLogging.Format( from ), acct.Username ); + acct.SetUnspecifiedBan( from ); + acct.Banned = true; + } + else + { + CommandLogging.WriteLine( from, "{0} {1} deleting account {2}", from.AccessLevel, CommandLogging.Format( from ), acct.Username ); + acct.Delete(); + rads.RemoveAt( i-- ); + list.Remove( acct ); + } + } + + if ( !ban ) + NetState.Resume(); + + from.SendGump( new NoticeGump( 1060637, 30720, String.Format( "You have {0} the account{1}.", ban ? "banned" : "deleted", rads.Count == 1 ? "" : "s" ), 0xFFC000, 420, 280, new NoticeGumpCallback( ResendGump_Callback ), new object[]{ list, rads, ban ? page : 0 } ) ); + + if ( ban ) + from.SendGump( new BanDurationGump( rads ) ); + } + else + { + from.SendGump( new NoticeGump( 1060637, 30720, String.Format( "You have chosen not to {0} the account{1}.", ban ? "ban" : "delete", rads.Count == 1 ? "" : "s" ), 0xFFC000, 420, 280, new NoticeGumpCallback( ResendGump_Callback ), new object[]{ list, rads, page } ) ); + } + } + + public static void FirewallShared_Callback( Mobile from, bool okay, object state ) + { + if ( from.AccessLevel < AccessLevel.Administrator ) + return; + + string notice; + + if ( okay ) + { + Account a = (Account)state; + + for ( int i = 0; i < a.LoginIPs.Length; ++i ) + Firewall.Add( a.LoginIPs[i] ); + + notice = "All addresses in the list have been firewalled."; + } + else + { + notice = "You have chosen not to firewall all addresses."; + } + + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, notice, state ) ); + } + + public static void Firewall_Callback( Mobile from, bool okay, object state ) + { + if ( from.AccessLevel < AccessLevel.Administrator ) + return; + + object[] states = (object[])state; + + Account a = (Account)states[0]; + object toFirewall = states[1]; + + string notice; + + if ( okay ) + { + Firewall.Add( toFirewall ); + + notice = String.Format( "{0} : Added to firewall.", toFirewall ); + } + else + { + notice = "You have chosen not to firewall the address."; + } + + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, notice, a ) ); + } + + public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) + { + int val = info.ButtonID - 1; + + if ( val < 0 ) + return; + + Mobile from = m_From; + + if ( from.AccessLevel < AccessLevel.Administrator ) + return; + + if ( m_PageType == AdminGumpPage.Accounts ) + { + ArrayList list = m_List; + ArrayList rads = m_State as ArrayList; + + if ( list != null && rads != null ) + { + for ( int i = 0, v = m_ListPage*12; i < 12 && v < list.Count; ++i, ++v ) + { + object obj = list[v]; + + if ( info.IsSwitched( v ) ) + { + if ( !rads.Contains( obj ) ) + rads.Add( obj ); + } + else if ( rads.Contains( obj ) ) + { + rads.Remove( obj ); + } + } + } + } + + int type = val % 10; + int index = val / 10; + + switch ( type ) + { + case 0: + { + AdminGumpPage page; + + switch ( index ) + { + case 0: page = AdminGumpPage.Information_General; break; + case 1: page = AdminGumpPage.Administer; break; + case 2: page = AdminGumpPage.Clients; break; + case 3: page = AdminGumpPage.Accounts; break; + case 4: page = AdminGumpPage.Firewall; break; + case 5: page = AdminGumpPage.Information_Perf; break; + default: return; + } + + from.SendGump( new AdminGump( from, page, 0, null, null, null ) ); + break; + } + case 1: + { + switch ( index ) + { + case 0: + { + if ( m_List != null && m_ListPage > 0 ) + from.SendGump( new AdminGump( from, m_PageType, m_ListPage - 1, m_List, null, m_State ) ); + + break; + } + case 1: + { + if ( m_List != null /*&& (m_ListPage + 1) * 12 < m_List.Count*/ ) + from.SendGump( new AdminGump( from, m_PageType, m_ListPage + 1, m_List, null, m_State ) ); + + break; + } + } + + break; + } + case 3: + { + string notice = null; + AdminGumpPage page = AdminGumpPage.Administer; + + if ( index >= 500 ) + page = AdminGumpPage.Administer_Access_Lockdown; + else if ( index >= 400 ) + page = AdminGumpPage.Administer_Commands; + else if ( index >= 300 ) + page = AdminGumpPage.Administer_Access; + else if ( index >= 200 ) + page = AdminGumpPage.Administer_Server; + else if ( index >= 100 ) + page = AdminGumpPage.Administer_WorldBuilding; + + switch ( index ) + { + case 0: page = AdminGumpPage.Administer_WorldBuilding; break; + case 1: page = AdminGumpPage.Administer_Server; break; + case 2: page = AdminGumpPage.Administer_Access; break; + case 3: page = AdminGumpPage.Administer_Commands; break; + + case 100: InvokeCommand( "BuildWorld" ); break; + + case 110: InvokeCommand( "Freeze" ); notice = "Target bounding points."; break; + case 120: InvokeCommand( "Unfreeze" ); notice = "Target bounding points."; break; + + case 200: InvokeCommand( "Save" ); notice = "The world has been saved."; break; + case 201: Shutdown( false, true ); break; + case 202: Shutdown( false, false ); break; + case 203: Shutdown( true, true ); break; + case 204: Shutdown( true, false ); break; + case 210: + case 211: + { + TextRelay relay = info.GetTextEntry( 0 ); + string text = ( relay == null ? null : relay.Text.Trim() ); + + if ( text == null || text.Length == 0 ) + { + notice = "You must enter text to broadcast it."; + } + else + { + notice = "Your message has been broadcasted."; + InvokeCommand( String.Format( "{0} {1}", index == 210 ? "BC" : "SM", text ) ); + } + + break; + } + + case 300: InvokeCommand( "Kick" ); notice = "Target the player to kick."; break; + case 301: InvokeCommand( "Ban" ); notice = "Target the player to ban."; break; + case 302: InvokeCommand( "Firewall" ); notice = "Target the player to firewall."; break; + + case 303: page = AdminGumpPage.Administer_Access_Lockdown; break; + + case 310: InvokeCommand( "Set AccessLevel Player" ); notice = "Target the player to change their access level. (Player)"; break; + case 311: InvokeCommand( "Set AccessLevel Counselor" ); notice = "Target the player to change their access level. (Counselor)"; break; + case 312: InvokeCommand( "Set AccessLevel GameMaster" ); notice = "Target the player to change their access level. (Game Master)"; break; + case 313: InvokeCommand( "Set AccessLevel Seer" ); notice = "Target the player to change their access level. (Seer)"; break; + + case 314: + { + if ( from.AccessLevel > AccessLevel.Administrator ) + { + InvokeCommand( "Set AccessLevel Administrator" ); + notice = "Target the player to change their access level. (Administrator)"; + } + + break; + } + + case 315: + { + if ( from.AccessLevel > AccessLevel.Developer ) + { + InvokeCommand( "Set AccessLevel Developer" ); + notice = "Target the player to change their access level. (Developer)"; + } + + break; + } + + case 316: + { + if ( from.AccessLevel >= AccessLevel.Owner ) + { + InvokeCommand( "Set AccessLevel Owner" ); + notice = "Target the player to change their access level. (Owner)"; + } + + break; + } + + case 400: notice = "Enter search terms to add objects."; break; + case 401: InvokeCommand( "Remove" ); notice = "Target the item or mobile to remove."; break; + case 402: InvokeCommand( "Dupe" ); notice = "Target the item to dupe."; break; + case 403: InvokeCommand( "DupeInBag" ); notice = "Target the item to dupe. The item will be duped at it's current location."; break; + case 404: InvokeCommand( "Props" ); notice = "Target the item or mobile to inspect."; break; + case 405: InvokeCommand( "Skills" ); notice = "Target a mobile to view their skills."; break; + case 406: InvokeCommand( "Set Blessed False" ); notice = "Target the mobile to make mortal."; break; + case 407: InvokeCommand( "Set Blessed True" ); notice = "Target the mobile to make immortal."; break; + case 408: InvokeCommand( "Set Squelched True" ); notice = "Target the mobile to squelch."; break; + case 409: InvokeCommand( "Set Squelched False" ); notice = "Target the mobile to unsquelch."; break; + case 410: InvokeCommand( "Set Frozen True" ); notice = "Target the mobile to freeze."; break; + case 411: InvokeCommand( "Set Frozen False" ); notice = "Target the mobile to unfreeze."; break; + case 412: InvokeCommand( "Set Hidden True" ); notice = "Target the mobile to hide."; break; + case 413: InvokeCommand( "Set Hidden False" ); notice = "Target the mobile to unhide."; break; + case 414: InvokeCommand( "Kill" ); notice = "Target the mobile to kill."; break; + case 415: InvokeCommand( "Resurrect" ); notice = "Target the mobile to resurrect."; break; + case 416: InvokeCommand( "Move" ); notice = "Target the item or mobile to move."; break; + case 417: InvokeCommand( "Wipe" ); notice = "Target bounding points."; break; + case 418: InvokeCommand( "Tele" ); notice = "Choose your destination."; break; + case 419: InvokeCommand( "Multi Tele" ); notice = "Choose your destination."; break; + + case 500: + case 501: + case 502: + case 503: + case 504: + { + Misc.AccountHandler.LockdownLevel = (AccessLevel)(index - 500); + + if ( Misc.AccountHandler.LockdownLevel > AccessLevel.Player ) + notice = "The lockdown level has been changed."; + else + notice = "The server is now accessible to everyone."; + + break; + } + + case 510: + { + AccessLevel level = Misc.AccountHandler.LockdownLevel; + + if ( level > AccessLevel.Player ) + { + List clients = NetState.Instances; + int count = 0; + + for ( int i = 0; i < clients.Count; ++i ) + { + NetState ns = clients[i]; + IAccount a = ns.Account; + + if ( a == null ) + continue; + + bool hasAccess = false; + + if ( a.AccessLevel >= level ) + { + hasAccess = true; + } + else + { + for ( int j = 0; !hasAccess && j < a.Length; ++j ) + { + Mobile m = a[j]; + + if ( m != null && m.AccessLevel >= level ) + hasAccess = true; + } + } + + if ( !hasAccess ) + { + ns.Dispose(); + ++count; + } + } + + if ( count == 0 ) + notice = "Nobody without access was found to disconnect."; + else + notice = String.Format( "Number of players disconnected: {0}", count ); + } + else + { + notice = "The server is not currently locked down."; + } + + break; + } + } + + from.SendGump( new AdminGump( from, page, 0, null, notice, null ) ); + + switch ( index ) + { + case 400: InvokeCommand( "Add" ); break; + case 111: InvokeCommand( "FreezeWorld" ); break; + case 112: InvokeCommand( "FreezeMap" ); break; + case 121: InvokeCommand( "UnfreezeWorld" ); break; + case 122: InvokeCommand( "UnfreezeMap" ); break; + } + + break; + } + case 4: + { + switch ( index ) + { + case 0: + case 1: + { + bool forName = ( index == 0 ); + + ArrayList results = new ArrayList(); + + TextRelay matchEntry = info.GetTextEntry( 0 ); + string match = ( matchEntry == null ? null : matchEntry.Text.Trim().ToLower() ); + string notice = null; + + if ( match == null || match.Length == 0 ) + { + notice = String.Format( "You must enter {0} to search.", forName ? "a name" : "an ip address" ); + } + else + { + List instances = NetState.Instances; + + for ( int i = 0; i < instances.Count; ++i ) + { + NetState ns = instances[i]; + + bool isMatch; + + if ( forName ) + { + Mobile m = ns.Mobile; + IAccount a = ns.Account; + + isMatch = ( m != null && m.Name.ToLower().IndexOf( match ) >= 0 ) + || ( a != null && a.Username.ToLower().IndexOf( match ) >= 0 ); + } + else + { + isMatch = ( ns.ToString().IndexOf( match ) >= 0 ); + } + + if ( isMatch ) + results.Add( ns ); + } + + results.Sort( NetStateComparer.Instance ); + } + + if ( results.Count == 1 ) + { + NetState ns = (NetState)results[0]; + object state = ns.Mobile; + + if ( state == null ) + state = ns.Account; + + if ( state is Mobile ) + from.SendGump( new AdminGump( from, AdminGumpPage.ClientInfo, 0, null, "One match found.", state ) ); + else if ( state is Account ) + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, "One match found.", state ) ); + else + from.SendGump( new AdminGump( from, AdminGumpPage.Clients, 0, results, "One match found.", null ) ); + } + else + { + from.SendGump( new AdminGump( from, AdminGumpPage.Clients, 0, results, notice == null ? (results.Count == 0 ? "Nothing matched your search terms." : null) : notice, null ) ); + } + + break; + } + default: + { + index -= 2; + + if ( m_List != null && index >= 0 && index < m_List.Count ) + { + NetState ns = m_List[index] as NetState; + + if ( ns == null ) + break; + + Mobile m = ns.Mobile; + Account a = ns.Account as Account; + + if ( m != null ) + from.SendGump( new AdminGump( from, AdminGumpPage.ClientInfo, 0, null, null, m ) ); + else if ( a != null ) + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, null, a ) ); + } + + break; + } + } + + break; + } + case 5: + { + switch ( index ) + { + case 0: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, null, m_State ) ); break; + case 1: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Characters, 0, null, null, m_State ) ); break; + case 2: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Comments, 0, null, null, m_State ) ); break; + case 3: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Tags, 0, null, null, m_State ) ); break; + case 13: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access, 0, null, null, m_State ) ); break; + case 14: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, null, m_State ) ); break; + case 15: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_Restrictions, 0, null, null, m_State ) ); break; + case 4: from.Prompt = new AddCommentPrompt( m_State as Account ); from.SendMessage( "Enter the new account comment." ); break; + case 5: from.Prompt = new AddTagNamePrompt( m_State as Account ); from.SendMessage( "Enter the new tag name." ); break; + case 6: + { + TextRelay unEntry = info.GetTextEntry( 0 ); + TextRelay pwEntry = info.GetTextEntry( 1 ); + + string un = ( unEntry == null ? null : unEntry.Text.Trim() ); + string pw = ( pwEntry == null ? null : pwEntry.Text.Trim() ); + + Account dispAccount = null; + string notice; + + if ( un == null || un.Length == 0 ) + { + notice = "You must enter a username to add an account."; + } + else if ( pw == null || pw.Length == 0 ) + { + notice = "You must enter a password to add an account."; + } + else + { + IAccount account = Accounts.GetAccount( un ); + + if ( account != null ) + { + notice = "There is already an account with that username."; + } + else + { + dispAccount = new Account( un, pw ); + notice = String.Format( "{0} : Account added.", un ); + CommandLogging.WriteLine( from, "{0} {1} adding new account: {2}", from.AccessLevel, CommandLogging.Format( from ), un ); + } + } + + from.SendGump( new AdminGump( from, dispAccount != null ? AdminGumpPage.AccountDetails_Information : m_PageType, m_ListPage, m_List, notice, dispAccount != null ? dispAccount : m_State ) ); + break; + } + case 7: + { + ArrayList results; + + TextRelay matchEntry = info.GetTextEntry( 0 ); + string match = ( matchEntry == null ? null : matchEntry.Text.Trim().ToLower() ); + string notice = null; + + if ( match == null || match.Length == 0 ) + { + results = new ArrayList( (ICollection)Accounts.GetAccounts() ); + results.Sort( AccountComparer.Instance ); + //notice = "You must enter a username to search."; + } + else + { + results = new ArrayList(); + foreach ( Account check in Accounts.GetAccounts() ) + { + if ( check.Username.ToLower().IndexOf( match ) >= 0 ) + results.Add( check ); + } + + results.Sort( AccountComparer.Instance ); + } + + if ( results.Count == 1 ) + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, "One match found.", results[0] ) ); + else + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, results, notice == null ? (results.Count == 0 ? "Nothing matched your search terms." : null) : notice, new ArrayList() ) ); + + break; + } + case 8: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_ChangePassword, 0, null, null, m_State ) ); break; + case 9: from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_ChangeAccess, 0, null, null, m_State ) ); break; + case 10: case 11: + { + Account a = m_State as Account; + + if ( a == null ) + break; + + a.SetUnspecifiedBan( from ); + a.Banned = ( index == 10 ); + CommandLogging.WriteLine( from, "{0} {1} {3} account {2}", from.AccessLevel, CommandLogging.Format( from ), a.Username, a.Banned ? "banning" : "unbanning" ); + from.SendGump( new AdminGump( from, m_PageType, m_ListPage, m_List, String.Format( "The account has been {0}.", a.Banned ? "banned" : "unbanned" ), m_State ) ); + + if ( index == 10 ) + from.SendGump( new BanDurationGump( a ) ); + + break; + } + case 12: + { + Account a = m_State as Account; + + if ( a == null ) + break; + + TextRelay passwordEntry = info.GetTextEntry( 0 ); + TextRelay confirmEntry = info.GetTextEntry( 1 ); + + string password = ( passwordEntry == null ? null : passwordEntry.Text.Trim() ); + string confirm = ( confirmEntry == null ? null : confirmEntry.Text.Trim() ); + + string notice; + AdminGumpPage page = AdminGumpPage.AccountDetails_ChangePassword; + + if ( password == null || password.Length == 0 ) + { + notice = "You must enter the password."; + } + else if ( confirm != password ) + { + notice = "You must confirm the password. That field must precisely match the password field."; + } + else + { + notice = "The password has been changed."; + a.SetPassword( password ); + page = AdminGumpPage.AccountDetails_Information; + CommandLogging.WriteLine( from, "{0} {1} changing password of account {2}", from.AccessLevel, CommandLogging.Format( from ), a.Username ); + } + + from.SendGump( new AdminGump( from, page, 0, null, notice, m_State ) ); + + break; + } + case 16: // view shared + { + Account a = m_State as Account; + + if ( a == null ) + break; + + ArrayList list = GetSharedAccounts( a.LoginIPs ); + + if ( list.Count > 1 || (list.Count == 1 && !list.Contains( a )) ) + { + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, list, null, new ArrayList() ) ); + } + else if ( a.LoginIPs.Length > 0 ) + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, "There are no other accounts which share an address with this one.", m_State ) ); + } + else + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, "This account has not yet been accessed.", m_State ) ); + } + + break; + } + case 17: // ban shared + { + Account a = m_State as Account; + + if ( a == null ) + break; + + ArrayList list = GetSharedAccounts( a.LoginIPs ); + + if ( list.Count > 0 ) + { + StringBuilder sb = new StringBuilder(); + + sb.AppendFormat( "You are about to ban {0} account{1}. Do you wish to continue?", list.Count, list.Count != 1 ? "s" : "" ); + + for ( int i = 0; i < list.Count; ++i ) + sb.AppendFormat( "
- {0}", ((Account)list[i]).Username ); + + from.SendGump( new WarningGump( 1060635, 30720, sb.ToString(), 0xFFC000, 420, 400, new WarningGumpCallback( BanShared_Callback ), a ) ); + } + else if ( a.LoginIPs.Length > 0 ) + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, "There are no accounts which share an address with this one.", m_State ) ); + } + else + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, "This account has not yet been accessed.", m_State ) ); + } + + break; + } + case 18: // firewall all + { + Account a = m_State as Account; + + if ( a == null ) + break; + + if ( a.LoginIPs.Length > 0 ) + { + from.SendGump( new WarningGump( 1060635, 30720, String.Format( "You are about to firewall {0} address{1}. Do you wish to continue?", a.LoginIPs.Length, a.LoginIPs.Length != 1 ? "s" : "" ), 0xFFC000, 420, 400, new WarningGumpCallback( FirewallShared_Callback ), a ) ); + } + else + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, "This account has not yet been accessed.", m_State ) ); + } + + break; + } + case 19: // add + { + Account a = m_State as Account; + + if ( a == null ) + break; + + TextRelay entry = info.GetTextEntry( 0 ); + string ip = ( entry == null ? null : entry.Text.Trim() ); + + string notice; + + if ( ip == null || ip.Length == 0 ) + { + notice = "You must enter an address to add."; + } + else + { + string[] list = a.IPRestrictions; + + bool contains = false; + for ( int i = 0; !contains && i < list.Length; ++i ) + contains = ( list[i] == ip ); + + if ( contains ) + { + notice = "That address is already contained in the list."; + } + else + { + string[] newList = new string[list.Length + 1]; + + for ( int i = 0; i < list.Length; ++i ) + newList[i] = list[i]; + + newList[list.Length] = ip; + + a.IPRestrictions = newList; + + notice = String.Format( "{0} : Added to restriction list.", ip ); + } + } + + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_Restrictions, 0, null, notice, m_State ) ); + + break; + } + case 20: + case 21: + case 22: + case 23: + case 24: + { + Account a = m_State as Account; + + if ( a == null ) + break; + + AccessLevel newLevel; + + switch ( index ) + { + default: + case 20: newLevel = AccessLevel.Player; break; + case 21: newLevel = AccessLevel.Counselor; break; + case 22: newLevel = AccessLevel.GameMaster; break; + case 23: newLevel = AccessLevel.Seer; break; + case 24: newLevel = AccessLevel.Administrator; break; + case 33: newLevel = AccessLevel.Developer; break; + case 34: newLevel = AccessLevel.Owner; break; + } + + if ( newLevel < from.AccessLevel ) + { + a.AccessLevel = newLevel; + + CommandLogging.WriteLine( from, "{0} {1} changing access level of account {2} to {3}", from.AccessLevel, CommandLogging.Format( from ), a.Username, a.AccessLevel ); + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, "The access level has been changed.", m_State ) ); + } + + break; + } + case 25: + { + Account a = m_State as Account; + + if ( a == null ) + break; + + from.SendGump( new WarningGump( 1060635, 30720, String.Format( "
Account of {0}

You are about to permanently delete the account. Likewise, all characters on the account will be deleted, including equiped, inventory, and stored items. Any houses tied to the account will be demolished.

Do you wish to continue?", a.Username ), 0xFFC000, 420, 280, new WarningGumpCallback( AccountDelete_Callback ), m_State ) ); + break; + } + case 26: // View all shared accounts + { + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts_Shared, 0, null, null, null ) ); + break; + } + case 27: // Ban marked + { + ArrayList list = m_List; + ArrayList rads = m_State as ArrayList; + + if ( list == null || rads == null ) + break; + + if ( rads.Count > 0 ) + from.SendGump( new WarningGump( 1060635, 30720, String.Format( "You are about to ban {0} marked account{1}. Be cautioned, the only way to reverse this is by hand--manually unbanning each account.

Do you wish to continue?", rads.Count, rads.Count == 1 ? "" : "s" ), 0xFFC000, 420, 280, new WarningGumpCallback( Marked_Callback ), new object[]{ true, list, rads, m_ListPage } ) ); + else + from.SendGump( new NoticeGump( 1060637, 30720, "You have not yet marked any accounts. Place a check mark next to the accounts you wish to ban and then try again.", 0xFFC000, 420, 280, new NoticeGumpCallback( ResendGump_Callback ), new object[]{ list, rads, m_ListPage } ) ); + + break; + } + case 28: // Delete marked + { + ArrayList list = m_List; + ArrayList rads = m_State as ArrayList; + + if ( list == null || rads == null ) + break; + + if ( rads.Count > 0 ) + from.SendGump( new WarningGump( 1060635, 30720, String.Format( "You are about to permanently delete {0} marked account{1}. Likewise, all characters on the account{1} will be deleted, including equiped, inventory, and stored items. Any houses tied to the account{1} will be demolished.

Do you wish to continue?", rads.Count, rads.Count == 1 ? "" : "s" ), 0xFFC000, 420, 280, new WarningGumpCallback( Marked_Callback ), new object[]{ false, list, rads, m_ListPage } ) ); + else + from.SendGump( new NoticeGump( 1060637, 30720, "You have not yet marked any accounts. Place a check mark next to the accounts you wish to ban and then try again.", 0xFFC000, 420, 280, new NoticeGumpCallback( ResendGump_Callback ), new object[]{ list, rads, m_ListPage } ) ); + + break; + } + case 29: // Mark all + { + ArrayList list = m_List; + ArrayList rads = m_State as ArrayList; + + if ( list == null || rads == null ) + break; + + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, m_ListPage, m_List, null, new ArrayList( list ) ) ); + + break; + } + case 30: // View all empty accounts + { + ArrayList results = new ArrayList(); + + foreach ( Account acct in Accounts.GetAccounts() ) + { + bool empty = true; + + for ( int i = 0; empty && i < acct.Length; ++i ) + empty = ( acct[i] == null ); + + if ( empty ) + results.Add( acct ); + } + + if ( results.Count == 1 ) + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, "One match found.", results[0] ) ); + else + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, results, (results.Count == 0 ? "Nothing matched your search terms." : null), new ArrayList() ) ); + + break; + } + case 31: // View all inactive accounts + { + ArrayList results = new ArrayList(); + + foreach ( Account acct in Accounts.GetAccounts() ) + { + if ( acct.Inactive ) + results.Add( acct ); + } + + if ( results.Count == 1 ) + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, "One match found.", results[0] ) ); + else + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, results, (results.Count == 0 ? "Nothing matched your search terms." : null), new ArrayList() ) ); + + break; + } + case 32: // View all banned accounts + { + ArrayList results = new ArrayList(); + + foreach ( Account acct in Accounts.GetAccounts() ) + { + if ( acct.Banned ) + results.Add( acct ); + } + + if ( results.Count == 1 ) + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, "One match found.", results[0] ) ); + else + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, results, (results.Count == 0 ? "Nothing matched your search terms." : null), new ArrayList() ) ); + + break; + } + default: + { + index -= 50; + + Account a = m_State as Account; + + if ( a != null && index >= 0 && index < a.Length ) + { + Mobile m = a[index]; + + if ( m != null ) + from.SendGump( new AdminGump( from, AdminGumpPage.ClientInfo, 0, null, null, m ) ); + } + else + { + index -= 6; + + if ( m_List != null && index >= 0 && index < m_List.Count ) + { + if ( m_List[index] is Account ) + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, null, m_List[index] ) ); + else if ( m_List[index] is DictionaryEntry ) + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, (ArrayList)(((DictionaryEntry)m_List[index]).Value), null, new ArrayList() ) ); + } + } + + break; + } + } + + break; + } + case 6: + { + switch ( index ) + { + case 0: + { + TextRelay matchEntry = info.GetTextEntry( 0 ); + string match = ( matchEntry == null ? null : matchEntry.Text.Trim() ); + + string notice = null; + ArrayList results = new ArrayList(); + + if ( match == null || match.Length == 0 ) + { + notice = "You must enter a username to search."; + } + else + { + for ( int i = 0; i < Firewall.List.Count; ++i ) + { + string check = Firewall.List[i].ToString(); + + if ( check.IndexOf( match ) >= 0 ) + results.Add( Firewall.List[i] ); + } + } + + if ( results.Count == 1 ) + from.SendGump( new AdminGump( from, AdminGumpPage.FirewallInfo, 0, null, "One match found.", results[0] ) ); + else if ( results.Count > 1 ) + from.SendGump( new AdminGump( from, AdminGumpPage.Firewall, 0, results, String.Format( "Search results for : {0}", match ), m_State ) ); + else + from.SendGump( new AdminGump( from, m_PageType, m_ListPage, m_List, notice == null ? "Nothing matched your search terms." : notice, m_State ) ); + + break; + } + case 1: + { + TextRelay relay = info.GetTextEntry( 0 ); + string text = ( relay == null ? null : relay.Text.Trim() ); + + if ( text == null || text.Length == 0 ) + { + from.SendGump( new AdminGump( from, m_PageType, m_ListPage, m_List, "You must enter an address or pattern to add.", m_State ) ); + } + else if ( !Utility.IsValidIP( text ) ) + { + from.SendGump( new AdminGump( from, m_PageType, m_ListPage, m_List, "That is not a valid address or pattern.", m_State ) ); + } + else + { + object toAdd = Firewall.ToFirewallEntry( text ); + + CommandLogging.WriteLine( from, "{0} {1} firewalling {2}", from.AccessLevel, CommandLogging.Format( from ), toAdd ); + + Firewall.Add( toAdd ); + from.SendGump( new AdminGump( from, AdminGumpPage.FirewallInfo, 0, null, String.Format( "{0} : Added to firewall.", toAdd ), toAdd ) ); + } + + break; + } + case 2: + { + InvokeCommand( "Firewall" ); + from.SendGump( new AdminGump( from, m_PageType, m_ListPage, m_List, "Target the player to firewall.", m_State ) ); + break; + } + case 3: + { + if ( m_State is Firewall.IFirewallEntry ) + { + CommandLogging.WriteLine( from, "{0} {1} removing {2} from firewall list", from.AccessLevel, CommandLogging.Format( from ), m_State ); + + Firewall.Remove( m_State ); + from.SendGump( new AdminGump( from, AdminGumpPage.Firewall, 0, null, String.Format( "{0} : Removed from firewall.", m_State ), null ) ); + } + + break; + } + default: + { + index -= 4; + + if ( m_List != null && index >= 0 && index < m_List.Count ) + from.SendGump( new AdminGump( from, AdminGumpPage.FirewallInfo, 0, null, null, m_List[index] ) ); + + break; + } + } + + break; + } + case 7: + { + Mobile m = m_State as Mobile; + + if ( m == null ) + break; + + string notice = null; + bool sendGump = true; + + switch ( index ) + { + case 0: + { + Map map = m.Map; + Point3D loc = m.Location; + + if ( map == null || map == Map.Internal ) + { + map = m.LogoutMap; + loc = m.LogoutLocation; + } + + if ( map != null && map != Map.Internal ) + { + from.MoveToWorld( loc, map ); + notice = "You have been teleported to their location."; + } + + break; + } + case 1: + { + m.MoveToWorld( from.Location, from.Map ); + notice = "They have been teleported to your location."; + break; + } + case 2: + { + NetState ns = m.NetState; + + if ( ns != null ) + { + CommandLogging.WriteLine( from, "{0} {1} {2} {3}", from.AccessLevel, CommandLogging.Format( from ), "kicking", CommandLogging.Format( m ) ); + ns.Dispose(); + notice = "They have been kicked."; + } + else + { + notice = "They are already disconnected."; + } + + break; + } + case 3: + { + Account a = m.Account as Account; + + if ( a != null ) + { + CommandLogging.WriteLine( from, "{0} {1} {2} {3}", from.AccessLevel, CommandLogging.Format( from ), "banning", CommandLogging.Format( m ) ); + a.Banned = true; + + NetState ns = m.NetState; + + if ( ns != null ) + ns.Dispose(); + + notice = "They have been banned."; + } + + break; + } + case 6: + { + Properties.SetValue( from, m, "Blessed", "False" ); + notice = "They are now mortal."; + break; + } + case 7: + { + Properties.SetValue( from, m, "Blessed", "True" ); + notice = "They are now immortal."; + break; + } + case 8: + { + Properties.SetValue( from, m, "Squelched", "True" ); + notice = "They are now squelched."; + break; + } + case 9: + { + Properties.SetValue( from, m, "Squelched", "False" ); + notice = "They are now unsquelched."; + break; + } + case 10: + { + Properties.SetValue( from, m, "Hidden", "True" ); + notice = "They are now hidden."; + break; + } + case 11: + { + Properties.SetValue( from, m, "Hidden", "False" ); + notice = "They are now unhidden."; + break; + } + case 12: + { + CommandLogging.WriteLine( from, "{0} {1} killing {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( m ) ); + m.Kill(); + notice = "They have been killed."; + break; + } + case 13: + { + CommandLogging.WriteLine( from, "{0} {1} resurrecting {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( m ) ); + m.Resurrect(); + notice = "They have been resurrected."; + break; + } + case 14: + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, null, m.Account ) ); + sendGump = false; + break; + } + } + + if ( sendGump ) + from.SendGump( new AdminGump( from, AdminGumpPage.ClientInfo, 0, null, notice, m_State ) ); + + switch ( index ) + { + case 3: + { + Account a = m.Account as Account; + + if ( a != null ) + from.SendGump( new BanDurationGump( a ) ); + + break; + } + case 4: + { + from.SendGump( new PropertiesGump( from, m ) ); + break; + } + case 5: + { + from.SendGump( new SkillsGump( from, m ) ); + break; + } + } + + break; + } + case 8: + { + if ( m_List != null && index >= 0 && index < m_List.Count ) + { + Account a = m_State as Account; + + if ( a == null ) + break; + + if ( m_PageType == AdminGumpPage.AccountDetails_Access_ClientIPs ) + { + from.SendGump( new WarningGump( 1060635, 30720, String.Format( "You are about to firewall {0}. All connection attempts from a matching IP will be refused. Are you sure?", m_List[index] ), 0xFFC000, 420, 280, new WarningGumpCallback( Firewall_Callback ), new object[]{ a, m_List[index] } ) ); + } + else if ( m_PageType == AdminGumpPage.AccountDetails_Access_Restrictions ) + { + ArrayList list = new ArrayList( a.IPRestrictions ); + + list.Remove( m_List[index] ); + + a.IPRestrictions = (string[])list.ToArray( typeof( string ) ); + + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_Restrictions, 0, null, String.Format( "{0} : Removed from list.", m_List[index] ), a ) ); + } + } + + break; + } + case 9: + { + if ( m_List != null && index >= 0 && index < m_List.Count ) + { + if ( m_PageType == AdminGumpPage.AccountDetails_Access_ClientIPs ) + { + object obj = m_List[index]; + + if ( !(obj is IPAddress) ) + break; + + Account a = m_State as Account; + + if ( a == null ) + break; + + ArrayList list = GetSharedAccounts( (IPAddress)obj ); + + if ( list.Count > 1 || (list.Count == 1 && !list.Contains( a )) ) + from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, list, null, new ArrayList() ) ); + else + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, "There are no other accounts which share that address.", m_State ) ); + } + } + + break; + } + } + } + + private void Shutdown( bool restart, bool save ) + { + CommandLogging.WriteLine( m_From, "{0} {1} shutting down server (Restart: {2}) (Save: {3})", m_From.AccessLevel, CommandLogging.Format( m_From ), restart, save ); + + if ( save ) + InvokeCommand( "Save" ); + + Core.Kill( restart ); + } + + private void InvokeCommand( string c ) + { + CommandSystem.Handle( m_From, String.Format( "{0}{1}", CommandSystem.Prefix, c ) ); + } + + public static void GetAccountInfo( Account a, out AccessLevel accessLevel, out bool online ) + { + accessLevel = a.AccessLevel; + online = false; + + for ( int j = 0; j < a.Length; ++j ) + { + Mobile check = a[j]; + + if ( check == null ) + continue; + + if ( check.AccessLevel > accessLevel ) + accessLevel = check.AccessLevel; + + if ( check.NetState != null ) + online = true; + } + } + + private class AddCommentPrompt : Prompt + { + private Account m_Account; + + public AddCommentPrompt( Account acct ) + { + m_Account = acct; + } + + public override void OnCancel( Mobile from ) + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Comments, 0, null, "Request to add comment was canceled.", m_Account ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( m_Account != null ) + { + m_Account.Comments.Add( new AccountComment( from.RawName, text ) ); + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Comments, 0, null, "Comment added.", m_Account ) ); + } + } + } + + private class AddTagNamePrompt : Prompt + { + private Account m_Account; + + public AddTagNamePrompt( Account acct ) + { + m_Account = acct; + } + + public override void OnCancel( Mobile from ) + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Tags, 0, null, "Request to add tag was canceled.", m_Account ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + from.Prompt = new AddTagValuePrompt( m_Account, text ); + from.SendMessage( "Enter the new tag value." ); + } + } + + private class AddTagValuePrompt : Prompt + { + private Account m_Account; + private string m_Name; + + public AddTagValuePrompt( Account acct, string name ) + { + m_Account = acct; + m_Name = name; + } + + public override void OnCancel( Mobile from ) + { + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Tags, 0, null, "Request to add tag was canceled.", m_Account ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( m_Account != null ) + { + m_Account.AddTag( m_Name, text ); + from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Tags, 0, null, "Tag added.", m_Account ) ); + } + } + } + + private class NetStateComparer : IComparer + { + public static readonly IComparer Instance = new NetStateComparer(); + + public NetStateComparer() + { + } + + public int Compare( object x, object y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + NetState a = x as NetState; + NetState b = y as NetState; + + if ( a == null || b == null ) + throw new ArgumentException(); + + Mobile aMob = a.Mobile; + Mobile bMob = b.Mobile; + + if ( aMob == null && bMob == null ) + return 0; + else if ( aMob == null ) + return 1; + else if ( bMob == null ) + return -1; + + if ( aMob.AccessLevel > bMob.AccessLevel ) + return -1; + else if ( aMob.AccessLevel < bMob.AccessLevel ) + return 1; + else + return Insensitive.Compare( aMob.Name, bMob.Name ); + } + } + + private class AccountComparer : IComparer + { + public static readonly IComparer Instance = new AccountComparer(); + + public AccountComparer() + { + } + + public int Compare( object x, object y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + Account a = x as Account; + Account b = y as Account; + + if ( a == null || b == null ) + throw new ArgumentException(); + + AccessLevel aLevel, bLevel; + bool aOnline, bOnline; + + GetAccountInfo( a, out aLevel, out aOnline ); + GetAccountInfo( b, out bLevel, out bOnline ); + + if ( aOnline && !bOnline ) + return -1; + else if ( bOnline && !aOnline ) + return 1; + else if ( aLevel > bLevel ) + return -1; + else if ( aLevel < bLevel ) + return 1; + else + return Insensitive.Compare( a.Username, b.Username ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/BanDurationGump.cs b/Scripts/Gumps/BanDurationGump.cs new file mode 100644 index 0000000..2d93ee1 --- /dev/null +++ b/Scripts/Gumps/BanDurationGump.cs @@ -0,0 +1,260 @@ +using System; +using System.Net; +using System.Text; +using System.Collections; +using System.Diagnostics; +using Server; +using Server.Items; +using Server.Prompts; +using Server.Network; +using Server.Accounting; +using Server.Commands; + +namespace Server.Gumps +{ + public class BanDurationGump : Gump + { + private ArrayList m_List; + + public void AddButtonLabeled( int x, int y, int buttonID, string text ) + { + AddButton( x, y - 1, 4005, 4007, buttonID, GumpButtonType.Reply, 0 ); + AddHtml( x + 35, y, 240, 20, text, false, false ); + } + + public void AddTextField( int x, int y, int width, int height, int index ) + { + AddBackground( x - 2, y - 2, width + 4, height + 4, 0x2486 ); + AddTextEntry( x + 2, y + 2, width - 4, height - 4, 0, index, "" ); + } + + public static ArrayList MakeList( object obj ) + { + ArrayList list = new ArrayList( 1 ); + list.Add( obj ); + return list; + } + + public BanDurationGump( Account a ) : this( MakeList( a ) ) + { + } + + public BanDurationGump( ArrayList list ) : base( (640 - 500) / 2, (480 - 305) / 2 ) + { + m_List = list; + + int width = 500; + int height = 305; + + AddPage( 0 ); + + AddBackground( 0, 0, width, height, 5054 ); + + //AddImageTiled( 10, 10, width - 20, 20, 2624 ); + //AddAlphaRegion( 10, 10, width - 20, 20 ); + AddHtml( 10, 10, width - 20, 20, "
Ban Duration
", false, false ); + + //AddImageTiled( 10, 40, width - 20, height - 50, 2624 ); + //AddAlphaRegion( 10, 40, width - 20, height - 50 ); + + AddButtonLabeled( 15, 45, 1, "Infinite" ); + AddButtonLabeled( 15, 65, 2, "From D:H:M:S" ); + + AddInput( 3, 0, "Days" ); + AddInput( 4, 1, "Hours" ); + AddInput( 5, 2, "Minutes" ); + AddInput( 6, 3, "Seconds" ); + + AddHtml( 170, 45, 240, 20, "Comments:", false, false ); + AddTextField( 170, 65, 315, height - 80, 10 ); + } + + public void AddInput( int bid, int idx, string name ) + { + int x = 15; + int y = 95 + (idx * 50); + + AddButtonLabeled( x, y, bid, name ); + AddTextField( x + 35, y + 20, 100, 20, idx ); + } + + public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + + if ( from.AccessLevel < AccessLevel.Administrator ) + return; + + TextRelay d = info.GetTextEntry( 0 ); + TextRelay h = info.GetTextEntry( 1 ); + TextRelay m = info.GetTextEntry( 2 ); + TextRelay s = info.GetTextEntry( 3 ); + + TextRelay c = info.GetTextEntry( 10 ); + + TimeSpan duration; + bool shouldSet; + + string fromString = from.ToString(); + + switch ( info.ButtonID ) + { + case 0: + { + for ( int i = 0; i < m_List.Count; ++i ) + { + Account a = (Account)m_List[i]; + + a.SetUnspecifiedBan( from ); + } + + from.SendMessage( "Duration unspecified." ); + return; + } + case 1: // infinite + { + duration = TimeSpan.MaxValue; + shouldSet = true; + break; + } + case 2: // From D:H:M:S + { + if ( d != null && h != null && m != null && s != null ) + { + try + { + duration = new TimeSpan( Utility.ToInt32( d.Text ), Utility.ToInt32( h.Text ), Utility.ToInt32( m.Text ), Utility.ToInt32( s.Text ) ); + shouldSet = true; + + break; + } + catch + { + } + } + + duration = TimeSpan.Zero; + shouldSet = false; + + break; + } + case 3: // From D + { + if ( d != null ) + { + try + { + duration = TimeSpan.FromDays( Utility.ToDouble( d.Text ) ); + shouldSet = true; + + break; + } + catch + { + } + } + + duration = TimeSpan.Zero; + shouldSet = false; + + break; + } + case 4: // From H + { + if ( h != null ) + { + try + { + duration = TimeSpan.FromHours( Utility.ToDouble( h.Text ) ); + shouldSet = true; + + break; + } + catch + { + } + } + + duration = TimeSpan.Zero; + shouldSet = false; + + break; + } + case 5: // From M + { + if ( m != null ) + { + try + { + duration = TimeSpan.FromMinutes( Utility.ToDouble( m.Text ) ); + shouldSet = true; + + break; + } + catch + { + } + } + + duration = TimeSpan.Zero; + shouldSet = false; + + break; + } + case 6: // From S + { + if ( s != null ) + { + try + { + duration = TimeSpan.FromSeconds( Utility.ToDouble( s.Text ) ); + shouldSet = true; + + break; + } + catch + { + } + } + + duration = TimeSpan.Zero; + shouldSet = false; + + break; + } + default: return; + } + + if ( shouldSet ) { + string comment = null; + + if ( c != null ) { + comment = c.Text.Trim(); + + if ( comment.Length == 0 ) + comment = null; + } + + for ( int i = 0; i < m_List.Count; ++i ) + { + Account a = (Account)m_List[i]; + + a.SetBanTags( from, DateTime.Now, duration ); + + if ( comment != null ) + a.Comments.Add( new AccountComment( from.RawName, String.Format( "Duration: {0}, Comment: {1}", (( duration == TimeSpan.MaxValue )? "Infinite" : duration.ToString()), comment ) ) ); + } + + if ( duration == TimeSpan.MaxValue ) + from.SendMessage( "Ban Duration: Infinite" ); + else + from.SendMessage( "Ban Duration: {0}", duration ); + } + else + { + from.SendMessage( "Time values were improperly formatted." ); + from.SendGump( new BanDurationGump( m_List ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/BaseConfirmGump.cs b/Scripts/Gumps/BaseConfirmGump.cs new file mode 100644 index 0000000..49c26dd --- /dev/null +++ b/Scripts/Gumps/BaseConfirmGump.cs @@ -0,0 +1,79 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Gumps +{ + public class BaseConfirmGump : Gump + { + public virtual int TitleNumber{ get{ return 1075083; } } //
Warning!
+ public virtual int LabelNumber{ get{ return 1074975; } } // Are you sure you wish to select this? + + private enum Buttons + { + Close, + Break, + Confirm + } + + public BaseConfirmGump() : base( 120, 50 ) + { + Closable = false; + Disposable = true; + Dragable = true; + Resizable = false; + + AddPage( 0 ); + + AddImageTiled( 0, 0, 348, 262, 0xA8E ); + AddAlphaRegion( 0, 0, 348, 262 ); + AddImage( 0, 15, 0x27A8 ); + AddImageTiled( 0, 30, 17, 200, 0x27A7 ); + AddImage( 0, 230, 0x27AA ); + AddImage( 15, 230, 0x280C ); + AddImageTiled( 30, 0, 300, 17, 0x280A ); + AddImage( 315, 0, 0x280E ); + AddImage( 15, 244, 0x280C ); + AddImageTiled( 30, 244, 300, 17, 0x280A ); + AddImage( 315, 244, 0x280E ); + AddImage( 330, 15, 0x27A8 ); + AddImageTiled( 330, 30, 17, 200, 0x27A7 ); + AddImage( 330, 230, 0x27AA ); + AddImage( 333, 2, 0x2716 ); + AddImage( 315, 248, 0x2716 ); + AddImage( 2, 248, 0x2716 ); + AddImage( 2, 2, 0x2716 ); + AddHtmlLocalized( 25, 25, 200, 20, TitleNumber, 0x7D00, false, false ); + AddImage( 25, 40, 0xBBF ); + AddHtmlLocalized( 25, 55, 300, 120, LabelNumber, 0xFFFFFF, false, false ); + + AddRadio( 25, 175, 0x25F8, 0x25FB, true, (int) Buttons.Break ); + AddRadio( 25, 210, 0x25F8, 0x25FB, false, (int) Buttons.Close ); + + AddHtmlLocalized( 60, 180, 280, 20, 1074976, 0xFFFFFF, false, false ); + AddHtmlLocalized( 60, 215, 280, 20, 1074977, 0xFFFFFF, false, false ); + + AddButton( 265, 220, 0xF7, 0xF8, (int) Buttons.Confirm, GumpButtonType.Reply, 0 ); + } + + public override void OnResponse( Server.Network.NetState state, RelayInfo info ) + { + if ( info.ButtonID == (int) Buttons.Confirm ) + { + if ( info.IsSwitched( (int) Buttons.Break ) ) + Confirm( state.Mobile ); + else + Refuse( state.Mobile ); + } + } + + public virtual void Confirm( Mobile from ) + { + } + + public virtual void Refuse( Mobile from ) + { + } + } +} diff --git a/Scripts/Gumps/BaseGridGump.cs b/Scripts/Gumps/BaseGridGump.cs new file mode 100644 index 0000000..102f9d8 --- /dev/null +++ b/Scripts/Gumps/BaseGridGump.cs @@ -0,0 +1,197 @@ +using System; + +namespace Server.Gumps +{ + public abstract class BaseGridGump : Gump + { + private int m_CurrentX, m_CurrentY; + private int m_CurrentPage; + + protected GumpBackground m_Background; + protected GumpImageTiled m_Offset; + + public int CurrentPage + { + get{ return m_CurrentPage; } + } + + public int CurrentX + { + get{ return m_CurrentX; } + } + + public int CurrentY + { + get{ return m_CurrentY; } + } + + public BaseGridGump( int x, int y ) : base( x, y ) + { + } + + public virtual int BorderSize{ get{ return 10; } } + public virtual int OffsetSize{ get{ return 1; } } + + public virtual int EntryHeight{ get{ return 20; } } + + public virtual int OffsetGumpID{ get{ return 0x0A40; } } + public virtual int HeaderGumpID{ get{ return 0x0E14; } } + public virtual int EntryGumpID{ get{ return 0x0BBC; } } + public virtual int BackGumpID{ get{ return 0x13BE; } } + + public virtual int TextHue{ get{ return 0; } } + public virtual int TextOffsetX{ get{ return 2; } } + + public const int ArrowLeftID1 = 0x15E3; + public const int ArrowLeftID2 = 0x15E7; + public const int ArrowLeftWidth = 16; + public const int ArrowLeftHeight = 16; + + public const int ArrowRightID1 = 0x15E1; + public const int ArrowRightID2 = 0x15E5; + public const int ArrowRightWidth = 16; + public const int ArrowRightHeight = 16; + + public string Center( string text ) + { + return String.Format( "
{0}
", text ); + } + + public string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + + public int GetButtonID( int typeCount, int type, int index ) + { + return 1 + (index * typeCount) + type; + } + + public bool SplitButtonID( int buttonID, int typeCount, out int type, out int index ) + { + if ( buttonID < 1 ) + { + type = 0; + index = 0; + return false; + } + + buttonID -= 1; + + type = buttonID % typeCount; + index = buttonID / typeCount; + + return true; + } + + public void FinishPage() + { + if ( m_Background != null ) + m_Background.Height = m_CurrentY + EntryHeight + OffsetSize + BorderSize; + + if ( m_Offset != null ) + m_Offset.Height = m_CurrentY + EntryHeight + OffsetSize - BorderSize; + } + + public void AddNewPage() + { + FinishPage(); + + m_CurrentX = BorderSize + OffsetSize; + m_CurrentY = BorderSize + OffsetSize; + + AddPage( ++m_CurrentPage ); + + m_Background = new GumpBackground( 0, 0, 100, 100, BackGumpID ); + Add( m_Background ); + + m_Offset = new GumpImageTiled( BorderSize, BorderSize, 100, 100, OffsetGumpID ); + Add( m_Offset ); + } + + public void AddNewLine() + { + m_CurrentY += EntryHeight + OffsetSize; + m_CurrentX = BorderSize + OffsetSize; + } + + public void IncreaseX( int width ) + { + m_CurrentX += width + OffsetSize; + + width = m_CurrentX + BorderSize; + + if ( m_Background != null && width > m_Background.Width ) + m_Background.Width = width; + + width = m_CurrentX - BorderSize; + + if ( m_Offset != null && width > m_Offset.Width ) + m_Offset.Width = width; + } + + public void AddEntryLabel( int width, string text ) + { + AddImageTiled( m_CurrentX, m_CurrentY, width, EntryHeight, EntryGumpID ); + AddLabelCropped( m_CurrentX + TextOffsetX, m_CurrentY, width - TextOffsetX, EntryHeight, TextHue, text ); + + IncreaseX( width ); + } + + public void AddEntryHtml( int width, string text ) + { + AddImageTiled( m_CurrentX, m_CurrentY, width, EntryHeight, EntryGumpID ); + AddHtml( m_CurrentX + TextOffsetX, m_CurrentY, width - TextOffsetX, EntryHeight, text, false, false ); + + IncreaseX( width ); + } + + public void AddEntryHeader( int width ) + { + AddEntryHeader( width, 1 ); + } + + public void AddEntryHeader( int width, int spannedEntries ) + { + AddImageTiled( m_CurrentX, m_CurrentY, width, (EntryHeight * spannedEntries) + (OffsetSize * (spannedEntries - 1)), HeaderGumpID ); + IncreaseX( width ); + } + + public void AddBlankLine() + { + if ( m_Offset != null ) + AddImageTiled( m_Offset.X, m_CurrentY, m_Offset.Width, EntryHeight, BackGumpID + 4 ); + + AddNewLine(); + } + + public void AddEntryButton( int width, int normalID, int pressedID, int buttonID, int buttonWidth, int buttonHeight ) + { + AddEntryButton( width, normalID, pressedID, buttonID, buttonWidth, buttonHeight, 1 ); + } + + public void AddEntryButton( int width, int normalID, int pressedID, int buttonID, int buttonWidth, int buttonHeight, int spannedEntries ) + { + AddImageTiled( m_CurrentX, m_CurrentY, width, (EntryHeight * spannedEntries) + (OffsetSize * (spannedEntries - 1)), HeaderGumpID ); + AddButton( m_CurrentX + ((width - buttonWidth) / 2), m_CurrentY + (((EntryHeight * spannedEntries) + (OffsetSize * (spannedEntries - 1)) - buttonHeight) / 2), normalID, pressedID, buttonID, GumpButtonType.Reply, 0 ); + + IncreaseX( width ); + } + + public void AddEntryPageButton( int width, int normalID, int pressedID, int page, int buttonWidth, int buttonHeight ) + { + AddImageTiled( m_CurrentX, m_CurrentY, width, EntryHeight, HeaderGumpID ); + AddButton( m_CurrentX + ((width - buttonWidth) / 2), m_CurrentY + ((EntryHeight - buttonHeight) / 2), normalID, pressedID, 0, GumpButtonType.Page, page ); + + IncreaseX( width ); + } + + public void AddEntryText( int width, int entryID, string initialText ) + { + AddImageTiled( m_CurrentX, m_CurrentY, width, EntryHeight, EntryGumpID ); + AddTextEntry( m_CurrentX + TextOffsetX, m_CurrentY, width - TextOffsetX, EntryHeight, TextHue, entryID, initialText ); + + IncreaseX( width ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/BaseImageTileButtonsGump.cs b/Scripts/Gumps/BaseImageTileButtonsGump.cs new file mode 100644 index 0000000..7c3fa0b --- /dev/null +++ b/Scripts/Gumps/BaseImageTileButtonsGump.cs @@ -0,0 +1,131 @@ +using System; +using Server; +using Server.Network; +using System.Collections; + +namespace Server.Gumps +{ + public class ImageTileButtonInfo + { + private int m_ItemID; + private int m_Hue; + private int m_LocalizedTooltip; + + private TextDefinition m_Label; + + public virtual int ItemID + { + get{ return m_ItemID; } + set{ m_ItemID = value; } + } + public virtual int Hue + { + get{ return m_Hue; } + set{ m_Hue = value; } + } + public virtual int LocalizedTooltip + { + get{ return m_LocalizedTooltip; } + set{ m_LocalizedTooltip = value; } + } + + public virtual TextDefinition Label + { + get{ return m_Label; } + set{ m_Label = value; } + } + + public ImageTileButtonInfo( int itemID, int hue, TextDefinition label, int localizedTooltip ) + { + m_Hue = hue; + m_ItemID = itemID; + m_Label = label; + m_LocalizedTooltip = localizedTooltip; + } + public ImageTileButtonInfo( int itemID, int hue, TextDefinition label ) : this( itemID, hue, label, -1 ) + { + } + } + + public class BaseImageTileButtonsGump : Gump + { + private ImageTileButtonInfo[] m_Buttons; + + protected ImageTileButtonInfo[] Buttons { get { return m_Buttons; } } + + protected virtual int XItems{ get{ return 2; } } + protected virtual int YItems{ get { return 5; } } + + public BaseImageTileButtonsGump( TextDefinition header, ArrayList buttons ) : this( header, (ImageTileButtonInfo[])buttons.ToArray( typeof( ImageTileButtonInfo ) ) ) + { + } + public BaseImageTileButtonsGump( TextDefinition header, ImageTileButtonInfo[] buttons ) : base( 10, 10 ) //Coords are 0, o on OSI, intentional difference + { + m_Buttons = buttons; + AddPage( 0 ); + + int x = XItems * 250; + int y = YItems * 64; + + AddBackground( 0, 0, x+20, y+84, 0x13BE ); + AddImageTiled( 10, 10, x, 20, 0xA40 ); + AddImageTiled( 10, 40, x, y+4, 0xA40 ); + AddImageTiled( 10, y+54, x, 20, 0xA40 ); + AddAlphaRegion( 10, 10, x, y+64 ); + + AddButton( 10, y+54, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 ); //Cancel Button + AddHtmlLocalized( 45, y+56, x-50, 20, 1060051, 0x7FFF, false, false ); // CANCEL + TextDefinition.AddHtmlText( this, 14, 12, x, 20, header, false, false, 0x7FFF, 0xFFFFFF ); + + AddPage( 1 ); + + int itemsPerPage = XItems * YItems; + + for( int i = 0; i < buttons.Length; i++ ) + { + int position = i % itemsPerPage; + + int innerX = (position % XItems) * 250 + 14; + int innerY = (position / XItems) * 64 + 44; + + int pageNum = i / itemsPerPage + 1; + + if( position == 0 && i != 0 ) + { + AddButton( x-100, y+54, 0xFA5, 0xFA7, 0, GumpButtonType.Page, pageNum ); + AddHtmlLocalized( x-60, y+56, 60, 20, 1043353, 0x7FFF, false, false ); // Next + + AddPage( pageNum ); + + AddButton( x-200, y+54, 0xFAE, 0xFB0, 0, GumpButtonType.Page, pageNum - 1 ); + AddHtmlLocalized( x-160, y+56, 60, 20, 1011393, 0x7FFF, false, false ); // Back + + } + + ImageTileButtonInfo b = buttons[i]; + + AddImageTiledButton( innerX, innerY, 0x918, 0x919, 100 + i, GumpButtonType.Reply, 0, b.ItemID, b.Hue, 15, 10, b.LocalizedTooltip ); + TextDefinition.AddHtmlText( this, innerX + 84, innerY, 250, 60, b.Label, false, false, 0x7FFF, 0xFFFFFF ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int adjustedID = info.ButtonID - 100; + + if( adjustedID >= 0 && adjustedID < Buttons.Length ) + HandleButtonResponse( sender, adjustedID, Buttons[adjustedID] ); + else + HandleCancel( sender ); + + } + + public virtual void HandleButtonResponse( NetState sender, int adjustedButton, ImageTileButtonInfo buttonInfo ) + { + } + + public virtual void HandleCancel( NetState sender ) + { + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/CategorizedAddGump.cs b/Scripts/Gumps/CategorizedAddGump.cs new file mode 100644 index 0000000..5041962 --- /dev/null +++ b/Scripts/Gumps/CategorizedAddGump.cs @@ -0,0 +1,386 @@ +using System; +using System.IO; +using System.Xml; +using System.Collections; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public abstract class CAGNode + { + public abstract string Caption{ get; } + public abstract void OnClick( Mobile from, int page ); + } + + public class CAGObject : CAGNode + { + private Type m_Type; + private int m_ItemID; + private int m_Hue; + private CAGCategory m_Parent; + + public Type Type{ get{ return m_Type; } } + public int ItemID{ get{ return m_ItemID; } } + public int Hue{ get{ return m_Hue; } } + public CAGCategory Parent{ get{ return m_Parent; } } + + public override string Caption{ get{ return ( m_Type == null ? "bad type" : m_Type.Name ); } } + + public override void OnClick( Mobile from, int page ) + { + if ( m_Type == null ) + { + from.SendMessage( "That is an invalid type name." ); + } + else + { + CommandSystem.Handle( from, String.Format( "{0}Add {1}", CommandSystem.Prefix, m_Type.Name ) ); + + from.SendGump( new CategorizedAddGump( from, m_Parent, page ) ); + } + } + + public CAGObject( CAGCategory parent, XmlTextReader xml ) + { + m_Parent = parent; + + if ( xml.MoveToAttribute( "type" ) ) + m_Type = ScriptCompiler.FindTypeByFullName( xml.Value, false ); + + if ( xml.MoveToAttribute( "gfx" ) ) + m_ItemID = XmlConvert.ToInt32( xml.Value ); + + if ( xml.MoveToAttribute( "hue" ) ) + m_Hue = XmlConvert.ToInt32( xml.Value ); + } + } + + public class CAGCategory : CAGNode + { + private string m_Title; + private CAGNode[] m_Nodes; + private CAGCategory m_Parent; + + public string Title{ get{ return m_Title; } } + public CAGNode[] Nodes{ get{ return m_Nodes; } } + public CAGCategory Parent{ get{ return m_Parent; } } + + public override string Caption{ get{ return m_Title; } } + + public override void OnClick( Mobile from, int page ) + { + from.SendGump( new CategorizedAddGump( from, this, 0 ) ); + } + + private CAGCategory() + { + m_Title = "no data"; + m_Nodes = new CAGNode[0]; + } + + public CAGCategory( CAGCategory parent, XmlTextReader xml ) + { + m_Parent = parent; + + if ( xml.MoveToAttribute( "title" ) ) + m_Title = xml.Value; + else + m_Title = "empty"; + + if ( m_Title == "Docked" ) + m_Title = "Docked 2"; + + if ( xml.IsEmptyElement ) + { + m_Nodes = new CAGNode[0]; + } + else + { + ArrayList nodes = new ArrayList(); + + while ( xml.Read() && xml.NodeType != XmlNodeType.EndElement ) + { + if ( xml.NodeType == XmlNodeType.Element && xml.Name == "object" ) + nodes.Add( new CAGObject( this, xml ) ); + else if ( xml.NodeType == XmlNodeType.Element && xml.Name == "category" ) + { + if( !xml.IsEmptyElement ) + nodes.Add( new CAGCategory( this, xml ) ); + } + else + xml.Skip(); + } + + m_Nodes = (CAGNode[])nodes.ToArray( typeof( CAGNode ) ); + } + } + + private static CAGCategory m_Root; + + public static CAGCategory Root + { + get + { + if ( m_Root == null ) + m_Root = Load( "Data/Config/objects.xml" ); + + return m_Root; + } + } + + public static CAGCategory Load( string path ) + { + if ( File.Exists( path ) ) + { + XmlTextReader xml = new XmlTextReader( path ); + + xml.WhitespaceHandling = WhitespaceHandling.None; + + while ( xml.Read() ) + { + if ( xml.Name == "category" && xml.NodeType == XmlNodeType.Element ) + { + CAGCategory cat = new CAGCategory( null, xml ); + + xml.Close(); + + return cat; + } + } + } + + return new CAGCategory(); + } + } + + public class CategorizedAddGump : Gump + { + public static bool OldStyle = PropsConfig.OldStyle; + + public static readonly int EntryHeight = 24;//PropsConfig.EntryHeight; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + public static readonly int BorderSize = PropsConfig.BorderSize; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY + (((EntryHeight - 20) / 2) / 2); + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY + (((EntryHeight - 20) / 2) / 2); + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY + (((EntryHeight - 20) / 2) / 2); + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + private static bool PrevLabel = false, NextLabel = false; + + private static readonly int PrevLabelOffsetX = PrevWidth + 1; + private static readonly int PrevLabelOffsetY = 0; + + private static readonly int NextLabelOffsetX = -29; + private static readonly int NextLabelOffsetY = 0; + + private static readonly int EntryWidth = 180; + private static readonly int EntryCount = 15; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (EntryCount + 1)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + private Mobile m_Owner; + private CAGCategory m_Category; + private int m_Page; + + public CategorizedAddGump( Mobile owner ) : this( owner, CAGCategory.Root, 0 ) + { + } + + public CategorizedAddGump( Mobile owner, CAGCategory category, int page ) : base( GumpOffsetX, GumpOffsetY ) + { + owner.CloseGump( typeof( WhoGump ) ); + + m_Owner = owner; + m_Category = category; + + Initialize( page ); + } + + public void Initialize( int page ) + { + m_Page = page; + + CAGNode[] nodes = m_Category.Nodes; + + int count = nodes.Length - (page * EntryCount); + + if ( count < 0 ) + count = 0; + else if ( count > EntryCount ) + count = EntryCount; + + int totalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (count + 1)); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BorderSize + totalHeight + BorderSize, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), totalHeight, OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + if ( OldStyle ) + AddImageTiled( x, y, TotalWidth - (OffsetSize * 3) - SetWidth, EntryHeight, HeaderGumpID ); + else + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + if ( m_Category.Parent != null ) + { + AddButton( x + PrevOffsetX, y + PrevOffsetY, PrevButtonID1, PrevButtonID2, 1, GumpButtonType.Reply, 0 ); + + if ( PrevLabel ) + AddLabel( x + PrevLabelOffsetX, y + PrevLabelOffsetY, TextHue, "Previous" ); + } + + x += PrevWidth + OffsetSize; + + int emptyWidth = TotalWidth - (PrevWidth * 2) - NextWidth - (OffsetSize * 5) - (OldStyle ? SetWidth + OffsetSize : 0); + + if ( !OldStyle ) + AddImageTiled( x - (OldStyle ? OffsetSize : 0), y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0), EntryHeight, EntryGumpID ); + + AddHtml( x + TextOffsetX, y + ((EntryHeight - 20) / 2), emptyWidth - TextOffsetX, EntryHeight, String.Format( "
{0}
", m_Category.Caption ), false, false ); + + x += emptyWidth + OffsetSize; + + if ( OldStyle ) + AddImageTiled( x, y, TotalWidth - (OffsetSize * 3) - SetWidth, EntryHeight, HeaderGumpID ); + else + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + if ( page > 0 ) + { + AddButton( x + PrevOffsetX, y + PrevOffsetY, PrevButtonID1, PrevButtonID2, 2, GumpButtonType.Reply, 0 ); + + if ( PrevLabel ) + AddLabel( x + PrevLabelOffsetX, y + PrevLabelOffsetY, TextHue, "Previous" ); + } + + x += PrevWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x, y, NextWidth, EntryHeight, HeaderGumpID ); + + if ( (page + 1) * EntryCount < nodes.Length ) + { + AddButton( x + NextOffsetX, y + NextOffsetY, NextButtonID1, NextButtonID2, 3, GumpButtonType.Reply, 1 ); + + if ( NextLabel ) + AddLabel( x + NextLabelOffsetX, y + NextLabelOffsetY, TextHue, "Next" ); + } + + for ( int i = 0, index = page * EntryCount; i < EntryCount && index < nodes.Length; ++i, ++index ) + { + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + CAGNode node = nodes[index]; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y + ((EntryHeight - 20) / 2), EntryWidth - TextOffsetX, EntryHeight, TextHue, node.Caption ); + + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, i + 4, GumpButtonType.Reply, 0 ); + + if ( node is CAGObject ) + { + CAGObject obj = (CAGObject)node; + int itemID = obj.ItemID; + + Rectangle2D bounds = ItemBounds.Table[itemID]; + + if ( itemID != 1 && bounds.Height < (EntryHeight * 2) ) + { + if ( bounds.Height < EntryHeight ) + AddItem( x - OffsetSize - 22 - ((i % 2) * 44) - (bounds.Width / 2) - bounds.X, y + (EntryHeight / 2) - (bounds.Height / 2) - bounds.Y, itemID ); + else + AddItem( x - OffsetSize - 22 - ((i % 2) * 44) - (bounds.Width / 2) - bounds.X, y + EntryHeight - 1 - bounds.Height - bounds.Y, itemID ); + } + } + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = m_Owner; + + switch ( info.ButtonID ) + { + case 0: // Closed + { + return; + } + case 1: // Up + { + if ( m_Category.Parent != null ) + { + int index = Array.IndexOf( m_Category.Parent.Nodes, m_Category ) / EntryCount; + + if ( index < 0 ) + index = 0; + + from.SendGump( new CategorizedAddGump( from, m_Category.Parent, index ) ); + } + + break; + } + case 2: // Previous + { + if ( m_Page > 0 ) + from.SendGump( new CategorizedAddGump( from, m_Category, m_Page - 1 ) ); + + break; + } + case 3: // Next + { + if ( (m_Page + 1) * EntryCount < m_Category.Nodes.Length ) + from.SendGump( new CategorizedAddGump( from, m_Category, m_Page + 1 ) ); + + break; + } + default: + { + int index = (m_Page * EntryCount) + (info.ButtonID - 4); + + if ( index >= 0 && index < m_Category.Nodes.Length ) + m_Category.Nodes[index].OnClick( from, m_Page ); + + break; + } + } + } + } +} diff --git a/Scripts/Gumps/ClientGump.cs b/Scripts/Gumps/ClientGump.cs new file mode 100644 index 0000000..e25b8a1 --- /dev/null +++ b/Scripts/Gumps/ClientGump.cs @@ -0,0 +1,298 @@ +using System; +using System.Net; +using Server; +using Server.Accounting; +using Server.Network; +using Server.Targets; +using Server.Commands; +using Server.Commands.Generic; + +namespace Server.Gumps +{ + public class ClientGump : Gump + { + private NetState m_State; + + private void Resend( Mobile to, RelayInfo info ) + { + TextRelay te = info.GetTextEntry( 0 ); + + to.SendGump( new ClientGump( to, m_State, te == null ? "" : te.Text ) ); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( m_State == null ) + return; + + Mobile focus = m_State.Mobile; + Mobile from = state.Mobile; + + if ( focus == null ) + { + from.SendMessage( "That character is no longer online." ); + return; + } + else if ( focus.Deleted ) + { + from.SendMessage( "That character no longer exists." ); + return; + } + else if ( from != focus && focus.Hidden && from.AccessLevel < focus.AccessLevel ) + { + from.SendMessage( "That character is no longer visible." ); + return; + } + + switch ( info.ButtonID ) + { + case 1: // Tell + { + TextRelay text = info.GetTextEntry( 0 ); + + if ( text != null ) + { + focus.SendMessage( 0x482, "{0} tells you:", from.Name ); + focus.SendMessage( 0x482, text.Text ); + + CommandLogging.WriteLine( from, "{0} {1} telling {2} \"{3}\" ", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( focus ), text.Text ); + } + + from.SendGump( new ClientGump( from, m_State ) ); + + break; + } + case 4: // Props + { + Resend( from, info ); + + if ( !BaseCommand.IsAccessible( from, focus ) ) + from.SendMessage( "That is not accessible." ); + else + { + from.SendGump( new PropertiesGump( from, focus ) ); + CommandLogging.WriteLine( from, "{0} {1} opening properties gump of {2} ", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( focus ) ); + } + + break; + } + case 5: // Go to + { + if ( focus.Map == null || focus.Map == Map.Internal ) + { + from.SendMessage( "That character is not in the world." ); + } + else + { + from.MoveToWorld( focus.Location, focus.Map ); + Resend( from, info ); + + CommandLogging.WriteLine( from, "{0} {1} going to {2}, Location {3}, Map {4}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( focus ), focus.Location, focus.Map ); + } + + break; + } + case 6: // Get + { + if ( from.Map == null || from.Map == Map.Internal ) + { + from.SendMessage( "You cannot bring that person here." ); + } + else + { + focus.MoveToWorld( from.Location, from.Map ); + Resend( from, info ); + + CommandLogging.WriteLine( from, "{0} {1} bringing {2} to Location {3}, Map {4}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( focus ), from.Location, from.Map ); + } + + break; + } + case 7: // Move + { + from.Target = new MoveTarget( focus ); + Resend( from, info ); + + break; + } + case 8: // Kick + { + if ( from.AccessLevel >= AccessLevel.GameMaster && from.AccessLevel > focus.AccessLevel ) + { + focus.Say( "I've been kicked!" ); + + m_State.Dispose(); + + CommandLogging.WriteLine( from, "{0} {1} kicking {2} ", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( focus ) ); + } + + break; + } + case 9: // Kill + { + if ( from.AccessLevel >= AccessLevel.GameMaster && from.AccessLevel > focus.AccessLevel ) + { + focus.Kill(); + CommandLogging.WriteLine( from, "{0} {1} killing {2} ", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( focus ) ); + } + + Resend( from, info ); + + break; + } + case 10: //Res + { + if ( from.AccessLevel >= AccessLevel.GameMaster && from.AccessLevel > focus.AccessLevel ) + { + focus.PlaySound( 0x214 ); + focus.FixedEffect( 0x376A, 10, 16 ); + + focus.Resurrect(); + + CommandLogging.WriteLine( from, "{0} {1} resurrecting {2} ", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( focus ) ); + } + + Resend( from, info ); + + break; + } + case 11: // Skills + { + Resend( from, info ); + + if ( from.AccessLevel > focus.AccessLevel ) + { + from.SendGump( new SkillsGump( from, (Mobile)focus ) ); + CommandLogging.WriteLine( from, "{0} {1} Opening Skills gump of {2} ", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( focus ) ); + } + + break; + } + } + } + + public ClientGump( Mobile from, NetState state ) : this( from, state, "" ) + { + } + + private const int LabelColor32 = 0xFFFFFF; + + public string Center( string text ) + { + return String.Format( "
{0}
", text ); + } + + public string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + + public ClientGump( Mobile from, NetState state, string initialText ) : base( 30, 20 ) + { + if ( state == null ) + return; + + m_State = state; + + AddPage( 0 ); + + AddBackground( 0, 0, 400, 274, 5054 ); + + AddImageTiled( 10, 10, 380, 19, 0xA40 ); + AddAlphaRegion( 10, 10, 380, 19 ); + + AddImageTiled( 10, 32, 380, 232, 0xA40 ); + AddAlphaRegion( 10, 32, 380, 232 ); + + AddHtml( 10, 10, 380, 20, Color( Center( "User Information" ), LabelColor32 ), false, false ); + + int line = 0; + + AddHtml( 14, 36 + (line * 20), 200, 20, Color( "Address:", LabelColor32 ), false, false ); + AddHtml( 70, 36 + (line++ * 20), 200, 20, Color( state.ToString(), LabelColor32 ), false, false ); + + AddHtml( 14, 36 + (line * 20), 200, 20, Color( "Client:", LabelColor32 ), false, false ); + AddHtml( 70, 36 + (line++ * 20), 200, 20, Color( state.Version == null ? "(null)" : state.Version.ToString(), LabelColor32 ), false, false ); + + AddHtml( 14, 36 + (line * 20), 200, 20, Color( "Version:", LabelColor32 ), false, false ); + + ExpansionInfo info = state.ExpansionInfo; + string expansionName = info.Name; + + AddHtml( 70, 36 + (line++ * 20), 200, 20, Color( expansionName, LabelColor32 ), false, false ); + + Account a = state.Account as Account; + Mobile m = state.Mobile; + + if ( from.AccessLevel >= AccessLevel.GameMaster && a != null ) + { + AddHtml( 14, 36 + (line * 20), 200, 20, Color( "Account:", LabelColor32 ), false, false ); + AddHtml( 70, 36 + (line++ * 20), 200, 20, Color( a.Username, LabelColor32 ), false, false ); + } + + if ( m != null ) + { + AddHtml( 14, 36 + (line * 20), 200, 20, Color( "Mobile:", LabelColor32 ), false, false ); + AddHtml( 70, 36 + (line++ * 20), 200, 20, Color( String.Format( "{0} (0x{1:X})", m.Name, m.Serial.Value ), LabelColor32 ), false, false ); + + AddHtml( 14, 36 + (line * 20), 200, 20, Color( "Location:", LabelColor32 ), false, false ); + AddHtml( 70, 36 + (line++ * 20), 200, 20, Color( String.Format( "{0} [{1}]", m.Location, m.Map ), LabelColor32 ), false, false ); + + AddButton( 13, 157, 0xFAB, 0xFAD, 1, GumpButtonType.Reply, 0 ); + AddHtml( 48, 158, 200, 20, Color( "Send Message", LabelColor32 ), false, false ); + + AddImageTiled( 12, 182, 376, 80, 0xA40 ); + AddImageTiled( 13, 183, 374, 78, 0xBBC ); + AddTextEntry( 15, 183, 372, 78, 0x480, 0, "" ); + + AddImageTiled( 245, 35, 142, 144, 5058 ); + + AddImageTiled( 246, 36, 140, 142, 0xA40 ); + AddAlphaRegion( 246, 36, 140, 142 ); + + line = 0; + + if ( BaseCommand.IsAccessible( from, m ) ) + { + AddButton( 246, 36 + (line * 20), 0xFA5, 0xFA7, 4, GumpButtonType.Reply, 0 ); + AddHtml( 280, 38 + (line++ * 20), 100, 20, Color( "Properties", LabelColor32 ), false, false ); + } + + if ( from != m ) + { + AddButton( 246, 36 + (line * 20), 0xFA5, 0xFA7, 5, GumpButtonType.Reply, 0 ); + AddHtml( 280, 38 + (line++ * 20), 100, 20, Color( "Go to them", LabelColor32 ), false, false ); + + AddButton( 246, 36 + (line * 20), 0xFA5, 0xFA7, 6, GumpButtonType.Reply, 0 ); + AddHtml( 280, 38 + (line++ * 20), 100, 20, Color( "Bring them here", LabelColor32 ), false, false ); + } + + AddButton( 246, 36 + (line * 20), 0xFA5, 0xFA7, 7, GumpButtonType.Reply, 0 ); + AddHtml( 280, 38 + (line++ * 20), 100, 20, Color( "Move to target", LabelColor32 ), false, false ); + + if ( from.AccessLevel >= AccessLevel.GameMaster && from.AccessLevel > m.AccessLevel ) + { + AddButton( 246, 36 + (line * 20), 0xFA5, 0xFA7, 8, GumpButtonType.Reply, 0 ); + AddHtml( 280, 38 + (line++ * 20), 100, 20, Color( "Disconnect", LabelColor32 ), false, false ); + + if ( m.Alive ) + { + AddButton( 246, 36 + (line * 20), 0xFA5, 0xFA7, 9, GumpButtonType.Reply, 0 ); + AddHtml( 280, 38 + (line++ * 20), 100, 20, Color( "Kill", LabelColor32 ), false, false ); + } + else + { + AddButton( 246, 36 + (line * 20), 0xFA5, 0xFA7, 10, GumpButtonType.Reply, 0 ); + AddHtml( 280, 38 + (line++ * 20), 100, 20, Color( "Resurrect", LabelColor32 ), false, false ); + } + } + + if ( from.AccessLevel >= AccessLevel.Counselor && from.AccessLevel > m.AccessLevel ) + { + AddButton( 246, 36 + (line * 20), 0xFA5, 0xFA7, 11, GumpButtonType.Reply, 0 ); + AddHtml( 280, 38 + (line++ * 20), 100, 20, Color( "Skills browser", LabelColor32 ), false, false ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/ConfirmHouseResize.cs b/Scripts/Gumps/ConfirmHouseResize.cs new file mode 100644 index 0000000..c626ba9 --- /dev/null +++ b/Scripts/Gumps/ConfirmHouseResize.cs @@ -0,0 +1,154 @@ +using System; +using Server; +using Server.Items; +using Server.Multis; +using Server.Multis.Deeds; +using Server.Network; +using Server.Mobiles; + +namespace Server.Gumps +{ + public class ConfirmHouseResize : Gump + { + private Mobile m_Mobile; + private BaseHouse m_House; + private TempNoHousingRegion m_Temp; + + public ConfirmHouseResize( Mobile mobile, BaseHouse house ) : base( 110, 100 ) + { + m_Mobile = mobile; + m_House = house; + + mobile.CloseGump( typeof( ConfirmHouseResize ) ); + + Closable = false; + + AddPage( 0 ); + + AddBackground( 0, 0, 420, 280, 0x13BE ); + AddImageTiled( 10, 10, 400, 20, 0xA40 ); + AddAlphaRegion( 10, 10, 400, 20 ); + AddHtmlLocalized( 10, 10, 400, 20, 1060635, 0x7800, false, false ); //
WARNING
+ AddImageTiled( 10, 40, 400, 200, 0xA40 ); + AddAlphaRegion( 10, 40, 400, 200 ); + + /* You are attempting to resize your house. You will be refunded the house's + value directly to your inn chest. All items in the house will *remain behind* + and can be *freely picked up by anyone*. Once the house is demolished, however, + only this account will be able to place on the land for one hour. This *will* + circumvent the normal 7-day waiting period (if it applies to you). This action + will not un-condemn any other houses on your account. If you have other, + grandfathered houses, this action *WILL* condemn them. Are you sure you wish + to continue?*/ + AddHtmlLocalized( 10, 40, 400, 200, 1080196, 0x7F00, false, true ); + + AddImageTiled( 10, 250, 400, 20, 0xA40 ); + AddAlphaRegion( 10, 250, 400, 20 ); + AddButton( 10, 250, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); + AddButton( 210, 250, 0xFA5, 0xFA7, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 40, 250, 170, 20, 1011036, 0x7FFF, false, false ); // OKAY + AddHtmlLocalized( 240, 250, 170, 20, 1011012, 0x7FFF, false, false ); // CANCEL + + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( info.ButtonID == 1 && !m_House.Deleted ) + { + if ( m_House.IsOwner( m_Mobile ) ) + { + if ( m_House.MovingCrate != null || m_House.InternalizedVendors.Count > 0 ) + { + m_Mobile.SendLocalizedMessage( 1080455 ); // You can not resize your house at this time. Please remove all items fom the moving crate and try again. + return; + } + else if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null ) + { + m_Mobile.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside. + return; + } + /*else if ( m_House.PlayerVendors.Count > 0 ) + { + m_Mobile.SendLocalizedMessage( 503236 ); // You need to collect your vendor's belongings before moving. + return; + }*/ + else if ( m_House.HasRentedVendors && m_House.VendorInventories.Count > 0 ) + { + m_Mobile.SendLocalizedMessage( 1062679 ); // You cannot do that that while you still have contract vendors or unclaimed contract vendor inventory in your house. + return; + } + else if ( m_House.HasRentedVendors ) + { + m_Mobile.SendLocalizedMessage( 1062680 ); // You cannot do that that while you still have contract vendors in your house. + return; + } + else if ( m_House.VendorInventories.Count > 0 ) + { + m_Mobile.SendLocalizedMessage( 1062681 ); // You cannot do that that while you still have unclaimed contract vendor inventory in your house. + return; + } + + + if ( m_Mobile.AccessLevel >= AccessLevel.GameMaster ) + { + m_Mobile.SendMessage( "You do not get a refund for your house as you are not a player" ); + m_House.RemoveKeys(m_Mobile); + m_House.Delete(); + } + else + { + Item toGive = null; + + if ( m_House.IsAosRules ) + { + if ( m_House.Price > 0 ) + toGive = new GoldDeed( m_House.Price ); + else + toGive = m_House.GetDeed(); + } + else + { + toGive = m_House.GetDeed(); + + if ( toGive == null && m_House.Price > 0 ) + toGive = new GoldDeed( m_House.Price ); + } + + if ( toGive != null ) + { + InnBox box = m_Mobile.InnBox; + + if ( box.TryDropItem( m_Mobile, toGive, false ) ) + { + if ( toGive is GoldDeed ) + m_Mobile.SendLocalizedMessage( 1060397, ( (GoldDeed)toGive ).Worth.ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + + m_House.RemoveKeys( m_Mobile ); + new TempNoHousingRegion( m_House, m_Mobile ); + m_House.Delete(); + } + else + { + toGive.Delete(); + m_Mobile.SendLocalizedMessage( 500390 ); // Your inn chest is full. + } + } + else + { + m_Mobile.SendMessage( "Unable to refund house." ); + } + } + } + else + { + m_Mobile.SendLocalizedMessage( 501320 ); // Only the house owner may do this. + } + } + else if ( info.ButtonID == 0 ) + { + m_Mobile.CloseGump( typeof( ConfirmHouseResize ) ); + m_Mobile.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Customize, m_Mobile, m_House ) ); + } + } + } +} diff --git a/Scripts/Gumps/ConfirmReleaseGump.cs b/Scripts/Gumps/ConfirmReleaseGump.cs new file mode 100644 index 0000000..4d64f7f --- /dev/null +++ b/Scripts/Gumps/ConfirmReleaseGump.cs @@ -0,0 +1,48 @@ +using System; +using Server; +using Server.Mobiles; + +namespace Server.Gumps +{ + public class ConfirmReleaseGump : Gump + { + private Mobile m_From; + private BaseCreature m_Pet; + + public ConfirmReleaseGump( Mobile from, BaseCreature pet ) : base( 50, 50 ) + { + m_From = from; + m_Pet = pet; + + m_From.CloseGump( typeof( ConfirmReleaseGump ) ); + + AddPage( 0 ); + + AddBackground( 0, 0, 270, 120, 5054 ); + AddBackground( 10, 10, 250, 100, 3000 ); + + AddHtmlLocalized( 20, 15, 230, 60, 1046257, true, true ); // Are you sure you want to release your pet? + + AddButton( 20, 80, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 80, 75, 20, 1011011, false, false ); // CONTINUE + + AddButton( 135, 80, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 170, 80, 75, 20, 1011012, false, false ); // CANCEL + } + + public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 2 ) + { + if ( !m_Pet.Deleted && m_Pet.Controlled && m_From == m_Pet.ControlMaster && m_From.CheckAlive() /*&& m_Pet.CheckControlChance( m_From )*/ ) + { + if ( m_Pet.Map == m_From.Map && m_Pet.InRange( m_From, 14 ) ) + { + m_Pet.ControlTarget = null; + m_Pet.ControlOrder = OrderType.Release; + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Go/ChildNode.cs b/Scripts/Gumps/Go/ChildNode.cs new file mode 100644 index 0000000..8093985 --- /dev/null +++ b/Scripts/Gumps/Go/ChildNode.cs @@ -0,0 +1,81 @@ +using System; +using System.Xml; +using Server; + +namespace Server.Gumps +{ + public class ChildNode + { + private ParentNode m_Parent; + + private string m_Name; + private Point3D m_Location; + private Map m_Map; + + public ChildNode( XmlTextReader xml, ParentNode parent ) + { + m_Parent = parent; + + Parse( xml ); + } + + private void Parse( XmlTextReader xml ) + { + if ( xml.MoveToAttribute( "name" ) ) + m_Name = xml.Value; + else + m_Name = "empty"; + + int x = 0, y = 0, z = 0; m_Map = Map.Britannia; + + if ( xml.MoveToAttribute( "x" ) ) + x = Utility.ToInt32( xml.Value ); + + if ( xml.MoveToAttribute( "y" ) ) + y = Utility.ToInt32( xml.Value ); + + if ( xml.MoveToAttribute( "z" ) ) + z = Utility.ToInt32( xml.Value ); + + if ( xml.MoveToAttribute( "map" ) ) + { + if ( xml.Value == "Britannia" ){ m_Map = Map.Britannia; } + else if ( xml.Value == "Underworld" ){ m_Map = Map.Underworld; } + } + + m_Location = new Point3D( x, y, z ); + } + + public ParentNode Parent + { + get + { + return m_Parent; + } + } + + public string Name + { + get + { + return m_Name; + } + } + + public Point3D Location + { + get + { + return m_Location; + } + } + + public Map World + { + get + { + return m_Map; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Go/GoGump.cs b/Scripts/Gumps/Go/GoGump.cs new file mode 100644 index 0000000..1c8e7f4 --- /dev/null +++ b/Scripts/Gumps/Go/GoGump.cs @@ -0,0 +1,235 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; + +namespace Server.Gumps +{ + public class GoGump : Gump + { + public static readonly LocationTree Listing = new LocationTree( "Config/go.xml" ); + + public static bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static bool PrevLabel = false, NextLabel = false; + + private static readonly int PrevLabelOffsetX = PrevWidth + 1; + private static readonly int PrevLabelOffsetY = 0; + + private static readonly int NextLabelOffsetX = -29; + private static readonly int NextLabelOffsetY = 0; + + private static readonly int EntryWidth = 180; + private static readonly int EntryCount = 15; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (EntryCount + 1)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + public static void DisplayTo( Mobile from ) + { + LocationTree tree = Listing; + + ParentNode branch = null; + tree.LastBranch.TryGetValue( from, out branch ); + + if ( branch == null ) + branch = tree.Root; + + if ( branch != null ) + from.SendGump( new GoGump( 0, from, tree, branch ) ); + } + + private LocationTree m_Tree; + private ParentNode m_Node; + private int m_Page; + + private GoGump( int page, Mobile from, LocationTree tree, ParentNode node ) : base( 50, 50 ) + { + from.CloseGump( typeof( GoGump ) ); + + tree.LastBranch[from] = node; + + m_Page = page; + m_Tree = tree; + m_Node = node; + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + int count = node.Children.Length - (page * EntryCount); + + if ( count < 0 ) + count = 0; + else if ( count > EntryCount ) + count = EntryCount; + + int totalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (count + 1)); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BorderSize + totalHeight + BorderSize, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), totalHeight, OffsetGumpID ); + + if ( OldStyle ) + AddImageTiled( x, y, TotalWidth - (OffsetSize * 3) - SetWidth, EntryHeight, HeaderGumpID ); + else + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + if ( node.Parent != null ) + { + AddButton( x + PrevOffsetX, y + PrevOffsetY, PrevButtonID1, PrevButtonID2, 1, GumpButtonType.Reply, 0 ); + + if ( PrevLabel ) + AddLabel( x + PrevLabelOffsetX, y + PrevLabelOffsetY, TextHue, "Previous" ); + } + + x += PrevWidth + OffsetSize; + + int emptyWidth = TotalWidth - (PrevWidth * 2) - NextWidth - (OffsetSize * 5) - (OldStyle ? SetWidth + OffsetSize : 0); + + if ( !OldStyle ) + AddImageTiled( x - (OldStyle ? OffsetSize : 0), y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0), EntryHeight, EntryGumpID ); + + AddHtml( x + TextOffsetX, y, emptyWidth - TextOffsetX, EntryHeight, String.Format( "
{0}
", node.Name ), false, false ); + + x += emptyWidth + OffsetSize; + + if ( OldStyle ) + AddImageTiled( x, y, TotalWidth - (OffsetSize * 3) - SetWidth, EntryHeight, HeaderGumpID ); + else + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + if ( page > 0 ) + { + AddButton( x + PrevOffsetX, y + PrevOffsetY, PrevButtonID1, PrevButtonID2, 2, GumpButtonType.Reply, 0 ); + + if ( PrevLabel ) + AddLabel( x + PrevLabelOffsetX, y + PrevLabelOffsetY, TextHue, "Previous" ); + } + + x += PrevWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x, y, NextWidth, EntryHeight, HeaderGumpID ); + + if ( (page + 1) * EntryCount < node.Children.Length ) + { + AddButton( x + NextOffsetX, y + NextOffsetY, NextButtonID1, NextButtonID2, 3, GumpButtonType.Reply, 1 ); + + if ( NextLabel ) + AddLabel( x + NextLabelOffsetX, y + NextLabelOffsetY, TextHue, "Next" ); + } + + for ( int i = 0, index = page * EntryCount; i < EntryCount && index < node.Children.Length; ++i, ++index ) + { + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + object child = node.Children[index]; + string name = ""; + + if ( child is ParentNode ) + name = ((ParentNode)child).Name; + else if ( child is ChildNode ) + name = ((ChildNode)child).Name; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, name ); + + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, index + 4, GumpButtonType.Reply, 0 ); + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + + switch ( info.ButtonID ) + { + case 1: + { + if ( m_Node.Parent != null ) + from.SendGump( new GoGump( 0, from, m_Tree, m_Node.Parent ) ); + + break; + } + case 2: + { + if ( m_Page > 0 ) + from.SendGump( new GoGump( m_Page - 1, from, m_Tree, m_Node ) ); + + break; + } + case 3: + { + if ( (m_Page + 1) * EntryCount < m_Node.Children.Length ) + from.SendGump( new GoGump( m_Page + 1, from, m_Tree, m_Node ) ); + + break; + } + default: + { + int index = info.ButtonID - 4; + + if ( index >= 0 && index < m_Node.Children.Length ) + { + object o = m_Node.Children[index]; + + if ( o is ParentNode ) + { + from.SendGump( new GoGump( 0, from, m_Tree, (ParentNode)o ) ); + } + else + { + ChildNode n = (ChildNode)o; + + from.MoveToWorld( n.Location, n.World ); + } + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Go/LocationTree.cs b/Scripts/Gumps/Go/LocationTree.cs new file mode 100644 index 0000000..c9b67eb --- /dev/null +++ b/Scripts/Gumps/Go/LocationTree.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using Server; + +namespace Server.Gumps +{ + public class LocationTree + { + private ParentNode m_Root; + private Dictionary m_LastBranch; + + public LocationTree( string fileName ) + { + m_LastBranch = new Dictionary(); + + string path = Path.Combine( "Data/", fileName ); + + if ( File.Exists( path ) ) + { + XmlTextReader xml = new XmlTextReader( new StreamReader( path ) ); + + xml.WhitespaceHandling = WhitespaceHandling.None; + + m_Root = Parse( xml ); + + xml.Close(); + } + } + + public Dictionary LastBranch + { + get + { + return m_LastBranch; + } + } + + public ParentNode Root + { + get + { + return m_Root; + } + } + + private ParentNode Parse( XmlTextReader xml ) + { + xml.Read(); + xml.Read(); + xml.Read(); + + return new ParentNode( xml, null ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Go/ParentNode.cs b/Scripts/Gumps/Go/ParentNode.cs new file mode 100644 index 0000000..31c7710 --- /dev/null +++ b/Scripts/Gumps/Go/ParentNode.cs @@ -0,0 +1,79 @@ +using System; +using System.Xml; +using System.Collections; +using Server; + +namespace Server.Gumps +{ + public class ParentNode + { + private ParentNode m_Parent; + private object[] m_Children; + + private string m_Name; + + public ParentNode( XmlTextReader xml, ParentNode parent ) + { + m_Parent = parent; + + Parse( xml ); + } + + private void Parse( XmlTextReader xml ) + { + if ( xml.MoveToAttribute( "name" ) ) + m_Name = xml.Value; + else + m_Name = "empty"; + + if ( xml.IsEmptyElement ) + { + m_Children = new object[0]; + } + else + { + ArrayList children = new ArrayList(); + + while ( xml.Read() && xml.NodeType == XmlNodeType.Element ) + { + if ( xml.Name == "child" ) + { + ChildNode n = new ChildNode( xml, this ); + + children.Add( n ); + } + else + { + children.Add( new ParentNode( xml, this ) ); + } + } + + m_Children = children.ToArray(); + } + } + + public ParentNode Parent + { + get + { + return m_Parent; + } + } + + public object[] Children + { + get + { + return m_Children; + } + } + + public string Name + { + get + { + return m_Name; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/HouseDemolishGump.cs b/Scripts/Gumps/HouseDemolishGump.cs new file mode 100644 index 0000000..f03ced1 --- /dev/null +++ b/Scripts/Gumps/HouseDemolishGump.cs @@ -0,0 +1,148 @@ +using System; +using Server; +using Server.Items; +using Server.Multis; +using Server.Multis.Deeds; +using Server.Network; +using Server.Mobiles; + +namespace Server.Gumps +{ + public class HouseDemolishGump : Gump + { + private Mobile m_Mobile; + private BaseHouse m_House; + + public HouseDemolishGump( Mobile mobile, BaseHouse house ) : base( 110, 100 ) + { + m_Mobile = mobile; + m_House = house; + + mobile.CloseGump( typeof( HouseDemolishGump ) ); + + Closable = false; + + AddPage( 0 ); + + AddBackground( 0, 0, 420, 280, 5054 ); + + AddImageTiled( 10, 10, 400, 20, 2624 ); + AddAlphaRegion( 10, 10, 400, 20 ); + + AddHtmlLocalized( 10, 10, 400, 20, 1060635, 30720, false, false ); //
WARNING
+ + AddImageTiled( 10, 40, 400, 200, 2624 ); + AddAlphaRegion( 10, 40, 400, 200 ); + + AddHtmlLocalized( 10, 40, 400, 200, 1061795, 32512, false, true ); /* You are about to demolish your house. + * You will be refunded the house's value directly to your inn chest. + * All items in the house will remain behind and can be freely picked up by anyone. + * Once the house is demolished, anyone can attempt to place a new house on the vacant land. + * This action will not un-condemn any other houses on your account, nor will it end your 7-day waiting period (if it applies to you). + * Are you sure you wish to continue? + */ + + AddImageTiled( 10, 250, 400, 20, 2624 ); + AddAlphaRegion( 10, 250, 400, 20 ); + + AddButton( 10, 250, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 40, 250, 170, 20, 1011036, 32767, false, false ); // OKAY + + AddButton( 210, 250, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 240, 250, 170, 20, 1011012, 32767, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( info.ButtonID == 1 && !m_House.Deleted ) + { + if ( m_House.IsOwner( m_Mobile ) ) + { + if ( m_House.MovingCrate != null || m_House.InternalizedVendors.Count > 0 ) + { + return; + } + else if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null ) + { + m_Mobile.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside. + return; + } + /*else if ( m_House.PlayerVendors.Count > 0 ) + { + m_Mobile.SendLocalizedMessage( 503236 ); // You need to collect your vendor's belongings before moving. + return; + }*/ + else if ( m_House.HasRentedVendors && m_House.VendorInventories.Count > 0 ) + { + m_Mobile.SendLocalizedMessage( 1062679 ); // You cannot do that that while you still have contract vendors or unclaimed contract vendor inventory in your house. + return; + } + else if ( m_House.HasRentedVendors ) + { + m_Mobile.SendLocalizedMessage( 1062680 ); // You cannot do that that while you still have contract vendors in your house. + return; + } + else if ( m_House.VendorInventories.Count > 0 ) + { + m_Mobile.SendLocalizedMessage( 1062681 ); // You cannot do that that while you still have unclaimed contract vendor inventory in your house. + return; + } + + + if ( m_Mobile.AccessLevel >= AccessLevel.GameMaster ) + { + m_Mobile.SendMessage( "You do not get a refund for your house as you are not a player" ); + m_House.RemoveKeys(m_Mobile); + m_House.Delete(); + } + else + { + Item toGive = null; + + if ( m_House.IsAosRules ) + { + if ( m_House.Price > 0 ) + toGive = new GoldDeed( m_House.Price ); + else + toGive = m_House.GetDeed(); + } + else + { + toGive = m_House.GetDeed(); + + if ( toGive == null && m_House.Price > 0 ) + toGive = new GoldDeed( m_House.Price ); + } + + if ( toGive != null ) + { + InnBox box = m_Mobile.InnBox; + + if ( box.TryDropItem( m_Mobile, toGive, false ) ) + { + if ( toGive is GoldDeed ) + m_Mobile.SendLocalizedMessage( 1060397, ( (GoldDeed)toGive ).Worth.ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + + m_House.RemoveKeys( m_Mobile ); + m_House.Delete(); + } + else + { + toGive.Delete(); + m_Mobile.SendLocalizedMessage( 500390 ); // Your inn chest is full. + } + } + else + { + m_Mobile.SendMessage( "Unable to refund house." ); + } + } + } + else + { + m_Mobile.SendLocalizedMessage( 501320 ); // Only the house owner may do this. + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/HouseGump.cs b/Scripts/Gumps/HouseGump.cs new file mode 100644 index 0000000..768d08d --- /dev/null +++ b/Scripts/Gumps/HouseGump.cs @@ -0,0 +1,755 @@ +using System; +using System.Reflection; +using System.Collections; +using Server.Network; +using Server.Prompts; +using Server.Multis; +using Server.Multis.Deeds; +using Server.Items; + +namespace Server.Gumps +{ + public class HouseListGump : Gump + { + private BaseHouse m_House; + + public HouseListGump( int number, ArrayList list, BaseHouse house, bool accountOf ) : base( 20, 30 ) + { + if ( house.Deleted ) + return; + + m_House = house; + + AddPage( 0 ); + + AddBackground( 0, 0, 420, 430, 5054 ); + AddBackground( 10, 10, 400, 410, 3000 ); + + AddButton( 20, 388, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 388, 300, 20, 1011104, false, false ); // Return to previous menu + + AddHtmlLocalized( 20, 20, 350, 20, number, false, false ); + + if ( list != null ) + { + for ( int i = 0; i < list.Count; ++i ) + { + if ( (i % 16) == 0 ) + { + if ( i != 0 ) + { + // Next button + AddButton( 370, 20, 4005, 4007, 0, GumpButtonType.Page, (i / 16) + 1 ); + } + + AddPage( (i / 16) + 1 ); + + if ( i != 0 ) + { + // Previous button + AddButton( 340, 20, 4014, 4016, 0, GumpButtonType.Page, i / 16 ); + } + } + + Mobile m = (Mobile)list[i]; + + string name; + + if ( m == null || (name = m.Name) == null || (name = name.Trim()).Length <= 0 ) + continue; + + AddLabel( 55, 55 + ((i % 16) * 20), 0, accountOf && m.Player && m.Account != null ? String.Format( "Account of {0}", name ) : name ); + } + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( m_House.Deleted ) + return; + + Mobile from = state.Mobile; + + from.SendGump( new HouseGump( from, m_House ) ); + } + } + + public class HouseRemoveGump : Gump + { + private BaseHouse m_House; + private ArrayList m_List, m_Copy; + private int m_Number; + private bool m_AccountOf; + + public HouseRemoveGump( int number, ArrayList list, BaseHouse house, bool accountOf ) : base( 20, 30 ) + { + if ( house.Deleted ) + return; + + m_House = house; + m_List = list; + m_Number = number; + m_AccountOf = accountOf; + + AddPage( 0 ); + + AddBackground( 0, 0, 420, 430, 5054 ); + AddBackground( 10, 10, 400, 410, 3000 ); + + AddButton( 20, 388, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 388, 300, 20, 1011104, false, false ); // Return to previous menu + + AddButton( 20, 365, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 55, 365, 300, 20, 1011270, false, false ); // Remove now! + + AddHtmlLocalized( 20, 20, 350, 20, number, false, false ); + + if ( list != null ) + { + m_Copy = new ArrayList( list ); + + for ( int i = 0; i < list.Count; ++i ) + { + if ( (i % 15) == 0 ) + { + if ( i != 0 ) + { + // Next button + AddButton( 370, 20, 4005, 4007, 0, GumpButtonType.Page, (i / 15) + 1 ); + } + + AddPage( (i / 15) + 1 ); + + if ( i != 0 ) + { + // Previous button + AddButton( 340, 20, 4014, 4016, 0, GumpButtonType.Page, i / 15 ); + } + } + + Mobile m = (Mobile)list[i]; + + string name; + + if ( m == null || (name = m.Name) == null || (name = name.Trim()).Length <= 0 ) + continue; + + AddCheck( 34, 52 + ((i % 15) * 20), 0xD2, 0xD3, false, i ); + AddLabel( 55, 52 + ((i % 15) * 20), 0, accountOf && m.Player && m.Account != null ? String.Format( "Account of {0}", name ) : name ); + } + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( m_House.Deleted ) + return; + + Mobile from = state.Mobile; + + if ( m_List != null && info.ButtonID == 1 ) // Remove now + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + for ( int i = 0; i < switches.Length; ++i ) + { + int index = switches[i]; + + if ( index >= 0 && index < m_Copy.Count ) + m_List.Remove( m_Copy[index] ); + } + + if ( m_List.Count > 0 ) + { + from.CloseGump( typeof( HouseGump ) ); + from.CloseGump( typeof( HouseListGump ) ); + from.CloseGump( typeof( HouseRemoveGump ) ); + from.SendGump( new HouseRemoveGump( m_Number, m_List, m_House, m_AccountOf ) ); + return; + } + } + } + + from.SendGump( new HouseGump( from, m_House ) ); + } + } + + public class HouseGump : Gump + { + private BaseHouse m_House; + + private ArrayList Wrap( string value ) + { + if ( value == null || (value = value.Trim()).Length <= 0 ) + return null; + + string[] values = value.Split( ' ' ); + ArrayList list = new ArrayList(); + string current = ""; + + for ( int i = 0; i < values.Length; ++i ) + { + string val = values[i]; + + string v = current.Length == 0 ? val : current + ' ' + val; + + if ( v.Length < 10 ) + { + current = v; + } + else if ( v.Length == 10 ) + { + list.Add( v ); + + if ( list.Count == 6 ) + return list; + + current = ""; + } + else if ( val.Length <= 10 ) + { + list.Add( current ); + + if ( list.Count == 6 ) + return list; + + current = val; + } + else + { + while ( v.Length >= 10 ) + { + list.Add( v.Substring( 0, 10 ) ); + + if ( list.Count == 6 ) + return list; + + v = v.Substring( 10 ); + } + + current = v; + } + } + + if ( current.Length > 0 ) + list.Add( current ); + + return list; + } + + public HouseGump( Mobile from, BaseHouse house ) : base( 20, 30 ) + { + if ( house.Deleted ) + return; + + m_House = house; + + from.CloseGump( typeof( HouseGump ) ); + from.CloseGump( typeof( HouseListGump ) ); + from.CloseGump( typeof( HouseRemoveGump ) ); + + bool isCombatRestricted = house.IsCombatRestricted( from ); + + bool isOwner = m_House.IsOwner( from ); + bool isCoOwner = isOwner || m_House.IsCoOwner( from ); + bool isFriend = isCoOwner || m_House.IsFriend( from ); + + if ( isCombatRestricted ) + isFriend = isCoOwner = isOwner = false; + + AddPage( 0 ); + + if ( isFriend ) + { + AddBackground( 0, 0, 420, 430, 5054 ); + AddBackground( 10, 10, 400,410, 3000 ); + } + + AddImage( 130, 0, 100 ); + + if ( m_House.Sign != null ) + { + ArrayList lines = Wrap( m_House.Sign.GetName() ); + + if ( lines != null ) + { + for ( int i = 0, y = (101 - (lines.Count * 14)) / 2; i < lines.Count; ++i, y += 14 ) + { + string s = (string)lines[i]; + + AddLabel( 130 + ((143 - (s.Length * 8)) / 2), y, 0, s ); + } + } + } + + if ( !isFriend ) + return; + + AddHtmlLocalized( 55, 103, 75, 20, 1011233, false, false ); // INFO + AddButton( 20, 103, 4005, 4007, 0, GumpButtonType.Page, 1 ); + + AddHtmlLocalized( 170, 103, 75, 20, 1011234, false, false ); // FRIENDS + AddButton( 135, 103, 4005, 4007, 0, GumpButtonType.Page, 2 ); + + AddHtmlLocalized( 295, 103, 75, 20, 1011235, false, false ); // OPTIONS + AddButton( 260, 103, 4005, 4007, 0, GumpButtonType.Page, 3 ); + + AddHtmlLocalized( 295, 390, 75, 20, 1011441, false, false ); // EXIT + AddButton( 260, 390, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 55, 390, 200, 20, 1011236, false, false ); // Change this house's name! + AddButton( 20, 390, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + + // Info page + AddPage( 1 ); + + AddHtmlLocalized( 20, 135, 100, 20, 1011242, false, false ); // Owned by: + AddHtml( 120, 135, 100, 20, GetOwnerName(), false, false ); + + AddHtmlLocalized( 20, 170, 275, 20, 1011237, false, false ); // Number of locked down items: + AddHtml( 320, 170, 50, 20, m_House.LockDownCount.ToString(), false, false ); + + AddHtmlLocalized( 20, 190, 275, 20, 1011238, false, false ); // Maximum locked down items: + AddHtml( 320, 190, 50, 20, m_House.MaxLockDowns.ToString(), false, false ); + + AddHtmlLocalized( 20, 210, 275, 20, 1011239, false, false ); // Number of secure containers: + AddHtml( 320, 210, 50, 20, m_House.SecureCount.ToString(), false, false ); + + AddHtmlLocalized( 20, 230, 275, 20, 1011240, false, false ); // Maximum number of secure containers: + AddHtml( 320, 230, 50, 20, m_House.MaxSecures.ToString(), false, false ); + + AddHtmlLocalized( 20, 260, 400, 20, 1018032, false, false ); // This house is properly placed. + AddHtmlLocalized( 20, 280, 400, 20, 1018035, false, false ); // This house is of modern design. + + if ( m_House.Public ) + { + // TODO: Validate exact placement + AddHtmlLocalized( 20, 305, 275, 20, 1011241, false, false ); // Number of visits this building has had + AddHtml( 320, 305, 50, 20, m_House.Visits.ToString(), false, false ); + } + + // Friends page + AddPage( 2 ); + + AddHtmlLocalized( 45, 130, 150, 20, 1011266, false, false ); // List of co-owners + AddButton( 20, 130, 2714, 2715, 2, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 45, 150, 150, 20, 1011267, false, false ); // Add a co-owner + AddButton( 20, 150, 2714, 2715, 3, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 45, 170, 150, 20, 1018036, false, false ); // Remove a co-owner + AddButton( 20, 170, 2714, 2715, 4, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 45, 190, 150, 20, 1011268, false, false ); // Clear co-owner list + AddButton( 20, 190, 2714, 2715, 5, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 225, 130, 155, 20, 1011243, false, false ); // List of Friends + AddButton( 200, 130, 2714, 2715, 6, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 225, 150, 155, 20, 1011244, false, false ); // Add a Friend + AddButton( 200, 150, 2714, 2715, 7, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 225, 170, 155, 20, 1018037, false, false ); // Remove a Friend + AddButton( 200, 170, 2714, 2715, 8, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 225, 190, 155, 20, 1011245, false, false ); // Clear Friends list + AddButton( 200, 190, 2714, 2715, 9, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 120, 215, 280, 20, 1011258, false, false ); // Ban someone from the house + AddButton( 95, 215, 2714, 2715, 10, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 120, 235, 280, 20, 1011259, false, false ); // Eject someone from the house + AddButton( 95, 235, 2714, 2715, 11, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 120, 255, 280, 20, 1011260, false, false ); // View a list of banned people + AddButton( 95, 255, 2714, 2715, 12, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 120, 275, 280, 20, 1011261, false, false ); // Lift a ban + AddButton( 95, 275, 2714, 2715, 13, GumpButtonType.Reply, 0 ); + + // Options page + AddPage( 3 ); + + AddHtmlLocalized( 45, 150, 355, 30, 1011248, false, false ); // Transfer ownership of the house + AddButton( 20, 150, 2714, 2715, 14, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 45, 180, 355, 30, 1011249, false, false ); // Demolish house and get deed back + AddButton( 20, 180, 2714, 2715, 15, GumpButtonType.Reply, 0 ); + + if ( !m_House.Public ) + { + AddHtmlLocalized( 45, 210, 355, 30, 1011247, false, false ); // Change the house locks + AddButton( 20, 210, 2714, 2715, 16, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 45, 240, 350, 90, 1011253, false, false ); // Declare this building to be public. This will make your front door unlockable. + AddButton( 20, 240, 2714, 2715, 17, GumpButtonType.Reply, 0 ); + } + else + { + //AddHtmlLocalized( 45, 280, 350, 30, 1011250, false, false ); // Change the sign type + AddHtmlLocalized( 45, 210, 350, 30, 1011250, false, false ); // Change the sign type + AddButton( 20, 210, 2714, 2715, 0, GumpButtonType.Page, 4 ); + + AddHtmlLocalized( 45, 240, 350, 30, 1011252, false, false ); // Declare this building to be private. + AddButton( 20, 240, 2714, 2715, 17, GumpButtonType.Reply, 0 ); + + // Change the sign type + AddPage( 4 ); + + for ( int i = 0; i < 24; ++i ) + { + AddRadio( 53 + ((i / 4) * 50), 137 + ((i % 4) * 35), 210, 211, false, i + 1 ); + AddItem( 60 + ((i / 4) * 50), 130 + ((i % 4) * 35), 2980 + (i * 2) ); + } + + AddHtmlLocalized( 200, 305, 129, 20, 1011254, false, false ); // Guild sign choices + AddButton( 350, 305, 252, 253, 0, GumpButtonType.Page, 5 ); + + AddHtmlLocalized( 200, 340, 355, 30, 1011277, false, false ); // Okay that is fine. + AddButton( 350, 340, 4005, 4007, 18, GumpButtonType.Reply, 0 ); + + AddPage( 5 ); + + for ( int i = 0; i < 29; ++i ) + { + AddRadio( 53 + ((i / 5) * 50), 137 + ((i % 5) * 35), 210, 211, false, i + 25 ); + AddItem( 60 + ((i / 5) * 50), 130 + ((i % 5) * 35), 3028 + (i * 2) ); + } + + AddHtmlLocalized( 200, 305, 129, 20, 1011255, false, false ); // Shop sign choices + AddButton( 350, 305, 250, 251, 0, GumpButtonType.Page, 4 ); + + AddHtmlLocalized( 200, 340, 355, 30, 1011277, false, false ); // Okay that is fine. + AddButton( 350, 340, 4005, 4007, 18, GumpButtonType.Reply, 0 ); + } + } + + private string GetOwnerName() + { + Mobile m = m_House.Owner; + + if ( m == null ) + return "(unowned)"; + + string name; + + if ( (name = m.Name) == null || (name = name.Trim()).Length <= 0 ) + name = "(no name)"; + + return name; + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( m_House.Deleted ) + return; + + Mobile from = sender.Mobile; + + bool isCombatRestricted = m_House.IsCombatRestricted( from ); + + bool isOwner = m_House.IsOwner( from ); + bool isCoOwner = isOwner || m_House.IsCoOwner( from ); + bool isFriend = isCoOwner || m_House.IsFriend( from ); + + if ( isCombatRestricted ) + isFriend = isCoOwner = isOwner = false; + + if ( !isFriend || !from.Alive ) + return; + + Item sign = m_House.Sign; + + if ( sign == null || from.Map != sign.Map || !from.InRange( sign.GetWorldLocation(), 18 ) ) + return; + + switch ( info.ButtonID ) + { + case 1: // Rename sign + { + from.Prompt = new RenamePrompt( m_House ); + from.SendLocalizedMessage( 501302 ); // What dost thou wish the sign to say? + + break; + } + case 2: // List of co-owners + { + from.CloseGump( typeof( HouseGump ) ); + from.CloseGump( typeof( HouseListGump ) ); + from.CloseGump( typeof( HouseRemoveGump ) ); + from.SendGump( new HouseListGump( 1011275, m_House.CoOwners, m_House, false ) ); + + break; + } + case 3: // Add 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, m_House ); + } + else + { + from.SendLocalizedMessage( 501327 ); // Only the house owner may add Co-owners. + } + + break; + } + case 4: // Remove co-owner + { + if ( isOwner ) + { + from.CloseGump( typeof( HouseGump ) ); + from.CloseGump( typeof( HouseListGump ) ); + from.CloseGump( typeof( HouseRemoveGump ) ); + from.SendGump( new HouseRemoveGump( 1011274, m_House.CoOwners, m_House, false ) ); + } + else + { + from.SendLocalizedMessage( 501329 ); // Only the house owner may remove co-owners. + } + + break; + } + case 5: // Clear co-owners + { + if ( isOwner ) + { + if ( m_House.CoOwners != null ) + m_House.CoOwners.Clear(); + + from.SendLocalizedMessage( 501333 ); // All co-owners have been removed from this house. + } + else + { + from.SendLocalizedMessage( 501330 ); // Only the house owner may remove co-owners. + } + + break; + } + case 6: // List friends + { + from.CloseGump( typeof( HouseGump ) ); + from.CloseGump( typeof( HouseListGump ) ); + from.CloseGump( typeof( HouseRemoveGump ) ); + from.SendGump( new HouseListGump( 1011273, m_House.Friends, m_House, false ) ); + + break; + } + case 7: // Add friend + { + if ( isCoOwner ) + { + from.SendLocalizedMessage( 501317 ); // Target the person you wish to name a friend of your household. + from.Target = new HouseFriendTarget( true, m_House ); + } + else + { + from.SendLocalizedMessage( 501316 ); // Only the house owner may add friends. + } + + break; + } + case 8: // Remove friend + { + if ( isCoOwner ) + { + from.CloseGump( typeof( HouseGump ) ); + from.CloseGump( typeof( HouseListGump ) ); + from.CloseGump( typeof( HouseRemoveGump ) ); + from.SendGump( new HouseRemoveGump( 1011272, m_House.Friends, m_House, false ) ); + } + else + { + from.SendLocalizedMessage( 501318 ); // Only the house owner may remove friends. + } + + break; + } + case 9: // Clear friends + { + if ( isCoOwner ) + { + if ( m_House.Friends != null ) + m_House.Friends.Clear(); + + from.SendLocalizedMessage( 501332 ); // All friends have been removed from this house. + } + else + { + from.SendLocalizedMessage( 501319 ); // Only the house owner may remove friends. + } + + break; + } + case 10: // Ban + { + from.SendLocalizedMessage( 501325 ); // Target the individual to ban from this house. + from.Target = new HouseBanTarget( true, m_House ); + + break; + } + case 11: // Eject + { + from.SendLocalizedMessage( 501326 ); // Target the individual to eject from this house. + from.Target = new HouseKickTarget( m_House ); + + break; + } + case 12: // List bans + { + from.CloseGump( typeof( HouseGump ) ); + from.CloseGump( typeof( HouseListGump ) ); + from.CloseGump( typeof( HouseRemoveGump ) ); + from.SendGump( new HouseListGump( 1011271, m_House.Bans, m_House, true ) ); + + break; + } + case 13: // Remove ban + { + from.CloseGump( typeof( HouseGump ) ); + from.CloseGump( typeof( HouseListGump ) ); + from.CloseGump( typeof( HouseRemoveGump ) ); + from.SendGump( new HouseRemoveGump( 1011269, m_House.Bans, m_House, true ) ); + + break; + } + case 14: // Transfer ownership + { + if ( isOwner ) + { + from.SendLocalizedMessage( 501309 ); // Target the person to whom you wish to give this house. + from.Target = new HouseOwnerTarget( m_House ); + } + else + { + from.SendLocalizedMessage( 501310 ); // Only the house owner may do this. + } + + break; + } + case 15: // Demolish house + { + if ( isOwner ) + { + if ( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null ) + { + from.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside. + } + else + { + from.CloseGump( typeof( HouseDemolishGump ) ); + from.SendGump( new HouseDemolishGump( from, m_House ) ); + } + } + else + { + from.SendLocalizedMessage( 501320 ); // Only the house owner may do this. + } + + break; + } + case 16: // Change locks + { + if ( m_House.Public ) + { + from.SendLocalizedMessage( 501669 );// Public houses are always unlocked. + } + else + { + if ( isOwner ) + { + m_House.RemoveKeys( from ); + m_House.ChangeLocks( from ); + + from.SendLocalizedMessage( 501306 ); // The locks on your front door have been changed, and new master keys have been placed in your inn chest and your backpack. + } + else + { + from.SendLocalizedMessage( 501303 ); // Only the house owner may change the house locks. + } + } + + break; + } + case 17: // Declare public/private + { + if ( isOwner ) + { + if ( m_House.Public && m_House.PlayerVendors.Count > 0 ) + { + from.SendLocalizedMessage( 501887 ); // You have vendors working out of this building. It cannot be declared private until there are no vendors in place. + break; + } + + m_House.Public = !m_House.Public; + if ( !m_House.Public ) + { + m_House.ChangeLocks( from ); + + from.SendLocalizedMessage( 501888 ); // This house is now private. + from.SendLocalizedMessage( 501306 ); // The locks on your front door have been changed, and new master keys have been placed in your inn chest and your backpack. + } + else + { + m_House.RemoveKeys( from ); + m_House.RemoveLocks(); + from.SendLocalizedMessage( 501886 );//This house is now public. Friends of the house my now have vendors working out of this building. + } + } + else + { + from.SendLocalizedMessage( 501307 ); // Only the house owner may do this. + } + + break; + } + case 18: // Change type + { + if ( isOwner ) + { + if ( m_House.Public && info.Switches.Length > 0 ) + { + int index = info.Switches[0] - 1; + + if ( index >= 0 && index < 53 ) + m_House.ChangeSignType( 2980 + (index * 2) ); + } + } + else + { + from.SendLocalizedMessage( 501307 ); // Only the house owner may do this. + } + + break; + } + } + } + } +} + +namespace Server.Prompts +{ + public class RenamePrompt : Prompt + { + private BaseHouse m_House; + + public RenamePrompt( BaseHouse house ) + { + m_House = house; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( m_House.IsFriend( from ) ) + { + if ( m_House.Sign != null ) + m_House.Sign.Name = text; + + from.SendMessage( "Sign changed." ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/HouseGumpAOS.cs b/Scripts/Gumps/HouseGumpAOS.cs new file mode 100644 index 0000000..4ae8fa7 --- /dev/null +++ b/Scripts/Gumps/HouseGumpAOS.cs @@ -0,0 +1,1375 @@ +using System; +using System.Reflection; +using System.Collections; +using System.Collections.Generic; +using Server.Network; +using Server.Prompts; +using Server.Mobiles; +using Server.Multis; +using Server.Multis.Deeds; +using Server.Items; + +namespace Server.Gumps +{ + public enum HouseGumpPageAOS + { + Information, + Security, + Storage, + Customize, + Ownership, + ChangeHanger, + ChangeFoundation, + ChangeSign, + RemoveCoOwner, + ListCoOwner, + RemoveFriend, + ListFriend, + RemoveBan, + ListBan, + RemoveAccess, + ListAccess, + ChangePost, + Vendors + } + + public class HouseGumpAOS : Gump + { + private BaseHouse m_House; + private HouseGumpPageAOS m_Page; + + private const int LabelColor = 0x7FFF; + private const int SelectedColor = 0x421F; + private const int DisabledColor = 0x4210; + private const int WarningColor = 0x7E10; + + private const int LabelHue = 0x481; + private const int HighlightedLabelHue = 0x64; + + private ArrayList m_List; + + private string GetOwnerName() + { + Mobile m = m_House.Owner; + + if ( m == null || m.Deleted ) + return "(unowned)"; + + string name; + + if ( (name = m.Name) == null || (name = name.Trim()).Length <= 0 ) + name = "(no name)"; + + return name; + } + + private string GetDateTime( DateTime val ) + { + if ( val == DateTime.MinValue ) + return ""; + + return val.ToString( "yyyy'-'MM'-'dd HH':'mm':'ss" ); + } + + public void AddPageButton( int x, int y, int buttonID, int number, HouseGumpPageAOS page ) + { + bool isSelection = ( m_Page == page ); + + AddButton( x, y, isSelection ? 4006 : 4005, 4007, buttonID, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( x + 45, y, 200, 20, number, isSelection ? SelectedColor : LabelColor, false, false ); + } + + public void AddButtonLabeled( int x, int y, int buttonID, int number ) + { + AddButtonLabeled( x, y, buttonID, number, true ); + } + + public void AddButtonLabeled( int x, int y, int buttonID, int number, bool enabled ) + { + if ( enabled ) + AddButton( x, y, 4005, 4007, buttonID, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( x + 35, y, 240, 20, number, enabled ? LabelColor : DisabledColor, false, false ); + } + + public void AddList( ArrayList list, int button, bool accountOf, bool leadingStar, Mobile from ) + { + if ( list == null ) + return; + + m_List = new ArrayList( list ); + + int lastPage = 0; + int index = 0; + + for ( int i = 0; i < list.Count; ++i ) + { + int xoffset = ((index % 20) / 10) * 200; + int yoffset = (index % 10) * 20; + int page = 1 + (index / 20); + + if ( page != lastPage ) + { + if ( lastPage != 0 ) + AddButton( 40, 360, 4005, 4007, 0, GumpButtonType.Page, page ); + + AddPage( page ); + + if ( lastPage != 0 ) + AddButton( 10, 360, 4014, 4016, 0, GumpButtonType.Page, lastPage ); + + lastPage = page; + } + + + Mobile m = (Mobile)list[i]; + + string name; + int labelHue = LabelHue; + + if ( m is PlayerVendor ) + { + PlayerVendor vendor = (PlayerVendor) m; + + name = vendor.ShopName; + + if ( vendor.IsOwner( from ) ) + labelHue = HighlightedLabelHue; + } + else if ( m != null ) + { + name = m.Name; + } + else + { + continue; + } + + if ( (name = name.Trim()).Length <= 0 ) + continue; + + if ( button != -1 ) + AddButton( 10 + xoffset, 150 + yoffset, 4005, 4007, GetButtonID( button, i ), GumpButtonType.Reply, 0 ); + + if ( accountOf && m.Player && m.Account != null ) + name = "Account of " + name; + + if ( leadingStar ) + name = "* " + name; + + AddLabel( button > 0 ? 45 + xoffset : 10 + xoffset, 150 + yoffset, labelHue, name ); + ++index; + } + } + + public int GetButtonID( int type, int index ) + { + return 1 + (index * 15) + type; + } + + private static int[] m_HangerNumbers = new int[] + { + 2968, 2970, 2972, + 2974, 2976, 2978 + }; + + private static int[] m_FoundationNumbers = new int[] + { + 20, 189, 765, 65, 101 + }; + + private static int[] m_PostNumbers = new int[] + { + 9, 29, 54, 90, 147, 169, + 177, 204, 251, 257, 263, + 298, 347, 424, 441, 466, + 514, 600, 601, 602, 603, + 660, 666, 672, 898, 970, + 974, 982 + }; + + private static List _HouseSigns = new List(); + + public HouseGumpAOS( HouseGumpPageAOS page, Mobile from, BaseHouse house ) : base( 50, 40 ) + { + m_House = house; + m_Page = page; + + from.CloseGump( typeof( HouseGumpAOS ) ); + //from.CloseGump( typeof( HouseListGump ) ); + //from.CloseGump( typeof( HouseRemoveGump ) ); + + 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 = isOwner = false; + + AddPage( 0 ); + + if ( isFriend || page == HouseGumpPageAOS.Vendors ) + { + AddBackground( 0, 0, 420, page != HouseGumpPageAOS.Vendors ? 440 : 420, 5054 ); + + AddImageTiled( 10, 10, 400, 100, 2624 ); + AddAlphaRegion( 10, 10, 400, 100 ); + + AddImageTiled( 10, 120, 400, 260, 2624 ); + AddAlphaRegion( 10, 120, 400, 260 ); + + AddImageTiled( 10, 390, 400, page != HouseGumpPageAOS.Vendors ? 40 : 20, 2624 ); + AddAlphaRegion( 10, 390, 400, page != HouseGumpPageAOS.Vendors ? 40 : 20 ); + + AddButtonLabeled( 250, page != HouseGumpPageAOS.Vendors ? 410 : 390, 0, 1060675 ); // CLOSE + } + + AddImage( 10, 10, 100 ); + + if ( m_House.Sign != null ) + { + ArrayList lines = Wrap( m_House.Sign.GetName() ); + + if ( lines != null ) + { + for ( int i = 0, y = (114 - (lines.Count * 14)) / 2; i < lines.Count; ++i, y += 14 ) + { + string s = (string)lines[i]; + + AddLabel( 10 + ((160 - (s.Length * 8)) / 2), y, 0, s ); + } + } + } + + if ( page == HouseGumpPageAOS.Vendors ) + { + AddHtmlLocalized( 10, 120, 400, 20, 1062428, LabelColor, false, false ); //
SHOPS
+ + AddList( house.AvailableVendorsFor( from ), 1, false, false, from ); + return; + } + + if ( !isFriend ) + return; + + if ( house.Public ) + { + AddButtonLabeled( 10, 390, GetButtonID( 0, 0 ), 1060674 ); // Banish + AddButtonLabeled( 10, 410, GetButtonID( 0, 1 ), 1011261 ); // Lift a Ban + } + else + { + AddButtonLabeled( 10, 390, GetButtonID( 0, 2 ), 1060676 ); // Grant Access + AddButtonLabeled( 10, 410, GetButtonID( 0, 3 ), 1060677 ); // Revoke Access + } + + AddPageButton( 150, 10, GetButtonID( 1, 0 ), 1060668, HouseGumpPageAOS.Information ); + AddPageButton( 150, 30, GetButtonID( 1, 1 ), 1060669, HouseGumpPageAOS.Security ); + AddPageButton( 150, 50, GetButtonID( 1, 2 ), 1060670, HouseGumpPageAOS.Storage ); + AddPageButton( 150, 70, GetButtonID( 1, 3 ), 1060671, HouseGumpPageAOS.Customize ); + AddPageButton( 150, 90, GetButtonID( 1, 4 ), 1060672, HouseGumpPageAOS.Ownership ); + + switch ( page ) + { + case HouseGumpPageAOS.Information: + { + AddHtmlLocalized( 20, 130, 200, 20, 1011242, LabelColor, false, false ); // Owned By: + AddLabel( 210, 130, LabelHue, GetOwnerName() ); + + AddHtmlLocalized( 20, 170, 380, 20, 1018032, SelectedColor, false, false ); // This house is properly placed. + AddHtmlLocalized( 20, 190, 380, 20, 1018035, SelectedColor, false, false ); // This house is of modern design. + AddHtmlLocalized( 20, 210, 380, 20, (house is HouseFoundation) ? 1060681 : 1060680, SelectedColor, false, false ); // This is a (pre | custom)-built house. + AddHtmlLocalized( 20, 230, 380, 20, house.Public ? 1060678 : 1060679, SelectedColor, false, false ); // This house is (private | open to the public). + + switch ( house.DecayType ) + { + case DecayType.Ageless: + case DecayType.AutoRefresh: + { + AddHtmlLocalized( 20, 250, 380, 20, 1062209, SelectedColor, false, false ); // This house is Automatically refreshed. + break; + } + case DecayType.ManualRefresh: + { + AddHtmlLocalized( 20, 250, 380, 20, 1062208, SelectedColor, false, false ); // This house is Grandfathered. + break; + } + case DecayType.Condemned: + { + AddHtmlLocalized( 20, 250, 380, 20, 1062207, WarningColor, false, false ); // This house is Condemned. + break; + } + } + + AddHtmlLocalized( 20, 290, 200, 20, 1060692, SelectedColor, false, false ); // Built On: + AddLabel( 250, 290, LabelHue, GetDateTime( house.BuiltOn ) ); + + AddHtmlLocalized( 20, 310, 200, 20, 1060693, SelectedColor, false, false ); // Last Traded: + AddLabel( 250, 310, LabelHue, GetDateTime( house.LastTraded ) ); + + AddHtmlLocalized( 20, 330, 200, 20, 1061793, SelectedColor, false, false ); // House Value + AddLabel( 250, 330, LabelHue, house.Price.ToString() ); + + AddHtmlLocalized( 20, 360, 300, 20, 1011241, SelectedColor, false, false ); // Number of visits this building has had: + AddLabel( 350, 360, LabelHue, house.Visits.ToString() ); + + break; + } + case HouseGumpPageAOS.Security: + { + AddButtonLabeled( 10, 130, GetButtonID( 3, 0 ), 1011266, isCoOwner ); // View Co-Owner List + AddButtonLabeled( 10, 150, GetButtonID( 3, 1 ), 1011267, isOwner ); // Add a Co-Owner + AddButtonLabeled( 10, 170, GetButtonID( 3, 2 ), 1018036, isOwner ); // Remove a Co-Owner + AddButtonLabeled( 10, 190, GetButtonID( 3, 3 ), 1011268, isOwner ); // Clear Co-Owner List + + AddButtonLabeled( 10, 220, GetButtonID( 3, 4 ), 1011243 ); // View Friends List + AddButtonLabeled( 10, 240, GetButtonID( 3, 5 ), 1011244, isCoOwner ); // Add a Friend + AddButtonLabeled( 10, 260, GetButtonID( 3, 6 ), 1018037, isCoOwner ); // Remove a Friend + AddButtonLabeled( 10, 280, GetButtonID( 3, 7 ), 1011245, isCoOwner ); // Clear Friend List + + if ( house.Public ) + { + AddButtonLabeled( 10, 310, GetButtonID( 3, 8 ), 1011260 ); // View Ban List + AddButtonLabeled( 10, 330, GetButtonID( 3, 9 ), 1060698 ); // Clear Ban List + + AddButtonLabeled( 210, 130, GetButtonID( 3, 12 ), 1060695, isOwner ); // Change to Private + + AddHtmlLocalized( 245, 150, 240, 20, 1060694, SelectedColor, false, false ); // Change to Public + } + else + { + AddButtonLabeled( 10, 310, GetButtonID( 3, 10 ), 1060699 ); // View Access List + AddButtonLabeled( 10, 330, GetButtonID( 3, 11 ), 1060700 ); // Clear Access List + + AddHtmlLocalized( 245, 130, 240, 20, 1060695, SelectedColor, false, false ); // Change to Private + + AddButtonLabeled( 210, 150, GetButtonID( 3, 13 ), 1060694, isOwner ); // Change to Public + } + + break; + } + case HouseGumpPageAOS.Storage: + { + AddHtmlLocalized( 10, 130, 400, 20, 1060682, LabelColor, false, false ); //
HOUSE STORAGE SUMMARY
+ + // This is not as OSI; storage changes not yet implemented + + /*AddHtmlLocalized( 10, 170, 275, 20, 1011237, LabelColor, false, false ); // Number of locked down items: + AddLabel( 310, 170, LabelHue, m_House.LockDownCount.ToString() ); + + AddHtmlLocalized( 10, 190, 275, 20, 1011238, LabelColor, false, false ); // Maximum locked down items: + AddLabel( 310, 190, LabelHue, m_House.MaxLockDowns.ToString() ); + + AddHtmlLocalized( 10, 210, 275, 20, 1011239, LabelColor, false, false ); // Number of secure containers: + AddLabel( 310, 210, LabelHue, m_House.SecureCount.ToString() ); + + AddHtmlLocalized( 10, 230, 275, 20, 1011240, LabelColor, false, false ); // Maximum number of secure containers: + AddLabel( 310, 230, LabelHue, m_House.MaxSecures.ToString() );*/ + + int fromSecures, fromVendors, fromLockdowns, fromMovingCrate; + + int maxSecures = house.GetAosMaxSecures(); + int curSecures = house.GetAosCurSecures( out fromSecures, out fromVendors, out fromLockdowns, out fromMovingCrate ); + + int maxLockdowns = house.GetAosMaxLockdowns(); + int curLockdowns = house.GetAosCurLockdowns(); + + int bonusStorage = (int)((house.BonusStorageScalar * 100)-100); + + if( bonusStorage > 0 ) + { + AddHtmlLocalized( 10, 150, 300, 20, 1072519, LabelColor, false, false ); // Increased Storage + AddLabel( 310, 150, LabelHue, String.Format( "{0}%", bonusStorage ) ); + } + + AddHtmlLocalized( 10, 170, 300, 20, 1060683, LabelColor, false, false ); // Maximum Secure Storage + AddLabel( 310, 170, LabelHue, maxSecures.ToString() ); + + AddHtmlLocalized( 10, 190, 300, 20, 1060685, LabelColor, false, false ); // Used by Moving Crate + AddLabel( 310, 190, LabelHue, fromMovingCrate.ToString() ); + + AddHtmlLocalized( 10, 210, 300, 20, 1060686, LabelColor, false, false ); // Used by Lockdowns + AddLabel( 310, 210, LabelHue, fromLockdowns.ToString() ); + + if ( BaseHouse.NewVendorSystem ) + { + AddHtmlLocalized( 10, 230, 300, 20, 1060688, LabelColor, false, false ); // Used by Secure Containers + AddLabel( 310, 230, LabelHue, fromSecures.ToString() ); + + AddHtmlLocalized( 10, 250, 300, 20, 1060689, LabelColor, false, false ); // Available Storage + AddLabel( 310, 250, LabelHue, Math.Max( maxSecures - curSecures, 0 ).ToString() ); + + AddHtmlLocalized( 10, 290, 300, 20, 1060690, LabelColor, false, false ); // Maximum Lockdowns + AddLabel( 310, 290, LabelHue, maxLockdowns.ToString() ); + + AddHtmlLocalized( 10, 310, 300, 20, 1060691, LabelColor, false, false ); // Available Lockdowns + AddLabel( 310, 310, LabelHue, Math.Max( maxLockdowns - curLockdowns, 0 ).ToString() ); + + int maxVendors = house.GetNewVendorSystemMaxVendors(); + int vendors = house.PlayerVendors.Count + house.VendorRentalContracts.Count; + + AddHtmlLocalized( 10, 350, 300, 20, 1062391, LabelColor, false, false ); // Vendor Count + AddLabel( 310, 350, LabelHue, vendors.ToString() + " / " + maxVendors.ToString() ); + } + else + { + AddHtmlLocalized( 10, 230, 300, 20, 1060687, LabelColor, false, false ); // Used by Vendors + AddLabel( 310, 230, LabelHue, fromVendors.ToString() ); + + AddHtmlLocalized( 10, 250, 300, 20, 1060688, LabelColor, false, false ); // Used by Secure Containers + AddLabel( 310, 250, LabelHue, fromSecures.ToString() ); + + AddHtmlLocalized( 10, 270, 300, 20, 1060689, LabelColor, false, false ); // Available Storage + AddLabel( 310, 270, LabelHue, Math.Max( maxSecures - curSecures, 0 ).ToString() ); + + AddHtmlLocalized( 10, 330, 300, 20, 1060690, LabelColor, false, false ); // Maximum Lockdowns + AddLabel( 310, 330, LabelHue, maxLockdowns.ToString() ); + + AddHtmlLocalized( 10, 350, 300, 20, 1060691, LabelColor, false, false ); // Available Lockdowns + AddLabel( 310, 350, LabelHue, Math.Max( maxLockdowns - curLockdowns, 0 ).ToString() ); + } + + break; + } + case HouseGumpPageAOS.Customize: + { + AddButtonLabeled( 10, 120, GetButtonID( 5, 2 ), 1060760, isOwner && house.MovingCrate != null ); // Relocate Moving Crate + AddButtonLabeled( 10, 140, GetButtonID( 5, 3 ), 1060761, isOwner && house.Public ); // Change House Sign + AddButtonLabeled( 10, 160, GetButtonID( 5, 7 ), 1060764, isCoOwner ); // Rename House + + break; + } + case HouseGumpPageAOS.Ownership: + { + AddButtonLabeled( 10, 130, GetButtonID( 6, 0 ), 1061794, isOwner && house.MovingCrate == null && house.InternalizedVendors.Count == 0 ); // Demolish House + AddButtonLabeled( 10, 150, GetButtonID( 6, 1 ), 1061797, isOwner ); // Trade House + AddButtonLabeled( 10, 190, GetButtonID( 6, 2 ), 1061798, false ); // Make Primary + + break; + } + case HouseGumpPageAOS.ChangeHanger: + { + for ( int i = 0; i < m_HangerNumbers.Length; ++i ) + { + int x = 50 + ((i % 3) * 100); + int y = 180 + ((i / 3) * 80); + + AddButton( x, y, 4005, 4007, GetButtonID( 7, i ), GumpButtonType.Reply, 0 ); + AddItem( x + 20, y, m_HangerNumbers[i] ); + } + + break; + } + case HouseGumpPageAOS.ChangeFoundation: + { + for ( int i = 0; i < m_FoundationNumbers.Length; ++i ) + { + int x = 15 + ((i % 5) * 80); + int y = 180 + ((i / 5) * 100); + + AddButton( x, y, 4005, 4007, GetButtonID( 8, i ), GumpButtonType.Reply, 0 ); + AddItem( x + 25, y, m_FoundationNumbers[i] ); + } + + break; + } + case HouseGumpPageAOS.ChangeSign: + { + int index = 0; + + if ( _HouseSigns.Count == 0 ) + { + // Add standard signs + for ( int i = 0; i < 54; ++i ) + { + _HouseSigns.Add( 2980 + ( i * 2 ) ); + } + + // Add library and beekeeper signs ( ML ) + _HouseSigns.Add( 2966 ); + _HouseSigns.Add( 3140 ); + } + + int signsPerPage = 18; + int totalSigns = 54; + int pages = (int) Math.Ceiling( (double) totalSigns / signsPerPage ); + + for ( int i = 0; i < pages; ++i ) + { + AddPage( i + 1 ); + + AddButton( 10, 360, 4005, 4007, 0, GumpButtonType.Page, ((i + 1) % pages ) + 1 ); + + for ( int j = 0; j < signsPerPage && totalSigns - ( signsPerPage * i ) - j > 0; ++j ) + { + int x = 30 + ((j % 6) * 60); + int y = 130 + ((j / 6) * 60); + + AddButton( x, y, 4005, 4007, GetButtonID( 9, index ), GumpButtonType.Reply, 0 ); + AddItem( x + 20, y, _HouseSigns[index++] ); + } + } + + break; + } + case HouseGumpPageAOS.RemoveCoOwner: + { + AddHtmlLocalized( 10, 120, 400, 20, 1060730, LabelColor, false, false ); //
CO-OWNER LIST
+ AddList( house.CoOwners, 10, false, true, from ); + break; + } + case HouseGumpPageAOS.ListCoOwner: + { + AddHtmlLocalized( 10, 120, 400, 20, 1060730, LabelColor, false, false ); //
CO-OWNER LIST
+ AddList( house.CoOwners, -1, false, true, from ); + break; + } + case HouseGumpPageAOS.RemoveFriend: + { + AddHtmlLocalized( 10, 120, 400, 20, 1060731, LabelColor, false, false ); //
FRIENDS LIST
+ AddList( house.Friends, 11, false, true, from ); + break; + } + case HouseGumpPageAOS.ListFriend: + { + AddHtmlLocalized( 10, 120, 400, 20, 1060731, LabelColor, false, false ); //
FRIENDS LIST
+ AddList( house.Friends, -1, false, true, from ); + break; + } + case HouseGumpPageAOS.RemoveBan: + { + AddHtmlLocalized( 10, 120, 400, 20, 1060733, LabelColor, false, false ); //
BAN LIST
+ AddList( house.Bans, 12, true, true, from ); + break; + } + case HouseGumpPageAOS.ListBan: + { + AddHtmlLocalized( 10, 120, 400, 20, 1060733, LabelColor, false, false ); //
BAN LIST
+ AddList( house.Bans, -1, true, true, from ); + break; + } + case HouseGumpPageAOS.RemoveAccess: + { + AddHtmlLocalized( 10, 120, 400, 20, 1060732, LabelColor, false, false ); //
ACCESS LIST
+ AddList( house.Access, 13, false, true, from ); + break; + } + case HouseGumpPageAOS.ListAccess: + { + AddHtmlLocalized( 10, 120, 400, 20, 1060732, LabelColor, false, false ); //
ACCESS LIST
+ AddList( house.Access, -1, false, true, from ); + break; + } + case HouseGumpPageAOS.ChangePost: + { + int index = 0; + + for ( int i = 0; i < 2; ++i ) + { + AddPage( i + 1 ); + + AddButton( 10, 360, 4005, 4007, 0, GumpButtonType.Page, ((i + 1) % 2) + 1 ); + + for ( int j = 0; j < 16 && index < m_PostNumbers.Length; ++j ) + { + int x = 15 + ((j % 8) * 50); + int y = 130 + ((j / 8) * 110); + + AddButton( x, y, 4005, 4007, GetButtonID( 14, index ), GumpButtonType.Reply, 0 ); + AddItem( x + 10, y, m_PostNumbers[index++] ); + } + } + + break; + } + } + } + + public static void PublicPrivateNotice_Callback( Mobile from, object state ) + { + BaseHouse house = (BaseHouse) state; + + if ( !house.Deleted ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, house ) ); + } + + public static void CustomizeNotice_Callback( Mobile from, object state ) + { + BaseHouse house = (BaseHouse) state; + + if ( !house.Deleted ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Customize, from, house ) ); + } + + public static void ClearCoOwners_Callback( Mobile from, bool okay, object state ) + { + BaseHouse house = (BaseHouse) state; + + if ( house.Deleted ) + return; + + if ( okay && house.IsOwner( from ) ) + { + if ( house.CoOwners != null ) + house.CoOwners.Clear(); + + from.SendLocalizedMessage( 501333 ); // All co-owners have been removed from this house. + } + + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, house ) ); + } + + public static void ClearFriends_Callback( Mobile from, bool okay, object state ) + { + BaseHouse house = (BaseHouse) state; + + if ( house.Deleted ) + return; + + if ( okay && house.IsCoOwner( from ) ) + { + if ( house.Friends != null ) + house.Friends.Clear(); + + from.SendLocalizedMessage( 501332 ); // All friends have been removed from this house. + } + + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, house ) ); + } + + public static void ClearBans_Callback( Mobile from, bool okay, object state ) + { + BaseHouse house = (BaseHouse) state; + + if ( house.Deleted ) + return; + + if ( okay && house.IsFriend( from ) ) + { + if ( house.Bans != null ) + house.Bans.Clear(); + + from.SendLocalizedMessage( 1060754 ); // All bans for this house have been lifted. + } + + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, house ) ); + } + + public static void ClearAccess_Callback( Mobile from, bool okay, object state ) + { + BaseHouse house = (BaseHouse) state; + + if ( house.Deleted ) + return; + + if ( okay && house.IsFriend( from ) ) + { + ArrayList list = new ArrayList( house.Access ); + + if ( house.Access != null ) + house.Access.Clear(); + + for ( int i = 0; i < list.Count; ++i ) + { + Mobile m = (Mobile)list[i]; + + if ( !house.HasAccess( m ) && house.IsInside( m ) ) + { + m.Location = house.BanLocation; + m.SendLocalizedMessage( 1060734 ); // Your access to this house has been revoked. + } + } + + from.SendLocalizedMessage( 1061843 ); // This house's Access List has been cleared. + } + + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, house ) ); + } + + public static void ConvertHouse_Callback( Mobile from, bool okay, object state ) + { + BaseHouse house = (BaseHouse) state; + + if ( house.Deleted ) + return; + + if ( okay && house.IsOwner( from ) && !house.HasRentedVendors ) + { + HousePlacementEntry e = house.ConvertEntry; + + if ( e != null ) + { + int cost = e.Cost - house.Price; + + if ( cost > 0 ) + { + if ( Innkeeper.Withdraw( from, cost ) ) + { + from.SendLocalizedMessage( 1060398, cost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your inn chest. + } + else + { + from.SendLocalizedMessage( 1061624 ); // You do not have enough funds in your inn chest to cover the difference between your old house and your new one. + return; + } + } + else if ( cost < 0 ) + { + if ( Innkeeper.Deposit( from, -cost ) ) + from.SendLocalizedMessage( 1060397, (-cost).ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + else + return; + } + + BaseHouse newHouse = e.ConstructHouse( from ); + + if ( newHouse != null ) + { + newHouse.Price = e.Cost; + + house.MoveAllToCrate(); + + newHouse.Friends = new ArrayList( house.Friends ); + newHouse.CoOwners = new ArrayList( house.CoOwners ); + newHouse.Bans = new ArrayList( house.Bans ); + newHouse.Access = new ArrayList( house.Access ); + newHouse.BuiltOn = house.BuiltOn; + newHouse.LastTraded = house.LastTraded; + newHouse.Public = house.Public; + + newHouse.VendorInventories.AddRange( house.VendorInventories ); + house.VendorInventories.Clear(); + + foreach ( VendorInventory inventory in newHouse.VendorInventories ) + { + inventory.House = newHouse; + } + + newHouse.InternalizedVendors.AddRange( house.InternalizedVendors ); + house.InternalizedVendors.Clear(); + + foreach ( Mobile mobile in newHouse.InternalizedVendors ) + { + if ( mobile is PlayerVendor ) + ((PlayerVendor)mobile).House = newHouse; + else if ( mobile is PlayerBarkeeper ) + ((PlayerBarkeeper)mobile).House = newHouse; + } + + if( house.MovingCrate != null ) + { + newHouse.MovingCrate = house.MovingCrate; + newHouse.MovingCrate.House = newHouse; + house.MovingCrate = null; + } + + List items = house.GetItems(); + List mobiles = house.GetMobiles(); + + newHouse.MoveToWorld( new Point3D( house.X + house.ConvertOffsetX, house.Y + house.ConvertOffsetY, house.Z + house.ConvertOffsetZ ), house.Map ); + house.Delete(); + + foreach ( Item item in items ) + { + item.Location = newHouse.BanLocation; + } + + foreach ( Mobile mobile in mobiles ) + { + mobile.Location = newHouse.BanLocation; + } + + /* You have successfully replaced your original house with a new house. + * The value of the replaced house has been deposited into your inn chest. + * All of the items in your original house have been relocated to a Moving Crate in the new house. + * Any deed-based house add-ons have been converted back into deeds. + * Vendors and barkeeps in the house, if any, have been stored in the Moving Crate as well. + * Use the Get Vendor context-sensitive menu option on your character to retrieve them. + * These containers can be used to re-create the vendor in a new location. + * Any barkeepers have been converted into deeds. + */ + from.SendGump( new NoticeGump( 1060637, 30720, 1060012, 32512, 420, 280, null, null ) ); + return; + } + } + } + + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, house ) ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( m_House.Deleted ) + return; + + Mobile from = sender.Mobile; + + bool isCombatRestricted = m_House.IsCombatRestricted( from ); + + bool isOwner = m_House.IsOwner( from ); + bool isCoOwner = isOwner || m_House.IsCoOwner( from ); + bool isFriend = isCoOwner || m_House.IsFriend( from ); + + if ( isCombatRestricted ) + isCoOwner = isFriend = false; + + if ( !from.CheckAlive() ) + return; + + Item sign = m_House.Sign; + + if ( sign == null || from.Map != sign.Map || !from.InRange( sign.GetWorldLocation(), 18 ) ) + return; + + HouseFoundation foundation = m_House as HouseFoundation; + bool isCustomizable = ( foundation != null ); + + int val = info.ButtonID - 1; + + if ( val < 0 ) + return; + + int type = val % 15; + int index = val / 15; + + if ( m_Page == HouseGumpPageAOS.Vendors ) + { + if ( index >= 0 && index < m_List.Count ) + { + PlayerVendor vendor = (PlayerVendor) m_List[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 ( m_House.Public ) + { + from.SendLocalizedMessage( 501325 ); // Target the individual to ban from this house. + from.Target = new HouseBanTarget( true, m_House ); + } + + break; + } + case 1: // Lift Ban + { + if ( m_House.Public ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.RemoveBan, from, m_House ) ); + + break; + } + case 2: // Grant Access + { + if ( !m_House.Public ) + { + from.SendLocalizedMessage( 1060711 ); // Target the person you would like to grant access to. + from.Target = new HouseAccessTarget( m_House ); + } + + break; + } + case 3: // Revoke Access + { + if ( !m_House.Public ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.RemoveAccess, from, m_House ) ); + + break; + } + } + + break; + } + case 1: + { + HouseGumpPageAOS page; + + switch ( index ) + { + case 0: page = HouseGumpPageAOS.Information; break; + case 1: page = HouseGumpPageAOS.Security; break; + case 2: page = HouseGumpPageAOS.Storage; break; + case 3: page = HouseGumpPageAOS.Customize; break; + case 4: page = HouseGumpPageAOS.Ownership; break; + default: return; + } + + from.SendGump( new HouseGumpAOS( page, from, m_House ) ); + break; + } + case 3: + { + switch ( index ) + { + case 0: // View Co-Owner List + { + if ( isCoOwner ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.ListCoOwner, from, m_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, m_House ); + } + + break; + } + case 2: // Remove a Co-Owner + { + if ( isOwner ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.RemoveCoOwner, from, m_House ) ); + + break; + } + case 3: // Clear Co-Owner List + { + if ( isOwner ) + from.SendGump( new WarningGump( 1060635, 30720, 1060736, 32512, 420, 280, new WarningGumpCallback( ClearCoOwners_Callback ), m_House ) ); + + break; + } + case 4: // View Friends List + { + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.ListFriend, from, m_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, m_House ); + } + + break; + } + case 6: // Remove a Friend + { + if ( isCoOwner ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.RemoveFriend, from, m_House ) ); + + break; + } + case 7: // Clear Friend List + { + if ( isCoOwner ) + from.SendGump( new WarningGump( 1060635, 30720, 1018039, 32512, 420, 280, new WarningGumpCallback( ClearFriends_Callback ), m_House ) ); + + break; + } + case 8: // View Ban List + { + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.ListBan, from, m_House ) ); + + break; + } + case 9: // Clear Ban List + { + from.SendGump( new WarningGump( 1060635, 30720, 1060753, 32512, 420, 280, new WarningGumpCallback( ClearBans_Callback ), m_House ) ); + + break; + } + case 10: // View Access List + { + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.ListAccess, from, m_House ) ); + + break; + } + case 11: // Clear Access List + { + from.SendGump( new WarningGump( 1060635, 30720, 1061842, 32512, 420, 280, new WarningGumpCallback( ClearAccess_Callback ), m_House ) ); + + break; + } + case 12: // Make Private + { + if ( isOwner ) + { + if ( m_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 ), m_House ) ); + break; + } + + if ( m_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 ), m_House ) ); + break; + } + + m_House.Public = false; + + m_House.ChangeLocks( from ); + + // This house is now private. + from.SendGump( new NoticeGump( 1060637, 30720, 501888, 32512, 320, 180, new NoticeGumpCallback( PublicPrivateNotice_Callback ), m_House ) ); + + Region r = m_House.Region; + List list = r.GetMobiles(); + + for ( int i = 0; i < list.Count; ++i ) + { + Mobile m = (Mobile)list[i]; + + if ( !m_House.HasAccess( m ) && m_House.IsInside( m ) ) + m.Location = m_House.BanLocation; + } + } + + break; + } + case 13: // Make Public + { + if ( isOwner ) + { + m_House.Public = true; + + m_House.RemoveKeys( from ); + m_House.RemoveLocks(); + + if ( BaseHouse.NewVendorSystem ) + { + // 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 ), m_House ) ); + } + else + { + from.SendGump( new NoticeGump( 1060637, 30720, "This house is now public. Friends of the house may now have vendors working out of this building.", 0xF8C000, 320, 180, new NoticeGumpCallback( PublicPrivateNotice_Callback ), m_House ) ); + } + + Region r = m_House.Region; + List list = r.GetMobiles(); + + for ( int i = 0; i < list.Count; ++i ) + { + Mobile m = (Mobile)list[i]; + + if ( m_House.IsBanned( m ) && m_House.IsInside( m ) ) + m.Location = m_House.BanLocation; + } + } + + break; + } + } + + break; + } + case 5: + { + switch ( index ) + { + case 2: // Relocate Moving Crate + { + MovingCrate crate = m_House.MovingCrate; + + if ( isOwner && crate != null ) + { + if ( !m_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 && m_House.Public ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.ChangeSign, from, m_House ) ); + + break; + } + case 7: // Rename House + { + if ( isCoOwner ) + { + from.Prompt = new RenamePrompt( m_House ); + from.SendLocalizedMessage( 501302 ); // What dost thou wish the sign to say? + } + + break; + } + } + + break; + } + case 6: + { + switch ( index ) + { + case 0: // Demolish + { + if ( isOwner && m_House.MovingCrate == null && m_House.InternalizedVendors.Count == 0 ) + { + if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null ) + { + from.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside. + } + else + { + from.CloseGump( typeof( HouseDemolishGump ) ); + from.SendGump( new HouseDemolishGump( from, m_House ) ); + } + } + + break; + } + case 1: // Trade House + { + if ( isOwner ) + { + if ( BaseHouse.NewVendorSystem && m_House.HasPersonalVendors ) + { + from.SendLocalizedMessage( 1062467 ); // You cannot trade this house while you still have personal vendors inside. + } + else if ( m_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( m_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 HouseGumpAOS( HouseGumpPageAOS.Customize, from, m_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; + 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 HouseGumpAOS( HouseGumpPageAOS.Customize, from, m_House ) ); + } + + break; + } + case 9: + { + if ( isOwner && m_House.Public && index >= 0 && index < _HouseSigns.Count ) + { + m_House.ChangeSignType( _HouseSigns[index] ); + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Customize, from, m_House ) ); + } + + break; + } + case 10: + { + if ( isOwner && m_List != null && index >= 0 && index < m_List.Count ) + { + m_House.RemoveCoOwner( from, (Mobile)m_List[index] ); + + if ( m_House.CoOwners.Count > 0 ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.RemoveCoOwner, from, m_House ) ); + else + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, m_House ) ); + } + + break; + } + case 11: + { + if ( isCoOwner && m_List != null && index >= 0 && index < m_List.Count ) + { + m_House.RemoveFriend( from, (Mobile)m_List[index] ); + + if ( m_House.Friends.Count > 0 ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.RemoveFriend, from, m_House ) ); + else + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, m_House ) ); + } + + break; + } + case 12: + { + if ( m_List != null && index >= 0 && index < m_List.Count ) + { + m_House.RemoveBan( from, (Mobile)m_List[index] ); + + if ( m_House.Bans.Count > 0 ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.RemoveBan, from, m_House ) ); + else + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, m_House ) ); + } + + break; + } + case 13: + { + if ( m_List != null && index >= 0 && index < m_List.Count ) + { + m_House.RemoveAccess( from, (Mobile)m_List[index] ); + + if ( m_House.Access.Count > 0 ) + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.RemoveAccess, from, m_House ) ); + else + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Security, from, m_House ) ); + } + + break; + } + case 14: + { + if ( isOwner && isCustomizable && index >= 0 && index < m_PostNumbers.Length ) + { + foundation.SignpostGraphic = m_PostNumbers[index]; + foundation.CheckSignpost(); + + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Customize, from, m_House ) ); + } + + break; + } + } + } + + private ArrayList Wrap( string value ) + { + if ( value == null || (value = value.Trim()).Length <= 0 ) + return null; + + string[] values = value.Split( ' ' ); + ArrayList list = new ArrayList(); + string current = ""; + + for ( int i = 0; i < values.Length; ++i ) + { + string val = values[i]; + + string v = current.Length == 0 ? val : current + ' ' + val; + + if ( v.Length < 10 ) + { + current = v; + } + else if ( v.Length == 10 ) + { + list.Add( v ); + + if ( list.Count == 6 ) + return list; + + current = ""; + } + else if ( val.Length <= 10 ) + { + list.Add( current ); + + if ( list.Count == 6 ) + return list; + + current = val; + } + else + { + while ( v.Length >= 10 ) + { + list.Add( v.Substring( 0, 10 ) ); + + if ( list.Count == 6 ) + return list; + + v = v.Substring( 10 ); + } + + current = v; + } + } + + if ( current.Length > 0 ) + list.Add( current ); + + return list; + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/HouseTransferGump.cs b/Scripts/Gumps/HouseTransferGump.cs new file mode 100644 index 0000000..b6788e0 --- /dev/null +++ b/Scripts/Gumps/HouseTransferGump.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; +using Server.Multis; +using Server.Multis.Deeds; +using Server.Network; + +namespace Server.Gumps +{ + public class HouseTransferGump : Gump + { + private Mobile m_From, m_To; + private BaseHouse m_House; + + public HouseTransferGump( Mobile from, Mobile to, BaseHouse house ) : base( 110, 100 ) + { + m_From = from; + m_To = to; + m_House = house; + + Closable = false; + + AddPage( 0 ); + + AddBackground( 0, 0, 420, 280, 5054 ); + + AddImageTiled( 10, 10, 400, 20, 2624 ); + AddAlphaRegion( 10, 10, 400, 20 ); + + AddHtmlLocalized( 10, 10, 400, 20, 1060635, 30720, false, false ); //
WARNING
+ + AddImageTiled( 10, 40, 400, 200, 2624 ); + AddAlphaRegion( 10, 40, 400, 200 ); + + /* Another player is attempting to initiate a house trade with you. + * In order for you to see this window, both you and the other person are standing within two paces of the house to be traded. + * If you click OKAY below, a house trade scroll will appear in your trade window and you can complete the transaction. + * This scroll is a distinctive blue color and will show the name of the house, the name of the owner of that house, and the sextant coordinates of the center of the house when you hover your mouse over it. + * In order for the transaction to be successful, you both must accept the trade and you both must remain within two paces of the house sign. + *

Accepting this house in trade will condemn any and all of your other houses that you may have. + * All of your houses on all shards will be affected. + *

In addition, you will not be able to place another house or have one transferred to you for one (1) real-life week.

+ * Once you accept these terms, these effects cannot be reversed. + * Re-deeding or transferring your new house will not uncondemn your other house(s) nor will the one week timer be removed.

+ * If you are absolutely certain you wish to proceed, click the button next to OKAY below. + * If you do not wish to trade for this house, click CANCEL. + */ + AddHtmlLocalized( 10, 40, 400, 200, 1062086, 32512, false, true ); + + AddImageTiled( 10, 250, 400, 20, 2624 ); + AddAlphaRegion( 10, 250, 400, 20 ); + + AddButton( 10, 250, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 40, 250, 170, 20, 1011036, 32767, false, false ); // OKAY + + AddButton( 210, 250, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 240, 250, 170, 20, 1011012, 32767, false, false ); // CANCEL + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( info.ButtonID == 1 && !m_House.Deleted ) + m_House.EndConfirmTransfer( m_From, m_To ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/NoticeGump.cs b/Scripts/Gumps/NoticeGump.cs new file mode 100644 index 0000000..5d863b2 --- /dev/null +++ b/Scripts/Gumps/NoticeGump.cs @@ -0,0 +1,48 @@ +using System; +using Server; + +namespace Server.Gumps +{ + public delegate void NoticeGumpCallback( Mobile from, object state ); + + public class NoticeGump : Gump + { + private NoticeGumpCallback m_Callback; + private object m_State; + + public NoticeGump( int header, int headerColor, object content, int contentColor, int width, int height, NoticeGumpCallback callback, object state ) : base( (640 - width) / 2, (480 - height) / 2 ) + { + m_Callback = callback; + m_State = state; + + Closable = false; + + AddPage( 0 ); + + AddBackground( 0, 0, width, height, 5054 ); + + AddImageTiled( 10, 10, width - 20, 20, 2624 ); + AddAlphaRegion( 10, 10, width - 20, 20 ); + AddHtmlLocalized( 10, 10, width - 20, 20, header, headerColor, false, false ); + + AddImageTiled( 10, 40, width - 20, height - 80, 2624 ); + AddAlphaRegion( 10, 40, width - 20, height - 80 ); + + if ( content is int ) + AddHtmlLocalized( 10, 40, width - 20, height - 80, (int)content, contentColor, false, true ); + else if ( content is string ) + AddHtml( 10, 40, width - 20, height - 80, String.Format( "{1}", contentColor, content ), false, true ); + + AddImageTiled( 10, height - 30, width - 20, 20, 2624 ); + AddAlphaRegion( 10, height - 30, width - 20, 20 ); + AddButton( 10, height - 30, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 40, height - 30, 120, 20, 1011036, 32767, false, false ); // OKAY + } + + public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 1 && m_Callback != null ) + m_Callback( sender.Mobile, m_State ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/PetResurrectGump.cs b/Scripts/Gumps/PetResurrectGump.cs new file mode 100644 index 0000000..a29dcdb --- /dev/null +++ b/Scripts/Gumps/PetResurrectGump.cs @@ -0,0 +1,79 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Network; +using Server.Gumps; + +namespace Server.Gumps +{ + public class PetResurrectGump : Gump + { + private BaseCreature m_Pet; + private double m_HitsScalar; + + public PetResurrectGump( Mobile from, BaseCreature pet ) + : this( from, pet, 0.0 ) + { + } + + public PetResurrectGump( Mobile from, BaseCreature pet, double hitsScalar ) : base( 50, 50 ) + { + from.CloseGump( typeof( PetResurrectGump ) ); + + m_Pet = pet; + m_HitsScalar = hitsScalar; + + AddPage( 0 ); + + AddBackground( 10, 10, 265, 140, 0x242C ); + + AddItem( 205, 40, 0x4 ); + AddItem( 227, 40, 0x5 ); + + AddItem( 180, 78, 0xCAE ); + AddItem( 195, 90, 0xCAD ); + AddItem( 218, 95, 0xCB0 ); + + AddHtmlLocalized( 30, 30, 150, 75, 1049665, false, false ); //
Wilt thou sanctify the resurrection of:
+ AddHtml( 30, 70, 150, 25, String.Format( "
{0}
", pet.Name ), true, false ); + + AddButton( 40, 105, 0x81A, 0x81B, 0x1, GumpButtonType.Reply, 0 ); // Okay + AddButton( 110, 105, 0x819, 0x818, 0x2, GumpButtonType.Reply, 0 ); // Cancel + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( m_Pet.Deleted || !m_Pet.IsBonded || !m_Pet.IsDeadPet ) + return; + + Mobile from = state.Mobile; + + if ( info.ButtonID == 1 ) + { + if ( m_Pet.Map == null || !m_Pet.Map.CanFit( m_Pet.Location, 16, false, false ) ) + { + from.SendLocalizedMessage( 503256 ); // You fail to resurrect the creature. + return; + } + + m_Pet.PlaySound( 0x214 ); + m_Pet.FixedEffect( 0x376A, 10, 16 ); + m_Pet.ResurrectPet(); + + double decreaseAmount; + + if( from == m_Pet.ControlMaster ) + decreaseAmount = 0.1; + else + decreaseAmount = 0.2; + + for ( int i = 0; i < m_Pet.Skills.Length; ++i ) //Decrease all skills on pet. + m_Pet.Skills[i].Base -= decreaseAmount; + + if( !m_Pet.IsDeadPet && m_HitsScalar > 0 ) + m_Pet.Hits = (int)(m_Pet.HitsMax * m_HitsScalar); + } + + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/PlayerVendorGumps.cs b/Scripts/Gumps/PlayerVendorGumps.cs new file mode 100644 index 0000000..e6192c7 --- /dev/null +++ b/Scripts/Gumps/PlayerVendorGumps.cs @@ -0,0 +1,977 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using Server; +using Server.Mobiles; +using Server.Items; +using Server.Network; +using Server.HuePickers; +using Server.Multis; + +namespace Server.Gumps +{ + public class PlayerVendorBuyGump : Gump + { + private PlayerVendor m_Vendor; + private VendorItem m_VI; + + public PlayerVendorBuyGump( PlayerVendor vendor, VendorItem vi ) : base( 100, 200 ) + { + m_Vendor = vendor; + m_VI = vi; + + AddBackground( 100, 10, 300, 150, 5054 ); + + AddHtmlLocalized( 125, 20, 250, 24, 1019070, false, false ); // You have agreed to purchase: + + if ( !String.IsNullOrEmpty( vi.Description ) ) + AddLabel( 125, 45, 0, vi.Description ); + else + AddHtmlLocalized( 125, 45, 250, 24, 1019072, false, false ); // an item without a description + + AddHtmlLocalized( 125, 70, 250, 24, 1019071, false, false ); // for the amount of: + AddLabel( 125, 95, 0, vi.Price.ToString() ); + + AddButton( 250, 130, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 282, 130, 100, 24, 1011012, false, false ); // CANCEL + + AddButton( 120, 130, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 152, 130, 100, 24, 1011036, false, false ); // OKAY + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + + if ( !m_Vendor.CanInteractWith( from, false ) ) + return; + + if ( m_Vendor.IsOwner( from ) ) + { + m_Vendor.SayTo( from, 503212 ); // You own this shop, just take what you want. + return; + } + + if ( info.ButtonID == 1 ) + { + m_Vendor.Say( from.Name ); + + if ( !m_VI.Valid || !m_VI.Item.IsChildOf( m_Vendor.Backpack ) ) + { + m_Vendor.SayTo( from, 503216 ); // You can't buy that. + return; + } + + int totalGold = 0; + + if ( from.Backpack != null ) + totalGold += from.Backpack.GetAmount( typeof( Gold ) ); + + totalGold += Innkeeper.GetBalance( from ); + + if ( totalGold < m_VI.Price ) + { + m_Vendor.SayTo( from, 503205 ); // You cannot afford this item. + } + else if ( !from.PlaceInBackpack( m_VI.Item ) ) + { + m_Vendor.SayTo( from, 503204 ); // You do not have room in your backpack for this. + } + else + { + int leftPrice = m_VI.Price; + + if ( from.Backpack != null ) + leftPrice -= from.Backpack.ConsumeUpTo( typeof( Gold ), leftPrice ); + + if ( leftPrice > 0 ) + Innkeeper.Withdraw( from, leftPrice ); + + m_Vendor.HoldGold += m_VI.Price; + + from.SendLocalizedMessage( 503201 ); // You take the item. + } + } + else + { + from.SendLocalizedMessage( 503207 ); // Cancelled purchase. + } + } + } + + public class PlayerVendorOwnerGump : Gump + { + private PlayerVendor m_Vendor; + + public PlayerVendorOwnerGump( PlayerVendor vendor ) : base( 50, 200 ) + { + m_Vendor = vendor; + + int perDay = m_Vendor.ChargePerDay; + + AddPage( 0 ); + AddBackground( 25, 10, 530, 140, 5054 ); + + AddHtmlLocalized( 425, 25, 120, 20, 1019068, false, false ); // See goods + AddButton( 390, 25, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 425, 48, 120, 20, 1019069, false, false ); // Customize + AddButton( 390, 48, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 425, 72, 120, 20, 1011012, false, false ); // CANCEL + AddButton( 390, 71, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 40, 72, 260, 20, 1038321, false, false ); // Gold held for you: + AddLabel( 300, 72, 0, m_Vendor.HoldGold.ToString() ); + AddHtmlLocalized( 40, 96, 260, 20, 1038322, false, false ); // Gold held in my account: + AddLabel( 300, 96, 0, m_Vendor.BankAccount.ToString() ); + + //AddHtmlLocalized( 40, 120, 260, 20, 1038324, false, false ); // My charge per day is: + // Localization has changed, we must use a string here + AddHtml( 40, 120, 260, 20, "My charge per day is:", false, false ); + AddLabel( 300, 120, 0, perDay.ToString() ); + + double days = (m_Vendor.HoldGold + m_Vendor.BankAccount) / ((double)perDay); + + AddHtmlLocalized( 40, 25, 260, 20, 1038318, false, false ); // Amount of days I can work: + AddLabel( 300, 25, 0, ((int)days).ToString() ); + AddHtmlLocalized( 40, 48, 260, 20, 1038319, false, false ); // Earth days: + AddLabel( 300, 48, 0, ((int)(days / 12.0)).ToString() ); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + + if ( !m_Vendor.CanInteractWith( from, true ) ) + return; + + switch ( info.ButtonID ) + { + case 1: + { + m_Vendor.OpenBackpack( from ); + + break; + } + case 2: + { + from.SendGump( new PlayerVendorCustomizeGump( m_Vendor, from ) ); + + break; + } + } + } + } + + public class NewPlayerVendorOwnerGump : Gump + { + private PlayerVendor m_Vendor; + + public NewPlayerVendorOwnerGump( PlayerVendor vendor ) : base( 50, 200 ) + { + m_Vendor = vendor; + + int perRealWorldDay = vendor.ChargePerRealWorldDay; + int goldHeld = vendor.HoldGold; + + AddBackground( 25, 10, 530, 180, 0x13BE ); + + AddImageTiled( 35, 20, 510, 160, 0xA40 ); + AddAlphaRegion( 35, 20, 510, 160 ); + + AddImage( 10, 0, 0x28DC ); + AddImage( 537, 175, 0x28DC ); + AddImage( 10, 175, 0x28DC ); + AddImage( 537, 0, 0x28DC ); + + if ( goldHeld < perRealWorldDay ) + { + int goldNeeded = perRealWorldDay - goldHeld; + + AddHtmlLocalized( 40, 35, 260, 20, 1038320, 0x7FFF, false, false ); // Gold needed for 1 day of vendor salary: + AddLabel( 300, 35, 0x1F, goldNeeded.ToString() ); + } + else + { + int days = goldHeld / perRealWorldDay; + + AddHtmlLocalized( 40, 35, 260, 20, 1038318, 0x7FFF, false, false ); // # of days Vendor salary is paid for: + AddLabel( 300, 35, 0x480, days.ToString() ); + } + + AddHtmlLocalized( 40, 58, 260, 20, 1038324, 0x7FFF, false, false ); // My charge per real world day is: + AddLabel( 300, 58, 0x480, perRealWorldDay.ToString() ); + + AddHtmlLocalized( 40, 82, 260, 20, 1038322, 0x7FFF, false, false ); // Gold held in my account: + AddLabel( 300, 82, 0x480, goldHeld.ToString() ); + + AddHtmlLocalized( 40, 108, 260, 20, 1062509, 0x7FFF, false, false ); // Shop Name: + AddLabel( 140, 106, 0x66D, vendor.ShopName ); + + if ( vendor is RentedVendor ) + { + int days, hours; + ((RentedVendor)vendor).ComputeRentalExpireDelay( out days, out hours ); + + AddLabel( 38, 132, 0x480, String.Format( "Location rental will expire in {0} day{1} and {2} hour{3}.", days, days != 1 ? "s" : "", hours, hours != 1 ? "s" : "" ) ); + } + + AddButton( 390, 24, 0x15E1, 0x15E5, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 408, 21, 120, 20, 1019068, 0x7FFF, false, false ); // See goods + + AddButton( 390, 44, 0x15E1, 0x15E5, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 408, 41, 120, 20, 1019069, 0x7FFF, false, false ); // Customize + + AddButton( 390, 64, 0x15E1, 0x15E5, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 408, 61, 120, 20, 1062434, 0x7FFF, false, false ); // Rename Shop + + AddButton( 390, 84, 0x15E1, 0x15E5, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 408, 81, 120, 20, 3006217, 0x7FFF, false, false ); // Rename Vendor + + AddButton( 390, 104, 0x15E1, 0x15E5, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 408, 101, 120, 20, 3006123, 0x7FFF, false, false ); // Open Paperdoll + + AddButton( 390, 124, 0x15E1, 0x15E5, 6, GumpButtonType.Reply, 0 ); + AddLabel( 408, 121, 0x480, "Collect Gold" ); + + AddButton( 390, 144, 0x15E1, 0x15E5, 7, GumpButtonType.Reply, 0 ); + AddLabel( 408, 141, 0x480, "Dismiss Vendor" ); + + AddButton( 390, 162, 0x15E1, 0x15E5, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 408, 161, 120, 20, 1011012, 0x7FFF, false, false ); // CANCEL + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + + if ( info.ButtonID == 1 || info.ButtonID == 2 ) // See goods or Customize + m_Vendor.CheckTeleport( from ); + + if ( !m_Vendor.CanInteractWith( from, true ) ) + return; + + switch ( info.ButtonID ) + { + case 1: // See goods + { + m_Vendor.OpenBackpack( from ); + + break; + } + case 2: // Customize + { + from.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + + break; + } + case 3: // Rename Shop + { + m_Vendor.RenameShop( from ); + + break; + } + case 4: // Rename Vendor + { + m_Vendor.Rename( from ); + + break; + } + case 5: // Open Paperdoll + { + m_Vendor.DisplayPaperdollTo( from ); + + break; + } + case 6: // Collect Gold + { + m_Vendor.CollectGold( from ); + + break; + } + case 7: // Dismiss Vendor + { + m_Vendor.Dismiss( from ); + + break; + } + } + } + } + + public class PlayerVendorCustomizeGump : Gump + { + private Mobile m_Vendor; + + private class CustomItem + { + private Type m_Type; + private int m_ItemID; + private int m_LocNum; + private int m_ArtNum; + private bool m_LongText; + + public CustomItem( int itemID, int loc ) : this( null, itemID, loc, 0, false ) + { + } + + public CustomItem( int itemID, int loc, bool longText ) : this( null, itemID, loc, 0, longText ) + { + } + + public CustomItem( Type type, int loc ) : this( type, loc, 0 ) + { + } + + public CustomItem( Type type, int loc, int art ) : this( type, 0, loc, art, false ) + { + } + + public CustomItem( Type type, int itemID, int loc, int art, bool longText ) + { + m_Type = type; + m_ItemID = itemID; + m_LocNum = loc; + m_ArtNum = art; + m_LongText = longText; + } + + public Item Create() + { + if ( m_Type == null ) + return null; + + Item i = null; + + try + { + ConstructorInfo ctor = m_Type.GetConstructor( new Type[0] ); + if ( ctor != null ) + i = ctor.Invoke( null ) as Item; + } + catch + { + } + + return i; + } + + public Type Type{ get{ return m_Type; } } + public int ItemID{ get{ return m_ItemID; } } + public int LocNumber{ get{ return m_LocNum; } } + public int ArtNumber{ get{ return m_ArtNum; } } + public bool LongText{ get{ return m_LongText; } } + } + + private class CustomCategory + { + private CustomItem[] m_Entries; + private Layer m_Layer; + private bool m_CanDye; + private int m_LocNum; + + public CustomCategory( Layer layer, int loc, bool canDye, CustomItem[] items ) + { + m_Entries = items; + m_CanDye = canDye; + m_Layer = layer; + m_LocNum = loc; + } + + public bool CanDye{ get{ return m_CanDye; } } + public CustomItem[] Entries{ get{ return m_Entries; } } + public Layer Layer{ get{ return m_Layer; } } + public int LocNumber{ get{ return m_LocNum; } } + } + + private static CustomCategory[] Categories = new CustomCategory[]{ + new CustomCategory( Layer.InnerTorso, 1011357, true, new CustomItem[]{// Upper Torso + new CustomItem( typeof( Shirt ), 1011359, 5399 ), + new CustomItem( typeof( FancyShirt ), 1011360, 7933 ), + new CustomItem( typeof( PlainDress ), 1011363, 7937 ), + new CustomItem( typeof( FancyDress ), 1011364, 7935 ), + new CustomItem( typeof( Robe ), 1011365, 7939 ) + } ), + + new CustomCategory( Layer.MiddleTorso, 1011371, true, new CustomItem[]{//Over chest + new CustomItem( typeof( Doublet ), 1011358, 8059 ), + new CustomItem( typeof( Tunic ), 1011361, 8097 ), + new CustomItem( typeof( JesterSuit ), 1011366, 8095 ), + new CustomItem( typeof( BodySash ), 1011372, 5441 ), + new CustomItem( typeof( Surcoat ), 1011362, 8189 ), + new CustomItem( typeof( HalfApron ), 1011373, 5435 ), + new CustomItem( typeof( FullApron ), 1011374, 5437 ), + } ), + + new CustomCategory( Layer.Shoes, 1011388, true, new CustomItem[]{//Footwear + new CustomItem( typeof( Sandals ), 1011389, 5901 ), + new CustomItem( typeof( Shoes ), 1011390, 5904 ), + new CustomItem( typeof( Boots ), 1011391, 5899 ), + new CustomItem( typeof( ThighBoots ), 1011392, 5906 ), + } ), + + new CustomCategory( Layer.Helm, 1011375, true, new CustomItem[]{//Hats + new CustomItem( typeof( SkullCap ), 1011376, 5444 ), + new CustomItem( typeof( Bandana ), 1011377, 5440 ), + new CustomItem( typeof( FloppyHat ), 1011378, 5907 ), + new CustomItem( typeof( WideBrimHat ), 1011379, 5908 ), + new CustomItem( typeof( Cap ), 1011380, 5909 ), + new CustomItem( typeof( TallStrawHat ), 1011382, 5910 ) + } ), + + new CustomCategory( Layer.Helm, 1015319, true, new CustomItem[]{//More Hats + new CustomItem( typeof( StrawHat ), 1011382, 5911 ), + new CustomItem( typeof( WizardsHat ), 1011383, 5912 ), + new CustomItem( typeof( Bonnet ), 1011384, 5913 ), + new CustomItem( typeof( FeatheredHat ), 1011385, 5914 ), + new CustomItem( typeof( TricorneHat ), 1011386, 5915 ), + new CustomItem( typeof( JesterHat ), 1011387, 5916 ) + } ), + + new CustomCategory( Layer.Pants, 1011367, true, new CustomItem[]{ //Lower Torso + new CustomItem( typeof( LongPants ), 1011368, 5433 ), + new CustomItem( typeof( Kilt ), 1011369, 5431 ), + new CustomItem( typeof( Skirt ), 1011370, 5398 ), + } ), + + new CustomCategory( Layer.Cloak, 1011393, true, new CustomItem[]{ // Back + new CustomItem( typeof( Cloak ), 1011394, 5397 ) + } ), + + new CustomCategory( Layer.Hair, 1011395, true, new CustomItem[]{ // Hair + new CustomItem( 0x203B, 1011052 ), + new CustomItem( 0x203C, 1011053 ), + new CustomItem( 0x203D, 1011054 ), + new CustomItem( 0x2044, 1011055 ), + new CustomItem( 0x2045, 1011047 ), + new CustomItem( 0x204A, 1011050 ), + new CustomItem( 0x2047, 1011396 ), + new CustomItem( 0x2048, 1011048 ), + new CustomItem( 0x2049, 1011049 ), + } ), + + new CustomCategory( Layer.FacialHair, 1015320, true, new CustomItem[]{//Facial Hair + new CustomItem( 0x2041, 1011062 ), + new CustomItem( 0x203F, 1011060 ), + new CustomItem( 0x204B, 1015321, true ), + new CustomItem( 0x203E, 1011061 ), + new CustomItem( 0x204C, 1015322, true ), + new CustomItem( 0x2040, 1015323 ), + new CustomItem( 0x204D, 1011401 ), + } ), + + new CustomCategory( Layer.FirstValid, 1011397, false, new CustomItem[]{//Held items + new CustomItem( typeof( FishingPole ), 1011406, 3520 ), + new CustomItem( typeof( Pickaxe ), 1011407, 3717 ), + new CustomItem( typeof( Pitchfork ), 1011408, 3720 ), + new CustomItem( typeof( Cleaver ), 1015324, 3778 ), + new CustomItem( typeof( Mace ), 1011409, 3933 ), + new CustomItem( typeof( Torch ), 1011410, 3940 ), + new CustomItem( typeof( Hammer ), 1011411, 4020 ), + new CustomItem( typeof( Longsword ), 1011412, 3936 ), + new CustomItem( typeof( GnarledStaff ), 1011413, 5113 ) + } ), + + new CustomCategory( Layer.FirstValid, 1015325, false, new CustomItem[]{//More held items + new CustomItem( typeof( Crossbow ), 1011414, 3920 ), + new CustomItem( typeof( WarMace ), 1011415, 5126 ), + new CustomItem( typeof( TwoHandedAxe ), 1011416, 5186 ), + new CustomItem( typeof( Spear ), 1011417, 3939 ), + new CustomItem( typeof( Katana ), 1011418, 5118 ), + new CustomItem( typeof( Spellbook ), 1011419, 3834 ) + } ) + }; + + public PlayerVendorCustomizeGump( Mobile v, Mobile from ) : base( 30, 40 ) + { + m_Vendor = v; + int x,y; + + from.CloseGump( typeof( PlayerVendorCustomizeGump ) ); + + AddPage( 0 ); + AddBackground( 0, 0, 585, 393, 5054 ); + AddBackground( 195, 36, 387, 275, 3000 ); + AddHtmlLocalized( 10, 10, 565, 18, 1011356, false, false ); //
VENDOR CUSTOMIZATION MENU
+ AddHtmlLocalized( 60, 355, 150, 18, 1011036, false, false ); // OKAY + AddButton( 25, 355, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 320, 355, 150, 18, 1011012, false, false ); // CANCEL + AddButton( 285, 355, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + + y = 35; + for ( int i=0;i 0 ) + { + int cnum = info.Switches[0]; + int cat = cnum%256; + int ent = cnum>>8; + + if ( cat < Categories.Length && cat >= 0 ) + { + if ( ent < Categories[cat].Entries.Length && ent >= 0 ) + { + Item item = m_Vendor.FindItemOnLayer( Categories[cat].Layer ); + + if ( item != null ) + item.Delete(); + + List items = m_Vendor.Items; + + for ( int i = 0; item == null && i < items.Count; ++i ) + { + Item checkitem = items[i]; + Type type = checkitem.GetType(); + + for ( int j = 0; item == null && j < Categories[cat].Entries.Length; ++j ) + { + if ( type == Categories[cat].Entries[j].Type ) + item = checkitem; + } + } + + if ( item != null ) + item.Delete(); + + if ( Categories[cat].Layer == Layer.FacialHair ) + { + if ( m_Vendor.Female ) + from.SendLocalizedMessage( 1010639 ); // You cannot place facial hair on a woman! + else + m_Vendor.FacialHairItemID = Categories[cat].Entries[ent].ItemID; + } + else if ( Categories[cat].Layer == Layer.Hair ) + m_Vendor.HairItemID = Categories[cat].Entries[ent].ItemID; + + else + { + item = Categories[cat].Entries[ent].Create(); + + if ( item != null ) + { + item.Layer = Categories[cat].Layer; + + if ( !m_Vendor.EquipItem( item ) ) + item.Delete(); + } + } + + from.SendGump( new PlayerVendorCustomizeGump( m_Vendor, from ) ); + } + } + else + { + cat -= 100; + + if ( cat < 100 ) + { + if ( cat < Categories.Length && cat >= 0 ) + { + Item item = null; + + List items = m_Vendor.Items; + + for ( int i = 0; item == null && i < items.Count; ++i ) + { + Item checkitem = items[i]; + Type type = checkitem.GetType(); + + for ( int j = 0; item == null && j < Categories[cat].Entries.Length; ++j ) + { + if ( type == Categories[cat].Entries[j].Type ) + item = checkitem; + } + } + + if ( item != null ) + new PVHuePicker( item, m_Vendor, from ).SendTo( state ); + } + } + else + { + cat -= 100; + + if ( cat < Categories.Length && cat >= 0 ) + { + Item item = null; + + List items = m_Vendor.Items; + + for ( int i = 0; item == null && i < items.Count; ++i ) + { + Item checkitem = items[i]; + Type type = checkitem.GetType(); + + for ( int j = 0; item == null && j < Categories[cat].Entries.Length; ++j ) + { + if ( type == Categories[cat].Entries[j].Type ) + item = checkitem; + } + } + + if ( item != null ) + item.Delete(); + + from.SendGump( new PlayerVendorCustomizeGump( m_Vendor, from ) ); + } + } + } + } + } + + private class PVHuePicker : HuePicker + { + private Item m_Item; + private Mobile m_Vendor; + private Mobile m_Mob; + + public PVHuePicker( Item item, Mobile v, Mobile from ) : base( (item.Layer == Layer.Hair || item.Layer == Layer.FacialHair) ? 0xFAB : item.ItemID ) + { + m_Vendor = v; + m_Item = item; + m_Mob = from; + } + + public override void OnResponse( int hue ) + { + if ( m_Item.Deleted ) + return; + + if ( m_Vendor is PlayerVendor && !((PlayerVendor)m_Vendor).CanInteractWith( m_Mob, true ) ) + return; + + if ( m_Vendor is PlayerBarkeeper && !((PlayerBarkeeper)m_Vendor).IsOwner( m_Mob ) ) + return; + + m_Item.Hue = hue; + m_Mob.SendGump( new PlayerVendorCustomizeGump( m_Vendor, m_Mob ) ); + } + } + } + + public class NewPlayerVendorCustomizeGump : Gump + { + private PlayerVendor m_Vendor; + + private class HairOrBeard + { + private int m_ItemID; + private int m_Name; + + public int ItemID{ get{ return m_ItemID; } } + public int Name{ get{ return m_Name; } } + + public HairOrBeard( int itemID, int name ) + { + m_ItemID = itemID; + m_Name = name; + } + } + + private static HairOrBeard[] m_HairStyles = new HairOrBeard[] + { + new HairOrBeard( 0x203B, 1011052 ), // Short + new HairOrBeard( 0x203C, 1011053 ), // Long + new HairOrBeard( 0x203D, 1011054 ), // Ponytail + new HairOrBeard( 0x2044, 1011055 ), // Mohawk + new HairOrBeard( 0x2045, 1011047 ), // Pageboy + new HairOrBeard( 0x204A, 1011050 ), // Topknot + new HairOrBeard( 0x2047, 1011396 ), // Curly + new HairOrBeard( 0x2048, 1011048 ), // Receding + new HairOrBeard( 0x2049, 1011049 ) // 2-tails + }; + + private static HairOrBeard[] m_BeardStyles = new HairOrBeard[] + { + new HairOrBeard( 0x2041, 1011062 ), // Mustache + new HairOrBeard( 0x203F, 1011060 ), // Short beard + new HairOrBeard( 0x204B, 1015321 ), // Short Beard & Moustache + new HairOrBeard( 0x203E, 1011061 ), // Long beard + new HairOrBeard( 0x204C, 1015322 ), // Long Beard & Moustache + new HairOrBeard( 0x2040, 1015323 ), // Goatee + new HairOrBeard( 0x204D, 1011401 ) // Vandyke + }; + + public NewPlayerVendorCustomizeGump( PlayerVendor vendor ) : base( 50, 50 ) + { + m_Vendor = vendor; + + AddBackground( 0, 0, 370, 370, 0x13BE ); + + AddImageTiled( 10, 10, 350, 20, 0xA40 ); + AddImageTiled( 10, 40, 350, 20, 0xA40 ); + AddImageTiled( 10, 70, 350, 260, 0xA40 ); + AddImageTiled( 10, 340, 350, 20, 0xA40 ); + + AddAlphaRegion( 10, 10, 350, 350 ); + + AddHtmlLocalized( 10, 12, 350, 18, 1011356, 0x7FFF, false, false ); //
VENDOR CUSTOMIZATION MENU
+ + AddHtmlLocalized( 10, 42, 150, 18, 1062459, 0x421F, false, false ); //
HAIR
+ + for ( int i = 0; i < m_HairStyles.Length; i++ ) + { + HairOrBeard hair = m_HairStyles[i]; + + AddButton( 10, 70 + i * 20, 0xFA5, 0xFA7, 0x100 | i, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 72 + i * 20, 110, 18, hair.Name, 0x7FFF, false, false ); + } + + AddButton( 10, 70 + m_HairStyles.Length * 20, 0xFB1, 0xFB3, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 72 + m_HairStyles.Length * 20, 110, 18, 1011403, 0x7FFF, false, false ); // Remove + + AddButton( 10, 70 + (m_HairStyles.Length + 1) * 20, 0xFA5, 0xFA7, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 72 + (m_HairStyles.Length + 1) * 20, 110, 18, 1011402, 0x7FFF, false, false ); // Color + + if ( vendor.Female ) + { + AddButton( 160, 290, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 195, 292, 160, 18, 1015327, 0x7FFF, false, false ); // Male + + AddHtmlLocalized( 195, 312, 160, 18, 1015328, 0x421F, false, false ); // Female + } + else + { + AddHtmlLocalized( 160, 42, 210, 18, 1062460, 0x421F, false, false ); //
BEARD
+ + for ( int i = 0; i < m_BeardStyles.Length; i++ ) + { + HairOrBeard beard = m_BeardStyles[i]; + + AddButton( 160, 70 + i * 20, 0xFA5, 0xFA7, 0x200 | i, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 195, 72 + i * 20, 160, 18, beard.Name, 0x7FFF, false, false ); + } + + AddButton( 160, 70 + m_BeardStyles.Length * 20, 0xFB1, 0xFB3, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 195, 72 + m_BeardStyles.Length * 20, 160, 18, 1011403, 0x7FFF, false, false ); // Remove + + AddButton( 160, 70 + (m_BeardStyles.Length + 1) * 20, 0xFA5, 0xFA7, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 195, 72 + (m_BeardStyles.Length + 1) * 20, 160, 18, 1011402, 0x7FFF, false, false ); // Color + + AddHtmlLocalized( 195, 292, 160, 18, 1015327, 0x421F, false, false ); // Male + + AddButton( 160, 310, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 195, 312, 160, 18, 1015328, 0x7FFF, false, false ); // Female + } + + AddButton( 10, 340, 0xFA5, 0xFA7, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 342, 305, 18, 1060675, 0x7FFF, false, false ); // CLOSE + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + + if ( !m_Vendor.CanInteractWith( from, true ) ) + return; + + switch ( info.ButtonID ) + { + case 0: // CLOSE + { + m_Vendor.Direction = m_Vendor.GetDirectionTo( from ); + m_Vendor.Animate( 32, 5, 1, true, false, 0 ); // bow + m_Vendor.SayTo( from, 1043310 + Utility.Random( 12 ) ); // a little random speech + + break; + } + case 1: // Female/Male + { + if ( m_Vendor.Female ) + { + m_Vendor.BodyValue = 400; + m_Vendor.Female = false; + } + else + { + m_Vendor.BodyValue = 401; + m_Vendor.Female = true; + + m_Vendor.FacialHairItemID = 0; + } + + from.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + + break; + } + case 2: // Remove hair + { + m_Vendor.HairItemID = 0; + + from.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + + break; + } + case 3: // Color hair + { + if ( m_Vendor.HairItemID > 0 ) + { + new PVHuePicker( m_Vendor, false, from ).SendTo( from.NetState ); + } + else + { + from.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + } + + break; + } + case 4: // Remove beard + { + m_Vendor.FacialHairItemID = 0; + + from.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + + break; + } + case 5: // Color beard + { + if ( m_Vendor.FacialHairItemID > 0 ) + { + new PVHuePicker( m_Vendor, true, from ).SendTo( from.NetState ); + } + else + { + from.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + } + + break; + } + default: + { + int hairhue = 0; + + if ( (info.ButtonID & 0x100) != 0 ) // Hair style selected + { + int index = info.ButtonID & 0xFF; + + if ( index >= m_HairStyles.Length ) + return; + + HairOrBeard hairStyle = m_HairStyles[index]; + + hairhue = m_Vendor.HairHue; + + m_Vendor.HairItemID = 0; + m_Vendor.ProcessDelta(); + + m_Vendor.HairItemID = hairStyle.ItemID; + + m_Vendor.HairHue = hairhue; + + from.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + } + else if ( (info.ButtonID & 0x200) != 0 ) // Beard style selected + { + if ( m_Vendor.Female ) + return; + + int index = info.ButtonID & 0xFF; + + if ( index >= m_BeardStyles.Length ) + return; + + HairOrBeard beardStyle = m_BeardStyles[index]; + + hairhue = m_Vendor.FacialHairHue; + + m_Vendor.FacialHairItemID = 0; + m_Vendor.ProcessDelta(); + + m_Vendor.FacialHairItemID = beardStyle.ItemID; + + m_Vendor.FacialHairHue = hairhue; + + from.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + } + + break; + } + } + } + + private class PVHuePicker : HuePicker + { + private PlayerVendor m_Vendor; + private bool m_FacialHair; + private Mobile m_From; + + public PVHuePicker( PlayerVendor vendor, bool facialHair, Mobile from ) : base( 0xFAB ) + { + m_Vendor = vendor; + m_FacialHair = facialHair; + m_From = from; + } + + public override void OnResponse( int hue ) + { + if ( !m_Vendor.CanInteractWith( m_From, true ) ) + return; + + if ( m_FacialHair ) + m_Vendor.FacialHairHue = hue; + else + m_Vendor.HairHue = hue; + + m_From.SendGump( new NewPlayerVendorCustomizeGump( m_Vendor ) ); + } + } + } +} diff --git a/Scripts/Gumps/PolymorphGump.cs b/Scripts/Gumps/PolymorphGump.cs new file mode 100644 index 0000000..59f1f84 --- /dev/null +++ b/Scripts/Gumps/PolymorphGump.cs @@ -0,0 +1,243 @@ +using System; +using Server; +using Server.Network; +using Server.Targets; +using Server.Spells; +using Server.Spells.Seventh; + +namespace Server.Gumps +{ + public class PolymorphEntry + { + public static readonly PolymorphEntry Chicken = new PolymorphEntry( 208, 1015236, 15, 10 ); + public static readonly PolymorphEntry Dog = new PolymorphEntry( 217, 1015237, 17, 10 ); + public static readonly PolymorphEntry Wolf = new PolymorphEntry( 225, 1015238, 18, 10 ); + public static readonly PolymorphEntry Panther = new PolymorphEntry( 214, 1015239, 20, 14 ); + public static readonly PolymorphEntry Gorilla = new PolymorphEntry( 29, 1015240, 23, 10 ); + public static readonly PolymorphEntry BlackBear = new PolymorphEntry( 211, 1015241, 22, 10 ); + public static readonly PolymorphEntry GrizzlyBear = new PolymorphEntry( 212, 1015242, 22, 12 ); + public static readonly PolymorphEntry PolarBear = new PolymorphEntry( 213, 1015243, 26, 10 ); + public static readonly PolymorphEntry HumanMale = new PolymorphEntry( 0x190, 1015244, 29, 8 ); + public static readonly PolymorphEntry HumanFemale = new PolymorphEntry( 0x191, 1015254, 29, 10 ); + public static readonly PolymorphEntry Slime = new PolymorphEntry( 51, 1015246, 5, 10 ); + public static readonly PolymorphEntry Orc = new PolymorphEntry( 17, 1015247, 29, 10 ); + public static readonly PolymorphEntry LizardMan = new PolymorphEntry( 33, 1015248, 26, 10 ); + public static readonly PolymorphEntry Gargoyle = new PolymorphEntry( 4, 1015249, 22, 10 ); + public static readonly PolymorphEntry Ogre = new PolymorphEntry( 1, 1015250, 24, 9 ); + public static readonly PolymorphEntry Troll = new PolymorphEntry( 54, 1015251, 25, 9 ); + public static readonly PolymorphEntry Ettin = new PolymorphEntry( 2, 1015252, 25, 8 ); + public static readonly PolymorphEntry Daemon = new PolymorphEntry( 9, 1015253, 25, 8 ); + + + private int m_Body, m_Num, m_X, m_Y; + + private PolymorphEntry( int Body, int LocNum, int X, int Y ) + { + m_Body = Body; + m_Num = LocNum; + m_X = X; + m_Y = Y; + } + + public int BodyID { get { return m_Body; } } + public int LocNumber{ get { return m_Num; } } + public int X{ get{ return m_X; } } + public int Y{ get{ return m_Y; } } + } + + + public class PolymorphGump : Gump + { + private class PolymorphCategory + { + private int m_Num; + private PolymorphEntry[] m_Entries; + + public PolymorphCategory( int num, params PolymorphEntry[] entries ) + { + m_Num = num; + m_Entries = entries; + } + + public PolymorphEntry[] Entries{ get { return m_Entries; } } + public int LocNumber{ get { return m_Num; } } + } + + private static PolymorphCategory[] Categories = new PolymorphCategory[] + { + new PolymorphCategory( 1015235, // Animals + PolymorphEntry.Chicken, + PolymorphEntry.Dog, + PolymorphEntry.Wolf, + PolymorphEntry.Panther, + PolymorphEntry.Gorilla, + PolymorphEntry.BlackBear, + PolymorphEntry.GrizzlyBear, + PolymorphEntry.PolarBear, + PolymorphEntry.HumanMale ), + + new PolymorphCategory( 1015245, // Monsters + PolymorphEntry.Slime, + PolymorphEntry.Orc, + PolymorphEntry.LizardMan, + PolymorphEntry.Gargoyle, + PolymorphEntry.Ogre, + PolymorphEntry.Troll, + PolymorphEntry.Ettin, + PolymorphEntry.Daemon, + PolymorphEntry.HumanFemale ) + }; + + + private Mobile m_Caster; + private Item m_Scroll; + + public PolymorphGump( Mobile caster, Item scroll ) : base( 50, 50 ) + { + m_Caster = caster; + m_Scroll = scroll; + + int x,y; + AddPage( 0 ); + AddBackground( 0, 0, 585, 393, 5054 ); + AddBackground( 195, 36, 387, 275, 3000 ); + AddHtmlLocalized( 0, 0, 510, 18, 1015234, false, false ); //
Polymorph Selection Menu
+ AddHtmlLocalized( 60, 355, 150, 18, 1011036, false, false ); // OKAY + AddButton( 25, 355, 4005, 4007, 1, GumpButtonType.Reply, 1 ); + AddHtmlLocalized( 320, 355, 150, 18, 1011012, false, false ); // CANCEL + AddButton( 285, 355, 4005, 4007, 0, GumpButtonType.Reply, 2 ); + + y = 35; + for ( int i=0;i 0 ) + { + int cnum = info.Switches[0]; + int cat = cnum%256; + int ent = cnum>>8; + + if ( cat >= 0 && cat < Categories.Length ) + { + if ( ent >= 0 && ent < Categories[cat].Entries.Length ) + { + Spell spell = new PolymorphSpell( m_Caster, m_Scroll, Categories[cat].Entries[ent].BodyID ); + spell.Cast(); + } + } + } + } + } + + public class NewPolymorphGump : Gump + { + private static readonly PolymorphEntry[] m_Entries = new PolymorphEntry[] + { + PolymorphEntry.Chicken, + PolymorphEntry.Dog, + PolymorphEntry.Wolf, + PolymorphEntry.Panther, + PolymorphEntry.Gorilla, + PolymorphEntry.BlackBear, + PolymorphEntry.GrizzlyBear, + PolymorphEntry.PolarBear, + PolymorphEntry.HumanMale, + PolymorphEntry.HumanFemale, + PolymorphEntry.Slime, + PolymorphEntry.Orc, + PolymorphEntry.LizardMan, + PolymorphEntry.Gargoyle, + PolymorphEntry.Ogre, + PolymorphEntry.Troll, + PolymorphEntry.Ettin, + PolymorphEntry.Daemon + }; + + private Mobile m_Caster; + private Item m_Scroll; + + public NewPolymorphGump( Mobile caster, Item scroll ) : base( 0, 0 ) + { + m_Caster = caster; + m_Scroll = scroll; + + AddPage( 0 ); + + AddBackground( 0, 0, 520, 404, 0x13BE ); + AddImageTiled( 10, 10, 500, 20, 0xA40 ); + AddImageTiled( 10, 40, 500, 324, 0xA40 ); + AddImageTiled( 10, 374, 500, 20, 0xA40 ); + AddAlphaRegion( 10, 10, 500, 384 ); + + AddHtmlLocalized( 14, 12, 500, 20, 1015234, 0x7FFF, false, false ); //
Polymorph Selection Menu
+ + AddButton( 10, 374, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 376, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL + + for ( int i = 0; i < m_Entries.Length; i++ ) + { + PolymorphEntry entry = m_Entries[i]; + + int page = i / 10 + 1; + int pos = i % 10; + + if ( pos == 0 ) + { + if ( page > 1 ) + { + AddButton( 400, 374, 0xFA5, 0xFA7, 0, GumpButtonType.Page, page ); + AddHtmlLocalized( 440, 376, 60, 20, 1043353, 0x7FFF, false, false ); // Next + } + + AddPage( page ); + + if ( page > 1 ) + { + AddButton( 300, 374, 0xFAE, 0xFB0, 0, GumpButtonType.Page, 1 ); + AddHtmlLocalized( 340, 376, 60, 20, 1011393, 0x7FFF, false, false ); // Back + } + } + + int x = ( pos % 2 == 0 ) ? 14 : 264; + int y = ( pos / 2 ) * 64 + 44; + + AddHtmlLocalized( x + 84, y, 250, 60, entry.LocNumber, 0x7FFF, false, false ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int idx = info.ButtonID - 1; + + if ( idx < 0 || idx >= m_Entries.Length ) + return; + + Spell spell = new PolymorphSpell( m_Caster, m_Scroll, m_Entries[idx].BodyID ); + spell.Cast(); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/PropsConfig.cs b/Scripts/Gumps/Properties/PropsConfig.cs new file mode 100644 index 0000000..1750d1f --- /dev/null +++ b/Scripts/Gumps/Properties/PropsConfig.cs @@ -0,0 +1,42 @@ +using System; +using Server; + +namespace Server.Gumps +{ + public class PropsConfig + { + public static readonly bool OldStyle = false; + + public static readonly int GumpOffsetX = 30; + public static readonly int GumpOffsetY = 30; + + public static readonly int TextHue = 0; + public static readonly int TextOffsetX = 2; + + public static readonly int OffsetGumpID = 0x0A40; // Pure black + public static readonly int HeaderGumpID = OldStyle ? 0x0BBC : 0x0E14; // Light offwhite, textured : Dark navy blue, textured + public static readonly int EntryGumpID = 0x0BBC; // Light offwhite, textured + public static readonly int BackGumpID = 0x13BE; // Gray slate/stoney + public static readonly int SetGumpID = OldStyle ? 0x0000 : 0x0E14; // Empty : Dark navy blue, textured + + public static readonly int SetWidth = 20; + public static readonly int SetOffsetX = OldStyle ? 4 : 2, SetOffsetY = 2; + public static readonly int SetButtonID1 = 0x15E1; // Arrow pointing right + public static readonly int SetButtonID2 = 0x15E5; // " pressed + + public static readonly int PrevWidth = 20; + public static readonly int PrevOffsetX = 2, PrevOffsetY = 2; + public static readonly int PrevButtonID1 = 0x15E3; // Arrow pointing left + public static readonly int PrevButtonID2 = 0x15E7; // " pressed + + public static readonly int NextWidth = 20; + public static readonly int NextOffsetX = 2, NextOffsetY = 2; + public static readonly int NextButtonID1 = 0x15E1; // Arrow pointing right + public static readonly int NextButtonID2 = 0x15E5; // " pressed + + public static readonly int OffsetSize = 1; + + public static readonly int EntryHeight = 20; + public static readonly int BorderSize = 10; + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/PropsGump.cs b/Scripts/Gumps/Properties/PropsGump.cs new file mode 100644 index 0000000..4cc1a6f --- /dev/null +++ b/Scripts/Gumps/Properties/PropsGump.cs @@ -0,0 +1,761 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Commands.Generic; +using Server.Network; +using Server.Menus; +using Server.Menus.Questions; +using Server.Targeting; +using CPA = Server.CommandPropertyAttribute; + +namespace Server.Gumps +{ + public class PropertiesGump : Gump + { + private ArrayList m_List; + private int m_Page; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + + public static readonly bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static bool PrevLabel = OldStyle, NextLabel = OldStyle; + + private static readonly int PrevLabelOffsetX = PrevWidth + 1; + private static readonly int PrevLabelOffsetY = 0; + + private static readonly int NextLabelOffsetX = -29; + private static readonly int NextLabelOffsetY = 0; + + private static readonly int NameWidth = 107; + private static readonly int ValueWidth = 128; + + private static readonly int EntryCount = 15; + + private static readonly int TypeWidth = NameWidth + OffsetSize + ValueWidth; + + private static readonly int TotalWidth = OffsetSize + NameWidth + OffsetSize + ValueWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (EntryCount + 1)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + public PropertiesGump( Mobile mobile, object o ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Mobile = mobile; + m_Object = o; + m_List = BuildList(); + + Initialize( 0 ); + } + + public PropertiesGump( Mobile mobile, object o, Stack stack, StackEntry parent ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_List = BuildList(); + + if ( parent != null ) + { + if ( m_Stack == null ) + m_Stack = new Stack(); + + m_Stack.Push( parent ); + } + + Initialize( 0 ); + } + + public PropertiesGump( Mobile mobile, object o, Stack stack, ArrayList list, int page ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Mobile = mobile; + m_Object = o; + m_List = list; + m_Stack = stack; + + Initialize( page ); + } + + private void Initialize( int page ) + { + m_Page = page; + + int count = m_List.Count - (page * EntryCount); + + if ( count < 0 ) + count = 0; + else if ( count > EntryCount ) + count = EntryCount; + + int lastIndex = (page * EntryCount) + count - 1; + + if ( lastIndex >= 0 && lastIndex < m_List.Count && m_List[lastIndex] == null ) + --count; + + int totalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (count + 1)); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BorderSize + totalHeight + BorderSize, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), totalHeight, OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + int emptyWidth = TotalWidth - PrevWidth - NextWidth - (OffsetSize * 4) - (OldStyle ? SetWidth + OffsetSize : 0); + + if ( OldStyle ) + AddImageTiled( x, y, TotalWidth - (OffsetSize * 3) - SetWidth, EntryHeight, HeaderGumpID ); + else + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + if ( page > 0 ) + { + AddButton( x + PrevOffsetX, y + PrevOffsetY, PrevButtonID1, PrevButtonID2, 1, GumpButtonType.Reply, 0 ); + + if ( PrevLabel ) + AddLabel( x + PrevLabelOffsetX, y + PrevLabelOffsetY, TextHue, "Previous" ); + } + + x += PrevWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x - (OldStyle ? OffsetSize : 0), y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0), EntryHeight, HeaderGumpID ); + + x += emptyWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x, y, NextWidth, EntryHeight, HeaderGumpID ); + + if ( (page + 1) * EntryCount < m_List.Count ) + { + AddButton( x + NextOffsetX, y + NextOffsetY, NextButtonID1, NextButtonID2, 2, GumpButtonType.Reply, 1 ); + + if ( NextLabel ) + AddLabel( x + NextLabelOffsetX, y + NextLabelOffsetY, TextHue, "Next" ); + } + + for ( int i = 0, index = page * EntryCount; i < count && index < m_List.Count; ++i, ++index ) + { + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + object o = m_List[index]; + + if ( o == null ) + { + AddImageTiled( x - OffsetSize, y, TotalWidth, EntryHeight, BackGumpID + 4 ); + } + else if ( o is Type ) + { + Type type = (Type)o; + + AddImageTiled( x, y, TypeWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, TypeWidth - TextOffsetX, EntryHeight, TextHue, type.Name ); + x += TypeWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + } + else if ( o is PropertyInfo ) + { + PropertyInfo prop = (PropertyInfo)o; + + AddImageTiled( x, y, NameWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, NameWidth - TextOffsetX, EntryHeight, TextHue, prop.Name ); + x += NameWidth + OffsetSize; + AddImageTiled( x, y, ValueWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, ValueWidth - TextOffsetX, EntryHeight, TextHue, ValueToString( prop ) ); + x += ValueWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + CPA cpa = GetCPA( prop ); + + if ( prop.CanWrite && cpa != null && m_Mobile.AccessLevel >= cpa.WriteLevel && !cpa.ReadOnly ) + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, i + 3, GumpButtonType.Reply, 0 ); + } + } + } + + public static string[] m_BoolNames = new string[]{ "True", "False" }; + public static object[] m_BoolValues = new object[]{ true, false }; + + public static string[] m_PoisonNames = new string[]{ "None", "Lesser", "Regular", "Greater", "Deadly", "Lethal" }; + public static object[] m_PoisonValues = new object[]{ null, Poison.Lesser, Poison.Regular, Poison.Greater, Poison.Deadly, Poison.Lethal }; + + public class StackEntry + { + public object m_Object; + public PropertyInfo m_Property; + + public StackEntry( object obj, PropertyInfo prop ) + { + m_Object = obj; + m_Property = prop; + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + + if ( !BaseCommand.IsAccessible( from, m_Object ) ) + { + from.SendMessage( "You may no longer access their properties." ); + return; + } + + switch ( info.ButtonID ) + { + case 0: // Closed + { + if ( m_Stack != null && m_Stack.Count > 0 ) + { + StackEntry entry = (StackEntry)m_Stack.Pop(); + + from.SendGump( new PropertiesGump( from, entry.m_Object, m_Stack, null ) ); + } + + break; + } + case 1: // Previous + { + if ( m_Page > 0 ) + from.SendGump( new PropertiesGump( from, m_Object, m_Stack, m_List, m_Page - 1 ) ); + + break; + } + case 2: // Next + { + if ( (m_Page + 1) * EntryCount < m_List.Count ) + from.SendGump( new PropertiesGump( from, m_Object, m_Stack, m_List, m_Page + 1 ) ); + + break; + } + default: + { + int index = (m_Page * EntryCount) + (info.ButtonID - 3); + + if ( index >= 0 && index < m_List.Count ) + { + PropertyInfo prop = m_List[index] as PropertyInfo; + + if ( prop == null ) + return; + + CPA attr = GetCPA( prop ); + + if ( !prop.CanWrite || attr == null || from.AccessLevel < attr.WriteLevel || attr.ReadOnly ) + return; + + Type type = prop.PropertyType; + + if ( IsType( type, typeofMobile ) || IsType( type, typeofItem ) ) + from.SendGump( new SetObjectGump( prop, from, m_Object, m_Stack, type, m_Page, m_List ) ); + else if ( IsType( type, typeofType ) ) + from.Target = new SetObjectTarget( prop, from, m_Object, m_Stack, type, m_Page, m_List ); + else if ( IsType( type, typeofPoint3D ) ) + from.SendGump( new SetPoint3DGump( prop, from, m_Object, m_Stack, m_Page, m_List ) ); + else if ( IsType( type, typeofPoint2D ) ) + from.SendGump( new SetPoint2DGump( prop, from, m_Object, m_Stack, m_Page, m_List ) ); + else if ( IsType( type, typeofTimeSpan ) ) + from.SendGump( new SetTimeSpanGump( prop, from, m_Object, m_Stack, m_Page, m_List ) ); + else if ( IsCustomEnum( type ) ) + from.SendGump( new SetCustomEnumGump( prop, from, m_Object, m_Stack, m_Page, m_List, GetCustomEnumNames( type ) ) ); + else if ( IsType( type, typeofEnum ) ) + from.SendGump( new SetListOptionGump( prop, from, m_Object, m_Stack, m_Page, m_List, Enum.GetNames( type ), GetObjects( Enum.GetValues( type ) ) ) ); + else if ( IsType( type, typeofBool ) ) + from.SendGump( new SetListOptionGump( prop, from, m_Object, m_Stack, m_Page, m_List, m_BoolNames, m_BoolValues ) ); + else if ( IsType( type, typeofString ) || IsType( type, typeofReal ) || IsType( type, typeofNumeric ) ) + from.SendGump( new SetGump( prop, from, m_Object, m_Stack, m_Page, m_List ) ); + else if ( IsType( type, typeofPoison ) ) + from.SendGump( new SetListOptionGump( prop, from, m_Object, m_Stack, m_Page, m_List, m_PoisonNames, m_PoisonValues ) ); + else if ( IsType( type, typeofMap ) ) + from.SendGump( new SetListOptionGump( prop, from, m_Object, m_Stack, m_Page, m_List, Map.GetMapNames(), Map.GetMapValues() ) ); + else if ( IsType( type, typeofSkills ) && m_Object is Mobile ) + { + from.SendGump( new PropertiesGump( from, m_Object, m_Stack, m_List, m_Page ) ); + from.SendGump( new SkillsGump( from, (Mobile)m_Object ) ); + } + else if( HasAttribute( type, typeofPropertyObject, true ) ) + { + object obj = prop.GetValue( m_Object, null ); + + if ( obj != null ) + from.SendGump( new PropertiesGump( from, obj, m_Stack, new StackEntry( m_Object, prop ) ) ); + else + from.SendGump( new PropertiesGump( from, m_Object, m_Stack, m_List, m_Page ) ); + } + } + + break; + } + } + } + + private static object[] GetObjects( Array a ) + { + object[] list = new object[a.Length]; + + for ( int i = 0; i < list.Length; ++i ) + list[i] = a.GetValue( i ); + + return list; + } + + private static bool IsCustomEnum( Type type ) + { + return type.IsDefined( typeofCustomEnum, false ); + } + + public static void OnValueChanged( object obj, PropertyInfo prop, Stack stack ) + { + if ( stack == null || stack.Count == 0 ) + return; + + if ( !prop.PropertyType.IsValueType ) + return; + + StackEntry peek = (StackEntry)stack.Peek(); + + if ( peek.m_Property.CanWrite ) + peek.m_Property.SetValue( peek.m_Object, obj, null ); + } + + private static string[] GetCustomEnumNames( Type type ) + { + object[] attrs = type.GetCustomAttributes( typeofCustomEnum, false ); + + if ( attrs.Length == 0 ) + return new string[0]; + + CustomEnumAttribute ce = attrs[0] as CustomEnumAttribute; + + if ( ce == null ) + return new string[0]; + + return ce.Names; + } + + private static bool HasAttribute( Type type, Type check, bool inherit ) + { + object[] objs = type.GetCustomAttributes( check, inherit ); + + return ( objs != null && objs.Length > 0 ); + } + + private static bool IsType( Type type, Type check ) + { + return type == check || type.IsSubclassOf( check ); + } + + private static bool IsType( Type type, Type[] check ) + { + for ( int i = 0; i < check.Length; ++i ) + if ( IsType( type, check[i] ) ) + return true; + + return false; + } + + private static Type typeofMobile = typeof( Mobile ); + private static Type typeofItem = typeof( Item ); + private static Type typeofType = typeof( Type ); + private static Type typeofPoint3D = typeof( Point3D ); + private static Type typeofPoint2D = typeof( Point2D ); + private static Type typeofTimeSpan = typeof( TimeSpan ); + private static Type typeofCustomEnum = typeof( CustomEnumAttribute ); + private static Type typeofEnum = typeof( Enum ); + private static Type typeofBool = typeof( Boolean ); + private static Type typeofString = typeof( String ); + private static Type typeofPoison = typeof( Poison ); + private static Type typeofMap = typeof( Map ); + private static Type typeofSkills = typeof( Skills ); + private static Type typeofPropertyObject = typeof( PropertyObjectAttribute ); + private static Type typeofNoSort = typeof( NoSortAttribute ); + + private static Type[] typeofReal = new Type[] + { + typeof( Single ), + typeof( Double ) + }; + + private static Type[] typeofNumeric = new Type[] + { + typeof( Byte ), + typeof( Int16 ), + typeof( Int32 ), + typeof( Int64 ), + typeof( SByte ), + typeof( UInt16 ), + typeof( UInt32 ), + typeof( UInt64 ) + }; + + private string ValueToString( PropertyInfo prop ) + { + return ValueToString( m_Object, prop ); + } + + public static string ValueToString( object obj, PropertyInfo prop ) + { + try + { + return ValueToString( prop.GetValue( obj, null ) ); + } + catch ( Exception e ) + { + return String.Format( "!{0}!", e.GetType() ); + } + } + + public static string ValueToString( object o ) + { + if ( o == null ) + { + return "-null-"; + } + else if ( o is string ) + { + return String.Format( "\"{0}\"", (string)o ); + } + else if ( o is bool ) + { + return o.ToString(); + } + else if ( o is char ) + { + return String.Format( "0x{0:X} '{1}'", (int)(char)o, (char)o ); + } + else if ( o is Serial ) + { + Serial s = (Serial)o; + + if ( s.IsValid ) + { + if ( s.IsItem ) + { + return String.Format( "(I) 0x{0:X}", s.Value ); + } + else if ( s.IsMobile ) + { + return String.Format( "(M) 0x{0:X}", s.Value ); + } + } + + return String.Format( "(?) 0x{0:X}", s.Value ); + } + else if ( o is byte || o is sbyte || o is short || o is ushort || o is int || o is uint || o is long || o is ulong ) + { + return String.Format( "{0} (0x{0:X})", o ); + } + else if ( o is Mobile ) + { + return String.Format( "(M) 0x{0:X} \"{1}\"", ((Mobile)o).Serial.Value, ((Mobile)o).Name ); + } + else if ( o is Item ) + { + return String.Format( "(I) 0x{0:X}", ((Item)o).Serial ); + } + else if ( o is Type ) + { + return ((Type)o).Name; + } + else + { + return o.ToString(); + } + } + + private ArrayList BuildList() + { + Type type = m_Object.GetType(); + + PropertyInfo[] props = type.GetProperties( BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public ); + + ArrayList groups = GetGroups( type, props ); + ArrayList list = new ArrayList(); + + for ( int i = 0; i < groups.Count; ++i ) + { + DictionaryEntry de = (DictionaryEntry)groups[i]; + ArrayList groupList = (ArrayList)de.Value; + + if ( !HasAttribute( (Type)de.Key, typeofNoSort, false ) ) + groupList.Sort( PropertySorter.Instance ); + + if ( i != 0 ) + list.Add( null ); + + list.Add( de.Key ); + list.AddRange( groupList ); + } + + return list; + } + + private static Type typeofCPA = typeof( CPA ); + private static Type typeofObject = typeof( object ); + + private static CPA GetCPA( PropertyInfo prop ) + { + object[] attrs = prop.GetCustomAttributes( typeofCPA, false ); + + if ( attrs.Length > 0 ) + return attrs[0] as CPA; + else + return null; + } + + private ArrayList GetGroups( Type objectType, PropertyInfo[] props ) + { + Hashtable groups = new Hashtable(); + + for ( int i = 0; i < props.Length; ++i ) + { + PropertyInfo prop = props[i]; + + if ( prop.CanRead ) + { + CPA attr = GetCPA( prop ); + + if ( attr != null && m_Mobile.AccessLevel >= attr.ReadLevel ) + { + Type type = prop.DeclaringType; + + while ( true ) + { + Type baseType = type.BaseType; + + if ( baseType == null || baseType == typeofObject ) + break; + + if ( baseType.GetProperty( prop.Name, prop.PropertyType ) != null ) + type = baseType; + else + break; + } + + ArrayList list = (ArrayList)groups[type]; + + if ( list == null ) + groups[type] = list = new ArrayList(); + + list.Add( prop ); + } + } + } + + ArrayList sorted = new ArrayList( groups ); + + sorted.Sort( new GroupComparer( objectType ) ); + + return sorted; + } + + public static object GetObjectFromString( Type t, string s ) + { + if ( t == typeof( string ) ) + { + return s; + } + else if ( t == typeof( byte ) || t == typeof( sbyte ) || t == typeof( short ) || t == typeof( ushort ) || t == typeof( int ) || t == typeof( uint ) || t == typeof( long ) || t == typeof( ulong ) ) + { + if ( s.StartsWith( "0x" ) ) + { + if ( t == typeof( ulong ) || t == typeof( uint ) || t == typeof( ushort ) || t == typeof( byte ) ) + { + return Convert.ChangeType( Convert.ToUInt64( s.Substring( 2 ), 16 ), t ); + } + else + { + return Convert.ChangeType( Convert.ToInt64( s.Substring( 2 ), 16 ), t ); + } + } + else + { + return Convert.ChangeType( s, t ); + } + } + else if ( t == typeof( double ) || t == typeof( float ) ) + { + return Convert.ChangeType( s, t ); + } + else if ( t.IsDefined( typeof( ParsableAttribute ), false ) ) + { + MethodInfo parseMethod = t.GetMethod( "Parse", new Type[]{ typeof( string ) } ); + + return parseMethod.Invoke( null, new object[]{ s } ); + } + + throw new Exception( "bad" ); + } + + private static string GetStringFromObject( object o ) + { + if ( o == null ) + { + return "-null-"; + } + else if ( o is string ) + { + return String.Format( "\"{0}\"", (string)o ); + } + else if ( o is bool ) + { + return o.ToString(); + } + else if ( o is char ) + { + return String.Format( "0x{0:X} '{1}'", (int)(char)o, (char)o ); + } + else if ( o is Serial ) + { + Serial s = (Serial)o; + + if ( s.IsValid ) + { + if ( s.IsItem ) + { + return String.Format( "(I) 0x{0:X}", s.Value ); + } + else if ( s.IsMobile ) + { + return String.Format( "(M) 0x{0:X}", s.Value ); + } + } + + return String.Format( "(?) 0x{0:X}", s.Value ); + } + else if ( o is byte || o is sbyte || o is short || o is ushort || o is int || o is uint || o is long || o is ulong ) + { + return String.Format( "{0} (0x{0:X})", o ); + } + else if ( o is Mobile ) + { + return String.Format( "(M) 0x{0:X} \"{1}\"", ((Mobile)o).Serial.Value, ((Mobile)o).Name ); + } + else if ( o is Item ) + { + return String.Format( "(I) 0x{0:X}", ((Item)o).Serial ); + } + else if ( o is Type ) + { + return ((Type)o).Name; + } + else + { + return o.ToString(); + } + } + + private class PropertySorter : IComparer + { + public static readonly PropertySorter Instance = new PropertySorter(); + + private PropertySorter() + { + } + + public int Compare( object x, object y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + PropertyInfo a = x as PropertyInfo; + PropertyInfo b = y as PropertyInfo; + + if ( a == null || b == null ) + throw new ArgumentException(); + + return a.Name.CompareTo( b.Name ); + } + } + + private class GroupComparer : IComparer + { + private Type m_Start; + + public GroupComparer( Type start ) + { + m_Start = start; + } + + private static Type typeofObject = typeof( Object ); + + private int GetDistance( Type type ) + { + Type current = m_Start; + + int dist; + + for ( dist = 0; current != null && current != typeofObject && current != type; ++dist ) + current = current.BaseType; + + return dist; + } + + public int Compare( object x, object y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + if ( !(x is DictionaryEntry) || !(y is DictionaryEntry) ) + throw new ArgumentException(); + + DictionaryEntry de1 = (DictionaryEntry)x; + DictionaryEntry de2 = (DictionaryEntry)y; + + Type a = (Type)de1.Key; + Type b = (Type)de2.Key; + + return GetDistance( a ).CompareTo( GetDistance( b ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetBodyGump.cs b/Scripts/Gumps/Properties/SetBodyGump.cs new file mode 100644 index 0000000..a172b38 --- /dev/null +++ b/Scripts/Gumps/Properties/SetBodyGump.cs @@ -0,0 +1,295 @@ +using System; +using System.Reflection; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Network; +using Server.HuePickers; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetBodyGump : Gump + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private int m_Page; + private ArrayList m_List; + private int m_OurPage; + private ArrayList m_OurList; + private ModelBodyType m_OurType; + + private const int LabelColor32 = 0xFFFFFF; + private const int SelectedColor32 = 0x8080FF; + private const int TextColor32 = 0xFFFFFF; + + public SetBodyGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list ) + : this( prop, mobile, o, stack, page, list, 0, null, ModelBodyType.Invalid ) + { + } + + public string Center( string text ) + { + return String.Format( "
{0}
", text ); + } + + public string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + + public void AddTypeButton( int x, int y, int buttonID, string text, ModelBodyType type ) + { + bool isSelection = (m_OurType == type); + + AddButton( x, y - 1, isSelection ? 4006 : 4005, 4007, buttonID, GumpButtonType.Reply, 0 ); + AddHtml( x + 35, y, 200, 20, Color( text, isSelection ? SelectedColor32 : LabelColor32 ), false, false ); + } + + public SetBodyGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list, int ourPage, ArrayList ourList, ModelBodyType ourType ) + : base( 20, 30 ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = page; + m_List = list; + m_OurPage = ourPage; + m_OurList = ourList; + m_OurType = ourType; + + AddPage( 0 ); + + AddBackground( 0, 0, 525, 328, 5054 ); + + AddImageTiled( 10, 10, 505, 20, 0xA40 ); + AddAlphaRegion( 10, 10, 505, 20 ); + + AddImageTiled( 10, 35, 505, 283, 0xA40 ); + AddAlphaRegion( 10, 35, 505, 283 ); + + AddTypeButton( 10, 10, 1, "Monster", ModelBodyType.Monsters ); + AddTypeButton( 130, 10, 2, "Animal", ModelBodyType.Animals ); + AddTypeButton( 250, 10, 3, "Marine", ModelBodyType.Sea ); + AddTypeButton( 370, 10, 4, "Human", ModelBodyType.Human ); + + AddImage( 480, 12, 0x25EA ); + AddImage( 497, 12, 0x25E6 ); + + if( ourList == null ) + { + AddLabel( 15, 40, 0x480, "Choose a body type above." ); + } + else if( ourList.Count == 0 ) + { + AddLabel( 15, 40, 0x480, "The server must have UO:3D installed to use this feature." ); + } + else + { + for( int i = 0, index = (ourPage * 12); i < 12 && index >= 0 && index < ourList.Count; ++i, ++index ) + { + InternalEntry entry = (InternalEntry)ourList[index]; + int itemID = entry.ItemID; + + Rectangle2D bounds = ItemBounds.Table[itemID & 0x3FFF]; + + int x = 15 + ((i % 4) * 125); + int y = 40 + ((i / 4) * 93); + + AddItem( x + ((120 - bounds.Width) / 2) - bounds.X, y + ((69 - bounds.Height) / 2) - bounds.Y, itemID ); + AddButton( x + 6, y + 66, 0x98D, 0x98D, 7 + index, GumpButtonType.Reply, 0 ); + + x += 6; + y += 67; + + AddHtml( x + 0, y - 1, 108, 21, Center( entry.DisplayName ), false, false ); + AddHtml( x + 0, y + 1, 108, 21, Center( entry.DisplayName ), false, false ); + AddHtml( x - 1, y + 0, 108, 21, Center( entry.DisplayName ), false, false ); + AddHtml( x + 1, y + 0, 108, 21, Center( entry.DisplayName ), false, false ); + AddHtml( x + 0, y + 0, 108, 21, Color( Center( entry.DisplayName ), TextColor32 ), false, false ); + } + + if( ourPage > 0 ) + AddButton( 480, 12, 0x15E3, 0x15E7, 5, GumpButtonType.Reply, 0 ); + + if( (ourPage + 1) * 12 < ourList.Count ) + AddButton( 497, 12, 0x15E1, 0x15E5, 6, GumpButtonType.Reply, 0 ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int index = info.ButtonID - 1; + + if( index == -1 ) + { + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + else if( index >= 0 && index < 4 ) + { + if( m_Monster == null ) + LoadLists(); + + ModelBodyType type; + ArrayList list; + + switch( index ) + { + default: + case 0: type = ModelBodyType.Monsters; list = m_Monster; break; + case 1: type = ModelBodyType.Animals; list = m_Animal; break; + case 2: type = ModelBodyType.Sea; list = m_Sea; break; + case 3: type = ModelBodyType.Human; list = m_Human; break; + } + + m_Mobile.SendGump( new SetBodyGump( m_Property, m_Mobile, m_Object, m_Stack, m_Page, m_List, 0, list, type ) ); + } + else if( m_OurList != null ) + { + index -= 4; + + if( index == 0 && m_OurPage > 0 ) + { + m_Mobile.SendGump( new SetBodyGump( m_Property, m_Mobile, m_Object, m_Stack, m_Page, m_List, m_OurPage - 1, m_OurList, m_OurType ) ); + } + else if( index == 1 && ((m_OurPage + 1) * 12) < m_OurList.Count ) + { + m_Mobile.SendGump( new SetBodyGump( m_Property, m_Mobile, m_Object, m_Stack, m_Page, m_List, m_OurPage + 1, m_OurList, m_OurType ) ); + } + else + { + index -= 2; + + if( index >= 0 && index < m_OurList.Count ) + { + try + { + InternalEntry entry = (InternalEntry)m_OurList[index]; + + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, entry.Body.ToString() ); + m_Property.SetValue( m_Object, entry.Body, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + + m_Mobile.SendGump( new SetBodyGump( m_Property, m_Mobile, m_Object, m_Stack, m_Page, m_List, m_OurPage, m_OurList, m_OurType ) ); + } + } + } + } + + private static ArrayList m_Monster, m_Animal, m_Sea, m_Human; + + private static void LoadLists() + { + m_Monster = new ArrayList(); + m_Animal = new ArrayList(); + m_Sea = new ArrayList(); + m_Human = new ArrayList(); + + List entries = Docs.LoadBodies(); + + for( int i = 0; i < entries.Count; ++i ) + { + BodyEntry oldEntry = (BodyEntry)entries[i]; + int bodyID = oldEntry.Body.BodyID; + + if( ((Body)bodyID).IsEmpty ) + continue; + + ArrayList list = null; + + switch( oldEntry.BodyType ) + { + case ModelBodyType.Monsters: list = m_Monster; break; + case ModelBodyType.Animals: list = m_Animal; break; + case ModelBodyType.Sea: list = m_Sea; break; + case ModelBodyType.Human: list = m_Human; break; + } + + if( list == null ) + continue; + + int itemID = ShrinkTable.Lookup( bodyID, -1 ); + + if( itemID != -1 ) + list.Add( new InternalEntry( bodyID, itemID, oldEntry.Name ) ); + } + + m_Monster.Sort(); + m_Animal.Sort(); + m_Sea.Sort(); + m_Human.Sort(); + } + + private class InternalEntry : IComparable + { + private int m_Body; + private int m_ItemID; + private string m_Name; + private string m_DisplayName; + + public int Body { get { return m_Body; } } + public int ItemID { get { return m_ItemID; } } + public string Name { get { return m_Name; } } + public string DisplayName { get { return m_DisplayName; } } + + private static string[] m_GroupNames = new string[] + { + "ogres_", "ettins_", "walking_dead_", "gargoyles_", + "orcs_", "flails_", "daemons_", "arachnids_", + "dragons_", "elementals_", "serpents_", "gazers_", + "liche_", "spirits_", "harpies_", "headless_", + "lizard_race_", "mongbat_", "rat_race_", "scorpions_", + "trolls_", "slimes_", "skeletons_", "ethereals_", + "terathan_", "imps_", "cyclops_", "krakens_", + "frogs_", "ophidians_", "centaurs_", "mages_", + "fey_race_", "genies_", "paladins_", "shadowlords_", + "succubi_", "lizards_", "rodents_", "birds_", + "bovines_", "bruins_", "canines_", "deer_", + "equines_", "felines_", "fowl_", "gorillas_", + "kirin_", "llamas_", "ostards_", "porcines_", + "ruminants_", "walrus_", "dolphins_", "sea_horse_", + "sea_serpents_", "character_", "h_", "titans_" + }; + + public InternalEntry( int body, int itemID, string name ) + { + m_Body = body; + m_ItemID = itemID; + m_Name = name; + + m_DisplayName = name.ToLower(); + + for( int i = 0; i < m_GroupNames.Length; ++i ) + { + if( m_DisplayName.StartsWith( m_GroupNames[i] ) ) + { + m_DisplayName = m_DisplayName.Substring( m_GroupNames[i].Length ); + break; + } + } + + m_DisplayName = m_DisplayName.Replace( '_', ' ' ); + } + + public int CompareTo( object obj ) + { + InternalEntry comp = (InternalEntry)obj; + + int v = m_Name.CompareTo( comp.m_Name ); + + if( v == 0 ) + m_Body.CompareTo( comp.m_Body ); + + return v; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetCustomEnumGump.cs b/Scripts/Gumps/Properties/SetCustomEnumGump.cs new file mode 100644 index 0000000..34b923f --- /dev/null +++ b/Scripts/Gumps/Properties/SetCustomEnumGump.cs @@ -0,0 +1,50 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetCustomEnumGump : SetListOptionGump + { + private string[] m_Names; + + public SetCustomEnumGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int propspage, ArrayList list, string[] names ) : base( prop, mobile, o, stack, propspage, list, names, null ) + { + m_Names = names; + } + + public override void OnResponse( NetState sender, RelayInfo relayInfo ) + { + int index = relayInfo.ButtonID - 1; + + if ( index >= 0 && index < m_Names.Length ) + { + try + { + MethodInfo info = m_Property.PropertyType.GetMethod( "Parse", new Type[]{ typeof( string ) } ); + + string result = ""; + + if ( info != null ) + result = Properties.SetDirect( m_Mobile, m_Object, m_Object, m_Property, m_Property.Name, info.Invoke( null, new object[] { m_Names[index] } ), true ); + else if ( m_Property.PropertyType == typeof( Enum ) || m_Property.PropertyType.IsSubclassOf( typeof( Enum ) ) ) + result = Properties.SetDirect( m_Mobile, m_Object, m_Object, m_Property, m_Property.Name, Enum.Parse( m_Property.PropertyType, m_Names[index], false ), true ); + + m_Mobile.SendMessage( result ); + + if ( result == "Property has been set." ) + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetGump.cs b/Scripts/Gumps/Properties/SetGump.cs new file mode 100644 index 0000000..552a8df --- /dev/null +++ b/Scripts/Gumps/Properties/SetGump.cs @@ -0,0 +1,279 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Network; +using Server.HuePickers; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetGump : Gump + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private int m_Page; + private ArrayList m_List; + + public static readonly bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static readonly int EntryWidth = 212; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + (2 * (EntryHeight + OffsetSize)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + public SetGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = page; + m_List = list; + + bool canNull = !prop.PropertyType.IsValueType; + bool canDye = prop.IsDefined( typeof( HueAttribute ), false ); + bool isBody = prop.IsDefined( typeof( BodyAttribute ), false ); + + object val = prop.GetValue( m_Object, null ); + string initialText; + + if ( val == null ) + initialText = ""; + else + initialText = val.ToString(); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BackHeight + (canNull ? (EntryHeight + OffsetSize) : 0) + (canDye ? (EntryHeight + OffsetSize) : 0) + (isBody ? (EntryHeight + OffsetSize) : 0), BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), TotalHeight + (canNull ? (EntryHeight + OffsetSize) : 0) + (canDye ? (EntryHeight + OffsetSize) : 0) + (isBody ? (EntryHeight + OffsetSize) : 0), OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, prop.Name ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddTextEntry( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, 0, initialText ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 1, GumpButtonType.Reply, 0 ); + + if ( canNull ) + { + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Null" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 2, GumpButtonType.Reply, 0 ); + } + + if ( canDye ) + { + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Hue Picker" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 3, GumpButtonType.Reply, 0 ); + } + + if ( isBody ) + { + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Body Picker" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 4, GumpButtonType.Reply, 0 ); + } + } + + private class InternalPicker : HuePicker + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private int m_Page; + private ArrayList m_List; + + public InternalPicker( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list ) : base( ((IHued)o).HuedItemID ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = page; + m_List = list; + } + + public override void OnResponse( int hue ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, hue.ToString() ); + m_Property.SetValue( m_Object, hue, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + object toSet; + bool shouldSet, shouldSend = true; + + switch ( info.ButtonID ) + { + case 1: + { + TextRelay text = info.GetTextEntry( 0 ); + + if ( text != null ) + { + try + { + toSet = PropertiesGump.GetObjectFromString( m_Property.PropertyType, text.Text ); + shouldSet = true; + } + catch + { + toSet = null; + shouldSet = false; + m_Mobile.SendMessage( "Bad format" ); + } + } + else + { + toSet = null; + shouldSet = false; + } + + break; + } + case 2: // Null + { + toSet = null; + shouldSet = true; + + break; + } + case 3: // Hue Picker + { + toSet = null; + shouldSet = false; + shouldSend = false; + + m_Mobile.SendHuePicker( new InternalPicker( m_Property, m_Mobile, m_Object, m_Stack, m_Page, m_List ) ); + + break; + } + case 4: // Body Picker + { + toSet = null; + shouldSet = false; + shouldSend = false; + + m_Mobile.SendGump( new SetBodyGump( m_Property, m_Mobile, m_Object, m_Stack, m_Page, m_List ) ); + + break; + } + default: + { + toSet = null; + shouldSet = false; + + break; + } + } + + if ( shouldSet ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, toSet==null?"(null)":toSet.ToString() ); + m_Property.SetValue( m_Object, toSet, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + if ( shouldSend ) + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetListOptionGump.cs b/Scripts/Gumps/Properties/SetListOptionGump.cs new file mode 100644 index 0000000..a976906 --- /dev/null +++ b/Scripts/Gumps/Properties/SetListOptionGump.cs @@ -0,0 +1,187 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetListOptionGump : Gump + { + protected PropertyInfo m_Property; + protected Mobile m_Mobile; + protected object m_Object; + protected Stack m_Stack; + protected int m_Page; + protected ArrayList m_List; + + public static readonly bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static readonly int EntryWidth = 212; + private static readonly int EntryCount = 13; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + + private static bool PrevLabel = OldStyle, NextLabel = OldStyle; + + private static readonly int PrevLabelOffsetX = PrevWidth + 1; + private static readonly int PrevLabelOffsetY = 0; + + private static readonly int NextLabelOffsetX = -29; + private static readonly int NextLabelOffsetY = 0; + + protected object[] m_Values; + + public SetListOptionGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int propspage, ArrayList list, string[] names, object[] values ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = propspage; + m_List = list; + + m_Values = values; + + int pages = (names.Length + EntryCount - 1) / EntryCount; + int index = 0; + + for ( int page = 1; page <= pages; ++page ) + { + AddPage( page ); + + int start = (page - 1) * EntryCount; + int count = names.Length - start; + + if ( count > EntryCount ) + count = EntryCount; + + int totalHeight = OffsetSize + ((count + 2) * (EntryHeight + OffsetSize)); + int backHeight = BorderSize + totalHeight + BorderSize; + + AddBackground( 0, 0, BackWidth, backHeight, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), totalHeight, OffsetGumpID ); + + + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + int emptyWidth = TotalWidth - PrevWidth - NextWidth - (OffsetSize * 4) - (OldStyle ? SetWidth + OffsetSize : 0); + + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + if ( page > 1 ) + { + AddButton( x + PrevOffsetX, y + PrevOffsetY, PrevButtonID1, PrevButtonID2, 0, GumpButtonType.Page, page - 1 ); + + if ( PrevLabel ) + AddLabel( x + PrevLabelOffsetX, y + PrevLabelOffsetY, TextHue, "Previous" ); + } + + x += PrevWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x - (OldStyle ? OffsetSize : 0), y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0), EntryHeight, HeaderGumpID ); + + x += emptyWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x, y, NextWidth, EntryHeight, HeaderGumpID ); + + if ( page < pages ) + { + AddButton( x + NextOffsetX, y + NextOffsetY, NextButtonID1, NextButtonID2, 0, GumpButtonType.Page, page + 1 ); + + if ( NextLabel ) + AddLabel( x + NextLabelOffsetX, y + NextLabelOffsetY, TextHue, "Next" ); + } + + + + AddRect( 0, prop.Name, 0 ); + + for ( int i = 0; i < count; ++i ) + AddRect( i + 1, names[index], ++index ); + } + } + + private void AddRect( int index, string str, int button ) + { + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize + ((index + 1) * (EntryHeight + OffsetSize)); + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, str ); + + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + if ( button != 0 ) + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, button, GumpButtonType.Reply, 0 ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int index = info.ButtonID - 1; + + if ( index >= 0 && index < m_Values.Length ) + { + try + { + object toSet = m_Values[index]; + + string result = Properties.SetDirect( m_Mobile, m_Object, m_Object, m_Property, m_Property.Name, toSet, true ); + + m_Mobile.SendMessage( result ); + + if ( result == "Property has been set." ) + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetObjectGump.cs b/Scripts/Gumps/Properties/SetObjectGump.cs new file mode 100644 index 0000000..0b33ebd --- /dev/null +++ b/Scripts/Gumps/Properties/SetObjectGump.cs @@ -0,0 +1,308 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Commands.Generic; +using Server.Network; +using Server.Prompts; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetObjectGump : Gump + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private Type m_Type; + private int m_Page; + private ArrayList m_List; + + public static readonly bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static readonly int EntryWidth = 212; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + (5 * (EntryHeight + OffsetSize)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + public SetObjectGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, Type type, int page, ArrayList list ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Type = type; + m_Page = page; + m_List = list; + + string initialText = PropertiesGump.ValueToString( o, prop ); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BackHeight, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), TotalHeight, OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, prop.Name ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, initialText ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 1, GumpButtonType.Reply, 0 ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Change by Serial" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 2, GumpButtonType.Reply, 0 ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Nullify" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 3, GumpButtonType.Reply, 0 ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "View Properties" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 4, GumpButtonType.Reply, 0 ); + } + + private class InternalPrompt : Prompt + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private Type m_Type; + private int m_Page; + private ArrayList m_List; + + public InternalPrompt( PropertyInfo prop, Mobile mobile, object o, Stack stack, Type type, int page, ArrayList list ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Type = type; + m_Page = page; + m_List = list; + } + + public override void OnCancel( Mobile from ) + { + m_Mobile.SendGump( new SetObjectGump( m_Property, m_Mobile, m_Object, m_Stack, m_Type, m_Page, m_List ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + object toSet; + bool shouldSet; + + try + { + int serial = Utility.ToInt32( text ); + + toSet = World.FindEntity( serial ); + + if ( toSet == null ) + { + shouldSet = false; + m_Mobile.SendMessage( "No object with that serial was found." ); + } + else if ( !m_Type.IsAssignableFrom( toSet.GetType() ) ) + { + toSet = null; + shouldSet = false; + m_Mobile.SendMessage( "The object with that serial could not be assigned to a property of type : {0}", m_Type.Name ); + } + else + { + shouldSet = true; + } + } + catch + { + toSet = null; + shouldSet = false; + m_Mobile.SendMessage( "Bad format" ); + } + + if ( shouldSet ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, toSet==null?"(null)":toSet.ToString() ); + m_Property.SetValue( m_Object, toSet, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + m_Mobile.SendGump( new SetObjectGump( m_Property, m_Mobile, m_Object, m_Stack, m_Type, m_Page, m_List ) ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + object toSet; + bool shouldSet, shouldSend = true; + object viewProps = null; + + switch ( info.ButtonID ) + { + case 0: // closed + { + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + + toSet = null; + shouldSet = false; + shouldSend = false; + + break; + } + case 1: // Change by Target + { + m_Mobile.Target = new SetObjectTarget( m_Property, m_Mobile, m_Object, m_Stack, m_Type, m_Page, m_List ); + toSet = null; + shouldSet = false; + shouldSend = false; + break; + } + case 2: // Change by Serial + { + toSet = null; + shouldSet = false; + shouldSend = false; + + m_Mobile.SendMessage( "Enter the serial you wish to find:" ); + m_Mobile.Prompt = new InternalPrompt( m_Property, m_Mobile, m_Object, m_Stack, m_Type, m_Page, m_List ); + + break; + } + case 3: // Nullify + { + toSet = null; + shouldSet = true; + + break; + } + case 4: // View Properties + { + toSet = null; + shouldSet = false; + + object obj = m_Property.GetValue( m_Object, null ); + + if ( obj == null ) + m_Mobile.SendMessage( "The property is null and so you cannot view its properties." ); + else if ( !BaseCommand.IsAccessible( m_Mobile, obj ) ) + m_Mobile.SendMessage( "You may not view their properties." ); + else + viewProps = obj; + + break; + } + default: + { + toSet = null; + shouldSet = false; + + break; + } + } + + if ( shouldSet ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, toSet==null?"(null)":toSet.ToString() ); + m_Property.SetValue( m_Object, toSet, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + if ( shouldSend ) + m_Mobile.SendGump( new SetObjectGump( m_Property, m_Mobile, m_Object, m_Stack, m_Type, m_Page, m_List ) ); + + if ( viewProps != null ) + m_Mobile.SendGump( new PropertiesGump( m_Mobile, viewProps ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetObjectTarget.cs b/Scripts/Gumps/Properties/SetObjectTarget.cs new file mode 100644 index 0000000..5dc8193 --- /dev/null +++ b/Scripts/Gumps/Properties/SetObjectTarget.cs @@ -0,0 +1,66 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Items; +using Server.Targeting; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetObjectTarget : Target + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private Type m_Type; + private int m_Page; + private ArrayList m_List; + + public SetObjectTarget( PropertyInfo prop, Mobile mobile, object o, Stack stack, Type type, int page, ArrayList list ) : base( -1, false, TargetFlags.None ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Type = type; + m_Page = page; + m_List = list; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + try + { + if ( m_Type == typeof( Type ) ) + targeted = targeted.GetType(); + else if ( (m_Type == typeof( BaseAddon ) || m_Type.IsAssignableFrom( typeof( BaseAddon ) )) && targeted is AddonComponent ) + targeted = ((AddonComponent)targeted).Addon; + + if ( m_Type.IsAssignableFrom( targeted.GetType() ) ) + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, targeted.ToString() ); + m_Property.SetValue( m_Object, targeted, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + else + { + m_Mobile.SendMessage( "That cannot be assigned to a property of type : {0}", m_Type.Name ); + } + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + if ( m_Type == typeof( Type ) ) + from.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + else + from.SendGump( new SetObjectGump( m_Property, m_Mobile, m_Object, m_Stack, m_Type, m_Page, m_List ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetPoint2DGump.cs b/Scripts/Gumps/Properties/SetPoint2DGump.cs new file mode 100644 index 0000000..4c20703 --- /dev/null +++ b/Scripts/Gumps/Properties/SetPoint2DGump.cs @@ -0,0 +1,237 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Targeting; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetPoint2DGump : Gump + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private int m_Page; + private ArrayList m_List; + + public static readonly bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static readonly int CoordWidth = 105; + private static readonly int EntryWidth = CoordWidth + OffsetSize + CoordWidth; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + (4 * (EntryHeight + OffsetSize)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + public SetPoint2DGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = page; + m_List = list; + + Point2D p = (Point2D)prop.GetValue( o, null ); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BackHeight, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), TotalHeight, OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, prop.Name ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Use your location" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 1, GumpButtonType.Reply, 0 ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Target a location" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 2, GumpButtonType.Reply, 0 ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, CoordWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, CoordWidth - TextOffsetX, EntryHeight, TextHue, "X:" ); + AddTextEntry( x + 16, y, CoordWidth - 16, EntryHeight, TextHue, 0, p.X.ToString() ); + x += CoordWidth + OffsetSize; + + AddImageTiled( x, y, CoordWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, CoordWidth - TextOffsetX, EntryHeight, TextHue, "Y:" ); + AddTextEntry( x + 16, y, CoordWidth - 16, EntryHeight, TextHue, 1, p.Y.ToString() ); + x += CoordWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 3, GumpButtonType.Reply, 0 ); + } + + private class InternalTarget : Target + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private int m_Page; + private ArrayList m_List; + + public InternalTarget( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list ) : base( -1, true, TargetFlags.None ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = page; + m_List = list; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + IPoint3D p = targeted as IPoint3D; + + if ( p != null ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, new Point2D( p ).ToString() ); + m_Property.SetValue( m_Object, new Point2D( p ), null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Point2D toSet; + bool shouldSet, shouldSend; + + switch ( info.ButtonID ) + { + case 1: // Current location + { + toSet = new Point2D( m_Mobile.Location ); + shouldSet = true; + shouldSend = true; + + break; + } + case 2: // Pick location + { + m_Mobile.Target = new InternalTarget( m_Property, m_Mobile, m_Object, m_Stack, m_Page, m_List ); + + toSet = Point2D.Zero; + shouldSet = false; + shouldSend = false; + + break; + } + case 3: // Use values + { + TextRelay x = info.GetTextEntry( 0 ); + TextRelay y = info.GetTextEntry( 1 ); + + toSet = new Point2D( x == null ? 0 : Utility.ToInt32( x.Text ), y == null ? 0 : Utility.ToInt32( y.Text ) ); + shouldSet = true; + shouldSend = true; + + break; + } + default: + { + toSet = Point2D.Zero; + shouldSet = false; + shouldSend = true; + + break; + } + } + + if ( shouldSet ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, toSet.ToString() ); + m_Property.SetValue( m_Object, toSet, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + if ( shouldSend ) + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetPoint3DGump.cs b/Scripts/Gumps/Properties/SetPoint3DGump.cs new file mode 100644 index 0000000..c38b010 --- /dev/null +++ b/Scripts/Gumps/Properties/SetPoint3DGump.cs @@ -0,0 +1,243 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Targeting; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetPoint3DGump : Gump + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private int m_Page; + private ArrayList m_List; + + public static readonly bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static readonly int CoordWidth = 70; + private static readonly int EntryWidth = CoordWidth + OffsetSize + CoordWidth + OffsetSize + CoordWidth; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + (4 * (EntryHeight + OffsetSize)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + public SetPoint3DGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = page; + m_List = list; + + Point3D p = (Point3D)prop.GetValue( o, null ); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BackHeight, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), TotalHeight, OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, prop.Name ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Use your location" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 1, GumpButtonType.Reply, 0 ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, "Target a location" ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 2, GumpButtonType.Reply, 0 ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, CoordWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, CoordWidth - TextOffsetX, EntryHeight, TextHue, "X:" ); + AddTextEntry( x + 16, y, CoordWidth - 16, EntryHeight, TextHue, 0, p.X.ToString() ); + x += CoordWidth + OffsetSize; + + AddImageTiled( x, y, CoordWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, CoordWidth - TextOffsetX, EntryHeight, TextHue, "Y:" ); + AddTextEntry( x + 16, y, CoordWidth - 16, EntryHeight, TextHue, 1, p.Y.ToString() ); + x += CoordWidth + OffsetSize; + + AddImageTiled( x, y, CoordWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, CoordWidth - TextOffsetX, EntryHeight, TextHue, "Z:" ); + AddTextEntry( x + 16, y, CoordWidth - 16, EntryHeight, TextHue, 2, p.Z.ToString() ); + x += CoordWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 3, GumpButtonType.Reply, 0 ); + } + + private class InternalTarget : Target + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private int m_Page; + private ArrayList m_List; + + public InternalTarget( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list ) : base( -1, true, TargetFlags.None ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = page; + m_List = list; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + IPoint3D p = targeted as IPoint3D; + + if ( p != null ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, new Point3D( p ).ToString() ); + m_Property.SetValue( m_Object, new Point3D( p ), null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Point3D toSet; + bool shouldSet, shouldSend; + + switch ( info.ButtonID ) + { + case 1: // Current location + { + toSet = m_Mobile.Location; + shouldSet = true; + shouldSend = true; + + break; + } + case 2: // Pick location + { + m_Mobile.Target = new InternalTarget( m_Property, m_Mobile, m_Object, m_Stack, m_Page, m_List ); + + toSet = Point3D.Zero; + shouldSet = false; + shouldSend = false; + + break; + } + case 3: // Use values + { + TextRelay x = info.GetTextEntry( 0 ); + TextRelay y = info.GetTextEntry( 1 ); + TextRelay z = info.GetTextEntry( 2 ); + + toSet = new Point3D( x == null ? 0 : Utility.ToInt32( x.Text ), y == null ? 0 : Utility.ToInt32( y.Text ), z == null ? 0 : Utility.ToInt32( z.Text ) ); + shouldSet = true; + shouldSend = true; + + break; + } + default: + { + toSet = Point3D.Zero; + shouldSet = false; + shouldSend = true; + + break; + } + } + + if ( shouldSet ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, toSet.ToString() ); + m_Property.SetValue( m_Object, toSet, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + if ( shouldSend ) + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/Properties/SetTimeSpanGump.cs b/Scripts/Gumps/Properties/SetTimeSpanGump.cs new file mode 100644 index 0000000..fb6cdc0 --- /dev/null +++ b/Scripts/Gumps/Properties/SetTimeSpanGump.cs @@ -0,0 +1,238 @@ +using System; +using System.Reflection; +using System.Collections; +using Server; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class SetTimeSpanGump : Gump + { + private PropertyInfo m_Property; + private Mobile m_Mobile; + private object m_Object; + private Stack m_Stack; + private int m_Page; + private ArrayList m_List; + + public static readonly bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static readonly int EntryWidth = 212; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + (7 * (EntryHeight + OffsetSize)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + public SetTimeSpanGump( PropertyInfo prop, Mobile mobile, object o, Stack stack, int page, ArrayList list ) : base( GumpOffsetX, GumpOffsetY ) + { + m_Property = prop; + m_Mobile = mobile; + m_Object = o; + m_Stack = stack; + m_Page = page; + m_List = list; + + TimeSpan ts = (TimeSpan)prop.GetValue( o, null ); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BackHeight, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), TotalHeight, OffsetGumpID ); + + AddRect( 0, prop.Name, 0, -1 ); + AddRect( 1, ts.ToString(), 0, -1 ); + AddRect( 2, "Zero", 1, -1 ); + AddRect( 3, "From H:M:S", 2, -1 ); + AddRect( 4, "H:", 3, 0 ); + AddRect( 5, "M:", 4, 1 ); + AddRect( 6, "S:", 5, 2 ); + } + + private void AddRect( int index, string str, int button, int text ) + { + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize + (index * (EntryHeight + OffsetSize)); + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, str ); + + if ( text != -1 ) + AddTextEntry( x + 16 + TextOffsetX, y, EntryWidth - TextOffsetX - 16, EntryHeight, TextHue, text, "" ); + + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + if ( button != 0 ) + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, button, GumpButtonType.Reply, 0 ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + TimeSpan toSet; + bool shouldSet, shouldSend; + + TextRelay h = info.GetTextEntry( 0 ); + TextRelay m = info.GetTextEntry( 1 ); + TextRelay s = info.GetTextEntry( 2 ); + + switch ( info.ButtonID ) + { + case 1: // Zero + { + toSet = TimeSpan.Zero; + shouldSet = true; + shouldSend = true; + + break; + } + case 2: // From H:M:S + { + bool successfulParse = false; + if( h != null && m != null && s != null ) + { + successfulParse = TimeSpan.TryParse( h.Text + ":" + m.Text + ":" + s.Text, out toSet ); + } + else + { + toSet = TimeSpan.Zero; + } + + shouldSet = shouldSend = successfulParse; + + break; + } + case 3: // From H + { + if ( h != null ) + { + try + { + toSet = TimeSpan.FromHours( Utility.ToDouble( h.Text ) ); + shouldSet = true; + shouldSend = true; + + break; + } + catch + { + } + } + + toSet = TimeSpan.Zero; + shouldSet = false; + shouldSend = false; + + break; + } + case 4: // From M + { + if ( m != null ) + { + try + { + toSet = TimeSpan.FromMinutes( Utility.ToDouble( m.Text ) ); + shouldSet = true; + shouldSend = true; + + break; + } + catch + { + } + } + + toSet = TimeSpan.Zero; + shouldSet = false; + shouldSend = false; + + break; + } + case 5: // From S + { + if ( s != null ) + { + try + { + toSet = TimeSpan.FromSeconds( Utility.ToDouble( s.Text ) ); + shouldSet = true; + shouldSend = true; + + break; + } + catch + { + } + } + + toSet = TimeSpan.Zero; + shouldSet = false; + shouldSend = false; + + break; + } + default: + { + toSet = TimeSpan.Zero; + shouldSet = false; + shouldSend = true; + + break; + } + } + + if ( shouldSet ) + { + try + { + CommandLogging.LogChangeProperty( m_Mobile, m_Object, m_Property.Name, toSet.ToString() ); + m_Property.SetValue( m_Object, toSet, null ); + PropertiesGump.OnValueChanged( m_Object, m_Property, m_Stack ); + } + catch + { + m_Mobile.SendMessage( "An exception was caught. The property may not have changed." ); + } + } + + if ( shouldSend ) + m_Mobile.SendGump( new PropertiesGump( m_Mobile, m_Object, m_Stack, m_List, m_Page ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/ReclaimVendorGump.cs b/Scripts/Gumps/ReclaimVendorGump.cs new file mode 100644 index 0000000..caecf02 --- /dev/null +++ b/Scripts/Gumps/ReclaimVendorGump.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Multis; + +namespace Server.Gumps +{ + public class ReclaimVendorGump : Gump + { + private BaseHouse m_House; + private ArrayList m_Vendors; + + public ReclaimVendorGump( BaseHouse house ) : base( 50, 50 ) + { + m_House = house; + m_Vendors = new ArrayList( house.InternalizedVendors ); + + AddBackground( 0, 0, 170, 50 + m_Vendors.Count * 20, 0x13BE ); + + AddImageTiled( 10, 10, 150, 20, 0xA40 ); + AddHtmlLocalized( 10, 10, 150, 20, 1061827, 0x7FFF, false, false ); //
Reclaim Vendor
+ + AddImageTiled( 10, 40, 150, m_Vendors.Count * 20, 0xA40 ); + + for ( int i = 0; i < m_Vendors.Count; i++ ) + { + Mobile m = (Mobile) m_Vendors[i]; + + int y = 40 + i * 20; + + AddButton( 10, y, 0xFA5, 0xFA7, i + 1, GumpButtonType.Reply, 0 ); + AddLabel( 45, y, 0x481, m.Name ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + + if ( info.ButtonID == 0 || !m_House.IsActive || !m_House.IsInside( from ) || !m_House.IsOwner( from ) || !from.CheckAlive() ) + return; + + int index = info.ButtonID - 1; + + if ( index < 0 || index >= m_Vendors.Count ) + return; + + Mobile mob = (Mobile) m_Vendors[index]; + + if ( !m_House.InternalizedVendors.Contains( mob ) ) + return; + + if ( mob.Deleted ) + { + m_House.InternalizedVendors.Remove( mob ); + } + else + { + bool vendor, contract; + BaseHouse.IsThereVendor( from.Location, from.Map, out vendor, out contract ); + + if ( vendor ) + { + from.SendLocalizedMessage( 1062677 ); // You cannot place a vendor or barkeep at this location. + } + else if ( contract ) + { + from.SendLocalizedMessage( 1062678 ); // You cannot place a vendor or barkeep on top of a rental contract! + } + else + { + m_House.InternalizedVendors.Remove( mob ); + mob.MoveToWorld( from.Location, from.Map ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/ReportMurderer.cs b/Scripts/Gumps/ReportMurderer.cs new file mode 100644 index 0000000..9dc6abc --- /dev/null +++ b/Scripts/Gumps/ReportMurderer.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections.Generic; +using Server.Misc; +using Server.Network; +using Server.Mobiles; + +namespace Server.Gumps +{ + public class ReportMurdererGump : Gump + { + private int m_Idx; + private List m_Killers; + private Mobile m_Victum; + + public static void Initialize() + { + EventSink.PlayerDeath += new PlayerDeathEventHandler( EventSink_PlayerDeath ); + } + + public static void EventSink_PlayerDeath( PlayerDeathEventArgs e ) + { + Mobile m = e.Mobile; + + List killers = new List(); + List toGive = new List(); + + foreach ( AggressorInfo ai in m.Aggressors ) + { + if ( ai.Attacker.Player && ai.CanReportMurder && !ai.Reported ) + { + killers.Add(ai.Attacker); + ai.Reported = true; + ai.CanReportMurder = false; + } + if ( ai.Attacker.Player && (DateTime.Now - ai.LastCombatTime) < TimeSpan.FromSeconds( 30.0 ) && !toGive.Contains( ai.Attacker ) ) + toGive.Add( ai.Attacker ); + } + + foreach ( AggressorInfo ai in m.Aggressed ) + { + if ( ai.Defender.Player && (DateTime.Now - ai.LastCombatTime) < TimeSpan.FromSeconds( 30.0 ) && !toGive.Contains( ai.Defender ) ) + toGive.Add( ai.Defender ); + } + + foreach ( Mobile g in toGive ) + { + int n = Notoriety.Compute( g, m ); + + int theirKarma = m.Karma, ourKarma = g.Karma; + bool innocent = ( n == Notoriety.Innocent ); + bool criminal = ( n == Notoriety.Criminal || n == Notoriety.Murderer ); + + int fameAward = m.Fame / 200; + int karmaAward = 0; + + if ( innocent ) + karmaAward = ( ourKarma > -2500 ? -850 : -110 - (m.Karma / 100) ); + else if ( criminal ) + karmaAward = 50; + + Titles.AwardFame( g, fameAward, false ); + Titles.AwardKarma( g, karmaAward, true ); + } + + if ( m is PlayerMobile && ((PlayerMobile)m).NpcGuild == NpcGuild.ThievesGuild ) + return; + + if ( killers.Count > 0 ) + new GumpTimer( m, killers ).Start(); + } + + private class GumpTimer : Timer + { + private Mobile m_Victim; + private List m_Killers; + + public GumpTimer( Mobile victim, List killers ) : base( TimeSpan.FromSeconds( 4.0 ) ) + { + m_Victim = victim; + m_Killers = killers; + } + + protected override void OnTick() + { + m_Victim.SendGump( new ReportMurdererGump( m_Victim, m_Killers ) ); + } + } + + public ReportMurdererGump( Mobile victum, List killers ) : this( victum, killers, 0 ) + { + } + + private ReportMurdererGump( Mobile victum, List killers, int idx ) : base( 0, 0 ) + { + m_Killers = killers; + m_Victum = victum; + m_Idx = idx; + BuildGump(); + } + + private void BuildGump() + { + AddBackground( 265, 205, 320, 290, 5054 ); + Closable = false; + Resizable = false; + + AddPage( 0 ); + + AddImageTiled( 225, 175, 50, 45, 0xCE ); //Top left corner + AddImageTiled( 267, 175, 315, 44, 0xC9 ); //Top bar + AddImageTiled( 582, 175, 43, 45, 0xCF ); //Top right corner + AddImageTiled( 225, 219, 44, 270, 0xCA ); //Left side + AddImageTiled( 582, 219, 44, 270, 0xCB ); //Right side + AddImageTiled( 225, 489, 44, 43, 0xCC ); //Lower left corner + AddImageTiled( 267, 489, 315, 43, 0xE9 ); //Lower Bar + AddImageTiled( 582, 489, 43, 43, 0xCD ); //Lower right corner + + AddPage( 1 ); + + AddHtml( 260, 234, 300, 140, ((Mobile)m_Killers[m_Idx]).Name, false, false ); // Player's Name + AddHtmlLocalized( 260, 254, 300, 140, 1049066, false, false ); // Would you like to report... + + AddButton( 260, 300, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 300, 300, 300, 50, 1046362, false, false ); // Yes + + AddButton( 360, 300, 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 400, 300, 300, 50, 1046363, false, false ); // No + } + + public static void ReportedListExpiry_Callback( object state ) + { + object[] states = (object[])state; + + PlayerMobile from = (PlayerMobile)states[0]; + Mobile killer = (Mobile)states[1]; + + if (from.RecentlyReported.Contains(killer)) + { + from.RecentlyReported.Remove(killer); + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + + switch ( info.ButtonID ) + { + case 1: + { + Mobile killer = m_Killers[m_Idx]; + if ( killer != null && !killer.Deleted ) + { + killer.Kills++; + + if (killer is PlayerMobile) + { + PlayerMobile pk = (PlayerMobile)killer; + pk.ResetKillTime(); + pk.SendLocalizedMessage(1049067);//You have been reported for murder! + + if (pk.Kills == 5) + { + pk.SendLocalizedMessage(502134);//You are now known as a murderer! + } + + if ( pk.Kills > 4 && pk.NpcGuild != NpcGuild.None && pk.NpcGuild != NpcGuild.AssassinsGuild && pk.NpcGuild != NpcGuild.ThievesGuild ) + { + pk.SendMessage( "You have been suspended from your local guild!" ); + pk.NpcGuild = NpcGuild.None; + } + } + } + break; + } + case 2: + { + break; + } + } + + m_Idx++; + if ( m_Idx < m_Killers.Count ) + from.SendGump( new ReportMurdererGump( from, m_Killers, m_Idx ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/ResurrectGump.cs b/Scripts/Gumps/ResurrectGump.cs new file mode 100644 index 0000000..ae057f1 --- /dev/null +++ b/Scripts/Gumps/ResurrectGump.cs @@ -0,0 +1,193 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Network; +using Server.Mobiles; + +namespace Server.Gumps +{ + public enum ResurrectMessage + { + ChaosShrine = 0, + VirtueShrine = 1, + Healer = 2, + Generic = 3, + } + + public class ResurrectGump : Gump + { + private Mobile m_Healer; + private int m_Price; + private double m_HitsScalar; + + public ResurrectGump( Mobile owner ) + : this( owner, owner, ResurrectMessage.Generic, false ) + { + } + + public ResurrectGump( Mobile owner, double hitsScalar ) + : this( owner, owner, ResurrectMessage.Generic, false, hitsScalar ) + { + } + + public ResurrectGump( Mobile owner, bool checkBool ) + : this( owner, owner, ResurrectMessage.Generic, checkBool ) + { + } + + public ResurrectGump( Mobile owner, Mobile healer ) + : this( owner, healer, ResurrectMessage.Generic, false ) + { + } + + public ResurrectGump( Mobile owner, ResurrectMessage msg ) + : this( owner, owner, msg, false ) + { + } + + public ResurrectGump( Mobile owner, Mobile healer, ResurrectMessage msg ) + : this( owner, healer, msg, false ) + { + } + + public ResurrectGump( Mobile owner, Mobile healer, ResurrectMessage msg, bool checkBool ) + : this( owner, healer, msg, checkBool, 0.0 ) + { + } + + public ResurrectGump( Mobile owner, Mobile healer, ResurrectMessage msg, bool checkBool, double hitsScalar ) + : base( 100, 0 ) + { + m_Healer = healer; + m_HitsScalar = hitsScalar; + + AddPage( 0 ); + + AddBackground( 0, 0, 400, 350, 2600 ); + + AddHtmlLocalized( 0, 20, 400, 35, 1011022, false, false ); //
Resurrection
+ + AddHtmlLocalized( 50, 55, 300, 140, 1011023 + (int)msg, true, true ); /* It is possible for you to be resurrected here by this healer. Do you wish to try?
+ * CONTINUE - You chose to try to come back to life now.
+ * CANCEL - You prefer to remain a ghost for now. + */ + + AddButton( 200, 227, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 235, 230, 110, 35, 1011012, false, false ); // CANCEL + + AddButton( 65, 227, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 100, 230, 110, 35, 1011011, false, false ); // CONTINUE + } + + public ResurrectGump( Mobile owner, Mobile healer, int price ) + : base( 150, 50 ) + { + m_Healer = healer; + m_Price = price; + + Closable = false; + + AddPage( 0 ); + + AddImage( 0, 0, 3600 ); + + AddImageTiled( 0, 14, 15, 200, 3603 ); + AddImageTiled( 380, 14, 14, 200, 3605 ); + + AddImage( 0, 201, 3606 ); + + AddImageTiled( 15, 201, 370, 16, 3607 ); + AddImageTiled( 15, 0, 370, 16, 3601 ); + + AddImage( 380, 0, 3602 ); + + AddImage( 380, 201, 3608 ); + + AddImageTiled( 15, 15, 365, 190, 2624 ); + + AddRadio( 30, 140, 9727, 9730, true, 1 ); + AddHtmlLocalized( 65, 145, 300, 25, 1060015, 0x7FFF, false, false ); // Grudgingly pay the money + + AddRadio( 30, 175, 9727, 9730, false, 0 ); + AddHtmlLocalized( 65, 178, 300, 25, 1060016, 0x7FFF, false, false ); // I'd rather stay dead, you scoundrel!!! + + AddHtmlLocalized( 30, 20, 360, 35, 1060017, 0x7FFF, false, false ); // Wishing to rejoin the living, are you? I can restore your body... for a price of course... + + AddHtmlLocalized( 30, 105, 345, 40, 1060018, 0x5B2D, false, false ); // Do you accept the fee, which will be withdrawn from your inn chest? + + AddImage( 65, 72, 5605 ); + + AddImageTiled( 80, 90, 200, 1, 9107 ); + AddImageTiled( 95, 92, 200, 1, 9157 ); + + AddLabel( 90, 70, 1645, price.ToString() ); + AddHtmlLocalized( 140, 70, 100, 25, 1023823, 0x7FFF, false, false ); // gold coins + + AddButton( 290, 175, 247, 248, 2, GumpButtonType.Reply, 0 ); + + AddImageTiled( 15, 14, 365, 1, 9107 ); + AddImageTiled( 380, 14, 1, 190, 9105 ); + AddImageTiled( 15, 205, 365, 1, 9107 ); + AddImageTiled( 15, 14, 1, 190, 9105 ); + AddImageTiled( 0, 0, 395, 1, 9157 ); + AddImageTiled( 394, 0, 1, 217, 9155 ); + AddImageTiled( 0, 216, 395, 1, 9157 ); + AddImageTiled( 0, 0, 1, 217, 9155 ); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + + from.CloseGump( typeof( ResurrectGump ) ); + + if( info.ButtonID == 1 || info.ButtonID == 2 ) + { + if( from.Map == null || !from.Map.CanFit( from.Location, 16, false, false ) ) + { + from.SendLocalizedMessage( 502391 ); // Thou can not be resurrected there! + return; + } + + if( m_Price > 0 ) + { + if( info.IsSwitched( 1 ) ) + { + if( Innkeeper.Withdraw( from, m_Price ) ) + { + from.SendLocalizedMessage( 1060398, m_Price.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your inn chest. + from.SendLocalizedMessage( 1060022, Innkeeper.GetBalance( from ).ToString() ); // You have ~1_AMOUNT~ gold in cash remaining in your inn chest. + } + else + { + from.SendLocalizedMessage( 1060020 ); // Unfortunately, you do not have enough cash in your inn chest to cover the cost of the healing. + return; + } + } + else + { + from.SendLocalizedMessage( 1060019 ); // You decide against paying the healer, and thus remain dead. + return; + } + } + + from.PlaySound( 0x214 ); + from.FixedEffect( 0x376A, 10, 16 ); + + from.Resurrect(); + + if( from.Fame > 0 ) + { + int amount = from.Fame / 10; + + Misc.Titles.AwardFame( from, -amount, true ); + } + + if( from.Alive && m_HitsScalar > 0 ) + from.Hits = (int)(from.HitsMax * m_HitsScalar); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/SetSecureLevelGump.cs b/Scripts/Gumps/SetSecureLevelGump.cs new file mode 100644 index 0000000..cb1935c --- /dev/null +++ b/Scripts/Gumps/SetSecureLevelGump.cs @@ -0,0 +1,93 @@ +using System; +using Server; +using Server.Multis; +using Server.Network; +using Server.Guilds; + +namespace Server.Gumps +{ + public interface ISecurable + { + SecureLevel Level{ get; set; } + } + + public class SetSecureLevelGump : Gump + { + private ISecurable m_Info; + + public SetSecureLevelGump( Mobile owner, ISecurable info, BaseHouse house ) : base( 50, 50 ) + { + m_Info = info; + + AddPage( 0 ); + + int offset = ( Guild.NewGuildSystem )? 20 : 0; + + AddBackground( 0, 0, 220, 160 + offset, 5054 ); + + AddImageTiled( 10, 10, 200, 20, 5124 ); + AddImageTiled( 10, 40, 200, 20, 5124 ); + AddImageTiled( 10, 70, 200, 80 + offset, 5124 ); + + AddAlphaRegion( 10, 10, 200, 140 ); + + AddHtmlLocalized( 10, 10, 200, 20, 1061276, 32767, false, false ); //
SET ACCESS
+ AddHtmlLocalized( 10, 40, 100, 20, 1041474, 32767, false, false ); // Owner: + + AddLabel( 110, 40, 1152, owner == null ? "" : owner.Name ); + + AddButton( 10, 70, GetFirstID( SecureLevel.Owner ), 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 70, 150, 20, 1061277, GetColor( SecureLevel.Owner ), false, false ); // Owner Only + + AddButton( 10, 90, GetFirstID( SecureLevel.CoOwners ), 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 90, 150, 20, 1061278, GetColor( SecureLevel.CoOwners ), false, false ); // Co-Owners + + AddButton( 10, 110, GetFirstID( SecureLevel.Friends ), 4007, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 110, 150, 20, 1061279, GetColor( SecureLevel.Friends ), false, false ); // Friends + + Mobile houseOwner = house.Owner; + if( Guild.NewGuildSystem && house != null && houseOwner != null && houseOwner.Guild != null && ((Guild)houseOwner.Guild).Leader == houseOwner ) //Only the actual House owner AND guild master can set guild secures + { + AddButton( 10, 130, GetFirstID( SecureLevel.Guild ), 4007, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 130, 150, 20, 1063455, GetColor( SecureLevel.Guild ), false, false ); // Guild Members + } + + AddButton( 10, 130 + offset, GetFirstID( SecureLevel.Anyone ), 4007, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 130 + offset, 150, 20, 1061626, GetColor( SecureLevel.Anyone ), false, false ); // Anyone + } + + public int GetColor( SecureLevel level ) + { + return ( m_Info.Level == level ) ? 0x7F18 : 0x7FFF; + } + + public int GetFirstID( SecureLevel level ) + { + return ( m_Info.Level == level ) ? 4006 : 4005; + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + SecureLevel level = m_Info.Level; + + switch ( info.ButtonID ) + { + case 1: level = SecureLevel.Owner; break; + case 2: level = SecureLevel.CoOwners; break; + case 3: level = SecureLevel.Friends; break; + case 4: level = SecureLevel.Anyone; break; + case 5: level = SecureLevel.Guild; break; + } + + if ( m_Info.Level == level ) + { + state.Mobile.SendLocalizedMessage( 1061281 ); // Access level unchanged. + } + else + { + m_Info.Level = level; + state.Mobile.SendLocalizedMessage( 1061280 ); // New access level set. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/SkillsGump.cs b/Scripts/Gumps/SkillsGump.cs new file mode 100644 index 0000000..fd98778 --- /dev/null +++ b/Scripts/Gumps/SkillsGump.cs @@ -0,0 +1,507 @@ +using System; +using System.Collections; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Commands; + +namespace Server.Gumps +{ + public class EditSkillGump : Gump + { + public static readonly bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static readonly int EntryWidth = 160; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + (2 * (EntryHeight + OffsetSize)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + private Mobile m_From; + private Mobile m_Target; + private Skill m_Skill; + + private SkillsGumpGroup m_Selected; + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 1 ) + { + try + { + if ( m_From.AccessLevel >= AccessLevel.GameMaster ) + { + TextRelay text = info.GetTextEntry( 0 ); + + if ( text != null ) + { + m_Skill.Base = Convert.ToDouble( text.Text ); + CommandLogging.LogChangeProperty( m_From, m_Target, String.Format( "{0}.Base", m_Skill ), m_Skill.Base.ToString() ); + } + } + else + { + m_From.SendMessage( "You may not change that." ); + } + + m_From.SendGump( new SkillsGump( m_From, m_Target, m_Selected ) ); + } + catch + { + m_From.SendMessage( "Bad format. ###.# expected." ); + m_From.SendGump( new EditSkillGump( m_From, m_Target, m_Skill, m_Selected ) ); + } + } + else + { + m_From.SendGump( new SkillsGump( m_From, m_Target, m_Selected ) ); + } + } + + public EditSkillGump( Mobile from, Mobile target, Skill skill, SkillsGumpGroup selected ) : base( GumpOffsetX, GumpOffsetY ) + { + m_From = from; + m_Target = target; + m_Skill = skill; + m_Selected = selected; + + string initialText = m_Skill.Base.ToString( "F1" ); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BackHeight, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), TotalHeight, OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, skill.Name ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddTextEntry( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, TextHue, 0, initialText ); + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, 1, GumpButtonType.Reply, 0 ); + } + } + + public class SkillsGump : Gump + { + public static bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + /* + private static bool PrevLabel = OldStyle, NextLabel = OldStyle; + + private static readonly int PrevLabelOffsetX = PrevWidth + 1; + + private static readonly int PrevLabelOffsetY = 0; + + private static readonly int NextLabelOffsetX = -29; + private static readonly int NextLabelOffsetY = 0; + * */ + + private static readonly int NameWidth = 107; + private static readonly int ValueWidth = 128; + + private static readonly int EntryCount = 15; + + private static readonly int TypeWidth = NameWidth + OffsetSize + ValueWidth; + + private static readonly int TotalWidth = OffsetSize + NameWidth + OffsetSize + ValueWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (EntryCount + 1)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + private static readonly int IndentWidth = 12; + + private Mobile m_From; + private Mobile m_Target; + + private SkillsGumpGroup[] m_Groups; + private SkillsGumpGroup m_Selected; + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int buttonID = info.ButtonID - 1; + + int index = buttonID / 3; + int type = buttonID % 3; + + switch ( type ) + { + case 0: + { + if ( index >= 0 && index < m_Groups.Length ) + { + SkillsGumpGroup newSelection = m_Groups[index]; + + if ( m_Selected != newSelection ) + m_From.SendGump( new SkillsGump( m_From, m_Target, newSelection ) ); + else + m_From.SendGump( new SkillsGump( m_From, m_Target, null ) ); + } + + break; + } + case 1: + { + if ( m_Selected != null && index >= 0 && index < m_Selected.Skills.Length ) + { + Skill sk = m_Target.Skills[m_Selected.Skills[index]]; + + if ( sk != null ) + { + if ( m_From.AccessLevel >= AccessLevel.GameMaster ) + { + m_From.SendGump( new EditSkillGump( m_From, m_Target, sk, m_Selected ) ); + } + else + { + m_From.SendMessage( "You may not change that." ); + m_From.SendGump( new SkillsGump( m_From, m_Target, m_Selected ) ); + } + } + else + { + m_From.SendGump( new SkillsGump( m_From, m_Target, m_Selected ) ); + } + } + + break; + } + case 2: + { + if ( m_Selected != null && index >= 0 && index < m_Selected.Skills.Length ) + { + Skill sk = m_Target.Skills[m_Selected.Skills[index]]; + + if ( sk != null ) + { + if ( m_From.AccessLevel >= AccessLevel.GameMaster ) + { + switch ( sk.Lock ) + { + case SkillLock.Up: sk.SetLockNoRelay( SkillLock.Down ); sk.Update(); break; + case SkillLock.Down: sk.SetLockNoRelay( SkillLock.Locked ); sk.Update(); break; + case SkillLock.Locked: sk.SetLockNoRelay( SkillLock.Up ); sk.Update(); break; + } + } + else + { + m_From.SendMessage( "You may not change that." ); + } + + m_From.SendGump( new SkillsGump( m_From, m_Target, m_Selected ) ); + } + } + + break; + } + } + } + + public int GetButtonID( int type, int index ) + { + return 1 + (index * 3) + type; + } + + public SkillsGump( Mobile from, Mobile target ) : this( from, target, null ) + { + } + + public SkillsGump( Mobile from, Mobile target, SkillsGumpGroup selected ) : base( GumpOffsetX, GumpOffsetY ) + { + m_From = from; + m_Target = target; + + m_Groups = SkillsGumpGroup.Groups; + m_Selected = selected; + + int count = m_Groups.Length; + + if ( selected != null ) + count += selected.Skills.Length; + + int totalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (count + 1)); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BorderSize + totalHeight + BorderSize, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), totalHeight, OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + int emptyWidth = TotalWidth - PrevWidth - NextWidth - (OffsetSize * 4) - (OldStyle ? SetWidth + OffsetSize : 0); + + if ( OldStyle ) + AddImageTiled( x, y, TotalWidth - (OffsetSize * 3) - SetWidth, EntryHeight, HeaderGumpID ); + else + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + x += PrevWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x - (OldStyle ? OffsetSize : 0), y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0), EntryHeight, HeaderGumpID ); + + x += emptyWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x, y, NextWidth, EntryHeight, HeaderGumpID ); + + for ( int i = 0; i < m_Groups.Length; ++i ) + { + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + SkillsGumpGroup group = m_Groups[i]; + + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + if ( group == selected ) + AddButton( x + PrevOffsetX, y + PrevOffsetY, 0x15E2, 0x15E6, GetButtonID( 0, i ), GumpButtonType.Reply, 0 ); + else + AddButton( x + PrevOffsetX, y + PrevOffsetY, 0x15E1, 0x15E5, GetButtonID( 0, i ), GumpButtonType.Reply, 0 ); + + x += PrevWidth + OffsetSize; + + x -= (OldStyle ? OffsetSize : 0); + + AddImageTiled( x, y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0), EntryHeight, EntryGumpID ); + AddLabel( x + TextOffsetX, y, TextHue, group.Name ); + + x += emptyWidth + (OldStyle ? OffsetSize * 2 : 0); + x += OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + if ( group == selected ) + { + int indentMaskX = BorderSize; + int indentMaskY = y + EntryHeight + OffsetSize; + + for ( int j = 0; j < group.Skills.Length; ++j ) + { + Skill sk = target.Skills[group.Skills[j]]; + + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + x += OffsetSize; + x += IndentWidth; + + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + AddButton( x + PrevOffsetX, y + PrevOffsetY, 0x15E1, 0x15E5, GetButtonID( 1, j ), GumpButtonType.Reply, 0 ); + + x += PrevWidth + OffsetSize; + + x -= (OldStyle ? OffsetSize : 0); + + AddImageTiled( x, y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0) - OffsetSize - IndentWidth, EntryHeight, EntryGumpID ); + AddLabel( x + TextOffsetX, y, TextHue, sk == null ? "(null)" : sk.Name ); + + x += emptyWidth + (OldStyle ? OffsetSize * 2 : 0) - OffsetSize - IndentWidth; + x += OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + if ( sk != null ) + { + int buttonID1, buttonID2; + int xOffset, yOffset; + + switch ( sk.Lock ) + { + default: + case SkillLock.Up: buttonID1 = 0x983; buttonID2 = 0x983; xOffset = 6; yOffset = 4; break; + case SkillLock.Down: buttonID1 = 0x985; buttonID2 = 0x985; xOffset = 6; yOffset = 4; break; + case SkillLock.Locked: buttonID1 = 0x82C; buttonID2 = 0x82C; xOffset = 5; yOffset = 2; break; + } + + AddButton( x + xOffset, y + yOffset, buttonID1, buttonID2, GetButtonID( 2, j ), GumpButtonType.Reply, 0 ); + + y += 1; + x -= OffsetSize; + x -= 1; + x -= 50; + + AddImageTiled( x, y, 50, EntryHeight - 2, OffsetGumpID ); + + x += 1; + y += 1; + + AddImageTiled( x, y, 48, EntryHeight - 4, EntryGumpID ); + + AddLabelCropped( x + TextOffsetX, y - 1, 48 - TextOffsetX, EntryHeight - 3, TextHue, sk.Base.ToString( "F1" ) ); + + y -= 2; + } + } + + AddImageTiled( indentMaskX, indentMaskY, IndentWidth + OffsetSize, (group.Skills.Length * (EntryHeight + OffsetSize)) - (i < (m_Groups.Length - 1) ? OffsetSize : 0), BackGumpID + 4 ); + } + } + } + } + + public class SkillsGumpGroup + { + private string m_Name; + private SkillName[] m_Skills; + + public string Name{ get{ return m_Name; } } + public SkillName[] Skills{ get{ return m_Skills; } } + + public SkillsGumpGroup( string name, SkillName[] skills ) + { + m_Name = name; + m_Skills = skills; + + Array.Sort( m_Skills, new SkillNameComparer() ); + } + + private class SkillNameComparer : IComparer + { + public SkillNameComparer() + { + } + + public int Compare( object x, object y ) + { + SkillName a = (SkillName)x; + SkillName b = (SkillName)y; + + string aName = SkillInfo.Table[(int)a].Name; + string bName = SkillInfo.Table[(int)b].Name; + + return aName.CompareTo( bName ); + } + } + + private static SkillsGumpGroup[] m_Groups = new SkillsGumpGroup[] + { + new SkillsGumpGroup( "Bardic", new SkillName[] + { + SkillName.Discordance, + SkillName.Musicianship, + SkillName.Peacemaking, + SkillName.Provocation + } ), + new SkillsGumpGroup( "Magical", new SkillName[] + { + SkillName.Concentration, + SkillName.Magery, + SkillName.MagicResist, + SkillName.Meditation + } ), + new SkillsGumpGroup( "Combat", new SkillName[] + { + SkillName.Archery, + SkillName.Fencing, + SkillName.Bludgeoning, + SkillName.Parry, + SkillName.Swords, + SkillName.Tactics, + SkillName.HandToHand + } ), + new SkillsGumpGroup( "Actions", new SkillName[] + { + SkillName.Healing, + SkillName.Hiding, + SkillName.Lockpicking, + SkillName.Poisoning, + SkillName.RemoveTrap, + SkillName.Searching, + SkillName.Stealing, + SkillName.Stealth, + SkillName.Tracking + } ) + }; + + public static SkillsGumpGroup[] Groups + { + get{ return m_Groups; } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/VendorInventoryGump.cs b/Scripts/Gumps/VendorInventoryGump.cs new file mode 100644 index 0000000..c62c075 --- /dev/null +++ b/Scripts/Gumps/VendorInventoryGump.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Multis; +using Server.Mobiles; + +namespace Server.Gumps +{ + public class VendorInventoryGump : Gump + { + private BaseHouse m_House; + private ArrayList m_Inventories; + + public VendorInventoryGump( BaseHouse house, Mobile from ) : base( 50, 50 ) + { + m_House = house; + m_Inventories = new ArrayList( house.VendorInventories ); + + AddBackground( 0, 0, 420, 50 + 20 * m_Inventories.Count, 0x13BE ); + + AddImageTiled( 10, 10, 400, 20, 0xA40 ); + AddHtmlLocalized( 15, 10, 200, 20, 1062435, 0x7FFF, false, false ); // Reclaim Vendor Inventory + AddHtmlLocalized( 330, 10, 50, 20, 1062465, 0x7FFF, false, false ); // Expires + + AddImageTiled( 10, 40, 400, 20 * m_Inventories.Count, 0xA40 ); + + for ( int i = 0; i < m_Inventories.Count; i++ ) + { + VendorInventory inventory = (VendorInventory) m_Inventories[i]; + + int y = 40 + 20 * i; + + if ( inventory.Owner == from ) + AddButton( 10, y, 0xFA5, 0xFA7, i + 1, GumpButtonType.Reply, 0 ); + + AddLabel( 45, y, 0x481, String.Format( "{0} ({1})", inventory.ShopName, inventory.VendorName ) ); + + TimeSpan expire = inventory.ExpireTime - DateTime.Now; + int hours = (int) expire.TotalHours; + + AddLabel( 320, y, 0x481, hours.ToString() ); + AddHtmlLocalized( 350, y, 50, 20, 1062466, 0x7FFF, false, false ); // hour(s) + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 0 ) + return; + + Mobile from = sender.Mobile; + HouseSign sign = m_House.Sign; + + if ( m_House.Deleted || sign == null || sign.Deleted || !from.CheckAlive() ) + 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. + return; + } + + int index = info.ButtonID - 1; + if ( index < 0 || index >= m_Inventories.Count ) + return; + + VendorInventory inventory = (VendorInventory) m_Inventories[index]; + + if ( inventory.Owner != from || !m_House.VendorInventories.Contains( inventory ) ) + return; + + int totalItems = 0; + int givenToBackpack = 0; + int givenToInnBox = 0; + for ( int i = inventory.Items.Count - 1; i >= 0; i-- ) + { + Item item = inventory.Items[i]; + + if ( item.Deleted ) + { + inventory.Items.RemoveAt( i ); + continue; + } + + totalItems += 1 + item.TotalItems; + + if ( from.PlaceInBackpack( item ) ) + { + inventory.Items.RemoveAt( i ); + givenToBackpack += 1 + item.TotalItems; + } + else if ( from.InnBox.TryDropItem( from, item, false ) ) + { + inventory.Items.RemoveAt( i ); + givenToInnBox += 1 + item.TotalItems; + } + } + + from.SendLocalizedMessage( 1062436, totalItems.ToString() + "\t" + inventory.Gold.ToString() ); // The vendor you selected had ~1_COUNT~ items in its inventory, and ~2_AMOUNT~ gold in its account. + + int givenGold = Innkeeper.DepositUpTo( from, inventory.Gold ); + inventory.Gold -= givenGold; + + from.SendLocalizedMessage( 1060397, givenGold.ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + from.SendLocalizedMessage( 1062437, givenToBackpack.ToString() + "\t" + givenToInnBox.ToString() ); // ~1_COUNT~ items have been removed from the shop inventory and placed in your backpack. ~2_BANKCOUNT~ items were removed from the shop inventory and placed in your inn chest. + + if ( inventory.Gold > 0 || inventory.Items.Count > 0 ) + { + from.SendLocalizedMessage( 1062440 ); // Some of the shop inventory would not fit in your backpack or inn chest. Please free up some room and try again. + } + else + { + inventory.Delete(); + from.SendLocalizedMessage( 1062438 ); // The shop is now empty of inventory and funds, so it has been deleted. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/VendorRentalGumps.cs b/Scripts/Gumps/VendorRentalGumps.cs new file mode 100644 index 0000000..6868187 --- /dev/null +++ b/Scripts/Gumps/VendorRentalGumps.cs @@ -0,0 +1,616 @@ +using System; +using Server; +using Server.Items; +using Server.Network; +using Server.Prompts; +using Server.Mobiles; +using Server.Targeting; +using Server.Multis; + +namespace Server.Gumps +{ + public abstract class BaseVendorRentalGump : Gump + { + protected enum GumpType + { + UnlockedContract, + LockedContract, + Offer, + VendorLandlord, + VendorRenter + } + + protected BaseVendorRentalGump( GumpType type, VendorRentalDuration duration, int price, int renewalPrice, + Mobile landlord, Mobile renter, bool landlordRenew, bool renterRenew, bool renew ) : base( 100, 100 ) + { + if ( type == GumpType.Offer ) + Closable = false; + + AddPage( 0 ); + + AddImage( 0, 0, 0x1F40 ); + AddImageTiled( 20, 37, 300, 308, 0x1F42 ); + AddImage( 20, 325, 0x1F43 ); + + AddImage( 35, 8, 0x39 ); + AddImageTiled( 65, 8, 257, 10, 0x3A ); + AddImage( 290, 8, 0x3B ); + + AddImageTiled( 70, 55, 230, 2, 0x23C5 ); + + AddImage( 32, 33, 0x2635 ); + AddHtmlLocalized( 70, 35, 270, 20, 1062353, 0x1, false, false ); // Vendor Rental Contract + + + AddPage( 1 ); + + if ( type != GumpType.UnlockedContract ) + { + AddImage( 65, 60, 0x827 ); + AddHtmlLocalized( 79, 58, 270, 20, 1062370, 0x1, false, false ); // Landlord: + AddLabel( 150, 58, 0x64, landlord != null ? landlord.Name : "" ); + + AddImageTiled( 70, 80, 230, 2, 0x23C5 ); + } + + if ( type == GumpType.UnlockedContract || type == GumpType.LockedContract ) + AddButton( 30, 96, 0x15E1, 0x15E5, 0, GumpButtonType.Page, 2 ); + AddHtmlLocalized( 50, 95, 150, 20, 1062354, 0x1, false, false ); // Contract Length + AddHtmlLocalized( 230, 95, 270, 20, duration.Name, 0x1, false, false ); + + if ( type == GumpType.UnlockedContract || type == GumpType.LockedContract ) + AddButton( 30, 116, 0x15E1, 0x15E5, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 115, 150, 20, 1062356, 0x1, false, false ); // Price Per Rental + AddLabel( 230, 115, 0x64, price > 0 ? price.ToString() : "FREE" ); + + AddImageTiled( 50, 160, 250, 2, 0x23BF ); + + if ( type == GumpType.Offer ) + { + AddButton( 67, 180, 0x482, 0x483, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 100, 180, 270, 20, 1049011, 0x28, false, false ); // I accept! + + AddButton( 67, 210, 0x47F, 0x480, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 100, 210, 270, 20, 1049012, 0x28, false, false ); // No thanks, I decline. + } + else + { + AddImage( 49, 170, 0x61 ); + AddHtmlLocalized( 60, 170, 250, 20, 1062355, 0x1, false, false ); // Renew On Expiration? + + if ( type == GumpType.LockedContract || type == GumpType.UnlockedContract || type == GumpType.VendorLandlord ) + AddButton( 30, 192, 0x15E1, 0x15E5, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 85, 190, 250, 20, 1062359, 0x1, false, false ); // Landlord: + AddHtmlLocalized( 230, 190, 270, 20, landlordRenew ? 1049717 : 1049718, 0x1, false, false ); // YES / NO + + if ( type == GumpType.VendorRenter ) + AddButton( 30, 212, 0x15E1, 0x15E5, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 85, 210, 250, 20, 1062360, 0x1, false, false ); // Renter: + AddHtmlLocalized( 230, 210, 270, 20, renterRenew ? 1049717 : 1049718, 0x1, false, false ); // YES / NO + + if ( renew ) + { + AddImage( 49, 233, 0x939 ); + AddHtmlLocalized( 70, 230, 250, 20, 1062482, 0x1, false, false ); // Contract WILL renew + } + else + { + AddImage( 49, 233, 0x938 ); + AddHtmlLocalized( 70, 230, 250, 20, 1062483, 0x1, false, false ); // Contract WILL NOT renew + } + } + + AddImageTiled( 30, 283, 257, 30, 0x5D ); + AddImage( 285, 283, 0x5E ); + AddImage( 20, 288, 0x232C ); + + if ( type == GumpType.LockedContract ) + { + AddButton( 67, 295, 0x15E1, 0x15E5, 5, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 85, 294, 270, 20, 1062358, 0x28, false, false ); // Offer Contract To Someone + } + else if ( type == GumpType.VendorLandlord || type == GumpType.VendorRenter ) + { + if ( type == GumpType.VendorLandlord ) + AddButton( 30, 250, 0x15E1, 0x15E1, 6, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 85, 250, 250, 20, 1062499, 0x1, false, false ); // Renewal Price + AddLabel( 230, 250, 0x64, renewalPrice.ToString() ); + + AddHtmlLocalized( 60, 294, 270, 20, 1062369, 0x1, false, false ); // Renter: + AddLabel( 120, 293, 0x64, renter != null ? renter.Name : "" ); + } + + + if ( type == GumpType.UnlockedContract || type == GumpType.LockedContract ) + { + AddPage( 2 ); + + for ( int i = 0; i < VendorRentalDuration.Instances.Length; i++ ) + { + VendorRentalDuration durationItem = VendorRentalDuration.Instances[i]; + + AddButton( 30, 76 + i * 20, 0x15E1, 0x15E5, 0x10 | i, GumpButtonType.Reply, 1 ); + AddHtmlLocalized( 50, 75 + i * 20, 150, 20, durationItem.Name, 0x1, false, false ); + } + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + + if ( !IsValidResponse( from ) ) + return; + + if ( (info.ButtonID & 0x10) != 0 ) // Contract duration + { + int index = info.ButtonID & 0xF; + + if ( index < VendorRentalDuration.Instances.Length ) + { + SetContractDuration( from, VendorRentalDuration.Instances[index] ); + } + } + else + { + switch ( info.ButtonID ) + { + case 1: // Price Per Rental + SetPricePerRental( from ); + break; + + case 2: // Accept offer + AcceptOffer( from ); + break; + + case 3: // Renew on expiration - landlord + LandlordRenewOnExpiration( from ); + break; + + case 4: // Renew on expiration - renter + RenterRenewOnExpiration( from ); + break; + + case 5: // Offer Contract To Someone + OfferContract( from ); + break; + + case 6: // Renewal price + SetRenewalPrice( from ); + break; + + default: + Cancel( from ); + break; + } + } + } + + protected abstract bool IsValidResponse( Mobile from ); + + protected virtual void SetContractDuration( Mobile from, VendorRentalDuration duration ) + { + } + + protected virtual void SetPricePerRental( Mobile from ) + { + } + + protected virtual void AcceptOffer( Mobile from ) + { + } + + protected virtual void LandlordRenewOnExpiration( Mobile from ) + { + } + + protected virtual void RenterRenewOnExpiration( Mobile from ) + { + } + + protected virtual void OfferContract( Mobile from ) + { + } + + protected virtual void SetRenewalPrice( Mobile from ) + { + } + + protected virtual void Cancel( Mobile from ) + { + } + } + + public class VendorRentalContractGump : BaseVendorRentalGump + { + private VendorRentalContract m_Contract; + + public VendorRentalContractGump( VendorRentalContract contract, Mobile from ) : base( + contract.IsLockedDown ? GumpType.LockedContract : GumpType.UnlockedContract, contract.Duration, + contract.Price, contract.Price, from, null, contract.LandlordRenew, false, false ) + { + m_Contract = contract; + } + + protected override bool IsValidResponse( Mobile from ) + { + return m_Contract.IsUsableBy( from, true, true, true, true ); + } + + protected override void SetContractDuration( Mobile from, VendorRentalDuration duration ) + { + m_Contract.Duration = duration; + + from.SendGump( new VendorRentalContractGump( m_Contract, from ) ); + } + + protected override void SetPricePerRental( Mobile from ) + { + from.SendLocalizedMessage( 1062365 ); // Please enter the amount of gold that should be charged for this contract (ESC to cancel): + from.Prompt = new PricePerRentalPrompt( m_Contract ); + } + + protected override void LandlordRenewOnExpiration( Mobile from ) + { + m_Contract.LandlordRenew = !m_Contract.LandlordRenew; + + from.SendGump( new VendorRentalContractGump( m_Contract, from ) ); + } + + protected override void OfferContract( Mobile from ) + { + if ( m_Contract.IsLandlord( from ) ) + { + from.SendLocalizedMessage( 1062371 ); // Please target the person you wish to offer this contract to. + from.Target = new OfferContractTarget( m_Contract ); + } + } + + private class PricePerRentalPrompt : Prompt + { + private VendorRentalContract m_Contract; + + public PricePerRentalPrompt( VendorRentalContract contract ) + { + m_Contract = contract; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( !m_Contract.IsUsableBy( from, true, true, true, true ) ) + return; + + text = text.Trim(); + + int price; + + if ( !int.TryParse( text, out price ) ) + price = -1; + + if ( price < 0 ) + { + from.SendLocalizedMessage( 1062485 ); // Invalid entry. Rental fee set to 0. + m_Contract.Price = 0; + } + else if ( price > 5000000 ) + { + m_Contract.Price = 5000000; + } + else + { + m_Contract.Price = price; + } + + from.SendGump( new VendorRentalContractGump( m_Contract, from ) ); + } + + public override void OnCancel( Mobile from ) + { + if ( m_Contract.IsUsableBy( from, true, true, true, true ) ) + from.SendGump( new VendorRentalContractGump( m_Contract, from ) ); + } + } + + private class OfferContractTarget : Target + { + private VendorRentalContract m_Contract; + + public OfferContractTarget( VendorRentalContract contract ) : base( -1, false, TargetFlags.None ) + { + m_Contract = contract; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !m_Contract.IsUsableBy( from, true, false, true, true ) ) + return; + + Mobile mob = targeted as Mobile; + + if ( mob == null || !mob.Player || !mob.Alive || mob == from ) + { + from.SendLocalizedMessage(1071984); //That is not a valid target for a rental contract! + } + else if ( !mob.InRange( m_Contract, 5 ) ) + { + from.SendLocalizedMessage( 501853 ); // Target is too far away. + } + else + { + from.SendLocalizedMessage( 1062372 ); // Please wait while that person considers your offer. + + mob.SendLocalizedMessage( 1062373, from.Name ); // ~1_NAME~ is offering you a vendor rental. If you choose to accept this offer, you have 30 seconds to do so. + mob.SendGump( new VendorRentalOfferGump( m_Contract, from ) ); + + m_Contract.Offeree = mob; + } + } + + protected override void OnTargetCancel( Mobile from, TargetCancelType cancelType ) + { + from.SendLocalizedMessage( 1062380 ); // You decide against offering the contract to anyone. + } + } + } + + public class VendorRentalOfferGump : BaseVendorRentalGump + { + private VendorRentalContract m_Contract; + private Mobile m_Landlord; + + public VendorRentalOfferGump( VendorRentalContract contract, Mobile landlord ) : base( + GumpType.Offer, contract.Duration, contract.Price, contract.Price, + landlord, null, contract.LandlordRenew, false, false ) + { + m_Contract = contract; + m_Landlord = landlord; + } + + protected override bool IsValidResponse( Mobile from ) + { + return m_Contract.IsUsableBy( m_Landlord, true, false, false, false ) && from.CheckAlive() && m_Contract.Offeree == from; + } + + protected override void AcceptOffer( Mobile from ) + { + m_Contract.Offeree = null; + + if ( !m_Contract.Map.CanFit( m_Contract.Location, 16, false, false ) ) + { + m_Landlord.SendLocalizedMessage( 1062486 ); // A vendor cannot exist at that location. Please try again. + return; + } + + BaseHouse house = BaseHouse.FindHouseAt( m_Contract ); + if ( house == null ) + return; + + int price = m_Contract.Price; + int goldToGive; + + if ( price > 0 ) + { + if ( Innkeeper.Withdraw( from, price ) ) + { + from.SendLocalizedMessage( 1060398, price.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your inn chest. + + int depositedGold = Innkeeper.DepositUpTo( m_Landlord, price ); + goldToGive = price - depositedGold; + + if ( depositedGold > 0 ) + m_Landlord.SendLocalizedMessage( 1060397, price.ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + + if ( goldToGive > 0 ) + m_Landlord.SendLocalizedMessage( 500390 ); // Your inn chest is full. + } + else + { + from.SendLocalizedMessage( 1062378 ); // You do not have enough gold in your inn chest to cover the cost of the contract. + m_Landlord.SendLocalizedMessage( 1062374, from.Name ); // ~1_NAME~ has declined your vendor rental offer. + + return; + } + } + else + { + goldToGive = 0; + } + + PlayerVendor vendor = new RentedVendor( from, house, m_Contract.Duration, price, m_Contract.LandlordRenew, goldToGive ); + vendor.MoveToWorld( m_Contract.Location, m_Contract.Map ); + + m_Contract.Delete(); + + from.SendLocalizedMessage( 1062377 ); // You have accepted the offer and now own a vendor in this house. Rental contract options and details may be viewed on this vendor via the 'Contract Options' context menu. + m_Landlord.SendLocalizedMessage( 1062376, from.Name ); // ~1_NAME~ has accepted your vendor rental offer. Rental contract details and options may be viewed on this vendor via the 'Contract Options' context menu. + } + + protected override void Cancel( Mobile from ) + { + m_Contract.Offeree = null; + + from.SendLocalizedMessage( 1062375 ); // You decline the offer for a vendor space rental. + m_Landlord.SendLocalizedMessage( 1062374, from.Name ); // ~1_NAME~ has declined your vendor rental offer. + } + } + + public class RenterVendorRentalGump : BaseVendorRentalGump + { + private RentedVendor m_Vendor; + + public RenterVendorRentalGump( RentedVendor vendor ) : base( + GumpType.VendorRenter, vendor.RentalDuration, vendor.RentalPrice, vendor.RenewalPrice, + vendor.Landlord, vendor.Owner, vendor.LandlordRenew, vendor.RenterRenew, vendor.Renew ) + { + m_Vendor = vendor; + } + + protected override bool IsValidResponse( Mobile from ) + { + return m_Vendor.CanInteractWith( from, true ); + } + + protected override void RenterRenewOnExpiration( Mobile from ) + { + m_Vendor.RenterRenew = !m_Vendor.RenterRenew; + + from.SendGump( new RenterVendorRentalGump( m_Vendor ) ); + } + } + + public class LandlordVendorRentalGump : BaseVendorRentalGump + { + private RentedVendor m_Vendor; + + public LandlordVendorRentalGump( RentedVendor vendor ) : base( + GumpType.VendorLandlord, vendor.RentalDuration, vendor.RentalPrice, vendor.RenewalPrice, + vendor.Landlord, vendor.Owner, vendor.LandlordRenew, vendor.RenterRenew, vendor.Renew ) + { + m_Vendor = vendor; + } + + protected override bool IsValidResponse( Mobile from ) + { + return m_Vendor.CanInteractWith( from, false ) && m_Vendor.IsLandlord( from ); + } + + protected override void LandlordRenewOnExpiration( Mobile from ) + { + m_Vendor.LandlordRenew = !m_Vendor.LandlordRenew; + + from.SendGump( new LandlordVendorRentalGump( m_Vendor ) ); + } + + protected override void SetRenewalPrice( Mobile from ) + { + from.SendLocalizedMessage( 1062500 ); // Enter contract renewal price: + + from.Prompt = new ContractRenewalPricePrompt( m_Vendor ); + } + + private class ContractRenewalPricePrompt : Prompt + { + private RentedVendor m_Vendor; + + public ContractRenewalPricePrompt( RentedVendor vendor ) + { + m_Vendor = vendor; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( !m_Vendor.CanInteractWith( from, false ) || !m_Vendor.IsLandlord( from ) ) + return; + + text = text.Trim(); + + int price; + + if ( !int.TryParse( text, out price ) ) + price = -1; + + if ( price < 0 ) + { + from.SendLocalizedMessage( 1062485 ); // Invalid entry. Rental fee set to 0. + m_Vendor.RenewalPrice = 0; + } + else if ( price > 5000000 ) + { + m_Vendor.RenewalPrice = 5000000; + } + else + { + m_Vendor.RenewalPrice = price; + } + + m_Vendor.RenterRenew = false; + + from.SendGump( new LandlordVendorRentalGump( m_Vendor ) ); + } + + public override void OnCancel( Mobile from ) + { + if ( m_Vendor.CanInteractWith( from, false ) && m_Vendor.IsLandlord( from ) ) + from.SendGump( new LandlordVendorRentalGump( m_Vendor ) ); + } + } + } + + public class VendorRentalRefundGump : Gump + { + private RentedVendor m_Vendor; + private Mobile m_Landlord; + private int m_RefundAmount; + + public VendorRentalRefundGump( RentedVendor vendor, Mobile landlord, int refundAmount ) : base( 50, 50 ) + { + m_Vendor = vendor; + m_Landlord = landlord; + m_RefundAmount = refundAmount; + + AddBackground( 0, 0, 420, 320, 0x13BE ); + + AddImageTiled( 10, 10, 400, 300, 0xA40 ); + AddAlphaRegion( 10, 10, 400, 300 ); + + /* The landlord for this vendor is offering you a partial refund of your rental fee + * in exchange for immediate termination of your rental contract.

+ * + * If you accept this offer, the vendor will be immediately dismissed. You will then + * be able to claim the inventory and any funds the vendor may be holding for you via + * a context menu on the house sign for this house. + */ + AddHtmlLocalized( 10, 10, 400, 150, 1062501, 0x7FFF, false, true ); + + AddHtmlLocalized( 10, 180, 150, 20, 1062508, 0x7FFF, false, false ); // Vendor Name: + AddLabel( 160, 180, 0x480, vendor.Name ); + + AddHtmlLocalized( 10, 200, 150, 20, 1062509, 0x7FFF, false, false ); // Shop Name: + AddLabel( 160, 200, 0x480, vendor.ShopName ); + + AddHtmlLocalized( 10, 220, 150, 20, 1062510, 0x7FFF, false, false ); // Refund Amount: + AddLabel( 160, 220, 0x480, refundAmount.ToString() ); + + AddButton( 10, 268, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 268, 350, 20, 1062511, 0x7FFF, false, false ); // Agree, and dismiss vendor + + AddButton( 10, 288, 0xFA5, 0xFA7, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 288, 350, 20, 1062512, 0x7FFF, false, false ); // No, I want to keep my vendor + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + Mobile from = sender.Mobile; + + if ( !m_Vendor.CanInteractWith( from, true ) || !m_Vendor.CanInteractWith( m_Landlord, false ) || !m_Vendor.IsLandlord( m_Landlord ) ) + return; + + if ( info.ButtonID == 1 ) + { + if ( Innkeeper.Withdraw( m_Landlord, m_RefundAmount ) ) + { + m_Landlord.SendLocalizedMessage( 1060398, m_RefundAmount.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your inn chest. + + int depositedGold = Innkeeper.DepositUpTo( from, m_RefundAmount ); + + if ( depositedGold > 0 ) + from.SendLocalizedMessage( 1060397, depositedGold.ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + + m_Vendor.HoldGold += m_RefundAmount - depositedGold; + + m_Vendor.Destroy( false ); + + from.SendLocalizedMessage(1071990); //Remember to claim your vendor's belongings from the house sign! + } + else + { + m_Landlord.SendLocalizedMessage( 1062507 ); // You do not have that much money in your inn chest. + } + } + else + { + m_Landlord.SendLocalizedMessage( 1062513 ); // The renter declined your offer. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/WarningGump.cs b/Scripts/Gumps/WarningGump.cs new file mode 100644 index 0000000..55ce101 --- /dev/null +++ b/Scripts/Gumps/WarningGump.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Gumps +{ + public delegate void WarningGumpCallback( Mobile from, bool okay, object state ); + + public class WarningGump : Gump + { + private WarningGumpCallback m_Callback; + private object m_State; + private bool m_CancelButton; + + public WarningGump( int header, int headerColor, object content, int contentColor, int width, int height, WarningGumpCallback callback, object state ) + : this( header, headerColor, content, contentColor, width, height, callback, state, true ) + { + } + + public WarningGump( int header, int headerColor, object content, int contentColor, int width, int height, WarningGumpCallback callback, object state, bool cancelButton ) : base( (640 - width) / 2, (480 - height) / 2 ) + { + m_Callback = callback; + m_State = state; + m_CancelButton = cancelButton; + + Closable = false; + + AddPage( 0 ); + + AddBackground( 0, 0, width, height, 5054 ); + + AddImageTiled( 10, 10, width - 20, 20, 2624 ); + AddAlphaRegion( 10, 10, width - 20, 20 ); + AddHtmlLocalized( 10, 10, width - 20, 20, header, headerColor, false, false ); + + AddImageTiled( 10, 40, width - 20, height - 80, 2624 ); + AddAlphaRegion( 10, 40, width - 20, height - 80 ); + + if ( content is int ) + AddHtmlLocalized( 10, 40, width - 20, height - 80, (int)content, contentColor, false, true ); + else if ( content is string ) + AddHtml( 10, 40, width - 20, height - 80, String.Format( "{1}", contentColor, content ), false, true ); + + AddImageTiled( 10, height - 30, width - 20, 20, 2624 ); + AddAlphaRegion( 10, height - 30, width - 20, 20 ); + + AddButton( 10, height - 30, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 40, height - 30, 170, 20, 1011036, 32767, false, false ); // OKAY + + if( m_CancelButton ) + { + AddButton( 10 + ((width - 20) / 2), height - 30, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 40 + ((width - 20) / 2), height - 30, 170, 20, 1011012, 32767, false, false ); // CANCEL + } + } + + public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 1 && m_Callback != null ) + m_Callback( sender.Mobile, true, m_State ); + else if ( m_Callback != null ) + m_Callback( sender.Mobile, false, m_State ); + } + } +} \ No newline at end of file diff --git a/Scripts/Gumps/WhoGump.cs b/Scripts/Gumps/WhoGump.cs new file mode 100644 index 0000000..72443b7 --- /dev/null +++ b/Scripts/Gumps/WhoGump.cs @@ -0,0 +1,300 @@ +using System; +using System.Collections.Generic; +using Server.Commands; +using Server.Mobiles; +using Server.Network; + +namespace Server.Gumps +{ + public class WhoGump : Gump + { + public static void Initialize() + { + CommandSystem.Register( "Who", AccessLevel.Counselor, new CommandEventHandler( WhoList_OnCommand ) ); + CommandSystem.Register( "WhoList", AccessLevel.Counselor, new CommandEventHandler( WhoList_OnCommand ) ); + } + + [Usage( "WhoList [filter]" )] + [Aliases( "Who" )] + [Description( "Lists all connected clients. Optionally filters results by name." )] + private static void WhoList_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new WhoGump( e.Mobile, e.ArgString ) ); + } + + public static bool OldStyle = PropsConfig.OldStyle; + + public static readonly int GumpOffsetX = PropsConfig.GumpOffsetX; + public static readonly int GumpOffsetY = PropsConfig.GumpOffsetY; + + public static readonly int TextHue = PropsConfig.TextHue; + public static readonly int TextOffsetX = PropsConfig.TextOffsetX; + + public static readonly int OffsetGumpID = PropsConfig.OffsetGumpID; + public static readonly int HeaderGumpID = PropsConfig.HeaderGumpID; + public static readonly int EntryGumpID = PropsConfig.EntryGumpID; + public static readonly int BackGumpID = PropsConfig.BackGumpID; + public static readonly int SetGumpID = PropsConfig.SetGumpID; + + public static readonly int SetWidth = PropsConfig.SetWidth; + public static readonly int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY; + public static readonly int SetButtonID1 = PropsConfig.SetButtonID1; + public static readonly int SetButtonID2 = PropsConfig.SetButtonID2; + + public static readonly int PrevWidth = PropsConfig.PrevWidth; + public static readonly int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY; + public static readonly int PrevButtonID1 = PropsConfig.PrevButtonID1; + public static readonly int PrevButtonID2 = PropsConfig.PrevButtonID2; + + public static readonly int NextWidth = PropsConfig.NextWidth; + public static readonly int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY; + public static readonly int NextButtonID1 = PropsConfig.NextButtonID1; + public static readonly int NextButtonID2 = PropsConfig.NextButtonID2; + + public static readonly int OffsetSize = PropsConfig.OffsetSize; + + public static readonly int EntryHeight = PropsConfig.EntryHeight; + public static readonly int BorderSize = PropsConfig.BorderSize; + + private static bool PrevLabel = false, NextLabel = false; + + private static readonly int PrevLabelOffsetX = PrevWidth + 1; + private static readonly int PrevLabelOffsetY = 0; + + private static readonly int NextLabelOffsetX = -29; + private static readonly int NextLabelOffsetY = 0; + + private static readonly int EntryWidth = 180; + private static readonly int EntryCount = 15; + + private static readonly int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize; + private static readonly int TotalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (EntryCount + 1)); + + private static readonly int BackWidth = BorderSize + TotalWidth + BorderSize; + private static readonly int BackHeight = BorderSize + TotalHeight + BorderSize; + + private Mobile m_Owner; + private List m_Mobiles; + private int m_Page; + + private class InternalComparer : IComparer + { + public static readonly IComparer Instance = new InternalComparer(); + + public InternalComparer() + { + } + + public int Compare( Mobile x, Mobile y ) + { + if ( x == null || y == null ) + throw new ArgumentException(); + + if ( x.AccessLevel > y.AccessLevel ) + return -1; + else if ( x.AccessLevel < y.AccessLevel ) + return 1; + else + return Insensitive.Compare( x.Name, y.Name ); + } + } + + public WhoGump( Mobile owner, string filter ) : this( owner, BuildList( owner, filter ), 0 ) + { + } + + public WhoGump( Mobile owner, List list, int page ) : base( GumpOffsetX, GumpOffsetY ) + { + owner.CloseGump( typeof( WhoGump ) ); + + m_Owner = owner; + m_Mobiles = list; + + Initialize( page ); + } + + public static List BuildList( Mobile owner, string filter ) + { + if ( filter != null && (filter = filter.Trim()).Length == 0 ) + filter = null; + else + filter = filter.ToLower(); + + List list = new List(); + List states = NetState.Instances; + + for ( int i = 0; i < states.Count; ++i ) + { + Mobile m = states[i].Mobile; + + if ( m != null && (m == owner || !m.Hidden || owner.AccessLevel > m.AccessLevel || (m is PlayerMobile && ((PlayerMobile)m).VisibilityList.Contains( owner ) ) ) ) + { + if ( filter != null && ( m.Name == null || m.Name.ToLower().IndexOf( filter ) < 0 ) ) + continue; + + list.Add( m ); + } + } + + list.Sort( InternalComparer.Instance ); + + return list; + } + + public void Initialize( int page ) + { + m_Page = page; + + int count = m_Mobiles.Count - (page * EntryCount); + + if ( count < 0 ) + count = 0; + else if ( count > EntryCount ) + count = EntryCount; + + int totalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (count + 1)); + + AddPage( 0 ); + + AddBackground( 0, 0, BackWidth, BorderSize + totalHeight + BorderSize, BackGumpID ); + AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), totalHeight, OffsetGumpID ); + + int x = BorderSize + OffsetSize; + int y = BorderSize + OffsetSize; + + int emptyWidth = TotalWidth - PrevWidth - NextWidth - (OffsetSize * 4) - (OldStyle ? SetWidth + OffsetSize : 0); + + if ( !OldStyle ) + AddImageTiled( x - (OldStyle ? OffsetSize : 0), y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0), EntryHeight, EntryGumpID ); + + AddLabel( x + TextOffsetX, y, TextHue, String.Format( "Page {0} of {1} ({2})", page+1, (m_Mobiles.Count + EntryCount - 1) / EntryCount, m_Mobiles.Count ) ); + + x += emptyWidth + OffsetSize; + + if ( OldStyle ) + AddImageTiled( x, y, TotalWidth - (OffsetSize * 3) - SetWidth, EntryHeight, HeaderGumpID ); + else + AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID ); + + if ( page > 0 ) + { + AddButton( x + PrevOffsetX, y + PrevOffsetY, PrevButtonID1, PrevButtonID2, 1, GumpButtonType.Reply, 0 ); + + if ( PrevLabel ) + AddLabel( x + PrevLabelOffsetX, y + PrevLabelOffsetY, TextHue, "Previous" ); + } + + x += PrevWidth + OffsetSize; + + if ( !OldStyle ) + AddImageTiled( x, y, NextWidth, EntryHeight, HeaderGumpID ); + + if ( (page + 1) * EntryCount < m_Mobiles.Count ) + { + AddButton( x + NextOffsetX, y + NextOffsetY, NextButtonID1, NextButtonID2, 2, GumpButtonType.Reply, 1 ); + + if ( NextLabel ) + AddLabel( x + NextLabelOffsetX, y + NextLabelOffsetY, TextHue, "Next" ); + } + + for ( int i = 0, index = page * EntryCount; i < EntryCount && index < m_Mobiles.Count; ++i, ++index ) + { + x = BorderSize + OffsetSize; + y += EntryHeight + OffsetSize; + + Mobile m = m_Mobiles[index]; + + AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID ); + AddLabelCropped( x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, GetHueFor( m ), m.Deleted ? "(deleted)" : m.Name ); + + x += EntryWidth + OffsetSize; + + if ( SetGumpID != 0 ) + AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID ); + + if ( m.NetState != null && !m.Deleted ) + AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, i + 3, GumpButtonType.Reply, 0 ); + } + } + + private static int GetHueFor( Mobile m ) + { + switch ( m.AccessLevel ) + { + case AccessLevel.Owner: + case AccessLevel.Developer: + case AccessLevel.Administrator: return 0x516; + case AccessLevel.Seer: return 0x144; + case AccessLevel.GameMaster: return 0x21; + case AccessLevel.Counselor: return 0x2; + case AccessLevel.Player: default: + { + if ( m.Kills >= 5 ) + return 0x21; + else if ( m.Criminal ) + return 0x3B1; + + return 0x58; + } + } + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + Mobile from = state.Mobile; + + switch ( info.ButtonID ) + { + case 0: // Closed + { + return; + } + case 1: // Previous + { + if ( m_Page > 0 ) + from.SendGump( new WhoGump( from, m_Mobiles, m_Page - 1 ) ); + + break; + } + case 2: // Next + { + if ( (m_Page + 1) * EntryCount < m_Mobiles.Count ) + from.SendGump( new WhoGump( from, m_Mobiles, m_Page + 1 ) ); + + break; + } + default: + { + int index = (m_Page * EntryCount) + (info.ButtonID - 3); + + if ( index >= 0 && index < m_Mobiles.Count ) + { + Mobile m = m_Mobiles[index]; + + if ( m.Deleted ) + { + from.SendMessage( "That player has deleted their character." ); + from.SendGump( new WhoGump( from, m_Mobiles, m_Page ) ); + } + else if ( m.NetState == null ) + { + from.SendMessage( "That player is no longer online." ); + from.SendGump( new WhoGump( from, m_Mobiles, m_Page ) ); + } + else if ( m == from || !m.Hidden || from.AccessLevel > m.AccessLevel || (m is PlayerMobile && ((PlayerMobile)m).VisibilityList.Contains( from ))) + { + from.SendGump( new ClientGump( from, m.NetState ) ); + } + else + { + from.SendMessage( "You cannot see them." ); + from.SendGump( new WhoGump( from, m_Mobiles, m_Page ) ); + } + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/AbbatoirAddon.cs b/Scripts/Items/Addons/AbbatoirAddon.cs new file mode 100644 index 0000000..392f1d0 --- /dev/null +++ b/Scripts/Items/Addons/AbbatoirAddon.cs @@ -0,0 +1,71 @@ +using System; +using Server; + +namespace Server.Items +{ + public class AbbatoirAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new AbbatoirDeed(); } } + + [Constructable] + public AbbatoirAddon() + { + AddComponent( new AddonComponent( 0x120E ), -1, -1, 0 ); + AddComponent( new AddonComponent( 0x120F ), 0, -1, 0 ); + AddComponent( new AddonComponent( 0x1210 ), 1, -1, 0 ); + AddComponent( new AddonComponent( 0x1215 ), -1, 0, 0 ); + AddComponent( new AddonComponent( 0x1216 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1211 ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1214 ), -1, 1, 0 ); + AddComponent( new AddonComponent( 0x1213 ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x1212 ), 1, 1, 0 ); + } + + public AbbatoirAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class AbbatoirDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new AbbatoirAddon(); } } + public override int LabelNumber{ get{ return 1044329; } } // abbatoir + + [Constructable] + public AbbatoirDeed() + { + } + + public AbbatoirDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/AddonComponent.cs b/Scripts/Items/Addons/AddonComponent.cs new file mode 100644 index 0000000..f593e71 --- /dev/null +++ b/Scripts/Items/Addons/AddonComponent.cs @@ -0,0 +1,285 @@ +using System; +using Server; + +namespace Server.Items +{ + [Server.Engines.Craft.Anvil] + public class AnvilComponent : AddonComponent + { + [Constructable] + public AnvilComponent( int itemID ) : base( itemID ) + { + } + + public AnvilComponent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Server.Engines.Craft.Forge] + public class ForgeComponent : AddonComponent + { + [Constructable] + public ForgeComponent( int itemID ) : base( itemID ) + { + } + + public ForgeComponent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LocalizedAddonComponent : AddonComponent + { + private int m_LabelNumber; + + [CommandProperty( AccessLevel.GameMaster )] + public int Number + { + get{ return m_LabelNumber; } + set{ m_LabelNumber = value; InvalidateProperties(); } + } + + public override int LabelNumber{ get{ return m_LabelNumber; } } + + [Constructable] + public LocalizedAddonComponent( int itemID, int labelNumber ) : base( itemID ) + { + m_LabelNumber = labelNumber; + } + + public LocalizedAddonComponent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( (int) m_LabelNumber ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_LabelNumber = reader.ReadInt(); + break; + } + } + } + } + + public class AddonComponent : Item, IChopable + { + private Point3D m_Offset; + private BaseAddon m_Addon; + + [CommandProperty( AccessLevel.GameMaster )] + public BaseAddon Addon + { + get + { + return m_Addon; + } + set + { + m_Addon = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Offset + { + get + { + return m_Offset; + } + set + { + m_Offset = value; + } + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get + { + return base.Hue; + } + set + { + base.Hue = value; + + if ( m_Addon != null && m_Addon.ShareHue ) + m_Addon.Hue = value; + } + } + + public virtual bool NeedsWall{ get{ return false; } } + public virtual Point3D WallPosition{ get{ return Point3D.Zero; } } + + [Constructable] + public AddonComponent( int itemID ) : base( itemID ) + { + Movable = false; + ApplyLightTo( this ); + } + + public AddonComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_Addon != null ) + m_Addon.OnComponentUsed( this, from ); + } + + public void OnChop( Mobile from ) + { + if ( m_Addon != null && from.InRange( GetWorldLocation(), 3 ) ) + m_Addon.OnChop( from ); + else + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + + public override void OnLocationChange( Point3D old ) + { + if ( m_Addon != null ) + m_Addon.Location = new Point3D( X - m_Offset.X, Y - m_Offset.Y, Z - m_Offset.Z ); + } + + public override void OnMapChange() + { + if ( m_Addon != null ) + m_Addon.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Addon != null ) + m_Addon.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_Addon ); + writer.Write( m_Offset ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + case 0: + { + m_Addon = reader.ReadItem() as BaseAddon; + m_Offset = reader.ReadPoint3D(); + + if ( m_Addon != null ) + m_Addon.OnComponentLoaded( this ); + + ApplyLightTo( this ); + + break; + } + } + + if ( version < 1 && Weight == 0 ) + Weight = -1; + } + + public static void ApplyLightTo( Item item ) + { + if ( (item.ItemData.Flags & TileFlag.LightSource) == 0 ) + return; // not a light source + + int itemID = item.ItemID; + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + LightEntry entry = m_Entries[i]; + int[] toMatch = entry.m_ItemIDs; + bool contains = false; + + for ( int j = 0; !contains && j < toMatch.Length; ++j ) + contains = ( itemID == toMatch[j] ); + + if ( contains ) + { + item.Light = entry.m_Light; + return; + } + } + } + + private static LightEntry[] m_Entries = new LightEntry[] + { + new LightEntry( LightType.WestSmall, 1122, 1123, 1124, 1141, 1142, 1143, 1144, 1145, 1146, 2347, 2359, 2360, 2361, 2362, 2363, 2364, 2387, 2388, 2389, 2390, 2391, 2392 ), + new LightEntry( LightType.NorthSmall, 1131, 1133, 1134, 1147, 1148, 1149, 1150, 1151, 1152, 2352, 2373, 2374, 2375, 2376, 2377, 2378, 2401, 2402, 2403, 2404, 2405, 2406 ), + new LightEntry( LightType.Circle300, 6526, 6538, 6571 ), + new LightEntry( LightType.Circle150, 5703, 6587 ) + }; + + private class LightEntry + { + public LightType m_Light; + public int[] m_ItemIDs; + + public LightEntry( LightType light, params int[] itemIDs ) + { + m_Light = light; + m_ItemIDs = itemIDs; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/AddonContainerComponent.cs b/Scripts/Items/Addons/AddonContainerComponent.cs new file mode 100644 index 0000000..c6c93a3 --- /dev/null +++ b/Scripts/Items/Addons/AddonContainerComponent.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.ContextMenus; + +namespace Server.Items +{ + public class AddonContainerComponent : Item, IChopable + { + public virtual bool NeedsWall { get { return false; } } + public virtual Point3D WallPosition { get { return Point3D.Zero; } } + + private Point3D m_Offset; + private BaseAddonContainer m_Addon; + + [CommandProperty( AccessLevel.GameMaster )] + public BaseAddonContainer Addon + { + get { return m_Addon; } + set { m_Addon = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Offset + { + get { return m_Offset; } + set { m_Offset = value; } + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get { return base.Hue; } + set + { + base.Hue = value; + + if ( m_Addon != null && m_Addon.ShareHue ) + m_Addon.Hue = value; + } + } + + [Constructable] + public AddonContainerComponent( int itemID ) : base( itemID ) + { + Movable = false; + + AddonComponent.ApplyLightTo( this ); + } + + public AddonContainerComponent( Serial serial ) : base( serial ) + { + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( Addon != null ) + return Addon.OnDragDrop( from, dropped ); + + return false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_Addon != null ) + m_Addon.OnComponentUsed( this, from ); + } + + public override void OnLocationChange( Point3D old ) + { + if ( m_Addon != null ) + m_Addon.Location = new Point3D( X - m_Offset.X, Y - m_Offset.Y, Z - m_Offset.Z ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + if ( m_Addon != null ) + m_Addon.GetContextMenuEntries( from, list ); + } + + public override void OnMapChange() + { + if ( m_Addon != null ) + m_Addon.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Addon != null ) + m_Addon.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Addon ); + writer.Write( m_Offset ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Addon = reader.ReadItem() as BaseAddonContainer; + m_Offset = reader.ReadPoint3D(); + + if ( m_Addon != null ) + m_Addon.OnComponentLoaded( this ); + + AddonComponent.ApplyLightTo( this ); + } + + public virtual void OnChop( Mobile from ) + { + if ( m_Addon != null && from.InRange( GetWorldLocation(), 3 ) ) + m_Addon.OnChop( from ); + else + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + } + + public class LocalizedContainerComponent : AddonContainerComponent + { + private int m_LabelNumber; + + public override int LabelNumber + { + get + { + if ( m_LabelNumber > 0 ) + return m_LabelNumber; + + return base.LabelNumber; + } + } + + public LocalizedContainerComponent( int itemID, int labelNumber ) : base( itemID ) + { + m_LabelNumber = labelNumber; + } + + public LocalizedContainerComponent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_LabelNumber ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_LabelNumber = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Addons/AnvilEastAddon.cs b/Scripts/Items/Addons/AnvilEastAddon.cs new file mode 100644 index 0000000..2df2183 --- /dev/null +++ b/Scripts/Items/Addons/AnvilEastAddon.cs @@ -0,0 +1,63 @@ +using System; +using Server; + +namespace Server.Items +{ + public class AnvilEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new AnvilEastDeed(); } } + + [Constructable] + public AnvilEastAddon() + { + AddComponent( new AnvilComponent( 0xFAF ), 0, 0, 0 ); + } + + public AnvilEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class AnvilEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new AnvilEastAddon(); } } + public override int LabelNumber{ get{ return 1044333; } } // anvil (east) + + [Constructable] + public AnvilEastDeed() + { + } + + public AnvilEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/AnvilSouthAddon.cs b/Scripts/Items/Addons/AnvilSouthAddon.cs new file mode 100644 index 0000000..e635c91 --- /dev/null +++ b/Scripts/Items/Addons/AnvilSouthAddon.cs @@ -0,0 +1,63 @@ +using System; +using Server; + +namespace Server.Items +{ + public class AnvilSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new AnvilSouthDeed(); } } + + [Constructable] + public AnvilSouthAddon() + { + AddComponent( new AnvilComponent( 0xFB0 ), 0, 0, 0 ); + } + + public AnvilSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class AnvilSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new AnvilSouthAddon(); } } + public override int LabelNumber{ get{ return 1044334; } } // anvil (south) + + [Constructable] + public AnvilSouthDeed() + { + } + + public AnvilSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/ArcheryButteAddon.cs b/Scripts/Items/Addons/ArcheryButteAddon.cs new file mode 100644 index 0000000..7dcd91f --- /dev/null +++ b/Scripts/Items/Addons/ArcheryButteAddon.cs @@ -0,0 +1,371 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + [FlipableAttribute( 0x100A/*East*/, 0x100B/*South*/ )] + public class ArcheryButte : AddonComponent + { + private double m_MinSkill; + private double m_MaxSkill; + + private int m_Arrows, m_Bolts; + + private DateTime m_LastUse; + + [CommandProperty( AccessLevel.GameMaster )] + public double MinSkill + { + get{ return m_MinSkill; } + set{ m_MinSkill = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public double MaxSkill + { + get{ return m_MaxSkill; } + set{ m_MaxSkill = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime LastUse + { + get{ return m_LastUse; } + set{ m_LastUse = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool FacingEast + { + get{ return ( ItemID == 0x100A ); } + set{ ItemID = value ? 0x100A : 0x100B; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Arrows + { + get{ return m_Arrows; } + set{ m_Arrows = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Bolts + { + get{ return m_Bolts; } + set{ m_Bolts = value; } + } + + [Constructable] + public ArcheryButte() : this( 0x100A ) + { + } + + public ArcheryButte( int itemID ) : base( itemID ) + { + m_MinSkill = -25.0; + m_MaxSkill = +25.0; + } + + public ArcheryButte( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( (m_Arrows > 0 || m_Bolts > 0) && from.InRange( GetWorldLocation(), 1 ) ) + Gather( from ); + else + Fire( from ); + } + + public void Gather( Mobile from ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500592 ); // You gather the arrows and bolts. + + if ( m_Arrows > 0 ) + from.AddToBackpack( new Arrow( m_Arrows ) ); + + if ( m_Bolts > 0 ) + from.AddToBackpack( new Bolt( m_Bolts ) ); + + m_Arrows = 0; + m_Bolts = 0; + + m_Entries = null; + } + + private static TimeSpan UseDelay = TimeSpan.FromSeconds( 2.0 ); + + private class ScoreEntry + { + private int m_Total; + private int m_Count; + + public int Total{ get{ return m_Total; } set{ m_Total = value; } } + public int Count{ get{ return m_Count; } set{ m_Count = value; } } + + public void Record( int score ) + { + m_Total += score; + m_Count += 1; + } + + public ScoreEntry() + { + } + } + + private Hashtable m_Entries; + + private ScoreEntry GetEntryFor( Mobile from ) + { + if ( m_Entries == null ) + m_Entries = new Hashtable(); + + ScoreEntry e = (ScoreEntry)m_Entries[from]; + + if ( e == null ) + m_Entries[from] = e = new ScoreEntry(); + + return e; + } + + public void Fire( Mobile from ) + { + BaseRanged bow = from.Weapon as BaseRanged; + + if ( bow == null ) + { + SendLocalizedMessageTo( from, 500593 ); // You must practice with ranged weapons on this. + return; + } + + if ( DateTime.Now < (m_LastUse + UseDelay) ) + return; + + Point3D worldLoc = GetWorldLocation(); + + if ( FacingEast ? from.X <= worldLoc.X : from.Y <= worldLoc.Y ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500596 ); // You would do better to stand in front of the archery butte. + return; + } + + if ( FacingEast ? from.Y != worldLoc.Y : from.X != worldLoc.X ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500597 ); // You aren't properly lined up with the archery butte to get an accurate shot. + return; + } + + if ( !from.InRange( worldLoc, 6 ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500598 ); // You are too far away from the archery butte to get an accurate shot. + return; + } + else if ( from.InRange( worldLoc, 4 ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500599 ); // You are too close to the target. + return; + } + + Container pack = from.Backpack; + Type ammoType = bow.AmmoType; + + bool isArrow = ( ammoType == typeof( Arrow ) ); + bool isBolt = ( ammoType == typeof( Bolt ) ); + bool isKnown = ( isArrow || isBolt ); + + if ( from is PlayerMobile && ( pack == null || !pack.ConsumeTotal( ammoType, 1 ) ) ) + { + if ( isArrow ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500594 ); // You do not have any arrows with which to practice. + else if ( isBolt ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500595 ); // You do not have any crossbow bolts with which to practice. + else + SendLocalizedMessageTo( from, 500593 ); // You must practice with ranged weapons on this. + + return; + } + + m_LastUse = DateTime.Now; + + from.Direction = from.GetDirectionTo( GetWorldLocation() ); + bow.PlaySwingAnimation( from ); + from.MovingEffect( this, bow.EffectID, 18, 1, false, false ); + + ScoreEntry se = GetEntryFor( from ); + + if ( from is PlayerMobile && !from.CheckSkill( bow.Skill, m_MinSkill, m_MaxSkill ) ) + { + from.PlaySound( bow.MissSound ); + + PublicOverheadMessage( MessageType.Regular, 0x3B2, 500604, from.Name ); // You miss the target altogether. + + se.Record( 0 ); + + if ( se.Count == 1 ) + PublicOverheadMessage( MessageType.Regular, 0x3B2, 1062719, se.Total.ToString() ); + else + PublicOverheadMessage( MessageType.Regular, 0x3B2, 1042683, String.Format( "{0}\t{1}", se.Total, se.Count ) ); + + return; + } + + Effects.PlaySound( Location, Map, 0x2B1 ); + + if ( from is PlayerMobile ) + { + double rand = Utility.RandomDouble(); + + int area, score, splitScore; + + if ( 0.10 > rand ) + { + area = 0; // bullseye + score = 50; + splitScore = 100; + } + else if ( 0.25 > rand ) + { + area = 1; // inner ring + score = 10; + splitScore = 20; + } + else if ( 0.50 > rand ) + { + area = 2; // middle ring + score = 5; + splitScore = 15; + } + else + { + area = 3; // outer ring + score = 2; + splitScore = 5; + } + + bool split = ( isKnown && ((m_Arrows + m_Bolts) * 0.02) > Utility.RandomDouble() ); + + if ( split ) + { + PublicOverheadMessage( MessageType.Regular, 0x3B2, 1010027 + (isArrow ? 0 : 4) + area, from.Name ); + } + else + { + PublicOverheadMessage( MessageType.Regular, 0x3B2, 1010035 + area, from.Name ); + + if ( isArrow ) + ++m_Arrows; + else if ( isBolt ) + ++m_Bolts; + } + + se.Record( split ? splitScore : score ); + + if ( se.Count == 1 ) + PublicOverheadMessage( MessageType.Regular, 0x3B2, 1062719, se.Total.ToString() ); + else + PublicOverheadMessage( MessageType.Regular, 0x3B2, 1042683, String.Format( "{0}\t{1}", se.Total, se.Count ) ); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( m_MinSkill ); + writer.Write( m_MaxSkill ); + writer.Write( m_Arrows ); + writer.Write( m_Bolts ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_MinSkill = reader.ReadDouble(); + m_MaxSkill = reader.ReadDouble(); + m_Arrows = reader.ReadInt(); + m_Bolts = reader.ReadInt(); + + if ( m_MinSkill == 0.0 && m_MaxSkill == 30.0 ) + { + m_MinSkill = -25.0; + m_MaxSkill = +25.0; + } + + break; + } + } + } + } + + public class ArcheryButteAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new ArcheryButteDeed(); } } + + [Constructable] + public ArcheryButteAddon() + { + AddComponent( new ArcheryButte( 0x100A ), 0, 0, 0 ); + } + + public ArcheryButteAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ArcheryButteDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new ArcheryButteAddon(); } } + public override int LabelNumber{ get{ return 1024106; } } // archery butte + + [Constructable] + public ArcheryButteDeed() + { + } + + public ArcheryButteDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/BaseAddon.cs b/Scripts/Items/Addons/BaseAddon.cs new file mode 100644 index 0000000..168288f --- /dev/null +++ b/Scripts/Items/Addons/BaseAddon.cs @@ -0,0 +1,277 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.Regions; + +namespace Server.Items +{ + public enum AddonFitResult + { + Valid, + Blocked, + NotInHouse, + DoorTooClose, + NoWall, + DoorsNotClosed + } + + public interface IAddon + { + Item Deed{ get; } + + bool CouldFit( IPoint3D p, Map map ); + } + + public abstract class BaseAddon : Item, IChopable, IAddon + { + private List m_Components; + + public void AddComponent( AddonComponent c, int x, int y, int z ) + { + if ( Deleted ) + return; + + m_Components.Add( c ); + + c.Addon = this; + c.Offset = new Point3D( x, y, z ); + c.MoveToWorld( new Point3D( X + x, Y + y, Z + z ), Map ); + } + + public BaseAddon() : base( 1 ) + { + Movable = false; + Visible = false; + + m_Components = new List(); + } + + public virtual bool RetainDeedHue{ get{ return false; } } + + public virtual void OnChop( Mobile from ) + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null && house.IsOwner( from ) && house.Addons.Contains( this ) ) + { + Effects.PlaySound( GetWorldLocation(), Map, 0x3B3 ); + from.SendLocalizedMessage( 500461 ); // You destroy the item. + + int hue = 0; + + if ( RetainDeedHue ) + { + for ( int i = 0; hue == 0 && i < m_Components.Count; ++i ) + { + AddonComponent c = m_Components[i]; + + if ( c.Hue != 0 ) + hue = c.Hue; + } + } + + Delete(); + + house.Addons.Remove( this ); + + BaseAddonDeed deed = Deed; + + if ( deed != null ) + { + if ( RetainDeedHue ) + deed.Hue = hue; + + from.AddToBackpack( deed ); + } + } + } + + public virtual BaseAddonDeed Deed{ get{ return null; } } + + Item IAddon.Deed + { + get{ return this.Deed; } + } + + public List Components + { + get + { + return m_Components; + } + } + + public BaseAddon( Serial serial ) : base( serial ) + { + } + + public bool CouldFit( IPoint3D p, Map map ) + { + BaseHouse h = null; + return ( CouldFit( p, map, null, ref h ) == AddonFitResult.Valid ); + } + + public virtual AddonFitResult CouldFit( IPoint3D p, Map map, Mobile from, ref BaseHouse house ) + { + if ( Deleted ) + return AddonFitResult.Blocked; + + foreach ( AddonComponent c in m_Components ) + { + Point3D p3D = new Point3D( p.X + c.Offset.X, p.Y + c.Offset.Y, p.Z + c.Offset.Z ); + + if ( !map.CanFit( p3D.X, p3D.Y, p3D.Z, c.ItemData.Height, false, true, ( c.Z == 0 ) ) ) + return AddonFitResult.Blocked; + else if ( !CheckHouse( from, p3D, map, c.ItemData.Height, ref house ) ) + return AddonFitResult.NotInHouse; + + if ( c.NeedsWall ) + { + Point3D wall = c.WallPosition; + + if ( !IsWall( p3D.X + wall.X, p3D.Y + wall.Y, p3D.Z + wall.Z, map ) ) + return AddonFitResult.NoWall; + } + } + + ArrayList doors = house.Doors; + + for ( int i = 0; i < doors.Count; ++i ) + { + BaseDoor door = doors[i] as BaseDoor; + + Point3D doorLoc = door.GetWorldLocation(); + int doorHeight = door.ItemData.CalcHeight; + + foreach ( AddonComponent c in m_Components ) + { + Point3D addonLoc = new Point3D( p.X + c.Offset.X, p.Y + c.Offset.Y, p.Z + c.Offset.Z ); + int addonHeight = c.ItemData.CalcHeight; + + if ( Utility.InRange( doorLoc, addonLoc, 1 ) && (addonLoc.Z == doorLoc.Z || ((addonLoc.Z + addonHeight) > doorLoc.Z && (doorLoc.Z + doorHeight) > addonLoc.Z)) ) + return AddonFitResult.DoorTooClose; + } + } + + return AddonFitResult.Valid; + } + + public static bool CheckHouse( Mobile from, Point3D p, Map map, int height, ref BaseHouse house ) + { + house = BaseHouse.FindHouseAt( p, map, height ); + + if ( from == null || house == null || !house.IsOwner( from ) ) + return false; + + return true; + } + + public static bool IsWall( int x, int y, int z, Map map ) + { + if ( map == null ) + return false; + + StaticTile[] tiles = map.Tiles.GetStaticTiles( x, y, true ); + + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile t = tiles[i]; + ItemData id = TileData.ItemTable[t.ID & TileData.MaxItemValue]; + + if ( (id.Flags & TileFlag.Wall) != 0 && (z + 16) > t.Z && (t.Z + t.Height) > z ) + return true; + } + + return false; + } + + public virtual void OnComponentLoaded( AddonComponent c ) + { + } + + public virtual void OnComponentUsed( AddonComponent c, Mobile from ) + { + } + + public override void OnLocationChange( Point3D oldLoc ) + { + if ( Deleted ) + return; + + foreach ( AddonComponent c in m_Components ) + c.Location = new Point3D( X + c.Offset.X, Y + c.Offset.Y, Z + c.Offset.Z ); + } + + public override void OnMapChange() + { + if ( Deleted ) + return; + + foreach ( AddonComponent c in m_Components ) + c.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + foreach ( AddonComponent c in m_Components ) + c.Delete(); + } + + public virtual bool ShareHue{ get{ return true; } } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get + { + return base.Hue; + } + set + { + if ( base.Hue != value ) + { + base.Hue = value; + + if ( !Deleted && this.ShareHue && m_Components != null ) + { + foreach ( AddonComponent c in m_Components ) + c.Hue = value; + } + } + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.WriteItemList( m_Components ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + case 0: + { + m_Components = reader.ReadStrongItemList(); + break; + } + } + + if ( version < 1 && Weight == 0 ) + Weight = -1; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/BaseAddonContainer.cs b/Scripts/Items/Addons/BaseAddonContainer.cs new file mode 100644 index 0000000..c871f66 --- /dev/null +++ b/Scripts/Items/Addons/BaseAddonContainer.cs @@ -0,0 +1,307 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.Regions; + +namespace Server.Items +{ + public abstract class BaseAddonContainer : BaseContainer, IChopable, IAddon + { + public override bool DisplayWeight { get { return false; } } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get + { + return base.Hue; + } + set + { + if ( base.Hue != value ) + { + base.Hue = value; + + if ( !Deleted && this.ShareHue && m_Components != null ) + { + Hue = value; + + foreach ( AddonContainerComponent c in m_Components ) + c.Hue = value; + } + } + } + } + + private CraftResource m_Resource; + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get { return m_Resource; } + set + { + if ( m_Resource != value ) + { + m_Resource = value; + Hue = CraftResources.GetHue( m_Resource ); + + InvalidateProperties(); + } + } + } + + Item IAddon.Deed + { + get { return this.Deed; } + } + + public virtual bool RetainDeedHue { get { return false; } } + public virtual bool NeedsWall { get { return false; } } + public virtual bool ShareHue { get { return true; } } + public virtual Point3D WallPosition { get { return Point3D.Zero; } } + public virtual BaseAddonContainerDeed Deed { get { return null; } } + + private List m_Components; + + public List Components + { + get { return m_Components; } + } + + public BaseAddonContainer( int itemID ) : base( itemID ) + { + AddonComponent.ApplyLightTo( this ); + + m_Components = new List(); + } + + public BaseAddonContainer( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLoc ) + { + base.OnLocationChange( oldLoc ); + + if ( Deleted ) + return; + + foreach ( AddonContainerComponent c in m_Components ) + c.Location = new Point3D( X + c.Offset.X, Y + c.Offset.Y, Z + c.Offset.Z ); + } + + public override void OnMapChange() + { + base.OnMapChange(); + + if ( Deleted ) + return; + + foreach ( AddonContainerComponent c in m_Components ) + c.Map = Map; + } + + public override void OnDelete() + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null ) + house.Addons.Remove( this ); + + base.OnDelete(); + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( !CraftResources.IsStandard( m_Resource ) ) + list.Add( CraftResources.GetLocalizationNumber( m_Resource ) ); + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + foreach ( AddonContainerComponent c in m_Components ) + c.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.WriteItemList( m_Components ); + writer.Write( (int) m_Resource ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Components = reader.ReadStrongItemList(); + m_Resource = (CraftResource) reader.ReadInt(); + + AddonComponent.ApplyLightTo( this ); + } + + public void DropItemsToGround() + { + for ( int i = Items.Count - 1; i >= 0; i-- ) + Items[ i ].MoveToWorld( Location ); + } + + public void AddComponent( AddonContainerComponent c, int x, int y, int z ) + { + if ( Deleted ) + return; + + m_Components.Add( c ); + + c.Addon = this; + c.Offset = new Point3D( x, y, z ); + c.MoveToWorld( new Point3D( X + x, Y + y, Z + z ), Map ); + } + + public AddonFitResult CouldFit( IPoint3D p, Map map, Mobile from, ref BaseHouse house ) + { + if ( Deleted ) + return AddonFitResult.Blocked; + + foreach ( AddonContainerComponent c in m_Components ) + { + Point3D p3D = new Point3D( p.X + c.Offset.X, p.Y + c.Offset.Y, p.Z + c.Offset.Z ); + + if ( !map.CanFit( p3D.X, p3D.Y, p3D.Z, c.ItemData.Height, false, true, ( c.Z == 0 ) ) ) + return AddonFitResult.Blocked; + else if ( !BaseAddon.CheckHouse( from, p3D, map, c.ItemData.Height, ref house ) ) + return AddonFitResult.NotInHouse; + + if ( c.NeedsWall ) + { + Point3D wall = c.WallPosition; + + if ( !BaseAddon.IsWall( p3D.X + wall.X, p3D.Y + wall.Y, p3D.Z + wall.Z, map ) ) + return AddonFitResult.NoWall; + } + } + + Point3D p3 = new Point3D( p.X, p.Y, p.Z ); + + if ( !map.CanFit( p3.X, p3.Y, p3.Z, ItemData.Height, false, true, ( Z == 0 ) ) ) + return AddonFitResult.Blocked; + else if ( !BaseAddon.CheckHouse( from, p3, map, ItemData.Height, ref house ) ) + return AddonFitResult.NotInHouse; + + if ( NeedsWall ) + { + Point3D wall = WallPosition; + + if ( !BaseAddon.IsWall( p3.X + wall.X, p3.Y + wall.Y, p3.Z + wall.Z, map ) ) + return AddonFitResult.NoWall; + } + + if ( house != null ) + { + ArrayList doors = house.Doors; + + for ( int i = 0; i < doors.Count; ++i ) + { + BaseDoor door = doors[ i ] as BaseDoor; + + if ( door != null && door.Open ) + return AddonFitResult.DoorsNotClosed; + + Point3D doorLoc = door.GetWorldLocation(); + int doorHeight = door.ItemData.CalcHeight; + + foreach ( AddonContainerComponent c in m_Components ) + { + Point3D addonLoc = new Point3D( p.X + c.Offset.X, p.Y + c.Offset.Y, p.Z + c.Offset.Z ); + int addonHeight = c.ItemData.CalcHeight; + + if ( Utility.InRange( doorLoc, addonLoc, 1 ) && ( addonLoc.Z == doorLoc.Z || ( ( addonLoc.Z + addonHeight ) > doorLoc.Z && ( doorLoc.Z + doorHeight ) > addonLoc.Z ) ) ) + return AddonFitResult.DoorTooClose; + } + + Point3D addonLo = new Point3D( p.X, p.Y, p.Z ); + int addonHeigh = ItemData.CalcHeight; + + if ( Utility.InRange( doorLoc, addonLo, 1 ) && ( addonLo.Z == doorLoc.Z || ( ( addonLo.Z + addonHeigh ) > doorLoc.Z && ( doorLoc.Z + doorHeight ) > addonLo.Z ) ) ) + return AddonFitResult.DoorTooClose; + } + } + + return AddonFitResult.Valid; + } + + public bool CouldFit( IPoint3D p, Map map ) + { + BaseHouse house = null; + + return ( CouldFit( p, map, null, ref house ) == AddonFitResult.Valid ); + } + + public virtual void OnChop( Mobile from ) + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null && house.IsOwner( from ) ) + { + if ( !IsSecure ) + { + Effects.PlaySound( GetWorldLocation(), Map, 0x3B3 ); + from.SendLocalizedMessage( 500461 ); // You destroy the item. + + int hue = 0; + + if ( RetainDeedHue ) + { + for ( int i = 0; hue == 0 && i < m_Components.Count; ++i ) + { + AddonContainerComponent c = m_Components[ i ]; + + if ( c.Hue != 0 ) + hue = c.Hue; + } + } + + DropItemsToGround(); + + Delete(); + + house.Addons.Remove( this ); + + BaseAddonContainerDeed deed = Deed; + + if ( deed != null ) + { + deed.Resource = Resource; + + if ( RetainDeedHue ) + deed.Hue = hue; + + from.AddToBackpack( deed ); + } + } + else + from.SendLocalizedMessage( 1074870 ); // This item must be unlocked/unsecured before re-deeding it. + } + } + + public virtual void OnComponentLoaded( AddonContainerComponent c ) + { + } + + public virtual void OnComponentUsed( AddonContainerComponent c, Mobile from ) + { + } + } +} diff --git a/Scripts/Items/Addons/BaseAddonContainerDeed.cs b/Scripts/Items/Addons/BaseAddonContainerDeed.cs new file mode 100644 index 0000000..96d2325 --- /dev/null +++ b/Scripts/Items/Addons/BaseAddonContainerDeed.cs @@ -0,0 +1,162 @@ +using System; + +using Server; +using Server.Multis; +using Server.Targeting; +using Server.Engines.Craft; + +namespace Server.Items +{ + [Flipable( 0x14F0, 0x14EF )] + public abstract class BaseAddonContainerDeed : Item, ICraftable + { + public abstract BaseAddonContainer Addon{ get; } + + private CraftResource m_Resource; + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get{ return m_Resource; } + set + { + if ( m_Resource != value ) + { + m_Resource = value; + Hue = CraftResources.GetHue( m_Resource ); + + InvalidateProperties(); + } + } + } + + public BaseAddonContainerDeed() : base( 0x14F0 ) + { + Weight = 1.0; + } + + public BaseAddonContainerDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + // version 1 + writer.Write( (int) m_Resource ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + m_Resource = (CraftResource) reader.ReadInt(); + break; + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + from.Target = new InternalTarget( this ); + else + from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used. + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( !CraftResources.IsStandard( m_Resource ) ) + list.Add( CraftResources.GetLocalizationNumber( m_Resource ) ); + } + + #region ICraftable + public virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Type resourceType = typeRes; + + if ( resourceType == null ) + resourceType = craftItem.Resources.GetAt( 0 ).ItemType; + + Resource = CraftResources.GetFromType( resourceType ); + + CraftContext context = craftSystem.GetContext( from ); + + if ( context != null && context.DoNotColor ) + Hue = 0; + + return quality; + } + #endregion + + private class InternalTarget : Target + { + private BaseAddonContainerDeed m_Deed; + + public InternalTarget( BaseAddonContainerDeed deed ) : base( -1, true, TargetFlags.None ) + { + m_Deed = deed; + + CheckLOS = false; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + IPoint3D p = targeted as IPoint3D; + Map map = from.Map; + + if ( p == null || map == null || m_Deed.Deleted ) + return; + + if ( m_Deed.IsChildOf( from.Backpack ) ) + { + BaseAddonContainer addon = m_Deed.Addon; + addon.Resource = m_Deed.Resource; + + Server.Spells.SpellHelper.GetSurfaceTop( ref p ); + + BaseHouse house = null; + + AddonFitResult res = addon.CouldFit( p, map, from, ref house ); + + if ( res == AddonFitResult.Valid ) + addon.MoveToWorld( new Point3D( p ), map ); + else if ( res == AddonFitResult.Blocked ) + from.SendLocalizedMessage( 500269 ); // You cannot build that there. + else if ( res == AddonFitResult.NotInHouse ) + from.SendLocalizedMessage( 500274 ); // You can only place this in a house that you own! + else if ( res == AddonFitResult.DoorsNotClosed ) + from.SendMessage( "You must close all house doors before placing this." ); + else if ( res == AddonFitResult.DoorTooClose ) + from.SendLocalizedMessage( 500271 ); // You cannot build near the door. + else if ( res == AddonFitResult.NoWall ) + from.SendLocalizedMessage( 500268 ); // This object needs to be mounted on something. + + if ( res == AddonFitResult.Valid ) + { + m_Deed.Delete(); + house.Addons.Add( addon ); + house.AddSecure( from, addon ); + } + else + { + addon.Delete(); + } + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + } + } +} diff --git a/Scripts/Items/Addons/BaseAddonDeed.cs b/Scripts/Items/Addons/BaseAddonDeed.cs new file mode 100644 index 0000000..0dfd096 --- /dev/null +++ b/Scripts/Items/Addons/BaseAddonDeed.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.Targeting; + +namespace Server.Items +{ + [Flipable( 0x14F0, 0x14EF )] + public abstract class BaseAddonDeed : Item + { + public abstract BaseAddon Addon{ get; } + + public BaseAddonDeed() : base( 0x14F0 ) + { + Weight = 1.0; + } + + public BaseAddonDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 0.0 ) + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + from.Target = new InternalTarget( this ); + else + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + + private class InternalTarget : Target + { + private BaseAddonDeed m_Deed; + + public InternalTarget( BaseAddonDeed deed ) : base( -1, true, TargetFlags.None ) + { + m_Deed = deed; + + CheckLOS = false; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + IPoint3D p = targeted as IPoint3D; + Map map = from.Map; + + if ( p == null || map == null || m_Deed.Deleted ) + return; + + if ( m_Deed.IsChildOf( from.Backpack ) ) + { + BaseAddon addon = m_Deed.Addon; + + Server.Spells.SpellHelper.GetSurfaceTop( ref p ); + + BaseHouse house = null; + + AddonFitResult res = addon.CouldFit( p, map, from, ref house ); + + if ( res == AddonFitResult.Valid ) + addon.MoveToWorld( new Point3D( p ), map ); + else if ( res == AddonFitResult.Blocked ) + from.SendLocalizedMessage( 500269 ); // You cannot build that there. + else if ( res == AddonFitResult.NotInHouse ) + from.SendLocalizedMessage( 500274 ); // You can only place this in a house that you own! + else if ( res == AddonFitResult.DoorTooClose ) + from.SendLocalizedMessage( 500271 ); // You cannot build near the door. + else if ( res == AddonFitResult.NoWall ) + from.SendLocalizedMessage( 500268 ); // This object needs to be mounted on something. + + if ( res == AddonFitResult.Valid ) + { + m_Deed.Delete(); + house.Addons.Add( addon ); + } + else + { + addon.Delete(); + } + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/BearRugs.cs b/Scripts/Items/Addons/BearRugs.cs new file mode 100644 index 0000000..e170100 --- /dev/null +++ b/Scripts/Items/Addons/BearRugs.cs @@ -0,0 +1,269 @@ +using System; +using Server; + +namespace Server.Items +{ + public class BrownBearRugEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new BrownBearRugEastDeed(); } } + + [Constructable] + public BrownBearRugEastAddon() + { + AddComponent( new AddonComponent( 0x1E40 ), 1, 1, 0 ); + AddComponent( new AddonComponent( 0x1E41 ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1E42 ), 1,-1, 0 ); + AddComponent( new AddonComponent( 0x1E43 ), 0,-1, 0 ); + AddComponent( new AddonComponent( 0x1E44 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1E45 ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x1E46 ),-1, 1, 0 ); + AddComponent( new AddonComponent( 0x1E47 ),-1, 0, 0 ); + AddComponent( new AddonComponent( 0x1E48 ),-1,-1, 0 ); + } + + public BrownBearRugEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BrownBearRugEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new BrownBearRugEastAddon(); } } + public override int LabelNumber{ get{ return 1049397; } } // a brown bear rug deed facing east + + [Constructable] + public BrownBearRugEastDeed() + { + } + + public BrownBearRugEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BrownBearRugSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new BrownBearRugSouthDeed(); } } + + [Constructable] + public BrownBearRugSouthAddon() + { + AddComponent( new AddonComponent( 0x1E36 ), 1, 1, 0 ); + AddComponent( new AddonComponent( 0x1E37 ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x1E38 ),-1, 1, 0 ); + AddComponent( new AddonComponent( 0x1E39 ),-1, 0, 0 ); + AddComponent( new AddonComponent( 0x1E3A ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1E3B ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1E3C ), 1,-1, 0 ); + AddComponent( new AddonComponent( 0x1E3D ), 0,-1, 0 ); + AddComponent( new AddonComponent( 0x1E3E ),-1,-1, 0 ); + } + + public BrownBearRugSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BrownBearRugSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new BrownBearRugSouthAddon(); } } + public override int LabelNumber{ get{ return 1049398; } } // a brown bear rug deed facing south + + [Constructable] + public BrownBearRugSouthDeed() + { + } + + public BrownBearRugSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PolarBearRugEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new PolarBearRugEastDeed(); } } + + [Constructable] + public PolarBearRugEastAddon() + { + AddComponent( new AddonComponent( 0x1E53 ), 1, 1, 0 ); + AddComponent( new AddonComponent( 0x1E54 ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1E55 ), 1,-1, 0 ); + AddComponent( new AddonComponent( 0x1E56 ), 0,-1, 0 ); + AddComponent( new AddonComponent( 0x1E57 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1E58 ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x1E59 ),-1, 1, 0 ); + AddComponent( new AddonComponent( 0x1E5A ),-1, 0, 0 ); + AddComponent( new AddonComponent( 0x1E5B ),-1,-1, 0 ); + } + + public PolarBearRugEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PolarBearRugEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new PolarBearRugEastAddon(); } } + public override int LabelNumber{ get{ return 1049399; } } // a polar bear rug deed facing east + + [Constructable] + public PolarBearRugEastDeed() + { + } + + public PolarBearRugEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PolarBearRugSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new PolarBearRugSouthDeed(); } } + + [Constructable] + public PolarBearRugSouthAddon() + { + AddComponent( new AddonComponent( 0x1E49 ), 1, 1, 0 ); + AddComponent( new AddonComponent( 0x1E4A ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x1E4B ),-1, 1, 0 ); + AddComponent( new AddonComponent( 0x1E4C ),-1, 0, 0 ); + AddComponent( new AddonComponent( 0x1E4D ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1E4E ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1E4F ), 1,-1, 0 ); + AddComponent( new AddonComponent( 0x1E50 ), 0,-1, 0 ); + AddComponent( new AddonComponent( 0x1E51 ),-1,-1, 0 ); + } + + public PolarBearRugSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PolarBearRugSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new PolarBearRugSouthAddon(); } } + public override int LabelNumber{ get{ return 1049400; } } // a polar bear rug deed facing south + + [Constructable] + public PolarBearRugSouthDeed() + { + } + + public PolarBearRugSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/BloodPentagram.cs b/Scripts/Items/Addons/BloodPentagram.cs new file mode 100644 index 0000000..628de00 --- /dev/null +++ b/Scripts/Items/Addons/BloodPentagram.cs @@ -0,0 +1,70 @@ +using System; +using Server; + +namespace Server.Items +{ + public class BloodPentagram : BaseAddon + { + [Constructable] + public BloodPentagram () + { + AddComponent( new AddonComponent( 0x1CF9 ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x1CF8 ), 0, 2, 0 ); + AddComponent( new AddonComponent( 0x1CF7 ), 0, 3, 0 ); + AddComponent( new AddonComponent( 0x1CF6 ), 0, 4, 0 ); + AddComponent( new AddonComponent( 0x1CF5 ), 0, 5, 0 ); + + AddComponent( new AddonComponent( 0x1CFB ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1CFA ), 1, 1, 0 ); + AddComponent( new AddonComponent( 0x1D09 ), 1, 2, 0 ); + AddComponent( new AddonComponent( 0x1D08 ), 1, 3, 0 ); + AddComponent( new AddonComponent( 0x1D07 ), 1, 4, 0 ); + AddComponent( new AddonComponent( 0x1CF4 ), 1, 5, 0 ); + + AddComponent( new AddonComponent( 0x1CFC ), 2, 0, 0 ); + AddComponent( new AddonComponent( 0x1D0A ), 2, 1, 0 ); + AddComponent( new AddonComponent( 0x1D11 ), 2, 2, 0 ); + AddComponent( new AddonComponent( 0x1D10 ), 2, 3, 0 ); + AddComponent( new AddonComponent( 0x1D06 ), 2, 4, 0 ); + AddComponent( new AddonComponent( 0x1CF3 ), 2, 5, 0 ); + + AddComponent( new AddonComponent( 0x1CFD ), 3, 0, 0 ); + AddComponent( new AddonComponent( 0x1D0B ), 3, 1, 0 ); + AddComponent( new AddonComponent( 0x1D12 ), 3, 2, 0 ); + AddComponent( new AddonComponent( 0x1D0F ), 3, 3, 0 ); + AddComponent( new AddonComponent( 0x1D05 ), 3, 4, 0 ); + AddComponent( new AddonComponent( 0x1CF2 ), 3, 5, 0 ); + + AddComponent( new AddonComponent( 0x1CFE ), 4, 0, 0 ); + AddComponent( new AddonComponent( 0x1D0C ), 4, 1, 0 ); + AddComponent( new AddonComponent( 0x1D0D ), 4, 2, 0 ); + AddComponent( new AddonComponent( 0x1D0E ), 4, 3, 0 ); + AddComponent( new AddonComponent( 0x1D04 ), 4, 4, 0 ); + AddComponent( new AddonComponent( 0x1CF1 ), 4, 5, 0 ); + + AddComponent( new AddonComponent( 0x1CFF ), 5, 0, 0 ); + AddComponent( new AddonComponent( 0x1D00 ), 5, 1, 0 ); + AddComponent( new AddonComponent( 0x1D01 ), 5, 2, 0 ); + AddComponent( new AddonComponent( 0x1D02 ), 5, 3, 0 ); + AddComponent( new AddonComponent( 0x1D03 ), 5, 4, 0 ); + } + + public BloodPentagram( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/DartBoard.cs b/Scripts/Items/Addons/DartBoard.cs new file mode 100644 index 0000000..1744382 --- /dev/null +++ b/Scripts/Items/Addons/DartBoard.cs @@ -0,0 +1,218 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class DartBoard : AddonComponent + { + public override bool NeedsWall{ get{ return true; } } + public override Point3D WallPosition{ get{ return this.East ? new Point3D( -1, 0, 0 ) : new Point3D( 0, -1, 0 ); } } + + public bool East{ get{ return this.ItemID == 0x1E2F; } } + + [Constructable] + public DartBoard() : this( true ) + { + } + + [Constructable] + public DartBoard( bool east ) : base( east ? 0x1E2F : 0x1E2E ) + { + } + + public DartBoard( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + Direction dir; + if ( from.Location != this.Location ) + dir = from.GetDirectionTo( this ); + else if ( this.East ) + dir = Direction.West; + else + dir = Direction.North; + + from.Direction = dir; + + bool canThrow = true; + + if ( !from.InRange( this, 4 ) || !from.InLOS( this ) ) + canThrow = false; + else if ( this.East ) + canThrow = ( dir == Direction.Left || dir == Direction.West || dir == Direction.Up ); + else + canThrow = ( dir == Direction.Up || dir == Direction.North || dir == Direction.Right ); + + if ( canThrow ) + Throw( from ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public void Throw( Mobile from ) + { + BaseKnife knife = from.Weapon as BaseKnife; + + if ( knife == null ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500751 ); // Try holding a knife... + return; + } + + from.Animate( from.Mounted ? 26 : 9, 7, 1, true, false, 0 ); + from.MovingEffect( this, knife.ItemID, 7, 1, false, false ); + from.PlaySound( 0x238 ); + + double rand = Utility.RandomDouble(); + + int message; + if ( rand < 0.05 ) + message = 500752; // BULLSEYE! 50 Points! + else if ( rand < 0.20 ) + message = 500753; // Just missed the center! 20 points. + else if ( rand < 0.45 ) + message = 500754; // 10 point shot. + else if ( rand < 0.70 ) + message = 500755; // 5 pointer. + else if ( rand < 0.85 ) + message = 500756; // 1 point. Bad throw. + else + message = 500757; // Missed. + + PublicOverheadMessage( MessageType.Regular, 0x3B2, message ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class DartBoardEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new DartBoardEastDeed(); } } + + public DartBoardEastAddon() + { + AddComponent( new DartBoard( true ), 0, 0, 0 ); + } + + public DartBoardEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class DartBoardEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new DartBoardEastAddon(); } } + + public override int LabelNumber{ get{ return 1044326; } } // dartboard (east) + + [Constructable] + public DartBoardEastDeed() + { + } + + public DartBoardEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class DartBoardSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new DartBoardSouthDeed(); } } + + public DartBoardSouthAddon() + { + AddComponent( new DartBoard( false ), 0, 0, 0 ); + } + + public DartBoardSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class DartBoardSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new DartBoardSouthAddon(); } } + + public override int LabelNumber{ get{ return 1044325; } } // dartboard (south) + + [Constructable] + public DartBoardSouthDeed() + { + } + + public DartBoardSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/FlourMillEastAddon.cs b/Scripts/Items/Addons/FlourMillEastAddon.cs new file mode 100644 index 0000000..c8eecd5 --- /dev/null +++ b/Scripts/Items/Addons/FlourMillEastAddon.cs @@ -0,0 +1,230 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using System.Collections.Generic; + +namespace Server.Items +{ + public interface IFlourMill + { + int MaxFlour{ get; } + int CurFlour{ get; set; } + } + + public enum FlourMillStage + { + Empty, + Filled, + Working + } + + public class FlourMillEastAddon : BaseAddon, IFlourMill + { + public override BaseAddonDeed Deed{ get{ return new FlourMillEastDeed(); } } + + private int m_Flour; + private Timer m_Timer; + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxFlour + { + get{ return 2; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CurFlour + { + get{ return m_Flour; } + set{ m_Flour = Math.Max( 0, Math.Min( value, MaxFlour ) ); UpdateStage(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool HasFlour + { + get{ return ( m_Flour > 0 ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsFull + { + get{ return ( m_Flour >= MaxFlour ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsWorking + { + get{ return ( m_Timer != null ); } + } + + public void StartWorking( Mobile from ) + { + if ( IsWorking ) + return; + + m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), new TimerStateCallback( FinishWorking_Callback ), from ); + UpdateStage(); + } + + private void FinishWorking_Callback( object state ) + { + if ( m_Timer != null ) + { + m_Timer.Stop(); + m_Timer = null; + } + + Mobile from = state as Mobile; + + if ( from != null && !from.Deleted && !this.Deleted && IsFull ) + { + SackFlour flour = new SackFlour(); + + flour.ItemID = ( Utility.RandomBool() ? 4153 : 4165 ); + + if ( from.PlaceInBackpack( flour ) ) + { + m_Flour = 0; + } + else + { + flour.Delete(); + from.SendLocalizedMessage( 500998 ); // There is not enough room in your backpack! You stop grinding. + } + } + + UpdateStage(); + } + + private static int[][] m_StageTable = new int[][] + { + new int[]{ 0x1920, 0x1921, 0x1925 }, + new int[]{ 0x1922, 0x1923, 0x1926 }, + new int[]{ 0x1924, 0x1924, 0x1928 } + }; + + private int[] FindItemTable( int itemID ) + { + for ( int i = 0; i < m_StageTable.Length; ++i ) + { + int[] itemTable = m_StageTable[i]; + + for ( int j = 0; j < itemTable.Length; ++j ) + { + if ( itemTable[j] == itemID ) + return itemTable; + } + } + + return null; + } + + public void UpdateStage() + { + if ( IsWorking ) + UpdateStage( FlourMillStage.Working ); + else if ( HasFlour ) + UpdateStage( FlourMillStage.Filled ); + else + UpdateStage( FlourMillStage.Empty ); + } + + public void UpdateStage( FlourMillStage stage ) + { + List components = this.Components; + + int[][] stageTable = m_StageTable; + + for ( int i = 0; i < components.Count; ++i ) + { + AddonComponent component = components[i] as AddonComponent; + + if ( component == null ) + continue; + + int[] itemTable = FindItemTable( component.ItemID ); + + if ( itemTable != null ) + component.ItemID = itemTable[(int)stage]; + } + } + + public override void OnComponentUsed( AddonComponent c, Mobile from ) + { + if ( !from.InRange( GetWorldLocation(), 4 ) || !from.InLOS( this ) ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + else if ( !IsFull ) + from.SendLocalizedMessage( 500997 ); // You need more wheat to make a sack of flour. + else + StartWorking( from ); + } + + [Constructable] + public FlourMillEastAddon() + { + AddComponent( new AddonComponent( 0x1920 ),-1, 0, 0 ); + AddComponent( new AddonComponent( 0x1922 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1924 ), 1, 0, 0 ); + } + + public FlourMillEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Flour ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Flour = reader.ReadInt(); + break; + } + } + + UpdateStage(); + } + } + + public class FlourMillEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new FlourMillEastAddon(); } } + public override int LabelNumber{ get{ return 1044347; } } // flour mill (east) + + [Constructable] + public FlourMillEastDeed() + { + } + + public FlourMillEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/FlourMillSouthAddon.cs b/Scripts/Items/Addons/FlourMillSouthAddon.cs new file mode 100644 index 0000000..82d3b59 --- /dev/null +++ b/Scripts/Items/Addons/FlourMillSouthAddon.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using System.Collections.Generic; + +namespace Server.Items +{ + public class FlourMillSouthAddon : BaseAddon, IFlourMill + { + public override BaseAddonDeed Deed{ get{ return new FlourMillSouthDeed(); } } + private int m_Flour; + private Timer m_Timer; + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxFlour + { + get{ return 2; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CurFlour + { + get{ return m_Flour; } + set{ m_Flour = Math.Max( 0, Math.Min( value, MaxFlour ) ); UpdateStage(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool HasFlour + { + get{ return ( m_Flour > 0 ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsFull + { + get{ return ( m_Flour >= MaxFlour ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsWorking + { + get{ return ( m_Timer != null ); } + } + + public void StartWorking( Mobile from ) + { + if ( IsWorking ) + return; + + m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), new TimerStateCallback( FinishWorking_Callback ), from ); + UpdateStage(); + } + + private void FinishWorking_Callback( object state ) + { + if ( m_Timer != null ) + { + m_Timer.Stop(); + m_Timer = null; + } + + Mobile from = state as Mobile; + + if ( from != null && !from.Deleted && !this.Deleted && IsFull ) + { + SackFlour flour = new SackFlour(); + + flour.ItemID = ( Utility.RandomBool() ? 4153 : 4165 ); + + if ( from.PlaceInBackpack( flour ) ) + { + m_Flour = 0; + } + else + { + flour.Delete(); + from.SendLocalizedMessage( 500998 ); // There is not enough room in your backpack! You stop grinding. + } + } + + UpdateStage(); + } + + private static int[][] m_StageTable = new int[][] + { + new int[]{ 0x192C, 0x192D, 0x1931 }, + new int[]{ 0x192E, 0x192F, 0x1932 }, + new int[]{ 0x1930, 0x1930, 0x1934 } + }; + + private int[] FindItemTable( int itemID ) + { + for ( int i = 0; i < m_StageTable.Length; ++i ) + { + int[] itemTable = m_StageTable[i]; + + for ( int j = 0; j < itemTable.Length; ++j ) + { + if ( itemTable[j] == itemID ) + return itemTable; + } + } + + return null; + } + + public void UpdateStage() + { + if ( IsWorking ) + UpdateStage( FlourMillStage.Working ); + else if ( HasFlour ) + UpdateStage( FlourMillStage.Filled ); + else + UpdateStage( FlourMillStage.Empty ); + } + + public void UpdateStage( FlourMillStage stage ) + { + List components = this.Components; + + int[][] stageTable = m_StageTable; + + for ( int i = 0; i < components.Count; ++i ) + { + AddonComponent component = components[i] as AddonComponent; + + if ( component == null ) + continue; + + int[] itemTable = FindItemTable( component.ItemID ); + + if ( itemTable != null ) + component.ItemID = itemTable[(int)stage]; + } + } + + public override void OnComponentUsed( AddonComponent c, Mobile from ) + { + if ( !from.InRange( GetWorldLocation(), 4 ) || !from.InLOS( this ) ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + else if ( !IsFull ) + from.SendLocalizedMessage( 500997 ); // You need more wheat to make a sack of flour. + else + StartWorking( from ); + } + + [Constructable] + public FlourMillSouthAddon() + { + AddComponent( new AddonComponent( 0x192C ), 0,-1, 0 ); + AddComponent( new AddonComponent( 0x192E ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1930 ), 0, 1, 0 ); + } + + public FlourMillSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Flour ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Flour = reader.ReadInt(); + break; + } + } + + UpdateStage(); + } + } + + public class FlourMillSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new FlourMillSouthAddon(); } } + public override int LabelNumber{ get{ return 1044348; } } // flour mill (south) + + [Constructable] + public FlourMillSouthDeed() + { + } + + public FlourMillSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/FlowerTapestries.cs b/Scripts/Items/Addons/FlowerTapestries.cs new file mode 100644 index 0000000..e1a7756 --- /dev/null +++ b/Scripts/Items/Addons/FlowerTapestries.cs @@ -0,0 +1,241 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LightFlowerTapestryEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new LightFlowerTapestryEastDeed(); } } + + [Constructable] + public LightFlowerTapestryEastAddon() + { + AddComponent( new AddonComponent( 0xFDC ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xFDB ), 0, 1, 0 ); + } + + public LightFlowerTapestryEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LightFlowerTapestryEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LightFlowerTapestryEastAddon(); } } + public override int LabelNumber{ get{ return 1049393; } } // a flower tapestry deed facing east + + [Constructable] + public LightFlowerTapestryEastDeed() + { + } + + public LightFlowerTapestryEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LightFlowerTapestrySouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new LightFlowerTapestrySouthDeed(); } } + + [Constructable] + public LightFlowerTapestrySouthAddon() + { + AddComponent( new AddonComponent( 0xFD9 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xFDA ), 1, 0, 0 ); + } + + public LightFlowerTapestrySouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LightFlowerTapestrySouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LightFlowerTapestrySouthAddon(); } } + public override int LabelNumber{ get{ return 1049394; } } // a flower tapestry deed facing south + + [Constructable] + public LightFlowerTapestrySouthDeed() + { + } + + public LightFlowerTapestrySouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkFlowerTapestryEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new DarkFlowerTapestryEastDeed(); } } + + [Constructable] + public DarkFlowerTapestryEastAddon() + { + AddComponent( new AddonComponent( 0xFE0 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xFDF ), 0, 1, 0 ); + } + + public DarkFlowerTapestryEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkFlowerTapestryEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new DarkFlowerTapestryEastAddon(); } } + public override int LabelNumber{ get{ return 1049395; } } // a dark flower tapestry deed facing east + + [Constructable] + public DarkFlowerTapestryEastDeed() + { + } + + public DarkFlowerTapestryEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkFlowerTapestrySouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new DarkFlowerTapestrySouthDeed(); } } + + [Constructable] + public DarkFlowerTapestrySouthAddon() + { + AddComponent( new AddonComponent( 0xFDD ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xFDE ), 1, 0, 0 ); + } + + public DarkFlowerTapestrySouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkFlowerTapestrySouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new DarkFlowerTapestrySouthAddon(); } } + public override int LabelNumber{ get{ return 1049396; } } // a dark flower tapestry deed facing south + + [Constructable] + public DarkFlowerTapestrySouthDeed() + { + } + + public DarkFlowerTapestrySouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/GiantWebs.cs b/Scripts/Items/Addons/GiantWebs.cs new file mode 100644 index 0000000..bf93d26 --- /dev/null +++ b/Scripts/Items/Addons/GiantWebs.cs @@ -0,0 +1,207 @@ +using System; +using System.Text; +using System.Net; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Items +{ + public class GiantWeb1 : BaseAddon + { + [Constructable] + public GiantWeb1() + { + int itemID = 4280; + int count = 5; + bool leftToRight = false; + + for ( int i = 0; i < count; ++i ) + AddComponent( new AddonComponent( itemID++ ), leftToRight ? i : count - 1 - i, -( leftToRight ? i : count - 1 - i ), 0 ); + } + + public GiantWeb1( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (byte) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadByte(); + } + } + + public class GiantWeb2 : BaseAddon + { + [Constructable] + public GiantWeb2() + { + int itemID = 4285; + int count = 5; + bool leftToRight = true; + + for ( int i = 0; i < count; ++i ) + AddComponent( new AddonComponent( itemID++ ), leftToRight ? i : count - 1 - i, -( leftToRight ? i : count - 1 - i ), 0 ); + } + + public GiantWeb2( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (byte) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadByte(); + } + } + + public class GiantWeb3 : BaseAddon + { + [Constructable] + public GiantWeb3() + { + int itemID = 4290; + int count = 4; + bool leftToRight = true; + + for ( int i = 0; i < count; ++i ) + AddComponent( new AddonComponent( itemID++ ), leftToRight ? i : count - 1 - i, -( leftToRight ? i : count - 1 - i ), 0 ); + } + + public GiantWeb3( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (byte) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadByte(); + } + } + + public class GiantWeb4 : BaseAddon + { + [Constructable] + public GiantWeb4() + { + int itemID = 4294; + int count = 4; + bool leftToRight = false; + + for ( int i = 0; i < count; ++i ) + AddComponent( new AddonComponent( itemID++ ), leftToRight ? i : count - 1 - i, -( leftToRight ? i : count - 1 - i ), 0 ); + } + + public GiantWeb4( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (byte) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadByte(); + } + } + + public class GiantWeb5 : BaseAddon + { + [Constructable] + public GiantWeb5() + { + int itemID = 4298; + int count = 4; + bool leftToRight = true; + + for ( int i = 0; i < count; ++i ) + AddComponent( new AddonComponent( itemID++ ), leftToRight ? i : count - 1 - i, -( leftToRight ? i : count - 1 - i ), 0 ); + } + + public GiantWeb5( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (byte) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadByte(); + } + } + + public class GiantWeb6 : BaseAddon + { + [Constructable] + public GiantWeb6() + { + int itemID = 4302; + int count = 4; + bool leftToRight = false; + + for ( int i = 0; i < count; ++i ) + AddComponent( new AddonComponent( itemID++ ), leftToRight ? i : count - 1 - i, -( leftToRight ? i : count - 1 - i ), 0 ); + } + + public GiantWeb6( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (byte) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadByte(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/GrayBrickFireplaceEastAddon.cs b/Scripts/Items/Addons/GrayBrickFireplaceEastAddon.cs new file mode 100644 index 0000000..b206693 --- /dev/null +++ b/Scripts/Items/Addons/GrayBrickFireplaceEastAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class GrayBrickFireplaceEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new GrayBrickFireplaceEastDeed(); } } + + [Constructable] + public GrayBrickFireplaceEastAddon() + { + AddComponent( new AddonComponent( 0x93D ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x937 ), 0, 1, 0 ); + } + + public GrayBrickFireplaceEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GrayBrickFireplaceEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new GrayBrickFireplaceEastAddon(); } } + public override int LabelNumber{ get{ return 1061846; } } // grey brick fireplace (east) + + [Constructable] + public GrayBrickFireplaceEastDeed() + { + } + + public GrayBrickFireplaceEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/GrayBrickFireplaceSouthAddon.cs b/Scripts/Items/Addons/GrayBrickFireplaceSouthAddon.cs new file mode 100644 index 0000000..9e3e86d --- /dev/null +++ b/Scripts/Items/Addons/GrayBrickFireplaceSouthAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class GrayBrickFireplaceSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new GrayBrickFireplaceSouthDeed(); } } + + [Constructable] + public GrayBrickFireplaceSouthAddon() + { + AddComponent( new AddonComponent( 0x94B ), -1, 0, 0 ); + AddComponent( new AddonComponent( 0x945 ), 0, 0, 0 ); + } + + public GrayBrickFireplaceSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GrayBrickFireplaceSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new GrayBrickFireplaceSouthAddon(); } } + public override int LabelNumber{ get{ return 1061847; } } // grey brick fireplace (south) + + [Constructable] + public GrayBrickFireplaceSouthDeed() + { + } + + public GrayBrickFireplaceSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/LargeBedEastAddon.cs b/Scripts/Items/Addons/LargeBedEastAddon.cs new file mode 100644 index 0000000..ac77ea2 --- /dev/null +++ b/Scripts/Items/Addons/LargeBedEastAddon.cs @@ -0,0 +1,66 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LargeBedEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new LargeBedEastDeed(); } } + + [Constructable] + public LargeBedEastAddon() + { + AddComponent( new AddonComponent( 0xA7D ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xA7C ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0xA79 ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0xA78 ), 1, 1, 0 ); + } + + public LargeBedEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeBedEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LargeBedEastAddon(); } } + public override int LabelNumber{ get{ return 1044324; } } // large bed (east) + + [Constructable] + public LargeBedEastDeed() + { + } + + public LargeBedEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/LargeBedSouthAddon.cs b/Scripts/Items/Addons/LargeBedSouthAddon.cs new file mode 100644 index 0000000..29be757 --- /dev/null +++ b/Scripts/Items/Addons/LargeBedSouthAddon.cs @@ -0,0 +1,66 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LargeBedSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new LargeBedSouthDeed(); } } + + [Constructable] + public LargeBedSouthAddon() + { + AddComponent( new AddonComponent( 0xA83 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xA7F ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0xA82 ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0xA7E ), 1, 1, 0 ); + } + + public LargeBedSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeBedSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LargeBedSouthAddon(); } } + public override int LabelNumber{ get{ return 1044323; } } // large bed (south) + + [Constructable] + public LargeBedSouthDeed() + { + } + + public LargeBedSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/LargeForgeEastAddon.cs b/Scripts/Items/Addons/LargeForgeEastAddon.cs new file mode 100644 index 0000000..d98bea2 --- /dev/null +++ b/Scripts/Items/Addons/LargeForgeEastAddon.cs @@ -0,0 +1,66 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LargeForgeEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new LargeForgeEastDeed(); } } + + [Constructable] + public LargeForgeEastAddon() + { + AddComponent( new ForgeComponent( 0x1986 ), 0, 0, 0 ); + AddComponent( new ForgeComponent( 0x198A ), 0, 1, 0 ); + AddComponent( new ForgeComponent( 0x1996 ), 0, 2, 0 ); + AddComponent( new ForgeComponent( 0x1992 ), 0, 3, 0 ); + } + + public LargeForgeEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeForgeEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LargeForgeEastAddon(); } } + public override int LabelNumber{ get{ return 1044331; } } // large forge (east) + + [Constructable] + public LargeForgeEastDeed() + { + } + + public LargeForgeEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/LargeForgeSouthAddon.cs b/Scripts/Items/Addons/LargeForgeSouthAddon.cs new file mode 100644 index 0000000..a51061c --- /dev/null +++ b/Scripts/Items/Addons/LargeForgeSouthAddon.cs @@ -0,0 +1,66 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LargeForgeSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new LargeForgeSouthDeed(); } } + + [Constructable] + public LargeForgeSouthAddon() + { + AddComponent( new ForgeComponent( 0x197A ), 0, 0, 0 ); + AddComponent( new ForgeComponent( 0x197E ), 1, 0, 0 ); + AddComponent( new ForgeComponent( 0x19A2 ), 2, 0, 0 ); + AddComponent( new ForgeComponent( 0x199E ), 3, 0, 0 ); + } + + public LargeForgeSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeForgeSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LargeForgeSouthAddon(); } } + public override int LabelNumber{ get{ return 1044332; } } // large forge (south) + + [Constructable] + public LargeForgeSouthDeed() + { + } + + public LargeForgeSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/LargeStoneTableEastAddon.cs b/Scripts/Items/Addons/LargeStoneTableEastAddon.cs new file mode 100644 index 0000000..8601240 --- /dev/null +++ b/Scripts/Items/Addons/LargeStoneTableEastAddon.cs @@ -0,0 +1,73 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LargeStoneTableEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new LargeStoneTableEastDeed(); } } + + public override bool RetainDeedHue{ get{ return true; } } + + [Constructable] + public LargeStoneTableEastAddon() : this( 0 ) + { + } + + [Constructable] + public LargeStoneTableEastAddon( int hue ) + { + AddComponent( new AddonComponent( 0x1202 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1203 ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x1201 ), 0, 2, 0 ); + Hue = hue; + } + + public LargeStoneTableEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeStoneTableEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LargeStoneTableEastAddon( this.Hue ); } } + public override int LabelNumber{ get{ return 1044511; } } // large stone table (east) + + [Constructable] + public LargeStoneTableEastDeed() + { + } + + public LargeStoneTableEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/LargeStoneTableSouthAddon.cs b/Scripts/Items/Addons/LargeStoneTableSouthAddon.cs new file mode 100644 index 0000000..576326f --- /dev/null +++ b/Scripts/Items/Addons/LargeStoneTableSouthAddon.cs @@ -0,0 +1,73 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LargeStoneTableSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new LargeStoneTableSouthDeed(); } } + + public override bool RetainDeedHue{ get{ return true; } } + + [Constructable] + public LargeStoneTableSouthAddon() : this( 0 ) + { + } + + [Constructable] + public LargeStoneTableSouthAddon( int hue ) + { + AddComponent( new AddonComponent( 0x1205 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1206 ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1204 ), 2, 0, 0 ); + Hue = hue; + } + + public LargeStoneTableSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeStoneTableSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LargeStoneTableSouthAddon( this.Hue ); } } + public override int LabelNumber{ get{ return 1044512; } } // large stone table (South) + + [Constructable] + public LargeStoneTableSouthDeed() + { + } + + public LargeStoneTableSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/LoomEastAddon.cs b/Scripts/Items/Addons/LoomEastAddon.cs new file mode 100644 index 0000000..7831d58 --- /dev/null +++ b/Scripts/Items/Addons/LoomEastAddon.cs @@ -0,0 +1,86 @@ +using System; +using Server; + +namespace Server.Items +{ + public interface ILoom + { + int Phase{ get; set; } + } + + public class LoomEastAddon : BaseAddon, ILoom + { + public override BaseAddonDeed Deed{ get{ return new LoomEastDeed(); } } + + private int m_Phase; + + public int Phase{ get{ return m_Phase; } set{ m_Phase = value; } } + + [Constructable] + public LoomEastAddon() + { + AddComponent( new AddonComponent( 0x1060 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x105F ), 0, 1, 0 ); + + Hue = Utility.RandomHue(); + } + + public LoomEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Phase ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Phase = reader.ReadInt(); + break; + } + } + } + } + + public class LoomEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LoomEastAddon(); } } + public override int LabelNumber{ get{ return 1044343; } } // loom (east) + + [Constructable] + public LoomEastDeed() + { + } + + public LoomEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/LoomSouthAddon.cs b/Scripts/Items/Addons/LoomSouthAddon.cs new file mode 100644 index 0000000..d0b6e31 --- /dev/null +++ b/Scripts/Items/Addons/LoomSouthAddon.cs @@ -0,0 +1,81 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LoomSouthAddon : BaseAddon, ILoom + { + public override BaseAddonDeed Deed{ get{ return new LoomSouthDeed(); } } + + private int m_Phase; + + public int Phase{ get{ return m_Phase; } set{ m_Phase = value; } } + + [Constructable] + public LoomSouthAddon() + { + AddComponent( new AddonComponent( 0x1061 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1062 ), 1, 0, 0 ); + + Hue = Utility.RandomHue(); + } + + public LoomSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Phase ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Phase = reader.ReadInt(); + break; + } + } + } + } + + public class LoomSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new LoomSouthAddon(); } } + public override int LabelNumber{ get{ return 1044344; } } // loom (south) + + [Constructable] + public LoomSouthDeed() + { + } + + public LoomSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/MediumStoneTableEastAddon.cs b/Scripts/Items/Addons/MediumStoneTableEastAddon.cs new file mode 100644 index 0000000..70c9f1b --- /dev/null +++ b/Scripts/Items/Addons/MediumStoneTableEastAddon.cs @@ -0,0 +1,72 @@ +using System; +using Server; + +namespace Server.Items +{ + public class MediumStoneTableEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new MediumStoneTableEastDeed(); } } + + public override bool RetainDeedHue{ get{ return true; } } + + [Constructable] + public MediumStoneTableEastAddon() : this( 0 ) + { + } + + [Constructable] + public MediumStoneTableEastAddon( int hue ) + { + AddComponent( new AddonComponent( 0x1202 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1201 ), 0, 1, 0 ); + Hue = hue; + } + + public MediumStoneTableEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumStoneTableEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new MediumStoneTableEastAddon( this.Hue ); } } + public override int LabelNumber{ get{ return 1044508; } } // stone table (east) + + [Constructable] + public MediumStoneTableEastDeed() + { + } + + public MediumStoneTableEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/MediumStoneTableSouthAddon.cs b/Scripts/Items/Addons/MediumStoneTableSouthAddon.cs new file mode 100644 index 0000000..3b4c173 --- /dev/null +++ b/Scripts/Items/Addons/MediumStoneTableSouthAddon.cs @@ -0,0 +1,72 @@ +using System; +using Server; + +namespace Server.Items +{ + public class MediumStoneTableSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new MediumStoneTableSouthDeed(); } } + + public override bool RetainDeedHue{ get{ return true; } } + + [Constructable] + public MediumStoneTableSouthAddon() : this( 0 ) + { + } + + [Constructable] + public MediumStoneTableSouthAddon( int hue ) + { + AddComponent( new AddonComponent( 0x1205 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x1204 ), 1, 0, 0 ); + Hue = hue; + } + + public MediumStoneTableSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumStoneTableSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new MediumStoneTableSouthAddon( Hue ); } } + public override int LabelNumber{ get{ return 1044509; } } // stone table (South) + + [Constructable] + public MediumStoneTableSouthDeed() + { + } + + public MediumStoneTableSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/PentagramAddon.cs b/Scripts/Items/Addons/PentagramAddon.cs new file mode 100644 index 0000000..379a920 --- /dev/null +++ b/Scripts/Items/Addons/PentagramAddon.cs @@ -0,0 +1,71 @@ +using System; +using Server; + +namespace Server.Items +{ + public class PentagramAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new PentagramDeed(); } } + + [Constructable] + public PentagramAddon() + { + AddComponent( new AddonComponent( 0xFE7 ), -1, -1, 0 ); + AddComponent( new AddonComponent( 0xFE8 ), 0, -1, 0 ); + AddComponent( new AddonComponent( 0xFEB ), 1, -1, 0 ); + AddComponent( new AddonComponent( 0xFE6 ), -1, 0, 0 ); + AddComponent( new AddonComponent( 0xFEA ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xFEE ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0xFE9 ), -1, 1, 0 ); + AddComponent( new AddonComponent( 0xFEC ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0xFED ), 1, 1, 0 ); + } + + public PentagramAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PentagramDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new PentagramAddon(); } } + public override int LabelNumber{ get{ return 1044328; } } // pentagram + + [Constructable] + public PentagramDeed() + { + } + + public PentagramDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/PickpocketDips.cs b/Scripts/Items/Addons/PickpocketDips.cs new file mode 100644 index 0000000..983c90b --- /dev/null +++ b/Scripts/Items/Addons/PickpocketDips.cs @@ -0,0 +1,286 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x1EC0, 0x1EC3 )] + public class PickpocketDip : AddonComponent + { + private double m_MinSkill; + private double m_MaxSkill; + private int m_ID; + private int m_Moving; + private Timer m_Timer; + + [CommandProperty( AccessLevel.GameMaster )] + public double MinSkill + { + get{ return m_MinSkill; } + set{ m_MinSkill = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public double MaxSkill + { + get{ return m_MaxSkill; } + set{ m_MaxSkill = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int ID + { + get{ return m_ID; } + set{ m_ID = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Moving + { + get{ return m_Moving; } + set{ m_Moving = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Swinging + { + get{ return ( m_Timer != null ); } + } + + public PickpocketDip( int itemID, int moving ) : base( itemID ) + { + m_MinSkill = -25.0; + m_MaxSkill = +25.0; + ID = itemID; + Moving = moving; + } + + public void UpdateItemID() + { + ItemID = (Swinging ? m_Moving : m_ID); + } + + public void BeginSwing() + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = new InternalTimer( this ); + m_Timer.Start(); + + UpdateItemID(); + } + + public void EndSwing() + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + + UpdateItemID(); + } + + public void Use( Mobile from ) + { + from.Direction = from.GetDirectionTo( GetWorldLocation() ); + + Effects.PlaySound( GetWorldLocation(), Map, 0x4F ); + + if ( from.CheckSkill( SkillName.Stealing, m_MinSkill, m_MaxSkill ) ) + { + SendLocalizedMessageTo( from, 501834 ); // You successfully avoid disturbing the dip while searching it. + } + else + { + Effects.PlaySound( GetWorldLocation(), Map, 0x390 ); + + BeginSwing(); + ProcessDelta(); + SendLocalizedMessageTo( from, 501831 ); // You carelessly bump the dip and start it swinging. + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.InRange( GetWorldLocation(), 1 ) ) + SendLocalizedMessageTo( from, 501816 ); // You are too far away to do that. + else if ( Swinging ) + SendLocalizedMessageTo( from, 501815 ); // You have to wait until it stops swinging. + else if ( from.Skills[SkillName.Stealing].Base >= m_MaxSkill ) + SendLocalizedMessageTo( from, 501830 ); // Your ability to steal cannot improve any further by simply practicing on a dummy. + else if ( from.Mounted ) + SendLocalizedMessageTo( from, 501829 ); // You can't practice on this while on a mount. + else + Use( from ); + } + + public PickpocketDip( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( m_MinSkill ); + writer.Write( m_MaxSkill ); + writer.Write( m_ID ); + writer.Write( m_Moving ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_MinSkill = reader.ReadDouble(); + m_MaxSkill = reader.ReadDouble(); + + if ( m_MinSkill == 0.0 && m_MaxSkill == 30.0 ) + { + m_MinSkill = -25.0; + m_MaxSkill = +25.0; + } + + m_ID = reader.ReadInt(); + m_Moving = reader.ReadInt(); + + UpdateItemID(); + } + + private class InternalTimer : Timer + { + private PickpocketDip m_Dip; + + public InternalTimer( PickpocketDip dip ) : base( TimeSpan.FromSeconds( 3.0 ) ) + { + m_Dip = dip; + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + m_Dip.EndSwing(); + } + } + } + + public class PickpocketDipEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new PickpocketDipEastDeed(); } } + + [Constructable] + public PickpocketDipEastAddon() + { + AddComponent( new PickpocketDip( 0x1E2D, 0x1EC3 ), 0, 0, 0 ); + } + + public PickpocketDipEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PickpocketDipEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new PickpocketDipEastAddon(); } } + public override int LabelNumber{ get{ return 1044337; } } // pickpocket dip (east) + + [Constructable] + public PickpocketDipEastDeed() + { + } + + public PickpocketDipEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PickpocketDipSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new PickpocketDipSouthDeed(); } } + + [Constructable] + public PickpocketDipSouthAddon() + { + AddComponent( new PickpocketDip( 0x1E2C, 0x1EC0 ), 0, 0, 0 ); + } + + public PickpocketDipSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PickpocketDipSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new PickpocketDipSouthAddon(); } } + public override int LabelNumber{ get{ return 1044338; } } // pickpocket dip (south) + + [Constructable] + public PickpocketDipSouthDeed() + { + } + + public PickpocketDipSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/SandstoneFireplaceEastAddon.cs b/Scripts/Items/Addons/SandstoneFireplaceEastAddon.cs new file mode 100644 index 0000000..cd7b5c5 --- /dev/null +++ b/Scripts/Items/Addons/SandstoneFireplaceEastAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class SandstoneFireplaceEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new SandstoneFireplaceEastDeed(); } } + + [Constructable] + public SandstoneFireplaceEastAddon() + { + AddComponent( new AddonComponent( 0x489 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x475 ), 0, 1, 0 ); + } + + public SandstoneFireplaceEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SandstoneFireplaceEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SandstoneFireplaceEastAddon(); } } + public override int LabelNumber{ get{ return 1061844; } } // sandstone fireplace (east) + + [Constructable] + public SandstoneFireplaceEastDeed() + { + } + + public SandstoneFireplaceEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/SandstoneFireplaceSouthAddon.cs b/Scripts/Items/Addons/SandstoneFireplaceSouthAddon.cs new file mode 100644 index 0000000..e1bb0a4 --- /dev/null +++ b/Scripts/Items/Addons/SandstoneFireplaceSouthAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class SandstoneFireplaceSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new SandstoneFireplaceSouthDeed(); } } + + [Constructable] + public SandstoneFireplaceSouthAddon() + { + AddComponent( new AddonComponent( 0x482 ), -1, 0, 0 ); + AddComponent( new AddonComponent( 0x47B ), 0, 0, 0 ); + } + + public SandstoneFireplaceSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SandstoneFireplaceSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SandstoneFireplaceSouthAddon(); } } + public override int LabelNumber{ get{ return 1061845; } } // sandstone fireplace (south) + + [Constructable] + public SandstoneFireplaceSouthDeed() + { + } + + public SandstoneFireplaceSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/SandstoneFountainAddon.cs b/Scripts/Items/Addons/SandstoneFountainAddon.cs new file mode 100644 index 0000000..df3acb5 --- /dev/null +++ b/Scripts/Items/Addons/SandstoneFountainAddon.cs @@ -0,0 +1,54 @@ +using System; +using Server; + +namespace Server.Items +{ + public class SandstoneFountainAddon : BaseAddon + { + [Constructable] + public SandstoneFountainAddon() + { + int itemID = 0x19C3; + + AddComponent( new AddonComponent( itemID++ ), -2, +1, 0 ); + AddComponent( new AddonComponent( itemID++ ), -1, +1, 0 ); + AddComponent( new AddonComponent( itemID++ ), +0, +1, 0 ); + AddComponent( new AddonComponent( itemID++ ), +1, +1, 0 ); + + AddComponent( new AddonComponent( itemID++ ), +1, +0, 0 ); + AddComponent( new AddonComponent( itemID++ ), +1, -1, 0 ); + AddComponent( new AddonComponent( itemID++ ), +1, -2, 0 ); + + AddComponent( new AddonComponent( itemID++ ), +0, -2, 0 ); + AddComponent( new AddonComponent( itemID++ ), +0, -1, 0 ); + AddComponent( new AddonComponent( itemID++ ), +0, +0, 0 ); + + AddComponent( new AddonComponent( itemID++ ), -1, +0, 0 ); + AddComponent( new AddonComponent( itemID++ ), -2, +0, 0 ); + + AddComponent( new AddonComponent( itemID++ ), -2, -1, 0 ); + AddComponent( new AddonComponent( itemID++ ), -1, -1, 0 ); + + AddComponent( new AddonComponent( itemID++ ), -1, -2, 0 ); + AddComponent( new AddonComponent( ++itemID ), -2, -2, 0 ); + } + + public SandstoneFountainAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/SmallBedEastAddon.cs b/Scripts/Items/Addons/SmallBedEastAddon.cs new file mode 100644 index 0000000..bc223c2 --- /dev/null +++ b/Scripts/Items/Addons/SmallBedEastAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class SmallBedEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new SmallBedEastDeed(); } } + + [Constructable] + public SmallBedEastAddon() + { + AddComponent( new AddonComponent( 0xA5D ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xA62 ), 1, 0, 0 ); + } + + public SmallBedEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallBedEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SmallBedEastAddon(); } } + public override int LabelNumber{ get{ return 1044322; } } // small bed (east) + + [Constructable] + public SmallBedEastDeed() + { + } + + public SmallBedEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/SmallBedSouthAddon.cs b/Scripts/Items/Addons/SmallBedSouthAddon.cs new file mode 100644 index 0000000..678de43 --- /dev/null +++ b/Scripts/Items/Addons/SmallBedSouthAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class SmallBedSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new SmallBedSouthDeed(); } } + + [Constructable] + public SmallBedSouthAddon() + { + AddComponent( new AddonComponent( 0xA63 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xA5C ), 0, 1, 0 ); + } + + public SmallBedSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallBedSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SmallBedSouthAddon(); } } + public override int LabelNumber{ get{ return 1044321; } } // small bed (south) + + [Constructable] + public SmallBedSouthDeed() + { + } + + public SmallBedSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/SmallForgeAddon.cs b/Scripts/Items/Addons/SmallForgeAddon.cs new file mode 100644 index 0000000..5a461fb --- /dev/null +++ b/Scripts/Items/Addons/SmallForgeAddon.cs @@ -0,0 +1,63 @@ +using System; +using Server; + +namespace Server.Items +{ + public class SmallForgeAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new SmallForgeDeed(); } } + + [Constructable] + public SmallForgeAddon() + { + AddComponent( new ForgeComponent( 0xFB1 ), 0, 0, 0 ); + } + + public SmallForgeAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallForgeDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SmallForgeAddon(); } } + public override int LabelNumber{ get{ return 1044330; } } // small forge + + [Constructable] + public SmallForgeDeed() + { + } + + public SmallForgeDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/SpinningwheelEastAddon.cs b/Scripts/Items/Addons/SpinningwheelEastAddon.cs new file mode 100644 index 0000000..d7c9dcf --- /dev/null +++ b/Scripts/Items/Addons/SpinningwheelEastAddon.cs @@ -0,0 +1,149 @@ +using System; +using Server; + +namespace Server.Items +{ + public delegate void SpinCallback( ISpinningWheel sender, Mobile from, Item yarn ); + + public interface ISpinningWheel + { + bool Spinning{ get; } + void BeginSpin( SpinCallback callback, Mobile from, Item yarn ); + } + + public class SpinningwheelEastAddon : BaseAddon, ISpinningWheel + { + public override BaseAddonDeed Deed{ get{ return new SpinningwheelEastDeed(); } } + + [Constructable] + public SpinningwheelEastAddon() + { + AddComponent( new AddonComponent( 0x1019 ), 0, 0, 0 ); + + Hue = Utility.RandomHue(); + } + + public SpinningwheelEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + private Timer m_Timer; + + public override void OnComponentLoaded( AddonComponent c ) + { + switch ( c.ItemID ) + { + case 0x1016: + case 0x101A: + case 0x101D: + case 0x10A5: --c.ItemID; break; + } + } + + public bool Spinning{ get{ return m_Timer != null; } } + + public void BeginSpin( SpinCallback callback, Mobile from, Item yarn ) + { + m_Timer = new SpinTimer( this, callback, from, yarn ); + m_Timer.Start(); + + foreach ( AddonComponent c in Components ) + { + switch ( c.ItemID ) + { + case 0x1015: + case 0x1019: + case 0x101C: + case 0x10A4: ++c.ItemID; break; + } + } + } + + public void EndSpin( SpinCallback callback, Mobile from, Item yarn ) + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + + foreach ( AddonComponent c in Components ) + { + switch ( c.ItemID ) + { + case 0x1016: + case 0x101A: + case 0x101D: + case 0x10A5: --c.ItemID; break; + } + } + + if ( callback != null ) + callback( this, from, yarn ); + } + + private class SpinTimer : Timer + { + private SpinningwheelEastAddon m_Wheel; + private SpinCallback m_Callback; + private Mobile m_From; + private Item m_Yarn; + + public SpinTimer( SpinningwheelEastAddon wheel, SpinCallback callback, Mobile from, Item yarn ) : base( TimeSpan.FromSeconds( 3.0 ) ) + { + m_Wheel = wheel; + m_Callback = callback; + m_From = from; + m_Yarn = yarn; + Priority = TimerPriority.TwoFiftyMS; + } + + protected override void OnTick() + { + m_Wheel.EndSpin( m_Callback, m_From, m_Yarn ); + } + } + } + + public class SpinningwheelEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SpinningwheelEastAddon(); } } + public override int LabelNumber{ get{ return 1044341; } } // spining wheel (east) + + [Constructable] + public SpinningwheelEastDeed() + { + } + + public SpinningwheelEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/SpinningwheelSouthAddon.cs b/Scripts/Items/Addons/SpinningwheelSouthAddon.cs new file mode 100644 index 0000000..ac5298e --- /dev/null +++ b/Scripts/Items/Addons/SpinningwheelSouthAddon.cs @@ -0,0 +1,141 @@ +using System; +using Server; + +namespace Server.Items +{ + public class SpinningwheelSouthAddon : BaseAddon, ISpinningWheel + { + public override BaseAddonDeed Deed{ get{ return new SpinningwheelSouthDeed(); } } + + [Constructable] + public SpinningwheelSouthAddon() + { + AddComponent( new AddonComponent( 0x1015 ), 0, 0, 0 ); + + Hue = Utility.RandomHue(); + } + + public SpinningwheelSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + private Timer m_Timer; + + public override void OnComponentLoaded( AddonComponent c ) + { + switch ( c.ItemID ) + { + case 0x1016: + case 0x101A: + case 0x101D: + case 0x10A5: --c.ItemID; break; + } + } + + public bool Spinning{ get{ return m_Timer != null; } } + + public void BeginSpin( SpinCallback callback, Mobile from, Item yarn ) + { + m_Timer = new SpinTimer( this, callback, from, yarn ); + m_Timer.Start(); + + foreach ( AddonComponent c in Components ) + { + switch ( c.ItemID ) + { + case 0x1015: + case 0x1019: + case 0x101C: + case 0x10A4: ++c.ItemID; break; + } + } + } + + public void EndSpin( SpinCallback callback, Mobile from, Item yarn ) + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + + foreach ( AddonComponent c in Components ) + { + switch ( c.ItemID ) + { + case 0x1016: + case 0x101A: + case 0x101D: + case 0x10A5: --c.ItemID; break; + } + } + + if ( callback != null ) + callback( this, from, yarn ); + } + + private class SpinTimer : Timer + { + private SpinningwheelSouthAddon m_Wheel; + private SpinCallback m_Callback; + private Mobile m_From; + private Item m_Yarn; + + public SpinTimer( SpinningwheelSouthAddon wheel, SpinCallback callback, Mobile from, Item yarn ) : base( TimeSpan.FromSeconds( 3.0 ) ) + { + m_Wheel = wheel; + m_Callback = callback; + m_From = from; + m_Yarn = yarn; + Priority = TimerPriority.TwoFiftyMS; + } + + protected override void OnTick() + { + m_Wheel.EndSpin( m_Callback, m_From, m_Yarn ); + } + } + } + + public class SpinningwheelSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SpinningwheelSouthAddon(); } } + public override int LabelNumber{ get{ return 1044342; } } // spining wheel (south) + + [Constructable] + public SpinningwheelSouthDeed() + { + } + + public SpinningwheelSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/StoneFireplaceEastAddon.cs b/Scripts/Items/Addons/StoneFireplaceEastAddon.cs new file mode 100644 index 0000000..0144bf3 --- /dev/null +++ b/Scripts/Items/Addons/StoneFireplaceEastAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StoneFireplaceEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new StoneFireplaceEastDeed(); } } + + [Constructable] + public StoneFireplaceEastAddon() + { + AddComponent( new AddonComponent( 0x959 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x953 ), 0, 1, 0 ); + } + + public StoneFireplaceEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StoneFireplaceEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new StoneFireplaceEastAddon(); } } + public override int LabelNumber{ get{ return 1061848; } } // stone fireplace (east) + + [Constructable] + public StoneFireplaceEastDeed() + { + } + + public StoneFireplaceEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/StoneFireplaceSouthAddon.cs b/Scripts/Items/Addons/StoneFireplaceSouthAddon.cs new file mode 100644 index 0000000..945c04b --- /dev/null +++ b/Scripts/Items/Addons/StoneFireplaceSouthAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StoneFireplaceSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new StoneFireplaceSouthDeed(); } } + + [Constructable] + public StoneFireplaceSouthAddon() + { + AddComponent( new AddonComponent( 0x967 ), -1, 0, 0 ); + AddComponent( new AddonComponent( 0x961 ), 0, 0, 0 ); + } + + public StoneFireplaceSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StoneFireplaceSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new StoneFireplaceSouthAddon(); } } + public override int LabelNumber{ get{ return 1061849; } } // stone fireplace (south) + + [Constructable] + public StoneFireplaceSouthDeed() + { + } + + public StoneFireplaceSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/StoneFountainAddon.cs b/Scripts/Items/Addons/StoneFountainAddon.cs new file mode 100644 index 0000000..a0132e6 --- /dev/null +++ b/Scripts/Items/Addons/StoneFountainAddon.cs @@ -0,0 +1,54 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StoneFountainAddon : BaseAddon + { + [Constructable] + public StoneFountainAddon() + { + int itemID = 0x1731; + + AddComponent( new AddonComponent( itemID++ ), -2, +1, 0 ); + AddComponent( new AddonComponent( itemID++ ), -1, +1, 0 ); + AddComponent( new AddonComponent( itemID++ ), +0, +1, 0 ); + AddComponent( new AddonComponent( itemID++ ), +1, +1, 0 ); + + AddComponent( new AddonComponent( itemID++ ), +1, +0, 0 ); + AddComponent( new AddonComponent( itemID++ ), +1, -1, 0 ); + AddComponent( new AddonComponent( itemID++ ), +1, -2, 0 ); + + AddComponent( new AddonComponent( itemID++ ), +0, -2, 0 ); + AddComponent( new AddonComponent( itemID++ ), +0, -1, 0 ); + AddComponent( new AddonComponent( itemID++ ), +0, +0, 0 ); + + AddComponent( new AddonComponent( itemID++ ), -1, +0, 0 ); + AddComponent( new AddonComponent( itemID++ ), -2, +0, 0 ); + + AddComponent( new AddonComponent( itemID++ ), -2, -1, 0 ); + AddComponent( new AddonComponent( itemID++ ), -1, -1, 0 ); + + AddComponent( new AddonComponent( itemID++ ), -1, -2, 0 ); + AddComponent( new AddonComponent( ++itemID ), -2, -2, 0 ); + } + + public StoneFountainAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/StoneOvenEastAddon.cs b/Scripts/Items/Addons/StoneOvenEastAddon.cs new file mode 100644 index 0000000..59811cb --- /dev/null +++ b/Scripts/Items/Addons/StoneOvenEastAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StoneOvenEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new StoneOvenEastDeed(); } } + + [Constructable] + public StoneOvenEastAddon() + { + AddComponent( new AddonComponent( 0x92C ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x92B ), 0, 1, 0 ); + } + + public StoneOvenEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StoneOvenEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new StoneOvenEastAddon(); } } + public override int LabelNumber{ get{ return 1044345; } } // stone oven (east) + + [Constructable] + public StoneOvenEastDeed() + { + } + + public StoneOvenEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/StoneOvenSouthAddon.cs b/Scripts/Items/Addons/StoneOvenSouthAddon.cs new file mode 100644 index 0000000..380a554 --- /dev/null +++ b/Scripts/Items/Addons/StoneOvenSouthAddon.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StoneOvenSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new StoneOvenSouthDeed(); } } + + [Constructable] + public StoneOvenSouthAddon() + { + AddComponent( new AddonComponent( 0x931 ), -1, 0, 0 ); + AddComponent( new AddonComponent( 0x930 ), 0, 0, 0 ); + } + + public StoneOvenSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StoneOvenSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new StoneOvenSouthAddon(); } } + public override int LabelNumber{ get{ return 1044346; } } // stone oven (south) + + [Constructable] + public StoneOvenSouthDeed() + { + } + + public StoneOvenSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/StretchedHides.cs b/Scripts/Items/Addons/StretchedHides.cs new file mode 100644 index 0000000..7874bab --- /dev/null +++ b/Scripts/Items/Addons/StretchedHides.cs @@ -0,0 +1,237 @@ +using System; +using Server; + +namespace Server.Items +{ + public class SmallStretchedHideEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new SmallStretchedHideEastDeed(); } } + + [Constructable] + public SmallStretchedHideEastAddon() + { + AddComponent( new AddonComponent( 0x1069 ), 0, 0, 0 ); + } + + public SmallStretchedHideEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallStretchedHideEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SmallStretchedHideEastAddon(); } } + public override int LabelNumber{ get{ return 1049401; } } // a small stretched hide deed facing east + + [Constructable] + public SmallStretchedHideEastDeed() + { + } + + public SmallStretchedHideEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallStretchedHideSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new SmallStretchedHideSouthDeed(); } } + + [Constructable] + public SmallStretchedHideSouthAddon() + { + AddComponent( new AddonComponent( 0x107A ), 0, 0, 0 ); + } + + public SmallStretchedHideSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallStretchedHideSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new SmallStretchedHideSouthAddon(); } } + public override int LabelNumber{ get{ return 1049402; } } // a small stretched hide deed facing south + + [Constructable] + public SmallStretchedHideSouthDeed() + { + } + + public SmallStretchedHideSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumStretchedHideEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new MediumStretchedHideEastDeed(); } } + + [Constructable] + public MediumStretchedHideEastAddon() + { + AddComponent( new AddonComponent( 0x106B ), 0, 0, 0 ); + } + + public MediumStretchedHideEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumStretchedHideEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new MediumStretchedHideEastAddon(); } } + public override int LabelNumber{ get{ return 1049403; } } // a medium stretched hide deed facing east + + [Constructable] + public MediumStretchedHideEastDeed() + { + } + + public MediumStretchedHideEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumStretchedHideSouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new MediumStretchedHideSouthDeed(); } } + + [Constructable] + public MediumStretchedHideSouthAddon() + { + AddComponent( new AddonComponent( 0x107C ), 0, 0, 0 ); + } + + public MediumStretchedHideSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumStretchedHideSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new MediumStretchedHideSouthAddon(); } } + public override int LabelNumber{ get{ return 1049404; } } // a medium stretched hide deed facing south + + [Constructable] + public MediumStretchedHideSouthDeed() + { + } + + public MediumStretchedHideSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/Telescope.cs b/Scripts/Items/Addons/Telescope.cs new file mode 100644 index 0000000..cb592af --- /dev/null +++ b/Scripts/Items/Addons/Telescope.cs @@ -0,0 +1,106 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Telescope : BaseAddon + { + [Constructable] + public Telescope() + { + AddComponent( new AddonComponent( 0x1494 ), 0, 5, 0 ); + AddComponent( new AddonComponent( 0x145B ), 0, 6, 0 ); + AddComponent( new AddonComponent( 0x145A ), 0, 7, 0 ); + + AddComponent( new AddonComponent( 0x1495 ), 1, 4, 0 ); + AddComponent( new AddonComponent( 0x145C ), 1, 7, 0 ); + AddComponent( new AddonComponent( 0x145D ), 1, 8, 0 ); + + AddComponent( new AddonComponent( 0x1496 ), 2, 3, 0 ); + AddComponent( new AddonComponent( 0x1499 ), 2, 4, 0 ); + AddComponent( new AddonComponent( 0x148E ), 2, 6, 0 ); + AddComponent( new AddonComponent( 0x1493 ), 2, 7, 0 ); + AddComponent( new AddonComponent( 0x1492 ), 2, 8, 0 ); + AddComponent( new AddonComponent( 0x145E ), 2, 9, 0 ); + AddComponent( new AddonComponent( 0x1459 ), 2,10, 0 ); + + AddComponent( new AddonComponent( 0x1497 ), 3, 2, 0 ); + AddComponent( new AddonComponent( 0x145F ), 3, 9, 0 ); + AddComponent( new AddonComponent( 0x1461 ), 3,10, 0 ); + + AddComponent( new AddonComponent( 0x149A ), 4, 1, 0 ); + AddComponent( new AddonComponent( 0x1498 ), 4, 2, 0 ); + AddComponent( new AddonComponent( 0x148F ), 4, 4, 0 ); + AddComponent( new AddonComponent( 0x148D ), 4, 6, 0 ); + AddComponent( new AddonComponent( 0x1488 ), 4, 8, 0 ); + AddComponent( new AddonComponent( 0x1460 ), 4, 9, 0 ); + AddComponent( new AddonComponent( 0x1462 ), 4,10, 0 ); + + AddComponent( new AddonComponent( 0x147D ), 5, 0, 0 ); + AddComponent( new AddonComponent( 0x1490 ), 5, 4, 0 ); + AddComponent( new AddonComponent( 0x148B ), 5, 5, 0 ); + AddComponent( new AddonComponent( 0x148A ), 5, 6, 0 ); + AddComponent( new AddonComponent( 0x1486 ), 5, 7, 0 ); + AddComponent( new AddonComponent( 0x1485 ), 5, 8, 0 ); + + AddComponent( new AddonComponent( 0x147C ), 6, 0, 0 ); + AddComponent( new AddonComponent( 0x1491 ), 6, 4, 0 ); + AddComponent( new AddonComponent( 0x148C ), 6, 5, 0 ); + AddComponent( new AddonComponent( 0x1489 ), 6, 6, 0 ); + AddComponent( new AddonComponent( 0x1487 ), 6, 7, 0 ); + AddComponent( new AddonComponent( 0x1484 ), 6, 8, 0 ); + AddComponent( new AddonComponent( 0x1463 ), 6,10, 0 ); + + AddComponent( new AddonComponent( 0x147B ), 7, 0, 0 ); + AddComponent( new AddonComponent( 0x147F ), 7, 3, 0 ); + AddComponent( new AddonComponent( 0x1480 ), 7, 4, 0 ); + AddComponent( new AddonComponent( 0x1482 ), 7, 5, 0 ); + AddComponent( new AddonComponent( 0x1469 ), 7, 6, 0 ); + AddComponent( new AddonComponent( 0x1468 ), 7, 7, 0 ); + AddComponent( new AddonComponent( 0x1465 ), 7, 8, 0 ); + AddComponent( new AddonComponent( 0x1464 ), 7, 9, 0 ); + + AddComponent( new AddonComponent( 0x147A ), 8, 0, 0 ); + AddComponent( new AddonComponent( 0x1479 ), 8, 1, 0 ); + AddComponent( new AddonComponent( 0x1477 ), 8, 2, 0 ); + AddComponent( new AddonComponent( 0x147E ), 8, 3, 0 ); + AddComponent( new AddonComponent( 0x1481 ), 8, 4, 0 ); + AddComponent( new AddonComponent( 0x1483 ), 8, 5, 0 ); + AddComponent( new AddonComponent( 0x146A ), 8, 6, 0 ); + AddComponent( new AddonComponent( 0x1467 ), 8, 7, 0 ); + AddComponent( new AddonComponent( 0x1466 ), 8, 8, 0 ); + + AddComponent( new AddonComponent( 0x1478 ), 9, 1, 0 ); + AddComponent( new AddonComponent( 0x1475 ), 9, 2, 0 ); + AddComponent( new AddonComponent( 0x1474 ), 9, 3, 0 ); + AddComponent( new AddonComponent( 0x146F ), 9, 4, 0 ); + AddComponent( new AddonComponent( 0x146E ), 9, 5, 0 ); + AddComponent( new AddonComponent( 0x146D ), 9, 6, 0 ); + AddComponent( new AddonComponent( 0x146B ), 9, 7, 0 ); + + AddComponent( new AddonComponent( 0x1476 ),10, 2, 0 ); + AddComponent( new AddonComponent( 0x1473 ),10, 3, 0 ); + AddComponent( new AddonComponent( 0x1470 ),10, 4, 0 ); + AddComponent( new AddonComponent( 0x1471 ),10, 5, 0 ); + AddComponent( new AddonComponent( 0x1472 ),10, 6, 0 ); + } + + public Telescope( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/TrainingDummies.cs b/Scripts/Items/Addons/TrainingDummies.cs new file mode 100644 index 0000000..f6a6f7f --- /dev/null +++ b/Scripts/Items/Addons/TrainingDummies.cs @@ -0,0 +1,286 @@ +using System; +using Server; +using Server.Mobiles; + +namespace Server.Items +{ + [Flipable( 0x1070, 0x1074 )] + public class TrainingDummy : AddonComponent + { + private double m_MinSkill; + private double m_MaxSkill; + + private Timer m_Timer; + + [CommandProperty( AccessLevel.GameMaster )] + public double MinSkill + { + get{ return m_MinSkill; } + set{ m_MinSkill = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public double MaxSkill + { + get{ return m_MaxSkill; } + set{ m_MaxSkill = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Swinging + { + get{ return ( m_Timer != null ); } + } + + [Constructable] + public TrainingDummy() : this( 0x1074 ) + { + } + + [Constructable] + public TrainingDummy( int itemID ) : base( itemID ) + { + m_MinSkill = -25.0; + m_MaxSkill = +25.0; + } + + public void UpdateItemID() + { + int baseItemID = (ItemID / 2) * 2; + + ItemID = baseItemID + (Swinging ? 1 : 0); + } + + public void BeginSwing() + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = new InternalTimer( this ); + m_Timer.Start(); + } + + public void EndSwing() + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + + UpdateItemID(); + } + + public void OnHit() + { + UpdateItemID(); + Effects.PlaySound( GetWorldLocation(), Map, Utility.RandomList( 0x3A4, 0x3A6, 0x3A9, 0x3AE, 0x3B4, 0x3B6 ) ); + } + + public void Use( Mobile from, BaseWeapon weapon ) + { + BeginSwing(); + + from.Direction = from.GetDirectionTo( GetWorldLocation() ); + weapon.PlaySwingAnimation( from ); + + if ( from is PlayerMobile ) + from.CheckSkill( weapon.Skill, m_MinSkill, m_MaxSkill ); + } + + public override void OnDoubleClick( Mobile from ) + { + BaseWeapon weapon = from.Weapon as BaseWeapon; + + if ( weapon is BaseRanged ) + SendLocalizedMessageTo( from, 501822 ); // You can't practice ranged weapons on this. + else if ( weapon == null || !from.InRange( GetWorldLocation(), weapon.MaxRange ) ) + SendLocalizedMessageTo( from, 501816 ); // You are too far away to do that. + else if ( Swinging ) + SendLocalizedMessageTo( from, 501815 ); // You have to wait until it stops swinging. + else if ( from.Skills[weapon.Skill].Base >= m_MaxSkill && !(from is BaseCreature) ) + SendLocalizedMessageTo( from, 501828 ); // Your skill cannot improve any further by simply practicing with a dummy. + else if ( from.Mounted ) + SendLocalizedMessageTo( from, 501829 ); // You can't practice on this while on a mount. + else + Use( from, weapon ); + } + + public TrainingDummy( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( m_MinSkill ); + writer.Write( m_MaxSkill ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_MinSkill = reader.ReadDouble(); + m_MaxSkill = reader.ReadDouble(); + + if ( m_MinSkill == 0.0 && m_MaxSkill == 30.0 ) + { + m_MinSkill = -25.0; + m_MaxSkill = +25.0; + } + + break; + } + } + + UpdateItemID(); + } + + private class InternalTimer : Timer + { + private TrainingDummy m_Dummy; + private bool m_Delay = true; + + public InternalTimer( TrainingDummy dummy ) : base( TimeSpan.FromSeconds( 0.25 ), TimeSpan.FromSeconds( 2.75 ) ) + { + m_Dummy = dummy; + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + if ( m_Delay ) + m_Dummy.OnHit(); + else + m_Dummy.EndSwing(); + + m_Delay = !m_Delay; + } + } + } + + public class TrainingDummyEastAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new TrainingDummyEastDeed(); } } + + [Constructable] + public TrainingDummyEastAddon() + { + AddComponent( new TrainingDummy( 0x1074 ), 0, 0, 0 ); + } + + public TrainingDummyEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TrainingDummyEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new TrainingDummyEastAddon(); } } + public override int LabelNumber{ get{ return 1044335; } } // training dummy (east) + + [Constructable] + public TrainingDummyEastDeed() + { + } + + public TrainingDummyEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TrainingDummySouthAddon : BaseAddon + { + public override BaseAddonDeed Deed{ get{ return new TrainingDummySouthDeed(); } } + + [Constructable] + public TrainingDummySouthAddon() + { + AddComponent( new TrainingDummy( 0x1070 ), 0, 0, 0 ); + } + + public TrainingDummySouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TrainingDummySouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new TrainingDummySouthAddon(); } } + public override int LabelNumber{ get{ return 1044336; } } // training dummy (south) + + [Constructable] + public TrainingDummySouthDeed() + { + } + + public TrainingDummySouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/WaterTroughEastAddon.cs b/Scripts/Items/Addons/WaterTroughEastAddon.cs new file mode 100644 index 0000000..2c317df --- /dev/null +++ b/Scripts/Items/Addons/WaterTroughEastAddon.cs @@ -0,0 +1,70 @@ +using System; +using Server; + +namespace Server.Items +{ + public class WaterTroughEastAddon : BaseAddon, IWaterSource + { + public override BaseAddonDeed Deed{ get{ return new WaterTroughEastDeed(); } } + + [Constructable] + public WaterTroughEastAddon() + { + AddComponent( new AddonComponent( 0xB41 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xB42 ), 0, 1, 0 ); + } + + public WaterTroughEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public int Quantity + { + get{ return 500; } + set{} + } + } + + public class WaterTroughEastDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new WaterTroughEastAddon(); } } + public override int LabelNumber{ get{ return 1044349; } } // water trough (east) + + [Constructable] + public WaterTroughEastDeed() + { + } + + public WaterTroughEastDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/WaterTroughSouthAddon.cs b/Scripts/Items/Addons/WaterTroughSouthAddon.cs new file mode 100644 index 0000000..ffe6577 --- /dev/null +++ b/Scripts/Items/Addons/WaterTroughSouthAddon.cs @@ -0,0 +1,70 @@ +using System; +using Server; + +namespace Server.Items +{ + public class WaterTroughSouthAddon : BaseAddon, IWaterSource + { + public override BaseAddonDeed Deed{ get{ return new WaterTroughSouthDeed(); } } + + [Constructable] + public WaterTroughSouthAddon() + { + AddComponent( new AddonComponent( 0xB43 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0xB44 ), 1, 0, 0 ); + } + + public WaterTroughSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public int Quantity + { + get{ return 500; } + set{} + } + } + + public class WaterTroughSouthDeed : BaseAddonDeed + { + public override BaseAddon Addon{ get{ return new WaterTroughSouthAddon(); } } + public override int LabelNumber{ get{ return 1044350; } } // water trough (south) + + [Constructable] + public WaterTroughSouthDeed() + { + } + + public WaterTroughSouthDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Addons/WaterVat.cs b/Scripts/Items/Addons/WaterVat.cs new file mode 100644 index 0000000..5ae73fc --- /dev/null +++ b/Scripts/Items/Addons/WaterVat.cs @@ -0,0 +1,87 @@ +using System; +using Server; + +namespace Server.Items +{ + public class WaterVatEast : BaseAddon + { + [Constructable] + public WaterVatEast() + { + AddComponent( new AddonComponent( 0x1558 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x14DE ), -1, 1, 0 ); + AddComponent( new AddonComponent( 0x1552 ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x14DF ), 1, -1, 0 ); + AddComponent( new AddonComponent( 0x1554 ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1559 ), 1, 1, 0 ); + AddComponent( new AddonComponent( 0x1550 ), 1, 3, 0 ); + AddComponent( new AddonComponent( 0x1555 ), 3, 1, 0 ); + AddComponent( new AddonComponent( 0x14D7 ), 2, 2, 0 ); + + // Blockers + AddComponent( new AddonComponent( 0x21A4 ), 2, -1, 0 ); + AddComponent( new AddonComponent( 0x21A4 ), 3, 0, 0 ); + AddComponent( new AddonComponent( 0x21A4 ), -1, 2, 0 ); + AddComponent( new AddonComponent( 0x21A4 ), 0, 3, 0 ); + } + + public WaterVatEast( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class WaterVatSouth : BaseAddon + { + [Constructable] + public WaterVatSouth() + { + AddComponent( new AddonComponent( 0x1558 ), 0, 0, 0 ); + AddComponent( new AddonComponent( 0x14DE ), -1, 1, 0 ); + AddComponent( new AddonComponent( 0x1552 ), 0, 1, 0 ); + AddComponent( new AddonComponent( 0x14DF ), 1, -1, 0 ); + AddComponent( new AddonComponent( 0x1554 ), 1, 0, 0 ); + AddComponent( new AddonComponent( 0x1559 ), 1, 1, 0 ); + AddComponent( new AddonComponent( 0x1551 ), 1, 3, 0 ); + AddComponent( new AddonComponent( 0x1556 ), 3, 1, 0 ); + AddComponent( new AddonComponent( 0x14D7 ), 2, 2, 0 ); + + // Blockers + AddComponent( new AddonComponent( 0x21A4 ), 2, -1, 0 ); + AddComponent( new AddonComponent( 0x21A4 ), 3, 0, 0 ); + AddComponent( new AddonComponent( 0x21A4 ), -1, 2, 0 ); + AddComponent( new AddonComponent( 0x21A4 ), 0, 3, 0 ); + } + + public WaterVatSouth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/ArmorEnums.cs b/Scripts/Items/Armor/ArmorEnums.cs new file mode 100644 index 0000000..7601b93 --- /dev/null +++ b/Scripts/Items/Armor/ArmorEnums.cs @@ -0,0 +1,61 @@ +using System; + +namespace Server.Items +{ + public enum ArmorQuality + { + Low, + Regular, + Exceptional + } + + public enum ArmorDurabilityLevel + { + Regular, + Durable, + Substantial, + Massive, + Fortified, + Indestructible + } + + public enum ArmorProtectionLevel + { + Regular, + Defense, + Guarding, + Hardening, + Fortification, + Invulnerability, + } + + public enum ArmorBodyType + { + Gorget, + Gloves, + Helmet, + Arms, + Legs, + Chest, + Shield + } + + public enum ArmorMaterialType + { + Cloth, + Leather, + Studded, + Bone, + Wood, + Ringmail, + Chainmail, + Plate + } + + public enum ArmorMeditationAllowance + { + All, + Half, + None + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/BaseArmor.cs b/Scripts/Items/Armor/BaseArmor.cs new file mode 100644 index 0000000..8fdf3b5 --- /dev/null +++ b/Scripts/Items/Armor/BaseArmor.cs @@ -0,0 +1,1179 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Network; +using Server.Engines.Craft; +using AMA = Server.Items.ArmorMeditationAllowance; +using AMT = Server.Items.ArmorMaterialType; +using ABT = Server.Items.ArmorBodyType; + +namespace Server.Items +{ + public abstract class BaseArmor : Item, IScissorable, ICraftable, IWearableDurability + { + /* Armor internals work differently now (Jun 19 2003) + * + * The attributes defined below default to -1. + * If the value is -1, the corresponding virtual property is used. + * If not, the attribute value itself is used. Here's the list: + * - ArmorBase + * - StrBonus + * - DexBonus + * - IntBonus + * - StrReq + * - DexReq + * - IntReq + * - MeditationAllowance + */ + + // Instance values. These values must are unique to each armor piece. + private int m_MaxHitPoints; + private int m_HitPoints; + private Mobile m_Crafter; + private ArmorQuality m_Quality; + private ArmorDurabilityLevel m_Durability; + private ArmorProtectionLevel m_Protection; + private CraftResource m_Resource; + private bool m_PlayerConstructed; + + // Overridable values. These values are provided to override the defaults which get defined in the individual armor scripts. + private int m_ArmorBase = -1; + private int m_StrBonus = -1, m_DexBonus = -1, m_IntBonus = -1; + private int m_StrReq = -1, m_DexReq = -1, m_IntReq = -1; + private AMA m_Meditate = (AMA)(-1); + + public virtual bool AllowMaleWearer{ get{ return true; } } + public virtual bool AllowFemaleWearer{ get{ return true; } } + + public abstract AMT MaterialType{ get; } + + public virtual int RevertArmorBase{ get{ return ArmorBase; } } + public virtual int ArmorBase{ get{ return 0; } } + + public virtual AMA DefMedAllowance{ get{ return AMA.None; } } + public virtual AMA UOMedAllowance{ get{ return DefMedAllowance; } } + + public virtual int UOStrBonus{ get{ return 0; } } + public virtual int UODexBonus{ get{ return 0; } } + public virtual int UOIntBonus{ get{ return 0; } } + public virtual int UOStrReq{ get{ return 0; } } + public virtual int UODexReq{ get{ return 0; } } + public virtual int UOIntReq{ get{ return 0; } } + + public virtual bool CanFortify{ get{ return true; } } + + public override void OnAfterDuped( Item newItem ) + { + BaseArmor armor = newItem as BaseArmor; + + if ( armor == null ) + return; + } + + [CommandProperty( AccessLevel.GameMaster )] + public AMA MeditationAllowance + { + get{ return ( m_Meditate == (AMA)(-1) ? UOMedAllowance : m_Meditate ); } + set{ m_Meditate = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int BaseArmorRating + { + get + { + if ( m_ArmorBase == -1 ) + return ArmorBase; + else + return m_ArmorBase; + } + set + { + m_ArmorBase = value; Invalidate(); + } + } + + public double BaseArmorRatingScaled + { + get + { + return ( BaseArmorRating * ArmorScalar ); + } + } + + public virtual double ArmorRating + { + get + { + int ar = BaseArmorRating; + + if ( m_Protection != ArmorProtectionLevel.Regular ) + ar += 10 + (5 * (int)m_Protection); + + ar += -8 + (8 * (int)m_Quality); + return ScaleArmorByDurability( ar ); + } + } + + public double ArmorRatingScaled + { + get + { + return ( ArmorRating * ArmorScalar ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int StrBonus + { + get{ return ( m_StrBonus == -1 ? UOStrBonus : m_StrBonus ); } + set{ m_StrBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int DexBonus + { + get{ return ( m_DexBonus == -1 ? UODexBonus : m_DexBonus ); } + set{ m_DexBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int IntBonus + { + get{ return ( m_IntBonus == -1 ? UOIntBonus : m_IntBonus ); } + set{ m_IntBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int StrRequirement + { + get{ return ( m_StrReq == -1 ? UOStrReq : m_StrReq ); } + set{ m_StrReq = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int DexRequirement + { + get{ return ( m_DexReq == -1 ? UODexReq : m_DexReq ); } + set{ m_DexReq = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int IntRequirement + { + get{ return ( m_IntReq == -1 ? UOIntReq : m_IntReq ); } + set{ m_IntReq = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool PlayerConstructed + { + get{ return m_PlayerConstructed; } + set{ m_PlayerConstructed = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get + { + return m_Resource; + } + set + { + if ( m_Resource != value ) + { + UnscaleDurability(); + + m_Resource = value; + + if (!DefTailoring.IsNonColorable(this.GetType())) + { + Hue = CraftResources.GetHue(m_Resource); + } + + Invalidate(); + InvalidateProperties(); + + ScaleDurability(); + } + } + } + + public virtual double ArmorScalar + { + get + { + int pos = (int)BodyPosition; + + if ( pos >= 0 && pos < m_ArmorScalars.Length ) + return m_ArmorScalars[pos]; + + return 1.0; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxHitPoints + { + get{ return m_MaxHitPoints; } + set{ m_MaxHitPoints = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int HitPoints + { + get + { + return m_HitPoints; + } + set + { + if ( value != m_HitPoints && MaxHitPoints > 0 ) + { + m_HitPoints = value; + + if ( m_HitPoints < 0 ) + Delete(); + else if ( m_HitPoints > MaxHitPoints ) + m_HitPoints = MaxHitPoints; + + InvalidateProperties(); + } + } + } + + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Crafter + { + get{ return m_Crafter; } + set{ m_Crafter = value; InvalidateProperties(); } + } + + + [CommandProperty( AccessLevel.GameMaster )] + public ArmorQuality Quality + { + get{ return m_Quality; } + set{ UnscaleDurability(); m_Quality = value; Invalidate(); InvalidateProperties(); ScaleDurability(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public ArmorDurabilityLevel Durability + { + get{ return m_Durability; } + set{ UnscaleDurability(); m_Durability = value; ScaleDurability(); InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public ArmorProtectionLevel ProtectionLevel + { + get + { + return m_Protection; + } + set + { + if ( m_Protection != value ) + { + m_Protection = value; + + Invalidate(); + InvalidateProperties(); + } + } + } + + public int ComputeStatReq( StatType type ) + { + int v; + + if ( type == StatType.Str ) + v = StrRequirement; + else if ( type == StatType.Dex ) + v = DexRequirement; + else + v = IntRequirement; + + return Ultima.Scale( v, 100 - GetLowerStatReq() ); + } + + public int ComputeStatBonus( StatType type ) + { + if ( type == StatType.Str ) + return StrBonus; + else if ( type == StatType.Dex ) + return DexBonus; + else + return IntBonus; + } + + public virtual int InitMinHits{ get{ return 0; } } + public virtual int InitMaxHits{ get{ return 0; } } + + [CommandProperty( AccessLevel.GameMaster )] + public ArmorBodyType BodyPosition + { + get + { + switch ( this.Layer ) + { + default: + case Layer.Neck: return ArmorBodyType.Gorget; + case Layer.TwoHanded: return ArmorBodyType.Shield; + case Layer.Gloves: return ArmorBodyType.Gloves; + case Layer.Helm: return ArmorBodyType.Helmet; + case Layer.Arms: return ArmorBodyType.Arms; + + case Layer.InnerLegs: + case Layer.OuterLegs: + case Layer.Pants: return ArmorBodyType.Legs; + + case Layer.InnerTorso: + case Layer.OuterTorso: + case Layer.Shirt: return ArmorBodyType.Chest; + } + } + } + + public CraftAttributeInfo GetResourceAttrs() + { + CraftResourceInfo info = CraftResources.GetInfo( m_Resource ); + + if ( info == null ) + return CraftAttributeInfo.Blank; + + return info.AttributeInfo; + } + + public int GetProtOffset() + { + switch ( m_Protection ) + { + case ArmorProtectionLevel.Guarding: return 1; + case ArmorProtectionLevel.Hardening: return 2; + case ArmorProtectionLevel.Fortification: return 3; + case ArmorProtectionLevel.Invulnerability: return 4; + } + + return 0; + } + + public void UnscaleDurability() + { + int scale = 100 + GetDurabilityBonus(); + + m_HitPoints = ((m_HitPoints * 100) + (scale - 1)) / scale; + m_MaxHitPoints = ((m_MaxHitPoints * 100) + (scale - 1)) / scale; + InvalidateProperties(); + } + + public void ScaleDurability() + { + int scale = 100 + GetDurabilityBonus(); + + m_HitPoints = ((m_HitPoints * scale) + 99) / 100; + m_MaxHitPoints = ((m_MaxHitPoints * scale) + 99) / 100; + InvalidateProperties(); + } + + public int GetDurabilityBonus() + { + int bonus = 0; + + if ( m_Quality == ArmorQuality.Exceptional ) + bonus += 20; + + switch ( m_Durability ) + { + case ArmorDurabilityLevel.Durable: bonus += 20; break; + case ArmorDurabilityLevel.Substantial: bonus += 50; break; + case ArmorDurabilityLevel.Massive: bonus += 70; break; + case ArmorDurabilityLevel.Fortified: bonus += 100; break; + case ArmorDurabilityLevel.Indestructible: bonus += 120; break; + } + + return bonus; + } + + public bool Scissor( Mobile from, Scissors scissors ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 502437 ); // Items you wish to cut must be in your backpack. + return false; + } + + CraftSystem system = DefTailoring.CraftSystem; + + CraftItem item = system.CraftItems.SearchFor( GetType() ); + + if ( item != null && item.Resources.Count == 1 && item.Resources.GetAt( 0 ).Amount >= 2 ) + { + try + { + Item res = (Item)Activator.CreateInstance( CraftResources.GetInfo( m_Resource ).ResourceTypes[0] ); + + ScissorHelper( from, res, m_PlayerConstructed ? (item.Resources.GetAt( 0 ).Amount / 2) : 1 ); + return true; + } + catch + { + } + } + + from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything. + return false; + } + + private static double[] m_ArmorScalars = { 0.07, 0.07, 0.14, 0.15, 0.22, 0.35 }; + + public static double[] ArmorScalars + { + get + { + return m_ArmorScalars; + } + set + { + m_ArmorScalars = value; + } + } + + public static void ValidateMobile( Mobile m ) + { + for ( int i = m.Items.Count - 1; i >= 0; --i ) + { + if ( i >= m.Items.Count ) + continue; + + Item item = m.Items[i]; + + if ( item is BaseArmor ) + { + BaseArmor armor = (BaseArmor)item; + + if ( !armor.AllowMaleWearer && !m.Female && m.AccessLevel < AccessLevel.GameMaster ) + { + if ( armor.AllowFemaleWearer ) + m.SendLocalizedMessage( 1010388 ); // Only females can wear this. + else + m.SendMessage( "You may not wear this." ); + + m.AddToBackpack( armor ); + } + else if ( !armor.AllowFemaleWearer && m.Female && m.AccessLevel < AccessLevel.GameMaster ) + { + if ( armor.AllowMaleWearer ) + m.SendLocalizedMessage( 1063343 ); // Only males can wear this. + else + m.SendMessage( "You may not wear this." ); + + m.AddToBackpack( armor ); + } + } + } + } + + public int GetLowerStatReq() + { + return 0; + } + + public override void OnAdded( object parent ) + { + if ( parent is Mobile ) + { + Mobile from = (Mobile)parent; + + from.Delta( MobileDelta.Armor ); // Tell them armor rating has changed + } + } + + public virtual double ScaleArmorByDurability( double armor ) + { + int scale = 100; + + if ( m_MaxHitPoints > 0 && m_HitPoints < m_MaxHitPoints ) + scale = 50 + ((50 * m_HitPoints) / m_MaxHitPoints); + + return ( armor * scale ) / 100; + } + + protected void Invalidate() + { + if ( Parent is Mobile ) + ((Mobile)Parent).Delta( MobileDelta.Armor ); // Tell them armor rating has changed + } + + public BaseArmor( Serial serial ) : base( serial ) + { + } + + private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf ) + { + if ( setIf ) + flags |= toSet; + } + + private static bool GetSaveFlag( SaveFlag flags, SaveFlag toGet ) + { + return ( (flags & toGet) != 0 ); + } + + [Flags] + private enum SaveFlag + { + None = 0x00000000, + MaxHitPoints = 0x00000001, + HitPoints = 0x00000002, + Crafter = 0x00000004, + Quality = 0x00000008, + Durability = 0x00000010, + Protection = 0x00000020, + Resource = 0x00000040, + BaseArmor = 0x00000080, + StrBonus = 0x00000100, + DexBonus = 0x00000200, + IntBonus = 0x00000400, + StrReq = 0x00000800, + DexReq = 0x00001000, + IntReq = 0x00002000, + MedAllowance = 0x00004000, + SkillBonuses = 0x00008000, + PlayerConstructed = 0x00010000 + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 7 ); // version + + SaveFlag flags = SaveFlag.None; + + SetSaveFlag( ref flags, SaveFlag.MaxHitPoints, m_MaxHitPoints != 0 ); + SetSaveFlag( ref flags, SaveFlag.HitPoints, m_HitPoints != 0 ); + SetSaveFlag( ref flags, SaveFlag.Crafter, m_Crafter != null ); + SetSaveFlag( ref flags, SaveFlag.Quality, m_Quality != ArmorQuality.Regular ); + SetSaveFlag( ref flags, SaveFlag.Durability, m_Durability != ArmorDurabilityLevel.Regular ); + SetSaveFlag( ref flags, SaveFlag.Protection, m_Protection != ArmorProtectionLevel.Regular ); + SetSaveFlag( ref flags, SaveFlag.Resource, m_Resource != DefaultResource ); + SetSaveFlag( ref flags, SaveFlag.BaseArmor, m_ArmorBase != -1 ); + SetSaveFlag( ref flags, SaveFlag.StrBonus, m_StrBonus != -1 ); + SetSaveFlag( ref flags, SaveFlag.DexBonus, m_DexBonus != -1 ); + SetSaveFlag( ref flags, SaveFlag.IntBonus, m_IntBonus != -1 ); + SetSaveFlag( ref flags, SaveFlag.StrReq, m_StrReq != -1 ); + SetSaveFlag( ref flags, SaveFlag.DexReq, m_DexReq != -1 ); + SetSaveFlag( ref flags, SaveFlag.IntReq, m_IntReq != -1 ); + SetSaveFlag( ref flags, SaveFlag.MedAllowance, m_Meditate != (AMA)(-1) ); + SetSaveFlag( ref flags, SaveFlag.PlayerConstructed, m_PlayerConstructed != false ); + + writer.WriteEncodedInt( (int) flags ); + + if ( GetSaveFlag( flags, SaveFlag.MaxHitPoints ) ) + writer.WriteEncodedInt( (int) m_MaxHitPoints ); + + if ( GetSaveFlag( flags, SaveFlag.HitPoints ) ) + writer.WriteEncodedInt( (int) m_HitPoints ); + + if ( GetSaveFlag( flags, SaveFlag.Crafter ) ) + writer.Write( (Mobile) m_Crafter ); + + if ( GetSaveFlag( flags, SaveFlag.Quality ) ) + writer.WriteEncodedInt( (int) m_Quality ); + + if ( GetSaveFlag( flags, SaveFlag.Durability ) ) + writer.WriteEncodedInt( (int) m_Durability ); + + if ( GetSaveFlag( flags, SaveFlag.Protection ) ) + writer.WriteEncodedInt( (int) m_Protection ); + + if ( GetSaveFlag( flags, SaveFlag.Resource ) ) + writer.WriteEncodedInt( (int) m_Resource ); + + if ( GetSaveFlag( flags, SaveFlag.BaseArmor ) ) + writer.WriteEncodedInt( (int) m_ArmorBase ); + + if ( GetSaveFlag( flags, SaveFlag.StrBonus ) ) + writer.WriteEncodedInt( (int) m_StrBonus ); + + if ( GetSaveFlag( flags, SaveFlag.DexBonus ) ) + writer.WriteEncodedInt( (int) m_DexBonus ); + + if ( GetSaveFlag( flags, SaveFlag.IntBonus ) ) + writer.WriteEncodedInt( (int) m_IntBonus ); + + if ( GetSaveFlag( flags, SaveFlag.StrReq ) ) + writer.WriteEncodedInt( (int) m_StrReq ); + + if ( GetSaveFlag( flags, SaveFlag.DexReq ) ) + writer.WriteEncodedInt( (int) m_DexReq ); + + if ( GetSaveFlag( flags, SaveFlag.IntReq ) ) + writer.WriteEncodedInt( (int) m_IntReq ); + + if ( GetSaveFlag( flags, SaveFlag.MedAllowance ) ) + writer.WriteEncodedInt( (int) m_Meditate ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 7: + case 6: + case 5: + { + SaveFlag flags = (SaveFlag)reader.ReadEncodedInt(); + + if ( GetSaveFlag( flags, SaveFlag.MaxHitPoints ) ) + m_MaxHitPoints = reader.ReadEncodedInt(); + + if ( GetSaveFlag( flags, SaveFlag.HitPoints ) ) + m_HitPoints = reader.ReadEncodedInt(); + + if ( GetSaveFlag( flags, SaveFlag.Crafter ) ) + m_Crafter = reader.ReadMobile(); + + if ( GetSaveFlag( flags, SaveFlag.Quality ) ) + m_Quality = (ArmorQuality)reader.ReadEncodedInt(); + else + m_Quality = ArmorQuality.Regular; + + if ( version == 5 && m_Quality == ArmorQuality.Low ) + m_Quality = ArmorQuality.Regular; + + if ( GetSaveFlag( flags, SaveFlag.Durability ) ) + { + m_Durability = (ArmorDurabilityLevel)reader.ReadEncodedInt(); + + if ( m_Durability > ArmorDurabilityLevel.Indestructible ) + m_Durability = ArmorDurabilityLevel.Durable; + } + + if ( GetSaveFlag( flags, SaveFlag.Protection ) ) + { + m_Protection = (ArmorProtectionLevel)reader.ReadEncodedInt(); + + if ( m_Protection > ArmorProtectionLevel.Invulnerability ) + m_Protection = ArmorProtectionLevel.Defense; + } + + if ( GetSaveFlag( flags, SaveFlag.Resource ) ) + m_Resource = (CraftResource)reader.ReadEncodedInt(); + else + m_Resource = DefaultResource; + + if ( m_Resource == CraftResource.None ) + m_Resource = DefaultResource; + + if ( GetSaveFlag( flags, SaveFlag.BaseArmor ) ) + m_ArmorBase = reader.ReadEncodedInt(); + else + m_ArmorBase = -1; + + if ( GetSaveFlag( flags, SaveFlag.StrBonus ) ) + m_StrBonus = reader.ReadEncodedInt(); + else + m_StrBonus = -1; + + if ( GetSaveFlag( flags, SaveFlag.DexBonus ) ) + m_DexBonus = reader.ReadEncodedInt(); + else + m_DexBonus = -1; + + if ( GetSaveFlag( flags, SaveFlag.IntBonus ) ) + m_IntBonus = reader.ReadEncodedInt(); + else + m_IntBonus = -1; + + if ( GetSaveFlag( flags, SaveFlag.StrReq ) ) + m_StrReq = reader.ReadEncodedInt(); + else + m_StrReq = -1; + + if ( GetSaveFlag( flags, SaveFlag.DexReq ) ) + m_DexReq = reader.ReadEncodedInt(); + else + m_DexReq = -1; + + if ( GetSaveFlag( flags, SaveFlag.IntReq ) ) + m_IntReq = reader.ReadEncodedInt(); + else + m_IntReq = -1; + + if ( GetSaveFlag( flags, SaveFlag.MedAllowance ) ) + m_Meditate = (AMA)reader.ReadEncodedInt(); + else + m_Meditate = (AMA)(-1); + + if ( GetSaveFlag( flags, SaveFlag.PlayerConstructed ) ) + m_PlayerConstructed = true; + + break; + } + case 4: + { + goto case 3; + } + case 3: + { + goto case 2; + } + case 2: + case 1: + { + goto case 0; + } + case 0: + { + m_ArmorBase = reader.ReadInt(); + m_MaxHitPoints = reader.ReadInt(); + m_HitPoints = reader.ReadInt(); + m_Crafter = reader.ReadMobile(); + m_Quality = (ArmorQuality)reader.ReadInt(); + m_Durability = (ArmorDurabilityLevel)reader.ReadInt(); + m_Protection = (ArmorProtectionLevel)reader.ReadInt(); + + AMT mat = (AMT)reader.ReadInt(); + + if ( m_ArmorBase == RevertArmorBase ) + m_ArmorBase = -1; + + if ( version >= 2 ) + { + m_Resource = (CraftResource)reader.ReadInt(); + } + else + { + OreInfo info = OreInfo.Iron; + m_Resource = CraftResources.GetFromOreInfo( info, mat ); + } + + m_StrBonus = reader.ReadInt(); + m_DexBonus = reader.ReadInt(); + m_IntBonus = reader.ReadInt(); + m_StrReq = reader.ReadInt(); + m_DexReq = reader.ReadInt(); + m_IntReq = reader.ReadInt(); + + if ( m_StrBonus == UOStrBonus ) + m_StrBonus = -1; + + if ( m_DexBonus == UODexBonus ) + m_DexBonus = -1; + + if ( m_IntBonus == UOIntBonus ) + m_IntBonus = -1; + + if ( m_StrReq == UOStrReq ) + m_StrReq = -1; + + if ( m_DexReq == UODexReq ) + m_DexReq = -1; + + if ( m_IntReq == UOIntReq ) + m_IntReq = -1; + + m_Meditate = (AMA)reader.ReadInt(); + + if ( m_Meditate == UOMedAllowance ) + m_Meditate = (AMA)(-1); + + if ( m_Resource == CraftResource.None ) + { + if ( mat == ArmorMaterialType.Studded || mat == ArmorMaterialType.Leather ) + m_Resource = CraftResource.Leathered; + else if ( mat == ArmorMaterialType.Wood ) + m_Resource = CraftResource.Wooden; + else + m_Resource = CraftResource.Iron; + } + + if ( m_MaxHitPoints == 0 && m_HitPoints == 0 ) + m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax( InitMinHits, InitMaxHits ); + + break; + } + } + + int strBonus = ComputeStatBonus( StatType.Str ); + int dexBonus = ComputeStatBonus( StatType.Dex ); + int intBonus = ComputeStatBonus( StatType.Int ); + + if ( Parent is Mobile && (strBonus != 0 || dexBonus != 0 || intBonus != 0) ) + { + Mobile m = (Mobile)Parent; + + string modName = Serial.ToString(); + + if ( strBonus != 0 ) + m.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) ); + + if ( dexBonus != 0 ) + m.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) ); + + if ( intBonus != 0 ) + m.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) ); + } + + if ( Parent is Mobile ) + ((Mobile)Parent).CheckStatTimers(); + + if ( version < 7 ) + m_PlayerConstructed = true; // we don't know, so, assume it's crafted + } + + public virtual CraftResource DefaultResource{ get{ return CraftResource.Iron; } } + + public BaseArmor( int itemID ) : base( itemID ) + { + m_Quality = ArmorQuality.Regular; + m_Durability = ArmorDurabilityLevel.Regular; + m_Crafter = null; + + m_Resource = DefaultResource; + Hue = CraftResources.GetHue( m_Resource ); + + m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax( InitMinHits, InitMaxHits ); + + this.Layer = (Layer)ItemData.Quality; + } + + public override bool CanEquip( Mobile from ) + { + if( from.AccessLevel < AccessLevel.GameMaster ) + { + if( !AllowMaleWearer && !from.Female ) + { + if( AllowFemaleWearer ) + from.SendLocalizedMessage( 1010388 ); // Only females can wear this. + else + from.SendMessage( "You may not wear this." ); + + return false; + } + else if( !AllowFemaleWearer && from.Female ) + { + if( AllowMaleWearer ) + from.SendLocalizedMessage( 1063343 ); // Only males can wear this. + else + from.SendMessage( "You may not wear this." ); + + return false; + } + else + { + int strBonus = ComputeStatBonus( StatType.Str ), strReq = ComputeStatReq( StatType.Str ); + int dexBonus = ComputeStatBonus( StatType.Dex ), dexReq = ComputeStatReq( StatType.Dex ); + int intBonus = ComputeStatBonus( StatType.Int ), intReq = ComputeStatReq( StatType.Int ); + + if( from.Dex < dexReq || (from.Dex + dexBonus) < 1 ) + { + from.SendLocalizedMessage( 502077 ); // You do not have enough dexterity to equip this item. + return false; + } + else if( from.Str < strReq || (from.Str + strBonus) < 1 ) + { + from.SendLocalizedMessage( 500213 ); // You are not strong enough to equip that. + return false; + } + else if( from.Int < intReq || (from.Int + intBonus) < 1 ) + { + from.SendMessage( "You are not smart enough to equip that." ); + return false; + } + } + } + + return base.CanEquip( from ); + } + + public override bool CheckPropertyConfliction( Mobile m ) + { + if ( base.CheckPropertyConfliction( m ) ) + return true; + + if ( Layer == Layer.Pants ) + return ( m.FindItemOnLayer( Layer.InnerLegs ) != null ); + + if ( Layer == Layer.Shirt ) + return ( m.FindItemOnLayer( Layer.InnerTorso ) != null ); + + return false; + } + + public override bool OnEquip( Mobile from ) + { + from.CheckStatTimers(); + + int strBonus = ComputeStatBonus( StatType.Str ); + int dexBonus = ComputeStatBonus( StatType.Dex ); + int intBonus = ComputeStatBonus( StatType.Int ); + + if ( strBonus != 0 || dexBonus != 0 || intBonus != 0 ) + { + string modName = this.Serial.ToString(); + + if ( strBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) ); + + if ( dexBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) ); + + if ( intBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) ); + } + + return base.OnEquip( from ); + } + + public override void OnRemoved( object parent ) + { + if ( parent is Mobile ) + { + Mobile m = (Mobile)parent; + string modName = this.Serial.ToString(); + + m.RemoveStatMod( modName + "Str" ); + m.RemoveStatMod( modName + "Dex" ); + m.RemoveStatMod( modName + "Int" ); + + ((Mobile)parent).Delta( MobileDelta.Armor ); // Tell them armor rating has changed + m.CheckStatTimers(); + } + + base.OnRemoved( parent ); + } + + public virtual int OnHit( BaseWeapon weapon, int damageTaken ) + { + double HalfAr = ArmorRating / 2.0; + int Absorbed = (int)(HalfAr + HalfAr*Utility.RandomDouble()); + + damageTaken -= Absorbed; + if ( damageTaken < 0 ) + damageTaken = 0; + + if ( Absorbed < 2 ) + Absorbed = 2; + + if ( 25 > Utility.Random( 100 ) ) // 25% chance to lower durability + { + int wear; + + if ( weapon.Type == WeaponType.Bashing ) + wear = Absorbed / 2; + else + wear = Utility.Random( 2 ); + + if ( wear > 0 && m_MaxHitPoints > 0 ) + { + if ( m_HitPoints >= wear ) + { + HitPoints -= wear; + wear = 0; + } + else + { + wear -= HitPoints; + HitPoints = 0; + } + + if ( wear > 0 ) + { + if ( m_MaxHitPoints > wear ) + { + MaxHitPoints -= wear; + + if ( Parent is Mobile ) + ((Mobile)Parent).LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061121 ); // Your equipment is severely damaged. + } + else + { + Delete(); + } + } + } + } + + return damageTaken; + } + + private string GetNameString() + { + string name = this.Name; + + if ( name == null ) + name = String.Format( "#{0}", LabelNumber ); + + return name; + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get{ return base.Hue; } + set{ base.Hue = value; InvalidateProperties(); } + } + + public override bool AllowEquipedCast( Mobile from ) + { + if ( base.AllowEquipedCast( from ) ) + return true; + + return false; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Crafter != null ) + list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~ + + if ( m_Quality == ArmorQuality.Exceptional ) + list.Add( 1060636 ); // exceptional + + if ( m_StrBonus > 0 && m_StrBonus < 3 ) + list.Add( 1038027 ); // Great Strength + else if ( m_StrBonus > 2 && m_StrBonus < 5 ) + list.Add( 1038028 ); // Greater Strength + else if ( m_StrBonus > 4 ) + list.Add( 1038029 ); // Ultimate Strength + + if ( m_DexBonus > 0 && m_DexBonus < 3 ) + list.Add( 1038033 ); // Great Agility + else if ( m_DexBonus > 2 && m_DexBonus < 5 ) + list.Add( 1038034 ); // Greater Agility + else if ( m_DexBonus > 4 ) + list.Add( 1038035 ); // Ultimate Agility + + if ( m_IntBonus > 0 && m_IntBonus < 3 ) + list.Add( 1038030 ); // Great Intellect + else if ( m_IntBonus > 2 && m_IntBonus < 5 ) + list.Add( 1038031 ); // Greater Intellect + else if ( m_IntBonus > 4 ) + list.Add( 1038032 ); // Ultimate Intellect + + if ( m_Protection == ArmorProtectionLevel.Defense ) + list.Add( 1036375 ); // Defensive Protection + else if ( m_Protection == ArmorProtectionLevel.Guarding ) + list.Add( 1036376 ); // Guarded Protection + else if ( m_Protection == ArmorProtectionLevel.Hardening ) + list.Add( 1036377 ); // Hardened Protection + else if ( m_Protection == ArmorProtectionLevel.Fortification ) + list.Add( 1036378 ); // Fortified Protection + else if ( m_Protection == ArmorProtectionLevel.Invulnerability ) + list.Add( 1036379 ); // Invulnerable Protection + + if ( m_Durability == ArmorDurabilityLevel.Durable ) + list.Add( 1036365 ); // Durable Material + else if ( m_Durability == ArmorDurabilityLevel.Substantial ) + list.Add( 1036366 ); // Substantial Material + else if ( m_Durability == ArmorDurabilityLevel.Massive ) + list.Add( 1036367 ); // Massive Material + else if ( m_Durability == ArmorDurabilityLevel.Fortified ) + list.Add( 1036368 ); // Fortified Material + else if ( m_Durability == ArmorDurabilityLevel.Indestructible ) + list.Add( 1036369 ); // Indestructible Material + + if ( Server.Misc.Settings.DisplayInfo() ) + { + int prop; + + if ( (prop = (int)Math.Round(ArmorRatingScaled)) > 0 ) + list.Add( 1060408, prop.ToString() ); // armor ~1_val~% + + if ( (prop = GetDurabilityBonus()) > 0 ) + list.Add( 1060410, prop.ToString() ); // durability ~1_val~% + + if ( (prop = ComputeStatReq( StatType.Str )) > 0 ) + list.Add( 1061170, prop.ToString() ); // strength requirement ~1_val~ + + if ( m_HitPoints >= 0 && m_MaxHitPoints > 0 ) + list.Add( 1060639, "{0}\t{1}", m_HitPoints, m_MaxHitPoints ); // durability ~1_val~ / ~2_val~ + } + else + { + double durable = (double)m_HitPoints / (double)m_MaxHitPoints; + + if ( durable > 0.95 ){} + // DO NOT SHOW YET + else if ( durable > 0.75 ) + list.Add( 1036374 ); // Perfect Condition + else if ( durable > 0.50 ) + list.Add( 1036373 ); // Good Condition + else if ( durable > 0.25 ) + list.Add( 1036372 ); // Fair Condition + else if ( durable > 0.05 ) + list.Add( 1036371 ); // Poor Condition + else + list.Add( 1036370 ); // Horrible Condition + } + + if ( Magical > 0 && Uses > 0 ) + { + list.Add( 1062520, "\t#{0}", Magical ); + } + + if ( Uses > 0 && Server.Misc.Settings.DisplayInfo() ) + { + if ( Uses > 1 ) + list.Add( 1062516, "{0}", Uses ); + else + list.Add( 1062517, "{0}", Uses ); + } + else if ( Uses > 0 ) + { + double usage = (double)Uses / (double)UsesMax; + + if ( usage > 0.95 ) + list.Add( 1063269 ); // Fully Charged + else if ( usage > 0.75 ) + list.Add( 1063270 ); // Mostly Charged + else if ( usage > 0.50 ) + list.Add( 1063271 ); // Partially Charged + else if ( usage > 0.25 ) + list.Add( 1063272 ); // Somewhat Charged + else if ( usage > 0.05 ) + list.Add( 1063273 ); // Barely Charged + else + list.Add( 1063274 ); // Almost Drained + } + } + + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Quality = (ArmorQuality)quality; + + if ( makersMark ) + Crafter = from; + + Type resourceType = typeRes; + + if ( resourceType == null ) + resourceType = craftItem.Resources.GetAt( 0 ).ItemType; + + Resource = CraftResources.GetFromType( resourceType ); + PlayerConstructed = true; + + CraftContext context = craftSystem.GetContext( from ); + + if ( context != null && context.DoNotColor ) + Hue = 0; + + return quality; + } + + #endregion + } +} diff --git a/Scripts/Items/Armor/Bone/BoneArms.cs b/Scripts/Items/Armor/Bone/BoneArms.cs new file mode 100644 index 0000000..68a4ff6 --- /dev/null +++ b/Scripts/Items/Armor/Bone/BoneArms.cs @@ -0,0 +1,47 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x144e, 0x1453 )] + public class BoneArms : BaseArmor + { + public override int InitMinHits{ get{ return 25; } } + public override int InitMaxHits{ get{ return 30; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -2; } } + + public override int ArmorBase{ get{ return 30; } } + public override int RevertArmorBase{ get{ return 4; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + [Constructable] + public BoneArms() : base( 0x144E ) + { + Weight = 2.0; + } + + public BoneArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Bone/BoneChest.cs b/Scripts/Items/Armor/Bone/BoneChest.cs new file mode 100644 index 0000000..a23f7b6 --- /dev/null +++ b/Scripts/Items/Armor/Bone/BoneChest.cs @@ -0,0 +1,47 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x144f, 0x1454 )] + public class BoneChest : BaseArmor + { + public override int InitMinHits{ get{ return 25; } } + public override int InitMaxHits{ get{ return 30; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -6; } } + + public override int ArmorBase{ get{ return 30; } } + public override int RevertArmorBase{ get{ return 11; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + [Constructable] + public BoneChest() : base( 0x144F ) + { + Weight = 6.0; + } + + public BoneChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + + if ( Weight == 1.0 ) + Weight = 6.0; + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Bone/BoneGloves.cs b/Scripts/Items/Armor/Bone/BoneGloves.cs new file mode 100644 index 0000000..9ec164b --- /dev/null +++ b/Scripts/Items/Armor/Bone/BoneGloves.cs @@ -0,0 +1,47 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1450, 0x1455 )] + public class BoneGloves : BaseArmor + { + public override int InitMinHits{ get{ return 25; } } + public override int InitMaxHits{ get{ return 30; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -1; } } + + public override int ArmorBase{ get{ return 30; } } + public override int RevertArmorBase{ get{ return 2; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + [Constructable] + public BoneGloves() : base( 0x1450 ) + { + Weight = 2.0; + } + + public BoneGloves( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Bone/BoneHelm.cs b/Scripts/Items/Armor/Bone/BoneHelm.cs new file mode 100644 index 0000000..f878be3 --- /dev/null +++ b/Scripts/Items/Armor/Bone/BoneHelm.cs @@ -0,0 +1,43 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x1451, 0x1456 )] + public class BoneHelm : BaseArmor + { + public override int InitMinHits{ get{ return 25; } } + public override int InitMaxHits{ get{ return 30; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int ArmorBase{ get{ return 30; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public BoneHelm() : base( 0x1451 ) + { + Weight = 3.0; + } + + public BoneHelm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + + if ( Weight == 1.0 ) + Weight = 3.0; + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Bone/BoneLegs.cs b/Scripts/Items/Armor/Bone/BoneLegs.cs new file mode 100644 index 0000000..8a37764 --- /dev/null +++ b/Scripts/Items/Armor/Bone/BoneLegs.cs @@ -0,0 +1,44 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1452, 0x1457 )] + public class BoneLegs : BaseArmor + { + public override int InitMinHits{ get{ return 25; } } + public override int InitMaxHits{ get{ return 30; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -4; } } + + public override int ArmorBase{ get{ return 30; } } + public override int RevertArmorBase{ get{ return 7; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + [Constructable] + public BoneLegs() : base( 0x1452 ) + { + Weight = 3.0; + } + + public BoneLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Bone/OrcHelm.cs b/Scripts/Items/Armor/Bone/OrcHelm.cs new file mode 100644 index 0000000..95018f7 --- /dev/null +++ b/Scripts/Items/Armor/Bone/OrcHelm.cs @@ -0,0 +1,48 @@ +using System; +using Server; + +namespace Server.Items +{ + public class OrcHelm : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 50; } } + + public override int UOStrReq{ get{ return 10; } } + + public override int ArmorBase{ get{ return 20; } } + + public override double DefaultWeight { get { return 5; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.None; } } + + [Constructable] + public OrcHelm() : base( 0x1F0B ) + { + } + + public OrcHelm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if( version == 0 && Weight == 1 ) + { + Weight = 5; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Chain/ChainChest.cs b/Scripts/Items/Armor/Chain/ChainChest.cs new file mode 100644 index 0000000..0e2d1e9 --- /dev/null +++ b/Scripts/Items/Armor/Chain/ChainChest.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13bf, 0x13c4 )] + public class ChainChest : BaseArmor + { + public override int InitMinHits{ get{ return 45; } } + public override int InitMaxHits{ get{ return 60; } } + + public override int UOStrReq{ get{ return 20; } } + + public override int UODexBonus{ get{ return -5; } } + + public override int ArmorBase{ get{ return 28; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Chainmail; } } + + [Constructable] + public ChainChest() : base( 0x13BF ) + { + Weight = 7.0; + } + + public ChainChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Chain/ChainCoif.cs b/Scripts/Items/Armor/Chain/ChainCoif.cs new file mode 100644 index 0000000..08048e1 --- /dev/null +++ b/Scripts/Items/Armor/Chain/ChainCoif.cs @@ -0,0 +1,40 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x13BB, 0x13C0 )] + public class ChainCoif : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 60; } } + + public override int UOStrReq{ get{ return 20; } } + + public override int ArmorBase{ get{ return 28; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Chainmail; } } + + [Constructable] + public ChainCoif() : base( 0x13BB ) + { + Weight = 1.0; + } + + public ChainCoif( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Chain/ChainLegs.cs b/Scripts/Items/Armor/Chain/ChainLegs.cs new file mode 100644 index 0000000..3e0420d --- /dev/null +++ b/Scripts/Items/Armor/Chain/ChainLegs.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13be, 0x13c3 )] + public class ChainLegs : BaseArmor + { + public override int InitMinHits{ get{ return 45; } } + public override int InitMaxHits{ get{ return 60; } } + + public override int UOStrReq{ get{ return 20; } } + + public override int UODexBonus{ get{ return -3; } } + + public override int ArmorBase{ get{ return 28; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Chainmail; } } + + [Constructable] + public ChainLegs() : base( 0x13BE ) + { + Weight = 7.0; + } + + public ChainLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/DaemonBone/DaemonArms.cs b/Scripts/Items/Armor/DaemonBone/DaemonArms.cs new file mode 100644 index 0000000..66607d5 --- /dev/null +++ b/Scripts/Items/Armor/DaemonBone/DaemonArms.cs @@ -0,0 +1,48 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x144e, 0x1453 )] + public class DaemonArms : BaseArmor + { + public override int InitMinHits{ get{ return 255; } } + public override int InitMaxHits{ get{ return 255; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -2; } } + + public override int ArmorBase{ get{ return 46; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041371; } } // daemon bone arms + + [Constructable] + public DaemonArms() : base( 0x144E ) + { + Weight = 2.0; + Hue = 0x648; + } + + public DaemonArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/DaemonBone/DaemonChest.cs b/Scripts/Items/Armor/DaemonBone/DaemonChest.cs new file mode 100644 index 0000000..f22c64a --- /dev/null +++ b/Scripts/Items/Armor/DaemonBone/DaemonChest.cs @@ -0,0 +1,48 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x144f, 0x1454 )] + public class DaemonChest : BaseArmor + { + public override int InitMinHits{ get{ return 255; } } + public override int InitMaxHits{ get{ return 255; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -6; } } + + public override int ArmorBase{ get{ return 46; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041372; } } // daemon bone armor + + [Constructable] + public DaemonChest() : base( 0x144F ) + { + Weight = 6.0; + Hue = 0x648; + } + + public DaemonChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/DaemonBone/DaemonGloves.cs b/Scripts/Items/Armor/DaemonBone/DaemonGloves.cs new file mode 100644 index 0000000..8c94c2a --- /dev/null +++ b/Scripts/Items/Armor/DaemonBone/DaemonGloves.cs @@ -0,0 +1,48 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1450, 0x1455 )] + public class DaemonGloves : BaseArmor + { + public override int InitMinHits{ get{ return 255; } } + public override int InitMaxHits{ get{ return 255; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -1; } } + + public override int ArmorBase{ get{ return 46; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041373; } } // daemon bone gloves + + [Constructable] + public DaemonGloves() : base( 0x1450 ) + { + Weight = 2.0; + Hue = 0x648; + } + + public DaemonGloves( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/DaemonBone/DaemonHelm.cs b/Scripts/Items/Armor/DaemonBone/DaemonHelm.cs new file mode 100644 index 0000000..11f4b21 --- /dev/null +++ b/Scripts/Items/Armor/DaemonBone/DaemonHelm.cs @@ -0,0 +1,46 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x1451, 0x1456 )] + public class DaemonHelm : BaseArmor + { + public override int InitMinHits{ get{ return 255; } } + public override int InitMaxHits{ get{ return 255; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int ArmorBase{ get{ return 46; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041374; } } // daemon bone helmet + + [Constructable] + public DaemonHelm() : base( 0x1451 ) + { + Hue = 0x648; + Weight = 3.0; + } + + public DaemonHelm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/DaemonBone/DaemonLegs.cs b/Scripts/Items/Armor/DaemonBone/DaemonLegs.cs new file mode 100644 index 0000000..e807706 --- /dev/null +++ b/Scripts/Items/Armor/DaemonBone/DaemonLegs.cs @@ -0,0 +1,46 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1452, 0x1457 )] + public class DaemonLegs : BaseArmor + { + public override int InitMinHits{ get{ return 255; } } + public override int InitMaxHits{ get{ return 255; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -4; } } + + public override int ArmorBase{ get{ return 46; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Bone; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041375; } } // daemon bone leggings + + [Constructable] + public DaemonLegs() : base( 0x1452 ) + { + Weight = 3.0; + Hue = 0x648; + } + + public DaemonLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/FemaleLeatherChest.cs b/Scripts/Items/Armor/Leather/FemaleLeatherChest.cs new file mode 100644 index 0000000..3ad539a --- /dev/null +++ b/Scripts/Items/Armor/Leather/FemaleLeatherChest.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1c06, 0x1c07 )] + public class FemaleLeatherChest : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 15; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + public override bool AllowMaleWearer{ get{ return false; } } + + [Constructable] + public FemaleLeatherChest() : base( 0x1C06 ) + { + Weight = 1.0; + } + + public FemaleLeatherChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherArms.cs b/Scripts/Items/Armor/Leather/LeatherArms.cs new file mode 100644 index 0000000..b174a4c --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherArms.cs @@ -0,0 +1,46 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13cd, 0x13c5 )] + public class LeatherArms : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 15; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + [Constructable] + public LeatherArms() : base( 0x13CD ) + { + Weight = 2.0; + } + + public LeatherArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherBustierArms.cs b/Scripts/Items/Armor/Leather/LeatherBustierArms.cs new file mode 100644 index 0000000..9758d96 --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherBustierArms.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1c0a, 0x1c0b )] + public class LeatherBustierArms : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 15; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + public override bool AllowMaleWearer{ get{ return false; } } + + [Constructable] + public LeatherBustierArms() : base( 0x1C0A ) + { + Weight = 1.0; + } + + public LeatherBustierArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherCap.cs b/Scripts/Items/Armor/Leather/LeatherCap.cs new file mode 100644 index 0000000..63fa65d --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherCap.cs @@ -0,0 +1,46 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x1db9, 0x1dba )] + public class LeatherCap : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 15; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + [Constructable] + public LeatherCap() : base( 0x1DB9 ) + { + Weight = 2.0; + } + + public LeatherCap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherChest.cs b/Scripts/Items/Armor/Leather/LeatherChest.cs new file mode 100644 index 0000000..1ac220b --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherChest.cs @@ -0,0 +1,46 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13cc, 0x13d3 )] + public class LeatherChest : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 15; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + [Constructable] + public LeatherChest() : base( 0x13CC ) + { + Weight = 6.0; + } + + public LeatherChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 6.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherGloves.cs b/Scripts/Items/Armor/Leather/LeatherGloves.cs new file mode 100644 index 0000000..9d8f269 --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherGloves.cs @@ -0,0 +1,132 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [Flipable] + public class LeatherGloves : BaseArmor, IArcaneEquip + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 10; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + [Constructable] + public LeatherGloves() : base( 0x13C6 ) + { + Weight = 1.0; + } + + public LeatherGloves( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + if ( IsArcane ) + { + writer.Write( true ); + writer.Write( (int) m_CurArcaneCharges ); + writer.Write( (int) m_MaxArcaneCharges ); + } + else + { + writer.Write( false ); + } + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + if ( reader.ReadBool() ) + { + m_CurArcaneCharges = reader.ReadInt(); + m_MaxArcaneCharges = reader.ReadInt(); + + if ( Hue == 2118 ) + Hue = ArcaneGem.DefaultArcaneHue; + } + + break; + } + } + } + + #region Arcane Impl + private int m_MaxArcaneCharges, m_CurArcaneCharges; + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxArcaneCharges + { + get{ return m_MaxArcaneCharges; } + set{ m_MaxArcaneCharges = value; InvalidateProperties(); Update(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CurArcaneCharges + { + get{ return m_CurArcaneCharges; } + set{ m_CurArcaneCharges = value; InvalidateProperties(); Update(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsArcane + { + get{ return ( m_MaxArcaneCharges > 0 && m_CurArcaneCharges >= 0 ); } + } + + public void Update() + { + if ( IsArcane ) + ItemID = 0x26B0; + else if ( ItemID == 0x26B0 ) + ItemID = 0x13C6; + + if ( IsArcane && CurArcaneCharges == 0 ) + Hue = 0; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( IsArcane ) + list.Add( 1061837, "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges ); // arcane charges: ~1_val~ / ~2_val~ + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( IsArcane ) + LabelTo( from, 1061837, String.Format( "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges ) ); + } + + public void Flip() + { + if ( ItemID == 0x13C6 ) + ItemID = 0x13CE; + else if ( ItemID == 0x13CE ) + ItemID = 0x13C6; + } + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherGorget.cs b/Scripts/Items/Armor/Leather/LeatherGorget.cs new file mode 100644 index 0000000..ef79676 --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherGorget.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + public class LeatherGorget : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 10; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + [Constructable] + public LeatherGorget() : base( 0x13C7 ) + { + Weight = 1.0; + } + + public LeatherGorget( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherLegs.cs b/Scripts/Items/Armor/Leather/LeatherLegs.cs new file mode 100644 index 0000000..1fce8e0 --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherLegs.cs @@ -0,0 +1,43 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13cb, 0x13d2 )] + public class LeatherLegs : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 10; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + [Constructable] + public LeatherLegs() : base( 0x13CB ) + { + Weight = 4.0; + } + + public LeatherLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherShorts.cs b/Scripts/Items/Armor/Leather/LeatherShorts.cs new file mode 100644 index 0000000..cd674ad --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherShorts.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1c00, 0x1c01 )] + public class LeatherShorts : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 10; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + public override bool AllowMaleWearer{ get{ return false; } } + + [Constructable] + public LeatherShorts() : base( 0x1C00 ) + { + Weight = 3.0; + } + + public LeatherShorts( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Leather/LeatherSkirt.cs b/Scripts/Items/Armor/Leather/LeatherSkirt.cs new file mode 100644 index 0000000..e38d55c --- /dev/null +++ b/Scripts/Items/Armor/Leather/LeatherSkirt.cs @@ -0,0 +1,48 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1c08, 0x1c09 )] + public class LeatherSkirt : BaseArmor + { + public override int InitMinHits{ get{ return 30; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int UOStrReq{ get{ return 10; } } + + public override int ArmorBase{ get{ return 13; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Leather; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.All; } } + + public override bool AllowMaleWearer{ get{ return false; } } + + [Constructable] + public LeatherSkirt() : base( 0x1C08 ) + { + Weight = 1.0; + } + + public LeatherSkirt( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + + if ( Weight == 3.0 ) + Weight = 1.0; + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Metal/Bascinet.cs b/Scripts/Items/Armor/Metal/Bascinet.cs new file mode 100644 index 0000000..d51c755 --- /dev/null +++ b/Scripts/Items/Armor/Metal/Bascinet.cs @@ -0,0 +1,42 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Bascinet : BaseArmor + { + public override int InitMinHits{ get{ return 40; } } + public override int InitMaxHits{ get{ return 50; } } + + public override int UOStrReq{ get{ return 10; } } + + public override int ArmorBase{ get{ return 18; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public Bascinet() : base( 0x140C ) + { + Weight = 5.0; + } + + public Bascinet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Metal/CloseHelm.cs b/Scripts/Items/Armor/Metal/CloseHelm.cs new file mode 100644 index 0000000..cd69a67 --- /dev/null +++ b/Scripts/Items/Armor/Metal/CloseHelm.cs @@ -0,0 +1,42 @@ +using System; +using Server; + +namespace Server.Items +{ + public class CloseHelm : BaseArmor + { + public override int InitMinHits{ get{ return 45; } } + public override int InitMaxHits{ get{ return 60; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int ArmorBase{ get{ return 30; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public CloseHelm() : base( 0x1408 ) + { + Weight = 5.0; + } + + public CloseHelm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Metal/Helmet.cs b/Scripts/Items/Armor/Metal/Helmet.cs new file mode 100644 index 0000000..5106937 --- /dev/null +++ b/Scripts/Items/Armor/Metal/Helmet.cs @@ -0,0 +1,42 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Helmet : BaseArmor + { + public override int InitMinHits{ get{ return 45; } } + public override int InitMaxHits{ get{ return 60; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int ArmorBase{ get{ return 30; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public Helmet() : base( 0x140A ) + { + Weight = 5.0; + } + + public Helmet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Metal/NorseHelm.cs b/Scripts/Items/Armor/Metal/NorseHelm.cs new file mode 100644 index 0000000..14e296b --- /dev/null +++ b/Scripts/Items/Armor/Metal/NorseHelm.cs @@ -0,0 +1,42 @@ +using System; +using Server; + +namespace Server.Items +{ + public class NorseHelm : BaseArmor + { + public override int InitMinHits{ get{ return 45; } } + public override int InitMaxHits{ get{ return 60; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int ArmorBase{ get{ return 30; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public NorseHelm() : base( 0x140E ) + { + Weight = 5.0; + } + + public NorseHelm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Plate/FemalePlateChest.cs b/Scripts/Items/Armor/Plate/FemalePlateChest.cs new file mode 100644 index 0000000..3d0b9d2 --- /dev/null +++ b/Scripts/Items/Armor/Plate/FemalePlateChest.cs @@ -0,0 +1,47 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1c04, 0x1c05 )] + public class FemalePlateChest : BaseArmor + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int UOStrReq{ get{ return 45; } } + + public override int UODexBonus{ get{ return -5; } } + + public override bool AllowMaleWearer{ get{ return false; } } + + public override int ArmorBase{ get{ return 30; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public FemalePlateChest() : base( 0x1C04 ) + { + Weight = 4.0; + } + + public FemalePlateChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 4.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Plate/PlateArms.cs b/Scripts/Items/Armor/Plate/PlateArms.cs new file mode 100644 index 0000000..2b535aa --- /dev/null +++ b/Scripts/Items/Armor/Plate/PlateArms.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1410, 0x1417 )] + public class PlateArms : BaseArmor + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -2; } } + + public override int ArmorBase{ get{ return 40; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public PlateArms() : base( 0x1410 ) + { + Weight = 5.0; + } + + public PlateArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Plate/PlateChest.cs b/Scripts/Items/Armor/Plate/PlateChest.cs new file mode 100644 index 0000000..46a78e5 --- /dev/null +++ b/Scripts/Items/Armor/Plate/PlateChest.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1415, 0x1416 )] + public class PlateChest : BaseArmor + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int UOStrReq{ get{ return 60; } } + + public override int UODexBonus{ get{ return -8; } } + + public override int ArmorBase{ get{ return 40; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public PlateChest() : base( 0x1415 ) + { + Weight = 10.0; + } + + public PlateChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 10.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Plate/PlateGloves.cs b/Scripts/Items/Armor/Plate/PlateGloves.cs new file mode 100644 index 0000000..3c7a609 --- /dev/null +++ b/Scripts/Items/Armor/Plate/PlateGloves.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1414, 0x1418 )] + public class PlateGloves : BaseArmor + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int UOStrReq{ get{ return 30; } } + + public override int UODexBonus{ get{ return -2; } } + + public override int ArmorBase{ get{ return 40; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public PlateGloves() : base( 0x1414 ) + { + Weight = 2.0; + } + + public PlateGloves( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Plate/PlateGorget.cs b/Scripts/Items/Armor/Plate/PlateGorget.cs new file mode 100644 index 0000000..76cf25a --- /dev/null +++ b/Scripts/Items/Armor/Plate/PlateGorget.cs @@ -0,0 +1,41 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + public class PlateGorget : BaseArmor + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int UOStrReq{ get{ return 30; } } + + public override int UODexBonus{ get{ return -1; } } + + public override int ArmorBase{ get{ return 40; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public PlateGorget() : base( 0x1413 ) + { + Weight = 2.0; + } + + public PlateGorget( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Plate/PlateHelm.cs b/Scripts/Items/Armor/Plate/PlateHelm.cs new file mode 100644 index 0000000..0919256 --- /dev/null +++ b/Scripts/Items/Armor/Plate/PlateHelm.cs @@ -0,0 +1,44 @@ +using System; +using Server; + +namespace Server.Items +{ + public class PlateHelm : BaseArmor + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int UOStrReq{ get{ return 40; } } + + public override int UODexBonus{ get{ return -1; } } + + public override int ArmorBase{ get{ return 40; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public PlateHelm() : base( 0x1412 ) + { + Weight = 5.0; + } + + public PlateHelm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Plate/PlateLegs.cs b/Scripts/Items/Armor/Plate/PlateLegs.cs new file mode 100644 index 0000000..893ff9b --- /dev/null +++ b/Scripts/Items/Armor/Plate/PlateLegs.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1411, 0x141a )] + public class PlateLegs : BaseArmor + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int UOStrReq{ get{ return 60; } } + + public override int UODexBonus{ get{ return -6; } } + + public override int ArmorBase{ get{ return 40; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + [Constructable] + public PlateLegs() : base( 0x1411 ) + { + Weight = 7.0; + } + + public PlateLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ranger/RangerArms.cs b/Scripts/Items/Armor/Ranger/RangerArms.cs new file mode 100644 index 0000000..83d0cfc --- /dev/null +++ b/Scripts/Items/Armor/Ranger/RangerArms.cs @@ -0,0 +1,47 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13dc, 0x13d4 )] + public class RangerArms : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 25; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041493; } } // studded sleeves, ranger armor + + [Constructable] + public RangerArms() : base( 0x13DC ) + { + Weight = 4.0; + Hue = 0x59C; + } + + public RangerArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 4.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ranger/RangerChest.cs b/Scripts/Items/Armor/Ranger/RangerChest.cs new file mode 100644 index 0000000..5a3dbe5 --- /dev/null +++ b/Scripts/Items/Armor/Ranger/RangerChest.cs @@ -0,0 +1,47 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13db, 0x13e2 )] + public class RangerChest : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 35; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041497; } } // studded tunic, ranger armor + + [Constructable] + public RangerChest() : base( 0x13DB ) + { + Weight = 8.0; + Hue = 0x59C; + } + + public RangerChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 8.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ranger/RangerGloves.cs b/Scripts/Items/Armor/Ranger/RangerGloves.cs new file mode 100644 index 0000000..b19f753 --- /dev/null +++ b/Scripts/Items/Armor/Ranger/RangerGloves.cs @@ -0,0 +1,44 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13d5, 0x13dd )] + public class RangerGloves : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 25; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041494; } } // studded gloves, ranger armor + + [Constructable] + public RangerGloves() : base( 0x13D5 ) + { + Weight = 1.0; + Hue = 0x59C; + } + + public RangerGloves( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ranger/RangerGorget.cs b/Scripts/Items/Armor/Ranger/RangerGorget.cs new file mode 100644 index 0000000..fc674cd --- /dev/null +++ b/Scripts/Items/Armor/Ranger/RangerGorget.cs @@ -0,0 +1,43 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + public class RangerGorget : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 25; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041495; } } // studded gorget, ranger armor + + [Constructable] + public RangerGorget() : base( 0x13D6 ) + { + Weight = 1.0; + Hue = 0x59C; + } + + public RangerGorget( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ranger/RangerLegs.cs b/Scripts/Items/Armor/Ranger/RangerLegs.cs new file mode 100644 index 0000000..bd47334 --- /dev/null +++ b/Scripts/Items/Armor/Ranger/RangerLegs.cs @@ -0,0 +1,47 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13da, 0x13e1 )] + public class RangerLegs : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 35; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override int LabelNumber{ get{ return 1041496; } } // studded leggings, ranger armor + + [Constructable] + public RangerLegs() : base( 0x13DA ) + { + Weight = 3.0; + Hue = 0x59C; + } + + public RangerLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ring/RingmailArms.cs b/Scripts/Items/Armor/Ring/RingmailArms.cs new file mode 100644 index 0000000..9b35837 --- /dev/null +++ b/Scripts/Items/Armor/Ring/RingmailArms.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13ee, 0x13ef )] + public class RingmailArms : BaseArmor + { + public override int InitMinHits{ get{ return 40; } } + public override int InitMaxHits{ get{ return 50; } } + + public override int UOStrReq{ get{ return 20; } } + + public override int UODexBonus{ get{ return -1; } } + + public override int ArmorBase{ get{ return 22; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Ringmail; } } + + [Constructable] + public RingmailArms() : base( 0x13EE ) + { + Weight = 15.0; + } + + public RingmailArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 15.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ring/RingmailChest.cs b/Scripts/Items/Armor/Ring/RingmailChest.cs new file mode 100644 index 0000000..84e023a --- /dev/null +++ b/Scripts/Items/Armor/Ring/RingmailChest.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13ec, 0x13ed )] + public class RingmailChest : BaseArmor + { + public override int InitMinHits{ get{ return 40; } } + public override int InitMaxHits{ get{ return 50; } } + + public override int UOStrReq{ get{ return 20; } } + + public override int UODexBonus{ get{ return -2; } } + + public override int ArmorBase{ get{ return 22; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Ringmail; } } + + [Constructable] + public RingmailChest() : base( 0x13EC ) + { + Weight = 15.0; + } + + public RingmailChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 15.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ring/RingmailGloves.cs b/Scripts/Items/Armor/Ring/RingmailGloves.cs new file mode 100644 index 0000000..e719a7a --- /dev/null +++ b/Scripts/Items/Armor/Ring/RingmailGloves.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13eb, 0x13f2 )] + public class RingmailGloves : BaseArmor + { + public override int InitMinHits{ get{ return 40; } } + public override int InitMaxHits{ get{ return 50; } } + + public override int UOStrReq{ get{ return 20; } } + + public override int UODexBonus{ get{ return -1; } } + + public override int ArmorBase{ get{ return 22; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Ringmail; } } + + [Constructable] + public RingmailGloves() : base( 0x13EB ) + { + Weight = 2.0; + } + + public RingmailGloves( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Ring/RingmailLegs.cs b/Scripts/Items/Armor/Ring/RingmailLegs.cs new file mode 100644 index 0000000..dedb0b5 --- /dev/null +++ b/Scripts/Items/Armor/Ring/RingmailLegs.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13f0, 0x13f1 )] + public class RingmailLegs : BaseArmor + { + public override int InitMinHits{ get{ return 40; } } + public override int InitMaxHits{ get{ return 50; } } + + public override int UOStrReq{ get{ return 20; } } + + public override int UODexBonus{ get{ return -1; } } + + public override int ArmorBase{ get{ return 22; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Ringmail; } } + + [Constructable] + public RingmailLegs() : base( 0x13F0 ) + { + Weight = 15.0; + } + + public RingmailLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Studded/FemaleStuddedChest.cs b/Scripts/Items/Armor/Studded/FemaleStuddedChest.cs new file mode 100644 index 0000000..8307fad --- /dev/null +++ b/Scripts/Items/Armor/Studded/FemaleStuddedChest.cs @@ -0,0 +1,48 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1c02, 0x1c03 )] + public class FemaleStuddedChest : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 35; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.Half; } } + + public override bool AllowMaleWearer{ get{ return false; } } + + [Constructable] + public FemaleStuddedChest() : base( 0x1C02 ) + { + Weight = 6.0; + } + + public FemaleStuddedChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 6.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Studded/StuddedArms.cs b/Scripts/Items/Armor/Studded/StuddedArms.cs new file mode 100644 index 0000000..509d49c --- /dev/null +++ b/Scripts/Items/Armor/Studded/StuddedArms.cs @@ -0,0 +1,46 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13dc, 0x13d4 )] + public class StuddedArms : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 25; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.Half; } } + + [Constructable] + public StuddedArms() : base( 0x13DC ) + { + Weight = 4.0; + } + + public StuddedArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 4.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Studded/StuddedBustierArms.cs b/Scripts/Items/Armor/Studded/StuddedBustierArms.cs new file mode 100644 index 0000000..5cbeab6 --- /dev/null +++ b/Scripts/Items/Armor/Studded/StuddedBustierArms.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1c0c, 0x1c0d )] + public class StuddedBustierArms : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 35; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.Half; } } + + public override bool AllowMaleWearer{ get{ return false; } } + + [Constructable] + public StuddedBustierArms() : base( 0x1C0C ) + { + Weight = 1.0; + } + + public StuddedBustierArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Studded/StuddedChest.cs b/Scripts/Items/Armor/Studded/StuddedChest.cs new file mode 100644 index 0000000..7497a8a --- /dev/null +++ b/Scripts/Items/Armor/Studded/StuddedChest.cs @@ -0,0 +1,46 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13db, 0x13e2 )] + public class StuddedChest : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 35; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.Half; } } + + [Constructable] + public StuddedChest() : base( 0x13DB ) + { + Weight = 8.0; + } + + public StuddedChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 8.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Studded/StuddedGloves.cs b/Scripts/Items/Armor/Studded/StuddedGloves.cs new file mode 100644 index 0000000..0254f32 --- /dev/null +++ b/Scripts/Items/Armor/Studded/StuddedGloves.cs @@ -0,0 +1,46 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13d5, 0x13dd )] + public class StuddedGloves : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 25; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.Half; } } + + [Constructable] + public StuddedGloves() : base( 0x13D5 ) + { + Weight = 1.0; + } + + public StuddedGloves( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Studded/StuddedGorget.cs b/Scripts/Items/Armor/Studded/StuddedGorget.cs new file mode 100644 index 0000000..a7f5aac --- /dev/null +++ b/Scripts/Items/Armor/Studded/StuddedGorget.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + public class StuddedGorget : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 25; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.Half; } } + + [Constructable] + public StuddedGorget() : base( 0x13D6 ) + { + Weight = 1.0; + } + + public StuddedGorget( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Armor/Studded/StuddedLegs.cs b/Scripts/Items/Armor/Studded/StuddedLegs.cs new file mode 100644 index 0000000..68b9dd9 --- /dev/null +++ b/Scripts/Items/Armor/Studded/StuddedLegs.cs @@ -0,0 +1,46 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13da, 0x13e1 )] + public class StuddedLegs : BaseArmor + { + public override int InitMinHits{ get{ return 35; } } + public override int InitMaxHits{ get{ return 45; } } + + public override int UOStrReq{ get{ return 35; } } + + public override int ArmorBase{ get{ return 16; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Studded; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + public override ArmorMeditationAllowance DefMedAllowance{ get{ return ArmorMeditationAllowance.Half; } } + + [Constructable] + public StuddedLegs() : base( 0x13DA ) + { + Weight = 5.0; + } + + public StuddedLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Body Parts/BonePile.cs b/Scripts/Items/Body Parts/BonePile.cs new file mode 100644 index 0000000..63b6076 --- /dev/null +++ b/Scripts/Items/Body Parts/BonePile.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0x1B09, 0x1B10 )] + public class BonePile : Item, IScissorable + { + [Constructable] + public BonePile( ) : base( 0x1B09 + Utility.Random( 8 ) ) + { + Stackable = false; + Weight = 10.0; + } + + public BonePile( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool Scissor( Mobile from, Scissors scissors ) + { + if ( Deleted || !from.CanSee( this ) ) + return false; + + base.ScissorHelper( from, new Bone(), Utility.RandomMinMax( 10, 15 ) ); + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Body Parts/Head.cs b/Scripts/Items/Body Parts/Head.cs new file mode 100644 index 0000000..d79875a --- /dev/null +++ b/Scripts/Items/Body Parts/Head.cs @@ -0,0 +1,128 @@ +using System; +using Server; + +namespace Server.Items +{ + public enum HeadType + { + Regular, + Duel, + Tournament + } + + public class Head : Item + { + private string m_PlayerName; + private HeadType m_HeadType; + + [CommandProperty( AccessLevel.GameMaster )] + public string PlayerName + { + get { return m_PlayerName; } + set { m_PlayerName = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public HeadType HeadType + { + get { return m_HeadType; } + set { m_HeadType = value; } + } + + public override string DefaultName + { + get + { + if ( m_PlayerName == null ) + return base.DefaultName; + + switch ( m_HeadType ) + { + default: + return String.Format( "the head of {0}", m_PlayerName ); + + case HeadType.Duel: + return String.Format( "the head of {0}, taken in a duel", m_PlayerName ); + + case HeadType.Tournament: + return String.Format( "the head of {0}, taken in a tournament", m_PlayerName ); + } + } + } + + [Constructable] + public Head() + : this( null ) + { + } + + [Constructable] + public Head( string playerName ) + : this( HeadType.Regular, playerName ) + { + } + + [Constructable] + public Head( HeadType headType, string playerName ) + : base( 0x1DA0 ) + { + m_HeadType = headType; + m_PlayerName = playerName; + } + + public Head( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (string) m_PlayerName ); + writer.WriteEncodedInt( (int) m_HeadType ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + m_PlayerName = reader.ReadString(); + m_HeadType = (HeadType) reader.ReadEncodedInt(); + break; + + case 0: + string format = this.Name; + + if ( format != null ) + { + if ( format.StartsWith( "the head of " ) ) + format = format.Substring( "the head of ".Length ); + + if ( format.EndsWith( ", taken in a duel" ) ) + { + format = format.Substring( 0, format.Length - ", taken in a duel".Length ); + m_HeadType = HeadType.Duel; + } + else if ( format.EndsWith( ", taken in a tournament" ) ) + { + format = format.Substring( 0, format.Length - ", taken in a tournament".Length ); + m_HeadType = HeadType.Tournament; + } + } + + m_PlayerName = format; + this.Name = null; + + break; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Body Parts/LeftArm.cs b/Scripts/Items/Body Parts/LeftArm.cs new file mode 100644 index 0000000..873bfda --- /dev/null +++ b/Scripts/Items/Body Parts/LeftArm.cs @@ -0,0 +1,31 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LeftArm : Item + { + [Constructable] + public LeftArm() : base( 0x1DA1 ) + { + } + + public LeftArm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Body Parts/LeftLeg.cs b/Scripts/Items/Body Parts/LeftLeg.cs new file mode 100644 index 0000000..06d33b4 --- /dev/null +++ b/Scripts/Items/Body Parts/LeftLeg.cs @@ -0,0 +1,31 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LeftLeg : Item + { + [Constructable] + public LeftLeg() : base( 0x1DA3 ) + { + } + + public LeftLeg( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Body Parts/RibCage.cs b/Scripts/Items/Body Parts/RibCage.cs new file mode 100644 index 0000000..af86afb --- /dev/null +++ b/Scripts/Items/Body Parts/RibCage.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0x1B17, 0x1B18 )] + public class RibCage : Item, IScissorable + { + [Constructable] + public RibCage() : base( 0x1B17 + Utility.Random( 2 ) ) + { + Stackable = false; + Weight = 5.0; + } + + public RibCage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool Scissor( Mobile from, Scissors scissors ) + { + if ( Deleted || !from.CanSee( this ) ) + return false; + + base.ScissorHelper( from, new Bone(), Utility.RandomMinMax( 3, 5 ) ); + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Body Parts/RightArm.cs b/Scripts/Items/Body Parts/RightArm.cs new file mode 100644 index 0000000..3d07782 --- /dev/null +++ b/Scripts/Items/Body Parts/RightArm.cs @@ -0,0 +1,31 @@ +using System; +using Server; + +namespace Server.Items +{ + public class RightArm : Item + { + [Constructable] + public RightArm() : base( 0x1DA2 ) + { + } + + public RightArm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Body Parts/RightLeg.cs b/Scripts/Items/Body Parts/RightLeg.cs new file mode 100644 index 0000000..7de41e9 --- /dev/null +++ b/Scripts/Items/Body Parts/RightLeg.cs @@ -0,0 +1,31 @@ +using System; +using Server; + +namespace Server.Items +{ + public class RightLeg : Item + { + [Constructable] + public RightLeg() : base( 0x1DA4 ) + { + } + + public RightLeg( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Body Parts/Torso.cs b/Scripts/Items/Body Parts/Torso.cs new file mode 100644 index 0000000..7ff9c73 --- /dev/null +++ b/Scripts/Items/Body Parts/Torso.cs @@ -0,0 +1,32 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Torso : Item + { + [Constructable] + public Torso() : base( 0x1D9F ) + { + Weight = 2.0; + } + + public Torso( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Books/BaseBook.cs b/Scripts/Items/Books/BaseBook.cs new file mode 100644 index 0000000..8963d40 --- /dev/null +++ b/Scripts/Items/Books/BaseBook.cs @@ -0,0 +1,510 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Server; +using Server.ContextMenus; +using Server.Network; +using Server.Gumps; +using Server.Multis; + +namespace Server.Items +{ + public class BookPageInfo + { + private string[] m_Lines; + + public string[] Lines + { + get + { + return m_Lines; + } + set + { + m_Lines = value; + } + } + + public BookPageInfo() + { + m_Lines = new string[0]; + } + + public BookPageInfo( params string[] lines ) + { + m_Lines = lines; + } + + public BookPageInfo( GenericReader reader ) + { + int length = reader.ReadInt(); + + m_Lines = new string[length]; + + for ( int i = 0; i < m_Lines.Length; ++i ) + m_Lines[i] = Utility.Intern( reader.ReadString() ); + } + + public void Serialize( GenericWriter writer ) + { + writer.Write( m_Lines.Length ); + + for ( int i = 0; i < m_Lines.Length; ++i ) + writer.Write( m_Lines[i] ); + } + } + + public class BaseBook : Item, ISecurable + { + private string m_Title; + private string m_Author; + private BookPageInfo[] m_Pages; + private bool m_Writable; + private SecureLevel m_SecureLevel; + + [CommandProperty( AccessLevel.GameMaster )] + public string Title + { + get { return m_Title; } + set { m_Title = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Author + { + get { return m_Author; } + set { m_Author = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Writable + { + get { return m_Writable; } + set { m_Writable = value; } + } + + [CommandProperty(AccessLevel.GameMaster)] + public int PagesCount + { + get { return m_Pages.Length; } + } + + public BookPageInfo[] Pages + { + get { return m_Pages; } + } + + [Constructable] + public BaseBook( int itemID ) : this( itemID, 20, true ) + { + } + + [Constructable] + public BaseBook( int itemID, int pageCount, bool writable ) : this( itemID, null, null, pageCount, writable ) + { + } + + [Constructable] + public BaseBook( int itemID, string title, string author, int pageCount, bool writable ) : base( itemID ) + { + Name = "book"; + + m_Title = title; + m_Author = author; + m_Writable = writable; + + BookContent content = this.DefaultContent; + + if ( content == null ) + { + m_Pages = new BookPageInfo[pageCount]; + + for ( int i = 0; i < m_Pages.Length; ++i ) + m_Pages[i] = new BookPageInfo(); + } + else + { + m_Pages = content.Copy(); + } + } + + // Intended for defined books only + public BaseBook( int itemID, bool writable ) : base( itemID ) + { + m_Writable = writable; + + BookContent content = this.DefaultContent; + + if ( content == null ) + { + m_Pages = new BookPageInfo[0]; + } + else + { + m_Title = content.Title; + m_Author = content.Author; + m_Pages = content.Copy(); + } + } + + public virtual BookContent DefaultContent{ get{ return null; } } + + public BaseBook( Serial serial ) : base( serial ) + { + } + + [Flags] + private enum SaveFlags + { + None = 0x00, + Title = 0x01, + Author = 0x02, + Writable = 0x04, + Content = 0x08 + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + SetSecureLevelEntry.AddTo( from, this, list ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + BookContent content = this.DefaultContent; + + SaveFlags flags = SaveFlags.None; + + if ( m_Title != ( content == null ? null : content.Title ) ) + flags |= SaveFlags.Title; + + if ( m_Author != ( content == null ? null : content.Author ) ) + flags |= SaveFlags.Author; + + if ( m_Writable ) + flags |= SaveFlags.Writable; + + if ( content == null || !content.IsMatch( m_Pages ) ) + flags |= SaveFlags.Content; + + + + writer.Write( (int) 4 ); // version + + writer.Write( (int)m_SecureLevel ); + + writer.Write( (byte) flags ); + + if ( (flags & SaveFlags.Title) != 0 ) + writer.Write( m_Title ); + + if ( (flags & SaveFlags.Author) != 0 ) + writer.Write( m_Author ); + + if ( (flags & SaveFlags.Content) != 0 ) + { + writer.WriteEncodedInt( m_Pages.Length ); + + for ( int i = 0; i < m_Pages.Length; ++i ) + m_Pages[i].Serialize( writer ); + } + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 4: + { + m_SecureLevel = (SecureLevel)reader.ReadInt(); + goto case 3; + } + case 3: + case 2: + { + BookContent content = this.DefaultContent; + + SaveFlags flags = (SaveFlags) reader.ReadByte(); + + if ( (flags & SaveFlags.Title) != 0 ) + m_Title = Utility.Intern( reader.ReadString() ); + else if ( content != null ) + m_Title = content.Title; + + if ( (flags & SaveFlags.Author) != 0 ) + m_Author = reader.ReadString(); + else if ( content != null ) + m_Author = content.Author; + + m_Writable = ( flags & SaveFlags.Writable ) != 0; + + if ( (flags & SaveFlags.Content) != 0 ) + { + m_Pages = new BookPageInfo[reader.ReadEncodedInt()]; + + for ( int i = 0; i < m_Pages.Length; ++i ) + m_Pages[i] = new BookPageInfo( reader ); + } + else + { + if ( content != null ) + m_Pages = content.Copy(); + else + m_Pages = new BookPageInfo[0]; + } + + break; + } + case 1: + case 0: + { + m_Title = reader.ReadString(); + m_Author = reader.ReadString(); + m_Writable = reader.ReadBool(); + + if ( version == 0 || reader.ReadBool() ) + { + m_Pages = new BookPageInfo[reader.ReadInt()]; + + for ( int i = 0; i < m_Pages.Length; ++i ) + m_Pages[i] = new BookPageInfo( reader ); + } + else + { + BookContent content = this.DefaultContent; + + if ( content != null ) + m_Pages = content.Copy(); + else + m_Pages = new BookPageInfo[0]; + } + + break; + } + } + + if ( version < 3 && ( Weight == 1 || Weight == 2 ) ) + Weight = -1; + } + + public override void AddNameProperty( ObjectPropertyList list ) + { + if ( m_Title != null && m_Title.Length > 0 ) + { + list.Add( m_Title ); + + if ( !String.IsNullOrEmpty( m_SpecialName ) ) + list.Add( 1062613, m_SpecialName ); + } + else + base.AddNameProperty( list ); + } + + /*public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Title != null && m_Title.Length > 0 ) + list.Add( 1060658, "Title\t{0}", m_Title ); // ~1_val~: ~2_val~ + + if ( m_Author != null && m_Author.Length > 0 ) + list.Add( 1060659, "Author\t{0}", m_Author ); // ~1_val~: ~2_val~ + + if ( m_Pages != null && m_Pages.Length > 0 ) + list.Add( 1060660, "Pages\t{0}", m_Pages.Length ); // ~1_val~: ~2_val~ + }*/ + + public override void OnSingleClick ( Mobile from ) + { + LabelTo( from, "{0} by {1}", m_Title, m_Author ); + LabelTo( from, "[{0} pages]", m_Pages.Length ); + } + + public override void OnDoubleClick ( Mobile from ) + { + if ( m_Title == null && m_Author == null && m_Writable == true ) + { + Title = "a book"; + Author = from.Name; + } + + from.Send( new BookHeader( from, this ) ); + from.Send( new BookPageDetails( this ) ); + } + + public static void Initialize() + { + PacketHandlers.Register( 0xD4, 0, true, new OnPacketReceive( HeaderChange ) ); + PacketHandlers.Register( 0x66, 0, true, new OnPacketReceive( ContentChange ) ); + PacketHandlers.Register( 0x93, 99, true, new OnPacketReceive( OldHeaderChange ) ); + } + + public static void OldHeaderChange( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook; + + if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) || !book.IsAccessibleTo( from ) ) + return; + + pvSrc.Seek( 4, SeekOrigin.Current ); // Skip flags and page count + + string title = pvSrc.ReadStringSafe( 60 ); + string author = pvSrc.ReadStringSafe( 30 ); + + book.Title = Utility.FixHtml( title ); + book.Author = Utility.FixHtml( author ); + } + + public static void HeaderChange( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook; + + if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) || !book.IsAccessibleTo( from ) ) + return; + + pvSrc.Seek( 4, SeekOrigin.Current ); // Skip flags and page count + + int titleLength = pvSrc.ReadUInt16(); + + if ( titleLength > 60 ) + return; + + string title = pvSrc.ReadUTF8StringSafe( titleLength ); + + int authorLength = pvSrc.ReadUInt16(); + + if ( authorLength > 30 ) + return; + + string author = pvSrc.ReadUTF8StringSafe( authorLength ); + + book.Title = Utility.FixHtml( title ); + book.Author = Utility.FixHtml( author ); + } + + public static void ContentChange( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook; + + if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) || !book.IsAccessibleTo( from ) ) + return; + + int pageCount = pvSrc.ReadUInt16(); + + if ( pageCount > book.PagesCount ) + return; + + for ( int i = 0; i < pageCount; ++i ) + { + int index = pvSrc.ReadUInt16(); + + if ( index >= 1 && index <= book.PagesCount ) + { + --index; + + int lineCount = pvSrc.ReadUInt16(); + + if ( lineCount <= 8 ) + { + string[] lines = new string[lineCount]; + + for ( int j = 0; j < lineCount; ++j ) + if ( (lines[j] = pvSrc.ReadUTF8StringSafe()).Length >= 80 ) + return; + + book.Pages[index].Lines = lines; + } + else + { + return; + } + } + else + { + return; + } + } + } + + #region ISecurable Members + + [CommandProperty( AccessLevel.GameMaster )] + public SecureLevel Level + { + get + { + return m_SecureLevel; + } + set + { + m_SecureLevel = value; + } + } + + #endregion + } + + public sealed class BookPageDetails : Packet + { + public BookPageDetails( BaseBook book ) : base( 0x66 ) + { + EnsureCapacity( 256 ); + + m_Stream.Write( (int) book.Serial ); + m_Stream.Write( (ushort) book.PagesCount ); + + for ( int i = 0; i < book.PagesCount; ++i ) + { + BookPageInfo page = book.Pages[i]; + + m_Stream.Write( (ushort) (i + 1) ); + m_Stream.Write( (ushort) page.Lines.Length ); + + for ( int j = 0; j < page.Lines.Length; ++j ) + { + byte[] buffer = Utility.UTF8.GetBytes( page.Lines[j] ); + + m_Stream.Write( buffer, 0, buffer.Length ); + m_Stream.Write( (byte) 0 ); + } + } + } + } + + public sealed class BookHeader : Packet + { + public BookHeader( Mobile from, BaseBook book ) : base ( 0xD4 ) + { + string title = book.Title == null ? "" : book.Title; + string author = book.Author == null ? "" : book.Author; + + byte[] titleBuffer = Utility.UTF8.GetBytes( title ); + byte[] authorBuffer = Utility.UTF8.GetBytes( author ); + + EnsureCapacity( 15 + titleBuffer.Length + authorBuffer.Length ); + + m_Stream.Write( (int) book.Serial ); + m_Stream.Write( (bool) true ); + m_Stream.Write( (bool) book.Writable && from.InRange( book.GetWorldLocation(), 1 ) ); + m_Stream.Write( (ushort) book.PagesCount ); + + m_Stream.Write( (ushort) (titleBuffer.Length + 1) ); + m_Stream.Write( titleBuffer, 0, titleBuffer.Length ); + m_Stream.Write( (byte) 0 ); // terminate + + m_Stream.Write( (ushort) (authorBuffer.Length + 1) ); + m_Stream.Write( authorBuffer, 0, authorBuffer.Length ); + m_Stream.Write( (byte) 0 ); // terminate + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Books/BlueBook.cs b/Scripts/Items/Books/BlueBook.cs new file mode 100644 index 0000000..c595cf4 --- /dev/null +++ b/Scripts/Items/Books/BlueBook.cs @@ -0,0 +1,47 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0xFF2, 0x22C0 )] + public class BlueBook : BaseBook + { + [Constructable] + public BlueBook() : base( 0xFF2, 40, true ) + { + } + + [Constructable] + public BlueBook( int pageCount, bool writable ) : base( 0xFF2, pageCount, writable ) + { + } + + [Constructable] + public BlueBook( string title, string author, int pageCount, bool writable ) : base( 0xFF2, title, author, pageCount, writable ) + { + } + + // Intended for defined books only + public BlueBook( bool writable ) : base( 0xFF2, writable ) + { + } + + public BlueBook( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + } +} diff --git a/Scripts/Items/Books/BookContent.cs b/Scripts/Items/Books/BookContent.cs new file mode 100644 index 0000000..f06b785 --- /dev/null +++ b/Scripts/Items/Books/BookContent.cs @@ -0,0 +1,61 @@ +using System; + +namespace Server.Items +{ + public class BookContent + { + private string m_Title; + private string m_Author; + + private BookPageInfo[] m_Pages; + + public string Title{ get{ return m_Title; } } + public string Author{ get{ return m_Author; } } + + public BookPageInfo[] Pages{ get{ return m_Pages; } } + + public BookContent( string title, string author, params BookPageInfo[] pages ) + { + m_Title = title; + m_Author = author; + m_Pages = pages; + } + + public BookPageInfo[] Copy() + { + BookPageInfo[] copy = new BookPageInfo[m_Pages.Length]; + + for ( int i = 0; i < copy.Length; ++i ) + copy[i] = new BookPageInfo( m_Pages[i].Lines ); + + return copy; + } + + public bool IsMatch( BookPageInfo[] cmp ) + { + if ( cmp.Length != m_Pages.Length ) + return false; + + for ( int i = 0; i < cmp.Length; ++i ) + { + string[] a = m_Pages[i].Lines; + string[] b = cmp[i].Lines; + + if ( a.Length != b.Length ) + { + return false; + } + else if ( a != b ) + { + for ( int j = 0; j < a.Length; ++j ) + { + if ( a[j] != b[j] ) + return false; + } + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Books/BrownBook.cs b/Scripts/Items/Books/BrownBook.cs new file mode 100644 index 0000000..529738d --- /dev/null +++ b/Scripts/Items/Books/BrownBook.cs @@ -0,0 +1,47 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0xFEF, 0x22BD )] + public class BrownBook : BaseBook + { + [Constructable] + public BrownBook() : base( 0xFEF ) + { + } + + [Constructable] + public BrownBook( int pageCount, bool writable ) : base( 0xFEF, pageCount, writable ) + { + } + + [Constructable] + public BrownBook( string title, string author, int pageCount, bool writable ) : base( 0xFEF, title, author, pageCount, writable ) + { + } + + // Intended for defined books only + public BrownBook( bool writable ) : base( 0xFEF, writable ) + { + } + + public BrownBook( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Books/Codex.cs b/Scripts/Items/Books/Codex.cs new file mode 100644 index 0000000..324b624 --- /dev/null +++ b/Scripts/Items/Books/Codex.cs @@ -0,0 +1,44 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x22C3, 0x22C5 )] + public class Codex : BaseBook + { + [Constructable] + public Codex() : base( 0x22C3, 40, true ) + { + } + + [Constructable] + public Codex( int pageCount, bool writable ) : base( 0x22C3, pageCount, writable ) + { + } + + [Constructable] + public Codex( string title, string author, int pageCount, bool writable ) : base( 0x22C3, title, author, pageCount, writable ) + { + } + + public Codex( bool writable ) : base( 0x22C3, writable ) + { + } + + public Codex( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); // version + } + } +} diff --git a/Scripts/Items/Books/Diary.cs b/Scripts/Items/Books/Diary.cs new file mode 100644 index 0000000..5b276da --- /dev/null +++ b/Scripts/Items/Books/Diary.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x081A, 0x081B )] + public class Diary : BaseBook + { + [Constructable] + public Diary() : base( 0x081A, 40, true ) + { + Hue = Utility.RandomHue(); + } + + [Constructable] + public Diary( int pageCount, bool writable ) : base( 0x081A, pageCount, writable ) + { + } + + [Constructable] + public Diary( string title, string author, int pageCount, bool writable ) : base( 0x081A, title, author, pageCount, writable ) + { + } + + public Diary( bool writable ) : base( 0x081A, writable ) + { + } + + public Diary( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); // version + } + } +} diff --git a/Scripts/Items/Books/Grimoire.cs b/Scripts/Items/Books/Grimoire.cs new file mode 100644 index 0000000..b7ca872 --- /dev/null +++ b/Scripts/Items/Books/Grimoire.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x07DC, 0x07DD )] + public class Grimoire : BaseBook + { + [Constructable] + public Grimoire() : base( 0x07DC, 40, true ) + { + Hue = Utility.RandomHue(); + } + + [Constructable] + public Grimoire( int pageCount, bool writable ) : base( 0x07DC, pageCount, writable ) + { + } + + [Constructable] + public Grimoire( string title, string author, int pageCount, bool writable ) : base( 0x07DC, title, author, pageCount, writable ) + { + } + + public Grimoire( bool writable ) : base( 0x07DC, writable ) + { + } + + public Grimoire( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); // version + } + } +} diff --git a/Scripts/Items/Books/Journal.cs b/Scripts/Items/Books/Journal.cs new file mode 100644 index 0000000..9ded8b6 --- /dev/null +++ b/Scripts/Items/Books/Journal.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x22BA, 0x22BB )] + public class Journal : BaseBook + { + [Constructable] + public Journal() : base( 0x22BA, 40, true ) + { + Hue = Utility.RandomHue(); + } + + [Constructable] + public Journal( int pageCount, bool writable ) : base( 0x22BA, pageCount, writable ) + { + } + + [Constructable] + public Journal( string title, string author, int pageCount, bool writable ) : base( 0x22BA, title, author, pageCount, writable ) + { + } + + public Journal( bool writable ) : base( 0x22BA, writable ) + { + } + + public Journal( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); // version + } + } +} diff --git a/Scripts/Items/Books/Lexicon.cs b/Scripts/Items/Books/Lexicon.cs new file mode 100644 index 0000000..e7f5e66 --- /dev/null +++ b/Scripts/Items/Books/Lexicon.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0x07DE, 0x0819 )] + public class Lexicon : BaseBook + { + [Constructable] + public Lexicon() : base( 0x07DE, 40, true ) + { + Hue = Utility.RandomHue(); + } + + [Constructable] + public Lexicon( int pageCount, bool writable ) : base( 0x07DE, pageCount, writable ) + { + } + + [Constructable] + public Lexicon( string title, string author, int pageCount, bool writable ) : base( 0x07DE, title, author, pageCount, writable ) + { + } + + public Lexicon( bool writable ) : base( 0x07DE, writable ) + { + } + + public Lexicon( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); // version + } + } +} diff --git a/Scripts/Items/Books/RedBook.cs b/Scripts/Items/Books/RedBook.cs new file mode 100644 index 0000000..580efdb --- /dev/null +++ b/Scripts/Items/Books/RedBook.cs @@ -0,0 +1,47 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0xFF1, 0x22BF )] + public class RedBook : BaseBook + { + [Constructable] + public RedBook() : base( 0xFF1 ) + { + } + + [Constructable] + public RedBook( int pageCount, bool writable ) : base( 0xFF1, pageCount, writable ) + { + } + + [Constructable] + public RedBook( string title, string author, int pageCount, bool writable ) : base( 0xFF1, title, author, pageCount, writable ) + { + } + + // Intended for defined books only + public RedBook( bool writable ) : base( 0xFF1, writable ) + { + } + + public RedBook( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Books/TanBook.cs b/Scripts/Items/Books/TanBook.cs new file mode 100644 index 0000000..8794c25 --- /dev/null +++ b/Scripts/Items/Books/TanBook.cs @@ -0,0 +1,47 @@ +using System; +using Server; + +namespace Server.Items +{ + [FlipableAttribute( 0xFF0, 0x22BE )] + public class TanBook : BaseBook + { + [Constructable] + public TanBook() : base( 0xFF0 ) + { + } + + [Constructable] + public TanBook( int pageCount, bool writable ) : base( 0xFF0, pageCount, writable ) + { + } + + [Constructable] + public TanBook( string title, string author, int pageCount, bool writable ) : base( 0xFF0, title, author, pageCount, writable ) + { + } + + // Intended for defined books only + public TanBook( bool writable ) : base( 0xFF0, writable ) + { + } + + public TanBook( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Books/Tome.cs b/Scripts/Items/Books/Tome.cs new file mode 100644 index 0000000..57d5f38 --- /dev/null +++ b/Scripts/Items/Books/Tome.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Tome : BaseBook + { + [Constructable] + public Tome() : base( 0x1C11 ) + { + } + + [Constructable] + public Tome( int pageCount, bool writable ) : base( 0x1C11, pageCount, writable ) + { + } + + [Constructable] + public Tome( string title, string author, int pageCount, bool writable ) : base( 0x1C11, title, author, pageCount, writable ) + { + } + + public Tome( bool writable ) : base( 0x1C11, writable ) + { + } + + public Tome( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/AdminBoots.cs b/Scripts/Items/Clothing/AdminBoots.cs new file mode 100644 index 0000000..90f1262 --- /dev/null +++ b/Scripts/Items/Clothing/AdminBoots.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class AdminBoots : Boots + { + [Constructable] + public AdminBoots() + { + Name = "magic boots"; + } + + public override bool OnEquip( Mobile from ) + { + from.Send(SpeedControl.MountSpeed); + return base.OnEquip(from); + } + + public override void OnRemoved( object parent ) + { + if ( parent is Mobile ) + { + Mobile from = (Mobile)parent; + from.Send(SpeedControl.Disable); + } + base.OnRemoved(parent); + } + + public AdminBoots( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/BaseClothing.cs b/Scripts/Items/Clothing/BaseClothing.cs new file mode 100644 index 0000000..6bee8cc --- /dev/null +++ b/Scripts/Items/Clothing/BaseClothing.cs @@ -0,0 +1,561 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Engines.Craft; +using Server.Network; + +namespace Server.Items +{ + public enum ClothingQuality + { + Low, + Regular, + Exceptional + } + + public interface IArcaneEquip + { + bool IsArcane{ get; } + int CurArcaneCharges{ get; set; } + int MaxArcaneCharges{ get; set; } + } + + public abstract class BaseClothing : Item, IDyable, IScissorable, ICraftable + { + private Mobile m_Crafter; + private ClothingQuality m_Quality; + private bool m_PlayerConstructed; + protected CraftResource m_Resource; + private int m_StrBonus = -1, m_DexBonus = -1, m_IntBonus = -1; + + public virtual int UOStrBonus{ get{ return 0; } } + public virtual int UODexBonus{ get{ return 0; } } + public virtual int UOIntBonus{ get{ return 0; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int StrBonus + { + get{ return ( m_StrBonus == -1 ? UOStrBonus : m_StrBonus ); } + set{ m_StrBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int DexBonus + { + get{ return ( m_DexBonus == -1 ? UODexBonus : m_DexBonus ); } + set{ m_DexBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int IntBonus + { + get{ return ( m_IntBonus == -1 ? UOIntBonus : m_IntBonus ); } + set{ m_IntBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Crafter + { + get{ return m_Crafter; } + set{ m_Crafter = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public ClothingQuality Quality + { + get{ return m_Quality; } + set{ m_Quality = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool PlayerConstructed + { + get{ return m_PlayerConstructed; } + set{ m_PlayerConstructed = value; } + } + + public virtual CraftResource DefaultResource{ get{ return CraftResource.None; } } + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get{ return m_Resource; } + set{ m_Resource = value; Hue = CraftResources.GetHue( m_Resource ); InvalidateProperties(); } + } + + public override bool CanEquip( Mobile from ) + { + if( from.AccessLevel < AccessLevel.GameMaster ) + { + if( !AllowMaleWearer && !from.Female ) + { + if( AllowFemaleWearer ) + from.SendLocalizedMessage( 1010388 ); // Only females can wear this. + else + from.SendMessage( "You may not wear this." ); + + return false; + } + else if( !AllowFemaleWearer && from.Female ) + { + if( AllowMaleWearer ) + from.SendLocalizedMessage( 1063343 ); // Only males can wear this. + else + from.SendMessage( "You may not wear this." ); + + return false; + } + } + + return base.CanEquip( from ); + } + + public virtual bool AllowMaleWearer{ get{ return true; } } + public virtual bool AllowFemaleWearer{ get{ return true; } } + public virtual bool CanBeBlessed{ get{ return true; } } + + public int ComputeStatBonus( StatType type ) + { + if ( type == StatType.Str ) + return StrBonus; + else if ( type == StatType.Dex ) + return DexBonus; + else + return IntBonus; + } + + public virtual void AddStatBonuses( Mobile parent ) + { + if ( parent == null ) + return; + + int strBonus = ComputeStatBonus( StatType.Str ); + int dexBonus = ComputeStatBonus( StatType.Dex ); + int intBonus = ComputeStatBonus( StatType.Int ); + + if ( strBonus == 0 && dexBonus == 0 && intBonus == 0 ) + return; + + string modName = this.Serial.ToString(); + + if ( strBonus != 0 ) + parent.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) ); + + if ( dexBonus != 0 ) + parent.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) ); + + if ( intBonus != 0 ) + parent.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) ); + } + + public static void ValidateMobile( Mobile m ) + { + for ( int i = m.Items.Count - 1; i >= 0; --i ) + { + if ( i >= m.Items.Count ) + continue; + + Item item = m.Items[i]; + + if ( item is BaseClothing ) + { + BaseClothing clothing = (BaseClothing)item; + + if ( !clothing.AllowMaleWearer && !m.Female && m.AccessLevel < AccessLevel.GameMaster ) + { + if ( clothing.AllowFemaleWearer ) + m.SendLocalizedMessage( 1010388 ); // Only females can wear this. + else + m.SendMessage( "You may not wear this." ); + + m.AddToBackpack( clothing ); + } + else if ( !clothing.AllowFemaleWearer && m.Female && m.AccessLevel < AccessLevel.GameMaster ) + { + if ( clothing.AllowMaleWearer ) + m.SendLocalizedMessage( 1063343 ); // Only males can wear this. + else + m.SendMessage( "You may not wear this." ); + + m.AddToBackpack( clothing ); + } + } + } + } + + public BaseClothing( int itemID, Layer layer ) : this( itemID, layer, 0 ) + { + } + + public BaseClothing( int itemID, Layer layer, int hue ) : base( itemID ) + { + Layer = layer; + Hue = hue; + + m_Resource = DefaultResource; + m_Quality = ClothingQuality.Regular; + } + + public override void OnAfterDuped( Item newItem ) + { + BaseClothing clothing = newItem as BaseClothing; + + if ( clothing == null ) + return; + } + + public BaseClothing( Serial serial ) : base( serial ) + { + } + + public override bool AllowEquipedCast( Mobile from ) + { + return true; + } + + public override bool CheckPropertyConfliction( Mobile m ) + { + if ( base.CheckPropertyConfliction( m ) ) + return true; + + if ( Layer == Layer.Pants ) + return ( m.FindItemOnLayer( Layer.InnerLegs ) != null ); + + if ( Layer == Layer.Shirt ) + return ( m.FindItemOnLayer( Layer.InnerTorso ) != null ); + + return false; + } + + public override bool OnEquip( Mobile from ) + { + from.CheckStatTimers(); + + int strBonus = ComputeStatBonus( StatType.Str ); + int dexBonus = ComputeStatBonus( StatType.Dex ); + int intBonus = ComputeStatBonus( StatType.Int ); + + if ( strBonus != 0 || dexBonus != 0 || intBonus != 0 ) + { + string modName = this.Serial.ToString(); + + if ( strBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) ); + + if ( dexBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) ); + + if ( intBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) ); + } + + return base.OnEquip( from ); + } + + public override void OnAdded( object parent ) + { + Mobile mob = parent as Mobile; + + if ( mob != null ) + { + AddStatBonuses( mob ); + mob.CheckStatTimers(); + } + + base.OnAdded( parent ); + } + + public override void OnRemoved( object parent ) + { + if ( parent is Mobile ) + { + Mobile m = (Mobile)parent; + string modName = this.Serial.ToString(); + + m.RemoveStatMod( modName + "Str" ); + m.RemoveStatMod( modName + "Dex" ); + m.RemoveStatMod( modName + "Int" ); + + m.CheckStatTimers(); + } + + base.OnRemoved( parent ); + } + + private string GetNameString() + { + string name = this.Name; + + if ( name == null ) + name = String.Format( "#{0}", LabelNumber ); + + return name; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Crafter != null ) + list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~ + + if ( m_Quality == ClothingQuality.Exceptional ) + list.Add( 1060636 ); // exceptional + + if ( m_StrBonus > 0 && m_StrBonus < 3 ) + list.Add( 1038027 ); // Great Strength + else if ( m_StrBonus > 2 && m_StrBonus < 5 ) + list.Add( 1038028 ); // Greater Strength + else if ( m_StrBonus > 4 ) + list.Add( 1038029 ); // Ultimate Strength + + if ( m_DexBonus > 0 && m_DexBonus < 3 ) + list.Add( 1038033 ); // Great Agility + else if ( m_DexBonus > 2 && m_DexBonus < 5 ) + list.Add( 1038034 ); // Greater Agility + else if ( m_DexBonus > 4 ) + list.Add( 1038035 ); // Ultimate Agility + + if ( m_IntBonus > 0 && m_IntBonus < 3 ) + list.Add( 1038030 ); // Great Intellect + else if ( m_IntBonus > 2 && m_IntBonus < 5 ) + list.Add( 1038031 ); // Greater Intellect + else if ( m_IntBonus > 4 ) + list.Add( 1038032 ); // Ultimate Intellect + + if ( Magical > 0 && Uses > 0 ) + { + list.Add( 1062520, "\t#{0}", Magical ); + } + + if ( Uses > 0 && Server.Misc.Settings.DisplayInfo() ) + { + if ( Uses > 1 ) + list.Add( 1062516, "{0}", Uses ); + else + list.Add( 1062517, "{0}", Uses ); + } + else if ( Uses > 0 ) + { + double usage = (double)Uses / (double)UsesMax; + + if ( usage > 0.95 ) + list.Add( 1063269 ); // Fully Charged + else if ( usage > 0.75 ) + list.Add( 1063270 ); // Mostly Charged + else if ( usage > 0.50 ) + list.Add( 1063271 ); // Partially Charged + else if ( usage > 0.25 ) + list.Add( 1063272 ); // Somewhat Charged + else if ( usage > 0.05 ) + list.Add( 1063273 ); // Barely Charged + else + list.Add( 1063274 ); // Almost Drained + } + } + + #region Serialization + private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf ) + { + if ( setIf ) + flags |= toSet; + } + + private static bool GetSaveFlag( SaveFlag flags, SaveFlag toGet ) + { + return ( (flags & toGet) != 0 ); + } + + [Flags] + private enum SaveFlag + { + None = 0x00000000, + Resource = 0x00000001, + PlayerConstructed = 0x00000002, + Crafter = 0x00000004, + Quality = 0x00000008, + StrBonus = 0x00000010, + DexBonus = 0x00000020, + IntBonus = 0x00000040 + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + SaveFlag flags = SaveFlag.None; + + SetSaveFlag( ref flags, SaveFlag.Resource, m_Resource != DefaultResource ); + SetSaveFlag( ref flags, SaveFlag.PlayerConstructed, m_PlayerConstructed != false ); + SetSaveFlag( ref flags, SaveFlag.Crafter, m_Crafter != null ); + SetSaveFlag( ref flags, SaveFlag.Quality, m_Quality != ClothingQuality.Regular ); + SetSaveFlag( ref flags, SaveFlag.StrBonus, m_StrBonus != -1 ); + SetSaveFlag( ref flags, SaveFlag.DexBonus, m_DexBonus != -1 ); + SetSaveFlag( ref flags, SaveFlag.IntBonus, m_IntBonus != -1 ); + + writer.WriteEncodedInt( (int) flags ); + + if ( GetSaveFlag( flags, SaveFlag.Resource ) ) + writer.WriteEncodedInt( (int) m_Resource ); + + if ( GetSaveFlag( flags, SaveFlag.PlayerConstructed ) ) + writer.Write( (bool) m_PlayerConstructed ); + + if ( GetSaveFlag( flags, SaveFlag.Crafter ) ) + writer.Write( (Mobile) m_Crafter ); + + if ( GetSaveFlag( flags, SaveFlag.Quality ) ) + writer.WriteEncodedInt( (int) m_Quality ); + + if ( GetSaveFlag( flags, SaveFlag.StrBonus ) ) + writer.WriteEncodedInt( (int) m_StrBonus ); + + if ( GetSaveFlag( flags, SaveFlag.DexBonus ) ) + writer.WriteEncodedInt( (int) m_DexBonus ); + + if ( GetSaveFlag( flags, SaveFlag.IntBonus ) ) + writer.WriteEncodedInt( (int) m_IntBonus ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + SaveFlag flags = (SaveFlag)reader.ReadEncodedInt(); + + if ( GetSaveFlag( flags, SaveFlag.Resource ) ) + m_Resource = (CraftResource)reader.ReadEncodedInt(); + else + m_Resource = DefaultResource; + + if ( GetSaveFlag( flags, SaveFlag.PlayerConstructed ) ) + m_PlayerConstructed = true; + + if ( GetSaveFlag( flags, SaveFlag.Crafter ) ) + m_Crafter = reader.ReadMobile(); + + if ( GetSaveFlag( flags, SaveFlag.Quality ) ) + m_Quality = (ClothingQuality)reader.ReadEncodedInt(); + else + m_Quality = ClothingQuality.Regular; + + if ( GetSaveFlag( flags, SaveFlag.StrBonus ) ) + m_StrBonus = reader.ReadEncodedInt(); + else + m_StrBonus = -1; + + if ( GetSaveFlag( flags, SaveFlag.DexBonus ) ) + m_DexBonus = reader.ReadEncodedInt(); + else + m_DexBonus = -1; + + if ( GetSaveFlag( flags, SaveFlag.IntBonus ) ) + m_IntBonus = reader.ReadEncodedInt(); + else + m_IntBonus = -1; + + Mobile parent = Parent as Mobile; + + if ( parent != null ) + { + AddStatBonuses( parent ); + parent.CheckStatTimers(); + } + } + #endregion + + public virtual bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + else if ( RootParent is Mobile && from != RootParent ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public virtual bool Scissor( Mobile from, Scissors scissors ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 502437 ); // Items you wish to cut must be in your backpack. + return false; + } + + CraftSystem system = DefTailoring.CraftSystem; + + CraftItem item = system.CraftItems.SearchFor( GetType() ); + + if ( item != null && item.Resources.Count == 1 && item.Resources.GetAt( 0 ).Amount >= 2 ) + { + try + { + Type resourceType = null; + + CraftResourceInfo info = CraftResources.GetInfo( m_Resource ); + + if ( info != null && info.ResourceTypes.Length > 0 ) + resourceType = info.ResourceTypes[0]; + + if ( resourceType == null ) + resourceType = item.Resources.GetAt( 0 ).ItemType; + + Item res = (Item)Activator.CreateInstance( resourceType ); + + ScissorHelper( from, res, m_PlayerConstructed ? (item.Resources.GetAt( 0 ).Amount / 2) : 1 ); + + res.LootType = LootType.Regular; + + return true; + } + catch + { + } + } + + from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything. + return false; + } + + #region ICraftable Members + + public virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Quality = (ClothingQuality)quality; + + if ( makersMark ) + Crafter = from; + + if ( DefaultResource != CraftResource.None ) + { + Type resourceType = typeRes; + + if ( resourceType == null ) + resourceType = craftItem.Resources.GetAt( 0 ).ItemType; + + Resource = CraftResources.GetFromType( resourceType ); + } + else + { + Hue = resHue; + } + + PlayerConstructed = true; + + CraftContext context = craftSystem.GetContext( from ); + + if ( context != null && context.DoNotColor ) + Hue = 0; + + return quality; + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/Cloaks.cs b/Scripts/Items/Clothing/Cloaks.cs new file mode 100644 index 0000000..f5f40eb --- /dev/null +++ b/Scripts/Items/Clothing/Cloaks.cs @@ -0,0 +1,156 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseCloak : BaseClothing + { + public BaseCloak( int itemID ) : this( itemID, 0 ) + { + } + + public BaseCloak( int itemID, int hue ) : base( itemID, Layer.Cloak, hue ) + { + } + + public BaseCloak( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable] + public class Cloak : BaseCloak, IArcaneEquip + { + #region Arcane Impl + private int m_MaxArcaneCharges, m_CurArcaneCharges; + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxArcaneCharges + { + get{ return m_MaxArcaneCharges; } + set{ m_MaxArcaneCharges = value; InvalidateProperties(); Update(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CurArcaneCharges + { + get{ return m_CurArcaneCharges; } + set{ m_CurArcaneCharges = value; InvalidateProperties(); Update(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsArcane + { + get{ return ( m_MaxArcaneCharges > 0 && m_CurArcaneCharges >= 0 ); } + } + + public void Update() + { + if ( IsArcane ) + ItemID = 0x26AD; + else if ( ItemID == 0x26AD ) + ItemID = 0x1515; + + if ( IsArcane && CurArcaneCharges == 0 ) + Hue = 0; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( IsArcane ) + list.Add( 1061837, "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges ); // arcane charges: ~1_val~ / ~2_val~ + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( IsArcane ) + LabelTo( from, 1061837, String.Format( "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges ) ); + } + + public void Flip() + { + if ( ItemID == 0x1515 ) + ItemID = 0x1530; + else if ( ItemID == 0x1530 ) + ItemID = 0x1515; + } + #endregion + + [Constructable] + public Cloak() : this( 0 ) + { + } + + [Constructable] + public Cloak( int hue ) : base( 0x1515, hue ) + { + Weight = 5.0; + } + + public Cloak( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + if ( IsArcane ) + { + writer.Write( true ); + writer.Write( (int) m_CurArcaneCharges ); + writer.Write( (int) m_MaxArcaneCharges ); + } + else + { + writer.Write( false ); + } + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + if ( reader.ReadBool() ) + { + m_CurArcaneCharges = reader.ReadInt(); + m_MaxArcaneCharges = reader.ReadInt(); + + if ( Hue == 2118 ) + Hue = ArcaneGem.DefaultArcaneHue; + } + + break; + } + } + + if ( Weight == 4.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/Hats.cs b/Scripts/Items/Clothing/Hats.cs new file mode 100644 index 0000000..2f153dc --- /dev/null +++ b/Scripts/Items/Clothing/Hats.cs @@ -0,0 +1,633 @@ +using System; +using Server.Engines.Craft; +using Server.Network; +using System.Collections.Generic; + +namespace Server.Items +{ + public abstract class BaseHat : BaseClothing, IShipwreckedItem + { + private bool m_IsShipwreckedItem; + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsShipwreckedItem + { + get { return m_IsShipwreckedItem; } + set { m_IsShipwreckedItem = value; } + } + + public BaseHat( int itemID ) : this( itemID, 0 ) + { + } + + public BaseHat( int itemID, int hue ) : base( itemID, Layer.Helm, hue ) + { + } + + public BaseHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_IsShipwreckedItem ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_IsShipwreckedItem = reader.ReadBool(); + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + + if ( m_IsShipwreckedItem ) + list.Add( 1041645 ); // recovered from a shipwreck + } + + public override int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Quality = (ClothingQuality)quality; + + return base.OnCraft( quality, makersMark, from, craftSystem, typeRes, tool, craftItem, resHue ); + } + } + + public class FloppyHat : BaseHat + { + [Constructable] + public FloppyHat() : this( 0 ) + { + } + + [Constructable] + public FloppyHat( int hue ) : base( 0x1713, hue ) + { + Weight = 1.0; + } + + public FloppyHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Hood : BaseHat + { + [Constructable] + public Hood() : this( 0 ) + { + } + + [Constructable] + public Hood( int hue ) : base( 0x141B, hue ) + { + Name = "hood"; + Weight = 1.0; + } + + public Hood( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WideBrimHat : BaseHat + { + [Constructable] + public WideBrimHat() : this( 0 ) + { + } + + [Constructable] + public WideBrimHat( int hue ) : base( 0x1714, hue ) + { + Weight = 1.0; + } + + public WideBrimHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Cap : BaseHat + { + [Constructable] + public Cap() : this( 0 ) + { + } + + [Constructable] + public Cap( int hue ) : base( 0x1715, hue ) + { + Weight = 1.0; + } + + public Cap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SkullCap : BaseHat + { + [Constructable] + public SkullCap() : this( 0 ) + { + } + + [Constructable] + public SkullCap( int hue ) : base( 0x1544, hue ) + { + Weight = 1.0; + } + + public SkullCap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Bandana : BaseHat + { + [Constructable] + public Bandana() : this( 0 ) + { + } + + [Constructable] + public Bandana( int hue ) : base( 0x1540, hue ) + { + Weight = 1.0; + } + + public Bandana( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BearMask : BaseHat + { + [Constructable] + public BearMask() : this( 0 ) + { + } + + [Constructable] + public BearMask( int hue ) : base( 0x1545, hue ) + { + Weight = 5.0; + } + + public override bool Dye( Mobile from, DyeTub sender ) + { + from.SendLocalizedMessage( sender.FailMessage ); + return false; + } + + public BearMask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DeerMask : BaseHat + { + [Constructable] + public DeerMask() : this( 0 ) + { + } + + [Constructable] + public DeerMask( int hue ) : base( 0x1547, hue ) + { + Weight = 4.0; + } + + public override bool Dye( Mobile from, DyeTub sender ) + { + from.SendLocalizedMessage( sender.FailMessage ); + return false; + } + + public DeerMask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class HornedTribalMask : BaseHat + { + [Constructable] + public HornedTribalMask() : this( 0 ) + { + } + + [Constructable] + public HornedTribalMask( int hue ) : base( 0x1549, hue ) + { + Weight = 2.0; + } + + public override bool Dye( Mobile from, DyeTub sender ) + { + from.SendLocalizedMessage( sender.FailMessage ); + return false; + } + + public HornedTribalMask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TribalMask : BaseHat + { + [Constructable] + public TribalMask() : this( 0 ) + { + } + + [Constructable] + public TribalMask( int hue ) : base( 0x154B, hue ) + { + Weight = 2.0; + } + + public override bool Dye( Mobile from, DyeTub sender ) + { + from.SendLocalizedMessage( sender.FailMessage ); + return false; + } + + public TribalMask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TallStrawHat : BaseHat + { + [Constructable] + public TallStrawHat() : this( 0 ) + { + } + + [Constructable] + public TallStrawHat( int hue ) : base( 0x1716, hue ) + { + Weight = 1.0; + } + + public TallStrawHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StrawHat : BaseHat + { + [Constructable] + public StrawHat() : this( 0 ) + { + } + + [Constructable] + public StrawHat( int hue ) : base( 0x1717, hue ) + { + Weight = 1.0; + } + + public StrawHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WizardsHat : BaseHat + { + [Constructable] + public WizardsHat() : this( 0 ) + { + } + + [Constructable] + public WizardsHat( int hue ) : base( 0x1718, hue ) + { + Weight = 1.0; + } + + public WizardsHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Bonnet : BaseHat + { + [Constructable] + public Bonnet() : this( 0 ) + { + } + + [Constructable] + public Bonnet( int hue ) : base( 0x1719, hue ) + { + Weight = 1.0; + } + + public Bonnet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class FeatheredHat : BaseHat + { + [Constructable] + public FeatheredHat() : this( 0 ) + { + } + + [Constructable] + public FeatheredHat( int hue ) : base( 0x171A, hue ) + { + Weight = 1.0; + } + + public FeatheredHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TricorneHat : BaseHat + { + [Constructable] + public TricorneHat() : this( 0 ) + { + } + + [Constructable] + public TricorneHat( int hue ) : base( 0x171B, hue ) + { + Weight = 1.0; + } + + public TricorneHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class JesterHat : BaseHat + { + [Constructable] + public JesterHat() : this( 0 ) + { + } + + [Constructable] + public JesterHat( int hue ) : base( 0x171C, hue ) + { + Weight = 1.0; + } + + public JesterHat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/MiddleTorso.cs b/Scripts/Items/Clothing/MiddleTorso.cs new file mode 100644 index 0000000..9871985 --- /dev/null +++ b/Scripts/Items/Clothing/MiddleTorso.cs @@ -0,0 +1,234 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseMiddleTorso : BaseClothing + { + public BaseMiddleTorso( int itemID ) : this( itemID, 0 ) + { + } + + public BaseMiddleTorso( int itemID, int hue ) : base( itemID, Layer.MiddleTorso, hue ) + { + } + + public BaseMiddleTorso( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1541, 0x1542 )] + public class BodySash : BaseMiddleTorso + { + [Constructable] + public BodySash() : this( 0 ) + { + } + + [Constructable] + public BodySash( int hue ) : base( 0x1541, hue ) + { + Weight = 1.0; + } + + public BodySash( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x153d, 0x153e )] + public class FullApron : BaseMiddleTorso + { + [Constructable] + public FullApron() : this( 0 ) + { + } + + [Constructable] + public FullApron( int hue ) : base( 0x153d, hue ) + { + Weight = 4.0; + } + + public FullApron( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1f7b, 0x1f7c )] + public class Doublet : BaseMiddleTorso + { + [Constructable] + public Doublet() : this( 0 ) + { + } + + [Constructable] + public Doublet( int hue ) : base( 0x1F7B, hue ) + { + Weight = 2.0; + } + + public Doublet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1ffd, 0x1ffe )] + public class Surcoat : BaseMiddleTorso + { + [Constructable] + public Surcoat() : this( 0 ) + { + } + + [Constructable] + public Surcoat( int hue ) : base( 0x1FFD, hue ) + { + Weight = 6.0; + } + + public Surcoat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 6.0; + } + } + + [Flipable( 0x1fa1, 0x1fa2 )] + public class Tunic : BaseMiddleTorso + { + [Constructable] + public Tunic() : this( 0 ) + { + } + + [Constructable] + public Tunic( int hue ) : base( 0x1FA1, hue ) + { + Weight = 5.0; + } + + public Tunic( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1f9f, 0x1fa0 )] + public class JesterSuit : BaseMiddleTorso + { + [Constructable] + public JesterSuit() : this( 0 ) + { + } + + [Constructable] + public JesterSuit( int hue ) : base( 0x1F9F, hue ) + { + Weight = 4.0; + } + + public JesterSuit( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/OuterLegs.cs b/Scripts/Items/Clothing/OuterLegs.cs new file mode 100644 index 0000000..e0b2b95 --- /dev/null +++ b/Scripts/Items/Clothing/OuterLegs.cs @@ -0,0 +1,99 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseOuterLegs : BaseClothing + { + public BaseOuterLegs( int itemID ) : this( itemID, 0 ) + { + } + + public BaseOuterLegs( int itemID, int hue ) : base( itemID, Layer.OuterLegs, hue ) + { + } + + public BaseOuterLegs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1516, 0x1531 )] + public class Skirt : BaseOuterLegs + { + [Constructable] + public Skirt() : this( 0 ) + { + } + + [Constructable] + public Skirt( int hue ) : base( 0x1516, hue ) + { + Weight = 4.0; + } + + public Skirt( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1537, 0x1538 )] + public class Kilt : BaseOuterLegs + { + [Constructable] + public Kilt() : this( 0 ) + { + } + + [Constructable] + public Kilt( int hue ) : base( 0x1537, hue ) + { + Weight = 2.0; + } + + public Kilt( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/OuterTorso.cs b/Scripts/Items/Clothing/OuterTorso.cs new file mode 100644 index 0000000..edd0846 --- /dev/null +++ b/Scripts/Items/Clothing/OuterTorso.cs @@ -0,0 +1,354 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseOuterTorso : BaseClothing + { + public BaseOuterTorso( int itemID ) : this( itemID, 0 ) + { + } + + public BaseOuterTorso( int itemID, int hue ) : base( itemID, Layer.OuterTorso, hue ) + { + } + + public BaseOuterTorso( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1F00, 0x1EFF )] + public class FancyDress : BaseOuterTorso + { + public override bool AllowMaleWearer{ get{ return false; } } + + [Constructable] + public FancyDress() : this( 0 ) + { + } + + [Constructable] + public FancyDress( int hue ) : base( 0x1F00, hue ) + { + Weight = 3.0; + } + + public FancyDress( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DeathRobe : Robe + { + private Timer m_DecayTimer; + private DateTime m_DecayTime; + + private static TimeSpan m_DefaultDecayTime = TimeSpan.FromMinutes(1.0); + + public override bool DisplayLootType + { + get{ return false; } + } + + [Constructable] + public DeathRobe() + { + Hue = 2301; + BeginDecay( m_DefaultDecayTime ); + } + + public new bool Scissor( Mobile from, Scissors scissors ) + { + from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything. + return false; + } + + public void BeginDecay( TimeSpan delay ) + { + if ( m_DecayTimer != null ) + m_DecayTimer.Stop(); + + m_DecayTime = DateTime.Now + delay; + + m_DecayTimer = new InternalTimer( this, delay ); + m_DecayTimer.Start(); + } + + public override bool OnDroppedToWorld( Mobile from, Point3D p ) + { + BeginDecay( m_DefaultDecayTime ); + + return true; + } + + public override bool OnDroppedToMobile( Mobile from, Mobile target ) + { + if (m_DecayTimer != null ) + { + m_DecayTimer.Stop(); + m_DecayTimer = null; + } + + return true; + } + + public override void OnAfterDelete() + { + if ( m_DecayTimer != null ) + m_DecayTimer.Stop(); + + m_DecayTimer = null; + } + + private class InternalTimer : Timer + { + private DeathRobe m_Robe; + + public InternalTimer( DeathRobe c, TimeSpan delay ) : base( delay ) + { + m_Robe = c; + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + if ( m_Robe.Parent != null || m_Robe.IsLockedDown ) + Stop(); + else + m_Robe.Delete(); + } + } + + public DeathRobe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + writer.Write( m_DecayTimer != null ); + + if( m_DecayTimer != null ) + writer.WriteDeltaTime( m_DecayTime ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + { + if( reader.ReadBool() ) + { + m_DecayTime = reader.ReadDeltaTime(); + BeginDecay( m_DecayTime - DateTime.Now ); + } + break; + } + case 1: + case 0: + { + if ( Parent == null ) + BeginDecay( m_DefaultDecayTime ); + break; + } + } + + if ( version < 1 && Hue == 0 ) + Hue = 2301; + } + } + + [Flipable] + public class Robe : BaseOuterTorso, IArcaneEquip + { + #region Arcane Impl + private int m_MaxArcaneCharges, m_CurArcaneCharges; + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxArcaneCharges + { + get{ return m_MaxArcaneCharges; } + set{ m_MaxArcaneCharges = value; InvalidateProperties(); Update(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CurArcaneCharges + { + get{ return m_CurArcaneCharges; } + set{ m_CurArcaneCharges = value; InvalidateProperties(); Update(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsArcane + { + get{ return ( m_MaxArcaneCharges > 0 && m_CurArcaneCharges >= 0 ); } + } + + public void Update() + { + if ( IsArcane ) + ItemID = 0x26AE; + else if ( ItemID == 0x26AE ) + ItemID = 0x1F04; + + if ( IsArcane && CurArcaneCharges == 0 ) + Hue = 0; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( IsArcane ) + list.Add( 1061837, "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges ); // arcane charges: ~1_val~ / ~2_val~ + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( IsArcane ) + LabelTo( from, 1061837, String.Format( "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges ) ); + } + + public void Flip() + { + if ( ItemID == 0x1F03 ) + ItemID = 0x1F04; + else if ( ItemID == 0x1F04 ) + ItemID = 0x1F03; + } + #endregion + + [Constructable] + public Robe() : this( 0 ) + { + } + + [Constructable] + public Robe( int hue ) : base( 0x1F03, hue ) + { + Weight = 3.0; + } + + public Robe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + if ( IsArcane ) + { + writer.Write( true ); + writer.Write( (int) m_CurArcaneCharges ); + writer.Write( (int) m_MaxArcaneCharges ); + } + else + { + writer.Write( false ); + } + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + if ( reader.ReadBool() ) + { + m_CurArcaneCharges = reader.ReadInt(); + m_MaxArcaneCharges = reader.ReadInt(); + + if ( Hue == 2118 ) + Hue = ArcaneGem.DefaultArcaneHue; + } + + break; + } + } + } + } + + [Flipable( 0x1f01, 0x1f02 )] + public class PlainDress : BaseOuterTorso + { + public override bool AllowMaleWearer{ get{ return false; } } + + [Constructable] + public PlainDress() : this( 0 ) + { + } + + [Constructable] + public PlainDress( int hue ) : base( 0x1F01, hue ) + { + Weight = 2.0; + } + + public PlainDress( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/Pants.cs b/Scripts/Items/Clothing/Pants.cs new file mode 100644 index 0000000..e26204b --- /dev/null +++ b/Scripts/Items/Clothing/Pants.cs @@ -0,0 +1,99 @@ +using System; + +namespace Server.Items +{ + public abstract class BasePants : BaseClothing + { + public BasePants( int itemID ) : this( itemID, 0 ) + { + } + + public BasePants( int itemID, int hue ) : base( itemID, Layer.Pants, hue ) + { + } + + public BasePants( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x152e, 0x152f )] + public class ShortPants : BasePants + { + [Constructable] + public ShortPants() : this( 0 ) + { + } + + [Constructable] + public ShortPants( int hue ) : base( 0x152E, hue ) + { + Weight = 2.0; + } + + public ShortPants( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1539, 0x153a )] + public class LongPants : BasePants + { + [Constructable] + public LongPants() : this( 0 ) + { + } + + [Constructable] + public LongPants( int hue ) : base( 0x1539, hue ) + { + Weight = 2.0; + } + + public LongPants( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/Shirts.cs b/Scripts/Items/Clothing/Shirts.cs new file mode 100644 index 0000000..fa6cdde --- /dev/null +++ b/Scripts/Items/Clothing/Shirts.cs @@ -0,0 +1,102 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseShirt : BaseClothing + { + public BaseShirt( int itemID ) : this( itemID, 0 ) + { + } + + public BaseShirt( int itemID, int hue ) : base( itemID, Layer.Shirt, hue ) + { + } + + public BaseShirt( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1efd, 0x1efe )] + public class FancyShirt : BaseShirt + { + [Constructable] + public FancyShirt() : this( 0 ) + { + } + + [Constructable] + public FancyShirt( int hue ) : base( 0x1EFD, hue ) + { + Weight = 2.0; + } + + public FancyShirt( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1517, 0x1518 )] + public class Shirt : BaseShirt + { + [Constructable] + public Shirt() : this( 0 ) + { + } + + [Constructable] + public Shirt( int hue ) : base( 0x1517, hue ) + { + Weight = 1.0; + } + + public Shirt( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Clothing/Shoes.cs b/Scripts/Items/Clothing/Shoes.cs new file mode 100644 index 0000000..8cf5ea1 --- /dev/null +++ b/Scripts/Items/Clothing/Shoes.cs @@ -0,0 +1,289 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseShoes : BaseClothing + { + public BaseShoes( int itemID ) : this( itemID, 0 ) + { + } + + public BaseShoes( int itemID, int hue ) : base( itemID, Layer.Shoes, hue ) + { + } + + public BaseShoes( Serial serial ) : base( serial ) + { + } + + public override bool Scissor( Mobile from, Scissors scissors ) + { + if( DefaultResource == CraftResource.None ) + return base.Scissor( from, scissors ); + + from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything. + return false; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: break; // empty, resource removed + case 1: + { + m_Resource = (CraftResource)reader.ReadInt(); + break; + } + case 0: + { + m_Resource = DefaultResource; + break; + } + } + } + } + + [FlipableAttribute( 0x170b, 0x170c )] + public class Boots : BaseShoes + { + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + [Constructable] + public Boots() : this( 0 ) + { + } + + [Constructable] + public Boots( int hue ) : base( 0x170B, hue ) + { + Weight = 3.0; + } + + public Boots( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable] + public class ThighBoots : BaseShoes, IArcaneEquip + { + #region Arcane Impl + private int m_MaxArcaneCharges, m_CurArcaneCharges; + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxArcaneCharges + { + get{ return m_MaxArcaneCharges; } + set{ m_MaxArcaneCharges = value; InvalidateProperties(); Update(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CurArcaneCharges + { + get{ return m_CurArcaneCharges; } + set{ m_CurArcaneCharges = value; InvalidateProperties(); Update(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsArcane + { + get{ return ( m_MaxArcaneCharges > 0 && m_CurArcaneCharges >= 0 ); } + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( IsArcane ) + LabelTo( from, 1061837, String.Format( "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges ) ); + } + + public void Update() + { + if ( IsArcane ) + ItemID = 0x26AF; + else if ( ItemID == 0x26AF ) + ItemID = 0x1711; + + if ( IsArcane && CurArcaneCharges == 0 ) + Hue = 0; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( IsArcane ) + list.Add( 1061837, "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges ); // arcane charges: ~1_val~ / ~2_val~ + } + + public void Flip() + { + if ( ItemID == 0x1711 ) + ItemID = 0x1712; + else if ( ItemID == 0x1712 ) + ItemID = 0x1711; + } + #endregion + + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + [Constructable] + public ThighBoots() : this( 0 ) + { + } + + [Constructable] + public ThighBoots( int hue ) : base( 0x1711, hue ) + { + Weight = 4.0; + } + + public ThighBoots( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + if ( IsArcane ) + { + writer.Write( true ); + writer.Write( (int) m_CurArcaneCharges ); + writer.Write( (int) m_MaxArcaneCharges ); + } + else + { + writer.Write( false ); + } + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + if ( reader.ReadBool() ) + { + m_CurArcaneCharges = reader.ReadInt(); + m_MaxArcaneCharges = reader.ReadInt(); + + if ( Hue == 2118 ) + Hue = ArcaneGem.DefaultArcaneHue; + } + + break; + } + } + } + } + + [FlipableAttribute( 0x170f, 0x1710 )] + public class Shoes : BaseShoes + { + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + [Constructable] + public Shoes() : this( 0 ) + { + } + + [Constructable] + public Shoes( int hue ) : base( 0x170F, hue ) + { + Weight = 2.0; + } + + public Shoes( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x170d, 0x170e )] + public class Sandals : BaseShoes + { + public override CraftResource DefaultResource{ get{ return CraftResource.Leathered; } } + + [Constructable] + public Sandals() : this( 0 ) + { + } + + [Constructable] + public Sandals( int hue ) : base( 0x170D, hue ) + { + Weight = 1.0; + } + + public Sandals( Serial serial ) : base( serial ) + { + } + + public override bool Dye( Mobile from, DyeTub sender ) + { + return false; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Clothing/Waist.cs b/Scripts/Items/Clothing/Waist.cs new file mode 100644 index 0000000..1841871 --- /dev/null +++ b/Scripts/Items/Clothing/Waist.cs @@ -0,0 +1,66 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseWaist : BaseClothing + { + public BaseWaist( int itemID ) : this( itemID, 0 ) + { + } + + public BaseWaist( int itemID, int hue ) : base( itemID, Layer.Waist, hue ) + { + } + + public BaseWaist( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x153b, 0x153c )] + public class HalfApron : BaseWaist + { + [Constructable] + public HalfApron() : this( 0 ) + { + } + + [Constructable] + public HalfApron( int hue ) : base( 0x153b, hue ) + { + Weight = 2.0; + } + + public HalfApron( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Construction/Ankhs.cs b/Scripts/Items/Construction/Ankhs.cs new file mode 100644 index 0000000..a4ebd3e --- /dev/null +++ b/Scripts/Items/Construction/Ankhs.cs @@ -0,0 +1,428 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Mobiles; +using Server.Items; +using Server.Regions; +using Server.Network; +using Server.Misc; +using Server.Gumps; +using System.Globalization; + +namespace Server.Items +{ + public class Ankhs + { + public const int ResurrectRange = 8; + + public static void Resurrect( Mobile m, Item item ) + { + if ( m.Alive ) + return; + + if ( !m.InRange( item.GetWorldLocation(), ResurrectRange ) ) + m.SendLocalizedMessage( 500446 ); // That is too far away. + else if( m.Map != null && m.Map.CanFit( m.Location, 16, false, false ) ) + { + m.CloseGump( typeof( ResurrectGump ) ); + m.SendGump( new ResurrectGump( m, ResurrectMessage.VirtueShrine ) ); + } + else + m.SendLocalizedMessage( 502391 ); // Thou can not be resurrected there! + } + } + + public class Shrine : Item + { + [Constructable] + public Shrine( ) : base( 0x1BC3 ) + { + Movable = false; + Visible = false; + Name = "shrine"; + } + + public Shrine( Serial serial ) : base( serial ) + { + } + + public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) ) + Ankhs.Resurrect( m, this ); + } + + +//Region reg = Region.Find( this.Location, this.Map ); +//reg.IsPartOf( "the Castle of the Black Knight" ) + + + public override bool HandlesOnSpeech{ get{ return true; } } + + public override void OnSpeech( SpeechEventArgs e ) + { + if ( !e.Handled ) + { + Mobile m = e.Mobile; + + string keyword = ""; + + if ( m.Region.IsPartOf( "the Altar of Golden Rangers" ) || m.Region.IsPartOf( "the Ranger Outpost" ) ){ keyword = "Aurum"; } + else if ( m.Region.IsPartOf( "the Moon's Core" ) ){ keyword = "Ultimum Potentiae"; } + else if ( m.Region.IsPartOf( "the Black Magic Guild" ) ){ keyword = "Kas"; } + else if ( m.Region.IsPartOf( "the Tomb of Kas the Bloody Handed" ) ){ keyword = "Mortem Mangone"; } + else if ( m.Region.IsPartOf( "the Tomb of Malak the Syth Lord" ) ){ keyword = "Anakasu Arrii Venaal"; } + + if ( !m.Player ) + return; + + if ( !m.InRange( GetWorldLocation(), 10 ) ) + return; + + bool isMatch = false; + + if ( e.Speech.ToLower().IndexOf( keyword.ToLower() ) >= 0 ) + isMatch = true; + + if ( !isMatch ) + return; + + e.Handled = true; + + if ( this.Name == "Kargoth" && this.Name == keyword ){} + } + } + + public override void OnDoubleClickDead( Mobile m ) + { + Ankhs.Resurrect( m, this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class AnkhWest : Item + { + private InternalItem m_Item; + + [Constructable] + public AnkhWest() : this( false ) + { + } + + [Constructable] + public AnkhWest( bool bloodied ) : base( bloodied ? 0x1D98 : 0x3 ) + { + Movable = false; + + m_Item = new InternalItem( bloodied, this ); + } + + public AnkhWest( Serial serial ) : base( serial ) + { + } + + public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) ) + Ankhs.Resurrect( m, this ); + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get{ return base.Hue; } + set{ base.Hue = value; if ( m_Item.Hue != value ) m_Item.Hue = value; } + } + + public override void OnDoubleClickDead( Mobile m ) + { + Ankhs.Resurrect( m, this ); + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X, Y + 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + + private class InternalItem : Item + { + private AnkhWest m_Item; + + public InternalItem( bool bloodied, AnkhWest item ) : base( bloodied ? 0x1D97 : 0x2 ) + { + Movable = false; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X, Y - 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) ) + Ankhs.Resurrect( m, this ); + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get{ return base.Hue; } + set{ base.Hue = value; if ( m_Item.Hue != value ) m_Item.Hue = value; } + } + + public override void OnDoubleClickDead( Mobile m ) + { + Ankhs.Resurrect( m, this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as AnkhWest; + } + } + } + + [TypeAlias( "Server.Items.AnkhEast" )] + public class AnkhNorth : Item + { + private InternalItem m_Item; + + [Constructable] + public AnkhNorth() : this( false ) + { + } + + [Constructable] + public AnkhNorth( bool bloodied ) : base( bloodied ? 0x1E5D : 0x4 ) + { + Movable = false; + + m_Item = new InternalItem( bloodied, this ); + } + + public AnkhNorth( Serial serial ) + : base( serial ) + { + } + + public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) ) + Ankhs.Resurrect( m, this ); + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get{ return base.Hue; } + set{ base.Hue = value; if ( m_Item.Hue != value ) m_Item.Hue = value; } + } + + public override void OnDoubleClickDead( Mobile m ) + { + Ankhs.Resurrect( m, this ); + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + + [TypeAlias( "Server.Items.AnkhEast+InternalItem" )] + private class InternalItem : Item + { + private AnkhNorth m_Item; + + public InternalItem( bool bloodied, AnkhNorth item ) + : base( bloodied ? 0x1E5C : 0x5 ) + { + Movable = false; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( Parent == null && Utility.InRange( Location, m.Location, 1 ) && !Utility.InRange( Location, oldLocation, 1 ) ) + Ankhs.Resurrect( m, this ); + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get{ return base.Hue; } + set{ base.Hue = value; if ( m_Item.Hue != value ) m_Item.Hue = value; } + } + + public override void OnDoubleClickDead( Mobile m ) + { + Ankhs.Resurrect( m, this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as AnkhNorth; + } + } + } +} diff --git a/Scripts/Items/Construction/Chairs/Benchs.cs b/Scripts/Items/Construction/Chairs/Benchs.cs new file mode 100644 index 0000000..4c067d1 --- /dev/null +++ b/Scripts/Items/Construction/Chairs/Benchs.cs @@ -0,0 +1,33 @@ +using System; + +namespace Server.Items +{ + [Furniture] + [Flipable( 0xB2D, 0xB2C )] + public class WoodenBench : Item + { + [Constructable] + public WoodenBench() : base( 0xB2D ) + { + Weight = 6; + } + + public WoodenBench(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Chairs/Chairs.cs b/Scripts/Items/Construction/Chairs/Chairs.cs new file mode 100644 index 0000000..3543b9e --- /dev/null +++ b/Scripts/Items/Construction/Chairs/Chairs.cs @@ -0,0 +1,161 @@ +using System; + +namespace Server.Items +{ + [Furniture] + [Flipable( 0xB4F, 0xB4E, 0xB50, 0xB51 )] + public class FancyWoodenChairCushion : Item + { + [Constructable] + public FancyWoodenChairCushion() : base(0xB4F) + { + Weight = 20.0; + } + + public FancyWoodenChairCushion(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 20.0; + } + } + + [Furniture] + [Flipable( 0xB53, 0xB52, 0xB54, 0xB55 )] + public class WoodenChairCushion : Item + { + [Constructable] + public WoodenChairCushion() : base(0xB53) + { + Weight = 20.0; + } + + public WoodenChairCushion(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 20.0; + } + } + + [Furniture] + [Flipable( 0xB57, 0xB56, 0xB59, 0xB58 )] + public class WoodenChair : Item + { + [Constructable] + public WoodenChair() : base(0xB57) + { + Weight = 20.0; + } + + public WoodenChair(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 20.0; + } + } + + [Furniture] + [Flipable( 0xB5B, 0xB5A, 0xB5C, 0xB5D )] + public class BambooChair : Item + { + [Constructable] + public BambooChair() : base(0xB5B) + { + Weight = 20.0; + } + + public BambooChair(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 20.0; + } + } + + [DynamicFliping] + [Flipable(0x1218, 0x1219, 0x121A, 0x121B)] + public class StoneChair : Item + { + [Constructable] + public StoneChair() : base(0x1218) + { + Weight = 20; + } + + public StoneChair(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Chairs/Stools.cs b/Scripts/Items/Construction/Chairs/Stools.cs new file mode 100644 index 0000000..00ea2a2 --- /dev/null +++ b/Scripts/Items/Construction/Chairs/Stools.cs @@ -0,0 +1,66 @@ +using System; + +namespace Server.Items +{ + [Furniture] + public class Stool : Item + { + [Constructable] + public Stool() : base( 0xA2A ) + { + Weight = 10.0; + } + + public Stool(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 10.0; + } + } + + [Furniture] + public class FootStool : Item + { + [Constructable] + public FootStool() : base( 0xB5E ) + { + Weight = 6.0; + } + + public FootStool(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 10.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Chairs/Thrones.cs b/Scripts/Items/Construction/Chairs/Thrones.cs new file mode 100644 index 0000000..7d21871 --- /dev/null +++ b/Scripts/Items/Construction/Chairs/Thrones.cs @@ -0,0 +1,69 @@ +using System; + +namespace Server.Items +{ + [Furniture] + [Flipable(0xB32, 0xB33)] + public class Throne : Item + { + [Constructable] + public Throne() : base(0xB33) + { + Weight = 1.0; + } + + public Throne(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 1.0; + } + } + + [Furniture] + [Flipable( 0xB2E, 0xB2F, 0xB31, 0xB30 )] + public class WoodenThrone : Item + { + [Constructable] + public WoodenThrone() : base(0xB2E) + { + Weight = 15.0; + Hue = 0x49E; + } + + public WoodenThrone(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 15.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Decorative/DecorativeShield.cs b/Scripts/Items/Construction/Decorative/DecorativeShield.cs new file mode 100644 index 0000000..fc2d4e6 --- /dev/null +++ b/Scripts/Items/Construction/Decorative/DecorativeShield.cs @@ -0,0 +1,426 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + + [FlipableAttribute( 0x156C, 0x156D )] + public class DecorativeShield1 : Item + { + [Constructable] + public DecorativeShield1() : base( 0x156C ) + { + Movable = false; + } + + public DecorativeShield1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + [FlipableAttribute( 0x156E, 0x156F )] + public class DecorativeShield2 : Item + { + [Constructable] + public DecorativeShield2() : base( 0x156E ) + { + Movable = false; + } + + public DecorativeShield2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1570, 0x1571 )] + public class DecorativeShield3 : Item + { + [Constructable] + public DecorativeShield3() : base( 0x1570 ) + { + Movable = false; + } + + public DecorativeShield3( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1572, 0x1573 )] + public class DecorativeShield4 : Item + { + [Constructable] + public DecorativeShield4() : base( 0x1572 ) + { + Movable = false; + } + + public DecorativeShield4( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1574, 0x1575 )] + public class DecorativeShield5 : Item + { + [Constructable] + public DecorativeShield5() : base( 0x1574 ) + { + Movable = false; + } + + public DecorativeShield5( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1576, 0x1577 )] + public class DecorativeShield6 : Item + { + [Constructable] + public DecorativeShield6() : base( 0x1576 ) + { + Movable = false; + } + + public DecorativeShield6( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1578, 0x1579 )] + public class DecorativeShield7 : Item + { + [Constructable] + public DecorativeShield7() : base( 0x1578 ) + { + Movable = false; + } + + public DecorativeShield7( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x157A, 0x157B )] + public class DecorativeShield8 : Item + { + [Constructable] + public DecorativeShield8() : base( 0x157A ) + { + Movable = false; + } + + public DecorativeShield8( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x157C, 0x157D )] + public class DecorativeShield9 : Item + { + [Constructable] + public DecorativeShield9() : base( 0x157C ) + { + Movable = false; + } + + public DecorativeShield9( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x157E, 0x157F )] + public class DecorativeShield10 : Item + { + [Constructable] + public DecorativeShield10() : base( 0x157E ) + { + Movable = false; + } + + public DecorativeShield10( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1580, 0x1581 )] + public class DecorativeShield11 : Item + { + [Constructable] + public DecorativeShield11() : base( 0x1580 ) + { + Movable = false; + } + + public DecorativeShield11( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1582, 0x1583, 0x1634, 0x1635 )] + public class DecorativeShieldSword1North : Item + { + [Constructable] + public DecorativeShieldSword1North() : base( Utility.Random( 0x1582, 2 ) ) + { + Movable = false; + } + + public DecorativeShieldSword1North( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1634, 0x1635, 0x1582, 0x1583 )] + public class DecorativeShieldSword1West : Item + { + [Constructable] + public DecorativeShieldSword1West() : base( Utility.Random( 0x1634, 2 ) ) + { + Movable = false; + } + + public DecorativeShieldSword1West( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1584, 0x1585, 0x1636, 0x1637 )] + public class DecorativeShieldSword2North : Item + { + [Constructable] + public DecorativeShieldSword2North() : base( Utility.Random( 0x1584, 2 ) ) + { + Movable = false; + } + + public DecorativeShieldSword2North( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1636, 0x1637, 0x1584, 0x1585 )] + public class DecorativeShieldSword2West : Item + { + [Constructable] + public DecorativeShieldSword2West() : base( Utility.Random( 0x1636, 2 ) ) + { + Movable = false; + } + + public DecorativeShieldSword2West( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Decorative/DecorativeWeapon.cs b/Scripts/Items/Construction/Decorative/DecorativeWeapon.cs new file mode 100644 index 0000000..b93fe40 --- /dev/null +++ b/Scripts/Items/Construction/Decorative/DecorativeWeapon.cs @@ -0,0 +1,546 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0x155E, 0x155F, 0x155C, 0x155D )] + public class DecorativeBowWest : Item + { + [Constructable] + public DecorativeBowWest() : base( Utility.Random( 0x155E, 2 ) ) + { + Movable = false; + } + + public DecorativeBowWest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x155C, 0x155D, 0x155E, 0x155F )] + public class DecorativeBowNorth : Item + { + [Constructable] + public DecorativeBowNorth() : base( Utility.Random( 0x155C, 2 ) ) + { + Movable = false; + } + + public DecorativeBowNorth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1560, 0x1561, 0x1562, 0x1563 )] + public class DecorativeAxeNorth : Item + { + [Constructable] + public DecorativeAxeNorth() : base( Utility.Random( 0x1560, 2 ) ) + { + Movable = false; + } + + public DecorativeAxeNorth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1562, 0x1563, 0x1560, 0x1561 )] + public class DecorativeAxeWest : Item + { + [Constructable] + public DecorativeAxeWest() : base( Utility.Random( 0x1562, 2 ) ) + { + Movable = false; + } + + public DecorativeAxeWest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DecorativeSwordNorth : Item + { + private InternalItem m_Item; + + [Constructable] + public DecorativeSwordNorth() : base( 0x1565 ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public DecorativeSwordNorth( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private DecorativeSwordNorth m_Item; + + public InternalItem( DecorativeSwordNorth item ) : base( 0x1564 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as DecorativeSwordNorth; + } + } + } + public class DecorativeSwordWest : Item + { + private InternalItem m_Item; + + [Constructable] + public DecorativeSwordWest() : base( 0x1566 ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public DecorativeSwordWest( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y - 1 , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private DecorativeSwordWest m_Item; + + public InternalItem( DecorativeSwordWest item ) : base( 0x1567 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y + 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as DecorativeSwordWest; + } + } + } + public class DecorativeDAxeNorth : Item + { + private InternalItem m_Item; + + [Constructable] + public DecorativeDAxeNorth() : base( 0x1569 ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public DecorativeDAxeNorth( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private DecorativeDAxeNorth m_Item; + + public InternalItem( DecorativeDAxeNorth item ) : base( 0x1568 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as DecorativeDAxeNorth; + } + } + } + public class DecorativeDAxeWest : Item + { + private InternalItem m_Item; + + [Constructable] + public DecorativeDAxeWest() : base( 0x156A ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public DecorativeDAxeWest( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y - 1 , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private DecorativeDAxeWest m_Item; + + public InternalItem( DecorativeDAxeWest item ) : base( 0x156B ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y + 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as DecorativeDAxeWest; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Decorative/PaintingPortraits.cs b/Scripts/Items/Construction/Decorative/PaintingPortraits.cs new file mode 100644 index 0000000..eaa06bc --- /dev/null +++ b/Scripts/Items/Construction/Decorative/PaintingPortraits.cs @@ -0,0 +1,200 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + public class LargePainting : Item + { + [Constructable] + public LargePainting() : base( 0x0EA0 ) + { + Movable = false; + } + + public LargePainting( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x0E9F, 0x0EC8 )] + public class WomanPortrait1 : Item + { + [Constructable] + public WomanPortrait1() : base( 0x0E9F ) + { + Movable = false; + } + + public WomanPortrait1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x0EE7, 0x0EC9 )] + public class WomanPortrait2 : Item + { + [Constructable] + public WomanPortrait2() : base( 0x0EE7 ) + { + Movable = false; + } + + public WomanPortrait2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x0EA2, 0x0EA1 )] + public class ManPortrait1 : Item + { + [Constructable] + public ManPortrait1() : base( 0x0EA2 ) + { + Movable = false; + } + + public ManPortrait1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x0EA3, 0x0EA4 )] + public class ManPortrait2 : Item + { + [Constructable] + public ManPortrait2() : base( 0x0EA3 ) + { + Movable = false; + } + + public ManPortrait2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x0EA6, 0x0EA5 )] + public class LadyPortrait1 : Item + { + [Constructable] + public LadyPortrait1() : base( 0x0EA6 ) + { + Movable = false; + } + + public LadyPortrait1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x0EA7, 0x0EA8 )] + public class LadyPortrait2 : Item + { + [Constructable] + public LadyPortrait2() : base( 0x0EA7 ) + { + Movable = false; + } + + public LadyPortrait2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Decorative/Tapestry.cs b/Scripts/Items/Construction/Decorative/Tapestry.cs new file mode 100644 index 0000000..76055d1 --- /dev/null +++ b/Scripts/Items/Construction/Decorative/Tapestry.cs @@ -0,0 +1,1192 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + public class Tapestry1N : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry1N() : base( 0xEAA ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry1N( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private Tapestry1N m_Item; + + public InternalItem( Tapestry1N item ) : base( 0xEAB ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry1N; + } + } + } + + public class Tapestry2N : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry2N() : base( 0xEAC ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry2N( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private Tapestry2N m_Item; + + public InternalItem( Tapestry2N item ) : base( 0xEAD ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry2N; + } + } + } + public class Tapestry2W : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry2W() : base( 0xEAE ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry2W( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y - 1 , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private Tapestry2W m_Item; + + public InternalItem( Tapestry2W item ) : base( 0xEAF ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y + 1 , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry2W; + } + } + } + + public class Tapestry3N : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry3N() : base( 0xFD6 ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry3N( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 2, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private Tapestry3N m_Item; + + public InternalItem( Tapestry3N item ) : base( 0xFD5 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 2, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry3N; + } + } + } + + public class Tapestry3W : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry3W() : base( 0xFD7 ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry3W( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y - 2 , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private Tapestry3W m_Item; + + public InternalItem( Tapestry3W item ) : base( 0xFD8 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y + 2 , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry3W; + } + } + } + + public class Tapestry4N : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry4N() : base( 0xFDA ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry4N( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private Tapestry4N m_Item; + + public InternalItem( Tapestry4N item ) : base( 0xFD9 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry4N; + } + } + } + public class Tapestry4W : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry4W() : base( 0xFDB ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry4W( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y - 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + + private class InternalItem : Item + { + private Tapestry4W m_Item; + + public InternalItem( Tapestry4W item ) : base( 0xFDC ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y + 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry4W; + } + } + } + + public class Tapestry5N : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry5N() : base( 0xFDE ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry5N( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private Tapestry5N m_Item; + + public InternalItem( Tapestry5N item ) : base( 0xFDD ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry5N; + } + } + } + public class Tapestry5W : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry5W() : base( 0xFDF ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry5W( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y - 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + + private class InternalItem : Item + { + private Tapestry5W m_Item; + + public InternalItem( Tapestry5W item ) : base( 0xFE0 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y + 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry5W; + } + } + } + + public class Tapestry6N : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry6N() : base( 0xFE2 ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry6N( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + private class InternalItem : Item + { + private Tapestry6N m_Item; + + public InternalItem( Tapestry6N item ) : base( 0xFE1 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y , Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry6N; + } + } + } + public class Tapestry6W : Item + { + private InternalItem m_Item; + + [Constructable] + public Tapestry6W() : base( 0xFE3 ) + { + Movable = false; + + m_Item = new InternalItem( this ); + } + + public Tapestry6W( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y - 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + } + + private class InternalItem : Item + { + private Tapestry6W m_Item; + + public InternalItem( Tapestry6W item ) : base( 0xFE4 ) + { + Movable = true; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X , Y + 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as Tapestry6W; + } + } + } +} diff --git a/Scripts/Items/Construction/Doors/BaseDoor.cs b/Scripts/Items/Construction/Doors/BaseDoor.cs new file mode 100644 index 0000000..960e4ce --- /dev/null +++ b/Scripts/Items/Construction/Doors/BaseDoor.cs @@ -0,0 +1,829 @@ +using System; +using System.Collections.Generic; +using Server.Commands; +using Server.Network; +using Server.Targeting; +using Server.Mobiles; + +namespace Server.Items +{ + public abstract class BaseDoor : Item, ILockable, ITelekinesisable + { + private TrapType m_TrapType; + private int m_TrapPower; + private int m_TrapLevel; + + [CommandProperty( AccessLevel.GameMaster )] + public TrapType TrapType + { + get + { + return m_TrapType; + } + set + { + m_TrapType = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TrapPower + { + get + { + return m_TrapPower; + } + set + { + m_TrapPower = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TrapLevel + { + get + { + return m_TrapLevel; + } + set + { + m_TrapLevel = value; + } + } + + private bool m_Open, m_Locked; + private int m_OpenedID, m_OpenedSound; + private int m_ClosedID, m_ClosedSound; + private Point3D m_Offset; + private BaseDoor m_Link; + private uint m_KeyValue; + private DateTime m_Sealed; + private DateTime m_Rigged; + + private Timer m_Timer; + + private static Point3D[] m_Offsets = new Point3D[] + { + new Point3D(-1, 1, 0 ), + new Point3D( 1, 1, 0 ), + new Point3D(-1, 0, 0 ), + new Point3D( 1,-1, 0 ), + new Point3D( 1, 1, 0 ), + new Point3D( 1,-1, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0,-1, 0 ), + + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ), + new Point3D( 0, 0, 0 ) + }; + + // Called by RunUO + public static void Initialize() + { + EventSink.OpenDoorMacroUsed += new OpenDoorMacroEventHandler( EventSink_OpenDoorMacroUsed ); + + CommandSystem.Register( "Link", AccessLevel.GameMaster, new CommandEventHandler( Link_OnCommand ) ); + CommandSystem.Register( "ChainLink", AccessLevel.GameMaster, new CommandEventHandler( ChainLink_OnCommand ) ); + } + + [Usage( "Link" )] + [Description( "Links two targeted doors together." )] + private static void Link_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( Link_OnFirstTarget ) ); + e.Mobile.SendMessage( "Target the first door to link." ); + } + + private static void Link_OnFirstTarget( Mobile from, object targeted ) + { + BaseDoor door = targeted as BaseDoor; + + if ( door == null ) + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( Link_OnFirstTarget ) ); + from.SendMessage( "That is not a door. Try again." ); + } + else + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetStateCallback( Link_OnSecondTarget ), door ); + from.SendMessage( "Target the second door to link." ); + } + } + + private static void Link_OnSecondTarget( Mobile from, object targeted, object state ) + { + BaseDoor first = (BaseDoor)state; + BaseDoor second = targeted as BaseDoor; + + if ( second == null ) + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetStateCallback( Link_OnSecondTarget ), first ); + from.SendMessage( "That is not a door. Try again." ); + } + else + { + first.Link = second; + second.Link = first; + from.SendMessage( "The doors have been linked." ); + } + } + + [Usage( "ChainLink" )] + [Description( "Chain-links two or more targeted doors together." )] + private static void ChainLink_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetStateCallback( ChainLink_OnTarget ), new List() ); + e.Mobile.SendMessage( "Target the first of a sequence of doors to link." ); + } + + private static void ChainLink_OnTarget( Mobile from, object targeted, object state ) + { + BaseDoor door = targeted as BaseDoor; + + if ( door == null ) + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetStateCallback( ChainLink_OnTarget ), state ); + from.SendMessage( "That is not a door. Try again." ); + } + else + { + List list = (List)state; + + if ( list.Count > 0 && list[0] == door ) + { + if ( list.Count >= 2 ) + { + for ( int i = 0; i < list.Count; ++i ) + list[i].Link = list[(i + 1) % list.Count]; + + from.SendMessage( "The chain of doors have been linked." ); + } + else + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetStateCallback( ChainLink_OnTarget ), state ); + from.SendMessage( "You have not yet targeted two unique doors. Target the second door to link." ); + } + } + else if ( list.Contains( door ) ) + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetStateCallback( ChainLink_OnTarget ), state ); + from.SendMessage( "You have already targeted that door. Target another door, or retarget the first door to complete the chain." ); + } + else + { + list.Add( door ); + + from.BeginTarget( -1, false, TargetFlags.None, new TargetStateCallback( ChainLink_OnTarget ), state ); + + if ( list.Count == 1 ) + from.SendMessage( "Target the second door to link." ); + else + from.SendMessage( "Target another door to link. To complete the chain, retarget the first door." ); + } + } + } + + private void SendMessageTo( Mobile to, int number, int hue ) + { + if ( Deleted || !to.CanSee( this ) ) + return; + + to.Send( new Network.MessageLocalized( Serial, ItemID, Network.MessageType.Regular, hue, 3, number, "", "" ) ); + } + + private void SendMessageTo( Mobile to, string text, int hue ) + { + if ( Deleted || !to.CanSee( this ) ) + return; + + to.Send( new Network.UnicodeMessage( Serial, ItemID, Network.MessageType.Regular, hue, 3, "ENU", "", text ) ); + } + + private static void EventSink_OpenDoorMacroUsed( OpenDoorMacroEventArgs args ) + { + Mobile m = args.Mobile; + + if ( m.Map != null ) + { + int x = m.X, y = m.Y; + + switch ( m.Direction & Direction.Mask ) + { + case Direction.North: --y; break; + case Direction.Right: ++x; --y; break; + case Direction.East: ++x; break; + case Direction.Down: ++x; ++y; break; + case Direction.South: ++y; break; + case Direction.Left: --x; ++y; break; + case Direction.West: --x; break; + case Direction.Up: --x; --y; break; + } + + Sector sector = m.Map.GetSector( x, y ); + + foreach ( Item item in sector.Items ) + { + if ( item.Location.X == x && item.Location.Y == y && (item.Z + item.ItemData.Height) > m.Z && (m.Z + 16) > item.Z && item is BaseDoor && m.CanSee( item ) && m.InLOS( item ) ) + { + if ( m.CheckAlive() ) + { + m.SendLocalizedMessage( 500024 ); // Opening door... + item.OnDoubleClick( m ); + } + + break; + } + } + } + } + + public static Point3D GetOffset( DoorFacing facing ) + { + return m_Offsets[(int)facing]; + } + + private class InternalTimer : Timer + { + private BaseDoor m_Door; + + public InternalTimer( BaseDoor door ) : base( TimeSpan.FromSeconds( 20.0 ), TimeSpan.FromSeconds( 10.0 ) ) + { + Priority = TimerPriority.OneSecond; + m_Door = door; + } + + protected override void OnTick() + { + if ( m_Door.Open && m_Door.IsFreeToClose() ) + m_Door.Open = false; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Locked + { + get + { + return m_Locked; + } + set + { + m_Locked = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime Sealed + { + get + { + return m_Sealed; + } + set + { + m_Sealed = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime Rigged + { + get + { + return m_Rigged; + } + set + { + m_Rigged = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public uint KeyValue + { + get + { + return m_KeyValue; + } + set + { + m_KeyValue = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Open + { + get + { + return m_Open; + } + set + { + if ( m_Open != value ) + { + m_Open = value; + + ItemID = m_Open ? m_OpenedID : m_ClosedID; + + if ( m_Open ) + Location = new Point3D( X + m_Offset.X, Y + m_Offset.Y, Z + m_Offset.Z ); + else + Location = new Point3D( X - m_Offset.X, Y - m_Offset.Y, Z - m_Offset.Z ); + + Effects.PlaySound( this, Map, m_Open ? m_OpenedSound : m_ClosedSound ); + + if ( m_Open ) + m_Timer.Start(); + else + m_Timer.Stop(); + } + } + } + + public bool CanClose() + { + if ( !m_Open ) + return true; + + Map map = Map; + + if ( map == null ) + return false; + + Point3D p = new Point3D( X - m_Offset.X, Y - m_Offset.Y, Z - m_Offset.Z ); + + return CheckFit( map, p, 16 ); + } + + private bool CheckFit( Map map, Point3D p, int height ) + { + if ( map == Map.Internal ) + return false; + + int x = p.X; + int y = p.Y; + int z = p.Z; + + Sector sector = map.GetSector( x, y ); + List items = sector.Items; + List mobs = sector.Mobiles; + + for ( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + + if ( !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue && item.AtWorldPoint( x, y ) && !(item is BaseDoor) ) + { + ItemData id = item.ItemData; + bool surface = id.Surface; + bool impassable = id.Impassable; + + if ( (surface || impassable) && (item.Z + id.CalcHeight) > z && (z + height) > item.Z ) + return false; + } + } + + for ( int i = 0; i < mobs.Count; ++i ) + { + Mobile m = mobs[i]; + + if ( m.Location.X == x && m.Location.Y == y ) + { + if ( m.Hidden && m.AccessLevel > AccessLevel.Player ) + continue; + + if ( !m.Alive ) + continue; + + if ( (m.Z + 16) > z && (z + height) > m.Z ) + return false; + } + } + + return true; + } + + [CommandProperty( AccessLevel.GameMaster )] + public int OpenedID + { + get + { + return m_OpenedID; + } + set + { + m_OpenedID = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int ClosedID + { + get + { + return m_ClosedID; + } + set + { + m_ClosedID = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int OpenedSound + { + get + { + return m_OpenedSound; + } + set + { + m_OpenedSound = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int ClosedSound + { + get + { + return m_ClosedSound; + } + set + { + m_ClosedSound = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Offset + { + get + { + return m_Offset; + } + set + { + m_Offset = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public BaseDoor Link + { + get + { + if ( m_Link != null && m_Link.Deleted ) + m_Link = null; + + return m_Link; + } + set + { + m_Link = value; + } + } + + public virtual bool UseChainedFunctionality{ get{ return false; } } + + public List GetChain() + { + List list = new List(); + BaseDoor c = this; + + do + { + list.Add( c ); + c = c.Link; + } while ( c != null && !list.Contains( c ) ); + + return list; + } + + public bool IsFreeToClose() + { + if ( !UseChainedFunctionality ) + return CanClose(); + + List list = GetChain(); + + bool freeToClose = true; + + for ( int i = 0; freeToClose && i < list.Count; ++i ) + freeToClose = list[i].CanClose(); + + return freeToClose; + } + + public void OnTelekinesis( Mobile from ) + { + Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 ); + Effects.PlaySound( Location, Map, 0x1F5 ); + ExecuteTrap( from ); + + if ( this is ThruDoor ) + from.SendLocalizedMessage( 501857 ); // This spell won't work on that! + else + Use( from ); + } + + public virtual bool IsInside( Mobile from ) + { + return false; + } + + public virtual bool UseLocks() + { + return true; + } + + public virtual void BeginDoor( Mobile from ) + { + if ( m_Locked && !m_Open && UseLocks() ) + { + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502502 ); // That is locked, but you open it with your godly powers. + } + else if ( Key.ContainsKey( from.Backpack, this.KeyValue ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 501282 ); // You quickly unlock, open, and relock the door + } + else if ( IsInside( from ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 501280 ); // That is locked, but is usable from the inside. + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502503 ); // That is locked. + return; + } + } + else if ( m_Sealed > DateTime.Now ) + { + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502502 ); // That is locked, but you open it with your godly powers. + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502503 ); // That is locked. + return; + } + } + else if ( m_Rigged > DateTime.Now ) + { + ExecuteTrap( from ); + } + } + + public virtual void Use( Mobile from ) + { + BeginDoor( from ); + + if ( m_Open && !IsFreeToClose() ) + return; + + if ( m_Open ) + OnClosed( from ); + else + OnOpened( from ); + + if ( UseChainedFunctionality ) + { + bool open = !m_Open; + + List list = GetChain(); + + for ( int i = 0; i < list.Count; ++i ) + list[i].Open = open; + } + else + { + Open = !m_Open; + + BaseDoor link = this.Link; + + if ( m_Open && link != null && !link.Open ) + link.Open = true; + } + } + + public virtual bool ExecuteTrap( Mobile from ) + { + if ( m_TrapType != TrapType.None && m_Rigged > DateTime.Now ) + { + Point3D loc = this.GetWorldLocation(); + Map facet = this.Map; + + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + SendMessageTo( from, "That is trapped, but you open it with your godly powers.", 0x3B2 ); + return false; + } + + switch ( m_TrapType ) + { + case TrapType.ExplosionTrap: + { + SendMessageTo( from, 502999, 0x3B2 ); // You set off a trap! + + if ( from.InRange( loc, 3 ) ) + { + int damage; + + if ( m_TrapLevel > 0 ) + damage = Utility.RandomMinMax( 10, 30 ) * m_TrapLevel; + else + damage = m_TrapPower; + + Ultima.Damage( from, damage ); + + // Your skin blisters from the heat! + from.LocalOverheadMessage( Network.MessageType.Regular, 0x2A, 503000 ); + } + + Effects.SendLocationEffect( loc, facet, 0x36BD, 15, 10 ); + Effects.PlaySound( loc, facet, 0x307 ); + + break; + } + case TrapType.MagicTrap: + { + if ( from.InRange( loc, 1 ) ) + from.Damage( m_TrapPower ); + + Effects.PlaySound( loc, Map, 0x307 ); + + Effects.SendLocationEffect( new Point3D( loc.X - 1, loc.Y, loc.Z ), Map, 0x36BD, 15 ); + Effects.SendLocationEffect( new Point3D( loc.X + 1, loc.Y, loc.Z ), Map, 0x36BD, 15 ); + + Effects.SendLocationEffect( new Point3D( loc.X, loc.Y - 1, loc.Z ), Map, 0x36BD, 15 ); + Effects.SendLocationEffect( new Point3D( loc.X, loc.Y + 1, loc.Z ), Map, 0x36BD, 15 ); + + Effects.SendLocationEffect( new Point3D( loc.X + 1, loc.Y + 1, loc.Z + 11 ), Map, 0x36BD, 15 ); + + break; + } + case TrapType.DartTrap: + { + SendMessageTo( from, 502999, 0x3B2 ); // You set off a trap! + + if ( from.InRange( loc, 3 ) ) + { + int damage; + + if ( m_TrapLevel > 0 ) + damage = Utility.RandomMinMax( 5, 15 ) * m_TrapLevel; + else + damage = m_TrapPower; + + Ultima.Damage( from, damage ); + + // A dart imbeds itself in your flesh! + from.LocalOverheadMessage( Network.MessageType.Regular, 0x62, 502998 ); + } + + Effects.PlaySound( loc, facet, 0x223 ); + + break; + } + case TrapType.PoisonTrap: + { + SendMessageTo( from, 502999, 0x3B2 ); // You set off a trap! + + if ( from.InRange( loc, 3 ) ) + { + Poison poison; + + if ( m_TrapLevel > 0 ) + { + poison = Poison.GetPoison( Math.Max( 0, Math.Min( 4, m_TrapLevel - 1 ) ) ); + } + else + { + Ultima.Damage( from, m_TrapPower ); + poison = Poison.Greater; + } + + from.ApplyPoison( from, poison ); + + // You are enveloped in a noxious green cloud! + from.LocalOverheadMessage( Network.MessageType.Regular, 0x44, 503004 ); + } + + Effects.SendLocationEffect( loc, facet, 0x113A, 10, 20 ); + Effects.PlaySound( loc, facet, 0x231 ); + + break; + } + } + + m_TrapType = TrapType.None; + m_TrapPower = 0; + m_TrapLevel = 0; + return true; + } + + return false; + } + + public virtual void OnOpened( Mobile from ) + { + } + + public virtual void OnClosed( Mobile from ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from is BaseCreature && ( ((BaseCreature)from).AI == AIType.AI_Animal || ((BaseCreature)from).AI == AIType.AI_Timid ) ) + from.SendMessage( "Animals cannot use doors!" ); + else if ( from.AccessLevel == AccessLevel.Player && !from.InRange( GetWorldLocation(), 2 ) ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + else + Use( from ); + } + + public BaseDoor( int closedID, int openedID, int openedSound, int closedSound, Point3D offset ) : base( closedID ) + { + m_OpenedID = openedID; + m_ClosedID = closedID; + m_OpenedSound = openedSound; + m_ClosedSound = closedSound; + m_Offset = offset; + + m_Timer = new InternalTimer( this ); + + Movable = false; + } + + public BaseDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_KeyValue ); + + writer.Write( m_Open ); + writer.Write( m_Locked ); + writer.Write( m_OpenedID ); + writer.Write( m_ClosedID ); + writer.Write( m_OpenedSound ); + writer.Write( m_ClosedSound ); + writer.Write( m_Offset ); + writer.Write( m_Link ); + writer.Write( m_Sealed ); + writer.Write( m_Rigged ); + + writer.Write( (int) m_TrapLevel ); + writer.Write( (int) m_TrapPower ); + writer.Write( (int) m_TrapType ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_KeyValue = reader.ReadUInt(); + m_Open = reader.ReadBool(); + m_Locked = reader.ReadBool(); + m_OpenedID = reader.ReadInt(); + m_ClosedID = reader.ReadInt(); + m_OpenedSound = reader.ReadInt(); + m_ClosedSound = reader.ReadInt(); + m_Offset = reader.ReadPoint3D(); + m_Link = reader.ReadItem() as BaseDoor; + m_Sealed = reader.ReadDateTime(); + m_Rigged = reader.ReadDateTime(); + + m_Timer = new InternalTimer( this ); + + if ( m_Open ) + m_Timer.Start(); + + m_TrapLevel = reader.ReadInt(); + m_TrapPower = reader.ReadInt(); + m_TrapType = (TrapType)reader.ReadInt(); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Doors/Doors.cs b/Scripts/Items/Construction/Doors/Doors.cs new file mode 100644 index 0000000..3af9055 --- /dev/null +++ b/Scripts/Items/Construction/Doors/Doors.cs @@ -0,0 +1,358 @@ +using System; + +namespace Server.Items +{ + public enum DoorFacing + { + WestCW, + EastCCW, + WestCCW, + EastCW, + SouthCW, + NorthCCW, + SouthCCW, + NorthCW, + SouthSW, + SouthSE, + WestSS, + WestSN + } + + public class IronGateShort : BaseDoor + { + [Constructable] + public IronGateShort( DoorFacing facing ) : base( 0x84c + (2 * (int)facing), 0x84d + (2 * (int)facing), 0xEC, 0xF3, BaseDoor.GetOffset( facing ) ) + { + } + + public IronGateShort( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class IronGate : BaseDoor + { + [Constructable] + public IronGate( DoorFacing facing ) : base( 0x824 + (2 * (int)facing), 0x825 + (2 * (int)facing), 0xEC, 0xF3, BaseDoor.GetOffset( facing ) ) + { + } + + public IronGate( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LightWoodGate : BaseDoor + { + [Constructable] + public LightWoodGate( DoorFacing facing ) : base( 0x839 + (2 * (int)facing), 0x83A + (2 * (int)facing), 0xEB, 0xF2, BaseDoor.GetOffset( facing ) ) + { + } + + public LightWoodGate( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkWoodGate : BaseDoor + { + [Constructable] + public DarkWoodGate( DoorFacing facing ) : base( 0x866 + (2 * (int)facing), 0x867 + (2 * (int)facing), 0xEB, 0xF2, BaseDoor.GetOffset( facing ) ) + { + } + + public DarkWoodGate( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MetalDoor : BaseDoor + { + [Constructable] + public MetalDoor( DoorFacing facing ) : base( 0x675 + (2 * (int)facing), 0x676 + (2 * (int)facing), 0xEC, 0xF3, BaseDoor.GetOffset( facing ) ) + { + } + + public MetalDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BarredMetalDoor : BaseDoor + { + [Constructable] + public BarredMetalDoor( DoorFacing facing ) : base( 0x685 + (2 * (int)facing), 0x686 + (2 * (int)facing), 0xEC, 0xF3, BaseDoor.GetOffset( facing ) ) + { + } + + public BarredMetalDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BarredMetalDoor2 : BaseDoor + { + [Constructable] + public BarredMetalDoor2( DoorFacing facing ) : base( 0x1FED + (2 * (int)facing), 0x1FEE + (2 * (int)facing), 0xEC, 0xF3, BaseDoor.GetOffset( facing ) ) + { + } + + public BarredMetalDoor2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class RattanDoor : BaseDoor + { + [Constructable] + public RattanDoor( DoorFacing facing ) : base( 0x695 + (2 * (int)facing), 0x696 + (2 * (int)facing), 0xEB, 0xF2, BaseDoor.GetOffset( facing ) ) + { + } + + public RattanDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkWoodDoor : BaseDoor + { + [Constructable] + public DarkWoodDoor( DoorFacing facing ) : base( 0x6A5 + (2 * (int)facing), 0x6A6 + (2 * (int)facing), 0xEA, 0xF1, BaseDoor.GetOffset( facing ) ) + { + } + + public DarkWoodDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumWoodDoor : BaseDoor + { + [Constructable] + public MediumWoodDoor( DoorFacing facing ) : base( 0x6B5 + (2 * (int)facing), 0x6B6 + (2 * (int)facing), 0xEA, 0xF1, BaseDoor.GetOffset( facing ) ) + { + } + + public MediumWoodDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MetalDoor2 : BaseDoor + { + [Constructable] + public MetalDoor2( DoorFacing facing ) : base( 0x6C5 + (2 * (int)facing), 0x6C6 + (2 * (int)facing), 0xEC, 0xF3, BaseDoor.GetOffset( facing ) ) + { + } + + public MetalDoor2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LightWoodDoor : BaseDoor + { + [Constructable] + public LightWoodDoor( DoorFacing facing ) : base( 0x6D5 + (2 * (int)facing), 0x6D6 + (2 * (int)facing), 0xEA, 0xF1, BaseDoor.GetOffset( facing ) ) + { + } + + public LightWoodDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StrongWoodDoor : BaseDoor + { + [Constructable] + public StrongWoodDoor( DoorFacing facing ) : base( 0x6E5 + (2 * (int)facing), 0x6E6 + (2 * (int)facing), 0xEA, 0xF1, BaseDoor.GetOffset( facing ) ) + { + } + + public StrongWoodDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Doors/HouseDoors.cs b/Scripts/Items/Construction/Doors/HouseDoors.cs new file mode 100644 index 0000000..766bb2c --- /dev/null +++ b/Scripts/Items/Construction/Doors/HouseDoors.cs @@ -0,0 +1,253 @@ +using System; +using System.Collections; +using Server; +using Server.Multis; +using Server.Gumps; +using System.Collections.Generic; +using Server.ContextMenus; + +namespace Server.Items +{ + public class MetalHouseDoor : BaseHouseDoor + { + [Constructable] + public MetalHouseDoor( DoorFacing facing ) : base( facing, 0x675 + (2 * (int)facing), 0x676 + (2 * (int)facing), 0xEC, 0xF3, BaseDoor.GetOffset( facing ) ) + { + } + + public MetalHouseDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkWoodHouseDoor : BaseHouseDoor + { + [Constructable] + public DarkWoodHouseDoor( DoorFacing facing ) : base( facing, 0x6A5 + (2 * (int)facing), 0x6A6 + (2 * (int)facing), 0xEA, 0xF1, BaseDoor.GetOffset( facing ) ) + { + } + + public DarkWoodHouseDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GenericHouseDoor : BaseHouseDoor + { + [Constructable] + public GenericHouseDoor( DoorFacing facing, int baseItemID, int openedSound, int closedSound ) : this( facing, baseItemID, openedSound, closedSound, true ) + { + } + + [Constructable] + public GenericHouseDoor( DoorFacing facing, int baseItemID, int openedSound, int closedSound, bool autoAdjust ) + : base( facing, baseItemID + (autoAdjust ? (2 * (int)facing) : 0), baseItemID + 1 + (autoAdjust ? (2 * (int)facing) : 0), openedSound, closedSound, BaseDoor.GetOffset( facing ) ) + { + } + + public GenericHouseDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public abstract class BaseHouseDoor : BaseDoor, ISecurable + { + private DoorFacing m_Facing; + private SecureLevel m_Level; + + [CommandProperty( AccessLevel.GameMaster )] + public DoorFacing Facing + { + get{ return m_Facing; } + set{ m_Facing = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SecureLevel Level + { + get{ return m_Level; } + set{ m_Level = value; } + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + SetSecureLevelEntry.AddTo( from, this, list ); + } + + public BaseHouseDoor( DoorFacing facing, int closedID, int openedID, int openedSound, int closedSound, Point3D offset ) : base( closedID, openedID, openedSound, closedSound, offset ) + { + m_Facing = facing; + m_Level = SecureLevel.Anyone; + } + + public BaseHouse FindHouse() + { + Point3D loc; + + if ( Open ) + loc = new Point3D( X - Offset.X, Y - Offset.Y, Z - Offset.Z ); + else + loc = this.Location; + + return BaseHouse.FindHouseAt( loc, Map, 20 ); + } + + public bool CheckAccess( Mobile m ) + { + BaseHouse house = FindHouse(); + + if ( house == null ) + return false; + + if ( !house.IsAosRules ) + return true; + + if ( house.Public ? house.IsBanned( m ) : !house.HasAccess( m ) ) + return false; + + return house.HasSecureAccess( m, m_Level ); + } + + public override void OnOpened( Mobile from ) + { + BaseHouse house = FindHouse(); + + if ( house != null && house.IsFriend( from ) && from.AccessLevel == AccessLevel.Player && house.RefreshDecay() ) + from.SendLocalizedMessage( 1043293 ); // Your house's age and contents have been refreshed. + + if ( house != null && house.Public && !house.IsFriend( from ) ) + house.Visits++; + } + + public override bool UseLocks() + { + BaseHouse house = FindHouse(); + + return ( house == null || !house.IsAosRules ); + } + + public override void Use( Mobile from ) + { + if ( !CheckAccess( from ) ) + from.SendLocalizedMessage( 1061637 ); // You are not allowed to access this. + else + base.Use( from ); + } + + public BaseHouseDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Level ); + + writer.Write( (int) m_Facing ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Level = (SecureLevel)reader.ReadInt(); + goto case 0; + } + case 0: + { + if ( version < 1 ) + m_Level = SecureLevel.Anyone; + + m_Facing = (DoorFacing)reader.ReadInt(); + break; + } + } + } + + public override bool IsInside( Mobile from ) + { + int x,y,w,h; + + const int r = 2; + const int bs = r*2+1; + const int ss = r+1; + + switch ( m_Facing ) + { + case DoorFacing.WestCW: + case DoorFacing.EastCCW: x = -r; y = -r; w = bs; h = ss; break; + + case DoorFacing.EastCW: + case DoorFacing.WestCCW: x = -r; y = 0; w = bs; h = ss; break; + + case DoorFacing.SouthCW: + case DoorFacing.NorthCCW: x = -r; y = -r; w = ss; h = bs; break; + + case DoorFacing.NorthCW: + case DoorFacing.SouthCCW: x = 0; y = -r; w = ss; h = bs; break; + + //No way to test the 'insideness' of SE Sliding doors on OSI, so leaving them default to false until furthur information gained + + default: return false; + } + + int rx = from.X - X; + int ry = from.Y - Y; + int az = Math.Abs( from.Z - Z ); + + return ( rx >= x && rx < (x+w) && ry >= y && ry < (y+h) && az <= 4 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Doors/Portcullis.cs b/Scripts/Items/Construction/Doors/Portcullis.cs new file mode 100644 index 0000000..129547f --- /dev/null +++ b/Scripts/Items/Construction/Doors/Portcullis.cs @@ -0,0 +1,60 @@ +using System; + +namespace Server.Items +{ + public class PortcullisNS : BaseDoor + { + public override bool UseChainedFunctionality{ get{ return true; } } + + [Constructable] + public PortcullisNS() : base( 0x6F5, 0x6F5, 0xF0, 0xEF, new Point3D( 0, 0, 20 ) ) + { + } + + public PortcullisNS( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PortcullisEW : BaseDoor + { + public override bool UseChainedFunctionality{ get{ return true; } } + + [Constructable] + public PortcullisEW() : base( 0x6F6, 0x6F6, 0xF0, 0xEF, new Point3D( 0, 0, 20 ) ) + { + } + + public PortcullisEW( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Doors/SecretDoors.cs b/Scripts/Items/Construction/Doors/SecretDoors.cs new file mode 100644 index 0000000..235687d --- /dev/null +++ b/Scripts/Items/Construction/Doors/SecretDoors.cs @@ -0,0 +1,186 @@ +using System; + +namespace Server.Items +{ + public class SecretBookDoor : BaseDoor + { + [Constructable] + public SecretBookDoor( DoorFacing facing ) : base( 0x20F8 + (2 * (int)facing), 0x20F9 + (2 * (int)facing), 0x02F, 0x02E, BaseDoor.GetOffset( facing ) ) + { + } + + public SecretBookDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SecretStoneDoor1 : BaseDoor + { + [Constructable] + public SecretStoneDoor1( DoorFacing facing ) : base( 0xE8 + (2 * (int)facing), 0xE9 + (2 * (int)facing), 0xED, 0xF4, BaseDoor.GetOffset( facing ) ) + { + } + + public SecretStoneDoor1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SecretDungeonDoor : BaseDoor + { + [Constructable] + public SecretDungeonDoor( DoorFacing facing ) : base( 0x314 + (2 * (int)facing), 0x315 + (2 * (int)facing), 0xED, 0xF4, BaseDoor.GetOffset( facing ) ) + { + } + + public SecretDungeonDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SecretStoneDoor2 : BaseDoor + { + [Constructable] + public SecretStoneDoor2( DoorFacing facing ) : base( 0x324 + (2 * (int)facing), 0x325 + (2 * (int)facing), 0xED, 0xF4, BaseDoor.GetOffset( facing ) ) + { + } + + public SecretStoneDoor2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SecretWoodenDoor : BaseDoor + { + [Constructable] + public SecretWoodenDoor( DoorFacing facing ) : base( 0x334 + (2 * (int)facing), 0x335 + (2 * (int)facing), 0xED, 0xF4, BaseDoor.GetOffset( facing ) ) + { + } + + public SecretWoodenDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SecretLightWoodDoor : BaseDoor + { + [Constructable] + public SecretLightWoodDoor( DoorFacing facing ) : base( 0x344 + (2 * (int)facing), 0x345 + (2 * (int)facing), 0xED, 0xF4, BaseDoor.GetOffset( facing ) ) + { + } + + public SecretLightWoodDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SecretStoneDoor3 : BaseDoor + { + [Constructable] + public SecretStoneDoor3( DoorFacing facing ) : base( 0x354 + (2 * (int)facing), 0x355 + (2 * (int)facing), 0xED, 0xF4, BaseDoor.GetOffset( facing ) ) + { + } + + public SecretStoneDoor3( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Doors/ThruDoors.cs b/Scripts/Items/Construction/Doors/ThruDoors.cs new file mode 100644 index 0000000..cf402ac --- /dev/null +++ b/Scripts/Items/Construction/Doors/ThruDoors.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections.Generic; +using Server.Commands; +using Server.Network; +using Server.Targeting; +using Server.Mobiles; + +namespace Server.Items +{ + public class ThruDoor : BaseDoor + { + [Constructable] + public ThruDoor() : this( DoorFacing.WestCW ) + { + } + + [Constructable] + public ThruDoor( DoorFacing WestCW ) : base( 1661, 1661, 0xEC, 0xEC, BaseDoor.GetOffset( WestCW ) ) + { + } + + public bool isMetal( Item door ) + { + if ( door.ItemID == 1661 || + door.ItemID == 1663 || + door.ItemID == 1741 || + door.ItemID == 1743 || + door.ItemID == 1677 || + door.ItemID == 1679 || + door.ItemID == 8181 || + door.ItemID == 8183 || + door.ItemID == 2092 || + door.ItemID == 2094 || + door.ItemID == 2132 || + door.ItemID == 2134 || + door.ItemID == 1653 || + door.ItemID == 1655 || + door.ItemID == 1733 || + door.ItemID == 1735 || + door.ItemID == 1669 || + door.ItemID == 1671 || + door.ItemID == 8173 || + door.ItemID == 8175 || + door.ItemID == 2084 || + door.ItemID == 2086 || + door.ItemID == 2124 || + door.ItemID == 2126 + ) + return true; + + return false; + } + + public bool isWood( Item door ) + { + if ( door.ItemID == 1717 || + door.ItemID == 1719 || + door.ItemID == 1749 || + door.ItemID == 1751 || + door.ItemID == 1703 || + door.ItemID == 1701 || + door.ItemID == 1765 || + door.ItemID == 1767 || + door.ItemID == 1709 || + door.ItemID == 1711 || + door.ItemID == 1773 || + door.ItemID == 1775 || + door.ItemID == 1725 || + door.ItemID == 1727 || + door.ItemID == 1757 || + door.ItemID == 1759 + ) + return true; + + return false; + } + + public bool isCloth( Item door ) + { + if ( door.ItemID == 0x0DED || + door.ItemID == 0x0DEE + ) + return true; + + return false; + } + + public bool isFence( Item door ) + { + if ( door.ItemID == 2158 || + door.ItemID == 2160 || + door.ItemID == 2150 || + door.ItemID == 2152 || + door.ItemID == 2105 || + door.ItemID == 2107 || + door.ItemID == 2113 || + door.ItemID == 2115 + ) + return true; + + return false; + } + + public bool isEW( Item door ) + { + if ( door.ItemID == 1661 || + door.ItemID == 1663 || + door.ItemID == 1741 || + door.ItemID == 1743 || + door.ItemID == 1677 || + door.ItemID == 1679 || + door.ItemID == 8181 || + door.ItemID == 8183 || + door.ItemID == 2092 || + door.ItemID == 2094 || + door.ItemID == 2132 || + door.ItemID == 2134 || + door.ItemID == 1709 || + door.ItemID == 1711 || + door.ItemID == 1773 || + door.ItemID == 1775 || + door.ItemID == 1725 || + door.ItemID == 1727 || + door.ItemID == 1757 || + door.ItemID == 1759 || + door.ItemID == 0x0DEE || + door.ItemID == 2158 || + door.ItemID == 2160 || + door.ItemID == 2113 || + door.ItemID == 2115 + ) + return true; + + return false; + } + + public bool isNS( Item door ) + { + if ( door.ItemID == 1717 || + door.ItemID == 1719 || + door.ItemID == 1749 || + door.ItemID == 1751 || + door.ItemID == 1703 || + door.ItemID == 1701 || + door.ItemID == 1765 || + door.ItemID == 1767 || + door.ItemID == 1653 || + door.ItemID == 1655 || + door.ItemID == 1733 || + door.ItemID == 1735 || + door.ItemID == 1669 || + door.ItemID == 1671 || + door.ItemID == 8173 || + door.ItemID == 8175 || + door.ItemID == 2084 || + door.ItemID == 2086 || + door.ItemID == 2124 || + door.ItemID == 2126 || + door.ItemID == 0x0DED || + door.ItemID == 2150 || + door.ItemID == 2152 || + door.ItemID == 2105 || + door.ItemID == 2107 + ) + return true; + + return false; + } + + public Point3D loc( Item door, Mobile from ) + { + Point3D d = door.Location; + Point3D p = d; + + if ( isNS( door ) && from.Y > door.Y ) + d = new Point3D( p.X, p.Y-1, p.Z ); + else if ( isNS( door ) && from.Y < door.Y ) + d = new Point3D( p.X, p.Y+1, p.Z ); + else if ( isEW( door ) && from.X < door.X ) + d = new Point3D( p.X+1, p.Y, p.Z ); + else if ( isEW( door ) && from.X > door.X ) + d = new Point3D( p.X-1, p.Y, p.Z ); + + return d; + } + + public override void Use( Mobile from ) + { + if ( from is PlayerMobile ) + { + BeginDoor( from ); + + int sound = 0; + + if ( isMetal( this ) ) + sound = 0xEC; + else if ( isWood( this ) ) + sound = 0xEA; + else if ( isCloth( this ) ) + sound = 0x48; + else if ( isFence( this ) ) + sound = 0xEB; + + Point3D d = loc( this, from ); + + Server.Mobiles.BaseCreature.TeleportPets( from, d, from.Map ); + if ( ItemID != 8611 ){ from.PlaySound( sound ); } + from.MoveToWorld( d, from.Map ); + } + } + + public ThruDoor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) // Default Serialize method + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) // Default Deserialize method + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Floors/Floors.cs b/Scripts/Items/Construction/Floors/Floors.cs new file mode 100644 index 0000000..cdb577d --- /dev/null +++ b/Scripts/Items/Construction/Floors/Floors.cs @@ -0,0 +1,628 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseFloor : Item + { + public BaseFloor( int itemID, int count ) : base( Utility.Random( itemID, count ) ) + { + Movable = false; + } + + public BaseFloor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StonePaversLight : BaseFloor + { + [Constructable] + public StonePaversLight() : base( 0x519, 4 ) + { + } + + public StonePaversLight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StonePaversMedium : BaseFloor + { + [Constructable] + public StonePaversMedium() : base( 0x51D, 4 ) + { + } + + public StonePaversMedium( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StonePaversDark : BaseFloor + { + [Constructable] + public StonePaversDark() : base( 0x521, 4 ) + { + } + + public StonePaversDark( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GreyFlagstones : BaseFloor + { + [Constructable] + public GreyFlagstones() : base( 0x4FC, 4 ) + { + } + + public GreyFlagstones( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SandFlagstones : BaseFloor + { + [Constructable] + public SandFlagstones() : base( 0x500, 4 ) + { + } + + public SandFlagstones( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MarbleFloor : BaseFloor + { + [Constructable] + public MarbleFloor() : base( 0x50D, 2 ) + { + } + + public MarbleFloor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GreenMarbleFloor : BaseFloor + { + [Constructable] + public GreenMarbleFloor() : base( 0x50F, 2 ) + { + } + + public GreenMarbleFloor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GreyMarbleFloor : BaseFloor + { + [Constructable] + public GreyMarbleFloor() : base( 0x511, 4 ) + { + } + + public GreyMarbleFloor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CobblestonesFloor : BaseFloor + { + [Constructable] + public CobblestonesFloor() : base( 0x515, 4 ) + { + } + + public CobblestonesFloor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SandstoneFloorN : BaseFloor + { + [Constructable] + public SandstoneFloorN() : base( 0x525, 4 ) + { + } + + public SandstoneFloorN( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SandstoneFloorW : BaseFloor + { + [Constructable] + public SandstoneFloorW() : base( 0x529, 4 ) + { + } + + public SandstoneFloorW( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkSandstoneFloorN : BaseFloor + { + [Constructable] + public DarkSandstoneFloorN() : base( 0x52F, 4 ) + { + } + + public DarkSandstoneFloorN( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class DarkSandstoneFloorW : BaseFloor + { + [Constructable] + public DarkSandstoneFloorW() : base( 0x533, 4 ) + { + } + + public DarkSandstoneFloorW( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BricksFloor1 : BaseFloor + { + [Constructable] + public BricksFloor1() : base( 0x4E2, 8 ) + { + } + + public BricksFloor1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BricksFloor2 : BaseFloor + { + [Constructable] + public BricksFloor2() : base( 0x537, 4 ) + { + } + + public BricksFloor2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CaveFloorCenter : BaseFloor + { + [Constructable] + public CaveFloorCenter() : base( 0x53B, 4 ) + { + } + + public CaveFloorCenter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CaveFloorSouth : BaseFloor + { + [Constructable] + public CaveFloorSouth() : base( 0x541, 3 ) + { + } + + public CaveFloorSouth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CaveFloorEast : BaseFloor + { + [Constructable] + public CaveFloorEast() : base( 0x544, 3 ) + { + } + + public CaveFloorEast( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CaveFloorWest : BaseFloor + { + [Constructable] + public CaveFloorWest() : base( 0x54A, 3 ) + { + } + + public CaveFloorWest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CaveFloorNorth : BaseFloor + { + [Constructable] + public CaveFloorNorth() : base( 0x54D, 3 ) + { + } + + public CaveFloorNorth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MarblePavers : BaseFloor + { + [Constructable] + public MarblePavers() : base( 0x495, 4 ) + { + } + + public MarblePavers( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BlueSlateFloorCenter : BaseFloor + { + [Constructable] + public BlueSlateFloorCenter() : base( 0x49B, 1 ) + { + } + + public BlueSlateFloorCenter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GreySlateFloor : BaseFloor + { + [Constructable] + public GreySlateFloor() : base( 0x49C, 1 ) + { + } + + public GreySlateFloor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Misc/BarrelParts.cs b/Scripts/Items/Construction/Misc/BarrelParts.cs new file mode 100644 index 0000000..f61401a --- /dev/null +++ b/Scripts/Items/Construction/Misc/BarrelParts.cs @@ -0,0 +1,115 @@ +using System; + +namespace Server.Items +{ + public class BarrelLid : Item + { + [Constructable] + public BarrelLid() : base(0x1DB8) + { + Weight = 2; + } + + public BarrelLid(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute(0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4)] + public class BarrelStaves : Item + { + [Constructable] + public BarrelStaves() : base(0x1EB1) + { + Weight = 1; + } + + public BarrelStaves(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class BarrelHoops : Item + { + public override int LabelNumber { get { return 1011228; } } // Barrel hoops + + [Constructable] + public BarrelHoops() : base(0x1DB7) + { + Weight = 5; + } + + public BarrelHoops(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class BarrelTap : Item + { + [Constructable] + public BarrelTap() : base(0x1004) + { + Weight = 1; + } + + public BarrelTap(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Misc/Easle.cs b/Scripts/Items/Construction/Misc/Easle.cs new file mode 100644 index 0000000..d3a180f --- /dev/null +++ b/Scripts/Items/Construction/Misc/Easle.cs @@ -0,0 +1,36 @@ +using System; + +namespace Server.Items +{ + [Furniture] + [Flipable(0xF65, 0xF67, 0xF69)] + public class Easle : Item + { + [Constructable] + public Easle() : base(0xF65) + { + Weight = 25.0; + } + + public Easle(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 10.0 ) + Weight = 25.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Misc/MeltedWax.cs b/Scripts/Items/Construction/Misc/MeltedWax.cs new file mode 100644 index 0000000..ea67d3d --- /dev/null +++ b/Scripts/Items/Construction/Misc/MeltedWax.cs @@ -0,0 +1,34 @@ +using System; + +namespace Server.Items +{ + public class MeltedWax : Item + { + public override int LabelNumber{ get{ return 1016492; } } // melted wax + + [Constructable] + public MeltedWax() : base( 0x122A ) + { + Movable = false; + Hue = 0x835; + } + + public MeltedWax(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Misc/MusicStand.cs b/Scripts/Items/Construction/Misc/MusicStand.cs new file mode 100644 index 0000000..ce76b1b --- /dev/null +++ b/Scripts/Items/Construction/Misc/MusicStand.cs @@ -0,0 +1,68 @@ +using System; + +namespace Server.Items +{ + [Furniture] + [Flipable(0xEBB, 0xEBC)] + public class TallMusicStand : Item + { + [Constructable] + public TallMusicStand() : base(0xEBB) + { + Weight = 10.0; + } + + public TallMusicStand(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 8.0 ) + Weight = 10.0; + } + } + + [Furniture] + [Flipable(0xEB6,0xEB8)] + public class ShortMusicStand : Item + { + [Constructable] + public ShortMusicStand() : base(0xEB6) + { + Weight = 10.0; + } + + public ShortMusicStand(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 10.0; + } + } +} diff --git a/Scripts/Items/Construction/Misc/Statues.cs b/Scripts/Items/Construction/Misc/Statues.cs new file mode 100644 index 0000000..d0754bb --- /dev/null +++ b/Scripts/Items/Construction/Misc/Statues.cs @@ -0,0 +1,323 @@ +using System; + +namespace Server.Items +{ + public class StatueSouth : Item + { + [Constructable] + public StatueSouth() : base(0x139A) + { + Weight = 10; + } + + public StatueSouth(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class StatueSouth2 : Item + { + [Constructable] + public StatueSouth2() : base(0x1227) + { + Weight = 10; + } + + public StatueSouth2(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class StatueNorth : Item + { + [Constructable] + public StatueNorth() : base(0x139B) + { + Weight = 10; + } + + public StatueNorth(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class StatueWest : Item + { + [Constructable] + public StatueWest() : base(0x1226) + { + Weight = 10; + } + + public StatueWest(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class StatueEast : Item + { + [Constructable] + public StatueEast() : base(0x139C) + { + Weight = 10; + } + + public StatueEast(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class StatueEast2 : Item + { + [Constructable] + public StatueEast2() : base(0x1224) + { + Weight = 10; + } + + public StatueEast2(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class StatueSouthEast : Item + { + [Constructable] + public StatueSouthEast() : base(0x1225) + { + Weight = 10; + } + + public StatueSouthEast(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class BustSouth : Item + { + [Constructable] + public BustSouth() : base(0x12CB) + { + Weight = 10; + } + + public BustSouth(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class BustEast : Item + { + [Constructable] + public BustEast() : base(0x12CA) + { + Weight = 10; + } + + public BustEast(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class StatuePegasus : Item + { + [Constructable] + public StatuePegasus() : base(0x139D) + { + Weight = 10; + } + + public StatuePegasus(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } + + public class StatuePegasus2 : Item + { + [Constructable] + public StatuePegasus2() : base(0x1228) + { + Weight = 10; + } + + public StatuePegasus2(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Misc/Vase.cs b/Scripts/Items/Construction/Misc/Vase.cs new file mode 100644 index 0000000..9a308b6 --- /dev/null +++ b/Scripts/Items/Construction/Misc/Vase.cs @@ -0,0 +1,58 @@ +using System; + +namespace Server.Items +{ + public class Vase : Item + { + [Constructable] + public Vase() : base( 0xB46 ) + { + Weight = 10; + } + + public Vase( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeVase : Item + { + [Constructable] + public LargeVase() : base( 0xB45 ) + { + Weight = 15; + } + + public LargeVase( Serial serial ) : base(serial) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Misc/Vines.cs b/Scripts/Items/Construction/Misc/Vines.cs new file mode 100644 index 0000000..8de6610 --- /dev/null +++ b/Scripts/Items/Construction/Misc/Vines.cs @@ -0,0 +1,42 @@ +using System; + +namespace Server.Items +{ + public class Vines : Item + { + [Constructable] + public Vines() : this( Utility.Random( 8 ) ) + { + } + + [Constructable] + public Vines( int v ) : base( 0xCEB ) + { + if ( v < 0 || v > 7 ) + v = 0; + + ItemID += v; + Weight = 1.0; + } + + public Vines(Serial serial) : base(serial) + { + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); // version + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Ruined/RuinedItemSingle.cs b/Scripts/Items/Construction/Ruined/RuinedItemSingle.cs new file mode 100644 index 0000000..6c37b87 --- /dev/null +++ b/Scripts/Items/Construction/Ruined/RuinedItemSingle.cs @@ -0,0 +1,315 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xC10, 0xC11 )] + public class RuinedFallenChairA : Item + { + [Constructable] + public RuinedFallenChairA() : base( 0xC10 ) + { + Movable = false; + } + + public RuinedFallenChairA( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + } + + [FlipableAttribute( 0xC13, 0xC12 )] + public class RuinedArmoire : Item + { + [Constructable] + public RuinedArmoire() : base( 0xC13 ) + { + Movable = false; + } + + public RuinedArmoire( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + } + + [FlipableAttribute( 0xC14, 0xC15 )] + public class RuinedBookcase : Item + { + [Constructable] + public RuinedBookcase() : base( 0xC14 ) + { + Movable = false; + } + + public RuinedBookcase( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + } + + public class RuinedBooks : Item + { + [Constructable] + public RuinedBooks() : base( 0xC16 ) + { + Movable = false; + } + + public RuinedBooks( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xC17, 0xC18 )] + public class CoveredChair : Item + { + [Constructable] + public CoveredChair() : base( 0xC17 ) + { + Movable = false; + } + + public CoveredChair( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + } + + [FlipableAttribute( 0xC19, 0xC1A )] + public class RuinedFallenChairB : Item + { + [Constructable] + public RuinedFallenChairB() : base( 0xC19 ) + { + Movable = false; + } + + public RuinedFallenChairB( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + } + + [FlipableAttribute( 0xC1B, 0xC1C, 0xC1E, 0xC1D )] + public class RuinedChair : Item + { + [Constructable] + public RuinedChair() : base( 0xC1B ) + { + Movable = false; + } + + public RuinedChair( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class RuinedClock : Item + { + [Constructable] + public RuinedClock() : base( 0xC1F ) + { + Movable = false; + } + + public RuinedClock( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xC24, 0xC25 )] + public class RuinedDrawers : Item + { + [Constructable] + public RuinedDrawers() : base( 0xC24 ) + { + Movable = false; + } + + public RuinedDrawers( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class RuinedPainting : Item + { + [Constructable] + public RuinedPainting() : base( 0xC2C ) + { + Movable = false; + } + + public RuinedPainting( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xC2D, 0xC2F, 0xC2E, 0xC30 )] + public class WoodDebris : Item + { + [Constructable] + public WoodDebris() : base( 0xC2D ) + { + Movable = false; + } + + public WoodDebris( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Signs/BaseSign.cs b/Scripts/Items/Construction/Signs/BaseSign.cs new file mode 100644 index 0000000..841081e --- /dev/null +++ b/Scripts/Items/Construction/Signs/BaseSign.cs @@ -0,0 +1,31 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + public abstract class BaseSign : Item + { + public BaseSign( int dispID ) : base( dispID ) + { + Movable = false; + } + + public BaseSign( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Signs/LocalizedSign.cs b/Scripts/Items/Construction/Signs/LocalizedSign.cs new file mode 100644 index 0000000..b2c0fbc --- /dev/null +++ b/Scripts/Items/Construction/Signs/LocalizedSign.cs @@ -0,0 +1,56 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LocalizedSign : Sign + { + private int m_LabelNumber; + + public override int LabelNumber{ get{ return m_LabelNumber; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int Number{ get{ return m_LabelNumber; } set{ m_LabelNumber = value; InvalidateProperties(); } } + + [Constructable] + public LocalizedSign( SignType type, SignFacing facing, int labelNumber ) : base( ( 0xB95 + (2 * (int)type) ) + (int)facing ) + { + m_LabelNumber = labelNumber; + } + + [Constructable] + public LocalizedSign( int itemID, int labelNumber ) : base( itemID ) + { + m_LabelNumber = labelNumber; + } + + public LocalizedSign( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( m_LabelNumber ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_LabelNumber = reader.ReadInt(); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Signs/Sign.cs b/Scripts/Items/Construction/Signs/Sign.cs new file mode 100644 index 0000000..d8c385b --- /dev/null +++ b/Scripts/Items/Construction/Signs/Sign.cs @@ -0,0 +1,107 @@ +using System; +using Server; + +namespace Server.Items +{ + public enum SignFacing + { + North, + West + } + + public enum SignType + { + Library, + DarkWoodenPost, + LightWoodenPost, + MetalPostC, + MetalPostB, + MetalPostA, + MetalPost, + Bakery, + Tailor, + Tinker, + Butcher, + Healer, + Mage, + Woodworker, + Customs, + Inn, + Shipwright, + Stables, + BarberShop, + Bard, + Fletcher, + Armourer, + Jeweler, + Tavern, + ReagentShop, + Blacksmith, + Painter, + Provisioner, + Bowyer, + WoodenSign, + BrassSign, + ArmamentsGuild, + ArmourersGuild, + BlacksmithsGuild, + WeaponsGuild, + BardicGuild, + BartersGuild, + ProvisionersGuild, + TradersGuild, + CooksGuild, + HealersGuild, + MagesGuild, + SorcerersGuild, + IllusionistGuild, + MinersGuild, + ArchersGuild, + SeamensGuild, + FishermensGuild, + SailorsGuild, + ShipwrightsGuild, + TailorsGuild, + ThievesGuild, + RoguesGuild, + AssassinsGuild, + TinkersGuild, + WarriorsGuild, + CavalryGuild, + FightersGuild, + MerchantsGuild, + Inns, + Theatre + } + + public class Sign : BaseSign + { + [Constructable] + public Sign( SignType type, SignFacing facing ) : base( ( 0xB95 + (2 * (int)type) ) + (int)facing ) + { + } + + [Constructable] + public Sign( int itemID ) : base( itemID ) + { + } + + public Sign( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Tables/Tables.cs b/Scripts/Items/Construction/Tables/Tables.cs new file mode 100644 index 0000000..b037406 --- /dev/null +++ b/Scripts/Items/Construction/Tables/Tables.cs @@ -0,0 +1,100 @@ +using System; + +namespace Server.Items +{ + [Furniture] + [Flipable(0xB90,0xB7D)] + public class LargeTable : Item + { + [Constructable] + public LargeTable() : base(0xB90) + { + Weight = 1.0; + } + + public LargeTable(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 4.0 ) + Weight = 1.0; + } + } + + [Furniture] + [Flipable(0xB35,0xB34)] + public class Nightstand : Item + { + [Constructable] + public Nightstand() : base(0xB35) + { + Weight = 1.0; + } + + public Nightstand(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 4.0 ) + Weight = 1.0; + } + } + + [Furniture] + [Flipable(0xB8F,0xB7C)] + public class YewWoodTable : Item + { + [Constructable] + public YewWoodTable() : base(0xB8F) + { + Weight = 1.0; + } + + public YewWoodTable(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 4.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Tables/WritingTable.cs b/Scripts/Items/Construction/Tables/WritingTable.cs new file mode 100644 index 0000000..3ece21d --- /dev/null +++ b/Scripts/Items/Construction/Tables/WritingTable.cs @@ -0,0 +1,36 @@ +using System; + +namespace Server.Items +{ + [Furniture] + [Flipable(0xB4A,0xB49, 0xB4B, 0xB4C)] + public class WritingTable : Item + { + [Constructable] + public WritingTable() : base(0xB4A) + { + Weight = 1.0; + } + + public WritingTable(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( Weight == 4.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Walls/BaseWall.cs b/Scripts/Items/Construction/Walls/BaseWall.cs new file mode 100644 index 0000000..d59c654 --- /dev/null +++ b/Scripts/Items/Construction/Walls/BaseWall.cs @@ -0,0 +1,30 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseWall : Item + { + public BaseWall( int itemID ) : base( itemID ) + { + Movable = false; + } + + public BaseWall( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Walls/DarkWoodWall.cs b/Scripts/Items/Construction/Walls/DarkWoodWall.cs new file mode 100644 index 0000000..32a69e0 --- /dev/null +++ b/Scripts/Items/Construction/Walls/DarkWoodWall.cs @@ -0,0 +1,54 @@ +using System; + +namespace Server.Items +{ + public enum DarkWoodWallTypes + { + Corner, + SouthWall, + EastWall, + CornerPost, + EastDoorFrame, + SouthDoorFrame, + WestDoorFrame, + NorthDoorFrame, + SouthWindow, + EastWindow, + CornerMedium, + EastWallMedium, + SouthWallMedium, + CornerPostMedium, + CornerShort, + EastWallShort, + SouthWallShort, + CornerPostShort, + SouthWallVShort, + EastWallVShort + } + + public class DarkWoodWall : BaseWall + { + [Constructable] + public DarkWoodWall( DarkWoodWallTypes type ) : base( 0x0006 + (int)type ) + { + } + + public DarkWoodWall( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Walls/ThickGrayStoneWall.cs b/Scripts/Items/Construction/Walls/ThickGrayStoneWall.cs new file mode 100644 index 0000000..9de353d --- /dev/null +++ b/Scripts/Items/Construction/Walls/ThickGrayStoneWall.cs @@ -0,0 +1,64 @@ +/**************************************** + * NAME : Thick Gray Stone Wall * + * SCRIPT : ThickGrayStoneWall.cs * + * VERSION : v1.00 * + * CREATOR : Mans Sjoberg (Allmight) * + * CREATED : 10-07.2002 * + * **************************************/ + +using System; + +namespace Server.Items +{ + public enum ThickGrayStoneWallTypes + { + WestArch, + NorthArch, + SouthArchTop, + EastArchTop, + EastArch, + SouthArch, + Wall1, + Wall2, + Wall3, + SouthWindow, + Wall4, + EastWindow, + WestArch2, + NorthArch2, + SouthArchTop2, + EastArchTop2, + EastArch2, + SouthArch2, + SWArchEdge2, + SouthWindow2, + NEArchEdge2, + EastWindow2 + } + + public class ThickGrayStoneWall : BaseWall + { + [Constructable] + public ThickGrayStoneWall( ThickGrayStoneWallTypes type) : base( 0x007A + (int)type ) + { + } + + public ThickGrayStoneWall( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Walls/ThinBrickWall.cs b/Scripts/Items/Construction/Walls/ThinBrickWall.cs new file mode 100644 index 0000000..4f3a9a3 --- /dev/null +++ b/Scripts/Items/Construction/Walls/ThinBrickWall.cs @@ -0,0 +1,70 @@ +using System; + +namespace Server.Items +{ + public enum ThinBrickWallTypes + { + Corner, + SouthWall, + EastWall, + CornerPost, + EastDoorFrame, + SouthDoorFrame, + WestDoorFrame, + NorthDoorFrame, + SouthWindow, + EastWindow, + CornerMedium, + SouthWallMedium, + EastWallMedium, + CornerPostMedium, + CornerShort, + SouthWallShort, + EastWallShort, + CornerPostShort, + CornerArch, + SouthArch, + WestArch, + EastArch, + NorthArch, + SouthCenterArchTall, + EastCenterArchTall, + EastCornerArchTall, + SouthCornerArchTall, + SouthCornerArch, + EastCornerArch, + SouthCenterArch, + EastCenterArch, + CornerVVShort, + SouthWallVVShort, + EastWallVVShort, + SouthWallVShort, + EastWallVShort + }; + + public class ThinBrickWall : BaseWall + { + [Constructable] + public ThinBrickWall( ThinBrickWallTypes type ) : base( 0x0033 + (int)type ) + { + } + + public ThinBrickWall( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Walls/ThinStoneWall.cs b/Scripts/Items/Construction/Walls/ThinStoneWall.cs new file mode 100644 index 0000000..10b8c7a --- /dev/null +++ b/Scripts/Items/Construction/Walls/ThinStoneWall.cs @@ -0,0 +1,59 @@ +using System; + +namespace Server.Items +{ + public enum ThinStoneWallTypes + { + Corner, + EastWall, + SouthWall, + CornerPost, + EastDoorFrame, + SouthDoorFrame, + NorthDoorFrame, + WestDoorFrame, + SouthWindow, + EastWindow, + CornerMedium, + SouthWallMedium, + EastWallMedium, + CornerPostMedium, + CornerArch, + EastArch, + SouthArch, + NorthArch, + WestArch, + CornerShort, + EastWallShort, + SouthWallShort, + CornerPostShort, + SouthWallShort2, + EastWallShort2 + } + + public class ThinStoneWall : BaseWall + { + [Constructable] + public ThinStoneWall( ThinStoneWallTypes type ) : base( 0x001A + (int)type ) + { + } + + public ThinStoneWall( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Construction/Walls/WhiteStoneWall.cs b/Scripts/Items/Construction/Walls/WhiteStoneWall.cs new file mode 100644 index 0000000..c0ee6a3 --- /dev/null +++ b/Scripts/Items/Construction/Walls/WhiteStoneWall.cs @@ -0,0 +1,77 @@ +/**************************************** + * NAME : White Stone Wall * + * SCRIPT : WhiteStoneWall.cs * + * VERSION : v1.00 * + * CREATOR : Mans Sjoberg (Allmight) * + * CREATED : 10-07.2002 * + * **************************************/ + +using System; + +namespace Server.Items +{ + public enum WhiteStoneWallTypes + { + EastWall, + SouthWall, + SECorner, + NWCornerPost, + EastArrowLoop, + SouthArrowLoop, + EastWindow, + SouthWindow, + SouthWallMedium, + EastWallMedium, + SECornerMedium, + NWCornerPostMedium, + SouthWallShort, + EastWallShort, + SECornerShort, + NWCornerPostShort, + NECornerPostShort, + SWCornerPostShort, + SouthWallVShort, + EastWallVShort, + SECornerVShort, + NWCornerPostVShort, + SECornerArch, + SouthArch, + WestArch, + EastArch, + NorthArch, + EastBattlement, + SECornerBattlement, + SouthBattlement, + NECornerBattlement, + SWCornerBattlement, + Column, + SouthWallVVShort, + EastWallVVShort + } + + public class WhiteStoneWall : BaseWall + { + [Constructable] + public WhiteStoneWall( WhiteStoneWallTypes type) : base( 0x0057 + (int)type ) + { + } + + public WhiteStoneWall( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Containers/Container.cs b/Scripts/Items/Containers/Container.cs new file mode 100644 index 0000000..92c23d3 --- /dev/null +++ b/Scripts/Items/Containers/Container.cs @@ -0,0 +1,774 @@ +using System; +using System.Collections.Generic; +using Server.Multis; +using Server.Mobiles; +using Server.Network; +using Server.ContextMenus; + +namespace Server.Items +{ + public abstract class BaseContainer : Container + { + public override int DefaultMaxWeight + { + get + { + if ( IsSecure ) + return 0; + + return base.DefaultMaxWeight; + } + } + + public BaseContainer( int itemID ) : base( itemID ) + { + } + + public override bool IsAccessibleTo( Mobile m ) + { + if ( !BaseHouse.CheckAccessible( m, this ) ) + return false; + + return base.IsAccessibleTo( m ); + } + + public override bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight ) + { + if ( this.IsSecure && !BaseHouse.CheckHold( m, this, item, message, checkItems, plusItems, plusWeight ) ) + return false; + + return base.CheckHold( m, item, message, checkItems, plusItems, plusWeight ); + } + + public override bool CheckItemUse( Mobile from, Item item ) + { + if ( IsDecoContainer && item is BaseBook ) + return true; + + return base.CheckItemUse( from, item ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + SetSecureLevelEntry.AddTo( from, this, list ); + } + + public override bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage ) + { + if ( !CheckHold( from, dropped, sendFullMessage, true ) ) + return false; + + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null && house.IsLockedDown( this ) ) + { + if ( dropped is VendorRentalContract || ( dropped is Container && ((Container)dropped).FindItemByType( typeof( VendorRentalContract ) ) != null ) ) + { + from.SendLocalizedMessage( 1062492 ); // You cannot place a rental contract in a locked down container. + return false; + } + + if ( !house.LockDown( from, dropped, false ) ) + return false; + } + + List list = this.Items; + + for ( int i = 0; i < list.Count; ++i ) + { + Item item = list[i]; + + if ( !(item is Container) && item.StackWith( from, dropped, false ) ) + return true; + } + + DropItem( dropped ); + + return true; + } + + public override bool OnDragDropInto( Mobile from, Item item, Point3D p ) + { + if ( !CheckHold( from, item, true, true ) ) + return false; + + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null && house.IsLockedDown( this ) ) + { + if ( item is VendorRentalContract || ( item is Container && ((Container)item).FindItemByType( typeof( VendorRentalContract ) ) != null ) ) + { + from.SendLocalizedMessage( 1062492 ); // You cannot place a rental contract in a locked down container. + return false; + } + + if ( !house.LockDown( from, item, false ) ) + return false; + } + + item.Location = new Point3D( p.X, p.Y, 0 ); + AddItem( item ); + + from.SendSound( GetDroppedSound( item ), GetWorldLocation() ); + + return true; + } + + public override void UpdateTotal( Item sender, TotalType type, int delta ) + { + base.UpdateTotal( sender, type, delta ); + + if ( type == TotalType.Weight && RootParent is Mobile ) + ((Mobile) RootParent).InvalidateProperties(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel > AccessLevel.Player || from.InRange( this.GetWorldLocation(), 2 ) || this.RootParent is PlayerVendor ) + Open( from ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public virtual void Open( Mobile from ) + { + DisplayTo( from ); + } + + public BaseContainer( Serial serial ) : base( serial ) + { + } + + /* Note: base class insertion; we cannot serialize anything here */ + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + } + } + + public class CreatureBackpack : Backpack //Used on BaseCreature + { + [Constructable] + public CreatureBackpack( string name ) + { + Name = name; + Layer = Layer.Backpack; + Hue = 5; + Weight = 3.0; + } + + public override void AddNameProperty( ObjectPropertyList list ) + { + if ( Name != null ) + list.Add( 1075257, Name ); // Contents of ~1_PETNAME~'s pack. + else + base.AddNameProperty( list ); + } + + public override void OnItemRemoved( Item item ) + { + if ( Items.Count == 0 ) + this.Delete(); + + base.OnItemRemoved( item ); + } + + public override bool OnDragLift( Mobile from ) + { + if ( from.AccessLevel > AccessLevel.Player ) + return true; + + from.SendLocalizedMessage( 500169 ); // You cannot pick that up. + return false; + } + + public override bool OnDragDropInto( Mobile from, Item item, Point3D p ) + { + return false; + } + + public override bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage ) + { + return false; + } + + public CreatureBackpack( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 ) + Weight = 13.0; + } + } + + public class StrongBackpack : Backpack //Used on Pack animals + { + [Constructable] + public StrongBackpack() + { + Layer = Layer.Backpack; + Weight = 13.0; + } + + public override bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight ) + { + return base.CheckHold( m, item, false, checkItems, plusItems, plusWeight ); + } + + public override int DefaultMaxWeight{ get{ return 1600; } } + + public override bool CheckContentDisplay( Mobile from ) + { + object root = this.RootParent; + + if ( root is BaseCreature && ((BaseCreature)root).Controlled && ((BaseCreature)root).ControlMaster == from ) + return true; + + return base.CheckContentDisplay( from ); + } + + public StrongBackpack( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 ) + Weight = 13.0; + } + } + + public class Backpack : BaseContainer, IDyable + { + [Constructable] + public Backpack() : base( 0xE75 ) + { + Layer = Layer.Backpack; + Weight = 3.0; + } + + public override int DefaultMaxWeight + { + get { return base.DefaultMaxWeight; } + } + + public Backpack( Serial serial ) : base( serial ) + { + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 && ItemID == 0x9B2 ) + ItemID = 0xE75; + } + } + + public class Pouch : TrapableContainer + { + [Constructable] + public Pouch() : base( 0xE79 ) + { + Weight = 1.0; + } + + public Pouch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Bag : BaseContainer, IDyable + { + [Constructable] + public Bag() : base( 0xE76 ) + { + Weight = 2.0; + } + + public Bag( Serial serial ) : base( serial ) + { + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x2115, 0x2116 )] + public class BigBag : BaseContainer, IDyable + { + [Constructable] + public BigBag() : base( 0x2115 ) + { + Name = "bag"; + Weight = 2.0; + Hue = 0x49E; + } + + public BigBag( Serial serial ) : base( serial ) + { + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) return false; + Hue = sender.DyedHue; + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class Barrel : BaseContainer + { + [Constructable] + public Barrel() : base( 0xE77 ) + { + Weight = 25.0; + } + + public Barrel( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 0.0 ) + Weight = 25.0; + } + } + + public class Keg : BaseContainer + { + [Constructable] + public Keg() : base( 0xE7F ) + { + Weight = 15.0; + } + + public Keg( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PicnicBasket : BaseContainer + { + [Constructable] + public PicnicBasket() : base( 0xE7A ) + { + Weight = 2.0; // Stratics doesn't know weight + } + + public PicnicBasket( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Basket : BaseContainer + { + [Constructable] + public Basket() : base( 0x990 ) + { + Weight = 1.0; // Stratics doesn't know weight + } + + public Basket( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Furniture] + [Flipable( 0x9AA, 0xE7D )] + public class WoodenBox : LockableContainer + { + [Constructable] + public WoodenBox() : base( 0x9AA ) + { + Weight = 4.0; + } + + public WoodenBox( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Furniture] + [Flipable( 0x9A9, 0xE7E )] + public class SmallCrate : LockableContainer + { + [Constructable] + public SmallCrate() : base( 0x9A9 ) + { + Weight = 2.0; + } + + public SmallCrate( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 4.0 ) + Weight = 2.0; + } + } + + [Furniture] + [Flipable( 0xE3F, 0xE3E )] + public class MediumCrate : LockableContainer + { + [Constructable] + public MediumCrate() : base( 0xE3F ) + { + Weight = 2.0; + } + + public MediumCrate( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 6.0 ) + Weight = 2.0; + } + } + + [Furniture] + [Flipable( 0xE3D, 0xE3C )] + public class LargeCrate : LockableContainer + { + [Constructable] + public LargeCrate() : base( 0xE3D ) + { + Weight = 1.0; + } + + public LargeCrate( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 8.0 ) + Weight = 1.0; + } + } + + [DynamicFliping] + [Flipable( 0x9A8, 0xE80 )] + public class MetalBox : LockableContainer + { + [Constructable] + public MetalBox() : base( 0x9A8 ) + { + } + + public MetalBox( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 && Weight == 3 ) + Weight = -1; + } + } + + [DynamicFliping] + [Flipable( 0x9AB, 0xE7C )] + public class MetalChest : LockableContainer + { + [Constructable] + public MetalChest() : base( 0x9AB ) + { + } + + public MetalChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 && Weight == 25 ) + Weight = -1; + } + } + + [DynamicFliping] + [Flipable( 0xE41, 0xE40 )] + public class MetalGoldenChest : LockableContainer + { + [Constructable] + public MetalGoldenChest() : base( 0xE41 ) + { + } + + public MetalGoldenChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 && Weight == 25 ) + Weight = -1; + } + } + + [Furniture] + [Flipable( 0xe43, 0xe42 )] + public class WoodenChest : LockableContainer + { + [Constructable] + public WoodenChest() : base( 0xe43 ) + { + Weight = 2.0; + } + + public WoodenChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 15.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Containers/FurnitureContainer.cs b/Scripts/Items/Containers/FurnitureContainer.cs new file mode 100644 index 0000000..2e0e6bf --- /dev/null +++ b/Scripts/Items/Containers/FurnitureContainer.cs @@ -0,0 +1,267 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.Network; + +namespace Server.Items +{ + [Furniture] + [Flipable( 0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c )] + public class FullBookcase : BaseContainer + { + [Constructable] + public FullBookcase() : base( 0xA97 ) + { + Weight = 1.0; + } + + public FullBookcase( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + [Flipable( 0xa9d, 0xa9e )] + public class EmptyBookcase : BaseContainer + { + [Constructable] + public EmptyBookcase() : base( 0xA9D ) + { + } + + public EmptyBookcase( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( version == 0 && Weight == 1.0 ) + Weight = -1; + } + } + + [Furniture] + [Flipable( 0xa2c, 0xa34 )] + public class Drawer : BaseContainer + { + [Constructable] + public Drawer() : base( 0xA2C ) + { + Weight = 1.0; + } + + public Drawer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + [Flipable( 0xa30, 0xa38 )] + public class FancyDrawer : BaseContainer + { + [Constructable] + public FancyDrawer() : base( 0xA30 ) + { + Weight = 1.0; + } + + public FancyDrawer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + [Flipable( 0xa4f, 0xa53 )] + public class Armoire : BaseContainer + { + [Constructable] + public Armoire() : base( 0xA4F ) + { + Weight = 1.0; + } + + public override void DisplayTo( Mobile m ) + { + if ( DynamicFurniture.Open( this, m ) ) + base.DisplayTo( m ); + } + + public Armoire( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + DynamicFurniture.Close( this ); + } + } + + [Furniture] + [Flipable( 0xa4d, 0xa51 )] + public class FancyArmoire : BaseContainer + { + [Constructable] + public FancyArmoire() : base( 0xA4D ) + { + Weight = 1.0; + } + + public override void DisplayTo( Mobile m ) + { + if ( DynamicFurniture.Open( this, m ) ) + base.DisplayTo( m ); + } + + public FancyArmoire( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + DynamicFurniture.Close( this ); + } + } + + public class DynamicFurniture + { + private static Dictionary m_Table = new Dictionary(); + + public static bool Open( Container c, Mobile m ) + { + if ( m_Table.ContainsKey( c ) ) + { + c.SendRemovePacket(); + Close( c ); + c.Delta( ItemDelta.Update ); + c.ProcessDelta(); + return false; + } + + if ( c is Armoire || c is FancyArmoire ) + { + Timer t = new FurnitureTimer( c, m ); + t.Start(); + m_Table[c] = t; + + switch ( c.ItemID ) + { + case 0xA4D: c.ItemID = 0xA4C; break; + case 0xA4F: c.ItemID = 0xA4E; break; + case 0xA51: c.ItemID = 0xA50; break; + case 0xA53: c.ItemID = 0xA52; break; + } + } + + return true; + } + + public static void Close( Container c ) + { + Timer t = null; + + m_Table.TryGetValue( c, out t ); + + if ( t != null ) + { + t.Stop(); + m_Table.Remove( c ); + } + + if ( c is Armoire || c is FancyArmoire ) + { + switch ( c.ItemID ) + { + case 0xA4C: c.ItemID = 0xA4D; break; + case 0xA4E: c.ItemID = 0xA4F; break; + case 0xA50: c.ItemID = 0xA51; break; + case 0xA52: c.ItemID = 0xA53; break; + } + } + } + } + + public class FurnitureTimer : Timer + { + private Container m_Container; + private Mobile m_Mobile; + + public FurnitureTimer( Container c, Mobile m ) : base( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ) ) + { + Priority = TimerPriority.TwoFiftyMS; + + m_Container = c; + m_Mobile = m; + } + + protected override void OnTick() + { + if ( m_Mobile.Map != m_Container.Map || !m_Mobile.InRange( m_Container.GetWorldLocation(), 3 ) ) + DynamicFurniture.Close( m_Container ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Containers/HouseCrates.cs b/Scripts/Items/Containers/HouseCrates.cs new file mode 100644 index 0000000..8aaf36e --- /dev/null +++ b/Scripts/Items/Containers/HouseCrates.cs @@ -0,0 +1,677 @@ +using System; +using Server; + +namespace Server.Items +{ + [Furniture] + public class CratePlain : BaseContainer + { + [Constructable] + public CratePlain() : base( 0x1A7F ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CratePlain( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateCarpenter : BaseContainer + { + [Constructable] + public CrateCarpenter() : base( 0x1A80 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateCarpenter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateJewels : BaseContainer + { + [Constructable] + public CrateJewels() : base( 0x1A81 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateJewels( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateWizard : BaseContainer + { + [Constructable] + public CrateWizard() : base( 0x1A84 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateWizard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateSmithing : BaseContainer + { + [Constructable] + public CrateSmithing() : base( 0x1A85 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateSmithing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateProvisions : BaseContainer + { + [Constructable] + public CrateProvisions() : base( 0x1A89 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateProvisions( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateTailor : BaseContainer + { + [Constructable] + public CrateTailor() : base( 0x1A8A ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateTailor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateMaps : BaseContainer + { + [Constructable] + public CrateMaps() : base( 0x1A8C ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateMaps( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateSailing : BaseContainer + { + [Constructable] + public CrateSailing() : base( 0x1A8D ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateSailing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateInn : BaseContainer + { + [Constructable] + public CrateInn() : base( 0x1A8E ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateInn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateArms : BaseContainer + { + [Constructable] + public CrateArms() : base( 0x1A8F ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateArms( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateStable : BaseContainer + { + [Constructable] + public CrateStable() : base( 0x1A90 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateStable( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateFletcher : BaseContainer + { + [Constructable] + public CrateFletcher() : base( 0x1A91 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateFletcher( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateMeat : BaseContainer + { + [Constructable] + public CrateMeat() : base( 0x1A97 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateMeat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateTinker : BaseContainer + { + [Constructable] + public CrateTinker() : base( 0x1A98 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateTinker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CratePotions : BaseContainer + { + [Constructable] + public CratePotions() : base( 0x1AA3 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CratePotions( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateFood : BaseContainer + { + [Constructable] + public CrateFood() : base( 0x1AEE ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateFood( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateGold : BaseContainer + { + [Constructable] + public CrateGold() : base( 0x1AEF ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateGold( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateBard : BaseContainer + { + [Constructable] + public CrateBard() : base( 0x1AF0 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateBard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateWax : BaseContainer + { + [Constructable] + public CrateWax() : base( 0x1AF1 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateWax( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateBooks : BaseContainer + { + [Constructable] + public CrateBooks() : base( 0x1AF2 ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateBooks( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateBows : BaseContainer + { + [Constructable] + public CrateBows() : base( 0x1AFC ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateBows( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateHealer : BaseContainer + { + [Constructable] + public CrateHealer() : base( 0x1AFD ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateHealer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class CrateTavern : BaseContainer + { + [Constructable] + public CrateTavern() : base( 0x1AFE ) + { + Weight = 1.0; + Name = "crate"; + Hue = 0x49E; + } + + public CrateTavern( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Containers/InnChest.cs b/Scripts/Items/Containers/InnChest.cs new file mode 100644 index 0000000..42db03e --- /dev/null +++ b/Scripts/Items/Containers/InnChest.cs @@ -0,0 +1,50 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Regions; + +namespace Server.Items +{ + [Flipable(0x0E42, 0x0E43)] + public class InnChest : Item + { + [Constructable] + public InnChest() : base(0x0E42) + { + Name = "Inn Chest"; + Movable = false; + } + + public override void OnDoubleClick(Mobile from) + { + if ( from.Region is InnRegion && from.InRange( this.GetWorldLocation(), 4 ) ) + { + InnBox box = from.InnBox; + if (box != null) + { + box.Open(); + } + } + else + { + from.SendLocalizedMessage( 502138 ); // That is too far away for you to use + } + } + + public InnChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Containers/LockableContainer.cs b/Scripts/Items/Containers/LockableContainer.cs new file mode 100644 index 0000000..00ac593 --- /dev/null +++ b/Scripts/Items/Containers/LockableContainer.cs @@ -0,0 +1,414 @@ +using System; +using Server.Network; +using Server.Items; +using Server.Misc; +using Server.Engines.Craft; + +namespace Server.Items +{ + public abstract class LockableContainer : TrapableContainer, ILockable, ILockpickable, ICraftable, IShipwreckedItem + { + private bool m_Locked; + private int m_LockLevel, m_MaxLockLevel, m_RequiredSkill; + private uint m_KeyValue; + private Mobile m_Picker; + private bool m_TrapOnLockpick; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Picker + { + get + { + return m_Picker; + } + set + { + m_Picker = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxLockLevel + { + get + { + return m_MaxLockLevel; + } + set + { + m_MaxLockLevel = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int LockLevel + { + get + { + return m_LockLevel; + } + set + { + m_LockLevel = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int RequiredSkill + { + get + { + return m_RequiredSkill; + } + set + { + m_RequiredSkill = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual bool Locked + { + get + { + return m_Locked; + } + set + { + m_Locked = value; + + if ( m_Locked ) + m_Picker = null; + + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public uint KeyValue + { + get + { + return m_KeyValue; + } + set + { + m_KeyValue = value; + } + } + + public override bool TrapOnOpen + { + get + { + return !m_TrapOnLockpick; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool TrapOnLockpick + { + get + { + return m_TrapOnLockpick; + } + set + { + m_TrapOnLockpick = value; + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 6 ); // version + + writer.Write( m_IsShipwreckedItem ); + + writer.Write( (bool) m_TrapOnLockpick ); + + writer.Write( (int) m_RequiredSkill ); + + writer.Write( (int) m_MaxLockLevel ); + + writer.Write( m_KeyValue ); + writer.Write( (int) m_LockLevel ); + writer.Write( (bool) m_Locked ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 6: + { + m_IsShipwreckedItem = reader.ReadBool(); + + goto case 5; + } + case 5: + { + m_TrapOnLockpick = reader.ReadBool(); + + goto case 4; + } + case 4: + { + m_RequiredSkill = reader.ReadInt(); + + goto case 3; + } + case 3: + { + m_MaxLockLevel = reader.ReadInt(); + + goto case 2; + } + case 2: + { + m_KeyValue = reader.ReadUInt(); + + goto case 1; + } + case 1: + { + m_LockLevel = reader.ReadInt(); + + goto case 0; + } + case 0: + { + if ( version < 3 ) + m_MaxLockLevel = 100; + + if ( version < 4 ) + { + if ( (m_MaxLockLevel - m_LockLevel) == 40 ) + { + m_RequiredSkill = m_LockLevel + 6; + m_LockLevel = m_RequiredSkill - 10; + m_MaxLockLevel = m_RequiredSkill + 39; + } + else + { + m_RequiredSkill = m_LockLevel; + } + } + + m_Locked = reader.ReadBool(); + + break; + } + } + } + + public LockableContainer( int itemID ) : base( itemID ) + { + m_MaxLockLevel = 100; + } + + public LockableContainer( Serial serial ) : base( serial ) + { + } + + public override bool CheckContentDisplay( Mobile from ) + { + return !m_Locked && base.CheckContentDisplay( from ); + } + + public override bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage ) + { + if ( from.AccessLevel < AccessLevel.GameMaster && m_Locked ) + { + from.SendLocalizedMessage( 501747 ); // It appears to be locked. + return false; + } + + return base.TryDropItem( from, dropped, sendFullMessage ); + } + + public override bool OnDragDropInto( Mobile from, Item item, Point3D p ) + { + if ( from.AccessLevel < AccessLevel.GameMaster && m_Locked ) + { + from.SendLocalizedMessage( 501747 ); // It appears to be locked. + return false; + } + + return base.OnDragDropInto( from, item, p ); + } + + public override bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + if ( !base.CheckLift( from, item, ref reject ) ) + return false; + + if ( item != this && from.AccessLevel < AccessLevel.GameMaster && m_Locked ) + return false; + + return true; + } + + public override bool CheckItemUse( Mobile from, Item item ) + { + if ( !base.CheckItemUse( from, item ) ) + return false; + + if ( item != this && from.AccessLevel < AccessLevel.GameMaster && m_Locked ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return false; + } + + return true; + } + + public override bool DisplaysContent{ get{ return !m_Locked; } } + + public virtual bool CheckLocked( Mobile from ) + { + bool inaccessible = false; + + if ( m_Locked ) + { + int number; + + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + number = 502502; // That is locked, but you open it with your godly powers. + } + else + { + number = 501747; // It appears to be locked. + inaccessible = true; + } + + from.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", "" ) ); + } + + return inaccessible; + } + + public override void OnTelekinesis( Mobile from ) + { + if ( CheckLocked( from ) ) + { + Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 ); + Effects.PlaySound( Location, Map, 0x1F5 ); + return; + } + + base.OnTelekinesis( from ); + } + + public override void OnDoubleClickSecureTrade( Mobile from ) + { + if ( CheckLocked( from ) ) + return; + + base.OnDoubleClickSecureTrade( from ); + } + + public override void Open( Mobile from ) + { + if ( CheckLocked( from ) ) + return; + + base.Open( from ); + } + + public override void OnSnoop( Mobile from ) + { + if ( CheckLocked( from ) ) + return; + + base.OnSnoop( from ); + } + + public virtual void LockPick( Mobile from ) + { + Locked = false; + Picker = from; + + if ( this.TrapOnLockpick && ExecuteTrap( from ) ) + { + this.TrapOnLockpick = false; + } + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + + if ( m_IsShipwreckedItem ) + list.Add( 1041645 ); // recovered from a shipwreck + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( m_IsShipwreckedItem ) + LabelTo( from, 1041645 ); //recovered from a shipwreck + } + + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + if ( SkillCheck.TestTrade( from, Trades.Tinkering, -5.0, 15.0 ) ) + { + from.SendLocalizedMessage( 500636 ); // Your tinker skill was sufficient to make the item lockable. + + Key key = new Key( KeyType.Copper, Key.RandomValue() ); + + KeyValue = key.KeyValue; + DropItem( key ); + + double tinkering = SkillCheck.TradeSkill( from, Trades.Tinkering, false ); + int level = (int)(tinkering * 0.8); + + RequiredSkill = level - 4; + LockLevel = level - 14; + MaxLockLevel = level + 35; + + if ( LockLevel == 0 ) + LockLevel = -1; + else if ( LockLevel > 95 ) + LockLevel = 95; + + if ( RequiredSkill > 95 ) + RequiredSkill = 95; + + if ( MaxLockLevel > 95 ) + MaxLockLevel = 95; + } + else + { + from.SendLocalizedMessage( 500637 ); // Your tinker skill was insufficient to make the item lockable. + } + + return 1; + } + + #endregion + + #region IShipwreckedItem Members + + private bool m_IsShipwreckedItem; + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsShipwreckedItem + { + get { return m_IsShipwreckedItem; } + set { m_IsShipwreckedItem = value; } + } + #endregion + + } +} \ No newline at end of file diff --git a/Scripts/Items/Containers/Strongbox.cs b/Scripts/Items/Containers/Strongbox.cs new file mode 100644 index 0000000..157490a --- /dev/null +++ b/Scripts/Items/Containers/Strongbox.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xE80, 0x9A8 )] + public class StrongBox : BaseContainer, IChopable + { + private Mobile m_Owner; + private BaseHouse m_House; + + public override double DefaultWeight{ get{ return 100; } } + public override int LabelNumber { get { return 1023712; } } + + public StrongBox( Mobile owner, BaseHouse house ) : base( 0xE80 ) + { + m_Owner = owner; + m_House = house; + + MaxItems = 25; + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Owner + { + get + { + return m_Owner; + } + set + { + m_Owner = value; + InvalidateProperties(); + } + } + + public override int DefaultMaxWeight{ get{ return 0; } } + + public StrongBox( Serial serial ) : base(serial) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Owner ); + writer.Write( m_House ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Owner = reader.ReadMobile(); + m_House = reader.ReadItem() as BaseHouse; + + break; + } + } + + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerCallback( Validate ) ); + } + + private void Validate() + { + if ( m_Owner != null && m_House != null && !m_House.IsCoOwner( m_Owner ) ) + { + Console.WriteLine( "Warning: Destroying strongbox of {0}", m_Owner.Name ); + Destroy(); + } + } + + public override bool Decays + { + get + { + if ( m_House != null && m_Owner != null && !m_Owner.Deleted ) + return !m_House.IsCoOwner( m_Owner ); + else + return true; + } + } + + public override TimeSpan DecayTime + { + get + { + return TimeSpan.FromMinutes( 30.0 ); + } + } + + public override void AddNameProperty( ObjectPropertyList list ) + { + if ( m_Owner != null ) + list.Add( 1042887, m_Owner.Name ); // a strong box owned by ~1_OWNER_NAME~ + else + base.AddNameProperty( list ); + } + + public override void OnSingleClick( Mobile from ) + { + if ( m_Owner != null ) + { + LabelTo( from, 1042887, m_Owner.Name ); // a strong box owned by ~1_OWNER_NAME~ + + if ( CheckContentDisplay( from ) ) + LabelTo( from, "({0} items, {1} stones)", TotalItems, TotalWeight ); + } + else + { + base.OnSingleClick( from ); + } + } + + public override bool IsAccessibleTo( Mobile m ) + { + if ( m_Owner == null || m_Owner.Deleted || m_House == null || m_House.Deleted || m.AccessLevel >= AccessLevel.GameMaster ) + return true; + + return m == m_Owner && m_House.IsCoOwner( m ) && base.IsAccessibleTo( m ); + } + + private void Chop( Mobile from ) + { + Effects.PlaySound( Location, Map, 0x3B3 ); + from.SendLocalizedMessage( 500461 ); // You destroy the item. + Destroy(); + } + + public void OnChop( Mobile from ) + { + if ( m_House != null && !m_House.Deleted && m_Owner != null && !m_Owner.Deleted ) + { + if ( from == m_Owner || m_House.IsOwner( from ) ) + Chop( from ); + } + else + { + Chop( from ); + } + } + + public Container ConvertToStandardContainer() + { + Container metalBox = new MetalBox(); + List subItems = new List( Items ); + + foreach ( Item subItem in subItems ) + { + metalBox.AddItem( subItem ); + } + + this.Delete(); + + return metalBox; + } + } +} diff --git a/Scripts/Items/Containers/TrapableContainer.cs b/Scripts/Items/Containers/TrapableContainer.cs new file mode 100644 index 0000000..a8b066b --- /dev/null +++ b/Scripts/Items/Containers/TrapableContainer.cs @@ -0,0 +1,272 @@ +using System; + +namespace Server.Items +{ + public enum TrapType + { + None, + MagicTrap, + ExplosionTrap, + DartTrap, + PoisonTrap + } + + public abstract class TrapableContainer : BaseContainer, ITelekinesisable + { + private TrapType m_TrapType; + private int m_TrapPower; + private int m_TrapLevel; + + [CommandProperty( AccessLevel.GameMaster )] + public TrapType TrapType + { + get + { + return m_TrapType; + } + set + { + m_TrapType = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TrapPower + { + get + { + return m_TrapPower; + } + set + { + m_TrapPower = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TrapLevel + { + get + { + return m_TrapLevel; + } + set + { + m_TrapLevel = value; + } + } + + public virtual bool TrapOnOpen{ get{ return true; } } + + public TrapableContainer( int itemID ) : base( itemID ) + { + } + + public TrapableContainer( Serial serial ) : base( serial ) + { + } + + private void SendMessageTo( Mobile to, int number, int hue ) + { + if ( Deleted || !to.CanSee( this ) ) + return; + + to.Send( new Network.MessageLocalized( Serial, ItemID, Network.MessageType.Regular, hue, 3, number, "", "" ) ); + } + + private void SendMessageTo( Mobile to, string text, int hue ) + { + if ( Deleted || !to.CanSee( this ) ) + return; + + to.Send( new Network.UnicodeMessage( Serial, ItemID, Network.MessageType.Regular, hue, 3, "ENU", "", text ) ); + } + + public virtual bool ExecuteTrap( Mobile from ) + { + if ( m_TrapType != TrapType.None ) + { + Point3D loc = this.GetWorldLocation(); + Map facet = this.Map; + + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + SendMessageTo( from, "That is trapped, but you open it with your godly powers.", 0x3B2 ); + return false; + } + + switch ( m_TrapType ) + { + case TrapType.ExplosionTrap: + { + SendMessageTo( from, 502999, 0x3B2 ); // You set off a trap! + + if ( from.InRange( loc, 3 ) ) + { + int damage; + + if ( m_TrapLevel > 0 ) + damage = Utility.RandomMinMax( 10, 30 ) * m_TrapLevel; + else + damage = m_TrapPower; + + Ultima.Damage( from, damage ); + + // Your skin blisters from the heat! + from.LocalOverheadMessage( Network.MessageType.Regular, 0x2A, 503000 ); + } + + Effects.SendLocationEffect( loc, facet, 0x36BD, 15, 10 ); + Effects.PlaySound( loc, facet, 0x307 ); + + break; + } + case TrapType.MagicTrap: + { + if ( from.InRange( loc, 1 ) ) + from.Damage( m_TrapPower ); + + Effects.PlaySound( loc, Map, 0x307 ); + + Effects.SendLocationEffect( new Point3D( loc.X - 1, loc.Y, loc.Z ), Map, 0x36BD, 15 ); + Effects.SendLocationEffect( new Point3D( loc.X + 1, loc.Y, loc.Z ), Map, 0x36BD, 15 ); + + Effects.SendLocationEffect( new Point3D( loc.X, loc.Y - 1, loc.Z ), Map, 0x36BD, 15 ); + Effects.SendLocationEffect( new Point3D( loc.X, loc.Y + 1, loc.Z ), Map, 0x36BD, 15 ); + + Effects.SendLocationEffect( new Point3D( loc.X + 1, loc.Y + 1, loc.Z + 11 ), Map, 0x36BD, 15 ); + + break; + } + case TrapType.DartTrap: + { + SendMessageTo( from, 502999, 0x3B2 ); // You set off a trap! + + if ( from.InRange( loc, 3 ) ) + { + int damage; + + if ( m_TrapLevel > 0 ) + damage = Utility.RandomMinMax( 5, 15 ) * m_TrapLevel; + else + damage = m_TrapPower; + + Ultima.Damage( from, damage ); + + // A dart imbeds itself in your flesh! + from.LocalOverheadMessage( Network.MessageType.Regular, 0x62, 502998 ); + } + + Effects.PlaySound( loc, facet, 0x223 ); + + break; + } + case TrapType.PoisonTrap: + { + SendMessageTo( from, 502999, 0x3B2 ); // You set off a trap! + + if ( from.InRange( loc, 3 ) ) + { + Poison poison = Poison.Lesser; + + if ( this is LootChest ) + { + LootChest chest = (LootChest)this; + + switch ( chest.Level ) + { + case 1: poison = Poison.Lesser; break; + case 2: poison = Poison.Regular; break; + case 3: poison = Poison.Greater; break; + case 4: poison = Poison.Deadly; break; + } + Ultima.Damage( from, (int)(m_TrapPower/2) ); + } + else if ( m_TrapLevel > 0 ) + { + poison = Poison.GetPoison( Math.Max( 0, Math.Min( 4, m_TrapLevel - 1 ) ) ); + } + else + { + Ultima.Damage( from, m_TrapPower ); + poison = Poison.Greater; + } + + from.ApplyPoison( from, poison ); + + // You are enveloped in a noxious green cloud! + from.LocalOverheadMessage( Network.MessageType.Regular, 0x44, 503004 ); + } + + Effects.SendLocationEffect( loc, facet, 0x113A, 10, 20 ); + Effects.PlaySound( loc, facet, 0x231 ); + + break; + } + } + + m_TrapType = TrapType.None; + m_TrapPower = 0; + m_TrapLevel = 0; + return true; + } + + return false; + } + + public virtual void OnTelekinesis( Mobile from ) + { + Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 ); + Effects.PlaySound( Location, Map, 0x1F5 ); + + if( this.TrapOnOpen ) + { + ExecuteTrap( from ); + } + } + + public override void Open( Mobile from ) + { + if ( !this.TrapOnOpen || !ExecuteTrap( from ) ) + base.Open( from ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + writer.Write( (int) m_TrapLevel ); + + writer.Write( (int) m_TrapPower ); + writer.Write( (int) m_TrapType ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + { + m_TrapLevel = reader.ReadInt(); + goto case 1; + } + case 1: + { + m_TrapPower = reader.ReadInt(); + goto case 0; + } + case 0: + { + m_TrapType = (TrapType)reader.ReadInt(); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Deeds/BarkeepContract.cs b/Scripts/Items/Deeds/BarkeepContract.cs new file mode 100644 index 0000000..b6b17f1 --- /dev/null +++ b/Scripts/Items/Deeds/BarkeepContract.cs @@ -0,0 +1,95 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Network; +using Server.Multis; + +namespace Server.Items +{ + public class BarkeepContract : Item + { + public override string DefaultName + { + get { return "a barkeep contract"; } + } + + [Constructable] + public BarkeepContract() : base( 0x14F0 ) + { + Weight = 1.0; + } + + public BarkeepContract( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); //version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + from.SendLocalizedMessage( 503248 ); // Your godly powers allow you to place this vendor whereever you wish. + + Mobile v = new PlayerBarkeeper( from, BaseHouse.FindHouseAt( from ) ); + + v.Direction = from.Direction & Direction.Mask; + v.MoveToWorld( from.Location, from.Map ); + + this.Delete(); + } + else + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if ( house == null || !house.IsOwner( from ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, false, "You are not the full owner of this house." ); + } + else if ( !house.CanPlaceNewBarkeep() ) + { + from.SendLocalizedMessage( 1062490 ); // That action would exceed the maximum number of barkeeps for this house. + } + else + { + bool vendor, contract; + BaseHouse.IsThereVendor( from.Location, from.Map, out vendor, out contract ); + + if ( vendor ) + { + from.SendLocalizedMessage( 1062677 ); // You cannot place a vendor or barkeep at this location. + } + else if ( contract ) + { + from.SendLocalizedMessage( 1062678 ); // You cannot place a vendor or barkeep on top of a rental contract! + } + else + { + Mobile v = new PlayerBarkeeper( from, house ); + + v.Direction = from.Direction & Direction.Mask; + v.MoveToWorld( from.Location, from.Map ); + + this.Delete(); + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Deeds/HairRestylingDeed.cs b/Scripts/Items/Deeds/HairRestylingDeed.cs new file mode 100644 index 0000000..29663a5 --- /dev/null +++ b/Scripts/Items/Deeds/HairRestylingDeed.cs @@ -0,0 +1,157 @@ +using System; +using Server.Mobiles; +using Server.Network; +using Server.Prompts; +using Server.Items; +using Server.Targeting; +using Server.Gumps; + +namespace Server.Items +{ + public class HairRestylingDeed : Item + { + public override int LabelNumber{ get{ return 1041061; } } // a coupon for a free hair restyling + + [Constructable] + public HairRestylingDeed() : base( 0x14F0 ) + { + Weight = 1.0; + } + + public HairRestylingDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack... + } + else + { + from.SendGump( new InternalGump( from, this ) ); + } + } + + private class InternalGump : Gump + { + private Mobile m_From; + private HairRestylingDeed m_Deed; + + public InternalGump( Mobile from, HairRestylingDeed deed ) : base( 50, 50 ) + { + m_From = from; + m_Deed = deed; + + from.CloseGump( typeof( InternalGump ) ); + + AddBackground( 100, 10, 400, 385, 0xA28 ); + + AddHtmlLocalized( 100, 25, 400, 35, 1013008, false, false ); + AddButton( 175, 340, 0xFA5, 0xFA7, 0x0, GumpButtonType.Reply, 0 ); // CANCEL + + AddHtmlLocalized( 210, 342, 90, 35, 1011012, false, false );//
HAIRSTYLE SELECTION MENU
+ + int[][] RacialData = (from.Race == Race.Human) ? HumanArray : ElvenArray; + + for(int i=1; i 10 ) + return; + + int[][] RacialData = (m_From.Race == Race.Human) ? HumanArray : ElvenArray; + + if ( m_From is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)m_From; + + pm.SetHairMods( -1, -1 ); // clear any hairmods (disguise kit, incognito) + m_From.HairItemID = (m_From.Female) ? RacialData[info.ButtonID][2] : RacialData[info.ButtonID][3]; + m_From.RecordHair = m_From.HairItemID; + m_Deed.Delete(); + } + } +/* + gump data: bgX, bgY, htmlX, htmlY, imgX, imgY, butX, butY +*/ + + int[][] LayoutArray = + { + new int[] { 0 }, /* padding: its more efficient than code to ++ the index/buttonid */ + new int[] { 425, 280, 342, 295, 000, 000, 310, 292 }, + new int[] { 235, 060, 150, 075, 168, 020, 118, 073 }, + new int[] { 235, 115, 150, 130, 168, 070, 118, 128 }, + new int[] { 235, 170, 150, 185, 168, 130, 118, 183 }, + new int[] { 235, 225, 150, 240, 168, 185, 118, 238 }, + new int[] { 425, 060, 342, 075, 358, 018, 310, 073 }, + new int[] { 425, 115, 342, 130, 358, 075, 310, 128 }, + new int[] { 425, 170, 342, 185, 358, 125, 310, 183 }, + new int[] { 425, 225, 342, 240, 358, 185, 310, 238 }, + new int[] { 235, 280, 150, 295, 168, 245, 118, 292 } // slot 10, Curly - N/A for elfs. + }; + +/* + racial arrays are: cliloc_F, cliloc_M, ItemID_F, ItemID_M, gump_img_F, gump_img_M +*/ + int[][] HumanArray = /* why on earth cant these utilies be consistent with hex/dec */ + { + new int[] { 0 }, + new int[] { 1011064, 1011064, 0, 0, 0, 0 }, // bald + new int[] { 1011052, 1011052, 0x203B, 0x203B, 0xed1c, 0xC60C }, // Short + new int[] { 1011053, 1011053, 0x203C, 0x203C, 0xed1d, 0xc60d }, // Long + new int[] { 1011054, 1011054, 0x203D, 0x203D, 0xed1e, 0xc60e }, // Ponytail + new int[] { 1011055, 1011055, 0x2044, 0x2044, 0xed27, 0xC60F }, // Mohawk + new int[] { 1011047, 1011047, 0x2045, 0x2045, 0xED26, 0xED26 }, // Pageboy + new int[] { 1074393, 1011048, 0x2046, 0x2048, 0xed28, 0xEDE5 }, // Buns, Receding + new int[] { 1011049, 1011049, 0x2049, 0x2049, 0xede6, 0xede6 }, // 2-tails + new int[] { 1011050, 1011050, 0x204A, 0x204A, 0xED29, 0xED29 }, // Topknot + new int[] { 1011396, 1011396, 0x2047, 0x2047, 0xed25, 0xc618 } // Curly + }; + int[][] ElvenArray = + { + new int[] { 0 }, + new int[] { 1011064, 1011064, 0, 0, 0, 0, }, // bald + new int[] { 1074386, 1074386, 0x2fc0, 0x2fc0, 0xedf5, 0xc6e5 }, // long feather + new int[] { 1074387, 1074387, 0x2fc1, 0x2fc1, 0xedf6, 0xc6e6 }, // short + new int[] { 1074388, 1074388, 0x2fc2, 0x2fc2, 0xedf7, 0xc6e7 }, // mullet + new int[] { 1074391, 1074391, 0x2fce, 0x2fce, 0xeddc, 0xc6cc }, // knob + new int[] { 1074392, 1074392, 0x2fcf, 0x2fcf, 0xeddd, 0xc6cd }, // braided + new int[] { 1074394, 1074394, 0x2fd1, 0x2fd1, 0xeddf, 0xc6cf }, // spiked + new int[] { 1074389, 1074385, 0x2fcc, 0x2fbf, 0xedda, 0xc6e4 }, // flower, mid-long + new int[] { 1074393, 1074390, 0x2fd0, 0x2fcd, 0xedde, 0xc6cb } // buns, long + }; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Deeds/NameChangeDeed.cs b/Scripts/Items/Deeds/NameChangeDeed.cs new file mode 100644 index 0000000..287fe68 --- /dev/null +++ b/Scripts/Items/Deeds/NameChangeDeed.cs @@ -0,0 +1,46 @@ +using System; +using Server.Network; +using Server.Prompts; +using Server.Items; + +namespace Server.Items +{ + public class NameChangeDeed : Item + { + public override string DefaultName + { + get { return "a name change deed"; } + } + + [Constructable] + public NameChangeDeed() : base( 0x14F0 ) + { + base.Weight = 1.0; + } + + public NameChangeDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + // Do namechange + } + } +} + + diff --git a/Scripts/Items/Deeds/PlayerVendorDeed.cs b/Scripts/Items/Deeds/PlayerVendorDeed.cs new file mode 100644 index 0000000..9295b4e --- /dev/null +++ b/Scripts/Items/Deeds/PlayerVendorDeed.cs @@ -0,0 +1,103 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Multis; + +namespace Server.Items +{ + public class ContractOfEmployment : Item + { + public override int LabelNumber{ get{ return 1041243; } } // a contract of employment + + [Constructable] + public ContractOfEmployment() : base( 0x14F0 ) + { + Weight = 1.0; + } + + public ContractOfEmployment( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); //version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + from.SendLocalizedMessage( 503248 ); // Your godly powers allow you to place this vendor whereever you wish. + + Mobile v = new PlayerVendor( from, BaseHouse.FindHouseAt( from ) ); + + v.Direction = from.Direction & Direction.Mask; + v.MoveToWorld( from.Location, from.Map ); + + v.SayTo( from, 503246 ); // Ah! it feels good to be working again. + + this.Delete(); + } + else + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if ( house == null ) + { + from.SendLocalizedMessage( 503240 ); // Vendors can only be placed in houses. + } + else if ( !BaseHouse.NewVendorSystem && !house.IsFriend( from ) ) + { + from.SendLocalizedMessage( 503242 ); // You must ask the owner of this building to name you a friend of the household in order to place a vendor here. + } + else if ( BaseHouse.NewVendorSystem && !house.IsOwner( from ) ) + { + from.SendLocalizedMessage( 1062423 ); // Only the house owner can directly place vendors. Please ask the house owner to offer you a vendor contract so that you may place a vendor in this house. + } + else if ( !house.Public || !house.CanPlaceNewVendor() ) + { + from.SendLocalizedMessage( 503241 ); // You cannot place this vendor or barkeep. Make sure the house is public and has sufficient storage available. + } + else + { + bool vendor, contract; + BaseHouse.IsThereVendor( from.Location, from.Map, out vendor, out contract ); + + if ( vendor ) + { + from.SendLocalizedMessage( 1062677 ); // You cannot place a vendor or barkeep at this location. + } + else if ( contract ) + { + from.SendLocalizedMessage( 1062678 ); // You cannot place a vendor or barkeep on top of a rental contract! + } + else + { + Mobile v = new PlayerVendor( from, house ); + + v.Direction = from.Direction & Direction.Mask; + v.MoveToWorld( from.Location, from.Map ); + + v.SayTo( from, 503246 ); // Ah! it feels good to be working again. + + this.Delete(); + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Deeds/VendorRentalContract.cs b/Scripts/Items/Deeds/VendorRentalContract.cs new file mode 100644 index 0000000..434cca0 --- /dev/null +++ b/Scripts/Items/Deeds/VendorRentalContract.cs @@ -0,0 +1,368 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.ContextMenus; +using Server.Gumps; +using Server.Mobiles; +using Server.Targeting; + +namespace Server.Items +{ + public class VendorRentalContract : Item + { + public override int LabelNumber{ get{ return 1062332; } } // a vendor rental contract + + private VendorRentalDuration m_Duration; + private int m_Price; + private bool m_LandlordRenew; + + private Mobile m_Offeree; + private Timer m_OfferExpireTimer; + + public VendorRentalDuration Duration + { + get{ return m_Duration; } + set + { + if ( value != null ) + m_Duration = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Price + { + get{ return m_Price; } + set{ m_Price = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool LandlordRenew + { + get{ return m_LandlordRenew; } + set{ m_LandlordRenew = value; } + } + + public Mobile Offeree + { + get{ return m_Offeree; } + set + { + if ( m_OfferExpireTimer != null ) + { + m_OfferExpireTimer.Stop(); + m_OfferExpireTimer = null; + } + + m_Offeree = value; + + if ( value != null ) + { + m_OfferExpireTimer = new OfferExpireTimer( this ); + m_OfferExpireTimer.Start(); + } + + InvalidateProperties(); + } + } + + [Constructable] + public VendorRentalContract() : base( 0x14F0 ) + { + Weight = 1.0; + Hue = 0x672; + + m_Duration = VendorRentalDuration.Instances[0]; + m_Price = 1500; + } + + public VendorRentalContract( Serial serial ) : base( serial ) + { + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( Offeree != null ) + list.Add( 1062368, Offeree.Name ); // Being Offered To ~1_NAME~ + } + + public bool IsLandlord( Mobile m ) + { + if ( IsLockedDown ) + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null && house.DecayType != DecayType.Condemned ) + return house.IsOwner( m ); + } + + return false; + } + + public bool IsUsableBy( Mobile from, bool byLandlord, bool byBackpack, bool noOfferee, bool sendMessage ) + { + if ( this.Deleted || !from.CheckAlive( sendMessage ) ) + return false; + + if ( noOfferee && Offeree != null ) + { + if ( sendMessage ) + from.SendLocalizedMessage( 1062343 ); // That item is currently in use. + + return false; + } + + if ( byBackpack && IsChildOf( from.Backpack ) ) + return true; + + if ( byLandlord && IsLandlord( from ) ) + { + if ( from.Map != this.Map || !from.InRange( this, 5 ) ) + { + if ( sendMessage ) + from.SendLocalizedMessage( 501853 ); // Target is too far away. + + return false; + } + + return true; + } + + return false; + } + + public override void OnDelete() + { + if ( IsLockedDown ) + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null ) + { + house.VendorRentalContracts.Remove( this ); + } + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Offeree != null ) + { + from.SendLocalizedMessage( 1062343 ); // That item is currently in use. + } + else if ( !IsLockedDown ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used. + return; + } + + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if ( house == null || !house.IsOwner( from ) ) + { + from.SendLocalizedMessage( 1062333 ); // You must be standing inside of a house that you own to make use of this contract. + } + else if ( !house.IsAosRules ) + { + from.SendMessage( "Rental contracts can only be placed in AOS-enabled houses." ); + } + else if ( !house.Public ) + { + from.SendLocalizedMessage( 1062335 ); // Rental contracts can only be placed in public houses. + } + else if ( !house.CanPlaceNewVendor() ) + { + from.SendLocalizedMessage( 1062352 ); // You do not have enought storage available to place this contract. + } + else + { + from.SendLocalizedMessage( 1062337 ); // Target the exact location you wish to rent out. + from.Target = new RentTarget( this ); + } + } + else if ( IsLandlord( from ) ) + { + if ( from.InRange( this, 5 ) ) + { + from.CloseGump( typeof( VendorRentalContractGump ) ); + from.SendGump( new VendorRentalContractGump( this, from ) ); + } + else + { + from.SendLocalizedMessage( 501853 ); // Target is too far away. + } + } + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( IsUsableBy( from, true, true, true, false ) ) + { + list.Add( new ContractOptionEntry( this ) ); + } + } + + private class ContractOptionEntry : ContextMenuEntry + { + private VendorRentalContract m_Contract; + + public ContractOptionEntry( VendorRentalContract contract ) : base( 6209 ) + { + m_Contract = contract; + } + + public override void OnClick() + { + Mobile from = Owner.From; + + if ( m_Contract.IsUsableBy( from, true, true, true, true ) ) + { + from.CloseGump( typeof( VendorRentalContractGump ) ); + from.SendGump( new VendorRentalContractGump( m_Contract, from ) ); + } + } + } + + private class RentTarget : Target + { + private VendorRentalContract m_Contract; + + public RentTarget( VendorRentalContract contract ) : base( -1, false, TargetFlags.None ) + { + m_Contract = contract; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !m_Contract.IsUsableBy( from, false, true, true, true ) ) + return; + + IPoint3D location = targeted as IPoint3D; + if ( location == null ) + return; + + Point3D pLocation = new Point3D( location ); + Map map = from.Map; + + BaseHouse house = BaseHouse.FindHouseAt( pLocation, map, 0 ); + + if ( house == null || !house.IsOwner( from ) ) + { + from.SendLocalizedMessage( 1062338 ); // The location being rented out must be inside of your house. + } + else if ( BaseHouse.FindHouseAt( from ) != house ) + { + from.SendLocalizedMessage( 1062339 ); // You must be located inside of the house in which you are trying to place the contract. + } + else if ( !house.IsAosRules ) + { + from.SendMessage( "Rental contracts can only be placed in AOS-enabled houses." ); + } + else if ( !house.Public ) + { + from.SendLocalizedMessage( 1062335 ); // Rental contracts can only be placed in public houses. + } + else if ( house.DecayType == DecayType.Condemned ) + { + from.SendLocalizedMessage( 1062468 ); // You cannot place a contract in a condemned house. + } + else if ( !house.CanPlaceNewVendor() ) + { + from.SendLocalizedMessage( 1062352 ); // You do not have enought storage available to place this contract. + } + else if ( !map.CanFit( pLocation, 16, false, false ) ) + { + from.SendLocalizedMessage( 1062486 ); // A vendor cannot exist at that location. Please try again. + } + else + { + bool vendor, contract; + BaseHouse.IsThereVendor( pLocation, map, out vendor, out contract ); + + if ( vendor ) + { + from.SendLocalizedMessage( 1062342 ); // You may not place a rental contract at this location while other beings occupy it. + } + else if ( contract ) + { + from.SendLocalizedMessage( 1062341 ); // That location is cluttered. Please clear out any objects there and try again. + } + else + { + m_Contract.MoveToWorld( pLocation, map ); + + if ( !house.LockDown( from, m_Contract ) ) + { + from.AddToBackpack( m_Contract ); + } + } + } + } + + protected override void OnTargetCancel( Mobile from, TargetCancelType cancelType ) + { + from.SendLocalizedMessage( 1062336 ); // You decide not to place the contract at this time. + } + } + + private class OfferExpireTimer : Timer + { + private VendorRentalContract m_Contract; + + public OfferExpireTimer( VendorRentalContract contract ) : base( TimeSpan.FromSeconds( 30.0 ) ) + { + m_Contract = contract; + + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + Mobile offeree = m_Contract.Offeree; + + if ( offeree != null ) + { + offeree.CloseGump( typeof( VendorRentalOfferGump ) ); + + m_Contract.Offeree = null; + } + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + + writer.WriteEncodedInt( m_Duration.ID ); + + writer.Write( (int) m_Price ); + writer.Write( (bool) m_LandlordRenew ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + int durationID = reader.ReadEncodedInt(); + if ( durationID < VendorRentalDuration.Instances.Length ) + m_Duration = VendorRentalDuration.Instances[durationID]; + else + m_Duration = VendorRentalDuration.Instances[0]; + + m_Price = reader.ReadInt(); + m_LandlordRenew = reader.ReadBool(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Facial/Beard.cs b/Scripts/Items/Facial/Beard.cs new file mode 100644 index 0000000..8129dfd --- /dev/null +++ b/Scripts/Items/Facial/Beard.cs @@ -0,0 +1,330 @@ +using System; + +namespace Server.Items +{ + public abstract class Beard : Item + { + /*public static Beard CreateByID( int id, int hue ) + { + switch ( id ) + { + case 0x203E: return new LongBeard( hue ); + case 0x203F: return new ShortBeard( hue ); + case 0x2040: return new Goatee( hue ); + case 0x2041: return new Mustache( hue ); + case 0x204B: return new MediumShortBeard( hue ); + case 0x204C: return new MediumLongBeard( hue ); + case 0x204D: return new Vandyke( hue ); + default: return new GenericBeard( id, hue ); + } + }*/ + + protected Beard( int itemID ) : this( itemID, 0 ) + { + } + + protected Beard( int itemID, int hue ) : base( itemID ) + { + LootType = LootType.Blessed; + Layer = Layer.FacialHair; + Hue = hue; + } + + public Beard( Serial serial ) : base( serial ) + { + } + + public override bool DisplayLootType{ get{ return false; } } + + public override bool VerifyMove( Mobile from ) + { + return ( from.AccessLevel >= AccessLevel.GameMaster ); + } + + public override DeathMoveResult OnParentDeath( Mobile parent ) + { + //Dupe( Amount ); + + parent.FacialHairItemID = this.ItemID; + parent.FacialHairHue = this.Hue; + + return DeathMoveResult.MoveToCorpse; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + LootType = LootType.Blessed; + + int version = reader.ReadInt(); + } + } + + public class GenericBeard : Beard + { + + private GenericBeard( int itemID ) : this( itemID, 0 ) + { + } + + + private GenericBeard( int itemID, int hue ) : base( itemID, hue ) + { + } + + public GenericBeard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LongBeard : Beard + { + + private LongBeard() + : this( 0 ) + { + } + + private LongBeard( int hue ) + : base( 0x203E, hue ) + { + } + + public LongBeard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ShortBeard : Beard + { + + private ShortBeard() + : this( 0 ) + { + } + + + private ShortBeard( int hue ) + : base( 0x203f, hue ) + { + } + + public ShortBeard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Goatee : Beard + { + + private Goatee() + : this( 0 ) + { + } + + + private Goatee( int hue ) + : base( 0x2040, hue ) + { + } + + public Goatee( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Mustache : Beard + { + + private Mustache() + : this( 0 ) + { + } + + + private Mustache( int hue ) + : base( 0x2041, hue ) + { + } + + public Mustache( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumShortBeard : Beard + { + + private MediumShortBeard() + : this( 0 ) + { + } + + + private MediumShortBeard( int hue ) + : base( 0x204B, hue ) + { + } + + public MediumShortBeard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MediumLongBeard : Beard + { + + private MediumLongBeard() + : this( 0 ) + { + } + + + private MediumLongBeard( int hue ) + : base( 0x204C, hue ) + { + } + + public MediumLongBeard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Vandyke : Beard + { + + private Vandyke() + : this( 0 ) + { + } + + + private Vandyke( int hue ) + : base( 0x204D, hue ) + { + } + + public Vandyke( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Facial/Hair.cs b/Scripts/Items/Facial/Hair.cs new file mode 100644 index 0000000..fc37975 --- /dev/null +++ b/Scripts/Items/Facial/Hair.cs @@ -0,0 +1,491 @@ +using System; + +namespace Server.Items +{ + public abstract class Hair : Item + { + /* + + public static Hair GetRandomHair( bool female ) + { + return GetRandomHair( female, Utility.RandomHairHue() ); + } + + public static Hair GetRandomHair( bool female, int hairHue ) + { + if( female ) + { + switch ( Utility.Random( 9 ) ) + { + case 0: return new Afro( hairHue ); + case 1: return new KrisnaHair( hairHue ); + case 2: return new PageboyHair( hairHue ); + case 3: return new PonyTail( hairHue ); + case 4: return new ReceedingHair( hairHue ); + case 5: return new TwoPigTails( hairHue ); + case 6: return new ShortHair( hairHue ); + case 7: return new LongHair( hairHue ); + default: return new BunsHair( hairHue ); + } + } + else + { + switch ( Utility.Random( 8 ) ) + { + case 0: return new Afro( hairHue ); + case 1: return new KrisnaHair( hairHue ); + case 2: return new PageboyHair( hairHue ); + case 3: return new PonyTail( hairHue ); + case 4: return new ReceedingHair( hairHue ); + case 5: return new TwoPigTails( hairHue ); + case 6: return new ShortHair( hairHue ); + default: return new LongHair( hairHue ); + } + } + } + + + public static Hair CreateByID( int id, int hue ) + { + switch ( id ) + { + case 0x203B: return new ShortHair( hue ); + case 0x203C: return new LongHair( hue ); + case 0x203D: return new PonyTail( hue ); + case 0x2044: return new Mohawk( hue ); + case 0x2045: return new PageboyHair( hue ); + case 0x2046: return new BunsHair( hue ); + case 0x2047: return new Afro( hue ); + case 0x2048: return new ReceedingHair( hue ); + case 0x2049: return new TwoPigTails( hue ); + case 0x204A: return new KrisnaHair( hue ); + default: return new GenericHair( id, hue ); + } + } + * */ + + protected Hair( int itemID ) + : this( itemID, 0 ) + { + } + + protected Hair( int itemID, int hue ) + : base( itemID ) + { + LootType = LootType.Blessed; + Layer = Layer.Hair; + Hue = hue; + } + + public Hair( Serial serial ) + : base( serial ) + { + } + + public override bool DisplayLootType { get { return false; } } + + public override bool VerifyMove( Mobile from ) + { + return (from.AccessLevel >= AccessLevel.GameMaster); + } + + public override DeathMoveResult OnParentDeath( Mobile parent ) + { +// Dupe( Amount ); + + parent.HairItemID = this.ItemID; + parent.HairHue = this.Hue; + + return DeathMoveResult.MoveToCorpse; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + LootType = LootType.Blessed; + + int version = reader.ReadInt(); + } + } + + public class GenericHair : Hair + { + + private GenericHair( int itemID ) + : this( itemID, 0 ) + { + } + + + private GenericHair( int itemID, int hue ) + : base( itemID, hue ) + { + } + + public GenericHair( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Mohawk : Hair + { + + private Mohawk() + : this( 0 ) + { + } + + + private Mohawk( int hue ) + : base( 0x2044, hue ) + { + } + + public Mohawk( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PageboyHair : Hair + { + + private PageboyHair() + : this( 0 ) + { + } + + + private PageboyHair( int hue ) + : base( 0x2045, hue ) + { + } + + public PageboyHair( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BunsHair : Hair + { + + private BunsHair() + : this( 0 ) + { + } + + + private BunsHair( int hue ) + : base( 0x2046, hue ) + { + } + + public BunsHair( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LongHair : Hair + { + + private LongHair() + : this( 0 ) + { + } + + + private LongHair( int hue ) + : base( 0x203C, hue ) + { + } + + public LongHair( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ShortHair : Hair + { + + private ShortHair() + : this( 0 ) + { + } + + + private ShortHair( int hue ) + : base( 0x203B, hue ) + { + } + + public ShortHair( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PonyTail : Hair + { + + private PonyTail() + : this( 0 ) + { + } + + + private PonyTail( int hue ) + : base( 0x203D, hue ) + { + } + + public PonyTail( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Afro : Hair + { + + private Afro() + : this( 0 ) + { + } + + + private Afro( int hue ) + : base( 0x2047, hue ) + { + } + + public Afro( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ReceedingHair : Hair + { + + private ReceedingHair() + : this( 0 ) + { + } + + + private ReceedingHair( int hue ) + : base( 0x2048, hue ) + { + } + + public ReceedingHair( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TwoPigTails : Hair + { + + private TwoPigTails() + : this( 0 ) + { + } + + + private TwoPigTails( int hue ) + : base( 0x2049, hue ) + { + } + + public TwoPigTails( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class KrisnaHair : Hair + { + + private KrisnaHair() + : this( 0 ) + { + } + + + private KrisnaHair( int hue ) + : base( 0x204A, hue ) + { + } + + public KrisnaHair( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableCabbage.cs b/Scripts/Items/Farming/FarmableCabbage.cs new file mode 100644 index 0000000..0d6b521 --- /dev/null +++ b/Scripts/Items/Farming/FarmableCabbage.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableCabbage : FarmableCrop + { + public static int GetCropID() + { + return 0x0DC4; + } + + public override Item GetCropObject() + { + Cabbage cabbage = new Cabbage(); + + cabbage.ItemID = Utility.Random( 3195, 2 ); + + return cabbage; + } + + public override int GetPickedID() + { + return 3254; + } + + [Constructable] + public FarmableCabbage() : base( GetCropID() ) + { + Name = "cabbage"; + } + + public FarmableCabbage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableCantaloupe.cs b/Scripts/Items/Farming/FarmableCantaloupe.cs new file mode 100644 index 0000000..1523417 --- /dev/null +++ b/Scripts/Items/Farming/FarmableCantaloupe.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableCantaloupe : FarmableCrop + { + public static int GetCropID() + { + return 0x01FB; + } + + public override Item GetCropObject() + { + Cantaloupe cantaloupe = new Cantaloupe(); + + cantaloupe.ItemID = 0xc79; + + return cantaloupe; + } + + public override int GetPickedID() + { + return 0x0C60; + } + + [Constructable] + public FarmableCantaloupe() : base( GetCropID() ) + { + Name = "cantaloupe"; + } + + public FarmableCantaloupe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableCarrot.cs b/Scripts/Items/Farming/FarmableCarrot.cs new file mode 100644 index 0000000..3d86d25 --- /dev/null +++ b/Scripts/Items/Farming/FarmableCarrot.cs @@ -0,0 +1,53 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableCarrot : FarmableCrop + { + public static int GetCropID() + { + return 3190; + } + + public override Item GetCropObject() + { + Carrot carrot = new Carrot(); + + carrot.ItemID = Utility.Random( 3191, 2 ); + carrot.Amount = 6; + + return carrot; + } + + public override int GetPickedID() + { + return 3254; + } + + [Constructable] + public FarmableCarrot() : base( GetCropID() ) + { + Name = "carrots"; + } + + public FarmableCarrot( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableCorn.cs b/Scripts/Items/Farming/FarmableCorn.cs new file mode 100644 index 0000000..2287246 --- /dev/null +++ b/Scripts/Items/Farming/FarmableCorn.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableCorn : FarmableCrop + { + public static int GetCropID() + { + return 0x0C7D; + } + + public override Item GetCropObject() + { + EarOfCorn corn = new EarOfCorn(); + + corn.ItemID = 0xC81; + + return corn; + } + + public override int GetPickedID() + { + return 0x0C7E; + } + + [Constructable] + public FarmableCorn() : base( GetCropID() ) + { + Name = "corn"; + } + + public FarmableCorn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableCotton.cs b/Scripts/Items/Farming/FarmableCotton.cs new file mode 100644 index 0000000..665424a --- /dev/null +++ b/Scripts/Items/Farming/FarmableCotton.cs @@ -0,0 +1,48 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableCotton : FarmableCrop + { + public static int GetCropID() + { + return Utility.Random( 3153, 4 ); + } + + public override Item GetCropObject() + { + return new Cotton(); + } + + public override int GetPickedID() + { + return 3254; + } + + [Constructable] + public FarmableCotton() : base( GetCropID() ) + { + Name = "cotton"; + } + + public FarmableCotton( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableCrop.cs b/Scripts/Items/Farming/FarmableCrop.cs new file mode 100644 index 0000000..c7056e0 --- /dev/null +++ b/Scripts/Items/Farming/FarmableCrop.cs @@ -0,0 +1,115 @@ +using System; +using Server; +using Server.Network; +using Server.Regions; +using Server.Mobiles; + +namespace Server.Items +{ + public abstract class FarmableCrop : Item + { + private bool m_Picked; + + public abstract Item GetCropObject(); + public abstract int GetPickedID(); + + public FarmableCrop( int itemID ) : base( itemID ) + { + Movable = false; + Weight = -2.0; + } + + public override void OnDoubleClick( Mobile from ) + { + Map map = this.Map; + Point3D loc = this.Location; + + if ( Parent != null || Movable || IsLockedDown || IsSecure || map == null || map == Map.Internal ) + return; + + if ( !from.InRange( loc, 2 ) || !from.InLOS( this ) ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + else if ( !m_Picked ) + OnPicked( from, loc, map ); + } + + public override bool OnMoveOver( Mobile m ) + { + if ( m is PlayerMobile && m.Alive ) + { + this.OnDoubleClick( m ); + } + return true; + } + + public virtual void OnPicked( Mobile from, Point3D loc, Map map ) + { + ItemID = GetPickedID(); + + Item spawn = GetCropObject(); + + if ( spawn != null ) + { + if ( from.PlaceInBackpack( spawn ) ) + { + from.SendMessage( "You put it in your backpack." ); + } + else + { + from.SendMessage( "You can't fit it in your backpack!" ); + spawn.MoveToWorld( loc, map ); + } + } + + m_Picked = true; + + Unlink(); + + Timer.DelayCall( TimeSpan.FromMinutes( 5.0 ), new TimerCallback( Delete ) ); + } + + public void Unlink() + { + ISpawner se = this.Spawner; + + if ( se != null ) + { + this.Spawner.Remove( this ); + this.Spawner = null; + } + + } + + public FarmableCrop( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + + writer.Write( m_Picked ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + switch ( version ) + { + case 0: + m_Picked = reader.ReadBool(); + break; + } + if ( m_Picked ) + { + Unlink(); + Delete(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableEggs.cs b/Scripts/Items/Farming/FarmableEggs.cs new file mode 100644 index 0000000..2f7f091 --- /dev/null +++ b/Scripts/Items/Farming/FarmableEggs.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableEggs : FarmableCrop + { + public static int GetCropID() + { + return 0x1AD4; + } + + public override Item GetCropObject() + { + Eggs eggs = new Eggs(); + + eggs.Amount = Utility.RandomMinMax(3,5); + + return eggs; + } + + public override int GetPickedID() + { + return 0x1AD5; + } + + [Constructable] + public FarmableEggs() : base( GetCropID() ) + { + Name = "nest"; + } + + public FarmableEggs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableFlax.cs b/Scripts/Items/Farming/FarmableFlax.cs new file mode 100644 index 0000000..57ba4cb --- /dev/null +++ b/Scripts/Items/Farming/FarmableFlax.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableFlax : FarmableCrop + { + public static int GetCropID() + { + return Utility.Random( 6809, 3 ); + } + + public override Item GetCropObject() + { + Flax flax = new Flax(); + + flax.ItemID = 0x1A9C; + + return flax; + } + + public override int GetPickedID() + { + return 3254; + } + + [Constructable] + public FarmableFlax() : base( GetCropID() ) + { + Name = "flax"; + } + + public FarmableFlax( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableGarlic.cs b/Scripts/Items/Farming/FarmableGarlic.cs new file mode 100644 index 0000000..6cc1a17 --- /dev/null +++ b/Scripts/Items/Farming/FarmableGarlic.cs @@ -0,0 +1,48 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableGarlic : FarmableCrop + { + public static int GetCropID() + { + return 0x18E1; + } + + public override Item GetCropObject() + { + Item item = new Garlic(); + item.Amount = 3; + return item; + } + + public override int GetPickedID() + { + return 0xCB0; + } + + [Constructable] + public FarmableGarlic() : base( GetCropID() ) + { + Name = "garlic"; + } + + public FarmableGarlic( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableGinseng.cs b/Scripts/Items/Farming/FarmableGinseng.cs new file mode 100644 index 0000000..3618bae --- /dev/null +++ b/Scripts/Items/Farming/FarmableGinseng.cs @@ -0,0 +1,48 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableGinseng : FarmableCrop + { + public static int GetCropID() + { + return Utility.RandomList( 0x18E9, 0x18EA ); + } + + public override Item GetCropObject() + { + Item item = new Ginseng(); + item.Amount = 1; + return item; + } + + public override int GetPickedID() + { + return 0xCB5; + } + + [Constructable] + public FarmableGinseng() : base( GetCropID() ) + { + Name = "ginseng"; + } + + public FarmableGinseng( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableGrape.cs b/Scripts/Items/Farming/FarmableGrape.cs new file mode 100644 index 0000000..b3d23f5 --- /dev/null +++ b/Scripts/Items/Farming/FarmableGrape.cs @@ -0,0 +1,56 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableGrape : FarmableCrop + { + public static int GetCropID() + { + return Utility.RandomList( 0x0DB6, 0x0DB7 ); + } + + public override Item GetCropObject() + { + Grapes grape = new Grapes(); + + grape.ItemID = 0x9D1; + grape.Amount = 2; + + return grape; + } + + public override int GetPickedID() + { + if ( GetCropID() == 0x0DB6 ) + return 0x0CEE; + + return 0x0CF2; + } + + [Constructable] + public FarmableGrape() : base( GetCropID() ) + { + Name = "grape vine"; + } + + public FarmableGrape( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableGreenGourd.cs b/Scripts/Items/Farming/FarmableGreenGourd.cs new file mode 100644 index 0000000..3ca8efa --- /dev/null +++ b/Scripts/Items/Farming/FarmableGreenGourd.cs @@ -0,0 +1,53 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableGreenGourd : FarmableCrop + { + public static int GetCropID() + { + return 0x01FE; + } + + public override Item GetCropObject() + { + GreenGourd gourd = new GreenGourd(); + + gourd.ItemID = 0xC66; + gourd.Amount = 2; + + return gourd; + } + + public override int GetPickedID() + { + return 0x0C60; + } + + [Constructable] + public FarmableGreenGourd() : base( GetCropID() ) + { + Name = "gourds"; + } + + public FarmableGreenGourd( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableHoneydewMelon.cs b/Scripts/Items/Farming/FarmableHoneydewMelon.cs new file mode 100644 index 0000000..aedd9c4 --- /dev/null +++ b/Scripts/Items/Farming/FarmableHoneydewMelon.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableHoneydewMelon : FarmableCrop + { + public static int GetCropID() + { + return 0x01FC; + } + + public override Item GetCropObject() + { + Grapes grape = new Grapes(); + + grape.ItemID = 0xC74; + + return grape; + } + + public override int GetPickedID() + { + return 0x0C60; + } + + [Constructable] + public FarmableHoneydewMelon() : base( GetCropID() ) + { + Name = "honeydew melon"; + } + + public FarmableHoneydewMelon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableLettuce.cs b/Scripts/Items/Farming/FarmableLettuce.cs new file mode 100644 index 0000000..e0358f9 --- /dev/null +++ b/Scripts/Items/Farming/FarmableLettuce.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableLettuce : FarmableCrop + { + public static int GetCropID() + { + return 0x0DC5; + } + + public override Item GetCropObject() + { + Lettuce lettuce = new Lettuce(); + + lettuce.ItemID = 0xc70; + + return lettuce; + } + + public override int GetPickedID() + { + return 0x0CB0; + } + + [Constructable] + public FarmableLettuce() : base( GetCropID() ) + { + Name = "lettuce"; + } + + public FarmableLettuce( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableMandrakeRoot.cs b/Scripts/Items/Farming/FarmableMandrakeRoot.cs new file mode 100644 index 0000000..42e472f --- /dev/null +++ b/Scripts/Items/Farming/FarmableMandrakeRoot.cs @@ -0,0 +1,48 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableMandrakeRoot : FarmableCrop + { + public static int GetCropID() + { + return Utility.RandomList( 0x18DF, 0x18E0 ); + } + + public override Item GetCropObject() + { + Item item = new MandrakeRoot(); + item.Amount = 1; + return item; + } + + public override int GetPickedID() + { + return 0xCB6; + } + + [Constructable] + public FarmableMandrakeRoot() : base( GetCropID() ) + { + Name = "mandrake root"; + } + + public FarmableMandrakeRoot( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableNightshade.cs b/Scripts/Items/Farming/FarmableNightshade.cs new file mode 100644 index 0000000..783a751 --- /dev/null +++ b/Scripts/Items/Farming/FarmableNightshade.cs @@ -0,0 +1,48 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableNightshade : FarmableCrop + { + public static int GetCropID() + { + return Utility.RandomList( 0x18E5, 0x18E6 ); + } + + public override Item GetCropObject() + { + Item item = new Nightshade(); + item.Amount = 1; + return item; + } + + public override int GetPickedID() + { + return 0xCAF; + } + + [Constructable] + public FarmableNightshade() : base( GetCropID() ) + { + Name = "nightshade"; + } + + public FarmableNightshade( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableOnion.cs b/Scripts/Items/Farming/FarmableOnion.cs new file mode 100644 index 0000000..54eef7f --- /dev/null +++ b/Scripts/Items/Farming/FarmableOnion.cs @@ -0,0 +1,53 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableOnion : FarmableCrop + { + public static int GetCropID() + { + return 3183; + } + + public override Item GetCropObject() + { + Onion onion = new Onion(); + + onion.ItemID = Utility.Random( 3181, 2 ); + onion.Amount = 6; + + return onion; + } + + public override int GetPickedID() + { + return 3254; + } + + [Constructable] + public FarmableOnion() : base( GetCropID() ) + { + Name = "onions"; + } + + public FarmableOnion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmablePumpkin.cs b/Scripts/Items/Farming/FarmablePumpkin.cs new file mode 100644 index 0000000..6b7ece9 --- /dev/null +++ b/Scripts/Items/Farming/FarmablePumpkin.cs @@ -0,0 +1,53 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmablePumpkin : FarmableCrop + { + public static int GetCropID() + { + return 0x0DC6; + } + + public override Item GetCropObject() + { + Pumpkin pumpkin = new Pumpkin(); + + pumpkin.ItemID = 0xC6A; + + return pumpkin; + } + + public override int GetPickedID() + { + return 0x0C5F; + } + + [Constructable] + public FarmablePumpkin(): base( GetCropID() ) + { + Name = "pumpkin"; + } + + public FarmablePumpkin( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableSquash.cs b/Scripts/Items/Farming/FarmableSquash.cs new file mode 100644 index 0000000..f69682e --- /dev/null +++ b/Scripts/Items/Farming/FarmableSquash.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableSquash : FarmableCrop + { + public static int GetCropID() + { + return 0x020E; + } + + public override Item GetCropObject() + { + Squash squash = new Squash(); + + squash.ItemID = 0xc72; + + return squash; + } + + public override int GetPickedID() + { + return 0x0C60; + } + + [Constructable] + public FarmableSquash() : base( GetCropID() ) + { + Name = "squash"; + } + + public FarmableSquash( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableTomato.cs b/Scripts/Items/Farming/FarmableTomato.cs new file mode 100644 index 0000000..0453a0f --- /dev/null +++ b/Scripts/Items/Farming/FarmableTomato.cs @@ -0,0 +1,53 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableTomato : FarmableCrop + { + public static int GetCropID() + { + return 0x01FA; + } + + public override Item GetCropObject() + { + Tomato tomato = new Tomato(); + + tomato.ItemID = 0x098F; + tomato.Amount = 2; + + return tomato; + } + + public override int GetPickedID() + { + return 0x0CAD; + } + + [Constructable] + public FarmableTomato() : base( GetCropID() ) + { + Name = "tomatoes"; + } + + public FarmableTomato( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableTurnip.cs b/Scripts/Items/Farming/FarmableTurnip.cs new file mode 100644 index 0000000..f2677ce --- /dev/null +++ b/Scripts/Items/Farming/FarmableTurnip.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableTurnip : FarmableCrop + { + public static int GetCropID() + { + return Utility.Random( 3169, 3 ); + } + + public override Item GetCropObject() + { + Turnip turnip = new Turnip(); + + turnip.ItemID = Utility.Random( 3385, 2 ); + + return turnip; + } + + public override int GetPickedID() + { + return 3254; + } + + [Constructable] + public FarmableTurnip() : base( GetCropID() ) + { + Name = "turnip"; + } + + public FarmableTurnip( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableWatermelon.cs b/Scripts/Items/Farming/FarmableWatermelon.cs new file mode 100644 index 0000000..3f321eb --- /dev/null +++ b/Scripts/Items/Farming/FarmableWatermelon.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableWatermelon : FarmableCrop + { + public static int GetCropID() + { + return 0x0DC7; + } + + public override Item GetCropObject() + { + Watermelon watermelon = new Watermelon(); + + watermelon.ItemID = 0xC5C; + + return watermelon; + } + + public override int GetPickedID() + { + return 0x0C5F; + } + + [Constructable] + public FarmableWatermelon(): base( GetCropID() ) + { + Name = "watermelon"; + } + + public FarmableWatermelon( Serial serial ): base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableWheat.cs b/Scripts/Items/Farming/FarmableWheat.cs new file mode 100644 index 0000000..2fb3c58 --- /dev/null +++ b/Scripts/Items/Farming/FarmableWheat.cs @@ -0,0 +1,48 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableWheat : FarmableCrop + { + public static int GetCropID() + { + return Utility.Random( 3157, 4 ); + } + + public override Item GetCropObject() + { + return new WheatSheaf(); + } + + public override int GetPickedID() + { + return 7869; + } + + [Constructable] + public FarmableWheat() : base( GetCropID() ) + { + Name = "wheat"; + } + + public FarmableWheat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Farming/FarmableYellowGourd.cs b/Scripts/Items/Farming/FarmableYellowGourd.cs new file mode 100644 index 0000000..34b6cdf --- /dev/null +++ b/Scripts/Items/Farming/FarmableYellowGourd.cs @@ -0,0 +1,53 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class FarmableYellowGourd : FarmableCrop + { + public static int GetCropID() + { + return 0x01FD; + } + + public override Item GetCropObject() + { + YellowGourd gourd = new YellowGourd(); + + gourd.ItemID = 0xC64; + gourd.Amount = 2; + + return gourd; + } + + public override int GetPickedID() + { + return 0x0C60; + } + + [Constructable] + public FarmableYellowGourd() : base( GetCropID() ) + { + Name = "gourds"; + } + + public FarmableYellowGourd( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Food/Beverage.cs b/Scripts/Items/Food/Beverage.cs new file mode 100644 index 0000000..c4fb21f --- /dev/null +++ b/Scripts/Items/Food/Beverage.cs @@ -0,0 +1,1191 @@ +using System; +using System.Collections; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; +using Server.ContextMenus; +using System.Collections.Generic; + +namespace Server.Items +{ + public enum BeverageType + { + Ale, + Cider, + Liquor, + Milk, + Wine, + Water + } + + public interface IHasQuantity + { + int Quantity { get; set; } + } + + public interface IWaterSource : IHasQuantity + { + } + + // TODO: Flipable attributes + + [TypeAlias( "Server.Items.BottleAle", "Server.Items.BottleLiquor", "Server.Items.BottleWine" )] + public class BeverageBottle : BaseBeverage + { + public override int BaseLabelNumber { get { return 1042959; } } // a bottle of Ale + public override int MaxQuantity { get { return 5; } } + public override bool Fillable { get { return false; } } + + public override int ComputeItemID() + { + if( !IsEmpty ) + { + switch( Content ) + { + case BeverageType.Ale: return 0x99F; + case BeverageType.Cider: return 0x99F; + case BeverageType.Liquor: return 0x99B; + case BeverageType.Milk: return 0x99B; + case BeverageType.Wine: return 0x9C7; + case BeverageType.Water: return 0x99B; + } + } + + return 0; + } + + [Constructable] + public BeverageBottle( BeverageType type ) + : base( type ) + { + Weight = 1.0; + } + + public BeverageBottle( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch( version ) + { + case 0: + { + if( CheckType( "BottleAle" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Ale; + } + else if( CheckType( "BottleLiquor" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Liquor; + } + else if( CheckType( "BottleWine" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Wine; + } + else + { + throw new Exception( World.LoadingType ); + } + + break; + } + } + } + } + + public class Jug : BaseBeverage + { + public override int BaseLabelNumber { get { return 1042965; } } // a jug of Ale + public override int MaxQuantity { get { return 10; } } + public override bool Fillable { get { return false; } } + + public override int ComputeItemID() + { + if( !IsEmpty ) + return 0x9C8; + + return 0; + } + + [Constructable] + public Jug( BeverageType type ) + : base( type ) + { + Weight = 1.0; + } + + public Jug( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CeramicMug : BaseBeverage + { + public override int BaseLabelNumber { get { return 1042982; } } // a ceramic mug of Ale + public override int MaxQuantity { get { return 1; } } + + public override int ComputeItemID() + { + if( ItemID >= 0x995 && ItemID <= 0x999 ) + return ItemID; + else if( ItemID == 0x9CA ) + return ItemID; + + return 0x995; + } + + [Constructable] + public CeramicMug() + { + Weight = 1.0; + } + + [Constructable] + public CeramicMug( BeverageType type ) + : base( type ) + { + Weight = 1.0; + } + + public CeramicMug( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PewterMug : BaseBeverage + { + public override int BaseLabelNumber { get { return 1042994; } } // a pewter mug with Ale + public override int MaxQuantity { get { return 1; } } + + public override int ComputeItemID() + { + if( ItemID >= 0xFFF && ItemID <= 0x1002 ) + return ItemID; + + return 0xFFF; + } + + [Constructable] + public PewterMug() + { + Weight = 1.0; + } + + [Constructable] + public PewterMug( BeverageType type ) + : base( type ) + { + Weight = 1.0; + } + + public PewterMug( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Goblet : BaseBeverage + { + public override int BaseLabelNumber { get { return 1043000; } } // a goblet of Ale + public override int MaxQuantity { get { return 1; } } + + public override int ComputeItemID() + { + if( ItemID == 0x99A || ItemID == 0x9B3 || ItemID == 0x9BF || ItemID == 0x9CB ) + return ItemID; + + return 0x99A; + } + + [Constructable] + public Goblet() + { + Weight = 1.0; + } + + [Constructable] + public Goblet( BeverageType type ) + : base( type ) + { + Weight = 1.0; + } + + public Goblet( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [TypeAlias( "Server.Items.MugAle", "Server.Items.GlassCider", "Server.Items.GlassLiquor", + "Server.Items.GlassMilk", "Server.Items.GlassWine", "Server.Items.GlassWater" )] + public class GlassMug : BaseBeverage + { + public override int EmptyLabelNumber { get { return 1022456; } } // mug + public override int BaseLabelNumber { get { return 1042976; } } // a mug of Ale + public override int MaxQuantity { get { return 5; } } + + public override int ComputeItemID() + { + if( IsEmpty ) + return ( ItemID >= 0x1F81 && ItemID <= 0x1F84 ? ItemID : 0x1F81 ); + + switch( Content ) + { + case BeverageType.Ale: return ( ItemID == 0x9EF ? 0x9EF : 0x9EE ); + case BeverageType.Cider: return ( ItemID >= 0x1F7D && ItemID <= 0x1F80 ? ItemID : 0x1F7D ); + case BeverageType.Liquor: return ( ItemID >= 0x1F85 && ItemID <= 0x1F88 ? ItemID : 0x1F85 ); + case BeverageType.Milk: return ( ItemID >= 0x1F89 && ItemID <= 0x1F8C ? ItemID : 0x1F89 ); + case BeverageType.Wine: return ( ItemID >= 0x1F8D && ItemID <= 0x1F90 ? ItemID : 0x1F8D ); + case BeverageType.Water: return ( ItemID >= 0x1F91 && ItemID <= 0x1F94 ? ItemID : 0x1F91 ); + } + + return 0; + } + + [Constructable] + public GlassMug() + { + Weight = 1.0; + } + + [Constructable] + public GlassMug( BeverageType type ) + : base( type ) + { + Weight = 1.0; + } + + public GlassMug( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch( version ) + { + case 0: + { + if( CheckType( "MugAle" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Ale; + } + else if( CheckType( "GlassCider" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Cider; + } + else if( CheckType( "GlassLiquor" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Liquor; + } + else if( CheckType( "GlassMilk" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Milk; + } + else if( CheckType( "GlassWine" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Wine; + } + else if( CheckType( "GlassWater" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Water; + } + else + { + throw new Exception( World.LoadingType ); + } + + break; + } + } + } + } + + [TypeAlias( "Server.Items.PitcherAle", "Server.Items.PitcherCider", "Server.Items.PitcherLiquor", + "Server.Items.PitcherMilk", "Server.Items.PitcherWine", "Server.Items.PitcherWater", + "Server.Items.GlassPitcher" )] + public class Pitcher : BaseBeverage + { + public override int BaseLabelNumber { get { return 1048128; } } // a Pitcher of Ale + public override int MaxQuantity { get { return 5; } } + + public override int ComputeItemID() + { + if( IsEmpty ) + { + if( ItemID == 0x9A7 || ItemID == 0xFF7 ) + return ItemID; + + return 0xFF6; + } + + switch( Content ) + { + case BeverageType.Ale: + { + if( ItemID == 0x1F96 ) + return ItemID; + + return 0x1F95; + } + case BeverageType.Cider: + { + if( ItemID == 0x1F98 ) + return ItemID; + + return 0x1F97; + } + case BeverageType.Liquor: + { + if( ItemID == 0x1F9A ) + return ItemID; + + return 0x1F99; + } + case BeverageType.Milk: + { + if( ItemID == 0x9AD ) + return ItemID; + + return 0x9F0; + } + case BeverageType.Wine: + { + if( ItemID == 0x1F9C ) + return ItemID; + + return 0x1F9B; + } + case BeverageType.Water: + { + if( ItemID == 0xFF8 || ItemID == 0xFF9 || ItemID == 0x1F9E ) + return ItemID; + + return 0x1F9D; + } + } + + return 0; + } + + [Constructable] + public Pitcher() + { + Weight = 2.0; + } + + [Constructable] + public Pitcher( BeverageType type ) + : base( type ) + { + Weight = 2.0; + } + + public Pitcher( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + if( CheckType( "PitcherWater" ) || CheckType( "GlassPitcher" ) ) + base.InternalDeserialize( reader, false ); + else + base.InternalDeserialize( reader, true ); + + int version = reader.ReadInt(); + + switch( version ) + { + case 0: + { + if( CheckType( "PitcherAle" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Ale; + } + else if( CheckType( "PitcherCider" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Cider; + } + else if( CheckType( "PitcherLiquor" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Liquor; + } + else if( CheckType( "PitcherMilk" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Milk; + } + else if( CheckType( "PitcherWine" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Wine; + } + else if( CheckType( "PitcherWater" ) ) + { + Quantity = MaxQuantity; + Content = BeverageType.Water; + } + else if( CheckType( "GlassPitcher" ) ) + { + Quantity = 0; + Content = BeverageType.Water; + } + else + { + throw new Exception( World.LoadingType ); + } + + break; + } + } + } + } + + public abstract class BaseBeverage : Item, IHasQuantity + { + private BeverageType m_Content; + private int m_Quantity; + private Mobile m_Poisoner; + private Poison m_Poison; + + public override int LabelNumber + { + get + { + int num = BaseLabelNumber; + + if( IsEmpty || num == 0 ) + return EmptyLabelNumber; + + return BaseLabelNumber + (int)m_Content; + } + } + + public virtual bool ShowQuantity { get { return ( MaxQuantity > 1 ); } } + public virtual bool Fillable { get { return true; } } + public virtual bool Pourable { get { return true; } } + + public virtual int EmptyLabelNumber { get { return base.LabelNumber; } } + public virtual int BaseLabelNumber { get { return 0; } } + + public abstract int MaxQuantity { get; } + + public abstract int ComputeItemID(); + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsEmpty + { + get { return ( m_Quantity <= 0 ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool ContainsAlchohol + { + get { return ( !IsEmpty && m_Content == BeverageType.Liquor ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsFull + { + get { return ( m_Quantity >= MaxQuantity ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Poison Poison + { + get { return m_Poison; } + set { m_Poison = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Poisoner + { + get { return m_Poisoner; } + set { m_Poisoner = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public BeverageType Content + { + get { return m_Content; } + set + { + m_Content = value; + + InvalidateProperties(); + + int itemID = ComputeItemID(); + + if( itemID > 0 ) + ItemID = itemID; + else + Delete(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Quantity + { + get { return m_Quantity; } + set + { + if( value < 0 ) + value = 0; + else if( value > MaxQuantity ) + value = MaxQuantity; + + m_Quantity = value; + + InvalidateProperties(); + + int itemID = ComputeItemID(); + + if( itemID > 0 ) + ItemID = itemID; + else + Delete(); + } + } + + public virtual int GetQuantityDescription() + { + int perc = ( m_Quantity * 100 ) / MaxQuantity; + + if( perc <= 0 ) + return 1042975; // It's empty. + else if( perc <= 33 ) + return 1042974; // It's nearly empty. + else if( perc <= 66 ) + return 1042973; // It's half full. + else + return 1042972; // It's full. + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if( ShowQuantity ) + list.Add( GetQuantityDescription() ); + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if( ShowQuantity ) + LabelTo( from, GetQuantityDescription() ); + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + + if ( Content == BeverageType.Ale ){ list.Add( 1070722, "ale" ); } + else if ( Content == BeverageType.Cider ){ list.Add( 1070722, "cider" ); } + else if ( Content == BeverageType.Liquor ){ list.Add( 1070722, "liquor" ); } + else if ( Content == BeverageType.Milk ){ list.Add( 1070722, "milk" ); } + else if ( Content == BeverageType.Wine ){ list.Add( 1070722, "wine" ); } + else if ( Content == BeverageType.Water ){ list.Add( 1070722, "water" ); } + } + + public virtual bool ValidateUse( Mobile from, bool message ) + { + if( Deleted ) + return false; + + if( !Movable && !Fillable ) + { + Multis.BaseHouse house = Multis.BaseHouse.FindHouseAt( this ); + + if( house == null || !house.IsLockedDown( this ) ) + { + if( message ) + from.SendLocalizedMessage( 502946, "", 0x59 ); // That belongs to someone else. + + return false; + } + } + + if( from.Map != Map || !from.InRange( GetWorldLocation(), 2 ) || !from.InLOS( this ) ) + { + if( message ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + + return false; + } + + return true; + } + + public virtual void Fill_OnTarget( Mobile from, object targ ) + { + if( !IsEmpty || !Fillable || !ValidateUse( from, false ) ) + return; + + if( targ is BaseBeverage ) + { + BaseBeverage bev = (BaseBeverage)targ; + + if( bev.IsEmpty || !bev.ValidateUse( from, true ) ) + return; + + this.Content = bev.Content; + this.Poison = bev.Poison; + this.Poisoner = bev.Poisoner; + + if( bev.Quantity > this.MaxQuantity ) + { + this.Quantity = this.MaxQuantity; + bev.Quantity -= this.MaxQuantity; + } + else + { + this.Quantity += bev.Quantity; + bev.Quantity = 0; + } + } + else if( targ is Item ) + { + Item item = (Item)targ; + IWaterSource src; + + src = ( item as IWaterSource ); + + if( src == null && item is AddonComponent ) + src = ( ( (AddonComponent)item ).Addon as IWaterSource ); + + if( src == null || src.Quantity <= 0 ) + return; + + if( from.Map != item.Map || !from.InRange( item.GetWorldLocation(), 2 ) || !from.InLOS( item ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return; + } + + this.Content = BeverageType.Water; + this.Poison = null; + this.Poisoner = null; + + if( src.Quantity > this.MaxQuantity ) + { + this.Quantity = this.MaxQuantity; + src.Quantity -= this.MaxQuantity; + } + else + { + this.Quantity += src.Quantity; + src.Quantity = 0; + } + + from.SendLocalizedMessage( 1010089 ); // You fill the container with water. + } + else if( targ is Cow ) + { + Cow cow = (Cow)targ; + + if( cow.TryMilk( from ) ) + { + Content = BeverageType.Milk; + Quantity = MaxQuantity; + from.SendLocalizedMessage( 1080197 ); // You fill the container with milk. + } + } + } + + private static int[] m_SwampTiles = new int[] + { + 0x9C4, 0x9EB, + 0x3D65, 0x3D65, + 0x3DC0, 0x3DD9, + 0x3DDB, 0x3DDC, + 0x3DDE, 0x3EF0, + 0x3FF6, 0x3FF6, + 0x3FFC, 0x3FFE, + }; + + #region Effects of achohol + private static Hashtable m_Table = new Hashtable(); + + public static void Initialize() + { + EventSink.Login += new LoginEventHandler( EventSink_Login ); + } + + private static void EventSink_Login( LoginEventArgs e ) + { + CheckHeaveTimer( e.Mobile ); + } + + public static void CheckHeaveTimer( Mobile from ) + { + if( from.BAC > 0 && from.Map != Map.Internal && !from.Deleted ) + { + Timer t = (Timer)m_Table[ from ]; + + if( t == null ) + { + if( from.BAC > 60 ) + from.BAC = 60; + + t = new HeaveTimer( from ); + t.Start(); + + m_Table[ from ] = t; + } + } + else + { + Timer t = (Timer)m_Table[ from ]; + + if( t != null ) + { + t.Stop(); + m_Table.Remove( from ); + + from.SendLocalizedMessage( 500850 ); // You feel sober. + } + } + } + + private class HeaveTimer : Timer + { + private Mobile m_Drunk; + + public HeaveTimer( Mobile drunk ) + : base( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromSeconds( 5.0 ) ) + { + m_Drunk = drunk; + + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + if( m_Drunk.Deleted || m_Drunk.Map == Map.Internal ) + { + Stop(); + m_Table.Remove( m_Drunk ); + } + else if( m_Drunk.Alive ) + { + if( m_Drunk.BAC > 60 ) + m_Drunk.BAC = 60; + + // chance to get sober + if( 10 > Utility.Random( 100 ) ) + --m_Drunk.BAC; + + // lose some stats + m_Drunk.Stam -= 1; + m_Drunk.Mana -= 1; + + if( Utility.Random( 1, 4 ) == 1 ) + { + if( !m_Drunk.Mounted ) + { + // turn in a random direction + m_Drunk.Direction = (Direction)Utility.Random( 8 ); + + // heave + m_Drunk.Animate( 32, 5, 1, true, false, 0 ); + } + + // *hic* + m_Drunk.PublicOverheadMessage( Network.MessageType.Regular, 0x3B2, 500849 ); + } + + if( m_Drunk.BAC <= 0 ) + { + Stop(); + m_Table.Remove( m_Drunk ); + + m_Drunk.SendLocalizedMessage( 500850 ); // You feel sober. + } + } + } + } + + #endregion + + public virtual void Pour_OnTarget( Mobile from, object targ ) + { + if( IsEmpty || !Pourable || !ValidateUse( from, false ) ) + return; + + if( targ is BaseBeverage ) + { + BaseBeverage bev = (BaseBeverage)targ; + + if( !bev.ValidateUse( from, true ) ) + return; + + if( bev.IsFull && bev.Content == this.Content ) + { + from.SendLocalizedMessage( 500848 ); // Couldn't pour it there. It was already full. + } + else if( !bev.IsEmpty ) + { + from.SendLocalizedMessage( 500846 ); // Can't pour it there. + } + else + { + bev.Content = this.Content; + bev.Poison = this.Poison; + bev.Poisoner = this.Poisoner; + + if( this.Quantity > bev.MaxQuantity ) + { + bev.Quantity = bev.MaxQuantity; + this.Quantity -= bev.MaxQuantity; + } + else + { + bev.Quantity += this.Quantity; + this.Quantity = 0; + } + + from.PlaySound( 0x4E ); + } + } + else if ( from == targ && from.Thirst >= 20 ) + { + from.SendMessage( "You are too quenched to drink more." ); + } + else if ( from == targ ) + { + int thirst = 1; + + switch( Content ) + { + case BeverageType.Ale: thirst = 3; break; + case BeverageType.Cider: thirst = 2; break; + case BeverageType.Liquor: thirst = 1; break; + case BeverageType.Milk: thirst = 1; break; + case BeverageType.Wine: thirst = 2; break; + } + + if( from.Thirst < 20 ) + from.Thirst += thirst; + + if( ContainsAlchohol ) + { + int bac = 2; + + from.BAC += bac; + + if( from.BAC > 60 ) + from.BAC = 60; + + CheckHeaveTimer( from ); + } + + from.PlaySound( Utility.RandomList( 0x30, 0x2D6 ) ); + + if( m_Poison != null ) + from.ApplyPoison( m_Poisoner, m_Poison ); + + --Quantity; + } + else + { + from.SendLocalizedMessage( 500846 ); // Can't pour it there. + } + } + + public override void OnDoubleClick( Mobile from ) + { + if( IsEmpty ) + { + from.SendMessage( "That is empty." ); + } + else if( Pourable && ValidateUse( from, true ) ) + { + Pour_OnTarget( from, from ); + } + } + + public class PourMenu : ContextMenuEntry + { + private BaseBeverage i_Beverage; + private Mobile m_From; + + public PourMenu( Mobile from, BaseBeverage drink ) : base( 6250, 1 ) + { + m_From = from; + i_Beverage = drink; + } + + public override void OnClick() + { + if( i_Beverage.IsChildOf( m_From.Backpack ) ) + { + m_From.BeginTarget( -1, true, TargetFlags.None, new TargetCallback( i_Beverage.Pour_OnTarget ) ); + m_From.SendLocalizedMessage( 1010086 ); // What do you want to use this on? + } + else + { + m_From.SendMessage( "This must be in your backpack to use." ); + } + } + } + + public class FillMenu : ContextMenuEntry + { + private BaseBeverage i_Beverage; + private Mobile m_From; + + public FillMenu( Mobile from, BaseBeverage drink ) : base( 6251, 1 ) + { + m_From = from; + i_Beverage = drink; + } + + public override void OnClick() + { + if( i_Beverage.IsChildOf( m_From.Backpack ) ) + { + m_From.BeginTarget( -1, true, TargetFlags.None, new TargetCallback( i_Beverage.Fill_OnTarget ) ); + m_From.SendLocalizedMessage( 500837 ); // Fill from what? + } + else + { + m_From.SendMessage( "This must be in your backpack to use." ); + } + } + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( from.Alive && IsEmpty ) + { + if( !Fillable || !ValidateUse( from, true ) ){} else + list.Add( new FillMenu( from, this ) ); + } + else if ( from.Alive && Pourable && ValidateUse( from, true ) ) + list.Add( new PourMenu( from, this ) ); + } + + public static bool ConsumeTotal( Container pack, BeverageType content, int quantity ) + { + return ConsumeTotal( pack, typeof( BaseBeverage ), content, quantity ); + } + + public static bool ConsumeTotal( Container pack, Type itemType, BeverageType content, int quantity ) + { + Item[] items = pack.FindItemsByType( itemType ); + + // First pass, compute total + int total = 0; + + for( int i = 0; i < items.Length; ++i ) + { + BaseBeverage bev = items[ i ] as BaseBeverage; + + if( bev != null && bev.Content == content && !bev.IsEmpty ) + total += bev.Quantity; + } + + if( total >= quantity ) + { + // We've enough, so consume it + + int need = quantity; + + for( int i = 0; i < items.Length; ++i ) + { + BaseBeverage bev = items[ i ] as BaseBeverage; + + if( bev == null || bev.Content != content || bev.IsEmpty ) + continue; + + int theirQuantity = bev.Quantity; + + if( theirQuantity < need ) + { + bev.Quantity = 0; + need -= theirQuantity; + } + else + { + bev.Quantity -= need; + return true; + } + } + } + + return false; + } + + public BaseBeverage() + { + ItemID = ComputeItemID(); + } + + public BaseBeverage( BeverageType type ) + { + m_Content = type; + m_Quantity = MaxQuantity; + ItemID = ComputeItemID(); + } + + public BaseBeverage( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + + writer.Write( (Mobile)m_Poisoner ); + + Poison.Serialize( m_Poison, writer ); + writer.Write( (int)m_Content ); + writer.Write( (int)m_Quantity ); + } + + protected bool CheckType( string name ) + { + return ( World.LoadingType == String.Format( "Server.Items.{0}", name ) ); + } + + public override void Deserialize( GenericReader reader ) + { + InternalDeserialize( reader, true ); + } + + protected void InternalDeserialize( GenericReader reader, bool read ) + { + base.Deserialize( reader ); + + if( !read ) + return; + + int version = reader.ReadInt(); + + switch( version ) + { + case 1: + { + m_Poisoner = reader.ReadMobile(); + goto case 0; + } + case 0: + { + m_Poison = Poison.Deserialize( reader ); + m_Content = (BeverageType)reader.ReadInt(); + m_Quantity = reader.ReadInt(); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Food/BeverageEmpty.cs b/Scripts/Items/Food/BeverageEmpty.cs new file mode 100644 index 0000000..1de135e --- /dev/null +++ b/Scripts/Items/Food/BeverageEmpty.cs @@ -0,0 +1,59 @@ +using System; + +namespace Server.Items +{ + [FlipableAttribute( 0x1f81, 0x1f82, 0x1f83, 0x1f84 )] + public class Glass : Item + { + [Constructable] + public Glass() : base( 0x1f81 ) + { + this.Weight = 0.1; + } + + public Glass( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GlassBottle : Item + { + [Constructable] + public GlassBottle() : base( 0xe2b ) + { + this.Weight = 0.3; + } + + public GlassBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Food/Bowls.cs b/Scripts/Items/Food/Bowls.cs new file mode 100644 index 0000000..78b2754 --- /dev/null +++ b/Scripts/Items/Food/Bowls.cs @@ -0,0 +1,532 @@ +using System; + +namespace Server.Items +{ + public class EmptyWoodenBowl : Item + { + [Constructable] + public EmptyWoodenBowl() : base( 0x15F8 ) + { + Weight = 1.0; + } + + public EmptyWoodenBowl( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class EmptyPewterBowl : Item + { + [Constructable] + public EmptyPewterBowl() : base( 0x15FD ) + { + Weight = 1.0; + } + + public EmptyPewterBowl( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WoodenBowlOfCarrots : Food + { + [Constructable] + public WoodenBowlOfCarrots() : base( 0x15F9 ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyWoodenBowl() ); + return true; + } + + public WoodenBowlOfCarrots( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WoodenBowlOfCorn : Food + { + [Constructable] + public WoodenBowlOfCorn() : base( 0x15FA ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyWoodenBowl() ); + return true; + } + + public WoodenBowlOfCorn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WoodenBowlOfLettuce : Food + { + [Constructable] + public WoodenBowlOfLettuce() : base( 0x15FB ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyWoodenBowl() ); + return true; + } + + public WoodenBowlOfLettuce( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WoodenBowlOfPeas : Food + { + [Constructable] + public WoodenBowlOfPeas() : base( 0x15FC ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyWoodenBowl() ); + return true; + } + + public WoodenBowlOfPeas( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PewterBowlOfCarrots : Food + { + [Constructable] + public PewterBowlOfCarrots() : base( 0x15FE ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyPewterBowl() ); + return true; + } + + public PewterBowlOfCarrots( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PewterBowlOfCorn : Food + { + [Constructable] + public PewterBowlOfCorn() : base( 0x15FF ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyPewterBowl() ); + return true; + } + + public PewterBowlOfCorn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PewterBowlOfLettuce : Food + { + [Constructable] + public PewterBowlOfLettuce() : base( 0x1600 ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyPewterBowl() ); + return true; + } + + public PewterBowlOfLettuce( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PewterBowlOfPeas : Food + { + [Constructable] + public PewterBowlOfPeas() : base( 0x1601 ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyPewterBowl() ); + return true; + } + + public PewterBowlOfPeas( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PewterBowlOfPotatos : Food + { + [Constructable] + public PewterBowlOfPotatos() : base( 0x1602 ) + { + Stackable = false; + Weight = 1.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyPewterBowl() ); + return true; + } + + public PewterBowlOfPotatos( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [TypeAlias( "Server.Items.EmptyLargeWoodenBowl" )] + public class EmptyWoodenTub : Item + { + [Constructable] + public EmptyWoodenTub() : base( 0x1605 ) + { + Weight = 2.0; + } + + public EmptyWoodenTub( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [TypeAlias( "Server.Items.EmptyLargePewterBowl" )] + public class EmptyPewterTub : Item + { + [Constructable] + public EmptyPewterTub() : base( 0x1603 ) + { + Weight = 2.0; + } + + public EmptyPewterTub( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WoodenBowlOfStew : Food + { + [Constructable] + public WoodenBowlOfStew() : base( 0x1604 ) + { + Stackable = false; + Weight = 2.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyWoodenTub() ); + return true; + } + + public WoodenBowlOfStew( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WoodenBowlOfTomatoSoup : Food + { + [Constructable] + public WoodenBowlOfTomatoSoup() : base( 0x1606 ) + { + Stackable = false; + Weight = 2.0; + FillFactor = 2; + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new EmptyWoodenTub() ); + return true; + } + + public WoodenBowlOfTomatoSoup( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Food/CookableFood.cs b/Scripts/Items/Food/CookableFood.cs new file mode 100644 index 0000000..2eee869 --- /dev/null +++ b/Scripts/Items/Food/CookableFood.cs @@ -0,0 +1,912 @@ +using System; +using Server.Targeting; +using Server.Items; +using Server.Misc; +using Server.Network; + +namespace Server.Items +{ + public abstract class CookableFood : Item + { + private int m_CookingLevel; + + [CommandProperty( AccessLevel.GameMaster )] + public int CookingLevel + { + get + { + return m_CookingLevel; + } + set + { + m_CookingLevel = value; + } + } + + public CookableFood( int itemID, int cookingLevel ) : base( itemID ) + { + m_CookingLevel = cookingLevel; + } + + public CookableFood( Serial serial ) : base( serial ) + { + } + + public abstract Food Cook(); + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + // Version 1 + writer.Write( (int) m_CookingLevel ); + + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_CookingLevel = reader.ReadInt(); + + break; + } + } + } + +#if false + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + from.Target = new InternalTarget( this ); + } +#endif + + public static bool IsHeatSource( object targeted ) + { + int itemID; + + if ( targeted is Item ) + itemID = ((Item)targeted).ItemID; + else if ( targeted is StaticTarget ) + itemID = ((StaticTarget)targeted).ItemID; + else + return false; + + if ( itemID >= 0xDE3 && itemID <= 0xDE9 ) + return true; // Campfire + else if ( itemID >= 0x461 && itemID <= 0x48E ) + return true; // Sandstone oven/fireplace + else if ( itemID >= 0x92B && itemID <= 0x96C ) + return true; // Stone oven/fireplace + else if ( itemID == 0xFAC ) + return true; // Firepit + else if ( itemID >= 0x184A && itemID <= 0x184C ) + return true; // Heating stand (left) + else if ( itemID >= 0x184E && itemID <= 0x1850 ) + return true; // Heating stand (right) + else if ( itemID >= 0x398C && itemID <= 0x399F ) + return true; // Fire field + else if ( itemID >= 0x3E4 && itemID <= 0x3E9 ) + return true; // Bonfire + else if ( itemID >= 0x29FD && itemID <= 0x2A03 ) + return true; // Stone Firepit + + return false; + } + + private class InternalTarget : Target + { + private CookableFood m_Item; + + public InternalTarget( CookableFood item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) return; + + if ( CookableFood.IsHeatSource( targeted ) ) + { + if ( from.BeginAction( typeof( CookableFood ) ) ) + { + from.PlaySound( 0x225 ); + + m_Item.Consume(); + + InternalTimer t = new InternalTimer( from, targeted as IPoint3D, from.Map, m_Item ); + t.Start(); + } + else + { + from.SendLocalizedMessage( 500119 ); // You must wait to perform another action + } + } + } + + private class InternalTimer : Timer + { + private Mobile m_From; + private IPoint3D m_Point; + private Map m_Map; + private CookableFood m_CookableFood; + + public InternalTimer( Mobile from, IPoint3D p, Map map, CookableFood cookableFood ) : base( TimeSpan.FromSeconds( 5.0 ) ) + { + m_From = from; + m_Point = p; + m_Map = map; + m_CookableFood = cookableFood; + } + + protected override void OnTick() + { + m_From.EndAction( typeof( CookableFood ) ); + + if ( m_From.Map != m_Map || (m_Point != null && m_From.GetDistanceToSqrt( m_Point ) > 3) ) + { + m_From.SendLocalizedMessage( 500686 ); // You burn the food to a crisp! It's ruined. + return; + } + + if ( SkillCheck.TestTrade( m_From, Trades.Cooking, m_CookableFood.CookingLevel, 100 ) ) + { + Food cookedFood = m_CookableFood.Cook(); + + if ( m_From.AddToBackpack( cookedFood ) ) + m_From.PlaySound( 0x57 ); + } + else + { + m_From.SendLocalizedMessage( 500686 ); // You burn the food to a crisp! It's ruined. + } + } + } + } + } + + // ********** RawRibs ********** + public class RawRibs : CookableFood + { + [Constructable] + public RawRibs() : this( 1 ) + { + } + + [Constructable] + public RawRibs( int amount ) : base( 0x9F1, 10 ) + { + Weight = 1.0; + Stackable = true; + Amount = amount; + } + + public RawRibs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new Ribs(); + } + } + + + // ********** RawLambLeg ********** + public class RawLambLeg : CookableFood + { + [Constructable] + public RawLambLeg() : this( 1 ) + { + } + + [Constructable] + public RawLambLeg( int amount ) : base( 0x1609, 10 ) + { + Weight = 1.0; + Stackable = true; + Amount = amount; + } + + public RawLambLeg( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 && Weight == 1 ) + Weight = -1; + } + + public override Food Cook() + { + return new LambLeg(); + } + } + + // ********** RawChickenLeg ********** + public class RawChickenLeg : CookableFood + { + [Constructable] + public RawChickenLeg() : this( 1 ) + { + } + + [Constructable] + public RawChickenLeg( int amount ) : base( 0x1607, 10 ) + { + Weight = 1.0; + Stackable = true; + Amount = amount; + } + + public RawChickenLeg( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new ChickenLeg(); + } + } + + // ********** RawHam ********** + public class RawHam : CookableFood + { + [Constructable] + public RawHam() : this( 1 ) + { + } + + [Constructable] + public RawHam( int amount ) : base( 0x096F, 10 ) + { + Weight = 1.0; + Stackable = true; + Name = "raw ham"; + Amount = amount; + } + + public RawHam( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new Ham(); + } + } + + // ********** RawHam ********** + public class RawSlabOfBacon : CookableFood + { + [Constructable] + public RawSlabOfBacon() : this( 1 ) + { + } + + [Constructable] + public RawSlabOfBacon( int amount ) : base( 0x0E0F, 10 ) + { + Weight = 1.0; + Stackable = true; + Name = "raw slab of bacon"; + Amount = amount; + } + + public RawSlabOfBacon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new Ham(); + } + } + + // ********** RawBird ********** + public class RawBird : CookableFood + { + [Constructable] + public RawBird() : this( 1 ) + { + } + + [Constructable] + public RawBird( int amount ) : base( 0x9B9, 10 ) + { + Weight = 1.0; + Stackable = true; + Amount = amount; + } + + public RawBird( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new CookedBird(); + } + } + + + // ********** UnbakedPeachCobbler ********** + public class UnbakedPeachCobbler : CookableFood + { + public override int LabelNumber{ get{ return 1041335; } } // unbaked peach cobbler + + [Constructable] + public UnbakedPeachCobbler() : base( 0x1042, 25 ) + { + Weight = 1.0; + } + + public UnbakedPeachCobbler( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + public override Food Cook() + { + return new PeachCobbler(); + } + } + + // ********** UnbakedFruitPie ********** + public class UnbakedFruitPie : CookableFood + { + public override int LabelNumber{ get{ return 1041334; } } // unbaked fruit pie + + [Constructable] + public UnbakedFruitPie() : base( 0x1042, 25 ) + { + Weight = 1.0; + } + + public UnbakedFruitPie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new FruitPie(); + } + } + + // ********** UnbakedMeatPie ********** + public class UnbakedMeatPie : CookableFood + { + public override int LabelNumber{ get{ return 1041338; } } // unbaked meat pie + + [Constructable] + public UnbakedMeatPie() : base( 0x1042, 25 ) + { + Weight = 1.0; + } + + public UnbakedMeatPie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new MeatPie(); + } + } + + // ********** UnbakedPumpkinPie ********** + public class UnbakedPumpkinPie : CookableFood + { + public override int LabelNumber{ get{ return 1041342; } } // unbaked pumpkin pie + + [Constructable] + public UnbakedPumpkinPie() : base( 0x1042, 25 ) + { + Weight = 1.0; + } + + public UnbakedPumpkinPie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new PumpkinPie(); + } + } + + // ********** UnbakedApplePie ********** + public class UnbakedApplePie : CookableFood + { + public override int LabelNumber{ get{ return 1041336; } } // unbaked apple pie + + [Constructable] + public UnbakedApplePie() : base( 0x1042, 25 ) + { + Weight = 1.0; + } + + public UnbakedApplePie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new ApplePie(); + } + } + + // ********** UncookedCheesePizza ********** + [TypeAlias( "Server.Items.UncookedPizza" )] + public class UncookedCheesePizza : CookableFood + { + public override int LabelNumber{ get{ return 1041341; } } // uncooked cheese pizza + + [Constructable] + public UncookedCheesePizza() : base( 0x1083, 20 ) + { + Weight = 1.0; + } + + public UncookedCheesePizza( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( ItemID == 0x1040 ) + ItemID = 0x1083; + + if ( Hue == 51 ) + Hue = 0; + } + + public override Food Cook() + { + return new CheesePizza(); + } + } + + // ********** UncookedSausagePizza ********** + public class UncookedSausagePizza : CookableFood + { + public override int LabelNumber{ get{ return 1041337; } } // uncooked sausage pizza + + [Constructable] + public UncookedSausagePizza() : base( 0x1083, 20 ) + { + Weight = 1.0; + } + + public UncookedSausagePizza( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new SausagePizza(); + } + } + +#if false + // ********** UncookedPizza ********** + public class UncookedPizza : CookableFood + { + [Constructable] + public UncookedPizza() : base( 0x1083, 20 ) + { + Weight = 1.0; + } + + public UncookedPizza( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( ItemID == 0x1040 ) + ItemID = 0x1083; + + if ( Hue == 51 ) + Hue = 0; + } + + public override Food Cook() + { + return new Pizza(); + } + } +#endif + + // ********** UnbakedQuiche ********** + public class UnbakedQuiche : CookableFood + { + public override int LabelNumber{ get{ return 1041339; } } // unbaked quiche + + [Constructable] + public UnbakedQuiche() : base( 0x1042, 25 ) + { + Weight = 1.0; + } + + public UnbakedQuiche( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new Quiche(); + } + } + + // ********** Eggs ********** + public class Eggs : CookableFood + { + [Constructable] + public Eggs() : this( 1 ) + { + } + + [Constructable] + public Eggs( int amount ) : base( 0x9B5, 15 ) + { + Weight = 1.0; + Stackable = true; + Amount = amount; + } + + public Eggs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version < 1 ) + { + Stackable = true; + + if ( Weight == 0.5 ) + Weight = 1.0; + } + } + + public override Food Cook() + { + return new FriedEggs(); + } + } + + // ********** CookieMix ********** + public class CookieMix : CookableFood + { + [Constructable] + public CookieMix() : base( 0x103F, 20 ) + { + Weight = 1.0; + } + + public CookieMix( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new Cookies(); + } + } + + // ********** CakeMix ********** + public class CakeMix : CookableFood + { + public override int LabelNumber{ get{ return 1041002; } } // cake mix + + [Constructable] + public CakeMix() : base( 0x103F, 40 ) + { + Weight = 1.0; + } + + public CakeMix( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override Food Cook() + { + return new Cake(); + } + } + + public class RawFishSteak : CookableFood + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public RawFishSteak() : this( 1 ) + { + } + + [Constructable] + public RawFishSteak( int amount ) : base( 0x097A, 10 ) + { + Weight = 1.0; + Stackable = true; + Amount = amount; + } + + public RawFishSteak( Serial serial ) : base( serial ) + { + } + + public override Food Cook() + { + return new FishSteak(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Food/Cooking.cs b/Scripts/Items/Food/Cooking.cs new file mode 100644 index 0000000..e9f0064 --- /dev/null +++ b/Scripts/Items/Food/Cooking.cs @@ -0,0 +1,643 @@ +using System; +using Server.Targeting; +using Server.Items; +using Server.Misc; +using Server.Network; + +namespace Server.Items +{ + public class UtilityItem + { + static public int RandomChoice( int itemID1, int itemID2 ) + { + int iRet = 0; + switch ( Utility.Random( 2 ) ) + { + default: + case 0: iRet = itemID1; break; + case 1: iRet = itemID2; break; + } + return iRet; + } + } + + // ********** Dough ********** + public class Dough : Item + { + [Constructable] + public Dough() : base( 0x103d ) + { + Stackable = false; + Weight = 1.0; + } + + public Dough( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + +#if false + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + from.Target = new InternalTarget( this ); + } +#endif + + private class InternalTarget : Target + { + private Dough m_Item; + + public InternalTarget( Dough item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) return; + + if ( targeted is Eggs ) + { + m_Item.Delete(); + + ((Eggs)targeted).Consume(); + + from.AddToBackpack( new UnbakedQuiche() ); + from.AddToBackpack( new Eggshells() ); + } + else if ( targeted is CheeseWheel ) + { + m_Item.Delete(); + + ((CheeseWheel)targeted).Consume(); + + from.AddToBackpack( new CheesePizza() ); + } + else if ( targeted is Sausage ) + { + m_Item.Delete(); + + ((Sausage)targeted).Consume(); + + from.AddToBackpack( new SausagePizza() ); + } + else if ( targeted is Apple ) + { + m_Item.Delete(); + + ((Apple)targeted).Consume(); + + from.AddToBackpack( new UnbakedApplePie() ); + } + + else if ( targeted is Peach ) + { + m_Item.Delete(); + + ((Peach)targeted).Consume(); + + from.AddToBackpack( new UnbakedPeachCobbler() ); + } + } + } + } + + // ********** SweetDough ********** + public class SweetDough : Item + { + public override int LabelNumber{ get{ return 1041340; } } // sweet dough + + [Constructable] + public SweetDough() : base( 0x103d ) + { + Stackable = false; + Weight = 1.0; + Hue = 150; + } + + public SweetDough( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Hue == 51 ) + Hue = 150; + } + +#if false + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + from.Target = new InternalTarget( this ); + } +#endif + + private class InternalTarget : Target + { + private SweetDough m_Item; + + public InternalTarget( SweetDough item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) return; + + if ( targeted is BowlFlour ) + { + m_Item.Delete(); + ((BowlFlour)targeted).Delete(); + + from.AddToBackpack( new CakeMix() ); + } + else if ( targeted is Campfire ) + { + from.PlaySound( 0x225 ); + m_Item.Delete(); + InternalTimer t = new InternalTimer( from, (Campfire)targeted ); + t.Start(); + } + } + + private class InternalTimer : Timer + { + private Mobile m_From; + private Campfire m_Campfire; + + public InternalTimer( Mobile from, Campfire campfire ) : base( TimeSpan.FromSeconds( 5.0 ) ) + { + m_From = from; + m_Campfire = campfire; + } + + protected override void OnTick() + { + if ( m_From.GetDistanceToSqrt( m_Campfire ) > 3 ) + { + m_From.SendLocalizedMessage( 500686 ); // You burn the food to a crisp! It's ruined. + return; + } + + if ( SkillCheck.TestTrade( m_From, Trades.Cooking, 0, 10 ) ) + { + if ( m_From.AddToBackpack( new Muffins() ) ) + m_From.PlaySound( 0x57 ); + } + else + { + m_From.SendLocalizedMessage( 500686 ); // You burn the food to a crisp! It's ruined. + } + } + } + } + } + + // ********** JarHoney ********** + public class JarHoney : Item + { + [Constructable] + public JarHoney() : base( 0x9ec ) + { + Weight = 1.0; + Stackable = true; + } + + public JarHoney( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + Stackable = true; + } + + private class InternalTarget : Target + { + private JarHoney m_Item; + + public InternalTarget( JarHoney item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) return; + + if ( targeted is Dough ) + { + m_Item.Delete(); + ((Dough)targeted).Consume(); + + from.AddToBackpack( new SweetDough() ); + } + + if (targeted is BowlFlour) + { + m_Item.Consume(); + ((BowlFlour)targeted).Delete(); + + from.AddToBackpack( new CookieMix() ); + } + } + } + } + + // ********** BowlFlour ********** + public class BowlFlour : Item + { + [Constructable] + public BowlFlour() : base( 0xa1e ) + { + Weight = 1.0; + } + + public BowlFlour( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + // ********** WoodenBowl ********** + public class WoodenBowl : Item + { + [Constructable] + public WoodenBowl() : base( 0x15f8 ) + { + Weight = 1.0; + } + + public WoodenBowl( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + // ********** PitcherWater ********** + /*public class PitcherWater : Item + { + [Constructable] + public PitcherWater() : base(Utility.Random( 0x1f9d, 2 )) + { + Weight = 1.0; + } + + public PitcherWater( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + from.Target = new InternalTarget( this ); + } + + private class InternalTarget : Target + { + private PitcherWater m_Item; + + public InternalTarget( PitcherWater item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) return; + + if ( targeted is BowlFlour ) + { + m_Item.Delete(); + ((BowlFlour)targeted).Delete(); + + from.AddToBackpack( new Dough() ); + from.AddToBackpack( new WoodenBowl() ); + } + } + } + }*/ + + // ********** SackFlour ********** + [TypeAlias( "Server.Items.SackFlourOpen" )] + public class SackFlour : Item, IHasQuantity + { + private int m_Quantity; + + [CommandProperty( AccessLevel.GameMaster )] + public int Quantity + { + get{ return m_Quantity; } + set + { + if ( value < 0 ) + value = 0; + else if ( value > 20 ) + value = 20; + + m_Quantity = value; + + if ( m_Quantity == 0 ) + Delete(); + else if ( m_Quantity < 20 && (ItemID == 0x1039 || ItemID == 0x1045) ) + ++ItemID; + } + } + + [Constructable] + public SackFlour() : base( 0x1039 ) + { + Weight = 5.0; + m_Quantity = 20; + } + + public SackFlour( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + writer.Write( (int) m_Quantity ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + case 1: + { + m_Quantity = reader.ReadInt(); + break; + } + case 0: + { + m_Quantity = 20; + break; + } + } + + if ( version < 2 && Weight == 1.0 ) + Weight = 5.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + if ( (ItemID == 0x1039 || ItemID == 0x1045) ) + ++ItemID; + +#if false + this.Delete(); + + from.AddToBackpack( new SackFlourOpen() ); +#endif + } + + } + +#if false + // ********** SackFlourOpen ********** + public class SackFlourOpen : Item + { + public override int LabelNumber{ get{ return 1024166; } } // open sack of flour + + [Constructable] + public SackFlourOpen() : base(UtilityItem.RandomChoice( 0x1046, 0x103a )) + { + Weight = 1.0; + } + + public SackFlourOpen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + from.Target = new InternalTarget( this ); + } + + private class InternalTarget : Target + { + private SackFlourOpen m_Item; + + public InternalTarget( SackFlourOpen item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) return; + + if ( targeted is WoodenBowl ) + { + m_Item.Delete(); + ((WoodenBowl)targeted).Delete(); + + from.AddToBackpack( new BowlFlour() ); + } + } + } + } +#endif + + // ********** Eggshells ********** + public class Eggshells : Item + { + [Constructable] + public Eggshells() : base( 0x9b4 ) + { + Weight = 0.5; + } + + public Eggshells( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WheatSheaf : Item + { + [Constructable] + public WheatSheaf() : this( 1 ) + { + } + + [Constructable] + public WheatSheaf( int amount ) : base( 7869 ) + { + Weight = 1.0; + Stackable = true; + Amount = amount; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + from.BeginTarget( 4, false, TargetFlags.None, new TargetCallback( OnTarget ) ); + } + + public virtual void OnTarget( Mobile from, object obj ) + { + if ( obj is AddonComponent ) + obj = (obj as AddonComponent).Addon; + + IFlourMill mill = obj as IFlourMill; + + if ( mill != null ) + { + int needs = mill.MaxFlour - mill.CurFlour; + + if ( needs > this.Amount ) + needs = this.Amount; + + mill.CurFlour += needs; + Consume( needs ); + } + } + + public WheatSheaf( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Food/Food.cs b/Scripts/Items/Food/Food.cs new file mode 100644 index 0000000..8ada35c --- /dev/null +++ b/Scripts/Items/Food/Food.cs @@ -0,0 +1,1286 @@ +using System; +using System.Collections; +using Server.Network; +using System.Collections.Generic; +using Server.ContextMenus; + +namespace Server.Items +{ + public abstract class Food : Item + { + private Mobile m_Poisoner; + private Poison m_Poison; + private int m_FillFactor; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Poisoner + { + get { return m_Poisoner; } + set { m_Poisoner = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Poison Poison + { + get { return m_Poison; } + set { m_Poison = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int FillFactor + { + get { return m_FillFactor; } + set { m_FillFactor = value; } + } + + public Food( int itemID ) : this( 1, itemID ) + { + } + + public Food( int amount, int itemID ) : base( itemID ) + { + Stackable = true; + Amount = amount; + m_FillFactor = 1; + } + + public Food( Serial serial ) : base( serial ) + { + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( from.Alive ) + list.Add( new ContextMenus.EatEntry( from, this ) ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + if ( from.InRange( this.GetWorldLocation(), 1 ) ) + { + Eat( from ); + } + } + + public virtual bool Eat( Mobile from ) + { + // Fill the Mobile with FillFactor + if ( FillHunger( from, m_FillFactor ) ) + { + // Play a random "eat" sound + from.PlaySound( Utility.Random( 0x3A, 3 ) ); + + if ( from.Body.IsHuman && !from.Mounted ) + from.Animate( 34, 5, 1, true, false, 0 ); + + if ( m_Poison != null ) + from.ApplyPoison( m_Poisoner, m_Poison ); + + Consume(); + + return true; + } + + return false; + } + + static public bool FillHunger( Mobile from, int fillFactor ) + { + if ( from.Hunger >= 20 ) + { + from.SendLocalizedMessage( 500867 ); // You are simply too full to eat any more! + return false; + } + + int iHunger = from.Hunger + fillFactor; + if ( from.Stam < from.StamMax ) + from.Stam += Utility.Random( 6, 3 ) + fillFactor/5;//restore some stamina + if ( iHunger >= 20 ) + { + from.Hunger = 20; + from.SendLocalizedMessage( 500872 ); // You manage to eat the food, but you are stuffed! + } + else + { + from.Hunger = iHunger; + + if ( iHunger < 5 ) + from.SendLocalizedMessage( 500868 ); // You eat the food, but are still extremely hungry. + else if ( iHunger < 10 ) + from.SendLocalizedMessage( 500869 ); // You eat the food, and begin to feel more satiated. + else if ( iHunger < 15 ) + from.SendLocalizedMessage( 500870 ); // After eating the food, you feel much less hungry. + else + from.SendLocalizedMessage( 500871 ); // You feel quite full after consuming the food. + } + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 4 ); // version + + writer.Write( m_Poisoner ); + + Poison.Serialize( m_Poison, writer ); + writer.Write( m_FillFactor ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + switch ( reader.ReadInt() ) + { + case 0: m_Poison = null; break; + case 1: m_Poison = Poison.Lesser; break; + case 2: m_Poison = Poison.Regular; break; + case 3: m_Poison = Poison.Greater; break; + case 4: m_Poison = Poison.Deadly; break; + } + + break; + } + case 2: + { + m_Poison = Poison.Deserialize( reader ); + break; + } + case 3: + { + m_Poison = Poison.Deserialize( reader ); + m_FillFactor = reader.ReadInt(); + break; + } + case 4: + { + m_Poisoner = reader.ReadMobile(); + goto case 3; + } + } + } + } + + public class BreadLoaf : Food + { + [Constructable] + public BreadLoaf() : this( 1 ) + { + } + + [Constructable] + public BreadLoaf( int amount ) : base( amount, 0x103B ) + { + this.Weight = 1.0; + this.FillFactor = 3; + } + + public BreadLoaf( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Bacon : Food + { + [Constructable] + public Bacon() : this( 1 ) + { + } + + [Constructable] + public Bacon( int amount ) : base( amount, 0x979 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Bacon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SlabOfBacon : Food + { + [Constructable] + public SlabOfBacon() : this( 1 ) + { + } + + [Constructable] + public SlabOfBacon( int amount ) : base( amount, 0x976 ) + { + this.Weight = 1.0; + this.FillFactor = 3; + } + + public SlabOfBacon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class FishSteak : Food + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public FishSteak() : this( 1 ) + { + } + + [Constructable] + public FishSteak( int amount ) : base( amount, 0x97B ) + { + this.FillFactor = 3; + } + + public FishSteak( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CheeseWheel : Food + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public CheeseWheel() : this( 1 ) + { + } + + [Constructable] + public CheeseWheel( int amount ) : base( amount, 0x97E ) + { + this.FillFactor = 3; + } + + public CheeseWheel( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CheeseWedge : Food + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public CheeseWedge() : this( 1 ) + { + } + + [Constructable] + public CheeseWedge( int amount ) : base( amount, 0x97D ) + { + this.FillFactor = 3; + } + + public CheeseWedge( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CheeseSlice : Food + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public CheeseSlice() : this( 1 ) + { + } + + [Constructable] + public CheeseSlice( int amount ) : base( amount, 0x97C ) + { + this.FillFactor = 1; + } + + public CheeseSlice( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class FrenchBread : Food + { + [Constructable] + public FrenchBread() : this( 1 ) + { + } + + [Constructable] + public FrenchBread( int amount ) : base( amount, 0x98C ) + { + this.Weight = 2.0; + this.FillFactor = 3; + } + + public FrenchBread( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + + public class FriedEggs : Food + { + [Constructable] + public FriedEggs() : this( 1 ) + { + } + + [Constructable] + public FriedEggs( int amount ) : base( amount, 0x9B6 ) + { + this.Weight = 1.0; + this.FillFactor = 4; + } + + public FriedEggs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CookedBird : Food + { + [Constructable] + public CookedBird() : this( 1 ) + { + } + + [Constructable] + public CookedBird( int amount ) : base( amount, 0x9B7 ) + { + this.Weight = 1.0; + this.FillFactor = 5; + } + + public CookedBird( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class RoastPig : Food + { + [Constructable] + public RoastPig() : this( 1 ) + { + } + + [Constructable] + public RoastPig( int amount ) : base( amount, 0x9BB ) + { + this.Weight = 45.0; + this.FillFactor = 20; + } + + public RoastPig( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Sausage : Food + { + [Constructable] + public Sausage() : this( 1 ) + { + } + + [Constructable] + public Sausage( int amount ) : base( amount, 0x9C0 ) + { + this.Weight = 1.0; + this.FillFactor = 4; + } + + public Sausage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Ham : Food + { + [Constructable] + public Ham() : this( 1 ) + { + } + + [Constructable] + public Ham( int amount ) : base( amount, 0x9C9 ) + { + this.Weight = 1.0; + this.FillFactor = 5; + } + + public Ham( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Cake : Food + { + [Constructable] + public Cake() : base( 0x9E9 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 10; + } + + public Cake( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Ribs : Food + { + [Constructable] + public Ribs() : this( 1 ) + { + } + + [Constructable] + public Ribs( int amount ) : base( amount, 0x9F2 ) + { + this.Weight = 1.0; + this.FillFactor = 5; + } + + public Ribs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Cookies : Food + { + [Constructable] + public Cookies() : base( 0x160b ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 4; + } + + public Cookies( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Muffins : Food + { + [Constructable] + public Muffins() : base( 0x9eb ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 4; + } + + public Muffins( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [TypeAlias( "Server.Items.Pizza" )] + public class CheesePizza : Food + { + public override int LabelNumber{ get{ return 1044516; } } // cheese pizza + + [Constructable] + public CheesePizza() : base( 0x1040 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 6; + } + + public CheesePizza( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SausagePizza : Food + { + public override int LabelNumber{ get{ return 1044517; } } // sausage pizza + + [Constructable] + public SausagePizza() : base( 0x1040 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 6; + } + + public SausagePizza( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + +#if false + public class Pizza : Food + { + [Constructable] + public Pizza() : base( 0x1040 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 6; + } + + public Pizza( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +#endif + + public class FruitPie : Food + { + public override int LabelNumber{ get{ return 1041346; } } // baked fruit pie + + [Constructable] + public FruitPie() : base( 0x1041 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 5; + } + + public FruitPie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MeatPie : Food + { + public override int LabelNumber{ get{ return 1041347; } } // baked meat pie + + [Constructable] + public MeatPie() : base( 0x1041 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 5; + } + + public MeatPie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PumpkinPie : Food + { + public override int LabelNumber{ get{ return 1041348; } } // baked pumpkin pie + + [Constructable] + public PumpkinPie() : base( 0x1041 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 5; + } + + public PumpkinPie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ApplePie : Food + { + public override int LabelNumber{ get{ return 1041343; } } // baked apple pie + + [Constructable] + public ApplePie() : base( 0x1041 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 5; + } + + public ApplePie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PeachCobbler : Food + { + public override int LabelNumber{ get{ return 1041344; } } // baked peach cobbler + + [Constructable] + public PeachCobbler() : base( 0x1041 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 5; + } + + public PeachCobbler( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Quiche : Food + { + public override int LabelNumber{ get{ return 1041345; } } // baked quiche + + [Constructable] + public Quiche() : base( 0x1041 ) + { + Stackable = false; + this.Weight = 1.0; + this.FillFactor = 5; + } + + public Quiche( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LambLeg : Food + { + [Constructable] + public LambLeg() : this( 1 ) + { + } + + [Constructable] + public LambLeg( int amount ) : base( amount, 0x160a ) + { + this.Weight = 2.0; + this.FillFactor = 5; + } + + public LambLeg( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ChickenLeg : Food + { + [Constructable] + public ChickenLeg() : this( 1 ) + { + } + + [Constructable] + public ChickenLeg( int amount ) : base( amount, 0x1608 ) + { + this.Weight = 1.0; + this.FillFactor = 4; + Name = "bird leg"; + } + + public ChickenLeg( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xC74, 0xC75 )] + public class HoneydewMelon : Food + { + [Constructable] + public HoneydewMelon() : this( 1 ) + { + } + + [Constructable] + public HoneydewMelon( int amount ) : base( amount, 0xC74 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public HoneydewMelon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xC64, 0xC65 )] + public class YellowGourd : Food + { + [Constructable] + public YellowGourd() : this( 1 ) + { + } + + [Constructable] + public YellowGourd( int amount ) : base( amount, 0xC64 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public YellowGourd( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xC66, 0xC67 )] + public class GreenGourd : Food + { + [Constructable] + public GreenGourd() : this( 1 ) + { + } + + [Constructable] + public GreenGourd( int amount ) : base( amount, 0xC66 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public GreenGourd( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xC7F, 0xC81 )] + public class EarOfCorn : Food + { + [Constructable] + public EarOfCorn() : this( 1 ) + { + } + + [Constructable] + public EarOfCorn( int amount ) : base( amount, 0xC81 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public EarOfCorn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Turnip : Food + { + [Constructable] + public Turnip() : this( 1 ) + { + } + + [Constructable] + public Turnip( int amount ) : base( amount, 0xD3A ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Turnip( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SheafOfHay : Item + { + [Constructable] + public SheafOfHay() : base( 0xF36 ) + { + this.Weight = 10.0; + } + + public SheafOfHay( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Food/Fruits.cs b/Scripts/Items/Food/Fruits.cs new file mode 100644 index 0000000..8ee1b9c --- /dev/null +++ b/Scripts/Items/Food/Fruits.cs @@ -0,0 +1,632 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + public class FruitBasket : Food + { + [Constructable] + public FruitBasket() : base( 1, 0x993 ) + { + Weight = 2.0; + FillFactor = 5; + Stackable = false; + } + + public FruitBasket( Serial serial ) : base( serial ) + { + } + + public override bool Eat( Mobile from ) + { + if ( !base.Eat( from ) ) + return false; + + from.AddToBackpack( new Basket() ); + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x171f, 0x1720 )] + public class Banana : Food + { + [Constructable] + public Banana() : this( 1 ) + { + } + + [Constructable] + public Banana( int amount ) : base( amount, 0x171f ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Banana( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1721, 0x1722 )] + public class Bananas : Food + { + [Constructable] + public Bananas() : this( 1 ) + { + } + + [Constructable] + public Bananas( int amount ) : base( amount, 0x1721 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Bananas( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SplitCoconut : Food + { + [Constructable] + public SplitCoconut() : this( 1 ) + { + } + + [Constructable] + public SplitCoconut( int amount ) : base( amount, 0x1725 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public SplitCoconut( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Lemon : Food + { + [Constructable] + public Lemon() : this( 1 ) + { + } + + [Constructable] + public Lemon( int amount ) : base( amount, 0x1728 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Lemon( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Lemons : Food + { + [Constructable] + public Lemons() : this( 1 ) + { + } + + [Constructable] + public Lemons( int amount ) : base( amount, 0x1729 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Lemons( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Lime : Food + { + [Constructable] + public Lime() : this( 1 ) + { + } + + [Constructable] + public Lime( int amount ) : base( amount, 0x172a ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Lime( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Limes : Food + { + [Constructable] + public Limes() : this( 1 ) + { + } + + [Constructable] + public Limes( int amount ) : base( amount, 0x172B ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Limes( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Coconut : Food + { + [Constructable] + public Coconut() : this( 1 ) + { + } + + [Constructable] + public Coconut( int amount ) : base( amount, 0x1726 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Coconut( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class OpenCoconut : Food + { + [Constructable] + public OpenCoconut() : this( 1 ) + { + } + + [Constructable] + public OpenCoconut( int amount ) : base( amount, 0x1723 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public OpenCoconut( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Dates : Food + { + [Constructable] + public Dates() : this( 1 ) + { + } + + [Constructable] + public Dates( int amount ) : base( amount, 0x1727 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Dates( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Grapes : Food + { + [Constructable] + public Grapes() : this( 1 ) + { + } + + [Constructable] + public Grapes( int amount ) : base( amount, 0x9D1 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Grapes( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Peach : Food + { + [Constructable] + public Peach() : this( 1 ) + { + } + + [Constructable] + public Peach( int amount ) : base( amount, 0x9D2 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Peach( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Pear : Food + { + [Constructable] + public Pear() : this( 1 ) + { + } + + [Constructable] + public Pear( int amount ) : base( amount, 0x994 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Pear( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Apple : Food + { + [Constructable] + public Apple() : this( 1 ) + { + } + + [Constructable] + public Apple( int amount ) : base( amount, 0x9D0 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Apple( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Watermelon : Food + { + [Constructable] + public Watermelon() : this( 1 ) + { + } + + [Constructable] + public Watermelon( int amount ) : base( amount, 0xC5C ) + { + this.Weight = 5.0; + this.FillFactor = 5; + } + + public Watermelon( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version < 1 ) + { + if ( FillFactor == 2 ) + FillFactor = 5; + + if ( Weight == 2.0 ) + Weight = 5.0; + } + } + } + + public class SmallWatermelon : Food + { + [Constructable] + public SmallWatermelon() : this( 1 ) + { + } + + [Constructable] + public SmallWatermelon( int amount ) : base( amount, 0xC5D ) + { + this.Weight = 5.0; + this.FillFactor = 5; + } + + public SmallWatermelon( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xc72, 0xc73 )] + public class Squash : Food + { + [Constructable] + public Squash() : this( 1 ) + { + } + + [Constructable] + public Squash( int amount ) : base( amount, 0xc72 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Squash( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xc79, 0xc7a )] + public class Cantaloupe : Food + { + [Constructable] + public Cantaloupe() : this( 1 ) + { + } + + [Constructable] + public Cantaloupe( int amount ) : base( amount, 0xc79 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Cantaloupe( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Food/MagicDrink.cs b/Scripts/Items/Food/MagicDrink.cs new file mode 100644 index 0000000..3eb8ab5 --- /dev/null +++ b/Scripts/Items/Food/MagicDrink.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections; +using Server.Network; +using Server.Targeting; +using Server.Prompts; + +namespace Server.Items +{ + public class FlaskAle : Item + { + public FlaskAle() : this( 1 ) + { + } + + public FlaskAle( int amount ) : base( 0x0DDF ) + { + Stackable = true; + Amount = amount; + Name = "flask of ale"; + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendMessage( "This must be in your backpack to drink." ); + return; + } + else + { + // increase characters thirst value based on type of drink + if ( from.Thirst < 20 ) + { + from.Thirst += 2; + // Send message to character about their current thirst value + int iThirst = from.Thirst; + if ( iThirst < 5 ) + from.SendMessage( "You drink the ale but are still extremely thirsty" ); + else if ( iThirst < 10 ) + from.SendMessage( "You drink the ale and feel less thirsty" ); + else if ( iThirst < 15 ) + from.SendMessage( "You drink the ale and feel much less thirsty" ); + else + from.SendMessage( "You drink the ale and are no longer thirsty" ); + + this.Consume(); + from.PlaySound( Utility.RandomList( 0x30, 0x2D6 ) ); + } + else + { + from.SendMessage( "You are simply too quenched to drink anymore" ); + from.Thirst = 20; + } + } + } + + public FlaskAle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class FlaskWine : Item + { + public FlaskWine() : this( 1 ) + { + } + + public FlaskWine( int amount ) : base( 0x0DE0 ) + { + Stackable = true; + Amount = amount; + Name = "flask of wine"; + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendMessage( "This must be in your backpack to drink." ); + return; + } + else + { + // increase characters thirst value based on type of drink + if ( from.Thirst < 20 ) + { + from.Thirst += 2; + // Send message to character about their current thirst value + int iThirst = from.Thirst; + if ( iThirst < 5 ) + from.SendMessage( "You drink the wine but are still extremely thirsty" ); + else if ( iThirst < 10 ) + from.SendMessage( "You drink the wine and feel less thirsty" ); + else if ( iThirst < 15 ) + from.SendMessage( "You drink the wine and feel much less thirsty" ); + else + from.SendMessage( "You drink the wine and are no longer thirsty" ); + + this.Consume(); + from.PlaySound( Utility.RandomList( 0x30, 0x2D6 ) ); + } + else + { + from.SendMessage( "You are simply too quenched to drink anymore" ); + from.Thirst = 20; + } + } + } + + public FlaskWine( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Food/Vegetables.cs b/Scripts/Items/Food/Vegetables.cs new file mode 100644 index 0000000..c6064b7 --- /dev/null +++ b/Scripts/Items/Food/Vegetables.cs @@ -0,0 +1,243 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xc77, 0xc78 )] + public class Carrot : Food + { + [Constructable] + public Carrot() : this( 1 ) + { + } + + [Constructable] + public Carrot( int amount ) : base( amount, 0xc78 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Carrot( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xc7b, 0xc7c )] + public class Cabbage : Food + { + [Constructable] + public Cabbage() : this( 1 ) + { + } + + [Constructable] + public Cabbage( int amount ) : base( amount, 0xc7b ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Cabbage( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xc6d, 0xc6e )] + public class Onion : Food + { + [Constructable] + public Onion() : this( 1 ) + { + } + + [Constructable] + public Onion( int amount ) : base( amount, 0xc6d ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Onion( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xc70, 0xc71 )] + public class Lettuce : Food + { + [Constructable] + public Lettuce() : this( 1 ) + { + } + + [Constructable] + public Lettuce( int amount ) : base( amount, 0xc70 ) + { + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Lettuce( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Tomato : Food + { + [Constructable] + public Tomato() : this( 1 ) + { + } + + [Constructable] + public Tomato( int amount ) : base( amount, 0x098F ) + { + Name = "tomato"; + this.Weight = 1.0; + this.FillFactor = 1; + } + + public Tomato( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0xC6A, 0xC6B )] + public class Pumpkin : Food + { + [Constructable] + public Pumpkin() : this( 1 ) + { + } + + [Constructable] + public Pumpkin( int amount ) : base( amount, 0xC6A ) + { + this.Weight = 1.0; + this.FillFactor = 8; + } + + public Pumpkin( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version < 1 ) + { + if ( FillFactor == 4 ) + FillFactor = 8; + + if ( Weight == 5.0 ) + Weight = 1.0; + } + } + } + + public class SmallPumpkin : Food + { + [Constructable] + public SmallPumpkin() : this( 1 ) + { + } + + [Constructable] + public SmallPumpkin( int amount ) : base( amount, 0xC6C ) + { + this.Weight = 1.0; + this.FillFactor = 8; + } + + public SmallPumpkin( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Games/Backgammon.cs b/Scripts/Items/Games/Backgammon.cs new file mode 100644 index 0000000..fd67bd4 --- /dev/null +++ b/Scripts/Items/Games/Backgammon.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections; + +namespace Server.Items +{ + [Flipable( 0xE1C, 0xFAD )] + public class Backgammon : BaseBoard + { + [Constructable] + public Backgammon() : base( 0xE1C ) + { + } + + public override void CreatePieces() + { + int mod = 19; + + for ( int i = 0; i < 5; i++ ) + { + CreatePiece( new PieceWhiteChecker( this ), 42, ( 17 * i ) + 6 + mod ); + CreatePiece( new PieceBlackChecker( this ), 42, ( 17 * i ) + 119 + mod ); + + CreatePiece( new PieceBlackChecker( this ), 142, ( 17 * i ) + 6 + mod ); + CreatePiece( new PieceWhiteChecker( this ), 142, ( 17 * i ) + 119 + mod ); + } + + for ( int i = 0; i < 3; i++ ) + { + CreatePiece( new PieceBlackChecker( this ), 108, ( 17 * i ) + 6 + mod ); + CreatePiece( new PieceWhiteChecker( this ), 108, ( 17 * i ) + 153 + mod ); + } + + for ( int i = 0; i < 2; i++ ) + { + CreatePiece( new PieceWhiteChecker( this ), 223, ( 17 * i ) + 6 + mod ); + CreatePiece( new PieceBlackChecker( this ), 223, ( 17 * i ) + 170 + mod ); + } + } + + public Backgammon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + } +} diff --git a/Scripts/Items/Games/BaseBoard.cs b/Scripts/Items/Games/BaseBoard.cs new file mode 100644 index 0000000..2956b24 --- /dev/null +++ b/Scripts/Items/Games/BaseBoard.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Multis; +using Server.Network; +using Server.ContextMenus; +using Server.Gumps; + +namespace Server.Items +{ + public abstract class BaseBoard : Container, ISecurable + { + private SecureLevel m_Level; + + [CommandProperty( AccessLevel.GameMaster )] + public SecureLevel Level + { + get{ return m_Level; } + set{ m_Level = value; } + } + + public BaseBoard( int itemID ) : base( itemID ) + { + CreatePieces(); + + Weight = 5.0; + } + + public abstract void CreatePieces(); + + public void Reset() + { + for ( int i = Items.Count - 1; i >= 0; --i ) + { + if ( i < Items.Count ) + Items[i].Delete(); + } + + CreatePieces(); + } + + public void CreatePiece( BasePiece piece, int x, int y ) + { + AddItem( piece ); + piece.Location = new Point3D( x, y, 0 ); + } + + public override bool DisplaysContent{ get{ return false; } } // Do not display (x items, y stones) + + public override bool IsDecoContainer{ get{ return false; } } + + public BaseBoard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); // version + + writer.Write( (int)m_Level ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( version == 1 ) + m_Level = (SecureLevel)reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 5.0; + } + + public override TimeSpan DecayTime{ get{ return TimeSpan.FromDays( 1.0 ); } } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + BasePiece piece = dropped as BasePiece; + + return ( piece != null && piece.Board == this && base.OnDragDrop( from, dropped ) ); + } + + public override bool OnDragDropInto( Mobile from, Item dropped, Point3D point ) + { + BasePiece piece = dropped as BasePiece; + + if ( piece != null && piece.Board == this && base.OnDragDropInto( from, dropped, point ) ) + { + Packet p = new PlaySound( 0x127, GetWorldLocation() ); + + p.Acquire(); + + if ( RootParent == from ) + { + from.Send( p ); + } + else + { + foreach ( NetState state in this.GetClientsInRange( 2 ) ) + state.Send( p ); + } + + p.Release(); + + return true; + } + else + { + return false; + } + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( ValidateDefault( from, this ) ) + list.Add( new DefaultEntry( from, this ) ); + + SetSecureLevelEntry.AddTo( from, this, list ); + } + + public static bool ValidateDefault( Mobile from, BaseBoard board ) + { + if ( from.AccessLevel >= AccessLevel.GameMaster ) + return true; + + if ( !from.Alive ) + return false; + + if ( board.IsChildOf( from.Backpack ) ) + return true; + + object root = board.RootParent; + + if ( root is Mobile && root != from ) + return false; + + if ( board.Deleted || board.Map != from.Map || !from.InRange( board.GetWorldLocation(), 1 ) ) + return false; + + BaseHouse house = BaseHouse.FindHouseAt( board ); + + return ( house != null && house.IsOwner( from ) ); + } + + public class DefaultEntry : ContextMenuEntry + { + private Mobile m_From; + private BaseBoard m_Board; + + public DefaultEntry( Mobile from, BaseBoard board ) : base( 6162, from.AccessLevel >= AccessLevel.GameMaster ? -1 : 1 ) + { + m_From = from; + m_Board = board; + } + + public override void OnClick() + { + if ( BaseBoard.ValidateDefault( m_From, m_Board ) ) + m_Board.Reset(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Games/BasePiece.cs b/Scripts/Items/Games/BasePiece.cs new file mode 100644 index 0000000..d22b06f --- /dev/null +++ b/Scripts/Items/Games/BasePiece.cs @@ -0,0 +1,105 @@ +using System; +using Server; + +namespace Server.Items +{ + public class BasePiece : Item + { + private BaseBoard m_Board; + + public BaseBoard Board + { + get { return m_Board; } + set { m_Board = value; } + } + + public override bool IsVirtualItem{ get{ return true; } } + + public BasePiece( int itemID, BaseBoard board ) : base( itemID ) + { + m_Board = board; + } + + public BasePiece( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + writer.Write( m_Board ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Board = (BaseBoard)reader.ReadItem(); + + if ( m_Board == null || Parent == null ) + Delete(); + + break; + } + } + } + + public override void OnSingleClick( Mobile from ) + { + if ( m_Board == null || m_Board.Deleted ) + Delete(); + else if ( !IsChildOf( m_Board ) ) + m_Board.DropItem( this ); + else + base.OnSingleClick( from ); + } + + public override bool OnDragLift( Mobile from ) + { + if ( m_Board == null || m_Board.Deleted ) + { + Delete(); + return false; + } + else if ( !IsChildOf( m_Board ) ) + { + m_Board.DropItem( this ); + return false; + } + else + { + return true; + } + } + + public override bool CanTarget{ get{ return false; } } + + public override bool DropToMobile( Mobile from, Mobile target, Point3D p ) + { + return false; + } + + public override bool DropToItem( Mobile from, Item target, Point3D p ) + { + return ( target == m_Board && p.X != -1 && p.Y != -1 && base.DropToItem( from, target, p ) ); + } + + public override bool DropToWorld( Mobile from, Point3D p ) + { + return false; + } + + public override int GetLiftSound( Mobile from ) + { + return -1; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Games/CheckerBoard.cs b/Scripts/Items/Games/CheckerBoard.cs new file mode 100644 index 0000000..df7c3a5 --- /dev/null +++ b/Scripts/Items/Games/CheckerBoard.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections; + +namespace Server.Items +{ + public class CheckerBoard : BaseBoard + { + public override int LabelNumber{ get{ return 1016449; } } // a checker board + + [Constructable] + public CheckerBoard() : base( 0xFA6 ) + { + } + + public override void CreatePieces() + { + for ( int i = 0; i < 4; i++ ) + { + CreatePiece( new PieceWhiteChecker( this ), ( 50 * i ) + 45, 25 ); + CreatePiece( new PieceWhiteChecker( this ), ( 50 * i ) + 70, 50 ); + CreatePiece( new PieceWhiteChecker( this ), ( 50 * i ) + 45, 75 ); + CreatePiece( new PieceBlackChecker( this ), ( 50 * i ) + 70, 150 ); + CreatePiece( new PieceBlackChecker( this ), ( 50 * i ) + 45, 175 ); + CreatePiece( new PieceBlackChecker( this ), ( 50 * i ) + 70, 200 ); + } + } + + public CheckerBoard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Games/CheckersPieces.cs b/Scripts/Items/Games/CheckersPieces.cs new file mode 100644 index 0000000..895c244 --- /dev/null +++ b/Scripts/Items/Games/CheckersPieces.cs @@ -0,0 +1,61 @@ +using System; +using Server; + +namespace Server.Items +{ + public class PieceWhiteChecker : BasePiece + { + public override string DefaultName + { + get { return "white checker"; } + } + + public PieceWhiteChecker( BaseBoard board ) : base( 0x3584, board ) + { + } + + public PieceWhiteChecker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceBlackChecker : BasePiece + { + public override string DefaultName + { + get { return "black checker"; } + } + + public PieceBlackChecker( BaseBoard board ) : base( 0x358B, board ) + { + } + + public PieceBlackChecker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Games/ChessPieces.cs b/Scripts/Items/Games/ChessPieces.cs new file mode 100644 index 0000000..bf3c197 --- /dev/null +++ b/Scripts/Items/Games/ChessPieces.cs @@ -0,0 +1,341 @@ +using System; +using Server; + +namespace Server.Items +{ + public class PieceWhiteKing : BasePiece + { + public override string DefaultName + { + get { return "white king"; } + } + + public PieceWhiteKing( BaseBoard board ) : base( 0x3587, board ) + { + } + + public PieceWhiteKing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceBlackKing : BasePiece + { + public override string DefaultName + { + get { return "black king"; } + } + + public PieceBlackKing( BaseBoard board ) : base( 0x358E, board ) + { + } + + public PieceBlackKing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceWhiteQueen : BasePiece + { + public override string DefaultName + { + get { return "white queen"; } + } + + public PieceWhiteQueen( BaseBoard board ) : base( 0x358A, board ) + { + } + + public PieceWhiteQueen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceBlackQueen : BasePiece + { + public override string DefaultName + { + get { return "black queen"; } + } + + public PieceBlackQueen( BaseBoard board ) : base( 0x3591, board ) + { + } + + public PieceBlackQueen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceWhiteRook : BasePiece + { + public override string DefaultName + { + get { return "white rook"; } + } + + public PieceWhiteRook( BaseBoard board ) : base( 0x3586, board ) + { + } + + public PieceWhiteRook( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceBlackRook : BasePiece + { + public override string DefaultName + { + get { return "black rook"; } + } + + public PieceBlackRook( BaseBoard board ) : base( 0x358D, board ) + { + } + + public PieceBlackRook( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceWhiteBishop : BasePiece + { + public override string DefaultName + { + get { return "white bishop"; } + } + + public PieceWhiteBishop( BaseBoard board ) : base( 0x3585, board ) + { + } + + public PieceWhiteBishop( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceBlackBishop : BasePiece + { + public override string DefaultName + { + get { return "black bishop"; } + } + + public PieceBlackBishop( BaseBoard board ) : base( 0x358C, board ) + { + } + + public PieceBlackBishop( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceWhiteKnight : BasePiece + { + public override string DefaultName + { + get { return "white knight"; } + } + + public PieceWhiteKnight( BaseBoard board ) : base( 0x3588, board ) + { + } + + public PieceWhiteKnight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceBlackKnight : BasePiece + { + public override string DefaultName + { + get { return "black knight"; } + } + + public PieceBlackKnight( BaseBoard board ) : base( 0x358F, board ) + { + } + + public PieceBlackKnight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceWhitePawn : BasePiece + { + public override string DefaultName + { + get { return "white pawn"; } + } + + public PieceWhitePawn( BaseBoard board ) : base( 0x3589, board ) + { + } + + public PieceWhitePawn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class PieceBlackPawn : BasePiece + { + public override string DefaultName + { + get { return "black pawn"; } + } + + public PieceBlackPawn( BaseBoard board ) : base( 0x3590, board ) + { + } + + public PieceBlackPawn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Games/Chessboard.cs b/Scripts/Items/Games/Chessboard.cs new file mode 100644 index 0000000..5874768 --- /dev/null +++ b/Scripts/Items/Games/Chessboard.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; + +namespace Server.Items +{ + public class Chessboard : BaseBoard + { + public override int LabelNumber{ get{ return 1016450; } } // a chessboard + + [Constructable] + public Chessboard() : base( 0xFA6 ) + { + } + + public override void CreatePieces() + { + for ( int i = 0; i < 8; i++ ) + { + CreatePiece( new PieceBlackPawn( this ), 67, ( 25 * i ) + 17 ); + CreatePiece( new PieceWhitePawn( this ), 192, ( 25 * i ) + 17 ); + } + + // Rook + CreatePiece( new PieceBlackRook( this ), 42, 5 ); + CreatePiece( new PieceBlackRook( this ), 42, 180 ); + + CreatePiece( new PieceWhiteRook( this ), 216, 5 ); + CreatePiece( new PieceWhiteRook( this ), 216, 180 ); + + // Knight + CreatePiece( new PieceBlackKnight( this ), 42, 30 ); + CreatePiece( new PieceBlackKnight( this ), 42, 155 ); + + CreatePiece( new PieceWhiteKnight( this ), 216, 30 ); + CreatePiece( new PieceWhiteKnight( this ), 216, 155 ); + + // Bishop + CreatePiece( new PieceBlackBishop( this ), 42, 55 ); + CreatePiece( new PieceBlackBishop( this ), 42, 130 ); + + CreatePiece( new PieceWhiteBishop( this ), 216, 55 ); + CreatePiece( new PieceWhiteBishop( this ), 216, 130 ); + + // Queen + CreatePiece( new PieceBlackQueen( this ), 42, 105 ); + CreatePiece( new PieceWhiteQueen( this ), 216, 105 ); + + // King + CreatePiece( new PieceBlackKing( this ), 42, 80 ); + CreatePiece( new PieceWhiteKing( this ), 216, 80 ); + } + + public Chessboard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Games/Dices.cs b/Scripts/Items/Games/Dices.cs new file mode 100644 index 0000000..0c47b52 --- /dev/null +++ b/Scripts/Items/Games/Dices.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class Dices : Item, ITelekinesisable + { + [Constructable] + public Dices() : base( 0xFA7 ) + { + Weight = 1.0; + } + + public Dices( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.InRange( this.GetWorldLocation(), 2 ) ) + return; + + Roll( from ); + } + + public void OnTelekinesis( Mobile from ) + { + Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 ); + Effects.PlaySound( Location, Map, 0x1F5 ); + + Roll( from ); + } + + public void Roll( Mobile from ) + { + this.PublicOverheadMessage( MessageType.Regular, 0, false, string.Format( "*{0} rolls {1}, {2}*", from.Name, Utility.Random( 1, 6 ), Utility.Random( 1, 6 ) ) ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/Amber.cs b/Scripts/Items/Gems/Amber.cs new file mode 100644 index 0000000..64ca798 --- /dev/null +++ b/Scripts/Items/Gems/Amber.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Amber : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Amber() : this( 1 ) + { + } + + [Constructable] + public Amber( int amount ) : base( 0xF25 ) + { + Stackable = true; + Amount = amount; + } + + public Amber( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/Amethyst.cs b/Scripts/Items/Gems/Amethyst.cs new file mode 100644 index 0000000..2bd9e26 --- /dev/null +++ b/Scripts/Items/Gems/Amethyst.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Amethyst : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Amethyst() : this( 1 ) + { + } + + [Constructable] + public Amethyst( int amount ) : base( 0xF16 ) + { + Stackable = true; + Amount = amount; + } + + public Amethyst( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/Citrine.cs b/Scripts/Items/Gems/Citrine.cs new file mode 100644 index 0000000..f87fb3f --- /dev/null +++ b/Scripts/Items/Gems/Citrine.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Citrine : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Citrine() : this( 1 ) + { + } + + [Constructable] + public Citrine( int amount ) : base( 0xF15 ) + { + Stackable = true; + Amount = amount; + } + + public Citrine( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/Diamond.cs b/Scripts/Items/Gems/Diamond.cs new file mode 100644 index 0000000..14b7935 --- /dev/null +++ b/Scripts/Items/Gems/Diamond.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Diamond : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Diamond() : this( 1 ) + { + } + + [Constructable] + public Diamond( int amount ) : base( 0xF26 ) + { + Stackable = true; + Amount = amount; + } + + public Diamond( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/Emerald.cs b/Scripts/Items/Gems/Emerald.cs new file mode 100644 index 0000000..437c3ee --- /dev/null +++ b/Scripts/Items/Gems/Emerald.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Emerald : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Emerald() : this( 1 ) + { + } + + [Constructable] + public Emerald( int amount ) : base( 0xF10 ) + { + Stackable = true; + Amount = amount; + } + + public Emerald( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/Ruby.cs b/Scripts/Items/Gems/Ruby.cs new file mode 100644 index 0000000..62f3c07 --- /dev/null +++ b/Scripts/Items/Gems/Ruby.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Ruby : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Ruby() : this( 1 ) + { + } + + [Constructable] + public Ruby( int amount ) : base( 0xF13 ) + { + Stackable = true; + Amount = amount; + } + + public Ruby( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/Sapphire.cs b/Scripts/Items/Gems/Sapphire.cs new file mode 100644 index 0000000..c845532 --- /dev/null +++ b/Scripts/Items/Gems/Sapphire.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Sapphire : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Sapphire() : this( 1 ) + { + } + + [Constructable] + public Sapphire( int amount ) : base( 0xF19 ) + { + Stackable = true; + Amount = amount; + } + + public Sapphire( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/StarSapphire.cs b/Scripts/Items/Gems/StarSapphire.cs new file mode 100644 index 0000000..a94e278 --- /dev/null +++ b/Scripts/Items/Gems/StarSapphire.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StarSapphire : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public StarSapphire() : this( 1 ) + { + } + + [Constructable] + public StarSapphire( int amount ) : base( 0xF21 ) + { + Stackable = true; + Amount = amount; + } + + public StarSapphire( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Gems/Tourmaline.cs b/Scripts/Items/Gems/Tourmaline.cs new file mode 100644 index 0000000..18b233a --- /dev/null +++ b/Scripts/Items/Gems/Tourmaline.cs @@ -0,0 +1,45 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Tourmaline : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Tourmaline() : this( 1 ) + { + } + + [Constructable] + public Tourmaline( int amount ) : base( 0xF2D ) + { + Stackable = true; + Amount = amount; + } + + public Tourmaline( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Home/HouseSigns.cs b/Scripts/Items/Home/HouseSigns.cs new file mode 100644 index 0000000..5db2a00 --- /dev/null +++ b/Scripts/Items/Home/HouseSigns.cs @@ -0,0 +1,476 @@ +using System; +using Server.Prompts; +using Server.Network; + +namespace Server.Items +{ + [Furniture] + public class HouseSigns : Item + { + [Constructable] + public HouseSigns() : base(3082) + { + Weight = 1.0; + Movable = true; + Name = "sign"; + } + + public HouseSigns(Serial serial) : base(serial) + { + } + + public override void AddNameProperties(ObjectPropertyList list) + { + list.Add( this.Name ); + if ( Movable ) + list.Add( 1070722, "Use Sign To Name It"); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1060640 ); // The item must be in your backpack to use it. + } + else + { + from.SendMessage("Please Enter The New Name For This Sign"); + from.Prompt = new RenamePrompt( this ); + } + } + + private class RenamePrompt : Prompt + { + private HouseSigns m_Sign; + + public RenamePrompt( HouseSigns sign ) + { + m_Sign = sign; + } + + public override void OnResponse( Mobile from, string text ) + { + m_Sign.Name = text; + from.SendMessage("The Name has been changed"); + } + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } + + [Flipable(0x0A96,0x0AA6)] + public class HouseSignHerbalist : HouseSigns + { + [Constructable] + public HouseSignHerbalist() + { + Name = "herbalist sign"; + ItemID = 0x0A96; + } + public HouseSignHerbalist(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0AA7,0x0AA8)] + public class HouseSignMiner : HouseSigns + { + [Constructable] + public HouseSignMiner() + { + Name = "miner sign"; + ItemID = 0x0AA7; + } + public HouseSignMiner(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0906,0x0907)] + public class HouseSignDocks : HouseSigns + { + [Constructable] + public HouseSignDocks() + { + Name = "dock sign"; + ItemID = 0x0906; + } + public HouseSignDocks(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0908,0x0909)] + public class HouseSignArms : HouseSigns + { + [Constructable] + public HouseSignArms() + { + Name = "arms sign"; + ItemID = 0x0908; + } + public HouseSignArms(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0B3B,0x0B4D)] + public class HouseSignFisherman : HouseSigns + { + [Constructable] + public HouseSignFisherman() + { + Name = "fisherman sign"; + ItemID = 0x0B3B; + } + public HouseSignFisherman(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0B95,0x0B96)] + public class HouseSignLibrary : HouseSigns + { + [Constructable] + public HouseSignLibrary() + { + Name = "library sign"; + ItemID = 0x0B95; + } + public HouseSignLibrary(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BA3,0x0BA4)] + public class HouseSignFood : HouseSigns + { + [Constructable] + public HouseSignFood() + { + Name = "food sign"; + ItemID = 0x0BA3; + } + public HouseSignFood(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BA5,0x0BA6)] + public class HouseSignTailor : HouseSigns + { + [Constructable] + public HouseSignTailor() + { + Name = "tailor sign"; + ItemID = 0x0BA5; + } + public HouseSignTailor(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BA7,0x0BA8)] + public class HouseSignTinker : HouseSigns + { + [Constructable] + public HouseSignTinker() + { + Name = "tinker sign"; + ItemID = 0x0BA7; + } + public HouseSignTinker(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BA9,0x0BAA)] + public class HouseSignButcher : HouseSigns + { + [Constructable] + public HouseSignButcher() + { + Name = "butcher sign"; + ItemID = 0x0BA9; + } + public HouseSignButcher(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BAB,0x0BAC)] + public class HouseSignHealer : HouseSigns + { + [Constructable] + public HouseSignHealer() + { + Name = "healer sign"; + ItemID = 0x0BAB; + } + public HouseSignHealer(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BAD,0x0BAE)] + public class HouseSignMage : HouseSigns + { + [Constructable] + public HouseSignMage() + { + Name = "mage sign"; + ItemID = 0x0BAD; + } + public HouseSignMage(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BAF,0x0BB0)] + public class HouseSignCarpenter : HouseSigns + { + [Constructable] + public HouseSignCarpenter() + { + Name = "carpenter sign"; + ItemID = 0x0BAF; + } + public HouseSignCarpenter(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BB1,0x0BB2)] + public class HouseSignMaps : HouseSigns + { + [Constructable] + public HouseSignMaps() + { + Name = "maps sign"; + ItemID = 0x0BB1; + } + public HouseSignMaps(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BB3,0x0BB4)] + public class HouseSignInn : HouseSigns + { + [Constructable] + public HouseSignInn() + { + Name = "inn sign"; + ItemID = 0x0BB3; + } + public HouseSignInn(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BB5,0x0BB6)] + public class HouseSignShipbuilder : HouseSigns + { + [Constructable] + public HouseSignShipbuilder() + { + Name = "shipbuilder sign"; + ItemID = 0x0BB5; + } + public HouseSignShipbuilder(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BB7,0x0BB8)] + public class HouseSignStable : HouseSigns + { + [Constructable] + public HouseSignStable() + { + Name = "stable sign"; + ItemID = 0x0BB7; + } + public HouseSignStable(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BBB,0x0BBC)] + public class HouseSignBard : HouseSigns + { + [Constructable] + public HouseSignBard() + { + Name = "bard sign"; + ItemID = 0x0BBB; + } + public HouseSignBard(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BBD,0x0BBE)] + public class HouseSignBowyer : HouseSigns + { + [Constructable] + public HouseSignBowyer() + { + Name = "bowyer sign"; + ItemID = 0x0BBD; + } + public HouseSignBowyer(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BBF,0x0BC0)] + public class HouseSignWeapons : HouseSigns + { + [Constructable] + public HouseSignWeapons() + { + Name = "weapons sign"; + ItemID = 0x0BBF; + } + public HouseSignWeapons(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BC1,0x0BC2)] + public class HouseSignJewels : HouseSigns + { + [Constructable] + public HouseSignJewels() + { + Name = "jewelry sign"; + ItemID = 0x0BC1; + } + public HouseSignJewels(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BC3,0x0BC4)] + public class HouseSignTavern : HouseSigns + { + [Constructable] + public HouseSignTavern() + { + Name = "tavern sign"; + ItemID = 0x0BC3; + } + public HouseSignTavern(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BC5,0x0BC6)] + public class HouseSignAlchemy : HouseSigns + { + [Constructable] + public HouseSignAlchemy() + { + Name = "alchemy sign"; + ItemID = 0x0BC5; + } + public HouseSignAlchemy(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BC7,0x0BC8)] + public class HouseSignSmithing : HouseSigns + { + [Constructable] + public HouseSignSmithing() + { + Name = "smithing sign"; + ItemID = 0x0BC7; + } + public HouseSignSmithing(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BCB,0x0BCC)] + public class HouseSignProvisions : HouseSigns + { + [Constructable] + public HouseSignProvisions() + { + Name = "provisions sign"; + ItemID = 0x0BCB; + } + public HouseSignProvisions(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BCD,0x0BCE)] + public class HouseSignArchery : HouseSigns + { + [Constructable] + public HouseSignArchery() + { + Name = "archery sign"; + ItemID = 0x0BCD; + } + public HouseSignArchery(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BCF,0x0BD0)] + public class HouseSignWooden : HouseSigns + { + [Constructable] + public HouseSignWooden() + { + Name = "wooden sign"; + ItemID = 0x0BCF; + } + public HouseSignWooden(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0BD1,0x0BD2)] + public class HouseSignBrass : HouseSigns + { + [Constructable] + public HouseSignBrass() + { + Name = "brass sign"; + ItemID = 0x0BD1; + } + public HouseSignBrass(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } + + [Flipable(0x0C0B,0x0C0C)] + public class HouseSignGold : HouseSigns + { + [Constructable] + public HouseSignGold() + { + Name = "gold sign"; + ItemID = 0x0C0B; + } + public HouseSignGold(Serial serial) : base(serial){} + public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write((int) 0); } + public override void Deserialize(GenericReader reader){ base.Deserialize(reader); int version = reader.ReadInt(); } + } +} \ No newline at end of file diff --git a/Scripts/Items/Home/InteriorDecorator.cs b/Scripts/Items/Home/InteriorDecorator.cs new file mode 100644 index 0000000..1fc5ad2 --- /dev/null +++ b/Scripts/Items/Home/InteriorDecorator.cs @@ -0,0 +1,683 @@ +using Server; +using Server.Gumps; +using Server.Multis; +using Server.Network; +using Server.Regions; +using Server.Targeting; +using System; + +namespace Server.Items +{ + public enum DecorateCommand + { + None, + Secure, + Lockdown, + Release, + Turn, + Up, + Down, + North, + East, + South, + West, + Close + } + + public class InteriorDecorator : Item + { + private DecorateCommand m_Command; + + [Constructable] + public InteriorDecorator() : base( 0x1EBA ) + { + Name = "Homeowner Tools"; + Weight = 1.0; + } + + public InteriorDecorator(Serial serial): base(serial) + { + } + + [CommandProperty(AccessLevel.GameMaster)] + public DecorateCommand Command + { + get { return m_Command; } + set + { + m_Command = value; + InvalidateProperties(); + } + } + + public static bool InHouse(Mobile from) + { + BaseHouse house = BaseHouse.FindHouseAt(from); + + return (house != null && house.IsFriend(from)); + } + + public static bool CheckUse(InteriorDecorator tool, Mobile from) + { + if (!InHouse(from)) + from.SendLocalizedMessage(502092); // You must be in your house to do this. + else + return true; + + return false; + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int)0); // version + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + + public override void OnDoubleClick(Mobile from) + { + if (from.FindGump(typeof(InternalGump)) == null) + from.SendGump(new InternalGump(from, this)); + + if (m_Command != DecorateCommand.None) + from.Target = new InternalTarget(this); + } + + private class InternalGump : Gump + { + private readonly InteriorDecorator m_Decorator; + + public InternalGump(Mobile from, InteriorDecorator decorator) + : base(150, 50) + { + m_Decorator = decorator; + + + AddBackground(0, 0, 170, 559 , 2600); + + AddPage(0); + + AddButton(40, 45, (decorator.Command == DecorateCommand.Secure ? 2154 : 2152), 2154, 1, GumpButtonType.Reply, 0); + AddLabel(80, 50, 0, @"Secure"); //secure + + AddButton(40, 85, (decorator.Command == DecorateCommand.Lockdown ? 2154 : 2152), 2154, 2, GumpButtonType.Reply, 0); + AddLabel(80, 90, 0, @"Lockdown"); // lockdown + + AddButton(40, 125, (decorator.Command == DecorateCommand.Release ? 2154 : 2152), 2154, 3, GumpButtonType.Reply, 0); + AddLabel(80, 130, 0, @"Release"); // release + + AddButton(40, 165, (decorator.Command == DecorateCommand.Turn ? 2154 : 2152), 2154, 4, GumpButtonType.Reply, 0); + AddLabel(80, 170, 0, @"Turn"); // Turn + + AddButton(40, 205, (decorator.Command == DecorateCommand.Up ? 2154 : 2152), 2154, 5, GumpButtonType.Reply, 0); + AddLabel(80, 210, 0, @"Up"); // Up + + AddButton(40, 245, (decorator.Command == DecorateCommand.Down ? 2154 : 2152), 2154, 6, GumpButtonType.Reply, 0); + AddLabel(80, 250, 0, @"Down"); // Down + + AddButton(40, 285, (decorator.Command == DecorateCommand.North ? 2154 : 2152), 2154, 7, GumpButtonType.Reply, 0); + AddLabel(80, 290, 0, @"North"); // North + + AddButton(40, 325, (decorator.Command == DecorateCommand.East ? 2154 : 2152), 2154, 8, GumpButtonType.Reply, 0); + AddLabel(80, 330, 0, @"East"); // East + + AddButton(40, 365, (decorator.Command == DecorateCommand.South ? 2154 : 2152), 2154, 9, GumpButtonType.Reply, 0); + AddLabel(80, 370, 0, @"South"); // South + + AddButton(40, 405, (decorator.Command == DecorateCommand.West ? 2154 : 2152), 2154, 10, GumpButtonType.Reply, 0); + AddLabel(80, 410, 0, @"West"); // West + + AddButton(40, 485, (decorator.Command == DecorateCommand.Close ? 2472 : 2472), 2154, 13, GumpButtonType.Reply, 0); + AddLabel(80, 490, 0, @"Close"); // close + + AddHtmlLocalized(0, 0, 0, 0, 4, false, false); + } + + public override void OnResponse(NetState sender, RelayInfo info) + { + DecorateCommand command = DecorateCommand.None; + Mobile m = sender.Mobile; + + int cliloc = 0; + string c_String = null; + + switch (info.ButtonID) + { + case 1://secure + c_String = "Select an object to secure."; // Select an object to secure. + command = DecorateCommand.Secure; + break; + case 2://lockdown + c_String = "Select an object to lock down."; // Select an object to lock down. + command = DecorateCommand.Lockdown; + break; + case 3://release + c_String = "Select an object to release."; // Select an object to release. + command = DecorateCommand.Release; + break; + case 4://turn + cliloc = 1073404; // Select an object to turn. + command = DecorateCommand.Turn; + break; + case 5://up + cliloc = 1073405; // Select an object to increase its height. + command = DecorateCommand.Up; + break; + case 6://down + cliloc = 1073406; // Select an object to lower its height. + command = DecorateCommand.Down; + break; + case 7://north + c_String = "Select an object to move north."; // Select an object to move north. + command = DecorateCommand.North; + break; + case 8://east + c_String = "Select an object to move east."; // Select an object to move east. + command = DecorateCommand.East; + break; + case 9://south + c_String = "Select an object to move south."; // Select an object to move south. + command = DecorateCommand.South; + break; + case 10://west + c_String = "Select an object to move west."; // Select an object to move west. + command = DecorateCommand.West; + break; + case 12://Close + c_String = "Close"; // Close + command = DecorateCommand.Close; + break; + } + + if (command != DecorateCommand.None & command != DecorateCommand.Close) + { + m_Decorator.Command = command; + m.SendGump(new InternalGump(m, m_Decorator)); + + if (cliloc != 0) + m.SendLocalizedMessage(cliloc); + if (c_String != null) + m.SendMessage(c_String); + + m.Target = new InternalTarget(m_Decorator); + } + else + { + Target.Cancel(m); + } + } + } + + private class InternalTarget : Target + { + private readonly InteriorDecorator m_Decorator; + + public InternalTarget(InteriorDecorator decorator) + : base(-1, false, TargetFlags.None) + { + CheckLOS = false; + + m_Decorator = decorator; + } + + protected override void OnTargetNotAccessible(Mobile from, object targeted) + { + OnTarget(from, targeted); + } + + protected override void OnTarget(Mobile from, object targeted) + { + if (targeted is Item && CheckUse(m_Decorator, from)) + { + BaseHouse house = BaseHouse.FindHouseAt(from); + Item item = (Item)targeted; + + bool isDecorableComponent = false; + + if (item is AddonComponent || item is AddonContainerComponent || item is BaseAddonContainer) + { + object addon = null; + int count = 0; + + if (item is AddonComponent) + { + AddonComponent component = (AddonComponent)item; + count = component.Addon.Components.Count; + addon = component.Addon; + } + else if (item is AddonContainerComponent) + { + AddonContainerComponent component = (AddonContainerComponent)item; + count = component.Addon.Components.Count; + addon = component.Addon; + } + else if (item is BaseAddonContainer) + { + BaseAddonContainer container = (BaseAddonContainer)item; + count = container.Components.Count; + addon = container; + } + + if (m_Decorator.Command == DecorateCommand.Turn) + { + FlipableAddonAttribute[] attributes = (FlipableAddonAttribute[])addon.GetType().GetCustomAttributes(typeof(FlipableAddonAttribute), false); + + if (attributes.Length > 0) + isDecorableComponent = true; + } + } + + bool moveAddon = false; + + if ( item is AddonComponent && ( m_Decorator.Command == DecorateCommand.North || m_Decorator.Command == DecorateCommand.South || m_Decorator.Command == DecorateCommand.East || m_Decorator.Command == DecorateCommand.West ) ) + moveAddon = true; + + if (house == null || !house.IsFriend(from)) + { + from.SendLocalizedMessage(502092); // You must be in your house to do + } + else if (item.Parent != null || !house.IsInside(item)) + { + from.SendLocalizedMessage(1042270); // That is not in your house. + } + else if (!house.IsLockedDown(item) && !house.IsSecure(item) && !isDecorableComponent && !(item is BaseAddonDeed) && !moveAddon ) + { + if (item is AddonComponent && m_Decorator.Command == DecorateCommand.Turn) + from.SendLocalizedMessage(1042273); // You cannot turn that. + else if (item is AddonComponent && m_Decorator.Command == DecorateCommand.Up) + from.SendLocalizedMessage(1042274); // You cannot raise it up any higher. + else if (item is AddonComponent && m_Decorator.Command == DecorateCommand.Down) + from.SendLocalizedMessage(1042275); // You cannot lower it down any further. + else if (m_Decorator.Command == DecorateCommand.Secure) + Secure(item, from); + else if (m_Decorator.Command == DecorateCommand.Lockdown) + Lockdown(item, from); + else + from.SendMessage("That is not locked down or secured."); + } + else if (item is VendorRentalContract) + { + from.SendLocalizedMessage(1062491); // You cannot use the house decorator on that object. + } + else + { + switch (m_Decorator.Command) + { + case DecorateCommand.None: + None(item, from); + break; + case DecorateCommand.Secure: + Secure(item, from); + break; + case DecorateCommand.Lockdown: + Lockdown(item, from); + break; + case DecorateCommand.Release: + Release(item, from); + break; + case DecorateCommand.Turn: + Turn(item, from); + break; + case DecorateCommand.Up: + Up(item, from); + break; + case DecorateCommand.Down: + Down(item, from); + break; + case DecorateCommand.North: + North(item, from); + break; + case DecorateCommand.East: + East(item, from); + break; + case DecorateCommand.South: + South(item, from); + break; + case DecorateCommand.West: + West(item, from); + break; + case DecorateCommand.Close: + Close(item, from); + break; + } + } + } + + from.Target = new InternalTarget(m_Decorator); + } + + protected override void OnTargetCancel(Mobile from, TargetCancelType cancelType) + { + if (cancelType == TargetCancelType.Canceled) + from.CloseGump(typeof(InteriorDecorator.InternalGump)); + } + + private static void None(Item item, Mobile from) + { + } + + private static void Secure(Item item, Mobile from) + { + BaseHouse house = BaseHouse.FindHouseAt(from); + if (house.IsLockedDown(item)) + from.SendMessage("That is already locked down."); + else if (house.IsSecure(item)) + from.SendMessage("That is already secured."); + else if (house.IsFriend(from)&&!house.IsCoOwner(from)) + { from.SendMessage("Only Owners and CoOwners are allowed to secure things in a house."); + return; + } + else + house.AddSecure(from, item); + } + + private static void Lockdown(Item item, Mobile from) + { + BaseHouse house = BaseHouse.FindHouseAt(from); + if (house.IsLockedDown(item)) + from.SendMessage("That is already locked down."); + else if (house.IsSecure(item)) + from.SendMessage("That is already secured."); + else + house.LockDown(from, item, true); + } + + private static void Release(Item item, Mobile from) + { + BaseHouse house = BaseHouse.FindHouseAt(from); + if (!house.IsLockedDown(item) && !house.IsSecure(item) && (item.Movable)) + from.SendMessage("That is not locked down or secured."); + else + house.Release(from, item); + } + + private static void Turn(Item item, Mobile from) + { + FlipableAttribute[] attributes = (FlipableAttribute[])item.GetType().GetCustomAttributes(typeof(FlipableAttribute), false); + + Item deed = null; + + if ( item is AnvilEastDeed ){ deed = new AnvilSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is AnvilSouthDeed ){ deed = new AnvilEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is BrownBearRugEastDeed ){ deed = new BrownBearRugSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is BrownBearRugSouthDeed ){ deed = new BrownBearRugEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is PolarBearRugEastDeed ){ deed = new PolarBearRugSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is PolarBearRugSouthDeed ){ deed = new PolarBearRugEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is DartBoardEastDeed ){ deed = new DartBoardSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is DartBoardSouthDeed ){ deed = new DartBoardEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is FlourMillEastDeed ){ deed = new FlourMillSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is FlourMillSouthDeed ){ deed = new FlourMillEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is LightFlowerTapestryEastDeed ){ deed = new LightFlowerTapestrySouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is LightFlowerTapestrySouthDeed ){ deed = new LightFlowerTapestryEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is DarkFlowerTapestryEastDeed ){ deed = new DarkFlowerTapestrySouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is DarkFlowerTapestrySouthDeed ){ deed = new DarkFlowerTapestryEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is GrayBrickFireplaceEastDeed ){ deed = new GrayBrickFireplaceSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is GrayBrickFireplaceSouthDeed ){ deed = new GrayBrickFireplaceEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is LargeBedEastDeed ){ deed = new LargeBedSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is LargeBedSouthDeed ){ deed = new LargeBedEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is LadderSouthAddonDeed ){ deed = new LadderEastAddonDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is LadderEastAddonDeed ){ deed = new LadderSouthAddonDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is LargeForgeEastDeed ){ deed = new LargeForgeSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is LargeForgeSouthDeed ){ deed = new LargeForgeEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is LargeStoneTableEastDeed ){ deed = new LargeStoneTableSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is LargeStoneTableSouthDeed ){ deed = new LargeStoneTableEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is LoomEastDeed ){ deed = new LoomSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is LoomSouthDeed ){ deed = new LoomEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is MediumStoneTableEastDeed ){ deed = new MediumStoneTableSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is MediumStoneTableSouthDeed ){ deed = new MediumStoneTableEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is PickpocketDipEastDeed ){ deed = new PickpocketDipSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is PickpocketDipSouthDeed ){ deed = new PickpocketDipEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is SandstoneFireplaceEastDeed ){ deed = new SandstoneFireplaceSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is SandstoneFireplaceSouthDeed ){ deed = new SandstoneFireplaceEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is SmallBedEastDeed ){ deed = new SmallBedSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is SmallBedSouthDeed ){ deed = new SmallBedEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is SpinningwheelEastDeed ){ deed = new SpinningwheelSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is SpinningwheelSouthDeed ){ deed = new SpinningwheelEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is StoneFireplaceEastDeed ){ deed = new StoneFireplaceSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is StoneFireplaceSouthDeed ){ deed = new StoneFireplaceEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is StoneOvenEastDeed ){ deed = new StoneOvenSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is StoneOvenSouthDeed ){ deed = new StoneOvenEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is SmallStretchedHideEastDeed ){ deed = new SmallStretchedHideSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is SmallStretchedHideSouthDeed ){ deed = new SmallStretchedHideEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is MediumStretchedHideEastDeed ){ deed = new MediumStretchedHideSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is MediumStretchedHideSouthDeed ){ deed = new MediumStretchedHideEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is TrainingDummyEastDeed ){ deed = new TrainingDummySouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is TrainingDummySouthDeed ){ deed = new TrainingDummyEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is WaterTroughEastDeed ){ deed = new WaterTroughSouthDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + else if ( item is WaterTroughSouthDeed ){ deed = new WaterTroughEastDeed(); deed.MoveToWorld(item.Location, item.Map); item.Delete(); } + + else if ( item is MyTentEastAddonDeed ) + { + MyTentEastAddonDeed tent = (MyTentEastAddonDeed)item; + deed = new MyTentSouthAddonDeed(); + MyTentSouthAddonDeed hut = (MyTentSouthAddonDeed)deed; + deed.Hue = item.Hue; + hut.TentColor = tent.TentColor; + deed.MoveToWorld(item.Location, item.Map); + item.Delete(); + } + else if ( item is MyTentSouthAddonDeed ) + { + MyTentSouthAddonDeed tent = (MyTentSouthAddonDeed)item; + deed = new MyTentEastAddonDeed(); + MyTentEastAddonDeed hut = (MyTentEastAddonDeed)deed; + deed.Hue = item.Hue; + hut.TentColor = tent.TentColor; + deed.MoveToWorld(item.Location, item.Map); + item.Delete(); + } + + if (attributes.Length > 0) + attributes[0].Flip(item); + else if ( item.ItemID != FlipID( item.ItemID ) ) + item.ItemID = FlipID( item.ItemID ); + else + from.SendLocalizedMessage(1042273); // You cannot turn that. + } + + private static void Up(Item item, Mobile from) + { + int floorZ = GetFloorZ(item); + + if (floorZ > int.MinValue && item.Z < (floorZ + 14)) // Confirmed : no height checks here + item.Location = new Point3D(item.Location, item.Z + 1); + else + from.SendLocalizedMessage(1042274); // You cannot raise it up any higher. + } + + private static void Down(Item item, Mobile from) + { + int floorZ = GetFloorZ(item); + + if (floorZ > int.MinValue && item.Z > GetFloorZ(item)) + item.Location = new Point3D(item.Location, item.Z - 1); + else + from.SendLocalizedMessage(1042275); // You cannot lower it down any further. + } + + private static void North(Item item, Mobile from) + { + BaseHouse house = BaseHouse.FindHouseAt(item); + + Point3D ourLoc = item.GetWorldLocation(); + Point3D goingLoc = new Point3D(ourLoc.X, ourLoc.Y -2, ourLoc.Z); + + if (house.IsInside(goingLoc, ourLoc.Z)) + item.Y = (item.Y -1); + else + from.SendMessage("You cannot move it to the north any further."); + + } + + private static void East(Item item, Mobile from) + { + BaseHouse house = BaseHouse.FindHouseAt(item); + + Point3D ourLoc = item.GetWorldLocation(); + Point3D goingLoc = new Point3D(ourLoc.X +1, ourLoc.Y, ourLoc.Z); + + if (house.IsInside(goingLoc, ourLoc.Z)) + item.X = (item.X +1); + else + from.SendMessage("You cannot move it to the east any further."); + + } + + private static void South(Item item, Mobile from) + { + BaseHouse house = BaseHouse.FindHouseAt(item); + + Point3D ourLoc = item.GetWorldLocation(); + Point3D goingLoc = new Point3D(ourLoc.X, ourLoc.Y +1, ourLoc.Z); + + if (house.IsInside(goingLoc, ourLoc.Z)) + item.Y = (item.Y +1); + else + from.SendMessage("You cannot move it to the south any further."); + } + + private static void West(Item item, Mobile from) + { + BaseHouse house = BaseHouse.FindHouseAt(item); + + Point3D ourLoc = item.GetWorldLocation(); + Point3D goingLoc = new Point3D(ourLoc.X -2, ourLoc.Y, ourLoc.Z); + + if (house.IsInside(goingLoc, ourLoc.Z)) + item.X = (item.X -1); + else + from.SendMessage("You cannot move it to the west any further."); + } + + private static void Close(Item item, Mobile from) + { + from.CloseGump(typeof(InteriorDecorator.InternalGump)); + Target.Cancel(from); + } + + private static void Command(Item item, Mobile from) + { + } + + private static int GetFloorZ(Item item) + { + Map map = item.Map; + + if (map == null) + return int.MinValue; + + StaticTile[] tiles = map.Tiles.GetStaticTiles(item.X, item.Y, true); + + int z = int.MinValue; + + for (int i = 0; i < tiles.Length; ++i) + { + StaticTile tile = tiles[i]; + ItemData id = TileData.ItemTable[tile.ID & 0x3FFF]; + + int top = tile.Z; // Confirmed : no height checks here + + if (id.Surface && !id.Impassable && top > z && top <= item.Z) + z = top; + } + + if (z == int.MinValue) + z = map.Tiles.GetLandTile(item.X, item.Y).Z; + + return z; + } + + public static int FlipID( int id ) + { + if ( id == 8356 ){ id = 8357; } + else if ( id == 8358 ){ id = 8359; } + else if ( id == 8360 ){ id = 8361; } + else if ( id == 8362 ){ id = 8363; } + else if ( id == 8364 ){ id = 8365; } + else if ( id == 8366 ){ id = 8367; } + else if ( id == 8368 ){ id = 8369; } + else if ( id == 8370 ){ id = 8371; } + else if ( id == 8372 ){ id = 8373; } + else if ( id == 8374 ){ id = 8375; } + else if ( id == 8376 ){ id = 8377; } + else if ( id == 8378 ){ id = 8379; } + else if ( id == 8380 ){ id = 8381; } + else if ( id == 8382 ){ id = 8383; } + else if ( id == 8384 ){ id = 8385; } + else if ( id == 8386 ){ id = 8387; } + else if ( id == 8388 ){ id = 8389; } + else if ( id == 8390 ){ id = 8391; } + else if ( id == 8392 ){ id = 8393; } + else if ( id == 8394 ){ id = 8395; } + else if ( id == 8396 ){ id = 8397; } + else if ( id == 0xC0F ){ id = 0xC2C; } + else if ( id == 0xE9F ){ id = 0xEC8; } + else if ( id == 0xEA0 ){ id = 0xEA9; } + else if ( id == 0xEA1 ){ id = 0xEA2; } + else if ( id == 0xEA3 ){ id = 0xEA4; } + else if ( id == 0xEA5 ){ id = 0x121C; } + else if ( id == 0xEA7 ){ id = 0x1229; } + else if ( id == 0xEA8 ){ id = 0x1236; } + else if ( id == 8357 ){ id = 8356; } + else if ( id == 8359 ){ id = 8358; } + else if ( id == 8361 ){ id = 8360; } + else if ( id == 8363 ){ id = 8362; } + else if ( id == 8365 ){ id = 8364; } + else if ( id == 8367 ){ id = 8366; } + else if ( id == 8369 ){ id = 8368; } + else if ( id == 8371 ){ id = 8370; } + else if ( id == 8373 ){ id = 8372; } + else if ( id == 8375 ){ id = 8374; } + else if ( id == 8377 ){ id = 8376; } + else if ( id == 8379 ){ id = 8378; } + else if ( id == 8381 ){ id = 8380; } + else if ( id == 8383 ){ id = 8382; } + else if ( id == 8385 ){ id = 8384; } + else if ( id == 8387 ){ id = 8386; } + else if ( id == 8389 ){ id = 8388; } + else if ( id == 8391 ){ id = 8390; } + else if ( id == 8393 ){ id = 8392; } + else if ( id == 8395 ){ id = 8394; } + else if ( id == 8397 ){ id = 8396; } + else if ( id == 0xC2C ){ id = 0xC0F; } + else if ( id == 0xEC8 ){ id = 0xE9F; } + else if ( id == 0xEA9 ){ id = 0xEA0; } + else if ( id == 0xEA2 ){ id = 0xEA1; } + else if ( id == 0xEA4 ){ id = 0xEA3; } + else if ( id == 0x121C ){ id = 0xEA5; } + else if ( id == 0x1229 ){ id = 0xEA7; } + else if ( id == 0x1236 ){ id = 0xEA8; } + + return id; + } + } + } +} diff --git a/Scripts/Items/Home/LadderEastAddon.cs b/Scripts/Items/Home/LadderEastAddon.cs new file mode 100644 index 0000000..7710866 --- /dev/null +++ b/Scripts/Items/Home/LadderEastAddon.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using System.Collections.Generic; + +namespace Server.Items +{ + public class LadderEastAddon : BaseAddon + { + private static int[,] m_AddOnSimpleComponents = new int[,] { + {8249, 0, 0, 0}, {1109, 0, 0, 22} + }; + + public override BaseAddonDeed Deed + { + get + { + return new LadderEastAddonDeed(); + } + } + + [ Constructable ] + public LadderEastAddon() + { + for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + + public override void OnComponentUsed( AddonComponent c, Mobile from ) + { + if ( !from.InRange( GetWorldLocation(), 4 ) || !from.InLOS( this ) ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + else if ( c.ItemID == 1109 ) + { + from.Z = c.Z-22; + from.X = c.X; + from.Y = c.Y; + from.PlaySound( 234 ); + } + else + { + from.Z = c.Z+22; + from.X = c.X; + from.Y = c.Y; + from.PlaySound( 234 ); + } + } + + public LadderEastAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class LadderEastAddonDeed : BaseAddonDeed + { + public override BaseAddon Addon + { + get + { + return new LadderEastAddon(); + } + } + + [Constructable] + public LadderEastAddonDeed() + { + Name = "ladder deed (east)"; + } + + public override void AddNameProperties(ObjectPropertyList list) + { + base.AddNameProperties(list); + + list.Add( 1070722, "Used to Access Upper Floor"); + list.Add( 1049644, "To Be Placed In Your Home"); + } + + public LadderEastAddonDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Home/LadderSouthAddon.cs b/Scripts/Items/Home/LadderSouthAddon.cs new file mode 100644 index 0000000..f31f29e --- /dev/null +++ b/Scripts/Items/Home/LadderSouthAddon.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using System.Collections.Generic; + +namespace Server.Items +{ + public class LadderSouthAddon : BaseAddon + { + private static int[,] m_AddOnSimpleComponents = new int[,] { + {8250, 0, 0, 0}, {1110, 0, 0, 22} + }; + + public override BaseAddonDeed Deed + { + get + { + return new LadderSouthAddonDeed(); + } + } + + [ Constructable ] + public LadderSouthAddon() + { + for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + + public override void OnComponentUsed( AddonComponent c, Mobile from ) + { + if ( !from.InRange( GetWorldLocation(), 4 ) || !from.InLOS( this ) ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + else if ( c.ItemID == 1110 ) + { + from.Z = c.Z-22; + from.X = c.X; + from.Y = c.Y; + from.PlaySound( 234 ); + } + else + { + from.Z = c.Z+22; + from.X = c.X; + from.Y = c.Y; + from.PlaySound( 234 ); + } + } + + public LadderSouthAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class LadderSouthAddonDeed : BaseAddonDeed + { + public override BaseAddon Addon + { + get + { + return new LadderSouthAddon(); + } + } + + [Constructable] + public LadderSouthAddonDeed() + { + Name = "ladder deed (south)"; + } + + public override void AddNameProperties(ObjectPropertyList list) + { + base.AddNameProperties(list); + + list.Add( 1070722, "Used to Access Upper Floor"); + list.Add( 1049644, "To Be Placed In Your Home"); + } + + public LadderSouthAddonDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Home/Tents.cs b/Scripts/Items/Home/Tents.cs new file mode 100644 index 0000000..e8eb529 --- /dev/null +++ b/Scripts/Items/Home/Tents.cs @@ -0,0 +1,446 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MyTentEastAddon : BaseAddon + { + public int TentColor; + public int TentFound; + + [CommandProperty(AccessLevel.Owner)] + public int Tent_Color { get { return TentColor; } set { TentColor = value; InvalidateProperties(); } } + + [CommandProperty(AccessLevel.Owner)] + public int Tent_Found { get { return TentFound; } set { TentFound = value; InvalidateProperties(); } } + + public override BaseAddonDeed Deed + { + get + { + return new MyTentEastAddonDeed( Tent_Color, 1 ); + } + } + + [Constructable] + public MyTentEastAddon() : this( 0 ) + { + } + + [ Constructable ] + public MyTentEastAddon( int RelHue ) + { + AddComplexComponent( (BaseAddon) this, 1630, 0, 1, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -1, 0, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -1, 1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -1, 2, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, 0, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, 1, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, -1, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, 2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, 3, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 0, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 0, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 1, 0, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 1, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 1, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, -1, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 2, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 2, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 3, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 0, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 0, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 1, 2, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 1, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 1, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, -1, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 2, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 2, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 3, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 2, 1, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 3, 0, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 3, 1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 3, 2, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, 0, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, 1, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, -1, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, 2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, 3, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1635, 2, 2, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1635, 3, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1635, 4, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1636, 2, 0, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1636, 3, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1636, 4, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1637, 0, 0, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1637, -1, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1637, -2, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1638, 0, 2, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1638, -1, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1638, -2, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1639, 1, 1, 34, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 872, 4, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, 0, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, 1, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, -1, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, 2, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, -2, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, 3, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, -2, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, -1, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, 2, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, 3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 875, -3, -3, 0, 0, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 876, -3, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 877, 4, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, 0, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, 1, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, -1, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, 2, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, -2, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, 3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, 0, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, 1, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, -1, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, 2, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, -2, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, 3, -3, 0, RelHue, -1, "tent", 1); + + TentColor = RelHue; + } + + public MyTentEastAddon( Serial serial ) : base( serial ) + { + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource) + { + AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1); + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount) + { + AddonComponent ac; + ac = new AddonComponent(item); + if (name != null && name.Length > 0) + ac.Name = name; + if (hue != 0) + ac.Hue = hue; + if (amount > 1) + { + ac.Stackable = true; + ac.Amount = amount; + } + if (lightsource != -1) + ac.Light = (LightType) lightsource; + addon.AddComponent(ac, xoffset, yoffset, zoffset); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + writer.Write( TentColor ); + writer.Write( TentFound ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + TentColor = reader.ReadInt(); + TentFound = reader.ReadInt(); + } + } + + public class MyTentEastAddonDeed : BaseAddonDeed + { + public int TentColor; + public int TentFound; + + [CommandProperty(AccessLevel.Owner)] + public int Tent_Color { get { return TentColor; } set { TentColor = value; InvalidateProperties(); } } + + [CommandProperty(AccessLevel.Owner)] + public int Tent_Found { get { return TentFound; } set { TentFound = value; InvalidateProperties(); } } + + public override BaseAddon Addon + { + get + { + return new MyTentEastAddon( Tent_Color ); + } + } + + [Constructable] + public MyTentEastAddonDeed() : this( 0, 0 ) + { + } + + [Constructable] + public MyTentEastAddonDeed( int RelHue, int RelRolled ) + { + Weight = 50; + ItemID = 0xA58; + + /// COLOR //////////////// + if ( TentFound > 0 ){ TentColor = Tent_Color; Hue = Tent_Color; } + else if ( RelRolled > 0 ){ TentColor = RelHue; Hue = RelHue; } + else + { + Hue = Utility.RandomHue(); + TentColor = Hue; + } + + Name = "Tent (East Door)"; + TentFound = 1; + } + + public MyTentEastAddonDeed( Serial serial ) : base( serial ) + { + } + + public override void AddNameProperties(ObjectPropertyList list) + { + base.AddNameProperties(list); + + list.Add( 1070722, "Can Be Dyed Different Colors"); + list.Add( 1049644, "To Be Placed In Your Home"); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + writer.Write( TentColor ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + TentColor = reader.ReadInt(); + } + } + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + public class MyTentSouthAddon : BaseAddon + { + public int TentColor; + public int TentFound; + + [CommandProperty(AccessLevel.Owner)] + public int Tent_Color { get { return TentColor; } set { TentColor = value; InvalidateProperties(); } } + + [CommandProperty(AccessLevel.Owner)] + public int Tent_Found { get { return TentFound; } set { TentFound = value; InvalidateProperties(); } } + + public override BaseAddonDeed Deed + { + get + { + return new MyTentSouthAddonDeed( Tent_Color, 1 ); + } + } + + [Constructable] + public MyTentSouthAddon() : this( 0 ) + { + } + + [ Constructable ] + public MyTentSouthAddon( int RelHue ) + { + AddComplexComponent( (BaseAddon) this, 1630, 0, 1, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -1, 0, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -1, 1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -1, 2, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, 0, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, 1, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, -1, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, 2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1630, -2, 3, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 0, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 0, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 1, 0, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 1, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 1, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, -1, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 2, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 2, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1631, 3, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 0, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 0, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 1, 2, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 1, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 1, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, -1, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 2, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 2, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1632, 3, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 2, 1, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 3, 0, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 3, 1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 3, 2, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, 0, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, 1, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, -1, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, 2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1633, 4, 3, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1635, 2, 2, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1635, 3, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1635, 4, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1636, 2, 0, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1636, 3, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1636, 4, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1637, 0, 0, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1637, -1, -1, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1637, -2, -2, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1638, 0, 2, 26, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1638, -1, 3, 23, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1638, -2, 4, 20, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 1639, 1, 1, 34, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 872, 4, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, -2, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, -1, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, 2, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 873, 3, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, 0, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, 1, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, -1, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, 2, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, -2, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 874, 4, 3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 875, -3, -3, 0, 0, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 876, -3, 4, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 877, 4, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, 0, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, 1, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, -1, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, 2, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, -2, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 880, -3, 3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, 0, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, 1, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, -1, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, 2, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, -2, -3, 0, RelHue, -1, "tent", 1); + AddComplexComponent( (BaseAddon) this, 881, 3, -3, 0, RelHue, -1, "tent", 1); + + TentColor = RelHue; + } + + public MyTentSouthAddon( Serial serial ) : base( serial ) + { + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource) + { + AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1); + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount) + { + AddonComponent ac; + ac = new AddonComponent(item); + if (name != null && name.Length > 0) + ac.Name = name; + if (hue != 0) + ac.Hue = hue; + if (amount > 1) + { + ac.Stackable = true; + ac.Amount = amount; + } + if (lightsource != -1) + ac.Light = (LightType) lightsource; + addon.AddComponent(ac, xoffset, yoffset, zoffset); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + writer.Write( TentColor ); + writer.Write( TentFound ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + TentColor = reader.ReadInt(); + TentFound = reader.ReadInt(); + } + } + + public class MyTentSouthAddonDeed : BaseAddonDeed + { + public int TentColor; + public int TentFound; + + [CommandProperty(AccessLevel.Owner)] + public int Tent_Color { get { return TentColor; } set { TentColor = value; InvalidateProperties(); } } + + [CommandProperty(AccessLevel.Owner)] + public int Tent_Found { get { return TentFound; } set { TentFound = value; InvalidateProperties(); } } + + public override BaseAddon Addon + { + get + { + return new MyTentSouthAddon( Tent_Color ); + } + } + + [Constructable] + public MyTentSouthAddonDeed() : this( 0, 0 ) + { + } + + [Constructable] + public MyTentSouthAddonDeed( int RelHue, int RelRolled ) + { + Weight = 50; + ItemID = 0xA59; + + /// COLOR //////////////// + if ( TentFound > 0 ){ TentColor = Tent_Color; Hue = Tent_Color; } + else if ( RelRolled > 0 ){ TentColor = RelHue; Hue = RelHue; } + else + { + Hue = Utility.RandomHue(); + TentColor = Hue; + } + + Name = "Tent (South Door)"; + TentFound = 1; + } + + public MyTentSouthAddonDeed( Serial serial ) : base( serial ) + { + } + + public override void AddNameProperties(ObjectPropertyList list) + { + base.AddNameProperties(list); + + list.Add( 1070722, "Can Be Dyed Different Colors"); + list.Add( 1049644, "To Be Placed In Your Home"); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + writer.Write( TentColor ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + TentColor = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Jewels/BaseJewel.cs b/Scripts/Items/Jewels/BaseJewel.cs new file mode 100644 index 0000000..8e38e8b --- /dev/null +++ b/Scripts/Items/Jewels/BaseJewel.cs @@ -0,0 +1,358 @@ +using System; +using Server.Engines.Craft; + +namespace Server.Items +{ + public enum GemType + { + None, + StarSapphire, + Emerald, + Sapphire, + Ruby, + Citrine, + Amethyst, + Tourmaline, + Amber, + Diamond + } + + public abstract class BaseJewel : Item, ICraftable + { + private CraftResource m_Resource; + private GemType m_GemType; + private int m_StrBonus = -1, m_DexBonus = -1, m_IntBonus = -1; + + public virtual int UOStrBonus{ get{ return 0; } } + public virtual int UODexBonus{ get{ return 0; } } + public virtual int UOIntBonus{ get{ return 0; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int StrBonus + { + get{ return ( m_StrBonus == -1 ? UOStrBonus : m_StrBonus ); } + set{ m_StrBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int DexBonus + { + get{ return ( m_DexBonus == -1 ? UODexBonus : m_DexBonus ); } + set{ m_DexBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int IntBonus + { + get{ return ( m_IntBonus == -1 ? UOIntBonus : m_IntBonus ); } + set{ m_IntBonus = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get{ return m_Resource; } + set{ m_Resource = value; Hue = CraftResources.GetHue( m_Resource ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public GemType GemType + { + get{ return m_GemType; } + set{ m_GemType = value; InvalidateProperties(); } + } + + public virtual int BaseGemTypeNumber{ get{ return 0; } } + + public override int LabelNumber + { + get + { + if ( m_GemType == GemType.None ) + return base.LabelNumber; + + return BaseGemTypeNumber + (int)m_GemType - 1; + } + } + + public override void OnAfterDuped( Item newItem ) + { + BaseJewel jewel = newItem as BaseJewel; + + if ( jewel == null ) + return; + } + + public BaseJewel( int itemID, Layer layer ) : base( itemID ) + { + m_Resource = CraftResource.Iron; + m_GemType = GemType.None; + + switch ( Utility.Random( 9 ) ) + { + case 0: m_GemType = GemType.StarSapphire; break; + case 1: m_GemType = GemType.Emerald; break; + case 2: m_GemType = GemType.Sapphire; break; + case 3: m_GemType = GemType.Ruby; break; + case 4: m_GemType = GemType.Citrine; break; + case 5: m_GemType = GemType.Amethyst; break; + case 6: m_GemType = GemType.Tourmaline; break; + case 7: m_GemType = GemType.Amber; break; + case 8: m_GemType = GemType.Diamond; break; + } + + Layer = layer; + } + + public int ComputeStatBonus( StatType type ) + { + if ( type == StatType.Str ) + return StrBonus; + else if ( type == StatType.Dex ) + return DexBonus; + else + return IntBonus; + } + + public override void OnAfterSpawn() + { + } + + public virtual void AddStatBonuses( Mobile parent ) + { + if ( parent == null ) + return; + + int strBonus = ComputeStatBonus( StatType.Str ); + int dexBonus = ComputeStatBonus( StatType.Dex ); + int intBonus = ComputeStatBonus( StatType.Int ); + + if ( strBonus == 0 && dexBonus == 0 && intBonus == 0 ) + return; + + string modName = this.Serial.ToString(); + + if ( strBonus != 0 ) + parent.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) ); + + if ( dexBonus != 0 ) + parent.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) ); + + if ( intBonus != 0 ) + parent.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) ); + } + + public override bool OnEquip( Mobile from ) + { + from.CheckStatTimers(); + + int strBonus = ComputeStatBonus( StatType.Str ); + int dexBonus = ComputeStatBonus( StatType.Dex ); + int intBonus = ComputeStatBonus( StatType.Int ); + + if ( strBonus != 0 || dexBonus != 0 || intBonus != 0 ) + { + string modName = this.Serial.ToString(); + + if ( strBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Str, modName + "Str", strBonus, TimeSpan.Zero ) ); + + if ( dexBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero ) ); + + if ( intBonus != 0 ) + from.AddStatMod( new StatMod( StatType.Int, modName + "Int", intBonus, TimeSpan.Zero ) ); + } + + return base.OnEquip( from ); + } + + public override void OnAdded( object parent ) + { + Mobile mob = parent as Mobile; + + if ( mob != null ) + { + AddStatBonuses( mob ); + mob.CheckStatTimers(); + } + + base.OnAdded( parent ); + } + + public override void OnRemoved( object parent ) + { + if ( parent is Mobile ) + { + Mobile m = (Mobile)parent; + string modName = this.Serial.ToString(); + + m.RemoveStatMod( modName + "Str" ); + m.RemoveStatMod( modName + "Dex" ); + m.RemoveStatMod( modName + "Int" ); + + m.CheckStatTimers(); + } + + base.OnRemoved( parent ); + } + + public BaseJewel( Serial serial ) : base( serial ) + { + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_StrBonus > 0 && m_StrBonus < 3 ) + list.Add( 1038027 ); // Great Strength + else if ( m_StrBonus > 2 && m_StrBonus < 5 ) + list.Add( 1038028 ); // Greater Strength + else if ( m_StrBonus > 4 ) + list.Add( 1038029 ); // Ultimate Strength + + if ( m_DexBonus > 0 && m_DexBonus < 3 ) + list.Add( 1038033 ); // Great Agility + else if ( m_DexBonus > 2 && m_DexBonus < 5 ) + list.Add( 1038034 ); // Greater Agility + else if ( m_DexBonus > 4 ) + list.Add( 1038035 ); // Ultimate Agility + + if ( m_IntBonus > 0 && m_IntBonus < 3 ) + list.Add( 1038030 ); // Great Intellect + else if ( m_IntBonus > 2 && m_IntBonus < 5 ) + list.Add( 1038031 ); // Greater Intellect + else if ( m_IntBonus > 4 ) + list.Add( 1038032 ); // Ultimate Intellect + + if ( Magical > 0 && Uses > 0 ) + { + list.Add( 1062520, "\t#{0}", Magical ); + } + + if ( Uses > 0 && Server.Misc.Settings.DisplayInfo() ) + { + if ( Uses > 1 ) + list.Add( 1062516, "{0}", Uses ); + else + list.Add( 1062517, "{0}", Uses ); + } + else if ( Uses > 0 ) + { + double usage = (double)Uses / (double)UsesMax; + + if ( usage > 0.95 ) + list.Add( 1063269 ); // Fully Charged + else if ( usage > 0.75 ) + list.Add( 1063270 ); // Mostly Charged + else if ( usage > 0.50 ) + list.Add( 1063271 ); // Partially Charged + else if ( usage > 0.25 ) + list.Add( 1063272 ); // Somewhat Charged + else if ( usage > 0.05 ) + list.Add( 1063273 ); // Barely Charged + else + list.Add( 1063274 ); // Almost Drained + } + + if ( m_GemType == GemType.StarSapphire ) + list.Add( 1044231 ); + else if ( m_GemType == GemType.Emerald ) + list.Add( 1044232 ); + else if ( m_GemType == GemType.Sapphire ) + list.Add( 1044233 ); + else if ( m_GemType == GemType.Ruby ) + list.Add( 1044234 ); + else if ( m_GemType == GemType.Citrine ) + list.Add( 1044235 ); + else if ( m_GemType == GemType.Amethyst ) + list.Add( 1044236 ); + else if ( m_GemType == GemType.Tourmaline ) + list.Add( 1044237 ); + else if ( m_GemType == GemType.Amber ) + list.Add( 1044238 ); + else if ( m_GemType == GemType.Diamond ) + list.Add( 1044239 ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.WriteEncodedInt( (int) m_StrBonus ); + writer.WriteEncodedInt( (int) m_DexBonus ); + writer.WriteEncodedInt( (int) m_IntBonus ); + writer.WriteEncodedInt( (int) m_Resource ); + writer.WriteEncodedInt( (int) m_GemType ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_StrBonus = reader.ReadEncodedInt(); + m_DexBonus = reader.ReadEncodedInt(); + m_IntBonus = reader.ReadEncodedInt(); + m_Resource = (CraftResource)reader.ReadEncodedInt(); + m_GemType = (GemType)reader.ReadEncodedInt(); + + Mobile parent = Parent as Mobile; + + if ( parent != null ) + { + AddStatBonuses( parent ); + parent.CheckStatTimers(); + } + } + + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Type resourceType = typeRes; + + if ( resourceType == null ) + resourceType = craftItem.Resources.GetAt( 0 ).ItemType; + + Resource = CraftResources.GetFromType( resourceType ); + + CraftContext context = craftSystem.GetContext( from ); + + if ( context != null && context.DoNotColor ) + Hue = 0; + + if ( 1 < craftItem.Resources.Count ) + { + resourceType = craftItem.Resources.GetAt( 1 ).ItemType; + + if ( resourceType == typeof( StarSapphire ) ) + GemType = GemType.StarSapphire; + else if ( resourceType == typeof( Emerald ) ) + GemType = GemType.Emerald; + else if ( resourceType == typeof( Sapphire ) ) + GemType = GemType.Sapphire; + else if ( resourceType == typeof( Ruby ) ) + GemType = GemType.Ruby; + else if ( resourceType == typeof( Citrine ) ) + GemType = GemType.Citrine; + else if ( resourceType == typeof( Amethyst ) ) + GemType = GemType.Amethyst; + else if ( resourceType == typeof( Tourmaline ) ) + GemType = GemType.Tourmaline; + else if ( resourceType == typeof( Amber ) ) + GemType = GemType.Amber; + else if ( resourceType == typeof( Diamond ) ) + GemType = GemType.Diamond; + } + + return 1; + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Jewels/Beads.cs b/Scripts/Items/Jewels/Beads.cs new file mode 100644 index 0000000..95a0876 --- /dev/null +++ b/Scripts/Items/Jewels/Beads.cs @@ -0,0 +1,31 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class Beads : Item + { + [Constructable] + public Beads() : base( 0x108B ) + { + Weight = 1.0; + } + + public Beads( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Jewels/Bracelet.cs b/Scripts/Items/Jewels/Bracelet.cs new file mode 100644 index 0000000..1d16332 --- /dev/null +++ b/Scripts/Items/Jewels/Bracelet.cs @@ -0,0 +1,85 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseBracelet : BaseJewel + { + public override int BaseGemTypeNumber{ get{ return 1044221; } } // star sapphire bracelet + + public BaseBracelet( int itemID ) : base( itemID, Layer.Bracelet ) + { + } + + public BaseBracelet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GoldBracelet : BaseBracelet + { + [Constructable] + public GoldBracelet() : base( 0x1086 ) + { + Weight = 0.1; + } + + public GoldBracelet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SilverBracelet : BaseBracelet + { + [Constructable] + public SilverBracelet() : base( 0x1F06 ) + { + Weight = 0.1; + } + + public SilverBracelet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Jewels/Earrings.cs b/Scripts/Items/Jewels/Earrings.cs new file mode 100644 index 0000000..747810f --- /dev/null +++ b/Scripts/Items/Jewels/Earrings.cs @@ -0,0 +1,85 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseEarrings : BaseJewel + { + public override int BaseGemTypeNumber{ get{ return 1044203; } } // star sapphire earrings + + public BaseEarrings( int itemID ) : base( itemID, Layer.Earrings ) + { + } + + public BaseEarrings( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GoldEarrings : BaseEarrings + { + [Constructable] + public GoldEarrings() : base( 0x1087 ) + { + Weight = 0.1; + } + + public GoldEarrings( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SilverEarrings : BaseEarrings + { + [Constructable] + public SilverEarrings() : base( 0x1F07 ) + { + Weight = 0.1; + } + + public SilverEarrings( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Jewels/Necklace.cs b/Scripts/Items/Jewels/Necklace.cs new file mode 100644 index 0000000..5f23958 --- /dev/null +++ b/Scripts/Items/Jewels/Necklace.cs @@ -0,0 +1,167 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseNecklace : BaseJewel + { + public override int BaseGemTypeNumber{ get{ return 1044241; } } // star sapphire necklace + + public BaseNecklace( int itemID ) : base( itemID, Layer.Neck ) + { + } + + public BaseNecklace( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Necklace : BaseNecklace + { + [Constructable] + public Necklace() : base( 0x1085 ) + { + Weight = 0.1; + } + + public Necklace( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GoldNecklace : BaseNecklace + { + [Constructable] + public GoldNecklace() : base( 0x1088 ) + { + Weight = 0.1; + } + + public GoldNecklace( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GoldBeadNecklace : BaseNecklace + { + [Constructable] + public GoldBeadNecklace() : base( 0x1089 ) + { + Weight = 0.1; + } + + public GoldBeadNecklace( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + + public class SilverNecklace : BaseNecklace + { + [Constructable] + public SilverNecklace() : base( 0x1F08 ) + { + Weight = 0.1; + } + + public SilverNecklace( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SilverBeadNecklace : BaseNecklace + { + [Constructable] + public SilverBeadNecklace() : base( 0x1F05 ) + { + Weight = 0.1; + } + + public SilverBeadNecklace( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Jewels/Ring.cs b/Scripts/Items/Jewels/Ring.cs new file mode 100644 index 0000000..71135fd --- /dev/null +++ b/Scripts/Items/Jewels/Ring.cs @@ -0,0 +1,85 @@ +using System; + +namespace Server.Items +{ + public abstract class BaseRing : BaseJewel + { + public override int BaseGemTypeNumber{ get{ return 1044176; } } // star sapphire ring + + public BaseRing( int itemID ) : base( itemID, Layer.Ring ) + { + } + + public BaseRing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GoldRing : BaseRing + { + [Constructable] + public GoldRing() : base( 0x108a ) + { + Weight = 0.1; + } + + public GoldRing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SilverRing : BaseRing + { + [Constructable] + public SilverRing() : base( 0x1F09 ) + { + Weight = 0.1; + } + + public SilverRing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Lights/BaseEquipableLight.cs b/Scripts/Items/Lights/BaseEquipableLight.cs new file mode 100644 index 0000000..2017773 --- /dev/null +++ b/Scripts/Items/Lights/BaseEquipableLight.cs @@ -0,0 +1,64 @@ +using System; +using Server; + +namespace Server.Items +{ + public abstract class BaseEquipableLight : BaseLight + { + [Constructable] + public BaseEquipableLight( int itemID ) : base( itemID ) + { + Layer = Layer.TwoHanded; + } + + public BaseEquipableLight( Serial serial ) : base( serial ) + { + } + + public override void Ignite() + { + if ( !(Parent is Mobile) && RootParent is Mobile ) + { + Mobile holder = (Mobile)RootParent; + + if ( holder.EquipItem( this ) ) + { + if ( this is Candle ) + holder.SendLocalizedMessage( 502969 ); // You put the candle in your left hand. + else if ( this is Torch ) + holder.SendLocalizedMessage( 502971 ); // You put the torch in your left hand. + + base.Ignite(); + } + else + { + holder.SendLocalizedMessage( 502449 ); // You cannot hold this item. + } + } + else + { + base.Ignite(); + } + } + + public override void OnAdded ( object parent ) + { + if ( Burning && parent is Container ) + Douse(); + + base.OnAdded( parent ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/BaseLight.cs b/Scripts/Items/Lights/BaseLight.cs new file mode 100644 index 0000000..342a576 --- /dev/null +++ b/Scripts/Items/Lights/BaseLight.cs @@ -0,0 +1,233 @@ +using System; +using Server; + +namespace Server.Items +{ + public abstract class BaseLight : Item + { + private Timer m_Timer; + private DateTime m_End; + private bool m_BurntOut = false; + private bool m_Burning = false; + private bool m_Protected = false; + private TimeSpan m_Duration = TimeSpan.Zero; + + public abstract int LitItemID{ get; } + + public virtual int UnlitItemID{ get { return 0; } } + public virtual int BurntOutItemID{ get { return 0; } } + + public virtual int LitSound{ get { return 0x47; } } + public virtual int UnlitSound{ get { return 0x3be; } } + public virtual int BurntOutSound{ get { return 0x4b8; } } + + public static readonly bool Burnout = false; + + [CommandProperty( AccessLevel.GameMaster )] + public bool Burning + { + get { return m_Burning; } + set + { + if ( m_Burning != value ) + { + m_Burning = true; + DoTimer( m_Duration ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool BurntOut + { + get { return m_BurntOut; } + set { m_BurntOut = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Protected + { + get { return m_Protected; } + set { m_Protected = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan Duration + { + get + { + if ( m_Duration != TimeSpan.Zero && m_Burning ) + { + return m_End - DateTime.Now; + } + else + return m_Duration; + } + + set { m_Duration = value; } + } + + [Constructable] + public BaseLight( int itemID ) : base( itemID ) + { + } + + public BaseLight( Serial serial ) : base( serial ) + { + } + + public virtual void PlayLitSound() + { + if ( LitSound != 0 ) + { + Point3D loc = GetWorldLocation(); + Effects.PlaySound( loc, Map, LitSound ); + } + } + + public virtual void PlayUnlitSound() + { + int sound = UnlitSound; + + if ( m_BurntOut && BurntOutSound != 0 ) + sound = BurntOutSound; + + + if ( sound != 0 ) + { + Point3D loc = GetWorldLocation(); + Effects.PlaySound( loc, Map, sound ); + } + } + + public virtual void Ignite() + { + if ( !m_BurntOut ) + { + PlayLitSound(); + + m_Burning = true; + ItemID = LitItemID; + DoTimer( m_Duration ); + } + } + + public virtual void Douse() + { + m_Burning = false; + + if ( m_BurntOut && BurntOutItemID != 0 ) + ItemID = BurntOutItemID; + else + ItemID = UnlitItemID; + + if ( m_BurntOut ) + m_Duration = TimeSpan.Zero; + else if ( m_Duration != TimeSpan.Zero ) + m_Duration = m_End - DateTime.Now; + + if ( m_Timer != null ) + m_Timer.Stop(); + + PlayUnlitSound(); + } + + public virtual void Burn() + { + m_BurntOut = true; + Douse(); + } + + private void DoTimer( TimeSpan delay ) + { + m_Duration = delay; + + if ( m_Timer != null ) + m_Timer.Stop(); + + if ( delay == TimeSpan.Zero ) + return; + + m_End = DateTime.Now + delay; + + m_Timer = new InternalTimer( this, delay ); + m_Timer.Start(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_BurntOut ) + return; + + if ( m_Protected && from.AccessLevel == AccessLevel.Player ) + return; + + if ( !from.InRange( this.GetWorldLocation(), 2 ) ) + return; + + if ( m_Burning ) + { + if ( UnlitItemID != 0 ) + Douse(); + } + else + { + Ignite(); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + writer.Write( m_BurntOut ); + writer.Write( m_Burning ); + writer.Write( m_Duration ); + writer.Write( m_Protected ); + + if ( m_Burning && m_Duration != TimeSpan.Zero ) + writer.WriteDeltaTime( m_End ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_BurntOut = reader.ReadBool(); + m_Burning = reader.ReadBool(); + m_Duration = reader.ReadTimeSpan(); + m_Protected = reader.ReadBool(); + + if ( m_Burning && m_Duration != TimeSpan.Zero ) + DoTimer( reader.ReadDeltaTime() - DateTime.Now ); + + break; + } + } + } + + private class InternalTimer : Timer + { + private BaseLight m_Light; + + public InternalTimer( BaseLight light, TimeSpan delay ) : base( delay ) + { + m_Light = light; + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + if ( m_Light != null && !m_Light.Deleted ) + m_Light.Burn(); + } + } + } +} diff --git a/Scripts/Items/Lights/Bonfire.cs b/Scripts/Items/Lights/Bonfire.cs new file mode 100644 index 0000000..5c11267 --- /dev/null +++ b/Scripts/Items/Lights/Bonfire.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Bonfire : BaseLight + { + public override int LitItemID{ get { return 0x03E4; } } + public override int UnlitItemID{ get { return 0x03E3; } } + + [Constructable] + public Bonfire() : base( 0x03E3 ) + { + Name = "bonefire"; + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle300; + Weight = 20.0; + } + + public Bonfire( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/Brazier.cs b/Scripts/Items/Lights/Brazier.cs new file mode 100644 index 0000000..223bacf --- /dev/null +++ b/Scripts/Items/Lights/Brazier.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Brazier : BaseLight + { + public override int LitItemID{ get { return 0xE31; } } + + [Constructable] + public Brazier() : base( 0xE31 ) + { + Movable = false; + Duration = TimeSpan.Zero; // Never burnt out + Burning = true; + Light = LightType.Circle225; + Weight = 20.0; + } + + public Brazier( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/BrazierTall.cs b/Scripts/Items/Lights/BrazierTall.cs new file mode 100644 index 0000000..8c39312 --- /dev/null +++ b/Scripts/Items/Lights/BrazierTall.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class BrazierTall : BaseLight + { + public override int LitItemID{ get { return 0x19AA; } } + + [Constructable] + public BrazierTall() : base( 0x19AA ) + { + Movable = false; + Duration = TimeSpan.Zero; // Never burnt out + Burning = true; + Light = LightType.Circle300; + Weight = 25.0; + } + + public BrazierTall( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/Candelabra.cs b/Scripts/Items/Lights/Candelabra.cs new file mode 100644 index 0000000..dd2b865 --- /dev/null +++ b/Scripts/Items/Lights/Candelabra.cs @@ -0,0 +1,75 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Candelabra : BaseLight, IShipwreckedItem + { + public override int LitItemID{ get { return 0xB1D; } } + public override int UnlitItemID{ get { return 0xA27; } } + + [Constructable] + public Candelabra() : base( 0xA27 ) + { + Duration = TimeSpan.Zero; // Never burnt out + Burning = false; + Light = LightType.Circle225; + Weight = 3.0; + } + + public Candelabra( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); + + writer.Write( m_IsShipwreckedItem ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_IsShipwreckedItem = reader.ReadBool(); + break; + } + } + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + + if ( m_IsShipwreckedItem ) + list.Add( 1041645 ); // recovered from a shipwreck + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( m_IsShipwreckedItem ) + LabelTo( from, 1041645 ); //recovered from a shipwreck + } + + #region IShipwreckedItem Members + + private bool m_IsShipwreckedItem; + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsShipwreckedItem + { + get { return m_IsShipwreckedItem; } + set { m_IsShipwreckedItem = value; } + } + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/CandelabraStand.cs b/Scripts/Items/Lights/CandelabraStand.cs new file mode 100644 index 0000000..314c210 --- /dev/null +++ b/Scripts/Items/Lights/CandelabraStand.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class CandelabraStand : BaseLight + { + public override int LitItemID{ get { return 0xB26; } } + public override int UnlitItemID{ get { return 0xA29; } } + + [Constructable] + public CandelabraStand() : base( 0xA29 ) + { + Duration = TimeSpan.Zero; // Never burnt out + Burning = false; + Light = LightType.Circle225; + Weight = 20.0; + } + + public CandelabraStand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/Candle.cs b/Scripts/Items/Lights/Candle.cs new file mode 100644 index 0000000..e7b3eef --- /dev/null +++ b/Scripts/Items/Lights/Candle.cs @@ -0,0 +1,40 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Candle : BaseEquipableLight + { + public override int LitItemID{ get { return 0xA0F; } } + public override int UnlitItemID{ get { return 0xA28; } } + + [Constructable] + public Candle() : base( 0xA28 ) + { + if ( Burnout ) + Duration = TimeSpan.FromMinutes( 20 ); + else + Duration = TimeSpan.Zero; + + Burning = false; + Light = LightType.Circle150; + Weight = 1.0; + } + + public Candle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/CandleLarge.cs b/Scripts/Items/Lights/CandleLarge.cs new file mode 100644 index 0000000..ae65539 --- /dev/null +++ b/Scripts/Items/Lights/CandleLarge.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class CandleLarge : BaseLight + { + public override int LitItemID{ get { return 0xB1A; } } + public override int UnlitItemID{ get { return 0xA26; } } + + [Constructable] + public CandleLarge() : base( 0xA26 ) + { + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle150; + Weight = 2.0; + } + + public CandleLarge( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/CandleLong.cs b/Scripts/Items/Lights/CandleLong.cs new file mode 100644 index 0000000..18d0744 --- /dev/null +++ b/Scripts/Items/Lights/CandleLong.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class CandleLong : BaseLight + { + public override int LitItemID{ get { return 0x1430; } } + public override int UnlitItemID{ get { return 0x1433; } } + + [Constructable] + public CandleLong() : base( 0x1433 ) + { + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle150; + Weight = 1.0; + } + + public CandleLong( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/CandleMedium.cs b/Scripts/Items/Lights/CandleMedium.cs new file mode 100644 index 0000000..59fe68f --- /dev/null +++ b/Scripts/Items/Lights/CandleMedium.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class CandleMedium : BaseLight + { + public override int LitItemID{ get { return 0x1434; } } + public override int UnlitItemID{ get { return 0x1437; } } + + [Constructable] + public CandleMedium() : base( 0x1437 ) + { + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle150; + Weight = 1.0; + } + + public CandleMedium( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/CandleShort.cs b/Scripts/Items/Lights/CandleShort.cs new file mode 100644 index 0000000..bbce962 --- /dev/null +++ b/Scripts/Items/Lights/CandleShort.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class CandleShort : BaseLight + { + public override int LitItemID{ get { return 0x142C; } } + public override int UnlitItemID{ get { return 0x142F; } } + + [Constructable] + public CandleShort() : base( 0x142F ) + { + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle150; + Weight = 1.0; + } + + public CandleShort( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/CandleSkull.cs b/Scripts/Items/Lights/CandleSkull.cs new file mode 100644 index 0000000..d593777 --- /dev/null +++ b/Scripts/Items/Lights/CandleSkull.cs @@ -0,0 +1,55 @@ +using System; +using Server; + +namespace Server.Items +{ + public class CandleSkull : BaseLight + { + public override int LitItemID + { + get + { + if ( ItemID == 0x1583 || ItemID == 0x1854 ) + return 0x1854; + + return 0x1858; + } + } + + public override int UnlitItemID + { + get + { + if ( ItemID == 0x1853 || ItemID == 0x1584 ) + return 0x1853; + + return 0x1857; + } + } + + [Constructable] + public CandleSkull() : base( 0x1853 ) + { + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle150; + Weight = 5.0; + } + + public CandleSkull( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/DarkSource.cs b/Scripts/Items/Lights/DarkSource.cs new file mode 100644 index 0000000..838d27d --- /dev/null +++ b/Scripts/Items/Lights/DarkSource.cs @@ -0,0 +1,30 @@ +using System; + +namespace Server.Items +{ + public class DarkSource : Item + { + [Constructable] + public DarkSource() : base( 0x1646 ) + { + Layer = Layer.TwoHanded; + Movable = false; + } + + public DarkSource( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/HangingLantern.cs b/Scripts/Items/Lights/HangingLantern.cs new file mode 100644 index 0000000..b48c4ac --- /dev/null +++ b/Scripts/Items/Lights/HangingLantern.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class HangingLantern : BaseLight + { + public override int LitItemID{ get { return 0xA1A; } } + public override int UnlitItemID{ get { return 0xA1D; } } + + [Constructable] + public HangingLantern() : base( 0xA1D ) + { + Movable = false; + Duration = TimeSpan.Zero; // Never burnt out + Burning = false; + Light = LightType.Circle300; + Weight = 40.0; + } + + public HangingLantern( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/HeatingStand.cs b/Scripts/Items/Lights/HeatingStand.cs new file mode 100644 index 0000000..6466fb8 --- /dev/null +++ b/Scripts/Items/Lights/HeatingStand.cs @@ -0,0 +1,60 @@ +using System; +using Server; + +namespace Server.Items +{ + public class HeatingStand : BaseLight + { + public override int LitItemID{ get { return 0x184A; } } + public override int UnlitItemID{ get { return 0x1849; } } + + [Constructable] + public HeatingStand() : base( 0x1849 ) + { + if ( Burnout ) + Duration = TimeSpan.FromMinutes( 25 ); + else + Duration = TimeSpan.Zero; + + Burning = false; + Light = LightType.Empty; + Weight = 1.0; + } + + public override void Ignite() + { + base.Ignite(); + + if ( ItemID == LitItemID ) + Light = LightType.Circle150; + else if ( ItemID == UnlitItemID ) + Light = LightType.Empty; + } + + public override void Douse() + { + base.Douse(); + + if ( ItemID == LitItemID ) + Light = LightType.Circle150; + else if ( ItemID == UnlitItemID ) + Light = LightType.Empty; + } + + public HeatingStand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/IronBrazier.cs b/Scripts/Items/Lights/IronBrazier.cs new file mode 100644 index 0000000..af61ea5 --- /dev/null +++ b/Scripts/Items/Lights/IronBrazier.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class IronBrazier : BaseLight + { + public override int LitItemID{ get { return 0xE31; } } + public override int UnlitItemID{ get { return 0x1F20; } } + + [Constructable] + public IronBrazier() : base( 0x1F20 ) + { + Name = "brazier"; + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle225; + Weight = 3.0; + } + + public IronBrazier( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/IronBrazierShort.cs b/Scripts/Items/Lights/IronBrazierShort.cs new file mode 100644 index 0000000..0e0874b --- /dev/null +++ b/Scripts/Items/Lights/IronBrazierShort.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class IronBrazierShort : BaseLight + { + public override int LitItemID{ get { return 0x19BB; } } + public override int UnlitItemID{ get { return 0x1F1F; } } + + [Constructable] + public IronBrazierShort() : base( 0x1F1F ) + { + Name = "small brazier"; + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle150; + Weight = 2.0; + } + + public IronBrazierShort( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/IronBrazierStand.cs b/Scripts/Items/Lights/IronBrazierStand.cs new file mode 100644 index 0000000..db87a87 --- /dev/null +++ b/Scripts/Items/Lights/IronBrazierStand.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class IronBrazierStand : BaseLight + { + public override int LitItemID{ get { return 0x19AA; } } + public override int UnlitItemID{ get { return 0x1F21; } } + + [Constructable] + public IronBrazierStand() : base( 0x1F21 ) + { + Name = "brazier stand"; + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle225; + Weight = 20.0; + } + + public IronBrazierStand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/IronCandelabra.cs b/Scripts/Items/Lights/IronCandelabra.cs new file mode 100644 index 0000000..dd353a1 --- /dev/null +++ b/Scripts/Items/Lights/IronCandelabra.cs @@ -0,0 +1,38 @@ +using System; +using Server; + +namespace Server.Items +{ + [Furniture] + public class IronCandelabra : BaseLight + { + public override int LitItemID{ get { return 0x0702; } } + public override int UnlitItemID{ get { return 0x0701; } } + + [Constructable] + public IronCandelabra() : base( 0x0701 ) + { + Name = "candelbra"; + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle225; + Weight = 3.0; + } + + public IronCandelabra( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/IronCandelabraStand.cs b/Scripts/Items/Lights/IronCandelabraStand.cs new file mode 100644 index 0000000..bc5e669 --- /dev/null +++ b/Scripts/Items/Lights/IronCandelabraStand.cs @@ -0,0 +1,38 @@ +using System; +using Server; + +namespace Server.Items +{ + [Furniture] + public class IronCandelabraStand : BaseLight + { + public override int LitItemID{ get { return 0x06F8; } } + public override int UnlitItemID{ get { return 0x06F7; } } + + [Constructable] + public IronCandelabraStand() : base( 0x06F7 ) + { + Name = "candelbra stand"; + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle225; + Weight = 20.0; + } + + public IronCandelabraStand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/IronCandle.cs b/Scripts/Items/Lights/IronCandle.cs new file mode 100644 index 0000000..2613812 --- /dev/null +++ b/Scripts/Items/Lights/IronCandle.cs @@ -0,0 +1,38 @@ +using System; +using Server; + +namespace Server.Items +{ + [Furniture] + public class IronCandle : BaseLight + { + public override int LitItemID{ get { return 0x0706; } } + public override int UnlitItemID{ get { return 0x0705; } } + + [Constructable] + public IronCandle() : base( 0x0705 ) + { + Name = "candle"; + Duration = TimeSpan.Zero; + Burning = false; + Light = LightType.Circle150; + Weight = 2.0; + } + + public IronCandle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/LampPost1.cs b/Scripts/Items/Lights/LampPost1.cs new file mode 100644 index 0000000..55924f6 --- /dev/null +++ b/Scripts/Items/Lights/LampPost1.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LampPost1 : BaseLight + { + public override int LitItemID{ get { return 0xB20; } } + public override int UnlitItemID{ get { return 0xB21; } } + + [Constructable] + public LampPost1() : base( 0xB21 ) + { + Movable = false; + Duration = TimeSpan.Zero; // Never burnt out + Burning = false; + Light = LightType.Circle300; + Weight = 40.0; + } + + public LampPost1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/LampPost2.cs b/Scripts/Items/Lights/LampPost2.cs new file mode 100644 index 0000000..2fa4491 --- /dev/null +++ b/Scripts/Items/Lights/LampPost2.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LampPost2 : BaseLight + { + public override int LitItemID{ get { return 0xB22; } } + public override int UnlitItemID{ get { return 0xB23; } } + + [Constructable] + public LampPost2() : base( 0xB23 ) + { + Movable = false; + Duration = TimeSpan.Zero; // Never burnt out + Burning = false; + Light = LightType.Circle300; + Weight = 40.0; + } + + public LampPost2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/LampPost3.cs b/Scripts/Items/Lights/LampPost3.cs new file mode 100644 index 0000000..00c38df --- /dev/null +++ b/Scripts/Items/Lights/LampPost3.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LampPost3 : BaseLight + { + public override int LitItemID{ get { return 0xB24; } } + public override int UnlitItemID{ get { return 0xB25; } } + + [Constructable] + public LampPost3() : base( 0xb25 ) + { + Movable = false; + Duration = TimeSpan.Zero; // Never burnt out + Burning = false; + Light = LightType.Circle300; + Weight = 40.0; + } + + public LampPost3( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/Lantern.cs b/Scripts/Items/Lights/Lantern.cs new file mode 100644 index 0000000..5c26615 --- /dev/null +++ b/Scripts/Items/Lights/Lantern.cs @@ -0,0 +1,86 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Lantern : BaseEquipableLight + { + public override int LitItemID + { + get + { + if ( ItemID == 0xA15 || ItemID == 0xA17 ) + return ItemID; + + return 0xA22; + } + } + + public override int UnlitItemID + { + get + { + if ( ItemID == 0xA18 ) + return ItemID; + + return 0xA25; + } + } + + [Constructable] + public Lantern() : base( 0xA25 ) + { + if ( Burnout ) + Duration = TimeSpan.FromMinutes( 20 ); + else + Duration = TimeSpan.Zero; + + Burning = false; + Light = LightType.Circle300; + Weight = 2.0; + } + + public Lantern( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class LanternOfSouls : Lantern + { + public override int LabelNumber{ get{ return 1061618; } } // Lantern of Souls + + [Constructable] + public LanternOfSouls() + { + Hue = 0x482; + } + + public LanternOfSouls( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/LightSource.cs b/Scripts/Items/Lights/LightSource.cs new file mode 100644 index 0000000..36f8e84 --- /dev/null +++ b/Scripts/Items/Lights/LightSource.cs @@ -0,0 +1,55 @@ +using System; + +namespace Server.Items +{ + public class LightSource : Item + { + [Constructable] + public LightSource() : base( 0x1647 ) + { + Layer = Layer.TwoHanded; + Movable = false; + } + + public LightSource( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class LighterSource : Item + { + [Constructable] + public LighterSource() : base( 0x0E84 ) + { + Layer = Layer.TwoHanded; + Movable = false; + } + + public LighterSource( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/Torch.cs b/Scripts/Items/Lights/Torch.cs new file mode 100644 index 0000000..6fb3e4b --- /dev/null +++ b/Scripts/Items/Lights/Torch.cs @@ -0,0 +1,46 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Torch : BaseEquipableLight + { + public override int LitItemID{ get { return 0xA12; } } + public override int UnlitItemID{ get { return 0xF6B; } } + + public override int LitSound{ get { return 0x54; } } + public override int UnlitSound{ get { return 0x4BB; } } + + [Constructable] + public Torch() : base( 0xF6B ) + { + if ( Burnout ) + Duration = TimeSpan.FromMinutes( 30 ); + else + Duration = TimeSpan.Zero; + + Burning = false; + Light = LightType.Circle300; + Weight = 1.0; + } + + public Torch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/WallSconce.cs b/Scripts/Items/Lights/WallSconce.cs new file mode 100644 index 0000000..8edf3b7 --- /dev/null +++ b/Scripts/Items/Lights/WallSconce.cs @@ -0,0 +1,74 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable] + public class WallSconce : BaseLight + { + public override int LitItemID + { + get + { + if ( ItemID == 0x9FB ) + return 0x9FD; + else + return 0xA02; + } + } + + public override int UnlitItemID + { + get + { + if ( ItemID == 0x9FD ) + return 0x9FB; + else + return 0xA00; + } + } + + [Constructable] + public WallSconce() : base( 0x9FB ) + { + Movable = false; + Duration = TimeSpan.Zero; // Never burnt out + Burning = false; + Light = LightType.WestBig; + Weight = 3.0; + } + + public WallSconce( Serial serial ) : base( serial ) + { + } + + public void Flip() + { + if ( Light == LightType.WestBig ) + Light = LightType.NorthBig; + else if ( Light == LightType.NorthBig ) + Light = LightType.WestBig; + + switch ( ItemID ) + { + case 0x9FB: ItemID = 0xA00; break; + case 0x9FD: ItemID = 0xA02; break; + + case 0xA00: ItemID = 0x9FB; break; + case 0xA02: ItemID = 0x9FD; break; + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Lights/WallTorch.cs b/Scripts/Items/Lights/WallTorch.cs new file mode 100644 index 0000000..ba4c330 --- /dev/null +++ b/Scripts/Items/Lights/WallTorch.cs @@ -0,0 +1,74 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable] + public class WallTorch : BaseLight + { + public override int LitItemID + { + get + { + if ( ItemID == 0xA05 ) + return 0xA07; + else + return 0xA0C; + } + } + + public override int UnlitItemID + { + get + { + if ( ItemID == 0xA07 ) + return 0xA05; + else + return 0xA0A; + } + } + + [Constructable] + public WallTorch() : base( 0xA05 ) + { + Movable = false; + Duration = TimeSpan.Zero; // Never burnt out + Burning = false; + Light = LightType.WestBig; + Weight = 3.0; + } + + public WallTorch( Serial serial ) : base( serial ) + { + } + + public void Flip() + { + if ( Light == LightType.WestBig ) + Light = LightType.NorthBig; + else if ( Light == LightType.NorthBig ) + Light = LightType.WestBig; + + switch ( ItemID ) + { + case 0xA05: ItemID = 0xA0A; break; + case 0xA07: ItemID = 0xA0C; break; + + case 0xA0A: ItemID = 0xA05; break; + case 0xA0C: ItemID = 0xA07; break; + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/BlankMap.cs b/Scripts/Items/Maps/BlankMap.cs new file mode 100644 index 0000000..e0dbb79 --- /dev/null +++ b/Scripts/Items/Maps/BlankMap.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class BlankMap : MapItem + { + [Constructable] + public BlankMap() + { + } + + public override void OnDoubleClick( Mobile from ) + { + SendLocalizedMessageTo( from, 500208 ); // It appears to be blank. + } + + public BlankMap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/CityMap.cs b/Scripts/Items/Maps/CityMap.cs new file mode 100644 index 0000000..52517bc --- /dev/null +++ b/Scripts/Items/Maps/CityMap.cs @@ -0,0 +1,53 @@ +using System; +using Server; +using Server.Misc; + +namespace Server.Items +{ + public class CityMap : MapItem + { + [Constructable] + public CityMap() + { + SetDisplay( 0, 0, 5119, 4095, 400, 400 ); + } + + public override void CraftInit( Mobile from ) + { + double skillValue = Server.Misc.SkillCheck.TradeSkill( from, Trades.Cartography, false ); + int dist = 64 + (int)(skillValue * 4); + + if ( dist < 200 ) + dist = 200; + + int size = 32 + (int)(skillValue * 2); + + if ( size < 200 ) + size = 200; + else if ( size > 400 ) + size = 400; + + SetDisplay( from.X - dist, from.Y - dist, from.X + dist, from.Y + dist, size, size ); + } + + public override int LabelNumber{ get{ return 1015231; } } // city map + + public CityMap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/IndecipherableMap.cs b/Scripts/Items/Maps/IndecipherableMap.cs new file mode 100644 index 0000000..b3675ea --- /dev/null +++ b/Scripts/Items/Maps/IndecipherableMap.cs @@ -0,0 +1,42 @@ +using System; +using Server; + +namespace Server.Items +{ + public class IndecipherableMap : MapItem + { + public override int LabelNumber{ get{ return 1070799; } } // indecipherable map + + [Constructable] + public IndecipherableMap() + { + if ( Utility.RandomDouble() < 0.2 ) + Hue = 0x965; + else + Hue = 0x961; + } + + public IndecipherableMap( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + from.SendLocalizedMessage( 1070801 ); // You cannot decipher this ruined map. + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/LocalMap.cs b/Scripts/Items/Maps/LocalMap.cs new file mode 100644 index 0000000..9491966 --- /dev/null +++ b/Scripts/Items/Maps/LocalMap.cs @@ -0,0 +1,43 @@ +using System; +using Server; +using Server.Misc; + +namespace Server.Items +{ + public class LocalMap : MapItem + { + [Constructable] + public LocalMap() + { + SetDisplay( 0, 0, 5119, 4095, 400, 400 ); + } + + public override void CraftInit( Mobile from ) + { + double skillValue = Server.Misc.SkillCheck.TradeSkill( from, Trades.Cartography, false ); + int dist = 64 + (int)(skillValue * 2); + + SetDisplay( from.X - dist, from.Y - dist, from.X + dist, from.Y + dist, 200, 200 ); + } + + public override int LabelNumber{ get{ return 1015230; } } // local map + + public LocalMap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/MapItem.cs b/Scripts/Items/Maps/MapItem.cs new file mode 100644 index 0000000..7210837 --- /dev/null +++ b/Scripts/Items/Maps/MapItem.cs @@ -0,0 +1,385 @@ +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Network; +using Server.Engines.Craft; + +namespace Server.Items +{ + [Flipable( 0x14EB, 0x14EC )] + public class MapItem : Item, ICraftable + { + private Rectangle2D m_Bounds; + + private int m_Width, m_Height; + + private bool m_Protected; + private bool m_Editable; + + private List m_Pins = new List(); + + private const int MaxUserPins = 50; + + [CommandProperty( AccessLevel.GameMaster )] + public bool Protected + { + get { return m_Protected; } + set { m_Protected = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Rectangle2D Bounds + { + get { return m_Bounds; } + set { m_Bounds = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Width + { + get { return m_Width; } + set { m_Width = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Height + { + get { return m_Height; } + set { m_Height = value; } + } + + public List Pins + { + get { return m_Pins; } + } + + [Constructable] + public MapItem() : base( 0x14EC ) + { + Weight = 1.0; + + m_Width = 200; + m_Height = 200; + } + + public virtual void CraftInit( Mobile from ) + { + } + + public void SetDisplay( int x1, int y1, int x2, int y2, int w, int h ) + { + Width = w; + Height = h; + + if ( x1 < 0 ) + x1 = 0; + + if ( y1 < 0 ) + y1 = 0; + + if ( x2 >= 5120 ) + x2 = 5119; + + if ( y2 >= 4096 ) + y2 = 4095; + + Bounds = new Rectangle2D( x1, y1, x2-x1, y2-y1 ); + } + + public MapItem( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.InRange( GetWorldLocation(), 2 ) ) + DisplayTo( from ); + else + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + + public virtual void DisplayTo( Mobile from ) + { + from.Send( new MapDetails( this ) ); + from.Send( new MapDisplay( this ) ); + + for ( int i = 0; i < m_Pins.Count; ++i ) + from.Send( new MapAddPin( this, m_Pins[i] ) ); + + from.Send( new MapSetEditable( this, ValidateEdit( from ) ) ); + } + + public virtual void OnAddPin( Mobile from, int x, int y ) + { + if ( !ValidateEdit( from ) ) + return; + else if ( m_Pins.Count >= MaxUserPins ) + return; + + Validate( ref x, ref y ); + AddPin( x, y ); + } + + public virtual void OnRemovePin( Mobile from, int number ) + { + if ( !ValidateEdit( from ) ) + return; + + RemovePin( number ); + } + + public virtual void OnChangePin( Mobile from, int number, int x, int y ) + { + if ( !ValidateEdit( from ) ) + return; + + Validate( ref x, ref y ); + ChangePin( number, x, y ); + } + + public virtual void OnInsertPin( Mobile from, int number, int x, int y ) + { + if ( !ValidateEdit( from ) ) + return; + else if ( m_Pins.Count >= MaxUserPins ) + return; + + Validate( ref x, ref y ); + InsertPin( number, x, y ); + } + + public virtual void OnClearPins( Mobile from ) + { + if ( !ValidateEdit( from ) ) + return; + + ClearPins(); + } + + public virtual void OnToggleEditable( Mobile from ) + { + if ( Validate( from ) ) + m_Editable = !m_Editable; + + from.Send( new MapSetEditable( this, Validate( from ) && m_Editable ) ); + } + + public virtual void Validate( ref int x, ref int y ) + { + if ( x < 0 ) + x = 0; + else if ( x >= m_Width ) + x = m_Width - 1; + + if ( y < 0 ) + y = 0; + else if ( y >= m_Height ) + y = m_Height - 1; + } + + public virtual bool ValidateEdit( Mobile from ) + { + return m_Editable && Validate( from ); + } + + public virtual bool Validate( Mobile from ) + { + if ( !from.CanSee( this ) || from.Map != this.Map || !from.Alive || InSecureTrade ) + return false; + else if ( from.AccessLevel >= AccessLevel.GameMaster ) + return true; + else if ( !Movable || m_Protected || !from.InRange( GetWorldLocation(), 2 ) ) + return false; + + object root = RootParent; + + if ( root is Mobile && root != from ) + return false; + + return true; + } + + public void ConvertToWorld( int x, int y, out int worldX, out int worldY ) + { + worldX = ( ( m_Bounds.Width * x ) / Width ) + m_Bounds.X; + worldY = ( ( m_Bounds.Height * y ) / Height ) + m_Bounds.Y; + } + + public void ConvertToMap( int x, int y, out int mapX, out int mapY ) + { + mapX = ( ( x - m_Bounds.X ) * Width ) / m_Bounds.Width; + mapY = ( ( y - m_Bounds.Y ) * Width ) / m_Bounds.Height; + } + + public virtual void AddWorldPin( int x, int y ) + { + int mapX, mapY; + ConvertToMap( x, y, out mapX, out mapY ); + + AddPin( mapX, mapY ); + } + + public virtual void AddPin( int x, int y ) + { + m_Pins.Add( new Point2D( x, y ) ); + } + + public virtual void RemovePin( int index ) + { + if ( index > 0 && index < m_Pins.Count ) + m_Pins.RemoveAt( index ); + } + + public virtual void InsertPin( int index, int x, int y ) + { + if ( index < 0 || index >= m_Pins.Count ) + m_Pins.Add( new Point2D( x, y ) ); + else + m_Pins.Insert( index, new Point2D( x, y ) ); + } + + public virtual void ChangePin( int index, int x, int y ) + { + if ( index >= 0 && index < m_Pins.Count ) + m_Pins[index] = new Point2D( x, y ); + } + + public virtual void ClearPins() + { + m_Pins.Clear(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( m_Bounds ); + + writer.Write( m_Width ); + writer.Write( m_Height ); + + writer.Write( m_Protected ); + + writer.Write( m_Pins.Count ); + for ( int i = 0; i < m_Pins.Count; ++i ) + writer.Write( m_Pins[i] ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Bounds = reader.ReadRect2D(); + + m_Width = reader.ReadInt(); + m_Height = reader.ReadInt(); + + m_Protected = reader.ReadBool(); + + int count = reader.ReadInt(); + for ( int i = 0; i < count; i++ ) + m_Pins.Add( reader.ReadPoint2D() ); + + break; + } + } + } + + public static void Initialize() + { + PacketHandlers.Register( 0x56, 11, true, new OnPacketReceive( OnMapCommand ) ); + } + + private static void OnMapCommand( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + MapItem map = World.FindItem( pvSrc.ReadInt32() ) as MapItem; + + if ( map == null ) + return; + + int command = pvSrc.ReadByte(); + int number = pvSrc.ReadByte(); + + int x = pvSrc.ReadInt16(); + int y = pvSrc.ReadInt16(); + + switch ( command ) + { + case 1: map.OnAddPin( from, x, y ); break; + case 2: map.OnInsertPin( from, number, x, y ); break; + case 3: map.OnChangePin( from, number, x, y ); break; + case 4: map.OnRemovePin( from, number ); break; + case 5: map.OnClearPins( from ); break; + case 6: map.OnToggleEditable( from ); break; + } + } + + private sealed class MapDetails : Packet + { + public MapDetails( MapItem map ) : base ( 0x90, 19 ) + { + m_Stream.Write( (int) map.Serial ); + m_Stream.Write( (short) 0x139D ); + m_Stream.Write( (short) map.Bounds.Start.X ); + m_Stream.Write( (short) map.Bounds.Start.Y ); + m_Stream.Write( (short) map.Bounds.End.X ); + m_Stream.Write( (short) map.Bounds.End.Y ); + m_Stream.Write( (short) map.Width ); + m_Stream.Write( (short) map.Height ); + } + } + + private abstract class MapCommand : Packet + { + public MapCommand( MapItem map, int command, int number, int x, int y ) : base ( 0x56, 11 ) + { + m_Stream.Write( (int) map.Serial ); + m_Stream.Write( (byte) command ); + m_Stream.Write( (byte) number ); + m_Stream.Write( (short) x ); + m_Stream.Write( (short) y ); + } + } + + private sealed class MapDisplay : MapCommand + { + public MapDisplay( MapItem map ) : base( map, 5, 0, 0, 0 ) + { + } + } + + private sealed class MapAddPin : MapCommand + { + public MapAddPin( MapItem map, Point2D point ) : base( map, 1, 0, point.X, point.Y ) + { + } + } + + private sealed class MapSetEditable : MapCommand + { + public MapSetEditable( MapItem map, bool editable ) : base( map, 7, editable ? 1 : 0, 0, 0 ) + { + } + } + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + CraftInit( from ); + return 1; + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/PresetMap.cs b/Scripts/Items/Maps/PresetMap.cs new file mode 100644 index 0000000..21547a0 --- /dev/null +++ b/Scripts/Items/Maps/PresetMap.cs @@ -0,0 +1,151 @@ +using System; +using Server; + +namespace Server.Items +{ + public class PresetMap : MapItem + { + private int m_LabelNumber; + + [Constructable] + public PresetMap( PresetMapType type ) + { + int v = (int)type; + + if ( v >= 0 && v < PresetMapEntry.Table.Length ) + InitEntry( PresetMapEntry.Table[v] ); + } + + public PresetMap( PresetMapEntry entry ) + { + InitEntry( entry ); + } + + public void InitEntry( PresetMapEntry entry ) + { + m_LabelNumber = entry.Name; + + Width = entry.Width; + Height = entry.Height; + + Bounds = entry.Bounds; + } + + public override int LabelNumber{ get{ return (m_LabelNumber == 0 ? base.LabelNumber : m_LabelNumber); } } + + public PresetMap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( (int) m_LabelNumber ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_LabelNumber = reader.ReadInt(); + break; + } + } + } + } + + public class PresetMapEntry + { + private int m_Name; + private int m_Width, m_Height; + private Rectangle2D m_Bounds; + + public int Name{ get{ return m_Name; } } + public int Width{ get{ return m_Width; } } + public int Height{ get{ return m_Height; } } + public Rectangle2D Bounds{ get{ return m_Bounds; } } + + public PresetMapEntry( int name, int width, int height, int xLeft, int yTop, int xRight, int yBottom ) + { + m_Name = name; + m_Width = width; + m_Height = height; + m_Bounds = new Rectangle2D( xLeft, yTop, xRight - xLeft, yBottom - yTop ); + } + + private static PresetMapEntry[] m_Table = new PresetMapEntry[] + { + new PresetMapEntry( 1041189, 200, 200, 1092, 1396, 1736, 1924 ), // map of Britain + new PresetMapEntry( 1041203, 200, 200, 0256, 1792, 1736, 2560 ), // map of Britain to Skara Brae + new PresetMapEntry( 1041192, 200, 200, 1024, 1280, 2304, 3072 ), // map of Britain to Trinsic + new PresetMapEntry( 1041183, 200, 200, 2500, 1900, 3000, 2400 ), // map of Buccaneer's Den + new PresetMapEntry( 1041198, 200, 200, 2560, 1792, 3840, 2560 ), // map of Buccaneer's Den to Magincia + new PresetMapEntry( 1041194, 200, 200, 2560, 1792, 3840, 3072 ), // map of Buccaneer's Den to Ocllo + new PresetMapEntry( 1041181, 200, 200, 1088, 3572, 1528, 4056 ), // map of Jhelom + new PresetMapEntry( 1041186, 200, 200, 3530, 2022, 3818, 2298 ), // map of Magincia + new PresetMapEntry( 1041199, 200, 200, 3328, 1792, 3840, 2304 ), // map of Magincia to Ocllo + new PresetMapEntry( 1041182, 200, 200, 2360, 0356, 2706, 0702 ), // map of Minoc + new PresetMapEntry( 1041190, 200, 200, 0000, 0256, 2304, 3072 ), // map of Minoc to Yew + new PresetMapEntry( 1041191, 200, 200, 2467, 0572, 2878, 0746 ), // map of Minoc to Vesper + new PresetMapEntry( 1041188, 200, 200, 4156, 0808, 4732, 1528 ), // map of Moonglow + new PresetMapEntry( 1041201, 200, 200, 3328, 0768, 4864, 1536 ), // map of Moonglow to Nujelm + new PresetMapEntry( 1041185, 200, 200, 3446, 1030, 3832, 1424 ), // map of Nujelm + new PresetMapEntry( 1041197, 200, 200, 3328, 1024, 3840, 2304 ), // map of Nujelm to Magincia + new PresetMapEntry( 1041187, 200, 200, 3582, 2456, 3770, 2742 ), // map of Ocllo + new PresetMapEntry( 1041184, 200, 200, 2714, 3329, 3100, 3639 ), // map of Serpent's Hold + new PresetMapEntry( 1041200, 200, 200, 2560, 2560, 3840, 3840 ), // map of Serpent's Hold to Ocllo + new PresetMapEntry( 1041180, 200, 200, 0524, 2064, 0960, 2452 ), // map of Skara Brae + new PresetMapEntry( 1041204, 200, 200, 0000, 0000, 5199, 4095 ), // map of The World + new PresetMapEntry( 1041177, 200, 200, 1792, 2630, 2118, 2952 ), // map of Trinsic + new PresetMapEntry( 1041193, 200, 200, 1792, 1792, 3072, 3072 ), // map of Trinsic to Buccaneer's Den + new PresetMapEntry( 1041195, 200, 200, 0256, 1792, 2304, 4095 ), // map of Trinsic to Jhelom + new PresetMapEntry( 1041178, 200, 200, 2636, 0592, 3064, 1012 ), // map of Vesper + new PresetMapEntry( 1041196, 200, 200, 2636, 0592, 3840, 1536 ), // map of Vesper to Nujelm + new PresetMapEntry( 1041179, 200, 200, 0236, 0741, 0766, 1269 ), // map of Yew + new PresetMapEntry( 1041202, 200, 200, 0000, 0512, 1792, 2048 ) // map of Yew to Britain + }; + + public static PresetMapEntry[] Table{ get{ return m_Table; } } + } + + public enum PresetMapType + { + Britain, + BritainToSkaraBrae, + BritainToTrinsic, + BucsDen, + BucsDenToMagincia, + BucsDenToOcllo, + Jhelom, + Magincia, + MaginciaToOcllo, + Minoc, + MinocToYew, + MinocToVesper, + Moonglow, + MoonglowToNujelm, + Nujelm, + NujelmToMagincia, + Ocllo, + SerpentsHold, + SerpentsHoldToOcllo, + SkaraBrae, + TheWorld, + Trinsic, + TrinsicToBucsDen, + TrinsicToJhelom, + Vesper, + VesperToNujelm, + Yew, + YewToBritain + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/SeaChart.cs b/Scripts/Items/Maps/SeaChart.cs new file mode 100644 index 0000000..e7fb5db --- /dev/null +++ b/Scripts/Items/Maps/SeaChart.cs @@ -0,0 +1,53 @@ +using System; +using Server; +using Server.Misc; + +namespace Server.Items +{ + public class SeaChart : MapItem + { + [Constructable] + public SeaChart() + { + SetDisplay( 0, 0, 5119, 4095, 400, 400 ); + } + + public override void CraftInit( Mobile from ) + { + double skillValue = Server.Misc.SkillCheck.TradeSkill( from, Trades.Cartography, false ); + int dist = 64 + (int)(skillValue * 10); + + if ( dist < 200 ) + dist = 200; + + int size = 24 + (int)(skillValue * 3.3); + + if ( size < 200 ) + size = 200; + else if ( size > 400 ) + size = 400; + + SetDisplay( from.X - dist, from.Y - dist, from.X + dist, from.Y + dist, size, size ); + } + + public override int LabelNumber{ get{ return 1015232; } } // sea chart + + public SeaChart( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/TreasureMap.cs b/Scripts/Items/Maps/TreasureMap.cs new file mode 100644 index 0000000..18217ef --- /dev/null +++ b/Scripts/Items/Maps/TreasureMap.cs @@ -0,0 +1,862 @@ +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Misc; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; +using Server.ContextMenus; + +namespace Server.Items +{ + public class TreasureMap : MapItem + { + private int m_Level; + private bool m_Completed; + private Mobile m_CompletedBy; + private Mobile m_Decoder; + private Map m_Map; + private Point2D m_Location; + + [CommandProperty( AccessLevel.GameMaster )] + public int Level{ get{ return m_Level; } set{ m_Level = value; InvalidateProperties(); } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Completed{ get{ return m_Completed; } set{ m_Completed = value; InvalidateProperties(); } } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile CompletedBy{ get{ return m_CompletedBy; } set{ m_CompletedBy = value; InvalidateProperties(); } } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Decoder{ get{ return m_Decoder; } set{ m_Decoder = value; InvalidateProperties(); } } + + [CommandProperty( AccessLevel.GameMaster )] + public Map ChestMap{ get{ return m_Map; } set{ m_Map = value; InvalidateProperties(); } } + + [CommandProperty( AccessLevel.GameMaster )] + public Point2D ChestLocation{ get{ return m_Location; } set{ m_Location = value; } } + + private static Point2D[] m_Locations; + + private static Type[][] m_SpawnTypes = new Type[][] + { + new Type[]{ typeof( HeadlessOne ), typeof( Skeleton ) }, + new Type[]{ typeof( Mongbat ), typeof( Ratman ), typeof( HeadlessOne ), typeof( Skeleton ), typeof( Zombie ) }, + new Type[]{ typeof( OrcishMage ), typeof( Gargoyle ), typeof( Gazer ), typeof( HellHound ), typeof( EarthElemental ) }, + new Type[]{ typeof( Lich ), typeof( OgreLord ), typeof( DreadSpider ), typeof( AirElemental ), typeof( FireElemental ) }, + new Type[]{ typeof( DreadSpider ), typeof( LichLord ), typeof( Daemon ), typeof( ElderGazer ), typeof( OgreLord ) }, + new Type[]{ typeof( LichLord ), typeof( Daemon ), typeof( ElderGazer ), typeof( PoisonElemental ), typeof( BloodElemental ) }, + new Type[]{ typeof( AncientWyrm ), typeof( Balron ), typeof( BloodElemental ), typeof( PoisonElemental ), typeof( Titan ) } + }; + + public const double LootChance = 0.01; // 1% chance to appear as loot + + public static Point2D GetRandomLocation() + { + if ( m_Locations == null ) + LoadLocations(); + + if ( m_Locations.Length > 0 ) + return m_Locations[Utility.Random( m_Locations.Length )]; + + return Point2D.Zero; + } + + private static void LoadLocations() + { + string filePath = Path.Combine( Core.BaseDirectory, "Data/Config/treasure.cfg" ); + + List list = new List(); + + if ( File.Exists( filePath ) ) + { + using ( StreamReader ip = new StreamReader( filePath ) ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + try + { + string[] split = line.Split( ' ' ); + + int x = Convert.ToInt32( split[0] ), y = Convert.ToInt32( split[1] ); + + Point2D loc = new Point2D( x, y ); + list.Add( loc ); + } + catch + { + } + } + } + } + + m_Locations = list.ToArray(); + } + + public static BaseCreature Spawn( int level, Point3D p, bool guardian ) + { + if ( level >= 0 && level < m_SpawnTypes.Length ) + { + BaseCreature bc; + + try + { + bc = (BaseCreature)Activator.CreateInstance( m_SpawnTypes[level][Utility.Random( m_SpawnTypes[level].Length )] ); + } + catch + { + return null; + } + + bc.Home = p; + bc.RangeHome = 5; + + if ( guardian && level == 0 ) + { + bc.Name = "a chest guardian"; + bc.Hue = 0x835; + } + + return bc; + } + + return null; + } + + public static BaseCreature Spawn( int level, Point3D p, Map map, Mobile target, bool guardian ) + { + if ( map == null ) + return null; + + BaseCreature c = Spawn( level, p, guardian ); + + if ( c != null ) + { + bool spawned = false; + + for ( int i = 0; !spawned && i < 10; ++i ) + { + int x = p.X - 3 + Utility.Random( 7 ); + int y = p.Y - 3 + Utility.Random( 7 ); + + if ( map.CanSpawnMobile( x, y, p.Z ) ) + { + c.MoveToWorld( new Point3D( x, y, p.Z ), map ); + spawned = true; + } + else + { + int z = map.GetAverageZ( x, y ); + + if ( map.CanSpawnMobile( x, y, z ) ) + { + c.MoveToWorld( new Point3D( x, y, z ), map ); + spawned = true; + } + } + } + + if ( !spawned ) + { + c.Delete(); + return null; + } + + if ( target != null ) + c.Combatant = target; + + return c; + } + + return null; + } + + [Constructable] + public TreasureMap( int level, Map map ) + { + m_Level = level; + m_Map = map; + m_Location = GetRandomLocation(); + + Width = 300; + Height = 300; + + int width = 600; + int height = 600; + + int x1 = m_Location.X - Utility.RandomMinMax( width / 4, (width / 4) * 3 ); + int y1 = m_Location.Y - Utility.RandomMinMax( height / 4, (height / 4) * 3 ); + + if ( x1 < 0 ) + x1 = 0; + + if ( y1 < 0 ) + y1 = 0; + + int x2 = x1 + width; + int y2 = y1 + height; + + if ( x2 >= 5120 ) + x2 = 5119; + + if ( y2 >= 4096 ) + y2 = 4095; + + x1 = x2 - width; + y1 = y2 - height; + + Bounds = new Rectangle2D( x1, y1, width, height ); + Protected = true; + + AddWorldPin( m_Location.X, m_Location.Y ); + } + + public TreasureMap( Serial serial ) : base( serial ) + { + } + + public static bool HasDiggingTool( Mobile m ) + { + if ( m.Backpack == null ) + return false; + + List items = m.Backpack.FindItemsByType(); + + foreach ( BaseHarvestTool tool in items ) + { + if ( tool.HarvestSystem == Engines.Harvest.Mining.System ) + return true; + } + + return false; + } + + public void OnBeginDig( Mobile from ) + { + if ( m_Completed ) + { + from.SendLocalizedMessage( 503028 ); // The treasure for this map has already been found. + } + else if ( m_Decoder != from && !HasRequiredSkill( from ) ) + { + from.SendLocalizedMessage( 503031 ); // You did not decode this map and have no clue where to look for the treasure. + } + else if ( !from.CanBeginAction( typeof( TreasureMap ) ) ) + { + from.SendLocalizedMessage( 503020 ); // You are already digging treasure. + } + else if ( from.Map != this.m_Map ) + { + from.SendLocalizedMessage( 1010479 ); // You seem to be in the right place, but may be on the wrong facet! + } + else + { + from.SendLocalizedMessage( 503033 ); // Where do you wish to dig? + from.Target = new DigTarget( this ); + } + } + + private class DigTarget : Target + { + private TreasureMap m_Map; + + public DigTarget( TreasureMap map ) : base( 6, true, TargetFlags.None ) + { + m_Map = map; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Map.Deleted ) + return; + + Map map = m_Map.m_Map; + + if ( m_Map.m_Completed ) + { + from.SendLocalizedMessage( 503028 ); // The treasure for this map has already been found. + } + /* + else if ( from != m_Map.m_Decoder ) + { + from.SendLocalizedMessage( 503016 ); // Only the person who decoded this map may actually dig up the treasure. + } + */ + else if ( m_Map.m_Decoder != from && !m_Map.HasRequiredSkill( from ) ) + { + from.SendLocalizedMessage( 503031 ); // You did not decode this map and have no clue where to look for the treasure. + return; + } + else if ( !from.CanBeginAction( typeof( TreasureMap ) ) ) + { + from.SendLocalizedMessage( 503020 ); // You are already digging treasure. + } + else if ( !HasDiggingTool( from ) ) + { + from.SendMessage( "You must have a digging tool to dig for treasure." ); + } + else if ( from.Map != map ) + { + from.SendLocalizedMessage( 1010479 ); // You seem to be in the right place, but may be on the wrong facet! + } + else + { + IPoint3D p = targeted as IPoint3D; + + Point3D targ3D; + if ( p is Item ) + targ3D = ((Item)p).GetWorldLocation(); + else + targ3D = new Point3D( p ); + + int maxRange; + double skillValue = Server.Misc.SkillCheck.TradeSkill( from, Trades.Mining, false ); + + if ( skillValue >= 100.0 ) + maxRange = 4; + else if ( skillValue >= 81.0 ) + maxRange = 3; + else if ( skillValue >= 51.0 ) + maxRange = 2; + else + maxRange = 1; + + Point2D loc = m_Map.m_Location; + int x = loc.X, y = loc.Y; + + Point3D chest3D0 = new Point3D( loc, 0 ); + + if ( Utility.InRange( targ3D, chest3D0, maxRange ) ) + { + if ( from.Location.X == x && from.Location.Y == y ) + { + from.SendLocalizedMessage( 503030 ); // The chest can't be dug up because you are standing on top of it. + } + else if ( map != null ) + { + int z = map.GetAverageZ( x, y ); + + if ( !map.CanFit( x, y, z, 16, true, true ) ) + { + from.SendLocalizedMessage( 503021 ); // You have found the treasure chest but something is keeping it from being dug up. + } + else if ( from.BeginAction( typeof( TreasureMap ) ) ) + { + new DigTimer( from, m_Map, new Point3D( x, y, z ), map ).Start(); + } + else + { + from.SendLocalizedMessage( 503020 ); // You are already digging treasure. + } + } + } + else if ( m_Map.Level > 0 ) + { + if ( Utility.InRange( targ3D, chest3D0, 8 ) ) // We're close, but not quite + { + from.SendLocalizedMessage( 503032 ); // You dig and dig but no treasure seems to be here. + } + else + { + from.SendLocalizedMessage( 503035 ); // You dig and dig but fail to find any treasure. + } + } + else + { + if ( Utility.InRange( targ3D, chest3D0, 8 ) ) // We're close, but not quite + { + from.SendAsciiMessage( 0x44, "The treasure chest is very close!" ); + } + else + { + Direction dir = Utility.GetDirection( targ3D, chest3D0 ); + + string sDir; + switch ( dir ) + { + case Direction.North: sDir = "north"; break; + case Direction.Right: sDir = "northeast"; break; + case Direction.East: sDir = "east"; break; + case Direction.Down: sDir = "southeast"; break; + case Direction.South: sDir = "south"; break; + case Direction.Left: sDir = "southwest"; break; + case Direction.West: sDir = "west"; break; + default: sDir = "northwest"; break; + } + + from.SendAsciiMessage( 0x44, "Try looking for the treasure chest more to the {0}.", sDir ); + } + } + } + } + } + + private class DigTimer : Timer + { + private Mobile m_From; + private TreasureMap m_TreasureMap; + + private Point3D m_Location; + private Map m_Map; + + private TreasureChestDirt m_Dirt1; + private TreasureChestDirt m_Dirt2; + private TreasureMapChest m_Chest; + + private int m_Count; + + private DateTime m_NextSkillTime; + private DateTime m_NextSpellTime; + private DateTime m_NextActionTime; + private DateTime m_LastMoveTime; + + public DigTimer( Mobile from, TreasureMap treasureMap, Point3D location, Map map ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 1.0 ) ) + { + m_From = from; + m_TreasureMap = treasureMap; + + m_Location = location; + m_Map = map; + + m_NextSkillTime = from.NextSkillTime; + m_NextSpellTime = from.NextSpellTime; + m_NextActionTime = from.NextActionTime; + m_LastMoveTime = from.LastMoveTime; + + Priority = TimerPriority.TenMS; + } + + private void Terminate() + { + Stop(); + m_From.EndAction( typeof( TreasureMap ) ); + + if ( m_Chest != null ) + m_Chest.Delete(); + + if ( m_Dirt1 != null ) + { + m_Dirt1.Delete(); + m_Dirt2.Delete(); + } + } + + protected override void OnTick() + { + if ( m_NextSkillTime != m_From.NextSkillTime || m_NextSpellTime != m_From.NextSpellTime || m_NextActionTime != m_From.NextActionTime ) + { + Terminate(); + return; + } + + if ( m_LastMoveTime != m_From.LastMoveTime ) + { + m_From.SendLocalizedMessage( 503023 ); // You cannot move around while digging up treasure. You will need to start digging anew. + Terminate(); + return; + } + + int z = ( m_Chest != null ) ? m_Chest.Z + m_Chest.ItemData.Height : int.MinValue; + int height = 16; + + if ( z > m_Location.Z ) + height -= ( z - m_Location.Z ); + else + z = m_Location.Z; + + if ( !m_Map.CanFit( m_Location.X, m_Location.Y, z, height, true, true, false ) ) + { + m_From.SendLocalizedMessage( 503024 ); // You stop digging because something is directly on top of the treasure chest. + Terminate(); + return; + } + + m_Count++; + + m_From.RevealingAction(); + m_From.Direction = m_From.GetDirectionTo( m_Location ); + + if ( m_Count > 1 && m_Dirt1 == null ) + { + m_Dirt1 = new TreasureChestDirt(); + m_Dirt1.MoveToWorld( m_Location, m_Map ); + + m_Dirt2 = new TreasureChestDirt(); + m_Dirt2.MoveToWorld( new Point3D( m_Location.X, m_Location.Y - 1, m_Location.Z ), m_Map ); + } + + if ( m_Count == 5 ) + { + m_Dirt1.Turn1(); + } + else if ( m_Count == 10 ) + { + m_Dirt1.Turn2(); + m_Dirt2.Turn2(); + } + else if ( m_Count > 10 ) + { + if ( m_Chest == null ) + { + m_Chest = new TreasureMapChest( m_From, m_TreasureMap.Level, true ); + m_Chest.MoveToWorld( new Point3D( m_Location.X, m_Location.Y, m_Location.Z - 15 ), m_Map ); + } + else + { + m_Chest.Z++; + } + + Effects.PlaySound( m_Chest, m_Map, 0x33B ); + } + + if ( m_Chest != null && m_Chest.Location.Z >= m_Location.Z ) + { + Stop(); + m_From.EndAction( typeof( TreasureMap ) ); + + m_Chest.Temporary = false; + m_TreasureMap.Completed = true; + m_TreasureMap.CompletedBy = m_From; + + int spawns; + switch ( m_TreasureMap.Level ) + { + case 0: spawns = 3; break; + case 1: spawns = 0; break; + default: spawns = 4; break; + } + + for ( int i = 0; i < spawns; ++i ) + { + BaseCreature bc = Spawn( m_TreasureMap.Level, m_Chest.Location, m_Chest.Map, null, true ); + + if ( bc != null ) + m_Chest.Guardians.Add( bc ); + } + } + else + { + if ( m_From.Body.IsHuman && !m_From.Mounted ) + m_From.Animate( 11, 5, 1, true, false, 0 ); + + new SoundTimer( m_From, 0x125 + (m_Count % 2) ).Start(); + } + } + + private class SoundTimer : Timer + { + private Mobile m_From; + private int m_SoundID; + + public SoundTimer( Mobile from, int soundID ) : base( TimeSpan.FromSeconds( 0.9 ) ) + { + m_From = from; + m_SoundID = soundID; + + Priority = TimerPriority.TenMS; + } + + protected override void OnTick() + { + m_From.PlaySound( m_SoundID ); + } + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.InRange( GetWorldLocation(), 2 ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return; + } + + if ( !m_Completed && m_Decoder == null ) + Decode( from ); + else + DisplayTo( from ); + } + + private double GetMinSkillLevel() + { + switch ( m_Level ) + { + case 1: return -3.0; + case 2: return 41.0; + case 3: return 51.0; + case 4: return 61.0; + case 5: return 70.0; + case 6: return 70.0; + + default: return 0.0; + } + } + + private bool HasRequiredSkill( Mobile from ) + { + return ( Server.Misc.SkillCheck.TradeSkill( from, Trades.Cartography, false ) >= GetMinSkillLevel() ); + } + + public void Decode( Mobile from ) + { + if ( m_Completed || m_Decoder != null ) + return; + + double minSkill = GetMinSkillLevel(); + + if ( Server.Misc.SkillCheck.TradeSkill( from, Trades.Cartography, false ) < minSkill ) + from.SendLocalizedMessage( 503013 ); // The map is too difficult to attempt to decode. + + double maxSkill = minSkill + 60.0; + + if ( !Server.Misc.SkillCheck.TestTrade( from, Trades.Cartography, minSkill, maxSkill ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 503018 ); // You fail to make anything of the map. + return; + } + + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 503019 ); // You successfully decode a treasure map! + Decoder = from; + DisplayTo( from ); + } + + public override void DisplayTo( Mobile from ) + { + if ( m_Completed ) + { + SendLocalizedMessageTo( from, 503014 ); // This treasure hunt has already been completed. + } + else if ( m_Decoder != from && !HasRequiredSkill( from ) ) + { + from.SendLocalizedMessage( 503031 ); // You did not decode this map and have no clue where to look for the treasure. + return; + } + else + { + SendLocalizedMessageTo( from, 503017 ); // The treasure is marked by the red pin. Grab a shovel and go dig it up! + } + + from.PlaySound( 0x249 ); + base.DisplayTo( from ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( !m_Completed ) + { + if ( m_Decoder == null ) + { + list.Add( new DecodeMapEntry( this ) ); + } + else + { + bool digTool = HasDiggingTool( from ); + + list.Add( new OpenMapEntry( this ) ); + list.Add( new DigEntry( this, digTool ) ); + } + } + } + + private class DecodeMapEntry : ContextMenuEntry + { + private TreasureMap m_Map; + + public DecodeMapEntry( TreasureMap map ) : base( 6147, 2 ) + { + m_Map = map; + } + + public override void OnClick() + { + if ( !m_Map.Deleted ) + m_Map.Decode( Owner.From ); + } + } + + private class OpenMapEntry : ContextMenuEntry + { + private TreasureMap m_Map; + + public OpenMapEntry( TreasureMap map ) : base( 6150, 2 ) + { + m_Map = map; + } + + public override void OnClick() + { + if ( !m_Map.Deleted ) + m_Map.DisplayTo( Owner.From ); + } + } + + private class DigEntry : ContextMenuEntry + { + private TreasureMap m_Map; + + public DigEntry( TreasureMap map, bool enabled ) : base( 6148, 2 ) + { + m_Map = map; + + if ( !enabled ) + this.Flags |= CMEFlags.Disabled; + } + + public override void OnClick() + { + if ( m_Map.Deleted ) + return; + + Mobile from = Owner.From; + + if ( HasDiggingTool( from ) ) + m_Map.OnBeginDig( from ); + else + from.SendMessage( "You must have a digging tool to dig for treasure." ); + } + } + + public override int LabelNumber + { + get + { + if ( m_Decoder != null ) + { + if ( m_Level == 6 ) + return 1063453; + else + return 1041516 + m_Level; + } + else if ( m_Level == 6 ) + return 1063452; + else + return 1041510 + m_Level; + } + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + list.Add( 1041502 ); // for somewhere in Britannia + + if ( m_Completed ) + { + list.Add( 1041507, m_CompletedBy == null ? "someone" : m_CompletedBy.Name ); // completed by ~1_val~ + } + } + + public override void OnSingleClick( Mobile from ) + { + if ( m_Completed ) + { + from.Send( new MessageLocalizedAffix( Serial, ItemID, MessageType.Label, 0x3B2, 3, 1048030, "", AffixType.Append, String.Format( " completed by {0}", m_CompletedBy == null ? "someone" : m_CompletedBy.Name ), "" ) ); + } + else if ( m_Decoder != null ) + { + if ( m_Level == 6 ) + LabelTo( from, 1063453 ); + else + LabelTo( from, 1041516 + m_Level ); + } + else + { + if ( m_Level == 6 ) + LabelTo( from, 1041522, String.Format( "#{0}\t \t#{1}", 1063452, m_Map == Map.Britannia ? 1041502 : 1041503 ) ); + else + LabelTo( from, 1041522, String.Format( "#{0}\t \t#{1}", 1041510 + m_Level, m_Map == Map.Britannia ? 1041502 : 1041503 ) ); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); + + writer.Write( (Mobile) m_CompletedBy ); + + writer.Write( m_Level ); + writer.Write( m_Completed ); + writer.Write( m_Decoder ); + writer.Write( m_Map ); + writer.Write( m_Location ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_CompletedBy = reader.ReadMobile(); + + goto case 0; + } + case 0: + { + m_Level = (int)reader.ReadInt(); + m_Completed = reader.ReadBool(); + m_Decoder = reader.ReadMobile(); + m_Map = reader.ReadMap(); + m_Location = reader.ReadPoint2D(); + + if ( version == 0 && m_Completed ) + m_CompletedBy = m_Decoder; + + break; + } + } + } + } + + public class TreasureChestDirt : Item + { + public TreasureChestDirt() : base( 0x912 ) + { + Movable = false; + + Timer.DelayCall( TimeSpan.FromMinutes( 2.0 ), new TimerCallback( Delete ) ); + } + + public TreasureChestDirt( Serial serial ) : base( serial ) + { + } + + public void Turn1() + { + this.ItemID = 0x913; + } + + public void Turn2() + { + this.ItemID = 0x914; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + Delete(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Maps/WorldMap.cs b/Scripts/Items/Maps/WorldMap.cs new file mode 100644 index 0000000..024949d --- /dev/null +++ b/Scripts/Items/Maps/WorldMap.cs @@ -0,0 +1,51 @@ +using System; +using Server; +using Server.Misc; + +namespace Server.Items +{ + public class WorldMap : MapItem + { + [Constructable] + public WorldMap() + { + SetDisplay( 0, 0, 5119, 4095, 400, 400 ); + } + + public override void CraftInit( Mobile from ) + { + // Unlike the others, world map is not based on crafted location + + double skillValue = Server.Misc.SkillCheck.TradeSkill( from, Trades.Cartography, false ); + int x20 = (int)(skillValue * 20); + int size = 25 + (int)(skillValue * 6.6); + + if ( size < 200 ) + size = 200; + else if ( size > 400 ) + size = 400; + + SetDisplay( 1344 - x20, 1600 - x20, 1472 + x20, 1728 + x20, size, size ); + } + + public override int LabelNumber{ get{ return 1015233; } } // world map + + public WorldMap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/AcidSlime.cs b/Scripts/Items/Misc/AcidSlime.cs new file mode 100644 index 0000000..0ec68a4 --- /dev/null +++ b/Scripts/Items/Misc/AcidSlime.cs @@ -0,0 +1,99 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Spells; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Items +{ + public class AcidSlime : Item + { + private TimeSpan m_Duration; + private int m_MinDamage; + private int m_MaxDamage; + private DateTime m_Created; + private bool m_Drying; + private Timer m_Timer; + + [Constructable] + public AcidSlime() : this( TimeSpan.FromSeconds( 10.0 ), 5, 10 ) + { + } + + public override string DefaultName { get { return "slime"; } } + + [Constructable] + public AcidSlime( TimeSpan duration, int minDamage, int maxDamage ) + : base( 0x122A ) + { + Hue = 0x3F; + Movable = false; + m_MinDamage = minDamage; + m_MaxDamage = maxDamage; + m_Created = DateTime.Now; + m_Duration = duration; + m_Timer = Timer.DelayCall( TimeSpan.Zero, TimeSpan.FromSeconds( 1 ), new TimerCallback( OnTick ) ); + } + + public override void OnAfterDelete() + { + if( m_Timer != null ) + m_Timer.Stop(); + } + + private void OnTick() + { + DateTime now = DateTime.Now; + TimeSpan age = now - m_Created; + + if( age > m_Duration ) { + Delete(); + } else { + if( !m_Drying && age > (m_Duration - age) ) + { + m_Drying = true; + ItemID = 0x122B; + } + + List toDamage = new List(); + + foreach( Mobile m in GetMobilesInRange( 0 ) ) + { + BaseCreature bc = m as BaseCreature; + if( m.Alive && !m.IsDeadBondedPet && (bc == null || bc.Controlled || bc.Summoned) ) + { + toDamage.Add( m ); + } + } + + for ( int i = 0; i < toDamage.Count; i++ ) + Damage( toDamage[i] ); + } + } + + public override bool OnMoveOver( Mobile m ) + { + Damage( m ); + return true; + } + + public void Damage ( Mobile m ) + { + int damage = Utility.RandomMinMax( m_MinDamage, m_MaxDamage ); + m.Damage( damage ); + } + + public AcidSlime( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + } + + public override void Deserialize( GenericReader reader ) + { + } + } +} diff --git a/Scripts/Items/Misc/ArcaneGem.cs b/Scripts/Items/Misc/ArcaneGem.cs new file mode 100644 index 0000000..bc529f6 --- /dev/null +++ b/Scripts/Items/Misc/ArcaneGem.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Misc; +using Server.Targeting; + +namespace Server.Items +{ + public class ArcaneGem : Item + { + public override string DefaultName + { + get { return "arcane gem"; } + } + + [Constructable] + public ArcaneGem() : base( 0x1EA7 ) + { + Stackable = false; + Weight = 1.0; + } + + public ArcaneGem( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else + { + from.BeginTarget( 2, false, TargetFlags.None, new TargetCallback( OnTarget ) ); + from.SendMessage( "What do you wish to use the gem on?" ); + } + } + + public int GetChargesFor( Mobile m ) + { + int v = (int)(Server.Misc.SkillCheck.TradeSkill( m, Trades.Tailoring, false ) / 5); + + if ( v < 16 ) + return 16; + else if ( v > 24 ) + return 24; + + return v; + } + + public const int DefaultArcaneHue = 2117; + + public void OnTarget( Mobile from, object obj ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + return; + } + + if ( obj is IArcaneEquip && obj is Item ) + { + Item item = (Item)obj; + CraftResource resource = CraftResource.None; + + if( item is BaseClothing ) + resource = ((BaseClothing)item).Resource; + else if( item is BaseArmor ) + resource = ((BaseArmor)item).Resource; + else if( item is BaseWeapon ) // Sanity, weapons cannot recieve gems... + resource = ((BaseWeapon)item).Resource; + + IArcaneEquip eq = (IArcaneEquip)obj; + + if ( !item.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + return; + } + else if ( resource != CraftResource.None && resource != CraftResource.Leathered ) + { + from.SendLocalizedMessage( 1049690 ); // Arcane gems can not be used on that type of leather. + return; + } + + int charges = GetChargesFor( from ); + + if ( eq.IsArcane ) + { + if ( eq.CurArcaneCharges >= eq.MaxArcaneCharges ) + { + from.SendMessage( "That item is already fully charged." ); + } + else + { + if ( eq.CurArcaneCharges <= 0 ) + item.Hue = DefaultArcaneHue; + + if ( (eq.CurArcaneCharges + charges) > eq.MaxArcaneCharges ) + eq.CurArcaneCharges = eq.MaxArcaneCharges; + else + eq.CurArcaneCharges += charges; + + from.SendMessage( "You recharge the item." ); + if ( Amount <= 1 ) + Delete(); + else Amount--; + } + } + else if ( Server.Misc.SkillCheck.TradeSkill( from, Trades.Tailoring, false ) >= 80.0 ) + { + bool isExceptional = false; + + if ( item is BaseClothing ) + isExceptional = ( ((BaseClothing)item).Quality == ClothingQuality.Exceptional ); + else if ( item is BaseArmor ) + isExceptional = ( ((BaseArmor)item).Quality == ArmorQuality.Exceptional ); + else if ( item is BaseWeapon ) + isExceptional = ( ((BaseWeapon)item).Quality == WeaponQuality.Exceptional ); + + if ( isExceptional ) + { + if ( item is BaseClothing ) + { + ((BaseClothing)item).Quality = ClothingQuality.Regular; + ((BaseClothing)item).Crafter = from; + } + else if ( item is BaseArmor ) + { + ((BaseArmor)item).Quality = ArmorQuality.Regular; + ((BaseArmor)item).Crafter = from; + } + else if ( item is BaseWeapon ) // Sanity, weapons cannot recieve gems... + { + ((BaseWeapon)item).Quality = WeaponQuality.Regular; + ((BaseWeapon)item).Crafter = from; + } + + eq.CurArcaneCharges = eq.MaxArcaneCharges = charges; + + item.Hue = DefaultArcaneHue; + + from.SendMessage( "You enhance the item with your gem." ); + if ( Amount <= 1 ) + Delete(); + else Amount--; + } + else + { + from.SendMessage( "Only exceptional items can be enhanced with the gem." ); + } + } + else + { + from.SendMessage( "You do not have enough skill in tailoring to enhance the item." ); + } + } + else + { + from.SendMessage( "You can only use this on exceptionally crafted robes, thigh boots, cloaks, or leather gloves." ); + } + } + + public static bool ConsumeCharges( Mobile from, int amount ) + { + List items = from.Items; + int avail = 0; + + for ( int i = 0; i < items.Count; ++i ) + { + Item obj = items[i]; + + if ( obj is IArcaneEquip ) + { + IArcaneEquip eq = (IArcaneEquip)obj; + + if ( eq.IsArcane ) + avail += eq.CurArcaneCharges; + } + } + + if ( avail < amount ) + return false; + + for ( int i = 0; i < items.Count; ++i ) + { + Item obj = items[i]; + + if ( obj is IArcaneEquip ) + { + IArcaneEquip eq = (IArcaneEquip)obj; + + if ( eq.IsArcane ) + { + if ( eq.CurArcaneCharges > amount ) + { + eq.CurArcaneCharges -= amount; + break; + } + else + { + amount -= eq.CurArcaneCharges; + eq.CurArcaneCharges = 0; + } + } + } + } + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Beeswax.cs b/Scripts/Items/Misc/Beeswax.cs new file mode 100644 index 0000000..b9cb7fb --- /dev/null +++ b/Scripts/Items/Misc/Beeswax.cs @@ -0,0 +1,40 @@ +using System; + +namespace Server.Items +{ + public class Beeswax : Item + { + [Constructable] + public Beeswax() : this( 1 ) + { + } + + [Constructable] + public Beeswax( int amount ) : base( 0x1422 ) + { + Weight = 1.0; + Stackable = true; + Amount = amount; + } + + public Beeswax( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Blocker.cs b/Scripts/Items/Misc/Blocker.cs new file mode 100644 index 0000000..2832453 --- /dev/null +++ b/Scripts/Items/Misc/Blocker.cs @@ -0,0 +1,106 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class Blocker : Item + { + public override int LabelNumber{ get{ return 503057; } } // Impassable! + + [Constructable] + public Blocker() : base( 0x21A4 ) + { + Movable = false; + } + + public Blocker( Serial serial ) : base( serial ) + { + } + + protected override Packet GetWorldPacketFor( NetState state ) { + Mobile mob = state.Mobile; + + if ( mob != null && mob.AccessLevel >= AccessLevel.GameMaster ) + return new GMItemPacket( this ); + + return base.GetWorldPacketFor( state ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public sealed class GMItemPacket : Packet + { + public GMItemPacket( Item item ) : base( 0x1A ) + { + this.EnsureCapacity( 20 ); + + // 14 base length + // +2 - Amount + // +2 - Hue + // +1 - Flags + + uint serial = (uint)item.Serial.Value; + int itemID = 0x1183; + int amount = item.Amount; + Point3D loc = item.Location; + int x = loc.X; + int y = loc.Y; + int hue = item.Hue; + int flags = item.GetPacketFlags(); + int direction = (int)item.Direction; + + if ( amount != 0 ) + serial |= 0x80000000; + else + serial &= 0x7FFFFFFF; + + m_Stream.Write( (uint) serial ); + m_Stream.Write( (short) (itemID & 0x7FFF) ); + + if ( amount != 0 ) + m_Stream.Write( (short) amount ); + + x &= 0x7FFF; + + if ( direction != 0 ) + x |= 0x8000; + + m_Stream.Write( (short) x ); + + y &= 0x3FFF; + + if ( hue != 0 ) + y |= 0x8000; + + if ( flags != 0 ) + y |= 0x4000; + + m_Stream.Write( (short) y ); + + if ( direction != 0 ) + m_Stream.Write( (byte) direction ); + + m_Stream.Write( (sbyte) loc.Z ); + + if ( hue != 0 ) + m_Stream.Write( (ushort) hue ); + + if ( flags != 0 ) + m_Stream.Write( (byte) flags ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Blood.cs b/Scripts/Items/Misc/Blood.cs new file mode 100644 index 0000000..d8d6457 --- /dev/null +++ b/Scripts/Items/Misc/Blood.cs @@ -0,0 +1,57 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Blood : Item + { + [Constructable] + public Blood() : this( Utility.RandomList( 0x1645, 0x122A, 0x122B, 0x122C, 0x122D, 0x122E, 0x122F )) + { + } + + [Constructable] + public Blood( int itemID ) : base( itemID ) + { + Movable = false; + + new InternalTimer( this ).Start(); + } + + public Blood( Serial serial ) : base( serial ) + { + new InternalTimer( this ).Start(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + private class InternalTimer : Timer + { + private Item m_Blood; + + public InternalTimer( Item blood ) : base( TimeSpan.FromSeconds( 5.0 ) ) + { + Priority = TimerPriority.OneSecond; + + m_Blood = blood; + } + + protected override void OnTick() + { + m_Blood.Delete(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/BulletinBoards.cs b/Scripts/Items/Misc/BulletinBoards.cs new file mode 100644 index 0000000..965c7a5 --- /dev/null +++ b/Scripts/Items/Misc/BulletinBoards.cs @@ -0,0 +1,620 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x1E5E, 0x1E5F )] + public class BulletinBoard : BaseBulletinBoard + { + [Constructable] + public BulletinBoard() : base( 0x1E5E ) + { + } + + public BulletinBoard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public abstract class BaseBulletinBoard : Item + { + private string m_BoardName; + + [CommandProperty( AccessLevel.GameMaster )] + public string BoardName + { + get{ return m_BoardName; } + set{ m_BoardName = value; } + } + + public BaseBulletinBoard( int itemID ) : base( itemID ) + { + m_BoardName = "bulletin board"; + Movable = false; + } + + // Threads will be removed six hours after the last post was made + private static TimeSpan ThreadDeletionTime = TimeSpan.FromHours( 6.0 ); + + // A player may only create a thread once every two minutes + private static TimeSpan ThreadCreateTime = TimeSpan.FromMinutes( 2.0 ); + + // A player may only reply once every thirty seconds + private static TimeSpan ThreadReplyTime = TimeSpan.FromSeconds( 30.0 ); + + public static bool CheckTime( DateTime time, TimeSpan range ) + { + return (time + range) < DateTime.Now; + } + + public static string FormatTS( TimeSpan ts ) + { + int totalSeconds = (int)ts.TotalSeconds; + int seconds = totalSeconds % 60; + int minutes = totalSeconds / 60; + + if ( minutes != 0 && seconds != 0 ) + return String.Format( "{0} minute{1} and {2} second{3}", minutes, minutes==1?"":"s", seconds, seconds==1?"":"s" ); + else if ( minutes != 0 ) + return String.Format( "{0} minute{1}", minutes, minutes==1?"":"s" ); + else + return String.Format( "{0} second{1}", seconds, seconds==1?"":"s" ); + } + + public virtual void Cleanup() + { + List items = this.Items; + + for ( int i = items.Count - 1; i >= 0; --i ) + { + if ( i >= items.Count ) + continue; + + BulletinMessage msg = items[i] as BulletinMessage; + + if ( msg == null ) + continue; + + if ( msg.Thread == null && CheckTime( msg.LastPostTime, ThreadDeletionTime ) ) + { + msg.Delete(); + RecurseDelete( msg ); // A root-level thread has expired + } + } + } + + private void RecurseDelete( BulletinMessage msg ) + { + List found = new List(); + List items = this.Items; + + for ( int i = items.Count - 1; i >= 0; --i ) + { + if ( i >= items.Count ) + continue; + + BulletinMessage check = items[i] as BulletinMessage; + + if ( check == null ) + continue; + + if ( check.Thread == msg ) + { + check.Delete(); + found.Add( check ); + } + } + + for ( int i = 0; i < found.Count; ++i ) + RecurseDelete( (BulletinMessage)found[i] ); + } + + public virtual bool GetLastPostTime( Mobile poster, bool onlyCheckRoot, ref DateTime lastPostTime ) + { + List items = this.Items; + bool wasSet = false; + + for ( int i = 0; i < items.Count; ++i ) + { + BulletinMessage msg = items[i] as BulletinMessage; + + if ( msg == null || msg.Poster != poster ) + continue; + + if ( onlyCheckRoot && msg.Thread != null ) + continue; + + if ( msg.Time > lastPostTime ) + { + wasSet = true; + lastPostTime = msg.Time; + } + } + + return wasSet; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( CheckRange( from ) ) + { + Cleanup(); + + NetState state = from.NetState; + + state.Send( new BBDisplayBoard( this ) ); + if ( state.ContainerGridLines ) + state.Send( new ContainerContent6017( from, this ) ); + else + state.Send( new ContainerContent( from, this ) ); + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + } + + public virtual bool CheckRange( Mobile from ) + { + if ( from.AccessLevel >= AccessLevel.GameMaster ) + return true; + + return ( from.Map == this.Map && from.InRange( GetWorldLocation(), 2 ) ); + } + + public void PostMessage( Mobile from, BulletinMessage thread, string subject, string[] lines ) + { + if ( thread != null ) + thread.LastPostTime = DateTime.Now; + + AddItem( new BulletinMessage( from, thread, subject, lines ) ); + } + + public BaseBulletinBoard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( (string) m_BoardName ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_BoardName = reader.ReadString(); + break; + } + } + } + + public static void Initialize() + { + PacketHandlers.Register( 0x71, 0, true, new OnPacketReceive( BBClientRequest ) ); + } + + public static void BBClientRequest( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + int packetID = pvSrc.ReadByte(); + BaseBulletinBoard board = World.FindItem( pvSrc.ReadInt32() ) as BaseBulletinBoard; + + if ( board == null || !board.CheckRange( from ) ) + return; + + switch ( packetID ) + { + case 3: BBRequestContent( from, board, pvSrc ); break; + case 4: BBRequestHeader( from, board, pvSrc ); break; + case 5: BBPostMessage( from, board, pvSrc ); break; + case 6: BBRemoveMessage( from, board, pvSrc ); break; + } + } + + public static void BBRequestContent( Mobile from, BaseBulletinBoard board, PacketReader pvSrc ) + { + BulletinMessage msg = World.FindItem( pvSrc.ReadInt32() ) as BulletinMessage; + + if ( msg == null || msg.Parent != board ) + return; + + from.Send( new BBMessageContent( board, msg ) ); + } + + public static void BBRequestHeader( Mobile from, BaseBulletinBoard board, PacketReader pvSrc ) + { + BulletinMessage msg = World.FindItem( pvSrc.ReadInt32() ) as BulletinMessage; + + if ( msg == null || msg.Parent != board ) + return; + + from.Send( new BBMessageHeader( board, msg ) ); + } + + public static void BBPostMessage( Mobile from, BaseBulletinBoard board, PacketReader pvSrc ) + { + BulletinMessage thread = World.FindItem( pvSrc.ReadInt32() ) as BulletinMessage; + + if ( thread != null && thread.Parent != board ) + thread = null; + + int breakout = 0; + + while ( thread != null && thread.Thread != null && breakout++ < 10 ) + thread = thread.Thread; + + DateTime lastPostTime = DateTime.MinValue; + + if ( board.GetLastPostTime( from, ( thread == null ), ref lastPostTime ) ) + { + if ( !CheckTime( lastPostTime, (thread == null ? ThreadCreateTime : ThreadReplyTime) ) ) + { + if ( thread == null ) + from.SendMessage( "You must wait {0} before creating a new thread.", FormatTS( ThreadCreateTime ) ); + else + from.SendMessage( "You must wait {0} before replying to another thread.", FormatTS( ThreadReplyTime ) ); + + return; + } + } + + string subject = pvSrc.ReadUTF8StringSafe( pvSrc.ReadByte() ); + + if ( subject.Length == 0 ) + return; + + string[] lines = new string[pvSrc.ReadByte()]; + + if ( lines.Length == 0 ) + return; + + for ( int i = 0; i < lines.Length; ++i ) + lines[i] = pvSrc.ReadUTF8StringSafe( pvSrc.ReadByte() ); + + board.PostMessage( from, thread, subject, lines ); + } + + public static void BBRemoveMessage( Mobile from, BaseBulletinBoard board, PacketReader pvSrc ) + { + BulletinMessage msg = World.FindItem( pvSrc.ReadInt32() ) as BulletinMessage; + + if ( msg == null || msg.Parent != board ) + return; + + if ( from.AccessLevel < AccessLevel.GameMaster && msg.Poster != from ) + return; + + msg.Delete(); + } + } + + public struct BulletinEquip + { + public int itemID; + public int hue; + + public BulletinEquip( int itemID, int hue ) + { + this.itemID = itemID; + this.hue = hue; + } + } + + public class BulletinMessage : Item + { + private Mobile m_Poster; + private string m_Subject; + private DateTime m_Time, m_LastPostTime; + private BulletinMessage m_Thread; + private string m_PostedName; + private int m_PostedBody; + private int m_PostedHue; + private BulletinEquip[] m_PostedEquip; + private string[] m_Lines; + + public string GetTimeAsString() + { + return m_Time.ToString( "MMM dd, yyyy" ); + } + + public override bool CheckTarget( Mobile from, Server.Targeting.Target targ, object targeted ) + { + return false; + } + + public override bool IsAccessibleTo( Mobile check ) + { + return false; + } + + public BulletinMessage( Mobile poster, BulletinMessage thread, string subject, string[] lines ) : base( 0xEB0 ) + { + Movable = false; + + m_Poster = poster; + m_Subject = subject; + m_Time = DateTime.Now; + m_LastPostTime = m_Time; + m_Thread = thread; + m_PostedName = m_Poster.Name; + m_PostedBody = m_Poster.Body; + m_PostedHue = m_Poster.Hue; + m_Lines = lines; + + List list = new List(); + + for ( int i = 0; i < poster.Items.Count; ++i ) + { + Item item = poster.Items[i]; + + if ( item.Layer >= Layer.OneHanded && item.Layer <= Layer.Mount ) + list.Add( new BulletinEquip( item.ItemID, item.Hue ) ); + } + + m_PostedEquip = list.ToArray(); + } + + public Mobile Poster{ get{ return m_Poster; } } + public BulletinMessage Thread{ get{ return m_Thread; } } + public string Subject{ get{ return m_Subject; } } + public DateTime Time{ get{ return m_Time; } } + public DateTime LastPostTime{ get{ return m_LastPostTime; } set{ m_LastPostTime = value; } } + public string PostedName{ get{ return m_PostedName; } } + public int PostedBody{ get{ return m_PostedBody; } } + public int PostedHue{ get{ return m_PostedHue; } } + public BulletinEquip[] PostedEquip{ get{ return m_PostedEquip; } } + public string[] Lines{ get{ return m_Lines; } } + + public BulletinMessage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( (Mobile) m_Poster ); + writer.Write( (string) m_Subject ); + writer.Write( (DateTime) m_Time ); + writer.Write( (DateTime) m_LastPostTime ); + writer.Write( (bool) (m_Thread != null) ); + writer.Write( (Item) m_Thread ); + writer.Write( (string) m_PostedName ); + writer.Write( (int) m_PostedBody ); + writer.Write( (int) m_PostedHue ); + + writer.Write( (int) m_PostedEquip.Length ); + + for ( int i = 0; i < m_PostedEquip.Length; ++i ) + { + writer.Write( (int) m_PostedEquip[i].itemID ); + writer.Write( (int) m_PostedEquip[i].hue ); + } + + writer.Write( (int) m_Lines.Length ); + + for ( int i = 0; i < m_Lines.Length; ++i ) + writer.Write( (string) m_Lines[i] ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Poster = reader.ReadMobile(); + m_Subject = reader.ReadString(); + m_Time = reader.ReadDateTime(); + m_LastPostTime = reader.ReadDateTime(); + bool hasThread = reader.ReadBool(); + m_Thread = reader.ReadItem() as BulletinMessage; + m_PostedName = reader.ReadString(); + m_PostedBody = reader.ReadInt(); + m_PostedHue = reader.ReadInt(); + + m_PostedEquip = new BulletinEquip[reader.ReadInt()]; + + for ( int i = 0; i < m_PostedEquip.Length; ++i ) + { + m_PostedEquip[i].itemID = reader.ReadInt(); + m_PostedEquip[i].hue = reader.ReadInt(); + } + + m_Lines = new string[reader.ReadInt()]; + + for ( int i = 0; i < m_Lines.Length; ++i ) + m_Lines[i] = reader.ReadString(); + + if ( hasThread && m_Thread == null ) + Delete(); + + break; + } + } + } + } + + public class BBDisplayBoard : Packet + { + public BBDisplayBoard( BaseBulletinBoard board ) : base( 0x71 ) + { + string name = board.BoardName; + + if ( name == null ) + name = ""; + + EnsureCapacity( 38 ); + + byte[] buffer = Utility.UTF8.GetBytes( name ); + + m_Stream.Write( (byte) 0x00 ); // PacketID + m_Stream.Write( (int) board.Serial ); // Bulletin board serial + + // Bulletin board name + if ( buffer.Length >= 29 ) + { + m_Stream.Write( buffer, 0, 29 ); + m_Stream.Write( (byte) 0 ); + } + else + { + m_Stream.Write( buffer, 0, buffer.Length ); + m_Stream.Fill( 30 - buffer.Length ); + } + } + } + + public class BBMessageHeader : Packet + { + public BBMessageHeader( BaseBulletinBoard board, BulletinMessage msg ) : base( 0x71 ) + { + string poster = SafeString( msg.PostedName ); + string subject = SafeString( msg.Subject ); + string time = SafeString( msg.GetTimeAsString() ); + + EnsureCapacity( 22 + poster.Length + subject.Length + time.Length ); + + m_Stream.Write( (byte) 0x01 ); // PacketID + m_Stream.Write( (int) board.Serial ); // Bulletin board serial + m_Stream.Write( (int) msg.Serial ); // Message serial + + BulletinMessage thread = msg.Thread; + + if ( thread == null ) + m_Stream.Write( (int) 0 ); // Thread serial--root + else + m_Stream.Write( (int) thread.Serial ); // Thread serial--parent + + WriteString( poster ); + WriteString( subject ); + WriteString( time ); + } + + public void WriteString( string v ) + { + byte[] buffer = Utility.UTF8.GetBytes( v ); + int len = buffer.Length + 1; + + if ( len > 255 ) + len = 255; + + m_Stream.Write( (byte) len ); + m_Stream.Write( buffer, 0, len-1 ); + m_Stream.Write( (byte) 0 ); + } + + public string SafeString( string v ) + { + if ( v == null ) + return String.Empty; + + return v; + } + } + + public class BBMessageContent : Packet + { + public BBMessageContent( BaseBulletinBoard board, BulletinMessage msg ) : base( 0x71 ) + { + string poster = SafeString( msg.PostedName ); + string subject = SafeString( msg.Subject ); + string time = SafeString( msg.GetTimeAsString() ); + + EnsureCapacity( 22 + poster.Length + subject.Length + time.Length ); + + m_Stream.Write( (byte) 0x02 ); // PacketID + m_Stream.Write( (int) board.Serial ); // Bulletin board serial + m_Stream.Write( (int) msg.Serial ); // Message serial + + WriteString( poster ); + WriteString( subject ); + WriteString( time ); + + m_Stream.Write( (short) msg.PostedBody ); + m_Stream.Write( (short) msg.PostedHue ); + + int len = msg.PostedEquip.Length; + + if ( len > 255 ) + len = 255; + + m_Stream.Write( (byte) len ); + + for ( int i = 0; i < len; ++i ) + { + BulletinEquip eq = msg.PostedEquip[i]; + + m_Stream.Write( (short) eq.itemID ); + m_Stream.Write( (short) eq.hue ); + } + + len = msg.Lines.Length; + + if ( len > 255 ) + len = 255; + + m_Stream.Write( (byte) len ); + + for ( int i = 0; i < len; ++i ) + WriteString( msg.Lines[i] ); + } + + public void WriteString( string v ) + { + byte[] buffer = Utility.UTF8.GetBytes( v ); + int len = buffer.Length + 1; + + if ( len > 255 ) + len = 255; + + m_Stream.Write( (byte) len ); + m_Stream.Write( buffer, 0, len-1 ); + m_Stream.Write( (byte) 0 ); + } + + public string SafeString( string v ) + { + if ( v == null ) + return String.Empty; + + return v; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Corpses/Corpse.cs b/Scripts/Items/Misc/Corpses/Corpse.cs new file mode 100644 index 0000000..d1278b5 --- /dev/null +++ b/Scripts/Items/Misc/Corpses/Corpse.cs @@ -0,0 +1,904 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.ContextMenus; +using Server.Engines.PartySystem; +using Server.Guilds; +using Server.Misc; +using Server.Mobiles; +using Server.Network; + +namespace Server.Items +{ + public interface IDevourer + { + bool Devour( Corpse corpse ); + } + + [Flags] + public enum CorpseFlag + { + None = 0x00000000, + + /// + /// Has this corpse been carved? + /// + Carved = 0x00000001, + + /// + /// If true, this corpse will not turn into bones + /// + NoBones = 0x00000002, + + /// + /// If true, the corpse has turned into bones + /// + IsBones = 0x00000004, + + /// + /// Has this corpse yet been visited by a taxidermist? + /// + VisitedByTaxidermist = 0x00000008, + + /// + /// Was the owner criminal when he died? + /// + Criminal = 0x00000010, + + /// + /// Has this corpse been animated? + /// + Animated = 0x00000020, + } + + public class Corpse : Container, ICarvable + { + private Mobile m_Owner; // Whos corpse is this? + private Mobile m_Killer; // Who killed the owner? + private CorpseFlag m_Flags; // @see CorpseFlag + + private List m_Looters; // Who's looted this corpse? + private List m_EquipItems; // List of items equiped when the owner died. Ingame, these items display /on/ the corpse, not just inside + private List m_Aggressors; // Anyone from this list will be able to loot this corpse; we attacked them, or they attacked us when we were freely attackable + + private string m_CorpseName; // Value of the CorpseNameAttribute attached to the owner when he died -or- null if the owner had no CorpseNameAttribute; use "the remains of ~name~" + private IDevourer m_Devourer; // The creature that devoured this corpse + + // For notoriety: + private AccessLevel m_AccessLevel; // Which AccessLevel the owner had when he died + private Guild m_Guild; // Which Guild the owner was in when he died + private int m_Kills; // How many kills the owner had when he died + + private DateTime m_TimeOfDeath; // What time was this corpse created? + + private HairInfo m_Hair; // This contains the hair of the owner + private FacialHairInfo m_FacialHair; // This contains the facial hair of the owner + + public static readonly TimeSpan MonsterLootRightSacrifice = TimeSpan.FromMinutes( 2.0 ); + + public override bool IsChildVisibleTo( Mobile m, Item child ) + { + if ( !m.Player || m.AccessLevel > AccessLevel.Player ) //Staff and creatures not subject to instancing. + return true; + + return true; + } + + public override bool IsDecoContainer + { + get{ return false; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime TimeOfDeath + { + get{ return m_TimeOfDeath; } + set{ m_TimeOfDeath = value; } + } + + public override bool DisplayWeight { get { return false; } } + + public HairInfo Hair { get { return m_Hair; } } + public FacialHairInfo FacialHair { get { return m_FacialHair; } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsBones + { + get { return GetFlag( CorpseFlag.IsBones ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Devoured + { + get { return (m_Devourer != null); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Carved + { + get{ return GetFlag( CorpseFlag.Carved ); } + set { SetFlag( CorpseFlag.Carved, value ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool VisitedByTaxidermist + { + get { return GetFlag( CorpseFlag.VisitedByTaxidermist ); } + set { SetFlag( CorpseFlag.VisitedByTaxidermist, value ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Animated + { + get { return GetFlag( CorpseFlag.Animated ); } + set { SetFlag( CorpseFlag.Animated, value ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public AccessLevel AccessLevel + { + get{ return m_AccessLevel; } + } + + public List Aggressors + { + get{ return m_Aggressors; } + } + + public List Looters + { + get{ return m_Looters; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Killer + { + get{ return m_Killer; } + } + + public List EquipItems + { + get{ return m_EquipItems; } + } + + public Guild Guild + { + get{ return m_Guild; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Kills + { + get{ return m_Kills; } + set{ m_Kills = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Criminal + { + get { return GetFlag( CorpseFlag.Criminal ); } + set { SetFlag( CorpseFlag.Criminal, value ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Owner + { + get{ return m_Owner; } + } + + public void TurnToBones() + { + if ( Deleted ) + return; + + ProcessDelta(); + SendRemovePacket(); + ItemID = Utility.Random( 0xECA, 9 ); // bone graphic + Hue = 0; + ProcessDelta(); + + SetFlag( CorpseFlag.NoBones, true ); + SetFlag( CorpseFlag.IsBones, true ); + + BeginDecay( m_BoneDecayTime ); + } + + private static TimeSpan m_DefaultDecayTime = TimeSpan.FromMinutes( 7.0 ); + private static TimeSpan m_BoneDecayTime = TimeSpan.FromMinutes( 7.0 ); + + private Timer m_DecayTimer; + private DateTime m_DecayTime; + + public void BeginDecay( TimeSpan delay ) + { + if ( m_DecayTimer != null ) + m_DecayTimer.Stop(); + + m_DecayTime = DateTime.Now + delay; + + m_DecayTimer = new InternalTimer( this, delay ); + m_DecayTimer.Start(); + } + + public override void OnAfterDelete() + { + if ( m_DecayTimer != null ) + m_DecayTimer.Stop(); + + m_DecayTimer = null; + } + + private class InternalTimer : Timer + { + private Corpse m_Corpse; + + public InternalTimer( Corpse c, TimeSpan delay ) : base( delay ) + { + m_Corpse = c; + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + if ( !m_Corpse.GetFlag( CorpseFlag.NoBones ) ) + m_Corpse.TurnToBones(); + else + m_Corpse.Delete(); + } + } + + public static string GetCorpseName( Mobile m ) + { + Type t = m.GetType(); + + object[] attrs = t.GetCustomAttributes( typeof( CorpseNameAttribute ), true ); + + if ( attrs != null && attrs.Length > 0 ) + { + CorpseNameAttribute attr = attrs[0] as CorpseNameAttribute; + + if ( attr != null ) + return attr.Name; + } + + return null; + } + + public static void Initialize() + { + Mobile.CreateCorpseHandler += new CreateCorpseHandler( Mobile_CreateCorpseHandler ); + } + + public static Container Mobile_CreateCorpseHandler( Mobile owner, HairInfo hair, FacialHairInfo facialhair, List initialContent, List equipItems ) + { + bool shouldFillCorpse = true; + + //if ( owner is BaseCreature ) + // shouldFillCorpse = !((BaseCreature)owner).IsBonded; + + Corpse c = new Corpse( owner, hair, facialhair, shouldFillCorpse ? equipItems : new List() ); + + owner.Corpse = c; + + if ( shouldFillCorpse ) + { + for ( int i = 0; i < initialContent.Count; ++i ) + { + Item item = initialContent[i]; + + c.DropItem( item ); + } + } + else + { + c.Carved = true; // TODO: Is it needed? + } + + Point3D loc = owner.Location; + Map map = owner.Map; + + if ( map == null || map == Map.Internal ) + { + loc = owner.LogoutLocation; + map = owner.LogoutMap; + } + + c.MoveToWorld( loc, map ); + + return c; + } + + public override bool IsPublicContainer{ get{ return true; } } + + public Corpse( Mobile owner, List equipItems ) : this( owner, null, null, equipItems ) + { + } + + public Corpse( Mobile owner, HairInfo hair, FacialHairInfo facialhair, List equipItems ) + : base( 0x2006 ) + { + // To supress console warnings, stackable must be true + Stackable = true; + Amount = owner.Body; // protocol defines that for itemid 0x2006, amount=body + Stackable = false; + + Movable = false; + Hue = owner.Hue; + Direction = owner.Direction; + Name = owner.Name; + + m_Owner = owner; + + m_CorpseName = GetCorpseName( owner ); + + m_TimeOfDeath = DateTime.Now; + + m_AccessLevel = owner.AccessLevel; + m_Guild = owner.Guild as Guild; + m_Kills = owner.Kills; + SetFlag( CorpseFlag.Criminal, owner.Criminal ); + + m_Hair = hair; + m_FacialHair = facialhair; + + + // This corpse does not turn to bones if: the owner is not a player + SetFlag( CorpseFlag.NoBones, !owner.Player ); + + m_Looters = new List(); + m_EquipItems = equipItems; + + m_Aggressors = new List( owner.Aggressors.Count + owner.Aggressed.Count ); + //bool addToAggressors = !( owner is BaseCreature ); + + bool isBaseCreature = (owner is BaseCreature); + + TimeSpan lastTime = TimeSpan.MaxValue; + + for ( int i = 0; i < owner.Aggressors.Count; ++i ) + { + AggressorInfo info = owner.Aggressors[i]; + + if ( (DateTime.Now - info.LastCombatTime) < lastTime ) + { + m_Killer = info.Attacker; + lastTime = (DateTime.Now - info.LastCombatTime); + } + + if ( !isBaseCreature && !info.CriminalAggression ) + m_Aggressors.Add( info.Attacker ); + } + + for ( int i = 0; i < owner.Aggressed.Count; ++i ) + { + AggressorInfo info = owner.Aggressed[i]; + + if ( (DateTime.Now - info.LastCombatTime) < lastTime ) + { + m_Killer = info.Defender; + lastTime = (DateTime.Now - info.LastCombatTime); + } + + if ( !isBaseCreature ) + m_Aggressors.Add( info.Defender ); + } + + if ( isBaseCreature ) + { + BaseCreature bc = (BaseCreature)owner; + + Mobile master = bc.GetMaster(); + if( master != null ) + m_Aggressors.Add( master ); + + List rights = BaseCreature.GetLootingRights( bc.DamageEntries, bc.HitsMax ); + for ( int i = 0; i < rights.Count; ++i ) + { + DamageStore ds = rights[i]; + + if ( ds.m_HasRight ) + m_Aggressors.Add( ds.m_Mobile ); + } + } + + BeginDecay( m_DefaultDecayTime ); + + DevourCorpse(); + } + + public Corpse( Serial serial ) : base( serial ) + { + } + + protected bool GetFlag( CorpseFlag flag ) + { + return ((m_Flags & flag) != 0); + } + + protected void SetFlag( CorpseFlag flag, bool on ) + { + m_Flags = (on ? m_Flags | flag : m_Flags & ~flag); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 11 ); // version + + writer.Write( (int)m_Flags ); + + writer.WriteDeltaTime( m_TimeOfDeath ); + + List> list = ( m_RestoreTable == null ? null : new List>( m_RestoreTable ) ); + int count = ( list == null ? 0 : list.Count ); + + writer.Write( count ); + + for ( int i = 0; i < count; ++i ) + { + KeyValuePair kvp = list[i]; + Item item = kvp.Key; + Point3D loc = kvp.Value; + + writer.Write( item ); + + if ( item.Location == loc ) + { + writer.Write( false ); + } + else + { + writer.Write( true ); + writer.Write( loc ); + } + } + + writer.Write( m_DecayTimer != null ); + + if ( m_DecayTimer != null ) + writer.WriteDeltaTime( m_DecayTime ); + + writer.Write( m_Looters ); + writer.Write( m_Killer ); + + writer.Write( m_Aggressors ); + + writer.Write( m_Owner ); + + writer.Write( (string) m_CorpseName ); + + writer.Write( (int) m_AccessLevel ); + writer.Write( (Guild) m_Guild ); + writer.Write( (int) m_Kills ); + + writer.Write( m_EquipItems ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 11: + { + // Version 11, we move all bools to a CorpseFlag + m_Flags = (CorpseFlag)reader.ReadInt(); + + m_TimeOfDeath = reader.ReadDeltaTime(); + + int count = reader.ReadInt(); + + for( int i = 0; i < count; ++i ) + { + Item item = reader.ReadItem(); + + if( reader.ReadBool() ) + SetRestoreInfo( item, reader.ReadPoint3D() ); + else if( item != null ) + SetRestoreInfo( item, item.Location ); + } + + if( reader.ReadBool() ) + BeginDecay( reader.ReadDeltaTime() - DateTime.Now ); + + m_Looters = reader.ReadStrongMobileList(); + m_Killer = reader.ReadMobile(); + + m_Aggressors = reader.ReadStrongMobileList(); + m_Owner = reader.ReadMobile(); + + m_CorpseName = reader.ReadString(); + + m_AccessLevel = (AccessLevel)reader.ReadInt(); + reader.ReadInt(); // guild reserve + m_Kills = reader.ReadInt(); + + m_EquipItems = reader.ReadStrongItemList(); + break; + } + case 10: + { + m_TimeOfDeath = reader.ReadDeltaTime(); + + goto case 9; + } + case 9: + { + int count = reader.ReadInt(); + + for ( int i = 0; i < count; ++i ) + { + Item item = reader.ReadItem(); + + if ( reader.ReadBool() ) + SetRestoreInfo( item, reader.ReadPoint3D() ); + else if ( item != null ) + SetRestoreInfo( item, item.Location ); + } + + goto case 8; + } + case 8: + { + SetFlag( CorpseFlag.VisitedByTaxidermist, reader.ReadBool() ); + + goto case 7; + } + case 7: + { + if ( reader.ReadBool() ) + BeginDecay( reader.ReadDeltaTime() - DateTime.Now ); + + goto case 6; + } + case 6: + { + m_Looters = reader.ReadStrongMobileList(); + m_Killer = reader.ReadMobile(); + + goto case 5; + } + case 5: + { + SetFlag( CorpseFlag.Carved, reader.ReadBool() ); + + goto case 4; + } + case 4: + { + m_Aggressors = reader.ReadStrongMobileList(); + + goto case 3; + } + case 3: + { + m_Owner = reader.ReadMobile(); + + goto case 2; + } + case 2: + { + SetFlag( CorpseFlag.NoBones, reader.ReadBool() ); + + goto case 1; + } + case 1: + { + m_CorpseName = reader.ReadString(); + + goto case 0; + } + case 0: + { + if ( version < 10 ) + m_TimeOfDeath = DateTime.Now; + + if ( version < 7 ) + BeginDecay( m_DefaultDecayTime ); + + if ( version < 6 ) + m_Looters = new List(); + + if ( version < 4 ) + m_Aggressors = new List(); + + m_AccessLevel = (AccessLevel)reader.ReadInt(); + reader.ReadInt(); // guild reserve + m_Kills = reader.ReadInt(); + SetFlag( CorpseFlag.Criminal, reader.ReadBool() ); + + m_EquipItems = reader.ReadStrongItemList(); + + break; + } + } + } + + public bool DevourCorpse() + { + if( Devoured || Deleted || m_Killer == null || m_Killer.Deleted || !m_Killer.Alive || !(m_Killer is IDevourer) || m_Owner == null || m_Owner.Deleted ) + return false; + + m_Devourer = (IDevourer)m_Killer; // Set the devourer the killer + return m_Devourer.Devour( this ); // Devour the corpse if it hasn't + } + + public override void SendInfoTo( NetState state, bool sendOplPacket ) + { + base.SendInfoTo( state, sendOplPacket ); + + if ( ItemID == 0x2006 ) + { + state.Send( new CorpseContent( state.Mobile, this ) ); + state.Send( new CorpseEquip( state.Mobile, this ) ); + } + } + + public bool IsCriminalAction( Mobile from ) + { + if ( from == m_Owner || from.AccessLevel >= AccessLevel.GameMaster ) + return false; + + Party p = Party.Get( m_Owner ); + + if ( p != null && p.Contains( from ) ) + { + PartyMemberInfo pmi = p[m_Owner]; + + if ( pmi != null && pmi.CanLoot ) + return false; + } + + return ( NotorietyHandlers.CorpseNotoriety( from, this ) == Notoriety.Innocent ); + } + + public override bool CheckItemUse( Mobile from, Item item ) + { + if ( !base.CheckItemUse( from, item ) ) + return false; + + if ( item != this ) + return CanLoot( from, item ); + + return true; + } + + public override bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + if ( !base.CheckLift( from, item, ref reject ) ) + return false; + + return CanLoot( from,item ); + } + + public override void OnItemUsed( Mobile from, Item item ) + { + base.OnItemUsed( from, item ); + + if ( item is Food ) + from.RevealingAction(); + + if ( item != this && IsCriminalAction( from ) ) + from.CriminalAction( true ); + + if ( !m_Looters.Contains( from ) ) + m_Looters.Add( from ); + } + + public override void OnItemLifted( Mobile from, Item item ) + { + base.OnItemLifted( from, item ); + + if ( item != this && from != m_Owner ) + from.RevealingAction(); + + if ( item != this && IsCriminalAction( from ) ) + from.CriminalAction( true ); + + if ( !m_Looters.Contains( from ) ) + m_Looters.Add( from ); + } + + private class OpenCorpseEntry : ContextMenuEntry + { + public OpenCorpseEntry() : base( 6215, 2 ) + { + } + + public override void OnClick() + { + Corpse corpse = Owner.Target as Corpse; + + if ( corpse != null && Owner.From.CheckAlive() ) + corpse.Open( Owner.From ); + } + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + } + + private Dictionary m_RestoreTable; + + public bool GetRestoreInfo( Item item, ref Point3D loc ) + { + if ( m_RestoreTable == null || item == null ) + return false; + + return m_RestoreTable.TryGetValue( item, out loc ); + } + + public void SetRestoreInfo( Item item, Point3D loc ) + { + if ( item == null ) + return; + + if ( m_RestoreTable == null ) + m_RestoreTable = new Dictionary(); + + m_RestoreTable[item] = loc; + } + + public void ClearRestoreInfo( Item item ) + { + if ( m_RestoreTable == null || item == null ) + return; + + m_RestoreTable.Remove( item ); + + if ( m_RestoreTable.Count == 0 ) + m_RestoreTable = null; + } + + public bool CanLoot( Mobile from, Item item ) + { + if ( !IsCriminalAction( from ) ) + return true; + + Map map = this.Map; + + if ( map == null || (map.Rules & MapRules.HarmfulRestrictions) != 0 ) + return false; + + return true; + } + + public bool CheckLoot( Mobile from, Item item ) + { + if ( !CanLoot( from, item ) ) + { + if ( m_Owner == null || !m_Owner.Player ) + from.SendLocalizedMessage( 1005035 ); // You did not earn the right to loot this creature! + else + from.SendLocalizedMessage( 1010049 ); // You may not loot this corpse. + + return false; + } + else if ( IsCriminalAction( from ) ) + { + if ( m_Owner == null || !m_Owner.Player ) + from.SendLocalizedMessage( 1005036 ); // Looting this monster corpse will be a criminal act! + else + from.SendLocalizedMessage( 1005038 ); // Looting this corpse will be a criminal act! + } + + return true; + } + + public virtual void Open( Mobile from ) + { + if ( from.AccessLevel > AccessLevel.Player || from.InRange( this.GetWorldLocation(), 2 ) ) + { + if ( !CheckLoot( from, null ) ) + return; + + base.OnDoubleClick( from ); + } + else + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + return; + } + } + + public override void OnDoubleClick( Mobile from ) + { + Open( from ); + } + + public override bool CheckContentDisplay( Mobile from ) + { + return false; + } + + public override bool DisplaysContent{ get{ return false; } } + + public override void AddNameProperty( ObjectPropertyList list ) + { + if ( ItemID == 0x2006 ) // Corpse form + { + if ( m_CorpseName != null ) + list.Add( m_CorpseName ); + else + list.Add( 1046414, this.Name ); // the remains of ~1_NAME~ + } + else // Bone form + { + list.Add( 1046414, this.Name ); // the remains of ~1_NAME~ + } + } + + public override void OnSingleClick( Mobile from ) + { + int hue = Notoriety.GetHue( NotorietyHandlers.CorpseNotoriety( from, this ) ); + + if ( ItemID == 0x2006 ) // Corpse form + { + if ( m_CorpseName != null ) + from.Send( new AsciiMessage( Serial, ItemID, MessageType.Label, hue, 3, "", m_CorpseName ) ); + else + from.Send( new MessageLocalized( Serial, ItemID, MessageType.Label, hue, 3, 1046414, "", Name ) ); + } + else // Bone form + { + from.Send( new MessageLocalized( Serial, ItemID, MessageType.Label, hue, 3, 1046414, "", Name ) ); + } + } + + public void Carve( Mobile from, Item item ) + { + if ( IsCriminalAction( from ) && this.Map != null && (this.Map.Rules & MapRules.HarmfulRestrictions) != 0 ) + { + if ( m_Owner == null || !m_Owner.Player ) + from.SendLocalizedMessage( 1005035 ); // You did not earn the right to loot this creature! + else + from.SendLocalizedMessage( 1010049 ); // You may not loot this corpse. + + return; + } + + Mobile dead = m_Owner; + + if ( GetFlag( CorpseFlag.Carved ) || dead == null ) + { + from.SendLocalizedMessage( 500485 ); // You see nothing useful to carve from the corpse. + } + else if ( ((Body)Amount).IsHuman && ItemID == 0x2006 ) + { + new Blood( 0x122D ).MoveToWorld( Location, Map ); + + new Torso().MoveToWorld( Location, Map ); + new LeftLeg().MoveToWorld( Location, Map ); + new LeftArm().MoveToWorld( Location, Map ); + new RightLeg().MoveToWorld( Location, Map ); + new RightArm().MoveToWorld( Location, Map ); + new Head( dead.Name ).MoveToWorld( Location, Map ); + + SetFlag( CorpseFlag.Carved, true ); + + ProcessDelta(); + SendRemovePacket(); + ItemID = Utility.Random( 0xECA, 9 ); // bone graphic + Hue = 0; + ProcessDelta(); + + if ( IsCriminalAction( from ) ) + from.CriminalAction( true ); + } + else if ( dead is BaseCreature ) + { + ((BaseCreature)dead).OnCarve( from, this, item ); + } + else + { + from.SendLocalizedMessage( 500485 ); // You see nothing useful to carve from the corpse. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Corpses/CorpseNameAttribute.cs b/Scripts/Items/Misc/Corpses/CorpseNameAttribute.cs new file mode 100644 index 0000000..d71d3f9 --- /dev/null +++ b/Scripts/Items/Misc/Corpses/CorpseNameAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace Server +{ + [AttributeUsage( AttributeTargets.Class )] + public class CorpseNameAttribute : Attribute + { + private string m_Name; + + public string Name + { + get{ return m_Name; } + } + + public CorpseNameAttribute( string name ) + { + m_Name = name; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Corpses/DecayedCorpse.cs b/Scripts/Items/Misc/Corpses/DecayedCorpse.cs new file mode 100644 index 0000000..7d3ea52 --- /dev/null +++ b/Scripts/Items/Misc/Corpses/DecayedCorpse.cs @@ -0,0 +1,115 @@ +using System; +using Server; + +namespace Server.Items +{ + public class DecayedCorpse : Container + { + private Timer m_DecayTimer; + private DateTime m_DecayTime; + + private static TimeSpan m_DefaultDecayTime = TimeSpan.FromMinutes( 7.0 ); + + public DecayedCorpse( string name ) : base( Utility.Random( 0xECA, 9 ) ) + { + Movable = false; + Name = name; + + BeginDecay( m_DefaultDecayTime ); + } + + public void BeginDecay( TimeSpan delay ) + { + if ( m_DecayTimer != null ) + m_DecayTimer.Stop(); + + m_DecayTime = DateTime.Now + delay; + + m_DecayTimer = new InternalTimer( this, delay ); + m_DecayTimer.Start(); + } + + public override void OnAfterDelete() + { + if ( m_DecayTimer != null ) + m_DecayTimer.Stop(); + + m_DecayTimer = null; + } + + private class InternalTimer : Timer + { + private DecayedCorpse m_Corpse; + + public InternalTimer( DecayedCorpse c, TimeSpan delay ) : base( delay ) + { + m_Corpse = c; + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + m_Corpse.Delete(); + } + } + + // Do not display (x items, y stones) + public override bool CheckContentDisplay( Mobile from ) + { + return false; + } + + // Do not display (x items, y stones) + public override bool DisplaysContent{ get{ return false; } } + + public override void AddNameProperty( ObjectPropertyList list ) + { + list.Add( 1046414, Name ); // the remains of ~1_NAME~ + } + + public override void OnSingleClick( Mobile from ) + { + this.LabelTo( from, 1046414, Name ); // the remains of ~1_NAME~ + } + + public DecayedCorpse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_DecayTimer != null ); + + if ( m_DecayTimer != null ) + writer.WriteDeltaTime( m_DecayTime ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + BeginDecay( m_DefaultDecayTime ); + + break; + } + case 1: + { + if ( reader.ReadBool() ) + BeginDecay( reader.ReadDeltaTime() - DateTime.Now ); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Corpses/Packets.cs b/Scripts/Items/Misc/Corpses/Packets.cs new file mode 100644 index 0000000..0f7bca6 --- /dev/null +++ b/Scripts/Items/Misc/Corpses/Packets.cs @@ -0,0 +1,125 @@ +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; + +namespace Server.Network +{ + public sealed class CorpseEquip : Packet + { + public CorpseEquip( Mobile beholder, Corpse beheld ) : base( 0x89 ) + { + List list = beheld.EquipItems; + + int count = list.Count; + if( beheld.Hair != null && beheld.Hair.ItemID > 0 ) + count++; + if( beheld.FacialHair != null && beheld.FacialHair.ItemID > 0 ) + count++; + + EnsureCapacity( 8 + (count * 5) ); + + m_Stream.Write( (int) beheld.Serial ); + + for ( int i = 0; i < list.Count; ++i ) + { + Item item = list[i]; + + if ( !item.Deleted && beholder.CanSee( item ) && item.Parent == beheld ) + { + m_Stream.Write( (byte) (item.Layer + 1) ); + m_Stream.Write( (int) item.Serial ); + } + } + + if( beheld.Hair != null && beheld.Hair.ItemID > 0 ) + { + m_Stream.Write( (byte)(Layer.Hair + 1) ); + m_Stream.Write( (int)HairInfo.FakeSerial( beheld.Owner ) - 2 ); + } + + if( beheld.FacialHair != null && beheld.FacialHair.ItemID > 0 ) + { + m_Stream.Write( (byte)(Layer.FacialHair + 1) ); + m_Stream.Write( (int)FacialHairInfo.FakeSerial( beheld.Owner ) - 2 ); + } + + m_Stream.Write( (byte) Layer.Invalid ); + } + } + + public sealed class CorpseContent : Packet + { + public CorpseContent( Mobile beholder, Corpse beheld ) + : base( 0x3C ) + { + List items = beheld.EquipItems; + int count = items.Count; + + if( beheld.Hair != null && beheld.Hair.ItemID > 0 ) + count++; + if( beheld.FacialHair != null && beheld.FacialHair.ItemID > 0 ) + count++; + + EnsureCapacity( 5 + (count * 19) ); + + long pos = m_Stream.Position; + + int written = 0; + + m_Stream.Write( (ushort)0 ); + + for( int i = 0; i < items.Count; ++i ) + { + Item child = items[i]; + + if( !child.Deleted && child.Parent == beheld && beholder.CanSee( child ) ) + { + m_Stream.Write( (int)child.Serial ); + m_Stream.Write( (ushort)child.ItemID ); + m_Stream.Write( (byte)0 ); // signed, itemID offset + m_Stream.Write( (ushort)child.Amount ); + m_Stream.Write( (short)child.X ); + m_Stream.Write( (short)child.Y ); + m_Stream.Write( (int)beheld.Serial ); + m_Stream.Write( (ushort)child.Hue ); + + ++written; + } + } + + if( beheld.Hair != null && beheld.Hair.ItemID > 0 ) + { + m_Stream.Write( (int)HairInfo.FakeSerial( beheld.Owner ) - 2 ); + m_Stream.Write( (ushort)beheld.Hair.ItemID ); + m_Stream.Write( (byte)0 ); // signed, itemID offset + m_Stream.Write( (ushort)1 ); + m_Stream.Write( (short)0 ); + m_Stream.Write( (short)0 ); + m_Stream.Write( (int)beheld.Serial ); + m_Stream.Write( (ushort)beheld.Hair.Hue ); + + ++written; + } + + if( beheld.FacialHair != null && beheld.FacialHair.ItemID > 0 ) + { + m_Stream.Write( (int)FacialHairInfo.FakeSerial( beheld.Owner ) - 2 ); + m_Stream.Write( (ushort)beheld.FacialHair.ItemID ); + m_Stream.Write( (byte)0 ); // signed, itemID offset + m_Stream.Write( (ushort)1 ); + m_Stream.Write( (short)0 ); + m_Stream.Write( (short)0 ); + m_Stream.Write( (int)beheld.Serial ); + m_Stream.Write( (ushort)beheld.FacialHair.Hue ); + + ++written; + } + + m_Stream.Seek( pos, SeekOrigin.Begin ); + m_Stream.Write( (ushort)written ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/EffectController.cs b/Scripts/Items/Misc/EffectController.cs new file mode 100644 index 0000000..59d51cb --- /dev/null +++ b/Scripts/Items/Misc/EffectController.cs @@ -0,0 +1,339 @@ +using System; + +namespace Server.Items +{ + public enum ECEffectType + { + None, + Moving, + Location, + Target, + Lightning + } + + public enum EffectTriggerType + { + None, + Sequenced, + DoubleClick, + InRange + } + + public class EffectController : Item + { + private TimeSpan m_EffectDelay; + + private ECEffectType m_EffectType; + private EffectTriggerType m_TriggerType; + + private IEntity m_Source; + private IEntity m_Target; + + private TimeSpan m_TriggerDelay; + private EffectController m_Trigger; + + private int m_ItemID; + private int m_Hue; + private int m_RenderMode; + + private int m_Speed; + private int m_Duration; + + private bool m_FixedDirection; + private bool m_Explodes; + + private int m_ParticleEffect; + private int m_ExplodeParticleEffect; + private int m_ExplodeSound; + + private EffectLayer m_EffectLayer; + private int m_Unknown; + + private TimeSpan m_SoundDelay; + private int m_SoundID; + private bool m_PlaySoundAtTrigger; + + private int m_TriggerRange; + + [CommandProperty( AccessLevel.GameMaster )] + public ECEffectType EffectType{ get{ return m_EffectType; } set{ m_EffectType = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public EffectTriggerType TriggerType{ get{ return m_TriggerType; } set{ m_TriggerType = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public EffectLayer EffectLayer{ get{ return m_EffectLayer; } set{ m_EffectLayer = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan EffectDelay{ get{ return m_EffectDelay; } set{ m_EffectDelay = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan TriggerDelay{ get{ return m_TriggerDelay; } set{ m_TriggerDelay = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan SoundDelay{ get{ return m_SoundDelay; } set{ m_SoundDelay = value; } } + + + [CommandProperty( AccessLevel.GameMaster )] + public Item SourceItem{ get{ return m_Source as Item; } set{ m_Source = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile SourceMobile{ get{ return m_Source as Mobile; } set{ m_Source = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool SourceNull{ get{ return ( m_Source == null ); } set{ if ( value ) m_Source = null; } } + + + [CommandProperty( AccessLevel.GameMaster )] + public Item TargetItem{ get{ return m_Target as Item; } set{ m_Target = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile TargetMobile{ get{ return m_Target as Mobile; } set{ m_Target = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool TargetNull{ get{ return ( m_Target == null ); } set{ if ( value ) m_Target = null; } } + + + [CommandProperty( AccessLevel.GameMaster )] + public EffectController Sequence{ get{ return m_Trigger; } set{ m_Trigger = value; } } + + + [CommandProperty( AccessLevel.GameMaster )] + private bool FixedDirection{ get{ return m_FixedDirection; } set{ m_FixedDirection = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + private bool Explodes{ get{ return m_Explodes; } set{ m_Explodes = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + private bool PlaySoundAtTrigger{ get{ return m_PlaySoundAtTrigger; } set{ m_PlaySoundAtTrigger = value; } } + + + [CommandProperty( AccessLevel.GameMaster )] + public int EffectItemID{ get{ return m_ItemID; } set{ m_ItemID = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int EffectHue{ get{ return m_Hue; } set{ m_Hue = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int RenderMode{ get{ return m_RenderMode; } set{ m_RenderMode = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int Speed{ get{ return m_Speed; } set{ m_Speed = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int Duration{ get{ return m_Duration; } set{ m_Duration = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int ParticleEffect{ get{ return m_ParticleEffect; } set{ m_ParticleEffect = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int ExplodeParticleEffect{ get{ return m_ExplodeParticleEffect; } set{ m_ExplodeParticleEffect = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int ExplodeSound{ get{ return m_ExplodeSound; } set{ m_ExplodeSound = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int Unknown{ get{ return m_Unknown; } set{ m_Unknown = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int SoundID{ get{ return m_SoundID; } set{ m_SoundID = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int TriggerRange{ get{ return m_TriggerRange; } set{ m_TriggerRange = value; } } + + public override string DefaultName + { + get { return "Effect Controller"; } + } + + [Constructable] + public EffectController() : base( 0x1B72 ) + { + Movable = false; + Visible = false; + m_TriggerType = EffectTriggerType.Sequenced; + m_EffectLayer = (EffectLayer)255; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_TriggerType == EffectTriggerType.DoubleClick ) + DoEffect( from ); + } + + public override bool HandlesOnMovement{ get{ return ( m_TriggerType == EffectTriggerType.InRange ); } } + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( m.Location != oldLocation && m_TriggerType == EffectTriggerType.InRange && Utility.InRange( GetWorldLocation(), m.Location, m_TriggerRange ) && !Utility.InRange( GetWorldLocation(), oldLocation, m_TriggerRange ) ) + DoEffect( m ); + } + + public EffectController( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_EffectDelay ); + writer.Write( m_TriggerDelay ); + writer.Write( m_SoundDelay ); + + if ( m_Source is Item ) + writer.Write( m_Source as Item ); + else + writer.Write( m_Source as Mobile ); + + if ( m_Target is Item ) + writer.Write( m_Target as Item ); + else + writer.Write( m_Target as Mobile ); + + writer.Write( m_Trigger as Item ); + + writer.Write( m_FixedDirection ); + writer.Write( m_Explodes ); + writer.Write( m_PlaySoundAtTrigger ); + + writer.WriteEncodedInt( (int) m_EffectType ); + writer.WriteEncodedInt( (int) m_EffectLayer ); + writer.WriteEncodedInt( (int) m_TriggerType ); + + writer.WriteEncodedInt( m_ItemID ); + writer.WriteEncodedInt( m_Hue ); + writer.WriteEncodedInt( m_RenderMode ); + writer.WriteEncodedInt( m_Speed ); + writer.WriteEncodedInt( m_Duration ); + writer.WriteEncodedInt( m_ParticleEffect ); + writer.WriteEncodedInt( m_ExplodeParticleEffect ); + writer.WriteEncodedInt( m_ExplodeSound ); + writer.WriteEncodedInt( m_Unknown ); + writer.WriteEncodedInt( m_SoundID ); + writer.WriteEncodedInt( m_TriggerRange ); + } + + private IEntity ReadEntity( GenericReader reader ) + { + return World.FindEntity( reader.ReadInt() ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_EffectDelay = reader.ReadTimeSpan(); + m_TriggerDelay = reader.ReadTimeSpan(); + m_SoundDelay = reader.ReadTimeSpan(); + + m_Source = ReadEntity( reader ); + m_Target = ReadEntity( reader ); + m_Trigger = reader.ReadItem() as EffectController; + + m_FixedDirection = reader.ReadBool(); + m_Explodes = reader.ReadBool(); + m_PlaySoundAtTrigger = reader.ReadBool(); + + m_EffectType = (ECEffectType)reader.ReadEncodedInt(); + m_EffectLayer = (EffectLayer)reader.ReadEncodedInt(); + m_TriggerType = (EffectTriggerType)reader.ReadEncodedInt(); + + m_ItemID = reader.ReadEncodedInt(); + m_Hue = reader.ReadEncodedInt(); + m_RenderMode = reader.ReadEncodedInt(); + m_Speed = reader.ReadEncodedInt(); + m_Duration = reader.ReadEncodedInt(); + m_ParticleEffect = reader.ReadEncodedInt(); + m_ExplodeParticleEffect = reader.ReadEncodedInt(); + m_ExplodeSound = reader.ReadEncodedInt(); + m_Unknown = reader.ReadEncodedInt(); + m_SoundID = reader.ReadEncodedInt(); + m_TriggerRange = reader.ReadEncodedInt(); + + break; + } + } + } + + public void PlaySound( object trigger ) + { + IEntity ent = null; + + if ( m_PlaySoundAtTrigger ) + ent = trigger as IEntity; + + if ( ent == null ) + ent = this; + + Effects.PlaySound( (ent is Item) ? ((Item)ent).GetWorldLocation() : ent.Location, ent.Map, m_SoundID ); + } + + public void DoEffect( object trigger ) + { + if ( Deleted || m_TriggerType == EffectTriggerType.None ) + return; + + if( trigger is Mobile && ((Mobile)trigger).Hidden && ((Mobile)trigger).AccessLevel > AccessLevel.Player ) + return; + + if ( m_SoundID > 0 ) + Timer.DelayCall( m_SoundDelay, new TimerStateCallback( PlaySound ), trigger ); + + if ( m_Trigger != null ) + Timer.DelayCall( m_TriggerDelay, new TimerStateCallback( m_Trigger.DoEffect ), trigger ); + + if ( m_EffectType != ECEffectType.None ) + Timer.DelayCall( m_EffectDelay, new TimerStateCallback( InternalDoEffect ), trigger ); + } + + public void InternalDoEffect( object trigger ) + { + IEntity from = m_Source, to = m_Target; + + if ( from == null ) + from = (IEntity)trigger; + + if ( to == null ) + to = (IEntity)trigger; + + switch ( m_EffectType ) + { + case ECEffectType.Lightning: + { + Effects.SendBoltEffect( from, false, m_Hue ); + break; + } + case ECEffectType.Location: + { + Effects.SendLocationParticles( EffectItem.Create( from.Location, from.Map, EffectItem.DefaultDuration ), m_ItemID, m_Speed, m_Duration, m_Hue, m_RenderMode, m_ParticleEffect, m_Unknown ); + break; + } + case ECEffectType.Moving: + { + if ( from == this ) + from = EffectItem.Create( from.Location, from.Map, EffectItem.DefaultDuration ); + + if ( to == this ) + to = EffectItem.Create( to.Location, to.Map, EffectItem.DefaultDuration ); + + Effects.SendMovingParticles( from, to, m_ItemID, m_Speed, m_Duration, m_FixedDirection, m_Explodes, m_Hue, m_RenderMode, m_ParticleEffect, m_ExplodeParticleEffect, m_ExplodeSound, m_EffectLayer, m_Unknown ); + break; + } + case ECEffectType.Target: + { + Effects.SendTargetParticles( from, m_ItemID, m_Speed, m_Duration, m_Hue, m_RenderMode, m_ParticleEffect, m_EffectLayer, m_Unknown ); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/EffectItem.cs b/Scripts/Items/Misc/EffectItem.cs new file mode 100644 index 0000000..d5d5b85 --- /dev/null +++ b/Scripts/Items/Misc/EffectItem.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections; +using Server; +using System.Collections.Generic; + +namespace Server.Items +{ + public class EffectItem : Item + { + private static List m_Free = new List(); // List of available EffectItems + + public static readonly TimeSpan DefaultDuration = TimeSpan.FromSeconds( 5.0 ); + + public static EffectItem Create( Point3D p, Map map, TimeSpan duration ) + { + EffectItem item = null; + + for ( int i = m_Free.Count - 1; item == null && i >= 0; --i ) // We reuse new entries first so decay works better + { + EffectItem free = m_Free[i]; + + m_Free.RemoveAt( i ); + + if ( !free.Deleted && free.Map == Map.Internal ) + item = free; + } + + if ( item == null ) + item = new EffectItem(); + else + item.ItemID = 1; + + item.MoveToWorld( p, map ); + item.BeginFree( duration ); + + return item; + } + + private EffectItem() : base( 1 ) // nodraw + { + Movable = false; + } + + public void BeginFree( TimeSpan duration ) + { + new FreeTimer( this, duration ).Start(); + } + + public override bool Decays + { + get + { + return true; + } + } + + public EffectItem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + Delete(); + } + + private class FreeTimer : Timer + { + private EffectItem m_Item; + + public FreeTimer( EffectItem item, TimeSpan delay ) : base( delay ) + { + m_Item = item; + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + m_Item.Internalize(); + + m_Free.Add( m_Item ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/FlipableAddonAttribute.cs b/Scripts/Items/Misc/FlipableAddonAttribute.cs new file mode 100644 index 0000000..d03997f --- /dev/null +++ b/Scripts/Items/Misc/FlipableAddonAttribute.cs @@ -0,0 +1,130 @@ +using System; +using System.Reflection; +using System.Collections.Generic; +using Server.Multis; + +namespace Server.Items +{ + [AttributeUsage( AttributeTargets.Class )] + public class FlipableAddonAttribute : Attribute + { + private static string m_MethodName = "Flip"; + + private static Type[] m_Params = new Type[] + { + typeof( Mobile ), typeof( Direction ) + }; + + private Direction[] m_Directions; + + public Direction[] Directions + { + get { return m_Directions; } + } + + public FlipableAddonAttribute( params Direction[] directions ) + { + m_Directions = directions; + } + + public virtual void Flip( Mobile from, Item addon ) + { + if ( m_Directions != null && m_Directions.Length > 1 ) + { + try + { + MethodInfo flipMethod = addon.GetType().GetMethod( m_MethodName, m_Params ); + + if ( flipMethod != null ) + { + int index = 0; + + for ( int i = 0; i < m_Directions.Length; i++ ) + { + if ( addon.Direction == m_Directions[ i ] ) + { + index = i + 1; + break; + } + } + + if ( index >= m_Directions.Length ) + index = 0; + + ClearComponents( addon ); + + flipMethod.Invoke( addon, new object[ 2 ] { from, m_Directions[ index ] } ); + + BaseHouse house = null; + AddonFitResult result = AddonFitResult.Valid; + + addon.Map = Map.Internal; + + if ( addon is BaseAddon ) + result = ( (BaseAddon) addon ).CouldFit( addon.Location, from.Map, from, ref house ); + else if ( addon is BaseAddonContainer ) + result = ( (BaseAddonContainer) addon ).CouldFit( addon.Location, from.Map, from, ref house ); + + addon.Map = from.Map; + + if ( result != AddonFitResult.Valid ) + { + if ( index == 0 ) + index = m_Directions.Length - 1; + else + index -= 1; + + ClearComponents( addon ); + + flipMethod.Invoke( addon, new object[ 2 ] { from, m_Directions[ index ] } ); + + if ( result == AddonFitResult.Blocked ) + from.SendLocalizedMessage( 500269 ); // You cannot build that there. + else if ( result == AddonFitResult.NotInHouse ) + from.SendLocalizedMessage( 500274 ); // You can only place this in a house that you own! + else if ( result == AddonFitResult.DoorsNotClosed ) + from.SendMessage( "You must close all house doors before placing this." ); + else if ( result == AddonFitResult.DoorTooClose ) + from.SendLocalizedMessage( 500271 ); // You cannot build near the door. + else if ( result == AddonFitResult.NoWall ) + from.SendLocalizedMessage( 500268 ); // This object needs to be mounted on something. + } + + addon.Direction = m_Directions[ index ]; + } + } + catch + { + } + } + } + + private void ClearComponents( Item item ) + { + if ( item is BaseAddon ) + { + BaseAddon addon = (BaseAddon) item; + + foreach ( AddonComponent c in addon.Components ) + { + c.Addon = null; + c.Delete(); + } + + addon.Components.Clear(); + } + else if ( item is BaseAddonContainer ) + { + BaseAddonContainer addon = (BaseAddonContainer) item; + + foreach ( AddonContainerComponent c in addon.Components ) + { + c.Addon = null; + c.Delete(); + } + + addon.Components.Clear(); + } + } + } +} diff --git a/Scripts/Items/Misc/FlipableAttribute.cs b/Scripts/Items/Misc/FlipableAttribute.cs new file mode 100644 index 0000000..adac01d --- /dev/null +++ b/Scripts/Items/Misc/FlipableAttribute.cs @@ -0,0 +1,118 @@ +using System; +using Server; +using System.Reflection; +using Server.Targeting; +using Server.Commands; + +namespace Server.Items +{ + public class FlipCommandHandlers + { + public static void Initialize() + { + CommandSystem.Register( "Flip", AccessLevel.GameMaster, new CommandEventHandler( Flip_OnCommand ) ); + } + + [Usage( "Flip" )] + [Description( "Turns an item." )] + public static void Flip_OnCommand( CommandEventArgs e ) + { + e.Mobile.Target = new FlipTarget(); + } + + private class FlipTarget : Target + { + public FlipTarget() + : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if( targeted is Item ) + { + Item item = (Item)targeted; + + if( item.Movable == false && from.AccessLevel == AccessLevel.Player ) + return; + + Type type = targeted.GetType(); + + FlipableAttribute[] AttributeArray = (FlipableAttribute[])type.GetCustomAttributes( typeof( FlipableAttribute ), false ); + + if( AttributeArray.Length == 0 ) + { + return; + } + + FlipableAttribute fa = AttributeArray[0]; + + fa.Flip( (Item)targeted ); + } + } + } + } + + [AttributeUsage( AttributeTargets.Class )] + public class DynamicFlipingAttribute : Attribute + { + public DynamicFlipingAttribute() + { + } + } + + [AttributeUsage( AttributeTargets.Class )] + public class FlipableAttribute : Attribute + { + private int[] m_ItemIDs; + + public int[] ItemIDs + { + get { return m_ItemIDs; } + } + + public FlipableAttribute() + : this( null ) + { + } + + public FlipableAttribute( params int[] itemIDs ) + { + m_ItemIDs = itemIDs; + } + + public virtual void Flip( Item item ) + { + if( m_ItemIDs == null ) + { + try + { + MethodInfo flipMethod = item.GetType().GetMethod( "Flip", Type.EmptyTypes ); + if( flipMethod != null ) + flipMethod.Invoke( item, new object[0] ); + } + catch + { + } + + } + else + { + int index = 0; + for( int i = 0; i < m_ItemIDs.Length; i++ ) + { + if( item.ItemID == m_ItemIDs[i] ) + { + index = i + 1; + break; + } + } + + if( index > m_ItemIDs.Length - 1 ) + index = 0; + + item.ItemID = m_ItemIDs[index]; + } + } + } +} diff --git a/Scripts/Items/Misc/GlassItems.cs b/Scripts/Items/Misc/GlassItems.cs new file mode 100644 index 0000000..c4cd713 --- /dev/null +++ b/Scripts/Items/Misc/GlassItems.cs @@ -0,0 +1,1218 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0x182E, 0x182F, 0x1830, 0x1831 )] + public class SmallFlask : Item + { + [Constructable] + public SmallFlask() : base( 0x182E ) + { + Weight = 1.0; + Movable = true; + } + + public SmallFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x182A, 0x182B, 0x182C, 0x182D )] + public class MediumFlask : Item + { + [Constructable] + public MediumFlask() : base( 0x182A ) + { + Weight = 1.0; + Movable = true; + } + + public MediumFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x183B, 0x183C, 0x183D )] + public class LargeFlask : Item + { + [Constructable] + public LargeFlask() : base( 0x183B ) + { + Weight = 1.0; + Movable = true; + } + + public LargeFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1832, 0x1833, 0x1834, 0x1835, 0x1836, 0x1837 )] + public class CurvedFlask : Item + { + [Constructable] + public CurvedFlask() : base( 0x1832 ) + { + Weight = 1.0; + Movable = true; + } + + public CurvedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x1838, 0x1839, 0x183A )] + public class LongFlask : Item + { + [Constructable] + public LongFlask() : base( 0x1838 ) + { + Weight = 1.0; + Movable = true; + } + + public LongFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x1810, 0x1811 )] + public class SpinningHourglass : Item + { + [Constructable] + public SpinningHourglass() : base( 0x1810 ) + { + Weight = 1.0; + Movable = true; + } + + public SpinningHourglass( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GreenBottle : Item + { + [Constructable] + public GreenBottle() : base( 0x0EFB ) + { + Weight = 1.0; + Movable = true; + } + + public GreenBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class RedBottle : Item + { + [Constructable] + public RedBottle() : base( 0x0EFC ) + { + Weight = 1.0; + Movable = true; + } + + public RedBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallBrownBottle : Item + { + [Constructable] + public SmallBrownBottle() : base( 0x0EFD ) + { + Weight = 1.0; + Movable = true; + } + + public SmallBrownBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallGreenBottle : Item + { + [Constructable] + public SmallGreenBottle() : base( 0x0F01 ) + { + Weight = 1.0; + Movable = true; + } + + public SmallGreenBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallVioletBottle : Item + { + [Constructable] + public SmallVioletBottle() : base( 0x0F02 ) + { + Weight = 1.0; + Movable = true; + } + + public SmallVioletBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TinyYellowBottle : Item + { + [Constructable] + public TinyYellowBottle() : base( 0x0F03 ) + { + Weight = 1.0; + Movable = true; + } + + public TinyYellowBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + //remove + public class SmallBlueFlask : Item + { + [Constructable] + public SmallBlueFlask() : base( 0x182A ) + { + Weight = 1.0; + Movable = true; + } + + public SmallBlueFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallYellowFlask : Item + { + [Constructable] + public SmallYellowFlask() : base( 0x182B ) + { + Weight = 1.0; + Movable = true; + } + + public SmallYellowFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallRedFlask : Item + { + [Constructable] + public SmallRedFlask() : base( 0x182C ) + { + Weight = 1.0; + Movable = true; + } + + public SmallRedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallEmptyFlask : Item + { + [Constructable] + public SmallEmptyFlask() : base( 0x182D ) + { + Weight = 1.0; + Movable = true; + } + + public SmallEmptyFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class YellowBeaker : Item + { + [Constructable] + public YellowBeaker() : base( 0x182E ) + { + Weight = 1.0; + Movable = true; + } + + public YellowBeaker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class RedBeaker : Item + { + [Constructable] + public RedBeaker() : base( 0x182F ) + { + Weight = 1.0; + Movable = true; + } + + public RedBeaker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BlueBeaker : Item + { + [Constructable] + public BlueBeaker() : base( 0x1830 ) + { + Weight = 1.0; + Movable = true; + } + + public BlueBeaker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GreenBeaker : Item + { + [Constructable] + public GreenBeaker() : base( 0x1831 ) + { + Weight = 1.0; + Movable = true; + } + + public GreenBeaker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class EmptyCurvedFlaskW : Item + { + [Constructable] + public EmptyCurvedFlaskW() : base( 0x1832 ) + { + Weight = 1.0; + Movable = true; + } + + public EmptyCurvedFlaskW( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class RedCurvedFlask : Item + { + [Constructable] + public RedCurvedFlask() : base( 0x1833 ) + { + Weight = 1.0; + Movable = true; + } + + public RedCurvedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LtBlueCurvedFlask : Item + { + [Constructable] + public LtBlueCurvedFlask() : base( 0x1834 ) + { + Weight = 1.0; + Movable = true; + } + + public LtBlueCurvedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class EmptyCurvedFlaskE : Item + { + [Constructable] + public EmptyCurvedFlaskE() : base( 0x1835 ) + { + Weight = 1.0; + Movable = true; + } + + public EmptyCurvedFlaskE( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BlueCurvedFlask : Item + { + [Constructable] + public BlueCurvedFlask() : base( 0x1836 ) + { + Weight = 1.0; + Movable = true; + } + + public BlueCurvedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GreenCurvedFlask : Item + { + [Constructable] + public GreenCurvedFlask() : base( 0x1837 ) + { + Weight = 1.0; + Movable = true; + } + + public GreenCurvedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class RedRibbedFlask : Item + { + [Constructable] + public RedRibbedFlask() : base( 0x1838 ) + { + Weight = 1.0; + Movable = true; + } + + public RedRibbedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class VioletRibbedFlask : Item + { + [Constructable] + public VioletRibbedFlask() : base( 0x1839 ) + { + Weight = 1.0; + Movable = true; + } + + public VioletRibbedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class EmptyRibbedFlask : Item + { + [Constructable] + public EmptyRibbedFlask() : base( 0x183A ) + { + Weight = 1.0; + Movable = true; + } + + public EmptyRibbedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeYellowFlask : Item + { + [Constructable] + public LargeYellowFlask() : base( 0x183B ) + { + Weight = 1.0; + Movable = true; + } + + public LargeYellowFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeVioletFlask : Item + { + [Constructable] + public LargeVioletFlask() : base( 0x183C ) + { + Weight = 1.0; + Movable = true; + } + + public LargeVioletFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeEmptyFlask : Item + { + [Constructable] + public LargeEmptyFlask() : base( 0x183D ) + { + Weight = 1.0; + Movable = true; + } + + public LargeEmptyFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class AniRedRibbedFlask : Item + { + [Constructable] + public AniRedRibbedFlask() : base( 0x183E ) + { + Weight = 1.0; + Movable = true; + } + + public AniRedRibbedFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class AniLargeVioletFlask : Item + { + [Constructable] + public AniLargeVioletFlask() : base( 0x1841 ) + { + Weight = 1.0; + Movable = true; + } + + public AniLargeVioletFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class AniSmallBlueFlask : Item + { + [Constructable] + public AniSmallBlueFlask() : base( 0x1844 ) + { + Weight = 1.0; + Movable = true; + } + + public AniSmallBlueFlask( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallBlueBottle : Item + { + [Constructable] + public SmallBlueBottle() : base( 0x1847 ) + { + Weight = 1.0; + Movable = true; + } + + public SmallBlueBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallGreenBottle2 : Item + { + [Constructable] + public SmallGreenBottle2() : base( 0x1848 ) + { + Weight = 1.0; + Movable = true; + } + + public SmallGreenBottle2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x185B, 0x185C )] + public class EmptyVialsWRack : Item + { + [Constructable] + public EmptyVialsWRack() : base( 0x185B ) + { + Weight = 1.0; + Movable = true; + } + + public EmptyVialsWRack( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [FlipableAttribute( 0x185D, 0x185E )] + public class FullVialsWRack : Item + { + [Constructable] + public FullVialsWRack() : base( 0x185D ) + { + Weight = 1.0; + Movable = true; + } + + public FullVialsWRack( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + + public class EmptyVial : Item + { + [Constructable] + public EmptyVial() : base( 0x0E24 ) + { + Weight = 1.0; + Movable = true; + } + + public EmptyVial( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class HourglassAni : Item + { + [Constructable] + public HourglassAni() : base( 0x1811 ) + { + Weight = 1.0; + Movable = true; + } + + public HourglassAni( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Hourglass : Item + { + [Constructable] + public Hourglass() : base( 0x1810 ) + { + Weight = 1.0; + Movable = true; + } + + public Hourglass( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TinyRedBottle : Item + { + [Constructable] + public TinyRedBottle() : base( 0x0F04 ) + { + Weight = 1.0; + Movable = true; + } + + public TinyRedBottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Gold.cs b/Scripts/Items/Misc/Gold.cs new file mode 100644 index 0000000..08bebea --- /dev/null +++ b/Scripts/Items/Misc/Gold.cs @@ -0,0 +1,74 @@ +using System; + +namespace Server.Items +{ + public class Gold : Item + { + public override double DefaultWeight + { + get { return ( 0.02 ); } + } + + [Constructable] + public Gold() : this( 1 ) + { + } + + [Constructable] + public Gold( int amountFrom, int amountTo ) : this( Utility.RandomMinMax( amountFrom, amountTo ) ) + { + } + + [Constructable] + public Gold( int amount ) : base( 0xEED ) + { + Stackable = true; + Amount = amount; + } + + public Gold( Serial serial ) : base( serial ) + { + } + + public override int GetDropSound() + { + if ( Amount <= 1 ) + return 0x2E4; + else if ( Amount <= 5 ) + return 0x2E5; + else + return 0x2E6; + } + + protected override void OnAmountChange( int oldValue ) + { + int newValue = this.Amount; + + UpdateTotal( this, TotalType.Gold, newValue - oldValue ); + } + + public override int GetTotal( TotalType type ) + { + int baseTotal = base.GetTotal( type ); + + if ( type == TotalType.Gold ) + baseTotal += this.Amount; + + return baseTotal; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/GoldDeed.cs b/Scripts/Items/Misc/GoldDeed.cs new file mode 100644 index 0000000..923822b --- /dev/null +++ b/Scripts/Items/Misc/GoldDeed.cs @@ -0,0 +1,134 @@ +using System; +using System.Globalization; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Network; + +namespace Server.Items +{ + public class GoldDeed : Item + { + private int m_Worth; + + [CommandProperty( AccessLevel.GameMaster )] + public int Worth + { + get{ return m_Worth; } + set{ m_Worth = value; InvalidateProperties(); } + } + + public GoldDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( (int) m_Worth ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Worth = reader.ReadInt(); + break; + } + } + } + + [Constructable] + public GoldDeed( int worth ) : base( 0x14F0 ) + { + Weight = 1.0; + Hue = 0x34; + Name = "gold deed"; + m_Worth = worth; + } + + public override int LabelNumber{ get{ return 1041361; } } // A gold deed + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + string worth = m_Worth.ToString(); + + list.Add( 1060738, worth ); // value: ~1_val~ + } + + public override void OnSingleClick( Mobile from ) + { + from.Send( new MessageLocalizedAffix( Serial, ItemID, MessageType.Label, 0x3B2, 3, 1041361, "", AffixType.Append, String.Concat( " ", m_Worth.ToString() ), "" ) ); // A bank check: + } + + public override void OnDoubleClick( Mobile from ) + { + InnBox box = from.FindInnNoCreate(); + + if ( box != null && IsChildOf( box ) ) + { + Delete(); + + int deposited = 0; + + int toAdd = m_Worth; + + Gold gold; + + while ( toAdd > 60000 ) + { + gold = new Gold( 60000 ); + + if ( box.TryDropItem( from, gold, false ) ) + { + toAdd -= 60000; + deposited += 60000; + } + else + { + gold.Delete(); + + from.AddToBackpack( new GoldDeed( toAdd ) ); + toAdd = 0; + + break; + } + } + + if ( toAdd > 0 ) + { + gold = new Gold( toAdd ); + + if ( box.TryDropItem( from, gold, false ) ) + { + deposited += toAdd; + } + else + { + gold.Delete(); + + from.AddToBackpack( new GoldDeed( toAdd ) ); + } + } + + // Gold was deposited in your account: + from.SendLocalizedMessage( 1042672, true, " " + deposited.ToString() ); + } + else + { + from.SendLocalizedMessage( 1047026 ); // That must be in your inn chest to use it. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Guillotine.cs b/Scripts/Items/Misc/Guillotine.cs new file mode 100644 index 0000000..5804e31 --- /dev/null +++ b/Scripts/Items/Misc/Guillotine.cs @@ -0,0 +1,115 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Network; + +namespace Server.Items +{ + public class Guillotine : Item + { + [Constructable] + public Guillotine() + : base( 4656 ) + { + Movable = false; + } + + private DateTime m_NextUse; + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.InRange( this.GetWorldLocation(), 2 ) || !from.InLOS( this ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that + } + else if ( Visible && ( ItemID == 4656 || ItemID == 4702 ) && DateTime.Now >= m_NextUse ) + { + Point3D p = this.GetWorldLocation(); + + if ( 1 > Utility.Random( Math.Max( Math.Abs( from.X - p.X ), Math.Abs( from.Y - p.Y ) ) ) ) + { + Effects.PlaySound( from.Location, from.Map, from.GetHurtSound() ); + from.PublicOverheadMessage( MessageType.Regular, from.SpeechHue, true, "Ouch!" ); + Spells.SpellHelper.Damage( TimeSpan.FromSeconds( 0.5 ), from, Utility.Dice( 2, 10, 5 ) ); + } + + Effects.PlaySound( this.GetWorldLocation(), this.Map, 0x387 ); + + Timer.DelayCall( TimeSpan.FromSeconds( 0.25 ), new TimerCallback( Down1 ) ); + Timer.DelayCall( TimeSpan.FromSeconds( 0.50 ), new TimerCallback( Down2 ) ); + + Timer.DelayCall( TimeSpan.FromSeconds( 5.00 ), new TimerCallback( BackUp ) ); + + m_NextUse = DateTime.Now + TimeSpan.FromSeconds( 10.0 ); + } + } + + private void Down1() + { + ItemID = ( ItemID == 4656 ? 4678 : 4712 ); + } + + private void Down2() + { + ItemID = ( ItemID == 4678 ? 4679 : 4713 ); + + Point3D p = this.GetWorldLocation(); + Map f = this.Map; + + if ( f == null ) + return; + + new Blood( 4650 ).MoveToWorld( p, f ); + + for ( int i = 0; i < 4; ++i ) + { + int x = p.X - 2 + Utility.Random( 5 ); + int y = p.Y - 2 + Utility.Random( 5 ); + int z = p.Z; + + if ( !f.CanFit( x, y, z, 1, false, false, true ) ) + { + z = f.GetAverageZ( x, y ); + + if ( !f.CanFit( x, y, z, 1, false, false, true ) ) + continue; + } + + new Blood().MoveToWorld( new Point3D( x, y, z ), f ); + } + } + + private void BackUp() + { + if ( ItemID == 4678 || ItemID == 4679 ) + ItemID = 4656; + else if ( ItemID == 4712 || ItemID == 4713 ) + ItemID = 4702; + } + + public Guillotine( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (byte) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadByte(); + + if ( ItemID == 4678 || ItemID == 4679 ) + ItemID = 4656; + else if ( ItemID == 4712 || ItemID == 4713 ) + ItemID = 4702; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/HairDye.cs b/Scripts/Items/Misc/HairDye.cs new file mode 100644 index 0000000..e111e0f --- /dev/null +++ b/Scripts/Items/Misc/HairDye.cs @@ -0,0 +1,193 @@ +using System; +using System.Text; +using Server.Gumps; +using Server.Network; + +namespace Server.Items +{ + public class HairDye : Item + { + public override int LabelNumber{ get{ return 1041060; } } // Hair Dye + + [Constructable] + public HairDye() : base( 0xEFF ) + { + Weight = 1.0; + } + + public HairDye( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.InRange( this.GetWorldLocation(), 1 ) ) + { + from.CloseGump( typeof( HairDyeGump ) ); + from.SendGump( new HairDyeGump( this ) ); + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 906, 1019045 ); // I can't reach that. + } + } + } + + public class HairDyeGump : Gump + { + private HairDye m_HairDye; + + private class HairDyeEntry + { + private string m_Name; + private int m_HueStart; + private int m_HueCount; + + public string Name + { + get + { + return m_Name; + } + } + + public int HueStart + { + get + { + return m_HueStart; + } + } + + public int HueCount + { + get + { + return m_HueCount; + } + } + + public HairDyeEntry( string name, int hueStart, int hueCount ) + { + m_Name = name; + m_HueStart = hueStart; + m_HueCount = hueCount; + } + } + + private static HairDyeEntry[] m_Entries = new HairDyeEntry[] + { + new HairDyeEntry( "*****", 1602, 26 ), + new HairDyeEntry( "*****", 1628, 27 ), + new HairDyeEntry( "*****", 1502, 32 ), + new HairDyeEntry( "*****", 1302, 32 ), + new HairDyeEntry( "*****", 1402, 32 ), + new HairDyeEntry( "*****", 1202, 24 ), + new HairDyeEntry( "*****", 2402, 29 ), + new HairDyeEntry( "*****", 2213, 6 ), + new HairDyeEntry( "*****", 1102, 8 ), + new HairDyeEntry( "*****", 1110, 8 ), + new HairDyeEntry( "*****", 1118, 16 ), + new HairDyeEntry( "*****", 1134, 16 ) + }; + + public HairDyeGump( HairDye dye ) : base( 50, 50 ) + { + m_HairDye = dye; + + AddPage( 0 ); + + AddBackground( 100, 10, 350, 355, 2600 ); + AddBackground( 120, 54, 110, 270, 5100 ); + + AddHtmlLocalized( 70, 25, 400, 35, 1011013, false, false ); //
Hair Color Selection Menu
+ + AddButton( 149, 328, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 185, 329, 250, 35, 1011014, false, false ); // Dye my hair this color! + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + AddLabel( 130, 59 + (i * 22), m_Entries[i].HueStart - 1, m_Entries[i].Name ); + AddButton( 207, 60 + (i * 22), 5224, 5224, 0, GumpButtonType.Page, i + 1 ); + } + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + HairDyeEntry e = m_Entries[i]; + + AddPage( i + 1 ); + + for ( int j = 0; j < e.HueCount; ++j ) + { + AddLabel( 278 + ((j / 16) * 80), 52 + ((j % 16) * 17), e.HueStart + j - 1, "*****" ); + AddRadio( 260 + ((j / 16) * 80), 52 + ((j % 16) * 17), 210, 211, false, (i * 100) + j ); + } + } + } + + public override void OnResponse( NetState from, RelayInfo info ) + { + if ( m_HairDye.Deleted ) + return; + + Mobile m = from.Mobile; + int[] switches = info.Switches; + + if ( !m_HairDye.IsChildOf( m.Backpack ) ) + { + m.SendLocalizedMessage( 1042010 ); //You must have the objectin your backpack to use it. + return; + } + + if ( info.ButtonID != 0 && switches.Length > 0 ) + { + if( m.HairItemID == 0 && m.FacialHairItemID == 0 ) + { + m.SendLocalizedMessage( 502623 ); // You have no hair to dye and cannot use this + } + else + { + // To prevent this from being exploited, the hue is abstracted into an internal list + + int entryIndex = switches[0] / 100; + int hueOffset = switches[0] % 100; + + if ( entryIndex >= 0 && entryIndex < m_Entries.Length ) + { + HairDyeEntry e = m_Entries[entryIndex]; + + if ( hueOffset >= 0 && hueOffset < e.HueCount ) + { + int hue = e.HueStart + hueOffset; + + m.HairHue = hue; + m.FacialHairHue = hue; + + m.SendLocalizedMessage( 501199 ); // You dye your hair + m_HairDye.Delete(); + m.PlaySound( 0x4E ); + } + } + } + } + else + { + m.SendLocalizedMessage( 501200 ); // You decide not to dye your hair + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/IDurability.cs b/Scripts/Items/Misc/IDurability.cs new file mode 100644 index 0000000..90b225c --- /dev/null +++ b/Scripts/Items/Misc/IDurability.cs @@ -0,0 +1,22 @@ +using System; +using Server; + +namespace Server.Items +{ + interface IDurability + { + int InitMinHits { get; } + int InitMaxHits { get; } + + int HitPoints { get; set; } + int MaxHitPoints { get; set; } + + void ScaleDurability(); + void UnscaleDurability(); + } + + interface IWearableDurability : IDurability + { + int OnHit( BaseWeapon weapon, int damageTaken ); + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Key.cs b/Scripts/Items/Misc/Key.cs new file mode 100644 index 0000000..46969b6 --- /dev/null +++ b/Scripts/Items/Misc/Key.cs @@ -0,0 +1,469 @@ +using System; +using System.Collections; +using Server.Network; +using Server.Targeting; +using Server.Prompts; +using Server.Misc; + +namespace Server.Items +{ + public enum KeyType + { + Copper = 0x100E, + Gold = 0x100F, + Iron = 0x1010, + Rusty = 0x1013 + } + + public interface ILockable + { + bool Locked{ get; set; } + uint KeyValue{ get; set; } + } + + public class Key : Item + { + private string m_Description; + private uint m_KeyVal; + private Item m_Link; + private int m_MaxRange; + + public static uint RandomValue() + { + return (uint)(0xFFFFFFFE * Utility.RandomDouble()) + 1; + } + + public static void RemoveKeys( Mobile m, uint keyValue ) + { + if ( keyValue == 0 ) + return; + + RemoveKeys( m.Backpack, keyValue ); + RemoveKeys( m.InnBox, keyValue ); + } + + public static void RemoveKeys( Container cont, uint keyValue ) + { + if ( cont == null || keyValue == 0 ) + return; + + Item[] items = cont.FindItemsByType( new Type[] { typeof( Key ), typeof( KeyRing ) } ); + + foreach ( Item item in items ) + { + if ( item is Key ) + { + Key key = (Key) item; + + if ( key.KeyValue == keyValue ) + key.Delete(); + } + else + { + KeyRing keyRing = (KeyRing) item; + + keyRing.RemoveKeys( keyValue ); + } + } + } + + public static bool ContainsKey( Container cont, uint keyValue ) + { + if ( cont == null ) + return false; + + Item[] items = cont.FindItemsByType( new Type[] { typeof( Key ), typeof( KeyRing ) } ); + + foreach ( Item item in items ) + { + if ( item is Key ) + { + Key key = (Key) item; + + if ( key.KeyValue == keyValue ) + return true; + } + else + { + KeyRing keyRing = (KeyRing) item; + + if ( keyRing.ContainsKey( keyValue ) ) + return true; + } + } + + return false; + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Description + { + get + { + return m_Description; + } + set + { + m_Description = value; + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxRange + { + get + { + return m_MaxRange; + } + + set + { + m_MaxRange = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public uint KeyValue + { + get + { + return m_KeyVal; + } + + set + { + m_KeyVal = value; + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Item Link + { + get + { + return m_Link; + } + + set + { + m_Link = value; + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + writer.Write( (int) m_MaxRange ); + + writer.Write( (Item) m_Link ); + + writer.Write( (string) m_Description ); + writer.Write( (uint) m_KeyVal ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + { + m_MaxRange = reader.ReadInt(); + + goto case 1; + } + case 1: + { + m_Link = reader.ReadItem(); + + goto case 0; + } + case 0: + { + if ( version < 2 || m_MaxRange == 0 ) + m_MaxRange = 3; + + m_Description = reader.ReadString(); + + m_KeyVal = reader.ReadUInt(); + + break; + } + } + } + + [Constructable] + public Key() : this( KeyType.Iron, 0 ) + { + } + + [Constructable] + public Key( KeyType type ) : this( type, 0 ) + { + } + + [Constructable] + public Key( uint val ) : this ( KeyType.Iron, val ) + { + } + + [Constructable] + public Key( KeyType type, uint LockVal ) : this( type, LockVal, null ) + { + m_KeyVal = LockVal; + } + + public Key( KeyType type, uint LockVal, Item link ) : base( (int)type ) + { + Weight = 1.0; + + m_MaxRange = 3; + m_KeyVal = LockVal; + m_Link = link; + } + + public Key( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !this.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 501661 ); // That key is unreachable. + return; + } + + Target t; + int number; + + if ( m_KeyVal != 0 ) + { + number = 501662; // What shall I use this key on? + t = new UnlockTarget( this ); + } + else + { + number = 501663; // This key is a key blank. Which key would you like to make a copy of? + t = new CopyTarget( this ); + } + + from.SendLocalizedMessage( number ); + from.Target = t; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + string desc; + + if ( m_KeyVal == 0 ) + desc = "(blank)"; + else if ( (desc = m_Description) == null || (desc = desc.Trim()).Length <= 0 ) + desc = null; + + if ( desc != null ) + list.Add( desc ); + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + string desc; + + if ( m_KeyVal == 0 ) + desc = "(blank)"; + else if ( (desc = m_Description) == null || (desc = desc.Trim()).Length <= 0 ) + desc = ""; + + if ( desc.Length > 0 ) + from.Send( new UnicodeMessage( Serial, ItemID, MessageType.Regular, 0x3B2, 3, "ENU", "", desc ) ); + } + + public bool UseOn( Mobile from, ILockable o ) + { + if ( o.KeyValue == this.KeyValue ) + { + if ( o is BaseDoor && !((BaseDoor)o).UseLocks() ) + { + return false; + } + else + { + o.Locked = !o.Locked; + + if ( o is LockableContainer ) + { + LockableContainer cont = (LockableContainer)o; + + if ( cont.LockLevel == -255 ) + cont.LockLevel = cont.RequiredSkill - 10; + } + + if ( o is Item ) + { + Item item = (Item) o; + + if ( o.Locked ) + item.SendLocalizedMessageTo( from, 1048000 ); // You lock it. + else + item.SendLocalizedMessageTo( from, 1048001 ); // You unlock it. + + if ( item is LockableContainer ) + { + LockableContainer cont = (LockableContainer) item; + + if ( cont.TrapType != TrapType.None && cont.TrapOnLockpick ) + { + if ( o.Locked ) + item.SendLocalizedMessageTo( from, 501673 ); // You re-enable the trap. + else + item.SendLocalizedMessageTo( from, 501672 ); // You disable the trap temporarily. Lock it again to re-enable it. + } + } + } + + return true; + } + } + else + { + return false; + } + } + + private class RenamePrompt : Prompt + { + private Key m_Key; + + public RenamePrompt( Key key ) + { + m_Key = key; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( m_Key.Deleted || !m_Key.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 501661 ); // That key is unreachable. + return; + } + + m_Key.Description = Utility.FixHtml( text ); + } + } + + private class UnlockTarget : Target + { + private Key m_Key; + + public UnlockTarget( Key key ) : base( key.MaxRange, false, TargetFlags.None ) + { + m_Key = key; + CheckLOS = false; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Key.Deleted || !m_Key.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 501661 ); // That key is unreachable. + return; + } + + int number; + + if ( targeted == m_Key ) + { + number = 501665; // Enter a description for this key. + + from.Prompt = new RenamePrompt( m_Key ); + } + else if ( targeted is ILockable ) + { + if ( m_Key.UseOn( from, (ILockable) targeted ) ) + number = -1; + else + number = 501668; // This key doesn't seem to unlock that. + } + else + { + number = 501666; // You can't unlock that! + } + + if ( number != -1 ) + { + from.SendLocalizedMessage( number ); + } + } + } + + private class CopyTarget : Target + { + private Key m_Key; + + public CopyTarget( Key key ) : base( 3, false, TargetFlags.None ) + { + m_Key = key; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Key.Deleted || !m_Key.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 501661 ); // That key is unreachable. + return; + } + + int number; + + if ( targeted is Key ) + { + Key k = (Key)targeted; + + if ( k.m_KeyVal == 0 ) + { + number = 501675; // This key is also blank. + } + else if ( SkillCheck.TestTrade( from, Trades.Tinkering, 0, 75.0 ) ) + { + number = 501676; // You make a copy of the key. + + m_Key.Description = k.Description; + m_Key.KeyValue = k.KeyValue; + m_Key.Link = k.Link; + m_Key.MaxRange = k.MaxRange; + } + else if ( Utility.RandomDouble() <= 0.1 ) // 10% chance to destroy the key + { + from.SendLocalizedMessage( 501677 ); // You fail to make a copy of the key. + + number = 501678; // The key was destroyed in the attempt. + + m_Key.Delete(); + } + else + { + number = 501677; // You fail to make a copy of the key. + } + } + else + { + number = 501688; // Not a key. + } + + from.SendLocalizedMessage( number ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/KeyRing.cs b/Scripts/Items/Misc/KeyRing.cs new file mode 100644 index 0000000..2ead1e4 --- /dev/null +++ b/Scripts/Items/Misc/KeyRing.cs @@ -0,0 +1,207 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; +using System.Collections.Generic; + +namespace Server.Items +{ + public class KeyRing : Item + { + public static readonly int MaxKeys = 20; + + private List m_Keys; + + public List Keys { get { return m_Keys; } } + + [Constructable] + public KeyRing() : base( 0x1011 ) + { + Weight = 1.0; // They seem to have no weight on OSI ?! + + m_Keys = new List(); + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( !this.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1060640 ); // The item must be in your backpack to use it. + return false; + } + + Key key = dropped as Key; + + if ( key == null || key.KeyValue == 0 ) + { + from.SendLocalizedMessage( 501689 ); // Only non-blank keys can be put on a keyring. + return false; + } + else if ( this.Keys.Count >= MaxKeys ) + { + from.SendLocalizedMessage( 1008138 ); // This keyring is full. + return false; + } + else + { + Add( key ); + from.SendLocalizedMessage( 501691 ); // You put the key on the keyring. + return true; + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !this.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1060640 ); // The item must be in your backpack to use it. + return; + } + + from.SendLocalizedMessage( 501680 ); // What do you want to unlock? + from.Target = new InternalTarget( this ); + } + + private class InternalTarget : Target + { + private KeyRing m_KeyRing; + + public InternalTarget( KeyRing keyRing ) : base( -1, false, TargetFlags.None ) + { + m_KeyRing = keyRing; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_KeyRing.Deleted || !m_KeyRing.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1060640 ); // The item must be in your backpack to use it. + return; + } + + if ( m_KeyRing == targeted ) + { + m_KeyRing.Open( from ); + from.SendLocalizedMessage( 501685 ); // You open the keyring. + } + else if ( targeted is ILockable ) + { + ILockable o = (ILockable) targeted; + + foreach ( Key key in m_KeyRing.Keys ) + { + if ( key.UseOn( from, o ) ) + return; + } + + from.SendLocalizedMessage( 1008140 ); // You do not have a key for that. + } + else + { + from.SendLocalizedMessage( 501666 ); // You can't unlock that! + } + } + } + + public override void OnDelete() + { + base.OnDelete(); + + foreach ( Key key in m_Keys ) + { + key.Delete(); + } + + m_Keys.Clear(); + } + + public void Add( Key key ) + { + key.Internalize(); + m_Keys.Add( key ); + + UpdateItemID(); + } + + public void Open( Mobile from ) + { + Container cont = this.Parent as Container; + + if ( cont == null ) + return; + + for ( int i = m_Keys.Count - 1; i >= 0; i-- ) + { + Key key = m_Keys[i]; + + if ( !key.Deleted && !cont.TryDropItem( from, key, true ) ) + break; + + m_Keys.RemoveAt( i ); + } + + UpdateItemID(); + } + + public void RemoveKeys( uint keyValue ) + { + for ( int i = m_Keys.Count - 1; i >= 0; i-- ) + { + Key key = m_Keys[i]; + + if ( key.KeyValue == keyValue ) + { + key.Delete(); + m_Keys.RemoveAt( i ); + } + } + + UpdateItemID(); + } + + public bool ContainsKey( uint keyValue ) + { + foreach ( Key key in m_Keys ) + { + if ( key.KeyValue == keyValue ) + return true; + } + + return false; + } + + private void UpdateItemID() + { + if ( this.Keys.Count < 1 ) + this.ItemID = 0x1011; + else if ( this.Keys.Count < 3 ) + this.ItemID = 0x1769; + else if ( this.Keys.Count < 5 ) + this.ItemID = 0x176A; + else + this.ItemID = 0x176B; + } + + public KeyRing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + + writer.WriteItemList( m_Keys ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + m_Keys = reader.ReadStrongItemList(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/LOSBlocker.cs b/Scripts/Items/Misc/LOSBlocker.cs new file mode 100644 index 0000000..e06e475 --- /dev/null +++ b/Scripts/Items/Misc/LOSBlocker.cs @@ -0,0 +1,119 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class LOSBlocker : Item + { + public static void Initialize() + { + TileData.ItemTable[0x21A2].Flags = TileFlag.Wall | TileFlag.NoShoot; + TileData.ItemTable[0x21A2].Height = 20; + } + + public override string DefaultName + { + get { return "no line of sight"; } + } + + [Constructable] + public LOSBlocker() : base( 0x21A2 ) + { + Movable = false; + } + + public LOSBlocker( Serial serial ) : base( serial ) + { + } + + protected override Packet GetWorldPacketFor( NetState state ) { + Mobile mob = state.Mobile; + + if ( mob != null && mob.AccessLevel >= AccessLevel.GameMaster ) { + return new GMItemPacket( this ); + } + + return base.GetWorldPacketFor( state ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version < 1 && ItemID == 0x2199 ) + this.ItemID = 0x21A2; + } + + public sealed class GMItemPacket : Packet + { + public GMItemPacket( Item item ) : base( 0x1A ) + { + this.EnsureCapacity( 20 ); + + // 14 base length + // +2 - Amount + // +2 - Hue + // +1 - Flags + + uint serial = (uint)item.Serial.Value; + int itemID = 0x36FF; + int amount = item.Amount; + Point3D loc = item.Location; + int x = loc.X; + int y = loc.Y; + int hue = item.Hue; + int flags = item.GetPacketFlags(); + int direction = (int)item.Direction; + + if ( amount != 0 ) + serial |= 0x80000000; + else + serial &= 0x7FFFFFFF; + + m_Stream.Write( (uint) serial ); + m_Stream.Write( (short) (itemID & 0x7FFF) ); + + if ( amount != 0 ) + m_Stream.Write( (short) amount ); + + x &= 0x7FFF; + + if ( direction != 0 ) + x |= 0x8000; + + m_Stream.Write( (short) x ); + + y &= 0x3FFF; + + if ( hue != 0 ) + y |= 0x8000; + + if ( flags != 0 ) + y |= 0x4000; + + m_Stream.Write( (short) y ); + + if ( direction != 0 ) + m_Stream.Write( (byte) direction ); + + m_Stream.Write( (sbyte) loc.Z ); + + if ( hue != 0 ) + m_Stream.Write( (ushort) hue ); + + if ( flags != 0 ) + m_Stream.Write( (byte) flags ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Moongate.cs b/Scripts/Items/Misc/Moongate.cs new file mode 100644 index 0000000..f9f8291 --- /dev/null +++ b/Scripts/Items/Misc/Moongate.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Misc; +using Server.Network; + +namespace Server.Items +{ + public class Moongate : Item + { + [Constructable] + public Moongate() : base(0x0F6C) + { + Movable = false; + Name = "moongate"; + Light = LightType.Circle300; + } + + public Moongate(Serial serial) : base(serial) + { + } + + public override bool OnMoveOver( Mobile m ) + { + Point3D loc = new Point3D( 2030, 1631, 8 ); + + if ( Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) == MoonPhase.NewMoon ) // MOONGLOW + loc = new Point3D( 3958, 2034, 2 ); + else if ( Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) == MoonPhase.WaxingCrescentMoon ) // BRITAIN + loc = new Point3D( 2030, 1631, 8 ); + else if ( Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) == MoonPhase.FirstQuarter ) // JHELOM + loc = new Point3D( 1173, 3251, 3 ); + else if ( Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) == MoonPhase.WaxingGibbous ) // YEW + loc = new Point3D( 1322, 743, 2 ); + else if ( Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) == MoonPhase.FullMoon ) // MINOC + loc = new Point3D( 3031, 462, 2 ); + else if ( Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) == MoonPhase.WaningGibbous ) // TRINSIC + loc = new Point3D( 2065, 2828, 2 ); + else if ( Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) == MoonPhase.LastQuarter ) // SKARA BRAE + loc = new Point3D( 790, 1949, 2 ); + else if ( Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) == MoonPhase.WaningCrescent ) // MAGINCIA + loc = new Point3D( 3354, 2551, 12 ); + + BaseCreature.TeleportPets( m, loc, Map.Britannia, false ); + m.MoveToWorld ( loc, Map.Britannia ); + m.PlaySound( 0x1FE ); + + return false; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/MorphItem.cs b/Scripts/Items/Misc/MorphItem.cs new file mode 100644 index 0000000..48cf014 --- /dev/null +++ b/Scripts/Items/Misc/MorphItem.cs @@ -0,0 +1,146 @@ +using System; + +namespace Server.Items +{ + public class MorphItem : Item + { + private int m_InactiveItemID; + private int m_ActiveItemID; + private int m_InRange; + private int m_OutRange; + + [CommandProperty( AccessLevel.GameMaster )] + public int InactiveItemID + { + get{ return m_InactiveItemID; } + set{ m_InactiveItemID = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int ActiveItemID + { + get{ return m_ActiveItemID; } + set{ m_ActiveItemID = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int InRange + { + get{ return m_InRange; } + set{ if ( value > 18 ) value = 18; m_InRange = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int OutRange + { + get{ return m_OutRange; } + set{ if ( value > 18 ) value = 18; m_OutRange = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int CurrentRange{ get{ return ItemID == InactiveItemID ? InRange : OutRange; } } + + [Constructable] + public MorphItem( int inactiveItemID, int activeItemID, int range ) : this( inactiveItemID, activeItemID, range, range ) + { + } + + [Constructable] + public MorphItem( int inactiveItemID, int activeItemID, int inRange, int outRange ) : base( inactiveItemID ) + { + Movable = false; + + InactiveItemID = inactiveItemID; + ActiveItemID = activeItemID; + InRange = inRange; + OutRange = outRange; + } + + public MorphItem( Serial serial ) : base( serial ) + { + } + + public override bool HandlesOnMovement{ get{ return true; } } + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( Utility.InRange( m.Location, Location, CurrentRange ) || Utility.InRange( oldLocation, Location, CurrentRange ) ) + Refresh(); + } + + public override void OnMapChange() + { + if ( !Deleted ) + Refresh(); + } + + public override void OnLocationChange( Point3D oldLoc ) + { + if ( !Deleted ) + Refresh(); + } + + public void Refresh() + { + bool found = false; + + foreach ( Mobile mob in GetMobilesInRange( CurrentRange ) ) + { + if ( mob.Hidden && mob.AccessLevel > AccessLevel.Player ) + continue; + + found = true; + break; + } + + if ( found ) + ItemID = ActiveItemID; + else + ItemID = InactiveItemID; + + Visible = ( ItemID != 0x1 ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_OutRange ); + + writer.Write( (int) m_InactiveItemID ); + writer.Write( (int) m_ActiveItemID ); + writer.Write( (int) m_InRange ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_OutRange = reader.ReadInt(); + goto case 0; + } + case 0: + { + m_InactiveItemID = reader.ReadInt(); + m_ActiveItemID = reader.ReadInt(); + m_InRange = reader.ReadInt(); + + if ( version < 1 ) + m_OutRange = m_InRange; + + break; + } + } + + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( Refresh ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/OilCloth.cs b/Scripts/Items/Misc/OilCloth.cs new file mode 100644 index 0000000..abff9fe --- /dev/null +++ b/Scripts/Items/Misc/OilCloth.cs @@ -0,0 +1,111 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Targeting; + +namespace Server.Items +{ + public class OilCloth : Item, IScissorable, IDyable + { + public override int LabelNumber{ get{ return 1041498; } } // oil cloth + + public override double DefaultWeight + { + get { return 1.0; } + } + + [Constructable] + public OilCloth() : base( 0x175D ) + { + Hue = 2001; + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public bool Scissor( Mobile from, Scissors scissors ) + { + if ( Deleted || !from.CanSee( this ) ) + return false; + + base.ScissorHelper( from, new Bandage(), 1 ); + + return true; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( OnTarget ) ); + from.SendLocalizedMessage( 1005424 ); // Select the weapon or armor you wish to use the cloth on. + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + public void OnTarget( Mobile from, object obj ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( obj is BaseWeapon ) + { + BaseWeapon weapon = (BaseWeapon)obj; + + if ( weapon.RootParent != from ) + { + from.SendLocalizedMessage( 1005425 ); // You may only wipe down items you are holding or carrying. + } + else if ( weapon.Poison == null || weapon.PoisonCharges <= 0 ) + { + from.LocalOverheadMessage( Network.MessageType.Regular, 0x3B2, 1005422 ); // Hmmmm... this does not need to be cleaned. + } + else + { + if ( weapon.PoisonCharges < 2 ) + weapon.PoisonCharges = 0; + else + weapon.PoisonCharges -= 2; + + if ( weapon.PoisonCharges > 0 ) + from.SendLocalizedMessage( 1005423 ); // You have removed some of the caustic substance, but not all. + else + from.SendLocalizedMessage( 1010497 ); // You have cleaned the item. + } + } + else + { + from.SendLocalizedMessage( 1005426 ); // The cloth will not work on that. + } + } + + public OilCloth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Plants.cs b/Scripts/Items/Misc/Plants.cs new file mode 100644 index 0000000..7525e1b --- /dev/null +++ b/Scripts/Items/Misc/Plants.cs @@ -0,0 +1,437 @@ +using System; +using Server; + +namespace Server.Items +{ + [Furniture] + public class HousePlantA : Item + { + [Constructable] + public HousePlantA() : base( 0x18B8 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantA( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantB : Item + { + [Constructable] + public HousePlantB() : base( 0x18B9 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantB( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantC : Item + { + [Constructable] + public HousePlantC() : base( 0x18BA ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantC( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantD : Item + { + [Constructable] + public HousePlantD() : base( 0x18BB ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantD( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantE : Item + { + [Constructable] + public HousePlantE() : base( 0x18BC ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantE( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantF : Item + { + [Constructable] + public HousePlantF() : base( 0x18BD ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantF( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantG : Item + { + [Constructable] + public HousePlantG() : base( 0x18BE ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantG( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantH : Item + { + [Constructable] + public HousePlantH() : base( 0x18BF ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantH( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantI : Item + { + [Constructable] + public HousePlantI() : base( 0x18C0 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantI( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantJ : Item + { + [Constructable] + public HousePlantJ() : base( 0x18C1 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantJ( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantK : Item + { + [Constructable] + public HousePlantK() : base( 0x18C2 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantK( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantL : Item + { + [Constructable] + public HousePlantL() : base( 0x18C3 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantL( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantM : Item + { + [Constructable] + public HousePlantM() : base( 0x18C4 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantM( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantN : Item + { + [Constructable] + public HousePlantN() : base( 0x18C5 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantN( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantO : Item + { + [Constructable] + public HousePlantO() : base( 0x18C6 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantO( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [Furniture] + public class HousePlantP : Item + { + [Constructable] + public HousePlantP() : base( 0x18C7 ) + { + Name = "plant"; + Weight = 10.0; + } + + public HousePlantP( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/PlayerBulletinBoards.cs b/Scripts/Items/Misc/PlayerBulletinBoards.cs new file mode 100644 index 0000000..abbd4f8 --- /dev/null +++ b/Scripts/Items/Misc/PlayerBulletinBoards.cs @@ -0,0 +1,640 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Gumps; +using Server.Multis; +using Server.Prompts; +using Server.Mobiles; +using Server.Network; +using Server.ContextMenus; + +namespace Server.Items +{ + public class PlayerBBSouth : BasePlayerBB + { + public override int LabelNumber{ get{ return 1062421; } } // bulletin board (south) + + [Constructable] + public PlayerBBSouth() : base( 0x2311 ) + { + Weight = 15.0; + } + + public PlayerBBSouth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PlayerBBEast : BasePlayerBB + { + public override int LabelNumber{ get{ return 1062420; } } // bulletin board (east) + + [Constructable] + public PlayerBBEast() : base( 0x2312 ) + { + Weight = 15.0; + } + + public PlayerBBEast( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public abstract class BasePlayerBB : Item, ISecurable + { + private PlayerBBMessage m_Greeting; + private List m_Messages; + private string m_Title; + private SecureLevel m_Level; + + public List Messages + { + get{ return m_Messages; } + } + + public PlayerBBMessage Greeting + { + get{ return m_Greeting; } + set{ m_Greeting = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Title + { + get{ return m_Title; } + set{ m_Title = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SecureLevel Level + { + get{ return m_Level; } + set{ m_Level = value; } + } + + public BasePlayerBB( int itemID ) : base( itemID ) + { + m_Messages = new List(); + m_Level = SecureLevel.Anyone; + } + + public BasePlayerBB( Serial serial ) : base( serial ) + { + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + SetSecureLevelEntry.AddTo( from, this, list ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); + + writer.Write( (int) m_Level ); + + writer.Write( m_Title ); + + if ( m_Greeting != null ) + { + writer.Write( true ); + m_Greeting.Serialize( writer ); + } + else + { + writer.Write( false ); + } + + writer.WriteEncodedInt( m_Messages.Count ); + + for ( int i = 0; i < m_Messages.Count; ++i ) + m_Messages[i].Serialize( writer ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Level = (SecureLevel)reader.ReadInt(); + goto case 0; + } + case 0: + { + if ( version < 1 ) + m_Level = SecureLevel.Anyone; + + m_Title = reader.ReadString(); + + if ( reader.ReadBool() ) + m_Greeting = new PlayerBBMessage( reader ); + + int count = reader.ReadEncodedInt(); + + m_Messages = new List( count ); + + for ( int i = 0; i < count; ++i ) + m_Messages.Add( new PlayerBBMessage( reader ) ); + + break; + } + } + } + + public static bool CheckAccess( BaseHouse house, Mobile from ) + { + if ( house.Public || !house.IsAosRules ) + return !house.IsBanned( from ); + + return house.HasAccess( from ); + } + + public override void OnDoubleClick( Mobile from ) + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house == null || !house.IsLockedDown( this ) ) + from.SendLocalizedMessage( 1062396 ); // This bulletin board must be locked down in a house to be usable. + else if ( !from.InRange( this.GetWorldLocation(), 2 ) || !from.InLOS( this ) ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + else if ( CheckAccess( house, from ) ) + from.SendGump( new PlayerBBGump( from, house, this, 0 ) ); + } + + public class PostPrompt : Prompt + { + private int m_Page; + private BaseHouse m_House; + private BasePlayerBB m_Board; + private bool m_Greeting; + + public PostPrompt( int page, BaseHouse house, BasePlayerBB board, bool greeting ) + { + m_Page = page; + m_House = house; + m_Board = board; + m_Greeting = greeting; + } + + public override void OnCancel( Mobile from ) + { + OnResponse( from, "" ); + } + + public override void OnResponse( Mobile from, string text ) + { + int page = m_Page; + BaseHouse house = m_House; + BasePlayerBB board = m_Board; + + if ( house == null || !house.IsLockedDown( board ) ) + { + from.SendLocalizedMessage( 1062396 ); // This bulletin board must be locked down in a house to be usable. + return; + } + else if ( !from.InRange( board.GetWorldLocation(), 2 ) || !from.InLOS( board ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return; + } + else if ( !CheckAccess( house, from ) ) + { + from.SendLocalizedMessage( 1062398 ); // You are not allowed to post to this bulletin board. + return; + } + else if ( m_Greeting && !house.IsOwner( from ) ) + { + return; + } + + text = text.Trim(); + + if ( text.Length > 255 ) + text = text.Substring( 0, 255 ); + + if ( text.Length > 0 ) + { + PlayerBBMessage message = new PlayerBBMessage( DateTime.Now, from, text ); + + if ( m_Greeting ) + { + board.Greeting = message; + } + else + { + board.Messages.Add( message ); + + if ( board.Messages.Count > 50 ) + { + board.Messages.RemoveAt( 0 ); + + if ( page > 0 ) + --page; + } + } + } + + from.SendGump( new PlayerBBGump( from, house, board, page ) ); + } + } + + public class SetTitlePrompt : Prompt + { + private int m_Page; + private BaseHouse m_House; + private BasePlayerBB m_Board; + + public SetTitlePrompt( int page, BaseHouse house, BasePlayerBB board ) + { + m_Page = page; + m_House = house; + m_Board = board; + } + + public override void OnCancel( Mobile from ) + { + OnResponse( from, "" ); + } + + public override void OnResponse( Mobile from, string text ) + { + int page = m_Page; + BaseHouse house = m_House; + BasePlayerBB board = m_Board; + + if ( house == null || !house.IsLockedDown( board ) ) + { + from.SendLocalizedMessage( 1062396 ); // This bulletin board must be locked down in a house to be usable. + return; + } + else if ( !from.InRange( board.GetWorldLocation(), 2 ) || !from.InLOS( board ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return; + } + else if ( !CheckAccess( house, from ) ) + { + from.SendLocalizedMessage( 1062398 ); // You are not allowed to post to this bulletin board. + return; + } + + text = text.Trim(); + + if ( text.Length > 255 ) + text = text.Substring( 0, 255 ); + + if ( text.Length > 0 ) + board.Title = text; + + from.SendGump( new PlayerBBGump( from, house, board, page ) ); + } + } + } + + public class PlayerBBMessage + { + private DateTime m_Time; + private Mobile m_Poster; + private string m_Message; + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime Time + { + get{ return m_Time; } + set{ m_Time = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Poster + { + get{ return m_Poster; } + set{ m_Poster = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Message + { + get{ return m_Message; } + set{ m_Message = value; } + } + + public PlayerBBMessage( DateTime time, Mobile poster, string message ) + { + m_Time = time; + m_Poster = poster; + m_Message = message; + } + + public PlayerBBMessage( GenericReader reader ) + { + int version = reader.ReadEncodedInt(); + + switch ( version ) + { + case 0: + { + m_Time = reader.ReadDateTime(); + m_Poster = reader.ReadMobile(); + m_Message = reader.ReadString(); + break; + } + } + } + + public void Serialize( GenericWriter writer ) + { + writer.WriteEncodedInt( 0 ); // version + + writer.Write( m_Time ); + writer.Write( m_Poster ); + writer.Write( m_Message ); + } + } + + public class PlayerBBGump : Gump + { + private int m_Page; + private Mobile m_From; + private BaseHouse m_House; + private BasePlayerBB m_Board; + + private const int LabelColor = 0x7FFF; + private const int LabelHue = 1153; + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int page = m_Page; + Mobile from = m_From; + BaseHouse house = m_House; + BasePlayerBB board = m_Board; + + if ( house == null || !house.IsLockedDown( board ) ) + { + from.SendLocalizedMessage( 1062396 ); // This bulletin board must be locked down in a house to be usable. + return; + } + else if ( !from.InRange( board.GetWorldLocation(), 2 ) || !from.InLOS( board ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return; + } + else if ( !BasePlayerBB.CheckAccess( house, from ) ) + { + from.SendLocalizedMessage( 1062398 ); // You are not allowed to post to this bulletin board. + return; + } + + switch ( info.ButtonID ) + { + case 1: // Post message + { + from.Prompt = new BasePlayerBB.PostPrompt( page, house, board, false ); + from.SendLocalizedMessage( 1062397 ); // Please enter your message: + + break; + } + case 2: // Set title + { + if ( house.IsOwner( from ) ) + { + from.Prompt = new BasePlayerBB.SetTitlePrompt( page, house, board ); + from.SendLocalizedMessage( 1062402 ); // Enter new title: + } + + break; + } + case 3: // Post greeting + { + if ( house.IsOwner( from ) ) + { + from.Prompt = new BasePlayerBB.PostPrompt( page, house, board, true ); + from.SendLocalizedMessage( 1062404 ); // Enter new greeting (this will always be the first post): + } + + break; + } + case 4: // Scroll up + { + if ( page == 0 ) + page = board.Messages.Count; + else + page -= 1; + + from.SendGump( new PlayerBBGump( from, house, board, page ) ); + + break; + } + case 5: // Scroll down + { + page += 1; + page %= board.Messages.Count + 1; + + from.SendGump( new PlayerBBGump( from, house, board, page ) ); + + break; + } + case 6: // Banish poster + { + if ( house.IsOwner( from ) ) + { + if ( page >= 1 && page <= board.Messages.Count ) + { + PlayerBBMessage message = (PlayerBBMessage)board.Messages[page - 1]; + Mobile poster = message.Poster; + + if ( poster == null ) + { + from.SendGump( new PlayerBBGump( from, house, board, page ) ); + return; + } + + if ( poster.AccessLevel > AccessLevel.Player && from.AccessLevel <= poster.AccessLevel ) + { + from.SendLocalizedMessage( 501354 ); // Uh oh...a bigger boot may be required. + } + else if ( house.IsFriend( poster ) ) + { + from.SendLocalizedMessage( 1060750 ); // That person is a friend, co-owner, or owner of this house, and therefore cannot be banished! + } + else if ( poster is PlayerVendor ) + { + from.SendLocalizedMessage( 501351 ); // You cannot eject a vendor. + } + else if ( house.Bans.Count >= BaseHouse.MaxBans ) + { + from.SendLocalizedMessage( 501355 ); // The ban limit for this house has been reached! + } + else if ( house.IsBanned( poster ) ) + { + from.SendLocalizedMessage( 501356 ); // This person is already banned! + } + else if ( poster is BaseCreature && ((BaseCreature)poster).NoHouseRestrictions ) + { + from.SendLocalizedMessage( 1062040 ); // You cannot ban that. + } + else + { + if ( !house.Bans.Contains( poster ) ) + house.Bans.Add( poster ); + + from.SendLocalizedMessage( 1062417 ); // That person has been banned from this house. + + if ( house.IsInside( poster ) && !BasePlayerBB.CheckAccess( house, poster ) ) + poster.MoveToWorld( house.BanLocation, house.Map ); + } + } + + from.SendGump( new PlayerBBGump( from, house, board, page ) ); + } + + break; + } + case 7: // Delete message + { + if ( house.IsOwner( from ) ) + { + if ( page >= 1 && page <= board.Messages.Count ) + board.Messages.RemoveAt( page - 1 ); + + from.SendGump( new PlayerBBGump( from, house, board, 0 ) ); + } + + break; + } + case 8: // Post props + { + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + PlayerBBMessage message = board.Greeting; + + if ( page >= 1 && page <= board.Messages.Count ) + message = (PlayerBBMessage)board.Messages[page - 1]; + + from.SendGump( new PlayerBBGump( from, house, board, page ) ); + from.SendGump( new PropertiesGump( from, message ) ); + } + + break; + } + } + } + + public PlayerBBGump( Mobile from, BaseHouse house, BasePlayerBB board, int page ) : base( 50, 10 ) + { + from.CloseGump( typeof( PlayerBBGump ) ); + + m_Page = page; + m_From = from; + m_House = house; + m_Board = board; + + AddPage( 0 ); + + AddImage( 30, 30, 5400 ); + + AddButton( 393, 145, 2084, 2084, 4, GumpButtonType.Reply, 0 ); // Scroll up + AddButton( 390, 371, 2085, 2085, 5, GumpButtonType.Reply, 0 ); // Scroll down + + AddButton( 32, 183, 5412, 5413, 1, GumpButtonType.Reply, 0 ); // Post message + + if ( house.IsOwner( from ) ) + { + AddButton( 63, 90, 5601, 5605, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 81, 89, 230, 20, 1062400, LabelColor, false, false ); // Set title + + AddButton( 63, 109, 5601, 5605, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 81, 108, 230, 20, 1062401, LabelColor, false, false ); // Post greeting + } + + string title = board.Title; + + if ( title != null ) + AddHtml( 183, 68, 180, 23, title, false, false ); + + AddHtmlLocalized( 385, 89, 60, 20, 1062409, LabelColor, false, false ); // Post + + AddLabel( 440, 89, LabelHue, page.ToString() ); + AddLabel( 455, 89, LabelHue, "/" ); + AddLabel( 470, 89, LabelHue, board.Messages.Count.ToString() ); + + PlayerBBMessage message = board.Greeting; + + if ( page >= 1 && page <= board.Messages.Count ) + message = (PlayerBBMessage)board.Messages[page - 1]; + + AddImageTiled( 150, 220, 240, 1, 2700 ); // Separator + + AddHtmlLocalized( 150, 180, 100, 20, 1062405, 16715, false, false ); // Posted On: + AddHtmlLocalized( 150, 200, 100, 20, 1062406, 16715, false, false ); // Posted By: + + if ( message != null ) + { + AddHtml( 255, 180, 150, 20, message.Time.ToString( "yyyy-MM-dd HH:mm:ss" ), false, false ); + + Mobile poster = message.Poster; + string name = ( poster == null ? null : poster.Name ); + + if ( name == null || (name = name.Trim()).Length == 0 ) + name = "Someone"; + + AddHtml( 255, 200, 150, 20, name, false, false ); + + string body = message.Message; + + if ( body == null ) + body = ""; + + AddHtml( 150, 240, 250, 100, body, false, false ); + + if ( message != board.Greeting && house.IsOwner( from ) ) + { + AddButton( 130, 395, 1209, 1210, 6, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 150, 393, 150, 20, 1062410, LabelColor, false, false ); // Banish Poster + + AddButton( 310, 395, 1209, 1210, 7, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 330, 393, 150, 20, 1062411, LabelColor, false, false ); // Delete Message + } + + if ( from.AccessLevel >= AccessLevel.GameMaster ) + AddButton( 135, 242, 1209, 1210, 8, GumpButtonType.Reply, 0 ); // Post props + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/PoolOfAcid.cs b/Scripts/Items/Misc/PoolOfAcid.cs new file mode 100644 index 0000000..2bd3f8d --- /dev/null +++ b/Scripts/Items/Misc/PoolOfAcid.cs @@ -0,0 +1,101 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Spells; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Items +{ + public class PoolOfAcid : Item + { + private TimeSpan m_Duration; + private int m_MinDamage; + private int m_MaxDamage; + private DateTime m_Created; + private bool m_Drying; + private Timer m_Timer; + + [Constructable] + public PoolOfAcid() : this( TimeSpan.FromSeconds( 10.0 ), 2, 5 ) + { + } + + public override string DefaultName { get { return "a pool of acid"; } } + + [Constructable] + public PoolOfAcid( TimeSpan duration, int minDamage, int maxDamage ) + : base( 0x122A ) + { + Hue = 0x3F; + Movable = false; + + m_MinDamage = minDamage; + m_MaxDamage = maxDamage; + m_Created = DateTime.Now; + m_Duration = duration; + + m_Timer = Timer.DelayCall( TimeSpan.Zero, TimeSpan.FromSeconds( 1 ), new TimerCallback( OnTick ) ); + } + + public override void OnAfterDelete() + { + if( m_Timer != null ) + m_Timer.Stop(); + } + + private void OnTick() + { + DateTime now = DateTime.Now; + TimeSpan age = now - m_Created; + + if( age > m_Duration ) { + Delete(); + } else { + if( !m_Drying && age > (m_Duration - age) ) + { + m_Drying = true; + ItemID = 0x122B; + } + + List toDamage = new List(); + + foreach( Mobile m in GetMobilesInRange( 0 ) ) + { + BaseCreature bc = m as BaseCreature; + + if( m.Alive && !m.IsDeadBondedPet && (bc == null || bc.Controlled || bc.Summoned) ) + { + toDamage.Add( m ); + } + } + + for ( int i = 0; i < toDamage.Count; i++ ) + Damage( toDamage[i] ); + } + } + public override bool OnMoveOver( Mobile m ) + { + Damage( m ); + return true; + } + + public void Damage ( Mobile m ) + { + m.Damage( Utility.RandomMinMax( m_MinDamage, m_MaxDamage ) ); + } + + public PoolOfAcid( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + //Don't serialize these + } + + public override void Deserialize( GenericReader reader ) + { + } + } +} diff --git a/Scripts/Items/Misc/Scales.cs b/Scripts/Items/Misc/Scales.cs new file mode 100644 index 0000000..7a75839 --- /dev/null +++ b/Scripts/Items/Misc/Scales.cs @@ -0,0 +1,93 @@ +using System; +using Server.Network; +using Server.Targeting; + +namespace Server.Items +{ + public class Scales : Item + { + [Constructable] + public Scales() : base( 0x1852 ) + { + Weight = 4.0; + } + + public Scales( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + from.SendLocalizedMessage( 502431 ); // What would you like to weigh? + from.Target = new InternalTarget( this ); + } + + private class InternalTarget : Target + { + private Scales m_Item; + + public InternalTarget( Scales item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + string message; + + if ( targeted == m_Item ) + { + message = "It cannot weight itself."; + } + else if ( targeted is Item ) + { + Item item = (Item)targeted; + object root = item.RootParent; + + if ( (root != null && root != from) || item.Parent == from ) + { + message = "You decide that item's current location is too awkward to get an accurate result."; + } + else if ( item.Movable ) + { + if ( item.Amount > 1 ) + message = "You place one item on the scale. "; + else + message = "You place that item on the scale. "; + + double weight = item.Weight; + + if ( weight <= 0.0 ) + message += "It is lighter than a feather."; + else + message += String.Format( "It weighs {0} stones.", weight ); + } + else + { + message = "You cannot weigh that object."; + } + } + else + { + message = "You cannot weigh that object."; + } + + from.SendMessage( message ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/SpecialBeardDye.cs b/Scripts/Items/Misc/SpecialBeardDye.cs new file mode 100644 index 0000000..8738986 --- /dev/null +++ b/Scripts/Items/Misc/SpecialBeardDye.cs @@ -0,0 +1,185 @@ +using System; +using System.Text; +using Server.Gumps; +using Server.Network; + +namespace Server.Items +{ + public class SpecialBeardDye : Item + { + public override int LabelNumber{ get{ return 1041087; } } // Special Beard Dye + + [Constructable] + public SpecialBeardDye() : base( 0xE26 ) + { + Weight = 1.0; + } + + public SpecialBeardDye( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.InRange( this.GetWorldLocation(), 1 ) ) + { + from.CloseGump( typeof( SpecialBeardDyeGump ) ); + from.SendGump( new SpecialBeardDyeGump( this ) ); + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 906, 1019045 ); // I can't reach that. + } + } + } + + public class SpecialBeardDyeGump : Gump + { + private SpecialBeardDye m_SpecialBeardDye; + + private class SpecialBeardDyeEntry + { + private string m_Name; + private int m_HueStart; + private int m_HueCount; + + public string Name + { + get + { + return m_Name; + } + } + + public int HueStart + { + get + { + return m_HueStart; + } + } + + public int HueCount + { + get + { + return m_HueCount; + } + } + + public SpecialBeardDyeEntry( string name, int hueStart, int hueCount ) + { + m_Name = name; + m_HueStart = hueStart; + m_HueCount = hueCount; + } + } + + private static SpecialBeardDyeEntry[] m_Entries = new SpecialBeardDyeEntry[] + { + new SpecialBeardDyeEntry( "*****", 12, 10 ), + new SpecialBeardDyeEntry( "*****", 32, 5 ), + new SpecialBeardDyeEntry( "*****", 38, 8 ), + new SpecialBeardDyeEntry( "*****", 54, 3 ), + new SpecialBeardDyeEntry( "*****", 62, 10 ), + new SpecialBeardDyeEntry( "*****", 81, 2 ), + new SpecialBeardDyeEntry( "*****", 89, 2 ), + new SpecialBeardDyeEntry( "*****", 1153, 2 ) + }; + + public SpecialBeardDyeGump( SpecialBeardDye dye ) : base( 0, 0 ) + { + m_SpecialBeardDye = dye; + + AddPage( 0 ); + AddBackground( 150, 60, 350, 358, 2600 ); + AddBackground( 170, 104, 110, 270, 5100 ); + AddHtmlLocalized( 230, 75, 200, 20, 1011013, false, false ); // Hair Color Selection Menu + AddHtmlLocalized( 235, 380, 300, 20, 1013007, false, false ); // Dye my beard this color! + AddButton( 200, 380, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); // DYE HAIR + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + AddLabel( 180, 109 + (i * 22), m_Entries[i].HueStart - 1, m_Entries[i].Name ); + AddButton( 257, 110 + (i * 22), 5224, 5224, 0, GumpButtonType.Page, i + 1 ); + } + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + SpecialBeardDyeEntry e = m_Entries[i]; + + AddPage( i + 1 ); + + for ( int j = 0; j < e.HueCount; ++j ) + { + AddLabel( 328 + ((j / 16) * 80), 102 + ((j % 16) * 17), e.HueStart + j - 1, "*****" ); + AddRadio( 310 + ((j / 16) * 80), 102 + ((j % 16) * 17), 210, 211, false, (i * 100) + j ); + } + } + } + + public override void OnResponse( NetState from, RelayInfo info ) + { + if ( m_SpecialBeardDye.Deleted ) + return; + + Mobile m = from.Mobile; + int[] switches = info.Switches; + + if ( !m_SpecialBeardDye.IsChildOf( m.Backpack ) ) + { + m.SendLocalizedMessage( 1042010 ); //You must have the objectin your backpack to use it. + return; + } + + if ( info.ButtonID != 0 && switches.Length > 0 ) + { + if( m.FacialHairItemID == 0 ) + { + m.SendLocalizedMessage( 502623 ); // You have no hair to dye and cannot use this + } + else + { + // To prevent this from being exploited, the hue is abstracted into an internal list + + int entryIndex = switches[0] / 100; + int hueOffset = switches[0] % 100; + + if ( entryIndex >= 0 && entryIndex < m_Entries.Length ) + { + SpecialBeardDyeEntry e = m_Entries[entryIndex]; + + if ( hueOffset >= 0 && hueOffset < e.HueCount ) + { + int hue = e.HueStart + hueOffset; + + m.FacialHairHue = hue; + + m.SendLocalizedMessage( 501199 ); // You dye your hair + m_SpecialBeardDye.Delete(); + m.PlaySound( 0x4E ); + } + } + } + } + else + { + m.SendLocalizedMessage( 501200 ); // You decide not to dye your hair + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/SpecialHairDye.cs b/Scripts/Items/Misc/SpecialHairDye.cs new file mode 100644 index 0000000..88bc918 --- /dev/null +++ b/Scripts/Items/Misc/SpecialHairDye.cs @@ -0,0 +1,190 @@ +using System; +using System.Text; +using Server.Gumps; +using Server.Network; + +namespace Server.Items +{ + public class SpecialHairDye : Item + { + public override string DefaultName + { + get { return "Special Hair Dye"; } + } + + [Constructable] + public SpecialHairDye() : base( 0xE26 ) + { + Weight = 1.0; + } + + public SpecialHairDye( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.InRange( this.GetWorldLocation(), 1 ) ) + { + from.CloseGump( typeof( SpecialHairDyeGump ) ); + from.SendGump( new SpecialHairDyeGump( this ) ); + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 906, 1019045 ); // I can't reach that. + } + + } + } + + public class SpecialHairDyeGump : Gump + { + private SpecialHairDye m_SpecialHairDye; + + private class SpecialHairDyeEntry + { + private string m_Name; + private int m_HueStart; + private int m_HueCount; + + public string Name + { + get + { + return m_Name; + } + } + + public int HueStart + { + get + { + return m_HueStart; + } + } + + public int HueCount + { + get + { + return m_HueCount; + } + } + + public SpecialHairDyeEntry( string name, int hueStart, int hueCount ) + { + m_Name = name; + m_HueStart = hueStart; + m_HueCount = hueCount; + } + } + + private static SpecialHairDyeEntry[] m_Entries = new SpecialHairDyeEntry[] + { + new SpecialHairDyeEntry( "*****", 12, 10 ), + new SpecialHairDyeEntry( "*****", 32, 5 ), + new SpecialHairDyeEntry( "*****", 38, 8 ), + new SpecialHairDyeEntry( "*****", 54, 3 ), + new SpecialHairDyeEntry( "*****", 62, 10 ), + new SpecialHairDyeEntry( "*****", 81, 2 ), + new SpecialHairDyeEntry( "*****", 89, 2 ), + new SpecialHairDyeEntry( "*****", 1153, 2 ) + }; + + public SpecialHairDyeGump( SpecialHairDye dye ) : base( 0, 0 ) + { + m_SpecialHairDye = dye; + + AddPage( 0 ); + AddBackground( 150, 60, 350, 358, 2600 ); + AddBackground( 170, 104, 110, 270, 5100 ); + AddHtmlLocalized( 230, 75, 200, 20, 1011013, false, false ); // Hair Color Selection Menu + AddHtmlLocalized( 235, 380, 300, 20, 1011014, false, false ); // Dye my hair this color! + AddButton( 200, 380, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); // DYE HAIR + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + AddLabel( 180, 109 + (i * 22), m_Entries[i].HueStart - 1, m_Entries[i].Name ); + AddButton( 257, 110 + (i * 22), 5224, 5224, 0, GumpButtonType.Page, i + 1 ); + } + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + SpecialHairDyeEntry e = m_Entries[i]; + + AddPage( i + 1 ); + + for ( int j = 0; j < e.HueCount; ++j ) + { + AddLabel( 328 + ((j / 16) * 80), 102 + ((j % 16) * 17), e.HueStart + j - 1, "*****" ); + AddRadio( 310 + ((j / 16) * 80), 102 + ((j % 16) * 17), 210, 211, false, (i * 100) + j ); + } + } + } + + public override void OnResponse( NetState from, RelayInfo info ) + { + if ( m_SpecialHairDye.Deleted ) + return; + + Mobile m = from.Mobile; + int[] switches = info.Switches; + + if ( !m_SpecialHairDye.IsChildOf( m.Backpack ) ) + { + m.SendLocalizedMessage( 1042010 ); //You must have the objectin your backpack to use it. + return; + } + + if ( info.ButtonID != 0 && switches.Length > 0 ) + { + if( m.HairItemID == 0 ) + { + m.SendLocalizedMessage( 502623 ); // You have no hair to dye and cannot use this + } + else + { + // To prevent this from being exploited, the hue is abstracted into an internal list + + int entryIndex = switches[0] / 100; + int hueOffset = switches[0] % 100; + + if ( entryIndex >= 0 && entryIndex < m_Entries.Length ) + { + SpecialHairDyeEntry e = m_Entries[entryIndex]; + + if ( hueOffset >= 0 && hueOffset < e.HueCount ) + { + m_SpecialHairDye.Delete(); + + int hue = e.HueStart + hueOffset; + + m.HairHue = hue; + + m.SendLocalizedMessage( 501199 ); // You dye your hair + m.PlaySound( 0x4E ); + } + } + } + } + else + { + m.SendLocalizedMessage( 501200 ); // You decide not to dye your hair + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Static.cs b/Scripts/Items/Misc/Static.cs new file mode 100644 index 0000000..09fceb6 --- /dev/null +++ b/Scripts/Items/Misc/Static.cs @@ -0,0 +1,98 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Static : Item + { + public Static() : base( 0x80 ) + { + Movable = false; + } + + [Constructable] + public Static( int itemID ) : base( itemID ) + { + Movable = false; + } + + [Constructable] + public Static( int itemID, int count ) : this( Utility.Random( itemID, count ) ) + { + } + + public Static( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 && Weight == 0 ) + Weight = -1; + } + } + + public class LocalizedStatic : Static + { + private int m_LabelNumber; + + [CommandProperty( AccessLevel.GameMaster )] + public int Number + { + get{ return m_LabelNumber; } + set{ m_LabelNumber = value; InvalidateProperties(); } + } + + public override int LabelNumber{ get{ return m_LabelNumber; } } + + [Constructable] + public LocalizedStatic( int itemID ) : this( itemID, itemID < 0x4000 ? 1020000 + itemID : 1078872 + itemID ) + { + } + + [Constructable] + public LocalizedStatic( int itemID, int labelNumber ) : base( itemID ) + { + m_LabelNumber = labelNumber; + } + + public LocalizedStatic( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (byte) 0 ); // version + writer.WriteEncodedInt( (int) m_LabelNumber ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadByte(); + + switch ( version ) + { + case 0: + { + m_LabelNumber = reader.ReadEncodedInt(); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Teleporter.cs b/Scripts/Items/Misc/Teleporter.cs new file mode 100644 index 0000000..5ae4e84 --- /dev/null +++ b/Scripts/Items/Misc/Teleporter.cs @@ -0,0 +1,517 @@ +using System; +using Server; +using Server.Network; +using Server.Spells; + +namespace Server.Items +{ + public class Teleporter : Item + { + private bool m_Active, m_Creatures, m_CombatCheck; + private Point3D m_PointDest; + private Map m_MapDest; + private bool m_SourceEffect; + private bool m_DestEffect; + private int m_SoundID; + private TimeSpan m_Delay; + + [CommandProperty( AccessLevel.GameMaster )] + public bool SourceEffect + { + get{ return m_SourceEffect; } + set{ m_SourceEffect = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool DestEffect + { + get{ return m_DestEffect; } + set{ m_DestEffect = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int SoundID + { + get{ return m_SoundID; } + set{ m_SoundID = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan Delay + { + get{ return m_Delay; } + set{ m_Delay = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Active + { + get { return m_Active; } + set { m_Active = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D PointDest + { + get { return m_PointDest; } + set { m_PointDest = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Map MapDest + { + get { return m_MapDest; } + set { m_MapDest = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Creatures + { + get { return m_Creatures; } + set { m_Creatures = value; InvalidateProperties(); } + } + + + [CommandProperty( AccessLevel.GameMaster )] + public bool CombatCheck + { + get { return m_CombatCheck; } + set { m_CombatCheck = value; InvalidateProperties(); } + } + + public override int LabelNumber{ get{ return 1026095; } } // teleporter + + [Constructable] + public Teleporter() : this( new Point3D( 0, 0, 0 ), null, false ) + { + } + + [Constructable] + public Teleporter( Point3D pointDest, Map mapDest ) : this( pointDest, mapDest, false ) + { + } + + [Constructable] + public Teleporter( Point3D pointDest, Map mapDest, bool creatures ) : base( 0x1BC3 ) + { + Movable = false; + Visible = false; + + m_Active = true; + m_PointDest = pointDest; + m_MapDest = mapDest; + m_Creatures = creatures; + + m_CombatCheck = false; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Active ) + list.Add( 1060742 ); // active + else + list.Add( 1060743 ); // inactive + + if ( m_MapDest != null ) + list.Add( 1060658, "Map\t{0}", m_MapDest ); + + if ( m_PointDest != Point3D.Zero ) + list.Add( 1060659, "Coords\t{0}", m_PointDest ); + + list.Add( 1060660, "Creatures\t{0}", m_Creatures ? "Yes" : "No" ); + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( m_Active ) + { + if ( m_MapDest != null && m_PointDest != Point3D.Zero ) + LabelTo( from, "{0} [{1}]", m_PointDest, m_MapDest ); + else if ( m_MapDest != null ) + LabelTo( from, "[{0}]", m_MapDest ); + else if ( m_PointDest != Point3D.Zero ) + LabelTo( from, m_PointDest.ToString() ); + } + else + { + LabelTo( from, "(inactive)" ); + } + } + + public virtual void StartTeleport( Mobile m ) + { + if ( m_Delay == TimeSpan.Zero ) + DoTeleport( m ); + else + Timer.DelayCall( m_Delay, new TimerStateCallback( DoTeleport_Callback ), m ); + } + + private void DoTeleport_Callback( object state ) + { + DoTeleport( (Mobile) state ); + } + + public virtual void DoTeleport( Mobile m ) + { + Map map = m_MapDest; + + if ( map == null || map == Map.Internal ) + map = m.Map; + + Point3D p = m_PointDest; + + if ( p == Point3D.Zero ) + p = m.Location; + + Server.Mobiles.BaseCreature.TeleportPets( m, p, map ); + + bool sendEffect = ( !m.Hidden || m.AccessLevel == AccessLevel.Player ); + + if ( m_SourceEffect && sendEffect ) + Effects.SendLocationEffect( m.Location, m.Map, 0x3728, 10, 10 ); + + m.MoveToWorld( p, map ); + + if ( m_DestEffect && sendEffect ) + Effects.SendLocationEffect( m.Location, m.Map, 0x3728, 10, 10 ); + + if ( m_SoundID > 0 && sendEffect ) + Effects.PlaySound( m.Location, m.Map, m_SoundID ); + } + + public override bool OnMoveOver( Mobile m ) + { + if ( m_Active ) + { + if ( !m_Creatures && !m.Player ) + return true; + else if ( m_CombatCheck && SpellHelper.CheckCombat( m ) ) + { + m.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle?? + return true; + } + + StartTeleport( m ); + return false; + } + + return true; + } + + public Teleporter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 3 ); // version + + writer.Write( (bool) m_CombatCheck ); + + writer.Write( (bool) m_SourceEffect ); + writer.Write( (bool) m_DestEffect ); + writer.Write( (TimeSpan) m_Delay ); + writer.WriteEncodedInt( (int) m_SoundID ); + + writer.Write( m_Creatures ); + + writer.Write( m_Active ); + writer.Write( m_PointDest ); + writer.Write( m_MapDest ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 3: + { + m_CombatCheck = reader.ReadBool(); + goto case 2; + } + case 2: + { + m_SourceEffect = reader.ReadBool(); + m_DestEffect = reader.ReadBool(); + m_Delay = reader.ReadTimeSpan(); + m_SoundID = reader.ReadEncodedInt(); + + goto case 1; + } + case 1: + { + m_Creatures = reader.ReadBool(); + + goto case 0; + } + case 0: + { + m_Active = reader.ReadBool(); + m_PointDest = reader.ReadPoint3D(); + m_MapDest = reader.ReadMap(); + + break; + } + } + } + } + + public class SkillTeleporter : Teleporter + { + private SkillName m_Skill; + private double m_Required; + private string m_MessageString; + private int m_MessageNumber; + + [CommandProperty( AccessLevel.GameMaster )] + public SkillName Skill + { + get{ return m_Skill; } + set{ m_Skill = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public double Required + { + get{ return m_Required; } + set{ m_Required = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string MessageString + { + get{ return m_MessageString; } + set{ m_MessageString = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MessageNumber + { + get{ return m_MessageNumber; } + set{ m_MessageNumber = value; InvalidateProperties(); } + } + + private void EndMessageLock( object state ) + { + ((Mobile)state).EndAction( this ); + } + + public override bool OnMoveOver( Mobile m ) + { + if ( Active ) + { + if ( !Creatures && !m.Player ) + return true; + + Skill sk = m.Skills[m_Skill]; + + if ( sk == null || sk.Base < m_Required ) + { + if ( m.BeginAction( this ) ) + { + if ( m_MessageString != null ) + m.Send( new UnicodeMessage( Serial, ItemID, MessageType.Regular, 0x3B2, 3, "ENU", null, m_MessageString ) ); + else if ( m_MessageNumber != 0 ) + m.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, m_MessageNumber, null, "" ) ); + + Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), new TimerStateCallback( EndMessageLock ), m ); + } + + return false; + } + + StartTeleport( m ); + return false; + } + + return true; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + int skillIndex = (int)m_Skill; + string skillName; + + if ( skillIndex >= 0 && skillIndex < SkillInfo.Table.Length ) + skillName = SkillInfo.Table[skillIndex].Name; + else + skillName = "(Invalid)"; + + list.Add( 1060661, "{0}\t{1:F1}", skillName, m_Required ); + + if ( m_MessageString != null ) + list.Add( 1060662, "Message\t{0}", m_MessageString ); + else if ( m_MessageNumber != 0 ) + list.Add( 1060662, "Message\t#{0}", m_MessageNumber ); + } + + [Constructable] + public SkillTeleporter() + { + } + + public SkillTeleporter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( (int) m_Skill ); + writer.Write( (double) m_Required ); + writer.Write( (string) m_MessageString ); + writer.Write( (int) m_MessageNumber ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Skill = (SkillName)reader.ReadInt(); + m_Required = reader.ReadDouble(); + m_MessageString = reader.ReadString(); + m_MessageNumber = reader.ReadInt(); + + break; + } + } + } + } + + public class KeywordTeleporter : Teleporter + { + private string m_Substring; + private int m_Keyword; + private int m_Range; + + [CommandProperty( AccessLevel.GameMaster )] + public string Substring + { + get{ return m_Substring; } + set{ m_Substring = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Keyword + { + get{ return m_Keyword; } + set{ m_Keyword = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Range + { + get{ return m_Range; } + set{ m_Range = value; InvalidateProperties(); } + } + + public override bool HandlesOnSpeech{ get{ return true; } } + + public override void OnSpeech( SpeechEventArgs e ) + { + if ( !e.Handled && Active ) + { + Mobile m = e.Mobile; + + if ( !Creatures && !m.Player ) + return; + + if ( !m.InRange( GetWorldLocation(), m_Range ) ) + return; + + bool isMatch = false; + + if ( m_Keyword >= 0 && e.HasKeyword( m_Keyword ) ) + isMatch = true; + else if ( m_Substring != null && e.Speech.ToLower().IndexOf( m_Substring.ToLower() ) >= 0 ) + isMatch = true; + + if ( !isMatch ) + return; + + e.Handled = true; + StartTeleport( m ); + } + } + + public override bool OnMoveOver( Mobile m ) + { + return true; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + list.Add( 1060661, "Range\t{0}", m_Range ); + + if ( m_Keyword >= 0 ) + list.Add( 1060662, "Keyword\t{0}", m_Keyword ); + + if ( m_Substring != null ) + list.Add( 1060663, "Substring\t{0}", m_Substring ); + } + + [Constructable] + public KeywordTeleporter() + { + m_Keyword = -1; + m_Substring = null; + } + + public KeywordTeleporter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Substring ); + writer.Write( m_Keyword ); + writer.Write( m_Range ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Substring = reader.ReadString(); + m_Keyword = reader.ReadInt(); + m_Range = reader.ReadInt(); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/TrashBarrel.cs b/Scripts/Items/Misc/TrashBarrel.cs new file mode 100644 index 0000000..9e8bdbc --- /dev/null +++ b/Scripts/Items/Misc/TrashBarrel.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Multis; + +namespace Server.Items +{ + public class TrashBarrel : Container, IChopable + { + public override int LabelNumber{ get{ return 1041064; } } // a trash barrel + + public override int DefaultMaxWeight{ get{ return 0; } } // A value of 0 signals unlimited weight + + public override bool IsDecoContainer + { + get{ return false; } + } + + [Constructable] + public TrashBarrel() : base( 0xE77 ) + { + Movable = false; + } + + public TrashBarrel( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Items.Count > 0 ) + { + m_Timer = new EmptyTimer( this ); + m_Timer.Start(); + } + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( !base.OnDragDrop( from, dropped ) ) + return false; + + if ( TotalItems >= 50 ) + { + Empty( 501478 ); // The trash is full! Emptying! + } + else + { + SendLocalizedMessageTo( from, 1010442 ); // The item will be deleted in three minutes + + if ( m_Timer != null ) + m_Timer.Stop(); + else + m_Timer = new EmptyTimer( this ); + + m_Timer.Start(); + } + + return true; + } + + public override bool OnDragDropInto( Mobile from, Item item, Point3D p ) + { + if ( !base.OnDragDropInto( from, item, p ) ) + return false; + + if ( TotalItems >= 50 ) + { + Empty( 501478 ); // The trash is full! Emptying! + } + else + { + SendLocalizedMessageTo( from, 1010442 ); // The item will be deleted in three minutes + + if ( m_Timer != null ) + m_Timer.Stop(); + else + m_Timer = new EmptyTimer( this ); + + m_Timer.Start(); + } + + return true; + } + + public void OnChop( Mobile from ) + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if ( house != null && house.IsCoOwner( from ) ) + { + Effects.PlaySound( Location, Map, 0x3B3 ); + from.SendLocalizedMessage( 500461 ); // You destroy the item. + Destroy(); + } + } + + public void Empty( int message ) + { + List items = this.Items; + + if ( items.Count > 0 ) + { + PublicOverheadMessage( Network.MessageType.Regular, 0x3B2, message, "" ); + + for ( int i = items.Count - 1; i >= 0; --i ) + { + if ( i >= items.Count ) + continue; + + items[i].Delete(); + } + } + + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + } + + private Timer m_Timer; + + private class EmptyTimer : Timer + { + private TrashBarrel m_Barrel; + + public EmptyTimer( TrashBarrel barrel ) : base( TimeSpan.FromMinutes( 3.0 ) ) + { + m_Barrel = barrel; + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + m_Barrel.Empty( 501479 ); // Emptying the trashcan! + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/WarningItem.cs b/Scripts/Items/Misc/WarningItem.cs new file mode 100644 index 0000000..35ac293 --- /dev/null +++ b/Scripts/Items/Misc/WarningItem.cs @@ -0,0 +1,242 @@ +using System; +using Server; +using Server.Network; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Items +{ + public class WarningItem : Item + { + private string m_WarningString; + private int m_WarningNumber; + private int m_Range; + private TimeSpan m_ResetDelay; + + [CommandProperty( AccessLevel.GameMaster )] + public string WarningString + { + get{ return m_WarningString; } + set{ m_WarningString = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int WarningNumber + { + get{ return m_WarningNumber; } + set{ m_WarningNumber = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Range + { + get{ return m_Range; } + set{ if ( value > 18 ) value = 18; m_Range = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan ResetDelay + { + get{ return m_ResetDelay; } + set{ m_ResetDelay = value; } + } + + [Constructable] + public WarningItem( int itemID, int range, int warning ) : base( itemID ) + { + if ( range > 18 ) + range = 18; + + Movable = false; + + m_WarningNumber = warning; + m_Range = range; + } + + [Constructable] + public WarningItem( int itemID, int range, string warning ) : base( itemID ) + { + if ( range > 18 ) + range = 18; + + Movable = false; + + m_WarningString = warning; + m_Range = range; + } + + public WarningItem( Serial serial ) : base( serial ) + { + } + + private bool m_Broadcasting; + + private DateTime m_LastBroadcast; + + public virtual void SendMessage( Mobile triggerer, bool onlyToTriggerer, string messageString, int messageNumber ) + { + if ( onlyToTriggerer ) + { + if ( messageString != null ) + triggerer.SendMessage( messageString ); + else + triggerer.SendLocalizedMessage( messageNumber ); + } + else + { + if ( messageString != null ) + PublicOverheadMessage( MessageType.Regular, 0x3B2, false, messageString ); + else + PublicOverheadMessage( MessageType.Regular, 0x3B2, messageNumber ); + } + } + + public virtual bool OnlyToTriggerer{ get{ return false; } } + public virtual int NeighborRange { get { return 5; } } + + public virtual void Broadcast( Mobile triggerer ) + { + if ( m_Broadcasting || (DateTime.Now < (m_LastBroadcast + m_ResetDelay)) ) + return; + + m_LastBroadcast = DateTime.Now; + + m_Broadcasting = true; + + SendMessage( triggerer, this.OnlyToTriggerer, m_WarningString, m_WarningNumber ); + + if ( NeighborRange >= 0 ) + { + List list = new List(); + + foreach ( Item item in GetItemsInRange( NeighborRange ) ) + { + if ( item != this && item is WarningItem ) + list.Add( (WarningItem)item ); + } + + for ( int i = 0; i < list.Count; i++ ) + list[i].Broadcast( triggerer ); + } + + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( InternalCallback ) ); + } + + private void InternalCallback() + { + m_Broadcasting = false; + } + + public override bool HandlesOnMovement{ get{ return true; } } + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( m.Player && Utility.InRange( m.Location, Location, m_Range ) && !Utility.InRange( oldLocation, Location, m_Range ) ) + Broadcast( m ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( (string) m_WarningString ); + writer.Write( (int) m_WarningNumber ); + writer.Write( (int) m_Range ); + + writer.Write( (TimeSpan) m_ResetDelay ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_WarningString = reader.ReadString(); + m_WarningNumber = reader.ReadInt(); + m_Range = reader.ReadInt(); + m_ResetDelay = reader.ReadTimeSpan(); + + break; + } + } + } + } + + public class HintItem : WarningItem + { + private string m_HintString; + private int m_HintNumber; + + [CommandProperty( AccessLevel.GameMaster )] + public string HintString + { + get{ return m_HintString; } + set{ m_HintString = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int HintNumber + { + get{ return m_HintNumber; } + set{ m_HintNumber = value; } + } + + public override bool OnlyToTriggerer{ get{ return true; } } + + [Constructable] + public HintItem( int itemID, int range, int warning, int hint ) : base( itemID, range, warning ) + { + m_HintNumber = hint; + } + + [Constructable] + public HintItem( int itemID, int range, string warning, string hint ) : base( itemID, range, warning ) + { + m_HintString = hint; + } + + public HintItem( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + SendMessage( from, true, m_HintString, m_HintNumber ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( (string) m_HintString ); + writer.Write( (int) m_HintNumber ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_HintString = reader.ReadString(); + m_HintNumber = reader.ReadInt(); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Misc/Waypoint.cs b/Scripts/Items/Misc/Waypoint.cs new file mode 100644 index 0000000..608ea30 --- /dev/null +++ b/Scripts/Items/Misc/Waypoint.cs @@ -0,0 +1,161 @@ +using System; +using Server; +using Server.Targeting; +using Server.Commands; + +namespace Server.Items +{ + [FlipableAttribute( 0x1f14, 0x1f15, 0x1f16, 0x1f17 )] + public class WayPoint : Item + { + public static void Initialize() + { + CommandSystem.Register( "WayPointSeq", AccessLevel.GameMaster, new CommandEventHandler( WayPointSeq_OnCommand ) ); + } + + public static void WayPointSeq_OnCommand( CommandEventArgs arg ) + { + arg.Mobile.SendMessage( "Target the position of the first way point." ); + arg.Mobile.Target = new WayPointSeqTarget( null ); + } + + private WayPoint m_Next; + + public override string DefaultName + { + get { return "AI Way Point"; } + } + + [Constructable] + public WayPoint() : base( 0x1f14 ) + { + this.Hue = 0x498; + this.Visible = false; + //this.Movable = false; + } + + public WayPoint( WayPoint prev ) : this() + { + if ( prev != null ) + prev.NextPoint = this; + } + + [CommandProperty( AccessLevel.GameMaster )] + public WayPoint NextPoint + { + get + { + return m_Next; + } + set + { + if ( m_Next != this ) + m_Next = value; + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + from.SendMessage( "Target the next way point in the sequence." ); + + from.Target = new NextPointTarget( this ); + } + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( m_Next == null ) + LabelTo( from, "(Unlinked)" ); + else + LabelTo( from, "(Linked: {0})", m_Next.Location ); + } + + public WayPoint( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch( version ) + { + case 0: + { + m_Next = reader.ReadItem() as WayPoint; + break; + } + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( m_Next ); + } + } + + public class NextPointTarget : Target + { + private WayPoint m_Point; + + public NextPointTarget( WayPoint pt ) : base( -1, false, TargetFlags.None ) + { + m_Point = pt; + } + + protected override void OnTarget( Mobile from, object target ) + { + if ( target is WayPoint && m_Point != null ) + { + m_Point.NextPoint = (WayPoint)target; + } + else + { + from.SendMessage( "Target a way point." ); + } + } + } + + public class WayPointSeqTarget : Target + { + private WayPoint m_Last; + + public WayPointSeqTarget( WayPoint last ) : base( -1, true, TargetFlags.None ) + { + m_Last = last; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is WayPoint ) + { + if ( m_Last != null ) + m_Last.NextPoint = (WayPoint)targeted; + } + else if ( targeted is IPoint3D ) + { + Point3D p = new Point3D( (IPoint3D)targeted ); + + WayPoint point = new WayPoint( m_Last ); + point.MoveToWorld( p, from.Map ); + + from.Target = new WayPointSeqTarget( point ); + from.SendMessage( "Target the position of the next way point in the sequence, or target a way point link the newest way point to." ); + } + else + { + from.SendMessage( "Target a position, or another way point." ); + } + } + } +} diff --git a/Scripts/Items/Rares/BottleOfAcid.cs b/Scripts/Items/Rares/BottleOfAcid.cs new file mode 100644 index 0000000..2a3b76c --- /dev/null +++ b/Scripts/Items/Rares/BottleOfAcid.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections; +using Server.Network; +using Server.Targeting; +using Server.Prompts; + +namespace Server.Items +{ + public class BottleOfAcid : Item + { + public override int Hue{ get { return 0x428; } } + + public override double DefaultWeight + { + get { return 1.0; } + } + + [Constructable] + public BottleOfAcid() : base( 0x2038 ) + { + Name = "bottle of acid"; + Stackable = true; + } + + public override void OnDoubleClick( Mobile from ) + { + Target t; + + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1060640 ); // The item must be in your backpack to use it. + } + else + { + from.SendMessage( "What chest do you want to use the acid on?" ); + t = new UnlockTarget( this ); + from.Target = t; + } + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + list.Add( 1070722, "Dissolve Chest Traps & Locks" ); + } + + private class UnlockTarget : Target + { + private BottleOfAcid m_Key; + + public UnlockTarget( BottleOfAcid key ) : base( 1, false, TargetFlags.None ) + { + m_Key = key; + CheckLOS = true; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !m_Key.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1060640 ); // The item must be in your backpack to use it. + } + else if ( targeted == m_Key ) + { + from.SendMessage( "This acid is to dissolve locks and traps on most chests." ); + } + else if ( targeted is LootChest || targeted is SunkenChest || targeted is AncientChest || targeted is TreasureMapChest ) + { + if ( targeted is LootChest ) + ((LootChest)targeted).Setup(); + + ILockable o = (ILockable)targeted; + LockableContainer cont2 = (LockableContainer)o; + TrapableContainer cont3 = (TrapableContainer)o; + + if ( ( o.Locked ) || ( cont3.TrapType != TrapType.None ) ) + { + if ( o is BaseDoor && !((BaseDoor)o).UseLocks() ) // this seems to check house doors also + { + from.SendMessage( "This acid is used to dissolve locks and traps on chests." ); + } + else + { + o.Locked = false; + + if ( o is LockableContainer ) + { + LockableContainer cont = (LockableContainer)o; + if ( cont.LockLevel == -255 ) + { + cont.LockLevel = cont.RequiredSkill - 10; + if ( cont.LockLevel == 0 ) + cont.LockLevel = -1; + } + + cont.Picker = from; // sets "lockpicker" to the user. + } + + if ( o is TrapableContainer ) + { + TrapableContainer cont = (TrapableContainer)o; + + if ( cont.TrapType != TrapType.None ) + cont.TrapType = TrapType.None; + } + + from.SendMessage( "The acid seems to have eaten away at the mechanism inside." ); + from.RevealingAction(); + from.PlaySound( 0x231 ); + from.AddToBackpack( new Bottle() ); + m_Key.Consume(); + } + } + else + { + from.SendMessage( "You don't need to use acid on that." ); + } + } + else + { + from.SendMessage( "This acid is to dissolve locks and traps on chests." ); + } + } + } + + public BottleOfAcid( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Rares/Elixirs/BaseManaElixir.cs b/Scripts/Items/Rares/Elixirs/BaseManaElixir.cs new file mode 100644 index 0000000..4ad8838 --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/BaseManaElixir.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + public abstract class BaseManaElixir : BasePotion + { + public override int Hue{ get { return 0x43C; } } + + public abstract int MinMana { get; } + public abstract int MaxMana { get; } + public abstract double Delay { get; } + + public BaseManaElixir( PotionEffect effect ) : base( 0x180F, effect ) + { + } + + public BaseManaElixir( Serial serial ) : base( serial ) + { + } + + public void DoMana( Mobile from ) + { + from.Mana = from.Mana + ( Utility.RandomMinMax( MinMana, MaxMana ) ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void Drink( Mobile from ) + { + if ( from.Mana < from.ManaMax ) + { + if ( from.BeginAction( typeof( BaseManaElixir ) ) ) + { + DoMana( from ); + + BasePotion.PlayDrinkEffect( from ); + + this.Consume(); + + Timer.DelayCall( TimeSpan.FromSeconds( Delay ), new TimerStateCallback( ReleaseManaLock ), from ); + } + else + from.LocalOverheadMessage( MessageType.Regular, 0x22, true, "You must wait 10 seconds before using another mana potion." ); + + } + else + from.SendMessage( "You decide against drinking this potion, as you are already at full mana." ); + } + + private static void ReleaseManaLock( object state ) + { + ((Mobile)state).EndAction( typeof( BaseManaElixir ) ); + } + } +} diff --git a/Scripts/Items/Rares/Elixirs/BaseVigorElixir.cs b/Scripts/Items/Rares/Elixirs/BaseVigorElixir.cs new file mode 100644 index 0000000..dc6bcba --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/BaseVigorElixir.cs @@ -0,0 +1,74 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Network; + +namespace Server.Items +{ + public abstract class BaseVigorElixir : BasePotion + { + public override int Hue{ get { return 0x429; } } + + public abstract int MinRejuv { get; } + public abstract int MaxRejuv { get; } + public abstract double Delay { get; } + + public BaseVigorElixir( PotionEffect effect ) : base( 0x180F, effect ) + { + } + + public BaseVigorElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public void DoRejuv( Mobile from ) + { + int min = MinRejuv; + int max = MaxRejuv; + + from.Mana = from.Mana + ( Utility.RandomMinMax( min, max ) ); + from.Stam = from.Stam + ( Utility.RandomMinMax( min, max ) ); + + if ( from is PlayerMobile ) + { + min = (int)(min * Server.Misc.Settings.HitPoints()); + max = (int)(max * Server.Misc.Settings.HitPoints()); + } + + from.Hits = from.Hits + ( Utility.RandomMinMax( min, max ) ); + } + + public override void Drink( Mobile from ) + { + if ( from.BeginAction( typeof( BaseVigorElixir ) ) ) + { + DoRejuv( from ); + + BasePotion.PlayDrinkEffect( from ); + + this.Consume(); + + Timer.DelayCall( TimeSpan.FromSeconds( Delay ), new TimerStateCallback( ReleaseRejuvenateLock ), from ); + } + else + from.LocalOverheadMessage( MessageType.Regular, 0x22, true, "You must wait 10 seconds before using another rejuvenation potion." ); + } + + private static void ReleaseRejuvenateLock( object state ) + { + ((Mobile)state).EndAction( typeof( BaseVigorElixir ) ); + } + } +} diff --git a/Scripts/Items/Rares/Elixirs/InvisibilityElixir.cs b/Scripts/Items/Rares/Elixirs/InvisibilityElixir.cs new file mode 100644 index 0000000..261468d --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/InvisibilityElixir.cs @@ -0,0 +1,138 @@ +using System; +using Server; +using System.Collections; +using Server.Network; +using System.Text; +using Server.Items; +using Server.Mobiles; + +namespace Server.Items +{ + public class InvisibilityElixir : BasePotion + { + public override int Hue{ get { return 0x432; } } + + [Constructable] + public InvisibilityElixir() : base( 0x180F, PotionEffect.Invisibility ) + { + Name = "elixir of invisibility"; + ItemID = 0x2038; + } + + public InvisibilityElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + private static Hashtable m_Table = new Hashtable(); + + public static bool HasEffect( Mobile m ) + { + return ( m_Table[m] != null ); + } + + public static void RemoveEffect( Mobile m ) + { + object[] mods = (object[])m_Table[m]; + + if ( mods != null ) + { + m.RemoveSkillMod( (SkillMod)mods[0] ); + m.RemoveSkillMod( (SkillMod)mods[1] ); + } + + m_Table.Remove( m ); + m.EndAction( typeof( InvisibilityElixir ) ); + m.Hidden = false; + } + + public override void Drink( Mobile m ) + { + if ( !m.CanBeginAction( typeof( InvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else if ( !m.CanBeginAction( typeof( WeakInvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else if ( !m.CanBeginAction( typeof( StrongInvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else + { + int MyHide = 100 - (int)m.Skills[SkillName.Hiding].Base; + if ( MyHide < 0 ){ MyHide = 0; } + int MyStealth = 100 - (int)m.Skills[SkillName.Stealth].Base; + if ( MyStealth < 0 ){ MyStealth = 0; } + + object[] mods = new object[] + { + new DefaultSkillMod( SkillName.Hiding, true, MyHide ), + new DefaultSkillMod( SkillName.Stealth, true, MyStealth ), + }; + + m_Table[m] = mods; + + m.AddSkillMod( (SkillMod)mods[0] ); + m.AddSkillMod( (SkillMod)mods[1] ); + + foreach ( Mobile pet in World.Mobiles.Values ) + { + if ( pet is BaseCreature ) + { + BaseCreature bc = (BaseCreature)pet; + if ( bc.Controlled && bc.ControlMaster == m ) + pet.Hidden = true; + } + } + + new InternalTimer( m, TimeSpan.FromMinutes( 2 ) ).Start(); + + BasePotion.PlayDrinkEffect( m ); + + m.Hidden = true; + + m.BeginAction( typeof( InvisibilityElixir ) ); + + this.Amount--; + if (this.Amount <= 0) + this.Delete(); + } + } + + private class InternalTimer : Timer + { + private Mobile m_m; + private DateTime m_Expire; + + public InternalTimer( Mobile m, TimeSpan duration ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 0.1 ) ) + { + m_m = m; + m_Expire = DateTime.Now + duration; + + } + + protected override void OnTick() + { + if ( DateTime.Now >= m_Expire ) + { + InvisibilityElixir.RemoveEffect( m_m ); + Stop(); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Rares/Elixirs/ManaElixir.cs b/Scripts/Items/Rares/Elixirs/ManaElixir.cs new file mode 100644 index 0000000..4e3a21f --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/ManaElixir.cs @@ -0,0 +1,35 @@ +using System; +using Server; + +namespace Server.Items +{ + public class ManaElixir : BaseManaElixir + { + public override int MinMana { get{ return 13; } } + public override int MaxMana { get{ return 16; } } + public override double Delay { get{ return 8.0; } } + + [Constructable] + public ManaElixir( ) : base( PotionEffect.Mana ) + { + Name = "elixir of mana"; + ItemID = 0x2038; + } + + public ManaElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Rares/Elixirs/StrongInvisibilityElixir.cs b/Scripts/Items/Rares/Elixirs/StrongInvisibilityElixir.cs new file mode 100644 index 0000000..42c8c82 --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/StrongInvisibilityElixir.cs @@ -0,0 +1,144 @@ +using System; +using Server; +using System.Collections; +using Server.Network; +using System.Text; +using Server.Items; +using Server.Mobiles; + +namespace Server.Items +{ + public class StrongInvisibilityElixir : BasePotion + { + public override int Hue{ get { return 0x432; } } + + [Constructable] + public StrongInvisibilityElixir() : base( 0x180F, PotionEffect.InvisibilityStrong ) + { + Name = "elixir of invisibility"; + ItemID = 0x2037; + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + list.Add( 1070722, "Strong" ); + } + + public StrongInvisibilityElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + private static Hashtable m_Table = new Hashtable(); + + public static bool HasEffect( Mobile m ) + { + return ( m_Table[m] != null ); + } + + public static void RemoveEffect( Mobile m ) + { + object[] mods = (object[])m_Table[m]; + + if ( mods != null ) + { + m.RemoveSkillMod( (SkillMod)mods[0] ); + m.RemoveSkillMod( (SkillMod)mods[1] ); + } + + m_Table.Remove( m ); + m.EndAction( typeof( StrongInvisibilityElixir ) ); + m.Hidden = false; + } + + public override void Drink( Mobile m ) + { + if ( !m.CanBeginAction( typeof( InvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else if ( !m.CanBeginAction( typeof( WeakInvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else if ( !m.CanBeginAction( typeof( StrongInvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else + { + int MyHide = 100 - (int)m.Skills[SkillName.Hiding].Base; + if ( MyHide < 0 ){ MyHide = 0; } + int MyStealth = 100 - (int)m.Skills[SkillName.Stealth].Base; + if ( MyStealth < 0 ){ MyStealth = 0; } + + object[] mods = new object[] + { + new DefaultSkillMod( SkillName.Hiding, true, MyHide ), + new DefaultSkillMod( SkillName.Stealth, true, MyStealth ), + }; + + m_Table[m] = mods; + + m.AddSkillMod( (SkillMod)mods[0] ); + m.AddSkillMod( (SkillMod)mods[1] ); + + foreach ( Mobile pet in World.Mobiles.Values ) + { + if ( pet is BaseCreature ) + { + BaseCreature bc = (BaseCreature)pet; + if ( bc.Controlled && bc.ControlMaster == m ) + pet.Hidden = true; + } + } + + new InternalTimer( m, TimeSpan.FromMinutes( 3 ) ).Start(); + + BasePotion.PlayDrinkEffect( m ); + + m.Hidden = true; + + m.BeginAction( typeof( StrongInvisibilityElixir ) ); + + this.Amount--; + if (this.Amount <= 0) + this.Delete(); + } + } + + private class InternalTimer : Timer + { + private Mobile m_m; + private DateTime m_Expire; + + public InternalTimer( Mobile m, TimeSpan duration ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 0.1 ) ) + { + m_m = m; + m_Expire = DateTime.Now + duration; + + } + + protected override void OnTick() + { + if ( DateTime.Now >= m_Expire ) + { + StrongInvisibilityElixir.RemoveEffect( m_m ); + Stop(); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Rares/Elixirs/StrongManaElixir.cs b/Scripts/Items/Rares/Elixirs/StrongManaElixir.cs new file mode 100644 index 0000000..4184a47 --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/StrongManaElixir.cs @@ -0,0 +1,41 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StrongManaElixir : BaseManaElixir + { + public override int MinMana { get{ return 20; } } + public override int MaxMana { get{ return 25; } } + public override double Delay { get{ return 10.0; } } + + [Constructable] + public StrongManaElixir( ) : base( PotionEffect.ManaStrong ) + { + Name = "elixir of mana"; + ItemID = 0x2037; + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + list.Add( 1070722, "Strong" ); + } + + public StrongManaElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Rares/Elixirs/StrongVigorElixir.cs b/Scripts/Items/Rares/Elixirs/StrongVigorElixir.cs new file mode 100644 index 0000000..cdf00e1 --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/StrongVigorElixir.cs @@ -0,0 +1,41 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StrongVigorElixir : BaseVigorElixir + { + public override int MinRejuv { get{ return 20; } } + public override int MaxRejuv { get{ return 25; } } + public override double Delay { get{ return 10.0; } } + + [Constructable] + public StrongVigorElixir( ) : base( PotionEffect.VigorStrong ) + { + Name = "elixir of vigor"; + ItemID = 0x2037; + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + list.Add( 1070722, "Strong" ); + } + + public StrongVigorElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Rares/Elixirs/VigorElixir.cs b/Scripts/Items/Rares/Elixirs/VigorElixir.cs new file mode 100644 index 0000000..f2f8c44 --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/VigorElixir.cs @@ -0,0 +1,35 @@ +using System; +using Server; + +namespace Server.Items +{ + public class VigorElixir : BaseVigorElixir + { + public override int MinRejuv { get{ return 13; } } + public override int MaxRejuv { get{ return 16; } } + public override double Delay { get{ return 8.0; } } + + [Constructable] + public VigorElixir( ) : base( PotionEffect.Vigor ) + { + Name = "elixir of vigor"; + ItemID = 0x2038; + } + + public VigorElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Rares/Elixirs/WeakInvisibilityElixir.cs b/Scripts/Items/Rares/Elixirs/WeakInvisibilityElixir.cs new file mode 100644 index 0000000..0e79d50 --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/WeakInvisibilityElixir.cs @@ -0,0 +1,144 @@ +using System; +using Server; +using System.Collections; +using Server.Network; +using System.Text; +using Server.Items; +using Server.Mobiles; + +namespace Server.Items +{ + public class WeakInvisibilityElixir : BasePotion + { + public override int Hue{ get { return 0x432; } } + + [Constructable] + public WeakInvisibilityElixir() : base( 0x23BD, PotionEffect.InvisibilityWeak ) + { + Name = "elixir of invisibility"; + ItemID = 0x12AD; + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + list.Add( 1070722, "Weak" ); + } + + public WeakInvisibilityElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + private static Hashtable m_Table = new Hashtable(); + + public static bool HasEffect( Mobile m ) + { + return ( m_Table[m] != null ); + } + + public static void RemoveEffect( Mobile m ) + { + object[] mods = (object[])m_Table[m]; + + if ( mods != null ) + { + m.RemoveSkillMod( (SkillMod)mods[0] ); + m.RemoveSkillMod( (SkillMod)mods[1] ); + } + + m_Table.Remove( m ); + m.EndAction( typeof( WeakInvisibilityElixir ) ); + m.Hidden = false; + } + + public override void Drink( Mobile m ) + { + if ( !m.CanBeginAction( typeof( InvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else if ( !m.CanBeginAction( typeof( WeakInvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else if ( !m.CanBeginAction( typeof( StrongInvisibilityElixir ) ) ) + { + m.PrivateOverheadMessage(MessageType.Regular, 0x14C, false, "You cannot drink another invisibility potion yet", m.NetState); + } + else + { + int MyHide = 100 - (int)m.Skills[SkillName.Hiding].Base; + if ( MyHide < 0 ){ MyHide = 0; } + int MyStealth = 100 - (int)m.Skills[SkillName.Stealth].Base; + if ( MyStealth < 0 ){ MyStealth = 0; } + + object[] mods = new object[] + { + new DefaultSkillMod( SkillName.Hiding, true, MyHide ), + new DefaultSkillMod( SkillName.Stealth, true, MyStealth ), + }; + + m_Table[m] = mods; + + m.AddSkillMod( (SkillMod)mods[0] ); + m.AddSkillMod( (SkillMod)mods[1] ); + + foreach ( Mobile pet in World.Mobiles.Values ) + { + if ( pet is BaseCreature ) + { + BaseCreature bc = (BaseCreature)pet; + if ( bc.Controlled && bc.ControlMaster == m ) + pet.Hidden = true; + } + } + + new InternalTimer( m, TimeSpan.FromMinutes( 1 ) ).Start(); + + BasePotion.PlayDrinkEffect( m ); + + m.Hidden = true; + + m.BeginAction( typeof( WeakInvisibilityElixir ) ); + + this.Amount--; + if (this.Amount <= 0) + this.Delete(); + } + } + + private class InternalTimer : Timer + { + private Mobile m_m; + private DateTime m_Expire; + + public InternalTimer( Mobile m, TimeSpan duration ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 0.1 ) ) + { + m_m = m; + m_Expire = DateTime.Now + duration; + + } + + protected override void OnTick() + { + if ( DateTime.Now >= m_Expire ) + { + WeakInvisibilityElixir.RemoveEffect( m_m ); + Stop(); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Rares/Elixirs/WeakManaElixir.cs b/Scripts/Items/Rares/Elixirs/WeakManaElixir.cs new file mode 100644 index 0000000..57014bb --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/WeakManaElixir.cs @@ -0,0 +1,41 @@ +using System; +using Server; + +namespace Server.Items +{ + public class WeakManaElixir : BaseManaElixir + { + public override int MinMana { get{ return 6; } } + public override int MaxMana { get{ return 8; } } + public override double Delay { get{ return 3.0; } } + + [Constructable] + public WeakManaElixir( ) : base( PotionEffect.ManaWeak ) + { + Name = "elixir of mana"; + ItemID = 0x12AD; + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + list.Add( 1070722, "Weak" ); + } + + public WeakManaElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Rares/Elixirs/WeakVigorElixir.cs b/Scripts/Items/Rares/Elixirs/WeakVigorElixir.cs new file mode 100644 index 0000000..b5d9532 --- /dev/null +++ b/Scripts/Items/Rares/Elixirs/WeakVigorElixir.cs @@ -0,0 +1,41 @@ +using System; +using Server; + +namespace Server.Items +{ + public class WeakVigorElixir : BaseVigorElixir + { + public override int MinRejuv { get{ return 6; } } + public override int MaxRejuv { get{ return 8; } } + public override double Delay { get{ return 3.0; } } + + [Constructable] + public WeakVigorElixir( ) : base( PotionEffect.VigorWeak ) + { + Name = "elixir of vigor"; + ItemID = 0x12AD; + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + list.Add( 1070722, "Weak" ); + } + + public WeakVigorElixir( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Rares/SkeletonKeys.cs b/Scripts/Items/Rares/SkeletonKeys.cs new file mode 100644 index 0000000..8247be5 --- /dev/null +++ b/Scripts/Items/Rares/SkeletonKeys.cs @@ -0,0 +1,180 @@ +using System; +using Server.Network; +using Server.Targeting; +using Server.Items; +using Server.Regions; + +namespace Server.Items +{ + public class SkeletonKeys : Item + { + [Constructable] + public SkeletonKeys() : base( 0x176B ) + { + Name = "skeleton keys"; + Uses = Utility.RandomMinMax( 3, 10 ); + UsesMax = Uses; + } + + public SkeletonKeys( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + from.SendMessage( "What do you want to the keys on?" ); + from.Target = new InternalTarget( this ); + } + + public override void AddNameProperty( ObjectPropertyList list ) + { + base.AddNameProperty( list ); + + if ( Uses > 0 ) + { + if ( Uses > 1 ) + list.Add( 1062518, "{0}", Uses ); + else + list.Add( 1062519, "{0}", Uses ); + } + } + + private class InternalTarget : Target + { + private SkeletonKeys m_Item; + + public InternalTarget( SkeletonKeys item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) + return; + + if ( targeted is LootChest ) + ((LootChest)targeted).Setup(); + + if ( targeted is BaseDoor && from.Region is DungeonRegion ) + { + BaseDoor door = (BaseDoor)targeted; + + if ( door.Sealed > DateTime.Now ) + { + from.PlaySound( 0x241 ); + door.Sealed = DateTime.MinValue; + door.SendLocalizedMessageTo( from, 502076 ); + } + else + { + from.SendLocalizedMessage( 502069 ); // This does not appear to be locked + } + } + else if ( targeted is ILockpickable ) + { + Item item = (Item)targeted; + from.Direction = from.GetDirectionTo( item ); + + if ( ((ILockpickable)targeted).Locked ) + { + from.PlaySound( 0x241 ); + + new InternalTimer( from, (ILockpickable)targeted, m_Item ).Start(); + } + else + { + // The door is not locked + from.SendLocalizedMessage( 502069 ); // This does not appear to be locked + } + } + else + { + from.SendLocalizedMessage( 501666 ); // You can't unlock that! + } + } + + private class InternalTimer : Timer + { + private Mobile m_From; + private ILockpickable m_Item; + private SkeletonKeys m_SkeletonKeys; + + public InternalTimer( Mobile from, ILockpickable item, SkeletonKeys keys ) : base( TimeSpan.FromSeconds( 3.0 ) ) + { + m_From = from; + m_Item = item; + m_SkeletonKeys = keys; + Priority = TimerPriority.TwoFiftyMS; + } + + protected void BrokeSkeletonKeysTest() + { + // When failed, a 25% chance to break the SkeletonKeys + if ( Utility.Random( 4 ) == 0 ) + { + Item item = (Item)m_Item; + m_From.SendMessage( "You broke one of the keys!" ); + m_From.PlaySound( 0x3A4 ); + m_SkeletonKeys.Uses--; + if ( m_SkeletonKeys.Uses < 1 ) + m_SkeletonKeys.Delete(); + } + } + + protected override void OnTick() + { + Item item = (Item)m_Item; + + if ( !m_From.InRange( item.GetWorldLocation(), 1 ) ) + return; + + if ( m_Item.LockLevel == 0 || m_Item.LockLevel == -255 ) + { + // LockLevel of 0 means that the door can't be picklocked + // LockLevel of -255 means it's magic locked + m_From.SendMessage( "This lock cannot be unlocked by normal means." ); + return; + } + + if ( (m_From.Skills[SkillName.Lockpicking].Value+20) < m_Item.RequiredSkill ) + { + /* + // Do some training to gain skills + m_From.CheckSkill( SkillName.Lockpicking, 0, m_Item.LockLevel );*/ + + // The LockLevel is higher thant the Lockpicking of the player + item.SendLocalizedMessageTo( m_From, 502072 ); // You don't see how that lock can be manipulated. + return; + } + + if ( m_From.CheckTargetSkill( SkillName.Lockpicking, m_Item, m_Item.LockLevel-20, m_Item.MaxLockLevel-20 ) ) + { + // Success! Pick the lock! + m_From.SendMessage( "The lock opens with the keys." ); + m_From.PlaySound( 0x4A ); + m_Item.LockPick( m_From ); + } + else + { + // The player failed to pick the lock + BrokeSkeletonKeysTest(); + m_From.SendMessage( "You are unable to unlock this." ); + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Arrows/Arrow.cs b/Scripts/Items/Resources/Arrows/Arrow.cs new file mode 100644 index 0000000..a5dfd04 --- /dev/null +++ b/Scripts/Items/Resources/Arrows/Arrow.cs @@ -0,0 +1,44 @@ +using System; + +namespace Server.Items +{ + public class Arrow : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Arrow() : this( 1 ) + { + } + + [Constructable] + public Arrow( int amount ) : base( 0xF3F ) + { + Stackable = true; + Amount = amount; + } + + public Arrow( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Arrows/Bolt.cs b/Scripts/Items/Resources/Arrows/Bolt.cs new file mode 100644 index 0000000..d5dd1c2 --- /dev/null +++ b/Scripts/Items/Resources/Arrows/Bolt.cs @@ -0,0 +1,44 @@ +using System; + +namespace Server.Items +{ + public class Bolt : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Bolt() : this( 1 ) + { + } + + [Constructable] + public Bolt( int amount ) : base( 0x1BFB ) + { + Stackable = true; + Amount = amount; + } + + public Bolt( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Arrows/Feather.cs b/Scripts/Items/Resources/Arrows/Feather.cs new file mode 100644 index 0000000..f4fe490 --- /dev/null +++ b/Scripts/Items/Resources/Arrows/Feather.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + public class Feather : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Feather() : this( 1 ) + { + } + + [Constructable] + public Feather( int amount ) : base( 0x1BD1 ) + { + Stackable = true; + Amount = amount; + } + + public Feather( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Arrows/Shaft.cs b/Scripts/Items/Resources/Arrows/Shaft.cs new file mode 100644 index 0000000..b9d0a73 --- /dev/null +++ b/Scripts/Items/Resources/Arrows/Shaft.cs @@ -0,0 +1,45 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + public class Shaft : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Shaft() : this( 1 ) + { + } + + [Constructable] + public Shaft( int amount ) : base( 0x1BD4 ) + { + Stackable = true; + Amount = amount; + } + + public Shaft( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Blacksmithing/Ingot.cs b/Scripts/Items/Resources/Blacksmithing/Ingot.cs new file mode 100644 index 0000000..31b1133 --- /dev/null +++ b/Scripts/Items/Resources/Blacksmithing/Ingot.cs @@ -0,0 +1,134 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + public abstract class BaseIngot : Item + { + private CraftResource m_Resource; + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get{ return m_Resource; } + set{ m_Resource = value; InvalidateProperties(); } + } + + public override double DefaultWeight + { + get { return 0.1; } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Resource ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Resource = (CraftResource)reader.ReadInt(); + break; + } + case 0: + { + OreInfo info = OreInfo.Iron; + m_Resource = CraftResources.GetFromOreInfo( info ); + break; + } + } + } + + public BaseIngot( CraftResource resource ) : this( resource, 1 ) + { + } + + public BaseIngot( CraftResource resource, int amount ) : base( 0x1BF2 ) + { + Stackable = true; + Amount = amount; + Hue = CraftResources.GetHue( resource ); + + m_Resource = resource; + } + + public BaseIngot( Serial serial ) : base( serial ) + { + } + + public override void AddNameProperty( ObjectPropertyList list ) + { + if ( Amount > 1 ) + list.Add( 1050039, "{0}\t#{1}", Amount, 1027154 ); // ~1_NUMBER~ ~2_ITEMNAME~ + else + list.Add( 1027154 ); // ingots + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( !CraftResources.IsStandard( m_Resource ) ) + { + int num = CraftResources.GetLocalizationNumber( m_Resource ); + + if ( num > 0 ) + list.Add( num ); + else + list.Add( CraftResources.GetName( m_Resource ) ); + } + } + + public override int LabelNumber + { + get + { + return 1042692; + } + } + } + + [FlipableAttribute( 0x1BF2, 0x1BEF )] + public class IronIngot : BaseIngot + { + [Constructable] + public IronIngot() : this( 1 ) + { + } + + [Constructable] + public IronIngot( int amount ) : base( CraftResource.Iron, amount ) + { + } + + public IronIngot( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Blacksmithing/Ore.cs b/Scripts/Items/Resources/Blacksmithing/Ore.cs new file mode 100644 index 0000000..6ccd1a6 --- /dev/null +++ b/Scripts/Items/Resources/Blacksmithing/Ore.cs @@ -0,0 +1,377 @@ +using System; +using Server.Items; +using Server.Network; +using Server.Targeting; +using Server.Engines.Craft; +using Server.Mobiles; +using Server.Misc; + +namespace Server.Items +{ + public abstract class BaseOre : Item + { + private CraftResource m_Resource; + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get{ return m_Resource; } + set{ m_Resource = value; InvalidateProperties(); } + } + + public abstract BaseIngot GetIngot(); + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Resource ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Resource = (CraftResource)reader.ReadInt(); + break; + } + case 0: + { + OreInfo info = OreInfo.Iron; + m_Resource = CraftResources.GetFromOreInfo( info ); + break; + } + } + } + + public BaseOre( CraftResource resource ) : this( resource, 1 ) + { + } + + public BaseOre( CraftResource resource, int amount ) : base( Utility.Random( 4 ) ) + { + { + double random = Utility.RandomDouble(); + if ( 0.12 >= random ) + ItemID = 0x19B7; + else if ( 0.18 >= random ) + ItemID = 0x19B8; + else if ( 0.25 >= random ) + ItemID = 0x19BA; + else + ItemID = 0x19B9; + } + + Stackable = true; + Amount = amount; + Hue = CraftResources.GetHue( resource ); + + m_Resource = resource; + } + + public BaseOre( Serial serial ) : base( serial ) + { + } + + public override void AddNameProperty( ObjectPropertyList list ) + { + if ( Amount > 1 ) + list.Add( 1050039, "{0}\t#{1}", Amount, 1026583 ); // ~1_NUMBER~ ~2_ITEMNAME~ + else + list.Add( 1026583 ); // ore + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( !CraftResources.IsStandard( m_Resource ) ) + { + int num = CraftResources.GetLocalizationNumber( m_Resource ); + + if ( num > 0 ) + list.Add( num ); + else + list.Add( CraftResources.GetName( m_Resource ) ); + } + } + + public override int LabelNumber + { + get + { + return 1042853; // iron ore; + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + if ( RootParent is BaseCreature ) + { + from.SendLocalizedMessage( 500447 ); // That is not accessible + return; + } + else if ( from.InRange( this.GetWorldLocation(), 2 ) ) + { + from.SendLocalizedMessage( 501971 ); // Select the forge on which to smelt the ore, or another pile of ore with which to combine it. + from.Target = new InternalTarget( this ); + } + else + { + from.SendLocalizedMessage( 501976 ); // The ore is too far away. + } + } + + private class InternalTarget : Target + { + private BaseOre m_Ore; + + public InternalTarget( BaseOre ore ) : base ( 2, false, TargetFlags.None ) + { + m_Ore = ore; + } + + private bool IsForge( object obj ) + { + if ( obj.GetType().IsDefined( typeof( ForgeAttribute ), false ) ) + return true; + + int itemID = 0; + + if ( obj is Item ) + itemID = ((Item)obj).ItemID; + else if ( obj is StaticTarget ) + itemID = ((StaticTarget)obj).ItemID; + + return ( itemID == 4017 || (itemID >= 6522 && itemID <= 6569) ); + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Ore.Deleted ) + return; + + if ( !from.InRange( m_Ore.GetWorldLocation(), 2 ) ) + { + from.SendLocalizedMessage( 501976 ); // The ore is too far away. + return; + } + + #region Combine Ore + if ( targeted is BaseOre ) + { + BaseOre ore = (BaseOre)targeted; + if ( !ore.Movable ) + return; + else if ( m_Ore == ore ) + { + from.SendLocalizedMessage( 501972 ); // Select another pile or ore with which to combine this. + from.Target = new InternalTarget( ore ); + return; + } + else if ( ore.Resource != m_Ore.Resource ) + { + from.SendLocalizedMessage( 501979 ); // You cannot combine ores of different metals. + return; + } + + int worth = ore.Amount; + if ( ore.ItemID == 0x19B9 ) + worth *= 8; + else if ( ore.ItemID == 0x19B7 ) + worth *= 2; + else + worth *= 4; + int sourceWorth = m_Ore.Amount; + if ( m_Ore.ItemID == 0x19B9 ) + sourceWorth *= 8; + else if ( m_Ore.ItemID == 0x19B7 ) + sourceWorth *= 2; + else + sourceWorth *= 4; + worth += sourceWorth; + + int plusWeight = 0; + int newID = ore.ItemID; + if ( ore.DefaultWeight != m_Ore.DefaultWeight ) + { + if ( ore.ItemID == 0x19B7 || m_Ore.ItemID == 0x19B7 ) + { + newID = 0x19B7; + } + else if ( ore.ItemID == 0x19B9 ) + { + newID = m_Ore.ItemID; + plusWeight = ore.Amount * 2; + } + else + { + plusWeight = m_Ore.Amount * 2; + } + } + + if ( (ore.ItemID == 0x19B9 && worth > 120000) || (( ore.ItemID == 0x19B8 || ore.ItemID == 0x19BA ) && worth > 60000) || (ore.ItemID == 0x19B7 && worth > 30000)) + { + from.SendLocalizedMessage( 1062844 ); // There is too much ore to combine. + return; + } + else if ( ore.RootParent is Mobile && (plusWeight + ((Mobile)ore.RootParent).Backpack.TotalWeight) > ((Mobile)ore.RootParent).Backpack.MaxWeight ) + { + from.SendLocalizedMessage( 501978 ); // The weight is too great to combine in a container. + return; + } + + ore.ItemID = newID; + if ( ore.ItemID == 0x19B9 ) + { + ore.Amount = worth / 8; + m_Ore.Delete(); + } + else if ( ore.ItemID == 0x19B7 ) + { + ore.Amount = worth / 2; + m_Ore.Delete(); + } + else + { + ore.Amount = worth / 4; + m_Ore.Delete(); + } + return; + } + #endregion + + if ( IsForge( targeted ) ) + { + double difficulty = 50.0; + + double minSkill = difficulty - 25.0; + double maxSkill = difficulty + 25.0; + + if ( difficulty > 50.0 && difficulty > Server.Misc.SkillCheck.TradeSkill( from, Trades.Mining, false ) ) + { + from.SendLocalizedMessage( 501986 ); // You have no idea how to smelt this strange ore! + return; + } + + if ( m_Ore.Amount <= 1 && m_Ore.ItemID == 0x19B7 ) + { + from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot. + return; + } + + if ( Server.Misc.SkillCheck.TestTrade( from, Trades.Mining, minSkill, maxSkill ) ) + { + if ( m_Ore.Amount <= 0 ) + { + from.SendLocalizedMessage( 501987 ); // There is not enough metal-bearing ore in this pile to make an ingot. + } + else + { + int amount = m_Ore.Amount; + if ( m_Ore.Amount > 30000 ) + amount = 30000; + + BaseIngot ingot = m_Ore.GetIngot(); + + if ( m_Ore.ItemID == 0x19B7 ) + { + if ( m_Ore.Amount % 2 == 0 ) + { + amount /= 2; + m_Ore.Delete(); + } + else + { + amount /= 2; + m_Ore.Amount = 1; + } + } + + else if ( m_Ore.ItemID == 0x19B9 ) + { + amount *= 2; + m_Ore.Delete(); + } + + else + { + amount /= 1; + m_Ore.Delete(); + } + + ingot.Amount = amount; + from.AddToBackpack( ingot ); + //from.PlaySound( 0x57 ); + + + from.SendLocalizedMessage( 501988 ); // You smelt the ore removing the impurities and put the metal in your backpack. + } + } + else if ( m_Ore.Amount < 2 && m_Ore.ItemID == 0x19B9 ) + { + from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal. + m_Ore.ItemID = 0x19B8; + } + else if ( m_Ore.Amount < 2 && m_Ore.ItemID == 0x19B8 || m_Ore.ItemID == 0x19BA ) + { + from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal. + m_Ore.ItemID = 0x19B7; + } + else + { + from.SendLocalizedMessage( 501990 ); // You burn away the impurities but are left with less useable metal. + m_Ore.Amount /= 2; + } + } + } + } + } + + public class IronOre : BaseOre + { + [Constructable] + public IronOre() : this( 1 ) + { + } + + [Constructable] + public IronOre( int amount ) : base( CraftResource.Iron, amount ) + { + } + + public IronOre( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override BaseIngot GetIngot() + { + return new IronIngot(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Fishing/BigFish.cs b/Scripts/Items/Resources/Fishing/BigFish.cs new file mode 100644 index 0000000..5ee9573 --- /dev/null +++ b/Scripts/Items/Resources/Fishing/BigFish.cs @@ -0,0 +1,79 @@ +using System; +using Server.Network; +using Server.Targeting; + +namespace Server.Items +{ + public class BigFish : Item, ICarvable + { + private Mobile m_Fisher; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Fisher + { + get{ return m_Fisher; } + set{ m_Fisher = value; InvalidateProperties(); } + } + + public void Carve( Mobile from, Item item ) + { + base.ScissorHelper( from, new RawFishSteak(), Math.Max( 16, (int)Weight ) / 4 , false ); + } + + public override int LabelNumber{ get{ return 1041112; } } // a big fish + + [Constructable] + public BigFish() : base( 0x09CC ) + { + Weight = Utility.RandomMinMax( 3, 200 ); //TODO: Find correct formula. max on OSI currently 200, OSI dev says it's not 200 as max, and ~ 1/1,000,000 chance to get highest + Hue = Utility.RandomBool() ? 0x847 : 0x58C; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( Weight >= 20 ) + { + if ( m_Fisher != null ) + list.Add( 1070857, m_Fisher.Name ); // Caught by ~1_fisherman~ + + list.Add( 1070858, ((int)Weight).ToString() ); // ~1_weight~ stones + } + } + + public BigFish( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (Mobile) m_Fisher ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Fisher = reader.ReadMobile(); + break; + } + case 0: + { + Weight = Utility.RandomMinMax( 3, 200 ); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Fishing/Fish.cs b/Scripts/Items/Resources/Fishing/Fish.cs new file mode 100644 index 0000000..541439e --- /dev/null +++ b/Scripts/Items/Resources/Fishing/Fish.cs @@ -0,0 +1,47 @@ +using System; +using Server.Network; +using Server.Targeting; + +namespace Server.Items +{ + public class Fish : Item, ICarvable + { + public void Carve( Mobile from, Item item ) + { + base.ScissorHelper( from, new RawFishSteak(), 4 ); + } + + [Constructable] + public Fish() : this( 1 ) + { + } + + [Constructable] + public Fish( int amount ) : base( Utility.Random( 0x09CC, 4 ) ) + { + Stackable = true; + Weight = 1.0; + Amount = amount; + } + + + + public Fish( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Resources/Fishing/MagicFish.cs b/Scripts/Items/Resources/Fishing/MagicFish.cs new file mode 100644 index 0000000..0a44b3c --- /dev/null +++ b/Scripts/Items/Resources/Fishing/MagicFish.cs @@ -0,0 +1,203 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + public abstract class BaseMagicFish : Item + { + public virtual int Bonus{ get{ return 0; } } + public virtual StatType Type{ get{ return StatType.Str; } } + + public override double DefaultWeight + { + get { return 1.0; } + } + + public BaseMagicFish( int hue ) : base( 0xDD6 ) + { + Hue = hue; + } + + public BaseMagicFish( Serial serial ) : base( serial ) + { + } + + public virtual bool Apply( Mobile from ) + { + bool applied = Spells.SpellHelper.AddStatOffset( from, Type, Bonus, TimeSpan.FromMinutes( 1.0 ) ); + + if ( !applied ) + from.SendLocalizedMessage( 502173 ); // You are already under a similar effect. + + return applied; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( Apply( from ) ) + { + from.FixedEffect( 0x375A, 10, 15 ); + from.PlaySound( 0x1E7 ); + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 501774 ); // You swallow the fish whole! + Delete(); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PrizedFish : BaseMagicFish + { + public override int Bonus{ get{ return 5; } } + public override StatType Type{ get{ return StatType.Int; } } + + public override int LabelNumber{ get{ return 1041073; } } // prized fish + + [Constructable] + public PrizedFish() : base( 51 ) + { + } + + public PrizedFish( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Hue == 151 ) + Hue = 51; + } + } + + public class WondrousFish : BaseMagicFish + { + public override int Bonus{ get{ return 5; } } + public override StatType Type{ get{ return StatType.Dex; } } + + public override int LabelNumber{ get{ return 1041074; } } // wondrous fish + + [Constructable] + public WondrousFish() : base( 86 ) + { + } + + public WondrousFish( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Hue == 286 ) + Hue = 86; + } + } + + public class TrulyRareFish : BaseMagicFish + { + public override int Bonus{ get{ return 5; } } + public override StatType Type{ get{ return StatType.Str; } } + + public override int LabelNumber{ get{ return 1041075; } } // truly rare fish + + [Constructable] + public TrulyRareFish() : base( 76 ) + { + } + + public TrulyRareFish( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Hue == 376 ) + Hue = 76; + } + } + + public class PeculiarFish : BaseMagicFish + { + public override int LabelNumber{ get{ return 1041076; } } // highly peculiar fish + + [Constructable] + public PeculiarFish() : base( 66 ) + { + } + + public PeculiarFish( Serial serial ) : base( serial ) + { + } + + public override bool Apply( Mobile from ) + { + from.Stam += 10; + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Hue == 266 ) + Hue = 66; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/BaseReagent.cs b/Scripts/Items/Resources/Reagents/BaseReagent.cs new file mode 100644 index 0000000..2d2548d --- /dev/null +++ b/Scripts/Items/Resources/Reagents/BaseReagent.cs @@ -0,0 +1,41 @@ +using System; +using Server; + +namespace Server.Items +{ + public abstract class BaseReagent : Item + { + public override double DefaultWeight + { + get { return 0.1; } + } + + public BaseReagent( int itemID ) : this( itemID, 1 ) + { + } + + public BaseReagent( int itemID, int amount ) : base( itemID ) + { + Stackable = true; + Amount = amount; + } + + public BaseReagent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/BlackPearl.cs b/Scripts/Items/Resources/Reagents/BlackPearl.cs new file mode 100644 index 0000000..756f1ca --- /dev/null +++ b/Scripts/Items/Resources/Reagents/BlackPearl.cs @@ -0,0 +1,37 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class BlackPearl : BaseReagent + { + [Constructable] + public BlackPearl() : this( 1 ) + { + } + + [Constructable] + public BlackPearl( int amount ) : base( 0xF7A, amount ) + { + } + + public BlackPearl( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/Bloodmoss.cs b/Scripts/Items/Resources/Reagents/Bloodmoss.cs new file mode 100644 index 0000000..35f65eb --- /dev/null +++ b/Scripts/Items/Resources/Reagents/Bloodmoss.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class Bloodmoss : BaseReagent + { + [Constructable] + public Bloodmoss() : this( 1 ) + { + } + + [Constructable] + public Bloodmoss( int amount ) : base( 0xF7B, amount ) + { + } + + public Bloodmoss( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/Garlic.cs b/Scripts/Items/Resources/Reagents/Garlic.cs new file mode 100644 index 0000000..6954301 --- /dev/null +++ b/Scripts/Items/Resources/Reagents/Garlic.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class Garlic : BaseReagent + { + [Constructable] + public Garlic() : this( 1 ) + { + } + + [Constructable] + public Garlic( int amount ) : base( 0xF84, amount ) + { + } + + public Garlic( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/Ginseng.cs b/Scripts/Items/Resources/Reagents/Ginseng.cs new file mode 100644 index 0000000..f97cbf8 --- /dev/null +++ b/Scripts/Items/Resources/Reagents/Ginseng.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class Ginseng : BaseReagent + { + [Constructable] + public Ginseng() : this( 1 ) + { + } + + [Constructable] + public Ginseng( int amount ) : base( 0xF85, amount ) + { + } + + public Ginseng( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/MandrakeRoot.cs b/Scripts/Items/Resources/Reagents/MandrakeRoot.cs new file mode 100644 index 0000000..5d73abe --- /dev/null +++ b/Scripts/Items/Resources/Reagents/MandrakeRoot.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MandrakeRoot : BaseReagent + { + [Constructable] + public MandrakeRoot() : this( 1 ) + { + } + + [Constructable] + public MandrakeRoot( int amount ) : base( 0xF86, amount ) + { + } + + public MandrakeRoot( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/Nightshade.cs b/Scripts/Items/Resources/Reagents/Nightshade.cs new file mode 100644 index 0000000..8358891 --- /dev/null +++ b/Scripts/Items/Resources/Reagents/Nightshade.cs @@ -0,0 +1,37 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class Nightshade : BaseReagent + { + [Constructable] + public Nightshade() : this( 1 ) + { + } + + [Constructable] + public Nightshade( int amount ) : base( 0xF88, amount ) + { + } + + public Nightshade( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/SpidersSilk.cs b/Scripts/Items/Resources/Reagents/SpidersSilk.cs new file mode 100644 index 0000000..53bb83b --- /dev/null +++ b/Scripts/Items/Resources/Reagents/SpidersSilk.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class SpidersSilk : BaseReagent + { + [Constructable] + public SpidersSilk() : this( 1 ) + { + } + + [Constructable] + public SpidersSilk( int amount ) : base( 0xF8D, amount ) + { + } + + public SpidersSilk( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Reagents/SulfurousAsh.cs b/Scripts/Items/Resources/Reagents/SulfurousAsh.cs new file mode 100644 index 0000000..0547734 --- /dev/null +++ b/Scripts/Items/Resources/Reagents/SulfurousAsh.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class SulfurousAsh : BaseReagent + { + [Constructable] + public SulfurousAsh() : this( 1 ) + { + } + + [Constructable] + public SulfurousAsh( int amount ) : base( 0xF8C, amount ) + { + } + + public SulfurousAsh( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Supplies.cs b/Scripts/Items/Resources/Supplies.cs new file mode 100644 index 0000000..e48c74f --- /dev/null +++ b/Scripts/Items/Resources/Supplies.cs @@ -0,0 +1,604 @@ +using System; +using Server; +using Server.Network; +using System.Text; +using Server.Items; +using Server.Mobiles; + +namespace Server.Items +{ + public class BaseSupply : Item + { + [Constructable] + public BaseSupply() : base( 0x1709 ) + { + Name = "bottles"; + SpecialName = "Bottle"; + Weight = 10; + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( RootParentEntity is PlayerMobile ) + { + Type itemType = ScriptCompiler.FindTypeByName( SpecialName ); + Item supply = (Item)Activator.CreateInstance(itemType); + supply.Amount = 100; + if ( Name == "lockpicks" ){ supply.Amount = 50; } + else if ( Name == "boards" ){ supply.ItemID = 0x1BD7; supply.Weight = 1.0; } + ((Mobile)RootParentEntity).AddToBackpack ( supply ); + this.Delete(); + } + } + + public override void AddNameProperties(ObjectPropertyList list) + { + base.AddNameProperties(list); + if ( this.Name == "lockpicks" ) + list.Add( 1070722, "A Bundle of 50"); + else + list.Add( 1070722, "A Bundle of 100"); + } + + public override void AddNameProperty( ObjectPropertyList list ) + { + list.Add( Name ); + } + + public BaseSupply( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyBottles : BaseSupply + { + [Constructable] + public SupplyBottles() + { + ItemID = 0x1709; + Name = "bottles"; + SpecialName = "Bottle"; + } + + public SupplyBottles( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyLeather : BaseSupply + { + [Constructable] + public SupplyLeather() + { + ItemID = 0x170A; + Name = "leather"; + SpecialName = "Leather"; + } + + public SupplyLeather( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyLogs : BaseSupply + { + [Constructable] + public SupplyLogs() + { + ItemID = 0x172F; + Name = "logs"; + SpecialName = "WoodBoard"; + } + + public SupplyLogs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyBoards : BaseSupply + { + [Constructable] + public SupplyBoards() + { + ItemID = 0x17BB; + Name = "boards"; + SpecialName = "WoodBoard"; + } + + public SupplyBoards( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyIngots : BaseSupply + { + [Constructable] + public SupplyIngots() + { + ItemID = 0x17BC; + Name = "ingots"; + SpecialName = "IronIngot"; + } + + public SupplyIngots( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyCloth : BaseSupply + { + [Constructable] + public SupplyCloth() + { + ItemID = 0x1730; + Name = "cloth"; + SpecialName = "Cloth"; + } + + public SupplyCloth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyMaps : BaseSupply + { + [Constructable] + public SupplyMaps() + { + ItemID = 0x1644; + Name = "blank maps"; + SpecialName = "BlankMap"; + } + + public SupplyMaps( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyScrolls : BaseSupply + { + [Constructable] + public SupplyScrolls() + { + ItemID = 0x1794; + Name = "blank scrolls"; + SpecialName = "BlankScroll"; + } + + public SupplyScrolls( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyBandages : BaseSupply + { + [Constructable] + public SupplyBandages() + { + ItemID = 0x1795; + Name = "bandages"; + SpecialName = "Bandage"; + } + + public SupplyBandages( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyArrows : BaseSupply + { + [Constructable] + public SupplyArrows() + { + ItemID = 0xF41; + Name = "arrows"; + SpecialName = "Arrow"; + } + + public SupplyArrows( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyBolts : BaseSupply + { + [Constructable] + public SupplyBolts() + { + ItemID = 0x1BFD; + Name = "bolts"; + SpecialName = "Bolt"; + } + + public SupplyBolts( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyLockpicks : BaseSupply + { + [Constructable] + public SupplyLockpicks() + { + ItemID = 0x14FD; + Name = "lockpicks"; + SpecialName = "Lockpick"; + } + + public SupplyLockpicks( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyBlackPearl : BaseSupply + { + [Constructable] + public SupplyBlackPearl() + { + ItemID = 0x17B3; + Name = "black pearls"; + SpecialName = "BlackPearl"; + } + + public SupplyBlackPearl( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyBloodmoss : BaseSupply + { + [Constructable] + public SupplyBloodmoss() + { + ItemID = 0x17B4; + Name = "blood moss"; + SpecialName = "Bloodmoss"; + } + + public SupplyBloodmoss( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyGarlic : BaseSupply + { + [Constructable] + public SupplyGarlic() + { + ItemID = 0x17B5; + Name = "garlic"; + SpecialName = "Garlic"; + } + + public SupplyGarlic( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyGinseng : BaseSupply + { + [Constructable] + public SupplyGinseng() + { + ItemID = 0x17B6; + Name = "ginseng"; + SpecialName = "Ginseng"; + } + + public SupplyGinseng( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyMandrakeRoot : BaseSupply + { + [Constructable] + public SupplyMandrakeRoot() + { + ItemID = 0x17B7; + Name = "mandrake roots"; + SpecialName = "MandrakeRoot"; + } + + public SupplyMandrakeRoot( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplyNightshade : BaseSupply + { + [Constructable] + public SupplyNightshade() + { + ItemID = 0x17B8; + Name = "nightshade"; + SpecialName = "Nightshade"; + } + + public SupplyNightshade( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplySpidersSilk : BaseSupply + { + [Constructable] + public SupplySpidersSilk() + { + ItemID = 0x17B9; + Name = "spider silk"; + SpecialName = "SpidersSilk"; + } + + public SupplySpidersSilk( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SupplySulfurousAsh : BaseSupply + { + [Constructable] + public SupplySulfurousAsh() + { + ItemID = 0x17BA; + Name = "sulfurous ashes"; + SpecialName = "SulfurousAsh"; + } + + public SupplySulfurousAsh( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/BoltOfCloth.cs b/Scripts/Items/Resources/Tailor/BoltOfCloth.cs new file mode 100644 index 0000000..8c7a1ca --- /dev/null +++ b/Scripts/Items/Resources/Tailor/BoltOfCloth.cs @@ -0,0 +1,65 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xF95, 0xF96, 0xF97, 0xF98, 0xF99, 0xF9A, 0xF9B, 0xF9C )] + public class BoltOfCloth : Item, IScissorable, IDyable + { + [Constructable] + public BoltOfCloth() : this( 1 ) + { + } + + [Constructable] + public BoltOfCloth( int amount ) : base( 0xF95 ) + { + Stackable = true; + Weight = 5.0; + Amount = amount; + } + + public BoltOfCloth( Serial serial ) : base( serial ) + { + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) return false; + + Hue = sender.DyedHue; + + return true; + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool Scissor( Mobile from, Scissors scissors ) + { + if ( Deleted || !from.CanSee( this ) ) return false; + + base.ScissorHelper( from, new UncutCloth(), 25 ); + + return true; + } + + public override void OnSingleClick( Mobile from ) + { + int number = (Amount == 1) ? 1049122 : 1049121; + + from.Send( new MessageLocalized( Serial, ItemID, MessageType.Label, 0x3B2, 3, number, "", (Amount * 50).ToString() ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/Bone.cs b/Scripts/Items/Resources/Tailor/Bone.cs new file mode 100644 index 0000000..55a4ea9 --- /dev/null +++ b/Scripts/Items/Resources/Tailor/Bone.cs @@ -0,0 +1,41 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + public class Bone : Item + { + [Constructable] + public Bone() : this( 1 ) + { + } + + [Constructable] + public Bone( int amount ) : base( 0xf7e ) + { + Stackable = true; + Amount = amount; + Weight = 1.0; + } + + public Bone( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/Cloth.cs b/Scripts/Items/Resources/Tailor/Cloth.cs new file mode 100644 index 0000000..63acd29 --- /dev/null +++ b/Scripts/Items/Resources/Tailor/Cloth.cs @@ -0,0 +1,72 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0x1766, 0x1768 )] + public class Cloth : Item, IScissorable, IDyable + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Cloth() : this( 1 ) + { + } + + [Constructable] + public Cloth( int amount ) : base( 0x1766 ) + { + Name = "cloth"; + Stackable = true; + Amount = amount; + } + + public Cloth( Serial serial ) : base( serial ) + { + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnSingleClick( Mobile from ) + { + int number = (Amount == 1) ? 1049124 : 1049123; + + from.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", Amount.ToString() ) ); + } + + public bool Scissor( Mobile from, Scissors scissors ) + { + if ( Deleted || !from.CanSee( this ) ) return false; + + base.ScissorHelper( from, new Bandage(), 1 ); + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/Cotton.cs b/Scripts/Items/Resources/Tailor/Cotton.cs new file mode 100644 index 0000000..eef5583 --- /dev/null +++ b/Scripts/Items/Resources/Tailor/Cotton.cs @@ -0,0 +1,122 @@ +using System; +using Server.Items; +using Server.Targeting; + +namespace Server.Items +{ + public class Cotton : Item, IDyable + { + [Constructable] + public Cotton() : this( 1 ) + { + } + + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Cotton( int amount ) : base( 0xDF9 ) + { + Stackable = true; + Amount = amount; + } + + public Cotton( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 502655 ); // What spinning wheel do you wish to spin this on? + from.Target = new PickWheelTarget( this ); + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + public static void OnSpun( ISpinningWheel wheel, Mobile from, Item yarn ) + { + if ( yarn != null ) + { + Item item = new SpoolOfThread( (yarn.Amount * 6 ) ); + item.Hue = yarn.Hue; + yarn.Delete(); + + from.AddToBackpack( item ); + from.SendLocalizedMessage( 1010577 ); // You put the spools of thread in your backpack. + } + } + + private class PickWheelTarget : Target + { + private Cotton m_Cotton; + + public PickWheelTarget( Cotton cotton ) : base( 3, false, TargetFlags.None ) + { + m_Cotton = cotton; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Cotton.Deleted ) + return; + + ISpinningWheel wheel = targeted as ISpinningWheel; + + if ( wheel == null && targeted is AddonComponent ) + wheel = ((AddonComponent)targeted).Addon as ISpinningWheel; + + if ( wheel is Item ) + { + Item item = (Item)wheel; + + if ( !m_Cotton.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( wheel.Spinning ) + { + from.SendLocalizedMessage( 502656 ); // That spinning wheel is being used. + } + else + { + wheel.BeginSpin( new SpinCallback( Cotton.OnSpun ), from, m_Cotton ); + } + } + else + { + from.SendLocalizedMessage( 502658 ); // Use that on a spinning wheel. + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/Flax.cs b/Scripts/Items/Resources/Tailor/Flax.cs new file mode 100644 index 0000000..39eb2ca --- /dev/null +++ b/Scripts/Items/Resources/Tailor/Flax.cs @@ -0,0 +1,110 @@ +using System; +using Server.Items; +using Server.Targeting; + +namespace Server.Items +{ + public class Flax : Item + { + [Constructable] + public Flax() : this( 1 ) + { + } + + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Flax( int amount ) : base( 0x1A9C ) + { + Stackable = true; + Amount = amount; + } + + public Flax( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 502655 ); // What spinning wheel do you wish to spin this on? + from.Target = new PickWheelTarget( this ); + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + public static void OnSpun( ISpinningWheel wheel, Mobile from, Item yarn ) + { + if ( yarn != null ) + { + Item item = new SpoolOfThread( (yarn.Amount * 6 ) ); + item.Hue = yarn.Hue; + yarn.Delete(); + + from.AddToBackpack( item ); + from.SendLocalizedMessage( 1010577 ); // You put the spools of thread in your backpack. + } + } + + private class PickWheelTarget : Target + { + private Flax m_Flax; + + public PickWheelTarget( Flax flax ) : base( 3, false, TargetFlags.None ) + { + m_Flax = flax; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Flax.Deleted ) + return; + + ISpinningWheel wheel = targeted as ISpinningWheel; + + if ( wheel == null && targeted is AddonComponent ) + wheel = ((AddonComponent)targeted).Addon as ISpinningWheel; + + if ( wheel is Item ) + { + Item item = (Item)wheel; + + if ( !m_Flax.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( wheel.Spinning ) + { + from.SendLocalizedMessage( 502656 ); // That spinning wheel is being used. + } + else + { + wheel.BeginSpin( new SpinCallback( Flax.OnSpun ), from, m_Flax ); + } + } + else + { + from.SendLocalizedMessage( 502658 ); // Use that on a spinning wheel. + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/Hides.cs b/Scripts/Items/Resources/Tailor/Hides.cs new file mode 100644 index 0000000..7352df4 --- /dev/null +++ b/Scripts/Items/Resources/Tailor/Hides.cs @@ -0,0 +1,120 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + public abstract class BaseHides : Item + { + private CraftResource m_Resource; + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get{ return m_Resource; } + set{ m_Resource = value; InvalidateProperties(); } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Resource ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Resource = (CraftResource)reader.ReadInt(); + break; + } + case 0: + { + OreInfo info = new OreInfo( reader.ReadInt(), reader.ReadInt(), reader.ReadString() ); + + m_Resource = CraftResources.GetFromOreInfo( info ); + break; + } + } + } + + public BaseHides( CraftResource resource ) : this( resource, 1 ) + { + } + + public BaseHides( CraftResource resource, int amount ) : base( 0x1079 ) + { + Stackable = true; + Weight = 5.0; + Amount = amount; + m_Resource = resource; + } + + public BaseHides( Serial serial ) : base( serial ) + { + } + + public override int LabelNumber + { + get + { + return 1047023; + } + } + } + + [FlipableAttribute( 0x1079, 0x1078 )] + public class Hides : BaseHides, IScissorable + { + [Constructable] + public Hides() : this( 1 ) + { + } + + [Constructable] + public Hides( int amount ) : base( CraftResource.Leathered, amount ) + { + } + + public Hides( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool Scissor( Mobile from, Scissors scissors ) + { + if ( Deleted || !from.CanSee( this ) ) return false; + + if ( !IsChildOf ( from.Backpack ) ) + { + from.SendLocalizedMessage ( 502437 ); // Items you wish to cut must be in your backpack + return false; + } + base.ScissorHelper( from, new Leather(), 1 ); + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/Leathers.cs b/Scripts/Items/Resources/Tailor/Leathers.cs new file mode 100644 index 0000000..a5d7c9f --- /dev/null +++ b/Scripts/Items/Resources/Tailor/Leathers.cs @@ -0,0 +1,106 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + public abstract class BaseLeather : Item + { + private CraftResource m_Resource; + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get{ return m_Resource; } + set{ m_Resource = value; InvalidateProperties(); } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Resource ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Resource = (CraftResource)reader.ReadInt(); + break; + } + case 0: + { + OreInfo info = new OreInfo( reader.ReadInt(), reader.ReadInt(), reader.ReadString() ); + + m_Resource = CraftResources.GetFromOreInfo( info ); + break; + } + } + } + + public BaseLeather( CraftResource resource ) : this( resource, 1 ) + { + } + + public BaseLeather( CraftResource resource, int amount ) : base( 0x1081 ) + { + Stackable = true; + Weight = 1.0; + Amount = amount; + m_Resource = resource; + } + + public BaseLeather( Serial serial ) : base( serial ) + { + } + + public override int LabelNumber + { + get + { + return 1047022; + } + } + } + + [FlipableAttribute( 0x1081, 0x1082 )] + public class Leather : BaseLeather + { + [Constructable] + public Leather() : this( 1 ) + { + } + + [Constructable] + public Leather( int amount ) : base( CraftResource.Leathered, amount ) + { + } + + public Leather( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/UncutCloth.cs b/Scripts/Items/Resources/Tailor/UncutCloth.cs new file mode 100644 index 0000000..1e157e4 --- /dev/null +++ b/Scripts/Items/Resources/Tailor/UncutCloth.cs @@ -0,0 +1,72 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + public class UncutCloth : Item, IScissorable, IDyable + { + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public UncutCloth() : this( 1 ) + { + } + + [Constructable] + public UncutCloth( int amount ) : base( 0x1767 ) + { + Name = "uncut cloth"; + Stackable = true; + Amount = amount; + ItemID = Utility.RandomList( 0x175D, 0x175E, 0x175F, 0x1760, 0x1761, 0x1762, 0x1763, 0x1764, 0x1765, 0x1767 ); + } + + public UncutCloth( Serial serial ) : base( serial ) + { + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnSingleClick( Mobile from ) + { + int number = (Amount == 1) ? 1049124 : 1049123; + + from.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", Amount.ToString() ) ); + } + + public bool Scissor( Mobile from, Scissors scissors ) + { + if ( Deleted || !from.CanSee( this ) ) return false; + + base.ScissorHelper( from, new Cloth(), 2 ); + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/Wool.cs b/Scripts/Items/Resources/Tailor/Wool.cs new file mode 100644 index 0000000..5e52c41 --- /dev/null +++ b/Scripts/Items/Resources/Tailor/Wool.cs @@ -0,0 +1,165 @@ +using System; +using Server.Items; +using Server.Targeting; + +namespace Server.Items +{ + public class Wool : Item, IDyable + { + [Constructable] + public Wool() : this( 1 ) + { + } + + [Constructable] + public Wool( int amount ) : base( 0xDF8 ) + { + Stackable = true; + Weight = 4.0; + Amount = amount; + } + + public Wool( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 502655 ); // What spinning wheel do you wish to spin this on? + from.Target = new PickWheelTarget( this ); + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + public static void OnSpun( ISpinningWheel wheel, Mobile from, Item yarn ) + { + if ( yarn != null ) + { + Item item = new DarkYarn( (yarn.Amount * 3 ) ); + item.Hue = yarn.Hue; + yarn.Delete(); + + from.AddToBackpack( item ); + from.SendLocalizedMessage( 1010576 ); // You put the balls of yarn in your backpack. + } + } + + private class PickWheelTarget : Target + { + private Wool m_Wool; + + public PickWheelTarget( Wool wool ) : base( 3, false, TargetFlags.None ) + { + m_Wool = wool; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Wool.Deleted ) + return; + + ISpinningWheel wheel = targeted as ISpinningWheel; + + if ( wheel == null && targeted is AddonComponent ) + wheel = ((AddonComponent)targeted).Addon as ISpinningWheel; + + if ( wheel is Item ) + { + Item item = (Item)wheel; + + if ( !m_Wool.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( wheel.Spinning ) + { + from.SendLocalizedMessage( 502656 ); // That spinning wheel is being used. + } + else + { + if ( m_Wool is TaintedWool ) wheel.BeginSpin( new SpinCallback( TaintedWool.OnSpun ), from, m_Wool ); + else wheel.BeginSpin( new SpinCallback( Wool.OnSpun ), from, m_Wool ); + } + } + else + { + from.SendLocalizedMessage( 502658 ); // Use that on a spinning wheel. + } + } + } + } + public class TaintedWool : Wool + { + [Constructable] + public TaintedWool() : this( 1 ) + { + } + + [Constructable] + public TaintedWool( int amount ) : base( 0x101F ) + { + Stackable = true; + Weight = 4.0; + Amount = amount; + } + + public TaintedWool( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + new public static void OnSpun( ISpinningWheel wheel, Mobile from, Item yarn ) + { + if ( yarn != null ) + { + Item item = new DarkYarn( yarn.Amount ); + item.Hue = yarn.Hue; + yarn.Delete(); + + from.AddToBackpack( item ); + from.SendLocalizedMessage( 1010574 ); // You put a ball of yarn in your backpack. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tailor/YarnsAndThreads.cs b/Scripts/Items/Resources/Tailor/YarnsAndThreads.cs new file mode 100644 index 0000000..8a56b20 --- /dev/null +++ b/Scripts/Items/Resources/Tailor/YarnsAndThreads.cs @@ -0,0 +1,291 @@ +using System; +using Server.Items; +using Server.Targeting; + +namespace Server.Items +{ + public abstract class BaseClothMaterial : Item, IDyable + { + public BaseClothMaterial( int itemID ) : this( itemID, 1 ) + { + } + + public override double DefaultWeight + { + get { return 0.1; } + } + + public BaseClothMaterial( int itemID, int amount ) : base( itemID ) + { + Stackable = true; + Amount = amount; + } + + public BaseClothMaterial( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 500366 ); // Select a loom to use that on. + from.Target = new PickLoomTarget( this ); + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + private class PickLoomTarget : Target + { + private BaseClothMaterial m_Material; + + public PickLoomTarget( BaseClothMaterial material ) : base( 3, false, TargetFlags.None ) + { + m_Material = material; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Material.Deleted ) + return; + + ILoom loom = targeted as ILoom; + + if ( loom == null && targeted is AddonComponent ) + loom = ((AddonComponent)targeted).Addon as ILoom; + + if ( loom != null ) + { + if ( !m_Material.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else + { + int cycle = m_Material.Amount; + int looms = loom.Phase; + int amount = 0; + + bool sendMessage = false; + + while ( cycle > 0 ) + { + cycle--; + + if ( looms >= 4 ) + { + looms = 0; + amount++; + sendMessage = true; + } + else + { + looms++; + } + } + + m_Material.Delete(); + loom.Phase = looms; + + if ( sendMessage ) + { + Item create = new BoltOfCloth(amount); + create.Hue = m_Material.Hue; + from.AddToBackpack( create ); + + from.SendLocalizedMessage( 500368 ); // You create some cloth and put it in your backpack. + if ( loom.Phase > 0 ){ from.SendMessage( "The loom still has some incomplete cloth started." ); } + } + else + { + from.SendMessage( "You don't have enough to create a bolt of cloth." ); + } + } + } + else + { + from.SendLocalizedMessage( 500367 ); // Try using that on a loom. + } + } + } + } + + public class BaseString: BaseClothMaterial + { + public BaseString( int itemID, int amount ) : base( itemID ) + { + Stackable = true; + Amount = amount; + } + + public BaseString( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class DarkYarn : BaseString + { + [Constructable] + public DarkYarn() : this( 1 ) + { + } + + [Constructable] + public DarkYarn( int amount ) : base( 0xE1D, amount ) + { + } + + public DarkYarn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LightYarn : BaseString + { + [Constructable] + public LightYarn() : this( 1 ) + { + } + + [Constructable] + public LightYarn( int amount ) : base( 0xE1E, amount ) + { + } + + public LightYarn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LightYarnUnraveled : BaseString + { + [Constructable] + public LightYarnUnraveled() : this( 1 ) + { + } + + [Constructable] + public LightYarnUnraveled( int amount ) : base( 0xE1F, amount ) + { + } + + public LightYarnUnraveled( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SpoolOfThread : BaseClothMaterial + { + [Constructable] + public SpoolOfThread() : this( 1 ) + { + } + + [Constructable] + public SpoolOfThread( int amount ) : base( 0xFA0, amount ) + { + Name = "spool of thread"; + } + + public SpoolOfThread( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + ItemID = 0x543A; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Resources/Tinkering/CrystalPowder.cs b/Scripts/Items/Resources/Tinkering/CrystalPowder.cs new file mode 100644 index 0000000..84b169b --- /dev/null +++ b/Scripts/Items/Resources/Tinkering/CrystalPowder.cs @@ -0,0 +1,40 @@ +using System; +using Server.Items; + +namespace Server.Items +{ + public class CrystalPowder : Item + { + [Constructable] + public CrystalPowder() : this( 1 ) + { + } + + [Constructable] + public CrystalPowder( int amount ) : base( 0x0F05 ) + { + Stackable = true; + Amount = amount; + Weight = 0.1; + Name = "crystal powder"; + } + + public CrystalPowder( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Shields/BaseShield.cs b/Scripts/Items/Shields/BaseShield.cs new file mode 100644 index 0000000..73ffc93 --- /dev/null +++ b/Scripts/Items/Shields/BaseShield.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections; +using Server; +using Server.Network; + +namespace Server.Items +{ + public class BaseShield : BaseArmor + { + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Plate; } } + + public BaseShield( int itemID ) : base( itemID ) + { + } + + public BaseShield( Serial serial ) : base(serial) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override double ArmorRating + { + get + { + Mobile m = this.Parent as Mobile; + double ar = base.ArmorRating; + + if ( m != null ) + return ( ( m.Skills[SkillName.Parry].Value * ar ) / 200.0 ) + 1.0; + else + return ar; + } + } + + public override int OnHit( BaseWeapon weapon, int damage ) + { + Mobile owner = this.Parent as Mobile; + if( owner == null ) + return damage; + + double ar = this.ArmorRating; + double chance = (owner.Skills[SkillName.Parry].Value - (ar * 2.0)) / 100.0; + + if( chance < 0.01 ) + chance = 0.01; + /* + FORMULA: Displayed AR = ((Parrying Skill * Base AR of Shield) ÷ 200) + 1 + + FORMULA: % Chance of Blocking = parry skill - (shieldAR * 2) + + FORMULA: Melee Damage Absorbed = (AR of Shield) / 2 | Archery Damage Absorbed = AR of Shield + */ + if( owner.CheckSkill( SkillName.Parry, chance ) ) + { + if( weapon.Skill == SkillName.Archery ) + damage -= (int)ar; + else + damage -= (int)(ar / 2.0); + + if( damage < 0 ) + damage = 0; + + owner.FixedEffect( 0x37B9, 10, 16 ); + + if( 25 > Utility.Random( 100 ) ) // 25% chance to lower durability + { + int wear = Utility.Random( 2 ); + + if( wear > 0 && MaxHitPoints > 0 ) + { + if( HitPoints >= wear ) + { + HitPoints -= wear; + wear = 0; + } + else + { + wear -= HitPoints; + HitPoints = 0; + } + + if( wear > 0 ) + { + if( MaxHitPoints > wear ) + { + MaxHitPoints -= wear; + + if( Parent is Mobile ) + ((Mobile)Parent).LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061121 ); // Your equipment is severely damaged. + } + else + { + Delete(); + } + } + } + } + } + + return damage; + } + } +} diff --git a/Scripts/Items/Shields/BronzeShield.cs b/Scripts/Items/Shields/BronzeShield.cs new file mode 100644 index 0000000..6419c55 --- /dev/null +++ b/Scripts/Items/Shields/BronzeShield.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class BronzeShield : BaseShield + { + public override int InitMinHits{ get{ return 25; } } + public override int InitMaxHits{ get{ return 30; } } + + public override int ArmorBase{ get{ return 10; } } + + [Constructable] + public BronzeShield() : base( 0x1B72 ) + { + Weight = 6.0; + } + + public BronzeShield( Serial serial ) : base(serial) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} diff --git a/Scripts/Items/Shields/Buckler.cs b/Scripts/Items/Shields/Buckler.cs new file mode 100644 index 0000000..cbdc5d6 --- /dev/null +++ b/Scripts/Items/Shields/Buckler.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Buckler : BaseShield + { + public override int InitMinHits{ get{ return 40; } } + public override int InitMaxHits{ get{ return 50; } } + + public override int ArmorBase{ get{ return 7; } } + + [Constructable] + public Buckler() : base( 0x1B73 ) + { + Weight = 5.0; + } + + public Buckler( Serial serial ) : base(serial) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} diff --git a/Scripts/Items/Shields/ChaosShield.cs b/Scripts/Items/Shields/ChaosShield.cs new file mode 100644 index 0000000..c45bd8b --- /dev/null +++ b/Scripts/Items/Shields/ChaosShield.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class ChaosShield : BaseShield + { + public override int InitMinHits{ get{ return 100; } } + public override int InitMaxHits{ get{ return 125; } } + + public override int ArmorBase{ get{ return 32; } } + + [Constructable] + public ChaosShield() : base( 0x1BC3 ) + { + Weight = 5.0; + } + + public ChaosShield( Serial serial ) : base(serial) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Shields/HeaterShield.cs b/Scripts/Items/Shields/HeaterShield.cs new file mode 100644 index 0000000..d21c2c1 --- /dev/null +++ b/Scripts/Items/Shields/HeaterShield.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class HeaterShield : BaseShield + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int ArmorBase{ get{ return 23; } } + + [Constructable] + public HeaterShield() : base( 0x1B76 ) + { + Weight = 8.0; + } + + public HeaterShield( Serial serial ) : base(serial) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} diff --git a/Scripts/Items/Shields/MetalKiteShield.cs b/Scripts/Items/Shields/MetalKiteShield.cs new file mode 100644 index 0000000..7153189 --- /dev/null +++ b/Scripts/Items/Shields/MetalKiteShield.cs @@ -0,0 +1,50 @@ +using System; +using Server; + +namespace Server.Items +{ + public class MetalKiteShield : BaseShield, IDyable + { + public override int InitMinHits{ get{ return 45; } } + public override int InitMaxHits{ get{ return 60; } } + + public override int ArmorBase{ get{ return 16; } } + + [Constructable] + public MetalKiteShield() : base( 0x1B74 ) + { + Weight = 7.0; + } + + public MetalKiteShield( Serial serial ) : base(serial) + { + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 5.0 ) + Weight = 7.0; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} diff --git a/Scripts/Items/Shields/MetalShield.cs b/Scripts/Items/Shields/MetalShield.cs new file mode 100644 index 0000000..5be85d5 --- /dev/null +++ b/Scripts/Items/Shields/MetalShield.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class MetalShield : BaseShield + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int ArmorBase{ get{ return 11; } } + + [Constructable] + public MetalShield() : base( 0x1B7B ) + { + Weight = 6.0; + } + + public MetalShield( Serial serial ) : base(serial) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} diff --git a/Scripts/Items/Shields/OrderShield.cs b/Scripts/Items/Shields/OrderShield.cs new file mode 100644 index 0000000..62bc036 --- /dev/null +++ b/Scripts/Items/Shields/OrderShield.cs @@ -0,0 +1,37 @@ +using System; +using Server; + +namespace Server.Items +{ + public class OrderShield : BaseShield + { + public override int InitMinHits{ get{ return 100; } } + public override int InitMaxHits{ get{ return 125; } } + + public override int ArmorBase{ get{ return 30; } } + + [Constructable] + public OrderShield() : base( 0x1BC4 ) + { + Weight = 7.0; + } + + public OrderShield( Serial serial ) : base(serial) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Shields/WoodenKiteShield.cs b/Scripts/Items/Shields/WoodenKiteShield.cs new file mode 100644 index 0000000..9b133e6 --- /dev/null +++ b/Scripts/Items/Shields/WoodenKiteShield.cs @@ -0,0 +1,43 @@ +using System; +using Server; + +namespace Server.Items +{ + public class WoodenKiteShield : BaseShield + { + public override int InitMinHits{ get{ return 50; } } + public override int InitMaxHits{ get{ return 65; } } + + public override int ArmorBase{ get{ return 12; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Wood; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Wooden; } } + + [Constructable] + public WoodenKiteShield() : base( 0x1B79 ) + { + Weight = 5.0; + } + + public WoodenKiteShield( Serial serial ) : base(serial) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 7.0 ) + Weight = 5.0; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} diff --git a/Scripts/Items/Shields/WoodenShield.cs b/Scripts/Items/Shields/WoodenShield.cs new file mode 100644 index 0000000..0946fb3 --- /dev/null +++ b/Scripts/Items/Shields/WoodenShield.cs @@ -0,0 +1,40 @@ +using System; +using Server; + +namespace Server.Items +{ + public class WoodenShield : BaseShield + { + public override int InitMinHits{ get{ return 20; } } + public override int InitMaxHits{ get{ return 25; } } + + public override int ArmorBase{ get{ return 8; } } + + public override ArmorMaterialType MaterialType{ get{ return ArmorMaterialType.Wood; } } + public override CraftResource DefaultResource{ get{ return CraftResource.Wooden; } } + + [Constructable] + public WoodenShield() : base( 0x1B7A ) + { + Weight = 5.0; + } + + public WoodenShield( Serial serial ) : base(serial) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 );//version + } + } +} diff --git a/Scripts/Items/Skill Items/Blacksmith Items/AnvilForge.cs b/Scripts/Items/Skill Items/Blacksmith Items/AnvilForge.cs new file mode 100644 index 0000000..6796eaf --- /dev/null +++ b/Scripts/Items/Skill Items/Blacksmith Items/AnvilForge.cs @@ -0,0 +1,61 @@ +using System; + +namespace Server.Items +{ + [FlipableAttribute( 0xFAF, 0xFB0 )] + [Server.Engines.Craft.Anvil] + public class Anvil : Item + { + [Constructable] + public Anvil() : base( 0xFAF ) + { + Movable = false; + } + + public Anvil( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Server.Engines.Craft.Forge] + public class Forge : Item + { + [Constructable] + public Forge() : base( 0xFB1 ) + { + Movable = false; + } + + public Forge( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Blacksmith Items/LargeForge.cs b/Scripts/Items/Skill Items/Blacksmith Items/LargeForge.cs new file mode 100644 index 0000000..f5c8024 --- /dev/null +++ b/Scripts/Items/Skill Items/Blacksmith Items/LargeForge.cs @@ -0,0 +1,357 @@ +using System; +using Server; + +namespace Server.Items +{ + [Server.Engines.Craft.Forge] + public class LargeForgeWest : Item + { + private InternalItem m_Item; + private InternalItem2 m_Item2; + + [Constructable] + public LargeForgeWest() : base( 0x199A ) + { + Movable = false; + + m_Item = new InternalItem( this ); + m_Item2 = new InternalItem2( this ); + } + + public LargeForgeWest( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X, Y + 1, Z ); + if ( m_Item2 != null ) + m_Item2.Location = new Point3D( X, Y + 2, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + if ( m_Item2 != null ) + m_Item2.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + if ( m_Item2 != null ) + m_Item2.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + writer.Write( m_Item2 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + m_Item2 = reader.ReadItem() as InternalItem2; + } + + [Server.Engines.Craft.Forge] + private class InternalItem : Item + { + private LargeForgeWest m_Item; + + public InternalItem( LargeForgeWest item ) : base( 0x1996 ) + { + Movable = false; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X, Y - 1, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as LargeForgeWest; + } + } + + [Server.Engines.Craft.Forge] + private class InternalItem2 : Item + { + private LargeForgeWest m_Item; + + public InternalItem2( LargeForgeWest item ) : base( 0x1992 ) + { + Movable = false; + + m_Item = item; + } + + public InternalItem2( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X, Y - 2, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as LargeForgeWest; + } + } + } + + [Server.Engines.Craft.Forge] + public class LargeForgeEast : Item + { + private InternalItem m_Item; + private InternalItem2 m_Item2; + + [Constructable] + public LargeForgeEast() : base( 0x197A ) + { + Movable = false; + + m_Item = new InternalItem( this ); + m_Item2 = new InternalItem2( this ); + } + + public LargeForgeEast( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X + 1, Y, Z ); + if ( m_Item2 != null ) + m_Item2.Location = new Point3D( X + 2, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + if ( m_Item2 != null ) + m_Item2.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + if ( m_Item2 != null ) + m_Item2.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + writer.Write( m_Item2 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as InternalItem; + m_Item2 = reader.ReadItem() as InternalItem2; + } + + [Server.Engines.Craft.Forge] + private class InternalItem : Item + { + private LargeForgeEast m_Item; + + public InternalItem( LargeForgeEast item ) : base( 0x197E ) + { + Movable = false; + + m_Item = item; + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 1, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as LargeForgeEast; + } + } + + [Server.Engines.Craft.Forge] + private class InternalItem2 : Item + { + private LargeForgeEast m_Item; + + public InternalItem2( LargeForgeEast item ) : base( 0x1982 ) + { + Movable = false; + + m_Item = item; + } + + public InternalItem2( Serial serial ) : base( serial ) + { + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_Item != null ) + m_Item.Location = new Point3D( X - 2, Y, Z ); + } + + public override void OnMapChange() + { + if ( m_Item != null ) + m_Item.Map = Map; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Item != null ) + m_Item.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Item ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Item = reader.ReadItem() as LargeForgeEast; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Camping/BedRolled.cs b/Scripts/Items/Skill Items/Camping/BedRolled.cs new file mode 100644 index 0000000..29241e9 --- /dev/null +++ b/Scripts/Items/Skill Items/Camping/BedRolled.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Regions; +using Server.Mobiles; + +namespace Server.Items +{ + [FlipableAttribute( 0xA58, 0xA59 )] + public class BedRolled : Item + { + [Constructable] + public BedRolled() : base( 0xA58 ) + { + Weight = 5.0; + Utility.RandomMinMax( 0xA58, 0xA59 ); + } + + public BedRolled( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + private bool BedsNearby( Mobile from ) + { + foreach( Item i in GetItemsInRange( 20 ) ) + { + if ( i is Bedroll ) + { + Bedroll bed = (Bedroll)i; + + if ( bed.Owner == from ) + return true; + } + } + + return false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)from; + + if ( BedsNearby( from ) ) + { + from.SendMessage( "You already have a bedroll laid out!" ); + } + else if ( !Server.Items.Kindling.EnemiesNearby( from ) ) + { + from.SendMessage( "It is not safe enough to setup camp!" ); + } + else if ( DateTime.Now >= pm.Bedroll ) + { + if ( !this.VerifyMove( from ) ) + return; + + if ( !from.InRange( this.GetWorldLocation(), 2 ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return; + } + + Point3D bedLocation = GetBedLocation( from ); + + if ( bedLocation == Point3D.Zero ) + { + from.SendMessage( "There is not a spot nearby to place your bedroll." ); + } + else + { + if ( !this.Deleted && this.Parent == null ) + from.PlaceInBackpack( this ); + + new Bedroll( from ).MoveToWorld( bedLocation, from.Map ); + pm.Bedroll = DateTime.Now + TimeSpan.FromMinutes( 10.0 ); + this.Delete(); + } + } + else + { + from.SendMessage( "You can only lay out a bedroll every 10 minutes!" ); + } + } + } + + private Point3D GetBedLocation( Mobile from ) + { + if ( !Kindling.CampAllowed( from ) ) + return Point3D.Zero; + + if ( this.Parent == null ) + return this.Location; + + ArrayList list = new ArrayList( 4 ); + + AddOffsetLocation( from, 0, -1, list ); + AddOffsetLocation( from, -1, 0, list ); + AddOffsetLocation( from, 0, 1, list ); + AddOffsetLocation( from, 1, 0, list ); + + if ( list.Count == 0 ) + return Point3D.Zero; + + int idx = Utility.Random( list.Count ); + return (Point3D) list[idx]; + } + + private void AddOffsetLocation( Mobile from, int offsetX, int offsetY, ArrayList list ) + { + Map map = from.Map; + + int x = from.X + offsetX; + int y = from.Y + offsetY; + + Point3D loc = new Point3D( x, y, from.Z ); + + if ( map.CanFit( loc, 1 ) && from.InLOS( loc ) ) + { + list.Add( loc ); + } + else + { + loc = new Point3D( x, y, map.GetAverageZ( x, y ) ); + + if ( map.CanFit( loc, 1 ) && from.InLOS( loc ) ) + list.Add( loc ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Camping/Bedroll.cs b/Scripts/Items/Skill Items/Camping/Bedroll.cs new file mode 100644 index 0000000..19f4056 --- /dev/null +++ b/Scripts/Items/Skill Items/Camping/Bedroll.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public class Bedroll : Item + { + private Timer m_Timer; + private DateTime m_Created; + private Mobile m_Owner; + + public Bedroll( Mobile owner ) : base( 0x0A55 ) + { + ItemID = Utility.RandomMinMax( 0x0A55, 0x0A56 ); + m_Owner = owner; + Movable = false; + m_Created = DateTime.Now; + m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 ), new TimerCallback( OnTick ) ); + } + + public Bedroll( Serial serial ) : base( serial ) + { + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Mobile Owner + { + get + { + return m_Owner; + } + set{ m_Owner = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime Created + { + get{ return m_Created; } + } + + private bool EnemiesNearby() + { + foreach( Mobile m in GetMobilesInRange( 20 ) ) + { + if ( m is PlayerMobile && m.Combatant != null && m.InRange( m.Combatant.Location, 20 ) && m.Combatant.InLOS( m ) ) + return true; + else if ( m is BaseCreature && !((BaseCreature)m).Controlled && !((BaseCreature)m).Summoned && ((BaseCreature)m).FightMode == FightMode.Closest ) + return true; + } + + return false; + } + + private void OnTick() + { + DateTime now = DateTime.Now; + TimeSpan age = now - this.Created; + + if ( age >= TimeSpan.FromSeconds( 100.0 ) ) + RollUp(); + + if ( this.Deleted ) + return; + + List toRest = new List(); + if ( !EnemiesNearby() ) + { + foreach( Mobile m in GetMobilesInRange( 3 ) ) + { + if ( m is PlayerMobile && m == m_Owner ) + toRest.Add( m ); + } + + for ( int i = 0; i < toRest.Count; i++ ) + Rest( toRest[i] ); + } + } + + public void RollUp() + { + if ( m_Owner != null ) + { + Container cont = m_Owner.Backpack; + if ( cont != null ) + m_Owner.AddToBackpack( new BedRolled() ); + } + + this.Delete(); + } + + public void Rest( Mobile m ) + { + if ( m.Hunger > 4 && m.Thirst > 4 ) + { + if ( m.Stam < m.StamMax ) + m.Stam++; + if ( m.Hits < m.HitsMax ) + { + int hits = (int)(1 * Server.Misc.Settings.HitPoints()); + if ( hits < 1 ) + hits = 1; + + m.Hits = m.Hits + hits; + } + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_Owner == from ) + RollUp(); + } + + public override void OnAfterDelete() + { + if ( m_Timer != null ) + m_Timer.Stop(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + writer.Write( (Mobile) m_Owner ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + m_Owner = reader.ReadMobile(); + RollUp(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Camping/Campfire.cs b/Scripts/Items/Skill Items/Camping/Campfire.cs new file mode 100644 index 0000000..b4a7f09 --- /dev/null +++ b/Scripts/Items/Skill Items/Camping/Campfire.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public enum CampfireStatus + { + Burning, + Extinguishing, + Off + } + + public class Campfire : Item + { + private Timer m_Timer; + private DateTime m_Created; + + public Campfire() : base( 0xDE3 ) + { + Movable = false; + Light = LightType.Circle300; + m_Created = DateTime.Now; + m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 ), new TimerCallback( OnTick ) ); + } + + public Campfire( Serial serial ) : base( serial ) + { + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime Created + { + get{ return m_Created; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public CampfireStatus Status + { + get + { + switch ( this.ItemID ) + { + case 0xDE3: + return CampfireStatus.Burning; + + case 0xDE9: + return CampfireStatus.Extinguishing; + + default: + return CampfireStatus.Off; + } + } + set + { + if ( this.Status == value ) + return; + + switch ( value ) + { + case CampfireStatus.Burning: + this.ItemID = 0xDE3; + this.Light = LightType.Circle300; + break; + + case CampfireStatus.Extinguishing: + this.ItemID = 0xDE9; + this.Light = LightType.Circle150; + break; + + default: + this.ItemID = 0xDEA; + this.Light = LightType.ArchedWindowEast; + break; + } + } + } + + private bool EnemiesNearby() + { + foreach( Mobile m in GetMobilesInRange( 20 ) ) + { + if ( m is PlayerMobile && m.Combatant != null && m.InRange( m.Combatant.Location, 20 ) && m.Combatant.InLOS( m ) ) + return true; + else if ( m is BaseCreature && !((BaseCreature)m).Controlled && !((BaseCreature)m).Summoned && ((BaseCreature)m).FightMode == FightMode.Closest ) + return true; + } + + return false; + } + + private void OnTick() + { + DateTime now = DateTime.Now; + TimeSpan age = now - this.Created; + + if ( age >= TimeSpan.FromSeconds( 100.0 ) ) + this.Delete(); + else if ( age >= TimeSpan.FromSeconds( 90.0 ) ) + this.Status = CampfireStatus.Off; + else if ( age >= TimeSpan.FromSeconds( 60.0 ) ) + this.Status = CampfireStatus.Extinguishing; + + if ( this.Status == CampfireStatus.Off || this.Deleted ) + return; + + List toRest = new List(); + if ( !EnemiesNearby() ) + { + foreach( Mobile m in GetMobilesInRange( 6 ) ) + { + if ( m is PlayerMobile ) + toRest.Add( m ); + } + + for ( int i = 0; i < toRest.Count; i++ ) + Rest( toRest[i] ); + } + } + + public void Rest( Mobile m ) + { + if ( m.Hunger > 4 && m.Thirst > 4 ) + { + if ( m.Stam < m.StamMax ) + m.Stam++; + if ( m.Hits < m.HitsMax ) + { + int hits = (int)(1 * Server.Misc.Settings.HitPoints()); + if ( hits < 1 ) + hits = 1; + + m.Hits = m.Hits + hits; + } + } + } + + public override void OnAfterDelete() + { + if ( m_Timer != null ) + m_Timer.Stop(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + this.Delete(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Camping/Kindling.cs b/Scripts/Items/Skill Items/Camping/Kindling.cs new file mode 100644 index 0000000..8c5d1c7 --- /dev/null +++ b/Scripts/Items/Skill Items/Camping/Kindling.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Regions; +using Server.Mobiles; + +namespace Server.Items +{ + public class Kindling : Item + { + [Constructable] + public Kindling() : this( 1 ) + { + } + + [Constructable] + public Kindling( int amount ) : base( 0xDE1 ) + { + Stackable = true; + Weight = 5.0; + Amount = amount; + } + + public Kindling( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public static bool EnemiesNearby( Mobile from ) + { + foreach( Mobile m in from.GetMobilesInRange( 20 ) ) + { + if ( m is PlayerMobile && m.Combatant != null && m.InRange( m.Combatant.Location, 20 ) && m.Combatant.InLOS( m ) ) + return true; + else if ( m is BaseCreature && !((BaseCreature)m).Controlled && !((BaseCreature)m).Summoned && ((BaseCreature)m).FightMode == FightMode.Closest ) + return true; + } + + return false; + } + + public static bool CampAllowed( Mobile from ) + { + if ( from.Region.IsPartOf( typeof( InnRegion ) ) ) + return false; + + if ( from.Region.IsPartOf( typeof( HouseRegion ) ) ) + return false; + + if ( from.Region.IsPartOf( typeof( GateRegion ) ) ) + return false; + + if ( from.Region.IsPartOf( typeof( GardenRegion ) ) ) + return false; + + if ( from.Region.IsPartOf( typeof( BuildingRegion ) ) ) + return false; + + return true; + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + private bool CampsNearby() + { + foreach( Item i in GetItemsInRange( 20 ) ) + { + if ( i is Campfire ) + { + Campfire fire = (Campfire)i; + + if ( fire.Status != CampfireStatus.Off ) + return true; + } + } + + return false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)from; + + if ( CampsNearby() ) + { + from.SendMessage( "There is already a camp nearby!" ); + } + else if ( !EnemiesNearby( from ) ) + { + from.SendMessage( "It is not safe enough to setup camp!" ); + } + else if ( DateTime.Now >= pm.Camp ) + { + if ( !this.VerifyMove( from ) ) + return; + + if ( !from.InRange( this.GetWorldLocation(), 2 ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return; + } + + Point3D fireLocation = GetFireLocation( from ); + + if ( fireLocation == Point3D.Zero ) + { + from.SendLocalizedMessage( 501695 ); // There is not a spot nearby to place your campfire. + } + else + { + Consume(); + + if ( !this.Deleted && this.Parent == null ) + from.PlaceInBackpack( this ); + + new Campfire().MoveToWorld( fireLocation, from.Map ); + pm.Camp = DateTime.Now + TimeSpan.FromMinutes( 10.0 ); + } + } + else + { + from.SendMessage( "You can only build a camp fire every 10 minutes!" ); + } + } + } + + private Point3D GetFireLocation( Mobile from ) + { + if ( !CampAllowed( from ) ) + return Point3D.Zero; + + if ( this.Parent == null ) + return this.Location; + + ArrayList list = new ArrayList( 4 ); + + AddOffsetLocation( from, 0, -1, list ); + AddOffsetLocation( from, -1, 0, list ); + AddOffsetLocation( from, 0, 1, list ); + AddOffsetLocation( from, 1, 0, list ); + + if ( list.Count == 0 ) + return Point3D.Zero; + + int idx = Utility.Random( list.Count ); + return (Point3D) list[idx]; + } + + private void AddOffsetLocation( Mobile from, int offsetX, int offsetY, ArrayList list ) + { + Map map = from.Map; + + int x = from.X + offsetX; + int y = from.Y + offsetY; + + Point3D loc = new Point3D( x, y, from.Z ); + + if ( map.CanFit( loc, 1 ) && from.InLOS( loc ) ) + { + list.Add( loc ); + } + else + { + loc = new Point3D( x, y, map.GetAverageZ( x, y ) ); + + if ( map.CanFit( loc, 1 ) && from.InLOS( loc ) ) + list.Add( loc ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Carpenter Items/TrophyBoard.cs b/Scripts/Items/Skill Items/Carpenter Items/TrophyBoard.cs new file mode 100644 index 0000000..da1807c --- /dev/null +++ b/Scripts/Items/Skill Items/Carpenter Items/TrophyBoard.cs @@ -0,0 +1,545 @@ +using System; +using Server; +using Server.Multis; +using Server.Mobiles; +using Server.Targeting; +using Server.Misc; + +namespace Server.Items +{ + [FlipableAttribute( 0x20D4, 0x20D5 )] + public class TrophyBoard : Item + { + [Constructable] + public TrophyBoard() : base( 0x1EBA ) + { + Name = "trophy board"; + Weight = 1.0; + } + + public TrophyBoard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public override void OnDoubleClick(Mobile from) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else + { + from.SendLocalizedMessage( 1042595 ); // Target the corpse to make a trophy out of. + from.Target = new CorpseTarget( this ); + } + } + + private class CorpseTarget : Target + { + private TrophyBoard m_Trophy; + + public CorpseTarget( TrophyBoard boards ) : base( 3, false, TargetFlags.None ) + { + m_Trophy = boards; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Trophy.Deleted ) + return; + + if ( targeted is Fish || targeted is BigFish ) + { + Item fish = (Item)targeted; + Item trophy = new TrophyFish(); + from.AddToBackpack( trophy ); + fish.Delete(); + m_Trophy.Delete(); + } + else if ( !(targeted is Corpse) ) + { + from.SendMessage("That cannot be mounted as a trophy!"); + return; + } + else + { + object obj = targeted; + Item i = null; + + if ( obj is Corpse ) + obj = ((Corpse)obj).Owner; + + if ( obj != null ) + { + Corpse c = (Corpse)targeted; + + if ( c.VisitedByTaxidermist == true ) + { + from.SendMessage("This has already been claimed as a trophy!"); + return; + } + else + { + if ( typeof( BlackBear ) == c.Owner.GetType() ){ i = new TrophyBear(); } + else if ( typeof( BrownBear ) == c.Owner.GetType() ){ i = new TrophyBear(); } + else if ( typeof( GrizzlyBear ) == c.Owner.GetType() ){ i = new TrophyCaveBear(); } + else if ( typeof( CaveBear ) == c.Owner.GetType() ){ i = new TrophyCaveBear(); } + else if ( typeof( KodiakBear ) == c.Owner.GetType() ){ i = new TrophyKodiak(); } + else if ( typeof( SnowBear ) == c.Owner.GetType() ){ i = new TrophySnowBear(); } + else if ( typeof( PolarBear ) == c.Owner.GetType() ){ i = new TrophyPolarBear(); } + else if ( typeof( FrostTroll ) == c.Owner.GetType() ){ i = new TrophyTroll(); } + else if ( typeof( Troll ) == c.Owner.GetType() ){ i = new TrophyTroll(); } + else if ( typeof( Orc ) == c.Owner.GetType() ){ i = new TrophyOrc(); } + else if ( typeof( OrcCaptain ) == c.Owner.GetType() ){ i = new TrophyOrc(); } + else if ( typeof( OrcishLord ) == c.Owner.GetType() ){ i = new TrophyOrc(); } + else if ( typeof( OrcishMage ) == c.Owner.GetType() ){ i = new TrophyOrc(); } + else if ( typeof( OgreMagi ) == c.Owner.GetType() ){ i = new TrophyOgre(); } + else if ( typeof( Ogre ) == c.Owner.GetType() ){ i = new TrophyOgre(); } + else if ( typeof( ArcticOgreLord ) == c.Owner.GetType() ){ i = new TrophyOgreLord(); } + else if ( typeof( OgreLord ) == c.Owner.GetType() ){ i = new TrophyOgreLord(); } + else if ( typeof( GreatDeer ) == c.Owner.GetType() ){ i = new TrophyDeer(); } + else if ( typeof( Deer ) == c.Owner.GetType() ){ i = new TrophyDeer(); } + else if ( typeof( Gorilla ) == c.Owner.GetType() ){ i = new TrophyApe(); } + else if ( typeof( Ape ) == c.Owner.GetType() ){ i = new TrophyApe(); } + else if ( typeof( Nightmare ) == c.Owner.GetType() ){ i = new TrophyNightmare(); } + else if ( typeof( Goblin ) == c.Owner.GetType() ){ i = new TrophyGoblin(); } + else if ( typeof( GoblinArcher ) == c.Owner.GetType() ){ i = new TrophyGoblin(); } + else if ( typeof( GoblinWarrior ) == c.Owner.GetType() ){ i = new TrophyGoblin(); } + else if ( typeof( Minotaur ) == c.Owner.GetType() ){ i = new TrophyMinotaur(); } + else if ( typeof( MinotaurLord ) == c.Owner.GetType() ){ i = new TrophyMinotaur(); } + else if ( typeof( MinotaurChief ) == c.Owner.GetType() ){ i = new TrophyMinotaurLord(); } + else if ( typeof( Ettin ) == c.Owner.GetType() ){ i = new TrophyEttin(); } + else if ( typeof( SnowEttin ) == c.Owner.GetType() ){ i = new TrophyEttin(); } + else if ( typeof( Cyclops ) == c.Owner.GetType() ){ i = new TrophyCyclops(); } + else if ( typeof( CyclopsChief ) == c.Owner.GetType() ){ i = new TrophyCyclops(); } + else if ( typeof( CyclopsLord ) == c.Owner.GetType() ){ i = new TrophyCyclops(); } + else if ( typeof( FireGargoyle ) == c.Owner.GetType() ){ i = new TrophyGargoyle(); } + else if ( typeof( Gargoyle ) == c.Owner.GetType() ){ i = new TrophyGargoyle(); } + else if ( typeof( GargoyleMage ) == c.Owner.GetType() ){ i = new TrophyGargoyle(); } + else if ( typeof( StoneGargoyle ) == c.Owner.GetType() ){ i = new TrophyGargoyle(); } + else if ( typeof( GargoyleKnight ) == c.Owner.GetType() ){ i = new TrophyGargoyle(); } + else if ( typeof( Ratman ) == c.Owner.GetType() ){ i = new TrophyRatman(); } + else if ( typeof( RatmanArcher ) == c.Owner.GetType() ){ i = new TrophyRatman(); } + else if ( typeof( RatmanMage ) == c.Owner.GetType() ){ i = new TrophyRatman(); } + else if ( typeof( Lizardman ) == c.Owner.GetType() ){ i = new TrophyLizardman(); } + else if ( typeof( SakkhraShaman ) == c.Owner.GetType() ){ i = new TrophyLizard(); } + else if ( typeof( Sakkhra ) == c.Owner.GetType() ){ i = new TrophyLizard(); } + else if ( typeof( Drasolisk ) == c.Owner.GetType() ){ i = new TrophyLizard(); } + else if ( typeof( Silisk ) == c.Owner.GetType() ){ i = new TrophyLizard(); } + else if ( typeof( GargoyleIce ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Name = "mounted gargoyle"; i.Hue = 0x4A3; } + else if ( typeof( GargoyleStone ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Name = "mounted gargoyle"; i.Hue = 0x49D; } + else if ( typeof( GargoyleWizard ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Name = "mounted gargoyle"; i.Hue = 0x4A5; } + else if ( typeof( GargoyleCrimson ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Name = "mounted gargoyle"; i.Hue = 0x2B; } + else if ( typeof( Balron ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Hue = 0x668; } + else if ( typeof( SeaDevil ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Hue = 0x42F; } + else if ( typeof( Daemon ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Hue = 0x668; } + else if ( typeof( IceFiend ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Hue = 0x43C; } + else if ( typeof( IceDevil ) == c.Owner.GetType() ){ i = new TrophyDaemon(); i.Hue = 0x43C; } + else if ( typeof( AncientWyrm ) == c.Owner.GetType() ){ i = new TrophyDragon(); i.Hue = 0x429; } + else if ( typeof( Dragon ) == c.Owner.GetType() ){ i = new TrophyDragon(); i.Hue = 0x429; } + else if ( typeof( SwampDragon ) == c.Owner.GetType() ){ i = new TrophyDragon(); i.Hue = 0x84F; } + else if ( typeof( ShadowWyrm ) == c.Owner.GetType() ){ i = new TrophyDragon(); i.Hue = 0x4D8; } + else if ( typeof( SeaDragon ) == c.Owner.GetType() ){ i = new TrophyDragon(); i.Hue = 0x847; } + else if ( typeof( WhiteWyrm ) == c.Owner.GetType() ){ i = new TrophyDragon(); i.Hue = 0x982; } + + if ( i != null ) + { + from.AddToBackpack( i ); + c.VisitedByTaxidermist = true; + m_Trophy.Delete(); + } + else + { + from.SendMessage("That cannot be mounted as a trophy!"); + return; + } + } + } + else + { + from.SendMessage("That cannot be mounted as a trophy!"); + return; + } + } + + if ( m_Trophy.Deleted ) + from.SendMessage("You mount that as a trophy."); + } + } + } +} + +namespace Server.Items +{ + [FlipableAttribute( 0x1E62, 0x1E69 )] + public class TrophyFish : Item + { + [Constructable] + public TrophyFish() : base( 0x1E62 ) + { + Name = "mounted fish"; + Weight = 1.0; + } + + public TrophyFish( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x1E60, 0x1E67 )] + public class TrophyBear : Item + { + [Constructable] + public TrophyBear() : base( 0x1E60 ) + { + Name = "mounted bear"; + Weight = 1.0; + } + + public TrophyBear( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x1E61, 0x1E68 )] + public class TrophyDeer : Item + { + [Constructable] + public TrophyDeer() : base( 0x1E61 ) + { + Name = "mounted deer"; + Weight = 1.0; + } + + public TrophyDeer( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x1E63, 0x1E6A )] + public class TrophyApe : Item + { + [Constructable] + public TrophyApe() : base( 0x1E63 ) + { + Name = "mounted ape"; + Weight = 1.0; + } + + public TrophyApe( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x1E64, 0x1E6B )] + public class TrophyOrc : Item + { + [Constructable] + public TrophyOrc() : base( 0x1E64 ) + { + Name = "mounted orc"; + Weight = 1.0; + } + + public TrophyOrc( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x1E65, 0x1E6C )] + public class TrophyPolarBear : Item + { + [Constructable] + public TrophyPolarBear() : base( 0x1E65 ) + { + Name = "mounted bear"; + Weight = 1.0; + } + + public TrophyPolarBear( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x1E66, 0x1E6D )] + public class TrophyTroll : Item + { + [Constructable] + public TrophyTroll() : base( 0x1E66 ) + { + Name = "mounted troll"; + Weight = 1.0; + } + + public TrophyTroll( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20D6, 0x20D7 )] + public class TrophySnowBear : Item + { + [Constructable] + public TrophySnowBear() : base( 0x20D6 ) + { + Name = "mounted bear"; + Weight = 1.0; + } + + public TrophySnowBear( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20D8, 0x20D9 )] + public class TrophyCaveBear : Item + { + [Constructable] + public TrophyCaveBear() : base( 0x20D8 ) + { + Name = "mounted bear"; + Weight = 1.0; + } + + public TrophyCaveBear( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20DA, 0x20DB )] + public class TrophyKodiak : Item + { + [Constructable] + public TrophyKodiak() : base( 0x20DA ) + { + Name = "mounted bear"; + Weight = 1.0; + } + + public TrophyKodiak( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20DC, 0x20DD )] + public class TrophyLizard : Item + { + [Constructable] + public TrophyLizard() : base( 0x20DC ) + { + Name = "mounted lizardman"; + Weight = 1.0; + } + + public TrophyLizard( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20DE, 0x20DF )] + public class TrophyLizardman : Item + { + [Constructable] + public TrophyLizardman() : base( 0x20DE ) + { + Name = "mounted lizardman"; + Weight = 1.0; + } + + public TrophyLizardman( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20E0, 0x20E1 )] + public class TrophyNightmare : Item + { + [Constructable] + public TrophyNightmare() : base( 0x20E0 ) + { + Name = "mounted nightmare"; + Weight = 1.0; + } + + public TrophyNightmare( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20E2, 0x20E3 )] + public class TrophyOgre : Item + { + [Constructable] + public TrophyOgre() : base( 0x20E2 ) + { + Name = "mounted ogre"; + Weight = 1.0; + } + + public TrophyOgre( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20E4, 0x20E5 )] + public class TrophyRatman : Item + { + [Constructable] + public TrophyRatman() : base( 0x20E4 ) + { + Name = "mounted ratman"; + Weight = 1.0; + } + + public TrophyRatman( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20E6, 0x20E7 )] + public class TrophyEttin : Item + { + [Constructable] + public TrophyEttin() : base( 0x20E6 ) + { + Name = "mounted ettin"; + Weight = 1.0; + } + + public TrophyEttin( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20E8, 0x20E9 )] + public class TrophyOgreLord : Item + { + [Constructable] + public TrophyOgreLord() : base( 0x20E8 ) + { + Name = "mounted ogre"; + Weight = 1.0; + } + + public TrophyOgreLord( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20EA, 0x20EB )] + public class TrophyCyclops : Item + { + [Constructable] + public TrophyCyclops() : base( 0x20EA ) + { + Name = "mounted cyclops"; + Weight = 1.0; + } + + public TrophyCyclops( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20EC, 0x20ED )] + public class TrophyGargoyle : Item + { + [Constructable] + public TrophyGargoyle() : base( 0x20EC ) + { + Name = "mounted gargoyle"; + Weight = 1.0; + } + + public TrophyGargoyle( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20EE, 0x20EF )] + public class TrophyMinotaur : Item + { + [Constructable] + public TrophyMinotaur() : base( 0x20EE ) + { + Name = "mounted minotaur"; + Weight = 1.0; + } + + public TrophyMinotaur( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20F0, 0x20F1 )] + public class TrophyGoblin : Item + { + [Constructable] + public TrophyGoblin() : base( 0x20F0 ) + { + Name = "mounted goblin"; + Weight = 1.0; + } + + public TrophyGoblin( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20F2, 0x20F3 )] + public class TrophyMinotaurLord : Item + { + [Constructable] + public TrophyMinotaurLord() : base( 0x20F2 ) + { + Name = "mounted minotaur"; + Weight = 1.0; + } + + public TrophyMinotaurLord( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20F4, 0x20F5 )] + public class TrophyDragon : Item + { + [Constructable] + public TrophyDragon() : base( 0x20F4 ) + { + Name = "mounted dragon"; + Weight = 1.0; + } + + public TrophyDragon( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } + + [FlipableAttribute( 0x20F6, 0x20F7 )] + public class TrophyDaemon : Item + { + [Constructable] + public TrophyDaemon() : base( 0x20F6 ) + { + Name = "mounted daemon"; + Weight = 1.0; + } + + public TrophyDaemon( Serial serial ) : base( serial ){} + public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } + public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Fishing/FishingPole.cs b/Scripts/Items/Skill Items/Fishing/FishingPole.cs new file mode 100644 index 0000000..eab5f8e --- /dev/null +++ b/Scripts/Items/Skill Items/Fishing/FishingPole.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Items; +using Server.Engines.Harvest; +using System.Collections.Generic; +using Server.ContextMenus; + +namespace Server.Items +{ + public class FishingPole : BaseHarvestTool + { + public override HarvestSystem HarvestSystem{ get{ return Fishing.System; } } + + [Constructable] + public FishingPole() : this( 50 ) + { + } + + [Constructable] + public FishingPole( int uses ) : base( uses, 0x0DC0 ) + { + Layer = Layer.OneHanded; + Weight = 8.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.Map != Map.Britannia ) + from.SendMessage( "You cannot fish here!" ); + else + Fishing.System.BeginHarvesting( from, this ); + } + + public FishingPole( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Fishing/MessageInABottle.cs b/Scripts/Items/Skill Items/Fishing/MessageInABottle.cs new file mode 100644 index 0000000..d6806e9 --- /dev/null +++ b/Scripts/Items/Skill Items/Fishing/MessageInABottle.cs @@ -0,0 +1,69 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + public class MessageInABottle : Item + { + public static int GetRandomLevel() + { + return Utility.RandomMinMax( 1, 3 ); + } + + public override int LabelNumber{ get{ return 1041080; } } // a message in a bottle + + private int m_Level; + + [CommandProperty( AccessLevel.GameMaster )] + public int Level + { + get { return m_Level; } + set { m_Level = value; InvalidateProperties(); } + } + + [Constructable] + public MessageInABottle() : this( GetRandomLevel() ) + { + } + + [Constructable] + public MessageInABottle( int level ) : base( 0x127D ) + { + Weight = 1.0; + m_Level = level; + } + + public MessageInABottle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 3 ); // version + writer.Write( (int) m_Level ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + m_Level = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + { + Consume(); + from.AddToBackpack( new SOS( m_Level ) ); + from.LocalOverheadMessage( Network.MessageType.Regular, 0x3B2, 501891 ); // You extract the message from the bottle. + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Fishing/SOS.cs b/Scripts/Items/Skill Items/Fishing/SOS.cs new file mode 100644 index 0000000..c6fda31 --- /dev/null +++ b/Scripts/Items/Skill Items/Fishing/SOS.cs @@ -0,0 +1,178 @@ +using System; +using Server.Network; +using Server.Gumps; +using Server.Regions; + +namespace Server.Items +{ + public class SOS : Item + { + public override int LabelNumber + { + get + { + if ( IsAncient ) + return 1063450; // an ancient SOS + + return 1041081; // a waterstained SOS + } + } + + private Point3D m_TargetLocation; + private int m_MessageIndex; + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsAncient + { + get{ return ( m_Level >= 4 ); } + } + + private int m_Level; + + [CommandProperty( AccessLevel.GameMaster )] + public int Level + { + get { return m_Level; } + set { m_Level = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D TargetLocation + { + get{ return m_TargetLocation; } + set{ m_TargetLocation = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MessageIndex + { + get{ return m_MessageIndex; } + set{ m_MessageIndex = value; } + } + + public void UpdateHue() + { + if ( IsAncient ) + Hue = 0x481; + else + Hue = 0; + } + + [Constructable] + public SOS() : this( MessageInABottle.GetRandomLevel() ) + { + } + + [Constructable] + public SOS( int level ) : base( 0x14ED ) + { + Weight = 1.0; + + m_Level = level; + m_MessageIndex = Utility.Random( MessageEntry.Entries.Length ); + m_TargetLocation = BaseRegion.GetOceanSpot(); + + UpdateHue(); + } + + public SOS( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 4 ); // version + writer.Write( m_Level ); + writer.Write( m_TargetLocation ); + writer.Write( m_MessageIndex ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + m_Level = reader.ReadInt(); + m_TargetLocation = reader.ReadPoint3D(); + m_MessageIndex = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + { + MessageEntry entry; + + if ( m_MessageIndex >= 0 && m_MessageIndex < MessageEntry.Entries.Length ) + entry = MessageEntry.Entries[m_MessageIndex]; + else + entry = MessageEntry.Entries[m_MessageIndex = Utility.Random( MessageEntry.Entries.Length )]; + + from.CloseGump( typeof( MessageGump ) ); + from.SendGump( new MessageGump( entry, m_TargetLocation ) ); + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + private class MessageGump : Gump + { + public MessageGump( MessageEntry entry, Point3D loc ) : base( (640 - entry.Width) / 2, (480 - entry.Height) / 2 ) + { + int xLong = 0, yLat = 0; + int xMins = 0, yMins = 0; + bool xEast = false, ySouth = false; + string fmt; + + if ( Sextant.Format( loc, Map.Britannia, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth ) ) + fmt = String.Format( "{0}°{1}'{2},{3}°{4}'{5}", yLat, yMins, ySouth ? "S" : "N", xLong, xMins, xEast ? "E" : "W" ); + else + fmt = "?????"; + + AddPage( 0 ); + AddBackground( 0, 0, entry.Width, entry.Height, 2520 ); + AddHtml( 38, 38, entry.Width - 83, entry.Height - 86, String.Format( entry.Message, fmt ), false, false ); + } + } + + private class MessageEntry + { + private int m_Width, m_Height; + private string m_Message; + + public int Width{ get{ return m_Width; } } + public int Height{ get{ return m_Height; } } + public string Message{ get{ return m_Message; } } + + public MessageEntry( int width, int height, string message ) + { + m_Width = width; + m_Height = height; + m_Message = message; + } + + private static MessageEntry[] m_Entries = new MessageEntry[] + { + new MessageEntry( 280, 180, "...Ar! {0} and a fair wind! No chance... storms, though--ar! Is that a sea serp...

uh oh." ), + new MessageEntry( 280, 215, "...been inside this whale for three days now. I've run out of food I can pick out of his teeth. I took a sextant reading through the blowhole: {0}. I'll never see my treasure again..." ), + new MessageEntry( 280, 285, "...grand adventure! Captain Quacklebush had me swab down the decks daily...
...pirates came, I was in the rigging practicing with my sextant. {0} if I am not mistaken...
....scuttled the ship, and our precious cargo went with her and the screaming pirates, down to the bottom of the sea..." ), + new MessageEntry( 280, 180, "Help! Ship going dow...n heavy storms...precious cargo...st reach dest...current coordinates {0}...ve any survivors... ease!" ), + new MessageEntry( 280, 215, "...know that the wreck is near {0} but have not found it. Could the message passed down in my family for generations be wrong? No... I swear on the soul of my grandfather, I will find..." ), + new MessageEntry( 280, 195, "...never expected an iceberg...silly woman on bow crushed instantly...send help to {0}...ey'll never forget the tragedy of the sinking of the Miniscule..." ), + new MessageEntry( 280, 265, "...nobody knew I was a girl. They just assumed I was another sailor...then we met the undine. {0}. It was demanded sacrifice...I was youngset, they figured...
...grabbed the captain's treasure, screamed, 'It'll go down with me!'
...they took me up on it." ), + new MessageEntry( 280, 230, "...so I threw the treasure overboard, before the curse could get me too. But I was too late. Now I am doomed to wander these seas, a ghost forever. Join me: seek ye at {0} if thou wishest my company..." ), + new MessageEntry( 280, 285, "...then the ship exploded. A dragon swooped by. The slime swallowed Bertie whole--he screamed, it was amazing. The sky glowed orange. A sextant reading put us at {0}. Norma was chattering about sailing over the edge of the world. I looked at my hands and saw through them..." ), + new MessageEntry( 280, 285, "...trapped on a deserted island, with a magic fountain supplying wood, fresh water springs, gorgeous scenery, and my lovely young wife. I know the ship with all our life's earnings sank at {0} but I don't know what our coordinates are... someone has GOT to rescue me before Sunday's finals game or I'll go mad..." ), + new MessageEntry( 280, 160, "WANTED: divers exp...d in shipwre...overy. Must have own vess...pply at {0}
...good benefits, flexible hours..." ), + new MessageEntry( 280, 250, "...was a cad and a boor, no matter what momma s...rew him overboard! Oh, Anna, 'twas so exciting!
Unfort...y he grabbe...est, and all his riches went with him!
...sked the captain, and he says we're at {0}
...so maybe..." ) + }; + + public static MessageEntry[] Entries + { + get{ return m_Entries; } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Fishing/Sextant.cs b/Scripts/Items/Skill Items/Fishing/Sextant.cs new file mode 100644 index 0000000..16afdde --- /dev/null +++ b/Scripts/Items/Skill Items/Fishing/Sextant.cs @@ -0,0 +1,155 @@ +using System; +using Server.Network; + +namespace Server.Items +{ + public class Sextant : Item + { + [Constructable] + public Sextant() : base( 0x1058 ) + { + Weight = 2.0; + } + + public Sextant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + int xLong = 0, yLat = 0; + int xMins = 0, yMins = 0; + bool xEast = false, ySouth = false; + + if ( Sextant.Format( from.Location, from.Map, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth ) ) + { + string location = String.Format( "{0}° {1}'{2}, {3}° {4}'{5}", yLat, yMins, ySouth ? "S" : "N", xLong, xMins, xEast ? "E" : "W" ); + from.LocalOverheadMessage( MessageType.Regular, from.SpeechHue, false, location ); + } + } + + public static bool ComputeMapDetails( Map map, int x, int y, out int xCenter, out int yCenter, out int xWidth, out int yHeight ) + { + xWidth = 5120; yHeight = 4096; + + if ( map == Map.Britannia ) + { + if ( x >= 0 && y >= 0 && x < 7168 && y < 4096 ) + { + xCenter = 1323; yCenter = 1624; + } + else + { + xCenter = 0; yCenter = 0; + return false; + } + } + else if ( x >= 0 && y >= 0 && x < map.Width && y < map.Height ) + { + xCenter = 1323; yCenter = 1624; + } + else + { + xCenter = 0; yCenter = 0; + return false; + } + + return true; + } + + public static Point3D ReverseLookup( Map map, int xLong, int yLat, int xMins, int yMins, bool xEast, bool ySouth ) + { + if ( map == null || map == Map.Internal ) + return Point3D.Zero; + + int xCenter, yCenter; + int xWidth, yHeight; + + if ( !ComputeMapDetails( map, 0, 0, out xCenter, out yCenter, out xWidth, out yHeight ) ) + return Point3D.Zero; + + double absLong = xLong + ((double)xMins / 60); + double absLat = yLat + ((double)yMins / 60); + + if ( !xEast ) + absLong = 360.0 - absLong; + + if ( !ySouth ) + absLat = 360.0 - absLat; + + int x, y, z; + + x = xCenter + (int)((absLong * xWidth) / 360); + y = yCenter + (int)((absLat * yHeight) / 360); + + if ( x < 0 ) + x += xWidth; + else if ( x >= xWidth ) + x -= xWidth; + + if ( y < 0 ) + y += yHeight; + else if ( y >= yHeight ) + y -= yHeight; + + z = map.GetAverageZ( x, y ); + + return new Point3D( x, y, z ); + } + + public static bool Format( Point3D p, Map map, ref int xLong, ref int yLat, ref int xMins, ref int yMins, ref bool xEast, ref bool ySouth ) + { + if ( map == null || map == Map.Internal ) + return false; + + int x = p.X, y = p.Y; + int xCenter, yCenter; + int xWidth, yHeight; + + if ( !ComputeMapDetails( map, x, y, out xCenter, out yCenter, out xWidth, out yHeight ) ) + return false; + + double absLong = (double)((x - xCenter) * 360) / xWidth; + double absLat = (double)((y - yCenter) * 360) / yHeight; + + if ( absLong > 180.0 ) + absLong = -180.0 + (absLong % 180.0); + + if ( absLat > 180.0 ) + absLat = -180.0 + (absLat % 180.0); + + bool east = ( absLong >= 0 ), south = ( absLat >= 0 ); + + if ( absLong < 0.0 ) + absLong = -absLong; + + if ( absLat < 0.0 ) + absLat = -absLat; + + xLong = (int)absLong; + yLat = (int)absLat; + + xMins = (int)((absLong % 1.0) * 60); + yMins = (int)((absLat % 1.0) * 60); + + xEast = east; + ySouth = south; + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Fishing/ShipwreckedItem.cs b/Scripts/Items/Skill Items/Fishing/ShipwreckedItem.cs new file mode 100644 index 0000000..5d1eb6c --- /dev/null +++ b/Scripts/Items/Skill Items/Fishing/ShipwreckedItem.cs @@ -0,0 +1,81 @@ +using System; + +namespace Server.Items +{ + public interface IShipwreckedItem + { + bool IsShipwreckedItem { get; set; } + } + + public class ShipwreckedItem : Item, IDyable, IShipwreckedItem + { + public ShipwreckedItem( int itemID ) : base( itemID ) + { + int weight = this.ItemData.Weight; + + if ( weight >= 255 ) + weight = 1; + + this.Weight = weight; + } + + public override void OnSingleClick( Mobile from ) + { + this.LabelTo( from, 1050039, String.Format( "#{0}\t#1041645", LabelNumber ) ); + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + list.Add( 1041645 ); // recovered from a shipwreck + } + + public ShipwreckedItem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + if ( ItemID >= 0x13A4 && ItemID <= 0x13AE ) + { + Hue = sender.DyedHue; + return true; + } + + from.SendLocalizedMessage( sender.FailMessage ); + return false; + } + + #region IShipwreckedItem Members + + public bool IsShipwreckedItem + { + get + { + return true; //It's a ShipwreckedItem item. 'Course it's gonna be a Shipwreckeditem + } + set + { + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Fishing/SpecialFishingNet.cs b/Scripts/Items/Skill Items/Fishing/SpecialFishingNet.cs new file mode 100644 index 0000000..69254e7 --- /dev/null +++ b/Scripts/Items/Skill Items/Fishing/SpecialFishingNet.cs @@ -0,0 +1,352 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Targeting; + +namespace Server.Items +{ + public class SpecialFishingNet : Item + { + public override int LabelNumber{ get{ return 1041079; } } // a special fishing net + + private bool m_InUse; + + [Constructable] + public SpecialFishingNet() : base( 0x0DCA ) + { + Weight = 1.0; + + if ( 0.01 > Utility.RandomDouble() ) + Hue = Utility.RandomList( m_Hues ); + else + Hue = 0x8A0; + } + + private static int[] m_Hues = new int[] + { + 0x09B, + 0x0CD, + 0x0D3, + 0x14D, + 0x1DD, + 0x1E9, + 0x1F4, + 0x373, + 0x451, + 0x47F, + 0x489, + 0x492, + 0x4B5, + 0x8AA + }; + + public SpecialFishingNet( Serial serial ) : base( serial ) + { + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + // as if the name wasn't enough.. + list.Add( 1017410 ); // Special Fishing Net + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_InUse ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_InUse = reader.ReadBool(); + + if ( m_InUse ) + Delete(); + + break; + } + } + + Stackable = false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_InUse ) + { + from.SendLocalizedMessage( 1010483 ); // Someone is already using that net! + } + else if ( IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1010484 ); // Where do you wish to use the net? + from.BeginTarget( -1, true, TargetFlags.None, new TargetCallback( OnTarget ) ); + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + public void OnTarget( Mobile from, object obj ) + { + if ( Deleted || m_InUse ) + return; + + IPoint3D p3D = obj as IPoint3D; + + if ( p3D == null ) + return; + + Map map = from.Map; + + if ( map == null || map == Map.Internal ) + return; + + int x = p3D.X, y = p3D.Y; + + if ( map != Map.Britannia || p3D.Z != -5 ) + { + from.SendMessage( "You cannot fish here!" ); + } + else if ( !from.InRange( p3D, 6 ) ) + { + from.SendLocalizedMessage( 500976 ); // You need to be closer to the water to fish! + } + else if ( !Server.Engines.Harvest.Fishing.IsOnBoat( from ) ) + { + from.SendMessage( "You need to be out on your ship's deck to use this!" ); + } + else if ( FullValidation( map, x, y ) ) + { + Point3D p = new Point3D( x, y, map.GetAverageZ( x, y ) ); + + for ( int i = 1; i < Amount; ++i ) // these were stackable before, doh + from.AddToBackpack( new SpecialFishingNet() ); + + m_InUse = true; + Movable = false; + MoveToWorld( p, map ); + + from.Animate( 12, 5, 1, true, false, 0 ); + + Timer.DelayCall( TimeSpan.FromSeconds( 1.5 ), TimeSpan.FromSeconds( 1.0 ), 20, new TimerStateCallback( DoEffect ), new object[]{ p, 0, from } ); + + from.SendLocalizedMessage( 1010487 ); // You plunge the net into the sea... + } + else + { + from.SendLocalizedMessage( 1010485 ); // You can only use this net in deep water! + } + } + + private void DoEffect( object state ) + { + if ( Deleted ) + return; + + object[] states = (object[])state; + + Point3D p = (Point3D)states[0]; + int index = (int)states[1]; + Mobile from = (Mobile)states[2]; + + states[1] = ++index; + + if ( index == 1 ) + { + Effects.SendLocationEffect( p, Map, 0x352D, 16, 4 ); + Effects.PlaySound( p, Map, 0x364 ); + } + else if ( index <= 10 || index == 20 ) + { + for ( int i = 0; i < 3; ++i ) + { + int x, y; + + switch ( Utility.Random( 8 ) ) + { + default: + case 0: x = -1; y = -1; break; + case 1: x = -1; y = 0; break; + case 2: x = -1; y = +1; break; + case 3: x = 0; y = -1; break; + case 4: x = 0; y = +1; break; + case 5: x = +1; y = -1; break; + case 6: x = +1; y = 0; break; + case 7: x = +1; y = +1; break; + } + + Effects.SendLocationEffect( new Point3D( p.X + x, p.Y + y, p.Z ), Map, 0x352D, 16, 4 ); + } + + Effects.PlaySound( p, Map, 0x364 ); + + if ( index == 20 ) + FinishEffect( p, Map, from ); + else + this.Z -= 1; + } + } + + protected virtual int GetSpawnCount() + { + int count = Utility.RandomMinMax( 1, 3 ); + + if ( Hue != 0x8A0 ) + count += Utility.RandomMinMax( 1, 2 ); + + return count; + } + + protected void Spawn( Point3D p, Map map, BaseCreature spawn ) + { + if ( map == null ) + { + spawn.Delete(); + return; + } + + int x = p.X, y = p.Y; + + for ( int j = 0; j < 20; ++j ) + { + int tx = p.X - 2 + Utility.Random( 5 ); + int ty = p.Y - 2 + Utility.Random( 5 ); + + LandTile t = map.Tiles.GetLandTile( tx, ty ); + + if ( t.Z == p.Z && ( (t.ID >= 0xA8 && t.ID <= 0xAB) || (t.ID >= 0x136 && t.ID <= 0x137) ) && !Spells.SpellHelper.CheckMulti( new Point3D( tx, ty, p.Z ), map ) ) + { + x = tx; + y = ty; + break; + } + } + + spawn.MoveToWorld( new Point3D( x, y, p.Z ), map ); + + if ( spawn is Kraken && 0.2 > Utility.RandomDouble() ) + spawn.PackItem( new MessageInABottle() ); + } + + protected virtual void FinishEffect( Point3D p, Map map, Mobile from ) + { + from.RevealingAction(); + + int count = GetSpawnCount(); + + for ( int i = 0; map != null && i < count; ++i ) + { + BaseCreature spawn; + + switch ( Utility.Random( 8 ) ) + { + default: + case 0: spawn = new SeaSerpent(); break; + case 1: spawn = new DeepSeaSerpent(); break; + case 2: spawn = new WaterElemental(); break; + case 3: spawn = new Kraken(); break; + case 4: spawn = new GiantEel(); break; + case 5: spawn = new GiantSquid(); break; + case 6: spawn = new SeaHydra(); break; + case 7: spawn = new GreatWhite(); break; + } + + Spawn( p, map, spawn ); + + spawn.Combatant = from; + } + + Delete(); + } + + public static bool FullValidation( Map map, int x, int y ) + { + bool valid = ValidateDeepWater( map, x, y ); + + for ( int j = 1, offset = 5; valid && j <= 5; ++j, offset += 5 ) + { + if ( !ValidateDeepWater( map, x + offset, y + offset ) ) + valid = false; + else if ( !ValidateDeepWater( map, x + offset, y - offset ) ) + valid = false; + else if ( !ValidateDeepWater( map, x - offset, y + offset ) ) + valid = false; + else if ( !ValidateDeepWater( map, x - offset, y - offset ) ) + valid = false; + } + + return valid; + } + + private static bool ValidateDeepWater( Map map, int x, int y ) + { + Point3D loc = new Point3D( x, y, -5 ); + Region reg = Region.Find( loc, map ); + int tileID = map.Tiles.GetLandTile( x, y ).ID; + bool water = false; + + for( int i = 0; !water && i < Server.Engines.Harvest.Fishing.m_WaterTiles.Length; i += 2 ) + water = (tileID >= Server.Engines.Harvest.Fishing.m_WaterTiles[i] && tileID <= Server.Engines.Harvest.Fishing.m_WaterTiles[i + 1]); + + if ( reg != map.DefaultRegion ) + water = false; + + return water; + } + } + + public class FabledFishingNet : SpecialFishingNet + { + public override int LabelNumber{ get{ return 1063451; } } // a fabled fishing net + + [Constructable] + public FabledFishingNet() + { + Hue = 0x481; + } + + protected override int GetSpawnCount() + { + return base.GetSpawnCount() + 4; + } + + protected override void FinishEffect( Point3D p, Map map, Mobile from ) + { + Spawn( p, map, new Leviathan( from ) ); + + base.FinishEffect( p, map, from ); + } + + public FabledFishingNet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs b/Scripts/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs new file mode 100644 index 0000000..9fc7abb --- /dev/null +++ b/Scripts/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using Server.Mobiles; +using Server.Network; +using Server.Engines.Craft; +using Server.Engines.Harvest; +using Server.ContextMenus; + +namespace Server.Items +{ + public interface IUsesRemaining + { + int UsesRemaining{ get; set; } + bool ShowUsesRemaining{ get; set; } + } + + public abstract class BaseHarvestTool : Item, IUsesRemaining, ICraftable + { + private Mobile m_Crafter; + private ToolQuality m_Quality; + private int m_UsesRemaining; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Crafter + { + get{ return m_Crafter; } + set{ m_Crafter = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public ToolQuality Quality + { + get{ return m_Quality; } + set{ UnscaleUses(); m_Quality = value; InvalidateProperties(); ScaleUses(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int UsesRemaining + { + get { return m_UsesRemaining; } + set { m_UsesRemaining = value; InvalidateProperties(); } + } + + public void ScaleUses() + { + m_UsesRemaining = (m_UsesRemaining * GetUsesScalar()) / 100; + InvalidateProperties(); + } + + public void UnscaleUses() + { + m_UsesRemaining = (m_UsesRemaining * 100) / GetUsesScalar(); + } + + public int GetUsesScalar() + { + if ( m_Quality == ToolQuality.Exceptional ) + return 200; + + return 100; + } + + public bool ShowUsesRemaining{ get{ return true; } set{} } + + public abstract HarvestSystem HarvestSystem{ get; } + + public BaseHarvestTool( int itemID ) : this( 50, itemID ) + { + } + + public BaseHarvestTool( int usesRemaining, int itemID ) : base( itemID ) + { + m_UsesRemaining = usesRemaining; + m_Quality = ToolQuality.Regular; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Quality == ToolQuality.Exceptional ) + list.Add( 1060636 ); // exceptional + + list.Add( 1060584, m_UsesRemaining.ToString() ); // uses remaining: ~1_val~ + } + + public virtual void DisplayDurabilityTo( Mobile m ) + { + LabelToAffix( m, 1017323, AffixType.Append, ": " + m_UsesRemaining.ToString() ); // Durability + } + + public override void OnSingleClick( Mobile from ) + { + DisplayDurabilityTo( from ); + + base.OnSingleClick( from ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) || Parent == from ) + HarvestSystem.BeginHarvesting( from, this ); + else + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + + public BaseHarvestTool( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (Mobile) m_Crafter ); + writer.Write( (int) m_Quality ); + + writer.Write( (int) m_UsesRemaining ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Crafter = reader.ReadMobile(); + m_Quality = (ToolQuality) reader.ReadInt(); + goto case 0; + } + case 0: + { + m_UsesRemaining = reader.ReadInt(); + break; + } + } + } + + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Quality = (ToolQuality)quality; + + if ( makersMark ) + Crafter = from; + + return quality; + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Harvest Tools/Shovel.cs b/Scripts/Items/Skill Items/Harvest Tools/Shovel.cs new file mode 100644 index 0000000..3d4e1e4 --- /dev/null +++ b/Scripts/Items/Skill Items/Harvest Tools/Shovel.cs @@ -0,0 +1,40 @@ +using System; +using Server; +using Server.Engines.Harvest; + +namespace Server.Items +{ + public class Shovel : BaseHarvestTool + { + public override HarvestSystem HarvestSystem{ get{ return Mining.System; } } + + [Constructable] + public Shovel() : this( 50 ) + { + } + + [Constructable] + public Shovel( int uses ) : base( uses, 0xF39 ) + { + Weight = 5.0; + } + + public Shovel( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/BaseInstrument.cs b/Scripts/Items/Skill Items/Instruments/BaseInstrument.cs new file mode 100644 index 0000000..b854e6e --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/BaseInstrument.cs @@ -0,0 +1,574 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Mobiles; +using Server.Targeting; +using Server.Engines.Craft; + +namespace Server.Items +{ + public delegate void InstrumentPickedCallback( Mobile from, BaseInstrument instrument ); + + public enum InstrumentQuality + { + Low, + Regular, + Exceptional + } + + public abstract class BaseInstrument : Item, ICraftable, ISlayer + { + private int m_WellSound, m_BadlySound; + private SlayerName m_Slayer, m_Slayer2; + private InstrumentQuality m_Quality; + private Mobile m_Crafter; + private int m_UsesRemaining; + + [CommandProperty( AccessLevel.GameMaster )] + public int SuccessSound + { + get{ return m_WellSound; } + set{ m_WellSound = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int FailureSound + { + get{ return m_BadlySound; } + set{ m_BadlySound = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SlayerName Slayer + { + get{ return m_Slayer; } + set{ m_Slayer = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SlayerName Slayer2 + { + get{ return m_Slayer2; } + set{ m_Slayer2 = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public InstrumentQuality Quality + { + get{ return m_Quality; } + set{ UnscaleUses(); m_Quality = value; InvalidateProperties(); ScaleUses(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Crafter + { + get{ return m_Crafter; } + set{ m_Crafter = value; InvalidateProperties(); } + } + + public virtual int InitMinUses{ get{ return 350; } } + public virtual int InitMaxUses{ get{ return 450; } } + + public virtual TimeSpan ChargeReplenishRate { get { return TimeSpan.FromMinutes( 5.0 ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public int UsesRemaining + { + get{ CheckReplenishUses(); return m_UsesRemaining; } + set{ m_UsesRemaining = value; InvalidateProperties(); } + } + + private DateTime m_LastReplenished; + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime LastReplenished + { + get { return m_LastReplenished; } + set { m_LastReplenished = value; CheckReplenishUses(); } + } + + private bool m_ReplenishesCharges; + [CommandProperty( AccessLevel.GameMaster )] + public bool ReplenishesCharges + { + get { return m_ReplenishesCharges; } + set + { + if( value != m_ReplenishesCharges && value ) + m_LastReplenished = DateTime.Now; + + m_ReplenishesCharges = value; + } + } + + public void CheckReplenishUses() + { + CheckReplenishUses( true ); + } + + public void CheckReplenishUses( bool invalidate ) + { + if( !m_ReplenishesCharges || m_UsesRemaining >= InitMaxUses ) + return; + + if( m_LastReplenished + ChargeReplenishRate < DateTime.Now ) + { + TimeSpan timeDifference = DateTime.Now - m_LastReplenished; + + m_UsesRemaining = Math.Min( m_UsesRemaining + (int)( timeDifference.Ticks / ChargeReplenishRate.Ticks), InitMaxUses ); //How rude of TimeSpan to not allow timespan division. + m_LastReplenished = DateTime.Now; + + if( invalidate ) + InvalidateProperties(); + + } + } + + public void ScaleUses() + { + UsesRemaining = (UsesRemaining * GetUsesScalar()) / 100; + //InvalidateProperties(); + } + + public void UnscaleUses() + { + UsesRemaining = (UsesRemaining * 100) / GetUsesScalar(); + } + + public int GetUsesScalar() + { + if ( m_Quality == InstrumentQuality.Exceptional ) + return 200; + + return 100; + } + + public void ConsumeUse( Mobile from ) + { + // TODO: Confirm what must happen here? + + if ( UsesRemaining > 1 ) + { + --UsesRemaining; + } + else + { + if ( from != null ) + from.SendLocalizedMessage( 502079 ); // The instrument played its last tune. + + Delete(); + } + } + + private static Hashtable m_Instruments = new Hashtable(); + + public static BaseInstrument GetInstrument( Mobile from ) + { + BaseInstrument item = m_Instruments[from] as BaseInstrument; + + if ( item == null ) + return null; + + if ( !item.IsChildOf( from.Backpack ) ) + { + m_Instruments.Remove( from ); + return null; + } + + return item; + } + + public static int GetBardRange( Mobile bard, SkillName skill ) + { + return 8 + (int)(bard.Skills[skill].Value / 15); + } + + public static void PickInstrument( Mobile from, InstrumentPickedCallback callback ) + { + BaseInstrument instrument = GetInstrument( from ); + + if ( instrument != null ) + { + if ( callback != null ) + callback( from, instrument ); + } + else + { + from.SendLocalizedMessage( 500617 ); // What instrument shall you play? + from.BeginTarget( 1, false, TargetFlags.None, new TargetStateCallback( OnPickedInstrument ), callback ); + } + } + + public static void OnPickedInstrument( Mobile from, object targeted, object state ) + { + BaseInstrument instrument = targeted as BaseInstrument; + + if ( instrument == null ) + { + from.SendLocalizedMessage( 500619 ); // That is not a musical instrument. + } + else + { + SetInstrument( from, instrument ); + + InstrumentPickedCallback callback = state as InstrumentPickedCallback; + + if ( callback != null ) + callback( from, instrument ); + } + } + + public static bool IsMageryCreature( BaseCreature bc ) + { + return ( bc != null && bc.AI == AIType.AI_Mage && bc.Skills[SkillName.Magery].Base > 5.0 ); + } + + public static bool IsFireBreathingCreature( BaseCreature bc ) + { + if ( bc == null ) + return false; + + return bc.HasBreath; + } + + public static bool IsPoisonImmune( BaseCreature bc ) + { + return ( bc != null && bc.PoisonImmune != null ); + } + + public static int GetPoisonLevel( BaseCreature bc ) + { + if ( bc == null ) + return 0; + + Poison p = bc.HitPoison; + + if ( p == null ) + return 0; + + return p.Level + 1; + } + + public static double GetBaseDifficulty( Mobile targ ) + { + /* Difficulty TODO: Add another 100 points for each of the following abilities: + - Radiation or Aura Damage (Heat, Cold etc.) + - Summoning Undead + */ + + double val = (targ.HitsMax * 1.6) + targ.StamMax + targ.ManaMax; + + val += targ.SkillsTotal / 10; + + if ( val > 700 ) + val = 700 + (int)((val - 700) * (3.0 / 11)); + + BaseCreature bc = targ as BaseCreature; + + if ( IsMageryCreature( bc ) ) + val += 100; + + if ( IsFireBreathingCreature( bc ) ) + val += 100; + + if ( IsPoisonImmune( bc ) ) + val += 100; + + if ( targ is Bat ) + val += 100; + + val += GetPoisonLevel( bc ) * 20; + + val /= 10; + + return val; + } + + public double GetDifficultyFor( Mobile targ ) + { + double val = GetBaseDifficulty( targ ); + + if ( m_Quality == InstrumentQuality.Exceptional ) + val -= 5.0; // 10% + + if ( m_Slayer != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer ); + + if ( entry != null ) + { + if ( entry.Slays( targ ) ) + val -= 10.0; // 20% + } + } + + if ( m_Slayer2 != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer2 ); + + if ( entry != null ) + { + if ( entry.Slays( targ ) ) + val -= 10.0; // 20% + } + } + + return val; + } + + public static void SetInstrument( Mobile from, BaseInstrument item ) + { + m_Instruments[from] = item; + } + + public BaseInstrument( int itemID, int wellSound, int badlySound ) : base( itemID ) + { + m_WellSound = wellSound; + m_BadlySound = badlySound; + UsesRemaining = Utility.RandomMinMax( InitMinUses, InitMaxUses ); + } + + public override void GetProperties( ObjectPropertyList list ) + { + int oldUses = m_UsesRemaining; + CheckReplenishUses( false ); + + base.GetProperties( list ); + + if ( m_Crafter != null ) + list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~ + + if ( m_Quality == InstrumentQuality.Exceptional ) + list.Add( 1060636 ); // exceptional + + list.Add( 1060584, m_UsesRemaining.ToString() ); // uses remaining: ~1_val~ + + if( m_ReplenishesCharges ) + list.Add( 1070928 ); // Replenish Charges + + if( m_Slayer != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer ); + if( entry != null ) + list.Add( entry.Title ); + } + + if( m_Slayer2 != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer2 ); + if( entry != null ) + list.Add( entry.Title ); + } + + if( m_UsesRemaining != oldUses ) + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( InvalidateProperties ) ); + } + + public override void OnSingleClick( Mobile from ) + { + ArrayList attrs = new ArrayList(); + + if ( DisplayLootType ) + { + if ( LootType == LootType.Blessed ) + attrs.Add( new EquipInfoAttribute( 1038021 ) ); // blessed + } + + if ( m_Quality == InstrumentQuality.Exceptional ) + attrs.Add( new EquipInfoAttribute( 1018305 - (int)m_Quality ) ); + + if( m_ReplenishesCharges ) + attrs.Add( new EquipInfoAttribute( 1070928 ) ); // Replenish Charges + + if( m_Slayer != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer ); + if( entry != null ) + attrs.Add( new EquipInfoAttribute( entry.Title ) ); + } + + if( m_Slayer2 != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer2 ); + if( entry != null ) + attrs.Add( new EquipInfoAttribute( entry.Title ) ); + } + + int number; + + if ( Name == null ) + { + number = LabelNumber; + } + else + { + this.LabelTo( from, Name ); + number = 1041000; + } + + if ( attrs.Count == 0 && Crafter == null && Name != null ) + return; + + EquipmentInfo eqInfo = new EquipmentInfo( number, m_Crafter, false, (EquipInfoAttribute[])attrs.ToArray( typeof( EquipInfoAttribute ) ) ); + + from.Send( new DisplayEquipmentInfo( this, eqInfo ) ); + } + + public BaseInstrument( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 3 ); // version + + writer.Write( m_ReplenishesCharges ); + if( m_ReplenishesCharges ) + writer.Write( m_LastReplenished ); + + + writer.Write( m_Crafter ); + + writer.WriteEncodedInt( (int) m_Quality ); + writer.WriteEncodedInt( (int) m_Slayer ); + writer.WriteEncodedInt( (int) m_Slayer2 ); + + writer.WriteEncodedInt( (int)UsesRemaining ); + + writer.WriteEncodedInt( (int) m_WellSound ); + writer.WriteEncodedInt( (int) m_BadlySound ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 3: + { + m_ReplenishesCharges = reader.ReadBool(); + + if( m_ReplenishesCharges ) + m_LastReplenished = reader.ReadDateTime(); + + goto case 2; + } + case 2: + { + m_Crafter = reader.ReadMobile(); + + m_Quality = (InstrumentQuality)reader.ReadEncodedInt(); + m_Slayer = (SlayerName)reader.ReadEncodedInt(); + m_Slayer2 = (SlayerName)reader.ReadEncodedInt(); + + UsesRemaining = reader.ReadEncodedInt(); + + m_WellSound = reader.ReadEncodedInt(); + m_BadlySound = reader.ReadEncodedInt(); + + break; + } + case 1: + { + m_Crafter = reader.ReadMobile(); + + m_Quality = (InstrumentQuality)reader.ReadEncodedInt(); + m_Slayer = (SlayerName)reader.ReadEncodedInt(); + + UsesRemaining = reader.ReadEncodedInt(); + + m_WellSound = reader.ReadEncodedInt(); + m_BadlySound = reader.ReadEncodedInt(); + + break; + } + case 0: + { + m_WellSound = reader.ReadInt(); + m_BadlySound = reader.ReadInt(); + UsesRemaining = Utility.RandomMinMax( InitMinUses, InitMaxUses ); + + break; + } + } + + CheckReplenishUses(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.InRange( GetWorldLocation(), 1 ) ) + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + else if ( from.BeginAction( typeof( BaseInstrument ) ) ) + { + SetInstrument( from, this ); + + // Delay of 7 second before beign able to play another instrument again + new InternalTimer( from ).Start(); + + if ( CheckMusicianship( from ) ) + PlayInstrumentWell( from ); + else + PlayInstrumentBadly( from ); + } + else + { + from.SendLocalizedMessage( 500119 ); // You must wait to perform another action + } + } + + public static bool CheckMusicianship( Mobile m ) + { + m.CheckSkill( SkillName.Musicianship, 0.0, 120.0 ); + + return ( (m.Skills[SkillName.Musicianship].Value / 100) > Utility.RandomDouble() ); + } + + public void PlayInstrumentWell( Mobile from ) + { + from.PlaySound( m_WellSound ); + } + + public void PlayInstrumentBadly( Mobile from ) + { + from.PlaySound( m_BadlySound ); + } + + private class InternalTimer : Timer + { + private Mobile m_From; + + public InternalTimer( Mobile from ) : base( TimeSpan.FromSeconds( 6.0 ) ) + { + m_From = from; + Priority = TimerPriority.TwoFiftyMS; + } + + protected override void OnTick() + { + m_From.EndAction( typeof( BaseInstrument ) ); + } + } + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Quality = (InstrumentQuality)quality; + + if ( makersMark ) + Crafter = from; + + return quality; + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/Drums.cs b/Scripts/Items/Skill Items/Instruments/Drums.cs new file mode 100644 index 0000000..f202271 --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/Drums.cs @@ -0,0 +1,35 @@ +using System; + +namespace Server.Items +{ + public class Drums : BaseInstrument + { + [Constructable] + public Drums() : base( 0xE9C, 0x38, 0x39 ) + { + Name = "drum"; + Weight = 4.0; + } + + public Drums( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 4.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/Flute.cs b/Scripts/Items/Skill Items/Instruments/Flute.cs new file mode 100644 index 0000000..2336b51 --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/Flute.cs @@ -0,0 +1,33 @@ +using System; + +namespace Server.Items +{ + public class Flute : BaseInstrument + { + [Constructable] + public Flute() : base( 0x134E, 0x504, 0x503 ) + { + Name = "flute"; + Weight = 2.0; + ItemID = Utility.RandomList( 0x134E, 0x136F ); + } + + public Flute( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/Harp.cs b/Scripts/Items/Skill Items/Instruments/Harp.cs new file mode 100644 index 0000000..9652b04 --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/Harp.cs @@ -0,0 +1,34 @@ +using System; + +namespace Server.Items +{ + public class Harp : BaseInstrument + { + [Constructable] + public Harp() : base( 0xEB1, 0x43, 0x44 ) + { + Weight = 35.0; + } + + public Harp( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 35.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/Horn.cs b/Scripts/Items/Skill Items/Instruments/Horn.cs new file mode 100644 index 0000000..ce8fe5c --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/Horn.cs @@ -0,0 +1,31 @@ +using System; + +namespace Server.Items +{ + public class Horn : BaseInstrument + { + [Constructable] + public Horn() : base( 0x10E0, 0x5D4, 0x5D3 ) + { + Name = "shell trumpet"; + Weight = 5.0; + ItemID = Utility.RandomList( 0x10E0, 0x10F4 ); + } + + public Horn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/LapHarp.cs b/Scripts/Items/Skill Items/Instruments/LapHarp.cs new file mode 100644 index 0000000..76443df --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/LapHarp.cs @@ -0,0 +1,36 @@ +using System; + +namespace Server.Items +{ + public class LapHarp : BaseInstrument + { + [Constructable] + public LapHarp() : base( 0xEB2, 0x45, 0x46 ) + { + Name = "harp"; + Weight = 10.0; + ItemID = Utility.RandomList( 0xEB2, 0x13F3 ); + } + + public LapHarp( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 10.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/Lute.cs b/Scripts/Items/Skill Items/Instruments/Lute.cs new file mode 100644 index 0000000..5e6843d --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/Lute.cs @@ -0,0 +1,36 @@ +using System; + +namespace Server.Items +{ + public class Lute : BaseInstrument + { + [Constructable] + public Lute() : base( 0xEB3, 0x4C, 0x4D ) + { + Name = "lute"; + Weight = 5.0; + ItemID = Utility.RandomList( 0xEB3, 0x0EB4 ); + } + + public Lute( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/MagicHorn.cs b/Scripts/Items/Skill Items/Instruments/MagicHorn.cs new file mode 100644 index 0000000..80eda7b --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/MagicHorn.cs @@ -0,0 +1,31 @@ +using System; + +namespace Server.Items +{ + public class MagicHorn : BaseInstrument + { + [Constructable] + public MagicHorn() : base( 0x0409, 0x5D2, 0x5D3 ) + { + Name = "magic shell trumpet"; + Weight = 5.0; + ItemID = Utility.RandomList( 0x0409, 0x040A ); + } + + public MagicHorn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/Pipes.cs b/Scripts/Items/Skill Items/Instruments/Pipes.cs new file mode 100644 index 0000000..ba08105 --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/Pipes.cs @@ -0,0 +1,35 @@ +using System; + +namespace Server.Items +{ + public class Pipes : BaseInstrument + { + [Constructable] + public Pipes() : base( 0x212E, 0x5B8, 0x5B7 ) + { + Name = "pipes"; + Weight = 5.0; + } + + public Pipes( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 3.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/Tambourine.cs b/Scripts/Items/Skill Items/Instruments/Tambourine.cs new file mode 100644 index 0000000..3ef1a79 --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/Tambourine.cs @@ -0,0 +1,35 @@ +using System; + +namespace Server.Items +{ + public class Tambourine : BaseInstrument + { + [Constructable] + public Tambourine() : base( 0xE9D, 0x52, 0x53 ) + { + Name = "tambourine"; + Weight = 1.0; + } + + public Tambourine( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Instruments/TambourineTassel.cs b/Scripts/Items/Skill Items/Instruments/TambourineTassel.cs new file mode 100644 index 0000000..c8b4d98 --- /dev/null +++ b/Scripts/Items/Skill Items/Instruments/TambourineTassel.cs @@ -0,0 +1,35 @@ +using System; + +namespace Server.Items +{ + public class TambourineTassel : BaseInstrument + { + [Constructable] + public TambourineTassel() : base( 0xE9E, 0x52, 0x53 ) + { + Name = "tambourine"; + Weight = 1.0; + } + + public TambourineTassel( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Lumberjack/WoodBoard.cs b/Scripts/Items/Skill Items/Lumberjack/WoodBoard.cs new file mode 100644 index 0000000..07ae013 --- /dev/null +++ b/Scripts/Items/Skill Items/Lumberjack/WoodBoard.cs @@ -0,0 +1,115 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Items +{ + public class WoodBoard : Item, IAxe + { + private CraftResource m_Resource; + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get { return m_Resource; } + set { m_Resource = value; InvalidateProperties(); } + } + + [Constructable] + public WoodBoard() : this( 1 ) + { + } + + [Constructable] + public WoodBoard( int amount ) : this( CraftResource.Wooden, amount ) + { + } + + [Constructable] + public WoodBoard( CraftResource resource ): this( resource, 1 ) + { + } + + [Constructable] + public WoodBoard( CraftResource resource, int amount ): base( 0x1BD7 ) + { + Stackable = true; + Weight = 1.0; + Name = "wood"; + Amount = amount; + m_Resource = resource; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( !CraftResources.IsStandard( m_Resource ) ) + { + int num = CraftResources.GetLocalizationNumber( m_Resource ); + + if ( num > 0 ) + list.Add( num ); + else + list.Add( CraftResources.GetName( m_Resource ) ); + } + } + public WoodBoard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int)m_Resource ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Resource = (CraftResource)reader.ReadInt(); + break; + } + } + + if ( version == 0 ) + m_Resource = CraftResource.Wooden; + } + + public virtual bool TryCreateBoards( Mobile from, double skill, Item item ) + { + if ( Deleted || !from.CanSee( this ) ) + return false; + else if ( Server.Misc.SkillCheck.TradeSkill( from, Trades.Carpentry, false ) < skill && Server.Misc.SkillCheck.TradeSkill( from, Trades.Lumberjacking, false ) < skill ) + { + item.Delete(); + from.SendLocalizedMessage( 1072652 ); // You cannot work this strange and unusual wood. + return false; + } + base.ScissorHelper( from, item, 1, false ); + return true; + } + + public virtual bool Axe( Mobile from, BaseAxe axe ) + { + if ( ItemID != 0x1BD7 ) + { + ItemID = 0x1BD7; + Weight = 1.0; + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Magical/BlankScroll.cs b/Scripts/Items/Skill Items/Magical/BlankScroll.cs new file mode 100644 index 0000000..7f735a7 --- /dev/null +++ b/Scripts/Items/Skill Items/Magical/BlankScroll.cs @@ -0,0 +1,38 @@ +using System; + +namespace Server.Items +{ + public class BlankScroll : Item + { + [Constructable] + public BlankScroll() : this( 1 ) + { + } + + [Constructable] + public BlankScroll( int amount ) : base( 0xEF3 ) + { + Stackable = true; + Weight = 1.0; + Amount = amount; + } + + public BlankScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Magical/Bottle.cs b/Scripts/Items/Skill Items/Magical/Bottle.cs new file mode 100644 index 0000000..6f8190b --- /dev/null +++ b/Scripts/Items/Skill Items/Magical/Bottle.cs @@ -0,0 +1,40 @@ +using System; + +namespace Server.Items +{ + public class Bottle : Item + { + [Constructable] + public Bottle() : this( 1 ) + { + } + + [Constructable] + public Bottle( int amount ) : base( 0xF0E ) + { + Stackable = true; + Weight = 1.0; + Amount = amount; + } + + public Bottle( Serial serial ) : base( serial ) + { + } + + + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Magical/MagicRune.cs b/Scripts/Items/Skill Items/Magical/MagicRune.cs new file mode 100644 index 0000000..4c0e4d3 --- /dev/null +++ b/Scripts/Items/Skill Items/Magical/MagicRune.cs @@ -0,0 +1,236 @@ +using System; +using Server.Network; +using Server.Prompts; +using Server.Multis; +using Server.Regions; + +namespace Server.Items +{ + public class MagicRune : Item, IDyable + { + private string m_Description; + private bool m_Marked; + private Point3D m_Target; + private Map m_TargetMap; + private BaseHouse m_House; + private Mobile m_Owner; + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + + writer.Write( (Item) m_House ); + writer.Write( (string) m_Description ); + writer.Write( (bool) m_Marked ); + writer.Write( (Point3D) m_Target ); + writer.Write( (Map) m_TargetMap ); + writer.Write( (Mobile) m_Owner ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + m_House = reader.ReadItem() as BaseHouse; + m_Description = reader.ReadString(); + m_Marked = reader.ReadBool(); + m_Target = reader.ReadPoint3D(); + m_TargetMap = reader.ReadMap(); + m_Owner = reader.ReadMobile(); + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Mobile Owner + { + get + { + return m_Owner; + } + set{ m_Owner = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public BaseHouse House + { + get + { + if ( m_House != null && m_House.Deleted ) + House = null; + + return m_House; + } + set{ m_House = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public string Description + { + get + { + return m_Description; + } + set + { + m_Description = value; + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public bool Marked + { + get + { + return m_Marked; + } + set + { + if ( m_Marked != value ) + { + m_Marked = value; + InvalidateProperties(); + } + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Point3D Target + { + get + { + return m_Target; + } + set + { + m_Target = value; + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Map TargetMap + { + get + { + return m_TargetMap; + } + set + { + if ( m_TargetMap != value ) + { + m_TargetMap = value; + InvalidateProperties(); + } + } + } + + public virtual bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + else if ( RootParent is Mobile && from != RootParent ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public void Mark( Mobile m ) + { + m_Marked = true; + m_Owner = m; + + bool setDesc = false; + + m_House = null; + m_Target = m.Location; + m_TargetMap = m.Map; + + if( !setDesc ) + m_Description = BaseRegion.GetRuneNameFor( Region.Find( m_Target, m_TargetMap ) ); + + ItemID = 0x1f15; + InvalidateProperties(); + } + + private const string RuneFormat = "a rune for {0}"; + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Marked ) + { + string desc; + + if ( (desc = m_Description) == null || (desc = desc.Trim()).Length == 0 ) + desc = "an unknown location"; + + list.Add( ("{0}"), String.Format( RuneFormat, desc ) ); + } + } + + public override void AddNameProperties(ObjectPropertyList list) + { + base.AddNameProperties(list); + if ( Owner != null ){ list.Add( 1070722, "Belongs to " + Owner.Name + "" ); } + } + + public override void OnDoubleClick( Mobile from ) + { + int number; + + if ( !IsChildOf( from.Backpack ) ) + { + number = 1042001; // That must be in your pack for you to use it. + } + else if ( House != null ) + { + number = 1062399; // You cannot edit the description for this rune. + } + else if ( m_Marked ) + { + number = 501804; // Please enter a description for this marked object. + + from.Prompt = new RenamePrompt( this ); + } + else + { + number = 501805; // That rune is not yet marked. + } + + from.SendLocalizedMessage( number ); + } + + private class RenamePrompt : Prompt + { + private MagicRune m_Rune; + + public RenamePrompt( MagicRune rune ) + { + m_Rune = rune; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( m_Rune.House == null && m_Rune.Marked ) + { + m_Rune.Description = text; + from.SendLocalizedMessage( 1010474 ); // The etching on the rune has been changed. + } + } + } + + [Constructable] + public MagicRune() : base( 0x1F14 ) + { + Weight = 1.0; + } + + public MagicRune( Serial serial ) : base( serial ) + { + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Magical/Magicgate.cs b/Scripts/Items/Skill Items/Magical/Magicgate.cs new file mode 100644 index 0000000..8d2d8ed --- /dev/null +++ b/Scripts/Items/Skill Items/Magical/Magicgate.cs @@ -0,0 +1,412 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Mobiles; +using Server.Network; +using Server.Gumps; +using Server.Regions; + +namespace Server.Items +{ + [DispellableFieldAttribute] + public class Magicgate : Item + { + private Point3D m_Target; + private Map m_TargetMap; + private bool m_bDispellable; + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Target + { + get + { + return m_Target; + } + set + { + m_Target = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Map TargetMap + { + get + { + return m_TargetMap; + } + set + { + m_TargetMap = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Dispellable + { + get + { + return m_bDispellable; + } + set + { + m_bDispellable = value; + } + } + + [Constructable] + public Magicgate() : this( Point3D.Zero, null ) + { + m_bDispellable = true; + } + + [Constructable] + public Magicgate(bool bDispellable) : this( Point3D.Zero, null ) + { + m_bDispellable = bDispellable; + } + + [Constructable] + public Magicgate( Point3D target, Map targetMap ) : base( 0xF6C ) + { + Movable = false; + Light = LightType.Circle300; + + m_Target = target; + m_TargetMap = targetMap; + } + + public Magicgate( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.Player ) + return; + + if ( from.InRange( GetWorldLocation(), 1 ) ) + CheckGate( from, 1 ); + else + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + + public override bool OnMoveOver( Mobile m ) + { + if ( m.Player ) + CheckGate( m, 0 ); + + return true; + } + + public virtual void CheckGate( Mobile m, int range ) + { + new DelayTimer( m, this, range ).Start(); + } + + public virtual void OnGateUsed( Mobile m ) + { + } + + public virtual void UseGate( Mobile m ) + { + ClientFlags flags = m.NetState == null ? ClientFlags.None : m.NetState.Flags; + + if ( m.Spell != null ) + { + m.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment. + } + else if ( m_TargetMap != null && m_TargetMap != Map.Internal ) + { + BaseCreature.TeleportPets( m, m_Target, m_TargetMap ); + + m.MoveToWorld( m_Target, m_TargetMap ); + + if ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) + m.PlaySound( 0x1FE ); + + OnGateUsed( m ); + } + else + { + m.SendMessage( "This moongate does not seem to go anywhere." ); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_Target ); + writer.Write( m_TargetMap ); + + // Version 1 + writer.Write( m_bDispellable ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Target = reader.ReadPoint3D(); + m_TargetMap = reader.ReadMap(); + + if ( version >= 1 ) + m_bDispellable = reader.ReadBool(); + } + + public virtual bool ValidateUse( Mobile from, bool message ) + { + if ( from.Deleted || this.Deleted ) + return false; + + if ( from.Map != this.Map || !from.InRange( this, 1 ) ) + { + if ( message ) + from.SendLocalizedMessage( 500446 ); // That is too far away. + + return false; + } + + return true; + } + + public virtual void BeginConfirmation( Mobile from ) + { + if ( IsInTown( from.Location, from.Map ) && !IsInTown( m_Target, m_TargetMap ) ) + { + if ( from.AccessLevel == AccessLevel.Player || !from.Hidden ) + from.Send( new PlaySound( 0x20E, from.Location ) ); + from.CloseGump( typeof( MagicgateConfirmGump ) ); + from.SendGump( new MagicgateConfirmGump( from, this ) ); + } + else + { + EndConfirmation( from ); + } + } + + public virtual void EndConfirmation( Mobile from ) + { + if ( !ValidateUse( from, true ) ) + return; + + UseGate( from ); + } + + public virtual void DelayCallback( Mobile from, int range ) + { + if ( !ValidateUse( from, false ) || !from.InRange( this, range ) ) + return; + + if ( m_TargetMap != null ) + BeginConfirmation( from ); + else + from.SendMessage( "This moongate does not seem to go anywhere." ); + } + + public static bool IsInTown( Point3D p, Map map ) + { + if ( map == null ) + return false; + + TownRegion reg = (TownRegion) Region.Find( p, map ).GetRegion( typeof( TownRegion ) ); + + return ( reg != null ); + } + + private class DelayTimer : Timer + { + private Mobile m_From; + private Magicgate m_Gate; + private int m_Range; + + public DelayTimer( Mobile from, Magicgate gate, int range ) : base( TimeSpan.FromSeconds( 1.0 ) ) + { + m_From = from; + m_Gate = gate; + m_Range = range; + } + + protected override void OnTick() + { + m_Gate.DelayCallback( m_From, m_Range ); + } + } + } + + public class ConfirmationMagicgate : Magicgate + { + private int m_GumpWidth; + private int m_GumpHeight; + + private int m_TitleColor; + private int m_MessageColor; + + private int m_TitleNumber; + private int m_MessageNumber; + + private string m_MessageString; + + [CommandProperty( AccessLevel.GameMaster )] + public int GumpWidth + { + get{ return m_GumpWidth; } + set{ m_GumpWidth = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int GumpHeight + { + get{ return m_GumpHeight; } + set{ m_GumpHeight = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TitleColor + { + get{ return m_TitleColor; } + set{ m_TitleColor = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MessageColor + { + get{ return m_MessageColor; } + set{ m_MessageColor = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TitleNumber + { + get{ return m_TitleNumber; } + set{ m_TitleNumber = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MessageNumber + { + get{ return m_MessageNumber; } + set{ m_MessageNumber = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string MessageString + { + get{ return m_MessageString; } + set{ m_MessageString = value; } + } + + [Constructable] + public ConfirmationMagicgate() : this( Point3D.Zero, null ) + { + } + + [Constructable] + public ConfirmationMagicgate( Point3D target, Map targetMap ) : base( target, targetMap ) + { + } + + public ConfirmationMagicgate( Serial serial ) : base( serial ) + { + } + + public virtual void Warning_Callback( Mobile from, bool okay, object state ) + { + if ( okay ) + EndConfirmation( from ); + } + + public override void BeginConfirmation( Mobile from ) + { + if ( m_GumpWidth > 0 && m_GumpHeight > 0 && m_TitleNumber > 0 && (m_MessageNumber > 0 || m_MessageString != null) ) + { + from.CloseGump( typeof( WarningGump ) ); + from.SendGump( new WarningGump( m_TitleNumber, m_TitleColor, m_MessageString == null ? (object)m_MessageNumber : (object)m_MessageString, m_MessageColor, m_GumpWidth, m_GumpHeight, new WarningGumpCallback( Warning_Callback ), from ) ); + } + else + { + base.BeginConfirmation( from ); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.WriteEncodedInt( m_GumpWidth ); + writer.WriteEncodedInt( m_GumpHeight ); + + writer.WriteEncodedInt( m_TitleColor ); + writer.WriteEncodedInt( m_MessageColor ); + + writer.WriteEncodedInt( m_TitleNumber ); + writer.WriteEncodedInt( m_MessageNumber ); + + writer.Write( m_MessageString ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_GumpWidth = reader.ReadEncodedInt(); + m_GumpHeight = reader.ReadEncodedInt(); + + m_TitleColor = reader.ReadEncodedInt(); + m_MessageColor = reader.ReadEncodedInt(); + + m_TitleNumber = reader.ReadEncodedInt(); + m_MessageNumber = reader.ReadEncodedInt(); + + m_MessageString = reader.ReadString(); + + break; + } + } + } + } + + public class MagicgateConfirmGump : Gump + { + private Mobile m_From; + private Magicgate m_Gate; + + public MagicgateConfirmGump( Mobile from, Magicgate gate ) : base( 20, 30 ) + { + m_From = from; + m_Gate = gate; + + AddPage( 0 ); + + AddBackground( 0, 0, 420, 400, 5054 ); + AddBackground( 10, 10, 400, 380, 3000 ); + + AddHtml( 20, 40, 380, 60, @"Dost thou wish to step into the moongate? Continue to enter the gate, Cancel to stay here", false, false ); + + AddHtmlLocalized( 55, 110, 290, 20, 1011012, false, false ); // CANCEL + AddButton( 20, 110, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 55, 140, 290, 40, 1011011, false, false ); // CONTINUE + AddButton( 20, 140, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( info.ButtonID == 1 ) + m_Gate.EndConfirmation( m_From ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Magical/PotionKeg.cs b/Scripts/Items/Skill Items/Magical/PotionKeg.cs new file mode 100644 index 0000000..1f2bdba --- /dev/null +++ b/Scripts/Items/Skill Items/Magical/PotionKeg.cs @@ -0,0 +1,344 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class PotionKeg : Item + { + private PotionEffect m_Type; + private int m_Held; + + [CommandProperty( AccessLevel.GameMaster )] + public int Held + { + get + { + return m_Held; + } + set + { + if ( m_Held != value ) + { + m_Held = value; + UpdateWeight(); + InvalidateProperties(); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public PotionEffect Type + { + get + { + return m_Type; + } + set + { + m_Type = value; + InvalidateProperties(); + } + } + + [Constructable] + public PotionKeg() : base( 0x1940 ) + { + UpdateWeight(); + } + + public virtual void UpdateWeight() + { + int held = Math.Max( 0, Math.Min( m_Held, 100 ) ); + + this.Weight = 20 + ((held * 80) / 100); + } + + public PotionKeg( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Type ); + writer.Write( (int) m_Held ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + case 0: + { + m_Type = (PotionEffect)reader.ReadInt(); + m_Held = reader.ReadInt(); + + break; + } + } + + if ( version < 1 ) + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( UpdateWeight ) ); + } + + public override int LabelNumber + { + get + { + if ( m_Held == 0 ) + return 1041084; // A specially lined keg for potions. + else + return ( 1041620 + (int)m_Type ); + } + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + int number; + + if ( m_Held <= 0 ) + number = 502246; // The keg is empty. + else if ( m_Held < 5 ) + number = 502248; // The keg is nearly empty. + else if ( m_Held < 20 ) + number = 502249; // The keg is not very full. + else if ( m_Held < 30 ) + number = 502250; // The keg is about one quarter full. + else if ( m_Held < 40 ) + number = 502251; // The keg is about one third full. + else if ( m_Held < 47 ) + number = 502252; // The keg is almost half full. + else if ( m_Held < 54 ) + number = 502254; // The keg is approximately half full. + else if ( m_Held < 70 ) + number = 502253; // The keg is more than half full. + else if ( m_Held < 80 ) + number = 502255; // The keg is about three quarters full. + else if ( m_Held < 96 ) + number = 502256; // The keg is very full. + else if ( m_Held < 100 ) + number = 502257; // The liquid is almost to the top of the keg. + else + number = 502258; // The keg is completely full. + + list.Add( number ); + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + int number; + + if ( m_Held <= 0 ) + number = 502246; // The keg is empty. + else if ( m_Held < 5 ) + number = 502248; // The keg is nearly empty. + else if ( m_Held < 20 ) + number = 502249; // The keg is not very full. + else if ( m_Held < 30 ) + number = 502250; // The keg is about one quarter full. + else if ( m_Held < 40 ) + number = 502251; // The keg is about one third full. + else if ( m_Held < 47 ) + number = 502252; // The keg is almost half full. + else if ( m_Held < 54 ) + number = 502254; // The keg is approximately half full. + else if ( m_Held < 70 ) + number = 502253; // The keg is more than half full. + else if ( m_Held < 80 ) + number = 502255; // The keg is about three quarters full. + else if ( m_Held < 96 ) + number = 502256; // The keg is very full. + else if ( m_Held < 100 ) + number = 502257; // The liquid is almost to the top of the keg. + else + number = 502258; // The keg is completely full. + + this.LabelTo( from, number ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.InRange( GetWorldLocation(), 2 ) ) + { + if ( m_Held > 0 ) + { + Container pack = from.Backpack; + + if ( pack != null && pack.ConsumeTotal( typeof( Bottle ), 1 ) ) + { + from.SendLocalizedMessage( 502242 ); // You pour some of the keg's contents into an empty bottle... + + BasePotion pot = FillBottle(); + + if ( pack.TryDropItem( from, pot, false ) ) + { + from.SendLocalizedMessage( 502243 ); // ...and place it into your backpack. + from.PlaySound( 0x240 ); + + if ( --Held == 0 ) + from.SendLocalizedMessage( 502245 ); // The keg is now empty. + } + else + { + from.SendLocalizedMessage( 502244 ); // ...but there is no room for the bottle in your backpack. + pot.Delete(); + } + } + else + { + // TODO: Target a bottle + } + } + else + { + from.SendLocalizedMessage( 502246 ); // The keg is empty. + } + } + else + { + from.LocalOverheadMessage( Network.MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + } + + public override bool OnDragDrop( Mobile from, Item item ) + { + if ( item is BasePotion ) + { + BasePotion pot = (BasePotion)item; + int toHold = Math.Min( 100 - m_Held, pot.Amount ); + + + if ( toHold <= 0 ) + { + from.SendLocalizedMessage( 502233 ); // The keg will not hold any more! + return false; + } + else if ( m_Held == 0 ) + { + if ( GiveBottle( from, toHold ) ) + { + m_Type = pot.PotionEffect; + Held = toHold; + + from.PlaySound( 0x240 ); + + from.SendLocalizedMessage( 502237 ); // You place the empty bottle in your backpack. + + item.Consume( toHold ); + + if( !item.Deleted ) + item.Bounce( from ); + + return true; + } + else + { + from.SendLocalizedMessage( 502238 ); // You don't have room for the empty bottle in your backpack. + return false; + } + } + else if ( pot.PotionEffect != m_Type ) + { + from.SendLocalizedMessage( 502236 ); // You decide that it would be a bad idea to mix different types of potions. + return false; + } + else + { + if ( GiveBottle( from, toHold ) ) + { + Held += toHold; + + from.PlaySound( 0x240 ); + + from.SendLocalizedMessage( 502237 ); // You place the empty bottle in your backpack. + + item.Consume( toHold ); + + if( !item.Deleted ) + item.Bounce( from ); + + return true; + } + else + { + from.SendLocalizedMessage( 502238 ); // You don't have room for the empty bottle in your backpack. + return false; + } + } + } + else + { + from.SendLocalizedMessage( 502232 ); // The keg is not designed to hold that type of object. + return false; + } + } + + public bool GiveBottle( Mobile m, int amount ) + { + Container pack = m.Backpack; + + Bottle bottle = new Bottle( amount ); + + if ( pack == null || !pack.TryDropItem( m, bottle, false ) ) + { + bottle.Delete(); + return false; + } + + return true; + } + + public BasePotion FillBottle() + { + switch ( m_Type ) + { + default: + case PotionEffect.Nightsight: return new NightSightPotion(); + + case PotionEffect.CureLesser: return new LesserCurePotion(); + case PotionEffect.Cure: return new CurePotion(); + case PotionEffect.CureGreater: return new GreaterCurePotion(); + + case PotionEffect.Agility: return new AgilityPotion(); + case PotionEffect.AgilityGreater: return new GreaterAgilityPotion(); + + case PotionEffect.Strength: return new StrengthPotion(); + case PotionEffect.StrengthGreater: return new GreaterStrengthPotion(); + + case PotionEffect.PoisonLesser: return new LesserPoisonPotion(); + case PotionEffect.Poison: return new PoisonPotion(); + case PotionEffect.PoisonGreater: return new GreaterPoisonPotion(); + case PotionEffect.PoisonDeadly: return new DeadlyPoisonPotion(); + + case PotionEffect.Refresh: return new RefreshPotion(); + case PotionEffect.RefreshTotal: return new TotalRefreshPotion(); + + case PotionEffect.HealLesser: return new LesserHealPotion(); + case PotionEffect.Heal: return new HealPotion(); + case PotionEffect.HealGreater: return new GreaterHealPotion(); + + case PotionEffect.ExplosionLesser: return new LesserExplosionPotion(); + case PotionEffect.Explosion: return new ExplosionPotion(); + case PotionEffect.ExplosionGreater: return new GreaterExplosionPotion(); + } + } + + public static void Initialize() + { + TileData.ItemTable[0x1940].Height = 4; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Misc/Bandage.cs b/Scripts/Items/Skill Items/Misc/Bandage.cs new file mode 100644 index 0000000..b90b137 --- /dev/null +++ b/Scripts/Items/Skill Items/Misc/Bandage.cs @@ -0,0 +1,464 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Gumps; +using Server.Items; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Items +{ + public class Bandage : Item, IDyable + { + public static int Range = 1; + + public override double DefaultWeight + { + get { return 0.1; } + } + + [Constructable] + public Bandage() : this( 1 ) + { + } + + [Constructable] + public Bandage( int amount ) : base( 0xE21 ) + { + Stackable = true; + Amount = amount; + } + + public Bandage( Serial serial ) : base( serial ) + { + } + + public virtual bool Dye( Mobile from, DyeTub sender ) + { + if ( Deleted ) + return false; + + Hue = sender.DyedHue; + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.InRange( GetWorldLocation(), Range ) ) + { + from.RevealingAction(); + + from.SendLocalizedMessage( 500948 ); // Who will you use the bandages on? + + from.Target = new InternalTarget( this ); + } + else + { + from.SendLocalizedMessage( 500295 ); // You are too far away to do that. + } + } + + private class InternalTarget : Target + { + private Bandage m_Bandage; + + public InternalTarget( Bandage bandage ) : base( Bandage.Range, false, TargetFlags.Beneficial ) + { + m_Bandage = bandage; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Bandage.Deleted ) + return; + + if ( targeted is Mobile ) + { + if ( from.InRange( m_Bandage.GetWorldLocation(), Bandage.Range ) ) + { + if ( BandageContext.BeginHeal( from, (Mobile)targeted ) != null ) + { + m_Bandage.Consume(); + } + } + else + { + from.SendLocalizedMessage( 500295 ); // You are too far away to do that. + } + } + else + { + from.SendLocalizedMessage( 500970 ); // Bandages can not be used on that. + } + } + } + } + + public class BandageContext + { + private Mobile m_Healer; + private Mobile m_Patient; + private int m_Slips; + private Timer m_Timer; + + public Mobile Healer{ get{ return m_Healer; } } + public Mobile Patient{ get{ return m_Patient; } } + public int Slips{ get{ return m_Slips; } set{ m_Slips = value; } } + public Timer Timer{ get{ return m_Timer; } } + + public void Slip() + { + m_Healer.SendLocalizedMessage( 500961 ); // Your fingers slip! + ++m_Slips; + } + + public BandageContext( Mobile healer, Mobile patient, TimeSpan delay ) + { + m_Healer = healer; + m_Patient = patient; + + m_Timer = new InternalTimer( this, delay ); + m_Timer.Start(); + } + + public void StopHeal() + { + m_Table.Remove( m_Healer ); + + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + } + + private static Dictionary m_Table = new Dictionary(); + + public static BandageContext GetContext( Mobile healer ) + { + BandageContext bc = null; + m_Table.TryGetValue( healer, out bc ); + return bc; + } + + public static SkillName GetPrimarySkill( Mobile m ) + { + return SkillName.Healing; + } + + public static SkillName GetSecondarySkill( Mobile m ) + { + return SkillName.Healing; + } + + public void EndHeal() + { + StopHeal(); + + int healerNumber = -1, patientNumber = -1; + bool playSound = true; + bool checkSkills = false; + + SkillName primarySkill = GetPrimarySkill( m_Patient ); + SkillName secondarySkill = GetSecondarySkill( m_Patient ); + + BaseCreature petPatient = m_Patient as BaseCreature; + + bool guild = false; + if ( m_Healer is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)m_Healer; + + if ( pm.NpcGuild == NpcGuild.HealersGuild ) + guild = true; + } + + if ( !m_Healer.Alive ) + { + healerNumber = 500962; // You were unable to finish your work before you died. + patientNumber = -1; + playSound = false; + } + else if ( !m_Healer.InRange( m_Patient, Bandage.Range ) ) + { + healerNumber = 500963; // You did not stay close enough to heal your target. + patientNumber = -1; + playSound = false; + } + else if ( !guild && ( !m_Patient.Alive || (petPatient != null && petPatient.IsDeadPet) ) ) + { + healerNumber = 500966; // You are unable to resurrect your patient. + patientNumber = -1; + playSound = false; + } + else if ( !m_Patient.Alive || (petPatient != null && petPatient.IsDeadPet) ) + { + double healing = m_Healer.Skills[primarySkill].Value; + double anatomy = m_Healer.Skills[secondarySkill].Value; + double chance = ((healing - 68.0) / 50.0) - (m_Slips * 0.02); + + if (( (checkSkills = (healing >= 80.0 && anatomy >= 80.0)) && chance > Utility.RandomDouble() ) ) + { + if ( m_Patient.Map == null || !m_Patient.Map.CanFit( m_Patient.Location, 16, false, false ) ) + { + healerNumber = 501042; // Target can not be resurrected at that location. + patientNumber = 502391; // Thou can not be resurrected there! + } + else + { + healerNumber = 500965; // You are able to resurrect your patient. + patientNumber = -1; + + m_Patient.PlaySound( 0x214 ); + m_Patient.FixedEffect( 0x376A, 10, 16 ); + + if ( petPatient != null && petPatient.IsDeadPet ) + { + Mobile master = petPatient.ControlMaster; + + if( master != null && m_Healer == master ) + { + petPatient.ResurrectPet(); + + for ( int i = 0; i < petPatient.Skills.Length; ++i ) + { + petPatient.Skills[i].Base -= 0.1; + } + } + else if ( master != null && master.InRange( petPatient, 3 ) ) + { + healerNumber = 503255; // You are able to resurrect the creature. + + master.CloseGump( typeof( PetResurrectGump ) ); + master.SendGump( new PetResurrectGump( m_Healer, petPatient ) ); + } + else + { + bool found = false; + + List friends = petPatient.Friends; + + for ( int i = 0; friends != null && i < friends.Count; ++i ) + { + Mobile friend = friends[i]; + + if ( friend.InRange( petPatient, 3 ) ) + { + healerNumber = 503255; // You are able to resurrect the creature. + + friend.CloseGump( typeof( PetResurrectGump ) ); + friend.SendGump( new PetResurrectGump( m_Healer, petPatient ) ); + + found = true; + break; + } + } + + if ( !found ) + healerNumber = 1049670; // The pet's owner must be nearby to attempt resurrection. + } + } + else + { + m_Patient.CloseGump( typeof( ResurrectGump ) ); + m_Patient.SendGump( new ResurrectGump( m_Patient, m_Healer ) ); + } + } + } + else + { + if ( petPatient != null && petPatient.IsDeadPet ) + healerNumber = 503256; // You fail to resurrect the creature. + else + healerNumber = 500966; // You are unable to resurrect your patient. + + patientNumber = -1; + } + } + else if ( m_Patient.Poisoned ) + { + m_Healer.SendLocalizedMessage( 500969 ); // You finish applying the bandages. + + double healing = m_Healer.Skills[primarySkill].Value; + double anatomy = m_Healer.Skills[secondarySkill].Value; + double chance = ((healing - 30.0) / 50.0) - (m_Patient.Poison.Level * 0.1) - (m_Slips * 0.02); + + if ( (checkSkills = (healing >= 60.0 && anatomy >= 60.0)) && chance > Utility.RandomDouble() ) + { + if ( m_Patient.CurePoison( m_Healer ) ) + { + healerNumber = (m_Healer == m_Patient) ? -1 : 1010058; // You have cured the target of all poisons. + patientNumber = 1010059; // You have been cured of all poisons. + } + else + { + healerNumber = -1; + patientNumber = -1; + } + } + else + { + healerNumber = 1010060; // You have failed to cure your target! + patientNumber = -1; + } + } + else if ( m_Patient.Hits == m_Patient.HitsMax ) + { + healerNumber = 500967; // You heal what little damage your patient had. + patientNumber = -1; + } + else + { + checkSkills = true; + patientNumber = -1; + + double healing = m_Healer.Skills[primarySkill].Value; + double anatomy = m_Healer.Skills[secondarySkill].Value; + double chance = ((healing + 10.0) / 100.0) - (m_Slips * 0.02); + + if ( chance > Utility.RandomDouble() ) + { + healerNumber = 500969; // You finish applying the bandages. + + double min, max; + + min = (anatomy / 5.0) + (healing / 5.0) + 3.0; + max = (anatomy / 5.0) + (healing / 2.0) + 10.0; + + double toHeal = min + (Utility.RandomDouble() * (max - min)); + + if ( m_Patient.Body.IsMonster || m_Patient.Body.IsAnimal ) + toHeal += m_Patient.HitsMax / 100; + + toHeal -= m_Slips * 4; + + if ( m_Patient is PlayerMobile ){ toHeal = (int)(toHeal * Server.Misc.Settings.HitPoints()); } + + if ( toHeal < 1 ) + { + toHeal = 1; + healerNumber = 500968; // You apply the bandages, but they barely help. + } + + m_Patient.Heal( (int) toHeal, m_Healer, false ); + } + else + { + healerNumber = 500968; // You apply the bandages, but they barely help. + playSound = false; + } + } + + if ( healerNumber != -1 ) + m_Healer.SendLocalizedMessage( healerNumber ); + + if ( patientNumber != -1 ) + m_Patient.SendLocalizedMessage( patientNumber ); + + if ( playSound ) + m_Patient.PlaySound( 0x57 ); + + if ( checkSkills ) + { + m_Healer.CheckSkill( secondarySkill, 0.0, 120.0 ); + m_Healer.CheckSkill( primarySkill, 0.0, 120.0 ); + } + } + + private class InternalTimer : Timer + { + private BandageContext m_Context; + + public InternalTimer( BandageContext context, TimeSpan delay ) : base( delay ) + { + m_Context = context; + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + m_Context.EndHeal(); + } + } + + public static BandageContext BeginHeal( Mobile healer, Mobile patient ) + { + bool isDeadPet = ( patient is BaseCreature && ((BaseCreature)patient).IsDeadPet ); + + if ( patient is Golem ) + { + healer.SendLocalizedMessage( 500970 ); // Bandages cannot be used on that. + } + else if ( patient is PlayerMobile && patient.Hunger < 5 ) + { + healer.SendMessage( "One cannot be healed when they are starving!" ); + } + else if ( !patient.Poisoned && patient.Hits == patient.HitsMax && !isDeadPet ) + { + healer.SendLocalizedMessage( 500955 ); // That being is not damaged! + } + else if ( !patient.Alive && (patient.Map == null || !patient.Map.CanFit( patient.Location, 16, false, false )) ) + { + healer.SendLocalizedMessage( 501042 ); // Target cannot be resurrected at that location. + } + else if ( healer.CanBeBeneficial( patient, true, true ) ) + { + healer.DoBeneficial( patient ); + + bool onSelf = ( healer == patient ); + int dex = healer.Dex; + + double seconds; + double resDelay = ( patient.Alive ? 0.0 : 5.0 ); + + if ( onSelf ) + { + seconds = 9.4 + (0.6 * ((double)(120 - dex) / 10)); + } + else + { + if ( dex >= 100 ) + seconds = 3.0 + resDelay; + else if ( dex >= 40 ) + seconds = 4.0 + resDelay; + else + seconds = 5.0 + resDelay; + } + + BandageContext context = GetContext( healer ); + + if ( context != null ) + context.StopHeal(); + seconds *= 1000; + + context = new BandageContext( healer, patient, TimeSpan.FromMilliseconds( seconds ) ); + + m_Table[healer] = context; + + if ( !onSelf ) + patient.SendLocalizedMessage( 1008078, false, healer.Name ); // : Attempting to heal you. + + + healer.SendLocalizedMessage( 500956 ); // You begin applying the bandages. + return context; + } + + return null; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Misc/FireHorn.cs b/Scripts/Items/Skill Items/Misc/FireHorn.cs new file mode 100644 index 0000000..c69c051 --- /dev/null +++ b/Scripts/Items/Skill Items/Misc/FireHorn.cs @@ -0,0 +1,199 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Targeting; +using Server.Spells; + +namespace Server.Items +{ + public class FireHorn : Item + { + public override int LabelNumber{ get{ return 1060456; } } // fire horn + + [Constructable] + public FireHorn() : base( 0xFC7 ) + { + ItemID = Utility.RandomList( 0x10E0, 0x10F4 ); + Hue = 0x4A1; + Weight = 1.0; + } + + public FireHorn( Serial serial ) : base( serial ) + { + } + + private bool CheckUse( Mobile from ) + { + if ( !this.IsAccessibleTo( from ) ) + return false; + + if ( from.Map != this.Map || !from.InRange( GetWorldLocation(), 2 ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return false; + } + + if ( !from.CanBeginAction( typeof( FireHorn ) ) ) + { + from.SendLocalizedMessage( 1049615 ); // You must take a moment to catch your breath. + return false; + } + + int sulfAsh = 15; + if ( from.Backpack == null || from.Backpack.GetAmount( typeof( SulfurousAsh ) ) < sulfAsh ) + { + from.SendLocalizedMessage( 1049617 ); // You do not have enough sulfurous ash. + return false; + } + + return true; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( CheckUse( from ) ) + { + from.SendLocalizedMessage( 1049620 ); // Select an area to incinerate. + from.Target = new InternalTarget( this ); + } + } + + public void Use( Mobile from, IPoint3D loc ) + { + if ( !CheckUse( from ) ) + return; + + from.BeginAction( typeof( FireHorn ) ); + Timer.DelayCall( TimeSpan.FromSeconds( 12.0 ), new TimerStateCallback( EndAction ), from ); + + int music = from.Skills[SkillName.Musicianship].Fixed; + + int sucChance = 500 + ( music - 775 ) * 2; + double dSucChance = ((double)sucChance) / 1000.0; + + if ( !from.CheckSkill( SkillName.Musicianship, dSucChance ) ) + { + from.SendLocalizedMessage( 1049618 ); // The horn emits a pathetic squeak. + from.PlaySound( 0x18A ); + return; + } + + int sulfAsh = 15; + from.Backpack.ConsumeUpTo( typeof( SulfurousAsh ), sulfAsh ); + + from.PlaySound( 0x15F ); + Effects.SendPacket( from, from.Map, new HuedEffect( EffectType.Moving, from.Serial, Serial.Zero, 0x36D4, from.Location, loc, 5, 0, false, true, 0, 0 ) ); + + ArrayList targets = new ArrayList(); + bool playerVsPlayer = false; + + IPooledEnumerable eable = from.Map.GetMobilesInRange( new Point3D( loc ), 2 ); + + foreach ( Mobile m in eable ) + { + if ( from != m && SpellHelper.ValidIndirectTarget( from, m ) && from.CanBeHarmful( m, false ) ) + { + targets.Add( m ); + + if ( m.Player ) + playerVsPlayer = true; + } + } + + eable.Free(); + + if ( targets.Count > 0 ) + { + int prov = from.Skills[SkillName.Provocation].Fixed; + int disc = from.Skills[SkillName.Discordance].Fixed; + int peace = from.Skills[SkillName.Peacemaking].Fixed; + + int minDamage, maxDamage; + + int total = prov + disc / 5 + peace / 5; + + if ( playerVsPlayer ) + total /= 3; + + maxDamage = ( total * 2 ) / 30; + minDamage = ( maxDamage * 7 ) / 10; + + double damage = Utility.RandomMinMax( minDamage, maxDamage ); + + damage /= targets.Count; + + for ( int i = 0; i < targets.Count; ++i ) + { + Mobile m = (Mobile)targets[i]; + + double toDeal = damage; + + if ( m.CheckSkill( SkillName.MagicResist, 0.0, 120.0 ) ) + { + toDeal *= 0.5; + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + from.DoHarmful( m ); + SpellHelper.Damage( TimeSpan.Zero, m, from, toDeal ); + + Effects.SendTargetEffect( m, 0x3709, 10, 30 ); + } + } + + double breakChance = 0.16; + if ( Utility.RandomDouble() < breakChance ) + { + from.SendLocalizedMessage( 1049619 ); // The fire horn crumbles in your hands. + this.Delete(); + } + } + + private static void EndAction( object state ) + { + Mobile m = (Mobile) state; + + m.EndAction( typeof( FireHorn ) ); + m.SendLocalizedMessage( 1049621 ); // You catch your breath. + } + + private class InternalTarget : Target + { + private FireHorn m_Horn; + + public InternalTarget( FireHorn horn ) : base( 2, true, TargetFlags.Harmful ) + { + m_Horn = horn; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Horn.Deleted ) + return; + + IPoint3D loc; + if ( targeted is Item ) + loc = ((Item)targeted).GetWorldLocation(); + else + loc = targeted as IPoint3D; + + m_Horn.Use( from, loc ); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Agility Potions/AgilityPotion.cs b/Scripts/Items/Skill Items/Potions/Agility Potions/AgilityPotion.cs new file mode 100644 index 0000000..cf63301 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Agility Potions/AgilityPotion.cs @@ -0,0 +1,34 @@ +using System; +using Server; + +namespace Server.Items +{ + public class AgilityPotion : BaseAgilityPotion + { + public override int DexOffset{ get{ return 10; } } + public override TimeSpan Duration{ get{ return TimeSpan.FromMinutes( 2.0 ); } } + + [Constructable] + public AgilityPotion() : base( PotionEffect.Agility ) + { + } + + public AgilityPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Agility Potions/BaseAgilityPotion.cs b/Scripts/Items/Skill Items/Potions/Agility Potions/BaseAgilityPotion.cs new file mode 100644 index 0000000..0ced4da --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Agility Potions/BaseAgilityPotion.cs @@ -0,0 +1,57 @@ +using System; +using Server; + +namespace Server.Items +{ + public abstract class BaseAgilityPotion : BasePotion + { + public abstract int DexOffset{ get; } + public abstract TimeSpan Duration{ get; } + + public BaseAgilityPotion( PotionEffect effect ) : base( 0xF08, effect ) + { + } + + public BaseAgilityPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool DoAgility( Mobile from ) + { + // TODO: Verify scaled; is it offset, duration, or both? + if ( Spells.SpellHelper.AddStatOffset( from, StatType.Dex, Scale( from, DexOffset ), Duration ) ) + { + from.FixedEffect( 0x375A, 10, 15 ); + from.PlaySound( 0x1E7 ); + return true; + } + + from.SendLocalizedMessage( 502173 ); // You are already under a similar effect. + return false; + } + + public override void Drink( Mobile from ) + { + if ( DoAgility( from ) ) + { + BasePotion.PlayDrinkEffect( from ); + + this.Consume(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Agility Potions/GreaterAgilityPotion.cs b/Scripts/Items/Skill Items/Potions/Agility Potions/GreaterAgilityPotion.cs new file mode 100644 index 0000000..f084a69 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Agility Potions/GreaterAgilityPotion.cs @@ -0,0 +1,34 @@ +using System; +using Server; + +namespace Server.Items +{ + public class GreaterAgilityPotion : BaseAgilityPotion + { + public override int DexOffset{ get{ return 20; } } + public override TimeSpan Duration{ get{ return TimeSpan.FromMinutes( 2.0 ); } } + + [Constructable] + public GreaterAgilityPotion() : base( PotionEffect.AgilityGreater ) + { + } + + public GreaterAgilityPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/BasePotion.cs b/Scripts/Items/Skill Items/Potions/BasePotion.cs new file mode 100644 index 0000000..fc72101 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/BasePotion.cs @@ -0,0 +1,235 @@ +using System; +using Server; +using Server.Engines.Craft; +using System.Collections.Generic; + +namespace Server.Items +{ + public enum PotionEffect + { + Nightsight, + CureLesser, + Cure, + CureGreater, + Agility, + AgilityGreater, + Strength, + StrengthGreater, + PoisonLesser, + Poison, + PoisonGreater, + PoisonDeadly, + Refresh, + RefreshTotal, + HealLesser, + Heal, + HealGreater, + ExplosionLesser, + Explosion, + ExplosionGreater, + InvisibilityWeak, + Invisibility, + InvisibilityStrong, + VigorWeak, + Vigor, + VigorStrong, + ManaWeak, + Mana, + ManaStrong + } + + public abstract class BasePotion : Item, ICraftable + { + private PotionEffect m_PotionEffect; + + public PotionEffect PotionEffect + { + get + { + return m_PotionEffect; + } + set + { + m_PotionEffect = value; + InvalidateProperties(); + } + } + + public override int LabelNumber{ get{ return 1041314 + (int)m_PotionEffect; } } + + public BasePotion( int itemID, PotionEffect effect ) : base( itemID ) + { + m_PotionEffect = effect; + + Stackable = false; + Weight = 1.0; + } + + public BasePotion( Serial serial ) : base( serial ) + { + } + + public virtual bool RequireFreeHand{ get{ return Server.Misc.Settings.CannotDrinkPotionsWhileHoldingThings(); } } + + public static bool HasFreeHand( Mobile m ) + { + Item handOne = m.FindItemOnLayer( Layer.OneHanded ); + Item handTwo = m.FindItemOnLayer( Layer.TwoHanded ); + + if ( handTwo is BaseWeapon ) + handOne = handTwo; + + return ( handOne == null || handTwo == null ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !Movable ) + return; + + if ( from.InRange( this.GetWorldLocation(), 1 ) ) + { + if (!RequireFreeHand || HasFreeHand(from)) + { + if (this is BaseExplosionPotion && Amount > 1) + { + BasePotion pot = (BasePotion)Activator.CreateInstance(this.GetType()); + + if (pot != null) + { + Amount--; + + if (from.Backpack != null && !from.Backpack.Deleted) + { + from.Backpack.DropItem(pot); + } + else + { + pot.MoveToWorld(from.Location, from.Map); + } + pot.Drink( from ); + } + } + else + { + this.Drink( from ); + } + } + else + { + from.SendLocalizedMessage(502172); // You must have a free hand to drink a potion. + } + } + else + { + from.SendLocalizedMessage( 502138 ); // That is too far away for you to use + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_PotionEffect ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + case 0: + { + m_PotionEffect = (PotionEffect)reader.ReadInt(); + break; + } + } + + if( version == 0 ) + Stackable = false; + } + + public abstract void Drink( Mobile from ); + + public static void PlayDrinkEffect( Mobile m ) + { + m.RevealingAction(); + + m.PlaySound( 0x2D6 ); + + m.AddToBackpack( new Bottle() ); + + if ( m.Body.IsHuman && !m.Mounted ) + m.Animate( 34, 5, 1, true, false, 0 ); + } + + public static TimeSpan Scale( Mobile m, TimeSpan v ) + { + return v; + } + + public static double Scale( Mobile m, double v ) + { + return v; + } + + public static int Scale( Mobile m, int v ) + { + return v; + } + + public override bool StackWith( Mobile from, Item dropped, bool playSound ) + { + if( dropped is BasePotion && ((BasePotion)dropped).m_PotionEffect == m_PotionEffect ) + return base.StackWith( from, dropped, playSound ); + + return false; + } + + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + if ( craftSystem is DefAlchemy ) + { + Container pack = from.Backpack; + + if ( pack != null ) + { + List kegs = pack.FindItemsByType(); + + for ( int i = 0; i < kegs.Count; ++i ) + { + PotionKeg keg = kegs[i]; + + if ( keg == null ) + continue; + + if ( keg.Held <= 0 || keg.Held >= 100 ) + continue; + + if ( keg.Type != PotionEffect ) + continue; + + ++keg.Held; + + Consume(); + from.AddToBackpack( new Bottle() ); + + return -1; // signal placed in keg + } + } + } + + return 1; + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Cure Potions/BaseCurePotion.cs b/Scripts/Items/Skill Items/Potions/Cure Potions/BaseCurePotion.cs new file mode 100644 index 0000000..7a61823 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Cure Potions/BaseCurePotion.cs @@ -0,0 +1,104 @@ +using System; +using Server; +using Server.Spells; + +namespace Server.Items +{ + public class CureLevelInfo + { + private Poison m_Poison; + private double m_Chance; + + public Poison Poison + { + get{ return m_Poison; } + } + + public double Chance + { + get{ return m_Chance; } + } + + public CureLevelInfo( Poison poison, double chance ) + { + m_Poison = poison; + m_Chance = chance; + } + } + + public abstract class BaseCurePotion : BasePotion + { + public abstract CureLevelInfo[] LevelInfo{ get; } + + public BaseCurePotion( PotionEffect effect ) : base( 0xF07, effect ) + { + } + + public BaseCurePotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public void DoCure( Mobile from ) + { + bool cure = false; + + CureLevelInfo[] info = LevelInfo; + + for ( int i = 0; i < info.Length; ++i ) + { + CureLevelInfo li = info[i]; + + if ( li.Poison == from.Poison && Scale( from, li.Chance ) > Utility.RandomDouble() ) + { + cure = true; + break; + } + } + + if ( cure && from.CurePoison( from ) ) + { + from.SendLocalizedMessage( 500231 ); // You feel cured of poison! + + from.FixedEffect( 0x373A, 10, 15 ); + from.PlaySound( 0x1E0 ); + } + else if ( !cure ) + { + from.SendLocalizedMessage( 500232 ); // That potion was not strong enough to cure your ailment! + } + } + + public override void Drink( Mobile from ) + { + if ( from.Poisoned ) + { + DoCure( from ); + + BasePotion.PlayDrinkEffect( from ); + + from.FixedParticles( 0x373A, 10, 15, 5012, EffectLayer.Waist ); + from.PlaySound( 0x1E0 ); + + this.Consume(); + } + else + { + from.SendLocalizedMessage( 1042000 ); // You are not poisoned. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Cure Potions/CurePotion.cs b/Scripts/Items/Skill Items/Potions/Cure Potions/CurePotion.cs new file mode 100644 index 0000000..2d8723b --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Cure Potions/CurePotion.cs @@ -0,0 +1,41 @@ +using System; +using Server; + +namespace Server.Items +{ + public class CurePotion : BaseCurePotion + { + private static CureLevelInfo[] m_OldLevelInfo = new CureLevelInfo[] + { + new CureLevelInfo( Poison.Lesser, 1.00 ), // 100% chance to cure lesser poison + new CureLevelInfo( Poison.Regular, 0.75 ), // 75% chance to cure regular poison + new CureLevelInfo( Poison.Greater, 0.50 ), // 50% chance to cure greater poison + new CureLevelInfo( Poison.Deadly, 0.15 ) // 15% chance to cure deadly poison + }; + + public override CureLevelInfo[] LevelInfo{ get{ return m_OldLevelInfo; } } + + [Constructable] + public CurePotion() : base( PotionEffect.Cure ) + { + } + + public CurePotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Cure Potions/GreaterCurePotion.cs b/Scripts/Items/Skill Items/Potions/Cure Potions/GreaterCurePotion.cs new file mode 100644 index 0000000..c5fecb9 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Cure Potions/GreaterCurePotion.cs @@ -0,0 +1,42 @@ +using System; +using Server; + +namespace Server.Items +{ + public class GreaterCurePotion : BaseCurePotion + { + private static CureLevelInfo[] m_OldLevelInfo = new CureLevelInfo[] + { + new CureLevelInfo( Poison.Lesser, 1.00 ), // 100% chance to cure lesser poison + new CureLevelInfo( Poison.Regular, 1.00 ), // 100% chance to cure regular poison + new CureLevelInfo( Poison.Greater, 1.00 ), // 100% chance to cure greater poison + new CureLevelInfo( Poison.Deadly, 0.75 ), // 75% chance to cure deadly poison + new CureLevelInfo( Poison.Lethal, 0.25 ) // 25% chance to cure lethal poison + }; + + public override CureLevelInfo[] LevelInfo{ get{ return m_OldLevelInfo; } } + + [Constructable] + public GreaterCurePotion() : base( PotionEffect.CureGreater ) + { + } + + public GreaterCurePotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Cure Potions/LesserCurePotion.cs b/Scripts/Items/Skill Items/Potions/Cure Potions/LesserCurePotion.cs new file mode 100644 index 0000000..f0c0b8e --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Cure Potions/LesserCurePotion.cs @@ -0,0 +1,40 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LesserCurePotion : BaseCurePotion + { + private static CureLevelInfo[] m_OldLevelInfo = new CureLevelInfo[] + { + new CureLevelInfo( Poison.Lesser, 0.75 ), // 75% chance to cure lesser poison + new CureLevelInfo( Poison.Regular, 0.50 ), // 50% chance to cure regular poison + new CureLevelInfo( Poison.Greater, 0.15 ) // 15% chance to cure greater poison + }; + + public override CureLevelInfo[] LevelInfo{ get{ return m_OldLevelInfo; } } + + [Constructable] + public LesserCurePotion() : base( PotionEffect.CureLesser ) + { + } + + public LesserCurePotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Explosion Potions/BaseExplosionPotion.cs b/Scripts/Items/Skill Items/Potions/Explosion Potions/BaseExplosionPotion.cs new file mode 100644 index 0000000..2fcdc4d --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Explosion Potions/BaseExplosionPotion.cs @@ -0,0 +1,296 @@ +using System; +using System.Collections; +using Server; +using Server.Network; +using Server.Targeting; +using Server.Spells; +using Server.Misc; + +namespace Server.Items +{ + public abstract class BaseExplosionPotion : BasePotion + { + public abstract int MinDamage { get; } + public abstract int MaxDamage { get; } + + public override bool RequireFreeHand{ get{ return false; } } + + private static bool LeveledExplosion = false; // Should explosion potions explode other nearby potions? + private static bool InstantExplosion = false; // Should explosion potions explode on impact? + private static bool RelativeLocation = false; // Is the explosion target location relative for mobiles? + private const int ExplosionRange = 2; // How long is the blast radius? + + public BaseExplosionPotion( PotionEffect effect ) : base( 0xF0D, effect ) + { + } + + public BaseExplosionPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public virtual object FindParent( Mobile from ) + { + Mobile m = this.HeldBy; + + if ( m != null && m.Holding == this ) + return m; + + object obj = this.RootParent; + + if ( obj != null ) + return obj; + + if ( Map == Map.Internal ) + return from; + + return this; + } + + private Timer m_Timer; + + private ArrayList m_Users; + + public override void Drink( Mobile from ) + { + ThrowTarget targ = from.Target as ThrowTarget; + this.Stackable = false; // Scavenged explosion potions won't stack with those ones in backpack, and still will explode. + + if ( targ != null && targ.Potion == this ) + return; + + from.RevealingAction(); + + if ( m_Users == null ) + m_Users = new ArrayList(); + + if ( !m_Users.Contains( from ) ) + m_Users.Add( from ); + + from.Target = new ThrowTarget( this ); + + if ( m_Timer == null ) + { + from.SendLocalizedMessage( 500236 ); // You should throw it now! + + m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 0.75 ), TimeSpan.FromSeconds( 1.0 ), 4, new TimerStateCallback( Detonate_OnTick ), new object[]{ from, 3 } ); // 2.6 seconds explosion delay + } + } + + private void Detonate_OnTick( object state ) + { + if ( Deleted ) + return; + + object[] states = (object[])state; + Mobile from = (Mobile)states[0]; + int timer = (int)states[1]; + + object parent = FindParent( from ); + + if ( timer == 0 ) + { + Point3D loc; + Map map; + + if ( parent is Item ) + { + Item item = (Item)parent; + + loc = item.GetWorldLocation(); + map = item.Map; + } + else if ( parent is Mobile ) + { + Mobile m = (Mobile)parent; + + loc = m.Location; + map = m.Map; + } + else + { + return; + } + + Explode( from, true, loc, map ); + m_Timer = null; + } + else + { + if ( parent is Item ) + ((Item)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() ); + else if ( parent is Mobile ) + ((Mobile)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() ); + + states[1] = timer - 1; + } + } + + private void Reposition_OnTick( object state ) + { + if ( Deleted ) + return; + + object[] states = (object[])state; + Mobile from = (Mobile)states[0]; + IPoint3D p = (IPoint3D)states[1]; + Map map = (Map)states[2]; + + Point3D loc = new Point3D( p ); + + if ( InstantExplosion ) + Explode( from, true, loc, map ); + else + MoveToWorld( loc, map ); + } + + private class ThrowTarget : Target + { + private BaseExplosionPotion m_Potion; + + public BaseExplosionPotion Potion + { + get{ return m_Potion; } + } + + public ThrowTarget( BaseExplosionPotion potion ) : base( 12, true, TargetFlags.None ) + { + m_Potion = potion; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Potion.Deleted || m_Potion.Map == Map.Internal ) + return; + + IPoint3D p = targeted as IPoint3D; + + if ( p == null ) + return; + + Map map = from.Map; + + if ( map == null ) + return; + + SpellHelper.GetSurfaceTop( ref p ); + + from.RevealingAction(); + + IEntity to; + + to = new Entity( Serial.Zero, new Point3D( p ), map ); + + if( p is Mobile ) + { + if( !RelativeLocation ) // explosion location = current mob location. + p = ((Mobile)p).Location; + else + to = (Mobile)p; + } + + Effects.SendMovingEffect( from, to, m_Potion.ItemID, 7, 0, false, false, m_Potion.Hue, 0 ); + + if( m_Potion.Amount > 1 ) + { + Mobile.LiftItemDupe( m_Potion, 1 ); + } + + m_Potion.Internalize(); + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( m_Potion.Reposition_OnTick ), new object[]{ from, p, map } ); + } + } + + public void Explode( Mobile from, bool direct, Point3D loc, Map map ) + { + if ( Deleted ) + return; + + Consume(); + + for ( int i = 0; m_Users != null && i < m_Users.Count; ++i ) + { + Mobile m = (Mobile)m_Users[i]; + ThrowTarget targ = m.Target as ThrowTarget; + + if ( targ != null && targ.Potion == this ) + Target.Cancel( m ); + } + + if ( map == null ) + return; + + Effects.PlaySound(loc, map, 0x307); + + Effects.SendLocationEffect(loc, map, 0x36B0, 9, 10, 0, 0); + int alchemyBonus = 0; + + if ( direct ) + alchemyBonus = (int)(Server.Misc.SkillCheck.TradeSkill( from, Trades.Alchemy, false ) / 10); + + IPooledEnumerable eable = LeveledExplosion ? map.GetObjectsInRange( loc, ExplosionRange ) : map.GetMobilesInRange( loc, ExplosionRange ); + ArrayList toExplode = new ArrayList(); + + int toDamage = 0; + + foreach ( object o in eable ) + { + if ( o is Mobile && (from == null || (SpellHelper.ValidIndirectTarget( from, (Mobile)o ) && from.CanBeHarmful( (Mobile)o, false )))) + { + toExplode.Add( o ); + ++toDamage; + } + else if ( o is BaseExplosionPotion && o != this ) + { + toExplode.Add( o ); + } + } + + eable.Free(); + + int min = Scale( from, MinDamage ); + int max = Scale( from, MaxDamage ); + + for ( int i = 0; i < toExplode.Count; ++i ) + { + object o = toExplode[i]; + + if ( o is Mobile ) + { + Mobile m = (Mobile)o; + + if ( from != null ) + from.DoHarmful( m ); + + int damage = Utility.RandomMinMax( min, max ); + + damage += alchemyBonus; + + if ( damage > 40 ) + damage = 40; + + Ultima.Damage( m, from, damage ); + } + else if ( o is BaseExplosionPotion ) + { + BaseExplosionPotion pot = (BaseExplosionPotion)o; + + pot.Explode( from, false, pot.GetWorldLocation(), pot.Map ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Explosion Potions/ExplosionPotion.cs b/Scripts/Items/Skill Items/Potions/Explosion Potions/ExplosionPotion.cs new file mode 100644 index 0000000..98648fc --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Explosion Potions/ExplosionPotion.cs @@ -0,0 +1,34 @@ +using System; +using Server; + +namespace Server.Items +{ + public class ExplosionPotion : BaseExplosionPotion + { + public override int MinDamage { get { return 10; } } + public override int MaxDamage { get { return 20; } } + + [Constructable] + public ExplosionPotion() : base( PotionEffect.Explosion ) + { + } + + public ExplosionPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Explosion Potions/GreaterExplosionPotion.cs b/Scripts/Items/Skill Items/Potions/Explosion Potions/GreaterExplosionPotion.cs new file mode 100644 index 0000000..261e10f --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Explosion Potions/GreaterExplosionPotion.cs @@ -0,0 +1,34 @@ +using System; +using Server; + +namespace Server.Items +{ + public class GreaterExplosionPotion : BaseExplosionPotion + { + public override int MinDamage { get { return 15; } } + public override int MaxDamage { get { return 30; } } + + [Constructable] + public GreaterExplosionPotion() : base( PotionEffect.ExplosionGreater ) + { + } + + public GreaterExplosionPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Explosion Potions/LesserExplosionPotion.cs b/Scripts/Items/Skill Items/Potions/Explosion Potions/LesserExplosionPotion.cs new file mode 100644 index 0000000..3aa550f --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Explosion Potions/LesserExplosionPotion.cs @@ -0,0 +1,34 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LesserExplosionPotion : BaseExplosionPotion + { + public override int MinDamage { get { return 5; } } + public override int MaxDamage { get { return 10; } } + + [Constructable] + public LesserExplosionPotion() : base( PotionEffect.ExplosionLesser ) + { + } + + public LesserExplosionPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Heal Potions/BaseHealPotion.cs b/Scripts/Items/Skill Items/Potions/Heal Potions/BaseHealPotion.cs new file mode 100644 index 0000000..66b089d --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Heal Potions/BaseHealPotion.cs @@ -0,0 +1,84 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public abstract class BaseHealPotion : BasePotion + { + public abstract int MinHeal { get; } + public abstract int MaxHeal { get; } + public abstract double Delay { get; } + + public BaseHealPotion( PotionEffect effect ) : base( 0xF0C, effect ) + { + } + + public BaseHealPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public void DoHeal( Mobile from ) + { + int min = Scale( from, MinHeal ); + int max = Scale( from, MaxHeal ); + + int heal = Utility.RandomMinMax( min, max ); + if ( from is PlayerMobile ){ heal = (int)(heal * Server.Misc.Settings.HitPoints()); } + + from.Heal( heal ); + } + + public override void Drink( Mobile from ) + { + if ( from.Hits < from.HitsMax ) + { + if ( from.Poisoned ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x22, 1005000 ); // You can not heal yourself in your current state. + } + else + { + if ( from.BeginAction( typeof( BaseHealPotion ) ) ) + { + DoHeal( from ); + + BasePotion.PlayDrinkEffect( from ); + + this.Consume(); + + Timer.DelayCall( TimeSpan.FromSeconds( Delay ), new TimerStateCallback( ReleaseHealLock ), from ); + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 0x22, 500235 ); // You must wait 10 seconds before using another healing potion. + } + } + } + else + { + from.SendLocalizedMessage( 1049547 ); // You decide against drinking this potion, as you are already at full health. + } + } + + private static void ReleaseHealLock( object state ) + { + ((Mobile)state).EndAction( typeof( BaseHealPotion ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Heal Potions/GreaterHealPotion.cs b/Scripts/Items/Skill Items/Potions/Heal Potions/GreaterHealPotion.cs new file mode 100644 index 0000000..023ac99 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Heal Potions/GreaterHealPotion.cs @@ -0,0 +1,35 @@ +using System; +using Server; + +namespace Server.Items +{ + public class GreaterHealPotion : BaseHealPotion + { + public override int MinHeal { get { return 9; } } + public override int MaxHeal { get { return 30; } } + public override double Delay{ get{ return 10.0; } } + + [Constructable] + public GreaterHealPotion() : base( PotionEffect.HealGreater ) + { + } + + public GreaterHealPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Heal Potions/HealPotion.cs b/Scripts/Items/Skill Items/Potions/Heal Potions/HealPotion.cs new file mode 100644 index 0000000..ba56d53 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Heal Potions/HealPotion.cs @@ -0,0 +1,35 @@ +using System; +using Server; + +namespace Server.Items +{ + public class HealPotion : BaseHealPotion + { + public override int MinHeal { get { return 6; } } + public override int MaxHeal { get { return 20; } } + public override double Delay{ get{ return 10.0; } } + + [Constructable] + public HealPotion() : base( PotionEffect.Heal ) + { + } + + public HealPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Heal Potions/LesserHealPotion.cs b/Scripts/Items/Skill Items/Potions/Heal Potions/LesserHealPotion.cs new file mode 100644 index 0000000..f71a279 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Heal Potions/LesserHealPotion.cs @@ -0,0 +1,35 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LesserHealPotion : BaseHealPotion + { + public override int MinHeal { get { return 3; } } + public override int MaxHeal { get { return 10; } } + public override double Delay{ get{ return 10.0; } } + + [Constructable] + public LesserHealPotion() : base( PotionEffect.HealLesser ) + { + } + + public LesserHealPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/NightSight.cs b/Scripts/Items/Skill Items/Potions/NightSight.cs new file mode 100644 index 0000000..7165432 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/NightSight.cs @@ -0,0 +1,51 @@ +using System; +using Server; + +namespace Server.Items +{ + public class NightSightPotion : BasePotion + { + [Constructable] + public NightSightPotion() : base( 0xF06, PotionEffect.Nightsight ) + { + } + + public NightSightPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Drink( Mobile from ) + { + if ( from.BeginAction( typeof( LightCycle ) ) ) + { + new LightCycle.NightSightTimer( from ).Start(); + from.LightLevel = LightCycle.DungeonLevel / 2; + + from.FixedParticles( 0x376A, 9, 32, 5007, EffectLayer.Waist ); + from.PlaySound( 0x1E3 ); + + BasePotion.PlayDrinkEffect( from ); + + this.Consume(); + } + else + { + from.SendMessage( "You already have nightsight." ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Poison Potions/BasePoisonPotion.cs b/Scripts/Items/Skill Items/Potions/Poison Potions/BasePoisonPotion.cs new file mode 100644 index 0000000..95a3ea9 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Poison Potions/BasePoisonPotion.cs @@ -0,0 +1,49 @@ +using System; +using Server; + +namespace Server.Items +{ + public abstract class BasePoisonPotion : BasePotion + { + public abstract Poison Poison{ get; } + + public abstract double MinPoisoningSkill{ get; } + public abstract double MaxPoisoningSkill{ get; } + + public BasePoisonPotion( PotionEffect effect ) : base( 0xF0A, effect ) + { + } + + public BasePoisonPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public void DoPoison( Mobile from ) + { + from.ApplyPoison( from, Poison ); + } + + public override void Drink( Mobile from ) + { + DoPoison( from ); + + BasePotion.PlayDrinkEffect( from ); + + this.Consume(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Poison Potions/DeadlyPoisonPotion.cs b/Scripts/Items/Skill Items/Potions/Poison Potions/DeadlyPoisonPotion.cs new file mode 100644 index 0000000..a06bfe5 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Poison Potions/DeadlyPoisonPotion.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class DeadlyPoisonPotion : BasePoisonPotion + { + public override Poison Poison{ get{ return Poison.Deadly; } } + + public override double MinPoisoningSkill{ get{ return 95.0; } } + public override double MaxPoisoningSkill{ get{ return 100.0; } } + + [Constructable] + public DeadlyPoisonPotion() : base( PotionEffect.PoisonDeadly ) + { + } + + public DeadlyPoisonPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Poison Potions/GreaterPoisonPotion.cs b/Scripts/Items/Skill Items/Potions/Poison Potions/GreaterPoisonPotion.cs new file mode 100644 index 0000000..f667406 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Poison Potions/GreaterPoisonPotion.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class GreaterPoisonPotion : BasePoisonPotion + { + public override Poison Poison{ get{ return Poison.Greater; } } + + public override double MinPoisoningSkill{ get{ return 60.0; } } + public override double MaxPoisoningSkill{ get{ return 100.0; } } + + [Constructable] + public GreaterPoisonPotion() : base( PotionEffect.PoisonGreater ) + { + } + + public GreaterPoisonPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Poison Potions/LesserPoisonPotion.cs b/Scripts/Items/Skill Items/Potions/Poison Potions/LesserPoisonPotion.cs new file mode 100644 index 0000000..384a01e --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Poison Potions/LesserPoisonPotion.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class LesserPoisonPotion : BasePoisonPotion + { + public override Poison Poison{ get{ return Poison.Lesser; } } + + public override double MinPoisoningSkill{ get{ return 0.0; } } + public override double MaxPoisoningSkill{ get{ return 60.0; } } + + [Constructable] + public LesserPoisonPotion() : base( PotionEffect.PoisonLesser ) + { + } + + public LesserPoisonPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Poison Potions/PoisonPotion.cs b/Scripts/Items/Skill Items/Potions/Poison Potions/PoisonPotion.cs new file mode 100644 index 0000000..41197f4 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Poison Potions/PoisonPotion.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Items +{ + public class PoisonPotion : BasePoisonPotion + { + public override Poison Poison{ get{ return Poison.Regular; } } + + public override double MinPoisoningSkill{ get{ return 30.0; } } + public override double MaxPoisoningSkill{ get{ return 70.0; } } + + [Constructable] + public PoisonPotion() : base( PotionEffect.Poison ) + { + } + + public PoisonPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Refresh Potions/BaseRefreshPotion.cs b/Scripts/Items/Skill Items/Potions/Refresh Potions/BaseRefreshPotion.cs new file mode 100644 index 0000000..aed40b4 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Refresh Potions/BaseRefreshPotion.cs @@ -0,0 +1,48 @@ +using System; +using Server; + +namespace Server.Items +{ + public abstract class BaseRefreshPotion : BasePotion + { + public abstract double Refresh{ get; } + + public BaseRefreshPotion( PotionEffect effect ) : base( 0xF0B, effect ) + { + } + + public BaseRefreshPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Drink( Mobile from ) + { + if ( from.Stam < from.StamMax ) + { + from.Stam += Scale( from, (int)(Refresh * from.StamMax) ); + + BasePotion.PlayDrinkEffect( from ); + + this.Consume(); + } + else + { + from.SendMessage( "You decide against drinking this potion, as you are already at full stamina." ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Refresh Potions/RefreshPotion.cs b/Scripts/Items/Skill Items/Potions/Refresh Potions/RefreshPotion.cs new file mode 100644 index 0000000..468fa11 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Refresh Potions/RefreshPotion.cs @@ -0,0 +1,33 @@ +using System; +using Server; + +namespace Server.Items +{ + public class RefreshPotion : BaseRefreshPotion + { + public override double Refresh{ get{ return 0.25; } } + + [Constructable] + public RefreshPotion() : base( PotionEffect.Refresh ) + { + } + + public RefreshPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Refresh Potions/TotalRefreshPotion.cs b/Scripts/Items/Skill Items/Potions/Refresh Potions/TotalRefreshPotion.cs new file mode 100644 index 0000000..daf0009 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Refresh Potions/TotalRefreshPotion.cs @@ -0,0 +1,33 @@ +using System; +using Server; + +namespace Server.Items +{ + public class TotalRefreshPotion : BaseRefreshPotion + { + public override double Refresh{ get{ return 1.0; } } + + [Constructable] + public TotalRefreshPotion() : base( PotionEffect.RefreshTotal ) + { + } + + public TotalRefreshPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Strength Potions/BaseStrengthPotion.cs b/Scripts/Items/Skill Items/Potions/Strength Potions/BaseStrengthPotion.cs new file mode 100644 index 0000000..a4292ed --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Strength Potions/BaseStrengthPotion.cs @@ -0,0 +1,57 @@ +using System; +using Server; + +namespace Server.Items +{ + public abstract class BaseStrengthPotion : BasePotion + { + public abstract int StrOffset{ get; } + public abstract TimeSpan Duration{ get; } + + public BaseStrengthPotion( PotionEffect effect ) : base( 0xF09, effect ) + { + } + + public BaseStrengthPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool DoStrength( Mobile from ) + { + // TODO: Verify scaled; is it offset, duration, or both? + if ( Spells.SpellHelper.AddStatOffset( from, StatType.Str, Scale( from, StrOffset ), Duration ) ) + { + from.FixedEffect( 0x375A, 10, 15 ); + from.PlaySound( 0x1E7 ); + return true; + } + + from.SendLocalizedMessage( 502173 ); // You are already under a similar effect. + return false; + } + + public override void Drink( Mobile from ) + { + if ( DoStrength( from ) ) + { + BasePotion.PlayDrinkEffect( from ); + + this.Consume(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Strength Potions/GreaterStrengthPotion.cs b/Scripts/Items/Skill Items/Potions/Strength Potions/GreaterStrengthPotion.cs new file mode 100644 index 0000000..819ae50 --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Strength Potions/GreaterStrengthPotion.cs @@ -0,0 +1,34 @@ +using System; +using Server; + +namespace Server.Items +{ + public class GreaterStrengthPotion : BaseStrengthPotion + { + public override int StrOffset{ get{ return 20; } } + public override TimeSpan Duration{ get{ return TimeSpan.FromMinutes( 2.0 ); } } + + [Constructable] + public GreaterStrengthPotion() : base( PotionEffect.StrengthGreater ) + { + } + + public GreaterStrengthPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Potions/Strength Potions/StrengthPotion.cs b/Scripts/Items/Skill Items/Potions/Strength Potions/StrengthPotion.cs new file mode 100644 index 0000000..5bc1aad --- /dev/null +++ b/Scripts/Items/Skill Items/Potions/Strength Potions/StrengthPotion.cs @@ -0,0 +1,34 @@ +using System; +using Server; + +namespace Server.Items +{ + public class StrengthPotion : BaseStrengthPotion + { + public override int StrOffset{ get{ return 10; } } + public override TimeSpan Duration{ get{ return TimeSpan.FromMinutes( 2.0 ); } } + + [Constructable] + public StrengthPotion() : base( PotionEffect.Strength ) + { + } + + public StrengthPotion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tailor Items/Dressform.cs b/Scripts/Items/Skill Items/Tailor Items/Dressform.cs new file mode 100644 index 0000000..c18ea0d --- /dev/null +++ b/Scripts/Items/Skill Items/Tailor Items/Dressform.cs @@ -0,0 +1,32 @@ +using System; + +namespace Server.Items +{ + [FlipableAttribute(0xec6, 0xec7)] + public class Dressform : Item + { + [Constructable] + public Dressform() : base(0xec6) + { + Weight = 10; + } + + public Dressform(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tailor Items/DyeTub.cs b/Scripts/Items/Skill Items/Tailor Items/DyeTub.cs new file mode 100644 index 0000000..ccff090 --- /dev/null +++ b/Scripts/Items/Skill Items/Tailor Items/DyeTub.cs @@ -0,0 +1,291 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.Targeting; +using Server.ContextMenus; +using Server.Gumps; + +namespace Server.Items +{ + public interface IDyable + { + bool Dye( Mobile from, DyeTub sender ); + } + + public class DyeTub : Item, ISecurable + { + private bool m_Redyable; + private int m_DyedHue; + private SecureLevel m_SecureLevel; + + public virtual bool AllowFurniture + { + get{ return false; } + } + + public virtual bool AllowLeather + { + get{ return false; } + } + + public virtual bool AllowMetal + { + get{ return false; } + } + + public virtual bool AllowWood + { + get{ return false; } + } + + public virtual bool AllowDyables + { + get{ return true; } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int)m_SecureLevel ); + writer.Write( (bool) m_Redyable ); + writer.Write( (int) m_DyedHue ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_SecureLevel = (SecureLevel)reader.ReadInt(); + goto case 0; + } + case 0: + { + m_Redyable = reader.ReadBool(); + m_DyedHue = reader.ReadInt(); + + break; + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Redyable + { + get + { + return m_Redyable; + } + set + { + m_Redyable = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int DyedHue + { + get + { + return m_DyedHue; + } + set + { + if ( m_Redyable ) + { + m_DyedHue = value; + Hue = value; + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SecureLevel Level + { + get + { + return m_SecureLevel; + } + set + { + m_SecureLevel = value; + } + } + + [Constructable] + public DyeTub() : base( 0xFAB ) + { + Weight = 10.0; + m_Redyable = true; + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + SetSecureLevelEntry.AddTo( from, this, list ); + } + + public DyeTub( Serial serial ) : base( serial ) + { + } + + // Select the clothing to dye. + public virtual int TargetMessage{ get{ return 500859; } } + + // You can not dye that. + public virtual int FailMessage{ get{ return 1042083; } } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.InRange( this.GetWorldLocation(), 1 ) ) + { + from.SendLocalizedMessage( TargetMessage ); + from.Target = new InternalTarget( this ); + } + else + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + } + + public static bool alsoDyable( Item item ) + { + if ( item is Lexicon || + item is Grimoire || + item is Journal || + item is Diary || + item is CandleShort || + item is CandleMedium || + item is CandleLong || + item is DyeTub ) + return true; + + return false; + } + + private class InternalTarget : Target + { + private DyeTub m_Tub; + + public InternalTarget( DyeTub tub ) : base( 1, false, TargetFlags.None ) + { + m_Tub = tub; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Item ) + { + Item item = (Item)targeted; + + if ( ( alsoDyable( item ) || item is IDyable ) && m_Tub.AllowDyables ) + { + if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) ) + from.SendLocalizedMessage( 500446 ); // That is too far away. + else if ( item.Parent is Mobile ) + from.SendLocalizedMessage( 500861 ); // Can't Dye clothing that is being worn. + else if ( alsoDyable( item ) ) + { + item.Hue = m_Tub.DyedHue; + if ( item is DyeTub ){ ((DyeTub)item).DyedHue = item.Hue; } + from.PlaySound( 0x23E ); + } + else if ( ((IDyable)item).Dye( from, m_Tub ) ) + from.PlaySound( 0x23E ); + } + else if ( (FurnitureAttribute.Check( item ) || (item is PotionKeg)) && m_Tub.AllowFurniture ) + { + if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) ) + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + else + { + bool okay = ( item.IsChildOf( from.Backpack ) ); + + if ( !okay ) + { + if ( item.Parent == null ) + { + BaseHouse house = BaseHouse.FindHouseAt( item ); + + if ( house == null || ( !house.IsLockedDown( item ) && !house.IsSecure( item ) ) ) + from.SendLocalizedMessage( 501022 ); // Furniture must be locked down to paint it. + else if ( !house.IsCoOwner( from ) ) + from.SendLocalizedMessage( 501023 ); // You must be the owner to use this item. + else + okay = true; + } + else + { + from.SendLocalizedMessage( 1048135 ); // The furniture must be in your backpack to be painted. + } + } + + if ( okay ) + { + item.Hue = m_Tub.DyedHue; + from.PlaySound( 0x23E ); + } + } + } + else if ( ( item is MyTentEastAddonDeed ) || ( item is MyTentSouthAddonDeed ) ) + { + if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) ) + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + else if ( !item.Movable ) + { + from.SendLocalizedMessage( 1042083 ); // You cannot dye that. + } + else + { + item.Hue = m_Tub.DyedHue; + if ( item is MyTentEastAddonDeed ) { MyTentEastAddonDeed tent = (MyTentEastAddonDeed)item; tent.TentColor = m_Tub.DyedHue; } + else { MyTentSouthAddonDeed tent = (MyTentSouthAddonDeed)item; tent.TentColor = m_Tub.DyedHue; } + from.PlaySound( 0x23E ); + } + } + else if ( item is BaseArmor && ( (((BaseArmor)item).Resource == CraftResource.Leathered && m_Tub.AllowLeather ) || (((BaseArmor)item).Resource == CraftResource.Iron && m_Tub.AllowMetal ) || (((BaseArmor)item).Resource == CraftResource.Wooden && m_Tub.AllowWood ) ) ) + { + if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) ) + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + else if ( !item.Movable ) + { + from.SendLocalizedMessage( 1010093 ); // You may not dye items which are locked down. + } + else if ( item.Parent is Mobile ) + { + from.SendLocalizedMessage( 1070753 ); // You cannot dye equipped items. + } + else + { + item.Hue = m_Tub.DyedHue; + from.PlaySound( 0x23E ); + } + } + else + { + from.SendLocalizedMessage( m_Tub.FailMessage ); + } + } + else + { + from.SendLocalizedMessage( m_Tub.FailMessage ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tailor Items/Dyes.cs b/Scripts/Items/Skill Items/Tailor Items/Dyes.cs new file mode 100644 index 0000000..5fa6beb --- /dev/null +++ b/Scripts/Items/Skill Items/Tailor Items/Dyes.cs @@ -0,0 +1,97 @@ +using System; +using Server.Targeting; +using Server.HuePickers; + +namespace Server.Items +{ + public class Dyes : Item + { + [Constructable] + public Dyes() : base( 0xFA9 ) + { + Weight = 3.0; + } + + public Dyes( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 0.0 ) + Weight = 3.0; + } + + public override void OnDoubleClick( Mobile from ) + { + from.SendLocalizedMessage( 500856 ); // Select the dye tub to use the dyes on. + from.Target = new InternalTarget(); + } + + private class InternalTarget : Target + { + public InternalTarget() : base( 1, false, TargetFlags.None ) + { + } + + private class InternalPicker : HuePicker + { + private DyeTub m_Tub; + + public InternalPicker( DyeTub tub ) : base( tub.ItemID ) + { + m_Tub = tub; + } + + public override void OnResponse( int hue ) + { + m_Tub.DyedHue = hue; + } + } + + private static void SetTubHue( Mobile from, object state, int hue ) + { + ((DyeTub)state).DyedHue = hue; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is PigmentTub ) + { + PigmentTub tub = (PigmentTub)targeted; + + from.CloseGump( typeof( PigmentTub.PigmentGump ) ); + from.SendGump( new PigmentTub.PigmentGump( from, tub ) ); + } + else if ( targeted is DyeTub ) + { + DyeTub tub = (DyeTub) targeted; + + if ( tub.Redyable ) + { + from.SendHuePicker( new InternalPicker( tub ) ); + } + else + { + from.SendMessage( "That dye tub may not be redyed." ); + } + } + else + { + from.SendLocalizedMessage( 500857 ); // Use this on a dye tub. + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tailor Items/FurnitureDyeTub.cs b/Scripts/Items/Skill Items/Tailor Items/FurnitureDyeTub.cs new file mode 100644 index 0000000..6850d8e --- /dev/null +++ b/Scripts/Items/Skill Items/Tailor Items/FurnitureDyeTub.cs @@ -0,0 +1,36 @@ +using System; + +namespace Server.Items +{ + public class FurnitureDyeTub : DyeTub + { + public override bool AllowDyables{ get{ return false; } } + public override bool AllowFurniture{ get{ return true; } } + public override int TargetMessage{ get{ return 501019; } } // Select the furniture to dye. + public override int FailMessage{ get{ return 501021; } } // That is not a piece of furniture. + + [Constructable] + public FurnitureDyeTub() + { + Name = "furniture paint tub"; + } + + public FurnitureDyeTub( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tailor Items/PigmentTub.cs b/Scripts/Items/Skill Items/Tailor Items/PigmentTub.cs new file mode 100644 index 0000000..851fb34 --- /dev/null +++ b/Scripts/Items/Skill Items/Tailor Items/PigmentTub.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.Targeting; +using Server.ContextMenus; +using Server.Gumps; +using Server.Network; +using Server.Misc; + +namespace Server.Items +{ + public class PigmentTub : DyeTub + { + public override bool AllowLeather{ get{ return Settings.PigmentLeather(); } } + public override bool AllowMetal{ get{ return Settings.PigmentMetal(); } } + public override bool AllowWood{ get{ return Settings.PigmentWood(); } } + + public int m_Color; + public int m_Hue; + public int m_Category; + + [Constructable] + public PigmentTub() + { + Name = "pigment tub"; + } + + public PigmentTub( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + public static int tubCost() + { + int value = 1000; + if ( Settings.PigmentLeather() ) + value = value + 1000; + if ( Settings.PigmentMetal() ) + value = value + 1000; + if ( Settings.PigmentWood() ) + value = value + 500; + + return value; + } + + public class PigmentGump : Gump + { + private PigmentTub m_Tub; + + public PigmentGump( Mobile from, PigmentTub tub ) : base( 50, 50 ) + { + m_Tub = tub; + + if ( m_Tub.m_Color < 1 ) + { + m_Tub.m_Color = 1200; + m_Tub.m_Hue = m_Tub.m_Color+1; + m_Tub.m_Category = 900; + } + + int color = m_Tub.m_Color; + int c = 0; + int d = 162; + int n = 18; + if ( m_Tub.m_Color == 1800 ) + d = 142; + + this.Closable=true; + this.Disposable=true; + this.Dragable=true; + this.Resizable=false; + + AddPage(0); + AddImage(0, 0, 1); + + int x = 52; + int y = 50; + + while ( d > 0 ) + { + c++; + d--; + if ( c >= n ){ c=1; y=y+12; x=52; } + x=x+12; + + if ( color == 1254 ){ color = 1300; } + else if ( color == 1354 ){ color = 1400; } + else if ( color == 1454 ){ color = 1500; } + else if ( color == 1554 ){ color = 1600; } + else if ( color == 1654 ){ color = 1700; } + else if ( color == 1754 ){ color = 1800; } + else if ( color == 1908 ){ color = 2400; } + + AddButton(x, y, 2, 2, color, GumpButtonType.Reply, 0); + AddImage(x, y, 2, color); + + color++; + } + + AddItem(283, 43, 7939, m_Tub.m_Hue); + if ( Settings.PigmentLeather() ){ AddItem(276, 71, 5075, m_Tub.m_Hue); } + if ( Settings.PigmentMetal() ){ AddItem(291, 94, 5137, m_Tub.m_Hue); } + if ( Settings.PigmentWood() ){ AddItem(280, 120, 7034, m_Tub.m_Hue); } + AddItem(293, 149, 4011, m_Tub.m_Hue); + + AddButton(280, 205, 247, 248, 0, GumpButtonType.Reply, 0); + + int prev = m_Tub.m_Category-1; if ( prev == 899 ){ prev = 902; } + int next = m_Tub.m_Category+1; if ( next == 903 ){ next = 900; } + + AddButton(47, 213, 5603, 5603, prev, GumpButtonType.Reply, 0); + AddButton(70, 213, 5601, 5601, next, GumpButtonType.Reply, 0); + } + + public override void OnResponse(NetState sender, RelayInfo info) + { + Mobile from = sender.Mobile; + int button = info.ButtonID; + + if ( button == 900 ) + { + m_Tub.m_Color = 1200; + m_Tub.m_Category = button; + } + else if ( button == 901 ) + { + m_Tub.m_Color = 1500; + m_Tub.m_Category = button; + } + else if ( button == 902 ) + { + m_Tub.m_Color = 1800; + m_Tub.m_Category = button; + } + else if ( button > 1000 ) + { + m_Tub.m_Hue = button+1; + m_Tub.Hue = m_Tub.m_Hue; + m_Tub.DyedHue = m_Tub.Hue; + } + + if ( button > 0 ) + from.SendGump( new PigmentTub.PigmentGump( from, m_Tub ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tailor Items/Scissors.cs b/Scripts/Items/Skill Items/Tailor Items/Scissors.cs new file mode 100644 index 0000000..36d2af4 --- /dev/null +++ b/Scripts/Items/Skill Items/Tailor Items/Scissors.cs @@ -0,0 +1,75 @@ +using System; +using Server.Network; +using Server.Targeting; +using Server.Mobiles; + +namespace Server.Items +{ + public interface IScissorable + { + bool Scissor( Mobile from, Scissors scissors ); + } + + [FlipableAttribute( 0xf9f, 0xf9e )] + public class Scissors : Item + { + [Constructable] + public Scissors() : base( 0xF9F ) + { + Weight = 1.0; + } + + public Scissors( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + from.SendLocalizedMessage( 502434 ); // What should I use these scissors on? + + from.Target = new InternalTarget( this ); + } + + private class InternalTarget : Target + { + private Scissors m_Item; + + public InternalTarget( Scissors item ) : base( 2, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) + return; + + if( targeted is IScissorable ) + { + IScissorable obj = (IScissorable)targeted; + + if( obj.Scissor( from, m_Item ) ) + from.PlaySound( 0x248 ); + } + else + { + from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything. + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Thief/DisguiseKit.cs b/Scripts/Items/Skill Items/Thief/DisguiseKit.cs new file mode 100644 index 0000000..94883ca --- /dev/null +++ b/Scripts/Items/Skill Items/Thief/DisguiseKit.cs @@ -0,0 +1,352 @@ +using System; +using System.Collections; +using Server; +using Server.Gumps; +using Server.Spells; +using Server.Spells.Fifth; +using Server.Spells.Seventh; +using Server.Mobiles; +using Server.Network; +using Server.SkillHandlers; + +namespace Server.Items +{ + public class DisguiseKit : Item + { + public override int LabelNumber{ get{ return 1041078; } } // a disguise kit + + [Constructable] + public DisguiseKit() : base( 0xE05 ) + { + Weight = 1.0; + } + + public DisguiseKit( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public bool ValidateUse( Mobile from ) + { + PlayerMobile pm = from as PlayerMobile; + + if ( !IsChildOf( from.Backpack ) ) + { + // That must be in your pack for you to use it. + from.SendLocalizedMessage( 1042001 ); + } + else if ( !from.CanBeginAction( typeof( IncognitoSpell ) ) ) + { + // You cannot disguise yourself while incognitoed. + from.SendLocalizedMessage( 501704 ); + } + else if ( TransformationSpellHelper.UnderTransformation( from ) ) + { + // You cannot disguise yourself while in that form. + from.SendLocalizedMessage( 1061634 ); + } + else if ( !from.CanBeginAction( typeof( PolymorphSpell ) ) || from.IsBodyMod ) + { + // You cannot disguise yourself while polymorphed. + from.SendLocalizedMessage( 501705 ); + } + else + { + return true; + } + + return false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( ValidateUse( from ) ) + from.SendGump( new DisguiseGump( from, this, true, false ) ); + } + } + + public class DisguiseGump : Gump + { + private Mobile m_From; + private DisguiseKit m_Kit; + private bool m_Used; + + public DisguiseGump( Mobile from, DisguiseKit kit, bool startAtHair, bool used ) : base( 50, 50 ) + { + m_From = from; + m_Kit = kit; + m_Used = used; + + from.CloseGump( typeof( DisguiseGump ) ); + + AddPage( 0 ); + + AddBackground( 100, 10, 400, 385, 2600 ); + + //
THIEF DISGUISE KIT
+ AddHtmlLocalized( 100, 25, 400, 35, 1011045, false, false ); + + AddButton( 140, 353, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 172, 355, 90, 35, 1011036, false, false ); // OKAY + + AddButton( 257, 353, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 289, 355, 90, 35, 1011046, false, false ); // APPLY + + if ( from.Female || from.Body.IsFemale ) + { + DrawEntries( 0, 1, -1, m_HairEntries, -1 ); + } + else if ( startAtHair ) + { + DrawEntries( 0, 1, 2, m_HairEntries, 1011056 ); + DrawEntries( 1, 2, 1, m_BeardEntries, 1011059 ); + } + else + { + DrawEntries( 1, 1, 2, m_BeardEntries, 1011059 ); + DrawEntries( 0, 2, 1, m_HairEntries, 1011056 ); + } + } + + private void DrawEntries( int index, int page, int nextPage, DisguiseEntry[] entries, int nextNumber ) + { + AddPage( page ); + + if ( nextPage != -1 ) + { + AddButton( 155, 320, 250 + (index*2), 251 + (index*2), 0, GumpButtonType.Page, nextPage ); + AddHtmlLocalized( 180, 320, 150, 35, nextNumber, false, false ); + } + + for ( int i = 0; i < entries.Length; ++i ) + { + DisguiseEntry entry = entries[i]; + + if ( entry == null ) + continue; + + int x = (i % 2) * 205; + int y = (i / 2) * 55; + + if ( entry.m_GumpID != 0 ) + { + AddBackground( 220 + x, 60 + y, 50, 50, 2620 ); + AddImage( 153 + x + entry.m_OffsetX, 15 + y + entry.m_OffsetY, entry.m_GumpID ); + } + + AddHtmlLocalized( 140 + x, 72 + y, 80, 35, entry.m_Number, false, false ); + AddRadio( 118 + x, 73 + y, 208, 209, false, (i * 2) + index ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 0 ) + { + if ( m_Used ) + m_From.SendLocalizedMessage( 501706 ); // Disguises wear off after 2 hours. + else + m_From.SendLocalizedMessage( 501707 ); // You're looking good. + + return; + } + + int[] switches = info.Switches; + + if ( switches.Length == 0 ) + return; + + int switched = switches[0]; + int type = switched % 2; + int index = switched / 2; + + bool hair = ( type == 0 ); + + DisguiseEntry[] entries = ( hair ? m_HairEntries : m_BeardEntries ); + + if ( index >= 0 && index < entries.Length ) + { + DisguiseEntry entry = entries[index]; + + if ( entry == null ) + return; + + if ( !m_Kit.ValidateUse( m_From ) ) + return; + + if ( !hair && (m_From.Female || m_From.Body.IsFemale) ) + return; + + m_From.NameMod = NameList.RandomName( m_From.Female ? "female" : "male" ); + + if ( m_From is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)m_From; + + if ( hair ) + pm.SetHairMods( entry.m_ItemID, -2 ); + else + pm.SetHairMods( -2, entry.m_ItemID ); + } + + m_From.SendGump( new DisguiseGump( m_From, m_Kit, hair, true ) ); + + DisguiseTimers.RemoveTimer( m_From ); + + DisguiseTimers.CreateTimer( m_From, TimeSpan.FromHours( 2.0 ) ); + DisguiseTimers.StartTimer( m_From ); + } + } + + private static DisguiseEntry[] m_HairEntries = new DisguiseEntry[] + { + new DisguiseEntry( 8251, 50700, 0, 5, 1011052 ), // Short + new DisguiseEntry( 8261, 60710, 0, 3, 1011047 ), // Pageboy + new DisguiseEntry( 8252, 60708, 0,- 5, 1011053 ), // Long + new DisguiseEntry( 8264, 60901, 0, 5, 1011048 ), // Receding + new DisguiseEntry( 8253, 60702, 0,- 5, 1011054 ), // Ponytail + new DisguiseEntry( 8265, 60707, 0,- 5, 1011049 ), // 2-tails + new DisguiseEntry( 8260, 50703, 0, 5, 1011055 ), // Mohawk + new DisguiseEntry( 8266, 60713, 0, 10, 1011050 ), // Topknot + null, + new DisguiseEntry( 0, 0, 0, 0, 1011051 ) // None + }; + + private static DisguiseEntry[] m_BeardEntries = new DisguiseEntry[] + { + new DisguiseEntry( 8269, 50906, 0, 0, 1011401 ), // Vandyke + new DisguiseEntry( 8257, 50808, 0,- 2, 1011062 ), // Mustache + new DisguiseEntry( 8255, 50802, 0, 0, 1011060 ), // Short beard + new DisguiseEntry( 8268, 50905, 0,-10, 1011061 ), // Long beard + new DisguiseEntry( 8267, 50904, 0, 0, 1011060 ), // Short beard + new DisguiseEntry( 8254, 50801, 0,-10, 1011061 ), // Long beard + null, + new DisguiseEntry( 0, 0, 0, 0, 1011051 ) // None + }; + + private class DisguiseEntry + { + public int m_Number; + public int m_ItemID; + public int m_GumpID; + public int m_OffsetX; + public int m_OffsetY; + + public DisguiseEntry( int itemID, int gumpID, int ox, int oy, int name ) + { + m_ItemID = itemID; + m_GumpID = gumpID; + m_OffsetX = ox; + m_OffsetY = oy; + m_Number = name; + } + } + } + + public class DisguiseTimers + { + public static void Initialize() + { + new DisguisePersistance(); + } + + private class InternalTimer : Timer + { + private Mobile m_Player; + + public InternalTimer( Mobile m, TimeSpan delay ) : base( delay ) + { + m_Player = m; + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + m_Player.NameMod = null; + + if ( m_Player is PlayerMobile ) + ((PlayerMobile)m_Player).SetHairMods( -1, -1 ); + + DisguiseTimers.RemoveTimer( m_Player ); + } + } + + public static void CreateTimer( Mobile m, TimeSpan delay ) + { + if ( m != null ) + if ( !m_Timers.Contains( m ) ) + m_Timers[m] = new InternalTimer( m, delay ); + } + + public static void StartTimer( Mobile m ) + { + Timer t = (Timer)m_Timers[m]; + + if ( t != null ) + t.Start(); + } + + public static bool IsDisguised( Mobile m ) + { + return m_Timers.Contains( m ); + } + + public static bool StopTimer( Mobile m ) + { + Timer t = (Timer)m_Timers[m]; + + if ( t != null ) + { + t.Delay = t.Next - DateTime.Now; + t.Stop(); + } + + return ( t != null ); + } + + public static bool RemoveTimer( Mobile m ) + { + Timer t = (Timer)m_Timers[m]; + + if ( t != null ) + { + t.Stop(); + m_Timers.Remove( m ); + } + + return ( t != null ); + } + + public static TimeSpan TimeRemaining( Mobile m ) + { + Timer t = (Timer)m_Timers[m]; + + if ( t != null ) + { + return t.Next - DateTime.Now; + } + + return TimeSpan.Zero; + } + + private static Hashtable m_Timers = new Hashtable(); + + public static Hashtable Timers + { + get { return m_Timers; } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Thief/DisguisePersistance.cs b/Scripts/Items/Skill Items/Thief/DisguisePersistance.cs new file mode 100644 index 0000000..b5860a7 --- /dev/null +++ b/Scripts/Items/Skill Items/Thief/DisguisePersistance.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections; +using Server; +using Server.Mobiles; +using Server.Network; + +namespace Server.Items +{ + public class DisguisePersistance : Item + { + private static DisguisePersistance m_Instance; + + public static DisguisePersistance Instance{ get{ return m_Instance; } } + + public override string DefaultName + { + get { return "Disguise Persistance - Internal"; } + } + + public DisguisePersistance() : base( 1 ) + { + Movable = false; + + if ( m_Instance == null || m_Instance.Deleted ) + m_Instance = this; + else + base.Delete(); + } + + public DisguisePersistance( Serial serial ) : base( serial ) + { + m_Instance = this; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + int timerCount = DisguiseTimers.Timers.Count; + + writer.Write( timerCount ); + + foreach ( DictionaryEntry entry in DisguiseTimers.Timers ) + { + Mobile m = (Mobile)entry.Key; + + writer.Write( m ); + writer.Write( ((Timer)entry.Value).Next - DateTime.Now ); + writer.Write( m.NameMod ); + } + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + int count = reader.ReadInt(); + + for ( int i = 0; i < count; ++i ) + { + Mobile m = reader.ReadMobile(); + DisguiseTimers.CreateTimer( m, reader.ReadTimeSpan() ); + m.NameMod = reader.ReadString(); + } + + break; + } + } + } + + public override void Delete() + { + } + } +} diff --git a/Scripts/Items/Skill Items/Thief/LockPick.cs b/Scripts/Items/Skill Items/Thief/LockPick.cs new file mode 100644 index 0000000..84cb2bb --- /dev/null +++ b/Scripts/Items/Skill Items/Thief/LockPick.cs @@ -0,0 +1,189 @@ +using System; +using Server.Network; +using Server.Targeting; +using Server.Items; +using Server.Regions; + +namespace Server.Items +{ + public interface ILockpickable : IPoint2D + { + int LockLevel{ get; set; } + bool Locked{ get; set; } + Mobile Picker{ get; set; } + int MaxLockLevel{ get; set; } + int RequiredSkill{ get; set; } + + void LockPick( Mobile from ); + } + + [FlipableAttribute( 0x14fc, 0x14fb )] + public class Lockpick : Item + { + [Constructable] + public Lockpick() : this( 1 ) + { + } + + [Constructable] + public Lockpick( int amount ) : base( 0x14FC ) + { + Stackable = true; + Amount = amount; + } + + public Lockpick( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 && Weight == 0.1 ) + Weight = -1; + } + + public override void OnDoubleClick( Mobile from ) + { + from.SendLocalizedMessage( 502068 ); // What do you want to pick? + from.Target = new InternalTarget( this ); + } + + private class InternalTarget : Target + { + private Lockpick m_Item; + + public InternalTarget( Lockpick item ) : base( 1, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) + return; + + if ( targeted is LootChest ) + ((LootChest)targeted).Setup(); + + if ( targeted is BaseDoor && from.Region is DungeonRegion ) + { + BaseDoor door = (BaseDoor)targeted; + + if ( door.Sealed > DateTime.Now ) + { + from.PlaySound( 0x241 ); + door.Sealed = DateTime.MinValue; + door.SendLocalizedMessageTo( from, 502076 ); + } + else + { + from.SendLocalizedMessage( 502069 ); // This does not appear to be locked + } + } + else if ( targeted is ILockpickable ) + { + Item item = (Item)targeted; + from.Direction = from.GetDirectionTo( item ); + + if ( ((ILockpickable)targeted).Locked ) + { + from.PlaySound( 0x241 ); + + new InternalTimer( from, (ILockpickable)targeted, m_Item ).Start(); + } + else + { + // The door is not locked + from.SendLocalizedMessage( 502069 ); // This does not appear to be locked + } + } + else + { + from.SendLocalizedMessage( 501666 ); // You can't unlock that! + } + } + + private class InternalTimer : Timer + { + private Mobile m_From; + private ILockpickable m_Item; + private Lockpick m_Lockpick; + + public InternalTimer( Mobile from, ILockpickable item, Lockpick lockpick ) : base( TimeSpan.FromSeconds( 3.0 ) ) + { + m_From = from; + m_Item = item; + m_Lockpick = lockpick; + Priority = TimerPriority.TwoFiftyMS; + } + + protected void BrokeLockPickTest() + { + // When failed, a 25% chance to break the lockpick + if ( Utility.Random( 4 ) == 0 ) + { + Item item = (Item)m_Item; + + // You broke the lockpick. + item.SendLocalizedMessageTo( m_From, 502074 ); + + m_From.PlaySound( 0x3A4 ); + m_Lockpick.Consume(); + } + } + + protected override void OnTick() + { + Item item = (Item)m_Item; + + if ( !m_From.InRange( item.GetWorldLocation(), 1 ) ) + return; + + if ( m_Item.LockLevel == 0 || m_Item.LockLevel == -255 ) + { + // LockLevel of 0 means that the door can't be picklocked + // LockLevel of -255 means it's magic locked + item.SendLocalizedMessageTo( m_From, 502073 ); // This lock cannot be picked by normal means + return; + } + + if ( m_From.Skills[SkillName.Lockpicking].Value < m_Item.RequiredSkill ) + { + /* + // Do some training to gain skills + m_From.CheckSkill( SkillName.Lockpicking, 0, m_Item.LockLevel );*/ + + // The LockLevel is higher thant the LockPicking of the player + item.SendLocalizedMessageTo( m_From, 502072 ); // You don't see how that lock can be manipulated. + return; + } + + if ( m_From.CheckTargetSkill( SkillName.Lockpicking, m_Item, m_Item.LockLevel, m_Item.MaxLockLevel ) ) + { + // Success! Pick the lock! + item.SendLocalizedMessageTo( m_From, 502076 ); // The lock quickly yields to your skill. + m_From.PlaySound( 0x4A ); + m_Item.LockPick( m_From ); + } + else + { + // The player failed to pick the lock + BrokeLockPickTest(); + item.SendLocalizedMessageTo( m_From, 502075 ); // You are unable to pick the lock. + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/Axle.cs b/Scripts/Items/Skill Items/Tinkering/Axle.cs new file mode 100644 index 0000000..6e9e814 --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/Axle.cs @@ -0,0 +1,39 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x105B, 0x105C )] + public class Axle : Item + { + [Constructable] + public Axle() : this( 1 ) + { + } + + [Constructable] + public Axle( int amount ) : base( 0x105B ) + { + Stackable = true; + Amount = amount; + Weight = 1.0; + } + + public Axle( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/AxleGears.cs b/Scripts/Items/Skill Items/Tinkering/AxleGears.cs new file mode 100644 index 0000000..8df820f --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/AxleGears.cs @@ -0,0 +1,39 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x1051, 0x1052 )] + public class AxleGears : Item + { + [Constructable] + public AxleGears() : this( 1 ) + { + } + + [Constructable] + public AxleGears( int amount ) : base( 0x1051 ) + { + Stackable = true; + Amount = amount; + Weight = 1.0; + } + + public AxleGears( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/ClockFrame.cs b/Scripts/Items/Skill Items/Tinkering/ClockFrame.cs new file mode 100644 index 0000000..404481f --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/ClockFrame.cs @@ -0,0 +1,39 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x104D, 0x104E )] + public class ClockFrame : Item + { + [Constructable] + public ClockFrame() : this( 1 ) + { + } + + [Constructable] + public ClockFrame( int amount ) : base( 0x104D ) + { + Stackable = true; + Amount = amount; + Weight = 2.0; + } + + public ClockFrame( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/ClockParts.cs b/Scripts/Items/Skill Items/Tinkering/ClockParts.cs new file mode 100644 index 0000000..6b8b6d4 --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/ClockParts.cs @@ -0,0 +1,39 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x104F, 0x1050 )] + public class ClockParts : Item + { + [Constructable] + public ClockParts() : this( 1 ) + { + } + + [Constructable] + public ClockParts( int amount ) : base( 0x104F ) + { + Stackable = true; + Amount = amount; + Weight = 1.0; + } + + public ClockParts( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/Clocks.cs b/Scripts/Items/Skill Items/Tinkering/Clocks.cs new file mode 100644 index 0000000..c986df6 --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/Clocks.cs @@ -0,0 +1,220 @@ +using System; +using Server; + +namespace Server.Items +{ + public enum MoonPhase + { + NewMoon, + WaxingCrescentMoon, + FirstQuarter, + WaxingGibbous, + FullMoon, + WaningGibbous, + LastQuarter, + WaningCrescent + } + + [Flipable( 0x104B, 0x104C )] + public class Clock : Item + { + private static DateTime m_ServerStart; + + public static DateTime ServerStart + { + get{ return m_ServerStart; } + } + + public static void Initialize() + { + m_ServerStart = DateTime.Now; + } + + [Constructable] + public Clock() : this( 0x104B ) + { + } + + [Constructable] + public Clock( int itemID ) : base( itemID ) + { + Weight = 3.0; + } + + public Clock( Serial serial ) : base( serial ) + { + } + + public const double SecondsPerUOMinute = 5.0; + public const double MinutesPerUODay = SecondsPerUOMinute * 24; + + private static DateTime WorldStart = new DateTime( 1997, 9, 1 ); + + public static MoonPhase GetMoonPhase( Map map, int x, int y ) + { + int hours, minutes, totalMinutes; + + GetTime( map, 3584, 2048, out hours, out minutes, out totalMinutes ); + + if ( map != null ) + totalMinutes /= 10 + (map.MapIndex * 20); + + return (MoonPhase)(totalMinutes % 8); + } + + public static void GetTime( Map map, int x, int y, out int hours, out int minutes ) + { + int totalMinutes; + + GetTime( map, 3584, 2048, out hours, out minutes, out totalMinutes ); + } + + public static void GetTime( Map map, int x, int y, out int hours, out int minutes, out int totalMinutes ) + { + TimeSpan timeSpan = DateTime.Now - WorldStart; + + totalMinutes = (int)(timeSpan.TotalSeconds / SecondsPerUOMinute); + + if ( map != null ) + totalMinutes += map.MapIndex * 320; + + // Really on OSI this must be by subserver + totalMinutes += x / 16; + + hours = (totalMinutes / 60) % 24; + minutes = totalMinutes % 60; + } + + public static void GetTime( out int generalNumber, out string exactTime ) + { + GetTime( null, 3584, 2048, out generalNumber, out exactTime ); + } + + public static void GetTime( Mobile from, out int generalNumber, out string exactTime ) + { + GetTime( from.Map, 3584, 2048, out generalNumber, out exactTime ); + } + + public static void GetTime( Map map, int x, int y, out int generalNumber, out string exactTime ) + { + int hours, minutes; + + GetTime( map, 3584, 2048, out hours, out minutes ); + + // 00:00 AM - 00:59 AM : Witching hour + // 01:00 AM - 03:59 AM : Middle of night + // 04:00 AM - 07:59 AM : Early morning + // 08:00 AM - 11:59 AM : Late morning + // 12:00 PM - 12:59 PM : Noon + // 01:00 PM - 03:59 PM : Afternoon + // 04:00 PM - 07:59 PM : Early evening + // 08:00 PM - 11:59 AM : Late at night + + if ( hours >= 20 ) + generalNumber = 1042957; // It's late at night + else if ( hours >= 16 ) + generalNumber = 1042956; // It's early in the evening + else if ( hours >= 13 ) + generalNumber = 1042955; // It's the afternoon + else if ( hours >= 12 ) + generalNumber = 1042954; // It's around noon + else if ( hours >= 08 ) + generalNumber = 1042953; // It's late in the morning + else if ( hours >= 04 ) + generalNumber = 1042952; // It's early in the morning + else if ( hours >= 01 ) + generalNumber = 1042951; // It's the middle of the night + else + generalNumber = 1042950; // 'Tis the witching hour. 12 Midnight. + + hours %= 12; + + if ( hours == 0 ) + hours = 12; + + exactTime = String.Format( "{0}:{1:D2}", hours, minutes ); + } + + public override void OnDoubleClick( Mobile from ) + { + int genericNumber; + string exactTime; + + GetTime( from, out genericNumber, out exactTime ); + + SendLocalizedMessageTo( from, genericNumber ); + SendLocalizedMessageTo( from, 1042958, exactTime ); // ~1_TIME~ to be exact + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 3.0; + } + } + + [Flipable( 0x104B, 0x104C )] + public class ClockRight : Clock + { + [Constructable] + public ClockRight() : base( 0x104B ) + { + } + + public ClockRight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x104B, 0x104C )] + public class ClockLeft : Clock + { + [Constructable] + public ClockLeft() : base( 0x104C ) + { + } + + public ClockLeft( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/Gears.cs b/Scripts/Items/Skill Items/Tinkering/Gears.cs new file mode 100644 index 0000000..f24b669 --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/Gears.cs @@ -0,0 +1,39 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x1053, 0x1054 )] + public class Gears : Item + { + [Constructable] + public Gears() : this( 1 ) + { + } + + [Constructable] + public Gears( int amount ) : base( 0x1053 ) + { + Stackable = true; + Amount = amount; + Weight = 1.0; + } + + public Gears( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/Globe.cs b/Scripts/Items/Skill Items/Tinkering/Globe.cs new file mode 100644 index 0000000..f85da5d --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/Globe.cs @@ -0,0 +1,32 @@ +using System; +using Server; + +namespace Server.Items +{ + public class Globe : Item + { + [Constructable] + public Globe() : base( 0x1047 ) // It isn't flipable + { + Weight = 3.0; + } + + public Globe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/Hinge.cs b/Scripts/Items/Skill Items/Tinkering/Hinge.cs new file mode 100644 index 0000000..625428c --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/Hinge.cs @@ -0,0 +1,39 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x1055, 0x1056 )] + public class Hinge : Item + { + [Constructable] + public Hinge() : this( 1 ) + { + } + + [Constructable] + public Hinge( int amount ) : base( 0x1055 ) + { + Stackable = true; + Amount = amount; + Weight = 1.0; + } + + public Hinge( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/SextantParts.cs b/Scripts/Items/Skill Items/Tinkering/SextantParts.cs new file mode 100644 index 0000000..079ca03 --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/SextantParts.cs @@ -0,0 +1,39 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x1059, 0x105A )] + public class SextantParts : Item + { + [Constructable] + public SextantParts() : this( 1 ) + { + } + + [Constructable] + public SextantParts( int amount ) : base( 0x1059 ) + { + Stackable = true; + Amount = amount; + Weight = 2.0; + } + + public SextantParts( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/Springs.cs b/Scripts/Items/Skill Items/Tinkering/Springs.cs new file mode 100644 index 0000000..1963bb9 --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/Springs.cs @@ -0,0 +1,39 @@ +using System; +using Server; + +namespace Server.Items +{ + [Flipable( 0x105D, 0x105E )] + public class Springs : Item + { + [Constructable] + public Springs() : this( 1 ) + { + } + + [Constructable] + public Springs( int amount ) : base( 0x105D ) + { + Stackable = true; + Amount = amount; + Weight = 1.0; + } + + public Springs( Serial serial ) : base( serial ) + { + } + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/Spyglass.cs b/Scripts/Items/Skill Items/Tinkering/Spyglass.cs new file mode 100644 index 0000000..95627ac --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/Spyglass.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; +using Server.Items; + +namespace Server.Items +{ + [Flipable( 0x14F5, 0x14F6 )] + public class Spyglass : Item + { + [Constructable] + public Spyglass() : base( 0x14F5 ) + { + Name = "spyglass"; + Weight = 3.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.Map != Map.Britannia ) + { + from.SendMessage( "That does not work here!" ); + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1008155 ); // You peer into the heavens, seeking the moons... + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1008146 + (int)Clock.GetMoonPhase( Map.Britannia, 3584, 2048 ) ); + } + } + + public Spyglass( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tinkering/Utensils.cs b/Scripts/Items/Skill Items/Tinkering/Utensils.cs new file mode 100644 index 0000000..3b2c0b5 --- /dev/null +++ b/Scripts/Items/Skill Items/Tinkering/Utensils.cs @@ -0,0 +1,277 @@ +using System; + +namespace Server.Items +{ + [Flipable( 0x9F4, 0x9F5, 0x9A3, 0x9A4 )] + public class Fork : Item + { + [Constructable] + public Fork() : base( 0x9F4 ) + { + Weight = 1.0; + } + + public Fork( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ForkLeft : Item + { + [Constructable] + public ForkLeft() : base( 0x9F4 ) + { + Weight = 1.0; + } + + public ForkLeft( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ForkRight : Item + { + [Constructable] + public ForkRight() : base( 0x9F5 ) + { + Weight = 1.0; + } + + public ForkRight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x9F8, 0x9F9, 0x9C2, 0x9C3 )] + public class Spoon : Item + { + [Constructable] + public Spoon() : base( 0x9F8 ) + { + Weight = 1.0; + } + + public Spoon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SpoonLeft : Item + { + [Constructable] + public SpoonLeft() : base( 0x9F8 ) + { + Weight = 1.0; + } + + public SpoonLeft( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SpoonRight : Item + { + [Constructable] + public SpoonRight() : base( 0x9F9 ) + { + Weight = 1.0; + } + + public SpoonRight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + [Flipable( 0x9F6, 0x9F7, 0x9A5, 0x9A6 )] + public class Knife : Item + { + [Constructable] + public Knife() : base( 0x9F6 ) + { + Weight = 1.0; + } + + public Knife( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class KnifeLeft : Item + { + [Constructable] + public KnifeLeft() : base( 0x9F6 ) + { + Weight = 1.0; + } + + public KnifeLeft( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class KnifeRight : Item + { + [Constructable] + public KnifeRight() : base( 0x9F7 ) + { + Weight = 1.0; + } + + public KnifeRight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class Plate : Item + { + [Constructable] + public Plate() : base( 0x9D7 ) + { + Weight = 1.0; + } + + public Plate( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/BaseTool.cs b/Scripts/Items/Skill Items/Tools/BaseTool.cs new file mode 100644 index 0000000..5f0706b --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/BaseTool.cs @@ -0,0 +1,197 @@ +using System; +using Server; +using Server.Network; +using Server.Engines.Craft; + +namespace Server.Items +{ + public enum ToolQuality + { + Low, + Regular, + Exceptional + } + + public abstract class BaseTool : Item, IUsesRemaining, ICraftable + { + private Mobile m_Crafter; + private ToolQuality m_Quality; + private int m_UsesRemaining; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Crafter + { + get{ return m_Crafter; } + set{ m_Crafter = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public ToolQuality Quality + { + get{ return m_Quality; } + set{ UnscaleUses(); m_Quality = value; InvalidateProperties(); ScaleUses(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int UsesRemaining + { + get { return m_UsesRemaining; } + set { m_UsesRemaining = value; InvalidateProperties(); } + } + + public void ScaleUses() + { + m_UsesRemaining = (m_UsesRemaining * GetUsesScalar()) / 100; + InvalidateProperties(); + } + + public void UnscaleUses() + { + m_UsesRemaining = (m_UsesRemaining * 100) / GetUsesScalar(); + } + + public int GetUsesScalar() + { + if ( m_Quality == ToolQuality.Exceptional ) + return 200; + + return 100; + } + + public bool ShowUsesRemaining{ get{ return true; } set{} } + + public abstract CraftSystem CraftSystem{ get; } + + public BaseTool( int itemID ) : this( Utility.RandomMinMax( 25, 75 ), itemID ) + { + } + + public BaseTool( int uses, int itemID ) : base( itemID ) + { + m_UsesRemaining = uses; + m_Quality = ToolQuality.Regular; + } + + public BaseTool( Serial serial ) : base( serial ) + { + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + // Makers mark not displayed on OSI + //if ( m_Crafter != null ) + // list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~ + + if ( m_Quality == ToolQuality.Exceptional ) + list.Add( 1060636 ); // exceptional + + list.Add( 1060584, m_UsesRemaining.ToString() ); // uses remaining: ~1_val~ + } + + public virtual void DisplayDurabilityTo( Mobile m ) + { + LabelToAffix( m, 1017323, AffixType.Append, ": " + m_UsesRemaining.ToString() ); // Durability + } + + public static bool CheckAccessible( Item tool, Mobile m ) + { + return ( tool.IsChildOf( m ) || tool.Parent == m ); + } + + public static bool CheckTool( Item tool, Mobile m ) + { + Item check = m.FindItemOnLayer( Layer.OneHanded ); + + if ( check is BaseTool && check != tool ) + return false; + + check = m.FindItemOnLayer( Layer.TwoHanded ); + + if ( check is BaseTool && check != tool ) + return false; + + return true; + } + + public override void OnSingleClick( Mobile from ) + { + DisplayDurabilityTo( from ); + + base.OnSingleClick( from ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) || Parent == from ) + { + CraftSystem system = this.CraftSystem; + + int num = system.CanCraft( from, this, null ); + + if ( num > 0 && num != 1044267 ) // Blacksmithing shows the gump regardless of proximity of an anvil and forge after SE + { + from.SendLocalizedMessage( num ); + } + else + { + CraftContext context = system.GetContext( from ); + + from.SendGump( new CraftGump( from, system, this, null ) ); + } + } + else + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (Mobile) m_Crafter ); + writer.Write( (int) m_Quality ); + + writer.Write( (int) m_UsesRemaining ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Crafter = reader.ReadMobile(); + m_Quality = (ToolQuality) reader.ReadInt(); + goto case 0; + } + case 0: + { + m_UsesRemaining = reader.ReadInt(); + break; + } + } + } + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Quality = (ToolQuality)quality; + + if ( makersMark ) + Crafter = from; + + return quality; + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/DovetailSaw.cs b/Scripts/Items/Skill Items/Tools/DovetailSaw.cs new file mode 100644 index 0000000..6757712 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/DovetailSaw.cs @@ -0,0 +1,45 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [Flipable( 0x1028, 0x1029 )] + public class DovetailSaw : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public DovetailSaw() : base( 0x1028 ) + { + Weight = 2.0; + } + + [Constructable] + public DovetailSaw( int uses ) : base( uses, 0x1028 ) + { + Weight = 2.0; + } + + public DovetailSaw( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/DrawKnife.cs b/Scripts/Items/Skill Items/Tools/DrawKnife.cs new file mode 100644 index 0000000..a9d57bd --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/DrawKnife.cs @@ -0,0 +1,41 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class DrawKnife : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public DrawKnife() : base( 0x10E4 ) + { + Weight = 1.0; + } + + [Constructable] + public DrawKnife( int uses ) : base( uses, 0x10E4 ) + { + Weight = 1.0; + } + + public DrawKnife( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/FletcherTools.cs b/Scripts/Items/Skill Items/Tools/FletcherTools.cs new file mode 100644 index 0000000..0b369a2 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/FletcherTools.cs @@ -0,0 +1,45 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [FlipableAttribute( 0x1022, 0x1023 )] + public class FletcherTools : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefBowFletching.CraftSystem; } } + + [Constructable] + public FletcherTools() : base( 0x1022 ) + { + Weight = 2.0; + } + + [Constructable] + public FletcherTools( int uses ) : base( uses, 0x1022 ) + { + Weight = 2.0; + } + + public FletcherTools( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/FlourSifter.cs b/Scripts/Items/Skill Items/Tools/FlourSifter.cs new file mode 100644 index 0000000..5513570 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/FlourSifter.cs @@ -0,0 +1,41 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class FlourSifter : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCooking.CraftSystem; } } + + [Constructable] + public FlourSifter() : base( 0x103E ) + { + Weight = 1.0; + } + + [Constructable] + public FlourSifter( int uses ) : base( uses, 0x103E ) + { + Weight = 1.0; + } + + public FlourSifter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/Froe.cs b/Scripts/Items/Skill Items/Tools/Froe.cs new file mode 100644 index 0000000..b828226 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/Froe.cs @@ -0,0 +1,41 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class Froe : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public Froe() : base( 0x10E5 ) + { + Weight = 1.0; + } + + [Constructable] + public Froe( int uses ) : base( uses, 0x10E5 ) + { + Weight = 1.0; + } + + public Froe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/Hammer.cs b/Scripts/Items/Skill Items/Tools/Hammer.cs new file mode 100644 index 0000000..2b0d0b7 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/Hammer.cs @@ -0,0 +1,41 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class Hammer : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public Hammer() : base( 0x102A ) + { + Weight = 2.0; + } + + [Constructable] + public Hammer( int uses ) : base( uses, 0x102A ) + { + Weight = 2.0; + } + + public Hammer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/Inshave.cs b/Scripts/Items/Skill Items/Tools/Inshave.cs new file mode 100644 index 0000000..b066027 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/Inshave.cs @@ -0,0 +1,41 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class Inshave : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public Inshave() : base( 0x10E6 ) + { + Weight = 1.0; + } + + [Constructable] + public Inshave( int uses ) : base( uses, 0x10E6 ) + { + Weight = 1.0; + } + + public Inshave( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/JointingPlane.cs b/Scripts/Items/Skill Items/Tools/JointingPlane.cs new file mode 100644 index 0000000..39ead33 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/JointingPlane.cs @@ -0,0 +1,45 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [Flipable( 0x1030, 0x1031 )] + public class JointingPlane : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public JointingPlane() : base( 0x1030 ) + { + Weight = 2.0; + } + + [Constructable] + public JointingPlane( int uses ) : base( uses, 0x1030 ) + { + Weight = 2.0; + } + + public JointingPlane( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/MapmakersPen.cs b/Scripts/Items/Skill Items/Tools/MapmakersPen.cs new file mode 100644 index 0000000..d46f6e7 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/MapmakersPen.cs @@ -0,0 +1,47 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [FlipableAttribute( 0x0FBF, 0x0FC0 )] + public class MapmakersPen : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCartography.CraftSystem; } } + + public override int LabelNumber{ get{ return 1044167; } } // mapmaker's pen + + [Constructable] + public MapmakersPen() : base( 0x0FBF ) + { + Weight = 1.0; + } + + [Constructable] + public MapmakersPen( int uses ) : base( uses, 0x0FBF ) + { + Weight = 1.0; + } + + public MapmakersPen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/MortarPestle.cs b/Scripts/Items/Skill Items/Tools/MortarPestle.cs new file mode 100644 index 0000000..6ff7f48 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/MortarPestle.cs @@ -0,0 +1,74 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class MortarPestle : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefAlchemy.CraftSystem; } } + + [Constructable] + public MortarPestle() : base( 0xE9B ) + { + Weight = 1.0; + } + + [Constructable] + public MortarPestle( int uses ) : base( uses, 0xE9B ) + { + Weight = 1.0; + } + + public MortarPestle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + Container pack = from.Backpack; + int mod = 0; + + if ( dropped is Amber ){ mod = dropped.Amount * 1; } + else if ( dropped is Amethyst ){ mod = dropped.Amount * 3; } + else if ( dropped is Citrine ){ mod = dropped.Amount * 1; } + else if ( dropped is Diamond ){ mod = dropped.Amount * 5; } + else if ( dropped is Emerald ){ mod = dropped.Amount * 3; } + else if ( dropped is Ruby ){ mod = dropped.Amount * 2; } + else if ( dropped is Sapphire ){ mod = dropped.Amount * 3; } + else if ( dropped is StarSapphire ){ mod = dropped.Amount * 4; } + else if ( dropped is Tourmaline ){ mod = dropped.Amount * 2; } + + if ( from != null && mod > 0 ) + { + if ( dropped.Amount > 100 ) + { + from.SendMessage( "You can only grind up 100 gems at a time!" ); + from.AddToBackpack( dropped ); + } + else + { + dropped.Delete(); + from.PlaySound( 0x242 ); + from.SendMessage( "You grind up the gems into a fine powder" ); + from.AddToBackpack( new CrystalPowder(mod) ); + } + } + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/MouldingPlane.cs b/Scripts/Items/Skill Items/Tools/MouldingPlane.cs new file mode 100644 index 0000000..961af56 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/MouldingPlane.cs @@ -0,0 +1,42 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [Flipable( 0x102C, 0x102D )] + public class MouldingPlane : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public MouldingPlane() : base( 0x102C ) + { + Weight = 2.0; + } + + [Constructable] + public MouldingPlane( int uses ) : base( uses, 0x102C ) + { + Weight = 2.0; + } + + public MouldingPlane( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/Nails.cs b/Scripts/Items/Skill Items/Tools/Nails.cs new file mode 100644 index 0000000..d48ffbf --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/Nails.cs @@ -0,0 +1,42 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [Flipable( 0x102E, 0x102F )] + public class Nails : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public Nails() : base( 0x102E ) + { + Weight = 2.0; + } + + [Constructable] + public Nails( int uses ) : base( uses, 0x102C ) + { + Weight = 2.0; + } + + public Nails( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/RollingPin.cs b/Scripts/Items/Skill Items/Tools/RollingPin.cs new file mode 100644 index 0000000..aa2a3a7 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/RollingPin.cs @@ -0,0 +1,41 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class RollingPin : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCooking.CraftSystem; } } + + [Constructable] + public RollingPin() : base( 0x1043 ) + { + Weight = 1.0; + } + + [Constructable] + public RollingPin( int uses ) : base( uses, 0x1043 ) + { + Weight = 1.0; + } + + public RollingPin( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/Saw.cs b/Scripts/Items/Skill Items/Tools/Saw.cs new file mode 100644 index 0000000..0a117ae --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/Saw.cs @@ -0,0 +1,42 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [FlipableAttribute( 0x1034, 0x1035 )] + public class Saw : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public Saw() : base( 0x1034 ) + { + Weight = 2.0; + } + + [Constructable] + public Saw( int uses ) : base( uses, 0x1034 ) + { + Weight = 2.0; + } + + public Saw( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/Scorp.cs b/Scripts/Items/Skill Items/Tools/Scorp.cs new file mode 100644 index 0000000..c54a622 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/Scorp.cs @@ -0,0 +1,41 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class Scorp : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public Scorp() : base( 0x10E7 ) + { + Weight = 1.0; + } + + [Constructable] + public Scorp( int uses ) : base( uses, 0x10E7 ) + { + Weight = 1.0; + } + + public Scorp( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/ScribesPen.cs b/Scripts/Items/Skill Items/Tools/ScribesPen.cs new file mode 100644 index 0000000..6fda8eb --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/ScribesPen.cs @@ -0,0 +1,47 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [FlipableAttribute( 0x0FBF, 0x0FC0 )] + public class ScribesPen : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefInscription.CraftSystem; } } + + public override int LabelNumber{ get{ return 1044168; } } // scribe's pen + + [Constructable] + public ScribesPen() : base( 0x0FBF ) + { + Weight = 1.0; + } + + [Constructable] + public ScribesPen( int uses ) : base( uses, 0x0FBF ) + { + Weight = 1.0; + } + + public ScribesPen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 2.0 ) + Weight = 1.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/SewingKit.cs b/Scripts/Items/Skill Items/Tools/SewingKit.cs new file mode 100644 index 0000000..62d2ad1 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/SewingKit.cs @@ -0,0 +1,41 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class SewingKit : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefTailoring.CraftSystem; } } + + [Constructable] + public SewingKit() : base( 0xF9D ) + { + Weight = 2.0; + } + + [Constructable] + public SewingKit( int uses ) : base( uses, 0xF9D ) + { + Weight = 2.0; + } + + public SewingKit( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/Skillet.cs b/Scripts/Items/Skill Items/Tools/Skillet.cs new file mode 100644 index 0000000..a5de55d --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/Skillet.cs @@ -0,0 +1,43 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + public class Skillet : BaseTool + { + public override int LabelNumber{ get{ return 1044567; } } // skillet + + public override CraftSystem CraftSystem{ get{ return DefCooking.CraftSystem; } } + + [Constructable] + public Skillet() : base( 0x97F ) + { + Weight = 1.0; + } + + [Constructable] + public Skillet( int uses ) : base( uses, 0x97F ) + { + Weight = 1.0; + } + + public Skillet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/SledgeHammer.cs b/Scripts/Items/Skill Items/Tools/SledgeHammer.cs new file mode 100644 index 0000000..e1ef283 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/SledgeHammer.cs @@ -0,0 +1,42 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [FlipableAttribute( 0xFB5, 0xFB4 )] + public class SledgeHammer : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefBlacksmithy.CraftSystem; } } + + [Constructable] + public SledgeHammer() : base( 0xFB5 ) + { + Layer = Layer.OneHanded; + } + + [Constructable] + public SledgeHammer( int uses ) : base( uses, 0xFB5 ) + { + Layer = Layer.OneHanded; + } + + public SledgeHammer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Skill Items/Tools/SmithHammer.cs b/Scripts/Items/Skill Items/Tools/SmithHammer.cs new file mode 100644 index 0000000..e00676b --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/SmithHammer.cs @@ -0,0 +1,44 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [FlipableAttribute( 0x13E3, 0x13E4 )] + public class SmithHammer : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefBlacksmithy.CraftSystem; } } + + [Constructable] + public SmithHammer() : base( 0x13E3 ) + { + Weight = 8.0; + Layer = Layer.OneHanded; + } + + [Constructable] + public SmithHammer( int uses ) : base( uses, 0x13E3 ) + { + Weight = 8.0; + Layer = Layer.OneHanded; + } + + public SmithHammer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/SmoothingPlane.cs b/Scripts/Items/Skill Items/Tools/SmoothingPlane.cs new file mode 100644 index 0000000..d95f05b --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/SmoothingPlane.cs @@ -0,0 +1,42 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [Flipable( 0x1032, 0x1033 )] + public class SmoothingPlane : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } } + + [Constructable] + public SmoothingPlane() : base( 0x1032 ) + { + Weight = 1.0; + } + + [Constructable] + public SmoothingPlane( int uses ) : base( uses, 0x1032 ) + { + Weight = 1.0; + } + + public SmoothingPlane( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/TinkerTools.cs b/Scripts/Items/Skill Items/Tools/TinkerTools.cs new file mode 100644 index 0000000..5611b3c --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/TinkerTools.cs @@ -0,0 +1,80 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [Flipable( 0x1EB8, 0x1EB9 )] + public class TinkerTools : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefTinkering.CraftSystem; } } + + [Constructable] + public TinkerTools() : base( 0x1EB8 ) + { + Weight = 1.0; + } + + [Constructable] + public TinkerTools( int uses ) : base( uses, 0x1EB8 ) + { + Weight = 1.0; + } + + public TinkerTools( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TinkersTools : BaseTool + { + public override CraftSystem CraftSystem { get { return DefTinkering.CraftSystem; } } + + [Constructable] + public TinkersTools() + : base(0x1EBC) + { + Weight = 1.0; + } + + [Constructable] + public TinkersTools(int uses) + : base(uses, 0x1EBC) + { + Weight = 1.0; + } + + public TinkersTools(Serial serial) + : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int)0); // version + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Skill Items/Tools/Tongs.cs b/Scripts/Items/Skill Items/Tools/Tongs.cs new file mode 100644 index 0000000..ca70ab9 --- /dev/null +++ b/Scripts/Items/Skill Items/Tools/Tongs.cs @@ -0,0 +1,42 @@ +using System; +using Server; +using Server.Engines.Craft; + +namespace Server.Items +{ + [FlipableAttribute( 0xfbb, 0xfbc )] + public class Tongs : BaseTool + { + public override CraftSystem CraftSystem{ get{ return DefBlacksmithy.CraftSystem; } } + + [Constructable] + public Tongs() : base( 0xFBB ) + { + Weight = 2.0; + } + + [Constructable] + public Tongs( int uses ) : base( uses, 0xFBB ) + { + Weight = 2.0; + } + + public Tongs( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/AxeTrap.cs b/Scripts/Items/Traps/AxeTrap.cs new file mode 100644 index 0000000..7fb3c15 --- /dev/null +++ b/Scripts/Items/Traps/AxeTrap.cs @@ -0,0 +1,150 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public enum AxeTrapType + { + WestWall, + NorthWall, + WestDown, + NorthDown + } + + public class AxeTrap : BaseTrap + { + [CommandProperty( AccessLevel.GameMaster )] + public AxeTrapType Type + { + get + { + if ( ItemID >= 4403 && ItemID <= 4409 ) + return AxeTrapType.WestWall; + else if ( ItemID >= 4499 && ItemID <= 4505 ) + return AxeTrapType.NorthWall; + else if ( ItemID >= 4416 && ItemID <= 4420 ) + return AxeTrapType.WestDown; + else if ( ItemID >= 4427 && ItemID <= 4431 ) + return AxeTrapType.NorthDown; + + return AxeTrapType.WestWall; + } + set + { + bool extended = this.Extended; + + ItemID = ( extended ? GetExtendedID( value ) : GetBaseID( value ) ); + } + } + + public bool Extended + { + get{ return ( ItemID == GetExtendedID( this.Type ) ); } + set + { + if ( value ) + ItemID = GetExtendedID( this.Type ); + else + ItemID = GetBaseID( this.Type ); + } + } + + public static int GetBaseID( AxeTrapType type ) + { + switch ( type ) + { + case AxeTrapType.WestWall: return 4403; + case AxeTrapType.NorthWall: return 4499; + case AxeTrapType.WestDown: return 4416; + case AxeTrapType.NorthDown: return 4427; + } + + return 0; + } + + public static int GetExtendedID( AxeTrapType type ) + { + return GetBaseID( type ) + GetExtendedOffset( type ); + } + + public static int GetExtendedOffset( AxeTrapType type ) + { + switch ( type ) + { + case AxeTrapType.WestWall: return 6; + case AxeTrapType.NorthWall: return 6; + case AxeTrapType.WestDown: return 4; + case AxeTrapType.NorthDown: return 4; + } + + return 0; + } + + [Constructable] + public AxeTrap() : this( AxeTrapType.WestWall ) + { + } + + [Constructable] + public AxeTrap( AxeTrapType type ) : base( GetBaseID( type ) ) + { + } + + public override bool PassivelyTriggered{ get{ return false; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public override int PassiveTriggerRange{ get{ return 0; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.FromSeconds( 6.0 ); } } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + Effects.SendLocationEffect( Location, Map, GetBaseID( this.Type ) + 1, 18, 3, GetEffectHue(), 0 ); + Effects.PlaySound( Location, Map, 0x232 ); + + foreach ( Mobile mob in GetMobilesInRange( 0 ) ) + { + if ( mob.Alive && !mob.IsDeadBondedPet ) + Spells.SpellHelper.Damage( TimeSpan.FromTicks( 1 ), mob, mob, Utility.RandomMinMax( 1, 6 ) * 6 ); + } + + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerCallback( OnAxeExtended ) ); + + from.LocalOverheadMessage( MessageType.Regular, 0x22, 501622 ); // You stepped into a scything blade! + } + + public virtual void OnAxeExtended() + { + Extended = true; + Timer.DelayCall( TimeSpan.FromSeconds( 4.0 ), new TimerCallback( OnAxeRetracted ) ); + } + + public virtual void OnAxeRetracted() + { + Extended = false; + Effects.SendLocationEffect( Location, Map, GetExtendedID( this.Type ) - 1, 6, 3, GetEffectHue(), 0 ); + } + + public AxeTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + Extended = false; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/BaseTrap.cs b/Scripts/Items/Traps/BaseTrap.cs new file mode 100644 index 0000000..b7029fd --- /dev/null +++ b/Scripts/Items/Traps/BaseTrap.cs @@ -0,0 +1,204 @@ +using System; +using Server.Mobiles; + +namespace Server.Items +{ + public abstract class BaseTrap : Item + { + public virtual bool PassivelyTriggered{ get{ return false; } } + public virtual TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public virtual int PassiveTriggerRange{ get{ return -1; } } + public virtual TimeSpan ResetDelay{ get{ return TimeSpan.Zero; } } + private DateTime m_WhenDisarmed; + private DateTime m_WhenSkilled; + + private DateTime m_NextPassiveTrigger, m_NextActiveTrigger; + + public virtual void OnTrigger( Mobile from ) + { + if ( !TriggerCheck( from ) ) + return; + + if ( DisarmCheck( from ) ) + return; + } + + public bool TriggerCheck( Mobile from ) + { + if ( !from.Alive || from is BaseCreature || m_WhenDisarmed > DateTime.Now ) + return false; + + bool skillUp = false; + + if ( Utility.RandomBool() ) + { + if ( from != LastTriggeredBy || ( from == LastTriggeredBy && m_WhenSkilled < DateTime.Now ) ) + skillUp = true; + + if ( BaseWeapon.CheckDodge( from, skillUp ) ) + return false; + } + + return true; + } + + public bool DisarmCheck( Mobile from ) + { + if ( m_WhenDisarmed > DateTime.Now ) + return true; + + if ( from is PlayerMobile ) + { + bool disarmed = false; + double skill = from.Skills[SkillName.RemoveTrap].Base; + + if ( from.Skills[SkillName.RemoveTrap].Value > Utility.RandomMinMax(1,101) ) + disarmed = true; + + if ( from != LastTriggeredBy || ( from == LastTriggeredBy && m_WhenSkilled < DateTime.Now ) ) + { + // If they cannot pass this skill check, allow them to keep gaining skill + // Not only pass the kill check, but also gain skill + // Otherwise, record them so they can't keep gaining over and over on the same trap + if ( from.CheckSkill( SkillName.RemoveTrap, 0, 120 ) ) + { + if ( skill != from.Skills[SkillName.RemoveTrap].Base ) + { + LastTriggeredBy = from; + m_WhenSkilled = (DateTime.Now).AddMinutes(30.0); + } + } + } + + if ( disarmed ) + { + if ( this is MushroomTrap ) + { + from.SendMessage( "You squish the mushroom so its harmless!" ); + from.PlaySound( 0x050 ); + } + else if ( this is FireColumnTrap && this.ItemID == 0x028F ) + { + from.SendMessage( "You plug the hole so no further flames will erupt!" ); + from.PlaySound( 0x057 ); + } + else + { + from.SendMessage( "You disabled a trap!" ); + from.PlaySound( 0x241 ); + } + + m_WhenDisarmed = (DateTime.Now).AddMinutes((double)(Utility.RandomMinMax(30,60))); + + return true; + } + } + + return false; + } + + public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement + + public virtual int GetEffectHue() + { + int hue = this.Hue & 0x3FFF; + + if ( hue < 2 ) + return 0; + + return hue - 1; + } + + public bool CheckRange( Point3D loc, Point3D oldLoc, int range ) + { + return CheckRange( loc, range ) && !CheckRange( oldLoc, range ); + } + + public bool CheckRange( Point3D loc, int range ) + { + return ( (this.Z + 8) >= loc.Z && (loc.Z + 16) > this.Z ) + && Utility.InRange( GetWorldLocation(), loc, range ); + } + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( m_WhenDisarmed > DateTime.Now ) + return; + + base.OnMovement( m, oldLocation ); + + if ( m.Location == oldLocation || m is BaseCreature ) + return; + + if ( CheckRange( m.Location, oldLocation, 0 ) && DateTime.Now >= m_NextActiveTrigger ) + { + m_NextActiveTrigger = m_NextPassiveTrigger = DateTime.Now + ResetDelay; + + OnTrigger( m ); + } + else if ( PassivelyTriggered && CheckRange( m.Location, oldLocation, PassiveTriggerRange ) && DateTime.Now >= m_NextPassiveTrigger ) + { + m_NextPassiveTrigger = DateTime.Now + PassiveTriggerDelay; + + OnTrigger( m ); + } + } + + public BaseTrap( int itemID ) : base( itemID ) + { + Movable = false; + } + + public Mobile LastTriggeredBy; + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Last_TriggeredBy { get{ return LastTriggeredBy; } set{ LastTriggeredBy = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime WhenDisarmed + { + get + { + return m_WhenDisarmed; + } + set + { + m_WhenDisarmed = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime WhenSkilled + { + get + { + return m_WhenSkilled; + } + set + { + m_WhenSkilled = value; + } + } + + public BaseTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + writer.Write( (Mobile)LastTriggeredBy); + writer.Write( m_WhenDisarmed ); + writer.Write( m_WhenSkilled ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + LastTriggeredBy = reader.ReadMobile(); + m_WhenDisarmed = reader.ReadDateTime(); + m_WhenSkilled = reader.ReadDateTime(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/DartTrap.cs b/Scripts/Items/Traps/DartTrap.cs new file mode 100644 index 0000000..aa4d298 --- /dev/null +++ b/Scripts/Items/Traps/DartTrap.cs @@ -0,0 +1,117 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public enum DartTrapType + { + NorthWall, + WestWall + } + + public class DartTrap : BaseTrap + { + private Poison m_Poison; + + [CommandProperty( AccessLevel.GameMaster )] + public Poison Poison + { + get{ return m_Poison; } + set{ m_Poison = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DartTrapType Type + { + get + { + if ( ItemID >= 0x0403 && ItemID <=0x0408 ) + return DartTrapType.WestWall; + + return DartTrapType.NorthWall; + } + set + { + ItemID = GetBaseID( value ); + } + } + + public static int GetBaseID( DartTrapType type ) + { + if ( type ==DartTrapType.NorthWall ) + return 0x063F; + + return 0x0403; + } + + [Constructable] + public DartTrap() : this( DartTrapType.NorthWall ) + { + } + + [Constructable] + public DartTrap( DartTrapType type ) : this( type, Poison.Lesser ) + { + } + + [Constructable] + public DartTrap( Poison poison ) : this( DartTrapType.NorthWall, Poison.Lesser ) + { + } + + [Constructable] + public DartTrap( DartTrapType type, Poison poison ) : base( GetBaseID( type ) ) + { + m_Poison = poison; + Name = "dart trap"; + } + + public override bool PassivelyTriggered{ get{ return false; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public override int PassiveTriggerRange{ get{ return 0; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.FromSeconds( 0.0 ); } } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + Effects.SendLocationEffect( Location, Map, GetBaseID( this.Type ) + 1, 18, 3, GetEffectHue(), 0 ); + Effects.PlaySound( Location, Map, 0x224 ); + + from.ApplyPoison( from, m_Poison ); + + from.LocalOverheadMessage( MessageType.Regular, 0x22, 502380 ); // A dart imbeds itself in your flesh! + } + + public DartTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + Poison.Serialize( m_Poison, writer ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Poison = Poison.Deserialize( reader ); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/FireColumnTrap.cs b/Scripts/Items/Traps/FireColumnTrap.cs new file mode 100644 index 0000000..6917b10 --- /dev/null +++ b/Scripts/Items/Traps/FireColumnTrap.cs @@ -0,0 +1,114 @@ +using System; +using Server.Mobiles; + +namespace Server.Items +{ + [Flipable( 0x028F, 0x0290 )] + public class FireColumnTrap : BaseTrap + { + [Constructable] + public FireColumnTrap() : base( 0x028F ) + { + Name = "fire trap"; + + m_MinDamage = 10; + m_MaxDamage = 40; + + m_WarningFlame = true; + } + + public override bool PassivelyTriggered{ get{ return true; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.FromSeconds( 2.0 ); } } + public override int PassiveTriggerRange{ get{ return 3; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.FromSeconds( 0.5 ); } } + + private int m_MinDamage; + + [CommandProperty( AccessLevel.GameMaster )] + public virtual int MinDamage + { + get { return m_MinDamage; } + set { m_MinDamage = value; } + } + + private int m_MaxDamage; + + [CommandProperty( AccessLevel.GameMaster )] + public virtual int MaxDamage + { + get { return m_MaxDamage; } + set { m_MaxDamage = value; } + } + + private bool m_WarningFlame; + + [CommandProperty( AccessLevel.GameMaster )] + public virtual bool WarningFlame + { + get { return m_WarningFlame; } + set { m_WarningFlame = value; } + } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + if ( WarningFlame ) + DoEffect(); + + if ( from.Alive && CheckRange( from.Location, 0 ) ) + { + Spells.SpellHelper.Damage( TimeSpan.FromSeconds( 0.5 ), from, from, Utility.RandomMinMax( MinDamage, MaxDamage ) ); + + if ( !WarningFlame ) + DoEffect(); + } + } + + private void DoEffect() + { + Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x3709, 10, 30, 5052 ); + Effects.PlaySound( Location, Map, 0x225 ); + } + + public FireColumnTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_WarningFlame ); + writer.Write( m_MinDamage ); + writer.Write( m_MaxDamage ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_WarningFlame = reader.ReadBool(); + m_MinDamage = reader.ReadInt(); + m_MaxDamage = reader.ReadInt(); + break; + } + } + + if ( version == 0 ) + { + m_WarningFlame = true; + m_MinDamage = 10; + m_MaxDamage = 40; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/GasTrap.cs b/Scripts/Items/Traps/GasTrap.cs new file mode 100644 index 0000000..95076f7 --- /dev/null +++ b/Scripts/Items/Traps/GasTrap.cs @@ -0,0 +1,123 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public enum GasTrapType + { + NorthWall, + WestWall, + Floor + } + + public class GasTrap : BaseTrap + { + private Poison m_Poison; + + [CommandProperty( AccessLevel.GameMaster )] + public Poison Poison + { + get{ return m_Poison; } + set{ m_Poison = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public GasTrapType Type + { + get + { + if ( ItemID >= 0x138D && ItemID <= 0x1392 ) + return GasTrapType.WestWall; + else if ( ItemID >= 0x1387 && ItemID <= 0x138C ) + return GasTrapType.NorthWall; + + return GasTrapType.Floor; + } + set + { + ItemID = GetBaseID( value ); + } + } + + public static int GetBaseID( GasTrapType type ) + { + switch ( type ) + { + case GasTrapType.NorthWall: return 0x1387; + case GasTrapType.WestWall: return 0x138D; + } + + return 0x10B2; + } + + [Constructable] + public GasTrap() : this( GasTrapType.Floor ) + { + } + + [Constructable] + public GasTrap( GasTrapType type ) : this( type, Poison.Lesser ) + { + } + + [Constructable] + public GasTrap( Poison poison ) : this( GasTrapType.Floor, Poison.Lesser ) + { + } + + [Constructable] + public GasTrap( GasTrapType type, Poison poison ) : base( GetBaseID( type ) ) + { + m_Poison = poison; + Name = "gas trap"; + } + + public override bool PassivelyTriggered{ get{ return false; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public override int PassiveTriggerRange{ get{ return 0; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.FromSeconds( 0.0 ); } } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + Effects.SendLocationEffect( Location, Map, GetBaseID( this.Type ) + 1, 18, 3, GetEffectHue(), 0 ); + Effects.PlaySound( Location, Map, 0x231 ); + + from.ApplyPoison( from, m_Poison ); + + from.LocalOverheadMessage( MessageType.Regular, 0x22, 500855 ); // You are enveloped by a noxious gas cloud! + } + + public GasTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + Poison.Serialize( m_Poison, writer ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Poison = Poison.Deserialize( reader ); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/GiantSpikeTrap.cs b/Scripts/Items/Traps/GiantSpikeTrap.cs new file mode 100644 index 0000000..e29b9d9 --- /dev/null +++ b/Scripts/Items/Traps/GiantSpikeTrap.cs @@ -0,0 +1,50 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public class GiantSpikeTrap : BaseTrap + { + [Constructable] + public GiantSpikeTrap() : base( 0x1BFF ) + { + Name = "spike trap"; + } + + public override bool PassivelyTriggered{ get{ return true; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public override int PassiveTriggerRange{ get{ return 3; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.FromSeconds( 0.0 ); } } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + Effects.SendLocationEffect( Location, Map, 0x1D99, 48, 2, GetEffectHue(), 0 ); + Effects.PlaySound( Location, Map, 0x22C ); + + if ( from.Alive && CheckRange( from.Location, 0 ) ) + Spells.SpellHelper.Damage( TimeSpan.FromTicks( 1 ), from, from, Utility.Dice( 10, 7, 0 ) ); + } + + public GiantSpikeTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/MushroomTrap.cs b/Scripts/Items/Traps/MushroomTrap.cs new file mode 100644 index 0000000..774427b --- /dev/null +++ b/Scripts/Items/Traps/MushroomTrap.cs @@ -0,0 +1,68 @@ +using System; +using Server; +using Server.Network; +using Server.Regions; +using Server.Mobiles; + +namespace Server.Items +{ + public class MushroomTrap : BaseTrap + { + [Constructable] + public MushroomTrap() : base( 0x19C2 ) + { + Name = "mushroom"; + Hue = Utility.RandomList( 0x49B, 0x4A4 ); + Light = LightType.Circle150; + } + + public override bool PassivelyTriggered{ get{ return true; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public override int PassiveTriggerRange{ get{ return 2; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.Zero; } } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + ItemID = 0x1126; + Effects.PlaySound( Location, Map, 0x306 ); + + Spells.SpellHelper.Damage( TimeSpan.FromSeconds( 0.5 ), from, from, Utility.Dice( 2, 4, 0 ) ); + + Timer.DelayCall( TimeSpan.FromSeconds( 2.0 ), new TimerCallback( OnMushroomReset ) ); + } + + public virtual void OnMushroomReset() + { + if ( Region.Find( Location, Map ).IsPartOf( typeof( DungeonRegion ) ) ) + { + ItemID = 0x19C2; // reset + Hue = Utility.RandomList( 0x49B, 0x4A4 ); + } + else + Delete(); + } + + public MushroomTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( ItemID == 0x1126 ) + OnMushroomReset(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/SawTrap.cs b/Scripts/Items/Traps/SawTrap.cs new file mode 100644 index 0000000..574b690 --- /dev/null +++ b/Scripts/Items/Traps/SawTrap.cs @@ -0,0 +1,97 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public enum SawTrapType + { + WestWall, + NorthWall, + WestFloor, + NorthFloor + } + + public class SawTrap : BaseTrap + { + [CommandProperty( AccessLevel.GameMaster )] + public SawTrapType Type + { + get + { + switch ( ItemID ) + { + case 0x1103: return SawTrapType.NorthWall; + case 0x1116: return SawTrapType.WestWall; + case 0x11AC: return SawTrapType.NorthFloor; + case 0x11B1: return SawTrapType.WestFloor; + } + + return SawTrapType.NorthWall; + } + set + { + ItemID = GetBaseID( value ); + } + } + + public static int GetBaseID( SawTrapType type ) + { + switch ( type ) + { + case SawTrapType.NorthWall: return 0x1103; + case SawTrapType.WestWall: return 0x1116; + case SawTrapType.NorthFloor: return 0x11AC; + case SawTrapType.WestFloor: return 0x11B1; + } + + return 0; + } + + [Constructable] + public SawTrap() : this( SawTrapType.NorthFloor ) + { + } + + [Constructable] + public SawTrap( SawTrapType type ) : base( GetBaseID( type ) ) + { + } + + public override bool PassivelyTriggered{ get{ return false; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public override int PassiveTriggerRange{ get{ return 0; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.FromSeconds( 0.0 ); } } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + Effects.SendLocationEffect( Location, Map, GetBaseID( this.Type ) + 1, 6, 3, GetEffectHue(), 0 ); + Effects.PlaySound( Location, Map, 0x21C ); + + Spells.SpellHelper.Damage( TimeSpan.FromTicks( 1 ), from, from, Utility.RandomMinMax( 5, 15 ) ); + + from.LocalOverheadMessage( MessageType.Regular, 0x22, 500853 ); // You stepped onto a blade trap! + } + + public SawTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/SpikeTrap.cs b/Scripts/Items/Traps/SpikeTrap.cs new file mode 100644 index 0000000..6fa8814 --- /dev/null +++ b/Scripts/Items/Traps/SpikeTrap.cs @@ -0,0 +1,150 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public enum SpikeTrapType + { + WestWall, + NorthWall, + WestFloor, + NorthFloor + } + + public class SpikeTrap : BaseTrap + { + [CommandProperty( AccessLevel.GameMaster )] + public SpikeTrapType Type + { + get + { + switch ( ItemID ) + { + case 4360: case 4361: case 4366: return SpikeTrapType.WestWall; + case 4379: case 4380: case 4385: return SpikeTrapType.NorthWall; + case 4506: case 4507: case 4511: return SpikeTrapType.WestFloor; + case 4512: case 4513: case 4517: return SpikeTrapType.NorthFloor; + } + + return SpikeTrapType.WestWall; + } + set + { + bool extended = this.Extended; + + ItemID = ( extended ? GetExtendedID( value ) : GetBaseID( value ) ); + } + } + + public bool Extended + { + get{ return ( ItemID == GetExtendedID( this.Type ) ); } + set + { + if ( value ) + ItemID = GetExtendedID( this.Type ); + else + ItemID = GetBaseID( this.Type ); + } + } + + public static int GetBaseID( SpikeTrapType type ) + { + switch ( type ) + { + case SpikeTrapType.WestWall: return 4360; + case SpikeTrapType.NorthWall: return 4379; + case SpikeTrapType.WestFloor: return 4506; + case SpikeTrapType.NorthFloor: return 4512; + } + + return 0; + } + + public static int GetExtendedID( SpikeTrapType type ) + { + return GetBaseID( type ) + GetExtendedOffset( type ); + } + + public static int GetExtendedOffset( SpikeTrapType type ) + { + switch ( type ) + { + case SpikeTrapType.WestWall: return 6; + case SpikeTrapType.NorthWall: return 6; + + case SpikeTrapType.WestFloor: return 5; + case SpikeTrapType.NorthFloor: return 5; + } + + return 0; + } + + [Constructable] + public SpikeTrap() : this( SpikeTrapType.WestFloor ) + { + } + + [Constructable] + public SpikeTrap( SpikeTrapType type ) : base( GetBaseID( type ) ) + { + } + + public override bool PassivelyTriggered{ get{ return false; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public override int PassiveTriggerRange{ get{ return 0; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.FromSeconds( 6.0 ); } } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + Effects.SendLocationEffect( Location, Map, GetBaseID( this.Type ) + 1, 18, 3, GetEffectHue(), 0 ); + Effects.PlaySound( Location, Map, 0x22C ); + + foreach ( Mobile mob in GetMobilesInRange( 0 ) ) + { + if ( mob.Alive && !mob.IsDeadBondedPet ) + Spells.SpellHelper.Damage( TimeSpan.FromTicks( 1 ), mob, mob, Utility.RandomMinMax( 1, 6 ) * 6 ); + } + + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerCallback( OnSpikeExtended ) ); + + from.LocalOverheadMessage( MessageType.Regular, 0x22, 500852 ); // You stepped onto a spike trap! + } + + public virtual void OnSpikeExtended() + { + Extended = true; + Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), new TimerCallback( OnSpikeRetracted ) ); + } + + public virtual void OnSpikeRetracted() + { + Extended = false; + Effects.SendLocationEffect( Location, Map, GetExtendedID( this.Type ) - 1, 6, 3, GetEffectHue(), 0 ); + } + + public SpikeTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + Extended = false; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Traps/StoneFaceTrap.cs b/Scripts/Items/Traps/StoneFaceTrap.cs new file mode 100644 index 0000000..9c54113 --- /dev/null +++ b/Scripts/Items/Traps/StoneFaceTrap.cs @@ -0,0 +1,163 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; + +namespace Server.Items +{ + public enum StoneFaceTrapType + { + NorthWestWall, + NorthWall, + WestWall + } + + public class StoneFaceTrap : BaseTrap + { + [CommandProperty( AccessLevel.GameMaster )] + public StoneFaceTrapType Type + { + get + { + switch ( ItemID ) + { + case 0x10F5: case 0x10F6: case 0x10F7: return StoneFaceTrapType.NorthWestWall; + case 0x10FC: case 0x10FD: case 0x10FE: return StoneFaceTrapType.NorthWall; + case 0x110F: case 0x1110: case 0x1111: return StoneFaceTrapType.WestWall; + } + + return StoneFaceTrapType.NorthWestWall; + } + set + { + bool breathing = this.Breathing; + + ItemID = ( breathing ? GetFireID( value ) : GetBaseID( value ) ); + } + } + + public bool Breathing + { + get{ return ( ItemID == GetFireID( this.Type ) ); } + set + { + if ( value ) + ItemID = GetFireID( this.Type ); + else + ItemID = GetBaseID( this.Type ); + } + } + + public static int GetBaseID( StoneFaceTrapType type ) + { + switch ( type ) + { + case StoneFaceTrapType.NorthWestWall: return 0x10F5; + case StoneFaceTrapType.NorthWall: return 0x10FC; + case StoneFaceTrapType.WestWall: return 0x110F; + } + + return 0; + } + + public static int GetFireID( StoneFaceTrapType type ) + { + switch ( type ) + { + case StoneFaceTrapType.NorthWestWall: return 0x10F7; + case StoneFaceTrapType.NorthWall: return 0x10FE; + case StoneFaceTrapType.WestWall: return 0x1111; + } + + return 0; + } + + [Constructable] + public StoneFaceTrap() : base( 0x10FC ) + { + Light = LightType.Circle225; + } + + public override bool PassivelyTriggered{ get{ return true; } } + public override TimeSpan PassiveTriggerDelay{ get{ return TimeSpan.Zero; } } + public override int PassiveTriggerRange{ get{ return 2; } } + public override TimeSpan ResetDelay{ get{ return TimeSpan.Zero; } } + + public override void OnTrigger( Mobile from ) + { + base.OnTrigger( from ); + + Effects.PlaySound( Location, Map, 0x359 ); + + Breathing = true; + + Timer.DelayCall( TimeSpan.FromSeconds( 2.0 ), new TimerCallback( FinishBreath ) ); + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerCallback( TriggerDamage ) ); + } + + public virtual void FinishBreath() + { + Breathing = false; + } + + public virtual void TriggerDamage() + { + foreach ( Mobile mob in GetMobilesInRange( 1 ) ) + { + if ( mob.Alive && !mob.IsDeadBondedPet && mob.AccessLevel == AccessLevel.Player ) + Spells.SpellHelper.Damage( TimeSpan.FromTicks( 1 ), mob, mob, Utility.Dice( 3, 15, 0 ) ); + } + } + + public StoneFaceTrap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + Breathing = false; + } + } + + public class StoneFaceTrapNoDamage : StoneFaceTrap + { + [Constructable] + public StoneFaceTrapNoDamage() + { + } + + public StoneFaceTrapNoDamage( Serial serial ) : base( serial ) + { + } + + public override void TriggerDamage() + { + // nothing.. + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Treasure/Loot.cs b/Scripts/Items/Treasure/Loot.cs new file mode 100644 index 0000000..afa7d78 --- /dev/null +++ b/Scripts/Items/Treasure/Loot.cs @@ -0,0 +1,630 @@ +using System; +using System.IO; +using System.Reflection; +using Server; +using Server.Items; + +namespace Server +{ + public class Loot + { + #region List definitions + + private static Type[] m_WeaponTypes = new Type[] + { + typeof( Axe ), typeof( BattleAxe ), typeof( DoubleAxe ), + typeof( GreatAxe ), typeof( Hatchet ), typeof( LargeBattleAxe ), + typeof( TwoHandedAxe ), typeof( WarAxe ), typeof( Club ), + typeof( Mace ), typeof( Maul ), typeof( WarHammer ), + typeof( WarMace ), typeof( Bardiche ), typeof( Halberd ), + typeof( Spear ), typeof( Rapier ), typeof( Pitchfork ), + typeof( WarFork ), typeof( BlackStaff ), typeof( GnarledStaff ), + typeof( QuarterStaff ), typeof( Broadsword ), typeof( Cutlass ), + typeof( Katana ), typeof( Kryss ), typeof( Longsword ), + typeof( Scimitar ), typeof( VikingSword ), typeof( Pickaxe ), + typeof( HammerPick ), typeof( ButcherKnife ), typeof( Cleaver ), + typeof( Dagger ), typeof( SkinningKnife ), typeof( ShepherdsCrook ), + typeof( Scythe ), typeof( Pike ), typeof( Whip ) + }; + + public static Type[] WeaponTypes{ get{ return m_WeaponTypes; } } + + private static Type[] m_RangedWeaponTypes = new Type[] + { + typeof( Bow ), typeof( Crossbow ), typeof( HeavyCrossbow ) + }; + + public static Type[] RangedWeaponTypes{ get{ return m_RangedWeaponTypes; } } + + private static Type[] m_ArmorTypes = new Type[] + { + typeof( BoneArms ), typeof( BoneChest ), typeof( BoneGloves ), + typeof( BoneLegs ), typeof( BoneHelm ), typeof( ChainChest ), + typeof( ChainLegs ), typeof( ChainCoif ), typeof( Bascinet ), + typeof( CloseHelm ), typeof( Helmet ), typeof( NorseHelm ), + typeof( OrcHelm ), typeof( FemaleLeatherChest ), typeof( LeatherArms ), + typeof( LeatherBustierArms ), typeof( LeatherChest ), typeof( LeatherGloves ), + typeof( LeatherGorget ), typeof( LeatherLegs ), typeof( LeatherShorts ), + typeof( LeatherSkirt ), typeof( LeatherCap ), typeof( FemalePlateChest ), + typeof( PlateArms ), typeof( PlateChest ), typeof( PlateGloves ), + typeof( PlateGorget ), typeof( PlateHelm ), typeof( PlateLegs ), + typeof( RingmailArms ), typeof( RingmailChest ), typeof( RingmailGloves ), + typeof( RingmailLegs ), typeof( FemaleStuddedChest ), typeof( StuddedArms ), + typeof( StuddedBustierArms ), typeof( StuddedChest ), typeof( StuddedGloves ), + typeof( StuddedGorget ), typeof( StuddedLegs ) + }; + + public static Type[] ArmorTypes{ get{ return m_ArmorTypes; } } + + private static Type[] m_ShieldTypes = new Type[] + { + typeof( BronzeShield ), typeof( Buckler ), typeof( HeaterShield ), + typeof( MetalShield ), typeof( MetalKiteShield ), typeof( WoodenKiteShield ), + typeof( WoodenShield ), typeof( ChaosShield ), typeof( OrderShield ) + }; + + public static Type[] ShieldTypes{ get{ return m_ShieldTypes; } } + + private static Type[] m_GemTypes = new Type[] + { + typeof( Amber ), typeof( Amethyst ), typeof( Citrine ), + typeof( Diamond ), typeof( Emerald ), typeof( Ruby ), + typeof( Sapphire ), typeof( StarSapphire ), typeof( Tourmaline ) + }; + + public static Type[] GemTypes{ get{ return m_GemTypes; } } + + private static Type[] m_JewelryTypes = new Type[] + { + typeof( GoldRing ), typeof( GoldBracelet ), + typeof( SilverRing ), typeof( SilverBracelet ) + }; + + public static Type[] JewelryTypes{ get{ return m_JewelryTypes; } } + + private static Type[] m_RegTypes = new Type[] + { + typeof( BlackPearl ), typeof( Bloodmoss ), typeof( Garlic ), + typeof( Ginseng ), typeof( MandrakeRoot ), typeof( Nightshade ), + typeof( SulfurousAsh ), typeof( SpidersSilk ) + }; + + public static Type[] RegTypes{ get{ return m_RegTypes; } } + + private static Type[] m_LowPotionTypes = new Type[] + { + typeof( LesserHealPotion ), typeof( LesserCurePotion ), typeof( LesserPoisonPotion ), + typeof( RefreshPotion ), typeof( StrengthPotion ), typeof( AgilityPotion ), + typeof( LesserExplosionPotion ), typeof( NightSightPotion ) + }; + + public static Type[] LowPotionTypes{ get{ return m_LowPotionTypes; } } + + private static Type[] m_MedPotionTypes = new Type[] + { + typeof( HealPotion ), typeof( PoisonPotion ), typeof( CurePotion ), + typeof( ExplosionPotion ), typeof( GreaterAgilityPotion ), typeof( GreaterStrengthPotion ), + typeof( TotalRefreshPotion ) + }; + + public static Type[] MedPotionTypes{ get{ return m_MedPotionTypes; } } + + private static Type[] m_HighPotionTypes = new Type[] + { + typeof( GreaterCurePotion ), typeof( GreaterExplosionPotion ), typeof( GreaterHealPotion ), + typeof( GreaterCurePotion ), typeof( GreaterExplosionPotion ), typeof( GreaterHealPotion ), + typeof( GreaterPoisonPotion ), typeof( DeadlyPoisonPotion ) + }; + + public static Type[] HighPotionTypes{ get{ return m_HighPotionTypes; } } + + private static Type[] m_InstrumentTypes = new Type[] + { + typeof( Drums ), typeof( Harp ), typeof( LapHarp ), + typeof( Lute ), typeof( Tambourine ), typeof( TambourineTassel ), + typeof( Horn ), typeof( Flute ), typeof( Pipes ) + }; + + public static Type[] InstrumentTypes{ get{ return m_InstrumentTypes; } } + + private static Type[] m_RegularScrollTypes = new Type[] + { + typeof( ReactiveArmorScroll ), typeof( ClumsyScroll ), typeof( CreateFoodScroll ), typeof( FeeblemindScroll ), + typeof( HealScroll ), typeof( MagicArrowScroll ), typeof( NightSightScroll ), typeof( WeakenScroll ), + typeof( AgilityScroll ), typeof( CunningScroll ), typeof( CureScroll ), typeof( HarmScroll ), + typeof( MagicTrapScroll ), typeof( MagicUnTrapScroll ), typeof( ProtectionScroll ), typeof( StrengthScroll ), + typeof( BlessScroll ), typeof( FireballScroll ), typeof( MagicLockScroll ), typeof( PoisonScroll ), + typeof( TelekinisisScroll ), typeof( TeleportScroll ), typeof( UnlockScroll ), typeof( WallOfStoneScroll ), + typeof( ArchCureScroll ), typeof( ArchProtectionScroll ), typeof( CurseScroll ), typeof( FireFieldScroll ), + typeof( GreaterHealScroll ), typeof( LightningScroll ), typeof( ManaDrainScroll ), typeof( RecallScroll ), + typeof( BladeSpiritsScroll ), typeof( DispelFieldScroll ), typeof( IncognitoScroll ), typeof( MagicReflectScroll ), + typeof( MindBlastScroll ), typeof( ParalyzeScroll ), typeof( PoisonFieldScroll ), typeof( SummonCreatureScroll ), + typeof( DispelScroll ), typeof( EnergyBoltScroll ), typeof( ExplosionScroll ), typeof( InvisibilityScroll ), + typeof( MarkScroll ), typeof( MassCurseScroll ), typeof( ParalyzeFieldScroll ), typeof( RevealScroll ), + typeof( ChainLightningScroll ), typeof( EnergyFieldScroll ), typeof( FlamestrikeScroll ), typeof( GateTravelScroll ), + typeof( ManaVampireScroll ), typeof( MassDispelScroll ), typeof( MeteorSwarmScroll ), typeof( PolymorphScroll ), + typeof( EarthquakeScroll ), typeof( EnergyVortexScroll ), typeof( ResurrectionScroll ), typeof( SummonAirElementalScroll ), + typeof( SummonDaemonScroll ), typeof( SummonEarthElementalScroll ), typeof( SummonFireElementalScroll ), typeof( SummonWaterElementalScroll ) + }; + + public static Type[] RegularScrollTypes{ get{ return m_RegularScrollTypes; } } + + private static Type[] m_WandTypes = new Type[] + { + typeof( ClumsyWand ), typeof( FeebleWand ), typeof( FireballWand ), + typeof( GreaterHealWand ), typeof( HarmWand ), typeof( HealWand ), + typeof( LightningWand ), typeof( MagicArrowWand ), typeof( RecallWand ), + typeof( ManaDrainWand ), typeof( WeaknessWand ), typeof( MarkWand ), + typeof( RemoveTrapWand ), typeof( UnlockWand ), + + typeof( ClumsyWand ), typeof( FeebleWand ), typeof( FireballWand ), + typeof( GreaterHealWand ), typeof( HarmWand ), typeof( HealWand ), + typeof( LightningWand ), typeof( MagicArrowWand ), typeof( RecallWand ), + typeof( ManaDrainWand ), typeof( WeaknessWand ), typeof( MarkWand ), + typeof( RemoveTrapWand ), typeof( UnlockWand ), + + typeof( ResurrectionWand ) + }; + + public static Type[] WandTypes{ get{ return m_WandTypes; } } + + private static Type[] m_ClothingTypes = new Type[] + { + typeof( Bonnet ), typeof( Cap ), typeof( FeatheredHat ), + typeof( FloppyHat ), typeof( JesterHat ), typeof( Surcoat ), + typeof( SkullCap ), typeof( StrawHat ), typeof( TallStrawHat ), + typeof( TricorneHat ), typeof( WideBrimHat ), typeof( WizardsHat ), + typeof( Bandana ), typeof( BearMask ), typeof( DeerMask ), + typeof( Hood ), + + typeof( Boots ), typeof( Shoes ), typeof( ThighBoots ), + typeof( Sandals ), + typeof( Boots ), typeof( Shoes ), typeof( ThighBoots ), + typeof( Sandals ), + typeof( Boots ), typeof( Shoes ), typeof( ThighBoots ), + typeof( Sandals ), + + typeof( ShortPants ), typeof( LongPants ), typeof( Kilt ), + typeof( Skirt ), + typeof( ShortPants ), typeof( LongPants ), typeof( Kilt ), + typeof( Skirt ), + typeof( ShortPants ), typeof( LongPants ), typeof( Kilt ), + typeof( Skirt ), + + typeof( Doublet ), typeof( JesterSuit ), typeof( Tunic ), + typeof( Shirt ), typeof( FancyShirt ), + typeof( Doublet ), typeof( JesterSuit ), typeof( Tunic ), + typeof( Shirt ), typeof( FancyShirt ), + typeof( Doublet ), typeof( JesterSuit ), typeof( Tunic ), + typeof( Shirt ), typeof( FancyShirt ), + + typeof( FancyDress ), typeof( PlainDress ), typeof( Robe ), + typeof( Robe ), typeof( Cloak ), typeof( BodySash ), + typeof( FancyDress ), typeof( PlainDress ), typeof( Robe ), + typeof( Robe ), typeof( Cloak ), typeof( BodySash ), + typeof( FullApron ), typeof( HalfApron ) + }; + + public static Type[] ClothingTypes{ get{ return m_ClothingTypes; } } + + private static Type[] m_BookTypes = new Type[] + { + typeof( BlueBook ), + typeof( BrownBook ), + typeof( Codex ), + typeof( Diary ), + typeof( Grimoire ), + typeof( Journal ), + typeof( Lexicon ), + typeof( RedBook ), + typeof( Spellbook ), + typeof( TanBook ), + typeof( Tome ) + }; + + public static Type[] BookTypes{ get{ return m_BookTypes; } } + + private static Type[] m_ToolTypes = new Type[] + { + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + typeof( Shovel ), + + typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), typeof( FletcherTools ), + typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), typeof( MapmakersPen ), + typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), typeof( MortarPestle ), + typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), typeof( ScribesPen ), + typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), typeof( SewingKit ), + typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), typeof( TinkerTools ), + + typeof( Skillet ), + typeof( FlourSifter ), + typeof( RollingPin ), + typeof( Skillet ), + typeof( FlourSifter ), + typeof( RollingPin ), + typeof( Skillet ), + typeof( FlourSifter ), + typeof( RollingPin ), + typeof( Skillet ), + typeof( FlourSifter ), + + typeof( SmoothingPlane ), + typeof( DovetailSaw ), + typeof( DrawKnife ), + typeof( Froe ), + typeof( Hammer ), + typeof( Inshave ), + typeof( JointingPlane ), + typeof( MouldingPlane ), + typeof( Nails ), + typeof( Saw ), + typeof( Scorp ), + + typeof( Tongs ), + typeof( SledgeHammer ), + typeof( SmithHammer ), + typeof( Tongs ), + typeof( SledgeHammer ), + typeof( SmithHammer ), + typeof( Tongs ), + typeof( SledgeHammer ), + typeof( SmithHammer ), + typeof( Tongs ), + typeof( SmithHammer ) + }; + + public static Type[] ToolTypes{ get{ return m_ToolTypes; } } + + private static Type[] m_CraftTypes = new Type[] + { + typeof( Beeswax ), + typeof( BlankScroll ), + typeof( BoltOfCloth ), + typeof( Bottle ), + typeof( Cloth ), + typeof( DarkYarn ), + typeof( Feather ), + typeof( IronIngot ), + typeof( Leather ), + typeof( LightYarn ), + typeof( Shaft ), + typeof( SpoolOfThread ), + typeof( UncutCloth ), + typeof( WoodBoard ) + }; + + public static Type[] CraftTypes{ get{ return m_CraftTypes; } } + + private static Type[] m_MiscTypes = new Type[] + { + typeof( Arrow ), typeof( Arrow ), typeof( Arrow ), typeof( Arrow ), + typeof( BigBag ), typeof( Backpack ), typeof( Backpack ), typeof( Backpack ), + typeof( BigBag ), typeof( Bag ), typeof( Bag ), typeof( Bag ), + typeof( Bandage ), typeof( Bandage ), typeof( Bandage ), typeof( Bandage ), + typeof( BedRolled ), typeof( BedRolled ), typeof( BedRolled ), typeof( BedRolled ), + typeof( Bolt ), typeof( Bolt ), typeof( Bolt ), typeof( Bolt ), + typeof( Sausage ), typeof( FrenchBread ), typeof( BreadLoaf ), typeof( Ribs ), + typeof( Candle ), typeof( Candle ), typeof( Candle ), typeof( Candle ), + typeof( SlabOfBacon ), typeof( CheeseWedge ), typeof( FishSteak ), typeof( CheeseWheel ), + typeof( Ham ), typeof( CookedBird ), + typeof( FishingPole ), typeof( FishingPole ), typeof( FishingPole ), typeof( FishingPole ), + typeof( Kindling ), typeof( Kindling ), typeof( Kindling ), typeof( Kindling ), + typeof( Lantern ), typeof( Lantern ), typeof( Lantern ), typeof( Lantern ), + typeof( Lockpick ), typeof( Lockpick ), typeof( Lockpick ), typeof( Lockpick ), + typeof( OilCloth ), typeof( OilCloth ), typeof( OilCloth ), typeof( OilCloth ), + typeof( BigBag ), typeof( Pouch ), typeof( Pouch ), typeof( Pouch ), + typeof( Scissors ), typeof( Scissors ), typeof( Scissors ), typeof( Scissors ), + typeof( Sextant ), typeof( Sextant ), typeof( Sextant ), typeof( Sextant ), + typeof( SmallCrate ), typeof( SmallCrate ), typeof( SmallCrate ), typeof( SmallCrate ), + typeof( Spyglass ), typeof( Spyglass ), typeof( Spyglass ), typeof( Spyglass ), + typeof( Torch ), typeof( Torch ), typeof( Torch ), typeof( Torch ), + typeof( WoodenBox ), typeof( WoodenBox ), typeof( WoodenBox ), typeof( WoodenBox ), + typeof( Axle ), + typeof( AxleGears ), + typeof( ClockFrame ), + typeof( ClockParts ), + typeof( ClockRight ), + typeof( ClockLeft ), + typeof( Gears ), + typeof( Hinge ), + typeof( SextantParts ), + typeof( Springs ), + typeof( Fork ), + typeof( Spoon ), + typeof( Knife ), + typeof( Plate ), + typeof( CeramicMug ), + typeof( PewterMug ), + typeof( Goblet ), + typeof( Glass ), + typeof( GlassBottle ), + typeof( GlassMug ), + typeof( Pitcher ) + }; + + public static Type[] MiscTypes{ get{ return m_MiscTypes; } } + + private static Type[] m_Rares = new Type[] + { + typeof( BottleOfAcid ), typeof( SkeletonKeys ) + }; + + public static Type[] Rares{ get{ return m_Rares; } } + +// ------------------------------------------------------------------------------------------------ + + private static Type[] m_CategoryA = new Type[] + { + typeof( IronBrazierShort ), typeof( IronBrazier ), typeof( IronBrazierStand ), + typeof( IronCandle ), typeof( IronCandelabra ), typeof( IronCandelabraStand ) + }; + + public static Type[] CategoryA{ get{ return m_CategoryA; } } + + private static Type[] m_CategoryB = new Type[] + { + typeof( TrophyFish ), typeof( TrophyKodiak ), typeof( TrophyGargoyle ), + typeof( TrophyBear ), typeof( TrophyLizard ), typeof( TrophyMinotaur ), + typeof( TrophyDeer ), typeof( TrophyLizardman ), typeof( TrophyGoblin ), + typeof( TrophyApe ), typeof( TrophyNightmare ), typeof( TrophyMinotaurLord ), + typeof( TrophyOrc ), typeof( TrophyOgre ), typeof( TrophyDragon ), + typeof( TrophyPolarBear ), typeof( TrophyRatman ), typeof( TrophyDaemon ), + typeof( TrophyTroll ), typeof( TrophyEttin ), typeof( TrophyBoard ), + typeof( TrophySnowBear ), typeof( TrophyOgreLord ), typeof( TrophyBoard ), + typeof( TrophyCaveBear ), typeof( TrophyCyclops ), typeof( TrophyBoard ) + }; + + public static Type[] CategoryB{ get{ return m_CategoryB; } } + +// ------------------------------------------------------------------------------------------------ + + #endregion + + #region Accessors + + public static BaseWand RandomWand() + { + return Construct( m_WandTypes ) as BaseWand; + } + + public static BaseClothing RandomClothing() + { + return Construct( m_ClothingTypes ) as BaseClothing; + } + + public static BaseWeapon RandomRangedWeapon() + { + return Construct( m_RangedWeaponTypes ) as BaseWeapon; + } + + public static BaseWeapon RandomWeapon() + { + return Construct( m_WeaponTypes ) as BaseWeapon; + } + + public static BaseJewel RandomJewelry() + { + return Construct( m_JewelryTypes ) as BaseJewel; + } + + public static BaseArmor RandomArmor() + { + return Construct( m_ArmorTypes ) as BaseArmor; + } + + public static BaseShield RandomShield() + { + return Construct( m_ShieldTypes ) as BaseShield; + } + + public static BaseArmor RandomArmorOrShield() + { + return Construct( m_ArmorTypes, m_ShieldTypes ) as BaseArmor; + } + + public static Item RandomArmorOrShieldOrWeapon() + { + return Construct( m_WeaponTypes, m_RangedWeaponTypes, m_ArmorTypes, m_ShieldTypes ); + } + + public static Item RandomLowPotion() + { + return Construct( m_LowPotionTypes ); + } + + public static Item RandomMedPotion() + { + return Construct( m_MedPotionTypes ); + } + + public static Item RandomHighPotion() + { + return Construct( m_HighPotionTypes ); + } + + public static Item RandomTool() + { + return Construct( m_ToolTypes ); + } + + public static Item RandomBook() + { + return Construct( m_BookTypes ); + } + + public static Item RandomRare() + { + return Construct( m_Rares ); + } + + public static Item RandomProvisions() + { + Item item = null; + + switch ( Utility.Random( 32 ) ) + { + case 0: + case 1: item = new Bandage(); break; + case 2: + case 3: item = new Arrow(); break; + case 4: + case 5: item = new Bolt(); break; + case 6: + case 7: item = new Candle(); break; + case 8: + case 9: item = new Torch(); break; + case 10: + case 11: item = new Lantern(); break; + case 12: item = new Sausage(); break; + case 13: item = new FrenchBread(); break; + case 14: item = new BreadLoaf(); break; + case 15: item = new Ribs(); break; + case 16: item = new SlabOfBacon(); break; + case 17: item = new CheeseWedge(); break; + case 18: item = new FishSteak(); break; + case 19: item = new CheeseWheel(); break; + case 20: item = new Ham(); break; + case 21: item = new CookedBird(); break; + case 22: + case 23: + case 24: item = new BeverageBottle( BeverageType.Ale ); break; + case 25: + case 26: + case 27: item = new BeverageBottle( BeverageType.Wine ); break; + case 28: + case 29: item = new BeverageBottle( BeverageType.Liquor ); break; + case 30: + case 31: item = new Jug( BeverageType.Cider ); break; + } + + DungeonFood( item ); + + return item; + } + + public static Item RandomCraft() + { + return Construct( m_CraftTypes ); + } + + public static Item RandomMisc() + { + Item item = Construct( m_MiscTypes ); + DungeonFood( item ); + return item; + } + + public static Item RandomOdd() + { + Item item = null; + + switch ( Utility.Random( 2 ) ) + { + case 0: item = Construct( m_CategoryA ); break; + case 1: item = Construct( m_CategoryB ); break; + } + + return item; + } + + public static Item RandomGem() + { + return Construct( m_GemTypes ); + } + + public static Item RandomReagent() + { + return Construct( m_RegTypes ); + } + + public static BaseInstrument RandomInstrument() + { + return Construct( m_InstrumentTypes ) as BaseInstrument; + } + + public static SpellScroll RandomScroll( int minIndex, int maxIndex, SpellbookType type ) + { + Type[] types = m_RegularScrollTypes; + + return Construct( types, Utility.RandomMinMax( minIndex, maxIndex ) ) as SpellScroll; + } + + #endregion + + public static void DungeonFood( Item item ) + { + if ( item is Sausage ){ item.Name = "smoked sausage"; item.Hue = 0x4A2; } + else if ( item is FrenchBread ){ item.Name = "stale bread"; item.Hue = 0x4A2; } + else if ( item is BreadLoaf ){ item.Name = "stale bread"; item.Hue = 0x4A2; } + else if ( item is Ribs ){ item.Name = "smoked ribs"; item.Hue = 0x4A2; item.ItemID = 0x9F1; } + else if ( item is SlabOfBacon ){ item.Name = "smoked bacon"; item.Hue = 0x4A2; } + else if ( item is CheeseWedge ){ item.Name = "moldy cheese"; item.Hue = 0x49A; } + else if ( item is FishSteak ){ item.Name = "smoked fish"; item.Hue = 0x96D; } + else if ( item is CheeseWheel ){ item.Name = "moldy cheese"; item.Hue = 0x49A; } + else if ( item is Ham ){ item.Name = "smoked ham"; item.Hue = 0x49C; item.ItemID = 0x96F; } + else if ( item is CookedBird ){ item.Name = "smoked bird"; item.Hue = 0x49E; } + } + + #region Construction methods + public static Item Construct( Type type ) + { + try + { + return Activator.CreateInstance( type ) as Item; + } + catch + { + return null; + } + } + + public static Item Construct( Type[] types ) + { + if ( types.Length > 0 ) + return Construct( types, Utility.Random( types.Length ) ); + + return null; + } + + public static Item Construct( Type[] types, int index ) + { + if ( index >= 0 && index < types.Length ) + return Construct( types[index] ); + + return null; + } + + public static Item Construct( params Type[][] types ) + { + int totalLength = 0; + + for ( int i = 0; i < types.Length; ++i ) + totalLength += types[i].Length; + + if ( totalLength > 0 ) + { + int index = Utility.Random( totalLength ); + + for ( int i = 0; i < types.Length; ++i ) + { + if ( index >= 0 && index < types[i].Length ) + return Construct( types[i][index] ); + + index -= types[i].Length; + } + } + + return null; + } + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Items/Treasure/LootChest.cs b/Scripts/Items/Treasure/LootChest.cs new file mode 100644 index 0000000..662f9cf --- /dev/null +++ b/Scripts/Items/Treasure/LootChest.cs @@ -0,0 +1,373 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.ContextMenus; +using Server.Engines.PartySystem; +using Server.Gumps; +using Server.Multis; +using Server.Network; + +namespace Server.Items +{ + public class LootChest : LockableContainer + { + private int m_Level; + private int m_Category; + private DateTime m_ResetTime; + private Mobile m_LastLooter; + + [CommandProperty( AccessLevel.GameMaster )] + public int Level{ get{ return m_Level; } set{ m_Level = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int Category{ get{ return m_Category; } set{ m_Category = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile LastLooter{ get{ return m_LastLooter; } set{ m_LastLooter = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime ResetTime{ get{ return m_ResetTime; } } + + [Constructable] + public LootChest() : base( 0xE40 ) + { + m_ResetTime = DateTime.Now; + Movable = false; + m_Level = 1; + m_Category = 1; + + /* Level 1 Level 2 Level 3 Thief 4 + ------------+-------------------- --------------------- ------------------- --------------------- -------- + Type |ID ID Hue ID ID Hue ID ID Hue ID ID Hue Category + ------------+-------------------- --------------------- ------------------- --------------------- -------- + Crate |0xE3E 0xE3F 0 0xE3C 0xE3D 0 0x645 0x646 0 0x0E99 0x0E9A 0 1 + Wood Chest |0x52D 0x52E 0x96D 0x5ED 0x5EE 0x96D 0xE42 0xE43 0 0x481 0x488 0 2 + Metal Chest |0x9AB 0xE7C 0 0xE54 0xE55 0 0xE40 0xE41 0 0xE52 0xE53 0x4A5 3 + -------------------------------------------------------------------------------------------------------------------- + */ + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel > AccessLevel.Player || from.InRange( this.GetWorldLocation(), 2 ) ) + { + if ( !(this is SunkenShip) ) + Setup(); + + Fill( from ); + Open( from ); + } + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + if ( m_Level > 3 ) + { + int steal = m_Category * 33; + if ( from.CheckSkill( SkillName.Stealing, (steal-38), (steal+11) ) ) + { + from.SendMessage( "Your nimble fingers help you steal the item." ); + return base.CheckLift( from, item, ref reject ); + } + else + { + from.SendMessage( "You try to steal the item, but you were not nimble enough so you lost it!" ); + item.Delete(); + return false; + } + } + + return base.CheckLift( from, item, ref reject ); + } + + public override bool OnDragDropInto( Mobile from, Item item, Point3D p ) + { + if ( m_Level > 3 ) + { + from.SendMessage( "You try to put the item in there, but somehow lose it!" ); + item.Delete(); + return false; + } + + return base.OnDragDropInto( from, item, p ); + } + + public override bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage ) + { + if ( m_Level > 3 ) + { + from.SendMessage( "You try to put the item in there, but somehow lose it!" ); + dropped.Delete(); + return false; + } + + return base.TryDropItem( from, dropped, sendFullMessage ); + } + + public bool NeverLock() + { + if ( m_Category == 1 && m_Level < 4 ) + return true; + + return false; + } + + public void Setup() + { + if ( DateTime.Now >= m_ResetTime ) + { + m_ResetTime = DateTime.Now + TimeSpan.FromMinutes( ((double)(Utility.RandomMinMax(45,60))) ); + + List o = new List(); + foreach( Item i in this.Items ) + { + o.Add(i); + } + foreach ( Item g in o ) + { + g.Delete(); + } + + Locked = false; + TrapType = TrapType.None; + TrapPower = 0; + TrapLevel = 0; + m_LastLooter = null; + + int i_Difficulty = ( m_Level * 18 ) + ( m_Category * 10 ); + + if ( Utility.RandomMinMax(1,100) < i_Difficulty && !NeverLock() ) + { + Locked = true; + RequiredSkill = i_Difficulty; + LockLevel = RequiredSkill - 10; + MaxLockLevel = RequiredSkill + 30; + } + + if ( Utility.RandomMinMax(1,100) < i_Difficulty ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: TrapType = TrapType.MagicTrap; break; + case 1: TrapType = TrapType.ExplosionTrap; break; + case 2: TrapType = TrapType.DartTrap; break; + case 3: TrapType = TrapType.PoisonTrap; break; + } + TrapPower = i_Difficulty; + TrapLevel = 0; + } + } + } + + public static int WepArmQuality( int level, int lvl, int cat ) + { + if ( Utility.Random(8) < ( lvl + cat ) ) + { + if ( level >= Utility.Random(1320) ) + return 6; + else if ( level >= Utility.Random(1100) ) + return 5; + else if ( level >= Utility.Random(880) ) + return 4; + else if ( level >= Utility.Random(660) ) + return 3; + else if ( level >= Utility.Random(440) ) + return 2; + } + + return 1; + } + + public static int PotionQuality( int level, int lvl, int cat ) + { + if ( Utility.Random(8) < ( lvl + cat ) ) + { + if ( level >= Utility.Random(660) ) + return 3; + else if ( level >= Utility.Random(440) ) + return 2; + } + + return 1; + } + + public static int ScrollQuality( int level, int lvl, int cat ) + { + int scroll = 24; + + if ( Utility.Random(8) < ( lvl + cat ) ) + { + if ( level >= Utility.Random(800) ) + scroll = 64; + else if ( level >= Utility.Random(400) ) + scroll = 56; + else if ( level >= Utility.Random(200) ) + scroll = 48; + else if ( level >= Utility.Random(100) ) + scroll = 40; + else if ( level >= Utility.Random(50) ) + scroll = 32; + } + + return scroll-1; + } + + public Item TreasureItem( int level ) + { + Item item = null; + + switch ( Utility.Random( 30 ) ) + { + case 0: + case 1: + int pot = PotionQuality( level, m_Level, m_Category ); + switch ( Utility.Random( pot ) ) + { + case 0: item = Loot.RandomLowPotion(); break; + case 1: item = Loot.RandomMedPotion(); break; + case 2: item = Loot.RandomHighPotion(); break; + } + break; + case 2: + case 3: + case 4: item = Loot.RandomTool(); break; + case 5: + case 6: + case 7: item = Loot.RandomMisc(); break; + case 8: + case 9: + case 10: item = Loot.RandomCraft(); + if ( item is Cloth ){ item.Hue = Utility.RandomHue(); item.ItemID = Utility.RandomList( 0x1766, 0x1768 ); } + else if ( item is BoltOfCloth ){ item.Hue = Utility.RandomHue(); item.ItemID = Utility.RandomList( 0xF95, 0xF96, 0xF97, 0xF98, 0xF99, 0xF9A, 0xF9B, 0xF9C ); } + break; + case 11: + case 12: + case 13: + case 14: + case 15: item = Loot.RandomProvisions(); break; + case 16: + case 17: item = Loot.RandomGem(); break; + case 18: + case 19: item = Loot.RandomReagent(); item.Amount = Utility.Random((int)(level/2))+5; break; + case 20: item = Loot.RandomWand(); break; + case 21: item = Loot.RandomClothing(); break; + case 22: item = Loot.RandomRangedWeapon(); break; + case 23: item = Loot.RandomWeapon(); break; + case 24: item = Loot.RandomJewelry(); break; + case 25: item = Loot.RandomArmor(); break; + case 26: item = Loot.RandomShield(); break; + case 27: item = Loot.RandomInstrument(); break; + case 28: + case 29: Loot.RandomScroll( 0, ScrollQuality( level, m_Level, m_Category ), SpellbookType.Regular ); break; + } + + return item; + } + + public void Fill( Mobile m ) + { + if ( m_LastLooter == null ) + { + int level = ( ( m_Level + m_Category ) * 10 ) + Server.SkillHandlers.Searching.TotalSearchSkill( m ); + int rank = m_Category + m_Level; + + /* *********** SEARCH SKILL PER TREASURE ********** + Box None Night Light Skill Skill+Ns-Lt + Lvl ------------------------------------------- + Cat 0 25 50 100 125 150 + --------------------------------------------------- + 2 20 45 70 120 145 170 + 3 30 55 80 130 155 180 + 4 40 65 90 140 165 190 + 5 50 75 100 150 175 200 + 6 60 85 110 160 185 210 + 7 70 95 120 170 195 220 + --------------------------------------------------- + */ + + m_LastLooter = m; + + // -------------------------------------------------------------------------------- + + int gold = level * Utility.RandomMinMax(5,10); + double w = gold * (Server.Misc.Settings.GoldCutRate() * .01); + gold = (int)w; + DropItem( new Gold( gold ) ); + + // -------------------------------------------------------------------------------- + + if ( Utility.Random(2000) < level ) + DropItem( new TreasureMap( Utility.RandomMinMax(1,m_Level), Map.Britannia ) ); + + // -------------------------------------------------------------------------------- + + int numberItems = (int)( Utility.RandomMinMax( rank, ((level / 20)+rank) ) ); + + for ( int i = 0; i < numberItems; ++i ) + { + Item item = TreasureItem( level ); + + if ( item != null ) + { + MakeMagical( item, level, m_Level, m_Category ); + DropItem( item ); + } + } + } + } + + public static void MakeMagical( Item item, int level, int lvl, int cat ) + { + if ( item != null ) + { + if ( item is BaseWeapon && !(item is BaseWand) ) + { + BaseWeapon weapon = (BaseWeapon)item; + + weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( WepArmQuality( level, lvl, cat ) ); + weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random( WepArmQuality( level, lvl, cat ) ); + weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random( WepArmQuality( level, lvl, cat ) ); + } + else if ( item is BaseArmor ) + { + BaseArmor armor = (BaseArmor)item; + + armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random( WepArmQuality( level, lvl, cat ) ); + armor.Durability = (ArmorDurabilityLevel)Utility.Random( WepArmQuality( level, lvl, cat ) ); + } + else if ( item is BaseClothing ) + { + BaseClothing cloth = (BaseClothing)item; + } + } + } + + public LootChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + writer.Write( m_LastLooter ); + writer.Write( (int) m_Level ); + writer.Write( (int) m_Category ); + writer.Write( m_ResetTime ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_LastLooter = reader.ReadMobile(); + m_Level = reader.ReadInt(); + m_Category = reader.ReadInt(); + m_ResetTime = reader.ReadDateTime(); + } + } +} diff --git a/Scripts/Items/Treasure/LootChests.cs b/Scripts/Items/Treasure/LootChests.cs new file mode 100644 index 0000000..98be6cc --- /dev/null +++ b/Scripts/Items/Treasure/LootChests.cs @@ -0,0 +1,350 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.ContextMenus; +using Server.Engines.PartySystem; +using Server.Gumps; +using Server.Multis; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0xE3E, 0xE3F )] + public class LootCrate1 : LootChest + { + [Constructable] + public LootCrate1() + { + Name = "crate"; + ItemID = 0xE3E; + Level = 1; + Category = 1; + } + + public LootCrate1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0xE3C, 0xE3D )] + public class LootCrate2 : LootChest + { + [Constructable] + public LootCrate2() + { + Name = "crate"; + ItemID = 0xE3C; + Level = 2; + Category = 1; + } + + public LootCrate2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0x645, 0x646 )] + public class LootCrate3 : LootChest + { + [Constructable] + public LootCrate3() + { + Name = "crate"; + ItemID = 0x645; + Level = 3; + Category = 1; + } + + public LootCrate3( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0x0E99, 0x0E9A )] + public class LootCrate4 : LootChest + { + [Constructable] + public LootCrate4() + { + Name = "crate"; + ItemID = 0x0E99; + Level = 4; + Category = 1; + } + + public LootCrate4( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0x52D, 0x52E )] + public class LootBox1 : LootChest + { + [Constructable] + public LootBox1() + { + Name = "wooden chest"; + ItemID = 0x52D; + Level = 1; + Category = 2; + Hue = 0x96D; + } + + public LootBox1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0x5ED, 0x5EE )] + public class LootBox2 : LootChest + { + [Constructable] + public LootBox2() + { + Name = "wooden chest"; + ItemID = 0x5ED; + Level = 2; + Category = 2; + Hue = 0x96D; + } + + public LootBox2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0xE42, 0xE43 )] + public class LootBox3 : LootChest + { + [Constructable] + public LootBox3() + { + Name = "wooden chest"; + ItemID = 0xE42; + Level = 3; + Category = 2; + } + + public LootBox3( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0x481, 0x488 )] + public class LootBox4 : LootChest + { + [Constructable] + public LootBox4() + { + Name = "wooden chest"; + ItemID = 0x481; + Level = 4; + Category = 2; + } + + public LootBox4( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0x9AB, 0xE7C )] + public class LootChest1 : LootChest + { + [Constructable] + public LootChest1() + { + Name = "metal chest"; + ItemID = 0x9AB; + Level = 1; + Category = 3; + } + + public LootChest1( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0xE54, 0xE55 )] + public class LootChest2 : LootChest + { + [Constructable] + public LootChest2() + { + Name = "metal chest"; + ItemID = 0xE54; + Level = 2; + Category = 3; + } + + public LootChest2( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0xE40, 0xE41 )] + public class LootChest3 : LootChest + { + [Constructable] + public LootChest3() + { + Name = "metal chest"; + ItemID = 0xE40; + Level = 3; + Category = 3; + } + + public LootChest3( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + [Flipable( 0xE52, 0xE53 )] + public class LootChest4 : LootChest + { + [Constructable] + public LootChest4() + { + Name = "metal chest"; + ItemID = 0xE52; + Level = 4; + Category = 3; + } + + public LootChest4( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Treasure/LootPack.cs b/Scripts/Items/Treasure/LootPack.cs new file mode 100644 index 0000000..696f72a --- /dev/null +++ b/Scripts/Items/Treasure/LootPack.cs @@ -0,0 +1,631 @@ +using System; +using System.Collections; +using Server; +using Server.Items; +using Server.Mobiles; +using System.Collections.Generic; + +namespace Server +{ + public class LootPack + { + private LootPackEntry[] m_Entries; + + public LootPack( LootPackEntry[] entries ) + { + m_Entries = entries; + } + + public void Generate( Mobile from, Container cont, bool spawning ) + { + if ( cont == null ) + return; + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + LootPackEntry entry = m_Entries[i]; + + bool shouldAdd = ( entry.Chance > Utility.Random( 10000 ) ); + + if ( !shouldAdd ) + continue; + + Item item = entry.Construct( from, spawning ); + + if ( item != null ) + { + if ( !item.Stackable || !cont.TryDropItem( from, item, false ) ) + cont.DropItem( item ); + } + } + } + + public static readonly LootPackItem[] Gold = new LootPackItem[] + { + new LootPackItem( typeof( Gold ), 1 ) + }; + + public static readonly LootPackItem[] Instruments = new LootPackItem[] + { + new LootPackItem( typeof( BaseInstrument ), 1 ) + }; + + public static readonly LootPackItem[] LowPotionItems = new LootPackItem[] + { + new LootPackItem( typeof( LesserHealPotion ), 1 ) + }; + + public static readonly LootPackItem[] MedPotionItems = new LootPackItem[] + { + new LootPackItem( typeof( HealPotion ), 1 ) + }; + + public static readonly LootPackItem[] HighPotionItems = new LootPackItem[] + { + new LootPackItem( typeof( GreaterHealPotion ), 1 ) + }; + + public static readonly LootPackItem[] LowScrollItems = new LootPackItem[] + { + new LootPackItem( typeof( ClumsyScroll ), 1 ) + }; + + public static readonly LootPackItem[] MedScrollItems = new LootPackItem[] + { + new LootPackItem( typeof( ArchCureScroll ), 1 ) + }; + + public static readonly LootPackItem[] HighScrollItems = new LootPackItem[] + { + new LootPackItem( typeof( SummonAirElementalScroll ), 1 ) + }; + + public static readonly LootPackItem[] GemItems = new LootPackItem[] + { + new LootPackItem( typeof( Amber ), 1 ) + }; + + public static readonly LootPackItem[] PotionItems = new LootPackItem[] + { + new LootPackItem( typeof( AgilityPotion ), 1 ), + new LootPackItem( typeof( StrengthPotion ), 1 ), + new LootPackItem( typeof( RefreshPotion ), 1 ), + new LootPackItem( typeof( LesserCurePotion ), 1 ), + new LootPackItem( typeof( LesserHealPotion ), 1 ), + new LootPackItem( typeof( LesserPoisonPotion ), 1 ) + }; + + #region Old Magic Items + public static readonly LootPackItem[] LootMagicItems = new LootPackItem[] + { + new LootPackItem( typeof( BaseJewel ), 1 ), + new LootPackItem( typeof( BaseArmor ), 4 ), + new LootPackItem( typeof( BaseWeapon ), 3 ), + new LootPackItem( typeof( BaseRanged ), 1 ), + new LootPackItem( typeof( BaseShield ), 1 ), + new LootPackItem( typeof( BaseClothing ), 1 ) + }; + #endregion + + #region definitions + public static readonly LootPack LootPoor = new LootPack( new LootPackEntry[] + { + new LootPackEntry( true, Gold, 100.00, "1d25" ), + new LootPackEntry( false, Instruments, 0.02, 1 ) + } ); + + public static readonly LootPack LootMeager = new LootPack( new LootPackEntry[] + { + new LootPackEntry( true, Gold, 100.00, "5d10+25" ), + new LootPackEntry( false, Instruments, 0.10, 1 ), + new LootPackEntry( false, LootMagicItems, 1.00, 1, 1, 0, 60 ), + new LootPackEntry( false, LootMagicItems, 0.20, 1, 1, 10, 70 ) + } ); + + public static readonly LootPack LootAverage = new LootPack( new LootPackEntry[] + { + new LootPackEntry( true, Gold, 100.00, "10d10+50" ), + new LootPackEntry( false, Instruments, 0.40, 1 ), + new LootPackEntry( false, LootMagicItems, 5.00, 1, 1, 20, 80 ), + new LootPackEntry( false, LootMagicItems, 2.00, 1, 1, 30, 90 ), + new LootPackEntry( false, LootMagicItems, 0.50, 1, 1, 40, 100 ) + } ); + + public static readonly LootPack LootRich = new LootPack( new LootPackEntry[] + { + new LootPackEntry( true, Gold, 100.00, "10d10+250" ), + new LootPackEntry( false, Instruments, 1.00, 1 ), + new LootPackEntry( false, LootMagicItems, 20.00, 1, 1, 60, 100 ), + new LootPackEntry( false, LootMagicItems, 10.00, 1, 1, 65, 100 ), + new LootPackEntry( false, LootMagicItems, 1.00, 1, 1, 70, 100 ) + } ); + + public static readonly LootPack LootFilthyRich = new LootPack( new LootPackEntry[] + { + new LootPackEntry( true, Gold, 100.00, "2d125+400" ), + new LootPackEntry( false, Instruments, 2.00, 1 ), + new LootPackEntry( false, LootMagicItems, 33.00, 1, 1, 50, 100 ), + new LootPackEntry( false, LootMagicItems, 33.00, 1, 1, 60, 100 ), + new LootPackEntry( false, LootMagicItems, 20.00, 1, 1, 70, 100 ), + new LootPackEntry( false, LootMagicItems, 5.00, 1, 1, 80, 100 ) + } ); + + public static readonly LootPack LootUltraRich = new LootPack( new LootPackEntry[] + { + new LootPackEntry( true, Gold, 100.00, "5d100+500" ), + new LootPackEntry( false, Instruments, 2.00, 1 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 40, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 40, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 50, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 50, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 60, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 60, 100 ) + } ); + + public static readonly LootPack LootSuperBoss = new LootPack( new LootPackEntry[] + { + new LootPackEntry( true, Gold, 100.00, "5d100+500" ), + new LootPackEntry( false, Instruments, 2.00, 1 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 40, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 40, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 40, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 50, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 50, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 50, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 60, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 60, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 60, 100 ), + new LootPackEntry( false, LootMagicItems, 100.00, 1, 1, 70, 100 ) + } ); + #endregion + + #region Generic accessors + public static LootPack Poor{ get{ return LootPoor; } } + public static LootPack Meager{ get{ return LootMeager; } } + public static LootPack Average{ get{ return LootAverage; } } + public static LootPack Rich{ get{ return LootRich; } } + public static LootPack FilthyRich{ get{ return LootFilthyRich; } } + public static LootPack UltraRich{ get{ return LootUltraRich; } } + public static LootPack SuperBoss{ get{ return LootSuperBoss; } } + #endregion + + public static readonly LootPack LowPotions = new LootPack( new LootPackEntry[] + { + new LootPackEntry( false, LowPotionItems, 100.00, 1 ) + } ); + + public static readonly LootPack MedPotions = new LootPack( new LootPackEntry[] + { + new LootPackEntry( false, MedPotionItems, 100.00, 1 ) + } ); + + public static readonly LootPack HighPotions = new LootPack( new LootPackEntry[] + { + new LootPackEntry( false, HighPotionItems, 100.00, 1 ) + } ); + + public static readonly LootPack LowScrolls = new LootPack( new LootPackEntry[] + { + new LootPackEntry( false, LowScrollItems, 100.00, 1 ) + } ); + + public static readonly LootPack MedScrolls = new LootPack( new LootPackEntry[] + { + new LootPackEntry( false, MedScrollItems, 100.00, 1 ) + } ); + + public static readonly LootPack HighScrolls = new LootPack( new LootPackEntry[] + { + new LootPackEntry( false, HighScrollItems, 100.00, 1 ) + } ); + + public static readonly LootPack Gems = new LootPack( new LootPackEntry[] + { + new LootPackEntry( false, GemItems, 100.00, 1 ) + } ); + } + + public class LootPackEntry + { + private int m_Chance; + private LootPackDice m_Quantity; + + private int m_MaxProps, m_MinIntensity, m_MaxIntensity; + + private bool m_AtSpawnTime; + + private LootPackItem[] m_Items; + + public int Chance + { + get{ return m_Chance; } + set{ m_Chance = value; } + } + + public LootPackDice Quantity + { + get{ return m_Quantity; } + set{ m_Quantity = value; } + } + + public int MaxProps + { + get{ return m_MaxProps; } + set{ m_MaxProps = value; } + } + + public int MinIntensity + { + get{ return m_MinIntensity; } + set{ m_MinIntensity = value; } + } + + public int MaxIntensity + { + get{ return m_MaxIntensity; } + set{ m_MaxIntensity = value; } + } + + public LootPackItem[] Items + { + get{ return m_Items; } + set{ m_Items = value; } + } + + public Item Construct( Mobile from, bool spawning ) + { + if ( m_AtSpawnTime != spawning ) + return null; + + int totalChance = 0; + + for ( int i = 0; i < m_Items.Length; ++i ) + totalChance += m_Items[i].Chance; + + int rnd = Utility.Random( totalChance ); + + for ( int i = 0; i < m_Items.Length; ++i ) + { + LootPackItem item = m_Items[i]; + + if ( rnd < item.Chance ) + return Mutate( from, item.Construct() ); + + rnd -= item.Chance; + } + + return null; + } + + private int GetRandomOldBonus() + { + int rnd = Utility.RandomMinMax( m_MinIntensity, m_MaxIntensity ); + + if ( 50 > rnd ) + return 1; + else + rnd -= 50; + + if ( 25 > rnd ) + return 2; + else + rnd -= 25; + + if ( 14 > rnd ) + return 3; + else + rnd -= 14; + + if ( 8 > rnd ) + return 4; + + return 5; + } + + public Item Mutate( Mobile from, Item item ) + { + if ( item != null ) + { + if ( item is BaseWeapon && 1 > Utility.Random( 100 ) ) + { + item.Delete(); + item = new FireHorn(); + return item; + } + + if ( item is BaseWeapon || item is BaseArmor || item is BaseJewel || item is BaseHat ) + { + if ( item is BaseWeapon ) + { + BaseWeapon weapon = (BaseWeapon)item; + + if ( 80 > Utility.Random( 100 ) ) + weapon.AccuracyLevel = (WeaponAccuracyLevel)GetRandomOldBonus(); + + if ( 60 > Utility.Random( 100 ) ) + weapon.DamageLevel = (WeaponDamageLevel)GetRandomOldBonus(); + + if ( 40 > Utility.Random( 100 ) ) + weapon.DurabilityLevel = (WeaponDurabilityLevel)GetRandomOldBonus(); + + if ( 5 > Utility.Random( 100 ) ) + weapon.Slayer = SlayerGroup.GetLootSlayerType(); + + if ( from != null && weapon.AccuracyLevel == 0 && weapon.DamageLevel == 0 && weapon.DurabilityLevel == 0 && weapon.Slayer == SlayerName.None && 5 > Utility.Random( 100 ) ) + weapon.Slayer = SlayerGroup.GetLootSlayerType(); + } + else if ( item is BaseArmor ) + { + BaseArmor armor = (BaseArmor)item; + + if ( 80 > Utility.Random( 100 ) ) + armor.ProtectionLevel = (ArmorProtectionLevel)GetRandomOldBonus(); + + if ( 40 > Utility.Random( 100 ) ) + armor.Durability = (ArmorDurabilityLevel)GetRandomOldBonus(); + } + } + else if ( item is BaseInstrument ) + { + SlayerName slayer = SlayerGroup.GetLootSlayerType(); + + if ( slayer == SlayerName.None ) + { + item.Delete(); + return null; + } + + BaseInstrument instr = (BaseInstrument)item; + + instr.Quality = InstrumentQuality.Regular; + instr.Slayer = slayer; + } + + if ( item.Stackable ) + item.Amount = m_Quantity.Roll(); + } + + return item; + } + + public LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, string quantity ) : this( atSpawnTime, items, chance, new LootPackDice( quantity ), 0, 0, 0 ) + { + } + + public LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, int quantity ) : this( atSpawnTime, items, chance, new LootPackDice( 0, 0, quantity ), 0, 0, 0 ) + { + } + + public LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, string quantity, int maxProps, int minIntensity, int maxIntensity ) : this( atSpawnTime, items, chance, new LootPackDice( quantity ), maxProps, minIntensity, maxIntensity ) + { + } + + public LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, int quantity, int maxProps, int minIntensity, int maxIntensity ) : this( atSpawnTime, items, chance, new LootPackDice( 0, 0, quantity ), maxProps, minIntensity, maxIntensity ) + { + } + + public LootPackEntry( bool atSpawnTime, LootPackItem[] items, double chance, LootPackDice quantity, int maxProps, int minIntensity, int maxIntensity ) + { + m_AtSpawnTime = atSpawnTime; + m_Items = items; + m_Chance = (int)(100 * chance); + m_Quantity = quantity; + m_MaxProps = maxProps; + m_MinIntensity = minIntensity; + m_MaxIntensity = maxIntensity; + } + + public int GetBonusProperties() + { + int p0=0, p1=0, p2=0, p3=0, p4=0, p5=0; + + switch ( m_MaxProps ) + { + case 1: p0= 3; p1= 1; break; + case 2: p0= 6; p1= 3; p2= 1; break; + case 3: p0=10; p1= 6; p2= 3; p3= 1; break; + case 4: p0=16; p1=12; p2= 6; p3= 5; p4=1; break; + case 5: p0=30; p1=25; p2=20; p3=15; p4=9; p5=1; break; + } + + int pc = p0+p1+p2+p3+p4+p5; + + int rnd = Utility.Random( pc ); + + if ( rnd < p5 ) + return 5; + else + rnd -= p5; + + if ( rnd < p4 ) + return 4; + else + rnd -= p4; + + if ( rnd < p3 ) + return 3; + else + rnd -= p3; + + if ( rnd < p2 ) + return 2; + else + rnd -= p2; + + if ( rnd < p1 ) + return 1; + + return 0; + } + } + + public class LootPackItem + { + private Type m_Type; + private int m_Chance; + + public Type Type + { + get{ return m_Type; } + set{ m_Type = value; } + } + + public int Chance + { + get{ return m_Chance; } + set{ m_Chance = value; } + } + + private static Type[] m_BlankTypes = new Type[]{ typeof( BlankScroll ) }; + + public static Item RandomScroll( int index, int minCircle, int maxCircle ) + { + --minCircle; + --maxCircle; + + int scrollCount = ((maxCircle - minCircle) + 1) * 8; + + if ( index == 0 ) + scrollCount += m_BlankTypes.Length; + + int rnd = Utility.Random( scrollCount ); + + if ( index == 0 && rnd < m_BlankTypes.Length ) + return Loot.Construct( m_BlankTypes ); + else if ( index == 0 ) + rnd -= m_BlankTypes.Length; + + return Loot.RandomScroll( minCircle * 8, (maxCircle * 8) + 7, SpellbookType.Regular ); + } + + public Item Construct() + { + try + { + Item item; + + if ( m_Type == typeof( BaseRanged ) ) + item = Loot.RandomRangedWeapon(); + else if ( m_Type == typeof( BaseWeapon ) ) + item = Loot.RandomWeapon(); + else if ( m_Type == typeof( BaseArmor ) ) + item = Loot.RandomArmor(); + else if ( m_Type == typeof( BaseClothing ) ) + item = Loot.RandomClothing(); + else if ( m_Type == typeof( BaseShield ) ) + item = Loot.RandomShield(); + else if ( m_Type == typeof( BaseJewel ) ) + item = Loot.RandomJewelry(); + else if ( m_Type == typeof( BaseInstrument ) ) + item = Loot.RandomInstrument(); + else if ( m_Type == typeof( Amber ) ) // gem + item = Loot.RandomGem(); + else if ( m_Type == typeof( LesserHealPotion ) ) // low potions + item = Loot.RandomLowPotion(); + else if ( m_Type == typeof( HealPotion ) ) // med potions + item = Loot.RandomMedPotion(); + else if ( m_Type == typeof( GreaterHealPotion ) ) // high potions + item = Loot.RandomHighPotion(); + else if ( m_Type == typeof( ClumsyScroll ) ) // low scroll + item = RandomScroll( 0, 1, 3 ); + else if ( m_Type == typeof( ArchCureScroll ) ) // med scroll + item = RandomScroll( 1, 4, 7 ); + else if ( m_Type == typeof( SummonAirElementalScroll ) ) // high scroll + item = RandomScroll( 2, 8, 8 ); + else + item = Activator.CreateInstance( m_Type ) as Item; + + return item; + } + catch + { + } + + return null; + } + + public LootPackItem( Type type, int chance ) + { + m_Type = type; + m_Chance = chance; + } + } + + public class LootPackDice + { + private int m_Count, m_Sides, m_Bonus; + + public int Count + { + get{ return m_Count; } + set{ m_Count = value; } + } + + public int Sides + { + get{ return m_Sides; } + set{ m_Sides = value; } + } + + public int Bonus + { + get{ return m_Bonus; } + set{ m_Bonus = value; } + } + + public int Roll() + { + int v = m_Bonus; + double w; + + for ( int i = 0; i < m_Count; ++i ) + v += Utility.Random( 1, m_Sides ); + + w = v * (Server.Misc.Settings.GoldCutRate() * .01); + + return (int)w; + } + + public LootPackDice( string str ) + { + int start = 0; + int index = str.IndexOf( 'd', start ); + + if ( index < start ) + return; + + m_Count = Utility.ToInt32( str.Substring( start, index-start ) ); + + bool negative; + + start = index + 1; + index = str.IndexOf( '+', start ); + + if ( negative = (index < start) ) + index = str.IndexOf( '-', start ); + + if ( index < start ) + index = str.Length; + + m_Sides = Utility.ToInt32( str.Substring( start, index-start ) ); + + if ( index == str.Length ) + return; + + start = index + 1; + index = str.Length; + + m_Bonus = Utility.ToInt32( str.Substring( start, index-start ) ); + + if ( negative ) + m_Bonus *= -1; + } + + public LootPackDice( int count, int sides, int bonus ) + { + m_Count = count; + m_Sides = sides; + m_Bonus = bonus; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Treasure/OtherChests.cs b/Scripts/Items/Treasure/OtherChests.cs new file mode 100644 index 0000000..1b22ac2 --- /dev/null +++ b/Scripts/Items/Treasure/OtherChests.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using Server.Multis; +using Server.Mobiles; +using Server.Network; +using Server.ContextMenus; + +namespace Server.Items +{ + [DynamicFliping] + [Flipable( 0x088E, 0x088F )] + public class SunkenChest : LockableContainer + { + [Constructable] + public SunkenChest() : base( 0x088E ) + { + Name = "sunken chest"; + } + + public SunkenChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + [DynamicFliping] + [Flipable( 0x088C, 0x088D )] + public class AncientChest : LockableContainer + { + [Constructable] + public AncientChest() : base( 0x088C ) + { + Name = "ancient sunken chest"; + } + + public AncientChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Treasure/SunkenShip.cs b/Scripts/Items/Treasure/SunkenShip.cs new file mode 100644 index 0000000..22092f8 --- /dev/null +++ b/Scripts/Items/Treasure/SunkenShip.cs @@ -0,0 +1,74 @@ +using System; +using Server; + +namespace Server.Items +{ + [Furniture] + public class SunkenShip : LootChest + { + [Constructable] + public SunkenShip() + { + Weight = -2.0; + Name = "shipwreck"; + ItemID = Utility.RandomList( 0x48F, 0x490 ); + Level = Utility.RandomMinMax(1,3); + Category = Utility.RandomMinMax(1,3); + } + + public override void Open( Mobile from ) + { + Timer.DelayCall( TimeSpan.FromSeconds( 60.0 ), new TimerCallback( Delete ) ); + Weight = 5; + base.Open( from ); + } + + public override void OnDelete() + { + Effects.PlaySound( Location, Map, 0x026 ); + + int x = Location.X; + int y = Location.Y; + int z = Location.Z; + + Point3D p0 = new Point3D( x, y-1, z ); + Point3D p1 = new Point3D( x, y, z ); + Point3D p2 = new Point3D( x, y+1, z ); + Point3D p3 = new Point3D( x-1, y-1, z ); + Point3D p4 = new Point3D( x-1, y, z ); + Point3D p5 = new Point3D( x-1, y+1, z ); + Point3D p6 = new Point3D( x+1, y-1, z ); + Point3D p7 = new Point3D( x+1, y, z ); + Point3D p8 = new Point3D( x+1, y+1, z ); + + Effects.SendLocationEffect( p0, Map, 0x352D, 16 ); + Effects.SendLocationEffect( p1, Map, 0x352D, 16 ); + Effects.SendLocationEffect( p2, Map, 0x352D, 16 ); + Effects.SendLocationEffect( p3, Map, 0x352D, 16 ); + Effects.SendLocationEffect( p4, Map, 0x352D, 16 ); + Effects.SendLocationEffect( p5, Map, 0x352D, 16 ); + Effects.SendLocationEffect( p6, Map, 0x352D, 16 ); + Effects.SendLocationEffect( p7, Map, 0x352D, 16 ); + Effects.SendLocationEffect( p8, Map, 0x352D, 16 ); + } + + public SunkenShip( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Weight < 10 ) + Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), new TimerCallback( Delete ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Treasure/TreasureMapChest.cs b/Scripts/Items/Treasure/TreasureMapChest.cs new file mode 100644 index 0000000..eae9405 --- /dev/null +++ b/Scripts/Items/Treasure/TreasureMapChest.cs @@ -0,0 +1,426 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.ContextMenus; +using Server.Engines.PartySystem; +using Server.Gumps; +using Server.Multis; +using Server.Network; + +namespace Server.Items +{ + public class TreasureMapChest : LockableContainer + { + public override int LabelNumber{ get{ return 3000541; } } + + private int m_Level; + private DateTime m_DeleteTime; + private Timer m_Timer; + private Mobile m_Owner; + private bool m_Temporary; + + private List m_Guardians; + + [CommandProperty( AccessLevel.GameMaster )] + public int Level{ get{ return m_Level; } set{ m_Level = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Owner{ get{ return m_Owner; } set{ m_Owner = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime DeleteTime{ get{ return m_DeleteTime; } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Temporary{ get{ return m_Temporary; } set{ m_Temporary = value; } } + + public List Guardians { get { return m_Guardians; } } + + [Constructable] + public TreasureMapChest( int level ) : this( null, level, false ) + { + } + + public TreasureMapChest( Mobile owner, int level, bool temporary ) : base( 0xE40 ) + { + m_Owner = owner; + m_Level = level; + m_DeleteTime = DateTime.Now + TimeSpan.FromHours( 3.0 ); + + m_Temporary = temporary; + m_Guardians = new List(); + + m_Timer = new DeleteTimer( this, m_DeleteTime ); + m_Timer.Start(); + + Fill( this, level ); + } + + public static void Fill( LockableContainer cont, int level ) + { + cont.Movable = false; + cont.Locked = true; + int numberItems; + + if ( level == 0 ) + { + cont.LockLevel = 0; // Can't be unlocked + + cont.DropItem( new Gold( Utility.RandomMinMax( 50, 100 ) ) ); + + if ( Utility.RandomDouble() < 0.75 ) + cont.DropItem( new TreasureMap( 0, Map.Britannia ) ); + } + else + { + cont.TrapType = TrapType.ExplosionTrap; + cont.TrapPower = level * 25; + cont.TrapLevel = level; + + switch ( level ) + { + case 1: cont.RequiredSkill = 36; break; + case 2: cont.RequiredSkill = 76; break; + case 3: cont.RequiredSkill = 84; break; + case 4: cont.RequiredSkill = 92; break; + case 5: cont.RequiredSkill = 100; break; + case 6: cont.RequiredSkill = 100; break; + } + + cont.LockLevel = cont.RequiredSkill - 10; + cont.MaxLockLevel = cont.RequiredSkill + 40; + cont.DropItem( new Gold( level * 1000 ) ); + + for ( int i = 0; i < level * 5; ++i ) + cont.DropItem( Loot.RandomScroll( 0, 63, SpellbookType.Regular ) ); + + numberItems = level * 6; + + for ( int i = 0; i < numberItems; ++i ) + { + Item item = Loot.RandomArmorOrShieldOrWeapon(); + + if ( item is BaseWeapon ) + { + BaseWeapon weapon = (BaseWeapon)item; + + weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( 6 ); + weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random( 6 ); + weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random( 6 ); + + cont.DropItem( item ); + } + else if ( item is BaseArmor ) + { + BaseArmor armor = (BaseArmor)item; + + armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random( 6 ); + armor.Durability = (ArmorDurabilityLevel)Utility.Random( 6 ); + + cont.DropItem( item ); + } + else + { + cont.DropItem( item ); + } + } + } + + int reagents; + if ( level == 0 ) + reagents = 12; + else + reagents = level * 3; + + for ( int i = 0; i < reagents; i++ ) + { + Item item = Loot.RandomReagent(); + item.Amount = Utility.RandomMinMax( 40, 60 ); + cont.DropItem( item ); + } + + int gems; + if ( level == 0 ) + gems = 2; + else + gems = level * 3; + + for ( int i = 0; i < gems; i++ ) + { + Item item = Loot.RandomGem(); + cont.DropItem( item ); + } + } + + public override bool CheckLocked( Mobile from ) + { + if ( !this.Locked ) + return false; + + if ( this.Level == 0 && from.AccessLevel < AccessLevel.GameMaster ) + { + foreach ( Mobile m in this.Guardians ) + { + if ( m.Alive ) + { + from.SendLocalizedMessage( 1046448 ); // You must first kill the guardians before you may open this chest. + return true; + } + } + + LockPick( from ); + return false; + } + else + { + return base.CheckLocked( from ); + } + } + + private List m_Lifted = new List(); + + private bool CheckLoot( Mobile m, bool criminalAction ) + { + if ( m_Temporary ) + return false; + + if ( m.AccessLevel >= AccessLevel.GameMaster || m_Owner == null || m == m_Owner ) + return true; + + Party p = Party.Get( m_Owner ); + + if ( p != null && p.Contains( m ) ) + return true; + + Map map = this.Map; + + if ( map != null && (map.Rules & MapRules.HarmfulRestrictions) == 0 ) + { + if ( criminalAction ) + m.CriminalAction( true ); + else + m.SendLocalizedMessage( 1010630 ); // Taking someone else's treasure is a criminal offense! + + return true; + } + + m.SendLocalizedMessage( 1010631 ); // You did not discover this chest! + return false; + } + + public override bool IsDecoContainer + { + get{ return false; } + } + + public override bool CheckItemUse( Mobile from, Item item ) + { + return CheckLoot( from, item != this ) && base.CheckItemUse( from, item ); + } + + public override bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + return CheckLoot( from, true ) && base.CheckLift( from, item, ref reject ); + } + + public override void OnItemLifted( Mobile from, Item item ) + { + bool notYetLifted = !m_Lifted.Contains( item ); + + from.RevealingAction(); + + if ( notYetLifted ) + { + m_Lifted.Add( item ); + + if ( 0.1 >= Utility.RandomDouble() ) // 10% chance to spawn a new monster + TreasureMap.Spawn( m_Level, GetWorldLocation(), Map, from, false ); + } + + base.OnItemLifted( from, item ); + } + + public override bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight ) + { + if ( m.AccessLevel < AccessLevel.GameMaster ) + { + m.SendLocalizedMessage( 1048122, "", 0x8A5 ); // The chest refuses to be filled with treasure again. + return false; + } + + return base.CheckHold( m, item, message, checkItems, plusItems, plusWeight ); + } + + public TreasureMapChest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + writer.Write( m_Guardians, true ); + writer.Write( (bool) m_Temporary ); + + writer.Write( m_Owner ); + + writer.Write( (int) m_Level ); + writer.WriteDeltaTime( m_DeleteTime ); + writer.Write( m_Lifted, true ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + { + m_Guardians = reader.ReadStrongMobileList(); + m_Temporary = reader.ReadBool(); + + goto case 1; + } + case 1: + { + m_Owner = reader.ReadMobile(); + + goto case 0; + } + case 0: + { + m_Level = reader.ReadInt(); + m_DeleteTime = reader.ReadDeltaTime(); + m_Lifted = reader.ReadStrongItemList(); + + if ( version < 2 ) + m_Guardians = new List(); + + break; + } + } + + if ( !m_Temporary ) + { + m_Timer = new DeleteTimer( this, m_DeleteTime ); + m_Timer.Start(); + } + else + { + Delete(); + } + } + + public override void OnAfterDelete() + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + + base.OnAfterDelete(); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( from.Alive ) + list.Add( new RemoveEntry( from, this ) ); + } + + public void BeginRemove( Mobile from ) + { + if ( !from.Alive ) + return; + + from.CloseGump( typeof( RemoveGump ) ); + from.SendGump( new RemoveGump( from, this ) ); + } + + public void EndRemove( Mobile from ) + { + if ( Deleted || from != m_Owner || !from.InRange( GetWorldLocation(), 3 ) ) + return; + + from.SendLocalizedMessage( 1048124, "", 0x8A5 ); // The old, rusted chest crumbles when you hit it. + this.Delete(); + } + + private class RemoveGump : Gump + { + private Mobile m_From; + private TreasureMapChest m_Chest; + + public RemoveGump( Mobile from, TreasureMapChest chest ) : base( 15, 15 ) + { + m_From = from; + m_Chest = chest; + + Closable = false; + Disposable = false; + + AddPage( 0 ); + + AddBackground( 30, 0, 240, 240, 2620 ); + + AddHtmlLocalized( 45, 15, 200, 80, 1048125, 0xFFFFFF, false, false ); // When this treasure chest is removed, any items still inside of it will be lost. + AddHtmlLocalized( 45, 95, 200, 60, 1048126, 0xFFFFFF, false, false ); // Are you certain you're ready to remove this chest? + + AddButton( 40, 153, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 75, 155, 180, 40, 1048127, 0xFFFFFF, false, false ); // Remove the Treasure Chest + + AddButton( 40, 195, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 75, 197, 180, 35, 1006045, 0xFFFFFF, false, false ); // Cancel + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 1 ) + m_Chest.EndRemove( m_From ); + } + } + + private class RemoveEntry : ContextMenuEntry + { + private Mobile m_From; + private TreasureMapChest m_Chest; + + public RemoveEntry( Mobile from, TreasureMapChest chest ) : base( 6149, 3 ) + { + m_From = from; + m_Chest = chest; + + Enabled = ( from == chest.Owner ); + } + + public override void OnClick() + { + if ( m_Chest.Deleted || m_From != m_Chest.Owner || !m_From.CheckAlive() ) + return; + + m_Chest.BeginRemove( m_From ); + } + } + + private class DeleteTimer : Timer + { + private Item m_Item; + + public DeleteTimer( Item item, DateTime time ) : base( time - DateTime.Now ) + { + m_Item = item; + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + m_Item.Delete(); + } + } + } +} diff --git a/Scripts/Items/Wands/BaseWand.cs b/Scripts/Items/Wands/BaseWand.cs new file mode 100644 index 0000000..fe1532f --- /dev/null +++ b/Scripts/Items/Wands/BaseWand.cs @@ -0,0 +1,244 @@ +using System; +using System.Text; +using System.Collections; +using Server.Network; +using Server.Targeting; +using Server.Spells; + +namespace Server.Items +{ + public enum WandEffect + { + Clumsiness, + Healing, + Feeblemindedness, + Weakness, + MagicArrow, + Harming, + Fireball, + GreaterHealing, + Lightning, + ManaDraining, + Recall, + Mark, + RemoveTrap, + Unlock, + Resurrection + } + + public abstract class BaseWand : BaseBashing + { + public override int UOStrengthReq { get { return 0; } } + public override int UOMinDamage { get { return 2; } } + public override int UOMaxDamage { get { return 6; } } + public override int UOSpeed { get { return 35; } } + + public override int InitMinHits { get { return 31; } } + public override int InitMaxHits { get { return 110; } } + + private WandEffect m_WandEffect; + + public virtual TimeSpan GetUseDelay{ get{ return TimeSpan.FromSeconds( 4.0 ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public WandEffect Effect + { + get{ return m_WandEffect; } + set{ m_WandEffect = value; InvalidateProperties(); } + } + + public BaseWand( WandEffect effect, int minCharges, int maxCharges ) : base( Utility.RandomList( 0xDF2, 0xDF3, 0xDF4, 0xDF5 ) ) + { + Weight = 1.0; + Effect = effect; + m_Uses = Utility.RandomMinMax( minCharges, maxCharges ); + m_UsesMax = m_Uses; + } + + public void ConsumeCharge( Mobile from ) + { + ConsumeUses(); + + if ( m_Uses == 0 ) + { + from.SendLocalizedMessage( 1019073 ); // This item is out of charges. + Name = "useless wand"; + } + + ApplyDelayTo( from ); + } + + public BaseWand( Serial serial ) : base( serial ) + { + } + + public virtual void ApplyDelayTo( Mobile from ) + { + from.BeginAction( typeof( BaseWand ) ); + Timer.DelayCall( GetUseDelay, new TimerStateCallback( ReleaseWandLock_Callback ), from ); + } + + public virtual void ReleaseWandLock_Callback( object state ) + { + ((Mobile)state).EndAction( typeof( BaseWand ) ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.CanBeginAction( typeof( BaseWand ) ) ) + return; + + if ( Parent == from ) + { + if ( m_Uses > 0 ) + OnWandUse( from ); + else + from.SendLocalizedMessage( 1019073 ); // This item is out of charges. + } + else + { + from.SendLocalizedMessage( 502641 ); // You must equip this item to use it. + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + writer.Write( (int) m_WandEffect ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + m_WandEffect = (WandEffect)reader.ReadInt(); + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Uses > 0 && Server.Misc.Settings.DisplayInfo() ) + { + switch ( m_WandEffect ) + { + case WandEffect.Clumsiness: list.Add( 1017326, m_Uses.ToString() ); break; // clumsiness charges: ~1_val~ + case WandEffect.Healing: list.Add( 1017329, m_Uses.ToString() ); break; // healing charges: ~1_val~ + case WandEffect.Feeblemindedness: list.Add( 1017327, m_Uses.ToString() ); break; // feeblemind charges: ~1_val~ + case WandEffect.Weakness: list.Add( 1017328, m_Uses.ToString() ); break; // weakness charges: ~1_val~ + case WandEffect.MagicArrow: list.Add( 1060492, m_Uses.ToString() ); break; // magic arrow charges: ~1_val~ + case WandEffect.Harming: list.Add( 1017334, m_Uses.ToString() ); break; // harm charges: ~1_val~ + case WandEffect.Fireball: list.Add( 1060487, m_Uses.ToString() ); break; // fireball charges: ~1_val~ + case WandEffect.GreaterHealing: list.Add( 1017330, m_Uses.ToString() ); break; // greater healing charges: ~1_val~ + case WandEffect.Lightning: list.Add( 1060491, m_Uses.ToString() ); break; // lightning charges: ~1_val~ + case WandEffect.ManaDraining: list.Add( 1017339, m_Uses.ToString() ); break; // mana drain charges: ~1_val~ + case WandEffect.Recall: list.Add( 1017343, m_Uses.ToString() ); break; // recall charges: ~1_val~ + case WandEffect.Mark: list.Add( 1017344, m_Uses.ToString() ); break; // mark charges: ~1_val~ + case WandEffect.RemoveTrap: list.Add( 1017345, m_Uses.ToString() ); break; // remove trap charges: ~1_val~ + case WandEffect.Unlock: list.Add( 1017346, m_Uses.ToString() ); break; // unlock charges: ~1_val~ + case WandEffect.Resurrection: list.Add( 1017349, m_Uses.ToString() ); break; // resurrection charges: ~1_val~ + } + } + else if ( m_Uses > 0 ) + { + double usage = (double)m_Uses / (double)m_UsesMax; + + if ( usage > 0.95 ) + list.Add( 1063269 ); // Fully Charged + else if ( usage > 0.75 ) + list.Add( 1063270 ); // Mostly Charged + else if ( usage > 0.50 ) + list.Add( 1063271 ); // Partially Charged + else if ( usage > 0.25 ) + list.Add( 1063272 ); // Somewhat Charged + else if ( usage > 0.05 ) + list.Add( 1063273 ); // Barely Charged + else + list.Add( 1063274 ); // Almost Drained + } + } + + public override void OnSingleClick( Mobile from ) + { + ArrayList attrs = new ArrayList(); + + if ( DisplayLootType ) + { + if ( LootType == LootType.Blessed ) + attrs.Add( new EquipInfoAttribute( 1038021 ) ); // blessed + } + + int num = 0; + + switch ( m_WandEffect ) + { + case WandEffect.Clumsiness: num = 3002011; break; + case WandEffect.Healing: num = 3002014; break; + case WandEffect.Feeblemindedness: num = 3002013; break; + case WandEffect.Weakness: num = 3002018; break; + case WandEffect.MagicArrow: num = 3002015; break; + case WandEffect.Harming: num = 3002022; break; + case WandEffect.Fireball: num = 3002028; break; + case WandEffect.GreaterHealing: num = 3002039; break; + case WandEffect.Lightning: num = 3002040; break; + case WandEffect.ManaDraining: num = 3002041; break; + case WandEffect.Recall: num = 3002042; break; + case WandEffect.Mark: num = 3002055; break; + case WandEffect.RemoveTrap: num = 3002024; break; + case WandEffect.Unlock: num = 3002033; break; + case WandEffect.Resurrection: num = 3002069; break; + } + + if ( num > 0 ) + attrs.Add( new EquipInfoAttribute( num, m_Uses ) ); + + int number; + + if ( Name == null ) + { + number = 1017085; + } + else + { + this.LabelTo( from, Name ); + number = 1041000; + } + + if ( attrs.Count == 0 && Crafter == null && Name != null ) + return; + + EquipmentInfo eqInfo = new EquipmentInfo( number, Crafter, false, (EquipInfoAttribute[])attrs.ToArray( typeof( EquipInfoAttribute ) ) ); + + from.Send( new DisplayEquipmentInfo( this, eqInfo ) ); + } + + public void Cast( Spell spell ) + { + bool m = Movable; + + Movable = false; + spell.Cast(); + Movable = m; + } + + public virtual void OnWandUse( Mobile from ) + { + from.Target = new WandTarget( this ); + } + + public virtual void DoWandTarget( Mobile from, object o ) + { + if ( Deleted || m_Uses <= 0 || Parent != from || o is StaticTarget || o is LandTarget ) + return; + + if ( OnWandTarget( from, o ) ) + ConsumeCharge( from ); + } + + public virtual bool OnWandTarget( Mobile from, object o ) + { + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/ClumsyWand.cs b/Scripts/Items/Wands/ClumsyWand.cs new file mode 100644 index 0000000..96c556e --- /dev/null +++ b/Scripts/Items/Wands/ClumsyWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.First; +using Server.Targeting; + +namespace Server.Items +{ + public class ClumsyWand : BaseWand + { + [Constructable] + public ClumsyWand() : base( WandEffect.Clumsiness, 5, 30 ) + { + } + + public ClumsyWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new ClumsySpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/FeebleWand.cs b/Scripts/Items/Wands/FeebleWand.cs new file mode 100644 index 0000000..9418be6 --- /dev/null +++ b/Scripts/Items/Wands/FeebleWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.First; +using Server.Targeting; + +namespace Server.Items +{ + public class FeebleWand : BaseWand + { + [Constructable] + public FeebleWand() : base( WandEffect.Feeblemindedness, 5, 30 ) + { + } + + public FeebleWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new FeeblemindSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/FireballWand.cs b/Scripts/Items/Wands/FireballWand.cs new file mode 100644 index 0000000..d795367 --- /dev/null +++ b/Scripts/Items/Wands/FireballWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Third; +using Server.Targeting; + +namespace Server.Items +{ + public class FireballWand : BaseWand + { + [Constructable] + public FireballWand() : base( WandEffect.Fireball, 5, 15 ) + { + } + + public FireballWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new FireballSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/GreaterHealWand.cs b/Scripts/Items/Wands/GreaterHealWand.cs new file mode 100644 index 0000000..6c087d6 --- /dev/null +++ b/Scripts/Items/Wands/GreaterHealWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Fourth; +using Server.Targeting; + +namespace Server.Items +{ + public class GreaterHealWand : BaseWand + { + [Constructable] + public GreaterHealWand() : base( WandEffect.GreaterHealing, 1, 5 ) + { + } + + public GreaterHealWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new GreaterHealSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/HarmWand.cs b/Scripts/Items/Wands/HarmWand.cs new file mode 100644 index 0000000..cf00532 --- /dev/null +++ b/Scripts/Items/Wands/HarmWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Second; +using Server.Targeting; + +namespace Server.Items +{ + public class HarmWand : BaseWand + { + [Constructable] + public HarmWand() : base( WandEffect.Harming, 5, 30 ) + { + } + + public HarmWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new HarmSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/HealWand.cs b/Scripts/Items/Wands/HealWand.cs new file mode 100644 index 0000000..9a5fe35 --- /dev/null +++ b/Scripts/Items/Wands/HealWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.First; +using Server.Targeting; + +namespace Server.Items +{ + public class HealWand : BaseWand + { + [Constructable] + public HealWand() : base( WandEffect.Healing, 10, 25 ) + { + } + + public HealWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new HealSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/LightningWand.cs b/Scripts/Items/Wands/LightningWand.cs new file mode 100644 index 0000000..18cb3e3 --- /dev/null +++ b/Scripts/Items/Wands/LightningWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Fourth; +using Server.Targeting; + +namespace Server.Items +{ + public class LightningWand : BaseWand + { + [Constructable] + public LightningWand() : base( WandEffect.Lightning, 5, 20 ) + { + } + + public LightningWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new LightningSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/MagicArrowWand.cs b/Scripts/Items/Wands/MagicArrowWand.cs new file mode 100644 index 0000000..6b6af3f --- /dev/null +++ b/Scripts/Items/Wands/MagicArrowWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.First; +using Server.Targeting; + +namespace Server.Items +{ + public class MagicArrowWand : BaseWand + { + [Constructable] + public MagicArrowWand() : base( WandEffect.MagicArrow, 5, 30 ) + { + } + + public MagicArrowWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new MagicArrowSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/ManaDrainWand.cs b/Scripts/Items/Wands/ManaDrainWand.cs new file mode 100644 index 0000000..c27a3b7 --- /dev/null +++ b/Scripts/Items/Wands/ManaDrainWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Fourth; +using Server.Targeting; + +namespace Server.Items +{ + public class ManaDrainWand : BaseWand + { + [Constructable] + public ManaDrainWand() : base( WandEffect.ManaDraining, 5, 30 ) + { + } + + public ManaDrainWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new ManaDrainSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/MarkWand.cs b/Scripts/Items/Wands/MarkWand.cs new file mode 100644 index 0000000..e4b75b5 --- /dev/null +++ b/Scripts/Items/Wands/MarkWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Sixth; +using Server.Targeting; + +namespace Server.Items +{ + public class MarkWand : BaseWand + { + [Constructable] + public MarkWand() : base( WandEffect.Mark, 5, 30 ) + { + } + + public MarkWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new MarkSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/RecallWand.cs b/Scripts/Items/Wands/RecallWand.cs new file mode 100644 index 0000000..d6d17f6 --- /dev/null +++ b/Scripts/Items/Wands/RecallWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Fourth; +using Server.Targeting; + +namespace Server.Items +{ + public class RecallWand : BaseWand + { + [Constructable] + public RecallWand() : base( WandEffect.Recall, 5, 30 ) + { + } + + public RecallWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new RecallSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/RemoveTrapWand.cs b/Scripts/Items/Wands/RemoveTrapWand.cs new file mode 100644 index 0000000..8e9ec26 --- /dev/null +++ b/Scripts/Items/Wands/RemoveTrapWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Second; +using Server.Targeting; + +namespace Server.Items +{ + public class RemoveTrapWand : BaseWand + { + [Constructable] + public RemoveTrapWand() : base( WandEffect.RemoveTrap, 5, 30 ) + { + } + + public RemoveTrapWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new RemoveTrapSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/ResurrectionWand.cs b/Scripts/Items/Wands/ResurrectionWand.cs new file mode 100644 index 0000000..8c1ace1 --- /dev/null +++ b/Scripts/Items/Wands/ResurrectionWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Eighth; +using Server.Targeting; + +namespace Server.Items +{ + public class ResurrectionWand : BaseWand + { + [Constructable] + public ResurrectionWand() : base( WandEffect.Resurrection, 1, 5 ) + { + } + + public ResurrectionWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new ResurrectionSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/UnlockWand.cs b/Scripts/Items/Wands/UnlockWand.cs new file mode 100644 index 0000000..9939cf1 --- /dev/null +++ b/Scripts/Items/Wands/UnlockWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.Third; +using Server.Targeting; + +namespace Server.Items +{ + public class UnlockWand : BaseWand + { + [Constructable] + public UnlockWand() : base( WandEffect.Unlock, 5, 30 ) + { + } + + public UnlockWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new UnlockSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/WandTarget.cs b/Scripts/Items/Wands/WandTarget.cs new file mode 100644 index 0000000..29c35ac --- /dev/null +++ b/Scripts/Items/Wands/WandTarget.cs @@ -0,0 +1,26 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Targeting +{ + public class WandTarget : Target + { + private BaseWand m_Item; + + public WandTarget( BaseWand item ) : base( 6, false, TargetFlags.None ) + { + m_Item = item; + } + + private static int GetOffset( Mobile caster ) + { + return 5 + (int)(caster.Skills[SkillName.Magery].Value * 0.02 ); + } + + protected override void OnTarget( Mobile from, object targeted ) + { + m_Item.DoWandTarget( from, targeted ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Wands/WeaknessWand.cs b/Scripts/Items/Wands/WeaknessWand.cs new file mode 100644 index 0000000..b90b5ea --- /dev/null +++ b/Scripts/Items/Wands/WeaknessWand.cs @@ -0,0 +1,38 @@ +using System; +using Server; +using Server.Spells.First; +using Server.Targeting; + +namespace Server.Items +{ + public class WeaknessWand : BaseWand + { + [Constructable] + public WeaknessWand() : base( WandEffect.Weakness, 5, 30 ) + { + } + + public WeaknessWand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnWandUse( Mobile from ) + { + Cast( new WeakenSpell( from, this ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/Axe.cs b/Scripts/Items/Weapons/Axes/Axe.cs new file mode 100644 index 0000000..6aefe9c --- /dev/null +++ b/Scripts/Items/Weapons/Axes/Axe.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xF49, 0xF4a )] + public class Axe : BaseAxe + { + public override int UOStrengthReq{ get{ return 35; } } + public override int UOMinDamage{ get{ return 6; } } + public override int UOMaxDamage{ get{ return 33; } } + public override int UOSpeed{ get{ return 37; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 110; } } + + [Constructable] + public Axe() : base( 0xF49 ) + { + Weight = 4.0; + } + + public Axe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/BaseAxe.cs b/Scripts/Items/Weapons/Axes/BaseAxe.cs new file mode 100644 index 0000000..7c65e33 --- /dev/null +++ b/Scripts/Items/Weapons/Axes/BaseAxe.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Engines.Harvest; +using Server.ContextMenus; + +namespace Server.Items +{ + public interface IAxe + { + bool Axe( Mobile from, BaseAxe axe ); + } + + public abstract class BaseAxe : BaseMeleeWeapon + { + public override int DefHitSound{ get{ return 0x232; } } + public override int DefMissSound{ get{ return 0x23A; } } + + public override SkillName DefSkill{ get{ return SkillName.Swords; } } + public override WeaponType DefType{ get{ return WeaponType.Axe; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash2H; } } + + public virtual HarvestSystem HarvestSystem{ get{ return Lumberjacking.System; } } + + private int m_UsesRemaining; + private bool m_ShowUsesRemaining; + + [CommandProperty( AccessLevel.GameMaster )] + public int UsesRemaining + { + get { return m_UsesRemaining; } + set { m_UsesRemaining = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool ShowUsesRemaining + { + get { return m_ShowUsesRemaining; } + set { m_ShowUsesRemaining = value; InvalidateProperties(); } + } + + public virtual int GetUsesScalar() + { + if ( Quality == WeaponQuality.Exceptional ) + return 200; + + return 100; + } + + public override void UnscaleDurability() + { + base.UnscaleDurability(); + + int scale = GetUsesScalar(); + + m_UsesRemaining = ((m_UsesRemaining * 100) + (scale - 1)) / scale; + InvalidateProperties(); + } + + public override void ScaleDurability() + { + base.ScaleDurability(); + + int scale = GetUsesScalar(); + + m_UsesRemaining = ((m_UsesRemaining * scale) + 99) / 100; + InvalidateProperties(); + } + + public BaseAxe( int itemID ) : base( itemID ) + { + m_UsesRemaining = 150; + } + + public BaseAxe( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( HarvestSystem == null || Deleted ) + return; + + Point3D loc = this.GetWorldLocation(); + + if ( !from.InLOS( loc ) || !from.InRange( loc, 2 ) ) + { + from.LocalOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 1019045 ); // I can't reach that + return; + } + else if ( !this.IsAccessibleTo( from ) ) + { + this.PublicOverheadMessage( Server.Network.MessageType.Regular, 0x3E9, 1061637 ); // You are not allowed to access this. + return; + } + + if ( !(this.HarvestSystem is Mining) ) + from.SendLocalizedMessage( 1010018 ); // What do you want to use this item on? + + HarvestSystem.BeginHarvesting( from, this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + writer.Write( (bool) m_ShowUsesRemaining ); + + writer.Write( (int) m_UsesRemaining ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + { + m_ShowUsesRemaining = reader.ReadBool(); + goto case 1; + } + case 1: + { + m_UsesRemaining = reader.ReadInt(); + goto case 0; + } + case 0: + { + if ( m_UsesRemaining < 1 ) + m_UsesRemaining = 150; + + break; + } + } + } + + public override void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + base.OnHit( attacker, defender, damageBonus ); + + if ( (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && (attacker.Skills[SkillName.Tactics].Value / 400.0) >= Utility.RandomDouble() ) + { + StatMod mod = defender.GetStatMod( "Concussion" ); + + if ( mod == null ) + { + defender.SendMessage( "You receive a concussion blow!" ); + defender.AddStatMod( new StatMod( StatType.Int, "Concussion", -(defender.RawInt / 2), TimeSpan.FromSeconds( 30.0 ) ) ); + + attacker.SendMessage( "You deliver a concussion blow!" ); + attacker.PlaySound( 0x308 ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/BattleAxe.cs b/Scripts/Items/Weapons/Axes/BattleAxe.cs new file mode 100644 index 0000000..3333da6 --- /dev/null +++ b/Scripts/Items/Weapons/Axes/BattleAxe.cs @@ -0,0 +1,43 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xF47, 0xF48 )] + public class BattleAxe : BaseAxe + { + public override int UOStrengthReq{ get{ return 40; } } + public override int UOMinDamage{ get{ return 6; } } + public override int UOMaxDamage{ get{ return 38; } } + public override int UOSpeed{ get{ return 30; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + [Constructable] + public BattleAxe() : base( 0xF47 ) + { + Weight = 4.0; + Layer = Layer.TwoHanded; + } + + public BattleAxe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/DoubleAxe.cs b/Scripts/Items/Weapons/Axes/DoubleAxe.cs new file mode 100644 index 0000000..37f864a --- /dev/null +++ b/Scripts/Items/Weapons/Axes/DoubleAxe.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xf4b, 0xf4c )] + public class DoubleAxe : BaseAxe + { + public override int UOStrengthReq{ get{ return 45; } } + public override int UOMinDamage{ get{ return 5; } } + public override int UOMaxDamage{ get{ return 35; } } + public override int UOSpeed{ get{ return 37; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 110; } } + + [Constructable] + public DoubleAxe() : base( 0xF4B ) + { + Weight = 8.0; + } + + public DoubleAxe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/ExecutionersAxe.cs b/Scripts/Items/Weapons/Axes/ExecutionersAxe.cs new file mode 100644 index 0000000..2bc2af1 --- /dev/null +++ b/Scripts/Items/Weapons/Axes/ExecutionersAxe.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xf45, 0xf46 )] + public class GreatAxe : BaseAxe + { + public override int UOStrengthReq{ get{ return 35; } } + public override int UOMinDamage{ get{ return 6; } } + public override int UOMaxDamage{ get{ return 33; } } + public override int UOSpeed{ get{ return 37; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + [Constructable] + public GreatAxe() : base( 0xF45 ) + { + Weight = 8.0; + } + + public GreatAxe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/Hatchet.cs b/Scripts/Items/Weapons/Axes/Hatchet.cs new file mode 100644 index 0000000..c655dda --- /dev/null +++ b/Scripts/Items/Weapons/Axes/Hatchet.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xF43, 0xF44 )] + public class Hatchet : BaseAxe + { + public override int UOStrengthReq{ get{ return 15; } } + public override int UOMinDamage{ get{ return 2; } } + public override int UOMaxDamage{ get{ return 17; } } + public override int UOSpeed{ get{ return 40; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 80; } } + + [Constructable] + public Hatchet() : base( 0xF43 ) + { + Weight = 4.0; + } + + public Hatchet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/LargeBattleAxe.cs b/Scripts/Items/Weapons/Axes/LargeBattleAxe.cs new file mode 100644 index 0000000..f2eb3d5 --- /dev/null +++ b/Scripts/Items/Weapons/Axes/LargeBattleAxe.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0x13FB, 0x13FA )] + public class LargeBattleAxe : BaseAxe + { + public override int UOStrengthReq{ get{ return 40; } } + public override int UOMinDamage{ get{ return 6; } } + public override int UOMaxDamage{ get{ return 38; } } + public override int UOSpeed{ get{ return 30; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + [Constructable] + public LargeBattleAxe() : base( 0x13FB ) + { + Weight = 6.0; + } + + public LargeBattleAxe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/Pickaxe.cs b/Scripts/Items/Weapons/Axes/Pickaxe.cs new file mode 100644 index 0000000..1fcaf29 --- /dev/null +++ b/Scripts/Items/Weapons/Axes/Pickaxe.cs @@ -0,0 +1,50 @@ +using System; +using Server.Items; +using Server.Network; +using Server.Engines.Harvest; + +namespace Server.Items +{ + [FlipableAttribute( 0xE86, 0xE85 )] + public class Pickaxe : BaseAxe, IUsesRemaining + { + public override HarvestSystem HarvestSystem{ get{ return Mining.System; } } + + public override int UOStrengthReq{ get{ return 25; } } + public override int UOMinDamage{ get{ return 1; } } + public override int UOMaxDamage{ get{ return 15; } } + public override int UOSpeed{ get{ return 35; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 60; } } + + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash1H; } } + + [Constructable] + public Pickaxe() : base( 0xE86 ) + { + Weight = 11.0; + UsesRemaining = 50; + ShowUsesRemaining = true; + } + + public Pickaxe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + ShowUsesRemaining = true; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/TwoHandedAxe.cs b/Scripts/Items/Weapons/Axes/TwoHandedAxe.cs new file mode 100644 index 0000000..1b688b1 --- /dev/null +++ b/Scripts/Items/Weapons/Axes/TwoHandedAxe.cs @@ -0,0 +1,42 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0x1443, 0x1442 )] + public class TwoHandedAxe : BaseAxe + { + public override int UOStrengthReq{ get{ return 35; } } + public override int UOMinDamage{ get{ return 5; } } + public override int UOMaxDamage{ get{ return 39; } } + public override int UOSpeed{ get{ return 30; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 90; } } + + [Constructable] + public TwoHandedAxe() : base( 0x1443 ) + { + Weight = 8.0; + } + + public TwoHandedAxe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Axes/WarAxe.cs b/Scripts/Items/Weapons/Axes/WarAxe.cs new file mode 100644 index 0000000..314a1d9 --- /dev/null +++ b/Scripts/Items/Weapons/Axes/WarAxe.cs @@ -0,0 +1,52 @@ +using System; +using Server.Items; +using Server.Network; +using Server.Engines.Harvest; + +namespace Server.Items +{ + [FlipableAttribute( 0x13B0, 0x13AF )] + public class WarAxe : BaseAxe + { + public override int UOStrengthReq{ get{ return 35; } } + public override int UOMinDamage{ get{ return 9; } } + public override int UOMaxDamage{ get{ return 27; } } + public override int UOSpeed{ get{ return 40; } } + + public override int DefHitSound{ get{ return 0x233; } } + public override int DefMissSound{ get{ return 0x239; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 80; } } + + public override SkillName DefSkill{ get{ return SkillName.Bludgeoning; } } + public override WeaponType DefType{ get{ return WeaponType.Bashing; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Bash1H; } } + + public override HarvestSystem HarvestSystem{ get{ return null; } } + + [Constructable] + public WarAxe() : base( 0x13B0 ) + { + Weight = 8.0; + } + + public WarAxe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/BaseMeleeWeapon.cs b/Scripts/Items/Weapons/BaseMeleeWeapon.cs new file mode 100644 index 0000000..c0714cf --- /dev/null +++ b/Scripts/Items/Weapons/BaseMeleeWeapon.cs @@ -0,0 +1,60 @@ +using System; +using Server; + +namespace Server.Items +{ + public abstract class BaseMeleeWeapon : BaseWeapon + { + public BaseMeleeWeapon( int itemID ) : base( itemID ) + { + } + + public BaseMeleeWeapon( Serial serial ) : base( serial ) + { + } + + public override int AbsorbDamage( Mobile attacker, Mobile defender, int damage ) + { + damage = base.AbsorbDamage( attacker, defender, damage ); + + int absorb = defender.MeleeDamageAbsorb; + + if ( absorb > 0 ) + { + if ( absorb > damage ) + { + int react = damage / 5; + + if ( react <= 0 ) + react = 1; + + defender.MeleeDamageAbsorb -= damage; + damage = 0; + + attacker.Damage( react, defender ); + + attacker.PlaySound( 0x1F1 ); + attacker.FixedEffect( 0x374A, 10, 16 ); + } + else + { + defender.MeleeDamageAbsorb = 0; + defender.SendLocalizedMessage( 1005556 ); // Your reactive armor spell has been nullified. + DefensiveSpell.Nullify( defender ); + } + } + + return damage; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + } + } +} diff --git a/Scripts/Items/Weapons/BaseWeapon.cs b/Scripts/Items/Weapons/BaseWeapon.cs new file mode 100644 index 0000000..a3ab8e4 --- /dev/null +++ b/Scripts/Items/Weapons/BaseWeapon.cs @@ -0,0 +1,1866 @@ +using System; +using System.Text; +using System.Collections; +using Server.Network; +using Server.Targeting; +using Server.Mobiles; +using Server.Spells; +using Server.Engines.Craft; +using System.Collections.Generic; + +namespace Server.Items +{ + public interface ISlayer + { + SlayerName Slayer { get; set; } + SlayerName Slayer2 { get; set; } + } + + public abstract class BaseWeapon : Item, IWeapon, ICraftable, ISlayer, IDurability + { + /* Weapon internals work differently now (Mar 13 2003) + * + * The attributes defined below default to -1. + * If the value is -1, the corresponding virtual property is used. + * If not, the attribute value itself is used. Here's the list: + * - MinDamage + * - MaxDamage + * - Speed + * - HitSound + * - MissSound + * - StrRequirement, DexRequirement, IntRequirement + * - WeaponType + * - WeaponAnimation + * - MaxRange + */ + + #region Var declarations + + // Instance values. These values are unique to each weapon. + private WeaponDamageLevel m_DamageLevel; + private WeaponAccuracyLevel m_AccuracyLevel; + private WeaponDurabilityLevel m_DurabilityLevel; + private WeaponQuality m_Quality; + private Mobile m_Crafter; + private Poison m_Poison; + private int m_PoisonCharges; + private int m_Hits; + private int m_MaxHits; + private SlayerName m_Slayer; + private SlayerName m_Slayer2; + private SkillMod m_SkillMod, m_MageMod; + private CraftResource m_Resource; + private bool m_PlayerConstructed; + + // Overridable values. These values are provided to override the defaults which get defined in the individual weapon scripts. + private int m_StrReq, m_DexReq, m_IntReq; + private int m_MinDamage, m_MaxDamage; + private int m_HitSound, m_MissSound; + private float m_Speed; + private int m_MaxRange; + private SkillName m_Skill; + private WeaponType m_Type; + private WeaponAnimation m_Animation; + #endregion + + #region Virtual Properties + + public virtual int DefMaxRange{ get{ return 1; } } + public virtual int DefHitSound{ get{ return 0; } } + public virtual int DefMissSound{ get{ return 0; } } + public virtual SkillName DefSkill{ get{ return SkillName.Swords; } } + public virtual WeaponType DefType{ get{ return WeaponType.Slashing; } } + public virtual WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash1H; } } + + public virtual int UOStrengthReq{ get{ return 0; } } + public virtual int UODexterityReq{ get{ return 0; } } + public virtual int UOIntelligenceReq{ get{ return 0; } } + public virtual int UOMinDamage{ get{ return 0; } } + public virtual int UOMaxDamage{ get{ return 0; } } + public virtual int UOSpeed{ get{ return 0; } } + public virtual int UOMaxRange{ get{ return DefMaxRange; } } + public virtual int UOHitSound{ get{ return DefHitSound; } } + public virtual int UOMissSound{ get{ return DefMissSound; } } + public virtual SkillName UOSkill{ get{ return DefSkill; } } + public virtual WeaponType UOType{ get{ return DefType; } } + public virtual WeaponAnimation UOAnimation{ get{ return DefAnimation; } } + + public virtual int InitMinHits{ get{ return 0; } } + public virtual int InitMaxHits{ get{ return 0; } } + + public virtual SkillName AccuracySkill { get { return SkillName.Tactics; } } + #endregion + + #region Getters & Setters + + [CommandProperty( AccessLevel.GameMaster )] + public int HitPoints + { + get{ return m_Hits; } + set + { + if ( m_Hits == value ) + return; + + if ( value > m_MaxHits ) + value = m_MaxHits; + + m_Hits = value; + + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxHitPoints + { + get{ return m_MaxHits; } + set{ m_MaxHits = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int PoisonCharges + { + get{ return m_PoisonCharges; } + set{ m_PoisonCharges = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Poison Poison + { + get{ return m_Poison; } + set{ m_Poison = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public WeaponQuality Quality + { + get{ return m_Quality; } + set{ UnscaleDurability(); m_Quality = value; ScaleDurability(); InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Crafter + { + get{ return m_Crafter; } + set{ m_Crafter = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SlayerName Slayer + { + get{ return m_Slayer; } + set{ m_Slayer = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SlayerName Slayer2 + { + get { return m_Slayer2; } + set { m_Slayer2 = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public CraftResource Resource + { + get{ return m_Resource; } + set{ UnscaleDurability(); m_Resource = value; Hue = CraftResources.GetHue( m_Resource ); InvalidateProperties(); ScaleDurability(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public WeaponDamageLevel DamageLevel + { + get{ return m_DamageLevel; } + set{ m_DamageLevel = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public WeaponDurabilityLevel DurabilityLevel + { + get{ return m_DurabilityLevel; } + set{ UnscaleDurability(); m_DurabilityLevel = value; InvalidateProperties(); ScaleDurability(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool PlayerConstructed + { + get{ return m_PlayerConstructed; } + set{ m_PlayerConstructed = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxRange + { + get{ return ( m_MaxRange == -1 ? UOMaxRange : m_MaxRange ); } + set{ m_MaxRange = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public WeaponAnimation Animation + { + get{ return ( m_Animation == (WeaponAnimation)(-1) ? UOAnimation : m_Animation ); } + set{ m_Animation = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public WeaponType Type + { + get{ return ( m_Type == (WeaponType)(-1) ? UOType : m_Type ); } + set{ m_Type = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SkillName Skill + { + get{ return ( m_Skill == (SkillName)(-1) ? UOSkill : m_Skill ); } + set{ m_Skill = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int HitSound + { + get{ return ( m_HitSound == -1 ? UOHitSound : m_HitSound ); } + set{ m_HitSound = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MissSound + { + get{ return ( m_MissSound == -1 ? UOMissSound : m_MissSound ); } + set{ m_MissSound = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MinDamage + { + get{ return ( m_MinDamage == -1 ? UOMinDamage : m_MinDamage ); } + set{ m_MinDamage = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxDamage + { + get{ return ( m_MaxDamage == -1 ? UOMaxDamage : m_MaxDamage ); } + set{ m_MaxDamage = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public float Speed + { + get + { + if ( m_Speed != -1 ) + return m_Speed; + + return UOSpeed; + } + set{ m_Speed = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int StrRequirement + { + get{ return ( m_StrReq == -1 ? UOStrengthReq : m_StrReq ); } + set{ m_StrReq = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int DexRequirement + { + get{ return ( m_DexReq == -1 ? UODexterityReq : m_DexReq ); } + set{ m_DexReq = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int IntRequirement + { + get{ return ( m_IntReq == -1 ? UOIntelligenceReq : m_IntReq ); } + set{ m_IntReq = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public WeaponAccuracyLevel AccuracyLevel + { + get + { + return m_AccuracyLevel; + } + set + { + if ( m_AccuracyLevel != value ) + { + m_AccuracyLevel = value; + + if ( UseSkillMod ) + { + if ( m_AccuracyLevel == WeaponAccuracyLevel.Regular ) + { + if ( m_SkillMod != null ) + m_SkillMod.Remove(); + + m_SkillMod = null; + } + else if ( m_SkillMod == null && Parent is Mobile ) + { + m_SkillMod = new DefaultSkillMod( AccuracySkill, true, (int)m_AccuracyLevel * 5 ); + ((Mobile)Parent).AddSkillMod( m_SkillMod ); + } + else if ( m_SkillMod != null ) + { + m_SkillMod.Value = (int)m_AccuracyLevel * 5; + } + } + + InvalidateProperties(); + } + } + } + + #endregion + + public override void OnAfterDuped( Item newItem ) + { + BaseWeapon weap = newItem as BaseWeapon; + + if ( weap == null ) + return; + } + + public virtual void UnscaleDurability() + { + int scale = 100 + GetDurabilityBonus(); + + m_Hits = ((m_Hits * 100) + (scale - 1)) / scale; + m_MaxHits = ((m_MaxHits * 100) + (scale - 1)) / scale; + InvalidateProperties(); + } + + public virtual void ScaleDurability() + { + int scale = 100 + GetDurabilityBonus(); + + m_Hits = ((m_Hits * scale) + 99) / 100; + m_MaxHits = ((m_MaxHits * scale) + 99) / 100; + InvalidateProperties(); + } + + public int GetDurabilityBonus() + { + int bonus = 0; + + if ( m_Quality == WeaponQuality.Exceptional ) + bonus += 20; + + switch ( m_DurabilityLevel ) + { + case WeaponDurabilityLevel.Durable: bonus += 20; break; + case WeaponDurabilityLevel.Substantial: bonus += 50; break; + case WeaponDurabilityLevel.Massive: bonus += 70; break; + case WeaponDurabilityLevel.Fortified: bonus += 100; break; + case WeaponDurabilityLevel.Indestructible: bonus += 120; break; + } + + return bonus; + } + + public int GetLowerStatReq() + { + return 0; + } + + public static void BlockEquip( Mobile m, TimeSpan duration ) + { + if ( m.BeginAction( typeof( BaseWeapon ) ) ) + new ResetEquipTimer( m, duration ).Start(); + } + + private class ResetEquipTimer : Timer + { + private Mobile m_Mobile; + + public ResetEquipTimer( Mobile m, TimeSpan duration ) : base( duration ) + { + m_Mobile = m; + } + + protected override void OnTick() + { + m_Mobile.EndAction( typeof( BaseWeapon ) ); + } + } + + public override bool CheckConflictingLayer( Mobile m, Item item, Layer layer ) + { + if ( base.CheckConflictingLayer( m, item, layer ) ) + return true; + + if ( this.Layer == Layer.TwoHanded && layer == Layer.OneHanded ) + { + m.SendLocalizedMessage( 500214 ); // You already have something in both hands. + return true; + } + else if ( this.Layer == Layer.OneHanded && layer == Layer.TwoHanded && !(item is BaseShield) && !(item is BaseEquipableLight) ) + { + m.SendLocalizedMessage( 500215 ); // You can only wield one weapon at a time. + return true; + } + + return false; + } + + public override bool CanEquip( Mobile from ) + { + if ( from.Dex < DexRequirement ) + { + from.SendMessage( "You are not nimble enough to equip that." ); + return false; + } + else if ( from.Str < Ultima.Scale( StrRequirement, 100 - GetLowerStatReq() ) ) + { + from.SendLocalizedMessage( 500213 ); // You are not strong enough to equip that. + return false; + } + else if ( from.Int < IntRequirement ) + { + from.SendMessage( "You are not smart enough to equip that." ); + return false; + } + else if ( !from.CanBeginAction( typeof( BaseWeapon ) ) ) + { + return false; + } + else + { + return base.CanEquip( from ); + } + } + + public virtual bool UseSkillMod{ get{ return true; } } + + public override bool OnEquip( Mobile from ) + { + from.NextCombatTime = DateTime.Now + GetDelay( from ); + + if ( UseSkillMod && m_AccuracyLevel != WeaponAccuracyLevel.Regular ) + { + if ( m_SkillMod != null ) + m_SkillMod.Remove(); + + m_SkillMod = new DefaultSkillMod( AccuracySkill, true, (int)m_AccuracyLevel * 5 ); + from.AddSkillMod( m_SkillMod ); + } + + return true; + } + + public override void OnAdded( object parent ) + { + base.OnAdded( parent ); + + if ( parent is Mobile ) + { + Mobile from = (Mobile)parent; + + from.CheckStatTimers(); + from.Delta( MobileDelta.WeaponDamage ); + } + } + + public override void OnRemoved( object parent ) + { + if ( parent is Mobile ) + { + Mobile m = (Mobile)parent; + BaseWeapon weapon = m.Weapon as BaseWeapon; + + string modName = this.Serial.ToString(); + + m.RemoveStatMod( modName + "Str" ); + m.RemoveStatMod( modName + "Dex" ); + m.RemoveStatMod( modName + "Int" ); + + if ( weapon != null ) + m.NextCombatTime = DateTime.Now + weapon.GetDelay( m ); + + if ( UseSkillMod && m_SkillMod != null ) + { + m_SkillMod.Remove(); + m_SkillMod = null; + } + + if ( m_MageMod != null ) + { + m_MageMod.Remove(); + m_MageMod = null; + } + + m.CheckStatTimers(); + + m.Delta( MobileDelta.WeaponDamage ); + } + } + + public virtual SkillName GetUsedSkill( Mobile m, bool checkSkillAttrs ) + { + SkillName sk; + + sk = Skill; + + if ( sk != SkillName.HandToHand && !m.Player && !m.Body.IsHuman && m.Skills[SkillName.HandToHand].Value > m.Skills[sk].Value ) + sk = SkillName.HandToHand; + + return sk; + } + + public virtual double GetAttackSkillValue( Mobile attacker, Mobile defender ) + { + return attacker.Skills[GetUsedSkill( attacker, true )].Value; + } + + public virtual double GetDefendSkillValue( Mobile attacker, Mobile defender ) + { + return defender.Skills[GetUsedSkill( defender, true )].Value; + } + + public virtual bool CheckHit( Mobile attacker, Mobile defender ) + { + BaseWeapon atkWeapon = attacker.Weapon as BaseWeapon; + BaseWeapon defWeapon = defender.Weapon as BaseWeapon; + + Skill atkSkill = attacker.Skills[atkWeapon.Skill]; + Skill defSkill = defender.Skills[defWeapon.Skill]; + + double atkValue = atkWeapon.GetAttackSkillValue( attacker, defender ); + double defValue = defWeapon.GetDefendSkillValue( attacker, defender ); + + double ourValue, theirValue; + + int bonus = GetHitChanceBonus(); + + if ( atkValue <= -50.0 ) + atkValue = -49.9; + + if ( defValue <= -50.0 ) + defValue = -49.9; + + ourValue = (atkValue + 50.0); + theirValue = (defValue + 50.0); + + double chance = ourValue / (theirValue * 2.0); + + chance *= 1.0 + ((double)bonus / 100); + + return attacker.CheckSkill( atkSkill.SkillName, chance ); + } + + public virtual TimeSpan GetDelay( Mobile m ) + { + double speed = this.Speed; + + if ( speed == 0 ) + return TimeSpan.FromHours( 1.0 ); + + double delayInSeconds; + + int v = (m.Stam + 100) * (int) speed; + + if ( v <= 0 ) + v = 1; + + delayInSeconds = 15000.0 / v; + + return TimeSpan.FromSeconds( delayInSeconds ); + } + + public virtual void OnBeforeSwing( Mobile attacker, Mobile defender ) + { + } + + public virtual TimeSpan OnSwing( Mobile attacker, Mobile defender ) + { + return OnSwing( attacker, defender, 1.0 ); + } + + public virtual TimeSpan OnSwing( Mobile attacker, Mobile defender, double damageBonus ) + { + bool canSwing = true; + + if ( canSwing && attacker.HarmfulCheck( defender ) ) + { + attacker.DisruptiveAction(); + + if ( attacker.NetState != null ) + attacker.Send( new Swing( 0, attacker, defender ) ); + + if ( CheckHit( attacker, defender ) ) + OnHit( attacker, defender, damageBonus ); + else + OnMiss( attacker, defender ); + } + + return GetDelay( attacker ); + } + + #region Sounds + public virtual int GetHitAttackSound( Mobile attacker, Mobile defender ) + { + int sound = attacker.GetAttackSound(); + + if ( sound == -1 ) + sound = HitSound; + + return sound; + } + + public virtual int GetHitDefendSound( Mobile attacker, Mobile defender ) + { + return defender.GetHurtSound(); + } + + public virtual int GetMissAttackSound( Mobile attacker, Mobile defender ) + { + if ( attacker.GetAttackSound() == -1 ) + return MissSound; + else + return -1; + } + + public virtual int GetMissDefendSound( Mobile attacker, Mobile defender ) + { + return -1; + } + #endregion + + public static int DodgeArmor( Item item, int impact ) + { + if ( item is BaseArmor ) + { + CraftResource resource = ((BaseArmor)item).Resource; + + if ( resource == CraftResource.Iron ) + return ( impact * 6 ); + else if ( resource == CraftResource.Wooden ) + return ( impact * 4 ); + else if ( resource == CraftResource.Leathered ) + return ( impact * 2 ); + } + + return 0; + } + + public static int ArmorRating( Mobile defender ) + { + int armorScore = 0; + + if ( defender.FindItemOnLayer( Layer.Pants ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.Pants ), 3 ); } + if ( defender.FindItemOnLayer( Layer.Neck ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.Neck ), 1 ); } + if ( defender.FindItemOnLayer( Layer.InnerTorso ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.InnerTorso ), 4 ); } + if ( defender.FindItemOnLayer( Layer.Helm ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.Helm ), 2 ); } + if ( defender.FindItemOnLayer( Layer.Gloves ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.Gloves ), 1 ); } + if ( defender.FindItemOnLayer( Layer.MiddleTorso ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.MiddleTorso ), 4 ); } + if ( defender.FindItemOnLayer( Layer.Arms ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.Arms ), 2 ); } + if ( defender.FindItemOnLayer( Layer.OuterTorso ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.OuterTorso ), 4 ); } + if ( defender.FindItemOnLayer( Layer.OuterLegs ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.OuterLegs ), 3 ); } + if ( defender.FindItemOnLayer( Layer.InnerLegs ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.InnerLegs ), 3 ); } + if ( defender.FindItemOnLayer( Layer.TwoHanded ) != null ) { armorScore = armorScore + DodgeArmor( defender.FindItemOnLayer( Layer.TwoHanded ), 2 ); } + + if ( armorScore > 0 ) + armorScore = armorScore + 10; + + return armorScore; + } + + public static bool CheckDodge( Mobile defender, bool skillUp ) + { + if ( defender == null ) + return false; + + int armorScore = ArmorRating( defender ); + + if ( armorScore > Utility.RandomMinMax(1,100) ) + return false; + + double dodge = defender.Skills[SkillName.Dodging].Value; + + double chance = dodge / 400.0; + + if ( chance < 0 ) // chance shouldn't go below 0 + chance = 0; + + // Dodge over 100 grants a 5% bonus. + if ( dodge >= 100.0 ) + chance += 0.05; + + // Low dexterity lowers the chance. + if ( defender.Dex < 80 ) + chance = chance * (20 + defender.Dex) / 100; + + if ( !skillUp ) + { + if ( defender.Skills[SkillName.Dodging].Value >= Utility.RandomMinMax( 1, 100 ) ) + return true; + else + return false; + } + + return defender.CheckSkill( SkillName.Dodging, chance ); + } + + public virtual int AbsorbDamage( Mobile attacker, Mobile defender, int damage ) + { + if ( CheckDodge( defender, true ) ) + { + defender.FixedEffect( 0x37B9, 10, 16 ); + return 0; + } + + double chance = Utility.RandomDouble(); + + Item armorItem; + + if( chance < 0.07 ) + armorItem = defender.NeckArmor; + else if( chance < 0.14 ) + armorItem = defender.HandArmor; + else if( chance < 0.28 ) + armorItem = defender.ArmsArmor; + else if( chance < 0.43 ) + armorItem = defender.HeadArmor; + else if( chance < 0.65 ) + armorItem = defender.LegsArmor; + else + armorItem = defender.ChestArmor; + + IWearableDurability armor = armorItem as IWearableDurability; + + if ( armor != null ) + damage = armor.OnHit( this, damage ); + + BaseShield shield = defender.FindItemOnLayer( Layer.TwoHanded ) as BaseShield; + if ( shield != null ) + damage = shield.OnHit( this, damage ); + + int virtualArmor = defender.VirtualArmor + defender.VirtualArmorMod; + + if ( virtualArmor > 0 ) + { + double scalar; + + if ( chance < 0.14 ) + scalar = 0.07; + else if ( chance < 0.28 ) + scalar = 0.14; + else if ( chance < 0.43 ) + scalar = 0.15; + else if ( chance < 0.65 ) + scalar = 0.22; + else + scalar = 0.35; + + int from = (int)(virtualArmor * scalar) / 2; + int to = (int)(virtualArmor * scalar); + + damage -= Utility.Random( from, (to - from) + 1 ); + } + + return damage; + } + + public void OnHit( Mobile attacker, Mobile defender ) + { + OnHit( attacker, defender, 1.0 ); + } + + public virtual void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + PlaySwingAnimation( attacker ); + PlayHurtAnimation( defender ); + + attacker.PlaySound( GetHitAttackSound( attacker, defender ) ); + defender.PlaySound( GetHitDefendSound( attacker, defender ) ); + + int damage = ComputeDamage( attacker, defender ); + + #region Damage Multipliers + /* + * The following damage bonuses multiply damage by a factor. + * Capped at x3 (300%). + */ + //double factor = 1.0; + int percentageBonus = 0; + + //factor *= damageBonus; + percentageBonus += (int)(damageBonus * 100) - 100; + + CheckSlayerResult cs = CheckSlayers( attacker, defender ); + + if ( cs != CheckSlayerResult.None ) + { + if ( cs == CheckSlayerResult.Slayer ) + defender.FixedEffect( 0x37B9, 10, 5 ); + + //factor *= 2.0; + percentageBonus += 100; + } + + percentageBonus = Math.Min( percentageBonus, 300 ); + + //damage = (int)(damage * factor); + damage = Ultima.Scale( damage, 100 + percentageBonus ); + #endregion + + if ( attacker is BaseCreature ) + ((BaseCreature)attacker).AlterMeleeDamageTo( defender, ref damage ); + + if ( defender is BaseCreature ) + ((BaseCreature)defender).AlterMeleeDamageFrom( attacker, ref damage ); + + damage = AbsorbDamage( attacker, defender, damage ); + + if ( damage < 1 ) + damage = 1; + + AddBlood( attacker, defender, damage ); + + int dmg = Ultima.Damage( defender, attacker, damage ); + + if ( m_MaxHits > 0 && ((MaxRange <= 1 && (defender is LargeSlime || defender is Slime || defender is AcidElemental)) || Utility.Random( 25 ) == 0) ) // Stratics says 50% chance, seems more like 4%.. + { + if ( MaxRange <= 1 && (defender is LargeSlime || defender is Slime || defender is AcidElemental) ) + attacker.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500263 ); // *Acid blood scars your weapon!* + + if ( m_Hits > 0 ) + { + --HitPoints; + } + else if ( m_MaxHits > 1 ) + { + --MaxHitPoints; + + if ( Parent is Mobile ) + ((Mobile)Parent).LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061121 ); // Your equipment is severely damaged. + } + else + { + Delete(); + } + } + + if ( attacker is BaseCreature ) + ((BaseCreature)attacker).OnGaveMeleeAttack( defender ); + + if ( defender is BaseCreature ) + ((BaseCreature)defender).OnGotMeleeAttack( attacker ); + } + + public virtual CheckSlayerResult CheckSlayers( Mobile attacker, Mobile defender ) + { + BaseWeapon atkWeapon = attacker.Weapon as BaseWeapon; + SlayerEntry atkSlayer = SlayerGroup.GetEntryByName( atkWeapon.Slayer ); + SlayerEntry atkSlayer2 = SlayerGroup.GetEntryByName( atkWeapon.Slayer2 ); + + if ( atkSlayer != null && atkSlayer.Slays( defender ) || atkSlayer2 != null && atkSlayer2.Slays( defender ) ) + return CheckSlayerResult.Slayer; + + return CheckSlayerResult.None; + } + + public virtual void AddBlood( Mobile attacker, Mobile defender, int damage ) + { + if ( defender is BaseCreature && ((BaseCreature)defender).BleedImmune ) + return; + + if ( damage > 0 ) + { + new Blood().MoveToWorld( defender.Location, defender.Map ); + + int extraBlood = Utility.RandomMinMax( 0, 1 ); + + for( int i = 0; i < extraBlood; i++ ) + { + new Blood().MoveToWorld( new Point3D( + defender.X + Utility.RandomMinMax( -1, 1 ), + defender.Y + Utility.RandomMinMax( -1, 1 ), + defender.Z ), defender.Map ); + } + } + } + + public virtual void OnMiss( Mobile attacker, Mobile defender ) + { + PlaySwingAnimation( attacker ); + attacker.PlaySound( GetMissAttackSound( attacker, defender ) ); + defender.PlaySound( GetMissDefendSound( attacker, defender ) ); + } + + public virtual void GetBaseDamageRange( Mobile attacker, out int min, out int max ) + { + if ( attacker is BaseCreature ) + { + BaseCreature c = (BaseCreature)attacker; + + if ( c.DamageMin >= 0 ) + { + min = c.DamageMin; + max = c.DamageMax; + return; + } + + if ( this is Fists && !attacker.Body.IsHuman ) + { + min = attacker.Str / 28; + max = attacker.Str / 28; + return; + } + } + + min = MinDamage; + max = MaxDamage; + } + + public virtual double GetBaseDamage( Mobile attacker ) + { + int min, max; + + GetBaseDamageRange( attacker, out min, out max ); + + return Utility.RandomMinMax( min, max ); + } + + public virtual double GetBonus( double value, double scalar, double threshold, double offset ) + { + double bonus = value * scalar; + + if ( value >= threshold ) + bonus += offset; + + return bonus / 100; + } + + public virtual int GetHitChanceBonus() + { + return 0; + } + + public virtual int GetDamageBonus() + { + int bonus = VirtualDamageBonus; + + switch ( m_Quality ) + { + case WeaponQuality.Low: bonus -= 20; break; + case WeaponQuality.Exceptional: bonus += 20; break; + } + + switch ( m_DamageLevel ) + { + case WeaponDamageLevel.Ruin: bonus += 15; break; + case WeaponDamageLevel.Might: bonus += 20; break; + case WeaponDamageLevel.Force: bonus += 25; break; + case WeaponDamageLevel.Power: bonus += 30; break; + case WeaponDamageLevel.Vanq: bonus += 35; break; + } + + return bonus; + } + + public virtual void GetStatusDamage( Mobile from, out int min, out int max ) + { + int baseMin, baseMax; + + GetBaseDamageRange( from, out baseMin, out baseMax ); + + min = Math.Max( (int)ScaleDamageOld( from, baseMin, false ), 1 ); + max = Math.Max( (int)ScaleDamageOld( from, baseMax, false ), 1 ); + } + + public virtual int VirtualDamageBonus{ get{ return 0; } } + + public virtual double ScaleDamageOld( Mobile attacker, double damage, bool checkSkills ) + { + if ( checkSkills ) + { + attacker.CheckSkill( SkillName.Tactics, 0.0, attacker.Skills[SkillName.Tactics].Cap ); // Passively check tactics for gain + } + + /* Compute tactics modifier + * : 0.0 = 50% loss + * : 50.0 = unchanged + * : 100.0 = 50% bonus + */ + double tacticsBonus = (attacker.Skills[SkillName.Tactics].Value - 50.0) / 100.0; + + /* Compute warrior modifier + * : 0.0 = 50% loss + * : 50.0 = unchanged + * : 100.0 = 50% bonus + */ + double warriorBonus = ( ( attacker.Skills[SkillName.Swords].Value + attacker.Skills[SkillName.Bludgeoning].Value + attacker.Skills[SkillName.Fencing].Value / 3 ) - 50.0 ) / 100.0; + if ( this is BaseRanged ) + warriorBonus = 0; + + /* Compute strength modifier + * : 1% bonus for every 5 strength + */ + double strBonus = (attacker.Str / 5.0) / 100.0; + + /* Compute dex modifier + * : 1% bonus for every 5 points of dex + * : +10% bonus at 100 + */ + double dexValue = attacker.Dex; + double dexBonus = (dexValue / 5.0) / 100.0; + + if ( dexValue >= 100.0 ) + dexBonus += 0.1; + + // New quality bonus: + double qualityBonus = ((int)m_Quality - 1) * 0.2; + + // Apply bonuses + damage += (damage * tacticsBonus) + (damage * strBonus) + (damage * warriorBonus) + (damage * dexBonus) + (damage * qualityBonus) + ((damage * VirtualDamageBonus) / 100); + + // Old quality bonus: +#if false + /* Apply quality offset + * : Low : -4 + * : Regular : 0 + * : Exceptional : +4 + */ + damage += ((int)m_Quality - 1) * 4.0; +#endif + + /* Apply damage level offset + * : Regular : 0 + * : Ruin : 1 + * : Might : 3 + * : Force : 5 + * : Power : 7 + * : Vanq : 9 + */ + if ( m_DamageLevel != WeaponDamageLevel.Regular ) + damage += (2.0 * (int)m_DamageLevel) - 1.0; + + // Halve the computed damage and return + damage /= 2.0; + + return ScaleDamageByDurability( (int)damage ); + } + + public virtual int ScaleDamageByDurability( int damage ) + { + int scale = 100; + + if ( m_MaxHits > 0 && m_Hits < m_MaxHits ) + scale = 50 + ((50 * m_Hits) / m_MaxHits); + + return Ultima.Scale( damage, scale ); + } + + public virtual int ComputeDamage( Mobile attacker, Mobile defender ) + { + return (int)ScaleDamageOld( attacker, GetBaseDamage( attacker ), true ); + } + + public virtual void PlayHurtAnimation( Mobile from ) + { + int action; + int frames; + + switch ( from.Body.Type ) + { + case BodyType.Sea: + case BodyType.Animal: + { + action = 7; + frames = 5; + break; + } + case BodyType.Monster: + { + action = 10; + frames = 4; + break; + } + case BodyType.Human: + { + action = 20; + frames = 5; + break; + } + default: return; + } + + if ( from.Mounted ) + return; + + from.Animate( action, frames, 1, true, false, 0 ); + } + + public virtual void PlaySwingAnimation( Mobile from ) + { + int action; + + switch ( from.Body.Type ) + { + case BodyType.Sea: + case BodyType.Animal: + { + action = Utility.Random( 5, 2 ); + break; + } + case BodyType.Monster: + { + switch ( Animation ) + { + default: + case WeaponAnimation.Wrestle: + case WeaponAnimation.Bash1H: + case WeaponAnimation.Pierce1H: + case WeaponAnimation.Slash1H: + case WeaponAnimation.Bash2H: + case WeaponAnimation.Pierce2H: + case WeaponAnimation.Slash2H: action = Utility.Random( 4, 3 ); break; + case WeaponAnimation.ShootBow: return; // 7 + case WeaponAnimation.ShootXBow: return; // 8 + } + + break; + } + case BodyType.Human: + { + if ( !from.Mounted ) + { + action = (int)Animation; + } + else + { + switch ( Animation ) + { + default: + case WeaponAnimation.Wrestle: + case WeaponAnimation.Bash1H: + case WeaponAnimation.Pierce1H: + case WeaponAnimation.Slash1H: action = 26; break; + case WeaponAnimation.Bash2H: + case WeaponAnimation.Pierce2H: + case WeaponAnimation.Slash2H: action = 29; break; + case WeaponAnimation.ShootBow: action = 27; break; + case WeaponAnimation.ShootXBow: action = 28; break; + } + } + + break; + } + default: return; + } + + from.Animate( action, 7, 1, true, false, 0 ); + } + + #region Serialization/Deserialization + private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf ) + { + if ( setIf ) + flags |= toSet; + } + + private static bool GetSaveFlag( SaveFlag flags, SaveFlag toGet ) + { + return ( (flags & toGet) != 0 ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 9 ); // version + + SaveFlag flags = SaveFlag.None; + + SetSaveFlag( ref flags, SaveFlag.DamageLevel, m_DamageLevel != WeaponDamageLevel.Regular ); + SetSaveFlag( ref flags, SaveFlag.AccuracyLevel, m_AccuracyLevel != WeaponAccuracyLevel.Regular ); + SetSaveFlag( ref flags, SaveFlag.DurabilityLevel, m_DurabilityLevel != WeaponDurabilityLevel.Regular ); + SetSaveFlag( ref flags, SaveFlag.Quality, m_Quality != WeaponQuality.Regular ); + SetSaveFlag( ref flags, SaveFlag.Hits, m_Hits != 0 ); + SetSaveFlag( ref flags, SaveFlag.MaxHits, m_MaxHits != 0 ); + SetSaveFlag( ref flags, SaveFlag.Slayer, m_Slayer != SlayerName.None ); + SetSaveFlag( ref flags, SaveFlag.Poison, m_Poison != null ); + SetSaveFlag( ref flags, SaveFlag.PoisonCharges, m_PoisonCharges != 0 ); + SetSaveFlag( ref flags, SaveFlag.Crafter, m_Crafter != null ); + SetSaveFlag( ref flags, SaveFlag.StrReq, m_StrReq != -1 ); + SetSaveFlag( ref flags, SaveFlag.DexReq, m_DexReq != -1 ); + SetSaveFlag( ref flags, SaveFlag.IntReq, m_IntReq != -1 ); + SetSaveFlag( ref flags, SaveFlag.MinDamage, m_MinDamage != -1 ); + SetSaveFlag( ref flags, SaveFlag.MaxDamage, m_MaxDamage != -1 ); + SetSaveFlag( ref flags, SaveFlag.HitSound, m_HitSound != -1 ); + SetSaveFlag( ref flags, SaveFlag.MissSound, m_MissSound != -1 ); + SetSaveFlag( ref flags, SaveFlag.Speed, m_Speed != -1 ); + SetSaveFlag( ref flags, SaveFlag.MaxRange, m_MaxRange != -1 ); + SetSaveFlag( ref flags, SaveFlag.Skill, m_Skill != (SkillName)(-1) ); + SetSaveFlag( ref flags, SaveFlag.Type, m_Type != (WeaponType)(-1) ); + SetSaveFlag( ref flags, SaveFlag.Animation, m_Animation != (WeaponAnimation)(-1) ); + SetSaveFlag( ref flags, SaveFlag.Resource, m_Resource != CraftResource.Iron ); + SetSaveFlag( ref flags, SaveFlag.PlayerConstructed, m_PlayerConstructed ); + SetSaveFlag( ref flags, SaveFlag.Slayer2, m_Slayer2 != SlayerName.None ); + + writer.Write( (int) flags ); + + if ( GetSaveFlag( flags, SaveFlag.DamageLevel ) ) + writer.Write( (int) m_DamageLevel ); + + if ( GetSaveFlag( flags, SaveFlag.AccuracyLevel ) ) + writer.Write( (int) m_AccuracyLevel ); + + if ( GetSaveFlag( flags, SaveFlag.DurabilityLevel ) ) + writer.Write( (int) m_DurabilityLevel ); + + if ( GetSaveFlag( flags, SaveFlag.Quality ) ) + writer.Write( (int) m_Quality ); + + if ( GetSaveFlag( flags, SaveFlag.Hits ) ) + writer.Write( (int) m_Hits ); + + if ( GetSaveFlag( flags, SaveFlag.MaxHits ) ) + writer.Write( (int) m_MaxHits ); + + if ( GetSaveFlag( flags, SaveFlag.Slayer ) ) + writer.Write( (int) m_Slayer ); + + if ( GetSaveFlag( flags, SaveFlag.Poison ) ) + Poison.Serialize( m_Poison, writer ); + + if ( GetSaveFlag( flags, SaveFlag.PoisonCharges ) ) + writer.Write( (int) m_PoisonCharges ); + + if ( GetSaveFlag( flags, SaveFlag.Crafter ) ) + writer.Write( (Mobile) m_Crafter ); + + if ( GetSaveFlag( flags, SaveFlag.StrReq ) ) + writer.Write( (int) m_StrReq ); + + if ( GetSaveFlag( flags, SaveFlag.DexReq ) ) + writer.Write( (int) m_DexReq ); + + if ( GetSaveFlag( flags, SaveFlag.IntReq ) ) + writer.Write( (int) m_IntReq ); + + if ( GetSaveFlag( flags, SaveFlag.MinDamage ) ) + writer.Write( (int) m_MinDamage ); + + if ( GetSaveFlag( flags, SaveFlag.MaxDamage ) ) + writer.Write( (int) m_MaxDamage ); + + if ( GetSaveFlag( flags, SaveFlag.HitSound ) ) + writer.Write( (int) m_HitSound ); + + if ( GetSaveFlag( flags, SaveFlag.MissSound ) ) + writer.Write( (int) m_MissSound ); + + if ( GetSaveFlag( flags, SaveFlag.Speed ) ) + writer.Write( (float) m_Speed ); + + if ( GetSaveFlag( flags, SaveFlag.MaxRange ) ) + writer.Write( (int) m_MaxRange ); + + if ( GetSaveFlag( flags, SaveFlag.Skill ) ) + writer.Write( (int) m_Skill ); + + if ( GetSaveFlag( flags, SaveFlag.Type ) ) + writer.Write( (int) m_Type ); + + if ( GetSaveFlag( flags, SaveFlag.Animation ) ) + writer.Write( (int) m_Animation ); + + if ( GetSaveFlag( flags, SaveFlag.Resource ) ) + writer.Write( (int) m_Resource ); + + if ( GetSaveFlag( flags, SaveFlag.Slayer2 ) ) + writer.Write( (int)m_Slayer2 ); + } + + [Flags] + private enum SaveFlag + { + None = 0x00000000, + DamageLevel = 0x00000001, + AccuracyLevel = 0x00000002, + DurabilityLevel = 0x00000004, + Quality = 0x00000008, + Hits = 0x00000010, + MaxHits = 0x00000020, + Slayer = 0x00000040, + Poison = 0x00000080, + PoisonCharges = 0x00000100, + Crafter = 0x00000200, + StrReq = 0x00000400, + DexReq = 0x00000800, + IntReq = 0x00001000, + MinDamage = 0x00002000, + MaxDamage = 0x00004000, + HitSound = 0x00008000, + MissSound = 0x00010000, + Speed = 0x00020000, + MaxRange = 0x00040000, + Skill = 0x00080000, + Type = 0x00100000, + Animation = 0x00200000, + Resource = 0x00400000, + PlayerConstructed = 0x00800000, + Slayer2 = 0x01000000 + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 9: + case 8: + case 7: + case 6: + case 5: + { + SaveFlag flags = (SaveFlag)reader.ReadInt(); + + if ( GetSaveFlag( flags, SaveFlag.DamageLevel ) ) + { + m_DamageLevel = (WeaponDamageLevel)reader.ReadInt(); + + if ( m_DamageLevel > WeaponDamageLevel.Vanq ) + m_DamageLevel = WeaponDamageLevel.Ruin; + } + + if ( GetSaveFlag( flags, SaveFlag.AccuracyLevel ) ) + { + m_AccuracyLevel = (WeaponAccuracyLevel)reader.ReadInt(); + + if ( m_AccuracyLevel > WeaponAccuracyLevel.Supremely ) + m_AccuracyLevel = WeaponAccuracyLevel.Accurate; + } + + if ( GetSaveFlag( flags, SaveFlag.DurabilityLevel ) ) + { + m_DurabilityLevel = (WeaponDurabilityLevel)reader.ReadInt(); + + if ( m_DurabilityLevel > WeaponDurabilityLevel.Indestructible ) + m_DurabilityLevel = WeaponDurabilityLevel.Durable; + } + + if ( GetSaveFlag( flags, SaveFlag.Quality ) ) + m_Quality = (WeaponQuality)reader.ReadInt(); + else + m_Quality = WeaponQuality.Regular; + + if ( GetSaveFlag( flags, SaveFlag.Hits ) ) + m_Hits = reader.ReadInt(); + + if ( GetSaveFlag( flags, SaveFlag.MaxHits ) ) + m_MaxHits = reader.ReadInt(); + + if ( GetSaveFlag( flags, SaveFlag.Slayer ) ) + m_Slayer = (SlayerName)reader.ReadInt(); + + if ( GetSaveFlag( flags, SaveFlag.Poison ) ) + m_Poison = Poison.Deserialize( reader ); + + if ( GetSaveFlag( flags, SaveFlag.PoisonCharges ) ) + m_PoisonCharges = reader.ReadInt(); + + if ( GetSaveFlag( flags, SaveFlag.Crafter ) ) + m_Crafter = reader.ReadMobile(); + + if ( GetSaveFlag( flags, SaveFlag.StrReq ) ) + m_StrReq = reader.ReadInt(); + else + m_StrReq = -1; + + if ( GetSaveFlag( flags, SaveFlag.DexReq ) ) + m_DexReq = reader.ReadInt(); + else + m_DexReq = -1; + + if ( GetSaveFlag( flags, SaveFlag.IntReq ) ) + m_IntReq = reader.ReadInt(); + else + m_IntReq = -1; + + if ( GetSaveFlag( flags, SaveFlag.MinDamage ) ) + m_MinDamage = reader.ReadInt(); + else + m_MinDamage = -1; + + if ( GetSaveFlag( flags, SaveFlag.MaxDamage ) ) + m_MaxDamage = reader.ReadInt(); + else + m_MaxDamage = -1; + + if ( GetSaveFlag( flags, SaveFlag.HitSound ) ) + m_HitSound = reader.ReadInt(); + else + m_HitSound = -1; + + if ( GetSaveFlag( flags, SaveFlag.MissSound ) ) + m_MissSound = reader.ReadInt(); + else + m_MissSound = -1; + + if ( GetSaveFlag( flags, SaveFlag.Speed ) ) + { + if ( version < 9 ) + m_Speed = reader.ReadInt(); + else + m_Speed = reader.ReadFloat(); + } + else + m_Speed = -1; + + if ( GetSaveFlag( flags, SaveFlag.MaxRange ) ) + m_MaxRange = reader.ReadInt(); + else + m_MaxRange = -1; + + if ( GetSaveFlag( flags, SaveFlag.Skill ) ) + m_Skill = (SkillName)reader.ReadInt(); + else + m_Skill = (SkillName)(-1); + + if ( GetSaveFlag( flags, SaveFlag.Type ) ) + m_Type = (WeaponType)reader.ReadInt(); + else + m_Type = (WeaponType)(-1); + + if ( GetSaveFlag( flags, SaveFlag.Animation ) ) + m_Animation = (WeaponAnimation)reader.ReadInt(); + else + m_Animation = (WeaponAnimation)(-1); + + if ( GetSaveFlag( flags, SaveFlag.Resource ) ) + m_Resource = (CraftResource)reader.ReadInt(); + else + m_Resource = CraftResource.Iron; + + if ( UseSkillMod && m_AccuracyLevel != WeaponAccuracyLevel.Regular && Parent is Mobile ) + { + m_SkillMod = new DefaultSkillMod( AccuracySkill, true, (int)m_AccuracyLevel * 5 ); + ((Mobile)Parent).AddSkillMod( m_SkillMod ); + } + + if ( GetSaveFlag( flags, SaveFlag.PlayerConstructed ) ) + m_PlayerConstructed = true; + + if( GetSaveFlag( flags, SaveFlag.Slayer2 ) ) + m_Slayer2 = (SlayerName)reader.ReadInt(); + + break; + } + case 4: + { + m_Slayer = (SlayerName)reader.ReadInt(); + + goto case 3; + } + case 3: + { + m_StrReq = reader.ReadInt(); + m_DexReq = reader.ReadInt(); + m_IntReq = reader.ReadInt(); + + goto case 2; + } + case 2: + { + goto case 1; + } + case 1: + { + m_MaxRange = reader.ReadInt(); + + goto case 0; + } + case 0: + { + if ( version == 0 ) + m_MaxRange = 1; // default + + if ( version < 5 ) + { + m_Resource = CraftResource.Iron; + } + + m_MinDamage = reader.ReadInt(); + m_MaxDamage = reader.ReadInt(); + + m_Speed = reader.ReadInt(); + + m_HitSound = reader.ReadInt(); + m_MissSound = reader.ReadInt(); + + m_Skill = (SkillName)reader.ReadInt(); + m_Type = (WeaponType)reader.ReadInt(); + m_Animation = (WeaponAnimation)reader.ReadInt(); + m_DamageLevel = (WeaponDamageLevel)reader.ReadInt(); + m_AccuracyLevel = (WeaponAccuracyLevel)reader.ReadInt(); + m_DurabilityLevel = (WeaponDurabilityLevel)reader.ReadInt(); + m_Quality = (WeaponQuality)reader.ReadInt(); + + m_Crafter = reader.ReadMobile(); + + m_Poison = Poison.Deserialize( reader ); + m_PoisonCharges = reader.ReadInt(); + + if ( m_StrReq == UOStrengthReq ) + m_StrReq = -1; + + if ( m_DexReq == UODexterityReq ) + m_DexReq = -1; + + if ( m_IntReq == UOIntelligenceReq ) + m_IntReq = -1; + + if ( m_MinDamage == UOMinDamage ) + m_MinDamage = -1; + + if ( m_MaxDamage == UOMaxDamage ) + m_MaxDamage = -1; + + if ( m_HitSound == UOHitSound ) + m_HitSound = -1; + + if ( m_MissSound == UOMissSound ) + m_MissSound = -1; + + if ( m_Speed == UOSpeed ) + m_Speed = -1; + + if ( m_MaxRange == UOMaxRange ) + m_MaxRange = -1; + + if ( m_Skill == UOSkill ) + m_Skill = (SkillName)(-1); + + if ( m_Type == UOType ) + m_Type = (WeaponType)(-1); + + if ( m_Animation == UOAnimation ) + m_Animation = (WeaponAnimation)(-1); + + if ( UseSkillMod && m_AccuracyLevel != WeaponAccuracyLevel.Regular && Parent is Mobile ) + { + m_SkillMod = new DefaultSkillMod( AccuracySkill, true, (int)m_AccuracyLevel * 5); + ((Mobile)Parent).AddSkillMod( m_SkillMod ); + } + + break; + } + } + + if ( Parent is Mobile ) + ((Mobile)Parent).CheckStatTimers(); + + if ( m_Hits <= 0 && m_MaxHits <= 0 ) + { + m_Hits = m_MaxHits = Utility.RandomMinMax( InitMinHits, InitMaxHits ); + } + + if ( version < 6 ) + m_PlayerConstructed = true; // we don't know, so, assume it's crafted + } + #endregion + + public BaseWeapon( int itemID ) : base( itemID ) + { + Layer = (Layer)ItemData.Quality; + + m_Quality = WeaponQuality.Regular; + m_StrReq = -1; + m_DexReq = -1; + m_IntReq = -1; + m_MinDamage = -1; + m_MaxDamage = -1; + m_HitSound = -1; + m_MissSound = -1; + m_Speed = -1; + m_MaxRange = -1; + m_Skill = (SkillName)(-1); + m_Type = (WeaponType)(-1); + m_Animation = (WeaponAnimation)(-1); + + m_Hits = m_MaxHits = Utility.RandomMinMax( InitMinHits, InitMaxHits ); + + m_Resource = CraftResource.Iron; + } + + public BaseWeapon( Serial serial ) : base( serial ) + { + } + + private string GetNameString() + { + string name = this.Name; + + if ( name == null ) + name = String.Format( "#{0}", LabelNumber ); + + return name; + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get{ return base.Hue; } + set{ base.Hue = value; InvalidateProperties(); } + } + + public override bool AllowEquipedCast( Mobile from ) + { + if ( base.AllowEquipedCast( from ) ) + return true; + + return false; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Crafter != null ) + list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~ + + if ( m_Quality == WeaponQuality.Exceptional ) + list.Add( 1060636 ); // exceptional + + if ( m_DamageLevel == WeaponDamageLevel.Ruin ) + list.Add( 1038022 ); // Ruin + else if ( m_DamageLevel == WeaponDamageLevel.Might ) + list.Add( 1038023 ); // Might + else if ( m_DamageLevel == WeaponDamageLevel.Force ) + list.Add( 1038024 ); // Force + else if ( m_DamageLevel == WeaponDamageLevel.Power ) + list.Add( 1038025 ); // Power + else if ( m_DamageLevel == WeaponDamageLevel.Vanq ) + list.Add( 1038026 ); // Vanquishing + + if ( m_AccuracyLevel == WeaponAccuracyLevel.Accurate ) + list.Add( 1038011 ); // Accurate + else if ( m_AccuracyLevel == WeaponAccuracyLevel.Surpassingly ) + list.Add( 1038012 ); // Surpassingly Accurate + else if ( m_AccuracyLevel == WeaponAccuracyLevel.Eminently ) + list.Add( 1038013 ); // Eminently Accurate + else if ( m_AccuracyLevel == WeaponAccuracyLevel.Exceedingly ) + list.Add( 1038014 ); // Exceedingly Accurate + else if ( m_AccuracyLevel == WeaponAccuracyLevel.Supremely ) + list.Add( 1038015 ); // Supremely Accurate + + if ( m_DurabilityLevel == WeaponDurabilityLevel.Durable ) + list.Add( 1036365 ); // Durable Material + else if ( m_DurabilityLevel == WeaponDurabilityLevel.Substantial ) + list.Add( 1036366 ); // Substantial Material + else if ( m_DurabilityLevel == WeaponDurabilityLevel.Massive ) + list.Add( 1036367 ); // Massive Material + else if ( m_DurabilityLevel == WeaponDurabilityLevel.Fortified ) + list.Add( 1036368 ); // Fortified Material + else if ( m_DurabilityLevel == WeaponDurabilityLevel.Indestructible ) + list.Add( 1036369 ); // Indestructible Material + + if ( this is IUsesRemaining && ((IUsesRemaining)this).ShowUsesRemaining ) + list.Add( 1060584, ((IUsesRemaining)this).UsesRemaining.ToString() ); // uses remaining: ~1_val~ + + if ( Magical > 0 && Uses > 0 ) + { + list.Add( 1062520, "\t#{0}", Magical ); + } + + if ( Uses > 0 && Server.Misc.Settings.DisplayInfo() && !(this is BaseWand) ) + { + if ( Uses > 1 ) + list.Add( 1062516, "{0}", Uses ); + else + list.Add( 1062517, "{0}", Uses ); + } + else if ( Uses > 0 && !(this is BaseWand) ) + { + double usage = (double)Uses / (double)UsesMax; + + if ( usage > 0.95 ) + list.Add( 1063269 ); // Fully Charged + else if ( usage > 0.75 ) + list.Add( 1063270 ); // Mostly Charged + else if ( usage > 0.50 ) + list.Add( 1063271 ); // Partially Charged + else if ( usage > 0.25 ) + list.Add( 1063272 ); // Somewhat Charged + else if ( usage > 0.05 ) + list.Add( 1063273 ); // Barely Charged + else + list.Add( 1063274 ); // Almost Drained + } + + if( m_Slayer != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer ); + if( entry != null ) + list.Add( entry.Title ); + } + + if( m_Slayer2 != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer2 ); + if( entry != null ) + list.Add( entry.Title ); + } + + if ( m_Poison != null && m_PoisonCharges > 0 ) + { + if ( Server.Misc.Settings.DisplayInfo() ) + list.Add( 1062412 + m_Poison.Level, m_PoisonCharges.ToString() ); + else + list.Add( 1017383 ); // Poisoned + } + + if ( Server.Misc.Settings.DisplayInfo() ) + { + list.Add( 1061168, "{0}\t{1}", MinDamage.ToString(), MaxDamage.ToString() ); // weapon damage ~1_val~ - ~2_val~ + + list.Add( 1061167, Speed.ToString() ); + + if ( MaxRange > 1 ) + list.Add( 1061169, MaxRange.ToString() ); // range ~1_val~ + + int strReq = Ultima.Scale( StrRequirement, 100 - GetLowerStatReq() ); + if ( strReq > 0 ) + list.Add( 1061170, strReq.ToString() ); // strength requirement ~1_val~ + + if ( Layer == Layer.TwoHanded ) + list.Add( 1036381 ); // two-handed weapon + else + list.Add( 1036380 ); // one-handed weapon + + switch ( Skill ) + { + case SkillName.Swords: list.Add( 1044063 ); break; // Swordsmanship + case SkillName.Bludgeoning: list.Add( 1044061 ); break; // Bludgeoning + case SkillName.Fencing: list.Add( 1044062 ); break; // Fencing + case SkillName.Archery: list.Add( 1044060 ); break; // Archery + } + + if ( m_Hits >= 0 && m_MaxHits > 0 ) + list.Add( 1060639, "{0}\t{1}", m_Hits, m_MaxHits ); // durability ~1_val~ / ~2_val~ + } + else + { + double durable = (double)m_Hits / (double)m_MaxHits; + + if ( durable > 0.95 ){} + // DO NOT SHOW YET + else if ( durable > 0.75 ) + list.Add( 1036374 ); // Perfect Condition + else if ( durable > 0.50 ) + list.Add( 1036373 ); // Good Condition + else if ( durable > 0.25 ) + list.Add( 1036372 ); // Fair Condition + else if ( durable > 0.05 ) + list.Add( 1036371 ); // Poor Condition + else + list.Add( 1036370 ); // Horrible Condition + } + } + + public override void OnSingleClick( Mobile from ) + { + List attrs = new List(); + + if ( DisplayLootType ) + { + if ( LootType == LootType.Blessed ) + attrs.Add( new EquipInfoAttribute( 1038021 ) ); // blessed + } + + if ( m_Quality == WeaponQuality.Exceptional ) + attrs.Add( new EquipInfoAttribute( 1018305 - (int)m_Quality ) ); + + if( m_Slayer != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer ); + if( entry != null ) + attrs.Add( new EquipInfoAttribute( entry.Title ) ); + } + + if( m_Slayer2 != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer2 ); + if( entry != null ) + attrs.Add( new EquipInfoAttribute( entry.Title ) ); + } + + if ( m_DurabilityLevel != WeaponDurabilityLevel.Regular ) + attrs.Add( new EquipInfoAttribute( 1038000 + (int)m_DurabilityLevel ) ); + + if ( m_DamageLevel != WeaponDamageLevel.Regular ) + attrs.Add( new EquipInfoAttribute( 1038015 + (int)m_DamageLevel ) ); + + if ( m_AccuracyLevel != WeaponAccuracyLevel.Regular ) + attrs.Add( new EquipInfoAttribute( 1038010 + (int)m_AccuracyLevel ) ); + + if ( m_Poison != null && m_PoisonCharges > 0 ) + attrs.Add( new EquipInfoAttribute( 1017383, m_PoisonCharges ) ); + + int number; + + if ( Name == null ) + { + number = LabelNumber; + } + else + { + this.LabelTo( from, Name ); + number = 1041000; + } + + if ( attrs.Count == 0 && Crafter == null && Name != null ) + return; + + EquipmentInfo eqInfo = new EquipmentInfo( number, m_Crafter, false, attrs.ToArray() ); + + from.Send( new DisplayEquipmentInfo( this, eqInfo ) ); + } + + private static BaseWeapon m_Fists; // This value holds the default--fist--weapon + + public static BaseWeapon Fists + { + get{ return m_Fists; } + set{ m_Fists = value; } + } + + #region ICraftable Members + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + Quality = (WeaponQuality)quality; + + if ( makersMark ) + Crafter = from; + + PlayerConstructed = true; + + Type resourceType = typeRes; + + if ( resourceType == null ) + resourceType = craftItem.Resources.GetAt( 0 ).ItemType; + + return quality; + } + + #endregion + } + + public enum CheckSlayerResult + { + None, + Slayer + } +} diff --git a/Scripts/Items/Weapons/Fists.cs b/Scripts/Items/Weapons/Fists.cs new file mode 100644 index 0000000..81d3662 --- /dev/null +++ b/Scripts/Items/Weapons/Fists.cs @@ -0,0 +1,281 @@ +using System; +using Server.Items; +using Server.Network; + +namespace Server.Items +{ + public class Fists : BaseMeleeWeapon + { + public static void Initialize() + { + Mobile.DefaultWeapon = new Fists(); + + EventSink.DisarmRequest += new DisarmRequestEventHandler( EventSink_DisarmRequest ); + EventSink.StunRequest += new StunRequestEventHandler( EventSink_StunRequest ); + } + + public override int UOStrengthReq{ get{ return 0; } } + public override int UOMinDamage{ get{ return 1; } } + public override int UOMaxDamage{ get{ return 8; } } + public override int UOSpeed{ get{ return 30; } } + + public override int DefHitSound{ get{ return -1; } } + public override int DefMissSound{ get{ return -1; } } + + public override SkillName DefSkill{ get{ return SkillName.HandToHand; } } + public override WeaponType DefType{ get{ return WeaponType.Fists; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Wrestle; } } + + public Fists() : base( 0 ) + { + Visible = false; + Movable = false; + Quality = WeaponQuality.Regular; + } + + public Fists( Serial serial ) : base( serial ) + { + } + + public override double GetDefendSkillValue( Mobile attacker, Mobile defender ) + { + double wresValue = defender.Skills[SkillName.HandToHand].Value; + double anatValue = defender.Skills[SkillName.Tactics].Value; + double evalValue = defender.Skills[SkillName.Concentration].Value; + double incrValue = (anatValue + evalValue + 20.0) * 0.5; + + if ( incrValue > 120.0 ) + incrValue = 120.0; + + if ( wresValue > incrValue ) + return wresValue; + else + return incrValue; + } + + public override TimeSpan OnSwing( Mobile attacker, Mobile defender ) + { + if ( attacker.StunReady ) + { + if ( attacker.CanBeginAction( typeof( Fists ) ) ) + { + if ( attacker.Skills[SkillName.Tactics].Value >= 80.0 && attacker.Skills[SkillName.HandToHand].Value >= 80.0 ) + { + if ( attacker.Stam >= 15 ) + { + attacker.Stam -= 15; + + if ( CheckMove( attacker, SkillName.Tactics ) ) + { + StartMoveDelay( attacker ); + + attacker.StunReady = false; + + attacker.SendLocalizedMessage( 1004013 ); // You successfully stun your opponent! + defender.SendLocalizedMessage( 1004014 ); // You have been stunned! + + defender.Freeze( TimeSpan.FromSeconds( 4.0 ) ); + } + else + { + attacker.SendLocalizedMessage( 1004010 ); // You failed in your attempt to stun. + defender.SendLocalizedMessage( 1004011 ); // Your opponent tried to stun you and failed. + } + } + else + { + attacker.SendLocalizedMessage( 1004009 ); // You are too fatigued to attempt anything. + } + } + else + { + attacker.SendLocalizedMessage( 1004008 ); // You are not skilled enough to stun your opponent. + attacker.StunReady = false; + } + } + } + else if ( attacker.DisarmReady ) + { + if ( attacker.CanBeginAction( typeof( Fists ) ) ) + { + if ( defender.Player || defender.Body.IsHuman ) + { + if ( attacker.Skills[SkillName.Tactics].Value >= 80.0 && attacker.Skills[SkillName.HandToHand].Value >= 80.0 ) + { + if ( attacker.Stam >= 15 ) + { + Item toDisarm = defender.FindItemOnLayer( Layer.OneHanded ); + + if ( toDisarm == null || !toDisarm.Movable ) + toDisarm = defender.FindItemOnLayer( Layer.TwoHanded ); + + Container pack = defender.Backpack; + + if ( pack == null || toDisarm == null || !toDisarm.Movable ) + { + attacker.SendLocalizedMessage( 1004001 ); // You cannot disarm your opponent. + } + else if ( CheckMove( attacker, SkillName.Tactics ) ) + { + StartMoveDelay( attacker ); + + attacker.Stam -= 15; + attacker.DisarmReady = false; + + attacker.SendLocalizedMessage( 1004006 ); // You successfully disarm your opponent! + defender.SendLocalizedMessage( 1004007 ); // You have been disarmed! + + pack.DropItem( toDisarm ); + } + else + { + attacker.Stam -= 15; + + attacker.SendLocalizedMessage( 1004004 ); // You failed in your attempt to disarm. + defender.SendLocalizedMessage( 1004005 ); // Your opponent tried to disarm you but failed. + } + } + else + { + attacker.SendLocalizedMessage( 1004003 ); // You are too fatigued to attempt anything. + } + } + else + { + attacker.SendLocalizedMessage( 1004002 ); // You are not skilled enough to disarm your opponent. + attacker.DisarmReady = false; + } + } + else + { + attacker.SendLocalizedMessage( 1004001 ); // You cannot disarm your opponent. + } + } + } + + return base.OnSwing( attacker, defender ); + } + + /*public override void OnMiss( Mobile attacker, Mobile defender ) + { + base.PlaySwingAnimation( attacker ); + }*/ + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + Delete(); + } + + /* Wrestling moves */ + + private static bool CheckMove( Mobile m, SkillName other ) + { + double wresValue = m.Skills[SkillName.HandToHand].Value; + double scndValue = m.Skills[other].Value; + + /* 40% chance at 80, 80 + * 50% chance at 100, 100 + * 60% chance at 120, 120 + */ + + double chance = (wresValue + scndValue) / 400.0; + + return ( chance >= Utility.RandomDouble() ); + } + + private static bool HasFreeHands( Mobile m ) + { + Item item = m.FindItemOnLayer( Layer.OneHanded ); + + if ( item != null && !(item is Spellbook) ) + return false; + + return m.FindItemOnLayer( Layer.TwoHanded ) == null; + } + + private static void EventSink_DisarmRequest( DisarmRequestEventArgs e ) + { + Mobile m = e.Mobile; + + double armsValue = m.Skills[SkillName.Tactics].Value; + double wresValue = m.Skills[SkillName.HandToHand].Value; + + if ( !HasFreeHands( m ) ) + { + m.SendLocalizedMessage( 1004029 ); // You must have your hands free to attempt to disarm your opponent. + m.DisarmReady = false; + } + else if ( armsValue >= 80.0 && wresValue >= 80.0 ) + { + m.DisruptiveAction(); + m.DisarmReady = !m.DisarmReady; + m.SendLocalizedMessage( m.DisarmReady ? 1019013 : 1019014 ); + } + else + { + m.SendLocalizedMessage( 1004002 ); // You are not skilled enough to disarm your opponent. + m.DisarmReady = false; + } + } + + private static void EventSink_StunRequest( StunRequestEventArgs e ) + { + Mobile m = e.Mobile; + + double anatValue = m.Skills[SkillName.Tactics].Value; + double wresValue = m.Skills[SkillName.HandToHand].Value; + + if ( !HasFreeHands( m ) ) + { + m.SendLocalizedMessage( 1004031 ); // You must have your hands free to attempt to stun your opponent. + m.StunReady = false; + } + else if ( anatValue >= 80.0 && wresValue >= 80.0 ) + { + m.DisruptiveAction(); + m.StunReady = !m.StunReady; + m.SendLocalizedMessage( m.StunReady ? 1019011 : 1019012 ); + } + else + { + m.SendLocalizedMessage( 1004008 ); // You are not skilled enough to stun your opponent. + m.StunReady = false; + } + } + + private class MoveDelayTimer : Timer + { + private Mobile m_Mobile; + + public MoveDelayTimer( Mobile m ) : base( TimeSpan.FromSeconds( 10.0 ) ) + { + m_Mobile = m; + + Priority = TimerPriority.TwoFiftyMS; + + m_Mobile.BeginAction( typeof( Fists ) ); + } + + protected override void OnTick() + { + m_Mobile.EndAction( typeof( Fists ) ); + } + } + + private static void StartMoveDelay( Mobile m ) + { + new MoveDelayTimer( m ).Start(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Knives/BaseKnife.cs b/Scripts/Items/Weapons/Knives/BaseKnife.cs new file mode 100644 index 0000000..fac1fe6 --- /dev/null +++ b/Scripts/Items/Weapons/Knives/BaseKnife.cs @@ -0,0 +1,59 @@ +using System; +using Server; +using Server.Items; +using Server.Targets; + +namespace Server.Items +{ + public abstract class BaseKnife : BaseMeleeWeapon + { + public override int DefHitSound{ get{ return 0x23B; } } + public override int DefMissSound{ get{ return 0x238; } } + + public override SkillName DefSkill{ get{ return SkillName.Swords; } } + public override WeaponType DefType{ get{ return WeaponType.Slashing; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash1H; } } + + public BaseKnife( int itemID ) : base( itemID ) + { + } + + public BaseKnife( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + from.SendLocalizedMessage( 1010018 ); // What do you want to use this item on? + + from.Target = new BladedItemTarget( this ); + } + + public override void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + base.OnHit( attacker, defender, damageBonus ); + + if ( Poison != null && PoisonCharges > 0 ) + { + --PoisonCharges; + + if ( Utility.RandomDouble() >= 0.5 ) // 50% chance to poison + defender.ApplyPoison( attacker, Poison ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Knives/ButcherKnife.cs b/Scripts/Items/Weapons/Knives/ButcherKnife.cs new file mode 100644 index 0000000..b2dc43b --- /dev/null +++ b/Scripts/Items/Weapons/Knives/ButcherKnife.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13F6, 0x13F7 )] + public class ButcherKnife : BaseKnife + { + public override int UOStrengthReq{ get{ return 5; } } + public override int UOMinDamage{ get{ return 2; } } + public override int UOMaxDamage{ get{ return 14; } } + public override int UOSpeed{ get{ return 40; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 40; } } + + [Constructable] + public ButcherKnife() : base( 0x13F6 ) + { + Weight = 1.0; + } + + public ButcherKnife( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Knives/Cleaver.cs b/Scripts/Items/Weapons/Knives/Cleaver.cs new file mode 100644 index 0000000..f9b1e01 --- /dev/null +++ b/Scripts/Items/Weapons/Knives/Cleaver.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xEC3, 0xEC2 )] + public class Cleaver : BaseKnife + { + public override int UOStrengthReq{ get{ return 10; } } + public override int UOMinDamage{ get{ return 2; } } + public override int UOMaxDamage{ get{ return 13; } } + public override int UOSpeed{ get{ return 40; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 50; } } + + [Constructable] + public Cleaver() : base( 0xEC3 ) + { + Weight = 2.0; + } + + public Cleaver( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Knives/Dagger.cs b/Scripts/Items/Weapons/Knives/Dagger.cs new file mode 100644 index 0000000..5309d41 --- /dev/null +++ b/Scripts/Items/Weapons/Knives/Dagger.cs @@ -0,0 +1,47 @@ +using System; +using Server.Network; +using Server.Targeting; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xF52, 0xF51 )] + public class Dagger : BaseKnife + { + public override int UOStrengthReq{ get{ return 1; } } + public override int UOMinDamage{ get{ return 3; } } + public override int UOMaxDamage{ get{ return 15; } } + public override int UOSpeed{ get{ return 55; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 40; } } + + public override SkillName DefSkill{ get{ return SkillName.Fencing; } } + public override WeaponType DefType{ get{ return WeaponType.Piercing; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce1H; } } + + [Constructable] + public Dagger() : base( 0xF52 ) + { + Weight = 1.0; + } + + public Dagger( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Knives/SkinningKnife.cs b/Scripts/Items/Weapons/Knives/SkinningKnife.cs new file mode 100644 index 0000000..b5fac2d --- /dev/null +++ b/Scripts/Items/Weapons/Knives/SkinningKnife.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xEC4, 0xEC5 )] + public class SkinningKnife : BaseKnife + { + public override int UOStrengthReq{ get{ return 5; } } + public override int UOMinDamage{ get{ return 1; } } + public override int UOMaxDamage{ get{ return 10; } } + public override int UOSpeed{ get{ return 40; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 40; } } + + [Constructable] + public SkinningKnife() : base( 0xEC4 ) + { + Weight = 1.0; + } + + public SkinningKnife( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Knives/ThrowingDagger.cs b/Scripts/Items/Weapons/Knives/ThrowingDagger.cs new file mode 100644 index 0000000..04c6eb8 --- /dev/null +++ b/Scripts/Items/Weapons/Knives/ThrowingDagger.cs @@ -0,0 +1,125 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Items +{ + [FlipableAttribute( 0xF52, 0xF51 )] + public class ThrowingDagger : Item + { + public override string DefaultName + { + get { return "a throwing dagger"; } + } + + [Constructable] + public ThrowingDagger() : base( 0xF52 ) + { + Weight = 1.0; + Layer = Layer.OneHanded; + } + + public ThrowingDagger( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.Items.Contains( this ) ) + { + InternalTarget t = new InternalTarget( this ); + from.Target = t; + } + else + { + from.SendMessage( "You must be holding that weapon to use it." ); + } + } + + private class InternalTarget : Target + { + private ThrowingDagger m_Dagger; + + public InternalTarget( ThrowingDagger dagger ) : base( 10, false, TargetFlags.Harmful ) + { + m_Dagger = dagger; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Dagger.Deleted ) + { + return; + } + else if ( !from.Items.Contains( m_Dagger ) ) + { + from.SendMessage( "You must be holding that weapon to use it." ); + } + else if ( targeted is Mobile ) + { + Mobile m = (Mobile)targeted; + + if ( m != from && from.HarmfulCheck( m ) ) + { + Direction to = from.GetDirectionTo( m ); + + from.Direction = to; + + from.Animate( from.Mounted ? 26 : 9, 7, 1, true, false, 0 ); + + if ( Utility.RandomDouble() >= (Math.Sqrt( m.Dex / 100.0 ) * 0.8) ) + { + from.MovingEffect( m, 0x1BFE, 7, 1, false, false, 0x481, 0 ); + + Ultima.Damage( m, from, Utility.Random( 5, from.Str / 10 ) ); + + m_Dagger.MoveToWorld( m.Location, m.Map ); + } + else + { + int x = 0, y = 0; + + switch ( to & Direction.Mask ) + { + case Direction.North: --y; break; + case Direction.South: ++y; break; + case Direction.West: --x; break; + case Direction.East: ++x; break; + case Direction.Up: --x; --y; break; + case Direction.Down: ++x; ++y; break; + case Direction.Left: --x; ++y; break; + case Direction.Right: ++x; --y; break; + } + + x += Utility.Random( -1, 3 ); + y += Utility.Random( -1, 3 ); + + x += m.X; + y += m.Y; + + m_Dagger.MoveToWorld( new Point3D( x, y, m.Z ), m.Map ); + + from.MovingEffect( m_Dagger, 0x1BFE, 7, 1, false, false, 0x481, 0 ); + + from.SendMessage( "You miss." ); + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Maces/BaseBashing.cs b/Scripts/Items/Weapons/Maces/BaseBashing.cs new file mode 100644 index 0000000..accf489 --- /dev/null +++ b/Scripts/Items/Weapons/Maces/BaseBashing.cs @@ -0,0 +1,60 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public abstract class BaseBashing : BaseMeleeWeapon + { + public override int DefHitSound{ get{ return 0x233; } } + public override int DefMissSound{ get{ return 0x239; } } + + public override SkillName DefSkill{ get{ return SkillName.Bludgeoning; } } + public override WeaponType DefType{ get{ return WeaponType.Bashing; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Bash1H; } } + + public BaseBashing( int itemID ) : base( itemID ) + { + } + + public BaseBashing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + base.OnHit( attacker, defender, damageBonus ); + + defender.Stam -= Utility.Random( 3, 3 ); // 3-5 points of stamina loss + } + + public override double GetBaseDamage( Mobile attacker ) + { + double damage = base.GetBaseDamage( attacker ); + + if ( (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && (attacker.Skills[SkillName.Tactics].Value / 400.0) >= Utility.RandomDouble() ) + { + damage *= 1.5; + + attacker.SendMessage( "You deliver a crushing blow!" ); // Is this not localized? + attacker.PlaySound( 0x11C ); + } + + return damage; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Maces/Club.cs b/Scripts/Items/Weapons/Maces/Club.cs new file mode 100644 index 0000000..6ae6cc1 --- /dev/null +++ b/Scripts/Items/Weapons/Maces/Club.cs @@ -0,0 +1,43 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13b4, 0x13b3 )] + public class Club : BaseBashing + { + public override int UOStrengthReq{ get{ return 10; } } + public override int UOMinDamage{ get{ return 8; } } + public override int UOMaxDamage{ get{ return 24; } } + public override int UOSpeed{ get{ return 40; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 40; } } + + [Constructable] + public Club() : base( 0x13B4 ) + { + Weight = 9.0; + Resource = CraftResource.Wooden; + } + + public Club( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Maces/HammerPick.cs b/Scripts/Items/Weapons/Maces/HammerPick.cs new file mode 100644 index 0000000..7d1a4d7 --- /dev/null +++ b/Scripts/Items/Weapons/Maces/HammerPick.cs @@ -0,0 +1,43 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x143D, 0x143C )] + public class HammerPick : BaseBashing + { + public override int UOStrengthReq{ get{ return 35; } } + public override int UOMinDamage{ get{ return 6; } } + public override int UOMaxDamage{ get{ return 33; } } + public override int UOSpeed{ get{ return 30; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + [Constructable] + public HammerPick() : base( 0x143D ) + { + Weight = 9.0; + Layer = Layer.OneHanded; + } + + public HammerPick( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Maces/Mace.cs b/Scripts/Items/Weapons/Maces/Mace.cs new file mode 100644 index 0000000..6ce0089 --- /dev/null +++ b/Scripts/Items/Weapons/Maces/Mace.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xF5C, 0xF5D )] + public class Mace : BaseBashing + { + public override int UOStrengthReq{ get{ return 20; } } + public override int UOMinDamage{ get{ return 8; } } + public override int UOMaxDamage{ get{ return 32; } } + public override int UOSpeed{ get{ return 30; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + [Constructable] + public Mace() : base( 0xF5C ) + { + Weight = 14.0; + } + + public Mace( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Maces/Maul.cs b/Scripts/Items/Weapons/Maces/Maul.cs new file mode 100644 index 0000000..e8eadd1 --- /dev/null +++ b/Scripts/Items/Weapons/Maces/Maul.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x143B, 0x143A )] + public class Maul : BaseBashing + { + public override int UOStrengthReq{ get{ return 20; } } + public override int UOMinDamage{ get{ return 10; } } + public override int UOMaxDamage{ get{ return 30; } } + public override int UOSpeed{ get{ return 30; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + [Constructable] + public Maul() : base( 0x143B ) + { + Weight = 10.0; + } + + public Maul( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 14.0 ) + Weight = 10.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Maces/WarHammer.cs b/Scripts/Items/Weapons/Maces/WarHammer.cs new file mode 100644 index 0000000..e4f2c09 --- /dev/null +++ b/Scripts/Items/Weapons/Maces/WarHammer.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1439, 0x1438 )] + public class WarHammer : BaseBashing + { + public override int UOStrengthReq{ get{ return 40; } } + public override int UOMinDamage{ get{ return 8; } } + public override int UOMaxDamage{ get{ return 36; } } + public override int UOSpeed{ get{ return 31; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 110; } } + + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Bash2H; } } + + [Constructable] + public WarHammer() : base( 0x1439 ) + { + Weight = 10.0; + Layer = Layer.TwoHanded; + } + + public WarHammer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Maces/WarMace.cs b/Scripts/Items/Weapons/Maces/WarMace.cs new file mode 100644 index 0000000..339e154 --- /dev/null +++ b/Scripts/Items/Weapons/Maces/WarMace.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1407, 0x1406 )] + public class WarMace : BaseBashing + { + public override int UOStrengthReq{ get{ return 30; } } + public override int UOMinDamage{ get{ return 10; } } + public override int UOMaxDamage{ get{ return 30; } } + public override int UOSpeed{ get{ return 32; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 110; } } + + [Constructable] + public WarMace() : base( 0x1407 ) + { + Weight = 17.0; + } + + public WarMace( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Maces/Whip.cs b/Scripts/Items/Weapons/Maces/Whip.cs new file mode 100644 index 0000000..8e50cf4 --- /dev/null +++ b/Scripts/Items/Weapons/Maces/Whip.cs @@ -0,0 +1,46 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x26BB, 0x26C5 )] + public class Whip : BaseBashing + { + public override int UOStrengthReq{ get{ return 10; } } + public override int UOMinDamage{ get{ return 8; } } + public override int UOMaxDamage{ get{ return 24; } } + public override int UOSpeed{ get{ return 40; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 40; } } + + public override int DefHitSound{ get{ return 0x5D0; } } + public override int DefMissSound{ get{ return 0x5D1; } } + + [Constructable] + public Whip() : base( 0x26BB ) + { + Weight = 6.0; + Name = "whip"; + Resource = CraftResource.Leathered; + Hue = 0x4A8; + } + + public Whip( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/PoleArms/Bardiche.cs b/Scripts/Items/Weapons/PoleArms/Bardiche.cs new file mode 100644 index 0000000..b352922 --- /dev/null +++ b/Scripts/Items/Weapons/PoleArms/Bardiche.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xF4D, 0xF4E )] + public class Bardiche : BasePoleArm + { + public override int UOStrengthReq{ get{ return 40; } } + public override int UOMinDamage{ get{ return 5; } } + public override int UOMaxDamage{ get{ return 43; } } + public override int UOSpeed{ get{ return 26; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 100; } } + + [Constructable] + public Bardiche() : base( 0xF4D ) + { + Weight = 7.0; + } + + public Bardiche( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/PoleArms/BasePoleArm.cs b/Scripts/Items/Weapons/PoleArms/BasePoleArm.cs new file mode 100644 index 0000000..df8b016 --- /dev/null +++ b/Scripts/Items/Weapons/PoleArms/BasePoleArm.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Engines.Harvest; +using Server.ContextMenus; + +namespace Server.Items +{ + public abstract class BasePoleArm : BaseMeleeWeapon, IUsesRemaining + { + public override int DefHitSound{ get{ return 0x237; } } + public override int DefMissSound{ get{ return 0x238; } } + + public override SkillName DefSkill{ get{ return SkillName.Swords; } } + public override WeaponType DefType{ get{ return WeaponType.Polearm; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash2H; } } + + public virtual HarvestSystem HarvestSystem{ get{ return Lumberjacking.System; } } + + private int m_UsesRemaining; + private bool m_ShowUsesRemaining; + + [CommandProperty( AccessLevel.GameMaster )] + public int UsesRemaining + { + get { return m_UsesRemaining; } + set { m_UsesRemaining = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool ShowUsesRemaining + { + get { return m_ShowUsesRemaining; } + set { m_ShowUsesRemaining = value; InvalidateProperties(); } + } + + public BasePoleArm( int itemID ) : base( itemID ) + { + m_UsesRemaining = 150; + } + + public BasePoleArm( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( HarvestSystem == null ) + return; + + if ( IsChildOf( from.Backpack ) || Parent == from ) + HarvestSystem.BeginHarvesting( from, this ); + else + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + writer.Write( (bool) m_ShowUsesRemaining ); + + writer.Write( (int) m_UsesRemaining ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + { + m_ShowUsesRemaining = reader.ReadBool(); + goto case 1; + } + case 1: + { + m_UsesRemaining = reader.ReadInt(); + goto case 0; + } + case 0: + { + if ( m_UsesRemaining < 1 ) + m_UsesRemaining = 150; + + break; + } + } + } + + public override void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + base.OnHit( attacker, defender, damageBonus ); + + if ( (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && (attacker.Skills[SkillName.Tactics].Value / 400.0) >= Utility.RandomDouble() ) + { + StatMod mod = defender.GetStatMod( "Concussion" ); + + if ( mod == null ) + { + defender.SendMessage( "You receive a concussion blow!" ); + defender.AddStatMod( new StatMod( StatType.Int, "Concussion", -(defender.RawInt / 2), TimeSpan.FromSeconds( 30.0 ) ) ); + + attacker.SendMessage( "You deliver a concussion blow!" ); + attacker.PlaySound( 0x11C ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/PoleArms/Halberd.cs b/Scripts/Items/Weapons/PoleArms/Halberd.cs new file mode 100644 index 0000000..46d35ff --- /dev/null +++ b/Scripts/Items/Weapons/PoleArms/Halberd.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x143E, 0x143F )] + public class Halberd : BasePoleArm + { + public override int UOStrengthReq{ get{ return 45; } } + public override int UOMinDamage{ get{ return 5; } } + public override int UOMaxDamage{ get{ return 49; } } + public override int UOSpeed{ get{ return 25; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 80; } } + + [Constructable] + public Halberd() : base( 0x143E ) + { + Weight = 16.0; + } + + public Halberd( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/PoleArms/Scythe.cs b/Scripts/Items/Weapons/PoleArms/Scythe.cs new file mode 100644 index 0000000..71350c5 --- /dev/null +++ b/Scripts/Items/Weapons/PoleArms/Scythe.cs @@ -0,0 +1,48 @@ +using System; +using Server.Network; +using Server.Items; +using Server.Engines.Harvest; + +namespace Server.Items +{ + [FlipableAttribute( 0x26BA, 0x26C4 )] + public class Scythe : BasePoleArm + { + public override int UOStrengthReq{ get{ return 45; } } + public override int UOMinDamage{ get{ return 15; } } + public override int UOMaxDamage{ get{ return 18; } } + public override int UOSpeed{ get{ return 32; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 100; } } + + public override HarvestSystem HarvestSystem{ get{ return null; } } + + [Constructable] + public Scythe() : base( 0x26BA ) + { + Weight = 5.0; + } + + public Scythe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 15.0 ) + Weight = 5.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Ranged/BaseRanged.cs b/Scripts/Items/Weapons/Ranged/BaseRanged.cs new file mode 100644 index 0000000..938aa00 --- /dev/null +++ b/Scripts/Items/Weapons/Ranged/BaseRanged.cs @@ -0,0 +1,111 @@ +using System; +using Server.Items; +using Server.Network; +using Server.Spells; +using Server.Mobiles; + +namespace Server.Items +{ + public abstract class BaseRanged : BaseMeleeWeapon + { + public abstract int EffectID{ get; } + public abstract Type AmmoType{ get; } + public abstract Item Ammo{ get; } + + public override int DefHitSound{ get{ return 0x234; } } + public override int DefMissSound{ get{ return 0x238; } } + + public override SkillName DefSkill{ get{ return SkillName.Archery; } } + public override WeaponType DefType{ get{ return WeaponType.Ranged; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.ShootXBow; } } + + public override SkillName AccuracySkill{ get{ return SkillName.Archery; } } + + private Timer m_RecoveryTimer; // so we don't start too many timers + + public BaseRanged( int itemID ) : base( itemID ) + { + } + + public BaseRanged( Serial serial ) : base( serial ) + { + } + + public override TimeSpan OnSwing( Mobile attacker, Mobile defender ) + { + // Make sure we've been standing still for .25/.5/1 second depending on Era + if ( DateTime.Now > (attacker.LastMoveTime + TimeSpan.FromSeconds( 1.0 )) ) + { + bool canSwing = true; + + if ( canSwing && attacker.HarmfulCheck( defender ) ) + { + attacker.DisruptiveAction(); + attacker.Send( new Swing( 0, attacker, defender ) ); + + if ( OnFired( attacker, defender ) ) + { + if ( CheckHit( attacker, defender ) ) + OnHit( attacker, defender ); + else + OnMiss( attacker, defender ); + } + } + + attacker.RevealingAction(); + + return GetDelay( attacker ); + } + else + { + attacker.RevealingAction(); + + return TimeSpan.FromSeconds( 0.25 ); + } + } + + public override void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + if ( attacker.Player && !defender.Player && (defender.Body.IsAnimal || defender.Body.IsMonster) && 0.4 >= Utility.RandomDouble() ) + defender.AddToBackpack( Ammo ); + + base.OnHit( attacker, defender, damageBonus ); + } + + public override void OnMiss( Mobile attacker, Mobile defender ) + { + if ( attacker.Player && 0.4 >= Utility.RandomDouble() ) + { + Ammo.MoveToWorld( new Point3D( defender.X + Utility.RandomMinMax( -1, 1 ), defender.Y + Utility.RandomMinMax( -1, 1 ), defender.Z ), defender.Map ); + } + + base.OnMiss( attacker, defender ); + } + + public virtual bool OnFired( Mobile attacker, Mobile defender ) + { + Container pack = attacker.Backpack; + + if ( pack == null || !pack.ConsumeTotal( AmmoType, 1 ) ) + return false; + + attacker.MovingEffect( defender, EffectID, 18, 1, false, false ); + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Ranged/Bow.cs b/Scripts/Items/Weapons/Ranged/Bow.cs new file mode 100644 index 0000000..c7d7584 --- /dev/null +++ b/Scripts/Items/Weapons/Ranged/Bow.cs @@ -0,0 +1,54 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13B2, 0x13B1 )] + public class Bow : BaseRanged + { + public override int EffectID{ get{ return 0xF42; } } + public override Type AmmoType{ get{ return typeof( Arrow ); } } + public override Item Ammo{ get{ return new Arrow(); } } + + public override int UOStrengthReq{ get{ return 20; } } + public override int UOMinDamage{ get{ return 9; } } + public override int UOMaxDamage{ get{ return 41; } } + public override int UOSpeed{ get{ return 20; } } + + public override int DefMaxRange{ get{ return 10; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 60; } } + + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.ShootBow; } } + + [Constructable] + public Bow() : base( 0x13B2 ) + { + Weight = 6.0; + Layer = Layer.TwoHanded; + } + + public Bow( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 7.0 ) + Weight = 6.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Ranged/Crossbow.cs b/Scripts/Items/Weapons/Ranged/Crossbow.cs new file mode 100644 index 0000000..5dbca6c --- /dev/null +++ b/Scripts/Items/Weapons/Ranged/Crossbow.cs @@ -0,0 +1,49 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xF50, 0xF4F )] + public class Crossbow : BaseRanged + { + public override int EffectID{ get{ return 0x1BFE; } } + public override Type AmmoType{ get{ return typeof( Bolt ); } } + public override Item Ammo{ get{ return new Bolt(); } } + + public override int UOStrengthReq{ get{ return 30; } } + public override int UOMinDamage{ get{ return 8; } } + public override int UOMaxDamage{ get{ return 43; } } + public override int UOSpeed{ get{ return 18; } } + + public override int DefMaxRange{ get{ return 8; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 80; } } + + [Constructable] + public Crossbow() : base( 0xF50 ) + { + Weight = 7.0; + Layer = Layer.TwoHanded; + } + + public Crossbow( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Ranged/HeavyCrossbow.cs b/Scripts/Items/Weapons/Ranged/HeavyCrossbow.cs new file mode 100644 index 0000000..b41aff0 --- /dev/null +++ b/Scripts/Items/Weapons/Ranged/HeavyCrossbow.cs @@ -0,0 +1,49 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13FD, 0x13FC )] + public class HeavyCrossbow : BaseRanged + { + public override int EffectID{ get{ return 0x1BFE; } } + public override Type AmmoType{ get{ return typeof( Bolt ); } } + public override Item Ammo{ get{ return new Bolt(); } } + + public override int UOStrengthReq{ get{ return 40; } } + public override int UOMinDamage{ get{ return 11; } } + public override int UOMaxDamage{ get{ return 56; } } + public override int UOSpeed{ get{ return 10; } } + + public override int DefMaxRange{ get{ return 8; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 100; } } + + [Constructable] + public HeavyCrossbow() : base( 0x13FD ) + { + Weight = 9.0; + Layer = Layer.TwoHanded; + } + + public HeavyCrossbow( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/SlayerEntry.cs b/Scripts/Items/Weapons/SlayerEntry.cs new file mode 100644 index 0000000..0d6c60c --- /dev/null +++ b/Scripts/Items/Weapons/SlayerEntry.cs @@ -0,0 +1,81 @@ +using System; +using Server; +using Server.Mobiles; + +namespace Server.Items +{ + public class SlayerEntry + { + private SlayerGroup m_Group; + private SlayerName m_Name; + private Type[] m_Types; + + public SlayerGroup Group{ get{ return m_Group; } set{ m_Group = value; } } + public SlayerName Name{ get{ return m_Name; } } + public Type[] Types{ get{ return m_Types; } } + + private static int[] m_OldTitles = new int[] + { + 1017384, // Undead Doom + 1017379, // Giant's Fall + 1017385, // Orc Slaying + 1017386, // Troll Slaughter + 1017387, // Ogre Thrashing + 1017388, // Executioner + 1017389, // Dragon Slaying + 1017390, // Insectoid Extermination + 1017391, // Serpent Bane + 1017392, // Lizardman Slaughter + 1017393, // Reptilian Death + 1017394, // Daemon Dismissal + 1017395, // Gargoyle's Foe + 1017396, // Devilish Damnation + 1017397, // Exorcism + 1017398, // Serpentoid Massacre + 1017399, // Spider's Death + 1017400, // Scorpion's Bane + 1017401, // Bug Butcher + 1017402, // Flame Dousing + 1017403, // Water Evaporation + 1017404, // Air Abolish + 1017405, // Elemental Health + 1017406, // Stone Shatter + 1017407, // Blood Drinking + 1017408, // Summer Breeze + 1017409, // Elemental Ban + 1070855, // Nature's Fury + 1017378, // Sea Slaughter + 1017377, // Goblinoid Hunter + 1017376 // Weed Wrecker + }; + + public int Title + { + get + { + int[] titles = ( m_OldTitles ); + + return titles[(int)m_Name - 1]; + } + } + + public SlayerEntry( SlayerName name, params Type[] types ) + { + m_Name = name; + m_Types = types; + } + + public bool Slays( Mobile m ) + { + Type t = m.GetType(); + + for ( int i = 0; i < m_Types.Length; ++i ) + { + if ( m_Types[i] == t ) + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/SlayerGroup.cs b/Scripts/Items/Weapons/SlayerGroup.cs new file mode 100644 index 0000000..67e447b --- /dev/null +++ b/Scripts/Items/Weapons/SlayerGroup.cs @@ -0,0 +1,667 @@ +using System; +using Server; +using Server.Mobiles; + +namespace Server.Items +{ + public class SlayerGroup + { + private static SlayerEntry[] m_TotalEntries; + private static SlayerGroup[] m_Groups; + + public static SlayerEntry[] TotalEntries + { + get{ return m_TotalEntries; } + } + + public static SlayerGroup[] Groups + { + get{ return m_Groups; } + } + + public static SlayerEntry GetEntryByName( SlayerName name ) + { + int v = (int)name; + + if ( v >= 0 && v < m_TotalEntries.Length ) + return m_TotalEntries[v]; + + return null; + } + + public static SlayerName GetLootSlayerType() + { + SlayerName slayer = SlayerName.UndeadDoom; + + if ( Utility.RandomMinMax(1,10) == 1 ) + { + switch ( Utility.Random( 7 )) + { + case 0: slayer = SlayerName.UndeadDoom; break; + case 1: slayer = SlayerName.Executioner; break; + case 2: slayer = SlayerName.DragonSlaying; break; + case 3: slayer = SlayerName.ElementalBan; break; + case 4: slayer = SlayerName.Exorcism; break; + case 5: slayer = SlayerName.BugButcher; break; + case 6: slayer = SlayerName.ReptilianDeath; break; + } + } + else + { + switch ( Utility.Random( 24 )) + { + case 0: slayer = SlayerName.GiantsFall; break; + case 1: slayer = SlayerName.OrcSlaying; break; + case 2: slayer = SlayerName.TrollSlaughter; break; + case 3: slayer = SlayerName.OgreTrashing; break; + case 4: slayer = SlayerName.InsectoidExtermination; break; + case 5: slayer = SlayerName.SerpentBane; break; + case 6: slayer = SlayerName.LizardmanSlaughter; break; + case 7: slayer = SlayerName.DaemonDismissal; break; + case 8: slayer = SlayerName.GargoylesFoe; break; + case 9: slayer = SlayerName.DevilishDamnation; break; + case 10: slayer = SlayerName.SerpentoidMassacre; break; + case 11: slayer = SlayerName.SpidersDeath; break; + case 12: slayer = SlayerName.ScorpionsBane; break; + case 13: slayer = SlayerName.FlameDousing; break; + case 14: slayer = SlayerName.WaterEvaporation; break; + case 15: slayer = SlayerName.AirAbolish; break; + case 16: slayer = SlayerName.ElementalHealth; break; + case 17: slayer = SlayerName.StoneShatter; break; + case 18: slayer = SlayerName.BloodDrinking; break; + case 19: slayer = SlayerName.SummerBreeze; break; + case 20: slayer = SlayerName.NaturesFury; break; + case 21: slayer = SlayerName.SeaSlaughter; break; + case 22: slayer = SlayerName.GoblinoidHunter; break; + case 23: slayer = SlayerName.WeedWrecker; break; + } + } + + return slayer; + } + + static SlayerGroup() + { + SlayerGroup humanoid = new SlayerGroup(); + SlayerGroup undead = new SlayerGroup(); + SlayerGroup elemental = new SlayerGroup(); + SlayerGroup abyss = new SlayerGroup(); + SlayerGroup arachnid = new SlayerGroup(); + SlayerGroup reptilian = new SlayerGroup(); + SlayerGroup nature = new SlayerGroup(); + SlayerGroup sea = new SlayerGroup(); + SlayerGroup weed = new SlayerGroup(); + + // -------------------------------------------------------------------------------------------------------------------------------------- + + humanoid.Super = new SlayerEntry( SlayerName.Executioner, + typeof( Goblin ), + typeof( GoblinArcher ), + typeof( GoblinWarrior ), + typeof( Minotaur ), + typeof( MinotaurChief ), + typeof( MinotaurLord ), + typeof( Yeti ), + typeof( Bugbear ), + typeof( ArcticOgreLord ), + typeof( Pharaoh ), + typeof( Brigand ), + typeof( BlackKnight ), + typeof( Caveman ), + typeof( Cyclops ), + typeof( CyclopsChief ), + typeof( CyclopsLord ), + typeof( Dwarf ), + typeof( DwarfWarrior ), + typeof( DwarfKnight ), + typeof( Ettin ), + typeof( EvilMage ), + typeof( EvilMageLord ), + typeof( FrostTroll ), + typeof( Hobgoblin ), + typeof( HobgoblinChief ), + typeof( HobgoblinArcher ), + typeof( HobgoblinShaman ), + typeof( Ogre ), + typeof( OgreLord ), + typeof( OgreMagi ), + typeof( Orc ), + typeof( OrcCaptain ), + typeof( OrcishLord ), + typeof( OrcishMage ), + typeof( ForestGiant ), + typeof( HillGiant ), + typeof( MountainGiant ), + typeof( FrostGiant ), + typeof( SnowEttin ), + typeof( ShadowTitan ), + typeof( SandGiant ), + typeof( JungleGiant ), + typeof( Pirate ), + typeof( Ratman ), + typeof( RatmanArcher ), + typeof( RatmanMage ), + typeof( SavageShaman ), + typeof( Savage ), + typeof( SavageLeader ), + typeof( StormGiant ), + typeof( Titan ), + typeof( SeaGiant ), + typeof( Troll ) ); + humanoid.Entries = new SlayerEntry[] + { + new SlayerEntry( SlayerName.GiantsFall, + typeof( ArcticOgreLord ), + typeof( Cyclops ), + typeof( CyclopsChief ), + typeof( CyclopsLord ), + typeof( Ettin ), + typeof( FrostTroll ), + typeof( ForestGiant ), + typeof( HillGiant ), + typeof( MountainGiant ), + typeof( FrostGiant ), + typeof( SnowEttin ), + typeof( ShadowTitan ), + typeof( SandGiant ), + typeof( JungleGiant ), + typeof( Ogre ), + typeof( OgreLord ), + typeof( StormGiant ), + typeof( Titan ), + typeof( SeaGiant ), + typeof( Troll ) ), + new SlayerEntry( SlayerName.OgreTrashing, + typeof( Ogre ), + typeof( OgreLord ), + typeof( OgreMagi ), + typeof( ArcticOgreLord ) ), + new SlayerEntry( SlayerName.OrcSlaying, + typeof( Orc ), + typeof( OrcCaptain ), + typeof( OrcishLord ), + typeof( OrcishMage ) ), + new SlayerEntry( SlayerName.GoblinoidHunter, + typeof( GoblinWarrior ), + typeof( Goblin ), + typeof( GoblinArcher ), + typeof( Hobgoblin ), + typeof( HobgoblinChief ), + typeof( HobgoblinArcher ), + typeof( HobgoblinShaman ) ), + new SlayerEntry( SlayerName.TrollSlaughter, + typeof( Troll ), + typeof( FrostTroll ) ) + }; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + undead.Super = new SlayerEntry( SlayerName.UndeadDoom, + typeof( ZombieGargoyle ), + typeof( GargoyleUndead ), + typeof( CorpseGolem ), + typeof( FleshGolem ), + typeof( FleshGoliath ), + typeof( AncientLich ), + typeof( BoneKnight ), + typeof( BoneMagi ), + typeof( Ghoul ), + typeof( Wight ), + typeof( Lich ), + typeof( LichLord ), + typeof( Nazghoul ), + typeof( Demilich ), + typeof( DemonicSpirit ), + typeof( Mummy ), + typeof( MummyLord ), + typeof( RottingCorpse ), + typeof( Shade ), + typeof( SkeletalDragon ), + typeof( VampiricDragon ), + typeof( ZombieDragon ), + typeof( BoneDrake ), + typeof( VampiricDrake ), + typeof( RottingDrake ), + typeof( SkeletalKnight ), + typeof( SkeletalMage ), + typeof( Skeleton ), + typeof( BoneClaw ), + typeof( SkeletonArcher ), + typeof( Spectre ), + typeof( Vampire ), + typeof( VampireLord ), + typeof( AncientVampire ), + typeof( Wraith ), + typeof( Zombie ) ); + undead.Entries = new SlayerEntry[0]; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + nature.Super = new SlayerEntry( SlayerName.NaturesFury, + typeof( Centaur ), + typeof( Pixie ), + typeof( Fairy ), + typeof( Satyr ), + typeof( Ent ), + typeof( Unicorn ), + typeof( DreadHorn ), + typeof( Wisp ) ); + nature.Entries = new SlayerEntry[0]; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + sea.Super = new SlayerEntry( SlayerName.SeaSlaughter, + typeof( WaterElemental ), + typeof( DeepSeaElemental ), + typeof( Typhoon ), + typeof( DeepSeaSerpent ), + typeof( SeaSerpent ), + typeof( GiantEel ), + typeof( SeaDevil ), + typeof( Kraken ), + typeof( Dagon ), + typeof( Krakoa ), + typeof( Turtle ), + typeof( Ktulu ), + typeof( Lurker ), + typeof( Dolphin ), + typeof( GreatWhite ), + typeof( SeaDrake ), + typeof( SeaDragon ), + typeof( GiantCrab ), + typeof( Lobstran ), + typeof( Lochasaur ), + typeof( Megalodon ), + typeof( Sahuagin ), + typeof( SahuaginMage ), + typeof( Shark ), + typeof( Seahorse ), + typeof( SeaGiant ), + typeof( WaterElementalElder ), + typeof( Leviathan ) ); + sea.Entries = new SlayerEntry[0]; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + weed.Super = new SlayerEntry( SlayerName.WeedWrecker, + typeof( WhippingVine ), + typeof( SwampTentacle ), + typeof( Reaper ), + typeof( SwampThing ), + typeof( Fungal ), + typeof( FungalMage ), + typeof( WoodElemental ), + typeof( Ent ), + typeof( Shambler ), + typeof( ShamblingMound ), + typeof( BloodLotus ), + typeof( Corpser ) ); + weed.Entries = new SlayerEntry[0]; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + elemental.Super = new SlayerEntry( SlayerName.ElementalBan, + typeof( BloodElementalElder ), + typeof( PoisonElementalElder ), + typeof( WaterElementalElder ), + typeof( MeteorElemental ), + typeof( DeepSeaElemental ), + typeof( AcidElemental ), + typeof( AirElemental ), + typeof( BloodElemental ), + typeof( EarthElemental ), + typeof( StoneGolem ), + typeof( StoneStatue ), + typeof( Goliath ), + typeof( MudElemental ), + typeof( MagmaElemental ), + typeof( WoodElemental ), + typeof( Efreet ), + typeof( FireElemental ), + typeof( IceElemental ), + typeof( LightningElemental ), + typeof( PoisonElemental ), + typeof( GasCloud ), + typeof( StormCloud ), + typeof( SandVortex ), + typeof( SnowElemental ), + typeof( Typhoon ), + typeof( WaterElemental ) ); + elemental.Entries = new SlayerEntry[] + { + new SlayerEntry( SlayerName.BloodDrinking, + typeof( BloodElementalElder ), + typeof( BloodElemental ) ), + new SlayerEntry( SlayerName.StoneShatter, + typeof( StoneGolem ), + typeof( StoneStatue ), + typeof( MeteorElemental ), + typeof( Goliath ), + typeof( MudElemental ), + typeof( MagmaElemental ), + typeof( EarthElemental ) ), + new SlayerEntry( SlayerName.ElementalHealth, + typeof( PoisonElementalElder ), + typeof( GasCloud ), + typeof( PoisonElemental ) ), + new SlayerEntry( SlayerName.FlameDousing, + typeof( FireElemental ) ), + new SlayerEntry( SlayerName.SummerBreeze, + typeof( SnowElemental ), + typeof( IceElemental ) ), + new SlayerEntry( SlayerName.AirAbolish, + typeof( LightningElemental ), + typeof( AirElemental ) ), + new SlayerEntry( SlayerName.WaterEvaporation, + typeof( Typhoon ), + typeof( StormCloud ), + typeof( WaterElementalElder ), + typeof( DeepSeaElemental ), + typeof( WaterElemental ) ) + }; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + abyss.Super = new SlayerEntry( SlayerName.Exorcism, + typeof( Balron ), + typeof( SeaDevil ), + typeof( Daemon ), + typeof( ShadowDemon ), + typeof( Minion ), + typeof( MinionWizard ), + typeof( MinionWarrior ), + typeof( Ktulu ), + typeof( Deviless ), + typeof( HornedDevil ), + typeof( Gargoyle ), + typeof( GargoyleMage ), + typeof( GargoyleKnight ), + typeof( GargoyleIce ), + typeof( GargoyleStone ), + typeof( GargoyleWizard ), + typeof( GargoyleCrimson ), + typeof( FireGargoyle ), + typeof( DemonicSpirit ), + typeof( DemonClaw ), + typeof( Demoness ), + typeof( IceFiend ), + typeof( IceDevil ), + typeof( Imp ), + typeof( FireImp ), + typeof( IceImp ), + typeof( Succubus ), + typeof( SuccubusQueen ), + typeof( StoneGargoyle ) ); + + abyss.Entries = new SlayerEntry[] + { + new SlayerEntry( SlayerName.DaemonDismissal, + typeof( Daemon ), + typeof( ShadowDemon ), + typeof( Ktulu ), + typeof( Deviless ), + typeof( IceFiend ), + typeof( DemonClaw ), + typeof( Demoness ), + typeof( Imp ), + typeof( FireImp ), + typeof( DemonicSpirit ), + typeof( IceImp ), + typeof( Succubus ), + typeof( SuccubusQueen ) ), + new SlayerEntry( SlayerName.GargoylesFoe, + typeof( FireGargoyle ), + typeof( Gargoyle ), + typeof( GargoyleMage ), + typeof( GargoyleKnight ), + typeof( GargoyleIce ), + typeof( GargoyleStone ), + typeof( GargoyleWizard ), + typeof( GargoyleCrimson ), + typeof( StoneGargoyle ) ), + new SlayerEntry( SlayerName.DevilishDamnation, + typeof( IceDevil ), + typeof( SeaDevil ), + typeof( Minion ), + typeof( MinionWizard ), + typeof( MinionWarrior ), + typeof( HornedDevil ), + typeof( Balron ) ) + }; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + arachnid.Super = new SlayerEntry( SlayerName.BugButcher, + typeof( DreadSpider ), + typeof( FrostSpider ), + typeof( GiantBlackWidow ), + typeof( BloodSpider ), + typeof( Kith ), + typeof( WidowQueen ), + typeof( GiantSpider ), + typeof( FlameCrawler ), + typeof( Scorpion ), + typeof( Mantis ), + typeof( ArcaneScarab ), + typeof( Shaclaw ), + typeof( FireBeetle ), + typeof( GoraxHorned ), + typeof( GoraxSlicer ), + typeof( Swarm ), + typeof( AntLion ), + typeof( SandScorpion ), + typeof( Scarab ), + typeof( GiantScarab ), + typeof( DeadlyScorpion ), + typeof( Beetle ), + typeof( IronBeetle ), + typeof( CarcassWorm ), + typeof( AntaurWorker ), + typeof( AntaurSoldier ), + typeof( AntaurLord ), + typeof( AntaurQueen ), + typeof( TerathanAvenger ), + typeof( TerathanDrone ), + typeof( TerathanMatriarch ), + typeof( TerathanWarrior ) ); + arachnid.Entries = new SlayerEntry[] + { + new SlayerEntry( SlayerName.ScorpionsBane, + typeof( FlameCrawler ), + typeof( SandScorpion ), + typeof( DeadlyScorpion ), + typeof( Scorpion ) ), + new SlayerEntry( SlayerName.SpidersDeath, + typeof( Kith ), + typeof( DreadSpider ), + typeof( FrostSpider ), + typeof( GiantBlackWidow ), + typeof( BloodSpider ), + typeof( WidowQueen ), + typeof( GiantSpider ) ), + new SlayerEntry( SlayerName.InsectoidExtermination, + typeof( AntaurWorker ), + typeof( AntaurSoldier ), + typeof( AntaurLord ), + typeof( AntaurQueen ), + typeof( TerathanAvenger ), + typeof( TerathanDrone ), + typeof( TerathanMatriarch ), + typeof( TerathanWarrior ) ) + }; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + reptilian.Super = new SlayerEntry( SlayerName.ReptilianDeath, + typeof( SeaDragon ), + typeof( AncientWyrm ), + typeof( DeepSeaSerpent ), + typeof( GiantEel ), + typeof( Dragon ), + typeof( Drakkhen ), + typeof( DragonTurtle ), + typeof( Turtle ), + typeof( Drake ), + typeof( LavaDrake ), + typeof( SeaDrake ), + typeof( SwampDragon ), + typeof( Serperus ), + typeof( IceSerpent ), + typeof( GiantSerpent ), + typeof( Torax ), + typeof( GiantLizard ), + typeof( GiantToad ), + typeof( IceToad ), + typeof( FireToad ), + typeof( BullFrog ), + typeof( Viper ), + typeof( LavaSerpent ), + typeof( Cobra ), + typeof( Lizardman ), + typeof( Drasolisk ), + typeof( Silisk ), + typeof( Sakkhra ), + typeof( SakkhraShaman ), + typeof( Naga ), + typeof( NagaWarrior ), + typeof( NagaQueen ), + typeof( FireNaga ), + typeof( OphidianArchmage ), + typeof( Teradactyl ), + typeof( Stegosaurus ), + typeof( Meglasaur ), + typeof( Gorceratops ), + typeof( Lochasaur ), + typeof( Tyranasaur ), + typeof( Kobra ), + typeof( OphidianKnight ), + typeof( OphidianMage ), + typeof( OphidianMatriarch ), + typeof( OphidianWarrior ), + typeof( Hydra ), + typeof( SeaHydra ), + typeof( Medusa ), + typeof( IceSalamander ), + typeof( FireSalamander ), + typeof( Raptor ), + typeof( SeaSerpent ), + typeof( ShadowWyrm ), + typeof( SilverSerpent ), + typeof( SkeletalDragon ), + typeof( VampiricDragon ), + typeof( ZombieDragon ), + typeof( BoneDrake ), + typeof( VampiricDrake ), + typeof( RottingDrake ), + typeof( Snake ), + typeof( WhiteWyrm ), + typeof( AncientWyvern ), + typeof( Wyvern ) ); + reptilian.Entries = new SlayerEntry[] + { + new SlayerEntry( SlayerName.DragonSlaying, + typeof( AncientWyrm ), + typeof( Dragon ), + typeof( Drakkhen ), + typeof( Drake ), + typeof( LavaDrake ), + typeof( SeaDrake ), + typeof( SwampDragon ), + typeof( ShadowWyrm ), + typeof( DragonTurtle ), + typeof( SkeletalDragon ), + typeof( VampiricDragon ), + typeof( BoneDrake ), + typeof( ZombieDragon ), + typeof( RottingDrake ), + typeof( VampiricDrake ), + typeof( SeaDragon ), + typeof( WhiteWyrm ), + typeof( AncientWyvern ), + typeof( Wyvern ) ), + new SlayerEntry( SlayerName.LizardmanSlaughter, + typeof( Drasolisk ), + typeof( Silisk ), + typeof( Sakkhra ), + typeof( SakkhraShaman ), + typeof( Lizardman ) ), + new SlayerEntry( SlayerName.SerpentoidMassacre, + typeof( Naga ), + typeof( NagaWarrior ), + typeof( NagaQueen ), + typeof( FireNaga ), + typeof( IceSalamander ), + typeof( FireSalamander ), + typeof( Medusa ), + typeof( Hydra ), + typeof( SeaHydra ), + typeof( Kobra ), + typeof( OphidianArchmage ), + typeof( OphidianKnight ), + typeof( OphidianMage ), + typeof( OphidianMatriarch ), + typeof( OphidianWarrior ) ), + new SlayerEntry( SlayerName.SerpentBane, + typeof( GiantEel ), + typeof( DeepSeaSerpent ), + typeof( GiantSerpent ), + typeof( IceSerpent ), + typeof( Viper ), + typeof( LavaSerpent ), + typeof( Cobra ), + typeof( SeaSerpent ), + typeof( SilverSerpent ), + typeof( Snake ) ) + }; + + // -------------------------------------------------------------------------------------------------------------------------------------- + + m_Groups = new SlayerGroup[] + { + humanoid, + undead, + elemental, + abyss, + arachnid, + reptilian, + nature, + sea, + weed + }; + + m_TotalEntries = CompileEntries( m_Groups ); + } + + private static SlayerEntry[] CompileEntries( SlayerGroup[] groups ) + { + SlayerEntry[] entries = new SlayerEntry[32]; + + for ( int i = 0; i < groups.Length; ++i ) + { + SlayerGroup g = groups[i]; + + g.Super.Group = g; + + entries[(int)g.Super.Name] = g.Super; + + for ( int j = 0; j < g.Entries.Length; ++j ) + { + g.Entries[j].Group = g; + entries[(int)g.Entries[j].Name] = g.Entries[j]; + } + } + + return entries; + } + + private SlayerEntry m_Super; + private SlayerEntry[] m_Entries; + + public SlayerEntry Super{ get{ return m_Super; } set{ m_Super = value; } } + public SlayerEntry[] Entries{ get{ return m_Entries; } set{ m_Entries = value; } } + + public SlayerGroup() + { + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/SlayerName.cs b/Scripts/Items/Weapons/SlayerName.cs new file mode 100644 index 0000000..1f52d58 --- /dev/null +++ b/Scripts/Items/Weapons/SlayerName.cs @@ -0,0 +1,40 @@ +using System; + +namespace Server.Items +{ + public enum SlayerName + { + None, + UndeadDoom, + GiantsFall, + OrcSlaying, + TrollSlaughter, + OgreTrashing, + Executioner, + DragonSlaying, + InsectoidExtermination, + SerpentBane, + LizardmanSlaughter, + ReptilianDeath, + DaemonDismissal, + GargoylesFoe, + DevilishDamnation, + Exorcism, + SerpentoidMassacre, + SpidersDeath, + ScorpionsBane, + BugButcher, + FlameDousing, + WaterEvaporation, + AirAbolish, + ElementalHealth, + StoneShatter, + BloodDrinking, + SummerBreeze, + ElementalBan, + NaturesFury, + SeaSlaughter, + GoblinoidHunter, + WeedWrecker + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/SpearsAndForks/BaseSpear.cs b/Scripts/Items/Weapons/SpearsAndForks/BaseSpear.cs new file mode 100644 index 0000000..d6feca1 --- /dev/null +++ b/Scripts/Items/Weapons/SpearsAndForks/BaseSpear.cs @@ -0,0 +1,60 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public abstract class BaseSpear : BaseMeleeWeapon + { + public override int DefHitSound{ get{ return 0x23C; } } + public override int DefMissSound{ get{ return 0x238; } } + + public override SkillName DefSkill{ get{ return SkillName.Fencing; } } + public override WeaponType DefType{ get{ return WeaponType.Piercing; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce2H; } } + + public BaseSpear( int itemID ) : base( itemID ) + { + } + + public BaseSpear( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + base.OnHit( attacker, defender, damageBonus ); + + if ( Layer == Layer.TwoHanded && (attacker.Skills[SkillName.Tactics].Value / 400.0) >= Utility.RandomDouble() ) + { + defender.SendMessage( "You receive a paralyzing blow!" ); // Is this not localized? + defender.Freeze( TimeSpan.FromSeconds( 2.0 ) ); + + attacker.SendMessage( "You deliver a paralyzing blow!" ); // Is this not localized? + attacker.PlaySound( 0x11C ); + } + + if ( Poison != null && PoisonCharges > 0 ) + { + --PoisonCharges; + + if ( Utility.RandomDouble() >= 0.5 ) // 50% chance to poison + defender.ApplyPoison( attacker, Poison ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/SpearsAndForks/Pike.cs b/Scripts/Items/Weapons/SpearsAndForks/Pike.cs new file mode 100644 index 0000000..7abfab6 --- /dev/null +++ b/Scripts/Items/Weapons/SpearsAndForks/Pike.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x26BE, 0x26C8 )] + public class Pike : BaseSpear + { + public override int UOStrengthReq{ get{ return 50; } } + public override int UOMinDamage{ get{ return 14; } } + public override int UOMaxDamage{ get{ return 16; } } + public override int UOSpeed{ get{ return 37; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 110; } } + + [Constructable] + public Pike() : base( 0x26BE ) + { + Weight = 8.0; + } + + public Pike( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/SpearsAndForks/Pitchfork.cs b/Scripts/Items/Weapons/SpearsAndForks/Pitchfork.cs new file mode 100644 index 0000000..b902332 --- /dev/null +++ b/Scripts/Items/Weapons/SpearsAndForks/Pitchfork.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xE87, 0xE88 )] + public class Pitchfork : BaseSpear + { + public override int UOStrengthReq{ get{ return 15; } } + public override int UOMinDamage{ get{ return 4; } } + public override int UOMaxDamage{ get{ return 16; } } + public override int UOSpeed{ get{ return 45; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 60; } } + + [Constructable] + public Pitchfork() : base( 0xE87 ) + { + Weight = 11.0; + } + + public Pitchfork( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 10.0 ) + Weight = 11.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/SpearsAndForks/Spear.cs b/Scripts/Items/Weapons/SpearsAndForks/Spear.cs new file mode 100644 index 0000000..51dd523 --- /dev/null +++ b/Scripts/Items/Weapons/SpearsAndForks/Spear.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xF62, 0xF63 )] + public class Spear : BaseSpear + { + public override int UOStrengthReq{ get{ return 30; } } + public override int UOMinDamage{ get{ return 2; } } + public override int UOMaxDamage{ get{ return 36; } } + public override int UOSpeed{ get{ return 46; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 80; } } + + [Constructable] + public Spear() : base( 0xF62 ) + { + Weight = 7.0; + } + + public Spear( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/SpearsAndForks/WarFork.cs b/Scripts/Items/Weapons/SpearsAndForks/WarFork.cs new file mode 100644 index 0000000..6a80d6a --- /dev/null +++ b/Scripts/Items/Weapons/SpearsAndForks/WarFork.cs @@ -0,0 +1,47 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1405, 0x1404 )] + public class WarFork : BaseSpear + { + public override int UOStrengthReq{ get{ return 35; } } + public override int UOMinDamage{ get{ return 4; } } + public override int UOMaxDamage{ get{ return 32; } } + public override int UOSpeed{ get{ return 45; } } + + public override int DefHitSound{ get{ return 0x236; } } + public override int DefMissSound{ get{ return 0x238; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 110; } } + + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce1H; } } + + [Constructable] + public WarFork() : base( 0x1405 ) + { + Weight = 9.0; + } + + public WarFork( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Staves/BaseStaff.cs b/Scripts/Items/Weapons/Staves/BaseStaff.cs new file mode 100644 index 0000000..a16bbaa --- /dev/null +++ b/Scripts/Items/Weapons/Staves/BaseStaff.cs @@ -0,0 +1,45 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public abstract class BaseStaff : BaseMeleeWeapon + { + public override int DefHitSound{ get{ return 0x233; } } + public override int DefMissSound{ get{ return 0x239; } } + + public override SkillName DefSkill{ get{ return SkillName.Bludgeoning; } } + public override WeaponType DefType{ get{ return WeaponType.Staff; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Bash2H; } } + + public BaseStaff( int itemID ) : base( itemID ) + { + } + + public BaseStaff( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + base.OnHit( attacker, defender, damageBonus ); + + defender.Stam -= Utility.Random( 3, 3 ); // 3-5 points of stamina loss + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Staves/BlackStaff.cs b/Scripts/Items/Weapons/Staves/BlackStaff.cs new file mode 100644 index 0000000..7e6be7a --- /dev/null +++ b/Scripts/Items/Weapons/Staves/BlackStaff.cs @@ -0,0 +1,42 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xDF1, 0xDF0 )] + public class BlackStaff : BaseStaff + { + public override int UOStrengthReq{ get{ return 35; } } + public override int UOMinDamage{ get{ return 8; } } + public override int UOMaxDamage{ get{ return 33; } } + public override int UOSpeed{ get{ return 35; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + [Constructable] + public BlackStaff() : base( 0xDF0 ) + { + Weight = 6.0; + } + + public BlackStaff( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Staves/GlacialStaff.cs b/Scripts/Items/Weapons/Staves/GlacialStaff.cs new file mode 100644 index 0000000..74b562b --- /dev/null +++ b/Scripts/Items/Weapons/Staves/GlacialStaff.cs @@ -0,0 +1,35 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + public class GlacialStaff : BlackStaff + { + public override int LabelNumber{ get{ return 1017413; } } // Glacial Staff + + [Constructable] + public GlacialStaff() + { + Hue = 0x480; + } + + public GlacialStaff( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Weapons/Staves/GnarledStaff.cs b/Scripts/Items/Weapons/Staves/GnarledStaff.cs new file mode 100644 index 0000000..685eeab --- /dev/null +++ b/Scripts/Items/Weapons/Staves/GnarledStaff.cs @@ -0,0 +1,43 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13F8, 0x13F9 )] + public class GnarledStaff : BaseStaff + { + public override int UOStrengthReq{ get{ return 20; } } + public override int UOMinDamage{ get{ return 10; } } + public override int UOMaxDamage{ get{ return 30; } } + public override int UOSpeed{ get{ return 33; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 50; } } + + [Constructable] + public GnarledStaff() : base( 0x13F8 ) + { + Weight = 3.0; + Resource = CraftResource.Wooden; + } + + public GnarledStaff( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Staves/QuarterStaff.cs b/Scripts/Items/Weapons/Staves/QuarterStaff.cs new file mode 100644 index 0000000..75be973 --- /dev/null +++ b/Scripts/Items/Weapons/Staves/QuarterStaff.cs @@ -0,0 +1,43 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xE89, 0xE8a )] + public class QuarterStaff : BaseStaff + { + public override int UOStrengthReq{ get{ return 30; } } + public override int UOMinDamage{ get{ return 8; } } + public override int UOMaxDamage{ get{ return 28; } } + public override int UOSpeed{ get{ return 48; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 60; } } + + [Constructable] + public QuarterStaff() : base( 0xE89 ) + { + Weight = 4.0; + Resource = CraftResource.Wooden; + } + + public QuarterStaff( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Staves/ShepherdsCrook.cs b/Scripts/Items/Weapons/Staves/ShepherdsCrook.cs new file mode 100644 index 0000000..9070147 --- /dev/null +++ b/Scripts/Items/Weapons/Staves/ShepherdsCrook.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; +using Server.Targeting; +using Server.Mobiles; + +namespace Server.Items +{ + [FlipableAttribute( 0xE81, 0xE82 )] + public class ShepherdsCrook : BaseStaff + { + public override int UOStrengthReq{ get{ return 10; } } + public override int UOMinDamage{ get{ return 3; } } + public override int UOMaxDamage{ get{ return 12; } } + public override int UOSpeed{ get{ return 30; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 50; } } + + [Constructable] + public ShepherdsCrook() : base( 0xE81 ) + { + Weight = 4.0; + Resource = CraftResource.Wooden; + } + + public ShepherdsCrook( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Items/Weapons/Swords/BaseSword.cs b/Scripts/Items/Weapons/Swords/BaseSword.cs new file mode 100644 index 0000000..53a6188 --- /dev/null +++ b/Scripts/Items/Weapons/Swords/BaseSword.cs @@ -0,0 +1,56 @@ +using System; +using Server; +using Server.Items; +using Server.Targets; + +namespace Server.Items +{ + public abstract class BaseSword : BaseMeleeWeapon + { + public override SkillName DefSkill{ get{ return SkillName.Swords; } } + public override WeaponType DefType{ get{ return WeaponType.Slashing; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Slash1H; } } + + public BaseSword( int itemID ) : base( itemID ) + { + } + + public BaseSword( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnDoubleClick( Mobile from ) + { + from.SendLocalizedMessage( 1010018 ); // What do you want to use this item on? + + from.Target = new BladedItemTarget( this ); + } + + public override void OnHit( Mobile attacker, Mobile defender, double damageBonus ) + { + base.OnHit( attacker, defender, damageBonus ); + + if ( Poison != null && PoisonCharges > 0 ) + { + --PoisonCharges; + + if ( Utility.RandomDouble() >= 0.5 ) // 50% chance to poison + defender.ApplyPoison( attacker, Poison ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/Broadsword.cs b/Scripts/Items/Weapons/Swords/Broadsword.cs new file mode 100644 index 0000000..44c95a7 --- /dev/null +++ b/Scripts/Items/Weapons/Swords/Broadsword.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xF5E, 0xF5F )] + public class Broadsword : BaseSword + { + public override int UOStrengthReq{ get{ return 25; } } + public override int UOMinDamage{ get{ return 5; } } + public override int UOMaxDamage{ get{ return 29; } } + public override int UOSpeed{ get{ return 45; } } + + public override int DefHitSound{ get{ return 0x237; } } + public override int DefMissSound{ get{ return 0x23A; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 100; } } + + [Constructable] + public Broadsword() : base( 0xF5E ) + { + Weight = 6.0; + } + + public Broadsword( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/Cutlass.cs b/Scripts/Items/Weapons/Swords/Cutlass.cs new file mode 100644 index 0000000..abf8bf8 --- /dev/null +++ b/Scripts/Items/Weapons/Swords/Cutlass.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1441, 0x1440 )] + public class Cutlass : BaseSword + { + public override int UOStrengthReq{ get{ return 10; } } + public override int UOMinDamage{ get{ return 6; } } + public override int UOMaxDamage{ get{ return 28; } } + public override int UOSpeed{ get{ return 45; } } + + public override int DefHitSound{ get{ return 0x23B; } } + public override int DefMissSound{ get{ return 0x23A; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + [Constructable] + public Cutlass() : base( 0x1441 ) + { + Weight = 8.0; + } + + public Cutlass( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/Katana.cs b/Scripts/Items/Weapons/Swords/Katana.cs new file mode 100644 index 0000000..03b0e92 --- /dev/null +++ b/Scripts/Items/Weapons/Swords/Katana.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13FF, 0x13FE )] + public class Katana : BaseSword + { + public override int UOStrengthReq{ get{ return 10; } } + public override int UOMinDamage{ get{ return 5; } } + public override int UOMaxDamage{ get{ return 26; } } + public override int UOSpeed{ get{ return 58; } } + + public override int DefHitSound{ get{ return 0x23B; } } + public override int DefMissSound{ get{ return 0x23A; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 90; } } + + [Constructable] + public Katana() : base( 0x13FF ) + { + Weight = 6.0; + } + + public Katana( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/Kryss.cs b/Scripts/Items/Weapons/Swords/Kryss.cs new file mode 100644 index 0000000..fd4a89e --- /dev/null +++ b/Scripts/Items/Weapons/Swords/Kryss.cs @@ -0,0 +1,52 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1401, 0x1400 )] + public class Kryss : BaseSword + { + public override int UOStrengthReq{ get{ return 10; } } + public override int UOMinDamage{ get{ return 3; } } + public override int UOMaxDamage{ get{ return 28; } } + public override int UOSpeed{ get{ return 53; } } + + public override int DefHitSound{ get{ return 0x23C; } } + public override int DefMissSound{ get{ return 0x238; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 90; } } + + public override SkillName DefSkill{ get{ return SkillName.Fencing; } } + public override WeaponType DefType{ get{ return WeaponType.Piercing; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce1H; } } + + [Constructable] + public Kryss() : base( 0x1401 ) + { + Weight = 2.0; + } + + public Kryss( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 1.0 ) + Weight = 2.0; + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/Longsword.cs b/Scripts/Items/Weapons/Swords/Longsword.cs new file mode 100644 index 0000000..b8ea409 --- /dev/null +++ b/Scripts/Items/Weapons/Swords/Longsword.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0xF61, 0xF60 )] + public class Longsword : BaseSword + { + public override int UOStrengthReq{ get{ return 25; } } + public override int UOMinDamage{ get{ return 5; } } + public override int UOMaxDamage{ get{ return 33; } } + public override int UOSpeed{ get{ return 35; } } + + public override int DefHitSound{ get{ return 0x237; } } + public override int DefMissSound{ get{ return 0x23A; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 110; } } + + [Constructable] + public Longsword() : base( 0xF61 ) + { + Weight = 7.0; + } + + public Longsword( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/Rapier.cs b/Scripts/Items/Weapons/Swords/Rapier.cs new file mode 100644 index 0000000..08f426d --- /dev/null +++ b/Scripts/Items/Weapons/Swords/Rapier.cs @@ -0,0 +1,47 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x1403, 0x1402 )] + public class Rapier : BaseSword + { + public override int UOStrengthReq{ get{ return 15; } } + public override int UOMinDamage{ get{ return 4; } } + public override int UOMaxDamage{ get{ return 32; } } + public override int UOSpeed{ get{ return 50; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 70; } } + + public override SkillName DefSkill{ get{ return SkillName.Fencing; } } + public override WeaponType DefType{ get{ return WeaponType.Piercing; } } + public override WeaponAnimation DefAnimation{ get{ return WeaponAnimation.Pierce1H; } } + + [Constructable] + public Rapier() : base( 0x1403 ) + { + Weight = 4.0; + Name = "rapier"; + } + + public Rapier( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/Scimitar.cs b/Scripts/Items/Weapons/Swords/Scimitar.cs new file mode 100644 index 0000000..dc1082c --- /dev/null +++ b/Scripts/Items/Weapons/Swords/Scimitar.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13B6, 0x13B5 )] + public class Scimitar : BaseSword + { + public override int UOStrengthReq{ get{ return 10; } } + public override int UOMinDamage{ get{ return 4; } } + public override int UOMaxDamage{ get{ return 30; } } + public override int UOSpeed{ get{ return 43; } } + + public override int DefHitSound{ get{ return 0x23B; } } + public override int DefMissSound{ get{ return 0x23A; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 90; } } + + [Constructable] + public Scimitar() : base( 0x13B6 ) + { + Weight = 5.0; + } + + public Scimitar( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/ThinLongsword.cs b/Scripts/Items/Weapons/Swords/ThinLongsword.cs new file mode 100644 index 0000000..5b5f0df --- /dev/null +++ b/Scripts/Items/Weapons/Swords/ThinLongsword.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13B8, 0x13B7 )] + public class ThinLongsword : BaseSword + { + public override int UOStrengthReq{ get{ return 25; } } + public override int UOMinDamage{ get{ return 5; } } + public override int UOMaxDamage{ get{ return 33; } } + public override int UOSpeed{ get{ return 35; } } + + public override int DefHitSound{ get{ return 0x237; } } + public override int DefMissSound{ get{ return 0x23A; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 110; } } + + [Constructable] + public ThinLongsword() : base( 0x13B8 ) + { + Weight = 1.0; + } + + public ThinLongsword( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/Swords/VikingSword.cs b/Scripts/Items/Weapons/Swords/VikingSword.cs new file mode 100644 index 0000000..b84266b --- /dev/null +++ b/Scripts/Items/Weapons/Swords/VikingSword.cs @@ -0,0 +1,45 @@ +using System; +using Server.Network; +using Server.Items; + +namespace Server.Items +{ + [FlipableAttribute( 0x13B9, 0x13Ba )] + public class VikingSword : BaseSword + { + public override int UOStrengthReq{ get{ return 40; } } + public override int UOMinDamage{ get{ return 6; } } + public override int UOMaxDamage{ get{ return 34; } } + public override int UOSpeed{ get{ return 30; } } + + public override int DefHitSound{ get{ return 0x237; } } + public override int DefMissSound{ get{ return 0x23A; } } + + public override int InitMinHits{ get{ return 31; } } + public override int InitMaxHits{ get{ return 100; } } + + [Constructable] + public VikingSword() : base( 0x13B9 ) + { + Weight = 6.0; + } + + public VikingSword( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Items/Weapons/WeaponEnums.cs b/Scripts/Items/Weapons/WeaponEnums.cs new file mode 100644 index 0000000..c75b388 --- /dev/null +++ b/Scripts/Items/Weapons/WeaponEnums.cs @@ -0,0 +1,66 @@ +using System; + +namespace Server.Items +{ + public enum WeaponQuality + { + Low, + Regular, + Exceptional + } + + public enum WeaponType + { + Axe, // Axes, Hatches, etc. These can give concussion blows + Slashing, // Katana, Broadsword, Longsword, etc. Slashing weapons are poisonable + Staff, // Staves + Bashing, // War Hammers, Maces, Mauls, etc. Two-handed bashing delivers crushing blows + Piercing, // Spears, Warforks, Daggers, etc. Two-handed piercing delivers paralyzing blows + Polearm, // Halberd, Bardiche + Ranged, // Bow, Crossbows + Fists // Fists + } + + public enum WeaponDamageLevel + { + Regular, + Ruin, + Might, + Force, + Power, + Vanq + } + + public enum WeaponAccuracyLevel + { + Regular, + Accurate, + Surpassingly, + Eminently, + Exceedingly, + Supremely + } + + public enum WeaponDurabilityLevel + { + Regular, + Durable, + Substantial, + Massive, + Fortified, + Indestructible + } + + public enum WeaponAnimation + { + Slash1H = 9, + Pierce1H = 10, + Bash1H = 11, + Bash2H = 12, + Slash2H = 13, + Pierce2H = 14, + ShootBow = 18, + ShootXBow = 19, + Wrestle = 31 + } +} \ No newline at end of file diff --git a/Scripts/Misc/AccountPrompt.cs b/Scripts/Misc/AccountPrompt.cs new file mode 100644 index 0000000..791420f --- /dev/null +++ b/Scripts/Misc/AccountPrompt.cs @@ -0,0 +1,40 @@ +using System; +using Server; +using Server.Accounting; + +namespace Server.Misc +{ + public class AccountPrompt + { + public static void Initialize() + { + if ( Accounts.Count == 0 && !Core.Service ) + { + Console.WriteLine( "This server has no accounts." ); + Console.Write( "Do you want to create the owner account now? (y/n)" ); + + if( Console.ReadKey( true ).Key == ConsoleKey.Y ) + { + Console.WriteLine(); + + Console.Write( "Username: " ); + string username = Console.ReadLine(); + + Console.Write( "Password: " ); + string password = Console.ReadLine(); + + Account a = new Account( username, password ); + a.AccessLevel = AccessLevel.Owner; + + Console.WriteLine( "Account created." ); + } + else + { + Console.WriteLine(); + + Console.WriteLine( "Account not created." ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Animations.cs b/Scripts/Misc/Animations.cs new file mode 100644 index 0000000..4e79335 --- /dev/null +++ b/Scripts/Misc/Animations.cs @@ -0,0 +1,30 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class Animations + { + public static void Initialize() + { + EventSink.AnimateRequest += new AnimateRequestEventHandler( EventSink_AnimateRequest ); + } + + private static void EventSink_AnimateRequest( AnimateRequestEventArgs e ) + { + Mobile from = e.Mobile; + + int action; + + switch ( e.Action ) + { + case "bow": action = 32; break; + case "salute": action = 33; break; + default: return; + } + + if ( from.Alive && !from.Mounted && from.Body.IsHuman ) + from.Animate( action, 5, 1, true, false, 0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/AttackMessage.cs b/Scripts/Misc/AttackMessage.cs new file mode 100644 index 0000000..7f03004 --- /dev/null +++ b/Scripts/Misc/AttackMessage.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Network; + +namespace Server.Misc +{ + public class AttackMessage + { + private const string AggressorFormat = "You are attacking {0}!"; + private const string AggressedFormat = "{0} is attacking you!"; + private const int Hue = 0x22; + + private static TimeSpan Delay = TimeSpan.FromMinutes( 1.0 ); + + public static void Initialize() + { + EventSink.AggressiveAction += new AggressiveActionEventHandler( EventSink_AggressiveAction ); + } + + public static void EventSink_AggressiveAction( AggressiveActionEventArgs e ) + { + Mobile aggressor = e.Aggressor; + Mobile aggressed = e.Aggressed; + + if ( !aggressor.Player || !aggressed.Player ) + return; + + if ( !CheckAggressions( aggressor, aggressed ) ) + { + aggressor.LocalOverheadMessage( MessageType.Regular, Hue, true, String.Format( AggressorFormat, aggressed.Name ) ); + aggressed.LocalOverheadMessage( MessageType.Regular, Hue, true, String.Format( AggressedFormat, aggressor.Name ) ); + } + } + + public static bool CheckAggressions( Mobile m1, Mobile m2 ) + { + List list = m1.Aggressors; + + for ( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if ( info.Attacker == m2 && DateTime.Now < (info.LastCombatTime + Delay) ) + return true; + } + + list = m2.Aggressors; + + for ( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if ( info.Attacker == m1 && DateTime.Now < (info.LastCombatTime + Delay) ) + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/AutoRestart.cs b/Scripts/Misc/AutoRestart.cs new file mode 100644 index 0000000..bd96513 --- /dev/null +++ b/Scripts/Misc/AutoRestart.cs @@ -0,0 +1,88 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Text; +using Server; +using Server.Commands; + +namespace Server.Misc +{ + public class AutoRestart : Timer + { + public static bool Enabled = false; // is the script enabled? + + private static TimeSpan RestartTime = TimeSpan.FromHours( 2.0 ); // time of day at which to restart + private static TimeSpan RestartDelay = TimeSpan.Zero; // how long the server should remain active before restart (period of 'server wars') + + private static TimeSpan WarningDelay = TimeSpan.FromMinutes( 1.0 ); // at what interval should the shutdown message be displayed? + + private static bool m_Restarting; + private static DateTime m_RestartTime; + + public static bool Restarting + { + get{ return m_Restarting; } + } + + public static void Initialize() + { + CommandSystem.Register( "Restart", AccessLevel.Administrator, new CommandEventHandler( Restart_OnCommand ) ); + new AutoRestart().Start(); + } + + public static void Restart_OnCommand( CommandEventArgs e ) + { + if ( m_Restarting ) + { + e.Mobile.SendMessage( "The server is already restarting." ); + } + else + { + e.Mobile.SendMessage( "You have initiated server shutdown." ); + Enabled = true; + m_RestartTime = DateTime.Now; + } + } + + public AutoRestart() : base( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 ) ) + { + Priority = TimerPriority.FiveSeconds; + + m_RestartTime = DateTime.Now.Date + RestartTime; + + if ( m_RestartTime < DateTime.Now ) + m_RestartTime += TimeSpan.FromDays( 1.0 ); + } + + private void Warning_Callback() + { + World.Broadcast( 0x22, true, "The server is going down shortly." ); + } + + private void Restart_Callback() + { + Core.Kill( true ); + } + + protected override void OnTick() + { + if ( m_Restarting || !Enabled ) + return; + + if ( DateTime.Now < m_RestartTime ) + return; + + if ( WarningDelay > TimeSpan.Zero ) + { + Warning_Callback(); + Timer.DelayCall( WarningDelay, WarningDelay, new TimerCallback( Warning_Callback ) ); + } + + AutoSave.Save(); + + m_Restarting = true; + + Timer.DelayCall( RestartDelay, new TimerCallback( Restart_Callback ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/AutoSave.cs b/Scripts/Misc/AutoSave.cs new file mode 100644 index 0000000..65d72aa --- /dev/null +++ b/Scripts/Misc/AutoSave.cs @@ -0,0 +1,187 @@ +using System; +using System.IO; +using Server; +using Server.Commands; + +namespace Server.Misc +{ + public class AutoSave : Timer + { + private static TimeSpan m_Delay = TimeSpan.FromMinutes( Server.Misc.Settings.SaveInterval() ); + private static TimeSpan m_Warning = TimeSpan.Zero; + + public static void Initialize() + { + new AutoSave().Start(); + CommandSystem.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 " )] + [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 " ); + } + } + + 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( true ); + } + 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() + { + AutoSave.Save( false ); + } + + public static void Save( bool permitBackgroundWrite ) + { + if ( AutoRestart.Restarting ) + return; + + World.WaitForWriteCompletion(); + + try{ Backup(); } + catch ( Exception e ) { Console.WriteLine("WARNING: Automatic backup FAILED: {0}", e); } + + World.Save( true, permitBackgroundWrite ); + } + + 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 + ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Broadcasts.cs b/Scripts/Misc/Broadcasts.cs new file mode 100644 index 0000000..39bfb19 --- /dev/null +++ b/Scripts/Misc/Broadcasts.cs @@ -0,0 +1,36 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class Broadcasts + { + public static void Initialize() + { + EventSink.Crashed += new CrashedEventHandler( EventSink_Crashed ); + EventSink.Shutdown += new ShutdownEventHandler( EventSink_Shutdown ); + } + + public static void EventSink_Crashed( CrashedEventArgs e ) + { + try + { + World.Broadcast( 0x35, true, "The server has crashed." ); + } + catch + { + } + } + + public static void EventSink_Shutdown( ShutdownEventArgs e ) + { + try + { + World.Broadcast( 0x35, true, "The server has shut down." ); + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/CharacterCreation.cs b/Scripts/Misc/CharacterCreation.cs new file mode 100644 index 0000000..8741c09 --- /dev/null +++ b/Scripts/Misc/CharacterCreation.cs @@ -0,0 +1,495 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Network; +using Server.Accounting; + +namespace Server.Misc +{ + public class CharacterCreation + { + public static void Initialize() + { + // Register our event handler + EventSink.CharacterCreated += new CharacterCreatedEventHandler( EventSink_CharacterCreated ); + } + + private static void AddBackpack( Mobile m ) + { + Container pack = m.Backpack; + + if ( pack == null ) + { + pack = new Backpack(); + pack.Movable = false; + + m.AddItem( pack ); + } + + PackItem( new RedBook( "a book", m.Name, 20, true ) ); + PackItem( new Gold( Server.Misc.Settings.StartGold() ) ); + PackItem( new Dagger() ); + PackItem( new Candle() ); + } + + private static void AddShirt( Mobile m ) + { + switch ( Utility.Random( 5 ) ) + { + case 0: EquipItem( new FancyShirt( Utility.RandomHue() ), true ); break; + case 1: EquipItem( new Doublet( Utility.RandomHue() ), true ); break; + case 2: EquipItem( new Shirt( Utility.RandomHue() ), true ); break; + case 3: EquipItem( new Tunic( Utility.RandomHue() ), true ); break; + case 4: EquipItem( new Surcoat( Utility.RandomHue() ), true ); break; + } + } + + private static void AddPants( Mobile m ) + { + if ( m.Female ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: EquipItem( new Skirt( Utility.RandomHue() ), true ); break; + case 1: EquipItem( new Kilt( Utility.RandomHue() ), true ); break; + case 2: EquipItem( new LongPants( Utility.RandomHue() ), true ); break; + case 3: EquipItem( new ShortPants( Utility.RandomHue() ), true ); break; + } + } + else + { + switch ( Utility.Random( 3 ) ) + { + case 0: EquipItem( new LongPants( Utility.RandomHue() ), true ); break; + case 1: EquipItem( new ShortPants( Utility.RandomHue() ), true ); break; + case 2: EquipItem( new Kilt( Utility.RandomHue() ), true ); break; + } + } + } + + private static void AddShoes( Mobile m ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: EquipItem( new Shoes( Utility.RandomNeutralHue() ), true ); break; + case 1: EquipItem( new Boots( Utility.RandomNeutralHue() ), true ); break; + case 2: EquipItem( new Sandals( Utility.RandomNeutralHue() ), true ); break; + case 3: EquipItem( new ThighBoots( Utility.RandomNeutralHue() ), true ); break; + } + } + + private static void AddHat( Mobile m, int color ) + { + switch ( Utility.Random( 7 ) ) + { + case 0: EquipItem( new FloppyHat( Utility.RandomHue() ), true ); break; + case 1: EquipItem( new Hood( color ), true ); break; + case 2: EquipItem( new WideBrimHat( Utility.RandomHue() ), true ); break; + case 3: EquipItem( new Cap( Utility.RandomHue() ), true ); break; + case 4: EquipItem( new SkullCap( Utility.RandomHue() ), true ); break; + case 5: EquipItem( new Bandana( Utility.RandomHue() ), true ); break; + case 6: EquipItem( new FeatheredHat( Utility.RandomHue() ), true ); break; + } + } + + private static Mobile CreateMobile( Account a ) + { + if ( a.Count >= a.Limit ) + return null; + + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] == null ) + return (a[i] = new PlayerMobile()); + } + + return null; + } + + private static void EventSink_CharacterCreated( CharacterCreatedEventArgs args ) + { + if ( !VerifyProfession( args.Profession ) ) + args.Profession = 0; + + NetState state = args.State; + + if ( state == null ) + return; + + Mobile newChar = CreateMobile( args.Account as Account ); + + if ( newChar == null ) + { + Console.WriteLine( "Login: {0}: Character creation failed, account full", state ); + return; + } + + args.Mobile = newChar; + m_Mobile = newChar; + + newChar.Player = true; + newChar.StatCap = 200; + newChar.Skills.Cap = 7000; + newChar.AccessLevel = args.Account.AccessLevel; + newChar.Female = args.Female; + newChar.Race = Race.Human; + newChar.Hue = newChar.Race.ClipSkinHue( args.Hue & 0x3FFF ) | 0x8000; + newChar.Hunger = 20; + newChar.Thirst = 20; + + if ( newChar is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile) newChar; + + pm.Profession = args.Profession; + } + + SetName( newChar, args.Name ); + + AddBackpack( newChar ); + + SetStats( newChar, state, args.Str, args.Dex, args.Int, args.Profession ); + SetSkills( newChar, args.Skills, args.Profession ); + + newChar.HairItemID = args.HairID; + newChar.HairHue = ClipHairHue( args.HairHue & 0x3FFF ); + newChar.FacialHairItemID = args.BeardID; + newChar.FacialHairHue = ClipHairHue( args.BeardHue & 0x3FFF ); + + newChar.RecordHair = newChar.HairItemID;; + newChar.RecordBeard = newChar.FacialHairItemID;; + + AddShirt( newChar ); + AddPants( newChar ); + AddShoes( newChar ); + + int hatColor = 0; + int robeColor = 0; + + if ( Utility.RandomBool() ) + { + hatColor = Utility.RandomHue(); + EquipItem( new Cloak( hatColor ), true ); + } + if ( Utility.RandomBool() ) + { + robeColor = Utility.RandomHue(); + EquipItem( new Robe( robeColor ), true ); + if ( hatColor > 0 && Utility.RandomBool() ){ hatColor = robeColor; } + else if ( hatColor == 0 ){ hatColor = robeColor; } + } + if ( Utility.RandomBool() ){ AddHat( newChar, hatColor ); } + + CityInfo city = GetStartLocation( args ); + + newChar.MoveToWorld( city.Location, city.Map ); + + Console.WriteLine( "Login: {0}: New character being created (account={1})", state, args.Account.Username ); + Console.WriteLine( " - Character: {0} (serial={1})", newChar.Name, newChar.Serial ); + Console.WriteLine( " - Started: {0} {1} in {2}", city.City, city.Location, city.Map.ToString() ); + + new WelcomeTimer( newChar ).Start(); + } + + public static int ClipHairHue( int hue ) + { + if( hue < 1102 ) + return 1102; + else if( hue > 1149 ) + return 1149; + else + return hue; + } + + public static bool VerifyProfession( int profession ) + { + if ( profession < 8 ) + return true; + else + return false; + } + + private class BadStartMessage : Timer + { + Mobile m_Mobile; + int m_Message; + public BadStartMessage( Mobile m, int message ) : base( TimeSpan.FromSeconds ( 3.5 ) ) + { + m_Mobile = m; + m_Message = message; + this.Start(); + } + + protected override void OnTick() + { + m_Mobile.SendLocalizedMessage( m_Message ); + } + } + + private static CityInfo GetStartLocation( CharacterCreatedEventArgs args ) + { + return args.City; + } + + private static void FixStats( ref int str, ref int dex, ref int intel, int max ) + { + int vMax = max - 30; + + int vStr = str - 10; + int vDex = dex - 10; + int vInt = intel - 10; + + if ( vStr < 0 ) + vStr = 0; + + if ( vDex < 0 ) + vDex = 0; + + if ( vInt < 0 ) + vInt = 0; + + int total = vStr + vDex + vInt; + + if ( total == 0 || total == vMax ) + return; + + double scalar = vMax / (double)total; + + vStr = (int)(vStr * scalar); + vDex = (int)(vDex * scalar); + vInt = (int)(vInt * scalar); + + FixStat( ref vStr, (vStr + vDex + vInt) - vMax, vMax ); + FixStat( ref vDex, (vStr + vDex + vInt) - vMax, vMax ); + FixStat( ref vInt, (vStr + vDex + vInt) - vMax, vMax ); + + str = vStr + 10; + dex = vDex + 10; + intel = vInt + 10; + } + + private static void FixStat( ref int stat, int diff, int max ) + { + stat += diff; + + if ( stat < 0 ) + stat = 0; + else if ( stat > max ) + stat = max; + } + + private static void SetStats( Mobile m, NetState state, int str, int dex, int intel, int prof ) + { + int max = state.NewCharacterCreation ? 90 : 80; + + FixStats( ref str, ref dex, ref intel, max ); + + if ( str < 10 || str > 60 || dex < 10 || dex > 60 || intel < 10 || intel > 60 || (str + dex + intel) != max ) + { + str = 10; + dex = 10; + intel = 10; + } + + if ( prof > 0 ) + { + switch ( prof ) + { + case 1: // Swordsman + { + m.InitStats( 45, 25, 10 ); break; + } + case 2: // Magician + { + m.InitStats( 15, 20, 45 ); break; + } + case 3: // Thief + { + m.InitStats( 20, 45, 15 ); break; + } + case 4: // Fencer + { + m.InitStats( 30, 40, 10 ); break; + } + case 5: // Mace Fighter + { + m.InitStats( 45, 25, 10 ); break; + } + case 6: // Archer + { + m.InitStats( 25, 45, 10 ); break; + } + case 7: // Bard + { + m.InitStats( 25, 35, 20 ); break; + } + } + } + else + m.InitStats( str, dex, intel ); + } + + private static void SetName( Mobile m, string name ) + { + name = name.Trim(); + + if ( !NameVerification.Validate( name, 2, 16, true, false, true, 1, NameVerification.SpaceDashPeriodQuote ) ) + name = "Generic Player"; + + m.Name = name; + } + + private static bool ValidSkills( SkillNameValue[] skills ) + { + int total = 0; + + for ( int i = 0; i < skills.Length; ++i ) + { + if ( skills[i].Value < 0 || skills[i].Value > 50 ) + return false; + + total += skills[i].Value; + + for ( int j = i + 1; j < skills.Length; ++j ) + { + if ( skills[j].Value > 0 && skills[j].Name == skills[i].Name ) + return false; + } + } + + return ( total == 100 || total == 120 ); + } + + private static Mobile m_Mobile; + + private static void SetSkills( Mobile m, SkillNameValue[] skills, int prof ) + { + switch ( prof ) + { + case 1: // Swordsman + { + skills = new SkillNameValue[] + { + new SkillNameValue( SkillName.Healing, 30 ), + new SkillNameValue( SkillName.Swords, 40 ), + new SkillNameValue( SkillName.Tactics, 30 ) + }; + + break; + } + case 2: // Magician + { + skills = new SkillNameValue[] + { + new SkillNameValue( SkillName.Magery, 50 ), + new SkillNameValue( SkillName.Meditation, 50 ) + }; + + break; + } + case 3: // Thief + { + skills = new SkillNameValue[] + { + new SkillNameValue( SkillName.Hiding, 50 ), + new SkillNameValue( SkillName.Stealing, 50 ) + }; + + break; + } + case 4: // Fencer + { + skills = new SkillNameValue[] + { + new SkillNameValue( SkillName.Healing, 30 ), + new SkillNameValue( SkillName.Fencing, 40 ), + new SkillNameValue( SkillName.Tactics, 30 ) + }; + + break; + } + case 5: // Mace Fighter + { + skills = new SkillNameValue[] + { + new SkillNameValue( SkillName.Healing, 30 ), + new SkillNameValue( SkillName.Bludgeoning, 40 ), + new SkillNameValue( SkillName.Tactics, 30 ) + }; + + break; + } + case 6: // Archer + { + skills = new SkillNameValue[] + { + new SkillNameValue( SkillName.Archery, 50 ), + new SkillNameValue( SkillName.Tactics, 50 ) + }; + break; + } + case 7: // Bard + { + skills = new SkillNameValue[] + { + new SkillNameValue( SkillName.Musicianship, 40 ), + new SkillNameValue( SkillName.Discordance, 30 ), + new SkillNameValue( SkillName.Peacemaking, 30 ) + }; + break; + } + default: + { + if ( !ValidSkills( skills ) ) + return; + + break; + } + } + + for ( int i = 0; i < skills.Length; ++i ) + { + SkillNameValue snv = skills[i]; + + if ( snv.Value > 0 ) + { + Skill skill = m.Skills[snv.Name]; + + if ( skill != null ) + { + skill.BaseFixedPoint = snv.Value * 10; + } + } + } + } + + private static void EquipItem( Item item ) + { + EquipItem( item, false ); + } + + private static void EquipItem( Item item, bool mustEquip ) + { + if ( m_Mobile != null && m_Mobile.EquipItem( item ) ) + return; + + Container pack = m_Mobile.Backpack; + + if ( !mustEquip && pack != null ) + pack.DropItem( item ); + else + item.Delete(); + } + + private static void PackItem( Item item ) + { + Container pack = m_Mobile.Backpack; + + if ( pack != null ) + pack.DropItem( item ); + else + item.Delete(); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Cleanup.cs b/Scripts/Misc/Cleanup.cs new file mode 100644 index 0000000..6621470 --- /dev/null +++ b/Scripts/Misc/Cleanup.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using Server; +using Server.Items; +using Server.Multis; +using Server.Mobiles; + +namespace Server.Misc +{ + public class Cleanup + { + public static void Initialize() + { + Timer.DelayCall( TimeSpan.FromSeconds( 2.5 ), new TimerCallback( Run ) ); + } + + public static void Run() + { + List items = new List(); + List validItems = new List(); + List hairCleanup = new List(); + + int boxes = 0; + + foreach ( Item item in World.Items.Values ) + { + if ( item.Map == null ) + { + items.Add( item ); + continue; + } + else if ( item is BaseHouse ) + { + BaseHouse house = (BaseHouse)item; + + foreach ( RelocatedEntity relEntity in house.RelocatedEntities ) + { + if ( relEntity.Entity is Item ) + validItems.Add( (Item)relEntity.Entity ); + } + + foreach ( VendorInventory inventory in house.VendorInventories ) + { + foreach ( Item subItem in inventory.Items ) + validItems.Add( subItem ); + } + } + else if ( item is InnBox ) + { + InnBox box = (InnBox)item; + Mobile owner = box.Owner; + + if ( owner == null ) + { + items.Add( box ); + ++boxes; + } + else if ( box.Items.Count == 0 ) + { + items.Add( box ); + ++boxes; + } + + continue; + } + else if ( (item.Layer == Layer.Hair || item.Layer == Layer.FacialHair) ) + { + object rootParent = item.RootParent; + + if ( rootParent is Mobile ) + { + Mobile rootMobile = (Mobile)rootParent; + if ( item.Parent != rootMobile && rootMobile.AccessLevel == AccessLevel.Player ) + { + items.Add( item ); + continue; + } + else if( item.Parent == rootMobile ) + { + hairCleanup.Add( rootMobile ); + continue; + } + } + } + + if ( item.Parent != null || item.Map != Map.Internal || item.HeldBy != null ) + continue; + + if ( item.Location != Point3D.Zero ) + continue; + + if ( !IsBuggable( item ) ) + continue; + + items.Add( item ); + } + + for ( int i = 0; i < validItems.Count; ++i ) + items.Remove( validItems[i] ); + + if ( items.Count > 0 ) + { + for ( int i = 0; i < items.Count; ++i ) + items[i].Delete(); + } + + if ( hairCleanup.Count > 0 ) + { + for ( int i = 0; i < hairCleanup.Count; i++ ) + hairCleanup[i].ConvertHair(); + } + + ArrayList cleanup = new ArrayList(); + foreach ( Mobile creature in World.Mobiles.Values ) + { + if ( creature is BaseCreature && creature.Map == Map.Internal ) + { + if (((BaseCreature)creature).IsStabled){} // DO NOTHING + else if ( creature is BaseMount && ((BaseMount)creature).Rider != null ){} // DO NOTHING + else { cleanup.Add( creature ); } + } + } + for ( int i = 0; i < cleanup.Count; ++i ) + { + Mobile creature = ( Mobile )cleanup[ i ]; + creature.Delete(); + } + } + + public static bool IsBuggable( Item item ) + { + if ( item is Fists ) + return false; + + if ( item is Multis.BaseBoat + || item is Fish || item is BigFish + || item is BasePotion || item is Food || item is CookableFood + || item is SpecialFishingNet || item is BaseMagicFish + || item is Shoes || item is Sandals + || item is Boots || item is ThighBoots + || item is TreasureMap || item is MessageInABottle + || item is BaseArmor || item is BaseWeapon + || item is BaseClothing) + return true; + + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/ClientVerification.cs b/Scripts/Misc/ClientVerification.cs new file mode 100644 index 0000000..d6537d0 --- /dev/null +++ b/Scripts/Misc/ClientVerification.cs @@ -0,0 +1,221 @@ +using System; +using Server; +using System.Diagnostics; +using System.IO; +using Server.Network; +using Server.Gumps; +using Server.Mobiles; + +namespace Server.Misc +{ + public class ClientVerification + { + private enum OldClientResponse + { + Ignore, + Warn, + Annoy, + LenientKick, + Kick + } + + private static bool m_DetectClientRequirement = true; + private static OldClientResponse m_OldClientResponse = OldClientResponse.LenientKick; + + private static ClientVersion m_Required; + private static bool m_AllowRegular = true, m_AllowUOTD = true, m_AllowGod = true; + + private static TimeSpan m_AgeLeniency = TimeSpan.FromDays( 10 ); + private static TimeSpan m_GameTimeLeniency = TimeSpan.FromHours( 25 ); + + private static TimeSpan m_KickDelay = TimeSpan.FromSeconds( 20.0 ); + + public static ClientVersion Required + { + get + { + return m_Required; + } + set + { + m_Required = value; + } + } + + public static bool AllowRegular + { + get + { + return m_AllowRegular; + } + set + { + m_AllowRegular = value; + } + } + + public static bool AllowUOTD + { + get + { + return m_AllowUOTD; + } + set + { + m_AllowUOTD = value; + } + } + + public static bool AllowGod + { + get + { + return m_AllowGod; + } + set + { + m_AllowGod = value; + } + } + + public static TimeSpan KickDelay + { + get + { + return m_KickDelay; + } + set + { + m_KickDelay = value; + } + } + + public static void Initialize() + { + EventSink.ClientVersionReceived += new ClientVersionReceivedHandler( EventSink_ClientVersionReceived ); + + //ClientVersion.Required = null; + //Required = new ClientVersion( "6.0.0.0" ); + + if( m_DetectClientRequirement ) + { + string path = Core.FindDataFile( "client.exe" ); + + if( File.Exists( path ) ) + { + FileVersionInfo info = FileVersionInfo.GetVersionInfo( path ); + + if ( info.FileMajorPart != 0 || info.FileMinorPart != 0 || info.FileBuildPart != 0 || info.FilePrivatePart != 0 ) + { + Required = new ClientVersion( info.FileMajorPart, info.FileMinorPart, info.FileBuildPart, info.FilePrivatePart ); + } + } + } + + if( Required != null ) + { + Utility.PushColor( ConsoleColor.White ); + Console.WriteLine( "Restricting client version to {0}. Action to be taken: {1}", Required, m_OldClientResponse ); + Utility.PopColor(); + } + } + + private static void EventSink_ClientVersionReceived( ClientVersionReceivedArgs e ) + { + string kickMessage = null; + NetState state = e.State; + ClientVersion version = e.Version; + + if ( state.Mobile.AccessLevel > AccessLevel.Player ) + return; + + if( Required != null && version < Required && ( m_OldClientResponse == OldClientResponse.Kick ||( m_OldClientResponse == OldClientResponse.LenientKick && (DateTime.Now - state.Mobile.CreationTime) > m_AgeLeniency && state.Mobile is PlayerMobile && ((PlayerMobile)state.Mobile).GameTime > m_GameTimeLeniency ))) + { + kickMessage = String.Format( "This server requires your client version be at least {0}.", Required ); + } + else if( !AllowGod || !AllowRegular || !AllowUOTD ) + { + if( !AllowGod && version.Type == ClientType.God ) + kickMessage = "This server does not allow god clients to connect."; + else if( !AllowRegular && version.Type == ClientType.Regular ) + kickMessage = "This server does not allow regular clients to connect."; + else if( !AllowUOTD && state.IsUOTDClient ) + kickMessage = "This server does not allow UO:TD clients to connect."; + + if( !AllowGod && !AllowRegular && !AllowUOTD ) + { + kickMessage = "This server does not allow any clients to connect."; + } + else if( AllowGod && !AllowRegular && !AllowUOTD && version.Type != ClientType.God ) + { + kickMessage = "This server requires you to use the god client."; + } + else if( kickMessage != null ) + { + if( AllowRegular && AllowUOTD ) + kickMessage += " You can use regular or UO:TD clients."; + else if( AllowRegular ) + kickMessage += " You can use regular clients."; + else if( AllowUOTD ) + kickMessage += " You can use UO:TD clients."; + } + } + + if( kickMessage != null ) + { + state.Mobile.SendMessage( 0x22, kickMessage ); + state.Mobile.SendMessage( 0x22, "You will be disconnected in {0} seconds.", KickDelay.TotalSeconds ); + + Timer.DelayCall( KickDelay, delegate + { + if( state.Socket != null ) + { + Console.WriteLine( "Client: {0}: Disconnecting, bad version", state ); + state.Dispose(); + } + } ); + } + else if( Required != null && version < Required ) + { + switch( m_OldClientResponse ) + { + case OldClientResponse.Warn: + { + state.Mobile.SendMessage( 0x22, "Your client is out of date. Please update your client.", Required ); + state.Mobile.SendMessage( 0x22, "This server reccomends that your client version be at least {0}.", Required ); + break; + } + case OldClientResponse.LenientKick: + case OldClientResponse.Annoy: + { + SendAnnoyGump( state.Mobile ); + break; + } + } + } + } + + private static void SendAnnoyGump( Mobile m ) + { + if( m.NetState != null && m.NetState.Version < Required ) + { + Gump g = new WarningGump( 1060637, 30720, String.Format( "Your client is out of date. Please update your client.
This server recommends that your client version be at least {0}.

You are currently using version {1}.

To patch, run UOPatch.exe inside your Ultima Online folder.", Required, m.NetState.Version ), 0xFFC000, 480, 360, + delegate( Mobile mob, bool selection, object o ) + { + m.SendMessage( "You will be reminded of this again." ); + + if ( m_OldClientResponse == OldClientResponse.LenientKick ) + m.SendMessage( "Old clients will be kicked after {0} days of character age and {1} hours of play time", m_AgeLeniency, m_GameTimeLeniency ); + + Timer.DelayCall( TimeSpan.FromMinutes( Utility.Random( 5, 15 ) ), delegate { SendAnnoyGump( m ); } ); + }, null, false ); + + g.Dragable = false; + g.Closable = false; + g.Resizable = false; + + m.SendGump( g ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/CrashGuard.cs b/Scripts/Misc/CrashGuard.cs new file mode 100644 index 0000000..e6c6445 --- /dev/null +++ b/Scripts/Misc/CrashGuard.cs @@ -0,0 +1,263 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Net.Mail; +using Server; +using Server.Accounting; +using Server.Network; + +namespace Server.Misc +{ + public class CrashGuard + { + private static bool Enabled = true; + private static bool SaveBackup = true; + private static bool RestartServer = true; + private static bool GenerateReport = true; + + public static void Initialize() + { + if ( Enabled ) // If enabled, register our crash event handler + EventSink.Crashed += new CrashedEventHandler( CrashGuard_OnCrash ); + } + + public static void CrashGuard_OnCrash( CrashedEventArgs e ) + { + if ( GenerateReport ) + GenerateCrashReport( e ); + + World.WaitForWriteCompletion(); + + if ( SaveBackup ) + Backup(); + + + /*if ( Core.Service ) + e.Close = true; + else */ if ( RestartServer ) + Restart( e ); + } + + private static void SendEmail( string filePath ) + { + Console.Write( "Crash: Sending email..." ); + + MailMessage message = new MailMessage( "RunUO", Email.CrashAddresses ); + + message.Subject = "Automated RunUO Crash Report"; + + message.Body = "Automated RunUO Crash Report. See attachment for details."; + + message.Attachments.Add( new Attachment( filePath ) ); + + if ( Email.Send( message ) ) + Console.WriteLine( "done" ); + else + Console.WriteLine( "failed" ); + } + + private static string GetRoot() + { + try + { + return Path.GetDirectoryName( Environment.GetCommandLineArgs()[0] ); + } + catch + { + return ""; + } + } + + private static string Combine( string path1, string path2 ) + { + if ( path1.Length == 0 ) + return path2; + + return Path.Combine( path1, path2 ); + } + + private static void Restart( CrashedEventArgs e ) + { + string root = GetRoot(); + + Console.Write( "Crash: Restarting..." ); + + try + { + Process.Start( Core.ExePath, Core.Arguments ); + Console.WriteLine( "done" ); + + e.Close = true; + } + catch + { + Console.WriteLine( "failed" ); + } + } + + private static void CreateDirectory( string path ) + { + if ( !Directory.Exists( path ) ) + Directory.CreateDirectory( path ); + } + + private static void CreateDirectory( string path1, string path2 ) + { + CreateDirectory( Combine( path1, path2 ) ); + } + + private static void CopyFile( string rootOrigin, string rootBackup, string path ) + { + string originPath = Combine( rootOrigin, path ); + string backupPath = Combine( rootBackup, path ); + + try + { + if ( File.Exists( originPath ) ) + File.Copy( originPath, backupPath ); + } + catch + { + } + } + + private static void Backup() + { + Console.Write( "Crash: Backing up..." ); + + try + { + string timeStamp = GetTimeStamp(); + + string root = GetRoot(); + string rootBackup = Combine( root, String.Format( "Backups/Crashed/{0}/", timeStamp ) ); + string rootOrigin = Combine( root, String.Format( "Saves/" ) ); + + // Create new directories + CreateDirectory( rootBackup ); + CreateDirectory( rootBackup, "Accounts/" ); + CreateDirectory( rootBackup, "Items/" ); + CreateDirectory( rootBackup, "Mobiles/" ); + CreateDirectory( rootBackup, "Guilds/" ); + CreateDirectory( rootBackup, "Regions/" ); + + // Copy files + CopyFile( rootOrigin, rootBackup, "Accounts/Accounts.xml" ); + + CopyFile( rootOrigin, rootBackup, "Items/Items.bin" ); + CopyFile( rootOrigin, rootBackup, "Items/Items.idx" ); + CopyFile( rootOrigin, rootBackup, "Items/Items.tdb" ); + + CopyFile( rootOrigin, rootBackup, "Mobiles/Mobiles.bin" ); + CopyFile( rootOrigin, rootBackup, "Mobiles/Mobiles.idx" ); + CopyFile( rootOrigin, rootBackup, "Mobiles/Mobiles.tdb" ); + + CopyFile( rootOrigin, rootBackup, "Guilds/Guilds.bin" ); + CopyFile( rootOrigin, rootBackup, "Guilds/Guilds.idx" ); + + CopyFile( rootOrigin, rootBackup, "Regions/Regions.bin" ); + CopyFile( rootOrigin, rootBackup, "Regions/Regions.idx" ); + + Console.WriteLine( "done" ); + } + catch + { + Console.WriteLine( "failed" ); + } + } + + private static void GenerateCrashReport( CrashedEventArgs e ) + { + Console.Write( "Crash: Generating report..." ); + + try + { + string timeStamp = GetTimeStamp(); + string fileName = String.Format( "Crash {0}.log", timeStamp ); + + string root = GetRoot(); + string filePath = Combine( root, fileName ); + + using ( StreamWriter op = new StreamWriter( filePath ) ) + { + Version ver = Core.Assembly.GetName().Version; + + op.WriteLine( "Server Crash Report" ); + op.WriteLine( "===================" ); + op.WriteLine(); + op.WriteLine( "RunUO Version {0}.{1}, Build {2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision ); + op.WriteLine( "Operating System: {0}", Environment.OSVersion ); + op.WriteLine( ".NET Framework: {0}", Environment.Version ); + op.WriteLine( "Time: {0}", DateTime.Now ); + + try { op.WriteLine( "Mobiles: {0}", World.Mobiles.Count ); } + catch {} + + try { op.WriteLine( "Items: {0}", World.Items.Count ); } + catch {} + + op.WriteLine( "Exception:" ); + op.WriteLine( e.Exception ); + op.WriteLine(); + + op.WriteLine( "Clients:" ); + + try + { + List states = NetState.Instances; + + op.WriteLine( "- Count: {0}", states.Count ); + + for ( int i = 0; i < states.Count; ++i ) + { + NetState state = states[i]; + + op.Write( "+ {0}:", state ); + + Account a = state.Account as Account; + + if ( a != null ) + op.Write( " (account = {0})", a.Username ); + + Mobile m = state.Mobile; + + if ( m != null ) + op.Write( " (mobile = 0x{0:X} '{1}')", m.Serial.Value, m.Name ); + + op.WriteLine(); + } + } + catch + { + op.WriteLine( "- Failed" ); + } + } + + Console.WriteLine( "done" ); + + if ( Email.CrashAddresses != null ) + SendEmail( filePath ); + } + catch + { + Console.WriteLine( "failed" ); + } + } + + private static string GetTimeStamp() + { + DateTime now = DateTime.Now; + + return String.Format( "{0}-{1}-{2}-{3}-{4}-{5}", + now.Day, + now.Month, + now.Year, + now.Hour, + now.Minute, + now.Second + ); + } + } +} diff --git a/Scripts/Misc/DataPath.cs b/Scripts/Misc/DataPath.cs new file mode 100644 index 0000000..c98dfe2 --- /dev/null +++ b/Scripts/Misc/DataPath.cs @@ -0,0 +1,64 @@ +using System; +using System.IO; +using Microsoft.Win32; +using Server; + +namespace Server.Misc +{ + public class DataPath + { + private static string CustomPath = "Data/Files"; + + public static void Configure() + { + if ( CustomPath != null ) + Core.DataDirectories.Add( CustomPath ); + + if ( Core.DataDirectories.Count == 0 && !Core.Service ) + { + Console.WriteLine( "Enter the Ultima Online directory:" ); + Console.Write( "> " ); + + Core.DataDirectories.Add( Console.ReadLine() ); + } + } + + private static string GetPath( string subName, string keyName ) + { + try + { + string keyString; + + if( Core.Is64Bit ) + keyString = @"SOFTWARE\Wow6432Node\{0}"; + else + keyString = @"SOFTWARE\{0}"; + + using( RegistryKey key = Registry.LocalMachine.OpenSubKey( String.Format( keyString, subName ) ) ) + { + if( key == null ) + return null; + + string v = key.GetValue( keyName ) as string; + + if( String.IsNullOrEmpty( v ) ) + return null; + + if ( keyName == "InstallDir" ) + v = v + @"\"; + + v = Path.GetDirectoryName( v ); + + if ( String.IsNullOrEmpty( v ) ) + return null; + + return v; + } + } + catch + { + return null; + } + } + } +} diff --git a/Scripts/Misc/DispellableAttribute.cs b/Scripts/Misc/DispellableAttribute.cs new file mode 100644 index 0000000..829138b --- /dev/null +++ b/Scripts/Misc/DispellableAttribute.cs @@ -0,0 +1,10 @@ +using System; +using Server; + +namespace Server.Misc +{ + [AttributeUsage( AttributeTargets.Class )] + public class DispellableAttribute : Attribute + { + } +} \ No newline at end of file diff --git a/Scripts/Misc/DispellableFieldAttribute.cs b/Scripts/Misc/DispellableFieldAttribute.cs new file mode 100644 index 0000000..a3faf7b --- /dev/null +++ b/Scripts/Misc/DispellableFieldAttribute.cs @@ -0,0 +1,10 @@ +using System; +using Server; + +namespace Server.Misc +{ + [AttributeUsage( AttributeTargets.Class )] + public class DispellableFieldAttribute : Attribute + { + } +} \ No newline at end of file diff --git a/Scripts/Misc/Email.cs b/Scripts/Misc/Email.cs new file mode 100644 index 0000000..9f0dd0d --- /dev/null +++ b/Scripts/Misc/Email.cs @@ -0,0 +1,78 @@ +using System; +using System.Net.Mail; +using System.Text.RegularExpressions; +using System.Threading; +using Server; + +namespace Server.Misc +{ + public class Email + { + /* In order to support emailing, fill in EmailServer: + * Example: + * public static readonly string EmailServer = "mail.domain.com"; + * + * If you want to add crash reporting emailing, fill in CrashAddresses: + * Example: + * public static readonly string CrashAddresses = "first@email.here;second@email.here;third@email.here"; + * + * If you want to add speech log page emailing, fill in SpeechLogPageAddresses: + * Example: + * public static readonly string SpeechLogPageAddresses = "first@email.here;second@email.here;third@email.here"; + */ + + public static readonly string EmailServer = null; + + public static readonly string CrashAddresses = null; + public static readonly string SpeechLogPageAddresses = null; + + private static Regex _pattern = new Regex( @"^[a-z0-9.+_-]+@([a-z0-9-]+.)+[a-z]+$", RegexOptions.IgnoreCase ); + + public static bool IsValid( string address ) + { + if ( address == null || address.Length > 320 ) + return false; + + return _pattern.IsMatch( address ); + } + + private static SmtpClient _Client; + + public static void Configure() + { + if ( EmailServer != null ) + _Client = new SmtpClient( EmailServer ); + } + + public static bool Send( MailMessage message ) + { + try + { + lock ( _Client ) { + _Client.Send( message ); + } + } + catch + { + return false; + } + + return true; + } + + public static void AsyncSend( MailMessage message ) + { + ThreadPool.QueueUserWorkItem( new WaitCallback( SendCallback ), message ); + } + + private static void SendCallback( object state ) + { + MailMessage message = (MailMessage) state; + + if ( Send( message ) ) + Console.WriteLine( "Sent e-mail '{0}' to '{1}'.", message.Subject, message.To ); + else + Console.WriteLine( "Failure sending e-mail '{0}' to '{1}'.", message.Subject, message.To ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Emitter.cs b/Scripts/Misc/Emitter.cs new file mode 100644 index 0000000..b5f83d0 --- /dev/null +++ b/Scripts/Misc/Emitter.cs @@ -0,0 +1,740 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; +using System.Reflection.Emit; +using Emit = System.Reflection.Emit; + +namespace Server +{ + public class AssemblyEmitter + { + private string m_AssemblyName; + + private AppDomain m_AppDomain; + private AssemblyBuilder m_AssemblyBuilder; + private ModuleBuilder m_ModuleBuilder; + + public AssemblyEmitter( string assemblyName, bool canSave ) + { + m_AssemblyName = assemblyName; + + m_AppDomain = AppDomain.CurrentDomain; + + m_AssemblyBuilder = m_AppDomain.DefineDynamicAssembly( + new AssemblyName( assemblyName ), + canSave ? AssemblyBuilderAccess.RunAndSave : AssemblyBuilderAccess.Run + ); + + if ( canSave ) + { + m_ModuleBuilder = m_AssemblyBuilder.DefineDynamicModule( + assemblyName, + String.Format( "{0}.dll", assemblyName.ToLower() ), + false + ); + } + else + { + m_ModuleBuilder = m_AssemblyBuilder.DefineDynamicModule( + assemblyName, + false + ); + } + } + + public TypeBuilder DefineType( string typeName, TypeAttributes attrs, Type parentType ) + { + return m_ModuleBuilder.DefineType( typeName, attrs, parentType ); + } + + public void Save() + { + m_AssemblyBuilder.Save( + String.Format( "{0}.dll", m_AssemblyName.ToLower() ) + ); + } + } + + public class MethodEmitter + { + private TypeBuilder m_TypeBuilder; + + private MethodBuilder m_Builder; + private ILGenerator m_Generator; + + private Type[] m_ArgumentTypes; + + public TypeBuilder Type + { + get { return m_TypeBuilder; } + } + + public ILGenerator Generator + { + get { return m_Generator; } + } + + private class CallInfo + { + public Type type; + public MethodInfo method; + + public int index; + public ParameterInfo[] parms; + + public CallInfo( Type type, MethodInfo method ) + { + this.type = type; + this.method = method; + + this.parms = method.GetParameters(); + } + } + + private Stack m_Stack; + private Stack m_Calls; + + private Dictionary> m_Temps; + + public MethodBuilder Method + { + get { return m_Builder; } + } + + public MethodEmitter( TypeBuilder typeBuilder ) + { + m_TypeBuilder = typeBuilder; + + m_Temps = new Dictionary>(); + + m_Stack = new Stack(); + m_Calls = new Stack(); + } + + public void Define( string name, MethodAttributes attr, Type returnType, Type[] parms ) + { + m_Builder = m_TypeBuilder.DefineMethod( name, attr, returnType, parms ); + m_Generator = m_Builder.GetILGenerator(); + + m_ArgumentTypes = parms; + } + + public LocalBuilder CreateLocal( Type localType ) + { + return m_Generator.DeclareLocal( localType ); + } + + public LocalBuilder AcquireTemp( Type localType ) + { + Queue list; + + if ( !m_Temps.TryGetValue( localType, out list ) ) + m_Temps[localType] = list = new Queue(); + + if ( list.Count > 0 ) + return list.Dequeue(); + + return CreateLocal( localType ); + } + + public void ReleaseTemp( LocalBuilder local ) + { + Queue list; + + if ( !m_Temps.TryGetValue( local.LocalType, out list ) ) + m_Temps[local.LocalType] = list = new Queue(); + + list.Enqueue( local ); + } + + public void Branch( Label label ) + { + m_Generator.Emit( OpCodes.Br, label ); + } + + public void BranchIfFalse( Label label ) + { + Pop( typeof( object ) ); + + m_Generator.Emit( OpCodes.Brfalse, label ); + } + + public void BranchIfTrue( Label label ) + { + Pop( typeof( object ) ); + + m_Generator.Emit( OpCodes.Brtrue, label ); + } + + public Label CreateLabel() + { + return m_Generator.DefineLabel(); + } + + public void MarkLabel( Label label ) + { + m_Generator.MarkLabel( label ); + } + + public void Pop() + { + m_Stack.Pop(); + } + + public void Pop( Type expected ) + { + if ( expected == null ) + throw new InvalidOperationException( "Expected type cannot be null." ); + + Type onStack = m_Stack.Pop(); + + if ( expected == typeof( bool ) ) + expected = typeof( int ); + + if ( onStack == typeof( bool ) ) + onStack = typeof( int ); + + if ( !expected.IsAssignableFrom( onStack ) ) + throw new InvalidOperationException( "Unexpected stack state." ); + } + + public void Push( Type type ) + { + m_Stack.Push( type ); + } + + public void Return() + { + if ( m_Stack.Count != ( m_Builder.ReturnType == typeof( void ) ? 0 : 1 ) ) + throw new InvalidOperationException( "Stack return mismatch." ); + + m_Generator.Emit( OpCodes.Ret ); + } + + public void LoadNull() + { + LoadNull( typeof( object ) ); + } + + public void LoadNull( Type type ) + { + Push( type ); + + m_Generator.Emit( OpCodes.Ldnull ); + } + + public void Load( string value ) + { + Push( typeof( string ) ); + + if ( value != null ) + m_Generator.Emit( OpCodes.Ldstr, value ); + else + m_Generator.Emit( OpCodes.Ldnull ); + } + + public void Load( Enum value ) + { + int toLoad = ((IConvertible)value).ToInt32( null ); + Load( toLoad ); + + Pop(); + Push( value.GetType() ); + } + + public void Load( long value ) + { + Push( typeof( long ) ); + + m_Generator.Emit( OpCodes.Ldc_I8, value ); + } + + public void Load( float value ) + { + Push( typeof( float ) ); + + m_Generator.Emit( OpCodes.Ldc_R4, value ); + } + + public void Load( double value ) + { + Push( typeof( double ) ); + + m_Generator.Emit( OpCodes.Ldc_R8, value ); + } + + public void Load( char value ) + { + Load( (int) value ); + + Pop(); + Push( typeof( char ) ); + } + + public void Load( bool value ) + { + Push( typeof( bool ) ); + + if ( value ) + m_Generator.Emit( OpCodes.Ldc_I4_1 ); + else + m_Generator.Emit( OpCodes.Ldc_I4_0 ); + } + + public void Load( int value ) + { + Push( typeof( int ) ); + + switch ( value ) + { + case -1: + m_Generator.Emit( OpCodes.Ldc_I4_M1 ); + break; + + case 0: + m_Generator.Emit( OpCodes.Ldc_I4_0 ); + break; + + case 1: + m_Generator.Emit( OpCodes.Ldc_I4_1 ); + break; + + case 2: + m_Generator.Emit( OpCodes.Ldc_I4_2 ); + break; + + case 3: + m_Generator.Emit( OpCodes.Ldc_I4_3 ); + break; + + case 4: + m_Generator.Emit( OpCodes.Ldc_I4_4 ); + break; + + case 5: + m_Generator.Emit( OpCodes.Ldc_I4_5 ); + break; + + case 6: + m_Generator.Emit( OpCodes.Ldc_I4_6 ); + break; + + case 7: + m_Generator.Emit( OpCodes.Ldc_I4_7 ); + break; + + case 8: + m_Generator.Emit( OpCodes.Ldc_I4_8 ); + break; + + default: + if ( value >= sbyte.MinValue && value <= sbyte.MaxValue ) + m_Generator.Emit( OpCodes.Ldc_I4_S, (sbyte) value ); + else + m_Generator.Emit( OpCodes.Ldc_I4, value ); + + break; + } + } + + public void LoadField( FieldInfo field ) + { + Pop( field.DeclaringType ); + + Push( field.FieldType ); + + m_Generator.Emit( OpCodes.Ldfld, field ); + } + + public void LoadLocal( LocalBuilder local ) + { + Push( local.LocalType ); + + int index = local.LocalIndex; + + switch ( index ) + { + case 0: + m_Generator.Emit( OpCodes.Ldloc_0 ); + break; + + case 1: + m_Generator.Emit( OpCodes.Ldloc_1 ); + break; + + case 2: + m_Generator.Emit( OpCodes.Ldloc_2 ); + break; + + case 3: + m_Generator.Emit( OpCodes.Ldloc_3 ); + break; + + default: + if ( index >= byte.MinValue && index <= byte.MinValue ) + m_Generator.Emit( OpCodes.Ldloc_S, (byte) index ); + else + m_Generator.Emit( OpCodes.Ldloc, (short) index ); + + break; + } + } + + public void StoreLocal( LocalBuilder local ) + { + Pop( local.LocalType ); + + m_Generator.Emit( OpCodes.Stloc, local ); + } + + public void LoadArgument( int index ) + { + if ( index > 0 ) + Push( m_ArgumentTypes[index - 1] ); + else + Push( m_TypeBuilder ); + + switch ( index ) + { + case 0: + m_Generator.Emit( OpCodes.Ldarg_0 ); + break; + + case 1: + m_Generator.Emit( OpCodes.Ldarg_1 ); + break; + + case 2: + m_Generator.Emit( OpCodes.Ldarg_2 ); + break; + + case 3: + m_Generator.Emit( OpCodes.Ldarg_3 ); + break; + + default: + if ( index >= byte.MinValue && index <= byte.MaxValue ) + m_Generator.Emit( OpCodes.Ldarg_S, (byte) index ); + else + m_Generator.Emit( OpCodes.Ldarg, (short) index ); + + break; + } + } + + public void CastAs( Type type ) + { + Pop( typeof( object ) ); + Push( type ); + + m_Generator.Emit( OpCodes.Isinst, type ); + } + + public void Neg() + { + Pop( typeof( int ) ); + + Push( typeof( int ) ); + + m_Generator.Emit( OpCodes.Neg ); + } + + public void Compare( OpCode opCode ) + { + Pop(); + Pop(); + + Push( typeof( int ) ); + + m_Generator.Emit( opCode ); + } + + public void LogicalNot() + { + Pop( typeof( int ) ); + + Push( typeof( int ) ); + + m_Generator.Emit( OpCodes.Ldc_I4_0 ); + m_Generator.Emit( OpCodes.Ceq ); + } + + public void Xor() + { + Pop( typeof( int ) ); + Pop( typeof( int ) ); + + Push( typeof( int ) ); + + m_Generator.Emit( OpCodes.Xor ); + } + + public Type Active + { + get { return m_Stack.Peek(); } + } + + public void Chain( Property prop ) + { + for ( int i = 0; i < prop.Chain.Length; ++i ) + Call( prop.Chain[i].GetGetMethod() ); + } + + public void Call( MethodInfo method ) + { + BeginCall( method ); + + CallInfo call = m_Calls.Peek(); + + if ( call.parms.Length > 0 ) + throw new InvalidOperationException( "Method requires parameters." ); + + FinishCall(); + } + + public delegate void Callback(); + +#if MONO + private static bool GenericComparator( Type type, object obj ) + { + return ( type.IsGenericType ) + && ( type.GetGenericTypeDefinition() == typeof( IComparable<> ) ) + && ( type.GetGenericArguments()[0].IsAssignableFrom(obj as Type) ); + } +#endif + + public bool CompareTo( int sign, Callback argGenerator ) + { + Type active = this.Active; + + MethodInfo compareTo = active.GetMethod( "CompareTo", new Type[] { active } ); + + if ( compareTo == null ) + { + /* This gets a little tricky... + * + * There's a scenario where we might be trying to use CompareTo on an interface + * which, while it doesn't explicitly implement CompareTo itself, is said to + * extend IComparable indirectly. The implementation is implicitly passed off + * to implementers... + * + * interface ISomeInterface : IComparable + * { + * void SomeMethod(); + * } + * + * class SomeClass : ISomeInterface + * { + * void SomeMethod() { ... } + * int CompareTo( object other ) { ... } + * } + * + * In this case, calling ISomeInterface.GetMethod( "CompareTo" ) will return null. + * + * Bleh. + */ + +#if MONO + Type[] ifaces = active.FindInterfaces( GenericComparator, active ); +#else + Type[] ifaces = active.FindInterfaces( delegate( Type type, object obj ) + { + return ( type.IsGenericType ) + && ( type.GetGenericTypeDefinition() == typeof( IComparable<> ) ) + && ( type.GetGenericArguments()[0].IsAssignableFrom( active ) ); + }, null ); +#endif + + if ( ifaces.Length > 0 ) + { + compareTo = ifaces[0].GetMethod( "CompareTo", new Type[] { active } ); + } + else + { + ifaces = active.FindInterfaces( delegate( Type type, object obj ) + { + return ( type == typeof( IComparable ) ); + }, null ); + + if ( ifaces.Length > 0 ) + compareTo = ifaces[0].GetMethod( "CompareTo", new Type[] { active } ); + } + } + + if ( compareTo == null ) + return false; + + if ( !active.IsValueType ) + { + /* This object is a reference type, so we have to make it behave + * + * null.CompareTo( null ) = 0 + * real.CompareTo( null ) = -1 + * null.CompareTo( real ) = +1 + * + */ + + LocalBuilder aValue = AcquireTemp( active ); + LocalBuilder bValue = AcquireTemp( active ); + + StoreLocal( aValue ); + + argGenerator(); + + StoreLocal( bValue ); + + /* if ( aValue == null ) + * { + * if ( bValue == null ) + * v = 0; + * else + * v = +1; + * } + * else if ( bValue == null ) + * { + * v = -1; + * } + * else + * { + * v = aValue.CompareTo( bValue ); + * } + */ + + Label store = CreateLabel(); + + Label aNotNull = CreateLabel(); + + LoadLocal( aValue ); + BranchIfTrue( aNotNull ); + // if ( aValue == null ) + { + Label bNotNull = CreateLabel(); + + LoadLocal( bValue ); + BranchIfTrue( bNotNull ); + // if ( bValue == null ) + { + Load( 0 ); + Pop( typeof( int ) ); + Branch( store ); + } + MarkLabel( bNotNull ); + // else + { + Load( sign ); + Pop( typeof( int ) ); + Branch( store ); + } + } + MarkLabel( aNotNull ); + // else + { + Label bNotNull = CreateLabel(); + + LoadLocal( bValue ); + BranchIfTrue( bNotNull ); + // bValue == null + { + Load( -sign ); + Pop( typeof( int ) ); + Branch( store ); + } + MarkLabel( bNotNull ); + // else + { + LoadLocal( aValue ); + BeginCall( compareTo ); + + LoadLocal( bValue ); + ArgumentPushed(); + + FinishCall(); + + if ( sign == -1 ) + Neg(); + } + } + + MarkLabel( store ); + + ReleaseTemp( aValue ); + ReleaseTemp( bValue ); + } + else + { + BeginCall( compareTo ); + + argGenerator(); + + ArgumentPushed(); + + FinishCall(); + + if ( sign == -1 ) + Neg(); + } + + return true; + } + + public void BeginCall( MethodInfo method ) + { + Type type; + + if ( ( method.CallingConvention & CallingConventions.HasThis ) != 0 ) + type = m_Stack.Peek(); + else + type = method.DeclaringType; + + m_Calls.Push( new CallInfo( type, method ) ); + + if ( type.IsValueType ) + { + LocalBuilder temp = AcquireTemp( type ); + + m_Generator.Emit( OpCodes.Stloc, temp ); + m_Generator.Emit( OpCodes.Ldloca, temp ); + + ReleaseTemp( temp ); + } + } + + public void FinishCall() + { + CallInfo call = m_Calls.Pop(); + + if ( ( call.type.IsValueType || call.type.IsByRef ) && call.method.DeclaringType != call.type ) + m_Generator.Emit( OpCodes.Constrained, call.type ); + + if ( call.method.DeclaringType.IsValueType || call.method.IsStatic ) + m_Generator.Emit( OpCodes.Call, call.method ); + else + m_Generator.Emit( OpCodes.Callvirt, call.method ); + + for ( int i = call.parms.Length - 1; i >= 0; --i ) + Pop( call.parms[i].ParameterType ); + + if ( ( call.method.CallingConvention & CallingConventions.HasThis ) != 0 ) + Pop( call.method.DeclaringType ); + + if ( call.method.ReturnType != typeof( void ) ) + Push( call.method.ReturnType ); + } + + public void ArgumentPushed() + { + CallInfo call = m_Calls.Peek(); + + ParameterInfo parm = call.parms[call.index++]; + + Type argumentType = m_Stack.Peek(); + + if ( !parm.ParameterType.IsAssignableFrom( argumentType ) ) + throw new InvalidOperationException( "Parameter type mismatch." ); + + if ( argumentType.IsValueType && !parm.ParameterType.IsValueType ) + m_Generator.Emit( OpCodes.Box, argumentType ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Fastwalk.cs b/Scripts/Misc/Fastwalk.cs new file mode 100644 index 0000000..6e8a791 --- /dev/null +++ b/Scripts/Misc/Fastwalk.cs @@ -0,0 +1,32 @@ +using System; +using Server; + +namespace Server.Misc +{ + // This fastwalk detection is no longer required + // As of B36 PlayerMobile implements movement packet throttling which more reliably controls movement speeds + public class Fastwalk + { + private static int MaxSteps = 4; // Maximum number of queued steps until fastwalk is detected + private static bool Enabled = false; // Is fastwalk detection enabled? + private static bool UOTDOverride = false; // Should UO:TD clients not be checked for fastwalk? + private static AccessLevel AccessOverride = AccessLevel.GameMaster; // Anyone with this or higher access level is not checked for fastwalk + + public static void Initialize() + { + Mobile.FwdMaxSteps = MaxSteps; + Mobile.FwdEnabled = Enabled; + Mobile.FwdUOTDOverride = UOTDOverride; + Mobile.FwdAccessOverride = AccessOverride; + + if ( Enabled ) + EventSink.FastWalk += new FastWalkEventHandler( OnFastWalk ); + } + + public static void OnFastWalk( FastWalkEventArgs e ) + { + e.Blocked = true;//disallow this fastwalk + Console.WriteLine( "Client: {0}: Fast movement detected (name={1})", e.NetState, e.NetState.Mobile.Name ); + } + } +} diff --git a/Scripts/Misc/FoodDecay.cs b/Scripts/Misc/FoodDecay.cs new file mode 100644 index 0000000..1cfe994 --- /dev/null +++ b/Scripts/Misc/FoodDecay.cs @@ -0,0 +1,150 @@ +using System; +using Server.Network; +using Server; +using Server.Mobiles; +using Server.Regions; + +namespace Server.Misc +{ + public class FoodDecayTimer : Timer + { + public static void Initialize() + { + new FoodDecayTimer().Start(); + } + + public FoodDecayTimer() : base( TimeSpan.FromMinutes( 5 ), TimeSpan.FromMinutes( 5 ) ) + { + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + FoodDecay(); + } + + public static void FoodDecay() + { + foreach ( NetState state in NetState.Instances ) + { + HungerDecay( state.Mobile ); + } + } + + public static void HungerDecay( Mobile m ) + { + if ( m != null && m is PlayerMobile && !(m.AccessLevel > AccessLevel.Player) && !(m.Region is InnRegion) ) + { + if ( m.Hunger >= 1 ) + m.Hunger -= 1; + if ( m.Thirst >= 1 ) + m.Thirst -= 1; + } + } + } + + public class EatDecayTimer : Timer + { + public static void Initialize() + { + new EatDecayTimer().Start(); + } + + public EatDecayTimer() : base( TimeSpan.FromSeconds( 11.0 ), TimeSpan.FromSeconds( 11.0 ) ) + { + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + EatDecay(); + } + + public static void EatDecay() + { + foreach ( NetState state in NetState.Instances ) + { + EatDecaying( state.Mobile ); + } + } + + public static void EatDecaying( Mobile m ) + { + if ( m is PlayerMobile && m.Alive && (m.Hunger < 5 || m.Thirst < 5) ) + { + if ( m.Hunger < 5 ) + { + int hits = 0; + + switch (m.Hunger) + { + case 4: hits = 2; break; + case 3: hits = 3; break; + case 2: hits = 4; break; + case 1: hits = 5; break; + case 0: + { + hits = 6; + m.SendMessage( "You are starving to death!" ); + m.LocalOverheadMessage(MessageType.Emote, 1150, true, "I am so hungry!"); + break; + } + } + + if ( m.Hits < hits ) + hits = m.Hits-1; + + if ( hits > 0 ) + m.Hits -= hits; + + if ( m.Hunger < 3 && m.Hunger > 0 ) + { + if ( Utility.RandomBool() ){ m.SendMessage( "You are getting very hungry!" ); } + if ( Utility.RandomMinMax(1,5)==1 ){ m.LocalOverheadMessage(MessageType.Emote, 1150, true, "I am getting hungry!"); } + } + } + if ( m.Thirst < 5 ) + { + switch (m.Thirst) + { + case 4: m.Stam -= 2; break; + case 3: m.Stam -= 3; break; + case 2: m.Stam -= 4; break; + case 1: m.Stam -= 5; break; + case 0: + { + m.Stam -= 6; + m.SendMessage( "You are exhausted from thirst!" ); + m.LocalOverheadMessage(MessageType.Emote, 1150, true, "I am so thirsty!"); + break; + } + } + if ( m.Thirst < 3 && m.Thirst > 0 ) + { + if ( Utility.RandomBool() ){ m.SendMessage( "You are getting exhausted from thirst!" ); } + if ( Utility.RandomMinMax(1,5)==1 ){ m.LocalOverheadMessage(MessageType.Emote, 1150, true, "I am getting thirsty!"); } + } + if ( m.Stam < 0 ) + m.Stam = 0; + } + if ( m.Thirst < 5 || m.Hunger < 5 ) + { + int test = m.Thirst; + if ( m.Hunger < m.Thirst ) + test = m.Hunger; + + switch (test) + { + case 4: m.Mana -= 2; break; + case 3: m.Mana -= 3; break; + case 2: m.Mana -= 4; break; + case 1: m.Mana -= 5; break; + case 0: m.Mana -= 6; break; + } + if ( m.Mana < 0 ) + m.Mana = 0; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Geometry.cs b/Scripts/Misc/Geometry.cs new file mode 100644 index 0000000..d716b91 --- /dev/null +++ b/Scripts/Misc/Geometry.cs @@ -0,0 +1,224 @@ +using System; +using Server; + +namespace Server.Misc +{ + public delegate void DoEffect_Callback( Point3D p, Map map ); + + public static class Geometry + { + public static void Swap( ref T a, ref T b ) + { + T temp = a; + a = b; + b = temp; + } + + public static double RadiansToDegrees( double angle ) + { + return angle * (180.0 / Math.PI); + } + + public static double DegreesToRadians( double angle ) + { + return angle * ( Math.PI / 180.0 ); + } + + public class CirclePoint + { + private Point2D point; + private int angle; + private int quadrant; + + public Point2D Point{ get{ return point; } } + public int Angle{ get{ return angle; } } + public int Quadrant{ get{ return quadrant; } } + + public CirclePoint( Point2D point, int angle, int quadrant ) + { + this.point = point; + this.angle = angle; + this.quadrant = quadrant; + } + } + + public static Point2D ArcPoint( Point3D loc, int radius, int angle ) + { + int sideA, sideB; + + if ( angle < 0 ) + angle = 0; + + if ( angle > 90 ) + angle = 90; + + sideA = (int) Math.Round( radius * Math.Sin( DegreesToRadians( angle ) ) ); + sideB = (int) Math.Round( radius * Math.Cos( DegreesToRadians( angle ) ) ); + + return new Point2D( loc.X - sideB, loc.Y - sideA ); + } + + public static void Circle2D( Point3D loc, Map map, int radius, DoEffect_Callback effect ) + { + Circle2D( loc, map, radius, effect, 0, 360 ); + } + + public static void Circle2D( Point3D loc, Map map, int radius, DoEffect_Callback effect, int angleStart, int angleEnd ) + { + if ( angleStart < 0 || angleStart > 360 ) + angleStart = 0; + + if ( angleEnd > 360 || angleEnd < 0 ) + angleEnd = 360; + + if ( angleStart == angleEnd ) + return; + + bool opposite = angleStart > angleEnd; + + int startQuadrant = angleStart / 90; + int endQuadrant = angleEnd / 90; + + Point2D start = ArcPoint( loc, radius, angleStart % 90 ); + Point2D end = ArcPoint( loc, radius, angleEnd % 90 ); + + if ( opposite ) + { + Swap( ref start, ref end ); + Swap( ref startQuadrant, ref endQuadrant ); + } + + CirclePoint startPoint = new CirclePoint( start, angleStart, startQuadrant ); + CirclePoint endPoint = new CirclePoint( end, angleEnd, endQuadrant ); + + int error = -radius; + int x = radius; + int y = 0; + + while (x > y) + { + plot4points( loc, map, x, y, startPoint, endPoint, effect, opposite ); + plot4points( loc, map, y, x, startPoint, endPoint, effect, opposite ); + + error += ( y * 2 ) + 1; + ++y; + + if (error >= 0) + { + --x; + error -= x * 2; + } + } + + plot4points( loc, map, x, y, startPoint, endPoint, effect, opposite ); + } + + public static void plot4points( Point3D loc, Map map, int x, int y, CirclePoint start, CirclePoint end, DoEffect_Callback effect, bool opposite ) + { + Point2D pointA = new Point2D( loc.X - x, loc.Y - y ); + Point2D pointB = new Point2D( loc.X - y, loc.Y - x ); + + int quadrant = 2; + + if ( x == 0 && start.Quadrant == 3 ) + quadrant = 3; + + if ( WithinCircleBounds( quadrant == 3 ? pointB : pointA, quadrant, loc, start, end, opposite ) ) + effect( new Point3D( loc.X + x, loc.Y + y, loc.Z ), map ); + + quadrant = 3; + + if ( y == 0 && start.Quadrant == 0 ) + quadrant = 0; + + if ( x != 0 && WithinCircleBounds( quadrant == 0 ? pointA : pointB, quadrant, loc, start, end, opposite ) ) + effect( new Point3D( loc.X - x, loc.Y + y, loc.Z ), map ); + if ( y != 0 && WithinCircleBounds( pointB, 1, loc, start, end, opposite ) ) + effect( new Point3D( loc.X + x, loc.Y - y, loc.Z ), map ); + if ( x != 0 && y != 0 && WithinCircleBounds( pointA, 0, loc, start, end, opposite ) ) + effect( new Point3D( loc.X - x, loc.Y - y, loc.Z ), map ); + } + + public static bool WithinCircleBounds( Point2D pointLoc, int pointQuadrant, Point3D center, CirclePoint start, CirclePoint end, bool opposite ) + { + if ( start.Angle == 0 && end.Angle == 360 ) + return true; + + int startX = start.Point.X; + int startY = start.Point.Y; + int endX = end.Point.X; + int endY = end.Point.Y; + + int x = pointLoc.X; + int y = pointLoc.Y; + + if ( pointQuadrant < start.Quadrant || pointQuadrant > end.Quadrant ) + return opposite; + + if ( pointQuadrant > start.Quadrant && pointQuadrant < end.Quadrant ) + return !opposite; + + bool withinBounds = true; + + if ( start.Quadrant == end.Quadrant ) + { + if ( startX == endX && ( x > startX || y > startY || y < endY ) ) + withinBounds = false; + else if ( startY == endY && ( y < startY || x < startX || x > endX ) ) + withinBounds = false; + else if ( x < startX || x > endX || y > startY || y < endY ) + withinBounds = false; + } + else if ( pointQuadrant == start.Quadrant && ( x < startX || y > startY ) ) + withinBounds = false; + else if ( pointQuadrant == end.Quadrant && ( x > endX || y < endY ) ) + withinBounds = false; + + return opposite ? !withinBounds : withinBounds; + } + + public static void Line2D( Point3D start, Point3D end, Map map, DoEffect_Callback effect ) + { + bool steep = Math.Abs( end.Y - start.Y ) > Math.Abs( end.X - start.X ); + + int x0 = start.X; + int x1 = end.X; + int y0 = start.Y; + int y1 = end.Y; + + if ( steep ) + { + Swap( ref x0, ref y0 ); + Swap( ref x1, ref y1 ); + } + + if ( x0 > x1 ) + { + Swap( ref x0, ref x1 ); + Swap( ref y0, ref y1 ); + } + + int deltax = x1 - x0; + int deltay = Math.Abs( y1 - y0 ); + int error = deltax / 2; + int ystep = y0 < y1 ? 1 : -1; + int y = y0; + + for ( int x = x0; x <= x1; x++ ) + { + if ( steep ) + effect( new Point3D( y, x, start.Z ), map ); + else + effect( new Point3D( x, y, start.Z ), map ); + + error -= deltay; + + if ( error < 0 ) + { + y += ystep; + error += deltax; + } + } + } + } +} diff --git a/Scripts/Misc/HardwareInfo.cs b/Scripts/Misc/HardwareInfo.cs new file mode 100644 index 0000000..53e537d --- /dev/null +++ b/Scripts/Misc/HardwareInfo.cs @@ -0,0 +1,189 @@ +using System; +using Server; +using Server.Commands; +using Server.Accounting; +using Server.Network; +using Server.Targeting; + +namespace Server +{ + public class HardwareInfo + { + private int m_InstanceID; + private int m_OSMajor, m_OSMinor, m_OSRevision; + private int m_CpuManufacturer, m_CpuFamily, m_CpuModel, m_CpuClockSpeed, m_CpuQuantity; + private int m_PhysicalMemory; + private int m_ScreenWidth, m_ScreenHeight, m_ScreenDepth; + private int m_DXMajor, m_DXMinor; + private int m_VCVendorID, m_VCDeviceID, m_VCMemory; + private int m_Distribution, m_ClientsRunning, m_ClientsInstalled, m_PartialInstalled; + private string m_VCDescription; + private string m_Language; + private string m_Unknown; + private DateTime m_TimeReceived; + + [CommandProperty( AccessLevel.GameMaster )] + public int CpuModel{ get{ return m_CpuModel; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int CpuClockSpeed{ get{ return m_CpuClockSpeed; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int CpuQuantity{ get{ return m_CpuQuantity; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int OSMajor{ get{ return m_OSMajor; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int OSMinor{ get{ return m_OSMinor; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int OSRevision{ get{ return m_OSRevision; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int InstanceID{ get{ return m_InstanceID; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int ScreenWidth{ get{ return m_ScreenWidth; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int ScreenHeight{ get{ return m_ScreenHeight; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int ScreenDepth{ get{ return m_ScreenDepth; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int PhysicalMemory{ get{ return m_PhysicalMemory; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int CpuManufacturer{ get{ return m_CpuManufacturer; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int CpuFamily{ get{ return m_CpuFamily; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int VCVendorID{ get{ return m_VCVendorID; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int VCDeviceID{ get{ return m_VCDeviceID; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int VCMemory{ get{ return m_VCMemory; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int DXMajor{ get{ return m_DXMajor; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int DXMinor{ get{ return m_DXMinor; } } + + [CommandProperty( AccessLevel.GameMaster )] + public string VCDescription{ get{ return m_VCDescription; } } + + [CommandProperty( AccessLevel.GameMaster )] + public string Language{ get{ return m_Language; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int Distribution{ get{ return m_Distribution; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int ClientsRunning{ get{ return m_ClientsRunning; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int ClientsInstalled{ get{ return m_ClientsInstalled; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int PartialInstalled{ get{ return m_PartialInstalled; } } + + [CommandProperty( AccessLevel.GameMaster )] + public string Unknown{ get{ return m_Unknown; } } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime TimeReceived { get { return m_TimeReceived; } } + + public static void Initialize() + { + PacketHandlers.Register( 0xD9, 0x10C, false, new OnPacketReceive( OnReceive ) ); + + CommandSystem.Register( "HWInfo", AccessLevel.GameMaster, new CommandEventHandler( HWInfo_OnCommand ) ); + } + + [Usage( "HWInfo" )] + [Description( "Displays information about a targeted player's hardware." )] + public static void HWInfo_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( HWInfo_OnTarget ) ); + e.Mobile.SendMessage( "Target a player to view their hardware information." ); + } + + public static void HWInfo_OnTarget( Mobile from, object obj ) + { + if ( obj is Mobile && ((Mobile)obj).Player ) + { + Mobile m = (Mobile)obj; + Account acct = m.Account as Account; + + if ( acct != null ) + { + HardwareInfo hwInfo = acct.HardwareInfo; + + if ( hwInfo != null ) + CommandLogging.WriteLine( from, "{0} {1} viewing hardware info of {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( m ) ); + + if ( hwInfo != null ) + from.SendGump( new Gumps.PropertiesGump( from, hwInfo ) ); + else + from.SendMessage( "No hardware information for that account was found." ); + } + else + { + from.SendMessage( "No account has been attached to that player." ); + } + } + else + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( HWInfo_OnTarget ) ); + from.SendMessage( "That is not a player. Try again." ); + } + } + + public static void OnReceive( NetState state, PacketReader pvSrc ) + { + pvSrc.ReadByte(); // 1: <4.0.1a, 2>=4.0.1a + + HardwareInfo info = new HardwareInfo(); + + info.m_InstanceID = pvSrc.ReadInt32(); + info.m_OSMajor = pvSrc.ReadInt32(); + info.m_OSMinor = pvSrc.ReadInt32(); + info.m_OSRevision = pvSrc.ReadInt32(); + info.m_CpuManufacturer = pvSrc.ReadByte(); + info.m_CpuFamily = pvSrc.ReadInt32(); + info.m_CpuModel = pvSrc.ReadInt32(); + info.m_CpuClockSpeed = pvSrc.ReadInt32(); + info.m_CpuQuantity = pvSrc.ReadByte(); + info.m_PhysicalMemory = pvSrc.ReadInt32(); + info.m_ScreenWidth = pvSrc.ReadInt32(); + info.m_ScreenHeight = pvSrc.ReadInt32(); + info.m_ScreenDepth = pvSrc.ReadInt32(); + info.m_DXMajor = pvSrc.ReadInt16(); + info.m_DXMinor = pvSrc.ReadInt16(); + info.m_VCDescription = pvSrc.ReadUnicodeStringLESafe( 64 ); + info.m_VCVendorID = pvSrc.ReadInt32(); + info.m_VCDeviceID = pvSrc.ReadInt32(); + info.m_VCMemory = pvSrc.ReadInt32(); + info.m_Distribution = pvSrc.ReadByte(); + info.m_ClientsRunning = pvSrc.ReadByte(); + info.m_ClientsInstalled = pvSrc.ReadByte(); + info.m_PartialInstalled = pvSrc.ReadByte(); + info.m_Language = pvSrc.ReadUnicodeStringLESafe( 4 ); + info.m_Unknown = pvSrc.ReadStringSafe( 64 ); + + info.m_TimeReceived = DateTime.Now; + + Account acct = state.Account as Account; + + if ( acct != null ) + acct.HardwareInfo = info; + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/InhumanSpeech.cs b/Scripts/Misc/InhumanSpeech.cs new file mode 100644 index 0000000..48ad49c --- /dev/null +++ b/Scripts/Misc/InhumanSpeech.cs @@ -0,0 +1,595 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Server; + +namespace Server.Misc +{ + [Flags] + public enum IHSFlags + { + None = 0x00, + OnDamaged = 0x01, + OnDeath = 0x02, + OnMovement = 0x04, + OnSpeech = 0x08, + All = OnDamaged | OnDeath | OnMovement + } // NOTE: To enable monster conversations, add " | OnSpeech" to the "All" line + + public class InhumanSpeech + { + private static InhumanSpeech m_RatmanSpeech; + + public static InhumanSpeech Ratman + { + get + { + if ( m_RatmanSpeech == null ) + { + m_RatmanSpeech = new InhumanSpeech(); + + m_RatmanSpeech.Hue = 149; + m_RatmanSpeech.Sound = 438; + + m_RatmanSpeech.Flags = IHSFlags.All; + + m_RatmanSpeech.Keywords = new string[] + { + "meat", "gold", "kill", "killing", "slay", + "sword", "axe", "spell", "magic", "spells", + "swords", "axes", "mace", "maces", "monster", + "monsters", "food", "run", "escape", "away", + "help", "dead", "die", "dying", "lose", + "losing", "life", "lives", "death", "ghost", + "ghosts", "british", "blackthorn", "guild", + "guilds", "dragon", "dragons", "game", "games", + "ultima", "silly", "stupid", "dumb", "idiot", + "idiots", "cheesy", "cheezy", "crazy", "dork", + "jerk", "fool", "foolish", "ugly", "insult", "scum" + }; + + m_RatmanSpeech.Responses = new string[] + { + "meat", "kill", "pound", "crush", "yum yum", + "crunch", "destroy", "murder", "eat", "munch", + "massacre", "food", "monster", "evil", "run", + "die", "lose", "dumb", "idiot", "fool", "crazy", + "dinner", "lunch", "breakfast", "fight", "battle", + "doomed", "rip apart", "tear apart", "smash", + "edible?", "shred", "disembowel", "ugly", "smelly", + "stupid", "hideous", "smell", "tasty", "invader", + "attack", "raid", "plunder", "pillage", "treasure", + "loser", "lose", "scum" + }; + + m_RatmanSpeech.Syllables = new string[] + { + "skrit", + + "ch", "ch", + "it", "ti", "it", "ti", + + "ak", "ek", "ik", "ok", "uk", "yk", + "ka", "ke", "ki", "ko", "ku", "ky", + "at", "et", "it", "ot", "ut", "yt", + + "cha", "che", "chi", "cho", "chu", "chy", + "ach", "ech", "ich", "och", "uch", "ych", + "att", "ett", "itt", "ott", "utt", "ytt", + "tat", "tet", "tit", "tot", "tut", "tyt", + "tta", "tte", "tti", "tto", "ttu", "tty", + "tak", "tek", "tik", "tok", "tuk", "tyk", + "ack", "eck", "ick", "ock", "uck", "yck", + "cka", "cke", "cki", "cko", "cku", "cky", + "rak", "rek", "rik", "rok", "ruk", "ryk", + + "tcha", "tche", "tchi", "tcho", "tchu", "tchy", + "rach", "rech", "rich", "roch", "ruch", "rych", + "rrap", "rrep", "rrip", "rrop", "rrup", "rryp", + "ccka", "ccke", "ccki", "ccko", "ccku", "ccky" + }; + } + + return m_RatmanSpeech; + } + } + + private static InhumanSpeech m_OrcSpeech; + + public static InhumanSpeech Orc + { + get + { + if ( m_OrcSpeech == null ) + { + m_OrcSpeech = new InhumanSpeech(); + + m_OrcSpeech.Hue = 34; + m_OrcSpeech.Sound = 432; + + m_OrcSpeech.Flags = IHSFlags.All; + + m_OrcSpeech.Keywords = new string[] + { + "meat", "gold", "kill", "killing", "slay", + "sword", "axe", "spell", "magic", "spells", + "swords", "axes", "mace", "maces", "monster", + "monsters", "food", "run", "escape", "away", + "help", "dead", "die", "dying", "lose", + "losing", "life", "lives", "death", "ghost", + "ghosts", "british", "blackthorn", "guild", + "guilds", "dragon", "dragons", "game", "games", + "ultima", "silly", "stupid", "dumb", "idiot", + "idiots", "cheesy", "cheezy", "crazy", "dork", + "jerk", "fool", "foolish", "ugly", "insult", "scum" + }; + + m_OrcSpeech.Responses = new string[] + { + "meat", "kill", "pound", "crush", "yum yum", + "crunch", "destroy", "murder", "eat", "munch", + "massacre", "food", "monster", "evil", "run", + "die", "lose", "dumb", "idiot", "fool", "crazy", + "dinner", "lunch", "breakfast", "fight", "battle", + "doomed", "rip apart", "tear apart", "smash", + "edible?", "shred", "disembowel", "ugly", "smelly", + "stupid", "hideous", "smell", "tasty", "invader", + "attack", "raid", "plunder", "pillage", "treasure", + "loser", "lose", "scum" + }; + + m_OrcSpeech.Syllables = new string[] + { + "bu", "du", "fu", "ju", "gu", + "ulg", "gug", "gub", "gur", "oog", + "gub", "log", "ru", "stu", "glu", + "ug", "ud", "og", "log", "ro", "flu", + "bo", "duf", "fun", "nog", "dun", "bog", + "dug", "gh", "ghu", "gho", "nug", "ig", + "igh", "ihg", "luh", "duh", "bug", "dug", + "dru", "urd", "gurt", "grut", "grunt", + "snarf", "urgle", "igg", "glu", "glug", + "foo", "bar", "baz", "ghat", "ab", "ad", + "gugh", "guk", "ag", "alm", "thu", "log", + "bilge", "augh", "gha", "gig", "goth", + "zug", "pig", "auh", "gan", "azh", "bag", + "hig", "oth", "dagh", "gulg", "ugh", "ba", + "bid", "gug", "bug", "rug", "hat", "brui", + "gagh", "buad", "buil", "buim", "bum", + "hug", "hug", "buo", "ma", "buor", "ghed", + "buu", "ca", "guk", "clog", "thurg", "car", + "cro", "thu", "da", "cuk", "gil", "cur", "dak", + "dar", "deak", "der", "dil", "dit", "at", "ag", + "dor", "gar", "dre", "tk", "dri", "gka", "rim", + "eag", "egg", "ha", "rod", "eg", "lat", "eichel", + "ek", "ep", "ka", "it", "ut", "ewk", "ba", "dagh", + "faugh", "foz", "fog", "fid", "fruk", "gag", "fub", + "fud", "fur", "bog", "fup", "hagh", "gaa", "kt", + "rekk", "lub", "lug", "tug", "gna", "urg", "l", + "gno", "gnu", "gol", "gom", "kug", "ukk", "jak", + "jek", "rukk", "jja", "akt", "nuk", "hok", "hrol", + "olm", "natz", "i", "i", "o", "u", "ikk", "ign", + "juk", "kh", "kgh", "ka", "hig", "ke", "ki", "klap", + "klu", "knod", "kod", "knu", "thnu", "krug", "nug", + "nar", "nag", "neg", "neh", "oag", "ob", "ogh", "oh", + "om", "dud", "oo", "pa", "hrak", "qo", "quad", "quil", + "ghig", "rur", "sag", "sah", "sg" + }; + } + + return m_OrcSpeech; + } + } + + private static InhumanSpeech m_LizardmanSpeech; + + public static InhumanSpeech Lizardman + { + get + { + if ( m_LizardmanSpeech == null ) + { + m_LizardmanSpeech = new InhumanSpeech(); + + m_LizardmanSpeech.Hue = 58; + m_LizardmanSpeech.Sound = 418; + + m_LizardmanSpeech.Flags = IHSFlags.All; + + m_LizardmanSpeech.Keywords = new string[] + { + "meat", "gold", "kill", "killing", "slay", + "sword", "axe", "spell", "magic", "spells", + "swords", "axes", "mace", "maces", "monster", + "monsters", "food", "run", "escape", "away", + "help", "dead", "die", "dying", "lose", + "losing", "life", "lives", "death", "ghost", + "ghosts", "british", "blackthorn", "guild", + "guilds", "dragon", "dragons", "game", "games", + "ultima", "silly", "stupid", "dumb", "idiot", + "idiots", "cheesy", "cheezy", "crazy", "dork", + "jerk", "fool", "foolish", "ugly", "insult", "scum" + }; + + m_LizardmanSpeech.Responses = new string[] + { + "meat", "kill", "pound", "crush", "yum yum", + "crunch", "destroy", "murder", "eat", "munch", + "massacre", "food", "monster", "evil", "run", + "die", "lose", "dumb", "idiot", "fool", "crazy", + "dinner", "lunch", "breakfast", "fight", "battle", + "doomed", "rip apart", "tear apart", "smash", + "edible?", "shred", "disembowel", "ugly", "smelly", + "stupid", "hideous", "smell", "tasty", "invader", + "attack", "raid", "plunder", "pillage", "treasure", + "loser", "lose", "scum" + }; + + m_LizardmanSpeech.Syllables = new string[] + { + "ss", "sth", "iss", "is", "ith", "kth", + "sith", "this", "its", "sit", "tis", "tsi", + "ssi", "sil", "lis", "sis", "lil", "thil", + "lith", "sthi", "lish", "shi", "shash", "sal", + "miss", "ra", "tha", "thes", "ses", "sas", "las", + "les", "sath", "sia", "ais", "isa", "asi", "asth", + "stha", "sthi", "isth", "asa", "ath", "tha", "als", + "sla", "thth", "ci", "ce", "cy", "yss", "ys", "yth", + "syth", "thys", "yts", "syt", "tys", "tsy", "ssy", + "syl", "lys", "sys", "lyl", "thyl", "lyth", "sthy", + "lysh", "shy", "myss", "ysa", "sthy", "ysth" + }; + } + + return m_LizardmanSpeech; + } + } + + private static InhumanSpeech m_WispSpeech; + + public static InhumanSpeech Wisp + { + get + { + if ( m_WispSpeech == null ) + { + m_WispSpeech = new InhumanSpeech(); + + m_WispSpeech.Hue = 89; + m_WispSpeech.Sound = 466; + + m_WispSpeech.Flags = IHSFlags.OnMovement; + + m_WispSpeech.Syllables = new string[] + { + "b", "c", "d", "f", "g", "h", "i", + "j", "k", "l", "m", "n", "p", "r", + "s", "t", "v", "w", "x", "z", "c", + "c", "x", "x", "x", "x", "x", "y", + "y", "y", "y", "t", "t", "k", "k", + "l", "l", "m", "m", "m", "m", "z" + }; + } + + return m_WispSpeech; + } + } + + private string[] m_Syllables; + private string[] m_Keywords; + private string[] m_Responses; + + private Dictionary m_KeywordHash; + + private int m_Hue; + private int m_Sound; + + private IHSFlags m_Flags; + + public string[] Syllables + { + get{ return m_Syllables; } + set{ m_Syllables = value; } + } + + public string[] Keywords + { + get{ return m_Keywords; } + set + { + m_Keywords = value; + m_KeywordHash = new Dictionary( m_Keywords.Length, StringComparer.OrdinalIgnoreCase ); + for ( int i = 0; i < m_Keywords.Length; ++i ) + m_KeywordHash[m_Keywords[i]] = m_Keywords[i]; + } + } + + public string[] Responses + { + get{ return m_Responses; } + set{ m_Responses = value; } + } + + public int Hue + { + get{ return m_Hue; } + set{ m_Hue = value; } + } + + public int Sound + { + get{ return m_Sound; } + set{ m_Sound = value; } + } + + public IHSFlags Flags + { + get{ return m_Flags; } + set{ m_Flags = value; } + } + + public string GetRandomSyllable() + { + return m_Syllables[Utility.Random( m_Syllables.Length )]; + } + + public string ConstructWord( int syllableCount ) + { + string[] syllables = new string[syllableCount]; + + for ( int i = 0; i < syllableCount; ++i ) + syllables[i] = GetRandomSyllable(); + + return String.Concat( syllables ); + } + + public string ConstructSentance( int wordCount ) + { + StringBuilder sentance = new StringBuilder(); + + bool needUpperCase = true; + + for ( int i = 0; i < wordCount; ++i ) + { + if ( i > 0 ) // not first word ) + { + int random = Utility.RandomMinMax( 1, 15 ); + + if ( random < 11 ) + { + sentance.Append( ' ' ); + } + else + { + needUpperCase = true; + + if ( random > 13 ) + sentance.Append( "! " ); + else + sentance.Append( ". " ); + } + } + + int syllableCount; + + if ( 30 > Utility.Random( 100 ) ) + syllableCount = Utility.Random( 1, 5 ); + else + syllableCount = Utility.Random( 1, 3 ); + + string word = ConstructWord( syllableCount ); + + sentance.Append( word ); + + if ( needUpperCase ) + sentance.Replace( word[0], Char.ToUpper( word[0] ), sentance.Length - word.Length, 1 ); + + needUpperCase = false; + } + + if ( Utility.RandomMinMax( 1, 5 ) == 1 ) + sentance.Append( '!' ); + else + sentance.Append( '.' ); + + return sentance.ToString(); + } + + public void SayRandomTranslate( Mobile mob, params string[] sentancesInEnglish ) + { + SaySentance( mob, Utility.RandomMinMax( 2, 3 ) ); + mob.Say( sentancesInEnglish[Utility.Random( sentancesInEnglish.Length )] ); + } + + private string GetRandomResponseWord( List keywordsFound ) + { + int random = Utility.Random( keywordsFound.Count + m_Responses.Length ); + + if ( random < keywordsFound.Count ) + return keywordsFound[random]; + + return m_Responses[random - keywordsFound.Count]; + } + + public bool OnSpeech( Mobile mob, Mobile speaker, string text ) + { + if ( (m_Flags & IHSFlags.OnSpeech) == 0 || m_Keywords == null || m_Responses == null || m_KeywordHash == null ) + return false; // not enabled + + if ( !speaker.Alive ) + return false; + + if ( !speaker.InRange( mob, 3 ) ) + return false; + + if ( (speaker.Direction & Direction.Mask) != speaker.GetDirectionTo( mob ) ) + return false; + + if ( (mob.Direction & Direction.Mask) != mob.GetDirectionTo( speaker ) ) + return false; + + string[] split = text.Split( ' ' ); + List keywordsFound = new List(); + + for ( int i = 0; i < split.Length; ++i ) + { + string keyword; + m_KeywordHash.TryGetValue( split[i], out keyword ); + + if ( keyword != null ) + keywordsFound.Add( keyword ); + } + + if ( keywordsFound.Count > 0 ) + { + string responseWord; + + if ( Utility.RandomBool() ) + responseWord = GetRandomResponseWord( keywordsFound ); + else + responseWord = keywordsFound[Utility.Random( keywordsFound.Count )]; + + string secondResponseWord = GetRandomResponseWord( keywordsFound ); + + StringBuilder response = new StringBuilder(); + + switch ( Utility.Random( 6 ) ) + { + default: + case 0: + { + response.Append( "Me " ).Append( responseWord ).Append( '?' ); + break; + } + case 1: + { + response.Append( responseWord ).Append( " thee!" ); + response.Replace( responseWord[0], Char.ToUpper( responseWord[0] ), 0, 1 ); + break; + } + case 2: + { + response.Append( responseWord ).Append( '?' ); + response.Replace( responseWord[0], Char.ToUpper( responseWord[0] ), 0, 1 ); + break; + } + case 3: + { + response.Append( responseWord ).Append( "! " ).Append( secondResponseWord ).Append( '.' ); + response.Replace( responseWord[0], Char.ToUpper( responseWord[0] ), 0, 1 ); + response.Replace( secondResponseWord[0], Char.ToUpper( secondResponseWord[0] ), responseWord.Length + 2, 1 ); + break; + } + case 4: + { + response.Append( responseWord ).Append( '.' ); + response.Replace( responseWord[0], Char.ToUpper( responseWord[0] ), 0, 1 ); + break; + } + case 5: + { + response.Append( responseWord ).Append( "? " ).Append( secondResponseWord ).Append( '.' ); + response.Replace( responseWord[0], Char.ToUpper( responseWord[0] ), 0, 1 ); + response.Replace( secondResponseWord[0], Char.ToUpper( secondResponseWord[0] ), responseWord.Length + 2, 1 ); + break; + } + } + + int maxWords = (split.Length / 2) + 1; + + if ( maxWords < 2 ) + maxWords = 2; + else if ( maxWords > 6 ) + maxWords = 6; + + SaySentance( mob, Utility.RandomMinMax( 2, maxWords ) ); + mob.Say( response.ToString() ); + + return true; + } + + return false; + } + + public void OnDeath( Mobile mob ) + { + if ( (m_Flags & IHSFlags.OnDeath) == 0 ) + return; // not enabled + + if ( 90 > Utility.Random( 100 ) ) + return; // 90% chance to do nothing; 10% chance to talk + + SayRandomTranslate( mob, + "Revenge!", + "NOOooo!", + "I... I...", + "Me no die!", + "Me die!", + "Must... not die...", + "Oooh, me hurt...", + "Me dying?" ); + } + + public void OnMovement( Mobile mob, Mobile mover, Point3D oldLocation ) + { + if ( (m_Flags & IHSFlags.OnMovement) == 0 ) + return; // not enabled + + if ( !mover.Player || (mover.Hidden && mover.AccessLevel > AccessLevel.Player) ) + return; + + if ( !mob.InRange( mover, 5 ) || mob.InRange( oldLocation, 5 ) ) + return; // only talk when they enter 5 tile range + + if ( 90 > Utility.Random( 100 ) ) + return; // 90% chance to do nothing; 10% chance to talk + + SaySentance( mob, 6 ); + } + + public void OnDamage( Mobile mob, int amount ) + { + if ( (m_Flags & IHSFlags.OnDamaged) == 0 ) + return; // not enabled + + if ( 90 > Utility.Random( 100 ) ) + return; // 90% chance to do nothing; 10% chance to talk + + if ( amount < 5 ) + { + SayRandomTranslate( mob, + "Ouch!", + "Me not hurt bad!", + "Thou fight bad.", + "Thy blows soft!", + "You bad with weapon!" ); + } + else + { + SayRandomTranslate( mob, + "Ouch! Me hurt!", + "No, kill me not!", + "Me hurt!", + "Away with thee!", + "Oof! That hurt!", + "Aaah! That hurt...", + "Good blow!" ); + } + } + + public void OnConstruct( Mobile mob ) + { + mob.SpeechHue = m_Hue; + } + + public void SaySentance( Mobile mob, int wordCount ) + { + mob.Say( ConstructSentance( wordCount ) ); + mob.PlaySound( m_Sound ); + } + + public InhumanSpeech() + { + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Keywords.cs b/Scripts/Misc/Keywords.cs new file mode 100644 index 0000000..90704c0 --- /dev/null +++ b/Scripts/Misc/Keywords.cs @@ -0,0 +1,44 @@ +using System; +using Server; +using Server.Items; +using Server.Guilds; +using Server.Mobiles; +using Server.Gumps; + +namespace Server.Misc +{ + public class Keywords + { + public static void Initialize() + { + // Register our speech handler + EventSink.Speech += new SpeechEventHandler( EventSink_Speech ); + } + + public static void EventSink_Speech( SpeechEventArgs args ) + { + Mobile from = args.Mobile; + int[] keywords = args.Keywords; + + for ( int i = 0; i < keywords.Length; ++i ) + { + switch ( keywords[i] ) + { + case 0x002A: // *i resign from my guild* + { + if ( from.Guild != null ) + ((Guild)from.Guild).RemoveMember( from ); + + break; + } + case 0x0032: // *i must consider my sins* + { + from.SendMessage( "Long Term Murders : {0}", from.Kills ); + + break; + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/LanguageStatistics.cs b/Scripts/Misc/LanguageStatistics.cs new file mode 100644 index 0000000..5d9055f --- /dev/null +++ b/Scripts/Misc/LanguageStatistics.cs @@ -0,0 +1,375 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using Server; +using Server.Accounting; +using Server.Commands; +using Server.Mobiles; + +namespace Server.Misc +{ + /** + * This file requires to be saved in a Unicode + * compatible format. + * + * Warning: if you change String.Format methods, + * please note that the following character + * is suggested before any left-to-right text + * in order to prevent undesired formatting + * resulting from mixing LR and RL text: ‎ + * + * Use this one if you need to force RL: †+ * + * If you do not see the above chars, please + * enable showing of unicode control chars + **/ + + public class LanguageStatistics + { + struct InternationalCode + { + string m_Code; + string m_Language; + string m_Country; + string m_Language_LocalName; + string m_Country_LocalName; + bool m_HasLocalInfo; + + public string Code{ get{ return m_Code; } } + public string Language{ get{ return m_Language; } } + public string Country{ get{ return m_Country; } } + public string Language_LocalName{ get{ return m_Language_LocalName; } } + public string Country_LocalName{ get{ return m_Country_LocalName; } } + + public InternationalCode( string code, string language, string country ) : this( code, language, country, null, null ) + { + m_HasLocalInfo = false; + } + + public InternationalCode( string code, string language, string country, string language_localname, string country_localname ) + { + m_Code = code; + m_Language = language; + m_Country = country; + m_Language_LocalName = language_localname; + m_Country_LocalName = country_localname; + m_HasLocalInfo = true; + } + + public string GetName() + { + string s; + + if ( m_HasLocalInfo ) + { + s = String.Format( "{0}‎ - {1}", DefaultLocalNames ? m_Language_LocalName : m_Language, DefaultLocalNames ? m_Country_LocalName : m_Country ); + + if ( ShowAlternatives ) + s += String.Format( "‎ ã€{0}‎ - {1}‎】", DefaultLocalNames ? m_Language : m_Language_LocalName, DefaultLocalNames ? m_Country : m_Country_LocalName ); + } + else + { + s = String.Format( "{0}‎ - {1}", m_Language, m_Country ); + } + + return s; + } + } + + private static InternationalCode[] InternationalCodes = + { + new InternationalCode( "ARA", "Arabic", "Saudi Arabia", "العربية", "السعودية" ), + new InternationalCode( "ARI", "Arabic", "Iraq", "العربية", "العراق" ), + new InternationalCode( "ARE", "Arabic", "Egypt", "العربية", "مصر" ), + new InternationalCode( "ARL", "Arabic", "Libya", "العربية", "ليبيا" ), + new InternationalCode( "ARG", "Arabic", "Algeria", "العربية", "الجزائر" ), + new InternationalCode( "ARM", "Arabic", "Morocco", "العربية", "المغرب" ), + new InternationalCode( "ART", "Arabic", "Tunisia", "العربية", "تونس" ), + new InternationalCode( "ARO", "Arabic", "Oman", "العربية", "عمان" ), + new InternationalCode( "ARY", "Arabic", "Yemen", "العربية", "اليمن" ), + new InternationalCode( "ARS", "Arabic", "Syria", "العربية", "سورية" ), + new InternationalCode( "ARJ", "Arabic", "Jordan", "العربية", "الأردن" ), + new InternationalCode( "ARB", "Arabic", "Lebanon", "العربية", "لبنان" ), + new InternationalCode( "ARK", "Arabic", "Kuwait", "العربية", "الكويت" ), + new InternationalCode( "ARU", "Arabic", "U.A.E.", "العربية", "الامارات" ), + new InternationalCode( "ARH", "Arabic", "Bahrain", "العربية", "البحرين" ), + new InternationalCode( "ARQ", "Arabic", "Qatar", "العربية", "قطر" ), + new InternationalCode( "BGR", "Bulgarian", "Bulgaria", "БългарÑки", "БългариÑ" ), + new InternationalCode( "CAT", "Catalan", "Spain", "Català", "Espanya" ), + new InternationalCode( "CHT", "Chinese", "Taiwan", "å°èªž", "臺ç£" ), + new InternationalCode( "CHS", "Chinese", "PRC", "中文", "中国" ), + new InternationalCode( "ZHH", "Chinese", "Hong Kong", "中文", "香港" ), + new InternationalCode( "ZHI", "Chinese", "Singapore", "中文", "新加å¡" ), + new InternationalCode( "ZHM", "Chinese", "Macau", "中文", "澳門" ), + new InternationalCode( "CSY", "Czech", "Czech Republic", "ÄŒeÅ¡tina", "ÄŒeská republika" ), + new InternationalCode( "DAN", "Danish", "Denmark", "Dansk", "Danmark" ), + new InternationalCode( "DEU", "German", "Germany", "Deutsch", "Deutschland" ), + new InternationalCode( "DES", "German", "Switzerland", "Deutsch", "der Schweiz" ), + new InternationalCode( "DEA", "German", "Austria", "Deutsch", "Österreich" ), + new InternationalCode( "DEL", "German", "Luxembourg", "Deutsch", "Luxembourg" ), + new InternationalCode( "DEC", "German", "Liechtenstein", "Deutsch", "Liechtenstein" ), + new InternationalCode( "ELL", "Greek", "Greece", "Ελληνικά", "Ελλάδα" ), + new InternationalCode( "ENU", "English", "United States" ), + new InternationalCode( "ENG", "English", "United Kingdom" ), + new InternationalCode( "ENA", "English", "Australia" ), + new InternationalCode( "ENC", "English", "Canada" ), + new InternationalCode( "ENZ", "English", "New Zealand" ), + new InternationalCode( "ENI", "English", "Ireland" ), + new InternationalCode( "ENS", "English", "South Africa" ), + new InternationalCode( "ENJ", "English", "Jamaica" ), + new InternationalCode( "ENB", "English", "Caribbean" ), + new InternationalCode( "ENL", "English", "Belize" ), + new InternationalCode( "ENT", "English", "Trinidad" ), + new InternationalCode( "ENW", "English", "Zimbabwe" ), + new InternationalCode( "ENP", "English", "Philippines" ), + new InternationalCode( "ESP", "Spanish", "Spain (Traditional Sort)", "Español", "España (tipo tradicional)" ), + new InternationalCode( "ESM", "Spanish", "Mexico", "Español", "México" ), + new InternationalCode( "ESN", "Spanish", "Spain (International Sort)", "Español", "España (tipo internacional)" ), + new InternationalCode( "ESG", "Spanish", "Guatemala", "Español", "Guatemala" ), + new InternationalCode( "ESC", "Spanish", "Costa Rica", "Español", "Costa Rica" ), + new InternationalCode( "ESA", "Spanish", "Panama", "Español", "Panama" ), + new InternationalCode( "ESD", "Spanish", "Dominican Republic", "Español", "Republica Dominicana" ), + new InternationalCode( "ESV", "Spanish", "Venezuela", "Español", "Venezuela" ), + new InternationalCode( "ESO", "Spanish", "Colombia", "Español", "Colombia" ), + new InternationalCode( "ESR", "Spanish", "Peru", "Español", "Peru" ), + new InternationalCode( "ESS", "Spanish", "Argentina", "Español", "Argentina" ), + new InternationalCode( "ESF", "Spanish", "Ecuador", "Español", "Ecuador" ), + new InternationalCode( "ESL", "Spanish", "Chile", "Español", "Chile" ), + new InternationalCode( "ESY", "Spanish", "Uruguay", "Español", "Uruguay" ), + new InternationalCode( "ESZ", "Spanish", "Paraguay", "Español", "Paraguay" ), + new InternationalCode( "ESB", "Spanish", "Bolivia", "Español", "Bolivia" ), + new InternationalCode( "ESE", "Spanish", "El Salvador", "Español", "El Salvador" ), + new InternationalCode( "ESH", "Spanish", "Honduras", "Español", "Honduras" ), + new InternationalCode( "ESI", "Spanish", "Nicaragua", "Español", "Nicaragua" ), + new InternationalCode( "ESU", "Spanish", "Puerto Rico", "Español", "Puerto Rico" ), + new InternationalCode( "FIN", "Finnish", "Finland", "Suomi", "Suomi" ), + new InternationalCode( "FRA", "French", "France", "Français", "France" ), + new InternationalCode( "FRB", "French", "Belgium", "Français", "Belgique" ), + new InternationalCode( "FRC", "French", "Canada", "Français", "Canada" ), + new InternationalCode( "FRS", "French", "Switzerland", "Français", "Suisse" ), + new InternationalCode( "FRL", "French", "Luxembourg", "Français", "Luxembourg" ), + new InternationalCode( "FRM", "French", "Monaco", "Français", "Monaco" ), + new InternationalCode( "HEB", "Hebrew", "Israel", "עִבְרִית", "ישׂר×ל" ), + new InternationalCode( "HUN", "Hungarian", "Hungary", "Magyar", "Magyarország" ), + new InternationalCode( "ISL", "Icelandic", "Iceland", "Ãslenska", "Ãsland" ), + new InternationalCode( "ITA", "Italian", "Italy", "Italiano", "Italia" ), + new InternationalCode( "ITS", "Italian", "Switzerland", "Italiano", "Svizzera" ), + new InternationalCode( "JPN", "Japanese", "Japan", "日本語", "日本" ), + new InternationalCode( "KOR", "Korean (Extended Wansung)", "Korea", "한국어", "한국" ), + new InternationalCode( "NLD", "Dutch", "Netherlands", "Nederlands", "Nederland" ), + new InternationalCode( "NLB", "Dutch", "Belgium", "Nederlands", "België" ), + new InternationalCode( "NOR", "Norwegian", "Norway (BokmÃ¥l)", "Norsk", "Norge (BokmÃ¥l)" ), + new InternationalCode( "NON", "Norwegian", "Norway (Nynorsk)", "Norsk", "Norge (Nynorsk)" ), + new InternationalCode( "PLK", "Polish", "Poland", "Polski", "Polska" ), + new InternationalCode( "PTB", "Portuguese", "Brazil", "Português", "Brasil" ), + new InternationalCode( "PTG", "Portuguese", "Portugal", "Português", "Brasil" ), + new InternationalCode( "ROM", "Romanian", "Romania", "Limba Română", "România" ), + new InternationalCode( "RUS", "Russian", "Russia", "РуÑÑкий", "РоÑÑиÑ" ), + new InternationalCode( "HRV", "Croatian", "Croatia", "Hrvatski", "Hrvatska" ), + new InternationalCode( "SRL", "Serbian", "Serbia (Latin)", "Srpski", "Srbija i Crna Gora" ), + new InternationalCode( "SRB", "Serbian", "Serbia (Cyrillic)", "СрпÑки", "Србија и Црна Гора" ), + new InternationalCode( "SKY", "Slovak", "Slovakia", "SlovenÄina", "Slovensko" ), + new InternationalCode( "SQI", "Albanian", "Albania", "Shqip", "Shqipëria" ), + new InternationalCode( "SVE", "Swedish", "Sweden", "Svenska", "Sverige" ), + new InternationalCode( "SVF", "Swedish", "Finland", "Svenska", "Finland" ), + new InternationalCode( "THA", "Thai", "Thailand", "ภาษาไทย", "ประเทศไทย" ), + new InternationalCode( "TRK", "Turkish", "Turkey", "Türkçe", "Türkiye" ), + new InternationalCode( "URP", "Urdu", "Pakistan", "اردو", "پاکستان" ), + new InternationalCode( "IND", "Indonesian", "Indonesia", "Bahasa Indonesia", "Indonesia" ), + new InternationalCode( "UKR", "Ukrainian", "Ukraine", "УкраїнÑька", "Украина" ), + new InternationalCode( "BEL", "Belarusian", "Belarus", "БеларуÑкі", "БеларуÑÑŒ" ), + new InternationalCode( "SLV", "Slovene", "Slovenia", "SlovenÅ¡Äina", "Slovenija" ), + new InternationalCode( "ETI", "Estonian", "Estonia", "Eesti", "Eesti" ), + new InternationalCode( "LVI", "Latvian", "Latvia", "LatvieÅ¡u", "Latvija" ), + new InternationalCode( "LTH", "Lithuanian", "Lithuania", "Lietuvių", "Lietuva" ), + new InternationalCode( "LTC", "Classic Lithuanian", "Lithuania", "LietuviÅ¡kai", "Lietuva" ), + new InternationalCode( "FAR", "Farsi", "Iran", "ÙØ§Ø±Ø³Ù‰", "ايران" ), + new InternationalCode( "VIT", "Vietnamese", "Viet Nam", "tiêÌng Việt", "Việt Nam" ), + new InternationalCode( "HYE", "Armenian", "Armenia", "Õ€Õ¡ÕµÕ¥Ö€Õ§Õ¶", "Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶" ), + new InternationalCode( "AZE", "Azeri", "Azerbaijan (Latin)", "AzÉ™rbaycanca", "AzÉ™rbaycan" ), + new InternationalCode( "AZE", "Azeri", "Azerbaijan (Cyrillic)", "Ðзәрбајҹанҹа", "Ðзәрбајҹан" ), + new InternationalCode( "EUQ", "Basque", "Spain", "Euskera", "Espainia" ), + new InternationalCode( "MKI", "Macedonian", "Macedonia", "МакедонÑки", "Македонија" ), + new InternationalCode( "AFK", "Afrikaans", "South Africa", "Afrikaans", "Republiek van Suid-Afrika" ), + new InternationalCode( "KAT", "Georgian", "Georgia", "ქáƒáƒ áƒ—ული", "სáƒáƒ™áƒáƒ áƒ¢áƒ•ელáƒ" ), + new InternationalCode( "FOS", "Faeroese", "Faeroe Islands", "Føroyska", "Føroya" ), + new InternationalCode( "HIN", "Hindi", "India", "हिनà¥à¤¦à¥€", "भारत" ), + new InternationalCode( "MSL", "Malay", "Malaysia", "Bahasa melayu", "Malaysia" ), + new InternationalCode( "MSB", "Malay", "Brunei Darussalam", "Bahasa melayu", "Negara Brunei Darussalam" ), + new InternationalCode( "KAZ", "Kazak", "Kazakstan", "Қазақ", "ҚазақÑтан" ), + new InternationalCode( "SWK", "Swahili", "Kenya", "Kiswahili", "Kenya" ), + new InternationalCode( "UZB", "Uzbek", "Uzbekistan (Latin)", "O'zbek", "O'zbekiston" ), + new InternationalCode( "UZB", "Uzbek", "Uzbekistan (Cyrillic)", "Ўзбек", "ЎзбекиÑтон" ), + new InternationalCode( "TAT", "Tatar", "Tatarstan", "Татарча", "ТатарÑтан" ), + new InternationalCode( "BEN", "Bengali", "India", "বাংলা", "ভারত" ), + new InternationalCode( "PAN", "Punjabi", "India", "ਪੰਜਾਬੀ", "ਭਾਰਤ" ), + new InternationalCode( "GUJ", "Gujarati", "India", "ગà«àªœàª°àª¾àª¤à«€", "ભારત" ), + new InternationalCode( "ORI", "Oriya", "India", "ଓଡ଼ିଆ", "ଭାରତ" ), + new InternationalCode( "TAM", "Tamil", "India", "தமிழà¯", "இநà¯à®¤à®¿à®¯à®¾" ), + new InternationalCode( "TEL", "Telugu", "India", "తెలà±à°—à±", "భారత" ), + new InternationalCode( "KAN", "Kannada", "India", "ಕನà³à²¨à²¡", "ಭಾರತ" ), + new InternationalCode( "MAL", "Malayalam", "India", "മലയാളം", "ഭാരത" ), + new InternationalCode( "ASM", "Assamese", "India", "অসমিয়া", "BhÄrat" ), // missing correct country name + new InternationalCode( "MAR", "Marathi", "India", "मराठी", "भारत" ), + new InternationalCode( "SAN", "Sanskrit", "India", "संसà¥à¤•ृत", "भारतमà¥" ), + new InternationalCode( "KOK", "Konkani", "India", "कोंकणी", "भारत" ) + }; + + private static string GetFormattedInfo( string code ) + { + if ( code == null || code.Length != 3 ) + return String.Format( "Unknown code {0}", code ); + + for ( int i = 0; i < InternationalCodes.Length; i++ ) + { + if ( code == InternationalCodes[i].Code ) + { + return String.Format( "{0}", InternationalCodes[i].GetName() ); + } + } + + return String.Format( "Unknown code {0}", code ); + } + + private static bool DefaultLocalNames = false; + private static bool ShowAlternatives = true; + private static bool CountAccounts = true; // will consider only first character's valid language + + public static void Initialize() + { + CommandSystem.Register( "LanguageStatistics", AccessLevel.Administrator, new CommandEventHandler( LanguageStatistics_OnCommand ) ); + } + + [Usage( "LanguageStatistics" )] + [Description( "Generate a file containing the list of languages for each PlayerMobile." )] + public static void LanguageStatistics_OnCommand( CommandEventArgs e ) + { + Dictionary ht = new Dictionary(); + + using ( StreamWriter writer = new StreamWriter( "languages.txt" ) ) + { + if ( CountAccounts ) + { + // count accounts + foreach ( Account acc in Accounts.GetAccounts() ) + { + for ( int i = 0; i < acc.Length; i++ ) + { + Mobile mob = acc[i]; + + if ( mob == null ) + continue; + + string lang = mob.Language; + + if ( lang != null ) + { + lang = lang.ToUpper(); + + if ( !ht.ContainsKey( lang ) ) + ht[lang] = new InternationalCodeCounter( lang ); + else + ht[lang].Increase(); + + break; + } + } + } + } + else + { + // count playermobiles + foreach( Mobile mob in World.Mobiles.Values ) + { + if ( mob.Player ) + { + string lang = mob.Language; + + if ( lang != null ) + { + lang = lang.ToUpper(); + + if ( !ht.ContainsKey( lang ) ) + ht[lang] = new InternationalCodeCounter( lang ); + else + ht[lang].Increase(); + } + } + } + } + + writer.WriteLine( String.Format( "Language statistics. Numbers show how many {0} use the specified language.", CountAccounts ? "accounts" : "playermobile" ) ); + writer.WriteLine( "====================================================================================================" ); + writer.WriteLine(); + + // sort the list + List list = new List( ht.Values ); + list.Sort( InternationalCodeComparer.Instance ); + + foreach ( InternationalCodeCounter c in list ) + writer.WriteLine( String.Format( "{0}‎ : {1}", GetFormattedInfo( c.Code ), c.Count ) ); + + e.Mobile.SendMessage( "Languages list generated." ); + } + } + + private class InternationalCodeCounter + { + private string m_Code; + private int m_Count; + + public string Code{ get{ return m_Code; } } + public int Count{ get{ return m_Count; } } + + public InternationalCodeCounter( string code ) + { + m_Code = code; + m_Count = 1; + } + + public void Increase() + { + m_Count++; + } + } + + private class InternationalCodeComparer : IComparer + { + public static readonly InternationalCodeComparer Instance = new InternationalCodeComparer(); + + public InternationalCodeComparer() + { + } + + public int Compare( InternationalCodeCounter x, InternationalCodeCounter y ) + { + string a = null, b = null; + int ca = 0, cb = 0; + + a = x.Code; + ca = x.Count; + b = y.Code; + cb = y.Count; + + + if ( ca > cb ) + return -1; + + if ( ca < cb ) + return 1; + + if ( a == null && b == null ) + return 0; + + if ( a == null ) + return 1; + + if ( b == null ) + return -1; + + return a.CompareTo( b ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/LightCycle.cs b/Scripts/Misc/LightCycle.cs new file mode 100644 index 0000000..e74ca06 --- /dev/null +++ b/Scripts/Misc/LightCycle.cs @@ -0,0 +1,140 @@ +using System; +using Server; +using Server.Network; +using Server.Commands; + +namespace Server +{ + public class LightCycle + { + public const int DayLevel = 0; + public const int NightLevel = 12; + public const int DungeonLevel = 26; + public const int CaveLevel = 20; + + private static int m_LevelOverride = int.MinValue; + + public static int LevelOverride + { + get{ return m_LevelOverride; } + set + { + m_LevelOverride = value; + + for ( int i = 0; i < NetState.Instances.Count; ++i ) + { + NetState ns = NetState.Instances[i]; + Mobile m = ns.Mobile; + + if ( m != null ) + m.CheckLightLevels( false ); + } + } + } + + public static void Initialize() + { + new LightCycleTimer().Start(); + EventSink.Login += new LoginEventHandler( OnLogin ); + + CommandSystem.Register( "GlobalLight", AccessLevel.GameMaster, new CommandEventHandler( Light_OnCommand ) ); + } + + [Usage( "GlobalLight " )] + [Description( "Sets the current global light level." )] + private static void Light_OnCommand( CommandEventArgs e ) + { + if ( e.Length >= 1 ) + { + LevelOverride = e.GetInt32( 0 ); + e.Mobile.SendMessage( "Global light level override has been changed to {0}.", m_LevelOverride ); + } + else + { + LevelOverride = int.MinValue; + e.Mobile.SendMessage( "Global light level override has been cleared." ); + } + } + + public static void OnLogin( LoginEventArgs args ) + { + Mobile m = args.Mobile; + + m.CheckLightLevels( true ); + } + + public static int ComputeLevelFor( Mobile from ) + { + if ( m_LevelOverride > int.MinValue ) + return m_LevelOverride; + + int hours, minutes; + + Server.Items.Clock.GetTime( from.Map, 3584, 2048, out hours, out minutes ); + + /* OSI times: + * + * Midnight -> 3:59 AM : Night + * 4:00 AM -> 11:59 PM : Day + * + * RunUO times: + * + * 10:00 PM -> 11:59 PM : Scale to night + * Midnight -> 3:59 AM : Night + * 4:00 AM -> 5:59 AM : Scale to day + * 6:00 AM -> 9:59 PM : Day + */ + + if ( hours < 4 ) + return NightLevel; + + if ( hours < 6 ) + return NightLevel + (((((hours - 4) * 60) + minutes) * (DayLevel - NightLevel)) / 120); + + if ( hours < 22 ) + return DayLevel; + + if ( hours < 24 ) + return DayLevel + (((((hours - 22) * 60) + minutes) * (NightLevel - DayLevel)) / 120); + + return NightLevel; // should never be + } + + private class LightCycleTimer : Timer + { + public LightCycleTimer() : base( TimeSpan.FromSeconds( 0 ), TimeSpan.FromSeconds( 5.0 ) ) + { + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + for ( int i = 0; i < NetState.Instances.Count; ++i ) + { + NetState ns = NetState.Instances[i]; + Mobile m = ns.Mobile; + + if ( m != null ) + m.CheckLightLevels( false ); + } + } + } + + public class NightSightTimer : Timer + { + private Mobile m_Owner; + + public NightSightTimer( Mobile owner ) : base( TimeSpan.FromMinutes( Utility.Random( 15, 25 ) ) ) + { + m_Owner = owner; + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + m_Owner.EndAction( typeof( LightCycle ) ); + m_Owner.LightLevel = 0; + } + } + } +} diff --git a/Scripts/Misc/LoginStats.cs b/Scripts/Misc/LoginStats.cs new file mode 100644 index 0000000..e687d35 --- /dev/null +++ b/Scripts/Misc/LoginStats.cs @@ -0,0 +1,32 @@ +using System; +using Server.Network; + +namespace Server.Misc +{ + public class LoginStats + { + public static void Initialize() + { + // Register our event handler + EventSink.Login += new LoginEventHandler( EventSink_Login ); + } + + private static void EventSink_Login( LoginEventArgs args ) + { + int userCount = NetState.Instances.Count; + int itemCount = World.Items.Count; + int mobileCount = World.Mobiles.Count; + + Mobile m = args.Mobile; + + /* + m.SendMessage( "Welcome, {0}! There {1} currently {2} user{3} online, with {4} item{5} and {6} mobile{7} in the world.", + args.Mobile.Name, + userCount == 1 ? "is" : "are", + userCount, userCount == 1 ? "" : "s", + itemCount, itemCount == 1 ? "" : "s", + mobileCount, mobileCount == 1 ? "" : "s" ); + */ + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/MapDefinitions.cs b/Scripts/Misc/MapDefinitions.cs new file mode 100644 index 0000000..ce04ad2 --- /dev/null +++ b/Scripts/Misc/MapDefinitions.cs @@ -0,0 +1,52 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class MapDefinitions + { + public static void Configure() + { + /* Here we configure all maps. Some notes: + * + * 1) The first 32 maps are reserved for core use. + * 2) Map 0x7F is reserved for core use. + * 3) Map 0xFF is reserved for core use. + * 4) Changing or removing any predefined maps may cause server instability. + */ + + RegisterMap( 0, 0, 0, 7168, 4096, 1, "Britannia", MapRules.DangerRules ); + RegisterMap( 1, 1, 1, 7168, 4096, 1, "Underworld", MapRules.DangerRules ); + RegisterMap( 2, 2, 2, 2304, 1600, 1, "Darkness", MapRules.DangerRules ); + RegisterMap( 3, 3, 3, 2560, 2048, 1, "Ocean", MapRules.DangerRules ); + RegisterMap( 4, 4, 4, 1448, 1448, 1, "Grassland", MapRules.DangerRules ); + + RegisterMap( 0x7F, 0x7F, 0x7F, Map.SectorSize, Map.SectorSize, 1, "Internal", MapRules.Internal ); + + /* Example of registering a custom map: + * RegisterMap( 32, 0, 0, 6144, 4096, 3, "Iceland", MapRules.DangerRules ); + * + * Defined: + * RegisterMap( , , , , , , , ); + * - : An unreserved unique index for this map + * - : An identification number used in client communications. For any visible maps, this value must be from 0-3 + * - : A file identification number. For any visible maps, this value must be 0, 2, 3, or 4 + * - , : Size of the map (in tiles) + * - : Reference name for the map, used in props gump, get/set commands, region loading, etc + * - : Rules and restrictions associated with the map. See documentation for details + */ + + TileMatrixPatch.Enabled = true; // OSI Client Patch 6.0.0.0 + + MultiComponentList.PostHSFormat = false; // OSI Client Patch 7.0.9.0 + } + + public static void RegisterMap( int mapIndex, int mapID, int fileIndex, int width, int height, int season, string name, MapRules rules ) + { + Map newMap = new Map( mapID, mapIndex, fileIndex, width, height, season, name, rules ); + + Map.Maps[mapIndex] = newMap; + Map.AllMaps.Add( newMap ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/NameList.cs b/Scripts/Misc/NameList.cs new file mode 100644 index 0000000..910d6df --- /dev/null +++ b/Scripts/Misc/NameList.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using Server; + +namespace Server +{ + public class NameList + { + private string m_Type; + private string[] m_List; + + public string Type{ get{ return m_Type; } } + public string[] List{ get{ return m_List; } } + + public bool ContainsName( string name ) + { + for ( int i = 0; i < m_List.Length; i++ ) + if ( name == m_List[i] ) + return true; + + return false; + } + + public NameList( string type, XmlElement xml ) + { + m_Type = type; + m_List = xml.InnerText.Split( ',' ); + + for ( int i = 0; i < m_List.Length; ++i ) + m_List[i] = Utility.Intern( m_List[i].Trim() ); + } + + public string GetRandomName() + { + if ( m_List.Length > 0 ) + return m_List[Utility.Random( m_List.Length )]; + + return ""; + } + + public static NameList GetNameList( string type ) + { + NameList n = null; + m_Table.TryGetValue( type, out n ); + return n; + } + + public static string RandomName( string type ) + { + NameList list = GetNameList( type ); + + if ( list != null ) + return list.GetRandomName(); + + return ""; + } + + private static Dictionary m_Table; + + static NameList() + { + m_Table = new Dictionary( StringComparer.OrdinalIgnoreCase ); + + string filePath = Path.Combine( Core.BaseDirectory, "Data/Config/names.xml" ); + + if ( !File.Exists( filePath ) ) + return; + + try + { + Load( filePath ); + } + catch ( Exception e ) + { + Console.WriteLine( "Warning: Exception caught loading name lists:" ); + Console.WriteLine( e ); + } + } + + private static void Load( string filePath ) + { + XmlDocument doc = new XmlDocument(); + doc.Load( filePath ); + + XmlElement root = doc["names"]; + + foreach ( XmlElement element in root.GetElementsByTagName( "namelist" ) ) + { + string type = element.GetAttribute( "type" ); + + if ( String.IsNullOrEmpty( type ) ) + continue; + + try + { + NameList list = new NameList( type, element ); + + m_Table[type] = list; + } + catch + { + } + } + } + } +} diff --git a/Scripts/Misc/NameVerification.cs b/Scripts/Misc/NameVerification.cs new file mode 100644 index 0000000..6682d8e --- /dev/null +++ b/Scripts/Misc/NameVerification.cs @@ -0,0 +1,207 @@ +using System; +using Server; +using Server.Commands; + +namespace Server.Misc +{ + public class NameVerification + { + public static readonly char[] SpaceDashPeriodQuote = new char[] + { + ' ', '-', '.', '\'' + }; + + public static readonly char[] Empty = new char[0]; + + public static void Initialize() + { + CommandSystem.Register( "ValidateName", AccessLevel.Administrator, new CommandEventHandler( ValidateName_OnCommand ) ); + } + + [Usage( "ValidateName" )] + [Description( "Checks the result of NameValidation on the specified name." )] + public static void ValidateName_OnCommand( CommandEventArgs e ) + { + if ( Validate( e.ArgString, 2, 16, true, false, true, 1, SpaceDashPeriodQuote ) ) + e.Mobile.SendMessage( 0x59, "That name is considered valid." ); + else + e.Mobile.SendMessage( 0x22, "That name is considered invalid." ); + } + + public static bool Validate( string name, int minLength, int maxLength, bool allowLetters, bool allowDigits, bool noExceptionsAtStart, int maxExceptions, char[] exceptions ) + { + return Validate( name, minLength, maxLength, allowLetters, allowDigits, noExceptionsAtStart, maxExceptions, exceptions, m_Disallowed, m_StartDisallowed ); + } + + public static bool Validate( string name, int minLength, int maxLength, bool allowLetters, bool allowDigits, bool noExceptionsAtStart, int maxExceptions, char[] exceptions, string[] disallowed, string[] startDisallowed ) + { + if ( name == null || name.Length < minLength || name.Length > maxLength ) + return false; + + int exceptCount = 0; + + name = name.ToLower(); + + if ( !allowLetters || !allowDigits || (exceptions.Length > 0 && (noExceptionsAtStart || maxExceptions < int.MaxValue)) ) + { + for ( int i = 0; i < name.Length; ++i ) + { + char c = name[i]; + + if ( c >= 'a' && c <= 'z' ) + { + if ( !allowLetters ) + return false; + + exceptCount = 0; + } + else if ( c >= '0' && c <= '9' ) + { + if ( !allowDigits ) + return false; + + exceptCount = 0; + } + else + { + bool except = false; + + for ( int j = 0; !except && j < exceptions.Length; ++j ) + if ( c == exceptions[j] ) + except = true; + + if ( !except || (i == 0 && noExceptionsAtStart) ) + return false; + + if ( exceptCount++ == maxExceptions ) + return false; + } + } + } + + for ( int i = 0; i < disallowed.Length; ++i ) + { + int indexOf = name.IndexOf( disallowed[i] ); + + if ( indexOf == -1 ) + continue; + + bool badPrefix = ( indexOf == 0 ); + + for ( int j = 0; !badPrefix && j < exceptions.Length; ++j ) + badPrefix = ( name[indexOf - 1] == exceptions[j] ); + + if ( !badPrefix ) + continue; + + bool badSuffix = ( (indexOf + disallowed[i].Length) >= name.Length ); + + for ( int j = 0; !badSuffix && j < exceptions.Length; ++j ) + badSuffix = ( name[indexOf + disallowed[i].Length] == exceptions[j] ); + + if ( badSuffix ) + return false; + } + + for ( int i = 0; i < startDisallowed.Length; ++i ) + { + if ( name.StartsWith( startDisallowed[i] ) ) + return false; + } + + return true; + } + + public static string[] StartDisallowed { get { return m_StartDisallowed; } } + public static string[] Disallowed { get { return m_Disallowed; } } + + private static string[] m_StartDisallowed = new string[] + { + "seer", + "counselor", + "gm", + "admin", + "lady", + "lord" + }; + + private static string[] m_Disallowed = new string[] + { + "jigaboo", + "chigaboo", + "wop", + "kyke", + "kike", + "tit", + "spic", + "prick", + "piss", + "lezbo", + "lesbo", + "felatio", + "dyke", + "dildo", + "chinc", + "chink", + "cunnilingus", + "cum", + "cocksucker", + "cock", + "clitoris", + "clit", + "ass", + "hitler", + "penis", + "nigga", + "nigger", + "klit", + "kunt", + "jiz", + "jism", + "jerkoff", + "jackoff", + "goddamn", + "fag", + "blowjob", + "bitch", + "asshole", + "dick", + "pussy", + "snatch", + "cunt", + "twat", + "shit", + "fuck", + "tailor", + "smith", + "scholar", + "rogue", + "novice", + "neophyte", + "merchant", + "medium", + "master", + "mage", + "lb", + "journeyman", + "grandmaster", + "fisherman", + "expert", + "chef", + "carpenter", + "british", + "blackthorne", + "blackthorn", + "beggar", + "archer", + "apprentice", + "adept", + "gamemaster", + "frozen", + "squelched", + "invulnerable", + "osi", + "origin" + }; + } +} \ No newline at end of file diff --git a/Scripts/Misc/Notoriety.cs b/Scripts/Misc/Notoriety.cs new file mode 100644 index 0000000..342842c --- /dev/null +++ b/Scripts/Misc/Notoriety.cs @@ -0,0 +1,361 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Guilds; +using Server.Multis; +using Server.Mobiles; +using Server.Engines.PartySystem; +using Server.Spells; + +namespace Server.Misc +{ + public class NotorietyHandlers + { + public static void Initialize() + { + Notoriety.Hues[Notoriety.Innocent] = 0x59; + Notoriety.Hues[Notoriety.Ally] = 0x3F; + Notoriety.Hues[Notoriety.CanBeAttacked] = 0x3B2; + Notoriety.Hues[Notoriety.Criminal] = 0x3B2; + Notoriety.Hues[Notoriety.Enemy] = 0x90; + Notoriety.Hues[Notoriety.Murderer] = 0x22; + Notoriety.Hues[Notoriety.Invulnerable] = 0x35; + + Notoriety.Handler = new NotorietyHandler( MobileNotoriety ); + + Mobile.AllowBeneficialHandler = new AllowBeneficialHandler( Mobile_AllowBeneficial ); + Mobile.AllowHarmfulHandler = new AllowHarmfulHandler( Mobile_AllowHarmful ); + } + + public static bool CriminalTolerated( Mobile m ) + { + // Buc's Den + if ( m.Map == Map.Britannia && m.X >= 2545 && m.Y >= 2100 && m.X <= 2702 && m.Y <= 2306 ) + return true; + + return false; + } + + private enum GuildStatus { None, Peaceful, Waring } + + private static GuildStatus GetGuildStatus( Mobile m ) + { + if( m.Guild == null ) + return GuildStatus.None; + else if( ((Guild)m.Guild).Enemies.Count == 0 && m.Guild.Type == GuildType.Regular ) + return GuildStatus.Peaceful; + + return GuildStatus.Waring; + } + + private static bool CheckBeneficialStatus( GuildStatus from, GuildStatus target ) + { + if( from == GuildStatus.Waring || target == GuildStatus.Waring ) + return false; + + return true; + } + + public static bool Mobile_AllowBeneficial( Mobile from, Mobile target ) + { + if( from == null || target == null || from.AccessLevel > AccessLevel.Player || target.AccessLevel > AccessLevel.Player ) + return true; + + Map map = from.Map; + + if( map != null && (map.Rules & MapRules.BeneficialRestrictions) == 0 ) + return true; + + if( !from.Player ) + return true; // NPCs have no restrictions + + if( target is BaseCreature && !((BaseCreature)target).Controlled ) + return false; // Players cannot heal uncontrolled mobiles + + Guild fromGuild = from.Guild as Guild; + Guild targetGuild = target.Guild as Guild; + + if( fromGuild != null && targetGuild != null && (targetGuild == fromGuild || fromGuild.IsAlly( targetGuild )) ) + return true; // Guild members can be beneficial + + return CheckBeneficialStatus( GetGuildStatus( from ), GetGuildStatus( target ) ); + } + + public static bool Mobile_AllowHarmful( Mobile from, Mobile target ) + { + if( from == null || target == null || from.AccessLevel > AccessLevel.Player || target.AccessLevel > AccessLevel.Player ) + return true; + + Map map = from.Map; + + if( map != null && (map.Rules & MapRules.HarmfulRestrictions) == 0 ) + return true; + + BaseCreature bc = from as BaseCreature; + + if( !from.Player && !(bc != null && bc.GetMaster() != null && bc.GetMaster().AccessLevel == AccessLevel.Player ) ) + { + return true; // Uncontrolled NPCs are only restricted by the young system + } + + Guild fromGuild = GetGuildFor( from.Guild as Guild, from ); + Guild targetGuild = GetGuildFor( target.Guild as Guild, target ); + + if( fromGuild != null && targetGuild != null && (fromGuild == targetGuild || fromGuild.IsAlly( targetGuild ) || fromGuild.IsEnemy( targetGuild )) ) + return true; // Guild allies or enemies can be harmful + + if( target is BaseCreature && (((BaseCreature)target).Controlled || (((BaseCreature)target).Summoned && from != ((BaseCreature)target).SummonMaster)) ) + return false; // Cannot harm other controlled mobiles + + if( target.Player ) + return false; // Cannot harm other players + + if( !(target is BaseCreature && ((BaseCreature)target).InitialInnocent) ) + { + if( Notoriety.Compute( from, target ) == Notoriety.Innocent ) + return false; // Cannot harm innocent mobiles + } + + return true; + } + + public static Guild GetGuildFor( Guild def, Mobile m ) + { + Guild g = def; + + BaseCreature c = m as BaseCreature; + + if( c != null && c.Controlled && c.ControlMaster != null ) + { + c.DisplayGuildTitle = false; + + if( c.Map != Map.Internal && (Guild.NewGuildSystem || c.ControlOrder == OrderType.Attack || c.ControlOrder == OrderType.Guard) ) + g = (Guild)(c.Guild = c.ControlMaster.Guild); + else if( c.Map == Map.Internal || c.ControlMaster.Guild == null ) + g = (Guild)(c.Guild = null); + } + + return g; + } + + public static int CorpseNotoriety( Mobile source, Corpse target ) + { + if( target.AccessLevel > AccessLevel.Player ) + return Notoriety.CanBeAttacked; + + Body body = (Body)target.Amount; + + BaseCreature cretOwner = target.Owner as BaseCreature; + + if( cretOwner != null ) + { + Guild sourceGuild = GetGuildFor( source.Guild as Guild, source ); + Guild targetGuild = GetGuildFor( target.Guild as Guild, target.Owner ); + + if( sourceGuild != null && targetGuild != null ) + { + if( sourceGuild == targetGuild || sourceGuild.IsAlly( targetGuild ) ) + return Notoriety.Ally; + else if( sourceGuild.IsEnemy( targetGuild ) ) + return Notoriety.Enemy; + } + + if( CheckHouseFlag( source, target.Owner, target.Location, target.Map ) ) + return Notoriety.CanBeAttacked; + + int actual = Notoriety.CanBeAttacked; + + if( target.Kills >= 5 || (body.IsMonster && IsSummoned( target.Owner as BaseCreature )) || (target.Owner is BaseCreature && ((BaseCreature)target.Owner).AlwaysMurderer) ) + actual = Notoriety.Murderer; + + if( DateTime.Now >= (target.TimeOfDeath + Corpse.MonsterLootRightSacrifice) ) + return actual; + + Party sourceParty = Party.Get( source ); + + List list = target.Aggressors; + + for( int i = 0; i < list.Count; ++i ) + { + if( list[i] == source || (sourceParty != null && Party.Get( list[i] ) == sourceParty) ) + return actual; + } + + return Notoriety.Innocent; + } + else + { + if( target.Kills >= 5 || (body.IsMonster && IsSummoned( target.Owner as BaseCreature )) || (target.Owner is BaseCreature && ((BaseCreature)target.Owner).AlwaysMurderer) ) + return Notoriety.Murderer; + + if (target.Criminal && target.Map != null && ((target.Map.Rules & MapRules.HarmfulRestrictions) == 0)) + return Notoriety.Criminal; + + Guild sourceGuild = GetGuildFor( source.Guild as Guild, source ); + Guild targetGuild = GetGuildFor( target.Guild as Guild, target.Owner ); + + if( sourceGuild != null && targetGuild != null ) + { + if( sourceGuild == targetGuild || sourceGuild.IsAlly( targetGuild ) ) + return Notoriety.Ally; + else if( sourceGuild.IsEnemy( targetGuild ) ) + return Notoriety.Enemy; + } + + if( target.Owner != null && target.Owner is BaseCreature && ((BaseCreature)target.Owner).AlwaysAttackable ) + return Notoriety.CanBeAttacked; + + if( CheckHouseFlag( source, target.Owner, target.Location, target.Map ) ) + return Notoriety.CanBeAttacked; + + if( !(target.Owner is PlayerMobile) && !IsPet( target.Owner as BaseCreature ) ) + return Notoriety.CanBeAttacked; + + List list = target.Aggressors; + + for( int i = 0; i < list.Count; ++i ) + { + if( list[i] == source ) + return Notoriety.CanBeAttacked; + } + + return Notoriety.Innocent; + } + } + + public static int MobileNotoriety( Mobile source, Mobile target ) + { + if( target is BaseCreature && target.Karma > 0 && target.Fame > 0 && !(target is Guard || target is BaseVendor) ) + return Notoriety.Innocent; + + if( target is BaseCreature && ((BaseCreature)target).FightMode == FightMode.Evil && !(target is Guard || target is BaseVendor) ) + return Notoriety.Innocent; + + if( target.AccessLevel > AccessLevel.Player ) + return Notoriety.CanBeAttacked; + + if( source.Player && !target.Player && source is PlayerMobile && target is BaseCreature ) + { + BaseCreature bc = (BaseCreature)target; + + Mobile master = bc.GetMaster(); + + if ( master != null && master.AccessLevel > AccessLevel.Player ) + return Notoriety.CanBeAttacked; + } + + if ( target.Kills >= 5 || ( target.Body.IsMonster && IsSummoned( target as BaseCreature ) && !( target is Golem ) ) || ( target is BaseCreature && ( ( (BaseCreature)target ).AlwaysMurderer ) ) ) + return Notoriety.Murderer; + + if ( target is BaseCreature && ((BaseCreature)target).FightMode == FightMode.Closest && !(target is Guard) && ((BaseCreature)target).AI != AIType.AI_Animal ) + return Notoriety.Murderer; + + if( target.Criminal ) + return Notoriety.Criminal; + + Guild sourceGuild = GetGuildFor( source.Guild as Guild, source ); + Guild targetGuild = GetGuildFor( target.Guild as Guild, target ); + + if( sourceGuild != null && targetGuild != null ) + { + if( sourceGuild == targetGuild || sourceGuild.IsAlly( targetGuild ) ) + return Notoriety.Ally; + else if( sourceGuild.IsEnemy( targetGuild ) ) + return Notoriety.Enemy; + } + + if( SkillHandlers.Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).PermaFlags.Contains( source ) ) + return Notoriety.CanBeAttacked; + + if( target is BaseCreature && ((BaseCreature)target).AlwaysAttackable ) + return Notoriety.CanBeAttacked; + + if( CheckHouseFlag( source, target, target.Location, target.Map ) ) + return Notoriety.CanBeAttacked; + + if( !(target is BaseCreature && ((BaseCreature)target).InitialInnocent) ) //If Target is NOT A baseCreature, OR it's a BC and the BC is initial innocent... + { + if( !target.Body.IsHuman && !target.Body.IsGhost && !IsPet( target as BaseCreature ) && !(target is PlayerMobile) || !target.CanBeginAction( typeof( Server.Spells.Seventh.PolymorphSpell ) ) ) + return Notoriety.CanBeAttacked; + } + + if( CheckAggressor( source.Aggressors, target ) ) + return Notoriety.CanBeAttacked; + + if( CheckAggressed( source.Aggressed, target ) ) + return Notoriety.CanBeAttacked; + + if( target is BaseCreature ) + { + BaseCreature bc = (BaseCreature)target; + + if( bc.Controlled && bc.ControlOrder == OrderType.Guard && bc.ControlTarget == source ) + return Notoriety.CanBeAttacked; + } + + if( source is BaseCreature ) + { + BaseCreature bc = (BaseCreature)source; + + Mobile master = bc.GetMaster(); + if( master != null ) + if( CheckAggressor( master.Aggressors, target ) || MobileNotoriety( master, target ) == Notoriety.CanBeAttacked ) + return Notoriety.CanBeAttacked; + } + + return Notoriety.Innocent; + } + + public static bool CheckHouseFlag( Mobile from, Mobile m, Point3D p, Map map ) + { + BaseHouse house = BaseHouse.FindHouseAt( p, map, 16 ); + + if( house == null || house.Public || !house.IsFriend( from ) ) + return false; + + if( m != null && house.IsFriend( m ) ) + return false; + + BaseCreature c = m as BaseCreature; + + if( c != null && !c.Deleted && c.Controlled && c.ControlMaster != null ) + return !house.IsFriend( c.ControlMaster ); + + return true; + } + + public static bool IsPet( BaseCreature c ) + { + return (c != null && c.Controlled); + } + + public static bool IsSummoned( BaseCreature c ) + { + return (c != null && /*c.Controlled &&*/ c.Summoned); + } + + public static bool CheckAggressor( List list, Mobile target ) + { + for( int i = 0; i < list.Count; ++i ) + if( list[i].Attacker == target ) + return true; + + return false; + } + + public static bool CheckAggressed( List list, Mobile target ) + { + for( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if( !info.CriminalAggression && info.Defender == target ) + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Paperdoll.cs b/Scripts/Misc/Paperdoll.cs new file mode 100644 index 0000000..670d361 --- /dev/null +++ b/Scripts/Misc/Paperdoll.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Network; +using Server.Multis; +using Server.Mobiles; + +namespace Server.Misc +{ + public class Paperdoll + { + public static void Initialize() + { + EventSink.PaperdollRequest += new PaperdollRequestEventHandler( EventSink_PaperdollRequest ); + } + + public static void EventSink_PaperdollRequest( PaperdollRequestEventArgs e ) + { + Mobile beholder = e.Beholder; + Mobile beheld = e.Beheld; + + beholder.Send( new DisplayPaperdoll( beheld, Titles.ComputeTitle( beholder, beheld ), beheld.AllowEquipFrom( beholder ) ) ); + + if ( ObjectPropertyList.Enabled ) + { + List items = beheld.Items; + + for ( int i = 0; i < items.Count; ++i ) + beholder.Send( items[i].OPLPacket ); + + // NOTE: OSI sends MobileUpdate when opening your own paperdoll. + // It has a very bad rubber-banding affect. What positive affects does it have? + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Poison.cs b/Scripts/Misc/Poison.cs new file mode 100644 index 0000000..ada5b3f --- /dev/null +++ b/Scripts/Misc/Poison.cs @@ -0,0 +1,113 @@ +using System; +using Server; +using Server.Items; +using Server.Network; +using Server.Mobiles; +using Server.Spells; + +namespace Server +{ + public class PoisonImpl : Poison + { + [CallPriority( 10 )] + public static void Configure() + { + Register( new PoisonImpl( "Lesser", 0, 4, 26, 2.500, 3.5, 3.0, 10, 2 ) ); + Register( new PoisonImpl( "Regular", 1, 5, 26, 3.125, 3.5, 3.0, 10, 2 ) ); + Register( new PoisonImpl( "Greater", 2, 6, 26, 6.250, 3.5, 3.0, 10, 2 ) ); + Register( new PoisonImpl( "Deadly", 3, 7, 26, 12.500, 3.5, 4.0, 10, 2 ) ); + Register( new PoisonImpl( "Lethal", 4, 9, 26, 25.000, 3.5, 5.0, 10, 2 ) ); + } + + public static Poison IncreaseLevel( Poison oldPoison ) + { + Poison newPoison = ( oldPoison == null ? null : GetPoison( oldPoison.Level + 1 ) ); + + return ( newPoison == null ? oldPoison : newPoison ); + } + + // Info + private string m_Name; + private int m_Level; + + // Damage + private int m_Minimum, m_Maximum; + private double m_Scalar; + + // Timers + private TimeSpan m_Delay; + private TimeSpan m_Interval; + private int m_Count, m_MessageInterval; + + public PoisonImpl( string name, int level, int min, int max, double percent, double delay, double interval, int count, int messageInterval ) + { + m_Name = name; + m_Level = level; + m_Minimum = min; + m_Maximum = max; + m_Scalar = percent * 0.01; + m_Delay = TimeSpan.FromSeconds( delay ); + m_Interval = TimeSpan.FromSeconds( interval ); + m_Count = count; + m_MessageInterval = messageInterval; + } + + public override string Name{ get{ return m_Name; } } + public override int Level{ get{ return m_Level; } } + + public class PoisonTimer : Timer + { + private PoisonImpl m_Poison; + private Mobile m_Mobile; + private Mobile m_From; + private int m_LastDamage; + private int m_Index; + + public Mobile From{ get{ return m_From; } set{ m_From = value; } } + + public PoisonTimer( Mobile m, PoisonImpl p ) : base( p.m_Delay, p.m_Interval ) + { + m_From = m; + m_Mobile = m; + m_Poison = p; + } + + protected override void OnTick() + { + if ( m_Index++ == m_Poison.m_Count ) + { + m_Mobile.SendLocalizedMessage( 502136 ); // The poison seems to have worn off. + m_Mobile.Poison = null; + + Stop(); + return; + } + + int damage = 1 + (int)(m_Mobile.Hits * m_Poison.m_Scalar); + + if ( damage < m_Poison.m_Minimum ) + damage = m_Poison.m_Minimum; + else if ( damage > m_Poison.m_Maximum ) + damage = m_Poison.m_Maximum; + + m_LastDamage = damage; + + if ( m_From != null ) + m_From.DoHarmful( m_Mobile, true ); + + Ultima.Damage( m_Mobile, m_From, damage ); + + if ( 0.60 <= Utility.RandomDouble() ) // OSI: randomly revealed between first and third damage tick, guessing 60% chance + m_Mobile.RevealingAction(); + + if ( (m_Index % m_Poison.m_MessageInterval) == 0 ) + m_Mobile.OnPoisoned( m_From, m_Poison, m_Poison ); + } + } + + public override Timer ConstructTimer( Mobile m ) + { + return new PoisonTimer( m, this ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/ProfanityProtection.cs b/Scripts/Misc/ProfanityProtection.cs new file mode 100644 index 0000000..c030189 --- /dev/null +++ b/Scripts/Misc/ProfanityProtection.cs @@ -0,0 +1,124 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Misc +{ + public enum ProfanityAction + { + None, // no action taken + Disallow, // speech is not displayed + Criminal, // makes the player criminal, not killable by guards + CriminalAction, // makes the player criminal, can be killed by guards + Disconnect, // player is kicked + Other // some other implementation + } + + public class ProfanityProtection + { + private static bool Enabled = false; + private static ProfanityAction Action = ProfanityAction.Disallow; // change here what to do when profanity is detected + + public static void Initialize() + { + if ( Enabled ) + EventSink.Speech += new SpeechEventHandler( EventSink_Speech ); + } + + private static bool OnProfanityDetected( Mobile from, string speech ) + { + switch ( Action ) + { + case ProfanityAction.None: return true; + case ProfanityAction.Disallow: return false; + case ProfanityAction.Criminal: from.Criminal = true; return true; + case ProfanityAction.CriminalAction: from.CriminalAction( false ); return true; + case ProfanityAction.Disconnect: + { + NetState ns = from.NetState; + + if ( ns != null ) + ns.Dispose(); + + return false; + } + default: + case ProfanityAction.Other: // TODO: Provide custom implementation if this is chosen + { + return true; + } + } + } + + private static void EventSink_Speech( SpeechEventArgs e ) + { + Mobile from = e.Mobile; + + if ( from.AccessLevel > AccessLevel.Player ) + return; + + if ( !NameVerification.Validate( e.Speech, 0, int.MaxValue, true, true, false, int.MaxValue, m_Exceptions, m_Disallowed, m_StartDisallowed ) ) + e.Blocked = !OnProfanityDetected( from, e.Speech ); + } + + public static char[] Exceptions{ get{ return m_Exceptions; } } + public static string[] StartDisallowed{ get{ return m_StartDisallowed; } } + public static string[] Disallowed{ get{ return m_Disallowed; } } + + private static char[] m_Exceptions = new char[] + { + ' ', '-', '.', '\'', '"', ',', '_', '+', '=', '~', '`', '!', '^', '*', '\\', '/', ';', ':', '<', '>', '[', ']', '{', '}', '?', '|', '(', ')', '%', '$', '&', '#', '@' + }; + + private static string[] m_StartDisallowed = new string[]{}; + + private static string[] m_Disallowed = new string[] + { + "jigaboo", + "chigaboo", + "wop", + "kyke", + "kike", + "tit", + "spic", + "prick", + "piss", + "lezbo", + "lesbo", + "felatio", + "dyke", + "dildo", + "chinc", + "chink", + "cunnilingus", + "cum", + "cocksucker", + "cock", + "clitoris", + "clit", + "ass", + "hitler", + "penis", + "nigga", + "nigger", + "klit", + "kunt", + "jiz", + "jism", + "jerkoff", + "jackoff", + "goddamn", + "fag", + "blowjob", + "bitch", + "asshole", + "dick", + "pussy", + "snatch", + "cunt", + "twat", + "shit", + "fuck" + }; + } +} \ No newline at end of file diff --git a/Scripts/Misc/Profile.cs b/Scripts/Misc/Profile.cs new file mode 100644 index 0000000..888f43c --- /dev/null +++ b/Scripts/Misc/Profile.cs @@ -0,0 +1,98 @@ +using System; +using Server; +using Server.Network; +using Server.Accounting; + +namespace Server.Misc +{ + public class Profile + { + public static void Initialize() + { + EventSink.ProfileRequest += new ProfileRequestEventHandler( EventSink_ProfileRequest ); + EventSink.ChangeProfileRequest += new ChangeProfileRequestEventHandler( EventSink_ChangeProfileRequest ); + } + + public static void EventSink_ChangeProfileRequest( ChangeProfileRequestEventArgs e ) + { + Mobile from = e.Beholder; + + if ( from.ProfileLocked ) + from.SendMessage( "Your profile is locked. You may not change it." ); + else + from.Profile = e.Text; + } + + public static void EventSink_ProfileRequest( ProfileRequestEventArgs e ) + { + Mobile beholder = e.Beholder; + Mobile beheld = e.Beheld; + + if ( !beheld.Player ) + return; + + if ( beholder.Map != beheld.Map || !beholder.InRange( beheld, 12 ) || !beholder.CanSee( beheld ) ) + return; + + string header = Titles.ComputeTitle( beholder, beheld ); + + string footer = ""; + + if ( beheld.ProfileLocked ) + { + if ( beholder == beheld ) + footer = "Your profile has been locked."; + else if ( beholder.AccessLevel >= AccessLevel.Counselor ) + footer = "This profile has been locked."; + } + + if ( footer.Length == 0 && beholder == beheld ) + footer = GetAccountDuration( beheld ); + + string body = beheld.Profile; + + if ( body == null || body.Length <= 0 ) + body = ""; + + beholder.Send( new DisplayProfile( beholder != beheld || !beheld.ProfileLocked, beheld, header, body, footer ) ); + } + + private static string GetAccountDuration( Mobile m ) + { + Account a = m.Account as Account; + + if ( a == null ) + return ""; + + TimeSpan ts = DateTime.Now - a.Created; + + string v; + + if ( Format( ts.TotalDays, "This account is {0} day{1} old.", out v ) ) + return v; + + if ( Format( ts.TotalHours, "This account is {0} hour{1} old.", out v ) ) + return v; + + if ( Format( ts.TotalMinutes, "This account is {0} minute{1} old.", out v ) ) + return v; + + if ( Format( ts.TotalSeconds, "This account is {0} second{1} old.", out v ) ) + return v; + + return ""; + } + + public static bool Format( double value, string format, out string op ) + { + if ( value >= 1.0 ) + { + op = String.Format( format, (int)value, (int)value != 1 ? "s" : "" ); + return true; + } + + op = null; + return false; + } + } +} diff --git a/Scripts/Misc/ProtocolExtensions.cs b/Scripts/Misc/ProtocolExtensions.cs new file mode 100644 index 0000000..5dbb6be --- /dev/null +++ b/Scripts/Misc/ProtocolExtensions.cs @@ -0,0 +1,107 @@ +using System; +using Server; +using Server.Network; +using Server.Mobiles; +using Server.Engines.PartySystem; + +namespace Server.Misc +{ + public class ProtocolExtensions + { + private static PacketHandler[] m_Handlers = new PacketHandler[0x100]; + + public static void Initialize() + { + PacketHandlers.Register( 0xF0, 0, false, new OnPacketReceive( DecodeBundledPacket ) ); + + Register( 0x00, true, new OnPacketReceive( QueryPartyLocations ) ); + } + + public static void QueryPartyLocations( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + Party party = Party.Get( from ); + + if ( party != null ) + { + AckPartyLocations ack = new AckPartyLocations( from, party ); + + if ( ack.UnderlyingStream.Length > 8 ) + state.Send( ack ); + } + } + + public static void Register( int packetID, bool ingame, OnPacketReceive onReceive ) + { + m_Handlers[packetID] = new PacketHandler( packetID, 0, ingame, onReceive ); + } + + public static PacketHandler GetHandler( int packetID ) + { + if ( packetID >= 0 && packetID < m_Handlers.Length ) + return m_Handlers[packetID]; + + return null; + } + + public static void DecodeBundledPacket( NetState state, PacketReader pvSrc ) + { + int packetID = pvSrc.ReadByte(); + + PacketHandler ph = GetHandler( packetID ); + + if ( ph != null ) + { + if ( ph.Ingame && state.Mobile == null ) + { + Console.WriteLine( "Client: {0}: Sent ingame packet (0xF0x{1:X2}) before having been attached to a mobile", state, packetID ); + state.Dispose(); + } + else if ( ph.Ingame && state.Mobile.Deleted ) + { + state.Dispose(); + } + else + { + ph.OnReceive( state, pvSrc ); + } + } + } + } + + public abstract class ProtocolExtension : Packet + { + public ProtocolExtension( int packetID, int capacity ) : base( 0xF0 ) + { + EnsureCapacity( 4 + capacity ); + + m_Stream.Write( (byte) packetID ); + } + } + + public class AckPartyLocations : ProtocolExtension + { + public AckPartyLocations( Mobile from, Party party ) : base( 0x01, ((party.Members.Count - 1) * 9) + 4 ) + { + for ( int i = 0; i < party.Members.Count; ++i ) + { + PartyMemberInfo pmi = (PartyMemberInfo)party.Members[i]; + + if ( pmi == null || pmi.Mobile == from ) + continue; + + Mobile mob = pmi.Mobile; + + if ( Utility.InUpdateRange( from, mob ) && from.CanSee( mob ) ) + continue; + + m_Stream.Write( (int) mob.Serial ); + m_Stream.Write( (short) mob.X ); + m_Stream.Write( (short) mob.Y ); + m_Stream.Write( (byte) (mob.Map == null ? 0 : mob.Map.MapID) ); + } + + m_Stream.Write( (int) 0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/RaceDefinitions.cs b/Scripts/Misc/RaceDefinitions.cs new file mode 100644 index 0000000..65f8b7e --- /dev/null +++ b/Scripts/Misc/RaceDefinitions.cs @@ -0,0 +1,223 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class RaceDefinitions + { + public static void Configure() + { + /* Here we configure all races. Some notes: + * + * 1) The first 32 races are reserved for core use. + * 2) Race 0x7F is reserved for core use. + * 3) Race 0xFF is reserved for core use. + * 4) Changing or removing any predefined races may cause server instability. + */ + + RegisterRace( new Human ( 0, 0 ) ); + RegisterRace( new Orc ( 1, 1 ) ); + } + + public static void RegisterRace( Race race ) + { + Race.Races[race.RaceIndex] = race; + Race.AllRaces.Add( race ); + } + + private class Human : Race + { + public Human( int raceID, int raceIndex ) + : base( raceID, raceIndex, "Human", "Humans", 400, 401, 402, 403, Expansion.None ) + { + } + + public override bool ValidateHair( bool female, int itemID ) + { + if( itemID == 0 ) + return true; + + if( (female && itemID == 0x2048) || (!female && itemID == 0x2046 ) ) + return false; //Buns & Receeding Hair + + if( itemID >= 0x203B && itemID <= 0x203D ) + return true; + + if( itemID >= 0x2044 && itemID <= 0x204A ) + return true; + + return false; + } + + public override int RandomHair( bool female ) //Random hair doesn't include baldness + { + switch( Utility.Random( 9 ) ) + { + case 0: return 0x203B; //Short + case 1: return 0x203C; //Long + case 2: return 0x203D; //Pony Tail + case 3: return 0x2044; //Mohawk + case 4: return 0x2045; //Pageboy + case 5: return 0x2047; //Afro + case 6: return 0x2049; //Pig tails + case 7: return 0x204A; //Krisna + default: return (female ? 0x2046 : 0x2048); //Buns or Receeding Hair + } + } + + public override bool ValidateFacialHair( bool female, int itemID ) + { + if( itemID == 0 ) + return true; + + if( female ) + return false; + + if( itemID >= 0x203E && itemID <= 0x2041 ) + return true; + + if( itemID >= 0x204B && itemID <= 0x204D ) + return true; + + return false; + } + + public override int RandomFacialHair( bool female ) + { + if( female ) + return 0; + + int rand = Utility.Random( 7 ); + + return ((rand < 4) ? 0x203E : 0x2047) + rand; + } + + public override int ClipSkinHue( int hue ) + { + if( hue < 1002 ) + return 1002; + else if( hue > 1058 ) + return 1058; + else + return hue; + } + + public override int RandomSkinHue() + { + return Utility.Random( 1002, 57 ) | 0x8000; + } + + public override int ClipHairHue( int hue ) + { + if( hue < 1102 ) + return 1102; + else if( hue > 1149 ) + return 1149; + else + return hue; + } + + public override int RandomHairHue() + { + return Utility.Random( 1102, 48 ); + } + } + + private class Orc : Race + { + private static int[] m_SkinHues = new int[] + { + 0x0BF, 0x24D, 0x24E, 0x24F, 0x353, 0x361, 0x367, 0x374, + 0x375, 0x376, 0x381, 0x382, 0x383, 0x384, 0x385, 0x389, + 0x3DE, 0x3E5, 0x3E6, 0x3E8, 0x3E9, 0x430, 0x4A7, 0x4DE, + 0x51D, 0x53F, 0x579, 0x76B, 0x76C, 0x76D, 0x835, 0x903 + }; + + private static int[] m_HairHues = new int[] + { + 0x034, 0x035, 0x036, 0x037, 0x038, 0x039, 0x058, 0x08E, + 0x08F, 0x090, 0x091, 0x092, 0x101, 0x159, 0x15A, 0x15B, + 0x15C, 0x15D, 0x15E, 0x128, 0x12F, 0x1BD, 0x1E4, 0x1F3, + 0x207, 0x211, 0x239, 0x251, 0x26C, 0x2C3, 0x2C9, 0x31D, + 0x31E, 0x31F, 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, + 0x326, 0x369, 0x386, 0x387, 0x388, 0x389, 0x38A, 0x59D, + 0x6B8, 0x725, 0x853 + }; + + public Orc( int raceID, int raceIndex ) + : base( raceID, raceIndex, "Orc", "Orcs", 605, 606, 607, 608, Expansion.ML ) + { + } + + public override bool ValidateHair( bool female, int itemID ) + { + if( itemID == 0 ) + return true; + + if( (female && (itemID == 0x2FCD || itemID == 0x2FBF)) || (!female && (itemID == 0x2FCC || itemID == 0x2FD0)) ) + return false; + + if( itemID >= 0x2FBF && itemID <= 0x2FC2 ) + return true; + + if( itemID >= 0x2FCC && itemID <= 0x2FD1 ) + return true; + + return false; + } + + public override int RandomHair( bool female ) //Random hair doesn't include baldness + { + switch( Utility.Random( 8 ) ) + { + case 0: return 0x2FC0; //Long Feather + case 1: return 0x2FC1; //Short + case 2: return 0x2FC2; //Mullet + case 3: return 0x2FCE; //Knob + case 4: return 0x2FCF; //Braided + case 5: return 0x2FD1; //Spiked + case 6: return (female ? 0x2FCC : 0x2FBF); //Flower or Mid-long + default: return (female ? 0x2FD0 : 0x2FCD); //Bun or Long + } + } + + public override bool ValidateFacialHair( bool female, int itemID ) + { + return (itemID == 0); + } + + public override int RandomFacialHair( bool female ) + { + return 0; + } + + public override int ClipSkinHue( int hue ) + { + for( int i = 0; i < m_SkinHues.Length; i++ ) + if( m_SkinHues[i] == hue ) + return hue; + + return m_SkinHues[0]; + } + + public override int RandomSkinHue() + { + return m_SkinHues[Utility.Random( m_SkinHues.Length )] | 0x8000; + } + + public override int ClipHairHue( int hue ) + { + for( int i = 0; i < m_HairHues.Length; i++ ) + if( m_HairHues[i] == hue ) + return hue; + + return m_HairHues[0]; + } + + public override int RandomHairHue() + { + return m_HairHues[Utility.Random( m_HairHues.Length )]; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/RegenRates.cs b/Scripts/Misc/RegenRates.cs new file mode 100644 index 0000000..86ebcbf --- /dev/null +++ b/Scripts/Misc/RegenRates.cs @@ -0,0 +1,130 @@ +using System; +using Server; +using Server.Items; +using Server.Spells; +using Server.Mobiles; + +namespace Server.Misc +{ + public class RegenRates + { + [CallPriority( 10 )] + public static void Configure() + { + Mobile.DefaultHitsRate = TimeSpan.FromSeconds( 11.0 ); + Mobile.DefaultStamRate = TimeSpan.FromSeconds( 7.0 ); + Mobile.DefaultManaRate = TimeSpan.FromSeconds( 7.0 ); + + Mobile.ManaRegenRateHandler = new RegenRateHandler( Mobile_ManaRegenRate ); + } + + private static void CheckBonusSkill( Mobile m, int cur, int max, SkillName skill ) + { + if ( !m.Alive ) + return; + + double n = (double)cur / max; + double v = Math.Sqrt( m.Skills[skill].Value * 0.005 ); + + n *= (1.0 - v); + n += v; + + m.CheckSkill( skill, n ); + } + + private static TimeSpan Mobile_HitsRegenRate( Mobile from ) + { + int points = 0; + + if ( from is BaseCreature ) + points += 4; + + if ( from is BaseCreature && from is Leviathan ) + points += 40; + + if ( points < 0 ) + points = 0; + + return TimeSpan.FromSeconds( 1.0 / (0.1 * (1 + points)) ); + } + + private static TimeSpan Mobile_StamRegenRate( Mobile from ) + { + if ( from.Skills == null ) + return Mobile.DefaultStamRate; + + int points = 0; + + if( from is BaseCreature && from is Leviathan ) + points += 40; + + if ( points < -1 ) + points = -1; + + return TimeSpan.FromSeconds( 1.0 / (0.1 * (2 + points)) ); + } + + private static TimeSpan Mobile_ManaRegenRate( Mobile from ) + { + if ( from.Skills == null ) + return Mobile.DefaultManaRate; + + if ( !from.Meditating ) + CheckBonusSkill( from, from.Mana, from.ManaMax, SkillName.Meditation ); + + double rate; + double armorPenalty = GetArmorOffset( from ); + + double medPoints = (from.Int + from.Skills[SkillName.Meditation].Value) * 0.5; + + if ( medPoints <= 0 ) + rate = 7.0; + else if ( medPoints <= 100 ) + rate = 7.0 - (239*medPoints/2400) + (19*medPoints*medPoints/48000); + else if ( medPoints < 120 ) + rate = 1.0; + else + rate = 0.75; + + rate += armorPenalty; + + if ( from.Meditating ) + rate *= 0.5; + + if ( rate < 0.5 ) + rate = 0.5; + else if ( rate > 7.0 ) + rate = 7.0; + + return TimeSpan.FromSeconds( rate ); + } + + public static double GetArmorOffset( Mobile from ) + { + double rating = GetArmorMeditationValue( from.ShieldArmor as BaseArmor ); + + if ( from.NeckArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.NeckArmor as BaseArmor ); } + if ( from.HandArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.HandArmor as BaseArmor ); } + if ( from.HeadArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.HeadArmor as BaseArmor ); } + if ( from.ArmsArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.ArmsArmor as BaseArmor ); } + if ( from.LegsArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.LegsArmor as BaseArmor ); } + if ( from.ChestArmor is BaseArmor ){ rating += GetArmorMeditationValue( from.ChestArmor as BaseArmor ); } + + return rating / 4; + } + + private static double GetArmorMeditationValue( BaseArmor ar ) + { + if ( ar == null ) + return 0.0; + + switch ( ar.MeditationAllowance ) + { + default: + case ArmorMeditationAllowance.None: return ar.BaseArmorRatingScaled; + case ArmorMeditationAllowance.Half: return ar.BaseArmorRatingScaled / 2.0; + case ArmorMeditationAllowance.All: return 0.0; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/RenameRequests.cs b/Scripts/Misc/RenameRequests.cs new file mode 100644 index 0000000..01f069d --- /dev/null +++ b/Scripts/Misc/RenameRequests.cs @@ -0,0 +1,34 @@ +using System; +using Server; + +namespace Server.Misc +{ + public class RenameRequests + { + public static void Initialize() + { + EventSink.RenameRequest += new RenameRequestEventHandler( EventSink_RenameRequest ); + } + + private static void EventSink_RenameRequest( RenameRequestEventArgs e ) + { + Mobile from = e.From; + Mobile targ = e.Target; + string name = e.Name; + + if ( from.CanSee( targ ) && from.InRange( targ, 12 ) && targ.CanBeRenamedBy( from ) ) + { + name = name.Trim(); + + if( NameVerification.Validate( name, 1, 16, true, false, true, 0, NameVerification.Empty, NameVerification.StartDisallowed, ( new string[]{} ) ) ) + { + targ.Name = name; + } + else + { + from.SendMessage( "That name is unacceptable." ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/ResourceInfo.cs b/Scripts/Misc/ResourceInfo.cs new file mode 100644 index 0000000..07dabb2 --- /dev/null +++ b/Scripts/Misc/ResourceInfo.cs @@ -0,0 +1,302 @@ +using System; +using System.Collections; + +namespace Server.Items +{ + public enum CraftResource + { + None = 0, + Iron = 1, + Leathered = 2, + Wooden = 3 + } + + public enum CraftResourceType + { + None, + Metal, + Leather, + Wood + } + + public class CraftAttributeInfo + { + private int m_WeaponDurability; + private int m_WeaponLowerRequirements; + + private int m_ArmorDurability; + private int m_ArmorLowerRequirements; + + public int WeaponDurability{ get{ return m_WeaponDurability; } set{ m_WeaponDurability = value; } } + public int WeaponLowerRequirements{ get{ return m_WeaponLowerRequirements; } set{ m_WeaponLowerRequirements = value; } } + + public int ArmorDurability{ get{ return m_ArmorDurability; } set{ m_ArmorDurability = value; } } + public int ArmorLowerRequirements{ get{ return m_ArmorLowerRequirements; } set{ m_ArmorLowerRequirements = value; } } + + public CraftAttributeInfo() + { + } + + public static readonly CraftAttributeInfo Blank; + + static CraftAttributeInfo() + { + Blank = new CraftAttributeInfo(); + } + } + + public class CraftResourceInfo + { + private int m_Hue; + private int m_Number; + private string m_Name; + private CraftAttributeInfo m_AttributeInfo; + private CraftResource m_Resource; + private Type[] m_ResourceTypes; + + public int Hue{ get{ return m_Hue; } } + public int Number{ get{ return m_Number; } } + public string Name{ get{ return m_Name; } } + public CraftAttributeInfo AttributeInfo{ get{ return m_AttributeInfo; } } + public CraftResource Resource{ get{ return m_Resource; } } + public Type[] ResourceTypes{ get{ return m_ResourceTypes; } } + + public CraftResourceInfo( int hue, int number, string name, CraftAttributeInfo attributeInfo, CraftResource resource, params Type[] resourceTypes ) + { + m_Hue = hue; + m_Number = number; + m_Name = name; + m_AttributeInfo = attributeInfo; + m_Resource = resource; + m_ResourceTypes = resourceTypes; + + for ( int i = 0; i < resourceTypes.Length; ++i ) + CraftResources.RegisterType( resourceTypes[i], resource ); + } + } + + public class CraftResources + { + private static CraftResourceInfo[] m_MetalInfo = new CraftResourceInfo[] + { + new CraftResourceInfo( 0x000, 1053109, "Iron", CraftAttributeInfo.Blank, CraftResource.Iron, typeof( IronIngot ), typeof( IronOre ) ) + }; + + private static CraftResourceInfo[] m_LeatherInfo = new CraftResourceInfo[] + { + new CraftResourceInfo( 0x000, 1049353, "Leather", CraftAttributeInfo.Blank, CraftResource.Leathered, typeof( Leather ), typeof( Hides ) ) + }; + + private static CraftResourceInfo[] m_WoodInfo = new CraftResourceInfo[] + { + new CraftResourceInfo( 0x000, 1011542, "Wood", CraftAttributeInfo.Blank, CraftResource.Wooden, typeof( WoodBoard ), typeof( WoodBoard ) ) + }; + + /// + /// Returns true if '' is None, Iron, Leathered or Wooden. False if otherwise. + /// + public static bool IsStandard( CraftResource resource ) + { + return ( resource == CraftResource.None || resource == CraftResource.Iron || resource == CraftResource.Leathered || resource == CraftResource.Wooden ); + } + + private static Hashtable m_TypeTable; + + /// + /// Registers that '' uses '' so that it can later be queried by + /// + public static void RegisterType( Type resourceType, CraftResource resource ) + { + if ( m_TypeTable == null ) + m_TypeTable = new Hashtable(); + + m_TypeTable[resourceType] = resource; + } + + /// + /// Returns the value for which '' uses -or- CraftResource.None if an unregistered type was specified. + /// + public static CraftResource GetFromType( Type resourceType ) + { + if ( m_TypeTable == null ) + return CraftResource.None; + + object obj = m_TypeTable[resourceType]; + + if ( !(obj is CraftResource) ) + return CraftResource.None; + + return (CraftResource)obj; + } + + /// + /// Returns a instance describing '' -or- null if an invalid resource was specified. + /// + public static CraftResourceInfo GetInfo( CraftResource resource ) + { + CraftResourceInfo[] list = null; + + switch ( GetType( resource ) ) + { + case CraftResourceType.Metal: list = m_MetalInfo; break; + case CraftResourceType.Leather: list = m_LeatherInfo; break; + case CraftResourceType.Wood: list = m_WoodInfo; break; + } + + if ( list != null ) + { + int index = GetIndex( resource ); + + if ( index >= 0 && index < list.Length ) + return list[index]; + } + + return null; + } + + /// + /// Returns a value indiciating the type of ''. + /// + public static CraftResourceType GetType( CraftResource resource ) + { + if ( resource == CraftResource.Iron ) + return CraftResourceType.Metal; + + if ( resource == CraftResource.Leathered ) + return CraftResourceType.Leather; + + if ( resource == CraftResource.Wooden ) + return CraftResourceType.Wood; + + return CraftResourceType.None; + } + + /// + /// Returns the first in the series of resources for which '' belongs. + /// + public static CraftResource GetStart( CraftResource resource ) + { + switch ( GetType( resource ) ) + { + case CraftResourceType.Metal: return CraftResource.Iron; + case CraftResourceType.Leather: return CraftResource.Leathered; + case CraftResourceType.Wood: return CraftResource.Wooden; + } + + return CraftResource.None; + } + + /// + /// Returns the index of '' in the seriest of resources for which it belongs. + /// + public static int GetIndex( CraftResource resource ) + { + CraftResource start = GetStart( resource ); + + if ( start == CraftResource.None ) + return 0; + + return (int)(resource - start); + } + + /// + /// Returns the property of '' -or- 0 if an invalid resource was specified. + /// + public static int GetLocalizationNumber( CraftResource resource ) + { + CraftResourceInfo info = GetInfo( resource ); + + return ( info == null ? 0 : info.Number ); + } + + /// + /// Returns the property of '' -or- 0 if an invalid resource was specified. + /// + public static int GetHue( CraftResource resource ) + { + CraftResourceInfo info = GetInfo( resource ); + + return ( info == null ? 0 : info.Hue ); + } + + /// + /// Returns the property of '' -or- an empty string if the resource specified was invalid. + /// + public static string GetName( CraftResource resource ) + { + CraftResourceInfo info = GetInfo( resource ); + + return ( info == null ? String.Empty : info.Name ); + } + + /// + /// Returns the value which represents '' -or- CraftResource.None if unable to convert. + /// + public static CraftResource GetFromOreInfo( OreInfo info ) + { + if ( info.Name.IndexOf( "Wood" ) >= 0 ) + return CraftResource.Wooden; + else if ( info.Name.IndexOf( "Leather" ) >= 0 ) + return CraftResource.Leathered; + else if ( info.Name.IndexOf( "Iron" ) >= 0 ) + return CraftResource.Iron; + + return CraftResource.None; + } + + /// + /// Returns the value which represents '', using '' to help resolve leather OreInfo instances. + /// + public static CraftResource GetFromOreInfo( OreInfo info, ArmorMaterialType material ) + { + if ( material == ArmorMaterialType.Studded || material == ArmorMaterialType.Leather ) + { + return CraftResource.Leathered; + } + + return GetFromOreInfo( info ); + } + } + + // NOTE: This class is only for compatability with very old RunUO versions. + // No changes to it should be required for custom resources. + public class OreInfo + { + public static readonly OreInfo Iron = new OreInfo( 0, 0x000, "Iron" ); + + private int m_Level; + private int m_Hue; + private string m_Name; + + public OreInfo( int level, int hue, string name ) + { + m_Level = level; + m_Hue = hue; + m_Name = name; + } + + public int Level + { + get + { + return m_Level; + } + } + + public int Hue + { + get + { + return m_Hue; + } + } + + public string Name + { + get + { + return m_Name; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/ServerList.cs b/Scripts/Misc/ServerList.cs new file mode 100644 index 0000000..901d0a3 --- /dev/null +++ b/Scripts/Misc/ServerList.cs @@ -0,0 +1,176 @@ +using System; +using System.IO; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using Server; +using Server.Network; + +namespace Server.Misc +{ + public class ServerList + { + /* + * The default setting for Address, a value of 'null', will use your local IP address. If all of your local IP addresses + * are private network addresses and AutoDetect is 'true' then RunUO will attempt to discover your public IP address + * for you automatically. + * + * If you do not plan on allowing clients outside of your LAN to connect, you can set AutoDetect to 'false' and leave + * Address set to 'null'. + * + * If your public IP address cannot be determined, you must change the value of Address to your public IP address + * manually to allow clients outside of your LAN to connect to your server. Address can be either an IP address or + * a hostname that will be resolved when RunUO starts. + * + * If you want players outside your LAN to be able to connect to your server and you are behind a router, you must also + * forward TCP port 2593 to your private IP address. The procedure for doing this varies by manufacturer but generally + * involves configuration of the router through your web browser. + * + * ServerList will direct connecting clients depending on both the address they are connecting from and the address and + * port they are connecting to. If it is determined that both ends of a connection are private IP addresses, ServerList + * will direct the client to the local private IP address. If a client is connecting to a local public IP address, they + * will be directed to whichever address and port they initially connected to. This allows multihomed servers to function + * properly and fully supports listening on multiple ports. If a client with a public IP address is connecting to a + * locally private address, the server will direct the client to either the AutoDetected IP address or the manually entered + * IP address or hostname, whichever is applicable. Loopback clients will be directed to loopback. + * + * If you would like to listen on additional ports (i.e. 22, 23, 80, for clients behind highly restrictive egress + * firewalls) or specific IP adddresses you can do so by modifying the file SocketOptions.cs found in this directory. + */ + + public static readonly string Address = null; + public static readonly string ServerName = Server.Misc.Settings.ServerName(); + + public static readonly bool AutoDetect = true; + + public static void Initialize() + { + if ( Address == null ) { + if ( AutoDetect ) + AutoDetection(); + } + else { + Resolve( Address, out m_PublicAddress ); + } + + EventSink.ServerList += new ServerListEventHandler( EventSink_ServerList ); + } + + private static IPAddress m_PublicAddress; + + private static void EventSink_ServerList( ServerListEventArgs e ) + { + try + { + NetState ns = e.State; + Socket s = ns.Socket; + + IPEndPoint ipep = (IPEndPoint)s.LocalEndPoint; + + IPAddress localAddress = ipep.Address; + int localPort = ipep.Port; + + if ( IsPrivateNetwork( localAddress ) ) { + ipep = (IPEndPoint)s.RemoteEndPoint; + if ( !IsPrivateNetwork( ipep.Address ) && m_PublicAddress != null ) + localAddress = m_PublicAddress; + } + + e.AddServer( ServerName, new IPEndPoint( localAddress, localPort ) ); + } + catch + { + e.Rejected = true; + } + } + + private static void AutoDetection() + { + if ( !HasPublicIPAddress() || Server.Misc.Settings.DetectPublicIP() ) { + Console.Write( "ServerList: Auto-detecting public IP address..." ); + m_PublicAddress = FindPublicAddress(); + + if ( m_PublicAddress != null ) + Console.WriteLine( "done ({0})", m_PublicAddress.ToString() ); + else + Console.WriteLine( "failed" ); + } + } + + private static void Resolve( string addr, out IPAddress outValue ) + { + if ( IPAddress.TryParse( addr, out outValue ) ) + return; + + try { + IPHostEntry iphe = Dns.GetHostEntry( addr ); + + if ( iphe.AddressList.Length > 0 ) + outValue = iphe.AddressList[iphe.AddressList.Length - 1]; + } + catch { + } + } + + private static bool HasPublicIPAddress() + { + NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); + + foreach ( NetworkInterface adapter in adapters ) { + IPInterfaceProperties properties = adapter.GetIPProperties(); + + foreach ( IPAddressInformation unicast in properties.UnicastAddresses ) { + IPAddress ip = unicast.Address; + + if ( !IPAddress.IsLoopback( ip ) && ip.AddressFamily != AddressFamily.InterNetworkV6 && !IsPrivateNetwork( ip ) ) + return true; + } + } + + return false; + } + + private static bool IsPrivateNetwork( IPAddress ip ) + { + if ( ip.AddressFamily == AddressFamily.InterNetworkV6 ) + return false; + + if ( Utility.IPMatch( "192.168.*", ip ) ) + return true; + else if ( Utility.IPMatch( "10.*", ip ) ) + return true; + else if ( Utility.IPMatch( "127.0.0.1", ip ) ) + return true; + else if ( Utility.IPMatch( "169.254.*", ip ) ) + return true; + else if ( Utility.IPMatch( "172.16-31.*", ip ) ) + return true; + else + return false; + } + + private static IPAddress FindPublicAddress() + { + try { + WebRequest req = HttpWebRequest.Create( Server.Misc.Settings.PublicIP() ); + req.Timeout = 15000; + + WebResponse res = req.GetResponse(); + + Stream s = res.GetResponseStream(); + + StreamReader sr = new StreamReader( s ); + + IPAddress ip = IPAddress.Parse( sr.ReadLine() ); + + sr.Close(); + s.Close(); + res.Close(); + + return ip; + } catch { + return null; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/ShardPoller.cs b/Scripts/Misc/ShardPoller.cs new file mode 100644 index 0000000..0b82e7c --- /dev/null +++ b/Scripts/Misc/ShardPoller.cs @@ -0,0 +1,643 @@ +using System; +using System.Net; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Prompts; + +namespace Server.Misc +{ + public class ShardPoller : Item + { + private string m_Title; + + private ShardPollOption[] m_Options; + private IPAddress[] m_Addresses; + + private TimeSpan m_Duration; + private DateTime m_StartTime; + + private bool m_Active; + + public ShardPollOption[] Options + { + get{ return m_Options; } + set{ m_Options = value; } + } + + public IPAddress[] Addresses + { + get{ return m_Addresses; } + set{ m_Addresses = value; } + } + + [CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )] + public string Title + { + get{ return m_Title; } + set{ m_Title = ShardPollPrompt.UrlToHref( value ); } + } + + [CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )] + public TimeSpan Duration + { + get{ return m_Duration; } + set{ m_Duration = value; } + } + + [CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )] + public DateTime StartTime + { + get{ return m_StartTime; } + set{ m_StartTime = value; } + } + + [CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )] + public TimeSpan TimeRemaining + { + get + { + if ( m_StartTime == DateTime.MinValue || !m_Active ) + return TimeSpan.Zero; + + try + { + TimeSpan ts = (m_StartTime + m_Duration) - DateTime.Now; + + if ( ts < TimeSpan.Zero ) + return TimeSpan.Zero; + + return ts; + } + catch + { + return TimeSpan.Zero; + } + } + } + + [CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )] + public bool Active + { + get{ return m_Active; } + set + { + if ( m_Active == value ) + return; + + m_Active = value; + + if ( m_Active ) + { + m_StartTime = DateTime.Now; + m_ActivePollers.Add( this ); + } + else + { + m_ActivePollers.Remove( this ); + } + } + } + + public bool HasAlreadyVoted( NetState ns ) + { + for ( int i = 0; i < m_Options.Length; ++i ) + { + if ( m_Options[i].HasAlreadyVoted( ns ) ) + return true; + } + + return false; + } + + public void AddVote( NetState ns, ShardPollOption option ) + { + option.AddVote( ns ); + } + + public void RemoveOption( ShardPollOption option ) + { + int index = Array.IndexOf( m_Options, option ); + + if ( index < 0 ) + return; + + ShardPollOption[] old = m_Options; + m_Options = new ShardPollOption[old.Length - 1]; + + for ( int i = 0; i < index; ++i ) + m_Options[i] = old[i]; + + for ( int i = index; i < m_Options.Length; ++i ) + m_Options[i] = old[i + 1]; + } + + public void AddOption( ShardPollOption option ) + { + ShardPollOption[] old = m_Options; + m_Options = new ShardPollOption[old.Length + 1]; + + for ( int i = 0; i < old.Length; ++i ) + m_Options[i] = old[i]; + + m_Options[old.Length] = option; + } + + public override string DefaultName + { + get { return "shard poller"; } + } + + [Constructable( AccessLevel.Administrator )] + public ShardPoller() : base( 0x1047 ) + { + m_Duration = TimeSpan.FromHours( 24.0 ); + m_Options = new ShardPollOption[0]; + m_Addresses = new IPAddress[0]; + + Movable = false; + } + + public static void Initialize() + { + EventSink.Login += new LoginEventHandler( EventSink_Login ); + } + + private static List m_ActivePollers = new List(); + + private static void EventSink_Login( LoginEventArgs e ) + { + if ( m_ActivePollers.Count == 0 ) + return; + + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( EventSink_Login_Callback ), e.Mobile ); + } + + private static void EventSink_Login_Callback( object state ) + { + Mobile from = (Mobile)state; + NetState ns = from.NetState; + + if ( ns == null ) + return; + + ShardPollGump spg = null; + + for ( int i = 0; i < m_ActivePollers.Count; ++i ) + { + ShardPoller poller = m_ActivePollers[i]; + + if ( poller.Deleted || !poller.Active ) + continue; + + if ( poller.TimeRemaining > TimeSpan.Zero ) + { + if ( poller.HasAlreadyVoted( ns ) ) + continue; + + if ( spg == null ) + { + spg = new ShardPollGump( from, poller, false, null ); + from.SendGump( spg ); + } + else + { + spg.QueuePoll( poller ); + } + } + else + { + poller.Active = false; + } + } + } + + public void SendQueuedPoll_Callback( object state ) + { + object[] states = (object[])state; + Mobile from = (Mobile)states[0]; + Queue queue = (Queue)states[1]; + + from.SendGump( new ShardPollGump( from, this, false, queue ) ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel >= AccessLevel.Administrator ) + from.SendGump( new ShardPollGump( from, this, true, null ) ); + } + + public ShardPoller( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Title ); + writer.Write( m_Duration ); + writer.Write( m_StartTime ); + writer.Write( m_Active ); + + writer.Write( m_Options.Length ); + + for ( int i = 0; i < m_Options.Length; ++i ) + m_Options[i].Serialize( writer ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Title = reader.ReadString(); + m_Duration = reader.ReadTimeSpan(); + m_StartTime = reader.ReadDateTime(); + m_Active = reader.ReadBool(); + + m_Options = new ShardPollOption[reader.ReadInt()]; + + for ( int i = 0; i < m_Options.Length; ++i ) + m_Options[i] = new ShardPollOption( reader ); + + if ( m_Active ) + m_ActivePollers.Add( this ); + + break; + } + } + } + + public override void OnDelete() + { + base.OnDelete(); + + Active = false; + } + } + + public class ShardPollOption + { + private string m_Title; + private int m_LineBreaks; + private IPAddress[] m_Voters; + + public string Title{ get{ return m_Title; } set{ m_Title = value; m_LineBreaks = GetBreaks( m_Title ); } } + public int LineBreaks{ get{ return m_LineBreaks; } } + + public int Votes{ get{ return m_Voters.Length; } } + public IPAddress[] Voters{ get{ return m_Voters; } set{ m_Voters = value; } } + + public ShardPollOption( string title ) + { + m_Title = title; + m_LineBreaks = GetBreaks( m_Title ); + m_Voters = new IPAddress[0]; + } + + public bool HasAlreadyVoted( NetState ns ) + { + if ( ns == null ) + return false; + + IPAddress ipAddress = ns.Address; + + for ( int i = 0; i < m_Voters.Length; ++i ) + { + if ( Utility.IPMatchClassC( m_Voters[i], ipAddress ) ) + return true; + } + + return false; + } + + public void AddVote( NetState ns ) + { + if ( ns == null ) + return; + + IPAddress[] old = m_Voters; + m_Voters = new IPAddress[old.Length + 1]; + + for ( int i = 0; i < old.Length; ++i ) + m_Voters[i] = old[i]; + + m_Voters[old.Length] = ns.Address; + } + + public int ComputeHeight() + { + int height = m_LineBreaks * 18; + + if ( height > 30 ) + return height; + + return 30; + } + + public int GetBreaks( string title ) + { + if ( title == null ) + return 1; + + int count = 0; + int index = -1; + + do + { + ++count; + index = title.IndexOf( "
", index + 1 ); + } while ( index >= 0 ); + + return count; + } + + public ShardPollOption( GenericReader reader ) + { + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Title = reader.ReadString(); + m_LineBreaks = GetBreaks( m_Title ); + + m_Voters = new IPAddress[reader.ReadInt()]; + + for ( int i = 0; i < m_Voters.Length; ++i ) + m_Voters[i] = Utility.Intern( reader.ReadIPAddress() ); + + break; + } + } + } + + public void Serialize( GenericWriter writer ) + { + writer.Write( (int) 0 ); // version + + writer.Write( m_Title ); + + writer.Write( m_Voters.Length ); + + for ( int i = 0; i < m_Voters.Length; ++i ) + writer.Write( m_Voters[i] ); + } + } + + public class ShardPollGump : Gump + { + private Mobile m_From; + private ShardPoller m_Poller; + private bool m_Editing; + private Queue m_Polls; + + public bool Editing{ get{ return m_Editing; } } + + public void QueuePoll( ShardPoller poller ) + { + if ( m_Polls == null ) + m_Polls = new Queue( 4 ); + + m_Polls.Enqueue( poller ); + } + + public string Center( string text ) + { + return String.Format( "
{0}
", text ); + } + + public string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + + private const int LabelColor32 = 0xFFFFFF; + + public ShardPollGump( Mobile from, ShardPoller poller, bool editing, Queue polls ) : base( 50, 50 ) + { + m_From = from; + m_Poller = poller; + m_Editing = editing; + m_Polls = polls; + + Closable = false; + + AddPage( 0 ); + + int totalVotes = 0; + int totalOptionHeight = 0; + + for ( int i = 0; i < poller.Options.Length; ++i ) + { + totalVotes += poller.Options[i].Votes; + totalOptionHeight += poller.Options[i].ComputeHeight() + 5; + } + + bool isViewingResults = editing && poller.Active; + bool isCompleted = totalVotes > 0 && !poller.Active; + + if ( editing && !isViewingResults ) + totalOptionHeight += 35; + + int height = 115 + totalOptionHeight; + + AddBackground( 1, 1, 398, height - 2, 3600 ); + AddAlphaRegion( 16, 15, 369, height - 31 ); + + AddItem( 308, 30, 0x1E5E ); + + string title; + + if ( editing ) + title = ( isCompleted ? "Poll Completed" : "Poll Editor" ); + else + title = "Shard Poll"; + + AddHtml( 22, 22, 294, 20, Color( Center( title ), LabelColor32 ), false, false ); + + if ( editing ) + { + AddHtml( 22, 22, 294, 20, Color( String.Format( "{0} total", totalVotes ), LabelColor32 ), false, false ); + AddButton( 287, 23, 0x2622, 0x2623, 2, GumpButtonType.Reply, 0 ); + } + + AddHtml( 22, 50, 294, 40, Color( poller.Title, 0x99CC66 ), false, false ); + + AddImageTiled( 32, 88, 264, 1, 9107 ); + AddImageTiled( 42, 90, 264, 1, 9157 ); + + int y = 100; + + for ( int i = 0; i < poller.Options.Length; ++i ) + { + ShardPollOption option = poller.Options[i]; + string text = option.Title; + + if ( editing && totalVotes > 0 ) + { + double perc = option.Votes / (double)totalVotes; + + text = String.Format( "[{1}: {2}%] {0}", text, option.Votes, (int)(perc*100) ); + } + + int optHeight = option.ComputeHeight(); + + y += optHeight/2; + + if ( isViewingResults ) + AddImage( 24, y - 15, 0x25FE ); + else + AddRadio( 24, y - 15, 0x25F9, 0x25FC, false, 1 + i ); + + AddHtml( 60, y - (9 * option.LineBreaks), 250, 18 * option.LineBreaks, Color( text, LabelColor32 ), false, false ); + + y += optHeight/2; + y += 5; + } + + if ( editing && !isViewingResults ) + { + AddRadio( 24, y + 15 - 15, 0x25F9, 0x25FC, false, 1 + poller.Options.Length ); + AddHtml( 60, y + 15 - 9, 250, 18, Color( "Create new option.", 0x99CC66 ), false, false ); + } + + AddButton( 314, height - 73, 247, 248, 1, GumpButtonType.Reply, 0 ); + AddButton( 314, height - 47, 242, 241, 0, GumpButtonType.Reply, 0 ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( m_Polls != null && m_Polls.Count > 0 ) + { + ShardPoller poller = m_Polls.Dequeue(); + + if ( poller != null ) + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( poller.SendQueuedPoll_Callback ), new object[]{ m_From, m_Polls } ); + } + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length == 0 ) + return; + + int switched = switches[0] - 1; + ShardPollOption opt = null; + + if ( switched >= 0 && switched < m_Poller.Options.Length ) + opt = m_Poller.Options[switched]; + + if ( opt == null && !m_Editing ) + return; + + if ( m_Editing ) + { + if ( !m_Poller.Active ) + { + m_From.SendMessage( "Enter a title for the option. Escape to cancel.{0}", opt == null ? "" : " Use \"DEL\" to delete." ); + m_From.Prompt = new ShardPollPrompt( m_Poller, opt ); + } + else + { + m_From.SendMessage( "You may not edit an active poll. Deactivate it first." ); + m_From.SendGump( new ShardPollGump( m_From, m_Poller, m_Editing, m_Polls ) ); + } + } + else + { + if ( !m_Poller.Active ) + m_From.SendMessage( "The poll has been deactivated." ); + else if ( m_Poller.HasAlreadyVoted( sender ) ) + m_From.SendMessage( "You have already voted on this poll." ); + else + m_Poller.AddVote( sender, opt ); + } + } + else if ( info.ButtonID == 2 && m_Editing ) + { + m_From.SendGump( new ShardPollGump( m_From, m_Poller, m_Editing, m_Polls ) ); + m_From.SendGump( new PropertiesGump( m_From, m_Poller ) ); + } + } + } + + public class ShardPollPrompt : Prompt + { + private ShardPoller m_Poller; + private ShardPollOption m_Option; + + public ShardPollPrompt( ShardPoller poller, ShardPollOption opt ) + { + m_Poller = poller; + m_Option = opt; + } + + public override void OnCancel( Mobile from ) + { + from.SendGump( new ShardPollGump( from, m_Poller, true, null ) ); + } + + private static Regex m_UrlRegex = new Regex( @"\[url(?:=(.*?))?\](.*?)\[/url\]", RegexOptions.IgnoreCase | RegexOptions.Compiled ); + + private static string UrlRegex_Match( Match m ) + { + if ( m.Groups[1].Success ) + { + if ( m.Groups[2].Success ) + return String.Format( "{1}", m.Groups[1].Value, m.Groups[2].Value ); + } + else if ( m.Groups[2].Success ) + { + return String.Format( "{0}", m.Groups[2].Value ); + } + + return m.Value; + } + + public static string UrlToHref( string text ) + { + if ( text == null ) + return null; + + return m_UrlRegex.Replace( text, new MatchEvaluator( UrlRegex_Match ) ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( m_Poller.Active ) + { + from.SendMessage( "You may not edit an active poll. Deactivate it first." ); + } + else if ( text == "DEL" ) + { + if ( m_Option != null ) + m_Poller.RemoveOption( m_Option ); + } + else + { + text = UrlToHref( text ); + + if ( m_Option == null ) + m_Poller.AddOption( new ShardPollOption( text ) ); + else + m_Option.Title = text; + } + + from.SendGump( new ShardPollGump( from, m_Poller, true, null ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/ShrinkTable.cs b/Scripts/Misc/ShrinkTable.cs new file mode 100644 index 0000000..7b6cf9b --- /dev/null +++ b/Scripts/Misc/ShrinkTable.cs @@ -0,0 +1,86 @@ +using System; +using System.IO; + +namespace Server +{ + public class ShrinkTable + { + public const int DefaultItemID = 0x1870; // Yellow virtue stone + + private static int[] m_Table; + + public static int Lookup( Mobile m ) + { + return Lookup( m.Body.BodyID, DefaultItemID ); + } + + public static int Lookup( int body ) + { + return Lookup( body, DefaultItemID ); + } + + public static int Lookup( Mobile m, int defaultValue ) + { + return Lookup( m.Body.BodyID, defaultValue ); + } + + public static int Lookup( int body, int defaultValue ) + { + if ( m_Table == null ) + Load(); + + int val = 0; + + if ( body >= 0 && body < m_Table.Length ) + val = m_Table[body]; + + if ( val == 0 ) + val = defaultValue; + + return val; + } + + private static void Load() + { + string path = Path.Combine( Core.BaseDirectory, "Data/Config/shrink.cfg" ); + + if ( !File.Exists( path ) ) + { + m_Table = new int[0]; + return; + } + + m_Table = new int[1000]; + + using ( StreamReader ip = new StreamReader( path ) ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + line = line.Trim(); + + if ( line.Length == 0 || line.StartsWith( "#" ) ) + continue; + + try + { + string[] split = line.Split( '\t' ); + + if ( split.Length >= 2 ) + { + int body = Utility.ToInt32( split[0] ); + int item = Utility.ToInt32( split[1] ); + + if ( body >= 0 && body < m_Table.Length ) + m_Table[body] = item; + } + } + catch + { + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/SocketOptions.cs b/Scripts/Misc/SocketOptions.cs new file mode 100644 index 0000000..63c221e --- /dev/null +++ b/Scripts/Misc/SocketOptions.cs @@ -0,0 +1,42 @@ +using System; +using System.IO; +using System.Net; +using System.Net.Sockets; +using Server; +using Server.Misc; +using Server.Network; + +namespace Server +{ + public class SocketOptions + { + private const bool NagleEnabled = false; // Should the Nagle algorithm be enabled? This may reduce performance + private const int CoalesceBufferSize = 512; // MSS that the core will use when buffering packets + + private static IPEndPoint[] m_ListenerEndPoints = new IPEndPoint[] { + new IPEndPoint( IPAddress.Any, 2593 ), // Default: Listen on port 2593 on all IP addresses + + // Examples: + // new IPEndPoint( IPAddress.Any, 80 ), // Listen on port 80 on all IP addresses + // new IPEndPoint( IPAddress.Parse( "1.2.3.4" ), 2593 ), // Listen on port 2593 on IP address 1.2.3.4 + }; + + public static void Initialize() + { + SendQueue.CoalesceBufferSize = CoalesceBufferSize; + + EventSink.SocketConnect += new SocketConnectEventHandler( EventSink_SocketConnect ); + + Listener.EndPoints = m_ListenerEndPoints; + } + + private static void EventSink_SocketConnect( SocketConnectEventArgs e ) + { + if ( !e.AllowConnection ) + return; + + if ( !NagleEnabled ) + e.Socket.SetSocketOption( SocketOptionLevel.Tcp, SocketOptionName.NoDelay, 1 ); // RunUO uses its own algorithm + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Tasks.cs b/Scripts/Misc/Tasks.cs new file mode 100644 index 0000000..be4bae1 --- /dev/null +++ b/Scripts/Misc/Tasks.cs @@ -0,0 +1,147 @@ +using Server.Accounting; +using Server.Commands.Generic; +using Server.Commands; +using Server.Items; +using Server.Misc; +using Server.Mobiles; +using Server.Network; +using Server.Regions; +using Server.Spells; +using Server.Targeting; +using Server; +using System.Collections.Generic; +using System.Collections; +using System.IO; +using System.Text; +using System; + +namespace Server.Items +{ + public class TaskManager : Item + { + [Constructable] + public TaskManager () : base( 0x0EDE ) + { + Movable = false; + Name = "Task Manager"; + Visible = false; + TaskTimer thisTimer = new TaskTimer( this ); + thisTimer.Start(); + } + + public TaskManager(Serial serial) : base(serial) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + FirstTimer thisTimer = new FirstTimer( this ); + thisTimer.Start(); + } + + public class TaskTimer : Timer + { + private Item i_item; + public TaskTimer( Item task ) : base( TimeSpan.FromMinutes( 60.0 ) ) + { + Priority = TimerPriority.OneMinute; + i_item = task; + } + + protected override void OnTick() + { + TaskTimer thisTimer = new TaskTimer( i_item ); + thisTimer.Start(); + RunThis( i_item ); + } + } + + public class FirstTimer : Timer + { + private Item i_item; + public FirstTimer( Item task ) : base( TimeSpan.FromSeconds( 10.0 ) ) + { + Priority = TimerPriority.OneSecond; + i_item = task; + } + + protected override void OnTick() + { + TaskTimer thisTimer = new TaskTimer( i_item ); + thisTimer.Start(); + RunThis( i_item ); + } + } + + public static void RunThis( Item item ) + { + TaskTimer thisTimer = new TaskTimer( item ); + thisTimer.Start(); + + // ************************************************************************************ + + ArrayList citizens = new ArrayList(); + foreach ( Mobile citizen in World.Mobiles.Values ) + if ( citizen is Citizen ) + { + if ( citizen != null ) + { + citizens.Add( citizen ); + } + } + for ( int i = 0; i < citizens.Count; ++i ) + { + Mobile person = ( Mobile )citizens[ i ]; + person.Delete(); + } + + // ************************************************************************************ + + ArrayList camps = new ArrayList(); + foreach ( Item camp in World.Items.Values ) + if ( camp is CampAAddon || camp is CampBAddon || camp is CampCAddon || camp is CampDAddon ) + { + if ( camp != null ) + { + camps.Add( camp ); + } + } + for ( int i = 0; i < camps.Count; ++i ) + { + Item fire = ( Item )camps[ i ]; + fire.Delete(); + } + + // ************************************************************************************ + + ArrayList traps = new ArrayList(); + foreach ( Item trap in World.Items.Values ) + { + if ( trap is BaseTrap ) + { + traps.Add( trap ); + } + } + + for ( int i = 0; i < traps.Count; ++i ) + { + BaseTrap trapped = ( BaseTrap )traps[ i ]; + + + + + } + + // ************************************************************************************ + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/TextDefinition.cs b/Scripts/Misc/TextDefinition.cs new file mode 100644 index 0000000..6a41ff5 --- /dev/null +++ b/Scripts/Misc/TextDefinition.cs @@ -0,0 +1,125 @@ +using System; + +namespace Server +{ + public class TextDefinition + { + private int m_Number; + private string m_String; + + public int Number{ get{ return m_Number; } } + public string String{ get{ return m_String; } } + + public TextDefinition( int number ) : this( number, null ) + { + } + + public TextDefinition( string text ) : this( 0, text ) + { + } + + public TextDefinition( int number, string text ) + { + m_Number = number; + m_String = text; + } + + public TextDefinition( GenericReader reader ) + { + int type = reader.ReadEncodedInt(); + + switch ( type ) + { + case 1: m_Number = reader.ReadEncodedInt(); m_String = null; break; + case 2: m_Number = 0; m_String = reader.ReadString(); break; + default: m_Number = 0; m_String = null; break; + } + } + + public override string ToString() + { + if ( m_Number > 0 ) + return "#" + m_Number.ToString(); + else if ( m_String != null ) + return m_String; + + return "(empty)"; + } + + public virtual void Serialize( GenericWriter writer ) + { + if ( m_Number > 0 ) + { + writer.WriteEncodedInt( 1 ); + writer.WriteEncodedInt( m_Number ); + } + else if ( m_String != null ) + { + writer.WriteEncodedInt( 2 ); + writer.Write( m_String ); + } + else + writer.WriteEncodedInt( 0 ); + } + + public static void AddTo( ObjectPropertyList list, TextDefinition def ) + { + if ( def != null && def.m_Number > 0 ) + list.Add( def.m_Number ); + else if ( def != null && def.m_String != null ) + list.Add( def.m_String ); + } + + public static implicit operator TextDefinition ( int v ) + { + return new TextDefinition( v ); + } + + public static implicit operator TextDefinition ( string s ) + { + return new TextDefinition( s ); + } + + public static implicit operator int ( TextDefinition m ) + { + if ( m == null ) + return 0; + + return m.m_Number; + } + + public static implicit operator string ( TextDefinition m ) + { + if ( m == null ) + return null; + + return m.m_String; + } + + public static void AddHtmlText( Server.Gumps.Gump g, int x, int y, int width, int height, TextDefinition text, bool back, bool scroll, int numberColor, int stringColor ) + { + if( text != null && text.Number > 0 ) + if( numberColor >= 0 ) + g.AddHtmlLocalized( x, y, width, height, text.Number, numberColor, back, scroll ); + else + g.AddHtmlLocalized( x, y, width, height, text.Number, back, scroll ); + else if( text != null && text.String != null ) + if( stringColor >= 0 ) + g.AddHtml( x, y, width, height, String.Format( "{1}", stringColor, text.String ), back, scroll ); + else + g.AddHtml( x, y, width, height, text.String, back, scroll ); + } + public static void AddHtmlText( Server.Gumps.Gump g, int x, int y, int width, int height, TextDefinition text, bool back, bool scroll ) + { + AddHtmlText( g, x, y, width, height, text, back, scroll, -1, -1 ); + } + + public static void SendMessageTo( Mobile m, TextDefinition def ) + { + if( def.Number > 0 ) + m.SendLocalizedMessage( def.Number ); + else if( def.String != null ) + m.SendMessage( def.String ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Titles.cs b/Scripts/Misc/Titles.cs new file mode 100644 index 0000000..c1259e8 --- /dev/null +++ b/Scripts/Misc/Titles.cs @@ -0,0 +1,343 @@ +using System; +using System.Text; +using Server; +using Server.Mobiles; + +namespace Server.Misc +{ + public class Titles + { + public const int MinFame = 0; + public const int MaxFame = 15000; + + public static void AwardFame( Mobile m, int offset, bool message ) + { + if ( offset > 0 ) + { + if ( m.Fame >= MaxFame ) + return; + + offset -= m.Fame / 100; + + if ( offset < 0 ) + offset = 0; + } + else if ( offset < 0 ) + { + if ( m.Fame <= MinFame ) + return; + + offset -= m.Fame / 100; + + if ( offset > 0 ) + offset = 0; + } + + if ( (m.Fame + offset) > MaxFame ) + offset = MaxFame - m.Fame; + else if ( (m.Fame + offset) < MinFame ) + offset = MinFame - m.Fame; + + m.Fame += offset; + + if ( message ) + { + if ( offset > 40 ) + m.SendLocalizedMessage( 1019054 ); // You have gained a lot of fame. + else if ( offset > 20 ) + m.SendLocalizedMessage( 1019053 ); // You have gained a good amount of fame. + else if ( offset > 10 ) + m.SendLocalizedMessage( 1019052 ); // You have gained some fame. + else if ( offset > 0 ) + m.SendLocalizedMessage( 1019051 ); // You have gained a little fame. + else if ( offset < -40 ) + m.SendLocalizedMessage( 1019058 ); // You have lost a lot of fame. + else if ( offset < -20 ) + m.SendLocalizedMessage( 1019057 ); // You have lost a good amount of fame. + else if ( offset < -10 ) + m.SendLocalizedMessage( 1019056 ); // You have lost some fame. + else if ( offset < 0 ) + m.SendLocalizedMessage( 1019055 ); // You have lost a little fame. + } + } + + public const int MinKarma = -15000; + public const int MaxKarma = 15000; + + public static void AwardKarma( Mobile m, int offset, bool message ) + { + if ( offset > 0 ) + { + if ( m is PlayerMobile && ((PlayerMobile)m).KarmaLocked ) + return; + + if ( m.Karma >= MaxKarma ) + return; + + offset -= m.Karma / 100; + + if ( offset < 0 ) + offset = 0; + } + else if ( offset < 0 ) + { + if ( m.Karma <= MinKarma ) + return; + + offset -= m.Karma / 100; + + if ( offset > 0 ) + offset = 0; + } + + if ( (m.Karma + offset) > MaxKarma ) + offset = MaxKarma - m.Karma; + else if ( (m.Karma + offset) < MinKarma ) + offset = MinKarma - m.Karma; + + bool wasPositiveKarma = ( m.Karma >= 0 ); + + m.Karma += offset; + + if ( message ) + { + if ( offset > 40 ) + m.SendLocalizedMessage( 1019062 ); // You have gained a lot of karma. + else if ( offset > 20 ) + m.SendLocalizedMessage( 1019061 ); // You have gained a good amount of karma. + else if ( offset > 10 ) + m.SendLocalizedMessage( 1019060 ); // You have gained some karma. + else if ( offset > 0 ) + m.SendLocalizedMessage( 1019059 ); // You have gained a little karma. + else if ( offset < -40 ) + m.SendLocalizedMessage( 1019066 ); // You have lost a lot of karma. + else if ( offset < -20 ) + m.SendLocalizedMessage( 1019065 ); // You have lost a good amount of karma. + else if ( offset < -10 ) + m.SendLocalizedMessage( 1019064 ); // You have lost some karma. + else if ( offset < 0 ) + m.SendLocalizedMessage( 1019063 ); // You have lost a little karma. + } + + if ( wasPositiveKarma && m.Karma < 0 && m is PlayerMobile && !((PlayerMobile)m).KarmaLocked ) + { + ((PlayerMobile)m).KarmaLocked = true; + m.SendLocalizedMessage( 1042511, "", 0x22 ); // Karma is locked. A mantra spoken at a shrine will unlock it again. + } + } + + public static string ComputeTitle( Mobile beholder, Mobile beheld ) + { + StringBuilder title = new StringBuilder(); + + int fame = beheld.Fame; + int karma = beheld.Karma; + + bool showSkillTitle = beheld.ShowFameTitle && ( (beholder == beheld) || (fame >= 5000) ); + + if ( beheld.Kills >= 5 ) + { + title.AppendFormat( beheld.Fame >= 10000 ? "The Murderer {1} {0}" : "The Murderer {0}", beheld.Name, beheld.Female ? "Lady" : "Lord" ); + } + else if ( beheld.ShowFameTitle || (beholder == beheld) ) + { + for ( int i = 0; i < m_FameEntries.Length; ++i ) + { + FameEntry fe = m_FameEntries[i]; + + if ( fame <= fe.m_Fame || i == (m_FameEntries.Length - 1) ) + { + KarmaEntry[] karmaEntries = fe.m_Karma; + + for ( int j = 0; j < karmaEntries.Length; ++j ) + { + KarmaEntry ke = karmaEntries[j]; + + if ( karma <= ke.m_Karma || j == (karmaEntries.Length - 1) ) + { + title.AppendFormat( ke.m_Title, beheld.Name, beheld.Female ? "Lady" : "Lord" ); + break; + } + } + + break; + } + } + } + else + { + title.Append( beheld.Name ); + } + + string customTitle = beheld.Title; + + if ( customTitle != null && (customTitle = customTitle.Trim()).Length > 0 ) + { + title.AppendFormat( " {0}", customTitle ); + } + else if ( showSkillTitle && beheld.Player ) + { + string skillTitle = GetSkillTitle( beheld ); + + if ( skillTitle != null ) { + title.Append( ", " ).Append( skillTitle ); + } + } + + return title.ToString(); + } + + public static string GetSkillTitle( Mobile mob ) { + Skill highest = GetHighestSkill( mob );// beheld.Skills.Highest; + + if ( highest != null && highest.BaseFixedPoint >= 300 ) + { + string skillLevel = GetSkillLevel( highest ); + string skillTitle = highest.Info.Title; + + if ( mob.Female && skillTitle.EndsWith( "man" ) ) + skillTitle = skillTitle.Substring( 0, skillTitle.Length - 3 ) + "woman"; + + return String.Concat( skillLevel, " ", skillTitle ); + } + + return null; + } + + private static Skill GetHighestSkill( Mobile m ) + { + Skills skills = m.Skills; + + return skills.Highest; + } + + private static string[,] m_Levels = new string[,] + { + { "Neophyte", "Neophyte", "Neophyte" }, + { "Novice", "Novice", "Novice" }, + { "Apprentice", "Apprentice", "Apprentice" }, + { "Journeyman", "Journeyman", "Journeyman" }, + { "Expert", "Expert", "Expert" }, + { "Adept", "Adept", "Adept" }, + { "Master", "Master", "Master" }, + { "Grandmaster", "Grandmaster", "Grandmaster" }, + { "Elder", "Tatsujin", "Shinobi" }, + { "Legendary", "Kengo", "Ka-ge" } + }; + + private static string GetSkillLevel( Skill skill ) + { + return m_Levels[GetTableIndex( skill ), GetTableType( skill )]; + } + + private static int GetTableType( Skill skill ) + { + return 0; + } + + private static int GetTableIndex( Skill skill ) + { + int fp = Math.Min( skill.BaseFixedPoint, 1200 ); + + return (fp - 300) / 100; + } + + private static FameEntry[] m_FameEntries = new FameEntry[] + { + new FameEntry( 1249, new KarmaEntry[] + { + new KarmaEntry( -10000, "The Outcast {0}" ), + new KarmaEntry( -5000, "The Despicable {0}" ), + new KarmaEntry( -2500, "The Scoundrel {0}" ), + new KarmaEntry( -1250, "The Unsavory {0}" ), + new KarmaEntry( -625, "The Rude {0}" ), + new KarmaEntry( 624, "{0}" ), + new KarmaEntry( 1249, "The Fair {0}" ), + new KarmaEntry( 2499, "The Kind {0}" ), + new KarmaEntry( 4999, "The Good {0}" ), + new KarmaEntry( 9999, "The Honest {0}" ), + new KarmaEntry( 10000, "The Trustworthy {0}" ) + } ), + new FameEntry( 2499, new KarmaEntry[] + { + new KarmaEntry( -10000, "The Wretched {0}" ), + new KarmaEntry( -5000, "The Dastardly {0}" ), + new KarmaEntry( -2500, "The Malicious {0}" ), + new KarmaEntry( -1250, "The Dishonorable {0}" ), + new KarmaEntry( -625, "The Disreputable {0}" ), + new KarmaEntry( 624, "The Notable {0}" ), + new KarmaEntry( 1249, "The Upstanding {0}" ), + new KarmaEntry( 2499, "The Respectable {0}" ), + new KarmaEntry( 4999, "The Honorable {0}" ), + new KarmaEntry( 9999, "The Commendable {0}" ), + new KarmaEntry( 10000, "The Estimable {0}" ) + } ), + new FameEntry( 4999, new KarmaEntry[] + { + new KarmaEntry( -10000, "The Nefarious {0}" ), + new KarmaEntry( -5000, "The Wicked {0}" ), + new KarmaEntry( -2500, "The Vile {0}" ), + new KarmaEntry( -1250, "The Ignoble {0}" ), + new KarmaEntry( -625, "The Notorious {0}" ), + new KarmaEntry( 624, "The Prominent {0}" ), + new KarmaEntry( 1249, "The Reputable {0}" ), + new KarmaEntry( 2499, "The Proper {0}" ), + new KarmaEntry( 4999, "The Admirable {0}" ), + new KarmaEntry( 9999, "The Famed {0}" ), + new KarmaEntry( 10000, "The Great {0}" ) + } ), + new FameEntry( 9999, new KarmaEntry[] + { + new KarmaEntry( -10000, "The Dread {0}" ), + new KarmaEntry( -5000, "The Evil {0}" ), + new KarmaEntry( -2500, "The Villainous {0}" ), + new KarmaEntry( -1250, "The Sinister {0}" ), + new KarmaEntry( -625, "The Infamous {0}" ), + new KarmaEntry( 624, "The Renowned {0}" ), + new KarmaEntry( 1249, "The Distinguished {0}" ), + new KarmaEntry( 2499, "The Eminent {0}" ), + new KarmaEntry( 4999, "The Noble {0}" ), + new KarmaEntry( 9999, "The Illustrious {0}" ), + new KarmaEntry( 10000, "The Glorious {0}" ) + } ), + new FameEntry( 10000, new KarmaEntry[] + { + new KarmaEntry( -10000, "The Dread {1} {0}" ), + new KarmaEntry( -5000, "The Evil {1} {0}" ), + new KarmaEntry( -2500, "The Dark {1} {0}" ), + new KarmaEntry( -1250, "The Sinister {1} {0}" ), + new KarmaEntry( -625, "The Dishonored {1} {0}" ), + new KarmaEntry( 624, "{1} {0}" ), + new KarmaEntry( 1249, "The Distinguished {1} {0}" ), + new KarmaEntry( 2499, "The Eminent {1} {0}" ), + new KarmaEntry( 4999, "The Noble {1} {0}" ), + new KarmaEntry( 9999, "The Illustrious {1} {0}" ), + new KarmaEntry( 10000, "The Glorious {1} {0}" ) + } ) + }; + } + + public class FameEntry + { + public int m_Fame; + public KarmaEntry[] m_Karma; + + public FameEntry( int fame, KarmaEntry[] karma ) + { + m_Fame = fame; + m_Karma = karma; + } + } + + public class KarmaEntry + { + public int m_Karma; + public string m_Title; + + public KarmaEntry( int karma, string title ) + { + m_Karma = karma; + m_Title = title; + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/TreasureMapProtection.cs b/Scripts/Misc/TreasureMapProtection.cs new file mode 100644 index 0000000..e46fe25 --- /dev/null +++ b/Scripts/Misc/TreasureMapProtection.cs @@ -0,0 +1,77 @@ +using System; +using System.IO; +using System.Collections; +using Server; +using Server.Regions; + +namespace Server +{ + public class TreasureRegion : BaseRegion + { + private const int Range = 5; // No house may be placed within 5 tiles of the treasure + + public TreasureRegion( int x, int y, Map map ): base( null, map, Region.DefaultPriority, new Rectangle2D( x - Range, y - Range, 1 + (Range * 2), 1 + (Range * 2) ) ) + { + GoLocation = new Point3D( x, y, map.GetAverageZ( x, y ) ); + + Register(); + } + + public static void Initialize() + { + string filePath = Path.Combine( Core.BaseDirectory, "Data/Config/treasure.cfg" ); + int i = 0, x = 0, y = 0; + + if ( File.Exists( filePath ) ) + { + using ( StreamReader ip = new StreamReader( filePath ) ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + i++; + + try + { + string[] split = line.Split( ' ' ); + + x = Convert.ToInt32( split[0] ); + y = Convert.ToInt32( split[1] ); + + try + { + new TreasureRegion( x, y, Map.Britannia ); + } + catch ( Exception e ) + { + Console.WriteLine( "{0} {1} {2} {3}", i, x, y, e ); + } + } + catch + { + Console.WriteLine( "Warning: Error in Line '{0}' of Data/Config/treasure.cfg", line ); + } + } + } + } + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override void OnEnter( Mobile m ) + { + if ( m.AccessLevel > AccessLevel.Player ) + m.SendMessage( "You have entered a protected treasure map area." ); + } + + public override void OnExit( Mobile m ) + { + if ( m.AccessLevel > AccessLevel.Player ) + m.SendMessage( "You have left a protected treasure map area." ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Ultima.cs b/Scripts/Misc/Ultima.cs new file mode 100644 index 0000000..089e418 --- /dev/null +++ b/Scripts/Misc/Ultima.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Misc; +using Server.Mobiles; +using Server.Network; +using Server.Spells; + +namespace Server +{ + public class CurrentExpansion + { + private static readonly Expansion Expansion = Expansion.AOS; + + public static void Configure() + { + Core.Expansion = Expansion; + + bool Enabled = Core.AOS; + + ObjectPropertyList.Enabled = Enabled; + Mobile.VisibleDamageType = Enabled ? VisibleDamageType.Related : VisibleDamageType.None; + Mobile.GuildClickMessage = !Enabled; + Mobile.AsciiClickMessage = !Enabled; + + if ( Enabled ) + { + if ( ObjectPropertyList.Enabled ) + PacketHandlers.SingleClickProps = true; // single click for everything is overriden to check object property list + } + } + } + + public class Ultima + { + public static int Damage( Mobile m, int damage ) + { + return Damage( m, null, damage ); + } + + public static int Damage( Mobile m, Mobile from, int damage ) + { + if( m == null || m.Deleted || !m.Alive || damage <= 0 ) + return 0; + + m.Damage( damage, from ); + return damage; + } + + public static int Scale( int input, int percent ) + { + return (input * percent) / 100; + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/Weather.cs b/Scripts/Misc/Weather.cs new file mode 100644 index 0000000..aaa5bca --- /dev/null +++ b/Scripts/Misc/Weather.cs @@ -0,0 +1,387 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Network; + +namespace Server.Misc +{ + public class Weather + { + private static Map[] m_Facets; + private static Dictionary> m_WeatherByFacet = new Dictionary>(); + + public static void Initialize() + { + m_Facets = new Map[]{ Map.Britannia }; + + /* Static weather: + * + * Format: + * AddWeather( temperature, chanceOfPercipitation, chanceOfExtremeTemperature, ); + */ + + // artic areas + AddWeather( -15, 100, 5, new Rectangle2D( 2564, 334, 543, 358 ), new Rectangle2D( 5049, 2747, 1750, 975 ) ); + + /* Dynamic weather: + * + * Format: + * AddDynamicWeather( temperature, chanceOfPercipitation, chanceOfExtremeTemperature, moveSpeed, width, height, bounds ); + */ + + for ( int i = 0; i < 15; ++i ) + AddDynamicWeather( +15, 100, 5, 8, 400, 400, new Rectangle2D( 0, 0, 7168, 4096 ) ); + } + + public static List GetWeatherList( Map facet ) + { + if ( facet == null ) + return null; + + List list = null; + m_WeatherByFacet.TryGetValue( facet, out list ); + + if ( list == null ) + m_WeatherByFacet[facet] = list = new List(); + + return list; + } + + public static void AddDynamicWeather( int temperature, int chanceOfPercipitation, int chanceOfExtremeTemperature, int moveSpeed, int width, int height, Rectangle2D bounds ) + { + for ( int i = 0; i < m_Facets.Length; ++i ) + { + Rectangle2D area = new Rectangle2D(); + bool isValid = false; + + for ( int j = 0; j < 10; ++j ) + { + area = new Rectangle2D( bounds.X + Utility.Random( bounds.Width - width ), bounds.Y + Utility.Random( bounds.Height - height ), width, height ); + + if ( !CheckWeatherConflict( m_Facets[i], null, area ) ) + isValid = true; + + if ( isValid ) + break; + } + + if ( !isValid ) + continue; + + Weather w = new Weather( m_Facets[i], new Rectangle2D[]{ area }, temperature, chanceOfPercipitation, chanceOfExtremeTemperature, TimeSpan.FromSeconds( 30.0 ) ); + + w.m_Bounds = bounds; + w.m_MoveSpeed = moveSpeed; + } + } + + public static void AddWeather( int temperature, int chanceOfPercipitation, int chanceOfExtremeTemperature, params Rectangle2D[] area ) + { + for ( int i = 0; i < m_Facets.Length; ++i ) + new Weather( m_Facets[i], area, temperature, chanceOfPercipitation, chanceOfExtremeTemperature, TimeSpan.FromSeconds( 30.0 ) ); + } + + public static bool CheckWeatherConflict( Map facet, Weather exclude, Rectangle2D area ) + { + List list = GetWeatherList( facet ); + + if ( list == null ) + return false; + + for ( int i = 0; i < list.Count; ++i ) + { + Weather w = list[i]; + + if ( w != exclude && w.IntersectsWith( area ) ) + return true; + } + + return false; + } + + private Map m_Facet; + private Rectangle2D[] m_Area; + private int m_Temperature; + private int m_ChanceOfPercipitation; + private int m_ChanceOfExtremeTemperature; + + public Map Facet{ get{ return m_Facet; } } + public Rectangle2D[] Area{ get{ return m_Area; } set{ m_Area = value; } } + public int Temperature{ get{ return m_Temperature; } set{ m_Temperature = value; } } + public int ChanceOfPercipitation{ get{ return m_ChanceOfPercipitation; } set{ m_ChanceOfPercipitation = value; } } + public int ChanceOfExtremeTemperature{ get{ return m_ChanceOfExtremeTemperature; } set{ m_ChanceOfExtremeTemperature = value; } } + + // For dynamic weather: + private Rectangle2D m_Bounds; + private int m_MoveSpeed; + private int m_MoveAngleX, m_MoveAngleY; + + public Rectangle2D Bounds{ get{ return m_Bounds; } set{ m_Bounds = value; } } + public int MoveSpeed{ get{ return m_MoveSpeed; } set{ m_MoveSpeed = value; } } + public int MoveAngleX{ get{ return m_MoveAngleX; } set{ m_MoveAngleX = value; } } + public int MoveAngleY{ get{ return m_MoveAngleY; } set{ m_MoveAngleY = value; } } + + public static bool CheckIntersection( Rectangle2D r1, Rectangle2D r2 ) + { + if ( r1.X >= (r2.X + r2.Width) ) + return false; + + if ( r2.X >= (r1.X + r1.Width) ) + return false; + + if ( r1.Y >= (r2.Y + r2.Height) ) + return false; + + if ( r2.Y >= (r1.Y + r1.Height) ) + return false; + + return true; + } + + public static bool CheckContains( Rectangle2D big, Rectangle2D small ) + { + if ( small.X < big.X ) + return false; + + if ( small.Y < big.Y ) + return false; + + if ( (small.X + small.Width) > (big.X + big.Width) ) + return false; + + if ( (small.Y + small.Height) > (big.Y + big.Height) ) + return false; + + return true; + } + + public virtual bool IntersectsWith( Rectangle2D area ) + { + for ( int i = 0; i < m_Area.Length; ++i ) + { + if ( CheckIntersection( area, m_Area[i] ) ) + return true; + } + + return false; + } + + public Weather( Map facet, Rectangle2D[] area, int temperature, int chanceOfPercipitation, int chanceOfExtremeTemperature, TimeSpan interval ) + { + m_Facet = facet; + m_Area = area; + m_Temperature = temperature; + m_ChanceOfPercipitation = chanceOfPercipitation; + m_ChanceOfExtremeTemperature = chanceOfExtremeTemperature; + + List list = GetWeatherList( facet ); + + if ( list != null ) + list.Add( this ); + + Timer.DelayCall( TimeSpan.FromSeconds( (0.2+(Utility.RandomDouble()*0.8)) * interval.TotalSeconds ), interval, new TimerCallback( OnTick ) ); + } + + public virtual void Reposition() + { + if ( m_Area.Length == 0 ) + return; + + int width = m_Area[0].Width; + int height = m_Area[0].Height; + + Rectangle2D area = new Rectangle2D(); + bool isValid = false; + + for ( int j = 0; j < 10; ++j ) + { + area = new Rectangle2D( m_Bounds.X + Utility.Random( m_Bounds.Width - width ), m_Bounds.Y + Utility.Random( m_Bounds.Height - height ), width, height ); + + if ( !CheckWeatherConflict( m_Facet, this, area ) ) + isValid = true; + + if ( isValid ) + break; + } + + if ( !isValid ) + return; + + m_Area[0] = area; + } + + public virtual void RecalculateMovementAngle() + { + double angle = Utility.RandomDouble() * Math.PI * 2.0; + + double cos = Math.Cos( angle ); + double sin = Math.Sin( angle ); + + m_MoveAngleX = (int)(100 * cos); + m_MoveAngleY = (int)(100 * sin); + } + + public virtual void MoveForward() + { + if ( m_Area.Length == 0 ) + return; + + for ( int i = 0; i < 5; ++i ) // try 5 times to find a valid spot + { + int xOffset = (m_MoveSpeed * m_MoveAngleX) / 100; + int yOffset = (m_MoveSpeed * m_MoveAngleY) / 100; + + Rectangle2D oldArea = m_Area[0]; + Rectangle2D newArea = new Rectangle2D( oldArea.X + xOffset, oldArea.Y + yOffset, oldArea.Width, oldArea.Height ); + + if ( !CheckWeatherConflict( m_Facet, this, newArea ) && CheckContains( m_Bounds, newArea ) ) + { + m_Area[0] = newArea; + break; + } + + RecalculateMovementAngle(); + } + } + + private int m_Stage; + private bool m_Active; + private bool m_ExtremeTemperature; + + public virtual void OnTick() + { + if ( m_Stage == 0 ) + { + m_Active = ( m_ChanceOfPercipitation > Utility.Random( 100 ) ); + m_ExtremeTemperature = ( m_ChanceOfExtremeTemperature > Utility.Random( 100 ) ); + + if ( m_MoveSpeed > 0 ) + { + Reposition(); + RecalculateMovementAngle(); + } + } + + if ( m_Active ) + { + if ( m_Stage > 0 && m_MoveSpeed > 0 ) + MoveForward(); + + int type, density, temperature; + + temperature = m_Temperature; + + if ( m_ExtremeTemperature ) + temperature *= -1; + + if ( m_Stage < 15 ) + { + density = m_Stage * 5; + } + else + { + density = 150 - (m_Stage * 5); + + if ( density < 10 ) + density = 10; + else if ( density > 70 ) + density = 70; + } + + if ( density == 0 ) + type = 0xFE; + else if ( temperature > 0 ) + type = 0; + else + type = 2; + + List states = NetState.Instances; + + Packet weatherPacket = null; + + for ( int i = 0; i < states.Count; ++i ) + { + NetState ns = states[i]; + Mobile mob = ns.Mobile; + + if ( mob == null || mob.Map != m_Facet ) + continue; + + bool contains = ( m_Area.Length == 0 ); + + for ( int j = 0; !contains && j < m_Area.Length; ++j ) + contains = m_Area[j].Contains( mob.Location ); + + if ( !contains ) + continue; + + if ( weatherPacket == null ) + weatherPacket = Packet.Acquire( new Server.Network.Weather( type, density, temperature ) ); + + ns.Send( weatherPacket ); + } + + Packet.Release( weatherPacket ); + } + + m_Stage++; + m_Stage %= 30; + } + } + + public class WeatherMap : MapItem + { + public override string DefaultName + { + get { return "weather map"; } + } + + [Constructable] + public WeatherMap() + { + SetDisplay( 0, 0, 5119, 4095, 400, 400 ); + } + + public override void OnDoubleClick( Mobile from ) + { + Map facet = from.Map; + + if ( facet == null ) + return; + + List list = Weather.GetWeatherList( facet ); + + ClearPins(); + + for ( int i = 0; i < list.Count; ++i ) + { + Weather w = list[i]; + + for ( int j = 0; j < w.Area.Length; ++j ) + AddWorldPin( w.Area[j].X + (w.Area[j].Width/2), w.Area[j].Y + (w.Area[j].Height/2) ); + } + + base.OnDoubleClick( from ); + } + + public WeatherMap( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/WebStatus.cs b/Scripts/Misc/WebStatus.cs new file mode 100644 index 0000000..4401d67 --- /dev/null +++ b/Scripts/Misc/WebStatus.cs @@ -0,0 +1,119 @@ +using System; +using System.IO; +using System.Text; +using Server; +using Server.Network; +using Server.Guilds; + +namespace Server.Misc +{ + public class StatusPage : Timer + { + public static bool Enabled = false; + + public static void Initialize() + { + if ( Enabled ) + new StatusPage().Start(); + } + + public StatusPage() : base( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromSeconds( 60.0 ) ) + { + Priority = TimerPriority.FiveSeconds; + } + + private static string Encode( string input ) + { + StringBuilder sb = new StringBuilder( input ); + + sb.Replace( "&", "&" ); + sb.Replace( "<", "<" ); + sb.Replace( ">", ">" ); + sb.Replace( "\"", """ ); + sb.Replace( "'", "'" ); + + return sb.ToString(); + } + + protected override void OnTick() + { + if ( !Directory.Exists( "web" ) ) + Directory.CreateDirectory( "web" ); + + using ( StreamWriter op = new StreamWriter( "web/status.html" ) ) + { + op.WriteLine( "" ); + op.WriteLine( " " ); + op.WriteLine( " RunUO Server Status"); + op.WriteLine( " " ); + op.WriteLine( " " ); + op.WriteLine( "

RunUO Server Status

" ); + op.WriteLine( " Online clients:
" ); + op.WriteLine( " " ); + op.WriteLine( " " ); + op.WriteLine( " " ); + op.WriteLine( " " ); + + foreach ( NetState state in NetState.Instances ) + { + Mobile m = state.Mobile; + + if ( m != null ) + { + Guild g = m.Guild as Guild; + + op.Write( " " ); + } + } + + op.WriteLine( " " ); + op.WriteLine( "
NameLocationKillsKarma / Fame
" ); + + if ( g != null ) + { + op.Write( Encode( m.Name ) ); + op.Write( " [" ); + + string title = m.GuildTitle; + + if ( title != null ) + title = title.Trim(); + else + title = ""; + + if ( title.Length > 0 ) + { + op.Write( Encode( title ) ); + op.Write( ", " ); + } + + op.Write( Encode( g.Abbreviation ) ); + + op.Write( ']' ); + } + else + { + op.Write( Encode( m.Name ) ); + } + + op.Write( "" ); + op.Write( m.X ); + op.Write( ", " ); + op.Write( m.Y ); + op.Write( ", " ); + op.Write( m.Z ); + op.Write( " (" ); + op.Write( m.Map ); + op.Write( ")" ); + op.Write( m.Kills ); + op.Write( "" ); + op.Write( m.Karma ); + op.Write( " / " ); + op.Write( m.Fame ); + op.WriteLine( "
" ); + op.WriteLine( " " ); + op.WriteLine( "" ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/WeightOverloading.cs b/Scripts/Misc/WeightOverloading.cs new file mode 100644 index 0000000..895aa62 --- /dev/null +++ b/Scripts/Misc/WeightOverloading.cs @@ -0,0 +1,126 @@ +using System; +using Server; +using Server.Mobiles; + +namespace Server.Misc +{ + public enum DFAlgorithm + { + Standard, + PainSpike + } + + public class WeightOverloading + { + public static void Initialize() + { + EventSink.Movement += new MovementEventHandler( EventSink_Movement ); + } + + private static DFAlgorithm m_DFA; + + public static DFAlgorithm DFA + { + get{ return m_DFA; } + set{ m_DFA = value; } + } + + public static void FatigueOnDamage( Mobile m, int damage ) + { + double fatigue = 0.0; + + switch ( m_DFA ) + { + case DFAlgorithm.Standard: + { + fatigue = (damage * (100.0 / m.Hits) * ((double)m.Stam / 100)) - 5.0; + break; + } + case DFAlgorithm.PainSpike: + { + fatigue = (damage * ((100.0 / m.Hits) + ((50.0 + m.Stam) / 100) - 1.0)) - 5.0; + break; + } + } + + if ( fatigue > 0 ) + m.Stam -= (int)fatigue; + } + + public const int OverloadAllowance = 4; // We can be four stones overweight without getting fatigued + + public static int GetMaxWeight( Mobile m ) + { + return m.MaxWeight; + } + + public static void EventSink_Movement( MovementEventArgs e ) + { + Mobile from = e.Mobile; + + if ( !from.Alive || from.AccessLevel > AccessLevel.Player ) + return; + + if ( !from.Player ) + { + // Else it won't work on monsters. + return; + } + + int maxWeight = GetMaxWeight( from ) + OverloadAllowance; + int overWeight = (Mobile.BodyWeight + from.TotalWeight) - maxWeight; + + if ( overWeight > 0 ) + { + from.Stam -= GetStamLoss( from, overWeight, (e.Direction & Direction.Running) != 0 ); + + if ( from.Stam == 0 ) + { + from.SendLocalizedMessage( 500109 ); // You are too fatigued to move, because you are carrying too much weight! + e.Blocked = true; + return; + } + } + + if ( ((from.Stam * 100) / Math.Max( from.StamMax, 1 )) < 10 ) + --from.Stam; + + if ( from.Stam == 0 ) + { + from.SendLocalizedMessage( 500110 ); // You are too fatigued to move. + e.Blocked = true; + return; + } + + if ( from is PlayerMobile ) + { + int amt = ( from.Mounted ? 48 : 16 ); + PlayerMobile pm = (PlayerMobile)from; + + if ( (++pm.StepsTaken % amt) == 0 ) + --from.Stam; + } + } + + public static int GetStamLoss( Mobile from, int overWeight, bool running ) + { + int loss = 5 + (overWeight / 25); + + if ( from.Mounted ) + loss /= 3; + + if ( running ) + loss *= 2; + + return loss; + } + + public static bool IsOverloaded( Mobile m ) + { + if ( !m.Player || !m.Alive || m.AccessLevel > AccessLevel.Player ) + return false; + + return ( (Mobile.BodyWeight + m.TotalWeight) > (GetMaxWeight( m ) + OverloadAllowance) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/WelcomeTimer.cs b/Scripts/Misc/WelcomeTimer.cs new file mode 100644 index 0000000..84d1f4a --- /dev/null +++ b/Scripts/Misc/WelcomeTimer.cs @@ -0,0 +1,38 @@ +using System; +using Server.Network; + +namespace Server.Misc +{ + /// + /// This timer spouts some welcome messages to a user at a set interval. It is used on character creation and login. + /// + public class WelcomeTimer : Timer + { + private Mobile m_Mobile; + private int m_State, m_Count; + + private static string[] m_Messages = new string[] + { + "Welcome to Britannia!" + }; + + public WelcomeTimer( Mobile m ) : this( m, m_Messages.Length ) + { + } + + public WelcomeTimer( Mobile m, int count ) : base( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromSeconds( 10.0 ) ) + { + m_Mobile = m; + m_Count = count; + } + + protected override void OnTick() + { + if ( m_State < m_Count ) + m_Mobile.SendMessage( 0x35, m_Messages[m_State++] ); + + if ( m_State == m_Count ) + Stop(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Ape.cs b/Scripts/Mobiles/Animals/Ape.cs new file mode 100644 index 0000000..c765e42 --- /dev/null +++ b/Scripts/Mobiles/Animals/Ape.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "an ape corpse" )] + public class Ape : BaseCreature + { + [Constructable] + public Ape() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "an ape"; + Body = 319; + BaseSoundID = 0x9E; + + SetStr( 73, 115 ); + SetDex( 46, 65 ); + SetInt( 36, 60 ); + + SetHits( 58, 71 ); + SetMana( 0 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 53.3, 68.0 ); + SetSkill( SkillName.HandToHand, 53.3, 68.0 ); + + Fame = 500; + Karma = 0; + + VirtualArmor = 23; + } + + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 8; } } + + public Ape(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Bears/BlackBear.cs b/Scripts/Mobiles/Animals/Bears/BlackBear.cs new file mode 100644 index 0000000..8e909fb --- /dev/null +++ b/Scripts/Mobiles/Animals/Bears/BlackBear.cs @@ -0,0 +1,58 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bear corpse" )] + [TypeAlias( "Server.Mobiles.Bear" )] + public class BlackBear : BaseCreature + { + [Constructable] + public BlackBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a black bear"; + Body = 211; + Hue = 0x8FD; + BaseSoundID = 0xA3; + + SetStr( 76, 100 ); + SetDex( 56, 75 ); + SetInt( 11, 14 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.MagicResist, 20.1, 40.0 ); + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public BlackBear( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Bears/BrownBear.cs b/Scripts/Mobiles/Animals/Bears/BrownBear.cs new file mode 100644 index 0000000..ec104c1 --- /dev/null +++ b/Scripts/Mobiles/Animals/Bears/BrownBear.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bear corpse" )] + public class BrownBear : BaseCreature + { + [Constructable] + public BrownBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a brown bear"; + Body = 211; + BaseSoundID = 0xA3; + + SetStr( 76, 100 ); + SetDex( 26, 45 ); + SetInt( 23, 47 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 6, 12 ); + + SetSkill( SkillName.MagicResist, 25.1, 35.0 ); + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public BrownBear( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Bears/CaveBear.cs b/Scripts/Mobiles/Animals/Bears/CaveBear.cs new file mode 100644 index 0000000..a4f5992 --- /dev/null +++ b/Scripts/Mobiles/Animals/Bears/CaveBear.cs @@ -0,0 +1,54 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bear corpse" )] + public class CaveBear : BaseCreature + { + [Constructable] + public CaveBear() : base( AIType.AI_Animal, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a cave bear"; + Body = 266; + BaseSoundID = 0xA3; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 96, 133 ); + SetMana( 0 ); + + SetDamage( 10, 15 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 80.1, 110.0 ); + SetSkill( SkillName.HandToHand, 65.1, 90.0 ); + + Fame = 1500; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 18; } } + + public CaveBear( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Bears/GrizzlyBear.cs b/Scripts/Mobiles/Animals/Bears/GrizzlyBear.cs new file mode 100644 index 0000000..6f86c12 --- /dev/null +++ b/Scripts/Mobiles/Animals/Bears/GrizzlyBear.cs @@ -0,0 +1,57 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bear corpse" )] + [TypeAlias( "Server.Mobiles.Grizzlybear" )] + public class GrizzlyBear : BaseCreature + { + [Constructable] + public GrizzlyBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a grizzly bear"; + Body = 212; + BaseSoundID = 0xA3; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 76, 93 ); + SetMana( 0 ); + + SetDamage( 8, 13 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 45.1, 70.0 ); + + Fame = 1000; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 16; } } + + public GrizzlyBear( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Bears/KodiakBear.cs b/Scripts/Mobiles/Animals/Bears/KodiakBear.cs new file mode 100644 index 0000000..63a810b --- /dev/null +++ b/Scripts/Mobiles/Animals/Bears/KodiakBear.cs @@ -0,0 +1,54 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bear corpse" )] + public class KodiakBear : BaseCreature + { + [Constructable] + public KodiakBear() : base( AIType.AI_Animal, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a kodiak bear"; + Body = 267; + BaseSoundID = 0xA3; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 96, 133 ); + SetMana( 0 ); + + SetDamage( 10, 15 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 80.1, 110.0 ); + SetSkill( SkillName.HandToHand, 65.1, 90.0 ); + + Fame = 1500; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 18; } } + + public KodiakBear( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Bears/PandaBear.cs b/Scripts/Mobiles/Animals/Bears/PandaBear.cs new file mode 100644 index 0000000..8a39fba --- /dev/null +++ b/Scripts/Mobiles/Animals/Bears/PandaBear.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bear corpse" )] + public class PandaBear : BaseCreature + { + [Constructable] + public PandaBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a panda bear"; + Body = 112; + BaseSoundID = 0xA3; + + SetStr( 76, 100 ); + SetDex( 56, 75 ); + SetInt( 11, 14 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.MagicResist, 20.1, 40.0 ); + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public PandaBear( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Bears/PolarBear.cs b/Scripts/Mobiles/Animals/Bears/PolarBear.cs new file mode 100644 index 0000000..823b11c --- /dev/null +++ b/Scripts/Mobiles/Animals/Bears/PolarBear.cs @@ -0,0 +1,57 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a polar bear corpse" )] + [TypeAlias( "Server.Mobiles.Polarbear" )] + public class PolarBear : BaseCreature + { + [Constructable] + public PolarBear() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a polar bear"; + Body = 213; + BaseSoundID = 0xA3; + + SetStr( 116, 140 ); + SetDex( 81, 105 ); + SetInt( 26, 50 ); + + SetHits( 70, 84 ); + SetMana( 0 ); + + SetDamage( 7, 12 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 60.1, 90.0 ); + SetSkill( SkillName.HandToHand, 45.1, 70.0 ); + + Fame = 1500; + Karma = 0; + + VirtualArmor = 18; + } + + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 16; } } + + public PolarBear( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Bears/SnowBear.cs b/Scripts/Mobiles/Animals/Bears/SnowBear.cs new file mode 100644 index 0000000..8b03de7 --- /dev/null +++ b/Scripts/Mobiles/Animals/Bears/SnowBear.cs @@ -0,0 +1,54 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bear corpse" )] + public class SnowBear : BaseCreature + { + [Constructable] + public SnowBear() : base( AIType.AI_Animal, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a snow bear"; + Body = 268; + BaseSoundID = 0xA3; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 96, 133 ); + SetMana( 0 ); + + SetDamage( 10, 15 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 80.1, 110.0 ); + SetSkill( SkillName.HandToHand, 65.1, 90.0 ); + + Fame = 1500; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 18; } } + + public SnowBear( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Birds/AxeBeak.cs b/Scripts/Mobiles/Animals/Birds/AxeBeak.cs new file mode 100644 index 0000000..dbaaf67 --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/AxeBeak.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an axebeak corpse" )] + public class AxeBeak : BaseCreature + { + [Constructable] + public AxeBeak() : base( AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "an axebeak"; + Body = 295; + BaseSoundID = 0x2EE; + + SetStr( 96, 120 ); + SetDex( 86, 110 ); + SetInt( 51, 75 ); + + SetHits( 58, 72 ); + + SetDamage( 5, 7 ); + + SetSkill( SkillName.MagicResist, 20.1, 35.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 90.0 ); + + Fame = 200; + Karma = 0; + + VirtualArmor = 28; + } + + public override int Meat{ get{ return 4; } } + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Feathers{ get{ return 50; } } + public override int Hides{ get{ return 5; } } + + public AxeBeak(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Birds/Bird.cs b/Scripts/Mobiles/Animals/Birds/Bird.cs new file mode 100644 index 0000000..6c4e23c --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/Bird.cs @@ -0,0 +1,74 @@ +using System; +using Server; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a bird corpse" )] + public class Bird : BaseCreature + { + [Constructable] + public Bird() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + if ( Utility.RandomBool() ) + { + Hue = 0x901; + + switch ( Utility.Random( 3 ) ) + { + case 0: Name = "a crow"; break; + case 2: Name = "a raven"; break; + case 1: Name = "a magpie"; break; + } + } + else + { + Hue = Utility.RandomBirdHue(); + Name = NameList.RandomName( "bird" ); + } + + Body = 6; + BaseSoundID = 0x1B; + + VirtualArmor = Utility.RandomMinMax( 0, 6 ); + + SetStr( 10 ); + SetDex( 25, 35 ); + SetInt( 10 ); + + SetDamage( 0 ); + + SetSkill( SkillName.HandToHand, 4.2, 6.4 ); + SetSkill( SkillName.Tactics, 4.0, 6.0 ); + SetSkill( SkillName.MagicResist, 4.0, 5.0 ); + + Fame = 0; + Karma = 0; + } + + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Meat{ get{ return 1; } } + public override int Feathers{ get{ return 25; } } + + public Bird( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Hue == 0 ) + Hue = Utility.RandomBirdHue(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Birds/Chicken.cs b/Scripts/Mobiles/Animals/Birds/Chicken.cs new file mode 100644 index 0000000..0da9eaf --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/Chicken.cs @@ -0,0 +1,58 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a chicken corpse" )] + public class Chicken : BaseCreature + { + [Constructable] + public Chicken() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a chicken"; + Body = 208; + BaseSoundID = 0x6E; + + SetStr( 5 ); + SetDex( 15 ); + SetInt( 5 ); + + SetHits( 3 ); + SetMana( 0 ); + + SetDamage( 1 ); + + SetSkill( SkillName.MagicResist, 4.0 ); + SetSkill( SkillName.Tactics, 5.0 ); + SetSkill( SkillName.HandToHand, 5.0 ); + + Fame = 0; + Karma = 150; + + VirtualArmor = 2; + } + + public override int Meat{ get{ return 2; } } + public override MeatType MeatType{ get{ return MeatType.BigBird; } } + + public override int Feathers{ get{ return 25; } } + + public Chicken(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Birds/Eagle.cs b/Scripts/Mobiles/Animals/Birds/Eagle.cs new file mode 100644 index 0000000..99dcb79 --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/Eagle.cs @@ -0,0 +1,58 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "an eagle corpse" )] + public class Eagle : BaseCreature + { + [Constructable] + public Eagle() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "an eagle"; + Body = 5; + BaseSoundID = 0x2EE; + + SetStr( 31, 47 ); + SetDex( 36, 60 ); + SetInt( 8, 20 ); + + SetHits( 20, 27 ); + SetMana( 0 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.MagicResist, 15.3, 30.0 ); + SetSkill( SkillName.Tactics, 18.1, 37.0 ); + SetSkill( SkillName.HandToHand, 20.1, 30.0 ); + + Fame = 300; + Karma = 0; + + VirtualArmor = 22; + } + + public override int Meat{ get{ return 1; } } + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Feathers{ get{ return 36; } } + + public Eagle(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Birds/GiantHawk.cs b/Scripts/Mobiles/Animals/Birds/GiantHawk.cs new file mode 100644 index 0000000..c0ffab1 --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/GiantHawk.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dead bird" )] + public class GiantHawk : BaseCreature + { + [Constructable] + public GiantHawk() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant hawk"; + Body = 224; + BaseSoundID = 0x2EE; + Hue = 2708; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 76, 93 ); + SetMana( 0 ); + + SetDamage( 8, 13 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 45.1, 70.0 ); + + Fame = 1000; + Karma = -500; + + VirtualArmor = 24; + } + + public override int Meat { get { return 5; } } + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Feathers{ get{ return 50; } } + + public GiantHawk( Serial serial ): base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)2 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Animals/Birds/GiantRaven.cs b/Scripts/Mobiles/Animals/Birds/GiantRaven.cs new file mode 100644 index 0000000..bf66503 --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/GiantRaven.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dead bird" )] + public class GiantRaven : BaseCreature + { + [Constructable] + public GiantRaven() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant raven"; + Body = 224; + Hue = 0x497; + BaseSoundID = 0x2EE; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 76, 93 ); + SetMana( 0 ); + + SetDamage( 8, 13 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 45.1, 70.0 ); + + Fame = 1000; + Karma = -500; + + VirtualArmor = 24; + } + + public override int Meat { get { return 5; } } + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Feathers{ get{ return 50; } } + + public GiantRaven( Serial serial ): base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)2 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Animals/Birds/Phoenix.cs b/Scripts/Mobiles/Animals/Birds/Phoenix.cs new file mode 100644 index 0000000..0488e91 --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/Phoenix.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a phoenix corpse" )] + public class Phoenix : BaseCreature + { + [Constructable] + public Phoenix() : base( AIType.AI_Mage, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a phoenix"; + Body = 224; + Hue = 1184; + BaseSoundID = 0x8F; + + SetStr( 504, 700 ); + SetDex( 202, 300 ); + SetInt( 504, 700 ); + + SetHits( 340, 383 ); + + SetDamage( 25 ); + + SetSkill( SkillName.Concentration, 90.2, 100.0 ); + SetSkill( SkillName.Magery, 90.2, 100.0 ); + SetSkill( SkillName.Meditation, 75.1, 100.0 ); + SetSkill( SkillName.MagicResist, 86.0, 135.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 15000; + Karma = 0; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich ); + } + + public override int Meat{ get{ return 1; } } + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Feathers{ get{ return 36; } } + + public Phoenix( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Birds/Roc.cs b/Scripts/Mobiles/Animals/Birds/Roc.cs new file mode 100644 index 0000000..f905dfc --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/Roc.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dead bird" )] + public class Roc : BaseCreature + { + [Constructable] + public Roc() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a roc"; + Body = 224; + BaseSoundID = 0x2EE; + + SetStr( 1201, 1410 ); + SetDex( 171, 270 ); + SetInt( 301, 325 ); + + SetHits( 901, 1100 ); + SetMana( 60 ); + + SetDamage( 20, 30 ); + + SetSkill( SkillName.MagicResist, 85.1, 100.0 ); + SetSkill( SkillName.Tactics, 100.1, 110.0 ); + SetSkill( SkillName.HandToHand, 100.1, 120.0 ); + + Fame = 18000; + Karma = -18000; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 3 ); + AddLoot( LootPack.Gems, 4 ); + } + + public override int Meat { get { return 5; } } + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Feathers{ get{ return 100; } } + + public Roc( Serial serial ): base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)2 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Animals/Birds/Turkey.cs b/Scripts/Mobiles/Animals/Birds/Turkey.cs new file mode 100644 index 0000000..ab3ff4b --- /dev/null +++ b/Scripts/Mobiles/Animals/Birds/Turkey.cs @@ -0,0 +1,58 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a turkey corpse" )] + public class Turkey : BaseCreature + { + [Constructable] + public Turkey() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a turkey"; + Body = 306; + BaseSoundID = 0x6E; + + SetStr( 15 ); + SetDex( 15 ); + SetInt( 5 ); + + SetHits( 15 ); + SetMana( 0 ); + + SetDamage( 3 ); + + SetSkill( SkillName.MagicResist, 5.0 ); + SetSkill( SkillName.Tactics, 15.0 ); + SetSkill( SkillName.HandToHand, 15.0 ); + + Fame = 200; + Karma = 0; + + VirtualArmor = 5; + } + + public override int Meat{ get{ return 5; } } + public override MeatType MeatType{ get{ return MeatType.BigBird; } } + + public override int Feathers{ get{ return 35; } } + + public Turkey(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Boar.cs b/Scripts/Mobiles/Animals/Boar.cs new file mode 100644 index 0000000..22486cf --- /dev/null +++ b/Scripts/Mobiles/Animals/Boar.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a pig corpse" )] + public class Boar : BaseCreature + { + [Constructable] + public Boar() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a boar"; + Body = 290; + BaseSoundID = 0xC4; + + SetStr( 25 ); + SetDex( 15 ); + SetInt( 5 ); + + SetHits( 15 ); + SetMana( 0 ); + + SetDamage( 3, 6 ); + + SetSkill( SkillName.MagicResist, 9.0 ); + SetSkill( SkillName.Tactics, 9.0 ); + SetSkill( SkillName.HandToHand, 9.0 ); + + Fame = 300; + Karma = 0; + + VirtualArmor = 10; + } + + public override int Meat{ get{ return 2; } } + public override MeatType MeatType{ get{ return MeatType.Ham; } } + + public Boar(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Canines/DireWolf.cs b/Scripts/Mobiles/Animals/Canines/DireWolf.cs new file mode 100644 index 0000000..0a5f480 --- /dev/null +++ b/Scripts/Mobiles/Animals/Canines/DireWolf.cs @@ -0,0 +1,58 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a dire wolf corpse" )] + [TypeAlias( "Server.Mobiles.Direwolf" )] + public class DireWolf : BaseCreature + { + [Constructable] + public DireWolf() : base( AIType.AI_Melee,FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a dire wolf"; + Body = 225; + Hue = 2305; + BaseSoundID = 0xE5; + + SetStr( 96, 120 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 58, 72 ); + SetMana( 0 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 57.6, 75.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 22; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 7; } } + + public DireWolf(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Canines/Dog.cs b/Scripts/Mobiles/Animals/Canines/Dog.cs new file mode 100644 index 0000000..3270d01 --- /dev/null +++ b/Scripts/Mobiles/Animals/Canines/Dog.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a dog corpse" )] + public class Dog : BaseCreature + { + [Constructable] + public Dog() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a dog"; + Body = 217; + Hue = Utility.RandomAnimalHue(); + BaseSoundID = 0x85; + + SetStr( 27, 37 ); + SetDex( 28, 43 ); + SetInt( 29, 37 ); + + SetHits( 17, 22 ); + SetMana( 0 ); + + SetDamage( 4, 7 ); + + SetSkill( SkillName.MagicResist, 22.1, 47.0 ); + SetSkill( SkillName.Tactics, 19.2, 31.0 ); + SetSkill( SkillName.HandToHand, 19.2, 31.0 ); + + Fame = 0; + Karma = 300; + + VirtualArmor = 12; + } + + public override int Meat{ get{ return 1; } } + + public Dog(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Canines/GreyWolf.cs b/Scripts/Mobiles/Animals/Canines/GreyWolf.cs new file mode 100644 index 0000000..9d69b20 --- /dev/null +++ b/Scripts/Mobiles/Animals/Canines/GreyWolf.cs @@ -0,0 +1,58 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a grey wolf corpse" )] + [TypeAlias( "Server.Mobiles.Greywolf" )] + public class GreyWolf : BaseCreature + { + [Constructable] + public GreyWolf() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a grey wolf"; + Body = 225; + Hue = Utility.RandomList( 946, 947 ); + BaseSoundID = 0xE5; + + SetStr( 56, 80 ); + SetDex( 56, 75 ); + SetInt( 31, 55 ); + + SetHits( 34, 48 ); + SetMana( 0 ); + + SetDamage( 3, 7 ); + + SetSkill( SkillName.MagicResist, 20.1, 35.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 60.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 16; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 6; } } + + public GreyWolf(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Canines/TimberWolf.cs b/Scripts/Mobiles/Animals/Canines/TimberWolf.cs new file mode 100644 index 0000000..852d7a6 --- /dev/null +++ b/Scripts/Mobiles/Animals/Canines/TimberWolf.cs @@ -0,0 +1,57 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a timber wolf corpse" )] + [TypeAlias( "Server.Mobiles.Timberwolf" )] + public class TimberWolf : BaseCreature + { + [Constructable] + public TimberWolf() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a timber wolf"; + Body = 225; + BaseSoundID = 0xE5; + + SetStr( 56, 80 ); + SetDex( 56, 75 ); + SetInt( 11, 25 ); + + SetHits( 34, 48 ); + SetMana( 0 ); + + SetDamage( 5, 9 ); + + SetSkill( SkillName.MagicResist, 27.6, 45.0 ); + SetSkill( SkillName.Tactics, 30.1, 50.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 16; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 5; } } + + public TimberWolf(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Canines/Werewolf.cs b/Scripts/Mobiles/Animals/Canines/Werewolf.cs new file mode 100644 index 0000000..08aecfa --- /dev/null +++ b/Scripts/Mobiles/Animals/Canines/Werewolf.cs @@ -0,0 +1,54 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a wolf corpse" )] + public class Werewolf : BaseCreature + { + [Constructable] + public Werewolf() : base( AIType.AI_Animal, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a werewolf"; + Body = Utility.RandomList( 293, 252 ); + BaseSoundID = 0x575; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 96, 133 ); + SetMana( 0 ); + + SetDamage( 10, 15 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 80.1, 110.0 ); + SetSkill( SkillName.HandToHand, 65.1, 90.0 ); + + Fame = 1500; + Karma = -1500; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 18; } } + + public Werewolf( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Canines/WhiteWolf.cs b/Scripts/Mobiles/Animals/Canines/WhiteWolf.cs new file mode 100644 index 0000000..75e69b2 --- /dev/null +++ b/Scripts/Mobiles/Animals/Canines/WhiteWolf.cs @@ -0,0 +1,60 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a white wolf corpse" )] + [TypeAlias( "Server.Mobiles.Whitewolf" )] + public class WhiteWolf : BaseCreature + { + [Constructable] + public WhiteWolf() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a white wolf"; + Body = 225; + + Hue = Utility.RandomList( 2301, 1154 ); + + BaseSoundID = 0xE5; + + SetStr( 56, 80 ); + SetDex( 56, 75 ); + SetInt( 31, 55 ); + + SetHits( 34, 48 ); + SetMana( 0 ); + + SetDamage( 3, 7 ); + + SetSkill( SkillName.MagicResist, 20.1, 35.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 60.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 16; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 6; } } + + public WhiteWolf( Serial serial ) : base( serial ) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Cows/Bull.cs b/Scripts/Mobiles/Animals/Cows/Bull.cs new file mode 100644 index 0000000..9727256 --- /dev/null +++ b/Scripts/Mobiles/Animals/Cows/Bull.cs @@ -0,0 +1,59 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bull corpse" )] + public class Bull : BaseCreature + { + [Constructable] + public Bull() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a bull"; + Body = Utility.RandomList( 232, 233 ); + BaseSoundID = 0x64; + + if ( 0.5 >= Utility.RandomDouble() ) + Hue = 0x901; + + SetStr( 77, 111 ); + SetDex( 56, 75 ); + SetInt( 47, 75 ); + + SetHits( 50, 64 ); + SetMana( 0 ); + + SetDamage( 4, 9 ); + + SetSkill( SkillName.MagicResist, 17.6, 25.0 ); + SetSkill( SkillName.Tactics, 67.6, 85.0 ); + SetSkill( SkillName.HandToHand, 40.1, 57.5 ); + + Fame = 0; + Karma = 600; + + VirtualArmor = 28; + } + + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 15; } } + + public Bull(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Cows/Cow.cs b/Scripts/Mobiles/Animals/Cows/Cow.cs new file mode 100644 index 0000000..46d9b9d --- /dev/null +++ b/Scripts/Mobiles/Animals/Cows/Cow.cs @@ -0,0 +1,127 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a cow corpse" )] + public class Cow : BaseCreature + { + private DateTime m_MilkedOn; + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime MilkedOn + { + get { return m_MilkedOn; } + set { m_MilkedOn = value; } + } + + private int m_Milk; + + [CommandProperty( AccessLevel.GameMaster )] + public int Milk + { + get { return m_Milk; } + set { m_Milk = value; } + } + + [Constructable] + public Cow() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a cow"; + Body = Utility.RandomList( 216, 231 ); + BaseSoundID = 0x78; + + SetStr( 30 ); + SetDex( 15 ); + SetInt( 5 ); + + SetHits( 18 ); + SetMana( 0 ); + + SetDamage( 1, 4 ); + + SetDamage( 1, 4 ); + + SetSkill( SkillName.MagicResist, 5.5 ); + SetSkill( SkillName.Tactics, 5.5 ); + SetSkill( SkillName.HandToHand, 5.5 ); + + Fame = 0; + Karma = 300; + + VirtualArmor = 10; + } + + public override int Meat{ get{ return 8; } } + public override int Hides{ get{ return 12; } } + + public override void OnDoubleClick( Mobile from ) + { + base.OnDoubleClick( from ); + + int random = Utility.Random( 100 ); + + if ( random < 5 ) + Tip(); + else if ( random < 20 ) + PlaySound( 120 ); + else if ( random < 40 ) + PlaySound( 121 ); + } + + public void Tip() + { + PlaySound( 121 ); + Animate( 8, 0, 3, true, false, 0 ); + } + + public bool TryMilk( Mobile from ) + { + if ( !from.InLOS( this ) || !from.InRange( Location, 2 ) ) + from.SendLocalizedMessage( 1080400 ); // You can not milk the cow from this location. + if ( Controlled && ControlMaster != from ) + from.SendLocalizedMessage( 1071182 ); // The cow nimbly escapes your attempts to milk it. + if ( m_Milk == 0 && m_MilkedOn + TimeSpan.FromDays( 1 ) > DateTime.Now ) + from.SendLocalizedMessage( 1080198 ); // This cow can not be milked now. Please wait for some time. + else + { + if ( m_Milk == 0 ) + m_Milk = 4; + + m_MilkedOn = DateTime.Now; + m_Milk--; + + return true; + } + + return false; + } + + public Cow( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); + + writer.Write( (DateTime) m_MilkedOn ); + writer.Write( (int) m_Milk ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version > 0 ) + { + m_MilkedOn = reader.ReadDateTime(); + m_Milk = reader.ReadInt(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Deer.cs b/Scripts/Mobiles/Animals/Deer.cs new file mode 100644 index 0000000..185d4e2 --- /dev/null +++ b/Scripts/Mobiles/Animals/Deer.cs @@ -0,0 +1,70 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a deer corpse" )] + public class Deer : BaseCreature + { + [Constructable] + public Deer() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a deer"; + Body = 237; + + SetStr( 21, 51 ); + SetDex( 47, 77 ); + SetInt( 17, 47 ); + + SetHits( 15, 29 ); + SetMana( 0 ); + + SetDamage( 4 ); + + SetSkill( SkillName.MagicResist, 15.0 ); + SetSkill( SkillName.Tactics, 19.0 ); + SetSkill( SkillName.HandToHand, 26.0 ); + + Fame = 300; + Karma = 0; + + VirtualArmor = 8; + } + + public override int Meat{ get{ return 5; } } + public override int Hides{ get{ return 8; } } + + public Deer(Serial serial) : base(serial) + { + } + + public override int GetAttackSound() + { + return 0x82; + } + + public override int GetHurtSound() + { + return 0x83; + } + + public override int GetDeathSound() + { + return 0x84; + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Felines/Cat.cs b/Scripts/Mobiles/Animals/Felines/Cat.cs new file mode 100644 index 0000000..2a01f91 --- /dev/null +++ b/Scripts/Mobiles/Animals/Felines/Cat.cs @@ -0,0 +1,57 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a cat corpse" )] + [TypeAlias( "Server.Mobiles.Housecat" )] + public class Cat : BaseCreature + { + [Constructable] + public Cat() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a cat"; + Body = 201; + Hue = Utility.RandomAnimalHue(); + BaseSoundID = 0x69; + + SetStr( 9 ); + SetDex( 35 ); + SetInt( 5 ); + + SetHits( 6 ); + SetMana( 0 ); + + SetDamage( 1 ); + + SetSkill( SkillName.MagicResist, 5.0 ); + SetSkill( SkillName.Tactics, 4.0 ); + SetSkill( SkillName.HandToHand, 5.0 ); + + Fame = 0; + Karma = 150; + + VirtualArmor = 8; + } + + public override int Meat{ get{ return 1; } } + + public Cat(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Felines/Cougar.cs b/Scripts/Mobiles/Animals/Felines/Cougar.cs new file mode 100644 index 0000000..f33e97d --- /dev/null +++ b/Scripts/Mobiles/Animals/Felines/Cougar.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a cougar corpse" )] + public class Cougar : BaseCreature + { + [Constructable] + public Cougar() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a cougar"; + Body = 214; + BaseSoundID = 0x73; + + SetStr( 56, 80 ); + SetDex( 66, 85 ); + SetInt( 26, 50 ); + + SetHits( 34, 48 ); + SetMana( 0 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.MagicResist, 15.1, 30.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 60.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 16; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 10; } } + + public Cougar(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Felines/Lion.cs b/Scripts/Mobiles/Animals/Felines/Lion.cs new file mode 100644 index 0000000..f29a99c --- /dev/null +++ b/Scripts/Mobiles/Animals/Felines/Lion.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a lion corpse" )] + public class Lion : BaseCreature + { + [Constructable] + public Lion() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a lion"; + Body = 236; + BaseSoundID = 0x0B2; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 76, 93 ); + SetMana( 0 ); + + SetDamage( 8, 13 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 45.1, 70.0 ); + + Fame = 1000; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 14; } } + + public Lion(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Felines/Panther.cs b/Scripts/Mobiles/Animals/Felines/Panther.cs new file mode 100644 index 0000000..5b6fdd8 --- /dev/null +++ b/Scripts/Mobiles/Animals/Felines/Panther.cs @@ -0,0 +1,57 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a panther corpse" )] + public class Panther : BaseCreature + { + [Constructable] + public Panther() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a panther"; + Body = 214; + Hue = 0x901; + BaseSoundID = 0x462; + + SetStr( 61, 85 ); + SetDex( 86, 105 ); + SetInt( 26, 50 ); + + SetHits( 37, 51 ); + SetMana( 0 ); + + SetDamage( 4, 12 ); + + SetSkill( SkillName.MagicResist, 15.1, 30.0 ); + SetSkill( SkillName.Tactics, 50.1, 65.0 ); + SetSkill( SkillName.HandToHand, 50.1, 65.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 16; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 10; } } + + public Panther(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Felines/SnowLeopard.cs b/Scripts/Mobiles/Animals/Felines/SnowLeopard.cs new file mode 100644 index 0000000..2932d66 --- /dev/null +++ b/Scripts/Mobiles/Animals/Felines/SnowLeopard.cs @@ -0,0 +1,58 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a leopard corpse" )] + [TypeAlias( "Server.Mobiles.Snowleopard" )] + public class SnowLeopard : BaseCreature + { + [Constructable] + public SnowLeopard() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a snow leopard"; + Body = 214; + Hue = 2301; + BaseSoundID = 0x73; + + SetStr( 56, 80 ); + SetDex( 66, 85 ); + SetInt( 26, 50 ); + + SetHits( 34, 48 ); + SetMana( 0 ); + + SetDamage( 3, 9 ); + + SetSkill( SkillName.MagicResist, 25.1, 35.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 8; } } + + public SnowLeopard(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Felines/Tiger.cs b/Scripts/Mobiles/Animals/Felines/Tiger.cs new file mode 100644 index 0000000..1f348ca --- /dev/null +++ b/Scripts/Mobiles/Animals/Felines/Tiger.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a tiger corpse" )] + public class Tiger : BaseCreature + { + [Constructable] + public Tiger() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a tiger"; + Body = 327; + BaseSoundID = 0x0B2; + + SetStr( 126, 155 ); + SetDex( 81, 105 ); + SetInt( 16, 40 ); + + SetHits( 76, 93 ); + SetMana( 0 ); + + SetDamage( 8, 13 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 45.1, 70.0 ); + + Fame = 1000; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 14; } } + + public Tiger(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Goat.cs b/Scripts/Mobiles/Animals/Goat.cs new file mode 100644 index 0000000..bbff241 --- /dev/null +++ b/Scripts/Mobiles/Animals/Goat.cs @@ -0,0 +1,57 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a goat corpse" )] + public class Goat : BaseCreature + { + [Constructable] + public Goat() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a goat"; + Body = 209; + BaseSoundID = 0x99; + + SetStr( 19 ); + SetDex( 15 ); + SetInt( 5 ); + + SetHits( 12 ); + SetMana( 0 ); + + SetDamage( 3, 4 ); + + SetSkill( SkillName.MagicResist, 5.0 ); + SetSkill( SkillName.Tactics, 5.0 ); + SetSkill( SkillName.HandToHand, 5.0 ); + + Fame = 0; + Karma = 300; + + VirtualArmor = 10; + } + + public override int Meat{ get{ return 2; } } + public override MeatType MeatType{ get{ return MeatType.Lamb; } } + public override int Hides{ get{ return 8; } } + + public Goat(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Gorilla.cs b/Scripts/Mobiles/Animals/Gorilla.cs new file mode 100644 index 0000000..5f92857 --- /dev/null +++ b/Scripts/Mobiles/Animals/Gorilla.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a gorilla corpse" )] + public class Gorilla : BaseCreature + { + [Constructable] + public Gorilla() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a gorilla"; + Body = 29; + BaseSoundID = 0x9E; + + SetStr( 53, 95 ); + SetDex( 36, 55 ); + SetInt( 36, 60 ); + + SetHits( 38, 51 ); + SetMana( 0 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 43.3, 58.0 ); + SetSkill( SkillName.HandToHand, 43.3, 58.0 ); + + Fame = 450; + Karma = 0; + + VirtualArmor = 20; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 6; } } + + public Gorilla(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/GreatDeer.cs b/Scripts/Mobiles/Animals/GreatDeer.cs new file mode 100644 index 0000000..ed6fa30 --- /dev/null +++ b/Scripts/Mobiles/Animals/GreatDeer.cs @@ -0,0 +1,71 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a deer corpse" )] + [TypeAlias( "Server.Mobiles.GreatDeer" )] + public class GreatDeer : BaseCreature + { + [Constructable] + public GreatDeer() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a deer"; + Body = 234; + + SetStr( 41, 71 ); + SetDex( 47, 77 ); + SetInt( 27, 57 ); + + SetHits( 27, 41 ); + SetMana( 0 ); + + SetDamage( 5, 9 ); + + SetSkill( SkillName.MagicResist, 26.8, 44.5 ); + SetSkill( SkillName.Tactics, 29.8, 47.5 ); + SetSkill( SkillName.HandToHand, 29.8, 47.5 ); + + Fame = 300; + Karma = 0; + + VirtualArmor = 24; + } + + public override int Meat{ get{ return 6; } } + public override int Hides{ get{ return 15; } } + + public GreatDeer(Serial serial) : base(serial) + { + } + + public override int GetAttackSound() + { + return 0x82; + } + + public override int GetHurtSound() + { + return 0x83; + } + + public override int GetDeathSound() + { + return 0x84; + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/MountainGoat.cs b/Scripts/Mobiles/Animals/MountainGoat.cs new file mode 100644 index 0000000..f5d806b --- /dev/null +++ b/Scripts/Mobiles/Animals/MountainGoat.cs @@ -0,0 +1,57 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a mountain goat corpse" )] + public class MountainGoat : BaseCreature + { + [Constructable] + public MountainGoat() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a mountain goat"; + Body = 289; + BaseSoundID = 0x99; + + SetStr( 22, 64 ); + SetDex( 56, 75 ); + SetInt( 16, 30 ); + + SetHits( 20, 33 ); + SetMana( 0 ); + + SetDamage( 3, 7 ); + + SetSkill( SkillName.MagicResist, 25.1, 30.0 ); + SetSkill( SkillName.Tactics, 29.3, 44.0 ); + SetSkill( SkillName.HandToHand, 29.3, 44.0 ); + + Fame = 300; + Karma = 0; + + VirtualArmor = 10; + } + + public override int Meat{ get{ return 3; } } + public override MeatType MeatType{ get{ return MeatType.Lamb; } } + public override int Hides{ get{ return 12; } } + + public MountainGoat(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Pets/BaseMount.cs b/Scripts/Mobiles/Animals/Pets/BaseMount.cs new file mode 100644 index 0000000..77bdb81 --- /dev/null +++ b/Scripts/Mobiles/Animals/Pets/BaseMount.cs @@ -0,0 +1,462 @@ +using System; +using System.Collections; +using Server; +using Server.Regions; + +namespace Server.Mobiles +{ + public abstract class BaseMount : BaseCreature, IMount + { + private Mobile m_Rider; + private Item m_InternalItem; + private DateTime m_NextMountAbility; + + public virtual TimeSpan MountAbilityDelay { get { return TimeSpan.Zero; } } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime NextMountAbility + { + get { return m_NextMountAbility; } + set { m_NextMountAbility = value; } + } + + protected Item InternalItem { get { return m_InternalItem; } } + + public virtual bool AllowMaleRider{ get{ return true; } } + public virtual bool AllowFemaleRider{ get{ return true; } } + + public BaseMount( string name, int bodyID, int itemID, AIType aiType, FightMode fightMode, int rangePerception, int rangeFight, double activeSpeed, double passiveSpeed ) : base ( aiType, fightMode, rangePerception, rangeFight, activeSpeed, passiveSpeed ) + { + Name = name; + Body = bodyID; + + m_InternalItem = new MountItem( this, itemID ); + } + + public BaseMount( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_NextMountAbility ); + + writer.Write( m_Rider ); + writer.Write( m_InternalItem ); + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public override int Hue + { + get + { + return base.Hue; + } + set + { + base.Hue = value; + + if ( m_InternalItem != null ) + m_InternalItem.Hue = value; + } + } + + public override bool OnBeforeDeath() + { + Rider = null; + + return base.OnBeforeDeath(); + } + + public override void OnAfterDelete() + { + if ( m_InternalItem != null ) + m_InternalItem.Delete(); + + m_InternalItem = null; + + base.OnAfterDelete(); + } + + public override void OnDelete() + { + Rider = null; + + base.OnDelete(); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_NextMountAbility = reader.ReadDateTime(); + goto case 0; + } + case 0: + { + m_Rider = reader.ReadMobile(); + m_InternalItem = reader.ReadItem(); + + if ( m_InternalItem == null ) + Delete(); + + break; + } + } + } + + public virtual void OnDisallowedRider( Mobile m ) + { + m.SendMessage( "You may not ride this creature." ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsDeadPet ) + return; + + Region reg = from.Region; + + if ( reg.NoMounts( from, from.Location ) ) + { + from.SendMessage( "You cannot mount that in here!" ); + return; + } + + if ( from.IsBodyMod && !from.Body.IsHuman ) + { + from.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed. + + return; + } + + if ( !CheckMountAllowed( from, true ) ) + return; + + if ( from.Mounted ) + { + from.SendLocalizedMessage( 1005583 ); // Please dismount first. + return; + } + + if ( from.Female ? !AllowFemaleRider : !AllowMaleRider ) + { + OnDisallowedRider( from ); + return; + } + + if ( !Multis.DesignContext.Check( from ) ) + return; + + if ( from.HasTrade ) + { + from.SendLocalizedMessage( 1042317, "", 0x41 ); // You may not ride at this time + return; + } + + if ( from.InRange( this, 1 ) ) + { + bool canAccess = ( from.AccessLevel >= AccessLevel.GameMaster ) + || ( Controlled && ControlMaster == from ) + || ( Summoned && SummonMaster == from ); + + if ( canAccess ) + { + if ( this.Poisoned ) + PrivateOverheadMessage( Network.MessageType.Regular, 0x3B2, 1049692, from.NetState ); // This mount is too ill to ride. + else + Rider = from; + } + else if ( !Controlled && !Summoned ) + { + // That mount does not look broken! You would have to tame it to ride it. + PrivateOverheadMessage( Network.MessageType.Regular, 0x3B2, 501263, from.NetState ); + } + else + { + // This isn't your mount; it refuses to let you ride. + PrivateOverheadMessage( Network.MessageType.Regular, 0x3B2, 501264, from.NetState ); + } + } + else + { + from.SendLocalizedMessage( 500206 ); // That is too far away to ride. + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int ItemID + { + get + { + if ( m_InternalItem != null ) + return m_InternalItem.ItemID; + else + return 0; + } + set + { + if ( m_InternalItem != null ) + m_InternalItem.ItemID = value; + } + } + + public static void Dismount( Mobile m ) + { + IMount mount = m.Mount; + + if ( mount != null ) + mount.Rider = null; + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Rider + { + get + { + return m_Rider; + } + set + { + if ( m_Rider != value ) + { + if ( value == null ) + { + Point3D loc = m_Rider.Location; + Map map = m_Rider.Map; + + if ( map == null || map == Map.Internal ) + { + loc = m_Rider.LogoutLocation; + map = m_Rider.LogoutMap; + } + + Direction = m_Rider.Direction; + Location = loc; + Map = map; + + if ( m_InternalItem != null ) + m_InternalItem.Internalize(); + } + else + { + if ( m_Rider != null ) + Dismount( m_Rider ); + + Dismount( value ); + + if ( m_InternalItem != null ) + value.AddItem( m_InternalItem ); + + value.Direction = this.Direction; + + Internalize(); + } + + m_Rider = value; + } + } + } + + private class BlockEntry + { + public BlockMountType m_Type; + public DateTime m_Expiration; + + public bool IsExpired{ get{ return ( DateTime.Now >= m_Expiration ); } } + + public BlockEntry( BlockMountType type, DateTime expiration ) + { + m_Type = type; + m_Expiration = expiration; + } + } + + private static Hashtable m_Table = new Hashtable(); + + public static void SetMountPrevention( Mobile mob, BlockMountType type, TimeSpan duration ) + { + if ( mob == null ) + return; + + DateTime expiration = DateTime.Now + duration; + + BlockEntry entry = m_Table[mob] as BlockEntry; + + if ( entry != null ) + { + entry.m_Type = type; + entry.m_Expiration = expiration; + } + else + { + m_Table[mob] = entry = new BlockEntry( type, expiration ); + } + } + + public static void ClearMountPrevention( Mobile mob ) + { + if ( mob != null ) + m_Table.Remove( mob ); + } + + public static BlockMountType GetMountPrevention( Mobile mob ) + { + if ( mob == null ) + return BlockMountType.None; + + BlockEntry entry = m_Table[mob] as BlockEntry; + + if ( entry == null ) + return BlockMountType.None; + + if ( entry.IsExpired ) + { + m_Table.Remove( mob ); + return BlockMountType.None; + } + + return entry.m_Type; + } + + public static bool CheckMountAllowed( Mobile mob, bool message ) + { + BlockMountType type = GetMountPrevention( mob ); + + if ( type == BlockMountType.None ) + return true; + + if ( message ) + { + switch ( type ) + { + case BlockMountType.Dazed: + { + mob.SendLocalizedMessage( 1040024 ); // You are still too dazed from being knocked off your mount to ride! + break; + } + case BlockMountType.DismountRecovery: + { + mob.SendLocalizedMessage( 1070859 ); // You cannot mount while recovering from a dismount special maneuver. + break; + } + } + } + + return false; + } + + public virtual void OnRiderDamaged( int amount, Mobile from, bool willKill ) + { + if( m_Rider == null ) + return; + + Mobile attacker = from; + if( attacker == null ) + attacker = m_Rider.FindMostRecentDamager( true ); + + if( !(attacker == this || attacker == m_Rider || willKill || DateTime.Now < m_NextMountAbility) ) + { + if( DoMountAbility( amount, from ) ) + m_NextMountAbility = DateTime.Now + MountAbilityDelay; + + } + } + + public virtual bool DoMountAbility( int damage, Mobile attacker ) + { + return false; + } + } + + public class MountItem : Item, IMountItem + { + private BaseMount m_Mount; + + public override double DefaultWeight { get { return 0; } } + + public MountItem( BaseMount mount, int itemID ) : base( itemID ) + { + Layer = Layer.Mount; + Movable = false; + + m_Mount = mount; + } + + public MountItem( Serial serial ) : base( serial ) + { + } + + public override void OnAfterDelete() + { + if ( m_Mount != null ) + m_Mount.Delete(); + + m_Mount = null; + + base.OnAfterDelete(); + } + + public override DeathMoveResult OnParentDeath(Mobile parent) + { + if ( m_Mount != null ) + m_Mount.Rider = null; + + return DeathMoveResult.RemainEquiped; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Mount ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Mount = reader.ReadMobile() as BaseMount; + + if ( m_Mount == null ) + Delete(); + + break; + } + } + } + + public IMount Mount + { + get + { + return m_Mount; + } + } + } + + public enum BlockMountType + { + None = -1, + Dazed, + DismountRecovery + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Pets/Horse.cs b/Scripts/Mobiles/Animals/Pets/Horse.cs new file mode 100644 index 0000000..7097c29 --- /dev/null +++ b/Scripts/Mobiles/Animals/Pets/Horse.cs @@ -0,0 +1,72 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a horse corpse" )] + [TypeAlias( "Server.Mobiles.BrownHorse", "Server.Mobiles.DirtyHorse", "Server.Mobiles.GrayHorse", "Server.Mobiles.TanHorse" )] + public class Horse : BaseMount + { + private static int[] m_IDs = new int[] + { + 0xC8, 0x3E9F, + 0xE2, 0x3EA0, + 0xE4, 0x3EA1, + 0xCC, 0x3EA2 + }; + + [Constructable] + public Horse() : this( "a horse" ) + { + } + + [Constructable] + public Horse( string name ) : base( name, 0xE2, 0x3EA0, AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + int random = Utility.Random( 4 ); + + Body = m_IDs[random * 2]; + ItemID = m_IDs[random * 2 + 1]; + BaseSoundID = 0xA8; + Invulnerable = true; + + SetStr( 22, 98 ); + SetDex( 56, 75 ); + SetInt( 6, 10 ); + + SetHits( 28, 45 ); + SetMana( 0 ); + + SetDamage( 3, 4 ); + + SetSkill( SkillName.MagicResist, 25.1, 30.0 ); + SetSkill( SkillName.Tactics, 29.3, 44.0 ); + SetSkill( SkillName.HandToHand, 29.3, 44.0 ); + + Fame = 0; + Karma = 400; + ControlSlots = 2; + } + + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 10; } } + + public Horse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Pets/Llama.cs b/Scripts/Mobiles/Animals/Pets/Llama.cs new file mode 100644 index 0000000..14e687c --- /dev/null +++ b/Scripts/Mobiles/Animals/Pets/Llama.cs @@ -0,0 +1,60 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a llama corpse" )] + public class Llama : BaseMount + { + [Constructable] + public Llama() : this( "a llama" ) + { + } + + [Constructable] + public Llama( string name ) : base( name, 0xDC, 0x3EA6, AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Invulnerable = true; + + BaseSoundID = 0x3F3; + + SetStr( 21, 49 ); + SetDex( 56, 75 ); + SetInt( 16, 30 ); + + SetHits( 15, 27 ); + SetMana( 0 ); + + SetDamage( 3, 5 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 19.2, 29.0 ); + SetSkill( SkillName.HandToHand, 19.2, 29.0 ); + + Fame = 0; + Karma = 200; + ControlSlots = 2; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public Llama( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Pets/PackHorse.cs b/Scripts/Mobiles/Animals/Pets/PackHorse.cs new file mode 100644 index 0000000..438e450 --- /dev/null +++ b/Scripts/Mobiles/Animals/Pets/PackHorse.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Mobiles; +using Server.Items; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a horse corpse" )] + public class PackHorse : BaseCreature + { + [Constructable] + public PackHorse() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a pack horse"; + Body = 291; + BaseSoundID = 0xA8; + Invulnerable = true; + + SetStr( 44, 120 ); + SetDex( 36, 55 ); + SetInt( 6, 10 ); + + SetHits( 61, 80 ); + SetStam( 81, 100 ); + SetMana( 0 ); + + SetDamage( 5, 11 ); + + SetSkill( SkillName.MagicResist, 25.1, 30.0 ); + SetSkill( SkillName.Tactics, 29.3, 44.0 ); + SetSkill( SkillName.HandToHand, 29.3, 44.0 ); + + Fame = 0; + Karma = 400; + + VirtualArmor = 16; + ControlSlots = 2; + + Container pack = Backpack; + + if ( pack != null ) + pack.Delete(); + + pack = new StrongBackpack(); + pack.Movable = false; + + AddItem( pack ); + } + + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 10; } } + + public PackHorse( Serial serial ) : base( serial ) + { + } + + #region Pack Animal Methods + public override bool OnBeforeDeath() + { + if ( !base.OnBeforeDeath() ) + return false; + + PackAnimal.CombineBackpacks( this ); + + return true; + } + + public override DeathMoveResult GetInventoryMoveResultFor( Item item ) + { + return DeathMoveResult.MoveToCorpse; + } + + public override bool IsSnoop( Mobile from ) + { + if ( PackAnimal.CheckAccess( this, from ) ) + return false; + + return base.IsSnoop( from ); + } + + public override bool OnDragDrop( Mobile from, Item item ) + { + if ( PackAnimal.CheckAccess( this, from ) ) + { + AddToBackpack( item ); + return true; + } + + return base.OnDragDrop( from, item ); + } + + public override bool CheckNonlocalDrop( Mobile from, Item item, Item target ) + { + return PackAnimal.CheckAccess( this, from ); + } + + public override bool CheckNonlocalLift( Mobile from, Item item ) + { + return PackAnimal.CheckAccess( this, from ); + } + + public override void OnDoubleClick( Mobile from ) + { + PackAnimal.TryPackOpen( this, from ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + PackAnimal.GetContextMenuEntries( this, from, list ); + } + #endregion + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PackAnimalBackpackEntry : ContextMenuEntry + { + private BaseCreature m_Animal; + private Mobile m_From; + + public PackAnimalBackpackEntry( BaseCreature animal, Mobile from ) : base( 6145, 3 ) + { + m_Animal = animal; + m_From = from; + + if ( animal.IsDeadPet ) + Enabled = false; + } + + public override void OnClick() + { + PackAnimal.TryPackOpen( m_Animal, m_From ); + } + } + + public class PackAnimal + { + public static void GetContextMenuEntries( BaseCreature animal, Mobile from, List list ) + { + if ( CheckAccess( animal, from ) ) + list.Add( new PackAnimalBackpackEntry( animal, from ) ); + } + + public static bool CheckAccess( BaseCreature animal, Mobile from ) + { + if ( from == animal || from.AccessLevel >= AccessLevel.GameMaster ) + return true; + + if ( from.Alive && animal.Controlled && !animal.IsDeadPet && (from == animal.ControlMaster || from == animal.SummonMaster) ) + return true; + + return false; + } + + public static void CombineBackpacks( BaseCreature animal ) + { + Container pack = animal.Backpack; + + if ( pack != null ) + { + Container newPack = new Backpack(); + + for ( int i = pack.Items.Count - 1; i >= 0; --i ) + { + if ( i >= pack.Items.Count ) + continue; + + newPack.DropItem( pack.Items[i] ); + } + + pack.DropItem( newPack ); + } + } + + public static void TryPackOpen( BaseCreature animal, Mobile from ) + { + if ( animal.IsDeadPet ) + return; + + Container item = animal.Backpack; + + if ( item != null ) + from.Use( item ); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Pets/PackLlama.cs b/Scripts/Mobiles/Animals/Pets/PackLlama.cs new file mode 100644 index 0000000..075a27a --- /dev/null +++ b/Scripts/Mobiles/Animals/Pets/PackLlama.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using Server.Mobiles; +using Server.Items; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName("a llama corpse")] + public class PackLlama : BaseCreature + { + [Constructable] + public PackLlama() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a pack llama"; + Body = 292; + BaseSoundID = 0x3F3; + Invulnerable = true; + + SetStr( 52, 80 ); + SetDex( 36, 55 ); + SetInt( 16, 30 ); + + SetHits( 50 ); + SetStam( 86, 105 ); + SetMana( 0 ); + + SetDamage( 2, 6 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 19.2, 29.0 ); + SetSkill( SkillName.HandToHand, 19.2, 29.0 ); + + Fame = 0; + Karma = 200; + ControlSlots = 2; + + VirtualArmor = 16; + + Container pack = Backpack; + + if ( pack != null ) + pack.Delete(); + + pack = new StrongBackpack(); + pack.Movable = false; + + AddItem( pack ); + } + + public override int Meat{ get{ return 1; } } + + public PackLlama( Serial serial ) : base( serial ) + { + } + + #region Pack Animal Methods + public override bool OnBeforeDeath() + { + if ( !base.OnBeforeDeath() ) + return false; + + PackAnimal.CombineBackpacks( this ); + + return true; + } + + public override DeathMoveResult GetInventoryMoveResultFor( Item item ) + { + return DeathMoveResult.MoveToCorpse; + } + + public override bool IsSnoop( Mobile from ) + { + if ( PackAnimal.CheckAccess( this, from ) ) + return false; + + return base.IsSnoop( from ); + } + + public override bool OnDragDrop( Mobile from, Item item ) + { + if ( PackAnimal.CheckAccess( this, from ) ) + { + AddToBackpack( item ); + return true; + } + + return base.OnDragDrop( from, item ); + } + + public override bool CheckNonlocalDrop( Mobile from, Item item, Item target ) + { + return PackAnimal.CheckAccess( this, from ); + } + + public override bool CheckNonlocalLift( Mobile from, Item item ) + { + return PackAnimal.CheckAccess( this, from ); + } + + public override void OnDoubleClick( Mobile from ) + { + PackAnimal.TryPackOpen( this, from ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + PackAnimal.GetContextMenuEntries( this, from, list ); + } + #endregion + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Pig.cs b/Scripts/Mobiles/Animals/Pig.cs new file mode 100644 index 0000000..5f20dce --- /dev/null +++ b/Scripts/Mobiles/Animals/Pig.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a pig corpse" )] + public class Pig : BaseCreature + { + [Constructable] + public Pig() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a pig"; + Body = 203; + BaseSoundID = 0xC4; + + SetStr( 20 ); + SetDex( 20 ); + SetInt( 5 ); + + SetHits( 12 ); + SetMana( 0 ); + + SetDamage( 2, 4 ); + + SetSkill( SkillName.MagicResist, 5.0 ); + SetSkill( SkillName.Tactics, 5.0 ); + SetSkill( SkillName.HandToHand, 5.0 ); + + Fame = 0; + Karma = 150; + + VirtualArmor = 12; + } + + public override int Meat{ get{ return 1; } } + public override MeatType MeatType{ get{ return MeatType.Ham; } } + + public Pig(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Rodents/Bat.cs b/Scripts/Mobiles/Animals/Rodents/Bat.cs new file mode 100644 index 0000000..eec37cd --- /dev/null +++ b/Scripts/Mobiles/Animals/Rodents/Bat.cs @@ -0,0 +1,61 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a bat corpse" )] + public class Bat : BaseCreature + { + [Constructable] + public Bat() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a bat"; + Body = 43; + BaseSoundID = 0x270; + + SetStr( 91, 110 ); + SetDex( 91, 115 ); + SetInt( 26, 50 ); + + SetHits( 55, 66 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.MagicResist, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 30.1, 55.0 ); + + Fame = 1000; + Karma = -1000; + + VirtualArmor = 14; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override int GetIdleSound() + { + return 0x29B; + } + + public Bat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Rodents/CaveBat.cs b/Scripts/Mobiles/Animals/Rodents/CaveBat.cs new file mode 100644 index 0000000..a53be68 --- /dev/null +++ b/Scripts/Mobiles/Animals/Rodents/CaveBat.cs @@ -0,0 +1,80 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a bat corpse" )] + public class CaveBat : BaseCreature + { + [Constructable] + public CaveBat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a cave bat"; + Body = 185; + BaseSoundID = 0x270; + AnimationMod = 7; + + SetStr( 91, 110 ); + SetDex( 91, 115 ); + SetInt( 26, 50 ); + + SetHits( 55, 66 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.MagicResist, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 30.1, 55.0 ); + + Fame = 1000; + Karma = -1000; + + VirtualArmor = 14; + } + + public void DrainBlood( Mobile m ) + { + DoHarmful( m ); + new Blood().MoveToWorld( m.Location, m.Map ); + m.SendMessage( "The creature feeds on your blood!" ); + int toDrain = Utility.RandomMinMax( 2, 10 ); + m.PlaySound( 0x23F ); + Hits += toDrain; + m.Damage( toDrain, this ); + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + DrainBlood( defender ); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + DrainBlood( attacker ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public CaveBat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Rodents/GiantRat.cs b/Scripts/Mobiles/Animals/Rodents/GiantRat.cs new file mode 100644 index 0000000..8495307 --- /dev/null +++ b/Scripts/Mobiles/Animals/Rodents/GiantRat.cs @@ -0,0 +1,62 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a giant rat corpse" )] + [TypeAlias( "Server.Mobiles.Giantrat" )] + public class GiantRat : BaseCreature + { + [Constructable] + public GiantRat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant rat"; + Body = 215; + BaseSoundID = 0x188; + + SetStr( 32, 74 ); + SetDex( 46, 65 ); + SetInt( 16, 30 ); + + SetHits( 26, 39 ); + SetMana( 0 ); + + SetDamage( 4, 8 ); + + SetSkill( SkillName.MagicResist, 25.1, 30.0 ); + SetSkill( SkillName.Tactics, 29.3, 44.0 ); + SetSkill( SkillName.HandToHand, 29.3, 44.0 ); + + Fame = 300; + Karma = -300; + + VirtualArmor = 18; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 6; } } + + public GiantRat(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Rodents/Rabbit.cs b/Scripts/Mobiles/Animals/Rodents/Rabbit.cs new file mode 100644 index 0000000..8e59dda --- /dev/null +++ b/Scripts/Mobiles/Animals/Rodents/Rabbit.cs @@ -0,0 +1,64 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a hare corpse" )] + public class Rabbit : BaseCreature + { + [Constructable] + public Rabbit() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a rabbit"; + Body = 205; + + if ( 0.5 >= Utility.RandomDouble() ) + Hue = Utility.RandomAnimalHue(); + + SetStr( 6, 10 ); + SetDex( 26, 38 ); + SetInt( 6, 14 ); + + SetHits( 4, 6 ); + SetMana( 0 ); + + SetDamage( 1 ); + + SetSkill( SkillName.MagicResist, 5.0 ); + SetSkill( SkillName.Tactics, 5.0 ); + SetSkill( SkillName.HandToHand, 5.0 ); + + Fame = 0; + Karma = 0; + + VirtualArmor = 6; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 1; } } + + public override int GetAngerSound(){ return 0x0C9; } + public override int GetIdleSound(){ return 0x0C9; } + public override int GetAttackSound(){ return 0x0CA; } + public override int GetHurtSound(){ return 0x0CA; } + public override int GetDeathSound(){ return 0x0CB; } + + public Rabbit(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Rodents/Raccoon.cs b/Scripts/Mobiles/Animals/Rodents/Raccoon.cs new file mode 100644 index 0000000..9d03334 --- /dev/null +++ b/Scripts/Mobiles/Animals/Rodents/Raccoon.cs @@ -0,0 +1,59 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a raccoon corpse" )] + public class Raccoon : BaseCreature + { + [Constructable] + public Raccoon() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a raccoon"; + Body = 227; + + SetStr( 16, 20 ); + SetDex( 26, 38 ); + SetInt( 6, 14 ); + + SetHits( 6, 9 ); + SetMana( 0 ); + + SetDamage( Utility.RandomMinMax( 1, 3 ) ); + + SetSkill( SkillName.MagicResist, 5.0 ); + SetSkill( SkillName.Tactics, 15.0 ); + SetSkill( SkillName.HandToHand, 15.0 ); + + Fame = 0; + Karma = 0; + + VirtualArmor = 9; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 1; } } + + public override int GetAngerSound(){ return 0x0C9; } + public override int GetIdleSound(){ return 0x0C9; } + public override int GetAttackSound(){ return 0x0CA; } + public override int GetHurtSound(){ return 0x0CA; } + public override int GetDeathSound(){ return 0x0CB; } + + public Raccoon(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Rodents/Rat.cs b/Scripts/Mobiles/Animals/Rodents/Rat.cs new file mode 100644 index 0000000..00ab4ed --- /dev/null +++ b/Scripts/Mobiles/Animals/Rodents/Rat.cs @@ -0,0 +1,60 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a rat corpse" )] + public class Rat : BaseCreature + { + [Constructable] + public Rat() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a rat"; + Body = 238; + BaseSoundID = 0xCC; + + SetStr( 9 ); + SetDex( 35 ); + SetInt( 5 ); + + SetHits( 6 ); + SetMana( 0 ); + + SetDamage( 1, 2 ); + + SetSkill( SkillName.MagicResist, 4.0 ); + SetSkill( SkillName.Tactics, 4.0 ); + SetSkill( SkillName.HandToHand, 4.0 ); + + Fame = 150; + Karma = -150; + + VirtualArmor = 6; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override int Meat{ get{ return 1; } } + + public Rat(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Rodents/Squirrel.cs b/Scripts/Mobiles/Animals/Rodents/Squirrel.cs new file mode 100644 index 0000000..43d7a12 --- /dev/null +++ b/Scripts/Mobiles/Animals/Rodents/Squirrel.cs @@ -0,0 +1,59 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a squirrel corpse" )] + public class Squirrel : BaseCreature + { + [Constructable] + public Squirrel() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a squirrel"; + Body = 229; + + SetStr( 6, 10 ); + SetDex( 26, 38 ); + SetInt( 6, 14 ); + + SetHits( 4, 6 ); + SetMana( 0 ); + + SetDamage( 1 ); + + SetSkill( SkillName.MagicResist, 5.0 ); + SetSkill( SkillName.Tactics, 5.0 ); + SetSkill( SkillName.HandToHand, 5.0 ); + + Fame = 0; + Karma = 0; + + VirtualArmor = 6; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 1; } } + + public override int GetAngerSound(){ return 0x0C9; } + public override int GetIdleSound(){ return 0x0C9; } + public override int GetAttackSound(){ return 0x0CA; } + public override int GetHurtSound(){ return 0x0CA; } + public override int GetDeathSound(){ return 0x0CB; } + + public Squirrel(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Rodents/VampireBat.cs b/Scripts/Mobiles/Animals/Rodents/VampireBat.cs new file mode 100644 index 0000000..d78927f --- /dev/null +++ b/Scripts/Mobiles/Animals/Rodents/VampireBat.cs @@ -0,0 +1,79 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a bat corpse" )] + public class VampireBat : BaseCreature + { + [Constructable] + public VampireBat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a vampire bat"; + Body = 119; + BaseSoundID = 0x270; + + SetStr( 91, 110 ); + SetDex( 91, 115 ); + SetInt( 26, 50 ); + + SetHits( 55, 66 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.MagicResist, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 30.1, 55.0 ); + + Fame = 1000; + Karma = -1000; + + VirtualArmor = 14; + } + + public void DrainBlood( Mobile m ) + { + DoHarmful( m ); + new Blood().MoveToWorld( m.Location, m.Map ); + m.SendMessage( "The creature feeds on your blood!" ); + int toDrain = Utility.RandomMinMax( 2, 10 ); + m.PlaySound( 0x23F ); + Hits += toDrain; + m.Damage( toDrain, this ); + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + DrainBlood( defender ); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + DrainBlood( attacker ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public VampireBat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Sheep.cs b/Scripts/Mobiles/Animals/Sheep.cs new file mode 100644 index 0000000..81f9e45 --- /dev/null +++ b/Scripts/Mobiles/Animals/Sheep.cs @@ -0,0 +1,102 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "a sheep corpse" )] + public class Sheep : BaseCreature, ICarvable + { + private DateTime m_NextWoolTime; + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime NextWoolTime + { + get{ return m_NextWoolTime; } + set{ m_NextWoolTime = value; Body = ( DateTime.Now >= m_NextWoolTime ) ? 0xCF : 0xDF; } + } + + public void Carve( Mobile from, Item item ) + { + if ( DateTime.Now < m_NextWoolTime ) + { + // This sheep is not yet ready to be shorn. + PrivateOverheadMessage( MessageType.Regular, 0x3B2, 500449, from.NetState ); + return; + } + + from.SendLocalizedMessage( 500452 ); // You place the gathered wool into your backpack. + from.AddToBackpack( new Wool( 1 ) ); + + NextWoolTime = DateTime.Now + TimeSpan.FromHours( 3.0 ); // TODO: Proper time delay + } + + public override void OnThink() + { + base.OnThink(); + Body = ( DateTime.Now >= m_NextWoolTime ) ? 0xCF : 0xDF; + } + + [Constructable] + public Sheep() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a sheep"; + Body = 207; + BaseSoundID = 0xD6; + + SetStr( 19 ); + SetDex( 25 ); + SetInt( 5 ); + + SetHits( 12 ); + SetMana( 0 ); + + SetDamage( 1, 2 ); + + SetSkill( SkillName.MagicResist, 5.0 ); + SetSkill( SkillName.Tactics, 6.0 ); + SetSkill( SkillName.HandToHand, 5.0 ); + + Fame = 0; + Karma = 200; + + VirtualArmor = 6; + } + + public override int Meat{ get{ return 2; } } + public override MeatType MeatType{ get{ return MeatType.Lamb; } } + + public override int Wool{ get{ return (Body == 0xCF ? 3 : 0); } } + + public Sheep( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); + + writer.WriteDeltaTime( m_NextWoolTime ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + NextWoolTime = reader.ReadDeltaTime(); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/Walrus.cs b/Scripts/Mobiles/Animals/Walrus.cs new file mode 100644 index 0000000..f2027f6 --- /dev/null +++ b/Scripts/Mobiles/Animals/Walrus.cs @@ -0,0 +1,56 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a walrus corpse" )] + public class Walrus : BaseCreature + { + [Constructable] + public Walrus() : base( AIType.AI_Timid, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a walrus"; + Body = 221; + BaseSoundID = 0xE0; + + SetStr( 21, 29 ); + SetDex( 46, 55 ); + SetInt( 16, 20 ); + + SetHits( 14, 17 ); + SetMana( 0 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 19.2, 29.0 ); + SetSkill( SkillName.HandToHand, 19.2, 29.0 ); + + Fame = 150; + Karma = 0; + + VirtualArmor = 18; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public Walrus(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Animals/WoolyBanta.cs b/Scripts/Mobiles/Animals/WoolyBanta.cs new file mode 100644 index 0000000..eda1386 --- /dev/null +++ b/Scripts/Mobiles/Animals/WoolyBanta.cs @@ -0,0 +1,60 @@ +using System; +using Server; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; +using System.Collections.Generic; +using Server.Mobiles; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a WoolyBanta corpse" )] + public class WoolyBanta : BaseCreature + { + [Constructable] + public WoolyBanta() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a wooly banta"; + Body = 264; + BaseSoundID = 0x508; + + SetStr( 176, 200 ); + SetDex( 26, 45 ); + SetInt( 23, 47 ); + + SetHits( 146, 160 ); + SetMana( 0 ); + + SetDamage( 8, 16 ); + + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 1000; + Karma = 0; + + VirtualArmor = 28; + } + + public override int Meat{ get{ return 18; } } + public override int Hides{ get{ return 24; } } + + public WoolyBanta( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/AIControlMobileTarget.cs b/Scripts/Mobiles/Base/AI/AIControlMobileTarget.cs new file mode 100644 index 0000000..c11c818 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/AIControlMobileTarget.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Mobiles; +using Server.Targeting; + +namespace Server.Targets +{ + public class AIControlMobileTarget : Target + { + private List m_List; + private OrderType m_Order; + + public OrderType Order { + get { + return m_Order; + } + } + + public AIControlMobileTarget( BaseAI ai, OrderType order ) : base( -1, false, ( order == OrderType.Attack ? TargetFlags.Harmful : TargetFlags.None ) ) + { + m_List = new List(); + m_Order = order; + + AddAI( ai ); + } + + public void AddAI( BaseAI ai ) + { + if ( !m_List.Contains( ai ) ) + m_List.Add( ai ); + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) { + Mobile m = (Mobile)o; + for ( int i = 0; i < m_List.Count; ++i ) + m_List[i].EndPickTarget( from, m, m_Order ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/AnimalAI.cs b/Scripts/Mobiles/Base/AI/AnimalAI.cs new file mode 100644 index 0000000..87ec9b5 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/AnimalAI.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +// Ideas +// When you run on animals the panic +// When if ( distance < 8 && Utility.RandomDouble() * Math.Sqrt( (8 - distance) / 6 ) >= incoming.Skills[SkillName.AnimalTaming].Value ) +// More your close, the more it can panic +/* + * AnimalHunterAI, AnimalHidingAI, AnimalDomesticAI... + * + */ + +namespace Server.Mobiles +{ + public class AnimalAI : BaseAI + { + public AnimalAI(BaseCreature m) : base (m) + { + } + + public override bool DoActionWander() + { + // Old: +#if false + if (AcquireFocusMob(m_Mobile.RangePerception, m_Mobile.FightMode, true, false, true)) + { + m_Mobile.DebugSay( "There is something near, I go away" ); + Action = ActionType.Backoff; + } + else if ( m_Mobile.IsHurt() || m_Mobile.Combatant != null ) + { + m_Mobile.DebugSay( "I am hurt or being attacked, I flee" ); + Action = ActionType.Flee; + } + else + { + base.DoActionWander(); + } + + return true; +#endif + + // New, only flee @ 10% + + double hitPercent = (double)m_Mobile.Hits / m_Mobile.HitsMax; + + if ( !m_Mobile.Summoned && !m_Mobile.Controlled && hitPercent < 0.1 ) // Less than 10% health + { + m_Mobile.DebugSay( "I am low on health!" ); + Action = ActionType.Flee; + } + else if ( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have detected {0}, attacking", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + base.DoActionWander(); + } + + return true; + } + + public override bool DoActionCombat() + { + Mobile combatant = m_Mobile.Combatant; + + if ( combatant == null || combatant.Deleted || combatant.Map != m_Mobile.Map ) + { + m_Mobile.DebugSay( "My combatant is gone.." ); + + Action = ActionType.Wander; + + return true; + } + + if ( WalkMobileRange( combatant, 1, true, m_Mobile.RangeFight, m_Mobile.RangeFight ) ) + { + m_Mobile.Direction = m_Mobile.GetDirectionTo( combatant ); + } + else + { + if ( m_Mobile.GetDistanceToSqrt( combatant ) > m_Mobile.RangePerception + 1 ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I cannot find {0}", combatant.Name ); + + Action = ActionType.Wander; + + return true; + } + else + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I should be closer to {0}", combatant.Name ); + } + } + + if ( !m_Mobile.Controlled && !m_Mobile.Summoned ) + { + double hitPercent = (double)m_Mobile.Hits / m_Mobile.HitsMax; + + if ( hitPercent < 0.1 ) + { + m_Mobile.DebugSay( "I am low on health!" ); + Action = ActionType.Flee; + } + } + + return true; + } + + public override bool DoActionBackoff() + { + double hitPercent = (double)m_Mobile.Hits / m_Mobile.HitsMax; + + if ( !m_Mobile.Summoned && !m_Mobile.Controlled && hitPercent < 0.1 ) // Less than 10% health + { + Action = ActionType.Flee; + } + else + { + if (AcquireFocusMob(m_Mobile.RangePerception * 2, FightMode.Closest, true, false , true)) + { + if ( WalkMobileRange(m_Mobile.FocusMob, 1, false, m_Mobile.RangePerception, m_Mobile.RangePerception * 2) ) + { + m_Mobile.DebugSay( "Well, here I am safe" ); + Action = ActionType.Wander; + } + } + else + { + m_Mobile.DebugSay( "I have lost my focus, lets relax" ); + Action = ActionType.Wander; + } + } + + return true; + } + + public override bool DoActionFlee() + { + AcquireFocusMob(m_Mobile.RangePerception * 2, m_Mobile.FightMode, true, false, true); + + if ( m_Mobile.FocusMob == null ) + m_Mobile.FocusMob = m_Mobile.Combatant; + + return base.DoActionFlee(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/ArcherAI.cs b/Scripts/Mobiles/Base/AI/ArcherAI.cs new file mode 100644 index 0000000..fbf7704 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/ArcherAI.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; +using Server.Mobiles; +using Server.Items; + +namespace Server.Mobiles +{ + public class ArcherAI : BaseAI + { + public ArcherAI(BaseCreature m) : base (m) + { + } + + public override bool DoActionWander() + { + m_Mobile.DebugSay( "I have no combatant" ); + + if (AcquireFocusMob(m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true)) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have detected {0} and I will attack", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + return base.DoActionWander(); + } + + return true; + } + + public override bool DoActionCombat() + { + if ( m_Mobile.Combatant == null || m_Mobile.Combatant.Deleted || !m_Mobile.Combatant.Alive || m_Mobile.Combatant.IsDeadBondedPet ) + { + m_Mobile.DebugSay("My combatant is deleted"); + Action = ActionType.Guard; + return true; + } + + if ( (m_Mobile.LastMoveTime + TimeSpan.FromSeconds( 1.0 )) < DateTime.Now ) + { + if (WalkMobileRange(m_Mobile.Combatant, 1, true, m_Mobile.RangeFight, m_Mobile.Weapon.MaxRange)) + { + // Be sure to face the combatant + m_Mobile.Direction = m_Mobile.GetDirectionTo(m_Mobile.Combatant.Location); + } + else + { + if ( m_Mobile.Combatant != null ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I am still not in range of {0}", m_Mobile.Combatant.Name); + + if ( (int) m_Mobile.GetDistanceToSqrt( m_Mobile.Combatant ) > m_Mobile.RangePerception + 1 ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have lost {0}", m_Mobile.Combatant.Name); + + m_Mobile.Combatant = null; + Action = ActionType.Guard; + return true; + } + } + } + } + + // When we have no ammo, we flee + Container pack = m_Mobile.Backpack; + + if ( pack == null || pack.FindItemByType( typeof( Arrow ) ) == null ) + { + Action = ActionType.Flee; + return true; + } + + + // At 20% we should check if we must leave + if ( m_Mobile.Hits < m_Mobile.HitsMax*20/100 ) + { + bool bFlee = false; + // if my current hits are more than my opponent, i don't care + if ( m_Mobile.Combatant != null && m_Mobile.Hits < m_Mobile.Combatant.Hits) + { + int iDiff = m_Mobile.Combatant.Hits - m_Mobile.Hits; + + if ( Utility.Random(0, 100) > 10 + iDiff) // 10% to flee + the diff of hits + { + bFlee = true; + } + } + else if ( m_Mobile.Combatant != null && m_Mobile.Hits >= m_Mobile.Combatant.Hits) + { + if ( Utility.Random(0, 100) > 10 ) // 10% to flee + { + bFlee = true; + } + } + + if (bFlee) + { + Action = ActionType.Flee; + } + } + + return true; + } + + public override bool DoActionGuard() + { + if ( AcquireFocusMob(m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have detected {0}, attacking", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + base.DoActionGuard(); + } + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/BaseAI.cs b/Scripts/Mobiles/Base/AI/BaseAI.cs new file mode 100644 index 0000000..41a6c49 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/BaseAI.cs @@ -0,0 +1,2594 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Targeting; +using Server.Targets; +using Server.Network; +using Server.Regions; +using Server.ContextMenus; +using MoveImpl=Server.Movement.MovementImpl; +using Server.Spells; + +namespace Server.Mobiles +{ + public enum AIType + { + AI_Use_Default, + AI_Melee, + AI_Animal, + AI_Archer, + AI_Healer, + AI_Vendor, + AI_Mage, + AI_Berserk, + AI_Predator, + AI_Thief, + AI_Citizen, + AI_Timid + } + + public enum ActionType + { + Wander, + Combat, + Guard, + Flee, + Backoff, + Interact + } + + public abstract class BaseAI + { + public Timer m_Timer; + protected ActionType m_Action; + private DateTime m_NextStopGuard; + + public BaseCreature m_Mobile; + + public BaseAI( BaseCreature m ) + { + m_Mobile = m; + + m_Timer = new AITimer( this ); + + bool activate; + + if( !m.PlayerRangeSensitive ) + activate = true; + else if( World.Loading ) + activate = false; + else if( m.Map == null || m.Map == Map.Internal || !m.Map.GetSector( m ).Active ) + activate = false; + else + activate = true; + + if( activate ) + m_Timer.Start(); + + Action = ActionType.Wander; + } + + public ActionType Action + { + get + { + return m_Action; + } + set + { + m_Action = value; + OnActionChanged(); + } + } + + public virtual bool WasNamed( string speech ) + { + string name = m_Mobile.Name; + + return (name != null && Insensitive.StartsWith( speech, name )); + } + + private class InternalEntry : ContextMenuEntry + { + private Mobile m_From; + private BaseCreature m_Mobile; + private BaseAI m_AI; + private OrderType m_Order; + + public InternalEntry( Mobile from, int number, int range, BaseCreature mobile, BaseAI ai, OrderType order ) + : base( number, range ) + { + m_From = from; + m_Mobile = mobile; + m_AI = ai; + m_Order = order; + + if( mobile.IsDeadPet && (order == OrderType.Guard || order == OrderType.Attack || order == OrderType.Transfer || order == OrderType.Drop) ) + Enabled = false; + } + + public override void OnClick() + { + if( !m_Mobile.Deleted && m_Mobile.Controlled && m_From.CheckAlive() ) + { + if( m_Mobile.IsDeadPet && (m_Order == OrderType.Guard || m_Order == OrderType.Attack || m_Order == OrderType.Transfer || m_Order == OrderType.Drop) ) + return; + + bool isOwner = (m_From == m_Mobile.ControlMaster); + bool isFriend = (!isOwner && m_Mobile.IsPetFriend( m_From )); + + if( !isOwner && !isFriend ) + return; + else if( isFriend && m_Order != OrderType.Follow && m_Order != OrderType.Stay && m_Order != OrderType.Stop ) + return; + + switch( m_Order ) + { + case OrderType.Follow: + case OrderType.Attack: + case OrderType.Transfer: + case OrderType.Friend: + case OrderType.Unfriend: + { + if( m_Order == OrderType.Transfer && m_From.HasTrade ) + m_From.SendLocalizedMessage( 1010507 ); // You cannot transfer a pet with a trade pending + else if( m_Order == OrderType.Friend && m_From.HasTrade ) + m_From.SendLocalizedMessage( 1070947 ); // You cannot friend a pet with a trade pending + else + m_AI.BeginPickTarget( m_From, m_Order ); + + break; + } + case OrderType.Release: + { + if( m_Mobile.Summoned ) + goto default; + else + m_From.SendGump( new Gumps.ConfirmReleaseGump( m_From, m_Mobile ) ); + + break; + } + default: + { + if( m_Mobile.CheckControlChance( m_From ) ) + m_Mobile.ControlOrder = m_Order; + + break; + } + } + } + } + } + + public virtual void GetContextMenuEntries( Mobile from, List list ) + { + if( from.Alive && m_Mobile.Controlled && from.InRange( m_Mobile, 14 ) ) + { + if( m_Mobile.Invulnerable ) + { + list.Add( new InternalEntry( from, 6108, 14, m_Mobile, this, OrderType.Follow ) ); // Command: Follow + list.Add( new InternalEntry( from, 6112, 14, m_Mobile, this, OrderType.Stop ) ); // Command: Stop + list.Add( new InternalEntry( from, 6114, 14, m_Mobile, this, OrderType.Stay ) ); // Command: Stay + } + else if( from == m_Mobile.ControlMaster ) + { + list.Add( new InternalEntry( from, 6107, 14, m_Mobile, this, OrderType.Guard ) ); // Command: Guard + list.Add( new InternalEntry( from, 6108, 14, m_Mobile, this, OrderType.Follow ) ); // Command: Follow + + if( m_Mobile.CanDrop ) + list.Add( new InternalEntry( from, 6109, 14, m_Mobile, this, OrderType.Drop ) ); // Command: Drop + + list.Add( new InternalEntry( from, 6111, 14, m_Mobile, this, OrderType.Attack ) ); // Command: Kill + + list.Add( new InternalEntry( from, 6112, 14, m_Mobile, this, OrderType.Stop ) ); // Command: Stop + list.Add( new InternalEntry( from, 6114, 14, m_Mobile, this, OrderType.Stay ) ); // Command: Stay + + if( !m_Mobile.Summoned ) + { + list.Add( new InternalEntry( from, 6110, 14, m_Mobile, this, OrderType.Friend ) ); // Add Friend + list.Add( new InternalEntry( from, 6099, 14, m_Mobile, this, OrderType.Unfriend ) ); // Remove Friend + list.Add( new InternalEntry( from, 6113, 14, m_Mobile, this, OrderType.Transfer ) ); // Transfer + } + + list.Add( new InternalEntry( from, 6118, 14, m_Mobile, this, OrderType.Release ) ); // Release + } + else if( m_Mobile.IsPetFriend( from ) ) + { + list.Add( new InternalEntry( from, 6108, 14, m_Mobile, this, OrderType.Follow ) ); // Command: Follow + list.Add( new InternalEntry( from, 6112, 14, m_Mobile, this, OrderType.Stop ) ); // Command: Stop + list.Add( new InternalEntry( from, 6114, 14, m_Mobile, this, OrderType.Stay ) ); // Command: Stay + } + } + } + + public virtual void BeginPickTarget( Mobile from, OrderType order ) + { + if( m_Mobile.Deleted || !m_Mobile.Controlled || !from.InRange( m_Mobile, 14 ) || from.Map != m_Mobile.Map ) + return; + + bool isOwner = (from == m_Mobile.ControlMaster); + bool isFriend = (!isOwner && m_Mobile.IsPetFriend( from )); + + if( !isOwner && !isFriend ) + return; + else if( isFriend && order != OrderType.Follow && order != OrderType.Stay && order != OrderType.Stop ) + return; + + if( from.Target == null ) + { + if( order == OrderType.Transfer ) + from.SendLocalizedMessage( 502038 ); // Click on the person to transfer ownership to. + else if( order == OrderType.Friend ) + from.SendLocalizedMessage( 502020 ); // Click on the player whom you wish to make a co-owner. + else if( order == OrderType.Unfriend ) + from.SendLocalizedMessage( 1070948 ); // Click on the player whom you wish to remove as a co-owner. + + from.Target = new AIControlMobileTarget( this, order ); + } + else if( from.Target is AIControlMobileTarget ) + { + AIControlMobileTarget t = (AIControlMobileTarget)from.Target; + + if( t.Order == order ) + t.AddAI( this ); + } + } + + public virtual void OnAggressiveAction( Mobile aggressor ) + { + Mobile currentCombat = m_Mobile.Combatant; + + if( currentCombat != null && !aggressor.Hidden && currentCombat != aggressor && m_Mobile.GetDistanceToSqrt( currentCombat ) > m_Mobile.GetDistanceToSqrt( aggressor ) ) + m_Mobile.Combatant = aggressor; + } + + public virtual void EndPickTarget( Mobile from, Mobile target, OrderType order ) + { + if( m_Mobile.Deleted || !m_Mobile.Controlled || !from.InRange( m_Mobile, 14 ) || from.Map != m_Mobile.Map || !from.CheckAlive() ) + return; + + bool isOwner = (from == m_Mobile.ControlMaster); + bool isFriend = (!isOwner && m_Mobile.IsPetFriend( from )); + + if( !isOwner && !isFriend ) + return; + else if( isFriend && order != OrderType.Follow && order != OrderType.Stay && order != OrderType.Stop ) + return; + + if( m_Mobile.CheckControlChance( from ) ) + { + m_Mobile.ControlTarget = target; + m_Mobile.ControlOrder = order; + } + } + + public virtual bool HandlesOnSpeech( Mobile from ) + { + if( from.AccessLevel >= AccessLevel.GameMaster ) + return true; + + if( from.Alive && m_Mobile.Controlled && m_Mobile.Commandable && (from == m_Mobile.ControlMaster || m_Mobile.IsPetFriend( from )) ) + return true; + + return (from.Alive && from.InRange( m_Mobile.Location, 3 ) && m_Mobile.IsHumanInTown()); + } + + private static SkillName[] m_KeywordTable = new SkillName[] + { + SkillName.Parry, + SkillName.Healing, + SkillName.Hiding, + SkillName.Stealing, + SkillName.Peacemaking, + SkillName.Searching, + SkillName.Discordance, + SkillName.Concentration, + SkillName.Provocation, + SkillName.Lockpicking, + SkillName.Magery, + SkillName.MagicResist, + SkillName.Tactics, + SkillName.RemoveTrap, + SkillName.Musicianship, + SkillName.Poisoning, + SkillName.Archery, + SkillName.Tracking, + SkillName.Stealth, + SkillName.Swords, + SkillName.Bludgeoning, + SkillName.Fencing, + SkillName.HandToHand, + SkillName.Meditation + }; + + public virtual void OnSpeech( SpeechEventArgs e ) + { + if( e.Mobile.Alive && e.Mobile.InRange( m_Mobile.Location, 3 ) && m_Mobile.IsHumanInTown() ) + { + if( e.HasKeyword( 0x9D ) && WasNamed( e.Speech ) ) // *move* + { + if( m_Mobile.Combatant != null ) + { + // I am too busy fighting to deal with thee! + m_Mobile.PublicOverheadMessage( MessageType.Regular, 0x3B2, 501482 ); + } + else + { + // Excuse me? + m_Mobile.PublicOverheadMessage( MessageType.Regular, 0x3B2, 501516 ); + WalkRandomInHome( 2, 2, 1 ); + } + } + else if( e.HasKeyword( 0x9E ) && WasNamed( e.Speech ) ) // *time* + { + if( m_Mobile.Combatant != null ) + { + // I am too busy fighting to deal with thee! + m_Mobile.PublicOverheadMessage( MessageType.Regular, 0x3B2, 501482 ); + } + else + { + int generalNumber; + string exactTime; + + Clock.GetTime( m_Mobile, out generalNumber, out exactTime ); + + m_Mobile.PublicOverheadMessage( MessageType.Regular, 0x3B2, generalNumber ); + } + } + else if( e.HasKeyword( 0x6C ) && WasNamed( e.Speech ) ) // *train + { + if( m_Mobile.Combatant != null ) + { + // I am too busy fighting to deal with thee! + m_Mobile.PublicOverheadMessage( MessageType.Regular, 0x3B2, 501482 ); + } + else + { + bool foundSomething = false; + + Skills ourSkills = m_Mobile.Skills; + Skills theirSkills = e.Mobile.Skills; + + for( int i = 0; i < ourSkills.Length && i < theirSkills.Length; ++i ) + { + Skill skill = ourSkills[i]; + Skill theirSkill = theirSkills[i]; + + if( skill != null && theirSkill != null && skill.Base >= 60.0 && m_Mobile.CheckTeach( skill.SkillName, e.Mobile ) ) + { + double toTeach = skill.Base / 3.0; + + if( toTeach > 42.0 ) + toTeach = 42.0; + + if( toTeach > theirSkill.Base ) + { + int number = 1043059 + i; + + if( number > 1043107 ) + continue; + + if( !foundSomething ) + m_Mobile.Say( 1043058 ); // I can train the following: + + m_Mobile.Say( number ); + + foundSomething = true; + } + } + } + + if( !foundSomething ) + m_Mobile.Say( 501505 ); // Alas, I cannot teach thee anything. + } + } + else + { + SkillName toTrain = (SkillName)(-1); + + for( int i = 0; toTrain == (SkillName)(-1) && i < e.Keywords.Length; ++i ) + { + int keyword = e.Keywords[i]; + + if( keyword >= 0x6D && keyword <= 0x9C ) + { + int index = keyword - 0x6D; + + if( index >= 0 && index < m_KeywordTable.Length ) + toTrain = m_KeywordTable[index]; + } + } + + if( toTrain != (SkillName)(-1) && WasNamed( e.Speech ) ) + { + if( m_Mobile.Combatant != null ) + { + // I am too busy fighting to deal with thee! + m_Mobile.PublicOverheadMessage( MessageType.Regular, 0x3B2, 501482 ); + } + else + { + Skills skills = m_Mobile.Skills; + Skill skill = skills[toTrain]; + + if( skill == null || skill.Base < 60.0 || !m_Mobile.CheckTeach( toTrain, e.Mobile ) ) + { + m_Mobile.Say( 501507 ); // 'Tis not something I can teach thee of. + } + else + { + m_Mobile.Teach( toTrain, e.Mobile, 0, false ); + } + } + } + } + } + + if( m_Mobile.Controlled && m_Mobile.Commandable ) + { + m_Mobile.DebugSay( "Listening..." ); + + bool isOwner = (e.Mobile == m_Mobile.ControlMaster); + bool isFriend = (!isOwner && m_Mobile.IsPetFriend( e.Mobile )); + + if( e.Mobile.Alive && (isOwner || isFriend) ) + { + m_Mobile.DebugSay( "It's from my master" ); + + int[] keywords = e.Keywords; + string speech = e.Speech; + + // First, check the all* + for( int i = 0; i < keywords.Length; ++i ) + { + int keyword = keywords[i]; + + switch( keyword ) + { + case 0x164: // all come + { + if( !isOwner ) + break; + + if( m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Come; + } + + return; + } + case 0x165: // all follow + { + BeginPickTarget( e.Mobile, OrderType.Follow ); + return; + } + case 0x166: // all guard + case 0x16B: // all guard me + { + if( !isOwner ) + break; + + if( m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Guard; + } + return; + } + case 0x167: // all stop + { + if( m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Stop; + } + return; + } + case 0x168: // all kill + case 0x169: // all attack + { + if( !isOwner ) + break; + + BeginPickTarget( e.Mobile, OrderType.Attack ); + return; + } + case 0x16C: // all follow me + { + if( m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = e.Mobile; + m_Mobile.ControlOrder = OrderType.Follow; + } + return; + } + case 0x170: // all stay + { + if( m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Stay; + } + return; + } + } + } + + // No all*, so check *command + for( int i = 0; i < keywords.Length; ++i ) + { + int keyword = keywords[i]; + + switch( keyword ) + { + case 0x155: // *come + { + if( !isOwner ) + break; + + if( WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Come; + } + + return; + } + case 0x156: // *drop + { + if( !isOwner ) + break; + + if( !m_Mobile.IsDeadPet && !m_Mobile.Summoned && WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Drop; + } + + return; + } + case 0x15A: // *follow + { + if( WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + BeginPickTarget( e.Mobile, OrderType.Follow ); + + return; + } + case 0x15B: // *friend + { + if( !isOwner ) + break; + + if( WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + if( m_Mobile.Summoned ) + e.Mobile.SendLocalizedMessage( 1005481 ); // Summoned creatures are loyal only to their summoners. + else if( e.Mobile.HasTrade ) + e.Mobile.SendLocalizedMessage( 1070947 ); // You cannot friend a pet with a trade pending + else + BeginPickTarget( e.Mobile, OrderType.Friend ); + } + + return; + } + case 0x15C: // *guard + { + if( !isOwner ) + break; + + if( !m_Mobile.IsDeadPet && WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Guard; + } + + return; + } + case 0x15D: // *kill + case 0x15E: // *attack + { + if( !isOwner ) + break; + + if( !m_Mobile.IsDeadPet && WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + BeginPickTarget( e.Mobile, OrderType.Attack ); + + return; + } + case 0x161: // *stop + { + if( WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Stop; + } + + return; + } + case 0x163: // *follow me + { + if( WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = e.Mobile; + m_Mobile.ControlOrder = OrderType.Follow; + } + + return; + } + case 0x16D: // *release + { + if( !isOwner ) + break; + + if( WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + if( !m_Mobile.Summoned ) + { + e.Mobile.SendGump( new Gumps.ConfirmReleaseGump( e.Mobile, m_Mobile ) ); + } + else + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Release; + } + } + + return; + } + case 0x16E: // *transfer + { + if( !isOwner ) + break; + + if( !m_Mobile.IsDeadPet && WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + if( m_Mobile.Summoned ) + e.Mobile.SendLocalizedMessage( 1005487 ); // You cannot transfer ownership of a summoned creature. + else if( e.Mobile.HasTrade ) + e.Mobile.SendLocalizedMessage( 1010507 ); // You cannot transfer a pet with a trade pending + else + BeginPickTarget( e.Mobile, OrderType.Transfer ); + } + + return; + } + case 0x16F: // *stay + { + if( WasNamed( speech ) && m_Mobile.CheckControlChance( e.Mobile ) ) + { + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Stay; + } + + return; + } + } + } + } + } + else + { + if( e.Mobile.AccessLevel >= AccessLevel.GameMaster ) + { + m_Mobile.DebugSay( "It's from a GM" ); + + if( m_Mobile.FindMyName( e.Speech, true ) ) + { + string[] str = e.Speech.Split( ' ' ); + int i; + + for( i=0; i < str.Length; i++ ) + { + string word = str[i]; + + if( Insensitive.Equals( word, "obey" ) ) + { + m_Mobile.SetControlMaster( e.Mobile ); + + if( m_Mobile.Summoned ) + m_Mobile.SummonMaster = e.Mobile; + + return; + } + } + } + } + } + } + + public virtual bool Think() + { + if( m_Mobile.Deleted ) + return false; + + if( CheckFlee() ) + return true; + + switch( Action ) + { + case ActionType.Wander: + m_Mobile.OnActionWander(); + return DoActionWander(); + + case ActionType.Combat: + m_Mobile.OnActionCombat(); + return DoActionCombat(); + + case ActionType.Guard: + m_Mobile.OnActionGuard(); + return DoActionGuard(); + + case ActionType.Flee: + m_Mobile.OnActionFlee(); + return DoActionFlee(); + + case ActionType.Interact: + m_Mobile.OnActionInteract(); + return DoActionInteract(); + + case ActionType.Backoff: + m_Mobile.OnActionBackoff(); + return DoActionBackoff(); + + default: + return false; + } + } + + public virtual void OnActionChanged() + { + switch( Action ) + { + case ActionType.Wander: + m_Mobile.Warmode = false; + m_Mobile.Combatant = null; + m_Mobile.FocusMob = null; + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + break; + + case ActionType.Combat: + m_Mobile.Warmode = true; + m_Mobile.FocusMob = null; + m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; + break; + + case ActionType.Guard: + m_Mobile.Warmode = true; + m_Mobile.FocusMob = null; + m_Mobile.Combatant = null; + m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; + m_NextStopGuard = DateTime.Now + TimeSpan.FromSeconds( 10 ); + m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; + break; + + case ActionType.Flee: + m_Mobile.Warmode = true; + m_Mobile.FocusMob = null; + m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; + break; + + case ActionType.Interact: + m_Mobile.Warmode = false; + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + break; + + case ActionType.Backoff: + m_Mobile.Warmode = false; + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + break; + } + } + + public virtual bool OnAtWayPoint() + { + return true; + } + + public virtual bool DoActionWander() + { + if( CheckHerding() ) + { + m_Mobile.DebugSay( "Praise the shepherd!" ); + } + else if( m_Mobile.CurrentWayPoint != null ) + { + WayPoint point = m_Mobile.CurrentWayPoint; + if( (point.X != m_Mobile.Location.X || point.Y != m_Mobile.Location.Y) && point.Map == m_Mobile.Map && point.Parent == null && !point.Deleted ) + { + m_Mobile.DebugSay( "I will move towards my waypoint." ); + DoMove( m_Mobile.GetDirectionTo( m_Mobile.CurrentWayPoint ) ); + } + else if( OnAtWayPoint() ) + { + m_Mobile.DebugSay( "I will go to the next waypoint" ); + m_Mobile.CurrentWayPoint = point.NextPoint; + if( point.NextPoint != null && point.NextPoint.Deleted ) + m_Mobile.CurrentWayPoint = point.NextPoint = point.NextPoint.NextPoint; + } + } + else if( CheckMove() ) + { + if( !m_Mobile.CheckIdle() ) + WalkRandomInHome( 2, 2, 1 ); + } + + if( m_Mobile.Combatant != null && !m_Mobile.Combatant.Deleted && m_Mobile.Combatant.Alive && !m_Mobile.Combatant.IsDeadBondedPet ) + { + m_Mobile.Direction = m_Mobile.GetDirectionTo( m_Mobile.Combatant ); + } + + return true; + } + + public virtual bool DoActionCombat() + { + if ( CheckHerding() ) + { + m_Mobile.DebugSay( "Praise the shepherd!" ); + } + else + { + Mobile c = m_Mobile.Combatant; + + if ( c == null || c.Deleted || c.Map != m_Mobile.Map || !c.Alive || c.IsDeadBondedPet ) + Action = ActionType.Wander; + else + m_Mobile.Direction = m_Mobile.GetDirectionTo( c ); + } + + return true; + } + + public virtual bool DoActionGuard() + { + if ( CheckHerding() ) + { + m_Mobile.DebugSay( "Praise the shepherd!" ); + } + else if( DateTime.Now < m_NextStopGuard ) + { + m_Mobile.DebugSay( "I am on guard" ); + //m_Mobile.Turn( Utility.Random(0, 2) - 1 ); + } + else + { + m_Mobile.DebugSay( "I stopped being on guard" ); + Action = ActionType.Wander; + } + + return true; + } + + public virtual bool DoActionFlee() + { + Mobile from = m_Mobile.FocusMob; + + if( from == null || from.Deleted || from.Map != m_Mobile.Map ) + { + m_Mobile.DebugSay( "I have lost him" ); + Action = ActionType.Guard; + return true; + } + + if( WalkMobileRange( from, 1, true, m_Mobile.RangePerception*2, m_Mobile.RangePerception*3 ) ) + { + m_Mobile.DebugSay( "I have fled" ); + Action = ActionType.Guard; + return true; + } + else + { + m_Mobile.DebugSay( "I am fleeing!" ); + } + + return true; + } + + public virtual bool DoActionInteract() + { + return true; + } + + public virtual bool DoActionBackoff() + { + return true; + } + + public virtual bool Obey() + { + if( m_Mobile.Deleted ) + return false; + + switch( m_Mobile.ControlOrder ) + { + case OrderType.None: + return DoOrderNone(); + + case OrderType.Come: + return DoOrderCome(); + + case OrderType.Drop: + return DoOrderDrop(); + + case OrderType.Friend: + return DoOrderFriend(); + + case OrderType.Unfriend: + return DoOrderUnfriend(); + + case OrderType.Guard: + return DoOrderGuard(); + + case OrderType.Attack: + return DoOrderAttack(); + + case OrderType.Release: + return DoOrderRelease(); + + case OrderType.Stay: + return DoOrderStay(); + + case OrderType.Stop: + return DoOrderStop(); + + case OrderType.Follow: + return DoOrderFollow(); + + case OrderType.Transfer: + return DoOrderTransfer(); + + default: + return false; + } + } + + public virtual void OnCurrentOrderChanged() + { + if( m_Mobile.Deleted || m_Mobile.ControlMaster == null || m_Mobile.ControlMaster.Deleted ) + return; + + switch( m_Mobile.ControlOrder ) + { + case OrderType.None: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.Home = m_Mobile.Location; + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + m_Mobile.Warmode = false; + m_Mobile.Combatant = null; + break; + + case OrderType.Come: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + m_Mobile.Warmode = false; + m_Mobile.Combatant = null; + break; + + case OrderType.Drop: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + m_Mobile.Warmode = true; + m_Mobile.Combatant = null; + break; + + case OrderType.Friend: + case OrderType.Unfriend: + m_Mobile.ControlMaster.RevealingAction(); + break; + + case OrderType.Guard: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + m_Mobile.Warmode = true; + m_Mobile.Combatant = null; + string petname = String.Format( "{0}", m_Mobile.Name ); + m_Mobile.ControlMaster.SendLocalizedMessage ( 1049671, petname ); //~1_PETNAME~ is now guarding you. + break; + + case OrderType.Attack: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + + m_Mobile.Warmode = true; + m_Mobile.Combatant = null; + break; + + case OrderType.Release: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + m_Mobile.Warmode = false; + m_Mobile.Combatant = null; + break; + + case OrderType.Stay: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + m_Mobile.Warmode = false; + m_Mobile.Combatant = null; + break; + + case OrderType.Stop: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.Home = m_Mobile.Location; + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + m_Mobile.Warmode = false; + m_Mobile.Combatant = null; + break; + + case OrderType.Follow: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + + m_Mobile.Warmode = false; + m_Mobile.Combatant = null; + break; + + case OrderType.Transfer: + m_Mobile.ControlMaster.RevealingAction(); + m_Mobile.CurrentSpeed = m_Mobile.PassiveSpeed; + m_Mobile.PlaySound( m_Mobile.GetIdleSound() ); + + m_Mobile.Warmode = false; + m_Mobile.Combatant = null; + break; + } + } + + public virtual bool DoOrderNone() + { + m_Mobile.DebugSay( "I have no order" ); + + WalkRandomInHome( 3, 2, 1 ); + + if( m_Mobile.Combatant != null && !m_Mobile.Combatant.Deleted && m_Mobile.Combatant.Alive && !m_Mobile.Combatant.IsDeadBondedPet ) + { + m_Mobile.Warmode = true; + m_Mobile.Direction = m_Mobile.GetDirectionTo( m_Mobile.Combatant ); + } + else + { + m_Mobile.Warmode = false; + } + + return true; + } + + public virtual bool DoOrderCome() + { + if( m_Mobile.ControlMaster != null && !m_Mobile.ControlMaster.Deleted ) + { + int iCurrDist = (int)m_Mobile.GetDistanceToSqrt( m_Mobile.ControlMaster ); + + if( iCurrDist > m_Mobile.RangePerception ) + { + m_Mobile.DebugSay( "I have lost my master. I stay here" ); + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.None; + } + else + { + m_Mobile.DebugSay( "My master told me come" ); + + // Not exactly OSI style, but better than nothing. + bool bRun = (iCurrDist > 5); + + if( WalkMobileRange( m_Mobile.ControlMaster, 1, bRun, 0, 1 ) ) + { + if( m_Mobile.Combatant != null && !m_Mobile.Combatant.Deleted && m_Mobile.Combatant.Alive && !m_Mobile.Combatant.IsDeadBondedPet ) + { + m_Mobile.Warmode = true; + m_Mobile.Direction = m_Mobile.GetDirectionTo( m_Mobile.Combatant ); + } + else + { + m_Mobile.Warmode = false; + } + } + } + } + + return true; + } + + public virtual bool DoOrderDrop() + { + if( m_Mobile.IsDeadPet || !m_Mobile.CanDrop ) + return true; + + m_Mobile.DebugSay( "I drop my stuff for my master" ); + + Container pack = m_Mobile.Backpack; + + if( pack != null ) + { + List list = pack.Items; + + for( int i = list.Count - 1; i >= 0; --i ) + if( i < list.Count ) + list[i].MoveToWorld( m_Mobile.Location, m_Mobile.Map ); + } + + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.None; + + return true; + } + + public virtual bool CheckHerding() + { + IPoint2D target = m_Mobile.TargetLocation; + + if ( target == null ) + return false; // Creature is not being herded + + double distance = m_Mobile.GetDistanceToSqrt( target ); + + if( distance < 1 || distance > 15 ) + { + m_Mobile.TargetLocation = null; + return false; // At the target or too far away + } + + DoMove( m_Mobile.GetDirectionTo( target ) ); + + return true; + } + + public virtual bool DoOrderFollow() + { + if( CheckHerding() ) + { + m_Mobile.DebugSay( "Praise the shepherd!" ); + } + else if( m_Mobile.ControlTarget != null && !m_Mobile.ControlTarget.Deleted && m_Mobile.ControlTarget != m_Mobile ) + { + int iCurrDist = (int)m_Mobile.GetDistanceToSqrt( m_Mobile.ControlTarget ); + + if( iCurrDist > m_Mobile.RangePerception ) + { + m_Mobile.DebugSay( "I have lost the one to follow. I stay here" ); + + if( m_Mobile.Combatant != null && !m_Mobile.Combatant.Deleted && m_Mobile.Combatant.Alive && !m_Mobile.Combatant.IsDeadBondedPet ) + { + m_Mobile.Warmode = true; + m_Mobile.Direction = m_Mobile.GetDirectionTo( m_Mobile.Combatant ); + } + else + { + m_Mobile.Warmode = false; + } + } + else + { + m_Mobile.DebugSay( "My master told me to follow: {0}", m_Mobile.ControlTarget.Name ); + + // Not exactly OSI style, but better than nothing. + bool bRun = (iCurrDist > 5); + + if( WalkMobileRange( m_Mobile.ControlTarget, 1, bRun, 0, 1 ) ) + { + if( m_Mobile.Combatant != null && !m_Mobile.Combatant.Deleted && m_Mobile.Combatant.Alive && !m_Mobile.Combatant.IsDeadBondedPet ) + { + m_Mobile.Warmode = true; + m_Mobile.Direction = m_Mobile.GetDirectionTo( m_Mobile.Combatant ); + } + else + { + m_Mobile.Warmode = false; + m_Mobile.CurrentSpeed = 0.1; + } + } + } + } + else + { + m_Mobile.DebugSay( "I have nobody to follow" ); + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.None; + } + + return true; + } + + public virtual bool DoOrderFriend() + { + Mobile from = m_Mobile.ControlMaster; + Mobile to = m_Mobile.ControlTarget; + + if( from == null || to == null || from == to || from.Deleted || to.Deleted || !to.Player ) + { + m_Mobile.PublicOverheadMessage( MessageType.Regular, 0x3B2, 502039 ); // *looks confused* + } + else + { + if( from.CanBeBeneficial( to, true ) ) + { + NetState fromState = from.NetState, toState = to.NetState; + + if( fromState != null && toState != null ) + { + if( from.HasTrade ) + { + from.SendLocalizedMessage( 1070947 ); // You cannot friend a pet with a trade pending + } + else if( to.HasTrade ) + { + to.SendLocalizedMessage( 1070947 ); // You cannot friend a pet with a trade pending + } + else if( m_Mobile.IsPetFriend( to ) ) + { + from.SendLocalizedMessage( 1049691 ); // That person is already a friend. + } + else if( !m_Mobile.AllowNewPetFriend ) + { + from.SendLocalizedMessage( 1005482 ); // Your pet does not seem to be interested in making new friends right now. + } + else + { + // ~1_NAME~ will now accept movement commands from ~2_NAME~. + from.SendLocalizedMessage( 1049676, String.Format( "{0}\t{1}", m_Mobile.Name, to.Name ) ); + + /* ~1_NAME~ has granted you the ability to give orders to their pet ~2_PET_NAME~. + * This creature will now consider you as a friend. + */ + to.SendLocalizedMessage( 1043246, String.Format( "{0}\t{1}", from.Name, m_Mobile.Name ) ); + + m_Mobile.AddPetFriend( to ); + + m_Mobile.ControlTarget = to; + m_Mobile.ControlOrder = OrderType.Follow; + + return true; + } + } + } + } + + m_Mobile.ControlTarget = from; + m_Mobile.ControlOrder = OrderType.Follow; + + return true; + } + + public virtual bool DoOrderUnfriend() + { + Mobile from = m_Mobile.ControlMaster; + Mobile to = m_Mobile.ControlTarget; + + if( from == null || to == null || from == to || from.Deleted || to.Deleted || !to.Player ) + { + m_Mobile.PublicOverheadMessage( MessageType.Regular, 0x3B2, 502039 ); // *looks confused* + } + else if( !m_Mobile.IsPetFriend( to ) ) + { + from.SendLocalizedMessage( 1070953 ); // That person is not a friend. + } + else + { + // ~1_NAME~ will no longer accept movement commands from ~2_NAME~. + from.SendLocalizedMessage( 1070951, String.Format( "{0}\t{1}", m_Mobile.Name, to.Name ) ); + + /* ~1_NAME~ has no longer granted you the ability to give orders to their pet ~2_PET_NAME~. + * This creature will no longer consider you as a friend. + */ + to.SendLocalizedMessage( 1070952, String.Format( "{0}\t{1}", from.Name, m_Mobile.Name ) ); + + m_Mobile.RemovePetFriend( to ); + } + + m_Mobile.ControlTarget = from; + m_Mobile.ControlOrder = OrderType.Follow; + + return true; + } + + public virtual bool DoOrderGuard() + { + if( m_Mobile.IsDeadPet ) + return true; + + Mobile controlMaster = m_Mobile.ControlMaster; + + if( controlMaster == null || controlMaster.Deleted ) + return true; + + Mobile combatant = m_Mobile.Combatant; + + List aggressors = controlMaster.Aggressors; + + if( aggressors.Count > 0 ) + { + for( int i = 0; i < aggressors.Count; ++i ) + { + AggressorInfo info = aggressors[i]; + Mobile attacker = info.Attacker; + + if( attacker != null && !attacker.Deleted && attacker.GetDistanceToSqrt( m_Mobile ) <= m_Mobile.RangePerception ) + { + if( combatant == null || attacker.GetDistanceToSqrt( controlMaster ) < combatant.GetDistanceToSqrt( controlMaster ) ) + combatant = attacker; + } + } + + if( combatant != null ) + m_Mobile.DebugSay( "Crap, my master has been attacked! I will attack one of those bastards!" ); + } + + if( combatant != null && combatant != m_Mobile && combatant != m_Mobile.ControlMaster && !combatant.Deleted && combatant.Alive && !combatant.IsDeadBondedPet && m_Mobile.CanSee( combatant ) && m_Mobile.CanBeHarmful( combatant, false ) && combatant.Map == m_Mobile.Map ) + { + m_Mobile.DebugSay( "Guarding from target..." ); + + m_Mobile.Combatant = combatant; + m_Mobile.FocusMob = combatant; + Action = ActionType.Combat; + + /* + * We need to call Think() here or spell casting monsters will not use + * spells when guarding because their target is never processed. + */ + Think(); + } + else + { + m_Mobile.DebugSay( "Nothing to guard from" ); + + m_Mobile.Warmode = false; + m_Mobile.CurrentSpeed = 0.1; + + WalkMobileRange( controlMaster, 1, false, 0, 1 ); + } + + return true; + } + + public virtual bool DoOrderAttack() + { + if( m_Mobile.IsDeadPet ) + return true; + + if( m_Mobile.ControlTarget == null || m_Mobile.ControlTarget.Deleted || m_Mobile.ControlTarget.Map != m_Mobile.Map || !m_Mobile.ControlTarget.Alive || m_Mobile.ControlTarget.IsDeadBondedPet ) + { + m_Mobile.DebugSay( "I think he might be dead. He's not anywhere around here at least. That's cool. I'm glad he's dead." ); + + m_Mobile.ControlTarget = m_Mobile.ControlMaster; + m_Mobile.ControlOrder = OrderType.Follow; + + if( m_Mobile.FightMode == FightMode.Closest || m_Mobile.FightMode == FightMode.Aggressor ) + { + Mobile newCombatant = null; + double newScore = 0.0; + + foreach( Mobile aggr in m_Mobile.GetMobilesInRange( m_Mobile.RangePerception ) ) + { + if( !m_Mobile.CanSee( aggr ) || aggr.Combatant != m_Mobile ) + continue; + + if( aggr.IsDeadBondedPet || !aggr.Alive ) + continue; + + double aggrScore = m_Mobile.GetFightModeRanking( aggr, FightMode.Closest, false ); + + if( (newCombatant == null || aggrScore > newScore) && m_Mobile.InLOS( aggr ) ) + { + newCombatant = aggr; + newScore = aggrScore; + } + } + + if( newCombatant != null ) + { + m_Mobile.ControlTarget = newCombatant; + m_Mobile.ControlOrder = OrderType.Attack; + m_Mobile.Combatant = newCombatant; + m_Mobile.DebugSay( "But -that- is not dead. Here we go again..." ); + Think(); + } + } + } + else + { + m_Mobile.DebugSay( "Attacking target..." ); + Think(); + } + + return true; + } + + public virtual bool DoOrderPatrol() + { + m_Mobile.DebugSay( "This order is not yet coded" ); + return true; + } + + public virtual bool DoOrderRelease() + { + m_Mobile.DebugSay( "I have been released" ); + + m_Mobile.PlaySound( m_Mobile.GetAngerSound() ); + + m_Mobile.SetControlMaster( null ); + m_Mobile.SummonMaster = null; + + m_Mobile.BondingBegin = DateTime.MinValue; + m_Mobile.OwnerAbandonTime = DateTime.MinValue; + m_Mobile.IsBonded = false; + + SpawnEntry se = m_Mobile.Spawner as SpawnEntry; + if( se != null && se.HomeLocation != Point3D.Zero ) + { + m_Mobile.Home = se.HomeLocation; + m_Mobile.RangeHome = se.HomeRange; + } + + if( m_Mobile.DeleteOnRelease || m_Mobile.IsDeadPet ) + m_Mobile.Delete(); + + m_Mobile.BeginDeleteTimer(); + m_Mobile.DropBackpack(); + + return true; + } + + public virtual bool DoOrderStay() + { + if( CheckHerding() ) + m_Mobile.DebugSay( "Praise the shepherd!" ); + else + m_Mobile.DebugSay( "My master told me to stay" ); + + return true; + } + + public virtual bool DoOrderStop() + { + if( m_Mobile.ControlMaster == null || m_Mobile.ControlMaster.Deleted ) + return true; + + m_Mobile.DebugSay( "My master told me to stop." ); + + m_Mobile.Direction = m_Mobile.GetDirectionTo( m_Mobile.ControlMaster ); + m_Mobile.Home = m_Mobile.Location; + + m_Mobile.ControlTarget = null; + + m_Mobile.ControlOrder = OrderType.None; + + return true; + } + + private class TransferItem : Item + { + public static bool IsInCombat( BaseCreature creature ) + { + return (creature != null && (creature.Aggressors.Count > 0 || creature.Aggressed.Count > 0)); + } + + private BaseCreature m_Creature; + + public TransferItem( BaseCreature creature ) + : base( ShrinkTable.Lookup( creature ) ) + { + m_Creature = creature; + + Movable = false; + + if( !Core.AOS ) + { + Name = creature.Name; + } + else if( this.ItemID == ShrinkTable.DefaultItemID || creature.GetType().IsDefined( typeof( FriendlyNameAttribute ), false ) ) + Name = FriendlyNameAttribute.GetFriendlyNameFor( creature.GetType() ).ToString(); + + //(As Per OSI)No name. Normally, set by the ItemID of the Shrink Item unless we either explicitly set it with an Attribute, or, no lookup found + + Hue = creature.Hue & 0x0FFF; + } + + public TransferItem( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + Delete(); + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + list.Add( 1041603 ); // This item represents a pet currently in consideration for trade + list.Add( 1041601, m_Creature.Name ); // Pet Name: ~1_val~ + + if ( m_Creature.ControlMaster != null ) + list.Add( 1041602, m_Creature.ControlMaster.Name ); // Owner: ~1_val~ + } + + public override bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted ) + { + if( !base.AllowSecureTrade( from, to, newOwner, accepted ) ) + return false; + + if( Deleted || m_Creature == null || m_Creature.Deleted || m_Creature.ControlMaster != from || !from.CheckAlive() || !to.CheckAlive() ) + return false; + + if( from.Map != m_Creature.Map || !from.InRange( m_Creature, 14 ) ) + return false; + + if( accepted && !m_Creature.CanBeControlledBy( to ) ) + { + string args = String.Format( "{0}\t{1}\t ", to.Name, from.Name ); + + from.SendLocalizedMessage( 1043248, args ); // The pet refuses to be transferred because it will not obey ~1_NAME~.~3_BLANK~ + to.SendLocalizedMessage( 1043249, args ); // The pet will not accept you as a master because it does not trust you.~3_BLANK~ + + return false; + } + else if( accepted && !m_Creature.CanBeControlledBy( from ) ) + { + string args = String.Format( "{0}\t{1}\t ", to.Name, from.Name ); + + from.SendLocalizedMessage( 1043250, args ); // The pet refuses to be transferred because it will not obey you sufficiently.~3_BLANK~ + to.SendLocalizedMessage( 1043251, args ); // The pet will not accept you as a master because it does not trust ~2_NAME~.~3_BLANK~ + } + else if( accepted && (to.Followers + m_Creature.ControlSlots) > to.FollowersMax ) + { + to.SendLocalizedMessage( 1049607 ); // You have too many followers to control that creature. + + return false; + } + else if( accepted && IsInCombat( m_Creature ) ) + { + from.SendMessage( "You may not transfer a pet that has recently been in combat." ); + to.SendMessage( "The pet may not be transfered to you because it has recently been in combat." ); + + return false; + } + + return true; + } + + public override void OnSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted ) + { + if( Deleted ) + return; + + Delete(); + + if( m_Creature == null || m_Creature.Deleted || m_Creature.ControlMaster != from || !from.CheckAlive() || !to.CheckAlive() ) + return; + + if( from.Map != m_Creature.Map || !from.InRange( m_Creature, 14 ) ) + return; + + if( accepted ) + { + if( m_Creature.SetControlMaster( to ) ) + { + if( m_Creature.Summoned ) + m_Creature.SummonMaster = to; + + m_Creature.ControlTarget = to; + m_Creature.ControlOrder = OrderType.Follow; + + m_Creature.BondingBegin = DateTime.MinValue; + m_Creature.OwnerAbandonTime = DateTime.MinValue; + m_Creature.IsBonded = false; + + m_Creature.PlaySound( m_Creature.GetIdleSound() ); + + string args = String.Format( "{0}\t{1}\t{2}", from.Name, m_Creature.Name, to.Name ); + + from.SendLocalizedMessage( 1043253, args ); // You have transferred your pet to ~3_GETTER~. + to.SendLocalizedMessage( 1043252, args ); // ~1_NAME~ has transferred the allegiance of ~2_PET_NAME~ to you. + } + } + } + } + + public virtual bool DoOrderTransfer() + { + if( m_Mobile.IsDeadPet ) + return true; + + Mobile from = m_Mobile.ControlMaster; + Mobile to = m_Mobile.ControlTarget; + + if( from != to && from != null && !from.Deleted && to != null && !to.Deleted && to.Player ) + { + m_Mobile.DebugSay( "Begin transfer with {0}", to.Name ); + + if( !m_Mobile.CanBeControlledBy( to ) ) + { + string args = String.Format( "{0}\t{1}\t ", to.Name, from.Name ); + + from.SendLocalizedMessage( 1043248, args ); // The pet refuses to be transferred because it will not obey ~1_NAME~.~3_BLANK~ + to.SendLocalizedMessage( 1043249, args ); // The pet will not accept you as a master because it does not trust you.~3_BLANK~ + } + else if( !m_Mobile.CanBeControlledBy( from ) ) + { + string args = String.Format( "{0}\t{1}\t ", to.Name, from.Name ); + + from.SendLocalizedMessage( 1043250, args ); // The pet refuses to be transferred because it will not obey you sufficiently.~3_BLANK~ + to.SendLocalizedMessage( 1043251, args ); // The pet will not accept you as a master because it does not trust ~2_NAME~.~3_BLANK~ + } + else if( TransferItem.IsInCombat( m_Mobile ) ) + { + from.SendMessage( "You may not transfer a pet that has recently been in combat." ); + to.SendMessage( "The pet may not be transfered to you because it has recently been in combat." ); + } + else + { + NetState fromState = from.NetState, toState = to.NetState; + + if( fromState != null && toState != null ) + { + if( from.HasTrade ) + { + from.SendLocalizedMessage( 1010507 ); // You cannot transfer a pet with a trade pending + } + else if( to.HasTrade ) + { + to.SendLocalizedMessage( 1010507 ); // You cannot transfer a pet with a trade pending + } + else + { + Container c = fromState.AddTrade( toState ); + c.DropItem( new TransferItem( m_Mobile ) ); + } + } + } + } + + m_Mobile.ControlTarget = null; + m_Mobile.ControlOrder = OrderType.Stay; + + return true; + } + + public virtual bool DoBardPacified() + { + if( DateTime.Now < m_Mobile.BardEndTime ) + { + m_Mobile.DebugSay( "I am pacified, I wait" ); + m_Mobile.Combatant = null; + m_Mobile.Warmode = false; + + } + else + { + m_Mobile.DebugSay( "I'm not pacified any longer" ); + m_Mobile.BardPacified = false; + } + + return true; + } + + public virtual bool DoBardProvoked() + { + if( DateTime.Now >= m_Mobile.BardEndTime && (m_Mobile.BardMaster == null || m_Mobile.BardMaster.Deleted || m_Mobile.BardMaster.Map != m_Mobile.Map || m_Mobile.GetDistanceToSqrt( m_Mobile.BardMaster ) > m_Mobile.RangePerception) ) + { + m_Mobile.DebugSay( "I have lost my provoker" ); + m_Mobile.BardProvoked = false; + m_Mobile.BardMaster = null; + m_Mobile.BardTarget = null; + + m_Mobile.Combatant = null; + m_Mobile.Warmode = false; + } + else + { + if( m_Mobile.BardTarget == null || m_Mobile.BardTarget.Deleted || m_Mobile.BardTarget.Map != m_Mobile.Map || m_Mobile.GetDistanceToSqrt( m_Mobile.BardTarget ) > m_Mobile.RangePerception ) + { + m_Mobile.DebugSay( "I have lost my provoke target" ); + m_Mobile.BardProvoked = false; + m_Mobile.BardMaster = null; + m_Mobile.BardTarget = null; + + m_Mobile.Combatant = null; + m_Mobile.Warmode = false; + } + else + { + m_Mobile.Combatant = m_Mobile.BardTarget; + m_Action = ActionType.Combat; + + m_Mobile.OnThink(); + Think(); + } + } + + return true; + } + + public virtual void WalkRandom( int iChanceToNotMove, int iChanceToDir, int iSteps ) + { + if( m_Mobile.Deleted || m_Mobile.DisallowAllMoves ) + return; + + for( int i=0; i= m_NextMove); + } + + public virtual bool DoMove( Direction d ) + { + return DoMove( d, false ); + } + + public virtual bool DoMove( Direction d, bool badStateOk ) + { + MoveResult res = DoMoveImpl( d ); + + return (res == MoveResult.Success || res == MoveResult.SuccessAutoTurn || (badStateOk && res == MoveResult.BadState)); + } + + private static Queue m_Obstacles = new Queue(); + + public virtual MoveResult DoMoveImpl( Direction d ) + { + if( m_Mobile.Deleted || m_Mobile.Frozen || m_Mobile.Paralyzed || (m_Mobile.Spell != null && m_Mobile.Spell.IsCasting) || m_Mobile.DisallowAllMoves ) + return MoveResult.BadState; + else if( !CheckMove() ) + return MoveResult.BadState; + + // This makes them always move one step, never any direction changes + m_Mobile.Direction = d; + + TimeSpan delay = TimeSpan.FromSeconds( TransformMoveDelay( m_Mobile.CurrentSpeed ) ); + + m_NextMove += delay; + + if( m_NextMove < DateTime.Now ) + m_NextMove = DateTime.Now; + + m_Mobile.Pushing = false; + + MoveImpl.IgnoreMovableImpassables = (m_Mobile.CanMoveOverObstacles && !m_Mobile.CanDestroyObstacles); + + if( (m_Mobile.Direction & Direction.Mask) != (d & Direction.Mask) ) + { + bool v = m_Mobile.Move( d ); + + MoveImpl.IgnoreMovableImpassables = false; + return (v ? MoveResult.Success : MoveResult.Blocked); + } + else if( !m_Mobile.Move( d ) ) + { + bool wasPushing = m_Mobile.Pushing; + + bool blocked = true; + + bool canOpenDoors = m_Mobile.CanOpenDoors; + bool canDestroyObstacles = m_Mobile.CanDestroyObstacles; + + if( canOpenDoors || canDestroyObstacles ) + { + m_Mobile.DebugSay( "My movement was blocked, I will try to clear some obstacles." ); + + Map map = m_Mobile.Map; + + if( map != null ) + { + int x = m_Mobile.X, y = m_Mobile.Y; + Movement.Movement.Offset( d, ref x, ref y ); + + int destroyables = 0; + + IPooledEnumerable eable = map.GetItemsInRange( new Point3D( x, y, m_Mobile.Location.Z ), 1 ); + + foreach( Item item in eable ) + { + if( canOpenDoors && item is BaseDoor && (item.Z + item.ItemData.Height) > m_Mobile.Z && (m_Mobile.Z + 16) > item.Z ) + { + if( item.X != x || item.Y != y ) + continue; + + BaseDoor door = (BaseDoor)item; + + if( !door.Locked || !door.UseLocks() ) + m_Obstacles.Enqueue( door ); + + if( !canDestroyObstacles ) + break; + } + else if( canDestroyObstacles && item.Movable && item.ItemData.Impassable && (item.Z + item.ItemData.Height) > m_Mobile.Z && (m_Mobile.Z + 16) > item.Z ) + { + if( !m_Mobile.InRange( item.GetWorldLocation(), 1 ) ) + continue; + + m_Obstacles.Enqueue( item ); + ++destroyables; + } + } + + eable.Free(); + + if( destroyables > 0 ) + Effects.PlaySound( new Point3D( x, y, m_Mobile.Z ), m_Mobile.Map, 0x3B3 ); + + if( m_Obstacles.Count > 0 ) + blocked = false; // retry movement + + while( m_Obstacles.Count > 0 ) + { + Item item = (Item)m_Obstacles.Dequeue(); + + if( item is BaseDoor ) + { + m_Mobile.DebugSay( "Little do they expect, I've learned how to open doors. Didn't they read the script??" ); + m_Mobile.DebugSay( "*twist*" ); + + ((BaseDoor)item).Use( m_Mobile ); + } + else + { + m_Mobile.DebugSay( "Ugabooga. I'm so big and tough I can destroy it: {0}", item.GetType().Name ); + + if( item is Container ) + { + Container cont = (Container)item; + + for( int i = 0; i < cont.Items.Count; ++i ) + { + Item check = cont.Items[i]; + + if( check.Movable && check.ItemData.Impassable && (item.Z + check.ItemData.Height) > m_Mobile.Z ) + m_Obstacles.Enqueue( check ); + } + + cont.Destroy(); + } + else + { + item.Delete(); + } + } + } + + if( !blocked ) + blocked = !m_Mobile.Move( d ); + } + } + + if( blocked ) + { + int offset = (Utility.RandomDouble() >= 0.6 ? 1 : -1); + + for( int i = 0; i < 2; ++i ) + { + m_Mobile.TurnInternal( offset ); + + if( m_Mobile.Move( m_Mobile.Direction ) ) + { + MoveImpl.IgnoreMovableImpassables = false; + return MoveResult.SuccessAutoTurn; + } + } + + MoveImpl.IgnoreMovableImpassables = false; + return (wasPushing ? MoveResult.BadState : MoveResult.Blocked); + } + else + { + MoveImpl.IgnoreMovableImpassables = false; + return MoveResult.Success; + } + } + + MoveImpl.IgnoreMovableImpassables = false; + return MoveResult.Success; + } + + public virtual void WalkRandomInHome( int iChanceToNotMove, int iChanceToDir, int iSteps ) + { + if( m_Mobile.Deleted || m_Mobile.DisallowAllMoves ) + return; + + if( m_Mobile.Home == Point3D.Zero ) + { + if( m_Mobile.Spawner is SpawnEntry ) + { + Region region = ((SpawnEntry)m_Mobile.Spawner).Region; + + if( m_Mobile.Region.AcceptsSpawnsFrom( region ) ) + { + m_Mobile.WalkRegion = region; + WalkRandom( iChanceToNotMove, iChanceToDir, iSteps ); + m_Mobile.WalkRegion = null; + } + else + { + if( region.GoLocation != Point3D.Zero && Utility.Random( 10 ) > 5 ) + { + DoMove( m_Mobile.GetDirectionTo( region.GoLocation ) ); + } + else + { + WalkRandom( iChanceToNotMove, iChanceToDir, 1 ); + } + } + } + else + { + WalkRandom( iChanceToNotMove, iChanceToDir, iSteps ); + } + } + else + { + for( int i=0; i m_Mobile.RangeHome ) + { + DoMove( m_Mobile.GetDirectionTo( m_Mobile.Home ) ); + } + else + { + if( Utility.Random( 10 ) > 5 ) + { + DoMove( m_Mobile.GetDirectionTo( m_Mobile.Home ) ); + } + else + { + WalkRandom( iChanceToNotMove, iChanceToDir, 1 ); + } + } + } + else + { + if( m_Mobile.Location != m_Mobile.Home ) + { + DoMove( m_Mobile.GetDirectionTo( m_Mobile.Home ) ); + } + } + } + } + } + + public virtual bool CheckFlee() + { + if( m_Mobile.CheckFlee() ) + { + Mobile combatant = m_Mobile.Combatant; + + if( combatant == null ) + { + WalkRandom( 1, 2, 1 ); + } + else + { + Direction d = combatant.GetDirectionTo( m_Mobile ); + + d = (Direction)((int)d + Utility.RandomMinMax( -1, +1 )); + + m_Mobile.Direction = d; + m_Mobile.Move( d ); + } + + return true; + } + + return false; + } + + protected PathFollower m_Path; + + public virtual void OnTeleported() + { + if( m_Path != null ) + { + m_Mobile.DebugSay( "Teleported; repathing" ); + m_Path.ForceRepath(); + } + } + + public virtual bool MoveTo( Mobile m, bool run, int range ) + { + if( m_Mobile.Deleted || m_Mobile.DisallowAllMoves || m == null || m.Deleted ) + return false; + + if( m_Mobile.InRange( m, range ) ) + { + m_Path = null; + return true; + } + + if( m_Path != null && m_Path.Goal == m ) + { + if( m_Path.Follow( run, 1 ) ) + { + m_Path = null; + return true; + } + } + else if( !DoMove( m_Mobile.GetDirectionTo( m ), true ) ) + { + m_Path = new PathFollower( m_Mobile, m ); + m_Path.Mover = new MoveMethod( DoMoveImpl ); + + if( m_Path.Follow( run, 1 ) ) + { + m_Path = null; + return true; + } + } + else + { + m_Path = null; + return true; + } + + return false; + } + + /* + * Walk at range distance from mobile + * + * iSteps : Number of steps + * bRun : Do we run + * iWantDistMin : The minimum distance we want to be + * iWantDistMax : The maximum distance we want to be + * + */ + public virtual bool WalkMobileRange( Mobile m, int iSteps, bool bRun, int iWantDistMin, int iWantDistMax ) + { + if( m_Mobile.Deleted || m_Mobile.DisallowAllMoves ) + return false; + + if( m != null ) + { + for( int i=0; i iWantDistMax ) + { + bool needCloser = (iCurrDist > iWantDistMax); + bool needFurther = !needCloser; + + if( needCloser && m_Path != null && m_Path.Goal == m ) + { + if( m_Path.Follow( bRun, 1 ) ) + m_Path = null; + } + else + { + Direction dirTo; + + if( iCurrDist > iWantDistMax ) + dirTo = m_Mobile.GetDirectionTo( m ); + else + dirTo = m.GetDirectionTo( m_Mobile ); + + // Add the run flag + if( bRun ) + dirTo = dirTo | Direction.Running; + + if( !DoMove( dirTo, true ) && needCloser ) + { + m_Path = new PathFollower( m_Mobile, m ); + m_Path.Mover = new MoveMethod( DoMoveImpl ); + + if( m_Path.Follow( bRun, 1 ) ) + m_Path = null; + } + else + { + m_Path = null; + } + } + } + else + { + return true; + } + } + + // Get the curent distance + int iNewDist = (int)m_Mobile.GetDistanceToSqrt( m ); + + if( iNewDist >= iWantDistMin && iNewDist <= iWantDistMax ) + return true; + else + return false; + } + + return false; + } + + /* + * Here we check to acquire a target from our surronding + * + * iRange : The range + * acqType : A type of acquire we want (closest, strongest, etc) + * bPlayerOnly : Don't bother with other creatures or NPCs, want a player + * bFacFriend : Check people in my faction + * bFacFoe : Check people in other factions + * + */ + public virtual bool AcquireFocusMob( int iRange, FightMode acqType, bool bPlayerOnly, bool bFacFriend, bool bFacFoe ) + { + if( m_Mobile.Deleted ) + return false; + + if( m_Mobile.BardProvoked ) + { + if( m_Mobile.BardTarget == null || m_Mobile.BardTarget.Deleted ) + { + m_Mobile.FocusMob = null; + return false; + } + else + { + m_Mobile.FocusMob = m_Mobile.BardTarget; + return (m_Mobile.FocusMob != null); + } + } + else if( m_Mobile.Controlled ) + { + if( m_Mobile.ControlTarget == null || m_Mobile.ControlTarget.Deleted || m_Mobile.ControlTarget.Hidden || !m_Mobile.ControlTarget.Alive || m_Mobile.ControlTarget.IsDeadBondedPet || !m_Mobile.InRange( m_Mobile.ControlTarget, m_Mobile.RangePerception * 2 ) ) + { + if ( m_Mobile.ControlTarget != null && m_Mobile.ControlTarget != m_Mobile.ControlMaster ) + m_Mobile.ControlTarget = null; + + m_Mobile.FocusMob = null; + return false; + } + else + { + m_Mobile.FocusMob = m_Mobile.ControlTarget; + return (m_Mobile.FocusMob != null); + } + } + + if( m_Mobile.ConstantFocus != null ) + { + m_Mobile.DebugSay( "Acquired my constant focus" ); + m_Mobile.FocusMob = m_Mobile.ConstantFocus; + return true; + } + + if( acqType == FightMode.None ) + { + m_Mobile.FocusMob = null; + return false; + } + + if ( acqType == FightMode.Aggressor && m_Mobile.Aggressors.Count == 0 && m_Mobile.Aggressed.Count == 0 ) + { + m_Mobile.FocusMob = null; + return false; + } + + if( m_Mobile.NextReacquireTime > DateTime.Now ) + { + m_Mobile.FocusMob = null; + return false; + } + + m_Mobile.NextReacquireTime = DateTime.Now + m_Mobile.ReacquireDelay; + + m_Mobile.DebugSay( "Acquiring..." ); + + Map map = m_Mobile.Map; + + if( map != null ) + { + Mobile newFocusMob = null; + double val = double.MinValue; + double theirVal; + + IPooledEnumerable eable = map.GetMobilesInRange( m_Mobile.Location, iRange ); + + foreach( Mobile m in eable ) + { + if ( m.Deleted || m.Blessed ) + continue; + + // Let's not target ourselves... + if ( m == m_Mobile ) + continue; + + // Dead targets are invalid. + if ( !m.Alive || m.IsDeadBondedPet ) + continue; + + // Staff members cannot be targeted. + if ( m.AccessLevel > AccessLevel.Player ) + continue; + + // Does it have to be a player? + if ( bPlayerOnly && !m.Player ) + continue; + + // Can't acquire a target we can't see. + if ( !m_Mobile.CanSee( m ) ) + continue; + + if ( m_Mobile.Summoned && m_Mobile.SummonMaster != null ) + { + // If this is a summon, it can't target its controller. + if ( m == m_Mobile.SummonMaster ) + continue; + + // It also must abide by harmful spell rules. + if ( !Server.Spells.SpellHelper.ValidIndirectTarget( m_Mobile.SummonMaster, m ) ) + continue; + } + + // If we only want faction friends, make sure it's one. + if ( bFacFriend && !m_Mobile.IsFriend( m ) ) + continue; + + if( acqType == FightMode.Aggressor || acqType == FightMode.Evil ) + { + // Only acquire this mobile if it attacked us, or if it's evil. + bool bValid = false; + + for ( int a = 0; !bValid && a < m_Mobile.Aggressors.Count; ++a ) + bValid = ( m_Mobile.Aggressors[a].Attacker == m ); + + for ( int a = 0; !bValid && a < m_Mobile.Aggressed.Count; ++a ) + bValid = ( m_Mobile.Aggressed[a].Defender == m ); + + if ( acqType == FightMode.Evil && !bValid ) + { + if( m is BaseCreature && ((BaseCreature)m).Controlled && ((BaseCreature)m).ControlMaster != null ) + bValid = ( ((BaseCreature)m).ControlMaster.Karma < 0 ); + else + bValid = ( m.Karma < 0 ); + } + + if ( !bValid ) + continue; + } else { + + + // Same goes for faction enemies. + if ( bFacFoe && !m_Mobile.IsEnemy( m ) ) + continue; + + // If it's an enemy factioned mobile, make sure we can be harmful to it. + if ( bFacFoe && !bFacFriend && !m_Mobile.CanBeHarmful( m, false ) ) + continue; + } + + theirVal = m_Mobile.GetFightModeRanking( m, acqType, bPlayerOnly ); + + if( theirVal > val && m_Mobile.InLOS( m ) ) + { + newFocusMob = m; + val = theirVal; + } + } + + eable.Free(); + + m_Mobile.FocusMob = newFocusMob; + } + + return (m_Mobile.FocusMob != null); + } + + public virtual void DetectHidden() + { + if( m_Mobile.Deleted || m_Mobile.Map == null ) + return; + + m_Mobile.DebugSay( "Checking for hidden players" ); + + double srcSkill = m_Mobile.Skills[SkillName.Searching].Value; + + if( srcSkill <= 0 ) + return; + + foreach( Mobile trg in m_Mobile.GetMobilesInRange( m_Mobile.RangePerception ) ) + { + if( trg != m_Mobile && trg.Player && trg.Alive && trg.Hidden && trg.AccessLevel == AccessLevel.Player && m_Mobile.InLOS( trg ) ) + { + m_Mobile.DebugSay( "Trying to detect {0}", trg.Name ); + + double trgHiding = trg.Skills[SkillName.Hiding].Value / 2.9; + double trgStealth = trg.Skills[SkillName.Stealth].Value / 1.8; + + double chance = srcSkill / 1.2 - Math.Min( trgHiding, trgStealth ); + + if( chance < srcSkill / 10 ) + chance = srcSkill / 10; + + chance /= 100; + + if( chance > Utility.RandomDouble() ) + { + trg.RevealingAction(); + trg.SendLocalizedMessage( 500814 ); // You have been revealed! + } + } + } + } + + public virtual void Deactivate() + { + if( m_Mobile.PlayerRangeSensitive ) + { + m_Timer.Stop(); + + SpawnEntry se = m_Mobile.Spawner as SpawnEntry; + + if( se != null && se.ReturnOnDeactivate && !m_Mobile.Controlled ) + { + if( se.HomeLocation == Point3D.Zero ) + { + if( !m_Mobile.Region.AcceptsSpawnsFrom( se.Region ) ) + { + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( ReturnToHome ) ); + } + } + else if( !m_Mobile.InRange( se.HomeLocation, se.HomeRange ) ) + { + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( ReturnToHome ) ); + } + } + } + } + + private void ReturnToHome() + { + SpawnEntry se = m_Mobile.Spawner as SpawnEntry; + + if( se != null ) + { + Point3D loc = se.RandomSpawnLocation( 16, !m_Mobile.CantWalk, m_Mobile.CanSwim ); + + if( loc != Point3D.Zero ) + { + m_Mobile.MoveToWorld( loc, se.Region.Map ); + return; + } + } + } + + public virtual void Activate() + { + if( !m_Timer.Running ) + { + m_Timer.Delay = TimeSpan.Zero; + m_Timer.Start(); + } + } + + /* + * The mobile changed it speed, we must ajust the timer + */ + public virtual void OnCurrentSpeedChanged() + { + m_Timer.Stop(); + m_Timer.Delay = TimeSpan.FromSeconds( Utility.RandomDouble() ); + m_Timer.Interval = TimeSpan.FromSeconds( Math.Max( 0.0, m_Mobile.CurrentSpeed ) ); + m_Timer.Start(); + } + + private DateTime m_NextDetectHidden; + + public virtual bool CanDetectHidden { get { return m_Mobile.Skills[SkillName.Searching].Value > 0; } } + + /* + * The Timer object + */ + private class AITimer : Timer + { + private BaseAI m_Owner; + + public AITimer( BaseAI owner ) + : base( TimeSpan.FromSeconds( Utility.RandomDouble() ), TimeSpan.FromSeconds( Math.Max( 0.0, owner.m_Mobile.CurrentSpeed ) ) ) + { + m_Owner = owner; + + m_Owner.m_NextDetectHidden = DateTime.Now; + + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + if( m_Owner.m_Mobile.Deleted ) + { + Stop(); + return; + } + else if( m_Owner.m_Mobile.Map == null || m_Owner.m_Mobile.Map == Map.Internal ) + { + return; + } + else if( m_Owner.m_Mobile.PlayerRangeSensitive )//have to check this in the timer.... + { + Sector sect = m_Owner.m_Mobile.Map.GetSector( m_Owner.m_Mobile ); + if( !sect.Active ) + { + m_Owner.Deactivate(); + return; + } + } + + m_Owner.m_Mobile.OnThink(); + + if( m_Owner.m_Mobile.Deleted ) + { + Stop(); + return; + } + else if( m_Owner.m_Mobile.Map == null || m_Owner.m_Mobile.Map == Map.Internal ) + { + return; + } + + if( m_Owner.m_Mobile.BardPacified ) + { + m_Owner.DoBardPacified(); + } + else if( m_Owner.m_Mobile.BardProvoked ) + { + m_Owner.DoBardProvoked(); + } + else + { + if( !m_Owner.m_Mobile.Controlled ) + { + if( !m_Owner.Think() ) + { + Stop(); + return; + } + } + else + { + if( !m_Owner.Obey() ) + { + Stop(); + return; + } + } + } + + if( m_Owner.CanDetectHidden && DateTime.Now > m_Owner.m_NextDetectHidden ) + { + m_Owner.DetectHidden(); + + // Not exactly OSI style, approximation. + int delay = (15000 / m_Owner.m_Mobile.Int); + + if( delay > 60 ) + delay = 60; + + int min = delay * (9 / 10); // 13s at 1000 int, 33s at 400 int, 54s at <250 int + int max = delay * (10 / 9); // 16s at 1000 int, 41s at 400 int, 66s at <250 int + + m_Owner.m_NextDetectHidden = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( min, max ) ); + } + } + } + } +} diff --git a/Scripts/Mobiles/Base/AI/BerserkAI.cs b/Scripts/Mobiles/Base/AI/BerserkAI.cs new file mode 100644 index 0000000..d5ddbb2 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/BerserkAI.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +namespace Server.Mobiles +{ + public class BerserkAI : BaseAI + { + public BerserkAI(BaseCreature m) : base (m) + { + } + + public override bool DoActionWander() + { + m_Mobile.DebugSay( "I have No Combatant" ); + + if( AcquireFocusMob( m_Mobile.RangePerception, FightMode.Closest, false, true, true) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have detected " + m_Mobile.FocusMob.Name + " and I will attack" ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + base.DoActionWander(); + } + + return true; + } + + public override bool DoActionCombat() + { + if( m_Mobile.Combatant == null || m_Mobile.Combatant.Deleted ) + { + m_Mobile.DebugSay("My combatant is deleted"); + Action = ActionType.Guard; + return true; + } + + if( WalkMobileRange( m_Mobile.Combatant, 1, true, m_Mobile.RangeFight, m_Mobile.RangeFight ) ) + { + // Be sure to face the combatant + m_Mobile.Direction = m_Mobile.GetDirectionTo( m_Mobile.Combatant.Location ); + } + else + { + if( m_Mobile.Combatant != null ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay("I am still not in range of " + m_Mobile.Combatant.Name); + + if( (int) m_Mobile.GetDistanceToSqrt( m_Mobile.Combatant ) > m_Mobile.RangePerception + 1 ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have lost " + m_Mobile.Combatant.Name ); + + Action = ActionType.Guard; + return true; + } + } + } + + return true; + } + + public override bool DoActionGuard() + { + if ( AcquireFocusMob(m_Mobile.RangePerception, m_Mobile.FightMode, false, true, true ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have detected {0}, attacking", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + base.DoActionGuard(); + } + + return true; + } + } +} diff --git a/Scripts/Mobiles/Base/AI/CitizenAI.cs b/Scripts/Mobiles/Base/AI/CitizenAI.cs new file mode 100644 index 0000000..24400f2 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/CitizenAI.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +namespace Server.Mobiles +{ + public class CitizenAI : BaseAI + { + public CitizenAI(BaseCreature m) : base (m) + { + } + + public override bool DoActionWander() + { + return false; + } + + public override bool DoActionCombat() + { + return false; + } + + public override bool DoActionBackoff() + { + return false; + } + + public override bool DoActionFlee() + { + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/HealerAI.cs b/Scripts/Mobiles/Base/AI/HealerAI.cs new file mode 100644 index 0000000..51f3673 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/HealerAI.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; +using Server.Spells; +using Server.Spells.First; +using Server.Spells.Second; +using Server.Spells.Fourth; + +namespace Server.Mobiles +{ + public class HealerAI : BaseAI + { + private static NeedDelegate m_Cure = new NeedDelegate( NeedCure ); + private static NeedDelegate m_GHeal = new NeedDelegate( NeedGHeal ); + private static NeedDelegate m_LHeal = new NeedDelegate( NeedLHeal ); + private static NeedDelegate[] m_ACure = new NeedDelegate[] { m_Cure }; + private static NeedDelegate[] m_AGHeal = new NeedDelegate[] { m_GHeal }; + private static NeedDelegate[] m_ALHeal = new NeedDelegate[] { m_LHeal }; + private static NeedDelegate[] m_All = new NeedDelegate[] { m_Cure, m_GHeal, m_LHeal }; + + public HealerAI( BaseCreature m ) : base( m ) + { + } + + public override bool Think() + { + if ( m_Mobile.Deleted ) + return false; + + Target targ = m_Mobile.Target; + + if ( targ != null ) + { + if ( targ is CureSpell.InternalTarget ) + { + ProcessTarget( targ, m_ACure ); + } + else if ( targ is GreaterHealSpell.InternalTarget ) + { + ProcessTarget( targ, m_AGHeal ); + } + else if ( targ is HealSpell.InternalTarget ) + { + ProcessTarget( targ, m_ALHeal ); + } + else + { + targ.Cancel( m_Mobile, TargetCancelType.Canceled ); + } + } + else + { + Mobile toHelp = Find( m_All ); + + if ( toHelp != null ) + { + if ( NeedCure( toHelp ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "{0} needs a cure", toHelp.Name ); + + if ( !(new CureSpell( m_Mobile, null )).Cast() ) + new CureSpell( m_Mobile, null ).Cast(); + } + else if ( NeedGHeal( toHelp ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "{0} needs a greater heal", toHelp.Name ); + + if ( !(new GreaterHealSpell( m_Mobile, null )).Cast() ) + new HealSpell( m_Mobile, null ).Cast(); + } + else if ( NeedLHeal( toHelp ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "{0} needs a lesser heal", toHelp.Name ); + + new HealSpell( m_Mobile, null ).Cast(); + } + } + else + { + if ( AcquireFocusMob( m_Mobile.RangePerception, FightMode.Weakest, false, true, false ) ) + { + WalkMobileRange( m_Mobile.FocusMob, 1, false, 4, 7 ); + } + else + { + WalkRandomInHome( 3, 2, 1 ); + } + } + } + + return true; + } + + private delegate bool NeedDelegate( Mobile m ); + + private void ProcessTarget( Target targ, NeedDelegate[] func ) + { + Mobile toHelp = Find( func ); + + if ( toHelp != null ) + { + if ( targ.Range != -1 && !m_Mobile.InRange( toHelp, targ.Range ) ) + { + DoMove( m_Mobile.GetDirectionTo( toHelp ) | Direction.Running ); + } + else + { + targ.Invoke( m_Mobile, toHelp ); + } + } + else + { + targ.Cancel( m_Mobile, TargetCancelType.Canceled ); + } + } + + private Mobile Find( params NeedDelegate[] funcs ) + { + if ( m_Mobile.Deleted ) + return null; + + Map map = m_Mobile.Map; + + if ( map != null ) + { + double prio = 0.0; + Mobile found = null; + + foreach ( Mobile m in m_Mobile.GetMobilesInRange( m_Mobile.RangePerception ) ) + { + if ( !m_Mobile.CanSee( m ) || !(m is BaseCreature) || ((BaseCreature)m).Team != m_Mobile.Team ) + continue; + + for ( int i = 0; i < funcs.Length; ++i ) + { + if ( funcs[i]( m ) ) + { + double val = -m_Mobile.GetDistanceToSqrt( m ); + + if ( found == null || val > prio ) + { + prio = val; + found = m; + } + + break; + } + } + } + + return found; + } + + return null; + } + + private static bool NeedCure( Mobile m ) + { + return m.Poisoned; + } + + private static bool NeedGHeal( Mobile m ) + { + return m.Hits < m.HitsMax - 40; + } + + private static bool NeedLHeal( Mobile m ) + { + return m.Hits < m.HitsMax - 10; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/MageAI.cs b/Scripts/Mobiles/Base/AI/MageAI.cs new file mode 100644 index 0000000..265561b --- /dev/null +++ b/Scripts/Mobiles/Base/AI/MageAI.cs @@ -0,0 +1,1020 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Spells; +using Server.Spells.Fifth; +using Server.Spells.First; +using Server.Spells.Fourth; +using Server.Spells.Second; +using Server.Spells.Seventh; +using Server.Spells.Sixth; +using Server.Spells.Third; +using Server.Targeting; + +namespace Server.Mobiles +{ + public class MageAI : BaseAI + { + private DateTime m_NextCastTime; + private DateTime m_NextHealTime; + + public MageAI( BaseCreature m ) + : base( m ) + { + } + + public override bool Think() + { + if( m_Mobile.Deleted ) + return false; + + if( ProcessTarget() ) + return true; + else + return base.Think(); + } + + public virtual bool SmartAI + { + get { return ( m_Mobile is BaseVendor ); } + } + + private const double HealChance = 0.10; // 10% chance to heal at gm magery + private const double TeleportChance = 0.05; // 5% chance to teleport at gm magery + private const double DispelChance = 0.75; // 75% chance to dispel at gm magery + + public virtual double ScaleByMagery( double v ) + { + return m_Mobile.Skills[ SkillName.Magery ].Value * v * 0.01; + } + + public override bool DoActionWander() + { + if( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if( m_Mobile.Debug ) + m_Mobile.DebugSay( "I am going to attack {0}", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + m_NextCastTime = DateTime.Now; + } + else if( SmartAI && m_Mobile.Mana < m_Mobile.ManaMax ) + { + m_Mobile.DebugSay( "I am going to meditate" ); + + m_Mobile.UseSkill( SkillName.Meditation ); + } + else + { + m_Mobile.DebugSay( "I am wandering" ); + + m_Mobile.Warmode = false; + + base.DoActionWander(); + + if( ( Utility.RandomDouble() < .05 ) ) + { + Spell spell = CheckCastHealingSpell(); + + if( spell != null ) + spell.Cast(); + } + } + + return true; + } + + private Spell CheckCastHealingSpell() + { + // If I'm poisoned, always attempt to cure. + if( m_Mobile.Poisoned ) + return new CureSpell( m_Mobile, null ); + + // Summoned creatures never heal themselves. + if( m_Mobile.Summoned ) + return null; + + if( m_Mobile.Controlled ) + { + if( DateTime.Now < m_NextHealTime ) + return null; + } + + if( !SmartAI ) + { + if( ScaleByMagery( HealChance ) < Utility.RandomDouble() ) + return null; + } + else + { + if( Utility.Random( 0, 4 + ( m_Mobile.Hits == 0 ? m_Mobile.HitsMax : ( m_Mobile.HitsMax / m_Mobile.Hits ) ) ) < 3 ) + return null; + } + + Spell spell = null; + + if( m_Mobile.Hits < ( m_Mobile.HitsMax - 50 ) ) + { + spell = new GreaterHealSpell( m_Mobile, null ); + + if( spell == null ) + spell = new HealSpell( m_Mobile, null ); + } + else if( m_Mobile.Hits < ( m_Mobile.HitsMax - 10 ) ) + spell = new HealSpell( m_Mobile, null ); + + double delay; + + if( m_Mobile.Int >= 500 ) + delay = Utility.RandomMinMax( 7, 10 ); + else + delay = Math.Sqrt( 600 - m_Mobile.Int ); + + m_NextHealTime = DateTime.Now + TimeSpan.FromSeconds( delay ); + + return spell; + } + + public void RunTo( Mobile m ) + { + if( !SmartAI ) + { + if( !MoveTo( m, true, m_Mobile.RangeFight ) ) + OnFailedMove(); + + return; + } + + if( m.Paralyzed || m.Frozen ) + { + if( m_Mobile.InRange( m, 1 ) ) + RunFrom( m ); + else if( !m_Mobile.InRange( m, m_Mobile.RangeFight > 2 ? m_Mobile.RangeFight : 2 ) && !MoveTo( m, true, 1 ) ) + OnFailedMove(); + } + else + { + if( !m_Mobile.InRange( m, m_Mobile.RangeFight ) ) + { + if( !MoveTo( m, true, 1 ) ) + OnFailedMove(); + } + else if( m_Mobile.InRange( m, m_Mobile.RangeFight - 1 ) ) + { + RunFrom( m ); + } + } + } + + public void RunFrom( Mobile m ) + { + Run( ( m_Mobile.GetDirectionTo( m ) - 4 ) & Direction.Mask ); + } + + public void OnFailedMove() + { + if( !m_Mobile.DisallowAllMoves && ( SmartAI ? Utility.Random( 4 ) == 0 : ScaleByMagery( TeleportChance ) > Utility.RandomDouble() ) ) + { + if( m_Mobile.Target != null ) + m_Mobile.Target.Cancel( m_Mobile, TargetCancelType.Canceled ); + + new TeleportSpell( m_Mobile, null ).Cast(); + + m_Mobile.DebugSay( "I am stuck, I'm going to try teleporting away" ); + } + else if( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if( m_Mobile.Debug ) + m_Mobile.DebugSay( "My move is blocked, so I am going to attack {0}", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + m_Mobile.DebugSay( "I am stuck" ); + } + } + + public void Run( Direction d ) + { + if( ( m_Mobile.Spell != null && m_Mobile.Spell.IsCasting ) || m_Mobile.Paralyzed || m_Mobile.Frozen || m_Mobile.DisallowAllMoves ) + return; + + m_Mobile.Direction = d | Direction.Running; + + if( !DoMove( m_Mobile.Direction, true ) ) + OnFailedMove(); + } + + public virtual Spell GetRandomDamage() + { + return GetRandomDamageSpell(); + } + + public virtual Spell GetRandomDamageSpell() + { + int maxCircle = (int)( ( myMagery + 20.0 ) / ( 100.0 / 7.0 ) ); + + if( maxCircle < 1 ) + maxCircle = 1; + + switch( Utility.Random( maxCircle * 2 ) ) + { + case 0: + case 1: return new MagicArrowSpell( m_Mobile, null ); + case 2: + case 3: return new HarmSpell( m_Mobile, null ); + case 4: + case 5: return new FireballSpell( m_Mobile, null ); + case 6: + case 7: return new LightningSpell( m_Mobile, null ); + case 8: + case 9: return new MindBlastSpell( m_Mobile, null ); + case 10: return new EnergyBoltSpell( m_Mobile, null ); + case 11: return new ExplosionSpell( m_Mobile, null ); + default: return new FlameStrikeSpell( m_Mobile, null ); + } + } + + public virtual Spell GetRandomCurse() + { + return GetRandomCurseSpell(); + } + + public virtual Spell GetRandomCurseSpell() + { + if( Utility.Random( 4 ) == 3 ) + { + if( myMagery >= 40.0 ) + { + return new CurseSpell( m_Mobile, null ); + } + } + + switch( Utility.Random( 3 ) ) + { + default: + case 0: return new WeakenSpell( m_Mobile, null ); + case 1: return new ClumsySpell( m_Mobile, null ); + case 2: return new FeeblemindSpell( m_Mobile, null ); + } + } + + public virtual Spell GetRandomManaDrainSpell() + { + if( Utility.RandomBool() ) + { + if( myMagery >= 80.0 ) + return new ManaVampireSpell( m_Mobile, null ); + } + + return new ManaDrainSpell( m_Mobile, null ); + } + + public virtual Spell DoDispel( Mobile toDispel ) + { + if( !SmartAI ) + { + if( ScaleByMagery( DispelChance ) > Utility.RandomDouble() ) + return new DispelSpell( m_Mobile, null ); + + return ChooseSpell( toDispel ); + } + + Spell spell = CheckCastHealingSpell(); + + if( spell == null ) + { + if( !m_Mobile.DisallowAllMoves && Utility.Random( (int)m_Mobile.GetDistanceToSqrt( toDispel ) ) == 0 ) + spell = new TeleportSpell( m_Mobile, null ); + else if( Utility.Random( 3 ) == 0 && !m_Mobile.InRange( toDispel, 3 ) && !toDispel.Paralyzed && !toDispel.Frozen ) + spell = new ParalyzeSpell( m_Mobile, null ); + else + spell = new DispelSpell( m_Mobile, null ); + } + + return spell; + } + + public virtual double myMagery { get { return m_Mobile.Skills[ SkillName.Magery ].Value; } } + + public virtual Spell ChooseSpell( Mobile c ) + { + Spell spell = null; + + if( !SmartAI ) + { + spell = CheckCastHealingSpell(); + + if( spell != null ) + return spell; + + switch( Utility.Random( 16 ) ) + { + case 0: + case 1: // Poison them + { + //m_Mobile.DebugSay( "Attempting to poison" ); + + if( !c.Poisoned ) + spell = new PoisonSpell( m_Mobile, null ); + + break; + } + case 2: // Bless ourselves. + { + //m_Mobile.DebugSay( "Blessing myself" ); + + spell = new BlessSpell( m_Mobile, null ); + break; + } + case 3: + case 4: // Curse them. + { + //m_Mobile.DebugSay( "Attempting to curse" ); + + spell = GetRandomCurse(); + break; + } + case 5: // Paralyze them. + { + //m_Mobile.DebugSay( "Attempting to paralyze" ); + + if( m_Mobile.Skills[ SkillName.Magery ].Value > 50.0 ) + spell = new ParalyzeSpell( m_Mobile, null ); + + break; + } + case 6: // Drain mana + { + //m_Mobile.DebugSay( "Attempting to drain mana" ); + + spell = GetRandomManaDrainSpell(); + break; + } + case 7: + { + //m_Mobile.DebugSay( "Attempting to Invis" ); + + if( spell == null ) + { + spell = new InvisibilitySpell( m_Mobile, null ); + } + + break; + } + + default: // Damage them. + { + //m_Mobile.DebugSay( "Just doing damage" ); + + spell = GetRandomDamage(); + break; + } + } + + return spell; + } + + spell = CheckCastHealingSpell(); + + if( spell != null ) + return spell; + + switch( Utility.Random( 3 ) ) + { + default: + case 0: // Poison them + { + if( !c.Poisoned ) + spell = new PoisonSpell( m_Mobile, null ); + + break; + } + case 1: // Deal some damage + { + spell = GetRandomDamageSpell(); + + break; + } + case 2: // Set up a combo + { + if( m_Mobile.Mana < 40 && m_Mobile.Mana > 15 ) + { + if( c.Paralyzed && !c.Poisoned ) + { + m_Mobile.DebugSay( "I am going to meditate" ); + + m_Mobile.UseSkill( SkillName.Meditation ); + } + else if( !c.Poisoned ) + { + spell = new ParalyzeSpell( m_Mobile, null ); + } + } + else if( m_Mobile.Mana > 60 ) + { + if( Utility.Random( 2 ) == 0 && !c.Paralyzed && !c.Frozen && !c.Poisoned ) + { + m_Combo = 0; + spell = new ParalyzeSpell( m_Mobile, null ); + } + else + { + m_Combo = 1; + spell = new ExplosionSpell( m_Mobile, null ); + } + } + + break; + } + } + + return spell; + } + + protected int m_Combo = -1; + + public virtual Spell DoCombo( Mobile c ) + { + Spell spell = null; + + if( m_Combo == 0 ) + { + spell = new ExplosionSpell( m_Mobile, null ); + ++m_Combo; // Move to next spell + } + else if( m_Combo == 1 ) + { + spell = new WeakenSpell( m_Mobile, null ); + ++m_Combo; // Move to next spell + } + else if( m_Combo == 2 ) + { + if( !c.Poisoned ) + spell = new PoisonSpell( m_Mobile, null ); + + ++m_Combo; // Move to next spell + } + + if( m_Combo == 3 && spell == null ) + { + switch( Utility.Random( 3 ) ) + { + default: + case 0: + { + if( c.Int < c.Dex ) + spell = new FeeblemindSpell( m_Mobile, null ); + else + spell = new ClumsySpell( m_Mobile, null ); + + ++m_Combo; // Move to next spell + + break; + } + case 1: + { + spell = new EnergyBoltSpell( m_Mobile, null ); + m_Combo = -1; // Reset combo state + break; + } + case 2: + { + spell = new FlameStrikeSpell( m_Mobile, null ); + m_Combo = -1; // Reset combo state + break; + } + } + } + else if( m_Combo == 4 && spell == null ) + { + spell = new MindBlastSpell( m_Mobile, null ); + m_Combo = -1; + } + + return spell; + } + + private TimeSpan GetDelay() + { + double del = ScaleByMagery( 3.0 ); + double min = 6.0 - ( del * 0.75 ); + double max = 6.0 - ( del * 1.25 ); + + return TimeSpan.FromSeconds( min + ( ( max - min ) * Utility.RandomDouble() ) ); + } + + public override bool DoActionCombat() + { + Mobile c = m_Mobile.Combatant; + m_Mobile.Warmode = true; + + if( c == null || c.Deleted || !c.Alive || c.IsDeadBondedPet || !m_Mobile.CanSee( c ) || !m_Mobile.CanBeHarmful( c, false ) || c.Map != m_Mobile.Map ) + { + // Our combatant is deleted, dead, hidden, or we cannot hurt them + // Try to find another combatant + + if( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if( m_Mobile.Debug ) + m_Mobile.DebugSay( "Something happened to my combatant, so I am going to fight {0}", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = c = m_Mobile.FocusMob; + m_Mobile.FocusMob = null; + } + else + { + m_Mobile.DebugSay( "Something happened to my combatant, and nothing is around. I am on guard." ); + Action = ActionType.Guard; + return true; + } + } + + if( !m_Mobile.InLOS( c ) ) + { + m_Mobile.DebugSay( "I can't see my target" ); + + if( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + m_Mobile.DebugSay( "Nobody else is around" ); + m_Mobile.Combatant = c = m_Mobile.FocusMob; + m_Mobile.FocusMob = null; + } + } + + if( SmartAI && !m_Mobile.StunReady && m_Mobile.Skills[ SkillName.HandToHand ].Value >= 80.0 && m_Mobile.Skills[ SkillName.Tactics ].Value >= 80.0 ) + EventSink.InvokeStunRequest( new StunRequestEventArgs( m_Mobile ) ); + + if( !m_Mobile.InRange( c, m_Mobile.RangePerception ) ) + { + // They are somewhat far away, can we find something else? + + if( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + m_Mobile.Combatant = m_Mobile.FocusMob; + m_Mobile.FocusMob = null; + } + else if( !m_Mobile.InRange( c, m_Mobile.RangePerception * 3 ) ) + { + m_Mobile.Combatant = null; + } + + c = m_Mobile.Combatant; + + if( c == null ) + { + m_Mobile.DebugSay( "My combatant has fled, so I am on guard" ); + Action = ActionType.Guard; + + return true; + } + } + + if( !m_Mobile.Controlled && !m_Mobile.Summoned ) + { + if( m_Mobile.Hits < m_Mobile.HitsMax * 20 / 100 ) + { + // We are low on health, should we flee? + + bool flee = false; + + if( m_Mobile.Hits < c.Hits ) + { + // We are more hurt than them + + int diff = c.Hits - m_Mobile.Hits; + + flee = ( Utility.Random( 0, 100 ) > ( 10 + diff ) ); // (10 + diff)% chance to flee + } + else + { + flee = Utility.Random( 0, 100 ) > 10; // 10% chance to flee + } + + if( flee ) + { + if( m_Mobile.Debug ) + m_Mobile.DebugSay( "I am going to flee from {0}", c.Name ); + + Action = ActionType.Flee; + return true; + } + } + } + + if( m_Mobile.Spell == null && DateTime.Now > m_NextCastTime && m_Mobile.InRange( c, 12 ) ) + { + // We are ready to cast a spell + + Spell spell = null; + Mobile toDispel = FindDispelTarget( true ); + + if( m_Mobile.Poisoned ) // Top cast priority is cure + { + m_Mobile.DebugSay( "I am going to cure myself" ); + + spell = new CureSpell( m_Mobile, null ); + } + else if( toDispel != null ) // Something dispellable is attacking us + { + m_Mobile.DebugSay( "I am going to dispel {0}", toDispel ); + + spell = DoDispel( toDispel ); + } + else if( SmartAI && m_Combo != -1 ) // We are doing a spell combo + { + spell = DoCombo( c ); + } + else if( SmartAI && ( c.Spell is HealSpell || c.Spell is GreaterHealSpell ) && !c.Poisoned ) // They have a heal spell out + { + spell = new PoisonSpell( m_Mobile, null ); + } + else + { + spell = ChooseSpell( c ); + } + + // Now we have a spell picked + // Move first before casting + + if( SmartAI && toDispel != null ) + { + if( m_Mobile.InRange( toDispel, 10 ) ) + RunFrom( toDispel ); + else if( !m_Mobile.InRange( toDispel, 12 ) ) + RunTo( toDispel ); + } + else + { + RunTo( c ); + } + + if( spell != null ) + spell.Cast(); + + TimeSpan delay; + + if( SmartAI || ( spell is DispelSpell ) ) + delay = TimeSpan.FromSeconds( m_Mobile.ActiveSpeed ); + else + delay = GetDelay(); + + m_NextCastTime = DateTime.Now; + } + else if( m_Mobile.Spell == null || !m_Mobile.Spell.IsCasting ) + { + RunTo( c ); + } + + return true; + } + + public override bool DoActionGuard() + { + if( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + m_Mobile.DebugSay( "I am going to attack {0}", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + if( !m_Mobile.Controlled ) + { + ProcessTarget(); + + Spell spell = CheckCastHealingSpell(); + + if( spell != null ) + spell.Cast(); + } + + base.DoActionGuard(); + } + + return true; + } + + public override bool DoActionFlee() + { + Mobile c = m_Mobile.Combatant; + + if( ( m_Mobile.Mana > 20 || m_Mobile.Mana == m_Mobile.ManaMax ) && m_Mobile.Hits > ( m_Mobile.HitsMax / 2 ) ) + { + m_Mobile.DebugSay( "I am stronger now, my guard is up" ); + Action = ActionType.Guard; + } + else if( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if( m_Mobile.Debug ) + m_Mobile.DebugSay( "I am scared of {0}", m_Mobile.FocusMob.Name ); + + RunFrom( m_Mobile.FocusMob ); + m_Mobile.FocusMob = null; + + if( m_Mobile.Poisoned && Utility.Random( 0, 5 ) == 0 ) + new CureSpell( m_Mobile, null ).Cast(); + } + else + { + m_Mobile.DebugSay( "Area seems clear, but my guard is up" ); + + Action = ActionType.Guard; + m_Mobile.Warmode = true; + } + + return true; + } + + public Mobile FindDispelTarget( bool activeOnly ) + { + if( m_Mobile.Deleted || m_Mobile.Int < 95 || CanDispel( m_Mobile ) || m_Mobile.AutoDispel ) + return null; + + if( activeOnly ) + { + List aggressed = m_Mobile.Aggressed; + List aggressors = m_Mobile.Aggressors; + + Mobile active = null; + double activePrio = 0.0; + + Mobile comb = m_Mobile.Combatant; + + if( comb != null && !comb.Deleted && comb.Alive && !comb.IsDeadBondedPet && m_Mobile.InRange( comb, 12 ) && CanDispel( comb ) ) + { + active = comb; + activePrio = m_Mobile.GetDistanceToSqrt( comb ); + + if( activePrio <= 2 ) + return active; + } + + for( int i = 0; i < aggressed.Count; ++i ) + { + AggressorInfo info = aggressed[ i ]; + Mobile m = info.Defender; + + if( m != comb && m.Combatant == m_Mobile && m_Mobile.InRange( m, 12 ) && CanDispel( m ) ) + { + double prio = m_Mobile.GetDistanceToSqrt( m ); + + if( active == null || prio < activePrio ) + { + active = m; + activePrio = prio; + + if( activePrio <= 2 ) + return active; + } + } + } + + for( int i = 0; i < aggressors.Count; ++i ) + { + AggressorInfo info = aggressors[ i ]; + Mobile m = info.Attacker; + + if( m != comb && m.Combatant == m_Mobile && m_Mobile.InRange( m, 12 ) && CanDispel( m ) ) + { + double prio = m_Mobile.GetDistanceToSqrt( m ); + + if( active == null || prio < activePrio ) + { + active = m; + activePrio = prio; + + if( activePrio <= 2 ) + return active; + } + } + } + + return active; + } + else + { + Map map = m_Mobile.Map; + + if( map != null ) + { + Mobile active = null, inactive = null; + double actPrio = 0.0, inactPrio = 0.0; + + Mobile comb = m_Mobile.Combatant; + + if( comb != null && !comb.Deleted && comb.Alive && !comb.IsDeadBondedPet && CanDispel( comb ) ) + { + active = inactive = comb; + actPrio = inactPrio = m_Mobile.GetDistanceToSqrt( comb ); + } + + foreach( Mobile m in m_Mobile.GetMobilesInRange( 12 ) ) + { + if( m != m_Mobile && CanDispel( m ) ) + { + double prio = m_Mobile.GetDistanceToSqrt( m ); + + if( !activeOnly && ( inactive == null || prio < inactPrio ) ) + { + inactive = m; + inactPrio = prio; + } + + if( ( m_Mobile.Combatant == m || m.Combatant == m_Mobile ) && ( active == null || prio < actPrio ) ) + { + active = m; + actPrio = prio; + } + } + } + + return active != null ? active : inactive; + } + } + + return null; + } + + public bool CanDispel( Mobile m ) + { + return ( m is BaseCreature && ( (BaseCreature)m ).Summoned && m_Mobile.CanBeHarmful( m, false ) ); + } + + private static int[] m_Offsets = new int[] + { + -1, -1, + -1, 0, + -1, 1, + 0, -1, + 0, 1, + 1, -1, + 1, 0, + 1, 1, + + -2, -2, + -2, -1, + -2, 0, + -2, 1, + -2, 2, + -1, -2, + -1, 2, + 0, -2, + 0, 2, + 1, -2, + 1, 2, + 2, -2, + 2, -1, + 2, 0, + 2, 1, + 2, 2 + }; + + private bool ProcessTarget() + { + Target targ = m_Mobile.Target; + + if( targ == null ) + return false; + + bool isDispel = ( targ is DispelSpell.InternalTarget ); + bool isParalyze = ( targ is ParalyzeSpell.InternalTarget ); + bool isTeleport = ( targ is TeleportSpell.InternalTarget ); + bool isInvisible = ( targ is InvisibilitySpell.InternalTarget ); + bool teleportAway = false; + + Mobile toTarget; + + if( isInvisible ) + { + toTarget = m_Mobile; + } + else if( isDispel ) + { + toTarget = FindDispelTarget( false ); + + if( !SmartAI && toTarget != null ) + RunTo( toTarget ); + else if( toTarget != null && m_Mobile.InRange( toTarget, 10 ) ) + RunFrom( toTarget ); + } + else if( SmartAI && ( isParalyze || isTeleport ) ) + { + toTarget = FindDispelTarget( true ); + + if( toTarget == null ) + { + toTarget = m_Mobile.Combatant; + + if( toTarget != null ) + RunTo( toTarget ); + } + else if( m_Mobile.InRange( toTarget, 10 ) ) + { + RunFrom( toTarget ); + teleportAway = true; + } + else + { + teleportAway = true; + } + } + else + { + toTarget = m_Mobile.Combatant; + + if( toTarget != null ) + RunTo( toTarget ); + } + + if( ( targ.Flags & TargetFlags.Harmful ) != 0 && toTarget != null ) + { + if( ( targ.Range == -1 || m_Mobile.InRange( toTarget, targ.Range ) ) && m_Mobile.CanSee( toTarget ) && m_Mobile.InLOS( toTarget ) ) + { + targ.Invoke( m_Mobile, toTarget ); + } + else if( isDispel ) + { + targ.Cancel( m_Mobile, TargetCancelType.Canceled ); + } + } + else if( ( targ.Flags & TargetFlags.Beneficial ) != 0 ) + { + targ.Invoke( m_Mobile, m_Mobile ); + } + else if( isTeleport && toTarget != null ) + { + Map map = m_Mobile.Map; + + if( map == null ) + { + targ.Cancel( m_Mobile, TargetCancelType.Canceled ); + return true; + } + + int px, py; + + if( teleportAway ) + { + int rx = m_Mobile.X - toTarget.X; + int ry = m_Mobile.Y - toTarget.Y; + + double d = m_Mobile.GetDistanceToSqrt( toTarget ); + + px = toTarget.X + (int)( rx * ( 10 / d ) ); + py = toTarget.Y + (int)( ry * ( 10 / d ) ); + } + else + { + px = toTarget.X; + py = toTarget.Y; + } + + for( int i = 0; i < m_Offsets.Length; i += 2 ) + { + int x = m_Offsets[ i ], y = m_Offsets[ i + 1 ]; + + Point3D p = new Point3D( px + x, py + y, 0 ); + + LandTarget lt = new LandTarget( p, map ); + + if( ( targ.Range == -1 || m_Mobile.InRange( p, targ.Range ) ) && m_Mobile.InLOS( lt ) && map.CanSpawnMobile( px + x, py + y, lt.Z ) && !SpellHelper.CheckMulti( p, map ) ) + { + targ.Invoke( m_Mobile, lt ); + return true; + } + } + + int teleRange = targ.Range; + + if( teleRange < 0 ) + teleRange = 12; + + for( int i = 0; i < 10; ++i ) + { + Point3D randomPoint = new Point3D( m_Mobile.X - teleRange + Utility.Random( teleRange * 2 + 1 ), m_Mobile.Y - teleRange + Utility.Random( teleRange * 2 + 1 ), 0 ); + + LandTarget lt = new LandTarget( randomPoint, map ); + + if( m_Mobile.InLOS( lt ) && map.CanSpawnMobile( lt.X, lt.Y, lt.Z ) && !SpellHelper.CheckMulti( randomPoint, map ) ) + { + targ.Invoke( m_Mobile, new LandTarget( randomPoint, map ) ); + return true; + } + } + + targ.Cancel( m_Mobile, TargetCancelType.Canceled ); + } + else + { + targ.Cancel( m_Mobile, TargetCancelType.Canceled ); + } + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/MeleeAI.cs b/Scripts/Mobiles/Base/AI/MeleeAI.cs new file mode 100644 index 0000000..a686286 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/MeleeAI.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +// +// This is a first simple AI +// +// + +namespace Server.Mobiles +{ + public class MeleeAI : BaseAI + { + public MeleeAI(BaseCreature m) : base (m) + { + } + + public override bool DoActionWander() + { + m_Mobile.DebugSay( "I have no combatant" ); + + if ( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have detected {0}, attacking", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + base.DoActionWander(); + } + + return true; + } + + public override bool DoActionCombat() + { + Mobile combatant = m_Mobile.Combatant; + + if ( combatant == null || combatant.Deleted || combatant.Map != m_Mobile.Map || !combatant.Alive || combatant.IsDeadBondedPet ) + { + m_Mobile.DebugSay( "My combatant is gone, so my guard is up" ); + + Action = ActionType.Guard; + + return true; + } + + if ( !m_Mobile.InRange( combatant, m_Mobile.RangePerception ) ) + { + // They are somewhat far away, can we find something else? + + if ( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + m_Mobile.Combatant = m_Mobile.FocusMob; + m_Mobile.FocusMob = null; + } + else if ( !m_Mobile.InRange( combatant, m_Mobile.RangePerception * 3 ) ) + { + m_Mobile.Combatant = null; + } + + combatant = m_Mobile.Combatant; + + if ( combatant == null ) + { + m_Mobile.DebugSay( "My combatant has fled, so I am on guard" ); + Action = ActionType.Guard; + + return true; + } + } + + /*if ( !m_Mobile.InLOS( combatant ) ) + { + if ( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + m_Mobile.Combatant = combatant = m_Mobile.FocusMob; + m_Mobile.FocusMob = null; + } + }*/ + + if ( MoveTo( combatant, true, m_Mobile.RangeFight ) ) + { + m_Mobile.Direction = m_Mobile.GetDirectionTo( combatant ); + } + else if ( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "My move is blocked, so I am going to attack {0}", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + + return true; + } + else if ( m_Mobile.GetDistanceToSqrt( combatant ) > m_Mobile.RangePerception + 1 ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I cannot find {0}, so my guard is up", combatant.Name ); + + Action = ActionType.Guard; + + return true; + } + else + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I should be closer to {0}", combatant.Name ); + } + + if ( !m_Mobile.Controlled && !m_Mobile.Summoned ) + { + if ( m_Mobile.Hits < m_Mobile.HitsMax * 20/100 ) + { + // We are low on health, should we flee? + + bool flee = false; + + if ( m_Mobile.Hits < combatant.Hits ) + { + // We are more hurt than them + + int diff = combatant.Hits - m_Mobile.Hits; + + flee = ( Utility.Random( 0, 100 ) < (10 + diff) ); // (10 + diff)% chance to flee + } + else + { + flee = Utility.Random( 0, 100 ) < 10; // 10% chance to flee + } + + if ( flee ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I am going to flee from {0}", combatant.Name ); + + Action = ActionType.Flee; + } + } + } + + return true; + } + + public override bool DoActionGuard() + { + if ( AcquireFocusMob(m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I have detected {0}, attacking", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + base.DoActionGuard(); + } + + return true; + } + + public override bool DoActionFlee() + { + if ( m_Mobile.Hits > m_Mobile.HitsMax/2 ) + { + m_Mobile.DebugSay( "I am stronger now, so I will continue fighting" ); + Action = ActionType.Combat; + } + else + { + m_Mobile.FocusMob = m_Mobile.Combatant; + base.DoActionFlee(); + } + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/PredatorAI.cs b/Scripts/Mobiles/Base/AI/PredatorAI.cs new file mode 100644 index 0000000..1205891 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/PredatorAI.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + + +/* + * PredatorAI, its an animal that can attack + * Dont flee but dont attack if not hurt or attacked + * + */ + +namespace Server.Mobiles +{ + public class PredatorAI : BaseAI + { + public PredatorAI(BaseCreature m) : base (m) + { + } + + public override bool DoActionWander() + { + if ( m_Mobile.Combatant != null ) + { + m_Mobile.DebugSay( "I am hurt or being attacked, I kill him" ); + Action = ActionType.Combat; + } + else if (AcquireFocusMob(m_Mobile.RangePerception, m_Mobile.FightMode, true, false, true)) + { + m_Mobile.DebugSay( "There is something near, I go away" ); + Action = ActionType.Backoff; + } + else + { + base.DoActionWander(); + } + + return true; + } + + public override bool DoActionCombat() + { + Mobile combatant = m_Mobile.Combatant; + + if ( combatant == null || combatant.Deleted || combatant.Map != m_Mobile.Map ) + { + m_Mobile.DebugSay( "My combatant is gone, so my guard is up" ); + Action = ActionType.Wander; + return true; + } + + if ( WalkMobileRange( combatant, 1, true, m_Mobile.RangeFight, m_Mobile.RangeFight ) ) + { + m_Mobile.Direction = m_Mobile.GetDirectionTo( combatant ); + } + else + { + if ( m_Mobile.GetDistanceToSqrt( combatant ) > m_Mobile.RangePerception + 1 ) + { + m_Mobile.DebugSay( "I cannot find {0}", combatant.Name ); + + Action = ActionType.Wander; + return true; + } + else + { + m_Mobile.DebugSay( "I should be closer to {0}", combatant.Name ); + } + } + + return true; + } + + public override bool DoActionBackoff() + { + if ( m_Mobile.IsHurt() || m_Mobile.Combatant != null ) + { + Action = ActionType.Combat; + } + else + { + if (AcquireFocusMob(m_Mobile.RangePerception * 2, FightMode.Closest, true, false , true)) + { + if ( WalkMobileRange(m_Mobile.FocusMob, 1, false, m_Mobile.RangePerception, m_Mobile.RangePerception * 2) ) + { + m_Mobile.DebugSay( "Well, here I am safe" ); + Action = ActionType.Wander; + } + } + else + { + m_Mobile.DebugSay( "I have lost my focus, lets relax" ); + Action = ActionType.Wander; + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/SpeedInfo.cs b/Scripts/Mobiles/Base/AI/SpeedInfo.cs new file mode 100644 index 0000000..2d29846 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/SpeedInfo.cs @@ -0,0 +1,458 @@ +using System; +using System.Collections; +using Server; +using Server.Mobiles; + +namespace Server +{ + public class SpeedInfo + { + // Should we use the new method of speeds? + private static bool Enabled = true; + + private double m_ActiveSpeed; + private double m_PassiveSpeed; + private Type[] m_Types; + + public double ActiveSpeed + { + get{ return m_ActiveSpeed; } + set{ m_ActiveSpeed = value; } + } + + public double PassiveSpeed + { + get{ return m_PassiveSpeed; } + set{ m_PassiveSpeed = value; } + } + + public Type[] Types + { + get{ return m_Types; } + set{ m_Types = value; } + } + + public SpeedInfo( double activeSpeed, double passiveSpeed, Type[] types ) + { + m_ActiveSpeed = activeSpeed; + m_PassiveSpeed = passiveSpeed; + m_Types = types; + } + + public static bool Contains( object obj ) + { + if ( !Enabled ) + return false; + + if ( m_Table == null ) + LoadTable(); + + SpeedInfo sp = (SpeedInfo)m_Table[obj.GetType()]; + + return ( sp != null ); + } + + public static bool GetSpeeds( object obj, ref double activeSpeed, ref double passiveSpeed ) + { + if ( !Enabled ) + return false; + + if ( m_Table == null ) + LoadTable(); + + SpeedInfo sp = (SpeedInfo)m_Table[obj.GetType()]; + + if ( sp == null ) + return false; + + activeSpeed = sp.ActiveSpeed; + passiveSpeed = sp.PassiveSpeed; + + return true; + } + + private static void LoadTable() + { + m_Table = new Hashtable(); + + for ( int i = 0; i < m_Speeds.Length; ++i ) + { + SpeedInfo info = m_Speeds[i]; + Type[] types = info.Types; + + for ( int j = 0; j < types.Length; ++j ) + m_Table[types[j]] = info; + } + } + + private static Hashtable m_Table; + + private static SpeedInfo[] m_Speeds = new SpeedInfo[] + { + /* Slow */ + new SpeedInfo( 0.3, 0.6, new Type[] + { + typeof( RottingDrake ), + typeof( ZombieDragon ), + typeof( CarcassWorm ), + typeof( Meglasaur ), + typeof( Gorceratops ), + typeof( Stegosaurus ), + typeof( Turtle ), + typeof( Shambler ), + typeof( ShamblingMound ), + typeof( AntLion ), + typeof( ArcticOgreLord ), + typeof( BoneKnight ), + typeof( EarthElemental ), + typeof( MeteorElemental ), + typeof( StoneGolem ), + typeof( StoneStatue ), + typeof( Goliath ), + typeof( MudElemental ), + typeof( MagmaElemental ), + typeof( WoodElemental ), + typeof( Ettin ), + typeof( SnowEttin ), + typeof( SwampThing ), + typeof( FrostOoze ), + typeof( FrostTroll ), + typeof( Ghoul ), + typeof( Wight ), + typeof( Golem ), + typeof( HeadlessOne ), + typeof( Mummy ), + typeof( Ogre ), + typeof( Owlbear ), + typeof( Sasquatch ), + typeof( CorpseGolem ), + typeof( FleshGolem ), + typeof( FleshGoliath ), + typeof( Caveman ), + typeof( OgreLord ), + typeof( ForestGiant ), + typeof( HillGiant ), + typeof( MountainGiant ), + typeof( FrostGiant ), + typeof( Xorn ), + typeof( Rat ), + typeof( RottingCorpse ), + typeof( Skeleton ), + typeof( Slime ), + typeof( Sludge ), + typeof( LargeSlime ), + typeof( Zombie ), + typeof( ZombieGargoyle ), + typeof( GargoyleUndead ), + typeof( Walrus ) + } ), + /* Fast */ + new SpeedInfo( 0.2, 0.4, new Type[] + { + typeof( BoneClaw ), + typeof( ShadowDemon ), + typeof( Torax ), + typeof( Teradactyl ), + typeof( AirElemental ), + typeof( Typhoon ), + typeof( AncientWyrm ), + typeof( Balron ), + typeof( SeaDevil ), + typeof( DemonClaw ), + typeof( BladeSpirits ), + typeof( DreadSpider ), + typeof( Efreet ), + typeof( Lich ), + typeof( Vampire ), + typeof( Nightmare ), + typeof( Cerberus ), + typeof( Serperus ), + typeof( Haderus ), + typeof( OphidianArchmage ), + typeof( OphidianMage ), + typeof( OphidianWarrior ), + typeof( OphidianMatriarch ), + typeof( OphidianKnight ), + typeof( Naga ), + typeof( NagaWarrior ), + typeof( NagaQueen ), + typeof( FireNaga ), + typeof( Kobra ), + typeof( Medusa ), + typeof( PoisonElemental ), + typeof( GasCloud ), + typeof( StormCloud ), + typeof( IceSalamander ), + typeof( FireSalamander ), + typeof( Raptor ), + typeof( SandVortex ), + typeof( SavageShaman ), + typeof( SnowElemental ), + typeof( SuccubusQueen ), + typeof( WhiteWyrm ), + typeof( Wisp ), + typeof( WidowQueen ), + typeof( Kith ), + typeof( BloodSpider ), + typeof( GiantBlackWidow ) + } ), + /* Very Fast */ + new SpeedInfo( 0.175, 0.350, new Type[] + { + typeof( EnergyVortex ), + typeof( Pixie ), + typeof( Fairy ), + typeof( Swarm ), + typeof( SilverSerpent ), + typeof( Leviathan ), + } ), + /* Medium */ + new SpeedInfo( 0.25, 0.5, new Type[] + { + typeof( Demoness ), + typeof( Hydra ), + typeof( SeaHydra ), + typeof( Goblin ), + typeof( GoblinArcher ), + typeof( GoblinWarrior ), + typeof( MummyLord ), + typeof( GiantCrab ), + typeof( Lobstran ), + typeof( Lurker ), + typeof( ForestStalker ), + typeof( CaveDweller ), + typeof( Minotaur ), + typeof( MinotaurLord ), + typeof( MinotaurChief ), + typeof( Ent ), + typeof( Fungal ), + typeof( FungalMage ), + typeof( Sphinx ), + typeof( RoyalSphinx ), + typeof( AncientSphinx ), + typeof( AcidElemental ), + typeof( Alligator ), + typeof( AncientLich ), + typeof( AncientVampire ), + typeof( Bird ), + typeof( BlackBear ), + typeof( BloodElemental ), + typeof( BloodElementalElder ), + typeof( PoisonElementalElder ), + typeof( WaterElementalElder ), + typeof( Boar ), + typeof( BoneMagi ), + typeof( Brigand ), + typeof( BlackKnight ), + typeof( BrownBear ), + typeof( Bull ), + typeof( BullFrog ), + typeof( Cat ), + typeof( Centaur ), + typeof( Chicken ), + typeof( Cougar ), + typeof( Cow ), + typeof( Cyclops ), + typeof( CyclopsChief ), + typeof( CyclopsLord ), + typeof( Daemon ), + typeof( Ktulu ), + typeof( Deviless ), + typeof( HornedDevil ), + typeof( IceDevil ), + typeof( DeepSeaSerpent ), + typeof( GiantEel ), + typeof( GiantSquid ), + typeof( DemonicSpirit ), + typeof( DireWolf ), + typeof( Dog ), + typeof( Dolphin ), + typeof( GreatWhite ), + typeof( Lochasaur ), + typeof( Megalodon ), + typeof( Shark ), + typeof( Seahorse ), + typeof( Tyranasaur ), + typeof( SeaDragon ), + typeof( Dragon ), + typeof( Drakkhen ), + typeof( DragonTurtle ), + typeof( Drake ), + typeof( LavaDrake ), + typeof( SeaDrake ), + typeof( SwampDragon ), + typeof( Dwarf ), + typeof( DwarfWarrior ), + typeof( DwarfKnight ), + typeof( Eagle ), + typeof( ElderGazer ), + typeof( AncientGazer ), + typeof( EvilMage ), + typeof( EvilMageLord ), + typeof( MindFlayer ), + typeof( Executioner ), + typeof( Savage ), + typeof( SavageLeader ), + typeof( FireElemental ), + typeof( LightningElemental ), + typeof( FireGargoyle ), + typeof( FrostSpider ), + typeof( Shaclaw ), + typeof( Gargoyle ), + typeof( GargoyleMage ), + typeof( GargoyleKnight ), + typeof( GargoyleIce ), + typeof( GargoyleStone ), + typeof( GargoyleWizard ), + typeof( GargoyleCrimson ), + typeof( Gazer ), + typeof( IceSerpent ), + typeof( GiantRat ), + typeof( GiantSerpent ), + typeof( Viper ), + typeof( Cobra ), + typeof( GiantSpider ), + typeof( GiantToad ), + typeof( IceToad ), + typeof( FireToad ), + typeof( Goat ), + typeof( Gorilla ), + typeof( Ape ), + typeof( GreatDeer ), + typeof( GreyWolf ), + typeof( GrizzlyBear ), + typeof( CaveBear ), + typeof( KodiakBear ), + typeof( Lion ), + typeof( Tiger ), + typeof( Manticore ), + typeof( SnowBear ), + typeof( PandaBear ), + typeof( Harpy ), + typeof( ElderHarpy ), + typeof( GiantHawk ), + typeof( GiantRaven ), + typeof( Roc ), + typeof( AxeBeak ), + typeof( Griffon ), + typeof( Hippogriff ), + typeof( HellHound ), + typeof( Deer ), + typeof( Hobgoblin ), + typeof( HobgoblinChief ), + typeof( HobgoblinArcher ), + typeof( HobgoblinShaman ), + typeof( Horse ), + typeof( IceElemental ), + typeof( IceFiend ), + typeof( Imp ), + typeof( FireImp ), + typeof( IceImp ), + typeof( Kraken ), + typeof( HellCat ), + typeof( LavaLizard ), + typeof( GiantLizard ), + typeof( LavaSerpent ), + typeof( Lizardman ), + typeof( Drasolisk ), + typeof( Silisk ), + typeof( Sakkhra ), + typeof( SakkhraShaman ), + typeof( Sahuagin ), + typeof( SahuaginMage ), + typeof( Llama ), + typeof( Mongbat ), + typeof( MountainGoat ), + typeof( Dagon ), + typeof( Krakoa ), + typeof( OgreMagi ), + typeof( Minion ), + typeof( MinionWizard ), + typeof( MinionWarrior ), + typeof( Orc ), + typeof( OrcCaptain ), + typeof( OrcishLord ), + typeof( OrcishMage ), + typeof( PackHorse ), + typeof( PackLlama ), + typeof( Pirate ), + typeof( Panther ), + typeof( Pig ), + typeof( PolarBear ), + typeof( Rabbit ), + typeof( Raccoon ), + typeof( Squirrel ), + typeof( Ratman ), + typeof( RatmanArcher ), + typeof( RatmanMage ), + typeof( Satyr ), + typeof( FlameCrawler ), + typeof( Scorpion ), + typeof( Mantis ), + typeof( SandScorpion ), + typeof( DeadlyScorpion ), + typeof( SeaSerpent ), + typeof( Shade ), + typeof( ShadowWyrm ), + typeof( Sheep ), + typeof( BoneDrake ), + typeof( SkeletalDragon ), + typeof( VampiricDragon ), + typeof( VampiricDrake ), + typeof( SkeletalMage ), + typeof( SkeletonArcher ), + typeof( Snake ), + typeof( SnowLeopard ), + typeof( Spectre ), + typeof( StoneGargoyle ), + typeof( StoneHarpy ), + typeof( StormGiant ), + typeof( ShadowTitan ), + typeof( SandGiant ), + typeof( JungleGiant ), + typeof( Succubus ), + typeof( SwampTentacle ), + typeof( AntaurWorker ), + typeof( AntaurSoldier ), + typeof( AntaurLord ), + typeof( AntaurQueen ), + typeof( TerathanAvenger ), + typeof( TerathanDrone ), + typeof( TerathanMatriarch ), + typeof( TerathanWarrior ), + typeof( TimberWolf ), + typeof( Titan ), + typeof( Troll ), + typeof( Yeti ), + typeof( Bugbear ), + typeof( Unicorn ), + typeof( DreadHorn ), + typeof( WaterElemental ), + typeof( DeepSeaElemental ), + typeof( WhippingVine ), + typeof( WhiteWolf ), + typeof( Wraith ), + typeof( AncientWyvern ), + typeof( Wyvern ), + typeof( Pharaoh ), + typeof( LichLord ), + typeof( Nazghoul ), + typeof( Demilich ), + typeof( VampireLord ), + typeof( SkeletalKnight ), + typeof( Bat ), + typeof( VampireBat ), + typeof( CaveBat ), + typeof( Stirge ), + typeof( ArcaneScarab ), + typeof( Werewolf ), + typeof( Scarab ), + typeof( GoraxHorned ), + typeof( GoraxSlicer ), + typeof( GiantScarab ), + typeof( IronBeetle ), + typeof( Beetle ) + } ) + }; + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/ThiefAI.cs b/Scripts/Mobiles/Base/AI/ThiefAI.cs new file mode 100644 index 0000000..f9f5c39 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/ThiefAI.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; +using Server.Items; + +// +// This is a first simple AI +// +// + +namespace Server.Mobiles +{ + public class ThiefAI : BaseAI + { + public ThiefAI(BaseCreature m) : base (m) + { + } + + private Item m_toDisarm; + public override bool DoActionWander() + { + m_Mobile.DebugSay( "I have no combatant" ); + + if ( AcquireFocusMob( m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + m_Mobile.DebugSay( "I have detected {0}, attacking", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + base.DoActionWander(); + } + + return true; + } + + public override bool DoActionCombat() + { + Mobile combatant = m_Mobile.Combatant; + + if ( combatant == null || combatant.Deleted || combatant.Map != m_Mobile.Map ) + { + m_Mobile.DebugSay( "My combatant is gone, so my guard is up" ); + + Action = ActionType.Guard; + + return true; + } + + if ( WalkMobileRange( combatant, 1, true, m_Mobile.RangeFight, m_Mobile.RangeFight ) ) + { + m_Mobile.Direction = m_Mobile.GetDirectionTo( combatant ); + if ( m_toDisarm == null ) + m_toDisarm = combatant.FindItemOnLayer( Layer.OneHanded ); + + if ( m_toDisarm == null ) + m_toDisarm = combatant.FindItemOnLayer( Layer.TwoHanded ); + + if ( m_toDisarm != null && m_toDisarm.IsChildOf( m_Mobile.Backpack ) ) + { + m_toDisarm = combatant.FindItemOnLayer( Layer.OneHanded ); + if ( m_toDisarm == null ) + m_toDisarm = combatant.FindItemOnLayer( Layer.TwoHanded ); + } + if ( !m_Mobile.DisarmReady && m_Mobile.Skills[SkillName.HandToHand].Value >= 80.0 && m_Mobile.Skills[SkillName.Tactics].Value >= 80.0 && m_toDisarm != null ) + EventSink.InvokeDisarmRequest( new DisarmRequestEventArgs( m_Mobile ) ); + + if ( m_toDisarm != null && m_toDisarm.IsChildOf( combatant.Backpack ) && m_Mobile.NextSkillTime <= DateTime.Now && (m_toDisarm.LootType != LootType.Blessed ) ) + { + m_Mobile.DebugSay( "Trying to steal from combatant." ); + m_Mobile.UseSkill( SkillName.Stealing ); + if ( m_Mobile.Target != null ) + m_Mobile.Target.Invoke( m_Mobile, m_toDisarm ); + } + else if ( m_toDisarm == null && m_Mobile.NextSkillTime <= DateTime.Now ) + { + Container cpack = combatant.Backpack; + + if ( cpack != null ) + { + Item steala = cpack.FindItemByType( typeof ( Bandage ) ); + if ( steala != null ) + { + m_Mobile.DebugSay( "Trying to steal from combatant." ); + m_Mobile.UseSkill( SkillName.Stealing ); + if ( m_Mobile.Target != null ) + m_Mobile.Target.Invoke( m_Mobile, steala ); + } + Item stealb = cpack.FindItemByType( typeof ( Nightshade ) ); + if ( stealb != null ) + { + m_Mobile.DebugSay( "Trying to steal from combatant." ); + m_Mobile.UseSkill( SkillName.Stealing ); + if ( m_Mobile.Target != null ) + m_Mobile.Target.Invoke( m_Mobile, stealb ); + } + Item stealc = cpack.FindItemByType( typeof ( BlackPearl ) ); + if ( stealc != null ) + { + m_Mobile.DebugSay( "Trying to steal from combatant." ); + m_Mobile.UseSkill( SkillName.Stealing ); + if ( m_Mobile.Target != null ) + m_Mobile.Target.Invoke( m_Mobile, stealc ); + } + + Item steald = cpack.FindItemByType( typeof ( MandrakeRoot ) ); + if ( steald != null ) + { + m_Mobile.DebugSay( "Trying to steal from combatant." ); + m_Mobile.UseSkill( SkillName.Stealing ); + if ( m_Mobile.Target != null ) + m_Mobile.Target.Invoke( m_Mobile, steald ); + } + else if ( steala == null && stealb == null && stealc == null && steald == null ) + { + m_Mobile.DebugSay( "I am going to flee from {0}", combatant.Name ); + + Action = ActionType.Flee; + } + } + } + } + else + { + m_Mobile.DebugSay( "I should be closer to {0}", combatant.Name ); + } + + if ( m_Mobile.Hits < m_Mobile.HitsMax * 20/100 ) + { + // We are low on health, should we flee? + + bool flee = false; + + if ( m_Mobile.Hits < combatant.Hits ) + { + // We are more hurt than them + + int diff = combatant.Hits - m_Mobile.Hits; + + flee = ( Utility.Random( 0, 100 ) > (10 + diff) ); // (10 + diff)% chance to flee + } + else + { + flee = Utility.Random( 0, 100 ) > 10; // 10% chance to flee + } + + if ( flee ) + { + m_Mobile.DebugSay( "I am going to flee from {0}", combatant.Name ); + + Action = ActionType.Flee; + } + } + + return true; + } + + public override bool DoActionGuard() + { + if ( AcquireFocusMob(m_Mobile.RangePerception, m_Mobile.FightMode, false, false, true ) ) + { + m_Mobile.DebugSay( "I have detected {0}, attacking", m_Mobile.FocusMob.Name ); + + m_Mobile.Combatant = m_Mobile.FocusMob; + Action = ActionType.Combat; + } + else + { + base.DoActionGuard(); + } + + return true; + } + + public override bool DoActionFlee() + { + if ( m_Mobile.Hits > m_Mobile.HitsMax/2 ) + { + m_Mobile.DebugSay( "I am stronger now, so I will continue fighting" ); + Action = ActionType.Combat; + } + else + { + m_Mobile.FocusMob = m_Mobile.Combatant; + base.DoActionFlee(); + } + + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/TimidAI.cs b/Scripts/Mobiles/Base/AI/TimidAI.cs new file mode 100644 index 0000000..edd7fb0 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/TimidAI.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +namespace Server.Mobiles +{ + public class TimidAI : BaseAI + { + public TimidAI(BaseCreature m) : base (m) + { + } + + public override bool DoActionWander() + { + if (AcquireFocusMob(m_Mobile.RangePerception, m_Mobile.FightMode, true, false, true)) + { + m_Mobile.DebugSay( "There is something near, I go away" ); + Action = ActionType.Backoff; + } + else if ( m_Mobile.IsHurt() || m_Mobile.Combatant != null ) + { + m_Mobile.DebugSay( "I am hurt or being attacked, I flee" ); + Action = ActionType.Flee; + } + else + { + base.DoActionWander(); + } + + return true; + } + + public override bool DoActionCombat() + { + Mobile combatant = m_Mobile.Combatant; + + if ( combatant == null || combatant.Deleted || combatant.Map != m_Mobile.Map ) + { + m_Mobile.DebugSay( "My combatant is gone.." ); + + Action = ActionType.Wander; + + return true; + } + + if ( WalkMobileRange( combatant, 1, true, m_Mobile.RangeFight, m_Mobile.RangeFight ) ) + { + m_Mobile.Direction = m_Mobile.GetDirectionTo( combatant ); + } + else + { + if ( m_Mobile.GetDistanceToSqrt( combatant ) > m_Mobile.RangePerception + 1 ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I cannot find {0}", combatant.Name ); + + Action = ActionType.Wander; + + return true; + } + else + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I should be closer to {0}", combatant.Name ); + } + } + + if ( !m_Mobile.Controlled && !m_Mobile.Summoned ) + { + double hitPercent = (double)m_Mobile.Hits / m_Mobile.HitsMax; + + if ( hitPercent < 0.1 ) + { + m_Mobile.DebugSay( "I am low on health!" ); + Action = ActionType.Flee; + } + } + + return true; + } + + public override bool DoActionBackoff() + { + double hitPercent = (double)m_Mobile.Hits / m_Mobile.HitsMax; + + if ( !m_Mobile.Summoned && !m_Mobile.Controlled && hitPercent < 0.1 ) // Less than 10% health + { + Action = ActionType.Flee; + } + else + { + if (AcquireFocusMob(m_Mobile.RangePerception * 2, FightMode.Closest, true, false , true)) + { + if ( WalkMobileRange(m_Mobile.FocusMob, 1, false, m_Mobile.RangePerception, m_Mobile.RangePerception * 2) ) + { + m_Mobile.DebugSay( "Well, here I am safe" ); + Action = ActionType.Wander; + } + } + else + { + m_Mobile.DebugSay( "I have lost my focus, lets relax" ); + Action = ActionType.Wander; + } + } + + return true; + } + + public override bool DoActionFlee() + { + AcquireFocusMob(m_Mobile.RangePerception * 2, m_Mobile.FightMode, true, false, true); + + if ( m_Mobile.FocusMob == null ) + m_Mobile.FocusMob = m_Mobile.Combatant; + + return base.DoActionFlee(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AI/VendorAI.cs b/Scripts/Mobiles/Base/AI/VendorAI.cs new file mode 100644 index 0000000..f7dcaf0 --- /dev/null +++ b/Scripts/Mobiles/Base/AI/VendorAI.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +// +// This is a first simple AI +// +// + +namespace Server.Mobiles +{ + public class VendorAI : BaseAI + { + public VendorAI(BaseCreature m) : base (m) + { + } + + public override bool DoActionWander() + { + m_Mobile.DebugSay( "I'm fine" ); + + if ( m_Mobile.Combatant != null ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "{0} is attacking me", m_Mobile.Combatant.Name ); + + m_Mobile.Say( Utility.RandomList( 1005305, 501603 ) ); + + Action = ActionType.Flee; + } + else + { + if ( m_Mobile.FocusMob != null ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "{0} has talked to me", m_Mobile.FocusMob.Name ); + + Action = ActionType.Interact; + } + else + { + m_Mobile.Warmode = false; + + base.DoActionWander(); + } + } + + return true; + } + + public override bool DoActionInteract() + { + Mobile customer = m_Mobile.FocusMob; + + if ( m_Mobile.Combatant != null ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "{0} is attacking me", m_Mobile.Combatant.Name ); + + m_Mobile.Say( Utility.RandomList( 1005305, 501603 ) ); + + Action = ActionType.Flee; + + return true; + } + + if ( customer == null || customer.Deleted || customer.Map != m_Mobile.Map ) + { + m_Mobile.DebugSay( "My customer have disapeared" ); + m_Mobile.FocusMob = null; + + Action = ActionType.Wander; + } + else + { + if ( customer.InRange( m_Mobile, m_Mobile.RangeFight ) ) + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "I am with {0}", customer.Name ); + + m_Mobile.Direction = m_Mobile.GetDirectionTo( customer ); + } + else + { + if ( m_Mobile.Debug ) + m_Mobile.DebugSay( "{0} is gone", customer.Name ); + + m_Mobile.FocusMob = null; + + Action = ActionType.Wander; + } + } + + return true; + } + + public override bool DoActionGuard() + { + m_Mobile.FocusMob = m_Mobile.Combatant; + return base.DoActionGuard(); + } + + public override bool HandlesOnSpeech( Mobile from ) + { + if ( from.InRange( m_Mobile, 4 ) ) + return true; + + return base.HandlesOnSpeech( from ); + } + + // Temporary + public override void OnSpeech( SpeechEventArgs e ) + { + base.OnSpeech( e ); + + Mobile from = e.Mobile; + + if ( m_Mobile is BaseVendor && from.InRange( m_Mobile, Core.AOS ? 1 : 4 ) && !e.Handled ) + { + if ( e.HasKeyword( 0x14D ) ) // *vendor sell* + { + e.Handled = true; + + ((BaseVendor)m_Mobile).VendorSell( from ); + m_Mobile.FocusMob = from; + } + else if ( e.HasKeyword( 0x3C ) ) + { + e.Handled = true; + + ((BaseVendor)m_Mobile).VendorBuy( from ); + m_Mobile.FocusMob = from; + } + else if ( WasNamed( e.Speech ) ) + { + e.Handled = true; + + if ( e.HasKeyword( 0x177 ) ) // *sell* + ((BaseVendor)m_Mobile).VendorSell( from ); + else if ( e.HasKeyword( 0x171 ) ) // *buy* + ((BaseVendor)m_Mobile).VendorBuy( from ); + + m_Mobile.FocusMob = from; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/AnimalBuy.cs b/Scripts/Mobiles/Base/AnimalBuy.cs new file mode 100644 index 0000000..b666331 --- /dev/null +++ b/Scripts/Mobiles/Base/AnimalBuy.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections; +using Server.Items; + +namespace Server.Mobiles +{ + public class AnimalBuyInfo : GenericBuyInfo + { + private int m_ControlSlots; + + public AnimalBuyInfo( int controlSlots, Type type, int price, int amount, int itemID, int hue ) : this( controlSlots, null, type, price, amount, itemID, hue ) + { + } + + public AnimalBuyInfo( int controlSlots, string name, Type type, int price, int amount, int itemID, int hue ) : base( name, type, price, amount, itemID, hue ) + { + m_ControlSlots = controlSlots; + } + + public override int ControlSlots + { + get + { + return m_ControlSlots; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/BaseCreature.cs b/Scripts/Mobiles/Base/BaseCreature.cs new file mode 100644 index 0000000..2b82576 --- /dev/null +++ b/Scripts/Mobiles/Base/BaseCreature.cs @@ -0,0 +1,4127 @@ +using System; +using System.Collections.Generic; +using Server.Regions; +using Server.Targeting; +using Server.Network; +using Server.Multis; +using Server.Spells; +using Server.Misc; +using Server.Items; +using Server.ContextMenus; +using Server.Engines.PartySystem; + +namespace Server.Mobiles +{ + #region Enums + /// + /// Summary description for MobileAI. + /// + /// + public enum FightMode + { + None, // Never focus on others + Aggressor, // Only attack aggressors + Strongest, // Attack the strongest + Weakest, // Attack the weakest + Closest, // Attack the closest + Evil // Only attack aggressor -or- negative karma + } + + public enum Clan + { + Monster, + Undead, + Demonic, + Wizard, + Humanoid, + Citizen + } + + public enum OrderType + { + None, //When no order, let's roam + Come, //"(All/Name) come" Summons all or one pet to your location. + Drop, //"(Name) drop" Drops its loot to the ground (if it carries any). + Follow, //"(Name) follow" Follows targeted being. + //"(All/Name) follow me" Makes all or one pet follow you. + Friend, //"(Name) friend" Allows targeted player to confirm resurrection. + Unfriend, // Remove a friend + Guard, //"(Name) guard" Makes the specified pet guard you. Pets can only guard their owner. + //"(All/Name) guard me" Makes all or one pet guard you. + Attack, //"(All/Name) kill", + //"(All/Name) attack" All or the specified pet(s) currently under your control attack the target. + Release, //"(Name) release" Releases pet back into the wild (removes "tame" status). + Stay, //"(All/Name) stay" All or the specified pet(s) will stop and stay in current spot. + Stop, //"(All/Name) stop Cancels any current orders to attack, guard or follow. + Transfer //"(Name) transfer" Transfers complete ownership to targeted player. + } + + public enum MeatType + { + Ribs, + Bird, + Lamb, + Fish, + Ham, + BigBird + } + + #endregion + + public class DamageStore : IComparable + { + public Mobile m_Mobile; + public int m_Damage; + public bool m_HasRight; + + public DamageStore( Mobile m, int damage ) + { + m_Mobile = m; + m_Damage = damage; + } + + public int CompareTo( object obj ) + { + DamageStore ds = (DamageStore)obj; + + return ds.m_Damage - m_Damage; + } + } + + [AttributeUsage( AttributeTargets.Class )] + public class FriendlyNameAttribute : Attribute + { + private TextDefinition m_FriendlyName; + + public TextDefinition FriendlyName + { + get + { + return m_FriendlyName; + } + } + + public FriendlyNameAttribute( TextDefinition friendlyName ) + { + m_FriendlyName = friendlyName; + } + + public static TextDefinition GetFriendlyNameFor( Type t ) + { + if( t.IsDefined( typeof( FriendlyNameAttribute ), false ) ) + { + object[] objs = t.GetCustomAttributes( typeof( FriendlyNameAttribute ), false ); + + if( objs != null && objs.Length > 0 ) + { + FriendlyNameAttribute friendly = objs[0] as FriendlyNameAttribute; + + return friendly.FriendlyName; + } + } + + return t.Name; + } + } + + public class BaseCreature : Mobile + { + #region Var declarations + private BaseAI m_AI; // THE AI + + private AIType m_CurrentAI; // The current AI + private AIType m_DefaultAI; // The default AI + + private Mobile m_FocusMob; // Use focus mob instead of combatant, maybe we don't whan to fight + private FightMode m_FightMode; // The style the mob uses + private Clan m_Clan; // The general group or race they belong to + + private int m_iRangePerception; // The view area + private int m_iRangeFight; // The fight distance + + private bool m_bDebugAI; // Show debug AI messages + + private int m_iTeam; // Monster Team + + private double m_dActiveSpeed; // Timer speed when active + private double m_dPassiveSpeed; // Timer speed when not active + private double m_dCurrentSpeed; // The current speed, lets say it could be changed by something; + + private Point3D m_pHome; // The home position of the creature, used by some AI + private int m_iRangeHome = 10; // The home range of the creature + + List m_arSpellAttack; // List of attack spell/power + List m_arSpellDefense; // List of defensive spell/power + + private bool m_bControlled; // Is controlled + private Mobile m_ControlMaster; // My master + private Mobile m_ControlTarget; // My target mobile + private OrderType m_ControlOrder; // My order + + private bool m_bSummoned = false; + private DateTime m_SummonEnd; + private int m_iControlSlots = 1; + + private bool m_bBardProvoked = false; + private bool m_bBardPacified = false; + private Mobile m_bBardMaster = null; + private Mobile m_bBardTarget = null; + private DateTime m_timeBardEnd; + private WayPoint m_CurrentWayPoint = null; + private IPoint2D m_TargetLocation = null; + + private Mobile m_SummonMaster; + + private int m_HitsMax = -1; + private int m_StamMax = -1; + private int m_ManaMax = -1; + private int m_DamageMin = -1; + private int m_DamageMax = -1; + + private List m_Owners; + private List m_Friends; + + private bool m_IsStabled; + + private bool m_HasGeneratedLoot; // have we generated our loot yet? + + private bool m_SeaCreature = false; + + #endregion + + public virtual InhumanSpeech SpeechType{ get{ return null; } } + + [CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )] + public bool IsStabled + { + get{ return m_IsStabled; } + set + { + m_IsStabled = value; + if ( m_IsStabled ) + StopDeleteTimer(); + } + } + + [CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )] + public bool SeaCreature + { + get { return m_SeaCreature; } + set { m_SeaCreature = value; } + } + + protected DateTime SummonEnd + { + get { return m_SummonEnd; } + set { m_SummonEnd = value; } + } + + #region Bonding + public const bool BondingEnabled = true; + + public virtual bool IsBondable{ get{ return ( BondingEnabled && !Summoned ); } } + public virtual TimeSpan BondingDelay{ get{ return TimeSpan.FromDays( 7.0 ); } } + public virtual TimeSpan BondingAbandonDelay{ get{ return TimeSpan.FromDays( 1.0 ); } } + + public override bool CanRegenHits{ get{ return !m_IsDeadPet && base.CanRegenHits; } } + public override bool CanRegenStam{ get{ return !m_IsDeadPet && base.CanRegenStam; } } + public override bool CanRegenMana{ get{ return !m_IsDeadPet && base.CanRegenMana; } } + + public override bool IsDeadBondedPet{ get{ return m_IsDeadPet; } } + + private bool m_IsBonded; + private bool m_IsDeadPet; + private DateTime m_BondingBegin; + private DateTime m_OwnerAbandonTime; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile LastOwner + { + get + { + if ( m_Owners == null || m_Owners.Count == 0 ) + return null; + + return m_Owners[m_Owners.Count - 1]; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsBonded + { + get{ return m_IsBonded; } + set{ m_IsBonded = value; InvalidateProperties(); } + } + + public bool IsDeadPet + { + get{ return m_IsDeadPet; } + set{ m_IsDeadPet = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime BondingBegin + { + get{ return m_BondingBegin; } + set{ m_BondingBegin = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime OwnerAbandonTime + { + get{ return m_OwnerAbandonTime; } + set{ m_OwnerAbandonTime = value; } + } + #endregion + + #region Delete Previously Tamed Timer + private DeleteTimer m_DeleteTimer; + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan DeleteTimeLeft + { + get + { + if ( m_DeleteTimer != null && m_DeleteTimer.Running ) + return m_DeleteTimer.Next - DateTime.Now; + + return TimeSpan.Zero; + } + } + + private class DeleteTimer : Timer + { + private Mobile m; + + public DeleteTimer( Mobile creature, TimeSpan delay ) : base( delay ) + { + m = creature; + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + m.Delete(); + } + } + + public void BeginDeleteTimer() + { + if ( !Summoned && !Deleted && !IsStabled ) + { + StopDeleteTimer(); + m_DeleteTimer = new DeleteTimer( this, TimeSpan.FromDays( 3.0 ) ); + m_DeleteTimer.Start(); + } + } + + public void StopDeleteTimer() + { + if ( m_DeleteTimer != null ) + { + m_DeleteTimer.Stop(); + m_DeleteTimer = null; + } + } + + #endregion + + public List Owners { get { return m_Owners; } } + + public virtual bool Commandable{ get{ return true; } } + + public virtual Poison HitPoison{ get{ return null; } } + public virtual double HitPoisonChance{ get{ return 0.5; } } + public virtual Poison PoisonImmune{ get{ return null; } } + + public virtual bool BardImmune{ get{ return false; } } + public virtual bool Unprovokable{ get{ return BardImmune || m_IsDeadPet; } } + public virtual bool Uncalmable{ get{ return BardImmune || m_IsDeadPet; } } + public virtual bool AreaPeaceImmune { get { return BardImmune || m_IsDeadPet; } } + + public virtual bool BleedImmune + { + get + { + if ( (SlayerGroup.GetEntryByName( SlayerName.SeaSlaughter )).Slays(this) ) + return true; + + return false; + } + } + public virtual double BonusPetDamageScalar{ get{ return 1.0; } } + + //TODO: Find the pub 31 tweaks to the DispelDifficulty and apply them of course. + public virtual double DispelDifficulty{ get{ return 0.0; } } // at this skill level we dispel 50% chance + public virtual double DispelFocus{ get{ return 20.0; } } // at difficulty - focus we have 0%, at difficulty + focus we have 100% + public virtual bool DisplayWeight{ get{ return Backpack is StrongBackpack; } } + + #region Breath ability, like dragon fire breath + private DateTime m_NextBreathTime; + + // Must be overriden in subclass to enable + public virtual bool HasBreath{ get{ return false; } } + + // Base damage given is: CurrentHitPoints * BreathDamageScalar + public virtual double BreathDamageScalar{ get{ return 0.05; } } + + // Min/max seconds until next breath + public virtual double BreathMinDelay{ get{ return 10.0; } } + public virtual double BreathMaxDelay{ get{ return 15.0; } } + + // Creature stops moving for 1.0 seconds while breathing + public virtual double BreathStallTime{ get{ return 1.0; } } + + // Effect is sent 1.3 seconds after BreathAngerSound and BreathAngerAnimation is played + public virtual double BreathEffectDelay{ get{ return 1.3; } } + + // Damage is given 1.0 seconds after effect is sent + public virtual double BreathDamageDelay{ get{ return 1.0; } } + + public virtual int BreathRange{ get{ return RangePerception; } } + + // Damage types + public virtual int BreathPhysicalDamage{ get{ return 0; } } + public virtual int BreathFireDamage{ get{ return 100; } } + public virtual int BreathColdDamage{ get{ return 0; } } + public virtual int BreathPoisonDamage{ get{ return 0; } } + public virtual int BreathEnergyDamage{ get{ return 0; } } + + // Is immune to breath damages + public virtual bool BreathImmune{ get{ return false; } } + + // Effect details and sound + public virtual int BreathEffectItemID{ get{ return 0x36D4; } } + public virtual int BreathEffectSpeed{ get{ return 5; } } + public virtual int BreathEffectDuration{ get{ return 0; } } + public virtual bool BreathEffectExplodes{ get{ return false; } } + public virtual bool BreathEffectFixedDir{ get{ return false; } } + public virtual int BreathEffectHue{ get{ return 0; } } + public virtual int BreathEffectRenderMode{ get{ return 0; } } + + public virtual int BreathEffectSound{ get{ return 0x227; } } + + // Anger sound/animations + public virtual int BreathAngerSound{ get{ return GetAngerSound(); } } + public virtual int BreathAngerAnimation{ get{ return 12; } } + + public virtual void BreathStart( Mobile target ) + { + BreathStallMovement(); + BreathPlayAngerSound(); + BreathPlayAngerAnimation(); + + this.Direction = this.GetDirectionTo( target ); + + Timer.DelayCall( TimeSpan.FromSeconds( BreathEffectDelay ), new TimerStateCallback( BreathEffect_Callback ), target ); + } + + public virtual void BreathStallMovement() + { + if ( m_AI != null ) + m_AI.NextMove = DateTime.Now + TimeSpan.FromSeconds( BreathStallTime ); + } + + public virtual void BreathPlayAngerSound() + { + PlaySound( BreathAngerSound ); + } + + public virtual void BreathPlayAngerAnimation() + { + Animate( BreathAngerAnimation, 5, 1, true, false, 0 ); + } + + public virtual void BreathEffect_Callback( object state ) + { + Mobile target = (Mobile)state; + + if ( !target.Alive || !CanBeHarmful( target ) ) + return; + + BreathPlayEffectSound(); + BreathPlayEffect( target ); + + Timer.DelayCall( TimeSpan.FromSeconds( BreathDamageDelay ), new TimerStateCallback( BreathDamage_Callback ), target ); + } + + public virtual void BreathPlayEffectSound() + { + PlaySound( BreathEffectSound ); + } + + public virtual void BreathPlayEffect( Mobile target ) + { + Effects.SendMovingEffect( this, target, BreathEffectItemID, + BreathEffectSpeed, BreathEffectDuration, BreathEffectFixedDir, + BreathEffectExplodes, BreathEffectHue, BreathEffectRenderMode ); + } + + public virtual void BreathDamage_Callback( object state ) + { + Mobile target = (Mobile)state; + + if ( target is BaseCreature && ((BaseCreature)target).BreathImmune ) + return; + + if ( CanBeHarmful( target ) ) + { + DoHarmful( target ); + BreathDealDamage( target ); + } + } + + public virtual void BreathDealDamage( Mobile target ) + { + target.Damage( BreathComputeDamage(), this ); + } + + public virtual int BreathComputeDamage() + { + int damage = (int)(Hits * BreathDamageScalar); + + return damage; + } + + #endregion + + #region Spill Acid + + public void SpillAcid( int Amount ) + { + SpillAcid( null, Amount ); + } + + public void SpillAcid( Mobile target, int Amount ) + { + if ( (target != null && target.Map == null) || this.Map == null ) + return; + + for ( int i = 0; i < Amount; ++i ) + { + Point3D loc = this.Location; + Map map = this.Map; + Item acid = NewHarmfulItem(); + + if ( target != null && target.Map != null && Amount == 1 ) + { + loc = target.Location; + map = target.Map; + } + else + { + bool validLocation = false; + for ( int j = 0; !validLocation && j < 10; ++j ) + { + loc = new Point3D( + loc.X+(Utility.Random(0,3)-2), + loc.Y+(Utility.Random(0,3)-2), + loc.Z ); + loc.Z = map.GetAverageZ( loc.X, loc.Y ); + validLocation = map.CanFit( loc, 16, false, false ) ; + } + } + acid.MoveToWorld( loc, map ); + } + } + + public virtual Item NewHarmfulItem() + { + return new PoolOfAcid( TimeSpan.FromSeconds(10), 30, 30 ); + } + + #endregion + + #region Flee!!! + private DateTime m_EndFlee; + + public DateTime EndFleeTime + { + get{ return m_EndFlee; } + set{ m_EndFlee = value; } + } + + public virtual void StopFlee() + { + m_EndFlee = DateTime.MinValue; + } + + public virtual bool CheckFlee() + { + if ( m_EndFlee == DateTime.MinValue ) + return false; + + if ( DateTime.Now >= m_EndFlee ) + { + StopFlee(); + return false; + } + + return true; + } + + public virtual void BeginFlee( TimeSpan maxDuration ) + { + m_EndFlee = DateTime.Now + maxDuration; + } + + #endregion + + public BaseAI AIObject{ get{ return m_AI; } } + + public const int MaxOwners = 5; + + #region Friends + public List Friends { get { return m_Friends; } } + + public virtual bool AllowNewPetFriend + { + get{ return ( m_Friends == null || m_Friends.Count < 5 ); } + } + + public virtual bool IsPetFriend( Mobile m ) + { + return ( m_Friends != null && m_Friends.Contains( m ) ); + } + + public virtual void AddPetFriend( Mobile m ) + { + if ( m_Friends == null ) + m_Friends = new List(); + + m_Friends.Add( m ); + } + + public virtual void RemovePetFriend( Mobile m ) + { + if ( m_Friends != null ) + m_Friends.Remove( m ); + } + + public virtual bool IsFriend( Mobile m ) + { + if ( !(m is BaseCreature) ) + return false; + + BaseCreature c = (BaseCreature)m; + + return ( m_iTeam == c.m_iTeam && ( (m_bSummoned || m_bControlled) == (c.m_bSummoned || c.m_bControlled) ) ); + } + + #endregion + + public virtual bool IsEnemy( Mobile m ) + { + if ( SeaCreature && !WontWalk && Hidden && m is PlayerMobile ) // SURFACE FROM WATER AND ATTACK + { + this.Home = this.Location; // SO THEY KNOW WHERE TO GO BACK TO + + if ( m.Z < 0 ) // JUMP NEAR A BOAT + { + Point3D loc = BaseRegion.GetBoatWater( m.X, m.Y, m.Map, 4 ); + if ( loc.X == 0 && loc.Y == 0 && loc.Z == 0 ) + loc = m.Location; + + this.Location = loc; + this.PlaySound( 0x026 ); + Effects.SendLocationEffect( this.Location, this.Map, 0x35B2, 16 ); + } + else if ( WontWalk ) // JUMP OUT OF WATER AND WALK TO TARGET + { + this.PlaySound( 0x026 ); + Effects.SendLocationEffect( this.Location, this.Map, 0x35B2, 16 ); + } + this.Hidden = false; + this.Warmode = true; + this.Combatant = m; + this.CantWalk = this.WontWalk; + this.CanSwim = this.WillSwim; + return true; + } + + if ( !(m is BaseCreature) ) + return true; + + BaseCreature c = (BaseCreature)m; + + if ( !m_bSummoned && !m_bControlled && !c.m_bSummoned && !c.m_bControlled ) + { + if ( Clan == Clan.Citizen && c.Clan == Clan.Citizen ) + return false; + + if ( Clan == Clan.Humanoid && ( c.Clan == Clan.Undead || c.Clan == Clan.Demonic || c.Clan == Clan.Monster ) ) + return true; + + if ( ( Clan == Clan.Undead || Clan == Clan.Demonic || Clan == Clan.Monster ) && c.Clan == Clan.Humanoid ) + return true; + + if ( ( Clan == Clan.Undead || Clan == Clan.Demonic || Clan == Clan.Wizard ) && ( c.Clan == Clan.Undead || c.Clan == Clan.Demonic || c.Clan == Clan.Wizard ) ) + return false; + + + if ( ( Clan == Clan.Undead || Clan == Clan.Demonic || Clan == Clan.Wizard ) && ( c.Clan == Clan.Undead || c.Clan == Clan.Demonic || c.Clan == Clan.Wizard ) ) + return false; + } + + return ( m_iTeam != c.m_iTeam || ( (m_bSummoned || m_bControlled) != (c.m_bSummoned || c.m_bControlled) ) ); + } + + public override string ApplyNameSuffix( string suffix ) + { + return base.ApplyNameSuffix( suffix ); + } + + public virtual bool CheckControlChance( Mobile m ) + { + if ( GetControlChance( m ) > Utility.RandomDouble() ) + { + return true; + } + + PlaySound( GetAngerSound() ); + + if ( Body.IsAnimal ) + Animate( 10, 5, 1, true, false, 0 ); + else if ( Body.IsMonster ) + Animate( 18, 5, 1, true, false, 0 ); + + return false; + } + + public virtual bool CanBeControlledBy( Mobile m ) + { + return ( GetControlChance( m ) > 0.0 ); + } + + public double GetControlChance( Mobile m ) + { + return GetControlChance( m, false ); + } + + public virtual double GetControlChance( Mobile m, bool useBaseSkill ) + { + return 1.0; + } + + public override void Damage( int amount, Mobile from ) + { + int oldHits = this.Hits; + + base.Damage( amount, from ); + } + + public virtual bool DeleteCorpseOnDeath + { + get + { + return m_bSummoned; + } + } + + public override void SetLocation( Point3D newLocation, bool isTeleport ) + { + base.SetLocation( newLocation, isTeleport ); + + if ( isTeleport && m_AI != null ) + m_AI.OnTeleported(); + } + + public override void OnBeforeSpawn( Point3D location, Map m ) + { + base.OnBeforeSpawn( location, m ); + } + + public override ApplyPoisonResult ApplyPoison( Mobile from, Poison poison ) + { + if ( !Alive || IsDeadPet ) + return ApplyPoisonResult.Immune; + + ApplyPoisonResult result = base.ApplyPoison( from, poison ); + + if ( from != null && result == ApplyPoisonResult.Poisoned && PoisonTimer is PoisonImpl.PoisonTimer ) + (PoisonTimer as PoisonImpl.PoisonTimer).From = from; + + return result; + } + + public override bool CheckPoisonImmunity( Mobile from, Poison poison ) + { + if ( base.CheckPoisonImmunity( from, poison ) ) + return true; + + Poison p = this.PoisonImmune; + + return ( p != null && p.Level >= poison.Level ); + } + + [CommandProperty( AccessLevel.GameMaster )] + public WayPoint CurrentWayPoint + { + get + { + return m_CurrentWayPoint; + } + set + { + m_CurrentWayPoint = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public IPoint2D TargetLocation + { + get + { + return m_TargetLocation; + } + set + { + m_TargetLocation = value; + } + } + + public virtual Mobile ConstantFocus{ get{ return null; } } + + public virtual bool DisallowAllMoves + { + get + { + return false; + } + } + + public virtual bool InitialInnocent + { + get + { + return false; + } + } + + public virtual bool AlwaysMurderer + { + get + { + return false; + } + } + + public virtual bool AlwaysAttackable + { + get + { + return false; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual int DamageMin{ get{ return m_DamageMin; } set{ m_DamageMin = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual int DamageMax{ get{ return m_DamageMax; } set{ m_DamageMax = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public override int HitsMax + { + get + { + if ( m_HitsMax > 0 ) { + int value = m_HitsMax + GetStatOffset( StatType.Str ); + + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + return value; + } + + return Str; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int HitsMaxSeed + { + get{ return m_HitsMax; } + set{ m_HitsMax = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override int StamMax + { + get + { + if ( m_StamMax > 0 ) { + int value = m_StamMax + GetStatOffset( StatType.Dex ); + + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + return value; + } + + return Dex; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int StamMaxSeed + { + get{ return m_StamMax; } + set{ m_StamMax = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override int ManaMax + { + get + { + if ( m_ManaMax > 0 ) { + int value = m_ManaMax + GetStatOffset( StatType.Int ); + + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + return value; + } + + return Int; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int ManaMaxSeed + { + get{ return m_ManaMax; } + set{ m_ManaMax = value; } + } + + public virtual bool CanOpenDoors + { + get + { + return !this.Body.IsAnimal && !this.Body.IsSea; + } + } + + public virtual bool CanMoveOverObstacles + { + get + { + return this.Body.IsMonster; + } + } + + public virtual bool CanDestroyObstacles + { + get + { + // to enable breaking of furniture, 'return CanMoveOverObstacles;' + return false; + } + } + + public void Unpacify() + { + BardEndTime = DateTime.Now; + BardPacified = false; + } + + public override void OnDamage( int amount, Mobile from, bool willKill ) + { + if ( BardPacified && (HitsMax - Hits) * 0.001 > Utility.RandomDouble() ) + Unpacify(); + + int disruptThreshold = 0; + + if( amount > disruptThreshold ) + { + BandageContext c = BandageContext.GetContext( this ); + + if( c != null ) + c.Slip(); + } + + WeightOverloading.FatigueOnDamage( this, amount ); + + InhumanSpeech speechType = this.SpeechType; + + if ( speechType != null && !willKill ) + speechType.OnDamage( this, amount ); + + if ( willKill && from is PlayerMobile ) + Timer.DelayCall( TimeSpan.FromSeconds( 10 ), new TimerCallback( ((PlayerMobile) from).RecoverAmmo ) ); + + base.OnDamage( amount, from, willKill ); + } + + public virtual void OnDamagedBySpell( Mobile from ) + { + } + + public virtual void OnHarmfulSpell( Mobile from ) + { + } + + #region Alter[...]Damage From/To + + public virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar ) + { + } + + public virtual void AlterDamageScalarTo( Mobile target, ref double scalar ) + { + } + + public virtual void AlterSpellDamageFrom( Mobile from, ref int damage ) + { + } + + public virtual void AlterSpellDamageTo( Mobile to, ref int damage ) + { + } + + public virtual void AlterMeleeDamageFrom( Mobile from, ref int damage ) + { + } + + public virtual void AlterMeleeDamageTo( Mobile to, ref int damage ) + { + } + + #endregion + + public virtual void CheckReflect( Mobile caster, ref bool reflect ) + { + } + + public virtual void OnCarve( Mobile from, Corpse corpse, Item with ) + { + int feathers = Feathers; + int wool = Wool; + int meat = Meat; + int hides = Hides; + + if ( (feathers == 0 && wool == 0 && meat == 0 && hides == 0) || Summoned || IsBonded ) + { + from.SendLocalizedMessage( 500485 ); // You see nothing useful to carve from the corpse. + } + else + { + new Blood( 0x122D ).MoveToWorld( corpse.Location, corpse.Map ); + + if ( feathers != 0 ) + { + corpse.DropItem( new Feather( feathers ) ); + from.SendLocalizedMessage( 500479 ); // You pluck the bird. The feathers are now on the corpse. + } + + if ( wool != 0 ) + { + corpse.DropItem( new TaintedWool( wool ) ); + from.SendLocalizedMessage( 500483 ); // You shear it, and the wool is now on the corpse. + } + + if ( meat != 0 ) + { + if ( MeatType == MeatType.Ribs ) + corpse.DropItem( new RawRibs( meat ) ); + else if ( MeatType == MeatType.BigBird ) + { + corpse.DropItem( new RawChickenLeg( 1 ) ); meat--; + if ( meat > 0 ){ corpse.DropItem( new RawChickenLeg( 1 ) ); meat--; } + if ( meat > 0 ){ corpse.DropItem( new RawBird( meat ) ); } + } + else if ( MeatType == MeatType.Bird ) + corpse.DropItem( new RawBird( meat ) ); + else if ( MeatType == MeatType.Ham ) + { + int bacon = Utility.RandomMinMax( 1, meat ); + if ( Utility.RandomBool() ){ bacon = 0; } + if ( bacon > 0 ){ corpse.DropItem( new RawSlabOfBacon( bacon ) ); meat = meat - bacon; } + if ( meat > 0 ){ corpse.DropItem( new RawHam( meat ) ); } + } + else if ( MeatType == MeatType.Fish ) + corpse.DropItem( new RawFishSteak( meat ) ); + else if ( MeatType == MeatType.Lamb ) + { + corpse.DropItem( new RawLambLeg( 1 ) ); meat--; + if ( meat > 0 ){ corpse.DropItem( new RawLambLeg( 1 ) ); meat--; } + if ( meat > 0 ){ corpse.DropItem( new RawLambLeg( 1 ) ); meat--; } + if ( meat > 0 ){ corpse.DropItem( new RawLambLeg( 1 ) ); meat--; } + if ( meat > 0 ){ corpse.DropItem( new RawRibs( meat ) ); } + } + + from.SendLocalizedMessage( 500467 ); // You carve some meat, which remains on the corpse. + } + + if ( hides != 0 ) + { + corpse.DropItem( new Hides( hides ) ); + from.SendLocalizedMessage( 500471 ); // You skin it, and the hides are now in the corpse. + } + + corpse.Carved = true; + + if ( corpse.IsCriminalAction( from ) ) + from.CriminalAction( true ); + } + } + + public const int DefaultRangePerception = 16; + public const int OldRangePerception = 10; + + public BaseCreature(AIType ai, + FightMode mode, + int iRangePerception, + int iRangeFight, + double dActiveSpeed, + double dPassiveSpeed) + { + if ( iRangePerception == OldRangePerception ) + iRangePerception = DefaultRangePerception; + + m_CurrentAI = ai; + m_DefaultAI = ai; + + m_iRangePerception = iRangePerception; + m_iRangeFight = iRangeFight; + + m_FightMode = mode; + + m_iTeam = 0; + + SpeedInfo.GetSpeeds( this, ref dActiveSpeed, ref dPassiveSpeed ); + + m_dActiveSpeed = dActiveSpeed; + m_dPassiveSpeed = dPassiveSpeed; + m_dCurrentSpeed = dPassiveSpeed; + + m_bDebugAI = false; + + m_arSpellAttack = new List(); + m_arSpellDefense = new List(); + + m_bControlled = false; + m_ControlMaster = null; + m_ControlTarget = null; + m_ControlOrder = OrderType.None; + + m_Owners = new List(); + + m_NextReacquireTime = DateTime.Now + ReacquireDelay; + + ChangeAIType(AI); + + InhumanSpeech speechType = this.SpeechType; + + if ( speechType != null ) + speechType.OnConstruct( this ); + + GenerateLoot( true ); + } + + public override void OnAfterSpawn() + { + if ( this.Region.IsPartOf( "Zoo" ) ) + { + this.Fame = 0; + this.Karma = 0; + this.Invulnerable = true; + AI = AIType.AI_Animal; + } + + if ( m_SeaCreature && Utility.RandomMinMax( 1, 1000 ) <= MyLevel( this ) && (SlayerGroup.GetEntryByName( SlayerName.SeaSlaughter )).Slays(this) ) + PackItem( new SpecialFishingNet() ); + + if ( m_SeaCreature && Utility.RandomMinMax( 1, 1000 ) <= MyLevel( this ) && (SlayerGroup.GetEntryByName( SlayerName.SeaSlaughter )).Slays(this) ) + { + int pwr = Utility.RandomMinMax( 1, MyLevel( this ) ); + int lvl = 1; + + if ( pwr > 750 ) + lvl = 4; + else if ( pwr > 500 ) + lvl = 3; + else if ( pwr > 250 ) + lvl = 2; + + PackItem( new MessageInABottle( lvl ) ); + } + + if ( Map == Map.Underworld && Clan != Clan.Citizen ) + Clan = Clan.Monster; + + if ( Server.Misc.Settings.MonstersSearch() ) + { + double searching = (double)(MyLevel( this ) + 10); + if ( this.Skills[SkillName.Searching].Value > 10 ){} // DON'T MODIFY THOSE THAT ALREADY HAVE THE SKILL + else { this.SetSkill( SkillName.Searching, searching ); } + } + + if ( !Server.Misc.Settings.MonstersConcentrate() && !(this is BaseVendor) ) + { + this.SetSkill( SkillName.Concentration, 0.0 ); + } + + WontWalk = CantWalk; + WillSwim = CanSwim; + + base.OnAfterSpawn(); + } + + public BaseCreature( Serial serial ) : base( serial ) + { + m_arSpellAttack = new List(); + m_arSpellDefense = new List(); + + m_bDebugAI = false; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 17 ); // version + + writer.Write( (int)m_CurrentAI ); + writer.Write( (int)m_DefaultAI ); + writer.Write( (int)m_iRangePerception ); + writer.Write( (int)m_iRangeFight ); + writer.Write( (int)m_iTeam ); + writer.Write( (double)m_dActiveSpeed ); + writer.Write( (double)m_dPassiveSpeed ); + writer.Write( (double)m_dCurrentSpeed ); + writer.Write( (int) m_pHome.X ); + writer.Write( (int) m_pHome.Y ); + writer.Write( (int) m_pHome.Z ); + writer.Write( (int) m_iRangeHome ); + + int i=0; + + writer.Write( (int) m_arSpellAttack.Count ); + for ( i=0; i< m_arSpellAttack.Count; i++ ) + { + writer.Write( m_arSpellAttack[i].ToString() ); + } + + writer.Write( (int) m_arSpellDefense.Count ); + for ( i=0; i< m_arSpellDefense.Count; i++ ) + { + writer.Write( m_arSpellDefense[i].ToString() ); + } + + writer.Write( (int) m_FightMode ); + writer.Write( (int) m_Clan ); + writer.Write( (bool) m_bControlled ); + writer.Write( (Mobile) m_ControlMaster ); + writer.Write( (Mobile) m_ControlTarget ); + writer.Write( (int) m_ControlOrder ); + writer.Write( (bool) m_bSummoned ); + + if ( m_bSummoned ) + writer.WriteDeltaTime( m_SummonEnd ); + + writer.Write( (int) m_iControlSlots ); + writer.Write( m_CurrentWayPoint ); + writer.Write( m_SummonMaster ); + writer.Write( (int) m_HitsMax ); + writer.Write( (int) m_StamMax ); + writer.Write( (int) m_ManaMax ); + writer.Write( (int) m_DamageMin ); + writer.Write( (int) m_DamageMax ); + writer.Write( m_Owners, true ); + writer.Write( (bool) m_IsDeadPet ); + writer.Write( (bool) m_IsBonded ); + writer.Write( (DateTime) m_BondingBegin ); + writer.Write( (DateTime) m_OwnerAbandonTime ); + writer.Write( (bool) m_HasGeneratedLoot ); + writer.Write( (bool) ( m_Friends != null && m_Friends.Count > 0 ) ); + + if ( m_Friends != null && m_Friends.Count > 0 ) + writer.Write( m_Friends, true ); + + writer.Write( (bool)m_RemoveIfUntamed ); + writer.Write( (int)m_RemoveStep ); + + if ( IsStabled || ( Controlled && ControlMaster != null ) ) + writer.Write( TimeSpan.Zero ); + else + writer.Write( DeleteTimeLeft ); + + writer.Write( (bool) m_SeaCreature ); + } + + private static double[] m_StandardActiveSpeeds = new double[] + { + 0.175, 0.1, 0.15, 0.2, 0.25, 0.3, 0.4, 0.5, 0.6, 0.8 + }; + + private static double[] m_StandardPassiveSpeeds = new double[] + { + 0.350, 0.2, 0.4, 0.5, 0.6, 0.8, 1.0, 1.2, 1.6, 2.0 + }; + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_CurrentAI = (AIType)reader.ReadInt(); + m_DefaultAI = (AIType)reader.ReadInt(); + m_iRangePerception = reader.ReadInt(); + m_iRangeFight = reader.ReadInt(); + m_iTeam = reader.ReadInt(); + m_dActiveSpeed = reader.ReadDouble(); + m_dPassiveSpeed = reader.ReadDouble(); + m_dCurrentSpeed = reader.ReadDouble(); + + if ( m_iRangePerception == OldRangePerception ) + m_iRangePerception = DefaultRangePerception; + + m_pHome.X = reader.ReadInt(); + m_pHome.Y = reader.ReadInt(); + m_pHome.Z = reader.ReadInt(); + m_iRangeHome = reader.ReadInt(); + + int i, iCount; + + iCount = reader.ReadInt(); + for ( i=0; i< iCount; i++ ) + { + string str = reader.ReadString(); + Type type = Type.GetType( str ); + + if ( type != null ) + { + m_arSpellAttack.Add( type ); + } + } + + iCount = reader.ReadInt(); + for ( i=0; i< iCount; i++ ) + { + string str = reader.ReadString(); + Type type = Type.GetType( str ); + + if ( type != null ) + { + m_arSpellDefense.Add( type ); + } + } + + m_FightMode = ( FightMode )reader.ReadInt(); + m_Clan = ( Clan )reader.ReadInt(); + m_bControlled = reader.ReadBool(); + m_ControlMaster = reader.ReadMobile(); + m_ControlTarget = reader.ReadMobile(); + m_ControlOrder = (OrderType) reader.ReadInt(); + m_bSummoned = reader.ReadBool(); + + if ( m_bSummoned ) + { + m_SummonEnd = reader.ReadDeltaTime(); + new UnsummonTimer( m_ControlMaster, this, m_SummonEnd - DateTime.Now ).Start(); + } + + m_iControlSlots = reader.ReadInt(); + m_CurrentWayPoint = reader.ReadItem() as WayPoint; + m_SummonMaster = reader.ReadMobile(); + m_HitsMax = reader.ReadInt(); + m_StamMax = reader.ReadInt(); + m_ManaMax = reader.ReadInt(); + m_DamageMin = reader.ReadInt(); + m_DamageMax = reader.ReadInt(); + m_Owners = reader.ReadStrongMobileList(); + m_IsDeadPet = reader.ReadBool(); + m_IsBonded = reader.ReadBool(); + m_BondingBegin = reader.ReadDateTime(); + m_OwnerAbandonTime = reader.ReadDateTime(); + m_HasGeneratedLoot = reader.ReadBool(); + + if ( reader.ReadBool() ) + m_Friends = reader.ReadStrongMobileList(); + + double activeSpeed = m_dActiveSpeed; + double passiveSpeed = m_dPassiveSpeed; + + SpeedInfo.GetSpeeds( this, ref activeSpeed, ref passiveSpeed ); + + bool isStandardActive = false; + for ( int i2 = 0; !isStandardActive && i2 < m_StandardActiveSpeeds.Length; ++i2 ) + isStandardActive = ( m_dActiveSpeed == m_StandardActiveSpeeds[i2] ); + + bool isStandardPassive = false; + for ( int i3 = 0; !isStandardPassive && i3 < m_StandardPassiveSpeeds.Length; ++i3 ) + isStandardPassive = ( m_dPassiveSpeed == m_StandardPassiveSpeeds[i3] ); + + if ( isStandardActive && m_dCurrentSpeed == m_dActiveSpeed ) + m_dCurrentSpeed = activeSpeed; + else if ( isStandardPassive && m_dCurrentSpeed == m_dPassiveSpeed ) + m_dCurrentSpeed = passiveSpeed; + + if ( isStandardActive ) + m_dActiveSpeed = activeSpeed; + + if ( isStandardPassive ) + m_dPassiveSpeed = passiveSpeed; + + m_RemoveIfUntamed = reader.ReadBool(); + m_RemoveStep = reader.ReadInt(); + + TimeSpan deleteTime = reader.ReadTimeSpan(); + + if ( deleteTime > TimeSpan.Zero || LastOwner != null && !Controlled && !IsStabled ) + { + if ( deleteTime == TimeSpan.Zero ) + deleteTime = TimeSpan.FromDays( 3.0 ); + + m_DeleteTimer = new DeleteTimer( this, deleteTime ); + m_DeleteTimer.Start(); + } + + m_SeaCreature = reader.ReadBool(); + + CheckStatTimers(); + + ChangeAIType(m_CurrentAI); + + AddFollowers(); + } + + public virtual bool IsHumanInTown() + { + return ( Body.IsHuman && Region.IsPartOf( typeof( Regions.TownRegion ) ) ); + } + + public virtual bool CheckGold( Mobile from, Item dropped ) + { + if ( dropped is Gold ) + return OnGoldGiven( from, (Gold)dropped ); + + return false; + } + + public virtual bool OnGoldGiven( Mobile from, Gold dropped ) + { + if ( CheckTeachingMatch( from ) ) + { + if ( Teach( m_Teaching, from, dropped.Amount, true ) ) + { + dropped.Delete(); + return true; + } + } + else if ( IsHumanInTown() ) + { + Direction = GetDirectionTo( from ); + + int oldSpeechHue = this.SpeechHue; + + this.SpeechHue = 0x23F; + SayTo( from, "Thou art giving me gold?" ); + + if ( dropped.Amount >= 400 ) + SayTo( from, "'Tis a noble gift." ); + else + SayTo( from, "Money is always welcome." ); + + this.SpeechHue = 0x3B2; + SayTo( from, 501548 ); // I thank thee. + + this.SpeechHue = oldSpeechHue; + + dropped.Delete(); + return true; + } + + return false; + } + + public override bool ShouldCheckStatTimers{ get{ return false; } } + + public virtual bool OverrideBondingReqs() + { + return false; + } + + #region OnAction[...] + + public virtual void OnActionWander() + { + } + + public virtual void OnActionCombat() + { + } + + public virtual void OnActionGuard() + { + } + + public virtual void OnActionFlee() + { + } + + public virtual void OnActionInteract() + { + } + + public virtual void OnActionBackoff() + { + } + + #endregion + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( CheckGold( from, dropped ) ) + return true; + + return base.OnDragDrop( from, dropped ); + } + + protected virtual BaseAI ForcedAI { get { return null; } } + + public void ChangeAIType( AIType NewAI ) + { + if ( m_AI != null ) + m_AI.m_Timer.Stop(); + + if( ForcedAI != null ) + { + m_AI = ForcedAI; + return; + } + + m_AI = null; + + switch ( NewAI ) + { + case AIType.AI_Melee: + m_AI = new MeleeAI(this); + break; + case AIType.AI_Animal: + m_AI = new AnimalAI(this); + break; + case AIType.AI_Berserk: + m_AI = new BerserkAI(this); + break; + case AIType.AI_Archer: + m_AI = new ArcherAI(this); + break; + case AIType.AI_Healer: + m_AI = new HealerAI(this); + break; + case AIType.AI_Vendor: + m_AI = new VendorAI(this); + break; + case AIType.AI_Mage: + m_AI = new MageAI(this); + break; + case AIType.AI_Predator: + m_AI = new MeleeAI(this); + break; + case AIType.AI_Thief: + m_AI = new ThiefAI(this); + break; + case AIType.AI_Citizen: + m_AI = new CitizenAI(this); + break; + case AIType.AI_Timid: + m_AI = new TimidAI(this); + break; + } + } + + public void ChangeAIToDefault() + { + ChangeAIType(m_DefaultAI); + } + + [CommandProperty( AccessLevel.GameMaster )] + public AIType AI + { + get + { + return m_CurrentAI; + } + set + { + m_CurrentAI = value; + + if (m_CurrentAI == AIType.AI_Use_Default) + { + m_CurrentAI = m_DefaultAI; + } + + ChangeAIType(m_CurrentAI); + } + } + + [CommandProperty( AccessLevel.Administrator )] + public bool Debug + { + get + { + return m_bDebugAI; + } + set + { + m_bDebugAI = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Team + { + get + { + return m_iTeam; + } + set + { + m_iTeam = value; + + OnTeamChange(); + } + } + + public virtual void OnTeamChange() + { + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile FocusMob + { + get + { + return m_FocusMob; + } + set + { + m_FocusMob = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public FightMode FightMode + { + get + { + return m_FightMode; + } + set + { + m_FightMode = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Clan Clan + { + get + { + return m_Clan; + } + set + { + m_Clan = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int RangePerception + { + get + { + return m_iRangePerception; + } + set + { + m_iRangePerception = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int RangeFight + { + get + { + return m_iRangeFight; + } + set + { + m_iRangeFight = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int RangeHome + { + get + { + return m_iRangeHome; + } + set + { + m_iRangeHome = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public double ActiveSpeed + { + get + { + return m_dActiveSpeed; + } + set + { + m_dActiveSpeed = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public double PassiveSpeed + { + get + { + return m_dPassiveSpeed; + } + set + { + m_dPassiveSpeed = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public double CurrentSpeed + { + get + { + if ( m_TargetLocation != null ) + return 0.3; + + return m_dCurrentSpeed; + } + set + { + if ( m_dCurrentSpeed != value ) + { + m_dCurrentSpeed = value; + + if (m_AI != null) + m_AI.OnCurrentSpeedChanged(); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Home + { + get + { + return m_pHome; + } + set + { + m_pHome = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Controlled + { + get + { + return m_bControlled; + } + set + { + if ( m_bControlled == value ) + return; + + m_bControlled = value; + Delta( MobileDelta.Noto ); + + InvalidateProperties(); + } + } + + public override void RevealingAction() + { + Spells.Sixth.InvisibilitySpell.RemoveTimer( this ); + + base.RevealingAction(); + } + + public void RemoveFollowers() + { + if ( m_ControlMaster != null ) + { + m_ControlMaster.Followers -= ControlSlots; + if( m_ControlMaster is PlayerMobile ) + { + ((PlayerMobile)m_ControlMaster).AllFollowers.Remove( this ); + } + } + else if ( m_SummonMaster != null ) + { + m_SummonMaster.Followers -= ControlSlots; + if( m_SummonMaster is PlayerMobile ) + { + ((PlayerMobile)m_SummonMaster).AllFollowers.Remove( this ); + } + } + + if ( m_ControlMaster != null && m_ControlMaster.Followers < 0 ) + m_ControlMaster.Followers = 0; + + if ( m_SummonMaster != null && m_SummonMaster.Followers < 0 ) + m_SummonMaster.Followers = 0; + } + + public void AddFollowers() + { + if ( m_ControlMaster != null ) + { + m_ControlMaster.Followers += ControlSlots; + if( m_ControlMaster is PlayerMobile ) + { + ((PlayerMobile)m_ControlMaster).AllFollowers.Add( this ); + } + } + else if ( m_SummonMaster != null ) + { + m_SummonMaster.Followers += ControlSlots; + if( m_SummonMaster is PlayerMobile ) + { + ((PlayerMobile)m_SummonMaster).AllFollowers.Add( this ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile ControlMaster + { + get + { + return m_ControlMaster; + } + set + { + if ( m_ControlMaster == value || this == value ) + return; + + RemoveFollowers(); + m_ControlMaster = value; + AddFollowers(); + if ( m_ControlMaster != null ) + StopDeleteTimer(); + + Delta( MobileDelta.Noto ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile SummonMaster + { + get + { + return m_SummonMaster; + } + set + { + if ( m_SummonMaster == value || this == value ) + return; + + RemoveFollowers(); + m_SummonMaster = value; + AddFollowers(); + + Delta( MobileDelta.Noto ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile ControlTarget + { + get + { + return m_ControlTarget; + } + set + { + m_ControlTarget = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public OrderType ControlOrder + { + get + { + return m_ControlOrder; + } + set + { + m_ControlOrder = value; + + if ( m_AI != null ) + m_AI.OnCurrentOrderChanged(); + + InvalidateProperties(); + + if ( m_ControlMaster != null ) + m_ControlMaster.InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool BardProvoked + { + get + { + return m_bBardProvoked; + } + set + { + m_bBardProvoked = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool BardPacified + { + get + { + return m_bBardPacified; + } + set + { + m_bBardPacified = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile BardMaster + { + get + { + return m_bBardMaster; + } + set + { + m_bBardMaster = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile BardTarget + { + get + { + return m_bBardTarget; + } + set + { + m_bBardTarget = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime BardEndTime + { + get + { + return m_timeBardEnd; + } + set + { + m_timeBardEnd = value; + } + } + + [CommandProperty( AccessLevel.Administrator )] + public bool Summoned + { + get + { + return m_bSummoned; + } + set + { + if ( m_bSummoned == value ) + return; + + m_NextReacquireTime = DateTime.Now; + + m_bSummoned = value; + Delta( MobileDelta.Noto ); + + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.Administrator )] + public int ControlSlots + { + get + { + return m_iControlSlots; + } + set + { + m_iControlSlots = value; + } + } + + public virtual bool NoHouseRestrictions{ get{ return false; } } + public virtual bool IsHouseSummonable{ get{ return false; } } + + #region Corpse Resources + public virtual int Feathers{ get{ return 0; } } + public virtual int Wool{ get{ return 0; } } + + public virtual MeatType MeatType{ get{ return MeatType.Ribs; } } + public virtual int Meat{ get{ return 0; } } + + public virtual int Hides{ get{ return 0; } } + #endregion + + public virtual bool AutoDispel{ get{ return false; } } + public virtual double AutoDispelChance{ get { return 1.0; } } + + public virtual bool CanRummageCorpses{ get{ return false; } } + + public bool CanCastDispel() + { + if ( Mana < 20 ) + return false; + + if ( this.Skills[SkillName.Magery].Value < 52.0 ) + return false; + + if ( this.Skills[SkillName.Magery].Value < Utility.RandomMinMax( 1, 100 ) ) + return false; + + Mana = Mana - 20; + return true; + } + + public virtual void OnGotMeleeAttack( Mobile attacker ) + { + if ( AutoDispel && CanCastDispel() && attacker is BaseCreature && ((BaseCreature)attacker).IsDispellable && AutoDispelChance > Utility.RandomDouble() ) + Dispel( attacker ); + } + + public virtual void Dispel( Mobile m ) + { + Effects.SendLocationParticles( EffectItem.Create( m.Location, m.Map, EffectItem.DefaultDuration ), 0x3728, 8, 20, 5042 ); + Effects.PlaySound( m, m.Map, 0x201 ); + + m.Delete(); + } + + public virtual bool DeleteOnRelease{ get{ return m_bSummoned; } } + + public virtual void OnGaveMeleeAttack( Mobile defender ) + { + Poison p = HitPoison; + + if ( p != null && HitPoisonChance >= Utility.RandomDouble() ) { + defender.ApplyPoison( this, p ); + if ( this.Controlled ) + this.CheckSkill(SkillName.Poisoning, 0, this.Skills[SkillName.Poisoning].Cap); + } + + if( AutoDispel && CanCastDispel() && defender is BaseCreature && ((BaseCreature)defender).IsDispellable && AutoDispelChance > Utility.RandomDouble() ) + Dispel( defender ); + } + + public override void OnAfterDelete() + { + if ( m_AI != null ) + { + if ( m_AI.m_Timer != null ) + m_AI.m_Timer.Stop(); + + m_AI = null; + } + + if ( m_DeleteTimer != null ) + { + m_DeleteTimer.Stop(); + m_DeleteTimer = null; + } + + FocusMob = null; + + base.OnAfterDelete(); + } + + public void DebugSay( string text ) + { + if ( m_bDebugAI ) + this.PublicOverheadMessage( MessageType.Regular, 41, false, text ); + } + + public void DebugSay( string format, params object[] args ) + { + if ( m_bDebugAI ) + this.PublicOverheadMessage( MessageType.Regular, 41, false, String.Format( format, args ) ); + } + + /* + * This function can be overriden.. so a "Strongest" mobile, can have a different definition depending + * on who check for value + * -Could add a FightMode.Prefered + * + */ + + public virtual double GetFightModeRanking( Mobile m, FightMode acqType, bool bPlayerOnly ) + { + if ( ( bPlayerOnly && m.Player ) || !bPlayerOnly ) + { + switch( acqType ) + { + case FightMode.Strongest : + return (m.Skills[SkillName.Tactics].Value + m.Str); //returns strongest mobile + + case FightMode.Weakest : + return -m.Hits; // returns weakest mobile + + default : + return -GetDistanceToSqrt( m ); // returns closest mobile + } + } + else + { + return double.MinValue; + } + } + + // Turn, - for left, + for right + // Basic for now, needs work + public virtual void Turn(int iTurnSteps) + { + int v = (int)Direction; + + Direction = (Direction)((((v & 0x7) + iTurnSteps) & 0x7) | (v & 0x80)); + } + + public virtual void TurnInternal(int iTurnSteps) + { + int v = (int)Direction; + + SetDirection( (Direction)((((v & 0x7) + iTurnSteps) & 0x7) | (v & 0x80)) ); + } + + public bool IsHurt() + { + return ( Hits != HitsMax ); + } + + public double GetHomeDistance() + { + return GetDistanceToSqrt( m_pHome ); + } + + public virtual int GetTeamSize(int iRange) + { + int iCount = 0; + + foreach ( Mobile m in this.GetMobilesInRange( iRange ) ) + { + if (m is BaseCreature) + { + if ( ((BaseCreature)m).Team == Team ) + { + if ( !m.Deleted ) + { + if ( m != this ) + { + if ( CanSee( m ) ) + { + iCount++; + } + } + } + } + } + } + + return iCount; + } + + #region Teaching + public virtual bool CanTeach{ get{ return false; } } + + public virtual bool CheckTeach( SkillName skill, Mobile from ) + { + if ( !CanTeach ) + return false; + + return true; + } + + public enum TeachResult + { + Success, + Failure, + KnowsMoreThanMe, + KnowsWhatIKnow, + SkillNotRaisable, + NotEnoughFreePoints + } + + public virtual TeachResult CheckTeachSkills( SkillName skill, Mobile m, int maxPointsToLearn, ref int pointsToLearn, bool doTeach ) + { + if ( !CheckTeach( skill, m ) || !m.CheckAlive() ) + return TeachResult.Failure; + + Skill ourSkill = Skills[skill]; + Skill theirSkill = m.Skills[skill]; + + if ( ourSkill == null || theirSkill == null ) + return TeachResult.Failure; + + int baseToSet = ourSkill.BaseFixedPoint / 3; + + if ( baseToSet > 420 ) + baseToSet = 420; + else if ( baseToSet < 200 ) + return TeachResult.Failure; + + if ( baseToSet > theirSkill.CapFixedPoint ) + baseToSet = theirSkill.CapFixedPoint; + + pointsToLearn = baseToSet - theirSkill.BaseFixedPoint; + + if ( maxPointsToLearn > 0 && pointsToLearn > maxPointsToLearn ) + { + pointsToLearn = maxPointsToLearn; + baseToSet = theirSkill.BaseFixedPoint + pointsToLearn; + } + + if ( pointsToLearn < 0 ) + return TeachResult.KnowsMoreThanMe; + + if ( pointsToLearn == 0 ) + return TeachResult.KnowsWhatIKnow; + + if ( theirSkill.Lock != SkillLock.Up ) + return TeachResult.SkillNotRaisable; + + int freePoints = m.Skills.Cap - m.Skills.Total; + int freeablePoints = 0; + + if ( freePoints < 0 ) + freePoints = 0; + + for ( int i = 0; (freePoints + freeablePoints) < pointsToLearn && i < m.Skills.Length; ++i ) + { + Skill sk = m.Skills[i]; + + if ( sk == theirSkill || sk.Lock != SkillLock.Down ) + continue; + + freeablePoints += sk.BaseFixedPoint; + } + + if ( (freePoints + freeablePoints) == 0 ) + return TeachResult.NotEnoughFreePoints; + + if ( (freePoints + freeablePoints) < pointsToLearn ) + { + pointsToLearn = freePoints + freeablePoints; + baseToSet = theirSkill.BaseFixedPoint + pointsToLearn; + } + + if ( doTeach ) + { + int need = pointsToLearn - freePoints; + + for ( int i = 0; need > 0 && i < m.Skills.Length; ++i ) + { + Skill sk = m.Skills[i]; + + if ( sk == theirSkill || sk.Lock != SkillLock.Down ) + continue; + + if ( sk.BaseFixedPoint < need ) + { + need -= sk.BaseFixedPoint; + sk.BaseFixedPoint = 0; + } + else + { + sk.BaseFixedPoint -= need; + need = 0; + } + } + + /* Sanity check */ + if ( baseToSet > theirSkill.CapFixedPoint || (m.Skills.Total - theirSkill.BaseFixedPoint + baseToSet) > m.Skills.Cap ) + return TeachResult.NotEnoughFreePoints; + + theirSkill.BaseFixedPoint = baseToSet; + } + + return TeachResult.Success; + } + + public virtual bool CheckTeachingMatch( Mobile m ) + { + if ( m_Teaching == (SkillName)(-1) ) + return false; + + if ( m is PlayerMobile ) + return ( ((PlayerMobile)m).Learning == m_Teaching ); + + return true; + } + + private SkillName m_Teaching = (SkillName)(-1); + + public virtual bool Teach( SkillName skill, Mobile m, int maxPointsToLearn, bool doTeach ) + { + int pointsToLearn = 0; + TeachResult res = CheckTeachSkills( skill, m, maxPointsToLearn, ref pointsToLearn, doTeach ); + + switch ( res ) + { + case TeachResult.KnowsMoreThanMe: + { + Say( 501508 ); // I cannot teach thee, for thou knowest more than I! + break; + } + case TeachResult.KnowsWhatIKnow: + { + Say( 501509 ); // I cannot teach thee, for thou knowest all I can teach! + break; + } + case TeachResult.NotEnoughFreePoints: + case TeachResult.SkillNotRaisable: + { + // Make sure this skill is marked to raise. If you are near the skill cap (700 points) you may need to lose some points in another skill first. + m.SendLocalizedMessage( 501510, "", 0x22 ); + break; + } + case TeachResult.Success: + { + if ( doTeach ) + { + Say( 501539 ); // Let me show thee something of how this is done. + m.SendLocalizedMessage( 501540 ); // Your skill level increases. + + m_Teaching = (SkillName)(-1); + + if ( m is PlayerMobile ) + ((PlayerMobile)m).Learning = (SkillName)(-1); + } + else + { + // I will teach thee all I know, if paid the amount in full. The price is: + Say( 1019077, AffixType.Append, String.Format( " {0}", pointsToLearn ), "" ); + Say( 1043108 ); // For less I shall teach thee less. + + m_Teaching = skill; + + if ( m is PlayerMobile ) + ((PlayerMobile)m).Learning = skill; + } + + return true; + } + } + + return false; + } + + #endregion + + public override void AggressiveAction( Mobile aggressor, bool criminal ) + { + base.AggressiveAction( aggressor, criminal ); + + if ( this.ControlMaster != null ) + if ( NotorietyHandlers.CheckAggressor( this.ControlMaster.Aggressors, aggressor ) ) + aggressor.Aggressors.Add( AggressorInfo.Create( this, aggressor, true ) ); + + OrderType ct = m_ControlOrder; + + if ( m_AI != null ) + { + if( ct != OrderType.Follow && ct != OrderType.Stop ) + { + m_AI.OnAggressiveAction( aggressor ); + } + else + { + DebugSay( "I'm being attacked but my master told me not to fight." ); + Warmode = false; + return; + } + } + + StopFlee(); + + ForceReacquire(); + + if ( aggressor.ChangingCombatant && (m_bControlled || m_bSummoned) && (ct == OrderType.Come || ( ct == OrderType.Stay ) || ct == OrderType.Stop || ct == OrderType.None || ct == OrderType.Follow) ) + { + ControlTarget = aggressor; + ControlOrder = OrderType.Attack; + } + else if ( Combatant == null && !m_bBardPacified ) + { + Warmode = true; + Combatant = aggressor; + } + } + + public override bool OnMoveOver( Mobile m ) + { + if ( m is BaseCreature && !((BaseCreature)m).Controlled ) + return ( !Alive || !m.Alive || IsDeadBondedPet || m.IsDeadBondedPet ) || ( Hidden && m.AccessLevel > AccessLevel.Player ); + + return base.OnMoveOver( m ); + } + + public virtual void AddCustomContextEntries( Mobile from, List list ) + { + } + + public virtual bool CanDrop { get { return IsBonded; } } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( m_AI != null && Commandable ) + m_AI.GetContextMenuEntries( from, list ); + + AddCustomContextEntries( from, list ); + + if ( CanTeach && from.Alive ) + { + Skills ourSkills = this.Skills; + Skills theirSkills = from.Skills; + + for ( int i = 0; i < ourSkills.Length && i < theirSkills.Length; ++i ) + { + Skill skill = ourSkills[i]; + Skill theirSkill = theirSkills[i]; + + if ( skill != null && theirSkill != null && skill.Base >= 60.0 && CheckTeach( skill.SkillName, from ) ) + { + double toTeach = skill.Base / 3.0; + + if ( toTeach > 42.0 ) + toTeach = 42.0; + + list.Add( new TeachEntry( (SkillName)i, this, from, ( toTeach > theirSkill.Base ) ) ); + } + } + } + } + + public override bool HandlesOnSpeech( Mobile from ) + { + InhumanSpeech speechType = this.SpeechType; + + if ( speechType != null && (speechType.Flags & IHSFlags.OnSpeech) != 0 && from.InRange( this, 3 ) ) + return true; + + return ( m_AI != null && m_AI.HandlesOnSpeech( from ) && from.InRange( this, m_iRangePerception ) ); + } + + public override void OnSpeech( SpeechEventArgs e ) + { + InhumanSpeech speechType = this.SpeechType; + + if ( speechType != null && speechType.OnSpeech( this, e.Mobile, e.Speech ) ) + e.Handled = true; + else if ( !e.Handled && m_AI != null && e.Mobile.InRange( this, m_iRangePerception ) ) + m_AI.OnSpeech( e ); + } + + public static int MyLevel( Mobile m ) + { + int level = 0; + + if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + + int psn = 0; + + if ( bc.HitPoison == Poison.Lesser ) + psn = 5; + else if ( bc.HitPoison == Poison.Regular ) + psn = 10; + else if ( bc.HitPoison == Poison.Greater ) + psn = 15; + else if ( bc.HitPoison == Poison.Deadly ) + psn = 20; + else if ( bc.HitPoison == Poison.Lethal ) + psn = 25; + + if ( bc.PoisonImmune == Poison.Lesser ) + psn = psn + 5; + else if ( bc.PoisonImmune == Poison.Regular ) + psn = psn + 10; + else if ( bc.PoisonImmune == Poison.Greater ) + psn = psn + 15; + else if ( bc.PoisonImmune == Poison.Deadly ) + psn = psn + 20; + else if ( bc.PoisonImmune == Poison.Lethal ) + psn = psn + 25; + + int bard = 0; + + if ( bc.BardImmune ) + bard = 50; + else + { + if ( bc.Unprovokable ) + bard = bard + 25; + + if ( bc.Uncalmable ) + bard = bard + 25; + } + + int dmg = (int)( bc.DamageMax * 8 ); + int sts = (int)( m.RawStatTotal / 6 ); + int fam = (int)( m.Fame / 120 ); + int arm = (int)( m.VirtualArmor * 2.5 ); + + level = psn + dmg + sts + fam + arm + bard; + + if ( level > 1000 ){ level = 1000; } + else if ( level < 1 ){ level = 1; } + } + + return level; + } + + public override bool IsHarmfulCriminal( Mobile target ) + { + if ( (Controlled && target == m_ControlMaster) || (Summoned && target == m_SummonMaster) ) + return false; + + if ( target is BaseCreature && ((BaseCreature)target).InitialInnocent && !((BaseCreature)target).Controlled ) + return false; + + if ( target is PlayerMobile && ((PlayerMobile)target).PermaFlags.Count > 0 ) + return false; + + return base.IsHarmfulCriminal( target ); + } + + public override void CriminalAction( bool message ) + { + base.CriminalAction( message ); + + if ( Controlled || Summoned ) + { + if ( m_ControlMaster != null && m_ControlMaster.Player ) + m_ControlMaster.CriminalAction( false ); + else if ( m_SummonMaster != null && m_SummonMaster.Player ) + m_SummonMaster.CriminalAction( false ); + } + } + + public override void DoHarmful( Mobile target, bool indirect ) + { + base.DoHarmful( target, indirect ); + + if ( target == this || target == m_ControlMaster || target == m_SummonMaster || (!Controlled && !Summoned) ) + return; + + List list = this.Aggressors; + + for ( int i = 0; i < list.Count; ++i ) + { + AggressorInfo ai = list[i]; + + if ( ai.Attacker == target ) + return; + } + + list = this.Aggressed; + + for ( int i = 0; i < list.Count; ++i ) + { + AggressorInfo ai = list[i]; + + if ( ai.Defender == target ) + { + if ( m_ControlMaster != null && m_ControlMaster.Player && m_ControlMaster.CanBeHarmful( target, false ) ) + m_ControlMaster.DoHarmful( target, true ); + else if ( m_SummonMaster != null && m_SummonMaster.Player && m_SummonMaster.CanBeHarmful( target, false ) ) + m_SummonMaster.DoHarmful( target, true ); + + return; + } + } + } + + private DateTime m_IdleReleaseTime; + + public virtual bool CheckIdle() + { + if ( Combatant != null ) + return false; // in combat.. not idling + + if ( m_IdleReleaseTime > DateTime.MinValue ) + { + // idling... + + if ( DateTime.Now >= m_IdleReleaseTime ) + { + m_IdleReleaseTime = DateTime.MinValue; + return false; // idle is over + } + + return true; // still idling + } + + if ( 95 > Utility.Random( 100 ) ) + return false; // not idling, but don't want to enter idle state + + m_IdleReleaseTime = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 15, 25 ) ); + + if ( Body.IsHuman && !Mounted ) + { + switch ( Utility.Random( 2 ) ) + { + case 0: Animate( 5, 5, 1, true, true, 1 ); break; + case 1: Animate( 6, 5, 1, true, false, 1 ); break; + } + } + else if ( Body.IsAnimal ) + { + switch ( Utility.Random( 3 ) ) + { + case 0: Animate( 3, 3, 1, true, false, 1 ); break; + case 1: Animate( 9, 5, 1, true, false, 1 ); break; + case 2: Animate( 10, 5, 1, true, false, 1 ); break; + } + } + else if ( Body.IsMonster ) + { + switch ( Utility.Random( 2 ) ) + { + case 0: Animate( 17, 5, 1, true, false, 1 ); break; + case 1: Animate( 18, 5, 1, true, false, 1 ); break; + } + } + + PlaySound( GetIdleSound() ); + return true; // entered idle state + } + + protected override void OnLocationChange( Point3D oldLocation ) + { + Map map = this.Map; + + if ( PlayerRangeSensitive && m_AI != null && map != null && map.GetSector( this.Location ).Active ) + m_AI.Activate(); + + base.OnLocationChange( oldLocation ); + } + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + base.OnMovement( m, oldLocation ); + + if ( ReacquireOnMovement ) + ForceReacquire(); + + InhumanSpeech speechType = this.SpeechType; + + if ( speechType != null ) + speechType.OnMovement( this, m, oldLocation ); + + /* Begin notice sound */ + if ( (!m.Hidden || m.AccessLevel == AccessLevel.Player) && m.Player && m_FightMode != FightMode.Aggressor && m_FightMode != FightMode.None && Combatant == null && !Controlled && !Summoned ) + { + // If this creature defends itself but doesn't actively attack (animal) or + // doesn't fight at all (vendor) then no notice sounds are played.. + // So, players are only notified of aggressive monsters + + // Monsters that are currently fighting are ignored + + // Controlled or summoned creatures are ignored + + if ( InRange( m.Location, 18 ) && !InRange( oldLocation, 18 ) ) + { + if ( Body.IsMonster ) + Animate( 11, 5, 1, true, false, 1 ); + + PlaySound( GetAngerSound() ); + } + } + } + + public void AddSpellAttack( Type type ) + { + m_arSpellAttack.Add ( type ); + } + + public void AddSpellDefense( Type type ) + { + m_arSpellDefense.Add ( type ); + } + + public Spell GetAttackSpellRandom() + { + if ( m_arSpellAttack.Count > 0 ) + { + Type type = m_arSpellAttack[Utility.Random(m_arSpellAttack.Count)]; + + object[] args = {this, null}; + return Activator.CreateInstance( type, args ) as Spell; + } + else + { + return null; + } + } + + public Spell GetDefenseSpellRandom() + { + if ( m_arSpellDefense.Count > 0 ) + { + Type type = m_arSpellDefense[Utility.Random(m_arSpellDefense.Count)]; + + object[] args = {this, null}; + return Activator.CreateInstance( type, args ) as Spell; + } + else + { + return null; + } + } + + public Spell GetSpellSpecific( Type type ) + { + int i; + + for( i=0; i< m_arSpellAttack.Count; i++ ) + { + if( m_arSpellAttack[i] == type ) + { + object[] args = { this, null }; + return Activator.CreateInstance( type, args ) as Spell; + } + } + + for ( i=0; i< m_arSpellDefense.Count; i++ ) + { + if ( m_arSpellDefense[i] == type ) + { + object[] args = {this, null}; + return Activator.CreateInstance( type, args ) as Spell; + } + } + + return null; + } + + #region Set[...] + + public void SetDamage( int val ) + { + m_DamageMin = val; + m_DamageMax = val; + } + + public void SetDamage( int min, int max ) + { + m_DamageMin = min; + m_DamageMax = max; + } + + public void SetHits( int val ) + { + if ( val < 1000 ) + val = (val * 100) / 60; + + m_HitsMax = val; + Hits = HitsMax; + } + + public void SetHits( int min, int max ) + { + if ( min < 1000 ) + { + min = (min * 100) / 60; + max = (max * 100) / 60; + } + + m_HitsMax = Utility.RandomMinMax( min, max ); + Hits = HitsMax; + } + + public void SetStam( int val ) + { + m_StamMax = val; + Stam = StamMax; + } + + public void SetStam( int min, int max ) + { + m_StamMax = Utility.RandomMinMax( min, max ); + Stam = StamMax; + } + + public void SetMana( int val ) + { + m_ManaMax = val; + Mana = ManaMax; + } + + public void SetMana( int min, int max ) + { + m_ManaMax = Utility.RandomMinMax( min, max ); + Mana = ManaMax; + } + + public void SetStr( int val ) + { + RawStr = val; + Hits = HitsMax; + } + + public void SetStr( int min, int max ) + { + RawStr = Utility.RandomMinMax( min, max ); + Hits = HitsMax; + } + + public void SetDex( int val ) + { + RawDex = val; + Stam = StamMax; + } + + public void SetDex( int min, int max ) + { + RawDex = Utility.RandomMinMax( min, max ); + Stam = StamMax; + } + + public void SetInt( int val ) + { + RawInt = val; + Mana = ManaMax; + } + + public void SetInt( int min, int max ) + { + RawInt = Utility.RandomMinMax( min, max ); + Mana = ManaMax; + } + + public void SetSkill( SkillName name, double val ) + { + Skills[name].BaseFixedPoint = (int)(val * 10); + + if ( Skills[name].Base > Skills[name].Cap ) + { + Skills[name].Cap = Skills[name].Base; + } + } + + public void SetSkill( SkillName name, double min, double max ) + { + int minFixed = (int)(min * 10); + int maxFixed = (int)(max * 10); + + Skills[name].BaseFixedPoint = Utility.RandomMinMax( minFixed, maxFixed ); + + if ( Skills[name].Base > Skills[name].Cap ) + { + Skills[name].Cap = Skills[name].Base; + } + } + + public void SetFameLevel( int level ) + { + switch ( level ) + { + case 1: Fame = Utility.RandomMinMax( 0, 1249 ); break; + case 2: Fame = Utility.RandomMinMax( 1250, 2499 ); break; + case 3: Fame = Utility.RandomMinMax( 2500, 4999 ); break; + case 4: Fame = Utility.RandomMinMax( 5000, 9999 ); break; + case 5: Fame = Utility.RandomMinMax( 10000, 10000 ); break; + } + } + + public void SetKarmaLevel( int level ) + { + switch ( level ) + { + case 0: Karma = -Utility.RandomMinMax( 0, 624 ); break; + case 1: Karma = -Utility.RandomMinMax( 625, 1249 ); break; + case 2: Karma = -Utility.RandomMinMax( 1250, 2499 ); break; + case 3: Karma = -Utility.RandomMinMax( 2500, 4999 ); break; + case 4: Karma = -Utility.RandomMinMax( 5000, 9999 ); break; + case 5: Karma = -Utility.RandomMinMax( 10000, 10000 ); break; + } + } + + #endregion + + public static void Cap( ref int val, int min, int max ) + { + if ( val < min ) + val = min; + else if ( val > max ) + val = max; + } + + #region Pack & Loot + + public virtual void DropBackpack() + { + if ( Backpack != null ) + { + if( Backpack.Items.Count > 0 ) + { + Backpack b = new CreatureBackpack( Name ); + + List list = new List( Backpack.Items ); + foreach ( Item item in list ) + { + b.DropItem( item ); + } + + BaseHouse house = BaseHouse.FindHouseAt( this ); + if ( house != null ) + b.MoveToWorld( house.BanLocation, house.Map ); + else + b.MoveToWorld( Location, Map ); + } + } + } + + protected bool m_Spawning; + + public virtual void GenerateLoot( bool spawning ) + { + m_Spawning = spawning; + + GenerateLoot(); + + m_Spawning = false; + } + + public virtual void GenerateLoot() + { + } + + public virtual void AddLoot( LootPack pack, int amount ) + { + for ( int i = 0; i < amount; ++i ) + AddLoot( pack ); + } + + public virtual void AddLoot( LootPack pack ) + { + if ( Summoned ) + return; + + Container backpack = Backpack; + + if ( backpack == null ) + { + backpack = new Backpack(); + + backpack.Movable = false; + + AddItem( backpack ); + } + + pack.Generate( this, backpack, m_Spawning ); + } + + public void PackGold( int amount ) + { + if ( amount > 0 ) + PackItem( new Gold( amount ) ); + } + + public void PackGold( int min, int max ) + { + PackGold( Utility.RandomMinMax( min, max ) ); + } + + public void PackWood( int amount ) + { + if ( amount > 0 ) + { + Item wood = new WoodBoard(); + wood.ItemID = 0x1BE0; + wood.Weight = 2.0; + wood.Amount = amount; + PackItem( wood ); + } + } + + public void PackReg( int min, int max ) + { + PackReg( Utility.RandomMinMax( min, max ) ); + } + + public void PackReg( int amount ) + { + if ( amount <= 0 ) + return; + + Item reg = Loot.RandomReagent(); + + reg.Amount = amount; + + PackItem( reg ); + } + + public void PackItem( Item item ) + { + if ( Summoned || item == null ) + { + if ( item != null ) + item.Delete(); + + return; + } + + Container pack = Backpack; + + if ( pack == null ) + { + pack = new Backpack(); + + pack.Movable = false; + + AddItem( pack ); + } + + if ( !item.Stackable || !pack.TryDropItem( this, item, false ) ) // try stack + pack.DropItem( item ); // failed, drop it anyway + } + + #endregion + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel >= AccessLevel.GameMaster && !Body.IsHuman ) + { + Container pack = this.Backpack; + + if ( pack != null ) + pack.DisplayTo( from ); + } + + base.OnDoubleClick( from ); + } + + public override void AddNameProperties( ObjectPropertyList list ) + { + base.AddNameProperties( list ); + /* + if ( Summoned ) + list.Add( 1049646 ); // (summoned) + else if ( Controlled && Commandable ) + { + if ( IsBonded ) //Intentional difference (showing ONLY bonded when bonded instead of bonded & tame) + list.Add( 1049608 ); // (bonded) + else + list.Add( 502006 ); // (tame) + } + */ + } + + public override void OnSingleClick( Mobile from ) + { + /* + if ( Controlled && Commandable ) + { + int number; + + if ( Summoned ) + number = 1049646; // (summoned) + else if ( IsBonded ) + number = 1049608; // (bonded) + else + number = 502006; // (tame) + + PrivateOverheadMessage( MessageType.Regular, 0x3B2, number, from.NetState ); + } + */ + + base.OnSingleClick( from ); + } + + public virtual double TreasureMapChance{ get{ return TreasureMap.LootChance; } } + public virtual int TreasureMapLevel + { + get + { + int level = MyLevel( this ); + + int map = -1; + + if ( Fame >= 2000 && AI != AIType.AI_Animal ) + { + if ( level >= 143 && level <= 285 ){ map = 1; } + else if ( level >= 286 && level <= 428 ){ map = 2; } + else if ( level >= 429 && level <= 571 ){ map = 3; } + else if ( level >= 572 && level <= 714 ){ map = 4; } + else if ( level >= 715 && level <= 857 ){ map = 5; } + else if ( level >= 858 && level <= 1000 ){ map = 6; } + } + + if ( Utility.RandomMinMax( 0, 6 ) > map && Utility.RandomBool() ) + map = -1; + + return map; + } + } + + public override bool OnBeforeDeath() + { + int treasureLevel = TreasureMapLevel; + + if ( !Summoned && !NoKillAwards && !IsBonded && treasureLevel > 0 ) + { + if ( TreasureMap.LootChance >= Utility.RandomDouble() ) + PackItem( new TreasureMap( treasureLevel, Map ) ); + } + + if ( !Summoned && !NoKillAwards && !m_HasGeneratedLoot ) + { + m_HasGeneratedLoot = true; + GenerateLoot( false ); + } + + InhumanSpeech speechType = this.SpeechType; + + if ( speechType != null ) + speechType.OnDeath( this ); + + return base.OnBeforeDeath(); + } + + private bool m_NoKillAwards; + + public bool NoKillAwards + { + get{ return m_NoKillAwards; } + set{ m_NoKillAwards = value; } + } + + public int ComputeBonusDamage( List list, Mobile m ) + { + int bonus = 0; + + for ( int i = list.Count - 1; i >= 0; --i ) + { + DamageEntry de = list[i]; + + if ( de.Damager == m || !(de.Damager is BaseCreature) ) + continue; + + BaseCreature bc = (BaseCreature)de.Damager; + Mobile master = null; + + master = bc.GetMaster(); + + if ( master == m ) + bonus += de.DamageGiven; + } + + return bonus; + } + + public Mobile GetMaster() + { + if ( Controlled && ControlMaster != null ) + return ControlMaster; + else if ( Summoned && SummonMaster != null ) + return SummonMaster; + + return null; + } + + private class FKEntry + { + public Mobile m_Mobile; + public int m_Damage; + + public FKEntry( Mobile m, int damage ) + { + m_Mobile = m; + m_Damage = damage; + } + } + + public static List GetLootingRights( List damageEntries, int hitsMax ) + { + List rights = new List(); + + for ( int i = damageEntries.Count - 1; i >= 0; --i ) + { + if ( i >= damageEntries.Count ) + continue; + + DamageEntry de = damageEntries[i]; + + if ( de.HasExpired ) + { + damageEntries.RemoveAt( i ); + continue; + } + + int damage = de.DamageGiven; + + List respList = de.Responsible; + + if ( respList != null ) + { + for ( int j = 0; j < respList.Count; ++j ) + { + DamageEntry subEntry = respList[j]; + Mobile master = subEntry.Damager; + + if ( master == null || master.Deleted || !master.Player ) + continue; + + bool needNewSubEntry = true; + + for ( int k = 0; needNewSubEntry && k < rights.Count; ++k ) + { + DamageStore ds = rights[k]; + + if ( ds.m_Mobile == master ) + { + ds.m_Damage += subEntry.DamageGiven; + needNewSubEntry = false; + } + } + + if ( needNewSubEntry ) + rights.Add( new DamageStore( master, subEntry.DamageGiven ) ); + + damage -= subEntry.DamageGiven; + } + } + + Mobile m = de.Damager; + + if ( m == null || m.Deleted || !m.Player ) + continue; + + if ( damage <= 0 ) + continue; + + bool needNewEntry = true; + + for ( int j = 0; needNewEntry && j < rights.Count; ++j ) + { + DamageStore ds = rights[j]; + + if ( ds.m_Mobile == m ) + { + ds.m_Damage += damage; + needNewEntry = false; + } + } + + if ( needNewEntry ) + rights.Add( new DamageStore( m, damage ) ); + } + + if ( rights.Count > 0 ) + { + rights[0].m_Damage = (int)(rights[0].m_Damage * 1.25); //This would be the first valid person attacking it. Gets a 25% bonus. Per 1/19/07 Five on Friday + + if ( rights.Count > 1 ) + rights.Sort(); //Sort by damage + + int topDamage = rights[0].m_Damage; + int minDamage; + + if ( hitsMax >= 3000 ) + minDamage = topDamage / 16; + else if ( hitsMax >= 1000 ) + minDamage = topDamage / 8; + else if ( hitsMax >= 200 ) + minDamage = topDamage / 4; + else + minDamage = topDamage / 2; + + for ( int i = 0; i < rights.Count; ++i ) + { + DamageStore ds = rights[i]; + + ds.m_HasRight = ( ds.m_Damage >= minDamage ); + } + } + + return rights; + } + + public virtual void OnKilledBy( Mobile mob ) + { + } + + public override void OnDeath( Container c ) + { + if ( IsBonded ) + { + int sound = this.GetDeathSound(); + + if ( sound >= 0 ) + Effects.PlaySound( this, this.Map, sound ); + + Warmode = false; + + Poison = null; + Combatant = null; + + Hits = 0; + Stam = 0; + Mana = 0; + + IsDeadPet = true; + ControlTarget = ControlMaster; + ControlOrder = OrderType.Follow; + + ProcessDeltaQueue(); + SendIncomingPacket(); + SendIncomingPacket(); + + List aggressors = this.Aggressors; + + for ( int i = 0; i < aggressors.Count; ++i ) + { + AggressorInfo info = aggressors[i]; + + if ( info.Attacker.Combatant == this ) + info.Attacker.Combatant = null; + } + + List aggressed = this.Aggressed; + + for ( int i = 0; i < aggressed.Count; ++i ) + { + AggressorInfo info = aggressed[i]; + + if ( info.Defender.Combatant == this ) + info.Defender.Combatant = null; + } + + Mobile owner = this.ControlMaster; + + if ( owner == null || owner.Deleted || owner.Map != this.Map || !owner.InRange( this, 12 ) || !this.CanSee( owner ) || !this.InLOS( owner ) ) + { + if ( this.OwnerAbandonTime == DateTime.MinValue ) + this.OwnerAbandonTime = DateTime.Now; + } + else + { + this.OwnerAbandonTime = DateTime.MinValue; + } + + CheckStatTimers(); + } + else + { + if ( !Summoned && !m_NoKillAwards ) + { + int totalFame = Fame / 100; + int totalKarma = -Karma / 100; + + List list = GetLootingRights( this.DamageEntries, this.HitsMax ); + List titles = new List(); + List fame = new List(); + List karma = new List(); + + for ( int i = 0; i < list.Count; ++i ) + { + DamageStore ds = list[i]; + + if ( !ds.m_HasRight ) + continue; + + Party party = Engines.PartySystem.Party.Get( ds.m_Mobile ); + + if ( party != null ) + { + int divedFame = totalFame / party.Members.Count; + int divedKarma = totalKarma / party.Members.Count; + + for ( int j = 0; j < party.Members.Count; ++j ) + { + PartyMemberInfo info = party.Members[ j ] as PartyMemberInfo; + + if ( info != null && info.Mobile != null ) + { + int index = titles.IndexOf( info.Mobile ); + + if ( index == -1 ) + { + titles.Add( info.Mobile ); + fame.Add( divedFame ); + karma.Add( divedKarma ); + } + else + { + fame[ index ] += divedFame; + karma[ index ] += divedKarma; + } + } + } + } + else + { + titles.Add( ds.m_Mobile ); + fame.Add( totalFame ); + karma.Add( totalKarma ); + } + + OnKilledBy( ds.m_Mobile ); + } + for ( int i = 0; i < titles.Count; ++i ) + { + Titles.AwardFame( titles[ i ], fame[ i ], true ); + Titles.AwardKarma( titles[ i ], karma[ i ], true ); + } + } + + base.OnDeath( c ); + + if ( DeleteCorpseOnDeath ) + c.Delete(); + } + } + + /* To save on cpu usage, RunUO creatures only reacquire creatures under the following circumstances: + * - 10 seconds have elapsed since the last time it tried + * - The creature was attacked + * - Some creatures, like dragons, will reacquire when they see someone move + * + * This functionality appears to be implemented on OSI as well + */ + + private DateTime m_NextReacquireTime; + + public DateTime NextReacquireTime{ get{ return m_NextReacquireTime; } set{ m_NextReacquireTime = value; } } + + public virtual TimeSpan ReacquireDelay{ get{ return TimeSpan.FromSeconds( 10.0 ); } } + public virtual bool ReacquireOnMovement{ get{ return false; } } + + public void ForceReacquire() + { + m_NextReacquireTime = DateTime.MinValue; + } + + public override void OnDelete() + { + Server.Mobiles.PremiumSpawner.DropSpawner( this ); + + Mobile m = m_ControlMaster; + + SetControlMaster( null ); + SummonMaster = null; + + if ( this.Mounted ) + { + Mobiles.IMount mt = this.Mount; + Mobile animal = (Mobile)mt; + animal.Delete(); + } + + base.OnDelete(); + + if ( m != null ) + m.InvalidateProperties(); + } + + public override bool CanBeHarmful( Mobile target, bool message, bool ignoreOurBlessedness ) + { + if ( target.Invulnerable || target is PlayerVendor || target is TownCrier ) + { + if ( message ) + { + if ( target.Title == null ) + SendMessage( "{0} the vendor cannot be harmed.", target.Name ); + else + SendMessage( "{0} {1} cannot be harmed.", target.Name, target.Title ); + } + + return false; + } + + return base.CanBeHarmful( target, message, ignoreOurBlessedness ); + } + + public override bool CanBeRenamedBy( Mobile from ) + { + bool ret = base.CanBeRenamedBy( from ); + + if ( Controlled && from == ControlMaster ) + ret = true; + + return ret; + } + + public bool SetControlMaster( Mobile m ) + { + if ( m == null ) + { + ControlMaster = null; + Controlled = false; + ControlTarget = null; + ControlOrder = OrderType.None; + Guild = null; + + Delta( MobileDelta.Noto ); + } + else + { + ISpawner se = this.Spawner; + if ( se != null && se.UnlinkOnTaming ) + { + this.Spawner.Remove( this ); + this.Spawner = null; + } + + if ( m.Followers + ControlSlots > m.FollowersMax ) + { + m.SendLocalizedMessage( 1049607 ); // You have too many followers to control that creature. + return false; + } + + CurrentWayPoint = null;//so tamed animals don't try to go back + + ControlMaster = m; + Controlled = true; + ControlTarget = null; + ControlOrder = OrderType.Come; + Guild = null; + + if ( m_DeleteTimer != null ) + { + m_DeleteTimer.Stop(); + m_DeleteTimer = null; + } + + Delta( MobileDelta.Noto ); + } + + InvalidateProperties(); + + return true; + } + + public override void OnRegionChange( Region Old, Region New ) + { + base.OnRegionChange( Old, New ); + + if ( this.Controlled ) + { + SpawnEntry se = this.Spawner as SpawnEntry; + + if ( se != null && !se.UnlinkOnTaming && ( New == null || !New.AcceptsSpawnsFrom( se.Region ) ) ) + { + this.Spawner.Remove( this ); + this.Spawner = null; + } + } + } + + private static bool m_Summoning; + + public static bool Summoning + { + get{ return m_Summoning; } + set{ m_Summoning = value; } + } + + public static bool Summon( BaseCreature creature, Mobile caster, Point3D p, int sound, TimeSpan duration ) + { + return Summon( creature, true, caster, p, sound, duration ); + } + + public static bool Summon( BaseCreature creature, bool controlled, Mobile caster, Point3D p, int sound, TimeSpan duration ) + { + if ( caster.Followers + creature.ControlSlots > caster.FollowersMax ) + { + caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + creature.Delete(); + return false; + } + + m_Summoning = true; + + if ( controlled ) + creature.SetControlMaster( caster ); + + creature.RangeHome = 10; + creature.Summoned = true; + + creature.SummonMaster = caster; + + Container pack = creature.Backpack; + + if ( pack != null ) + { + for ( int i = pack.Items.Count - 1; i >= 0; --i ) + { + if ( i >= pack.Items.Count ) + continue; + + pack.Items[i].Delete(); + } + } + + new UnsummonTimer( caster, creature, duration ).Start(); + creature.m_SummonEnd = DateTime.Now + duration; + + creature.MoveToWorld( p, caster.Map ); + + Effects.PlaySound( p, creature.Map, sound ); + + m_Summoning = false; + + return true; + } + + private static bool EnableRummaging = true; + + private const double ChanceToRummage = 0.5; // 50% + + private const double MinutesToNextRummageMin = 1.0; + private const double MinutesToNextRummageMax = 4.0; + + private const double MinutesToNextChanceMin = 0.25; + private const double MinutesToNextChanceMax = 0.75; + + private DateTime m_NextRummageTime; + + public virtual bool CanBreath { get { return HasBreath && !Summoned; } } + public virtual bool IsDispellable { get { return Summoned; } } + + #region Healing + public virtual bool CanHeal { get { return false; } } + public virtual bool CanHealOwner { get { return false; } } + public virtual double HealScalar { get { return 1.0; } } + + public virtual int HealSound { get { return 0x57; } } + public virtual int HealStartRange { get { return 2; } } + public virtual int HealEndRange { get { return RangePerception; } } + public virtual double HealTrigger { get { return 0.78; } } + public virtual double HealDelay { get { return 6.5; } } + public virtual double HealInterval { get { return 0.0; } } + public virtual bool HealFully { get { return true; } } + public virtual double HealOwnerTrigger { get { return 0.78; } } + public virtual double HealOwnerDelay { get { return 6.5; } } + public virtual double HealOwnerInterval { get { return 30.0; } } + public virtual bool HealOwnerFully { get { return false; } } + + private DateTime m_NextHealTime = DateTime.Now; + private DateTime m_NextHealOwnerTime = DateTime.Now; + private Timer m_HealTimer = null; + + public bool IsHealing { get { return ( m_HealTimer != null ); } } + + public virtual void HealStart( Mobile patient ) + { + bool onSelf = ( patient == this ); + + //DoBeneficial( patient ); + + RevealingAction(); + + if ( !onSelf ) + { + patient.RevealingAction(); + patient.SendLocalizedMessage( 1008078, false, Name ); // : Attempting to heal you. + } + + double seconds = ( onSelf ? HealDelay : HealOwnerDelay ) + ( patient.Alive ? 0.0 : 5.0 ); + + m_HealTimer = Timer.DelayCall( TimeSpan.FromSeconds( seconds ), new TimerStateCallback( Heal_Callback ), patient ); + } + + private void Heal_Callback( object state ) + { + if ( state is Mobile ) + Heal( (Mobile)state ); + } + + public virtual void Heal( Mobile patient ) + { + if ( !Alive || this.Map == Map.Internal || !CanBeBeneficial( patient, true, true ) || patient.Map != this.Map || !InRange( patient, HealEndRange ) ) + { + StopHeal(); + return; + } + + bool onSelf = ( patient == this ); + + if ( !patient.Alive ) + { + } + else if ( patient.Poisoned ) + { + int poisonLevel = patient.Poison.Level; + + double healing = Skills.Healing.Value; + double chance = ( healing - 30.0 ) / 50.0 - poisonLevel * 0.1; + + if ( ( healing >= 60.0 ) && chance > Utility.RandomDouble() ) + { + if ( patient.CurePoison( this ) ) + { + patient.SendLocalizedMessage( 1010059 ); // You have been cured of all poisons. + + CheckSkill( SkillName.Healing, 0.0, 60.0 + poisonLevel * 10.0 ); // TODO: Verify formula + } + } + } + else + { + double healing = Skills.Healing.Value; + double chance = ( healing + 10.0 ) / 100.0; + + if ( chance > Utility.RandomDouble() ) + { + double min, max; + + min = ( healing / 10.0 ) + ( healing / 6.0 ) + 4.0; + max = ( healing / 8.0 ) + ( healing / 3.0 ) + 4.0; + + if ( onSelf ) + max += 10; + + double toHeal = min + ( Utility.RandomDouble() * ( max - min ) ); + + toHeal *= HealScalar; + + patient.Heal( (int)toHeal ); + + CheckSkill( SkillName.Healing, 0.0, 90.0 ); + } + } + + HealEffect( patient ); + + StopHeal(); + + if ( ( onSelf && HealFully && Hits >= HealTrigger * HitsMax && Hits < HitsMax ) || ( !onSelf && HealOwnerFully && patient.Hits >= HealOwnerTrigger * patient.HitsMax && patient.Hits < patient.HitsMax ) ) + HealStart( patient ); + } + + public virtual void StopHeal() + { + if ( m_HealTimer != null ) + m_HealTimer.Stop(); + + m_HealTimer = null; + } + + public virtual void HealEffect( Mobile patient ) + { + patient.PlaySound( HealSound ); + } + + #endregion + + public virtual void OnThink() + { + if ( EnableRummaging && CanRummageCorpses && !Summoned && !Controlled && DateTime.Now >= m_NextRummageTime ) + { + double min, max; + + if ( ChanceToRummage > Utility.RandomDouble() && Rummage() ) + { + min = MinutesToNextRummageMin; + max = MinutesToNextRummageMax; + } + else + { + min = MinutesToNextChanceMin; + max = MinutesToNextChanceMax; + } + + double delay = min + (Utility.RandomDouble() * (max - min)); + m_NextRummageTime = DateTime.Now + TimeSpan.FromMinutes( delay ); + } + + if ( CanBreath && DateTime.Now >= m_NextBreathTime ) // tested: controlled dragons do breath fire, what about summoned skeletal dragons? + { + Mobile target = this.Combatant; + + if( target != null && target.Alive && !target.IsDeadBondedPet && CanBeHarmful( target ) && target.Map == this.Map && !IsDeadBondedPet && target.InRange( this, BreathRange ) && InLOS( target ) && !BardPacified ) + { + if( ( DateTime.Now - m_NextBreathTime ) < TimeSpan.FromSeconds( 30 ) ) + { + BreathStart( target ); + } + + m_NextBreathTime = DateTime.Now + TimeSpan.FromSeconds( BreathMinDelay + ( Utility.RandomDouble() * BreathMaxDelay ) ); + } + } + + if ( ( CanHeal || CanHealOwner ) && Alive && !IsHealing && !BardPacified ) + { + Mobile owner = this.ControlMaster; + + if ( owner != null && CanHealOwner && DateTime.Now >= m_NextHealOwnerTime && CanBeBeneficial( owner, true, true ) && owner.Map == this.Map && InRange( owner, HealStartRange ) && InLOS( owner ) && owner.Hits < HealOwnerTrigger * owner.HitsMax ) + { + HealStart( owner ); + + m_NextHealOwnerTime = DateTime.Now + TimeSpan.FromSeconds( HealOwnerInterval ); + } + else if ( CanHeal && DateTime.Now >= m_NextHealTime && CanBeBeneficial( this ) && ( Hits < HealTrigger * HitsMax || Poisoned ) ) + { + HealStart( this ); + + m_NextHealTime = DateTime.Now + TimeSpan.FromSeconds( HealInterval ); + } + } + + if ( Server.Misc.Settings.MonstersSurprise() && Combatant == null && ( Region is GraveRegion || Region is DungeonRegion ) ) // MOVE FROM PLAYER SIGHT WHEN NOT SEEN + { + bool seeing = true; + bool swims = (SlayerGroup.GetEntryByName( SlayerName.SeaSlaughter )).Slays(this); + + foreach ( NetState state in NetState.Instances ) + { + Mobile m = state.Mobile; + + if ( ( m is PlayerMobile || (m is BaseCreature && ((BaseCreature)m).Controlled) ) && InLOS( m ) && m.Alive && m.Map == this.Map ) + seeing = false; + } + + if ( seeing ) + { + Warmode = false; + CantWalk = true; + CanSwim = false; + Hidden = true; + } + else if ( Hidden ) + { + CantWalk = WontWalk; + CanSwim = WillSwim; + Hidden = false; + } + } + else if ( SeaCreature && !WontWalk && Combatant == null && !Hidden ) // DIVE UNDER WATER AND WAIT FOR VICTIM IF YOU CAN ALSO WALK ON LAND + { + bool dive = true; + + foreach ( NetState state in NetState.Instances ) + { + Mobile m = state.Mobile; + + if ( m is PlayerMobile && m.InRange( this.Location, 20 ) && m.Alive && m.Map == this.Map ) + dive = false; + } + + if ( dive ) + { + Point3D loc = BaseRegion.GetBoatWater( this.X, this.Y, this.Map, 8 ); + + this.Location = loc; + this.PlaySound( 0x026 ); + Effects.SendLocationEffect( this.Location, this.Map, 0x35B2, 16 ); + + this.Warmode = false; + this.CantWalk = true; + this.CanSwim = false; + this.Hidden = true; + } + } + } + + public virtual bool Rummage() + { + Corpse toRummage = null; + + foreach ( Item item in this.GetItemsInRange( 2 ) ) + { + if ( item is Corpse && item.Items.Count > 0 ) + { + toRummage = (Corpse)item; + break; + } + } + + if ( toRummage == null ) + return false; + + Container pack = this.Backpack; + + if ( pack == null ) + return false; + + List items = toRummage.Items; + + bool rejected; + LRReason reason; + + for ( int i = 0; i < items.Count; ++i ) + { + Item item = items[Utility.Random( items.Count )]; + + Lift( item, item.Amount, out rejected, out reason ); + + if ( !rejected && Drop( this, new Point3D( -1, -1, 0 ) ) ) + { + // *rummages through a corpse and takes an item* + PublicOverheadMessage( MessageType.Emote, 0x3B2, 1008086 ); + //TODO: Instancing of Rummaged stuff. + return true; + } + } + + return false; + } + + public void Pacify( Mobile master, DateTime endtime ) + { + BardPacified = true; + BardEndTime = endtime; + } + + public override Mobile GetDamageMaster( Mobile damagee ) + { + if ( m_bBardProvoked && damagee == m_bBardTarget ) + return m_bBardMaster; + else if ( m_bControlled && m_ControlMaster != null ) + return m_ControlMaster; + else if ( m_bSummoned && m_SummonMaster != null ) + return m_SummonMaster; + + return base.GetDamageMaster( damagee ); + } + + public void Provoke( Mobile master, Mobile target, bool bSuccess ) + { + BardProvoked = true; + + this.PublicOverheadMessage( MessageType.Emote, EmoteHue, false, "*looks furious*" ); + + if ( bSuccess ) + { + PlaySound( GetIdleSound() ); + + BardMaster = master; + BardTarget = target; + Combatant = target; + BardEndTime = DateTime.Now + TimeSpan.FromSeconds( 30.0 ); + + if ( target is BaseCreature ) + { + BaseCreature t = (BaseCreature)target; + + if ( t.Unprovokable ) + return; + + t.BardProvoked = true; + + t.BardMaster = master; + t.BardTarget = this; + t.Combatant = this; + t.BardEndTime = DateTime.Now + TimeSpan.FromSeconds( 30.0 ); + } + } + else + { + PlaySound( GetAngerSound() ); + + BardMaster = master; + BardTarget = target; + } + } + + public bool FindMyName( string str, bool bWithAll ) + { + int i, j; + + string name = this.Name; + + if( name == null || str.Length < name.Length ) + return false; + + string[] wordsString = str.Split(' '); + string[] wordsName = name.Split(' '); + + for ( j=0 ; j < wordsName.Length; j++ ) + { + string wordName = wordsName[j]; + + bool bFound = false; + for ( i=0 ; i < wordsString.Length; i++ ) + { + string word = wordsString[i]; + + if ( Insensitive.Equals( word, wordName ) ) + bFound = true; + + if ( bWithAll && Insensitive.Equals( word, "all" ) ) + return true; + } + + if ( !bFound ) + return false; + } + + return true; + } + + public static void TeleportPets( Mobile master, Point3D loc, Map map ) + { + TeleportPets( master, loc, map, false ); + } + + public static void TeleportPets( Mobile master, Point3D loc, Map map, bool onlyBonded ) + { + List move = new List(); + + foreach ( Mobile m in master.GetMobilesInRange( 3 ) ) + { + if ( m is BaseCreature ) + { + BaseCreature pet = (BaseCreature)m; + + if ( pet.Controlled && pet.ControlMaster == master ) + { + if ( !onlyBonded || pet.IsBonded ) + { + if ( pet.ControlOrder == OrderType.Guard || pet.ControlOrder == OrderType.Follow || pet.ControlOrder == OrderType.Come ) + move.Add( pet ); + } + } + } + } + + foreach ( Mobile m in move ) + m.MoveToWorld( loc, map ); + } + + public static void DeletePets( Mobile master ) + { + List move = new List(); + + foreach ( Mobile m in master.GetMobilesInRange( 10 ) ) + { + if ( m is BaseCreature ) + { + BaseCreature pet = (BaseCreature)m; + + if ( pet.Controlled && pet.ControlMaster == master ) + { + move.Add( pet ); + } + } + } + + foreach ( Mobile m in move ) + m.Delete(); + } + + public virtual void ResurrectPet() + { + if ( !IsDeadPet ) + return; + + OnBeforeResurrect(); + + Poison = null; + + Warmode = false; + + Hits = 10; + Stam = StamMax; + Mana = 0; + + ProcessDeltaQueue(); + + IsDeadPet = false; + + Effects.SendPacket( Location, Map, new BondedStatus( 0, this.Serial, 0 ) ); + + this.SendIncomingPacket(); + this.SendIncomingPacket(); + + OnAfterResurrect(); + + Mobile owner = this.ControlMaster; + + if ( owner == null || owner.Deleted || owner.Map != this.Map || !owner.InRange( this, 12 ) || !this.CanSee( owner ) || !this.InLOS( owner ) ) + { + if ( this.OwnerAbandonTime == DateTime.MinValue ) + this.OwnerAbandonTime = DateTime.Now; + } + else + { + this.OwnerAbandonTime = DateTime.MinValue; + } + + CheckStatTimers(); + } + + public override bool CanBeDamaged() + { + if ( IsDeadPet ) + return false; + + return base.CanBeDamaged(); + } + + public virtual bool PlayerRangeSensitive{ get{ return (this.CurrentWayPoint == null); } } //If they are following a waypoint, they'll continue to follow it even if players aren't around + + public override void OnSectorDeactivate() + { + if ( PlayerRangeSensitive && m_AI != null ) + m_AI.Deactivate(); + + base.OnSectorDeactivate(); + } + + public override void OnSectorActivate() + { + if ( PlayerRangeSensitive && m_AI != null ) + m_AI.Activate(); + + base.OnSectorActivate(); + } + + private bool m_RemoveIfUntamed; + + // used for deleting untamed creatures [in houses] + private int m_RemoveStep; + + [CommandProperty( AccessLevel.GameMaster )] + public bool RemoveIfUntamed{ get{ return m_RemoveIfUntamed; } set{ m_RemoveIfUntamed = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int RemoveStep { get { return m_RemoveStep; } set { m_RemoveStep = value; } } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/BaseGuildmaster.cs b/Scripts/Mobiles/Base/BaseGuildmaster.cs new file mode 100644 index 0000000..fcc5652 --- /dev/null +++ b/Scripts/Mobiles/Base/BaseGuildmaster.cs @@ -0,0 +1,233 @@ +using System; +using Server; +using Server.Misc; +using System.Collections.Generic; +using System.Collections; +using Server.Network; +using Server.Mobiles; +using Server.Items; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + public abstract class BaseGuildmaster : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override bool IsActiveVendor{ get{ return true; } } + + public override bool ClickTitle{ get{ return false; } } + + public virtual int JoinCost{ get{ return 1000; } } + + public override void InitSBInfo() + { + } + + public virtual void SayGuildTo( Mobile m ) + { + SayTo( m, 1008055 + (int)NpcGuild ); + } + + public virtual void SayWelcomeTo( Mobile m ) + { + SayTo( m, "Welcome to the guild! Thou shalt find it beneficial to your future endeavors." ); + } + + public virtual void SayPriceTo( Mobile m ) + { + m.Send( new MessageLocalizedAffix( Serial, Body, MessageType.Regular, SpeechHue, 3, 1008052, Name, AffixType.Append, JoinCost.ToString(), "" ) ); + } + + public virtual bool WasNamed( string speech ) + { + string name = this.Name; + + return ( name != null && Insensitive.StartsWith( speech, name ) ); + } + + public override bool HandlesOnSpeech( Mobile from ) + { + if ( from.InRange( this.Location, 2 ) ) + return true; + + return base.HandlesOnSpeech( from ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + PlayerMobile pm = (PlayerMobile)from; + base.GetContextMenuEntries( from, list ); + if ( pm.NpcGuild != this.NpcGuild ){ list.Add( new JoinEntry( from, this ) ); } + else if ( pm.NpcGuild == this.NpcGuild ){ list.Add( new ResignEntry( from, this ) ); } + } + + public class JoinEntry : ContextMenuEntry + { + private Mobile m_Mobile; + private Mobile m_Guildmaster; + + public JoinEntry( Mobile from, Mobile guildmaster ) : base( 6116, 3 ) + { + m_Mobile = from; + m_Guildmaster = guildmaster; + } + + public override void OnClick() + { + if( !( m_Mobile is PlayerMobile ) ) + return; + + JoinGuild( m_Mobile, (BaseGuildmaster)m_Guildmaster ); + } + } + + public class ResignEntry : ContextMenuEntry + { + private Mobile m_Mobile; + private Mobile m_Guildmaster; + + public ResignEntry( Mobile from, Mobile guildmaster ) : base( 6115, 3 ) + { + m_Mobile = from; + m_Guildmaster = guildmaster; + } + + public override void OnClick() + { + if( !( m_Mobile is PlayerMobile ) ) + return; + + ResignGuild( m_Mobile, (BaseGuildmaster)m_Guildmaster ); + } + } + + public override void OnSpeech( SpeechEventArgs e ) + { + Mobile from = e.Mobile; + + if ( !e.Handled && from is PlayerMobile && from.InRange( this.Location, 2 ) && WasNamed( e.Speech ) ) + { + PlayerMobile pm = (PlayerMobile)from; + + if ( e.HasKeyword( 0x0004 ) ) // *join* | *member* + { + if ( pm.NpcGuild == this.NpcGuild ) + SayTo( from, 501047 ); // Thou art already a member of our guild. + else if ( pm.NpcGuild != NpcGuild.None ) + SayTo( from, 501046 ); // Thou must resign from thy other guild first. + else + SayPriceTo( from ); + + e.Handled = true; + } + else if ( e.HasKeyword( 0x0005 ) ) // *resign* | *quit* + { + if ( pm.NpcGuild != this.NpcGuild ) + { + SayTo( from, 501052 ); // Thou dost not belong to my guild! + } + else + { + SayTo( from, 501054 ); // I accept thy resignation. + pm.NpcGuild = NpcGuild.None; + pm.InvalidateProperties(); + } + + e.Handled = true; + } + } + + base.OnSpeech( e ); + } + + public static void JoinGuild( Mobile player, BaseGuildmaster guildmaster ) + { + PlayerMobile pm = (PlayerMobile)player; + + if ( pm.NpcGuild == ((BaseVendor)guildmaster).NpcGuild ) + guildmaster.SayTo( player, 501047 ); // Thou art already a member of our guild. + else if ( pm.NpcGuild != NpcGuild.None ) + guildmaster.SayTo( player, 501046 ); // Thou must resign from thy other guild first. + else + guildmaster.SayPriceTo( player ); + } + + public static void ResignGuild( Mobile player, BaseGuildmaster guildmaster ) + { + PlayerMobile pm = (PlayerMobile)player; + + if ( pm.NpcGuild != ((BaseVendor)guildmaster).NpcGuild ) + { + guildmaster.SayTo( player, 501052 ); // Thou dost not belong to my guild! + } + else + { + guildmaster.SayTo( player, 501054 ); // I accept thy resignation. + pm.NpcGuild = NpcGuild.None; + pm.InvalidateProperties(); + } + } + + public override bool OnGoldGiven( Mobile from, Gold dropped ) + { + if ( from is PlayerMobile && dropped.Amount == JoinCost ) + { + PlayerMobile pm = (PlayerMobile)from; + + if ( pm.NpcGuild == this.NpcGuild ) + { + SayTo( from, 501047 ); // Thou art already a member of our guild. + } + else if ( pm.NpcGuild != NpcGuild.None ) + { + SayTo( from, 501046 ); // Thou must resign from thy other guild first. + } + else if ( pm.Kills > 4 && this.NpcGuild != NpcGuild.AssassinsGuild && this.NpcGuild != NpcGuild.ThievesGuild ) + { + SayTo( from, 501522 ); // I shall not deal with scum like thee! + } + else + { + SayWelcomeTo( from ); + + pm.NpcGuild = this.NpcGuild; + pm.NpcGuildJoinTime = DateTime.Now; + pm.NpcGuildGameTime = pm.GameTime; + pm.InvalidateProperties(); + + dropped.Delete(); + return true; + } + + return false; + } + + return base.OnGoldGiven( from, dropped ); + } + + public BaseGuildmaster( string title ) : base( title ) + { + Title = String.Format( "the {0} {1}", title, Female ? "guildmistress" : "guildmaster" ); + } + + public BaseGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/BaseHealer.cs b/Scripts/Mobiles/Base/BaseHealer.cs new file mode 100644 index 0000000..b22ee17 --- /dev/null +++ b/Scripts/Mobiles/Base/BaseHealer.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Misc; +using Server.Items; +using Server.Gumps; + +namespace Server.Mobiles +{ + public abstract class BaseHealer : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override bool IsActiveVendor{ get{ return false; } } + + public override void InitSBInfo() + { + } + + public BaseHealer() : base( null ) + { + Invulnerable = true; + + SetStr( 304, 400 ); + SetDex( 102, 150 ); + SetInt( 204, 300 ); + + SetDamage( 10, 23 ); + + SetSkill( SkillName.Concentration, 82.0, 100.0 ); + SetSkill( SkillName.Healing, 75.0, 97.5 ); + SetSkill( SkillName.Magery, 82.0, 100.0 ); + SetSkill( SkillName.MagicResist, 82.0, 100.0 ); + SetSkill( SkillName.Tactics, 82.0, 100.0 ); + } + + public virtual bool CheckResurrect( Mobile m ) + { + return true; + } + + private DateTime m_NextResurrect; + private static TimeSpan ResurrectDelay = TimeSpan.FromSeconds( 2.0 ); + + public virtual void OfferResurrection( Mobile m ) + { + Direction = GetDirectionTo( m ); + + m.PlaySound(0x1F2); + m.FixedEffect( 0x376A, 10, 16 ); + + m.CloseGump( typeof( ResurrectGump ) ); + m.SendGump( new ResurrectGump( m, ResurrectMessage.Healer ) ); + } + + public virtual void OfferHeal( PlayerMobile m ) + { + Direction = GetDirectionTo( m ); + + Say( 501228 ); // I can do no more for you at this time. + } + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( !m.Frozen && DateTime.Now >= m_NextResurrect && InRange( m, 4 ) && !InRange( oldLocation, 4 ) && InLOS( m ) ) + { + if ( !m.Alive ) + { + m_NextResurrect = DateTime.Now + ResurrectDelay; + + if ( m.Map == null || !m.Map.CanFit( m.Location, 16, false, false ) ) + { + m.SendLocalizedMessage( 502391 ); // Thou can not be resurrected there! + } + else if ( CheckResurrect( m ) ) + { + OfferResurrection( m ); + } + } + } + } + + public BaseHealer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + if ( !Invulnerable ) + { + AI = AIType.AI_Mage; + ActiveSpeed = 0.2; + PassiveSpeed = 0.8; + RangePerception = BaseCreature.DefaultRangePerception; + FightMode = FightMode.Aggressor; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/BaseVendor.cs b/Scripts/Mobiles/Base/BaseVendor.cs new file mode 100644 index 0000000..748d5ff --- /dev/null +++ b/Scripts/Mobiles/Base/BaseVendor.cs @@ -0,0 +1,1375 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Items; +using Server.Network; +using Server.ContextMenus; +using Server.Mobiles; +using Server.Misc; +using Server.Regions; + +namespace Server.Mobiles +{ + public abstract class BaseVendor : BaseCreature, IVendor + { + public DateTime m_NextAction; + public DateTime NextAction{ get{ return m_NextAction; } set{ m_NextAction = value; } } + + private const int MaxSell = 500; + + protected abstract List SBInfos { get; } + + private ArrayList m_ArmorBuyInfo = new ArrayList(); + private ArrayList m_ArmorSellInfo = new ArrayList(); + + private DateTime m_LastRestock; + + public override bool CanTeach { get { return true; } } + + public override bool BardImmune { get { return true; } } + + public override bool PlayerRangeSensitive { get { return true; } } + + public virtual bool IsActiveVendor { get { return true; } } + public virtual bool IsActiveBuyer { get { return IsActiveVendor; } } // response to vendor SELL + public virtual bool IsActiveSeller { get { return IsActiveVendor; } } // repsonse to vendor BUY + + public virtual NpcGuild NpcGuild { get { return NpcGuild.None; } } + + public override bool ShowFameTitle { get { return false; } } + + public BaseVendor( string title ): base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 ) + { + LoadSBInfo(); + Invulnerable = true; + Clan = Clan.Citizen; + + SetStr( 100 ); + SetDex( 100 ); + SetInt( 100 ); + + this.Title = title; + SpeechHue = Utility.RandomSpeechHue(); + InitBody(); + InitOutfit(); + + Container pack; + //these packs MUST exist, or the client will crash when the packets are sent + pack = new Backpack(); + pack.Layer = Layer.ShopBuy; + pack.Movable = false; + pack.Visible = false; + AddItem( pack ); + + pack = new Backpack(); + pack.Layer = Layer.ShopResale; + pack.Movable = false; + pack.Visible = false; + AddItem( pack ); + + m_LastRestock = DateTime.Now; + } + + public BaseVendor( Serial serial ): base( serial ) + { + } + + public DateTime LastRestock + { + get + { + return m_LastRestock; + } + set + { + m_LastRestock = value; + } + } + + public virtual TimeSpan RestockDelay + { + get + { + return TimeSpan.FromHours( 1 ); + } + } + + public Container BuyPack + { + get + { + Container pack = FindItemOnLayer( Layer.ShopBuy ) as Container; + + if ( pack == null ) + { + pack = new Backpack(); + pack.Layer = Layer.ShopBuy; + pack.Visible = false; + AddItem( pack ); + } + + return pack; + } + } + + public abstract void InitSBInfo(); + + protected void LoadSBInfo() + { + m_LastRestock = DateTime.Now; + + for ( int i = 0; i < m_ArmorBuyInfo.Count; ++i ) + { + GenericBuyInfo buy = m_ArmorBuyInfo[i] as GenericBuyInfo; + + if ( buy != null ) + buy.DeleteDisplayEntity(); + } + + SBInfos.Clear(); + + InitSBInfo(); + + m_ArmorBuyInfo.Clear(); + m_ArmorSellInfo.Clear(); + + for ( int i = 0; i < SBInfos.Count; i++ ) + { + SBInfo sbInfo = (SBInfo)SBInfos[i]; + m_ArmorBuyInfo.AddRange( sbInfo.BuyInfo ); + m_ArmorSellInfo.Add( sbInfo.SellInfo ); + } + } + + public virtual bool GetGender() + { + return Utility.RandomBool(); + } + + public virtual void InitBody() + { + InitStats( 100, 100, 25 ); + + SpeechHue = Utility.RandomSpeechHue(); + Hue = Utility.RandomSkinHue(); + + if ( Invulnerable ) + NameHue = 0x35; + + int hair = Utility.RandomHairHue(); + + if ( this.Female = Utility.RandomBool() || this is Gypsy ) + { + Female = true; + Body = 0x191; + Name = NameList.RandomName( "female" ); + } + else + { + Body = 0x190; + Name = NameList.RandomName( "male" ); + if ( Utility.RandomBool() ){ Utility.AssignRandomFacialHair( this, hair ); } + } + + Utility.AssignRandomHair( this, hair ); + } + + public static void DoJokes( Mobile m ) + { + int act = Utility.Random( 28 ); + if ( m is PlayerMobile ){ act = Utility.Random( 22 ); } + switch ( act ) + { + case 0: m.Say("Why did the king go to the dentist? To get his teeth crowned."); break; + case 1: m.Say("When a knight in armor was killed in battle, what sign did they put on his grave? Rust in peace!"); break; + case 2: m.Say("What do you call a mosquito in a tin suit? A bite in shining armor."); break; + case 3: m.Say("There are many castles in the world, but who is strong enough to move one? Any chess player"); break; + case 4: m.Say("What king was famous because he spent so many nights at his Round Table writing books? King Author!"); break; + case 5: m.Say("How do you find a princess? You follow the foot prince."); break; + case 6: m.Say("Why were the early days called the dark ages? Because there were so many knights!"); break; + case 7: m.Say("Why did Arthur have a round table? So no one could corner him!"); break; + case 8: m.Say("Who invented King Arthur's round table? Sir Cumference!"); break; + case 9: m.Say("Why did the knight run about shouting for a tin opener? He had a bee in his suit of armor!"); break; + case 10: m.Say("What was Camelot famous for? It's knight life!"); break; + case 11: m.Say("What did the toad say when the princess would not kiss him? Warts the matter with you?"); break; + case 12: m.Say("What do you call the young royal who keeps falling down? Prince Harming!"); break; + case 13: m.Say("What do you call a cat that flies over the castle wall? A cat-a-pult!"); break; + case 14: m.Say("What game do the fish play in the moat? Trout or dare!"); break; + case 15: m.Say("What did the fish say to the other when the horse fell in the moat? See horse!"); break; + case 16: m.Say("What do you call an angry princess just awakened from a long sleep? Slapping beauty!"); break; + case 17: m.Say("How did the prince get into the castle when the drawbridge was broken? He used a rowmoat!"); break; + case 18: m.Say("How did the girl dragon win the beauty contest? She was the beast of the show!"); break; + case 19: m.Say("Why did the dinosaur live longer than the dragon? Because it didn’t smoke!"); break; + case 20: m.Say("What did the dragon say when it saw the Knight? 'Not more tinned food!'"); break; + case 21: m.Say("What do you do with a green dragon? Wait until it ripens!"); break; + case 22: m.PlaySound( m.Female ? 780 : 1051 ); m.Say( "*claps*" ); break; + case 23: m.Say( "*bows*" ); m.Animate( 32, 5, 1, true, false, 0 ); break; + case 24: m.PlaySound( m.Female ? 794 : 1066 ); m.Say( "*giggles*" ); break; + case 25: m.PlaySound( m.Female ? 801 : 1073 ); m.Say( "*laughs*" ); break; + case 26: m.PlaySound( 792 ); m.Say( "*sticks out tongue*" ); break; + case 27: m.PlaySound( m.Female ? 783 : 1054 ); m.Say( "*woohoo!*" ); break; + }; + + if ( act < 22 && Utility.RandomBool() ) + { + switch ( Utility.Random( 6 )) + { + case 0: m.PlaySound( m.Female ? 780 : 1051 ); break; + case 1: m.Animate( 32, 5, 1, true, false, 0 ); break; + case 2: m.PlaySound( m.Female ? 794 : 1066 ); break; + case 3: m.PlaySound( m.Female ? 801 : 1073 ); break; + case 4: m.PlaySound( 792 ); break; + case 5: m.PlaySound( m.Female ? 783 : 1054 ); break; + }; + } + } + + public override void OnThink() + { + bool ran = false; + if ( DateTime.Now >= m_NextAction && ( this is Jester || ( this.Location == this.Home && this.RangeHome == 0 ) ) ) + { + int range = 1; + if ( this is Fisherman || this is Ranger || this is Bowyer ) + range = 7; + + m_NextAction = (DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 5, 15 ) ) ); + + if ( this is Jester ) + { + DoJokes( this ); + m_NextAction = (DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 25, 35 ) ) ); + ran = true; + } + else + { + foreach ( Item act in this.GetItemsInRange( range ) ) + { + if ( act.Map == this.Map && act is ArcheryButte && ( this is Ranger || this is Bowyer ) && ( act.X == X || act.Y == Y ) ) + { + Server.Items.Actions.EquipVendor( this, "bow" ); + ran = true; + if ( this is Bowyer ){ this.Title = "the archer"; } + act.OnDoubleClick( this ); + } + else if ( act.Map == this.Map && act is TrainingDummy && this is Fighter ) + { + ran = true; + act.OnDoubleClick( this ); + } + else if ( act.Map == this.Map && act is Actions ) + { + int z = Z - act.Z; + if ( z < 0 ) + z = act.Z - Z; + + if ( z < 15 ) + { + ran = true; + act.OnDoubleClick( this ); + } + } + } + } + + if ( !ran ) + m_NextAction = (DateTime.Now).AddYears(1); + } + + base.OnThink(); + } + + public override void OnAfterSpawn() + { + } + + protected override void OnMapChange( Map oldMap ) + { + base.OnMapChange( oldMap ); + + LoadSBInfo(); + } + + public virtual void CapitalizeTitle() + { + string title = this.Title; + + if ( title == null ) + return; + + string[] split = title.Split( ' ' ); + + for ( int i = 0; i < split.Length; ++i ) + { + if ( Insensitive.Equals( split[i], "the" ) ) + continue; + + if ( split[i].Length > 1 ) + split[i] = Char.ToUpper( split[i][0] ) + split[i].Substring( 1 ); + else if ( split[i].Length > 0 ) + split[i] = Char.ToUpper( split[i][0] ).ToString(); + } + + this.Title = String.Join( " ", split ); + } + + public virtual void InitOutfit() + { + switch ( Utility.Random( 5 ) ) + { + case 0: AddItem( new FancyShirt( Utility.RandomHue() ) ); break; + case 1: AddItem( new Doublet( Utility.RandomHue() ) ); break; + case 2: AddItem( new Shirt( Utility.RandomHue() ) ); break; + case 3: AddItem( new Tunic( Utility.RandomHue() ) ); break; + case 4: AddItem( new Surcoat( Utility.RandomHue() ) ); break; + } + + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new Shoes( Utility.RandomNeutralHue() ) ); break; + case 1: AddItem( new Boots( Utility.RandomNeutralHue() ) ); break; + case 2: AddItem( new Sandals( Utility.RandomNeutralHue() ) ); break; + case 3: AddItem( new ThighBoots( Utility.RandomNeutralHue() ) ); break; + } + + int hairHue = Utility.RandomHairHue(); + + Utility.AssignRandomHair( this, hairHue ); + Utility.AssignRandomFacialHair( this, hairHue ); + + if ( Female ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new LongPants( Utility.RandomNeutralHue() ) ); break; + case 1: AddItem( new ShortPants( Utility.RandomNeutralHue() ) ); break; + case 2: AddItem( new Kilt( Utility.RandomNeutralHue() ) ); break; + case 3: AddItem( new Skirt( Utility.RandomHue() ) ); break; + } + } + else + { + switch ( Utility.Random( 3 ) ) + { + case 0: AddItem( new LongPants( Utility.RandomNeutralHue() ) ); break; + case 1: AddItem( new ShortPants( Utility.RandomNeutralHue() ) ); break; + case 2: AddItem( new Kilt( Utility.RandomNeutralHue() ) ); break; + } + } + + int robeHue = Utility.RandomHue(); + + if ( this is BaseHealer || + this is Mage || + this is Scribe || + this is Alchemist || + this is MageGuildmaster || + this is LibraryGuildmaster || + this is HealerGuildmaster || + this is AlchemistGuildmaster || + Utility.RandomMinMax(1,10) == 1 ) + { + if ( Female ) + { + switch ( Utility.Random( 3 ) ) + { + case 0: AddItem( new Robe( robeHue ) ); break; + case 1: AddItem( new PlainDress( robeHue ) ); break; + case 2: AddItem( new FancyDress( robeHue ) ); break; + } + } + else + { + AddItem( new Robe( robeHue ) ); + } + } + + if ( this is Mage || this is MageGuildmaster ) + AddItem( new WizardsHat( robeHue ) ); + else if ( this is Farmer && Utility.RandomBool() ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new WideBrimHat( Utility.RandomHue() ) ); break; + case 1: AddItem( new FloppyHat( Utility.RandomHue() ) ); break; + case 2: AddItem( new StrawHat() ); break; + case 3: AddItem( new TallStrawHat() ); break; + } + } + else if ( this is Blacksmith || this is Carpenter || this is IronWorker || this is Armorer || this is Weaponsmith || this is CarpentryGuildmaster || this is BlacksmithGuildmaster || this is Bowyer ) + { + switch ( Utility.Random( 2 ) ) + { + case 0: AddItem( new Bandana( Utility.RandomHue() ) ); break; + case 1: AddItem( new SkullCap( Utility.RandomHue() ) ); break; + } + } + } + + public virtual void Restock() + { + m_LastRestock = DateTime.Now; + + IBuyItemInfo[] buyInfo = this.GetBuyInfo(); + + foreach ( IBuyItemInfo bii in buyInfo ) + bii.OnRestock(); + } + + private static TimeSpan InventoryDecayTime = TimeSpan.FromHours( 1.0 ); + + public virtual void VendorBuy( Mobile from ) + { + if ( !IsActiveSeller ) + return; + + if ( !from.CheckAlive() ) + return; + + if ( !CheckVendorAccess( from ) ) + { + Say( 501522 ); // I shall not deal with scum like thee! + return; + } + + if ( DateTime.Now - m_LastRestock > RestockDelay ) + Restock(); + + int count = 0; + List list; + IBuyItemInfo[] buyInfo = this.GetBuyInfo(); + IShopSellInfo[] sellInfo = this.GetSellInfo(); + + list = new List( buyInfo.Length ); + Container cont = this.BuyPack; + + List opls = null; + + for ( int idx = 0; idx < buyInfo.Length; idx++ ) + { + IBuyItemInfo buyItem = (IBuyItemInfo)buyInfo[idx]; + + if ( buyItem.Amount <= 0 || list.Count >= 250 ) + continue; + + // NOTE: Only GBI supported; if you use another implementation of IBuyItemInfo, this will crash + GenericBuyInfo gbi = (GenericBuyInfo)buyItem; + IEntity disp = gbi.GetDisplayEntity(); + + list.Add( new BuyItemState( buyItem.Name, cont.Serial, disp == null ? (Serial)0x7FC0FFEE : disp.Serial, buyItem.Price, buyItem.Amount, buyItem.ItemID, buyItem.Hue ) ); + count++; + + if ( opls == null ) { + opls = new List(); + } + + if ( disp is Item ) { + opls.Add( ( ( Item ) disp ).PropertyList ); + } else if ( disp is Mobile ) { + opls.Add( ( ( Mobile ) disp ).PropertyList ); + } + } + + List playerItems = cont.Items; + + for ( int i = playerItems.Count - 1; i >= 0; --i ) + { + if ( i >= playerItems.Count ) + continue; + + Item item = playerItems[i]; + + if ( ( item.LastMoved + InventoryDecayTime ) <= DateTime.Now ) + item.Delete(); + } + + for ( int i = 0; i < playerItems.Count; ++i ) + { + Item item = playerItems[i]; + + int price = 0; + string name = null; + + foreach ( IShopSellInfo ssi in sellInfo ) + { + if ( ssi.IsSellable( item ) ) + { + price = ssi.GetBuyPriceFor( item ); + name = ssi.GetNameFor( item ); + break; + } + } + + if ( name != null && list.Count < 250 ) + { + list.Add( new BuyItemState( name, cont.Serial, item.Serial, price, item.Amount, item.ItemID, item.Hue ) ); + count++; + + if ( opls == null ) { + opls = new List(); + } + + opls.Add( item.PropertyList ); + } + } + + //one (not all) of the packets uses a byte to describe number of items in the list. Osi = dumb. + //if ( list.Count > 255 ) + // Console.WriteLine( "Vendor Warning: Vendor {0} has more than 255 buy items, may cause client errors!", this ); + + if ( list.Count > 0 ) + { + list.Sort( new BuyItemStateComparer() ); + + SendPacksTo( from ); + + NetState ns = from.NetState; + + if ( ns == null ) + return; + + if ( ns.ContainerGridLines ) + from.Send( new VendorBuyContent6017( list ) ); + else + from.Send( new VendorBuyContent( list ) ); + + from.Send( new VendorBuyList( this, list ) ); + + if ( ns.HighSeas ) + from.Send( new DisplayBuyListHS( this ) ); + else + from.Send( new DisplayBuyList( this ) ); + + from.Send( new MobileStatusExtended( from ) );//make sure their gold amount is sent + + if ( opls != null ) { + for ( int i = 0; i < opls.Count; ++i ) { + from.Send( opls[i] ); + } + } + + SayTo( from, 500186 ); // Greetings. Have a look around. + } + } + + public virtual void SendPacksTo( Mobile from ) + { + Item pack = FindItemOnLayer( Layer.ShopBuy ); + + if ( pack == null ) + { + pack = new Backpack(); + pack.Layer = Layer.ShopBuy; + pack.Movable = false; + pack.Visible = false; + AddItem( pack ); + } + + from.Send( new EquipUpdate( pack ) ); + + pack = FindItemOnLayer( Layer.ShopSell ); + + if ( pack != null ) + from.Send( new EquipUpdate( pack ) ); + + pack = FindItemOnLayer( Layer.ShopResale ); + + if ( pack == null ) + { + pack = new Backpack(); + pack.Layer = Layer.ShopResale; + pack.Movable = false; + pack.Visible = false; + AddItem( pack ); + } + + from.Send( new EquipUpdate( pack ) ); + } + + public virtual void VendorSell( Mobile from ) + { + if ( !IsActiveBuyer ) + return; + + if ( !from.CheckAlive() ) + return; + + if ( !CheckVendorAccess( from ) ) + { + Say( 501522 ); // I shall not deal with scum like thee! + return; + } + + Container pack = from.Backpack; + + if ( pack != null ) + { + IShopSellInfo[] info = GetSellInfo(); + + Hashtable table = new Hashtable(); + + foreach ( IShopSellInfo ssi in info ) + { + Item[] items = pack.FindItemsByType( ssi.Types ); + + foreach ( Item item in items ) + { + if ( item is Container && ( (Container)item ).Items.Count != 0 ) + continue; + + if ( item.IsStandardLoot() && item.Movable && ssi.IsSellable( item ) ) + table[item] = new SellItemState( item, ssi.GetSellPriceFor( item ), ssi.GetNameFor( item ) ); + } + } + + if ( table.Count > 0 ) + { + SendPacksTo( from ); + + from.Send( new VendorSellList( this, table ) ); + } + else + { + Say( true, "You have nothing I would be interested in." ); + } + } + } + + private GenericBuyInfo LookupDisplayObject( object obj ) + { + IBuyItemInfo[] buyInfo = this.GetBuyInfo(); + + for ( int i = 0; i < buyInfo.Length; ++i ) { + GenericBuyInfo gbi = (GenericBuyInfo)buyInfo[i]; + + if ( gbi.GetDisplayEntity() == obj ) + return gbi; + } + + return null; + } + + private void ProcessSinglePurchase( BuyItemResponse buy, IBuyItemInfo bii, List validBuy, ref int controlSlots, ref bool fullPurchase, ref int totalCost ) + { + int amount = buy.Amount; + + if ( amount > bii.Amount ) + amount = bii.Amount; + + if ( amount <= 0 ) + return; + + int slots = bii.ControlSlots * amount; + + if ( controlSlots >= slots ) + { + controlSlots -= slots; + } + else + { + fullPurchase = false; + return; + } + + totalCost += bii.Price * amount; + validBuy.Add( buy ); + } + + public void GemSet( Item item ) + { + if ( item is BaseJewel ) + ((BaseJewel)item).GemType = GemType.None; + } + + private void ProcessValidPurchase( int amount, IBuyItemInfo bii, Mobile buyer, Container cont ) + { + if ( amount > bii.Amount ) + amount = bii.Amount; + + if ( amount < 1 ) + return; + + bii.Amount -= amount; + + IEntity o = bii.GetEntity(); + + if ( o is Item ) + { + Item item = (Item)o; + + if ( item.Stackable ) + { + item.Amount = amount; + + GemSet( item ); + + if ( cont == null || !cont.TryDropItem( buyer, item, false ) ) + item.MoveToWorld( buyer.Location, buyer.Map ); + } + else + { + item.Amount = 1; + + GemSet( item ); + + if ( cont == null || !cont.TryDropItem( buyer, item, false ) ) + item.MoveToWorld( buyer.Location, buyer.Map ); + + for ( int i = 1; i < amount; i++ ) + { + item = bii.GetEntity() as Item; + + if ( item != null ) + { + item.Amount = 1; + + GemSet( item ); + + if ( cont == null || !cont.TryDropItem( buyer, item, false ) ) + item.MoveToWorld( buyer.Location, buyer.Map ); + } + } + } + } + else if ( o is Mobile ) + { + Mobile m = (Mobile)o; + + m.Direction = (Direction)Utility.Random( 8 ); + m.MoveToWorld( buyer.Location, buyer.Map ); + m.PlaySound( m.GetIdleSound() ); + + if ( m is BaseCreature ) + ( (BaseCreature)m ).SetControlMaster( buyer ); + + for ( int i = 1; i < amount; ++i ) + { + m = bii.GetEntity() as Mobile; + + if ( m != null ) + { + m.Direction = (Direction)Utility.Random( 8 ); + m.MoveToWorld( buyer.Location, buyer.Map ); + + if ( m is BaseCreature ) + ( (BaseCreature)m ).SetControlMaster( buyer ); + } + } + } + } + + public virtual bool OnBuyItems( Mobile buyer, List list ) + { + if ( !IsActiveSeller ) + return false; + + if ( !buyer.CheckAlive() ) + return false; + + if ( !CheckVendorAccess( buyer ) ) + { + Say( 501522 ); // I shall not deal with scum like thee! + return false; + } + + IBuyItemInfo[] buyInfo = this.GetBuyInfo(); + IShopSellInfo[] info = GetSellInfo(); + int totalCost = 0; + List validBuy = new List( list.Count ); + Container cont; + bool bought = false; + bool fromInn = false; + bool fullPurchase = true; + int controlSlots = buyer.FollowersMax - buyer.Followers; + + foreach ( BuyItemResponse buy in list ) + { + Serial ser = buy.Serial; + int amount = buy.Amount; + + if ( ser.IsItem ) + { + Item item = World.FindItem( ser ); + + if ( item == null ) + continue; + + GenericBuyInfo gbi = LookupDisplayObject( item ); + + if ( gbi != null ) + { + ProcessSinglePurchase( buy, gbi, validBuy, ref controlSlots, ref fullPurchase, ref totalCost ); + } + else if ( item != this.BuyPack && item.IsChildOf( this.BuyPack ) ) + { + if ( amount > item.Amount ) + amount = item.Amount; + + if ( amount <= 0 ) + continue; + + foreach ( IShopSellInfo ssi in info ) + { + if ( ssi.IsSellable( item ) ) + { + if ( ssi.IsResellable( item ) ) + { + totalCost += ssi.GetBuyPriceFor( item ) * amount; + validBuy.Add( buy ); + break; + } + } + } + } + } + else if ( ser.IsMobile ) + { + Mobile mob = World.FindMobile( ser ); + + if ( mob == null ) + continue; + + GenericBuyInfo gbi = LookupDisplayObject( mob ); + + if ( gbi != null ) + ProcessSinglePurchase( buy, gbi, validBuy, ref controlSlots, ref fullPurchase, ref totalCost ); + } + }//foreach + + if ( fullPurchase && validBuy.Count == 0 ) + SayTo( buyer, 500190 ); // Thou hast bought nothing! + else if ( validBuy.Count == 0 ) + SayTo( buyer, 500187 ); // Your order cannot be fulfilled, please try again. + + if ( validBuy.Count == 0 ) + return false; + + bought = ( buyer.AccessLevel >= AccessLevel.GameMaster ); + + cont = buyer.Backpack; + if ( !bought && cont != null ) + { + if ( cont.ConsumeTotal( typeof( Gold ), totalCost ) ) + bought = true; + else if ( totalCost < 2000 ) + SayTo( buyer, 500192 );//Begging thy pardon, but thou casnt afford that. + } + + if ( !bought && totalCost >= 2000 ) + { + cont = buyer.FindInnNoCreate(); + if ( cont != null && cont.ConsumeTotal( typeof( Gold ), totalCost ) ) + { + bought = true; + fromInn = true; + } + else + { + SayTo( buyer, 500191 ); //Begging thy pardon, but thy inn chest lacks these funds. + } + } + + if ( !bought ) + return false; + else + buyer.PlaySound( 0x32 ); + + cont = buyer.Backpack; + if ( cont == null ) + cont = buyer.InnBox; + + foreach ( BuyItemResponse buy in validBuy ) + { + Serial ser = buy.Serial; + int amount = buy.Amount; + + if ( amount < 1 ) + continue; + + if ( ser.IsItem ) + { + Item item = World.FindItem( ser ); + + if ( item == null ) + continue; + + GenericBuyInfo gbi = LookupDisplayObject( item ); + + if ( gbi != null ) + { + ProcessValidPurchase( amount, gbi, buyer, cont ); + } + else + { + if ( amount > item.Amount ) + amount = item.Amount; + + foreach ( IShopSellInfo ssi in info ) + { + if ( ssi.IsSellable( item ) ) + { + if ( ssi.IsResellable( item ) ) + { + Item buyItem; + + if ( amount >= item.Amount ) + { + buyItem = item; + } + else + { + buyItem = Mobile.LiftItemDupe( item, item.Amount - amount ); + + if ( buyItem == null ) + buyItem = item; + } + + GemSet( buyItem ); + + if ( cont == null || !cont.TryDropItem( buyer, buyItem, false ) ) + buyItem.MoveToWorld( buyer.Location, buyer.Map ); + + break; + } + } + } + } + } + else if ( ser.IsMobile ) + { + Mobile mob = World.FindMobile( ser ); + + if ( mob == null ) + continue; + + GenericBuyInfo gbi = LookupDisplayObject( mob ); + + if ( gbi != null ) + ProcessValidPurchase( amount, gbi, buyer, cont ); + } + }//foreach + + if ( fullPurchase ) + { + if ( buyer.AccessLevel >= AccessLevel.GameMaster ) + SayTo( buyer, true, "I would not presume to charge thee anything. Here are the goods you requested." ); + else if ( fromInn ) + SayTo( buyer, true, "The total of thy purchase is {0} gold, which has been withdrawn from your inn chest. My thanks for the patronage.", totalCost ); + else + SayTo( buyer, true, "The total of thy purchase is {0} gold. My thanks for the patronage.", totalCost ); + } + else + { + if ( buyer.AccessLevel >= AccessLevel.GameMaster ) + SayTo( buyer, true, "I would not presume to charge thee anything. Unfortunately, I could not sell you all the goods you requested." ); + else if ( fromInn ) + SayTo( buyer, true, "The total of thy purchase is {0} gold, which has been withdrawn from your inn chest. My thanks for the patronage. Unfortunately, I could not sell you all the goods you requested.", totalCost ); + else + SayTo( buyer, true, "The total of thy purchase is {0} gold. My thanks for the patronage. Unfortunately, I could not sell you all the goods you requested.", totalCost ); + } + + return true; + } + + public virtual bool CheckVendorAccess( Mobile from ) + { + PlayerMobile pm = (PlayerMobile)from; + + if ( this is BaseGuildmaster && this.NpcGuild == pm.NpcGuild && ( this.NpcGuild == NpcGuild.AssassinsGuild || this.NpcGuild == NpcGuild.ThievesGuild ) ) // THESE GUILDS DEAL WITH GUILD MEMBERS NO MATTER WHAT + return true; + + if ( from.Criminal && !Server.Misc.NotorietyHandlers.CriminalTolerated( from ) ) + return false; + + if ( from.Kills >= 5 && !Server.Misc.NotorietyHandlers.CriminalTolerated( from ) ) + return false; + + if ( this is BaseGuildmaster && this.NpcGuild != pm.NpcGuild ) // ONLY GUILD MEMBERS CAN BUY FROM GUILD MASTERS + return false; + + return true; + } + + public virtual bool OnSellItems( Mobile seller, List list ) + { + if ( !IsActiveBuyer ) + return false; + + if ( !seller.CheckAlive() ) + return false; + + if ( !CheckVendorAccess( seller ) ) + { + Say( 501522 ); // I shall not deal with scum like thee! + return false; + } + + seller.PlaySound( 0x32 ); + + IShopSellInfo[] info = GetSellInfo(); + IBuyItemInfo[] buyInfo = this.GetBuyInfo(); + int GiveGold = 0; + int Sold = 0; + Container cont; + + foreach ( SellItemResponse resp in list ) + { + if ( resp.Item.RootParent != seller || resp.Amount <= 0 || !resp.Item.IsStandardLoot() || !resp.Item.Movable || ( resp.Item is Container && ( (Container)resp.Item ).Items.Count != 0 ) ) + continue; + + foreach ( IShopSellInfo ssi in info ) + { + if ( ssi.IsSellable( resp.Item ) ) + { + Sold++; + break; + } + } + } + + if ( Sold > MaxSell ) + { + SayTo( seller, true, "You may only sell {0} items at a time!", MaxSell ); + return false; + } + else if ( Sold == 0 ) + { + return true; + } + + foreach ( SellItemResponse resp in list ) + { + if ( resp.Item.RootParent != seller || resp.Amount <= 0 || !resp.Item.IsStandardLoot() || !resp.Item.Movable || ( resp.Item is Container && ( (Container)resp.Item ).Items.Count != 0 ) ) + continue; + + foreach ( IShopSellInfo ssi in info ) + { + if ( ssi.IsSellable( resp.Item ) ) + { + int amount = resp.Amount; + + if ( amount > resp.Item.Amount ) + amount = resp.Item.Amount; + + if ( ssi.IsResellable( resp.Item ) ) + { + bool found = false; + + foreach ( IBuyItemInfo bii in buyInfo ) + { + if ( bii.Restock( resp.Item, amount ) ) + { + resp.Item.Consume( amount ); + found = true; + + break; + } + } + + if ( !found ) + { + cont = this.BuyPack; + + if ( amount < resp.Item.Amount ) + { + Item item = Mobile.LiftItemDupe( resp.Item, resp.Item.Amount - amount ); + + if ( item != null ) + { + item.SetLastMoved(); + cont.DropItem( item ); + } + else + { + resp.Item.SetLastMoved(); + cont.DropItem( resp.Item ); + } + } + else + { + resp.Item.SetLastMoved(); + cont.DropItem( resp.Item ); + } + } + } + else + { + if ( amount < resp.Item.Amount ) + resp.Item.Amount -= amount; + else + resp.Item.Delete(); + } + + GiveGold += ssi.GetSellPriceFor( resp.Item ) * amount; + break; + } + } + } + + if ( GiveGold > 0 ) + { + while ( GiveGold > 60000 ) + { + seller.AddToBackpack( new Gold( 60000 ) ); + GiveGold -= 60000; + } + + seller.AddToBackpack( new Gold( GiveGold ) ); + + seller.PlaySound( 0x0037 );//Gold dropping sound + } + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)1 ); // version + + List sbInfos = this.SBInfos; + + for ( int i = 0; sbInfos != null && i < sbInfos.Count; ++i ) + { + SBInfo sbInfo = sbInfos[i]; + List buyInfo = sbInfo.BuyInfo; + + for ( int j = 0; buyInfo != null && j < buyInfo.Count; ++j ) + { + GenericBuyInfo gbi = (GenericBuyInfo)buyInfo[j]; + + int maxAmount = gbi.MaxAmount; + int doubled = 0; + + switch ( maxAmount ) + { + case 40: doubled = 1; break; + case 80: doubled = 2; break; + case 160: doubled = 3; break; + case 320: doubled = 4; break; + case 640: doubled = 5; break; + case 999: doubled = 6; break; + } + + if ( doubled > 0 ) + { + writer.WriteEncodedInt( 1 + ( ( j * sbInfos.Count ) + i ) ); + writer.WriteEncodedInt( doubled ); + } + } + } + + writer.WriteEncodedInt( 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + LoadSBInfo(); + + List sbInfos = this.SBInfos; + + switch ( version ) + { + case 1: + { + int index; + + while ( ( index = reader.ReadEncodedInt() ) > 0 ) + { + int doubled = reader.ReadEncodedInt(); + + if ( sbInfos != null ) + { + index -= 1; + int sbInfoIndex = index % sbInfos.Count; + int buyInfoIndex = index / sbInfos.Count; + + if ( sbInfoIndex >= 0 && sbInfoIndex < sbInfos.Count ) + { + SBInfo sbInfo = sbInfos[sbInfoIndex]; + List buyInfo = sbInfo.BuyInfo; + + if ( buyInfo != null && buyInfoIndex >= 0 && buyInfoIndex < buyInfo.Count ) + { + GenericBuyInfo gbi = (GenericBuyInfo)buyInfo[buyInfoIndex]; + + int amount = 20; + + switch ( doubled ) + { + case 1: amount = 40; break; + case 2: amount = 80; break; + case 3: amount = 160; break; + case 4: amount = 320; break; + case 5: amount = 640; break; + case 6: amount = 999; break; + } + + gbi.Amount = gbi.MaxAmount = amount; + } + } + } + } + + break; + } + } + } + + public void Speak() + { + switch( Utility.Random( 8 ) ) + { + case 0: + PlaySound( Female ? 797 : 1069 ); + // hey + break; + case 1: + PlaySound( Female ? 778 : 1049 ); + // ah + break; + case 2: + PlaySound( Female ? 799 : 1071 ); + // huh + break; + case 3: + PlaySound( Female ? 803 : 1075 ); + // oh + break; + case 4: + PlaySound( Female ? 811 : 1085 ); + // oooh + break; + case 5: + PlaySound( Female ? 816 : 1090 ); + // sigh + break; + } + } + + public override void AddCustomContextEntries( Mobile from, List list ) + { + if ( from.Alive && IsActiveVendor ) + { + if ( IsActiveSeller ) + list.Add( new VendorBuyEntry( from, this ) ); + + if ( IsActiveBuyer ) + list.Add( new VendorSellEntry( from, this ) ); + } + + base.AddCustomContextEntries( from, list ); + } + + public virtual IShopSellInfo[] GetSellInfo() + { + return (IShopSellInfo[])m_ArmorSellInfo.ToArray( typeof( IShopSellInfo ) ); + } + + public virtual IBuyItemInfo[] GetBuyInfo() + { + return (IBuyItemInfo[])m_ArmorBuyInfo.ToArray( typeof( IBuyItemInfo ) ); + } + } +} + +namespace Server.ContextMenus +{ + public class VendorBuyEntry : ContextMenuEntry + { + private BaseVendor m_Vendor; + + public VendorBuyEntry( Mobile from, BaseVendor vendor ) + : base( 6103, 8 ) + { + m_Vendor = vendor; + Enabled = vendor.CheckVendorAccess( from ); + } + + public override void OnClick() + { + m_Vendor.Speak(); + m_Vendor.VendorBuy( this.Owner.From ); + } + } + + public class VendorSellEntry : ContextMenuEntry + { + private BaseVendor m_Vendor; + + public VendorSellEntry( Mobile from, BaseVendor vendor ) + : base( 6104, 8 ) + { + m_Vendor = vendor; + Enabled = vendor.CheckVendorAccess( from ); + } + + public override void OnClick() + { + m_Vendor.VendorSell( this.Owner.From ); + } + } +} + +namespace Server +{ + public interface IShopSellInfo + { + //get display name for an item + string GetNameFor( Item item ); + + //get price for an item which the player is selling + int GetSellPriceFor( Item item ); + + //get price for an item which the player is buying + int GetBuyPriceFor( Item item ); + + //can we sell this item to this vendor? + bool IsSellable( Item item ); + + //What do we sell? + Type[] Types { get; } + + //does the vendor resell this item? + bool IsResellable( Item item ); + } + + public interface IBuyItemInfo + { + //get a new instance of an object (we just bought it) + IEntity GetEntity(); + + int ControlSlots { get; } + + int PriceScalar { get; set; } + + //display price of the item + int Price { get; } + + //display name of the item + string Name { get; } + + //display hue + int Hue { get; } + + //display id + int ItemID { get; } + + //amount in stock + int Amount { get; set; } + + //max amount in stock + int MaxAmount { get; } + + //Attempt to restock with item, (return true if restock sucessful) + bool Restock( Item item, int amount ); + + //called when its time for the whole shop to restock + void OnRestock(); + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/BeverageBuy.cs b/Scripts/Mobiles/Base/BeverageBuy.cs new file mode 100644 index 0000000..f82e32b --- /dev/null +++ b/Scripts/Mobiles/Base/BeverageBuy.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections; +using Server.Items; + +namespace Server.Mobiles +{ + public class BeverageBuyInfo : GenericBuyInfo + { + private BeverageType m_Content; + + public override bool CanCacheDisplay{ get{ return false; } } + + public BeverageBuyInfo( Type type, BeverageType content, int price, int amount, int itemID, int hue ) : this( null, type, content, price, amount, itemID, hue ) + { + } + + public BeverageBuyInfo( string name, Type type, BeverageType content, int price, int amount, int itemID, int hue ) : base( name, type, price, amount, itemID, hue ) + { + m_Content = content; + + if ( type == typeof( Pitcher ) ) + Name = (1048128 + (int)content).ToString(); + else if ( type == typeof( BeverageBottle ) ) + Name = (1042959 + (int)content).ToString(); + else if ( type == typeof( Jug ) ) + Name = (1042965 + (int)content).ToString(); + } + + public override IEntity GetEntity() + { + return (IEntity)Activator.CreateInstance( Type, new object[]{ m_Content } ); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/GenericBuy.cs b/Scripts/Mobiles/Base/GenericBuy.cs new file mode 100644 index 0000000..505ef70 --- /dev/null +++ b/Scripts/Mobiles/Base/GenericBuy.cs @@ -0,0 +1,347 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Network; + +namespace Server.Mobiles +{ + public class GenericBuyInfo : IBuyItemInfo + { + private class DisplayCache : Container + { + private static DisplayCache m_Cache; + + public static DisplayCache Cache { + get { + if ( m_Cache == null || m_Cache.Deleted ) + m_Cache = new DisplayCache(); + + return m_Cache; + } + } + + private Dictionary m_Table; + private List m_Mobiles; + + public DisplayCache() : base( 0 ) + { + m_Table = new Dictionary(); + m_Mobiles = new List(); + } + + public IEntity Lookup( Type key ) + { + IEntity e = null; + m_Table.TryGetValue( key, out e ); + return e; + } + + public void Store( Type key, IEntity obj, bool cache ) + { + if ( cache ) + m_Table[key] = obj; + + if ( obj is Item ) + { + Item sell = (Item)obj; + + if ( sell is BaseJewel ) + ((BaseJewel)sell).GemType = GemType.None; + + AddItem( (Item)obj ); + } + else if ( obj is Mobile ) + m_Mobiles.Add( (Mobile)obj ); + } + + public DisplayCache( Serial serial ) : base( serial ) + { + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + for ( int i = 0; i < m_Mobiles.Count; ++i ) + m_Mobiles[i].Delete(); + + m_Mobiles.Clear(); + + for ( int i = Items.Count - 1; i >= 0; --i ) + if ( i < Items.Count ) + Items[i].Delete(); + + if ( m_Cache == this ) + m_Cache = null; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Mobiles ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + m_Mobiles = reader.ReadStrongMobileList(); + + for ( int i = 0; i < m_Mobiles.Count; ++i ) + m_Mobiles[i].Delete(); + + m_Mobiles.Clear(); + + for ( int i = Items.Count - 1; i >= 0; --i ) + if ( i < Items.Count ) + Items[i].Delete(); + + if ( m_Cache == null ) + m_Cache = this; + else + Delete(); + + m_Table = new Dictionary(); + } + } + + private Type m_Type; + private string m_Name; + private int m_Price; + private int m_MaxAmount, m_Amount; + private int m_ItemID; + private int m_Hue; + private object[] m_Args; + private IEntity m_DisplayEntity; + + public virtual int ControlSlots{ get{ return 0; } } + + public virtual bool CanCacheDisplay{ get{ return false; } } //return ( m_Args == null || m_Args.Length == 0 ); } + + private bool IsDeleted( IEntity obj ) + { + if ( obj is Item ) + return ((Item)obj).Deleted; + else if ( obj is Mobile ) + return ((Mobile)obj).Deleted; + + return false; + } + + public void DeleteDisplayEntity() + { + if ( m_DisplayEntity == null ) + return; + + m_DisplayEntity.Delete(); + m_DisplayEntity = null; + } + + public IEntity GetDisplayEntity() + { + if ( m_DisplayEntity != null && !IsDeleted( m_DisplayEntity ) ) + return m_DisplayEntity; + + bool canCache = this.CanCacheDisplay; + + if ( canCache ) + m_DisplayEntity = DisplayCache.Cache.Lookup( m_Type ); + + if ( m_DisplayEntity == null || IsDeleted( m_DisplayEntity ) ) + m_DisplayEntity = GetEntity(); + + DisplayCache.Cache.Store( m_Type, m_DisplayEntity, canCache ); + + return m_DisplayEntity; + } + + public Type Type + { + get{ return m_Type; } + set{ m_Type = value; } + } + + public string Name + { + get{ return m_Name; } + set{ m_Name = value; } + } + + public int DefaultPrice{ get{ return m_PriceScalar; } } + + private int m_PriceScalar; + + public int PriceScalar + { + get{ return m_PriceScalar; } + set{ m_PriceScalar = value; } + } + + public int Price + { + get + { + if ( m_PriceScalar != 0 ) + { + if ( m_Price > 5000000 ) + { + long price = m_Price; + + price *= m_PriceScalar; + price += 50; + price /= 100; + + if ( price > int.MaxValue ) + price = int.MaxValue; + + return (int)price; + } + + return ( ((m_Price * m_PriceScalar) + 50) / 100 ); + } + + return m_Price; + } + set{ m_Price = value; } + } + + public int ItemID + { + get{ return m_ItemID; } + set{ m_ItemID = value; } + } + + public int Hue + { + get{ return m_Hue; } + set{ m_Hue = value; } + } + + public int Amount + { + get{ return m_Amount; } + set{ if ( value < 0 ) value = 0; m_Amount = value; } + } + + public int MaxAmount + { + get{ return m_MaxAmount; } + set{ m_MaxAmount = value; } + } + + public object[] Args + { + get{ return m_Args; } + set{ m_Args = value; } + } + + public GenericBuyInfo( Type type, int price, int amount, int itemID, int hue ) : this( null, type, price, amount, itemID, hue, null ) + { + } + + public GenericBuyInfo( string name, Type type, int price, int amount, int itemID, int hue ) : this( name, type, price, amount, itemID, hue, null ) + { + } + + public GenericBuyInfo( Type type, int price, int amount, int itemID, int hue, object[] args ) : this( null, type, price, amount, itemID, hue, args ) + { + } + + public GenericBuyInfo( string name, Type type, int price, int amount, int itemID, int hue, object[] args ) + { + if ( amount > 10 ) + amount = Utility.RandomMinMax( (amount-5), (amount+10) ); + + m_Type = type; + m_Price = price; + m_MaxAmount = m_Amount = amount; + m_ItemID = itemID; + m_Hue = hue; + m_Args = args; + + if ( name == null ) + m_Name = itemID < 0x4000 ? (1020000 + itemID).ToString() : (1078872 + itemID).ToString(); + else + m_Name = name; + } + + //get a new instance of an object (we just bought it) + public virtual IEntity GetEntity() + { + if ( m_Args == null || m_Args.Length == 0 ) + return (IEntity)Activator.CreateInstance( m_Type ); + + return (IEntity)Activator.CreateInstance( m_Type, m_Args ); + //return (Item)Activator.CreateInstance( m_Type ); + } + + //Attempt to restock with item, (return true if restock sucessful) + public bool Restock( Item item, int amount ) + { + return false; + /*if ( item.GetType() == m_Type ) + { + if ( item is BaseWeapon ) + { + BaseWeapon weapon = (BaseWeapon)item; + + if ( weapon.Quality == WeaponQuality.Low || weapon.Quality == WeaponQuality.Exceptional || (int)weapon.DurabilityLevel > 0 || (int)weapon.DamageLevel > 0 || (int)weapon.AccuracyLevel > 0 ) + return false; + } + + if ( item is BaseArmor ) + { + BaseArmor armor = (BaseArmor)item; + + if ( armor.Quality == ArmorQuality.Low || armor.Quality == ArmorQuality.Exceptional || (int)armor.Durability > 0 || (int)armor.ProtectionLevel > 0 ) + return false; + } + + m_Amount += amount; + + return true; + } + else + { + return false; + }*/ + } + + public void OnRestock() + { + if ( m_Amount <= 0 ) + { + m_MaxAmount *= 2; + + if ( m_MaxAmount >= 999 ) + m_MaxAmount = 999; + } + else + { + /* NOTE: According to UO.com, the quantity is halved if the item does not reach 0 + * Here we implement differently: the quantity is halved only if less than half + * of the maximum quantity was bought. That is, if more than half is sold, then + * there's clearly a demand and we should not cut down on the stock. + */ + + int halfQuantity = m_MaxAmount; + + if ( halfQuantity >= 999 ) + halfQuantity = 640; + else if ( halfQuantity > 20 ) + halfQuantity /= 2; + + if ( m_Amount >= halfQuantity ) + m_MaxAmount = halfQuantity; + } + + m_Amount = m_MaxAmount; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/GenericSell.cs b/Scripts/Mobiles/Base/GenericSell.cs new file mode 100644 index 0000000..5fd0701 --- /dev/null +++ b/Scripts/Mobiles/Base/GenericSell.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class GenericSellInfo : IShopSellInfo + { + private Dictionary m_Table = new Dictionary(); + private Type[] m_Types; + + public GenericSellInfo() + { + } + + public void Add( Type type, int price ) + { + m_Table[type] = price; + m_Types = null; + } + + public int GetSellPriceFor( Item item ) + { + int price = 0; + m_Table.TryGetValue( item.GetType(), out price ); + + if ( item is BaseArmor ) { + BaseArmor armor = (BaseArmor)item; + + if ( armor.Quality == ArmorQuality.Low ) + price = (int)( price * 0.60 ); + else if ( armor.Quality == ArmorQuality.Exceptional ) + price = (int)( price * 1.25 ); + + price += 100 * (int)armor.Durability; + + price += 100 * (int)armor.ProtectionLevel; + + if ( price < 1 ) + price = 1; + } + else if ( item is BaseWeapon ) { + BaseWeapon weapon = (BaseWeapon)item; + + if ( weapon.Quality == WeaponQuality.Low ) + price = (int)( price * 0.60 ); + else if ( weapon.Quality == WeaponQuality.Exceptional ) + price = (int)( price * 1.25 ); + + price += 100 * (int)weapon.DurabilityLevel; + + price += 100 * (int)weapon.DamageLevel; + + if ( price < 1 ) + price = 1; + } + else if ( item is BaseJewel ) { + BaseJewel jewel = (BaseJewel)item; + + if ( jewel.GemType == GemType.StarSapphire ) + price += 62; + else if ( jewel.GemType == GemType.Emerald ) + price += 50; + else if ( jewel.GemType == GemType.Sapphire ) + price += 50; + else if ( jewel.GemType == GemType.Ruby ) + price += 37; + else if ( jewel.GemType == GemType.Citrine ) + price += 25; + else if ( jewel.GemType == GemType.Amethyst ) + price += 50; + else if ( jewel.GemType == GemType.Tourmaline ) + price += 47; + else if ( jewel.GemType == GemType.Amber ) + price += 25; + else if ( jewel.GemType == GemType.Diamond ) + price += 100; + } + else if ( item is BaseBeverage ) { + int price1 = price, price2 = price; + + if ( item is Pitcher ) + { price1 = 3; price2 = 5; } + else if ( item is BeverageBottle ) + { price1 = 3; price2 = 3; } + else if ( item is Jug ) + { price1 = 6; price2 = 6; } + + BaseBeverage bev = (BaseBeverage)item; + + if ( bev.IsEmpty || bev.Content == BeverageType.Milk ) + price = price1; + else + price = price2; + } + + return price; + } + + public int GetBuyPriceFor( Item item ) + { + return (int)( 1.90 * GetSellPriceFor( item ) ); + } + + public Type[] Types + { + get + { + if ( m_Types == null ) + { + m_Types = new Type[m_Table.Keys.Count]; + m_Table.Keys.CopyTo( m_Types, 0 ); + } + + return m_Types; + } + } + + public string GetNameFor( Item item ) + { + if ( item.Name != null ) + return item.Name; + else + return item.LabelNumber.ToString(); + } + + public bool IsSellable( Item item ) + { + //if ( item.Hue != 0 ) + //return false; + + return IsInList( item.GetType() ); + } + + public bool IsResellable( Item item ) + { + //if ( item.Hue != 0 ) + //return false; + + return IsInList( item.GetType() ); + } + + public bool IsInList( Type type ) + { + return m_Table.ContainsKey( type ); + } + } +} diff --git a/Scripts/Mobiles/Base/PlayerBarkeeper.cs b/Scripts/Mobiles/Base/PlayerBarkeeper.cs new file mode 100644 index 0000000..860c64e --- /dev/null +++ b/Scripts/Mobiles/Base/PlayerBarkeeper.cs @@ -0,0 +1,1064 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Gumps; +using Server.Prompts; +using Server.Network; +using Server.ContextMenus; +using Server.Multis; + +namespace Server.Mobiles +{ + public class ChangeRumorMessagePrompt : Prompt + { + private PlayerBarkeeper m_Barkeeper; + private int m_RumorIndex; + + public ChangeRumorMessagePrompt( PlayerBarkeeper barkeeper, int rumorIndex ) + { + m_Barkeeper = barkeeper; + m_RumorIndex = rumorIndex; + } + + public override void OnCancel( Mobile from ) + { + OnResponse( from, "" ); + } + + public override void OnResponse( Mobile from, string text ) + { + if( text.Length > 130 ) + text = text.Substring( 0, 130 ); + + m_Barkeeper.EndChangeRumor( from, m_RumorIndex, text ); + } + } + + public class ChangeRumorKeywordPrompt : Prompt + { + private PlayerBarkeeper m_Barkeeper; + private int m_RumorIndex; + + public ChangeRumorKeywordPrompt( PlayerBarkeeper barkeeper, int rumorIndex ) + { + m_Barkeeper = barkeeper; + m_RumorIndex = rumorIndex; + } + + public override void OnCancel( Mobile from ) + { + OnResponse( from, "" ); + } + + public override void OnResponse( Mobile from, string text ) + { + if( text.Length > 130 ) + text = text.Substring( 0, 130 ); + + m_Barkeeper.EndChangeKeyword( from, m_RumorIndex, text ); + } + } + + public class ChangeTipMessagePrompt : Prompt + { + private PlayerBarkeeper m_Barkeeper; + + public ChangeTipMessagePrompt( PlayerBarkeeper barkeeper ) + { + m_Barkeeper = barkeeper; + } + + public override void OnCancel( Mobile from ) + { + OnResponse( from, "" ); + } + + public override void OnResponse( Mobile from, string text ) + { + if ( text.Length > 130 ) + text = text.Substring( 0, 130 ); + + m_Barkeeper.EndChangeTip( from, text ); + } + } + + public class BarkeeperRumor + { + private string m_Message; + private string m_Keyword; + + public string Message{ get{ return m_Message; } set{ m_Message = value; } } + public string Keyword{ get{ return m_Keyword; } set{ m_Keyword = value; } } + + public BarkeeperRumor( string message, string keyword ) + { + m_Message = message; + m_Keyword = keyword; + } + + public static BarkeeperRumor Deserialize( GenericReader reader ) + { + if ( !reader.ReadBool() ) + return null; + + return new BarkeeperRumor( reader.ReadString(), reader.ReadString() ); + } + + public static void Serialize( GenericWriter writer, BarkeeperRumor rumor ) + { + if ( rumor == null ) + { + writer.Write( false ); + } + else + { + writer.Write( true ); + writer.Write( rumor.m_Message ); + writer.Write( rumor.m_Keyword ); + } + } + } + + public class ManageBarkeeperEntry : ContextMenuEntry + { + private Mobile m_From; + private PlayerBarkeeper m_Barkeeper; + + public ManageBarkeeperEntry( Mobile from, PlayerBarkeeper barkeeper ) : base( 6151, 12 ) + { + m_From = from; + m_Barkeeper = barkeeper; + } + + public override void OnClick() + { + m_Barkeeper.BeginManagement( m_From ); + } + } + + public class PlayerBarkeeper : BaseVendor + { + private Mobile m_Owner; + private BaseHouse m_House; + private string m_TipMessage; + + private BarkeeperRumor[] m_Rumors; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Owner + { + get{ return m_Owner; } + set{ m_Owner = value; } + } + + public BaseHouse House + { + get{ return m_House; } + set + { + if ( m_House != null ) + m_House.PlayerBarkeepers.Remove( this ); + + if ( value != null ) + value.PlayerBarkeepers.Add( this ); + + m_House = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string TipMessage + { + get{ return m_TipMessage; } + set{ m_TipMessage = value; } + } + + public override bool IsActiveBuyer{ get{ return false; } } + public override bool IsActiveSeller{ get{ return ( m_SBInfos.Count > 0 ); } } + + public override bool DisallowAllMoves{ get{ return true; } } + public override bool NoHouseRestrictions{ get{ return true; } } + + public BarkeeperRumor[] Rumors{ get{ return m_Rumors; } } + + public override bool GetGender() + { + return false; // always starts as male + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new HalfApron() ); + + Container pack = this.Backpack; + + if ( pack != null ) + pack.Delete(); + } + + public override void InitBody() + { + base.InitBody(); + + Hue = 0x83F4; // hue is not random + + Container pack = this.Backpack; + + if ( pack != null ) + pack.Delete(); + } + + public PlayerBarkeeper( Mobile owner, BaseHouse house ) : base( "the barkeeper" ) + { + m_Owner = owner; + House = house; + m_Rumors = new BarkeeperRumor[3]; + + LoadSBInfo(); + } + + public override bool HandlesOnSpeech(Mobile from) + { + if ( InRange( from, 3 ) ) + return true; + + return base.HandlesOnSpeech (from); + } + + private Timer m_NewsTimer; + + private void ShoutNews_Callback( object state ) + { + object[] states = (object[])state; + TownCrierEntry tce = (TownCrierEntry)states[0]; + int index = (int)states[1]; + + if ( index < 0 || index >= tce.Lines.Length ) + { + if ( m_NewsTimer != null ) + m_NewsTimer.Stop(); + + m_NewsTimer = null; + } + else + { + PublicOverheadMessage( MessageType.Regular, 0x3B2, false, tce.Lines[index] ); + states[1] = index + 1; + } + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + House = null; + } + + public override bool OnBeforeDeath() + { + if ( !base.OnBeforeDeath() ) + return false; + + Item shoes = this.FindItemOnLayer( Layer.Shoes ); + + if ( shoes is Sandals ) + shoes.Hue = 0; + + return true; + } + + public override void OnSpeech( SpeechEventArgs e ) + { + base.OnSpeech( e ); + + if ( !e.Handled && InRange( e.Mobile, 3 ) ) + { + if ( m_NewsTimer == null && e.HasKeyword( 0x30 ) ) // *news* + { + TownCrierEntry tce = GlobalTownCrierEntryList.Instance.GetRandomEntry(); + + if ( tce == null ) + { + PublicOverheadMessage( MessageType.Regular, 0x3B2, 1005643 ); // I have no news at this time. + } + else + { + m_NewsTimer = Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 3.0 ), new TimerStateCallback( ShoutNews_Callback ), new object[]{ tce, 0 } ); + + PublicOverheadMessage( MessageType.Regular, 0x3B2, 502978 ); // Some of the latest news! + } + } + + for ( int i = 0; i < m_Rumors.Length; ++i ) + { + BarkeeperRumor rumor = m_Rumors[i]; + + if ( rumor == null ) + continue; + + string keyword = rumor.Keyword; + + if ( keyword == null || (keyword = keyword.Trim()).Length == 0 ) + continue; + + if ( Insensitive.Equals( keyword, e.Speech ) ) + { + string message = rumor.Message; + + if ( message == null || (message = message.Trim()).Length == 0 ) + continue; + + PublicOverheadMessage( MessageType.Regular, 0x3B2, false, message ); + } + } + } + } + + public override bool CheckGold( Mobile from, Item dropped ) + { + if ( dropped is Gold ) + { + Gold g = (Gold)dropped; + + if ( g.Amount > 50 ) + { + PrivateOverheadMessage( MessageType.Regular, 0x3B2, false, "I cannot accept so large a tip!", from.NetState ); + } + else + { + string tip = m_TipMessage; + + if ( tip == null || (tip = tip.Trim()).Length == 0 ) + { + PrivateOverheadMessage( MessageType.Regular, 0x3B2, false, "It would not be fair of me to take your money and not offer you information in return.", from.NetState ); + } + else + { + Direction = GetDirectionTo( from ); + PrivateOverheadMessage( MessageType.Regular, 0x3B2, false, tip, from.NetState ); + + g.Delete(); + return true; + } + } + } + + return false; + } + + public bool IsOwner( Mobile from ) + { + if ( from == null || from.Deleted || this.Deleted ) + return false; + + if ( from.AccessLevel > AccessLevel.GameMaster ) + return true; + + return ( m_Owner == from ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( IsOwner( from ) && from.InLOS( this ) ) + list.Add( new ManageBarkeeperEntry( from, this ) ); + } + + public void BeginManagement( Mobile from ) + { + if ( !IsOwner( from ) ) + return; + + from.SendGump( new BarkeeperGump( from, this ) ); + } + + public void Dismiss() + { + Delete(); + } + + public void BeginChangeRumor( Mobile from, int index ) + { + if ( index < 0 || index >= m_Rumors.Length ) + return; + + from.Prompt = new ChangeRumorMessagePrompt( this, index ); + PrivateOverheadMessage( MessageType.Regular, 0x3B2, false, "Say what news you would like me to tell our guests.", from.NetState ); + } + + public void EndChangeRumor( Mobile from, int index, string text ) + { + if ( index < 0 || index >= m_Rumors.Length ) + return; + + if ( m_Rumors[index] == null ) + m_Rumors[index] = new BarkeeperRumor( text, null ); + else + m_Rumors[index].Message = text; + + from.Prompt = new ChangeRumorKeywordPrompt( this, index ); + PrivateOverheadMessage( MessageType.Regular, 0x3B2, false, "What keyword should a guest say to me to get this news?", from.NetState ); + } + + public void EndChangeKeyword( Mobile from, int index, string text ) + { + if ( index < 0 || index >= m_Rumors.Length ) + return; + + if ( m_Rumors[index] == null ) + m_Rumors[index] = new BarkeeperRumor( null, text ); + else + m_Rumors[index].Keyword = text; + + PrivateOverheadMessage( MessageType.Regular, 0x3B2, false, "I'll pass on the message.", from.NetState ); + } + + public void RemoveRumor( Mobile from, int index ) + { + if ( index < 0 || index >= m_Rumors.Length ) + return; + + m_Rumors[index] = null; + } + + public void BeginChangeTip( Mobile from ) + { + from.Prompt = new ChangeTipMessagePrompt( this ); + PrivateOverheadMessage( MessageType.Regular, 0x3B2, false, "Say what you want me to tell guests when they give me a good tip.", from.NetState ); + } + + public void EndChangeTip( Mobile from, string text ) + { + m_TipMessage = text; + PrivateOverheadMessage( MessageType.Regular, 0x3B2, false, "I'll say that to anyone who gives me a good tip.", from.NetState ); + } + + public void RemoveTip( Mobile from ) + { + m_TipMessage = null; + } + + public void BeginChangeTitle( Mobile from ) + { + from.SendGump( new BarkeeperTitleGump( from, this ) ); + } + + public void EndChangeTitle( Mobile from, string title, bool vendor ) + { + this.Title = title; + + LoadSBInfo(); + } + + public void CancelChangeTitle( Mobile from ) + { + from.SendGump( new BarkeeperGump( from, this ) ); + } + + public void BeginChangeAppearance( Mobile from ) + { + from.CloseGump( typeof( PlayerVendorCustomizeGump ) ); + from.SendGump( new PlayerVendorCustomizeGump( this, from ) ); + } + + public void ChangeGender( Mobile from ) + { + Female = !Female; + + if ( Female ) + { + Body = 401; + Name = NameList.RandomName( "female" ); + + FacialHairItemID = 0; + } + else + { + Body = 400; + Name = NameList.RandomName( "male" ); + } + } + + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override void InitSBInfo() + { + if ( Title == "the waiter" || Title == "the barkeeper" || Title == "the baker" || Title == "the innkeeper" || Title == "the chef" ) + { + if ( m_SBInfos.Count == 0 ) + m_SBInfos.Add( new SBPlayerBarkeeper() ); + } + else + { + m_SBInfos.Clear(); + } + } + + public PlayerBarkeeper( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version; + + writer.Write( (Item) m_House ); + + writer.Write( (Mobile) m_Owner ); + + writer.WriteEncodedInt( (int) m_Rumors.Length ); + + for ( int i = 0; i < m_Rumors.Length; ++i ) + BarkeeperRumor.Serialize( writer, m_Rumors[i] ); + + writer.Write( (string) m_TipMessage ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + House = (BaseHouse) reader.ReadItem(); + + goto case 0; + } + case 0: + { + m_Owner = reader.ReadMobile(); + + m_Rumors = new BarkeeperRumor[reader.ReadEncodedInt()]; + + for ( int i = 0; i < m_Rumors.Length; ++i ) + m_Rumors[i] = BarkeeperRumor.Deserialize( reader ); + + m_TipMessage = reader.ReadString(); + + break; + } + } + + if ( version < 1 ) + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( UpgradeFromVersion0 ) ); + } + + private void UpgradeFromVersion0() + { + House = BaseHouse.FindHouseAt( this ); + } + } + + public class BarkeeperTitleGump : Gump + { + private Mobile m_From; + private PlayerBarkeeper m_Barkeeper; + + private class Entry + { + public string m_Description; + public string m_Title; + public bool m_Vendor; + + public Entry( string desc ) : this( desc, String.Format( "the {0}", desc.ToLower() ), false ) + { + } + + public Entry( string desc, bool vendor ) : this( desc, String.Format( "the {0}", desc.ToLower() ), vendor ) + { + } + + public Entry( string desc, string title, bool vendor ) + { + m_Description = desc; + m_Title = title; + m_Vendor = vendor; + } + } + + private static Entry[] m_Entries = new Entry[] + { + new Entry( "Alchemist" ), + new Entry( "Apothecary" ), + new Entry( "Artist" ), + new Entry( "Baker", true ), + new Entry( "Bard" ), + new Entry( "Barkeep", "the barkeeper", true ), + new Entry( "Beggar" ), + new Entry( "Blacksmith" ), + new Entry( "Bounty Hunter" ), + new Entry( "Brigand" ), + new Entry( "Butler" ), + new Entry( "Carpenter" ), + new Entry( "Chef", true ), + new Entry( "Commander" ), + new Entry( "Curator" ), + new Entry( "Drunkard" ), + new Entry( "Farmer" ), + new Entry( "Fisherman" ), + new Entry( "Gambler" ), + new Entry( "Gypsy" ), + new Entry( "Herald" ), + new Entry( "Herbalist" ), + new Entry( "Hermit" ), + new Entry( "Innkeeper", true ), + new Entry( "Jailor" ), + new Entry( "Jester" ), + new Entry( "Librarian" ), + new Entry( "Mage" ), + new Entry( "Mercenary" ), + new Entry( "Merchant" ), + new Entry( "Messenger" ), + new Entry( "Miner" ), + new Entry( "Monk" ), + new Entry( "Noble" ), + new Entry( "Paladin" ), + new Entry( "Peasant" ), + new Entry( "Pirate" ), + new Entry( "Prisoner" ), + new Entry( "Prophet" ), + new Entry( "Ranger" ), + new Entry( "Sage" ), + new Entry( "Sailor" ), + new Entry( "Scholar" ), + new Entry( "Scribe" ), + new Entry( "Sentry" ), + new Entry( "Servant" ), + new Entry( "Shepherd" ), + new Entry( "Soothsayer" ), + new Entry( "Stoic" ), + new Entry( "Storyteller" ), + new Entry( "Tailor" ), + new Entry( "Thief" ), + new Entry( "Tinker" ), + new Entry( "Town Crier" ), + new Entry( "Treasure Hunter" ), + new Entry( "Waiter", true ), + new Entry( "Warrior" ), + new Entry( "Watchman" ), + new Entry( "No Title", null, false ) + }; + + private void RenderBackground() + { + AddPage( 0 ); + + AddBackground( 30, 40, 585, 410, 5054 ); + + AddImage( 30, 40, 9251 ); + AddImage( 180, 40, 9251 ); + AddImage( 30, 40, 9253 ); + AddImage( 30, 130, 9253 ); + AddImage( 598, 40, 9255 ); + AddImage( 598, 130, 9255 ); + AddImage( 30, 433, 9257 ); + AddImage( 180, 433, 9257 ); + AddImage( 30, 40, 9250 ); + AddImage( 598, 40, 9252 ); + AddImage( 598, 433, 9258 ); + AddImage( 30, 433, 9256 ); + + AddItem( 30, 40, 6816 ); + AddItem( 30, 125, 6817 ); + AddItem( 30, 233, 6817 ); + AddItem( 30, 341, 6817 ); + AddItem( 580, 40, 6814 ); + AddItem( 588, 125, 6815 ); + AddItem( 588, 233, 6815 ); + AddItem( 588, 341, 6815 ); + + AddImage( 560, 20, 1417 ); + AddItem( 580, 44, 4033 ); + + AddBackground( 183, 25, 280, 30, 5054 ); + + AddImage( 180, 25, 10460 ); + AddImage( 434, 25, 10460 ); + + AddHtml( 223, 32, 200, 40, "BARKEEP CUSTOMIZATION MENU", false, false ); + AddBackground( 243, 433, 150, 30, 5054 ); + + AddImage( 240, 433, 10460 ); + AddImage( 375, 433, 10460 ); + + AddImage( 80, 398, 2151 ); + AddItem( 72, 406, 2543 ); + + AddHtml( 110, 412, 180, 25, "sells food and drink", false, false ); + } + + private void RenderPage( Entry[] entries, int page ) + { + AddPage( 1 + page ); + + AddHtml( 430, 70, 180, 25, String.Format( "Page {0} of {1}", page + 1, (entries.Length + 19) / 20 ), false, false ); + + for ( int count = 0, i = (page * 20); count < 20 && i < entries.Length; ++count, ++i ) + { + Entry entry = entries[i]; + + AddButton( 80 + ((count / 10) * 260), 100 + ((count % 10) * 30), 4005, 4007, 2 + i, GumpButtonType.Reply, 0 ); + AddHtml( 120 + ((count / 10) * 260), 100 + ((count % 10) * 30), entry.m_Vendor ? 148 : 180, 25, entry.m_Description, true, false ); + + if ( entry.m_Vendor ) + { + AddImage( 270 + ((count / 10) * 260), 98 + ((count % 10) * 30), 2151 ); + AddItem( 262 + ((count / 10) * 260), 106 + ((count % 10) * 30), 2543 ); + } + } + + AddButton( 340, 400, 4005, 4007, 0, GumpButtonType.Page, 1 + ((page + 1) % ((entries.Length + 19) / 20)) ); + AddHtml( 380, 400, 180, 25, "More Job Titles", false, false ); + + AddButton( 338, 437, 4014, 4016, 1, GumpButtonType.Reply, 0 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + } + + public BarkeeperTitleGump( Mobile from, PlayerBarkeeper barkeeper ) : base( 0, 0 ) + { + m_From = from; + m_Barkeeper = barkeeper; + + from.CloseGump( typeof( BarkeeperGump ) ); + from.CloseGump( typeof( BarkeeperTitleGump ) ); + + Entry[] entries = m_Entries; + + RenderBackground(); + + int pageCount = (entries.Length + 19) / 20; + + for ( int i = 0; i < pageCount; ++i ) + RenderPage( entries, i ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int buttonID = info.ButtonID; + + if ( buttonID > 0 ) + { + --buttonID; + + if ( buttonID > 0 ) + { + --buttonID; + + if ( buttonID >= 0 && buttonID < m_Entries.Length ) + m_Barkeeper.EndChangeTitle( m_From, m_Entries[buttonID].m_Title, m_Entries[buttonID].m_Vendor ); + } + else + { + m_Barkeeper.CancelChangeTitle( m_From ); + } + } + } + } + + public class BarkeeperGump : Gump + { + private Mobile m_From; + private PlayerBarkeeper m_Barkeeper; + + public void RenderBackground() + { + AddPage( 0 ); + + AddBackground( 30, 40, 585, 410, 5054 ); + + AddImage( 30, 40, 9251 ); + AddImage( 180, 40, 9251 ); + AddImage( 30, 40, 9253 ); + AddImage( 30, 130, 9253 ); + AddImage( 598, 40, 9255 ); + AddImage( 598, 130, 9255 ); + AddImage( 30, 433, 9257 ); + AddImage( 180, 433, 9257 ); + AddImage( 30, 40, 9250 ); + AddImage( 598, 40, 9252 ); + AddImage( 598, 433, 9258 ); + AddImage( 30, 433, 9256 ); + + AddItem( 30, 40, 6816 ); + AddItem( 30, 125, 6817 ); + AddItem( 30, 233, 6817 ); + AddItem( 30, 341, 6817 ); + AddItem( 580, 40, 6814 ); + AddItem( 588, 125, 6815 ); + AddItem( 588, 233, 6815 ); + AddItem( 588, 341, 6815 ); + + AddBackground( 183, 25, 280, 30, 5054 ); + + AddImage( 180, 25, 10460 ); + AddImage( 434, 25, 10460 ); + AddImage( 560, 20, 1417 ); + + AddHtml( 223, 32, 200, 40, "BARKEEP CUSTOMIZATION MENU", false, false ); + AddBackground( 243, 433, 150, 30, 5054 ); + + AddImage( 240, 433, 10460 ); + AddImage( 375, 433, 10460 ); + } + + public void RenderCategories() + { + AddPage( 1 ); + + AddButton( 130, 120, 4005, 4007, 0, GumpButtonType.Page, 2 ); + AddHtml( 170, 120, 200, 40, "Message Control", false, false ); + + AddButton( 130, 200, 4005, 4007, 0, GumpButtonType.Page, 8 ); + AddHtml( 170, 200, 200, 40, "Customize your barkeep", false, false ); + + AddButton( 130, 280, 4005, 4007, 0, GumpButtonType.Page, 3 ); + AddHtml( 170, 280, 200, 40, "Dismiss your barkeep", false, false ); + + AddButton( 338, 437, 4014, 4016, 0, GumpButtonType.Reply, 0 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + + AddItem( 574, 43, 5360 ); + } + + public void RenderMessageManagement() + { + AddPage( 2 ); + + AddButton( 130, 120, 4005, 4007, 0, GumpButtonType.Page, 4 ); + AddHtml( 170, 120, 380, 20, "Add or change a message and keyword", false, false ); + + AddButton( 130, 200, 4005, 4007, 0, GumpButtonType.Page, 5 ); + AddHtml( 170, 200, 380, 20, "Remove a message and keyword from your barkeep", false, false ); + + AddButton( 130, 280, 4005, 4007, 0, GumpButtonType.Page, 6 ); + AddHtml( 170, 280, 380, 20, "Add or change your barkeeper's tip message", false, false ); + + AddButton( 130, 360, 4005, 4007, 0, GumpButtonType.Page, 7 ); + AddHtml( 170, 360, 380, 20, "Delete your barkeepers tip message", false, false ); + + AddButton( 338, 437, 4014, 4016, 0, GumpButtonType.Page, 1 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + + AddItem( 580, 46, 4030 ); + } + + public void RenderDismissConfirmation() + { + AddPage( 3 ); + + AddHtml( 170, 160, 380, 20, "Are you sure you want to dismiss your barkeeper?", false, false ); + + AddButton( 205, 280, 4005, 4007, GetButtonID( 0, 0 ), GumpButtonType.Reply, 0 ); + AddHtml( 240, 280, 100, 20,@"Yes", false, false ); + + AddButton( 395, 280, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtml( 430, 280, 100, 20, "No", false, false ); + + AddButton( 338, 437, 4014, 4016, 0, GumpButtonType.Page, 1 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + + AddItem( 574, 43, 5360 ); + AddItem( 584, 34, 6579 ); + } + + public void RenderMessageManagement_Message_AddOrChange() + { + AddPage( 4 ); + + AddHtml( 250, 60, 500, 25, "Add or change a message", false, false ); + + BarkeeperRumor[] rumors = m_Barkeeper.Rumors; + + for ( int i = 0; i < rumors.Length; ++i ) + { + BarkeeperRumor rumor = rumors[i]; + + AddHtml( 100, 70 + (i * 120), 50, 20, "Message", false, false ); + AddHtml( 100, 90 + (i * 120), 450, 40, rumor == null ? "No current message" : rumor.Message, true, false ); + AddHtml( 100, 130 + (i * 120), 50, 20, "Keyword", false, false ); + AddHtml( 100, 150 + (i * 120), 450, 40, rumor == null ? "None" : rumor.Keyword, true, false ); + + AddButton( 60, 90 + (i * 120), 4005, 4007, GetButtonID( 1, i ), GumpButtonType.Reply, 0 ); + } + + AddButton( 338, 437, 4014, 4016, 0, GumpButtonType.Page, 2 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + + AddItem( 580, 46, 4030 ); + } + + public void RenderMessageManagement_Message_Remove() + { + AddPage( 5 ); + + AddHtml( 190, 60, 500, 25, "Choose the message you would like to remove", false, false ); + + BarkeeperRumor[] rumors = m_Barkeeper.Rumors; + + for ( int i = 0; i < rumors.Length; ++i ) + { + BarkeeperRumor rumor = rumors[i]; + + AddHtml( 100, 70 + (i * 120), 50, 20, "Message", false, false ); + AddHtml( 100, 90 + (i * 120), 450, 40, rumor == null ? "No current message" : rumor.Message, true, false ); + AddHtml( 100, 130 + (i * 120), 50, 20, "Keyword", false, false ); + AddHtml( 100, 150 + (i * 120), 450, 40, rumor == null ? "None" : rumor.Keyword, true, false ); + + AddButton( 60, 90 + (i * 120), 4005, 4007, GetButtonID( 2, i ), GumpButtonType.Reply, 0 ); + } + + AddButton( 338, 437, 4014, 4016, 0, GumpButtonType.Page, 2 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + + AddItem( 580, 46, 4030 ); + } + + private int GetButtonID( int type, int index ) + { + return 1 + (index * 6) + type; + } + + private void RenderMessageManagement_Tip_AddOrChange() + { + AddPage( 6 ); + + AddHtml( 250, 95, 500, 20, "Change this tip message", false, false ); + AddHtml( 100, 190, 50, 20, "Message", false, false ); + AddHtml( 100, 210, 450, 40, m_Barkeeper.TipMessage == null ? "No current message" : m_Barkeeper.TipMessage, true, false ); + + AddButton( 60, 210, 4005, 4007, GetButtonID( 3, 0 ), GumpButtonType.Reply, 0 ); + + AddButton( 338, 437, 4014, 4016, 0, GumpButtonType.Page, 2 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + + AddItem( 580, 46, 4030 ); + } + + private void RenderMessageManagement_Tip_Remove() + { + AddPage( 7 ); + + AddHtml( 250, 95, 500, 20, "Remove this tip message", false, false ); + AddHtml( 100, 190, 50, 20, "Message", false, false ); + AddHtml( 100, 210, 450, 40, m_Barkeeper.TipMessage == null ? "No current message" : m_Barkeeper.TipMessage, true, false ); + + AddButton( 60, 210, 4005, 4007, GetButtonID( 4, 0 ), GumpButtonType.Reply, 0 ); + + AddButton( 338, 437, 4014, 4016, 0, GumpButtonType.Page, 2 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + + AddItem( 580, 46, 4030 ); + } + + private void RenderAppearanceCategories() + { + AddPage( 8 ); + + AddButton( 130, 120, 4005, 4007, GetButtonID( 5, 0 ), GumpButtonType.Reply, 0 ); + AddHtml( 170, 120, 120, 20, "Title", false, false ); + + AddButton( 130, 200, 4005, 4007, GetButtonID( 5, 1 ), GumpButtonType.Reply, 0 ); + AddHtml( 170, 200, 120, 20, "Appearance", false, false ); + + AddButton( 130, 280, 4005, 4007, GetButtonID( 5, 2 ), GumpButtonType.Reply, 0 ); + AddHtml( 170, 280, 120, 20, "Male / Female", false, false ); + + AddButton( 338, 437, 4014, 4016, 0, GumpButtonType.Page, 1 ); + AddHtml( 290, 440, 35, 40, "Back", false, false ); + + AddItem( 580, 44, 4033 ); + } + + public BarkeeperGump( Mobile from, PlayerBarkeeper barkeeper ) : base( 0, 0 ) + { + m_From = from; + m_Barkeeper = barkeeper; + + from.CloseGump( typeof( BarkeeperGump ) ); + from.CloseGump( typeof( BarkeeperTitleGump ) ); + + RenderBackground(); + RenderCategories(); + RenderMessageManagement(); + RenderDismissConfirmation(); + RenderMessageManagement_Message_AddOrChange(); + RenderMessageManagement_Message_Remove(); + RenderMessageManagement_Tip_AddOrChange(); + RenderMessageManagement_Tip_Remove(); + RenderAppearanceCategories(); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( !m_Barkeeper.IsOwner( m_From ) ) + return; + + int index = info.ButtonID - 1; + + if ( index < 0 ) + return; + + int type = index % 6; + index /= 6; + + switch ( type ) + { + case 0: // Controls + { + switch ( index ) + { + case 0: // Dismiss + { + m_Barkeeper.Dismiss(); + break; + } + } + + break; + } + case 1: // Change message + { + m_Barkeeper.BeginChangeRumor( m_From, index ); + break; + } + case 2: // Remove message + { + m_Barkeeper.RemoveRumor( m_From, index ); + break; + } + case 3: // Change tip + { + m_Barkeeper.BeginChangeTip( m_From ); + break; + } + case 4: // Remove tip + { + m_Barkeeper.RemoveTip( m_From ); + break; + } + case 5: // Appearance category selection + { + switch ( index ) + { + case 0: m_Barkeeper.BeginChangeTitle( m_From ); break; + case 1: m_Barkeeper.BeginChangeAppearance( m_From ); break; + case 2: m_Barkeeper.ChangeGender( m_From ); break; + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/PlayerMobile.cs b/Scripts/Mobiles/Base/PlayerMobile.cs new file mode 100644 index 0000000..cb45fd2 --- /dev/null +++ b/Scripts/Mobiles/Base/PlayerMobile.cs @@ -0,0 +1,2173 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Items; +using Server.Gumps; +using Server.Multis; +using Server.Engines.Help; +using Server.ContextMenus; +using Server.Network; +using Server.Spells; +using Server.Spells.Fifth; +using Server.Spells.Seventh; +using Server.Targeting; +using Server.Regions; +using Server.Accounting; +using Server.Engines.Craft; +using Server.Engines.PartySystem; + +namespace Server.Mobiles +{ + #region Enums + [Flags] + public enum PlayerFlag // First 16 bits are reserved for default-distro use, start custom flags at 0x00010000 + { + None = 0x00000001, + KarmaLocked = 0x00000002, + UseOwnFilter = 0x00000004, + PagingSquelched = 0x00000008, + AcceptGuildInvites = 0x00000010 + } + + public enum NpcGuild + { + None, + AssassinsGuild, + BardsGuild, + MagesGuild, + RangersGuild, + ThievesGuild, + WarriorsGuild, + AlchemistsGuild, + BlacksmithsGuild, + CarpentryGuild, + HealersGuild, + LibrariansGuild, + MarinersGuild, + TailorsGuild, + TinkersGuild + } + + #endregion + + public class PlayerMobile : Mobile + { + private class CountAndTimeStamp + { + private int m_Count; + private DateTime m_Stamp; + + public CountAndTimeStamp() + { + } + + public DateTime TimeStamp { get{ return m_Stamp; } } + public int Count + { + get { return m_Count; } + set { m_Count = value; m_Stamp = DateTime.Now; } + } + } + + private DesignContext m_DesignContext; + + private NpcGuild m_NpcGuild; + private DateTime m_NpcGuildJoinTime; + private TimeSpan m_NpcGuildGameTime; + private DateTime m_Camp; + private DateTime m_Bedroll; + private PlayerFlag m_Flags; + private int m_StepsTaken; + private int m_Profession; + private bool m_IsStealthing; // IsStealthing should be moved to Server.Mobiles + private bool m_IgnoreMobiles; // IgnoreMobiles should be moved to Server.Mobiles + /* + * a value of zero means, that the mobile is not executing the spell. Otherwise, + * the value should match the BaseMana required + */ + + private DateTime m_LastOnline; + private Server.Guilds.RankDefinition m_GuildRank; + + private int m_GuildMessageHue, m_AllianceMessageHue; + + private List m_AllFollowers; + private List m_RecentlyReported; + + private int m_QuestLevel; + private string m_MapMarkers; + + #region Getters & Setters + + public List RecentlyReported + { + get + { + return m_RecentlyReported; + } + set + { + m_RecentlyReported = value; + } + } + + public List AllFollowers + { + get + { + if( m_AllFollowers == null ) + m_AllFollowers = new List(); + return m_AllFollowers; + } + } + + public Server.Guilds.RankDefinition GuildRank + { + get + { + if( this.AccessLevel >= AccessLevel.GameMaster ) + return Server.Guilds.RankDefinition.Leader; + else + return m_GuildRank; + } + set{ m_GuildRank = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int QuestLevel + { + get{ return m_QuestLevel; } + set{ m_QuestLevel = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string MapMarkers + { + get{ return m_MapMarkers; } + set{ m_MapMarkers = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int GuildMessageHue + { + get{ return m_GuildMessageHue; } + set{ m_GuildMessageHue = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int AllianceMessageHue + { + get { return m_AllianceMessageHue; } + set { m_AllianceMessageHue = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Profession + { + get{ return m_Profession; } + set{ m_Profession = value; } + } + + public int StepsTaken + { + get{ return m_StepsTaken; } + set{ m_StepsTaken = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsStealthing // IsStealthing should be moved to Server.Mobiles + { + get { return m_IsStealthing; } + set { m_IsStealthing = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IgnoreMobiles // IgnoreMobiles should be moved to Server.Mobiles + { + get + { + return m_IgnoreMobiles; + } + set + { + if( m_IgnoreMobiles != value ) + { + m_IgnoreMobiles = value; + Delta( MobileDelta.Flags ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public NpcGuild NpcGuild + { + get{ return m_NpcGuild; } + set{ m_NpcGuild = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime NpcGuildJoinTime + { + get{ return m_NpcGuildJoinTime; } + set{ m_NpcGuildJoinTime = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime LastOnline + { + get{ return m_LastOnline; } + set{ m_LastOnline = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan NpcGuildGameTime + { + get{ return m_NpcGuildGameTime; } + set{ m_NpcGuildGameTime = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime Camp + { + get{ return m_Camp; } + set{ m_Camp = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime Bedroll + { + get{ return m_Bedroll; } + set{ m_Bedroll = value; } + } + + #endregion + + #region PlayerFlags + public PlayerFlag Flags + { + get{ return m_Flags; } + set{ m_Flags = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool PagingSquelched + { + get{ return GetFlag( PlayerFlag.PagingSquelched ); } + set{ SetFlag( PlayerFlag.PagingSquelched, value ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool KarmaLocked + { + get{ return GetFlag( PlayerFlag.KarmaLocked ); } + set{ SetFlag( PlayerFlag.KarmaLocked, value ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool UseOwnFilter + { + get{ return GetFlag( PlayerFlag.UseOwnFilter ); } + set{ SetFlag( PlayerFlag.UseOwnFilter, value ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool AcceptGuildInvites + { + get{ return GetFlag( PlayerFlag.AcceptGuildInvites ); } + set{ SetFlag( PlayerFlag.AcceptGuildInvites, value ); } + } + + #endregion + + #region Auto Arrow Recovery + private Dictionary m_RecoverableAmmo = new Dictionary(); + + public Dictionary RecoverableAmmo + { + get { return m_RecoverableAmmo; } + } + + public void RecoverAmmo() + { + } + + #endregion + + private DateTime m_AnkhNextUse; + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime AnkhNextUse + { + get{ return m_AnkhNextUse; } + set{ m_AnkhNextUse = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan DisguiseTimeLeft + { + get{ return DisguiseTimers.TimeRemaining( this ); } + } + + private DateTime m_PeacedUntil; + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime PeacedUntil + { + get { return m_PeacedUntil; } + set { m_PeacedUntil = value; } + } + + public static Direction GetDirection4( Point3D from, Point3D to ) + { + int dx = from.X - to.X; + int dy = from.Y - to.Y; + + int rx = dx - dy; + int ry = dx + dy; + + Direction ret; + + if ( rx >= 0 && ry >= 0 ) + ret = Direction.West; + else if ( rx >= 0 && ry < 0 ) + ret = Direction.South; + else if ( rx < 0 && ry < 0 ) + ret = Direction.East; + else + ret = Direction.North; + + return ret; + } + + public override bool OnDroppedItemToWorld( Item item, Point3D location ) + { + if ( !base.OnDroppedItemToWorld( item, location ) ) + return false; + + IPooledEnumerable mobiles = Map.GetMobilesInRange( location, 0 ); + + foreach ( Mobile m in mobiles ) + { + if ( m.Z >= location.Z && m.Z < location.Z + 16 ) + { + mobiles.Free(); + return false; + } + } + + mobiles.Free(); + + BounceInfo bi = item.GetBounce(); + + if ( bi != null ) + { + Type type = item.GetType(); + + if ( type.IsDefined( typeof( FurnitureAttribute ), true ) || type.IsDefined( typeof( DynamicFlipingAttribute ), true ) ) + { + object[] objs = type.GetCustomAttributes( typeof( FlipableAttribute ), true ); + + if ( objs != null && objs.Length > 0 ) + { + FlipableAttribute fp = objs[0] as FlipableAttribute; + + if ( fp != null ) + { + int[] itemIDs = fp.ItemIDs; + + Point3D oldWorldLoc = bi.m_WorldLoc; + Point3D newWorldLoc = location; + + if ( oldWorldLoc.X != newWorldLoc.X || oldWorldLoc.Y != newWorldLoc.Y ) + { + Direction dir = GetDirection4( oldWorldLoc, newWorldLoc ); + + if ( itemIDs.Length == 2 ) + { + switch ( dir ) + { + case Direction.North: + case Direction.South: item.ItemID = itemIDs[0]; break; + case Direction.East: + case Direction.West: item.ItemID = itemIDs[1]; break; + } + } + else if ( itemIDs.Length == 4 ) + { + switch ( dir ) + { + case Direction.South: item.ItemID = itemIDs[0]; break; + case Direction.East: item.ItemID = itemIDs[1]; break; + case Direction.North: item.ItemID = itemIDs[2]; break; + case Direction.West: item.ItemID = itemIDs[3]; break; + } + } + } + } + } + } + } + + return true; + } + + public override int GetPacketFlags() + { + int flags = base.GetPacketFlags(); + + if ( m_IgnoreMobiles ) + flags |= 0x10; + + return flags; + } + + public override int GetOldPacketFlags() + { + int flags = base.GetOldPacketFlags(); + + if ( m_IgnoreMobiles ) + flags |= 0x10; + + return flags; + } + + public bool GetFlag( PlayerFlag flag ) + { + return ( (m_Flags & flag) != 0 ); + } + + public void SetFlag( PlayerFlag flag, bool value ) + { + if ( value ) + m_Flags |= flag; + else + m_Flags &= ~flag; + } + + public DesignContext DesignContext + { + get{ return m_DesignContext; } + set{ m_DesignContext = value; } + } + + public static void Initialize() + { + if ( FastwalkPrevention ) + PacketHandlers.RegisterThrottler( 0x02, new ThrottlePacketCallback( MovementThrottle_Callback ) ); + + EventSink.Login += new LoginEventHandler( OnLogin ); + EventSink.Logout += new LogoutEventHandler( OnLogout ); + EventSink.Connected += new ConnectedEventHandler( EventSink_Connected ); + EventSink.Disconnected += new DisconnectedEventHandler( EventSink_Disconnected ); + } + + protected override void OnRaceChange( Race oldRace ) + { + ValidateEquipment(); + } + + public override int MaxWeight { get { return (40 + (int)(3.5 * this.Str)); } } + + private int m_LastGlobalLight = -1, m_LastPersonalLight = -1; + + public override void OnNetStateChanged() + { + m_LastGlobalLight = -1; + m_LastPersonalLight = -1; + } + + public override void ComputeBaseLightLevels( out int global, out int personal ) + { + global = LightCycle.ComputeLevelFor( this ); + + personal = this.LightLevel; + } + + public override void CheckLightLevels( bool forceResend ) + { + NetState ns = this.NetState; + + if ( ns == null ) + return; + + int global, personal; + + ComputeLightLevels( out global, out personal ); + + if ( !forceResend ) + forceResend = ( global != m_LastGlobalLight || personal != m_LastPersonalLight ); + + if ( !forceResend ) + return; + + m_LastGlobalLight = global; + m_LastPersonalLight = personal; + + ns.Send( GlobalLightLevel.Instantiate( global ) ); + ns.Send( new PersonalLightLevel( this, personal ) ); + } + + private static void OnLogin( LoginEventArgs e ) + { + Mobile from = e.Mobile; + + if ( AccountHandler.LockdownLevel > AccessLevel.Player ) + { + string notice; + + Accounting.Account acct = from.Account as Accounting.Account; + + if ( acct == null || !acct.HasAccess( from.NetState ) ) + { + if ( from.AccessLevel == AccessLevel.Player ) + notice = "The server is currently under lockdown. No players are allowed to log in at this time."; + else + notice = "The server is currently under lockdown. You do not have sufficient access level to connect."; + + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( Disconnect ), from ); + } + else if ( from.AccessLevel >= AccessLevel.Administrator ) + { + notice = "The server is currently under lockdown. As you are an administrator, you may change this from the [Admin gump."; + } + else + { + notice = "The server is currently under lockdown. You have sufficient access level to connect."; + } + + from.SendGump( new NoticeGump( 1060637, 30720, notice, 0xFFC000, 300, 140, null, null ) ); + return; + } + } + + private bool m_NoDeltaRecursion; + + public void ValidateEquipment() + { + if ( m_NoDeltaRecursion || Map == null || Map == Map.Internal ) + return; + + if ( this.Items == null ) + return; + + m_NoDeltaRecursion = true; + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( ValidateEquipment_Sandbox ) ); + } + + private void ValidateEquipment_Sandbox() + { + try + { + if ( Map == null || Map == Map.Internal ) + return; + + List items = this.Items; + + if ( items == null ) + return; + + bool moved = false; + + int str = this.Str; + int dex = this.Dex; + int intel = this.Int; + + Mobile from = this; + + for ( int i = items.Count - 1; i >= 0; --i ) + { + if ( i >= items.Count ) + continue; + + Item item = items[i]; + + if ( item is BaseWeapon ) + { + BaseWeapon weapon = (BaseWeapon)item; + + bool drop = false; + + if( dex < weapon.DexRequirement ) + drop = true; + else if( str < Ultima.Scale( weapon.StrRequirement, 100 - weapon.GetLowerStatReq() ) ) + drop = true; + else if( intel < weapon.IntRequirement ) + drop = true; + + if ( drop ) + { + string name = weapon.Name; + + if ( name == null ) + name = String.Format( "#{0}", weapon.LabelNumber ); + + from.SendLocalizedMessage( 1062001, name ); // You can no longer wield your ~1_WEAPON~ + from.AddToBackpack( weapon ); + moved = true; + } + } + else if ( item is BaseArmor ) + { + BaseArmor armor = (BaseArmor)item; + + bool drop = false; + + if ( !armor.AllowMaleWearer && !from.Female && from.AccessLevel < AccessLevel.GameMaster ) + { + drop = true; + } + else if ( !armor.AllowFemaleWearer && from.Female && from.AccessLevel < AccessLevel.GameMaster ) + { + drop = true; + } + else + { + int strBonus = armor.ComputeStatBonus( StatType.Str ), strReq = armor.ComputeStatReq( StatType.Str ); + int dexBonus = armor.ComputeStatBonus( StatType.Dex ), dexReq = armor.ComputeStatReq( StatType.Dex ); + int intBonus = armor.ComputeStatBonus( StatType.Int ), intReq = armor.ComputeStatReq( StatType.Int ); + + if( dex < dexReq || (dex + dexBonus) < 1 ) + drop = true; + else if( str < strReq || (str + strBonus) < 1 ) + drop = true; + else if( intel < intReq || (intel + intBonus) < 1 ) + drop = true; + } + + if ( drop ) + { + string name = armor.Name; + + if ( name == null ) + name = String.Format( "#{0}", armor.LabelNumber ); + + if ( armor is BaseShield ) + from.SendLocalizedMessage( 1062003, name ); // You can no longer equip your ~1_SHIELD~ + else + from.SendLocalizedMessage( 1062002, name ); // You can no longer wear your ~1_ARMOR~ + + from.AddToBackpack( armor ); + moved = true; + } + } + else if ( item is BaseClothing ) + { + BaseClothing clothing = (BaseClothing)item; + + bool drop = false; + + if ( !clothing.AllowMaleWearer && !from.Female && from.AccessLevel < AccessLevel.GameMaster ) + { + drop = true; + } + else if ( !clothing.AllowFemaleWearer && from.Female && from.AccessLevel < AccessLevel.GameMaster ) + { + drop = true; + } + + if ( drop ) + { + string name = clothing.Name; + + if ( name == null ) + name = String.Format( "#{0}", clothing.LabelNumber ); + + from.SendLocalizedMessage( 1062002, name ); // You can no longer wear your ~1_ARMOR~ + + from.AddToBackpack( clothing ); + moved = true; + } + } + } + + if ( moved ) + from.SendLocalizedMessage( 500647 ); // Some equipment has been moved to your backpack. + } + catch ( Exception e ) + { + Console.WriteLine( e ); + } + finally + { + m_NoDeltaRecursion = false; + } + } + + public override void Delta( MobileDelta flag ) + { + base.Delta( flag ); + + if ( (flag & MobileDelta.Stat) != 0 ) + ValidateEquipment(); + } + + private static void Disconnect( object state ) + { + NetState ns = ((Mobile)state).NetState; + + if ( ns != null ) + ns.Dispose(); + } + + private static void OnLogout( LogoutEventArgs e ) + { + } + + private static void EventSink_Connected( ConnectedEventArgs e ) + { + PlayerMobile pm = e.Mobile as PlayerMobile; + + if ( pm != null ) + { + pm.m_SessionStart = DateTime.Now; + pm.LastOnline = DateTime.Now; + } + + DisguiseTimers.StartTimer( e.Mobile ); + } + + private static void EventSink_Disconnected( DisconnectedEventArgs e ) + { + Mobile from = e.Mobile; + DesignContext context = DesignContext.Find( from ); + + if ( context != null ) + { + /* Client disconnected + * - Remove design context + * - Eject all from house + * - Restore relocated entities + */ + + // Remove design context + DesignContext.Remove( from ); + + // Eject all from house + from.RevealingAction(); + + foreach ( Item item in context.Foundation.GetItems() ) + item.Location = context.Foundation.BanLocation; + + foreach ( Mobile mobile in context.Foundation.GetMobiles() ) + mobile.Location = context.Foundation.BanLocation; + + // Restore relocated entities + context.Foundation.RestoreRelocatedEntities(); + } + + PlayerMobile pm = e.Mobile as PlayerMobile; + + if ( pm != null ) + { + pm.m_GameTime += (DateTime.Now - pm.m_SessionStart); + pm.m_SpeechLog = null; + pm.LastOnline = DateTime.Now; + } + + DisguiseTimers.StopTimer( from ); + + if ( Server.Misc.Settings.LogoutSave() ){ World.Save( true, false ); } + } + + public override void RevealingAction() + { + if ( m_DesignContext != null ) + return; + + Spells.Sixth.InvisibilitySpell.RemoveTimer( this ); + + base.RevealingAction(); + + m_IsStealthing = false; // IsStealthing should be moved to Server.Mobiles + } + + [CommandProperty( AccessLevel.GameMaster )] + public override bool Hidden + { + get + { + return base.Hidden; + } + set + { + base.Hidden = value; + } + } + + public override void OnSubItemAdded( Item item ) + { + if ( AccessLevel < AccessLevel.GameMaster && item.IsChildOf( this.Backpack ) ) + { + int maxWeight = WeightOverloading.GetMaxWeight( this ); + int curWeight = Mobile.BodyWeight + this.TotalWeight; + + if ( curWeight > maxWeight ) + this.SendLocalizedMessage( 1019035, true, String.Format( " : {0} / {1}", curWeight, maxWeight ) ); + } + } + + public override bool CanBeHarmful( Mobile target, bool message, bool ignoreOurBlessedness ) + { + if ( m_DesignContext != null || (target is PlayerMobile && ((PlayerMobile)target).m_DesignContext != null) ) + return false; + + if ( target.Invulnerable || target is PlayerVendor || target is TownCrier ) + { + if ( message ) + { + if ( target.Title == null ) + SendMessage( "{0} the vendor cannot be harmed.", target.Name ); + else + SendMessage( "{0} {1} cannot be harmed.", target.Name, target.Title ); + } + + return false; + } + + return base.CanBeHarmful( target, message, ignoreOurBlessedness ); + } + + public override bool CanBeBeneficial( Mobile target, bool message, bool allowDead ) + { + if ( m_DesignContext != null || (target is PlayerMobile && ((PlayerMobile)target).m_DesignContext != null) ) + return false; + + return base.CanBeBeneficial( target, message, allowDead ); + } + + public override bool CheckContextMenuDisplay( IEntity target ) + { + return ( m_DesignContext == null ); + } + + public override void OnItemAdded( Item item ) + { + base.OnItemAdded( item ); + + if ( item is BaseArmor || item is BaseWeapon ) + { + Hits=Hits; Stam=Stam; Mana=Mana; + } + + if ( this.NetState != null ) + CheckLightLevels( false ); + } + + public override void OnItemRemoved( Item item ) + { + base.OnItemRemoved( item ); + + if ( item is BaseArmor || item is BaseWeapon ) + { + Hits=Hits; Stam=Stam; Mana=Mana; + } + + if ( this.NetState != null ) + CheckLightLevels( false ); + } + + public override double ArmorRating + { + get + { + //BaseArmor ar; + double rating = 0.0; + + AddArmorRating( ref rating, NeckArmor ); + AddArmorRating( ref rating, HandArmor ); + AddArmorRating( ref rating, HeadArmor ); + AddArmorRating( ref rating, ArmsArmor ); + AddArmorRating( ref rating, LegsArmor ); + AddArmorRating( ref rating, ChestArmor ); + AddArmorRating( ref rating, ShieldArmor ); + + return VirtualArmor + VirtualArmorMod + rating; + } + } + + private void AddArmorRating( ref double rating, Item armor ) + { + if ( armor is BaseArmor ) + { + BaseArmor ar = armor as BaseArmor; + rating += ar.ArmorRatingScaled; + } + } + + #region [Stats]Max + [CommandProperty( AccessLevel.GameMaster )] + public override int HitsMax + { + get + { + int hits = this.RawStr; + int strOffs = GetStatOffset( StatType.Str ); + hits = (hits / 2) + strOffs; + hits = (int)(hits * Server.Misc.Settings.HitPoints()); + hits = hits + 50; + + return hits; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override int StamMax + { + get{ return base.StamMax; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override int ManaMax + { + get{ return base.ManaMax; } + } + #endregion + + #region Stat Getters/Setters + + [CommandProperty( AccessLevel.GameMaster )] + public override int Str + { + get + { + return base.Str; + } + set + { + base.Str = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override int Int + { + get + { + return base.Int; + } + set + { + base.Int = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override int Dex + { + get + { + return base.Dex; + } + set + { + base.Dex = value; + } + } + + #endregion + + public override bool Move( Direction d ) + { + NetState ns = this.NetState; + + if ( ns != null ) + { + if ( HasGump( typeof( ResurrectGump ) ) ) { + if ( Alive ) { + CloseGump( typeof( ResurrectGump ) ); + } else { + SendLocalizedMessage( 500111 ); // You are frozen and cannot move. + return false; + } + } + } + + TimeSpan speed = ComputeMovementSpeed( d ); + + bool res; + + if ( !Alive ) + Server.Movement.MovementImpl.IgnoreMovableImpassables = true; + + res = base.Move( d ); + + Server.Movement.MovementImpl.IgnoreMovableImpassables = false; + + if ( !res ) + return false; + + m_NextMovementTime += speed; + + return true; + } + + public override bool CheckMovement( Direction d, out int newZ ) + { + DesignContext context = m_DesignContext; + + if ( context == null ) + return base.CheckMovement( d, out newZ ); + + HouseFoundation foundation = context.Foundation; + + newZ = foundation.Z + HouseFoundation.GetLevelZ( context.Level, context.Foundation ); + + int newX = this.X, newY = this.Y; + Movement.Movement.Offset( d, ref newX, ref newY ); + + int startX = foundation.X + foundation.Components.Min.X + 1; + int startY = foundation.Y + foundation.Components.Min.Y + 1; + int endX = startX + foundation.Components.Width - 1; + int endY = startY + foundation.Components.Height - 2; + + return ( newX >= startX && newY >= startY && newX < endX && newY < endY && Map == foundation.Map ); + } + + public override bool AllowItemUse( Item item ) + { + return DesignContext.Check( this ); + } + + public override bool AllowSkillUse( SkillName skill ) + { + return DesignContext.Check( this ); + } + + public override void SetLocation( Point3D loc, bool isTeleport ) + { + if ( !isTeleport && AccessLevel == AccessLevel.Player ) + { + // moving, not teleporting + int zDrop = ( this.Location.Z - loc.Z ); + + if ( zDrop > 20 ) // we fell more than one story + Hits -= ((zDrop / 20) * 10) - 5; // deal some damage; does not kill, disrupt, etc + } + + base.SetLocation( loc, isTeleport ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( from == this ) + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null ) + { + if ( Alive && house.InternalizedVendors.Count > 0 && house.IsOwner( this ) ) + list.Add( new CallbackEntry( 6204, new ContextCallback( GetVendor ) ) ); + + if ( house.IsAosRules ) + list.Add( new CallbackEntry( 6207, new ContextCallback( LeaveHouse ) ) ); + } + } + } + + private void GetVendor() + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( CheckAlive() && house != null && house.IsOwner( this ) && house.InternalizedVendors.Count > 0 ) + { + CloseGump( typeof( ReclaimVendorGump ) ); + SendGump( new ReclaimVendorGump( house ) ); + } + } + + private void LeaveHouse() + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null ) + this.Location = house.BanLocation; + } + + private delegate void ContextCallback(); + + private class CallbackEntry : ContextMenuEntry + { + private ContextCallback m_Callback; + + public CallbackEntry( int number, ContextCallback callback ) : this( number, -1, callback ) + { + } + + public CallbackEntry( int number, int range, ContextCallback callback ) : base( number, range ) + { + m_Callback = callback; + } + + public override void OnClick() + { + if ( m_Callback != null ) + m_Callback(); + } + } + + public override void DisruptiveAction() + { + base.DisruptiveAction(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( this == from && !Warmode ) + { + IMount mount = Mount; + + if ( mount != null && !DesignContext.Check( this ) ) + return; + } + + base.OnDoubleClick( from ); + } + + public override void DisplayPaperdollTo( Mobile to ) + { + if ( DesignContext.Check( this ) ) + base.DisplayPaperdollTo( to ); + } + + private static bool m_NoRecursion; + + public override bool CheckEquip( Item item ) + { + if ( !base.CheckEquip( item ) ) + return false; + + if ( this.AccessLevel < AccessLevel.GameMaster && item.Layer != Layer.Mount && this.HasTrade ) + { + BounceInfo bounce = item.GetBounce(); + + if ( bounce != null ) + { + if ( bounce.m_Parent is Item ) + { + Item parent = (Item) bounce.m_Parent; + + if ( parent == this.Backpack || parent.IsChildOf( this.Backpack ) ) + return true; + } + else if ( bounce.m_Parent == this ) + { + return true; + } + } + + SendLocalizedMessage( 1004042 ); // You can only equip what you are already carrying while you have a trade pending. + return false; + } + + return true; + } + + public override bool CheckTrade( Mobile to, Item item, SecureTradeContainer cont, bool message, bool checkItems, int plusItems, int plusWeight ) + { + int msgNum = 0; + + if ( cont == null ) + { + if ( to.Holding != null ) + msgNum = 1062727; // You cannot trade with someone who is dragging something. + else if ( this.HasTrade ) + msgNum = 1062781; // You are already trading with someone else! + else if ( to.HasTrade ) + msgNum = 1062779; // That person is already involved in a trade + } + + if ( msgNum == 0 ) + { + if ( cont != null ) + { + plusItems += cont.TotalItems; + plusWeight += cont.TotalWeight; + } + + if ( this.Backpack == null || !this.Backpack.CheckHold( this, item, false, checkItems, plusItems, plusWeight ) ) + msgNum = 1004040; // You would not be able to hold this if the trade failed. + else if ( to.Backpack == null || !to.Backpack.CheckHold( to, item, false, checkItems, plusItems, plusWeight ) ) + msgNum = 1004039; // The recipient of this trade would not be able to carry this. + else + msgNum = CheckContentForTrade( item ); + } + + if ( msgNum != 0 ) + { + if ( message ) + this.SendLocalizedMessage( msgNum ); + + return false; + } + + return true; + } + + private static int CheckContentForTrade( Item item ) + { + if ( item is TrapableContainer && ((TrapableContainer)item).TrapType != TrapType.None ) + return 1004044; // You may not trade trapped items. + + if ( SkillHandlers.StolenItem.IsStolen( item ) ) + return 1004043; // You may not trade recently stolen items. + + if ( item is Container ) + { + foreach ( Item subItem in item.Items ) + { + int msg = CheckContentForTrade( subItem ); + + if ( msg != 0 ) + return msg; + } + } + + return 0; + } + + public override bool CheckNonlocalDrop( Mobile from, Item item, Item target ) + { + if ( !base.CheckNonlocalDrop( from, item, target ) ) + return false; + + if ( from.AccessLevel >= AccessLevel.GameMaster ) + return true; + + Container pack = this.Backpack; + if ( from == this && this.HasTrade && ( target == pack || target.IsChildOf( pack ) ) ) + { + BounceInfo bounce = item.GetBounce(); + + if ( bounce != null && bounce.m_Parent is Item ) + { + Item parent = (Item) bounce.m_Parent; + + if ( parent == pack || parent.IsChildOf( pack ) ) + return true; + } + + SendLocalizedMessage( 1004041 ); // You can't do that while you have a trade pending. + return false; + } + + return true; + } + + protected override void OnLocationChange( Point3D oldLocation ) + { + Server.Misc.RegionMusic.MusicRegion( this, this.Map, this.Location, oldLocation ); + + CheckLightLevels( false ); + + DesignContext context = m_DesignContext; + + if ( context == null || m_NoRecursion ) + return; + + m_NoRecursion = true; + + HouseFoundation foundation = context.Foundation; + + int newX = this.X, newY = this.Y; + int newZ = foundation.Z + HouseFoundation.GetLevelZ( context.Level, context.Foundation ); + + int startX = foundation.X + foundation.Components.Min.X + 1; + int startY = foundation.Y + foundation.Components.Min.Y + 1; + int endX = startX + foundation.Components.Width - 1; + int endY = startY + foundation.Components.Height - 2; + + if ( newX >= startX && newY >= startY && newX < endX && newY < endY && Map == foundation.Map ) + { + if ( Z != newZ ) + Location = new Point3D( X, Y, newZ ); + + m_NoRecursion = false; + return; + } + + Location = new Point3D( foundation.X, foundation.Y, newZ ); + Map = foundation.Map; + + m_NoRecursion = false; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + //string sTitle = GetNPCGuild( this ); + //list.Add( Utility.FixHtml( sTitle ) ); + } + + public static string GetNPCGuild( Mobile m ) + { + string GuildTitle = ""; + + if ( m is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)m; + + if ( pm.NpcGuild == NpcGuild.MagesGuild ){ GuildTitle = "Mages Guild"; } + else if ( pm.NpcGuild == NpcGuild.WarriorsGuild ){ GuildTitle = "Warriors Guild"; } + else if ( pm.NpcGuild == NpcGuild.ThievesGuild ){ GuildTitle = "Thieves Guild"; } + else if ( pm.NpcGuild == NpcGuild.RangersGuild ){ GuildTitle = "Rangers Guild"; } + else if ( pm.NpcGuild == NpcGuild.HealersGuild ){ GuildTitle = "Healers Guild"; } + else if ( pm.NpcGuild == NpcGuild.TinkersGuild ){ GuildTitle = "Tinkers Guild"; } + else if ( pm.NpcGuild == NpcGuild.TailorsGuild ){ GuildTitle = "Tailors Guild"; } + else if ( pm.NpcGuild == NpcGuild.MarinersGuild ){ GuildTitle = "Mariners Guild"; } + else if ( pm.NpcGuild == NpcGuild.BardsGuild ){ GuildTitle = "Bards Guild"; } + else if ( pm.NpcGuild == NpcGuild.BlacksmithsGuild ){ GuildTitle = "Blacksmiths Guild"; } + else if ( pm.NpcGuild == NpcGuild.AlchemistsGuild ){ GuildTitle = "Alchemists Guild"; } + else if ( pm.NpcGuild == NpcGuild.CarpentryGuild ){ GuildTitle = "Carpenters Guild"; } + else if ( pm.NpcGuild == NpcGuild.LibrariansGuild ){ GuildTitle = "Librarians Guild"; } + else if ( pm.NpcGuild == NpcGuild.AssassinsGuild ){ GuildTitle = "Assassins Guild"; } + } + return GuildTitle; + } + + public override bool OnMoveOver( Mobile m ) + { + if ( m is BaseCreature && !((BaseCreature)m).Controlled ) + return ( !Alive || !m.Alive || IsDeadBondedPet || m.IsDeadBondedPet ) || ( Hidden && m.AccessLevel > AccessLevel.Player ); + + return base.OnMoveOver( m ); + } + + public override bool CheckShove( Mobile shoved ) + { + if( m_IgnoreMobiles ) + return true; + else + return base.CheckShove( shoved ); + } + + protected override void OnMapChange( Map oldMap ) + { + InvalidateProperties(); + + Server.Misc.RegionMusic.MusicRegion( this, this.Map, this.Location, this.Location ); + + DesignContext context = m_DesignContext; + + if ( context == null || m_NoRecursion ) + return; + + m_NoRecursion = true; + + HouseFoundation foundation = context.Foundation; + + if ( Map != foundation.Map ) + Map = foundation.Map; + + m_NoRecursion = false; + } + + public override void OnDamage( int amount, Mobile from, bool willKill ) + { + int disruptThreshold = 0; + + if ( amount > disruptThreshold ) + { + BandageContext c = BandageContext.GetContext( this ); + + if ( c != null ) + c.Slip(); + } + + WeightOverloading.FatigueOnDamage( this, amount ); + + if ( willKill && from is PlayerMobile ) + Timer.DelayCall( TimeSpan.FromSeconds( 10 ), new TimerCallback( ((PlayerMobile) from).RecoverAmmo ) ); + + base.OnDamage( amount, from, willKill ); + } + + public override void Resurrect() + { + bool wasAlive = this.Alive; + + base.Resurrect(); + + if ( this.Alive && !wasAlive ) + { + Item deathRobe = new DeathRobe(); + + Hits = HitsMax; + Stam = StamMax; + Mana = ManaMax; + Hunger = 20; + Thirst = 20; + + if ( !EquipItem( deathRobe ) ) + deathRobe.Delete(); + } + } + + public override double RacialSkillBonus + { + get + { + return 0; + } + } + + public override void OnWarmodeChanged() + { + if ( !Warmode ) + Timer.DelayCall( TimeSpan.FromSeconds( 10 ), new TimerCallback( RecoverAmmo ) ); + } + + private bool FindItems_Callback(Item item) + { + if (!item.Deleted && item.LootType == LootType.Blessed ) + { + if (this.Backpack != item.ParentEntity) + { + return true; + } + } + return false; + } + + public static void RemoveMyClothes( Mobile m ) + { + if ( m.FindItemOnLayer( Layer.OuterTorso ) != null && !(m.FindItemOnLayer( Layer.OuterTorso ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.OuterTorso ).Delete(); } + if ( m.FindItemOnLayer( Layer.MiddleTorso ) != null && !(m.FindItemOnLayer( Layer.MiddleTorso ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.MiddleTorso ).Delete(); } + if ( m.FindItemOnLayer( Layer.OneHanded ) != null && !(m.FindItemOnLayer( Layer.OneHanded ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.OneHanded ).Delete(); } + if ( m.FindItemOnLayer( Layer.TwoHanded ) != null && !(m.FindItemOnLayer( Layer.TwoHanded ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.TwoHanded ).Delete(); } + if ( m.FindItemOnLayer( Layer.Bracelet ) != null && !(m.FindItemOnLayer( Layer.Bracelet ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Bracelet ).Delete(); } + if ( m.FindItemOnLayer( Layer.Ring ) != null && !(m.FindItemOnLayer( Layer.Ring ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Ring ).Delete(); } + if ( m.FindItemOnLayer( Layer.Helm ) != null && !(m.FindItemOnLayer( Layer.Helm ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Helm ).Delete(); } + if ( m.FindItemOnLayer( Layer.Arms ) != null && !(m.FindItemOnLayer( Layer.Arms ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Arms ).Delete(); } + if ( m.FindItemOnLayer( Layer.OuterLegs ) != null && !(m.FindItemOnLayer( Layer.OuterLegs ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.OuterLegs ).Delete(); } + if ( m.FindItemOnLayer( Layer.Neck ) != null && !(m.FindItemOnLayer( Layer.Neck ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Neck ).Delete(); } + if ( m.FindItemOnLayer( Layer.Gloves ) != null && !(m.FindItemOnLayer( Layer.Gloves ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Gloves ).Delete(); } + if ( m.FindItemOnLayer( Layer.Talisman ) != null && !(m.FindItemOnLayer( Layer.Talisman ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Talisman ).Delete(); } + if ( m.FindItemOnLayer( Layer.Shoes ) != null && !(m.FindItemOnLayer( Layer.Shoes ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Shoes ).Delete(); } + if ( m.FindItemOnLayer( Layer.FirstValid ) != null && !(m.FindItemOnLayer( Layer.FirstValid ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.FirstValid ).Delete(); } + if ( m.FindItemOnLayer( Layer.Waist ) != null && !(m.FindItemOnLayer( Layer.Waist ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Waist ).Delete(); } + if ( m.FindItemOnLayer( Layer.InnerLegs ) != null && !(m.FindItemOnLayer( Layer.InnerLegs ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.InnerLegs ).Delete(); } + if ( m.FindItemOnLayer( Layer.InnerTorso ) != null && !(m.FindItemOnLayer( Layer.InnerTorso ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.InnerTorso ).Delete(); } + if ( m.FindItemOnLayer( Layer.Pants ) != null && !(m.FindItemOnLayer( Layer.Pants ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Pants ).Delete(); } + if ( m.FindItemOnLayer( Layer.Shirt ) != null && !(m.FindItemOnLayer( Layer.Shirt ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Shirt ).Delete(); } + if ( m.FindItemOnLayer( Layer.Cloak ) != null && !(m.FindItemOnLayer( Layer.Cloak ).LootType == LootType.Blessed) ) { m.FindItemOnLayer( Layer.Cloak ).Delete(); } + } + + public override bool OnBeforeDeath() + { + if ( this.LastKiller is Guard ) + { + BaseCreature guard = (BaseCreature)(this.LastKiller); + + Point3D p = new Point3D( 2002, 1494, -20 ); + + if ( Utility.RandomBool() ) + { + switch ( Utility.Random( 12 ) ) + { + case 0: p = new Point3D(985, 982, 0); break; + case 1: p = new Point3D(985, 976, 0); break; + case 2: p = new Point3D(985, 970, 0); break; + case 3: p = new Point3D(985, 964, 0); break; + case 4: p = new Point3D(985, 958, 0); break; + case 5: p = new Point3D(998, 951, 0); break; + case 6: p = new Point3D(1007, 951, 0); break; + case 7: p = new Point3D(1013, 951, 0); break; + case 8: p = new Point3D(1019, 964, 0); break; + case 9: p = new Point3D(1019, 970, 0); break; + case 10: p = new Point3D(1019, 976, 0); break; + case 11: p = new Point3D(1019, 982, 0); break; + }; + } + else + { + switch ( Utility.Random( 5 ) ) + { + case 0: p = new Point3D(2002, 1494, -20); break; + case 1: p = new Point3D(2002, 1488, -20); break; + case 2: p = new Point3D(2002, 1483, -20); break; + case 3: p = new Point3D(2014, 1483, -20); break; + case 4: p = new Point3D(2014, 1489, -20); break; + }; + } + + Map map = Map.Britannia; + + this.Criminal = false; + if ( this.Kills > 4 ){ this.Kills = 4; } + + Hits = HitsMax; + Stam = StamMax; + Mana = ManaMax; + Hunger = 20; + Thirst = 20; + + List stuff = new List(); + foreach( Item c in this.Backpack.Items ) + { + if ( c.LootType != LootType.Blessed ) + { + stuff.Add(c); + } + } + + foreach ( Item item in stuff ) + { + item.Delete(); + } + + RemoveMyClothes( this ); + + if ( this.Mounted ) + { + Mobile horse = (Mobile)(this.Mount); + Server.Mobiles.BaseMount.Dismount( this ); + horse.Delete(); + } + + if ( this.FindItemOnLayer( Layer.Shoes ) == null ) { this.AddItem( new Shoes( Utility.RandomNeutralHue() ) ); } + if ( this.FindItemOnLayer( Layer.Pants ) == null ) { this.AddItem( new ShortPants( Utility.RandomNeutralHue() ) ); } + if ( this.FindItemOnLayer( Layer.Shirt ) == null ) { this.AddItem( new Shirt( Utility.RandomNeutralHue() ) ); } + + this.SendMessage("You have been sent to prison!"); + Server.Mobiles.BaseCreature.DeletePets( this ); + this.MoveToWorld( p, map ); + + this.InvalidateProperties(); + guard.Combatant = null; + guard.Warmode = false; + guard.InvalidateProperties(); + + return false; + } + + NetState state = NetState; + + if ( state != null ) + state.CancelAllTrades(); + + DropHolding(); + + if (Backpack != null && !Backpack.Deleted) + { + List ilist = Backpack.FindItemsByType(FindItems_Callback); + + for (int i = 0; i < ilist.Count; i++) + { + Backpack.AddItem(ilist[i]); + } + } + + RecoverAmmo(); + + return base.OnBeforeDeath(); + } + + public override DeathMoveResult GetParentMoveResultFor( Item item ) + { + DeathMoveResult res = base.GetParentMoveResultFor( item ); + + return res; + } + + public override DeathMoveResult GetInventoryMoveResultFor( Item item ) + { + DeathMoveResult res = base.GetInventoryMoveResultFor( item ); + + return res; + } + + public override void OnDeath( Container c ) + { + base.OnDeath(c); + + HueMod = -1; + NameMod = null; + + SetHairMods( -1, -1 ); + + PolymorphSpell.StopTimer( this ); + IncognitoSpell.StopTimer( this ); + DisguiseTimers.RemoveTimer( this ); + + EndAction( typeof( PolymorphSpell ) ); + EndAction( typeof( IncognitoSpell ) ); + + SkillHandlers.StolenItem.ReturnOnDeath( this, c ); + + if ( m_PermaFlags.Count > 0 ) + { + m_PermaFlags.Clear(); + + if ( c is Corpse ) + ((Corpse)c).Criminal = true; + + if ( SkillHandlers.Stealing.ClassicMode ) + Criminal = true; + } + + Mobile killer = this.FindMostRecentDamager( true ); + + if ( killer is BaseCreature ) + { + BaseCreature bc = (BaseCreature)killer; + + Mobile master = bc.GetMaster(); + if( master != null ) + killer = master; + } + + Server.Guilds.Guild.HandleDeath( this, killer ); + } + + private List m_PermaFlags; + private List m_VisList; + private Hashtable m_AntiMacroTable; + private TimeSpan m_GameTime; + private TimeSpan m_ShortTermElapse; + private TimeSpan m_LongTermElapse; + private DateTime m_SessionStart; + private SkillName m_Learning = (SkillName)(-1); + + public SkillName Learning + { + get{ return m_Learning; } + set{ m_Learning = value; } + } + + public PlayerMobile() + { + m_VisList = new List(); + m_PermaFlags = new List(); + m_AntiMacroTable = new Hashtable(); + m_RecentlyReported = new List(); + + m_GameTime = TimeSpan.Zero; + m_ShortTermElapse = TimeSpan.FromHours( 8.0 ); + m_LongTermElapse = TimeSpan.FromHours( 40.0 ); + + m_GuildRank = Guilds.RankDefinition.Lowest; + } + + public override bool MutateSpeech( List hears, ref string text, ref object context ) + { + if ( Alive ) + return false; + + return base.MutateSpeech( hears, ref text, ref context ); + } + + public override void DoSpeech( string text, int[] keywords, MessageType type, int hue ) + { + if( Guilds.Guild.NewGuildSystem && (type == MessageType.Guild || type == MessageType.Alliance) ) + { + Guilds.Guild g = this.Guild as Guilds.Guild; + if( g == null ) + { + SendLocalizedMessage( 1063142 ); // You are not in a guild! + } + else if( type == MessageType.Alliance ) + { + if( g.Alliance != null && g.Alliance.IsMember( g ) ) + { + //g.Alliance.AllianceTextMessage( hue, "[Alliance][{0}]: {1}", this.Name, text ); + g.Alliance.AllianceChat( this, text ); + SendToStaffMessage( this, "[Alliance]: {0}", text ); + + m_AllianceMessageHue = hue; + } + else + { + SendLocalizedMessage( 1071020 ); // You are not in an alliance! + } + } + else //Type == MessageType.Guild + { + m_GuildMessageHue = hue; + + g.GuildChat( this, text ); + SendToStaffMessage( this, "[Guild]: {0}", text ); + } + } + else + { + base.DoSpeech( text, keywords, type, hue ); + } + } + + private static void SendToStaffMessage( Mobile from, string text ) + { + Packet p = null; + + foreach( NetState ns in from.GetClientsInRange( 8 ) ) + { + Mobile mob = ns.Mobile; + + if( mob != null && mob.AccessLevel >= AccessLevel.GameMaster && mob.AccessLevel > from.AccessLevel ) + { + if( p == null ) + p = Packet.Acquire( new UnicodeMessage( from.Serial, from.Body, MessageType.Regular, from.SpeechHue, 3, from.Language, from.Name, text ) ); + + ns.Send( p ); + } + } + + Packet.Release( p ); + } + + private static void SendToStaffMessage( Mobile from, string format, params object[] args ) + { + SendToStaffMessage( from, String.Format( format, args ) ); + } + + public override void Damage( int amount, Mobile from ) + { + base.Damage( amount, from ); + } + + #region Poison + + public override ApplyPoisonResult ApplyPoison( Mobile from, Poison poison ) + { + if ( !Alive ) + return ApplyPoisonResult.Immune; + + ApplyPoisonResult result = base.ApplyPoison( from, poison ); + + if ( from != null && result == ApplyPoisonResult.Poisoned && PoisonTimer is PoisonImpl.PoisonTimer ) + (PoisonTimer as PoisonImpl.PoisonTimer).From = from; + + return result; + } + + #endregion + + public PlayerMobile( Serial s ) : base( s ) + { + m_VisList = new List(); + m_AntiMacroTable = new Hashtable(); + } + + public List VisibilityList + { + get{ return m_VisList; } + } + + public List PermaFlags + { + get{ return m_PermaFlags; } + } + + public override bool IsHarmfulCriminal( Mobile target ) + { + if ( SkillHandlers.Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).m_PermaFlags.Count > 0 ) + { + int noto = Notoriety.Compute( this, target ); + + if ( noto == Notoriety.Innocent ) + target.Delta( MobileDelta.Noto ); + + return false; + } + + if ( target is BaseCreature && ((BaseCreature)target).InitialInnocent && !((BaseCreature)target).Controlled ) + return false; + + return base.IsHarmfulCriminal( target ); + } + + public bool AntiMacroCheck( Skill skill, object obj ) + { + if ( obj == null || m_AntiMacroTable == null || this.AccessLevel != AccessLevel.Player ) + return true; + + Hashtable tbl = (Hashtable)m_AntiMacroTable[skill]; + if ( tbl == null ) + m_AntiMacroTable[skill] = tbl = new Hashtable(); + + CountAndTimeStamp count = (CountAndTimeStamp)tbl[obj]; + if ( count != null ) + { + if ( count.TimeStamp + SkillCheck.AntiMacroExpire <= DateTime.Now ) + { + count.Count = 1; + return true; + } + else + { + ++count.Count; + if ( count.Count <= SkillCheck.Allowance ) + return true; + else + return false; + } + } + else + { + tbl[obj] = count = new CountAndTimeStamp(); + count.Count = 1; + + return true; + } + } + + private void RevertHair() + { + SetHairMods( -1, -1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + m_PeacedUntil = reader.ReadDateTime(); + m_AnkhNextUse = reader.ReadDateTime(); + m_AllianceMessageHue = reader.ReadEncodedInt(); + m_GuildMessageHue = reader.ReadEncodedInt(); + m_QuestLevel = reader.ReadInt(); + m_MapMarkers = reader.ReadString(); + + int rank = reader.ReadEncodedInt(); + int maxRank = Guilds.RankDefinition.Ranks.Length -1; + if( rank > maxRank ) + rank = maxRank; + + m_GuildRank = Guilds.RankDefinition.Ranks[rank]; + m_LastOnline = reader.ReadDateTime(); + m_Profession = reader.ReadEncodedInt(); + + if ( reader.ReadBool() ) + { + m_HairModID = reader.ReadInt(); + m_HairModHue = reader.ReadInt(); + m_BeardModID = reader.ReadInt(); + m_BeardModHue = reader.ReadInt(); + } + + m_NpcGuild = (NpcGuild)reader.ReadInt(); + m_NpcGuildJoinTime = reader.ReadDateTime(); + m_NpcGuildGameTime = reader.ReadTimeSpan(); + m_Camp = reader.ReadDateTime(); + m_Bedroll = reader.ReadDateTime(); + m_PermaFlags = reader.ReadStrongMobileList(); + m_Flags = (PlayerFlag)reader.ReadInt(); + m_LongTermElapse = reader.ReadTimeSpan(); + m_ShortTermElapse = reader.ReadTimeSpan(); + m_GameTime = reader.ReadTimeSpan(); + + StatCap = 200; + Skills.Cap = 7000; + + if (m_RecentlyReported == null) + m_RecentlyReported = new List(); + + if ( !CharacterCreation.VerifyProfession( m_Profession ) ) + m_Profession = 0; + + if ( m_PermaFlags == null ) + m_PermaFlags = new List(); + + if( m_GuildRank == null ) + m_GuildRank = Guilds.RankDefinition.Member; //Default to member if going from older verstion to new version (only time it should be null) + + if( m_LastOnline == DateTime.MinValue && Account != null ) + m_LastOnline = ((Account)Account).LastLogin; + + if ( AccessLevel > AccessLevel.Player ) + m_IgnoreMobiles = true; + + List list = this.Stabled; + + for ( int i = 0; i < list.Count; ++i ) + { + BaseCreature bc = list[i] as BaseCreature; + + if ( bc != null ) + bc.IsStabled = true; + } + } + + public override void Serialize( GenericWriter writer ) + { + //cleanup our anti-macro table + foreach ( Hashtable t in m_AntiMacroTable.Values ) + { + ArrayList remove = new ArrayList(); + foreach ( CountAndTimeStamp time in t.Values ) + { + if ( time.TimeStamp + SkillCheck.AntiMacroExpire <= DateTime.Now ) + remove.Add( time ); + } + + for (int i=0;i 0 ) + --Kills; + } + } + + public void ResetKillTime() + { + m_ShortTermElapse = this.GameTime + TimeSpan.FromHours( 8 ); + m_LongTermElapse = this.GameTime + TimeSpan.FromHours( 40 ); + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime SessionStart + { + get{ return m_SessionStart; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public TimeSpan GameTime + { + get + { + if ( NetState != null ) + return m_GameTime + (DateTime.Now - m_SessionStart); + else + return m_GameTime; + } + } + + public override bool CanSee( Mobile m ) + { + if ( m is PlayerMobile && ((PlayerMobile)m).m_VisList.Contains( this ) ) + return true; + + return base.CanSee( m ); + } + + public override bool CanSee( Item item ) + { + if ( m_DesignContext != null && m_DesignContext.Foundation.IsHiddenToCustomizer( item ) ) + return false; + + return base.CanSee( item ); + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + BaseHouse.HandleDeletion( this ); + + DisguiseTimers.RemoveTimer( this ); + } + + public override bool NewGuildDisplay { get { return Server.Guilds.Guild.NewGuildSystem; } } + + protected override bool OnMove( Direction d ) + { + return base.OnMove( d ); + } + + [CommandProperty( AccessLevel.GameMaster )] + public override bool Paralyzed + { + get + { + return base.Paralyzed; + } + set + { + base.Paralyzed = value; + } + } + + #region Fastwalk Prevention + private static bool FastwalkPrevention = true; // Is fastwalk prevention enabled? + private static TimeSpan FastwalkThreshold = TimeSpan.FromSeconds( 0.4 ); // Fastwalk prevention will become active after 0.4 seconds + + private DateTime m_NextMovementTime; + + public virtual bool UsesFastwalkPrevention{ get{ return ( AccessLevel < AccessLevel.Counselor ); } } + + public override TimeSpan ComputeMovementSpeed( Direction dir, bool checkTurning ) + { + if ( checkTurning && (dir & Direction.Mask) != (this.Direction & Direction.Mask) ) + return Mobile.RunMount; // We are NOT actually moving (just a direction change) + + bool running = ( (dir & Direction.Running) != 0 ); + + bool onHorse = ( this.Mount != null ); + + if( onHorse ) + return ( running ? Mobile.RunMount : Mobile.WalkMount ); + + return ( running ? Mobile.RunFoot : Mobile.WalkFoot ); + } + + public static bool MovementThrottle_Callback( NetState ns ) + { + PlayerMobile pm = ns.Mobile as PlayerMobile; + + if ( pm == null || !pm.UsesFastwalkPrevention ) + return true; + + if ( pm.m_NextMovementTime == DateTime.MinValue ) + { + // has not yet moved + pm.m_NextMovementTime = DateTime.Now; + return true; + } + + TimeSpan ts = pm.m_NextMovementTime - DateTime.Now; + + if ( ts < TimeSpan.Zero ) + { + // been a while since we've last moved + pm.m_NextMovementTime = DateTime.Now; + return true; + } + + return ( ts < FastwalkThreshold ); + } + + #endregion + + #region Hair and beard mods + private int m_HairModID = -1, m_HairModHue; + private int m_BeardModID = -1, m_BeardModHue; + + public void SetHairMods( int hairID, int beardID ) + { + if ( hairID == -1 ) + InternalRestoreHair( true, ref m_HairModID, ref m_HairModHue ); + else if ( hairID != -2 ) + InternalChangeHair( true, hairID, ref m_HairModID, ref m_HairModHue ); + + if ( beardID == -1 ) + InternalRestoreHair( false, ref m_BeardModID, ref m_BeardModHue ); + else if ( beardID != -2 ) + InternalChangeHair( false, beardID, ref m_BeardModID, ref m_BeardModHue ); + } + + private void CreateHair( bool hair, int id, int hue ) + { + if( hair ) + { + //TODO Verification? + HairItemID = id; + RecordHair = id; + HairHue = hue; + } + else + { + FacialHairItemID = id; + RecordBeard = id; + FacialHairHue = hue; + } + } + + private void InternalRestoreHair( bool hair, ref int id, ref int hue ) + { + if ( id == -1 ) + return; + + if ( hair ) + { + HairItemID = 0; + RecordHair = 0; + } + else + { + FacialHairItemID = 0; + RecordBeard = 0; + } + + //if( id != 0 ) + CreateHair( hair, id, hue ); + + id = -1; + hue = 0; + } + + private void InternalChangeHair( bool hair, int id, ref int storeID, ref int storeHue ) + { + if ( storeID == -1 ) + { + storeID = hair ? HairItemID : FacialHairItemID; + storeHue = hair ? HairHue : FacialHairHue; + } + CreateHair( hair, id, 0 ); + } + + #endregion + + #region Speech log + private SpeechLog m_SpeechLog; + + public SpeechLog SpeechLog{ get{ return m_SpeechLog; } } + + public override void OnSpeech( SpeechEventArgs e ) + { + if ( SpeechLog.Enabled && this.NetState != null ) + { + if ( m_SpeechLog == null ) + m_SpeechLog = new SpeechLog(); + + m_SpeechLog.Add( e.Mobile, e.Speech ); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/PlayerVendor.cs b/Scripts/Mobiles/Base/PlayerVendor.cs new file mode 100644 index 0000000..11f968e --- /dev/null +++ b/Scripts/Mobiles/Base/PlayerVendor.cs @@ -0,0 +1,1687 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Gumps; +using Server.Prompts; +using Server.Targeting; +using Server.Misc; +using Server.Multis; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [AttributeUsage( AttributeTargets.Class )] + public class PlayerVendorTargetAttribute : Attribute + { + public PlayerVendorTargetAttribute() + { + } + } + + public class VendorItem + { + private Item m_Item; + private int m_Price; + private string m_Description; + private DateTime m_Created; + + private bool m_Valid; + + public Item Item{ get{ return m_Item; } } + public int Price{ get{ return m_Price; } } + + public string FormattedPrice + { + get + { + return m_Price.ToString(); + } + } + + public string Description + { + get{ return m_Description; } + set + { + if ( value != null ) + m_Description = value; + else + m_Description = ""; + + if ( Valid ) + Item.InvalidateProperties(); + } + } + + public DateTime Created{ get{ return m_Created; } } + + public bool IsForSale{ get{ return Price >= 0; } } + public bool IsForFree{ get{ return Price == 0; } } + + public bool Valid{ get{ return m_Valid; } } + + public VendorItem( Item item, int price, string description, DateTime created ) + { + m_Item = item; + m_Price = price; + + if ( description != null ) + m_Description = description; + else + m_Description = ""; + + m_Created = created; + + m_Valid = true; + } + + public void Invalidate() + { + m_Valid = false; + } + } + + public class VendorBackpack : Backpack + { + public VendorBackpack() + { + Layer = Layer.Backpack; + Weight = 1.0; + } + + public override int DefaultMaxWeight{ get{ return 0; } } + + public override bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight ) + { + if ( !base.CheckHold( m, item, message, checkItems, plusItems, plusWeight ) ) + return false; + + if ( !BaseHouse.NewVendorSystem && Parent is PlayerVendor ) + { + BaseHouse house = ((PlayerVendor)Parent).House; + + if ( house != null && house.IsAosRules && !house.CheckAosStorage( 1 + item.TotalItems + plusItems ) ) + { + if ( message ) + m.SendLocalizedMessage( 1061839 ); // This action would exceed the secure storage limit of the house. + + return false; + } + } + + return true; + } + + public override bool IsAccessibleTo( Mobile m ) + { + return true; + } + + public override bool CheckItemUse( Mobile from, Item item ) + { + if ( !base.CheckItemUse( from, item ) ) + return false; + + if ( item is Container ) + return true; + + from.SendLocalizedMessage( 500447 ); // That is not accessible. + return false; + } + + public override bool CheckTarget( Mobile from, Target targ, object targeted ) + { + if ( !base.CheckTarget( from, targ, targeted ) ) + return false; + + if ( from.AccessLevel >= AccessLevel.GameMaster ) + return true; + + return targ.GetType().IsDefined( typeof( PlayerVendorTargetAttribute ), false ); + } + + public override void GetChildContextMenuEntries( Mobile from, List list, Item item ) + { + base.GetChildContextMenuEntries( from, list, item ); + + PlayerVendor pv = RootParent as PlayerVendor; + + if ( pv == null || pv.IsOwner( from ) ) + return; + + VendorItem vi = pv.GetVendorItem( item ); + + if ( vi != null ) + list.Add( new BuyEntry( item ) ); + } + + private class BuyEntry : ContextMenuEntry + { + private Item m_Item; + + public BuyEntry( Item item ) : base( 6103 ) + { + m_Item = item; + } + + public override bool NonLocalUse{ get{ return true; } } + + public override void OnClick() + { + if ( m_Item.Deleted ) + return; + + PlayerVendor.TryToBuy( m_Item, Owner.From ); + } + } + + public override void GetChildNameProperties( ObjectPropertyList list, Item item ) + { + base.GetChildNameProperties( list, item ); + + PlayerVendor pv = RootParent as PlayerVendor; + + if ( pv == null ) + return; + + VendorItem vi = pv.GetVendorItem( item ); + + if ( vi == null ) + return; + + if ( !vi.IsForSale ) + list.Add( 1043307 ); // Price: Not for sale. + else if ( vi.IsForFree ) + list.Add( 1043306 ); // Price: FREE! + else + list.Add( 1043304, vi.FormattedPrice ); // Price: ~1_COST~ + } + + public override void GetChildProperties( ObjectPropertyList list, Item item ) + { + base.GetChildProperties( list, item ); + + PlayerVendor pv = RootParent as PlayerVendor; + + if ( pv == null ) + return; + + VendorItem vi = pv.GetVendorItem( item ); + + if ( vi != null && vi.Description != null && vi.Description.Length > 0 ) + list.Add( 1043305, vi.Description ); //
Seller's Description:
"~1_DESC~" + } + + public override void OnSingleClickContained( Mobile from, Item item ) + { + if ( RootParent is PlayerVendor ) + { + PlayerVendor vendor = (PlayerVendor)RootParent; + + VendorItem vi = vendor.GetVendorItem( item ); + + if ( vi != null ) + { + if ( !vi.IsForSale ) + item.LabelTo( from, 1043307 ); // Price: Not for sale. + else if ( vi.IsForFree ) + item.LabelTo( from, 1043306 ); // Price: FREE! + else + item.LabelTo( from, 1043304, vi.FormattedPrice ); // Price: ~1_COST~ + + if ( !String.IsNullOrEmpty( vi.Description ) ) + { + // The localized message (1043305) is no longer valid -
Seller's Description:
"~1_DESC~" + item.LabelTo( from, "Description: {0}", vi.Description ); + } + } + } + + base.OnSingleClickContained( from, item ); + } + + public VendorBackpack( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class PlayerVendor : Mobile + { + private Hashtable m_SellItems; + + private Mobile m_Owner; + private BaseHouse m_House; + + private int m_BankAccount; + private int m_HoldGold; + + private string m_ShopName; + + private Timer m_PayTimer; + private DateTime m_NextPayTime; + + private PlayerVendorPlaceholder m_Placeholder; + + public PlayerVendor( Mobile owner, BaseHouse house ) + { + Owner = owner; + House = house; + + if ( BaseHouse.NewVendorSystem ) + { + m_BankAccount = 0; + m_HoldGold = 4; + } + else + { + m_BankAccount = 1000; + m_HoldGold = 0; + } + + ShopName = "Shop Not Yet Named"; + + m_SellItems = new Hashtable(); + + CantWalk = true; + + Invulnerable = true; + + NameHue = 0x35; + + InitStats( 75, 75, 75 ); + InitBody(); + InitOutfit(); + + TimeSpan delay = PayTimer.GetInterval(); + + m_PayTimer = new PayTimer( this, delay ); + m_PayTimer.Start(); + + m_NextPayTime = DateTime.Now + delay; + } + + public PlayerVendor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (bool) BaseHouse.NewVendorSystem ); + writer.Write( (string) m_ShopName ); + writer.WriteDeltaTime( (DateTime) m_NextPayTime ); + writer.Write( (Item) House ); + + writer.Write( (Mobile) m_Owner ); + writer.Write( (int) m_BankAccount ); + writer.Write( (int) m_HoldGold ); + + writer.Write( (int) m_SellItems.Count ); + foreach ( VendorItem vi in m_SellItems.Values ) + { + writer.Write( (Item) vi.Item ); + writer.Write( (int) vi.Price ); + writer.Write( (string) vi.Description ); + + writer.Write( (DateTime) vi.Created ); + } + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + bool newVendorSystem = false; + + switch ( version ) + { + case 1: + { + newVendorSystem = reader.ReadBool(); + m_ShopName = reader.ReadString(); + m_NextPayTime = reader.ReadDeltaTime(); + House = (BaseHouse) reader.ReadItem(); + + goto case 0; + } + case 0: + { + m_Owner = reader.ReadMobile(); + m_BankAccount = reader.ReadInt(); + m_HoldGold = reader.ReadInt(); + + m_SellItems = new Hashtable(); + + int count = reader.ReadInt(); + for ( int i = 0; i < count; i++ ) + { + Item item = reader.ReadItem(); + + int price = reader.ReadInt(); + if ( price > 100000000 ) + price = 100000000; + + string description = reader.ReadString(); + + DateTime created = version < 1 ? DateTime.Now : reader.ReadDateTime(); + + if ( item != null ) + { + SetVendorItem( item, version < 1 && price <= 0 ? -1 : price, description, created ); + } + } + + break; + } + } + + bool newVendorSystemActivated = BaseHouse.NewVendorSystem && !newVendorSystem; + + if ( version < 1 || newVendorSystemActivated ) + { + if ( version < 1 ) + { + m_ShopName = "Shop Not Yet Named"; + Timer.DelayCall( TimeSpan.Zero, new TimerStateCallback( UpgradeFromVersion0 ), newVendorSystemActivated ); + } + else + { + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( FixDresswear ) ); + } + + m_NextPayTime = DateTime.Now + PayTimer.GetInterval(); + + if ( newVendorSystemActivated ) + { + m_HoldGold += m_BankAccount; + m_BankAccount = 0; + } + } + + TimeSpan delay = m_NextPayTime - DateTime.Now; + + m_PayTimer = new PayTimer( this, delay > TimeSpan.Zero ? delay : TimeSpan.Zero ); + m_PayTimer.Start(); + + Blessed = false; + } + + private void UpgradeFromVersion0( object newVendorSystem ) + { + List toRemove = new List(); + + foreach ( VendorItem vi in m_SellItems.Values ) + if ( !CanBeVendorItem( vi.Item ) ) + toRemove.Add( vi.Item ); + else + vi.Description = Utility.FixHtml( vi.Description ); + + foreach ( Item item in toRemove ) + RemoveVendorItem( item ); + + House = BaseHouse.FindHouseAt( this ); + + if ( (bool) newVendorSystem ) + ActivateNewVendorSystem(); + } + + private void ActivateNewVendorSystem() + { + FixDresswear(); + + if ( House != null && !House.IsOwner( Owner ) ) + Destroy( false ); + } + + public void InitBody() + { + Hue = Utility.RandomSkinHue(); + SpeechHue = Utility.RandomSpeechHue(); + + NameHue = 0x35; + + if ( this.Female = Utility.RandomBool() ) + { + this.Body = 0x191; + this.Name = NameList.RandomName( "female" ); + } + else + { + this.Body = 0x190; + this.Name = NameList.RandomName( "male" ); + } + } + + public virtual void InitOutfit() + { + Item item = new FancyShirt( Utility.RandomNeutralHue() ); + item.Layer = Layer.InnerTorso; + AddItem( item ); + AddItem( new LongPants( Utility.RandomNeutralHue() ) ); + AddItem( new BodySash( Utility.RandomNeutralHue() ) ); + AddItem( new Boots( Utility.RandomNeutralHue() ) ); + AddItem( new Cloak( Utility.RandomNeutralHue() ) ); + + Utility.AssignRandomHair( this ); + + Container pack = new VendorBackpack(); + pack.Movable = false; + AddItem( pack ); + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Owner + { + get{ return m_Owner; } + set{ m_Owner = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int BankAccount + { + get{ return m_BankAccount; } + set{ m_BankAccount = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int HoldGold + { + get{ return m_HoldGold; } + set{ m_HoldGold = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string ShopName + { + get{ return m_ShopName; } + set + { + if ( value == null ) + m_ShopName = ""; + else + m_ShopName = value; + + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime NextPayTime + { + get{ return m_NextPayTime; } + } + + public PlayerVendorPlaceholder Placeholder + { + get{ return m_Placeholder; } + set{ m_Placeholder = value; } + } + + public BaseHouse House + { + get{ return m_House; } + set + { + if ( m_House != null ) + m_House.PlayerVendors.Remove( this ); + + if ( value != null ) + value.PlayerVendors.Add( this ); + + m_House = value; + } + } + + public int ChargePerDay + { + get + { + return 1; + } + } + + public int ChargePerRealWorldDay + { + get + { + return ChargePerDay * 12; + } + } + + public virtual bool IsOwner( Mobile m ) + { + if ( m.AccessLevel >= AccessLevel.GameMaster ) + return true; + + if ( BaseHouse.NewVendorSystem && House != null ) + { + return House.IsOwner( m ); + } + else + { + return m == Owner; + } + } + + protected List GetItems() + { + List list = new List(); + + foreach ( Item item in this.Items ) + if ( item.Movable && item != this.Backpack && item.Layer != Layer.Hair && item.Layer != Layer.FacialHair ) + list.Add( item ); + + if ( this.Backpack != null ) + list.AddRange( this.Backpack.Items ); + + return list; + } + + public virtual void Destroy( bool toBackpack ) + { + Return(); + + if ( !BaseHouse.NewVendorSystem ) + FixDresswear(); + + /* Possible cases regarding item return: + * + * 1. No item must be returned + * -> do nothing. + * 2. ( toBackpack is false OR the vendor is in the internal map ) AND the vendor is associated with a AOS house + * -> put the items into the moving crate or a vendor inventory, + * depending on whether the vendor owner is also the house owner. + * 3. ( toBackpack is true OR the vendor isn't associated with any AOS house ) AND the vendor isn't in the internal map + * -> put the items into a backpack. + * 4. The vendor isn't associated with any house AND it's in the internal map + * -> do nothing (we can't do anything). + */ + + List list = GetItems(); + + if ( list.Count > 0 || HoldGold > 0 ) // No case 1 + { + if ( ( !toBackpack || this.Map == Map.Internal ) && House != null && House.IsAosRules ) // Case 2 + { + if ( House.IsOwner( Owner ) ) // Move to moving crate + { + if ( House.MovingCrate == null ) + House.MovingCrate = new MovingCrate( House ); + + if ( HoldGold > 0 ) + Innkeeper.Deposit( House.MovingCrate, HoldGold ); + + foreach ( Item item in list ) + { + House.MovingCrate.DropItem( item ); + } + } + else // Move to vendor inventory + { + VendorInventory inventory = new VendorInventory( House, Owner, Name, ShopName ); + inventory.Gold = HoldGold; + + foreach ( Item item in list ) + { + inventory.AddItem( item ); + } + + House.VendorInventories.Add( inventory ); + } + } + else if ( ( toBackpack || House == null || !House.IsAosRules ) && this.Map != Map.Internal ) // Case 3 - Move to backpack + { + Container backpack = new Backpack(); + + if ( HoldGold > 0 ) + Innkeeper.Deposit( backpack, HoldGold ); + + foreach ( Item item in list ) + { + backpack.DropItem( item ); + } + + backpack.MoveToWorld( this.Location, this.Map ); + } + } + + Delete(); + } + + private void FixDresswear() + { + for ( int i = 0; i < Items.Count; ++i ) + { + Item item = Items[i] as Item; + + if ( item is BaseHat ) + item.Layer = Layer.Helm; + else if ( item is BaseMiddleTorso ) + item.Layer = Layer.MiddleTorso; + else if ( item is BaseOuterLegs ) + item.Layer = Layer.OuterLegs; + else if ( item is BaseOuterTorso ) + item.Layer = Layer.OuterTorso; + else if ( item is BasePants ) + item.Layer = Layer.Pants; + else if ( item is BaseShirt ) + item.Layer = Layer.Shirt; + else if ( item is BaseWaist ) + item.Layer = Layer.Waist; + else if ( item is BaseShoes ) + { + if ( item is Sandals ) + item.Hue = 0; + + item.Layer = Layer.Shoes; + } + } + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + m_PayTimer.Stop(); + + House = null; + + if ( Placeholder != null ) + Placeholder.Delete(); + } + + public override bool IsSnoop( Mobile from ) + { + return false; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( BaseHouse.NewVendorSystem ) + { + list.Add( 1062449, ShopName ); // Shop Name: ~1_NAME~ + } + } + + public VendorItem GetVendorItem( Item item ) + { + return (VendorItem) m_SellItems[item]; + } + + private VendorItem SetVendorItem( Item item, int price, string description ) + { + return SetVendorItem( item, price, description, DateTime.Now ); + } + + private VendorItem SetVendorItem( Item item, int price, string description, DateTime created ) + { + RemoveVendorItem( item ); + + VendorItem vi = new VendorItem( item, price, description, created ); + m_SellItems[item] = vi; + + item.InvalidateProperties(); + + return vi; + } + + private void RemoveVendorItem( Item item ) + { + VendorItem vi = GetVendorItem( item ); + + if ( vi != null ) + { + vi.Invalidate(); + m_SellItems.Remove( item ); + + foreach ( Item subItem in item.Items ) + { + RemoveVendorItem( subItem ); + } + + item.InvalidateProperties(); + } + } + + private bool CanBeVendorItem( Item item ) + { + Item parent = item.Parent as Item; + + if ( parent == this.Backpack ) + return true; + + if ( parent is Container ) + { + VendorItem parentVI = GetVendorItem( parent ); + + if ( parentVI != null ) + return !parentVI.IsForSale; + } + + return false; + } + + public override void OnSubItemAdded( Item item ) + { + base.OnSubItemAdded( item ); + + if ( GetVendorItem( item ) == null && CanBeVendorItem( item ) ) + { + // TODO: default price should be dependent to the type of object + SetVendorItem( item, 999, "" ); + } + } + + public override void OnSubItemRemoved( Item item ) + { + base.OnSubItemRemoved( item ); + + if ( item.GetBounce() == null ) + RemoveVendorItem( item ); + } + + public override void OnSubItemBounceCleared( Item item ) + { + base.OnSubItemBounceCleared( item ); + + if ( !CanBeVendorItem( item ) ) + RemoveVendorItem( item ); + } + + public override void OnItemRemoved( Item item ) + { + base.OnItemRemoved( item ); + + if ( item == this.Backpack ) + { + foreach ( Item subItem in item.Items ) + { + RemoveVendorItem( subItem ); + } + } + } + + public override bool OnDragDrop( Mobile from, Item item ) + { + if ( !IsOwner( from ) ) + { + SayTo( from, 503209 ); // I can only take item from the shop owner. + return false; + } + + if ( item is Gold ) + { + if ( BaseHouse.NewVendorSystem ) + { + if ( this.HoldGold < 1000000 ) + { + SayTo( from, 503210 ); // I'll take that to fund my services. + + this.HoldGold += item.Amount; + item.Delete(); + + return true; + } + else + { + from.SendLocalizedMessage( 1062493 ); // Your vendor has sufficient funds for operation and cannot accept this gold. + + return false; + } + } + else + { + if ( this.BankAccount < 1000000 ) + { + SayTo( from, 503210 ); // I'll take that to fund my services. + + this.BankAccount += item.Amount; + item.Delete(); + + return true; + } + else + { + from.SendLocalizedMessage( 1062493 ); // Your vendor has sufficient funds for operation and cannot accept this gold. + + return false; + } + } + } + else + { + bool newItem = ( GetVendorItem( item ) == null ); + + if ( this.Backpack != null && this.Backpack.TryDropItem( from, item, false ) ) + { + if ( newItem ) + OnItemGiven( from, item ); + + return true; + } + else + { + SayTo( from, 503211 ); // I can't carry any more. + return false; + } + } + } + + public override bool CheckNonlocalDrop( Mobile from, Item item, Item target ) + { + if ( IsOwner( from ) ) + { + if ( GetVendorItem( item ) == null ) + { + // We must wait until the item is added + Timer.DelayCall( TimeSpan.Zero, new TimerStateCallback( NonLocalDropCallback ), new object[] { from, item } ); + } + + return true; + } + else + { + SayTo( from, 503209 ); // I can only take item from the shop owner. + return false; + } + } + + private void NonLocalDropCallback( object state ) + { + object[] aState = (object[]) state; + + Mobile from = (Mobile) aState[0]; + Item item = (Item) aState[1]; + + OnItemGiven( from, item ); + } + + private void OnItemGiven( Mobile from, Item item ) + { + VendorItem vi = GetVendorItem( item ); + + if ( vi != null ) + { + string name; + if ( !String.IsNullOrEmpty( item.Name ) ) + name = item.Name; + else + name = "#" + item.LabelNumber.ToString(); + + from.SendLocalizedMessage( 1043303, name ); // Type in a price and description for ~1_ITEM~ (ESC=not for sale) + from.Prompt = new VendorPricePrompt( this, vi ); + } + } + + public override bool AllowEquipFrom( Mobile from ) + { + if ( BaseHouse.NewVendorSystem && IsOwner( from ) ) + return true; + + return base.AllowEquipFrom( from ); + } + + public override bool CheckNonlocalLift( Mobile from, Item item ) + { + if ( item.IsChildOf( this.Backpack ) ) + { + if ( IsOwner( from ) ) + { + return true; + } + else + { + SayTo( from, 503223 ); // If you'd like to purchase an item, just ask. + return false; + } + } + else if ( BaseHouse.NewVendorSystem && IsOwner( from ) ) + { + return true; + } + + return base.CheckNonlocalLift( from, item ); + } + + public bool CanInteractWith( Mobile from, bool ownerOnly ) + { + if ( !from.CanSee( this ) || !Utility.InUpdateRange( from, this ) || !from.CheckAlive() ) + return false; + + if ( ownerOnly ) + return IsOwner( from ); + + if ( House != null && House.IsBanned( from ) && !IsOwner( from ) ) + { + from.SendLocalizedMessage( 1062674 ); // You can't shop from this home as you have been banned from this establishment. + return false; + } + + return true; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsOwner( from ) ) + { + SendOwnerGump( from ); + } + else if ( CanInteractWith( from, false ) ) + { + OpenBackpack( from ); + } + } + + public override void DisplayPaperdollTo( Mobile m ) + { + if ( BaseHouse.NewVendorSystem ) + { + base.DisplayPaperdollTo( m ); + } + else if ( CanInteractWith( m, false ) ) + { + OpenBackpack( m ); + } + } + + public void SendOwnerGump( Mobile to ) + { + if ( BaseHouse.NewVendorSystem ) + { + to.CloseGump( typeof( NewPlayerVendorOwnerGump ) ); + to.CloseGump( typeof( NewPlayerVendorCustomizeGump ) ); + + to.SendGump( new NewPlayerVendorOwnerGump( this ) ); + } + else + { + to.CloseGump( typeof( PlayerVendorOwnerGump ) ); + to.CloseGump( typeof( PlayerVendorCustomizeGump ) ); + + to.SendGump( new PlayerVendorOwnerGump( this ) ); + } + } + + public void OpenBackpack( Mobile from ) + { + if ( this.Backpack != null ) + { + SayTo( from, IsOwner( from ) ? 1010642 : 503208 ); // Take a look at my/your goods. + + this.Backpack.DisplayTo( from ); + } + } + + public static void TryToBuy( Item item, Mobile from ) + { + PlayerVendor vendor = item.RootParent as PlayerVendor; + + if ( vendor == null || !vendor.CanInteractWith( from, false ) ) + return; + + if ( vendor.IsOwner( from ) ) + { + vendor.SayTo( from, 503212 ); // You own this shop, just take what you want. + return; + } + + VendorItem vi = vendor.GetVendorItem( item ); + + if ( vi == null ) + { + vendor.SayTo( from, 503216 ); // You can't buy that. + } + else if ( !vi.IsForSale ) + { + vendor.SayTo( from, 503202 ); // This item is not for sale. + } + else if ( vi.Created + TimeSpan.FromMinutes( 1.0 ) > DateTime.Now ) + { + from.SendMessage( "You cannot buy this item right now. Please wait one minute and try again." ); + } + else + { + from.CloseGump( typeof( PlayerVendorBuyGump ) ); + from.SendGump( new PlayerVendorBuyGump( vendor, vi ) ); + } + } + + public void CollectGold( Mobile to ) + { + if ( HoldGold > 0 ) + { + SayTo( to, "How much of the {0} that I'm holding would you like?", HoldGold.ToString() ); + to.SendMessage( "Enter the amount of gold you wish to withdraw (ESC = CANCEL):" ); + + to.Prompt = new CollectGoldPrompt( this ); + } + else + { + SayTo( to, 503215 ); // I am holding no gold for you. + } + } + + public int GiveGold( Mobile to, int amount ) + { + if ( amount <= 0 ) + return 0; + + if ( amount > HoldGold ) + { + SayTo( to, "I'm sorry, but I'm only holding {0} gold for you.", HoldGold.ToString() ); + return 0; + } + + int amountGiven = Innkeeper.DepositUpTo( to, amount ); + HoldGold -= amountGiven; + + if ( amountGiven > 0 ) + { + to.SendLocalizedMessage( 1060397, amountGiven.ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + } + + if ( amountGiven == 0 ) + { + SayTo( to, 1070755 ); // Your inn chest cannot hold the gold you are requesting. I will keep the gold until you can take it. + } + else if ( amount > amountGiven ) + { + SayTo( to, 1070756 ); // I can only give you part of the gold now, as your inn chest is too full to hold the full amount. + } + else if ( HoldGold > 0 ) + { + SayTo( to, 1042639 ); // Your gold has been transferred. + } + else + { + SayTo( to, 503234 ); // All the gold I have been carrying for you has been deposited into your inn chest. + } + + return amountGiven; + } + + public void Dismiss( Mobile from ) + { + Container pack = this.Backpack; + + if ( pack != null && pack.Items.Count > 0 ) + { + SayTo( from, 1038325 ); // You cannot dismiss me while I am holding your goods. + return; + } + + if ( HoldGold > 0 ) + { + GiveGold( from, HoldGold ); + + if ( HoldGold > 0 ) + return; + } + + Destroy( true ); + } + + public void Rename( Mobile from ) + { + from.SendLocalizedMessage( 1062494 ); // Enter a new name for your vendor (20 characters max): + + from.Prompt = new VendorNamePrompt( this ); + } + + public void RenameShop( Mobile from ) + { + from.SendLocalizedMessage( 1062433 ); // Enter a new name for your shop (20 chars max): + + from.Prompt = new ShopNamePrompt( this ); + } + + public bool CheckTeleport( Mobile to ) + { + if ( Deleted || !IsOwner( to ) || House == null || this.Map == Map.Internal ) + return false; + + if ( House.IsInside( to ) || to.Map != House.Map || !House.InRange( to, 5 ) ) + return false; + + if ( Placeholder == null ) + { + Placeholder = new PlayerVendorPlaceholder( this ); + Placeholder.MoveToWorld( this.Location, this.Map ); + + this.MoveToWorld( to.Location, to.Map ); + + to.SendLocalizedMessage( 1062431 ); // This vendor has been moved out of the house to your current location temporarily. The vendor will return home automatically after two minutes have passed once you are done managing its inventory or customizing it. + } + else + { + Placeholder.RestartTimer(); + + to.SendLocalizedMessage( 1062430 ); // This vendor is currently temporarily in a location outside its house. The vendor will return home automatically after two minutes have passed once you are done managing its inventory or customizing it. + } + + return true; + } + + public void Return() + { + if ( Placeholder != null ) + Placeholder.Delete(); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + if ( from.Alive && Placeholder != null && IsOwner( from ) ) + { + list.Add( new ReturnVendorEntry( this ) ); + } + + base.GetContextMenuEntries( from, list ); + } + + private class ReturnVendorEntry : ContextMenuEntry + { + private PlayerVendor m_Vendor; + + public ReturnVendorEntry( PlayerVendor vendor ) : base( 6214 ) + { + m_Vendor = vendor; + } + + public override void OnClick() + { + Mobile from = Owner.From; + + if ( !m_Vendor.Deleted && m_Vendor.IsOwner( from ) && from.CheckAlive() ) + m_Vendor.Return(); + } + } + + public override bool HandlesOnSpeech( Mobile from ) + { + return ( from.Alive && from.GetDistanceToSqrt( this ) <= 3 ); + } + + public bool WasNamed( string speech ) + { + return this.Name != null && Insensitive.StartsWith( speech, this.Name ); + } + + public override void OnSpeech( SpeechEventArgs e ) + { + Mobile from = e.Mobile; + + if ( e.Handled || !from.Alive || from.GetDistanceToSqrt( this ) > 3 ) + return; + + if ( e.HasKeyword( 0x3C ) || (e.HasKeyword( 0x171 ) && WasNamed( e.Speech )) ) // vendor buy, *buy* + { + if ( IsOwner( from ) ) + { + SayTo( from, 503212 ); // You own this shop, just take what you want. + } + else if ( House == null || !House.IsBanned( from ) ) + { + from.SendLocalizedMessage( 503213 ); // Select the item you wish to buy. + from.Target = new PVBuyTarget(); + + e.Handled = true; + } + } + else if ( e.HasKeyword( 0x3D ) || (e.HasKeyword( 0x172 ) && WasNamed( e.Speech )) ) // vendor browse, *browse + { + if ( House != null && House.IsBanned( from ) && !IsOwner( from ) ) + { + SayTo( from, 1062674 ); // You can't shop from this home as you have been banned from this establishment. + } + else + { + if ( WasNamed( e.Speech ) ) + OpenBackpack( from ); + else + { + IPooledEnumerable mobiles = e.Mobile.GetMobilesInRange( 2 ); + + foreach ( Mobile m in mobiles ) + if ( m is PlayerVendor && m.CanSee( e.Mobile ) && m.InLOS( e.Mobile ) ) + ((PlayerVendor)m).OpenBackpack( from ); + + mobiles.Free(); + } + + e.Handled = true; + } + } + else if ( e.HasKeyword( 0x3E ) || (e.HasKeyword( 0x173 ) && WasNamed( e.Speech )) ) // vendor collect, *collect + { + if ( IsOwner( from ) ) + { + CollectGold( from ); + + e.Handled = true; + } + } + else if ( e.HasKeyword( 0x3F ) || (e.HasKeyword( 0x174 ) && WasNamed( e.Speech )) ) // vendor status, *status + { + if ( IsOwner( from ) ) + { + SendOwnerGump( from ); + + e.Handled = true; + } + else + { + SayTo( from, 503226 ); // What do you care? You don't run this shop. + } + } + else if ( e.HasKeyword( 0x40 ) || (e.HasKeyword( 0x175 ) && WasNamed( e.Speech )) ) // vendor dismiss, *dismiss + { + if ( IsOwner( from ) ) + { + Dismiss( from ); + + e.Handled = true; + } + } + else if ( e.HasKeyword( 0x41 ) || (e.HasKeyword( 0x176 ) && WasNamed( e.Speech )) ) // vendor cycle, *cycle + { + if ( IsOwner( from ) ) + { + this.Direction = this.GetDirectionTo( from ); + + e.Handled = true; + } + } + } + + private class PayTimer : Timer + { + public static TimeSpan GetInterval() + { + if ( BaseHouse.NewVendorSystem ) + return TimeSpan.FromDays( 1.0 ); + else + return TimeSpan.FromMinutes( Clock.MinutesPerUODay ); + } + + private PlayerVendor m_Vendor; + + public PayTimer( PlayerVendor vendor, TimeSpan delay ) : base( delay, GetInterval() ) + { + m_Vendor = vendor; + + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + m_Vendor.m_NextPayTime = DateTime.Now + this.Interval; + + int pay; + int totalGold; + if ( BaseHouse.NewVendorSystem ) + { + pay = m_Vendor.ChargePerRealWorldDay; + totalGold = m_Vendor.HoldGold; + } + else + { + pay = m_Vendor.ChargePerDay; + totalGold = m_Vendor.BankAccount + m_Vendor.HoldGold; + } + + if ( pay > totalGold ) + { + m_Vendor.Destroy( !BaseHouse.NewVendorSystem ); + } + else + { + if ( !BaseHouse.NewVendorSystem ) + { + if ( m_Vendor.BankAccount >= pay ) + { + m_Vendor.BankAccount -= pay; + pay = 0; + } + else + { + pay -= m_Vendor.BankAccount; + m_Vendor.BankAccount = 0; + } + } + + m_Vendor.HoldGold -= pay; + } + } + } + + [PlayerVendorTarget] + private class PVBuyTarget : Target + { + public PVBuyTarget() : base( 3, false, TargetFlags.None ) + { + AllowNonlocal = true; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Item ) + { + TryToBuy( (Item) targeted, from ); + } + } + } + + private class VendorPricePrompt : Prompt + { + private PlayerVendor m_Vendor; + private VendorItem m_VI; + + public VendorPricePrompt( PlayerVendor vendor, VendorItem vi ) + { + m_Vendor = vendor; + m_VI = vi; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( !m_VI.Valid || !m_Vendor.CanInteractWith( from, true ) ) + return; + + string firstWord; + + int sep = text.IndexOfAny( new char[] { ' ', ',' } ); + if ( sep >= 0 ) + firstWord = text.Substring( 0, sep ); + else + firstWord = text; + + int price; + string description; + + if ( int.TryParse( firstWord, out price ) ) + { + if ( sep >= 0 ) + description = text.Substring( sep + 1 ).Trim(); + else + description = ""; + } + else + { + price = -1; + description = text.Trim(); + } + + SetInfo( from, price, Utility.FixHtml( description ) ); + } + + public override void OnCancel( Mobile from ) + { + if ( !m_VI.Valid || !m_Vendor.CanInteractWith( from, true ) ) + return; + + SetInfo( from, -1, "" ); + } + + private void SetInfo( Mobile from, int price, string description ) + { + Item item = m_VI.Item; + + bool setPrice = false; + + if ( price < 0 ) // Not for sale + { + price = -1; + + if ( item is Container ) + { + if ( item is LockableContainer && ((LockableContainer)item).Locked ) + m_Vendor.SayTo( from, 1043298 ); // Locked items may not be made not-for-sale. + else if ( item.Items.Count > 0 ) + m_Vendor.SayTo( from, 1043299 ); // To be not for sale, all items in a container must be for sale. + else + setPrice = true; + } + else if ( item is BaseBook ) + { + setPrice = true; + } + else + { + m_Vendor.SayTo( from, 1043301 ); // Only the following may be made not-for-sale: books, containers, keyrings, and items in for-sale containers. + } + } + else + { + if ( price > 100000000 ) + { + price = 100000000; + from.SendMessage( "You cannot price items above 100,000,000 gold. The price has been adjusted." ); + } + + setPrice = true; + } + + if ( setPrice ) + { + m_Vendor.SetVendorItem( item, price, description ); + } + else + { + m_VI.Description = description; + } + } + } + + private class CollectGoldPrompt : Prompt + { + private PlayerVendor m_Vendor; + + public CollectGoldPrompt( PlayerVendor vendor ) + { + m_Vendor = vendor; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( !m_Vendor.CanInteractWith( from, true ) ) + return; + + text = text.Trim(); + + int amount; + + if ( !int.TryParse( text, out amount ) ) + amount = 0; + + GiveGold( from, amount ); + } + + public override void OnCancel( Mobile from ) + { + if ( !m_Vendor.CanInteractWith( from, true ) ) + return; + + GiveGold( from, 0 ); + } + + private void GiveGold( Mobile to, int amount ) + { + if ( amount <= 0 ) + { + m_Vendor.SayTo( to, "Very well. I will hold on to the money for now then." ); + } + else + { + m_Vendor.GiveGold( to, amount ); + } + } + } + + private class VendorNamePrompt : Prompt + { + private PlayerVendor m_Vendor; + + public VendorNamePrompt( PlayerVendor vendor ) + { + m_Vendor = vendor; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( !m_Vendor.CanInteractWith( from, true ) ) + return; + + string name = text.Trim(); + + if ( !NameVerification.Validate( name, 1, 20, true, true, true, 0, NameVerification.Empty ) ) + { + m_Vendor.SayTo( from, "That name is unacceptable." ); + return; + } + + m_Vendor.Name = Utility.FixHtml( name ); + + from.SendLocalizedMessage( 1062496 ); // Your vendor has been renamed. + + from.SendGump( new NewPlayerVendorOwnerGump( m_Vendor ) ); + } + } + + private class ShopNamePrompt : Prompt + { + private PlayerVendor m_Vendor; + + public ShopNamePrompt( PlayerVendor vendor ) + { + m_Vendor = vendor; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( !m_Vendor.CanInteractWith( from, true ) ) + return; + + string name = text.Trim(); + + if ( !NameVerification.Validate( name, 1, 20, true, true, true, 0, NameVerification.Empty ) ) + { + m_Vendor.SayTo( from, "That name is unacceptable." ); + return; + } + + m_Vendor.ShopName = Utility.FixHtml( name ); + + from.SendGump( new NewPlayerVendorOwnerGump( m_Vendor ) ); + } + } + } + + public class PlayerVendorPlaceholder : Item + { + private PlayerVendor m_Vendor; + private ExpireTimer m_Timer; + + [CommandProperty( AccessLevel.GameMaster )] + public PlayerVendor Vendor{ get{ return m_Vendor; } } + + public PlayerVendorPlaceholder( PlayerVendor vendor ) : base( 0x1F28 ) + { + Hue = 0x672; + Movable = false; + + m_Vendor = vendor; + + m_Timer = new ExpireTimer( this ); + m_Timer.Start(); + } + + public PlayerVendorPlaceholder( Serial serial ) : base( serial ) + { + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Vendor != null ) + list.Add( 1062498, m_Vendor.Name ); // reserved for vendor ~1_NAME~ + } + + public void RestartTimer() + { + m_Timer.Stop(); + m_Timer.Start(); + } + + private class ExpireTimer : Timer + { + private PlayerVendorPlaceholder m_Placeholder; + + public ExpireTimer( PlayerVendorPlaceholder placeholder ) : base( TimeSpan.FromMinutes( 2.0 ) ) + { + m_Placeholder = placeholder; + + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + m_Placeholder.Delete(); + } + } + + public override void OnDelete() + { + if ( m_Vendor != null && !m_Vendor.Deleted ) + { + m_Vendor.MoveToWorld( this.Location, this.Map ); + m_Vendor.Placeholder = null; + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( (int) 0 ); + + writer.Write( (Mobile) m_Vendor ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + m_Vendor = (PlayerVendor) reader.ReadMobile(); + + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( Delete ) ); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/PresetMapBuy.cs b/Scripts/Mobiles/Base/PresetMapBuy.cs new file mode 100644 index 0000000..99ad1a0 --- /dev/null +++ b/Scripts/Mobiles/Base/PresetMapBuy.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections; +using Server.Items; + +namespace Server.Mobiles +{ + public class PresetMapBuyInfo : GenericBuyInfo + { + private PresetMapEntry m_Entry; + + public override bool CanCacheDisplay{ get{ return false; } } + + public PresetMapBuyInfo( PresetMapEntry entry, int price, int amount ) : base( entry.Name.ToString(), null, price, amount, 0x14EC, 0 ) + { + m_Entry = entry; + } + + public override IEntity GetEntity() + { + return new PresetMap( m_Entry ); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/RentedVendor.cs b/Scripts/Mobiles/Base/RentedVendor.cs new file mode 100644 index 0000000..03d0043 --- /dev/null +++ b/Scripts/Mobiles/Base/RentedVendor.cs @@ -0,0 +1,426 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Gumps; +using Server.Multis; +using Server.ContextMenus; +using Server.Prompts; + +namespace Server.Mobiles +{ + public class VendorRentalDuration + { + public static readonly VendorRentalDuration[] Instances = new VendorRentalDuration[] + { + new VendorRentalDuration( TimeSpan.FromDays( 7.0 ), 1062361 ), // 1 Week + new VendorRentalDuration( TimeSpan.FromDays( 14.0 ), 1062362 ), // 2 Weeks + new VendorRentalDuration( TimeSpan.FromDays( 21.0 ), 1062363 ), // 3 Weeks + new VendorRentalDuration( TimeSpan.FromDays( 28.0 ), 1062364 ) // 1 Month + }; + + private TimeSpan m_Duration; + private int m_Name; + + public TimeSpan Duration{ get{ return m_Duration; } } + public int Name{ get{ return m_Name; } } + + public int ID + { + get + { + for ( int i = 0; i < Instances.Length; i++ ) + { + if ( Instances[i] == this ) + return i; + } + + return 0; + } + } + + private VendorRentalDuration( TimeSpan duration, int name ) + { + m_Duration = duration; + m_Name = name; + } + } + + public class RentedVendor : PlayerVendor + { + private VendorRentalDuration m_RentalDuration; + private int m_RentalPrice; + private bool m_LandlordRenew; + private bool m_RenterRenew; + private int m_RenewalPrice; + + private int m_RentalGold; + + private DateTime m_RentalExpireTime; + private Timer m_RentalExpireTimer; + + public RentedVendor( Mobile owner, BaseHouse house, VendorRentalDuration duration, int rentalPrice, bool landlordRenew, int rentalGold ) : base( owner, house ) + { + m_RentalDuration = duration; + m_RentalPrice = m_RenewalPrice = rentalPrice; + m_LandlordRenew = landlordRenew; + m_RenterRenew = false; + + m_RentalGold = rentalGold; + + m_RentalExpireTime = DateTime.Now + duration.Duration; + m_RentalExpireTimer = new RentalExpireTimer( this, duration.Duration ); + m_RentalExpireTimer.Start(); + } + + public RentedVendor( Serial serial ) : base( serial ) + { + } + + public VendorRentalDuration RentalDuration + { + get{ return m_RentalDuration; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int RentalPrice + { + get{ return m_RentalPrice; } + set{ m_RentalPrice = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool LandlordRenew + { + get{ return m_LandlordRenew; } + set{ m_LandlordRenew = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool RenterRenew + { + get{ return m_RenterRenew; } + set{ m_RenterRenew = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Renew + { + get{ return LandlordRenew && RenterRenew && House != null && House.DecayType != DecayType.Condemned; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int RenewalPrice + { + get{ return m_RenewalPrice; } + set{ m_RenewalPrice = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int RentalGold + { + get{ return m_RentalGold; } + set{ m_RentalGold = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime RentalExpireTime + { + get{ return m_RentalExpireTime; } + } + + public override bool IsOwner( Mobile m ) + { + return m == Owner || m.AccessLevel >= AccessLevel.GameMaster; + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Landlord + { + get + { + if ( House != null ) + return House.Owner; + + return null; + } + } + + public bool IsLandlord( Mobile m ) + { + return House != null && House.IsOwner( m ); + } + + public void ComputeRentalExpireDelay( out int days, out int hours ) + { + TimeSpan delay = RentalExpireTime - DateTime.Now; + + if ( delay <= TimeSpan.Zero ) + { + days = 0; + hours = 0; + } + else + { + days = delay.Days; + hours = delay.Hours; + } + } + + public void SendRentalExpireMessage( Mobile to ) + { + int days, hours; + ComputeRentalExpireDelay( out days, out hours ); + + to.SendLocalizedMessage( 1062464, days.ToString() + "\t" + hours.ToString() ); // The rental contract on this vendor will expire in ~1_DAY~ day(s) and ~2_HOUR~ hour(s). + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + m_RentalExpireTimer.Stop(); + } + + public override void Destroy( bool toBackpack ) + { + if ( RentalGold > 0 && House != null && House.IsAosRules ) + { + if ( House.MovingCrate == null ) + House.MovingCrate = new MovingCrate( House ); + + Innkeeper.Deposit( House.MovingCrate, RentalGold ); + RentalGold = 0; + } + + base.Destroy( toBackpack ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + if ( from.Alive ) + { + if ( IsOwner( from ) ) + { + list.Add( new ContractOptionsEntry( this ) ); + } + else if ( IsLandlord( from ) ) + { + if ( RentalGold > 0 ) + list.Add( new CollectRentEntry( this ) ); + + list.Add( new TerminateContractEntry( this ) ); + list.Add( new ContractOptionsEntry( this ) ); + } + } + + base.GetContextMenuEntries( from, list ); + } + + private class ContractOptionsEntry : ContextMenuEntry + { + private RentedVendor m_Vendor; + + public ContractOptionsEntry( RentedVendor vendor ) : base( 6209 ) + { + m_Vendor = vendor; + } + + public override void OnClick() + { + Mobile from = Owner.From; + + if ( m_Vendor.Deleted || !from.CheckAlive() ) + return; + + if ( m_Vendor.IsOwner( from ) ) + { + from.CloseGump( typeof( RenterVendorRentalGump ) ); + from.SendGump( new RenterVendorRentalGump( m_Vendor ) ); + + m_Vendor.SendRentalExpireMessage( from ); + } + else if ( m_Vendor.IsLandlord( from ) ) + { + from.CloseGump( typeof( LandlordVendorRentalGump ) ); + from.SendGump( new LandlordVendorRentalGump( m_Vendor ) ); + + m_Vendor.SendRentalExpireMessage( from ); + } + } + } + + private class CollectRentEntry : ContextMenuEntry + { + private RentedVendor m_Vendor; + + public CollectRentEntry( RentedVendor vendor ) : base( 6212 ) + { + m_Vendor = vendor; + } + + public override void OnClick() + { + Mobile from = Owner.From; + + if ( m_Vendor.Deleted || !from.CheckAlive() || !m_Vendor.IsLandlord( from ) ) + return; + + if ( m_Vendor.RentalGold > 0 ) + { + int depositedGold = Innkeeper.DepositUpTo( from, m_Vendor.RentalGold ); + m_Vendor.RentalGold -= depositedGold; + + if ( depositedGold > 0 ) + from.SendLocalizedMessage( 1060397, depositedGold.ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + + if ( m_Vendor.RentalGold > 0 ) + from.SendLocalizedMessage( 500390 ); // Your inn chest is full. + } + } + } + + private class TerminateContractEntry : ContextMenuEntry + { + private RentedVendor m_Vendor; + + public TerminateContractEntry( RentedVendor vendor ) : base( 6218 ) + { + m_Vendor = vendor; + } + + public override void OnClick() + { + Mobile from = Owner.From; + + if ( m_Vendor.Deleted || !from.CheckAlive() || !m_Vendor.IsLandlord( from ) ) + return; + + from.SendLocalizedMessage( 1062503 ); // Enter the amount of gold you wish to offer the renter in exchange for immediate termination of this contract? + from.Prompt = new RefundOfferPrompt( m_Vendor ); + } + } + + private class RefundOfferPrompt : Prompt + { + private RentedVendor m_Vendor; + + public RefundOfferPrompt( RentedVendor vendor ) + { + m_Vendor = vendor; + } + + public override void OnResponse( Mobile from, string text ) + { + if ( !m_Vendor.CanInteractWith( from, false ) || !m_Vendor.IsLandlord( from ) ) + return; + + text = text.Trim(); + + int amount; + + if ( !int.TryParse( text, out amount ) ) + amount = -1; + + Mobile owner = m_Vendor.Owner; + if ( owner == null ) + return; + + if ( amount < 0 ) + { + from.SendLocalizedMessage( 1062506 ); // You did not enter a valid amount. Offer canceled. + } + else if ( Innkeeper.GetBalance( from ) < amount ) + { + from.SendLocalizedMessage( 1062507 ); // You do not have that much money in your inn chest. + } + else if ( owner.Map != m_Vendor.Map || !owner.InRange( m_Vendor, 5 ) ) + { + from.SendLocalizedMessage( 1062505 ); // The renter must be closer to the vendor in order for you to make this offer. + } + else + { + from.SendLocalizedMessage( 1062504 ); // Please wait while the renter considers your offer. + + owner.CloseGump( typeof( VendorRentalRefundGump ) ); + owner.SendGump( new VendorRentalRefundGump( m_Vendor, from, amount ) ); + } + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + + writer.WriteEncodedInt( m_RentalDuration.ID ); + + writer.Write( (int) m_RentalPrice ); + writer.Write( (bool) m_LandlordRenew ); + writer.Write( (bool) m_RenterRenew ); + writer.Write( (int) m_RenewalPrice ); + + writer.Write( (int) m_RentalGold ); + + writer.WriteDeltaTime( (DateTime) m_RentalExpireTime ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + int durationID = reader.ReadEncodedInt(); + if ( durationID < VendorRentalDuration.Instances.Length ) + m_RentalDuration = VendorRentalDuration.Instances[durationID]; + else + m_RentalDuration = VendorRentalDuration.Instances[0]; + + m_RentalPrice = reader.ReadInt(); + m_LandlordRenew = reader.ReadBool(); + m_RenterRenew = reader.ReadBool(); + m_RenewalPrice = reader.ReadInt(); + + m_RentalGold = reader.ReadInt(); + + m_RentalExpireTime = reader.ReadDeltaTime(); + + TimeSpan delay = m_RentalExpireTime - DateTime.Now; + m_RentalExpireTimer = new RentalExpireTimer( this, delay > TimeSpan.Zero ? delay : TimeSpan.Zero ); + m_RentalExpireTimer.Start(); + } + + private class RentalExpireTimer : Timer + { + private RentedVendor m_Vendor; + + public RentalExpireTimer( RentedVendor vendor, TimeSpan delay ) : base( delay, vendor.RentalDuration.Duration ) + { + m_Vendor = vendor; + + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + int renewalPrice = m_Vendor.RenewalPrice; + + if ( m_Vendor.Renew && m_Vendor.HoldGold >= renewalPrice ) + { + m_Vendor.HoldGold -= renewalPrice; + m_Vendor.RentalGold += renewalPrice; + + m_Vendor.RentalPrice = renewalPrice; + + m_Vendor.m_RentalExpireTime = DateTime.Now + m_Vendor.RentalDuration.Duration; + } + else + { + m_Vendor.Destroy( false ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Base/VendorInventory.cs b/Scripts/Mobiles/Base/VendorInventory.cs new file mode 100644 index 0000000..eb41ee4 --- /dev/null +++ b/Scripts/Mobiles/Base/VendorInventory.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Multis; + +namespace Server.Mobiles +{ + public class VendorInventory + { + public static readonly TimeSpan GracePeriod = TimeSpan.FromDays( 7.0 ); + + private BaseHouse m_House; + private string m_VendorName; + private string m_ShopName; + private Mobile m_Owner; + + private List m_Items; + private int m_Gold; + + private DateTime m_ExpireTime; + private Timer m_ExpireTimer; + + public VendorInventory( BaseHouse house, Mobile owner, string vendorName, string shopName ) + { + m_House = house; + m_Owner = owner; + m_VendorName = vendorName; + m_ShopName = shopName; + + m_Items = new List(); + + m_ExpireTime = DateTime.Now + GracePeriod; + m_ExpireTimer = new ExpireTimer( this, GracePeriod ); + m_ExpireTimer.Start(); + } + + public BaseHouse House + { + get{ return m_House; } + set{ m_House = value; } + } + + public string VendorName + { + get{ return m_VendorName; } + set{ m_VendorName = value; } + } + + public string ShopName + { + get{ return m_ShopName; } + set{ m_ShopName = value; } + } + + public Mobile Owner + { + get{ return m_Owner; } + set{ m_Owner = value; } + } + + public List Items + { + get{ return m_Items; } + } + + public int Gold + { + get{ return m_Gold; } + set{ m_Gold = value; } + } + + public DateTime ExpireTime + { + get{ return m_ExpireTime; } + } + + public void AddItem( Item item ) + { + item.Internalize(); + m_Items.Add( item ); + } + + public void Delete() + { + foreach ( Item item in Items ) + { + item.Delete(); + } + + Items.Clear(); + Gold = 0; + + if ( House != null ) + House.VendorInventories.Remove( this ); + + m_ExpireTimer.Stop(); + } + + public void Serialize( GenericWriter writer ) + { + writer.WriteEncodedInt( 0 ); // version + + writer.Write( (Mobile) m_Owner ); + writer.Write( (string) m_VendorName ); + writer.Write( (string) m_ShopName ); + + writer.Write( m_Items, true ); + writer.Write( (int) m_Gold ); + + writer.WriteDeltaTime( m_ExpireTime ); + } + + public VendorInventory( BaseHouse house, GenericReader reader ) + { + m_House = house; + + int version = reader.ReadEncodedInt(); + + m_Owner = reader.ReadMobile(); + m_VendorName = reader.ReadString(); + m_ShopName = reader.ReadString(); + + m_Items = reader.ReadStrongItemList(); + m_Gold = reader.ReadInt(); + + m_ExpireTime = reader.ReadDeltaTime(); + + if ( m_Items.Count == 0 && m_Gold == 0 ) + { + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( Delete ) ); + } + else + { + TimeSpan delay = m_ExpireTime - DateTime.Now; + m_ExpireTimer = new ExpireTimer( this, delay > TimeSpan.Zero ? delay : TimeSpan.Zero ); + m_ExpireTimer.Start(); + } + } + + private class ExpireTimer : Timer + { + private VendorInventory m_Inventory; + + public ExpireTimer( VendorInventory inventory, TimeSpan delay ) : base( delay ) + { + m_Inventory = inventory; + + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + BaseHouse house = m_Inventory.House; + + if ( house != null ) + { + if ( m_Inventory.Gold > 0 ) + { + if ( house.MovingCrate == null ) + house.MovingCrate = new MovingCrate( house ); + + Innkeeper.Deposit( house.MovingCrate, m_Inventory.Gold ); + } + + foreach ( Item item in m_Inventory.Items ) + { + if ( !item.Deleted ) + house.DropToMovingCrate( item ); + } + + m_Inventory.Gold = 0; + m_Inventory.Items.Clear(); + } + + m_Inventory.Delete(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/AntLion.cs b/Scripts/Mobiles/Bugs/AntLion.cs new file mode 100644 index 0000000..ec7d046 --- /dev/null +++ b/Scripts/Mobiles/Bugs/AntLion.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an ant lion corpse" )] + public class AntLion : BaseCreature + { + [Constructable] + public AntLion() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ant lion"; + Body = 11; + BaseSoundID = 1006; + + SetStr( 296, 320 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 151, 162 ); + + SetDamage( 7, 21 ); + + SetSkill( SkillName.MagicResist, 70.0 ); + SetSkill( SkillName.Tactics, 90.0 ); + SetSkill( SkillName.HandToHand, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 45; + + PackItem( new Bone( 3 ) ); + + Item orepile = new IronOre(); + orepile.Amount = Utility.RandomMinMax(10, 100); + orepile.ItemID = 0x19B9; + PackItem(orepile); + + // TODO: skeleton + } + + public override int GetAngerSound() + { + return 0x5A; + } + + public override int GetIdleSound() + { + return 0x5A; + } + + public override int GetAttackSound() + { + return 0x164; + } + + public override int GetHurtSound() + { + return 0x187; + } + + public override int GetDeathSound() + { + return 0x1BA; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + } + + public AntLion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/AntaurLord.cs b/Scripts/Mobiles/Bugs/AntaurLord.cs new file mode 100644 index 0000000..b038c4f --- /dev/null +++ b/Scripts/Mobiles/Bugs/AntaurLord.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "an antaur corpse" )] + public class AntaurLord : BaseCreature + { + [Constructable] + public AntaurLord() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an antaur lord"; + Body = 314; + BaseSoundID = 0x4F0; + + SetStr( 588, 660 ); + SetDex( 303, 375 ); + SetInt( 108, 180 ); + + SetHits( 288, 321 ); + + SetDamage( 9, 30 ); + + SetSkill( SkillName.MagicResist, 90.0, 120.0 ); + SetSkill( SkillName.Tactics, 90.0, 120.0 ); + SetSkill( SkillName.HandToHand, 90.0, 120.0 ); + + Fame = 9000; + Karma = -9000; + + VirtualArmor = 55; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.MedPotions ); + AddLoot( LootPack.HighPotions ); + AddLoot( LootPack.Gems, 3 ); + } + + public AntaurLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + Hue = 0; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/AntaurQueen.cs b/Scripts/Mobiles/Bugs/AntaurQueen.cs new file mode 100644 index 0000000..b6724d8 --- /dev/null +++ b/Scripts/Mobiles/Bugs/AntaurQueen.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "an antaur corpse" )] + public class AntaurQueen : BaseCreature + { + [Constructable] + public AntaurQueen() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an antaur queen"; + Body = 179; + BaseSoundID = 0x4F0; + + SetStr( 296, 320 ); + SetDex( 121, 145 ); + SetInt( 76, 100 ); + + SetHits( 151, 162 ); + + SetDamage( 10, 15 ); + + SetSkill( SkillName.Concentration, 70.1, 85.0 ); + SetSkill( SkillName.Magery, 70.1, 85.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 70.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 45; + } + + public AntaurQueen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + Hue = 0; + } + } +} diff --git a/Scripts/Mobiles/Bugs/AntaurSoldier.cs b/Scripts/Mobiles/Bugs/AntaurSoldier.cs new file mode 100644 index 0000000..ba760d9 --- /dev/null +++ b/Scripts/Mobiles/Bugs/AntaurSoldier.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "an antaur corpse" )] + public class AntaurSoldier : BaseCreature + { + [Constructable] + public AntaurSoldier() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an antaur soldier"; + Body = 178; + BaseSoundID = 0x4F0; + + SetStr( 196, 220 ); + SetDex( 101, 125 ); + SetInt( 36, 60 ); + + SetHits( 96, 107 ); + + SetDamage( 5, 15 ); + + SetSkill( SkillName.MagicResist, 60.0 ); + SetSkill( SkillName.Tactics, 80.0 ); + SetSkill( SkillName.HandToHand, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 35; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public AntaurSoldier( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + Hue = 0; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/AntaurWorker.cs b/Scripts/Mobiles/Bugs/AntaurWorker.cs new file mode 100644 index 0000000..e8c12d2 --- /dev/null +++ b/Scripts/Mobiles/Bugs/AntaurWorker.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an antaur corpse" )] + public class AntaurWorker : BaseCreature + { + [Constructable] + public AntaurWorker() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an antaur worker"; + Body = 177; + BaseSoundID = 0x57F; + + SetStr( 96, 120 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 58, 72 ); + + SetDamage( 5, 7 ); + + SetSkill( SkillName.MagicResist, 60.0 ); + SetSkill( SkillName.Tactics, 65.0 ); + SetSkill( SkillName.HandToHand, 60.0 ); + + Fame = 1500; + Karma = -1500; + + VirtualArmor = 28; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public AntaurWorker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + Hue = 0; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/ArcaneScarab.cs b/Scripts/Mobiles/Bugs/ArcaneScarab.cs new file mode 100644 index 0000000..df2fa24 --- /dev/null +++ b/Scripts/Mobiles/Bugs/ArcaneScarab.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a beetle corpse" )] + public class ArcaneScarab : BaseCreature + { + [Constructable] + public ArcaneScarab() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an arcane scarab"; + Body = 68; + BaseSoundID = 0x4E5; + + SetStr( 401, 460 ); + SetDex( 121, 170 ); + SetInt( 376, 450 ); + + SetHits( 301, 360 ); + + SetDamage( 15, 22 ); + + SetSkill( SkillName.Concentration, 100.1, 125.0 ); + SetSkill( SkillName.Magery, 100.1, 110.0 ); + SetSkill( SkillName.Poisoning, 120.1, 140.0 ); + SetSkill( SkillName.MagicResist, 95.1, 110.0 ); + SetSkill( SkillName.Tactics, 78.1, 93.0 ); + SetSkill( SkillName.HandToHand, 70.1, 77.5 ); + + Fame = 15000; + Karma = -15000; + VirtualArmor = 48; + + switch ( Utility.Random( 10 )) + { + case 0: PackItem( new LeftArm() ); break; + case 1: PackItem( new RightArm() ); break; + case 2: PackItem( new Torso() ); break; + case 3: PackItem( new Bone() ); break; + case 4: PackItem( new RibCage() ); break; + case 5: PackItem( new RibCage() ); break; + case 6: PackItem( new BonePile() ); break; + case 7: PackItem( new BonePile() ); break; + case 8: PackItem( new BonePile() ); break; + case 9: PackItem( new BonePile() ); break; + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.MedScrolls, 1 ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public ArcaneScarab( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/Beetle.cs b/Scripts/Mobiles/Bugs/Beetle.cs new file mode 100644 index 0000000..e10e4ed --- /dev/null +++ b/Scripts/Mobiles/Bugs/Beetle.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a beetle corpse" )] + public class Beetle : BaseCreature + { + [Constructable] + public Beetle() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant beetle"; + Body = 254; + BaseSoundID = 0x4E5; + + SetStr( 296, 320 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 180, 220 ); + SetMana( 0 ); + + SetDamage( 7, 16 ); + + SetSkill( SkillName.MagicResist, 60, 80.0 ); + SetSkill( SkillName.Tactics, 80, 100.0 ); + SetSkill( SkillName.HandToHand, 80, 100.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 24; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public Beetle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/BloodSpider.cs b/Scripts/Mobiles/Bugs/BloodSpider.cs new file mode 100644 index 0000000..dbbf922 --- /dev/null +++ b/Scripts/Mobiles/Bugs/BloodSpider.cs @@ -0,0 +1,88 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a spider corpse" )] + public class BloodSpider : BaseCreature + { + [Constructable] + public BloodSpider() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a blood spider"; + Body = 193; + BaseSoundID = 0x388; + + SetStr( 76, 100 ); + SetDex( 96, 115 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + + SetDamage( 5, 17 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 65.1, 80.0 ); + SetSkill( SkillName.HandToHand, 70.1, 85.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 24; + + PackItem( new SpidersSilk( 5 ) ); + PackItem( new LesserPoisonPotion() ); + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Deadly; } } + + public void DrainBlood( Mobile m ) + { + DoHarmful( m ); + new Blood().MoveToWorld( m.Location, m.Map ); + m.SendMessage( "The creature feeds on your blood!" ); + int toDrain = Utility.RandomMinMax( 2, 10 ); + m.PlaySound( 0x23F ); + Hits += toDrain; + m.Damage( toDrain, this ); + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + DrainBlood( defender ); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + DrainBlood( attacker ); + } + + public BloodSpider( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/CarcassWorm.cs b/Scripts/Mobiles/Bugs/CarcassWorm.cs new file mode 100644 index 0000000..31e87fa --- /dev/null +++ b/Scripts/Mobiles/Bugs/CarcassWorm.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a worm corpse" )] + public class CarcassWorm : BaseCreature + { + [Constructable] + public CarcassWorm () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a carcass worm"; + Body = 143; + BaseSoundID = 0x382; + AnimationMod = 6; + + SetStr( 38, 52 ); + SetDex( 12, 17 ); + SetInt( 1, 5 ); + + SetHits( 19, 25 ); + + SetDamage( 2, 8 ); + + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 450; + Karma = -450; + + VirtualArmor = 12; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override int Meat{ get{ return 4; } } + + public CarcassWorm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/DeadlyScorpion.cs b/Scripts/Mobiles/Bugs/DeadlyScorpion.cs new file mode 100644 index 0000000..ed35015 --- /dev/null +++ b/Scripts/Mobiles/Bugs/DeadlyScorpion.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a scorpion corpse" )] + public class DeadlyScorpion : BaseCreature + { + [Constructable] + public DeadlyScorpion() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a scorpion"; + Body = 147; + BaseSoundID = 397; + + SetStr( 103, 145 ); + SetDex( 76, 95 ); + SetInt( 16, 30 ); + + SetHits( 80, 93 ); + SetMana( 0 ); + + SetDamage( 9, 14 ); + + SetSkill( SkillName.Poisoning, 80.1, 100.0 ); + SetSkill( SkillName.MagicResist, 30.1, 35.0 ); + SetSkill( SkillName.Tactics, 80.3, 95.0 ); + SetSkill( SkillName.HandToHand, 60.3, 98.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 48; + + PackItem( new DeadlyPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override int Meat{ get{ return 1; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Deadly : Poison.Lethal); } } + + public DeadlyScorpion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/DreadSpider.cs b/Scripts/Mobiles/Bugs/DreadSpider.cs new file mode 100644 index 0000000..df8a0c4 --- /dev/null +++ b/Scripts/Mobiles/Bugs/DreadSpider.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a spider corpse" )] + public class DreadSpider : BaseCreature + { + [Constructable] + public DreadSpider () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a dread spider"; + Body = 27; + BaseSoundID = 1170; + + SetStr( 196, 220 ); + SetDex( 126, 145 ); + SetInt( 286, 310 ); + + SetHits( 118, 132 ); + + SetDamage( 5, 17 ); + + SetSkill( SkillName.Concentration, 65.1, 80.0 ); + SetSkill( SkillName.Magery, 65.1, 80.0 ); + SetSkill( SkillName.Meditation, 65.1, 80.0 ); + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 55.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 75.0 ); + + Fame = 5000; + Karma = -5000; + + VirtualArmor = 36; + + PackItem( new SpidersSilk( 8 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + + public DreadSpider( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 263 ) + BaseSoundID = 1170; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/FireBeetle.cs b/Scripts/Mobiles/Bugs/FireBeetle.cs new file mode 100644 index 0000000..022cadd --- /dev/null +++ b/Scripts/Mobiles/Bugs/FireBeetle.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a beetle corpse" )] + public class FireBeetle : BaseCreature + { + public override bool HasBreath{ get{ return true; } } // fire breath enabled + + [Constructable] + public FireBeetle() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a fire beetle"; + Body = 240; + BaseSoundID = 0x4E5; + + SetStr( 296, 320 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 180, 220 ); + SetMana( 0 ); + + SetDamage( 7, 16 ); + + SetSkill( SkillName.MagicResist, 60, 80.0 ); + SetSkill( SkillName.Tactics, 80, 100.0 ); + SetSkill( SkillName.HandToHand, 80, 100.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 24; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public FireBeetle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/FlameCrawler.cs b/Scripts/Mobiles/Bugs/FlameCrawler.cs new file mode 100644 index 0000000..f4f1558 --- /dev/null +++ b/Scripts/Mobiles/Bugs/FlameCrawler.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a insect corpse" )] + public class FlameCrawler : BaseCreature + { + [Constructable] + public FlameCrawler() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a flame crawler"; + Body = 158; + BaseSoundID = 397; + + SetStr( 103, 145 ); + SetDex( 76, 95 ); + SetInt( 16, 30 ); + + SetHits( 80, 93 ); + SetMana( 0 ); + + SetDamage( 9, 14 ); + + SetSkill( SkillName.Poisoning, 80.1, 100.0 ); + SetSkill( SkillName.MagicResist, 30.1, 35.0 ); + SetSkill( SkillName.Tactics, 80.3, 95.0 ); + SetSkill( SkillName.HandToHand, 60.3, 98.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 48; + + PackItem( new DeadlyPoisonPotion() ); + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override int Meat{ get{ return 1; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Deadly : Poison.Lethal); } } + + public FlameCrawler( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/FrostSpider.cs b/Scripts/Mobiles/Bugs/FrostSpider.cs new file mode 100644 index 0000000..ac893f2 --- /dev/null +++ b/Scripts/Mobiles/Bugs/FrostSpider.cs @@ -0,0 +1,61 @@ +using System; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a spider corpse" )] + public class FrostSpider : BaseCreature + { + [Constructable] + public FrostSpider() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a frost spider"; + Body = 96; + BaseSoundID = 0x388; + + SetStr( 76, 100 ); + SetDex( 126, 145 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 6, 16 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 35.1, 50.0 ); + SetSkill( SkillName.HandToHand, 50.1, 65.0 ); + + Fame = 775; + Karma = -775; + + VirtualArmor = 28; + + PackItem( new SpidersSilk( 7 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public FrostSpider( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 387 ) + BaseSoundID = 0x388; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/GiantBlackWidow.cs b/Scripts/Mobiles/Bugs/GiantBlackWidow.cs new file mode 100644 index 0000000..34b7c04 --- /dev/null +++ b/Scripts/Mobiles/Bugs/GiantBlackWidow.cs @@ -0,0 +1,65 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a spider corpse" )] + public class GiantBlackWidow : BaseCreature + { + [Constructable] + public GiantBlackWidow() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant black widow"; + Body = 19; + BaseSoundID = 0x388; // TODO: validate + + SetStr( 76, 100 ); + SetDex( 96, 115 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + + SetDamage( 5, 17 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 65.1, 80.0 ); + SetSkill( SkillName.HandToHand, 70.1, 85.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 24; + + PackItem( new SpidersSilk( 5 ) ); + PackItem( new LesserPoisonPotion() ); + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Deadly; } } + + public GiantBlackWidow( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/GiantScarab.cs b/Scripts/Mobiles/Bugs/GiantScarab.cs new file mode 100644 index 0000000..6dc4f7d --- /dev/null +++ b/Scripts/Mobiles/Bugs/GiantScarab.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a scarab corpse" )] + public class GiantScarab : BaseCreature + { + [Constructable] + public GiantScarab() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant scarab"; + Body = 263; + BaseSoundID = 0x4F0; + AnimationMod = 2; + + SetStr( 296, 320 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 175, 200 ); + + SetDamage( 7, 20 ); + + SetSkill( SkillName.MagicResist, 60.0 ); + SetSkill( SkillName.Tactics, 90.0 ); + SetSkill( SkillName.HandToHand, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 24; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public GiantScarab( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/GiantSpider.cs b/Scripts/Mobiles/Bugs/GiantSpider.cs new file mode 100644 index 0000000..3183db4 --- /dev/null +++ b/Scripts/Mobiles/Bugs/GiantSpider.cs @@ -0,0 +1,64 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a spider corpse" )] + public class GiantSpider : BaseCreature + { + [Constructable] + public GiantSpider() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant spider"; + Body = 28; + BaseSoundID = 0x388; + + SetStr( 76, 100 ); + SetDex( 76, 95 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 5, 13 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 35.1, 50.0 ); + SetSkill( SkillName.HandToHand, 50.1, 65.0 ); + + Fame = 600; + Karma = -600; + + VirtualArmor = 16; + + PackItem( new SpidersSilk( 5 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override Poison HitPoison{ get{ return Poison.Regular; } } + + public GiantSpider( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/GoraxHorned.cs b/Scripts/Mobiles/Bugs/GoraxHorned.cs new file mode 100644 index 0000000..e408904 --- /dev/null +++ b/Scripts/Mobiles/Bugs/GoraxHorned.cs @@ -0,0 +1,64 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a gorax corpse" )] + public class GoraxHorned : BaseCreature + { + [Constructable] + public GoraxHorned() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a horned gorax"; + Body = 194; + BaseSoundID = 0x4F0; + AnimationMod = 3; + + SetStr( 76, 100 ); + SetDex( 96, 115 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + + SetDamage( 5, 17 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 65.1, 80.0 ); + SetSkill( SkillName.HandToHand, 70.1, 85.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 24; + + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Regular; } } + + public GoraxHorned( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/GoraxSlicer.cs b/Scripts/Mobiles/Bugs/GoraxSlicer.cs new file mode 100644 index 0000000..841ab49 --- /dev/null +++ b/Scripts/Mobiles/Bugs/GoraxSlicer.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a gorax corpse" )] + public class GoraxSlicer : BaseCreature + { + [Constructable] + public GoraxSlicer() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a gorax slicer"; + Body = 195; + BaseSoundID = 0x4F0; + AnimationMod = 3; + + SetStr( 296, 320 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 196, 230 ); + + SetDamage( 7, 20 ); + + SetSkill( SkillName.Poisoning, 70.1, 90.0 ); + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 85.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 105.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 32; + + PackItem( new PoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.Meager ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public GoraxSlicer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/IronBeetle.cs b/Scripts/Mobiles/Bugs/IronBeetle.cs new file mode 100644 index 0000000..073486e --- /dev/null +++ b/Scripts/Mobiles/Bugs/IronBeetle.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a beetle corpse" )] + public class IronBeetle : BaseCreature + { + [Constructable] + public IronBeetle() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an iron beetle"; + Body = 159; + BaseSoundID = 0x4E5; + + SetStr( 444, 480 ); + SetDex( 122, 158 ); + SetInt( 36, 60 ); + + SetHits( 270, 330 ); + SetMana( 0 ); + + SetDamage( 11, 30 ); + + SetSkill( SkillName.MagicResist, 90.0, 120.0 ); + SetSkill( SkillName.Tactics, 120.0, 150.0 ); + SetSkill( SkillName.HandToHand, 120.0, 150.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 48; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public IronBeetle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/Kith.cs b/Scripts/Mobiles/Bugs/Kith.cs new file mode 100644 index 0000000..d4551f5 --- /dev/null +++ b/Scripts/Mobiles/Bugs/Kith.cs @@ -0,0 +1,65 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a spider corpse" )] + public class Kith : BaseCreature + { + [Constructable] + public Kith() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a kith"; + Body = 148; + BaseSoundID = 0x4F0; + + SetStr( 236, 285 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 9, 18 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 48; + + PackItem( new SpidersSilk( Utility.RandomMinMax( 20, 35 ) ) ); + PackItem( new GreaterPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + + public Kith( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/Mantis.cs b/Scripts/Mobiles/Bugs/Mantis.cs new file mode 100644 index 0000000..f37ad52 --- /dev/null +++ b/Scripts/Mobiles/Bugs/Mantis.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; +using Server.Spells; + +namespace Server.Mobiles +{ + [CorpseName( "a mantis corpse" )] + public class Mantis : BaseCreature + { + [Constructable] + public Mantis() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a mantis"; + Body = 184; + BaseSoundID = 0x4F0; + + SetStr( 166, 215 ); + SetDex( 96, 145 ); + SetInt( 41, 65 ); + + SetHits( 100, 129 ); + SetMana( 0 ); + + SetDamage( 7, 17 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 30; + + PackItem( new PoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Lesser : Poison.Regular); } } + + public Mantis( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/SandScorpion.cs b/Scripts/Mobiles/Bugs/SandScorpion.cs new file mode 100644 index 0000000..8537f94 --- /dev/null +++ b/Scripts/Mobiles/Bugs/SandScorpion.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a scorpion corpse" )] + public class SandScorpion : BaseCreature + { + [Constructable] + public SandScorpion() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a scorpion"; + Body = 186; + BaseSoundID = 397; + + SetStr( 73, 115 ); + SetDex( 76, 95 ); + SetInt( 16, 30 ); + + SetHits( 50, 63 ); + SetMana( 0 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Poisoning, 80.1, 100.0 ); + SetSkill( SkillName.MagicResist, 30.1, 35.0 ); + SetSkill( SkillName.Tactics, 60.3, 75.0 ); + SetSkill( SkillName.HandToHand, 50.3, 65.0 ); + + Fame = 1900; + Karma = -1900; + + VirtualArmor = 28; + + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 1; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Regular : Poison.Greater); } } + + public SandScorpion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/SandSpider.cs b/Scripts/Mobiles/Bugs/SandSpider.cs new file mode 100644 index 0000000..a38781b --- /dev/null +++ b/Scripts/Mobiles/Bugs/SandSpider.cs @@ -0,0 +1,61 @@ +using System; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a spider corpse" )] + public class SandSpider : BaseCreature + { + [Constructable] + public SandSpider() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a sand spider"; + Body = 176; + BaseSoundID = 0x388; + + SetStr( 76, 100 ); + SetDex( 126, 145 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 6, 16 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 35.1, 50.0 ); + SetSkill( SkillName.HandToHand, 50.1, 65.0 ); + + Fame = 775; + Karma = -775; + + VirtualArmor = 28; + + PackItem( new SpidersSilk( 7 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public SandSpider( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 387 ) + BaseSoundID = 0x388; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/Scarab.cs b/Scripts/Mobiles/Bugs/Scarab.cs new file mode 100644 index 0000000..0d0f3fc --- /dev/null +++ b/Scripts/Mobiles/Bugs/Scarab.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a scarab corpse" )] + public class Scarab : BaseCreature + { + [Constructable] + public Scarab() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a scarab"; + Body = 245; + BaseSoundID = 0x4F0; + AnimationMod = 2; + + SetStr( 206, 280 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 120, 150 ); + + SetDamage( 7, 13 ); + + SetSkill( SkillName.MagicResist, 40.0 ); + SetSkill( SkillName.Tactics, 70.0 ); + SetSkill( SkillName.HandToHand, 70.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 12; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override Poison HitPoison{ get{ return Poison.Regular; } } + + public Scarab( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/Scorpion.cs b/Scripts/Mobiles/Bugs/Scorpion.cs new file mode 100644 index 0000000..0d80d16 --- /dev/null +++ b/Scripts/Mobiles/Bugs/Scorpion.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a scorpion corpse" )] + public class Scorpion : BaseCreature + { + [Constructable] + public Scorpion() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a scorpion"; + Body = 48; + BaseSoundID = 397; + + SetStr( 73, 115 ); + SetDex( 76, 95 ); + SetInt( 16, 30 ); + + SetHits( 50, 63 ); + SetMana( 0 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Poisoning, 80.1, 100.0 ); + SetSkill( SkillName.MagicResist, 30.1, 35.0 ); + SetSkill( SkillName.Tactics, 60.3, 75.0 ); + SetSkill( SkillName.HandToHand, 50.3, 65.0 ); + + Fame = 2000; + Karma = -2000; + + VirtualArmor = 28; + + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 1; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly); } } + + public Scorpion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/Shaclaw.cs b/Scripts/Mobiles/Bugs/Shaclaw.cs new file mode 100644 index 0000000..8d2661a --- /dev/null +++ b/Scripts/Mobiles/Bugs/Shaclaw.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an insect corpse" )] + public class Shaclaw : BaseCreature + { + [Constructable] + public Shaclaw() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a shaclaw"; + Body = 283; + BaseSoundID = 0x4EA; + AnimationMod = 1; + + SetStr( 796, 825 ); + SetDex( 86, 105 ); + SetInt( 50, 70 ); + + SetHits( 478, 495 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.MagicResist, 49.1, 60.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 14000; + Karma = -14000; + + VirtualArmor = 60; + + AddItem( new LighterSource() ); + + AddItem( new DeadlyPoisonPotion() ); + } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Regular : Poison.Greater); } } + + public override int GetDeathSound() + { + return Utility.RandomList( 0x4EE, 0x4EF ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Gems, 8 ); + } + + public Shaclaw( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/Swarm.cs b/Scripts/Mobiles/Bugs/Swarm.cs new file mode 100644 index 0000000..eb8a6c2 --- /dev/null +++ b/Scripts/Mobiles/Bugs/Swarm.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "dead bugs" )] + public class Swarm : BaseCreature + { + [Constructable] + public Swarm() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a swarm"; + Body = 256; + AnimationMod = 1; + + SetStr( 206, 280 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 120, 150 ); + + SetDamage( 3, 10 ); + + SetSkill( SkillName.Tactics, 70.0 ); + SetSkill( SkillName.HandToHand, 70.0 ); + + Fame = 0; + Karma = -0; + + VirtualArmor = 12; + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Regular; } } + + public override int GetAngerSound() + { + return 0x5CB; + } + + public override int GetIdleSound() + { + return 0x5CD; + } + + public override int GetAttackSound() + { + return 0x5CC; + } + + public override int GetHurtSound() + { + return 0x5CB; + } + + public override int GetDeathSound() + { + return 0x5CB; + } + + public Swarm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/TerathanAvenger.cs b/Scripts/Mobiles/Bugs/TerathanAvenger.cs new file mode 100644 index 0000000..c58f845 --- /dev/null +++ b/Scripts/Mobiles/Bugs/TerathanAvenger.cs @@ -0,0 +1,68 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a terathan avenger corpse" )] + public class TerathanAvenger : BaseCreature + { + [Constructable] + public TerathanAvenger() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a terathan avenger"; + Body = 79; + BaseSoundID = 0x24D; + + SetStr( 467, 645 ); + SetDex( 77, 95 ); + SetInt( 126, 150 ); + + SetHits( 296, 372 ); + SetMana( 46, 70 ); + + SetDamage( 18, 22 ); + + SetSkill( SkillName.Concentration, 70.3, 100.0 ); + SetSkill( SkillName.Magery, 70.3, 100.0 ); + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.HighPotions ); + } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Deadly; } } + public override int Meat{ get{ return 2; } } + + public TerathanAvenger( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 263 ) + BaseSoundID = 0x24D; + } + } +} diff --git a/Scripts/Mobiles/Bugs/TerathanDrone.cs b/Scripts/Mobiles/Bugs/TerathanDrone.cs new file mode 100644 index 0000000..f5d0746 --- /dev/null +++ b/Scripts/Mobiles/Bugs/TerathanDrone.cs @@ -0,0 +1,67 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a terathan drone corpse" )] + public class TerathanDrone : BaseCreature + { + [Constructable] + public TerathanDrone() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a terathan drone"; + Body = 71; + BaseSoundID = 594; + + SetStr( 36, 65 ); + SetDex( 96, 145 ); + SetInt( 21, 45 ); + + SetHits( 22, 39 ); + SetMana( 0 ); + + SetDamage( 6, 12 ); + + SetSkill( SkillName.Poisoning, 40.1, 60.0 ); + SetSkill( SkillName.MagicResist, 30.1, 45.0 ); + SetSkill( SkillName.Tactics, 30.1, 50.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 2000; + Karma = -2000; + + VirtualArmor = 24; + + PackItem( new SpidersSilk( 2 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + // TODO: weapon? + } + + public override int Meat{ get{ return 4; } } + + public TerathanDrone( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 589 ) + BaseSoundID = 594; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/TerathanMatriarch.cs b/Scripts/Mobiles/Bugs/TerathanMatriarch.cs new file mode 100644 index 0000000..5dea59c --- /dev/null +++ b/Scripts/Mobiles/Bugs/TerathanMatriarch.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a terathan matriarch corpse" )] + public class TerathanMatriarch : BaseCreature + { + [Constructable] + public TerathanMatriarch() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a terathan matriarch"; + Body = 72; + BaseSoundID = 599; + + SetStr( 316, 405 ); + SetDex( 96, 115 ); + SetInt( 366, 455 ); + + SetHits( 190, 243 ); + + SetDamage( 11, 14 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 90.1, 100.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 10000; + Karma = -10000; + + PackItem( new SpidersSilk( 5 ) ); + PackReg( Utility.RandomMinMax( 4, 10 ) ); + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + AddLoot( LootPack.MedPotions ); + } + + public TerathanMatriarch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/TerathanWarrior.cs b/Scripts/Mobiles/Bugs/TerathanWarrior.cs new file mode 100644 index 0000000..422d2c9 --- /dev/null +++ b/Scripts/Mobiles/Bugs/TerathanWarrior.cs @@ -0,0 +1,61 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a terathan warrior corpse" )] + public class TerathanWarrior : BaseCreature + { + [Constructable] + public TerathanWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a terathan warrior"; + Body = 70; + BaseSoundID = 589; + + SetStr( 166, 215 ); + SetDex( 96, 145 ); + SetInt( 41, 65 ); + + SetHits( 100, 129 ); + SetMana( 0 ); + + SetDamage( 7, 17 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 30; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override int Meat{ get{ return 4; } } + + public TerathanWarrior( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Bugs/WidowQueen.cs b/Scripts/Mobiles/Bugs/WidowQueen.cs new file mode 100644 index 0000000..aaa41cb --- /dev/null +++ b/Scripts/Mobiles/Bugs/WidowQueen.cs @@ -0,0 +1,66 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a spider corpse" )] + public class WidowQueen : BaseCreature + { + [Constructable] + public WidowQueen() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a widow queen"; + Body = 20; + BaseSoundID = 0x388; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 6500; + Karma = -6500; + + VirtualArmor = 48; + + PackItem( new SpidersSilk( 50 ) ); + PackItem( new GreaterPoisonPotion() ); + PackItem( new DeadlyPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + + public WidowQueen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Demons/Balron.cs b/Scripts/Mobiles/Demons/Balron.cs new file mode 100644 index 0000000..7d4ed83 --- /dev/null +++ b/Scripts/Mobiles/Demons/Balron.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a balron corpse" )] + public class Balron : BaseCreature + { + [Constructable] + public Balron () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "balron" ); + Body = Utility.RandomList( 90, 113 ); + BaseSoundID = 357; + Clan = Clan.Demonic; + + SetStr( 986, 1185 ); + SetDex( 177, 255 ); + SetInt( 151, 250 ); + + SetHits( 592, 711 ); + + SetDamage( 22, 29 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 95.5, 100.0 ); + SetSkill( SkillName.Meditation, 25.1, 50.0 ); + SetSkill( SkillName.MagicResist, 100.5, 150.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 24000; + Karma = -24000; + + VirtualArmor = 90; + + if ( Body == 90 ) + PackItem( new Longsword() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.HighScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override int Meat{ get{ return 1; } } + + public Balron( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Demons/Daemon.cs b/Scripts/Mobiles/Demons/Daemon.cs new file mode 100644 index 0000000..af6656f --- /dev/null +++ b/Scripts/Mobiles/Demons/Daemon.cs @@ -0,0 +1,73 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a daemon corpse" )] + public class Daemon : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public Daemon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "daemon" ); + HiddenTitle = "the daemon"; + Body = Utility.RandomList( 9, 10 ); + BaseSoundID = 357; + Clan = Clan.Demonic; + + SetStr( 476, 505 ); + SetDex( 76, 95 ); + SetInt( 301, 325 ); + + SetHits( 286, 303 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.Concentration, 70.1, 80.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 58; + ControlSlots = 5; + + if ( Body == 10 ) + PackItem( new Longsword() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 1; } } + + public Daemon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/DemonClaw.cs b/Scripts/Mobiles/Demons/DemonClaw.cs new file mode 100644 index 0000000..cb2e2a7 --- /dev/null +++ b/Scripts/Mobiles/Demons/DemonClaw.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a demon corpse" )] + public class DemonClaw : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public DemonClaw () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a demon claw"; + Body = 190; + BaseSoundID = 357; + Clan = Clan.Demonic; + + SetStr( 476, 505 ); + SetDex( 76, 95 ); + SetInt( 301, 325 ); + + SetHits( 286, 303 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 11000; + Karma = -11000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 1; } } + + public DemonClaw( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/Demoness.cs b/Scripts/Mobiles/Demons/Demoness.cs new file mode 100644 index 0000000..72ac252 --- /dev/null +++ b/Scripts/Mobiles/Demons/Demoness.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a demoness corpse" )] + public class Demoness : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public Demoness () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a demoness"; + Body = 154; + BaseSoundID = 0x4B0; + Clan = Clan.Demonic; + + SetStr( 476, 505 ); + SetDex( 76, 95 ); + SetInt( 301, 325 ); + + SetHits( 286, 303 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 11000; + Karma = -11000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 1; } } + + public Demoness( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/DemonicSpirit.cs b/Scripts/Mobiles/Demons/DemonicSpirit.cs new file mode 100644 index 0000000..5ffb73c --- /dev/null +++ b/Scripts/Mobiles/Demons/DemonicSpirit.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a ghostly corpse" )] + public class DemonicSpirit : BaseCreature + { + [Constructable] + public DemonicSpirit () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a demonic spirit"; + Body = 285; + BaseSoundID = 0x482; + Clan = Clan.Demonic; + + SetStr( 276, 305 ); + SetDex( 46, 65 ); + SetInt( 201, 225 ); + AnimationMod = 1; + + SetHits( 186, 203 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.Concentration, 70.1, 80.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 9000; + Karma = -9000; + + VirtualArmor = 40; + + PackReg( 17, 24 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Average, 1 ); + AddLoot( LootPack.MedScrolls, 1 ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public DemonicSpirit( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/Deviless.cs b/Scripts/Mobiles/Demons/Deviless.cs new file mode 100644 index 0000000..5fdf4b3 --- /dev/null +++ b/Scripts/Mobiles/Demons/Deviless.cs @@ -0,0 +1,71 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a devil corpse" )] + public class Deviless : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public Deviless () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "daemoness" ); + HiddenTitle = "the deviless"; + Body = 135; + BaseSoundID = 0x53B; + Clan = Clan.Demonic; + + SetStr( 476, 505 ); + SetDex( 76, 95 ); + SetInt( 301, 325 ); + + SetHits( 286, 303 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.Concentration, 70.1, 80.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 58; + + PackItem( new Whip() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 1; } } + + public Deviless( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/FireMephit.cs b/Scripts/Mobiles/Demons/FireMephit.cs new file mode 100644 index 0000000..5b228cc --- /dev/null +++ b/Scripts/Mobiles/Demons/FireMephit.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an imp corpse" )] + public class FireImp : BaseCreature + { + [Constructable] + public FireImp() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "imp" ); + HiddenTitle = "the fire imp"; + Body = 258; + BaseSoundID = 422; + AnimationMod = 1; + Hue = 1188; + Clan = Clan.Demonic; + + SetStr( 111, 165 ); + SetDex( 61, 80 ); + SetInt( 136, 155 ); + + SetHits( 105, 120 ); + + SetDamage( 15, 20 ); + + SetSkill( SkillName.Concentration, 60.1, 84.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 90.1, 100.0 ); + SetSkill( SkillName.Tactics, 60.1, 84.0 ); + SetSkill( SkillName.HandToHand, 60.1, 84.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 6; } } + + public FireImp( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Demons/HornedDevil.cs b/Scripts/Mobiles/Demons/HornedDevil.cs new file mode 100644 index 0000000..378084f --- /dev/null +++ b/Scripts/Mobiles/Demons/HornedDevil.cs @@ -0,0 +1,70 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a devilish corpse" )] + public class HornedDevil : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public HornedDevil() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "daemon" ); + HiddenTitle = "the horned devil"; + Body = 188; + BaseSoundID = 357; + AnimationMod = 5; + Clan = Clan.Demonic; + + SetStr( 476, 505 ); + SetDex( 76, 95 ); + SetInt( 301, 325 ); + + SetHits( 286, 303 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.Concentration, 70.1, 80.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 58; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 1; } } + + public HornedDevil( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/IceDevil.cs b/Scripts/Mobiles/Demons/IceDevil.cs new file mode 100644 index 0000000..6f86a20 --- /dev/null +++ b/Scripts/Mobiles/Demons/IceDevil.cs @@ -0,0 +1,70 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a devilish corpse" )] + public class IceDevil : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public IceDevil () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "daemon" ); + HiddenTitle = "the ice devil"; + Body = 187; + BaseSoundID = 357; + Clan = Clan.Demonic; + + SetStr( 714, 758 ); + SetDex( 114, 143 ); + SetInt( 452, 488 ); + + SetHits( 429, 455 ); + + SetDamage( 11, 21 ); + + SetSkill( SkillName.Concentration, 105.2, 120.0 ); + SetSkill( SkillName.Magery, 105.2, 120.0 ); + SetSkill( SkillName.MagicResist, 127.7, 142.5 ); + SetSkill( SkillName.Tactics, 105.2, 120.0 ); + SetSkill( SkillName.HandToHand, 90.2, 120.0 ); + + Fame = 22500; + Karma = -22500; + + VirtualArmor = 85; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.HighScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override int Meat{ get{ return 2; } } + + public IceDevil( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/IceFiend.cs b/Scripts/Mobiles/Demons/IceFiend.cs new file mode 100644 index 0000000..ef908a8 --- /dev/null +++ b/Scripts/Mobiles/Demons/IceFiend.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an ice fiend corpse" )] + public class IceFiend : BaseCreature + { + [Constructable] + public IceFiend () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ice fiend"; + Body = 114; + BaseSoundID = 357; + Clan = Clan.Demonic; + + SetStr( 376, 405 ); + SetDex( 176, 195 ); + SetInt( 201, 225 ); + + SetHits( 226, 243 ); + + SetDamage( 8, 19 ); + + SetSkill( SkillName.Concentration, 80.1, 90.0 ); + SetSkill( SkillName.Magery, 80.1, 90.0 ); + SetSkill( SkillName.MagicResist, 75.1, 85.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 80.1, 100.0 ); + + Fame = 18000; + Karma = -18000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override int Meat{ get{ return 1; } } + + public IceFiend( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Demons/IceMephit.cs b/Scripts/Mobiles/Demons/IceMephit.cs new file mode 100644 index 0000000..3f73725 --- /dev/null +++ b/Scripts/Mobiles/Demons/IceMephit.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an imp corpse" )] + public class IceImp : BaseCreature + { + [Constructable] + public IceImp() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "imp" ); + HiddenTitle = "the ice imp"; + Body = 258; + BaseSoundID = 422; + AnimationMod = 1; + Hue = 1079; + Clan = Clan.Demonic; + + SetStr( 111, 165 ); + SetDex( 61, 80 ); + SetInt( 136, 155 ); + + SetHits( 105, 120 ); + + SetDamage( 15, 20 ); + + SetSkill( SkillName.Concentration, 60.1, 84.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 90.1, 100.0 ); + SetSkill( SkillName.Tactics, 60.1, 84.0 ); + SetSkill( SkillName.HandToHand, 60.1, 84.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 6; } } + + public IceImp( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Demons/Imp.cs b/Scripts/Mobiles/Demons/Imp.cs new file mode 100644 index 0000000..69cf051 --- /dev/null +++ b/Scripts/Mobiles/Demons/Imp.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an imp corpse" )] + public class Imp : BaseCreature + { + [Constructable] + public Imp() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "imp" ); + HiddenTitle = "the imp"; + Body = 62; + BaseSoundID = 422; + Clan = Clan.Demonic; + + SetStr( 91, 115 ); + SetDex( 61, 80 ); + SetInt( 86, 105 ); + + SetHits( 55, 70 ); + + SetDamage( 10, 14 ); + + SetSkill( SkillName.Concentration, 20.1, 30.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 30.1, 50.0 ); + SetSkill( SkillName.Tactics, 42.1, 50.0 ); + SetSkill( SkillName.HandToHand, 40.1, 44.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 30; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 6; } } + + public Imp( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Demons/Minion.cs b/Scripts/Mobiles/Demons/Minion.cs new file mode 100644 index 0000000..baff8e2 --- /dev/null +++ b/Scripts/Mobiles/Demons/Minion.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a devilish corpse" )] + public class Minion : BaseCreature + { + [Constructable] + public Minion() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a minion"; + Body = 340; + BaseSoundID = 0x45A; + Clan = Clan.Demonic; + + SetStr( 96, 120 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 58, 72 ); + + SetDamage( 5, 7 ); + + SetSkill( SkillName.MagicResist, 50.1, 75.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 1500; + Karma = -1500; + + VirtualArmor = 28; + + PackItem( new Mace() ); + PackItem( new Torch() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public Minion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/MinionWarrior.cs b/Scripts/Mobiles/Demons/MinionWarrior.cs new file mode 100644 index 0000000..bcadb9b --- /dev/null +++ b/Scripts/Mobiles/Demons/MinionWarrior.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a devilish corpse" )] + public class MinionWarrior : BaseCreature + { + [Constructable] + public MinionWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a minion warrior"; + Body = 338; + BaseSoundID = 0x45A; + Clan = Clan.Demonic; + + SetStr( 111, 145 ); + SetDex( 101, 135 ); + SetInt( 86, 110 ); + + SetHits( 67, 87 ); + + SetDamage( 5, 15 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Swords, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 85.1, 100.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 34; + + PackItem( new Scimitar() ); + PackItem( new Buckler() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public MinionWarrior( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Demons/MinionWizard.cs b/Scripts/Mobiles/Demons/MinionWizard.cs new file mode 100644 index 0000000..60f6692 --- /dev/null +++ b/Scripts/Mobiles/Demons/MinionWizard.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a devilish corpse" )] + public class MinionWizard : BaseCreature + { + [Constructable] + public MinionWizard () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a minion wizard"; + Body = 339; + BaseSoundID = 0x45A; + Clan = Clan.Demonic; + + SetStr( 116, 150 ); + SetDex( 91, 115 ); + SetInt( 161, 185 ); + + SetHits( 70, 90 ); + + SetDamage( 4, 14 ); + + SetSkill( SkillName.Concentration, 60.1, 72.5 ); + SetSkill( SkillName.Magery, 60.1, 72.5 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 50.1, 65.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 30; + + PackReg( 6 ); + + PackItem( new Dagger() ); + PackItem( new BlackStaff() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public MinionWizard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/ShadowDemon.cs b/Scripts/Mobiles/Demons/ShadowDemon.cs new file mode 100644 index 0000000..9343e50 --- /dev/null +++ b/Scripts/Mobiles/Demons/ShadowDemon.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a demon corpse" )] + public class ShadowDemon : BaseCreature + { + public override double DispelDifficulty{ get{ return 95.0; } } + public override double DispelFocus{ get{ return 50.0; } } + + [Constructable] + public ShadowDemon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a shadow demon"; + Body = 120; + AnimationMod = 3; + BaseSoundID = 0x2B8; + Clan = Clan.Demonic; + + SetStr( 276, 305 ); + SetDex( 46, 65 ); + SetInt( 201, 225 ); + + SetHits( 186, 203 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.Concentration, 70.1, 80.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 9000; + Karma = -9000; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Average, 1 ); + AddLoot( LootPack.MedScrolls, 1 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override bool BleedImmune{ get{ return true; } } + + public ShadowDemon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Demons/Succubus.cs b/Scripts/Mobiles/Demons/Succubus.cs new file mode 100644 index 0000000..5f27f4b --- /dev/null +++ b/Scripts/Mobiles/Demons/Succubus.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a succubus corpse" )] + public class Succubus : BaseCreature + { + [Constructable] + public Succubus () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a succubus"; + Body = 78; + BaseSoundID = 0x4B0; + Clan = Clan.Demonic; + + SetStr( 388, 420 ); + SetDex( 121, 170 ); + SetInt( 298, 457 ); + + SetHits( 212, 253 ); + + SetDamage( 12, 20 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 99.1, 100.0 ); + SetSkill( SkillName.Meditation, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 100.5, 150.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 16000; + Karma = -16000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override int Meat{ get{ return 1; } } + + public void DrainLife() + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 2 ) ) + { + if ( m == this || !CanBeHarmful( m ) ) + continue; + + if ( m is BaseCreature && (((BaseCreature)m).Controlled || ((BaseCreature)m).Summoned || ((BaseCreature)m).Team != this.Team) ) + list.Add( m ); + else if ( m.Player ) + list.Add( m ); + } + + foreach ( Mobile m in list ) + { + DoHarmful( m ); + + m.FixedParticles( 0x374A, 10, 15, 5013, 0x496, 0, EffectLayer.Waist ); + m.PlaySound( 0x231 ); + + m.SendMessage( "You feel the life drain out of you!" ); + + int toDrain = Utility.RandomMinMax( 5, 20 ); + + Hits += toDrain; + m.Damage( toDrain, this ); + } + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + + if ( 0.1 >= Utility.RandomDouble() ) + DrainLife(); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + + if ( 0.1 >= Utility.RandomDouble() ) + DrainLife(); + } + + public Succubus( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Demons/SuccubusQueen.cs b/Scripts/Mobiles/Demons/SuccubusQueen.cs new file mode 100644 index 0000000..088fffc --- /dev/null +++ b/Scripts/Mobiles/Demons/SuccubusQueen.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a succubus corpse" )] + public class SuccubusQueen : BaseCreature + { + [Constructable] + public SuccubusQueen () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "daemoness" ); + HiddenTitle = "the succubus queen"; + Body = 63; + BaseSoundID = 0x4B0; + Clan = Clan.Demonic; + + SetStr( 488, 620 ); + SetDex( 121, 170 ); + SetInt( 498, 657 ); + + SetHits( 312, 353 ); + + SetDamage( 18, 28 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 99.1, 100.0 ); + SetSkill( SkillName.Meditation, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 100.5, 150.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 24000; + Karma = -24000; + + VirtualArmor = 80; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.HighScrolls, 2 ); + } + + public override int Meat{ get{ return 1; } } + + public void DrainLife() + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 2 ) ) + { + if ( m == this || !CanBeHarmful( m ) ) + continue; + + if ( m is BaseCreature && (((BaseCreature)m).Controlled || ((BaseCreature)m).Summoned || ((BaseCreature)m).Team != this.Team) ) + list.Add( m ); + else if ( m.Player ) + list.Add( m ); + } + + foreach ( Mobile m in list ) + { + DoHarmful( m ); + + m.FixedParticles( 0x374A, 10, 15, 5013, 0x496, 0, EffectLayer.Waist ); + m.PlaySound( 0x231 ); + + m.SendMessage( "You feel the life drain out of you!" ); + + int toDrain = Utility.RandomMinMax( 10, 40 ); + + Hits += toDrain; + m.Damage( toDrain, this ); + } + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + + if ( 0.1 >= Utility.RandomDouble() ) + DrainLife(); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + + if ( 0.1 >= Utility.RandomDouble() ) + DrainLife(); + } + + public SuccubusQueen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/AncientWyrm.cs b/Scripts/Mobiles/Dragons/AncientWyrm.cs new file mode 100644 index 0000000..b1799a5 --- /dev/null +++ b/Scripts/Mobiles/Dragons/AncientWyrm.cs @@ -0,0 +1,79 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dragon corpse" )] + public class AncientWyrm : BaseCreature + { + [Constructable] + public AncientWyrm () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "dragon" ); + Title = "the ancient wyrm"; + Body = 122; + BaseSoundID = 362; + + SetStr( 1096, 1185 ); + SetDex( 86, 175 ); + SetInt( 686, 775 ); + + SetHits( 658, 711 ); + + SetDamage( 29, 35 ); + + SetSkill( SkillName.Concentration, 80.1, 100.0 ); + SetSkill( SkillName.Magery, 80.1, 100.0 ); + SetSkill( SkillName.Meditation, 52.5, 75.0 ); + SetSkill( SkillName.MagicResist, 100.5, 150.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 97.6, 100.0 ); + + Fame = 22500; + Karma = -22500; + + VirtualArmor = 70; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 3 ); + AddLoot( LootPack.Gems, 5 ); + } + + public override int GetIdleSound() + { + return 0x2D3; + } + + public override int GetHurtSound() + { + return 0x2D1; + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override bool AutoDispel{ get{ return true; } } + public override int Hides{ get{ return 40; } } + public override int Meat{ get{ return 19; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override Poison HitPoison{ get{ return Utility.RandomBool() ? Poison.Lesser : Poison.Regular; } } + + public AncientWyrm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/AncientWyvern.cs b/Scripts/Mobiles/Dragons/AncientWyvern.cs new file mode 100644 index 0000000..aa8dde8 --- /dev/null +++ b/Scripts/Mobiles/Dragons/AncientWyvern.cs @@ -0,0 +1,91 @@ +using System; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a wyvern corpse" )] + public class AncientWyvern : BaseCreature + { + [Constructable] + public AncientWyvern () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ancient wyvern"; + Body = 124; + BaseSoundID = 362; + + SetStr( 796, 825 ); + SetDex( 86, 105 ); + SetInt( 436, 475 ); + + SetHits( 478, 495 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.Poisoning, 90.1, 92.5 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 60; + + PackItem( new GreaterPoisonPotion( Utility.RandomMinMax(1,3) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool ReacquireOnMovement{ get{ return true; } } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + + public override int GetAttackSound() + { + return 713; + } + + public override int GetAngerSound() + { + return 718; + } + + public override int GetDeathSound() + { + return 716; + } + + public override int GetHurtSound() + { + return 721; + } + + public override int GetIdleSound() + { + return 725; + } + + public AncientWyvern( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/Dragon.cs b/Scripts/Mobiles/Dragons/Dragon.cs new file mode 100644 index 0000000..e0ef972 --- /dev/null +++ b/Scripts/Mobiles/Dragons/Dragon.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dragon corpse" )] + public class Dragon : BaseCreature + { + [Constructable] + public Dragon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a dragon"; + Body = Utility.RandomList( 12, 59 ); + BaseSoundID = 362; + + SetStr( 796, 825 ); + SetDex( 86, 105 ); + SetInt( 436, 475 ); + + SetHits( 478, 495 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.Concentration, 30.1, 40.0 ); + SetSkill( SkillName.Magery, 30.1, 40.0 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Gems, 8 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override bool AutoDispel{ get{ return !Controlled; } } + public override int Meat{ get{ return 19; } } + public override int Hides{ get{ return 20; } } + + public Dragon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/Drake.cs b/Scripts/Mobiles/Dragons/Drake.cs new file mode 100644 index 0000000..90566b3 --- /dev/null +++ b/Scripts/Mobiles/Dragons/Drake.cs @@ -0,0 +1,61 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a drake corpse" )] + public class Drake : BaseCreature + { + [Constructable] + public Drake () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a drake"; + Body = Utility.RandomList( 60, 61 ); + BaseSoundID = 362; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 101, 140 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 46; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + + public Drake( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/Drakkhen.cs b/Scripts/Mobiles/Dragons/Drakkhen.cs new file mode 100644 index 0000000..83e36d4 --- /dev/null +++ b/Scripts/Mobiles/Dragons/Drakkhen.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a drakkhen corpse" )] + public class Drakkhen : BaseCreature + { + [Constructable] + public Drakkhen () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a drakkhen"; + Body = 141; + BaseSoundID = 0x4E0; + AnimationMod = 3; + + SetStr( 496, 525 ); + SetDex( 86, 105 ); + SetInt( 236, 275 ); + + SetHits( 278, 395 ); + + SetDamage( 10, 18 ); + + SetSkill( SkillName.Concentration, 30.1, 40.0 ); + SetSkill( SkillName.Magery, 30.1, 40.0 ); + SetSkill( SkillName.MagicResist, 79.1, 80.0 ); + SetSkill( SkillName.Tactics, 77.6, 80.0 ); + SetSkill( SkillName.HandToHand, 70.1, 72.5 ); + + Fame = 10000; + Karma = -10000; + + VirtualArmor = 48; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Gems, 4 ); + } + + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 12; } } + public override int Hides{ get{ return 15; } } + + public Drakkhen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/LavaDrake.cs b/Scripts/Mobiles/Dragons/LavaDrake.cs new file mode 100644 index 0000000..fae8281 --- /dev/null +++ b/Scripts/Mobiles/Dragons/LavaDrake.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a drake corpse" )] + public class LavaDrake : BaseCreature + { + [Constructable] + public LavaDrake () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a drake"; + Body = 326; + BaseSoundID = 362; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 101, 140 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 46; + + PackItem( new SulfurousAsh( Utility.RandomMinMax(20,35) ) ); + AddItem( new LighterSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + + public LavaDrake( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/SeaDragon.cs b/Scripts/Mobiles/Dragons/SeaDragon.cs new file mode 100644 index 0000000..63cabb3 --- /dev/null +++ b/Scripts/Mobiles/Dragons/SeaDragon.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dragon corpse" )] + public class SeaDragon : BaseCreature + { + [Constructable] + public SeaDragon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a dragon"; + Body = 172; + BaseSoundID = 362; + CanSwim = true; + + SetStr( 796, 825 ); + SetDex( 86, 105 ); + SetInt( 436, 475 ); + + SetHits( 478, 495 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.Concentration, 30.1, 40.0 ); + SetSkill( SkillName.Magery, 30.1, 40.0 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Gems, 8 ); + } + + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override bool AutoDispel{ get{ return !Controlled; } } + public override int Meat{ get{ return 19; } } + public override int Hides{ get{ return 20; } } + + public SeaDragon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/SeaDrake.cs b/Scripts/Mobiles/Dragons/SeaDrake.cs new file mode 100644 index 0000000..e841eab --- /dev/null +++ b/Scripts/Mobiles/Dragons/SeaDrake.cs @@ -0,0 +1,61 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a drake corpse" )] + public class SeaDrake : BaseCreature + { + [Constructable] + public SeaDrake () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a drake"; + Body = 189; + BaseSoundID = 362; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 101, 140 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 46; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + + public SeaDrake( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/ShadowWyrm.cs b/Scripts/Mobiles/Dragons/ShadowWyrm.cs new file mode 100644 index 0000000..386de61 --- /dev/null +++ b/Scripts/Mobiles/Dragons/ShadowWyrm.cs @@ -0,0 +1,79 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a shadow wyrm corpse" )] + public class ShadowWyrm : BaseCreature + { + [Constructable] + public ShadowWyrm() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "dragon" ); + Title = "the shadow wyrm"; + Body = 123; + BaseSoundID = 362; + + SetStr( 898, 1030 ); + SetDex( 68, 200 ); + SetInt( 488, 620 ); + + SetHits( 558, 599 ); + + SetDamage( 29, 35 ); + + SetSkill( SkillName.Concentration, 80.1, 100.0 ); + SetSkill( SkillName.Magery, 80.1, 100.0 ); + SetSkill( SkillName.Meditation, 52.5, 75.0 ); + SetSkill( SkillName.MagicResist, 100.3, 130.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 97.6, 100.0 ); + + Fame = 22500; + Karma = -22500; + + VirtualArmor = 70; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 3 ); + AddLoot( LootPack.Gems, 5 ); + } + + public override int GetIdleSound() + { + return 0x2D5; + } + + public override int GetHurtSound() + { + return 0x2D1; + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override bool AutoDispel{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Deadly; } } + public override int Meat{ get{ return 19; } } + public override int Hides{ get{ return 20; } } + + public ShadowWyrm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/SwampDragon.cs b/Scripts/Mobiles/Dragons/SwampDragon.cs new file mode 100644 index 0000000..50cd3b2 --- /dev/null +++ b/Scripts/Mobiles/Dragons/SwampDragon.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dragon corpse" )] + public class SwampDragon : BaseCreature + { + [Constructable] + public SwampDragon () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a swamp dragon"; + Body = 255; + BaseSoundID = 362; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 101, 140 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 46; + + PackReg( Utility.RandomMinMax( 3, 8 ) ); + PackReg( Utility.RandomMinMax( 3, 8 ) ); + PackReg( Utility.RandomMinMax( 3, 8 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return Poison.Regular; } } + + public SwampDragon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/WhiteWyrm.cs b/Scripts/Mobiles/Dragons/WhiteWyrm.cs new file mode 100644 index 0000000..05413c9 --- /dev/null +++ b/Scripts/Mobiles/Dragons/WhiteWyrm.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a white wyrm corpse" )] + public class WhiteWyrm : BaseCreature + { + [Constructable] + public WhiteWyrm () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Body = 122; + Name = "a white wyrm"; + Hue = 1150; + BaseSoundID = 362; + + SetStr( 721, 760 ); + SetDex( 101, 130 ); + SetInt( 386, 425 ); + + SetHits( 433, 456 ); + + SetDamage( 17, 25 ); + + SetSkill( SkillName.Concentration, 99.1, 100.0 ); + SetSkill( SkillName.Magery, 99.1, 100.0 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 18000; + Karma = -18000; + + VirtualArmor = 64; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems, Utility.Random( 1, 5 ) ); + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override int Meat{ get{ return 19; } } + public override int Hides{ get{ return 20; } } + + public WhiteWyrm( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Dragons/Wyvern.cs b/Scripts/Mobiles/Dragons/Wyvern.cs new file mode 100644 index 0000000..87ad600 --- /dev/null +++ b/Scripts/Mobiles/Dragons/Wyvern.cs @@ -0,0 +1,92 @@ +using System; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a wyvern corpse" )] + public class Wyvern : BaseCreature + { + [Constructable] + public Wyvern () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a wyvern"; + Body = 88; + BaseSoundID = 362; + + SetStr( 202, 240 ); + SetDex( 153, 172 ); + SetInt( 51, 90 ); + + SetHits( 125, 141 ); + + SetDamage( 8, 19 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 40; + + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool ReacquireOnMovement{ get{ return true; } } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Deadly; } } + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + + public override int GetAttackSound() + { + return 713; + } + + public override int GetAngerSound() + { + return 718; + } + + public override int GetDeathSound() + { + return 716; + } + + public override int GetHurtSound() + { + return 721; + } + + public override int GetIdleSound() + { + return 725; + } + + public Wyvern( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/AcidElemental.cs b/Scripts/Mobiles/Elemental/AcidElemental.cs new file mode 100644 index 0000000..ee3fb17 --- /dev/null +++ b/Scripts/Mobiles/Elemental/AcidElemental.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an acid elemental corpse" )] + public class AcidElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 119.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public AcidElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an acid elemental"; + Body = 16; + Hue = 60; + BaseSoundID = 278; + + SetStr( 326, 355 ); + SetDex( 66, 85 ); + SetInt( 271, 295 ); + + SetHits( 196, 213 ); + + SetDamage( 9, 15 ); + + SetSkill( SkillName.Concentration, 70.1, 85.0 ); + SetSkill( SkillName.Magery, 70.1, 85.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 70.1, 90.0 ); + + Fame = 10000; + Karma = -10000; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + public override double HitPoisonChance{ get{ return 0.6; } } + + public AcidElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/AirElemental.cs b/Scripts/Mobiles/Elemental/AirElemental.cs new file mode 100644 index 0000000..69196d7 --- /dev/null +++ b/Scripts/Mobiles/Elemental/AirElemental.cs @@ -0,0 +1,71 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an air elemental corpse" )] + public class AirElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public AirElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an air elemental"; + Body = 13; + Hue = 0x4001; + BaseSoundID = 655; + + SetStr( 126, 155 ); + SetDex( 166, 185 ); + SetInt( 101, 125 ); + + SetHits( 76, 93 ); + + SetDamage( 8, 10 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + ControlSlots = 2; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool BleedImmune{ get{ return true; } } + + public AirElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 263 ) + BaseSoundID = 655; + } + } +} diff --git a/Scripts/Mobiles/Elemental/BloodElemental.cs b/Scripts/Mobiles/Elemental/BloodElemental.cs new file mode 100644 index 0000000..d075c45 --- /dev/null +++ b/Scripts/Mobiles/Elemental/BloodElemental.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a blood elemental corpse" )] + public class BloodElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 119.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public BloodElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a blood elemental"; + Body = 16; + Hue = Utility.RandomList( 37, 38 ); + + BaseSoundID = 278; + + SetStr( 526, 615 ); + SetDex( 66, 85 ); + SetInt( 226, 350 ); + + SetHits( 316, 369 ); + + SetDamage( 17, 27 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.Meditation, 10.4, 50.0 ); + SetSkill( SkillName.MagicResist, 80.1, 95.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 100.0 ); + + Fame = 12500; + Karma = -12500; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich ); + } + + public BloodElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/BloodElementalElder.cs b/Scripts/Mobiles/Elemental/BloodElementalElder.cs new file mode 100644 index 0000000..88b34b4 --- /dev/null +++ b/Scripts/Mobiles/Elemental/BloodElementalElder.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an elemental corpse" )] + public class BloodElementalElder : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public BloodElementalElder() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "elder elemental of blood"; + Body = 83; + Hue = 1074; + BaseSoundID = 278; + + SetStr( 658, 769 ); + SetDex( 83, 106 ); + SetInt( 283, 438 ); + + SetHits( 395, 461 ); + + SetDamage( 21, 34 ); + + SetSkill( SkillName.Concentration, 106.4, 125.0 ); + SetSkill( SkillName.Magery, 106.4, 125.0 ); + SetSkill( SkillName.Meditation, 13.0, 62.5 ); + SetSkill( SkillName.MagicResist, 100.1, 118.8 ); + SetSkill( SkillName.Tactics, 100.1, 125.0 ); + SetSkill( SkillName.HandToHand, 100.1, 125.0 ); + + Fame = 15625; + Karma = -15625; + + VirtualArmor = 75; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Rich, 2 ); + } + + public BloodElementalElder( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/DeepSeaElemental.cs b/Scripts/Mobiles/Elemental/DeepSeaElemental.cs new file mode 100644 index 0000000..93b9f62 --- /dev/null +++ b/Scripts/Mobiles/Elemental/DeepSeaElemental.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an elemental corpse" )] + public class DeepSeaElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 119.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public DeepSeaElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a deep sea elemental"; + Body = 251; + BaseSoundID = 278; + + SetStr( 326, 355 ); + SetDex( 66, 85 ); + SetInt( 271, 295 ); + + SetHits( 196, 213 ); + + SetDamage( 9, 15 ); + + SetSkill( SkillName.Concentration, 70.1, 85.0 ); + SetSkill( SkillName.Magery, 70.1, 85.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 70.1, 90.0 ); + + Fame = 10000; + Karma = -10000; + + VirtualArmor = 40; + + PackItem( new BlackPearl( Utility.RandomMinMax( 10, 25 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.MedPotions ); + } + + public override bool BleedImmune{ get{ return true; } } + + public DeepSeaElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/EarthElemental.cs b/Scripts/Mobiles/Elemental/EarthElemental.cs new file mode 100644 index 0000000..f77fce7 --- /dev/null +++ b/Scripts/Mobiles/Elemental/EarthElemental.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an earth elemental corpse" )] + public class EarthElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public EarthElemental() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an earth elemental"; + Body = 14; + BaseSoundID = 268; + + SetStr( 126, 155 ); + SetDex( 66, 85 ); + SetInt( 71, 92 ); + + SetHits( 76, 93 ); + + SetDamage( 9, 16 ); + + SetSkill( SkillName.MagicResist, 50.1, 95.0 ); + SetSkill( SkillName.Tactics, 60.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 34; + ControlSlots = 2; + + PackItem( new MandrakeRoot() ); + + Item ore = new IronOre( 5 ); + ore.ItemID = 0x19B7; + PackItem( ore ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Gems ); + } + + public override bool BleedImmune{ get{ return true; } } + + public EarthElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/Efreet.cs b/Scripts/Mobiles/Elemental/Efreet.cs new file mode 100644 index 0000000..e433b55 --- /dev/null +++ b/Scripts/Mobiles/Elemental/Efreet.cs @@ -0,0 +1,78 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an efreet corpse" )] + public class Efreet : BaseCreature + { + [Constructable] + public Efreet () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an efreet"; + Body = 13; + Hue = 1654; + BaseSoundID = 768; + + SetStr( 326, 355 ); + SetDex( 266, 285 ); + SetInt( 171, 195 ); + + SetHits( 196, 213 ); + + SetDamage( 11, 13 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 10000; + Karma = -10000; + + VirtualArmor = 56; + } + + public override int GetAttackSound() + { + return Utility.RandomList( 0x58F, 0x592, 0x593, 0x594, 0x595 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems ); + + if ( 0.02 > Utility.RandomDouble() ) + { + switch ( Utility.Random( 5 ) ) + { + case 0: PackItem( new DaemonArms() ); break; + case 1: PackItem( new DaemonChest() ); break; + case 2: PackItem( new DaemonGloves() ); break; + case 3: PackItem( new DaemonLegs() ); break; + case 4: PackItem( new DaemonHelm() ); break; + } + } + } + + public Efreet( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Elemental/FireElemental.cs b/Scripts/Mobiles/Elemental/FireElemental.cs new file mode 100644 index 0000000..d0d9694 --- /dev/null +++ b/Scripts/Mobiles/Elemental/FireElemental.cs @@ -0,0 +1,73 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a fire elemental corpse" )] + public class FireElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public FireElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a fire elemental"; + Body = 15; + BaseSoundID = 838; + + SetStr( 126, 155 ); + SetDex( 166, 185 ); + SetInt( 101, 125 ); + + SetHits( 76, 93 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 75.2, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 70.1, 100.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + ControlSlots = 4; + + PackItem( new SulfurousAsh( 3 ) ); + + AddItem( new LighterSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Gems ); + } + + public override bool BleedImmune{ get{ return true; } } + + public FireElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 274 ) + BaseSoundID = 838; + } + } +} diff --git a/Scripts/Mobiles/Elemental/GasCloud.cs b/Scripts/Mobiles/Elemental/GasCloud.cs new file mode 100644 index 0000000..13707b7 --- /dev/null +++ b/Scripts/Mobiles/Elemental/GasCloud.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a fallen cloud" )] + public class GasCloud : BaseCreature + { + [Constructable] + public GasCloud () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a gas cloud"; + Body = 361; + BaseSoundID = 263; + + SetStr( 226, 215 ); + SetDex( 86, 95 ); + SetInt( 161, 235 ); + + SetHits( 156, 109 ); + + SetDamage( 8, 13 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.Meditation, 60.2, 100.0 ); + SetSkill( SkillName.Poisoning, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 65.2, 95.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 8500; + Karma = -8500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.LowScrolls ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + public override double HitPoisonChance{ get{ return 0.50; } } + + public GasCloud( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/Genie.cs b/Scripts/Mobiles/Elemental/Genie.cs new file mode 100644 index 0000000..2129ad6 --- /dev/null +++ b/Scripts/Mobiles/Elemental/Genie.cs @@ -0,0 +1,71 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a genie corpse" )] + public class Genie : BaseCreature + { + [Constructable] + public Genie () : base( AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4 ) + { + Name = "a genie"; + Body = 13; + Hue = 1185; + BaseSoundID = 0x370; + + SetStr( 326, 355 ); + SetDex( 266, 285 ); + SetInt( 171, 195 ); + + SetHits( 196, 213 ); + + SetDamage( 11, 13 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 10000; + Karma = 10000; + + VirtualArmor = 56; + } + + public override int GetHurtSound() + { + return Utility.RandomList( 0x373, 0x375, 0x376, 0x377 ); + } + + public override int GetAngerSound() + { + return 0x378; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems ); + } + + public Genie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Elemental/Goliath.cs b/Scripts/Mobiles/Elemental/Goliath.cs new file mode 100644 index 0000000..be889a2 --- /dev/null +++ b/Scripts/Mobiles/Elemental/Goliath.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "a pile of gemstones" )] + public class Goliath : BaseCreature + { + [Constructable] + public Goliath() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a goliath"; + Body = 138; + BaseSoundID = 0x10C; + AnimationMod = 3; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 48; + } + + public override void OnDeath( Container c ) + { + base.OnDeath( c ); + + Item ore = new IronOre( Utility.RandomMinMax( 5, 10 ) ); + ore.ItemID = 0x19B7; + c.DropItem(ore); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Gems, 10 ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Goliath( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/IceElemental.cs b/Scripts/Mobiles/Elemental/IceElemental.cs new file mode 100644 index 0000000..4409404 --- /dev/null +++ b/Scripts/Mobiles/Elemental/IceElemental.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an ice elemental corpse" )] + public class IceElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public IceElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ice elemental"; + Body = 103; + BaseSoundID = 268; + AnimationMod = 4; + + SetStr( 156, 185 ); + SetDex( 96, 115 ); + SetInt( 171, 192 ); + + SetHits( 94, 111 ); + + SetDamage( 10, 21 ); + + SetSkill( SkillName.Concentration, 10.5, 60.0 ); + SetSkill( SkillName.Magery, 10.5, 60.0 ); + SetSkill( SkillName.MagicResist, 30.1, 80.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 40; + + PackItem( new BlackPearl() ); + PackReg( 3 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.Gems, 2 ); + } + public override bool BleedImmune{ get{ return true; } } + + public IceElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/LightningElemental.cs b/Scripts/Mobiles/Elemental/LightningElemental.cs new file mode 100644 index 0000000..4375844 --- /dev/null +++ b/Scripts/Mobiles/Elemental/LightningElemental.cs @@ -0,0 +1,70 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an elemental corpse" )] + public class LightningElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public LightningElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a lightning elemental"; + Body = 64; + BaseSoundID = 838; + + SetStr( 126, 155 ); + SetDex( 166, 185 ); + SetInt( 101, 125 ); + + SetHits( 76, 93 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 75.2, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 70.1, 100.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + + AddItem( new LighterSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Gems ); + } + + public override bool BleedImmune{ get{ return true; } } + + public LightningElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 274 ) + BaseSoundID = 838; + } + } +} diff --git a/Scripts/Mobiles/Elemental/MagmaElemental.cs b/Scripts/Mobiles/Elemental/MagmaElemental.cs new file mode 100644 index 0000000..617f069 --- /dev/null +++ b/Scripts/Mobiles/Elemental/MagmaElemental.cs @@ -0,0 +1,74 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Misc; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "a pile of magma" )] + public class MagmaElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } + + [Constructable] + public MagmaElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a magma elemental"; + Body = 249; + BaseSoundID = 268; + + SetStr( 126, 155 ); + SetDex( 166, 185 ); + SetInt( 101, 125 ); + + SetHits( 76, 93 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 75.2, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 70.1, 100.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + + PackItem( new SulfurousAsh( Utility.RandomList( 6, 12 ) ) ); + + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Gems ); + } + + public override bool BleedImmune{ get{ return true; } } + + public MagmaElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/MeteorElemental.cs b/Scripts/Mobiles/Elemental/MeteorElemental.cs new file mode 100644 index 0000000..d6c3b2b --- /dev/null +++ b/Scripts/Mobiles/Elemental/MeteorElemental.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an elemental corpse" )] + public class MeteorElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public MeteorElemental() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a meteor elemental"; + Body = 315; + BaseSoundID = 268; + + SetStr( 226, 255 ); + SetDex( 166, 185 ); + SetInt( 71, 92 ); + + SetHits( 176, 193 ); + + SetDamage( 12, 19 ); + + SetSkill( SkillName.MagicResist, 70.1, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 120.0 ); + SetSkill( SkillName.HandToHand, 80.1, 120.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + + PackItem( new IronOre( Utility.RandomMinMax( 3, 10 ) ) ); + PackItem( new SulfurousAsh( Utility.RandomMinMax( 3, 10 ) ) ); + + AddItem( new LighterSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems, 2 ); + } + + public override bool BleedImmune{ get{ return true; } } + + public MeteorElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/MudElemental.cs b/Scripts/Mobiles/Elemental/MudElemental.cs new file mode 100644 index 0000000..cf3ee61 --- /dev/null +++ b/Scripts/Mobiles/Elemental/MudElemental.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a pile of mud" )] + public class MudElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 120.5; } } + public override double DispelFocus{ get{ return 35.0; } } + + [Constructable] + public MudElemental( ) : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a mud elemental"; + Body = 247; + BaseSoundID = 268; + + SetStr( 226, 255 ); + SetDex( 126, 145 ); + SetInt( 71, 92 ); + + SetHits( 136, 153 ); + + SetDamage( 9, 16 ); + + SetSkill( SkillName.MagicResist, 50.1, 95.0 ); + SetSkill( SkillName.Tactics, 60.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 23; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems, 2 ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + + public MudElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/PoisonElemental.cs b/Scripts/Mobiles/Elemental/PoisonElemental.cs new file mode 100644 index 0000000..c42290a --- /dev/null +++ b/Scripts/Mobiles/Elemental/PoisonElemental.cs @@ -0,0 +1,74 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a poison elementals corpse" )] + public class PoisonElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 119.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public PoisonElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a poison elemental"; + Body = 13; + Hue = 67; + BaseSoundID = 263; + + SetStr( 426, 515 ); + SetDex( 166, 185 ); + SetInt( 361, 435 ); + + SetHits( 256, 309 ); + + SetDamage( 12, 18 ); + + SetSkill( SkillName.Concentration, 80.1, 95.0 ); + SetSkill( SkillName.Magery, 80.1, 95.0 ); + SetSkill( SkillName.Meditation, 80.2, 120.0 ); + SetSkill( SkillName.Poisoning, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 85.2, 115.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 70.1, 90.0 ); + + Fame = 12500; + Karma = -12500; + + VirtualArmor = 70; + + PackItem( new Nightshade( 4 ) ); + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + public override double HitPoisonChance{ get{ return 0.75; } } + + public PoisonElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/PoisonElementalElder.cs b/Scripts/Mobiles/Elemental/PoisonElementalElder.cs new file mode 100644 index 0000000..e0faccb --- /dev/null +++ b/Scripts/Mobiles/Elemental/PoisonElementalElder.cs @@ -0,0 +1,73 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an elemental corpse" )] + public class PoisonElementalElder : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public PoisonElementalElder () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "elder elemental of poison"; + Body = 83; + BaseSoundID = 278; + + SetStr( 533, 644 ); + SetDex( 208, 231 ); + SetInt( 451, 544 ); + + SetHits( 320, 386 ); + + SetDamage( 15, 23 ); + + SetSkill( SkillName.Concentration, 100.1, 118.8 ); + SetSkill( SkillName.Magery, 100.1, 118.8 ); + SetSkill( SkillName.Meditation, 100.3, 150.0 ); + SetSkill( SkillName.Poisoning, 112.6, 125.0 ); + SetSkill( SkillName.MagicResist, 106.5, 143.8 ); + SetSkill( SkillName.Tactics, 100.1, 125.0 ); + SetSkill( SkillName.HandToHand, 87.6, 112.5 ); + + Fame = 15625; + Karma = -15625; + + VirtualArmor = 88; + + PackItem( new Nightshade( Utility.RandomMinMax( 20, 40 ) ) ); + PackItem( new GreaterPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.HighScrolls ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + public override double HitPoisonChance{ get{ return 0.75; } } + + public PoisonElementalElder( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/SandVortex.cs b/Scripts/Mobiles/Elemental/SandVortex.cs new file mode 100644 index 0000000..f0dc6ec --- /dev/null +++ b/Scripts/Mobiles/Elemental/SandVortex.cs @@ -0,0 +1,103 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a sand vortex corpse" )] + public class SandVortex : BaseCreature + { + [Constructable] + public SandVortex() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a sand vortex"; + Body = 13; + Hue = 2309; + BaseSoundID = 263; + + SetStr( 96, 120 ); + SetDex( 171, 195 ); + SetInt( 76, 100 ); + + SetHits( 51, 62 ); + + SetDamage( 3, 16 ); + + SetSkill( SkillName.MagicResist, 150.0 ); + SetSkill( SkillName.Tactics, 70.0 ); + SetSkill( SkillName.HandToHand, 80.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 28; + PackItem( new Bone() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + private DateTime m_NextAttack; + + public override void OnActionCombat() + { + Mobile combatant = Combatant; + + if ( combatant == null || combatant.Deleted || combatant.Map != Map || !InRange( combatant, 12 ) || !CanBeHarmful( combatant ) || !InLOS( combatant ) ) + return; + + if ( DateTime.Now >= m_NextAttack ) + { + SandAttack( combatant ); + m_NextAttack = DateTime.Now + TimeSpan.FromSeconds( 10.0 + (10.0 * Utility.RandomDouble()) ); + } + } + + public void SandAttack( Mobile m ) + { + DoHarmful( m ); + + m.FixedParticles( 0x36B0, 10, 25, 9540, 2413, 0, EffectLayer.Waist ); + + new InternalTimer( m, this ).Start(); + } + + private class InternalTimer : Timer + { + private Mobile m_Mobile, m_From; + + public InternalTimer( Mobile m, Mobile from ) : base( TimeSpan.FromSeconds( 1.0 ) ) + { + m_Mobile = m; + m_From = from; + Priority = TimerPriority.TwoFiftyMS; + } + + protected override void OnTick() + { + m_Mobile.PlaySound( 0x4CF ); + Ultima.Damage( m_Mobile, m_From, Utility.RandomMinMax( 1, 40 ) ); + } + } + + public SandVortex( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/SnowElemental.cs b/Scripts/Mobiles/Elemental/SnowElemental.cs new file mode 100644 index 0000000..afc6d46 --- /dev/null +++ b/Scripts/Mobiles/Elemental/SnowElemental.cs @@ -0,0 +1,66 @@ +using System; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a snow elemental corpse" )] + public class SnowElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public SnowElemental() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a snow elemental"; + Body = 13; + Hue = 1153; + BaseSoundID = 263; + + SetStr( 326, 355 ); + SetDex( 166, 185 ); + SetInt( 71, 95 ); + + SetHits( 196, 213 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 50.1, 65.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 100.0 ); + + Fame = 5000; + Karma = -5000; + + VirtualArmor = 50; + + PackItem( new BlackPearl( 3 ) ); + Item ore = new IronOre( 3 ); + ore.ItemID = 0x19B8; + PackItem( ore ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override bool BleedImmune{ get{ return true; } } + + public SnowElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/StoneGolem.cs b/Scripts/Mobiles/Elemental/StoneGolem.cs new file mode 100644 index 0000000..c7e369a --- /dev/null +++ b/Scripts/Mobiles/Elemental/StoneGolem.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "a pile of stone" )] + public class StoneGolem : BaseCreature + { + [Constructable] + public StoneGolem() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a stone golem"; + Body = 344; + Hue = 1198; + BaseSoundID = 0x10C; + + SetStr( 226, 255 ); + SetDex( 166, 185 ); + SetInt( 71, 92 ); + + SetHits( 176, 193 ); + + SetDamage( 15, 20 ); + + SetSkill( SkillName.MagicResist, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 100.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 44; + + Item ore = new IronOre( Utility.RandomMinMax( 5, 10 ) ); + PackItem( ore ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Gems, 2 ); + } + + public override bool BleedImmune{ get{ return true; } } + + public StoneGolem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/StoneStatue.cs b/Scripts/Mobiles/Elemental/StoneStatue.cs new file mode 100644 index 0000000..a376d84 --- /dev/null +++ b/Scripts/Mobiles/Elemental/StoneStatue.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "a pile of stone" )] + public class StoneStatue : BaseCreature + { + [Constructable] + public StoneStatue() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a living statue"; + Body = 133; + BaseSoundID = 0x10C; + AnimationMod = 3; + + SetStr( 156, 185 ); + SetDex( 76, 95 ); + SetInt( 31, 62 ); + + SetHits( 106, 123 ); + + SetDamage( 15, 22 ); + + SetSkill( SkillName.MagicResist, 50.1, 95.0 ); + SetSkill( SkillName.Tactics, 60.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 42; + } + + public override void OnDeath( Container c ) + { + base.OnDeath( c ); + + Item ore = new IronOre( Utility.RandomMinMax( 5, 10 ) ); + ore.ItemID = 0x19B7; + c.DropItem(ore); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Gems, 2 ); + } + + public override bool BleedImmune{ get{ return true; } } + public override bool BardImmune { get { return true; } } + public override bool Unprovokable { get { return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public override void CheckReflect( Mobile caster, ref bool reflect ) + { + reflect = true; + } + + public StoneStatue( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/StormCloud.cs b/Scripts/Mobiles/Elemental/StormCloud.cs new file mode 100644 index 0000000..1020adc --- /dev/null +++ b/Scripts/Mobiles/Elemental/StormCloud.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a fallen cloud" )] + public class StormCloud : BaseCreature + { + [Constructable] + public StormCloud () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a storm cloud"; + Body = 341; + BaseSoundID = 263; + CanSwim = true; + + SetStr( 126, 155 ); + SetDex( 166, 185 ); + SetInt( 101, 125 ); + + SetHits( 76, 93 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 75.2, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 70.1, 100.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Gems ); + } + + public override bool BleedImmune{ get{ return true; } } + + public StormCloud( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 274 ) + BaseSoundID = 838; + } + } +} diff --git a/Scripts/Mobiles/Elemental/Typhoon.cs b/Scripts/Mobiles/Elemental/Typhoon.cs new file mode 100644 index 0000000..4a261e0 --- /dev/null +++ b/Scripts/Mobiles/Elemental/Typhoon.cs @@ -0,0 +1,71 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a puddle" )] + public class Typhoon : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public Typhoon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a typhoon"; + Body = 13; + Hue = 1084; + BaseSoundID = 655; + CanSwim = true; + + SetStr( 126, 155 ); + SetDex( 166, 185 ); + SetInt( 101, 125 ); + + SetHits( 76, 93 ); + + SetDamage( 8, 10 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool BleedImmune{ get{ return true; } } + + public Typhoon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 263 ) + BaseSoundID = 655; + } + } +} diff --git a/Scripts/Mobiles/Elemental/WaterElemental.cs b/Scripts/Mobiles/Elemental/WaterElemental.cs new file mode 100644 index 0000000..1551f83 --- /dev/null +++ b/Scripts/Mobiles/Elemental/WaterElemental.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a water elemental corpse" )] + public class WaterElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public WaterElemental () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a water elemental"; + Body = 16; + BaseSoundID = 278; + + SetStr( 126, 155 ); + SetDex( 66, 85 ); + SetInt( 101, 125 ); + + SetHits( 76, 93 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.Concentration, 60.1, 75.0 ); + SetSkill( SkillName.Magery, 60.1, 75.0 ); + SetSkill( SkillName.MagicResist, 100.1, 115.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + ControlSlots = 3; + CanSwim = true; + + PackItem( new BlackPearl( 3 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.LowPotions ); + } + + public override bool BleedImmune{ get{ return true; } } + + public WaterElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/WaterElementalElder.cs b/Scripts/Mobiles/Elemental/WaterElementalElder.cs new file mode 100644 index 0000000..fa65c43 --- /dev/null +++ b/Scripts/Mobiles/Elemental/WaterElementalElder.cs @@ -0,0 +1,68 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an elemental corpse" )] + public class WaterElementalElder : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public WaterElementalElder () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "elder elemental of water"; + Body = 83; + Hue = 1084; + BaseSoundID = 278; + + SetStr( 408, 444 ); + SetDex( 83, 106 ); + SetInt( 339, 369 ); + + SetHits( 245, 266 ); + + SetDamage( 11, 19 ); + + SetSkill( SkillName.Concentration, 87.6, 106.3 ); + SetSkill( SkillName.Magery, 87.6, 106.3 ); + SetSkill( SkillName.MagicResist, 75.1, 93.8 ); + SetSkill( SkillName.Tactics, 100.1, 112.5 ); + SetSkill( SkillName.HandToHand, 87.6, 112.5 ); + + Fame = 12500; + Karma = -12500; + + VirtualArmor = 50; + + PackItem( new BlackPearl( Utility.RandomMinMax( 20, 40 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.HighPotions ); + } + + public override bool BleedImmune{ get{ return true; } } + + public WaterElementalElder( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Elemental/WoodElemental.cs b/Scripts/Mobiles/Elemental/WoodElemental.cs new file mode 100644 index 0000000..57cc6cc --- /dev/null +++ b/Scripts/Mobiles/Elemental/WoodElemental.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an elemental corpse" )] + public class WoodElemental : BaseCreature + { + public override double DispelDifficulty{ get{ return 117.5; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public WoodElemental() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a wood elemental"; + Body = 259; + BaseSoundID = 0x5F3; + AnimationMod = 1; + + SetStr( 126, 155 ); + SetDex( 66, 85 ); + SetInt( 71, 92 ); + + SetHits( 76, 93 ); + + SetDamage( 9, 16 ); + + SetSkill( SkillName.MagicResist, 50.1, 95.0 ); + SetSkill( SkillName.Tactics, 60.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 34; + + PackItem( new MandrakeRoot( Utility.RandomMinMax( 5,10 ) ) ); + PackWood( 10 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override bool BleedImmune{ get{ return true; } } + + public WoodElemental( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Fey/Centaur.cs b/Scripts/Mobiles/Fey/Centaur.cs new file mode 100644 index 0000000..a0512e6 --- /dev/null +++ b/Scripts/Mobiles/Fey/Centaur.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a centaur corpse" )] + public class Centaur : BaseCreature + { + [Constructable] + public Centaur() : base( AIType.AI_Melee, FightMode.Evil, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "centaur" ); + HiddenTitle = "the centaur"; + Body = 126; + BaseSoundID = 679; + + SetStr( 202, 300 ); + SetDex( 104, 260 ); + SetInt( 91, 100 ); + + SetHits( 130, 172 ); + + SetDamage( 13, 24 ); + + SetSkill( SkillName.Archery, 95.1, 100.0 ); + SetSkill( SkillName.MagicResist, 50.3, 80.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 95.1, 100.0 ); + + Fame = 6500; + Karma = 6500; + + VirtualArmor = 50; + AddItem( new Bow() ); + PackItem( new Arrow( Utility.RandomMinMax( 80, 90 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 8; } } + + public Centaur( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 678 ) + BaseSoundID = 679; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Fey/DreadHorn.cs b/Scripts/Mobiles/Fey/DreadHorn.cs new file mode 100644 index 0000000..e4555f5 --- /dev/null +++ b/Scripts/Mobiles/Fey/DreadHorn.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a dread horn corpse" )] + public class DreadHorn : BaseCreature + { + public override bool HasBreath{ get{ return true; } } + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + + [Constructable] + public DreadHorn() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + BaseSoundID = 0xA8; + + SetStr( 596, 625 ); + SetDex( 186, 205 ); + SetInt( 186, 225 ); + + SetHits( 398, 415 ); + + SetDamage( 22, 28 ); + + SetSkill( SkillName.Concentration, 30.4, 70.0 ); + SetSkill( SkillName.Magery, 30.4, 70.0 ); + SetSkill( SkillName.MagicResist, 105.3, 120.0 ); + SetSkill( SkillName.Tactics, 117.6, 120.0 ); + SetSkill( SkillName.HandToHand, 100.5, 112.5 ); + + Fame = 19000; + Karma = -19000; + + VirtualArmor = 70; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.HighPotions ); + } + + public override int Meat{ get{ return 5; } } + public override int Hides{ get{ return 10; } } + + public DreadHorn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Fey/Fairy.cs b/Scripts/Mobiles/Fey/Fairy.cs new file mode 100644 index 0000000..546d61b --- /dev/null +++ b/Scripts/Mobiles/Fey/Fairy.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a fairy corpse" )] + public class Fairy : BaseCreature + { + [Constructable] + public Fairy() : base( AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4 ) + { + Name = "a fairy"; + Body = 58; + BaseSoundID = 0x57A; + Hue = 1185; + + SetStr( 196, 225 ); + SetDex( 196, 225 ); + SetInt( 196, 225 ); + + SetHits( 118, 135 ); + + SetDamage( 17, 18 ); + + SetSkill( SkillName.Concentration, 80.0 ); + SetSkill( SkillName.Magery, 80.0 ); + SetSkill( SkillName.MagicResist, 80.0 ); + SetSkill( SkillName.Tactics, 80.0 ); + SetSkill( SkillName.HandToHand, 80.0 ); + + Fame = 4000; + Karma = 4000; + + VirtualArmor = 40; + + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + } + + public Fairy( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Fey/Pixie.cs b/Scripts/Mobiles/Fey/Pixie.cs new file mode 100644 index 0000000..c47db80 --- /dev/null +++ b/Scripts/Mobiles/Fey/Pixie.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a pixie corpse" )] + public class Pixie : BaseCreature + { + [Constructable] + public Pixie() : base( AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "pixie" ); + HiddenTitle = "the pixie"; + Body = 37; + BaseSoundID = 0x467; + + SetStr( 21, 30 ); + SetDex( 301, 400 ); + SetInt( 201, 250 ); + + SetHits( 13, 18 ); + + SetDamage( 9, 15 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.Meditation, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 100.5, 150.0 ); + SetSkill( SkillName.Tactics, 10.1, 20.0 ); + SetSkill( SkillName.HandToHand, 10.1, 12.5 ); + + Fame = 7000; + Karma = 7000; + + VirtualArmor = 100; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.Gems, 2 ); + } + + public override int Hides{ get{ return 5; } } + public override int Meat{ get{ return 1; } } + + public Pixie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Fey/Satyr.cs b/Scripts/Mobiles/Fey/Satyr.cs new file mode 100644 index 0000000..7f09412 --- /dev/null +++ b/Scripts/Mobiles/Fey/Satyr.cs @@ -0,0 +1,112 @@ +using System; +using Server; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; +using System.Collections.Generic; + +namespace Server.Mobiles +{ + [CorpseName( "a satyr's corpse" )] + public class Satyr : BaseCreature + { + private DateTime m_NextPickup; + + [Constructable] + public Satyr() : base( AIType.AI_Animal, FightMode.Evil, 10, 1, 0.2, 0.4 ) + { + Name = "a satyr"; + Body = 118; + BaseSoundID = 0x585; + + SetStr( 177, 195 ); + SetDex( 251, 269 ); + SetInt( 153, 170 ); + + SetHits( 150, 200 ); + + SetDamage( 13, 24 ); + + SetSkill( SkillName.MagicResist, 55.0, 65.0 ); + SetSkill( SkillName.Tactics, 80.0, 100.0 ); + SetSkill( SkillName.HandToHand, 80.0, 100.0 ); + + Fame = 5000; + Karma = 5000; + + VirtualArmor = 28; + + Pipes pipe = new Pipes(); + pipe.Name = "satyr pipes"; + PackItem( pipe ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override void OnThink() + { + if ( DateTime.Now >= m_NextPickup ) + { + m_NextPickup = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 10, 20 ) ); + Peace( Combatant ); + } + base.OnThink(); + } + + public override int Meat { get { return 1; } } + + public Satyr( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + // ------------------------------------------------------------------------------------------------------------------------------------------ + + private DateTime m_NextPeace; + public void Peace( Mobile target ) + { + if ( target == null || Deleted || !Alive || m_NextPeace > DateTime.Now ) + return; + + PlayerMobile p = target as PlayerMobile; + + if ( p != null && p.PeacedUntil < DateTime.Now && !p.Hidden && CanBeHarmful( p ) ) + { + p.PeacedUntil = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 20, 45 ) ); + p.SendLocalizedMessage( 500616 ); // You hear lovely music, and forget to continue battling! + p.FixedParticles( 0x376A, 1, 32, 0x15BD, EffectLayer.Waist ); + p.Combatant = null; + target.Warmode = false; + UndressItem( target, Layer.OneHanded ); + UndressItem( target, Layer.TwoHanded ); + + PlaySound( Utility.RandomMinMax( 0x58A, 0x58C ) ); + } + + m_NextPeace = DateTime.Now + TimeSpan.FromSeconds( 50 ); + } + + public void UndressItem( Mobile m, Layer layer ) + { + Item item = m.FindItemOnLayer( layer ); + + if ( item != null && item.Movable ) + m.PlaceInBackpack( item ); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Fey/Unicorn.cs b/Scripts/Mobiles/Fey/Unicorn.cs new file mode 100644 index 0000000..e885822 --- /dev/null +++ b/Scripts/Mobiles/Fey/Unicorn.cs @@ -0,0 +1,67 @@ +using System; +using Server.Mobiles; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "a unicorn corpse" )] + public class Unicorn : BaseCreature + { + [Constructable] + public Unicorn() : base( AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4 ) + { + Name = "a unicorn"; + BaseSoundID = 0x4BC; + Body = 230; + + SetStr( 496, 525 ); + SetDex( 86, 105 ); + SetInt( 86, 125 ); + + SetHits( 298, 315 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.Concentration, 10.4, 50.0 ); + SetSkill( SkillName.Magery, 10.4, 50.0 ); + SetSkill( SkillName.MagicResist, 85.3, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 80.5, 92.5 ); + + Fame = 14000; + Karma = 14000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.HighPotions ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 10; } } + + public Unicorn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Fey/Wisp.cs b/Scripts/Mobiles/Fey/Wisp.cs new file mode 100644 index 0000000..b73fa57 --- /dev/null +++ b/Scripts/Mobiles/Fey/Wisp.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a wisp corpse" )] + public class Wisp : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Wisp; } } + public override TimeSpan ReacquireDelay { get { return TimeSpan.FromSeconds( 1.0 ); } } + + [Constructable] + public Wisp() : base( AIType.AI_Mage, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a wisp"; + Body = 58; + BaseSoundID = 466; + + SetStr( 196, 225 ); + SetDex( 196, 225 ); + SetInt( 196, 225 ); + + SetHits( 118, 135 ); + + SetDamage( 17, 18 ); + + SetSkill( SkillName.Concentration, 80.0 ); + SetSkill( SkillName.Magery, 80.0 ); + SetSkill( SkillName.MagicResist, 80.0 ); + SetSkill( SkillName.Tactics, 80.0 ); + SetSkill( SkillName.HandToHand, 80.0 ); + + Fame = 4000; + Karma = 0; + + VirtualArmor = 40; + + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + } + + public Wisp( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/FireGargoyle.cs b/Scripts/Mobiles/Gargoyles/FireGargoyle.cs new file mode 100644 index 0000000..12675e6 --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/FireGargoyle.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a charred corpse" )] + public class FireGargoyle : BaseCreature + { + [Constructable] + public FireGargoyle() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "fire gargoyle" ); + Body = 155; + BaseSoundID = 0x174; + + SetStr( 351, 400 ); + SetDex( 126, 145 ); + SetInt( 226, 250 ); + + SetHits( 211, 240 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.Concentration, 90.1, 105.0 ); + SetSkill( SkillName.Magery, 90.1, 105.0 ); + SetSkill( SkillName.Meditation, 90.1, 105.0 ); + SetSkill( SkillName.MagicResist, 90.1, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 40.1, 80.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Gems ); + } + + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 1; } } + + public FireGargoyle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/Gargoyle.cs b/Scripts/Mobiles/Gargoyles/Gargoyle.cs new file mode 100644 index 0000000..09f59b7 --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/Gargoyle.cs @@ -0,0 +1,62 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class Gargoyle : BaseCreature + { + [Constructable] + public Gargoyle() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a gargoyle"; + Body = 4; + BaseSoundID = 372; + + SetStr( 146, 175 ); + SetDex( 76, 95 ); + SetInt( 81, 105 ); + + SetHits( 88, 105 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.Concentration, 70.1, 85.0 ); + SetSkill( SkillName.Magery, 70.1, 85.0 ); + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 40.1, 80.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 4 ) ); + } + + public override int Meat{ get{ return 1; } } + + public Gargoyle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/GargoyleCrimson.cs b/Scripts/Mobiles/Gargoyles/GargoyleCrimson.cs new file mode 100644 index 0000000..21600ef --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/GargoyleCrimson.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class GargoyleCrimson : BaseCreature + { + [Constructable] + public GargoyleCrimson() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "gargoyle" ); + HiddenTitle = "the gargoyle"; + Body = 307; + BaseSoundID = 0x174; + + SetStr( 369, 413 ); + SetDex( 114, 143 ); + SetInt( 122, 158 ); + + SetHits( 222, 248 ); + + SetDamage( 17, 26 ); + + SetSkill( SkillName.MagicResist, 105.1, 120.0 ); + SetSkill( SkillName.Tactics, 100.1, 120.0 ); + SetSkill( SkillName.HandToHand, 80.1, 120.0 ); + + Fame = 7000; + Karma = -7000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Gems, 3 ); + AddLoot( LootPack.MedPotions ); + } + + public override int Meat{ get{ return 2; } } + + public GargoyleCrimson( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/GargoyleIce.cs b/Scripts/Mobiles/Gargoyles/GargoyleIce.cs new file mode 100644 index 0000000..d1e2e75 --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/GargoyleIce.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class GargoyleIce : BaseCreature + { + [Constructable] + public GargoyleIce() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "gargoyle" ); + HiddenTitle = "the gargoyle"; + Body = 311; + BaseSoundID = 0x174; + + SetStr( 369, 413 ); + SetDex( 114, 143 ); + SetInt( 122, 158 ); + + SetHits( 222, 248 ); + + SetDamage( 17, 26 ); + + SetSkill( SkillName.MagicResist, 105.1, 120.0 ); + SetSkill( SkillName.Tactics, 100.1, 120.0 ); + SetSkill( SkillName.HandToHand, 80.1, 120.0 ); + + Fame = 7000; + Karma = -7000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Gems, 3 ); + AddLoot( LootPack.MedPotions ); + } + + public GargoyleIce( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/GargoyleKnight.cs b/Scripts/Mobiles/Gargoyles/GargoyleKnight.cs new file mode 100644 index 0000000..f2aa89e --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/GargoyleKnight.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class GargoyleKnight : BaseCreature + { + [Constructable] + public GargoyleKnight() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a gargoyle knight"; + Body = 261; + BaseSoundID = 0x174; + AnimationMod = 1; + + SetStr( 246, 275 ); + SetDex( 76, 95 ); + SetInt( 81, 105 ); + + SetHits( 148, 165 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 85.1, 100.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 50; + + PackItem( new Longsword() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.Gems, 1 ); + AddLoot( LootPack.LowPotions ); + } + + public GargoyleKnight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/GargoyleMage.cs b/Scripts/Mobiles/Gargoyles/GargoyleMage.cs new file mode 100644 index 0000000..8156878 --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/GargoyleMage.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class GargoyleMage : BaseCreature + { + [Constructable] + public GargoyleMage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "gargoyle" ); + HiddenTitle = "the gargoyle"; + Body = 134; + BaseSoundID = 0x540; + + SetStr( 246, 275 ); + SetDex( 176, 195 ); + SetInt( 181, 205 ); + + SetHits( 188, 205 ); + + SetDamage( 12, 22 ); + + SetSkill( SkillName.Concentration, 90.1, 105.0 ); + SetSkill( SkillName.Magery, 90.1, 105.0 ); + SetSkill( SkillName.MagicResist, 90.1, 105.0 ); + SetSkill( SkillName.Tactics, 70.1, 90.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 5000; + Karma = -5000; + + VirtualArmor = 42; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 4 ) ); + } + + public override int Meat{ get{ return 2; } } + + public GargoyleMage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/GargoyleStone.cs b/Scripts/Mobiles/Gargoyles/GargoyleStone.cs new file mode 100644 index 0000000..d6d9eb0 --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/GargoyleStone.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class GargoyleStone : BaseCreature + { + [Constructable] + public GargoyleStone() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "gargoyle" ); + HiddenTitle = "the gargoyle"; + Body = 309; + BaseSoundID = 0x174; + + SetStr( 369, 413 ); + SetDex( 114, 143 ); + SetInt( 122, 158 ); + + SetHits( 222, 248 ); + + SetDamage( 17, 26 ); + + SetSkill( SkillName.MagicResist, 105.1, 120.0 ); + SetSkill( SkillName.Tactics, 100.1, 120.0 ); + SetSkill( SkillName.HandToHand, 80.1, 120.0 ); + + Fame = 7000; + Karma = -7000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Gems, 3 ); + AddLoot( LootPack.MedPotions ); + } + + public GargoyleStone( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/GargoyleUndead.cs b/Scripts/Mobiles/Gargoyles/GargoyleUndead.cs new file mode 100644 index 0000000..2d472f9 --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/GargoyleUndead.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class GargoyleUndead : BaseCreature + { + [Constructable] + public GargoyleUndead() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a rotting gargoyle"; + Body = 310; + BaseSoundID = 471; + Clan = Clan.Undead; + + SetStr( 369, 413 ); + SetDex( 114, 143 ); + SetInt( 122, 158 ); + + SetHits( 222, 248 ); + + SetDamage( 17, 26 ); + + SetSkill( SkillName.MagicResist, 105.1, 120.0 ); + SetSkill( SkillName.Tactics, 100.1, 120.0 ); + SetSkill( SkillName.HandToHand, 80.1, 120.0 ); + + Fame = 7000; + Karma = -7000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Gems, 3 ); + } + + public GargoyleUndead( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/GargoyleWizard.cs b/Scripts/Mobiles/Gargoyles/GargoyleWizard.cs new file mode 100644 index 0000000..4aa9153 --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/GargoyleWizard.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class GargoyleWizard : BaseCreature + { + [Constructable] + public GargoyleWizard() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "gargoyle" ); + HiddenTitle = "the gargoyle"; + Body = 308; + BaseSoundID = 0x540; + + SetStr( 246, 275 ); + SetDex( 176, 195 ); + SetInt( 181, 205 ); + + SetHits( 188, 205 ); + + SetDamage( 12, 22 ); + + SetSkill( SkillName.Concentration, 90.1, 105.0 ); + SetSkill( SkillName.Magery, 90.1, 105.0 ); + SetSkill( SkillName.MagicResist, 90.1, 105.0 ); + SetSkill( SkillName.Tactics, 70.1, 90.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 5000; + Karma = -5000; + + VirtualArmor = 42; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 4 ) ); + } + + public override int Meat{ get{ return 2; } } + + public GargoyleWizard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/StoneGargoyle.cs b/Scripts/Mobiles/Gargoyles/StoneGargoyle.cs new file mode 100644 index 0000000..6b11763 --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/StoneGargoyle.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class StoneGargoyle : BaseCreature + { + [Constructable] + public StoneGargoyle() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a stone gargoyle"; + Body = 4; + Hue = 1401; + BaseSoundID = 0x174; + + SetStr( 246, 275 ); + SetDex( 76, 95 ); + SetInt( 81, 105 ); + + SetHits( 148, 165 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 85.1, 100.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 50; + + PackItem( new IronIngot( 12 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.Gems, 1 ); + AddLoot( LootPack.LowPotions ); + } + + public StoneGargoyle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Gargoyles/ZombieGargoyle.cs b/Scripts/Mobiles/Gargoyles/ZombieGargoyle.cs new file mode 100644 index 0000000..ecfcbbe --- /dev/null +++ b/Scripts/Mobiles/Gargoyles/ZombieGargoyle.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a gargoyle corpse" )] + public class ZombieGargoyle : BaseCreature + { + [Constructable] + public ZombieGargoyle() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a gargoyle corpse"; + Body = 333; + BaseSoundID = 471; + Clan = Clan.Undead; + + SetStr( 246, 275 ); + SetDex( 76, 95 ); + SetInt( 81, 105 ); + + SetHits( 148, 165 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 85.1, 100.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems, 1 ); + } + + public ZombieGargoyle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/ArcticOgreLord.cs b/Scripts/Mobiles/Giants/ArcticOgreLord.cs new file mode 100644 index 0000000..658c5bf --- /dev/null +++ b/Scripts/Mobiles/Giants/ArcticOgreLord.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a frozen ogre lord's corpse" )] + [TypeAlias( "Server.Mobiles.ArticOgreLord" )] + public class ArcticOgreLord : BaseCreature + { + [Constructable] + public ArcticOgreLord() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an arctic ogre lord"; + Body = 316; + Hue = 0x43D; + BaseSoundID = 427; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 48; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedPotions ); + } + + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + + public ArcticOgreLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/Cyclops.cs b/Scripts/Mobiles/Giants/Cyclops.cs new file mode 100644 index 0000000..df252e5 --- /dev/null +++ b/Scripts/Mobiles/Giants/Cyclops.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a cyclopean corpse" )] + public class Cyclops : BaseCreature + { + [Constructable] + public Cyclops() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a cyclops"; + Body = 76; + BaseSoundID = 604; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 48; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 4; } } + + public Cyclops( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/CyclopsChief.cs b/Scripts/Mobiles/Giants/CyclopsChief.cs new file mode 100644 index 0000000..3a469d0 --- /dev/null +++ b/Scripts/Mobiles/Giants/CyclopsChief.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a cyclopean corpse" )] + public class CyclopsChief : BaseCreature + { + [Constructable] + public CyclopsChief() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "greek" ); + Title = "the cyclops chief"; + Body = 75; + BaseSoundID = 604; + + SetStr( 386, 435 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 302, 331 ); + SetMana( 0 ); + + SetDamage( 9, 25 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 6500; + Karma = -6500; + + VirtualArmor = 52; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 4; } } + + public CyclopsChief( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/CyclopsLord.cs b/Scripts/Mobiles/Giants/CyclopsLord.cs new file mode 100644 index 0000000..2eb5b6c --- /dev/null +++ b/Scripts/Mobiles/Giants/CyclopsLord.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a cyclopean corpse" )] + public class CyclopsLord : BaseCreature + { + [Constructable] + public CyclopsLord() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "greek" ); + Title = "the cyclops lord"; + Body = 167; + BaseSoundID = 604; + + SetStr( 986, 1185 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 592, 711 ); + SetMana( 0 ); + + SetDamage( 22, 29 ); + + SetSkill( SkillName.MagicResist, 70.3, 105.0 ); + SetSkill( SkillName.Tactics, 90.1, 120.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 18000; + Karma = -18000; + + VirtualArmor = 80; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 4; } } + + public CyclopsLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/Ettin.cs b/Scripts/Mobiles/Giants/Ettin.cs new file mode 100644 index 0000000..cd25479 --- /dev/null +++ b/Scripts/Mobiles/Giants/Ettin.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an ettins corpse" )] + public class Ettin : BaseCreature + { + [Constructable] + public Ettin() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ettin"; + Body = Utility.RandomList( 2, 18, 322, 323 ); + BaseSoundID = 367; + + SetStr( 136, 165 ); + SetDex( 56, 75 ); + SetInt( 31, 55 ); + + SetHits( 82, 99 ); + + SetDamage( 7, 17 ); + + SetSkill( SkillName.MagicResist, 40.1, 55.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 60.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 38; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowPotions ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 4; } } + + public Ettin( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/ForestGiant.cs b/Scripts/Mobiles/Giants/ForestGiant.cs new file mode 100644 index 0000000..9136043 --- /dev/null +++ b/Scripts/Mobiles/Giants/ForestGiant.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class ForestGiant : BaseCreature + { + [Constructable] + public ForestGiant () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "giant" ); + Title = "the forest giant"; + Body = 40; + BaseSoundID = 609; + + SetStr( 767, 945 ); + SetDex( 66, 75 ); + SetInt( 46, 70 ); + + SetHits( 476, 552 ); + + SetDamage( 20, 25 ); + + SetSkill( SkillName.MagicResist, 125.1, 140.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.FilthyRich ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 8; } } + + public ForestGiant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/FrostGiant.cs b/Scripts/Mobiles/Giants/FrostGiant.cs new file mode 100644 index 0000000..f9a49b1 --- /dev/null +++ b/Scripts/Mobiles/Giants/FrostGiant.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class FrostGiant : BaseCreature + { + [Constructable] + public FrostGiant () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "giant" ); + Title = "the frost giant"; + Body = 105; + BaseSoundID = 609; + AnimationMod = 4; + + SetStr( 767, 945 ); + SetDex( 66, 75 ); + SetInt( 46, 70 ); + + SetHits( 476, 552 ); + + SetDamage( 20, 25 ); + + SetSkill( SkillName.MagicResist, 125.1, 140.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 50; + + PackItem( new BattleAxe() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.FilthyRich ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 2; } } + + public FrostGiant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/HillGiant.cs b/Scripts/Mobiles/Giants/HillGiant.cs new file mode 100644 index 0000000..afc3c5f --- /dev/null +++ b/Scripts/Mobiles/Giants/HillGiant.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class HillGiant : BaseCreature + { + [Constructable] + public HillGiant () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "giant" ); + Title = "the hill giant"; + Body = Utility.RandomList( 92, 93 ); + BaseSoundID = 609; + + SetStr( 767, 945 ); + SetDex( 66, 75 ); + SetInt( 46, 70 ); + + SetHits( 476, 552 ); + + SetDamage( 20, 25 ); + + SetSkill( SkillName.MagicResist, 125.1, 140.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.FilthyRich ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 2; } } + + public HillGiant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/JungleGiant.cs b/Scripts/Mobiles/Giants/JungleGiant.cs new file mode 100644 index 0000000..d53e9cb --- /dev/null +++ b/Scripts/Mobiles/Giants/JungleGiant.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class JungleGiant : BaseCreature + { + [Constructable] + public JungleGiant() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "giant" ); + Title = "the jungle giant"; + Body = 130; + BaseSoundID = 609; + + SetStr( 586, 635 ); + SetDex( 126, 145 ); + SetInt( 321, 345 ); + + SetHits( 422, 451 ); + + SetDamage( 16, 20 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 16500; + Karma = -16500; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.HighScrolls ); + } + + public override int Meat{ get{ return 8; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + + public JungleGiant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/MountainGiant.cs b/Scripts/Mobiles/Giants/MountainGiant.cs new file mode 100644 index 0000000..88295e0 --- /dev/null +++ b/Scripts/Mobiles/Giants/MountainGiant.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class MountainGiant : BaseCreature + { + [Constructable] + public MountainGiant () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "giant" ); + Title = "the mountain giant"; + Body = 101; + BaseSoundID = 609; + + SetStr( 767, 945 ); + SetDex( 66, 75 ); + SetInt( 46, 70 ); + + SetHits( 476, 552 ); + + SetDamage( 20, 25 ); + + SetSkill( SkillName.MagicResist, 125.1, 140.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 50; + + Item orepile = new IronOre(); + orepile.Amount = Utility.RandomMinMax(50, 100); + orepile.ItemID = 0x19B9; + PackItem(orepile); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.FilthyRich ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 2; } } + + public MountainGiant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/Ogre.cs b/Scripts/Mobiles/Giants/Ogre.cs new file mode 100644 index 0000000..7b41530 --- /dev/null +++ b/Scripts/Mobiles/Giants/Ogre.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an ogre corpse" )] + public class Ogre : BaseCreature + { + [Constructable] + public Ogre () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ogre"; + Body = 1; + BaseSoundID = 427; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowPotions ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + + public Ogre( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/OgreLord.cs b/Scripts/Mobiles/Giants/OgreLord.cs new file mode 100644 index 0000000..fd81a04 --- /dev/null +++ b/Scripts/Mobiles/Giants/OgreLord.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an ogre lords corpse" )] + public class OgreLord : BaseCreature + { + [Constructable] + public OgreLord () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ogre lord"; + Body = 316; + BaseSoundID = 427; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 48; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedPotions ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 2; } } + + public OgreLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/OgreMagi.cs b/Scripts/Mobiles/Giants/OgreMagi.cs new file mode 100644 index 0000000..d3c6523 --- /dev/null +++ b/Scripts/Mobiles/Giants/OgreMagi.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an ogre corpse" )] + public class OgreMagi : BaseCreature + { + [Constructable] + public OgreMagi () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ogre magi"; + Body = 66; + BaseSoundID = 427; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 281, 305 ); + + SetHits( 202, 231 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + + Fame = 6500; + Karma = -6500; + + VirtualArmor = 48; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedPotions ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 2; } } + + public OgreMagi( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/SandGiant.cs b/Scripts/Mobiles/Giants/SandGiant.cs new file mode 100644 index 0000000..77d79c4 --- /dev/null +++ b/Scripts/Mobiles/Giants/SandGiant.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class SandGiant : BaseCreature + { + [Constructable] + public SandGiant() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "giant" ); + Title = "the sand giant"; + Body = 129; + BaseSoundID = 609; + + SetStr( 586, 635 ); + SetDex( 126, 145 ); + SetInt( 321, 345 ); + + SetHits( 422, 451 ); + + SetDamage( 16, 20 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 16500; + Karma = -16500; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.HighScrolls ); + } + + public override int Meat{ get{ return 8; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + + public SandGiant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/SeaGiant.cs b/Scripts/Mobiles/Giants/SeaGiant.cs new file mode 100644 index 0000000..f2f19f2 --- /dev/null +++ b/Scripts/Mobiles/Giants/SeaGiant.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class SeaGiant : BaseCreature + { + [Constructable] + public SeaGiant () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a sea giant"; + Body = 23; + BaseSoundID = 609; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 48; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 6; } } + + public SeaGiant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/ShadowTitan.cs b/Scripts/Mobiles/Giants/ShadowTitan.cs new file mode 100644 index 0000000..e5d9329 --- /dev/null +++ b/Scripts/Mobiles/Giants/ShadowTitan.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class ShadowTitan : BaseCreature + { + [Constructable] + public ShadowTitan() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "giant" ); + Title = "the shadow titan"; + Body = 67; + BaseSoundID = 609; + + SetStr( 586, 635 ); + SetDex( 126, 145 ); + SetInt( 321, 345 ); + + SetHits( 422, 451 ); + + SetDamage( 16, 20 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 16500; + Karma = -16500; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.HighScrolls ); + } + + public override int Meat{ get{ return 8; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + + public ShadowTitan( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/SnowEttin.cs b/Scripts/Mobiles/Giants/SnowEttin.cs new file mode 100644 index 0000000..2e03e16 --- /dev/null +++ b/Scripts/Mobiles/Giants/SnowEttin.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an ettins corpse" )] + public class SnowEttin : BaseCreature + { + [Constructable] + public SnowEttin() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ettin"; + Body = 102; + BaseSoundID = 367; + + SetStr( 136, 165 ); + SetDex( 56, 75 ); + SetInt( 31, 55 ); + + SetHits( 82, 99 ); + + SetDamage( 7, 17 ); + + SetSkill( SkillName.MagicResist, 40.1, 55.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 60.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 38; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowPotions ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 4; } } + + public SnowEttin( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/StormGiant.cs b/Scripts/Mobiles/Giants/StormGiant.cs new file mode 100644 index 0000000..93bb1cb --- /dev/null +++ b/Scripts/Mobiles/Giants/StormGiant.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a giant corpse" )] + public class StormGiant : BaseCreature + { + [Constructable] + public StormGiant() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "giant" ); + Title = "the storm giant"; + Body = 131; + BaseSoundID = 609; + + SetStr( 586, 635 ); + SetDex( 126, 145 ); + SetInt( 321, 345 ); + + SetHits( 422, 451 ); + + SetDamage( 16, 20 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 16500; + Karma = -16500; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.HighScrolls ); + } + + public override int Meat{ get{ return 8; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + + public StormGiant( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Giants/Titan.cs b/Scripts/Mobiles/Giants/Titan.cs new file mode 100644 index 0000000..1057533 --- /dev/null +++ b/Scripts/Mobiles/Giants/Titan.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a titans corpse" )] + public class Titan : BaseCreature + { + [Constructable] + public Titan() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a titan"; + Body = 82; + BaseSoundID = 609; + + SetStr( 536, 585 ); + SetDex( 126, 145 ); + SetInt( 281, 305 ); + + SetHits( 322, 351 ); + + SetDamage( 13, 16 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 11500; + Karma = -11500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls ); + } + + public override int Meat{ get{ return 4; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + + public Titan( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Hellish/Cerberus.cs b/Scripts/Mobiles/Hellish/Cerberus.cs new file mode 100644 index 0000000..2b3817b --- /dev/null +++ b/Scripts/Mobiles/Hellish/Cerberus.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a cerberus corpse" )] + public class Cerberus : BaseCreature + { + public override bool HasBreath{ get{ return true; } } + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + + [Constructable] + public Cerberus() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a cerberus"; + Body = 164; + BaseSoundID = 0x52A; + + SetStr( 402, 450 ); + SetDex( 181, 205 ); + SetInt( 136, 160 ); + + SetHits( 275, 325 ); + + SetDamage( 18, 24 ); + + SetSkill( SkillName.MagicResist, 85.1, 110.0 ); + SetSkill( SkillName.Tactics, 105.1, 120.0 ); + SetSkill( SkillName.HandToHand, 95.1, 110.0 ); + + Fame = 8400; + Karma = -8400; + + VirtualArmor = 35; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 15; } } + + public Cerberus( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Hellish/Haderus.cs b/Scripts/Mobiles/Hellish/Haderus.cs new file mode 100644 index 0000000..4a04863 --- /dev/null +++ b/Scripts/Mobiles/Hellish/Haderus.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a haderus corpse" )] + public class Haderus : BaseCreature + { + public override bool HasBreath{ get{ return true; } } + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + + [Constructable] + public Haderus() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a haderus"; + Body = 305; + BaseSoundID = 0x596; + + SetStr( 402, 450 ); + SetDex( 181, 205 ); + SetInt( 136, 160 ); + + SetHits( 275, 325 ); + + SetDamage( 18, 24 ); + + SetSkill( SkillName.MagicResist, 85.1, 110.0 ); + SetSkill( SkillName.Tactics, 105.1, 120.0 ); + SetSkill( SkillName.HandToHand, 95.1, 110.0 ); + + Fame = 8400; + Karma = -8400; + + VirtualArmor = 35; + + PackItem( new SulfurousAsh( 20 ) ); + + AddItem( new LighterSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 15; } } + + public Haderus( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Hellish/HellCat.cs b/Scripts/Mobiles/Hellish/HellCat.cs new file mode 100644 index 0000000..72f7c10 --- /dev/null +++ b/Scripts/Mobiles/Hellish/HellCat.cs @@ -0,0 +1,62 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a feline corpse" )] + [TypeAlias( "Server.Mobiles.Preditorhellcat" )] + public class HellCat : BaseCreature + { + [Constructable] + public HellCat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a hell cat"; + Body = 214; + Hue = 1652; + BaseSoundID = 0xBA; + + SetStr( 161, 185 ); + SetDex( 96, 115 ); + SetInt( 76, 100 ); + + SetHits( 97, 131 ); + + SetDamage( 5, 17 ); + + SetSkill( SkillName.MagicResist, 75.1, 90.0 ); + SetSkill( SkillName.Tactics, 50.1, 65.0 ); + SetSkill( SkillName.HandToHand, 50.1, 65.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 30; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Hides{ get{ return 10; } } + + public HellCat(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Hellish/HellHound.cs b/Scripts/Mobiles/Hellish/HellHound.cs new file mode 100644 index 0000000..0d753e0 --- /dev/null +++ b/Scripts/Mobiles/Hellish/HellHound.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a hell hound corpse" )] + public class HellHound : BaseCreature + { + [Constructable] + public HellHound() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a hell hound"; + Body = 280; + BaseSoundID = 229; + + SetStr( 102, 150 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 66, 125 ); + + SetDamage( 11, 17 ); + + Fame = 3400; + Karma = -3400; + + VirtualArmor = 30; + + PackItem( new SulfurousAsh( 5 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 1; } } + + public HellHound( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Hellish/Manticore.cs b/Scripts/Mobiles/Hellish/Manticore.cs new file mode 100644 index 0000000..0b397f7 --- /dev/null +++ b/Scripts/Mobiles/Hellish/Manticore.cs @@ -0,0 +1,61 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a manticore corpse" )] + public class Manticore : BaseCreature + { + [Constructable] + public Manticore () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a manticore"; + Body = 253; + BaseSoundID = 0x515; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 101, 140 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 85.1, 100.0 ); + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 46; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return Poison.Regular; } } + + public Manticore( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Hellish/Nightmare.cs b/Scripts/Mobiles/Hellish/Nightmare.cs new file mode 100644 index 0000000..a01eec3 --- /dev/null +++ b/Scripts/Mobiles/Hellish/Nightmare.cs @@ -0,0 +1,79 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a nightmare corpse" )] + public class Nightmare : BaseCreature + { + [Constructable] + public Nightmare() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a nightmare"; + Body = 226; + Hue = 1109; + BaseSoundID = 0xA8; + + SetStr( 496, 525 ); + SetDex( 86, 105 ); + SetInt( 86, 125 ); + + SetHits( 298, 315 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.Concentration, 10.4, 50.0 ); + SetSkill( SkillName.Magery, 10.4, 50.0 ); + SetSkill( SkillName.MagicResist, 85.3, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 80.5, 92.5 ); + + Fame = 14000; + Karma = -14000; + + VirtualArmor = 60; + + PackItem( new SulfurousAsh( Utility.RandomMinMax( 3, 5 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.HighPotions ); + } + + public override int GetAngerSound() + { + if ( !Controlled ) + return 0x16A; + + return base.GetAngerSound(); + } + + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 5; } } + public override int Hides{ get{ return 10; } } + + public Nightmare( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Hellish/Serperus.cs b/Scripts/Mobiles/Hellish/Serperus.cs new file mode 100644 index 0000000..b665320 --- /dev/null +++ b/Scripts/Mobiles/Hellish/Serperus.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a serperus corpse" )] + public class Serperus : BaseCreature + { + public override bool HasBreath{ get{ return true; } } + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + + [Constructable] + public Serperus() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a serperus"; + Body = 301; + BaseSoundID = 0x4F5; + + SetStr( 402, 450 ); + SetDex( 181, 205 ); + SetInt( 136, 160 ); + + SetHits( 275, 325 ); + + SetDamage( 18, 24 ); + + SetSkill( SkillName.MagicResist, 85.1, 110.0 ); + SetSkill( SkillName.Tactics, 105.1, 120.0 ); + SetSkill( SkillName.HandToHand, 95.1, 110.0 ); + + Fame = 8400; + Karma = -8400; + + VirtualArmor = 35; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 15; } } + + public Serperus( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/BlackKnight.cs b/Scripts/Mobiles/Humanoid/BlackKnight.cs new file mode 100644 index 0000000..4ac5779 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/BlackKnight.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an evil corpse" )] + public class BlackKnight : BaseCreature + { + [Constructable] + public BlackKnight () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "villians" ); + Clan = Clan.Humanoid; + + switch ( Utility.Random( 6 ) ) + { + case 0: Title = "the dark knight"; break; + case 1: Title = "the black knight"; break; + case 2: Title = "the evil knight"; break; + case 3: Title = "the vile champion"; break; + case 4: Title = "the knight of evil"; break; + case 5: Title = "the knight of darkness"; break; + } + + Body = Utility.RandomList( 191, 199, 304 ); + + if ( Body == 191 ) + AnimationMod = 4; + + BaseSoundID = 0x47D; + + SetStr( 767, 945 ); + SetDex( 66, 75 ); + SetInt( 46, 70 ); + + SetHits( 476, 552 ); + + SetDamage( 20, 25 ); + + SetSkill( SkillName.MagicResist, 125.1, 140.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 50; + + PackItem( new Longsword() ); + + switch ( Utility.Random( 6 ) ) + { + case 0: PackItem( new PlateGorget() ); break; + case 1: PackItem( new PlateChest() ); break; + case 2: PackItem( new PlateLegs() ); break; + case 3: PackItem( new PlateArms() ); break; + case 4: PackItem( new PlateGloves() ); break; + case 5: PackItem( new NorseHelm() ); break; + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.MedPotions, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + + public BlackKnight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Brigand.cs b/Scripts/Mobiles/Humanoid/Brigand.cs new file mode 100644 index 0000000..613c849 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Brigand.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections; +using Server.Items; +using Server.ContextMenus; +using Server.Misc; +using Server.Network; + +namespace Server.Mobiles +{ + public class Brigand : BaseCreature + { + public override bool ClickTitle{ get{ return false; } } + public override bool ShowFameTitle{ get{ return false; } } + + [Constructable] + public Brigand() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + SpeechHue = Utility.RandomSpeechHue(); + Hue = Utility.RandomSkinHue(); + Clan = Clan.Humanoid; + + Title = "the brigand"; + switch ( Utility.Random( 4 )) + { + case 0: Title = "the brigand"; break; + case 1: Title = "the bandit"; break; + case 2: Title = "the outlaw"; break; + case 3: Title = "the robber"; break; + } + + int hair = Utility.RandomHairHue(); + + if ( this.Female = Utility.RandomBool() ) + { + Body = 0x191; + Name = NameList.RandomName( "female" ); + } + else + { + Body = 0x190; + Name = NameList.RandomName( "male" ); + if ( Utility.RandomBool() ){ Utility.AssignRandomFacialHair( this, hair ); } + } + + Utility.AssignRandomHair( this, hair ); + + SetStr( 86, 100 ); + SetDex( 81, 95 ); + SetInt( 61, 75 ); + + SetDamage( 10, 23 ); + + SetSkill( SkillName.Fencing, 66.0, 97.5 ); + SetSkill( SkillName.Bludgeoning, 65.0, 87.5 ); + SetSkill( SkillName.MagicResist, 25.0, 47.5 ); + SetSkill( SkillName.Swords, 65.0, 87.5 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 15.0, 37.5 ); + + Fame = 1000; + Karma = -1000; + + Server.Misc.CitizenDressing.CitizenDress( this, 4 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public Brigand( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Bugbear.cs b/Scripts/Mobiles/Humanoid/Bugbear.cs new file mode 100644 index 0000000..8552fa4 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Bugbear.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a bugbear corpse" )] + public class Bugbear : BaseCreature + { + [Constructable] + public Bugbear () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a bugbear"; + Body = 111; + BaseSoundID = 0x56F; + + SetStr( 176, 205 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 106, 123 ); + + SetDamage( 8, 14 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + + PackItem( new Mace() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 9; } } + + public Bugbear( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Caveman.cs b/Scripts/Mobiles/Humanoid/Caveman.cs new file mode 100644 index 0000000..bcf4904 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Caveman.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a caveman corpse" )] + public class Caveman : BaseCreature + { + [Constructable] + public Caveman () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a caveman"; + Body = Utility.RandomList( 320, 25 ); + BaseSoundID = 0x59D; + Clan = Clan.Humanoid; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + + public Caveman( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Dwarf.cs b/Scripts/Mobiles/Humanoid/Dwarf.cs new file mode 100644 index 0000000..98ee6bc --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Dwarf.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a dwarven corpse" )] + public class Dwarf : BaseCreature + { + [Constructable] + public Dwarf() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "dwarf" ); + HiddenTitle = "the dwarf"; + Body = 288; + BaseSoundID = 0x5FB; + Clan = Clan.Humanoid; + + SetStr( 96, 120 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 58, 72 ); + + SetDamage( 5, 7 ); + + SetSkill( SkillName.MagicResist, 50.1, 75.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 1500; + Karma = -1500; + + VirtualArmor = 28; + + switch ( Utility.Random( 6 ) ) + { + case 0: PackItem( new StuddedGorget() ); break; + case 1: PackItem( new StuddedChest() ); break; + case 2: PackItem( new StuddedLegs() ); break; + case 3: PackItem( new StuddedArms() ); break; + case 4: PackItem( new StuddedGloves() ); break; + case 5: PackItem( new Helmet() ); break; + } + + PackItem( new Axe() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public override int GetIdleSound() + { + return Utility.RandomList( 0x41D, 0x41F, 0x420, 0x42E, 0x442, 0x444, 0x448 ); + } + + public Dwarf( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Humanoid/DwarfKnight.cs b/Scripts/Mobiles/Humanoid/DwarfKnight.cs new file mode 100644 index 0000000..f334731 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/DwarfKnight.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a dwarven corpse" )] + public class DwarfKnight : BaseCreature + { + [Constructable] + public DwarfKnight() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "dwarf" ); + HiddenTitle = "the dwarven knight"; + Body = 286; + BaseSoundID = 0x5FB; + Clan = Clan.Humanoid; + + SetStr( 147, 215 ); + SetDex( 91, 115 ); + SetInt( 61, 85 ); + + SetHits( 95, 123 ); + + SetDamage( 4, 14 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Swords, 60.1, 85.0 ); + SetSkill( SkillName.Tactics, 75.1, 90.0 ); + SetSkill( SkillName.HandToHand, 60.1, 85.0 ); + + Fame = 2500; + Karma = -2500; + + switch ( Utility.Random( 6 ) ) + { + case 0: PackItem( new PlateGorget() ); break; + case 1: PackItem( new PlateChest() ); break; + case 2: PackItem( new PlateLegs() ); break; + case 3: PackItem( new PlateArms() ); break; + case 4: PackItem( new PlateGloves() ); break; + case 5: PackItem( new NorseHelm() ); break; + } + + PackItem( new DoubleAxe() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public override int GetIdleSound() + { + return Utility.RandomList( 0x41D, 0x41F, 0x420, 0x42E, 0x442, 0x444, 0x448 ); + } + + public DwarfKnight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/DwarfWarrior.cs b/Scripts/Mobiles/Humanoid/DwarfWarrior.cs new file mode 100644 index 0000000..d31a361 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/DwarfWarrior.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a dwarven corpse" )] + public class DwarfWarrior : BaseCreature + { + [Constructable] + public DwarfWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "dwarf" ); + HiddenTitle = "the dwarven warrior"; + Body = 287; + BaseSoundID = 0x5FB; + Clan = Clan.Humanoid; + + SetStr( 111, 145 ); + SetDex( 101, 135 ); + SetInt( 86, 110 ); + + SetHits( 67, 87 ); + + SetDamage( 5, 15 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Swords, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 85.1, 100.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 34; + + switch ( Utility.Random( 5 ) ) + { + case 0: PackItem( new RingmailChest() ); break; + case 1: PackItem( new RingmailLegs() ); break; + case 2: PackItem( new RingmailArms() ); break; + case 3: PackItem( new RingmailGloves() ); break; + case 4: PackItem( new CloseHelm() ); break; + } + + PackItem( new BattleAxe() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public override int GetIdleSound() + { + return Utility.RandomList( 0x41D, 0x41F, 0x420, 0x42E, 0x442, 0x444, 0x448 ); + } + + public DwarfWarrior( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/EvilMage.cs b/Scripts/Mobiles/Humanoid/EvilMage.cs new file mode 100644 index 0000000..eccfebb --- /dev/null +++ b/Scripts/Mobiles/Humanoid/EvilMage.cs @@ -0,0 +1,83 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + public class EvilMage : BaseCreature + { + [Constructable] + public EvilMage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "evil mage" ); + SpeechHue = Utility.RandomSpeechHue(); + Hue = Utility.RandomSkinHue(); + Clan = Clan.Wizard; + + int hair = Utility.RandomHairHue(); + + if ( this.Female = Utility.RandomBool() ) + { + Body = 0x191; + Name = NameList.RandomName( "evil witch" ); + } + else + { + Body = 0x190; + Name = NameList.RandomName( "evil mage" ); + if ( Utility.RandomBool() ){ Utility.AssignRandomFacialHair( this, hair ); } + } + + Utility.AssignRandomHair( this, hair ); + + SetStr( 81, 105 ); + SetDex( 91, 115 ); + SetInt( 96, 120 ); + + SetHits( 49, 63 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 75.1, 100.0 ); + SetSkill( SkillName.Magery, 75.1, 100.0 ); + SetSkill( SkillName.MagicResist, 75.0, 97.5 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 20.2, 60.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 16; + PackReg( 6 ); + Server.Misc.CitizenDressing.CitizenDress( this, 5 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + public override bool ClickTitle{ get{ return false; } } + public override bool ShowFameTitle{ get{ return false; } } + + public EvilMage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/EvilMageLord.cs b/Scripts/Mobiles/Humanoid/EvilMageLord.cs new file mode 100644 index 0000000..8fa0bbe --- /dev/null +++ b/Scripts/Mobiles/Humanoid/EvilMageLord.cs @@ -0,0 +1,84 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class EvilMageLord : BaseCreature + { + [Constructable] + public EvilMageLord() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "evil mage lord" ); + SpeechHue = Utility.RandomSpeechHue(); + Hue = Utility.RandomSkinHue(); + Clan = Clan.Wizard; + + int hair = Utility.RandomHairHue(); + + if ( this.Female = Utility.RandomBool() ) + { + Body = 0x191; + Name = NameList.RandomName( "evil witch" ); + } + else + { + Body = 0x190; + Name = NameList.RandomName( "evil mage lord" ); + if ( Utility.RandomBool() ){ Utility.AssignRandomFacialHair( this, hair ); } + } + + Utility.AssignRandomHair( this, hair ); + + SetStr( 81, 105 ); + SetDex( 191, 215 ); + SetInt( 126, 150 ); + + SetHits( 49, 63 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 80.2, 100.0 ); + SetSkill( SkillName.Magery, 95.1, 100.0 ); + SetSkill( SkillName.Meditation, 27.5, 50.0 ); + SetSkill( SkillName.MagicResist, 77.5, 100.0 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 20.3, 80.0 ); + + Fame = 10500; + Karma = -10500; + + VirtualArmor = 16; + PackReg( 23 ); + Server.Misc.CitizenDressing.CitizenDress( this, 5 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override bool ClickTitle{ get{ return false; } } + public override bool ShowFameTitle{ get{ return false; } } + public override int Meat{ get{ return 1; } } + + public EvilMageLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Executioner.cs b/Scripts/Mobiles/Humanoid/Executioner.cs new file mode 100644 index 0000000..06294a8 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Executioner.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections; +using Server.Items; +using Server.ContextMenus; +using Server.Misc; +using Server.Network; + +namespace Server.Mobiles +{ + public class Executioner : BaseCreature + { + [Constructable] + public Executioner() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + SpeechHue = Utility.RandomSpeechHue(); + Title = "the executioner"; + Hue = Utility.RandomSkinHue(); + Clan = Clan.Humanoid; + + if ( this.Female = Utility.RandomBool() ) + { + this.Body = 0x191; + this.Name = NameList.RandomName( "female" ); + } + else + { + this.Body = 0x190; + this.Name = NameList.RandomName( "male" ); + } + + SetStr( 386, 400 ); + SetDex( 151, 165 ); + SetInt( 161, 175 ); + + SetDamage( 8, 10 ); + + SetSkill( SkillName.Fencing, 46.0, 77.5 ); + SetSkill( SkillName.Bludgeoning, 35.0, 57.5 ); + SetSkill( SkillName.Poisoning, 60.0, 82.5 ); + SetSkill( SkillName.MagicResist, 83.5, 92.5 ); + SetSkill( SkillName.Swords, 125.0 ); + SetSkill( SkillName.Tactics, 125.0 ); + + Fame = 5000; + Karma = -5000; + + VirtualArmor = 40; + + AddItem( new ThighBoots() ); + AddItem( new LongPants() ); + AddItem( new FancyShirt( Utility.RandomDarkHue() ) ); + AddItem( new Hood( Utility.RandomDarkHue() ) ); + AddItem( new GreatAxe()); + + if ( Utility.RandomBool() ) + AddItem( new Cloak( Utility.RandomDarkHue() ) ); + + Utility.AssignRandomHair( this ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Meager ); + } + + public override bool ClickTitle{ get{ return false; } } + public override bool ShowFameTitle{ get{ return false; } } + + public Executioner( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/FrostTroll.cs b/Scripts/Mobiles/Humanoid/FrostTroll.cs new file mode 100644 index 0000000..5e79f59 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/FrostTroll.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a frost troll corpse" )] + public class FrostTroll : BaseCreature + { + [Constructable] + public FrostTroll() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a frost troll"; + Body = 157; + BaseSoundID = 461; + + SetStr( 227, 265 ); + SetDex( 66, 85 ); + SetInt( 46, 70 ); + + SetHits( 140, 156 ); + + SetDamage( 14, 20 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 100.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 50; + + PackItem( new DoubleAxe() ); // TODO: Weapon?? + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems ); + } + + public override int Meat{ get{ return 2; } } + + public FrostTroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Goblin.cs b/Scripts/Mobiles/Humanoid/Goblin.cs new file mode 100644 index 0000000..a08422c --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Goblin.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a goblin corpse" )] + public class Goblin : BaseCreature + { + [Constructable] + public Goblin() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a goblin"; + Body = 242; + BaseSoundID = 0x5DA; + Clan = Clan.Humanoid; + + SetStr( 55, 66 ); + SetDex( 25, 36 ); + SetInt( 10, 20 ); + + SetHits( 45, 58 ); + + SetDamage( 3, 9 ); + + SetSkill( SkillName.MagicResist, 50.1, 75.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 600; + Karma = -600; + + VirtualArmor = 16; + + PackItem( new Buckler() ); + PackItem( new Hatchet() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public Goblin( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/GoblinArcher.cs b/Scripts/Mobiles/Humanoid/GoblinArcher.cs new file mode 100644 index 0000000..cc1ca16 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/GoblinArcher.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a goblin corpse" )] + public class GoblinArcher : BaseCreature + { + [Constructable] + public GoblinArcher() : base( AIType.AI_Archer, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a goblin archer"; + Body = 243; + BaseSoundID = 0x5DA; + Clan = Clan.Humanoid; + + SetStr( 56, 80 ); + SetDex( 101, 130 ); + SetInt( 16, 40 ); + + SetHits( 34, 48 ); + + SetDamage( 3, 7 ); + + SetSkill( SkillName.MagicResist, 50.1, 75.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + SetSkill( SkillName.Archery, 50.1, 70.0 ); + + Fame = 620; + Karma = -620; + + VirtualArmor = 12; + + AddItem( new Bow() ); + PackItem( new Arrow( Utility.RandomMinMax( 5, 15 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public GoblinArcher( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/GoblinWarrior.cs b/Scripts/Mobiles/Humanoid/GoblinWarrior.cs new file mode 100644 index 0000000..2e41726 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/GoblinWarrior.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a goblin corpse" )] + public class GoblinWarrior : BaseCreature + { + [Constructable] + public GoblinWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "goblin" ); + HiddenTitle = "the hobgoblin warrior"; + Body = 294; + BaseSoundID = 0x5DA; + Clan = Clan.Humanoid; + + SetStr( 85, 96 ); + SetDex( 45, 56 ); + SetInt( 18, 28 ); + + SetHits( 65, 88 ); + + SetDamage( 5, 14 ); + + SetSkill( SkillName.MagicResist, 60.1, 85.0 ); + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 900; + Karma = -900; + + VirtualArmor = 26; + + PackItem( new Buckler() ); + PackItem( new Scimitar() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public GoblinWarrior( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Hobgoblin.cs b/Scripts/Mobiles/Humanoid/Hobgoblin.cs new file mode 100644 index 0000000..f10a269 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Hobgoblin.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a hobgoblin corpse" )] + public class Hobgoblin : BaseCreature + { + [Constructable] + public Hobgoblin() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "goblin" ); + HiddenTitle = "the hobgoblin"; + Body = 196; + BaseSoundID = 0x45A; + Clan = Clan.Humanoid; + + SetStr( 111, 145 ); + SetDex( 101, 135 ); + SetInt( 86, 110 ); + + SetHits( 67, 87 ); + + SetDamage( 5, 15 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Swords, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 85.1, 100.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 34; + + switch ( Utility.Random( 7 ) ) + { + case 0: PackItem( new Arrow() ); break; + case 1: PackItem( new Lockpick() ); break; + case 2: PackItem( new Shaft() ); break; + case 3: PackItem( new Ribs() ); break; + case 4: PackItem( new Bandage() ); break; + case 5: PackItem( new BeverageBottle( BeverageType.Wine ) ); break; + case 6: PackItem( new Jug( BeverageType.Cider ) ); break; + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public Hobgoblin( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/HobgoblinArcher.cs b/Scripts/Mobiles/Humanoid/HobgoblinArcher.cs new file mode 100644 index 0000000..336e599 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/HobgoblinArcher.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a hobgoblin corpse" )] + public class HobgoblinArcher : BaseCreature + { + [Constructable] + public HobgoblinArcher() : base( AIType.AI_Archer, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "goblin" ); + HiddenTitle = "the hobgoblin archer"; + Body = 300; + BaseSoundID = 0x45A; + Clan = Clan.Humanoid; + + SetStr( 146, 180 ); + SetDex( 101, 130 ); + SetInt( 116, 140 ); + + SetHits( 88, 108 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.Archery, 80.1, 90.0 ); + SetSkill( SkillName.MagicResist, 65.1, 90.0 ); + SetSkill( SkillName.Tactics, 50.1, 75.0 ); + SetSkill( SkillName.HandToHand, 50.1, 75.0 ); + + Fame = 6500; + Karma = -6500; + + VirtualArmor = 56; + + AddItem( new Bow() ); + PackItem( new Arrow( Utility.RandomMinMax( 50, 70 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Hides{ get{ return 8; } } + + public HobgoblinArcher( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Body == 42 ) + { + Body = 0x8E; + Hue = 0; + } + } + } +} diff --git a/Scripts/Mobiles/Humanoid/HobgoblinChief.cs b/Scripts/Mobiles/Humanoid/HobgoblinChief.cs new file mode 100644 index 0000000..cf9f465 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/HobgoblinChief.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a hobgoblin corpse" )] + public class HobgoblinChief : BaseCreature + { + [Constructable] + public HobgoblinChief() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "goblin" ); + HiddenTitle = "the hobgoblin chief"; + Body = 342; + BaseSoundID = 0x45A; + Clan = Clan.Humanoid; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + + switch ( Utility.Random( 7 ) ) + { + case 0: PackItem( new Arrow() ); break; + case 1: PackItem( new Lockpick() ); break; + case 2: PackItem( new Shaft() ); break; + case 3: PackItem( new Ribs() ); break; + case 4: PackItem( new Bandage() ); break; + case 5: PackItem( new BeverageBottle( BeverageType.Wine ) ); break; + case 6: PackItem( new Jug( BeverageType.Cider ) ); break; + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public HobgoblinChief( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/HobgoblinShaman.cs b/Scripts/Mobiles/Humanoid/HobgoblinShaman.cs new file mode 100644 index 0000000..8dd3ec1 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/HobgoblinShaman.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a hobgoblin corpse" )] + public class HobgoblinShaman : BaseCreature + { + [Constructable] + public HobgoblinShaman () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "goblin" ); + HiddenTitle = "the hobgoblin shaman"; + Body = 299; + BaseSoundID = 0x45A; + Clan = Clan.Humanoid; + + SetStr( 116, 150 ); + SetDex( 91, 115 ); + SetInt( 161, 185 ); + + SetHits( 70, 90 ); + + SetDamage( 4, 14 ); + + SetSkill( SkillName.Concentration, 60.1, 72.5 ); + SetSkill( SkillName.Magery, 60.1, 72.5 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 50.1, 65.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 30; + + PackReg( 6 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public HobgoblinShaman( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Humanoid/MindFlayer.cs b/Scripts/Mobiles/Humanoid/MindFlayer.cs new file mode 100644 index 0000000..864567c --- /dev/null +++ b/Scripts/Mobiles/Humanoid/MindFlayer.cs @@ -0,0 +1,90 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class MindFlayer : BaseCreature + { + [Constructable] + public MindFlayer() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a mindflayer"; + Body = 132; + BaseSoundID = 0x605; + AnimationMod = 4; + Clan = Clan.Wizard; + + SetStr( 81, 105 ); + SetDex( 191, 215 ); + SetInt( 126, 150 ); + + SetHits( 49, 63 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 80.2, 100.0 ); + SetSkill( SkillName.Magery, 95.1, 100.0 ); + SetSkill( SkillName.Meditation, 27.5, 50.0 ); + SetSkill( SkillName.MagicResist, 77.5, 100.0 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 20.3, 80.0 ); + + Fame = 10500; + Karma = -10500; + + VirtualArmor = 16; + PackReg( 23 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public void DrainBrain( Mobile m ) + { + if ( m.Mana > 0 ) + { + DoHarmful( m ); + m.SendMessage( "The creature feeds on your mind!" ); + int toDrain = Utility.RandomMinMax( 2, 10 ); + m.PlaySound( 0x386 ); + Mana += toDrain; + m.Mana -= toDrain; + } + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + DrainBrain( defender ); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + DrainBrain( attacker ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + + public MindFlayer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Minotaur.cs b/Scripts/Mobiles/Humanoid/Minotaur.cs new file mode 100644 index 0000000..9cee0c4 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Minotaur.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a minotaur corpse" )] + public class Minotaur : BaseCreature + { + [Constructable] + public Minotaur() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a minotaur"; + Body = Utility.RandomList( 97, 343 ); + BaseSoundID = 0x5DF; + + SetStr( 256, 280 ); + SetDex( 116, 135 ); + SetInt( 61, 80 ); + + SetHits( 196, 220 ); + SetStam( 76, 95 ); + SetMana( 0 ); + + SetDamage( 12, 24 ); + + SetSkill( SkillName.MagicResist, 56.1, 64.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 40; + + PackItem( new DoubleAxe() ); + } + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + } + + public Minotaur( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Humanoid/MinotaurChief.cs b/Scripts/Mobiles/Humanoid/MinotaurChief.cs new file mode 100644 index 0000000..571e93e --- /dev/null +++ b/Scripts/Mobiles/Humanoid/MinotaurChief.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a minotaur corpse" )] + public class MinotaurChief : BaseCreature + { + [Constructable] + public MinotaurChief() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a minotaur chief"; + Body = 329; + BaseSoundID = 0x5DF; + + SetStr( 579, 653 ); + SetDex( 144, 173 ); + SetInt( 47, 83 ); + + SetHits( 453, 497 ); + SetMana( 0 ); + + SetDamage( 14, 25 ); + + SetSkill( SkillName.MagicResist, 105.5, 157.5 ); + SetSkill( SkillName.Tactics, 142.7, 165.0 ); + SetSkill( SkillName.HandToHand, 142.7, 165.0 ); + + Fame = 9750; + Karma = -9750; + + VirtualArmor = 65; + + PackItem( new WarHammer() ); + } + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Average ); + } + + public MinotaurChief( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Humanoid/MinotaurLord.cs b/Scripts/Mobiles/Humanoid/MinotaurLord.cs new file mode 100644 index 0000000..3d8358e --- /dev/null +++ b/Scripts/Mobiles/Humanoid/MinotaurLord.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a minotaur corpse" )] + public class MinotaurLord : BaseCreature + { + [Constructable] + public MinotaurLord() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a minotaur knight"; + Body = 244; + BaseSoundID = 0x5DF; + AnimationMod = 1; + + SetStr( 386, 435 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 302, 331 ); + SetMana( 0 ); + + SetDamage( 9, 25 ); + + SetSkill( SkillName.MagicResist, 70.3, 105.0 ); + SetSkill( SkillName.Tactics, 95.1, 110.0 ); + SetSkill( SkillName.HandToHand, 95.1, 110.0 ); + + Fame = 6500; + Karma = -6500; + + VirtualArmor = 52; + + PackItem( new DoubleAxe() ); + } + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + } + + public MinotaurLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Humanoid/Orc.cs b/Scripts/Mobiles/Humanoid/Orc.cs new file mode 100644 index 0000000..da040c7 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Orc.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "an orcish corpse" )] + public class Orc : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Orc; } } + + [Constructable] + public Orc() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "orc" ); + HiddenTitle = "the orc"; + Body = Utility.RandomList( 17, 41 ); + BaseSoundID = 0x45A; + Clan = Clan.Humanoid; + + SetStr( 96, 120 ); + SetDex( 81, 105 ); + SetInt( 36, 60 ); + + SetHits( 58, 72 ); + + SetDamage( 5, 7 ); + + SetSkill( SkillName.MagicResist, 50.1, 75.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 1500; + Karma = -1500; + + VirtualArmor = 28; + + switch ( Utility.Random( 20 ) ) + { + case 0: PackItem( new Scimitar() ); break; + case 1: PackItem( new Katana() ); break; + case 2: PackItem( new WarMace() ); break; + case 3: PackItem( new WarHammer() ); break; + case 4: PackItem( new Kryss() ); break; + case 5: PackItem( new Pitchfork() ); break; + } + + PackItem( new ThighBoots() ); + + switch ( Utility.Random( 3 ) ) + { + case 0: PackItem( new Ribs() ); break; + case 1: PackItem( new Shaft() ); break; + case 2: PackItem( new Candle() ); break; + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public Orc( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Humanoid/OrcCaptain.cs b/Scripts/Mobiles/Humanoid/OrcCaptain.cs new file mode 100644 index 0000000..924f3e1 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/OrcCaptain.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an orcish corpse" )] + public class OrcCaptain : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Orc; } } + + [Constructable] + public OrcCaptain() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "orc" ); + HiddenTitle = "the orc chief"; + Body = 7; + BaseSoundID = 0x45A; + Clan = Clan.Humanoid; + + SetStr( 111, 145 ); + SetDex( 101, 135 ); + SetInt( 86, 110 ); + + SetHits( 67, 87 ); + + SetDamage( 5, 15 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Swords, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 85.1, 100.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 34; + + // TODO: Skull? + switch ( Utility.Random( 7 ) ) + { + case 0: PackItem( new Arrow() ); break; + case 1: PackItem( new Lockpick() ); break; + case 2: PackItem( new Shaft() ); break; + case 3: PackItem( new Ribs() ); break; + case 4: PackItem( new Bandage() ); break; + case 5: PackItem( new BeverageBottle( BeverageType.Wine ) ); break; + case 6: PackItem( new Jug( BeverageType.Cider ) ); break; + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public OrcCaptain( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/OrcishLord.cs b/Scripts/Mobiles/Humanoid/OrcishLord.cs new file mode 100644 index 0000000..0f613c1 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/OrcishLord.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an orcish corpse" )] + public class OrcishLord : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Orc; } } + + [Constructable] + public OrcishLord() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "orc" ); + HiddenTitle = "the orcish lord"; + Body = 7; + BaseSoundID = 0x45A; + Clan = Clan.Humanoid; + + SetStr( 147, 215 ); + SetDex( 91, 115 ); + SetInt( 61, 85 ); + + SetHits( 95, 123 ); + + SetDamage( 4, 14 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Swords, 60.1, 85.0 ); + SetSkill( SkillName.Tactics, 75.1, 90.0 ); + SetSkill( SkillName.HandToHand, 60.1, 85.0 ); + + Fame = 2500; + Karma = -2500; + + switch ( Utility.Random( 5 ) ) + { + case 0: PackItem( new Lockpick() ); break; + case 1: PackItem( new MortarPestle() ); break; + case 2: PackItem( new Bottle() ); break; + case 3: PackItem( new RawRibs() ); break; + case 4: PackItem( new Shovel() ); break; + } + + PackItem( new RingmailChest() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public OrcishLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/OrcishMage.cs b/Scripts/Mobiles/Humanoid/OrcishMage.cs new file mode 100644 index 0000000..138a797 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/OrcishMage.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a glowing orc corpse" )] + public class OrcishMage : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Orc; } } + + [Constructable] + public OrcishMage () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "orc" ); + HiddenTitle = "the orcish mage"; + Body = 17; + BaseSoundID = 0x45A; + Clan = Clan.Humanoid; + + SetStr( 116, 150 ); + SetDex( 91, 115 ); + SetInt( 161, 185 ); + + SetHits( 70, 90 ); + + SetDamage( 4, 14 ); + + SetSkill( SkillName.Concentration, 60.1, 72.5 ); + SetSkill( SkillName.Magery, 60.1, 72.5 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 50.1, 65.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 30; + + PackReg( 6 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public OrcishMage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Humanoid/Pharaoh.cs b/Scripts/Mobiles/Humanoid/Pharaoh.cs new file mode 100644 index 0000000..219ec9a --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Pharaoh.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a pharaoh's corpse" )] + public class Pharaoh : BaseCreature + { + [Constructable] + public Pharaoh() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "villians" ); + Title = "the pharaoh"; + Body = 279; + BaseSoundID = 0x47D; + AnimationMod = 1; + Clan = Clan.Wizard; + + SetStr( 171, 200 ); + SetDex( 126, 145 ); + SetInt( 276, 305 ); + + SetHits( 103, 120 ); + + SetDamage( 24, 26 ); + + SetSkill( SkillName.Concentration, 100.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.Meditation, 85.1, 95.0 ); + SetSkill( SkillName.MagicResist, 80.1, 100.0 ); + SetSkill( SkillName.Tactics, 70.1, 90.0 ); + + Fame = 8000; + Karma = -8000; + + VirtualArmor = 50; + PackItem( new BlackStaff() ); + PackReg( 17, 24 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + + public Pharaoh( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Pirate.cs b/Scripts/Mobiles/Humanoid/Pirate.cs new file mode 100644 index 0000000..3138559 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Pirate.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections; +using Server.Items; +using Server.ContextMenus; +using Server.Misc; +using Server.Network; + +namespace Server.Mobiles +{ + public class Pirate : BaseCreature + { + [Constructable] + public Pirate() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + SpeechHue = Utility.RandomSpeechHue(); + Hue = Utility.RandomSkinHue(); + Clan = Clan.Humanoid; + + Title = "the pirate"; + switch ( Utility.Random( 4 )) + { + case 0: Title = "the pirate"; break; + case 1: Title = "the sailor"; break; + case 2: Title = "the privateer"; break; + case 3: Title = "the freebooter"; break; + } + + int hair = Utility.RandomHairHue(); + + if ( this.Female = Utility.RandomBool() ) + { + Body = 0x191; + Name = NameList.RandomName( "female" ); + } + else + { + Body = 0x190; + Name = NameList.RandomName( "male" ); + if ( Utility.RandomBool() ){ Utility.AssignRandomFacialHair( this, hair ); } + } + + Utility.AssignRandomHair( this, hair ); + + SetStr( 96, 110 ); + SetDex( 91, 105 ); + SetInt( 71, 85 ); + + SetDamage( 10, 23 ); + + SetSkill( SkillName.Fencing, 76.0, 97.5 ); + SetSkill( SkillName.Bludgeoning, 75.0, 87.5 ); + SetSkill( SkillName.MagicResist, 35.0, 47.5 ); + SetSkill( SkillName.Swords, 75.0, 87.5 ); + SetSkill( SkillName.Tactics, 75.0, 87.5 ); + SetSkill( SkillName.HandToHand, 25.0, 37.5 ); + + Fame = 1500; + Karma = -1500; + + switch ( Utility.Random( 7 )) + { + case 0: AddItem( new Longsword() ); break; + case 1: AddItem( new Cutlass() ); break; + case 2: AddItem( new Scimitar() ); break; + case 3: AddItem( new Kryss() ); break; + case 4: AddItem( new Dagger() ); break; + case 5: AddItem( new Spear() ); break; + case 6: AddItem( new Rapier() ); break; + } + + switch ( Utility.Random( 5 ) ) + { + case 0: AddItem( new FancyShirt( Utility.RandomHue() ) ); break; + case 1: AddItem( new Doublet( Utility.RandomHue() ) ); break; + case 2: AddItem( new Shirt( Utility.RandomHue() ) ); break; + case 3: AddItem( new Tunic( Utility.RandomHue() ) ); break; + case 4: AddItem( new Surcoat( Utility.RandomHue() ) ); break; + } + + if ( Female ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new Skirt( Utility.RandomHue() ) ); break; + case 1: AddItem( new Kilt( Utility.RandomHue() ) ); break; + case 2: AddItem( new LongPants( Utility.RandomHue() ) ); break; + case 3: AddItem( new ShortPants( Utility.RandomHue() ) ); break; + } + } + else + { + switch ( Utility.Random( 3 ) ) + { + case 0: AddItem( new LongPants( Utility.RandomHue() ) ); break; + case 1: AddItem( new ShortPants( Utility.RandomHue() ) ); break; + case 2: AddItem( new Kilt( Utility.RandomHue() ) ); break; + } + } + + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new Shoes( Utility.RandomNeutralHue() ) ); break; + case 1: AddItem( new Boots( Utility.RandomNeutralHue() ) ); break; + case 2: AddItem( new Sandals( Utility.RandomNeutralHue() ) ); break; + case 3: AddItem( new ThighBoots( Utility.RandomNeutralHue() ) ); break; + } + + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new SkullCap( Utility.RandomHue() ) ); break; + case 1: AddItem( new SkullCap( Utility.RandomHue() ) ); break; + case 2: AddItem( new SkullCap( Utility.RandomHue() ) ); break; + case 3: AddItem( new Bandana( Utility.RandomHue() ) ); break; + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool ClickTitle{ get{ return false; } } + public override bool ShowFameTitle{ get{ return false; } } + + public Pirate( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Ratman.cs b/Scripts/Mobiles/Humanoid/Ratman.cs new file mode 100644 index 0000000..5870f42 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Ratman.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a ratman's corpse" )] + public class Ratman : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Ratman; } } + + [Constructable] + public Ratman() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "ratman" ); + HiddenTitle = "the ratman"; + Body = Utility.RandomList( 42, 44, 45 ); + BaseSoundID = 437; + Clan = Clan.Humanoid; + + SetStr( 96, 120 ); + SetDex( 81, 100 ); + SetInt( 36, 60 ); + + SetHits( 58, 72 ); + + SetDamage( 4, 5 ); + + SetSkill( SkillName.MagicResist, 35.1, 60.0 ); + SetSkill( SkillName.Tactics, 50.1, 75.0 ); + SetSkill( SkillName.HandToHand, 50.1, 75.0 ); + + Fame = 1500; + Karma = -1500; + + VirtualArmor = 28; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Hides{ get{ return 8; } } + + public Ratman( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/RatmanArcher.cs b/Scripts/Mobiles/Humanoid/RatmanArcher.cs new file mode 100644 index 0000000..aeadeed --- /dev/null +++ b/Scripts/Mobiles/Humanoid/RatmanArcher.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a ratman archer corpse" )] + public class RatmanArcher : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Ratman; } } + + [Constructable] + public RatmanArcher() : base( AIType.AI_Archer, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "ratman" ); + HiddenTitle = "the ratman archer"; + Body = 42; + BaseSoundID = 437; + Clan = Clan.Humanoid; + + SetStr( 146, 180 ); + SetDex( 101, 130 ); + SetInt( 116, 140 ); + + SetHits( 88, 108 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.Archery, 80.1, 90.0 ); + SetSkill( SkillName.MagicResist, 65.1, 90.0 ); + SetSkill( SkillName.Tactics, 50.1, 75.0 ); + SetSkill( SkillName.HandToHand, 50.1, 75.0 ); + + Fame = 6500; + Karma = -6500; + + VirtualArmor = 56; + + AddItem( new Bow() ); + PackItem( new Arrow( Utility.RandomMinMax( 50, 70 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Hides{ get{ return 8; } } + + public RatmanArcher( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Body == 42 ) + { + Body = 0x8E; + Hue = 0; + } + } + } +} diff --git a/Scripts/Mobiles/Humanoid/RatmanMage.cs b/Scripts/Mobiles/Humanoid/RatmanMage.cs new file mode 100644 index 0000000..8b316d2 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/RatmanMage.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a glowing ratman corpse" )] + public class RatmanMage : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Ratman; } } + + [Constructable] + public RatmanMage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "ratman" ); + HiddenTitle = "the ratman mage"; + Body = 42; + BaseSoundID = 437; + Clan = Clan.Humanoid; + + SetStr( 146, 180 ); + SetDex( 101, 130 ); + SetInt( 186, 210 ); + + SetHits( 88, 108 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.Concentration, 70.1, 80.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 65.1, 90.0 ); + SetSkill( SkillName.Tactics, 50.1, 75.0 ); + SetSkill( SkillName.HandToHand, 50.1, 75.0 ); + + Fame = 7500; + Karma = -7500; + + VirtualArmor = 44; + + PackReg( 6 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.LowScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 8; } } + + public RatmanMage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( Body == 42 ) + { + Body = 0x8F; + Hue = 0; + } + } + } +} diff --git a/Scripts/Mobiles/Humanoid/Savage.cs b/Scripts/Mobiles/Humanoid/Savage.cs new file mode 100644 index 0000000..b585632 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Savage.cs @@ -0,0 +1,72 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a savage corpse" )] + public class Savage : BaseCreature + { + [Constructable] + public Savage() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "savage" ); + HiddenTitle = "the savage"; + Hue = 0; + Clan = Clan.Humanoid; + + if ( Female = Utility.RandomBool() ) + Body = 0x191; + else + Body = 0x190; + + SetStr( 96, 115 ); + SetDex( 86, 105 ); + SetInt( 51, 65 ); + + SetDamage( 7, 16 ); + + SetSkill( SkillName.Fencing, 60.0, 82.5 ); + SetSkill( SkillName.Bludgeoning, 60.0, 82.5 ); + SetSkill( SkillName.Poisoning, 60.0, 82.5 ); + SetSkill( SkillName.MagicResist, 57.5, 80.0 ); + SetSkill( SkillName.Swords, 60.0, 82.5 ); + SetSkill( SkillName.Tactics, 60.0, 82.5 ); + + Fame = 1000; + Karma = -1000; + + PackItem( new Bandage( Utility.RandomMinMax( 1, 15 ) ) ); + + AddItem( new Spear() ); + AddItem( new BoneArms() ); + AddItem( new BoneLegs() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 1; } } + public override bool ClickTitle{ get{ return false; } } + public override bool ShowFameTitle{ get{ return false; } } + + public Savage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/SavageLeader.cs b/Scripts/Mobiles/Humanoid/SavageLeader.cs new file mode 100644 index 0000000..39d6a0f --- /dev/null +++ b/Scripts/Mobiles/Humanoid/SavageLeader.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a savage corpse" )] + public class SavageLeader : BaseCreature + { + [Constructable] + public SavageLeader() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "savage" ); + HiddenTitle = "the savage chief"; + Body = 183; + BaseSoundID = 0x25C; + Clan = Clan.Humanoid; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 48; + + AddItem( new BoneArms() ); + AddItem( new BoneLegs() ); + AddItem( new BoneChest() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 4; } } + + public SavageLeader( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/SavageShaman.cs b/Scripts/Mobiles/Humanoid/SavageShaman.cs new file mode 100644 index 0000000..ee04360 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/SavageShaman.cs @@ -0,0 +1,233 @@ +using System; +using System.Collections; +using Server; +using Server.Misc; +using Server.Items; +using Server.Spells; + +namespace Server.Mobiles +{ + [CorpseName( "a savage corpse" )] + public class SavageShaman : BaseCreature + { + [Constructable] + public SavageShaman() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "savage shaman" ); + HiddenTitle = "the savage shaman"; + Hue = 0; + Clan = Clan.Humanoid; + + if ( Utility.RandomBool() ) + Body = 0x191; + else + Body = 0x190; + + SetStr( 126, 145 ); + SetDex( 91, 110 ); + SetInt( 161, 185 ); + + SetDamage( 4, 10 ); + + SetSkill( SkillName.Concentration, 77.5, 100.0 ); + SetSkill( SkillName.Fencing, 62.5, 85.0 ); + SetSkill( SkillName.Bludgeoning, 62.5, 85.0 ); + SetSkill( SkillName.Magery, 72.5, 95.0 ); + SetSkill( SkillName.Meditation, 77.5, 100.0 ); + SetSkill( SkillName.MagicResist, 77.5, 100.0 ); + SetSkill( SkillName.Swords, 62.5, 85.0 ); + SetSkill( SkillName.Tactics, 62.5, 85.0 ); + SetSkill( SkillName.HandToHand, 62.5, 85.0 ); + + Fame = 1000; + Karma = -1000; + + PackReg( 10, 15 ); + PackItem( new Bandage( Utility.RandomMinMax( 1, 15 ) ) ); + + AddItem( new BoneArms() ); + AddItem( new BoneLegs() ); + AddItem( new DeerMask() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override int Meat{ get{ return 1; } } + public override bool ClickTitle{ get{ return false; } } + public override bool ShowFameTitle{ get{ return false; } } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + + if ( 0.1 > Utility.RandomDouble() ) + BeginSavageDance(); + } + + public void BeginSavageDance() + { + if( this.Map == null ) + return; + + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 8 ) ) + { + if ( m != this && m is SavageShaman ) + list.Add( m ); + } + + Animate( 111, 5, 1, true, false, 0 ); // Do a little dance... + + if ( AIObject != null ) + AIObject.NextMove = DateTime.Now + TimeSpan.FromSeconds( 1.0 ); + + if ( list.Count >= 3 ) + { + for ( int i = 0; i < list.Count; ++i ) + { + SavageShaman dancer = (SavageShaman)list[i]; + + dancer.Animate( 111, 5, 1, true, false, 0 ); // Get down tonight... + + if ( dancer.AIObject != null ) + dancer.AIObject.NextMove = DateTime.Now + TimeSpan.FromSeconds( 1.0 ); + } + + Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerCallback( EndSavageDance ) ); + } + } + + public void EndSavageDance() + { + if ( Deleted ) + return; + + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 8 ) ) + list.Add( m ); + + if ( list.Count > 0 ) + { + switch ( Utility.Random( 3 ) ) + { + case 0: /* greater heal */ + { + foreach ( Mobile m in list ) + { + bool isFriendly = ( m is Savage || m is SavageShaman ); + + if ( !isFriendly ) + continue; + + if ( m.Poisoned || !CanBeBeneficial( m ) ) + continue; + + DoBeneficial( m ); + + // Algorithm: (40% of magery) + (1-10) + + int toHeal = (int)(Skills[SkillName.Magery].Value * 0.4); + toHeal += Utility.Random( 1, 10 ); + + m.Heal( toHeal, this ); + + m.FixedParticles( 0x376A, 9, 32, 5030, EffectLayer.Waist ); + m.PlaySound( 0x202 ); + } + + break; + } + case 1: /* lightning */ + { + foreach ( Mobile m in list ) + { + bool isFriendly = ( m is Savage || m is SavageShaman ); + + if ( isFriendly ) + continue; + + if ( !CanBeHarmful( m ) ) + continue; + + DoHarmful( m ); + + double damage = Utility.Random( 12, 9 ); + + m.BoltEffect( 0 ); + + SpellHelper.Damage( TimeSpan.FromSeconds( 0.25 ), m, this, damage ); + } + + break; + } + case 2: /* poison */ + { + foreach ( Mobile m in list ) + { + bool isFriendly = ( m is Savage || m is SavageShaman ); + + if ( isFriendly ) + continue; + + if ( !CanBeHarmful( m ) ) + continue; + + DoHarmful( m ); + + if ( m.Spell != null ) + m.Spell.OnCasterHurt(); + + m.Paralyzed = false; + + double total = Skills[SkillName.Magery].Value + Skills[SkillName.Poisoning].Value; + + double dist = GetDistanceToSqrt( m ); + + if ( dist >= 3.0 ) + total -= (dist - 3.0) * 10.0; + + int level; + + if ( total >= 200.0 && Utility.Random( 1, 100 ) <= 10 ) + level = 3; + else if ( total > 170.0 ) + level = 2; + else if ( total > 130.0 ) + level = 1; + else + level = 0; + + m.ApplyPoison( this, Poison.GetPoison( level ) ); + + m.FixedParticles( 0x374A, 10, 15, 5021, EffectLayer.Waist ); + m.PlaySound( 0x474 ); + } + + break; + } + } + } + } + + public SavageShaman( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Troll.cs b/Scripts/Mobiles/Humanoid/Troll.cs new file mode 100644 index 0000000..4383c71 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Troll.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a troll corpse" )] + public class Troll : BaseCreature + { + [Constructable] + public Troll () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a troll"; + Body = Utility.RandomList( 53, 54, 55 ); + BaseSoundID = 461; + + SetStr( 176, 205 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 106, 123 ); + + SetDamage( 8, 14 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + + public Troll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Humanoid/Yeti.cs b/Scripts/Mobiles/Humanoid/Yeti.cs new file mode 100644 index 0000000..6c44d62 --- /dev/null +++ b/Scripts/Mobiles/Humanoid/Yeti.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a yeti corpse" )] + public class Yeti : BaseCreature + { + [Constructable] + public Yeti () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a yeti"; + Body = 108; + BaseSoundID = 0x56F; + AnimationMod = 4; + + SetStr( 176, 205 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 106, 123 ); + + SetDamage( 8, 14 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 9; } } + + public Yeti( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/AncientGazer.cs b/Scripts/Mobiles/Monsters/AncientGazer.cs new file mode 100644 index 0000000..fc19149 --- /dev/null +++ b/Scripts/Mobiles/Monsters/AncientGazer.cs @@ -0,0 +1,62 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a gazer corpse" )] + public class AncientGazer : BaseCreature + { + [Constructable] + public AncientGazer () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "gazer" ); + HiddenTitle = "the ancient gazer"; + Body = 100; + BaseSoundID = 0x47D; + + SetStr( 476, 505 ); + SetDex( 76, 95 ); + SetInt( 301, 325 ); + + SetHits( 286, 303 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.Concentration, 70.1, 80.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 58; + + PackItem( new Nightshade( 32 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.HighPotions ); + } + + public AncientGazer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/AncientSphinx.cs b/Scripts/Mobiles/Monsters/AncientSphinx.cs new file mode 100644 index 0000000..a2768ff --- /dev/null +++ b/Scripts/Mobiles/Monsters/AncientSphinx.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a sphinx corpse" )] + public class AncientSphinx : BaseCreature + { + [Constructable] + public AncientSphinx () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ancient sphinx"; + Body = 182; + BaseSoundID = 0x668; + + SetStr( 536, 585 ); + SetDex( 126, 145 ); + SetInt( 281, 305 ); + + SetHits( 322, 351 ); + + SetDamage( 13, 16 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 11500; + Karma = -11500; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.Gems ); + AddLoot( LootPack.HighPotions ); + } + + public override void OnGaveMeleeAttack( Mobile m ) + { + base.OnGaveMeleeAttack( m ); + + if ( 0.1 >= Utility.RandomDouble() ) + Sphinx.TurnStone( this ); + } + + public override void OnGotMeleeAttack( Mobile m ) + { + base.OnGotMeleeAttack( m ); + + if ( 0.1 >= Utility.RandomDouble() ) + Sphinx.TurnStone( this ); + } + + public AncientSphinx( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/CaveDweller.cs b/Scripts/Mobiles/Monsters/CaveDweller.cs new file mode 100644 index 0000000..d464ae3 --- /dev/null +++ b/Scripts/Mobiles/Monsters/CaveDweller.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a cave dweller corpse" )] + public class CaveDweller : BaseCreature + { + [Constructable] + public CaveDweller () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a cave dweller"; + Body = 284; + BaseSoundID = 0x56F; + AnimationMod = 1; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override int Meat{ get{ return 2; } } + + public CaveDweller( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/ElderGazer.cs b/Scripts/Mobiles/Monsters/ElderGazer.cs new file mode 100644 index 0000000..d1544b4 --- /dev/null +++ b/Scripts/Mobiles/Monsters/ElderGazer.cs @@ -0,0 +1,62 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a gazer corpse" )] + public class ElderGazer : BaseCreature + { + [Constructable] + public ElderGazer () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an elder gazer"; + Body = 317; + BaseSoundID = 377; + AnimationMod = 3; + + SetStr( 296, 325 ); + SetDex( 86, 105 ); + SetInt( 291, 385 ); + + SetHits( 178, 195 ); + + SetDamage( 8, 19 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 115.1, 130.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 100.0 ); + + Fame = 12500; + Karma = -12500; + + VirtualArmor = 50; + + PackItem( new Nightshade( 16 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.MedPotions ); + } + + public ElderGazer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/ElderHarpy.cs b/Scripts/Mobiles/Monsters/ElderHarpy.cs new file mode 100644 index 0000000..627ee6e --- /dev/null +++ b/Scripts/Mobiles/Monsters/ElderHarpy.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a harpy corpse" )] + public class ElderHarpy : BaseCreature + { + [Constructable] + public ElderHarpy() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a harpy hen"; + Body = 171; + BaseSoundID = 402; + + SetStr( 196, 220 ); + SetDex( 186, 210 ); + SetInt( 61, 85 ); + + SetHits( 158, 172 ); + + SetDamage( 9, 16 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Tactics, 90.1, 110.0 ); + SetSkill( SkillName.HandToHand, 80.1, 100.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 36; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + } + + public override int GetAttackSound() + { + return 916; + } + + public override int GetAngerSound() + { + return 916; + } + + public override int GetDeathSound() + { + return 917; + } + + public override int GetHurtSound() + { + return 919; + } + + public override int GetIdleSound() + { + return 918; + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 7; } } + public override MeatType MeatType{ get{ return MeatType.BigBird; } } + public override int Feathers{ get{ return Utility.RandomMinMax( 50, 75 ); } } + + public ElderHarpy( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/FrostOoze.cs b/Scripts/Mobiles/Monsters/FrostOoze.cs new file mode 100644 index 0000000..da25302 --- /dev/null +++ b/Scripts/Mobiles/Monsters/FrostOoze.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a frost ooze corpse" )] + public class FrostOoze : BaseCreature + { + [Constructable] + public FrostOoze() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a frost ooze"; + Body = 51; + Hue = 1152; + BaseSoundID = 456; + + SetStr( 18, 30 ); + SetDex( 16, 21 ); + SetInt( 16, 20 ); + + SetHits( 13, 17 ); + + SetDamage( 3, 9 ); + + SetSkill( SkillName.MagicResist, 5.1, 10.0 ); + SetSkill( SkillName.Tactics, 19.3, 34.0 ); + SetSkill( SkillName.HandToHand, 25.3, 40.0 ); + + Fame = 450; + Karma = -450; + + VirtualArmor = 38; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Gems, Utility.RandomMinMax( 1, 2 ) ); + } + + public FrostOoze( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Gazer.cs b/Scripts/Mobiles/Monsters/Gazer.cs new file mode 100644 index 0000000..efc5629 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Gazer.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a gazer corpse" )] + public class Gazer : BaseCreature + { + [Constructable] + public Gazer () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a gazer"; + Body = 22; + BaseSoundID = 377; + + SetStr( 96, 125 ); + SetDex( 86, 105 ); + SetInt( 141, 165 ); + + SetHits( 58, 75 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 50.1, 65.0 ); + SetSkill( SkillName.Magery, 50.1, 65.0 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 36; + + PackItem( new Nightshade( 4 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowPotions ); + } + + public override int Meat{ get{ return 1; } } + + public Gazer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Golem.cs b/Scripts/Mobiles/Monsters/Golem.cs new file mode 100644 index 0000000..12010e2 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Golem.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a broken golem" )] + public class Golem : BaseCreature + { + [Constructable] + public Golem () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a golem"; + Body = 46; + AnimationMod = 3; + + SetStr( 767, 945 ); + SetDex( 66, 75 ); + SetInt( 46, 70 ); + + SetHits( 476, 552 ); + + SetDamage( 20, 25 ); + + SetSkill( SkillName.MagicResist, 125.1, 140.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 50; + + PackItem( new Club() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + } + + public override bool BardImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override bool BleedImmune{ get{ return true; } } + + public override int GetAngerSound() + { + return 541; + } + + public override int GetIdleSound() + { + return 542; + } + + public override int GetDeathSound() + { + return 545; + } + + public override int GetAttackSound() + { + return 562; + } + + public override int GetHurtSound() + { + return 320; + } + + public Golem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Griffon.cs b/Scripts/Mobiles/Monsters/Griffon.cs new file mode 100644 index 0000000..62b022d --- /dev/null +++ b/Scripts/Mobiles/Monsters/Griffon.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a griffon corpse" )] + public class Griffon : BaseCreature + { + [Constructable] + public Griffon() : base( AIType.AI_Melee, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a griffon"; + Body = 241; + BaseSoundID = 0x2EE; + + SetStr( 196, 220 ); + SetDex( 186, 210 ); + SetInt( 151, 175 ); + + SetHits( 158, 172 ); + + SetDamage( 9, 15 ); + + SetSkill( SkillName.MagicResist, 50.1, 65.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 90.0 ); + + Fame = 3500; + Karma = 0; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + public override int Meat{ get{ return 12; } } + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Feathers{ get{ return 50; } } + + public Griffon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Harpy.cs b/Scripts/Mobiles/Monsters/Harpy.cs new file mode 100644 index 0000000..1d615d7 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Harpy.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a harpy corpse" )] + public class Harpy : BaseCreature + { + [Constructable] + public Harpy() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a harpy"; + Body = 30; + BaseSoundID = 402; + + SetStr( 96, 120 ); + SetDex( 86, 110 ); + SetInt( 51, 75 ); + + SetHits( 58, 72 ); + + SetDamage( 5, 7 ); + + SetSkill( SkillName.MagicResist, 50.1, 65.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 90.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 28; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + public override int GetAttackSound() + { + return 916; + } + + public override int GetAngerSound() + { + return 916; + } + + public override int GetDeathSound() + { + return 917; + } + + public override int GetHurtSound() + { + return 919; + } + + public override int GetIdleSound() + { + return 918; + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 4; } } + public override MeatType MeatType{ get{ return MeatType.BigBird; } } + public override int Feathers{ get{ return 50; } } + + public Harpy( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/HeadlessOne.cs b/Scripts/Mobiles/Monsters/HeadlessOne.cs new file mode 100644 index 0000000..757fd18 --- /dev/null +++ b/Scripts/Mobiles/Monsters/HeadlessOne.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a headless corpse" )] + public class HeadlessOne : BaseCreature + { + [Constructable] + public HeadlessOne() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a headless one"; + Body = 31; + Hue = Utility.RandomSkinHue() & 0x7FFF; + BaseSoundID = 0x39D; + + SetStr( 26, 50 ); + SetDex( 36, 55 ); + SetInt( 16, 30 ); + + SetHits( 16, 30 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 25.1, 40.0 ); + SetSkill( SkillName.HandToHand, 25.1, 40.0 ); + + Fame = 450; + Karma = -450; + + VirtualArmor = 18; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + // TODO: body parts + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + + public HeadlessOne( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Hippogriff.cs b/Scripts/Mobiles/Monsters/Hippogriff.cs new file mode 100644 index 0000000..4844363 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Hippogriff.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a hippogriff corpse" )] + public class Hippogriff : BaseCreature + { + [Constructable] + public Hippogriff() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a hippogriff"; + Body = 239; + BaseSoundID = 0x2EE; + + SetStr( 196, 220 ); + SetDex( 186, 210 ); + SetInt( 151, 175 ); + + SetHits( 158, 172 ); + + SetDamage( 9, 15 ); + + SetSkill( SkillName.MagicResist, 50.1, 65.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 90.0 ); + + Fame = 3500; + Karma = 3500; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager, 2 ); + } + + public override int Meat{ get{ return 12; } } + public override MeatType MeatType{ get{ return MeatType.Bird; } } + public override int Feathers{ get{ return 50; } } + + public Hippogriff( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/LargeSlime.cs b/Scripts/Mobiles/Monsters/LargeSlime.cs new file mode 100644 index 0000000..999bb2d --- /dev/null +++ b/Scripts/Mobiles/Monsters/LargeSlime.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a slimey corpse" )] + public class LargeSlime : BaseCreature + { + [Constructable] + public LargeSlime() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a slime"; + Body = 51; + BaseSoundID = 456; + + SetStr( 122, 134 ); + SetDex( 66, 71 ); + SetInt( 16, 20 ); + + SetHits( 115, 119 ); + + SetDamage( 9, 16 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 45.1, 50.0 ); + SetSkill( SkillName.Tactics, 49.3, 64.0 ); + SetSkill( SkillName.HandToHand, 49.3, 64.0 ); + + Fame = 1200; + Karma = -1200; + + VirtualArmor = 18; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems, 3 ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public LargeSlime( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Monsters/Mongbat.cs b/Scripts/Mobiles/Monsters/Mongbat.cs new file mode 100644 index 0000000..2627409 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Mongbat.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a mongbat corpse" )] + public class Mongbat : BaseCreature + { + [Constructable] + public Mongbat() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a mongbat"; + Body = 39; + BaseSoundID = 422; + + SetStr( 6, 10 ); + SetDex( 26, 38 ); + SetInt( 6, 14 ); + + SetHits( 4, 6 ); + SetMana( 0 ); + + SetDamage( 1, 2 ); + + SetSkill( SkillName.MagicResist, 5.1, 14.0 ); + SetSkill( SkillName.Tactics, 5.1, 10.0 ); + SetSkill( SkillName.HandToHand, 5.1, 10.0 ); + + Fame = 150; + Karma = -150; + + VirtualArmor = 10; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override int Meat{ get{ return 1; } } + + public Mongbat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Owlbear.cs b/Scripts/Mobiles/Monsters/Owlbear.cs new file mode 100644 index 0000000..738b3b8 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Owlbear.cs @@ -0,0 +1,56 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "an owlbear corpse" )] + public class Owlbear : BaseCreature + { + [Constructable] + public Owlbear() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an owlbear"; + Body = 758; + BaseSoundID = 0x4C3; + + SetStr( 276, 305 ); + SetDex( 121, 145 ); + SetInt( 56, 80 ); + + SetHits( 236, 273 ); + SetMana( 0 ); + + SetDamage( 16, 21 ); + + SetSkill( SkillName.MagicResist, 35.1, 50.0 ); + SetSkill( SkillName.Tactics, 90.1, 120.0 ); + SetSkill( SkillName.HandToHand, 65.1, 90.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 40; + } + + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 16; } } + + public Owlbear( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/RoyalSphinx.cs b/Scripts/Mobiles/Monsters/RoyalSphinx.cs new file mode 100644 index 0000000..96df579 --- /dev/null +++ b/Scripts/Mobiles/Monsters/RoyalSphinx.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a sphinx corpse" )] + public class RoyalSphinx : BaseCreature + { + [Constructable] + public RoyalSphinx () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a royal sphinx"; + Body = 173; + BaseSoundID = 0x668; + AnimationMod = 3; + + SetStr( 336, 385 ); + SetDex( 96, 105 ); + SetInt( 181, 205 ); + + SetHits( 202, 251 ); + + SetDamage( 10, 13 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 8500; + Karma = -8500; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.Gems ); + AddLoot( LootPack.MedPotions ); + } + + public override void OnGaveMeleeAttack( Mobile m ) + { + base.OnGaveMeleeAttack( m ); + + if ( 0.1 >= Utility.RandomDouble() ) + Sphinx.TurnStone( this ); + } + + public override void OnGotMeleeAttack( Mobile m ) + { + base.OnGotMeleeAttack( m ); + + if ( 0.1 >= Utility.RandomDouble() ) + Sphinx.TurnStone( this ); + } + + public RoyalSphinx( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Sasquatch.cs b/Scripts/Mobiles/Monsters/Sasquatch.cs new file mode 100644 index 0000000..62f4e46 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Sasquatch.cs @@ -0,0 +1,56 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a sasquatch corpse" )] + public class Sasquatch : BaseCreature + { + [Constructable] + public Sasquatch() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a sasquatch"; + Body = 166; + BaseSoundID = 0x515; + + SetStr( 276, 305 ); + SetDex( 121, 145 ); + SetInt( 56, 80 ); + + SetHits( 236, 273 ); + SetMana( 0 ); + + SetDamage( 16, 21 ); + + SetSkill( SkillName.MagicResist, 35.1, 50.0 ); + SetSkill( SkillName.Tactics, 90.1, 120.0 ); + SetSkill( SkillName.HandToHand, 65.1, 90.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 40; + } + + public override int Meat{ get{ return 8; } } + public override int Hides{ get{ return 16; } } + + public Sasquatch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Slime.cs b/Scripts/Mobiles/Monsters/Slime.cs new file mode 100644 index 0000000..4a1b746 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Slime.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a slimey corpse" )] + public class Slime : BaseCreature + { + [Constructable] + public Slime() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a slime"; + Body = 51; + BaseSoundID = 456; + + Hue = Utility.RandomSlimeHue(); + + SetStr( 22, 34 ); + SetDex( 16, 21 ); + SetInt( 16, 20 ); + + SetHits( 15, 19 ); + + SetDamage( 1, 5 ); + + SetSkill( SkillName.Poisoning, 30.1, 50.0 ); + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 19.3, 34.0 ); + SetSkill( SkillName.HandToHand, 19.3, 34.0 ); + + Fame = 300; + Karma = -300; + + VirtualArmor = 8; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + AddLoot( LootPack.Gems ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lesser; } } + public override Poison HitPoison{ get{ return Poison.Lesser; } } + + public Slime( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Monsters/Sludge.cs b/Scripts/Mobiles/Monsters/Sludge.cs new file mode 100644 index 0000000..ae32764 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Sludge.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a slimey corpse" )] + public class Sludge : BaseCreature + { + [Constructable] + public Sludge() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a pile of sludge"; + Body = 192; + BaseSoundID = 456; + + SetStr( 122, 134 ); + SetDex( 66, 71 ); + SetInt( 16, 20 ); + + SetHits( 115, 119 ); + + SetDamage( 8, 17 ); + + SetSkill( SkillName.Poisoning, 70.1, 90.0 ); + SetSkill( SkillName.MagicResist, 55.1, 60.0 ); + SetSkill( SkillName.Tactics, 59.3, 74.0 ); + SetSkill( SkillName.HandToHand, 59.3, 84.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 28; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.Gems, 3 ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public Sludge( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Monsters/Sphinx.cs b/Scripts/Mobiles/Monsters/Sphinx.cs new file mode 100644 index 0000000..6ae56e8 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Sphinx.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a sphinx corpse" )] + public class Sphinx : BaseCreature + { + [Constructable] + public Sphinx () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a sphinx"; + Body = 77; + BaseSoundID = 0x668; + + SetStr( 176, 205 ); + SetDex( 46, 65 ); + SetInt( 110, 175 ); + + SetHits( 106, 123 ); + + SetDamage( 8, 14 ); + + SetSkill( SkillName.Concentration, 65.1, 80.0 ); + SetSkill( SkillName.Magery, 65.1, 80.0 ); + SetSkill( SkillName.MagicResist, 60.2, 90.0 ); + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 30.1, 40.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Gems ); + AddLoot( LootPack.LowPotions ); + } + + public static void TurnStone( Mobile from ) + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in from.GetMobilesInRange( 2 ) ) + { + if ( m == from || !from.CanBeHarmful( m ) ) + continue; + + if ( m is BaseCreature && (((BaseCreature)m).Controlled || ((BaseCreature)m).Summoned || ((BaseCreature)m).Team != ((BaseCreature)from).Team) ) + list.Add( m ); + else if ( m.Player ) + list.Add( m ); + } + + foreach ( Mobile m in list ) + { + if ( !m.CheckSkill( SkillName.MagicResist, 0, 100 ) ) + { + from.DoHarmful( m ); + + m.PlaySound(0x16B); + + int duration = Utility.RandomMinMax(4, 8); + m.Paralyze(TimeSpan.FromSeconds(duration)); + + m.SendMessage( "You are petrified with fear from the mighty roar!" ); + } + } + } + + public override void OnGaveMeleeAttack( Mobile m ) + { + base.OnGaveMeleeAttack( m ); + + if ( 0.1 >= Utility.RandomDouble() ) + TurnStone( this ); + } + + public override void OnGotMeleeAttack( Mobile m ) + { + base.OnGotMeleeAttack( m ); + + if ( 0.1 >= Utility.RandomDouble() ) + TurnStone( this ); + } + + public Sphinx( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Stalker.cs b/Scripts/Mobiles/Monsters/Stalker.cs new file mode 100644 index 0000000..8a8704b --- /dev/null +++ b/Scripts/Mobiles/Monsters/Stalker.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a stalker corpse" )] + public class ForestStalker : BaseCreature + { + [Constructable] + public ForestStalker () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a stalker"; + Body = 282; + BaseSoundID = 0x56F; + AnimationMod = 1; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override int Meat{ get{ return 2; } } + + public ForestStalker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Stirge.cs b/Scripts/Mobiles/Monsters/Stirge.cs new file mode 100644 index 0000000..0d8c3f5 --- /dev/null +++ b/Scripts/Mobiles/Monsters/Stirge.cs @@ -0,0 +1,80 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a stirge corpse" )] + public class Stirge : BaseCreature + { + [Constructable] + public Stirge() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a stirge"; + Body = 260; + BaseSoundID = 0x275; + AnimationMod = 1; + + SetStr( 91, 110 ); + SetDex( 91, 115 ); + SetInt( 26, 50 ); + + SetHits( 55, 66 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.MagicResist, 70.1, 95.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 30.1, 55.0 ); + + Fame = 1000; + Karma = -1000; + + VirtualArmor = 14; + } + + public void DrainBlood( Mobile m ) + { + DoHarmful( m ); + new Blood().MoveToWorld( m.Location, m.Map ); + m.SendMessage( "The creature feeds on your blood!" ); + int toDrain = Utility.RandomMinMax( 2, 10 ); + m.PlaySound( 0x23F ); + Hits += toDrain; + m.Damage( toDrain, this ); + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + DrainBlood( defender ); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + DrainBlood( attacker ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public Stirge( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/StoneHarpy.cs b/Scripts/Mobiles/Monsters/StoneHarpy.cs new file mode 100644 index 0000000..95bc2a3 --- /dev/null +++ b/Scripts/Mobiles/Monsters/StoneHarpy.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a stone harpy corpse" )] + public class StoneHarpy : BaseCreature + { + [Constructable] + public StoneHarpy() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a stone harpy"; + Body = 30; + Hue = 1402; + BaseSoundID = 402; + + SetStr( 296, 320 ); + SetDex( 86, 110 ); + SetInt( 51, 75 ); + + SetHits( 178, 192 ); + SetMana( 0 ); + + SetDamage( 8, 16 ); + + SetSkill( SkillName.MagicResist, 50.1, 65.0 ); + SetSkill( SkillName.Tactics, 70.1, 100.0 ); + SetSkill( SkillName.HandToHand, 70.1, 100.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.Gems, 2 ); + } + + public override int GetAttackSound() + { + return 916; + } + + public override int GetAngerSound() + { + return 916; + } + + public override int GetDeathSound() + { + return 917; + } + + public override int GetHurtSound() + { + return 919; + } + + public override int GetIdleSound() + { + return 918; + } + + public override int Meat{ get{ return 4; } } + public override MeatType MeatType{ get{ return MeatType.BigBird; } } + public override int Feathers{ get{ return 50; } } + + public StoneHarpy( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Monsters/Xorn.cs b/Scripts/Mobiles/Monsters/Xorn.cs new file mode 100644 index 0000000..3da2d7b --- /dev/null +++ b/Scripts/Mobiles/Monsters/Xorn.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a xorn's corpse" )] + public class Xorn : BaseCreature + { + [Constructable] + public Xorn( ) : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a xorn"; + Body = 89; + Hue = 1181; + BaseSoundID = 268; + + SetStr( 226, 255 ); + SetDex( 126, 145 ); + SetInt( 71, 92 ); + + SetHits( 136, 153 ); + + SetDamage( 9, 16 ); + + SetSkill( SkillName.MagicResist, 50.1, 95.0 ); + SetSkill( SkillName.Tactics, 60.1, 100.0 ); + SetSkill( SkillName.HandToHand, 60.1, 100.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 23; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems, 2 ); + AddLoot( LootPack.Gems, 2 ); + AddLoot( LootPack.Gems, 2 ); + AddLoot( LootPack.Gems, 2 ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + + public void XornEats() + { + ArrayList list = new ArrayList(); + int nGold = 0; + int toEat = 0; + + foreach ( Mobile m in this.GetMobilesInRange( 2 ) ) + { + if ( m == this || !CanBeHarmful( m ) ) + continue; + + else if ( m.Player && m.TotalGold > 0 ) + list.Add( m ); + } + + foreach ( Mobile m in list ) + { + nGold = m.TotalGold; + Container pack = m.Backpack; + toEat = Utility.RandomMinMax( 1, nGold ); + pack.ConsumeTotal(typeof(Gold), toEat); + m.PlaySound( Utility.Random( 0x3A, 3 ) ); + m.SendMessage( "The xorn ate some of your gold!" ); + } + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + + if ( 0.1 >= Utility.RandomDouble() ) + XornEats(); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + + if ( 0.1 >= Utility.RandomDouble() ) + XornEats(); + } + + public Xorn( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/BloodLotus.cs b/Scripts/Mobiles/Plants/BloodLotus.cs new file mode 100644 index 0000000..81986cd --- /dev/null +++ b/Scripts/Mobiles/Plants/BloodLotus.cs @@ -0,0 +1,87 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a dead lotus" )] + public class BloodLotus : BaseCreature + { + [Constructable] + public BloodLotus() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a blood lotus"; + Body = 137; + BaseSoundID = 352; + + SetStr( 96, 120 ); + SetDex( 66, 85 ); + SetInt( 16, 30 ); + + SetHits( 58, 72 ); + SetMana( 0 ); + + SetDamage( 6, 12 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 65.1, 80.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 28; + + PackReg( 3 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public void DrainBlood( Mobile m ) + { + DoHarmful( m ); + new Blood().MoveToWorld( m.Location, m.Map ); + m.SendMessage( "The plant feeds on your blood!" ); + int toDrain = Utility.RandomMinMax( 2, 10 ); + m.PlaySound( 0x23F ); + Hits += toDrain; + m.Damage( toDrain, this ); + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + DrainBlood( defender ); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + DrainBlood( attacker ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public BloodLotus( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/Corpser.cs b/Scripts/Mobiles/Plants/Corpser.cs new file mode 100644 index 0000000..ac88dfc --- /dev/null +++ b/Scripts/Mobiles/Plants/Corpser.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a corpser corpse" )] + public class Corpser : BaseCreature + { + [Constructable] + public Corpser() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a corpser"; + Body = 69; + BaseSoundID = 684; + + SetStr( 156, 180 ); + SetDex( 26, 45 ); + SetInt( 26, 40 ); + + SetHits( 94, 108 ); + SetMana( 0 ); + + SetDamage( 10, 23 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 60.0 ); + + Fame = 1000; + Karma = -1000; + + VirtualArmor = 18; + + PackWood( 10 ); + + PackItem( new MandrakeRoot( 3 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lesser; } } + public override bool DisallowAllMoves{ get{ return true; } } + + public Corpser( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + + if ( BaseSoundID == 352 ) + BaseSoundID = 684; + } + } +} diff --git a/Scripts/Mobiles/Plants/Ent.cs b/Scripts/Mobiles/Plants/Ent.cs new file mode 100644 index 0000000..e51ed58 --- /dev/null +++ b/Scripts/Mobiles/Plants/Ent.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a fallen tree" )] + public class Ent : BaseCreature + { + [Constructable] + public Ent() : base( AIType.AI_Mage, FightMode.Evil, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "trees" ); + Title = "the ent"; + Body = 91; + BaseSoundID = 0x5F3; + + SetStr( 536, 585 ); + SetDex( 126, 145 ); + SetInt( 281, 305 ); + + SetHits( 322, 351 ); + + SetDamage( 13, 16 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 11500; + Karma = 11500; + + VirtualArmor = 50; + + PackItem( new WoodBoard( Utility.RandomMinMax( 50, 100 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override bool BleedImmune{ get{ return true; } } + + public Ent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/Fungal.cs b/Scripts/Mobiles/Plants/Fungal.cs new file mode 100644 index 0000000..5df1187 --- /dev/null +++ b/Scripts/Mobiles/Plants/Fungal.cs @@ -0,0 +1,88 @@ +using System; +using Server; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a fungal corpse" )] + public class Fungal : BaseCreature + { + [Constructable] + public Fungal () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a fungal"; + Body = 109; + AnimationMod = 4; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override bool BleedImmune{ get{ return true; } } + + public override int GetAngerSound() + { + return 0x451; + } + + public override int GetIdleSound() + { + return 0x452; + } + + public override int GetAttackSound() + { + return 0x453; + } + + public override int GetHurtSound() + { + return 0x454; + } + + public override int GetDeathSound() + { + return 0x455; + } + + public Fungal( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/FungalMage.cs b/Scripts/Mobiles/Plants/FungalMage.cs new file mode 100644 index 0000000..70db1c3 --- /dev/null +++ b/Scripts/Mobiles/Plants/FungalMage.cs @@ -0,0 +1,91 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a fungal corpse" )] + public class FungalMage : BaseCreature + { + [Constructable] + public FungalMage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a fungal mage"; + Body = 110; + AnimationMod = 4; + + SetStr( 181, 205 ); + SetDex( 191, 215 ); + SetInt( 96, 120 ); + + SetHits( 109, 123 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 75.0, 97.5 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 20.2, 60.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 30; + + PackReg( 10 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.MedPotions ); + } + + public override bool BleedImmune{ get{ return true; } } + public override bool CanRummageCorpses{ get{ return true; } } + + public override int GetAngerSound() + { + return 0x451; + } + + public override int GetIdleSound() + { + return 0x452; + } + + public override int GetAttackSound() + { + return 0x453; + } + + public override int GetHurtSound() + { + return 0x454; + } + + public override int GetDeathSound() + { + return 0x455; + } + + public FungalMage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/Reaper.cs b/Scripts/Mobiles/Plants/Reaper.cs new file mode 100644 index 0000000..98b80e8 --- /dev/null +++ b/Scripts/Mobiles/Plants/Reaper.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a reapers corpse" )] + public class Reaper : BaseCreature + { + [Constructable] + public Reaper() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a reaper"; + Body = 47; + BaseSoundID = 442; + + SetStr( 66, 215 ); + SetDex( 66, 75 ); + SetInt( 101, 250 ); + + SetHits( 40, 129 ); + SetStam( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 100.1, 125.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 50.1, 60.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + + PackWood( 10 ); + + PackItem( new MandrakeRoot( 5 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override bool DisallowAllMoves{ get{ return true; } } + + public Reaper( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/Shambler.cs b/Scripts/Mobiles/Plants/Shambler.cs new file mode 100644 index 0000000..9cd1754 --- /dev/null +++ b/Scripts/Mobiles/Plants/Shambler.cs @@ -0,0 +1,57 @@ +using System; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a plant corpse" )] + public class Shambler : BaseCreature + { + [Constructable] + public Shambler() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a shambler"; + Body = 125; + BaseSoundID = 442; + + SetStr( 96, 120 ); + SetDex( 91, 115 ); + SetInt( 21, 45 ); + + SetHits( 58, 72 ); + + SetDamage( 5, 7 ); + + SetSkill( SkillName.MagicResist, 75.1, 100.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 55.1, 75.0 ); + + Fame = 450; + Karma = -450; + + VirtualArmor = 28; + + PackItem( new WoodBoard( 4 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public Shambler( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/ShamblingMound.cs b/Scripts/Mobiles/Plants/ShamblingMound.cs new file mode 100644 index 0000000..bb15a9a --- /dev/null +++ b/Scripts/Mobiles/Plants/ShamblingMound.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a plant corpse" )] + public class ShamblingMound : BaseCreature + { + [Constructable] + public ShamblingMound() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.6, 1.2 ) + { + Name = "a shambling mound"; + Body = 84; + BaseSoundID = 442; + + SetStr( 601, 700 ); + SetDex( 46, 65 ); + SetInt( 36, 50 ); + + SetHits( 481, 540 ); + SetMana( 0 ); + + SetDamage( 10, 23 ); + + SetSkill( SkillName.MagicResist, 90.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 85.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 8000; + Karma = -8000; + + VirtualArmor = 42; + + PackItem( new WoodBoard( 10 ) ); + PackReg( 3 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average, 2 ); + } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + + public ShamblingMound( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/SwampTentacle.cs b/Scripts/Mobiles/Plants/SwampTentacle.cs new file mode 100644 index 0000000..071880e --- /dev/null +++ b/Scripts/Mobiles/Plants/SwampTentacle.cs @@ -0,0 +1,61 @@ +using System; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a swamp tentacle corpse" )] + public class SwampTentacle : BaseCreature + { + [Constructable] + public SwampTentacle() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a swamp tentacle"; + Body = 8; + Hue = 61; + BaseSoundID = 352; + + SetStr( 96, 120 ); + SetDex( 66, 85 ); + SetInt( 16, 30 ); + + SetHits( 58, 72 ); + SetMana( 0 ); + + SetDamage( 6, 12 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 65.1, 80.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 28; + + PackReg( 3 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + + public SwampTentacle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/SwampThing.cs b/Scripts/Mobiles/Plants/SwampThing.cs new file mode 100644 index 0000000..b398c56 --- /dev/null +++ b/Scripts/Mobiles/Plants/SwampThing.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a mushy corpse" )] + public class SwampThing : BaseCreature + { + [Constructable] + public SwampThing() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a swamp thing"; + Body = 296; + BaseSoundID = 427; + AnimationMod = 3; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 48; + + PackReg( 5 ); + PackReg( 6 ); + PackReg( 7 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override bool BleedImmune{ get{ return true; } } + + public SwampThing( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Plants/WhippingVine.cs b/Scripts/Mobiles/Plants/WhippingVine.cs new file mode 100644 index 0000000..84a6076 --- /dev/null +++ b/Scripts/Mobiles/Plants/WhippingVine.cs @@ -0,0 +1,58 @@ +using System; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a whipping vine corpse" )] + public class WhippingVine : BaseCreature + { + [Constructable] + public WhippingVine() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a whipping vine"; + Body = 8; + Hue = 0x851; + BaseSoundID = 352; + + SetStr( 251, 300 ); + SetDex( 76, 100 ); + SetInt( 26, 40 ); + + SetMana( 0 ); + + SetDamage( 7, 25 ); + + SetSkill( SkillName.MagicResist, 70.0 ); + SetSkill( SkillName.Tactics, 70.0 ); + SetSkill( SkillName.HandToHand, 70.0 ); + + Fame = 1000; + Karma = -1000; + + VirtualArmor = 45; + + PackReg( 3 ); + + PackItem( new Vines() ); + } + + public override bool BardImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public WhippingVine( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Alligator.cs b/Scripts/Mobiles/Reptilians/Alligator.cs new file mode 100644 index 0000000..d8fc147 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Alligator.cs @@ -0,0 +1,60 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "an alligator corpse" )] + public class Alligator : BaseCreature + { + [Constructable] + public Alligator() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an alligator"; + Body = 202; + BaseSoundID = 660; + + SetStr( 76, 100 ); + SetDex( 6, 25 ); + SetInt( 11, 20 ); + + SetHits( 46, 60 ); + SetStam( 46, 65 ); + SetMana( 0 ); + + SetDamage( 5, 15 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 600; + Karma = -600; + + VirtualArmor = 30; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public Alligator(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( BaseSoundID == 0x5A ) + BaseSoundID = 660; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/BullFrog.cs b/Scripts/Mobiles/Reptilians/BullFrog.cs new file mode 100644 index 0000000..cb596d0 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/BullFrog.cs @@ -0,0 +1,63 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a bull frog corpse" )] + [TypeAlias( "Server.Mobiles.Bullfrog" )] + public class BullFrog : BaseCreature + { + [Constructable] + public BullFrog() : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a bull frog"; + Body = 81; + Hue = Utility.RandomList( 0x5AC,0x5A3,0x59A,0x591,0x588,0x57F ); + BaseSoundID = 0x266; + + SetStr( 46, 70 ); + SetDex( 6, 25 ); + SetInt( 11, 20 ); + + SetHits( 28, 42 ); + SetMana( 0 ); + + SetDamage( 1, 2 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 350; + Karma = 0; + + VirtualArmor = 6; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 4; } } + + public BullFrog(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Dinosaurs/Gorceratops.cs b/Scripts/Mobiles/Reptilians/Dinosaurs/Gorceratops.cs new file mode 100644 index 0000000..2c5001c --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Dinosaurs/Gorceratops.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using Server; +using Server.Items; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "a gorceratops corpse" )] + public class Gorceratops : BaseCreature + { + [Constructable] + public Gorceratops() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a gorceratops"; + Body = 210; + BaseSoundID = 0x4F5; + + SetStr( 176, 205 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 106, 123 ); + + SetDamage( 8, 14 ); + + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 5; } } + public override int Hides{ get{ return 10; } } + + public Gorceratops( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Dinosaurs/Meglasaur.cs b/Scripts/Mobiles/Reptilians/Dinosaurs/Meglasaur.cs new file mode 100644 index 0000000..d584203 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Dinosaurs/Meglasaur.cs @@ -0,0 +1,56 @@ +using System; +using Server; +using System.Collections.Generic; +using Server.Mobiles; +using Server.Items; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a dinosaur corpse" )] + public class Meglasaur : BaseCreature + { + [Constructable] + public Meglasaur() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a meglasaur"; + Body = 248; + BaseSoundID = 0x4F5; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 101, 140 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 46; + } + + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + + public Meglasaur( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Dinosaurs/Raptor.cs b/Scripts/Mobiles/Reptilians/Dinosaurs/Raptor.cs new file mode 100644 index 0000000..027f4ae --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Dinosaurs/Raptor.cs @@ -0,0 +1,55 @@ +using System; +using Server.Items; +using Server.Mobiles; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a dinosaur corpse" )] + public class Raptor : BaseCreature + { + [Constructable] + public Raptor () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a raptor"; + Body = Utility.RandomList( 277, 275, 274, 235, 235 ); + BaseSoundID = 0x5EE; + + SetStr( 126, 150 ); + SetDex( 56, 75 ); + SetInt( 11, 20 ); + + SetHits( 76, 90 ); + SetMana( 0 ); + + SetDamage( 6, 24 ); + + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 40; + } + + public override int Meat{ get{ return 4; } } + public override int Hides{ get{ return 12; } } + + public Raptor(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Dinosaurs/Stegosaurus.cs b/Scripts/Mobiles/Reptilians/Dinosaurs/Stegosaurus.cs new file mode 100644 index 0000000..03a877f --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Dinosaurs/Stegosaurus.cs @@ -0,0 +1,56 @@ +using System; +using Server; +using System.Collections.Generic; +using Server.Mobiles; +using Server.Items; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a dinosaur corpse" )] + public class Stegosaurus : BaseCreature + { + [Constructable] + public Stegosaurus () : base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a stegosaurus"; + Body = 276; + BaseSoundID = 0x4F5; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 101, 140 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 46; + } + + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + + public Stegosaurus( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Dinosaurs/Teradactyl.cs b/Scripts/Mobiles/Reptilians/Dinosaurs/Teradactyl.cs new file mode 100644 index 0000000..5adac30 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Dinosaurs/Teradactyl.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Mobiles; +using Server.Items; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + [CorpseName( "a teradactyl corpse" )] + public class Teradactyl : BaseCreature + { + [Constructable] + public Teradactyl() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a teradactyl"; + Body = 88; + Hue = Utility.RandomSnakeHue(); + BaseSoundID = 0x275; + + SetStr( 202, 240 ); + SetDex( 153, 172 ); + SetInt( 51, 90 ); + + SetHits( 125, 141 ); + + SetDamage( 8, 19 ); + + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 10; } } + public override int Hides{ get{ return 20; } } + + public Teradactyl( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Dinosaurs/Tyranasaur.cs b/Scripts/Mobiles/Reptilians/Dinosaurs/Tyranasaur.cs new file mode 100644 index 0000000..5015dec --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Dinosaurs/Tyranasaur.cs @@ -0,0 +1,58 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dinosaur corpse" )] + public class Tyranasaur : BaseCreature + { + [Constructable] + public Tyranasaur () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a tyranasaur"; + Body = 246; + BaseSoundID = 0x4FB; + + SetStr( 796, 825 ); + SetDex( 86, 105 ); + SetInt( 40, 60 ); + + SetHits( 478, 495 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 10000; + Karma = -10000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 19; } } + public override int Hides{ get{ return 20; } } + + public Tyranasaur( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/DragonTurtle.cs b/Scripts/Mobiles/Reptilians/DragonTurtle.cs new file mode 100644 index 0000000..0d74ac0 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/DragonTurtle.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a dragon turtle corpse" )] + public class DragonTurtle : BaseCreature + { + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + + [Constructable] + public DragonTurtle () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a dragon turtle"; + Body = 181; + BaseSoundID = 0x2C0; + CanSwim = true; + + SetStr( 867, 1045 ); + SetDex( 86, 105 ); + SetInt( 46, 70 ); + + SetHits( 576, 652 ); + + SetDamage( 22, 28 ); + + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 16000; + Karma = -16000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.FilthyRich, 1 ); + AddLoot( LootPack.Gems, 3 ); + } + + public override int Meat{ get{ return 10; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 12; } } + + public DragonTurtle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Drasolisk.cs b/Scripts/Mobiles/Reptilians/Drasolisk.cs new file mode 100644 index 0000000..a736beb --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Drasolisk.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a reptilian corpse" )] + public class Drasolisk : BaseCreature + { + [Constructable] + public Drasolisk () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "lizardman" ); + HiddenTitle = "the drasolisk"; + Body = 115; + BaseSoundID = 0x5EE; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.Poisoning, 45.1, 60.0 ); + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + + PackItem( new DoubleAxe() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowPotions ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 15; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Lesser : Poison.Regular); } } + + public Drasolisk( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/FireSalamander.cs b/Scripts/Mobiles/Reptilians/FireSalamander.cs new file mode 100644 index 0000000..f6b8876 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/FireSalamander.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a salamander corpse" )] + public class FireSalamander : BaseCreature + { + [Constructable] + public FireSalamander () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a salamander"; + Body = 99; + BaseSoundID = 0x27A; + + SetStr( 176, 205 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 156, 173 ); + + SetDamage( 8, 14 ); + + SetSkill( SkillName.MagicResist, 85.1, 100.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 3800; + Karma = -3800; + + VirtualArmor = 40; + + PackItem( new Spear() ); + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + + public FireSalamander( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/FireToad.cs b/Scripts/Mobiles/Reptilians/FireToad.cs new file mode 100644 index 0000000..4fc88a5 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/FireToad.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a toad corpse" )] + public class FireToad : BaseCreature + { + [Constructable] + public FireToad () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a fire toad"; + Body = 153; + BaseSoundID = 0x26B; + + SetStr( 126, 150 ); + SetDex( 26, 45 ); + SetInt( 11, 20 ); + + SetHits( 96, 110 ); + SetMana( 0 ); + + SetDamage( 7, 19 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 850; + Karma = -850; + + VirtualArmor = 28; + + PackItem( new SulfurousAsh( Utility.RandomMinMax( 8, 20 ) ) ); + + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 4; } } + + public FireToad( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/GiantLizard.cs b/Scripts/Mobiles/Reptilians/GiantLizard.cs new file mode 100644 index 0000000..30bb14b --- /dev/null +++ b/Scripts/Mobiles/Reptilians/GiantLizard.cs @@ -0,0 +1,62 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a lizard corpse" )] + public class GiantLizard : BaseCreature + { + [Constructable] + public GiantLizard() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant lizard"; + Body = 206; + Hue = Utility.RandomLizardHue(); + BaseSoundID = 0x5A; + + SetStr( 126, 150 ); + SetDex( 56, 75 ); + SetInt( 11, 20 ); + + SetHits( 76, 90 ); + SetMana( 0 ); + + SetDamage( 6, 24 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 40; + + PackItem( new SulfurousAsh( Utility.Random( 4, 10 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Hides{ get{ return 12; } } + + public GiantLizard(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/GiantToad.cs b/Scripts/Mobiles/Reptilians/GiantToad.cs new file mode 100644 index 0000000..1423b3b --- /dev/null +++ b/Scripts/Mobiles/Reptilians/GiantToad.cs @@ -0,0 +1,66 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a giant toad corpse" )] + [TypeAlias( "Server.Mobiles.Gianttoad" )] + public class GiantToad : BaseCreature + { + [Constructable] + public GiantToad() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant toad"; + Body = 80; + BaseSoundID = 0x26B; + + SetStr( 76, 100 ); + SetDex( 6, 25 ); + SetInt( 11, 20 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 5, 17 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 750; + Karma = -750; + + VirtualArmor = 24; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override int Hides{ get{ return 12; } } + + public GiantToad(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 1); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + if ( version < 1 ) + { + AI = AIType.AI_Melee; + FightMode = FightMode.Closest; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Hydra.cs b/Scripts/Mobiles/Reptilians/Hydra.cs new file mode 100644 index 0000000..bc04e6a --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Hydra.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a hydra corpse" )] + public class Hydra : BaseCreature + { + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + + [Constructable] + public Hydra () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a hydra"; + Body = 117; + BaseSoundID = 0x488; + AnimationMod = 4; + + SetStr( 796, 825 ); + SetDex( 86, 105 ); + SetInt( 436, 475 ); + + SetHits( 478, 495 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.Concentration, 30.1, 40.0 ); + SetSkill( SkillName.Magery, 30.1, 40.0 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Gems, 8 ); + } + + public override bool AutoDispel{ get{ return !Controlled; } } + public override int Meat{ get{ return 19; } } + public override int Hides{ get{ return 20; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + + public Hydra( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/IceSalamander.cs b/Scripts/Mobiles/Reptilians/IceSalamander.cs new file mode 100644 index 0000000..2f8484d --- /dev/null +++ b/Scripts/Mobiles/Reptilians/IceSalamander.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a salamander corpse" )] + public class IceSalamander : BaseCreature + { + [Constructable] + public IceSalamander () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a salamander"; + Body = 98; + BaseSoundID = 0x27A; + + SetStr( 176, 205 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 156, 173 ); + + SetDamage( 8, 14 ); + + SetSkill( SkillName.MagicResist, 85.1, 100.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 3800; + Karma = -3800; + + VirtualArmor = 40; + + PackItem( new Spear() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + + public IceSalamander( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/IceToad.cs b/Scripts/Mobiles/Reptilians/IceToad.cs new file mode 100644 index 0000000..b0cbb55 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/IceToad.cs @@ -0,0 +1,61 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a toad corpse" )] + public class IceToad : BaseCreature + { + [Constructable] + public IceToad () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ice toad"; + Body = 153; + Hue = 1084; + BaseSoundID = 0x26B; + + SetStr( 126, 150 ); + SetDex( 26, 45 ); + SetInt( 11, 20 ); + + SetHits( 96, 110 ); + SetMana( 0 ); + + SetDamage( 7, 19 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 850; + Karma = -850; + + VirtualArmor = 28; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 4; } } + + public IceToad( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/LavaLizard.cs b/Scripts/Mobiles/Reptilians/LavaLizard.cs new file mode 100644 index 0000000..21233e7 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/LavaLizard.cs @@ -0,0 +1,67 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a lava lizard corpse" )] + [TypeAlias( "Server.Mobiles.Lavalizard" )] + public class LavaLizard : BaseCreature + { + [Constructable] + public LavaLizard() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a lava lizard"; + Body = 206; + Hue = 1184; + BaseSoundID = 0x5A; + + SetStr( 126, 150 ); + SetDex( 56, 75 ); + SetInt( 11, 20 ); + + SetHits( 76, 90 ); + SetMana( 0 ); + + SetDamage( 6, 24 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 40; + + PackItem( new SulfurousAsh( Utility.Random( 4, 10 ) ) ); + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Hides{ get{ return 12; } } + + public LavaLizard(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Lizardman.cs b/Scripts/Mobiles/Reptilians/Lizardman.cs new file mode 100644 index 0000000..0e8d301 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Lizardman.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a lizardman corpse" )] + public class Lizardman : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Lizardman; } } + + [Constructable] + public Lizardman() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "lizardman" ); + HiddenTitle = "the lizardman"; + Body = Utility.RandomList( 33, 35, 36 ); + BaseSoundID = 417; + + SetStr( 96, 120 ); + SetDex( 86, 105 ); + SetInt( 36, 60 ); + + SetHits( 58, 72 ); + + SetDamage( 5, 7 ); + + SetSkill( SkillName.MagicResist, 35.1, 60.0 ); + SetSkill( SkillName.Tactics, 55.1, 80.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 1500; + Karma = -1500; + + VirtualArmor = 28; + + if ( Body == 35 ) + PackItem( new Spear() ); + else if ( Body == 36 ) + PackItem( new WarMace() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public Lizardman( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Sakkhra.cs b/Scripts/Mobiles/Reptilians/Sakkhra.cs new file mode 100644 index 0000000..5914f7f --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Sakkhra.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a reptilian corpse" )] + public class Sakkhra : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Lizardman; } } + + [Constructable] + public Sakkhra() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "lizardman" ); + HiddenTitle = "the sakkhra"; + Body = Utility.RandomList( 168, 170 ); + BaseSoundID = 417; + + SetStr( 154, 192 ); + SetDex( 138, 168 ); + SetInt( 58, 96 ); + + SetHits( 93, 115 ); + + SetDamage( 8, 11 ); + + SetSkill( SkillName.MagicResist, 56.2, 96.0 ); + SetSkill( SkillName.Tactics, 88.2, 128.0 ); + SetSkill( SkillName.HandToHand, 80.2, 112.0 ); + + Fame = 2400; + Karma = -2400; + + VirtualArmor = 45; + + if ( Body == 168 ) + { + PackItem( new WoodenShield() ); + PackItem( new Halberd() ); + } + else if ( Body == 170 ) + { + PackItem( new WoodenShield() ); + PackItem( new Mace() ); + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public Sakkhra( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/SakkhraShaman.cs b/Scripts/Mobiles/Reptilians/SakkhraShaman.cs new file mode 100644 index 0000000..3a68f07 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/SakkhraShaman.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a reptilian corpse" )] + public class SakkhraShaman : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Lizardman; } } + + [Constructable] + public SakkhraShaman () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "lizardman" ); + HiddenTitle = "the sakkhra shaman"; + Body = 169; + BaseSoundID = 417; + + SetStr( 116, 150 ); + SetDex( 91, 115 ); + SetInt( 161, 185 ); + + SetHits( 70, 90 ); + + SetDamage( 4, 14 ); + + SetSkill( SkillName.Concentration, 60.1, 72.5 ); + SetSkill( SkillName.Magery, 60.1, 72.5 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 50.1, 65.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 30; + + PackReg( 6 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 12; } } + + public SakkhraShaman( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Reptilians/Seeker.cs b/Scripts/Mobiles/Reptilians/Seeker.cs new file mode 100644 index 0000000..cf0f779 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Seeker.cs @@ -0,0 +1,60 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a seeker corpse" )] + public class Seeker : BaseCreature + { + [Constructable] + public Seeker () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a seeker"; + Body = 107; + BaseSoundID = 377; + + SetStr( 296, 325 ); + SetDex( 86, 105 ); + SetInt( 291, 385 ); + + SetHits( 178, 195 ); + + SetDamage( 8, 19 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 115.1, 130.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 100.0 ); + + Fame = 12500; + Karma = -12500; + + VirtualArmor = Utility.RandomMinMax( 48, 51 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.Gems ); + } + + public Seeker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/Cobra.cs b/Scripts/Mobiles/Reptilians/Serpents/Cobra.cs new file mode 100644 index 0000000..afb8cc7 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/Cobra.cs @@ -0,0 +1,73 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a giant serpent corpse" )] + [TypeAlias( "Server.Mobiles.Serpant" )] + public class Cobra : BaseCreature + { + [Constructable] + public Cobra() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a cobra"; + Body = 21; + Hue = Utility.RandomYellowHue(); + BaseSoundID = 219; + + SetStr( 186, 215 ); + SetDex( 56, 80 ); + SetInt( 66, 85 ); + + SetHits( 112, 129 ); + SetMana( 0 ); + + SetDamage( 7, 17 ); + + SetSkill( SkillName.Poisoning, 70.1, 100.0 ); + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 65.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 32; + + PackItem( new Bone() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly); } } + + public override int Meat{ get{ return 4; } } + public override int Hides{ get{ return 15; } } + + public Cobra(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( BaseSoundID == -1 ) + BaseSoundID = 219; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/FireNaga.cs b/Scripts/Mobiles/Reptilians/Serpents/FireNaga.cs new file mode 100644 index 0000000..9f5bfe5 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/FireNaga.cs @@ -0,0 +1,69 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName("a naga corpse")] + public class FireNaga : BaseCreature + { + [Constructable] + public FireNaga() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Body = 165; + Name = "a fire naga"; + BaseSoundID = 634; + + SetStr( 161, 360 ); + SetDex( 151, 300 ); + SetInt( 21, 40 ); + + SetHits( 112, 250 ); + + SetDamage( 6, 23 ); + + SetSkill( SkillName.MagicResist, 95.1, 100.0 ); + SetSkill( SkillName.Magery, 95.1, 100.0 ); + SetSkill( SkillName.Tactics, 80.1, 95.0 ); + SetSkill( SkillName.HandToHand, 85.1, 100.0 ); + + Fame = 9000; + Karma = -9000; + + VirtualArmor = 45; + + PackItem( new SulfurousAsh( 10 ) ); + + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems, 2 ); + AddLoot( LootPack.MedScrolls, 1 ); + } + + public override int Hides{ get{ return 15; } } + public override int Meat{ get{ return 4; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public FireNaga(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/GiantSerpent.cs b/Scripts/Mobiles/Reptilians/Serpents/GiantSerpent.cs new file mode 100644 index 0000000..4410355 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/GiantSerpent.cs @@ -0,0 +1,73 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a giant serpent corpse" )] + [TypeAlias( "Server.Mobiles.Serpant" )] + public class GiantSerpent : BaseCreature + { + [Constructable] + public GiantSerpent() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a serpent"; + Body = 21; + Hue = Utility.RandomSnakeHue(); + BaseSoundID = 219; + + SetStr( 186, 215 ); + SetDex( 56, 80 ); + SetInt( 66, 85 ); + + SetHits( 112, 129 ); + SetMana( 0 ); + + SetDamage( 7, 17 ); + + SetSkill( SkillName.Poisoning, 70.1, 100.0 ); + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 65.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 32; + + PackItem( new Bone() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Regular : Poison.Greater); } } + + public override int Meat{ get{ return 4; } } + public override int Hides{ get{ return 15; } } + + public GiantSerpent(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( BaseSoundID == -1 ) + BaseSoundID = 219; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/IceSerpent.cs b/Scripts/Mobiles/Reptilians/Serpents/IceSerpent.cs new file mode 100644 index 0000000..b863a95 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/IceSerpent.cs @@ -0,0 +1,86 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "an ice serpent corpse" )] + [TypeAlias( "Server.Mobiles.Iceserpant" )] + public class IceSerpent : BaseCreature + { + [Constructable] + public IceSerpent() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ice serpent"; + Body = 21; + Hue = 1080; + BaseSoundID = 219; + + SetStr( 216, 245 ); + SetDex( 26, 50 ); + SetInt( 66, 85 ); + + SetHits( 130, 147 ); + SetMana( 0 ); + + SetDamage( 7, 17 ); + + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 75.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 32; + + PackItem( Loot.RandomArmorOrShieldOrWeapon() ); + + switch ( Utility.Random( 10 )) + { + case 0: PackItem( new LeftArm() ); break; + case 1: PackItem( new RightArm() ); break; + case 2: PackItem( new Torso() ); break; + case 3: PackItem( new Bone() ); break; + case 4: PackItem( new RibCage() ); break; + case 5: PackItem( new RibCage() ); break; + case 6: PackItem( new BonePile() ); break; + case 7: PackItem( new BonePile() ); break; + case 8: PackItem( new BonePile() ); break; + case 9: PackItem( new BonePile() ); break; + } + + if ( 0.025 > Utility.RandomDouble() ) + PackItem( new GlacialStaff() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 4; } } + public override int Hides{ get{ return 15; } } + + public IceSerpent(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( BaseSoundID == -1 ) + BaseSoundID = 219; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/Kobra.cs b/Scripts/Mobiles/Reptilians/Serpents/Kobra.cs new file mode 100644 index 0000000..b43d01c --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/Kobra.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a serpentine corpse" )] + public class Kobra : BaseCreature + { + [Constructable] + public Kobra() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a kobra"; + Body = 149; + BaseSoundID = 634; + + SetStr( 150, 320 ); + SetDex( 94, 190 ); + SetInt( 64, 160 ); + + SetHits( 128, 155 ); + SetMana( 0 ); + + SetDamage( 5, 11 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.HandToHand, 60.1, 85.0 ); + SetSkill( SkillName.Tactics, 75.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 36; + + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 5; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override Poison HitPoison{ get{ return Poison.Regular; } } + + public Kobra( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/LavaSerpent.cs b/Scripts/Mobiles/Reptilians/Serpents/LavaSerpent.cs new file mode 100644 index 0000000..24f9262 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/LavaSerpent.cs @@ -0,0 +1,73 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a lava serpent corpse" )] + [TypeAlias( "Server.Mobiles.Lavaserpant" )] + public class LavaSerpent : BaseCreature + { + [Constructable] + public LavaSerpent() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a lava serpent"; + Body = 21; + Hue = 1188; + BaseSoundID = 219; + + SetStr( 386, 415 ); + SetDex( 56, 80 ); + SetInt( 66, 85 ); + + SetHits( 232, 249 ); + SetMana( 0 ); + + SetDamage( 10, 22 ); + + SetSkill( SkillName.MagicResist, 25.3, 70.0 ); + SetSkill( SkillName.Tactics, 65.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 40; + + PackItem( new SulfurousAsh( 3 ) ); + PackItem( new Bone() ); + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int Meat{ get{ return 4; } } + public override int Hides{ get{ return 15; } } + + public LavaSerpent(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( BaseSoundID == -1 ) + BaseSoundID = 219; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/Medusa.cs b/Scripts/Mobiles/Reptilians/Serpents/Medusa.cs new file mode 100644 index 0000000..0cd64f8 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/Medusa.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections; +using Server; +using Server.Items; +using Server.Network; + +namespace Server.Mobiles +{ + [CorpseName( "a medusan corpse" )] + public class Medusa : BaseCreature + { + [Constructable] + public Medusa() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a medusa"; + BaseSoundID = 0x284; + Body = 106; + AnimationMod = 3; + + SetStr( 388, 520 ); + SetDex( 121, 170 ); + SetInt( 398, 557 ); + + SetHits( 212, 253 ); + + SetDamage( 10, 20 ); + + SetSkill( SkillName.MagicResist, 70.1, 80.0 ); + SetSkill( SkillName.Poisoning, 80.1, 90.0 ); + SetSkill( SkillName.Tactics, 80.1, 90.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 14000; + Karma = -14000; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.Gems ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 5; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + public override bool CanRummageCorpses{ get{ return true; } } + + public void TurnStone() + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 2 ) ) + { + if ( m == this || !CanBeHarmful( m ) ) + continue; + + if ( m is BaseCreature && (((BaseCreature)m).Controlled || ((BaseCreature)m).Summoned || ((BaseCreature)m).Team != this.Team) ) + list.Add( m ); + else if ( m.Player ) + list.Add( m ); + } + + foreach ( Mobile m in list ) + { + DoHarmful( m ); + + m.PlaySound(0x204); + m.FixedEffect(0x376A, 6, 1); + + int duration = Utility.RandomMinMax(4, 8); + m.Paralyze(TimeSpan.FromSeconds(duration)); + + m.SendMessage( "You are frozen like stone!" ); + } + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + + if ( 0.1 >= Utility.RandomDouble() ) + TurnStone(); + } + + public Medusa( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/Naga.cs b/Scripts/Mobiles/Reptilians/Serpents/Naga.cs new file mode 100644 index 0000000..abd6782 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/Naga.cs @@ -0,0 +1,75 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a naga corpse" )] + public class Naga : BaseCreature + { + [Constructable] + public Naga() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a naga"; + Body = 175; + BaseSoundID = 634; + CanSwim = true; + + if ( Utility.RandomBool() ) + { + Body = 330; + BaseSoundID = 644; + } + + SetStr( 416, 505 ); + SetDex( 96, 115 ); + SetInt( 366, 455 ); + + SetHits( 250, 303 ); + + SetDamage( 11, 13 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.Meditation, 5.4, 25.0 ); + SetSkill( SkillName.MagicResist, 90.1, 100.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 16000; + Karma = -16000; + + VirtualArmor = 50; + + PackItem( new PoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 5; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Deadly; } } + + public Naga( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/NagaQueen.cs b/Scripts/Mobiles/Reptilians/Serpents/NagaQueen.cs new file mode 100644 index 0000000..e009a98 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/NagaQueen.cs @@ -0,0 +1,70 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a NagaQueen corpse" )] + public class NagaQueen : BaseCreature + { + [Constructable] + public NagaQueen() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a naga queen"; + Body = 302; + BaseSoundID = 644; + CanSwim = true; + + SetStr( 216, 305 ); + SetDex( 96, 115 ); + SetInt( 966, 1045 ); + + SetHits( 560, 595 ); + + SetDamage( 15, 27 ); + + SetSkill( SkillName.Concentration, 120.1, 130.0 ); + SetSkill( SkillName.Magery, 120.1, 130.0 ); + SetSkill( SkillName.Meditation, 100.1, 101.0 ); + SetSkill( SkillName.Poisoning, 100.1, 101.0 ); + SetSkill( SkillName.MagicResist, 175.2, 200.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 75.1, 100.0 ); + + Fame = 23000; + Karma = -23000; + + VirtualArmor = 60; + + PackItem( new GreaterPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.HighScrolls, 2 ); + } + + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 8; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + + public NagaQueen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/NagaWarrior.cs b/Scripts/Mobiles/Reptilians/Serpents/NagaWarrior.cs new file mode 100644 index 0000000..fbd262d --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/NagaWarrior.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a naga corpse" )] + public class NagaWarrior : BaseCreature + { + [Constructable] + public NagaWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a naga warrior"; + Body = 174; + BaseSoundID = 634; + CanSwim = true; + + SetStr( 417, 595 ); + SetDex( 166, 175 ); + SetInt( 46, 70 ); + + SetHits( 266, 342 ); + SetMana( 0 ); + + SetDamage( 16, 19 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 10000; + Karma = -10000; + + VirtualArmor = 40; + + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + } + + public override int Meat{ get{ return 2; } } + public override int Hides{ get{ return 7; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public NagaWarrior( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/OphidianArchmage.cs b/Scripts/Mobiles/Reptilians/Serpents/OphidianArchmage.cs new file mode 100644 index 0000000..b10b418 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/OphidianArchmage.cs @@ -0,0 +1,72 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an ophidian corpse" )] + [TypeAlias( "Server.Mobiles.OphidianJusticar", "Server.Mobiles.OphidianZealot" )] + public class OphidianArchmage : BaseCreature + { + private static string[] m_Names = new string[] + { + "an ophidian justicar", + "an ophidian zealot" + }; + + [Constructable] + public OphidianArchmage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = m_Names[Utility.Random( m_Names.Length )]; + Body = 85; + BaseSoundID = 639; + + SetStr( 281, 305 ); + SetDex( 191, 215 ); + SetInt( 226, 250 ); + + SetHits( 169, 183 ); + SetStam( 36, 45 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 95.1, 100.0 ); + SetSkill( SkillName.Magery, 95.1, 100.0 ); + SetSkill( SkillName.MagicResist, 75.0, 97.5 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 20.2, 60.0 ); + + Fame = 11500; + Karma = -11500; + + VirtualArmor = 44; + + PackReg( 5, 15 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.MedScrolls, 2 ); + AddLoot( LootPack.MedPotions ); + } + + public override int Meat{ get{ return 1; } } + + public OphidianArchmage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/OphidianKnight.cs b/Scripts/Mobiles/Reptilians/Serpents/OphidianKnight.cs new file mode 100644 index 0000000..b72ee46 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/OphidianKnight.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an ophidian corpse" )] + [TypeAlias( "Server.Mobiles.OphidianAvenger" )] + public class OphidianKnight : BaseCreature + { + private static string[] m_Names = new string[] + { + "an ophidian knight-errant", + "an ophidian avenger" + }; + + [Constructable] + public OphidianKnight() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = m_Names[Utility.Random( m_Names.Length )]; + Body = 86; + BaseSoundID = 634; + + SetStr( 417, 595 ); + SetDex( 166, 175 ); + SetInt( 46, 70 ); + + SetHits( 266, 342 ); + SetMana( 0 ); + + SetDamage( 16, 19 ); + + SetSkill( SkillName.Poisoning, 60.1, 80.0 ); + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 10000; + Karma = -10000; + + VirtualArmor = 40; + + PackItem( new LesserPoisonPotion() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + } + + public override int Meat{ get{ return 2; } } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + + public OphidianKnight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/OphidianMage.cs b/Scripts/Mobiles/Reptilians/Serpents/OphidianMage.cs new file mode 100644 index 0000000..e7ce2fa --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/OphidianMage.cs @@ -0,0 +1,72 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an ophidian corpse" )] + [TypeAlias( "Server.Mobiles.OphidianShaman" )] + public class OphidianMage : BaseCreature + { + private static string[] m_Names = new string[] + { + "an ophidian apprentice mage", + "an ophidian shaman" + }; + + [Constructable] + public OphidianMage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = m_Names[Utility.Random( m_Names.Length )]; + Body = 85; + BaseSoundID = 639; + + SetStr( 181, 205 ); + SetDex( 191, 215 ); + SetInt( 96, 120 ); + + SetHits( 109, 123 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 75.0, 97.5 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 20.2, 60.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 30; + + PackReg( 10 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.LowPotions ); + } + + public override int Meat{ get{ return 1; } } + + public OphidianMage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/OphidianMatriarch.cs b/Scripts/Mobiles/Reptilians/Serpents/OphidianMatriarch.cs new file mode 100644 index 0000000..ea0686a --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/OphidianMatriarch.cs @@ -0,0 +1,64 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an ophidian corpse" )] + public class OphidianMatriarch : BaseCreature + { + [Constructable] + public OphidianMatriarch() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an ophidian matriarch"; + Body = 87; + BaseSoundID = 644; + + SetStr( 416, 505 ); + SetDex( 96, 115 ); + SetInt( 366, 455 ); + + SetHits( 250, 303 ); + + SetDamage( 11, 13 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.Meditation, 5.4, 25.0 ); + SetSkill( SkillName.MagicResist, 90.1, 100.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 16000; + Karma = -16000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + AddLoot( LootPack.HighPotions ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + + public OphidianMatriarch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/OphidianWarrior.cs b/Scripts/Mobiles/Reptilians/Serpents/OphidianWarrior.cs new file mode 100644 index 0000000..d6f06cf --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/OphidianWarrior.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "an ophidian corpse" )] + public class OphidianWarrior : BaseCreature + { + private static string[] m_Names = new string[] + { + "an ophidian warrior", + "an ophidian enforcer" + }; + + [Constructable] + public OphidianWarrior() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = m_Names[Utility.Random( m_Names.Length )]; + Body = 86; + BaseSoundID = 634; + + SetStr( 150, 320 ); + SetDex( 94, 190 ); + SetInt( 64, 160 ); + + SetHits( 128, 155 ); + SetMana( 0 ); + + SetDamage( 5, 11 ); + + SetSkill( SkillName.MagicResist, 70.1, 85.0 ); + SetSkill( SkillName.Swords, 60.1, 85.0 ); + SetSkill( SkillName.Tactics, 75.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 36; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems ); + } + + public override int Meat{ get{ return 1; } } + + public OphidianWarrior( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/SilverSerpent.cs b/Scripts/Mobiles/Reptilians/Serpents/SilverSerpent.cs new file mode 100644 index 0000000..ae01770 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/SilverSerpent.cs @@ -0,0 +1,68 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName("a silver serpent corpse")] + [TypeAlias( "Server.Mobiles.Silverserpant" )] + public class SilverSerpent : BaseCreature + { + [Constructable] + public SilverSerpent() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Body = 21; + Hue = Utility.RandomList( 2403, 2404 ); + Name = "a silver serpent"; + BaseSoundID = 219; + + SetStr( 161, 360 ); + SetDex( 151, 300 ); + SetInt( 21, 40 ); + + SetHits( 97, 216 ); + + SetDamage( 5, 21 ); + + SetSkill( SkillName.Poisoning, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 95.1, 100.0 ); + SetSkill( SkillName.Tactics, 80.1, 95.0 ); + SetSkill( SkillName.HandToHand, 85.1, 100.0 ); + + Fame = 7000; + Karma = -7000; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Gems, 2 ); + } + + public override int Meat{ get{ return 1; } } + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Deadly : Poison.Lethal); } } + + public SilverSerpent(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( BaseSoundID == -1 ) + BaseSoundID = 219; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/Snake.cs b/Scripts/Mobiles/Reptilians/Serpents/Snake.cs new file mode 100644 index 0000000..ecc3c59 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/Snake.cs @@ -0,0 +1,59 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a snake corpse" )] + public class Snake : BaseCreature + { + [Constructable] + public Snake() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a snake"; + Body = 52; + Hue = Utility.RandomSnakeHue(); + BaseSoundID = 0xDB; + + SetStr( 22, 34 ); + SetDex( 16, 25 ); + SetInt( 6, 10 ); + + SetHits( 15, 19 ); + SetMana( 0 ); + + SetDamage( 1, 4 ); + + SetSkill( SkillName.Poisoning, 50.1, 70.0 ); + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 19.3, 34.0 ); + SetSkill( SkillName.HandToHand, 19.3, 34.0 ); + + Fame = 300; + Karma = -300; + + VirtualArmor = 16; + } + + public override Poison PoisonImmune{ get{ return Poison.Lesser; } } + public override Poison HitPoison{ get{ return Poison.Lesser; } } + public override int Meat{ get{ return 1; } } + + public Snake(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Serpents/Viper.cs b/Scripts/Mobiles/Reptilians/Serpents/Viper.cs new file mode 100644 index 0000000..41f9fbd --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Serpents/Viper.cs @@ -0,0 +1,73 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a giant serpent corpse" )] + [TypeAlias( "Server.Mobiles.Serpant" )] + public class Viper : BaseCreature + { + [Constructable] + public Viper() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a viper"; + Body = 21; + Hue = Utility.RandomGreenHue(); + BaseSoundID = 219; + + SetStr( 186, 215 ); + SetDex( 56, 80 ); + SetInt( 66, 85 ); + + SetHits( 112, 129 ); + SetMana( 0 ); + + SetDamage( 7, 17 ); + + SetSkill( SkillName.Poisoning, 70.1, 100.0 ); + SetSkill( SkillName.MagicResist, 25.1, 40.0 ); + SetSkill( SkillName.Tactics, 65.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 32; + + PackItem( new Bone() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly); } } + + public override int Meat{ get{ return 4; } } + public override int Hides{ get{ return 15; } } + + public Viper(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + + int version = reader.ReadInt(); + + if ( BaseSoundID == -1 ) + BaseSoundID = 219; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Silisk.cs b/Scripts/Mobiles/Reptilians/Silisk.cs new file mode 100644 index 0000000..0c2f5a4 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Silisk.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a reptilian corpse" )] + public class Silisk : BaseCreature + { + public override InhumanSpeech SpeechType{ get{ return InhumanSpeech.Lizardman; } } + + [Constructable] + public Silisk () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "lizardman" ); + HiddenTitle = "the silisk"; + Body = 116; + BaseSoundID = 417; + CanSwim = true; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.Poisoning, 45.1, 60.0 ); + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 3; } } + public override int Hides{ get{ return 15; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Lesser : Poison.Regular); } } + + public Silisk( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Torax.cs b/Scripts/Mobiles/Reptilians/Torax.cs new file mode 100644 index 0000000..36111f2 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Torax.cs @@ -0,0 +1,59 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a lizard corpse" )] + public class Torax : BaseCreature + { + [Constructable] + public Torax() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a torax"; + Body = 127; + BaseSoundID = 0x5A; + + SetStr( 176, 200 ); + SetDex( 156, 175 ); + SetInt( 11, 20 ); + + SetHits( 126, 160 ); + SetMana( 0 ); + + SetDamage( 10, 24 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 70.1, 90.0 ); + SetSkill( SkillName.HandToHand, 70.1, 90.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Hides{ get{ return 12; } } + + public Torax(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Reptilians/Turtle.cs b/Scripts/Mobiles/Reptilians/Turtle.cs new file mode 100644 index 0000000..102ec66 --- /dev/null +++ b/Scripts/Mobiles/Reptilians/Turtle.cs @@ -0,0 +1,55 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a turtle corpse" )] + public class Turtle : BaseCreature + { + [Constructable] + public Turtle() : base( AIType.AI_Animal, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant turtle"; + Body = 281; + BaseSoundID = 0x39D; + CanSwim = true; + + SetStr( 76, 100 ); + SetDex( 6, 25 ); + SetInt( 11, 20 ); + + SetHits( 46, 60 ); + SetStam( 46, 65 ); + SetMana( 0 ); + + SetDamage( 5, 15 ); + + SetSkill( SkillName.Tactics, 40.1, 60.0 ); + SetSkill( SkillName.HandToHand, 40.1, 60.0 ); + + Fame = 700; + Karma = 0; + + VirtualArmor = 50; + } + + public override int Meat{ get{ return 1; } } + public override int Hides{ get{ return 6; } } + + public Turtle(Serial serial) : base(serial) + { + } + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write((int) 0); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/Dagon.cs b/Scripts/Mobiles/Sea/Dagon.cs new file mode 100644 index 0000000..e09c44c --- /dev/null +++ b/Scripts/Mobiles/Sea/Dagon.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Items; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a dagon corpse" )] + public class Dagon : BaseCreature + { + [Constructable] + public Dagon() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "cthulhu" ); + HiddenTitle = "the dagon"; + Body = 162; + BaseSoundID = 353; + + SetStr( 736, 785 ); + SetDex( 226, 245 ); + SetInt( 481, 505 ); + + SetHits( 422, 451 ); + + SetDamage( 19, 26 ); + + SetSkill( SkillName.Concentration, 85.1, 100.0 ); + SetSkill( SkillName.Magery, 85.1, 100.0 ); + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 60.1, 80.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 15500; + Karma = -15500; + + VirtualArmor = 50; + + CanSwim = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool BleedImmune{ get{ return true; } } + public override int Hides{ get{ return 18; } } + public override int Meat{ get{ return 20; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public Dagon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/DeepSeaSerpent.cs b/Scripts/Mobiles/Sea/DeepSeaSerpent.cs new file mode 100644 index 0000000..103a464 --- /dev/null +++ b/Scripts/Mobiles/Sea/DeepSeaSerpent.cs @@ -0,0 +1,70 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a deep sea serpents corpse" )] + public class DeepSeaSerpent : BaseCreature + { + [Constructable] + public DeepSeaSerpent() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a deep sea serpent"; + Body = 150; + BaseSoundID = 447; + + Hue = Utility.Random( 0x8A0, 5 ); + + SetStr( 251, 425 ); + SetDex( 87, 135 ); + SetInt( 87, 155 ); + + SetHits( 151, 255 ); + + SetDamage( 6, 14 ); + + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 70.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 60; + CanSwim = true; + CantWalk = true; + + if ( Utility.RandomBool() ) + PackItem( new SulfurousAsh( 4 ) ); + else + PackItem( new BlackPearl( 4 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool HasBreath{ get{ return true; } } + public override int Meat{ get{ return 5; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 10; } } + + public DeepSeaSerpent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/Dolphin.cs b/Scripts/Mobiles/Sea/Dolphin.cs new file mode 100644 index 0000000..cc5e83b --- /dev/null +++ b/Scripts/Mobiles/Sea/Dolphin.cs @@ -0,0 +1,78 @@ +using System; +using Server.Mobiles; + +namespace Server.Mobiles +{ + [CorpseName( "a dolphin corpse" )] + public class Dolphin : BaseCreature + { + [Constructable] + public Dolphin(): base( AIType.AI_Animal, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a dolphin"; + Body = 151; + BaseSoundID = 0x8A; + + SetStr( 21, 49 ); + SetDex( 66, 85 ); + SetInt( 96, 110 ); + + SetHits( 15, 27 ); + + SetDamage( 3, 6 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 19.2, 29.0 ); + SetSkill( SkillName.HandToHand, 19.2, 29.0 ); + + Fame = 500; + Karma = 0; + + VirtualArmor = 16; + CanSwim = true; + CantWalk = true; + } + + public override int Meat { get { return 1; } } + + public Dolphin( Serial serial ): base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if( from.AccessLevel >= AccessLevel.GameMaster ) + Jump(); + } + + public virtual void Jump() + { + if( Utility.RandomBool() ) + Animate( 3, 16, 1, true, false, 0 ); + else + Animate( 4, 20, 1, true, false, 0 ); + } + + public override void OnThink() + { + if( Utility.RandomDouble() < .005 ) // slim chance to jump + Jump(); + + base.OnThink(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/GiantCrab.cs b/Scripts/Mobiles/Sea/GiantCrab.cs new file mode 100644 index 0000000..5323b4e --- /dev/null +++ b/Scripts/Mobiles/Sea/GiantCrab.cs @@ -0,0 +1,61 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a giant crab corpse" )] + public class GiantCrab : BaseCreature + { + [Constructable] + public GiantCrab() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant crab"; + Body = 139; + BaseSoundID = 0x39D; + CanSwim = true; + + SetStr( 90, 120 ); + SetDex( 76, 95 ); + SetInt( 36, 60 ); + + SetMana( 0 ); + + SetDamage( 7, 15 ); + + SetSkill( SkillName.Tactics, 35.1, 50.0 ); + SetSkill( SkillName.HandToHand, 50.1, 65.0 ); + + Fame = 1200; + Karma = -1200; + + VirtualArmor = 24; + } + + public override bool BleedImmune{ get{ return true; } } + public override int Meat{ get{ return 3; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public GiantCrab( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/GiantEel.cs b/Scripts/Mobiles/Sea/GiantEel.cs new file mode 100644 index 0000000..4fa8115 --- /dev/null +++ b/Scripts/Mobiles/Sea/GiantEel.cs @@ -0,0 +1,106 @@ +using System; +using Server; +using Server.Items; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "an eel corpse" )] + public class GiantEel : BaseCreature + { + [Constructable] + public GiantEel() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant eel"; + Body = 150; + BaseSoundID = 0xDB; + Hue = 481; + + SetStr( 168, 225 ); + SetDex( 58, 85 ); + SetInt( 53, 95 ); + + SetHits( 110, 127 ); + + SetDamage( 7, 13 ); + + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 70.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 30; + CanSwim = true; + CantWalk = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override int Meat{ get{ return 5; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 10; } } + public override bool BleedImmune{ get{ return true; } } + + public void EelShock() + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 2 ) ) + { + if ( m == this || !CanBeHarmful( m ) ) + continue; + + if ( m is BaseCreature && (((BaseCreature)m).Controlled || ((BaseCreature)m).Summoned || ((BaseCreature)m).Team != this.Team) ) + list.Add( m ); + else if ( m.Player ) + list.Add( m ); + } + + foreach ( Mobile m in list ) + { + DoHarmful( m ); + m.BoltEffect( 0 ); + int itHurts = (int)( Utility.RandomMinMax(10,20) ); + m.Damage( itHurts, m ); + m.SendMessage( "You are struck with the eel's electricity!" ); + } + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + + if ( 0.2 >= Utility.RandomDouble() ) + EelShock(); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + + if ( 0.2 >= Utility.RandomDouble() ) + EelShock(); + } + + public GiantEel( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/GiantSquid.cs b/Scripts/Mobiles/Sea/GiantSquid.cs new file mode 100644 index 0000000..a9aa254 --- /dev/null +++ b/Scripts/Mobiles/Sea/GiantSquid.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a squid corpse" )] + public class GiantSquid : BaseCreature + { + [Constructable] + public GiantSquid() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a giant squid"; + Body = 144; + BaseSoundID = 353; + Hue = 1084; + + SetStr( 556, 580 ); + SetDex( 126, 145 ); + SetInt( 26, 40 ); + + SetHits( 354, 368 ); + SetMana( 0 ); + + SetDamage( 10, 20 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 60.0 ); + + Fame = 9000; + Karma = -9000; + + VirtualArmor = 30; + + CanSwim = true; + CantWalk = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override bool BleedImmune{ get{ return true; } } + public override int Hides{ get{ return 10; } } + public override int Meat{ get{ return 28; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public GiantSquid( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Sea/GreatWhite.cs b/Scripts/Mobiles/Sea/GreatWhite.cs new file mode 100644 index 0000000..eac1633 --- /dev/null +++ b/Scripts/Mobiles/Sea/GreatWhite.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a shark corpse" )] + public class GreatWhite : BaseCreature + { + [Constructable] + public GreatWhite() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a great white shark"; + Body = 271; + BaseSoundID = 0x294; + AnimationMod = 2; + + SetStr( 251, 425 ); + SetDex( 87, 135 ); + SetInt( 87, 155 ); + + SetHits( 251, 355 ); + + SetDamage( 6, 14 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 70.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 59; + + CanSwim = true; + CantWalk = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override int Meat{ get{ return 10; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 10; } } + public override bool BleedImmune{ get{ return true; } } + + public GreatWhite( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/Kraken.cs b/Scripts/Mobiles/Sea/Kraken.cs new file mode 100644 index 0000000..59854ae --- /dev/null +++ b/Scripts/Mobiles/Sea/Kraken.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a krakens corpse" )] + public class Kraken : BaseCreature + { + [Constructable] + public Kraken() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a kraken"; + Body = 144; + BaseSoundID = 353; + + SetStr( 756, 780 ); + SetDex( 226, 245 ); + SetInt( 26, 40 ); + + SetHits( 454, 468 ); + SetMana( 0 ); + + SetDamage( 19, 33 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 60.0 ); + + Fame = 11000; + Karma = -11000; + + VirtualArmor = 50; + + CanSwim = true; + CantWalk = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override int Meat{ get{ return 28; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public Kraken( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Sea/Krakoa.cs b/Scripts/Mobiles/Sea/Krakoa.cs new file mode 100644 index 0000000..ac7c221 --- /dev/null +++ b/Scripts/Mobiles/Sea/Krakoa.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a krakoan corpse" )] + public class Krakoa : BaseCreature + { + [Constructable] + public Krakoa() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a krakoa"; + Body = 163; + BaseSoundID = 353; + + SetStr( 536, 585 ); + SetDex( 126, 145 ); + SetInt( 281, 305 ); + + SetHits( 322, 351 ); + + SetDamage( 13, 16 ); + + SetSkill( SkillName.MagicResist, 80.2, 110.0 ); + SetSkill( SkillName.Tactics, 80.2, 110.0 ); + SetSkill( SkillName.HandToHand, 80.2, 110.0 ); + + Fame = 11500; + Karma = -11500; + + VirtualArmor = 40; + + CanSwim = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Average ); + } + + public override bool BleedImmune{ get{ return true; } } + public override int Hides{ get{ return 18; } } + public override int Meat{ get{ return 20; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public Krakoa( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/Ktulu.cs b/Scripts/Mobiles/Sea/Ktulu.cs new file mode 100644 index 0000000..499af99 --- /dev/null +++ b/Scripts/Mobiles/Sea/Ktulu.cs @@ -0,0 +1,71 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a ktulu corpse" )] + public class Ktulu : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public Ktulu() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "ktulu" ); + HiddenTitle = "the ktulu"; + Body = 136; + BaseSoundID = 0x2F5; + CanSwim = true; + + SetStr( 476, 505 ); + SetDex( 76, 95 ); + SetInt( 301, 325 ); + + SetHits( 286, 303 ); + + SetDamage( 7, 14 ); + + SetSkill( SkillName.Concentration, 70.1, 80.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.MagicResist, 85.1, 95.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 58; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + AddLoot( LootPack.Gems, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override int Meat{ get{ return 5; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public Ktulu( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Sea/Leviathan.cs b/Scripts/Mobiles/Sea/Leviathan.cs new file mode 100644 index 0000000..8091bd6 --- /dev/null +++ b/Scripts/Mobiles/Sea/Leviathan.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a leviathan corpse" )] + public class Leviathan : BaseCreature + { + [Constructable] + public Leviathan() : this( null ) + { + } + + [Constructable] + public Leviathan( Mobile fisher ) : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a leviathan"; + Body = 144; + BaseSoundID = 353; + Hue = 1189; + + SetStr( 1000 ); + SetDex( 501, 520 ); + SetInt( 501, 515 ); + + SetHits( 1500 ); + + SetDamage( 25, 33 ); + + SetSkill( SkillName.Concentration, 97.6, 107.5 ); + SetSkill( SkillName.Magery, 97.6, 107.5 ); + SetSkill( SkillName.MagicResist, 97.6, 107.5 ); + SetSkill( SkillName.Meditation, 97.6, 107.5 ); + SetSkill( SkillName.Tactics, 97.6, 107.5 ); + SetSkill( SkillName.HandToHand, 97.6, 107.5 ); + + Fame = 24000; + Karma = -24000; + + VirtualArmor = 50; + + CanSwim = true; + CantWalk = true; + } + + public override bool HasBreath{ get{ return true; } } + public override int BreathPhysicalDamage{ get{ return 70; } } // TODO: Verify damage type + public override int BreathColdDamage{ get{ return 30; } } + public override int BreathFireDamage{ get{ return 0; } } + public override int BreathEffectHue{ get{ return 0x1ED; } } + public override double BreathDamageScalar{ get{ return 0.05; } } + public override double BreathMinDelay{ get{ return 5.0; } } + public override double BreathMaxDelay{ get{ return 7.5; } } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 5 ); + } + + public override double TreasureMapChance{ get{ return 0.25; } } + public override int Meat{ get{ return 28; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public Leviathan( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/Lobstran.cs b/Scripts/Mobiles/Sea/Lobstran.cs new file mode 100644 index 0000000..c709bc6 --- /dev/null +++ b/Scripts/Mobiles/Sea/Lobstran.cs @@ -0,0 +1,65 @@ +using System; +using Server.Items; +using Server.Targeting; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "a giant crab corpse" )] + public class Lobstran : BaseCreature + { + [Constructable] + public Lobstran() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a lobstran"; + Body = 269; + BaseSoundID = 0x39D; + CanSwim = true; + + SetStr( 176, 205 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 106, 123 ); + + SetDamage( 8, 14 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 50.1, 70.0 ); + + Fame = 3500; + Karma = -3500; + + VirtualArmor = 40; + + PackItem( new Fish( ( Utility.Random( 3 )+1) ) ); + } + + public override bool BleedImmune{ get{ return true; } } + public override int Meat{ get{ return 3; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public Lobstran( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + Body = 34; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/Lochasaur.cs b/Scripts/Mobiles/Sea/Lochasaur.cs new file mode 100644 index 0000000..049d5a6 --- /dev/null +++ b/Scripts/Mobiles/Sea/Lochasaur.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a dinosaur corpse" )] + public class Lochasaur : BaseCreature + { + [Constructable] + public Lochasaur() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a lochasaur"; + Body = 270; + BaseSoundID = 0x1BF; + AnimationMod = 2; + + SetStr( 756, 780 ); + SetDex( 226, 245 ); + SetInt( 26, 40 ); + + SetHits( 454, 468 ); + SetMana( 0 ); + + SetDamage( 19, 33 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 85.1, 110.0 ); + SetSkill( SkillName.HandToHand, 85.1, 110.0 ); + + Fame = 11000; + Karma = -11000; + + VirtualArmor = 49; + + CanSwim = true; + CantWalk = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override int Meat{ get{ return 18; } } + public override bool BleedImmune{ get{ return true; } } + public override int Hides{ get{ return 15; } } + + public Lochasaur( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Sea/Lurker.cs b/Scripts/Mobiles/Sea/Lurker.cs new file mode 100644 index 0000000..de7d203 --- /dev/null +++ b/Scripts/Mobiles/Sea/Lurker.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a lurker corpse" )] + public class Lurker : BaseCreature + { + [Constructable] + public Lurker() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a lurker"; + Body = 194; + BaseSoundID = 278; + CanSwim = true; + + SetStr( 156, 180 ); + SetDex( 26, 45 ); + SetInt( 26, 40 ); + + SetHits( 94, 108 ); + SetMana( 0 ); + + SetDamage( 10, 23 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 60.0 ); + + Fame = 2000; + Karma = -2000; + + VirtualArmor = 18; + + AddItem( new LightSource() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + public override int Meat{ get{ return 2; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 2; } } + + public Lurker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Sea/Megalodon.cs b/Scripts/Mobiles/Sea/Megalodon.cs new file mode 100644 index 0000000..3a411ce --- /dev/null +++ b/Scripts/Mobiles/Sea/Megalodon.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a shark corpse" )] + public class Megalodon : BaseCreature + { + [Constructable] + public Megalodon() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a megalodon"; + Body = 272; + BaseSoundID = 0x1BF; + AnimationMod = 2; + + SetStr( 756, 780 ); + SetDex( 226, 245 ); + SetInt( 26, 40 ); + + SetHits( 454, 468 ); + SetMana( 0 ); + + SetDamage( 19, 33 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 85.1, 110.0 ); + SetSkill( SkillName.HandToHand, 85.1, 110.0 ); + + Fame = 11000; + Karma = -11000; + + VirtualArmor = 49; + + CanSwim = true; + CantWalk = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override int Meat{ get{ return 15; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 15; } } + public override bool BleedImmune{ get{ return true; } } + + public Megalodon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Sea/Sahuagin.cs b/Scripts/Mobiles/Sea/Sahuagin.cs new file mode 100644 index 0000000..9b9a190 --- /dev/null +++ b/Scripts/Mobiles/Sea/Sahuagin.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a sahuagin corpse" )] + public class Sahuagin : BaseCreature + { + [Constructable] + public Sahuagin() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a sahuagin"; + Body = 146; + BaseSoundID = 0x5E4; + CanSwim = true; + AnimationMod = 4; + + SetStr( 154, 192 ); + SetDex( 138, 168 ); + SetInt( 58, 96 ); + + SetHits( 93, 115 ); + + SetDamage( 8, 11 ); + + SetSkill( SkillName.MagicResist, 56.2, 96.0 ); + SetSkill( SkillName.Tactics, 88.2, 128.0 ); + SetSkill( SkillName.HandToHand, 80.2, 112.0 ); + + Fame = 2400; + Karma = -2400; + + VirtualArmor = 45; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 3; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public Sahuagin( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/SahuaginMage.cs b/Scripts/Mobiles/Sea/SahuaginMage.cs new file mode 100644 index 0000000..be39f5d --- /dev/null +++ b/Scripts/Mobiles/Sea/SahuaginMage.cs @@ -0,0 +1,68 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a sahuagin corpse" )] + public class SahuaginMage : BaseCreature + { + [Constructable] + public SahuaginMage () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a sahuagin mage"; + Body = 145; + BaseSoundID = 0x5E4; + CanSwim = true; + AnimationMod = 4; + + SetStr( 116, 150 ); + SetDex( 91, 115 ); + SetInt( 161, 185 ); + + SetHits( 70, 90 ); + + SetDamage( 4, 14 ); + + SetSkill( SkillName.Concentration, 60.1, 72.5 ); + SetSkill( SkillName.Magery, 60.1, 72.5 ); + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 50.1, 65.0 ); + SetSkill( SkillName.HandToHand, 40.1, 50.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 30; + + PackReg( 6 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 3; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + + public SahuaginMage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Sea/SeaDevil.cs b/Scripts/Mobiles/Sea/SeaDevil.cs new file mode 100644 index 0000000..81443a5 --- /dev/null +++ b/Scripts/Mobiles/Sea/SeaDevil.cs @@ -0,0 +1,71 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a devilish corpse" )] + public class SeaDevil : BaseCreature + { + public override double DispelDifficulty{ get{ return 125.0; } } + public override double DispelFocus{ get{ return 45.0; } } + + [Constructable] + public SeaDevil () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "daemon" ); + HiddenTitle = "the sea devil"; + Body = 303; + BaseSoundID = 357; + Clan = Clan.Demonic; + CanSwim = true; + + SetStr( 714, 758 ); + SetDex( 114, 143 ); + SetInt( 452, 488 ); + + SetHits( 429, 455 ); + + SetDamage( 11, 21 ); + + SetSkill( SkillName.Concentration, 105.2, 120.0 ); + SetSkill( SkillName.Magery, 105.2, 120.0 ); + SetSkill( SkillName.MagicResist, 127.7, 142.5 ); + SetSkill( SkillName.Tactics, 105.2, 120.0 ); + SetSkill( SkillName.HandToHand, 90.2, 120.0 ); + + Fame = 22500; + Karma = -22500; + + VirtualArmor = 85; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.HighScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + public override int Meat{ get{ return 2; } } + + public SeaDevil( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Sea/SeaHydra.cs b/Scripts/Mobiles/Sea/SeaHydra.cs new file mode 100644 index 0000000..4da8752 --- /dev/null +++ b/Scripts/Mobiles/Sea/SeaHydra.cs @@ -0,0 +1,70 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a SeaHydra corpse" )] + public class SeaHydra : BaseCreature + { + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + + [Constructable] + public SeaHydra () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a hydra"; + Body = 140; + BaseSoundID = 0x488; + CanSwim = true; + + SetStr( 396, 425 ); + SetDex( 86, 105 ); + SetInt( 236, 275 ); + + SetHits( 378, 395 ); + + SetDamage( 12, 18 ); + + SetSkill( SkillName.Concentration, 30.1, 40.0 ); + SetSkill( SkillName.Poisoning, 30.1, 40.0 ); + SetSkill( SkillName.Magery, 30.1, 40.0 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 10000; + Karma = -10000; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Gems, 8 ); + } + + public override Poison PoisonImmune{ get{ return Poison.Deadly; } } + public override Poison HitPoison{ get{ return Poison.Deadly; } } + public override int Meat{ get{ return 10; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 20; } } + + public SeaHydra( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/SeaSerpent.cs b/Scripts/Mobiles/Sea/SeaSerpent.cs new file mode 100644 index 0000000..bd7ecc8 --- /dev/null +++ b/Scripts/Mobiles/Sea/SeaSerpent.cs @@ -0,0 +1,71 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a sea serpents corpse" )] + [TypeAlias( "Server.Mobiles.Seaserpant" )] + public class SeaSerpent : BaseCreature + { + [Constructable] + public SeaSerpent() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a sea serpent"; + Body = 150; + BaseSoundID = 447; + + Hue = Utility.Random( 0x530, 9 ); + + SetStr( 168, 225 ); + SetDex( 58, 85 ); + SetInt( 53, 95 ); + + SetHits( 110, 127 ); + + SetDamage( 7, 13 ); + + SetSkill( SkillName.MagicResist, 60.1, 75.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 70.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 30; + CanSwim = true; + CantWalk = true; + + if ( Utility.RandomBool() ) + PackItem( new SulfurousAsh( 4 ) ); + else + PackItem( new BlackPearl( 4 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool HasBreath{ get{ return true; } } + public override int Meat{ get{ return 5; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 10; } } + + public SeaSerpent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/Seahorse.cs b/Scripts/Mobiles/Sea/Seahorse.cs new file mode 100644 index 0000000..ebb2ea6 --- /dev/null +++ b/Scripts/Mobiles/Sea/Seahorse.cs @@ -0,0 +1,70 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a seahorse corpse" )] + public class Seahorse : BaseCreature + { + public override TimeSpan ReacquireDelay { get { return TimeSpan.FromSeconds( 1.0 ); } } + + [Constructable] + public Seahorse() : base( AIType.AI_Mage, FightMode.Aggressor, 10, 1, 0.2, 0.4 ) + { + Name = "a seahorse"; + Body = 335; + Hue = Utility.RandomList( 0x49A, 0x49B ); + CanSwim = true; + CantWalk = true; + BaseSoundID = 0x39D; + + SetStr( 296, 325 ); + SetDex( 296, 325 ); + SetInt( 296, 325 ); + + SetHits( 218, 235 ); + + SetDamage( 17, 25 ); + + SetSkill( SkillName.Concentration, 80.0 ); + SetSkill( SkillName.Magery, 80.0 ); + SetSkill( SkillName.MagicResist, 80.0 ); + SetSkill( SkillName.Tactics, 80.0 ); + SetSkill( SkillName.HandToHand, 80.0 ); + + Fame = 8000; + Karma = 8000; + + VirtualArmor = 50; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Average ); + } + + public override int Meat{ get{ return 10; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override int Hides{ get{ return 10; } } + public override bool BleedImmune{ get{ return true; } } + + public Seahorse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Sea/Shark.cs b/Scripts/Mobiles/Sea/Shark.cs new file mode 100644 index 0000000..7d00558 --- /dev/null +++ b/Scripts/Mobiles/Sea/Shark.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; +using Server.Misc; + +namespace Server.Mobiles +{ + [CorpseName( "a shark corpse" )] + public class Shark : BaseCreature + { + [Constructable] + public Shark() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a shark"; + Body = 273; + BaseSoundID = 0x294; + AnimationMod = 2; + + SetStr( 168, 225 ); + SetDex( 58, 85 ); + SetInt( 53, 95 ); + + SetHits( 210, 227 ); + + SetDamage( 7, 13 ); + + SetSkill( SkillName.MagicResist, 15.1, 20.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 60.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 29; + CanSwim = true; + CantWalk = true; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override int Meat{ get{ return 8; } } + public override MeatType MeatType{ get{ return MeatType.Fish; } } + public override bool BleedImmune{ get{ return true; } } + public override int Hides{ get{ return 8; } } + + public Shark( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Summoned/BladeSpirits.cs b/Scripts/Mobiles/Summoned/BladeSpirits.cs new file mode 100644 index 0000000..8eb1f5e --- /dev/null +++ b/Scripts/Mobiles/Summoned/BladeSpirits.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a blade spirit corpse" )] + public class BladeSpirits : BaseCreature + { + public override bool DeleteCorpseOnDeath { get { return true; } } + public override bool IsHouseSummonable { get { return true; } } + + public override double DispelDifficulty { get { return 0.0; } } + public override double DispelFocus { get { return 20.0; } } + + public override double GetFightModeRanking( Mobile m, FightMode acqType, bool bPlayerOnly ) + { + return ( m.Str + m.Skills[SkillName.Tactics].Value ) / Math.Max( GetDistanceToSqrt( m ), 1.0 ); + } + + [Constructable] + public BladeSpirits(): base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.3, 0.6 ) + { + Name = "a blade spirit"; + Body = 574; + + SetStr( 150 ); + SetDex( 150 ); + SetInt( 100 ); + + SetHits( 80 ); + SetStam( 250 ); + SetMana( 0 ); + + SetDamage( 10, 14 ); + + SetSkill( SkillName.MagicResist, 70.0 ); + SetSkill( SkillName.Tactics, 90.0 ); + SetSkill( SkillName.HandToHand, 90.0 ); + + Fame = 0; + Karma = 0; + + VirtualArmor = 40; + ControlSlots = 1; + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune { get { return Poison.Lethal; } } + + public override int GetAngerSound() + { + return 0x23A; + } + + public override int GetAttackSound() + { + return 0x3B8; + } + + public override int GetHurtSound() + { + return 0x23A; + } + + public override void OnThink() + { + base.OnThink(); + } + + public BladeSpirits( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Summoned/EnergyVortex.cs b/Scripts/Mobiles/Summoned/EnergyVortex.cs new file mode 100644 index 0000000..e05f60b --- /dev/null +++ b/Scripts/Mobiles/Summoned/EnergyVortex.cs @@ -0,0 +1,90 @@ +using System; +using Server; +using Server.Items; +using System.Collections; + +namespace Server.Mobiles +{ + [CorpseName( "an energy vortex corpse" )] + public class EnergyVortex : BaseCreature + { + public override bool DeleteCorpseOnDeath { get { return Summoned; } } + + public override double DispelDifficulty { get { return 80.0; } } + public override double DispelFocus { get { return 20.0; } } + + public override double GetFightModeRanking( Mobile m, FightMode acqType, bool bPlayerOnly ) + { + return ( m.Int + m.Skills[SkillName.Magery].Value ) / Math.Max( GetDistanceToSqrt( m ), 1.0 ); + } + + [Constructable] + public EnergyVortex() + : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "an energy vortex"; + Body = 13; + Hue = 20; + + SetStr( 200 ); + SetDex( 200 ); + SetInt( 100 ); + + SetHits( 70 ); + SetStam( 250 ); + SetMana( 0 ); + + SetDamage( 14, 17 ); + + SetSkill( SkillName.MagicResist, 99.9 ); + SetSkill( SkillName.Tactics, 100.0 ); + SetSkill( SkillName.HandToHand, 120.0 ); + + Fame = 0; + Karma = 0; + + VirtualArmor = 40; + ControlSlots = 1; + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune { get { return Poison.Lethal; } } + + public override int GetAngerSound() + { + return 0x15; + } + + public override int GetAttackSound() + { + return 0x28; + } + + public override void OnThink() + { + base.OnThink(); + } + + public EnergyVortex( Serial serial ) + : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( BaseSoundID == 263 ) + BaseSoundID = 0; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Actions.cs b/Scripts/Mobiles/Towns/Actions.cs new file mode 100644 index 0000000..85695d8 --- /dev/null +++ b/Scripts/Mobiles/Towns/Actions.cs @@ -0,0 +1,723 @@ +using System; +using Server; +using System.Collections; +using System.Collections.Generic; +using Server.Network; +using Server.Items; +using Server.Mobiles; + +namespace Server.Items +{ + public class Actions : Item + { + private int m_Acts; + + [CommandProperty( AccessLevel.GameMaster )] + public int Acts{ get{ return m_Acts; } set{ m_Acts = value; } } + + [Constructable] + public Actions() : base( 0x8AB ) + { + Movable = false; + } + + public Actions( Serial serial ) : base( serial ) + { + } + + public bool facingNS( Mobile m ) + { + if ( this.X == m.X ) + return true; + + return false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !(from is BaseVendor ) ) + return; + + bool PlayRegular = true; + bool PlayRepetitive = Utility.RandomBool(); + + from.Direction = from.GetDirectionTo( GetWorldLocation() ); + + if ( from is LeatherWorker || from is Tanner ) + { + if ( ItemID == 0x1069 || ItemID == 0x106A || ItemID == 0x107A || ItemID == 0x107B ) + { + if ( ItemID == 0x1069 ){ ItemID = 0x106A; } + else if ( ItemID == 0x106A ){ ItemID = 0x1069; } + else if ( ItemID == 0x107A ){ ItemID = 0x107B; } + else if ( ItemID == 0x107B ){ ItemID = 0x107A; } + Name = "stretched hide"; + from.Animate( 230, 5, 1, true, false, 0 ); + + if ( PlayRepetitive ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else + { + Name = "leather"; + if ( m_Acts == 1 ) + { + ItemID = Utility.RandomList( 0x13C5, 0x13C6, 0x13C7, 0x13CB, 0x13CC, 0x13CD, 0x13CE, 0x13D2, 0x13D3, 0x1DB9, 0x1DBA, 0x13D4, 0x13D5, 0x13D6, 0x13DA, 0x13DB, 0x13DC, 0x13DD, 0x13E1, 0x13E2 ); + from.PlaySound( 0x248 ); + m_Acts = 0; + from.Animate( 230, 5, 1, true, false, 0 ); + } + else + { + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + + ItemID = Utility.RandomList( 0x1067, 0x1068, 0x1081, 0x1082 ); + m_Acts = 1; + from.Animate( 230, 5, 1, true, false, 0 ); + } + } + } + else if ( from is Butcher ) + { + EquipVendor( from, "cleaver" ); + Name = "carcass"; + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) ); + weapon.PlaySwingAnimation( from ); + new Blood().MoveToWorld( Location, Map ); + from.PlaySound( 0x133 ); + } + else if ( from is Gypsy ) + { + Name = "cards"; + from.PlaySound( 0x5FA ); + ItemID++; + if ( ItemID > 6499 ) + ItemID = 6494; + } + else if ( from is Alchemist ) + { + if ( ItemID >= 0x16EA && ItemID <= 0x16F1 ) + { + Name = "cauldron"; + Hue = Utility.RandomSpeechHue(); + from.PlaySound( Utility.RandomList( 0x020, 0x025, 0x04E ) ); + from.Animate( 230, 5, 1, true, false, 0 ); + } + else if ( ItemID == 0x12AD ) + { + Name = "bottle"; + + if ( m_Acts == 1 ) + { + Hue = Utility.RandomSpeechHue(); + from.PlaySound( 0x240 ); + from.Animate( 230, 5, 1, true, false, 0 ); + m_Acts = 0; + } + else + { + from.PlaySound( 0x242 ); + m_Acts = 1; + } + } + } + else if ( from is Bowyer ) + { + EquipVendor( from, "none" ); + if ( m_Acts == 1 ) + { + m_Acts = 0; + switch ( Utility.Random( 4 ) ) + { + case 0: Name = "arrows"; ItemID = Utility.RandomList( 0xF40, 0xF41 ); break; + case 1: Name = "bolts"; ItemID = Utility.RandomList( 0x1BFC, 0x1BFD ); break; + case 2: Name = "crossbow"; ItemID = Utility.RandomList( 0x13FC, 0x13FD, 0xF4F, 0xF50 ); break; + case 3: Name = "bow"; ItemID = Utility.RandomList( 0x13B1, 0x13B2 ); break; + } + from.PlaySound( 0x55 ); + from.Animate( 230, 5, 1, true, false, 0 ); + } + else + { + m_Acts = 1; + Name = "wood"; + ItemID = Utility.RandomList( 0x1BD8, 0x1BD9, 0x1BDB, 0x1BDC ); + from.Animate( 230, 5, 1, true, false, 0 ); + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + } + else if ( from is Fisherman ) + { + if ( ItemID == 0x1797 ) + { + EquipVendor( from, "pole" ); + Name = "water"; + from.Animate( 12, 5, 1, true, false, 0 ); + Effects.SendLocationEffect( this.Location, this.Map, 0x352D, 16, 4 ); + Effects.PlaySound( this.Location, this.Map, 0x364 ); + ((BaseVendor)from).m_NextAction = (DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 10, 20 ) ) ); + } + else if ( ItemID == 0x9CC || ItemID == 0x9CD || ItemID == 0x1E15 || ItemID == 0x1E16 || ItemID == 0x1E17 || ItemID == 0x1E18 || ItemID == 0x97A ) + { + EquipVendor( from, "cleaver" ); + Name = "fish"; + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) ); + + if ( m_Acts == 0 ) + { + m_Acts++; + if ( facingNS( from ) ) + ItemID = 0x9CC; + else + ItemID = 0x9CD; + + from.Animate( 230, 5, 1, true, false, 0 ); + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 1 ) + { + m_Acts++; + if ( facingNS( from ) ) + ItemID = 0x1E15; + else + ItemID = 0x1E16; + + weapon.PlaySwingAnimation( from ); + new Blood().MoveToWorld( Location, Map ); + from.PlaySound( 0x133 ); + } + else if ( m_Acts == 2 ) + { + m_Acts++; + if ( facingNS( from ) ) + ItemID = 0x1E17; + else + ItemID = 0x1E18; + + weapon.PlaySwingAnimation( from ); + new Blood().MoveToWorld( Location, Map ); + from.PlaySound( 0x133 ); + } + else + { + m_Acts = 0; + ItemID = 0x97A; + weapon.PlaySwingAnimation( from ); + from.PlaySound( 0x133 ); + } + } + } + else if ( from is Cook ) + { + if ( ItemID == 0x1305 || ItemID == 0x130B || ItemID == 0x12FF || ItemID == 0x12F3 ) + { + Name = "skillet"; + if ( m_Acts == 1 ) + { + m_Acts = 0; + + if ( ItemID == 0x1305 ) + ItemID = 0x130B; + else + ItemID = 0x12FF; + + from.Animate( 230, 5, 1, true, false, 0 ); + from.PlaySound( 0x345 ); + } + else + { + m_Acts = 1; + ItemID = Utility.RandomList( 0x12F3, 0x1305 ); + from.Animate( 230, 5, 1, true, false, 0 ); + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + } + else + { + if ( m_Acts == 1 ) + { + m_Acts = 0; + Name = "bowl of food"; + + if ( ItemID == 0x15F8 ) + ItemID = Utility.RandomList( 0x15F9, 0x15FA, 0x15FB, 0x15FC ); + else + ItemID = Utility.RandomList( 0x15FE, 0x15FF, 0x1600, 0x1601, 0x1602 ); + + from.Animate( 230, 5, 1, true, false, 0 ); + if ( PlayRepetitive ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else + { + m_Acts = 1; + Name = "bowl"; + ItemID = Utility.RandomList( 0x15F8, 0x15FD ); + from.Animate( 230, 5, 1, true, false, 0 ); + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + } + } + else if ( from is Herbalist ) + { + Hue = 0x49E; + Name = "pot"; + + if ( m_Acts == 0 ) + { + ItemID = 0x18B7; + from.Animate( 230, 5, 1, true, false, 0 ); + m_Acts++; + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 1 ) + { + from.Animate( 230, 5, 1, true, false, 0 ); + m_Acts++; + from.PlaySound( 0x025 ); + ItemID = 0x18C8; + } + else if ( m_Acts == 2 ) + { + from.Animate( 230, 5, 1, true, false, 0 ); + m_Acts++; + ItemID = 0x18C9; + if ( PlayRepetitive ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 3 ) + { + from.Animate( 230, 5, 1, true, false, 0 ); + m_Acts++; + ItemID = 0x18CA; + if ( PlayRepetitive ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 4 ) + { + from.Animate( 230, 5, 1, true, false, 0 ); + m_Acts++; + ItemID = 0x18CB; + if ( PlayRepetitive ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else + { + Name = "potted plant"; + ItemID = Utility.RandomMinMax( 0x18B8, 0x18C7 ); + m_Acts = 0; + } + } + else if ( from is Tailor || from is Weaver ) + { + Name = "cloth"; + + if ( m_Acts == 0 ) + { + ItemID = Utility.RandomMinMax( 0x175D, 0x1768 ); + Hue = Utility.RandomHue(); + from.Animate( 230, 5, 1, true, false, 0 ); + m_Acts = 1; + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else + { + Name = "clothing"; + ItemID = Utility.RandomList( 0x1517, 0x1518, 0x1EFD, 0x1EFE, 0x1F9F, 0x1FA0, 0x1537, 0x1538, 0x152F, 0x1531, 0x1516, 0x152E, 0x1713, 0x1715, 0x1718, 0x171A, 0x171C ); + from.PlaySound( 0x248 ); + from.Animate( 230, 5, 1, true, false, 0 ); + m_Acts = 0; + } + } + else if ( from is Tinker ) + { + Name = "clock"; + + if ( ItemID == 0x104B || ItemID == 0x104C ) + { + ItemID = Utility.RandomList( 0xC1F, 0x104D, 0x104E, 0x104F, 0x1050 ); + from.Animate( 230, 5, 1, true, false, 0 ); + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else + { + ItemID = Utility.RandomList( 0x104B, 0x104C ); + from.PlaySound( 0x241 ); + from.Animate( 230, 5, 1, true, false, 0 ); + } + } + else if ( from is Lumberjack || from is Carpenter ) + { + if ( ItemID == 0x1264 || ItemID == 0x126A || ItemID == 0x1BE1 || ItemID == 0x1BDE ) + { + EquipVendor( from, "axe" ); + if ( m_Acts == 0 ) + { + m_Acts = 1; + Name = "log"; + from.Animate( 230, 5, 1, true, false, 0 ); + ItemID = 0x1264; + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 1 ) + { + m_Acts = 2; + Name = "logs"; + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.TwoHanded ) ); + weapon.PlaySwingAnimation( from ); + from.PlaySound( 0x13E ); + ItemID = Utility.RandomList( 0x1BDE, 0x1BE1 ); + } + else + { + m_Acts = 0; + Name = "boards"; + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.TwoHanded ) ); + weapon.PlaySwingAnimation( from ); + from.PlaySound( 0x13E ); + ItemID = 0x126A; + } + } + else + { + EquipVendor( from, "hammer" ); + Name = "furniture"; + if ( m_Acts == 0 ) + { + Name = "wood"; + m_Acts = 1; + from.Animate( 230, 5, 1, true, false, 0 ); + ItemID = Utility.RandomList( 0x1BD8, 0x1BD9, 0x1BDB, 0x1BDC ); + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 1 ) + { + from.PlaySound( 0x23D ); + m_Acts = 2; + if ( facingNS( from ) ) + ItemID = Utility.RandomList( 0x1E6F, 0x1E71, 0x1E76, 0x1E80 ); + else + ItemID = Utility.RandomList( 0x1E78, 0x1E7A, 0x1E7E, 0x1E81 ); + + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) ); + weapon.PlaySwingAnimation( from ); + } + else + { + from.PlaySound( 0x23D ); + m_Acts = 0; + + switch ( ItemID ) + { + case 0x1E6F: Name = "chair"; ItemID = 0x0B4F; break; + case 0x1E71: Name = "drawers"; ItemID = 0x0A2C; break; + case 0x1E76: Name = "shelf"; ItemID = 0x0A9D; break; + case 0x1E80: Name = "crate"; ItemID = 0x1FFF; break; + case 0x1E78: Name = "chair"; ItemID = 0x0B4E; break; + case 0x1E7A: Name = "drawers"; ItemID = 0x0A34; break; + case 0x1E7E: Name = "shelf"; ItemID = 0x0A9E; break; + case 0x1E81: Name = "crate"; ItemID = 0x0E7E; break; + } + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) ); + weapon.PlaySwingAnimation( from ); + } + } + } + else if ( from is Baker ) + { + if ( m_Acts == 0 ) + { + Name = "flour"; + m_Acts = 1; + from.Animate( 230, 5, 1, true, false, 0 ); + + ItemID = Utility.RandomList( 0x1039, 0x1045 ); + + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 1 ) + { + Name = "flour"; + m_Acts = 2; + from.Animate( 230, 5, 1, true, false, 0 ); + + ItemID = Utility.RandomList( 0x103A, 0x1046 ); + + if ( PlayRepetitive ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 2 ) + { + Name = "dough"; + m_Acts = 3; + from.Animate( 230, 5, 1, true, false, 0 ); + ItemID = 0xA1E; + from.PlaySound( 0x242 ); + } + else if ( m_Acts == 3 ) + { + if ( Utility.RandomBool() ) + { + Name = "dough"; + ItemID = 0x103D; + } + else + { + Name = "cookie mix"; + ItemID = 0x103F; + } + m_Acts = 4; + from.Animate( 230, 5, 1, true, false, 0 ); + + if ( PlayRepetitive ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else + { + m_Acts = 0; + if ( ItemID == 0x103D ){ Name = "bread"; ItemID = Utility.RandomList( 0x103C, 0x98C ); } + else { Name = "cookies"; ItemID = Utility.RandomList( 0x160B, 0x160C ); } + from.Animate( 230, 5, 1, true, false, 0 ); + + if ( PlayRepetitive ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + } + else if ( from is Miner || from is Blacksmith || from is Weaponsmith || from is IronWorker || from is Armorer ) + { + if ( ItemID == 0x1775 || ItemID == 0x1776 || ItemID == 0x1777 || ItemID == 0x1778 || ItemID == 0x19B9 ) + { + EquipVendor( from, "pick" ); + Name = "rock"; + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) ); + weapon.PlaySwingAnimation( from ); + from.PlaySound( Utility.RandomList( 0x125, 0x126 ) ); + + if ( m_Acts == 0 ){ ItemID = 0x1776; m_Acts++; } + else if ( m_Acts == 1 ){ ItemID = 0x1775; m_Acts++; } + else if ( m_Acts == 2 ){ ItemID = 0x1777; m_Acts++; } + else if ( m_Acts == 3 ){ ItemID = 0x1778; m_Acts++; } + else { ItemID = 0x19B9; m_Acts = 0; } + } + else if ( ItemID == 0x19B8 || ( ItemID >= 0x1BEF && ItemID <= 0x1BF4 ) ) + { + EquipVendor( from, "none" ); + if ( ItemID == 0x19B8 ) + { + if ( facingNS( from ) ) + ItemID = Utility.RandomMinMax( 0x1BF2, 0x1BF4 ); + else + ItemID = Utility.RandomMinMax( 0x1BEF, 0x1BF1 ); + + Name = "ingots"; + from.Animate( 230, 5, 1, true, false, 0 ); + from.PlaySound( Utility.RandomList( 0x02B, 0x047, 0x208 ) ); + } + else + { + ItemID = 0x19B8; + Name = "ore"; + from.Animate( 230, 5, 1, true, false, 0 ); + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + } + else + { + EquipVendor( from, "hammer" ); + Name = "anvil"; + if ( m_Acts == 0 ) + { + m_Acts = 1; + if ( Utility.RandomBool() ) + m_Acts = 2; + + from.Animate( 230, 5, 1, true, false, 0 ); + + if ( facingNS( from ) ) + ItemID = 0x2268; + else + ItemID = 0x2252; + + if ( PlayRegular ) + from.PlaySound( Utility.RandomList( 0x059, 0x057 ) ); + } + else if ( m_Acts == 1 ) + { + from.PlaySound( 0x2A ); + m_Acts = 2; + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) ); + weapon.PlaySwingAnimation( from ); + } + else + { + from.PlaySound( 0x2A ); + m_Acts = 0; + if ( from is Weaponsmith ) + { + if ( facingNS( from ) ) + ItemID = Utility.RandomMinMax( 0x2272, 0x227D ); + else + ItemID = Utility.RandomMinMax( 0x225C, 0x2267 ); + } + else if ( from is Armorer ) + { + if ( facingNS( from ) ) + ItemID = Utility.RandomMinMax( 0x2269, 0x2271 ); + else + ItemID = Utility.RandomMinMax( 0x2253, 0x225B ); + } + else + { + if ( facingNS( from ) ) + ItemID = Utility.RandomMinMax( 0x2269, 0x227D ); + else + ItemID = Utility.RandomMinMax( 0x2253, 0x2267 ); + } + BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) ); + weapon.PlaySwingAnimation( from ); + } + } + } + else if ( from is Bard || from is Minstrel ) + { + if ( m_Acts == 0 ) + { + SetInstrument( from, this ); + m_Acts = 1; + } + else + { + m_Acts = 0; + if ( this.Name == "flute" ){ from.PlaySound( 0x502 ); } + else if ( this.Name == "harp" ){ from.PlaySound( 0x45 ); } + else if ( this.Name == "drum" ){ from.PlaySound( 0x38 ); } + else if ( this.Name == "tambourine" ){ from.PlaySound( 0x52 ); } + else if ( this.Name == "lute" ){ from.PlaySound( 0x4C ); } + else if ( this.Name == "pipes" ){ from.PlaySound( 0x5B8 ); } + } + } + } + + public static void EquipVendor( Mobile m, string item ) + { + Item one = m.FindItemOnLayer( Layer.OneHanded ); + if ( one == null ) + one = m.FindItemOnLayer( Layer.FirstValid ); + Item two = m.FindItemOnLayer( Layer.TwoHanded ); + + if ( item == "none" ) + { + ClearHands( m ); + } + else if ( item == "cleaver" && !(one is Cleaver) ) + { + ClearHands( m ); + m.AddItem( new Cleaver() ); + } + else if ( item == "bow" && !(two is BaseRanged) ) + { + ClearHands( m ); + switch ( Utility.Random( 4 ) ) + { + case 0: m.AddItem( new Bow() ); break; + case 1: m.AddItem( new Bow() ); break; + case 2: m.AddItem( new Crossbow() ); break; + case 3: m.AddItem( new HeavyCrossbow() ); break; + } + } + else if ( item == "pole" && !(two is FishingPole) ) + { + ClearHands( m ); + m.AddItem( new FishingPole() ); + } + else if ( item == "pick" && !(two is Pickaxe) ) + { + ClearHands( m ); + m.AddItem( new Pickaxe() ); + } + else if ( item == "axe" && !(two is Hatchet) ) + { + ClearHands( m ); + m.AddItem( new Hatchet() ); + } + else if ( item == "hammer" && !(one is Club) ) + { + ClearHands( m ); + Item hammer = new Club(); + hammer.Name = "hammer"; + hammer.ItemID = 0x13E3; + m.AddItem( hammer ); + } + } + + public static void ClearHands( Mobile m ) + { + Item one = m.FindItemOnLayer( Layer.OneHanded ); + if ( one == null ) + one = m.FindItemOnLayer( Layer.FirstValid ); + Item two = m.FindItemOnLayer( Layer.TwoHanded ); + + if ( one != null ) { one.Delete(); } + if ( two != null ) { two.Delete(); } + } + + public static void SetInstrument( Mobile from, Item instrument ) + { + string facing = "east"; + + if ( from.X == instrument.X ) + facing = "south"; + + if ( facing == "south" ) + { + switch ( Utility.Random( 6 ) ) + { + case 0: instrument.ItemID = 0x178F; instrument.Name = "lute"; instrument.Z = from.Z + 9; break; + case 1: instrument.ItemID = 0x178D; instrument.Name = "flute"; instrument.Z = from.Z + 11; break; + case 2: instrument.ItemID = 0x178B; instrument.Name = "harp"; instrument.Z = from.Z + 9; break; + case 3: instrument.ItemID = 0x1793; instrument.Name = "drum"; instrument.Z = from.Z + 7; break; + case 4: instrument.ItemID = 0x1791; instrument.Name = "tambourine"; instrument.Z = from.Z + 9; break; + case 5: instrument.ItemID = 0x2131; instrument.Name = "pipes"; instrument.Z = from.Z + 9; break; + } + } + else + { + switch ( Utility.Random( 6 ) ) + { + case 0: instrument.ItemID = 0x178E; instrument.Name = "lute"; instrument.Z = from.Z + 9; break; + case 1: instrument.ItemID = 0x178C; instrument.Name = "flute"; instrument.Z = from.Z + 11; break; + case 2: instrument.ItemID = 0x178A; instrument.Name = "harp"; instrument.Z = from.Z + 9; break; + case 3: instrument.ItemID = 0x1792; instrument.Name = "drum"; instrument.Z = from.Z + 7; break; + case 4: instrument.ItemID = 0x1790; instrument.Name = "tambourine"; instrument.Z = from.Z + 9; break; + case 5: instrument.ItemID = 0x2130; instrument.Name = "pipes"; instrument.Z = from.Z + 9; break; + } + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + writer.Write( (int) m_Acts ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + m_Acts = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Citizens/CampAAddon.cs b/Scripts/Mobiles/Towns/Citizens/CampAAddon.cs new file mode 100644 index 0000000..06c69b1 --- /dev/null +++ b/Scripts/Mobiles/Towns/Citizens/CampAAddon.cs @@ -0,0 +1,221 @@ +using System; +using Server; +using Server.Items; +using System.Collections; +using Server.Mobiles; + +namespace Server.Items +{ + public class CampAAddon : BaseAddon + { + private bool m_Sitting; + private bool m_North; + private bool m_South; + private bool m_East; + private bool m_West; + + private static int[,] m_AddOnSimpleComponents = new int[,] { + {7134, 3, 1, 0}, // LOGS + {7137, 1, -2, 0}, // LOGS + {Utility.RandomList(749,2200), -2, -1, 0}, // WAGON + {Utility.RandomList(750,2169), -2, 3, 0}, // WAGON + {2861, 0, 3, 0}, // BENCH + {2861, 0, -2, 0}, // BENCH + {2860, -2, 1, 0}, // BENCH + {2860, 3, 0, 0}, // BENCH + }; + + [ Constructable ] + public CampAAddon() + { + Weight = -2.0; + int wagon = Utility.Random(3); + int logs = Utility.Random(3); + m_Sitting = true; + if ( Utility.RandomMinMax(1,3) == 1 ) + m_Sitting = false; + + m_North = true; + m_South = true; + m_East = true; + m_West = true; + + int c = 0; + int d = 0; + int e = 0; + bool doit = true; + + for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++) + { + c++; + + if ( m_AddOnSimpleComponents[i,0] == 749 || m_AddOnSimpleComponents[i,0] == 750 || m_AddOnSimpleComponents[i,0] == 2169 || m_AddOnSimpleComponents[i,0] == 2200 ) + { + if ( wagon == 1 && ( m_AddOnSimpleComponents[i,0] == 749 || m_AddOnSimpleComponents[i,0] == 2200 ) ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + else if ( wagon == 2 && ( m_AddOnSimpleComponents[i,0] == 750 || m_AddOnSimpleComponents[i,0] == 2169 ) ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + else if ( m_AddOnSimpleComponents[i,0] == 7134 || m_AddOnSimpleComponents[i,0] == 7137 ) + { + if ( logs == 1 && m_AddOnSimpleComponents[i,0] == 7134 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + else if ( logs == 2 && m_AddOnSimpleComponents[i,0] == 7137 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + else if ( m_Sitting ) + { + doit = true; + + if ( d < 4 ){ if ( Utility.RandomMinMax(1,4) == 1 ){ doit = false; } } + else if ( d < 3 ){ if ( Utility.RandomMinMax(1,3) == 1 ){ doit = false; } } + else if ( d < 2 ){ if ( Utility.RandomBool() ){ doit = false; } } + + if ( e == 0 && c == 7 ){ doit = true; } + if ( e == 1 && c == 8 ){ doit = true; } + + if ( !doit ) + { + d++; + if ( c == 5 ){ m_North = false; } + else if ( c == 6 ){ m_South = false; } + else if ( c == 7 ){ m_East = false; } + else if ( c == 8 ){ m_West = false; } + } + else + { + e++; + AddonComponent ac = new AddonComponent( m_AddOnSimpleComponents[i,0] ); + ac.Weight = -2.0; + AddComponent( ac, m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + } + } + + AddComplexComponent( (BaseAddon) this, 4012, 0, 0, 0, 0, 0, "fire", 1); + } + + public override void OnAfterSpawn() + { + base.OnAfterSpawn(); + + int mod = 0; + + RemoveCitizens(); + + BaseCreature north = new CitizenNorth(); + BaseCreature south = new CitizenSouth(); + BaseCreature east = new CitizenEast(); + BaseCreature west = new CitizenWest(); + + if ( !m_Sitting ) + { + north.Delete(); north = new AdventurerNorth(); + south.Delete(); south = new AdventurerSouth(); + east.Delete(); east = new AdventurerEast(); + west.Delete(); west = new AdventurerWest(); + + if ( Utility.RandomBool() ) + { + mod = 1; + BaseMount mountN = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountN.Delete(); mountN = new Llama(); } + mountN.Rider = north; + north.Direction = Direction.North; + BaseMount mountS = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountS.Delete(); mountS = new Llama(); } + mountS.Rider = south; + south.Direction = Direction.South; + BaseMount mountE = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountE.Delete(); mountE = new Llama(); } + mountE.Rider = east; + east.Direction = Direction.East; + BaseMount mountW = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountW.Delete(); mountW = new Llama(); } + mountW.Rider = west; + west.Direction = Direction.West; + } + } + + north.MoveToWorld( new Point3D( X, Y+3+mod, Z ), Map ); + south.MoveToWorld( new Point3D( X, Y-2-mod, Z ), Map ); + east.MoveToWorld( new Point3D( X-2-mod, Y+1, Z ), Map ); + west.MoveToWorld( new Point3D( X+3+mod, Y, Z ), Map ); + + north.RangeHome = 0; + north.Home = north.Location; + north.OnAfterSpawn(); + if ( !m_North ){ north.Delete(); } + south.RangeHome = 0; + south.Home = south.Location; + south.OnAfterSpawn(); + if ( !m_South ){ south.Delete(); } + east.RangeHome = 0; + east.Home = east.Location; + east.OnAfterSpawn(); + if ( !m_East ){ east.Delete(); } + west.RangeHome = 0; + west.Home = west.Location; + west.OnAfterSpawn(); + if ( !m_West ){ west.Delete(); } + } + + public CampAAddon( Serial serial ) : base( serial ) + { + } + + public override void OnDelete() + { + RemoveCitizens(); + base.OnDelete(); + } + + public void RemoveCitizens() + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 8 ) ) + { + if ( m is Citizen ) + list.Add( m ); + } + for ( int i = 0; i < list.Count; ++i ) + { + Mobile from = (Mobile)list[i]; + from.Delete(); + } + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource) + { + AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1); + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount) + { + AddonComponent ac; + ac = new AddonComponent(item); + ac.Weight = -2.0; + if (name != null && name.Length > 0) + ac.Name = name; + if (hue != 0) + ac.Hue = hue; + if (amount > 1) + { + ac.Stackable = true; + ac.Amount = amount; + } + if (lightsource != -1) + ac.Light = LightType.Circle300; + addon.AddComponent(ac, xoffset, yoffset, zoffset); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Citizens/CampBAddon.cs b/Scripts/Mobiles/Towns/Citizens/CampBAddon.cs new file mode 100644 index 0000000..cb0194f --- /dev/null +++ b/Scripts/Mobiles/Towns/Citizens/CampBAddon.cs @@ -0,0 +1,221 @@ +using System; +using Server; +using Server.Items; +using System.Collections; +using Server.Mobiles; + +namespace Server.Items +{ + public class CampBAddon : BaseAddon + { + private bool m_Sitting; + private bool m_North; + private bool m_South; + private bool m_East; + private bool m_West; + + private static int[,] m_AddOnSimpleComponents = new int[,] { + {Utility.RandomList(750,2169), -2, -2, 0}, // WAGON + {Utility.RandomList(750,2169), 2, -2, 0}, // WAGON + {7137, -1, -2, 0}, // LOGS + {7134, 2, 1, 0}, // LOGS + {2861, 0, 2, 0}, // BENCH + {2861, 0, -2, 0}, // BENCH + {2860, -2, 0, 0}, // BENCH + {2860, 2, 0, 0}, // BENCH + }; + + [ Constructable ] + public CampBAddon() + { + Weight = -2.0; + int wagon = Utility.Random(3); + int logs = Utility.Random(3); + m_Sitting = true; + if ( Utility.RandomMinMax(1,3) == 1 ) + m_Sitting = false; + + m_North = true; + m_South = true; + m_East = true; + m_West = true; + + int c = 0; + int d = 0; + int e = 0; + bool doit = true; + + for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++) + { + c++; + + if ( m_AddOnSimpleComponents[i,0] == 749 || m_AddOnSimpleComponents[i,0] == 750 || m_AddOnSimpleComponents[i,0] == 2169 || m_AddOnSimpleComponents[i,0] == 2200 ) + { + if ( wagon == 1 && m_AddOnSimpleComponents[i,1] == -2 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + else if ( wagon == 2 && m_AddOnSimpleComponents[i,1] == 2 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + else if ( m_AddOnSimpleComponents[i,0] == 7134 || m_AddOnSimpleComponents[i,0] == 7137 ) + { + if ( logs == 1 && m_AddOnSimpleComponents[i,0] == 7134 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + else if ( logs == 2 && m_AddOnSimpleComponents[i,0] == 7137 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + else if ( m_Sitting ) + { + doit = true; + + if ( d < 4 ){ if ( Utility.RandomMinMax(1,4) == 1 ){ doit = false; } } + else if ( d < 3 ){ if ( Utility.RandomMinMax(1,3) == 1 ){ doit = false; } } + else if ( d < 2 ){ if ( Utility.RandomBool() ){ doit = false; } } + + if ( e == 0 && c == 7 ){ doit = true; } + if ( e == 1 && c == 8 ){ doit = true; } + + if ( !doit ) + { + d++; + if ( c == 5 ){ m_North = false; } + else if ( c == 6 ){ m_South = false; } + else if ( c == 7 ){ m_East = false; } + else if ( c == 8 ){ m_West = false; } + } + else + { + e++; + AddonComponent ac = new AddonComponent( m_AddOnSimpleComponents[i,0] ); + ac.Weight = -2.0; + AddComponent( ac, m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + } + } + + AddComplexComponent( (BaseAddon) this, 10749, 0, 0, 0, 0, 0, "fire", 1); + } + + public override void OnAfterSpawn() + { + base.OnAfterSpawn(); + + int mod = 0; + + RemoveCitizens(); + + BaseCreature north = new CitizenNorth(); + BaseCreature south = new CitizenSouth(); + BaseCreature east = new CitizenEast(); + BaseCreature west = new CitizenWest(); + + if ( !m_Sitting ) + { + north.Delete(); north = new AdventurerNorth(); + south.Delete(); south = new AdventurerSouth(); + east.Delete(); east = new AdventurerEast(); + west.Delete(); west = new AdventurerWest(); + + if ( Utility.RandomBool() ) + { + mod = 1; + BaseMount mountN = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountN.Delete(); mountN = new Llama(); } + mountN.Rider = north; + north.Direction = Direction.North; + BaseMount mountS = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountS.Delete(); mountS = new Llama(); } + mountS.Rider = south; + south.Direction = Direction.South; + BaseMount mountE = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountE.Delete(); mountE = new Llama(); } + mountE.Rider = east; + east.Direction = Direction.East; + BaseMount mountW = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountW.Delete(); mountW = new Llama(); } + mountW.Rider = west; + west.Direction = Direction.West; + } + } + + north.MoveToWorld( new Point3D( X, Y+2+mod, Z ), Map ); + south.MoveToWorld( new Point3D( X, Y-2-mod, Z ), Map ); + east.MoveToWorld( new Point3D( X-2-mod, Y, Z ), Map ); + west.MoveToWorld( new Point3D( X+2+mod, Y, Z ), Map ); + + north.RangeHome = 0; + north.Home = north.Location; + north.OnAfterSpawn(); + if ( !m_North ){ north.Delete(); } + south.RangeHome = 0; + south.Home = south.Location; + south.OnAfterSpawn(); + if ( !m_South ){ south.Delete(); } + east.RangeHome = 0; + east.Home = east.Location; + east.OnAfterSpawn(); + if ( !m_East ){ east.Delete(); } + west.RangeHome = 0; + west.Home = west.Location; + west.OnAfterSpawn(); + if ( !m_West ){ west.Delete(); } + } + + public CampBAddon( Serial serial ) : base( serial ) + { + } + + public override void OnDelete() + { + RemoveCitizens(); + base.OnDelete(); + } + + public void RemoveCitizens() + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 8 ) ) + { + if ( m is Citizen ) + list.Add( m ); + } + for ( int i = 0; i < list.Count; ++i ) + { + Mobile from = (Mobile)list[i]; + from.Delete(); + } + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource) + { + AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1); + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount) + { + AddonComponent ac; + ac = new AddonComponent(item); + ac.Weight = -2.0; + if (name != null && name.Length > 0) + ac.Name = name; + if (hue != 0) + ac.Hue = hue; + if (amount > 1) + { + ac.Stackable = true; + ac.Amount = amount; + } + if (lightsource != -1) + ac.Light = LightType.Circle300; + addon.AddComponent(ac, xoffset, yoffset, zoffset); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Citizens/CampCAddon.cs b/Scripts/Mobiles/Towns/Citizens/CampCAddon.cs new file mode 100644 index 0000000..8e19afa --- /dev/null +++ b/Scripts/Mobiles/Towns/Citizens/CampCAddon.cs @@ -0,0 +1,221 @@ +using System; +using Server; +using Server.Items; +using System.Collections; +using Server.Mobiles; + +namespace Server.Items +{ + public class CampCAddon : BaseAddon + { + private bool m_Sitting; + private bool m_North; + private bool m_South; + private bool m_East; + private bool m_West; + + private static int[,] m_AddOnSimpleComponents = new int[,] { + {7135, -3, -2, 0}, // LOGS + {7138, 2, 1, 0}, // LOGS + {Utility.RandomList(749,2200), -3, 2, 0}, // WAGON + {Utility.RandomList(750,2169), -1, -3, 0}, // WAGON + {2861, -1, 3, 0}, // BENCH + {2861, 1, -3, 0}, // BENCH + {2860, -3, 0, 0}, // BENCH + {2860, 3, 0, 0}, // BENCH + }; + + [ Constructable ] + public CampCAddon() + { + Weight = -2.0; + int wagon = Utility.Random(3); + int logs = Utility.Random(3); + m_Sitting = true; + if ( Utility.RandomMinMax(1,3) == 1 ) + m_Sitting = false; + + m_North = true; + m_South = true; + m_East = true; + m_West = true; + + int c = 0; + int d = 0; + int e = 0; + bool doit = true; + + for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++) + { + c++; + + if ( m_AddOnSimpleComponents[i,0] == 749 || m_AddOnSimpleComponents[i,0] == 750 || m_AddOnSimpleComponents[i,0] == 2169 || m_AddOnSimpleComponents[i,0] == 2200 ) + { + if ( wagon == 1 && ( m_AddOnSimpleComponents[i,0] == 749 || m_AddOnSimpleComponents[i,0] == 2200 ) ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + else if ( wagon == 2 && ( m_AddOnSimpleComponents[i,0] == 750 || m_AddOnSimpleComponents[i,0] == 2169 ) ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + else if ( m_AddOnSimpleComponents[i,0] == 7135 || m_AddOnSimpleComponents[i,0] == 7138 ) + { + if ( logs == 1 && m_AddOnSimpleComponents[i,0] == 7135 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + else if ( logs == 2 && m_AddOnSimpleComponents[i,0] == 7138 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + else if ( m_Sitting ) + { + doit = true; + + if ( d < 4 ){ if ( Utility.RandomMinMax(1,4) == 1 ){ doit = false; } } + else if ( d < 3 ){ if ( Utility.RandomMinMax(1,3) == 1 ){ doit = false; } } + else if ( d < 2 ){ if ( Utility.RandomBool() ){ doit = false; } } + + if ( e == 0 && c == 7 ){ doit = true; } + if ( e == 1 && c == 8 ){ doit = true; } + + if ( !doit ) + { + d++; + if ( c == 5 ){ m_North = false; } + else if ( c == 6 ){ m_South = false; } + else if ( c == 7 ){ m_East = false; } + else if ( c == 8 ){ m_West = false; } + } + else + { + e++; + AddonComponent ac = new AddonComponent( m_AddOnSimpleComponents[i,0] ); + ac.Weight = -2.0; + AddComponent( ac, m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + } + } + + AddComplexComponent( (BaseAddon) this, 996, 0, 0, 0, 0, 0, "fire", 1); + } + + public override void OnAfterSpawn() + { + base.OnAfterSpawn(); + + int mod = 0; + + RemoveCitizens(); + + BaseCreature north = new CitizenNorth(); + BaseCreature south = new CitizenSouth(); + BaseCreature east = new CitizenEast(); + BaseCreature west = new CitizenWest(); + + if ( !m_Sitting ) + { + north.Delete(); north = new AdventurerNorth(); + south.Delete(); south = new AdventurerSouth(); + east.Delete(); east = new AdventurerEast(); + west.Delete(); west = new AdventurerWest(); + + if ( Utility.RandomBool() ) + { + mod = 1; + BaseMount mountN = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountN.Delete(); mountN = new Llama(); } + mountN.Rider = north; + north.Direction = Direction.North; + BaseMount mountS = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountS.Delete(); mountS = new Llama(); } + mountS.Rider = south; + south.Direction = Direction.South; + BaseMount mountE = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountE.Delete(); mountE = new Llama(); } + mountE.Rider = east; + east.Direction = Direction.East; + BaseMount mountW = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountW.Delete(); mountW = new Llama(); } + mountW.Rider = west; + west.Direction = Direction.West; + } + } + + north.MoveToWorld( new Point3D( X-1, Y+3+mod, Z ), Map ); + south.MoveToWorld( new Point3D( X+1, Y-3-mod, Z ), Map ); + east.MoveToWorld( new Point3D( X-3-mod, Y, Z ), Map ); + west.MoveToWorld( new Point3D( X+3+mod, Y, Z ), Map ); + + north.RangeHome = 0; + north.Home = north.Location; + north.OnAfterSpawn(); + if ( !m_North ){ north.Delete(); } + south.RangeHome = 0; + south.Home = south.Location; + south.OnAfterSpawn(); + if ( !m_South ){ south.Delete(); } + east.RangeHome = 0; + east.Home = east.Location; + east.OnAfterSpawn(); + if ( !m_East ){ east.Delete(); } + west.RangeHome = 0; + west.Home = west.Location; + west.OnAfterSpawn(); + if ( !m_West ){ west.Delete(); } + } + + public CampCAddon( Serial serial ) : base( serial ) + { + } + + public override void OnDelete() + { + RemoveCitizens(); + base.OnDelete(); + } + + public void RemoveCitizens() + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 8 ) ) + { + if ( m is Citizen ) + list.Add( m ); + } + for ( int i = 0; i < list.Count; ++i ) + { + Mobile from = (Mobile)list[i]; + from.Delete(); + } + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource) + { + AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1); + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount) + { + AddonComponent ac; + ac = new AddonComponent(item); + ac.Weight = -2.0; + if (name != null && name.Length > 0) + ac.Name = name; + if (hue != 0) + ac.Hue = hue; + if (amount > 1) + { + ac.Stackable = true; + ac.Amount = amount; + } + if (lightsource != -1) + ac.Light = LightType.Circle300; + addon.AddComponent(ac, xoffset, yoffset, zoffset); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Citizens/CampDAddon.cs b/Scripts/Mobiles/Towns/Citizens/CampDAddon.cs new file mode 100644 index 0000000..4050b67 --- /dev/null +++ b/Scripts/Mobiles/Towns/Citizens/CampDAddon.cs @@ -0,0 +1,222 @@ +using System; +using Server; +using Server.Items; +using System.Collections; +using Server.Mobiles; + +namespace Server.Items +{ + public class CampDAddon : BaseAddon + { + private bool m_Sitting; + private bool m_North; + private bool m_South; + private bool m_East; + private bool m_West; + + private static int[,] m_AddOnSimpleComponents = new int[,] { + {Utility.RandomList(749,2200), -1, -2, 0}, // WAGON + {Utility.RandomList(750,2169), -2, 3, 0}, // WAGON2169 + {7134, 3, -1, 0}, // LOGS + {7137, 0, -2, 0}, // LOGS + {2861, 0, 3, 0}, // BENCH + {2861, 1, -2, 0}, // BENCH + {2860, -2, 0, 0}, // BENCH + {2860, 3, 0, 0}, // BENCH + }; + + [ Constructable ] + public CampDAddon() + { + Weight = -2.0; + int wagon = Utility.Random(3); + int logs = Utility.Random(3); + m_Sitting = true; + if ( Utility.RandomMinMax(1,3) == 1 ) + m_Sitting = false; + + m_North = true; + m_South = true; + m_East = true; + m_West = true; + + int c = 0; + int d = 0; + int e = 0; + bool doit = true; + + for (int i = 0; i < m_AddOnSimpleComponents.Length / 4; i++) + { + c++; + + if ( m_AddOnSimpleComponents[i,0] == 749 || m_AddOnSimpleComponents[i,0] == 750 || m_AddOnSimpleComponents[i,0] == 2169 || m_AddOnSimpleComponents[i,0] == 2200 ) + { + if ( wagon == 1 && ( m_AddOnSimpleComponents[i,0] == 749 || m_AddOnSimpleComponents[i,0] == 2200 ) ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + else if ( wagon == 2 && ( m_AddOnSimpleComponents[i,0] == 750 || m_AddOnSimpleComponents[i,0] == 2169 ) ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + else if ( m_AddOnSimpleComponents[i,0] == 7134 || m_AddOnSimpleComponents[i,0] == 7137 ) + { + if ( logs == 1 && m_AddOnSimpleComponents[i,0] == 7134 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + else if ( logs == 2 && m_AddOnSimpleComponents[i,0] == 7137 ) + AddComponent( new AddonComponent( m_AddOnSimpleComponents[i,0] ), m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + else if ( m_Sitting ) + { + doit = true; + + if ( d < 4 ){ if ( Utility.RandomMinMax(1,4) == 1 ){ doit = false; } } + else if ( d < 3 ){ if ( Utility.RandomMinMax(1,3) == 1 ){ doit = false; } } + else if ( d < 2 ){ if ( Utility.RandomBool() ){ doit = false; } } + + if ( e == 0 && c == 7 ){ doit = true; } + if ( e == 1 && c == 8 ){ doit = true; } + + if ( !doit ) + { + d++; + if ( c == 5 ){ m_North = false; } + else if ( c == 6 ){ m_South = false; } + else if ( c == 7 ){ m_East = false; } + else if ( c == 8 ){ m_West = false; } + } + else + { + e++; + AddonComponent ac = new AddonComponent( m_AddOnSimpleComponents[i,0] ); + ac.Weight = -2.0; + AddComponent( ac, m_AddOnSimpleComponents[i,1], m_AddOnSimpleComponents[i,2], m_AddOnSimpleComponents[i,3] ); + } + } + } + + AddComplexComponent( (BaseAddon) this, 4012, 0, 0, 0, 0, 0, "fire", 1); + AddComplexComponent( (BaseAddon) this, 3555, 0, 0, 2, 0, 0, "fire", 1); + } + + public override void OnAfterSpawn() + { + base.OnAfterSpawn(); + + int mod = 0; + + RemoveCitizens(); + + BaseCreature north = new CitizenNorth(); + BaseCreature south = new CitizenSouth(); + BaseCreature east = new CitizenEast(); + BaseCreature west = new CitizenWest(); + + if ( !m_Sitting ) + { + north.Delete(); north = new AdventurerNorth(); + south.Delete(); south = new AdventurerSouth(); + east.Delete(); east = new AdventurerEast(); + west.Delete(); west = new AdventurerWest(); + + if ( Utility.RandomBool() ) + { + mod = 1; + BaseMount mountN = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountN.Delete(); mountN = new Llama(); } + mountN.Rider = north; + north.Direction = Direction.North; + BaseMount mountS = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountS.Delete(); mountS = new Llama(); } + mountS.Rider = south; + south.Direction = Direction.South; + BaseMount mountE = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountE.Delete(); mountE = new Llama(); } + mountE.Rider = east; + east.Direction = Direction.East; + BaseMount mountW = new Horse(); if ( Utility.RandomMinMax(1,20) == 1 ){ mountW.Delete(); mountW = new Llama(); } + mountW.Rider = west; + west.Direction = Direction.West; + } + } + + north.MoveToWorld( new Point3D( X, Y+3+mod, Z ), Map ); + south.MoveToWorld( new Point3D( X+1, Y-2-mod, Z ), Map ); + east.MoveToWorld( new Point3D( X-2-mod, Y, Z ), Map ); + west.MoveToWorld( new Point3D( X+3+mod, Y, Z ), Map ); + + north.RangeHome = 0; + north.Home = north.Location; + north.OnAfterSpawn(); + if ( !m_North ){ north.Delete(); } + south.RangeHome = 0; + south.Home = south.Location; + south.OnAfterSpawn(); + if ( !m_South ){ south.Delete(); } + east.RangeHome = 0; + east.Home = east.Location; + east.OnAfterSpawn(); + if ( !m_East ){ east.Delete(); } + west.RangeHome = 0; + west.Home = west.Location; + west.OnAfterSpawn(); + if ( !m_West ){ west.Delete(); } + } + + public CampDAddon( Serial serial ) : base( serial ) + { + } + + public override void OnDelete() + { + RemoveCitizens(); + base.OnDelete(); + } + + public void RemoveCitizens() + { + ArrayList list = new ArrayList(); + + foreach ( Mobile m in this.GetMobilesInRange( 8 ) ) + { + if ( m is Citizen ) + list.Add( m ); + } + for ( int i = 0; i < list.Count; ++i ) + { + Mobile from = (Mobile)list[i]; + from.Delete(); + } + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource) + { + AddComplexComponent(addon, item, xoffset, yoffset, zoffset, hue, lightsource, null, 1); + } + + private static void AddComplexComponent(BaseAddon addon, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount) + { + AddonComponent ac; + ac = new AddonComponent(item); + ac.Weight = -2.0; + if (name != null && name.Length > 0) + ac.Name = name; + if (hue != 0) + ac.Hue = hue; + if (amount > 1) + { + ac.Stackable = true; + ac.Amount = amount; + } + if (lightsource != -1) + ac.Light = LightType.Circle300; + addon.AddComponent(ac, xoffset, yoffset, zoffset); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( 0 ); // Version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Citizens/Citizen.cs b/Scripts/Mobiles/Towns/Citizens/Citizen.cs new file mode 100644 index 0000000..6086430 --- /dev/null +++ b/Scripts/Mobiles/Towns/Citizens/Citizen.cs @@ -0,0 +1,307 @@ +using System; +using System.Collections; +using Server.Items; +using Server.ContextMenus; +using Server.Misc; +using Server.Network; + +namespace Server.Mobiles +{ + public class Citizen : BaseCreature + { + public override bool ClickTitle{ get{ return false; } } + public override bool ShowFameTitle { get { return false; } } + public override bool DeleteCorpseOnDeath{ get{ return true; } } + + public DateTime m_NextTalk; + public DateTime NextTalk{ get{ return m_NextTalk; } set{ m_NextTalk = value; } } + + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if ( DateTime.Now >= m_NextTalk && InRange( m, 30 ) ) + { + if ( Utility.RandomBool() ){ Server.Misc.CitizenTalking.CitizenTalk( this ); } + m_NextTalk = (DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 15, 45 ) )); + + if ( this is CitizenNorth || this is CitizenSouth || this is CitizenEast || this is CitizenWest ) + Server.Misc.CitizenDressing.RemoveMyGear( this ); + } + } + + [Constructable] + public Citizen() : base( AIType.AI_Citizen, FightMode.None, 10, 1, 0.2, 0.4 ) + { + SpeechHue = Utility.RandomSpeechHue(); + Title = Server.Misc.CitizenTitles.CitizenTitle( this ); + Hue = Utility.RandomSkinHue(); + CantWalk = true; + NameHue = Utility.RandomOrangeHue(); + Invulnerable = true; + Clan = Clan.Citizen; + + SetStr( 300 ); + SetDex( 300 ); + SetInt( 300 ); + + SetDamage( 30, 50 ); + + int hair = Utility.RandomHairHue(); + + if ( this.Female = Utility.RandomBool() ) + { + Body = 0x191; + Name = NameList.RandomName( "female" ); + } + else + { + Body = 0x190; + Name = NameList.RandomName( "male" ); + if ( Utility.RandomBool() ){ Utility.AssignRandomFacialHair( this, hair ); } + } + + Utility.AssignRandomHair( this, hair ); + + Server.Misc.CitizenDressing.CitizenDress( this, 0 ); + } + + public override void OnThink() + { + } + + public override bool IsEnemy( Mobile m ) + { + return false; + } + + public Citizen( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class AdventurerEast : Citizen + { + [Constructable] + public AdventurerEast() : base( ) + { + Direction = Direction.East; + } + + public AdventurerEast( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class AdventurerWest : Citizen + { + [Constructable] + public AdventurerWest() : base( ) + { + Direction = Direction.West; + } + + public AdventurerWest( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class AdventurerSouth : Citizen + { + [Constructable] + public AdventurerSouth() : base( ) + { + Direction = Direction.South; + } + + public AdventurerSouth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class AdventurerNorth : Citizen + { + [Constructable] + public AdventurerNorth() : base( ) + { + Direction = Direction.North; + } + + public AdventurerNorth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class CitizenEast : Citizen + { + [Constructable] + public CitizenEast() : base( ) + { + Direction = Direction.East; + } + + public CitizenEast( Serial serial ) : base( serial ) + { + } + + public override void OnAfterSpawn() + { + base.OnAfterSpawn(); + Server.Misc.CitizenDressing.RemoveMyGear( this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class CitizenWest : Citizen + { + [Constructable] + public CitizenWest() : base( ) + { + Direction = Direction.West; + } + + public CitizenWest( Serial serial ) : base( serial ) + { + } + + public override void OnAfterSpawn() + { + base.OnAfterSpawn(); + Server.Misc.CitizenDressing.RemoveMyGear( this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class CitizenSouth : Citizen + { + [Constructable] + public CitizenSouth() : base( ) + { + Direction = Direction.South; + } + + public CitizenSouth( Serial serial ) : base( serial ) + { + } + + public override void OnAfterSpawn() + { + base.OnAfterSpawn(); + Server.Misc.CitizenDressing.RemoveMyGear( this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + public class CitizenNorth : Citizen + { + [Constructable] + public CitizenNorth() : base( ) + { + Direction = Direction.North; + } + + public CitizenNorth( Serial serial ) : base( serial ) + { + } + + public override void OnThink() + { + Server.Misc.CitizenDressing.RemoveMyGear( this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Citizens/CitizenDress.cs b/Scripts/Mobiles/Towns/Citizens/CitizenDress.cs new file mode 100644 index 0000000..cb4fe5e --- /dev/null +++ b/Scripts/Mobiles/Towns/Citizens/CitizenDress.cs @@ -0,0 +1,463 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Misc +{ + class CitizenDressing + { + public static void CitizenDress( Mobile m, int job ) + { + bool specific = false; + if ( job > 0 ) + specific = true; + + if ( job < 1 ){ job = Utility.RandomMinMax(1,3); } + int weapon = Utility.Random( 40 ); + bool shield = true; + + if ( job == 1 ) // FIGHTER + { + weapon = Utility.RandomMinMax( 4, 32 ); + if ( !specific && Utility.RandomMinMax(1,35) == 1 ) + weapon = Utility.RandomMinMax( 37, 39 ); + + if ( Utility.RandomMinMax(1,20) == 1 ) + { + if ( Utility.RandomBool() ){ m.AddItem( new BoneArms() ); } else { m.AddItem( new OrcHelm() ); } + m.AddItem( new BoneChest() ); + m.AddItem( new BoneGloves() ); + m.AddItem( new BoneHelm() ); + m.AddItem( new BoneLegs() ); + } + else + { + switch ( Utility.Random( 10 ) ) + { + case 0: m.AddItem( new PlateHelm() ); break; + case 1: m.AddItem( new ChainCoif() ); break; + case 2: m.AddItem( new Bascinet() ); break; + case 3: m.AddItem( new CloseHelm() ); break; + case 4: m.AddItem( new Helmet() ); break; + case 5: m.AddItem( new NorseHelm() ); break; + } + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new PlateArms() ); break; + case 1: m.AddItem( new RingmailArms() ); break; + } + switch ( Utility.Random( 2 ) ) + { + case 0: m.AddItem( new PlateGorget() ); break; + } + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new PlateLegs() ); break; + case 1: m.AddItem( new RingmailLegs() ); break; + case 2: m.AddItem( new ChainLegs() ); break; + } + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new PlateGloves() ); break; + case 1: m.AddItem( new RingmailGloves() ); break; + } + switch ( Utility.Random( 3 ) ) + { + case 0: if ( m.Female && Utility.RandomBool() ){ m.AddItem( new FemalePlateChest() ); } else { m.AddItem( new PlateChest() ); } break; + case 1: m.AddItem( new RingmailChest() ); break; + case 2: m.AddItem( new ChainChest() ); break; + } + } + + switch ( Utility.Random( 2 ) ) + { + case 0: m.AddItem( new Boots() ); break; + case 1: m.AddItem( new ThighBoots() ); break; + } + + switch ( Utility.Random( 2 ) ) + { + case 0: m.AddItem( new Cloak( Utility.RandomHue() ) ); break; + } + switch ( Utility.Random( 10 ) ) + { + case 0: m.AddItem( new Robe( Utility.RandomHue() ) ); break; + } + } + else if ( job == 2 ) // THIEF + { + weapon = Utility.RandomList( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 37, 38, 39 ); + + switch ( Utility.Random( 2 ) ) + { + case 0: m.AddItem( new LeatherCap() ); break; + } + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new StuddedArms() ); break; + case 1: m.AddItem( new LeatherArms() ); break; + } + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new StuddedGorget() ); break; + case 1: m.AddItem( new LeatherGorget() ); break; + } + switch ( Utility.Random( 4 ) ) + { + case 0: m.AddItem( new LeatherLegs() ); break; + case 1: m.AddItem( new LeatherShorts() ); break; + case 2: m.AddItem( new LeatherSkirt() ); break; + case 3: m.AddItem( new StuddedLegs() ); break; + } + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new LeatherGloves() ); break; + case 1: m.AddItem( new StuddedGloves() ); break; + } + switch ( Utility.Random( 2 ) ) + { + case 0: if ( m.Female && Utility.RandomBool() ){ m.AddItem( new FemaleStuddedChest() ); } else { m.AddItem( new StuddedChest() ); } break; + case 1: if ( m.Female && Utility.RandomBool() ){ m.AddItem( new FemaleLeatherChest() ); } else { m.AddItem( new LeatherChest() ); } break; + } + switch ( Utility.Random( 2 ) ) + { + case 0: m.AddItem( new Boots() ); break; + case 1: m.AddItem( new ThighBoots() ); break; + } + switch ( Utility.Random( 2 ) ) + { + case 0: m.AddItem( new Cloak( Utility.RandomHue() ) ); break; + } + switch ( Utility.Random( 10 ) ) + { + case 0: m.AddItem( new Robe( Utility.RandomHue() ) ); break; + } + } + else if ( job == 3 ) // WIZARD + { + weapon = Utility.RandomList( 0, 1, 2, 3, 5, 7, 9, 30, 33, 34, 35, 36, 38, 39 ); + + int robeHue = Utility.RandomHue(); + int cloakHue = Utility.RandomHue(); + int hatHue = Utility.RandomList( robeHue, cloakHue ); + + bool robed = false; + bool cloaked = false; + + switch ( Utility.Random( 5 ) ) + { + case 0: m.AddItem( new FancyShirt( Utility.RandomHue() ) ); break; + case 1: m.AddItem( new Doublet( Utility.RandomHue() ) ); break; + case 2: m.AddItem( new Shirt( Utility.RandomHue() ) ); break; + case 3: m.AddItem( new Tunic( Utility.RandomHue() ) ); break; + case 4: m.AddItem( new Surcoat( Utility.RandomHue() ) ); break; + } + + if ( m.Female ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: m.AddItem( new Skirt( Utility.RandomHue() ) ); break; + case 1: m.AddItem( new Kilt( Utility.RandomHue() ) ); break; + case 2: m.AddItem( new LongPants( Utility.RandomHue() ) ); break; + case 3: m.AddItem( new ShortPants( Utility.RandomHue() ) ); break; + } + } + else + { + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new LongPants( Utility.RandomHue() ) ); break; + case 1: m.AddItem( new ShortPants( Utility.RandomHue() ) ); break; + case 2: m.AddItem( new Kilt( Utility.RandomHue() ) ); break; + } + } + + switch ( Utility.Random( 4 ) ) + { + case 0: m.AddItem( new Shoes( Utility.RandomNeutralHue() ) ); break; + case 1: m.AddItem( new Boots( Utility.RandomNeutralHue() ) ); break; + case 2: m.AddItem( new Sandals( Utility.RandomNeutralHue() ) ); break; + case 3: m.AddItem( new ThighBoots( Utility.RandomNeutralHue() ) ); break; + } + + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new LeatherGloves() ); break; + } + + if ( Utility.RandomBool() ){ m.AddItem( new Cloak( cloakHue ) ); cloaked = true; } + + switch ( Utility.Random( 5 ) ) + { + case 0: if ( m.Female ){ m.AddItem( new PlainDress( robeHue ) ); } else { m.AddItem( new Robe( robeHue ) ); } robed = true; break; + case 1: if ( m.Female ){ m.AddItem( new FancyDress( robeHue ) ); } else { m.AddItem( new Robe( robeHue ) ); } robed = true; break; + case 2: m.AddItem( new Robe( robeHue ) ); robed = true; break; + } + + if ( robed && !cloaked ){ hatHue = robeHue; } + else if ( !robed && cloaked ){ hatHue = cloakHue; } + + switch ( Utility.Random( 13 ) ) + { + case 0: m.AddItem( new FloppyHat( hatHue ) ); break; + case 1: m.AddItem( new Hood( hatHue ) ); break; + case 2: m.AddItem( new WideBrimHat( hatHue ) ); break; + case 3: m.AddItem( new Cap( hatHue ) ); break; + case 4: m.AddItem( new SkullCap( hatHue ) ); break; + case 5: m.AddItem( new Bandana( hatHue ) ); break; + case 6: m.AddItem( new FeatheredHat( hatHue ) ); break; + case 7: m.AddItem( new Hood( hatHue ) ); break; + case 8: m.AddItem( new WizardsHat( hatHue ) ); break; + case 9: m.AddItem( new WizardsHat( hatHue ) ); break; + } + } + else if ( job == 4 ) // BRIGAND + { + weapon = Utility.RandomList( 1000 ); + + switch ( Utility.Random( 8 )) + { + case 0: m.AddItem( new Longsword() ); break; + case 1: m.AddItem( new Cutlass() ); break; + case 2: m.AddItem( new Broadsword() ); break; + case 3: m.AddItem( new Axe() ); break; + case 4: m.AddItem( new Club() ); break; + case 5: m.AddItem( new Dagger() ); break; + case 6: m.AddItem( new Rapier() ); break; + case 7: m.AddItem( new Whip() ); break; + } + + if ( Utility.RandomBool() ) + { + switch ( Utility.Random( 4 )) + { + case 0: m.AddItem( new Buckler() ); break; + case 1: m.AddItem( new WoodenShield() ); break; + case 2: m.AddItem( new WoodenKiteShield() ); break; + case 3: m.AddItem( new MetalShield() ); break; + } + } + + switch ( Utility.Random( 5 ) ) + { + case 0: m.AddItem( new FancyShirt( Utility.RandomHue() ) ); break; + case 1: m.AddItem( new Doublet( Utility.RandomHue() ) ); break; + case 2: m.AddItem( new Shirt( Utility.RandomHue() ) ); break; + case 3: m.AddItem( new Tunic( Utility.RandomHue() ) ); break; + case 4: m.AddItem( new Surcoat( Utility.RandomHue() ) ); break; + } + + if ( m.Female ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: m.AddItem( new Skirt( Utility.RandomHue() ) ); break; + case 1: m.AddItem( new Kilt( Utility.RandomHue() ) ); break; + case 2: m.AddItem( new LongPants( Utility.RandomHue() ) ); break; + case 3: m.AddItem( new ShortPants( Utility.RandomHue() ) ); break; + } + } + else + { + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new LongPants( Utility.RandomHue() ) ); break; + case 1: m.AddItem( new ShortPants( Utility.RandomHue() ) ); break; + case 2: m.AddItem( new Kilt( Utility.RandomHue() ) ); break; + } + } + + switch ( Utility.Random( 4 ) ) + { + case 0: m.AddItem( new Shoes( Utility.RandomNeutralHue() ) ); break; + case 1: m.AddItem( new Boots( Utility.RandomNeutralHue() ) ); break; + case 2: m.AddItem( new Sandals( Utility.RandomNeutralHue() ) ); break; + case 3: m.AddItem( new ThighBoots( Utility.RandomNeutralHue() ) ); break; + } + + if ( Utility.RandomBool() ) + { + switch ( Utility.Random( 7 ) ) + { + case 0: m.AddItem( new FloppyHat( Utility.RandomHue() ) ); break; + case 1: m.AddItem( new Hood( Utility.RandomHue() ) ); break; + case 2: m.AddItem( new WideBrimHat( Utility.RandomHue() ) ); break; + case 3: m.AddItem( new Cap( Utility.RandomHue() ) ); break; + case 4: m.AddItem( new SkullCap( Utility.RandomHue() ) ); break; + case 5: m.AddItem( new Bandana( Utility.RandomHue() ) ); break; + case 6: m.AddItem( new FeatheredHat( Utility.RandomHue() ) ); break; + } + } + + if ( Utility.RandomBool() ) + { + m.AddItem( new Cloak( Utility.RandomHue() ) ); + } + + if ( Utility.RandomBool() ) + { + m.AddItem( new Robe( Utility.RandomHue() ) ); + } + } + else if ( job == 5 ) // EVIL MAGE + { + weapon = 1000; + + int robeHue = Utility.RandomEvilHue(); + int cloakHue = Utility.RandomEvilHue(); + int shirtHue = Utility.RandomEvilHue(); + int legsHue = Utility.RandomEvilHue(); + int hatHue = Utility.RandomList( robeHue, cloakHue ); + + bool robed = false; + bool cloaked = false; + + switch ( Utility.Random( 5 ) ) + { + case 0: m.AddItem( new FancyShirt( shirtHue ) ); break; + case 1: m.AddItem( new Doublet( shirtHue ) ); break; + case 2: m.AddItem( new Shirt( shirtHue ) ); break; + case 3: m.AddItem( new Tunic( shirtHue ) ); break; + case 4: m.AddItem( new Surcoat( shirtHue ) ); break; + } + + if ( m.Female ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: m.AddItem( new Skirt( legsHue ) ); break; + case 1: m.AddItem( new Kilt( legsHue ) ); break; + case 2: m.AddItem( new LongPants( legsHue ) ); break; + case 3: m.AddItem( new ShortPants( legsHue ) ); break; + } + } + else + { + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new LongPants( legsHue ) ); break; + case 1: m.AddItem( new ShortPants( legsHue ) ); break; + case 2: m.AddItem( new Kilt( legsHue ) ); break; + } + } + + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new Shoes( Utility.RandomEvilHue() ) ); break; + case 1: m.AddItem( new Boots() ); break; + case 2: m.AddItem( new ThighBoots() ); break; + } + + if ( Utility.RandomBool() ){ m.AddItem( new Cloak( cloakHue ) ); cloaked = true; } + + switch ( Utility.Random( 3 ) ) + { + case 0: if ( m.Female ){ m.AddItem( new PlainDress( robeHue ) ); } else { m.AddItem( new Robe( robeHue ) ); } robed = true; break; + case 1: if ( m.Female ){ m.AddItem( new FancyDress( robeHue ) ); } else { m.AddItem( new Robe( robeHue ) ); } robed = true; break; + case 2: m.AddItem( new Robe( robeHue ) ); robed = true; break; + } + + if ( robed && !cloaked ){ hatHue = robeHue; } + else if ( !robed && cloaked ){ hatHue = cloakHue; } + + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new Hood( hatHue ) ); break; + case 1: m.AddItem( new WizardsHat( hatHue ) ); break; + } + } + + switch ( weapon ) + { + case 0: m.AddItem( new ButcherKnife() ); break; + case 1: m.AddItem( new Cleaver() ); break; + case 2: m.AddItem( new Dagger() ); break; + case 3: m.AddItem( new SkinningKnife() ); break; + + case 4: m.AddItem( new Broadsword() ); break; + case 5: m.AddItem( new Cutlass() ); break; + case 6: m.AddItem( new Katana() ); break; + case 7: m.AddItem( new Kryss() ); break; + case 8: m.AddItem( new Longsword() ); break; + case 9: m.AddItem( new Scimitar() ); break; + case 10: m.AddItem( new ThinLongsword() ); break; + case 11: m.AddItem( new VikingSword() ); break; + case 12: m.AddItem( new Scythe() ); shield = false; break; + case 13: m.AddItem( new Rapier() ); break; + + case 14: m.AddItem( new BattleAxe() ); shield = false; break; + case 15: m.AddItem( new DoubleAxe() ); shield = false; break; + case 16: m.AddItem( new GreatAxe() ); shield = false; break; + case 17: m.AddItem( new LargeBattleAxe() ); shield = false; break; + case 18: m.AddItem( new Pickaxe() ); shield = false; break; + case 19: m.AddItem( new TwoHandedAxe() ); shield = false; break; + case 20: m.AddItem( new WarAxe() ); shield = false; break; + case 21: m.AddItem( new Axe() ); shield = false; break; + + case 22: m.AddItem( new Spear() ); shield = false; break; + case 23: m.AddItem( new Pitchfork() ); shield = false; break; + case 24: m.AddItem( new Pike() ); shield = false; break; + + case 25: m.AddItem( new Bardiche() ); shield = false; break; + case 26: m.AddItem( new Halberd() ); shield = false; break; + + case 27: m.AddItem( new Club() ); break; + case 28: m.AddItem( new HammerPick() ); break; + case 29: m.AddItem( new Mace() ); break; + case 30: m.AddItem( new Maul() ); break; + case 31: m.AddItem( new WarHammer() ); break; + case 32: m.AddItem( new WarMace() ); break; + + case 33: m.AddItem( new BlackStaff() ); shield = false; break; + case 34: m.AddItem( new GnarledStaff() ); shield = false; break; + case 35: m.AddItem( new QuarterStaff() ); shield = false; break; + case 36: m.AddItem( new ShepherdsCrook() ); shield = false; break; + + case 37: m.AddItem( new HeavyCrossbow() ); shield = false; break; + case 38: m.AddItem( new Bow() ); shield = false; break; + case 39: m.AddItem( new Crossbow() ); shield = false; break; + } + + if ( shield && job == 1 && Utility.RandomBool() ) + { + switch ( Utility.Random( 8 ) ) + { + case 0: m.AddItem( new BronzeShield() ); break; + case 1: m.AddItem( new ChaosShield() ); break; + case 2: m.AddItem( new HeaterShield() ); break; + case 3: m.AddItem( new MetalKiteShield() ); break; + case 4: m.AddItem( new MetalShield() ); break; + case 5: m.AddItem( new OrderShield() ); break; + case 6: m.AddItem( new WoodenKiteShield() ); break; + case 7: m.AddItem( new WoodenShield() ); break; + } + } + else if ( shield && job == 2 && Utility.RandomBool() ) + { + switch ( Utility.Random( 3 ) ) + { + case 0: m.AddItem( new Buckler() ); break; + case 1: m.AddItem( new WoodenKiteShield() ); break; + case 2: m.AddItem( new WoodenShield() ); break; + } + } + else if ( shield && job == 3 && Utility.RandomBool() ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: m.AddItem( new Buckler() ); break; + } + } + } + + public static void RemoveMyGear( Mobile m ) + { + if ( m.FindItemOnLayer( Layer.OneHanded ) != null ) { m.FindItemOnLayer( Layer.OneHanded ).Delete(); } + if ( m.FindItemOnLayer( Layer.TwoHanded ) != null ) { m.FindItemOnLayer( Layer.TwoHanded ).Delete(); } + if ( m.FindItemOnLayer( Layer.FirstValid ) != null ) { m.FindItemOnLayer( Layer.FirstValid ).Delete(); } + if ( m.FindItemOnLayer( Layer.Helm ) != null ) { m.FindItemOnLayer( Layer.Helm ).Delete(); } + if ( m.FindItemOnLayer( Layer.Gloves ) != null ) { m.FindItemOnLayer( Layer.Gloves ).Delete(); } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Citizens/CitizenTalk.cs b/Scripts/Mobiles/Towns/Citizens/CitizenTalk.cs new file mode 100644 index 0000000..87d72c8 --- /dev/null +++ b/Scripts/Mobiles/Towns/Citizens/CitizenTalk.cs @@ -0,0 +1,165 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Misc +{ + class CitizenTalking + { + public static void CitizenTalk( Mobile m ) + { + string sSourceName = NameList.RandomName( "male" ); + string sSourceJob = NameList.RandomName( "career" ); + if ( Utility.RandomBool() ) + sSourceName = NameList.RandomName( "female" ); + + string sSource = "I heard about"; + switch( Utility.RandomMinMax( 1, 13 ) ) + { + case 1: sSource = "Rumors are spoken about"; break; + case 2: sSource = "They are talking about"; break; + case 3: sSource = "There are rumors about"; break; + case 4: sSource = "I was told about"; break; + case 5: sSource = "I heard someone talking about"; break; + case 6: sSource = "There is a story about"; break; + case 7: sSource = sSourceName + " told me about"; break; + case 8: sSource = sSourceName + " the " + sSourceJob + " told me about"; break; + case 9: sSource = "Some " + sSourceJob + " told me about"; break; + case 10: sSource = sSourceName + " the " + sSourceJob + " heard about"; break; + case 11: sSource = "Some " + sSourceJob + " heard about"; break; + case 12: sSource = sSourceName + " the " + sSourceJob + " learned about"; break; + case 13: sSource = "Some " + sSourceJob + " learned about"; break; + } + + string sPren = "this"; + switch( Utility.RandomMinMax( 1, 4 ) ) + { + case 1: sPren = "a"; break; + case 2: sPren = "the"; break; + case 3: sPren = "that"; break; + } + + string sThey = NameList.RandomName( "male" ); + if ( Utility.RandomBool() ) + sThey = NameList.RandomName( "female" ); + + string city = NameList.RandomName( "city" ); + + string dungeon = NameList.RandomName( "dungeon" ); + + string sAdventurer = NameList.RandomName( "adventurer" ); + + string sDebt = NameList.RandomName( "debt" ); + + int relic = Utility.RandomMinMax( 1, 59 ); + + string sSpeech = "We are supposed to wait for " + sThey + "."; + switch( Utility.RandomMinMax( 1, 10 ) ) + { + case 1: sSpeech = "We are supposed to wait for " + sThey + "."; break; + case 2: sSpeech = sThey + " lives somewhere near " + city + "."; break; + case 3: sSpeech = "We will go find " + sThey + " tomorrow."; break; + case 4: sSpeech = "We need to split this loot we have."; break; + case 5: sSpeech = sThey + " still owes me " + Utility.RandomMinMax( 5, 200 ) + " gold " + sDebt + "."; break; + case 6: sSpeech = "I think " + sThey + " stole it while we were " + NameList.RandomName( "action" ) + "."; break; + case 7: sSpeech = sThey + " will bring it here when they find it."; break; + case 8: sSpeech = NameList.RandomName( "question" ) + " " + sThey + "?"; break; + case 9: sSpeech = sThey + " sold " + sPren + " " + NameList.RandomName( "describe" ) + " " + NameList.RandomName( "item" ) + " for " + Utility.RandomMinMax( 5, 200 ) + " gold."; break; + case 10: sSpeech = "I paid " + sThey + " " + Utility.RandomMinMax( 5, 200 ) + " gold for " + sPren + " " + NameList.RandomName( "describe" ) + " " + NameList.RandomName( "item" ) + "."; break; + } + + string sHappen = "A friend of mine died"; string sEnd = "."; + switch( Utility.RandomMinMax( 0, 35 ) ) + { + case 0: sHappen = "A friend of mine was lost in"; sEnd = "."; break; + case 1: sHappen = "A friend of mine died in"; sEnd = "."; break; + case 2: sHappen = "I lost that weapon in"; sEnd = "."; break; + case 3: sHappen = "Have you ever been to"; sEnd = "?"; break; + case 4: sHappen = "Have you ever heard of"; sEnd = "?"; break; + case 5: sHappen = "When did you go to"; sEnd = "?"; break; + case 6: sHappen = "How did you get to"; sEnd = "?"; break; + case 7: sHappen = "Why did you go to"; sEnd = "?"; break; + case 8: sHappen = "What did you find in"; sEnd = "?"; break; + case 9: sHappen = "You found that in"; sEnd = "?"; break; + case 10: sHappen = "They died in"; sEnd = "."; break; + case 11: sHappen = "I have never been to"; sEnd = "."; break; + case 12: sHappen = "That artifact came from"; sEnd = "."; break; + case 13: sHappen = "They got lost in"; sEnd = "."; break; + case 14: sHappen = "They vanished in"; sEnd = "."; break; + case 15: sHappen = "I almost didn't make it out of"; sEnd = "."; break; + case 16: sHappen = "They didn't make it out of"; sEnd = "."; break; + case 17: sHappen = "I lost that magic item in"; sEnd = "."; break; + case 18: sHappen = "Did you lose it in"; sEnd = "?"; break; + case 19: sHappen = "We should go search in"; sEnd = "."; break; + case 20: sHappen = "We should go explore in"; sEnd = "."; break; + case 21: sHappen = "Tonight we will go to"; sEnd = "."; break; + case 22: sHappen = sThey + " was lost in"; sEnd = "."; break; + case 23: sHappen = sThey + " died in"; sEnd = "."; break; + case 24: sHappen = sThey + " lost that weapon in"; sEnd = "."; break; + case 25: sHappen = "When did " + sThey + " go to"; sEnd = "?"; break; + case 26: sHappen = "How did " + sThey + " get to"; sEnd = "?"; break; + case 27: sHappen = "Why did " + sThey + " go to"; sEnd = "?"; break; + case 28: sHappen = "What did " + sThey + " find in"; sEnd = "?"; break; + case 29: sHappen = sThey + " found that in"; sEnd = "?"; break; + case 30: sHappen = sThey + " has never been to"; sEnd = "."; break; + case 31: sHappen = sThey + " vanished in"; sEnd = "."; break; + case 32: sHappen = sThey + " almost didn't make it out of"; sEnd = "."; break; + case 33: sHappen = sThey + " didn't make it out of"; sEnd = "."; break; + case 34: sHappen = sThey + " lost that magic item in"; sEnd = "."; break; + case 35: sHappen = "Did " + sThey + " lose it in"; sEnd = "?"; break; + } + + string sEvent = sHappen + " " + dungeon + sEnd; + + int iWillSay = Utility.RandomMinMax( 1, 8 ); + + if ( iWillSay < 3 ) + { + switch( Utility.RandomMinMax( 1, 39 ) ) + { + case 1: m.PlaySound( m.Female ? 778 : 1049 ); m.Say( "*ah!*" ); break; + case 2: m.PlaySound( m.Female ? 779 : 1050 ); m.Say( "Ah ha!" ); break; + case 3: m.PlaySound( m.Female ? 780 : 1051 ); m.Say( "*applauds*" ); break; + case 4: m.PlaySound( m.Female ? 781 : 1052 ); m.Say( "*blows nose*" ); break; + case 5: m.PlaySound( m.Female ? 786 : 1057 ); m.Say( "*cough*" ); break; + case 6: m.PlaySound( m.Female ? 782 : 1053 ); m.Say( "*burp*" ); break; + case 7: m.PlaySound( m.Female ? 784 : 1055 ); m.Say( "*clears throat*" ); break; + case 8: m.PlaySound( m.Female ? 785 : 1056 ); m.Say( "*cough*" ); break; + case 9: m.PlaySound( m.Female ? 787 : 1058 ); m.Say( "*cries*" ); break; + case 10: m.PlaySound( m.Female ? 792 : 1064 ); m.Say( "*farts*" ); break; + case 11: m.PlaySound( m.Female ? 793 : 1065 ); m.Say( "*gasp*" ); break; + case 12: m.PlaySound( m.Female ? 794 : 1066 ); m.Say( "*giggles*" ); break; + case 13: m.PlaySound( m.Female ? 0x31B : 0x42B ); m.Say( "*groans*" ); break; + case 14: m.PlaySound( m.Female ? 0x338 : 0x44A ); m.Say( "*growls*" ); break; + case 15: m.PlaySound( m.Female ? 797 : 1069 ); m.Say( "Hey!" ); break; + case 16: m.PlaySound( m.Female ? 798 : 1070 ); m.Say( "*hiccup*" ); break; + case 17: m.PlaySound( m.Female ? 799 : 1071 ); m.Say( "Huh?" ); break; + case 18: m.PlaySound( m.Female ? 801 : 1073 ); m.Say( "*laughs*" ); break; + case 19: m.PlaySound( m.Female ? 802 : 1074 ); m.Say( "No!" ); break; + case 20: m.PlaySound( m.Female ? 803 : 1075 ); m.Say( "Oh!" ); break; + case 21: m.PlaySound( m.Female ? 811 : 1085 ); m.Say( "Oooh." ); break; + case 22: m.PlaySound( m.Female ? 812 : 1086 ); m.Say( "Oops!" ); break; + case 23: m.PlaySound( m.Female ? 0x32E : 0x440 ); m.Say( "Ahhhh!" ); break; + case 24: m.PlaySound( m.Female ? 815 : 1089 ); m.Say( "Shhh!" ); break; + case 25: m.PlaySound( m.Female ? 816 : 1090 ); m.Say( "*sigh*" ); break; + case 26: m.PlaySound( m.Female ? 817 : 1091 ); m.Say( "Ahh-choo!" ); break; + case 27: m.PlaySound( m.Female ? 818 : 1092 ); m.Say( "*sniff*" ); break; + case 28: m.PlaySound( m.Female ? 819 : 1093 ); m.Say( "*snore*" ); break; + case 29: m.PlaySound( m.Female ? 820 : 1094 ); m.Say( "*spits*" ); break; + case 30: m.PlaySound( m.Female ? 821 : 1095 ); m.Say( "*whistles*" ); break; + case 31: m.PlaySound( m.Female ? 783 : 1054 ); m.Say( "Woohoo!" ); break; + case 32: m.PlaySound( m.Female ? 822 : 1096 ); m.Say( "*yawns*" ); break; + case 33: m.PlaySound( m.Female ? 823 : 1097 ); m.Say( "Yea!" ); break; + case 34: m.PlaySound( m.Female ? 0x31C : 0x42C ); m.Say( "*yells*" ); break; + case 35: m.PlaySound( Utility.RandomList( 0x30, 0x2D6 ) ); break; + case 36: m.PlaySound( Utility.RandomList( 0x30, 0x2D6 ) ); break; + case 37: m.PlaySound( Utility.RandomList( 0x30, 0x2D6 ) ); break; + case 38: m.PlaySound( Utility.RandomList( 0x30, 0x2D6 ) ); break; + case 39: m.PlaySound( Utility.RandomList( 0x30, 0x2D6 ) ); break; + } + } + else if ( iWillSay < 5 ){ m.Say( sEvent ); } + else { m.Say( sSpeech ); } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Citizens/CitizenTitles.cs b/Scripts/Mobiles/Towns/Citizens/CitizenTitles.cs new file mode 100644 index 0000000..657c988 --- /dev/null +++ b/Scripts/Mobiles/Towns/Citizens/CitizenTitles.cs @@ -0,0 +1,264 @@ +using System; +using Server.Items; +using Server.Misc; + +namespace Server.Misc +{ + class CitizenTitles + { + public static string CitizenTitle( Mobile m ) + { + string sTitle = ""; + string myTitle = ""; + + int otitle = Utility.RandomMinMax( 1, 33 ); + if (otitle == 1){sTitle = "of the North";} + else if (otitle == 2){sTitle = "of the South";} + else if (otitle == 3){sTitle = "of the East";} + else if (otitle == 4){sTitle = "of the West";} + else if (otitle == 5){sTitle = "of the City";} + else if (otitle == 6){sTitle = "of the Hills";} + else if (otitle == 7){sTitle = "of the Mountains";} + else if (otitle == 8){sTitle = "of the Plains";} + else if (otitle == 9){sTitle = "of the Woods";} + else if (otitle == 10){sTitle = "of the Light";} + else if (otitle == 11){sTitle = "of the Dark";} + else if (otitle == 12){sTitle = "of the Night";} + else if (otitle == 13){sTitle = "of the Sea";} + else if (otitle == 14){sTitle = "of the Desert";} + else if (otitle == 15){sTitle = "of the Order";} + else if (otitle == 16){sTitle = "of the Forest";} + else if (otitle == 17){sTitle = "of the Snow";} + else if (otitle == 18){sTitle = "of the Coast";} + else if (otitle == 19){sTitle = "of the Arid Wastes";} + else if (otitle == 20){sTitle = "of the Beetling Brow";} + else if (otitle == 21){sTitle = "of the Cyclopean City";} + else if (otitle == 22){sTitle = "of the Dread Wilds";} + else if (otitle == 23){sTitle = "of the Eerie Eyes";} + else if (otitle == 24){sTitle = "of the Foetid Swamp";} + else if (otitle == 25){sTitle = "of the Forgotten City";} + else if (otitle == 26){sTitle = "of the Haunted Heath";} + else if (otitle == 27){sTitle = "of the Hidden Valley";} + else if (otitle == 28){sTitle = "of the Howling Hills";} + else if (otitle == 29){sTitle = "of the Jagged Peaks";} + else if (otitle == 30){sTitle = "of the Menacing Mien";} + else if (otitle == 31){sTitle = "of the Savage Isle";} + else if (otitle == 32){sTitle = "of the Tangled Woods";} + else {sTitle = "of the Watchful Eyes";} + + string sColor = "Red"; + switch( Utility.RandomMinMax( 0, 9 ) ) + { + case 0: sColor = "Black"; break; + case 1: sColor = "Blue"; break; + case 2: sColor = "Gray"; break; + case 3: sColor = "Green"; break; + case 4: sColor = "Red"; break; + case 5: sColor = "Brown"; break; + case 6: sColor = "Orange"; break; + case 7: sColor = "Yellow"; break; + case 8: sColor = "Purple"; break; + case 9: sColor = "White"; break; + } + + string gColor = "Gold"; + switch( Utility.RandomMinMax( 0, 11 ) ) + { + case 0: gColor = "Gold"; break; + case 1: gColor = "Silver"; break; + case 2: gColor = "Arcane"; break; + case 3: gColor = "Iron"; break; + case 4: gColor = "Steel"; break; + case 5: gColor = "Emerald"; break; + case 6: gColor = "Ruby"; break; + case 7: gColor = "Bronze"; break; + case 8: gColor = "Jade"; break; + case 9: gColor = "Sapphire"; break; + case 10: gColor = "Copper"; break; + case 11: gColor = "Royal"; break; + } + + string kKiller = "Giants"; + switch( Utility.RandomMinMax( 0, 12 ) ) + { + case 0: kKiller = "Giants"; break; + case 1: kKiller = "Dragons"; break; + case 2: kKiller = "Ogres"; break; + case 3: kKiller = "Trolls"; break; + case 4: kKiller = "Daemons"; break; + case 5: kKiller = "Devils"; break; + case 6: kKiller = "Lizards"; break; + case 7: kKiller = "Orcs"; break; + case 8: kKiller = "Minotaurs"; break; + case 9: kKiller = "Monsters"; break; + case 10: kKiller = "Undead"; break; + case 11: kKiller = "Serpents"; break; + case 12: kKiller = "Vampires"; break; + } + + string mKiller = "Giant"; + switch( Utility.RandomMinMax( 0, 12 ) ) + { + case 0: mKiller = "Giant"; break; + case 1: mKiller = "Dragon"; break; + case 2: mKiller = "Ogre"; break; + case 3: mKiller = "Troll"; break; + case 4: mKiller = "Daemon"; break; + case 5: mKiller = "Devil"; break; + case 6: mKiller = "Lizard"; break; + case 7: mKiller = "Orc"; break; + case 8: mKiller = "Minotaur"; break; + case 9: mKiller = "Monster"; break; + case 10: mKiller = "Undead"; break; + case 11: mKiller = "Serpent"; break; + case 12: mKiller = "Vampire"; break; + } + + string aKiller = "Slayer"; + switch( Utility.RandomMinMax( 0, 4 ) ) + { + case 0: aKiller = "Slayer"; break; + case 1: aKiller = "Killer"; break; + case 2: aKiller = "Butcher"; break; + case 3: aKiller = "Executioner"; break; + case 4: aKiller = "Hunter"; break; + } + + switch ( Utility.RandomMinMax( 0, 107 ) ) + { + case 0: myTitle = "from Above"; break; + case 1: myTitle = "from Afar"; break; + case 2: myTitle = "from Below"; break; + case 3: myTitle = "of the " + sColor + " Cloak"; break; + case 4: myTitle = "of the " + sColor + " Robe"; break; + case 5: myTitle = "of the " + sColor + " Order"; break; + case 6: myTitle = "of the " + gColor + " Shield"; break; + case 7: myTitle = "of the " + gColor + " Sword"; break; + case 8: myTitle = "of the " + gColor + " Helm"; break; + case 9: myTitle = sTitle; break; + case 10: myTitle = sTitle; break; + case 11: myTitle = sTitle; break; + case 12: myTitle = sTitle; break; + case 13: myTitle = sTitle; break; + case 14: myTitle = sTitle; break; + case 15: myTitle = sTitle; break; + case 16: myTitle = sTitle; break; + case 17: myTitle = sTitle; break; + case 18: myTitle = sTitle; break; + case 19: myTitle = sTitle; break; + case 20: myTitle = sTitle; break; + case 21: myTitle = sTitle; break; + case 22: myTitle = "the " + sColor; break; + case 23: myTitle = "the Adept"; break; + case 24: myTitle = "the Nomad"; break; + case 25: myTitle = "the Antiquarian"; break; + case 26: myTitle = "the Arcane"; break; + case 27: myTitle = "the Archaic"; break; + case 28: myTitle = "the Barbarian"; break; + case 29: myTitle = "the Batrachian"; break; + case 30: myTitle = "the Battler"; break; + case 31: myTitle = "the Bilious"; break; + case 32: myTitle = "the Bold"; break; + case 33: myTitle = "the Fearless"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Brave";} break; + case 34: myTitle = "the Savage"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Civilized";} break; + case 35: myTitle = "the Collector"; break; + case 36: myTitle = "the Cryptic"; break; + case 37: myTitle = "the Curious"; break; + case 38: myTitle = "the Dandy"; break; + case 39: myTitle = "the Daring"; break; + case 40: myTitle = "the Decadent"; break; + case 41: myTitle = "the Delver"; break; + case 42: myTitle = "the Distant"; break; + case 43: myTitle = "the Eldritch"; break; + case 44: myTitle = "the Exotic"; break; + case 45: myTitle = "the Explorer"; break; + case 46: myTitle = "the Fair"; break; + case 47: myTitle = "the Strong"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Weak";} break; + case 48: myTitle = "the Fickle"; break; + case 49: + int iDice = Utility.RandomMinMax( 1, 10 ); + if (iDice == 1){myTitle = "the First";} + else if (iDice == 2){myTitle = "the Second";} + else if (iDice == 3){myTitle = "the Third";} + else if (iDice == 4){myTitle = "the Fourth";} + else if (iDice == 5){myTitle = "the Fifth";} + else if (iDice == 6){myTitle = "the Sixth";} + else if (iDice == 7){myTitle = "the Seventh";} + else if (iDice == 8){myTitle = "the Eighth";} + else if (iDice == 9){myTitle = "the Ninth";} + else {myTitle = "the Tenth";} + break; + case 50: myTitle = "the Foul"; break; + case 51: myTitle = "the Furtive"; break; + case 52: myTitle = "the Gambler"; break; + case 53: myTitle = "the Ghastly"; break; + case 54: myTitle = "the Gibbous"; break; + case 55: myTitle = "the Great"; break; + case 56: myTitle = "the Grizzled"; break; + case 57: myTitle = "the Gruff"; break; + case 58: myTitle = "the Spiritual"; break; + case 59: myTitle = "the Haunted"; break; + case 60: myTitle = "the Calm"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Frantic";} break; + case 61: + int iDice2 = Utility.RandomMinMax( 1, 4 ); + if (iDice2 == 1){myTitle = "the Hooded";} + else if (iDice2 == 2){myTitle = "the Cloaked";} + else if (iDice2 == 3){myTitle = "the Cowled";} + else {myTitle = "the Robed";} + break; + case 62: myTitle = "the Hunter"; break; + case 63: myTitle = "the Imposing"; break; + case 64: myTitle = "the Irreverent"; break; + case 65: myTitle = "the Loathsome"; break; + case 66: + int iDice3 = Utility.RandomMinMax( 1, 3 ); + if (iDice3 == 1){myTitle = "the Quiet";} + else if (iDice3 == 2){myTitle = "the Silent";} + else {myTitle = "the Loud";} + break; + case 67: myTitle = "the Lovely"; break; + case 68: myTitle = "the Mantled"; break; + case 69: myTitle = "the Masked"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Veiled";} break; + case 70: myTitle = "the Merciful"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Merciless";} break; + case 71: myTitle = "the Mercurial"; break; + case 72: myTitle = "the Mighty"; break; + case 73: myTitle = "the Morose"; break; + case 74: myTitle = "the Mutable"; break; + case 75: myTitle = "the Mysterious"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Unknown";} break; + case 76: myTitle = "the Obscure"; break; + case 77: myTitle = "the Old"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Young";} break; + case 78: myTitle = "the Ominous"; break; + case 79: myTitle = "the Peculiar"; break; + case 80: myTitle = "the Perceptive"; break; + case 81: myTitle = "the Pious"; break; + case 82: myTitle = "the Quick"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Slow";} break; + case 83: myTitle = "the Ragged"; break; + case 84: myTitle = "the Ready"; break; + case 85: myTitle = "the Rough"; break; + case 86: myTitle = "the Rugose"; break; + case 87: myTitle = "the Scarred"; break; + case 88: myTitle = "the Searcher"; break; + case 89: myTitle = "the Shadowy"; break; + case 90: myTitle = "the Short"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Tall";} break; + case 91: myTitle = "the Steady"; break; + case 92: myTitle = "the Uncanny"; break; + case 93: myTitle = "the Unexpected"; break; + case 94: myTitle = "the Unknowable"; break; + case 95: myTitle = "the Verbose"; break; + case 96: myTitle = "the Vigorous"; break; + case 97: myTitle = "the Traveler"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Wanderer";} break; + case 98: myTitle = "the Wary"; break; + case 99: myTitle = "the Weird"; break; + case 100: myTitle = "the Steady"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Unready";} break; + case 101: myTitle = "the Gentle"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Cruel";} break; + case 102: myTitle = "the Lost"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Exiled";} break; + case 103: myTitle = "the Careless"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Clumsy";} break; + case 104: myTitle = "the Hopeful"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Trustful";} break; + case 105: myTitle = "the Angry"; if (Utility.RandomMinMax( 1, 2 ) == 1){myTitle = "the Timid";} break; + case 106: myTitle = "the " + aKiller + " of " + kKiller; break; + case 107: myTitle = "the " + mKiller + " " + aKiller; break; + } + return myTitle; + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guard.cs b/Scripts/Mobiles/Towns/Guard.cs new file mode 100644 index 0000000..8e9edf9 --- /dev/null +++ b/Scripts/Mobiles/Towns/Guard.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections; +using Server.Items; +using Server.ContextMenus; +using Server.Misc; +using Server.Network; +using Server.Spells.Seventh; + +namespace Server.Mobiles +{ + public class Guard : BaseCreature + { + public override bool ClickTitle{ get{ return false; } } + public override bool DeleteCorpseOnDeath{ get{ return true; } } + + [Constructable] + public Guard() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + SpeechHue = Utility.RandomSpeechHue(); + Title = "the guard"; + Hue = Utility.RandomSkinHue(); + NameHue = 1154; + Clan = Clan.Citizen; + + int hair = Utility.RandomHairHue(); + + if ( this.Female = Utility.RandomBool() ) + { + Body = 0x191; + Name = NameList.RandomName( "female" ); + } + else + { + Body = 0x190; + Name = NameList.RandomName( "male" ); + if ( Utility.RandomBool() ){ Utility.AssignRandomFacialHair( this, hair ); } + } + + Utility.AssignRandomHair( this, hair ); + + SetStr( 300 ); + SetDex( 100 ); + SetInt( 75 ); + + SetDamage( 30, 50 ); + + SetSkill( SkillName.MagicResist, 100.0 ); + SetSkill( SkillName.Swords, 100.0 ); + SetSkill( SkillName.Fencing, 100.0 ); + SetSkill( SkillName.Parry, 100.0 ); + SetSkill( SkillName.Tactics, 100.0 ); + } + + public override void OnAfterSpawn() + { + if ( X > 936 && Y > 694 && X < 1660 && Y < 1040 ) // YEW + { + AddItem( new Bascinet() ); + AddItem( new StuddedArms() ); + AddItem( new StuddedChest() ); + AddItem( new StuddedGorget() ); + AddItem( new StuddedLegs() ); + AddItem( new StuddedGloves() ); + AddItem( new Longsword() ); + AddItem( new WoodenShield() ); + AddItem( new Boots() ); + } + else if ( X > 1867 && Y > 1953 && X < 2147 && Y < 2204 ) // PAWS + { + AddItem( new Helmet() ); + AddItem( new RingmailArms() ); + AddItem( new RingmailChest() ); + AddItem( new StuddedGorget() ); + AddItem( new RingmailLegs() ); + AddItem( new RingmailGloves() ); + AddItem( new Spear() ); + AddItem( new Boots() ); + } + else if ( X > 2439 && Y > 1354 && X < 2844 && Y < 1528 ) // COVE + { + AddItem( new ChainCoif() ); + AddItem( new LeatherArms() ); + AddItem( new LeatherChest() ); + AddItem( new LeatherGorget() ); + AddItem( new LeatherLegs() ); + AddItem( new LeatherGloves() ); + AddItem( new Longsword() ); + AddItem( new WoodenKiteShield() ); + AddItem( new Boots() ); + } + else if ( X > 2565 && Y > 322 && X < 3096 && Y < 655 ) // MINOC + { + AddItem( new NorseHelm() ); + AddItem( new RingmailArms() ); + AddItem( new RingmailChest() ); + AddItem( new StuddedGorget() ); + AddItem( new RingmailLegs() ); + AddItem( new RingmailGloves() ); + AddItem( new Pike() ); + AddItem( new Cloak( Utility.RandomNeutralHue() ) ); + AddItem( new Boots() ); + } + else + { + AddItem( new PlateHelm() ); + AddItem( new PlateArms() ); + AddItem( new PlateChest() ); + AddItem( new PlateGorget() ); + AddItem( new PlateLegs() ); + AddItem( new PlateGloves() ); + AddItem( new Halberd() ); + } + } + + public override bool IsEnemy( Mobile m ) + { + if ( !(this.CanSee( m )) || !(this.InLOS( m )) ) + return false; + + if ( m.AccessLevel > AccessLevel.Player ) + return false; + + if ( DisguiseTimers.IsDisguised( m ) ) + return false; + + if( !m.CanBeginAction( typeof( PolymorphSpell ) ) ) + return false; + + if ( m is Guard ) + return false; + + if ( m is PlayerMobile && ( m.Kills >= 5 || m.Criminal ) ) + return true; + + if ( m is BaseCreature && ((BaseCreature)m).ControlMaster != null && ((BaseCreature)m).ControlMaster is PlayerMobile && ((BaseCreature)m).ControlMaster == m && ( m.Kills >= 5 || m.Criminal ) ) + return true; + + if ( m is BaseCreature && ((BaseCreature)m).SummonMaster != null && ((BaseCreature)m).SummonMaster is PlayerMobile && ((BaseCreature)m).SummonMaster == m && ( m.Kills >= 5 || m.Criminal ) ) + return true; + + if ( m is BaseCreature && ((BaseCreature)m).FightMode == FightMode.Closest ) + return true; + + if ( m is BaseCreature && ((BaseCreature)m).FightMode == FightMode.Aggressor && ((BaseCreature)m).AI == AIType.AI_Animal && m.Fame > 150 && m.Combatant is PlayerMobile ) + return true; + + return false; + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + Hits = HitsMax; + Stam = StamMax; + } + + public override void OnThink() + { + if ( ( Math.Abs( this.X-this.Home.X ) > 8 || Math.Abs( this.Y-this.Home.Y ) > 8 || Math.Abs( this.Z-this.Home.Z ) > 8 ) && Combatant == null ) + { + this.Location = this.Home; + } + + base.OnThink(); + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + Hits = HitsMax; + Stam = StamMax; + + switch ( Utility.Random( 8 )) + { + case 0: Say("Die villian!"); break; + case 1: Say("I will bring you justice!"); break; + case 2: Say("So, " + defender.Name + "? Your evil ends here!"); break; + case 3: Say("We have been told to watch for " + defender.Name + "!"); break; + case 4: Say("Fellow guardsmen, " + defender.Name + " is here!"); break; + case 5: Say("We have ways of dealing with the likes of " + defender.Name + "!"); break; + case 6: Say("Give up! We do not fear " + defender.Name + "!"); break; + case 7: Say("So, " + defender.Name + "? I sentence you to death!"); break; + }; + } + + public Guard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/AlchemistGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/AlchemistGuildmaster.cs new file mode 100644 index 0000000..de71e31 --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/AlchemistGuildmaster.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Mobiles +{ + public class AlchemistGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.AlchemistsGuild; } } + + [Constructable] + public AlchemistGuildmaster() : base( "alchemist" ) + { + SetSkill( SkillName.MagicResist, 64.0, 100.0 ); + SetSkill( SkillName.HandToHand, 60.0, 83.0 ); + SetSkill( SkillName.Meditation, 85.0, 100.0 ); + SetSkill( SkillName.Bludgeoning, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBAlchemist() ); + SBInfos.Add( new SBGuildAlchemist() ); + SBInfos.Add( new SBGuildMage() ); + } + + public AlchemistGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/AssassinGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/AssassinGuildmaster.cs new file mode 100644 index 0000000..2306b1e --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/AssassinGuildmaster.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class AssassinGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.AssassinsGuild; } } + + [Constructable] + public AssassinGuildmaster() : base( "assassin" ) + { + SetSkill( SkillName.Hiding, 65.0, 88.0 ); + SetSkill( SkillName.Poisoning, 60.0, 83.0 ); + SetSkill( SkillName.Fencing, 75.0, 98.0 ); + SetSkill( SkillName.Stealth, 85.0, 100.0 ); + SetSkill( SkillName.Tactics, 85.0, 100.0 ); + } + + public override void InitOutfit() + { + int color = 0x966; + + Item L1 = new LeatherArms(); L1.Hue = color; + Item L2 = new LeatherChest(); L2.Hue = color; + Item L3 = new LeatherGloves(); L3.Hue = color; + Item L4 = new LeatherGorget(); L4.Hue = color; + Item L5 = new LeatherLegs(); L5.Hue = color; + + AddItem( L1 ); + AddItem( L2 ); + AddItem( L3 ); + AddItem( L4 ); + AddItem( L5 ); + + AddItem( new Hood( color ) ); + AddItem( new Dagger() ); + AddItem( new Boots() ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBAssassin() ); + SBInfos.Add( new SBKnifeWeapon() ); + SBInfos.Add( new SBLeatherArmor() ); + SBInfos.Add( new SBStuddedArmor() ); + } + + public override void SayWelcomeTo( Mobile m ) + { + SayTo( m, 1008053 ); // Welcome to the guild! Stay to the shadows, friend. + } + + public AssassinGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/BardGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/BardGuildmaster.cs new file mode 100644 index 0000000..bb5ec1a --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/BardGuildmaster.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class BardGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.BardsGuild; } } + + [Constructable] + public BardGuildmaster() : base( "bard" ) + { + SetSkill( SkillName.Archery, 80.0, 100.0 ); + SetSkill( SkillName.Discordance, 80.0, 100.0 ); + SetSkill( SkillName.Musicianship, 80.0, 100.0 ); + SetSkill( SkillName.Peacemaking, 80.0, 100.0 ); + SetSkill( SkillName.Provocation, 80.0, 100.0 ); + SetSkill( SkillName.Swords, 80.0, 100.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBBard() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new FeatheredHat( Utility.RandomHue() ) ); + } + + public BardGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/BlacksmithGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/BlacksmithGuildmaster.cs new file mode 100644 index 0000000..458a2b7 --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/BlacksmithGuildmaster.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Mobiles +{ + public class BlacksmithGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.BlacksmithsGuild; } } + + [Constructable] + public BlacksmithGuildmaster() : base( "blacksmith" ) + { + SetSkill( SkillName.Bludgeoning, 36.0, 68.0 ); + SetSkill( SkillName.Parry, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBBlacksmith() ); + SBInfos.Add( new SBMiner() ); + SBInfos.Add( new SBGuildSmith() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.FullApron() ); + } + + public BlacksmithGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/CarpentryGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/CarpentryGuildmaster.cs new file mode 100644 index 0000000..d7237d5 --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/CarpentryGuildmaster.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Mobiles +{ + public class CarpentryGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.CarpentryGuild; } } + + [Constructable] + public CarpentryGuildmaster() : base( "carpentry" ) + { + SetSkill( SkillName.Bludgeoning, 36.0, 68.0 ); + SetSkill( SkillName.Parry, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBStavesWeapon() ); + SBInfos.Add( new SBCarpenter() ); + SBInfos.Add( new SBWoodenShields() ); + SBInfos.Add( new SBGuildCarpenter() ); + } + + public CarpentryGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/HealerGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/HealerGuildmaster.cs new file mode 100644 index 0000000..f3745d3 --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/HealerGuildmaster.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Mobiles +{ + public class HealerGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.HealersGuild; } } + + [Constructable] + public HealerGuildmaster() : base( "healer" ) + { + SetSkill( SkillName.Healing, 90.0, 100.0 ); + SetSkill( SkillName.MagicResist, 75.0, 98.0 ); + SetSkill( SkillName.HandToHand, 60.0, 83.0 ); + SetSkill( SkillName.Bludgeoning, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBHealer() ); + SBInfos.Add( new SBGuildHealer() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.GnarledStaff() ); + } + + public HealerGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/LibraryGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/LibraryGuildmaster.cs new file mode 100644 index 0000000..79e1f50 --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/LibraryGuildmaster.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Mobiles +{ + public class LibraryGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.LibrariansGuild; } } + + [Constructable] + public LibraryGuildmaster() : base( "librarian" ) + { + SetSkill( SkillName.Concentration, 85.0, 100.0 ); + SetSkill( SkillName.MagicResist, 64.0, 100.0 ); + SetSkill( SkillName.Magery, 90.0, 100.0 ); + SetSkill( SkillName.HandToHand, 60.0, 83.0 ); + SetSkill( SkillName.Meditation, 85.0, 100.0 ); + SetSkill( SkillName.Bludgeoning, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBScribe() ); + SBInfos.Add( new SBMapmaker() ); + SBInfos.Add( new SBGuildScribe() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.GnarledStaff() ); + } + + public LibraryGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/MageGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/MageGuildmaster.cs new file mode 100644 index 0000000..98d9425 --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/MageGuildmaster.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Mobiles +{ + public class MageGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.MagesGuild; } } + + [Constructable] + public MageGuildmaster() : base( "mage" ) + { + SetSkill( SkillName.Concentration, 85.0, 100.0 ); + SetSkill( SkillName.MagicResist, 64.0, 100.0 ); + SetSkill( SkillName.Magery, 90.0, 100.0 ); + SetSkill( SkillName.HandToHand, 60.0, 83.0 ); + SetSkill( SkillName.Meditation, 85.0, 100.0 ); + SetSkill( SkillName.Bludgeoning, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBMage() ); + SBInfos.Add( new SBGuildMage() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.GnarledStaff() ); + } + + public MageGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/MarinerGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/MarinerGuildmaster.cs new file mode 100644 index 0000000..66050ab --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/MarinerGuildmaster.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class MarinerGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.MarinersGuild; } } + + [Constructable] + public MarinerGuildmaster() : base( "mariner" ) + { + SetSkill( SkillName.Bludgeoning, 56.0, 88.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBShipwright() ); + SBInfos.Add( new SBFisherman() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new TricorneHat( Utility.RandomHue() ) ); + } + + public MarinerGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/RangerGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/RangerGuildmaster.cs new file mode 100644 index 0000000..3d387fc --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/RangerGuildmaster.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class RangerGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.RangersGuild; } } + + [Constructable] + public RangerGuildmaster() : base( "ranger" ) + { + SetSkill( SkillName.Hiding, 75.0, 98.0 ); + SetSkill( SkillName.MagicResist, 75.0, 98.0 ); + SetSkill( SkillName.Tactics, 65.0, 88.0 ); + SetSkill( SkillName.Archery, 90.0, 100.0 ); + SetSkill( SkillName.Tracking, 90.0, 100.0 ); + SetSkill( SkillName.Stealth, 60.0, 83.0 ); + SetSkill( SkillName.Fencing, 36.0, 68.0 ); + SetSkill( SkillName.Swords, 45.0, 68.0 ); + } + + public override void InitOutfit() + { + AddItem( new StuddedArms() ); + AddItem( new StuddedChest() ); + AddItem( new StuddedGloves() ); + AddItem( new StuddedGorget() ); + AddItem( new StuddedLegs() ); + AddItem( new LeatherCap() ); + AddItem( new Boots() ); + + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new Bow() ); break; + case 1: AddItem( new Bow() ); break; + case 2: AddItem( new Crossbow() ); break; + case 3: AddItem( new HeavyCrossbow() ); break; + } + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBBowyer() ); + SBInfos.Add( new SBRangedWeapon() ); + SBInfos.Add( new SBLeatherArmor() ); + SBInfos.Add( new SBStuddedArmor() ); + SBInfos.Add( new SBGuildRanger() ); + } + + public RangerGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/TailorGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/TailorGuildmaster.cs new file mode 100644 index 0000000..15c382c --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/TailorGuildmaster.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Mobiles +{ + public class TailorGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.TailorsGuild; } } + + [Constructable] + public TailorGuildmaster() : base( "tailor" ) + { + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBTailor() ); + SBInfos.Add( new SBWeaver() ); + SBInfos.Add( new SBGuildTailor() ); + } + + public TailorGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/ThiefGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/ThiefGuildmaster.cs new file mode 100644 index 0000000..5e08f14 --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/ThiefGuildmaster.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class ThiefGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.ThievesGuild; } } + + [Constructable] + public ThiefGuildmaster() : base( "thief" ) + { + SetSkill( SkillName.Searching, 75.0, 98.0 ); + SetSkill( SkillName.Hiding, 65.0, 88.0 ); + SetSkill( SkillName.Lockpicking, 85.0, 100.0 ); + SetSkill( SkillName.Stealing, 90.0, 100.0 ); + SetSkill( SkillName.Fencing, 75.0, 98.0 ); + SetSkill( SkillName.Stealth, 85.0, 100.0 ); + SetSkill( SkillName.RemoveTrap, 85.0, 100.0 ); + } + + public override void InitOutfit() + { + AddItem( new LeatherArms() ); + AddItem( new LeatherChest() ); + AddItem( new LeatherGloves() ); + AddItem( new LeatherGorget() ); + AddItem( new LeatherLegs() ); + AddItem( new Hood( 0x83E ) ); + AddItem( new Dagger() ); + AddItem( new Boots() ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBThief() ); + SBInfos.Add( new SBGuildThief() ); + SBInfos.Add( new SBKnifeWeapon() ); + SBInfos.Add( new SBLeatherArmor() ); + SBInfos.Add( new SBStuddedArmor() ); + } + + public override void SayWelcomeTo( Mobile m ) + { + SayTo( m, 1008053 ); // Welcome to the guild! Stay to the shadows, friend. + } + + public ThiefGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/TinkerGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/TinkerGuildmaster.cs new file mode 100644 index 0000000..f871cdf --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/TinkerGuildmaster.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + public class TinkerGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.TinkersGuild; } } + + [Constructable] + public TinkerGuildmaster() : base( "tinker" ) + { + SetSkill( SkillName.Lockpicking, 65.0, 88.0 ); + SetSkill( SkillName.RemoveTrap, 85.0, 100.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBTinker() ); + SBInfos.Add( new SBGuildSmith() ); + } + + public TinkerGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Guildmasters/WarriorGuildmaster.cs b/Scripts/Mobiles/Towns/Guildmasters/WarriorGuildmaster.cs new file mode 100644 index 0000000..b61a34f --- /dev/null +++ b/Scripts/Mobiles/Towns/Guildmasters/WarriorGuildmaster.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class WarriorGuildmaster : BaseGuildmaster + { + public override NpcGuild NpcGuild{ get{ return NpcGuild.WarriorsGuild; } } + + [Constructable] + public WarriorGuildmaster() : base( "warrior" ) + { + SetSkill( SkillName.Parry, 85.0, 100.0 ); + SetSkill( SkillName.MagicResist, 60.0, 83.0 ); + SetSkill( SkillName.Tactics, 85.0, 100.0 ); + SetSkill( SkillName.Swords, 90.0, 100.0 ); + SetSkill( SkillName.Bludgeoning, 60.0, 83.0 ); + SetSkill( SkillName.Fencing, 60.0, 83.0 ); + } + + public override void InitSBInfo() + { + SBInfos.Add( new SBMetalShields() ); + SBInfos.Add( new SBPlateArmor() ); + SBInfos.Add( new SBHelmetArmor() ); + SBInfos.Add( new SBChainmailArmor() ); + SBInfos.Add( new SBRingmailArmor() ); + SBInfos.Add( new SBAxeWeapon() ); + SBInfos.Add( new SBKnifeWeapon() ); + SBInfos.Add( new SBMaceWeapon() ); + SBInfos.Add( new SBPoleArmWeapon() ); + SBInfos.Add( new SBSpearForkWeapon() ); + SBInfos.Add( new SBSwordWeapon() ); + } + + public override void InitOutfit() + { + AddItem( new PlateArms() ); + AddItem( new PlateChest() ); + AddItem( new PlateGloves() ); + AddItem( new PlateGorget() ); + AddItem( new PlateLegs() ); + + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new PlateHelm() ); break; + case 1: AddItem( new NorseHelm() ); break; + case 2: AddItem( new CloseHelm() ); break; + case 3: AddItem( new Helmet() ); break; + } + + AddItem( new Broadsword() ); + AddItem( new MetalShield() ); + } + + public WarriorGuildmaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Healer.cs b/Scripts/Mobiles/Towns/Healer.cs new file mode 100644 index 0000000..6a6f43d --- /dev/null +++ b/Scripts/Mobiles/Towns/Healer.cs @@ -0,0 +1,70 @@ +using System; +using Server; + +namespace Server.Mobiles +{ + public class Healer : BaseHealer + { + public override bool CanTeach{ get{ return true; } } + + public override bool CheckTeach( SkillName skill, Mobile from ) + { + if ( !base.CheckTeach( skill, from ) ) + return false; + + return ( skill == SkillName.Healing ); + } + + [Constructable] + public Healer() + { + Title = "the healer"; + SetSkill( SkillName.Healing, 80.0, 100.0 ); + } + + public override bool IsActiveVendor{ get{ return true; } } + + public override void InitSBInfo() + { + SBInfos.Add( new SBHealer() ); + } + + public override bool CheckResurrect( Mobile m ) + { + if ( m.Criminal && !Server.Misc.NotorietyHandlers.CriminalTolerated( m ) ) + { + Say( 501222 ); // Thou art a criminal. I shall not resurrect thee. + return false; + } + else if ( m.Kills >= 5 && !Server.Misc.NotorietyHandlers.CriminalTolerated( m ) ) + { + Say( 501223 ); // Thou'rt not a decent and good person. I shall not resurrect thee. + return false; + } + else if ( m.Karma < 0 ) + { + Say( 501224 ); // Thou hast strayed from the path of virtue, but thou still deservest a second chance. + } + + return true; + } + + public Healer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/Armors/SBChainmailArmor.cs b/Scripts/Mobiles/Towns/Sales/Armors/SBChainmailArmor.cs new file mode 100644 index 0000000..dc84a65 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Armors/SBChainmailArmor.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBChainmailArmor: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBChainmailArmor() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( ChainCoif ), 17, 20, 0x13BB, 0 ) ); + Add( new GenericBuyInfo( typeof( ChainChest ), 143, 20, 0x13BF, 0 ) ); + Add( new GenericBuyInfo( typeof( ChainLegs ), 149, 20, 0x13BE, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( ChainCoif ), 6 ); + Add( typeof( ChainChest ), 71 ); + Add( typeof( ChainLegs ), 74 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Armors/SBHelmetArmor.cs b/Scripts/Mobiles/Towns/Sales/Armors/SBHelmetArmor.cs new file mode 100644 index 0000000..3eb601e --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Armors/SBHelmetArmor.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBHelmetArmor: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBHelmetArmor() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( PlateHelm ), 21, 20, 0x1412, 0 ) ); + Add( new GenericBuyInfo( typeof( CloseHelm ), 18, 20, 0x1408, 0 ) ); + Add( new GenericBuyInfo( typeof( CloseHelm ), 18, 20, 0x1409, 0 ) ); + Add( new GenericBuyInfo( typeof( Helmet ), 31, 20, 0x140A, 0 ) ); + Add( new GenericBuyInfo( typeof( Helmet ), 18, 20, 0x140B, 0 ) ); + Add( new GenericBuyInfo( typeof( NorseHelm ), 18, 20, 0x140E, 0 ) ); + Add( new GenericBuyInfo( typeof( NorseHelm ), 18, 20, 0x140F, 0 ) ); + Add( new GenericBuyInfo( typeof( Bascinet ), 18, 20, 0x140C, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateHelm ), 21, 20, 0x1419, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Bascinet ), 9 ); + Add( typeof( CloseHelm ), 9 ); + Add( typeof( Helmet ), 9 ); + Add( typeof( NorseHelm ), 9 ); + Add( typeof( PlateHelm ), 10 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Armors/SBLeatherArmor.cs b/Scripts/Mobiles/Towns/Sales/Armors/SBLeatherArmor.cs new file mode 100644 index 0000000..8cadb54 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Armors/SBLeatherArmor.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBLeatherArmor: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBLeatherArmor() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( LeatherArms ), 80, 20, 0x13CD, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherChest ), 101, 20, 0x13CC, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherGloves ), 60, 20, 0x13C6, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherGorget ), 74, 20, 0x13C7, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherLegs ), 80, 20, 0x13cb, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherCap ), 10, 20, 0x1DB9, 0 ) ); + Add( new GenericBuyInfo( typeof( FemaleLeatherChest ), 116, 20, 0x1C06, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherBustierArms ), 97, 20, 0x1C0A, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherShorts ), 86, 20, 0x1C00, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherSkirt ), 87, 20, 0x1C08, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( LeatherArms ), 40 ); + Add( typeof( LeatherChest ), 52 ); + Add( typeof( LeatherGloves ), 30 ); + Add( typeof( LeatherGorget ), 37 ); + Add( typeof( LeatherLegs ), 40 ); + Add( typeof( LeatherCap ), 5 ); + + + Add( typeof( FemaleLeatherChest ), 18 ); + Add( typeof( FemaleStuddedChest ), 25 ); + Add( typeof( LeatherShorts ), 14 ); + Add( typeof( LeatherSkirt ), 11 ); + Add( typeof( LeatherBustierArms ), 11 ); + Add( typeof( StuddedBustierArms ), 27 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Armors/SBMetalShields.cs b/Scripts/Mobiles/Towns/Sales/Armors/SBMetalShields.cs new file mode 100644 index 0000000..5e8c449 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Armors/SBMetalShields.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBMetalShields : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBMetalShields() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( BronzeShield ), 66, 20, 0x1B72, 0 ) ); + Add( new GenericBuyInfo( typeof( Buckler ), 50, 20, 0x1B73, 0 ) ); + Add( new GenericBuyInfo( typeof( MetalKiteShield ), 123, 20, 0x1B74, 0 ) ); + Add( new GenericBuyInfo( typeof( HeaterShield ), 231, 20, 0x1B76, 0 ) ); + Add( new GenericBuyInfo( typeof( MetalShield ), 121, 20, 0x1B7B, 0 ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Buckler ), 25 ); + Add( typeof( BronzeShield ), 33 ); + Add( typeof( MetalShield ), 60 ); + Add( typeof( MetalKiteShield ), 62 ); + Add( typeof( HeaterShield ), 115 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/Armors/SBPlateArmor.cs b/Scripts/Mobiles/Towns/Sales/Armors/SBPlateArmor.cs new file mode 100644 index 0000000..158c2ea --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Armors/SBPlateArmor.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBPlateArmor: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBPlateArmor() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( PlateGorget ), 104, 20, 0x1413, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateChest ), 243, 20, 0x1415, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateLegs ), 218, 20, 0x1411, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateArms ), 188, 20, 0x1410, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateGloves ), 155, 20, 0x1414, 0 ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( PlateArms ), 94 ); + Add( typeof( PlateChest ), 121 ); + Add( typeof( PlateGloves ), 72 ); + Add( typeof( PlateGorget ), 52 ); + Add( typeof( PlateLegs ), 109 ); + + Add( typeof( FemalePlateChest ), 113 ); + + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Armors/SBRingmailArmor.cs b/Scripts/Mobiles/Towns/Sales/Armors/SBRingmailArmor.cs new file mode 100644 index 0000000..11a780e --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Armors/SBRingmailArmor.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBRingmailArmor: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBRingmailArmor() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( RingmailChest ), 121, 20, 0x13ec, 0 ) ); + Add( new GenericBuyInfo( typeof( RingmailLegs ), 90, 20, 0x13F0, 0 ) ); + Add( new GenericBuyInfo( typeof( RingmailArms ), 85, 20, 0x13EE, 0 ) ); + Add( new GenericBuyInfo( typeof( RingmailGloves ), 93, 20, 0x13eb, 0 ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( RingmailArms ), 42 ); + Add( typeof( RingmailChest ), 60 ); + Add( typeof( RingmailGloves ), 26 ); + Add( typeof( RingmailLegs ), 45 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Armors/SBStuddedArmor.cs b/Scripts/Mobiles/Towns/Sales/Armors/SBStuddedArmor.cs new file mode 100644 index 0000000..2984cee --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Armors/SBStuddedArmor.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBStuddedArmor: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBStuddedArmor() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( StuddedArms ), 87, 20, 0x13DC, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedChest ), 128, 20, 0x13DB, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedGloves ), 79, 20, 0x13D5, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedGorget ), 73, 20, 0x13D6, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedLegs ), 103, 20, 0x13DA, 0 ) ); + Add( new GenericBuyInfo( typeof( FemaleStuddedChest ), 142, 20, 0x1C02, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedBustierArms ), 120, 20, 0x1c0c, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( StuddedArms ), 43 ); + Add( typeof( StuddedChest ), 64 ); + Add( typeof( StuddedGloves ), 39 ); + Add( typeof( StuddedGorget ), 36 ); + Add( typeof( StuddedLegs ), 51 ); + Add( typeof( FemaleStuddedChest ), 71 ); + Add( typeof( StuddedBustierArms ), 60 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Armors/SBWoodenShields.cs b/Scripts/Mobiles/Towns/Sales/Armors/SBWoodenShields.cs new file mode 100644 index 0000000..88d1e0a --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Armors/SBWoodenShields.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBWoodenShields: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBWoodenShields() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( WoodenShield ), 30, 20, 0x1B7A, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenKiteShield ), 70, 20, 0x1B78, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( WoodenShield ), 15 ); + Add( typeof( WoodenKiteShield ), 35 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBAlchemist.cs b/Scripts/Mobiles/Towns/Sales/SBAlchemist.cs new file mode 100644 index 0000000..58ac777 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBAlchemist.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBAlchemist : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBAlchemist() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( RefreshPotion ), 15, 10, 0xF0B, 0 ) ); + Add( new GenericBuyInfo( typeof( AgilityPotion ), 15, 10, 0xF08, 0 ) ); + Add( new GenericBuyInfo( typeof( NightSightPotion ), 15, 10, 0xF06, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserHealPotion ), 15, 10, 0xF0C, 0 ) ); + Add( new GenericBuyInfo( typeof( StrengthPotion ), 15, 10, 0xF09, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserPoisonPotion ), 15, 10, 0xF0A, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserCurePotion ), 15, 10, 0xF07, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserExplosionPotion ), 21, 10, 0xF0D, 0 ) ); + Add( new GenericBuyInfo( typeof( MortarPestle ), 8, 10, 0xE9B, 0 ) ); + + Add( new GenericBuyInfo( typeof( BlackPearl ), 5, 20, 0xF7A, 0 ) ); + Add( new GenericBuyInfo( typeof( Bloodmoss ), 5, 20, 0xF7B, 0 ) ); + Add( new GenericBuyInfo( typeof( Garlic ), 3, 20, 0xF84, 0 ) ); + Add( new GenericBuyInfo( typeof( Ginseng ), 3, 20, 0xF85, 0 ) ); + Add( new GenericBuyInfo( typeof( MandrakeRoot ), 3, 20, 0xF86, 0 ) ); + Add( new GenericBuyInfo( typeof( Nightshade ), 3, 20, 0xF88, 0 ) ); + Add( new GenericBuyInfo( typeof( SpidersSilk ), 3, 20, 0xF8D, 0 ) ); + Add( new GenericBuyInfo( typeof( SulfurousAsh ), 3, 20, 0xF8C, 0 ) ); + + Add( new GenericBuyInfo( typeof( Bottle ), 5, 100, 0xF0E, 0 ) ); + Add( new GenericBuyInfo( typeof( HeatingStand ), 2, 100, 0x1849, 0 ) ); + + Add( new GenericBuyInfo( "1041060", typeof( HairDye ), 37, 10, 0xEFF, 0 ) ); + + Add( new GenericBuyInfo( typeof( HeatingStand ), 2, 100, 0x1849, 0 ) ); // This is on OSI :-P + + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( BlackPearl ), 3 ); + Add( typeof( Bloodmoss ), 3 ); + Add( typeof( MandrakeRoot ), 2 ); + Add( typeof( Garlic ), 2 ); + Add( typeof( Ginseng ), 2 ); + Add( typeof( Nightshade ), 2 ); + Add( typeof( SpidersSilk ), 2 ); + Add( typeof( SulfurousAsh ), 2 ); + Add( typeof( Bottle ), 3 ); + Add( typeof( MortarPestle ), 4 ); + Add( typeof( HairDye ), 19 ); + + Add( typeof( NightSightPotion ), 7 ); + Add( typeof( AgilityPotion ), 7 ); + Add( typeof( StrengthPotion ), 7 ); + Add( typeof( RefreshPotion ), 7 ); + Add( typeof( LesserCurePotion ), 7 ); + Add( typeof( LesserHealPotion ), 7 ); + Add( typeof( LesserPoisonPotion ), 7 ); + Add( typeof( LesserExplosionPotion ), 10 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/SBArchitect.cs b/Scripts/Mobiles/Towns/Sales/SBArchitect.cs new file mode 100644 index 0000000..6a0a2dc --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBArchitect.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBArchitect : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBArchitect() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( "1041280", typeof( InteriorDecorator ), 500, 20, 0x1EBA, 0 ) ); + Add( new GenericBuyInfo( "1060651", typeof( HousePlacementTool ), 25, 20, 0x14F0, 0 )); + Add( new GenericBuyInfo( typeof( LadderEastAddonDeed ), 800, 10, 0x3DB5, 0 ) ); + Add( new GenericBuyInfo( typeof( LadderSouthAddonDeed ), 800, 10, 0x3DB4, 0 ) ); + Add( new GenericBuyInfo( typeof( MyTentEastAddonDeed ), 1200, 10, 0xA59, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( MyTentSouthAddonDeed ), 1200, 10, 0xA59, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( HouseSignAlchemy ), 120, 10, 0x0BC5, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignArchery ), 120, 10, 0x0BCD, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignArms ), 120, 10, 0x0908, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignBard ), 120, 10, 0x0BBB, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignBowyer ), 120, 10, 0x0BBD, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignBrass ), 120, 10, 0x0BD1, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignButcher ), 120, 10, 0x0BA9, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignCarpenter ), 120, 10, 0x0BAF, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignDocks ), 120, 10, 0x0906, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignFisherman ), 120, 10, 0x0B3B, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignFood ), 120, 10, 0x0BA3, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignGold ), 120, 10, 0x0C0B, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignHealer ), 120, 10, 0x0BAB, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignHerbalist ), 120, 10, 0x0A96, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignInn ), 120, 10, 0x0BB3, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignJewels ), 120, 10, 0x0BC1, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignLibrary ), 120, 10, 0x0B95, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignMage ), 120, 10, 0x0BAD, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignMaps ), 120, 10, 0x0BB1, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignMiner ), 120, 10, 0x0AA7, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignProvisions ), 120, 10, 0x0BCB, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignShipbuilder ), 120, 10, 0x0BB5, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignSmithing ), 120, 10, 0x0BC7, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignStable ), 120, 10, 0x0BB7, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignTailor ), 120, 10, 0x0BA5, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignTavern ), 120, 10, 0x0BC3, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignTinker ), 120, 10, 0x0BA7, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignWeapons ), 120, 10, 0x0BBF, 0 ) ); + Add( new GenericBuyInfo( typeof( HouseSignWooden ), 120, 10, 0x0BCF, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( InteriorDecorator ), 5000 ); + Add( typeof( HousePlacementTool ), 301 ); + Add( typeof( MyTentEastAddonDeed ), 600 ); + Add( typeof( MyTentSouthAddonDeed ), 600 ); + Add( typeof( LadderEastAddonDeed ), 400 ); + Add( typeof( LadderSouthAddonDeed ), 400 ); + Add( typeof( HouseSignAlchemy ), 60 ); + Add( typeof( HouseSignArchery ), 60 ); + Add( typeof( HouseSignArms ), 60 ); + Add( typeof( HouseSignBard ), 60 ); + Add( typeof( HouseSignBowyer ), 60 ); + Add( typeof( HouseSignBrass ), 60 ); + Add( typeof( HouseSignButcher ), 60 ); + Add( typeof( HouseSignCarpenter ), 60 ); + Add( typeof( HouseSignDocks ), 60 ); + Add( typeof( HouseSignFisherman ), 60 ); + Add( typeof( HouseSignFood ), 60 ); + Add( typeof( HouseSignGold ), 60 ); + Add( typeof( HouseSignHealer ), 60 ); + Add( typeof( HouseSignHerbalist ), 60 ); + Add( typeof( HouseSignInn ), 60 ); + Add( typeof( HouseSignJewels ), 60 ); + Add( typeof( HouseSignLibrary ), 60 ); + Add( typeof( HouseSignMage ), 60 ); + Add( typeof( HouseSignMaps ), 60 ); + Add( typeof( HouseSignMiner ), 60 ); + Add( typeof( HouseSignProvisions ), 60 ); + Add( typeof( HouseSignShipbuilder ), 60 ); + Add( typeof( HouseSignSmithing ), 60 ); + Add( typeof( HouseSignStable ), 60 ); + Add( typeof( HouseSignTailor ), 60 ); + Add( typeof( HouseSignTavern ), 60 ); + Add( typeof( HouseSignTinker ), 60 ); + Add( typeof( HouseSignWeapons ), 60 ); + Add( typeof( HouseSignWooden ), 60 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBAssassin.cs b/Scripts/Mobiles/Towns/Sales/SBAssassin.cs new file mode 100644 index 0000000..b706868 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBAssassin.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBAssassin : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBAssassin() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( LesserPoisonPotion ), 15, Utility.RandomMinMax(50,100), 0xF0A, 0 ) ); + Add( new GenericBuyInfo( typeof( PoisonPotion ), 85, Utility.RandomMinMax(25,50), 0xF0A, 0 ) ); + Add( new GenericBuyInfo( typeof( GreaterPoisonPotion ), 210, Utility.RandomMinMax(12,25), 0xF0A, 0 ) ); + Add( new GenericBuyInfo( typeof( OilCloth ), 28, 20, 0x175D, 2001 ) ); + Add( new GenericBuyInfo( typeof( HairDye ), 37, 20, 0xEFF, 0 ) ); + Add( new GenericBuyInfo( typeof( DisguiseKit ), 700, 20, 0xE05, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( OilCloth ), 14 ); + Add( typeof( LesserPoisonPotion ), 7 ); + Add( typeof( PoisonPotion ), 42 ); + Add( typeof( GreaterPoisonPotion ), 105 ); + Add( typeof( HairDye ), 19 ); + Add( typeof( DisguiseKit ), 300 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBBaker.cs b/Scripts/Mobiles/Towns/Sales/SBBaker.cs new file mode 100644 index 0000000..271796a --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBBaker.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBBaker : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBBaker() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( BreadLoaf ), 6, 20, 0x103B, 0 ) ); + Add( new GenericBuyInfo( typeof( BreadLoaf ), 5, 20, 0x103C, 0 ) ); + Add( new GenericBuyInfo( typeof( ApplePie ), 7, 20, 0x1041, 0 ) ); //OSI just has Pie, not Apple/Fruit/Meat + Add( new GenericBuyInfo( typeof( Cake ), 13, 20, 0x9E9, 0 ) ); + Add( new GenericBuyInfo( typeof( Muffins ), 3, 20, 0x9EA, 0 ) ); + Add( new GenericBuyInfo( typeof( SackFlour ), 3, 20, 0x1039, 0 ) ); + Add( new GenericBuyInfo( typeof( FrenchBread ), 5, 20, 0x98C, 0 ) ); + Add( new GenericBuyInfo( typeof( Cookies ), 3, 20, 0x160b, 0 ) ); + Add( new GenericBuyInfo( typeof( CheesePizza ), 8, 10, 0x1040, 0 ) ); // OSI just has Pizza + Add( new GenericBuyInfo( typeof( JarHoney ), 3, 20, 0x9ec, 0 ) ); + Add (new GenericBuyInfo( typeof( BowlFlour ), 7, 20, 0xA1E, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( BreadLoaf ), 3 ); + Add( typeof( FrenchBread ), 1 ); + Add( typeof( Cake ), 5 ); + Add( typeof( Cookies ), 3 ); + Add( typeof( Muffins ), 2 ); + Add( typeof( CheesePizza ), 4 ); + Add( typeof( ApplePie ), 5 ); + Add( typeof( PeachCobbler ), 5 ); + Add( typeof( Quiche ), 6 ); + Add( typeof( Dough ), 4 ); + Add( typeof( JarHoney ), 1 ); + Add( typeof( Pitcher ), 5 ); + Add( typeof( SackFlour ), 1 ); + Add( typeof( Eggs ), 1 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBBard.cs b/Scripts/Mobiles/Towns/Sales/SBBard.cs new file mode 100644 index 0000000..a265e68 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBBard.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBBard: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBBard() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Drums ), 21, ( 10 ), 0x0E9C, 0 ) ); + Add( new GenericBuyInfo( typeof( Tambourine ), 21, ( 10 ), 0x0E9E, 0 ) ); + Add( new GenericBuyInfo( typeof( LapHarp ), 21, ( 10 ), 0x0EB2, 0 ) ); + Add( new GenericBuyInfo( typeof( Lute ), 21, ( 10 ), 0x0EB3, 0 ) ); + Add( new GenericBuyInfo( typeof( Flute ), 21, ( 10 ), 0x134E, 0 ) ); + Add( new GenericBuyInfo( typeof( Pipes ), 21, ( 10 ), 0x212E, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( LapHarp ), 10 ); + Add( typeof( Lute ), 10 ); + Add( typeof( Drums ), 10 ); + Add( typeof( Harp ), 10 ); + Add( typeof( Tambourine ), 10 ); + Add( typeof( Horn ), 10 ); + Add( typeof( Flute ), 10 ); + Add( typeof( Pipes ), 10 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBBarkeeper.cs b/Scripts/Mobiles/Towns/Sales/SBBarkeeper.cs new file mode 100644 index 0000000..a85d9e3 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBBarkeeper.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBBarkeeper : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBBarkeeper() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Ale, 10, 20, 0x99F, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Wine, 7, 20, 0x9C7, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Liquor, 5, 20, 0x99B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Jug ), BeverageType.Cider, 13, 20, 0x9C8, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Milk, 7, 20, 0x9F0, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Ale, 16, 20, 0x1F95, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Cider, 11, 20, 0x1F97, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Liquor, 9, 20, 0x1F99, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Wine, 11, 20, 0x1F9B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Water, 11, 20, 0x1F9D, 0 ) ); + + Add( new GenericBuyInfo( typeof( BreadLoaf ), 6, 10, 0x103B, 0 ) ); + Add( new GenericBuyInfo( typeof( CheeseWheel ), 21, 10, 0x97E, 0 ) ); + Add( new GenericBuyInfo( typeof( CookedBird ), 17, 20, 0x9B7, 0 ) ); + Add( new GenericBuyInfo( typeof( LambLeg ), 8, 20, 0x160A, 0 ) ); + + Add( new GenericBuyInfo( typeof( WoodenBowlOfCarrots ), 3, 20, 0x15F9, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfCorn ), 3, 20, 0x15FA, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfLettuce ), 3, 20, 0x15FB, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfPeas ), 3, 20, 0x15FC, 0 ) ); + Add( new GenericBuyInfo( typeof( EmptyPewterBowl ), 2, 20, 0x15FD, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfCorn ), 3, 20, 0x15FE, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfLettuce ), 3, 20, 0x15FF, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPeas ), 3, 20, 0x1600, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPotatos ), 3, 20, 0x1601, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfStew ), 3, 20, 0x1604, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfTomatoSoup ), 3, 20, 0x1606, 0 ) ); + + Add( new GenericBuyInfo( typeof( ApplePie ), 7, 20, 0x1041, 0 ) ); //OSI just has Pie, not Apple/Fruit/Meat + + Add( new GenericBuyInfo( "1016450", typeof( Chessboard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( "1016449", typeof( CheckerBoard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( typeof( Backgammon ), 2, 20, 0xE1C, 0 ) ); + Add( new GenericBuyInfo( typeof( Dices ), 2, 20, 0xFA7, 0 ) ); + Add( new GenericBuyInfo( "1041243", typeof( ContractOfEmployment ), 1252, 20, 0x14F0, 0 ) ); + Add( new GenericBuyInfo( "a barkeep contract", typeof( BarkeepContract ), 1252, 20, 0x14F0, 0 ) ); + if ( Multis.BaseHouse.NewVendorSystem ) + Add( new GenericBuyInfo( "1062332", typeof( VendorRentalContract ), 1252, 20, 0x14F0, 0x672 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( WoodenBowlOfCarrots ), 1 ); + Add( typeof( WoodenBowlOfCorn ), 1 ); + Add( typeof( WoodenBowlOfLettuce ), 1 ); + Add( typeof( WoodenBowlOfPeas ), 1 ); + Add( typeof( EmptyPewterBowl ), 1 ); + Add( typeof( PewterBowlOfCorn ), 1 ); + Add( typeof( PewterBowlOfLettuce ), 1 ); + Add( typeof( PewterBowlOfPeas ), 1 ); + Add( typeof( PewterBowlOfPotatos ), 1 ); + Add( typeof( WoodenBowlOfStew ), 1 ); + Add( typeof( WoodenBowlOfTomatoSoup ), 1 ); + Add( typeof( BeverageBottle ), 3 ); + Add( typeof( Jug ), 6 ); + Add( typeof( Pitcher ), 5 ); + Add( typeof( GlassMug ), 1 ); + Add( typeof( BreadLoaf ), 3 ); + Add( typeof( CheeseWheel ), 12 ); + Add( typeof( Ribs ), 6 ); + Add( typeof( Peach ), 1 ); + Add( typeof( Pear ), 1 ); + Add( typeof( Grapes ), 1 ); + Add( typeof( Apple ), 1 ); + Add( typeof( Banana ), 1 ); + Add( typeof( Candle ), 3 ); + Add( typeof( Chessboard ), 1 ); + Add( typeof( CheckerBoard ), 1 ); + Add( typeof( Backgammon ), 1 ); + Add( typeof( Dices ), 1 ); + Add( typeof( ContractOfEmployment ), 626 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBBeekeeper.cs b/Scripts/Mobiles/Towns/Sales/SBBeekeeper.cs new file mode 100644 index 0000000..fdadacd --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBBeekeeper.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBBeekeeper : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBBeekeeper() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( JarHoney ), 3, 20, 0x9EC, 0 ) ); + Add( new GenericBuyInfo( typeof( Beeswax ), 2, Utility.RandomMinMax(40,80), 0x1422, 0 ) ); + Add( new GenericBuyInfo( typeof( CandleShort ), 80, 20, 0x142F, 0 ) ); + Add( new GenericBuyInfo( typeof( CandleMedium ), 160, 20, 0x1437, 0 ) ); + Add( new GenericBuyInfo( typeof( CandleLong ), 190, 20, 0x1433, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( JarHoney ), 1 ); + Add( typeof( Beeswax ), 1 ); + Add( typeof( CandleShort ), 6 ); + Add( typeof( CandleMedium ), 9 ); + Add( typeof( CandleLong ), 12 ); + Add( typeof( CandleSkull ), 15 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBBlacksmith.cs b/Scripts/Mobiles/Towns/Sales/SBBlacksmith.cs new file mode 100644 index 0000000..4e967f0 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBBlacksmith.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBBlacksmith : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBBlacksmith() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( IronIngot ), 5, 16, 0x1BF2, 0 ) ); + Add( new GenericBuyInfo( typeof( Tongs ), 13, 14, 0xFBB, 0 ) ); + + Add( new GenericBuyInfo( typeof( BronzeShield ), 66, 20, 0x1B72, 0 ) ); + Add( new GenericBuyInfo( typeof( Buckler ), 50, 20, 0x1B73, 0 ) ); + Add( new GenericBuyInfo( typeof( MetalKiteShield ), 123, 20, 0x1B74, 0 ) ); + Add( new GenericBuyInfo( typeof( HeaterShield ), 231, 20, 0x1B76, 0 ) ); + Add( new GenericBuyInfo( typeof( MetalShield ), 121, 20, 0x1B7B, 0 ) ); + + Add( new GenericBuyInfo( typeof( PlateGorget ), 104, 20, 0x1413, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateChest ), 243, 20, 0x1415, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateLegs ), 218, 20, 0x1411, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateArms ), 188, 20, 0x1410, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateGloves ), 155, 20, 0x1414, 0 ) ); + + Add( new GenericBuyInfo( typeof( PlateHelm ), 21, 20, 0x1412, 0 ) ); + Add( new GenericBuyInfo( typeof( CloseHelm ), 18, 20, 0x1408, 0 ) ); + Add( new GenericBuyInfo( typeof( CloseHelm ), 18, 20, 0x1409, 0 ) ); + Add( new GenericBuyInfo( typeof( Helmet ), 31, 20, 0x140A, 0 ) ); + Add( new GenericBuyInfo( typeof( Helmet ), 18, 20, 0x140B, 0 ) ); + Add( new GenericBuyInfo( typeof( NorseHelm ), 18, 20, 0x140E, 0 ) ); + Add( new GenericBuyInfo( typeof( NorseHelm ), 18, 20, 0x140F, 0 ) ); + Add( new GenericBuyInfo( typeof( Bascinet ), 18, 20, 0x140C, 0 ) ); + Add( new GenericBuyInfo( typeof( PlateHelm ), 21, 20, 0x1419, 0 ) ); + + Add( new GenericBuyInfo( typeof( ChainCoif ), 17, 20, 0x13BB, 0 ) ); + Add( new GenericBuyInfo( typeof( ChainChest ), 143, 20, 0x13BF, 0 ) ); + Add( new GenericBuyInfo( typeof( ChainLegs ), 149, 20, 0x13BE, 0 ) ); + + Add( new GenericBuyInfo( typeof( RingmailChest ), 121, 20, 0x13ec, 0 ) ); + Add( new GenericBuyInfo( typeof( RingmailLegs ), 90, 20, 0x13F0, 0 ) ); + Add( new GenericBuyInfo( typeof( RingmailArms ), 85, 20, 0x13EE, 0 ) ); + Add( new GenericBuyInfo( typeof( RingmailGloves ), 93, 20, 0x13eb, 0 ) ); + + Add( new GenericBuyInfo( typeof( GreatAxe ), 30, 20, 0xF45, 0 ) ); + Add( new GenericBuyInfo( typeof( Bardiche ), 60, 20, 0xF4D, 0 ) ); + Add( new GenericBuyInfo( typeof( BattleAxe ), 26, 20, 0xF47, 0 ) ); + Add( new GenericBuyInfo( typeof( TwoHandedAxe ), 32, 20, 0x1443, 0 ) ); + Add( new GenericBuyInfo( typeof( Bow ), 35, 20, 0x13B2, 0 ) ); + Add( new GenericBuyInfo( typeof( ButcherKnife ), 14, 20, 0x13F6, 0 ) ); + Add( new GenericBuyInfo( typeof( Crossbow ), 46, 20, 0xF50, 0 ) ); + Add( new GenericBuyInfo( typeof( HeavyCrossbow ), 55, 20, 0x13FD, 0 ) ); + Add( new GenericBuyInfo( typeof( Cutlass ), 24, 20, 0x1441, 0 ) ); + Add( new GenericBuyInfo( typeof( Dagger ), 21, 20, 0xF52, 0 ) ); + Add( new GenericBuyInfo( typeof( Halberd ), 42, 20, 0x143E, 0 ) ); + Add( new GenericBuyInfo( typeof( HammerPick ), 26, 20, 0x143D, 0 ) ); + Add( new GenericBuyInfo( typeof( Katana ), 33, 20, 0x13FF, 0 ) ); + Add( new GenericBuyInfo( typeof( Kryss ), 32, 20, 0x1401, 0 ) ); + Add( new GenericBuyInfo( typeof( Broadsword ), 35, 20, 0xF5E, 0 ) ); + Add( new GenericBuyInfo( typeof( Longsword ), 55, 20, 0xF61, 0 ) ); + Add( new GenericBuyInfo( typeof( ThinLongsword ), 27, 20, 0x13B8, 0 ) ); + Add( new GenericBuyInfo( typeof( VikingSword ), 55, 20, 0x13B9, 0 ) ); + Add( new GenericBuyInfo( typeof( Cleaver ), 15, 20, 0xEC3, 0 ) ); + Add( new GenericBuyInfo( typeof( Axe ), 40, 20, 0xF49, 0 ) ); + Add( new GenericBuyInfo( typeof( DoubleAxe ), 52, 20, 0xF4B, 0 ) ); + Add( new GenericBuyInfo( typeof( Pickaxe ), 22, 20, 0xE86, 0 ) ); + Add( new GenericBuyInfo( typeof( Pitchfork ), 19, 20, 0xE87, 0 ) ); + Add( new GenericBuyInfo( typeof( Scimitar ), 36, 20, 0x13B6, 0 ) ); + Add( new GenericBuyInfo( typeof( SkinningKnife ), 14, 20, 0xEC4, 0 ) ); + Add( new GenericBuyInfo( typeof( LargeBattleAxe ), 33, 20, 0x13FB, 0 ) ); + Add( new GenericBuyInfo( typeof( WarAxe ), 29, 20, 0x13B0, 0 ) ); + + Add( new GenericBuyInfo( typeof( Pike ), 39, 20, 0x26BE, 0 ) ); + Add( new GenericBuyInfo( typeof( Scythe ), 39, 20, 0x26BA, 0 ) ); + + Add( new GenericBuyInfo( typeof( BlackStaff ), 22, 20, 0xDF1, 0 ) ); + Add( new GenericBuyInfo( typeof( Club ), 16, 20, 0x13B4, 0 ) ); + Add( new GenericBuyInfo( typeof( GnarledStaff ), 16, 20, 0x13F8, 0 ) ); + Add( new GenericBuyInfo( typeof( Mace ), 28, 20, 0xF5C, 0 ) ); + Add( new GenericBuyInfo( typeof( Maul ), 21, 20, 0x143B, 0 ) ); + Add( new GenericBuyInfo( typeof( QuarterStaff ), 19, 20, 0xE89, 0 ) ); + Add( new GenericBuyInfo( typeof( ShepherdsCrook ), 20, 20, 0xE81, 0 ) ); + Add( new GenericBuyInfo( typeof( SmithHammer ), 21, 20, 0x13E3, 0 ) ); + Add( new GenericBuyInfo( typeof( Rapier ), 23, 20, 0x1403, 0 ) ); + Add( new GenericBuyInfo( typeof( Spear ), 31, 20, 0xF62, 0 ) ); + Add( new GenericBuyInfo( typeof( WarHammer ), 25, 20, 0x1439, 0 ) ); + Add( new GenericBuyInfo( typeof( WarMace ), 31, 20, 0x1407, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Tongs ), 7 ); + Add( typeof( IronIngot ), 4 ); + + Add( typeof( Buckler ), 25 ); + Add( typeof( BronzeShield ), 33 ); + Add( typeof( MetalShield ), 60 ); + Add( typeof( MetalKiteShield ), 62 ); + Add( typeof( HeaterShield ), 115 ); + + Add( typeof( PlateArms ), 94 ); + Add( typeof( PlateChest ), 121 ); + Add( typeof( PlateGloves ), 72 ); + Add( typeof( PlateGorget ), 52 ); + Add( typeof( PlateLegs ), 109 ); + + Add( typeof( FemalePlateChest ), 113 ); + Add( typeof( FemaleLeatherChest ), 18 ); + Add( typeof( FemaleStuddedChest ), 25 ); + Add( typeof( LeatherShorts ), 14 ); + Add( typeof( LeatherSkirt ), 11 ); + Add( typeof( LeatherBustierArms ), 11 ); + Add( typeof( StuddedBustierArms ), 27 ); + + Add( typeof( Bascinet ), 9 ); + Add( typeof( CloseHelm ), 9 ); + Add( typeof( Helmet ), 9 ); + Add( typeof( NorseHelm ), 9 ); + Add( typeof( PlateHelm ), 10 ); + + Add( typeof( ChainCoif ), 6 ); + Add( typeof( ChainChest ), 71 ); + Add( typeof( ChainLegs ), 74 ); + + Add( typeof( RingmailArms ), 42 ); + Add( typeof( RingmailChest ), 60 ); + Add( typeof( RingmailGloves ), 26 ); + Add( typeof( RingmailLegs ), 45 ); + + Add( typeof( BattleAxe ), 13 ); + Add( typeof( DoubleAxe ), 26 ); + Add( typeof( GreatAxe ), 15 ); + Add( typeof( LargeBattleAxe ),16 ); + Add( typeof( Pickaxe ), 11 ); + Add( typeof( TwoHandedAxe ), 16 ); + Add( typeof( WarAxe ), 14 ); + Add( typeof( Axe ), 20 ); + + Add( typeof( Bardiche ), 30 ); + Add( typeof( Halberd ), 21 ); + + Add( typeof( ButcherKnife ), 7 ); + Add( typeof( Cleaver ), 7 ); + Add( typeof( Dagger ), 10 ); + Add( typeof( SkinningKnife ), 7 ); + + Add( typeof( Club ), 8 ); + Add( typeof( HammerPick ), 13 ); + Add( typeof( Mace ), 14 ); + Add( typeof( Maul ), 10 ); + Add( typeof( WarHammer ), 12 ); + Add( typeof( WarMace ), 15 ); + + Add( typeof( HeavyCrossbow ), 27 ); + Add( typeof( Bow ), 17 ); + Add( typeof( Crossbow ), 23 ); + + Add( typeof( Scythe ), 19 ); + Add( typeof( Pike ), 19 ); + + Add( typeof( Spear ), 15 ); + Add( typeof( Pitchfork ), 9 ); + + Add( typeof( BlackStaff ), 11 ); + Add( typeof( GnarledStaff ), 8 ); + Add( typeof( QuarterStaff ), 9 ); + Add( typeof( ShepherdsCrook ), 10 ); + + Add( typeof( SmithHammer ), 10 ); + + Add( typeof( Broadsword ), 17 ); + Add( typeof( Cutlass ), 12 ); + Add( typeof( Katana ), 16 ); + Add( typeof( Kryss ), 16 ); + Add( typeof( Longsword ), 27 ); + Add( typeof( Rapier ), 11 ); + Add( typeof( Scimitar ), 18 ); + Add( typeof( ThinLongsword ), 13 ); + Add( typeof( VikingSword ), 27 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBBowyer.cs b/Scripts/Mobiles/Towns/Sales/SBBowyer.cs new file mode 100644 index 0000000..d5238e0 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBBowyer.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBBowyer : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBBowyer() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( FletcherTools ), 2, 20, 0x1022, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( FletcherTools ), 1 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBButcher.cs b/Scripts/Mobiles/Towns/Sales/SBButcher.cs new file mode 100644 index 0000000..1eb547e --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBButcher.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBButcher : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBButcher() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Bacon ), 7, 20, 0x979, 0 ) ); + Add( new GenericBuyInfo( typeof( Ham ), 26, 20, 0x9C9, 0 ) ); + Add( new GenericBuyInfo( typeof( Sausage ), 18, 20, 0x9C0, 0 ) ); + Add( new GenericBuyInfo( typeof( RawChickenLeg ), 6, 20, 0x1607, 0 ) ); + Add( new GenericBuyInfo( typeof( RawBird ), 9, 20, 0x9B9, 0 ) ); + Add( new GenericBuyInfo( typeof( RawHam ), 9, 20, 0x096F, 0 ) ); + Add( new GenericBuyInfo( typeof( RawLambLeg ), 9, 20, 0x1609, 0 ) ); + Add( new GenericBuyInfo( typeof( RawSlabOfBacon ), 9, 20, 0x0E0F, 0 ) ); + Add( new GenericBuyInfo( typeof( RawRibs ), 16, 20, 0x9F1, 0 ) ); + Add( new GenericBuyInfo( typeof( ButcherKnife ), 13, 20, 0x13F6, 0 ) ); + Add( new GenericBuyInfo( typeof( Cleaver ), 13, 20, 0xEC3, 0 ) ); + Add( new GenericBuyInfo( typeof( SkinningKnife ), 13, 20, 0xEC4, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( RawRibs ), 8 ); + Add( typeof( RawLambLeg ), 4 ); + Add( typeof( RawChickenLeg ), 3 ); + Add( typeof( RawHam ), 4 ); + Add( typeof( RawBird ), 4 ); + Add( typeof( RawSlabOfBacon ), 4 ); + Add( typeof( Bacon ), 3 ); + Add( typeof( Sausage ), 9 ); + Add( typeof( Ham ), 13 ); + Add( typeof( ButcherKnife ), 7 ); + Add( typeof( Cleaver ), 7 ); + Add( typeof( SkinningKnife ), 7 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBCarpenter.cs b/Scripts/Mobiles/Towns/Sales/SBCarpenter.cs new file mode 100644 index 0000000..23223b0 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBCarpenter.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBCarpenter: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBCarpenter() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Nails ), 3, 20, 0x102E, 0 ) ); + Add( new GenericBuyInfo( typeof( Axle ), 2, 20, 0x105B, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodBoard ), 3, 20, 0x1BD7, 0 ) ); + Add( new GenericBuyInfo( typeof( DrawKnife ), 10, 20, 0x10E4, 0 ) ); + Add( new GenericBuyInfo( typeof( Froe ), 10, 20, 0x10E5, 0 ) ); + Add( new GenericBuyInfo( typeof( Scorp ), 10, 20, 0x10E7, 0 ) ); + Add( new GenericBuyInfo( typeof( Inshave ), 10, 20, 0x10E6, 0 ) ); + Add( new GenericBuyInfo( typeof( DovetailSaw ), 12, 20, 0x1028, 0 ) ); + Add( new GenericBuyInfo( typeof( Saw ), 15, 20, 0x1034, 0 ) ); + Add( new GenericBuyInfo( typeof( Hammer ), 17, 20, 0x102A, 0 ) ); + Add( new GenericBuyInfo( typeof( MouldingPlane ), 11, 20, 0x102C, 0 ) ); + Add( new GenericBuyInfo( typeof( SmoothingPlane ), 10, 20, 0x1032, 0 ) ); + Add( new GenericBuyInfo( typeof( JointingPlane ), 11, 20, 0x1030, 0 ) ); + Add( new GenericBuyInfo( typeof( Hatchet ), 25, 20, 0xF44, 0 ) ); + Add( new GenericBuyInfo( typeof( Hatchet ), 27, 20, 0xF43, 0 ) ); + Add( new GenericBuyInfo( typeof( FurnitureDyeTub ), 1000, 20, 0xFAB, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( WoodenBox ), 7 ); + Add( typeof( SmallCrate ), 5 ); + Add( typeof( MediumCrate ), 6 ); + Add( typeof( LargeCrate ), 7 ); + Add( typeof( WoodenChest ), 15 ); + + Add( typeof( LargeTable ), 10 ); + Add( typeof( Nightstand ), 7 ); + Add( typeof( YewWoodTable ), 10 ); + + Add( typeof( Throne ), 24 ); + Add( typeof( WoodenThrone ), 6 ); + Add( typeof( Stool ), 6 ); + Add( typeof( FootStool ), 6 ); + + Add( typeof( FancyWoodenChairCushion ), 12 ); + Add( typeof( WoodenChairCushion ), 10 ); + Add( typeof( WoodenChair ), 8 ); + Add( typeof( BambooChair ), 6 ); + Add( typeof( WoodenBench ), 6 ); + + Add( typeof( Saw ), 9 ); + Add( typeof( Scorp ), 6 ); + Add( typeof( SmoothingPlane ), 6 ); + Add( typeof( DrawKnife ), 6 ); + Add( typeof( Froe ), 6 ); + Add( typeof( Hammer ), 14 ); + Add( typeof( Inshave ), 6 ); + Add( typeof( JointingPlane ), 6 ); + Add( typeof( MouldingPlane ), 6 ); + Add( typeof( DovetailSaw ), 7 ); + Add( typeof( Axle ), 1 ); + + Add( typeof( Club ), 8 ); + Add( typeof( Hatchet ), 13 ); + + Add( typeof( WoodBoard ), 1 ); + + Add( typeof( FurnitureDyeTub ), 500 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/SBCobbler.cs b/Scripts/Mobiles/Towns/Sales/SBCobbler.cs new file mode 100644 index 0000000..5b3d18f --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBCobbler.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBCobbler : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBCobbler() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( ThighBoots ), 15, 20, 0x1711, Utility.RandomNeutralHue() ) ); + Add( new GenericBuyInfo( typeof( Shoes ), 8, 20, 0x170f, Utility.RandomNeutralHue() ) ); + Add( new GenericBuyInfo( typeof( Boots ), 10, 20, 0x170b, Utility.RandomNeutralHue() ) ); + Add( new GenericBuyInfo( typeof( Sandals ), 5, 20, 0x170d, Utility.RandomNeutralHue() ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Shoes ), 4 ); + Add( typeof( Boots ), 5 ); + Add( typeof( ThighBoots ), 7 ); + Add( typeof( Sandals ), 2 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBCook.cs b/Scripts/Mobiles/Towns/Sales/SBCook.cs new file mode 100644 index 0000000..5de7e60 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBCook.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBCook : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBCook() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( BreadLoaf ), 5, 20, 0x103B, 0 ) ); + Add( new GenericBuyInfo( typeof( BreadLoaf ), 5, 20, 0x103C, 0 ) ); + Add( new GenericBuyInfo( typeof( ApplePie ), 7, 20, 0x1041, 0 ) ); //OSI just has Pie, not Apple/Fruit/Meat + Add( new GenericBuyInfo( typeof( Cake ), 13, 20, 0x9E9, 0 ) ); + Add( new GenericBuyInfo( typeof( Muffins ), 3, 20, 0x9EA, 0 ) ); + + Add( new GenericBuyInfo( typeof( CheeseWheel ), 21, 10, 0x97E, 0 ) ); + Add( new GenericBuyInfo( typeof( CookedBird ), 17, 20, 0x9B7, 0 ) ); + Add( new GenericBuyInfo( typeof( LambLeg ), 8, 20, 0x160A, 0 ) ); + Add( new GenericBuyInfo( typeof( ChickenLeg ), 5, 20, 0x1608, 0 ) ); + + Add( new GenericBuyInfo( typeof( WoodenBowlOfCarrots ), 3, 20, 0x15F9, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfCorn ), 3, 20, 0x15FA, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfLettuce ), 3, 20, 0x15FB, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfPeas ), 3, 20, 0x15FC, 0 ) ); + Add( new GenericBuyInfo( typeof( EmptyPewterBowl ), 2, 20, 0x15FD, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfCorn ), 3, 20, 0x15FE, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfLettuce ), 3, 20, 0x15FF, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPeas ), 3, 20, 0x1600, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPotatos ), 3, 20, 0x1601, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfStew ), 3, 20, 0x1604, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfTomatoSoup ), 3, 20, 0x1606, 0 ) ); + + Add( new GenericBuyInfo( typeof( RoastPig ), 106, 20, 0x9BB, 0 ) ); + Add( new GenericBuyInfo( typeof( SackFlour ), 3, 20, 0x1039, 0 ) ); + Add( new GenericBuyInfo( typeof( JarHoney ), 3, 20, 0x9EC, 0 ) ); + Add( new GenericBuyInfo( typeof( RollingPin ), 2, 20, 0x1043, 0 ) ); + Add( new GenericBuyInfo( typeof( FlourSifter ), 2, 20, 0x103E, 0 ) ); + Add( new GenericBuyInfo( "1044567", typeof( Skillet ), 3, 20, 0x97F, 0 ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( CheeseWheel ), 12 ); + Add( typeof( CookedBird ), 8 ); + Add( typeof( RoastPig ), 53 ); + Add( typeof( Cake ), 5 ); + Add( typeof( JarHoney ), 1 ); + Add( typeof( SackFlour ), 1 ); + Add( typeof( BreadLoaf ), 2 ); + Add( typeof( ChickenLeg ), 3 ); + Add( typeof( LambLeg ), 4 ); + Add( typeof( Skillet ), 1 ); + Add( typeof( FlourSifter ), 1 ); + Add( typeof( RollingPin ), 1 ); + Add( typeof( Muffins ), 1 ); + Add( typeof( ApplePie ), 3 ); + + Add( typeof( WoodenBowlOfCarrots ), 1 ); + Add( typeof( WoodenBowlOfCorn ), 1 ); + Add( typeof( WoodenBowlOfLettuce ), 1 ); + Add( typeof( WoodenBowlOfPeas ), 1 ); + Add( typeof( EmptyPewterBowl ), 1 ); + Add( typeof( PewterBowlOfCorn ), 1 ); + Add( typeof( PewterBowlOfLettuce ), 1 ); + Add( typeof( PewterBowlOfPeas ), 1 ); + Add( typeof( PewterBowlOfPotatos ), 1 ); + Add( typeof( WoodenBowlOfStew ), 1 ); + Add( typeof( WoodenBowlOfTomatoSoup ), 1 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBFarmer.cs b/Scripts/Mobiles/Towns/Sales/SBFarmer.cs new file mode 100644 index 0000000..af2fd71 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBFarmer.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBFarmer : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBFarmer() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Cabbage ), 5, 20, 0xC7B, 0 ) ); + Add( new GenericBuyInfo( typeof( Cantaloupe ), 6, 20, 0xC79, 0 ) ); + Add( new GenericBuyInfo( typeof( Carrot ), 3, 20, 0xC78, 0 ) ); + Add( new GenericBuyInfo( typeof( HoneydewMelon ), 7, 20, 0xC74, 0 ) ); + Add( new GenericBuyInfo( typeof( Squash ), 3, 20, 0xC72, 0 ) ); + Add( new GenericBuyInfo( typeof( Lettuce ), 5, 20, 0xC70, 0 ) ); + Add( new GenericBuyInfo( typeof( Onion ), 3, 20, 0xC6D, 0 ) ); + Add( new GenericBuyInfo( typeof( Pumpkin ), 11, 20, 0xC6A, 0 ) ); + Add( new GenericBuyInfo( typeof( GreenGourd ), 3, 20, 0xC66, 0 ) ); + Add( new GenericBuyInfo( typeof( YellowGourd ), 3, 20, 0xC64, 0 ) ); + //Add( new GenericBuyInfo( typeof( Turnip ), 6, 20, XXXXXX, 0 ) ); + Add( new GenericBuyInfo( typeof( Watermelon ), 7, 20, 0xC5C, 0 ) ); + //Add( new GenericBuyInfo( typeof( EarOfCorn ), 3, 20, XXXXXX, 0 ) ); + Add( new GenericBuyInfo( typeof( Eggs ), 3, 20, 0x9B5, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Milk, 7, 20, 0x9AD, 0 ) ); + Add( new GenericBuyInfo( typeof( Peach ), 3, 20, 0x9D2, 0 ) ); + Add( new GenericBuyInfo( typeof( Pear ), 3, 20, 0x994, 0 ) ); + Add( new GenericBuyInfo( typeof( Lemon ), 3, 20, 0x1728, 0 ) ); + Add( new GenericBuyInfo( typeof( Lime ), 3, 20, 0x172A, 0 ) ); + Add( new GenericBuyInfo( typeof( Grapes ), 3, 20, 0x9D1, 0 ) ); + Add( new GenericBuyInfo( typeof( Apple ), 3, 20, 0x9D0, 0 ) ); + Add( new GenericBuyInfo( typeof( SheafOfHay ), 2, 20, 0xF36, 0 ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Pitcher ), 5 ); + Add( typeof( Eggs ), 1 ); + Add( typeof( Apple ), 1 ); + Add( typeof( Grapes ), 1 ); + Add( typeof( Watermelon ), 3 ); + Add( typeof( YellowGourd ), 1 ); + Add( typeof( GreenGourd ), 1 ); + Add( typeof( Pumpkin ), 5 ); + Add( typeof( Onion ), 1 ); + Add( typeof( Lettuce ), 2 ); + Add( typeof( Squash ), 1 ); + Add( typeof( Carrot ), 1 ); + Add( typeof( HoneydewMelon ), 3 ); + Add( typeof( Cantaloupe ), 3 ); + Add( typeof( Cabbage ), 2 ); + Add( typeof( Lemon ), 1 ); + Add( typeof( Lime ), 1 ); + Add( typeof( Peach ), 1 ); + Add( typeof( Pear ), 1 ); + Add( typeof( SheafOfHay ), 1 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBFisherman.cs b/Scripts/Mobiles/Towns/Sales/SBFisherman.cs new file mode 100644 index 0000000..3b6a1d2 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBFisherman.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBFisherman : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBFisherman() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( RawFishSteak ), 3, 20, 0x97A, 0 ) ); + //TODO: Add( new GenericBuyInfo( typeof( SmallFish ), 3, 20, 0xDD6, 0 ) ); + //TODO: Add( new GenericBuyInfo( typeof( SmallFish ), 3, 20, 0xDD7, 0 ) ); + Add( new GenericBuyInfo( typeof( Fish ), 6, 80, 0x9CC, 0 ) ); + Add( new GenericBuyInfo( typeof( Fish ), 6, 80, 0x9CD, 0 ) ); + Add( new GenericBuyInfo( typeof( Fish ), 6, 80, 0x9CE, 0 ) ); + Add( new GenericBuyInfo( typeof( Fish ), 6, 80, 0x9CF, 0 ) ); + Add( new GenericBuyInfo( typeof( FishingPole ), 15, 20, 0xDC0, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( RawFishSteak ), 1 ); + Add( typeof( Fish ), 1 ); + //TODO: Add( typeof( SmallFish ), 1 ); + Add( typeof( FishingPole ), 7 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBGuilds.cs b/Scripts/Mobiles/Towns/Sales/SBGuilds.cs new file mode 100644 index 0000000..8110e41 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBGuilds.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBGuildAlchemist : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildAlchemist(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyBottles ), 500, 20, 0x1709, 0 ) ); + } + } + } + + public class SBGuildCarpenter : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildCarpenter(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyBoards ), 300, 20, 0x17BB, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyLogs ), 300, 20, 0x172F, 0 ) ); + } + } + } + + public class SBGuildSmith : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildSmith(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyIngots ), 500, 20, 0x17BC, 0 ) ); + } + } + } + + public class SBGuildTailor : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildTailor(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyCloth ), 600, 20, 0x1730, 0 ) ); + } + } + } + + public class SBGuildScribe : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildScribe(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyScrolls ), 500, 20, 0x1794, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyMaps ), 500, 20, 0x1644, 0 ) ); + } + } + } + + public class SBGuildHealer : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildHealer(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyBandages ), 200, 20, 0x1795, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyGarlic ), 300, 20, 0x17B5, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyGinseng ), 300, 20, 0x17B6, 0 ) ); + } + } + } + + public class SBGuildRanger : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildRanger(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyArrows ), 200, 20, 0xF41, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyBolts ), 200, 20, 0x1BFD, 0 ) ); + } + } + } + + public class SBGuildMage : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildMage(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyBlackPearl ), 500, 20, 0x17B3, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyBloodmoss ), 500, 20, 0x17B4, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyGarlic ), 300, 20, 0x17B5, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyGinseng ), 300, 20, 0x17B6, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyMandrakeRoot ), 300, 20, 0x17B7, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplyNightshade ), 300, 20, 0x17B8, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplySpidersSilk ), 300, 20, 0x17B9, 0 ) ); + Add( new GenericBuyInfo( typeof( SupplySulfurousAsh ), 300, 20, 0x17BA, 0 ) ); + } + } + } + + public class SBGuildThief : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + public SBGuildThief(){ } + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + public class InternalSellInfo : GenericSellInfo {public InternalSellInfo(){}} + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SupplyLockpicks ), 600, 20, 0x14FD, 0 ) ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBGypsy.cs b/Scripts/Mobiles/Towns/Sales/SBGypsy.cs new file mode 100644 index 0000000..8326758 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBGypsy.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBGypsy : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBGypsy() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Candle ), 6, 5, 0xA28, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Wine, 7, 20, 0x9C7, 0 ) ); + Add( new GenericBuyInfo( typeof( Garlic ), 3, 20, 0xF84, 0 ) ); + Add( new GenericBuyInfo( typeof( Ginseng ), 3, 20, 0xF85, 0 ) ); + Add( new GenericBuyInfo( typeof( Nightshade ), 3, 20, 0xF88, 0 ) ); + Add( new GenericBuyInfo( typeof( Bottle ), 5, 20, 0xF0E, 0 ) ); + Add( new GenericBuyInfo( typeof( RedBook ), 15, 5, 0xFF1, 0 ) ); + Add( new GenericBuyInfo( typeof( MortarPestle ), 8, 5, 0xE9B, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Candle ), 3 ); + Add( typeof( RedBook ), 7 ); + Add( typeof( Garlic ), 2 ); + Add( typeof( Ginseng ), 2 ); + Add( typeof( Nightshade ), 2 ); + Add( typeof( Bottle ), 3 ); + Add( typeof( MortarPestle ), 4 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBHairStylist.cs b/Scripts/Mobiles/Towns/Sales/SBHairStylist.cs new file mode 100644 index 0000000..78647e0 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBHairStylist.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBHairStylist : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBHairStylist() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( "special beard dye", typeof( SpecialBeardDye ), 500000, 20, 0xE26, 0 ) ); + Add( new GenericBuyInfo( "special hair dye", typeof( SpecialHairDye ), 500000, 20, 0xE26, 0 ) ); + Add( new GenericBuyInfo( "1041060", typeof( HairDye ), 60, 20, 0xEFF, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( HairDye ), 30 ); + Add( typeof( SpecialBeardDye ), 250000 ); + Add( typeof( SpecialHairDye ), 250000 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBHealer.cs b/Scripts/Mobiles/Towns/Sales/SBHealer.cs new file mode 100644 index 0000000..b5b86b5 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBHealer.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBHealer : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBHealer() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Bandage ), 2, 20, 0xE21, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserHealPotion ), 15, 20, 0xF0C, 0 ) ); + Add( new GenericBuyInfo( typeof( Ginseng ), 3, 20, 0xF85, 0 ) ); + Add( new GenericBuyInfo( typeof( Garlic ), 3, 20, 0xF84, 0 ) ); + Add( new GenericBuyInfo( typeof( RefreshPotion ), 15, 20, 0xF0B, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( LesserHealPotion ), 7 ); + Add( typeof( RefreshPotion ), 7 ); + Add( typeof( Garlic ), 2 ); + Add( typeof( Ginseng ), 2 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBHerbalist.cs b/Scripts/Mobiles/Towns/Sales/SBHerbalist.cs new file mode 100644 index 0000000..5a73dba --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBHerbalist.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBHerbalist : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBHerbalist() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Ginseng ), 3, 20, 0xF85, 0 ) ); + Add( new GenericBuyInfo( typeof( Garlic ), 3, 20, 0xF84, 0 ) ); + Add( new GenericBuyInfo( typeof( MandrakeRoot ), 3, 20, 0xF86, 0 ) ); + Add( new GenericBuyInfo( typeof( Nightshade ), 3, 20, 0xF88, 0 ) ); + Add( new GenericBuyInfo( typeof( Bloodmoss ), 5, 20, 0xF7B, 0 ) ); + Add( new GenericBuyInfo( typeof( MortarPestle ), 8, 20, 0xE9B, 0 ) ); + Add( new GenericBuyInfo( typeof( Bottle ), 5, 20, 0xF0E, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantA ), 528, 5, 0x18B8, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantB ), 528, 5, 0x18B9, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantC ), 528, 5, 0x18BA, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantD ), 528, 5, 0x18BB, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantE ), 528, 5, 0x18BC, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantF ), 528, 5, 0x18BD, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantG ), 528, 5, 0x18BE, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantH ), 528, 5, 0x18BF, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantI ), 528, 5, 0x18C0, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantJ ), 528, 5, 0x18C1, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantK ), 528, 5, 0x18C2, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantL ), 528, 5, 0x18C3, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantM ), 528, 5, 0x18C4, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantN ), 528, 5, 0x18C5, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantO ), 528, 5, 0x18C6, 0 ) ); + Add( new GenericBuyInfo( typeof( HousePlantP ), 528, 5, 0x18C7, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Bloodmoss ), 3 ); + Add( typeof( MandrakeRoot ), 2 ); + Add( typeof( Garlic ), 2 ); + Add( typeof( Ginseng ), 2 ); + Add( typeof( Nightshade ), 2 ); + Add( typeof( Bottle ), 3 ); + Add( typeof( MortarPestle ), 4 ); + Add( typeof( HousePlantA ), 264 ); + Add( typeof( HousePlantB ), 264 ); + Add( typeof( HousePlantC ), 264 ); + Add( typeof( HousePlantD ), 264 ); + Add( typeof( HousePlantE ), 264 ); + Add( typeof( HousePlantF ), 264 ); + Add( typeof( HousePlantG ), 264 ); + Add( typeof( HousePlantH ), 264 ); + Add( typeof( HousePlantI ), 264 ); + Add( typeof( HousePlantJ ), 264 ); + Add( typeof( HousePlantK ), 264 ); + Add( typeof( HousePlantL ), 264 ); + Add( typeof( HousePlantM ), 264 ); + Add( typeof( HousePlantN ), 264 ); + Add( typeof( HousePlantO ), 264 ); + Add( typeof( HousePlantP ), 264 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBInfo.cs b/Scripts/Mobiles/Towns/Sales/SBInfo.cs new file mode 100644 index 0000000..5987a5b --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBInfo.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public abstract class SBInfo + { + public SBInfo() + { + } + + public abstract IShopSellInfo SellInfo { get; } + public abstract List BuyInfo { get; } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBInnKeeper.cs b/Scripts/Mobiles/Towns/Sales/SBInnKeeper.cs new file mode 100644 index 0000000..9fd425a --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBInnKeeper.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBInnKeeper : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBInnKeeper() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Ale, 10, 20, 0x99F, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Wine, 7, 20, 0x9C7, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Liquor, 5, 20, 0x99B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Jug ), BeverageType.Cider, 13, 20, 0x9C8, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Milk, 7, 20, 0x9F0, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Ale, 16, 20, 0x1F95, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Cider, 11, 20, 0x1F97, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Liquor, 9, 20, 0x1F99, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Wine, 11, 20, 0x1F9B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Water, 11, 20, 0x1F9D, 0 ) ); + + Add( new GenericBuyInfo( typeof( BreadLoaf ), 6, 10, 0x103B, 0 ) ); + Add( new GenericBuyInfo( typeof( CheeseWheel ), 21, 10, 0x97E, 0 ) ); + Add( new GenericBuyInfo( typeof( CookedBird ), 17, 20, 0x9B7, 0 ) ); + Add( new GenericBuyInfo( typeof( LambLeg ), 8, 20, 0x160A, 0 ) ); + Add( new GenericBuyInfo( typeof( ChickenLeg ), 5, 20, 0x1608, 0 ) ); + Add( new GenericBuyInfo( typeof( Ribs ), 7, 20, 0x9F2, 0 ) ); + + Add( new GenericBuyInfo( typeof( WoodenBowlOfCarrots ), 3, 20, 0x15F9, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfCorn ), 3, 20, 0x15FA, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfLettuce ), 3, 20, 0x15FB, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfPeas ), 3, 20, 0x15FC, 0 ) ); + Add( new GenericBuyInfo( typeof( EmptyPewterBowl ), 2, 20, 0x15FD, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfCorn ), 3, 20, 0x15FE, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfLettuce ), 3, 20, 0x15FF, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPeas ), 3, 20, 0x1600, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPotatos ), 3, 20, 0x1601, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfStew ), 3, 20, 0x1604, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfTomatoSoup ), 3, 20, 0x1606, 0 ) ); + + Add( new GenericBuyInfo( typeof( ApplePie ), 7, 20, 0x1041, 0 ) ); //OSI just has Pie, not Apple/Fruit/Meat + + Add( new GenericBuyInfo( typeof( Peach ), 3, 20, 0x9D2, 0 ) ); + Add( new GenericBuyInfo( typeof( Pear ), 3, 20, 0x994, 0 ) ); + Add( new GenericBuyInfo( typeof( Grapes ), 3, 20, 0x9D1, 0 ) ); + Add( new GenericBuyInfo( typeof( Apple ), 3, 20, 0x9D0, 0 ) ); + Add( new GenericBuyInfo( typeof( Banana ), 2, 20, 0x171F, 0 ) ); + Add( new GenericBuyInfo( typeof( Torch ), 7, 20, 0xF6B, 0 ) ); + Add( new GenericBuyInfo( typeof( Candle ), 6, 20, 0xA28, 0 ) ); + + Add( new GenericBuyInfo( typeof( Backpack ), 15, 20, 0x9B2, 0 ) ); + Add( new GenericBuyInfo( "1016450", typeof( Chessboard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( "1016449", typeof( CheckerBoard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( typeof( Backgammon ), 2, 20, 0xE1C, 0 ) ); + Add( new GenericBuyInfo( typeof( Dices ), 2, 20, 0xFA7, 0 ) ); + Add( new GenericBuyInfo( "a barkeep contract", typeof( BarkeepContract ), 1252, 20, 0x14F0, 0 ) ); + Add( new GenericBuyInfo( "1041243", typeof( ContractOfEmployment ), 1252, 20, 0x14F0, 0 ) ); + + if ( Multis.BaseHouse.NewVendorSystem ) + Add( new GenericBuyInfo( "1062332", typeof( VendorRentalContract ), 1252, 20, 0x14F0, 0x672 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( BeverageBottle ), 3 ); + Add( typeof( Jug ), 6 ); + Add( typeof( Pitcher ), 5 ); + Add( typeof( GlassMug ), 1 ); + Add( typeof( BreadLoaf ), 3 ); + Add( typeof( CheeseWheel ), 12 ); + Add( typeof( Ribs ), 6 ); + Add( typeof( Peach ), 1 ); + Add( typeof( Pear ), 1 ); + Add( typeof( Grapes ), 1 ); + Add( typeof( Apple ), 1 ); + Add( typeof( Banana ), 1 ); + Add( typeof( Torch ), 3 ); + Add( typeof( Candle ), 3 ); + Add( typeof( Chessboard ), 1 ); + Add( typeof( CheckerBoard ), 1 ); + Add( typeof( Backgammon ), 1 ); + Add( typeof( Dices ), 1 ); + Add( typeof( ContractOfEmployment ), 626 ); + Add( typeof( WoodenBowlOfCarrots ), 1 ); + Add( typeof( WoodenBowlOfCorn ), 1 ); + Add( typeof( WoodenBowlOfLettuce ), 1 ); + Add( typeof( WoodenBowlOfPeas ), 1 ); + Add( typeof( EmptyPewterBowl ), 1 ); + Add( typeof( PewterBowlOfCorn ), 1 ); + Add( typeof( PewterBowlOfLettuce ), 1 ); + Add( typeof( PewterBowlOfPeas ), 1 ); + Add( typeof( PewterBowlOfPotatos ), 1 ); + Add( typeof( WoodenBowlOfStew ), 1 ); + Add( typeof( WoodenBowlOfTomatoSoup ), 1 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBJester.cs b/Scripts/Mobiles/Towns/Sales/SBJester.cs new file mode 100644 index 0000000..b02aef0 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBJester.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBJester : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBJester() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Lockpick ), 12, 20, 0x14FC, 0 ) ); + Add( new GenericBuyInfo( typeof( Dices ), 2, 20, 0xFA7, 0 ) ); + Add( new GenericBuyInfo( typeof( Dagger ), 21, 20, 0xF52, 0 ) ); + Add( new GenericBuyInfo( typeof( JesterSuit ), 26, 20, 0x1F9F, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( JesterHat ), 12, 20, 0x171C, Utility.RandomHue() ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Liquor, 5, 20, 0x99B, 0 ) ); + Add( new GenericBuyInfo( typeof( ApplePie ), 7, 20, 0x1041, 0 ) ); + Add( new GenericBuyInfo( typeof( AgilityPotion ), 15, 10, 0xF08, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserExplosionPotion ), 21, 10, 0xF0D, 0 ) ); + Add( new GenericBuyInfo( typeof( HairDye ), 37, 20, 0xEFF, 0 ) ); + Add( new GenericBuyInfo( typeof( DisguiseKit ), 700, 20, 0xE05, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Lockpick ), 6 ); + Add( typeof( AgilityPotion ), 7 ); + Add( typeof( LesserExplosionPotion ), 10 ); + Add( typeof( BeverageBottle ), 3 ); + Add( typeof( Dices ), 1 ); + Add( typeof( Dagger ), 10 ); + Add( typeof( JesterHat ), 6 ); + Add( typeof( JesterSuit ), 13 ); + Add( typeof( HairDye ), 19 ); + Add( typeof( DisguiseKit ), 300 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBJewel.cs b/Scripts/Mobiles/Towns/Sales/SBJewel.cs new file mode 100644 index 0000000..471491a --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBJewel.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBJewel: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBJewel() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( GoldRing ), 27, 20, 0x108A, 0 ) ); + Add( new GenericBuyInfo( typeof( Necklace ), 26, 20, 0x1085, 0 ) ); + Add( new GenericBuyInfo( typeof( GoldNecklace ), 27, 20, 0x1088, 0 ) ); + Add( new GenericBuyInfo( typeof( GoldBeadNecklace ), 27, 20, 0x1089, 0 ) ); + Add( new GenericBuyInfo( typeof( Beads ), 27, 20, 0x108B, 0 ) ); + Add( new GenericBuyInfo( typeof( GoldBracelet ), 27, 20, 0x1086, 0 ) ); + Add( new GenericBuyInfo( typeof( GoldEarrings ), 27, 20, 0x1087, 0 ) ); + + Add( new GenericBuyInfo( typeof( StarSapphire ), 125, 20, 0xF21, 0 ) ); + Add( new GenericBuyInfo( typeof( Emerald ), 100, 20, 0xF10, 0 ) ); + Add( new GenericBuyInfo( typeof( Sapphire ), 100, 20, 0xF19, 0 ) ); + Add( new GenericBuyInfo( typeof( Ruby ), 75, 20, 0xF13, 0 ) ); + Add( new GenericBuyInfo( typeof( Citrine ), 50, 20, 0xF15, 0 ) ); + Add( new GenericBuyInfo( typeof( Amethyst ), 100, 20, 0xF16, 0 ) ); + Add( new GenericBuyInfo( typeof( Tourmaline ), 75, 20, 0xF2D, 0 ) ); + Add( new GenericBuyInfo( typeof( Amber ), 50, 20, 0xF25, 0 ) ); + Add( new GenericBuyInfo( typeof( Diamond ), 200, 20, 0xF26, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Amber ), 25 ); + Add( typeof( Amethyst ), 50 ); + Add( typeof( Citrine ), 25 ); + Add( typeof( Diamond ), 100 ); + Add( typeof( Emerald ), 50 ); + Add( typeof( Ruby ), 37 ); + Add( typeof( Sapphire ), 50 ); + Add( typeof( StarSapphire ), 62 ); + Add( typeof( Tourmaline ), 47 ); + Add( typeof( GoldRing ), 13 ); + Add( typeof( SilverRing ), 10 ); + Add( typeof( Necklace ), 13 ); + Add( typeof( GoldNecklace ), 13 ); + Add( typeof( GoldBeadNecklace ), 13 ); + Add( typeof( SilverNecklace ), 10 ); + Add( typeof( SilverBeadNecklace ), 10 ); + Add( typeof( Beads ), 13 ); + Add( typeof( GoldBracelet ), 13 ); + Add( typeof( SilverBracelet ), 10 ); + Add( typeof( GoldEarrings ), 13 ); + Add( typeof( SilverEarrings ), 10 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/SBLeatherWorker.cs b/Scripts/Mobiles/Towns/Sales/SBLeatherWorker.cs new file mode 100644 index 0000000..7fbb742 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBLeatherWorker.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBLeatherWorker: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBLeatherWorker() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Hides ), 4, 20, 0x1078, 0 ) ); + Add( new GenericBuyInfo( typeof( ThighBoots ), 56, 10, 0x1711, 0 ) ); + Add( new GenericBuyInfo( typeof( Whip ), 16, 20, 0x26BB, 0x4A8 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Hides ), 2 ); + Add( typeof( ThighBoots ), 28 ); + Add( typeof( Whip ), 8 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/SBMage.cs b/Scripts/Mobiles/Towns/Sales/SBMage.cs new file mode 100644 index 0000000..e131d4e --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBMage.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBMage : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBMage() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Spellbook ), 18, 10, 0xEFA, 0 ) ); + + Add( new GenericBuyInfo( typeof( ScribesPen ), 8, 10, 0xFBF, 0 ) ); + + Add( new GenericBuyInfo( typeof( BlankScroll ), 5, 20, 0x0E34, 0 ) ); + + Add( new GenericBuyInfo( typeof( RefreshPotion ), 15, 10, 0xF0B, 0 ) ); + Add( new GenericBuyInfo( typeof( AgilityPotion ), 15, 10, 0xF08, 0 ) ); + Add( new GenericBuyInfo( typeof( NightSightPotion ), 15, 10, 0xF06, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserHealPotion ), 15, 10, 0xF0C, 0 ) ); + Add( new GenericBuyInfo( typeof( StrengthPotion ), 15, 10, 0xF09, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserPoisonPotion ), 15, 10, 0xF0A, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserCurePotion ), 15, 10, 0xF07, 0 ) ); + Add( new GenericBuyInfo( typeof( LesserExplosionPotion ), 21, 10, 0xF0D, 0 ) ); + + Add( new GenericBuyInfo( typeof( BlackPearl ), 5, 20, 0xF7A, 0 ) ); + Add( new GenericBuyInfo( typeof( Bloodmoss ), 5, 20, 0xF7B, 0 ) ); + Add( new GenericBuyInfo( typeof( Garlic ), 3, 20, 0xF84, 0 ) ); + Add( new GenericBuyInfo( typeof( Ginseng ), 3, 20, 0xF85, 0 ) ); + Add( new GenericBuyInfo( typeof( MandrakeRoot ), 3, 20, 0xF86, 0 ) ); + Add( new GenericBuyInfo( typeof( Nightshade ), 3, 20, 0xF88, 0 ) ); + Add( new GenericBuyInfo( typeof( SpidersSilk ), 3, 20, 0xF8D, 0 ) ); + Add( new GenericBuyInfo( typeof( SulfurousAsh ), 3, 20, 0xF8C, 0 ) ); + + Type[] types = Loot.RegularScrollTypes; + + int circles = 3; + + for ( int i = 0; i < circles*8 && i < types.Length; ++i ) + { + int itemID = 0x1F2E + i; + + if ( i == 6 ) + itemID = 0x1F2D; + else if ( i > 6 ) + --itemID; + + Add( new GenericBuyInfo( types[i], 12 + ((i / 8) * 10), 20, itemID, 0 ) ); + } + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( WizardsHat ), 15 ); + Add( typeof( BlackPearl ), 3 ); + Add( typeof( Bloodmoss ),4 ); + Add( typeof( MandrakeRoot ), 2 ); + Add( typeof( Garlic ), 2 ); + Add( typeof( Ginseng ), 2 ); + Add( typeof( Nightshade ), 2 ); + Add( typeof( SpidersSilk ), 2 ); + Add( typeof( SulfurousAsh ), 2 ); + Add( typeof( Spellbook ), 25 ); + + Type[] types = Loot.RegularScrollTypes; + + for ( int i = 0; i < types.Length; ++i ) + Add(types[i], i + 3 + (i / 4)); // This is NOT 100% OSI accurate. Two spells per circle will be off by 1gp, as OSI's math is slightly different. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBMapmaker.cs b/Scripts/Mobiles/Towns/Sales/SBMapmaker.cs new file mode 100644 index 0000000..22aba13 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBMapmaker.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBMapmaker : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBMapmaker() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( BlankMap ), 5, 40, 0x14EC, 0 ) ); + Add( new GenericBuyInfo( typeof( MapmakersPen ), 8, 20, 0x0FBF, 0 ) ); + Add( new GenericBuyInfo( typeof( Sextant ), 13, 20, 0x1057, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( MapmakersPen ), 4 ); + Add( typeof( BlankMap ), 2 ); + Add( typeof( CityMap ), 3 ); + Add( typeof( LocalMap ), 3 ); + Add( typeof( WorldMap ), 3 ); + Add( typeof( PresetMapEntry ), 3 ); + Add( typeof( Sextant ), 6 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBMiller.cs b/Scripts/Mobiles/Towns/Sales/SBMiller.cs new file mode 100644 index 0000000..2a1376d --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBMiller.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBMiller : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBMiller() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SackFlour ), 3, 20, 0x1039, 0 ) ); + Add( new GenericBuyInfo( typeof( SheafOfHay ), 2, 20, 0xF36, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( SackFlour ), 1 ); + Add( typeof( SheafOfHay ), 1 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBMiner.cs b/Scripts/Mobiles/Towns/Sales/SBMiner.cs new file mode 100644 index 0000000..1bb4da1 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBMiner.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBMiner: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBMiner() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Bag ), 6, 20, 0xE76, 0 ) ); + Add( new GenericBuyInfo( typeof( Candle ), 6, 10, 0xA28, 0 ) ); + Add( new GenericBuyInfo( typeof( Torch ), 8, 10, 0xF6B, 0 ) ); + Add( new GenericBuyInfo( typeof( Lantern ), 2, 10, 0xA25, 0 ) ); + Add( new GenericBuyInfo( typeof( Pickaxe ), 25, 20, 0xE86, 0 ) ); + Add( new GenericBuyInfo( typeof( Shovel ), 12, 20, 0xF39, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Pickaxe ), 12 ); + Add( typeof( Shovel ), 6 ); + Add( typeof( Lantern ), 1 ); + Add( typeof( Torch ), 3 ); + Add( typeof( Bag ), 3 ); + Add( typeof( Candle ), 3 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBPlayerBarkeeper.cs b/Scripts/Mobiles/Towns/Sales/SBPlayerBarkeeper.cs new file mode 100644 index 0000000..b8fd6ab --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBPlayerBarkeeper.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBPlayerBarkeeper : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBPlayerBarkeeper() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Ale, 10, 20, 0x99F, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Wine, 7, 20, 0x9C7, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Liquor, 5, 20, 0x99B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Jug ), BeverageType.Cider, 13, 20, 0x9C8, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Milk, 7, 20, 0x9F0, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Ale, 16, 20, 0x1F95, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Cider, 11, 20, 0x1F97, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Liquor, 9, 20, 0x1F99, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Wine, 11, 20, 0x1F9B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Water, 11, 20, 0x1F9D, 0 ) ); + + Add( new GenericBuyInfo( "1016450", typeof( Chessboard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( "1016449", typeof( CheckerBoard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( typeof( Backgammon ), 2, 20, 0xE1C, 0 ) ); + Add( new GenericBuyInfo( typeof( Dices ), 2, 20, 0xFA7, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBProvisioner.cs b/Scripts/Mobiles/Towns/Sales/SBProvisioner.cs new file mode 100644 index 0000000..fcb3f7a --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBProvisioner.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections.Generic; +using Server.Items; +using Server.Guilds; + +namespace Server.Mobiles +{ + public class SBProvisioner : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBProvisioner() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Arrow ), 2, 20, 0xF3F, 0 ) ); + Add( new GenericBuyInfo( typeof( Bolt ), 5, 20, 0x1BFB, 0 ) ); + + Add( new GenericBuyInfo( typeof( Backpack ), 15, 20, 0x9B2, 0 ) ); + Add( new GenericBuyInfo( typeof( Pouch ), 6, 20, 0xE79, 0 ) ); + Add( new GenericBuyInfo( typeof( Bag ), 6, 20, 0xE76, 0 ) ); + Add( new GenericBuyInfo( typeof( BigBag ), 10, 20, 0x2115, 0x49E ) ); + + Add( new GenericBuyInfo( typeof( Candle ), 6, 20, 0xA28, 0 ) ); + Add( new GenericBuyInfo( typeof( Torch ), 8, 20, 0xF6B, 0 ) ); + Add( new GenericBuyInfo( typeof( Lantern ), 2, 20, 0xA25, 0 ) ); + Add( new GenericBuyInfo( typeof( Lockpick ), 12, 20, 0x14FC, 0 ) ); + + Add( new GenericBuyInfo( typeof( FloppyHat ), 7, 20, 0x1713, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( Hood ), 7, 20, 0x141B, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( WideBrimHat ), 8, 20, 0x1714, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( Cap ), 10, 20, 0x1715, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( TallStrawHat ), 8, 20, 0x1716, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( StrawHat ), 7, 20, 0x1717, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( WizardsHat ), 11, 20, 0x1718, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( LeatherCap ), 10, 20, 0x1DB9, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( FeatheredHat ), 10, 20, 0x171A, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( TricorneHat ), 8, 20, 0x171B, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( Bandana ), 6, 20, 0x1540, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( SkullCap ), 7, 20, 0x1544, Utility.RandomDyedHue() ) ); + + Add( new GenericBuyInfo( typeof( BreadLoaf ), 6, 10, 0x103B, 0 ) ); + Add( new GenericBuyInfo( typeof( LambLeg ), 8, 20, 0x160A, 0 ) ); + Add( new GenericBuyInfo( typeof( ChickenLeg ), 5, 20, 0x1608, 0 ) ); + Add( new GenericBuyInfo( typeof( CookedBird ), 17, 20, 0x9B7, 0 ) ); + + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Ale, 10, 20, 0x99F, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Wine, 7, 20, 0x9C7, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Liquor, 5, 20, 0x99B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Jug ), BeverageType.Cider, 13, 20, 0x9C8, 0 ) ); + + Add( new GenericBuyInfo( typeof( Pear ), 3, 20, 0x994, 0 ) ); + Add( new GenericBuyInfo( typeof( Apple ), 3, 20, 0x9D0, 0 ) ); + + Add( new GenericBuyInfo( typeof( Garlic ), 3, 20, 0xF84, 0 ) ); + Add( new GenericBuyInfo( typeof( Ginseng ), 3, 20, 0xF85, 0 ) ); + + Add( new GenericBuyInfo( typeof( Bottle ), 5, 20, 0xF0E, 0 ) ); + + Add( new GenericBuyInfo( typeof( RedBook ), 15, 20, 0xFF1, 0 ) ); + Add( new GenericBuyInfo( typeof( BlueBook ), 15, 20, 0xFF2, 0 ) ); + Add( new GenericBuyInfo( typeof( TanBook ), 15, 20, 0xFF0, 0 ) ); + + Add( new GenericBuyInfo( typeof( WoodenBox ), 14, 20, 0xE7D, 0 ) ); + Add( new GenericBuyInfo( typeof( Key ), 2, 20, 0x100E, 0 ) ); + + Add( new GenericBuyInfo( typeof( BedRolled ), 5, 20, 0xA59, 0 ) ); + Add( new GenericBuyInfo( typeof( Kindling ), 2, 20, 0xDE1, 0 ) ); + + Add( new GenericBuyInfo( "1041205", typeof( Multis.SmallBoatDeed ), 10177, 20, 0x14F2, 0 ) ); + + Add( new GenericBuyInfo( "1041060", typeof( HairDye ), 60, 20, 0xEFF, 0 ) ); + + Add( new GenericBuyInfo( "1016450", typeof( Chessboard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( "1016449", typeof( CheckerBoard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( typeof( Backgammon ), 2, 20, 0xE1C, 0 ) ); + Add( new GenericBuyInfo( typeof( Dices ), 2, 20, 0xFA7, 0 ) ); + + if( !Guild.NewGuildSystem ) + Add( new GenericBuyInfo( "1041055", typeof( GuildDeed ), 12450, 20, 0x14F0, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Arrow ), 1 ); + Add( typeof( Bolt ), 2 ); + Add( typeof( Backpack ), 7 ); + Add( typeof( Pouch ), 3 ); + Add( typeof( BigBag ), 5 ); + Add( typeof( Bag ), 3 ); + Add( typeof( Candle ), 3 ); + Add( typeof( Torch ), 4 ); + Add( typeof( Lantern ), 1 ); + Add( typeof( Lockpick ), 6 ); + Add( typeof( FloppyHat ), 3 ); + Add( typeof( Hood ), 3 ); + Add( typeof( WideBrimHat ), 4 ); + Add( typeof( Cap ), 5 ); + Add( typeof( TallStrawHat ), 4 ); + Add( typeof( StrawHat ), 3 ); + Add( typeof( WizardsHat ), 5 ); + Add( typeof( LeatherCap ), 5 ); + Add( typeof( FeatheredHat ), 5 ); + Add( typeof( TricorneHat ), 4 ); + Add( typeof( Bandana ), 3 ); + Add( typeof( SkullCap ), 3 ); + Add( typeof( Bottle ), 3 ); + Add( typeof( RedBook ), 7 ); + Add( typeof( BlueBook ), 7 ); + Add( typeof( TanBook ), 7 ); + Add( typeof( WoodenBox ), 7 ); + Add( typeof( Kindling ), 1 ); + Add( typeof( HairDye ), 30 ); + Add( typeof( Chessboard ), 1 ); + Add( typeof( CheckerBoard ), 1 ); + Add( typeof( Backgammon ), 1 ); + Add( typeof( Dices ), 1 ); + Add( typeof( Amber ), 25 ); + Add( typeof( Amethyst ), 50 ); + Add( typeof( Citrine ), 25 ); + Add( typeof( Diamond ), 100 ); + Add( typeof( Emerald ), 50 ); + Add( typeof( Ruby ), 37 ); + Add( typeof( Sapphire ), 50 ); + Add( typeof( StarSapphire ), 62 ); + Add( typeof( Tourmaline ), 47 ); + Add( typeof( GoldRing ), 13 ); + Add( typeof( SilverRing ), 10 ); + Add( typeof( Necklace ), 13 ); + Add( typeof( GoldNecklace ), 13 ); + Add( typeof( GoldBeadNecklace ), 13 ); + Add( typeof( SilverNecklace ), 10 ); + Add( typeof( SilverBeadNecklace ), 10 ); + Add( typeof( Beads ), 13 ); + Add( typeof( GoldBracelet ), 13 ); + Add( typeof( SilverBracelet ), 10 ); + Add( typeof( GoldEarrings ), 13 ); + Add( typeof( SilverEarrings ), 10 ); + + if( !Guild.NewGuildSystem ) + Add( typeof( GuildDeed ), 6225 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/SBRanger.cs b/Scripts/Mobiles/Towns/Sales/SBRanger.cs new file mode 100644 index 0000000..78222b4 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBRanger.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBRanger : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBRanger() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new AnimalBuyInfo( 1, typeof( PackLlama ), 491, 20, 292, 0 ) ); + Add( new AnimalBuyInfo( 1, typeof( PackHorse ), 606, 20, 291, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBScribe.cs b/Scripts/Mobiles/Towns/Sales/SBScribe.cs new file mode 100644 index 0000000..5650274 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBScribe.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBScribe: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBScribe() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( ScribesPen ), 8, 20, 0xFBF, 0 ) ); + Add( new GenericBuyInfo( typeof( BlankScroll ), 5, 20, 0x0E34, 0 ) ); + Add( new GenericBuyInfo( typeof( ScribesPen ), 8, 20, 0xFC0, 0 ) ); + Add( new GenericBuyInfo( typeof( BrownBook ), 15, 10, 0xFEF, 0 ) ); + Add( new GenericBuyInfo( typeof( TanBook ), 15, 10, 0xFF0, 0 ) ); + Add( new GenericBuyInfo( typeof( BlueBook ), 15, 10, 0xFF2, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( ScribesPen ), 4 ); + Add( typeof( BrownBook ), 7 ); + Add( typeof( TanBook ), 7 ); + Add( typeof( BlueBook ), 7 ); + Add( typeof( BlankScroll ), 3 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBShipwright.cs b/Scripts/Mobiles/Towns/Sales/SBShipwright.cs new file mode 100644 index 0000000..d796d8c --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBShipwright.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using Server.Items; +using Server.Multis; + +namespace Server.Mobiles +{ + public class SBShipwright : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBShipwright() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( "1041205", typeof( SmallBoatDeed ), 10177, 20, 0x14F2, 0 ) ); + Add( new GenericBuyInfo( "1041206", typeof( SmallDragonBoatDeed ), 10177, 20, 0x14F2, 0 ) ); + Add( new GenericBuyInfo( "1041207", typeof( MediumBoatDeed ), 11552, 20, 0x14F2, 0 ) ); + Add( new GenericBuyInfo( "1041208", typeof( MediumDragonBoatDeed ), 11552, 20, 0x14F2, 0 ) ); + Add( new GenericBuyInfo( "1041209", typeof( LargeBoatDeed ), 12927, 20, 0x14F2, 0 ) ); + Add( new GenericBuyInfo( "1041210", typeof( LargeDragonBoatDeed ), 12927, 20, 0x14F2, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + //You technically CAN sell them back, *BUT* the vendors do not carry enough money to buy with + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBSmithTools.cs b/Scripts/Mobiles/Towns/Sales/SBSmithTools.cs new file mode 100644 index 0000000..94983c3 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBSmithTools.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBSmithTools: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBSmithTools() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( IronIngot ), 5, 16, 0x1BF2, 0 ) ); + Add( new GenericBuyInfo( typeof( Tongs ), 13, 14, 0xFBB, 0 ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Tongs ), 7 ); + Add( typeof( IronIngot ), 4 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBStableMaster.cs b/Scripts/Mobiles/Towns/Sales/SBStableMaster.cs new file mode 100644 index 0000000..867a49b --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBStableMaster.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBStableMaster : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBStableMaster() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new AnimalBuyInfo( 1, typeof( Horse ), 550, 10, 204, 0 ) ); + Add( new AnimalBuyInfo( 1, typeof( Llama ), 492, 10, 220, 0 ) ); + Add( new AnimalBuyInfo( 1, typeof( PackHorse ), 631, 10, 291, 0 ) ); + Add( new AnimalBuyInfo( 1, typeof( PackLlama ), 565, 10, 292, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/SBTailor.cs b/Scripts/Mobiles/Towns/Sales/SBTailor.cs new file mode 100644 index 0000000..ed5b4e4 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBTailor.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBTailor: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBTailor() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( SewingKit ), 3, 20, 0xF9D, 0 ) ); + Add( new GenericBuyInfo( typeof( Scissors ), 11, 20, 0xF9F, 0 ) ); + + Add( new GenericBuyInfo( typeof( Shirt ), 12, 20, 0x1517, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( ShortPants ), 7, 20, 0x152E, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( FancyShirt ), 21, 20, 0x1EFD, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( LongPants ), 10, 20, 0x1539, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( FancyDress ), 26, 20, 0x1EFF, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( PlainDress ), 13, 20, 0x1F01, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( Kilt ), 11, 20, 0x1537, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( Kilt ), 11, 20, 0x1537, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( HalfApron ), 10, 20, 0x153b, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( Robe ), 18, 20, 0x1F03, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( Cloak ), 8, 20, 0x1515, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( Cloak ), 8, 20, 0x1515, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( Doublet ), 13, 20, 0x1F7B, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( Tunic ), 18, 20, 0x1FA1, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( JesterSuit ), 26, 20, 0x1F9F, Utility.RandomHue() ) ); + + Add( new GenericBuyInfo( typeof( JesterHat ), 12, 20, 0x171C, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( FloppyHat ), 7, 20, 0x1713, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( Hood ), 7, 20, 0x141B, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( WideBrimHat ), 8, 20, 0x1714, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( Cap ), 10, 20, 0x1715, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( TallStrawHat ), 8, 20, 0x1716, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( StrawHat ), 7, 20, 0x1717, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( WizardsHat ), 11, 20, 0x1718, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( LeatherCap ), 10, 20, 0x1DB9, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( FeatheredHat ), 10, 20, 0x171A, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( TricorneHat ), 8, 20, 0x171B, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( Bandana ), 6, 20, 0x1540, Utility.RandomDyedHue() ) ); + Add( new GenericBuyInfo( typeof( SkullCap ), 7, 20, 0x1544, Utility.RandomDyedHue() ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Scissors ), 6 ); + Add( typeof( SewingKit ), 1 ); + + Add( typeof( FancyShirt ), 10 ); + Add( typeof( Shirt ), 6 ); + + Add( typeof( ShortPants ), 3 ); + Add( typeof( LongPants ), 5 ); + + Add( typeof( Cloak ), 4 ); + Add( typeof( FancyDress ), 12 ); + Add( typeof( Robe ), 9 ); + Add( typeof( PlainDress ), 7 ); + + Add( typeof( Skirt ), 5 ); + Add( typeof( Kilt ), 5 ); + + Add( typeof( Doublet ), 7 ); + Add( typeof( Tunic ), 9 ); + Add( typeof( JesterSuit ), 13 ); + + Add( typeof( FullApron ), 5 ); + Add( typeof( HalfApron ), 5 ); + + Add( typeof( JesterHat ), 6 ); + Add( typeof( FloppyHat ), 3 ); + Add( typeof( Hood ), 3 ); + Add( typeof( WideBrimHat ), 4 ); + Add( typeof( Cap ), 5 ); + Add( typeof( SkullCap ), 3 ); + Add( typeof( Bandana ), 3 ); + Add( typeof( TallStrawHat ), 4 ); + Add( typeof( StrawHat ), 4 ); + Add( typeof( WizardsHat ), 5 ); + Add( typeof( Bonnet ), 4 ); + Add( typeof( FeatheredHat ), 5 ); + Add( typeof( TricorneHat ), 4 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/SBTanner.cs b/Scripts/Mobiles/Towns/Sales/SBTanner.cs new file mode 100644 index 0000000..fa42611 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBTanner.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBTanner : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBTanner() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( LeatherGorget ), 31, 20, 0x13C7, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherCap ), 10, 20, 0x1DB9, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherArms ), 37, 20, 0x13CD, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherChest ), 47, 20, 0x13CC, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherLegs ), 36, 20, 0x13CB, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherGloves ), 31, 20, 0x13C6, 0 ) ); + + Add( new GenericBuyInfo( typeof( StuddedGorget ), 50, 20, 0x13D6, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedArms ), 57, 20, 0x13DC, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedChest ), 75, 20, 0x13DB, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedLegs ), 67, 20, 0x13DA, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedGloves ), 45, 20, 0x13D5, 0 ) ); + + Add( new GenericBuyInfo( typeof( FemaleStuddedChest ), 62, 20, 0x1C02, 0 ) ); + Add( new GenericBuyInfo( typeof( FemalePlateChest ), 207, 20, 0x1C04, 0 ) ); + Add( new GenericBuyInfo( typeof( FemaleLeatherChest ), 36, 20, 0x1C06, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherShorts ), 28, 20, 0x1C00, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherSkirt ), 25, 20, 0x1C08, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherBustierArms ), 25, 20, 0x1C0A, 0 ) ); + Add( new GenericBuyInfo( typeof( LeatherBustierArms ), 30, 20, 0x1C0B, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedBustierArms ), 50, 20, 0x1C0C, 0 ) ); + Add( new GenericBuyInfo( typeof( StuddedBustierArms ), 47, 20, 0x1C0D, 0 ) ); + + Add( new GenericBuyInfo( typeof( Bag ), 6, 20, 0xE76, 0 ) ); + Add( new GenericBuyInfo( typeof( Pouch ), 6, 20, 0xE79, 0 ) ); + Add( new GenericBuyInfo( typeof( Backpack ), 15, 20, 0x9B2, 0 ) ); + Add( new GenericBuyInfo( typeof( BigBag ), 10, 20, 0x2115, 0x49E ) ); + Add( new GenericBuyInfo( typeof( Leather ), 6, 20, 0x1081, 0 ) ); + + Add( new GenericBuyInfo( typeof( SkinningKnife ), 15, 20, 0xEC4, 0 ) ); + + Add( new GenericBuyInfo( typeof( TrophyBoard ), 10000, 20, 0x20D4, 0 ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Bag ), 3 ); + Add( typeof( Pouch ), 3 ); + Add( typeof( BigBag ), 5 ); + Add( typeof( Backpack ), 7 ); + + Add( typeof( Leather ), 5 ); + + Add( typeof( SkinningKnife ), 7 ); + + Add( typeof( LeatherArms ), 18 ); + Add( typeof( LeatherChest ), 23 ); + Add( typeof( LeatherGloves ), 15 ); + Add( typeof( LeatherGorget ), 15 ); + Add( typeof( LeatherLegs ), 18 ); + Add( typeof( LeatherCap ), 5 ); + + Add( typeof( StuddedArms ), 43 ); + Add( typeof( StuddedChest ), 37 ); + Add( typeof( StuddedGloves ), 39 ); + Add( typeof( StuddedGorget ), 22 ); + Add( typeof( StuddedLegs ), 33 ); + + Add( typeof( FemaleStuddedChest ), 31 ); + Add( typeof( StuddedBustierArms ), 23 ); + Add( typeof( FemalePlateChest), 103 ); + Add( typeof( FemaleLeatherChest ), 18 ); + Add( typeof( LeatherBustierArms ), 12 ); + Add( typeof( LeatherShorts ), 14 ); + Add( typeof( LeatherSkirt ), 12 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBTavernKeeper.cs b/Scripts/Mobiles/Towns/Sales/SBTavernKeeper.cs new file mode 100644 index 0000000..d0313b7 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBTavernKeeper.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBTavernKeeper : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBTavernKeeper() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Ale, 10, 20, 0x99F, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Wine, 7, 20, 0x9C7, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Liquor, 5, 20, 0x99B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Jug ), BeverageType.Cider, 13, 20, 0x9C8, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Milk, 7, 20, 0x9F0, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Ale, 16, 20, 0x1F95, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Cider, 11, 20, 0x1F97, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Liquor, 9, 20, 0x1F99, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Wine, 11, 20, 0x1F9B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Water, 11, 20, 0x1F9D, 0 ) ); + + Add( new GenericBuyInfo( typeof( BreadLoaf ), 6, 10, 0x103B, 0 ) ); + Add( new GenericBuyInfo( typeof( CheeseWheel ), 21, 10, 0x97E, 0 ) ); + Add( new GenericBuyInfo( typeof( CookedBird ), 17, 20, 0x9B7, 0 ) ); + Add( new GenericBuyInfo( typeof( LambLeg ), 8, 20, 0x160A, 0 ) ); + Add( new GenericBuyInfo( typeof( ChickenLeg ), 5, 20, 0x1608, 0 ) ); + Add( new GenericBuyInfo( typeof( Ribs ), 7, 20, 0x9F2, 0 ) ); + + Add( new GenericBuyInfo( typeof( WoodenBowlOfCarrots ), 3, 20, 0x15F9, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfCorn ), 3, 20, 0x15FA, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfLettuce ), 3, 20, 0x15FB, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfPeas ), 3, 20, 0x15FC, 0 ) ); + Add( new GenericBuyInfo( typeof( EmptyPewterBowl ), 2, 20, 0x15FD, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfCorn ), 3, 20, 0x15FE, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfLettuce ), 3, 20, 0x15FF, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPeas ), 3, 20, 0x1600, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPotatos ), 3, 20, 0x1601, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfStew ), 3, 20, 0x1604, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfTomatoSoup ), 3, 20, 0x1606, 0 ) ); + + Add( new GenericBuyInfo( typeof( ApplePie ), 7, 20, 0x1041, 0 ) ); //OSI just has Pie, not Apple/Fruit/Meat + + Add( new GenericBuyInfo( "1016450", typeof( Chessboard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( "1016449", typeof( CheckerBoard ), 2, 20, 0xFA6, 0 ) ); + Add( new GenericBuyInfo( typeof( Backgammon ), 2, 20, 0xE1C, 0 ) ); + Add( new GenericBuyInfo( typeof( Dices ), 2, 20, 0xFA7, 0 ) ); + Add( new GenericBuyInfo( "1041243", typeof( ContractOfEmployment ), 1252, 20, 0x14F0, 0 ) ); + Add( new GenericBuyInfo( "a barkeep contract", typeof( BarkeepContract ), 1252, 20, 0x14F0, 0 ) ); + + if ( Multis.BaseHouse.NewVendorSystem ) + Add( new GenericBuyInfo( "1062332", typeof( VendorRentalContract ), 1252, 20, 0x14F0, 0x672 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( WoodenBowlOfCarrots ), 1 ); + Add( typeof( WoodenBowlOfCorn ), 1 ); + Add( typeof( WoodenBowlOfLettuce ), 1 ); + Add( typeof( WoodenBowlOfPeas ), 1 ); + Add( typeof( EmptyPewterBowl ), 1 ); + Add( typeof( PewterBowlOfCorn ), 1 ); + Add( typeof( PewterBowlOfLettuce ), 1 ); + Add( typeof( PewterBowlOfPeas ), 1 ); + Add( typeof( PewterBowlOfPotatos ), 1 ); + Add( typeof( WoodenBowlOfStew ), 1 ); + Add( typeof( WoodenBowlOfTomatoSoup ), 1 ); + Add( typeof( BeverageBottle ), 3 ); + Add( typeof( Jug ), 6 ); + Add( typeof( Pitcher ), 5 ); + Add( typeof( GlassMug ), 1 ); + Add( typeof( BreadLoaf ), 3 ); + Add( typeof( CheeseWheel ), 12 ); + Add( typeof( Ribs ), 6 ); + Add( typeof( Peach ), 1 ); + Add( typeof( Pear ), 1 ); + Add( typeof( Grapes ), 1 ); + Add( typeof( Apple ), 1 ); + Add( typeof( Banana ), 1 ); + Add( typeof( Candle ), 3 ); + Add( typeof( Chessboard ), 1 ); + Add( typeof( CheckerBoard ), 1 ); + Add( typeof( Backgammon ), 1 ); + Add( typeof( Dices ), 1 ); + Add( typeof( ContractOfEmployment ), 626 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBThief.cs b/Scripts/Mobiles/Towns/Sales/SBThief.cs new file mode 100644 index 0000000..9153174 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBThief.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBThief : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBThief() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Backpack ), 15, 20, 0x9B2, 0 ) ); + Add( new GenericBuyInfo( typeof( Pouch ), 6, 20, 0xE79, 0 ) ); + Add( new GenericBuyInfo( typeof( Torch ), 8, 20, 0xF6B, 0 ) ); + Add( new GenericBuyInfo( typeof( Lantern ), 2, 20, 0xA25, 0 ) ); + Add( new GenericBuyInfo( typeof( Lockpick ), 12, 20, 0x14FC, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBox ), 14, 20, 0x9AA, 0 ) ); + Add( new GenericBuyInfo( typeof( Key ), 2, 20, 0x100E, 0 ) ); + Add( new GenericBuyInfo( typeof( HairDye ), 37, 20, 0xEFF, 0 ) ); + Add( new GenericBuyInfo( typeof( DisguiseKit ), 700, 20, 0xE05, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Backpack ), 7 ); + Add( typeof( Pouch ), 3 ); + Add( typeof( Torch ), 3 ); + Add( typeof( Lantern ), 1 ); + Add( typeof( Lockpick ), 6 ); + Add( typeof( WoodenBox ), 7 ); + Add( typeof( HairDye ), 19 ); + Add( typeof( DisguiseKit ), 300 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBTinker.cs b/Scripts/Mobiles/Towns/Sales/SBTinker.cs new file mode 100644 index 0000000..4bc6f99 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBTinker.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBTinker: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBTinker() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + + Add( new GenericBuyInfo( typeof( Clock ), 22, 20, 0x104B, 0 ) ); + Add( new GenericBuyInfo( typeof( Nails ), 3, 20, 0x102E, 0 ) ); + Add( new GenericBuyInfo( typeof( ClockParts ), 3, 20, 0x104F, 0 ) ); + Add( new GenericBuyInfo( typeof( AxleGears ), 3, 20, 0x1051, 0 ) ); + Add( new GenericBuyInfo( typeof( Gears ), 2, 20, 0x1053, 0 ) ); + Add( new GenericBuyInfo( typeof( Hinge ), 2, 20, 0x1055, 0 ) ); + + Add( new GenericBuyInfo( typeof( Sextant ), 13, 20, 0x1057, 0 ) ); + Add( new GenericBuyInfo( typeof( SextantParts ), 5, 20, 0x1059, 0 ) ); + Add( new GenericBuyInfo( typeof( Axle ), 2, 20, 0x105B, 0 ) ); + Add( new GenericBuyInfo( typeof( Springs ), 3, 20, 0x105D, 0 ) ); + + Add( new GenericBuyInfo( "1024111", typeof( Key ), 8, 20, 0x100F, 0 ) ); + Add( new GenericBuyInfo( "1024112", typeof( Key ), 8, 20, 0x1010, 0 ) ); + Add( new GenericBuyInfo( "1024115", typeof( Key ), 8, 20, 0x1013, 0 ) ); + Add( new GenericBuyInfo( typeof( KeyRing ), 8, 20, 0x1010, 0 ) ); + Add( new GenericBuyInfo( typeof( Lockpick ), 12, 20, 0x14FC, 0 ) ); + + Add( new GenericBuyInfo( typeof( TinkersTools ), 7, 20, 0x1EBC, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodBoard ), 3, 20, 0x1BD7, 0 ) ); + Add( new GenericBuyInfo( typeof( IronIngot ), 5, 16, 0x1BF2, 0 ) ); + Add( new GenericBuyInfo( typeof( SewingKit ), 3, 20, 0xF9D, 0 ) ); + + Add( new GenericBuyInfo( typeof( DrawKnife ), 10, 20, 0x10E4, 0 ) ); + Add( new GenericBuyInfo( typeof( Froe ), 10, 20, 0x10E5, 0 ) ); + Add( new GenericBuyInfo( typeof( Scorp ), 10, 20, 0x10E7, 0 ) ); + Add( new GenericBuyInfo( typeof( Inshave ), 10, 20, 0x10E6, 0 ) ); + + Add( new GenericBuyInfo( typeof( ButcherKnife ), 13, 20, 0x13F6, 0 ) ); + + Add( new GenericBuyInfo( typeof( Scissors ), 11, 20, 0xF9F, 0 ) ); + + Add( new GenericBuyInfo( typeof( Tongs ), 13, 14, 0xFBB, 0 ) ); + + Add( new GenericBuyInfo( typeof( DovetailSaw ), 12, 20, 0x1028, 0 ) ); + Add( new GenericBuyInfo( typeof( Saw ), 15, 20, 0x1034, 0 ) ); + + Add( new GenericBuyInfo( typeof( Hammer ), 17, 20, 0x102A, 0 ) ); + Add( new GenericBuyInfo( typeof( SmithHammer ), 23, 20, 0x13E3, 0 ) ); + // TODO: Sledgehammer + + Add( new GenericBuyInfo( typeof( Shovel ), 12, 20, 0xF39, 0 ) ); + + Add( new GenericBuyInfo( typeof( MouldingPlane ), 11, 20, 0x102C, 0 ) ); + Add( new GenericBuyInfo( typeof( JointingPlane ), 10, 20, 0x1030, 0 ) ); + Add( new GenericBuyInfo( typeof( SmoothingPlane ), 11, 20, 0x1032, 0 ) ); + + Add( new GenericBuyInfo( typeof( Pickaxe ), 25, 20, 0xE86, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Shovel ), 6 ); + Add( typeof( SewingKit ), 1 ); + Add( typeof( Scissors ), 6 ); + Add( typeof( Tongs ), 7 ); + Add( typeof( Key ), 1 ); + + Add( typeof( DovetailSaw ), 6 ); + Add( typeof( MouldingPlane ), 6 ); + Add( typeof( Nails ), 1 ); + Add( typeof( JointingPlane ), 6 ); + Add( typeof( SmoothingPlane ), 6 ); + Add( typeof( Saw ), 7 ); + + Add( typeof( Clock ), 11 ); + Add( typeof( ClockParts ), 1 ); + Add( typeof( AxleGears ), 1 ); + Add( typeof( Gears ), 1 ); + Add( typeof( Hinge ), 1 ); + Add( typeof( Sextant ), 6 ); + Add( typeof( SextantParts ), 2 ); + Add( typeof( Axle ), 1 ); + Add( typeof( Springs ), 1 ); + + Add( typeof( DrawKnife ), 5 ); + Add( typeof( Froe ), 5 ); + Add( typeof( Inshave ), 5 ); + Add( typeof( Scorp ), 5 ); + + Add( typeof( Lockpick ), 6 ); + Add( typeof( TinkerTools ), 3 ); + + Add( typeof( WoodBoard ), 1 ); + + Add( typeof( Pickaxe ), 16 ); + Add( typeof( Hammer ), 3 ); + Add( typeof( SmithHammer ), 11 ); + Add( typeof( ButcherKnife ), 6 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBWaiter.cs b/Scripts/Mobiles/Towns/Sales/SBWaiter.cs new file mode 100644 index 0000000..19aaa70 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBWaiter.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBWaiter : SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBWaiter() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Ale, 10, 20, 0x99F, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Wine, 7, 20, 0x9C7, 0 ) ); + Add( new BeverageBuyInfo( typeof( BeverageBottle ), BeverageType.Liquor, 5, 20, 0x99B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Jug ), BeverageType.Cider, 13, 20, 0x9C8, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Milk, 7, 20, 0x9F0, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Ale, 16, 20, 0x1F95, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Cider, 11, 20, 0x1F97, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Liquor, 9, 20, 0x1F99, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Wine, 11, 20, 0x1F9B, 0 ) ); + Add( new BeverageBuyInfo( typeof( Pitcher ), BeverageType.Water, 11, 20, 0x1F9D, 0 ) ); + + Add( new GenericBuyInfo( typeof( BreadLoaf ), 6, 10, 0x103B, 0 ) ); + Add( new GenericBuyInfo( typeof( CheeseWheel ), 21, 10, 0x97E, 0 ) ); + Add( new GenericBuyInfo( typeof( CookedBird ), 17, 20, 0x9B7, 0 ) ); + Add( new GenericBuyInfo( typeof( LambLeg ), 8, 20, 0x160A, 0 ) ); + + Add( new GenericBuyInfo( typeof( WoodenBowlOfCarrots ), 3, 20, 0x15F9, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfCorn ), 3, 20, 0x15FA, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfLettuce ), 3, 20, 0x15FB, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfPeas ), 3, 20, 0x15FC, 0 ) ); + Add( new GenericBuyInfo( typeof( EmptyPewterBowl ), 2, 20, 0x15FD, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfCorn ), 3, 20, 0x15FE, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfLettuce ), 3, 20, 0x15FF, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPeas ), 3, 20, 0x1600, 0 ) ); + Add( new GenericBuyInfo( typeof( PewterBowlOfPotatos ), 3, 20, 0x1601, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfStew ), 3, 20, 0x1604, 0 ) ); + Add( new GenericBuyInfo( typeof( WoodenBowlOfTomatoSoup ), 3, 20, 0x1606, 0 ) ); + + Add( new GenericBuyInfo( typeof( ApplePie ), 7, 20, 0x1041, 0 ) ); //OSI just has Pie, not Apple/Fruit/Meat + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/SBWeaponSmith.cs b/Scripts/Mobiles/Towns/Sales/SBWeaponSmith.cs new file mode 100644 index 0000000..5990d90 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBWeaponSmith.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBWeaponSmith: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBWeaponSmith() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( BlackStaff ), 22, 20, 0xDF1, 0 ) ); + Add( new GenericBuyInfo( typeof( Club ), 16, 20, 0x13B4, 0 ) ); + Add( new GenericBuyInfo( typeof( GnarledStaff ), 16, 20, 0x13F8, 0 ) ); + Add( new GenericBuyInfo( typeof( Mace ), 28, 20, 0xF5C, 0 ) ); + Add( new GenericBuyInfo( typeof( Maul ), 21, 20, 0x143B, 0 ) ); + Add( new GenericBuyInfo( typeof( QuarterStaff ), 19, 20, 0xE89, 0 ) ); + Add( new GenericBuyInfo( typeof( ShepherdsCrook ), 20, 20, 0xE81, 0 ) ); + Add( new GenericBuyInfo( typeof( SmithHammer ), 21, 20, 0x13E3, 0 ) ); + Add( new GenericBuyInfo( typeof( Rapier ), 23, 20, 0x1403, 0 ) ); + Add( new GenericBuyInfo( typeof( Spear ), 31, 20, 0xF62, 0 ) ); + Add( new GenericBuyInfo( typeof( WarHammer ), 25, 20, 0x1439, 0 ) ); + Add( new GenericBuyInfo( typeof( WarMace ), 31, 20, 0x1407, 0 ) ); + + Add( new GenericBuyInfo( typeof( Hatchet ), 25, 20, 0xF44, 0 ) ); + Add( new GenericBuyInfo( typeof( Hatchet ), 27, 20, 0xF43, 0 ) ); + Add( new GenericBuyInfo( typeof( WarFork ), 32, 20, 0x1405, 0 ) ); + + switch ( Utility.Random( 3 )) + { + case 0: + { + Add( new GenericBuyInfo( typeof( GreatAxe ), 30, 20, 0xF45, 0 ) ); + Add( new GenericBuyInfo( typeof( Bardiche ), 60, 20, 0xF4D, 0 ) ); + Add( new GenericBuyInfo( typeof( BattleAxe ), 26, 20, 0xF47, 0 ) ); + Add( new GenericBuyInfo( typeof( TwoHandedAxe ), 32, 20, 0x1443, 0 ) ); + + Add( new GenericBuyInfo( typeof( Bow ), 35, 20, 0x13B2, 0 ) ); + + Add( new GenericBuyInfo( typeof( ButcherKnife ), 14, 20, 0x13F6, 0 ) ); + + Add( new GenericBuyInfo( typeof( Crossbow ), 46, 20, 0xF50, 0 ) ); + Add( new GenericBuyInfo( typeof( HeavyCrossbow ), 55, 20, 0x13FD, 0 ) ); + + Add( new GenericBuyInfo( typeof( Cutlass ), 24, 20, 0x1441, 0 ) ); + Add( new GenericBuyInfo( typeof( Dagger ), 21, 20, 0xF52, 0 ) ); + Add( new GenericBuyInfo( typeof( Halberd ), 42, 20, 0x143E, 0 ) ); + + Add( new GenericBuyInfo( typeof( HammerPick ), 26, 20, 0x143D, 0 ) ); + + Add( new GenericBuyInfo( typeof( Katana ), 33, 20, 0x13FF, 0 ) ); + Add( new GenericBuyInfo( typeof( Kryss ), 32, 20, 0x1401, 0 ) ); + Add( new GenericBuyInfo( typeof( Broadsword ), 35, 20, 0xF5E, 0 ) ); + Add( new GenericBuyInfo( typeof( Longsword ), 55, 20, 0xF61, 0 ) ); + Add( new GenericBuyInfo( typeof( ThinLongsword ), 27, 20, 0x13B8, 0 ) ); + Add( new GenericBuyInfo( typeof( VikingSword ), 55, 20, 0x13B9, 0 ) ); + + Add( new GenericBuyInfo( typeof( Cleaver ), 15, 20, 0xEC3, 0 ) ); + Add( new GenericBuyInfo( typeof( Axe ), 40, 20, 0xF49, 0 ) ); + Add( new GenericBuyInfo( typeof( DoubleAxe ), 52, 20, 0xF4B, 0 ) ); + Add( new GenericBuyInfo( typeof( Pickaxe ), 22, 20, 0xE86, 0 ) ); + + Add( new GenericBuyInfo( typeof( Pitchfork ), 19, 20, 0xE87, 0 ) ); + + Add( new GenericBuyInfo( typeof( Scimitar ), 36, 20, 0x13B6, 0 ) ); + + Add( new GenericBuyInfo( typeof( SkinningKnife ), 14, 20, 0xEC4, 0 ) ); + + Add( new GenericBuyInfo( typeof( LargeBattleAxe ), 33, 20, 0x13FB, 0 ) ); + Add( new GenericBuyInfo( typeof( WarAxe ), 29, 20, 0x13B0, 0 ) ); + + Add( new GenericBuyInfo( typeof( Pike ), 39, 20, 0x26BE, 0 ) ); + Add( new GenericBuyInfo( typeof( Scythe ), 39, 20, 0x26BA, 0 ) ); + + break; + } + } + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( BattleAxe ), 13 ); + Add( typeof( DoubleAxe ), 26 ); + Add( typeof( GreatAxe ), 15 ); + Add( typeof( LargeBattleAxe ),16 ); + Add( typeof( Pickaxe ), 11 ); + Add( typeof( TwoHandedAxe ), 16 ); + Add( typeof( WarAxe ), 14 ); + Add( typeof( Axe ), 20 ); + + Add( typeof( Bardiche ), 30 ); + Add( typeof( Halberd ), 21 ); + + Add( typeof( ButcherKnife ), 7 ); + Add( typeof( Cleaver ), 7 ); + Add( typeof( Dagger ), 10 ); + Add( typeof( SkinningKnife ), 7 ); + + Add( typeof( Club ), 8 ); + Add( typeof( HammerPick ), 13 ); + Add( typeof( Mace ), 14 ); + Add( typeof( Maul ), 10 ); + Add( typeof( WarHammer ), 12 ); + Add( typeof( WarMace ), 15 ); + + Add( typeof( HeavyCrossbow ), 27 ); + Add( typeof( Bow ), 17 ); + Add( typeof( Crossbow ), 23 ); + + Add( typeof( Scythe ), 19 ); + Add( typeof( Pike ), 19 ); + + Add( typeof( Spear ), 15 ); + Add( typeof( Pitchfork ), 9 ); + Add( typeof( Rapier ), 11 ); + + Add( typeof( BlackStaff ), 11 ); + Add( typeof( GnarledStaff ), 8 ); + Add( typeof( QuarterStaff ), 9 ); + Add( typeof( ShepherdsCrook ), 10 ); + + Add( typeof( SmithHammer ), 10 ); + + Add( typeof( Broadsword ), 17 ); + Add( typeof( Cutlass ), 12 ); + Add( typeof( Katana ), 16 ); + Add( typeof( Kryss ), 16 ); + Add( typeof( Longsword ), 27 ); + Add( typeof( Scimitar ), 18 ); + Add( typeof( ThinLongsword ), 13 ); + Add( typeof( VikingSword ), 27 ); + + Add( typeof( Hatchet ), 13 ); + Add( typeof( WarFork ), 16 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/SBWeaver.cs b/Scripts/Mobiles/Towns/Sales/SBWeaver.cs new file mode 100644 index 0000000..ee0f652 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/SBWeaver.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBWeaver: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBWeaver() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Dyes ), 8, 20, 0xFA9, 0 ) ); + Add( new GenericBuyInfo( typeof( DyeTub ), 8, 20, 0xFAB, 0 ) ); + Add( new GenericBuyInfo( typeof( PigmentTub ), PigmentTub.tubCost(), 20, 0xFAB, 0 ) ); + Add( new GenericBuyInfo( typeof( Scissors ), 11, 20, 0xF9F, 0 ) ); + + Add( new GenericBuyInfo( typeof( UncutCloth ), 6, 20, 0x1761, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( UncutCloth ), 6, 20, 0x1762, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( UncutCloth ), 6, 20, 0x1763, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( UncutCloth ), 6, 20, 0x1764, Utility.RandomHue() ) ); + + Add( new GenericBuyInfo( typeof( BoltOfCloth ), 150, 20, 0xf9B, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( BoltOfCloth ), 150, 20, 0xf9C, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( BoltOfCloth ), 150, 20, 0xf96, Utility.RandomHue() ) ); + Add( new GenericBuyInfo( typeof( BoltOfCloth ), 150, 20, 0xf97, Utility.RandomHue() ) ); + + Add( new GenericBuyInfo( typeof( DarkYarn ), 18, 20, 0xE1D, 0 ) ); + Add( new GenericBuyInfo( typeof( LightYarn ), 18, 20, 0xE1E, 0 ) ); + Add( new GenericBuyInfo( typeof( LightYarnUnraveled ), 18, 20, 0xE1F, 0 ) ); + + Add( new GenericBuyInfo( typeof( Cotton ), 102, 20, 0xDF9, 0 ) ); + Add( new GenericBuyInfo( typeof( Wool ), 62, 20, 0xDF8, 0 ) ); + Add( new GenericBuyInfo( typeof( Flax ), 102, 20, 0x1A9C, 0 ) ); + Add( new GenericBuyInfo( typeof( SpoolOfThread ), 18, 20, 0xFA0, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Dyes ), 4 ); + Add( typeof( DyeTub ), 4 ); + Add( typeof( PigmentTub ), (int)(PigmentTub.tubCost()/2) ); + Add( typeof( Scissors ), 6 ); + + Add( typeof( LightYarnUnraveled ), 1 ); + Add( typeof( LightYarn ), 1 ); + Add( typeof( DarkYarn ), 1 ); + Add( typeof( SpoolOfThread ), 1 ); + + Add( typeof( Flax ), 2 ); + Add( typeof( Cotton ), 2 ); + Add( typeof( Wool ), 3 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Sales/Weapons/SBAxeWeapon.cs b/Scripts/Mobiles/Towns/Sales/Weapons/SBAxeWeapon.cs new file mode 100644 index 0000000..490178b --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Weapons/SBAxeWeapon.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBAxeWeapon: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBAxeWeapon() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( GreatAxe ), 30, 20, 0xF45, 0 ) ); + Add( new GenericBuyInfo( typeof( BattleAxe ), 26, 20, 0xF47, 0 ) ); + Add( new GenericBuyInfo( typeof( TwoHandedAxe ), 32, 20, 0x1443, 0 ) ); + Add( new GenericBuyInfo( typeof( Axe ), 40, 20, 0xF49, 0 ) ); + Add( new GenericBuyInfo( typeof( DoubleAxe ), 52, 20, 0xF4B, 0 ) ); + Add( new GenericBuyInfo( typeof( Pickaxe ), 22, 20, 0xE86, 0 ) ); + Add( new GenericBuyInfo( typeof( LargeBattleAxe ), 33, 20, 0x13FB, 0 ) ); + Add( new GenericBuyInfo( typeof( WarAxe ), 29, 20, 0x13B0, 0 ) ); + + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( BattleAxe ), 13 ); + Add( typeof( DoubleAxe ), 26 ); + Add( typeof( GreatAxe ), 15 ); + Add( typeof( LargeBattleAxe ),16 ); + Add( typeof( Pickaxe ), 11 ); + Add( typeof( TwoHandedAxe ), 16 ); + Add( typeof( WarAxe ), 14 ); + Add( typeof( Axe ), 20 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Weapons/SBKnifeWeapon.cs b/Scripts/Mobiles/Towns/Sales/Weapons/SBKnifeWeapon.cs new file mode 100644 index 0000000..3c9acf5 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Weapons/SBKnifeWeapon.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBKnifeWeapon: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBKnifeWeapon() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( ButcherKnife ), 14, 20, 0x13F6, 0 ) ); + Add( new GenericBuyInfo( typeof( Dagger ), 21, 20, 0xF52, 0 ) ); + Add( new GenericBuyInfo( typeof( Cleaver ), 15, 20, 0xEC3, 0 ) ); + Add( new GenericBuyInfo( typeof( SkinningKnife ), 14, 20, 0xEC4, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( ButcherKnife ), 7 ); + Add( typeof( Cleaver ), 7 ); + Add( typeof( Dagger ), 10 ); + Add( typeof( SkinningKnife ), 7 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Weapons/SBMaceWeapon.cs b/Scripts/Mobiles/Towns/Sales/Weapons/SBMaceWeapon.cs new file mode 100644 index 0000000..b9d633e --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Weapons/SBMaceWeapon.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBMaceWeapon: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBMaceWeapon() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( HammerPick ), 26, 20, 0x143D, 0 ) ); + Add( new GenericBuyInfo( typeof( Club ), 16, 20, 0x13B4, 0 ) ); + Add( new GenericBuyInfo( typeof( Mace ), 28, 20, 0xF5C, 0 ) ); + Add( new GenericBuyInfo( typeof( Maul ), 21, 20, 0x143B, 0 ) ); + Add( new GenericBuyInfo( typeof( WarHammer ), 25, 20, 0x1439, 0 ) ); + Add( new GenericBuyInfo( typeof( WarMace ), 31, 20, 0x1407, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Club ), 8 ); + Add( typeof( HammerPick ), 13 ); + Add( typeof( Mace ), 14 ); + Add( typeof( Maul ), 10 ); + Add( typeof( WarHammer ), 12 ); + Add( typeof( WarMace ), 15 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Weapons/SBPoleArmWeapon.cs b/Scripts/Mobiles/Towns/Sales/Weapons/SBPoleArmWeapon.cs new file mode 100644 index 0000000..3a43e4c --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Weapons/SBPoleArmWeapon.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBPoleArmWeapon: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBPoleArmWeapon() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Bardiche ), 60, 20, 0xF4D, 0 ) ); + Add( new GenericBuyInfo( typeof( Halberd ), 42, 20, 0x143E, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Bardiche ), 30 ); + Add( typeof( Halberd ), 21 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Weapons/SBRangedWeapon.cs b/Scripts/Mobiles/Towns/Sales/Weapons/SBRangedWeapon.cs new file mode 100644 index 0000000..cf24ff2 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Weapons/SBRangedWeapon.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBRangedWeapon: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBRangedWeapon() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Crossbow ), 55, 20, 0xF50, 0 ) ); + Add( new GenericBuyInfo( typeof( HeavyCrossbow ), 55, 20, 0x13FD, 0 ) ); + Add( new GenericBuyInfo( typeof( Bolt ), 2, Utility.Random( 30, 60 ), 0x1BFB, 0 ) ); + Add( new GenericBuyInfo( typeof( Bow ), 40, 20, 0x13B2, 0 ) ); + Add( new GenericBuyInfo( typeof( Arrow ), 2, Utility.Random( 30, 60 ), 0xF3F, 0 ) ); + Add( new GenericBuyInfo( typeof( Feather ), 2, Utility.Random( 30, 60 ), 0x1BD1, 0 ) ); + Add( new GenericBuyInfo( typeof( Shaft ), 3, Utility.Random( 30, 60 ), 0x1BD4, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Bolt ), 1 ); + Add( typeof( Arrow ), 1 ); + Add( typeof( Shaft ), 1 ); + Add( typeof( Feather ), 1 ); + + Add( typeof( HeavyCrossbow ), 27 ); + Add( typeof( Bow ), 17 ); + Add( typeof( Crossbow ), 25 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Weapons/SBSpearForkWeapon.cs b/Scripts/Mobiles/Towns/Sales/Weapons/SBSpearForkWeapon.cs new file mode 100644 index 0000000..ec25d3f --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Weapons/SBSpearForkWeapon.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBSpearForkWeapon: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBSpearForkWeapon() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Pike ), 39, 20, 0x26BE, 0 ) ); + Add( new GenericBuyInfo( typeof( Pitchfork ), 19, 20, 0xE87, 0 ) ); + Add( new GenericBuyInfo( typeof( Spear ), 31, 20, 0xF62, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Spear ), 15 ); + Add( typeof( Pitchfork ), 9 ); + Add( typeof( Pike ), 19 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Weapons/SBStavesWeapon.cs b/Scripts/Mobiles/Towns/Sales/Weapons/SBStavesWeapon.cs new file mode 100644 index 0000000..c8a9354 --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Weapons/SBStavesWeapon.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBStavesWeapon: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBStavesWeapon() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( BlackStaff ), 22, 20, 0xDF1, 0 ) ); + Add( new GenericBuyInfo( typeof( GnarledStaff ), 16, 20, 0x13F8, 0 ) ); + Add( new GenericBuyInfo( typeof( QuarterStaff ), 19, 20, 0xE89, 0 ) ); + Add( new GenericBuyInfo( typeof( ShepherdsCrook ), 20, 20, 0xE81, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( BlackStaff ), 11 ); + Add( typeof( GnarledStaff ), 8 ); + Add( typeof( QuarterStaff ), 9 ); + Add( typeof( ShepherdsCrook ), 10 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/Sales/Weapons/SBSwordWeapon.cs b/Scripts/Mobiles/Towns/Sales/Weapons/SBSwordWeapon.cs new file mode 100644 index 0000000..525a6cb --- /dev/null +++ b/Scripts/Mobiles/Towns/Sales/Weapons/SBSwordWeapon.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Mobiles +{ + public class SBSwordWeapon: SBInfo + { + private List m_BuyInfo = new InternalBuyInfo(); + private IShopSellInfo m_SellInfo = new InternalSellInfo(); + + public SBSwordWeapon() + { + } + + public override IShopSellInfo SellInfo { get { return m_SellInfo; } } + public override List BuyInfo { get { return m_BuyInfo; } } + + public class InternalBuyInfo : List + { + public InternalBuyInfo() + { + Add( new GenericBuyInfo( typeof( Cutlass ), 24, 20, 0x1441, 0 ) ); + Add( new GenericBuyInfo( typeof( Katana ), 33, 20, 0x13FF, 0 ) ); + Add( new GenericBuyInfo( typeof( Kryss ), 32, 20, 0x1401, 0 ) ); + Add( new GenericBuyInfo( typeof( Broadsword ), 35, 20, 0xF5E, 0 ) ); + Add( new GenericBuyInfo( typeof( Longsword ), 55, 20, 0xF61, 0 ) ); + Add( new GenericBuyInfo( typeof( ThinLongsword ), 27, 20, 0x13B8, 0 ) ); + Add( new GenericBuyInfo( typeof( VikingSword ), 55, 20, 0x13B9, 0 ) ); + Add( new GenericBuyInfo( typeof( Rapier ), 23, 20, 0x1403, 0 ) ); + Add( new GenericBuyInfo( typeof( Scimitar ), 36, 20, 0x13B6, 0 ) ); + Add( new GenericBuyInfo( typeof( Scythe ), 39, 20, 0x26BA, 0 ) ); + } + } + + public class InternalSellInfo : GenericSellInfo + { + public InternalSellInfo() + { + Add( typeof( Broadsword ), 17 ); + Add( typeof( Cutlass ), 12 ); + Add( typeof( Katana ), 16 ); + Add( typeof( Kryss ), 16 ); + Add( typeof( Longsword ), 27 ); + Add( typeof( Scimitar ), 18 ); + Add( typeof( ThinLongsword ), 13 ); + Add( typeof( VikingSword ), 27 ); + Add( typeof( Scythe ), 19 ); + Add( typeof( Rapier ), 11 ); + } + } + } +} diff --git a/Scripts/Mobiles/Towns/TownCrier.cs b/Scripts/Mobiles/Towns/TownCrier.cs new file mode 100644 index 0000000..16be659 --- /dev/null +++ b/Scripts/Mobiles/Towns/TownCrier.cs @@ -0,0 +1,560 @@ +using System; +using System.Text; +using System.Collections.Generic; +using Server; +using Server.Prompts; +using Server.Gumps; +using Server.Network; +using Server.Items; +using Server.Misc; +using Server.Commands; + +namespace Server.Mobiles +{ + public interface ITownCrierEntryList + { + List Entries{ get; } + TownCrierEntry GetRandomEntry(); + TownCrierEntry AddEntry( string[] lines, TimeSpan duration ); + void RemoveEntry( TownCrierEntry entry ); + } + + public class GlobalTownCrierEntryList : ITownCrierEntryList + { + private static GlobalTownCrierEntryList m_Instance; + + public static void Initialize() + { + CommandSystem.Register( "TownCriers", AccessLevel.GameMaster, new CommandEventHandler( TownCriers_OnCommand ) ); + } + + [Usage( "TownCriers" )] + [Description( "Manages the global town crier list." )] + public static void TownCriers_OnCommand( CommandEventArgs e ) + { + e.Mobile.SendGump( new TownCrierGump( e.Mobile, Instance ) ); + } + + public static GlobalTownCrierEntryList Instance + { + get + { + if ( m_Instance == null ) + m_Instance = new GlobalTownCrierEntryList(); + + return m_Instance; + } + } + + public bool IsEmpty{ get{ return ( m_Entries == null || m_Entries.Count == 0 ); } } + + public GlobalTownCrierEntryList() + { + } + + private List m_Entries; + + public List Entries + { + get{ return m_Entries; } + } + + public TownCrierEntry GetRandomEntry() + { + if ( m_Entries == null || m_Entries.Count == 0 ) + return null; + + for ( int i = m_Entries.Count - 1; m_Entries != null && i >= 0; --i ) + { + if ( i >= m_Entries.Count ) + continue; + + TownCrierEntry tce = m_Entries[i]; + + if ( tce.Expired ) + RemoveEntry( tce ); + } + + if ( m_Entries == null || m_Entries.Count == 0 ) + return null; + + return m_Entries[Utility.Random( m_Entries.Count )]; + } + + public TownCrierEntry AddEntry( string[] lines, TimeSpan duration ) + { + if ( m_Entries == null ) + m_Entries = new List(); + + TownCrierEntry tce = new TownCrierEntry( lines, duration ); + + m_Entries.Add( tce ); + + List instances = TownCrier.Instances; + + for ( int i = 0; i < instances.Count; ++i ) + instances[i].ForceBeginAutoShout(); + + return tce; + } + + public void RemoveEntry( TownCrierEntry tce ) + { + if ( m_Entries == null ) + return; + + m_Entries.Remove( tce ); + + if ( m_Entries.Count == 0 ) + m_Entries = null; + } + } + + public class TownCrierEntry + { + private string[] m_Lines; + private DateTime m_ExpireTime; + + public string[] Lines{ get{ return m_Lines; } } + public DateTime ExpireTime{ get{ return m_ExpireTime; } } + public bool Expired{ get{ return ( DateTime.Now >= m_ExpireTime ); } } + + public TownCrierEntry( string[] lines, TimeSpan duration ) + { + m_Lines = lines; + + if ( duration < TimeSpan.Zero ) + duration = TimeSpan.Zero; + else if ( duration > TimeSpan.FromDays( 365.0 ) ) + duration = TimeSpan.FromDays( 365.0 ); + + m_ExpireTime = DateTime.Now + duration; + } + } + + public class TownCrierDurationPrompt : Prompt + { + private ITownCrierEntryList m_Owner; + + public TownCrierDurationPrompt( ITownCrierEntryList owner ) + { + m_Owner = owner; + } + + public override void OnResponse( Mobile from, string text ) + { + TimeSpan ts; + + if( !TimeSpan.TryParse( text, out ts ) ) + { + from.SendMessage( "Value was not properly formatted. Use: " ); + from.SendGump( new TownCrierGump( from, m_Owner ) ); + return; + } + + if ( ts < TimeSpan.Zero ) + ts = TimeSpan.Zero; + + from.SendMessage( "Duration set to: {0}", ts ); + from.SendMessage( "Enter the first line to shout:" ); + + from.Prompt = new TownCrierLinesPrompt( m_Owner, null, new List(), ts ); + } + + public override void OnCancel( Mobile from ) + { + from.SendLocalizedMessage( 502980 ); // Message entry cancelled. + from.SendGump( new TownCrierGump( from, m_Owner ) ); + } + } + + public class TownCrierLinesPrompt : Prompt + { + private ITownCrierEntryList m_Owner; + private TownCrierEntry m_Entry; + private List m_Lines; + private TimeSpan m_Duration; + + public TownCrierLinesPrompt( ITownCrierEntryList owner, TownCrierEntry entry, List lines, TimeSpan duration ) + { + m_Owner = owner; + m_Entry = entry; + m_Lines = lines; + m_Duration = duration; + } + + public override void OnResponse( Mobile from, string text ) + { + m_Lines.Add( text ); + + from.SendMessage( "Enter the next line to shout, or press if the message is finished." ); + from.Prompt = new TownCrierLinesPrompt( m_Owner, m_Entry, m_Lines, m_Duration ); + } + + public override void OnCancel( Mobile from ) + { + if ( m_Entry != null ) + m_Owner.RemoveEntry( m_Entry ); + + if ( m_Lines.Count > 0 ) + { + m_Owner.AddEntry( m_Lines.ToArray(), m_Duration ); + from.SendMessage( "Message has been set." ); + } + else + { + if ( m_Entry != null ) + from.SendMessage( "Message deleted." ); + else + from.SendLocalizedMessage( 502980 ); // Message entry cancelled. + } + + from.SendGump( new TownCrierGump( from, m_Owner ) ); + } + } + + public class TownCrierGump : Gump + { + private Mobile m_From; + private ITownCrierEntryList m_Owner; + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 1 ) + { + m_From.SendMessage( "Enter the duration for the new message. Format: " ); + m_From.Prompt = new TownCrierDurationPrompt( m_Owner ); + } + else if ( info.ButtonID > 1 ) + { + List entries = m_Owner.Entries; + int index = info.ButtonID - 2; + + if ( entries != null && index < entries.Count ) + { + TownCrierEntry tce = entries[index]; + TimeSpan ts = tce.ExpireTime - DateTime.Now; + + if ( ts < TimeSpan.Zero ) + ts = TimeSpan.Zero; + + m_From.SendMessage( "Editing entry #{0}.", index + 1 ); + m_From.SendMessage( "Enter the first line to shout:" ); + m_From.Prompt = new TownCrierLinesPrompt( m_Owner, tce, new List(), ts ); + } + } + } + + public TownCrierGump( Mobile from, ITownCrierEntryList owner ) : base( 50, 50 ) + { + m_From = from; + m_Owner = owner; + + from.CloseGump( typeof( TownCrierGump ) ); + + AddPage( 0 ); + + List entries = owner.Entries; + + owner.GetRandomEntry(); // force expiration checks + + int count = 0; + + if ( entries != null ) + count = entries.Count; + + AddImageTiled( 0, 0, 300, 38 + (count == 0 ? 20 : (count * 85)), 0xA40 ); + AddAlphaRegion( 1, 1, 298, 36 + (count == 0 ? 20 : (count * 85)) ); + + AddHtml( 8, 8, 300 - 8 - 30, 20, "
TOWN CRIER MESSAGES
", false, false ); + + AddButton( 300 - 8 - 30, 8, 0xFAB, 0xFAD, 1, GumpButtonType.Reply, 0 ); + + if ( count == 0 ) + { + AddHtml( 8, 30, 284, 20, "The crier has no news.", false, false ); + } + else + { + for ( int i = 0; i < entries.Count; ++i ) + { + TownCrierEntry tce = (TownCrierEntry)entries[i]; + + TimeSpan toExpire = tce.ExpireTime - DateTime.Now; + + if ( toExpire < TimeSpan.Zero ) + toExpire = TimeSpan.Zero; + + StringBuilder sb = new StringBuilder(); + + sb.Append( "[Expires: " ); + + if ( toExpire.TotalHours >= 1 ) + { + sb.Append( (int)toExpire.TotalHours ); + sb.Append( ':' ); + sb.Append( toExpire.Minutes.ToString( "D2" ) ); + } + else + { + sb.Append( toExpire.Minutes ); + } + + sb.Append( ':' ); + sb.Append( toExpire.Seconds.ToString( "D2" ) ); + + sb.Append( "] " ); + + for ( int j = 0; j < tce.Lines.Length; ++j ) + { + if ( j > 0 ) + sb.Append( "
" ); + + sb.Append( tce.Lines[j] ); + } + + AddHtml( 8, 35 + (i * 85), 254, 80, sb.ToString(), true, true ); + + AddButton( 300 - 8 - 26, 35 + (i * 85), 0x15E1, 0x15E5, 2 + i, GumpButtonType.Reply, 0 ); + } + } + } + } + + public class TownCrier : Mobile, ITownCrierEntryList + { + private List m_Entries; + private Timer m_NewsTimer; + private Timer m_AutoShoutTimer; + + public List Entries + { + get{ return m_Entries; } + } + + public TownCrierEntry GetRandomEntry() + { + if ( m_Entries == null || m_Entries.Count == 0 ) + return GlobalTownCrierEntryList.Instance.GetRandomEntry(); + + for ( int i = m_Entries.Count - 1; m_Entries != null && i >= 0; --i ) + { + if ( i >= m_Entries.Count ) + continue; + + TownCrierEntry tce = m_Entries[i]; + + if ( tce.Expired ) + RemoveEntry( tce ); + } + + if ( m_Entries == null || m_Entries.Count == 0 ) + return GlobalTownCrierEntryList.Instance.GetRandomEntry(); + + TownCrierEntry entry = GlobalTownCrierEntryList.Instance.GetRandomEntry(); + + if ( entry == null || Utility.RandomBool() ) + entry = m_Entries[Utility.Random( m_Entries.Count )]; + + return entry; + } + + public void ForceBeginAutoShout() + { + if ( m_AutoShoutTimer == null ) + m_AutoShoutTimer = Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromMinutes( 1.0 ), new TimerCallback( AutoShout_Callback ) ); + } + + public TownCrierEntry AddEntry( string[] lines, TimeSpan duration ) + { + if ( m_Entries == null ) + m_Entries = new List(); + + TownCrierEntry tce = new TownCrierEntry( lines, duration ); + + m_Entries.Add( tce ); + + if ( m_AutoShoutTimer == null ) + m_AutoShoutTimer = Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromMinutes( 1.0 ), new TimerCallback( AutoShout_Callback ) ); + + return tce; + } + + public void RemoveEntry( TownCrierEntry tce ) + { + if ( m_Entries == null ) + return; + + m_Entries.Remove( tce ); + + if ( m_Entries.Count == 0 ) + m_Entries = null; + + if ( m_Entries == null && GlobalTownCrierEntryList.Instance.IsEmpty ) + { + if ( m_AutoShoutTimer != null ) + m_AutoShoutTimer.Stop(); + + m_AutoShoutTimer = null; + } + } + + private void AutoShout_Callback() + { + TownCrierEntry tce = GetRandomEntry(); + + if ( tce == null ) + { + if ( m_AutoShoutTimer != null ) + m_AutoShoutTimer.Stop(); + + m_AutoShoutTimer = null; + } + else if ( m_NewsTimer == null ) + { + m_NewsTimer = Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 3.0 ), new TimerStateCallback( ShoutNews_Callback ), new object[]{ tce, 0 } ); + + PublicOverheadMessage( MessageType.Regular, 0x3B2, 502976 ); // Hear ye! Hear ye! + } + } + + private void ShoutNews_Callback( object state ) + { + object[] states = (object[])state; + TownCrierEntry tce = (TownCrierEntry)states[0]; + int index = (int)states[1]; + + if ( index < 0 || index >= tce.Lines.Length ) + { + if ( m_NewsTimer != null ) + m_NewsTimer.Stop(); + + m_NewsTimer = null; + } + else + { + PublicOverheadMessage( MessageType.Regular, 0x3B2, false, tce.Lines[index] ); + states[1] = index + 1; + } + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel >= AccessLevel.GameMaster ) + from.SendGump( new TownCrierGump( from, this ) ); + else + base.OnDoubleClick( from ); + } + + public override bool HandlesOnSpeech( Mobile from ) + { + return ( m_NewsTimer == null && from.Alive && InRange( from, 12 ) ); + } + + public override void OnSpeech( SpeechEventArgs e ) + { + if ( m_NewsTimer == null && e.HasKeyword( 0x30 ) && e.Mobile.Alive && InRange( e.Mobile, 12 ) ) // *news* + { + Direction = GetDirectionTo( e.Mobile ); + + TownCrierEntry tce = GetRandomEntry(); + + if ( tce == null ) + { + PublicOverheadMessage( MessageType.Regular, 0x3B2, 1005643 ); // I have no news at this time. + } + else + { + m_NewsTimer = Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 3.0 ), new TimerStateCallback( ShoutNews_Callback ), new object[]{ tce, 0 } ); + + PublicOverheadMessage( MessageType.Regular, 0x3B2, 502978 ); // Some of the latest news! + } + } + } + + private static List m_Instances = new List(); + + public static List Instances + { + get{ return m_Instances; } + } + + [Constructable] + public TownCrier() + { + m_Instances.Add( this ); + + InitStats( 100, 100, 25 ); + + Title = "the town crier"; + Hue = Utility.RandomSkinHue(); + Invulnerable = true; + + NameHue = 0x35; + + if ( this.Female = Utility.RandomBool() ) + { + this.Body = 0x191; + this.Name = NameList.RandomName( "female" ); + } + else + { + this.Body = 0x190; + this.Name = NameList.RandomName( "male" ); + } + + AddItem( new FancyShirt( Utility.RandomBlueHue() ) ); + + Item skirt; + + switch ( Utility.Random( 2 ) ) + { + case 0: skirt = new Skirt(); break; + default: case 1: skirt = new Kilt(); break; + } + + skirt.Hue = Utility.RandomGreenHue(); + + AddItem( skirt ); + + AddItem( new FeatheredHat( Utility.RandomGreenHue() ) ); + + Item boots; + + switch ( Utility.Random( 2 ) ) + { + case 0: boots = new Boots(); break; + default: case 1: boots = new ThighBoots(); break; + } + + AddItem( boots ); + + Utility.AssignRandomHair( this ); + } + + public override void OnDelete() + { + m_Instances.Remove( this ); + base.OnDelete(); + } + + public TownCrier( Serial serial ) : base( serial ) + { + m_Instances.Add( this ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Alchemist.cs b/Scripts/Mobiles/Towns/Vendors/Alchemist.cs new file mode 100644 index 0000000..c821fd5 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Alchemist.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Alchemist : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.MagesGuild; } } + + [Constructable] + public Alchemist() : base( "the alchemist" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBAlchemist() ); + } + + public Alchemist( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Architect.cs b/Scripts/Mobiles/Towns/Vendors/Architect.cs new file mode 100644 index 0000000..1383d33 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Architect.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Architect : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.TinkersGuild; } } + + [Constructable] + public Architect() : base( "the architect" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBArchitect() ); + } + + public Architect( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Armorer.cs b/Scripts/Mobiles/Towns/Vendors/Armorer.cs new file mode 100644 index 0000000..63e9b38 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Armorer.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Armorer : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.WarriorsGuild; } } + + [Constructable] + public Armorer() : base( "the armorer" ) + { + } + + public override void InitSBInfo() + { + switch ( Utility.Random( 4 )) + { + case 0: + { + m_SBInfos.Add( new SBLeatherArmor() ); + m_SBInfos.Add( new SBStuddedArmor() ); + m_SBInfos.Add( new SBMetalShields() ); + m_SBInfos.Add( new SBPlateArmor() ); + m_SBInfos.Add( new SBHelmetArmor() ); + m_SBInfos.Add( new SBChainmailArmor() ); + m_SBInfos.Add( new SBRingmailArmor() ); + break; + } + case 1: + { + m_SBInfos.Add( new SBStuddedArmor() ); + m_SBInfos.Add( new SBLeatherArmor() ); + m_SBInfos.Add( new SBMetalShields() ); + m_SBInfos.Add( new SBHelmetArmor() ); + break; + } + case 2: + { + m_SBInfos.Add( new SBMetalShields() ); + m_SBInfos.Add( new SBPlateArmor() ); + m_SBInfos.Add( new SBHelmetArmor() ); + m_SBInfos.Add( new SBChainmailArmor() ); + m_SBInfos.Add( new SBRingmailArmor() ); + break; + } + case 3: + { + m_SBInfos.Add( new SBMetalShields() ); + m_SBInfos.Add( new SBHelmetArmor() ); + break; + } + } + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new Server.Items.HalfApron() ); + AddItem( new Server.Items.SmithHammer() ); + } + + public Armorer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Baker.cs b/Scripts/Mobiles/Towns/Vendors/Baker.cs new file mode 100644 index 0000000..742e0f2 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Baker.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Baker : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Baker() : base( "the baker" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBBaker() ); + } + + public Baker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Barber.cs b/Scripts/Mobiles/Towns/Vendors/Barber.cs new file mode 100644 index 0000000..190755c --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Barber.cs @@ -0,0 +1,577 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Gumps; +using Server.Network; + +namespace Server.Mobiles +{ + public class Barber : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override bool ClickTitle{ get{ return false; } } + + public override bool IsActiveBuyer{ get{ return false; } } + public override bool IsActiveSeller{ get{ return true; } } + + public override bool OnBuyItems( Mobile buyer, List list ) + { + return false; + } + + public static readonly object From = new object(); + public static readonly object Vendor = new object(); + public static readonly object Price = new object(); + + private static HairstylistBuyInfo[] m_SellList = new HairstylistBuyInfo[] + { + new HairstylistBuyInfo( 1018357, 50000, false, typeof( ChangeHairstyleGump ), new object[] + { From, Vendor, Price, false, ChangeHairstyleEntry.HairEntries } ), + new HairstylistBuyInfo( 1018358, 50000, true, typeof( ChangeHairstyleGump ), new object[] + { From, Vendor, Price, true, ChangeHairstyleEntry.BeardEntries } ), + new HairstylistBuyInfo( 1018359, 50, false, typeof( ChangeHairHueGump ), new object[] + { From, Vendor, Price, true, true, ChangeHairHueEntry.RegularEntries } ), + new HairstylistBuyInfo( 1018360, 500000, false, typeof( ChangeHairHueGump ), new object[] + { From, Vendor, Price, true, true, ChangeHairHueEntry.BrightEntries } ), + new HairstylistBuyInfo( 1018361, 30000, false, typeof( ChangeHairHueGump ), new object[] + { From, Vendor, Price, true, false, ChangeHairHueEntry.RegularEntries } ), + new HairstylistBuyInfo( 1018362, 30000, true, typeof( ChangeHairHueGump ), new object[] + { From, Vendor, Price, false, true, ChangeHairHueEntry.RegularEntries } ), + new HairstylistBuyInfo( 1018363, 500000, false, typeof( ChangeHairHueGump ), new object[] + { From, Vendor, Price, true, false, ChangeHairHueEntry.BrightEntries } ), + new HairstylistBuyInfo( 1018364, 500000, true, typeof( ChangeHairHueGump ), new object[] + { From, Vendor, Price, false, true, ChangeHairHueEntry.BrightEntries } ) + }; + + public override void VendorBuy( Mobile from ) + { + from.SendGump( new HairstylistBuyGump( from, this, m_SellList ) ); + } + + [Constructable] + public Barber() : base( "the barber" ) + { + } + + public override void InitSBInfo() + { + } + + public Barber( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class HairstylistBuyInfo + { + private int m_Title; + private string m_TitleString; + private int m_Price; + private bool m_FacialHair; + private Type m_GumpType; + private object[] m_GumpArgs; + + public int Title{ get{ return m_Title; } } + public string TitleString{ get{ return m_TitleString; } } + public int Price{ get{ return m_Price; } } + public bool FacialHair{ get{ return m_FacialHair; } } + public Type GumpType{ get{ return m_GumpType; } } + public object[] GumpArgs{ get{ return m_GumpArgs; } } + + public HairstylistBuyInfo( int title, int price, bool facialHair, Type gumpType, object[] args ) + { + m_Title = title; + m_Price = price; + m_FacialHair = facialHair; + m_GumpType = gumpType; + m_GumpArgs = args; + } + + public HairstylistBuyInfo( string title, int price, bool facialHair, Type gumpType, object[] args ) + { + m_TitleString = title; + m_Price = price; + m_FacialHair = facialHair; + m_GumpType = gumpType; + m_GumpArgs = args; + } + } + + public class HairstylistBuyGump : Gump + { + private Mobile m_From; + private Mobile m_Vendor; + private HairstylistBuyInfo[] m_SellList; + + public HairstylistBuyGump( Mobile from, Mobile vendor, HairstylistBuyInfo[] sellList ) : base( 50, 50 ) + { + m_From = from; + m_Vendor = vendor; + m_SellList = sellList; + + from.CloseGump( typeof( HairstylistBuyGump ) ); + from.CloseGump( typeof( ChangeHairHueGump ) ); + from.CloseGump( typeof( ChangeHairstyleGump ) ); + + bool isFemale = ( from.Female || from.Body.IsFemale ); + + int balance = Innkeeper.GetBalance( from ); + int canAfford = 0; + + for ( int i = 0; i < sellList.Length; ++i ) + { + if ( balance >= sellList[i].Price && (!sellList[i].FacialHair || !isFemale) ) + ++canAfford; + } + + AddPage( 0 ); + + AddBackground( 50, 10, 450, 100 + (canAfford * 25), 2600 ); + + AddHtmlLocalized( 100, 40, 350, 20, 1018356, false, false ); // Choose your hairstyle change: + + int index = 0; + + for ( int i = 0; i < sellList.Length; ++i ) + { + if ( balance >= sellList[i].Price && (!sellList[i].FacialHair || !isFemale) ) + { + if ( sellList[i].TitleString != null ) + AddHtml( 140, 75 + (index * 25), 300, 20, sellList[i].TitleString, false, false ); + else + AddHtmlLocalized( 140, 75 + (index * 25), 300, 20, sellList[i].Title, false, false ); + + AddButton( 100, 75 + (index++ * 25), 4005, 4007, 1 + i, GumpButtonType.Reply, 0 ); + } + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int index = info.ButtonID - 1; + + if ( index >= 0 && index < m_SellList.Length ) + { + HairstylistBuyInfo buyInfo = m_SellList[index]; + + int balance = Innkeeper.GetBalance( m_From ); + + bool isFemale = ( m_From.Female || m_From.Body.IsFemale ); + + if ( buyInfo.FacialHair && isFemale ) + { + // You cannot place facial hair on a woman! + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1010639, m_From.NetState ); + } + else if ( balance >= buyInfo.Price ) + { + try + { + object[] origArgs = buyInfo.GumpArgs; + object[] args = new object[origArgs.Length]; + + for ( int i = 0; i < args.Length; ++i ) + { + if ( origArgs[i] == Barber.Price ) + args[i] = m_SellList[index].Price; + else if ( origArgs[i] == Barber.From ) + args[i] = m_From; + else if ( origArgs[i] == Barber.Vendor ) + args[i] = m_Vendor; + else + args[i] = origArgs[i]; + } + + Gump g = Activator.CreateInstance( buyInfo.GumpType, args ) as Gump; + + m_From.SendGump( g ); + } + catch + { + } + } + else + { + // You cannot afford my services for that style. + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1042293, m_From.NetState ); + } + } + } + } + + public class ChangeHairHueEntry + { + private string m_Name; + private int[] m_Hues; + + public string Name{ get{ return m_Name; } } + public int[] Hues{ get{ return m_Hues; } } + + public ChangeHairHueEntry( string name, int[] hues ) + { + m_Name = name; + m_Hues = hues; + } + + public ChangeHairHueEntry( string name, int start, int count ) + { + m_Name = name; + + m_Hues = new int[count]; + + for ( int i = 0; i < count; ++i ) + m_Hues[i] = start + i; + } + + public static readonly ChangeHairHueEntry[] BrightEntries = new ChangeHairHueEntry[] + { + new ChangeHairHueEntry( "*****", 12, 10 ), + new ChangeHairHueEntry( "*****", 32, 5 ), + new ChangeHairHueEntry( "*****", 38, 8 ), + new ChangeHairHueEntry( "*****", 54, 3 ), + new ChangeHairHueEntry( "*****", 62, 10 ), + new ChangeHairHueEntry( "*****", 81, 2 ), + new ChangeHairHueEntry( "*****", 89, 2 ), + new ChangeHairHueEntry( "*****", 1153, 2 ) + }; + + public static readonly ChangeHairHueEntry[] RegularEntries = new ChangeHairHueEntry[] + { + new ChangeHairHueEntry( "*****", 1602, 26 ), + new ChangeHairHueEntry( "*****", 1628, 27 ), + new ChangeHairHueEntry( "*****", 1502, 32 ), + new ChangeHairHueEntry( "*****", 1302, 32 ), + new ChangeHairHueEntry( "*****", 1402, 32 ), + new ChangeHairHueEntry( "*****", 1202, 24 ), + new ChangeHairHueEntry( "*****", 2402, 29 ), + new ChangeHairHueEntry( "*****", 2213, 6 ), + new ChangeHairHueEntry( "*****", 1102, 8 ), + new ChangeHairHueEntry( "*****", 1110, 8 ), + new ChangeHairHueEntry( "*****", 1118, 16 ), + new ChangeHairHueEntry( "*****", 1134, 16 ) + }; + } + + public class ChangeHairHueGump : Gump + { + private Mobile m_From; + private Mobile m_Vendor; + private int m_Price; + private bool m_Hair; + private bool m_FacialHair; + private ChangeHairHueEntry[] m_Entries; + + public ChangeHairHueGump( Mobile from, Mobile vendor, int price, bool hair, bool facialHair, ChangeHairHueEntry[] entries ) : base( 50, 50 ) + { + m_From = from; + m_Vendor = vendor; + m_Price = price; + m_Hair = hair; + m_FacialHair = facialHair; + m_Entries = entries; + + from.CloseGump( typeof( HairstylistBuyGump ) ); + from.CloseGump( typeof( ChangeHairHueGump ) ); + from.CloseGump( typeof( ChangeHairstyleGump ) ); + + AddPage( 0 ); + + AddBackground( 100, 10, 350, 370, 2600 ); + AddBackground( 120, 54, 110, 270, 5100 ); + + AddHtmlLocalized( 155, 25, 240, 30, 1011013, false, false ); //
Hair Color Selection Menu
+ + AddHtmlLocalized( 150, 330, 220, 35, 1011014, false, false ); // Dye my hair this color! + AddButton( 380, 330, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + + for ( int i = 0; i < entries.Length; ++i ) + { + ChangeHairHueEntry entry = entries[i]; + + AddLabel( 130, 59 + (i * 22), entry.Hues[0] - 1, entry.Name ); + AddButton( 207, 60 + (i * 22), 5224, 5224, 0, GumpButtonType.Page, 1 + i ); + } + + for ( int i = 0; i < entries.Length; ++i ) + { + ChangeHairHueEntry entry = entries[i]; + int[] hues = entry.Hues; + string name = entry.Name; + + AddPage( 1 + i ); + + for ( int j = 0; j < hues.Length; ++j ) + { + AddLabel( 278 + ((j / 16) * 80), 52 + ((j % 16) * 17), hues[j] - 1, name ); + AddRadio( 260 + ((j / 16) * 80), 52 + ((j % 16) * 17), 210, 211, false, (j * entries.Length) + i ); + } + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0] % m_Entries.Length; + int offset = switches[0] / m_Entries.Length; + + if ( index >= 0 && index < m_Entries.Length ) + { + if ( offset >= 0 && offset < m_Entries[index].Hues.Length ) + { + if ( m_Hair && m_From.HairItemID > 0 || m_FacialHair && m_From.FacialHairItemID > 0 ) + { + if ( !Innkeeper.Withdraw( m_From, m_Price ) ) + { + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1042293, m_From.NetState ); // You cannot afford my services for that style. + return; + } + + int hue = m_Entries[index].Hues[offset]; + + if ( m_Hair ) + m_From.HairHue = hue; + + if ( m_FacialHair ) + m_From.FacialHairHue = hue; + } + else + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 502623, m_From.NetState ); // You have no hair to dye and you cannot use this. + } + } + } + else + { + // You decide not to change your hairstyle. + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1013009, m_From.NetState ); + } + } + else + { + // You decide not to change your hairstyle. + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1013009, m_From.NetState ); + } + } + } + + public class ChangeHairstyleEntry + { + private int m_ItemID; + private int m_GumpID; + private int m_X, m_Y; + + public int ItemID{ get{ return m_ItemID; } } + public int GumpID{ get{ return m_GumpID; } } + public int X{ get{ return m_X; } } + public int Y{ get{ return m_Y; } } + + public ChangeHairstyleEntry( int gumpID, int x, int y, int itemID ) + { + m_GumpID = gumpID; + m_X = x; + m_Y = y; + m_ItemID = itemID; + } + + public static readonly ChangeHairstyleEntry[] HairEntries = new ChangeHairstyleEntry[] + { + new ChangeHairstyleEntry( 50700, 70 - 137, 20 - 60, 0x203B ), + new ChangeHairstyleEntry( 60710, 193 - 260, 18 - 60, 0x2045 ), + new ChangeHairstyleEntry( 50703, 316 - 383, 25 - 60, 0x2044 ), + new ChangeHairstyleEntry( 60708, 70 - 137, 75 - 125, 0x203C ), + new ChangeHairstyleEntry( 60900, 193 - 260, 85 - 125, 0x2047 ), + new ChangeHairstyleEntry( 60713, 320 - 383, 85 - 125, 0x204A ), + new ChangeHairstyleEntry( 60702, 70 - 137, 140 - 190, 0x203D ), + new ChangeHairstyleEntry( 60707, 193 - 260, 140 - 190, 0x2049 ), + new ChangeHairstyleEntry( 60901, 315 - 383, 150 - 190, 0x2048 ), + new ChangeHairstyleEntry( 0, 0, 0, 0 ) + }; + + public static readonly ChangeHairstyleEntry[] BeardEntries = new ChangeHairstyleEntry[] + { + new ChangeHairstyleEntry( 50800, 120 - 187, 30 - 80, 0x2040 ), + new ChangeHairstyleEntry( 50904, 243 - 310, 33 - 80, 0x204B ), + new ChangeHairstyleEntry( 50906, 120 - 187, 100 - 150, 0x204D ), + new ChangeHairstyleEntry( 50801, 243 - 310, 95 - 150, 0x203E ), + new ChangeHairstyleEntry( 50802, 120 - 187, 173 - 220, 0x203F ), + new ChangeHairstyleEntry( 50905, 243 - 310, 165 - 220, 0x204C ), + new ChangeHairstyleEntry( 50808, 120 - 187, 242 - 290, 0x2041 ), + new ChangeHairstyleEntry( 0, 0, 0, 0 ) + }; + } + + public class ChangeHairstyleGump : Gump + { + private Mobile m_From; + private Mobile m_Vendor; + private int m_Price; + private bool m_FacialHair; + private ChangeHairstyleEntry[] m_Entries; + + public ChangeHairstyleGump( Mobile from, Mobile vendor, int price, bool facialHair, ChangeHairstyleEntry[] entries ) : base( 50, 50 ) + { + m_From = from; + m_Vendor = vendor; + m_Price = price; + m_FacialHair = facialHair; + m_Entries = entries; + + from.CloseGump( typeof( HairstylistBuyGump ) ); + from.CloseGump( typeof( ChangeHairHueGump ) ); + from.CloseGump( typeof( ChangeHairstyleGump ) ); + + int tableWidth = ( m_FacialHair ? 2 : 3 ); + int tableHeight = ( (entries.Length + tableWidth - ( m_FacialHair ? 1 : 2 )) / tableWidth ); + int offsetWidth = 123; + int offsetHeight = ( m_FacialHair ? 70 : 65 ); + + AddPage( 0 ); + + AddBackground( 0, 0, 81 + (tableWidth * offsetWidth), 105 + (tableHeight * offsetHeight), 2600 ); + + AddButton( 45, 45 + (tableHeight * offsetHeight), 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 77, 45 + (tableHeight * offsetHeight), 90, 35, 1006044, false, false ); // Ok + + AddButton( 81 + (tableWidth * offsetWidth) - 180, 45 + (tableHeight * offsetHeight), 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 81 + (tableWidth * offsetWidth) - 148, 45 + (tableHeight * offsetHeight), 90, 35, 1006045, false, false ); // Cancel + + if ( !facialHair ) + AddHtmlLocalized( 50, 15, 350, 20, 1018353, false, false ); //
New Hairstyle
+ else + AddHtmlLocalized( 55, 15, 200, 20, 1018354, false, false ); //
New Beard
+ + for ( int i = 0; i < entries.Length; ++i ) + { + int xTable = i % tableWidth; + int yTable = i / tableWidth; + + if ( entries[i].GumpID != 0 ) + { + AddRadio( 40 + (xTable * offsetWidth), 70 + (yTable * offsetHeight), 208, 209, false, i ); + AddBackground( 87 + (xTable * offsetWidth), 50 + (yTable * offsetHeight), 50, 50, 2620 ); + AddImage( 87 + (xTable * offsetWidth) + entries[i].X, 50 + (yTable * offsetHeight) + entries[i].Y, entries[i].GumpID ); + } + else if ( !facialHair ) + { + AddRadio( 40 + ((xTable + 1) * offsetWidth), 240, 208, 209, false, i ); + AddHtmlLocalized( 60 + ((xTable + 1) * offsetWidth), 240, 85, 35, 1011064, false, false ); // Bald + } + else + { + AddRadio( 40 + (xTable * offsetWidth), 70 + (yTable * offsetHeight), 208, 209, false, i ); + AddHtmlLocalized( 60 + (xTable * offsetWidth), 70 + (yTable * offsetHeight), 85, 35, 1011064, false, false ); // Bald + } + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if ( m_FacialHair && (m_From.Female || m_From.Body.IsFemale) ) + return; + + if ( info.ButtonID == 1 ) + { + int[] switches = info.Switches; + + if ( switches.Length > 0 ) + { + int index = switches[0]; + + if ( index >= 0 && index < m_Entries.Length ) + { + ChangeHairstyleEntry entry = m_Entries[index]; + + if ( m_From is PlayerMobile ) + ((PlayerMobile)m_From).SetHairMods( -1, -1 ); + + int hairID = m_From.RecordHair; + int facialHairID = m_From.RecordBeard; + + if ( entry.ItemID == 0 ) + { + if ( m_FacialHair ? (facialHairID == 0) : (hairID == 0) ) + return; + + if ( Innkeeper.Withdraw( m_From, m_Price ) ) + { + if ( m_FacialHair ) + { + m_From.FacialHairItemID = 0; + m_From.RecordBeard = 0; + } + else + { + m_From.HairItemID = 0; + m_From.RecordHair = 0; + } + } + else + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1042293, m_From.NetState ); // You cannot afford my services for that style. + } + else + { + if ( m_FacialHair ) + { + if ( facialHairID > 0 && facialHairID == entry.ItemID ) + return; + } + else + { + if ( hairID > 0 && hairID == entry.ItemID ) + return; + } + + if ( Innkeeper.Withdraw( m_From, m_Price ) ) + { + if ( m_FacialHair ) + { + m_From.FacialHairItemID = entry.ItemID; + m_From.RecordBeard = m_From.FacialHairItemID; + } + else + { + m_From.HairItemID = entry.ItemID; + m_From.RecordHair = m_From.HairItemID; + } + } + else + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1042293, m_From.NetState ); // You cannot afford my services for that style. + } + } + } + else + { + // You decide not to change your hairstyle. + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1013009, m_From.NetState ); + } + } + else + { + // You decide not to change your hairstyle. + m_Vendor.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 1013009, m_From.NetState ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Bard.cs b/Scripts/Mobiles/Towns/Vendors/Bard.cs new file mode 100644 index 0000000..5d922d5 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Bard.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Bard : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.BardsGuild; } } + + [Constructable] + public Bard() : base( "the bard" ) + { + SetSkill( SkillName.Discordance, 64.0, 100.0 ); + SetSkill( SkillName.Musicianship, 64.0, 100.0 ); + SetSkill( SkillName.Peacemaking, 65.0, 88.0 ); + SetSkill( SkillName.Provocation, 60.0, 83.0 ); + SetSkill( SkillName.Archery, 36.0, 68.0 ); + SetSkill( SkillName.Swords, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBBard() ); + } + + public Bard( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Barkeeper.cs b/Scripts/Mobiles/Towns/Vendors/Barkeeper.cs new file mode 100644 index 0000000..a61fc2b --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Barkeeper.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Gumps; +using Server.Prompts; +using Server.Network; +using Server.ContextMenus; + +namespace Server.Mobiles +{ + public class Barkeeper : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBBarkeeper() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new HalfApron() ); + } + + [Constructable] + public Barkeeper() : base( "the barkeeper" ) + { + } + + public Barkeeper( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Beekeeper.cs b/Scripts/Mobiles/Towns/Vendors/Beekeeper.cs new file mode 100644 index 0000000..9dcdd43 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Beekeeper.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Beekeeper : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Beekeeper() : base( "the beekeeper" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBBeekeeper() ); + } + + public Beekeeper( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Blacksmith.cs b/Scripts/Mobiles/Towns/Vendors/Blacksmith.cs new file mode 100644 index 0000000..1bc7d2a --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Blacksmith.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Blacksmith : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.BlacksmithsGuild; } } + + [Constructable] + public Blacksmith() : base( "the blacksmith" ) + { + SetSkill( SkillName.Fencing, 60.0, 83.0 ); + SetSkill( SkillName.Bludgeoning, 61.0, 93.0 ); + SetSkill( SkillName.Swords, 60.0, 83.0 ); + SetSkill( SkillName.Tactics, 60.0, 83.0 ); + SetSkill( SkillName.Parry, 61.0, 93.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBBlacksmith() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.FullApron() ); + AddItem( new Server.Items.SmithHammer() ); + } + + public Blacksmith( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Bowyer.cs b/Scripts/Mobiles/Towns/Vendors/Bowyer.cs new file mode 100644 index 0000000..f27a263 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Bowyer.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + [TypeAlias( "Server.Mobiles.Bower" )] + public class Bowyer : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Bowyer() : base( "the bowyer" ) + { + SetSkill( SkillName.Archery, 80.0, 100.0 ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new Server.Items.Bow() ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBBowyer() ); + m_SBInfos.Add( new SBRangedWeapon() ); + } + + public Bowyer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Butcher.cs b/Scripts/Mobiles/Towns/Vendors/Butcher.cs new file mode 100644 index 0000000..7ad7ed6 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Butcher.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Butcher : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Butcher() : base( "the butcher" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBButcher() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new Server.Items.HalfApron() ); + AddItem( new Server.Items.Cleaver() ); + } + + public Butcher( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Carpenter.cs b/Scripts/Mobiles/Towns/Vendors/Carpenter.cs new file mode 100644 index 0000000..908e67d --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Carpenter.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Carpenter : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.CarpentryGuild; } } + + [Constructable] + public Carpenter() : base( "the carpenter" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBStavesWeapon() ); + m_SBInfos.Add( new SBCarpenter() ); + m_SBInfos.Add( new SBWoodenShields() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.HalfApron() ); + if ( Utility.RandomBool() ){ AddItem( new Server.Items.SmithHammer() ); } + } + + public Carpenter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Cobbler.cs b/Scripts/Mobiles/Towns/Vendors/Cobbler.cs new file mode 100644 index 0000000..7b759a1 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Cobbler.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Cobbler : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Cobbler() : base( "the cobbler" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBCobbler() ); + } + + public Cobbler( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Cook.cs b/Scripts/Mobiles/Towns/Vendors/Cook.cs new file mode 100644 index 0000000..4f55267 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Cook.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Cook : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Cook() : base( "the cook" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBCook() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new Server.Items.HalfApron() ); + } + + public Cook( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Farmer.cs b/Scripts/Mobiles/Towns/Vendors/Farmer.cs new file mode 100644 index 0000000..e698fa3 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Farmer.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Farmer : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Farmer() : base( "the farmer" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBFarmer() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + if ( Utility.RandomBool() ) + AddItem( new Server.Items.Pitchfork() ); + + if ( Utility.RandomBool() ) + AddItem( new Server.Items.TallStrawHat() ); + } + + public Farmer( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Fighter.cs b/Scripts/Mobiles/Towns/Vendors/Fighter.cs new file mode 100644 index 0000000..d005f79 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Fighter.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Fighter : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.WarriorsGuild; } } + + [Constructable] + public Fighter() : base( "the fighter" ) + { + SetSkill( SkillName.Fencing, 45.0, 68.0 ); + SetSkill( SkillName.Bludgeoning, 45.0, 68.0 ); + SetSkill( SkillName.Swords, 45.0, 68.0 ); + SetSkill( SkillName.Tactics, 36.0, 68.0 ); + SetSkill( SkillName.Parry, 45.0, 68.0 ); + } + + public override void InitSBInfo() + { + switch ( Utility.Random( 8 ) ) + { + case 0: + { + m_SBInfos.Add( new SBLeatherArmor() ); + m_SBInfos.Add( new SBStuddedArmor() ); + m_SBInfos.Add( new SBMetalShields() ); + m_SBInfos.Add( new SBPlateArmor() ); + m_SBInfos.Add( new SBHelmetArmor() ); + m_SBInfos.Add( new SBChainmailArmor() ); + m_SBInfos.Add( new SBRingmailArmor() ); + break; + } + case 1: + { + m_SBInfos.Add( new SBStuddedArmor() ); + m_SBInfos.Add( new SBLeatherArmor() ); + m_SBInfos.Add( new SBMetalShields() ); + m_SBInfos.Add( new SBHelmetArmor() ); + break; + } + case 2: + { + m_SBInfos.Add( new SBMetalShields() ); + m_SBInfos.Add( new SBPlateArmor() ); + m_SBInfos.Add( new SBHelmetArmor() ); + m_SBInfos.Add( new SBChainmailArmor() ); + m_SBInfos.Add( new SBRingmailArmor() ); + break; + } + case 3: + { + m_SBInfos.Add( new SBMetalShields() ); + m_SBInfos.Add( new SBHelmetArmor() ); + break; + } + case 4: + case 5: + case 6: + case 7: + { + m_SBInfos.Add( new SBWeaponSmith() ); + break; + } + } + } + + public override void InitOutfit() + { + Server.Misc.CitizenDressing.CitizenDress( this, 1 ); + } + + public Fighter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Fisherman.cs b/Scripts/Mobiles/Towns/Vendors/Fisherman.cs new file mode 100644 index 0000000..141e747 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Fisherman.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Fisherman : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.MarinersGuild; } } + + [Constructable] + public Fisherman() : base( "the fisherman" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBFisherman() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new Server.Items.FishingPole() ); + + if ( Utility.RandomBool() ) + AddItem( new Server.Items.FloppyHat( Utility.RandomHue() ) ); + } + + public Fisherman( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Gypsy.cs b/Scripts/Mobiles/Towns/Vendors/Gypsy.cs new file mode 100644 index 0000000..3163c70 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Gypsy.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class Gypsy : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Gypsy() : base( "the gypsy" ) + { + SetSkill( SkillName.Healing, 65.0, 88.0 ); + SetSkill( SkillName.Concentration, 65.0, 88.0 ); + SetSkill( SkillName.MagicResist, 65.0, 88.0 ); + SetSkill( SkillName.HandToHand, 36.0, 68.0 ); + SetSkill( SkillName.Stealing, 65.0, 88.0 ); + } + + public override void InitOutfit() + { + AddItem( new Kilt( Utility.RandomDyedHue() ) ); + AddItem( new Shirt( Utility.RandomDyedHue() ) ); + AddItem( new ThighBoots() ); + AddItem( new SkullCap( Utility.RandomDyedHue() ) ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBGypsy() ); + } + + public Gypsy( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + + private DateTime m_NextTalk; + public DateTime NextTalk{ get{ return m_NextTalk; } set{ m_NextTalk = value; } } + public override void OnMovement( Mobile m, Point3D oldLocation ) + { + if( m is PlayerMobile ) + { + if ( DateTime.Now >= m_NextTalk && InRange( m, 4 ) && InLOS( m ) ) + { + switch ( Utility.Random( 45 )) + { + case 0: Say("A reunion must not occur or the unlucky chimera must fold in the age of temptation."); break; + case 1: Say("An injury shall happen."); break; + case 2: Say("He shall not assimilate with the proud youth."); break; + case 3: Say("They will not weave near an altar."); break; + case 4: Say("She will finally intrude."); break; + case 5: Say("The diamond possum shall not deflect near a fortress on a sunny day before the coming of beauty."); break; + case 6: Say("A relationship ending will finally happen with the tired juggler during the planting season."); break; + case 7: Say("The clever hamster will trespass with the saffron youth in a castle when the first flowers bloom."); break; + case 8: Say("A betrayal will finally happen or he will babble at the coming of destruction."); break; + case 9: Say("She will finally gutter in a market before it is too late."); break; + case 10: Say("An introduction will finally happen or the seductive viper shall not worship with the fanatical druid during the planting season."); break; + case 11: Say("The broken-hearted grandmother will act or he shall not meander."); break; + case 12: Say("A defeat will not take place in a castle on a journey."); break; + case 13: Say("The fearless trader shall not look with the violet druid."); break; + case 14: Say("The honest runaway will succumb with the hungry hare before the coming of lust."); break; + case 15: Say("It will judge in the summer."); break; + case 16: Say("The emerald lion will never scare for the sake of winter."); break; + case 17: Say("She will finally famish and a recovery will not happen near a well during a rainstorm."); break; + case 18: Say("A fight shall take place for the sake of willpower."); break; + case 19: Say("The fanatical wizard shall not wax near a holy site in the afternoon at the coming of luck."); break; + case 20: Say("She shall not ascend after sunset."); break; + case 21: Say("It will never pray with the shy zealot."); break; + case 22: Say("A meeting must happen with the malicious cook."); break; + case 23: Say("The remorseless muse will fraternize at the bridge."); break; + case 24: Say("The russet berserker must gasp or the remorseless slave must not bicker with the triumphant lion near a farm on the spring equinox."); break; + case 25: Say("He shall fence with the black countess near a portal."); break; + case 26: Say("An introduction will not happen and the intelligent champion shall lower on the spring equinox."); break; + case 27: Say("The hasty hostler must jump."); break; + case 28: Say("An agreement must take place with the broken-hearted cleric."); break; + case 29: Say("It will finally benefit in the citadel in the age of dreams."); break; + case 30: Say("A financial difficulty will never take place or the clumsy zombie will finally weep at midnight."); break; + case 31: Say("She shall weld or he will finally crush during the growing season."); break; + case 32: Say("The greedy artist shall lace and the garnet general must not compose."); break; + case 33: Say("The arrogant rogue must not comply with the indigo robber at the coming of joy."); break; + case 34: Say("The lavender summoner will crush in a time of truth."); break; + case 35: Say("A contest must not happen after the first frost."); break; + case 36: Say("She must not consent in the age of entropy."); break; + case 37: Say("The deluded pony will not forget in a graveyard on a windy day for the sake of alchemy."); break; + case 38: Say("A reversal of fortune shall not happen and a fall shall not occur in the spring for the sake of lust."); break; + case 39: Say("She will ensure in the citadel."); break; + case 40: Say("The lazy juggler will finally enquire and a loss shall not occur."); break; + case 41: Say("A promise will finally take place and it shall not bother during fall in a time of fear."); break; + case 42: Say("He must not weary."); break; + case 43: Say("The orange donkey shall not gutter at the bridge."); break; + case 44: Say("The word to the dark mage depths is 'bravoka'."); break; + }; + m_NextTalk = (DateTime.Now + TimeSpan.FromSeconds( 30 )); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/HairStylist.cs b/Scripts/Mobiles/Towns/Vendors/HairStylist.cs new file mode 100644 index 0000000..6f43074 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/HairStylist.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class HairStylist : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public HairStylist() : base( "the hair stylist" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBHairStylist() ); + } + + public HairStylist( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Herbalist.cs b/Scripts/Mobiles/Towns/Vendors/Herbalist.cs new file mode 100644 index 0000000..8087c8b --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Herbalist.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Herbalist : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.MagesGuild; } } + + [Constructable] + public Herbalist() : base( "the herbalist" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBHerbalist() ); + } + + public Herbalist( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Innkeeper.cs b/Scripts/Mobiles/Towns/Vendors/Innkeeper.cs new file mode 100644 index 0000000..e28158f --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Innkeeper.cs @@ -0,0 +1,449 @@ +using System; +using System.Collections.Generic; +using Server.Items; +using Server.ContextMenus; +using Server.Misc; +using Server.Network; +using Server.Regions; + +namespace Server.Mobiles +{ + public class Innkeeper : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Innkeeper() : base( "the innkeeper" ) + { + Item candle = new HeldLight(); + candle.Name = "candle"; + candle.ItemID = 0xA0F; + candle.Light = LightType.Circle150; + AddItem( candle ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBInnKeeper() ); + } + + public static int GetBalance( Mobile from ) + { + Item[] gold, checks; + + return GetBalance( from, out gold, out checks ); + } + + public static int GetBalance( Mobile from, out Item[] gold, out Item[] checks ) + { + int balance = 0; + + Container inn = from.FindInnNoCreate(); + + if ( inn != null ) + { + gold = inn.FindItemsByType( typeof( Gold ) ); + checks = inn.FindItemsByType( typeof( GoldDeed ) ); + + for ( int i = 0; i < gold.Length; ++i ) + balance += gold[i].Amount; + + for ( int i = 0; i < checks.Length; ++i ) + balance += ((GoldDeed)checks[i]).Worth; + } + else + { + gold = checks = new Item[0]; + } + + return balance; + } + + public static bool Withdraw( Mobile from, int amount ) + { + Item[] gold, checks; + int balance = GetBalance( from, out gold, out checks ); + + if ( balance < amount ) + return false; + + for ( int i = 0; amount > 0 && i < gold.Length; ++i ) + { + if ( gold[i].Amount <= amount ) + { + amount -= gold[i].Amount; + gold[i].Delete(); + } + else + { + gold[i].Amount -= amount; + amount = 0; + } + } + + for ( int i = 0; amount > 0 && i < checks.Length; ++i ) + { + GoldDeed check = (GoldDeed)checks[i]; + + if ( check.Worth <= amount ) + { + amount -= check.Worth; + check.Delete(); + } + else + { + check.Worth -= amount; + amount = 0; + } + } + + return true; + } + + public static bool Deposit( Mobile from, int amount ) + { + InnBox box = from.FindInnNoCreate(); + if ( box == null ) + return false; + + List items = new List(); + + while ( amount > 0 ) + { + Item item; + if ( amount < 5000 ) + { + item = new Gold( amount ); + amount = 0; + } + else if ( amount <= 1000000 ) + { + item = new GoldDeed( amount ); + amount = 0; + } + else + { + item = new GoldDeed( 1000000 ); + amount -= 1000000; + } + + if ( box.TryDropItem( from, item, false ) ) + { + items.Add( item ); + } + else + { + item.Delete(); + foreach ( Item curItem in items ) + { + curItem.Delete(); + } + + return false; + } + } + + return true; + } + + public static int DepositUpTo( Mobile from, int amount ) + { + InnBox box = from.FindInnNoCreate(); + if ( box == null ) + return 0; + + int amountLeft = amount; + while ( amountLeft > 0 ) + { + Item item; + int amountGiven; + + if ( amountLeft < 5000 ) + { + item = new Gold( amountLeft ); + amountGiven = amountLeft; + } + else if ( amountLeft <= 1000000 ) + { + item = new GoldDeed( amountLeft ); + amountGiven = amountLeft; + } + else + { + item = new GoldDeed( 1000000 ); + amountGiven = 1000000; + } + + if ( box.TryDropItem( from, item, false ) ) + { + amountLeft -= amountGiven; + } + else + { + item.Delete(); + break; + } + } + + return amount - amountLeft; + } + + public static void Deposit( Container cont, int amount ) + { + while ( amount > 0 ) + { + Item item; + + if ( amount < 5000 ) + { + item = new Gold( amount ); + amount = 0; + } + else if ( amount <= 1000000 ) + { + item = new GoldDeed( amount ); + amount = 0; + } + else + { + item = new GoldDeed( 1000000 ); + amount -= 1000000; + } + + cont.DropItem( item ); + } + } + + public Innkeeper( Serial serial ) : base( serial ) + { + } + + public override bool HandlesOnSpeech( Mobile from ) + { + if ( from.InRange( this.Location, 12 ) ) + return true; + + return base.HandlesOnSpeech( from ); + } + + public override void OnSpeech( SpeechEventArgs e ) + { + if ( !e.Handled && e.Mobile.InRange( this.Location, 12 ) && (e.Mobile).Region is InnRegion ) + { + int keyword = 0; + + if ( e.Speech.ToLower().IndexOf( "withdraw" ) >= 0 ){ keyword = 1; } + else if ( e.Speech.ToLower().IndexOf( "balance" ) >= 0 ){ keyword = 2; } + else if ( e.Speech.ToLower().IndexOf( "inn" ) >= 0 ){ keyword = 3; } + else if ( e.Speech.ToLower().IndexOf( "deed" ) >= 0 ){ keyword = 4; } + + switch ( keyword ) + { + case 1: // *withdraw* + { + e.Handled = true; + + if ( e.Mobile.Criminal ) + { + this.Say( 500389 ); // I will not do business with a criminal! + break; + } + + string[] split = e.Speech.Split( ' ' ); + + if ( split.Length >= 2 ) + { + int amount; + + Container pack = e.Mobile.Backpack; + + if ( !int.TryParse( split[1], out amount ) ) + break; + + if ( amount > 5000 ) + { + this.Say( 500381 ); // Thou canst not withdraw so much at one time! + } + else if (pack == null || pack.Deleted || !(pack.TotalWeight < pack.MaxWeight) || !(pack.TotalItems < pack.MaxItems)) + { + this.Say(1048147); // Your backpack can't hold anything else. + } + else if (amount > 0) + { + InnBox box = e.Mobile.FindInnNoCreate(); + + if (box == null || !box.ConsumeTotal(typeof(Gold), amount)) + { + this.Say(500384); // Ah, art thou trying to fool me? Thou hast not so much gold! + } + else + { + pack.DropItem(new Gold(amount)); + + this.Say(1010005); // Thou hast withdrawn gold from thy account. + } + } + } + + break; + } + case 2: // *balance* + { + e.Handled = true; + + if ( e.Mobile.Criminal ) + { + this.Say( 500389 ); // I will not do business with a criminal! + break; + } + + InnBox box = e.Mobile.FindInnNoCreate(); + + if ( box != null ) + this.Say( 1042759, box.TotalGold.ToString() ); // Thy current inn balance is ~1_AMOUNT~ gold. + else + this.Say( 1042759, "0" ); // Thy current inn balance is ~1_AMOUNT~ gold. + + break; + } + case 3: // *inn* + { + e.Handled = true; + + if ( e.Mobile.Criminal ) + { + this.Say( 500378 ); // Thou art a criminal and cannot access thy inn chest. + break; + } + + e.Mobile.InnBox.Open(); + + break; + } + case 4: // *deed* + { + e.Handled = true; + + if ( e.Mobile.Criminal ) + { + this.Say( 500389 ); // I will not do business with a criminal! + break; + } + + string[] split = e.Speech.Split( ' ' ); + + if ( split.Length >= 2 ) + { + int amount; + + if ( !int.TryParse( split[1], out amount ) ) + break; + + if ( amount < 5000 ) + { + this.Say( 1010006 ); // We cannot create gold deeds for such a paltry amount of gold! + } + else if ( amount > 1000000 ) + { + this.Say( 1010007 ); // Our policies prevent us from creating gold deeds worth that much! + } + else + { + GoldDeed check = new GoldDeed( amount ); + + InnBox box = e.Mobile.InnBox; + + if ( !box.TryDropItem( e.Mobile, check, false ) ) + { + this.Say( 500386 ); // There's not enough room in your inn chest for the gold deed! + check.Delete(); + } + else if ( !box.ConsumeTotal( typeof( Gold ), amount ) ) + { + this.Say( 500384 ); // Ah, art thou trying to fool me? Thou hast not so much gold! + check.Delete(); + } + else + { + this.Say( 1042673, AffixType.Append, amount.ToString(), "" ); // Into your inn chest I have placed a gold deed in the amount of: + } + } + } + + break; + } + } + } + + base.OnSpeech( e ); + } + + public override void AddCustomContextEntries( Mobile from, List list ) + { + if ( from.Alive ) + list.Add( new OpenInnEntry( from, this ) ); + + base.AddCustomContextEntries( from, list ); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} + +namespace Server.Items +{ + public class HeldLight : BaseEquipableLight + { + public override int LitItemID{ get { return 0xA22; } } + public override int UnlitItemID{ get { return 0xA22; } } + + [Constructable] + public HeldLight() : base( 0xA22 ) + { + Name = "lantern"; + Duration = TimeSpan.Zero; + Burning = true; + Light = LightType.Circle300; + Weight = 2.0; + LootType = LootType.Blessed; + + switch ( Utility.Random( 3 ) ) + { + default: + case 0: Name = "torch"; ItemID = 0xA12; Light = LightType.Circle300; break; + case 1: Name = "candle"; ItemID = 0xA0F; Light = LightType.Circle150; break; + } + } + + public override bool DisplayLootType{ get{ return false; } } + + public HeldLight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/IronWorker.cs b/Scripts/Mobiles/Towns/Vendors/IronWorker.cs new file mode 100644 index 0000000..26bb521 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/IronWorker.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class IronWorker : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public IronWorker() : base( "the iron worker" ) + { + SetSkill( SkillName.Fencing, 60.0, 83.0 ); + SetSkill( SkillName.Bludgeoning, 61.0, 93.0 ); + SetSkill( SkillName.Swords, 60.0, 83.0 ); + SetSkill( SkillName.Tactics, 60.0, 83.0 ); + SetSkill( SkillName.Parry, 61.0, 93.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBAxeWeapon() ); + m_SBInfos.Add( new SBKnifeWeapon() ); + m_SBInfos.Add( new SBMaceWeapon() ); + m_SBInfos.Add( new SBSmithTools() ); + m_SBInfos.Add( new SBPoleArmWeapon() ); + m_SBInfos.Add( new SBSpearForkWeapon() ); + m_SBInfos.Add( new SBSwordWeapon() ); + + m_SBInfos.Add( new SBMetalShields() ); + + m_SBInfos.Add( new SBHelmetArmor() ); + m_SBInfos.Add( new SBPlateArmor() ); + m_SBInfos.Add( new SBChainmailArmor() ); + m_SBInfos.Add( new SBRingmailArmor() ); + m_SBInfos.Add( new SBStuddedArmor() ); + m_SBInfos.Add( new SBLeatherArmor() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.FullApron() ); + AddItem( new Server.Items.SmithHammer() ); + } + + public IronWorker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Jester.cs b/Scripts/Mobiles/Towns/Vendors/Jester.cs new file mode 100644 index 0000000..c2eddcb --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Jester.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class Jester : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.ThievesGuild; } } + + [Constructable] + public Jester() : base( "the jester" ) + { + SetSkill( SkillName.Searching, 65.0, 88.0 ); + SetSkill( SkillName.Hiding, 45.0, 68.0 ); + SetSkill( SkillName.Lockpicking, 65.0, 88.0 ); + SetSkill( SkillName.Stealing, 65.0, 88.0 ); + SetSkill( SkillName.Stealth, 65.0, 88.0 ); + SetSkill( SkillName.RemoveTrap, 65.0, 88.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBJester() ); + } + + public override void InitOutfit() + { + AddItem( new JesterSuit( Utility.RandomHue() ) ); + AddItem( new JesterHat( Utility.RandomHue() ) ); + AddItem( new Shoes( Utility.RandomHue() ) ); + + if ( Female ) + { + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new Skirt( Utility.RandomHue() ) ); break; + case 1: AddItem( new Kilt( Utility.RandomHue() ) ); break; + case 2: AddItem( new LongPants( Utility.RandomHue() ) ); break; + case 3: AddItem( new ShortPants( Utility.RandomHue() ) ); break; + } + } + else + { + switch ( Utility.Random( 3 ) ) + { + case 0: AddItem( new LongPants( Utility.RandomHue() ) ); break; + case 1: AddItem( new ShortPants( Utility.RandomHue() ) ); break; + case 2: AddItem( new Kilt( Utility.RandomHue() ) ); break; + } + } + } + + public Jester( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Jeweler.cs b/Scripts/Mobiles/Towns/Vendors/Jeweler.cs new file mode 100644 index 0000000..8c650cc --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Jeweler.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Jeweler : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Jeweler() : base( "the jeweler" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBJewel() ); + } + + public Jeweler( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/LeatherWorker.cs b/Scripts/Mobiles/Towns/Vendors/LeatherWorker.cs new file mode 100644 index 0000000..638f4ad --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/LeatherWorker.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class LeatherWorker : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public LeatherWorker() : base( "the leather worker" ) + { + } + public override void InitSBInfo() + { + m_SBInfos.Add( new SBLeatherArmor() ); + m_SBInfos.Add( new SBStuddedArmor() ); + m_SBInfos.Add( new SBLeatherWorker() ); + } + public LeatherWorker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Towns/Vendors/Lumberjack.cs b/Scripts/Mobiles/Towns/Vendors/Lumberjack.cs new file mode 100644 index 0000000..5a74897 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Lumberjack.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Lumberjack : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.CarpentryGuild; } } + + [Constructable] + public Lumberjack() : base( "the lumberjack" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBStavesWeapon() ); + m_SBInfos.Add( new SBCarpenter() ); + m_SBInfos.Add( new SBWoodenShields() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + if ( Utility.RandomBool() ){ AddItem( new Server.Items.Hatchet() ); } + } + + public Lumberjack( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Mage.cs b/Scripts/Mobiles/Towns/Vendors/Mage.cs new file mode 100644 index 0000000..4328397 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Mage.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Mage : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.MagesGuild; } } + + [Constructable] + public Mage() : base( "the mage" ) + { + SetSkill( SkillName.Concentration, 65.0, 88.0 ); + SetSkill( SkillName.Magery, 64.0, 100.0 ); + SetSkill( SkillName.Meditation, 60.0, 83.0 ); + SetSkill( SkillName.MagicResist, 65.0, 88.0 ); + SetSkill( SkillName.HandToHand, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBMage() ); + } + + public Mage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Mapmaker.cs b/Scripts/Mobiles/Towns/Vendors/Mapmaker.cs new file mode 100644 index 0000000..139c291 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Mapmaker.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Mapmaker : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Mapmaker() : base( "the mapmaker" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBMapmaker() ); + } + + public Mapmaker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Miller.cs b/Scripts/Mobiles/Towns/Vendors/Miller.cs new file mode 100644 index 0000000..bff3b31 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Miller.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Miller : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Miller() : base( "the miller" ) + { + + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBMiller() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.FullApron() ); + } + + public Miller( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Miner.cs b/Scripts/Mobiles/Towns/Vendors/Miner.cs new file mode 100644 index 0000000..8491921 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Miner.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Miner : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Miner() : base( "the miner" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBMiner() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.Pickaxe() ); + } + + public Miner( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Minstrel.cs b/Scripts/Mobiles/Towns/Vendors/Minstrel.cs new file mode 100644 index 0000000..5339e26 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Minstrel.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Minstrel : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.BardsGuild; } } + + [Constructable] + public Minstrel() : base( "the minstrel" ) + { + SetSkill( SkillName.Discordance, 64.0, 100.0 ); + SetSkill( SkillName.Musicianship, 64.0, 100.0 ); + SetSkill( SkillName.Peacemaking, 65.0, 88.0 ); + SetSkill( SkillName.Provocation, 60.0, 83.0 ); + SetSkill( SkillName.Archery, 36.0, 68.0 ); + SetSkill( SkillName.Swords, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBBard() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + if ( Utility.RandomBool() ) + AddItem( new Server.Items.FeatheredHat( Utility.RandomHue() ) ); + } + + public Minstrel( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Provisioner.cs b/Scripts/Mobiles/Towns/Vendors/Provisioner.cs new file mode 100644 index 0000000..bc7c3b2 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Provisioner.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Provisioner : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Provisioner() : base( "the provisioner" ) + { + SetSkill( SkillName.Tactics, 45.0, 68.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBProvisioner() ); + } + + public Provisioner( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Ranger.cs b/Scripts/Mobiles/Towns/Vendors/Ranger.cs new file mode 100644 index 0000000..c67cdcc --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Ranger.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + public class Ranger : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Ranger() : base( "the ranger" ) + { + SetSkill( SkillName.Searching, 65.0, 88.0 ); + SetSkill( SkillName.Hiding, 45.0, 68.0 ); + SetSkill( SkillName.Archery, 65.0, 88.0 ); + SetSkill( SkillName.Tracking, 65.0, 88.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBRangedWeapon() ); + m_SBInfos.Add( new SBRanger() ); + } + + public override void InitOutfit() + { + switch ( Utility.Random( 4 ) ) + { + case 0: AddItem( new Bow() ); break; + case 1: AddItem( new Bow() ); break; + case 2: AddItem( new Crossbow() ); break; + case 3: AddItem( new HeavyCrossbow() ); break; + } + + AddItem( new FeatheredHat( Utility.RandomNeutralHue() ) ); + AddItem( new LeatherArms() ); + AddItem( new LeatherChest() ); + AddItem( new LeatherGloves() ); + AddItem( new LeatherGorget() ); + AddItem( new LeatherLegs() ); + AddItem( new Boots() ); + } + + public Ranger( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Scribe.cs b/Scripts/Mobiles/Towns/Vendors/Scribe.cs new file mode 100644 index 0000000..6ccadf4 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Scribe.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Scribe : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.MagesGuild; } } + + [Constructable] + public Scribe() : base( "the scribe" ) + { + SetSkill( SkillName.Concentration, 60.0, 83.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBScribe() ); + } + + public Scribe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Shipwright.cs b/Scripts/Mobiles/Towns/Vendors/Shipwright.cs new file mode 100644 index 0000000..bb4f530 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Shipwright.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Shipwright : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Shipwright() : base( "the shipwright" ) + { + SetSkill( SkillName.Bludgeoning, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBShipwright() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + if ( Utility.RandomBool() ) + AddItem( new Server.Items.SmithHammer() ); + + if ( Utility.RandomBool() ) + AddItem( new Server.Items.TricorneHat( Utility.RandomHue() ) ); + } + + public Shipwright( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/StableMaster.cs b/Scripts/Mobiles/Towns/Vendors/StableMaster.cs new file mode 100644 index 0000000..327b748 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/StableMaster.cs @@ -0,0 +1,487 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.ContextMenus; +using Server.Gumps; +using Server.Items; +using Server.Network; +using Server.Targeting; + +namespace Server.Mobiles +{ + public class StableMaster : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public StableMaster() : base( "the stable master" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBStableMaster() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( Utility.RandomBool() ? (Item)new QuarterStaff() : (Item)new ShepherdsCrook() ); + } + + private class StableEntry : ContextMenuEntry + { + private StableMaster m_Trainer; + private Mobile m_From; + + public StableEntry( StableMaster trainer, Mobile from ) : base( 6126, 12 ) + { + m_Trainer = trainer; + m_From = from; + } + + public override void OnClick() + { + m_Trainer.BeginStable( m_From ); + } + } + + private class ClaimListGump : Gump + { + private StableMaster m_Trainer; + private Mobile m_From; + private List m_List; + + public ClaimListGump( StableMaster trainer, Mobile from, List list ) : base( 50, 50 ) + { + m_Trainer = trainer; + m_From = from; + m_List = list; + + from.CloseGump( typeof( ClaimListGump ) ); + + AddPage( 0 ); + + AddBackground( 0, 0, 325, 50 + (list.Count * 20), 9250 ); + AddAlphaRegion( 5, 5, 315, 40 + (list.Count * 20) ); + + AddHtml( 15, 15, 275, 20, "Select a pet to retrieve from the stables:", false, false ); + + for ( int i = 0; i < list.Count; ++i ) + { + BaseCreature pet = list[i]; + + if ( pet == null || pet.Deleted ) + continue; + + AddButton( 15, 39 + (i * 20), 10006, 10006, i + 1, GumpButtonType.Reply, 0 ); + AddHtml( 32, 35 + (i * 20), 275, 18, String.Format( "{0}", pet.Name ), false, false ); + } + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int index = info.ButtonID - 1; + + if ( index >= 0 && index < m_List.Count ) + m_Trainer.EndClaimList( m_From, m_List[index] ); + } + } + + private class ClaimAllEntry : ContextMenuEntry + { + private StableMaster m_Trainer; + private Mobile m_From; + + public ClaimAllEntry( StableMaster trainer, Mobile from ) : base( 6127, 12 ) + { + m_Trainer = trainer; + m_From = from; + } + + public override void OnClick() + { + m_Trainer.Claim( m_From ); + } + } + + public override void AddCustomContextEntries( Mobile from, List list ) + { + if ( from.Alive ) + { + list.Add( new StableEntry( this, from ) ); + + if ( from.Stabled.Count > 0 ) + list.Add( new ClaimAllEntry( this, from ) ); + } + + base.AddCustomContextEntries( from, list ); + } + + public static int GetMaxStabled( Mobile from ) + { + return 5; + } + + private class StableTarget : Target + { + private StableMaster m_Trainer; + + public StableTarget( StableMaster trainer ) : base( 12, false, TargetFlags.None ) + { + m_Trainer = trainer; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is BaseCreature ) + m_Trainer.EndStable( from, (BaseCreature)targeted ); + else if ( targeted == from ) + m_Trainer.SayTo( from, 502672 ); // HA HA HA! Sorry, I am not an inn. + else + m_Trainer.SayTo( from, 1048053 ); // You can't stable that! + } + } + + private void CloseClaimList( Mobile from ) + { + from.CloseGump( typeof( ClaimListGump ) ); + } + + public void BeginClaimList( Mobile from ) + { + if ( Deleted || !from.CheckAlive() ) + return; + + List list = new List(); + + for ( int i = 0; i < from.Stabled.Count; ++i ) + { + BaseCreature pet = from.Stabled[i] as BaseCreature; + + if ( pet == null || pet.Deleted ) + { + pet.IsStabled = false; + from.Stabled.RemoveAt( i ); + --i; + continue; + } + + list.Add( pet ); + } + + if ( list.Count > 0 ) + from.SendGump( new ClaimListGump( this, from, list ) ); + else + SayTo( from, 502671 ); // But I have no animals stabled with me at the moment! + } + + public void EndClaimList( Mobile from, BaseCreature pet ) + { + if ( pet == null || pet.Deleted || from.Map != this.Map || !from.Stabled.Contains( pet ) || !from.CheckAlive() ) + return; + + if ( !from.InRange( this, 14 ) ) + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + return; + } + + if ( CanClaim( from, pet ) ) + { + DoClaim( from, pet ); + + from.Stabled.Remove( pet ); + } + else + { + SayTo( from, 1049612, pet.Name ); // ~1_NAME~ remained in the stables because you have too many followers. + } + } + + public void BeginStable( Mobile from ) + { + if ( Deleted || !from.CheckAlive() ) + return; + + // Which animal wouldst thou like to stable here? + from.SendLocalizedMessage(1042558); + from.Target = new StableTarget( this ); + } + + public void EndStable( Mobile from, BaseCreature pet ) + { + if ( Deleted || !from.CheckAlive() ) + return; + + if ( pet.Body.IsHuman ) + { + SayTo( from, 502672 ); // HA HA HA! Sorry, I am not an inn. + } + else if ( !pet.Controlled ) + { + SayTo( from, 1048053 ); // You can't stable that! + } + else if ( pet.ControlMaster != from ) + { + SayTo( from, 1042562 ); // You do not own that pet! + } + else if ( pet.IsDeadPet ) + { + SayTo( from, 1049668 ); // Living pets only, please. + } + else if ( pet.Summoned ) + { + SayTo( from, 502673 ); // I can not stable summoned creatures. + } + else if ( (pet is PackLlama || pet is PackHorse) && (pet.Backpack != null && pet.Backpack.Items.Count > 0) ) + { + SayTo( from, 1042563 ); // You need to unload your pet. + } + else if ( pet.Combatant != null && pet.InRange( pet.Combatant, 12 ) && pet.Map == pet.Combatant.Map ) + { + SayTo( from, 1042564 ); // I'm sorry. Your pet seems to be busy. + } + else if ( from.Stabled.Count >= GetMaxStabled( from ) ) + { + SayTo( from, 1042565 ); // You have too many pets in the stables! + } + else + { + pet.ControlTarget = null; + pet.ControlOrder = OrderType.Stay; + pet.Internalize(); + + pet.SetControlMaster( null ); + pet.SummonMaster = null; + + pet.IsStabled = true; + + from.Stabled.Add( pet ); + + SayTo( from, 502679 ); // Very well, thy pet is stabled. Thou mayst recover it by saying 'claim' to me. In one real world week, I shall sell it off if it is not claimed! + } + } + + public void Claim( Mobile from ) + { + Claim( from, null ); + } + + public void Claim( Mobile from, string petName ) + { + if ( Deleted || !from.CheckAlive() ) + return; + + bool claimed = false; + int stabled = 0; + + bool claimByName = ( petName != null ); + + for ( int i = 0; i < from.Stabled.Count; ++i ) + { + BaseCreature pet = from.Stabled[i] as BaseCreature; + + if ( pet == null || pet.Deleted ) + { + pet.IsStabled = false; + from.Stabled.RemoveAt( i ); + --i; + continue; + } + + ++stabled; + + if ( claimByName && !Insensitive.Equals( pet.Name, petName ) ) + continue; + + if ( CanClaim( from, pet ) ) + { + DoClaim( from, pet ); + + from.Stabled.RemoveAt( i ); + --i; + + claimed = true; + } + else + { + SayTo( from, 1049612, pet.Name ); // ~1_NAME~ remained in the stables because you have too many followers. + } + } + + if ( claimed ) + SayTo( from, 1042559 ); // Here you go... and good day to you! + else if ( stabled == 0 ) + SayTo( from, 502671 ); // But I have no animals stabled with me at the moment! + else if ( claimByName ) + BeginClaimList( from ); + } + + public bool CanClaim( Mobile from, BaseCreature pet ) + { + return ((from.Followers + pet.ControlSlots) <= from.FollowersMax); + } + + private void DoClaim( Mobile from, BaseCreature pet ) + { + pet.SetControlMaster( from ); + + if ( pet.Summoned ) + pet.SummonMaster = from; + + pet.ControlTarget = from; + pet.ControlOrder = OrderType.Follow; + + pet.MoveToWorld( from.Location, from.Map ); + + pet.IsStabled = false; + } + + public override bool HandlesOnSpeech( Mobile from ) + { + return true; + } + + public override void OnSpeech( SpeechEventArgs e ) + { + if ( !e.Handled && e.HasKeyword( 0x0008 ) ) // *stable* + { + e.Handled = true; + + CloseClaimList( e.Mobile ); + BeginStable( e.Mobile ); + } + else if ( !e.Handled && e.HasKeyword( 0x0009 ) ) // *claim* + { + e.Handled = true; + + CloseClaimList( e.Mobile ); + + int index = e.Speech.IndexOf( ' ' ); + + if ( index != -1 ) + Claim( e.Mobile, e.Speech.Substring( index ).Trim() ); + else + Claim( e.Mobile ); + } + else + { + base.OnSpeech( e ); + } + } + + public static void DismountPlayer( Mobile m ) + { + CleanClaimList( m ); + + BaseCreature horse = (BaseCreature)(m.Mount); + Server.Mobiles.BaseMount.Dismount( m ); + + horse.ControlTarget = null; + horse.Internalize(); + horse.SetControlMaster( null ); + horse.SummonMaster = null; + horse.IsStabled = true; + horse.Language = "mount"; + + m.Stabled.Add( horse ); + } + + public static void CleanClaimList( Mobile from ) + { + List list = new List(); + + for ( int i = 0; i < from.Stabled.Count; ++i ) + { + BaseCreature horse = from.Stabled[i] as BaseCreature; + + if ( horse == null || horse.Deleted ) + { + horse.IsStabled = false; + from.Stabled.RemoveAt( i ); + --i; + continue; + } + else { horse.Language = null; } + } + } + + public static void GetLastMounted( Mobile from ) + { + List list = new List(); + + BaseCreature bc = null; + int stabled = 0; + + for ( int i = 0; i < from.Stabled.Count; ++i ) + { + BaseCreature horse = from.Stabled[i] as BaseCreature; + + if ( horse == null || horse.Deleted ) + { + horse.IsStabled = false; + from.Stabled.RemoveAt( i ); + --i; + continue; + } + else if ( horse.Language == "mount" ) + { + bc = horse; + } + } + + for ( int i = 0; i < from.Stabled.Count; ++i ) + { + BaseCreature horse = from.Stabled[i] as BaseCreature; + + ++stabled; + + if ( CanGetLastMounted( from, horse ) && horse is BaseMount && horse == bc ) + { + horse.SetControlMaster( from ); + horse.ControlTarget = from; + horse.MoveToWorld( from.Location, from.Map ); + horse.IsStabled = false; + + from.Stabled.RemoveAt( i ); + --i; + + ((Mobile)horse).Language = null; + ((BaseMount)horse).Rider = from; + } + else if ( horse == bc ) + { + ((Mobile)horse).Language = null; + } + } + + Server.Mobiles.StableMaster.CleanClaimList( from ); + } + + public static bool CanGetLastMounted( Mobile from, BaseCreature pet ) + { + return ((from.Followers + pet.ControlSlots) <= from.FollowersMax); + } + + public StableMaster( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Tailor.cs b/Scripts/Mobiles/Towns/Vendors/Tailor.cs new file mode 100644 index 0000000..08af416 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Tailor.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Tailor : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.TailorsGuild; } } + + [Constructable] + public Tailor() : base( "the tailor" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBTailor() ); + m_SBInfos.Add( new SBWeaver() ); + } + + public Tailor( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Towns/Vendors/Tanner.cs b/Scripts/Mobiles/Towns/Vendors/Tanner.cs new file mode 100644 index 0000000..11dace0 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Tanner.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Tanner : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Tanner() : base( "the tanner" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBTanner() ); + } + + public Tanner( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Towns/Vendors/TavernKeeper.cs b/Scripts/Mobiles/Towns/Vendors/TavernKeeper.cs new file mode 100644 index 0000000..a94bf4b --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/TavernKeeper.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class TavernKeeper : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public TavernKeeper() : base( "the tavern keeper" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBTavernKeeper() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new Server.Items.HalfApron() ); + } + + public TavernKeeper( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Thief.cs b/Scripts/Mobiles/Towns/Vendors/Thief.cs new file mode 100644 index 0000000..45ef829 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Thief.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Thief : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.ThievesGuild; } } + + [Constructable] + public Thief() : base( "the thief" ) + { + SetSkill( SkillName.Searching, 65.0, 88.0 ); + SetSkill( SkillName.Hiding, 45.0, 68.0 ); + SetSkill( SkillName.Lockpicking, 65.0, 88.0 ); + SetSkill( SkillName.Stealing, 65.0, 88.0 ); + SetSkill( SkillName.Stealth, 65.0, 88.0 ); + SetSkill( SkillName.RemoveTrap, 65.0, 88.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBThief() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + AddItem( new Server.Items.Dagger() ); + } + + public Thief( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Tinker.cs b/Scripts/Mobiles/Towns/Vendors/Tinker.cs new file mode 100644 index 0000000..6e869c3 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Tinker.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Tinker : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.TinkersGuild; } } + + [Constructable] + public Tinker() : base( "the tinker" ) + { + SetSkill( SkillName.Lockpicking, 60.0, 83.0 ); + SetSkill( SkillName.RemoveTrap, 75.0, 98.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBTinker() ); + } + + public Tinker( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Waiter.cs b/Scripts/Mobiles/Towns/Vendors/Waiter.cs new file mode 100644 index 0000000..f4bb3d7 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Waiter.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Waiter : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + [Constructable] + public Waiter() : base( "the waiter" ) + { + SetSkill( SkillName.Discordance, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBWaiter() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new Server.Items.HalfApron() ); + } + + public Waiter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Weaponsmith.cs b/Scripts/Mobiles/Towns/Vendors/Weaponsmith.cs new file mode 100644 index 0000000..142d33b --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Weaponsmith.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Weaponsmith : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.WarriorsGuild; } } + + [Constructable] + public Weaponsmith() : base( "the weaponsmith" ) + { + SetSkill( SkillName.Fencing, 45.0, 68.0 ); + SetSkill( SkillName.Bludgeoning, 45.0, 68.0 ); + SetSkill( SkillName.Swords, 45.0, 68.0 ); + SetSkill( SkillName.Tactics, 36.0, 68.0 ); + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBWeaponSmith() ); + } + + public override void InitOutfit() + { + base.InitOutfit(); + + AddItem( new Server.Items.HalfApron() ); + } + + public Weaponsmith( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Towns/Vendors/Weaver.cs b/Scripts/Mobiles/Towns/Vendors/Weaver.cs new file mode 100644 index 0000000..6877834 --- /dev/null +++ b/Scripts/Mobiles/Towns/Vendors/Weaver.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using Server; + +namespace Server.Mobiles +{ + public class Weaver : BaseVendor + { + private List m_SBInfos = new List(); + protected override List SBInfos{ get { return m_SBInfos; } } + + public override NpcGuild NpcGuild{ get{ return NpcGuild.TailorsGuild; } } + + [Constructable] + public Weaver() : base( "the weaver" ) + { + } + + public override void InitSBInfo() + { + m_SBInfos.Add( new SBWeaver() ); + } + + public Weaver( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/AncientLich.cs b/Scripts/Mobiles/Undead/AncientLich.cs new file mode 100644 index 0000000..3fd2c39 --- /dev/null +++ b/Scripts/Mobiles/Undead/AncientLich.cs @@ -0,0 +1,95 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "an ancient liche's corpse" )] + public class AncientLich : BaseCreature + { + [Constructable] + public AncientLich() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "lich" ); + HiddenTitle = "the ancient lich"; + Body = 24; + Hue = 2101; + BaseSoundID = 412; + Clan = Clan.Undead; + + SetStr( 216, 305 ); + SetDex( 96, 115 ); + SetInt( 966, 1045 ); + + SetHits( 560, 595 ); + + SetDamage( 15, 27 ); + + SetSkill( SkillName.Concentration, 120.1, 130.0 ); + SetSkill( SkillName.Magery, 120.1, 130.0 ); + SetSkill( SkillName.Meditation, 100.1, 101.0 ); + SetSkill( SkillName.Poisoning, 100.1, 101.0 ); + SetSkill( SkillName.MagicResist, 175.2, 200.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 75.1, 100.0 ); + + Fame = 23000; + Karma = -23000; + + VirtualArmor = 60; + PackReg( 30, 275 ); + PackItem( new Bone( Utility.RandomList(3,4,5,6) ) ); + } + + public override int GetIdleSound() + { + return 0x19D; + } + + public override int GetAngerSound() + { + return 0x175; + } + + public override int GetDeathSound() + { + return 0x108; + } + + public override int GetAttackSound() + { + return 0xE2; + } + + public override int GetHurtSound() + { + return 0x28B; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 3 ); + AddLoot( LootPack.HighScrolls, 2 ); + } + + public override bool Unprovokable{ get{ return true; } } + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public AncientLich( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/AncientVampire.cs b/Scripts/Mobiles/Undead/AncientVampire.cs new file mode 100644 index 0000000..da6886a --- /dev/null +++ b/Scripts/Mobiles/Undead/AncientVampire.cs @@ -0,0 +1,68 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a vampire corpse" )] + public class AncientVampire : BaseCreature + { + [Constructable] + public AncientVampire() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "vampire" ); + HiddenTitle = "the ancient vampire"; + Body = 128; + BaseSoundID = 0x47D; + AnimationMod = 3; + Clan = Clan.Undead; + + SetStr( 216, 305 ); + SetDex( 96, 115 ); + SetInt( 966, 1045 ); + + SetHits( 560, 595 ); + + SetDamage( 15, 27 ); + + SetSkill( SkillName.Concentration, 120.1, 130.0 ); + SetSkill( SkillName.Magery, 120.1, 130.0 ); + SetSkill( SkillName.Meditation, 100.1, 101.0 ); + SetSkill( SkillName.Poisoning, 100.1, 101.0 ); + SetSkill( SkillName.MagicResist, 175.2, 200.0 ); + SetSkill( SkillName.Tactics, 90.1, 100.0 ); + SetSkill( SkillName.HandToHand, 75.1, 100.0 ); + + Fame = 23000; + Karma = -23000; + + VirtualArmor = 60; + PackReg( 30, 275 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 3 ); + AddLoot( LootPack.HighScrolls, 2 ); + } + + public override bool Unprovokable{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public AncientVampire( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/BoneClaw.cs b/Scripts/Mobiles/Undead/BoneClaw.cs new file mode 100644 index 0000000..e24ec1d --- /dev/null +++ b/Scripts/Mobiles/Undead/BoneClaw.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a skeletal corpse" )] + public class BoneClaw : BaseCreature + { + [Constructable] + public BoneClaw() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a bone claw"; + Body = 331; + BaseSoundID = 0x48D; + Clan = Clan.Undead; + + SetStr( 156, 180 ); + SetDex( 156, 175 ); + SetInt( 16, 40 ); + + SetHits( 134, 148 ); + + SetDamage( 13, 17 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 85.1, 100.0 ); + SetSkill( SkillName.HandToHand, 85.1, 105.0 ); + + Fame = 650; + Karma = -650; + + VirtualArmor = 28; + + switch ( Utility.Random( 5 )) + { + case 0: PackItem( new BoneArms() ); break; + case 1: PackItem( new BoneChest() ); break; + case 2: PackItem( new BoneGloves() ); break; + case 3: PackItem( new BoneLegs() ); break; + case 4: PackItem( new BoneHelm() ); break; + } + + PackItem( new Bone( Utility.RandomList(1,2,3,4) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public BoneClaw( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Undead/BoneDrake.cs b/Scripts/Mobiles/Undead/BoneDrake.cs new file mode 100644 index 0000000..2a69687 --- /dev/null +++ b/Scripts/Mobiles/Undead/BoneDrake.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a drake corpse" )] + public class BoneDrake : BaseCreature + { + [Constructable] + public BoneDrake () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a bone drake"; + Body = 360; + BaseSoundID = 0x488; + Clan = Clan.Undead; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 336, 375 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + SetSkill( SkillName.Concentration, 30.1, 40.0 ); + SetSkill( SkillName.Magery, 30.1, 40.0 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + + Fame = 7500; + Karma = -7500; + + VirtualArmor = 46; + + PackItem( new Bone( Utility.RandomList(3,4,5,6) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public BoneDrake( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/BoneKnight.cs b/Scripts/Mobiles/Undead/BoneKnight.cs new file mode 100644 index 0000000..68e597f --- /dev/null +++ b/Scripts/Mobiles/Undead/BoneKnight.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a skeletal corpse" )] + public class BoneKnight : BaseCreature + { + [Constructable] + public BoneKnight() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a bone knight"; + Body = 57; + BaseSoundID = 451; + Clan = Clan.Undead; + + SetStr( 196, 250 ); + SetDex( 176, 195 ); + SetInt( 36, 60 ); + + SetHits( 178, 220 ); + + SetDamage( 8, 18 ); + + SetSkill( SkillName.MagicResist, 85.1, 100.0 ); + SetSkill( SkillName.Tactics, 95.1, 100.0 ); + SetSkill( SkillName.HandToHand, 85.1, 100.0 ); + + Fame = 5000; + Karma = -5000; + + VirtualArmor = 40; + + switch ( Utility.Random( 6 ) ) + { + case 0: PackItem( new PlateArms() ); break; + case 1: PackItem( new PlateChest() ); break; + case 2: PackItem( new PlateGloves() ); break; + case 3: PackItem( new PlateGorget() ); break; + case 4: PackItem( new PlateLegs() ); break; + case 5: PackItem( new PlateHelm() ); break; + } + + PackItem( new Scimitar() ); + PackItem( new WoodenShield() ); + PackItem( new Bone( Utility.RandomList(1,2,3,4) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public BoneKnight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/BoneMagi.cs b/Scripts/Mobiles/Undead/BoneMagi.cs new file mode 100644 index 0000000..bfcfb69 --- /dev/null +++ b/Scripts/Mobiles/Undead/BoneMagi.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a skeletal corpse" )] + public class BoneMagi : BaseCreature + { + [Constructable] + public BoneMagi() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a bone magi"; + Body = Utility.RandomList ( 74, 332, 121 ); + BaseSoundID = 451; + Clan = Clan.Undead; + + SetStr( 176, 200 ); + SetDex( 156, 175 ); + SetInt( 286, 310 ); + + SetHits( 90, 120 ); + + SetDamage( 7, 12 ); + + SetSkill( SkillName.Concentration, 80.1, 90.0 ); + SetSkill( SkillName.Magery, 80.1, 90.0 ); + SetSkill( SkillName.MagicResist, 75.1, 90.0 ); + SetSkill( SkillName.Tactics, 65.1, 80.0 ); + SetSkill( SkillName.HandToHand, 65.1, 75.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 38; + + PackReg( 6, 20 ); + PackItem( new Bone( Utility.RandomList(1,1,2,3) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.MedPotions ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public BoneMagi( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/CorpseGolem.cs b/Scripts/Mobiles/Undead/CorpseGolem.cs new file mode 100644 index 0000000..3fdba47 --- /dev/null +++ b/Scripts/Mobiles/Undead/CorpseGolem.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a corpse" )] + public class CorpseGolem : BaseCreature + { + [Constructable] + public CorpseGolem () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a corpse golem"; + Body = 318; + BaseSoundID = 471; + AnimationMod = 3; + + SetStr( 256, 305 ); + SetDex( 66, 95 ); + SetInt( 31, 55 ); + + SetHits( 148, 196 ); + SetMana( 0 ); + + SetDamage( 9, 16 ); + + SetSkill( SkillName.MagicResist, 60.3, 85.0 ); + SetSkill( SkillName.Tactics, 70.1, 80.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 40; + + PackItem( new Bandage( Utility.RandomMinMax( 15, 25 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedPotions ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 2; } } + + public CorpseGolem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Demilich.cs b/Scripts/Mobiles/Undead/Demilich.cs new file mode 100644 index 0000000..a14b3d6 --- /dev/null +++ b/Scripts/Mobiles/Undead/Demilich.cs @@ -0,0 +1,69 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a liche's corpse" )] + public class Demilich : BaseCreature + { + [Constructable] + public Demilich() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "lich" ); + HiddenTitle = "the demilich"; + Body = 142; + BaseSoundID = 0x3E9; + AnimationMod = 3; + Clan = Clan.Undead; + + SetStr( 541, 657 ); + SetDex( 190, 215 ); + SetInt( 735, 852 ); + + SetHits( 325, 394 ); + + SetDamage( 14, 17 ); + + SetSkill( SkillName.Concentration, 117.1, 130.0 ); + SetSkill( SkillName.Magery, 117.1, 130.0 ); + SetSkill( SkillName.MagicResist, 150.5, 200.0 ); + SetSkill( SkillName.Tactics, 65.1, 91.0 ); + SetSkill( SkillName.HandToHand, 78.1, 104.0 ); + + Fame = 20000; + Karma = -20000; + + VirtualArmor = 55; + PackReg( 22, 50 ); + PackItem( new Bone( Utility.RandomList(2,3,4,5) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.MedScrolls ); + AddLoot( LootPack.HighScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Demilich( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/FleshGolem.cs b/Scripts/Mobiles/Undead/FleshGolem.cs new file mode 100644 index 0000000..e1953d3 --- /dev/null +++ b/Scripts/Mobiles/Undead/FleshGolem.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a corpse" )] + public class FleshGolem : BaseCreature + { + [Constructable] + public FleshGolem () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a flesh golem"; + Body = 262; + BaseSoundID = 471; + AnimationMod = 1; + + SetStr( 166, 195 ); + SetDex( 46, 65 ); + SetInt( 46, 70 ); + + SetHits( 100, 117 ); + SetMana( 0 ); + + SetDamage( 9, 11 ); + + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 60.1, 70.0 ); + SetSkill( SkillName.HandToHand, 70.1, 80.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 32; + + PackItem( new Club() ); + PackItem( new Bandage( Utility.RandomMinMax( 10, 20 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowPotions ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override int Meat{ get{ return 2; } } + public override Poison PoisonImmune{ get{ return Poison.Lesser; } } + + public FleshGolem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/FleshGoliath.cs b/Scripts/Mobiles/Undead/FleshGoliath.cs new file mode 100644 index 0000000..b7461f5 --- /dev/null +++ b/Scripts/Mobiles/Undead/FleshGoliath.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a corpse" )] + public class FleshGoliath : BaseCreature + { + [Constructable] + public FleshGoliath () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a flesh goliath"; + Body = 49; + BaseSoundID = 471; + + SetStr( 336, 385 ); + SetDex( 96, 115 ); + SetInt( 31, 55 ); + + SetHits( 202, 231 ); + SetMana( 0 ); + + SetDamage( 7, 23 ); + + SetSkill( SkillName.MagicResist, 60.3, 105.0 ); + SetSkill( SkillName.Tactics, 80.1, 100.0 ); + SetSkill( SkillName.HandToHand, 80.1, 90.0 ); + + Fame = 4500; + Karma = -4500; + + VirtualArmor = 48; + + PackItem( new Axe() ); + PackItem( new Axe() ); + PackItem( new Bandage( Utility.RandomMinMax( 20, 30 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedPotions ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Regular; } } + public override int Meat{ get{ return 2; } } + + public FleshGoliath( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Ghoul.cs b/Scripts/Mobiles/Undead/Ghoul.cs new file mode 100644 index 0000000..90c061e --- /dev/null +++ b/Scripts/Mobiles/Undead/Ghoul.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a ghastly corpse" )] + public class Ghoul : BaseCreature + { + [Constructable] + public Ghoul() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a ghoul"; + Body = 38; + BaseSoundID = 471; + Clan = Clan.Undead; + + SetStr( 76, 100 ); + SetDex( 76, 95 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.Poisoning, 45.1, 60.0 ); + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 55.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 28; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lesser; } } + + public void DrainBlood( Mobile m ) + { + DoHarmful( m ); + new Blood().MoveToWorld( m.Location, m.Map ); + m.SendMessage( "The creature feeds on your flesh!" ); + int toDrain = Utility.RandomMinMax( 2, 10 ); + m.PlaySound( 0x23F ); + Hits += toDrain; + m.Damage( toDrain, this ); + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + DrainBlood( defender ); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + DrainBlood( attacker ); + } + + public Ghoul( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Lich.cs b/Scripts/Mobiles/Undead/Lich.cs new file mode 100644 index 0000000..b454eaa --- /dev/null +++ b/Scripts/Mobiles/Undead/Lich.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a liche's corpse" )] + public class Lich : BaseCreature + { + [Constructable] + public Lich() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a lich"; + Body = 24; + BaseSoundID = 0x3E9; + Clan = Clan.Undead; + + SetStr( 171, 200 ); + SetDex( 126, 145 ); + SetInt( 276, 305 ); + + SetHits( 103, 120 ); + + SetDamage( 24, 26 ); + + SetSkill( SkillName.Concentration, 100.0 ); + SetSkill( SkillName.Magery, 70.1, 80.0 ); + SetSkill( SkillName.Meditation, 85.1, 95.0 ); + SetSkill( SkillName.MagicResist, 80.1, 100.0 ); + SetSkill( SkillName.Tactics, 70.1, 90.0 ); + + Fame = 8000; + Karma = -8000; + + VirtualArmor = 50; + PackItem( new GnarledStaff() ); + PackReg( 17, 24 ); + PackItem( new Bone( Utility.RandomList(1,2,3,4) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Lich( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/LichLord.cs b/Scripts/Mobiles/Undead/LichLord.cs new file mode 100644 index 0000000..f973379 --- /dev/null +++ b/Scripts/Mobiles/Undead/LichLord.cs @@ -0,0 +1,67 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a liche's corpse" )] + public class LichLord : BaseCreature + { + [Constructable] + public LichLord() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a lich lord"; + Body = 24; + BaseSoundID = 412; + Clan = Clan.Undead; + + SetStr( 416, 505 ); + SetDex( 146, 165 ); + SetInt( 566, 655 ); + + SetHits( 250, 303 ); + + SetDamage( 11, 13 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 150.5, 200.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 18000; + Karma = -18000; + + VirtualArmor = 50; + PackItem( new GnarledStaff() ); + PackReg( 12, 40 ); + PackItem( new Bone( Utility.RandomList(2,3,4,5) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public LichLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Mummy.cs b/Scripts/Mobiles/Undead/Mummy.cs new file mode 100644 index 0000000..8c85ce9 --- /dev/null +++ b/Scripts/Mobiles/Undead/Mummy.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a mummy corpse" )] + public class Mummy : BaseCreature + { + [Constructable] + public Mummy() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.4, 0.8 ) + { + Name = "a mummy"; + Body = 65; + BaseSoundID = 471; + Clan = Clan.Undead; + + SetStr( 346, 370 ); + SetDex( 71, 90 ); + SetInt( 26, 40 ); + + SetHits( 208, 222 ); + + SetDamage( 13, 23 ); + + SetSkill( SkillName.MagicResist, 15.1, 40.0 ); + SetSkill( SkillName.Tactics, 35.1, 50.0 ); + SetSkill( SkillName.HandToHand, 35.1, 50.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 50; + + PackItem( new Garlic( 5 ) ); + PackItem( new Bandage( 10 ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + AddLoot( LootPack.Gems ); + AddLoot( LootPack.LowPotions ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lesser; } } + + public Mummy( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/MummyLord.cs b/Scripts/Mobiles/Undead/MummyLord.cs new file mode 100644 index 0000000..48f73d3 --- /dev/null +++ b/Scripts/Mobiles/Undead/MummyLord.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a mummy corpse" )] + public class MummyLord : BaseCreature + { + [Constructable] + public MummyLord() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.4, 0.8 ) + { + Name = "the mummy lord"; + Body = 65; + BaseSoundID = 471; + AnimationMod = 1; + Clan = Clan.Undead; + + SetStr( 546, 570 ); + SetDex( 271, 290 ); + SetInt( 26, 40 ); + + SetHits( 408, 422 ); + + SetDamage( 18, 28 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 85.1, 110.0 ); + SetSkill( SkillName.HandToHand, 85.1, 110.0 ); + + Fame = 8500; + Karma = -8500; + + VirtualArmor = 50; + + PackItem( new Garlic( Utility.RandomMinMax( 10, 20 ) ) ); + PackItem( new Bandage( Utility.RandomMinMax( 10, 20 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.Gems, 2 ); + AddLoot( LootPack.MedPotions ); + } + + public override Poison PoisonImmune{ get{ return Poison.Greater; } } + + public MummyLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Nazghoul.cs b/Scripts/Mobiles/Undead/Nazghoul.cs new file mode 100644 index 0000000..5d5e0ca --- /dev/null +++ b/Scripts/Mobiles/Undead/Nazghoul.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a ghoulish corpse" )] + public class Nazghoul : BaseCreature + { + [Constructable] + public Nazghoul() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a nazghoul"; + Body = 297; + BaseSoundID = 471; + Clan = Clan.Undead; + + SetStr( 416, 505 ); + SetDex( 146, 165 ); + SetInt( 566, 655 ); + + SetHits( 250, 303 ); + + SetDamage( 11, 13 ); + + SetSkill( SkillName.Concentration, 90.1, 100.0 ); + SetSkill( SkillName.Magery, 90.1, 100.0 ); + SetSkill( SkillName.MagicResist, 150.5, 200.0 ); + SetSkill( SkillName.Tactics, 50.1, 70.0 ); + SetSkill( SkillName.HandToHand, 60.1, 80.0 ); + + Fame = 18000; + Karma = -18000; + + VirtualArmor = 50; + PackReg( 12, 40 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Nazghoul( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/RottingCorpse.cs b/Scripts/Mobiles/Undead/RottingCorpse.cs new file mode 100644 index 0000000..767bdd9 --- /dev/null +++ b/Scripts/Mobiles/Undead/RottingCorpse.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a rotting corpse" )] + public class RottingCorpse : BaseCreature + { + [Constructable] + public RottingCorpse() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a rotting corpse"; + Body = 332; + BaseSoundID = 471; + Clan = Clan.Undead; + + SetStr( 301, 350 ); + SetDex( 75 ); + SetInt( 151, 200 ); + + SetHits( 1200 ); + SetStam( 150 ); + SetMana( 0 ); + + SetDamage( 8, 10 ); + + SetSkill( SkillName.Poisoning, 120.0 ); + SetSkill( SkillName.MagicResist, 250.0 ); + SetSkill( SkillName.Tactics, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 100.0 ); + + Fame = 6000; + Karma = -6000; + + VirtualArmor = 40; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lethal; } } + + public RottingCorpse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/RottingDrake.cs b/Scripts/Mobiles/Undead/RottingDrake.cs new file mode 100644 index 0000000..80e1c1b --- /dev/null +++ b/Scripts/Mobiles/Undead/RottingDrake.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a drake corpse" )] + public class RottingDrake : BaseCreature + { + [Constructable] + public RottingDrake () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a rotting drake"; + Body = 225; + Hue = 1186; + BaseSoundID = 362; + Clan = Clan.Undead; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 101, 140 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + + Fame = 5500; + Karma = -5500; + + VirtualArmor = 46; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich ); + } + + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Regular; } } + + public RottingDrake( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Shade.cs b/Scripts/Mobiles/Undead/Shade.cs new file mode 100644 index 0000000..b40074f --- /dev/null +++ b/Scripts/Mobiles/Undead/Shade.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a ghostly corpse" )] + public class Shade : BaseCreature + { + [Constructable] + public Shade() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a shade"; + Body = 26; + Hue = 1181; + BaseSoundID = 0x482; + Clan = Clan.Undead; + + SetStr( 76, 100 ); + SetDex( 76, 95 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + + SetDamage( 7, 11 ); + + SetSkill( SkillName.Concentration, 55.1, 70.0 ); + SetSkill( SkillName.Magery, 55.1, 70.0 ); + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 55.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 28; + + PackReg( 10 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool BleedImmune{ get{ return true; } } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Shade( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/SkeletalDragon.cs b/Scripts/Mobiles/Undead/SkeletalDragon.cs new file mode 100644 index 0000000..50b4eb4 --- /dev/null +++ b/Scripts/Mobiles/Undead/SkeletalDragon.cs @@ -0,0 +1,73 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a skeletal dragon corpse" )] + public class SkeletalDragon : BaseCreature + { + [Constructable] + public SkeletalDragon () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a skeletal dragon"; + Body = 104; + BaseSoundID = 0x488; + Clan = Clan.Undead; + + SetStr( 898, 1030 ); + SetDex( 68, 200 ); + SetInt( 488, 620 ); + + SetHits( 558, 599 ); + + SetDamage( 29, 35 ); + + SetSkill( SkillName.Concentration, 80.1, 100.0 ); + SetSkill( SkillName.Magery, 80.1, 100.0 ); + SetSkill( SkillName.MagicResist, 100.3, 130.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 97.6, 100.0 ); + + Fame = 22500; + Karma = -22500; + + VirtualArmor = 80; + PackItem( new Bone( Utility.RandomList(6,7,8,9) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 4 ); + AddLoot( LootPack.Gems, 5 ); + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override int BreathFireDamage{ get{ return 0; } } + public override int BreathColdDamage{ get{ return 100; } } + public override int BreathEffectHue{ get{ return 0x480; } } + public override double BonusPetDamageScalar{ get{ return 1.0; } } + public override bool AutoDispel{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override bool BleedImmune{ get{ return true; } } + public override int Meat{ get{ return 19; } } // where's it hiding these? :) + public override int Hides{ get{ return 20; } } + + public SkeletalDragon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/SkeletalKnight.cs b/Scripts/Mobiles/Undead/SkeletalKnight.cs new file mode 100644 index 0000000..f2665a2 --- /dev/null +++ b/Scripts/Mobiles/Undead/SkeletalKnight.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a skeletal corpse" )] + public class SkeletalKnight : BaseCreature + { + [Constructable] + public SkeletalKnight() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a skeletal knight"; + Body = 160; + BaseSoundID = 451; + AnimationMod = 4; + Clan = Clan.Undead; + + SetStr( 196, 250 ); + SetDex( 76, 95 ); + SetInt( 36, 60 ); + + SetHits( 118, 150 ); + + SetDamage( 6, 12 ); + + SetSkill( SkillName.MagicResist, 65.1, 80.0 ); + SetSkill( SkillName.Tactics, 85.1, 100.0 ); + SetSkill( SkillName.HandToHand, 85.1, 95.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 30; + + switch ( Utility.Random( 6 ) ) + { + case 0: PackItem( new PlateArms() ); break; + case 1: PackItem( new PlateChest() ); break; + case 2: PackItem( new PlateGloves() ); break; + case 3: PackItem( new PlateGorget() ); break; + case 4: PackItem( new PlateLegs() ); break; + case 5: PackItem( new PlateHelm() ); break; + } + + PackItem( new Longsword() ); + PackItem( new Bone( Utility.RandomList(1,2,3,4) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public SkeletalKnight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/SkeletalMage.cs b/Scripts/Mobiles/Undead/SkeletalMage.cs new file mode 100644 index 0000000..e26f627 --- /dev/null +++ b/Scripts/Mobiles/Undead/SkeletalMage.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a skeletal corpse" )] + public class SkeletalMage : BaseCreature + { + [Constructable] + public SkeletalMage() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a skeletal mage"; + Body = Utility.RandomList ( 74, 332, 121 ); + BaseSoundID = 451; + Clan = Clan.Undead; + + SetStr( 76, 100 ); + SetDex( 56, 75 ); + SetInt( 186, 210 ); + + SetHits( 46, 60 ); + + SetDamage( 3, 7 ); + + SetSkill( SkillName.Concentration, 60.1, 70.0 ); + SetSkill( SkillName.Magery, 60.1, 70.0 ); + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 55.0 ); + + Fame = 3000; + Karma = -3000; + + VirtualArmor = 28; + PackReg( 3, 10 ); + PackItem( new Bone( Utility.RandomList(1,1,2,3) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.LowScrolls ); + AddLoot( LootPack.LowPotions ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public SkeletalMage( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Skeleton.cs b/Scripts/Mobiles/Undead/Skeleton.cs new file mode 100644 index 0000000..beee4c9 --- /dev/null +++ b/Scripts/Mobiles/Undead/Skeleton.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a skeletal corpse" )] + public class Skeleton : BaseCreature + { + [Constructable] + public Skeleton() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a skeleton"; + Body = Utility.RandomList( 50, 56 ); + BaseSoundID = 0x48D; + Clan = Clan.Undead; + + SetStr( 56, 80 ); + SetDex( 56, 75 ); + SetInt( 16, 40 ); + + SetHits( 34, 48 ); + + SetDamage( 3, 7 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 55.0 ); + + Fame = 450; + Karma = -450; + + VirtualArmor = 16; + + switch ( Utility.Random( 5 )) + { + case 0: PackItem( new BoneArms() ); break; + case 1: PackItem( new BoneChest() ); break; + case 2: PackItem( new BoneGloves() ); break; + case 3: PackItem( new BoneLegs() ); break; + case 4: PackItem( new BoneHelm() ); break; + } + + PackItem( new Bone( Utility.RandomList(1,1,1,2) ) ); + + if ( Body == 56 ) + PackItem( new BattleAxe() ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Skeleton( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Undead/SkeletonArcher.cs b/Scripts/Mobiles/Undead/SkeletonArcher.cs new file mode 100644 index 0000000..459ed91 --- /dev/null +++ b/Scripts/Mobiles/Undead/SkeletonArcher.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using Server.Misc; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a skeletal corpse" )] + public class SkeletonArcher : BaseCreature + { + [Constructable] + public SkeletonArcher() : base( AIType.AI_Archer, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a skeleton"; + Body = 250; + BaseSoundID = 0x48D; + Clan = Clan.Undead; + + SetStr( 56, 80 ); + SetDex( 56, 75 ); + SetInt( 16, 40 ); + + SetHits( 34, 48 ); + + SetDamage( 3, 7 ); + + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 55.0 ); + SetSkill( SkillName.Archery, 45.1, 55.0 ); + + Fame = 450; + Karma = -450; + + VirtualArmor = 16; + + switch ( Utility.Random( 5 )) + { + case 0: PackItem( new BoneArms() ); break; + case 1: PackItem( new BoneChest() ); break; + case 2: PackItem( new BoneGloves() ); break; + case 3: PackItem( new BoneLegs() ); break; + case 4: PackItem( new BoneHelm() ); break; + } + + PackItem( new Bone( Utility.RandomList(1,1,1,2) ) ); + PackItem( new Bow() ); + PackItem( new Arrow( Utility.RandomMinMax( 10, 30 ) ) ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Poor ); + } + + public override bool BleedImmune{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public SkeletonArcher( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Mobiles/Undead/Spectre.cs b/Scripts/Mobiles/Undead/Spectre.cs new file mode 100644 index 0000000..ac49a46 --- /dev/null +++ b/Scripts/Mobiles/Undead/Spectre.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a ghostly corpse" )] + public class Spectre : BaseCreature + { + [Constructable] + public Spectre() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a spectre"; + Body = 26; + Hue = 0x4001; + BaseSoundID = 0x482; + Clan = Clan.Undead; + + SetStr( 76, 100 ); + SetDex( 76, 95 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + + SetDamage( 7, 11 ); + + SetSkill( SkillName.Concentration, 55.1, 70.0 ); + SetSkill( SkillName.Magery, 55.1, 70.0 ); + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 55.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 28; + + PackReg( 10 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool BleedImmune{ get{ return true; } } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Spectre( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Vampire.cs b/Scripts/Mobiles/Undead/Vampire.cs new file mode 100644 index 0000000..b5d3787 --- /dev/null +++ b/Scripts/Mobiles/Undead/Vampire.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Misc; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a vampire corpse" )] + public class Vampire : BaseCreature + { + [Constructable] + public Vampire() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a vampire"; + Body = 298; + BaseSoundID = 0x47D; + Clan = Clan.Undead; + + SetStr( 81, 105 ); + SetDex( 91, 115 ); + SetInt( 96, 120 ); + + SetHits( 49, 63 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 75.1, 100.0 ); + SetSkill( SkillName.Magery, 75.1, 100.0 ); + SetSkill( SkillName.MagicResist, 75.0, 97.5 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 20.2, 60.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 16; + PackReg( 6 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.MedScrolls ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override int Meat{ get{ return 1; } } + + public Vampire( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/VampireLord.cs b/Scripts/Mobiles/Undead/VampireLord.cs new file mode 100644 index 0000000..7e35cb3 --- /dev/null +++ b/Scripts/Mobiles/Undead/VampireLord.cs @@ -0,0 +1,68 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a vampire corpse" )] + public class VampireLord : BaseCreature + { + [Constructable] + public VampireLord() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "vampire" ); + Title = "the vampire lord"; + Body = 34; + BaseSoundID = 0x47D; + Clan = Clan.Undead; + + SetStr( 81, 105 ); + SetDex( 191, 215 ); + SetInt( 126, 150 ); + + SetHits( 49, 63 ); + + SetDamage( 5, 10 ); + + SetSkill( SkillName.Concentration, 80.2, 100.0 ); + SetSkill( SkillName.Magery, 95.1, 100.0 ); + SetSkill( SkillName.Meditation, 27.5, 50.0 ); + SetSkill( SkillName.MagicResist, 77.5, 100.0 ); + SetSkill( SkillName.Tactics, 65.0, 87.5 ); + SetSkill( SkillName.HandToHand, 20.3, 80.0 ); + + Fame = 10500; + Karma = -10500; + + VirtualArmor = 16; + PackReg( 23 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Average ); + AddLoot( LootPack.Meager ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool CanRummageCorpses{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override int Meat{ get{ return 1; } } + + public VampireLord( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/VampiricDragon.cs b/Scripts/Mobiles/Undead/VampiricDragon.cs new file mode 100644 index 0000000..fc8353f --- /dev/null +++ b/Scripts/Mobiles/Undead/VampiricDragon.cs @@ -0,0 +1,79 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dragon corpse" )] + public class VampiricDragon : BaseCreature + { + [Constructable] + public VampiricDragon() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = NameList.RandomName( "dragon" ); + Title = "the vampiric wyrm"; + Body = 336; + BaseSoundID = 362; + Clan = Clan.Undead; + + SetStr( 796, 825 ); + SetDex( 86, 105 ); + SetInt( 436, 475 ); + + SetHits( 478, 495 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.Concentration, 30.1, 40.0 ); + SetSkill( SkillName.Magery, 30.1, 40.0 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Gems, 8 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override int GetIdleSound() + { + return 0x2D5; + } + + public override int GetHurtSound() + { + return 0x2D1; + } + + public override bool ReacquireOnMovement{ get{ return true; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override bool AutoDispel{ get{ return true; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public override int Hides{ get{ return 20; } } + + public VampiricDragon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/VampiricDrake.cs b/Scripts/Mobiles/Undead/VampiricDrake.cs new file mode 100644 index 0000000..5009698 --- /dev/null +++ b/Scripts/Mobiles/Undead/VampiricDrake.cs @@ -0,0 +1,66 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a drake corpse" )] + public class VampiricDrake : BaseCreature + { + [Constructable] + public VampiricDrake () : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a vampiric drake"; + Body = 337; + BaseSoundID = 362; + Clan = Clan.Undead; + + SetStr( 401, 430 ); + SetDex( 133, 152 ); + SetInt( 336, 375 ); + + SetHits( 241, 258 ); + + SetDamage( 11, 17 ); + + SetSkill( SkillName.Tactics, 65.1, 90.0 ); + SetSkill( SkillName.HandToHand, 65.1, 80.0 ); + SetSkill( SkillName.Concentration, 30.1, 40.0 ); + SetSkill( SkillName.Magery, 30.1, 40.0 ); + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + + Fame = 7500; + Karma = -7500; + + VirtualArmor = 46; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Rich, 2 ); + AddLoot( LootPack.MedScrolls, 2 ); + } + + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override bool AutoDispel{ get{ return !Controlled; } } + public override int Hides{ get{ return 20; } } + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public VampiricDrake( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Wight.cs b/Scripts/Mobiles/Undead/Wight.cs new file mode 100644 index 0000000..cffba73 --- /dev/null +++ b/Scripts/Mobiles/Undead/Wight.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a ghastly corpse" )] + public class Wight : BaseCreature + { + [Constructable] + public Wight() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a wight"; + Body = 152; + BaseSoundID = 471; + Clan = Clan.Undead; + + SetStr( 76, 100 ); + SetDex( 76, 95 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + SetMana( 0 ); + + SetDamage( 7, 9 ); + + SetSkill( SkillName.Poisoning, 45.1, 60.0 ); + SetSkill( SkillName.MagicResist, 45.1, 60.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 55.0 ); + + Fame = 2500; + Karma = -2500; + + VirtualArmor = 28; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Lesser; } } + + public void DrainBrain( Mobile m ) + { + if ( m.Mana > 0 ) + { + DoHarmful( m ); + m.SendMessage( "The creature's touch drains your mind!" ); + int toDrain = Utility.RandomMinMax( 2, 10 ); + m.PlaySound( 0x181 ); + Mana += toDrain; + m.Mana -= toDrain; + } + } + + public override void OnGaveMeleeAttack( Mobile defender ) + { + base.OnGaveMeleeAttack( defender ); + DrainBrain( defender ); + } + + public override void OnGotMeleeAttack( Mobile attacker ) + { + base.OnGotMeleeAttack( attacker ); + DrainBrain( attacker ); + } + + public Wight( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Wraith.cs b/Scripts/Mobiles/Undead/Wraith.cs new file mode 100644 index 0000000..4095a36 --- /dev/null +++ b/Scripts/Mobiles/Undead/Wraith.cs @@ -0,0 +1,65 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a ghostly corpse" )] + public class Wraith : BaseCreature + { + [Constructable] + public Wraith() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a wraith"; + Body = 26; + BaseSoundID = 0x482; + Clan = Clan.Undead; + + SetStr( 76, 100 ); + SetDex( 76, 95 ); + SetInt( 36, 60 ); + + SetHits( 46, 60 ); + + SetDamage( 7, 11 ); + + SetSkill( SkillName.Concentration, 55.1, 70.0 ); + SetSkill( SkillName.Magery, 55.1, 70.0 ); + SetSkill( SkillName.MagicResist, 55.1, 70.0 ); + SetSkill( SkillName.Tactics, 45.1, 60.0 ); + SetSkill( SkillName.HandToHand, 45.1, 55.0 ); + + Fame = 4000; + Karma = -4000; + + VirtualArmor = 28; + + PackReg( 10 ); + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override bool BleedImmune{ get{ return true; } } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Wraith( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/Zombie.cs b/Scripts/Mobiles/Undead/Zombie.cs new file mode 100644 index 0000000..4492e07 --- /dev/null +++ b/Scripts/Mobiles/Undead/Zombie.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; + +namespace Server.Mobiles +{ + [CorpseName( "a rotting corpse" )] + public class Zombie : BaseCreature + { + [Constructable] + public Zombie() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a zombie"; + Body = Utility.RandomList( 3, 94 ); + BaseSoundID = 471; + Clan = Clan.Undead; + + SetStr( 46, 70 ); + SetDex( 31, 50 ); + SetInt( 26, 40 ); + + SetHits( 28, 42 ); + + SetDamage( 3, 7 ); + + SetSkill( SkillName.MagicResist, 15.1, 40.0 ); + SetSkill( SkillName.Tactics, 35.1, 50.0 ); + SetSkill( SkillName.HandToHand, 35.1, 50.0 ); + + Fame = 600; + Karma = -600; + + VirtualArmor = 18; + + switch ( Utility.Random( 10 )) + { + case 0: PackItem( new LeftArm() ); break; + case 1: PackItem( new RightArm() ); break; + case 2: PackItem( new Torso() ); break; + case 3: PackItem( new Bone() ); break; + case 4: PackItem( new RibCage() ); break; + case 5: PackItem( new RibCage() ); break; + case 6: PackItem( new BonePile() ); break; + case 7: PackItem( new BonePile() ); break; + case 8: PackItem( new BonePile() ); break; + case 9: PackItem( new BonePile() ); break; + } + } + + public override void GenerateLoot() + { + AddLoot( LootPack.Meager ); + } + + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + + public Zombie( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Mobiles/Undead/ZombieDragon.cs b/Scripts/Mobiles/Undead/ZombieDragon.cs new file mode 100644 index 0000000..c8e16a8 --- /dev/null +++ b/Scripts/Mobiles/Undead/ZombieDragon.cs @@ -0,0 +1,63 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Mobiles +{ + [CorpseName( "a dragon corpse" )] + public class ZombieDragon : BaseCreature + { + [Constructable] + public ZombieDragon () : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 ) + { + Name = "a rotting dragon"; + Body = Utility.RandomList( 334, 334, 334, 358 ); + BaseSoundID = 362; + Clan = Clan.Undead; + + SetStr( 796, 825 ); + SetDex( 86, 105 ); + SetInt( 136, 175 ); + + SetHits( 478, 495 ); + + SetDamage( 16, 22 ); + + SetSkill( SkillName.MagicResist, 99.1, 100.0 ); + SetSkill( SkillName.Tactics, 97.6, 100.0 ); + SetSkill( SkillName.HandToHand, 90.1, 92.5 ); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 60; + } + + public override void GenerateLoot() + { + AddLoot( LootPack.FilthyRich, 2 ); + AddLoot( LootPack.Gems, 8 ); + } + + public override bool ReacquireOnMovement{ get{ return !Controlled; } } + public override bool HasBreath{ get{ return true; } } // fire breath enabled + public override Poison PoisonImmune{ get{ return Poison.Lethal; } } + public override Poison HitPoison{ get{ return Poison.Greater; } } + + public ZombieDragon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/BaseHouse.cs b/Scripts/Multis/BaseHouse.cs new file mode 100644 index 0000000..421be04 --- /dev/null +++ b/Scripts/Multis/BaseHouse.cs @@ -0,0 +1,3865 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Multis.Deeds; +using Server.Regions; +using Server.Network; +using Server.Targeting; +using Server.Accounting; +using Server.ContextMenus; +using Server.Gumps; +using Server.Guilds; + +namespace Server.Multis +{ + public abstract class BaseHouse : BaseMulti + { + public static bool NewVendorSystem{ get{ return true; } } // Is new player vendor system enabled? + + public const int MaxCoOwners = 15; + public static int MaxFriends { get { return 50; } } + public static int MaxBans { get { return 50; } } + + public readonly static bool DecayEnabled = Server.Misc.Settings.HouseTimer(); + + public static void Decay_OnTick() + { + for ( int i = 0; i < m_AllHouses.Count; ++i ) + m_AllHouses[i].CheckDecay(); + } + + private DateTime m_LastRefreshed; + private bool m_RestrictDecay; + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime LastRefreshed + { + get{ return m_LastRefreshed; } + set{ m_LastRefreshed = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool RestrictDecay + { + get{ return m_RestrictDecay; } + set{ m_RestrictDecay = value; } + } + + public virtual TimeSpan DecayPeriod{ get{ return TimeSpan.FromDays( Server.Misc.Settings.HouseDelete() ); } } + + public virtual DecayType DecayType + { + get + { + if ( m_RestrictDecay || !DecayEnabled || DecayPeriod == TimeSpan.Zero ) + return DecayType.Ageless; + + if ( m_Owner == null ) + return DecayType.ManualRefresh; + + Account acct = m_Owner.Account as Account; + + if ( acct == null ) + return DecayType.ManualRefresh; + + if ( acct.AccessLevel >= AccessLevel.GameMaster ) + return DecayType.Ageless; + + for ( int i = 0; i < acct.Length; ++i ) + { + Mobile mob = acct[i]; + + if ( mob != null && mob.AccessLevel >= AccessLevel.GameMaster ) + return DecayType.Ageless; + } + + return DecayType.ManualRefresh; + } + } + + public bool IsNewer( BaseHouse check, BaseHouse house ) + { + DateTime checkTime = ( check.LastTraded > check.BuiltOn ? check.LastTraded : check.BuiltOn ); + DateTime houseTime = ( house.LastTraded > house.BuiltOn ? house.LastTraded : house.BuiltOn ); + + return ( checkTime > houseTime ); + } + + public virtual bool CanDecay + { + get + { + DecayType type = this.DecayType; + + return ( type == DecayType.Condemned || type == DecayType.ManualRefresh ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual DecayLevel DecayLevel + { + get + { + if ( !CanDecay ) + { + m_LastRefreshed = DateTime.Now; + return DecayLevel.Ageless; + } + + TimeSpan timeAfterRefresh = DateTime.Now - m_LastRefreshed; + int percent = (int) ((timeAfterRefresh.Ticks * 1000) / DecayPeriod.Ticks); + + if ( percent >= 1000 ) // 100.0% + return ( HasRentedVendors || VendorInventories.Count > 0 ) ? DecayLevel.DemolitionPending : DecayLevel.Collapsed; + else if ( percent >= 950 ) // 95.0% - 99.9% + return DecayLevel.IDOC; + else if ( percent >= 750 ) // 75.0% - 94.9% + return DecayLevel.Greatly; + else if ( percent >= 500 ) // 50.0% - 74.9% + return DecayLevel.Fairly; + else if ( percent >= 250 ) // 25.0% - 49.9% + return DecayLevel.Somewhat; + else if ( percent >= 005 ) // 00.5% - 24.9% + return DecayLevel.Slightly; + + return DecayLevel.LikeNew; + } + } + + public virtual bool RefreshDecay() + { + if ( DecayType == DecayType.Condemned ) + return false; + + DecayLevel oldLevel = this.DecayLevel; + + m_LastRefreshed = DateTime.Now; + + return ( oldLevel > DecayLevel.LikeNew ); + } + + public virtual bool CheckDecay() + { + if ( !Deleted && this.DecayLevel == DecayLevel.Collapsed ) + { + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( Decay_Sandbox ) ); + return true; + } + + return false; + } + + public virtual void KillVendors() + { + ArrayList list = new ArrayList( PlayerVendors ); + + foreach ( PlayerVendor vendor in list ) + vendor.Destroy( true ); + + list = new ArrayList( PlayerBarkeepers ); + + foreach ( PlayerBarkeeper barkeeper in list ) + barkeeper.Delete(); + } + + public virtual void Decay_Sandbox() + { + if ( Deleted ) + return; + + KillVendors(); + Delete(); + } + + public virtual TimeSpan RestrictedPlacingTime { get { return TimeSpan.FromHours( 1.0 ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual double BonusStorageScalar { get { return 1.0; } } + + private bool m_Public; + + private HouseRegion m_Region; + private HouseSign m_Sign; + private TrashBarrel m_Trash; + private ArrayList m_Doors; + + private Mobile m_Owner; + + private ArrayList m_Access; + private ArrayList m_Bans; + private ArrayList m_CoOwners; + private ArrayList m_Friends; + + private ArrayList m_PlayerVendors = new ArrayList(); + private ArrayList m_PlayerBarkeepers = new ArrayList(); + + private ArrayList m_LockDowns; + private ArrayList m_VendorRentalContracts; + private ArrayList m_Secures; + + private ArrayList m_Addons; + + private ArrayList m_VendorInventories = new ArrayList(); + private ArrayList m_RelocatedEntities = new ArrayList(); + + private MovingCrate m_MovingCrate; + private ArrayList m_InternalizedVendors; + + private int m_MaxLockDowns; + private int m_MaxSecures; + private int m_Price; + + private int m_Visits; + + private DateTime m_BuiltOn, m_LastTraded; + + private Point3D m_RelativeBanLocation; + + private static Dictionary> m_Table = new Dictionary>(); + + public virtual bool IsAosRules{ get{ return Core.AOS; } } + + public virtual bool IsActive{ get{ return true; } } + + public virtual HousePlacementEntry GetAosEntry() + { + return HousePlacementEntry.Find( this ); + } + + public virtual int GetAosMaxSecures() + { + HousePlacementEntry hpe = GetAosEntry(); + + if ( hpe == null ) + return 0; + + return (int)(hpe.Storage * BonusStorageScalar); + } + + public virtual int GetAosMaxLockdowns() + { + HousePlacementEntry hpe = GetAosEntry(); + + if ( hpe == null ) + return 0; + + return (int)(hpe.Lockdowns * BonusStorageScalar); + } + + public virtual int GetAosCurSecures( out int fromSecures, out int fromVendors, out int fromLockdowns, out int fromMovingCrate ) + { + fromSecures = 0; + fromVendors = 0; + fromLockdowns = 0; + fromMovingCrate = 0; + + ArrayList list = m_Secures; + + if ( list != null ) + { + for ( int i = 0; i < list.Count; ++i ) + { + SecureInfo si = (SecureInfo)list[i]; + + fromSecures += si.Item.TotalItems; + } + + fromLockdowns += list.Count; + } + + + fromLockdowns += GetLockdowns(); + + if ( !NewVendorSystem ) + { + foreach ( PlayerVendor vendor in PlayerVendors ) + { + if ( vendor.Backpack != null ) + { + fromVendors += vendor.Backpack.TotalItems; + } + } + } + + if ( MovingCrate != null ) + { + fromMovingCrate += MovingCrate.TotalItems; + + foreach ( Item item in MovingCrate.Items ) + { + if ( item is PackingBox ) + fromMovingCrate--; + } + } + + return fromSecures + fromVendors + fromLockdowns + fromMovingCrate; + } + + public bool InRange( IPoint2D from, int range ) + { + if ( Region == null ) + return false; + + foreach ( Rectangle3D rect in Region.Area ) + { + if ( from.X >= rect.Start.X - range && from.Y >= rect.Start.Y - range && from.X < rect.End.X + range && from.Y < rect.End.Y + range ) + return true; + } + + return false; + } + + public virtual int GetNewVendorSystemMaxVendors() + { + HousePlacementEntry hpe = GetAosEntry(); + + if ( hpe == null ) + return 0; + + return (int)(hpe.Vendors * BonusStorageScalar); + } + + public virtual bool CanPlaceNewVendor() + { + if ( !IsAosRules ) + return true; + + if ( !NewVendorSystem ) + return CheckAosLockdowns( 10 ); + + return ( (PlayerVendors.Count + VendorRentalContracts.Count) < GetNewVendorSystemMaxVendors() ); + } + + public const int MaximumBarkeepCount = 2; + + public virtual bool CanPlaceNewBarkeep() + { + return ( PlayerBarkeepers.Count < MaximumBarkeepCount ); + } + + public static void IsThereVendor( Point3D location, Map map, out bool vendor, out bool rentalContract ) + { + vendor = false; + rentalContract = false; + + IPooledEnumerable eable = map.GetObjectsInRange( location, 0 ); + + foreach ( IEntity entity in eable ) + { + if ( Math.Abs( location.Z - entity.Z ) <= 16 ) + { + if ( entity is PlayerVendor || entity is PlayerBarkeeper || entity is PlayerVendorPlaceholder ) + { + vendor = true; + break; + } + + if ( entity is VendorRentalContract ) + { + rentalContract = true; + break; + } + } + } + + eable.Free(); + } + + public bool HasPersonalVendors + { + get + { + foreach ( PlayerVendor vendor in PlayerVendors ) + { + if ( !(vendor is RentedVendor) ) + return true; + } + + return false; + } + } + + public bool HasRentedVendors + { + get + { + foreach ( PlayerVendor vendor in PlayerVendors ) + { + if ( vendor is RentedVendor ) + return true; + } + + return false; + } + } + + public ArrayList AvailableVendorsFor( Mobile m ) + { + ArrayList list = new ArrayList(); + + foreach ( PlayerVendor vendor in PlayerVendors ) + { + if ( vendor.CanInteractWith( m, false ) ) + list.Add( vendor ); + } + + return list; + } + + public bool AreThereAvailableVendorsFor( Mobile m ) + { + foreach ( PlayerVendor vendor in PlayerVendors ) + { + if ( vendor.CanInteractWith( m, false ) ) + return true; + } + + return false; + } + + public void MoveAllToCrate() + { + RelocatedEntities.Clear(); + + if ( MovingCrate != null ) + MovingCrate.Hide(); + + if ( m_Trash != null ) + { + m_Trash.Delete(); + m_Trash = null; + } + + foreach ( Item item in LockDowns ) + { + if ( !item.Deleted ) + { + item.IsLockedDown = false; + item.IsSecure = false; + item.Movable = true; + + if ( item.Parent == null ) + DropToMovingCrate( item ); + } + } + + LockDowns.Clear(); + + foreach ( Item item in VendorRentalContracts ) + { + if ( !item.Deleted ) + { + item.IsLockedDown = false; + item.IsSecure = false; + item.Movable = true; + + if ( item.Parent == null ) + DropToMovingCrate( item ); + } + } + + VendorRentalContracts.Clear(); + + foreach ( SecureInfo info in Secures ) + { + Item item = info.Item; + + if ( !item.Deleted ) + { + if ( item is StrongBox ) + item = ((StrongBox)item).ConvertToStandardContainer(); + + item.IsLockedDown = false; + item.IsSecure = false; + item.Movable = true; + + if ( item.Parent == null ) + DropToMovingCrate( item ); + } + } + + Secures.Clear(); + + foreach ( Item addon in Addons ) + { + if ( !addon.Deleted ) + { + Item deed = null; + bool retainDeedHue = false; //if the items aren't hued but the deed itself is + int hue = 0; + + if( addon is IAddon ) + { + deed = ((IAddon)addon).Deed; + + if( addon is BaseAddon && ((BaseAddon)addon).RetainDeedHue) //There are things that are IAddon which aren't BaseAddon + { + BaseAddon ba = (BaseAddon)addon; + retainDeedHue = true; + + for( int i = 0; hue == 0 && i < ba.Components.Count; ++i ) + { + AddonComponent c = ba.Components[i]; + + if( c.Hue != 0 ) + hue = c.Hue; + } + } + } + + if ( deed != null ) + { + addon.Delete(); + + if( retainDeedHue ) + deed.Hue = hue; + + DropToMovingCrate( deed ); + } + else + { + DropToMovingCrate( addon ); + } + } + } + + Addons.Clear(); + + foreach ( PlayerVendor mobile in PlayerVendors ) + { + mobile.Return(); + mobile.Internalize(); + InternalizedVendors.Add( mobile ); + } + + foreach ( Mobile mobile in PlayerBarkeepers ) + { + mobile.Internalize(); + InternalizedVendors.Add( mobile ); + } + } + + public List GetHouseEntities() + { + List list = new List(); + + if ( MovingCrate != null ) + MovingCrate.Hide(); + + if ( m_Trash != null && m_Trash.Map != Map.Internal ) + list.Add( m_Trash ); + + foreach ( Item item in LockDowns ) + { + if ( item.Parent == null && item.Map != Map.Internal ) + list.Add( item ); + } + + foreach ( Item item in VendorRentalContracts ) + { + if ( item.Parent == null && item.Map != Map.Internal ) + list.Add( item ); + } + + foreach ( SecureInfo info in Secures ) + { + Item item = info.Item; + + if ( item.Parent == null && item.Map != Map.Internal ) + list.Add( item ); + } + + foreach ( Item item in Addons ) + { + if ( item.Parent == null && item.Map != Map.Internal ) + list.Add( item ); + } + + foreach ( PlayerVendor mobile in PlayerVendors ) + { + mobile.Return(); + + if ( mobile.Map != Map.Internal ) + list.Add( mobile ); + } + + foreach ( Mobile mobile in PlayerBarkeepers ) + { + if ( mobile.Map != Map.Internal ) + list.Add( mobile ); + } + + return list; + } + + public void RelocateEntities() + { + foreach ( IEntity entity in GetHouseEntities() ) + { + Point3D relLoc = new Point3D( entity.X - this.X, entity.Y - this.Y, entity.Z - this.Z ); + RelocatedEntity relocEntity = new RelocatedEntity( entity, relLoc ); + + RelocatedEntities.Add( relocEntity ); + + if ( entity is Item ) + ((Item)entity).Internalize(); + else + ((Mobile)entity).Internalize(); + } + } + + public void RestoreRelocatedEntities() + { + foreach ( RelocatedEntity relocEntity in RelocatedEntities ) + { + Point3D relLoc = relocEntity.RelativeLocation; + Point3D location = new Point3D( relLoc.X + this.X, relLoc.Y + this.Y, relLoc.Z + this.Z ); + + IEntity entity = relocEntity.Entity; + if ( entity is Item ) + { + Item item = (Item) entity; + + if ( !item.Deleted ) + { + if ( item is IAddon ) + { + if ( ((IAddon)item).CouldFit( location, this.Map ) ) + { + item.MoveToWorld( location, this.Map ); + continue; + } + } + else + { + int height; + bool requireSurface; + if ( item is VendorRentalContract ) + { + height = 16; + requireSurface = true; + } + else + { + height = item.ItemData.Height; + requireSurface = false; + } + + if ( this.Map.CanFit( location.X, location.Y, location.Z, height, false, false, requireSurface ) ) + { + item.MoveToWorld( location, this.Map ); + continue; + } + } + + // The item can't fit + + if ( item is TrashBarrel ) + { + item.Delete(); // Trash barrels don't go to the moving crate + } + else + { + SetLockdown( item, false ); + item.IsSecure = false; + item.Movable = true; + + Item relocateItem = item; + + if ( item is StrongBox ) + relocateItem = ((StrongBox)item).ConvertToStandardContainer(); + + if( item is IAddon ) + { + Item deed = ((IAddon)item).Deed; + bool retainDeedHue = false; //if the items aren't hued but the deed itself is + int hue = 0; + + if( item is BaseAddon && ((BaseAddon)item).RetainDeedHue ) //There are things that are IAddon which aren't BaseAddon + { + BaseAddon ba = (BaseAddon)item; + retainDeedHue = true; + + for( int i = 0; hue == 0 && i < ba.Components.Count; ++i ) + { + AddonComponent c = ba.Components[i]; + + if( c.Hue != 0 ) + hue = c.Hue; + } + } + + if( deed != null && retainDeedHue ) + deed.Hue = hue; + + relocateItem = deed; + item.Delete(); + } + + if ( relocateItem != null ) + DropToMovingCrate( relocateItem ); + } + } + + if ( m_Trash == item ) + m_Trash = null; + + LockDowns.Remove( item ); + VendorRentalContracts.Remove( item ); + Addons.Remove( item ); + for ( int i = Secures.Count - 1; i >= 0; i-- ) + { + if ( ((SecureInfo)Secures[i]).Item == item ) + Secures.RemoveAt( i ); + } + } + else + { + Mobile mobile = (Mobile) entity; + + if ( !mobile.Deleted ) + { + if ( this.Map.CanFit( location, 16, false, false ) ) + { + mobile.MoveToWorld( location, this.Map ); + } + else + { + InternalizedVendors.Add( mobile ); + } + } + } + } + + RelocatedEntities.Clear(); + } + + public void DropToMovingCrate( Item item ) + { + if ( MovingCrate == null ) + MovingCrate = new MovingCrate( this ); + + MovingCrate.DropItem( item ); + } + + public List GetItems() + { + if( this.Map == null || this.Map == Map.Internal ) + return new List(); + + Point2D start = new Point2D( this.X + Components.Min.X, this.Y + Components.Min.Y ); + Point2D end = new Point2D( this.X + Components.Max.X + 1, this.Y + Components.Max.Y + 1 ); + Rectangle2D rect = new Rectangle2D( start, end ); + + List list = new List(); + + IPooledEnumerable eable = this.Map.GetItemsInBounds( rect ); + + foreach ( Item item in eable ) + if ( item.Movable && IsInside( item ) ) + list.Add( item ); + + eable.Free(); + + return list; + } + + public List GetMobiles() + { + if( this.Map == null || this.Map == Map.Internal ) + return new List(); + + List list = new List(); + + foreach ( Mobile mobile in Region.GetMobiles() ) + if ( IsInside( mobile ) ) + list.Add( mobile ); + + return list; + } + + public virtual bool CheckAosLockdowns( int need ) + { + return ( (GetAosCurLockdowns() + need) <= GetAosMaxLockdowns() ); + } + + public virtual bool CheckAosStorage( int need ) + { + int fromSecures, fromVendors, fromLockdowns, fromMovingCrate; + + return ( (GetAosCurSecures( out fromSecures, out fromVendors, out fromLockdowns, out fromMovingCrate ) + need) <= GetAosMaxSecures() ); + } + + public static void Configure() + { + Item.LockedDownFlag = 1; + Item.SecureFlag = 2; + + Timer.DelayCall( TimeSpan.FromMinutes( 1.0 ), TimeSpan.FromMinutes( 1.0 ), new TimerCallback( Decay_OnTick ) ); + } + + public virtual int GetAosCurLockdowns() + { + int v = 0; + + v += GetLockdowns(); + + if ( m_Secures != null ) + v += m_Secures.Count; + + if ( !NewVendorSystem ) + v += PlayerVendors.Count * 10; + + return v; + } + + public static bool CheckLockedDown( Item item ) + { + BaseHouse house = FindHouseAt( item ); + + return ( house != null && house.IsLockedDown( item ) ); + } + + public static bool CheckSecured( Item item ) + { + BaseHouse house = FindHouseAt( item ); + + return ( house != null && house.IsSecure( item ) ); + } + + public static bool CheckLockedDownOrSecured( Item item ) + { + BaseHouse house = FindHouseAt( item ); + + return ( house != null && (house.IsSecure( item ) || house.IsLockedDown( item )) ); + } + + public static List GetHouses( Mobile m ) + { + List list = new List(); + + if ( m != null ) + { + List exists = null; + m_Table.TryGetValue( m, out exists ); + + if ( exists != null ) + { + for ( int i = 0; i < exists.Count; ++i ) + { + BaseHouse house = exists[i]; + + if ( house != null && !house.Deleted && house.Owner == m ) + list.Add( house ); + } + } + } + + return list; + } + + public static bool CheckHold( Mobile m, Container cont, Item item, bool message, bool checkItems, int plusItems, int plusWeight ) + { + BaseHouse house = FindHouseAt( cont ); + + if ( house == null || !house.IsAosRules ) + return true; + + if ( house.IsSecure( cont ) && !house.CheckAosStorage( 1 + item.TotalItems + plusItems ) ) + { + if ( message ) + m.SendLocalizedMessage( 1061839 ); // This action would exceed the secure storage limit of the house. + + return false; + } + + return true; + } + + public static bool CheckAccessible( Mobile m, Item item ) + { + if ( m.AccessLevel >= AccessLevel.GameMaster ) + return true; // Staff can access anything + + BaseHouse house = FindHouseAt( item ); + + if ( house == null ) + return true; + + SecureAccessResult res = house.CheckSecureAccess( m, item ); + + switch ( res ) + { + case SecureAccessResult.Insecure: break; + case SecureAccessResult.Accessible: return true; + case SecureAccessResult.Inaccessible: return false; + } + + if ( house.IsLockedDown( item ) ) + return house.IsCoOwner( m ) && (item is Container); + + return true; + } + + public static BaseHouse FindHouseAt( Mobile m ) + { + if ( m == null || m.Deleted ) + return null; + + return FindHouseAt( m.Location, m.Map, 16 ); + } + + public static BaseHouse FindHouseAt( Item item ) + { + if ( item == null || item.Deleted ) + return null; + + return FindHouseAt( item.GetWorldLocation(), item.Map, item.ItemData.Height ); + } + + public static BaseHouse FindHouseAt( Point3D loc, Map map, int height ) + { + if ( map == null || map == Map.Internal ) + return null; + + Sector sector = map.GetSector( loc ); + + for ( int i = 0; i < sector.Multis.Count; ++i ) + { + BaseHouse house = sector.Multis[i] as BaseHouse; + + if ( house != null && house.IsInside( loc, height ) ) + return house; + } + + return null; + } + + public bool IsInside( Mobile m ) + { + if ( m == null || m.Deleted || m.Map != this.Map ) + return false; + + return IsInside( m.Location, 16 ); + } + + public bool IsInside( Item item ) + { + if ( item == null || item.Deleted || item.Map != this.Map ) + return false; + + return IsInside( item.Location, item.ItemData.Height ); + } + + public bool CheckAccessibility( Item item, Mobile from ) + { + SecureAccessResult res = CheckSecureAccess( from, item ); + + switch ( res ) + { + case SecureAccessResult.Insecure: break; + case SecureAccessResult.Accessible: return true; + case SecureAccessResult.Inaccessible: return false; + } + + if ( !IsLockedDown( item ) ) + return true; + else if ( from.AccessLevel >= AccessLevel.GameMaster ) + return true; + else if ( item is ISecurable ) + return HasSecureAccess( from, ((ISecurable)item).Level ); + else if ( item is Container ) + return IsCoOwner( from ); + else if ( item.Stackable ) + return true; + else if ( item is BaseLight ) + return IsFriend( from ); + else if ( item is PotionKeg ) + return IsFriend( from ); + else if ( item is BaseBoard ) + return true; + else if ( item is Dices ) + return true; + else if ( item is MagicRune ) + return true; + else if ( item is TreasureMap ) + return true; + else if ( item is Clock ) + return true; + else if ( item is BaseInstrument ) + return true; + else if ( item is Dyes || item is DyeTub ) + return true; + else if ( item is VendorRentalContract ) + return true; + + return false; + } + + public virtual bool IsInside( Point3D p, int height ) + { + if ( Deleted ) + return false; + + MultiComponentList mcl = Components; + + int x = p.X - (X + mcl.Min.X); + int y = p.Y - (Y + mcl.Min.Y); + + if ( x < 0 || x >= mcl.Width || y < 0 || y >= mcl.Height ) + return false; + + if ( this is HouseFoundation && y < (mcl.Height-1) && p.Z >= this.Z ) + return true; + + StaticTile[] tiles = mcl.Tiles[x][y]; + + for ( int j = 0; j < tiles.Length; ++j ) + { + StaticTile tile = tiles[j]; + int id = tile.ID & TileData.MaxItemValue; + ItemData data = TileData.ItemTable[id]; + + // Slanted roofs do not count; they overhang blocking south and east sides of the multi + if ( (data.Flags & TileFlag.Roof) != 0 ) + continue; + + // Signs and signposts are not considered part of the multi + if ( (id >= 0xB95 && id <= 0xC0E) || (id >= 0xC43 && id <= 0xC44) ) + continue; + + int tileZ = tile.Z + this.Z; + + if ( p.Z == tileZ || (p.Z + height) > tileZ ) + return true; + } + + return false; + } + + public SecureAccessResult CheckSecureAccess( Mobile m, Item item ) + { + if ( m_Secures == null || !(item is Container) ) + return SecureAccessResult.Insecure; + + for ( int i = 0; i < m_Secures.Count; ++i ) + { + SecureInfo info = (SecureInfo)m_Secures[i]; + + if ( info.Item == item ) + return HasSecureAccess( m, info.Level ) ? SecureAccessResult.Accessible : SecureAccessResult.Inaccessible; + } + + return SecureAccessResult.Insecure; + } + + private static List m_AllHouses = new List(); + + public BaseHouse( int multiID, Mobile owner, int MaxLockDown, int MaxSecure ) : base( multiID ) + { + m_AllHouses.Add( this ); + + m_LastRefreshed = DateTime.Now; + + m_BuiltOn = DateTime.Now; + m_LastTraded = DateTime.MinValue; + + m_Doors = new ArrayList(); + m_LockDowns = new ArrayList(); + m_Secures = new ArrayList(); + m_Addons = new ArrayList(); + + m_CoOwners = new ArrayList(); + m_Friends = new ArrayList(); + m_Bans = new ArrayList(); + m_Access = new ArrayList(); + + m_VendorRentalContracts = new ArrayList(); + m_InternalizedVendors = new ArrayList(); + + m_Owner = owner; + + m_MaxLockDowns = MaxLockDown; + m_MaxSecures = MaxSecure; + + m_RelativeBanLocation = this.BaseBanLocation; + + UpdateRegion(); + + if ( owner != null ) + { + List list = null; + m_Table.TryGetValue( owner, out list ); + + if ( list == null ) + m_Table[owner] = list = new List(); + + list.Add( this ); + } + + Movable = false; + } + + public BaseHouse( Serial serial ) : base( serial ) + { + m_AllHouses.Add( this ); + } + + public override void OnMapChange() + { + if ( m_LockDowns == null ) + return; + + UpdateRegion(); + + if ( m_Sign != null && !m_Sign.Deleted ) + m_Sign.Map = this.Map; + + if ( m_Doors != null ) + { + foreach ( Item item in m_Doors ) + item.Map = this.Map; + } + + foreach ( IEntity entity in GetHouseEntities() ) + { + if ( entity is Item ) + ((Item)entity).Map = this.Map; + else + ((Mobile)entity).Map = this.Map; + } + } + + public virtual void ChangeSignType( int itemID ) + { + if ( m_Sign != null ) + { + if ( IsSouthFacingSight( m_Sign.ItemID ) ){ FlipSignType( itemID ); } + else { m_Sign.ItemID = itemID; } + } + } + + public static bool IsSouthFacingSight( int itemID ) + { + if ( itemID == 2979 || itemID == 2981 || itemID == 2983 || itemID == 2985 || itemID == 2987 || itemID == 2989 || + itemID == 2991 || itemID == 2993 || itemID == 2995 || itemID == 2997 || itemID == 2999 || itemID == 3001 || + itemID == 3003 || itemID == 3005 || itemID == 3007 || itemID == 3009 || itemID == 3011 || itemID == 3013 || + itemID == 3015 || itemID == 3017 || itemID == 3019 || itemID == 3021 || itemID == 3023 || itemID == 3025 || + itemID == 3027 || itemID == 3029 || itemID == 3031 || itemID == 3033 || itemID == 3035 || itemID == 3037 || + itemID == 3039 || itemID == 3041 || itemID == 3043 || itemID == 3045 || itemID == 3047 || itemID == 3049 || + itemID == 3051 || itemID == 3053 || itemID == 3055 || itemID == 3057 || itemID == 3059 || itemID == 3061 || + itemID == 3063 || itemID == 3065 || itemID == 3067 || itemID == 3069 || itemID == 3071 || itemID == 3073 || + itemID == 3075 || itemID == 3077 || itemID == 3079 || itemID == 3081 || itemID == 3083 || itemID == 3085 || + itemID == 2965 || itemID == 3139 || itemID == 2812 ){ return true; } + + return false; + } + + public virtual void FlipSignType( int itemID ) + { + if ( itemID == 2980 ){ itemID = 2979; } + else if ( itemID == 2982 ){ itemID = 2981; } + else if ( itemID == 2984 ){ itemID = 2983; } + else if ( itemID == 2986 ){ itemID = 2985; } + else if ( itemID == 2988 ){ itemID = 2987; } + else if ( itemID == 2990 ){ itemID = 2989; } + else if ( itemID == 2992 ){ itemID = 2991; } + else if ( itemID == 2994 ){ itemID = 2993; } + else if ( itemID == 2996 ){ itemID = 2995; } + else if ( itemID == 2998 ){ itemID = 2997; } + else if ( itemID == 3000 ){ itemID = 2999; } + else if ( itemID == 3002 ){ itemID = 3001; } + else if ( itemID == 3004 ){ itemID = 3003; } + else if ( itemID == 3006 ){ itemID = 3005; } + else if ( itemID == 3008 ){ itemID = 3007; } + else if ( itemID == 3010 ){ itemID = 3009; } + else if ( itemID == 3012 ){ itemID = 3011; } + else if ( itemID == 3014 ){ itemID = 3013; } + else if ( itemID == 3016 ){ itemID = 3015; } + else if ( itemID == 3018 ){ itemID = 3017; } + else if ( itemID == 3020 ){ itemID = 3019; } + else if ( itemID == 3022 ){ itemID = 3021; } + else if ( itemID == 3024 ){ itemID = 3023; } + else if ( itemID == 3026 ){ itemID = 3025; } + else if ( itemID == 3028 ){ itemID = 3027; } + else if ( itemID == 3030 ){ itemID = 3029; } + else if ( itemID == 3032 ){ itemID = 3031; } + else if ( itemID == 3034 ){ itemID = 3033; } + else if ( itemID == 3036 ){ itemID = 3035; } + else if ( itemID == 3038 ){ itemID = 3037; } + else if ( itemID == 3040 ){ itemID = 3039; } + else if ( itemID == 3042 ){ itemID = 3041; } + else if ( itemID == 3044 ){ itemID = 3043; } + else if ( itemID == 3046 ){ itemID = 3045; } + else if ( itemID == 3048 ){ itemID = 3047; } + else if ( itemID == 3050 ){ itemID = 3049; } + else if ( itemID == 3052 ){ itemID = 3051; } + else if ( itemID == 3054 ){ itemID = 3053; } + else if ( itemID == 3056 ){ itemID = 3055; } + else if ( itemID == 3058 ){ itemID = 3057; } + else if ( itemID == 3060 ){ itemID = 3059; } + else if ( itemID == 3062 ){ itemID = 3061; } + else if ( itemID == 3064 ){ itemID = 3063; } + else if ( itemID == 3066 ){ itemID = 3065; } + else if ( itemID == 3068 ){ itemID = 3067; } + else if ( itemID == 3070 ){ itemID = 3069; } + else if ( itemID == 3072 ){ itemID = 3071; } + else if ( itemID == 3074 ){ itemID = 3073; } + else if ( itemID == 3076 ){ itemID = 3075; } + else if ( itemID == 3078 ){ itemID = 3077; } + else if ( itemID == 3080 ){ itemID = 3079; } + else if ( itemID == 3082 ){ itemID = 3081; } + else if ( itemID == 3084 ){ itemID = 3083; } + else if ( itemID == 3086 ){ itemID = 3085; } + else if ( itemID == 2966 ){ itemID = 2965; } + else if ( itemID == 3140 ){ itemID = 3139; } + else if ( itemID == 2811 ){ itemID = 2812; } + + if ( m_Sign != null ) + m_Sign.ItemID = itemID; + } + + public abstract Rectangle2D[] Area{ get; } + public abstract Point3D BaseBanLocation{ get; } + + public virtual void UpdateRegion() + { + if ( m_Region != null ) + m_Region.Unregister(); + + if ( this.Map != null ) + { + m_Region = new HouseRegion( this ); + m_Region.Register(); + } + else + { + m_Region = null; + } + } + + public override void OnLocationChange( Point3D oldLocation ) + { + if ( m_LockDowns == null ) + return; + + int x = base.Location.X - oldLocation.X; + int y = base.Location.Y - oldLocation.Y; + int z = base.Location.Z - oldLocation.Z; + + if ( m_Sign != null && !m_Sign.Deleted ) + m_Sign.Location = new Point3D( m_Sign.X + x, m_Sign.Y + y, m_Sign.Z + z ); + + UpdateRegion(); + + if ( m_Doors != null ) + { + foreach ( Item item in m_Doors ) + { + if ( !item.Deleted ) + item.Location = new Point3D( item.X + x, item.Y + y, item.Z + z ); + } + } + + foreach ( IEntity entity in GetHouseEntities() ) + { + Point3D newLocation = new Point3D( entity.X + x, entity.Y + y, entity.Z + z ); + + if ( entity is Item ) + ((Item)entity).Location = newLocation; + else + ((Mobile)entity).Location = newLocation; + } + } + + public BaseDoor AddHouseDoor( int x, int y, int z, int id ) + { + BaseDoor door = MakeDoor( true, DoorFacing.SouthCW ); + door.Delete(); + + if ( id == 1663 ){ door = MakeDoor( false, DoorFacing.SouthCW ); } + else if ( id == 1661 ){ door = MakeDoor( false, DoorFacing.NorthCCW ); } + else if ( id == 1653 ){ door = MakeDoor( false, DoorFacing.EastCCW ); } + else if ( id == 1655 ){ door = MakeDoor( false, DoorFacing.WestCW ); } + + else if ( id == 1711 ){ door = MakeDoor( true, DoorFacing.NorthCCW ); } + else if ( id == 1709 ){ door = MakeDoor( true, DoorFacing.SouthCW ); } + else if ( id == 1701 ){ door = MakeDoor( true, DoorFacing.WestCW ); } + else if ( id == 1703 ){ door = MakeDoor( true, DoorFacing.EastCCW ); } + + AddDoor( door, x, y, z ); + return door; + } + + public BaseDoor AddEastDoor( int x, int y, int z ) + { + return AddEastDoor( true, x, y, z ); + } + + public BaseDoor AddEastDoor( bool wood, int x, int y, int z ) + { + BaseDoor door = MakeDoor( wood, DoorFacing.SouthCW ); + + AddDoor( door, x, y, z ); + + return door; + } + + public BaseDoor AddSouthDoor( int x, int y, int z ) + { + return AddSouthDoor( true, x, y, z ); + } + + public BaseDoor AddSouthDoor( bool wood, int x, int y, int z ) + { + BaseDoor door = MakeDoor( wood, DoorFacing.WestCW ); + + AddDoor( door, x, y, z ); + + return door; + } + + public BaseDoor AddEastDoor( int x, int y, int z, uint k ) + { + return AddEastDoor( true, x, y, z, k ); + } + + public BaseDoor AddEastDoor( bool wood, int x, int y, int z, uint k ) + { + BaseDoor door = MakeDoor( wood, DoorFacing.SouthCW ); + + door.Locked = true; + door.KeyValue = k; + + AddDoor( door, x, y, z ); + + return door; + } + + public BaseDoor AddSouthDoor( int x, int y, int z, uint k ) + { + return AddSouthDoor( true, x, y, z, k ); + } + + public BaseDoor AddSouthDoor( bool wood, int x, int y, int z, uint k ) + { + BaseDoor door = MakeDoor( wood, DoorFacing.WestCW ); + + door.Locked = true; + door.KeyValue = k; + + AddDoor( door, x, y, z ); + + return door; + } + + public BaseDoor[] AddSouthDoors( int x, int y, int z, uint k ) + { + return AddSouthDoors( true, x, y, z, k ); + } + + public BaseDoor[] AddSouthDoors( bool wood, int x, int y, int z, uint k ) + { + BaseDoor westDoor = MakeDoor( wood, DoorFacing.WestCW ); + BaseDoor eastDoor = MakeDoor( wood, DoorFacing.EastCCW ); + + westDoor.Locked = true; + eastDoor.Locked = true; + + westDoor.KeyValue = k; + eastDoor.KeyValue = k; + + westDoor.Link = eastDoor; + eastDoor.Link = westDoor; + + AddDoor( westDoor, x, y, z ); + AddDoor( eastDoor, x + 1, y, z ); + + return new BaseDoor[2]{ westDoor, eastDoor }; + } + + public uint CreateKeys( Mobile m ) + { + uint value = Key.RandomValue(); + + if ( !IsAosRules ) + { + Key packKey = new Key( KeyType.Gold ); + Key innKey = new Key( KeyType.Gold ); + + packKey.KeyValue = value; + innKey.KeyValue = value; + + InnBox box = m.InnBox; + + if ( !box.TryDropItem( m, innKey, false ) ) + innKey.Delete(); + + m.AddToBackpack( packKey ); + } + + return value; + } + + public BaseDoor[] AddSouthDoors( int x, int y, int z ) + { + return AddSouthDoors( true, x, y, z, false ); + } + + public BaseDoor[] AddSouthDoors( bool wood, int x, int y, int z, bool inv ) + { + BaseDoor westDoor = MakeDoor( wood, inv ? DoorFacing.WestCCW : DoorFacing.WestCW ); + BaseDoor eastDoor = MakeDoor( wood, inv ? DoorFacing.EastCW : DoorFacing.EastCCW ); + + westDoor.Link = eastDoor; + eastDoor.Link = westDoor; + + AddDoor( westDoor, x, y, z ); + AddDoor( eastDoor, x + 1, y, z ); + + return new BaseDoor[2]{ westDoor, eastDoor }; + } + + public BaseDoor MakeDoor( bool wood, DoorFacing facing ) + { + if ( wood ) + return new DarkWoodHouseDoor( facing ); + else + return new MetalHouseDoor( facing ); + } + + public void AddDoor( BaseDoor door, int xoff, int yoff, int zoff ) + { + door.MoveToWorld( new Point3D( xoff+this.X, yoff+this.Y, zoff+this.Z ), this.Map ); + m_Doors.Add( door ); + } + + public void AddTrashBarrel( Mobile from ) + { + if ( !IsActive ) + return; + + for ( int i = 0; m_Doors != null && i < m_Doors.Count; ++i ) + { + BaseDoor door = m_Doors[i] as BaseDoor; + Point3D p = door.Location; + + if ( door.Open ) + p = new Point3D( p.X - door.Offset.X, p.Y - door.Offset.Y, p.Z - door.Offset.Z ); + + if ( (from.Z + 16) >= p.Z && (p.Z + 16) >= from.Z ) + { + if ( from.InRange( p, 1 ) ) + { + from.SendLocalizedMessage( 502120 ); // You cannot place a trash barrel near a door or near steps. + return; + } + } + } + + if ( m_Trash == null || m_Trash.Deleted ) + { + m_Trash = new TrashBarrel(); + + m_Trash.Movable = false; + m_Trash.MoveToWorld( from.Location, from.Map ); + + from.SendLocalizedMessage( 502121 ); /* You have a new trash barrel. + * Three minutes after you put something in the barrel, the trash will be emptied. + * Be forewarned, this is permanent! */ + } + else + { + from.SendLocalizedMessage( 502117 ); // You already have a trash barrel! + } + } + + public void SetSign( int xoff, int yoff, int zoff ) + { + m_Sign = new HouseSign( this ); + m_Sign.MoveToWorld( new Point3D( this.X + xoff, this.Y + yoff, this.Z + zoff ), this.Map ); + } + + public void SetSignFace( int xoff, int yoff, int zoff, int id ) + { + m_Sign = new HouseSign( this ); + m_Sign.ItemID = id; + m_Sign.MoveToWorld( new Point3D( this.X + xoff, this.Y + yoff, this.Z + zoff ), this.Map ); + } + + private void SetLockdown( Item i, bool locked ) + { + SetLockdown( i, locked, false ); + } + + private void SetLockdown( Item i, bool locked, bool checkContains ) + { + if ( m_LockDowns == null ) + return; + + i.Movable = !locked; + i.IsLockedDown = locked; + + if ( locked ) + { + if ( i is VendorRentalContract ) + { + if ( !VendorRentalContracts.Contains( i ) ) + VendorRentalContracts.Add( i ); + } + else + { + if ( !checkContains || !m_LockDowns.Contains( i ) ) + m_LockDowns.Add( i ); + } + } + else + { + VendorRentalContracts.Remove( i ); + m_LockDowns.Remove( i ); + } + + if ( !locked ) + i.SetLastMoved(); + + if ( (i is Container) && (!locked || !(i is BaseBoard)) ) + { + foreach ( Item c in i.Items ) + SetLockdown( c, locked, checkContains ); + } + } + + public bool LockDown( Mobile m, Item item ) + { + return LockDown( m, item, true ); + } + + public bool LockDown( Mobile m, Item item, bool checkIsInside ) + { + if ( !IsCoOwner( m ) || !IsActive ) + return false; + + if ( item.Movable && !IsSecure( item ) ) + { + int amt = 1 + item.TotalItems; + + Item rootItem = item.RootParent as Item; + Item parentItem = item.Parent as Item; + + if ( checkIsInside && item.RootParent is Mobile ) + { + m.SendLocalizedMessage( 1005525 );//That is not in your house + } + else if ( checkIsInside && !IsInside( item.GetWorldLocation(), item.ItemData.Height ) ) + { + m.SendLocalizedMessage( 1005525 );//That is not in your house + } + else if ( IsSecure( rootItem ) ) + { + m.SendLocalizedMessage( 501737 ); // You need not lock down items in a secure container. + } + else if ( parentItem != null && !IsLockedDown( parentItem ) ) + { + m.SendLocalizedMessage( 501736 ); // You must lockdown the container first! + } + else if ( !(item is VendorRentalContract) && ( IsAosRules ? (!CheckAosLockdowns( amt ) || !CheckAosStorage( amt )) : (this.LockDownCount + amt) > m_MaxLockDowns ) ) + { + m.SendLocalizedMessage( 1005379 );//That would exceed the maximum lock down limit for this house + } + else + { + SetLockdown( item, true ); + return true; + } + } + else if ( m_LockDowns.IndexOf( item ) != -1 ) + { + m.LocalOverheadMessage( MessageType.Regular, 0x3E9, 1005526 ); //That is already locked down + return true; + } + else if ( item is HouseSign || item is Static ) + { + m.LocalOverheadMessage( MessageType.Regular, 0x3E9, 1005526 ); // This is already locked down. + } + else + { + m.SendLocalizedMessage( 1005377 );//You cannot lock that down + } + + return false; + } + + private class TransferItem : Item + { + private BaseHouse m_House; + + public override string DefaultName + { + get { return "a house transfer contract"; } + } + + public TransferItem( BaseHouse house ) : base( 0x14F0 ) + { + m_House = house; + + Hue = 0x480; + Movable = false; + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + string houseName, owner, location; + + houseName = ( m_House == null ? "an unnamed house" : m_House.Sign.GetName() ); + + Mobile houseOwner = ( m_House == null ? null : m_House.Owner ); + + if ( houseOwner == null ) + owner = "nobody"; + else + owner = houseOwner.Name; + + int xLong = 0, yLat = 0, xMins = 0, yMins = 0; + bool xEast = false, ySouth = false; + + bool valid = m_House != null && Sextant.Format( m_House.Location, m_House.Map, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth ); + + if ( valid ) + location = String.Format( "{0}° {1}'{2}, {3}° {4}'{5}", yLat, yMins, ySouth ? "S" : "N", xLong, xMins, xEast ? "E" : "W" ); + else + location = "unknown"; + + list.Add( 1061112, Utility.FixHtml( houseName ) ); // House Name: ~1_val~ + list.Add( 1061113, owner ); // Owner: ~1_val~ + list.Add( 1061114, location ); // Location: ~1_val~ + } + + public TransferItem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + Delete(); + } + + public override bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted ) + { + if ( !base.AllowSecureTrade( from, to, newOwner, accepted ) ) + return false; + else if ( !accepted ) + return true; + + if ( Deleted || m_House == null || m_House.Deleted || !m_House.IsOwner( from ) || !from.CheckAlive() || !to.CheckAlive() ) + return false; + + if ( BaseHouse.HasAccountHouse( to ) ) + { + from.SendLocalizedMessage( 501388 ); // You cannot transfer ownership to another house owner or co-owner! + return false; + } + + return m_House.CheckTransferPosition( from, to ); + } + + public override void OnSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted ) + { + if ( Deleted ) + return; + + Delete(); + + if ( m_House == null || m_House.Deleted || !m_House.IsOwner( from ) || !from.CheckAlive() || !to.CheckAlive() ) + return; + + + if ( !accepted ) + return; + + from.SendLocalizedMessage( 501338 ); // You have transferred ownership of the house. + to.SendLocalizedMessage( 501339 ); /* You are now the owner of this house. + * The house's co-owner, friend, ban, and access lists have been cleared. + * You should double-check the security settings on any doors and teleporters in the house. + */ + + m_House.RemoveKeys( from ); + m_House.Owner = to; + m_House.Bans.Clear(); + m_House.Friends.Clear(); + m_House.CoOwners.Clear(); + m_House.ChangeLocks( to ); + m_House.LastTraded = DateTime.Now; + } + } + + public bool CheckTransferPosition( Mobile from, Mobile to ) + { + bool isValid = true; + Item sign = m_Sign; + Point3D p = ( sign == null ? Point3D.Zero : sign.GetWorldLocation() ); + + if ( from.Map != Map || to.Map != Map ) + isValid = false; + else if ( sign == null ) + isValid = false; + else if ( from.Map != sign.Map || to.Map != sign.Map ) + isValid = false; + else if ( IsInside( from ) ) + isValid = false; + else if ( IsInside( to ) ) + isValid = false; + else if ( !from.InRange( p, 2 ) ) + isValid = false; + else if ( !to.InRange( p, 2 ) ) + isValid = false; + + if ( !isValid ) + from.SendLocalizedMessage( 1062067 ); // In order to transfer the house, you and the recipient must both be outside the building and within two paces of the house sign. + + return isValid; + } + + public void BeginConfirmTransfer( Mobile from, Mobile to ) + { + if ( Deleted || !from.CheckAlive() || !IsOwner( from ) ) + return; + + if ( NewVendorSystem && HasPersonalVendors ) + { + from.SendLocalizedMessage( 1062467 ); // You cannot trade this house while you still have personal vendors inside. + } + else if ( DecayLevel == DecayLevel.DemolitionPending ) + { + from.SendLocalizedMessage( 1005321 ); // This house has been marked for demolition, and it cannot be transferred. + } + else if ( from == to ) + { + from.SendLocalizedMessage( 1005330 ); // You cannot transfer a house to yourself, silly. + } + else if ( to.Player ) + { + if ( BaseHouse.HasAccountHouse( to ) ) + { + from.SendLocalizedMessage( 501388 ); // You cannot transfer ownership to another house owner or co-owner! + } + else if ( CheckTransferPosition( from, to ) ) + { + from.SendLocalizedMessage( 1005326 ); // Please wait while the other player verifies the transfer. + + if ( HasRentedVendors ) + { + /* You are about to be traded a home that has active vendor contracts. + * While there are active vendor contracts in this house, you + * cannot demolish OR customize the home. + * When you accept this house, you also accept landlordship for every + * contract vendor in the house. + */ + to.SendGump( new WarningGump( 1060635, 30720, 1062487, 32512, 420, 280, new WarningGumpCallback( ConfirmTransfer_Callback ), from ) ); + } + else + { + to.CloseGump( typeof( Gumps.HouseTransferGump ) ); + to.SendGump( new Gumps.HouseTransferGump( from, to, this ) ); + } + } + } + else + { + from.SendLocalizedMessage( 501384 ); // Only a player can own a house! + } + } + + private void ConfirmTransfer_Callback( Mobile to, bool ok, object state ) + { + Mobile from = (Mobile) state; + + if ( !ok || Deleted || !from.CheckAlive() || !IsOwner( from ) ) + return; + + if ( CheckTransferPosition( from, to ) ) + { + to.CloseGump( typeof( Gumps.HouseTransferGump ) ); + to.SendGump( new Gumps.HouseTransferGump( from, to, this ) ); + } + } + + public void EndConfirmTransfer( Mobile from, Mobile to ) + { + if ( Deleted || !from.CheckAlive() || !IsOwner( from ) ) + return; + + if ( NewVendorSystem && HasPersonalVendors ) + { + from.SendLocalizedMessage( 1062467 ); // You cannot trade this house while you still have personal vendors inside. + } + else if ( DecayLevel == DecayLevel.DemolitionPending ) + { + from.SendLocalizedMessage( 1005321 ); // This house has been marked for demolition, and it cannot be transferred. + } + else if ( from == to ) + { + from.SendLocalizedMessage( 1005330 ); // You cannot transfer a house to yourself, silly. + } + else if ( to.Player ) + { + if ( BaseHouse.HasAccountHouse( to ) ) + { + from.SendLocalizedMessage( 501388 ); // You cannot transfer ownership to another house owner or co-owner! + } + else if ( CheckTransferPosition( from, to ) ) + { + NetState fromState = from.NetState, toState = to.NetState; + + if ( fromState != null && toState != null ) + { + if ( from.HasTrade ) + { + from.SendLocalizedMessage( 1062071 ); // You cannot trade a house while you have other trades pending. + } + else if ( to.HasTrade ) + { + to.SendLocalizedMessage( 1062071 ); // You cannot trade a house while you have other trades pending. + } + else if( !to.Alive ) + { + // TODO: Check if the message is correct. + from.SendLocalizedMessage( 1062069 ); // You cannot transfer this house to that person. + } + else + { + Container c = fromState.AddTrade( toState ); + + c.DropItem( new TransferItem( this ) ); + } + } + } + } + else + { + from.SendLocalizedMessage( 501384 ); // Only a player can own a house! + } + } + + public void Release( Mobile m, Item item ) + { + if ( !IsCoOwner( m ) || !IsActive ) + return; + + if ( IsLockedDown( item ) ) + { + item.PublicOverheadMessage( Server.Network.MessageType.Label, 0x3B2, 501657 );//[no longer locked down] + SetLockdown( item, false ); + } + else if ( IsSecure( item ) ) + { + ReleaseSecure( m, item ); + } + else + { + m.LocalOverheadMessage( MessageType.Regular, 0x3E9, 1010416 ); // This is not locked down or secured. + } + } + + public void AddSecure( Mobile m, Item item ) + { + if ( m_Secures == null || !IsOwner( m ) || !IsActive ) + return; + + if ( !IsInside( item ) ) + { + m.SendLocalizedMessage( 1005525 ); // That is not in your house + } + else if ( IsLockedDown( item ) ) + { + m.SendLocalizedMessage( 1010550 ); // This is already locked down and cannot be secured. + } + else if ( !(item is Container) ) + { + LockDown( m, item ); + } + else + { + SecureInfo info = null; + + for ( int i = 0; info == null && i < m_Secures.Count; ++i ) + if ( ((SecureInfo)m_Secures[i]).Item == item ) + info = (SecureInfo)m_Secures[i]; + + if ( info != null ) + { + m.CloseGump( typeof ( SetSecureLevelGump ) ); + m.SendGump( new Gumps.SetSecureLevelGump( m_Owner, info, this ) ); + } + else if ( item.Parent != null ) + { + m.SendLocalizedMessage( 1010423 ); // You cannot secure this, place it on the ground first. + } + else if ( !item.Movable ) + { + m.SendLocalizedMessage( 1010424 ); // You cannot secure this. + } + else if ( !IsAosRules && SecureCount >= MaxSecures ) + { + // The maximum number of secure items has been reached : + m.SendLocalizedMessage( 1008142, true, MaxSecures.ToString() ); + } + else if ( IsAosRules ? !CheckAosLockdowns( 1 ) : ((LockDownCount + 125) >= MaxLockDowns) ) + { + m.SendLocalizedMessage( 1005379 ); // That would exceed the maximum lock down limit for this house + } + else if ( IsAosRules && !CheckAosStorage( item.TotalItems ) ) + { + m.SendLocalizedMessage( 1061839 ); // This action would exceed the secure storage limit of the house. + } + else + { + info = new SecureInfo( (Container)item, SecureLevel.Owner ); + + item.IsLockedDown = false; + item.IsSecure = true; + + m_Secures.Add( info ); + m_LockDowns.Remove( item ); + item.Movable = false; + + m.CloseGump( typeof ( SetSecureLevelGump ) ); + m.SendGump( new Gumps.SetSecureLevelGump( m_Owner, info, this ) ); + } + } + } + + public virtual bool IsCombatRestricted( Mobile m ) + { + if ( m == null || !m.Player || m.AccessLevel >= AccessLevel.GameMaster || !IsAosRules || ( m_Owner != null && m_Owner.AccessLevel >= AccessLevel.GameMaster )) + return false; + + for ( int i = 0; i < m.Aggressed.Count; ++i ) + { + AggressorInfo info = m.Aggressed[i]; + + Guild attackerGuild = m.Guild as Guild; + Guild defenderGuild = info.Defender.Guild as Guild; + + if ( info.Defender.Player && info.Defender.Alive && (DateTime.Now - info.LastCombatTime) < HouseRegion.CombatHeatDelay && (attackerGuild == null || defenderGuild == null || defenderGuild != attackerGuild && !defenderGuild.IsEnemy( attackerGuild )) ) + return true; + } + + return false; + } + + public bool HasSecureAccess( Mobile m, SecureLevel level ) + { + if ( m.AccessLevel >= AccessLevel.GameMaster ) + return true; + + if ( IsCombatRestricted( m ) ) + return false; + + switch ( level ) + { + case SecureLevel.Owner: return IsOwner( m ); + case SecureLevel.CoOwners: return IsCoOwner( m ); + case SecureLevel.Friends: return IsFriend( m ); + case SecureLevel.Anyone: return true; + case SecureLevel.Guild: return IsGuildMember( m ); + } + + return false; + } + + public void ReleaseSecure( Mobile m, Item item ) + { + if ( m_Secures == null || !IsOwner( m ) || item is StrongBox || !IsActive ) + return; + + for ( int i = 0; i < m_Secures.Count; ++i ) + { + SecureInfo info = (SecureInfo)m_Secures[i]; + + if ( info.Item == item && HasSecureAccess( m, info.Level ) ) + { + item.IsLockedDown = false; + item.IsSecure = false; + item.Movable = true; + item.SetLastMoved(); + item.PublicOverheadMessage( Server.Network.MessageType.Label, 0x3B2, 501656 );//[no longer secure] + m_Secures.RemoveAt( i ); + return; + } + } + + m.SendLocalizedMessage( 501717 );//This isn't secure... + } + + public override bool Decays + { + get + { + return false; + } + } + + public void AddStrongBox( Mobile from ) + { + if ( !IsCoOwner( from ) || !IsActive ) + return; + + if ( from == Owner ) + { + from.SendLocalizedMessage( 502109 ); // Owners don't get a strong box + return; + } + + if ( IsAosRules ? !CheckAosLockdowns( 1 ) : ((LockDownCount + 1) > m_MaxLockDowns) ) + { + from.SendLocalizedMessage( 1005379 );//That would exceed the maximum lock down limit for this house + return; + } + + foreach ( SecureInfo info in m_Secures ) + { + Container c = info.Item; + + if ( !c.Deleted && c is StrongBox && ((StrongBox)c).Owner == from ) + { + from.SendLocalizedMessage( 502112 );//You already have a strong box + return; + } + } + + for ( int i = 0; m_Doors != null && i < m_Doors.Count; ++i ) + { + BaseDoor door = m_Doors[i] as BaseDoor; + Point3D p = door.Location; + + if ( door.Open ) + p = new Point3D( p.X - door.Offset.X, p.Y - door.Offset.Y, p.Z - door.Offset.Z ); + + if ( (from.Z + 16) >= p.Z && (p.Z + 16) >= from.Z ) + { + if ( from.InRange( p, 1 ) ) + { + from.SendLocalizedMessage( 502113 ); // You cannot place a strongbox near a door or near steps. + return; + } + } + } + + StrongBox sb = new StrongBox( from, this ); + sb.Movable = false; + sb.IsLockedDown = false; + sb.IsSecure = true; + m_Secures.Add( new SecureInfo( sb, SecureLevel.CoOwners ) ); + sb.MoveToWorld( from.Location, from.Map ); + } + + public void Kick( Mobile from, Mobile targ ) + { + if ( !IsFriend( from ) || m_Friends == null ) + return; + + if ( targ.AccessLevel > AccessLevel.Player && from.AccessLevel <= targ.AccessLevel ) + { + from.SendLocalizedMessage( 501346 ); // Uh oh...a bigger boot may be required! + } + else if ( IsFriend( targ ) ) + { + from.SendLocalizedMessage( 501348 ); // You cannot eject a friend of the house! + } + else if ( targ is PlayerVendor ) + { + from.SendLocalizedMessage( 501351 ); // You cannot eject a vendor. + } + else if ( !IsInside( targ ) ) + { + from.SendLocalizedMessage( 501352 ); // You may not eject someone who is not in your house! + } + else if ( targ is BaseCreature && ((BaseCreature)targ).NoHouseRestrictions ) + { + from.SendLocalizedMessage( 501347 ); // You cannot eject that from the house! + } + else + { + targ.MoveToWorld( BanLocation, Map ); + + from.SendLocalizedMessage( 1042840, targ.Name ); // ~1_PLAYER NAME~ has been ejected from this house. + targ.SendLocalizedMessage( 501341 ); /* You have been ejected from this house. + * If you persist in entering, you may be banned from the house. + */ + } + } + + public void RemoveAccess( Mobile from, Mobile targ ) + { + if ( !IsFriend( from ) || m_Access == null ) + return; + + if ( m_Access.Contains( targ ) ) + { + m_Access.Remove( targ ); + + if ( !HasAccess( targ ) && IsInside( targ ) ) + { + targ.Location = BanLocation; + targ.SendLocalizedMessage( 1060734 ); // Your access to this house has been revoked. + } + + from.SendLocalizedMessage( 1050051 ); // The invitation has been revoked. + } + } + + public void RemoveBan( Mobile from, Mobile targ ) + { + if ( !IsCoOwner( from ) || m_Bans == null ) + return; + + if ( m_Bans.Contains( targ ) ) + { + m_Bans.Remove( targ ); + + from.SendLocalizedMessage( 501297 ); // The ban is lifted. + } + } + + public void Ban( Mobile from, Mobile targ ) + { + if ( !IsFriend( from ) || m_Bans == null ) + return; + + if ( targ.AccessLevel > AccessLevel.Player && from.AccessLevel <= targ.AccessLevel ) + { + from.SendLocalizedMessage( 501354 ); // Uh oh...a bigger boot may be required. + } + else if ( IsFriend( targ ) ) + { + from.SendLocalizedMessage( 501348 ); // You cannot eject a friend of the house! + } + else if ( targ is PlayerVendor ) + { + from.SendLocalizedMessage( 501351 ); // You cannot eject a vendor. + } + else if ( m_Bans.Count >= MaxBans ) + { + from.SendLocalizedMessage( 501355 ); // The ban limit for this house has been reached! + } + else if ( IsBanned( targ ) ) + { + from.SendLocalizedMessage( 501356 ); // This person is already banned! + } + else if ( !IsInside( targ ) ) + { + from.SendLocalizedMessage( 501352 ); // You may not eject someone who is not in your house! + } + else if ( !Public && IsAosRules ) + { + from.SendLocalizedMessage( 1062521 ); // You cannot ban someone from a private house. Revoke their access instead. + } + else if ( targ is BaseCreature && ((BaseCreature)targ).NoHouseRestrictions ) + { + from.SendLocalizedMessage( 1062040 ); // You cannot ban that. + } + else + { + m_Bans.Add( targ ); + + from.SendLocalizedMessage( 1042839, targ.Name ); // ~1_PLAYER_NAME~ has been banned from this house. + targ.SendLocalizedMessage( 501340 ); // You have been banned from this house. + + targ.MoveToWorld( BanLocation, Map ); + } + } + + public void GrantAccess( Mobile from, Mobile targ ) + { + if ( !IsFriend( from ) || m_Access == null ) + return; + + if ( HasAccess( targ ) ) + { + from.SendLocalizedMessage( 1060729 ); // That person already has access to this house. + } + else if ( !targ.Player ) + { + from.SendLocalizedMessage( 1060712 ); // That is not a player. + } + else if ( IsBanned( targ ) ) + { + from.SendLocalizedMessage( 501367 ); // This person is banned! Unban them first. + } + else + { + m_Access.Add( targ ); + + targ.SendLocalizedMessage( 1060735 ); // You have been granted access to this house. + } + } + + public void AddCoOwner( Mobile from, Mobile targ ) + { + if ( !IsOwner( from ) || m_CoOwners == null || m_Friends == null ) + return; + + if ( IsOwner( targ ) ) + { + from.SendLocalizedMessage( 501360 ); // This person is already the house owner! + } + else if ( m_Friends.Contains( targ ) ) + { + from.SendLocalizedMessage( 501361 ); // This person is a friend of the house. Remove them first. + } + else if ( !targ.Player ) + { + from.SendLocalizedMessage( 501362 ); // That can't be a co-owner of the house. + } + else if ( HasAccountHouse( targ ) ) + { + from.SendLocalizedMessage( 501364 ); // That person is already a house owner. + } + else if ( IsBanned( targ ) ) + { + from.SendLocalizedMessage( 501367 ); // This person is banned! Unban them first. + } + else if ( m_CoOwners.Count >= MaxCoOwners ) + { + from.SendLocalizedMessage( 501368 ); // Your co-owner list is full! + } + else if ( m_CoOwners.Contains( targ ) ) + { + from.SendLocalizedMessage( 501369 ); // This person is already on your co-owner list! + } + else + { + m_CoOwners.Add( targ ); + + targ.Delta( MobileDelta.Noto ); + targ.SendLocalizedMessage( 501343 ); // You have been made a co-owner of this house. + } + } + + public void RemoveCoOwner( Mobile from, Mobile targ ) + { + if ( !IsOwner( from ) || m_CoOwners == null ) + return; + + if ( m_CoOwners.Contains( targ ) ) + { + m_CoOwners.Remove( targ ); + + targ.Delta( MobileDelta.Noto ); + + from.SendLocalizedMessage( 501299 ); // Co-owner removed from list. + targ.SendLocalizedMessage( 501300 ); // You have been removed as a house co-owner. + + foreach ( SecureInfo info in m_Secures ) + { + Container c = info.Item; + + if ( c is StrongBox && ((StrongBox)c).Owner == targ ) + { + c.IsLockedDown = false; + c.IsSecure = false; + m_Secures.Remove( info ); + c.Destroy(); + break; + } + } + } + } + + public void AddFriend( Mobile from, Mobile targ ) + { + if ( !IsCoOwner( from ) || m_Friends == null || m_CoOwners == null ) + return; + + if ( IsOwner( targ ) ) + { + from.SendLocalizedMessage( 501370 ); // This person is already an owner of the house! + } + else if ( m_CoOwners.Contains( targ ) ) + { + from.SendLocalizedMessage( 501369 ); // This person is already on your co-owner list! + } + else if ( !targ.Player ) + { + from.SendLocalizedMessage( 501371 ); // That can't be a friend of the house. + } + else if ( IsBanned( targ ) ) + { + from.SendLocalizedMessage( 501374 ); // This person is banned! Unban them first. + } + else if ( m_Friends.Count >= MaxFriends ) + { + from.SendLocalizedMessage( 501375 ); // Your friends list is full! + } + else if ( m_Friends.Contains( targ ) ) + { + from.SendLocalizedMessage( 501376 ); // This person is already on your friends list! + } + else + { + m_Friends.Add( targ ); + + targ.Delta( MobileDelta.Noto ); + targ.SendLocalizedMessage( 501337 ); // You have been made a friend of this house. + } + } + + public void RemoveFriend( Mobile from, Mobile targ ) + { + if ( !IsCoOwner( from ) || m_Friends == null ) + return; + + if ( m_Friends.Contains( targ ) ) + { + m_Friends.Remove( targ ); + + targ.Delta( MobileDelta.Noto ); + + from.SendLocalizedMessage( 501298 ); // Friend removed from list. + targ.SendLocalizedMessage( 1060751 ); // You are no longer a friend of this house. + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 14 ); // version + + writer.Write( (Point3D) m_RelativeBanLocation ); + + writer.WriteItemList( m_VendorRentalContracts, true ); + writer.WriteMobileList( m_InternalizedVendors, true ); + + writer.WriteEncodedInt( m_RelocatedEntities.Count ); + foreach ( RelocatedEntity relEntity in m_RelocatedEntities ) + { + writer.Write( (Point3D) relEntity.RelativeLocation ); + + if ( ( relEntity.Entity is Item && ((Item)relEntity.Entity).Deleted ) || ( relEntity.Entity is Mobile && ((Mobile)relEntity.Entity).Deleted ) ) + writer.Write( (int) Serial.MinusOne ); + else + writer.Write( (int) relEntity.Entity.Serial ); + } + + writer.WriteEncodedInt( m_VendorInventories.Count ); + for ( int i = 0; i < m_VendorInventories.Count; i++ ) + { + VendorInventory inventory = (VendorInventory) m_VendorInventories[i]; + inventory.Serialize( writer ); + } + + writer.Write( (DateTime) m_LastRefreshed ); + writer.Write( (bool) m_RestrictDecay ); + + writer.Write( (int) m_Visits ); + + writer.Write( (int) m_Price ); + + writer.WriteMobileList( m_Access ); + + writer.Write( m_BuiltOn ); + writer.Write( m_LastTraded ); + + writer.WriteItemList( m_Addons, true ); + + writer.Write( m_Secures.Count ); + + for ( int i = 0; i < m_Secures.Count; ++i ) + ((SecureInfo)m_Secures[i]).Serialize( writer ); + + writer.Write( m_Public ); + + //writer.Write( BanLocation ); + + writer.Write( m_Owner ); + + // Version 5 no longer serializes region coords + /*writer.Write( (int)m_Region.Coords.Count ); + foreach( Rectangle2D rect in m_Region.Coords ) + { + writer.Write( rect ); + }*/ + + writer.WriteMobileList( m_CoOwners, true ); + writer.WriteMobileList( m_Friends, true ); + writer.WriteMobileList( m_Bans, true ); + + writer.Write( m_Sign ); + writer.Write( m_Trash ); + + writer.WriteItemList( m_Doors, true ); + writer.WriteItemList( m_LockDowns, true ); + //writer.WriteItemList( m_Secures, true ); + + writer.Write( (int) m_MaxLockDowns ); + writer.Write( (int) m_MaxSecures ); + + // Items in locked down containers that aren't locked down themselves must decay! + for ( int i = 0; i < m_LockDowns.Count; ++i ) + { + Item item = (Item)m_LockDowns[i]; + + if ( item is Container && !(item is BaseBoard) ) + { + Container cont = (Container)item; + List children = cont.Items; + + for ( int j = 0; j < children.Count; ++j ) + { + Item child = children[j]; + + if ( child.Decays && !child.IsLockedDown && !child.IsSecure && (child.LastMoved + child.DecayTime) <= DateTime.Now ) + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( child.Delete ) ); + } + } + } + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + int count; + + switch ( version ) + { + case 14: + { + m_RelativeBanLocation = reader.ReadPoint3D(); + goto case 13; + } + case 13: // removed ban location serialization + case 12: + { + m_VendorRentalContracts = reader.ReadItemList(); + m_InternalizedVendors = reader.ReadMobileList(); + + int relocatedCount = reader.ReadEncodedInt(); + for ( int i = 0; i < relocatedCount; i++ ) + { + Point3D relLocation = reader.ReadPoint3D(); + IEntity entity = World.FindEntity( reader.ReadInt() ); + + if ( entity != null ) + m_RelocatedEntities.Add( new RelocatedEntity( entity, relLocation ) ); + } + + int inventoryCount = reader.ReadEncodedInt(); + for ( int i = 0; i < inventoryCount; i++ ) + { + VendorInventory inventory = new VendorInventory( this, reader ); + m_VendorInventories.Add( inventory ); + } + + goto case 11; + } + case 11: + { + m_LastRefreshed = reader.ReadDateTime(); + m_RestrictDecay = reader.ReadBool(); + goto case 10; + } + case 10: // just a signal for updates + case 9: + { + m_Visits = reader.ReadInt(); + goto case 8; + } + case 8: + { + m_Price = reader.ReadInt(); + goto case 7; + } + case 7: + { + m_Access = reader.ReadMobileList(); + goto case 6; + } + case 6: + { + m_BuiltOn = reader.ReadDateTime(); + m_LastTraded = reader.ReadDateTime(); + goto case 5; + } + case 5: // just removed fields + case 4: + { + m_Addons = reader.ReadItemList(); + goto case 3; + } + case 3: + { + count = reader.ReadInt(); + m_Secures = new ArrayList( count ); + + for ( int i = 0; i < count; ++i ) + { + SecureInfo info = new SecureInfo( reader ); + + if ( info.Item != null ) + { + info.Item.IsSecure = true; + m_Secures.Add( info ); + } + } + + goto case 2; + } + case 2: + { + m_Public = reader.ReadBool(); + goto case 1; + } + case 1: + { + if ( version < 13 ) + reader.ReadPoint3D(); // house ban location + goto case 0; + } + case 0: + { + if ( version < 14 ) + m_RelativeBanLocation = this.BaseBanLocation; + + if ( version < 12 ) + { + m_VendorRentalContracts = new ArrayList(); + m_InternalizedVendors = new ArrayList(); + } + + if ( version < 4 ) + m_Addons = new ArrayList(); + + if ( version < 7 ) + m_Access = new ArrayList(); + + if ( version < 8 ) + m_Price = DefaultPrice; + + m_Owner = reader.ReadMobile(); + + if ( version < 5 ) + { + count = reader.ReadInt(); + + for(int i=0;i list = null; + m_Table.TryGetValue( m_Owner, out list ); + + if ( list == null ) + m_Table[m_Owner] = list = new List(); + + list.Add( this ); + } + break; + } + } + + if ( version <= 1 ) + ChangeSignType( 0xBD2 );//private house, plain brass sign + + if ( version < 10 ) + { + /* NOTE: This can exceed the house lockdown limit. It must be this way, because + * we do not want players' items to decay without them knowing. Or not even + * having a chance to fix it themselves. + */ + + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( FixLockdowns_Sandbox ) ); + } + + if ( version < 11 ) + m_LastRefreshed = DateTime.Now + TimeSpan.FromHours( 24 * Utility.RandomDouble() ); + + if ( !CheckDecay() ) + { + if ( RelocatedEntities.Count > 0 ) + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( RestoreRelocatedEntities ) ); + + if ( m_Owner == null && m_Friends.Count == 0 && m_CoOwners.Count == 0 ) + Timer.DelayCall( TimeSpan.FromSeconds( 10.0 ), new TimerCallback( Delete ) ); + } + } + + private void FixLockdowns_Sandbox() + { + ArrayList lockDowns = new ArrayList(); + + for ( int i = 0; m_LockDowns != null && i < m_LockDowns.Count; ++i ) + { + Item item = (Item)m_LockDowns[i]; + + if ( item is Container ) + lockDowns.Add( item ); + } + + for ( int i = 0; i < lockDowns.Count; ++i ) + SetLockdown( (Item)lockDowns[i], true, true ); + } + + public static void HandleDeletion( Mobile mob ) + { + List houses = GetHouses( mob ); + + if ( houses.Count == 0 ) + return; + + Account acct = mob.Account as Account; + Mobile trans = null; + + for ( int i = 0; i < acct.Length; ++i ) + { + if ( acct[i] != null && acct[i] != mob ) + trans = acct[i]; + } + + for ( int i = 0; i < houses.Count; ++i ) + { + BaseHouse house = houses[i]; + + bool canClaim = false; + + if ( trans == null ) + canClaim = ( house.CoOwners.Count > 0 ); + /*{ + for ( int j = 0; j < house.CoOwners.Count; ++j ) + { + Mobile check = house.CoOwners[j] as Mobile; + + if ( check != null && !check.Deleted && !HasAccountHouse( check ) ) + { + canClaim = true; + break; + } + } + }*/ + + if ( trans == null && !canClaim ) + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( house.Delete ) ); + else + house.Owner = trans; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Owner + { + get + { + return m_Owner; + } + set + { + if ( m_Owner != null ) + { + List list = null; + m_Table.TryGetValue( m_Owner, out list ); + + if ( list == null ) + m_Table[m_Owner] = list = new List(); + + list.Remove( this ); + m_Owner.Delta( MobileDelta.Noto ); + } + + m_Owner = value; + + if ( m_Owner != null ) + { + List list = null; + m_Table.TryGetValue( m_Owner, out list ); + + if ( list == null ) + m_Table[m_Owner] = list = new List(); + + list.Add( this ); + m_Owner.Delta( MobileDelta.Noto ); + } + + if ( m_Sign != null ) + m_Sign.InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Visits + { + get{ return m_Visits; } + set{ m_Visits = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Public + { + get + { + return m_Public; + } + set + { + if ( m_Public != value ) + { + m_Public = value; + + if ( !m_Public ) // Privatizing the house, change to brass sign + ChangeSignType( 0xBD2 ); + + if ( m_Sign != null ) + m_Sign.InvalidateProperties(); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxSecures + { + get + { + return m_MaxSecures; + } + set + { + m_MaxSecures = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D BanLocation + { + get + { + return m_Region.GoLocation; + } + set + { + this.RelativeBanLocation = new Point3D( value.X - this.X, value.Y - this.Y, value.Z - this.Z ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D RelativeBanLocation + { + get + { + return m_RelativeBanLocation; + } + set + { + m_RelativeBanLocation = value; + m_Region.GoLocation = new Point3D( this.X + value.X, this.Y + value.Y, this.Z + value.Z ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxLockDowns + { + get + { + return m_MaxLockDowns; + } + set + { + m_MaxLockDowns = value; + } + } + + public Region Region{ get{ return m_Region; } } + public ArrayList CoOwners{ get{ return m_CoOwners; } set{ m_CoOwners = value; } } + public ArrayList Friends{ get{ return m_Friends; } set{ m_Friends = value; } } + public ArrayList Access{ get{ return m_Access; } set{ m_Access = value; } } + public ArrayList Bans{ get{ return m_Bans; } set{ m_Bans = value; } } + public ArrayList Doors{ get{ return m_Doors; } set{ m_Doors = value; } } + + public int GetLockdowns() + { + int count = 0; + + if ( m_LockDowns != null ) + { + for ( int i = 0; i < m_LockDowns.Count; ++i ) + { + if ( m_LockDowns[i] is Item ) + { + Item item = (Item)m_LockDowns[i]; + + if ( !(item is Container) ) + count += item.TotalItems; + } + + count++; + } + } + + return count; + } + + public int LockDownCount + { + get + { + int count = 0; + + count += GetLockdowns(); + + if ( m_Secures != null ) + { + for ( int i = 0; i < m_Secures.Count; ++i ) + { + SecureInfo info = (SecureInfo)m_Secures[i]; + + if ( info.Item.Deleted ) + continue; + else if ( info.Item is StrongBox ) + count += 1; + else + count += 125; + } + } + + return count; + } + } + + public int SecureCount + { + get + { + int count = 0; + + if ( m_Secures != null ) + { + for ( int i = 0; i < m_Secures.Count; i++ ) + { + SecureInfo info = (SecureInfo)m_Secures[i]; + + if ( info.Item.Deleted ) + continue; + else if ( !(info.Item is StrongBox) ) + count += 1; + } + } + + return count; + } + } + + public ArrayList Addons{ get{ return m_Addons; } set{ m_Addons = value; } } + public ArrayList LockDowns{ get{ return m_LockDowns; } } + public ArrayList Secures{ get{ return m_Secures; } } + public HouseSign Sign{ get{ return m_Sign; } set{ m_Sign = value; } } + public ArrayList PlayerVendors{ get{ return m_PlayerVendors; } } + public ArrayList PlayerBarkeepers{ get{ return m_PlayerBarkeepers; } } + public ArrayList VendorRentalContracts{ get{ return m_VendorRentalContracts; } } + public ArrayList VendorInventories{ get{ return m_VendorInventories; } } + public ArrayList RelocatedEntities{ get{ return m_RelocatedEntities; } } + public MovingCrate MovingCrate{ get{ return m_MovingCrate; } set{ m_MovingCrate = value; } } + public ArrayList InternalizedVendors{ get{ return m_InternalizedVendors; } } + + public DateTime BuiltOn + { + get{ return m_BuiltOn; } + set{ m_BuiltOn = value; } + } + + public DateTime LastTraded + { + get{ return m_LastTraded; } + set{ m_LastTraded = value; } + } + + public override void OnDelete() + { + RestoreRelocatedEntities(); + + new FixColumnTimer( this ).Start(); + + base.OnDelete(); + } + + private class FixColumnTimer : Timer + { + private Map m_Map; + private int m_StartX, m_StartY, m_EndX, m_EndY; + + public FixColumnTimer( BaseMulti multi ) : base( TimeSpan.Zero ) + { + m_Map = multi.Map; + + MultiComponentList mcl = multi.Components; + + m_StartX = multi.X + mcl.Min.X; + m_StartY = multi.Y + mcl.Min.Y; + m_EndX = multi.X + mcl.Max.X; + m_EndY = multi.Y + mcl.Max.Y; + } + + protected override void OnTick() + { + if ( m_Map == null ) + return; + + for ( int x = m_StartX; x <= m_EndX; ++x ) + for ( int y = m_StartY; y <= m_EndY; ++y ) + m_Map.FixColumn( x, y ); + } + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Owner != null ) + { + List list = null; + m_Table.TryGetValue( m_Owner, out list ); + + if ( list == null ) + m_Table[m_Owner] = list = new List(); + + list.Remove( this ); + } + + if ( m_Region != null ) + { + m_Region.Unregister(); + m_Region = null; + } + + if ( m_Sign != null ) + m_Sign.Delete(); + + if ( m_Trash != null ) + m_Trash.Delete(); + + if ( m_Doors != null ) + { + for ( int i = 0; i < m_Doors.Count; ++i ) + { + Item item = (Item)m_Doors[i]; + + if ( item != null ) + item.Delete(); + } + + m_Doors.Clear(); + } + + if ( m_LockDowns != null ) + { + for ( int i = 0; i < m_LockDowns.Count; ++i ) + { + Item item = (Item)m_LockDowns[i]; + + if ( item != null ) + { + item.IsLockedDown = false; + item.IsSecure = false; + item.Movable = true; + item.SetLastMoved(); + } + } + + m_LockDowns.Clear(); + } + + if ( VendorRentalContracts != null ) + { + for ( int i = 0; i < VendorRentalContracts.Count; ++i ) + { + Item item = (Item)VendorRentalContracts[i]; + + if ( item != null ) + { + item.IsLockedDown = false; + item.IsSecure = false; + item.Movable = true; + item.SetLastMoved(); + } + } + + VendorRentalContracts.Clear(); + } + + if ( m_Secures != null ) + { + for ( int i = 0; i < m_Secures.Count; ++i ) + { + SecureInfo info = (SecureInfo)m_Secures[i]; + + if ( info.Item is StrongBox ) + { + info.Item.Destroy(); + } + else + { + info.Item.IsLockedDown = false; + info.Item.IsSecure = false; + info.Item.Movable = true; + info.Item.SetLastMoved(); + } + } + + m_Secures.Clear(); + } + + if ( m_Addons != null ) + { + for ( int i = 0; i < m_Addons.Count; ++i ) + { + Item item = (Item)m_Addons[i]; + + if ( item != null ) + { + if( !item.Deleted && item is IAddon ) + { + + Item deed = ((IAddon)item).Deed; + bool retainDeedHue = false; //if the items aren't hued but the deed itself is + int hue = 0; + + if( item is BaseAddon && ((BaseAddon)item).RetainDeedHue ) //There are things that are IAddon which aren't BaseAddon + { + BaseAddon ba = (BaseAddon)item; + retainDeedHue = true; + + for( int j = 0; hue == 0 && j < ba.Components.Count; ++j ) + { + AddonComponent c = ba.Components[j]; + + if( c.Hue != 0 ) + hue = c.Hue; + } + } + + if( deed != null ) + { + if( retainDeedHue ) + deed.Hue = hue; + deed.MoveToWorld( item.Location, item.Map ); + } + } + + item.Delete(); + } + } + + m_Addons.Clear(); + } + + ArrayList inventories = new ArrayList( VendorInventories ); + + foreach ( VendorInventory inventory in inventories ) + inventory.Delete(); + + if ( MovingCrate != null ) + MovingCrate.Delete(); + + KillVendors(); + + m_AllHouses.Remove( this ); + } + + public static bool HasHouse( Mobile m ) + { + int MaxHouses = Server.Misc.Settings.HousesPerAccount(); + int HasHouses = 0; + + if ( MaxHouses < 0 ) + return false; + + List list = GetHouses( m ); + + if ( list == null ) + return false; + + for ( int i = 0; i < list.Count; ++i ) + { + HasHouses++; + } + + if ( HasHouses >= MaxHouses ) + return true; + + return false; + } + + public static bool HasAccountHouse( Mobile m ) + { + Account a = m.Account as Account; + + if ( a == null ) + return false; + + for ( int i = 0; i < a.Length; ++i ) + if ( a[i] != null && HasHouse( a[i] ) ) + return true; + + return false; + } + + public bool CheckAccount( Mobile mobCheck, Mobile accCheck ) + { + if ( accCheck != null ) + { + Account a = accCheck.Account as Account; + + if ( a != null ) + { + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] == mobCheck ) + return true; + } + } + } + + return false; + } + + public bool IsOwner( Mobile m ) + { + if ( m == null ) + return false; + + if ( m == m_Owner || m.AccessLevel >= AccessLevel.GameMaster ) + return true; + + return IsAosRules && CheckAccount( m, m_Owner ); + } + + public bool IsCoOwner( Mobile m ) + { + if ( m == null || m_CoOwners == null ) + return false; + + if ( IsOwner( m ) || m_CoOwners.Contains( m ) ) + return true; + + return !IsAosRules && CheckAccount( m, m_Owner ); + } + + public bool IsGuildMember( Mobile m ) + { + if( m == null || Owner == null || Owner.Guild == null ) + return false; + + return ( m.Guild == Owner.Guild ); + } + + public void RemoveKeys( Mobile m ) + { + if ( m_Doors != null ) + { + uint keyValue = 0; + + for ( int i = 0; keyValue == 0 && i < m_Doors.Count; ++i ) + { + BaseDoor door = m_Doors[i] as BaseDoor; + + if ( door != null ) + keyValue = door.KeyValue; + } + + Key.RemoveKeys( m, keyValue ); + } + } + + public void ChangeLocks( Mobile m ) + { + uint keyValue = CreateKeys( m ); + + if ( m_Doors != null ) + { + for ( int i = 0; i < m_Doors.Count; ++i ) + { + BaseDoor door = m_Doors[i] as BaseDoor; + + if ( door != null ) + door.KeyValue = keyValue; + } + } + } + + public void RemoveLocks() + { + if ( m_Doors != null ) + { + for (int i=0;i AccessLevel.Player || m_Bans == null ) + return false; + + Account theirAccount = m.Account as Account; + + for ( int i = 0; i < m_Bans.Count; ++i ) + { + Mobile c = (Mobile)m_Bans[i]; + + if ( c == m ) + return true; + + Account bannedAccount = c.Account as Account; + + if ( bannedAccount != null && bannedAccount == theirAccount ) + return true; + } + + return false; + } + + public bool HasAccess( Mobile m ) + { + if ( m == null ) + return false; + + if ( m.AccessLevel > AccessLevel.Player || IsFriend( m ) || ( m_Access != null && m_Access.Contains( m ) ) ) + return true; + + if ( m is BaseCreature ) + { + BaseCreature bc = (BaseCreature)m; + + if ( bc.NoHouseRestrictions ) + return true; + + if ( bc.Controlled || bc.Summoned ) + { + m = bc.ControlMaster; + + if ( m == null ) + m = bc.SummonMaster; + + if ( m == null ) + return false; + + if ( m.AccessLevel > AccessLevel.Player || IsFriend( m ) || ( m_Access != null && m_Access.Contains( m ) ) ) + return true; + } + } + + return false; + } + + public new bool IsLockedDown( Item check ) + { + if ( check == null ) + return false; + + if ( m_LockDowns == null ) + return false; + + return ( m_LockDowns.Contains( check ) || VendorRentalContracts.Contains( check ) ); + } + + public new bool IsSecure( Item item ) + { + if ( item == null ) + return false; + + if ( m_Secures == null ) + return false; + + bool contains = false; + + for ( int i = 0; !contains && i < m_Secures.Count; ++i ) + contains = ( ((SecureInfo)m_Secures[i]).Item == item ); + + return contains; + } + + public virtual Guildstone FindGuildstone() + { + Map map = this.Map; + + if ( map == null ) + return null; + + MultiComponentList mcl = Components; + IPooledEnumerable eable = map.GetItemsInBounds( new Rectangle2D( X + mcl.Min.X, Y + mcl.Min.Y, mcl.Width, mcl.Height ) ); + + foreach ( Item item in eable ) + { + if ( item is Guildstone && Contains( item ) ) + { + eable.Free(); + return (Guildstone)item; + } + } + + eable.Free(); + return null; + } + } + + public enum DecayType + { + Ageless, + AutoRefresh, + ManualRefresh, + Condemned + } + + public enum DecayLevel + { + Ageless, + LikeNew, + Slightly, + Somewhat, + Fairly, + Greatly, + IDOC, + Collapsed, + DemolitionPending + } + + public enum SecureAccessResult + { + Insecure, + Accessible, + Inaccessible + } + + public enum SecureLevel + { + Owner, + CoOwners, + Friends, + Anyone, + Guild + } + + public class SecureInfo : ISecurable + { + private Container m_Item; + private SecureLevel m_Level; + + public Container Item{ get{ return m_Item; } } + public SecureLevel Level{ get{ return m_Level; } set{ m_Level = value; } } + + public SecureInfo( Container item, SecureLevel level ) + { + m_Item = item; + m_Level = level; + } + + public SecureInfo( GenericReader reader ) + { + m_Item = reader.ReadItem() as Container; + m_Level = (SecureLevel)reader.ReadByte(); + } + + public void Serialize( GenericWriter writer ) + { + writer.Write( m_Item ); + writer.Write( (byte) m_Level ); + } + } + + public class RelocatedEntity + { + private IEntity m_Entity; + private Point3D m_RelativeLocation; + + public IEntity Entity + { + get{ return m_Entity; } + } + + public Point3D RelativeLocation + { + get{ return m_RelativeLocation; } + } + + public RelocatedEntity( IEntity entity, Point3D relativeLocation ) + { + m_Entity = entity; + m_RelativeLocation = relativeLocation; + } + } + + #region Targets + + public class LockdownTarget : Target + { + private bool m_Release; + private BaseHouse m_House; + + public LockdownTarget( bool release, BaseHouse house ) : base( 12, false, TargetFlags.None ) + { + CheckLOS = false; + + m_Release = release; + m_House = house; + } + + protected override void OnTargetNotAccessible( Mobile from, object targeted ) + { + OnTarget( from, targeted ); + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !from.Alive || m_House.Deleted || !m_House.IsCoOwner( from ) ) + return; + + if ( targeted is Item ) + { + if ( m_Release ) + { + m_House.Release( from, (Item)targeted ); + } + else + { + if ( targeted is VendorRentalContract ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1062392 ); // You must double click the contract in your pack to lock it down. + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 501732 ); // I cannot lock this down! + } + else if ( (Item)targeted is AddonComponent ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3E9, 501727 ); // You cannot lock that down! + from.LocalOverheadMessage( MessageType.Regular, 0x3E9, 501732 ); // I cannot lock this down! + } + else + { + m_House.LockDown( from, (Item)targeted ); + } + } + } + else if ( targeted is StaticTarget ) + { + return; + } + else + { + from.SendLocalizedMessage( 1005377 ); //You cannot lock that down + } + } + } + + public class SecureTarget : Target + { + private bool m_Release; + private BaseHouse m_House; + + public SecureTarget( bool release, BaseHouse house ) : base( 12, false, TargetFlags.None ) + { + CheckLOS = false; + + m_Release = release; + m_House = house; + } + + protected override void OnTargetNotAccessible( Mobile from, object targeted ) + { + OnTarget( from, targeted ); + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !from.Alive || m_House.Deleted || !m_House.IsCoOwner( from ) ) + return; + + if ( targeted is Item ) + { + if ( m_Release ) + { + m_House.ReleaseSecure( from, (Item)targeted ); + } + else + { + if ( targeted is VendorRentalContract ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1062392 ); // You must double click the contract in your pack to lock it down. + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 501732 ); // I cannot lock this down! + } + else + { + m_House.AddSecure( from, (Item)targeted ); + } + } + } + else + { + from.SendLocalizedMessage( 1010424 );//You cannot secure this + } + } + } + + public class HouseKickTarget : Target + { + private BaseHouse m_House; + + public HouseKickTarget( BaseHouse house ) : base( -1, false, TargetFlags.None ) + { + CheckLOS = false; + + m_House = house; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !from.Alive || m_House.Deleted || !m_House.IsFriend( from ) ) + return; + + if ( targeted is Mobile ) + { + m_House.Kick( from, (Mobile)targeted ); + } + else + { + from.SendLocalizedMessage( 501347 );//You cannot eject that from the house! + } + } + } + + public class HouseBanTarget : Target + { + private BaseHouse m_House; + private bool m_Banning; + + public HouseBanTarget( bool ban, BaseHouse house ) : base( -1, false, TargetFlags.None ) + { + CheckLOS = false; + + m_House = house; + m_Banning = ban; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !from.Alive || m_House.Deleted || !m_House.IsFriend( from ) ) + return; + + if ( targeted is Mobile ) + { + if ( m_Banning ) + m_House.Ban( from, (Mobile)targeted ); + else + m_House.RemoveBan( from, (Mobile)targeted ); + } + else + { + from.SendLocalizedMessage( 501347 );//You cannot eject that from the house! + } + } + } + + public class HouseAccessTarget : Target + { + private BaseHouse m_House; + + public HouseAccessTarget( BaseHouse house ) : base( -1, false, TargetFlags.None ) + { + CheckLOS = false; + + m_House = house; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !from.Alive || m_House.Deleted || !m_House.IsFriend( from ) ) + return; + + if ( targeted is Mobile ) + m_House.GrantAccess( from, (Mobile)targeted ); + else + from.SendLocalizedMessage( 1060712 ); // That is not a player. + } + } + + public class CoOwnerTarget : Target + { + private BaseHouse m_House; + private bool m_Add; + + public CoOwnerTarget( bool add, BaseHouse house ) : base( 12, false, TargetFlags.None ) + { + CheckLOS = false; + + m_House = house; + m_Add = add; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !from.Alive || m_House.Deleted || !m_House.IsOwner( from ) ) + return; + + if ( targeted is Mobile ) + { + if ( m_Add ) + m_House.AddCoOwner( from, (Mobile)targeted ); + else + m_House.RemoveCoOwner( from, (Mobile)targeted ); + } + else + { + from.SendLocalizedMessage( 501362 );//That can't be a coowner + } + } + } + + public class HouseFriendTarget : Target + { + private BaseHouse m_House; + private bool m_Add; + + public HouseFriendTarget( bool add, BaseHouse house ) : base( 12, false, TargetFlags.None ) + { + CheckLOS = false; + + m_House = house; + m_Add = add; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( !from.Alive || m_House.Deleted || !m_House.IsCoOwner( from ) ) + return; + + if ( targeted is Mobile ) + { + if ( m_Add ) + m_House.AddFriend( from, (Mobile)targeted ); + else + m_House.RemoveFriend( from, (Mobile)targeted ); + } + else + { + from.SendLocalizedMessage( 501371 ); // That can't be a friend + } + } + } + + public class HouseOwnerTarget : Target + { + private BaseHouse m_House; + + public HouseOwnerTarget( BaseHouse house ) : base( 12, false, TargetFlags.None ) + { + CheckLOS = false; + + m_House = house; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + m_House.BeginConfirmTransfer( from, (Mobile)targeted ); + else + from.SendLocalizedMessage( 501384 ); // Only a player can own a house! + } + } + + #endregion + + public class SetSecureLevelEntry : ContextMenuEntry + { + private Item m_Item; + private ISecurable m_Securable; + + public SetSecureLevelEntry( Item item, ISecurable securable ) : base( 6203, 6 ) + { + m_Item = item; + m_Securable = securable; + } + + public static ISecurable GetSecurable( Mobile from, Item item ) + { + BaseHouse house = BaseHouse.FindHouseAt( item ); + + if ( house == null || !house.IsOwner( from ) || !house.IsAosRules ) + return null; + + ISecurable sec = null; + + if ( item is ISecurable ) + { + bool isOwned = house.Doors.Contains( item ); + + if ( !isOwned ) + isOwned = ( house is HouseFoundation && ((HouseFoundation)house).IsFixture( item ) ); + + if ( !isOwned ) + isOwned = house.IsLockedDown( item ); + + if ( isOwned ) + sec = (ISecurable)item; + } + else + { + ArrayList list = house.Secures; + + for ( int i = 0; sec == null && list != null && i < list.Count; ++i ) + { + SecureInfo si = (SecureInfo)list[i]; + + if ( si.Item == item ) + sec = si; + } + } + + return sec; + } + + public static void AddTo( Mobile from, Item item, List list ) + { + ISecurable sec = GetSecurable( from, item ); + + if ( sec != null ) + list.Add( new SetSecureLevelEntry( item, sec ) ); + } + + public override void OnClick() + { + ISecurable sec = GetSecurable( Owner.From, m_Item ); + + if ( sec != null ) + Owner.From.CloseGump( typeof ( SetSecureLevelGump ) ); + Owner.From.SendGump( new SetSecureLevelGump( Owner.From, sec, BaseHouse.FindHouseAt( m_Item ) ) ); + } + } + + public class TempNoHousingRegion : BaseRegion + { + private Mobile m_RegionOwner; + + public TempNoHousingRegion( BaseHouse house, Mobile regionowner ) + : base( null, house.Map, Region.DefaultPriority, house.Region.Area ) + { + Register(); + + m_RegionOwner = regionowner; + + Timer.DelayCall( house.RestrictedPlacingTime, Unregister ); + } + + public bool CheckAccount( Mobile mobCheck, Mobile accCheck ) + { + if ( accCheck != null ) + { + Account a = accCheck.Account as Account; + + if ( a != null ) + { + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] == mobCheck ) + return true; + } + } + } + + return false; + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + if ( from == m_RegionOwner || CheckAccount( from, m_RegionOwner ) ) + return true; + else + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/BaseBoat.cs b/Scripts/Multis/Boats/BaseBoat.cs new file mode 100644 index 0000000..71dd9b2 --- /dev/null +++ b/Scripts/Multis/Boats/BaseBoat.cs @@ -0,0 +1,1733 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Movement; +using Server.Network; +using Server.Mobiles; + +namespace Server.Multis +{ + public enum BoatOrder + { + Move, + Course, + Single + } + + public abstract class BaseBoat : BaseMulti + { + private static Rectangle2D[] m_SeaWrap = new Rectangle2D[]{ new Rectangle2D( 16, 16, 7168 - 32, 4096 - 32 ) }; + + private static TimeSpan BoatDecayDelay = TimeSpan.FromDays( Server.Misc.Settings.BoatDelete() ); + + public static BaseBoat FindBoatAt( IPoint2D loc, Map map ) + { + Sector sector = map.GetSector( loc ); + + for ( int i = 0; i < sector.Multis.Count; i++ ) + { + BaseBoat boat = sector.Multis[i] as BaseBoat; + + if ( boat != null && boat.Contains( loc.X, loc.Y ) ) + return boat; + } + + return null; + } + + private Hold m_Hold; + private TillerMan m_TillerMan; + private Mobile m_Owner; + + private Direction m_Facing; + + private Direction m_Moving; + private int m_Speed; + + private bool m_Anchored; + private string m_ShipName; + + private BoatOrder m_Order; + + private MapItem m_MapItem; + private int m_NextNavPoint; + + private Plank m_PPlank, m_SPlank; + + private DateTime m_DecayTime; + + private Timer m_TurnTimer; + private Timer m_MoveTimer; + + [CommandProperty( AccessLevel.GameMaster )] + public Hold Hold{ get{ return m_Hold; } set{ m_Hold = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public TillerMan TillerMan{ get{ return m_TillerMan; } set{ m_TillerMan = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Plank PPlank{ get{ return m_PPlank; } set{ m_PPlank = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Plank SPlank{ get{ return m_SPlank; } set{ m_SPlank = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Owner{ get{ return m_Owner; } set{ m_Owner = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Direction Facing{ get{ return m_Facing; } set{ SetFacing( value ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public Direction Moving{ get{ return m_Moving; } set{ m_Moving = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsMoving{ get{ return ( m_MoveTimer != null ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public int Speed{ get{ return m_Speed; } set{ m_Speed = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Anchored{ get{ return m_Anchored; } set{ m_Anchored = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public string ShipName{ get{ return m_ShipName; } set{ m_ShipName = value; if ( m_TillerMan != null ) m_TillerMan.InvalidateProperties(); } } + + [CommandProperty( AccessLevel.GameMaster )] + public BoatOrder Order{ get{ return m_Order; } set{ m_Order = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public MapItem MapItem{ get{ return m_MapItem; } set{ m_MapItem = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int NextNavPoint{ get{ return m_NextNavPoint; } set{ m_NextNavPoint = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime TimeOfDecay{ get{ return m_DecayTime; } set{ m_DecayTime = value; if ( m_TillerMan != null ) m_TillerMan.InvalidateProperties(); } } + + public int Status + { + get + { + DateTime start = TimeOfDecay - BoatDecayDelay; + + if ( DateTime.Now - start < TimeSpan.FromHours( 1.0 ) ) + return 1043010; // This structure is like new. + + if ( DateTime.Now - start < TimeSpan.FromDays( 2.0 ) ) + return 1043011; // This structure is slightly worn. + + if ( DateTime.Now - start < TimeSpan.FromDays( 3.0 ) ) + return 1043012; // This structure is somewhat worn. + + if ( DateTime.Now - start < TimeSpan.FromDays( 4.0 ) ) + return 1043013; // This structure is fairly worn. + + if ( DateTime.Now - start < TimeSpan.FromDays( 5.0 ) ) + return 1043014; // This structure is greatly worn. + + return 1043015; // This structure is in danger of collapsing. + } + } + + public virtual int NorthID{ get{ return 0; } } + public virtual int EastID{ get{ return 0; } } + public virtual int SouthID{ get{ return 0; } } + public virtual int WestID{ get{ return 0; } } + + public virtual int HoldDistance{ get{ return 0; } } + public virtual int TillerManDistance{ get{ return 0; } } + public virtual Point2D StarboardOffset{ get{ return Point2D.Zero; } } + public virtual Point2D PortOffset{ get{ return Point2D.Zero; } } + public virtual Point3D MarkOffset{ get{ return Point3D.Zero; } } + + public virtual BaseDockedBoat DockedBoat{ get{ return null; } } + + private static List m_Instances = new List(); + + public static List Boats{ get{ return m_Instances; } } + + public BaseBoat() : base( 0x0 ) + { + m_DecayTime = DateTime.Now + BoatDecayDelay; + + m_TillerMan = new TillerMan( this ); + m_Hold = new Hold( this ); + + m_PPlank = new Plank( this, PlankSide.Port, 0 ); + m_SPlank = new Plank( this, PlankSide.Starboard, 0 ); + + m_PPlank.MoveToWorld( new Point3D( X + PortOffset.X, Y + PortOffset.Y, Z ), Map ); + m_SPlank.MoveToWorld( new Point3D( X + StarboardOffset.X, Y + StarboardOffset.Y, Z ), Map ); + + Facing = Direction.North; + + m_NextNavPoint = -1; + + Movable = false; + + m_Instances.Add( this ); + } + + public BaseBoat( Serial serial ) : base( serial ) + { + } + + public Point3D GetRotatedLocation( int x, int y ) + { + Point3D p = new Point3D( X + x, Y + y, Z ); + + return Rotate( p, (int)m_Facing / 2 ); + } + + public void UpdateComponents() + { + if ( m_PPlank != null ) + { + m_PPlank.MoveToWorld( GetRotatedLocation( PortOffset.X, PortOffset.Y ), Map ); + m_PPlank.SetFacing( m_Facing ); + } + + if ( m_SPlank != null ) + { + m_SPlank.MoveToWorld( GetRotatedLocation( StarboardOffset.X, StarboardOffset.Y ), Map ); + m_SPlank.SetFacing( m_Facing ); + } + + int xOffset = 0, yOffset = 0; + Movement.Movement.Offset( m_Facing, ref xOffset, ref yOffset ); + + if ( m_TillerMan != null ) + { + m_TillerMan.Location = new Point3D( X + (xOffset * TillerManDistance) + (m_Facing == Direction.North ? 1 : 0), Y + (yOffset * TillerManDistance), m_TillerMan.Z ); + m_TillerMan.SetFacing( m_Facing ); + m_TillerMan.InvalidateProperties(); + } + + if ( m_Hold != null ) + { + m_Hold.Location = new Point3D( X + (xOffset * HoldDistance), Y + (yOffset * HoldDistance), m_Hold.Z ); + m_Hold.SetFacing( m_Facing ); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 3 ); + + writer.Write( (Item) m_MapItem ); + writer.Write( (int) m_NextNavPoint ); + + writer.Write( (int) m_Facing ); + + writer.WriteDeltaTime( m_DecayTime ); + + writer.Write( m_Owner ); + writer.Write( m_PPlank ); + writer.Write( m_SPlank ); + writer.Write( m_TillerMan ); + writer.Write( m_Hold ); + writer.Write( m_Anchored ); + writer.Write( m_ShipName ); + + CheckDecay(); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 3: + { + m_MapItem = (MapItem) reader.ReadItem(); + m_NextNavPoint = reader.ReadInt(); + + goto case 2; + } + case 2: + { + m_Facing = (Direction)reader.ReadInt(); + + goto case 1; + } + case 1: + { + m_DecayTime = reader.ReadDeltaTime(); + + goto case 0; + } + case 0: + { + if ( version < 3 ) + m_NextNavPoint = -1; + + if ( version < 2 ) + { + if ( ItemID == NorthID ) + m_Facing = Direction.North; + else if ( ItemID == SouthID ) + m_Facing = Direction.South; + else if ( ItemID == EastID ) + m_Facing = Direction.East; + else if ( ItemID == WestID ) + m_Facing = Direction.West; + } + + m_Owner = reader.ReadMobile(); + m_PPlank = reader.ReadItem() as Plank; + m_SPlank = reader.ReadItem() as Plank; + m_TillerMan = reader.ReadItem() as TillerMan; + m_Hold = reader.ReadItem() as Hold; + m_Anchored = reader.ReadBool(); + m_ShipName = reader.ReadString(); + + if ( version < 1) + Refresh(); + + break; + } + } + + m_Instances.Add( this ); + } + + public static bool NearDock( Mobile m ) + { + if ( m is PlayerMobile ) + { + if ( ((PlayerMobile)m).NpcGuild == NpcGuild.MarinersGuild ) + return true; + } + + int range = 30; + bool dock = false; + + IPooledEnumerable eable = (m.Map).GetItemsInRange( m.Location, range ); + + foreach ( Item item in eable ) + { + if ( item is BaseHouse ) + { + BaseHouse house = (BaseHouse)item; + + if ( house.IsOwner( m ) || house.IsCoOwner( m ) || house.IsFriend( m ) || house.IsGuildMember( m ) ) + { + dock = true; + break; + } + } + } + + eable.Free(); + + if ( !dock ) + { + for ( int x = -range; !dock && x <= range; ++x ) + { + for ( int y = -range; !dock && y <= range; ++y ) + { + StaticTile[] tiles = (m.Map).Tiles.GetStaticTiles( m.X+x, m.Y+y, true ); + + for ( int i = 0; !dock && i < tiles.Length; ++i ) + { + int id = tiles[i].ID; + + bool isDock = ( id == 0x14F7 || id == 0x14F9 ); + + if ( isDock ) + { + dock = true; + break; + } + } + } + } + } + + return dock; + } + + public void RemoveKeys( Mobile m ) + { + uint keyValue = 0; + + if ( m_PPlank != null ) + keyValue = m_PPlank.KeyValue; + + if ( keyValue == 0 && m_SPlank != null ) + keyValue = m_SPlank.KeyValue; + + Key.RemoveKeys( m, keyValue ); + } + + public uint CreateKeys( Mobile m ) + { + uint value = Key.RandomValue(); + + Key packKey = new Key( KeyType.Gold, value, this ); + Key innKey = new Key( KeyType.Gold, value, this ); + + packKey.MaxRange = 10; + innKey.MaxRange = 10; + + packKey.Name = "a ship key"; + innKey.Name = "a ship key"; + + InnBox box = m.InnBox; + + if ( !box.TryDropItem( m, innKey, false ) ) + innKey.Delete(); + else + m.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502484 ); // A ship's key is now in my safety deposit box. + + if ( m.AddToBackpack( packKey ) ) + m.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502485 ); // A ship's key is now in my backpack. + else + m.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502483 ); // A ship's key is now at my feet. + + return value; + } + + public override void OnAfterDelete() + { + if ( m_TillerMan != null ) + m_TillerMan.Delete(); + + if ( m_Hold != null ) + m_Hold.Delete(); + + if ( m_PPlank != null ) + m_PPlank.Delete(); + + if ( m_SPlank != null ) + m_SPlank.Delete(); + + if ( m_TurnTimer != null ) + m_TurnTimer.Stop(); + + if ( m_MoveTimer != null ) + m_MoveTimer.Stop(); + + m_Instances.Remove( this ); + } + + public override void OnLocationChange( Point3D old ) + { + if ( m_TillerMan != null ) + m_TillerMan.Location = new Point3D( X + (m_TillerMan.X - old.X), Y + (m_TillerMan.Y - old.Y), Z + (m_TillerMan.Z - old.Z ) ); + + if ( m_Hold != null ) + m_Hold.Location = new Point3D( X + (m_Hold.X - old.X), Y + (m_Hold.Y - old.Y), Z + (m_Hold.Z - old.Z ) ); + + if ( m_PPlank != null ) + m_PPlank.Location = new Point3D( X + (m_PPlank.X - old.X), Y + (m_PPlank.Y - old.Y), Z + (m_PPlank.Z - old.Z ) ); + + if ( m_SPlank != null ) + m_SPlank.Location = new Point3D( X + (m_SPlank.X - old.X), Y + (m_SPlank.Y - old.Y), Z + (m_SPlank.Z - old.Z ) ); + } + + public override void OnMapChange() + { + if ( m_TillerMan != null ) + m_TillerMan.Map = Map; + + if ( m_Hold != null ) + m_Hold.Map = Map; + + if ( m_PPlank != null ) + m_PPlank.Map = Map; + + if ( m_SPlank != null ) + m_SPlank.Map = Map; + } + + public bool CanCommand( Mobile m ) + { + return true; + } + + public Point3D GetMarkedLocation() + { + Point3D p = new Point3D( X + MarkOffset.X, Y + MarkOffset.Y, Z + MarkOffset.Z ); + + return Rotate( p, (int)m_Facing / 2 ); + } + + public bool CheckKey( uint keyValue ) + { + if ( m_SPlank != null && m_SPlank.KeyValue == keyValue ) + return true; + + if ( m_PPlank != null && m_PPlank.KeyValue == keyValue ) + return true; + + return false; + } + + private static TimeSpan SlowInterval = TimeSpan.FromSeconds( 0.75 ); + private static TimeSpan FastInterval = TimeSpan.FromSeconds( 0.75 ); + + private static int SlowSpeed = 1; + private static int FastSpeed = 3; + + private static TimeSpan SlowDriftInterval = TimeSpan.FromSeconds( 1.50 ); + private static TimeSpan FastDriftInterval = TimeSpan.FromSeconds( 0.75 ); + + private static int SlowDriftSpeed = 1; + private static int FastDriftSpeed = 1; + + private static Direction Forward = Direction.North; + private static Direction ForwardLeft = Direction.Up; + private static Direction ForwardRight = Direction.Right; + private static Direction Backward = Direction.South; + private static Direction BackwardLeft = Direction.Left; + private static Direction BackwardRight = Direction.Down; + private static Direction Left = Direction.West; + private static Direction Right = Direction.East; + private static Direction Port = Left; + private static Direction Starboard = Right; + + private bool m_Decaying; + + public void Refresh() + { + m_DecayTime = DateTime.Now + BoatDecayDelay; + + if( m_TillerMan != null ) + m_TillerMan.InvalidateProperties(); + } + + private class DecayTimer : Timer + { + private BaseBoat m_Boat; + private int m_Count; + + public DecayTimer( BaseBoat boat ) : base( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 5.0 ) ) + { + m_Boat = boat; + + Priority = TimerPriority.TwoFiftyMS; + } + + protected override void OnTick() + { + if ( m_Count == 5 ) + { + m_Boat.Delete(); + Stop(); + } + else + { + m_Boat.Location = new Point3D( m_Boat.X, m_Boat.Y, m_Boat.Z - 1 ); + + if ( m_Boat.TillerMan != null ) + m_Boat.TillerMan.Say( 1007168 + m_Count ); + + ++m_Count; + } + } + } + + public bool CheckDecay() + { + if ( m_Decaying ) + return true; + + if ( !IsMoving && DateTime.Now >= m_DecayTime ) + { + new DecayTimer( this ).Start(); + + m_Decaying = true; + + return true; + } + + return false; + } + + public bool LowerAnchor( bool message ) + { + if ( CheckDecay() ) + return false; + + if ( m_Anchored ) + { + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501445 ); // Ar, the anchor was already dropped sir. + + return false; + } + + StopMove( false ); + + m_Anchored = true; + + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501444 ); // Ar, anchor dropped sir. + + return true; + } + + public bool RaiseAnchor( bool message ) + { + if ( CheckDecay() ) + return false; + + if ( !m_Anchored ) + { + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501447 ); // Ar, the anchor has not been dropped sir. + + return false; + } + + m_Anchored = false; + + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501446 ); // Ar, anchor raised sir. + + return true; + } + + public bool StartMove( Direction dir, bool fast ) + { + if ( CheckDecay() ) + return false; + + bool drift = ( dir != Forward && dir != ForwardLeft && dir != ForwardRight ); + TimeSpan interval = (fast ? (drift ? FastDriftInterval : FastInterval) : (drift ? SlowDriftInterval : SlowInterval)); + int speed = (fast ? (drift ? FastDriftSpeed : FastSpeed) : (drift ? SlowDriftSpeed : SlowSpeed)); + + if ( StartMove( dir, speed, interval, false, true ) ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 501429 ); // Aye aye sir. + + return true; + } + + return false; + } + + public bool OneMove( Direction dir ) + { + if ( CheckDecay() ) + return false; + + bool drift = ( dir != Forward ); + TimeSpan interval = drift ? FastDriftInterval : FastInterval; + int speed = drift ? FastDriftSpeed : FastSpeed; + + if ( StartMove( dir, speed, interval, true, true ) ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 501429 ); // Aye aye sir. + + return true; + } + + return false; + } + + public void BeginRename( Mobile from ) + { + if ( CheckDecay() ) + return; + + if ( from.AccessLevel < AccessLevel.GameMaster && from != m_Owner ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( Utility.Random( 1042876, 4 ) ); // Arr, don't do that! | Arr, leave me alone! | Arr, watch what thour'rt doing, matey! | Arr! Do that again and I'll throw ye overhead! + + return; + } + + if ( m_TillerMan != null ) + m_TillerMan.Say( 502580 ); // What dost thou wish to name thy ship? + + from.Prompt = new RenameBoatPrompt( this ); + } + + public void EndRename( Mobile from, string newName ) + { + if ( Deleted || CheckDecay() ) + return; + + if ( from.AccessLevel < AccessLevel.GameMaster && from != m_Owner ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 1042880 ); // Arr! Only the owner of the ship may change its name! + + return; + } + else if ( !from.Alive ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 502582 ); // You appear to be dead. + + return; + } + + newName = newName.Trim(); + + if ( newName.Length == 0 ) + newName = null; + + Rename( newName ); + } + + public enum DryDockResult{ Valid, Dead, NoKey, NotAnchored, Mobiles, Items, Hold, Decaying } + + public DryDockResult CheckDryDock( Mobile from ) + { + if ( CheckDecay() ) + return DryDockResult.Decaying; + + if ( !from.Alive ) + return DryDockResult.Dead; + + Container pack = from.Backpack; + if ( (m_SPlank == null || !Key.ContainsKey( pack, m_SPlank.KeyValue )) && (m_PPlank == null || !Key.ContainsKey( pack, m_PPlank.KeyValue )) ) + return DryDockResult.NoKey; + + if ( !m_Anchored ) + return DryDockResult.NotAnchored; + + if ( m_Hold != null && m_Hold.Items.Count > 0 ) + return DryDockResult.Hold; + + Map map = Map; + + if ( map == null || map == Map.Internal ) + return DryDockResult.Items; + + MultiComponentList mcl = Components; + + IPooledEnumerable eable = map.GetObjectsInBounds( new Rectangle2D( X + mcl.Min.X, Y + mcl.Min.Y, mcl.Width, mcl.Height ) ); + + foreach ( object o in eable ) + { + if ( o == this || o == m_Hold || o == m_SPlank || o == m_PPlank || o == m_TillerMan ) + continue; + + if ( o is Item && Contains( (Item)o ) ) + { + eable.Free(); + return DryDockResult.Items; + } + else if ( o is Mobile && Contains( (Mobile)o ) ) + { + eable.Free(); + return DryDockResult.Mobiles; + } + } + + eable.Free(); + return DryDockResult.Valid; + } + + public void BeginDryDock( Mobile from ) + { + if ( CheckDecay() ) + return; + + if ( !NearDock( from ) ) + { + from.SendMessage( "You cannot dock a ship here" ); + return; + } + + DryDockResult result = CheckDryDock( from ); + + if ( result == DryDockResult.Dead ) + from.SendLocalizedMessage( 502493 ); // You appear to be dead. + else if ( result == DryDockResult.NoKey ) + from.SendLocalizedMessage( 502494 ); // You must have a key to the ship to dock the boat. + else if ( result == DryDockResult.NotAnchored ) + from.SendLocalizedMessage( 1010570 ); // You must lower the anchor to dock the boat. + else if ( result == DryDockResult.Mobiles ) + from.SendLocalizedMessage( 502495 ); // You cannot dock the ship with beings on board! + else if ( result == DryDockResult.Items ) + from.SendLocalizedMessage( 502496 ); // You cannot dock the ship with a cluttered deck. + else if ( result == DryDockResult.Hold ) + from.SendLocalizedMessage( 502497 ); // Make sure your hold is empty, and try again! + else if ( result == DryDockResult.Valid ) + from.SendGump( new ConfirmDryDockGump( from, this ) ); + } + + public void EndDryDock( Mobile from ) + { + if ( Deleted || CheckDecay() ) + return; + + if ( !NearDock( from ) ) + { + from.SendMessage( "You cannot dock a ship here" ); + return; + } + + DryDockResult result = CheckDryDock( from ); + + if ( result == DryDockResult.Dead ) + from.SendLocalizedMessage( 502493 ); // You appear to be dead. + else if ( result == DryDockResult.NoKey ) + from.SendLocalizedMessage( 502494 ); // You must have a key to the ship to dock the boat. + else if ( result == DryDockResult.NotAnchored ) + from.SendLocalizedMessage( 1010570 ); // You must lower the anchor to dock the boat. + else if ( result == DryDockResult.Mobiles ) + from.SendLocalizedMessage( 502495 ); // You cannot dock the ship with beings on board! + else if ( result == DryDockResult.Items ) + from.SendLocalizedMessage( 502496 ); // You cannot dock the ship with a cluttered deck. + else if ( result == DryDockResult.Hold ) + from.SendLocalizedMessage( 502497 ); // Make sure your hold is empty, and try again! + + if ( result != DryDockResult.Valid ) + return; + + BaseDockedBoat boat = DockedBoat; + + if ( boat == null ) + return; + + Effects.PlaySound( from.Location, from.Map, 0x026 ); + + RemoveKeys( from ); + + from.AddToBackpack( boat ); + Delete(); + } + + public void SetName( SpeechEventArgs e ) + { + if ( CheckDecay() ) + return; + + if ( e.Mobile.AccessLevel < AccessLevel.GameMaster && e.Mobile != m_Owner ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 1042880 ); // Arr! Only the owner of the ship may change its name! + + return; + } + else if ( !e.Mobile.Alive ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 502582 ); // You appear to be dead. + + return; + } + + if ( e.Speech.Length > 8 ) + { + string newName = e.Speech.Substring( 8 ).Trim(); + + if ( newName.Length == 0 ) + newName = null; + + Rename( newName ); + } + } + + public void Rename( string newName ) + { + if ( CheckDecay() ) + return; + + if ( newName != null && newName.Length > 40 ) + newName = newName.Substring( 0, 40 ); + + if ( m_ShipName == newName ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 502531 ); // Yes, sir. + + return; + } + + ShipName = newName; + + if ( m_TillerMan != null && m_ShipName != null ) + m_TillerMan.Say( 1042885, m_ShipName ); // This ship is now called the ~1_NEW_SHIP_NAME~. + else if ( m_TillerMan != null ) + m_TillerMan.Say( 502534 ); // This ship now has no name. + } + + public void RemoveName( Mobile m ) + { + if ( CheckDecay() ) + return; + + if ( m.AccessLevel < AccessLevel.GameMaster && m != m_Owner ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 1042880 ); // Arr! Only the owner of the ship may change its name! + + return; + } + else if ( !m.Alive ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 502582 ); // You appear to be dead. + + return; + } + + if ( m_ShipName == null ) + { + if ( m_TillerMan != null ) + m_TillerMan.Say( 502526 ); // Ar, this ship has no name. + + return; + } + + ShipName = null; + + if ( m_TillerMan != null ) + m_TillerMan.Say( 502534 ); // This ship now has no name. + } + + public void GiveName( Mobile m ) + { + if ( m_TillerMan == null || CheckDecay() ) + return; + + if ( m_ShipName == null ) + m_TillerMan.Say( 502526 ); // Ar, this ship has no name. + else + m_TillerMan.Say( 1042881, m_ShipName ); // This is the ~1_BOAT_NAME~. + } + + public void GiveNavPoint() + { + if ( TillerMan == null || CheckDecay() ) + return; + + if ( NextNavPoint < 0 ) + TillerMan.Say( 1042882 ); // I have no current nav point. + else + TillerMan.Say( 1042883, (NextNavPoint + 1).ToString() ); // My current destination navpoint is nav ~1_NAV_POINT_NUM~. + } + + public void AssociateMap( MapItem map ) + { + if ( CheckDecay() ) + return; + + if ( map is BlankMap ) + { + if ( TillerMan != null ) + TillerMan.Say( 502575 ); // Ar, that is not a map, tis but a blank piece of paper! + } + else if ( map.Pins.Count == 0 ) + { + if ( TillerMan != null ) + TillerMan.Say( 502576 ); // Arrrr, this map has no course on it! + } + else + { + StopMove( false ); + + MapItem = map; + NextNavPoint = -1; + + if ( TillerMan != null ) + TillerMan.Say( 502577 ); // A map! + } + } + + public bool StartCourse( string navPoint, bool single, bool message ) + { + int number = -1; + + int start = -1; + for ( int i = 0; i < navPoint.Length; i++ ) + { + if ( Char.IsDigit( navPoint[i] ) ) + { + start = i; + break; + } + } + + if ( start != -1 ) + { + string sNumber = navPoint.Substring( start ); + + if ( !int.TryParse( sNumber, out number ) ) + number = -1; + + if ( number != -1 ) + { + number--; + + if ( MapItem == null || number < 0 || number >= MapItem.Pins.Count ) + { + number = -1; + } + } + } + + if ( number == -1 ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 1042551 ); // I don't see that navpoint, sir. + + return false; + } + + NextNavPoint = number; + return StartCourse( single, message ); + } + + public bool StartCourse( bool single, bool message ) + { + if ( CheckDecay() ) + return false; + + if ( Anchored ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 501419 ); // Ar, the anchor is down sir! + + return false; + } + else if ( MapItem == null || MapItem.Deleted ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 502513 ); // I have seen no map, sir. + + return false; + } + else if ( this.Map != MapItem.Map || !this.Contains( MapItem.GetWorldLocation() ) ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 502514 ); // The map is too far away from me, sir. + + return false; + } + else if ( this.Map != Map.Britannia || NextNavPoint < 0 || NextNavPoint >= MapItem.Pins.Count ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 1042551 ); // I don't see that navpoint, sir. + + return false; + } + + Speed = FastSpeed; + Order = single ? BoatOrder.Single : BoatOrder.Course; + + if ( m_MoveTimer != null ) + m_MoveTimer.Stop(); + + m_MoveTimer = new MoveTimer( this, FastInterval, false ); + m_MoveTimer.Start(); + + if ( message && TillerMan != null ) + TillerMan.Say( 501429 ); // Aye aye sir. + + return true; + } + + public override bool HandlesOnSpeech{ get{ return true; } } + + public override void OnSpeech( SpeechEventArgs e ) + { + if ( CheckDecay() ) + return; + + Mobile from = e.Mobile; + + if ( CanCommand( from ) && Contains( from ) ) + { + for ( int i = 0; i < e.Keywords.Length; ++i ) + { + int keyword = e.Keywords[i]; + + if ( keyword >= 0x42 && keyword <= 0x6B ) + { + switch ( keyword ) + { + case 0x42: SetName( e ); break; + case 0x43: RemoveName( e.Mobile ); break; + case 0x44: GiveName( e.Mobile ); break; + case 0x45: StartMove( Forward, true ); break; + case 0x46: StartMove( Backward, true ); break; + case 0x47: StartMove( Left, true ); break; + case 0x48: StartMove( Right, true ); break; + case 0x4B: StartMove( ForwardLeft, true ); break; + case 0x4C: StartMove( ForwardRight, true ); break; + case 0x4D: StartMove( BackwardLeft, true ); break; + case 0x4E: StartMove( BackwardRight, true ); break; + case 0x4F: StopMove( true ); break; + case 0x50: StartMove( Left, false ); break; + case 0x51: StartMove( Right, false ); break; + case 0x52: StartMove( Forward, false ); break; + case 0x53: StartMove( Backward, false ); break; + case 0x54: StartMove( ForwardLeft, false ); break; + case 0x55: StartMove( ForwardRight, false ); break; + case 0x56: StartMove( BackwardRight, false ); break; + case 0x57: StartMove( BackwardLeft, false ); break; + case 0x58: OneMove( Left ); break; + case 0x59: OneMove( Right ); break; + case 0x5A: OneMove( Forward ); break; + case 0x5B: OneMove( Backward ); break; + case 0x5C: OneMove( ForwardLeft ); break; + case 0x5D: OneMove( ForwardRight ); break; + case 0x5E: OneMove( BackwardRight ); break; + case 0x5F: OneMove( BackwardLeft ); break; + case 0x49: case 0x65: StartTurn( 2, true ); break; // turn right + case 0x4A: case 0x66: StartTurn( -2, true ); break; // turn left + case 0x67: StartTurn( -4, true ); break; // turn around, come about + case 0x68: StartMove( Forward, true ); break; + case 0x69: StopMove( true ); break; + case 0x6A: LowerAnchor( true ); break; + case 0x6B: RaiseAnchor( true ); break; + case 0x60: GiveNavPoint(); break; // nav + case 0x61: NextNavPoint = 0; StartCourse( false, true ); break; // start + case 0x62: StartCourse( false, true ); break; // continue + case 0x63: StartCourse( e.Speech, false, true ); break; // goto* + case 0x64: StartCourse( e.Speech, true, true ); break; // single* + } + + break; + } + } + } + } + + public bool StartTurn( int offset, bool message ) + { + if ( CheckDecay() ) + return false; + + if ( m_Anchored ) + { + if ( message ) + m_TillerMan.Say( 501419 ); // Ar, the anchor is down sir! + + return false; + } + else + { + if ( m_MoveTimer != null && this.Order != BoatOrder.Move ) + { + m_MoveTimer.Stop(); + m_MoveTimer = null; + } + + if ( m_TurnTimer != null ) + m_TurnTimer.Stop(); + + m_TurnTimer = new TurnTimer( this, offset ); + m_TurnTimer.Start(); + + if ( message && TillerMan != null ) + TillerMan.Say( 501429 ); // Aye aye sir. + + return true; + } + } + + public bool Turn( int offset, bool message ) + { + if ( m_TurnTimer != null ) + { + m_TurnTimer.Stop(); + m_TurnTimer = null; + } + + if ( CheckDecay() ) + return false; + + if ( m_Anchored ) + { + if ( message ) + m_TillerMan.Say( 501419 ); // Ar, the anchor is down sir! + + return false; + } + else if ( SetFacing( (Direction)(((int)m_Facing + offset) & 0x7) ) ) + { + return true; + } + else + { + if ( message ) + m_TillerMan.Say( 501423 ); // Ar, can't turn sir. + + return false; + } + } + + private class TurnTimer : Timer + { + private BaseBoat m_Boat; + private int m_Offset; + + public TurnTimer( BaseBoat boat, int offset ) : base( TimeSpan.FromSeconds( 0.5 ) ) + { + m_Boat = boat; + m_Offset = offset; + + Priority = TimerPriority.TenMS; + } + + protected override void OnTick() + { + if ( !m_Boat.Deleted ) + m_Boat.Turn( m_Offset, true ); + } + } + + public bool StartMove( Direction dir, int speed, TimeSpan interval, bool single, bool message ) + { + if ( CheckDecay() ) + return false; + + if ( m_Anchored ) + { + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501419 ); // Ar, the anchor is down sir! + + return false; + } + + m_Moving = dir; + m_Speed = speed; + m_Order = BoatOrder.Move; + + if ( m_MoveTimer != null ) + m_MoveTimer.Stop(); + + m_MoveTimer = new MoveTimer( this, interval, single ); + m_MoveTimer.Start(); + + return true; + } + + public bool StopMove( bool message ) + { + if ( CheckDecay() ) + return false; + + if ( m_MoveTimer == null ) + { + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501443 ); // Er, the ship is not moving sir. + + return false; + } + + m_Moving = Direction.North; + m_Speed = 0; + m_MoveTimer.Stop(); + m_MoveTimer = null; + + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501429 ); // Aye aye sir. + + return true; + } + + public bool CanFit( Point3D p, Map map, int itemID ) + { + if ( map == null || map == Map.Internal || Deleted || CheckDecay() ) + return false; + + MultiComponentList newComponents = MultiData.GetComponents( itemID ); + + for ( int x = 0; x < newComponents.Width; ++x ) + { + for ( int y = 0; y < newComponents.Height; ++y ) + { + int tx = p.X + newComponents.Min.X + x; + int ty = p.Y + newComponents.Min.Y + y; + + if ( newComponents.Tiles[x][y].Length == 0 || Contains( tx, ty ) ) + continue; + + LandTile landTile = map.Tiles.GetLandTile( tx, ty ); + StaticTile[] tiles = map.Tiles.GetStaticTiles( tx, ty, true ); + + bool hasWater = false; + + if ( landTile.Z == p.Z && ((landTile.ID >= 168 && landTile.ID <= 171) || (landTile.ID >= 310 && landTile.ID <= 311)) ) + hasWater = true; + + int z = p.Z; + + //int landZ = 0, landAvg = 0, landTop = 0; + + //map.GetAverageZ( tx, ty, ref landZ, ref landAvg, ref landTop ); + + //if ( !landTile.Ignored && top > landZ && landTop > z ) + // return false; + + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + bool isWater = ( tile.ID >= 0x1796 && tile.ID <= 0x17B2 ); + + if ( tile.Z == p.Z && isWater ) + hasWater = true; + else if ( tile.Z >= p.Z && !isWater ) + return false; + } + + if ( !hasWater ) + return false; + } + } + + IPooledEnumerable eable = map.GetItemsInBounds( new Rectangle2D( p.X + newComponents.Min.X, p.Y + newComponents.Min.Y, newComponents.Width, newComponents.Height ) ); + + foreach ( Item item in eable ) + { + if ( item is BaseMulti || item.ItemID > TileData.MaxItemValue || item.Z < p.Z || !item.Visible ) + continue; + + int x = item.X - p.X + newComponents.Min.X; + int y = item.Y - p.Y + newComponents.Min.Y; + + if ( x >= 0 && x < newComponents.Width && y >= 0 && y < newComponents.Height && newComponents.Tiles[x][y].Length == 0 ) + continue; + else if ( Contains( item ) ) + continue; + + eable.Free(); + return false; + } + + eable.Free(); + + return true; + } + + public Point3D Rotate( Point3D p, int count ) + { + int rx = p.X - Location.X; + int ry = p.Y - Location.Y; + + for ( int i = 0; i < count; ++i ) + { + int temp = rx; + rx = -ry; + ry = temp; + } + + return new Point3D( Location.X + rx, Location.Y + ry, p.Z ); + } + + public override bool Contains( int x, int y ) + { + if ( base.Contains( x, y ) ) + return true; + + if ( m_TillerMan != null && x == m_TillerMan.X && y == m_TillerMan.Y ) + return true; + + if ( m_Hold != null && x == m_Hold.X && y == m_Hold.Y ) + return true; + + if ( m_PPlank != null && x == m_PPlank.X && y == m_PPlank.Y ) + return true; + + if ( m_SPlank != null && x == m_SPlank.X && y == m_SPlank.Y ) + return true; + + return false; + } + + public static bool IsValidLocation( Point3D p, Map map ) + { + Rectangle2D[] wrap = GetWrapFor( map ); + + for ( int i = 0; i < wrap.Length; ++i ) + { + if ( wrap[i].Contains( p ) ) + return true; + } + + return false; + } + + public static Rectangle2D[] GetWrapFor( Map m ) + { + return m_SeaWrap; + } + + public Direction GetMovementFor( int x, int y, out int maxSpeed ) + { + int dx = x - this.X; + int dy = y - this.Y; + + int adx = Math.Abs( dx ); + int ady = Math.Abs( dy ); + + Direction dir = Utility.GetDirection( this, new Point2D( x, y ) ); + int iDir = (int) dir; + + // Compute the maximum distance we can travel without going too far away + if ( iDir % 2 == 0 ) // North, East, South and West + maxSpeed = Math.Abs( adx - ady ); + else // Right, Down, Left and Up + maxSpeed = Math.Min( adx, ady ); + + return (Direction) ((iDir - (int)Facing) & 0x7); + } + + public bool DoMovement( bool message ) + { + Direction dir; + int speed; + + if ( this.Order == BoatOrder.Move ) + { + dir = this.Moving; + speed = this.Speed; + } + else if ( MapItem == null || MapItem.Deleted ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 502513 ); // I have seen no map, sir. + + return false; + } + else if ( this.Map != MapItem.Map || !this.Contains( MapItem.GetWorldLocation() ) ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 502514 ); // The map is too far away from me, sir. + + return false; + } + else if ( this.Map != Map.Britannia || NextNavPoint < 0 || NextNavPoint >= MapItem.Pins.Count ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 1042551 ); // I don't see that navpoint, sir. + + return false; + } + else + { + Point2D dest = (Point2D) MapItem.Pins[NextNavPoint]; + + int x, y; + MapItem.ConvertToWorld( dest.X, dest.Y, out x, out y ); + + int maxSpeed; + dir = GetMovementFor( x, y, out maxSpeed ); + + if ( maxSpeed == 0 ) + { + if ( message && this.Order == BoatOrder.Single && TillerMan != null ) + TillerMan.Say( 1042874, (NextNavPoint + 1).ToString() ); // We have arrived at nav point ~1_POINT_NUM~ , sir. + + if ( NextNavPoint + 1 < MapItem.Pins.Count ) + { + NextNavPoint++; + + if ( this.Order == BoatOrder.Course ) + { + if ( message && TillerMan != null ) + TillerMan.Say( 1042875, (NextNavPoint + 1).ToString() ); // Heading to nav point ~1_POINT_NUM~, sir. + + return true; + } + + return false; + } + else + { + NextNavPoint = -1; + + if ( message && this.Order == BoatOrder.Course && TillerMan != null ) + TillerMan.Say( 502515 ); // The course is completed, sir. + + return false; + } + } + + if ( dir == Left || dir == BackwardLeft || dir == Backward ) + return Turn( -2, true ); + else if ( dir == Right || dir == BackwardRight ) + return Turn( 2, true ); + + speed = Math.Min( this.Speed, maxSpeed ); + } + + return Move( dir, speed, true ); + } + + public bool Move( Direction dir, int speed, bool message ) + { + Map map = Map; + + if ( map == null || Deleted || CheckDecay() ) + return false; + + if ( m_Anchored ) + { + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501419 ); // Ar, the anchor is down sir! + + return false; + } + + int rx = 0, ry = 0; + Movement.Movement.Offset( (Direction)(((int)m_Facing + (int)dir) & 0x7), ref rx, ref ry ); + + for ( int i = 1; i <= speed; ++i ) + { + if ( !CanFit( new Point3D( X + (i * rx), Y + (i * ry), Z ), Map, ItemID ) ) + { + if ( i == 1 ) + { + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501424 ); // Ar, we've stopped sir. + + return false; + } + + speed = i - 1; + break; + } + } + + int xOffset = speed*rx; + int yOffset = speed*ry; + + int newX = X + xOffset; + int newY = Y + yOffset; + + Rectangle2D[] wrap = GetWrapFor( map ); + + for ( int i = 0; i < wrap.Length; ++i ) + { + Rectangle2D rect = wrap[i]; + + if ( rect.Contains( new Point2D( X, Y ) ) && !rect.Contains( new Point2D( newX, newY ) ) ) + { + if ( newX < rect.X ) + newX = rect.X + rect.Width - 1; + else if ( newX >= rect.X + rect.Width ) + newX = rect.X; + + if ( newY < rect.Y ) + newY = rect.Y + rect.Height - 1; + else if ( newY >= rect.Y + rect.Height ) + newY = rect.Y; + + for ( int j = 1; j <= speed; ++j ) + { + if ( !CanFit( new Point3D( newX + (j * rx), newY + (j * ry), Z ), Map, ItemID ) ) + { + if ( message && m_TillerMan != null ) + m_TillerMan.Say( 501424 ); // Ar, we've stopped sir. + + return false; + } + } + + xOffset = newX - X; + yOffset = newY - Y; + } + } + + Teleport( xOffset, yOffset, 0 ); + + return true; + } + + public void Teleport( int xOffset, int yOffset, int zOffset ) + { + MultiComponentList mcl = Components; + + ArrayList toMove = new ArrayList(); + + IPooledEnumerable eable = this.Map.GetObjectsInBounds( new Rectangle2D( X + mcl.Min.X, Y + mcl.Min.Y, mcl.Width, mcl.Height ) ); + + foreach ( object o in eable ) + { + if ( o != this && !(o is TillerMan || o is Hold || o is Plank) ) + toMove.Add( o ); + } + + eable.Free(); + + for ( int i = 0; i < toMove.Count; ++i ) + { + object o = toMove[i]; + + if ( o is Item ) + { + Item item = (Item)o; + + if ( Contains( item ) && item.Visible && item.Z >= Z ) + item.Location = new Point3D( item.X + xOffset, item.Y + yOffset, item.Z + zOffset ); + } + else if ( o is Mobile ) + { + Mobile m = (Mobile)o; + + if ( Contains( m ) ) + m.Location = new Point3D( m.X + xOffset, m.Y + yOffset, m.Z + zOffset ); + } + } + + Location = new Point3D( X + xOffset, Y + yOffset, Z + zOffset ); + } + + public bool SetFacing( Direction facing ) + { + if ( Parent != null || this.Map == null ) + return false; + + if ( CheckDecay() ) + return false; + + if ( Map != Map.Internal ) + { + switch ( facing ) + { + case Direction.North: if ( !CanFit( Location, Map, NorthID ) ) return false; break; + case Direction.East: if ( !CanFit( Location, Map, EastID ) ) return false; break; + case Direction.South: if ( !CanFit( Location, Map, SouthID ) ) return false; break; + case Direction.West: if ( !CanFit( Location, Map, WestID ) ) return false; break; + } + } + + this.Map.OnLeave( this ); + + Direction old = m_Facing; + + m_Facing = facing; + + if ( m_TillerMan != null ) + m_TillerMan.SetFacing( facing ); + + if ( m_Hold != null ) + m_Hold.SetFacing( facing ); + + if ( m_PPlank != null ) + m_PPlank.SetFacing( facing ); + + if ( m_SPlank != null ) + m_SPlank.SetFacing( facing ); + + MultiComponentList mcl = Components; + + ArrayList toMove = new ArrayList(); + + toMove.Add( m_PPlank ); + toMove.Add( m_SPlank ); + + IPooledEnumerable eable = Map.GetObjectsInBounds( new Rectangle2D( X + mcl.Min.X, Y + mcl.Min.Y, mcl.Width, mcl.Height ) ); + + foreach ( object o in eable ) + { + if ( o is Item ) + { + Item item = (Item)o; + + if ( item != this && Contains( item ) && item.Visible && item.Z >= Z && !(item is TillerMan || item is Hold || item is Plank) ) + toMove.Add( item ); + } + else if ( o is Mobile && Contains( (Mobile)o ) ) + { + toMove.Add( o ); + + ((Mobile)o).Direction = (Direction)((int)((Mobile)o).Direction - (int)old + (int)facing); + } + } + + eable.Free(); + + int xOffset = 0, yOffset = 0; + Movement.Movement.Offset( facing, ref xOffset, ref yOffset ); + + if ( m_TillerMan != null ) + m_TillerMan.Location = new Point3D( X + (xOffset * TillerManDistance) + (facing == Direction.North ? 1 : 0), Y + (yOffset * TillerManDistance), m_TillerMan.Z ); + + if ( m_Hold != null ) + m_Hold.Location = new Point3D( X + (xOffset * HoldDistance), Y + (yOffset * HoldDistance), m_Hold.Z ); + + int count = (int)(m_Facing - old) & 0x7; + count /= 2; + + for ( int i = 0; i < toMove.Count; ++i ) + { + object o = toMove[i]; + + if ( o is Item ) + ((Item)o).Location = Rotate( ((Item)o).Location, count ); + else if ( o is Mobile ) + ((Mobile)o).Location = Rotate( ((Mobile)o).Location, count ); + } + + switch ( facing ) + { + case Direction.North: ItemID = NorthID; break; + case Direction.East: ItemID = EastID; break; + case Direction.South: ItemID = SouthID; break; + case Direction.West: ItemID = WestID; break; + } + + this.Map.OnEnter( this ); + + return true; + } + + private class MoveTimer : Timer + { + private BaseBoat m_Boat; + + public MoveTimer( BaseBoat boat, TimeSpan interval, bool single ) : base( interval, interval, single ? 1 : 0 ) + { + m_Boat = boat; + Priority = TimerPriority.TwentyFiveMS; + } + + protected override void OnTick() + { + if ( !m_Boat.DoMovement( true ) ) + m_Boat.StopMove( false ); + } + } + + public static void UpdateAllComponents() + { + for ( int i = m_Instances.Count - 1; i >= 0; --i ) + m_Instances[i].UpdateComponents(); + } + + public static void Initialize() + { + new UpdateAllTimer().Start(); + EventSink.WorldSave += new WorldSaveEventHandler( EventSink_WorldSave ); + } + + private static void EventSink_WorldSave( WorldSaveEventArgs e ) + { + new UpdateAllTimer().Start(); + } + + public class UpdateAllTimer : Timer + { + public UpdateAllTimer() : base( TimeSpan.FromSeconds( 1.0 ) ) + { + } + + protected override void OnTick() + { + UpdateAllComponents(); + } + } + } +} diff --git a/Scripts/Multis/Boats/BaseBoatDeed.cs b/Scripts/Multis/Boats/BaseBoatDeed.cs new file mode 100644 index 0000000..5e0787f --- /dev/null +++ b/Scripts/Multis/Boats/BaseBoatDeed.cs @@ -0,0 +1,173 @@ +using System; +using Server; +using Server.Regions; +using Server.Targeting; +using Server.Network; + +namespace Server.Multis +{ + public abstract class BaseBoatDeed : Item + { + private int m_MultiID; + private Point3D m_Offset; + + [CommandProperty( AccessLevel.GameMaster )] + public int MultiID{ get{ return m_MultiID; } set{ m_MultiID = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Offset{ get{ return m_Offset; } set{ m_Offset = value; } } + + public BaseBoatDeed( int id, Point3D offset ) : base( 0x14F2 ) + { + Weight = 1.0; + + m_MultiID = id; + m_Offset = offset; + } + + public BaseBoatDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_MultiID ); + writer.Write( m_Offset ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_MultiID = reader.ReadInt(); + m_Offset = reader.ReadPoint3D(); + + break; + } + } + + if ( Weight == 0.0 ) + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( !BaseBoat.NearDock( from ) ) + { + from.SendMessage( "You cannot launch a ship here" ); + } + else + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502482 ); // Where do you wish to place the ship? + from.Target = new InternalTarget( this ); + } + } + + public abstract BaseBoat Boat{ get; } + + public void OnPlacement( Mobile from, Point3D p ) + { + if ( Deleted ) + { + return; + } + else if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( !BaseBoat.NearDock( from ) ) + { + from.SendMessage( "You cannot launch a ship here" ); + } + else + { + Map map = from.Map; + + if ( map == null ) + return; + + if ( from.Region.IsPartOf( typeof( HouseRegion ) ) || BaseBoat.FindBoatAt( from, from.Map ) != null ) + { + from.SendLocalizedMessage( 1010568, null, 0x25 ); // You may not place a ship while on another ship or inside a house. + return; + } + + BaseBoat boat = Boat; + + if ( boat == null ) + return; + + p = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z ); + + if ( BaseBoat.IsValidLocation( p, map ) && boat.CanFit( p, map, boat.ItemID ) ) + { + Delete(); + + boat.Owner = from; + boat.Anchored = true; + + uint keyValue = boat.CreateKeys( from ); + + if ( boat.PPlank != null ) + boat.PPlank.KeyValue = keyValue; + + if ( boat.SPlank != null ) + boat.SPlank.KeyValue = keyValue; + + boat.MoveToWorld( p, map ); + + Effects.PlaySound( from.Location, from.Map, 0x026 ); + } + else + { + boat.Delete(); + from.SendLocalizedMessage( 1043284 ); // A ship can not be created here. + } + } + } + + private class InternalTarget : MultiTarget + { + private BaseBoatDeed m_Deed; + + public InternalTarget( BaseBoatDeed deed ) : base( deed.MultiID, deed.Offset ) + { + m_Deed = deed; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D ip = o as IPoint3D; + + if ( ip != null ) + { + if ( ip is Item ) + ip = ((Item)ip).GetWorldTop(); + + Point3D p = new Point3D( ip ); + + Region region = Region.Find( p, from.Map ); + + if ( region.IsPartOf( typeof( DungeonRegion ) ) ) + from.SendLocalizedMessage( 502488 ); // You can not place a ship inside a dungeon. + else + m_Deed.OnPlacement( from, p ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/BaseDockedBoat.cs b/Scripts/Multis/Boats/BaseDockedBoat.cs new file mode 100644 index 0000000..3c92d36 --- /dev/null +++ b/Scripts/Multis/Boats/BaseDockedBoat.cs @@ -0,0 +1,196 @@ +using System; +using Server; +using Server.Regions; +using Server.Targeting; + +namespace Server.Multis +{ + public abstract class BaseDockedBoat : Item + { + private int m_MultiID; + private Point3D m_Offset; + private string m_ShipName; + + [CommandProperty( AccessLevel.GameMaster )] + public int MultiID{ get{ return m_MultiID; } set{ m_MultiID = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Offset{ get{ return m_Offset; } set{ m_Offset = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public string ShipName{ get{ return m_ShipName; } set{ m_ShipName = value; InvalidateProperties(); } } + + public BaseDockedBoat( int id, Point3D offset, BaseBoat boat ) : base( 0x14F4 ) + { + Weight = 1.0; + + m_MultiID = id; + m_Offset = offset; + + m_ShipName = boat.ShipName; + } + + public BaseDockedBoat( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_MultiID ); + writer.Write( m_Offset ); + writer.Write( m_ShipName ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + case 0: + { + m_MultiID = reader.ReadInt(); + m_Offset = reader.ReadPoint3D(); + m_ShipName = reader.ReadString(); + + if ( version == 0 ) + reader.ReadUInt(); + + break; + } + } + + if ( Weight == 0.0 ) + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( !BaseBoat.NearDock( from ) ) + { + from.SendMessage( "You cannot launch a ship here" ); + } + else + { + from.SendLocalizedMessage( 502482 ); // Where do you wish to place the ship? + + from.Target = new InternalTarget( this ); + } + } + + public abstract BaseBoat Boat{ get; } + + public override void AddNameProperty( ObjectPropertyList list ) + { + if ( m_ShipName != null ) + list.Add( m_ShipName ); + else + base.AddNameProperty( list ); + } + + public override void OnSingleClick( Mobile from ) + { + if ( m_ShipName != null ) + LabelTo( from, m_ShipName ); + else + base.OnSingleClick( from ); + } + + public void OnPlacement( Mobile from, Point3D p ) + { + if ( Deleted ) + { + return; + } + else if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( !BaseBoat.NearDock( from ) ) + { + from.SendMessage( "You cannot launch a ship here" ); + } + else + { + Map map = from.Map; + + if ( map == null ) + return; + + BaseBoat boat = Boat; + + if ( boat == null ) + return; + + p = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z ); + + if ( BaseBoat.IsValidLocation( p, map ) && boat.CanFit( p, map, boat.ItemID ) && map != Map.Underworld ) + { + Delete(); + + boat.Owner = from; + boat.Anchored = true; + boat.ShipName = m_ShipName; + + uint keyValue = boat.CreateKeys( from ); + + if ( boat.PPlank != null ) + boat.PPlank.KeyValue = keyValue; + + if ( boat.SPlank != null ) + boat.SPlank.KeyValue = keyValue; + + boat.MoveToWorld( p, map ); + + Effects.PlaySound( from.Location, from.Map, 0x026 ); + } + else + { + boat.Delete(); + from.SendLocalizedMessage( 1043284 ); // A ship can not be created here. + } + } + } + + private class InternalTarget : MultiTarget + { + private BaseDockedBoat m_Model; + + public InternalTarget( BaseDockedBoat model ) : base( model.MultiID, model.Offset ) + { + m_Model = model; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D ip = o as IPoint3D; + + if ( ip != null ) + { + if ( ip is Item ) + ip = ((Item)ip).GetWorldTop(); + + Point3D p = new Point3D( ip ); + + Region region = Region.Find( p, from.Map ); + + if ( region.IsPartOf( typeof( DungeonRegion ) ) ) + from.SendLocalizedMessage( 502488 ); // You can not place a ship inside a dungeon. + else + m_Model.OnPlacement( from, p ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/BoatNavigation.cs b/Scripts/Multis/Boats/BoatNavigation.cs new file mode 100644 index 0000000..dfd7949 --- /dev/null +++ b/Scripts/Multis/Boats/BoatNavigation.cs @@ -0,0 +1,869 @@ +using Server; +using Server.Commands; +using Server.Gumps; +using Server.Multis; +using Server.Network; +using System; +using System.Text; + +namespace Server.Misc +{ + public class BoatNavigationControl : Gump + { + public BoatNavigationControl(Mobile from) : base(50, 50) + { + this.Closable = true; + this.Disposable = true; + this.Dragable = true; + this.Resizable = false; + + AddPage(0); + + AddImage(333, 141, 9274); + AddImage(343, 152, 9274); + + AddImage(222, 214, 1417); + AddImage(504, 214, 1417); + AddItem(525, 219, 5367); + AddItem(504, 262, 5368); + AddItem(242, 221, 16083); + AddImage(302, 110, 9007); + + AddItem(385, 163, 15946, 795); + + AddBackground(368, 199, 74, 46, 9400); + + AddButton(554, 233, 5600, 5604, (int)Buttons.RaiseAnchor, GumpButtonType.Reply, 0); + AddButton(554, 261, 5606, 5606, (int)Buttons.LowerAnchor, GumpButtonType.Reply, 0); + AddButton(395, 143, 2117, 11400, (int)Buttons.NorthWest, GumpButtonType.Reply, 0); + AddButton(396, 263, 2117, 11400, (int)Buttons.SouthEast, GumpButtonType.Reply, 0); + AddButton(336, 203, 2117, 11400, (int)Buttons.SouthWest, GumpButtonType.Reply, 0); + AddButton(456, 202, 2117, 11400, (int)Buttons.NorthEast, GumpButtonType.Reply, 0); + AddButton(436, 162, 2117, 11400, (int)Buttons.North, GumpButtonType.Reply, 0); + AddButton(355, 244, 2117, 11400, (int)Buttons.South, GumpButtonType.Reply, 0); + AddButton(353, 163, 2117, 11400, (int)Buttons.West, GumpButtonType.Reply, 0); + AddButton(438, 244, 2117, 11400, (int)Buttons.East, GumpButtonType.Reply, 0); + AddButton(239, 229, 5603, 5607, (int)Buttons.PPlankControl, GumpButtonType.Reply, 0); + AddButton(275, 249, 5601, 5605, (int)Buttons.SPlankControl, GumpButtonType.Reply, 0); + + AddButton(275, 249, 5601, 5605, (int)Buttons.SPlankControl, GumpButtonType.Reply, 0); + + AddButton(553, 280, 4, 4, (int)Buttons.RenameShip, GumpButtonType.Reply, 0); + + AddLabel(388, 212, 295, @"STOP"); + + AddButton(478, 244, 3, 3, (int)Buttons.Close, GumpButtonType.Reply, 0); + AddButton(571, 217, 22404, 22404, (int)Buttons.TurnRight, GumpButtonType.Reply, 0); + AddButton(476, 198, 9904, 9903, (int)Buttons.NorthEastOne, GumpButtonType.Reply, 0); + AddButton(309, 199, 9910, 9909, (int)Buttons.SouthWestOne, GumpButtonType.Reply, 0); + AddButton(392, 116, 9901, 9900, (int)Buttons.NorthWestOne, GumpButtonType.Reply, 0); + AddButton(393, 284, 9907, 9906, (int)Buttons.SouthEastOne, GumpButtonType.Reply, 0); + AddButton(217, 217, 22403, 22403, (int)Buttons.TurnLeft, GumpButtonType.Reply, 0); + AddButton(286, 278, 22400, 22400, (int)Buttons.TurnAround, GumpButtonType.Reply, 0); + AddButton(435, 215, 9762, 9763, (int)Buttons.ForwardOnCurrentHeading, GumpButtonType.Reply, 0); + AddButton(358, 215, 9766, 9767, (int)Buttons.BackwardOnCurrentHeading, GumpButtonType.Reply, 0); + } + + public enum Buttons + { + DoNothing, + RaiseAnchor, + LowerAnchor, + NorthWest, + SouthEast, + SouthWest, + NorthEast, + North, + South, + West, + East, + PPlankControl, + SPlankControl, + Stop, + Close, + TurnRight, + NorthEastOne, + SouthWestOne, + NorthWestOne, + SouthEastOne, + TurnLeft, + TurnAround, + ForwardOnCurrentHeading, + BackwardOnCurrentHeading, + RenameShip + } + + public override void OnResponse(NetState sender, RelayInfo info) + { + Mobile from = sender.Mobile; + BaseBoat boat = BaseBoat.FindBoatAt(from, from.Map); + + if (!from.Alive && boat == null) + { + return; + } + else if (boat == null) + { + return; + } + else + { + switch (info.ButtonID) + { + case 0: + { + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.RenameShip: + { + boat.BeginRename( from ); + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.RaiseAnchor: + { + from.Say("Raise The Anchor!"); + boat.RaiseAnchor(true); + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.LowerAnchor: + { + from.Say("Lower The Anchor!"); + boat.LowerAnchor(true); + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.NorthWest: + { + if (boat.Facing == Direction.North) + { + from.Say("Set Heading: North Northwest!!"); + boat.StartMove(Direction.Up, true); + } + else if (boat.Facing != Direction.North) + { + if (boat.Facing == Direction.East) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: North Northwest!!"); + boat.Turn(270, true); + boat.StartMove(Direction.Up, true); + break; + } + case 0: + { + from.Say("Set Heading: West Northwest!!"); + boat.Turn(180, true); + boat.StartMove(Direction.Right, true); + break; + } + } + } + else if (boat.Facing == Direction.South) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: North Northwest!!"); + boat.Turn(180, true); + boat.StartMove(Direction.Up, true); + break; + } + case 0: + { + from.Say("Set Heading: West Northwest!!"); + boat.Turn(90, true); + boat.StartMove(Direction.Right, true); + break; + } + } + } + else if (boat.Facing == Direction.West) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: North Northwest!!"); + boat.Turn(90, true); + boat.StartMove(Direction.Up, true); + break; + } + case 0: + { + from.Say("Set Heading: West Northwest!!"); + boat.StartMove(Direction.Right, true); + break; + } + } + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.SouthEast: + { + if (boat.Facing == Direction.South) + { + from.Say("Set Heading: South Southeast!!"); + boat.StartMove(Direction.Up, true); + } + else if (boat.Facing != Direction.South) + { + if (boat.Facing == Direction.West) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: South Southeast!!"); + boat.Turn(270, true); + boat.StartMove(Direction.Up, true); + break; + } + case 0: + { + from.Say("Set Heading: East Southeast!!"); + boat.Turn(180, true); + boat.StartMove(Direction.Right, true); + break; + } + } + } + else if (boat.Facing == Direction.North) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: South Southeast!!"); + boat.Turn(180, true); + boat.StartMove(Direction.Up, true); + break; + } + case 0: + { + from.Say("Set Heading: East Southeast!!"); + boat.Turn(90, true); + boat.StartMove(Direction.Right, true); + break; + } + } + } + else if (boat.Facing == Direction.East) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: South Southeast!!"); + boat.Turn(90, true); + boat.StartMove(Direction.Up, true); + break; + } + case 0: + { + from.Say("Set Heading: East Southeast!!"); + boat.StartMove(Direction.Right, true); + break; + } + } + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.SouthWest: + { + if (boat.Facing == Direction.South) + { + from.Say("Set Heading: South Southwest!"); + boat.StartMove(Direction.Right, true); + } + else if (boat.Facing != Direction.South) + { + if (boat.Facing == Direction.West) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: South Southwest!!"); + boat.Turn(270, true); + boat.StartMove(Direction.Right, true); + break; + } + case 0: + { + from.Say("Set Heading: West Southwest!!"); + boat.StartMove(Direction.Up, true); + break; + } + } + } + else if (boat.Facing == Direction.North) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: South Southwest!!"); + boat.Turn(180, true); + boat.StartMove(Direction.Right, true); + break; + } + case 0: + { + from.Say("Set Heading: West Southwest!!"); + boat.Turn(270, true); + boat.StartMove(Direction.Up, true); + break; + } + } + } + else if (boat.Facing == Direction.East) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: South Southwest!!"); + boat.Turn(90, true); + boat.StartMove(Direction.Right, true); + break; + } + case 0: + { + from.Say("Set Heading: West Southwest!!"); + boat.Turn(180, true); + boat.StartMove(Direction.Up, true); + break; + } + } + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.NorthEast: + { + if (boat.Facing == Direction.North) + { + from.Say("Set Heading: North Northeast!"); + boat.StartMove(Direction.Right, true); + } + else if (boat.Facing != Direction.North) + { + if (boat.Facing == Direction.East) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: North Northeast!!"); + boat.Turn(270, true); + boat.StartMove(Direction.Right, true); + break; + } + case 0: + { + from.Say("Set Heading: East Northeast!!"); + boat.StartMove(Direction.Up, true); + break; + } + } + } + else if (boat.Facing == Direction.South) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: North Northeast!!"); + boat.Turn(180, true); + boat.StartMove(Direction.Right, true); + break; + } + case 0: + { + from.Say("Set Heading: East Northeast!!"); + boat.Turn(270, true); + boat.StartMove(Direction.Up, true); + break; + } + } + } + else if (boat.Facing == Direction.West) + { + switch (Utility.Random(2)) + { + case 1: + { + from.Say("Set Heading: North Northeast!!"); + boat.Turn(90, true); + boat.StartMove(Direction.Right, true); + break; + } + case 0: + { + from.Say("Set Heading: East Northeast!!"); + boat.Turn(180, true); + boat.StartMove(Direction.Up, true); + break; + } + } + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.North: + { + if (boat.Facing == Direction.North) + { + from.Say("Set Heading: Due North!!"); + boat.StartMove(Direction.North, true); + } + else if (boat.Facing != Direction.North) + { + if (boat.Facing == Direction.East) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due North!!"); + boat.Turn(270, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + else if (boat.Facing == Direction.South) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due North!!"); + boat.Turn(180, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + else if (boat.Facing == Direction.West) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due North!!"); + boat.Turn(90, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.South: + { + if (boat.Facing == Direction.South) + { + from.Say("Set Heading: Due South!!"); + boat.StartMove(Direction.North, true); + } + else if (boat.Facing != Direction.South) + { + if (boat.Facing == Direction.West) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due South!!"); + boat.Turn(270, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + else if (boat.Facing == Direction.North) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due South!!"); + boat.Turn(180, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + else if (boat.Facing == Direction.East) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due South!!"); + boat.Turn(90, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.West: + { + if (boat.Facing == Direction.West) + { + from.Say("Set Heading: Due West!!"); + boat.StartMove(Direction.North, true); + } + else if (boat.Facing != Direction.West) + { + if (boat.Facing == Direction.North) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due West!!"); + boat.Turn(270, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + else if (boat.Facing == Direction.East) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due West!!"); + boat.Turn(180, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + else if (boat.Facing == Direction.South) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due West!!"); + boat.Turn(90, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.East: + { + if (boat.Facing == Direction.East) + { + from.Say("Set Heading: Due East!!"); + boat.StartMove(Direction.North, true); + } + else if (boat.Facing != Direction.East) + { + if (boat.Facing == Direction.South) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due East!!"); + boat.Turn(270, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + else if (boat.Facing == Direction.West) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due East!!"); + boat.Turn(180, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + else if (boat.Facing == Direction.North) + { + switch (Utility.Random(1)) + { + case 0: + { + from.Say("Set Heading: Due East!!"); + boat.Turn(90, true); + boat.StartMove(Direction.North, true); + break; + } + } + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.PPlankControl: + { + from.Say("Extend The Port Plank!!"); + boat.PPlank.Open(); + boat.PPlank.Locked = false; + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.SPlankControl: + { + from.Say("Extend The Starboard Plank!!"); + boat.SPlank.Open(); + boat.SPlank.Locked = false; + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.Stop: + { + from.Say("Stop The Ship!!"); + boat.StopMove(true); + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.Close: + { + from.CloseGump(typeof(BoatNavigationControl)); + break; + } + case (int)Buttons.TurnRight: + { + if (boat.Facing == Direction.North) + { + from.Say("Change Course! New Heading: Due East!"); + boat.Turn(90, true); + } + else if (boat.Facing != Direction.North) + { + if (boat.Facing == Direction.East) + { + from.Say("Change Course! New Heading: Due South!"); + boat.Turn(90, true); + } + else if (boat.Facing == Direction.South) + { + from.Say("Change Course! New Heading: Due West!"); + boat.Turn(90, true); + } + else if (boat.Facing == Direction.West) + { + from.Say("Change Course! New Heading Due North!"); + boat.Turn(90, true); + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.NorthEastOne: + { + if (boat.Facing == Direction.North) + { + from.Say("Set Heading: One Right!"); + boat.OneMove(Direction.East); + } + else if (boat.Facing == Direction.East) + { + from.Say("Set Heading: One Right!"); + boat.OneMove(Direction.East); + } + else if (boat.Facing == Direction.South) + { + from.Say("Set Heading: One Right!"); + boat.OneMove(Direction.East); + } + else if (boat.Facing == Direction.West) + { + from.Say("Set Heading: One Right!"); + boat.OneMove(Direction.East); + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.SouthWestOne: // Left One + { + if (boat.Facing == Direction.North) + { + from.Say("Set Heading: One Left!"); + boat.OneMove(Direction.West); + } + else if (boat.Facing == Direction.East) + { + from.Say("Set Heading: One Left!"); + boat.OneMove(Direction.West); + } + else if (boat.Facing == Direction.South) + { + from.Say("Set Heading: One Left!"); + boat.OneMove(Direction.West); + } + else if (boat.Facing == Direction.West) + { + from.Say("Set Heading: One Left!"); + boat.OneMove(Direction.West); + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.NorthWestOne: // Forward One + { + if (boat.Facing == Direction.North) + { + from.Say("Set Heading: One Forward!"); + boat.OneMove(Direction.North); + } + else if (boat.Facing == Direction.East) + { + from.Say("Set Heading: One Forward!"); + boat.OneMove(Direction.North); + } + else if (boat.Facing == Direction.South) + { + from.Say("Set Heading: One Forward!"); + boat.OneMove(Direction.North); + } + else if (boat.Facing == Direction.West) + { + from.Say("Set Heading: One Forward!"); + boat.OneMove(Direction.North); + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.SouthEastOne: + { + if (boat.Facing == Direction.North) + { + from.Say("Set Heading: One Backward!"); + boat.OneMove(Direction.South); + } + else if (boat.Facing == Direction.East) + { + from.Say("Set Heading: One Backward!"); + boat.OneMove(Direction.South); + } + else if (boat.Facing == Direction.South) + { + from.Say("Set Heading: One Backward!"); + boat.OneMove(Direction.South); + } + else if (boat.Facing == Direction.West) + { + from.Say("Set Heading: One Backward!"); + boat.OneMove(Direction.South); + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.TurnLeft: + { + if (boat.Facing == Direction.North) + { + from.Say("Change Course! New Heading: Due West!"); + boat.Turn(-90, true); + } + else if (boat.Facing != Direction.North) + { + if (boat.Facing == Direction.West) + { + from.Say("Change Course! New Heading: Due South!"); + boat.Turn(-90, true); + } + else if (boat.Facing == Direction.South) + { + from.Say("Change Course! New Heading: Due East!"); + boat.Turn(-90, true); + } + else if (boat.Facing == Direction.East) + { + from.Say("Change Course! New Heading: Due North!"); + boat.Turn(-90, true); + } + } + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.TurnAround: + { + from.Say("Come About!!"); + boat.Turn(180, true); + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.ForwardOnCurrentHeading: + { + // Code: boat.Speed = 1 + // Originally Worked But Caused Boats To Beach Themselves On Land + + boat.StartMove(Direction.North, false); + + from.SendGump(new BoatNavigationControl(from)); + break; + } + case (int)Buttons.BackwardOnCurrentHeading: + { + // Code: boat.Speed = -1 + // Originally Worked But Caused Boats To Beach Themselves On Land + + boat.StartMove(Direction.South, false); + + from.SendGump(new BoatNavigationControl(from)); + break; + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/ConfirmDryDockGump.cs b/Scripts/Multis/Boats/ConfirmDryDockGump.cs new file mode 100644 index 0000000..51b845a --- /dev/null +++ b/Scripts/Multis/Boats/ConfirmDryDockGump.cs @@ -0,0 +1,40 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; + +namespace Server.Multis +{ + public class ConfirmDryDockGump : Gump + { + private Mobile m_From; + private BaseBoat m_Boat; + + public ConfirmDryDockGump( Mobile from, BaseBoat boat ) : base( 150, 200 ) + { + m_From = from; + m_Boat = boat; + + m_From.CloseGump( typeof( ConfirmDryDockGump ) ); + + AddPage( 0 ); + + AddBackground( 0, 0, 220, 170, 5054 ); + AddBackground( 10, 10, 200, 150, 3000 ); + + AddHtmlLocalized( 20, 20, 180, 80, 1018319, true, false ); // Do you wish to dry dock this boat? + + AddHtmlLocalized( 55, 100, 140, 25, 1011011, false, false ); // CONTINUE + AddButton( 20, 100, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + + AddHtmlLocalized( 55, 125, 140, 25, 1011012, false, false ); // CANCEL + AddButton( 20, 125, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( info.ButtonID == 2 ) + m_Boat.EndDryDock( m_From ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/Hold.cs b/Scripts/Multis/Boats/Hold.cs new file mode 100644 index 0000000..9ad26e8 --- /dev/null +++ b/Scripts/Multis/Boats/Hold.cs @@ -0,0 +1,147 @@ +using System; +using Server; +using Server.Multis; +using Server.Network; + +namespace Server.Items +{ + public class Hold : Container + { + private int m_MaxWeightDefault = 1000; + private BaseBoat m_Boat; + + public Hold( BaseBoat boat ) : base( 0x3EAE ) + { + m_Boat = boat; + Movable = false; + + m_MaxWeightDefault = 1000; + + if ( boat is LargeDragonBoat ) m_MaxWeightDefault = 3200; + else if ( boat is MediumDragonBoat ) m_MaxWeightDefault = 2200; + else if ( boat is SmallDragonBoat ) m_MaxWeightDefault = 1400; + else if ( boat is LargeBoat ) m_MaxWeightDefault = 2600; + else if ( boat is MediumBoat ) m_MaxWeightDefault = 1800; + } + + public override int DefaultMaxWeight{ get{ return m_MaxWeightDefault; } } + + public Hold( Serial serial ) : base( serial ) + { + } + + public void SetFacing( Direction dir ) + { + switch ( dir ) + { + case Direction.East: ItemID = 0x3E65; break; + case Direction.West: ItemID = 0x3E93; break; + case Direction.North: ItemID = 0x3EAE; break; + case Direction.South: ItemID = 0x3EB9; break; + } + } + + public override bool OnDragDrop( Mobile from, Item item ) + { + if ( m_Boat == null || !m_Boat.Contains( from ) || m_Boat.IsMoving ) + return false; + + return base.OnDragDrop( from, item ); + } + + public override bool OnDragDropInto( Mobile from, Item item, Point3D p ) + { + if ( m_Boat == null || !m_Boat.Contains( from ) || m_Boat.IsMoving ) + return false; + + return base.OnDragDropInto( from, item, p ); + } + + public override bool CheckItemUse( Mobile from, Item item ) + { + if ( item != this && (m_Boat == null || !m_Boat.Contains( from ) || m_Boat.IsMoving) ) + return false; + + return base.CheckItemUse( from, item ); + } + + public override bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + if ( m_Boat == null || !m_Boat.Contains( from ) || m_Boat.IsMoving ) + return false; + + return base.CheckLift( from, item, ref reject ); + } + + public override void OnAfterDelete() + { + if ( m_Boat != null ) + m_Boat.Delete(); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_Boat == null || !m_Boat.Contains( from ) ) + { + if ( m_Boat.TillerMan != null ) + m_Boat.TillerMan.Say( 502490 ); // You must be on the ship to open the hold. + } + else if ( m_Boat.IsMoving ) + { + if ( m_Boat.TillerMan != null ) + m_Boat.TillerMan.Say( 502491 ); // I can not open the hold while the ship is moving. + } + else + { + base.OnDoubleClick( from ); + } + } + + public override bool IsDecoContainer + { + get{ return false; } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); + + writer.Write( m_Boat ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Boat = reader.ReadItem() as BaseBoat; + + if ( m_Boat == null || Parent != null ) + { + Delete(); + } + else + { + if ( m_Boat is LargeDragonBoat ) m_MaxWeightDefault = 3200; + else if ( m_Boat is MediumDragonBoat ) m_MaxWeightDefault = 2200; + else if ( m_Boat is SmallDragonBoat ) m_MaxWeightDefault = 1400; + else if ( m_Boat is LargeBoat ) m_MaxWeightDefault = 2600; + else if ( m_Boat is MediumBoat ) m_MaxWeightDefault = 1800; + else { m_MaxWeightDefault = 1000; } + } + + Movable = false; + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/LargeBoat.cs b/Scripts/Multis/Boats/LargeBoat.cs new file mode 100644 index 0000000..601de74 --- /dev/null +++ b/Scripts/Multis/Boats/LargeBoat.cs @@ -0,0 +1,103 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Multis +{ + public class LargeBoat : BaseBoat + { + public override int NorthID{ get{ return 0x10; } } + public override int EastID{ get{ return 0x11; } } + public override int SouthID{ get{ return 0x12; } } + public override int WestID{ get{ return 0x13; } } + + public override int HoldDistance{ get{ return 5; } } + public override int TillerManDistance{ get{ return -5; } } + + public override Point2D StarboardOffset{ get{ return new Point2D( 2, -1 ); } } + public override Point2D PortOffset{ get{ return new Point2D( -2, -1 ); } } + + public override Point3D MarkOffset{ get{ return new Point3D( 0, 0, 3 ); } } + + public override BaseDockedBoat DockedBoat{ get{ return new LargeDockedBoat( this ); } } + + [Constructable] + public LargeBoat() + { + } + + public LargeBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class LargeBoatDeed : BaseBoatDeed + { + public override int LabelNumber{ get{ return 1041209; } } // large ship deed + public override BaseBoat Boat{ get{ return new LargeBoat(); } } + + [Constructable] + public LargeBoatDeed() : base( 0x10, new Point3D( 0, -1, 0 ) ) + { + } + + public LargeBoatDeed( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class LargeDockedBoat : BaseDockedBoat + { + public override BaseBoat Boat{ get{ return new LargeBoat(); } } + + public LargeDockedBoat( BaseBoat boat ) : base( 0x10, new Point3D( 0, -1, 0 ), boat ) + { + } + + public LargeDockedBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/LargeDragonBoat.cs b/Scripts/Multis/Boats/LargeDragonBoat.cs new file mode 100644 index 0000000..6acba81 --- /dev/null +++ b/Scripts/Multis/Boats/LargeDragonBoat.cs @@ -0,0 +1,103 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Multis +{ + public class LargeDragonBoat : BaseBoat + { + public override int NorthID{ get{ return 0x14; } } + public override int EastID{ get{ return 0x15; } } + public override int SouthID{ get{ return 0x16; } } + public override int WestID{ get{ return 0x17; } } + + public override int HoldDistance{ get{ return 5; } } + public override int TillerManDistance{ get{ return -5; } } + + public override Point2D StarboardOffset{ get{ return new Point2D( 2, -1 ); } } + public override Point2D PortOffset{ get{ return new Point2D( -2, -1 ); } } + + public override Point3D MarkOffset{ get{ return new Point3D( 0, 0, 3 ); } } + + public override BaseDockedBoat DockedBoat{ get{ return new LargeDockedDragonBoat( this ); } } + + [Constructable] + public LargeDragonBoat() + { + } + + public LargeDragonBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class LargeDragonBoatDeed : BaseBoatDeed + { + public override int LabelNumber{ get{ return 1041210; } }// large dragon ship deed + public override BaseBoat Boat{ get{ return new LargeDragonBoat(); } } + + [Constructable] + public LargeDragonBoatDeed() : base( 0x14, new Point3D( 0, -1, 0 ) ) + { + } + + public LargeDragonBoatDeed( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class LargeDockedDragonBoat : BaseDockedBoat + { + public override BaseBoat Boat{ get{ return new LargeDragonBoat(); } } + + public LargeDockedDragonBoat( BaseBoat boat ) : base( 0x14, new Point3D( 0, -1, 0 ), boat ) + { + } + + public LargeDockedDragonBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/MediumBoat.cs b/Scripts/Multis/Boats/MediumBoat.cs new file mode 100644 index 0000000..d747753 --- /dev/null +++ b/Scripts/Multis/Boats/MediumBoat.cs @@ -0,0 +1,103 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Multis +{ + public class MediumBoat : BaseBoat + { + public override int NorthID{ get{ return 0x8; } } + public override int EastID{ get{ return 0x9; } } + public override int SouthID{ get{ return 0xA; } } + public override int WestID{ get{ return 0xB; } } + + public override int HoldDistance{ get{ return 4; } } + public override int TillerManDistance{ get{ return -5; } } + + public override Point2D StarboardOffset{ get{ return new Point2D( 2, 0 ); } } + public override Point2D PortOffset{ get{ return new Point2D( -2, 0 ); } } + + public override Point3D MarkOffset{ get{ return new Point3D( 0, 1, 3 ); } } + + public override BaseDockedBoat DockedBoat{ get{ return new MediumDockedBoat( this ); } } + + [Constructable] + public MediumBoat() + { + } + + public MediumBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class MediumBoatDeed : BaseBoatDeed + { + public override int LabelNumber{ get{ return 1041207; } } // medium ship deed + public override BaseBoat Boat{ get{ return new MediumBoat(); } } + + [Constructable] + public MediumBoatDeed() : base( 0x8, Point3D.Zero ) + { + } + + public MediumBoatDeed( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class MediumDockedBoat : BaseDockedBoat + { + public override BaseBoat Boat{ get{ return new MediumBoat(); } } + + public MediumDockedBoat( BaseBoat boat ) : base( 0x8, Point3D.Zero, boat ) + { + } + + public MediumDockedBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/MediumDragonBoat.cs b/Scripts/Multis/Boats/MediumDragonBoat.cs new file mode 100644 index 0000000..2cb7e68 --- /dev/null +++ b/Scripts/Multis/Boats/MediumDragonBoat.cs @@ -0,0 +1,103 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Multis +{ + public class MediumDragonBoat : BaseBoat + { + public override int NorthID{ get{ return 0xC; } } + public override int EastID{ get{ return 0xD; } } + public override int SouthID{ get{ return 0xE; } } + public override int WestID{ get{ return 0xF; } } + + public override int HoldDistance{ get{ return 4; } } + public override int TillerManDistance{ get{ return -5; } } + + public override Point2D StarboardOffset{ get{ return new Point2D( 2, 0 ); } } + public override Point2D PortOffset{ get{ return new Point2D( -2, 0 ); } } + + public override Point3D MarkOffset{ get{ return new Point3D( 0, 1, 3 ); } } + + public override BaseDockedBoat DockedBoat{ get{ return new MediumDockedDragonBoat( this ); } } + + [Constructable] + public MediumDragonBoat() + { + } + + public MediumDragonBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class MediumDragonBoatDeed : BaseBoatDeed + { + public override int LabelNumber{ get{ return 1041208; } } // medium dragon ship deed + public override BaseBoat Boat{ get{ return new MediumDragonBoat(); } } + + [Constructable] + public MediumDragonBoatDeed() : base( 0xC, Point3D.Zero ) + { + } + + public MediumDragonBoatDeed( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class MediumDockedDragonBoat : BaseDockedBoat + { + public override BaseBoat Boat{ get{ return new MediumDragonBoat(); } } + + public MediumDockedDragonBoat( BaseBoat boat ) : base( 0xC, Point3D.Zero, boat ) + { + } + + public MediumDockedDragonBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/Plank.cs b/Scripts/Multis/Boats/Plank.cs new file mode 100644 index 0000000..762b0c8 --- /dev/null +++ b/Scripts/Multis/Boats/Plank.cs @@ -0,0 +1,310 @@ +using System; +using System.Collections; +using Server; +using Server.Multis; + +namespace Server.Items +{ + public enum PlankSide{ Port, Starboard } + + public class Plank : Item, ILockable + { + private BaseBoat m_Boat; + private PlankSide m_Side; + private bool m_Locked; + private uint m_KeyValue; + + private Timer m_CloseTimer; + + public Plank( BaseBoat boat, PlankSide side, uint keyValue ) : base( 0x3EB1 + (int)side ) + { + m_Boat = boat; + m_Side = side; + m_KeyValue = keyValue; + m_Locked = true; + + Movable = false; + } + + public Plank( Serial serial ) : base(serial) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 );//version + + writer.Write( m_Boat ); + writer.Write( (int) m_Side ); + writer.Write( m_Locked ); + writer.Write( m_KeyValue ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Boat = reader.ReadItem() as BaseBoat; + m_Side = (PlankSide) reader.ReadInt(); + m_Locked = reader.ReadBool(); + m_KeyValue = reader.ReadUInt(); + + if ( m_Boat == null ) + Delete(); + + break; + } + } + + if ( IsOpen ) + { + m_CloseTimer = new CloseTimer( this ); + m_CloseTimer.Start(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public BaseBoat Boat{ get{ return m_Boat; } set{ m_Boat = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public PlankSide Side{ get{ return m_Side; } set{ m_Side = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Locked{ get{ return m_Locked; } set{ m_Locked = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public uint KeyValue{ get{ return m_KeyValue; } set{ m_KeyValue = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsOpen{ get{ return ( ItemID == 0x3ED5 || ItemID == 0x3ED4 || ItemID == 0x3E84 || ItemID == 0x3E89 ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Starboard{ get{ return ( m_Side == PlankSide.Starboard ); } } + + public void SetFacing( Direction dir ) + { + if ( IsOpen ) + { + switch ( dir ) + { + case Direction.North: ItemID = Starboard ? 0x3ED4 : 0x3ED5; break; + case Direction.East: ItemID = Starboard ? 0x3E84 : 0x3E89; break; + case Direction.South: ItemID = Starboard ? 0x3ED5 : 0x3ED4; break; + case Direction.West: ItemID = Starboard ? 0x3E89 : 0x3E84; break; + } + } + else + { + switch ( dir ) + { + case Direction.North: ItemID = Starboard ? 0x3EB2 : 0x3EB1; break; + case Direction.East: ItemID = Starboard ? 0x3E85 : 0x3E8A; break; + case Direction.South: ItemID = Starboard ? 0x3EB1 : 0x3EB2; break; + case Direction.West: ItemID = Starboard ? 0x3E8A : 0x3E85; break; + } + } + } + + public void Open() + { + if ( IsOpen || Deleted ) + return; + + if ( m_CloseTimer != null ) + m_CloseTimer.Stop(); + + m_CloseTimer = new CloseTimer( this ); + m_CloseTimer.Start(); + + switch ( ItemID ) + { + case 0x3EB1: ItemID = 0x3ED5; break; + case 0x3E8A: ItemID = 0x3E89; break; + case 0x3EB2: ItemID = 0x3ED4; break; + case 0x3E85: ItemID = 0x3E84; break; + } + + if ( m_Boat != null ) + m_Boat.Refresh(); + } + + public override bool OnMoveOver( Mobile from ) + { + if ( IsOpen ) + { + if ( (from.Direction & Direction.Running) != 0 || (m_Boat != null && !m_Boat.Contains( from )) ) + return true; + + Map map = Map; + + if ( map == null ) + return false; + + int rx = 0, ry = 0; + + if ( ItemID == 0x3ED4 ) + rx = 1; + else if ( ItemID == 0x3ED5 ) + rx = -1; + else if ( ItemID == 0x3E84 ) + ry = 1; + else if ( ItemID == 0x3E89 ) + ry = -1; + + for ( int i = 1; i <= 6; ++i ) + { + int x = X + (i*rx); + int y = Y + (i*ry); + int z; + + for ( int j = -8; j <= 8; ++j ) + { + z = from.Z + j; + + if ( map.CanFit( x, y, z, 16, false, false ) && !Server.Spells.SpellHelper.CheckMulti( new Point3D( x, y, z ), map ) ) + { + if ( i == 1 && j >= -2 && j <= 2 ) + return true; + + from.Location = new Point3D( x, y, z ); + return false; + } + } + + z = map.GetAverageZ( x, y ); + + if ( map.CanFit( x, y, z, 16, false, false ) && !Server.Spells.SpellHelper.CheckMulti( new Point3D( x, y, z ), map ) ) + { + if ( i == 1 ) + return true; + + from.Location = new Point3D( x, y, z ); + return false; + } + } + + return true; + } + else + { + return false; + } + } + + public bool CanClose() + { + Map map = Map; + + if ( map == null || Deleted ) + return false; + + foreach ( object o in this.GetObjectsInRange( 0 ) ) + { + if ( o != this ) + return false; + } + + return true; + } + + public void Close() + { + if ( !IsOpen || !CanClose() || Deleted ) + return; + + if ( m_CloseTimer != null ) + m_CloseTimer.Stop(); + + m_CloseTimer = null; + + switch ( ItemID ) + { + case 0x3ED5: ItemID = 0x3EB1; break; + case 0x3E89: ItemID = 0x3E8A; break; + case 0x3ED4: ItemID = 0x3EB2; break; + case 0x3E84: ItemID = 0x3E85; break; + } + + if ( m_Boat != null ) + m_Boat.Refresh(); + } + + public override void OnDoubleClickDead( Mobile from ) + { + OnDoubleClick( from ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_Boat == null ) + return; + + if ( from.InRange( GetWorldLocation(), 8 ) ) + { + if ( m_Boat.Contains( from ) ) + { + if ( IsOpen ) + Close(); + else + Open(); + } + else + { + if ( !IsOpen ) + { + if ( !Locked ) + { + Open(); + } + else if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + from.LocalOverheadMessage( Network.MessageType.Regular, 0x00, 502502 ); // That is locked but your godly powers allow access + Open(); + } + else + { + from.LocalOverheadMessage( Network.MessageType.Regular, 0x00, 502503 ); // That is locked. + } + } + else if ( !Locked ) + { + from.Location = new Point3D( this.X, this.Y, this.Z + 3 ); + } + else if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + from.LocalOverheadMessage( Network.MessageType.Regular, 0x00, 502502 ); // That is locked but your godly powers allow access + from.Location = new Point3D( this.X, this.Y, this.Z + 3 ); + } + else + { + from.LocalOverheadMessage( Network.MessageType.Regular, 0x00, 502503 ); // That is locked. + } + } + } + } + + private class CloseTimer : Timer + { + private Plank m_Plank; + + public CloseTimer( Plank plank ) : base( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromSeconds( 5.0 ) ) + { + m_Plank = plank; + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + m_Plank.Close(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/RenameBoatPrompt.cs b/Scripts/Multis/Boats/RenameBoatPrompt.cs new file mode 100644 index 0000000..952639f --- /dev/null +++ b/Scripts/Multis/Boats/RenameBoatPrompt.cs @@ -0,0 +1,21 @@ +using System; +using Server; +using Server.Prompts; + +namespace Server.Multis +{ + public class RenameBoatPrompt : Prompt + { + private BaseBoat m_Boat; + + public RenameBoatPrompt( BaseBoat boat ) + { + m_Boat = boat; + } + + public override void OnResponse( Mobile from, string text ) + { + m_Boat.EndRename( from, text ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/SmallBoat.cs b/Scripts/Multis/Boats/SmallBoat.cs new file mode 100644 index 0000000..cdd2f1a --- /dev/null +++ b/Scripts/Multis/Boats/SmallBoat.cs @@ -0,0 +1,103 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Multis +{ + public class SmallBoat : BaseBoat + { + public override int NorthID{ get{ return 0x0; } } + public override int EastID{ get{ return 0x1; } } + public override int SouthID{ get{ return 0x2; } } + public override int WestID{ get{ return 0x3; } } + + public override int HoldDistance{ get{ return 4; } } + public override int TillerManDistance{ get{ return -4; } } + + public override Point2D StarboardOffset{ get{ return new Point2D( 2, 0 ); } } + public override Point2D PortOffset{ get{ return new Point2D( -2, 0 ); } } + + public override Point3D MarkOffset{ get{ return new Point3D( 0, 1, 3 ); } } + + public override BaseDockedBoat DockedBoat{ get{ return new SmallDockedBoat( this ); } } + + [Constructable] + public SmallBoat() + { + } + + public SmallBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class SmallBoatDeed : BaseBoatDeed + { + public override int LabelNumber{ get{ return 1041205; } } // small ship deed + public override BaseBoat Boat{ get{ return new SmallBoat(); } } + + [Constructable] + public SmallBoatDeed() : base( 0x0, Point3D.Zero ) + { + } + + public SmallBoatDeed( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class SmallDockedBoat : BaseDockedBoat + { + public override BaseBoat Boat{ get{ return new SmallBoat(); } } + + public SmallDockedBoat( BaseBoat boat ) : base( 0x0, Point3D.Zero, boat ) + { + } + + public SmallDockedBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/SmallDragonBoat.cs b/Scripts/Multis/Boats/SmallDragonBoat.cs new file mode 100644 index 0000000..58d06af --- /dev/null +++ b/Scripts/Multis/Boats/SmallDragonBoat.cs @@ -0,0 +1,103 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Multis +{ + public class SmallDragonBoat : BaseBoat + { + public override int NorthID{ get{ return 0x4; } } + public override int EastID{ get{ return 0x5; } } + public override int SouthID{ get{ return 0x6; } } + public override int WestID{ get{ return 0x7; } } + + public override int HoldDistance{ get{ return 4; } } + public override int TillerManDistance{ get{ return -4; } } + + public override Point2D StarboardOffset{ get{ return new Point2D( 2, 0 ); } } + public override Point2D PortOffset{ get{ return new Point2D( -2, 0 ); } } + + public override Point3D MarkOffset{ get{ return new Point3D( 0, 1, 3 ); } } + + public override BaseDockedBoat DockedBoat{ get{ return new SmallDockedDragonBoat( this ); } } + + [Constructable] + public SmallDragonBoat() + { + } + + public SmallDragonBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class SmallDragonBoatDeed : BaseBoatDeed + { + public override int LabelNumber{ get{ return 1041206; } } // small dragon ship deed + public override BaseBoat Boat{ get{ return new SmallDragonBoat(); } } + + [Constructable] + public SmallDragonBoatDeed() : base( 0x4, Point3D.Zero ) + { + } + + public SmallDragonBoatDeed( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } + + public class SmallDockedDragonBoat : BaseDockedBoat + { + public override BaseBoat Boat{ get{ return new SmallDragonBoat(); } } + + public SmallDockedDragonBoat( BaseBoat boat ) : base( 0x4, Point3D.Zero, boat ) + { + } + + public SmallDockedDragonBoat( Serial serial ) : base( serial ) + { + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int)0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/Strandedness.cs b/Scripts/Multis/Boats/Strandedness.cs new file mode 100644 index 0000000..3791b72 --- /dev/null +++ b/Scripts/Multis/Boats/Strandedness.cs @@ -0,0 +1,166 @@ +using System; +using System.IO; +using Server; + +namespace Server.Misc +{ + public class Strandedness + { + private static Point2D[] m_Britannia = new Point2D[] + { + new Point2D( 582, 874 ), + new Point2D( 606, 924 ), + new Point2D( 723, 1026 ), + new Point2D( 683, 1125 ), + new Point2D( 731, 1210 ), + new Point2D( 873, 1191 ), + new Point2D( 952, 1221 ), + new Point2D( 974, 1268 ), + new Point2D( 970, 1319 ), + new Point2D( 880, 1276 ), + new Point2D( 758, 1360 ), + new Point2D( 637, 1495 ), + new Point2D( 690, 1596 ), + new Point2D( 769, 1685 ), + new Point2D( 905, 1765 ), + new Point2D( 922, 1875 ), + new Point2D( 934, 2060 ), + new Point2D( 989, 2165 ), + new Point2D( 1025, 2310 ), + new Point2D( 1073, 2487 ), + new Point2D( 1189, 2536 ), + new Point2D( 1357, 2588 ), + new Point2D( 1452, 2668 ), + new Point2D( 1578, 2717 ), + new Point2D( 1696, 2834 ), + new Point2D( 1692, 2989 ), + new Point2D( 1830, 3088 ), + new Point2D( 1997, 3190 ), + new Point2D( 1966, 3042 ), + new Point2D( 1978, 2933 ), + new Point2D( 2060, 3060 ), + new Point2D( 2147, 2980 ), + new Point2D( 2199, 2824 ), + new Point2D( 2086, 2466 ), + new Point2D( 2088, 2274 ), + new Point2D( 1861, 2033 ), + new Point2D( 1777, 1946 ), + new Point2D( 1682, 1816 ), + new Point2D( 2418, 1566 ), + new Point2D( 2536, 1579 ), + new Point2D( 2671, 1578 ), + new Point2D( 2844, 1511 ), + new Point2D( 3052, 1430 ), + new Point2D( 3134, 1346 ), + new Point2D( 3269, 1311 ), + new Point2D( 3549, 1118 ), + new Point2D( 3607, 1217 ), + new Point2D( 3736, 1198 ), + new Point2D( 3874, 1148 ), + new Point2D( 3957, 964 ), + new Point2D( 4091, 886 ), + new Point2D( 4037, 771 ), + new Point2D( 3823, 736 ), + new Point2D( 3620, 725 ), + new Point2D( 3481, 609 ), + new Point2D( 3364, 561 ), + new Point2D( 3192, 562 ), + new Point2D( 3071, 580 ), + new Point2D( 2515, 629 ), + new Point2D( 2370, 533 ), + new Point2D( 2029, 592 ), + new Point2D( 1874, 565 ), + new Point2D( 1673, 640 ), + new Point2D( 1534, 676 ), + new Point2D( 1473, 551 ), + new Point2D( 1389, 498 ), + new Point2D( 1301, 438 ), + new Point2D( 1225, 577 ), + new Point2D( 1153, 677 ), + new Point2D( 1026, 783 ), + new Point2D( 1008, 887 ), + new Point2D( 805, 923 ) + }; + + public static void Initialize() + { + EventSink.Login += new LoginEventHandler( EventSink_Login ); + } + + private static bool IsStranded( Mobile from ) + { + Map map = from.Map; + + if ( map != Map.Britannia ) + return false; + + object surface = map.GetTopSurface( from.Location ); + + if ( surface is LandTile ) { + int id = ((LandTile)surface).ID; + + return (id >= 168 && id <= 171) + || (id >= 310 && id <= 311); + } else if ( surface is StaticTile ) { + int id = ((StaticTile)surface).ID; + + return (id >= 0x1796 && id <= 0x17B2); + } + + return false; + } + + public static void EventSink_Login( LoginEventArgs e ) + { + Mobile from = e.Mobile; + + if ( !IsStranded( from ) ) + return; + + Map map = from.Map; + + Point2D[] list = m_Britannia; + + Point2D p = Point2D.Zero; + double pdist = double.MaxValue; + + for ( int i = 0; i < list.Length; ++i ) + { + double dist = from.GetDistanceToSqrt( list[i] ); + + if ( dist < pdist ) + { + p = list[i]; + pdist = dist; + } + } + + int x = p.X, y = p.Y; + int z; + bool canFit = false; + + z = map.GetAverageZ( x, y ); + canFit = map.CanSpawnMobile( x, y, z ); + + for ( int i = 1; !canFit && i <= 40; i += 2 ) + { + for ( int xo = -1; !canFit && xo <= 1; ++xo ) + { + for ( int yo = -1; !canFit && yo <= 1; ++yo ) + { + if ( xo == 0 && yo == 0 ) + continue; + + x = p.X + (xo * i); + y = p.Y + (yo * i); + z = map.GetAverageZ( x, y ); + canFit = map.CanSpawnMobile( x, y, z ); + } + } + } + + if ( canFit ) + from.Location = new Point3D( x, y, z ); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/TillerMan.cs b/Scripts/Multis/Boats/TillerMan.cs new file mode 100644 index 0000000..524f751 --- /dev/null +++ b/Scripts/Multis/Boats/TillerMan.cs @@ -0,0 +1,136 @@ +using System; +using Server; +using Server.Multis; +using Server.Network; +using Server.Misc; + +namespace Server.Items +{ + public class TillerMan : Item + { + private BaseBoat m_Boat; + + public TillerMan( BaseBoat boat ) : base( 0x3E4E ) + { + m_Boat = boat; + Movable = false; + } + + public TillerMan( Serial serial ) : base(serial) + { + } + + public void SetFacing( Direction dir ) + { + switch ( dir ) + { + case Direction.South: ItemID = 0x3E4B; break; + case Direction.North: ItemID = 0x3E4E; break; + case Direction.West: ItemID = 0x3E50; break; + case Direction.East: ItemID = 0x3E55; break; + } + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + list.Add( m_Boat.Status ); + } + + public void Say( int number ) + { + PublicOverheadMessage( MessageType.Regular, 0x3B2, number ); + } + + public void Say( int number, string args ) + { + PublicOverheadMessage( MessageType.Regular, 0x3B2, number, args ); + } + + public override void AddNameProperty( ObjectPropertyList list ) + { + if ( m_Boat != null && m_Boat.ShipName != null ) + list.Add( 1042884, m_Boat.ShipName ); // the tiller man of the ~1_SHIP_NAME~ + else + base.AddNameProperty( list ); + } + + public override void OnSingleClick( Mobile from ) + { + if ( m_Boat != null && m_Boat.ShipName != null ) + LabelTo( from, 1042884, m_Boat.ShipName ); // the tiller man of the ~1_SHIP_NAME~ + else + base.OnSingleClick( from ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( m_Boat != null ) + { + if( m_Boat.Owner == from || from.AccessLevel >= AccessLevel.Administrator ) + { + if( m_Boat.Contains( from ) ) + { + from.CloseGump( typeof( BoatNavigationControl ) ); + from.SendGump( new BoatNavigationControl( from ) ); + } + else if ( !BaseBoat.NearDock(from) ) + { + from.SendMessage( "You cannot dock a ship here" ); + } + else + { + m_Boat.BeginDryDock( from ); + } + } + else from.SendLocalizedMessage( 501023 ); // You must be the owner to use this item + } + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( dropped is MapItem && m_Boat != null && m_Boat.CanCommand( from ) && m_Boat.Contains( from ) ) + { + m_Boat.AssociateMap( (MapItem) dropped ); + } + + return false; + } + + public override void OnAfterDelete() + { + if ( m_Boat != null ) + m_Boat.Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 );//version + + writer.Write( m_Boat ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Boat = reader.ReadItem() as BaseBoat; + + if ( m_Boat == null ) + Delete(); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Boats/Vessels.cs b/Scripts/Multis/Boats/Vessels.cs new file mode 100644 index 0000000..100cba2 --- /dev/null +++ b/Scripts/Multis/Boats/Vessels.cs @@ -0,0 +1,57 @@ +using System; +using Server.Misc; + +namespace Server.Items +{ + public class ShipNS : BaseMulti + { + [Constructable] + public ShipNS() : base( 0x18 ) + { + Movable = false; + ItemID = Utility.RandomList( 0x18, 0x1A, 0x1C, 0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E ); + } + + public ShipNS( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class ShipEW : BaseMulti + { + [Constructable] + public ShipEW() : base( 0x19 ) + { + Movable = false; + ItemID = Utility.RandomList( 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B, 0x2D, 0x2F ); + } + + public ShipEW( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/ComponentVerification.cs b/Scripts/Multis/ComponentVerification.cs new file mode 100644 index 0000000..04bc06a --- /dev/null +++ b/Scripts/Multis/ComponentVerification.cs @@ -0,0 +1,254 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace Server.Multis +{ + public class ComponentVerification + { + private int[] m_ItemTable; + private int[] m_MultiTable; + + public bool IsItemValid( int itemID ) + { + if ( itemID <= 0 || itemID >= m_ItemTable.Length ) + return false; + + return CheckValidity( m_ItemTable[itemID] ); + } + + public bool IsMultiValid( int multiID ) + { + if ( multiID <= 0 || multiID >= m_MultiTable.Length ) + return false; + + return CheckValidity( m_MultiTable[multiID] ); + } + + public bool CheckValidity( int val ) + { + if ( val == -1 ) + return false; + + return ( val == 0 || (ExpansionInfo.CurrentExpansion.CustomHousingFlag & val) != 0 ); + } + + public ComponentVerification() + { + m_ItemTable = CreateTable( 0x10000 ); + m_MultiTable = CreateTable( 0x4000 ); + + LoadItems( "Data/Components/walls.txt", "South1", "South2", "South3", "Corner", "East1", "East2", "East3", "Post", "WindowS", "AltWindowS", "WindowE", "AltWindowE", "SecondAltWindowS", "SecondAltWindowE" ); + LoadItems( "Data/Components/teleprts.txt", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16" ); + LoadItems( "Data/Components/stairs.txt", "Block", "North", "East", "South", "West", "Squared1", "Squared2", "Rounded1", "Rounded2" ); + LoadItems( "Data/Components/roof.txt", "North", "East", "South", "West", "NSCrosspiece", "EWCrosspiece", "NDent", "EDent", "SDent", "WDent", "NTPiece", "ETPiece", "STPiece", "WTPiece", "XPiece", "Extra Piece" ); + LoadItems( "Data/Components/floors.txt", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16" ); + LoadItems( "Data/Components/misc.txt", "Piece1", "Piece2", "Piece3", "Piece4", "Piece5", "Piece6", "Piece7", "Piece8" ); + LoadItems( "Data/Components/doors.txt", "Piece1", "Piece2", "Piece3", "Piece4", "Piece5", "Piece6", "Piece7", "Piece8" ); + + LoadMultis( "Data/Components/stairs.txt", "MultiNorth", "MultiEast", "MultiSouth", "MultiWest" ); + } + + private int[] CreateTable( int length ) + { + int[] table = new int[length]; + + for ( int i = 0; i < table.Length; ++i ) + table[i] = -1; + + return table; + } + + private void LoadItems( string path, params string[] itemColumns ) + { + LoadSpreadsheet( m_ItemTable, path, itemColumns ); + } + + private void LoadMultis( string path, params string[] multiColumns ) + { + LoadSpreadsheet( m_MultiTable, path, multiColumns ); + } + + private void LoadSpreadsheet( int[] table, string path, params string[] tileColumns ) + { + Spreadsheet ss = new Spreadsheet( path ); + + int[] tileCIDs = new int[tileColumns.Length]; + + for ( int i = 0; i < tileColumns.Length; ++i ) + tileCIDs[i] = ss.GetColumnID( tileColumns[i] ); + + int featureCID = ss.GetColumnID( "FeatureMask" ); + + for ( int i = 0; i < ss.Records.Length; ++i ) + { + DataRecord record = ss.Records[i]; + + int fid = record.GetInt32( featureCID ); + + for ( int j = 0; j < tileCIDs.Length; ++j ) + { + int itemID = record.GetInt32( tileCIDs[j] ); + + if ( itemID <= 0 || itemID >= table.Length ) + continue; + + table[itemID] = fid; + } + } + } + } + + public class Spreadsheet + { + private class ColumnInfo + { + public int m_DataIndex; + + public string m_Type; + public string m_Name; + + public ColumnInfo( int dataIndex, string type, string name ) + { + m_DataIndex = dataIndex; + + m_Type = type; + m_Name = name; + } + } + + private ColumnInfo[] m_Columns; + private DataRecord[] m_Records; + + public DataRecord[] Records { get { return m_Records; } } + + public int GetColumnID( string name ) + { + for ( int i = 0; i < m_Columns.Length; ++i ) + { + if ( m_Columns[i].m_Name == name ) + return i; + } + + return -1; + } + + public Spreadsheet( string path ) + { + using ( StreamReader ip = new StreamReader( path ) ) + { + string[] types = ReadLine( ip ); + string[] names = ReadLine( ip ); + + m_Columns = new ColumnInfo[types.Length]; + + for ( int i = 0; i < m_Columns.Length; ++i ) + m_Columns[i] = new ColumnInfo( i, types[i], names[i] ); + + List records = new List(); + + string[] values; + + while ( ( values = ReadLine( ip ) ) != null ) + { + object[] data = new object[m_Columns.Length]; + + for ( int i = 0; i < m_Columns.Length; ++i ) + { + ColumnInfo ci = m_Columns[i]; + + switch ( ci.m_Type ) + { + case "int": + { + data[i] = Utility.ToInt32( values[ci.m_DataIndex] ); + break; + } + case "string": + { + data[i] = values[ci.m_DataIndex]; + break; + } + } + } + + records.Add( new DataRecord( this, data ) ); + } + + m_Records = records.ToArray(); + } + } + + private string[] ReadLine( StreamReader ip ) + { + string line; + + while ( ( line = ip.ReadLine() ) != null ) + { + if ( line.Length == 0 ) + continue; + + return line.Split( '\t' ); + } + + return null; + } + } + + public class DataRecord + { + private Spreadsheet m_Spreadsheet; + private object[] m_Data; + + public Spreadsheet Spreadsheet { get { return m_Spreadsheet; } } + public object[] Data { get { return m_Data; } } + + public DataRecord( Spreadsheet ss, object[] data ) + { + m_Spreadsheet = ss; + m_Data = data; + } + + public int GetInt32( string name ) + { + return GetInt32( this[name] ); + } + + public int GetInt32( int id ) + { + return GetInt32( this[id] ); + } + + public int GetInt32( object obj ) + { + if ( obj is int ) + return (int) obj; + + return 0; + } + + public string GetString( string name ) + { + return this[name] as string; + } + + public object this[string name] + { + get + { + return this[m_Spreadsheet.GetColumnID( name )]; + } + } + + public object this[int id] + { + get + { + if ( id < 0 ) + return null; + + return m_Data[id]; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Deeds.cs b/Scripts/Multis/Deeds.cs new file mode 100644 index 0000000..88f354e --- /dev/null +++ b/Scripts/Multis/Deeds.cs @@ -0,0 +1,959 @@ +using Server; +using System; +using System.Collections; +using Server.Multis; +using Server.Targeting; +using Server.Items; + +namespace Server.Multis.Deeds +{ + public class HousePlacementTarget : MultiTarget + { + private HouseDeed m_Deed; + + public HousePlacementTarget( HouseDeed deed ) : base( deed.MultiID, deed.Offset ) + { + m_Deed = deed; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D ip = o as IPoint3D; + + if ( ip != null ) + { + if ( ip is Item ) + ip = ((Item)ip).GetWorldTop(); + + Point3D p = new Point3D( ip ); + + Region reg = Region.Find( new Point3D( p ), from.Map ); + + if ( from.AccessLevel >= AccessLevel.GameMaster || reg.AllowHousing( from, p ) ) + m_Deed.OnPlacement( from, p ); + else if ( reg.IsPartOf( typeof( TreasureRegion ) ) || reg.IsPartOf( typeof( UnderworldEntrance ) ) ) + from.SendLocalizedMessage( 1043287 ); // The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain. + else + from.SendLocalizedMessage( 501265 ); // Housing can not be created in this area. + } + } + } + + public abstract class HouseDeed : Item + { + private int m_MultiID; + private Point3D m_Offset; + + [CommandProperty( AccessLevel.GameMaster )] + public int MultiID + { + get + { + return m_MultiID; + } + set + { + m_MultiID = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Point3D Offset + { + get + { + return m_Offset; + } + set + { + m_Offset = value; + } + } + + public HouseDeed( int id, Point3D offset ) : base( 0x14F0 ) + { + Weight = 1.0; + + m_MultiID = id; + m_Offset = offset; + } + + public HouseDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_Offset ); + + writer.Write( m_MultiID ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Offset = reader.ReadPoint3D(); + + goto case 0; + } + case 0: + { + m_MultiID = reader.ReadInt(); + + break; + } + } + + if ( Weight == 0.0 ) + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse( from ) ) + { + from.SendLocalizedMessage( 501271 ); // You already own a house, you may not place another! + } + else + { + from.SendLocalizedMessage( 1010433 ); /* House placement cancellation could result in a + * 60 second delay in the return of your deed. + */ + + from.Target = new HousePlacementTarget( this ); + } + } + + public abstract BaseHouse GetHouse( Mobile owner ); + public abstract Rectangle2D[] Area{ get; } + + public void OnPlacement( Mobile from, Point3D p ) + { + if ( Deleted ) + return; + + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + else if ( from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse( from ) ) + { + from.SendLocalizedMessage( 501271 ); // You already own a house, you may not place another! + } + else + { + ArrayList toMove; + Point3D center = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z ); + HousePlacementResult res = HousePlacement.Check( from, m_MultiID, center, out toMove ); + + switch ( res ) + { + case HousePlacementResult.Valid: + { + BaseHouse house = GetHouse( from ); + house.MoveToWorld( center, from.Map ); + Delete(); + + for ( int i = 0; i < toMove.Count; ++i ) + { + object o = toMove[i]; + + if ( o is Mobile ) + ((Mobile)o).Location = house.BanLocation; + else if ( o is Item ) + ((Item)o).Location = house.BanLocation; + } + + break; + } + case HousePlacementResult.BadItem: + case HousePlacementResult.BadLand: + case HousePlacementResult.BadStatic: + case HousePlacementResult.BadRegionHidden: + { + from.SendLocalizedMessage( 1043287 ); // The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain. + break; + } + case HousePlacementResult.NoSurface: + { + from.SendMessage( "The house could not be created here. Part of the foundation would not be on any surface." ); + break; + } + case HousePlacementResult.BadRegion: + { + from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area. + break; + } + case HousePlacementResult.BadRegionTemp: + { + from.SendLocalizedMessage( 501270 ); //Lord British has decreed a 'no build' period, thus you cannot build this house at this time. + break; + } + } + } + } + } + + public class BlueTentDeed : HouseDeed + { + public override int LabelNumber{ get{ return 1041217; } } // deed to a blue tent + [Constructable] + public BlueTentDeed() : base( 0x70, new Point3D( 0, 0, 0 ) ) + { + } + + public BlueTentDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new BlueTent( owner ); + } + + public override Rectangle2D[] Area{ get{ return BlueTent.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class GreenTentDeed : HouseDeed + { + public override int LabelNumber{ get{ return 1041218; } } // deed to a green tent + [Constructable] + public GreenTentDeed() : base( 0x72, new Point3D( 0, 0, 0 ) ) + { + } + + public GreenTentDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new GreenTent( owner ); + } + + public override Rectangle2D[] Area{ get{ return SmallOldHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StonePlasterHouseDeed : HouseDeed + { + [Constructable] + public StonePlasterHouseDeed() : base( 0x64, new Point3D( 0, 4, 0 ) ) + { + } + + public StonePlasterHouseDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallOldHouse( owner, 0x64 ); + } + + public override int LabelNumber{ get{ return 1041211; } } + public override Rectangle2D[] Area{ get{ return SmallOldHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class FieldStoneHouseDeed : HouseDeed + { + [Constructable] + public FieldStoneHouseDeed() : base( 0x66, new Point3D( 0, 4, 0 ) ) + { + } + + public FieldStoneHouseDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallOldHouse( owner, 0x66 ); + } + + public override int LabelNumber{ get{ return 1041212; } } + public override Rectangle2D[] Area{ get{ return SmallOldHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallBrickHouseDeed : HouseDeed + { + [Constructable] + public SmallBrickHouseDeed() : base( 0x68, new Point3D( 0, 4, 0 ) ) + { + } + + public SmallBrickHouseDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallOldHouse( owner, 0x68 ); + } + + public override int LabelNumber{ get{ return 1041213; } } + public override Rectangle2D[] Area{ get{ return SmallOldHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WoodHouseDeed : HouseDeed + { + [Constructable] + public WoodHouseDeed() : base( 0x6A, new Point3D( 0, 4, 0 ) ) + { + } + + public WoodHouseDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallOldHouse( owner, 0x6A ); + } + + public override int LabelNumber{ get{ return 1041214; } } + public override Rectangle2D[] Area{ get{ return SmallOldHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class WoodPlasterHouseDeed : HouseDeed + { + [Constructable] + public WoodPlasterHouseDeed() : base( 0x6C, new Point3D( 0, 4, 0 ) ) + { + } + + public WoodPlasterHouseDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallOldHouse( owner, 0x6C ); + } + + public override int LabelNumber{ get{ return 1041215; } } + public override Rectangle2D[] Area{ get{ return SmallOldHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class ThatchedRoofCottageDeed : HouseDeed + { + [Constructable] + public ThatchedRoofCottageDeed() : base( 0x6E, new Point3D( 0, 4, 0 ) ) + { + } + + public ThatchedRoofCottageDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallOldHouse( owner, 0x6E ); + } + + public override int LabelNumber{ get{ return 1041216; } } + public override Rectangle2D[] Area{ get{ return SmallOldHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class BrickHouseDeed : HouseDeed + { + [Constructable] + public BrickHouseDeed() : base( 0x74, new Point3D( -1, 7, 0 ) ) + { + } + + public BrickHouseDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new GuildHouse( owner ); + } + + public override int LabelNumber{ get{ return 1041219; } } + public override Rectangle2D[] Area{ get{ return GuildHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TwoStoryWoodPlasterHouseDeed : HouseDeed + { + [Constructable] + public TwoStoryWoodPlasterHouseDeed() : base( 0x76, new Point3D( -3, 7, 0 ) ) + { + } + + public TwoStoryWoodPlasterHouseDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new TwoStoryHouse( owner, 0x76 ); + } + + public override int LabelNumber{ get{ return 1041220; } } + public override Rectangle2D[] Area{ get{ return TwoStoryHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TwoStoryStonePlasterHouseDeed : HouseDeed + { + [Constructable] + public TwoStoryStonePlasterHouseDeed() : base( 0x78, new Point3D( -3, 7, 0 ) ) + { + } + + public TwoStoryStonePlasterHouseDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new TwoStoryHouse( owner, 0x78 ); + } + + public override int LabelNumber{ get{ return 1041221; } } + public override Rectangle2D[] Area{ get{ return TwoStoryHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class TowerDeed : HouseDeed + { + [Constructable] + public TowerDeed() : base( 0x7A, new Point3D( 0, 7, 0 ) ) + { + } + + public TowerDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new Tower( owner ); + } + + public override int LabelNumber{ get{ return 1041222; } } + public override Rectangle2D[] Area{ get{ return Tower.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class KeepDeed : HouseDeed + { + [Constructable] + public KeepDeed() : base( 0x7C, new Point3D( 0, 11, 0 ) ) + { + } + + public KeepDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new Keep( owner ); + } + + public override int LabelNumber{ get{ return 1041223; } } + public override Rectangle2D[] Area{ get{ return Keep.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class CastleDeed : HouseDeed + { + [Constructable] + public CastleDeed() : base( 0x7E, new Point3D( 0, 16, 0 ) ) + { + } + + public CastleDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new Castle( owner ); + } + + public override int LabelNumber{ get{ return 1041224; } } + public override Rectangle2D[] Area{ get{ return Castle.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargePatioDeed : HouseDeed + { + [Constructable] + public LargePatioDeed() : base( 0x8C, new Point3D( -4, 7, 0 ) ) + { + } + + public LargePatioDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new LargePatioHouse( owner ); + } + + public override int LabelNumber{ get{ return 1041231; } } + public override Rectangle2D[] Area{ get{ return LargePatioHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LargeMarbleDeed : HouseDeed + { + [Constructable] + public LargeMarbleDeed() : base( 0x96, new Point3D( -4, 7, 0 ) ) + { + } + + public LargeMarbleDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new LargeMarbleHouse( owner ); + } + + public override int LabelNumber{ get{ return 1041236; } } + public override Rectangle2D[] Area{ get{ return LargeMarbleHouse.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SmallTowerDeed : HouseDeed + { + [Constructable] + public SmallTowerDeed() : base( 0x98, new Point3D( 3, 4, 0 ) ) + { + } + + public SmallTowerDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallTower( owner ); + } + + public override int LabelNumber{ get{ return 1041237; } } + public override Rectangle2D[] Area{ get{ return SmallTower.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class LogCabinDeed : HouseDeed + { + [Constructable] + public LogCabinDeed() : base( 0x9A, new Point3D( 1, 6, 0 ) ) + { + } + + public LogCabinDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new LogCabin( owner ); + } + + public override int LabelNumber{ get{ return 1041238; } } + public override Rectangle2D[] Area{ get{ return LogCabin.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class SandstonePatioDeed : HouseDeed + { + [Constructable] + public SandstonePatioDeed() : base( 0x9C, new Point3D( -1, 4, 0 ) ) + { + } + + public SandstonePatioDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SandStonePatio( owner ); + } + + public override int LabelNumber{ get{ return 1041239; } } + public override Rectangle2D[] Area{ get{ return SandStonePatio.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class VillaDeed : HouseDeed + { + [Constructable] + public VillaDeed() : base( 0x9E, new Point3D( 3, 6, 0 ) ) + { + } + + public VillaDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new TwoStoryVilla( owner ); + } + + public override int LabelNumber{ get{ return 1041240; } } + public override Rectangle2D[] Area{ get{ return TwoStoryVilla.AreaArray; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class StoneWorkshopDeed : HouseDeed + { + [Constructable] + public StoneWorkshopDeed() : base( 0xA0, new Point3D( -1, 4, 0 ) ) + { + } + + public StoneWorkshopDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallShop( owner, 0xA0 ); + } + + public override int LabelNumber{ get{ return 1041241; } } + public override Rectangle2D[] Area{ get{ return SmallShop.AreaArray2; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } + + public class MarbleWorkshopDeed : HouseDeed + { + [Constructable] + public MarbleWorkshopDeed() : base( 0xA2, new Point3D( -1, 4, 0 ) ) + { + } + + public MarbleWorkshopDeed( Serial serial ) : base( serial ) + { + } + + public override BaseHouse GetHouse( Mobile owner ) + { + return new SmallShop( owner, 0xA2 ); + } + + public override int LabelNumber{ get{ return 1041242; } } + public override Rectangle2D[] Area{ get{ return SmallShop.AreaArray1; } } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/HouseFoundation.cs b/Scripts/Multis/HouseFoundation.cs new file mode 100644 index 0000000..844bd4a --- /dev/null +++ b/Scripts/Multis/HouseFoundation.cs @@ -0,0 +1,2503 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using Server; +using Server.Commands; +using Server.Gumps; +using Server.Items; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Multis +{ + public enum FoundationType + { + Stone, + DarkWood, + LightWood, + Dungeon, + Brick, + ElvenGrey, + ElvenNatural, + Crystal, + Shadow + } + + public class HouseFoundation : BaseHouse + { + private DesignState m_Current; // State which is currently visible. + private DesignState m_Design; // State of current design. + private DesignState m_Backup; // State at last user backup. + private Item m_SignHanger; // Item hanging the sign. + private Item m_Signpost; // Item supporting the hanger. + private int m_SignpostGraphic; // ItemID number of the chosen signpost. + private int m_LastRevision; // Latest revision number. + private List m_Fixtures; // List of fixtures (teleporters and doors) associated with this house. + private FoundationType m_Type; // Graphic type of this foundation. + private Mobile m_Customizer; // Who is currently customizing this -or- null if not customizing. + + public FoundationType Type { get { return m_Type; } set { m_Type = value; } } + public int LastRevision { get { return m_LastRevision; } set { m_LastRevision = value; } } + public List Fixtures { get { return m_Fixtures; } } + public Item SignHanger { get { return m_SignHanger; } } + public Item Signpost { get { return m_Signpost; } } + public int SignpostGraphic { get { return m_SignpostGraphic; } set { m_SignpostGraphic = value; } } + public Mobile Customizer { get { return m_Customizer; } set { m_Customizer = value; } } + + public override bool IsAosRules { get { return true; } } + + public override bool IsActive { get { return Customizer == null; } } + + public virtual int CustomizationCost { get { return 10000; } } + + public bool IsFixture( Item item ) + { + return (m_Fixtures != null && m_Fixtures.Contains( item )); + } + + public override MultiComponentList Components + { + get + { + if( m_Current == null ) + SetInitialState(); + + return m_Current.Components; + } + } + + public override int GetMaxUpdateRange() + { + return 24; + } + + public override int GetUpdateRange( Mobile m ) + { + int w = CurrentState.Components.Width; + int h = CurrentState.Components.Height-1; + int v = 18 + ((w > h ? w : h) / 2); + + if( v > 24 ) + v = 24; + else if( v < 18 ) + v = 18; + + return v; + } + + public DesignState CurrentState + { + get { if( m_Current == null ) SetInitialState(); return m_Current; } + set { m_Current = value; } + } + + public DesignState DesignState + { + get { if( m_Design == null ) SetInitialState(); return m_Design; } + set { m_Design = value; } + } + + public DesignState BackupState + { + get { if( m_Backup == null ) SetInitialState(); return m_Backup; } + set { m_Backup = value; } + } + + public void SetInitialState() + { + // This is a new house, it has not yet loaded a design state + m_Current = new DesignState( this, GetEmptyFoundation() ); + m_Design = new DesignState( m_Current ); + m_Backup = new DesignState( m_Current ); + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if( m_SignHanger != null ) + m_SignHanger.Delete(); + + if( m_Signpost != null ) + m_Signpost.Delete(); + + if( m_Fixtures == null ) + return; + + for( int i = 0; i < m_Fixtures.Count; ++i ) + { + Item item = m_Fixtures[i]; + + if( item != null ) + item.Delete(); + } + + m_Fixtures.Clear(); + } + + public override void OnLocationChange( Point3D oldLocation ) + { + base.OnLocationChange( oldLocation ); + + int x = Location.X - oldLocation.X; + int y = Location.Y - oldLocation.Y; + int z = Location.Z - oldLocation.Z; + + if( m_SignHanger != null ) + m_SignHanger.MoveToWorld( new Point3D( m_SignHanger.X + x, m_SignHanger.Y + y, m_SignHanger.Z + z ), Map ); + + if( m_Signpost != null ) + m_Signpost.MoveToWorld( new Point3D( m_Signpost.X + x, m_Signpost.Y + y, m_Signpost.Z + z ), Map ); + + if( m_Fixtures == null ) + return; + + for( int i = 0; i < m_Fixtures.Count; ++i ) + { + Item item = m_Fixtures[i]; + + if( Doors.Contains( item ) ) + continue; + + item.MoveToWorld( new Point3D( item.X + x, item.Y + y, item.Z + z ), Map ); + } + } + + public override void OnMapChange() + { + base.OnMapChange(); + + if( m_SignHanger != null ) + m_SignHanger.Map = this.Map; + + if( m_Signpost != null ) + m_Signpost.Map = this.Map; + + if( m_Fixtures == null ) + return; + + for( int i = 0; i < m_Fixtures.Count; ++i ) + m_Fixtures[i].Map = this.Map; + } + + public void ClearFixtures( Mobile from ) + { + if( m_Fixtures == null ) + return; + + RemoveKeys( from ); + + for( int i = 0; i < m_Fixtures.Count; ++i ) + { + m_Fixtures[i].Delete(); + Doors.Remove( m_Fixtures[i] ); + } + + m_Fixtures.Clear(); + } + + public void AddFixtures( Mobile from, MultiTileEntry[] list ) + { + if( m_Fixtures == null ) + m_Fixtures = new List(); + + uint keyValue = 0; + + for( int i = 0; i < list.Length; ++i ) + { + MultiTileEntry mte = list[i]; + int itemID = mte.m_ItemID; + + if( itemID >= 0x181D && itemID < 0x1829 ) + { + HouseTeleporter tp = new HouseTeleporter( itemID ); + + AddFixture( tp, mte ); + } + else + { + BaseDoor door = null; + + if( itemID >= 0x675 && itemID < 0x6F5 ) + { + int type = (itemID - 0x675) / 16; + DoorFacing facing = (DoorFacing)(((itemID - 0x675) / 2) % 8); + + switch( type ) + { + case 0: door = new GenericHouseDoor( facing, 0x675, 0xEC, 0xF3 ); break; + case 1: door = new GenericHouseDoor( facing, 0x685, 0xEC, 0xF3 ); break; + case 2: door = new GenericHouseDoor( facing, 0x695, 0xEB, 0xF2 ); break; + case 3: door = new GenericHouseDoor( facing, 0x6A5, 0xEA, 0xF1 ); break; + case 4: door = new GenericHouseDoor( facing, 0x6B5, 0xEA, 0xF1 ); break; + case 5: door = new GenericHouseDoor( facing, 0x6C5, 0xEC, 0xF3 ); break; + case 6: door = new GenericHouseDoor( facing, 0x6D5, 0xEA, 0xF1 ); break; + case 7: door = new GenericHouseDoor( facing, 0x6E5, 0xEA, 0xF1 ); break; + } + } + else if( itemID >= 0x314 && itemID < 0x364 ) + { + int type = (itemID - 0x314) / 16; + DoorFacing facing = (DoorFacing)(((itemID - 0x314) / 2) % 8); + door = new GenericHouseDoor( facing, 0x314 + ( type * 16 ), 0xED, 0xF4 ); + } + else if( itemID >= 0x824 && itemID < 0x834 ) + { + DoorFacing facing = (DoorFacing)(((itemID - 0x824) / 2) % 8); + door = new GenericHouseDoor( facing, 0x824, 0xEC, 0xF3 ); + } + else if( itemID >= 0x839 && itemID < 0x849 ) + { + DoorFacing facing = (DoorFacing)(((itemID - 0x839) / 2) % 8); + door = new GenericHouseDoor( facing, 0x839, 0xEB, 0xF2 ); + } + else if( itemID >= 0x84C && itemID < 0x85C ) + { + DoorFacing facing = (DoorFacing)(((itemID - 0x84C) / 2) % 8); + door = new GenericHouseDoor( facing, 0x84C, 0xEC, 0xF3 ); + } + else if( itemID >= 0x866 && itemID < 0x876 ) + { + DoorFacing facing = (DoorFacing)(((itemID - 0x866) / 2) % 8); + door = new GenericHouseDoor( facing, 0x866, 0xEB, 0xF2 ); + } + else if( itemID >= 0xE8 && itemID < 0xF8 ) + { + DoorFacing facing = (DoorFacing)(((itemID - 0xE8) / 2) % 8); + door = new GenericHouseDoor( facing, 0xE8, 0xED, 0xF4 ); + } + else if( itemID >= 0x1FED && itemID < 0x1FFD ) + { + DoorFacing facing = (DoorFacing)(((itemID - 0x1FED) / 2) % 8); + door = new GenericHouseDoor( facing, 0x1FED, 0xEC, 0xF3 ); + } + else if( itemID >= 0x241F && itemID < 0x2421 ) + { + //DoorFacing facing = (DoorFacing)(((itemID - 0x241F) / 2) % 8); + door = new GenericHouseDoor( DoorFacing.NorthCCW, 0x2415, -1, -1 ); + } + else if( itemID >= 0x2423 && itemID < 0x2425 ) + { + //DoorFacing facing = (DoorFacing)(((itemID - 0x241F) / 2) % 8); + //This one and the above one are 'special' cases, ie: OSI had the ItemID pattern discombobulated for these + door = new GenericHouseDoor( DoorFacing.WestCW, 0x2423, -1, -1 ); + } + else if( itemID >= 0x2A05 && itemID < 0x2A1D ) + { + DoorFacing facing = (DoorFacing)((((itemID - 0x2A05) / 2) % 4) + 8); + + int sound = (itemID >= 0x2A0D && itemID < 0x2a15) ? 0x539 : -1; + + door = new GenericHouseDoor( facing, 0x29F5 + (8 * ((itemID - 0x2A05) / 8)), sound, sound ); + } + else if( itemID == 0x2D46 ) + { + door = new GenericHouseDoor( DoorFacing.NorthCW, 0x2D46, 0xEA, 0xF1, false ); + } + else if( itemID == 0x2D48 || itemID == 0x2FE2 ) + { + door = new GenericHouseDoor( DoorFacing.SouthCCW, itemID, 0xEA, 0xF1, false ); + } + else if( itemID >= 0x2D63 && itemID < 0x2D70 ) + { + int mod = (itemID - 0x2D63)/2%2; + DoorFacing facing = ( ( mod == 0 ) ? DoorFacing.SouthCCW : DoorFacing.WestCCW ); + + int type = (itemID - 0x2D63) / 4; + + door = new GenericHouseDoor( facing, 0x2D63 + 4*type + mod*2, 0xEA, 0xF1, false ); + } + else if( itemID == 0x2FE4 || itemID == 0x31AE ) + { + door = new GenericHouseDoor( DoorFacing.WestCCW, itemID, 0xEA, 0xF1, false ); + } + else if( itemID >= 0x319C && itemID < 0x31AE ) + { + //special case for 0x31aa <-> 0x31a8 (a9) + + int mod = (itemID - 0x319C) / 2 % 2; + + bool specialCase = (itemID == 0x31AA || itemID == 0x31A8); + + DoorFacing facing; + + if ( itemID == 0x31AA || itemID == 0x31A8 ) + facing = ((mod == 0) ? DoorFacing.NorthCW : DoorFacing.EastCW); + else + facing = ((mod == 0) ? DoorFacing.EastCW : DoorFacing.NorthCW); + + int type = (itemID - 0x319C) / 4; + + door = new GenericHouseDoor( facing, 0x319C + 4 * type + mod * 2, 0xEA, 0xF1, false ); + } + else if( itemID >= 0x367B && itemID < 0x369B ) + { + int type = (itemID - 0x367B) / 16; + DoorFacing facing = (DoorFacing)(((itemID - 0x367B) / 2) % 8); + + switch( type ) + { + case 0: door = new GenericHouseDoor( facing, 0x367B, 0xED, 0xF4 ); break; //crystal + case 1: door = new GenericHouseDoor( facing, 0x368B, 0xEC, 0x3E7 ); break; //shadow + } + } + + if( door != null ) + { + if( keyValue == 0 ) + keyValue = CreateKeys( from ); + + door.Locked = true; + door.KeyValue = keyValue; + + AddDoor( door, mte.m_OffsetX, mte.m_OffsetY, mte.m_OffsetZ ); + m_Fixtures.Add( door ); + } + } + } + + for( int i = 0; i < m_Fixtures.Count; ++i ) + { + Item fixture = m_Fixtures[i]; + + if( fixture is HouseTeleporter ) + { + HouseTeleporter tp = (HouseTeleporter)fixture; + + for( int j = 1; j <= m_Fixtures.Count; ++j ) + { + HouseTeleporter check = m_Fixtures[(i + j) % m_Fixtures.Count] as HouseTeleporter; + + if( check != null && check.ItemID == tp.ItemID ) + { + tp.Target = check; + break; + } + } + } + else if( fixture is BaseHouseDoor ) + { + BaseHouseDoor door = (BaseHouseDoor)fixture; + + if( door.Link != null ) + continue; + + DoorFacing linkFacing; + int xOffset, yOffset; + + switch( door.Facing ) + { + default: + case DoorFacing.WestCW: linkFacing = DoorFacing.EastCCW; xOffset = 1; yOffset = 0; break; + case DoorFacing.EastCCW: linkFacing = DoorFacing.WestCW; xOffset = -1; yOffset = 0; break; + case DoorFacing.WestCCW: linkFacing = DoorFacing.EastCW; xOffset = 1; yOffset = 0; break; + case DoorFacing.EastCW: linkFacing = DoorFacing.WestCCW; xOffset = -1; yOffset = 0; break; + case DoorFacing.SouthCW: linkFacing = DoorFacing.NorthCCW; xOffset = 0; yOffset = -1; break; + case DoorFacing.NorthCCW: linkFacing = DoorFacing.SouthCW; xOffset = 0; yOffset = 1; break; + case DoorFacing.SouthCCW: linkFacing = DoorFacing.NorthCW; xOffset = 0; yOffset = -1; break; + case DoorFacing.NorthCW: linkFacing = DoorFacing.SouthCCW; xOffset = 0; yOffset = 1; break; + case DoorFacing.SouthSW: linkFacing = DoorFacing.SouthSE; xOffset = 1; yOffset = 0; break; + case DoorFacing.SouthSE: linkFacing = DoorFacing.SouthSW; xOffset = -1; yOffset = 0; break; + case DoorFacing.WestSN: linkFacing = DoorFacing.WestSS; xOffset = 0; yOffset = 1; break; + case DoorFacing.WestSS: linkFacing = DoorFacing.WestSN; xOffset = 0; yOffset = -1; break; + } + + for( int j = i + 1; j < m_Fixtures.Count; ++j ) + { + BaseHouseDoor check = m_Fixtures[j] as BaseHouseDoor; + + if( check != null && check.Link == null && check.Facing == linkFacing && (check.X - door.X) == xOffset && (check.Y - door.Y) == yOffset && (check.Z == door.Z) ) + { + check.Link = door; + door.Link = check; + break; + } + } + } + } + } + + public void AddFixture( Item item, MultiTileEntry mte ) + { + m_Fixtures.Add( item ); + item.MoveToWorld( new Point3D( X + mte.m_OffsetX, Y + mte.m_OffsetY, Z + mte.m_OffsetZ ), Map ); + } + + public static void GetFoundationGraphics( FoundationType type, out int east, out int south, out int post, out int corner ) + { + switch( type ) + { + default: + case FoundationType.DarkWood: corner = 0x0014; east = 0x0015; south = 0x0016; post = 0x0017; break; + case FoundationType.LightWood: corner = 0x00BD; east = 0x00BE; south = 0x00BF; post = 0x00C0; break; + case FoundationType.Dungeon: corner = 0x02FD; east = 0x02FF; south = 0x02FE; post = 0x0300; break; + case FoundationType.Brick: corner = 0x0041; east = 0x0043; south = 0x0042; post = 0x0044; break; + case FoundationType.Stone: corner = 0x0065; east = 0x0064; south = 0x0063; post = 0x0066; break; + + case FoundationType.ElvenGrey: corner = 0x2DF7; east = 0x2DF9; south = 0x2DFA; post = 0x2DF8; break; + case FoundationType.ElvenNatural: corner = 0x2DFB; east = 0x2DFD; south = 0x2DFE; post = 0x2DFC; break; + + case FoundationType.Crystal: corner = 0x3672; east = 0x3671; south = 0x3670; post = 0x3673; break; + case FoundationType.Shadow: corner = 0x3676; east = 0x3675; south = 0x3674; post = 0x3677; break; + } + } + + public static void ApplyFoundation( FoundationType type, MultiComponentList mcl ) + { + int east, south, post, corner; + + GetFoundationGraphics( type, out east, out south, out post, out corner ); + + int xCenter = mcl.Center.X; + int yCenter = mcl.Center.Y; + + mcl.Add( post, 0 - xCenter, 0 - yCenter, 0 ); + mcl.Add( corner, mcl.Width - 1 - xCenter, mcl.Height - 2 - yCenter, 0 ); + + for( int x = 1; x < mcl.Width; ++x ) + { + mcl.Add( south, x - xCenter, 0 - yCenter, 0 ); + + if( x < mcl.Width-1 ) + mcl.Add( south, x - xCenter, mcl.Height - 2 - yCenter, 0 ); + } + + for( int y = 1; y < mcl.Height - 1; ++y ) + { + mcl.Add( east, 0 - xCenter, y - yCenter, 0 ); + + if( y < mcl.Height - 2 ) + mcl.Add( east, mcl.Width - 1 - xCenter, y - yCenter, 0 ); + } + } + + public static void AddStairsTo( ref MultiComponentList mcl ) + { + // copy the original.. + mcl = new MultiComponentList( mcl ); + + mcl.Resize( mcl.Width, mcl.Height + 1 ); + + int xCenter = mcl.Center.X; + int yCenter = mcl.Center.Y; + int y = mcl.Height - 1; + + for( int x = 0; x < mcl.Width; ++x ) + mcl.Add( 0x63, x - xCenter, y - yCenter, 0 ); + } + + public MultiComponentList GetEmptyFoundation() + { + // Copy original foundation layout + MultiComponentList mcl = new MultiComponentList( MultiData.GetComponents( ItemID ) ); + + mcl.Resize( mcl.Width, mcl.Height + 1 ); + + int xCenter = mcl.Center.X; + int yCenter = mcl.Center.Y; + int y = mcl.Height - 1; + + ApplyFoundation( m_Type, mcl ); + + for( int x = 1; x < mcl.Width; ++x ) + mcl.Add( 0x751, x - xCenter, y - yCenter, 0 ); + + return mcl; + } + + public override Rectangle2D[] Area + { + get + { + MultiComponentList mcl = Components; + + return new Rectangle2D[] { new Rectangle2D( mcl.Min.X, mcl.Min.Y, mcl.Width, mcl.Height ) }; + } + } + + public override Point3D BaseBanLocation { get { return new Point3D( Components.Min.X, Components.Height - 1 - Components.Center.Y, 0 ); } } + + public void CheckSignpost() + { + MultiComponentList mcl = this.Components; + + int x = mcl.Min.X; + int y = mcl.Height - 2 - mcl.Center.Y; + + if( CheckWall( mcl, x, y ) ) + { + if( m_Signpost != null ) + m_Signpost.Delete(); + + m_Signpost = null; + } + else if( m_Signpost == null ) + { + m_Signpost = new Static( m_SignpostGraphic ); + m_Signpost.MoveToWorld( new Point3D( X + x, Y + y, Z + 7 ), Map ); + } + else + { + m_Signpost.ItemID = m_SignpostGraphic; + m_Signpost.MoveToWorld( new Point3D( X + x, Y + y, Z + 7 ), Map ); + } + } + + public bool CheckWall( MultiComponentList mcl, int x, int y ) + { + x += mcl.Center.X; + y += mcl.Center.Y; + + if( x >= 0 && x < mcl.Width && y >= 0 && y < mcl.Height ) + { + StaticTile[] tiles = mcl.Tiles[x][y]; + + for( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + + if( tile.Z == 7 && tile.Height == 20 ) + return true; + } + } + + return false; + } + + public HouseFoundation( Mobile owner, int multiID, int maxLockdowns, int maxSecures ) + : base( multiID, owner, maxLockdowns, maxSecures ) + { + m_SignpostGraphic = 9; + + m_Fixtures = new List(); + + int x = Components.Min.X; + int y = Components.Height - 1 - Components.Center.Y; + + m_SignHanger = new Static( 0xB98 ); + m_SignHanger.MoveToWorld( new Point3D( X + x, Y + y, Z + 7 ), Map ); + + CheckSignpost(); + + SetSign( x, y, 7 ); + } + + public HouseFoundation( Serial serial ) + : base( serial ) + { + } + + public void BeginCustomize( Mobile m ) + { + if( !m.CheckAlive() ) + return; + + RelocateEntities(); + + foreach( Item item in GetItems() ) + { + item.Location = BanLocation; + } + + foreach( Mobile mobile in GetMobiles() ) + { + if( mobile != m ) + mobile.Location = BanLocation; + } + + DesignContext.Add( m, this ); + m.Send( new BeginHouseCustomization( this ) ); + + NetState ns = m.NetState; + if( ns != null ) + SendInfoTo( ns ); + + DesignState.SendDetailedInfoTo( ns ); + } + + public override void SendInfoTo( NetState state, bool sendOplPacket ) + { + base.SendInfoTo( state, sendOplPacket ); + + DesignContext context = DesignContext.Find( state.Mobile ); + DesignState stateToSend; + + if( context != null && context.Foundation == this ) + stateToSend = DesignState; + else + stateToSend = CurrentState; + + stateToSend.SendGeneralInfoTo( state ); + } + + public override void Serialize( GenericWriter writer ) + { + writer.Write( (int)5 ); // version + + writer.Write( m_Signpost ); + writer.Write( (int)m_SignpostGraphic ); + + writer.Write( (int)m_Type ); + + writer.Write( m_SignHanger ); + + writer.Write( (int)m_LastRevision ); + writer.Write( m_Fixtures, true ); + + CurrentState.Serialize( writer ); + DesignState.Serialize( writer ); + BackupState.Serialize( writer ); + + base.Serialize( writer ); + } + + private int m_DefaultPrice; + + public override int DefaultPrice { get { return m_DefaultPrice; } } + + public override void Deserialize( GenericReader reader ) + { + int version = reader.ReadInt(); + + switch( version ) + { + case 5: + case 4: + { + m_Signpost = reader.ReadItem(); + m_SignpostGraphic = reader.ReadInt(); + + goto case 3; + } + case 3: + { + m_Type = (FoundationType)reader.ReadInt(); + + goto case 2; + } + case 2: + { + m_SignHanger = reader.ReadItem(); + + goto case 1; + } + case 1: + { + if( version < 5 ) + m_DefaultPrice = reader.ReadInt(); + + goto case 0; + } + case 0: + { + if( version < 3 ) + m_Type = FoundationType.Stone; + + if( version < 4 ) + m_SignpostGraphic = 9; + + m_LastRevision = reader.ReadInt(); + m_Fixtures = reader.ReadStrongItemList(); + + m_Current = new DesignState( this, reader ); + m_Design = new DesignState( this, reader ); + m_Backup = new DesignState( this, reader ); + + break; + } + } + + base.Deserialize( reader ); + } + + public bool IsHiddenToCustomizer( Item item ) + { + return (item == m_Signpost || item == m_SignHanger || item == Sign || (m_Fixtures != null && m_Fixtures.Contains( item ))); + } + + public static void Initialize() + { + PacketHandlers.RegisterExtended( 0x1E, true, new OnPacketReceive( QueryDesignDetails ) ); + + PacketHandlers.RegisterEncoded( 0x02, true, new OnEncodedPacketReceive( Designer_Backup ) ); + PacketHandlers.RegisterEncoded( 0x03, true, new OnEncodedPacketReceive( Designer_Restore ) ); + PacketHandlers.RegisterEncoded( 0x04, true, new OnEncodedPacketReceive( Designer_Commit ) ); + PacketHandlers.RegisterEncoded( 0x05, true, new OnEncodedPacketReceive( Designer_Delete ) ); + PacketHandlers.RegisterEncoded( 0x06, true, new OnEncodedPacketReceive( Designer_Build ) ); + PacketHandlers.RegisterEncoded( 0x0C, true, new OnEncodedPacketReceive( Designer_Close ) ); + PacketHandlers.RegisterEncoded( 0x0D, true, new OnEncodedPacketReceive( Designer_Stairs ) ); + PacketHandlers.RegisterEncoded( 0x0E, true, new OnEncodedPacketReceive( Designer_Sync ) ); + PacketHandlers.RegisterEncoded( 0x10, true, new OnEncodedPacketReceive( Designer_Clear ) ); + PacketHandlers.RegisterEncoded( 0x12, true, new OnEncodedPacketReceive( Designer_Level ) ); + + PacketHandlers.RegisterEncoded( 0x13, true, new OnEncodedPacketReceive( Designer_Roof ) ); // Samurai Empire roof + PacketHandlers.RegisterEncoded( 0x14, true, new OnEncodedPacketReceive( Designer_RoofDelete ) ); // Samurai Empire roof + + PacketHandlers.RegisterEncoded( 0x1A, true, new OnEncodedPacketReceive( Designer_Revert ) ); + + CommandSystem.Register( "DesignInsert", AccessLevel.GameMaster, new CommandEventHandler( DesignInsert_OnCommand ) ); + + EventSink.Speech += new SpeechEventHandler( EventSink_Speech ); + } + + private static void EventSink_Speech( SpeechEventArgs e ) + { + if( DesignContext.Find( e.Mobile ) != null ) + { + e.Mobile.SendLocalizedMessage( 1061925 ); // You cannot speak while customizing your house. + e.Blocked = true; + } + } + + public static void Designer_Sync( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client requested state synchronization + * - Resend full house state + */ + + DesignState design = context.Foundation.DesignState; + + // Resend full house state + design.SendDetailedInfoTo( state ); + } + } + + public static void Designer_Clear( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client chose to clear the design + * - Restore empty foundation + * - Construct new design state from empty foundation + * - Assign constructed state to foundation + * - Update revision + * - Update client with new state + */ + + // Restore empty foundation : Construct new design state from empty foundation + DesignState newDesign = new DesignState( context.Foundation, context.Foundation.GetEmptyFoundation() ); + + // Restore empty foundation : Assign constructed state to foundation + context.Foundation.DesignState = newDesign; + + // Update revision + newDesign.OnRevised(); + + // Update client with new state + context.Foundation.SendInfoTo( state ); + newDesign.SendDetailedInfoTo( state ); + } + } + + public static void Designer_Restore( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client chose to restore design to the last backup state + * - Restore backup + * - Construct new design state from backup state + * - Assign constructed state to foundation + * - Update revision + * - Update client with new state + */ + + // Restore backup : Construct new design state from backup state + DesignState backupDesign = new DesignState( context.Foundation.BackupState ); + + // Restore backup : Assign constructed state to foundation + context.Foundation.DesignState = backupDesign; + + // Update revision; + backupDesign.OnRevised(); + + // Update client with new state + context.Foundation.SendInfoTo( state ); + backupDesign.SendDetailedInfoTo( state ); + } + } + + public static void Designer_Backup( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client chose to backup design state + * - Construct a copy of the current design state + * - Assign constructed state to backup state field + */ + + // Construct a copy of the current design state + DesignState copyState = new DesignState( context.Foundation.DesignState ); + + // Assign constructed state to backup state field + context.Foundation.BackupState = copyState; + } + } + + public static void Designer_Revert( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client chose to revert design state to currently visible state + * - Revert design state + * - Construct a copy of the current visible state + * - Freeze fixtures in constructed state + * - Assign constructed state to foundation + * - If a signpost is needed, add it + * - Update revision + * - Update client with new state + */ + + // Revert design state : Construct a copy of the current visible state + DesignState copyState = new DesignState( context.Foundation.CurrentState ); + + // Revert design state : Freeze fixtures in constructed state + copyState.FreezeFixtures(); + + // Revert design state : Assign constructed state to foundation + context.Foundation.DesignState = copyState; + + // Revert design state : If a signpost is needed, add it + context.Foundation.CheckSignpost(); + + // Update revision + copyState.OnRevised(); + + // Update client with new state + context.Foundation.SendInfoTo( state ); + copyState.SendDetailedInfoTo( state ); + } + } + + public void EndConfirmCommit( Mobile from ) + { + int oldPrice = Price; + int newPrice = oldPrice + CustomizationCost + ((DesignState.Components.List.Length - ( CurrentState.Components.List.Length + CurrentState.Fixtures.Length )) * 500); + int cost = newPrice - oldPrice; + + if ( !this.Deleted ) { // Temporary Fix. We should be booting a client out of customization mode in the delete handler. + if ( from.AccessLevel >= AccessLevel.GameMaster && cost != 0 ) + { + from.SendMessage( "{0} gold would have been {1} your inn chest if you were not a GM.", cost.ToString(), ((cost > 0 )? "withdrawn from" : "deposited into" ) ); + } + else + { + if ( cost > 0 ) + { + if ( Innkeeper.Withdraw( from, cost ) ) + { + from.SendLocalizedMessage( 1060398, cost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your inn chest. + } + else + { + from.SendLocalizedMessage( 1061903 ); // You cannot commit this house design, because you do not have the necessary funds in your inn chest to pay for the upgrade. Please back up your design, obtain the required funds, and commit your design again. + return; + } + } + else if ( cost < 0 ) + { + if ( Innkeeper.Deposit( from, -cost ) ) + from.SendLocalizedMessage( 1060397, ( -cost ).ToString() ); // ~1_AMOUNT~ gold has been deposited into your inn chest. + else + return; + } + } + } + + /* Client chose to commit current design state + * - Commit design state + * - Construct a copy of the current design state + * - Clear visible fixtures + * - Melt fixtures from constructed state + * - Add melted fixtures from constructed state + * - Assign constructed state to foundation + * - Update house price + * - Remove design context + * - Notify the client that customization has ended + * - Notify the core that the foundation has changed and should be resent to all clients + * - If a signpost is needed, add it + * - Eject all from house + * - Restore relocated entities + */ + + // Commit design state : Construct a copy of the current design state + DesignState copyState = new DesignState( DesignState ); + + // Commit design state : Clear visible fixtures + ClearFixtures( from ); + + // Commit design state : Melt fixtures from constructed state + copyState.MeltFixtures(); + + // Commit design state : Add melted fixtures from constructed state + AddFixtures( from, copyState.Fixtures ); + + // Commit design state : Assign constructed state to foundation + CurrentState = copyState; + + // Update house price + Price = newPrice - CustomizationCost; + + // Remove design context + DesignContext.Remove( from ); + + // Notify the client that customization has ended + from.Send( new EndHouseCustomization( this ) ); + + // Notify the core that the foundation has changed and should be resent to all clients + Delta( ItemDelta.Update ); + ProcessDelta(); + CurrentState.SendDetailedInfoTo( from.NetState ); + + // If a signpost is needed, add it + CheckSignpost(); + + // Eject all from house + from.RevealingAction(); + + foreach( Item item in GetItems() ) + item.Location = BanLocation; + + foreach( Mobile mobile in GetMobiles() ) + mobile.Location = BanLocation; + + // Restore relocated entities + RestoreRelocatedEntities(); + } + + public static void Designer_Commit( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + int oldPrice = context.Foundation.Price; + int newPrice = oldPrice + context.Foundation.CustomizationCost + ((context.Foundation.DesignState.Components.List.Length - ( context.Foundation.CurrentState.Components.List.Length + context.Foundation.Fixtures.Count) ) * 500); + int innBalance = Innkeeper.GetBalance( from ); + + from.SendGump( new ConfirmCommitGump( from, context.Foundation, innBalance, oldPrice, newPrice ) ); + } + } + + public int MaxLevels + { + get + { + MultiComponentList mcl = this.Components; + + if( mcl.Width >= 14 || mcl.Height >= 14 ) + return 4; + else + return 3; + } + } + + public static int GetLevelZ( int level, HouseFoundation house ) + { + if( level < 1 || level > house.MaxLevels ) + level = 1; + + return (level-1)*20 + 7; + + /* + switch( level ) + { + default: + case 1: return 07; + case 2: return 27; + case 3: return 47; + case 4: return 67; + } + * */ + } + + public static int GetZLevel( int z, HouseFoundation house ) + { + int level = (z - 7)/20 +1; + + if( level < 1 || level > house.MaxLevels ) + level = 1; + + return level; + } + + private static ComponentVerification m_Verification; + + public static ComponentVerification Verification + { + get + { + if ( m_Verification == null ) + m_Verification = new ComponentVerification(); + + return m_Verification; + } + } + + public static bool ValidPiece( int itemID ) + { + return ValidPiece( itemID, false ); + } + + public static bool ValidPiece( int itemID, bool roof ) + { + itemID &= TileData.MaxItemValue; + + if ( !roof && ( TileData.ItemTable[itemID].Flags & TileFlag.Roof ) != 0 ) + return false; + else if ( roof && ( TileData.ItemTable[itemID].Flags & TileFlag.Roof ) == 0 ) + return false; + + return Verification.IsItemValid( itemID ); + } + + private static int[] m_BlockIDs = new int[] + { + 0x3EE, 0x709, 0x71E, 0x721, + 0x738, 0x750, 0x76C, 0x788, + 0x7A3, 0x7BA, 0x35D2, 0x3609 + }; + + private static int[] m_StairSeqs = new int[] + { + 0x3EF, 0x70A, 0x722, 0x739, + 0x751, 0x76D, 0x789, 0x7A4 + }; + + private static int[] m_StairIDs = new int[] + { + 0x71F, 0x736, 0x737, 0x749, + 0x35D4, 0x35D3, 0x35D6, 0x35D5, + 0x360B, 0x360A, 0x360D, 0x360C, + 0x7BB, 0x7BC + }; + + public static bool IsStairBlock( int id ) + { + int delta = -1; + + for( int i = 0; delta < 0 && i < m_BlockIDs.Length; ++i ) + delta = (m_BlockIDs[i] - id); + + return (delta == 0); + + //if ID matches one of the the items in m_BlockIDs, return true + } + + public static bool IsStair( int id, ref int dir ) + { + //dir n=0 w=1 s=2 e=3 + int delta = -4; + + for( int i = 0; delta < -3 && i < m_StairSeqs.Length; ++i ) + delta = (m_StairSeqs[i] - id); + + if( delta >= -3 && delta <= 0 ) + { + dir = -delta; + return true; + } + + delta = -1; + + for( int i = 0; ( delta < 0 || delta > 0 ) && i < m_StairIDs.Length; ++i ) + { + delta = (m_StairIDs[i] - id); + dir = i % 4; + } + + return (delta == 0); + } + + public static bool DeleteStairs( MultiComponentList mcl, int id, int x, int y, int z ) + { + int ax = x + mcl.Center.X; + int ay = y + mcl.Center.Y; + + if( ax < 0 || ay < 0 || ax >= mcl.Width || ay >= (mcl.Height - 1) || z < 7 || ((z - 7) % 5) != 0 ) + return false; + + if( IsStairBlock( id ) ) + { + StaticTile[] tiles = mcl.Tiles[ax][ay]; + + for( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + + if( tile.Z == (z + 5) ) + { + id = tile.ID; + z = tile.Z; + + if( !IsStairBlock( id ) ) + break; + } + } + } + + int dir = 0; + + if( !IsStair( id, ref dir ) ) + return false; + + int height = ((z - 7) % 20) / 5; + + int xStart, yStart; + int xInc, yInc; + + switch( dir ) + { + default: + case 0: // North + { + xStart = x; + yStart = y + height; + xInc = 0; + yInc = -1; + break; + } + case 1: // West + { + xStart = x + height; + yStart = y; + xInc = -1; + yInc = 0; + break; + } + case 2: // South + { + xStart = x; + yStart = y - height; + xInc = 0; + yInc = 1; + break; + } + case 3: // East + { + xStart = x - height; + yStart = y; + xInc = 1; + yInc = 0; + break; + } + } + + int zStart = z - (height * 5); + + for( int i = 0; i < 4; ++i ) + { + x = xStart + (i * xInc); + y = yStart + (i * yInc); + + for( int j = 0; j <= i; ++j ) + mcl.RemoveXYZH( x, y, zStart + (j * 5), 5 ); + + ax = x + mcl.Center.X; + ay = y + mcl.Center.Y; + + if( ax >= 1 && ax < mcl.Width && ay >= 1 && ay < mcl.Height - 1 ) + { + StaticTile[] tiles = mcl.Tiles[ax][ay]; + + bool hasBaseFloor = false; + + for( int j = 0; !hasBaseFloor && j < tiles.Length; ++j ) + hasBaseFloor = (tiles[j].Z == 7 && tiles[j].ID != 1); + + if( !hasBaseFloor ) + mcl.Add( 0x31F4, x, y, 7 ); + } + } + + return true; + } + + public static void Designer_Delete( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client chose to delete a component + * - Read data detailing which component to delete + * - Verify component is deletable + * - Remove the component + * - If needed, replace removed component with a dirt tile + * - Update revision + */ + + // Read data detailing which component to delete + int itemID = pvSrc.ReadInt32(); + int x = pvSrc.ReadInt32(); + int y = pvSrc.ReadInt32(); + int z = pvSrc.ReadInt32(); + + // Verify component is deletable + DesignState design = context.Foundation.DesignState; + MultiComponentList mcl = design.Components; + + int ax = x + mcl.Center.X; + int ay = y + mcl.Center.Y; + + if( z == 0 && ax >= 0 && ax < mcl.Width && ay >= 0 && ay < (mcl.Height - 1) ) + { + /* Component is not deletable + * - Resend design state + * - Return without further processing + */ + + design.SendDetailedInfoTo( state ); + return; + } + + mcl.Remove( itemID, x, y, z ); + + int dir = 0; + + if( IsStair( itemID, ref dir ) || IsStairBlock( itemID ) ) + design.SendGeneralInfoTo( state ); + + // If needed, replace removed component with a dirt tile + if( ax >= 1 && ax < mcl.Width && ay >= 1 && ay < mcl.Height - 1 ) + { + StaticTile[] tiles = mcl.Tiles[ax][ay]; + + bool hasBaseFloor = false; + + for( int i = 0; !hasBaseFloor && i < tiles.Length; ++i ) + hasBaseFloor = (tiles[i].Z == 7 && tiles[i].ID != 1); + + if( !hasBaseFloor ) + { + // Replace with a dirt tile + mcl.Add( 0x31F4, x, y, 7 ); + } + } + + // Update revision + design.OnRevised(); + } + } + + public static void Designer_Stairs( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client chose to add stairs + * - Read data detailing stair type and location + * - Validate stair multi ID + * - Add the stairs + * - Load data describing the stair components + * - Insert described components + * - Update revision + */ + + // Read data detailing stair type and location + int itemID = pvSrc.ReadInt32(); + int x = pvSrc.ReadInt32(); + int y = pvSrc.ReadInt32(); + + // Validate stair multi ID + DesignState design = context.Foundation.DesignState; + + if ( !Verification.IsMultiValid( itemID ) ) + { + /* Specified multi ID is not a stair + * - Resend design state + * - Return without further processing + */ + + TraceValidity( state, itemID ); + design.SendDetailedInfoTo( state ); + return; + } + + // Add the stairs + MultiComponentList mcl = design.Components; + + // Add the stairs : Load data describing stair components + MultiComponentList stairs = MultiData.GetComponents( itemID ); + + // Add the stairs : Insert described components + int z = GetLevelZ( context.Level, context.Foundation ); + + for( int i = 0; i < stairs.List.Length; ++i ) + { + MultiTileEntry entry = stairs.List[i]; + + if( entry.m_ItemID != 1 ) + mcl.Add( entry.m_ItemID, x + entry.m_OffsetX, y + entry.m_OffsetY, z + entry.m_OffsetZ ); + } + + // Update revision + design.OnRevised(); + } + } + + [Usage( "DesignInsert" )] + [Description( "Inserts multiple targeted items into a customizable houses design." )] + public static void DesignInsert_OnCommand( CommandEventArgs e ) + { + e.Mobile.Target = new DesignInsertTarget( null ); + e.Mobile.SendMessage( "Target an item to insert it into the house design." ); + } + + private class DesignInsertTarget : Target + { + private HouseFoundation m_Foundation; + + public DesignInsertTarget( HouseFoundation foundation ) + : base( -1, false, TargetFlags.None ) + { + m_Foundation = foundation; + } + + protected override void OnTargetCancel( Mobile from, TargetCancelType cancelType ) + { + if( m_Foundation != null ) + { + from.SendMessage( "Your changes have been committed. Updating..." ); + + m_Foundation.Delta( ItemDelta.Update ); + } + } + + protected override void OnTarget( Mobile from, object obj ) + { + Item item = obj as Item; + + if( item == null ) + { + from.Target = new DesignInsertTarget( m_Foundation ); + from.SendMessage( "That is not an item. Try again." ); + } + else + { + HouseFoundation house = BaseHouse.FindHouseAt( item ) as HouseFoundation; + + if( house == null ) + { + from.Target = new DesignInsertTarget( m_Foundation ); + from.SendMessage( "That item is not inside a customizable house. Try again." ); + } + else if( m_Foundation != null && house != m_Foundation ) + { + from.Target = new DesignInsertTarget( m_Foundation ); + from.SendMessage( "That item is not inside the current house; all targeted items must reside in the same house. You may cancel this target and repeat the command." ); + } + else + { + DesignState state = house.CurrentState; + MultiComponentList mcl = state.Components; + + int x = item.X - house.X; + int y = item.Y - house.Y; + int z = item.Z - house.Z; + + if( x >= mcl.Min.X && y >= mcl.Min.Y && x <= mcl.Max.X && y <= mcl.Max.Y ) + { + mcl.Add( item.ItemID, x, y, z ); + item.Delete(); + + state.OnRevised(); + + state = house.DesignState; + mcl = state.Components; + + if( x >= mcl.Min.X && y >= mcl.Min.Y && x <= mcl.Max.X && y <= mcl.Max.Y ) + { + mcl.Add( item.ItemID, x, y, z ); + state.OnRevised(); + } + + from.Target = new DesignInsertTarget( house ); + + if( m_Foundation == null ) + from.SendMessage( "The item has been inserted into the house design. Press ESC when you are finished." ); + else + from.SendMessage( "The item has been inserted into the house design." ); + + m_Foundation = house; + } + else + { + from.Target = new DesignInsertTarget( m_Foundation ); + from.SendMessage( "That item is not inside a customizable house. Try again." ); + } + } + } + } + } + + private static void TraceValidity( NetState state, int itemID ) + { + try + { + using ( StreamWriter op = new StreamWriter( "comp_val.log", true ) ) + op.WriteLine( "{0}\t{1}\tInvalid ItemID 0x{2:X4}", state, state.Mobile, itemID ); + } + catch + { + } + } + + public static void Designer_Build( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client chose to add a component + * - Read data detailing component graphic and location + * - Add component + * - Update revision + */ + + // Read data detailing component graphic and location + int itemID = pvSrc.ReadInt32(); + int x = pvSrc.ReadInt32(); + int y = pvSrc.ReadInt32(); + + // Add component + DesignState design = context.Foundation.DesignState; + + if( from.AccessLevel < AccessLevel.GameMaster && !ValidPiece( itemID ) ) + { + TraceValidity( state, itemID ); + design.SendDetailedInfoTo( state ); + return; + } + + MultiComponentList mcl = design.Components; + + int z = GetLevelZ( context.Level, context.Foundation ); + + if( (y + mcl.Center.Y) == (mcl.Height - 1) ) + z = 0; // Tiles placed on the far-south of the house are at 0 Z + + mcl.Add( itemID, x, y, z ); + + // Update revision + design.OnRevised(); + } + } + + public static void Designer_Close( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client closed his house design window + * - Remove design context + * - Notify the client that customization has ended + * - Refresh client with current visable design state + * - If a signpost is needed, add it + * - Eject all from house + * - Restore relocated entities + */ + + // Remove design context + DesignContext.Remove( from ); + + // Notify the client that customization has ended + from.Send( new EndHouseCustomization( context.Foundation ) ); + + // Refresh client with current visible design state + context.Foundation.SendInfoTo( state ); + context.Foundation.CurrentState.SendDetailedInfoTo( state ); + + // If a signpost is needed, add it + context.Foundation.CheckSignpost(); + + // Eject all from house + from.RevealingAction(); + + foreach( Item item in context.Foundation.GetItems() ) + item.Location = context.Foundation.BanLocation; + + foreach( Mobile mobile in context.Foundation.GetMobiles() ) + mobile.Location = context.Foundation.BanLocation; + + // Restore relocated entities + context.Foundation.RestoreRelocatedEntities(); + } + } + + public static void Designer_Level( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) + { + /* Client is moving to a new floor level + * - Read data detailing the target level + * - Validate target level + * - Update design context with new level + * - Teleport mobile to new level + * - Update client + * + */ + + // Read data detailing the target level + int newLevel = pvSrc.ReadInt32(); + + // Validate target level + if( newLevel < 1 || newLevel > context.MaxLevels ) + newLevel = 1; + + // Update design context with new level + context.Level = newLevel; + + // Teleport mobile to new level + from.Location = new Point3D( from.X, from.Y, context.Foundation.Z + GetLevelZ( newLevel, context.Foundation ) ); + + // Update client + context.Foundation.SendInfoTo( state ); + } + } + + public static void QueryDesignDetails( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + HouseFoundation foundation = World.FindItem( pvSrc.ReadInt32() ) as HouseFoundation; + + if( foundation != null && from.Map == foundation.Map && from.InRange( foundation.GetWorldLocation(), 24 ) && from.CanSee( foundation ) ) + { + DesignState stateToSend; + + if( context != null && context.Foundation == foundation ) + stateToSend = foundation.DesignState; + else + stateToSend = foundation.CurrentState; + + stateToSend.SendDetailedInfoTo( state ); + } + } + + public static void Designer_Roof( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null && from.AccessLevel >= AccessLevel.GameMaster ) + { + // Read data detailing component graphic and location + int itemID = pvSrc.ReadInt32(); + int x = pvSrc.ReadInt32(); + int y = pvSrc.ReadInt32(); + int z = pvSrc.ReadInt32(); + + // Add component + DesignState design = context.Foundation.DesignState; + + if( from.AccessLevel < AccessLevel.GameMaster && !ValidPiece( itemID, true ) ) + { + TraceValidity( state, itemID ); + design.SendDetailedInfoTo( state ); + return; + } + + MultiComponentList mcl = design.Components; + + if( z < -3 || z > 12 || z % 3 != 0 ) + z = -3; + z += GetLevelZ( context.Level, context.Foundation ); + + MultiTileEntry[] list = mcl.List; + for( int i = 0; i < list.Length; i++ ) + { + MultiTileEntry mte = list[i]; + + if( mte.m_OffsetX == x && mte.m_OffsetY == y && GetZLevel( mte.m_OffsetZ, context.Foundation ) == context.Level && (TileData.ItemTable[mte.m_ItemID & TileData.MaxItemValue].Flags & TileFlag.Roof) != 0 ) + mcl.Remove( mte.m_ItemID, x, y, mte.m_OffsetZ ); + } + + mcl.Add( itemID, x, y, z ); + + // Update revision + design.OnRevised(); + } + } + + public static void Designer_RoofDelete( NetState state, IEntity e, EncodedReader pvSrc ) + { + Mobile from = state.Mobile; + DesignContext context = DesignContext.Find( from ); + + if( context != null ) //No need to check if core.SE if trying to remvoe something that shouldn't be able to be placed anyways + { + // Read data detailing which component to delete + int itemID = pvSrc.ReadInt32(); + int x = pvSrc.ReadInt32(); + int y = pvSrc.ReadInt32(); + int z = pvSrc.ReadInt32(); + + // Verify component is deletable + DesignState design = context.Foundation.DesignState; + MultiComponentList mcl = design.Components; + + if( (TileData.ItemTable[itemID & TileData.MaxItemValue].Flags & TileFlag.Roof) == 0 ) + { + design.SendDetailedInfoTo( state ); + return; + } + + mcl.Remove( itemID, x, y, z ); + + design.OnRevised(); + } + } + + + } + + public class DesignState + { + private HouseFoundation m_Foundation; + private MultiComponentList m_Components; + private MultiTileEntry[] m_Fixtures; + private int m_Revision; + private Packet m_PacketCache; + + public Packet PacketCache + { + get { return m_PacketCache; } + set + { + if( m_PacketCache == value ) + return; + + if( m_PacketCache != null ) + m_PacketCache.Release(); + + m_PacketCache = value; + } + } + + public HouseFoundation Foundation { get { return m_Foundation; } } + public MultiComponentList Components { get { return m_Components; } } + public MultiTileEntry[] Fixtures { get { return m_Fixtures; } } + public int Revision { get { return m_Revision; } set { m_Revision = value; } } + + public DesignState( HouseFoundation foundation, MultiComponentList components ) + { + m_Foundation = foundation; + m_Components = components; + m_Fixtures = new MultiTileEntry[0]; + } + + public DesignState( DesignState toCopy ) + { + m_Foundation = toCopy.m_Foundation; + m_Components = new MultiComponentList( toCopy.m_Components ); + m_Revision = toCopy.m_Revision; + m_Fixtures = new MultiTileEntry[toCopy.m_Fixtures.Length]; + + for( int i = 0; i < m_Fixtures.Length; ++i ) + m_Fixtures[i] = toCopy.m_Fixtures[i]; + } + + public DesignState( HouseFoundation foundation, GenericReader reader ) + { + m_Foundation = foundation; + + int version = reader.ReadInt(); + + switch( version ) + { + case 0: + { + m_Components = new MultiComponentList( reader ); + + int length = reader.ReadInt(); + + m_Fixtures = new MultiTileEntry[length]; + + for( int i = 0; i < length; ++i ) + { + m_Fixtures[i].m_ItemID = reader.ReadUShort(); + m_Fixtures[i].m_OffsetX = reader.ReadShort(); + m_Fixtures[i].m_OffsetY = reader.ReadShort(); + m_Fixtures[i].m_OffsetZ = reader.ReadShort(); + m_Fixtures[i].m_Flags = reader.ReadInt(); + } + + m_Revision = reader.ReadInt(); + + break; + } + } + } + + public void Serialize( GenericWriter writer ) + { + writer.Write( (int)0 ); // version + + m_Components.Serialize( writer ); + + writer.Write( (int)m_Fixtures.Length ); + + for( int i = 0; i < m_Fixtures.Length; ++i ) + { + MultiTileEntry ent = m_Fixtures[i]; + + writer.Write( (ushort)ent.m_ItemID ); + writer.Write( (short)ent.m_OffsetX ); + writer.Write( (short)ent.m_OffsetY ); + writer.Write( (short)ent.m_OffsetZ ); + writer.Write( (int)ent.m_Flags ); + } + + writer.Write( (int)m_Revision ); + } + + public void OnRevised() + { + lock( this ) + { + m_Revision = ++m_Foundation.LastRevision; + + if( m_PacketCache != null ) + m_PacketCache.Release(); + + m_PacketCache = null; + } + } + + public void SendGeneralInfoTo( NetState state ) + { + if( state != null ) + state.Send( new DesignStateGeneral( m_Foundation, this ) ); + } + + public void SendDetailedInfoTo( NetState state ) + { + if( state != null ) + { + lock( this ) + { + if( m_PacketCache == null ) + DesignStateDetailed.SendDetails( state, m_Foundation, this ); + else + state.Send( m_PacketCache ); + } + } + } + + public void FreezeFixtures() + { + OnRevised(); + + for( int i = 0; i < m_Fixtures.Length; ++i ) + { + MultiTileEntry mte = m_Fixtures[i]; + + m_Components.Add( mte.m_ItemID, mte.m_OffsetX, mte.m_OffsetY, mte.m_OffsetZ ); + } + + m_Fixtures = new MultiTileEntry[0]; + } + + public void MeltFixtures() + { + OnRevised(); + + MultiTileEntry[] list = m_Components.List; + int length = 0; + + for( int i = list.Length - 1; i >= 0; --i ) + { + MultiTileEntry mte = list[i]; + + if( IsFixture( mte.m_ItemID ) ) + ++length; + } + + m_Fixtures = new MultiTileEntry[length]; + + for( int i = list.Length - 1; i >= 0; --i ) + { + MultiTileEntry mte = list[i]; + + if( IsFixture( mte.m_ItemID ) ) + { + m_Fixtures[--length] = mte; + m_Components.Remove( mte.m_ItemID, mte.m_OffsetX, mte.m_OffsetY, mte.m_OffsetZ ); + } + } + } + + public static bool IsFixture( int itemID ) + { + if( itemID >= 0x675 && itemID < 0x6F5 ) + return true; + else if( itemID >= 0x314 && itemID < 0x364 ) + return true; + else if( itemID >= 0x824 && itemID < 0x834 ) + return true; + else if( itemID >= 0x839 && itemID < 0x849 ) + return true; + else if( itemID >= 0x84C && itemID < 0x85C ) + return true; + else if( itemID >= 0x866 && itemID < 0x876 ) + return true; + else if( itemID >= 0x0E8 && itemID < 0x0F8 ) + return true; + else if( itemID >= 0x1FED && itemID < 0x1FFD ) + return true; + else if( itemID >= 0x181D && itemID < 0x1829 ) + return true; + else if( itemID >= 0x241F && itemID < 0x2421 ) + return true; + else if( itemID >= 0x2423 && itemID < 0x2425 ) + return true; + else if( itemID >= 0x2A05 && itemID < 0x2A1D ) + return true; + else if( itemID >= 0x319C && itemID < 0x31B0 ) + return true; + else if( itemID == 0x2D46 ||itemID == 0x2D48 || itemID == 0x2FE2 || itemID == 0x2FE4 ) //ML doors begin here. Note funkyness. + return true; + else if( itemID >= 0x2D63 && itemID < 0x2D70 ) + return true; + else if( itemID >= 0x319C && itemID < 0x31AF ) + return true; + else if( itemID >= 0x367B && itemID < 0x369B ) + return true; + + return false; + } + } + + public class ConfirmCommitGump : Gump + { + private HouseFoundation m_Foundation; + + public ConfirmCommitGump( Mobile from, HouseFoundation foundation, int innBalance, int oldPrice, int newPrice ) + : base( 50, 50 ) + { + m_Foundation = foundation; + + AddPage( 0 ); + + AddBackground( 0, 0, 320, 320, 5054 ); + + AddImageTiled( 10, 10, 300, 20, 2624 ); + AddImageTiled( 10, 40, 300, 240, 2624 ); + AddImageTiled( 10, 290, 300, 20, 2624 ); + + AddAlphaRegion( 10, 10, 300, 300 ); + + AddHtmlLocalized( 10, 10, 300, 20, 1062060, 32736, false, false ); //
COMMIT DESIGN
+ + AddHtmlLocalized( 10, 40, 300, 140, (newPrice - oldPrice) <= innBalance ? 1061898 : 1061903, 1023, false, true ); + + AddHtmlLocalized( 10, 190, 150, 20, 1061902, 32736, false, false ); // Inn Balance: + AddLabel( 170, 190, 55, innBalance.ToString() ); + + AddHtmlLocalized( 10, 215, 150, 20, 1061899, 1023, false, false ); // Old Value: + AddLabel( 170, 215, 90, oldPrice.ToString() ); + + AddHtmlLocalized( 10, 235, 150, 20, 1061900, 1023, false, false ); // Cost To Commit: + AddLabel( 170, 235, 90, newPrice.ToString() ); + + if ( newPrice - oldPrice < 0 ) + { + AddHtmlLocalized( 10, 260, 150, 20, 1062059, 992, false, false ); // Your Refund: + AddLabel( 170, 260, 70, (oldPrice - newPrice).ToString() ); + } + else + { + AddHtmlLocalized( 10, 260, 150, 20, 1061901, 31744, false, false ); // Your Cost: + AddLabel( 170, 260, 40, (newPrice - oldPrice).ToString() ); + } + + AddButton( 10, 290, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 45, 290, 55, 20, 1011036, 32767, false, false ); // OKAY + + AddButton( 170, 290, 4005, 4007, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 195, 290, 55, 20, 1011012, 32767, false, false ); // CANCEL + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + if( info.ButtonID == 1 ) + m_Foundation.EndConfirmCommit( sender.Mobile ); + } + } + + public class DesignContext + { + private HouseFoundation m_Foundation; + private int m_Level; + + public HouseFoundation Foundation { get { return m_Foundation; } } + public int Level { get { return m_Level; } set { m_Level = value; } } + public int MaxLevels { get { return m_Foundation.MaxLevels; } } + + public DesignContext( HouseFoundation foundation ) + { + m_Foundation = foundation; + m_Level = 1; + } + + private static Dictionary m_Table = new Dictionary(); + + public static Dictionary Table { get { return m_Table; } } + + public static DesignContext Find( Mobile from ) + { + if( from == null ) + return null; + + DesignContext d; + m_Table.TryGetValue( from, out d ); + + return d; + } + + public static bool Check( Mobile m ) + { + if( Find( m ) != null ) + { + m.SendLocalizedMessage( 1062206 ); // You cannot do that while customizing a house. + return false; + } + + return true; + } + + public static void Add( Mobile from, HouseFoundation foundation ) + { + if( from == null ) + return; + + DesignContext c = new DesignContext( foundation ); + + m_Table[from] = c; + + if ( from is PlayerMobile ) + ((PlayerMobile)from).DesignContext = c; + + foundation.Customizer = from; + + from.Hidden = true; + from.Location = new Point3D( foundation.X, foundation.Y, foundation.Z + 7 ); + + NetState state = from.NetState; + + if( state == null ) + return; + + List fixtures = foundation.Fixtures; + + for( int i = 0; fixtures != null && i < fixtures.Count; ++i ) + { + Item item = fixtures[i]; + + state.Send( item.RemovePacket ); + } + + if( foundation.Signpost != null ) + state.Send( foundation.Signpost.RemovePacket ); + + if( foundation.SignHanger != null ) + state.Send( foundation.SignHanger.RemovePacket ); + + if( foundation.Sign != null ) + state.Send( foundation.Sign.RemovePacket ); + } + + public static void Remove( Mobile from ) + { + DesignContext context = Find( from ); + + if ( context == null ) + return; + + m_Table.Remove( from ); + + if( from is PlayerMobile ) + ((PlayerMobile)from).DesignContext = null; + + if( context == null ) + return; + + context.Foundation.Customizer = null; + + NetState state = from.NetState; + + if( state == null ) + return; + + List fixtures = context.Foundation.Fixtures; + + for( int i = 0; fixtures != null && i < fixtures.Count; ++i ) + { + Item item = fixtures[i]; + + item.SendInfoTo( state ); + } + + if( context.Foundation.Signpost != null ) + context.Foundation.Signpost.SendInfoTo( state ); + + if( context.Foundation.SignHanger != null ) + context.Foundation.SignHanger.SendInfoTo( state ); + + if( context.Foundation.Sign != null ) + context.Foundation.Sign.SendInfoTo( state ); + } + } + + public class BeginHouseCustomization : Packet + { + public BeginHouseCustomization( HouseFoundation house ) + : base( 0xBF ) + { + EnsureCapacity( 17 ); + + m_Stream.Write( (short)0x20 ); + m_Stream.Write( (int)house.Serial ); + m_Stream.Write( (byte)0x04 ); + m_Stream.Write( (ushort)0x0000 ); + m_Stream.Write( (ushort)0xFFFF ); + m_Stream.Write( (ushort)0xFFFF ); + m_Stream.Write( (byte)0xFF ); + } + } + + public class EndHouseCustomization : Packet + { + public EndHouseCustomization( HouseFoundation house ) + : base( 0xBF ) + { + EnsureCapacity( 17 ); + + m_Stream.Write( (short)0x20 ); + m_Stream.Write( (int)house.Serial ); + m_Stream.Write( (byte)0x05 ); + m_Stream.Write( (ushort)0x0000 ); + m_Stream.Write( (ushort)0xFFFF ); + m_Stream.Write( (ushort)0xFFFF ); + m_Stream.Write( (byte)0xFF ); + } + } + + public sealed class DesignStateGeneral : Packet + { + public DesignStateGeneral( HouseFoundation house, DesignState state ) + : base( 0xBF ) + { + EnsureCapacity( 13 ); + + m_Stream.Write( (short)0x1D ); + m_Stream.Write( (int)house.Serial ); + m_Stream.Write( (int)state.Revision ); + } + } + + public sealed class DesignStateDetailed : Packet + { + public const int MaxItemsPerStairBuffer = 750; + + private static byte[][] m_PlaneBuffers; + private static bool[] m_PlaneUsed; + + private static byte[][] m_StairBuffers; + + private static byte[] m_PrimBuffer = new byte[4]; + + public void Write( int value ) + { + m_PrimBuffer[0] = (byte)(value >> 24); + m_PrimBuffer[1] = (byte)(value >> 16); + m_PrimBuffer[2] = (byte)(value >> 8); + m_PrimBuffer[3] = (byte)value; + + m_Stream.UnderlyingStream.Write( m_PrimBuffer, 0, 4 ); + } + + public void Write( short value ) + { + m_PrimBuffer[0] = (byte)(value >> 8); + m_PrimBuffer[1] = (byte)value; + + m_Stream.UnderlyingStream.Write( m_PrimBuffer, 0, 2 ); + } + + public void Write( byte value ) + { + m_Stream.UnderlyingStream.WriteByte( value ); + } + + public void Write( byte[] buffer, int offset, int size ) + { + m_Stream.UnderlyingStream.Write( buffer, offset, size ); + } + + public static void Clear( byte[] buffer, int size ) + { + for( int i = 0; i < size; ++i ) + buffer[i] = 0; + } + + public DesignStateDetailed( int serial, int revision, int xMin, int yMin, int xMax, int yMax, MultiTileEntry[] tiles ) + : base( 0xD8 ) + { + EnsureCapacity( 17 + (tiles.Length * 5) ); + + Write( (byte)0x03 ); // Compression Type + Write( (byte)0x00 ); // Unknown + Write( (int)serial ); + Write( (int)revision ); + Write( (short)tiles.Length ); + Write( (short)0 ); // Buffer length : reserved + Write( (byte)0 ); // Plane count : reserved + + int totalLength = 1; // includes plane count + + int width = (xMax - xMin) + 1; + int height = (yMax - yMin) + 1; + + if( m_PlaneBuffers == null ) + { + m_PlaneBuffers = new byte[9][]; + m_PlaneUsed = new bool[9]; + + for( int i = 0; i < m_PlaneBuffers.Length; ++i ) + m_PlaneBuffers[i] = new byte[0x400]; + + m_StairBuffers = new byte[6][]; + + for( int i = 0; i < m_StairBuffers.Length; ++i ) + m_StairBuffers[i] = new byte[MaxItemsPerStairBuffer * 5]; + } + else + { + for( int i = 0; i < m_PlaneUsed.Length; ++i ) + m_PlaneUsed[i] = false; + + Clear( m_PlaneBuffers[0], width * height * 2 ); + + for( int i = 0; i < 4; ++i ) + { + Clear( m_PlaneBuffers[1 + i], (width - 1) * (height - 2) * 2 ); + Clear( m_PlaneBuffers[5 + i], width * (height - 1) * 2 ); + } + } + + int totalStairsUsed = 0; + + for( int i = 0; i < tiles.Length; ++i ) + { + MultiTileEntry mte = tiles[i]; + int x = mte.m_OffsetX - xMin; + int y = mte.m_OffsetY - yMin; + int z = mte.m_OffsetZ; + bool floor = (TileData.ItemTable[mte.m_ItemID & TileData.MaxItemValue].Height <= 0); + int plane, size; + + switch( z ) + { + case 0: plane = 0; break; + case 7: plane = 1; break; + case 27: plane = 2; break; + case 47: plane = 3; break; + case 67: plane = 4; break; + default: + { + int stairBufferIndex = (totalStairsUsed / MaxItemsPerStairBuffer); + byte[] stairBuffer = m_StairBuffers[stairBufferIndex]; + + int byteIndex = (totalStairsUsed % MaxItemsPerStairBuffer) * 5; + + stairBuffer[byteIndex++] = (byte)(mte.m_ItemID >> 8); + stairBuffer[byteIndex++] = (byte)mte.m_ItemID; + + stairBuffer[byteIndex++] = (byte)mte.m_OffsetX; + stairBuffer[byteIndex++] = (byte)mte.m_OffsetY; + stairBuffer[byteIndex++] = (byte)mte.m_OffsetZ; + + ++totalStairsUsed; + + continue; + } + } + + if( plane == 0 ) + { + size = height; + } + else if( floor ) + { + size = height - 2; + x -= 1; + y -= 1; + } + else + { + size = height - 1; + plane += 4; + } + + int index = ((x * size) + y) * 2; + + if( x < 0 || y < 0 || y >= size || (index + 1) >= 0x400 ) + { + int stairBufferIndex = (totalStairsUsed / MaxItemsPerStairBuffer); + byte[] stairBuffer = m_StairBuffers[stairBufferIndex]; + + int byteIndex = (totalStairsUsed % MaxItemsPerStairBuffer) * 5; + + stairBuffer[byteIndex++] = (byte)(mte.m_ItemID >> 8); + stairBuffer[byteIndex++] = (byte)mte.m_ItemID; + + stairBuffer[byteIndex++] = (byte)mte.m_OffsetX; + stairBuffer[byteIndex++] = (byte)mte.m_OffsetY; + stairBuffer[byteIndex++] = (byte)mte.m_OffsetZ; + + ++totalStairsUsed; + } + else + { + m_PlaneUsed[plane] = true; + m_PlaneBuffers[plane][index] = (byte)(mte.m_ItemID >> 8); + m_PlaneBuffers[plane][index + 1] = (byte)mte.m_ItemID; + } + } + + int planeCount = 0; + + for( int i = 0; i < m_PlaneBuffers.Length; ++i ) + { + if( !m_PlaneUsed[i] ) + continue; + + ++planeCount; + + int size = 0; + + if( i == 0 ) + size = width * height * 2; + else if( i < 5 ) + size = (width - 1) * (height - 2) * 2; + else + size = width * (height - 1) * 2; + + byte[] inflatedBuffer = m_PlaneBuffers[i]; + + int deflatedLength = m_DeflatedBuffer.Length; + ZLibError ce = Compression.Pack( m_DeflatedBuffer, ref deflatedLength, inflatedBuffer, size, ZLibQuality.Default ); + + if( ce != ZLibError.Okay ) + { + Console.WriteLine( "ZLib error: {0} (#{1})", ce, (int)ce ); + deflatedLength = 0; + size = 0; + } + + Write( (byte)(0x20 | i) ); + Write( (byte)size ); + Write( (byte)deflatedLength ); + Write( (byte)(((size >> 4) & 0xF0) | ((deflatedLength >> 8) & 0xF)) ); + Write( m_DeflatedBuffer, 0, deflatedLength ); + + totalLength += 4 + deflatedLength; + } + + int totalStairBuffersUsed = (totalStairsUsed + (MaxItemsPerStairBuffer - 1)) / MaxItemsPerStairBuffer; + + for( int i = 0; i < totalStairBuffersUsed; ++i ) + { + ++planeCount; + + int count = (totalStairsUsed - (i * MaxItemsPerStairBuffer)); + + if( count > MaxItemsPerStairBuffer ) + count = MaxItemsPerStairBuffer; + + int size = count * 5; + + byte[] inflatedBuffer = m_StairBuffers[i]; + + int deflatedLength = m_DeflatedBuffer.Length; + ZLibError ce = Compression.Pack( m_DeflatedBuffer, ref deflatedLength, inflatedBuffer, size, ZLibQuality.Default ); + + if( ce != ZLibError.Okay ) + { + Console.WriteLine( "ZLib error: {0} (#{1})", ce, (int)ce ); + deflatedLength = 0; + size = 0; + } + + Write( (byte)(9 + i) ); + Write( (byte)size ); + Write( (byte)deflatedLength ); + Write( (byte)(((size >> 4) & 0xF0) | ((deflatedLength >> 8) & 0xF)) ); + Write( m_DeflatedBuffer, 0, deflatedLength ); + + totalLength += 4 + deflatedLength; + } + + m_Stream.Seek( 15, System.IO.SeekOrigin.Begin ); + + Write( (short)totalLength ); // Buffer length + Write( (byte)planeCount ); // Plane count + } + + private static byte[] m_InflatedBuffer = new byte[0x2000]; + private static byte[] m_DeflatedBuffer = new byte[0x2000]; + + private class SendQueueEntry + { + public NetState m_NetState; + public int m_Serial, m_Revision; + public int m_xMin, m_yMin, m_xMax, m_yMax; + public DesignState m_Root; + public MultiTileEntry[] m_Tiles; + + public SendQueueEntry( NetState ns, HouseFoundation foundation, DesignState state ) + { + m_NetState = ns; + m_Serial = foundation.Serial; + m_Revision = state.Revision; + m_Root = state; + + MultiComponentList mcl = state.Components; + + m_xMin = mcl.Min.X; + m_yMin = mcl.Min.Y; + m_xMax = mcl.Max.X; + m_yMax = mcl.Max.Y; + + m_Tiles = mcl.List; + } + } + + private static Queue m_SendQueue; + private static object m_SendQueueSyncRoot; + private static AutoResetEvent m_Sync; + private static Thread m_Thread; + + static DesignStateDetailed() + { + m_SendQueue = new Queue(); + m_SendQueueSyncRoot = ((ICollection)m_SendQueue).SyncRoot; + m_Sync = new AutoResetEvent( false ); + + m_Thread = new Thread( new ThreadStart( CompressionThread ) ); + m_Thread.Name = "AOS Compression Thread"; + m_Thread.Start(); + } + + public static void CompressionThread() + { + while( !Core.Closing ) + { + m_Sync.WaitOne(); + + int count; + + lock ( m_SendQueueSyncRoot ) + count = m_SendQueue.Count; + + while( count > 0 ) + { + SendQueueEntry sqe = null; + + lock ( m_SendQueueSyncRoot ) + sqe = m_SendQueue.Dequeue(); + + try + { + Packet p = null; + + lock( sqe.m_Root ) + p = sqe.m_Root.PacketCache; + + if( p == null ) + { + p = new DesignStateDetailed( sqe.m_Serial, sqe.m_Revision, sqe.m_xMin, sqe.m_yMin, sqe.m_xMax, sqe.m_yMax, sqe.m_Tiles ); + p.SetStatic(); + + lock( sqe.m_Root ) + { + if( sqe.m_Revision == sqe.m_Root.Revision ) + sqe.m_Root.PacketCache = p; + } + } + + Timer.DelayCall( TimeSpan.Zero, new TimerStateCallback( SendPacket_Sandbox ), new object[] { sqe.m_NetState, p } ); + } + catch( Exception e ) + { + Console.WriteLine( e ); + + try + { + using( StreamWriter op = new StreamWriter( "dsd_exceptions.txt", true ) ) + op.WriteLine( e ); + } + catch + { + } + } + finally + { + lock ( m_SendQueueSyncRoot ) + count = m_SendQueue.Count; + } + + //sqe.m_NetState.Send( new DesignStateDetailed( sqe.m_Serial, sqe.m_Revision, sqe.m_xMin, sqe.m_yMin, sqe.m_xMax, sqe.m_yMax, sqe.m_Tiles ) ); + } + } + } + + public static void SendPacket_Sandbox( object state ) + { + object[] states = (object[])state; + NetState ns = (NetState)states[0]; + Packet p = (Packet)states[1]; + + ns.Send( p ); + } + + public static void SendDetails( NetState ns, HouseFoundation house, DesignState state ) + { + lock ( m_SendQueueSyncRoot ) + m_SendQueue.Enqueue( new SendQueueEntry( ns, house, state ) ); + m_Sync.Set(); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/HousePlacement.cs b/Scripts/Multis/HousePlacement.cs new file mode 100644 index 0000000..dc82e83 --- /dev/null +++ b/Scripts/Multis/HousePlacement.cs @@ -0,0 +1,367 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Guilds; +using Server.Items; +using Server.Misc; +using Server.Regions; +using Server.Spells; + +namespace Server.Multis +{ + public enum HousePlacementResult + { + Valid, + BadRegion, + BadLand, + BadStatic, + BadItem, + NoSurface, + BadRegionHidden, + BadRegionTemp, + } + + public class HousePlacement + { + private const int YardSize = 5; + + // Any land tile which matches one of these ID numbers is considered a road and cannot be placed over. + private static int[] m_RoadIDs = new int[] + { + 0x0071, 0x0078, + 0x00E8, 0x00EB, + 0x07AE, 0x07B1, + 0x3FF4, 0x3FF4, + 0x3FF8, 0x3FFB, + 0x0442, 0x0479, // Sand stones + 0x0501, 0x0510, // Sand stones + 0x0009, 0x0015, // Furrows + 0x0150, 0x015C // Furrows + }; + + public static HousePlacementResult Check( Mobile from, int multiID, Point3D center, out ArrayList toMove ) + { + // If this spot is considered valid, every item and mobile in this list will be moved under the house sign + toMove = new ArrayList(); + + Map map = from.Map; + + if ( map == null || map == Map.Internal || map == Map.Underworld ) + return HousePlacementResult.BadLand; // A house cannot go here + + if ( from.AccessLevel >= AccessLevel.GameMaster ) + return HousePlacementResult.Valid; // Staff can place anywhere + + NoHousingRegion noHousingRegion = (NoHousingRegion) Region.Find( center, map ).GetRegion( typeof( NoHousingRegion ) ); + + if ( noHousingRegion != null ) + return HousePlacementResult.BadRegion; + + // This holds data describing the internal structure of the house + MultiComponentList mcl = MultiData.GetComponents( multiID ); + + if ( multiID >= 0x13EC && multiID < 0x1D00 ) + HouseFoundation.AddStairsTo( ref mcl ); // this is a AOS house, add the stairs + + // Location of the nortwest-most corner of the house + Point3D start = new Point3D( center.X + mcl.Min.X, center.Y + mcl.Min.Y, center.Z ); + + // These are storage lists. They hold items and mobiles found in the map for further processing + List items = new List(); + List mobiles = new List(); + + // These are also storage lists. They hold location values indicating the yard and border locations. + List yard = new List(), borders = new List(); + + /* RULES: + * + * 1) All tiles which are around the -outside- of the foundation must not have anything impassable. + * 2) No impassable object or land tile may come in direct contact with any part of the house. + * 3) Five tiles from the front and back of the house must be completely clear of all house tiles. + * 4) The foundation must rest flatly on a surface. Any bumps around the foundation are not allowed. + * 5) No foundation tile may reside over terrain which is viewed as a road. + */ + + for ( int x = 0; x < mcl.Width; ++x ) + { + for ( int y = 0; y < mcl.Height; ++y ) + { + int tileX = start.X + x; + int tileY = start.Y + y; + + StaticTile[] addTiles = mcl.Tiles[x][y]; + + if ( addTiles.Length == 0 ) + continue; // There are no tiles here, continue checking somewhere else + + Point3D testPoint = new Point3D( tileX, tileY, center.Z ); + + Region reg = Region.Find( testPoint, map ); + + if ( !reg.AllowHousing( from, testPoint ) ) // Cannot place houses in dungeons, towns, treasure map areas etc + { + if ( reg.IsPartOf( typeof( TempNoHousingRegion ) ) ) + return HousePlacementResult.BadRegionTemp; + + if ( reg.IsPartOf( typeof( TreasureRegion ) ) || reg.IsPartOf( typeof( UnderworldEntrance ) ) ) + return HousePlacementResult.BadRegionHidden; + + return HousePlacementResult.BadRegion; + } + + LandTile landTile = map.Tiles.GetLandTile( tileX, tileY ); + int landID = landTile.ID & TileData.MaxLandValue; + + StaticTile[] oldTiles = map.Tiles.GetStaticTiles( tileX, tileY, true ); + + Sector sector = map.GetSector( tileX, tileY ); + + items.Clear(); + + for ( int i = 0; i < sector.Items.Count; ++i ) + { + Item item = sector.Items[i]; + + if ( item.Visible && item.X == tileX && item.Y == tileY ) + items.Add( item ); + } + + mobiles.Clear(); + + for ( int i = 0; i < sector.Mobiles.Count; ++i ) + { + Mobile m = sector.Mobiles[i]; + + if ( m.X == tileX && m.Y == tileY ) + mobiles.Add( m ); + } + + int landStartZ = 0, landAvgZ = 0, landTopZ = 0; + + map.GetAverageZ( tileX, tileY, ref landStartZ, ref landAvgZ, ref landTopZ ); + + bool hasFoundation = false; + + for ( int i = 0; i < addTiles.Length; ++i ) + { + StaticTile addTile = addTiles[i]; + + if ( addTile.ID == 0x1 ) // Nodraw + continue; + + TileFlag addTileFlags = TileData.ItemTable[addTile.ID & TileData.MaxItemValue].Flags; + + bool isFoundation = ( addTile.Z == 0 && (addTileFlags & TileFlag.Wall) != 0 ); + bool hasSurface = false; + + if ( isFoundation ) + hasFoundation = true; + + int addTileZ = center.Z + addTile.Z; + int addTileTop = addTileZ + addTile.Height; + + if ( (addTileFlags & TileFlag.Surface) != 0 ) + addTileTop += 16; + + if ( addTileTop > landStartZ && landAvgZ > addTileZ ) + return HousePlacementResult.BadLand; // Broke rule #2 + + if ( isFoundation && ((TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Impassable) == 0) && landAvgZ == center.Z ) + hasSurface = true; + + for ( int j = 0; j < oldTiles.Length; ++j ) + { + StaticTile oldTile = oldTiles[j]; + ItemData id = TileData.ItemTable[oldTile.ID & TileData.MaxItemValue]; + + if ( (id.Impassable || (id.Surface && (id.Flags & TileFlag.Background) == 0)) && addTileTop > oldTile.Z && (oldTile.Z + id.CalcHeight) > addTileZ ) + return HousePlacementResult.BadStatic; // Broke rule #2 + /*else if ( isFoundation && !hasSurface && (id.Flags & TileFlag.Surface) != 0 && (oldTile.Z + id.CalcHeight) == center.Z ) + hasSurface = true;*/ + } + + for ( int j = 0; j < items.Count; ++j ) + { + Item item = items[j]; + ItemData id = item.ItemData; + + if ( addTileTop > item.Z && (item.Z + id.CalcHeight) > addTileZ ) + { + if ( item.Movable ) + toMove.Add( item ); + else if ( (id.Impassable || (id.Surface && (id.Flags & TileFlag.Background) == 0)) ) + return HousePlacementResult.BadItem; // Broke rule #2 + } + /*else if ( isFoundation && !hasSurface && (id.Flags & TileFlag.Surface) != 0 && (item.Z + id.CalcHeight) == center.Z ) + { + hasSurface = true; + }*/ + } + + if ( isFoundation && !hasSurface ) + return HousePlacementResult.NoSurface; // Broke rule #4 + + for ( int j = 0; j < mobiles.Count; ++j ) + { + Mobile m = mobiles[j]; + + if ( addTileTop > m.Z && (m.Z + 16) > addTileZ ) + toMove.Add( m ); + } + } + + for ( int i = 0; i < m_RoadIDs.Length; i += 2 ) + { + if ( landID >= m_RoadIDs[i] && landID <= m_RoadIDs[i + 1] ) + return HousePlacementResult.BadLand; // Broke rule #5 + } + + if ( hasFoundation ) + { + for ( int xOffset = -1; xOffset <= 1; ++xOffset ) + { + for ( int yOffset = -YardSize; yOffset <= YardSize; ++yOffset ) + { + Point2D yardPoint = new Point2D( tileX + xOffset, tileY + yOffset ); + + if ( !yard.Contains( yardPoint ) ) + yard.Add( yardPoint ); + } + } + + for ( int xOffset = -1; xOffset <= 1; ++xOffset ) + { + for ( int yOffset = -1; yOffset <= 1; ++yOffset ) + { + if ( xOffset == 0 && yOffset == 0 ) + continue; + + // To ease this rule, we will not add to the border list if the tile here is under a base floor (z<=8) + + int vx = x + xOffset; + int vy = y + yOffset; + + if ( vx >= 0 && vx < mcl.Width && vy >= 0 && vy < mcl.Height ) + { + StaticTile[] breakTiles = mcl.Tiles[vx][vy]; + bool shouldBreak = false; + + for ( int i = 0; !shouldBreak && i < breakTiles.Length; ++i ) + { + StaticTile breakTile = breakTiles[i]; + + if ( breakTile.Height == 0 && breakTile.Z <= 8 && TileData.ItemTable[breakTile.ID & TileData.MaxItemValue].Surface ) + shouldBreak = true; + } + + if ( shouldBreak ) + continue; + } + + Point2D borderPoint = new Point2D( tileX + xOffset, tileY + yOffset ); + + if ( !borders.Contains( borderPoint ) ) + borders.Add( borderPoint ); + } + } + } + } + } + + for ( int i = 0; i < borders.Count; ++i ) + { + Point2D borderPoint = borders[i]; + + LandTile landTile = map.Tiles.GetLandTile( borderPoint.X, borderPoint.Y ); + int landID = landTile.ID & TileData.MaxLandValue; + + if ( (TileData.LandTable[landID].Flags & TileFlag.Impassable) != 0 ) + return HousePlacementResult.BadLand; + + for ( int j = 0; j < m_RoadIDs.Length; j += 2 ) + { + if ( landID >= m_RoadIDs[j] && landID <= m_RoadIDs[j + 1] ) + return HousePlacementResult.BadLand; // Broke rule #5 + } + + StaticTile[] tiles = map.Tiles.GetStaticTiles( borderPoint.X, borderPoint.Y, true ); + + for ( int j = 0; j < tiles.Length; ++j ) + { + StaticTile tile = tiles[j]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + + if ( id.Impassable || (id.Surface && (id.Flags & TileFlag.Background) == 0 && (tile.Z + id.CalcHeight) > (center.Z + 2)) ) + return HousePlacementResult.BadStatic; // Broke rule #1 + } + + Sector sector = map.GetSector( borderPoint.X, borderPoint.Y ); + List sectorItems = sector.Items; + + for ( int j = 0; j < sectorItems.Count; ++j ) + { + Item item = sectorItems[j]; + + if ( item.X != borderPoint.X || item.Y != borderPoint.Y || item.Movable ) + continue; + + ItemData id = item.ItemData; + + if ( id.Impassable || (id.Surface && (id.Flags & TileFlag.Background) == 0 && (item.Z + id.CalcHeight) > (center.Z + 2)) ) + return HousePlacementResult.BadItem; // Broke rule #1 + } + } + + List _sectors = new List(); + List _houses = new List(); + + for ( int i = 0; i < yard.Count; i++ ) { + Sector sector = map.GetSector( yard[i] ); + + if ( !_sectors.Contains( sector ) ) { + _sectors.Add( sector ); + + if ( sector.Multis != null ) { + for ( int j = 0; j < sector.Multis.Count; j++ ) { + if ( sector.Multis[j] is BaseHouse ) { + BaseHouse _house = (BaseHouse)sector.Multis[j]; + if ( !_houses.Contains( _house ) ) { + _houses.Add( _house ); + } + } + } + } + } + } + + for ( int i = 0; i < yard.Count; ++i ) + { + foreach ( BaseHouse b in _houses ) { + if ( b.Contains( yard[i] ) ) + return HousePlacementResult.BadStatic; // Broke rule #3 + } + + /*Point2D yardPoint = yard[i]; + + IPooledEnumerable eable = map.GetMultiTilesAt( yardPoint.X, yardPoint.Y ); + + foreach ( StaticTile[] tile in eable ) + { + for ( int j = 0; j < tile.Length; ++j ) + { + if ( (TileData.ItemTable[tile[j].ID & TileData.MaxItemValue].Flags & (TileFlag.Impassable | TileFlag.Surface)) != 0 ) + { + eable.Free(); + return HousePlacementResult.BadStatic; // Broke rule #3 + } + } + } + + eable.Free();*/ + } + + return HousePlacementResult.Valid; + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/HousePlacementTool.cs b/Scripts/Multis/HousePlacementTool.cs new file mode 100644 index 0000000..4c49e3a --- /dev/null +++ b/Scripts/Multis/HousePlacementTool.cs @@ -0,0 +1,627 @@ +using System; +using System.Collections; +using Server; +using Server.Gumps; +using Server.Multis; +using Server.Mobiles; +using Server.Targeting; + +namespace Server.Items +{ + public class HousePlacementTool : Item + { + [Constructable] + public HousePlacementTool() : base( 0x14F0 ) + { + Weight = 1.0; + Name = "construction contract"; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( IsChildOf( from.Backpack ) ) + from.SendGump( new HousePlacementListGump( from, HousePlacementEntry.ClassicHouses ) ); + else + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + } + + public HousePlacementTool( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( Weight == 0.0 ) + Weight = 3.0; + } + } + + public class HousePlacementListGump : Gump + { + private Mobile m_From; + private HousePlacementEntry[] m_Entries; + + private const int LabelColor = 0x7FFF; + private const int LabelHue = 0x480; + + public HousePlacementListGump( Mobile from, HousePlacementEntry[] entries ) : base( 50, 50 ) + { + m_From = from; + m_Entries = entries; + + from.CloseGump( typeof( HousePlacementListGump ) ); + + AddPage( 0 ); + + AddBackground( 0, 0, 520, 420, 5054 ); + + AddImageTiled( 10, 10, 500, 20, 2624 ); + AddAlphaRegion( 10, 10, 500, 20 ); + + AddHtmlLocalized( 10, 10, 500, 20, 1060239, LabelColor, false, false ); //
CONSTRUCTION CONTRACT
+ + AddImageTiled( 10, 40, 500, 20, 2624 ); + AddAlphaRegion( 10, 40, 500, 20 ); + + AddHtmlLocalized( 50, 40, 225, 20, 1060235, LabelColor, false, false ); // House Description + AddHtmlLocalized( 275, 40, 75, 20, 1060236, LabelColor, false, false ); // Storage + AddHtmlLocalized( 350, 40, 75, 20, 1060237, LabelColor, false, false ); // Lockdowns + AddHtmlLocalized( 425, 40, 75, 20, 1060034, LabelColor, false, false ); // Cost + + AddImageTiled( 10, 70, 500, 280, 2624 ); + AddAlphaRegion( 10, 70, 500, 280 ); + + AddImageTiled( 10, 360, 500, 20, 2624 ); + AddAlphaRegion( 10, 360, 500, 20 ); + + AddHtmlLocalized( 10, 360, 250, 20, 1060645, LabelColor, false, false ); // Inn Balance: + AddLabel( 250, 360, LabelHue, Innkeeper.GetBalance( from ).ToString() ); + + AddImageTiled( 10, 390, 500, 20, 2624 ); + AddAlphaRegion( 10, 390, 500, 20 ); + + AddButton( 10, 390, 4017, 4019, 0, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, 390, 100, 20, 3000363, LabelColor, false, false ); // Close + + for ( int i = 0; i < entries.Length; ++i ) + { + int page = 1 + (i / 14); + int index = i % 14; + + if ( index == 0 ) + { + if ( page > 1 ) + { + AddButton( 450, 390, 4005, 4007, 0, GumpButtonType.Page, page ); + AddHtmlLocalized( 400, 390, 100, 20, 3000406, LabelColor, false, false ); // Next + } + + AddPage( page ); + + if ( page > 1 ) + { + AddButton( 200, 390, 4014, 4016, 0, GumpButtonType.Page, page - 1 ); + AddHtmlLocalized( 250, 390, 100, 20, 3000405, LabelColor, false, false ); // Previous + } + } + + HousePlacementEntry entry = entries[i]; + + int y = 70 + (index * 20); + + AddButton( 10, y, 4005, 4007, 1 + i, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 50, y, 225, 20, entry.Description, LabelColor, false, false ); + AddLabel( 275, y, LabelHue, entry.Storage.ToString() ); + AddLabel( 350, y, LabelHue, entry.Lockdowns.ToString() ); + AddLabel( 425, y, LabelHue, entry.Cost.ToString() ); + } + } + + public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) + { + if ( !m_From.CheckAlive() || m_From.Backpack == null || m_From.Backpack.FindItemByType( typeof( HousePlacementTool ) ) == null ) + return; + + int index = info.ButtonID - 1; + + if ( index >= 0 && index < m_Entries.Length ) + { + if ( m_From.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse( m_From ) ) + m_From.SendLocalizedMessage( 501271 ); // You already own a house, you may not place another! + else + m_From.Target = new NewHousePlacementTarget( m_Entries, m_Entries[index] ); + } + } + } + + public class NewHousePlacementTarget : MultiTarget + { + private HousePlacementEntry m_Entry; + private HousePlacementEntry[] m_Entries; + + private bool m_Placed; + + public NewHousePlacementTarget( HousePlacementEntry[] entries, HousePlacementEntry entry ) : base( entry.MultiID, entry.Offset ) + { + Range = 14; + + m_Entries = entries; + m_Entry = entry; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( !from.CheckAlive() || from.Backpack == null || from.Backpack.FindItemByType( typeof( HousePlacementTool ) ) == null ) + return; + + IPoint3D ip = o as IPoint3D; + + if ( ip != null ) + { + if ( ip is Item ) + ip = ((Item)ip).GetWorldTop(); + + Point3D p = new Point3D( ip ); + + Region reg = Region.Find( new Point3D( p ), from.Map ); + + if ( from.AccessLevel >= AccessLevel.GameMaster || reg.AllowHousing( from, p ) ) + m_Placed = m_Entry.OnPlacement( from, p ); + else if ( reg.IsPartOf( typeof( TreasureRegion ) ) || reg.IsPartOf( typeof( UnderworldEntrance ) ) ) + from.SendLocalizedMessage( 1043287 ); // The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain. + else + from.SendLocalizedMessage( 501265 ); // Housing can not be created in this area. + } + } + + protected override void OnTargetFinish( Mobile from ) + { + if ( !from.CheckAlive() || from.Backpack == null || from.Backpack.FindItemByType( typeof( HousePlacementTool ) ) == null ) + return; + + if ( !m_Placed ) + from.SendGump( new HousePlacementListGump( from, m_Entries ) ); + } + } + + public class HousePlacementEntry + { + private Type m_Type; + private int m_Description; + private int m_Storage; + private int m_Lockdowns; + private int m_NewStorage; + private int m_NewLockdowns; + private int m_Vendors; + private int m_Cost; + private int m_MultiID; + private Point3D m_Offset; + + public Type Type{ get{ return m_Type; } } + + public int Description{ get{ return m_Description; } } + public int Storage{ get{ return BaseHouse.NewVendorSystem ? m_NewStorage : m_Storage; } } + public int Lockdowns{ get{ return BaseHouse.NewVendorSystem ? m_NewLockdowns : m_Lockdowns; } } + public int Vendors{ get{ return m_Vendors; } } + public int Cost{ get{ return m_Cost; } } + + public int MultiID{ get{ return m_MultiID; } } + public Point3D Offset{ get{ return m_Offset; } } + + public HousePlacementEntry( Type type, int description, int storage, int lockdowns, int newStorage, int newLockdowns, int vendors, int cost, int xOffset, int yOffset, int zOffset, int multiID ) + { + m_Type = type; + m_Description = description; + m_Storage = storage; + m_Lockdowns = lockdowns; + m_NewStorage = newStorage; + m_NewLockdowns = newLockdowns; + m_Vendors = vendors; + m_Cost = cost; + + m_Offset = new Point3D( xOffset, yOffset, zOffset ); + + m_MultiID = multiID; + } + + public BaseHouse ConstructHouse( Mobile from ) + { + try + { + object[] args; + + if ( m_Type == typeof( HouseFoundation ) ) + args = new object[4]{ from, m_MultiID, m_Storage, m_Lockdowns }; + else if ( m_Type == typeof( SmallOldHouse ) || m_Type == typeof( SmallShop ) || m_Type == typeof( TwoStoryHouse ) ) + args = new object[2]{ from, m_MultiID }; + else + args = new object[1]{ from }; + + return Activator.CreateInstance( m_Type, args ) as BaseHouse; + } + catch + { + } + + return null; + } + + public void PlacementWarning_Callback( Mobile from, bool okay, object state ) + { + if ( !from.CheckAlive() || from.Backpack == null || from.Backpack.FindItemByType( typeof( HousePlacementTool ) ) == null ) + return; + + PreviewHouse prevHouse = (PreviewHouse)state; + + if ( !okay ) + { + prevHouse.Delete(); + return; + } + + if ( prevHouse.Deleted ) + { + /* Too much time has passed and the test house you created has been deleted. + * Please try again! + */ + from.SendGump( new NoticeGump( 1060637, 30720, 1060647, 32512, 320, 180, null, null ) ); + + return; + } + + Point3D center = prevHouse.Location; + Map map = prevHouse.Map; + + prevHouse.Delete(); + + ArrayList toMove; + //Point3D center = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z ); + HousePlacementResult res = HousePlacement.Check( from, m_MultiID, center, out toMove ); + + switch ( res ) + { + case HousePlacementResult.Valid: + { + if ( from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse( from ) ) + { + from.SendLocalizedMessage( 501271 ); // You already own a house, you may not place another! + } + else + { + BaseHouse house = ConstructHouse( from ); + + if ( house == null ) + return; + + house.Price = m_Cost; + + if ( from.AccessLevel >= AccessLevel.GameMaster ) + { + from.SendMessage( "{0} gold would have been withdrawn from your inn chest if you were not a GM.", m_Cost.ToString() ); + } + else + { + if ( Innkeeper.Withdraw( from, m_Cost ) ) + { + from.SendLocalizedMessage( 1060398, m_Cost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your inn chest. + } + else + { + house.RemoveKeys( from ); + house.Delete(); + from.SendLocalizedMessage( 1060646 ); // You do not have the funds available in your inn chest to purchase this house. Try placing a smaller house, or adding gold or gold deeds to your inn chest. + return; + } + } + + house.MoveToWorld( center, from.Map ); + + for ( int i = 0; i < toMove.Count; ++i ) + { + object o = toMove[ i ]; + + if ( o is Mobile ) + ( (Mobile) o ).Location = house.BanLocation; + else if ( o is Item ) + ( (Item) o ).Location = house.BanLocation; + } + } + + break; + } + case HousePlacementResult.BadItem: + case HousePlacementResult.BadLand: + case HousePlacementResult.BadStatic: + case HousePlacementResult.BadRegionHidden: + case HousePlacementResult.NoSurface: + { + from.SendLocalizedMessage( 1043287 ); // The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain. + break; + } + case HousePlacementResult.BadRegion: + { + from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area. + break; + } + case HousePlacementResult.BadRegionTemp: + { + from.SendLocalizedMessage( 501270 ); // Lord British has decreed a 'no build' period, thus you cannot build this house at this time. + break; + } + } + } + + public bool OnPlacement( Mobile from, Point3D p ) + { + if ( !from.CheckAlive() || from.Backpack == null || from.Backpack.FindItemByType( typeof( HousePlacementTool ) ) == null ) + return false; + + ArrayList toMove; + Point3D center = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z ); + HousePlacementResult res = HousePlacement.Check( from, m_MultiID, center, out toMove ); + + switch ( res ) + { + case HousePlacementResult.Valid: + { + if ( from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse( from ) ) + { + from.SendLocalizedMessage( 501271 ); // You already own a house, you may not place another! + } + else + { + from.SendLocalizedMessage( 1011576 ); // This is a valid location. + + PreviewHouse prev = new PreviewHouse( m_MultiID ); + + MultiComponentList mcl = prev.Components; + + Point3D banLoc = new Point3D( center.X + mcl.Min.X, center.Y + mcl.Max.Y + 1, center.Z ); + + for ( int i = 0; i < mcl.List.Length; ++i ) + { + MultiTileEntry entry = mcl.List[i]; + + int itemID = entry.m_ItemID; + + if ( itemID >= 0xBA3 && itemID <= 0xC0E ) + { + banLoc = new Point3D( center.X + entry.m_OffsetX, center.Y + entry.m_OffsetY, center.Z ); + break; + } + } + + for ( int i = 0; i < toMove.Count; ++i ) + { + object o = toMove[i]; + + if ( o is Mobile ) + ((Mobile)o).Location = banLoc; + else if ( o is Item ) + ((Item)o).Location = banLoc; + } + + prev.MoveToWorld( center, from.Map ); + + /* You are about to place a new house. + * Placing this house will condemn any and all of your other houses that you may have. + * All of your houses on all shards will be affected. + * + * In addition, you will not be able to place another house or have one transferred to you for one (1) real-life week. + * + * Once you accept these terms, these effects cannot be reversed. + * Re-deeding or transferring your new house will not uncondemn your other house(s) nor will the one week timer be removed. + * + * If you are absolutely certain you wish to proceed, click the button next to OKAY below. + * If you do not wish to trade for this house, click CANCEL. + */ + from.SendGump( new WarningGump( 1060635, 30720, 1049583, 32512, 420, 280, new WarningGumpCallback( PlacementWarning_Callback ), prev ) ); + + return true; + } + + break; + } + case HousePlacementResult.BadItem: + case HousePlacementResult.BadLand: + case HousePlacementResult.BadStatic: + case HousePlacementResult.BadRegionHidden: + case HousePlacementResult.NoSurface: + { + from.SendLocalizedMessage( 1043287 ); // The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain. + break; + } + case HousePlacementResult.BadRegion: + { + from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area. + break; + } + case HousePlacementResult.BadRegionTemp: + { + from.SendLocalizedMessage( 501270 ); //Lord British has decreed a 'no build' period, thus you cannot build this house at this time. + break; + } + } + + return false; + } + + private static Hashtable m_Table; + + static HousePlacementEntry() + { + m_Table = new Hashtable(); + + FillTable( m_ClassicHouses ); + } + + public static HousePlacementEntry Find( BaseHouse house ) + { + object obj = m_Table[house.GetType()]; + + if ( obj is HousePlacementEntry ) + { + return ((HousePlacementEntry)obj); + } + else if ( obj is ArrayList ) + { + ArrayList list = (ArrayList)obj; + + for ( int i = 0; i < list.Count; ++i ) + { + HousePlacementEntry e = (HousePlacementEntry)list[i]; + + if ( e.m_MultiID == house.ItemID ) + return e; + } + } + else if ( obj is Hashtable ) + { + Hashtable table = (Hashtable)obj; + + obj = table[house.ItemID]; + + if ( obj is HousePlacementEntry ) + return (HousePlacementEntry)obj; + } + + return null; + } + + private static void FillTable( HousePlacementEntry[] entries ) + { + for ( int i = 0; i < entries.Length; ++i ) + { + HousePlacementEntry e = entries[i]; + + object obj = m_Table[e.m_Type]; + + if ( obj == null ) + { + m_Table[e.m_Type] = e; + } + else if ( obj is HousePlacementEntry ) + { + ArrayList list = new ArrayList(); + + list.Add( obj ); + list.Add( e ); + + m_Table[e.m_Type] = list; + } + else if ( obj is ArrayList ) + { + ArrayList list = (ArrayList)obj; + + if ( list.Count == 8 ) + { + Hashtable table = new Hashtable(); + + for ( int j = 0; j < list.Count; ++j ) + table[((HousePlacementEntry)list[j]).m_MultiID] = list[j]; + + table[e.m_MultiID] = e; + + m_Table[e.m_Type] = table; + } + else + { + list.Add( e ); + } + } + else if ( obj is Hashtable ) + { + ((Hashtable)obj)[e.m_MultiID] = e; + } + } + } + + private static HousePlacementEntry[] m_ClassicHouses = new HousePlacementEntry[] + { + new HousePlacementEntry( typeof( BlueTent ), 1017341, 351, 81, 351, 81, 1, 15000, 0, 4, 0, 0x70), + new HousePlacementEntry( typeof( GreenTent ), 1017342, 351, 81, 351, 81, 1, 15000, 0, 4, 0, 0x72), + new HousePlacementEntry( typeof( SmallLogCabinSouth ), 1030871, 382, 112, 382, 112, 2, 30000, 0, 4, 0, 0x5A), + new HousePlacementEntry( typeof( SmallLogCabinEast ), 1030871, 382, 112, 382, 112, 2, 30000, 0, 4, 0, 0x59), + new HousePlacementEntry( typeof( NewSmallStoneHomeEast ), 1030845, 382, 112, 382, 112, 2, 30000, 4, -2, 0, 0x38), + new HousePlacementEntry( typeof( NewSmallStoneHouseEast ), 1030848, 382, 112, 382, 112, 2, 30000, 4, -2, 0, 0x3B), + new HousePlacementEntry( typeof( SmallOldHouse ), 1011303, 382, 112, 382, 112, 2, 30000, 0, 4, 0, 0x64), + new HousePlacementEntry( typeof( SmallOldHouse ), 1011304, 382, 112, 382, 112, 2, 30000, 0, 4, 0, 0x66), + new HousePlacementEntry( typeof( SmallOldHouse ), 1011305, 382, 112, 382, 112, 2, 30000, 0, 4, 0, 0x68), + new HousePlacementEntry( typeof( SmallOldHouse ), 1011306, 382, 112, 382, 112, 2, 30000, 0, 4, 0, 0x6A), + new HousePlacementEntry( typeof( SmallOldHouse ), 1011307, 382, 112, 382, 112, 2, 30000, 0, 4, 0, 0x6C), + new HousePlacementEntry( typeof( SmallOldHouse ), 1011308, 382, 112, 382, 112, 2, 30000, 0, 4, 0, 0x6E), + new HousePlacementEntry( typeof( NewSmallStoneStoreFront ), 1030844, 410, 140, 410, 140, 3, 45000, 0, 4, 0, 0x37), + new HousePlacementEntry( typeof( NewSmallWoodenShackPorch ), 1030849, 410, 140, 410, 140, 3, 45000, -3, 4, 0, 0x46), + new HousePlacementEntry( typeof( SmallShop ), 1011321, 444, 174, 444, 174, 4, 60000, -1, 4, 0, 0xA0), + new HousePlacementEntry( typeof( SmallShop ), 1011322, 444, 174, 444, 174, 4, 60000, 0, 4, 0, 0xA2), + new HousePlacementEntry( typeof( NewPlainStoneHouse ), 1030851, 456, 186, 456, 186, 5, 65000, -5, 6, 0, 0x48), + new HousePlacementEntry( typeof( NewSmallLogCabinWithDeck ), 1030860, 449, 179, 449, 179, 4, 65000, 1, 4, 0, 0x51), + new HousePlacementEntry( typeof( NewPlainPlasterHouse ), 1030850, 463, 193, 463, 193, 5, 70000, -5, 4, 0, 0x47), + new HousePlacementEntry( typeof( NewSmallSandstoneWorkshop ), 1030857, 458, 188, 458, 188, 5, 70000, 4, 4, 0, 0x4E), + new HousePlacementEntry( typeof( NewTwoStorySmallPlasterDwelling ), 1030855, 470, 200, 470, 200, 5, 75000, 3, 3, 0, 0x4C), + new HousePlacementEntry( typeof( Wagon ), 1030870, 470, 200, 470, 200, 5, 75000, 0, 0, 0, 0x57), + new HousePlacementEntry( typeof( NewTwoStorySmallStoneDwelling ), 1030841, 470, 200, 470, 200, 5, 75000, 3, 3, 0, 0x44), + new HousePlacementEntry( typeof( NewTwoStorySmallStoneHome ), 1030839, 470, 200, 470, 200, 5, 75000, 3, 3, 0, 0x42), + new HousePlacementEntry( typeof( NewTwoStorySmallStoneHouse ), 1030840, 470, 200, 470, 200, 5, 75000, 3, 3, 0, 0x43), + new HousePlacementEntry( typeof( NewTwoStorySmallWoodenDwelling ), 1030842, 470, 200, 470, 200, 5, 75000, 3, 3, 0, 0x45), + new HousePlacementEntry( typeof( LogCabin ), 1011318, 478, 208, 478, 208, 5, 80000, 1, 6, 0, 0x9A), + new HousePlacementEntry( typeof( NewLogCabin ), 1030859, 488, 218, 488, 218, 6, 80000, 2, 5, 0, 0x50), + new HousePlacementEntry( typeof( NewSmallStoneShoppe ), 1030835, 478, 208, 478, 208, 5, 80000, -5, 6, 0, 0x3E), + new HousePlacementEntry( typeof( NewWoodenHomePorch ), 1030836, 487, 217, 487, 217, 6, 80000, 2, 5, 0, 0x3F), + new HousePlacementEntry( typeof( SmallTower ), 1011317, 500, 230, 500, 230, 6, 85000, 3, 4, 0, 0x98), + new HousePlacementEntry( typeof( NewSmallStoneTemple ), 1030856, 504, 234, 504, 234, 6, 90000, 4, -3, 0, 0x4D), + new HousePlacementEntry( typeof( NewBrickHomeWithFrontDeck ), 1030867, 518, 248, 518, 248, 7, 95000, 0, 7, 0, 0x54), + new HousePlacementEntry( typeof( NewPlasterHousePictureWindow ), 1030832, 515, 245, 515, 245, 7, 95000, 7, -6, 0, 0x35), + new HousePlacementEntry( typeof( NewStoneHomeWithEnclosedPatio ), 1030858, 516, 246, 516, 246, 7, 95000, 7, 0, 0, 0x4F), + new HousePlacementEntry( typeof( SandStonePatio ), 1011320, 520, 250, 520, 250, 7, 95000, -1, 4, 0, 0x9C), + new HousePlacementEntry( typeof( NewOldStoneHomeShoppe ), 1030864, 526, 256, 526, 256, 7, 100000, 8, -5, 0, 0x5F), + new HousePlacementEntry( typeof( NewBrickHomeWithLargePorch ), 1030869, 533, 263, 533, 263, 7, 105000, -6, 6, 0, 0x56), + new HousePlacementEntry( typeof( GuildHouse ), 1011309, 544, 274, 544, 274, 7, 110000, -1, 7, 0, 0x74), + new HousePlacementEntry( typeof( LargePatioHouse ), 1011315, 546, 276, 546, 276, 8, 110000, -4, 7, 0, 0x8C), + new HousePlacementEntry( typeof( NewTwoStoryWoodenHomeWithPorch ), 1030834, 562, 292, 562, 292, 8, 115000, 6, 4, 0, 0x3D), + new HousePlacementEntry( typeof( TwoStoryVilla ), 1011319, 560, 290, 560, 290, 8, 115000, 3, 6, 0, 0x9E), + new HousePlacementEntry( typeof( NewTwoStoryBrickHouse ), 1030831, 568, 298, 568, 298, 8, 120000, -4, 5, 0, 0x34), + new HousePlacementEntry( typeof( NewFancyStoneWoodHome ), 1030846, 580, 310, 580, 310, 9, 125000, -4, 5, 0, 0x39), + new HousePlacementEntry( typeof( NewTwoStoryStoneVilla ), 1030854, 589, 319, 589, 319, 9, 130000, 4, 8, 0, 0x4B), + new HousePlacementEntry( typeof( NewWoodenHomeUpperDeck ), 1030853, 590, 320, 590, 320, 9, 130000, -4, 5, 0, 0x4A), + new HousePlacementEntry( typeof( NewBrickArena ), 1030862, 608, 338, 608, 338, 10, 140000, -8, 11, 0, 0x5D), + new HousePlacementEntry( typeof( NewMarbleShoppe ), 1030868, 608, 338, 608, 338, 10, 140000, -5, 6, 0, 0x55), + new HousePlacementEntry( typeof( NewPlasterHomeDirtDeck ), 1030852, 622, 352, 622, 352, 10, 145000, -2, 7, 0, 0x49), + new HousePlacementEntry( typeof( NewTwoStoryBrickHome ), 1030833, 625, 355, 625, 355, 10, 150000, -3, 7, 0, 0x3C), + new HousePlacementEntry( typeof( NewBrickHouseWithSteeple ), 1030830, 654, 384, 654, 384, 11, 160000, 0, 6, 0, 0x33), + new HousePlacementEntry( typeof( NewFancyWoodenStoneHouse ), 1030847, 653, 383, 653, 383, 11, 160000, 6, -4, 0, 0x3A), + new HousePlacementEntry( typeof( TwoStoryHouse ), 1011310, 694, 424, 694, 424, 12, 180000, -3, 7, 0, 0x76), + new HousePlacementEntry( typeof( TwoStoryHouse ), 1011311, 694, 424, 694, 424, 12, 180000, -3, 7, 0, 0x78), + new HousePlacementEntry( typeof( LargeMarbleHouse ), 1011316, 700, 430, 700, 430, 13, 185000, -4, 7, 0, 0x96), + new HousePlacementEntry( typeof( NewTwoStorySandstoneHouse ), 1030829, 725, 455, 725, 455, 14, 195000, 7, -4, 0, 0x32), + new HousePlacementEntry( typeof( NewSmallStoneTower ), 1030837, 731, 461, 731, 461, 14, 200000, -2, 6, 0, 0x40), + new HousePlacementEntry( typeof( NewSmallBrickCastle ), 1030865, 743, 473, 743, 473, 14, 205000, -5, 6, 0, 0x60), + new HousePlacementEntry( typeof( NewStoneFort ), 1030863, 750, 480, 750, 480, 14, 210000, -5, 7, 0, 0x5E), + new HousePlacementEntry( typeof( CastleTower ), 1024781, 839, 569, 839, 569, 17, 250000, 5, 7, 0, 0x30), + new HousePlacementEntry( typeof( NewRaisedBrickHome ), 1030861, 866, 596, 866, 596, 18, 265000, 3, 7, 0, 0x52), + new HousePlacementEntry( typeof( NewSmallWizardTower ), 1030866, 869, 599, 869, 599, 18, 270000, -2, 6, 0, 0x53), + new HousePlacementEntry( typeof( NewWoodenMansion ), 1030843, 920, 650, 920, 650, 20, 290000, 6, 7, 0, 0x36), + new HousePlacementEntry( typeof( NewThreeStoryStoneVilla ), 1030838, 965, 695, 965, 695, 22, 310000, -6, 7, 0, 0x41), + new HousePlacementEntry( typeof( Tower ), 1011312, 1476, 1206, 1476, 1206, 24, 560000, 0, 7, 0, 0x7A), + new HousePlacementEntry( typeof( LargeTent ), 1024851, 1572, 1302, 1572, 1302, 28, 610000, 1, 13, 0, 0x5C), + new HousePlacementEntry( typeof( Keep ), 1011313, 1847, 1577, 1847, 1577, 30, 740000, 0, 11, 0, 0x7C), + new HousePlacementEntry( typeof( Pyramid ), 1024788, 1856, 1586, 1856, 1586, 32, 750000, 3, 16, 0, 0x5B), + new HousePlacementEntry( typeof( LogMansion ), 1024875, 2777, 2507, 2777, 2507, 34, 800000, 13, 13, 0, 0x58), + new HousePlacementEntry( typeof( Castle ), 1011314, 2777, 2507, 2777, 2507, 34, 800000, 0, 16, 0, 0x7E), + new HousePlacementEntry( typeof( Fortress ), 1024869, 4448, 4178, 4448, 4178, 36, 900000, 4, 16, 0, 0x31) + }; + + public static HousePlacementEntry[] ClassicHouses{ get{ return m_ClassicHouses; } } + } +} \ No newline at end of file diff --git a/Scripts/Multis/HouseSign.cs b/Scripts/Multis/HouseSign.cs new file mode 100644 index 0000000..1a34802 --- /dev/null +++ b/Scripts/Multis/HouseSign.cs @@ -0,0 +1,293 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Multis; +using Server.Gumps; +using Server.ContextMenus; + +namespace Server.Multis +{ + public class HouseSign : Item + { + private BaseHouse m_Owner; + private Mobile m_OrgOwner; + + public HouseSign( BaseHouse owner ) : base( 0xBD2 ) + { + m_Owner = owner; + m_OrgOwner = m_Owner.Owner; + Movable = false; + } + + public HouseSign( Serial serial ) : base( serial ) + { + } + + public string GetName() + { + if ( Name == null ) + return "An Unnamed House"; + + return Name; + } + + public BaseHouse Owner + { + get + { + return m_Owner; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool RestrictDecay + { + get{ return ( m_Owner != null && m_Owner.RestrictDecay ); } + set{ if ( m_Owner != null ) m_Owner.RestrictDecay = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile OriginalOwner + { + get + { + return m_OrgOwner; + } + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Owner != null && !m_Owner.Deleted ) + m_Owner.Delete(); + } + + public override void AddNameProperty(ObjectPropertyList list) + { + list.Add( 1061638 ); // A House Sign + } + + public override bool ForceShowProperties{ get{ return ObjectPropertyList.Enabled; } } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + list.Add( 1061639, Utility.FixHtml( GetName() ) ); // Name: ~1_NAME~ + list.Add( 1061640, (m_Owner == null || m_Owner.Owner == null) ? "nobody" : m_Owner.Owner.Name ); // Owner: ~1_OWNER~ + + if ( m_Owner != null ) + { + list.Add( m_Owner.Public ? 1061641 : 1061642 ); // This House is Open to the Public : This is a Private Home + + DecayLevel level = m_Owner.DecayLevel; + + if ( level == DecayLevel.DemolitionPending ) + { + list.Add( 1062497 ); // Demolition Pending + } + else if ( level != DecayLevel.Ageless ) + { + if ( level == DecayLevel.Collapsed ) + level = DecayLevel.IDOC; + + list.Add( 1062028, String.Format( "#{0}", 1043009 + (int)level ) ); // Condition: This structure is ... + } + } + } + + public override void OnSingleClick( Mobile from ) + { + if ( m_Owner != null && BaseHouse.DecayEnabled && m_Owner.DecayPeriod != TimeSpan.Zero ) + { + string message; + + switch ( m_Owner.DecayLevel ) + { + case DecayLevel.Ageless: message = "ageless"; break; + case DecayLevel.Fairly: message = "fairly worn"; break; + case DecayLevel.Greatly: message = "greatly worn"; break; + case DecayLevel.LikeNew: message = "like new"; break; + case DecayLevel.Slightly: message = "slightly worn"; break; + case DecayLevel.Somewhat: message = "somewhat worn"; break; + default: message = "in danger of collapsing"; break; + } + + LabelTo( from, "This house is {0}.", message ); + } + + base.OnSingleClick( from ); + } + + public void ShowSign( Mobile m ) + { + if ( m_Owner != null ) + { + if ( m_Owner.IsFriend( m ) && m.AccessLevel < AccessLevel.GameMaster ) + { + m_Owner.RefreshDecay(); + m.SendLocalizedMessage( 501293 ); // Welcome back to the house, friend! + } + + if ( m_Owner.IsAosRules ) + m.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Information, m, m_Owner ) ); + else + m.SendGump( new HouseGump( m, m_Owner ) ); + } + } + + public void ClaimGump_Callback( Mobile from, bool okay, object state ) + { + if ( okay && m_Owner != null && m_Owner.Owner == null && m_Owner.DecayLevel != DecayLevel.DemolitionPending ) + { + bool canClaim = false; + + if ( m_Owner.CoOwners == null || m_Owner.CoOwners.Count == 0 ) + canClaim = m_Owner.IsFriend( from ); + else + canClaim = m_Owner.IsCoOwner( from ); + + if ( canClaim && !BaseHouse.HasAccountHouse( from ) ) + { + m_Owner.Owner = from; + m_Owner.LastTraded = DateTime.Now; + } + } + + ShowSign( from ); + } + + public override void OnDoubleClick( Mobile m ) + { + if ( m_Owner == null ) + return; + + if ( m.AccessLevel < AccessLevel.GameMaster && m_Owner.Owner == null && m_Owner.DecayLevel != DecayLevel.DemolitionPending ) + { + bool canClaim = false; + + if ( m_Owner.CoOwners == null || m_Owner.CoOwners.Count == 0 ) + canClaim = m_Owner.IsFriend( m ); + else + canClaim = m_Owner.IsCoOwner( m ); + + if ( canClaim && !BaseHouse.HasAccountHouse( m ) ) + { + /* You do not currently own any house on any shard with this account, + * and this house currently does not have an owner. If you wish, you + * may choose to claim this house and become its rightful owner. If + * you do this, it will become your Primary house and automatically + * refresh. If you claim this house, you will be unable to place + * another house or have another house transferred to you for the + * next 7 days. Do you wish to claim this house? + */ + m.SendGump( new WarningGump( 501036, 32512, 1049719, 32512, 420, 280, new WarningGumpCallback( ClaimGump_Callback ), null ) ); + } + } + + ShowSign( m ); + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( BaseHouse.NewVendorSystem && from.Alive && Owner != null && Owner.IsAosRules ) + { + if ( Owner.AreThereAvailableVendorsFor( from ) ) + list.Add( new VendorsEntry( this ) ); + + if ( Owner.VendorInventories.Count > 0 ) + list.Add( new ReclaimVendorInventoryEntry( this ) ); + } + } + + private class VendorsEntry : ContextMenuEntry + { + private HouseSign m_Sign; + + public VendorsEntry( HouseSign sign ) : base( 6211 ) + { + m_Sign = sign; + } + + public override void OnClick() + { + Mobile from = this.Owner.From; + + if ( !from.CheckAlive() || m_Sign.Deleted || m_Sign.Owner == null || !m_Sign.Owner.AreThereAvailableVendorsFor( from ) ) + return; + + if ( from.Map != m_Sign.Map || !from.InRange( m_Sign, 5 ) ) + { + from.SendLocalizedMessage( 1062429 ); // You must be within five paces of the house sign to use this option. + } + else + { + from.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Vendors, from, m_Sign.Owner ) ); + } + } + } + + private class ReclaimVendorInventoryEntry : ContextMenuEntry + { + private HouseSign m_Sign; + + public ReclaimVendorInventoryEntry( HouseSign sign ) : base( 6213 ) + { + m_Sign = sign; + } + + public override void OnClick() + { + Mobile from = this.Owner.From; + + if ( m_Sign.Deleted || m_Sign.Owner == null || m_Sign.Owner.VendorInventories.Count == 0 || !from.CheckAlive() ) + return; + + if ( from.Map != m_Sign.Map || !from.InRange( m_Sign, 5 ) ) + { + from.SendLocalizedMessage( 1062429 ); // You must be within five paces of the house sign to use this option. + } + else + { + from.CloseGump( typeof( VendorInventoryGump ) ); + from.SendGump( new VendorInventoryGump( m_Sign.Owner, from ) ); + } + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Owner ); + writer.Write( m_OrgOwner ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Owner = reader.ReadItem() as BaseHouse; + m_OrgOwner = reader.ReadMobile(); + + break; + } + } + + if ( this.Name == "a house sign" ) + this.Name = null; + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/HouseTeleporter.cs b/Scripts/Multis/HouseTeleporter.cs new file mode 100644 index 0000000..4a6538c --- /dev/null +++ b/Scripts/Multis/HouseTeleporter.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections; +using Server; +using Server.Gumps; +using Server.Multis; +using Server.Targeting; +using System.Collections.Generic; +using Server.ContextMenus; + +namespace Server.Items +{ + public class HouseTeleporter : Item, ISecurable + { + private Item m_Target; + private SecureLevel m_Level; + + [CommandProperty( AccessLevel.GameMaster )] + public Item Target + { + get{ return m_Target; } + set{ m_Target = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SecureLevel Level + { + get{ return m_Level; } + set{ m_Level = value; } + } + + [Constructable] + public HouseTeleporter( int itemID ) : this( itemID, null ) + { + } + + public HouseTeleporter( int itemID, Item target ) : base( itemID ) + { + Movable = false; + + m_Level = SecureLevel.Anyone; + + m_Target = target; + } + + public bool CheckAccess( Mobile m ) + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if ( house != null && (house.Public ? house.IsBanned( m ) : !house.HasAccess( m )) ) + return false; + + return ( house != null && house.HasSecureAccess( m, m_Level ) ); + } + + public override bool OnMoveOver( Mobile m ) + { + if ( m_Target != null && !m_Target.Deleted ) + { + if ( CheckAccess( m ) ) + { + if ( !m.Hidden || m.AccessLevel == AccessLevel.Player ) + new EffectTimer( Location, Map, 2023, 0x1F0, TimeSpan.FromSeconds( 0.4 ) ).Start(); + + new DelayTimer( this, m ).Start(); + } + else + { + m.SendLocalizedMessage( 1061637 ); // You are not allowed to access this. + } + } + + return true; + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + SetSecureLevelEntry.AddTo( from, this, list ); + } + + public HouseTeleporter( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( (int) m_Level ); + + writer.Write( (Item) m_Target ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Level = (SecureLevel)reader.ReadInt(); + goto case 0; + } + case 0: + { + m_Target = reader.ReadItem(); + + if ( version < 0 ) + m_Level = SecureLevel.Anyone; + + break; + } + } + } + + private class EffectTimer : Timer + { + private Point3D m_Location; + private Map m_Map; + private int m_EffectID; + private int m_SoundID; + + public EffectTimer( Point3D p, Map map, int effectID, int soundID, TimeSpan delay ) : base( delay ) + { + m_Location = p; + m_Map = map; + m_EffectID = effectID; + m_SoundID = soundID; + } + + protected override void OnTick() + { + Effects.SendLocationParticles( EffectItem.Create( m_Location, m_Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, m_EffectID, 0 ); + + if ( m_SoundID != -1 ) + Effects.PlaySound( m_Location, m_Map, m_SoundID ); + } + } + + private class DelayTimer : Timer + { + private HouseTeleporter m_Teleporter; + private Mobile m_Mobile; + + public DelayTimer( HouseTeleporter tp, Mobile m ) : base( TimeSpan.FromSeconds( 1.0 ) ) + { + m_Teleporter = tp; + m_Mobile = m; + } + + protected override void OnTick() + { + Item target = m_Teleporter.m_Target; + + if ( target != null && !target.Deleted ) + { + Mobile m = m_Mobile; + + if ( m.Location == m_Teleporter.Location && m.Map == m_Teleporter.Map ) + { + Point3D p = target.GetWorldTop(); + Map map = target.Map; + + Server.Mobiles.BaseCreature.TeleportPets( m, p, map ); + + m.MoveToWorld( p, map ); + + if ( !m.Hidden || m.AccessLevel == AccessLevel.Player ) + { + Effects.PlaySound( target.Location, target.Map, 0x1FE ); + + Effects.SendLocationParticles( EffectItem.Create( m_Teleporter.Location, m_Teleporter.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023, 0 ); + Effects.SendLocationParticles( EffectItem.Create( target.Location, target.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 5023, 0 ); + + new EffectTimer( target.Location, target.Map, 2023, -1, TimeSpan.FromSeconds( 0.4 ) ).Start(); + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/Houses.cs b/Scripts/Multis/Houses.cs new file mode 100644 index 0000000..8a2c297 --- /dev/null +++ b/Scripts/Multis/Houses.cs @@ -0,0 +1,658 @@ +using System; +using System.Collections; +using Server; +using Server.Items; +using Server.Multis.Deeds; + +namespace Server.Multis +{ + public class SmallOldHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D(-3,-3,7,7 ), new Rectangle2D( -1, 4, 3, 1 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 2, 4, 0 ); } } + + public override int DefaultPrice{ get{ return 43800; } } + + public SmallOldHouse( Mobile owner, int id ) : base( id, owner, 425, 3 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoor( 0, 3, 7, keyValue ); + + SetSign( 2, 4, 5 ); + } + + public SmallOldHouse( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() + { + switch ( ItemID ) + { + case 0x64: return new StonePlasterHouseDeed(); + case 0x66: return new FieldStoneHouseDeed(); + case 0x68: return new SmallBrickHouseDeed(); + case 0x6A: return new WoodHouseDeed(); + case 0x6C: return new WoodPlasterHouseDeed(); + case 0x6E: + default: return new ThatchedRoofCottageDeed(); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class GuildHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 14, 14 ), new Rectangle2D( -2, 7, 4, 1 ) }; + + public override int DefaultPrice{ get{ return 144500; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 4, 8, 0 ); } } + + public GuildHouse( Mobile owner ) : base( 0x74, owner, 1100, 8 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( -1, 6, 7, keyValue ); + + SetSign( 4, 8, 16 ); + + AddSouthDoor( -3, -1, 7 ); + AddSouthDoor( 3, -1, 7 ); + } + + public GuildHouse( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new BrickHouseDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class TwoStoryHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, 0, 14, 7 ), new Rectangle2D( -7, -7, 9, 7 ), new Rectangle2D( -4, 7, 4, 1 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 2, 8, 0 ); } } + + public override int DefaultPrice{ get{ return 192400; } } + + public TwoStoryHouse( Mobile owner, int id ) : base( id, owner, 1370, 10 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( -3, 6, 7, keyValue ); + + SetSign( 2, 8, 16 ); + + AddSouthDoor( -3, 0, 7 ); + AddSouthDoor( id == 0x76 ? -2 : -3, 0, 27 ); + } + + public TwoStoryHouse( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() + { + switch( ItemID ) + { + case 0x76: return new TwoStoryWoodPlasterHouseDeed(); + case 0x78: + default: return new TwoStoryStonePlasterHouseDeed(); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class Tower : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 16, 14 ), new Rectangle2D( -1, 7, 4, 2 ), new Rectangle2D( -11, 0, 4, 7 ), new Rectangle2D( 9, 0, 4, 7 ) }; + + public override int DefaultPrice{ get{ return 433200; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 5, 8, 0 ); } } + + public Tower( Mobile owner ) : base( 0x7A, owner, 2119, 15 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( false, 0, 6, 6, keyValue ); + + SetSign( 5, 8, 16 ); + + AddSouthDoor( false, 3, -2, 6 ); + AddEastDoor( false, 1, 4, 26 ); + AddEastDoor( false, 1, 4, 46 ); + } + + public Tower( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new TowerDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class Keep : BaseHouse//warning: ODD shape! + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -11, -11, 7, 8 ), new Rectangle2D( -11, 5, 7, 8 ), new Rectangle2D( 6, -11, 7, 8 ), new Rectangle2D( 6, 5, 7, 8 ), new Rectangle2D( -9, -3, 5, 8 ), new Rectangle2D( 6, -3, 5, 8 ), new Rectangle2D( -4, -9, 10, 20 ), new Rectangle2D( -1, 11, 4, 1 ) }; + + public override int DefaultPrice{ get{ return 665200; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 5, 13, 0 ); } } + + public Keep( Mobile owner ) : base( 0x7C, owner, 2625, 18 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( false, 0, 10, 6, keyValue ); + + SetSign( 5, 12, 16 ); + } + + public Keep( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new KeepDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class Castle : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -15, -15, 31, 31 ), new Rectangle2D( -1, 16, 4, 1 ) }; + + public override int DefaultPrice{ get{ return 1022800; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 5, 17, 0 ); } } + + public Castle( Mobile owner ) : base( 0x7E, owner, 4076, 28 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( false, 0, 15, 6, keyValue ); + + SetSign( 5, 17, 16 ); + + AddSouthDoors( false, 0, 11, 6, true ); + AddSouthDoors( false, 0, 5, 6, false ); + AddSouthDoors( false, -1, -11, 6, false ); + } + + public Castle( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new CastleDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class LargePatioHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 15, 14 ), new Rectangle2D( -5, 7, 4, 1 ) }; + + public override int DefaultPrice{ get{ return 152800; } } + + public override Rectangle2D[] Area { get { return AreaArray; } } + public override Point3D BaseBanLocation { get { return new Point3D( 1, 8, 0 ); } } + + public LargePatioHouse( Mobile owner ) : base( 0x8C, owner, 1100, 8 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( -4, 6, 7, keyValue ); + + SetSign( 1, 8, 16 ); + + AddEastDoor( 1, 4, 7 ); + AddEastDoor( 1, -4, 7 ); + AddSouthDoor( 4, -1, 7 ); + } + + public LargePatioHouse( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new LargePatioDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class LargeMarbleHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 15, 14 ), new Rectangle2D( -6, 7, 6, 1 ) }; + + public override int DefaultPrice{ get{ return 192000; } } + + public override Rectangle2D[] Area { get { return AreaArray; } } + public override Point3D BaseBanLocation { get { return new Point3D( 1, 8, 0 ); } } + + public LargeMarbleHouse( Mobile owner ) : base( 0x96, owner, 1370, 10 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( false, -4, 3, 4, keyValue ); + + SetSign( 1, 8, 11 ); + } + + public LargeMarbleHouse( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new LargeMarbleDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SmallTower : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -3, 8, 7 ), new Rectangle2D( 2, 4, 3, 1 ) }; + + public override int DefaultPrice{ get{ return 88500; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 1, 4, 0 ); } } + + public SmallTower( Mobile owner ) : base( 0x98, owner, 580, 4 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoor( false, 3, 3, 6, keyValue ); + + SetSign( 1, 4, 5 ); + } + + public SmallTower( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new SmallTowerDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class LogCabin : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -6, 8, 13 ) }; + + public override int DefaultPrice{ get{ return 97800; } } + + public override Rectangle2D[] Area { get { return AreaArray; } } + public override Point3D BaseBanLocation { get { return new Point3D( 5, 8, 0 ); } } + + public LogCabin( Mobile owner ) : base( 0x9A, owner, 1100, 8 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoor( 1, 4, 8, keyValue ); + + SetSign( 5, 8, 20 ); + + AddSouthDoor( 1, 0, 29 ); + } + + public LogCabin( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new LogCabinDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SandStonePatio : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -4, 12, 8 ), new Rectangle2D( -2, 4, 3, 1 ) }; + + public override int DefaultPrice{ get{ return 90900; } } + + public override Rectangle2D[] Area { get { return AreaArray; } } + public override Point3D BaseBanLocation { get { return new Point3D( 4, 6, 0 ); } } + + public SandStonePatio( Mobile owner ) : base( 0x9C, owner, 850, 6 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoor( -1, 3, 6, keyValue ); + + SetSign( 4, 6, 24 ); + } + + public SandStonePatio( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new SandstonePatioDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class TwoStoryVilla : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -5, 11, 11 ), new Rectangle2D( 2, 6, 4, 1 ) }; + + public override int DefaultPrice{ get{ return 136500; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 3, 8, 0 ); } } + + public TwoStoryVilla( Mobile owner ) : base( 0x9E, owner, 1100, 8 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( 3, 1, 5, keyValue ); + + SetSign( 3, 8, 24 ); + + AddEastDoor( 1, 0, 25 ); + AddSouthDoor( -3, -1, 25 ); + } + + public TwoStoryVilla( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() { return new VillaDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class BlueTent : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -3, 8, 8 )}; + + public override int DefaultPrice{ get{ return 40000; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + + public override Point3D BaseBanLocation{ get{ return new Point3D( 1, 4, 0 ); } } + + public BlueTent( Mobile owner ) : base( 0x70, owner, 500, 4 ) + { + Price = 12000; + uint keyValue = CreateKeys( owner ); + + SetSign( -1, 5, 9 ); + // Turn sign + ChangeSignType(0x0bd1); + + } + + public BlueTent ( Serial serial ) : base( serial ) + { + } + + public override bool IsInside( Point3D p, int height ) + { + if ( Deleted ) + return false; + + foreach(Rectangle2D rect in Area) + { + if(rect.Contains(new Point2D( p.X - X, p.Y - Y ))) + return true; + } + + return false; + } + + public override HouseDeed GetDeed() { return new BlueTentDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class GreenTent : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -3, 8, 8 )}; + + public override int DefaultPrice{ get{ return 40000; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + + public override Point3D BaseBanLocation{ get{ return new Point3D( 1, 4, 0 ); } } + + public GreenTent( Mobile owner ) : base( 0x72, owner, 500, 4 ) + { + Price = 12000; + uint keyValue = CreateKeys( owner ); + + SetSign( -1, 5, 9 ); + // Turn sign + ChangeSignType(0x0bd1); + } + + public GreenTent ( Serial serial ) : base( serial ) + { + } + + public override bool IsInside( Point3D p, int height ) + { + if ( Deleted ) + return false; + + foreach(Rectangle2D rect in Area) + { + if(rect.Contains(new Point2D( p.X - X, p.Y - Y ))) + return true; + } + + return false; + } + + public override HouseDeed GetDeed() { return new GreenTentDeed(); } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + + public class SmallShop : BaseHouse + { + public override Rectangle2D[] Area { get { return ( ItemID == 0x40A2 ? AreaArray1 : AreaArray2 ); } } + public override Point3D BaseBanLocation { get { return new Point3D( 3, 4, 0 ); } } + + public override int DefaultPrice{ get{ return 63000; } } + + public static Rectangle2D[] AreaArray1 = new Rectangle2D[]{ new Rectangle2D(-3,-3,7,7), new Rectangle2D( -1, 4, 4, 1 ) }; + public static Rectangle2D[] AreaArray2 = new Rectangle2D[]{ new Rectangle2D(-3,-3,7,7), new Rectangle2D( -2, 4, 3, 1 ) }; + + public SmallShop( Mobile owner, int id ) : base( id, owner, 425, 3 ) + { + uint keyValue = CreateKeys( owner ); + + BaseDoor door = MakeDoor( false, DoorFacing.EastCW ); + + door.Locked = true; + door.KeyValue = keyValue; + + if ( door is BaseHouseDoor ) + ((BaseHouseDoor)door).Facing = DoorFacing.EastCCW; + + AddDoor( door, -2, 0, id == 0xA2 ? 24 : 27 ); + + //AddSouthDoor( false, -2, 0, 27 - (id == 0xA2 ? 3 : 0), keyValue ); + + SetSign( 3, 4, 7 - (id == 0xA2 ? 2 : 0) ); + } + + public SmallShop( Serial serial ) : base( serial ) + { + } + + public override HouseDeed GetDeed() + { + switch ( ItemID ) + { + case 0xA0: return new StoneWorkshopDeed(); + case 0xA2: + default: return new MarbleWorkshopDeed(); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 );//version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} diff --git a/Scripts/Multis/MovingCrate.cs b/Scripts/Multis/MovingCrate.cs new file mode 100644 index 0000000..1d9231c --- /dev/null +++ b/Scripts/Multis/MovingCrate.cs @@ -0,0 +1,329 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Network; + +namespace Server.Multis +{ + public class MovingCrate : Container + { + public static readonly int MaxItemsPerSubcontainer = 20; + public static readonly int Rows = 3; + public static readonly int Columns = 5; + public static readonly int HorizontalSpacing = 25; + public static readonly int VerticalSpacing = 25; + + public override int LabelNumber{ get{ return 1061690; } } // Packing Crate + + private BaseHouse m_House; + + private Timer m_InternalizeTimer; + + public BaseHouse House + { + get{ return m_House; } + set{ m_House = value; } + } + + public override int DefaultMaxItems{ get{ return 0; } } + public override int DefaultMaxWeight{ get{ return 0; } } + + public MovingCrate( BaseHouse house ) : base( 0xE3D ) + { + Hue = 0x8A5; + Movable = false; + + m_House = house; + } + + public MovingCrate( Serial serial ) : base( serial ) + { + } + + public override void DropItem( Item dropped ) + { + // 1. Try to stack the item + foreach ( Item item in this.Items ) + { + if ( item is PackingBox ) + { + List subItems = item.Items; + + for ( int i = 0; i < subItems.Count; i++ ) + { + Item subItem = subItems[i]; + + if ( !(subItem is Container) && subItem.StackWith( null, dropped, false ) ) + return; + } + } + } + + // 2. Try to drop the item into an existing container + foreach ( Item item in this.Items ) + { + if ( item is PackingBox ) + { + Container box = (Container) item; + List subItems = box.Items; + + if ( subItems.Count < MaxItemsPerSubcontainer ) + { + box.DropItem( dropped ); + return; + } + } + } + + // 3. Drop the item into a new container + Container subContainer = new PackingBox(); + subContainer.DropItem( dropped ); + + Point3D location = GetFreeLocation(); + if ( location != Point3D.Zero ) + { + this.AddItem( subContainer ); + subContainer.Location = location; + } + else + { + base.DropItem( subContainer ); + } + } + + private Point3D GetFreeLocation() + { + bool[,] positions = new bool[Rows, Columns]; + + foreach ( Item item in this.Items ) + { + if ( item is PackingBox ) + { + int i = (item.Y - this.Bounds.Y) / VerticalSpacing; + if ( i < 0 ) + i = 0; + else if ( i >= Rows ) + i = Rows - 1; + + int j = (item.X - this.Bounds.X) / HorizontalSpacing; + if ( j < 0 ) + j = 0; + else if ( j >= Columns ) + j = Columns - 1; + + positions[i, j] = true; + } + } + + for ( int i = 0; i < Rows; i++ ) + { + for ( int j = 0; j < Columns; j++ ) + { + if ( !positions[i, j] ) + { + int x = this.Bounds.X + j * HorizontalSpacing; + int y = this.Bounds.Y + i * VerticalSpacing; + + return new Point3D( x, y, 0 ); + } + } + } + + return Point3D.Zero; + } + + public override bool IsDecoContainer + { + get{ return false; } + } + + public override bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight ) + { + if ( m.AccessLevel < AccessLevel.GameMaster ) + { + m.SendLocalizedMessage( 1061145 ); // You cannot place items into a house moving crate. + return false; + } + + return base.CheckHold( m, item, message, checkItems, plusItems, plusWeight ); + } + + public override bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + return base.CheckLift( from, item, ref reject ) && House != null && !House.Deleted && House.IsOwner( from ); + } + + public override bool CheckItemUse( Mobile from, Item item ) + { + return base.CheckItemUse( from, item ) && House != null && !House.Deleted && House.IsOwner( from ); + } + + public override void OnItemRemoved( Item item ) + { + base.OnItemRemoved( item ); + + if ( this.TotalItems == 0 ) + Delete(); + } + + public void RestartTimer() + { + if ( m_InternalizeTimer == null ) + { + m_InternalizeTimer = new InternalizeTimer( this ); + m_InternalizeTimer.Start(); + } + else + { + m_InternalizeTimer.Stop(); + m_InternalizeTimer.Start(); + } + } + + public void Hide() + { + if ( m_InternalizeTimer != null ) + { + m_InternalizeTimer.Stop(); + m_InternalizeTimer = null; + } + + List toRemove = new List(); + foreach ( Item item in this.Items ) + if ( item is PackingBox && item.Items.Count == 0 ) + toRemove.Add( item ); + + foreach ( Item item in toRemove ) + item.Delete(); + + if ( this.TotalItems == 0 ) + Delete(); + else + Internalize(); + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( House != null && House.MovingCrate == this ) + House.MovingCrate = null; + + if ( m_InternalizeTimer != null ) + m_InternalizeTimer.Stop(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 1 ); + + writer.Write( (Item) m_House ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + m_House = reader.ReadItem() as BaseHouse; + + if( m_House != null ) + { + m_House.MovingCrate = this; + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( Hide ) ); + } + else + { + Timer.DelayCall( TimeSpan.Zero, this.Delete ); + } + + if ( version == 0 ) + MaxItems = -1; // reset to default + } + + public class InternalizeTimer : Timer + { + private MovingCrate m_Crate; + + public InternalizeTimer( MovingCrate crate ) : base( TimeSpan.FromMinutes( 5.0 ) ) + { + m_Crate = crate; + + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + m_Crate.Hide(); + } + } + } + + public class PackingBox : BaseContainer + { + public override int LabelNumber{ get{ return 1061690; } } // Packing Crate + + public override int DefaultGumpID{ get{ return 0x4B; } } + public override int DefaultDropSound{ get{ return 0x42; } } + + public override Rectangle2D Bounds + { + get{ return new Rectangle2D( 16, 51, 168, 73 ); } + } + + public override int DefaultMaxItems{ get{ return 0; } } + public override int DefaultMaxWeight{ get{ return 0; } } + + public PackingBox() : base( 0x9A8 ) + { + Movable = false; + } + + public PackingBox( Serial serial ) : base( serial ) + { + } + + public override void SendCantStoreMessage( Mobile to, Item item ) + { + to.SendLocalizedMessage( 1061145 ); // You cannot place items into a house moving crate. + } + + public override void OnItemRemoved( Item item ) + { + base.OnItemRemoved( item ); + + if ( item.GetBounce() == null && this.TotalItems == 0 ) + Delete(); + } + + public override void OnItemBounceCleared( Item item ) + { + base.OnItemBounceCleared( item ); + + if ( this.TotalItems == 0 ) + Delete(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 1 ); // version + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + if ( version == 0 ) + MaxItems = -1; // reset to default + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/NewHouses.cs b/Scripts/Multis/NewHouses.cs new file mode 100644 index 0000000..4ad42c3 --- /dev/null +++ b/Scripts/Multis/NewHouses.cs @@ -0,0 +1,1760 @@ +using Server; +using System; +using System.Collections; +using Server.Multis; +using Server.Targeting; +using Server.Items; + +namespace Server.Multis +{ + public class Pyramid : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -15, -15, 32, 32 ) }; + + public override int DefaultPrice{ get{ return 366500; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 3, 16, 0 ); } } + + public Pyramid( Mobile owner ) : base( 0x5B, owner, 1, 1 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( false, 0, 13, 5, keyValue ); + + SetSign( 3, 16, 5 ); + + BaseDoor door = MakeDoor( false, DoorFacing.NorthCCW ); + + if ( door is BaseHouseDoor ) + ((BaseHouseDoor)door).Facing = DoorFacing.NorthCCW; + + AddDoor( door, -4, -7, 5 ); + + AddEastDoor( false, -4, -6, 5 ); + } + + public Pyramid( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class LargeTent : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -12, -13, 25, 26 ) }; + + public override int DefaultPrice{ get{ return 160500; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 1, 13, 0 ); } } + + public LargeTent( Mobile owner ) : base( 0x5C, owner, 1576, 788 ) + { + SetSign( 1, 12, 8 ); + } + + public LargeTent( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class CastleTower : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -6, -7, 13, 14 ) }; + + public override int DefaultPrice{ get{ return 160500; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 5, 7, 0 ); } } + + public CastleTower( Mobile owner ) : base( 0x30, owner, 1576, 788 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( false, 3, 5, 5, keyValue ); + + SetSign( 5, 6, 9 ); + } + + public CastleTower( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class LogMansion : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -13, -13, 26, 26 ) }; + + public override int DefaultPrice{ get{ return 800000; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 5, 14, 0 ); } } + + public LogMansion( Mobile owner ) : base( 0x58, owner, 1, 1 ) + { + uint keyValue = CreateKeys( owner ); + + SetSign( 5, 14, 15 ); + + BaseDoor door1 = AddHouseDoor( -1, 7, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( 0, 7, 5, 0x6A7 ); + + BaseDoor door3 = AddHouseDoor( -3, -2, 5, 0x6A7 ); + BaseDoor door4 = AddHouseDoor( -4, -2, 5, 0x6A5 ); + + BaseDoor door5 = AddHouseDoor( -5, -8, 26, 0x6A7 ); + BaseDoor door6 = AddHouseDoor( -6, -8, 26, 0x6A5 ); + + BaseDoor door7 = AddHouseDoor( 7, -2, 5, 0x6A5 ); + BaseDoor door8 = AddHouseDoor( 8, -2, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + + door3.Link = door4; + door4.Link = door3; + + door5.Link = door6; + door6.Link = door5; + + door7.Link = door8; + door8.Link = door7; + } + + public LogMansion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class Fortress : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -15, -16, 32, 33 ) }; + + public override int DefaultPrice{ get{ return 1165250; } } + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 4, 16, 0 ); } } + + public Fortress( Mobile owner ) : base( 0x31, owner, 5688, 3344 ) + { + uint keyValue = CreateKeys( owner ); + + AddSouthDoors( false, 0, 11, 5, keyValue ); + + SetSign( 4, 16, 0 ); + + AddSouthDoors( false, -10, -6, 5, keyValue ); + AddSouthDoors( false, 0, -6, 5, keyValue ); + AddSouthDoors( false, 10, -6, 5, keyValue ); + AddSouthDoors( false, -10, 7, 5, keyValue ); + AddSouthDoors( false, 10, 7, 5, keyValue ); + AddSouthDoors( false, 10, -5, 27, keyValue ); + AddSouthDoors( false, 10, 2, 27, keyValue ); + AddSouthDoors( false, -10, -5, 27, keyValue ); + AddSouthDoors( false, -7, -4, 49, keyValue ); + AddSouthDoors( false, 7, -4, 49, keyValue ); + } + + public Fortress( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStorySandstoneHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -5, 14, 10 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 7, -4, 0 ); } } + + public NewTwoStorySandstoneHouse( Mobile owner ) : base( 0x32, owner, 1, 1 ) + { + SetSignFace( 7, -4, 0, 0xBD1 ); + + BaseDoor door1 = AddHouseDoor( 6, 0, 6, 0x6AD ); + BaseDoor door2 = AddHouseDoor( 6, -1, 6, 0x6AF ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStorySandstoneHouse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewBrickHouseWithSteeple : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -6, -6, 13, 13 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 6, 4, 0 ); } } + + public NewBrickHouseWithSteeple( Mobile owner ) : base( 0x33, owner, 1, 1 ) + { + SetSignFace( 6, 4, 0, 0xBD1 ); + + AddHouseDoor( -3, 5, 5, 0x6A5 ); + AddHouseDoor( -2, -3, 5, 0x6AF ); + + BaseDoor door1 = AddHouseDoor( 5, -1, 5, 0x6AD ); + BaseDoor door2 = AddHouseDoor( 5, -2, 5, 0x6AF ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewBrickHouseWithSteeple( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStoryBrickHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -5, 11, 12 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -4, 5, 0 ); } } + + public NewTwoStoryBrickHouse( Mobile owner ) : base( 0x34, owner, 1, 1 ) + { + SetSignFace( -4, 5, 0, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 5, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( 2, 5, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStoryBrickHouse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewPlasterHousePictureWindow : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 14, 16 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 6, -6, 0 ); } } + + public NewPlasterHousePictureWindow( Mobile owner ) : base( 0x35, owner, 1, 1 ) + { + SetSignFace( 6, -6, 0, 0xBD1 ); + + BaseDoor door1 = AddHouseDoor( 5, -3, 5, 0x6AD ); + BaseDoor door2 = AddHouseDoor( 5, -4, 5, 0x6AF ); + + door1.Link = door2; + door2.Link = door1; + + BaseDoor door3 = AddHouseDoor( -2, -1, 5, 0x6A5 ); + BaseDoor door4 = AddHouseDoor( -1, -1, 5, 0x6A7 ); + + door3.Link = door4; + door4.Link = door3; + } + + public NewPlasterHousePictureWindow( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class Wagon : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -7, 11, 15 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 6, 8, 0 ); } } + + public Wagon( Mobile owner ) : base( 0x57, owner, 1, 1 ) + { + SetSignFace( 4, 5, 5, 0x0BD2 ); + AddHouseDoor( 0, 4, 5, 0x06A5 ); + } + + public Wagon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStoryBrickHome : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -8, 14, 17 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -3, 7, 0 ); } } + + public NewTwoStoryBrickHome( Mobile owner ) : base( 0x3C, owner, 1, 1 ) + { + SetSignFace( -3, 7, 0, 0xBD2 ); + + AddHouseDoor( 2, -2, 5, 0x6A7 ); + + BaseDoor door1 = AddHouseDoor( 1, 5, 5, 0x6A7 ); + BaseDoor door2 = AddHouseDoor( 0, 5, 5, 0x6A5 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStoryBrickHome( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStoryWoodenHomeWithPorch : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -5, 14, 12 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 5, 4, 5 ); } } + + public NewTwoStoryWoodenHomeWithPorch( Mobile owner ) : base( 0x3D, owner, 1, 1 ) + { + SetSignFace( 5, 4, 5, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( -4, 3, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -3, 3, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + + BaseDoor door3 = AddHouseDoor( 0, 2, 25, 0x6AD ); + BaseDoor door4 = AddHouseDoor( 0, 1, 25, 0x6AF ); + + door3.Link = door4; + door4.Link = door3; + } + + public NewTwoStoryWoodenHomeWithPorch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallStoneShoppe : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -5, 14, 12 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -6, 6, 5 ); } } + + public NewSmallStoneShoppe( Mobile owner ) : base( 0x3E, owner, 1, 1 ) + { + SetSignFace( -6, 6, 5, 0xBD2 ); + + AddHouseDoor( -4, -1, 5, 0x6A5 ); + AddHouseDoor( -3, -3, 5, 0x6AF ); + + BaseDoor door1 = AddHouseDoor( -3, 5, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -2, 5, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewSmallStoneShoppe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewWoodenHomePorch : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -8, -5, 17, 10 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 2, 4, 0 ); } } + + public NewWoodenHomePorch( Mobile owner ) : base( 0x3F, owner, 1, 1 ) + { + SetSignFace( 2, 4, 0, 0xBD2 ); + + AddHouseDoor( 0, 1, 5, 0x6A5 ); + } + + public NewWoodenHomePorch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallStoneTower : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -6, 11, 13 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -2, 6, 2 ); } } + + public NewSmallStoneTower( Mobile owner ) : base( 0x40, owner, 1, 1 ) + { + SetSignFace( -2, 6, 2, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 5, 5, 0x675 ); + BaseDoor door2 = AddHouseDoor( 0, 5, 5, 0x677 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewSmallStoneTower( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewThreeStoryStoneVilla : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 16, 14 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -6, 6, 5 ); } } + + public NewThreeStoryStoneVilla( Mobile owner ) : base( 0x41, owner, 1, 1 ) + { + SetSignFace( -6, 6, 5, 0xBD2 ); + + AddHouseDoor( -3, -1, 25, 0x6A5 ); + AddHouseDoor( 0, -2, 25, 0x6AF ); + + BaseDoor door1 = AddHouseDoor( -4, -1, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -3, -1, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewThreeStoryStoneVilla( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStorySmallStoneHome : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -4, -4, 9, 9 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 3, 3, 5 ); } } + + public NewTwoStorySmallStoneHome( Mobile owner ) : base( 0x42, owner, 1, 1 ) + { + SetSignFace( 3, 3, 5, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 2, 2, 5, 0x6A7 ); + BaseDoor door2 = AddHouseDoor( 1, 2, 5, 0x6A5 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStorySmallStoneHome( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStorySmallStoneHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -4, -4, 9, 9 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 3, 3, 5 ); } } + + public NewTwoStorySmallStoneHouse( Mobile owner ) : base( 0x43, owner, 1, 1 ) + { + SetSignFace( 3, 3, 5, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 2, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( 2, 2, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStorySmallStoneHouse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStorySmallStoneDwelling : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -4, -4, 9, 9 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 3, 3, 5 ); } } + + public NewTwoStorySmallStoneDwelling( Mobile owner ) : base( 0x44, owner, 1, 1 ) + { + SetSignFace( 3, 3, 5, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 2, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( 2, 2, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStorySmallStoneDwelling( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStorySmallWoodenDwelling : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -4, -4, 9, 9 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 3, 3, 5 ); } } + + public NewTwoStorySmallWoodenDwelling( Mobile owner ) : base( 0x45, owner, 1, 1 ) + { + SetSignFace( 3, 3, 5, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 2, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( 2, 2, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStorySmallWoodenDwelling( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewWoodenMansion : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 15, 14 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 6, 6, 5 ); } } + + public NewWoodenMansion( Mobile owner ) : base( 0x36, owner, 1, 1 ) + { + SetSignFace( 6, 6, 5, 0xBD1 ); + + AddHouseDoor( -1, -1, 25, 0x6A5 ); + AddHouseDoor( 3, -1, 25, 0x6A7 ); + AddHouseDoor( 0, -2, 25, 0x6AF ); + AddHouseDoor( 1, -2, 5, 0x6AF ); + + BaseDoor door1 = AddHouseDoor( 0, -1, 45, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( 1, -1, 45, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + + BaseDoor door3 = AddHouseDoor( 1, 1, 5, 0x6AF ); + BaseDoor door4 = AddHouseDoor( 1, 2, 5, 0x6AD ); + + door3.Link = door4; + door4.Link = door3; + } + + public NewWoodenMansion( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallStoneStoreFront : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -3, 12, 8 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 0, 4, 6 ); } } + + public NewSmallStoneStoreFront( Mobile owner ) : base( 0x37, owner, 1, 1 ) + { + SetSignFace( 0, 4, 6, 0xBD2 ); + + AddHouseDoor( 0, -1, 7, 0x6AF ); + + BaseDoor door1 = AddHouseDoor( -3, 3, 7, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -2, 3, 7, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewSmallStoneStoreFront( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class SmallLogCabinEast : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -3, 8, 8 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 4, -2, 0 ); } } + + public SmallLogCabinEast( Mobile owner ) : base( 0x59, owner, 1, 1 ) + { + SetSignFace( 4, -2, 5, 0x0BD1 ); + + AddHouseDoor( 3, 0, 5, 0x06AD ); + } + + public SmallLogCabinEast( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class SmallLogCabinSouth : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -3, 8, 8 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 2, 4, 0 ); } } + + public SmallLogCabinSouth( Mobile owner ) : base( 0x5A, owner, 1, 1 ) + { + SetSignFace( 2, 4, 5, 0x0BD2 ); + + AddHouseDoor( 0, 3, 5, 0x06A5 ); + } + + public SmallLogCabinSouth( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallStoneHomeEast : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -3, 8, 8 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 4, -2, 0 ); } } + + public NewSmallStoneHomeEast( Mobile owner ) : base( 0x38, owner, 1, 1 ) + { + SetSignFace( 4, -2, 0, 0xBD1 ); + + AddHouseDoor( 3, 0, 7, 0x6AF ); + } + + public NewSmallStoneHomeEast( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewFancyStoneWoodHome : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -5, 12, 11 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -4, 5, 0 ); } } + + public NewFancyStoneWoodHome( Mobile owner ) : base( 0x39, owner, 1, 1 ) + { + SetSignFace( -4, 5, 0, 0xBD2 ); + + AddHouseDoor( 0, 4, 7, 0x6A5 ); + } + + public NewFancyStoneWoodHome( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewFancyWoodenStoneHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -7, 12, 16 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 6, -4, 0 ); } } + + public NewFancyWoodenStoneHouse( Mobile owner ) : base( 0x3A, owner, 1, 1 ) + { + SetSignFace( 6, -4, 0, 0xBD1 ); + + AddHouseDoor( -2, 2, 27, 0x6A5 ); + AddHouseDoor( 2, 4, 27, 0x6AD ); + AddHouseDoor( 1, 0, 7, 0x6AF ); + AddHouseDoor( -1, 0, 27, 0x6AF ); + AddHouseDoor( -2, -3, 27, 0x6A7 ); + AddHouseDoor( -1, -2, 7, 0x6A5 ); + AddHouseDoor( -1, 2, 7, 0x6A5 ); + } + + public NewFancyWoodenStoneHouse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallStoneHouseEast : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -3, 8, 8 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 4, -2, 0 ); } } + + public NewSmallStoneHouseEast( Mobile owner ) : base( 0x3B, owner, 1, 1 ) + { + SetSignFace( 4, -2, 0, 0xBD1 ); + + AddHouseDoor( 3, 0, 7, 0x6AF ); + } + + public NewSmallStoneHouseEast( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallWoodenShackPorch : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -5, 10, 11 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -4, 4, 4 ); } } + + public NewSmallWoodenShackPorch( Mobile owner ) : base( 0x46, owner, 1, 1 ) + { + SetSignFace( -4, 4, 4, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( -1, 1, 6, 0x6AD ); + BaseDoor door2 = AddHouseDoor( -1, 0, 6, 0x6AF ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewSmallWoodenShackPorch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewPlainPlasterHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -5, 14, 11 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -6, 4, 0 ); } } + + public NewPlainPlasterHouse( Mobile owner ) : base( 0x47, owner, 1, 1 ) + { + SetSignFace( -6, 4, 0, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( -1, 4, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( 0, 4, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewPlainPlasterHouse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewPlainStoneHouse : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -6, -5, 13, 12 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -5, 6, 5 ); } } + + public NewPlainStoneHouse( Mobile owner ) : base( 0x48, owner, 1, 1 ) + { + SetSignFace( -5, 6, 5, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( -4, 5, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -3, 5, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewPlainStoneHouse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewPlasterHomeDirtDeck : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -7, 11, 14 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -2, 7, 0 ); } } + + public NewPlasterHomeDirtDeck( Mobile owner ) : base( 0x49, owner, 1, 1 ) + { + SetSignFace( -2, 7, 0, 0xBD2 ); + + AddHouseDoor( 0, 1, 25, 0x6A5 ); + AddHouseDoor( 0, 3, 5, 0x6A5 ); + } + + public NewPlasterHomeDirtDeck( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewWoodenHomeUpperDeck : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -5, 14, 10 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -5, 4, 0 ); } } + + public NewWoodenHomeUpperDeck( Mobile owner ) : base( 0x4A, owner, 1, 1 ) + { + SetSignFace( -5, 4, 0, 0xBD2 ); + + AddHouseDoor( 3, 0, 5, 0x6AF ); + AddHouseDoor( 1, 0, 25, 0x6AF ); + + BaseDoor door1 = AddHouseDoor( -3, 3, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -2, 3, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewWoodenHomeUpperDeck( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStoryStoneVilla : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -8, 11, 17 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 4, 8, 0); } } + + public NewTwoStoryStoneVilla( Mobile owner ) : base( 0x4B, owner, 1, 1 ) + { + SetSignFace( 4, 8, 0, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( -2, 1, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -1, 1, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStoryStoneVilla( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewTwoStorySmallPlasterDwelling : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -4, -4, 9, 9 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 3, 3, 8 ); } } + + public NewTwoStorySmallPlasterDwelling( Mobile owner ) : base( 0x4C, owner, 1, 1 ) + { + SetSignFace( 3, 3, 8, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 2, 7, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( 2, 2, 7, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewTwoStorySmallPlasterDwelling( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallStoneTemple : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -5, -4, 11, 9 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 4, -3, 0 ); } } + + public NewSmallStoneTemple( Mobile owner ) : base( 0x4D, owner, 1, 1 ) + { + SetSignFace( 4, -3, 0, 0xBD1 ); + } + + public NewSmallStoneTemple( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallSandstoneWorkshop : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -3, -4, 8, 9 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 4, 4, 11 ); } } + + public NewSmallSandstoneWorkshop( Mobile owner ) : base( 0x4E, owner, 1, 1 ) + { + SetSignFace( 4, 4, 11, 0xBD2 ); + } + + public NewSmallSandstoneWorkshop( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewStoneHomeWithEnclosedPatio : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 14, 15 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 6, 0, 0 ); } } + + public NewStoneHomeWithEnclosedPatio( Mobile owner ) : base( 0x4F, owner, 1, 1 ) + { + SetSignFace( 6, 0, 0, 0xBD1 ); + + AddHouseDoor( -1, 3, 5, 0x6A5 ); + + BaseDoor door1 = AddHouseDoor( 5, -2, 5, 0x6AD ); + BaseDoor door2 = AddHouseDoor( 5, -3, 5, 0x6AF ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewStoneHomeWithEnclosedPatio( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewLogCabin : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -8, -5, 17, 10 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 2, 4, 0 ); } } + + public NewLogCabin( Mobile owner ) : base( 0x50, owner, 1, 1 ) + { + SetSignFace( 2, 4, 0, 0xBD2 ); + + AddHouseDoor( 0, 1, 5, 0x6A5 ); + } + + public NewLogCabin( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallLogCabinWithDeck : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -4, 15, 9 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 1, 4, 10 ); } } + + public NewSmallLogCabinWithDeck( Mobile owner ) : base( 0x51, owner, 1, 1 ) + { + SetSignFace( 1, 4, 10, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 0, 10, 0x6AD ); + BaseDoor door2 = AddHouseDoor( 1, -1, 10, 0x6AF ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewSmallLogCabinWithDeck( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewRaisedBrickHome : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -6, -7, 13, 14 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 3, 6, 0 ); } } + + public NewRaisedBrickHome( Mobile owner ) : base( 0x52, owner, 1, 1 ) + { + SetSignFace( 3, 6, 0, 0xBD1 ); + + BaseDoor door1 = AddHouseDoor( 2, -3, 25, 0x6AF ); + BaseDoor door2 = AddHouseDoor( 2, -2, 25, 0x6AD ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewRaisedBrickHome( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewBrickArena : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -9, -11, 18, 22 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -9, 10, 0 ); } } + + public NewBrickArena( Mobile owner ) : base( 0x5D, owner, 1, 1 ) + { + SetSignFace( -9, 10, 0, 0xBD2 ); + + AddHouseDoor( 0, 9, 6, 0x675 ); + } + + public NewBrickArena( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewStoneFort : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -8, -7, 17, 15 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -5, 7, 7 ); } } + + public NewStoneFort( Mobile owner ) : base( 0x5E, owner, 1, 1 ) + { + SetSignFace( -5, 7, 7, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 6, 7, 0x675 ); + BaseDoor door2 = AddHouseDoor( 0, 6, 7, 0x677 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewStoneFort( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewOldStoneHomeShoppe : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 16, 14 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 8, -6, 5 ); } } + + public NewOldStoneHomeShoppe( Mobile owner ) : base( 0x5F, owner, 1, 1 ) + { + SetSignFace( 8, -6, 5, 0xBD1 ); + + BaseDoor door1 = AddHouseDoor( 7, -3, 5, 0x6AD ); + BaseDoor door2 = AddHouseDoor( 7, -4, 5, 0x6AF ); + + door1.Link = door2; + door2.Link = door1; + + BaseDoor door3 = AddHouseDoor( 0, 1, 5, 0x6AF ); + BaseDoor door4 = AddHouseDoor( 0, 2, 5, 0x6AD ); + + door3.Link = door4; + door4.Link = door3; + } + + public NewOldStoneHomeShoppe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallBrickCastle : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -6, 14, 13 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -5, 6, 0 ); } } + + public NewSmallBrickCastle( Mobile owner ) : base( 0x60, owner, 1, 1 ) + { + SetSignFace( -6, 6, 0, 0xBD2 ); + + AddHouseDoor( 0, 0, 25, 0x675 ); + } + + public NewSmallBrickCastle( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewSmallWizardTower : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -8, -6, 17, 13 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -2, 6, 0 ); } } + + public NewSmallWizardTower( Mobile owner ) : base( 0x53, owner, 1, 1 ) + { + SetSignFace( -2, 6, 0, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 0, 5, 5, 0x677 ); + BaseDoor door2 = AddHouseDoor( 1, 5, 5, 0x675 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewSmallWizardTower( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewBrickHomeWithFrontDeck : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 15, 14 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( 0, 7, 0 ); } } + + public NewBrickHomeWithFrontDeck( Mobile owner ) : base( 0x54, owner, 1, 1 ) + { + SetSignFace( 0, 6, 0, 0xBD2 ); + + BaseDoor door1 = AddHouseDoor( 1, 3, 5, 0x6AD ); + BaseDoor door2 = AddHouseDoor( 1, 2, 5, 0x6AF ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewBrickHomeWithFrontDeck( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewMarbleShoppe : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -6, -5, 13, 12 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -5, 6, 1 ); } } + + public NewMarbleShoppe( Mobile owner ) : base( 0x55, owner, 1, 1 ) + { + SetSignFace( -5, 6, 1, 0xBD2 ); + + AddHouseDoor( -2, -3, 5, 0x6AF ); + AddHouseDoor( -3, -1, 5, 0x6A5 ); + + BaseDoor door1 = AddHouseDoor( -2, 5, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -1, 5, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewMarbleShoppe( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } + ////////////////////////////////////////////////////////////////////////////////////////////// + public class NewBrickHomeWithLargePorch : BaseHouse + { + public static Rectangle2D[] AreaArray = new Rectangle2D[]{ new Rectangle2D( -7, -7, 16, 14 ) }; + + public override Rectangle2D[] Area{ get{ return AreaArray; } } + public override Point3D BaseBanLocation{ get{ return new Point3D( -6, 5, 0 ); } } + + public NewBrickHomeWithLargePorch( Mobile owner ) : base( 0x56, owner, 1, 1 ) + { + SetSignFace( -6, 5, 0, 0xBD2 ); + + AddHouseDoor( 4, -3, 5, 0x6AF ); + + BaseDoor door1 = AddHouseDoor( -4, 4, 5, 0x6A5 ); + BaseDoor door2 = AddHouseDoor( -3, 4, 5, 0x6A7 ); + + door1.Link = door2; + door2.Link = door1; + } + + public NewBrickHomeWithLargePorch( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( (int)0 ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/PreviewHouse.cs b/Scripts/Multis/PreviewHouse.cs new file mode 100644 index 0000000..89ad013 --- /dev/null +++ b/Scripts/Multis/PreviewHouse.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; + +namespace Server.Multis +{ + public class PreviewHouse : BaseMulti + { + private List m_Components; + private Timer m_Timer; + + public PreviewHouse( int multiID ) : base( multiID ) + { + m_Components = new List(); + + MultiComponentList mcl = this.Components; + + for ( int i = 1; i < mcl.List.Length; ++i ) + { + MultiTileEntry entry = mcl.List[i]; + + if ( entry.m_Flags == 0 ) + { + Item item = new Static( (int)entry.m_ItemID ); + + item.MoveToWorld( new Point3D( X + entry.m_OffsetX, Y + entry.m_OffsetY, Z + entry.m_OffsetZ ), Map ); + + m_Components.Add( item ); + } + } + + m_Timer = new DecayTimer( this ); + m_Timer.Start(); + } + + public override void OnLocationChange( Point3D oldLocation ) + { + base.OnLocationChange( oldLocation ); + + if ( m_Components == null ) + return; + + int xOffset = X - oldLocation.X; + int yOffset = Y - oldLocation.Y; + int zOffset = Z - oldLocation.Z; + + for ( int i = 0; i < m_Components.Count; ++i ) + { + Item item = m_Components[i]; + + item.MoveToWorld( new Point3D( item.X + xOffset, item.Y + yOffset, item.Z + zOffset ), this.Map ); + } + } + + public override void OnMapChange() + { + base.OnMapChange(); + + if ( m_Components == null ) + return; + + for ( int i = 0; i < m_Components.Count; ++i ) + { + Item item = m_Components[i]; + + item.Map = this.Map; + } + } + + public override void OnDelete() + { + base.OnDelete(); + + if ( m_Components == null ) + return; + + for ( int i = 0; i < m_Components.Count; ++i ) + { + Item item = m_Components[i]; + + item.Delete(); + } + } + + public override void OnAfterDelete() + { + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + + base.OnAfterDelete(); + } + + public PreviewHouse( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Components ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Components = reader.ReadStrongItemList(); + + break; + } + } + + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( this.Delete ) ); + } + + private class DecayTimer : Timer + { + private Item m_Item; + + public DecayTimer( Item item ) : base( TimeSpan.FromSeconds( 20.0 ) ) + { + m_Item = item; + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + m_Item.Delete(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Multis/ViewHousesGump.cs b/Scripts/Multis/ViewHousesGump.cs new file mode 100644 index 0000000..ff6e96a --- /dev/null +++ b/Scripts/Multis/ViewHousesGump.cs @@ -0,0 +1,287 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Multis; +using Server.Targeting; +using Server.Accounting; +using Server.Commands; + +namespace Server.Gumps +{ + public class ViewHousesGump : Gump + { + public static void Initialize() + { + CommandSystem.Register( "ViewHouses", AccessLevel.GameMaster, new CommandEventHandler( ViewHouses_OnCommand ) ); + } + + [Usage( "ViewHouses" )] + [Description( "Displays a menu listing all houses of a targeted player. The menu also contains specific house details, and options to: go to house, open house menu, and demolish house." )] + public static void ViewHouses_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ViewHouses_OnTarget ) ); + } + + public static void ViewHouses_OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile ) + from.SendGump( new ViewHousesGump( from, GetHouses( (Mobile)targeted ), null ) ); + } + + private class HouseComparer : IComparer + { + public static readonly IComparer Instance = new HouseComparer(); + + public int Compare( BaseHouse x, BaseHouse y ) + { + return x.BuiltOn.CompareTo( y.BuiltOn ); + } + } + + public static List GetHouses( Mobile owner ) + { + List list = new List(); + + Account acct = owner.Account as Account; + + if ( acct == null ) + { + list.AddRange( BaseHouse.GetHouses( owner ) ); + } + else + { + for ( int i = 0; i < acct.Length; ++i ) + { + Mobile mob = acct[i]; + + if ( mob != null ) + list.AddRange( BaseHouse.GetHouses( mob ) ); + } + } + + list.Sort( HouseComparer.Instance ); + + return list; + } + + private Mobile m_From; + private List m_List; + private BaseHouse m_Selection; + + public ViewHousesGump( Mobile from, List list, BaseHouse sel ) : base( 50, 40 ) + { + m_From = from; + m_List = list; + m_Selection = sel; + + from.CloseGump( typeof( ViewHousesGump ) ); + + AddPage( 0 ); + + AddBackground( 0, 0, 240, 360, 5054 ); + AddBlackAlpha( 10, 10, 220, 340 ); + + if ( sel == null || sel.Deleted ) + { + m_Selection = null; + + AddHtml( 35, 15, 120, 20, Color( "House Type", White ), false, false ); + + if ( list.Count == 0 ) + AddHtml( 35, 40, 160, 40, Color( "There were no houses found for that player.", White ), false, false ); + + AddImage( 190, 17, 0x25EA ); + AddImage( 207, 17, 0x25E6 ); + + int page = 0; + + for ( int i = 0; i < list.Count; ++i ) + { + if ( (i % 15) == 0 ) + { + if ( page > 0 ) + AddButton( 207, 17, 0x15E1, 0x15E5, 0, GumpButtonType.Page, page+1 ); + + AddPage( ++page ); + + if ( page > 1 ) + AddButton( 190, 17, 0x15E3, 0x15E7, 0, GumpButtonType.Page, page-1 ); + } + + object name = FindHouseName( list[i] ); + + AddHtml( 15, 40 + ((i % 15) * 20), 20, 20, Color( String.Format( "{0}.", i+1 ), White ), false, false ); + + if ( name is int ) + AddHtmlLocalized( 35, 40 + ((i % 15) * 20), 160, 20, (int)name, White16, false, false ); + else if ( name is string ) + AddHtml( 35, 40 + ((i % 15) * 20), 160, 20, Color( (string)name, White ), false, false ); + + AddButton( 198, 39 + ((i % 15) * 20), 4005, 4007, i+1, GumpButtonType.Reply, 0 ); + } + } + else + { + string houseName, owner, location; + Map map = sel.Map; + + houseName = (sel.Sign == null) ? "An Unnamed House" : sel.Sign.GetName(); + owner = (sel.Owner == null) ? "nobody" : sel.Owner.Name; + + int xLong = 0, yLat = 0, xMins = 0, yMins = 0; + bool xEast = false, ySouth = false; + + bool valid = Sextant.Format( sel.Location, map, ref xLong, ref yLat, ref xMins, ref yMins, ref xEast, ref ySouth ); + + if ( valid ) + location = String.Format( "{0}° {1}'{2}, {3}° {4}'{5}", yLat, yMins, ySouth ? "S" : "N", xLong, xMins, xEast ? "E" : "W" ); + else + location = "unknown"; + + AddHtml( 10, 15, 220, 20, Color( Center( "House Properties" ), White ), false, false ); + + AddHtml( 15, 40, 210, 20, Color( "Facet:", White ), false, false ); + AddHtml( 15, 40, 210, 20, Color( Right( map == null ? "(null)" : map.Name ), White ), false, false ); + + AddHtml( 15, 60, 210, 20, Color( "Location:", White ), false, false ); + AddHtml( 15, 60, 210, 20, Color( Right( sel.Location.ToString() ), White ), false, false ); + + AddHtml( 15, 80, 210, 20, Color( "Sextant:", White ), false, false ); + AddHtml( 15, 80, 210, 20, Color( Right( location ), White ), false, false ); + + AddHtml( 15, 100, 210, 20, Color( "Owner:", White ), false, false ); + AddHtml( 15, 100, 210, 20, Color( Right( owner ), White ), false, false ); + + AddHtml( 15, 120, 210, 20, Color( "Name:", White ), false, false ); + AddHtml( 15, 120, 210, 20, Color( Right( houseName ), White ), false, false ); + + AddHtml( 15, 140, 210, 20, Color( "Friends:", White ), false, false ); + AddHtml( 15, 140, 210, 20, Color( Right( sel.Friends.Count.ToString() ), White ), false, false ); + + AddHtml( 15, 160, 210, 20, Color( "Co-Owners:", White ), false, false ); + AddHtml( 15, 160, 210, 20, Color( Right( sel.CoOwners.Count.ToString() ), White ), false, false ); + + AddHtml( 15, 180, 210, 20, Color( "Bans:", White ), false, false ); + AddHtml( 15, 180, 210, 20, Color( Right( sel.Bans.Count.ToString() ), White ), false, false ); + + AddHtml( 15, 200, 210, 20, Color( "Decays:", White ), false, false ); + AddHtml( 15, 200, 210, 20, Color( Right( sel.CanDecay ? "Yes" : "No" ), White ), false, false ); + + AddHtml( 15, 220, 210, 20, Color( "Decay Level:", White ), false, false ); + AddHtml( 15, 220, 210, 20, Color( Right( sel.DecayLevel.ToString() ), White ), false, false ); + + AddButton( 15, 245, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtml( 50, 245, 120, 20, Color( "Go to house", White ), false, false ); + + AddButton( 15, 265, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtml( 50, 265, 120, 20, Color( "Open house menu", White ), false, false ); + + AddButton( 15, 285, 4005, 4007, 3, GumpButtonType.Reply, 0 ); + AddHtml( 50, 285, 120, 20, Color( "Demolish house", White ), false, false ); + + AddButton( 15, 305, 4005, 4007, 4, GumpButtonType.Reply, 0 ); + AddHtml( 50, 305, 120, 20, Color( "Refresh house", White ), false, false ); + } + } + + public override void OnResponse( Server.Network.NetState sender, RelayInfo info ) + { + if ( m_Selection == null ) + { + int v = info.ButtonID - 1; + + if ( v >= 0 && v < m_List.Count ) + m_From.SendGump( new ViewHousesGump( m_From, m_List, m_List[v] ) ); + } + else if ( !m_Selection.Deleted ) + { + switch ( info.ButtonID ) + { + case 0: + { + m_From.SendGump( new ViewHousesGump( m_From, m_List, null ) ); + break; + } + case 1: + { + Map map = m_Selection.Map; + + if ( map != null && map != Map.Internal ) + m_From.MoveToWorld( m_Selection.BanLocation, map ); + + m_From.SendGump( new ViewHousesGump( m_From, m_List, m_Selection ) ); + + break; + } + case 2: + { + m_From.SendGump( new ViewHousesGump( m_From, m_List, m_Selection ) ); + + HouseSign sign = m_Selection.Sign; + + if ( sign != null && !sign.Deleted ) + sign.OnDoubleClick( m_From ); + + break; + } + case 3: + { + m_From.SendGump( new ViewHousesGump( m_From, m_List, m_Selection ) ); + m_From.SendGump( new HouseDemolishGump( m_From, m_Selection ) ); + + break; + } + case 4: + { + m_Selection.RefreshDecay(); + m_From.SendGump( new ViewHousesGump( m_From, m_List, m_Selection ) ); + + break; + } + } + } + } + + public object FindHouseName( BaseHouse house ) + { + int multiID = house.ItemID; + HousePlacementEntry[] entries; + + entries = HousePlacementEntry.ClassicHouses; + + for ( int i = 0; i < entries.Length; ++i ) + { + if ( entries[i].MultiID == multiID ) + return entries[i].Description; + } + + return house.GetType().Name; + } + + private const int White16 = 0x7FFF; + private const int White = 0xFFFFFF; + + public string Right( string text ) + { + return String.Format( "
{0}
", text ); + } + + public string Center( string text ) + { + return String.Format( "
{0}
", text ); + } + + public string Color( string text, int color ) + { + return String.Format( "{1}", color, text ); + } + + public void AddBlackAlpha( int x, int y, int width, int height ) + { + AddImageTiled( x, y, width, height, 2624 ); + AddAlphaRegion( x, y, width, height ); + } + } +} \ No newline at end of file diff --git a/Scripts/Quests/BookOfLore.cs b/Scripts/Quests/BookOfLore.cs new file mode 100644 index 0000000..9285042 --- /dev/null +++ b/Scripts/Quests/BookOfLore.cs @@ -0,0 +1,41 @@ +using Server; +using System; + +namespace Server.Items +{ + [FlipableAttribute( 0xE97, 0xE98 )] + public class BookOfLore : Item + { + [Constructable] + public BookOfLore() : base( 0xE97 ) + { + Name = "Book of Lore"; + Hue = Utility.RandomList( 0x558, 0x8A1, 0x89F, 0x84E, 0x851, 0x556, 0x551, 0x8AD, 0x847, 0x84A, 0x89D, 0x89B, 0x845, 0x846, 0x429, 0x55F, 0x562, 0x430, 0x432, 0x441, 0x970, 0x96D, 0x905, 0x83B, 0x83E, 0x980, 0x97F, 0x969, 0x96A, 0x96B ); + Movable = false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.InRange( this.GetWorldLocation(), 2 ) ) + from.SendMessage( "That is too far away!" ); + else if ( !Server.Misc.QuestFunctions.MonstersNearby( from ) ) + from.SendMessage( "You learn nothing of interest from this book." ); + } + + public BookOfLore( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( ( int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Quests/ChestOfSecrets.cs b/Scripts/Quests/ChestOfSecrets.cs new file mode 100644 index 0000000..a47a26d --- /dev/null +++ b/Scripts/Quests/ChestOfSecrets.cs @@ -0,0 +1,41 @@ +using Server; +using System; + +namespace Server.Items +{ + [FlipableAttribute( 0x0890, 0x0891 )] + public class ChestOfSecrets : Item + { + [Constructable] + public ChestOfSecrets() : base( 0x0890 ) + { + Name = "golden chest"; + Light = LightType.Circle150; + Movable = false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.InRange( this.GetWorldLocation(), 2 ) ) + from.SendMessage( "That is too far away!" ); + else if ( !Server.Misc.QuestFunctions.MonstersNearby( from ) ) + from.SendMessage( "You find nothing of interest in the chest." ); + } + + public ChestOfSecrets( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + writer.Write( ( int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Quests/QuestFunctions.cs b/Scripts/Quests/QuestFunctions.cs new file mode 100644 index 0000000..475ec50 --- /dev/null +++ b/Scripts/Quests/QuestFunctions.cs @@ -0,0 +1,30 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; + +namespace Server.Misc +{ + class QuestFunctions + { + public static bool MonstersNearby( Mobile m ) + { + bool inCombat = ( m.Combatant != null && m.InRange( m.Combatant.Location, 20 ) && m.Combatant.InLOS( m ) ); + + int monsters = 0; + foreach ( Mobile monster in m.GetMobilesInRange( 8 ) ) + { + if ( monster is BaseCreature && !(((BaseCreature)monster).GetMaster() is PlayerMobile) ) + monsters++; + } + + if ( monsters > 0 || inCombat ) + { + m.SendMessage( "You cannot do that with enemies nearby!" ); + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/BaseRegion.cs b/Scripts/Regions/BaseRegion.cs new file mode 100644 index 0000000..be53dd5 --- /dev/null +++ b/Scripts/Regions/BaseRegion.cs @@ -0,0 +1,699 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Gumps; +using Server.Spells; +using Server.Spells.Fourth; +using Server.Spells.Sixth; +using Server.Spells.Seventh; + +namespace Server.Regions +{ + public enum SpawnZLevel + { + Lowest, + Highest, + Random + } + + public class BaseRegion : Region + { + public static void Configure() + { + Region.DefaultRegionType = typeof( BaseRegion ); + } + + private string m_RuneName; + private bool m_NoLogoutDelay; + + private SpawnEntry[] m_Spawns; + private SpawnZLevel m_SpawnZLevel; + private bool m_ExcludeFromParentSpawns; + + public string RuneName{ get{ return m_RuneName; } set{ m_RuneName = value; } } + + public bool NoLogoutDelay{ get{ return m_NoLogoutDelay; } set{ m_NoLogoutDelay = value; } } + + public SpawnEntry[] Spawns + { + get{ return m_Spawns; } + set + { + if ( m_Spawns != null ) + { + for ( int i = 0; i < m_Spawns.Length; i++ ) + m_Spawns[i].Delete(); + } + + m_Spawns = value; + } + } + + public SpawnZLevel SpawnZLevel{ get{ return m_SpawnZLevel; } set{ m_SpawnZLevel = value; } } + + public bool ExcludeFromParentSpawns{ get{ return m_ExcludeFromParentSpawns; } set{ m_ExcludeFromParentSpawns = value; } } + + public override void OnUnregister() + { + base.OnUnregister(); + + this.Spawns = null; + } + + public static string GetRuneNameFor( Region region ) + { + while ( region != null ) + { + BaseRegion br = region as BaseRegion; + + if ( br != null && br.m_RuneName != null ) + return br.m_RuneName; + + region = region.Parent; + } + + return null; + } + + public override TimeSpan GetLogoutDelay( Mobile m ) + { + if ( m_NoLogoutDelay ) + { + if ( m.Aggressors.Count == 0 && m.Aggressed.Count == 0 && !m.Criminal ) + return TimeSpan.Zero; + } + + return base.GetLogoutDelay( m ); + } + + public static bool CanSpawn( Region region, params Type[] types ) + { + while ( region != null ) + { + if ( !region.AllowSpawn() ) + return false; + + BaseRegion br = region as BaseRegion; + + if ( br != null ) + { + if ( br.Spawns != null ) + { + for ( int i = 0; i < br.Spawns.Length; i++ ) + { + SpawnEntry entry = br.Spawns[i]; + + if ( entry.Definition.CanSpawn( types ) ) + return true; + } + } + + if ( br.ExcludeFromParentSpawns ) + return false; + } + + region = region.Parent; + } + + return false; + } + + public override void OnEnter( Mobile m ) + { + base.OnEnter(m); + + if ( m.Mounted && NoMounts( m, m.Location ) && m is PlayerMobile ) + Server.Mobiles.StableMaster.DismountPlayer( m ); + + if ( m is BaseCreature && ((BaseCreature)m).SeaCreature ) + { + m.PlaySound( 0x026 ); + Effects.SendLocationEffect( m.Location, m.Map, 0x35B2, 16 ); + m.Delete(); + } + } + + public override void OnExit( Mobile m ) + { + base.OnExit(m); + + if ( !m.Mounted && m is PlayerMobile ) + Server.Mobiles.StableMaster.GetLastMounted( m ); + } + + public override bool OnBeginSpellCast( Mobile m, ISpell s ) + { + if ( ( s is MarkSpell || s is RecallSpell || s is GateTravelSpell ) && SpellHelper.NoRecall( m.Location, m ) ) + { + m.SendMessage( "For some strange reason, you cannot cast this spell!" ); + m.FixedEffect( 0x3735, 6, 30 ); + m.PlaySound( 0x5C ); + return false; + } + + return base.OnBeginSpellCast( m, s ); + } + + public override bool AcceptsSpawnsFrom( Region region ) + { + if ( region == this || !m_ExcludeFromParentSpawns ) + return base.AcceptsSpawnsFrom( region ); + + return false; + } + + private Rectangle3D[] m_Rectangles; + private int[] m_RectangleWeights; + private int m_TotalWeight; + + private static List m_RectBuffer1 = new List(); + private static List m_RectBuffer2 = new List(); + + private void InitRectangles() + { + if ( m_Rectangles != null ) + return; + + // Test if area rectangles are overlapping, and in that case break them into smaller non overlapping rectangles + for ( int i = 0; i < this.Area.Length; i++ ) + { + m_RectBuffer2.Add( this.Area[i] ); + + for ( int j = 0; j < m_RectBuffer1.Count && m_RectBuffer2.Count > 0; j++ ) + { + Rectangle3D comp = m_RectBuffer1[j]; + + for ( int k = m_RectBuffer2.Count - 1; k >= 0; k-- ) + { + Rectangle3D rect = m_RectBuffer2[k]; + + int l1 = rect.Start.X, r1 = rect.End.X, t1 = rect.Start.Y, b1 = rect.End.Y; + int l2 = comp.Start.X, r2 = comp.End.X, t2 = comp.Start.Y, b2 = comp.End.Y; + + if ( l1 < r2 && r1 > l2 && t1 < b2 && b1 > t2 ) + { + m_RectBuffer2.RemoveAt( k ); + + int sz = rect.Start.Z; + int ez = rect.End.X; + + if ( l1 < l2 ) + { + m_RectBuffer2.Add( new Rectangle3D( new Point3D( l1, t1, sz ), new Point3D( l2, b1, ez ) ) ); + } + + if ( r1 > r2 ) + { + m_RectBuffer2.Add( new Rectangle3D( new Point3D( r2, t1, sz ), new Point3D( r1, b1, ez ) ) ); + } + + if ( t1 < t2 ) + { + m_RectBuffer2.Add( new Rectangle3D( new Point3D( Math.Max( l1, l2 ), t1, sz ), new Point3D( Math.Min( r1, r2 ), t2, ez ) ) ); + } + + if ( b1 > b2 ) + { + m_RectBuffer2.Add( new Rectangle3D( new Point3D( Math.Max( l1, l2 ), b2, sz ), new Point3D( Math.Min( r1, r2 ), b1, ez ) ) ); + } + } + } + } + + m_RectBuffer1.AddRange( m_RectBuffer2 ); + m_RectBuffer2.Clear(); + } + + m_Rectangles = m_RectBuffer1.ToArray(); + m_RectBuffer1.Clear(); + + m_RectangleWeights = new int[m_Rectangles.Length]; + for ( int i = 0; i < m_Rectangles.Length; i++ ) + { + Rectangle3D rect = m_Rectangles[i]; + int weight = rect.Width * rect.Height; + + m_RectangleWeights[i] = weight; + m_TotalWeight += weight; + } + } + + private static List m_SpawnBuffer1 = new List(); + private static List m_SpawnBuffer2 = new List(); + + public Point3D RandomSpawnLocation( int spawnHeight, bool land, bool water, Point3D home, int range ) + { + Map map = this.Map; + + if ( map == Map.Internal ) + return Point3D.Zero; + + InitRectangles(); + + if ( m_TotalWeight <= 0 ) + return Point3D.Zero; + + for ( int i = 0; i < 10; i++ ) // Try 10 times + { + int x, y, minZ, maxZ; + + if ( home == Point3D.Zero ) + { + int rand = Utility.Random( m_TotalWeight ); + + x = int.MinValue; y = int.MinValue; + minZ = int.MaxValue; maxZ = int.MinValue; + for ( int j = 0; j < m_RectangleWeights.Length; j++ ) + { + int curWeight = m_RectangleWeights[j]; + + if ( rand < curWeight ) + { + Rectangle3D rect = m_Rectangles[j]; + + x = rect.Start.X + rand % rect.Width; + y = rect.Start.Y + rand / rect.Width; + + minZ = rect.Start.Z; + maxZ = rect.End.Z; + + break; + } + + rand -= curWeight; + } + } + else + { + x = Utility.RandomMinMax( home.X - range, home.X + range ); + y = Utility.RandomMinMax( home.Y - range, home.Y + range ); + + minZ = int.MaxValue; maxZ = int.MinValue; + for ( int j = 0; j < this.Area.Length; j++ ) + { + Rectangle3D rect = this.Area[j]; + + if ( x >= rect.Start.X && x < rect.End.X && y >= rect.Start.Y && y < rect.End.Y ) + { + minZ = rect.Start.Z; + maxZ = rect.End.Z; + break; + } + } + + if ( minZ == int.MaxValue ) + continue; + } + + if ( x < 0 || y < 0 || x >= map.Width || y >= map.Height ) + continue; + + LandTile lt = map.Tiles.GetLandTile( x, y ); + + int ltLowZ = 0, ltAvgZ = 0, ltTopZ = 0; + map.GetAverageZ( x, y, ref ltLowZ, ref ltAvgZ, ref ltTopZ ); + + TileFlag ltFlags = TileData.LandTable[lt.ID & TileData.MaxLandValue].Flags; + bool ltImpassable = ( (ltFlags & TileFlag.Impassable) != 0 ); + + if ( !lt.Ignored && ltAvgZ >= minZ && ltAvgZ < maxZ ) + if ( (ltFlags & TileFlag.Wet) != 0 ) { + if ( water ) + m_SpawnBuffer1.Add( ltAvgZ ); + } + else if ( land && !ltImpassable ) + m_SpawnBuffer1.Add( ltAvgZ ); + + StaticTile[] staticTiles = map.Tiles.GetStaticTiles( x, y, true ); + + for ( int j = 0; j < staticTiles.Length; j++ ) + { + StaticTile tile = staticTiles[j]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + int tileZ = tile.Z + id.CalcHeight; + + if ( tileZ >= minZ && tileZ < maxZ ) + if ( (id.Flags & TileFlag.Wet) != 0 ) { + if ( water ) + m_SpawnBuffer1.Add( tileZ ); + } + else if ( land && id.Surface && !id.Impassable ) + m_SpawnBuffer1.Add( tileZ ); + } + + + Sector sector = map.GetSector( x, y ); + + for ( int j = 0; j < sector.Items.Count; j++ ) + { + Item item = sector.Items[j]; + + if ( !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue && item.AtWorldPoint( x, y ) ) + { + m_SpawnBuffer2.Add( item ); + + if ( !item.Movable ) + { + ItemData id = item.ItemData; + int itemZ = item.Z + id.CalcHeight; + + if ( itemZ >= minZ && itemZ < maxZ ) + if ( (id.Flags & TileFlag.Wet) != 0 ) { + if ( water ) + m_SpawnBuffer1.Add( itemZ ); + } + else if ( land && id.Surface && !id.Impassable ) + m_SpawnBuffer1.Add( itemZ ); + } + } + } + + + if ( m_SpawnBuffer1.Count == 0 ) + { + m_SpawnBuffer1.Clear(); + m_SpawnBuffer2.Clear(); + continue; + } + + int z; + switch ( m_SpawnZLevel ) + { + case SpawnZLevel.Lowest: + { + z = int.MaxValue; + + for ( int j = 0; j < m_SpawnBuffer1.Count; j++ ) + { + int l = m_SpawnBuffer1[j]; + + if ( l < z ) + z = l; + } + + break; + } + case SpawnZLevel.Highest: + { + z = int.MinValue; + + for ( int j = 0; j < m_SpawnBuffer1.Count; j++ ) + { + int l = m_SpawnBuffer1[j]; + + if ( l > z ) + z = l; + } + + break; + } + default: // SpawnZLevel.Random + { + int index = Utility.Random( m_SpawnBuffer1.Count ); + z = m_SpawnBuffer1[index]; + + break; + } + } + + m_SpawnBuffer1.Clear(); + + + if ( !Region.Find( new Point3D( x, y, z ), map ).AcceptsSpawnsFrom( this ) ) + { + m_SpawnBuffer2.Clear(); + continue; + } + + int top = z + spawnHeight; + + bool ok = true; + for ( int j = 0; j < m_SpawnBuffer2.Count; j++ ) + { + Item item = m_SpawnBuffer2[j]; + ItemData id = item.ItemData; + + if ( ( id.Surface || id.Impassable ) && item.Z + id.CalcHeight > z && item.Z < top ) + { + ok = false; + break; + } + } + + m_SpawnBuffer2.Clear(); + + if ( !ok ) + continue; + + if ( ltImpassable && ltAvgZ > z && ltLowZ < top ) + continue; + + for ( int j = 0; j < staticTiles.Length; j++ ) + { + StaticTile tile = staticTiles[j]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + + if ( ( id.Surface || id.Impassable ) && tile.Z + id.CalcHeight > z && tile.Z < top ) + { + ok = false; + break; + } + } + + if ( !ok ) + continue; + + for ( int j = 0; j < sector.Mobiles.Count; j++ ) + { + Mobile m = sector.Mobiles[j]; + + if ( m.X == x && m.Y == y && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) ) + if ( m.Z + 16 > z && m.Z < top ) + { + ok = false; + break; + } + } + + if ( ok ) + return new Point3D( x, y, z ); + } + + return Point3D.Zero; + } + + public override string ToString() + { + if ( this.Name != null ) + return this.Name; + else if ( this.RuneName != null ) + return this.RuneName; + else + return this.GetType().Name; + } + + public BaseRegion( string name, Map map, int priority, params Rectangle2D[] area ) : base( name, map, priority, area ) + { + } + + public BaseRegion( string name, Map map, int priority, params Rectangle3D[] area ) : base( name, map, priority, area ) + { + } + + public BaseRegion( string name, Map map, Region parent, params Rectangle2D[] area ) : base( name, map, parent, area ) + { + } + + public BaseRegion( string name, Map map, Region parent, params Rectangle3D[] area ) : base( name, map, parent, area ) + { + } + + public BaseRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + ReadString( xml["rune"], "name", ref m_RuneName, false ); + + bool logoutDelayActive = true; + ReadBoolean( xml["logoutDelay"], "active", ref logoutDelayActive, false ); + m_NoLogoutDelay = !logoutDelayActive; + + + XmlElement spawning = xml["spawning"]; + if ( spawning != null ) + { + ReadBoolean( spawning, "excludeFromParent", ref m_ExcludeFromParentSpawns, false ); + + SpawnZLevel zLevel = SpawnZLevel.Lowest; + ReadEnum( spawning, "zLevel", ref zLevel, false ); + m_SpawnZLevel = zLevel; + + + List list = new List(); + + foreach ( XmlNode node in spawning.ChildNodes ) + { + XmlElement el = node as XmlElement; + + if ( el != null ) + { + SpawnDefinition def = SpawnDefinition.GetSpawnDefinition( el ); + if ( def == null ) + continue; + + int id = 0; + if ( !ReadInt32( el, "id", ref id, true ) ) + continue; + + int amount = 0; + if ( !ReadInt32( el, "amount", ref amount, true ) ) + continue; + + TimeSpan minSpawnTime = SpawnEntry.DefaultMinSpawnTime; + ReadTimeSpan( el, "minSpawnTime", ref minSpawnTime, false ); + + TimeSpan maxSpawnTime = SpawnEntry.DefaultMaxSpawnTime; + ReadTimeSpan( el, "maxSpawnTime", ref maxSpawnTime, false ); + + Point3D home = Point3D.Zero; + int range = 0; + + XmlElement homeEl = el["home"]; + if ( ReadPoint3D( homeEl, map, ref home, false ) ) + ReadInt32( homeEl, "range", ref range, false ); + + Direction dir = SpawnEntry.InvalidDirection; + ReadEnum( el["direction"], "value" , ref dir, false ); + + SpawnEntry entry = new SpawnEntry( id, this, home, range, dir, def, amount, minSpawnTime, maxSpawnTime ); + list.Add( entry ); + } + } + + if ( list.Count > 0 ) + { + m_Spawns = list.ToArray(); + } + } + } + + public static Point3D GetBoatWater( int x, int y, Map map, int range ) + { + bool WaterOk = false; + Point3D loc = new Point3D(0, 0, 0); + + Map tm = map; + int tx = 0; + int ty = 0; + int tz = 0; + int r = 0; + LandTile t = tm.Tiles.GetLandTile(tx, ty); + + while ( !WaterOk ) + { + tx = Utility.RandomMinMax( x+range, x-range ); + ty = Utility.RandomMinMax( y+range, y-range ); + tz = tm.GetAverageZ(tx, ty); + + t = tm.Tiles.GetLandTile(tx, ty); + + if ( IsWaterTile ( t.ID ) ) + WaterOk = true; + + if ( WaterOk ) + loc = new Point3D(tx, ty, tz); + + r++; // SAFETY CATCH + if ( r > 50 ) + { + WaterOk = true; + } + } + return loc; + } + + public static bool IsWaterTile ( int id ) + { + if ( id==0x00A8 || id==0x00A9 || id==0x00AA || id==0x00AB ) + return true; + + return false; + } + + public static bool TestOcean( Map map, int x, int y, int distance ) + { + int results = 0; + + LandTile seaTile1 = map.Tiles.GetLandTile( x-distance, y-distance ); + LandTile seaTile2 = map.Tiles.GetLandTile( x, y-distance ); + LandTile seaTile3 = map.Tiles.GetLandTile( x+distance, y-distance ); + LandTile seaTile4 = map.Tiles.GetLandTile( x-distance, y ); + LandTile seaTile5 = map.Tiles.GetLandTile( x+distance, y ); + LandTile seaTile6 = map.Tiles.GetLandTile( x-distance, y+distance ); + LandTile seaTile7 = map.Tiles.GetLandTile( x, y+distance ); + LandTile seaTile8 = map.Tiles.GetLandTile( x+distance, y+distance ); + + if ( !IsWaterTile( seaTile1.ID ) ){ results ++; } + if ( !IsWaterTile( seaTile2.ID ) ){ results ++; } + if ( !IsWaterTile( seaTile3.ID ) ){ results ++; } + if ( !IsWaterTile( seaTile4.ID ) ){ results ++; } + if ( !IsWaterTile( seaTile5.ID ) ){ results ++; } + if ( !IsWaterTile( seaTile6.ID ) ){ results ++; } + if ( !IsWaterTile( seaTile7.ID ) ){ results ++; } + if ( !IsWaterTile( seaTile8.ID ) ){ results ++; } + + if ( results > 0 ) + return false; + + return true; + } + + public static Point3D GetOceanSpot() + { + bool IsWater = false; + Point3D loc = new Point3D(0, 0, 0); + Point3D failover = new Point3D(100, 100, -5); + + Map map = Map.Britannia; + int tx = 0; + int ty = 0; + int tz = 0; + bool run = true; + int r = 0; + + while ( run ) + { + tx = Utility.RandomMinMax( 26, 7142 ); + ty = Utility.RandomMinMax( 26, 4070 ); + tz = map.GetAverageZ(tx, ty); + + LandTile t = map.Tiles.GetLandTile(tx, ty); + + if ( IsWaterTile( t.ID ) && TestOcean( map, tx, ty, 10 ) ) + IsWater = true; + + Point3D locale = new Point3D(tx, ty, tz); + Region reg = Region.Find( locale, map ); + + if ( tz != -5 ) + IsWater = false; + + if ( IsWater && reg == map.DefaultRegion ) + { + loc = locale; + run = false; + } + + r++; // SAFETY CATCH + if ( r > 5000 && run ) + { + loc = failover; + run = false; + } + } + return loc; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/BuildingRegion.cs b/Scripts/Regions/BuildingRegion.cs new file mode 100644 index 0000000..e012294 --- /dev/null +++ b/Scripts/Regions/BuildingRegion.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class BuildingRegion : TownRegion + { + public BuildingRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override bool NoMounts( Mobile from, Point3D p ) + { + return true; + } + } +} diff --git a/Scripts/Regions/CaveRegion.cs b/Scripts/Regions/CaveRegion.cs new file mode 100644 index 0000000..ced7603 --- /dev/null +++ b/Scripts/Regions/CaveRegion.cs @@ -0,0 +1,30 @@ +using System; +using System.Xml; +using Server; +using Server.Mobiles; +using Server.Gumps; + +namespace Server.Regions +{ + public class CaveRegion : BaseRegion + { + public CaveRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override bool NoMounts( Mobile from, Point3D p ) + { + return true; + } + + public override void AlterLightLevel( Mobile m, ref int global, ref int personal ) + { + global = LightCycle.CaveLevel; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/DangerRegion.cs b/Scripts/Regions/DangerRegion.cs new file mode 100644 index 0000000..e375e44 --- /dev/null +++ b/Scripts/Regions/DangerRegion.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class DangerRegion : MountlessRegion + { + public DangerRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + } +} diff --git a/Scripts/Regions/DungeonRegion.cs b/Scripts/Regions/DungeonRegion.cs new file mode 100644 index 0000000..3f52926 --- /dev/null +++ b/Scripts/Regions/DungeonRegion.cs @@ -0,0 +1,81 @@ +using System; +using System.Xml; +using Server; +using Server.Mobiles; +using Server.Gumps; +using Server.Network; + +namespace Server.Regions +{ + public class DungeonRegion : BaseRegion + { + public DungeonRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override bool NoMounts( Mobile from, Point3D p ) + { + return true; + } + + public override void AlterLightLevel( Mobile m, ref int global, ref int personal ) + { + global = LightCycle.DungeonLevel; + } + + public override bool CanUseStuckMenu( Mobile m ) + { + return false; + } + + public override void OnEnter( Mobile m ) + { + base.OnEnter( m ); + if ( m is PlayerMobile ) + m.SendMessage( "You have entered " + this.Name + "." ); + } + + public override void OnExit(Mobile m) + { + base.OnExit( m ); + if ( m is PlayerMobile ) + { + if ( !PlayersLeftInRegion( m, this ) ) + { + foreach ( Mobile creature in World.Mobiles.Values ) + if ( creature.Region == this && creature is BaseCreature ) + { + BaseCreature dweller = (BaseCreature)creature; + Point3D loc = dweller.Home; + if ( loc.X > 0 && dweller.RangeHome < 10 && dweller.SummonMaster == null && dweller.ControlMaster == null ) + { + dweller.Location = dweller.Home; + } + } + } + } + } + + public static bool PlayersLeftInRegion( Mobile from, Region region ) + { + bool occupied = false; + + foreach ( NetState state in NetState.Instances ) + { + Mobile m = state.Mobile; + + if ( m != null && m != from && m.Region == region ) + { + occupied = true; + } + } + + return occupied; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/GardenRegion.cs b/Scripts/Regions/GardenRegion.cs new file mode 100644 index 0000000..9a22944 --- /dev/null +++ b/Scripts/Regions/GardenRegion.cs @@ -0,0 +1,20 @@ +using System; +using System.Xml; +using Server; +using Server.Mobiles; +using Server.Gumps; + +namespace Server.Regions +{ + public class GardenRegion : BaseRegion + { + public GardenRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/GateRegion.cs b/Scripts/Regions/GateRegion.cs new file mode 100644 index 0000000..7bf3698 --- /dev/null +++ b/Scripts/Regions/GateRegion.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class GateRegion : TownRegion + { + public GateRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override bool AllowHarmful( Mobile from, Mobile target ) + { + return false; + } + } +} diff --git a/Scripts/Regions/GraveRegion.cs b/Scripts/Regions/GraveRegion.cs new file mode 100644 index 0000000..55087ef --- /dev/null +++ b/Scripts/Regions/GraveRegion.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class GraveRegion : MountlessRegion + { + public GraveRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + } +} diff --git a/Scripts/Regions/HouseRegion.cs b/Scripts/Regions/HouseRegion.cs new file mode 100644 index 0000000..05510dc --- /dev/null +++ b/Scripts/Regions/HouseRegion.cs @@ -0,0 +1,402 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Items; +using Server.Multis; +using Server.Spells; +using Server.Spells.Sixth; +using Server.Guilds; +using Server.Gumps; + +namespace Server.Regions +{ + public class HouseRegion : BaseRegion + { + public static readonly int HousePriority = Region.DefaultPriority + 1; + + private BaseHouse m_House; + + public static void Initialize() + { + EventSink.Login += new LoginEventHandler( OnLogin ); + } + + public override bool NoMounts( Mobile from, Point3D p ) + { + return true; + } + + public static void OnLogin( LoginEventArgs e ) + { + BaseHouse house = BaseHouse.FindHouseAt( e.Mobile ); + + if ( house != null && !house.Public && !house.IsFriend( e.Mobile ) ) + e.Mobile.Location = house.BanLocation; + } + + public HouseRegion( BaseHouse house ) : base( null, house.Map, HousePriority, GetArea( house ) ) + { + m_House = house; + + Point3D ban = house.RelativeBanLocation; + + this.GoLocation = new Point3D( house.X + ban.X, house.Y + ban.Y, house.Z + ban.Z ); + } + + private static Rectangle3D[] GetArea( BaseHouse house ) + { + int x = house.X; + int y = house.Y; + int z = house.Z; + + Rectangle2D[] houseArea = house.Area; + Rectangle3D[] area = new Rectangle3D[houseArea.Length]; + + for ( int i = 0; i < area.Length; i++ ) + { + Rectangle2D rect = houseArea[i]; + area[i] = Region.ConvertTo3D( new Rectangle2D( x + rect.Start.X, y + rect.Start.Y, rect.Width, rect.Height ) ); + } + + return area; + } + + public override bool SendInaccessibleMessage( Item item, Mobile from ) + { + if ( item is Container ) + item.SendLocalizedMessageTo( from, 501647 ); // That is secure. + else + item.SendLocalizedMessageTo( from, 1061637 ); // You are not allowed to access this. + + return true; + } + + public override bool CheckAccessibility( Item item, Mobile from ) + { + return m_House.CheckAccessibility( item, from ); + } + + private bool m_Recursion; + + // Use OnLocationChanged instead of OnEnter because it can be that we enter a house region even though we're not actually inside the house + public override void OnLocationChanged( Mobile m, Point3D oldLocation ) + { + if ( m_Recursion ) + return; + + base.OnLocationChanged( m, oldLocation ); + + m_Recursion = true; + + if ( m is BaseCreature && ((BaseCreature)m).NoHouseRestrictions ) + { + } + else if ( m is BaseCreature && ((BaseCreature)m).IsHouseSummonable && !(BaseCreature.Summoning || m_House.IsInside( oldLocation, 16 )) ) + { + } + else if ( (m_House.Public || !m_House.IsAosRules) && m_House.IsBanned( m ) && m_House.IsInside( m ) ) + { + m.Location = m_House.BanLocation; + m.SendLocalizedMessage( 501284 ); // You may not enter. + } + else if ( m_House.IsAosRules && !m_House.Public && !m_House.HasAccess( m ) && m_House.IsInside( m ) ) + { + m.Location = m_House.BanLocation; + m.SendLocalizedMessage( 501284 ); // You may not enter. + } + else if ( m_House.IsCombatRestricted( m ) && m_House.IsInside( m ) && !m_House.IsInside( oldLocation, 16 ) ) + { + m.Location = m_House.BanLocation; + m.SendLocalizedMessage( 1061637 ); // You are not allowed to access this. + } + else if ( m_House is HouseFoundation ) + { + HouseFoundation foundation = (HouseFoundation)m_House; + + if ( foundation.Customizer != null && foundation.Customizer != m && m_House.IsInside( m ) ) + m.Location = m_House.BanLocation; + } + + if ( m_House.InternalizedVendors.Count > 0 && m_House.IsInside( m ) && !m_House.IsInside( oldLocation, 16 ) && m_House.IsOwner( m ) && m.Alive && !m.HasGump( typeof( NoticeGump ) ) ) + { + /* This house has been customized recently, and vendors that work out of this + * house have been temporarily relocated. You must now put your vendors back to work. + * To do this, walk to a location inside the house where you wish to station + * your vendor, then activate the context-sensitive menu on your avatar and + * select "Get Vendor". + */ + m.SendGump( new NoticeGump( 1060635, 30720, 1061826, 32512, 320, 180, null, null ) ); + } + + m_Recursion = false; + } + + public override bool OnMoveInto( Mobile from, Direction d, Point3D newLocation, Point3D oldLocation ) + { + if ( !base.OnMoveInto( from, d, newLocation, oldLocation ) ) + return false; + + if ( from is BaseCreature && ((BaseCreature)from).NoHouseRestrictions ) + { + } + else if ( from is BaseCreature && !((BaseCreature)from).Controlled ) // Untamed creatures cannot enter public houses + { + return false; + } + else if ( from is BaseCreature && ((BaseCreature)from).IsHouseSummonable && !(BaseCreature.Summoning || m_House.IsInside( oldLocation, 16 )) ) + { + return false; + } + else if ( from is BaseCreature && !((BaseCreature)from).Controlled && m_House.IsAosRules && !m_House.Public) + { + return false; + } + else if ( (m_House.Public || !m_House.IsAosRules) && m_House.IsBanned( from ) && m_House.IsInside( newLocation, 16 ) ) + { + from.Location = m_House.BanLocation; + from.SendLocalizedMessage( 501284 ); // You may not enter. + return false; + } + else if ( m_House.IsAosRules && !m_House.Public && !m_House.HasAccess( from ) && m_House.IsInside( newLocation, 16 ) ) + { + from.SendLocalizedMessage( 501284 ); // You may not enter. + return false; + } + else if ( m_House.IsCombatRestricted( from ) && !m_House.IsInside( oldLocation, 16 ) && m_House.IsInside( newLocation, 16 ) ) + { + from.SendLocalizedMessage( 1061637 ); // You are not allowed to access this. + return false; + } + else if ( m_House is HouseFoundation ) + { + HouseFoundation foundation = (HouseFoundation)m_House; + + if ( foundation.Customizer != null && foundation.Customizer != from && m_House.IsInside( newLocation, 16 ) ) + return false; + } + + if ( m_House.InternalizedVendors.Count > 0 && m_House.IsInside( from ) && !m_House.IsInside( oldLocation, 16 ) && m_House.IsOwner( from ) && from.Alive && !from.HasGump( typeof( NoticeGump ) ) ) + { + /* This house has been customized recently, and vendors that work out of this + * house have been temporarily relocated. You must now put your vendors back to work. + * To do this, walk to a location inside the house where you wish to station + * your vendor, then activate the context-sensitive menu on your avatar and + * select "Get Vendor". + */ + from.SendGump( new NoticeGump( 1060635, 30720, 1061826, 32512, 320, 180, null, null ) ); + } + + return true; + } + + public override bool OnDecay( Item item ) + { + if ( (m_House.IsLockedDown( item ) || m_House.IsSecure( item )) && m_House.IsInside( item ) ) + return false; + else + return base.OnDecay(item ); + } + + public static TimeSpan CombatHeatDelay = TimeSpan.FromSeconds( 30.0 ); + + public override TimeSpan GetLogoutDelay( Mobile m ) + { + if ( m_House.IsFriend( m ) && m_House.IsInside( m ) ) + { + for ( int i = 0; i < m.Aggressed.Count; ++i ) + { + AggressorInfo info = m.Aggressed[i]; + + if ( info.Defender.Player && (DateTime.Now - info.LastCombatTime) < CombatHeatDelay ) + return base.GetLogoutDelay( m ); + } + + return TimeSpan.Zero; + } + + return base.GetLogoutDelay( m ); + } + + public override void OnSpeech( SpeechEventArgs e ) + { + base.OnSpeech( e ); + + Mobile from = e.Mobile; + Item sign = m_House.Sign; + + bool isOwner = m_House.IsOwner( from ); + bool isCoOwner = isOwner || m_House.IsCoOwner( from ); + bool isFriend = isCoOwner || m_House.IsFriend( from ); + + if ( !isFriend ) + return; + + if ( !from.Alive ) + return; + + if ( !m_House.IsInside( from ) || !m_House.IsActive ) + return; + + else if ( e.HasKeyword( 0x33 ) ) // remove thyself + { + if ( isFriend ) + { + from.SendLocalizedMessage( 501326 ); // Target the individual to eject from this house. + from.Target = new HouseKickTarget( m_House ); + } + else + { + from.SendLocalizedMessage( 502094 ); // You must be in your house to do this. + } + } + else if ( e.HasKeyword( 0x34 ) ) // I ban thee + { + if ( !isFriend ) + { + from.SendLocalizedMessage( 502094 ); // You must be in your house to do this. + } + else if ( !m_House.Public && m_House.IsAosRules ) + { + from.SendLocalizedMessage( 1062521 ); // You cannot ban someone from a private house. Revoke their access instead. + } + else + { + from.SendLocalizedMessage( 501325 ); // Target the individual to ban from this house. + from.Target = new HouseBanTarget( true, m_House ); + } + } + else if ( e.HasKeyword( 0x23 ) ) // I wish to lock this down + { + if ( isCoOwner ) + { + from.SendLocalizedMessage( 502097 ); // Lock what down? + from.Target = new LockdownTarget( false, m_House ); + } + else if ( isFriend ) + { + from.SendLocalizedMessage( 1010587 ); // You are not a co-owner of this house. + } + else + { + from.SendLocalizedMessage( 502094 ); // You must be in your house to do this. + } + } + else if ( e.HasKeyword( 0x24 ) ) // I wish to release this + { + if ( isCoOwner ) + { + from.SendLocalizedMessage( 502100 ); // Choose the item you wish to release + from.Target = new LockdownTarget( true, m_House ); + } + else if ( isFriend ) + { + from.SendLocalizedMessage( 1010587 ); // You are not a co-owner of this house. + } + else + { + from.SendLocalizedMessage( 502094 ); // You must be in your house to do this. + } + } + else if ( e.HasKeyword( 0x25 ) ) // I wish to secure this + { + if ( isOwner ) + { + from.SendLocalizedMessage( 502103 ); // Choose the item you wish to secure + from.Target = new SecureTarget( false, m_House ); + } + else + { + from.SendLocalizedMessage( 502094 ); // You must be in your house to do this. + } + } + else if ( e.HasKeyword( 0x26 ) ) // I wish to unsecure this + { + if ( isOwner ) + { + from.SendLocalizedMessage( 502106 ); // Choose the item you wish to unsecure + from.Target = new SecureTarget( true, m_House ); + } + else + { + from.SendLocalizedMessage( 502094 ); // You must be in your house to do this. + } + } + else if ( e.HasKeyword( 0x27 ) ) // I wish to place a strongbox + { + if ( isOwner ) + { + from.SendLocalizedMessage( 502109 ); // Owners do not get a strongbox of their own. + } + else if ( isCoOwner ) + { + m_House.AddStrongBox( from ); + } + else if ( isFriend ) + { + from.SendLocalizedMessage( 1010587 ); // You are not a co-owner of this house. + } + else + { + from.SendLocalizedMessage( 502094 ); // You must be in your house to do this. + } + } + else if ( e.HasKeyword( 0x28 ) ) // trash barrel + { + if ( isCoOwner ) + { + m_House.AddTrashBarrel( from ); + } + else if ( isFriend ) + { + from.SendLocalizedMessage( 1010587 ); // You are not a co-owner of this house. + } + else + { + from.SendLocalizedMessage( 502094 ); // You must be in your house to do this. + } + } + } + + public override bool OnDoubleClick( Mobile from, object o ) + { + if ( o is Container ) + { + Container c = (Container)o; + + SecureAccessResult res = m_House.CheckSecureAccess( from, c ); + + switch ( res ) + { + case SecureAccessResult.Insecure: break; + case SecureAccessResult.Accessible: return true; + case SecureAccessResult.Inaccessible: c.SendLocalizedMessageTo( from, 1010563 ); return false; + } + } + + return base.OnDoubleClick( from, o ); + } + + public override bool OnSingleClick( Mobile from, object o ) + { + if ( o is Item ) + { + Item item = (Item)o; + + if ( m_House.IsLockedDown( item ) ) + item.LabelTo( from, 501643 ); // [locked down] + else if ( m_House.IsSecure( item ) ) + item.LabelTo( from, 501644 ); // [locked down & secure] + } + + return base.OnSingleClick( from, o ); + } + + public BaseHouse House + { + get + { + return m_House; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/InnRegion.cs b/Scripts/Regions/InnRegion.cs new file mode 100644 index 0000000..cebcf52 --- /dev/null +++ b/Scripts/Regions/InnRegion.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class InnRegion : TownRegion + { + public InnRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override bool NoMounts( Mobile from, Point3D p ) + { + return true; + } + + public override bool AllowHarmful( Mobile from, Mobile target ) + { + return false; + } + + public override TimeSpan GetLogoutDelay( Mobile m ) + { + return TimeSpan.Zero; + } + } +} diff --git a/Scripts/Regions/LandMap.cs b/Scripts/Regions/LandMap.cs new file mode 100644 index 0000000..ea80595 --- /dev/null +++ b/Scripts/Regions/LandMap.cs @@ -0,0 +1,304 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; +using Server.Commands; + +namespace Server.Misc +{ + public class MapFunctions + { + public static void Initialize() + { + CommandSystem.Register( "Map", AccessLevel.Player, new CommandEventHandler( EventSink_OnCommand ) ); + } + + [Usage( "Map" )] + [Description( "Brings up the World Map." )] + public static void EventSink_OnCommand( CommandEventArgs e ) + { + (e.Mobile).CloseGump( typeof( MapGump ) ); + (e.Mobile).SendGump( new MapGump( e.Mobile ) ); + } + + public static int NumLocations() + { + return 83; + } + + public static bool HasLocation( PlayerMobile pm, int location ) + { + string s = pm.MapMarkers; + int i = (location-1) * 2; + char c = s[i]; + if ( c == '1' ) + return true; + + return false; + } + + public static string SetLocations( PlayerMobile pm ) + { + string locations = pm.MapMarkers; + + if ( locations == null || locations.Length < ( NumLocations() * 2 ) ) + { + int cycle = NumLocations(); + + while ( cycle > 0 ) + { + cycle--; + locations = locations + "1#"; // CHANGE THIS AFTER TESTING ------------------------------------------------------------------ + } + + pm.MapMarkers = locations; + } + + return locations; + } + + public static void AddLocations( Mobile m, int location ) + { + if ( m != null && m is PlayerMobile ) + { + string locations = ((PlayerMobile)m).MapMarkers; + + locations = SetLocations( (PlayerMobile)m ); + + if ( locations.Length > 0 ) + { + string[] discoveries = locations.Split('#'); + string entry = ""; + int num = 1; + + foreach ( string keyset in discoveries ) + { + string sets = "1"; + if ( keyset != "1" ){ sets = "0"; } + if ( location == num ){ entry = entry + "1#"; } + else { entry = entry + sets + "#"; } + num++; + } + + while ( num < NumLocations()+1 ) + { + entry = entry + "0#"; + num++; + } + + ((PlayerMobile)m).MapMarkers = entry; + } + } + } + + public static int Pin( int x, int n ) + { + if ( x < 1 ) + n++; + else + n=0; + + return n; + } + + public static string LocationInfo( int loc, int section ) + { + string name = ""; + int x = 0; + int y = 0; + string c = ""; + string i = "true"; + int d = 0; + int nxt = 1; + int hue = 0; + int s = 0; + + if ( loc == nxt ){ name = "Britain"; x=2169; y=1579; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Yew"; x=1534; y=863; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Prison"; x=1003; y=969; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Minoc"; x=2879; y=486; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Skara Brae"; d = 2; x=738; y=1871; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Jhelom"; x=1065; y=3157; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Trinsic"; x=2029; y=2630; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Paws"; x=1983; y=2163; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Buccaneer's Den"; x=2644; y=2213; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Magincia"; x=3429; y=2427; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Moonglow"; x=4153; y=1982; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Lyceum"; d = 1; x=3865; y=1627; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Zoo"; x=4048; y=1681; } nxt = Pin( x, nxt ); + + if ( x < 1 ){ hue++; } + + if ( loc == nxt ){ name = "Deceit"; d = 2; x=4194; y=1308; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Despise"; x=1649; y=1223; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Destard"; x=1536; y=2636; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Wrong"; x=2403; y=625; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Covetous"; x=2888; y=658; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Shame"; x=1383; y=1741; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Hythloth"; x=4240; y=3397; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Stygian Abyss"; d = 1; x=4209; y=2962; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Terathan Keep"; x=5298; y=1132; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Ancient Pyramid"; x=5494; y=678; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Wailing Halls"; x=1548; y=1081; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Exodus Ruins"; x=669; y=3480; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Silent Tomb"; d = 1; x=2048; y=1935; } nxt = Pin( x, nxt ); + + if ( x < 1 ){ hue++; s=0; } + + if ( loc == nxt ){ name = "Deep Forest"; x=1081; y=1110; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Lock Lake"; x=2453; y=1301; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Lost Hope Bay"; x=2569; y=720; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "High Steppes"; x=2297; y=885; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Bog of Desolation"; x=1925; y=2381; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Brittany Bay"; x=2017; y=1721; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Drylands"; x=3685; y=1017; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Bloody Plains"; x=3033; y=825; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Isle of the Avatar"; x=3951; y=3545; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Terfin"; x=3419; y=3189; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Abandoned Isles"; x=1325; y=3440; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Deadman Isles"; x=2437; y=3273; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Valorian Isles"; x=997; y=2641; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Spiritwood"; x=1061; y=2001; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Isle of Fire"; x=537; y=3273; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Verity Isle"; x=4053; y=1801; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Dagger Isle"; x=4141; y=960; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Janus Isle"; x=4268; y=1245; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Spektran"; x=3193; y=3001; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Cape of Heroes"; x=1770; y=3161; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Serpent Isle"; x=5277; y=858; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Restful Dunes"; x=6084; y=2237; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Daemon Islands"; x=4888; y=2105; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Isles of the Dead"; x=2185; y=1928; } nxt = Pin( x, nxt ); + + if ( x < 1 ){ hue++; s=0; } + + if ( loc == nxt ){ name = "Humility"; d = 2; x=4127; y=3000; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Honesty"; x=4137; y=1091; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Sacrifice"; x=3743; y=927; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Justice"; d = 1; x=1653; y=548; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Compassion"; x=2488; y=1482; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Spirituality"; d = 1; x=1003; y=1852; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Valor"; d = 1; x=1244; y=3411; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Honor"; x=1876; y=2824; } nxt = Pin( x, nxt ); + + if ( x < 1 ){ hue++; s=1; } + + if ( loc == nxt ){ name = "Brigands"; x=1165; y=1177; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Hobgoblins"; x=1231; y=1059; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Graveyard"; x=1548; y=1016; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Graveyard"; x=2655; y=524; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Savages"; d = 1; x=5648; y=626; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Savages"; x=5774; y=1301; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Cemetery"; x=3432; y=1041; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Brigands"; x=3074; y=1120; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Orcs"; x=2209; y=819; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Graveyard"; x=547; y=1758; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Ratmen"; x=1291; y=2253; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Brigands"; x=4245; y=1721; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Cemetery"; x=4012; y=1879; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Hobgoblins"; x=5747; y=1869; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Savages"; x=6386; y=1744; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Graveyard"; d = 1; x=3517; y=2363; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Brigands"; x=2078; y=2904; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Cemetery"; d = 2; x=1888; y=2658; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Ratmen"; x=1602; y=2790; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Graveyard"; x=989; y=3025; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Orcs"; x=2349; y=3425; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Cemetery"; x=2203; y=2104; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Spider Cave"; x=739; y=1206; } nxt = Pin( x, nxt ); + + if ( x < 1 ){ hue++; s=0; } + + if ( loc == nxt ){ name = "Goblin Keep"; x=1951; y=1274; } nxt = Pin( x, nxt ); + if ( loc == nxt ){ name = "Plunderer's Port"; x=6589; y=2370; } nxt = Pin( x, nxt ); + + if ( hue == 0 ){ c = "#FCFF00"; } // YELLOW Towns + else if ( hue == 1 ){ c = "#FF0000"; } // RED Dungeons + else if ( hue == 2 ){ c = "#00FF0C"; i = "false"; } // GREEN Lands + else if ( hue == 3 ){ c = "#00A8FF"; } // BLUE Shrines + else if ( hue == 4 ){ c = "#FFA200"; i = "false"; } // ORANGE Places + else if ( hue == 5 ){ c = "#D200FF"; } // PURPLE Danger + else if ( hue == 6 ){ c = "#00FFFF"; } // AQUA ??????? + + string xx = ((int)(x/4)).ToString(); + string yy = ((int)(y/4)).ToString(); + + if ( section == 1 ) + return xx; + else if ( section == 2 ) + return yy; + else if ( section == 3 ) + return c; + else if ( section == 4 ) + return i; + else if ( section == 5 ) + return d.ToString(); + else if ( section == 6 ) + return s.ToString(); + + return name; + } + } + + public class MapGump : Gump + { + public MapGump( Mobile m ) : base( 0, 0 ) + { + MapFunctions.SetLocations( (PlayerMobile)m ); + + int cycle = MapFunctions.NumLocations(); + int spot = 0; + int xx = 30; + int yy = 5; + int x = 0; + int y = 0; + + this.Closable=true; + this.Disposable=true; + this.Dragable=true; + this.Resizable=false; + + AddPage(0); + AddImage(xx, yy, 12105); + AddImage(0, 0, 12104); + + bool icon = true; + int d = 0; + int s = 0; + string s1 = ""; + string s2 = ""; + + while ( cycle > 0 ) + { + cycle--; + spot++; + + if ( MapFunctions.HasLocation( (PlayerMobile)m, spot ) ) + { + x = xx-7 + int.Parse( MapFunctions.LocationInfo( spot, 1 ) ); + y = yy-7 + int.Parse( MapFunctions.LocationInfo( spot, 2 ) ); + icon = bool.Parse( MapFunctions.LocationInfo( spot, 4 ) ); + d = int.Parse( MapFunctions.LocationInfo( spot, 5 ) ); + s = int.Parse( MapFunctions.LocationInfo( spot, 6 ) ); + + if ( x > 0 ) + { + s1 = ""; + s2 = ""; + if ( s == 1 ) + { + s1 = ""; + s2 = ""; + } + + if ( icon ){ AddImage(x, y, 12106); x=x+15; } + if ( d == 1 ){ x = x - 16; y = y - 18; } + else if ( d == 2 ){ x = x - 15; y = y + 12; } + AddHtml( x, y, 200, 48, @"" + s1 + MapFunctions.LocationInfo( spot, 0 ) + s2 + "", (bool)false, (bool)false); + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/MountlessRegion.cs b/Scripts/Regions/MountlessRegion.cs new file mode 100644 index 0000000..75f9cce --- /dev/null +++ b/Scripts/Regions/MountlessRegion.cs @@ -0,0 +1,25 @@ +using System; +using System.Xml; +using Server; +using Server.Mobiles; +using Server.Gumps; + +namespace Server.Regions +{ + public class MountlessRegion : BaseRegion + { + public MountlessRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override bool NoMounts( Mobile from, Point3D p ) + { + return true; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/NoHousingRegion.cs b/Scripts/Regions/NoHousingRegion.cs new file mode 100644 index 0000000..5589149 --- /dev/null +++ b/Scripts/Regions/NoHousingRegion.cs @@ -0,0 +1,26 @@ +using System; +using System.Xml; +using Server; + +namespace Server.Regions +{ + public class NoHousingRegion : BaseRegion + { + /* - False: this uses 'stupid OSI' house placement checking: part of the house may be placed here provided that the center is not in the region + * - True: this uses 'smart RunUO' house placement checking: no part of the house may be in the region + */ + private bool m_SmartChecking; + + public bool SmartChecking{ get{ return m_SmartChecking; } } + + public NoHousingRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + ReadBoolean( xml["smartNoHousing"], "active", ref m_SmartChecking, false ); + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return m_SmartChecking; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/OutskirtRegion.cs b/Scripts/Regions/OutskirtRegion.cs new file mode 100644 index 0000000..a0709ed --- /dev/null +++ b/Scripts/Regions/OutskirtRegion.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class OutskirtRegion : BaseRegion + { + public OutskirtRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return true; + } + } +} diff --git a/Scripts/Regions/PirateRegion.cs b/Scripts/Regions/PirateRegion.cs new file mode 100644 index 0000000..3a975d0 --- /dev/null +++ b/Scripts/Regions/PirateRegion.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class PirateRegion : MountlessRegion + { + public PirateRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + } +} diff --git a/Scripts/Regions/RegionMusic.cs b/Scripts/Regions/RegionMusic.cs new file mode 100644 index 0000000..909e417 --- /dev/null +++ b/Scripts/Regions/RegionMusic.cs @@ -0,0 +1,141 @@ +using System; +using Server; +using Server.Mobiles; +using Server.Network; +using Server.Regions; +using Server.Items; + +namespace Server.Misc +{ + class RegionMusic + { + public static bool isLand( Region region ) + { + if ( ( region.IsDefault || region.Name == null || region.Name == "" ) ) + return true; + + return false; + } + + public static void MusicRegion( Mobile from, Map map, Point3D loc, Point3D old ) + { + Region regOld = Region.Find( old, map ); + Region regNew = Region.Find( loc, map ); + bool changeMusic = true; + + if ( regOld != regNew ) + { + if ( ( regNew is BuildingRegion && regOld is InnRegion ) || + ( regNew is InnRegion && regOld is BuildingRegion ) ) + { changeMusic = true; } + else if ( + regNew is TreasureRegion || regOld is TreasureRegion || + regNew is UnderworldEntrance || regOld is UnderworldEntrance || + regNew is GardenRegion || regOld is GardenRegion || + regNew is BuildingRegion || regOld is BuildingRegion || + regNew is GateRegion || regOld is GateRegion || + regNew is ShrineRegion || regOld is ShrineRegion || + regNew is HouseRegion || regOld is HouseRegion ) + { changeMusic = false; } + else if ( + ( regNew is OutskirtRegion && regOld is TownRegion ) || + ( regNew is TownRegion && regOld is OutskirtRegion ) + ) + { changeMusic = false; } + + if ( changeMusic ) + { + MusicName toPlay = LandMusic[Utility.Random(LandMusic.Length)]; + + if ( regNew is CaveRegion ) + toPlay = CaveMusic[Utility.Random(CaveMusic.Length)]; + else if ( regNew is DungeonRegion ) + toPlay = DungeonMusic[Utility.Random(DungeonMusic.Length)]; + else if ( regNew is GraveRegion ) + toPlay = DungeonMusic[Utility.Random(DungeonMusic.Length)]; + else if ( regNew is DangerRegion ) + toPlay = DungeonMusic[Utility.Random(DungeonMusic.Length)]; + else if ( regNew is PirateRegion ) + toPlay = CaveMusic[Utility.Random(CaveMusic.Length)]; + else if ( regNew is InnRegion ) + toPlay = TavernMusic[Utility.Random(TavernMusic.Length)]; + else if ( regNew is BuildingRegion ) + toPlay = VillageMusic[Utility.Random(VillageMusic.Length)]; + else if ( regNew is TownRegion ) + toPlay = VillageMusic[Utility.Random(VillageMusic.Length)]; + else if ( regNew is OutskirtRegion ) + toPlay = VillageMusic[Utility.Random(VillageMusic.Length)]; + + from.Send(PlayMusic.GetInstance(toPlay)); + } + } + } + + public static MusicName[] TavernMusic = new MusicName[] + { + MusicName.Tavern01, + MusicName.Tavern02, + MusicName.Tavern03, + MusicName.Tavern04, + MusicName.Tavern05 + }; + + public static MusicName[] VillageMusic = new MusicName[] + { + MusicName.Britain1, + MusicName.Bucsden, + MusicName.Jhelom, + MusicName.Magincia, + MusicName.Minoc, + MusicName.Ocllo, + MusicName.Serpents, + MusicName.Skarabra, + MusicName.Trinsic, + MusicName.Vesper, + MusicName.Wind, + MusicName.Yew, + MusicName.InTown01, + MusicName.Nujelm, + MusicName.Cove, + MusicName.Moonglow + }; + + public static MusicName[] CaveMusic = new MusicName[] + { + MusicName.Create1, + MusicName.OldUlt02, + MusicName.OldUlt03, + MusicName.OldUlt05, + MusicName.OldUlt06, + MusicName.Samlethe, + MusicName.Cave01, + MusicName.Jungle_a, + MusicName.Swamp_a, + MusicName.Jungle_a + }; + + public static MusicName[] DungeonMusic = new MusicName[] + { + MusicName.OldUlt03, + MusicName.OldUlt05, + MusicName.Samlethe, + MusicName.Dungeon9, + MusicName.Dungeon2, + MusicName.Dungeon3, + MusicName.Approach + }; + + public static MusicName[] LandMusic = new MusicName[] + { + MusicName.Create1, + MusicName.OldUlt02, + MusicName.OldUlt03, + MusicName.Linelle, + MusicName.Forest_a, + MusicName.Mountn_a, + MusicName.Plains_a, + MusicName.Victory, + MusicName.Travel + }; + } +} \ No newline at end of file diff --git a/Scripts/Regions/ShrineRegion.cs b/Scripts/Regions/ShrineRegion.cs new file mode 100644 index 0000000..a55fbef --- /dev/null +++ b/Scripts/Regions/ShrineRegion.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class ShrineRegion : BaseRegion + { + public ShrineRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override bool AllowHarmful( Mobile from, Mobile target ) + { + return false; + } + } +} diff --git a/Scripts/Regions/ShrinesRegion.cs b/Scripts/Regions/ShrinesRegion.cs new file mode 100644 index 0000000..8de79d2 --- /dev/null +++ b/Scripts/Regions/ShrinesRegion.cs @@ -0,0 +1,20 @@ +using System; +using System.Xml; +using Server; +using Server.Mobiles; +using Server.Gumps; + +namespace Server.Regions +{ + public class ShrinesRegion : CaveRegion + { + public ShrinesRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool AllowHarmful( Mobile from, Mobile target ) + { + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/Spawning/SpawnDefinition.cs b/Scripts/Regions/Spawning/SpawnDefinition.cs new file mode 100644 index 0000000..9c0ba39 --- /dev/null +++ b/Scripts/Regions/Spawning/SpawnDefinition.cs @@ -0,0 +1,373 @@ +using System; +using System.Collections; +using System.IO; +using System.Xml; +using Server; +using Server.Mobiles; +using Server.Items; +using System.Collections.Generic; + +namespace Server.Regions +{ + public abstract class SpawnDefinition + { + protected SpawnDefinition() + { + } + + public abstract ISpawnable Spawn( SpawnEntry entry ); + + public abstract bool CanSpawn( params Type[] types ); + + public static SpawnDefinition GetSpawnDefinition( XmlElement xml ) + { + switch ( xml.Name ) + { + case "object": + { + Type type = null; + if ( !Region.ReadType( xml, "type", ref type ) ) + return null; + + if ( typeof( Mobile ).IsAssignableFrom( type ) ) + { + return SpawnMobile.Get( type ); + } + else if ( typeof( Item ).IsAssignableFrom( type ) ) + { + return SpawnItem.Get( type ); + } + else + { + Console.WriteLine( "Invalid type '{0}' in a SpawnDefinition", type.FullName ); + return null; + } + } + case "group": + { + string group = null; + if ( !Region.ReadString( xml, "name", ref group ) ) + return null; + + SpawnDefinition def = (SpawnDefinition) SpawnGroup.Table[group]; + + if ( def == null ) + { + Console.WriteLine( "Could not find group '{0}' in a SpawnDefinition", group ); + return null; + } + else + { + return def; + } + } + default: + { + return null; + } + } + } + } + + public abstract class SpawnType : SpawnDefinition + { + private Type m_Type; + private bool m_Init; + + public Type Type{ get{ return m_Type; } } + + public abstract int Height{ get; } + public abstract bool Land{ get; } + public abstract bool Water{ get; } + + protected SpawnType( Type type ) + { + m_Type = type; + m_Init = false; + } + + protected void EnsureInit() + { + if ( m_Init ) + return; + + Init(); + m_Init = true; + } + + protected virtual void Init() + { + } + + public override ISpawnable Spawn( SpawnEntry entry ) + { + BaseRegion region = entry.Region; + Map map = region.Map; + + Point3D loc = entry.RandomSpawnLocation( this.Height, this.Land, this.Water ); + + if ( loc == Point3D.Zero ) + return null; + + return Construct( entry, loc, map ); + } + + protected abstract ISpawnable Construct( SpawnEntry entry, Point3D loc, Map map ); + + public override bool CanSpawn( params Type[] types ) + { + for ( int i = 0; i < types.Length; i++ ) + { + if ( types[i] == m_Type ) + return true; + } + + return false; + } + } + + public class SpawnMobile : SpawnType + { + private static Hashtable m_Table = new Hashtable(); + + public static SpawnMobile Get( Type type ) + { + SpawnMobile sm = (SpawnMobile) m_Table[type]; + + if ( sm == null ) + { + sm = new SpawnMobile( type ); + m_Table[type] = sm; + } + + return sm; + } + + protected bool m_Land; + protected bool m_Water; + + public override int Height{ get{ return 16; } } + public override bool Land{ get{ EnsureInit(); return m_Land; } } + public override bool Water{ get{ EnsureInit(); return m_Water; } } + + protected SpawnMobile( Type type ) : base( type ) + { + } + + protected override void Init() + { + Mobile mob = (Mobile) Activator.CreateInstance( Type ); + + m_Land = !mob.CantWalk; + m_Water = mob.CanSwim; + + mob.Delete(); + } + + protected override ISpawnable Construct(SpawnEntry entry, Point3D loc, Map map) + { + Mobile mobile = CreateMobile(); + + BaseCreature creature = mobile as BaseCreature; + + if ( creature != null ) + { + creature.Home = entry.HomeLocation; + creature.RangeHome = entry.HomeRange; + } + + if ( entry.Direction != SpawnEntry.InvalidDirection ) + mobile.Direction = entry.Direction; + + mobile.OnBeforeSpawn( loc, map ); + mobile.MoveToWorld( loc, map ); + mobile.OnAfterSpawn(); + + return mobile; + } + + protected virtual Mobile CreateMobile() + { + return (Mobile) Activator.CreateInstance( Type ); + } + } + + public class SpawnItem : SpawnType + { + private static Hashtable m_Table = new Hashtable(); + + public static SpawnItem Get( Type type ) + { + SpawnItem si = (SpawnItem) m_Table[type]; + + if ( si == null ) + { + si = new SpawnItem( type ); + m_Table[type] = si; + } + + return si; + } + + protected int m_Height; + + public override int Height{ get{ EnsureInit(); return m_Height; } } + public override bool Land{ get{ return true; } } + public override bool Water{ get{ return false; } } + + protected SpawnItem( Type type ) : base( type ) + { + } + + protected override void Init() + { + Item item = (Item) Activator.CreateInstance( Type ); + + m_Height = item.ItemData.Height; + + item.Delete(); + } + + protected override ISpawnable Construct( SpawnEntry entry, Point3D loc, Map map ) + { + Item item = CreateItem(); + + item.OnBeforeSpawn( loc, map ); + item.MoveToWorld( loc, map ); + item.OnAfterSpawn(); + + return item; + } + + protected virtual Item CreateItem() + { + return (Item) Activator.CreateInstance( Type ); + } + } + + public class SpawnGroupElement + { + private SpawnDefinition m_SpawnDefinition; + private int m_Weight; + + public SpawnDefinition SpawnDefinition{ get{ return m_SpawnDefinition; } } + public int Weight{ get{ return m_Weight; } } + + public SpawnGroupElement( SpawnDefinition spawnDefinition, int weight ) + { + m_SpawnDefinition = spawnDefinition; + m_Weight = weight; + } + } + + public class SpawnGroup : SpawnDefinition + { + private static Hashtable m_Table = new Hashtable(); + + public static Hashtable Table{ get{ return m_Table; } } + + public static void Register( SpawnGroup group ) + { + if ( m_Table.Contains( group.Name ) ) + Console.WriteLine( "Warning: Double SpawnGroup name '{0}'", group.Name ); + else + m_Table[group.Name] = group; + } + + static SpawnGroup() + { + string path = Path.Combine( Core.BaseDirectory, "Data/Config/SpawnDefinitions.xml" ); + if ( !File.Exists( path ) ) + return; + + try + { + XmlDocument doc = new XmlDocument(); + doc.Load( path ); + + XmlElement root = doc["spawnDefinitions"]; + if ( root == null ) + return; + + foreach ( XmlElement xmlDef in root.SelectNodes( "spawnGroup" ) ) + { + string name = null; + if ( !Region.ReadString( xmlDef, "name", ref name ) ) + continue; + + List list = new List(); + foreach ( XmlNode node in xmlDef.ChildNodes ) + { + XmlElement el = node as XmlElement; + + if ( el != null ) + { + SpawnDefinition def = GetSpawnDefinition( el ); + if ( def == null ) + continue; + + int weight = 1; + Region.ReadInt32( el, "weight", ref weight, false ); + + SpawnGroupElement groupElement = new SpawnGroupElement( def, weight ); + list.Add( groupElement ); + } + } + + SpawnGroupElement[] elements = list.ToArray(); + SpawnGroup group = new SpawnGroup( name, elements ); + Register( group ); + } + } + catch ( Exception ex ) + { + Console.WriteLine( "Could not load SpawnDefinitions.xml: " + ex.Message ); + } + } + + private string m_Name; + private SpawnGroupElement[] m_Elements; + private int m_TotalWeight; + + public string Name{ get{ return m_Name; } } + public SpawnGroupElement[] Elements{ get{ return m_Elements; } } + + public SpawnGroup( string name, SpawnGroupElement[] elements ) + { + m_Name = name; + m_Elements = elements; + + m_TotalWeight = 0; + for ( int i = 0; i < elements.Length; i++ ) + m_TotalWeight += elements[i].Weight; + } + + public override ISpawnable Spawn(SpawnEntry entry) + { + int index = Utility.Random( m_TotalWeight ); + + for ( int i = 0; i < m_Elements.Length; i++ ) + { + SpawnGroupElement element = m_Elements[i]; + + if ( index < element.Weight ) + return element.SpawnDefinition.Spawn( entry ); + + index -= element.Weight; + } + + return null; + } + + public override bool CanSpawn( params Type[] types ) + { + for ( int i = 0; i < m_Elements.Length; i++ ) + { + if ( m_Elements[i].SpawnDefinition.CanSpawn( types ) ) + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/Spawning/SpawnEntry.cs b/Scripts/Regions/Spawning/SpawnEntry.cs new file mode 100644 index 0000000..5d207a7 --- /dev/null +++ b/Scripts/Regions/Spawning/SpawnEntry.cs @@ -0,0 +1,465 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Mobiles; +using Server.Commands; + +namespace Server.Regions +{ + public class SpawnEntry : ISpawner + { + public static readonly TimeSpan DefaultMinSpawnTime = TimeSpan.FromMinutes( 2.0 ); + public static readonly TimeSpan DefaultMaxSpawnTime = TimeSpan.FromMinutes( 5.0 ); + + private static Hashtable m_Table = new Hashtable(); + + public static Hashtable Table{ get{ return m_Table; } } + + + // When a creature's AI is deactivated (PlayerRangeSensitive optimization) does it return home? + public bool ReturnOnDeactivate{ get{ return true; } } + + // Are creatures unlinked on taming (true) or should they also go out of the region (false)? + public bool UnlinkOnTaming{ get{ return false; } } + + // Are unlinked and untamed creatures removed after 20 hours? + public bool RemoveIfUntamed{ get{ return true; } } + + + public static readonly Direction InvalidDirection = Direction.Running; + + private int m_ID; + private BaseRegion m_Region; + private Point3D m_Home; + private int m_Range; + private Direction m_Direction; + private SpawnDefinition m_Definition; + private List m_SpawnedObjects; + private int m_Max; + private TimeSpan m_MinSpawnTime; + private TimeSpan m_MaxSpawnTime; + private bool m_Running; + + private DateTime m_NextSpawn; + private Timer m_SpawnTimer; + + public int ID{ get{ return m_ID; } } + public BaseRegion Region{ get{ return m_Region; } } + public Point3D HomeLocation{ get{ return m_Home; } } + public int HomeRange{ get{ return m_Range; } } + public Direction Direction{ get{ return m_Direction; } } + public SpawnDefinition Definition{ get{ return m_Definition; } } + public List SpawnedObjects{ get{ return m_SpawnedObjects; } } + public int Max{ get{ return m_Max; } } + public TimeSpan MinSpawnTime{ get{ return m_MinSpawnTime; } } + public TimeSpan MaxSpawnTime{ get{ return m_MaxSpawnTime; } } + public bool Running{ get{ return m_Running; } } + + public bool Complete{ get{ return m_SpawnedObjects.Count >= m_Max; } } + public bool Spawning{ get{ return m_Running && !this.Complete; } } + + public SpawnEntry( int id, BaseRegion region, Point3D home, int range, Direction direction, SpawnDefinition definition, int max, TimeSpan minSpawnTime, TimeSpan maxSpawnTime ) + { + m_ID = id; + m_Region = region; + m_Home = home; + m_Range = range; + m_Direction = direction; + m_Definition = definition; + m_SpawnedObjects = new List(); + m_Max = max; + m_MinSpawnTime = minSpawnTime; + m_MaxSpawnTime = maxSpawnTime; + m_Running = false; + + if ( m_Table.Contains( id ) ) + Console.WriteLine( "Warning: double SpawnEntry ID '{0}'", id ); + else + m_Table[id] = this; + } + + public Point3D RandomSpawnLocation( int spawnHeight, bool land, bool water ) + { + return m_Region.RandomSpawnLocation( spawnHeight, land, water, m_Home, m_Range ); + } + + public void Start() + { + if ( m_Running ) + return; + + m_Running = true; + CheckTimer(); + } + + public void Stop() + { + if ( !m_Running ) + return; + + m_Running = false; + CheckTimer(); + } + + private void Spawn() + { + ISpawnable spawn = m_Definition.Spawn(this); + + if ( spawn != null ) + Add( spawn ); + } + + private void Add( ISpawnable spawn ) + { + m_SpawnedObjects.Add( spawn ); + + spawn.Spawner = this; + + if ( spawn is BaseCreature ) + ((BaseCreature)spawn).RemoveIfUntamed = this.RemoveIfUntamed; + } + + void ISpawner.Remove( ISpawnable spawn ) + { + m_SpawnedObjects.Remove( spawn ); + + CheckTimer(); + } + + private TimeSpan RandomTime() + { + int min = (int) m_MinSpawnTime.TotalSeconds; + int max = (int) m_MaxSpawnTime.TotalSeconds; + + int rand = Utility.RandomMinMax( min, max ); + return TimeSpan.FromSeconds( rand ); + } + + private void CheckTimer() + { + if ( this.Spawning ) + { + if ( m_SpawnTimer == null ) + { + TimeSpan time = RandomTime(); + m_SpawnTimer = Timer.DelayCall( time, new TimerCallback( TimerCallback ) ); + m_NextSpawn = DateTime.Now + time; + } + } + else if ( m_SpawnTimer != null ) + { + m_SpawnTimer.Stop(); + m_SpawnTimer = null; + } + } + + private void TimerCallback() + { + int amount = Math.Max( (m_Max - m_SpawnedObjects.Count) / 3, 1 ); + + for ( int i = 0; i < amount; i++ ) + Spawn(); + + m_SpawnTimer = null; + CheckTimer(); + } + + public void DeleteSpawnedObjects() + { + InternalDeleteSpawnedObjects(); + + m_Running = false; + CheckTimer(); + } + + private void InternalDeleteSpawnedObjects() + { + foreach ( ISpawnable spawnable in m_SpawnedObjects ) + { + spawnable.Spawner = null; + + bool uncontrolled = !(spawnable is BaseCreature) || !((BaseCreature)spawnable).Controlled; + + if( uncontrolled ) + spawnable.Delete(); + } + + m_SpawnedObjects.Clear(); + } + + public void Respawn() + { + InternalDeleteSpawnedObjects(); + + for ( int i = 0; !this.Complete && i < m_Max; i++ ) + Spawn(); + + m_Running = true; + CheckTimer(); + } + + public void Delete() + { + m_Max = 0; + InternalDeleteSpawnedObjects(); + + if ( m_SpawnTimer != null ) + { + m_SpawnTimer.Stop(); + m_SpawnTimer = null; + } + + if ( m_Table[m_ID] == this ) + m_Table.Remove( m_ID ); + } + + public void Serialize( GenericWriter writer ) + { + writer.Write( (int) m_SpawnedObjects.Count ); + + for ( int i = 0; i < m_SpawnedObjects.Count; i++ ) + { + ISpawnable spawn = m_SpawnedObjects[i]; + + int serial = spawn.Serial; + + writer.Write( (int) serial ); + } + + writer.Write( (bool) m_Running ); + + if ( m_SpawnTimer != null ) + { + writer.Write( true ); + writer.WriteDeltaTime( (DateTime) m_NextSpawn ); + } + else + { + writer.Write( false ); + } + } + + public void Deserialize( GenericReader reader, int version ) + { + int count = reader.ReadInt(); + + for ( int i = 0; i < count; i++ ) + { + int serial = reader.ReadInt(); + ISpawnable spawnableEntity = World.FindEntity( serial ) as ISpawnable; + + if (spawnableEntity != null) + Add(spawnableEntity); + } + + m_Running = reader.ReadBool(); + + if ( reader.ReadBool() ) + { + m_NextSpawn = reader.ReadDeltaTime(); + + if ( this.Spawning ) + { + if ( m_SpawnTimer != null ) + m_SpawnTimer.Stop(); + + TimeSpan delay = m_NextSpawn - DateTime.Now; + m_SpawnTimer = Timer.DelayCall( delay > TimeSpan.Zero ? delay : TimeSpan.Zero, new TimerCallback( TimerCallback ) ); + } + } + + CheckTimer(); + } + + private static List m_RemoveList; + + public static void Remove( GenericReader reader, int version ) + { + int count = reader.ReadInt(); + + for ( int i = 0; i < count; i++ ) + { + int serial = reader.ReadInt(); + IEntity entity = World.FindEntity( serial ); + + if ( entity != null ) + { + if ( m_RemoveList == null ) + m_RemoveList = new List(); + + m_RemoveList.Add( entity ); + } + } + + reader.ReadBool(); // m_Running + + if ( reader.ReadBool() ) + reader.ReadDeltaTime(); // m_NextSpawn + } + + public static void Initialize() + { + if ( m_RemoveList != null ) + { + foreach ( IEntity ent in m_RemoveList ) + { + ent.Delete(); + } + + m_RemoveList = null; + } + + SpawnPersistence.EnsureExistence(); + + CommandSystem.Register( "RespawnAllRegions", AccessLevel.Administrator, new CommandEventHandler( RespawnAllRegions_OnCommand ) ); + CommandSystem.Register( "RespawnRegion", AccessLevel.GameMaster, new CommandEventHandler( RespawnRegion_OnCommand ) ); + CommandSystem.Register( "DelAllRegionSpawns", AccessLevel.Administrator, new CommandEventHandler( DelAllRegionSpawns_OnCommand ) ); + CommandSystem.Register( "DelRegionSpawns", AccessLevel.GameMaster, new CommandEventHandler( DelRegionSpawns_OnCommand ) ); + CommandSystem.Register( "StartAllRegionSpawns", AccessLevel.Administrator, new CommandEventHandler( StartAllRegionSpawns_OnCommand ) ); + CommandSystem.Register( "StartRegionSpawns", AccessLevel.GameMaster, new CommandEventHandler( StartRegionSpawns_OnCommand ) ); + CommandSystem.Register( "StopAllRegionSpawns", AccessLevel.Administrator, new CommandEventHandler( StopAllRegionSpawns_OnCommand ) ); + CommandSystem.Register( "StopRegionSpawns", AccessLevel.GameMaster, new CommandEventHandler( StopRegionSpawns_OnCommand ) ); + } + + private static BaseRegion GetCommandData( CommandEventArgs args ) + { + Mobile from = args.Mobile; + + Region reg; + if ( args.Length == 0 ) + { + reg = from.Region; + } + else + { + string name = args.GetString( 0 ); + //reg = (Region) from.Map.Regions[name]; + + if ( !from.Map.Regions.TryGetValue( name, out reg ) ) + { + from.SendMessage( "Could not find region '{0}'.", name ); + return null; + } + } + + BaseRegion br = reg as BaseRegion; + + if ( br == null || br.Spawns == null ) + { + from.SendMessage( "There are no spawners in region '{0}'.", reg ); + return null; + } + + return br; + } + + [Usage( "RespawnAllRegions" )] + [Description( "Respawns all regions and sets the spawners as running." )] + public static void RespawnAllRegions_OnCommand( CommandEventArgs args ) + { + foreach ( SpawnEntry entry in m_Table.Values ) + { + entry.Respawn(); + } + + args.Mobile.SendMessage( "All regions have respawned." ); + } + + [Usage( "RespawnRegion []" )] + [Description( "Respawns the region in which you are (or that you provided) and sets the spawners as running." )] + private static void RespawnRegion_OnCommand( CommandEventArgs args ) + { + BaseRegion region = GetCommandData( args ); + + if ( region == null ) + return; + + for ( int i = 0; i < region.Spawns.Length; i++ ) + region.Spawns[i].Respawn(); + + args.Mobile.SendMessage( "Region '{0}' has respawned.", region ); + } + + [Usage( "DelAllRegionSpawns" )] + [Description( "Deletes all spawned objects of every regions and sets the spawners as not running." )] + private static void DelAllRegionSpawns_OnCommand( CommandEventArgs args ) + { + foreach ( SpawnEntry entry in m_Table.Values ) + { + entry.DeleteSpawnedObjects(); + } + + args.Mobile.SendMessage( "All region spawned objects have been deleted." ); + } + + [Usage( "DelRegionSpawns []" )] + [Description( "Deletes all spawned objects of the region in which you are (or that you provided) and sets the spawners as not running." )] + private static void DelRegionSpawns_OnCommand( CommandEventArgs args ) + { + BaseRegion region = GetCommandData( args ); + + if ( region == null ) + return; + + for ( int i = 0; i < region.Spawns.Length; i++ ) + region.Spawns[i].DeleteSpawnedObjects(); + + args.Mobile.SendMessage( "Spawned objects of region '{0}' have been deleted.", region ); + } + + [Usage( "StartAllRegionSpawns" )] + [Description( "Sets the region spawners of all regions as running." )] + private static void StartAllRegionSpawns_OnCommand( CommandEventArgs args ) + { + foreach ( SpawnEntry entry in m_Table.Values ) + { + entry.Start(); + } + + args.Mobile.SendMessage( "All region spawners have started." ); + } + + [Usage( "StartRegionSpawns []" )] + [Description( "Sets the region spawners of the region in which you are (or that you provided) as running." )] + private static void StartRegionSpawns_OnCommand( CommandEventArgs args ) + { + BaseRegion region = GetCommandData( args ); + + if ( region == null ) + return; + + for ( int i = 0; i < region.Spawns.Length; i++ ) + region.Spawns[i].Start(); + + args.Mobile.SendMessage( "Spawners of region '{0}' have started.", region ); + } + + [Usage( "StopAllRegionSpawns" )] + [Description( "Sets the region spawners of all regions as not running." )] + private static void StopAllRegionSpawns_OnCommand( CommandEventArgs args ) + { + foreach ( SpawnEntry entry in m_Table.Values ) + { + entry.Stop(); + } + + args.Mobile.SendMessage( "All region spawners have stopped." ); + } + + [Usage( "StopRegionSpawns []" )] + [Description( "Sets the region spawners of the region in which you are (or that you provided) as not running." )] + private static void StopRegionSpawns_OnCommand( CommandEventArgs args ) + { + BaseRegion region = GetCommandData( args ); + + if ( region == null ) + return; + + for ( int i = 0; i < region.Spawns.Length; i++ ) + region.Spawns[i].Stop(); + + args.Mobile.SendMessage( "Spawners of region '{0}' have stopped.", region ); + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/Spawning/SpawnPersistence.cs b/Scripts/Regions/Spawning/SpawnPersistence.cs new file mode 100644 index 0000000..9946950 --- /dev/null +++ b/Scripts/Regions/Spawning/SpawnPersistence.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using Server; + +namespace Server.Regions +{ + public class SpawnPersistence : Item + { + private static SpawnPersistence m_Instance; + + public SpawnPersistence Instance{ get{ return m_Instance; } } + + public static void EnsureExistence() + { + if ( m_Instance == null ) + m_Instance = new SpawnPersistence(); + } + + public override string DefaultName + { + get { return "Region spawn persistence - Internal"; } + } + + private SpawnPersistence() : base( 1 ) + { + Movable = false; + } + + public SpawnPersistence( Serial serial ) : base( serial ) + { + m_Instance = this; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + + writer.Write( (int) SpawnEntry.Table.Values.Count ); + foreach ( SpawnEntry entry in SpawnEntry.Table.Values ) + { + writer.Write( (int) entry.ID ); + + entry.Serialize( writer ); + } + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + int count = reader.ReadInt(); + for ( int i = 0; i < count; i++ ) + { + int id = reader.ReadInt(); + + SpawnEntry entry = (SpawnEntry) SpawnEntry.Table[id]; + + if ( entry != null ) + entry.Deserialize( reader, version ); + else + SpawnEntry.Remove( reader, version ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Regions/TownRegion.cs b/Scripts/Regions/TownRegion.cs new file mode 100644 index 0000000..e100016 --- /dev/null +++ b/Scripts/Regions/TownRegion.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server; +using Server.Commands; +using Server.Mobiles; +using Server.Spells; + +namespace Server.Regions +{ + public class TownRegion : BaseRegion + { + public TownRegion( XmlElement xml, Map map, Region parent ) : base( xml, map, parent ) + { + } + + public override bool OnBeginSpellCast( Mobile m, ISpell s ) + { + if ( !s.OnCastInTown( this ) ) + { + m.SendLocalizedMessage( 500946 ); // You cannot cast this in town! + return false; + } + + return base.OnBeginSpellCast( m, s ); + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return true; + } + } +} diff --git a/Scripts/Regions/UnderworldEntrance.cs b/Scripts/Regions/UnderworldEntrance.cs new file mode 100644 index 0000000..8f1d945 --- /dev/null +++ b/Scripts/Regions/UnderworldEntrance.cs @@ -0,0 +1,77 @@ +using System; +using System.IO; +using System.Collections; +using Server; +using Server.Regions; + +namespace Server +{ + public class UnderworldEntrance : BaseRegion + { + private const int Range = 10; // No house may be placed within 5 tiles of the entrances + + public UnderworldEntrance( int x, int y, Map map ): base( null, map, Region.DefaultPriority, new Rectangle2D( x - Range, y - Range, 1 + (Range * 2), 1 + (Range * 2) ) ) + { + GoLocation = new Point3D( x, y, map.GetAverageZ( x, y ) ); + + Register(); + } + + public static void Initialize() + { + string filePath = Path.Combine( Core.BaseDirectory, "Data/Config/entrances.cfg" ); + int i = 0, x = 0, y = 0; + + if ( File.Exists( filePath ) ) + { + using ( StreamReader ip = new StreamReader( filePath ) ) + { + string line; + + while ( (line = ip.ReadLine()) != null ) + { + i++; + + try + { + string[] split = line.Split( ' ' ); + + x = Convert.ToInt32( split[0] ); + y = Convert.ToInt32( split[1] ); + + try + { + new UnderworldEntrance( x, y, Map.Britannia ); + } + catch ( Exception e ) + { + Console.WriteLine( "{0} {1} {2} {3}", i, x, y, e ); + } + } + catch + { + Console.WriteLine( "Warning: Error in Line '{0}' of Data/Config/treasure.cfg", line ); + } + } + } + } + } + + public override bool AllowHousing( Mobile from, Point3D p ) + { + return false; + } + + public override void OnEnter( Mobile m ) + { + if ( m.AccessLevel > AccessLevel.Player ) + m.SendMessage( "You have entered a protected underworld entrance area." ); + } + + public override void OnExit( Mobile m ) + { + if ( m.AccessLevel > AccessLevel.Player ) + m.SendMessage( "You have left a protected underworld entrance area." ); + } + } +} \ No newline at end of file diff --git a/Scripts/Settings.cs b/Scripts/Settings.cs new file mode 100644 index 0000000..56f3e2c --- /dev/null +++ b/Scripts/Settings.cs @@ -0,0 +1,206 @@ +using System; +using Server; + +namespace Server.Misc +{ + class Settings + { + public static string ServerName() + { + // What is the name of your server? + return "Avatars Conquest"; + } + + public static string PublicIP() + { + // The site that returns your public IP address + // You want a page that just returns a plain white page with only the IP address + return "http://icanhazip.com/"; + } + + public static bool DetectPublicIP() + { + // The server may try to detect your public IP address. + // The console will show if it is trying to obtain one. + // If you don't see a console message stating it is trying to + // find one, set this to true to force it if you want to run a public server. + return true; + } + + public static bool LogoutSave() + { + // This will save your world when your character logs out. + // It is highly encouraged to set this to 'false' if you are running a multiplayer server. + return true; + } + + public static int StartGold() + { + // How much gold do players start with? Default 100. + return 100; + } + + public static int GoldCutRate() // DEFAULT IS 25% OF WHAT GOLD NORMALLY DROPS + { + // THIS AFFECTS MONEY ELEMENTS SUCH AS... + // MONSTER GOLD + // CHEST GOLD + // QUEST REWARD GOLD + + return 25; + } + + public static double SaveInterval() + { + // How many minutes does your server save its information? + return 30.0; + } + + public static bool CastSpellsHoldingThings() + { + // If true, then players can cast spells while holding items. + return false; + } + + public static bool CannotDrinkPotionsWhileHoldingThings() + { + // If true, then players can drink potions while holding items. + return false; + } + + public static bool CanStealWhileHoldingThings() + { + // If true, then players will not be blocked from stealing while holding items. + return false; + } + + public static bool MonstersConcentrate() + { + // If true, then monsters that have the Concentration skill will use it when casting spells. + return true; + } + + public static bool MonstersSurprise() + { + // If true, then monsters will not be seen until they are in line of sight of the character in dungeons or graveyards. + return true; + } + + public static bool MonstersSearch() + { + // If true, then all monsters will have some searching skill based on their level, allowing them to search for hidden creatures/players. + return true; + } + + public static bool AllowMacroing() + { + // Some skills can be macroed to have unattended gains by players. Setting this to false will mitigate that. + return false; + } + + public static int MaxAccountsPerIP() + { + // How many accounts can a player have per IP address? + return 100; + } + + public static bool AutoAccountCreation() + { + // Do you want players to have their accounts automatically created? + // If so...their account will be created based on the username and password they enter. + // Setting this to false will rely on your to create accounts for them. + return true; + } + + public static bool RestrictDeletion() + { + // If true, then players cannot delete a character until it is past the DeleteDelay() time frame, which is set below this setting. + return false; + } + + public static double DeleteDelay() + { + // If the RestrictDeletion() is set to true, this is the number of days a character must be before they can be deleted. + return 7.0; + } + + public static double BoatDelete() + { + // How many days before an unattended boat sinks into the sea. This timer resets when players use the boat. + return 30.0; + } + + public static bool HouseTimer() + { + // If set to true, houses will slowly deteriorate. The timer resets when a owner visits it again. + return false; + } + + public static double HouseDelete() + { + // How many days before a house starts to deteriorate. If the above setting is false, this setting has no effect. The timer resets when a owner visits it again. + return 5.0; + } + + public static int HousesPerAccount() + { + // How many houses can an account build. The original game is "1" but this game's default is "5". + return 5; + } + + public static bool DisplayInfo() + { + // If set to true, armor and weapons will display much more statistical information as opposed to only the vague information that the classic game had. + return true; + } + + public static bool PopulateTowns() + { + // If set to true, some random characters and ships will appear in your towns to make them feel more active. + return true; + } + + public static bool PigmentLeather() + { + // If set to true, players can use the pigment tubs to dye leather armor. + return true; + } + + public static bool PigmentMetal() + { + // If set to true, players can use the pigment tubs to dye metal armor. + return true; + } + + public static bool PigmentWood() + { + // If set to true, players can use the pigment tubs to dye wooden armor. + return true; + } + + public static double HitPoints() + { + // This value modifies a player character hit points, as well as the effectiveness of healing potions and spells. + // This value should be no lower than 1.0, as that is standard hit points for a massively multiplayer environment. + // The default is 2.0, which is a decent value for a single player experience. + return 2.0; + } + + public static int MonsterSpawn() + { + // This is the minimum amount of minutes between monsters spawns in dungeons mostly. + // Tweak this setting based on how busy your game world is and the amount of players. + // The maximum amount of time will be 30 minutes beyond the minimum. + return 60; + } + + public static int BossSpawn() + { + // This is the minimum amount of minutes between bosses spawns in dungeons mostly. + // Bosses are generally the strongest monster(s) in the particular area. + // Tweak this setting based on how busy your game world is and the amount of players. + // The maximum amount of time will be 30 minutes beyond the minimum. + return 90; + } + } +} diff --git a/Scripts/Skills/Discordance.cs b/Scripts/Skills/Discordance.cs new file mode 100644 index 0000000..c8f0dfd --- /dev/null +++ b/Scripts/Skills/Discordance.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections; +using Server.Items; +using Server.Targeting; +using Server.Mobiles; + +namespace Server.SkillHandlers +{ + public class Discordance + { + public static void Initialize() + { + SkillInfo.Table[(int)SkillName.Discordance].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile m ) + { + m.RevealingAction(); + + BaseInstrument.PickInstrument( m, new InstrumentPickedCallback( OnPickedInstrument ) ); + + return TimeSpan.FromSeconds( 1.0 ); // Cannot use another skill for 1 second + } + + public static void OnPickedInstrument( Mobile from, BaseInstrument instrument ) + { + from.RevealingAction(); + from.SendLocalizedMessage( 1049541 ); // Choose the target for your song of discordance. + from.Target = new DiscordanceTarget( from, instrument ); + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 6.0 ); + } + + private class DiscordanceInfo + { + public Mobile m_From; + public Mobile m_Creature; + public DateTime m_EndTime; + public bool m_Ending; + public Timer m_Timer; + public int m_Effect; + public ArrayList m_Mods; + + public DiscordanceInfo( Mobile from, Mobile creature, int effect, ArrayList mods ) + { + m_From = from; + m_Creature = creature; + m_EndTime = DateTime.Now; + m_Ending = false; + m_Effect = effect; + m_Mods = mods; + + Apply(); + } + + public void Apply() + { + for ( int i = 0; i < m_Mods.Count; ++i ) + { + object mod = m_Mods[i]; + + if ( mod is StatMod ) + m_Creature.AddStatMod( (StatMod) mod ); + else if ( mod is SkillMod ) + m_Creature.AddSkillMod( (SkillMod) mod ); + } + } + + public void Clear() + { + for ( int i = 0; i < m_Mods.Count; ++i ) + { + object mod = m_Mods[i]; + + if ( mod is StatMod ) + m_Creature.RemoveStatMod( ((StatMod) mod).Name ); + else if ( mod is SkillMod ) + m_Creature.RemoveSkillMod( (SkillMod) mod ); + } + } + } + + private static Hashtable m_Table = new Hashtable(); + + public static bool GetEffect( Mobile targ, ref int effect ) + { + DiscordanceInfo info = m_Table[targ] as DiscordanceInfo; + + if ( info == null ) + return false; + + effect = info.m_Effect; + return true; + } + + private static void ProcessDiscordance( DiscordanceInfo info ) + { + Mobile from = info.m_From; + Mobile targ = info.m_Creature; + bool ends = false; + + // According to uoherald bard must remain alive, visible, and + // within range of the target or the effect ends in 15 seconds. + if ( !targ.Alive || targ.Deleted || !from.Alive || from.Hidden ) + ends = true; + else + { + int range = (int) targ.GetDistanceToSqrt( from ); + int maxRange = BaseInstrument.GetBardRange( from, SkillName.Discordance ); + + if ( from.Map != targ.Map || range > maxRange ) + ends = true; + } + + if ( ends && info.m_Ending && info.m_EndTime < DateTime.Now ) + { + if ( info.m_Timer != null ) + info.m_Timer.Stop(); + + info.Clear(); + m_Table.Remove( targ ); + } + else + { + if ( ends && !info.m_Ending ) + { + info.m_Ending = true; + info.m_EndTime = DateTime.Now + TimeSpan.FromSeconds( 15 ); + } + else if ( !ends ) + { + info.m_Ending = false; + info.m_EndTime = DateTime.Now; + } + + targ.FixedEffect( 0x376A, 1, 32 ); + } + } + + public class DiscordanceTarget : Target + { + private BaseInstrument m_Instrument; + + public DiscordanceTarget( Mobile from, BaseInstrument inst ) : base( BaseInstrument.GetBardRange( from, SkillName.Discordance ), false, TargetFlags.None ) + { + m_Instrument = inst; + } + + protected override void OnTarget( Mobile from, object target ) + { + from.RevealingAction(); + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 1.0 ); + + if ( !m_Instrument.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1062488 ); // The instrument you are trying to play is no longer in your backpack! + } + else if ( target is Mobile ) + { + Mobile targ = (Mobile)target; + + if ( targ == from || (targ is BaseCreature && ( ((BaseCreature)targ).BardImmune || !from.CanBeHarmful( targ, false ) ) && ((BaseCreature)targ).ControlMaster != from) ) + { + from.SendLocalizedMessage( 1049535 ); // A song of discord would have no effect on that. + } + else if ( m_Table.Contains( targ ) ) //Already discorded + { + from.SendLocalizedMessage( 1049537 );// Your target is already in discord. + } + else if ( !targ.Player ) + { + double diff = m_Instrument.GetDifficultyFor( targ ) - 10.0; + double music = from.Skills[SkillName.Musicianship].Value; + + if ( music > 100.0 ) + diff -= (music - 100.0) * 0.5; + + if ( !BaseInstrument.CheckMusicianship( from ) ) + { + from.SendLocalizedMessage( 500612 ); // You play poorly, and there is no effect. + m_Instrument.PlayInstrumentBadly( from ); + m_Instrument.ConsumeUse( from ); + } + else if ( from.CheckTargetSkill( SkillName.Discordance, target, diff-25.0, diff+25.0 ) ) + { + from.SendLocalizedMessage( 1049539 ); // You play the song surpressing your targets strength + m_Instrument.PlayInstrumentWell( from ); + m_Instrument.ConsumeUse( from ); + + ArrayList mods = new ArrayList(); + int effect; + double scalar; + + effect = (int)( from.Skills[SkillName.Discordance].Value / -5.0 ); + scalar = effect * 0.01; + + mods.Add( new StatMod( StatType.Str, "DiscordanceStr", (int)(targ.RawStr * scalar), TimeSpan.Zero ) ); + mods.Add( new StatMod( StatType.Int, "DiscordanceInt", (int)(targ.RawInt * scalar), TimeSpan.Zero ) ); + mods.Add( new StatMod( StatType.Dex, "DiscordanceDex", (int)(targ.RawDex * scalar), TimeSpan.Zero ) ); + + for ( int i = 0; i < targ.Skills.Length; ++i ) + { + if ( targ.Skills[i].Value > 0 ) + mods.Add( new DefaultSkillMod( (SkillName)i, true, targ.Skills[i].Value * scalar ) ); + } + + DiscordanceInfo info = new DiscordanceInfo( from, targ, Math.Abs( effect ), mods ); + info.m_Timer = Timer.DelayCall( TimeSpan.Zero, TimeSpan.FromSeconds( 1.25 ), new TimerStateCallback( ProcessDiscordance ), info ); + + m_Table[targ] = info; + } + else + { + from.SendLocalizedMessage( 1049540 );// You fail to disrupt your target + m_Instrument.PlayInstrumentBadly( from ); + m_Instrument.ConsumeUse( from ); + } + + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 12.0 ); + } + else + { + m_Instrument.PlayInstrumentBadly( from ); + } + } + else + { + from.SendLocalizedMessage( 1049535 ); // A song of discord would have no effect on that. + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Hiding.cs b/Scripts/Skills/Hiding.cs new file mode 100644 index 0000000..0bef8b0 --- /dev/null +++ b/Scripts/Skills/Hiding.cs @@ -0,0 +1,109 @@ +using System; +using Server.Targeting; +using Server.Items; +using Server.Network; +using Server.Multis; + +namespace Server.SkillHandlers +{ + public class Hiding + { + private static bool m_CombatOverride; + + public static bool CombatOverride + { + get{ return m_CombatOverride; } + set{ m_CombatOverride = value; } + } + + public static void Initialize() + { + SkillInfo.Table[11].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile m ) + { + if ( m.Spell != null ) + { + m.SendLocalizedMessage( 501238 ); // You are busy doing something else and cannot hide. + return TimeSpan.FromSeconds( 1.0 ); + } + + double bonus = 0.0; + + BaseHouse house = BaseHouse.FindHouseAt( m ); + + if ( house != null && house.IsFriend( m ) ) + { + bonus = 100.0; + } + else + { + if ( house == null ) + house = BaseHouse.FindHouseAt( new Point3D( m.X - 1, m.Y, 127 ), m.Map, 16 ); + + if ( house == null ) + house = BaseHouse.FindHouseAt( new Point3D( m.X + 1, m.Y, 127 ), m.Map, 16 ); + + if ( house == null ) + house = BaseHouse.FindHouseAt( new Point3D( m.X, m.Y - 1, 127 ), m.Map, 16 ); + + if ( house == null ) + house = BaseHouse.FindHouseAt( new Point3D( m.X, m.Y + 1, 127 ), m.Map, 16 ); + + if ( house != null ) + bonus = 50.0; + } + + //int range = 18 - (int)(m.Skills[SkillName.Hiding].Value / 10); + int range = Math.Min( (int)((100 - m.Skills[SkillName.Hiding].Value)/2) + 8, 18 ); //Cap of 18 not OSI-exact, intentional difference + + bool badCombat = ( !m_CombatOverride && m.Combatant != null && m.InRange( m.Combatant.Location, range ) && m.Combatant.InLOS( m ) ); + bool ok = ( !badCombat /*&& m.CheckSkill( SkillName.Hiding, 0.0 - bonus, 100.0 - bonus )*/ ); + + if ( ok ) + { + if ( !m_CombatOverride ) + { + foreach ( Mobile check in m.GetMobilesInRange( range ) ) + { + if ( check.InLOS( m ) && check.Combatant == m ) + { + badCombat = true; + ok = false; + break; + } + } + } + + ok = ( !badCombat && m.CheckSkill( SkillName.Hiding, 0.0 - bonus, 100.0 - bonus ) ); + } + + if ( badCombat ) + { + m.RevealingAction(); + + m.LocalOverheadMessage( MessageType.Regular, 0x22, 501237 ); // You can't seem to hide right now. + + return TimeSpan.FromSeconds( 1.0 ); + } + else + { + if ( ok ) + { + m.Hidden = true; + m.Warmode = false; + m.LocalOverheadMessage( MessageType.Regular, 0x1F4, 501240 ); // You have hidden yourself well. + } + else + { + m.RevealingAction(); + + m.LocalOverheadMessage( MessageType.Regular, 0x22, 501241 ); // You can't seem to hide here. + } + + return TimeSpan.FromSeconds( 10.0 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Meditation.cs b/Scripts/Skills/Meditation.cs new file mode 100644 index 0000000..8e5093e --- /dev/null +++ b/Scripts/Skills/Meditation.cs @@ -0,0 +1,74 @@ +using System; +using Server.Items; + +namespace Server.SkillHandlers +{ + class Meditation + { + public static void Initialize() + { + SkillInfo.Table[15].Callback = new SkillUseCallback( OnUse ); + } + + public static bool CheckOkayHolding( Item item ) + { + if ( item == null ) + return true; + + if ( item is Spellbook ) + return true; + + return false; + } + + public static TimeSpan OnUse( Mobile m ) + { + m.RevealingAction(); + + if ( m.Target != null ) + { + m.SendLocalizedMessage( 501845 ); // You are busy doing something else and cannot focus. + + return TimeSpan.FromSeconds( 5.0 ); + } + else if ( m.Mana >= m.ManaMax ) + { + m.SendLocalizedMessage( 501846 ); // You are at peace. + + return TimeSpan.FromSeconds( 5.0 ); + } + else + { + Item oneHanded = m.FindItemOnLayer( Layer.OneHanded ); + Item twoHanded = m.FindItemOnLayer( Layer.TwoHanded ); + + if ( !CheckOkayHolding( oneHanded ) || !CheckOkayHolding( twoHanded ) ) + { + m.SendLocalizedMessage( 502626 ); // Your hands must be free to cast spells or meditate. + + return TimeSpan.FromSeconds( 2.5 ); + } + + double skillVal = m.Skills[SkillName.Meditation].Value; + double chance = (50.0 + (( skillVal - ( m.ManaMax - m.Mana ) ) * 2)) / 100; + + if ( chance > Utility.RandomDouble() ) + { + m.CheckSkill( SkillName.Meditation, 0.0, 100.0 ); + + m.SendLocalizedMessage( 501851 ); // You enter a meditative trance. + m.Meditating = true; + + if ( m.Player || m.Body.IsHuman ) + m.PlaySound( 0xF9 ); + } + else + { + m.SendLocalizedMessage( 501850 ); // You cannot focus your concentration. + } + + return TimeSpan.FromSeconds( 10.0 ); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Peacemaking.cs b/Scripts/Skills/Peacemaking.cs new file mode 100644 index 0000000..0c62e30 --- /dev/null +++ b/Scripts/Skills/Peacemaking.cs @@ -0,0 +1,199 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Mobiles; +using Server.Items; + +namespace Server.SkillHandlers +{ + public class Peacemaking + { + public static void Initialize() + { + SkillInfo.Table[(int)SkillName.Peacemaking].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile m ) + { + m.RevealingAction(); + + BaseInstrument.PickInstrument( m, new InstrumentPickedCallback( OnPickedInstrument ) ); + + return TimeSpan.FromSeconds( 1.0 ); // Cannot use another skill for 1 second + } + + public static void OnPickedInstrument( Mobile from, BaseInstrument instrument ) + { + from.RevealingAction(); + from.SendLocalizedMessage( 1049525 ); // Whom do you wish to calm? + from.Target = new InternalTarget( from, instrument ); + from.NextSkillTime = DateTime.Now + TimeSpan.FromHours( 6.0 ); + } + + private class InternalTarget : Target + { + private BaseInstrument m_Instrument; + private bool m_SetSkillTime = true; + + public InternalTarget( Mobile from, BaseInstrument instrument ) : base( BaseInstrument.GetBardRange( from, SkillName.Peacemaking ), false, TargetFlags.None ) + { + m_Instrument = instrument; + } + + protected override void OnTargetFinish( Mobile from ) + { + if ( m_SetSkillTime ) + from.NextSkillTime = DateTime.Now; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + from.RevealingAction(); + + if ( !(targeted is Mobile) ) + { + from.SendLocalizedMessage( 1049528 ); // You cannot calm that! + } + else if ( !m_Instrument.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1062488 ); // The instrument you are trying to play is no longer in your backpack! + } + else + { + m_SetSkillTime = false; + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 10.0 ); + + if ( targeted == from ) + { + // Standard mode : reset combatants for everyone in the area + + if ( !BaseInstrument.CheckMusicianship( from ) ) + { + from.SendLocalizedMessage( 500612 ); // You play poorly, and there is no effect. + m_Instrument.PlayInstrumentBadly( from ); + m_Instrument.ConsumeUse( from ); + } + else if ( !from.CheckSkill( SkillName.Peacemaking, 0.0, 120.0 ) ) + { + from.SendLocalizedMessage( 500613 ); // You attempt to calm everyone, but fail. + m_Instrument.PlayInstrumentBadly( from ); + m_Instrument.ConsumeUse( from ); + } + else + { + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 5.0 ); + m_Instrument.PlayInstrumentWell( from ); + m_Instrument.ConsumeUse( from ); + + Map map = from.Map; + + if ( map != null ) + { + int range = BaseInstrument.GetBardRange( from, SkillName.Peacemaking ); + + bool calmed = false; + + foreach ( Mobile m in from.GetMobilesInRange( range ) ) + { + if ((m is BaseCreature && ((BaseCreature)m).Uncalmable) || (m is BaseCreature && ((BaseCreature)m).AreaPeaceImmune) || m == from || !from.CanBeHarmful ( m, false )) + continue; + + calmed = true; + + m.SendLocalizedMessage( 500616 ); // You hear lovely music, and forget to continue battling! + m.Combatant = null; + m.Warmode = false; + + if ( m is BaseCreature && !((BaseCreature)m).BardPacified ) + ((BaseCreature)m).Pacify( from, DateTime.Now + TimeSpan.FromSeconds( 1.0 ) ); + } + + if ( !calmed ) + from.SendLocalizedMessage( 1049648 ); // You play hypnotic music, but there is nothing in range for you to calm. + else + from.SendLocalizedMessage( 500615 ); // You play your hypnotic music, stopping the battle. + } + } + } + else + { + // Target mode : pacify a single target for a longer duration + + Mobile targ = (Mobile)targeted; + + if ( !from.CanBeHarmful( targ, false ) ) + { + from.SendLocalizedMessage( 1049528 ); + m_SetSkillTime = true; + } + else if ( targ is BaseCreature && ((BaseCreature)targ).Uncalmable ) + { + from.SendLocalizedMessage( 1049526 ); // You have no chance of calming that creature. + m_SetSkillTime = true; + } + else if ( targ is BaseCreature && ((BaseCreature)targ).BardPacified ) + { + from.SendLocalizedMessage( 1049527 ); // That creature is already being calmed. + m_SetSkillTime = true; + } + else if ( !BaseInstrument.CheckMusicianship( from ) ) + { + from.SendLocalizedMessage( 500612 ); // You play poorly, and there is no effect. + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 5.0 ); + m_Instrument.PlayInstrumentBadly( from ); + m_Instrument.ConsumeUse( from ); + } + else + { + double diff = m_Instrument.GetDifficultyFor( targ ) - 10.0; + double music = from.Skills[SkillName.Musicianship].Value; + + if ( music > 100.0 ) + diff -= (music - 100.0) * 0.5; + + if ( !from.CheckTargetSkill( SkillName.Peacemaking, targ, diff - 25.0, diff + 25.0 ) ) + { + from.SendLocalizedMessage( 1049531 ); // You attempt to calm your target, but fail. + m_Instrument.PlayInstrumentBadly( from ); + m_Instrument.ConsumeUse( from ); + } + else + { + m_Instrument.PlayInstrumentWell( from ); + m_Instrument.ConsumeUse( from ); + + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 5.0 ); + if ( targ is BaseCreature ) + { + BaseCreature bc = (BaseCreature)targ; + + from.SendLocalizedMessage( 1049532 ); // You play hypnotic music, calming your target. + + targ.Combatant = null; + targ.Warmode = false; + + double seconds = 100 - (diff / 1.5); + + if ( seconds > 120 ) + seconds = 120; + else if ( seconds < 10 ) + seconds = 10; + + bc.Pacify( from, DateTime.Now + TimeSpan.FromSeconds( seconds ) ); + } + else + { + from.SendLocalizedMessage( 1049532 ); // You play hypnotic music, calming your target. + + targ.SendLocalizedMessage( 500616 ); // You hear lovely music, and forget to continue battling! + targ.Combatant = null; + targ.Warmode = false; + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Poisoning.cs b/Scripts/Skills/Poisoning.cs new file mode 100644 index 0000000..1cb7442 --- /dev/null +++ b/Scripts/Skills/Poisoning.cs @@ -0,0 +1,154 @@ +using System; +using Server.Targeting; +using Server.Items; +using Server.Network; + +namespace Server.SkillHandlers +{ + public class Poisoning + { + public static void Initialize() + { + SkillInfo.Table[(int)SkillName.Poisoning].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile m ) + { + m.Target = new InternalTargetPoison(); + + m.SendLocalizedMessage( 502137 ); // Select the poison you wish to use + + return TimeSpan.FromSeconds( 10.0 ); // 10 second delay before beign able to re-use a skill + } + + private class InternalTargetPoison : Target + { + public InternalTargetPoison() : base ( 2, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is BasePoisonPotion ) + { + from.SendLocalizedMessage( 502142 ); // To what do you wish to apply the poison? + from.Target = new InternalTarget( (BasePoisonPotion)targeted ); + } + else // Not a Poison Potion + { + from.SendLocalizedMessage( 502139 ); // That is not a poison potion. + } + } + + private class InternalTarget : Target + { + private BasePoisonPotion m_Potion; + + public InternalTarget( BasePoisonPotion potion ) : base ( 2, false, TargetFlags.None ) + { + m_Potion = potion; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Potion.Deleted ) + return; + + bool startTimer = false; + + if ( targeted is Food ) + { + startTimer = true; + } + else if ( targeted is BaseWeapon ) + { + BaseWeapon weapon = (BaseWeapon)targeted; + + if ( weapon.Layer == Layer.OneHanded ) + { + // Only Bladed or Piercing weapon can be poisoned + startTimer = ( weapon.Type == WeaponType.Slashing || weapon.Type == WeaponType.Piercing ); + } + } + + if ( startTimer ) + { + new InternalTimer( from, (Item)targeted, m_Potion ).Start(); + + from.PlaySound( 0x4F ); + + m_Potion.Consume(); + from.AddToBackpack( new Bottle() ); + } + else // Target can't be poisoned + { + from.SendLocalizedMessage( 502145 ); // You cannot poison that! You can only poison bladed or piercing weapons, food or drink. + } + } + + private class InternalTimer : Timer + { + private Mobile m_From; + private Item m_Target; + private Poison m_Poison; + private double m_MinSkill, m_MaxSkill; + + public InternalTimer( Mobile from, Item target, BasePoisonPotion potion ) : base( TimeSpan.FromSeconds( 2.0 ) ) + { + m_From = from; + m_Target = target; + m_Poison = potion.Poison; + m_MinSkill = potion.MinPoisoningSkill; + m_MaxSkill = potion.MaxPoisoningSkill; + Priority = TimerPriority.TwoFiftyMS; + } + + protected override void OnTick() + { + if ( m_From.CheckTargetSkill( SkillName.Poisoning, m_Target, m_MinSkill, m_MaxSkill ) ) + { + if ( m_Target is Food ) + { + ((Food)m_Target).Poison = m_Poison; + } + else if ( m_Target is BaseWeapon ) + { + ((BaseWeapon)m_Target).Poison = m_Poison; + ((BaseWeapon)m_Target).PoisonCharges = 18 - (m_Poison.Level * 2); + } + + m_From.SendLocalizedMessage( 1010517 ); // You apply the poison + + Misc.Titles.AwardKarma( m_From, -20, true ); + } + else // Failed + { + // 5% of chance of getting poisoned if failed + if ( m_From.Skills[SkillName.Poisoning].Base < 80.0 && Utility.Random( 20 ) == 0 ) + { + m_From.SendLocalizedMessage( 502148 ); // You make a grave mistake while applying the poison. + m_From.ApplyPoison( m_From, m_Poison ); + } + else + { + if ( m_Target is BaseWeapon ) + { + BaseWeapon weapon = (BaseWeapon)m_Target; + + if ( weapon.Type == WeaponType.Slashing ) + m_From.SendLocalizedMessage( 1010516 ); // You fail to apply a sufficient dose of poison on the blade + else + m_From.SendLocalizedMessage( 1010518 ); // You fail to apply a sufficient dose of poison + } + else + { + m_From.SendLocalizedMessage( 1010518 ); // You fail to apply a sufficient dose of poison + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Provocation.cs b/Scripts/Skills/Provocation.cs new file mode 100644 index 0000000..6fe918c --- /dev/null +++ b/Scripts/Skills/Provocation.cs @@ -0,0 +1,160 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Mobiles; +using Server.Items; + +namespace Server.SkillHandlers +{ + public class Provocation + { + public static void Initialize() + { + SkillInfo.Table[(int)SkillName.Provocation].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile m ) + { + m.RevealingAction(); + + BaseInstrument.PickInstrument( m, new InstrumentPickedCallback( OnPickedInstrument ) ); + + return TimeSpan.FromSeconds( 1.0 ); // Cannot use another skill for 1 second + } + + public static void OnPickedInstrument( Mobile from, BaseInstrument instrument ) + { + from.RevealingAction(); + from.SendLocalizedMessage( 501587 ); // Whom do you wish to incite? + from.Target = new InternalFirstTarget( from, instrument ); + } + + private class InternalFirstTarget : Target + { + private BaseInstrument m_Instrument; + + public InternalFirstTarget( Mobile from, BaseInstrument instrument ) : base( BaseInstrument.GetBardRange( from, SkillName.Provocation ), false, TargetFlags.None ) + { + m_Instrument = instrument; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + from.RevealingAction(); + + if ( targeted is BaseCreature && from.CanBeHarmful( (Mobile)targeted, true ) ) + { + BaseCreature creature = (BaseCreature)targeted; + + if ( !m_Instrument.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1062488 ); // The instrument you are trying to play is no longer in your backpack! + } + else if ( creature.Controlled ) + { + from.SendLocalizedMessage( 501590 ); // They are too loyal to their master to be provoked. + } + else + { + from.RevealingAction(); + m_Instrument.PlayInstrumentWell( from ); + from.SendLocalizedMessage( 1008085 ); // You play your music and your target becomes angered. Whom do you wish them to attack? + from.Target = new InternalSecondTarget( from, m_Instrument, creature ); + } + } + else + { + from.SendLocalizedMessage( 501589 ); // You can't incite that! + } + } + } + + private class InternalSecondTarget : Target + { + private BaseCreature m_Creature; + private BaseInstrument m_Instrument; + + public InternalSecondTarget( Mobile from, BaseInstrument instrument, BaseCreature creature ) : base( BaseInstrument.GetBardRange( from, SkillName.Provocation ), false, TargetFlags.None ) + { + m_Instrument = instrument; + m_Creature = creature; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + from.RevealingAction(); + + if ( targeted is BaseCreature ) + { + BaseCreature creature = (BaseCreature)targeted; + + if ( !m_Instrument.IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1062488 ); // The instrument you are trying to play is no longer in your backpack! + } + else if ( m_Creature.Unprovokable ) + { + from.SendLocalizedMessage( 1049446 ); // You have no chance of provoking those creatures. + } + else if ( creature.Unprovokable ) + { + from.SendLocalizedMessage( 1049446 ); // You have no chance of provoking those creatures. + } + else if ( m_Creature.Map != creature.Map || !m_Creature.InRange( creature, BaseInstrument.GetBardRange( from, SkillName.Provocation ) ) ) + { + from.SendLocalizedMessage( 1049450 ); // The creatures you are trying to provoke are too far away from each other for your music to have an effect. + } + else if ( m_Creature != creature ) + { + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 10.0 ); + + double diff = ((m_Instrument.GetDifficultyFor( m_Creature ) + m_Instrument.GetDifficultyFor( creature )) * 0.5) - 5.0; + double music = from.Skills[SkillName.Musicianship].Value; + + if ( music > 100.0 ) + diff -= (music - 100.0) * 0.5; + + if ( from.CanBeHarmful( m_Creature, true ) && from.CanBeHarmful( creature, true ) ) + { + if ( !BaseInstrument.CheckMusicianship( from ) ) + { + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 5.0 ); + from.SendLocalizedMessage( 500612 ); // You play poorly, and there is no effect. + m_Instrument.PlayInstrumentBadly( from ); + m_Instrument.ConsumeUse( from ); + } + else + { + //from.DoHarmful( m_Creature ); + //from.DoHarmful( creature ); + + if ( !from.CheckTargetSkill( SkillName.Provocation, creature, diff-25.0, diff+25.0 ) ) + { + from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 5.0 ); + from.SendLocalizedMessage( 501599 ); // Your music fails to incite enough anger. + m_Instrument.PlayInstrumentBadly( from ); + m_Instrument.ConsumeUse( from ); + } + else + { + from.SendLocalizedMessage( 501602 ); // Your music succeeds, as you start a fight. + m_Instrument.PlayInstrumentWell( from ); + m_Instrument.ConsumeUse( from ); + m_Creature.Provoke( from, creature, true ); + } + } + } + } + else + { + from.SendLocalizedMessage( 501593 ); // You can't tell someone to attack themselves! + } + } + else + { + from.SendLocalizedMessage( 501589 ); // You can't incite that! + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/RemoveTrap.cs b/Scripts/Skills/RemoveTrap.cs new file mode 100644 index 0000000..fb0ac4e --- /dev/null +++ b/Scripts/Skills/RemoveTrap.cs @@ -0,0 +1,98 @@ +using System; +using Server.Targeting; +using Server.Items; +using Server.Network; + +namespace Server.SkillHandlers +{ + public class RemoveTrap + { + public static void Initialize() + { + SkillInfo.Table[(int)SkillName.RemoveTrap].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile m ) + { + m.Target = new InternalTarget(); + + m.SendLocalizedMessage( 502368 ); // Wich trap will you attempt to disarm? + + return TimeSpan.FromSeconds( 10.0 ); // 10 second delay before beign able to re-use a skill + } + + private class InternalTarget : Target + { + public InternalTarget() : base ( 2, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is LootChest ) + ((LootChest)targeted).Setup(); + + if ( targeted is Mobile ) + { + from.SendLocalizedMessage( 502816 ); // You feel that such an action would be inappropriate + } + else if ( targeted is TrapableContainer ) + { + TrapableContainer targ = (TrapableContainer)targeted; + + from.Direction = from.GetDirectionTo( targ ); + + if ( targ.TrapType == TrapType.None ) + { + from.SendLocalizedMessage( 502373 ); // That doesn't appear to be trapped + return; + } + + from.PlaySound( 0x241 ); + + if ( from.CheckTargetSkill( SkillName.RemoveTrap, targ, targ.TrapPower, targ.TrapPower + 30 ) ) + { + targ.TrapPower = 0; + targ.TrapLevel = 0; + targ.TrapType = TrapType.None; + from.SendLocalizedMessage( 502377 ); // You successfully render the trap harmless + } + else + { + from.SendLocalizedMessage( 502372 ); // You fail to disarm the trap... but you don't set it off + } + } + else if ( targeted is BaseDoor ) + { + BaseDoor targ = (BaseDoor)targeted; + + from.Direction = from.GetDirectionTo( targ ); + + if ( targ.TrapType == TrapType.None ) + { + from.SendLocalizedMessage( 502373 ); // That doesn't appear to be trapped + return; + } + + from.PlaySound( 0x241 ); + + if ( from.CheckTargetSkill( SkillName.RemoveTrap, targ, targ.TrapPower, targ.TrapPower + 30 ) ) + { + targ.TrapPower = 0; + targ.TrapLevel = 0; + targ.TrapType = TrapType.None; + from.SendLocalizedMessage( 502377 ); // You successfully render the trap harmless + } + else + { + from.SendLocalizedMessage( 502372 ); // You fail to disarm the trap... but you don't set it off + } + } + else + { + from.SendLocalizedMessage( 502373 ); // That does'nt appear to be trapped + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Searching.cs b/Scripts/Skills/Searching.cs new file mode 100644 index 0000000..b9a935c --- /dev/null +++ b/Scripts/Skills/Searching.cs @@ -0,0 +1,134 @@ +using System; +using Server.Items; +using Server.Mobiles; +using Server.Multis; +using Server.Targeting; +using Server.Regions; + +namespace Server.SkillHandlers +{ + public class Searching + { + public static void Initialize() + { + SkillInfo.Table[(int)SkillName.Searching].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile src ) + { + src.SendLocalizedMessage( 500819 );//Where will you search? + src.Target = new InternalTarget(); + + return TimeSpan.FromSeconds( 6.0 ); + } + + public static int TotalSearchSkill( Mobile m ) + { + m.CheckSkill( SkillName.Searching, -5.0, 110.0 ); // Passive Check + + int skill = (int)(m.Skills[SkillName.Searching].Value/2); + + if ( m.Region is DungeonRegion ) + { + skill = (int)(m.Skills[SkillName.Searching].Value); + + if ( !( m.BeginAction( typeof( LightCycle ) ) ) ) + skill = skill + 25; + + if ( m.FindItemOnLayer( Layer.TwoHanded ) != null ) + { + Item item = m.FindItemOnLayer( Layer.TwoHanded ); + + if ( item is BaseEquipableLight && ( item.ItemID == 0xA15 || item.ItemID == 0xA17 || item.ItemID == 0xA22 || item.ItemID == 0xA0F || item.ItemID == 0xA12 ) ) + skill = skill + 25; + } + } + + return skill; + } + + private class InternalTarget : Target + { + public InternalTarget() : base( 12, true, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile src, object targ ) + { + bool foundAnyone = false; + + Point3D p; + if ( targ is Mobile ) + p = ((Mobile)targ).Location; + else if ( targ is Item ) + p = ((Item)targ).Location; + else if ( targ is IPoint3D ) + p = new Point3D( (IPoint3D)targ ); + else + p = src.Location; + + double srcSkill = src.Skills[SkillName.Searching].Value; + int range = (int)(srcSkill / 10.0); + + if ( !src.CheckSkill( SkillName.Searching, 0.0, 100.0 ) ) + range /= 2; + + BaseHouse house = BaseHouse.FindHouseAt( p, src.Map, 16 ); + + bool inHouse = ( house != null && house.IsFriend( src ) ); + + if ( inHouse ) + range = 22; + + if ( range > 0 ) + { + IPooledEnumerable inRange = src.Map.GetMobilesInRange( p, range ); + + foreach ( Mobile trg in inRange ) + { + if ( trg.Hidden && src != trg ) + { + double ss = srcSkill + Utility.Random( 21 ) - 10; + double ts = trg.Skills[SkillName.Hiding].Value + Utility.Random( 21 ) - 10; + + if ( src.AccessLevel >= trg.AccessLevel && ( ss >= ts || ( inHouse && house.IsInside( trg ) ) ) ) + { + trg.RevealingAction(); + trg.SendLocalizedMessage( 500814 ); // You have been revealed! + foundAnyone = true; + } + } + } + + inRange.Free(); + + IPooledEnumerable inArea = src.Map.GetItemsInRange( p, range ); + + foreach ( Item trg in inArea ) + { + if ( + trg is SecretBookDoor || + trg is SecretStoneDoor1 || + trg is SecretDungeonDoor || + trg is SecretStoneDoor2 || + trg is SecretWoodenDoor || + trg is SecretLightWoodDoor || + trg is SecretStoneDoor3 ) + { + BaseDoor door = (BaseDoor)trg; + door.OnDoubleClick(src); + foundAnyone = true; + } + } + + inArea.Free(); + } + + if ( !foundAnyone ) + { + src.SendLocalizedMessage( 500817 ); // You can see nothing hidden there. + } + } + } + } +} diff --git a/Scripts/Skills/SkillCheck.cs b/Scripts/Skills/SkillCheck.cs new file mode 100644 index 0000000..a064eb8 --- /dev/null +++ b/Scripts/Skills/SkillCheck.cs @@ -0,0 +1,574 @@ +using System; +using Server; +using Server.Mobiles; + +namespace Server.Misc +{ + public enum Trades + { + Alchemy = 0, + Blacksmith = 1, + Carpentry = 2, + Cartography = 3, + Cooking = 4, + Fishing = 5, + Fletching = 6, + Inscribe = 7, + Lumberjacking = 8, + Mining = 9, + Tailoring = 10, + Tinkering = 11, + Musicianship = 12, + Magery = 13 + } + + public class SkillCheck + { + private static readonly bool AntiMacroCode = Server.Misc.Settings.AllowMacroing(); + + public static TimeSpan AntiMacroExpire = TimeSpan.FromMinutes( 5.0 ); //How long do we remember targets/locations? + public const int Allowance = 3; //How many times may we use the same location/target for gain + private const int LocationSize = 5; //The size of eeach location, make this smaller so players dont have to move as far + private static bool[] UseAntiMacro = new bool[] + { + // true if this skill uses the anti-macro code, false if it does not + + false,// Archery + false,// Bludgeoning + false,// Fencing + false,// Swords + false,// Tactics + false,// Parry + false,// Concentration + true,// Discordance + false,// Dodging + false,// Hand-to-Hand + true,// Healing + true,// Hiding + true,// Lockpicking + true,// Magery + true,// MagicResist + true,// Meditation + true,// Musicianship + true,// Peacemaking + true,// Poisoning + true,// Provocation + true,// RemoveTrap + true,// Searching + true,// Stealing + true,// Stealth + true// Tracking + }; + + public static void Initialize() + { + Mobile.SkillCheckLocationHandler = new SkillCheckLocationHandler( Mobile_SkillCheckLocation ); + Mobile.SkillCheckDirectLocationHandler = new SkillCheckDirectLocationHandler( Mobile_SkillCheckDirectLocation ); + + Mobile.SkillCheckTargetHandler = new SkillCheckTargetHandler( Mobile_SkillCheckTarget ); + Mobile.SkillCheckDirectTargetHandler = new SkillCheckDirectTargetHandler( Mobile_SkillCheckDirectTarget ); + } + + public static string TradeName( Trades trade ) + { + if ( trade == Trades.Alchemy ){ return "Alchemy"; } + else if ( trade == Trades.Blacksmith ){ return "Blacksmithing"; } + else if ( trade == Trades.Carpentry ){ return "Carpentry"; } + else if ( trade == Trades.Cartography ){ return "Cartography"; } + else if ( trade == Trades.Cooking ){ return "Cooking"; } + else if ( trade == Trades.Fishing ){ return "Fishing"; } + else if ( trade == Trades.Fletching ){ return "Fletching"; } + else if ( trade == Trades.Inscribe ){ return "Inscription"; } + else if ( trade == Trades.Lumberjacking ){ return "Lumberjacking"; } + else if ( trade == Trades.Mining ){ return "Mining"; } + else if ( trade == Trades.Tailoring ){ return "Tailoring"; } + else if ( trade == Trades.Tinkering ){ return "Tinkering"; } + else if ( trade == Trades.Magery ){ return "Magery"; } + else if ( trade == Trades.Musicianship ){ return "Musicianship"; } + + return ""; + } + + public static double TradeSkill( Mobile m, Trades trade, bool raw ) + { + double value = 10.0; + + if ( m is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)m; + + if ( trade == Trades.Alchemy ){ value += (m.Int*0.75)+(m.Dex*0.25); if ( !raw && pm.NpcGuild == NpcGuild.AlchemistsGuild ){ value += 20; } } + else if ( trade == Trades.Blacksmith ){ value += (m.Str*0.85)+(m.Dex*0.15); if ( !raw && pm.NpcGuild == NpcGuild.BlacksmithsGuild ){ value += 20; } } + else if ( trade == Trades.Carpentry ){ value += (m.Dex*0.6)+(m.Str*0.4); if ( !raw && pm.NpcGuild == NpcGuild.CarpentryGuild ){ value += 20; } } + else if ( trade == Trades.Cartography ){ value += (m.Int*0.7)+(m.Dex*0.3); if ( !raw && pm.NpcGuild == NpcGuild.LibrariansGuild ){ value += 20; } } + else if ( trade == Trades.Cooking ){ value += (m.Int*0.75)+(m.Dex*0.25); if ( !raw ){ value += 10; } } + else if ( trade == Trades.Fishing ){ value += (m.Str*0.6)+(m.Dex*0.4); if ( !raw && pm.NpcGuild == NpcGuild.MarinersGuild ){ value += 20; } } + else if ( trade == Trades.Fletching ){ value += (m.Dex*0.7)+(m.Str*0.3); if ( !raw && pm.NpcGuild == NpcGuild.RangersGuild ){ value += 20; } } + else if ( trade == Trades.Inscribe ){ value += (m.Int*0.85)+(m.Dex*0.15); if ( !raw && pm.NpcGuild == NpcGuild.LibrariansGuild ){ value += 20; } } + else if ( trade == Trades.Lumberjacking ){ value += (m.Str*0.8)+(m.Dex*0.2); if ( !raw && pm.NpcGuild == NpcGuild.CarpentryGuild ){ value += 20; } } + else if ( trade == Trades.Mining ){ value += (double)(m.Str); if ( !raw && pm.NpcGuild == NpcGuild.BlacksmithsGuild ){ value += 20; } } + else if ( trade == Trades.Tailoring ){ value += (m.Dex*0.65)+(m.Int*0.35); if ( !raw && pm.NpcGuild == NpcGuild.TailorsGuild ){ value += 20; } } + else if ( trade == Trades.Tinkering ){ value += (m.Dex*0.5)+(m.Int*0.5); if ( !raw && pm.NpcGuild == NpcGuild.TinkersGuild ){ value += 20; } } + } + + if ( value > 100 ) + value = 100; + + return value; + } + + public static string TradeStat( Trades trade ) + { + string stat = "STR"; + + if ( trade == Trades.Alchemy ){ if ( Utility.RandomMinMax(1,100) <= 75 ){ stat = "INT"; } else { stat = "DEX"; } } + else if ( trade == Trades.Blacksmith ){ if ( Utility.RandomMinMax(1,100) <= 85 ){ stat = "STR"; } else { stat = "DEX"; } } + else if ( trade == Trades.Carpentry ){ if ( Utility.RandomMinMax(1,100) <= 60 ){ stat = "DEX"; } else { stat = "STR"; } } + else if ( trade == Trades.Cartography ){ if ( Utility.RandomMinMax(1,100) <= 70 ){ stat = "INT"; } else { stat = "DEX"; } } + else if ( trade == Trades.Cooking ){ if ( Utility.RandomMinMax(1,100) <= 75 ){ stat = "INT"; } else { stat = "DEX"; } } + else if ( trade == Trades.Fishing ){ if ( Utility.RandomMinMax(1,100) <= 60 ){ stat = "STR"; } else { stat = "DEX"; } } + else if ( trade == Trades.Fletching ){ if ( Utility.RandomMinMax(1,100) <= 70 ){ stat = "DEX"; } else { stat = "STR"; } } + else if ( trade == Trades.Inscribe ){ if ( Utility.RandomMinMax(1,100) <= 85 ){ stat = "INT"; } else { stat = "DEX"; } } + else if ( trade == Trades.Lumberjacking ){ if ( Utility.RandomMinMax(1,100) <= 80 ){ stat = "STR"; } else { stat = "DEX"; } } + else if ( trade == Trades.Mining ){ stat = "STR"; } + else if ( trade == Trades.Tailoring ){ if ( Utility.RandomMinMax(1,100) <= 65 ){ stat = "DEX"; } else { stat = "INT"; } } + else if ( trade == Trades.Tinkering ){ if ( Utility.RandomMinMax(1,100) <= 50 ){ stat = "DEX"; } else { stat = "INT"; } } + + return stat; + } + + public static double GetRandomNumber( double minimum, double maximum ) + { + Random random = new Random(); + return random.NextDouble() * (maximum - minimum) + minimum; + } + + public static bool TestTrade( Mobile m, Trades trade, double min, double max ) + { + if ( trade == Trades.Magery ) + { + if ( m.Skills[SkillName.Magery].Value >= GetRandomNumber( min, max ) ) + return true; + else + return false; + } + else if ( trade == Trades.Musicianship ) + { + if ( m.Skills[SkillName.Musicianship].Value >= GetRandomNumber( min, max ) ) + return true; + else + return false; + } + else if ( TradeSkill( m, trade, false ) >= GetRandomNumber( min, max ) ) + { + double gc = (double)(m.Skills.Cap - m.Skills.Total) / m.Skills.Cap; + gc += ( 100 - TradeSkill( m, trade, true ) ) / 100; + gc /= 2; + + gc += 0.5; + gc /= 2; + + gc *= 1.0; + + if ( gc < 0.01 ) + gc = 0.01; + + if ( gc >= Utility.RandomDouble() ) + TradeStatGain( m, TradeStat( trade ) ); + + return true; + } + + return false; + } + + public static void TradeStatGain( Mobile from, string stat ) + { + if ( stat == "STR" && from.StrLock == StatLockType.Up && (0.5 / 33.3) > Utility.RandomDouble() ) + GainStat( from, Stat.Str ); + else if ( stat == "DEX" && from.DexLock == StatLockType.Up && (0.5 / 33.3) > Utility.RandomDouble() ) + GainStat( from, Stat.Dex ); + else if ( stat == "INT" && from.IntLock == StatLockType.Up && (0.5 / 33.3) > Utility.RandomDouble() ) + GainStat( from, Stat.Int ); + } + + public static bool IsGuildSkill( Mobile from, SkillName skillName ) + { + if ( from is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)from; + + if ( pm.NpcGuild == NpcGuild.MagesGuild ) + { + if ( skillName == SkillName.Concentration ){ return true; } + else if ( skillName == SkillName.Magery ){ return true; } + else if ( skillName == SkillName.Meditation ){ return true; } + } + else if ( pm.NpcGuild == NpcGuild.WarriorsGuild ) + { + if ( skillName == SkillName.Fencing ){ return true; } + else if ( skillName == SkillName.Bludgeoning ){ return true; } + else if ( skillName == SkillName.Parry ){ return true; } + else if ( skillName == SkillName.Swords ){ return true; } + else if ( skillName == SkillName.Tactics ){ return true; } + } + else if ( pm.NpcGuild == NpcGuild.ThievesGuild ) + { + if ( skillName == SkillName.Hiding ){ return true; } + else if ( skillName == SkillName.Lockpicking ){ return true; } + else if ( skillName == SkillName.Stealing ){ return true; } + else if ( skillName == SkillName.Stealth ){ return true; } + } + else if ( pm.NpcGuild == NpcGuild.RangersGuild ) + { + if ( skillName == SkillName.Archery ){ return true; } + else if ( skillName == SkillName.Tracking ){ return true; } + else if ( skillName == SkillName.Tactics ){ return true; } + } + else if ( pm.NpcGuild == NpcGuild.HealersGuild ) + { + if ( skillName == SkillName.Healing ){ return true; } + } + else if ( pm.NpcGuild == NpcGuild.BardsGuild ) + { + if ( skillName == SkillName.Discordance ){ return true; } + else if ( skillName == SkillName.Musicianship ){ return true; } + else if ( skillName == SkillName.Peacemaking ){ return true; } + else if ( skillName == SkillName.Provocation ){ return true; } + } + else if ( pm.NpcGuild == NpcGuild.AssassinsGuild ) + { + if ( skillName == SkillName.Fencing ){ return true; } + else if ( skillName == SkillName.Hiding ){ return true; } + else if ( skillName == SkillName.Poisoning ){ return true; } + else if ( skillName == SkillName.Stealth ){ return true; } + } + } + return false; + } + + public static bool IsHealSkill( Mobile from, SkillName skillName ) + { + if ( from is PlayerMobile ) + { + PlayerMobile pm = (PlayerMobile)from; + + if ( pm.NpcGuild == NpcGuild.HealersGuild ) + if ( skillName == SkillName.Healing ){ return true; } + } + return false; + } + + public static bool Mobile_SkillCheckLocation( Mobile from, SkillName skillName, double minSkill, double maxSkill ) + { + Skill skill = from.Skills[skillName]; + + if ( skill == null ) + return false; + + double value = skill.Value; + + if ( value < minSkill ) + return false; // Too difficult + else if ( value >= maxSkill ) + return true; // No challenge + + double chance = (value - minSkill) / (maxSkill - minSkill); + + Point2D loc = new Point2D( from.Location.X / LocationSize, from.Location.Y / LocationSize ); + return CheckSkill( from, skill, loc, chance ); + } + + public static bool Mobile_SkillCheckDirectLocation( Mobile from, SkillName skillName, double chance ) + { + Skill skill = from.Skills[skillName]; + + if ( skill == null ) + return false; + + if ( chance < 0.0 ) + return false; // Too difficult + else if ( chance >= 1.0 ) + return true; // No challenge + + Point2D loc = new Point2D( from.Location.X / LocationSize, from.Location.Y / LocationSize ); + return CheckSkill( from, skill, loc, chance ); + } + + public static bool CheckSkill( Mobile from, Skill skill, object amObj, double chance ) + { + SkillName skillName = skill.SkillName; + + if ( from.Skills.Cap == 0 ) + return false; + + double gainer = 2.0; + + if ( from is PlayerMobile ) + { + if ( IsGuildSkill( from, skillName ) ) + { + switch( Utility.RandomMinMax( 0, 5 ) ) + { + case 0: gainer = 1.5; break; + case 1: gainer = 1.4; break; + case 2: gainer = 1.3; break; + case 3: gainer = 1.2; break; + case 4: gainer = 1.1; break; + case 5: gainer = 1.0; break; + } + } + } + + if ( IsHealSkill( from, skillName ) ) + gainer = 1.0; + + bool success = ( chance >= Utility.RandomDouble() ); + double gc = (double)(from.Skills.Cap - from.Skills.Total) / from.Skills.Cap; + gc += ( skill.Cap - skill.Base ) / skill.Cap; + gc /= gainer; + + gc += ( 1.0 - chance ) * ( success ? 0.5 : 0.2 ); + gc /= gainer; + + gc *= skill.Info.GainFactor; + + if ( gc < 0.01 ) + gc = 0.01; + + if ( from is BaseCreature && ((BaseCreature)from).Controlled ) + gc *= 2; + + if ( from.Alive && ( ( gc >= Utility.RandomDouble() && AllowGain( from, skill, amObj ) ) || skill.Base < 10.0 ) ) + Gain( from, skill ); + + return success; + } + + public static bool Mobile_SkillCheckTarget( Mobile from, SkillName skillName, object target, double minSkill, double maxSkill ) + { + Skill skill = from.Skills[skillName]; + + if ( skill == null ) + return false; + + double value = skill.Value; + + if ( value < minSkill ) + return false; // Too difficult + else if ( value >= maxSkill ) + return true; // No challenge + + double chance = (value - minSkill) / (maxSkill - minSkill); + + return CheckSkill( from, skill, target, chance ); + } + + public static bool Mobile_SkillCheckDirectTarget( Mobile from, SkillName skillName, object target, double chance ) + { + Skill skill = from.Skills[skillName]; + + if ( skill == null ) + return false; + + if ( chance < 0.0 ) + return false; // Too difficult + else if ( chance >= 1.0 ) + return true; // No challenge + + return CheckSkill( from, skill, target, chance ); + } + + private static bool AllowGain( Mobile from, Skill skill, object obj ) + { + if ( AntiMacroCode && from is PlayerMobile && UseAntiMacro[skill.Info.SkillID] ) + return ((PlayerMobile)from).AntiMacroCheck( skill, obj ); + else + return true; + } + + public enum Stat { Str, Dex, Int } + + public static void Gain( Mobile from, Skill skill ) + { + if ( from is BaseCreature && ((BaseCreature)from).IsDeadPet ) + return; + + if ( skill.Base < skill.Cap && skill.Lock == SkillLock.Up ) + { + int toGain = 1; + + if ( skill.Base <= 10.0 ) + toGain = Utility.Random( 4 ) + 1; + + Skills skills = from.Skills; + + if ( from.Player && ( skills.Total / skills.Cap ) >= Utility.RandomDouble() )//( skills.Total >= skills.Cap ) + { + for ( int i = 0; i < skills.Length; ++i ) + { + Skill toLower = skills[i]; + + if ( toLower != skill && toLower.Lock == SkillLock.Down && toLower.BaseFixedPoint >= toGain ) + { + toLower.BaseFixedPoint -= toGain; + break; + } + } + } + + if ( !from.Player || (skills.Total + toGain) <= skills.Cap ) + { + skill.BaseFixedPoint += toGain; + } + } + + if ( skill.Lock == SkillLock.Up ) + { + SkillInfo info = skill.Info; + + if ( from.StrLock == StatLockType.Up && (info.StrGain / 33.3) > Utility.RandomDouble() ) + GainStat( from, Stat.Str ); + else if ( from.DexLock == StatLockType.Up && (info.DexGain / 33.3) > Utility.RandomDouble() ) + GainStat( from, Stat.Dex ); + else if ( from.IntLock == StatLockType.Up && (info.IntGain / 33.3) > Utility.RandomDouble() ) + GainStat( from, Stat.Int ); + } + } + + public static bool CanLower( Mobile from, Stat stat ) + { + switch ( stat ) + { + case Stat.Str: return ( from.StrLock == StatLockType.Down && from.RawStr > 10 ); + case Stat.Dex: return ( from.DexLock == StatLockType.Down && from.RawDex > 10 ); + case Stat.Int: return ( from.IntLock == StatLockType.Down && from.RawInt > 10 ); + } + + return false; + } + + public static bool CanRaise( Mobile from, Stat stat ) + { + if ( !(from is BaseCreature && ((BaseCreature)from).Controlled) ) + { + if ( from.RawStatTotal >= from.StatCap ) + return false; + } + + switch ( stat ) + { + case Stat.Str: return ( from.StrLock == StatLockType.Up && from.RawStr < 125 ); + case Stat.Dex: return ( from.DexLock == StatLockType.Up && from.RawDex < 125 ); + case Stat.Int: return ( from.IntLock == StatLockType.Up && from.RawInt < 125 ); + } + + return false; + } + + public static void IncreaseStat( Mobile from, Stat stat, bool atrophy ) + { + atrophy = atrophy || (from.RawStatTotal >= from.StatCap); + + switch ( stat ) + { + case Stat.Str: + { + if ( atrophy ) + { + if ( CanLower( from, Stat.Dex ) && (from.RawDex < from.RawInt || !CanLower( from, Stat.Int )) ) + --from.RawDex; + else if ( CanLower( from, Stat.Int ) ) + --from.RawInt; + } + + if ( CanRaise( from, Stat.Str ) ) + ++from.RawStr; + + break; + } + case Stat.Dex: + { + if ( atrophy ) + { + if ( CanLower( from, Stat.Str ) && (from.RawStr < from.RawInt || !CanLower( from, Stat.Int )) ) + --from.RawStr; + else if ( CanLower( from, Stat.Int ) ) + --from.RawInt; + } + + if ( CanRaise( from, Stat.Dex ) ) + ++from.RawDex; + + break; + } + case Stat.Int: + { + if ( atrophy ) + { + if ( CanLower( from, Stat.Str ) && (from.RawStr < from.RawDex || !CanLower( from, Stat.Dex )) ) + --from.RawStr; + else if ( CanLower( from, Stat.Dex ) ) + --from.RawDex; + } + + if ( CanRaise( from, Stat.Int ) ) + ++from.RawInt; + + break; + } + } + } + + private static TimeSpan m_StatGainDelay = TimeSpan.FromMinutes( 15.0 ); + private static TimeSpan m_PetStatGainDelay = TimeSpan.FromMinutes( 5.0 ); + + public static void GainStat( Mobile from, Stat stat ) + { + switch( stat ) + { + case Stat.Str: + { + if ( from is BaseCreature && ((BaseCreature)from).Controlled ) { + if ( (from.LastStrGain + m_PetStatGainDelay) >= DateTime.Now ) + return; + } + else if( (from.LastStrGain + m_StatGainDelay) >= DateTime.Now ) + return; + + from.LastStrGain = DateTime.Now; + break; + } + case Stat.Dex: + { + if ( from is BaseCreature && ((BaseCreature)from).Controlled ) { + if ( (from.LastDexGain + m_PetStatGainDelay) >= DateTime.Now ) + return; + } + else if( (from.LastDexGain + m_StatGainDelay) >= DateTime.Now ) + return; + + from.LastDexGain = DateTime.Now; + break; + } + case Stat.Int: + { + if ( from is BaseCreature && ((BaseCreature)from).Controlled ) { + if ( (from.LastIntGain + m_PetStatGainDelay) >= DateTime.Now ) + return; + } + + else if( (from.LastIntGain + m_StatGainDelay) >= DateTime.Now ) + return; + + from.LastIntGain = DateTime.Now; + break; + } + } + + bool atrophy = ( (from.RawStatTotal / (double)from.StatCap) >= Utility.RandomDouble() ); + + IncreaseStat( from, stat, atrophy ); + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Stealing.cs b/Scripts/Skills/Stealing.cs new file mode 100644 index 0000000..615041d --- /dev/null +++ b/Scripts/Skills/Stealing.cs @@ -0,0 +1,457 @@ +using System; +using Server; +using System.Collections; +using Server.Mobiles; +using Server.Targeting; +using Server.Items; +using Server.Network; +using Server.Spells.Seventh; +using Server.Spells.Fifth; +using Server.Spells; +using Server.Misc; +using Server.Regions; + +namespace Server.SkillHandlers +{ + public class Stealing + { + public static void Initialize() + { + SkillInfo.Table[22].Callback = new SkillUseCallback( OnUse ); + } + + public static readonly bool ClassicMode = true; + public static readonly bool SuspendOnMurder = false; + + public static bool IsInGuild( Mobile m ) + { + return ( m is PlayerMobile && ((PlayerMobile)m).NpcGuild == NpcGuild.ThievesGuild ); + } + + public static bool IsInnocentTo( Mobile from, Mobile to ) + { + return ( Notoriety.Compute( from, (Mobile)to ) == Notoriety.Innocent ); + } + + private class StealingTarget : Target + { + private Mobile m_Thief; + + public StealingTarget( Mobile thief ) : base ( 1, false, TargetFlags.None ) + { + m_Thief = thief; + + AllowNonlocal = true; + } + + private Item TryStealItem( Item toSteal, ref bool caught ) + { + Item stolen = null; + + object root = toSteal.RootParent; + + if ( !IsEmptyHanded( m_Thief ) ) + { + m_Thief.SendLocalizedMessage( 1005584 ); // Both hands must be free to steal. + } + else if ( root is Mobile && ((Mobile)root).Invulnerable ) + { + m_Thief.SendLocalizedMessage( 1005598 ); // You can't steal from them. + } + else if ( root is PlayerVendor ) + { + m_Thief.SendLocalizedMessage( 502709 ); // You can't steal from vendors. + } + else if ( !m_Thief.CanSee( toSteal ) ) + { + m_Thief.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( m_Thief.Backpack == null || !m_Thief.Backpack.CheckHold( m_Thief, toSteal, false, true ) ) + { + m_Thief.SendLocalizedMessage( 1048147 ); // Your backpack can't hold anything else. + } + else if ( toSteal.Parent == null || !toSteal.Movable ) + { + m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that! + } + else if ( !m_Thief.InRange( toSteal.GetWorldLocation(), 1 ) ) + { + m_Thief.SendLocalizedMessage( 502703 ); // You must be standing next to an item to steal it. + } + else if ( toSteal.Parent is Mobile ) + { + m_Thief.SendLocalizedMessage( 1005585 ); // You cannot steal items which are equiped. + } + else if ( root == m_Thief ) + { + m_Thief.SendLocalizedMessage( 502704 ); // You catch yourself red-handed. + } + else if ( root is Mobile && ((Mobile)root).AccessLevel > AccessLevel.Player ) + { + m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that! + } + else if ( root is Mobile && !m_Thief.CanBeHarmful( (Mobile)root ) ) + { + } + else if ( root is Corpse ) + { + m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that! + } + else + { + double w = toSteal.Weight + toSteal.TotalWeight; + + if ( w > 10 ) + { + m_Thief.SendMessage( "That is too heavy to steal." ); + } + else + { + if ( toSteal.Stackable && toSteal.Amount > 1 ) + { + int maxAmount = (int)((m_Thief.Skills[SkillName.Stealing].Value / 10.0) / toSteal.Weight); + + if ( maxAmount < 1 ) + maxAmount = 1; + else if ( maxAmount > toSteal.Amount ) + maxAmount = toSteal.Amount; + + int amount = Utility.RandomMinMax( 1, maxAmount ); + + if ( amount >= toSteal.Amount ) + { + int pileWeight = (int)Math.Ceiling( toSteal.Weight * toSteal.Amount ); + pileWeight *= 10; + + if ( m_Thief.CheckTargetSkill( SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5 ) ) + stolen = toSteal; + } + else + { + int pileWeight = (int)Math.Ceiling( toSteal.Weight * amount ); + pileWeight *= 10; + + if ( m_Thief.CheckTargetSkill( SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5 ) ) + { + stolen = Mobile.LiftItemDupe( toSteal, toSteal.Amount - amount ); + + if ( stolen == null ) + stolen = toSteal; + } + } + } + else + { + int iw = (int)Math.Ceiling( w ); + iw *= 10; + + if ( m_Thief.CheckTargetSkill( SkillName.Stealing, toSteal, iw - 22.5, iw + 27.5 ) ) + stolen = toSteal; + } + + if ( stolen != null ) + { + m_Thief.SendLocalizedMessage( 502724 ); // You succesfully steal the item. + } + else + { + m_Thief.SendLocalizedMessage( 502723 ); // You fail to steal the item. + } + + caught = ( m_Thief.Skills[SkillName.Stealing].Value < Utility.Random( 150 ) ); + } + } + + return stolen; + } + + protected override void OnTarget( Mobile from, object target ) + { + from.RevealingAction(); + + Item stolen = null; + object root = null; + bool caught = false; + + if ( target is Item ) + { + root = ((Item)target).RootParent; + stolen = TryStealItem( (Item)target, ref caught ); + } + else if ( target is Mobile ) + { + Container pack = ((Mobile)target).Backpack; + + if ( pack != null && pack.Items.Count > 0 ) + { + int randomIndex = Utility.Random( pack.Items.Count ); + + root = target; + stolen = TryStealItem( pack.Items[randomIndex], ref caught ); + } + } + else + { + m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that! + } + + if ( stolen != null ) + { + from.AddToBackpack( stolen ); + + StolenItem.Add( stolen, m_Thief, root as Mobile ); + } + + if ( caught ) + { + if ( root == null ) + { + m_Thief.CriminalAction( false ); + } + else if ( root is Corpse && ((Corpse)root).IsCriminalAction( m_Thief ) ) + { + m_Thief.CriminalAction( false ); + } + else if ( root is Mobile ) + { + Mobile mobRoot = (Mobile)root; + + if ( !IsInGuild( mobRoot ) && IsInnocentTo( m_Thief, mobRoot ) ) + m_Thief.CriminalAction( false ); + + string message = String.Format( "You notice {0} trying to steal from {1}.", m_Thief.Name, mobRoot.Name ); + + foreach ( NetState ns in m_Thief.GetClientsInRange( 8 ) ) + { + if ( ns.Mobile != m_Thief ) + ns.Mobile.SendMessage( message ); + } + } + } + else if ( root is Corpse && ((Corpse)root).IsCriminalAction( m_Thief ) ) + { + m_Thief.CriminalAction( false ); + } + + if ( root is Mobile && ((Mobile)root).Player && m_Thief is PlayerMobile && IsInnocentTo( m_Thief, (Mobile)root ) && !IsInGuild( (Mobile)root ) ) + { + PlayerMobile pm = (PlayerMobile)m_Thief; + + pm.PermaFlags.Add( (Mobile)root ); + pm.Delta( MobileDelta.Noto ); + } + } + } + + public static bool IsEmptyHanded( Mobile from ) + { + if ( Server.Misc.Settings.CanStealWhileHoldingThings() ) + return true; + + if ( from.FindItemOnLayer( Layer.OneHanded ) != null ) + return false; + + if ( from.FindItemOnLayer( Layer.TwoHanded ) != null ) + return false; + + return true; + } + + public static TimeSpan OnUse( Mobile m ) + { + if ( !IsEmptyHanded( m ) ) + { + m.SendLocalizedMessage( 1005584 ); // Both hands must be free to steal. + } + else + { + m.Target = new Stealing.StealingTarget( m ); + m.RevealingAction(); + + m.SendLocalizedMessage( 502698 ); // Which item do you want to steal? + } + + return TimeSpan.FromSeconds( 10.0 ); + } + } + + public class StolenItem + { + public static readonly TimeSpan StealTime = TimeSpan.FromMinutes( 2.0 ); + + private Item m_Stolen; + private Mobile m_Thief; + private Mobile m_Victim; + private DateTime m_Expires; + + public Item Stolen{ get{ return m_Stolen; } } + public Mobile Thief{ get{ return m_Thief; } } + public Mobile Victim{ get{ return m_Victim; } } + public DateTime Expires{ get{ return m_Expires; } } + + public bool IsExpired{ get{ return ( DateTime.Now >= m_Expires ); } } + + public StolenItem( Item stolen, Mobile thief, Mobile victim ) + { + m_Stolen = stolen; + m_Thief = thief; + m_Victim = victim; + + m_Expires = DateTime.Now + StealTime; + } + + private static Queue m_Queue = new Queue(); + + public static void Add( Item item, Mobile thief, Mobile victim ) + { + Clean(); + + m_Queue.Enqueue( new StolenItem( item, thief, victim ) ); + } + + public static bool IsStolen( Item item ) + { + Mobile victim = null; + + return IsStolen( item, ref victim ); + } + + public static bool IsStolen( Item item, ref Mobile victim ) + { + Clean(); + + foreach ( StolenItem si in m_Queue ) + { + if ( si.m_Stolen == item && !si.IsExpired ) + { + victim = si.m_Victim; + return true; + } + } + + return false; + } + + public static void ReturnOnDeath( Mobile killed, Container corpse ) + { + Clean(); + + foreach ( StolenItem si in m_Queue ) + { + if ( si.m_Stolen.RootParent == corpse && si.m_Victim != null && !si.IsExpired ) + { + if ( si.m_Victim.AddToBackpack( si.m_Stolen ) ) + si.m_Victim.SendLocalizedMessage( 1010464 ); // the item that was stolen is returned to you. + else + si.m_Victim.SendLocalizedMessage( 1010463 ); // the item that was stolen from you falls to the ground. + + si.m_Expires = DateTime.Now; // such a hack + } + } + } + + public static void Clean() + { + while ( m_Queue.Count > 0 ) + { + StolenItem si = (StolenItem) m_Queue.Peek(); + + if ( si.IsExpired ) + m_Queue.Dequeue(); + else + break; + } + } + } + + public class Snooping + { + public static void Configure() + { + Container.SnoopHandler = new ContainerSnoopHandler( Container_Snoop ); + } + + public static bool CheckSnoopAllowed( Mobile from, Mobile to ) + { + Map map = from.Map; + + if ( to.Player ) + return from.CanBeHarmful( to, false, true ); // normal restrictions + + if ( map != null && (map.Rules & MapRules.HarmfulRestrictions) == 0 ) + return true; + + BaseCreature cret = to as BaseCreature; + + if ( to.Body.IsHuman && (cret == null || (!cret.AlwaysAttackable && !cret.AlwaysMurderer)) ) + return false; // in town we cannot snoop blue human npcs + + return true; + } + + public static void Container_Snoop( Container cont, Mobile from ) + { + if ( from.AccessLevel > AccessLevel.Player || from.InRange( cont.GetWorldLocation(), 1 ) ) + { + Mobile root = cont.RootParent as Mobile; + + if ( root != null && !root.Alive ) + return; + + if ( root != null && root.AccessLevel > AccessLevel.Player && from.AccessLevel == AccessLevel.Player ) + { + from.SendLocalizedMessage( 500209 ); // You can not peek into the container. + return; + } + + if ( root != null && from.AccessLevel == AccessLevel.Player && !CheckSnoopAllowed( from, root ) ) + { + from.SendLocalizedMessage( 1001018 ); // You cannot perform negative acts on your target. + return; + } + + if ( root != null && from.AccessLevel == AccessLevel.Player && from.Skills[SkillName.Stealing].Value < Utility.Random( 100 ) ) + { + Map map = from.Map; + + if ( map != null ) + { + string message = String.Format( "You notice {0} attempting to peek into {1}'s belongings.", from.Name, root.Name ); + + IPooledEnumerable eable = map.GetClientsInRange( from.Location, 8 ); + + foreach ( NetState ns in eable ) + { + if ( ns.Mobile != from ) + ns.Mobile.SendMessage( message ); + } + + eable.Free(); + } + } + + if ( from.AccessLevel == AccessLevel.Player ) + Titles.AwardKarma( from, -4, true ); + + if ( from.AccessLevel > AccessLevel.Player || from.CheckTargetSkill( SkillName.Stealing, cont, 0.0, 50.0 ) ) + { + if ( cont is TrapableContainer && ((TrapableContainer)cont).ExecuteTrap( from ) ) + return; + + cont.DisplayTo( from ); + } + else + { + from.SendLocalizedMessage( 500210 ); // You failed to peek into the container. + + if ( from.Skills[SkillName.Hiding].Value / 2 < Utility.Random( 100 ) ) + from.RevealingAction(); + } + } + else + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Stealth.cs b/Scripts/Skills/Stealth.cs new file mode 100644 index 0000000..81eb681 --- /dev/null +++ b/Scripts/Skills/Stealth.cs @@ -0,0 +1,67 @@ +using System; +using Server.Items; +using Server.Mobiles; + +namespace Server.SkillHandlers +{ + public class Stealth + { + public static void Initialize() + { + SkillInfo.Table[(int)SkillName.Stealth].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile m ) + { + if ( !m.Hidden ) + { + m.SendLocalizedMessage( 502725 ); // You must hide first + } + else if ( m.Skills[SkillName.Hiding].Value < Utility.Random(101) ) + { + m.SendLocalizedMessage( 502731 ); // You fail in your attempt to move unnoticed. + m.RevealingAction(); + } + else if( !m.CanBeginAction( typeof( Stealth ) ) ) + { + m.SendLocalizedMessage( 1063086 ); // You cannot use this skill right now. + m.RevealingAction(); + } + else + { + int armorRating = (int)( BaseWeapon.ArmorRating( m ) / 2 ); + + if( armorRating >= 26 ) + { + m.SendLocalizedMessage( 502727 ); // You could not hope to move quietly wearing this much armor. + m.RevealingAction(); + } + else if( m.CheckSkill( SkillName.Stealth, -20.0 + (armorRating * 2), 80.0 + (armorRating * 2) ) ) + { + int steps = (int)(m.Skills[SkillName.Stealth].Value / 10.0); + + if( steps < 1 ) + steps = 1; + + m.AllowedStealthSteps = steps; + + PlayerMobile pm = m as PlayerMobile; // IsStealthing should be moved to Server.Mobiles + + if( pm != null ) + pm.IsStealthing = true; + + m.SendLocalizedMessage( 502730 ); // You begin to move quietly. + + return TimeSpan.FromSeconds( 10.0 ); + } + else + { + m.SendLocalizedMessage( 502731 ); // You fail in your attempt to move unnoticed. + m.RevealingAction(); + } + } + + return TimeSpan.FromSeconds( 10.0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/Tracking.cs b/Scripts/Skills/Tracking.cs new file mode 100644 index 0000000..e861bbf --- /dev/null +++ b/Scripts/Skills/Tracking.cs @@ -0,0 +1,428 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Spells; +using Server.Mobiles; +using Server.Items; +using Server.Regions; + +namespace Server.SkillHandlers +{ + public class Tracking + { + public static void Initialize() + { + SkillInfo.Table[(int)SkillName.Tracking].Callback = new SkillUseCallback( OnUse ); + } + + public static TimeSpan OnUse( Mobile m ) + { + m.SendLocalizedMessage( 1011350 ); // What do you wish to track? + + m.CloseGump( typeof( TrackWhatGump ) ); + m.CloseGump( typeof( TrackWhoGump ) ); + m.SendGump( new TrackWhatGump( m ) ); + + return TimeSpan.FromSeconds( 10.0 ); // 10 second delay before beign able to re-use a skill + } + + public class TrackingInfo + { + public Mobile m_Tracker; + public Mobile m_Target; + public Point2D m_Location; + public Map m_Map; + + public TrackingInfo( Mobile tracker, Mobile target ) + { + m_Tracker = tracker; + m_Target = target; + m_Location = new Point2D( target.X, target.Y ); + m_Map = target.Map; + } + } + + private static Dictionary m_Table = new Dictionary(); + + public static void AddInfo( Mobile tracker, Mobile target ) + { + TrackingInfo info = new TrackingInfo( tracker, target ); + m_Table[tracker] = info; + } + + public static double GetStalkingBonus( Mobile tracker, Mobile target ) + { + TrackingInfo info = null; + m_Table.TryGetValue( tracker, out info ); + + if ( info == null || info.m_Target != target || info.m_Map != target.Map ) + return 0.0; + + int xDelta = info.m_Location.X - target.X; + int yDelta = info.m_Location.Y - target.Y; + + double bonus = Math.Sqrt( (xDelta * xDelta) + (yDelta * yDelta) ); + + m_Table.Remove( tracker ); + + return bonus; + } + + + public static void ClearTrackingInfo( Mobile tracker ) + { + m_Table.Remove( tracker ); + } + } + + public class TrackWhatGump : Gump + { + private Mobile m_From; + private bool m_Success; + + public TrackWhatGump( Mobile from ) : base( 20, 30 ) + { + m_From = from; + m_Success = from.CheckSkill( SkillName.Tracking, 0.0, 21.1 ); + + AddPage( 0 ); + + AddBackground( 0, 0, 440, 135, 5054 ); + + AddBackground( 10, 10, 420, 75, 2620 ); + AddBackground( 10, 85, 420, 25, 3000 ); + + AddItem( 20, 20, 9682 ); + AddButton( 20, 110, 4005, 4007, 1, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 20, 90, 100, 20, 1018087, false, false ); // Animals + + AddItem( 120, 20, 9607 ); + AddButton( 120, 110, 4005, 4007, 2, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 120, 90, 100, 20, 1018088, false, false ); // Monsters + + AddItem( 220, 20, 8454 ); + AddButton( 220, 110, 4005, 4007, 3, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 220, 90, 100, 20, 1018089, false, false ); // Human NPCs + + AddItem( 320, 20, 8455 ); + AddButton( 320, 110, 4005, 4007, 4, GumpButtonType.Reply, 0 ); + AddHtmlLocalized( 320, 90, 100, 20, 1018090, false, false ); // Players + } + + public override void OnResponse( NetState state, RelayInfo info ) + { + if ( info.ButtonID >= 1 && info.ButtonID <= 4 ) + TrackWhoGump.DisplayTo( m_Success, m_From, info.ButtonID - 1 ); + } + } + + public delegate bool TrackTypeDelegate( Mobile m ); + + public class TrackWhoGump : Gump + { + private Mobile m_From; + private int m_Range; + + private static TrackTypeDelegate[] m_Delegates = new TrackTypeDelegate[] + { + new TrackTypeDelegate( IsAnimal ), + new TrackTypeDelegate( IsMonster ), + new TrackTypeDelegate( IsHumanNPC ), + new TrackTypeDelegate( IsPlayer ) + }; + + private class InternalSorter : IComparer + { + private Mobile m_From; + + public InternalSorter( Mobile from ) + { + m_From = from; + } + + public int Compare( Mobile x, Mobile y ) + { + if ( x == null && y == null ) + return 0; + else if ( x == null ) + return -1; + else if ( y == null ) + return 1; + + return m_From.GetDistanceToSqrt( x ).CompareTo( m_From.GetDistanceToSqrt( y ) ); + } + } + + public static void DisplayTo( bool success, Mobile from, int type ) + { + if ( !success ) + { + from.SendLocalizedMessage( 1018092 ); // You see no evidence of those in the area. + return; + } + + Map map = from.Map; + + if ( map == null ) + return; + + TrackTypeDelegate check = m_Delegates[type]; + + from.CheckSkill( SkillName.Tracking, 21.1, 100.0 ); // Passive gain + + int range = 10 + (int)(from.Skills[SkillName.Tracking].Value / 10); + + List list = new List(); + + foreach ( Mobile m in from.GetMobilesInRange( range ) ) + { + if ( ( m.Map == Map.Underworld || m.Region is GraveRegion ) && m is BaseCreature && m.Hidden ) + list.Add( m ); + else if ( m != from && (!m.Hidden || m.AccessLevel == AccessLevel.Player || from.AccessLevel > m.AccessLevel) && check( m ) && CheckDifficulty( from, m ) ) + list.Add( m ); + } + + if ( list.Count > 0 ) + { + list.Sort( new InternalSorter( from ) ); + + from.SendGump( new TrackWhoGump( from, list, range ) ); + from.SendLocalizedMessage( 1018093 ); // Select the one you would like to track. + } + else + { + if ( type == 0 ) + from.SendLocalizedMessage( 502991 ); // You see no evidence of animals in the area. + else if ( type == 1 ) + from.SendLocalizedMessage( 502993 ); // You see no evidence of creatures in the area. + else + from.SendLocalizedMessage( 502995 ); // You see no evidence of people in the area. + } + } + + // Tracking players uses tracking and detect hidden vs. hiding and stealth + private static bool CheckDifficulty( Mobile from, Mobile m ) + { + return true; + } + + private static bool IsAnimal( Mobile m ) + { + return ( !m.Player && m.Body.IsAnimal ); + } + + private static bool IsMonster( Mobile m ) + { + return ( !m.Player && m.Body.IsMonster ); + } + + private static bool IsHumanNPC( Mobile m ) + { + return ( !m.Player && m.Body.IsHuman ); + } + + private static bool IsPlayer( Mobile m ) + { + return m.Player; + } + + private List m_List; + + private TrackWhoGump( Mobile from, List list, int range ) : base( 20, 30 ) + { + m_From = from; + m_List = list; + m_Range = range; + + AddPage( 0 ); + + AddBackground( 0, 0, 440, 155, 5054 ); + + AddBackground( 10, 10, 420, 75, 2620 ); + AddBackground( 10, 85, 420, 45, 3000 ); + + if ( list.Count > 4 ) + { + AddBackground( 0, 155, 440, 155, 5054 ); + + AddBackground( 10, 165, 420, 75, 2620 ); + AddBackground( 10, 240, 420, 45, 3000 ); + + if ( list.Count > 8 ) + { + AddBackground( 0, 310, 440, 155, 5054 ); + + AddBackground( 10, 320, 420, 75, 2620 ); + AddBackground( 10, 395, 420, 45, 3000 ); + } + } + + for ( int i = 0; i < list.Count && i < 12; ++i ) + { + Mobile m = list[i]; + + string name = m.Name; + int icon = Utility.RandomList( 0x208E, 0x208F, 0x2090 ); // general icon + + if ( m is PlayerMobile ) + { + if ( m.Female ) + icon = Utility.RandomList( 0x208C, 0x208D ); + else + icon = Utility.RandomList( 0x208A, 0x208B ); + } + else + { + if ( m.Body.IsHuman ) + { + if ( m.Female ) + icon = Utility.RandomList( 0x209C, 0x209D, 0x209E ); + else + icon = Utility.RandomList( 0x2099, 0x209A, 0x209B ); + } + else if ( IsGiant( m ) ){ icon = 0x208F; } + else if ( IsOgre( m ) ){ icon = 0x2092; } + else if ( IsOrc( m ) ){ icon = 0x2093; } + else if ( IsTroll( m ) ){ icon = 0x2092; } + else if ( IsUndead( m ) ){ icon = 0x2098; } + else if ( IsNature( m ) ){ icon = 0x2094; } + else if ( IsElemental( m ) ){ icon = 0x2088; } + else if ( IsDemon( m ) ){ icon = 0x2082; } + else if ( IsArachnids( m ) ){ icon = 0x2097; } + else if ( IsPlant( m ) ){ icon = 0x20A0; } + else if ( IsGoblin( m ) ){ icon = 0x209F; } + else if ( IsDragon( m ) ){ icon = 0x2087; } + else if ( IsSnake( m ) || IsSerpent( m ) ){ icon = 0x2096; } + else if ( IsReptile( m ) ){ icon = 0x2091; } + else if ( IsOcean( m ) ){ icon = 0x2095; } + else if ( m is Slime || m is Sludge ){ icon = 0x20A1; } + else if ( m is EvilMage || m is EvilMageLord ){ icon = 0x2089; } + else if ( m is BaseCreature && ((BaseCreature)m).Feathers > 0 ){ icon = 0x2081; } + else if ( m.Body.IsAnimal ){ icon = 0x2080; } + } + + AddItem( 20 + ((i % 4) * 100), 26 + ((i / 4) * 155), icon ); + + AddButton( 20 + ((i % 4) * 100), 130 + ((i / 4) * 155), 4005, 4007, i + 1, GumpButtonType.Reply, 0 ); + + if ( m.Name != null ) + { + if ( m.HiddenTitle != null ) + name = name + " " + m.HiddenTitle; + else if ( m.Title != null ) + name = name + " " + m.Title; + } + + AddHtml( 20 + ((i % 4) * 100), 90 + ((i / 4) * 155), 90, 40, name, false, false ); + } + } + + private static bool IsOgre( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.OgreTrashing )).Slays(m); } + private static bool IsOrc( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.OrcSlaying )).Slays(m); } + private static bool IsTroll( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.TrollSlaughter )).Slays(m); } + private static bool IsUndead( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.UndeadDoom )).Slays(m); } + private static bool IsNature( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.NaturesFury )).Slays(m); } + private static bool IsElemental( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.ElementalBan )).Slays(m); } + private static bool IsDemon( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.Exorcism )).Slays(m); } + private static bool IsArachnids( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.BugButcher )).Slays(m); } + private static bool IsReptile( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.ReptilianDeath )).Slays(m); } + private static bool IsDragon( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.DragonSlaying )).Slays(m); } + private static bool IsSnake( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.SerpentBane )).Slays(m); } + private static bool IsSerpent( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.SerpentoidMassacre )).Slays(m); } + private static bool IsOcean( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.SeaSlaughter )).Slays(m); } + private static bool IsGoblin( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.GoblinoidHunter )).Slays(m); } + private static bool IsPlant( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.WeedWrecker )).Slays(m); } + private static bool IsGiant( Mobile m ){ return (SlayerGroup.GetEntryByName( SlayerName.GiantsFall )).Slays(m); } + + public override void OnResponse( NetState state, RelayInfo info ) + { + int index = info.ButtonID - 1; + + if ( index >= 0 && index < m_List.Count && index < 12 ) + { + Mobile m = m_List[index]; + + m_From.QuestArrow = new TrackArrow( m_From, m, m_Range * 2 ); + } + } + } + + public class TrackArrow : QuestArrow + { + private Mobile m_From; + private Timer m_Timer; + + public TrackArrow( Mobile from, Mobile target, int range ) : base( from, target ) + { + m_From = from; + m_Timer = new TrackTimer( from, target, range, this ); + m_Timer.Start(); + } + + public override void OnClick( bool rightClick ) + { + if ( rightClick ) + { + Tracking.ClearTrackingInfo( m_From ); + + m_From = null; + + Stop(); + } + } + + public override void OnStop() + { + m_Timer.Stop(); + + if ( m_From != null ) + { + Tracking.ClearTrackingInfo( m_From ); + + m_From.SendLocalizedMessage( 503177 ); // You have lost your quarry. + } + } + } + + public class TrackTimer : Timer + { + private Mobile m_From, m_Target; + private int m_Range; + private int m_LastX, m_LastY; + private QuestArrow m_Arrow; + + public TrackTimer( Mobile from, Mobile target, int range, QuestArrow arrow ) : base( TimeSpan.FromSeconds( 0.25 ), TimeSpan.FromSeconds( 2.5 ) ) + { + m_From = from; + m_Target = target; + m_Range = range; + + m_Arrow = arrow; + } + + protected override void OnTick() + { + if ( !m_Arrow.Running ) + { + Stop(); + return; + } + else if ( m_From.NetState == null || m_From.Deleted || m_Target.Deleted || m_From.Map != m_Target.Map || !m_From.InRange( m_Target, m_Range ) ) + { + m_Arrow.Stop(); + Stop(); + return; + } + + if ( m_LastX != m_Target.X || m_LastY != m_Target.Y ) + { + m_LastX = m_Target.X; + m_LastY = m_Target.Y; + + m_Arrow.Update(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Skills/TradesGump.cs b/Scripts/Skills/TradesGump.cs new file mode 100644 index 0000000..20b8097 --- /dev/null +++ b/Scripts/Skills/TradesGump.cs @@ -0,0 +1,80 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; +using Server.Misc; +using Server.Commands; + +namespace Server.Gumps +{ + public class TradesGump : Gump + { + public static void Initialize() + { + CommandSystem.Register("Trades", AccessLevel.Player, Trades_OnCommand); + } + + [Usage("Trades")] + [Description("Opens the trades skill gump.")] + public static void Trades_OnCommand(CommandEventArgs e) + { + Mobile m = e.Mobile; + m.CloseGump(typeof(TradesGump)); + m.SendGump(new TradesGump(m)); + } + public TradesGump( Mobile m ) : base( 50, 50 ) + { + string name = ""; + name = name + "" + SkillCheck.TradeName( Trades.Alchemy ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Blacksmith ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Carpentry ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Cartography ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Cooking ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Fishing ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Fletching ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Inscribe ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Lumberjacking ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Mining ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Tailoring ) + "
"; + name = name + "" + SkillCheck.TradeName( Trades.Tinkering ) + "
"; + + string level = ""; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Alchemy, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Blacksmith, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Carpentry, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Cartography, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Cooking, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Fishing, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Fletching, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Inscribe, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Lumberjacking, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Mining, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Tailoring, false )).ToString("0.0") + "
"; + level = level + "" + (SkillCheck.TradeSkill( m, Trades.Tinkering, false )).ToString("0.0") + "
"; + + this.Closable=true; + this.Disposable=true; + this.Dragable=true; + this.Resizable=false; + + AddPage(0); + AddImage(21, 313, 2083); + AddImage(19, 106, 2082); + AddImage(19, 244, 2081); + AddImage(18, 36, 2081); + AddImage(0, 0, 2080); + AddImage(42, 38, 2091); + AddImage(42, 293, 2091); + AddImage(19, 174, 2082); + AddHtml( 38, 58, 137, 226, @"" + name + "", (bool)false, (bool)false); + AddHtml( 205, 58, 48, 226, @"" + level + "", (bool)false, (bool)false); + + AddHtml( 38, 8, 231, 20, @"
TRADES
", (bool)false, (bool)false); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + } + } +} diff --git a/Scripts/Spells/1st/Clumsy.cs b/Scripts/Spells/1st/Clumsy.cs new file mode 100644 index 0000000..c1ecffd --- /dev/null +++ b/Scripts/Spells/1st/Clumsy.cs @@ -0,0 +1,79 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.First +{ + public class ClumsySpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Clumsy", "Uus Jux", + 212, + 9031, + Reagent.Bloodmoss, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.First; } } + + public ClumsySpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + SpellHelper.AddStatCurse( Caster, m, StatType.Dex ); + + if ( m.Spell != null ) + m.Spell.OnCasterHurt(); + + m.Paralyzed = false; + + m.FixedParticles( 0x3779, 10, 15, 5002, EffectLayer.Head ); + m.PlaySound( 0x1DF ); + + HarmfulSpell( m ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private ClumsySpell m_Owner; + + public InternalTarget( ClumsySpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/1st/CreateFood.cs b/Scripts/Spells/1st/CreateFood.cs new file mode 100644 index 0000000..8fdf5ca --- /dev/null +++ b/Scripts/Spells/1st/CreateFood.cs @@ -0,0 +1,95 @@ +using System; +using Server.Items; + +namespace Server.Spells.First +{ + public class CreateFoodSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Create Food", "In Mani Ylem", + 224, + 9011, + Reagent.Garlic, + Reagent.Ginseng, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.First; } } + + public CreateFoodSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + private static FoodInfo[] m_Food = new FoodInfo[] + { + new FoodInfo( typeof( Grapes ), "a grape bunch" ), + new FoodInfo( typeof( Ham ), "a ham" ), + new FoodInfo( typeof( CheeseWedge ), "a wedge of cheese" ), + new FoodInfo( typeof( Muffins ), "muffins" ), + new FoodInfo( typeof( FishSteak ), "a fish steak" ), + new FoodInfo( typeof( Ribs ), "cut of ribs" ), + new FoodInfo( typeof( CookedBird ), "a cooked bird" ), + new FoodInfo( typeof( Sausage ), "sausage" ), + new FoodInfo( typeof( Apple ), "an apple" ), + new FoodInfo( typeof( Peach ), "a peach" ) + }; + + public override void OnCast() + { + if ( CheckSequence() ) + { + FoodInfo foodInfo = m_Food[Utility.Random( m_Food.Length )]; + Item food = foodInfo.Create(); + + if ( food != null ) + { + Caster.AddToBackpack( food ); + + if ( Utility.RandomBool() ) + Caster.AddToBackpack( new FlaskAle() ); + else + Caster.AddToBackpack( new FlaskWine() ); + + // You magically create food in your backpack: + Caster.SendLocalizedMessage( 1042695, true, " " + foodInfo.Name ); + + Caster.FixedParticles( 0, 10, 5, 2003, EffectLayer.RightHand ); + Caster.PlaySound( 0x1E2 ); + } + } + + FinishSequence(); + } + } + + public class FoodInfo + { + private Type m_Type; + private string m_Name; + + public Type Type{ get{ return m_Type; } set{ m_Type = value; } } + public string Name{ get{ return m_Name; } set{ m_Name = value; } } + + public FoodInfo( Type type, string name ) + { + m_Type = type; + m_Name = name; + } + + public Item Create() + { + Item item; + + try + { + item = (Item)Activator.CreateInstance( m_Type ); + } + catch + { + item = null; + } + + return item; + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/1st/Feeblemind.cs b/Scripts/Spells/1st/Feeblemind.cs new file mode 100644 index 0000000..1218aa4 --- /dev/null +++ b/Scripts/Spells/1st/Feeblemind.cs @@ -0,0 +1,79 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.First +{ + public class FeeblemindSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Feeblemind", "Rel Wis", + 212, + 9031, + Reagent.Ginseng, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.First; } } + + public FeeblemindSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + SpellHelper.AddStatCurse( Caster, m, StatType.Int ); + + if ( m.Spell != null ) + m.Spell.OnCasterHurt(); + + m.Paralyzed = false; + + m.FixedParticles( 0x3779, 10, 15, 5004, EffectLayer.Head ); + m.PlaySound( 0x1E4 ); + + HarmfulSpell( m ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private FeeblemindSpell m_Owner; + + public InternalTarget( FeeblemindSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/1st/Heal.cs b/Scripts/Spells/1st/Heal.cs new file mode 100644 index 0000000..dd05342 --- /dev/null +++ b/Scripts/Spells/1st/Heal.cs @@ -0,0 +1,89 @@ +using System; +using Server; +using Server.Targeting; +using Server.Network; +using Server.Mobiles; + +namespace Server.Spells.First +{ + public class HealSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Heal", "In Mani", + 224, + 9061, + Reagent.Garlic, + Reagent.Ginseng, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.First; } } + + public HealSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( m.IsDeadBondedPet ) + { + Caster.SendLocalizedMessage( 1060177 ); // You cannot heal a creature that is already dead! + } + else if ( m is Golem ) + { + Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500951 ); // You cannot heal that. + } + else if ( m.Poisoned ) + { + Caster.LocalOverheadMessage( MessageType.Regular, 0x22, (Caster == m) ? 1005000 : 1010398 ); + } + else if ( CheckBSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + int toHeal = (int)(Caster.Skills[SkillName.Magery].Value * 0.1); + toHeal += Utility.Random( 1, 5 ); + + //m.Heal( toHeal, Caster ); + SpellHelper.Heal( toHeal, m, Caster ); + + m.FixedParticles( 0x376A, 9, 32, 5005, EffectLayer.Waist ); + m.PlaySound( 0x1F2 ); + } + + FinishSequence(); + } + + public class InternalTarget : Target + { + private HealSpell m_Owner; + + public InternalTarget( HealSpell owner ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/1st/MagicArrow.cs b/Scripts/Spells/1st/MagicArrow.cs new file mode 100644 index 0000000..02d7cb0 --- /dev/null +++ b/Scripts/Spells/1st/MagicArrow.cs @@ -0,0 +1,88 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.First +{ + public class MagicArrowSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Magic Arrow", "In Por Ylem", + 212, + 9041, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.First; } } + + public MagicArrowSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool DelayedDamageStacking { get { return true; } } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return true; } } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + Mobile source = Caster; + + SpellHelper.Turn( source, m ); + + SpellHelper.CheckReflect( (int)this.Circle, ref source, ref m ); + + double damage = Utility.Random( 4, 4 ); + + if ( CheckResisted( m ) ) + { + damage *= 0.75; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + damage *= GetDamageScalar( m ); + + source.MovingParticles( m, 0x36E4, 5, 0, false, false, 3006, 0, 0 ); + source.PlaySound( 0x1E5 ); + + SpellHelper.Damage( this, m, damage ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private MagicArrowSpell m_Owner; + + public InternalTarget( MagicArrowSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/1st/NightSight.cs b/Scripts/Spells/1st/NightSight.cs new file mode 100644 index 0000000..2dc4b97 --- /dev/null +++ b/Scripts/Spells/1st/NightSight.cs @@ -0,0 +1,74 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server; + +namespace Server.Spells.First +{ + public class NightSightSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Night Sight", "In Lor", + 236, + 9031, + Reagent.SulfurousAsh, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.First; } } + + public NightSightSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new NightSightTarget( this ); + } + + private class NightSightTarget : Target + { + private Spell m_Spell; + + public NightSightTarget( Spell spell ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Spell = spell; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( targeted is Mobile && m_Spell.CheckBSequence( (Mobile) targeted ) ) + { + Mobile targ = (Mobile)targeted; + + SpellHelper.Turn( m_Spell.Caster, targ ); + + if ( targ.BeginAction( typeof( LightCycle ) ) ) + { + new LightCycle.NightSightTimer( targ ).Start(); + int level = (int)( LightCycle.DungeonLevel * ( from.Skills[SkillName.Magery].Value/100 ) ); + + if ( level < 0 ) + level = 0; + + targ.LightLevel = level; + + targ.FixedParticles( 0x376A, 9, 32, 5007, EffectLayer.Waist ); + targ.PlaySound( 0x1E3 ); + } + else + { + from.SendMessage( "{0} already have nightsight.", from == targ ? "You" : "They" ); + } + } + + m_Spell.FinishSequence(); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Spell.FinishSequence(); + } + } + } +} diff --git a/Scripts/Spells/1st/ReactiveArmor.cs b/Scripts/Spells/1st/ReactiveArmor.cs new file mode 100644 index 0000000..c7dd5f4 --- /dev/null +++ b/Scripts/Spells/1st/ReactiveArmor.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.First +{ + public class ReactiveArmorSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Reactive Armor", "Flam Sanct", + 236, + 9011, + Reagent.Garlic, + Reagent.SpidersSilk, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.First; } } + + public ReactiveArmorSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( Caster.MeleeDamageAbsorb > 0 ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + return false; + } + else if ( !Caster.CanBeginAction( typeof( DefensiveSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + return false; + } + + return true; + } + + private static Hashtable m_Table = new Hashtable(); + + public override void OnCast() + { + if ( Caster.MeleeDamageAbsorb > 0 ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + } + else if ( !Caster.CanBeginAction( typeof( DefensiveSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + } + else if ( CheckSequence() ) + { + if ( Caster.BeginAction( typeof( DefensiveSpell ) ) ) + { + int value = (int)(Caster.Skills[SkillName.Magery].Value + Caster.Skills[SkillName.Meditation].Value + Caster.Skills[SkillName.Concentration].Value); + value /= 3; + + if ( value < 0 ) + value = 1; + else if ( value > 75 ) + value = 75; + + Caster.MeleeDamageAbsorb = value; + + Caster.FixedParticles( 0x376A, 9, 32, 5008, EffectLayer.Waist ); + Caster.PlaySound( 0x1F2 ); + } + else + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + } + } + + FinishSequence(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/1st/Weaken.cs b/Scripts/Spells/1st/Weaken.cs new file mode 100644 index 0000000..8cfea44 --- /dev/null +++ b/Scripts/Spells/1st/Weaken.cs @@ -0,0 +1,79 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.First +{ + public class WeakenSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Weaken", "Des Mani", + 212, + 9031, + Reagent.Garlic, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.First; } } + + public WeakenSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + SpellHelper.AddStatCurse( Caster, m, StatType.Str ); + + if ( m.Spell != null ) + m.Spell.OnCasterHurt(); + + m.Paralyzed = false; + + m.FixedParticles( 0x3779, 10, 15, 5009, EffectLayer.Waist ); + m.PlaySound( 0x1E6 ); + + HarmfulSpell( m ); + } + + FinishSequence(); + } + + public class InternalTarget : Target + { + private WeakenSpell m_Owner; + + public InternalTarget( WeakenSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/2nd/Agility.cs b/Scripts/Spells/2nd/Agility.cs new file mode 100644 index 0000000..9c2bb84 --- /dev/null +++ b/Scripts/Spells/2nd/Agility.cs @@ -0,0 +1,70 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Second +{ + public class AgilitySpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Agility", "Ex Uus", + 212, + 9061, + Reagent.Bloodmoss, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Second; } } + + public AgilitySpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckBSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.AddStatBonus( Caster, m, StatType.Dex ); + + m.FixedParticles( 0x375A, 10, 15, 5010, EffectLayer.Waist ); + m.PlaySound( 0x1e7 ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private AgilitySpell m_Owner; + + public InternalTarget( AgilitySpell owner ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/2nd/Cunning.cs b/Scripts/Spells/2nd/Cunning.cs new file mode 100644 index 0000000..17fb366 --- /dev/null +++ b/Scripts/Spells/2nd/Cunning.cs @@ -0,0 +1,70 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Second +{ + public class CunningSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Cunning", "Uus Wis", + 212, + 9061, + Reagent.MandrakeRoot, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.Second; } } + + public CunningSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckBSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.AddStatBonus( Caster, m, StatType.Int ); + + m.FixedParticles( 0x375A, 10, 15, 5011, EffectLayer.Head ); + m.PlaySound( 0x1EB ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private CunningSpell m_Owner; + + public InternalTarget( CunningSpell owner ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/2nd/Cure.cs b/Scripts/Spells/2nd/Cure.cs new file mode 100644 index 0000000..1052678 --- /dev/null +++ b/Scripts/Spells/2nd/Cure.cs @@ -0,0 +1,92 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Second +{ + public class CureSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Cure", "An Nox", + 212, + 9061, + Reagent.Garlic, + Reagent.Ginseng + ); + + public override SpellCircle Circle { get { return SpellCircle.Second; } } + + public CureSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckBSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + Poison p = m.Poison; + + if ( p != null ) + { + int chanceToCure = 10000 + (int)(Caster.Skills[SkillName.Magery].Value * 75) - ((p.Level + 1) * (1750)); + + chanceToCure /= 100; + + if ( chanceToCure > Utility.Random( 100 ) ) + { + if ( m.CurePoison( Caster ) ) + { + if ( Caster != m ) + Caster.SendLocalizedMessage( 1010058 ); // You have cured the target of all poisons! + + m.SendLocalizedMessage( 1010059 ); // You have been cured of all poisons. + } + } + else + { + m.SendLocalizedMessage( 1010060 ); // You have failed to cure your target! + } + } + + m.FixedParticles( 0x373A, 10, 15, 5012, EffectLayer.Waist ); + m.PlaySound( 0x1E0 ); + } + + FinishSequence(); + } + + public class InternalTarget : Target + { + private CureSpell m_Owner; + + public InternalTarget( CureSpell owner ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/2nd/Harm.cs b/Scripts/Spells/2nd/Harm.cs new file mode 100644 index 0000000..e19c89c --- /dev/null +++ b/Scripts/Spells/2nd/Harm.cs @@ -0,0 +1,97 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Second +{ + public class HarmSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Harm", "An Mani", + 212, + 9041, + Reagent.Nightshade, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Second; } } + + public HarmSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return false; } } + + + public override double GetSlayerDamageScalar( Mobile target ) + { + return 1.0; //This spell isn't affected by slayer spellbooks + } + + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + double damage = Utility.Random( 1, 15 ); + + if ( CheckResisted( m ) ) + { + damage *= 0.75; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + damage *= GetDamageScalar( m ); + + if ( !m.InRange( Caster, 2 ) ) + damage *= 0.25; // 1/4 damage at > 2 tile range + else if ( !m.InRange( Caster, 1 ) ) + damage *= 0.50; // 1/2 damage at 2 tile range + + m.FixedParticles( 0x374A, 10, 15, 5013, EffectLayer.Waist ); + m.PlaySound( 0x1F1 ); + + SpellHelper.Damage( this, m, damage ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private HarmSpell m_Owner; + + public InternalTarget( HarmSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/2nd/MagicTrap.cs b/Scripts/Spells/2nd/MagicTrap.cs new file mode 100644 index 0000000..5fb01ac --- /dev/null +++ b/Scripts/Spells/2nd/MagicTrap.cs @@ -0,0 +1,172 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Items; +using Server.Regions; + +namespace Server.Spells.Second +{ + public class MagicTrapSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Magic Trap", "In Jux", + 212, + 9001, + Reagent.Garlic, + Reagent.SpidersSilk, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Second; } } + + public MagicTrapSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( TrapableContainer item ) + { + if ( !Caster.CanSee( item ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( item.TrapType != TrapType.None && item.TrapType != TrapType.MagicTrap ) + { + base.DoFizzle(); + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, item ); + + item.TrapType = TrapType.MagicTrap; + item.TrapPower = (int)( ( Caster.Skills[SkillName.Concentration].Value + Caster.Skills[SkillName.Magery].Value ) / 3 ); + item.TrapLevel = 0; + + Point3D loc = item.GetWorldLocation(); + + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X + 1, loc.Y, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 9502 ); + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X, loc.Y - 1, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 9502 ); + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X - 1, loc.Y, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 9502 ); + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X, loc.Y + 1, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 9502 ); + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X, loc.Y, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0, 0, 0, 5014 ); + + Effects.PlaySound( loc, item.Map, 0x1EF ); + } + + FinishSequence(); + } + + public void Doorway( BaseDoor item ) + { + if ( !(Caster.Region is DungeonRegion) ) + { + Caster.SendMessage( "This spell only works on dungeon doors." ); + } + else if ( !Caster.CanSee( item ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( item.TrapType != TrapType.None && item.TrapType != TrapType.MagicTrap ) + { + base.DoFizzle(); + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, item ); + + item.TrapType = TrapType.MagicTrap; + item.TrapPower = (int)( ( Caster.Skills[SkillName.Concentration].Value + Caster.Skills[SkillName.Magery].Value ) / 3 ); + item.TrapLevel = 0; + + Point3D loc = item.GetWorldLocation(); + + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X + 1, loc.Y, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 9502 ); + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X, loc.Y - 1, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 9502 ); + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X - 1, loc.Y, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 9502 ); + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X, loc.Y + 1, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 9502 ); + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc.X, loc.Y, loc.Z ), item.Map, EffectItem.DefaultDuration ), 0, 0, 0, 5014 ); + + Effects.PlaySound( loc, item.Map, 0x1EF ); + + double time = Caster.Skills[SkillName.Magery].Value + Caster.Skills[SkillName.Concentration].Value + 20.0; + DateTime currentTime = DateTime.Now; + DateTime laterTime = currentTime.AddSeconds(time); + + item.Rigged = laterTime; + } + + FinishSequence(); + } + + public void Targets( BaseDoor targ ) + { + if ( !(Caster.Region is DungeonRegion) ) + { + Caster.SendMessage( "This spell only works on dungeon doors." ); + } + else if ( targ.Sealed > DateTime.Now ) + { + Caster.SendMessage( "That door is already magically locked." ); + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, targ ); + + Point3D loc = targ.GetWorldLocation(); + + Effects.SendLocationParticles( EffectItem.Create( loc, targ.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5020 ); + + Effects.PlaySound( loc, targ.Map, 0x1FA ); + + // The door is now locked! + Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502401 ); + + double time = Caster.Skills[SkillName.Magery].Value + Caster.Skills[SkillName.Concentration].Value + 20.0; + DateTime currentTime = DateTime.Now; + DateTime laterTime = currentTime.AddSeconds(time); + + targ.Sealed = laterTime; + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private MagicTrapSpell m_Owner; + + public InternalTarget( MagicTrapSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is LootChest ) + ((LootChest)o).Setup(); + + if ( o is TrapableContainer ) + { + m_Owner.Target( (TrapableContainer)o ); + } + else if ( o is BaseDoor ) + { + m_Owner.Doorway( (BaseDoor)o ); + } + else + { + from.SendMessage( "You can't trap that" ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/2nd/Protection.cs b/Scripts/Spells/2nd/Protection.cs new file mode 100644 index 0000000..6707e15 --- /dev/null +++ b/Scripts/Spells/2nd/Protection.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Second +{ + public class ProtectionSpell : MagerySpell + { + private static Hashtable m_Registry = new Hashtable(); + public static Hashtable Registry { get { return m_Registry; } } + + private static SpellInfo m_Info = new SpellInfo( + "Protection", "Uus Sanct", + 236, + 9011, + Reagent.Garlic, + Reagent.Ginseng, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Second; } } + + public ProtectionSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( m_Registry.ContainsKey( Caster ) ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + return false; + } + else if ( !Caster.CanBeginAction( typeof( DefensiveSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + return false; + } + + return true; + } + + public override void OnCast() + { + if ( m_Registry.ContainsKey( Caster ) ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + } + else if ( !Caster.CanBeginAction( typeof( DefensiveSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + } + else if ( CheckSequence() ) + { + if ( Caster.BeginAction( typeof( DefensiveSpell ) ) ) + { + double value = (int)(Caster.Skills[SkillName.Magery].Value + Caster.Skills[SkillName.Meditation].Value + Caster.Skills[SkillName.Concentration].Value); + value /= 4; + + if ( value < 0 ) + value = 0; + else if ( value > 75 ) + value = 75.0; + + Registry.Add( Caster, value ); + new InternalTimer( Caster ).Start(); + + Caster.FixedParticles( 0x375A, 9, 20, 5016, EffectLayer.Waist ); + Caster.PlaySound( 0x1ED ); + } + else + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + } + } + + FinishSequence(); + } + + private class InternalTimer : Timer + { + private Mobile m_Caster; + + public InternalTimer( Mobile caster ) : base( TimeSpan.FromSeconds( 0 ) ) + { + double val = caster.Skills[SkillName.Magery].Value + caster.Skills[SkillName.Concentration].Value; + if ( val < 15 ) + val = 15; + else if ( val > 240 ) + val = 240; + + m_Caster = caster; + Delay = TimeSpan.FromSeconds( val ); + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + ProtectionSpell.Registry.Remove( m_Caster ); + DefensiveSpell.Nullify( m_Caster ); + } + } + } +} diff --git a/Scripts/Spells/2nd/RemoveTrap.cs b/Scripts/Spells/2nd/RemoveTrap.cs new file mode 100644 index 0000000..f281b0e --- /dev/null +++ b/Scripts/Spells/2nd/RemoveTrap.cs @@ -0,0 +1,139 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Items; + +namespace Server.Spells.Second +{ + public class RemoveTrapSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Remove Trap", "An Jux", + 212, + 9001, + Reagent.Bloodmoss, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Second; } } + + public RemoveTrapSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + Caster.SendMessage( "What do you wish to untrap?" ); + } + + public void Target( TrapableContainer item ) + { + if ( !Caster.CanSee( item ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( item.TrapType != TrapType.None && item.TrapType != TrapType.MagicTrap ) + { + base.DoFizzle(); + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, item ); + + Point3D loc = item.GetWorldLocation(); + + Effects.SendLocationParticles( EffectItem.Create( loc, item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5015 ); + Effects.PlaySound( loc, item.Map, 0x1F0 ); + + item.TrapType = TrapType.None; + item.TrapPower = 0; + item.TrapLevel = 0; + } + + FinishSequence(); + } + + public void Trapped( BaseTrap item ) + { + if ( !Caster.CanSee( item ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, item ); + + Point3D loc = item.GetWorldLocation(); + + Effects.SendLocationParticles( EffectItem.Create( loc, item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5015 ); + Effects.PlaySound( loc, item.Map, 0x1F0 ); + + item.WhenDisarmed = (DateTime.Now).AddMinutes((double)(Utility.RandomMinMax(20,40))); + } + + FinishSequence(); + } + + public void Doorway( BaseDoor item ) + { + if ( !Caster.CanSee( item ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, item ); + + Point3D loc = item.GetWorldLocation(); + + Effects.SendLocationParticles( EffectItem.Create( loc, item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5015 ); + Effects.PlaySound( loc, item.Map, 0x1F0 ); + + item.TrapType = TrapType.None; + item.TrapPower = 0; + item.TrapLevel = 0; + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private RemoveTrapSpell m_Owner; + + public InternalTarget( RemoveTrapSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is LootChest ) + ((LootChest)o).Setup(); + + if ( o is TrapableContainer ) + { + m_Owner.Target( (TrapableContainer)o ); + } + else if ( o is BaseTrap && !(o is MushroomTrap)) + { + m_Owner.Trapped( (BaseTrap)o ); + } + else if ( o is BaseDoor ) + { + m_Owner.Doorway( (BaseDoor)o ); + } + else + { + from.SendMessage( "You can't disarm that" ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/2nd/Strength.cs b/Scripts/Spells/2nd/Strength.cs new file mode 100644 index 0000000..0e27e24 --- /dev/null +++ b/Scripts/Spells/2nd/Strength.cs @@ -0,0 +1,70 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Second +{ + public class StrengthSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Strength", "Uus Mani", + 212, + 9061, + Reagent.MandrakeRoot, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.Second; } } + + public StrengthSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckBSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.AddStatBonus( Caster, m, StatType.Str ); + + m.FixedParticles( 0x375A, 10, 15, 5017, EffectLayer.Waist ); + m.PlaySound( 0x1EE ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private StrengthSpell m_Owner; + + public InternalTarget( StrengthSpell owner ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/3rd/Bless.cs b/Scripts/Spells/3rd/Bless.cs new file mode 100644 index 0000000..55f57eb --- /dev/null +++ b/Scripts/Spells/3rd/Bless.cs @@ -0,0 +1,72 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Third +{ + public class BlessSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Bless", "Rel Sanct", + 203, + 9061, + Reagent.Garlic, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Third; } } + + public BlessSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckBSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.AddStatBonus( Caster, m, StatType.Str ); SpellHelper.DisableSkillCheck = true; + SpellHelper.AddStatBonus( Caster, m, StatType.Dex ); + SpellHelper.AddStatBonus( Caster, m, StatType.Int ); SpellHelper.DisableSkillCheck = false; + + m.FixedParticles( 0x373A, 10, 15, 5018, EffectLayer.Waist ); + m.PlaySound( 0x1EA ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private BlessSpell m_Owner; + + public InternalTarget( BlessSpell owner ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/3rd/Fireball.cs b/Scripts/Spells/3rd/Fireball.cs new file mode 100644 index 0000000..009c706 --- /dev/null +++ b/Scripts/Spells/3rd/Fireball.cs @@ -0,0 +1,84 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Third +{ + public class FireballSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Fireball", "Vas Flam", + 203, + 9041, + Reagent.BlackPearl + ); + + public override SpellCircle Circle { get { return SpellCircle.Third; } } + + public FireballSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return true; } } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + Mobile source = Caster; + + SpellHelper.Turn( source, m ); + + SpellHelper.CheckReflect( (int)this.Circle, ref source, ref m ); + + double damage = Utility.Random( 10, 7 ); + + if ( CheckResisted( m ) ) + { + damage *= 0.75; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + damage *= GetDamageScalar( m ); + + source.MovingParticles( m, 0x36D4, 7, 0, false, true, 9502, 4019, 0x160 ); + source.PlaySound( 0x44B ); + + SpellHelper.Damage( this, m, damage ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private FireballSpell m_Owner; + + public InternalTarget( FireballSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + m_Owner.Target( (Mobile)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/3rd/MagicLock.cs b/Scripts/Spells/3rd/MagicLock.cs new file mode 100644 index 0000000..0a80dcf --- /dev/null +++ b/Scripts/Spells/3rd/MagicLock.cs @@ -0,0 +1,124 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Items; +using Server.Regions; + +namespace Server.Spells.Third +{ + public class MagicLockSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Magic Lock", "An Por", + 215, + 9001, + Reagent.Garlic, + Reagent.Bloodmoss, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Third; } } + + public MagicLockSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( LockableContainer targ ) + { + if ( Multis.BaseHouse.CheckLockedDownOrSecured( targ ) ) + { + // You cannot cast this on a locked down item. + Caster.LocalOverheadMessage( MessageType.Regular, 0x22, 501761 ); + } + else if ( targ.Locked || targ.LockLevel == 0 ) + { + // Target must be an unlocked chest. + Caster.SendLocalizedMessage( 501762 ); + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, targ ); + + Point3D loc = targ.GetWorldLocation(); + + Effects.SendLocationParticles( EffectItem.Create( loc, targ.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5020 ); + + Effects.PlaySound( loc, targ.Map, 0x1FA ); + + // The chest is now locked! + Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 501763 ); + + targ.LockLevel = -255; // signal magic lock + targ.Locked = true; + } + + FinishSequence(); + } + + public void Targets( BaseDoor targ ) + { + if ( !(Caster.Region is DungeonRegion) ) + { + Caster.SendMessage( "This spell only works on dungeon doors." ); + } + else if ( targ.Sealed > DateTime.Now ) + { + Caster.SendMessage( "That door is already magically locked." ); + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, targ ); + + Point3D loc = targ.GetWorldLocation(); + + Effects.SendLocationParticles( EffectItem.Create( loc, targ.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5020 ); + + Effects.PlaySound( loc, targ.Map, 0x1FA ); + + // The door is now locked! + Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502401 ); + + double time = Caster.Skills[SkillName.Magery].Value + Caster.Skills[SkillName.Concentration].Value + 20.0; + DateTime currentTime = DateTime.Now; + DateTime laterTime = currentTime.AddSeconds(time); + + targ.Sealed = laterTime; + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private MagicLockSpell m_Owner; + + public InternalTarget( MagicLockSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is LootChest ) + ((LootChest)o).Setup(); + + if ( o is LockableContainer ) + m_Owner.Target( (LockableContainer)o ); + else if ( o is BaseDoor ) + m_Owner.Targets( (BaseDoor)o ); + else + from.SendMessage( "Target must be an unlocked chest or dungeon door." ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/3rd/Poison.cs b/Scripts/Spells/3rd/Poison.cs new file mode 100644 index 0000000..51c6882 --- /dev/null +++ b/Scripts/Spells/3rd/Poison.cs @@ -0,0 +1,103 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Third +{ + public class PoisonSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Poison", "In Nox", + 203, + 9051, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.Third; } } + + public PoisonSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + if ( m.Spell != null ) + m.Spell.OnCasterHurt(); + + m.Paralyzed = false; + + if ( CheckResisted( m ) ) + { + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + else + { + int level; + + double total = Caster.Skills[SkillName.Magery].Value + Caster.Skills[SkillName.Poisoning].Value; + + double dist = Caster.GetDistanceToSqrt( m ); + + if ( dist >= 3.0 ) + total -= (dist - 3.0) * 10.0; + + if ( total >= 200.0 && 1 > Utility.Random( 10 ) ) + level = 3; + else if ( total > 170.0 ) + level = 2; + else if ( total > 130.0 ) + level = 1; + else + level = 0; + + m.ApplyPoison( Caster, Poison.GetPoison( level ) ); + } + + m.FixedParticles( 0x374A, 10, 15, 5021, EffectLayer.Waist ); + m.PlaySound( 0x205 ); + + HarmfulSpell( m ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private PoisonSpell m_Owner; + + public InternalTarget( PoisonSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/3rd/Telekinesis.cs b/Scripts/Spells/3rd/Telekinesis.cs new file mode 100644 index 0000000..0705d37 --- /dev/null +++ b/Scripts/Spells/3rd/Telekinesis.cs @@ -0,0 +1,112 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Regions; +using Server.Items; + +namespace Server.Spells.Third +{ + public class TelekinesisSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Telekinesis", "Ort Por Ylem", + 203, + 9031, + Reagent.Bloodmoss, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Third; } } + + public TelekinesisSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( ITelekinesisable obj ) + { + if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, obj ); + + obj.OnTelekinesis( Caster ); + } + + FinishSequence(); + } + + public void Target( Container item ) + { + if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, item ); + + object root = item.RootParent; + + if ( !item.IsAccessibleTo( Caster ) ) + { + item.OnDoubleClickNotAccessible( Caster ); + } + else if ( !item.CheckItemUse( Caster, item ) ) + { + } + else if ( root != null && root is Mobile && root != Caster ) + { + item.OnSnoop( Caster ); + } + else if ( item is Corpse && !((Corpse)item).CheckLoot( Caster, null ) ) + { + } + else if ( Caster.Region.OnDoubleClick( Caster, item ) ) + { + Effects.SendLocationParticles( EffectItem.Create( item.Location, item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 ); + Effects.PlaySound( item.Location, item.Map, 0x1F5 ); + + item.OnItemUsed( Caster, item ); + } + } + + FinishSequence(); + } + + public class InternalTarget : Target + { + private TelekinesisSpell m_Owner; + + public InternalTarget( TelekinesisSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is LootChest ) + ((LootChest)o).Setup(); + + if ( o is ITelekinesisable ) + m_Owner.Target( (ITelekinesisable)o ); + else if ( o is Container ) + m_Owner.Target( (Container)o ); + else + from.SendLocalizedMessage( 501857 ); // This spell won't work on that! + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} + +namespace Server +{ + public interface ITelekinesisable : IPoint3D + { + void OnTelekinesis( Mobile from ); + } +} \ No newline at end of file diff --git a/Scripts/Spells/3rd/Teleport.cs b/Scripts/Spells/3rd/Teleport.cs new file mode 100644 index 0000000..44ded94 --- /dev/null +++ b/Scripts/Spells/3rd/Teleport.cs @@ -0,0 +1,121 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Regions; +using Server.Items; + +namespace Server.Spells.Third +{ + public class TeleportSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Teleport", "Rel Por", + 215, + 9031, + Reagent.Bloodmoss, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Third; } } + + public TeleportSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( Server.Misc.WeightOverloading.IsOverloaded( Caster ) ) + { + Caster.SendLocalizedMessage( 502359, "", 0x22 ); // Thou art too encumbered to move. + return false; + } + + return true; + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + IPoint3D orig = p; + Map map = Caster.Map; + + SpellHelper.GetSurfaceTop( ref p ); + + if ( Server.Misc.WeightOverloading.IsOverloaded( Caster ) ) + { + Caster.SendLocalizedMessage( 502359, "", 0x22 ); // Thou art too encumbered to move. + } + else if ( map == null || !map.CanSpawnMobile( p.X, p.Y, p.Z ) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( SpellHelper.CheckMulti( new Point3D( p ), map ) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, orig ); + + Mobile m = Caster; + + Point3D from = m.Location; + Point3D to = new Point3D( p ); + + m.Location = to; + m.ProcessDelta(); + + if ( m.Player ) + { + Effects.SendLocationParticles( EffectItem.Create( from, m.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 2023 ); + Effects.SendLocationParticles( EffectItem.Create( to, m.Map, EffectItem.DefaultDuration ), 0x3728, 10, 10, 5023 ); + } + else + { + m.FixedParticles( 0x376A, 9, 32, 0x13AF, EffectLayer.Waist ); + } + + m.PlaySound( 0x1FE ); + + IPooledEnumerable eable = m.GetItemsInRange( 0 ); + + foreach ( Item item in eable ) + { + if ( item is Server.Spells.Sixth.ParalyzeFieldSpell.InternalItem || item is Server.Spells.Fifth.PoisonFieldSpell.InternalItem || item is Server.Spells.Fourth.FireFieldSpell.FireFieldItem ) + item.OnMoveOver( m ); + } + + eable.Free(); + } + + FinishSequence(); + } + + public class InternalTarget : Target + { + private TeleportSpell m_Owner; + + public InternalTarget( TeleportSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + m_Owner.Target( p ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/3rd/Unlock.cs b/Scripts/Spells/3rd/Unlock.cs new file mode 100644 index 0000000..1357432 --- /dev/null +++ b/Scripts/Spells/3rd/Unlock.cs @@ -0,0 +1,104 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Items; +using Server.Regions; + +namespace Server.Spells.Third +{ + public class UnlockSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Unlock Spell", "Ex Por", + 215, + 9001, + Reagent.Bloodmoss, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Third; } } + + public UnlockSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + private class InternalTarget : Target + { + private UnlockSpell m_Owner; + + public InternalTarget( UnlockSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is LootChest ) + ((LootChest)o).Setup(); + + IPoint3D loc = o as IPoint3D; + + if ( loc == null ) + return; + + if ( m_Owner.CheckSequence() ) { + SpellHelper.Turn( from, o ); + + Effects.SendLocationParticles( EffectItem.Create( new Point3D( loc ), from.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5024 ); + + Effects.PlaySound( loc, from.Map, 0x1FF ); + + if ( o is Mobile ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 503101 ); // That did not need to be unlocked. + else if ( o is BaseDoor ) + { + BaseDoor door = (BaseDoor)o; + + if ( door.Sealed < DateTime.Now ) + from.SendMessage( "That does not need to be unlocked." ); + else + { + door.Sealed = DateTime.MinValue; + } + } + else if ( !( o is LockableContainer ) ) + from.SendLocalizedMessage( 501666 ); // You can't unlock that! + else { + LockableContainer cont = (LockableContainer)o; + + if ( Multis.BaseHouse.CheckSecured( cont ) ) + from.SendLocalizedMessage( 503098 ); // You cannot cast this on a secure item. + else if ( !cont.Locked ) + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 503101 ); // That did not need to be unlocked. + else if ( cont.LockLevel == 0 ) + from.SendLocalizedMessage( 501666 ); // You can't unlock that! + else { + int level = (int)( ( from.Skills[SkillName.Magery].Value + from.Skills[SkillName.Concentration].Value ) * 0.4) - 4; + + if ( level >= cont.RequiredSkill && !(cont is TreasureMapChest && ((TreasureMapChest)cont).Level > 2) ) { + cont.Locked = false; + + if ( cont.LockLevel == -255 ) + cont.LockLevel = cont.RequiredSkill - 10; + } + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 503099 ); // My spell does not seem to have an effect on that lock. + } + } + } + + m_Owner.FinishSequence(); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/3rd/WallOfStone.cs b/Scripts/Spells/3rd/WallOfStone.cs new file mode 100644 index 0000000..b4b9285 --- /dev/null +++ b/Scripts/Spells/3rd/WallOfStone.cs @@ -0,0 +1,213 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Misc; +using Server.Items; +using Server.Mobiles; + +namespace Server.Spells.Third +{ + public class WallOfStoneSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Wall of Stone", "In Sanct Ylem", + 227, + 9011, + false, + Reagent.Bloodmoss, + Reagent.Garlic + ); + + public override SpellCircle Circle { get { return SpellCircle.Third; } } + + public WallOfStoneSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + int dx = Caster.Location.X - p.X; + int dy = Caster.Location.Y - p.Y; + int rx = (dx - dy) * 44; + int ry = (dx + dy) * 44; + + bool eastToWest; + + if ( rx >= 0 && ry >= 0 ) + { + eastToWest = false; + } + else if ( rx >= 0 ) + { + eastToWest = true; + } + else if ( ry >= 0 ) + { + eastToWest = true; + } + else + { + eastToWest = false; + } + + Effects.PlaySound( p, Caster.Map, 0x1F6 ); + + for ( int i = -1; i <= 1; ++i ) + { + Point3D loc = new Point3D( eastToWest ? p.X + i : p.X, eastToWest ? p.Y : p.Y + i, p.Z ); + bool canFit = SpellHelper.AdjustField( ref loc, Caster.Map, 22, true ); + + //Effects.SendLocationParticles( EffectItem.Create( loc, Caster.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 5025 ); + + if ( !canFit ) + continue; + + Item item = new InternalItem( loc, Caster.Map, Caster ); + + Effects.SendLocationParticles( item, 0x376A, 9, 10, 5025 ); + + //new InternalItem( loc, Caster.Map, Caster ); + } + } + + FinishSequence(); + } + + [DispellableField] + private class InternalItem : Item + { + private Timer m_Timer; + private DateTime m_End; + private Mobile m_Caster; + + public override bool BlocksFit{ get{ return true; } } + + public InternalItem( Point3D loc, Map map, Mobile caster ) : base( 0x82 ) + { + Visible = false; + Movable = false; + + MoveToWorld( loc, map ); + + m_Caster = caster; + + if ( caster.InLOS( this ) ) + Visible = true; + else + Delete(); + + if ( Deleted ) + return; + + m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( 10.0 ) ); + m_Timer.Start(); + + m_End = DateTime.Now + TimeSpan.FromSeconds( 10.0 ); + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.WriteDeltaTime( m_End ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_End = reader.ReadDeltaTime(); + + m_Timer = new InternalTimer( this, m_End - DateTime.Now ); + m_Timer.Start(); + + break; + } + case 0: + { + TimeSpan duration = TimeSpan.FromSeconds( 10.0 ); + + m_Timer = new InternalTimer( this, duration ); + m_Timer.Start(); + + m_End = DateTime.Now + duration; + + break; + } + } + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Timer != null ) + m_Timer.Stop(); + } + + private class InternalTimer : Timer + { + private InternalItem m_Item; + + public InternalTimer( InternalItem item, TimeSpan duration ) : base( duration ) + { + Priority = TimerPriority.OneSecond; + m_Item = item; + } + + protected override void OnTick() + { + m_Item.Delete(); + } + } + } + + private class InternalTarget : Target + { + private WallOfStoneSpell m_Owner; + + public InternalTarget( WallOfStoneSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is IPoint3D ) + m_Owner.Target( (IPoint3D)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/4th/ArchCure.cs b/Scripts/Spells/4th/ArchCure.cs new file mode 100644 index 0000000..cdafb34 --- /dev/null +++ b/Scripts/Spells/4th/ArchCure.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using Server.Network; +using Server.Items; +using Server.Targeting; +using Server.Mobiles; + +namespace Server.Spells.Fourth +{ + public class ArchCureSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Arch Cure", "Vas An Nox", + 215, + 9061, + Reagent.Garlic, + Reagent.Ginseng, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Fourth; } } + + public ArchCureSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + // Archcure is now 1/4th of a second faster + public override TimeSpan CastDelayBase{ get{ return base.CastDelayBase - TimeSpan.FromSeconds( 0.25 ); } } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + List targets = new List(); + + Map map = Caster.Map; + Mobile m_directtarget = p as Mobile; + + if ( map != null ) + { + bool OldUO = true; + + //you can target directly someone/something and become criminal if it's a criminal action + if ( m_directtarget != null ) + targets.Add ( m_directtarget ); + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + IPooledEnumerable eable = map.GetMobilesInRange( new Point3D( p ), (2+(int)(Caster.Skills[SkillName.Concentration].Value/20)) ); + + foreach ( Mobile m in eable ) + { + // Archcure area effect won't cure aggressors or victims, nor murderers, criminals or monsters + // red players can cure only themselves and guildies with arch cure area. + + if ( Caster.CanBeBeneficial( m, false ) && ( OldUO || !IsAggressor( m ) && !IsAggressed( m ) && (( IsInnocentTo ( Caster, m ) && IsInnocentTo ( m, Caster ) ) || ( IsAllyTo ( Caster, m ) )) && m != m_directtarget && m is PlayerMobile || m == Caster && m != m_directtarget )) + targets.Add( m ); + } + + eable.Free(); + } + + Effects.PlaySound( p, Caster.Map, 0x299 ); + + if ( targets.Count > 0 ) + { + int cured = 0; + + for ( int i = 0; i < targets.Count; ++i ) + { + Mobile m = targets[i]; + + Caster.DoBeneficial( m ); + + Poison poison = m.Poison; + + if ( poison != null ) + { + int chanceToCure = 10000 + (int)(Caster.Skills[SkillName.Magery].Value * 75) - ((poison.Level + 1) * 1750); + chanceToCure /= 100; + chanceToCure -= 1; + + if ( chanceToCure > Utility.Random( 100 ) && m.CurePoison( Caster ) ) + ++cured; + } + + m.FixedParticles( 0x373A, 10, 15, 5012, EffectLayer.Waist ); + m.PlaySound( 0x1E0 ); + } + + if ( cured > 0 ) + Caster.SendLocalizedMessage( 1010058 ); // You have cured the target of all poisons! + } + } + + FinishSequence(); + } + + private bool IsAggressor( Mobile m ) + { + foreach ( AggressorInfo info in Caster.Aggressors ) + { + if ( m == info.Attacker && !info.Expired ) + return true; + } + + return false; + } + + private bool IsAggressed( Mobile m ) + { + foreach ( AggressorInfo info in Caster.Aggressed ) + { + if ( m == info.Defender && !info.Expired ) + return true; + } + + return false; + } + + private static bool IsInnocentTo( Mobile from, Mobile to ) + { + return ( Notoriety.Compute( from, (Mobile)to ) == Notoriety.Innocent ); + } + + private static bool IsAllyTo( Mobile from, Mobile to ) + { + return ( Notoriety.Compute( from, (Mobile)to ) == Notoriety.Ally ); + } + + private class InternalTarget : Target + { + private ArchCureSpell m_Owner; + + public InternalTarget( ArchCureSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + m_Owner.Target( p ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/4th/ArchProtection.cs b/Scripts/Spells/4th/ArchProtection.cs new file mode 100644 index 0000000..9f88b36 --- /dev/null +++ b/Scripts/Spells/4th/ArchProtection.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using Server.Network; +using Server.Items; +using Server.Targeting; +using Server.Engines.PartySystem; + +namespace Server.Spells.Fourth +{ + public class ArchProtectionSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Arch Protection", "Vas Uus Sanct", + 215, + 9011, + Reagent.Garlic, + Reagent.Ginseng, + Reagent.MandrakeRoot, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Fourth; } } + + public ArchProtectionSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + List targets = new List(); + + Map map = Caster.Map; + + if ( map != null ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + IPooledEnumerable eable = map.GetMobilesInRange( new Point3D( p ), (3+(int)(Caster.Skills[SkillName.Concentration].Value/20)) ); + + foreach ( Mobile m in eable ) + { + if ( Caster.CanBeBeneficial( m, false ) ) + targets.Add( m ); + } + + eable.Free(); + } + + Effects.PlaySound( p, Caster.Map, 0x299 ); + + int val = (int)(Caster.Skills[SkillName.Magery].Value/10.0 + 1); + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + val = val + (int)(Caster.Skills[SkillName.Concentration].Value/20.0); + + if ( targets.Count > 0 ) + { + for ( int i = 0; i < targets.Count; ++i ) + { + Mobile m = targets[i]; + + if ( m.BeginAction( typeof( ArchProtectionSpell ) ) ) + { + Caster.DoBeneficial( m ); + m.VirtualArmorMod += val; + new InternalTimer( m, Caster, val ).Start(); + + m.FixedParticles( 0x375A, 9, 20, 5027, EffectLayer.Waist ); + m.PlaySound( 0x1F7 ); + } + } + } + } + + FinishSequence(); + } + + private class InternalTimer : Timer + { + private Mobile m_Owner; + private int m_Val; + + public InternalTimer( Mobile target, Mobile caster, int val ) : base( TimeSpan.FromSeconds( 0 ) ) + { + double time = caster.Skills[SkillName.Magery].Value * 1.2; + if ( time > 144 ) + time = 144; + Delay = TimeSpan.FromSeconds( time ); + Priority = TimerPriority.OneSecond; + + m_Owner = target; + m_Val = val; + } + + protected override void OnTick() + { + m_Owner.EndAction( typeof( ArchProtectionSpell ) ); + m_Owner.VirtualArmorMod -= m_Val; + if ( m_Owner.VirtualArmorMod < 0 ) + m_Owner.VirtualArmorMod = 0; + } + } + + private class InternalTarget : Target + { + private ArchProtectionSpell m_Owner; + + public InternalTarget( ArchProtectionSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + m_Owner.Target( p ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} diff --git a/Scripts/Spells/4th/Curse.cs b/Scripts/Spells/4th/Curse.cs new file mode 100644 index 0000000..9cec68f --- /dev/null +++ b/Scripts/Spells/4th/Curse.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Fourth +{ + public class CurseSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Curse", "Des Sanct", + 227, + 9031, + Reagent.Nightshade, + Reagent.Garlic, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Fourth; } } + + public CurseSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + private static Hashtable m_UnderEffect = new Hashtable(); + + public static void RemoveEffect( object state ) + { + Mobile m = (Mobile)state; + + m_UnderEffect.Remove( m ); + } + + public static bool UnderEffect( Mobile m ) + { + return m_UnderEffect.Contains( m ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + SpellHelper.AddStatCurse( Caster, m, StatType.Str ); SpellHelper.DisableSkillCheck = true; + SpellHelper.AddStatCurse( Caster, m, StatType.Dex ); + SpellHelper.AddStatCurse( Caster, m, StatType.Int ); SpellHelper.DisableSkillCheck = false; + + Timer t = (Timer)m_UnderEffect[m]; + + if ( Caster.Player && m.Player /*&& Caster != m */ && t == null ) //On OSI you CAN curse yourself and get this effect. + { + TimeSpan duration = SpellHelper.GetDuration( Caster, m ); + m_UnderEffect[m] = t = Timer.DelayCall( duration, new TimerStateCallback( RemoveEffect ), m ); + } + + if ( m.Spell != null ) + m.Spell.OnCasterHurt(); + + m.Paralyzed = false; + + m.FixedParticles( 0x374A, 10, 15, 5028, EffectLayer.Waist ); + m.PlaySound( 0x1E1 ); + + HarmfulSpell( m ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private CurseSpell m_Owner; + + public InternalTarget( CurseSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + m_Owner.Target( (Mobile)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/4th/FireField.cs b/Scripts/Spells/4th/FireField.cs new file mode 100644 index 0000000..353b053 --- /dev/null +++ b/Scripts/Spells/4th/FireField.cs @@ -0,0 +1,312 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; +using Server.Misc; +using Server.Items; +using Server.Mobiles; + +namespace Server.Spells.Fourth +{ + public class FireFieldSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Fire Field", "In Flam Grav", + 215, + 9041, + false, + Reagent.BlackPearl, + Reagent.SpidersSilk, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Fourth; } } + + public FireFieldSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + int dx = Caster.Location.X - p.X; + int dy = Caster.Location.Y - p.Y; + int rx = (dx - dy) * 44; + int ry = (dx + dy) * 44; + + bool eastToWest; + + if ( rx >= 0 && ry >= 0 ) + { + eastToWest = false; + } + else if ( rx >= 0 ) + { + eastToWest = true; + } + else if ( ry >= 0 ) + { + eastToWest = true; + } + else + { + eastToWest = false; + } + + Effects.PlaySound( p, Caster.Map, 0x20C ); + + int itemID = eastToWest ? 0x398C : 0x3996; + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + TimeSpan duration = TimeSpan.FromSeconds( ( 4.0 + (Caster.Skills[SkillName.Magery].Value * 0.5) ) + (Caster.Skills[SkillName.Concentration].Value/10) ); + + for ( int i = -2; i <= 2; ++i ) + { + Point3D loc = new Point3D( eastToWest ? p.X + i : p.X, eastToWest ? p.Y : p.Y + i, p.Z ); + + new FireFieldItem( itemID, loc, Caster, Caster.Map, duration, i ); + } + } + + FinishSequence(); + } + + [DispellableField] + public class FireFieldItem : Item + { + private Timer m_Timer; + private DateTime m_End; + private Mobile m_Caster; + private int m_Damage; + + public override bool BlocksFit{ get{ return true; } } + + public FireFieldItem( int itemID, Point3D loc, Mobile caster, Map map, TimeSpan duration, int val ) + : this( itemID, loc, caster, map, duration, val, 2 ) + { + } + + public FireFieldItem( int itemID, Point3D loc, Mobile caster, Map map, TimeSpan duration, int val, int damage ) : base( itemID ) + { + bool canFit = SpellHelper.AdjustField( ref loc, map, 12, false ); + + Visible = false; + Movable = false; + Light = LightType.Circle300; + + MoveToWorld( loc, map ); + + m_Caster = caster; + + m_Damage = damage; + + m_End = DateTime.Now + duration; + + m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( Math.Abs( val ) * 0.2 ), caster.InLOS( this ), canFit ); + m_Timer.Start(); + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Timer != null ) + m_Timer.Stop(); + } + + public FireFieldItem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + writer.Write( m_Damage ); + writer.Write( m_Caster ); + writer.WriteDeltaTime( m_End ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + { + m_Damage = reader.ReadInt(); + goto case 1; + } + case 1: + { + m_Caster = reader.ReadMobile(); + + goto case 0; + } + case 0: + { + m_End = reader.ReadDeltaTime(); + + m_Timer = new InternalTimer( this, TimeSpan.Zero, true, true ); + m_Timer.Start(); + + break; + } + } + + if( version < 2 ) + m_Damage = 2; + } + + public override bool OnMoveOver( Mobile m ) + { + if ( Visible && m_Caster != null && SpellHelper.ValidIndirectTarget( m_Caster, m ) && m_Caster.CanBeHarmful( m, false ) ) + { + if ( SpellHelper.CanRevealCaster( m ) ) + m_Caster.RevealingAction(); + + m_Caster.DoHarmful( m ); + + int damage = m_Damage; + + if ( m.CheckSkill( SkillName.MagicResist, 0.0, 30.0 ) ) + { + damage = 1; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + Ultima.Damage( m, m_Caster, damage ); + m.PlaySound( 0x208 ); + + if ( m is BaseCreature ) + ((BaseCreature) m).OnHarmfulSpell( m_Caster ); + } + + return true; + } + + private class InternalTimer : Timer + { + private FireFieldItem m_Item; + private bool m_InLOS, m_CanFit; + + private static Queue m_Queue = new Queue(); + + public InternalTimer( FireFieldItem item, TimeSpan delay, bool inLOS, bool canFit ) : base( delay, TimeSpan.FromSeconds( 1.0 ) ) + { + m_Item = item; + m_InLOS = inLOS; + m_CanFit = canFit; + + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + if ( m_Item.Deleted ) + return; + + if ( !m_Item.Visible ) + { + if ( m_InLOS && m_CanFit ) + m_Item.Visible = true; + else + m_Item.Delete(); + + if ( !m_Item.Deleted ) + { + m_Item.ProcessDelta(); + Effects.SendLocationParticles( EffectItem.Create( m_Item.Location, m_Item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 5029 ); + } + } + else if ( DateTime.Now > m_Item.m_End ) + { + m_Item.Delete(); + Stop(); + } + else + { + Map map = m_Item.Map; + Mobile caster = m_Item.m_Caster; + + if ( map != null && caster != null ) + { + foreach ( Mobile m in m_Item.GetMobilesInRange( 0 ) ) + { + if ( (m.Z + 16) > m_Item.Z && (m_Item.Z + 12) > m.Z && SpellHelper.ValidIndirectTarget( caster, m ) && caster.CanBeHarmful( m, false ) ) + m_Queue.Enqueue( m ); + } + + while ( m_Queue.Count > 0 ) + { + Mobile m = (Mobile)m_Queue.Dequeue(); + + if ( SpellHelper.CanRevealCaster( m ) ) + caster.RevealingAction(); + + caster.DoHarmful( m ); + + int damage = m_Item.m_Damage; + + if ( m.CheckSkill( SkillName.MagicResist, 0.0, 30.0 ) ) + { + damage = 1; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + Ultima.Damage( m, caster, damage ); + m.PlaySound( 0x208 ); + + if ( m is BaseCreature ) + ((BaseCreature) m).OnHarmfulSpell( caster ); + } + } + } + } + } + } + + private class InternalTarget : Target + { + private FireFieldSpell m_Owner; + + public InternalTarget( FireFieldSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is IPoint3D ) + m_Owner.Target( (IPoint3D)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/4th/GreaterHeal.cs b/Scripts/Spells/4th/GreaterHeal.cs new file mode 100644 index 0000000..eb193e9 --- /dev/null +++ b/Scripts/Spells/4th/GreaterHeal.cs @@ -0,0 +1,92 @@ +using System; +using Server; +using Server.Targeting; +using Server.Network; +using Server.Mobiles; + +namespace Server.Spells.Fourth +{ + public class GreaterHealSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Greater Heal", "In Vas Mani", + 204, + 9061, + Reagent.Garlic, + Reagent.Ginseng, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Fourth; } } + + public GreaterHealSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( m.IsDeadBondedPet ) + { + Caster.SendLocalizedMessage( 1060177 ); // You cannot heal a creature that is already dead! + } + else if ( m is Golem ) + { + Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 500951 ); // You cannot heal that. + } + else if ( m.Poisoned ) + { + Caster.LocalOverheadMessage( MessageType.Regular, 0x22, (Caster == m) ? 1005000 : 1010398 ); + } + else if ( CheckBSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + // Algorithm: (40% of magery) + (1-10) + + int toHeal = (int)(Caster.Skills[SkillName.Magery].Value * 0.4); + toHeal += Utility.Random( 1, 10 ); + + //m.Heal( toHeal, Caster ); + SpellHelper.Heal( toHeal, m, Caster ); + + m.FixedParticles( 0x376A, 9, 32, 5030, EffectLayer.Waist ); + m.PlaySound( 0x202 ); + } + + FinishSequence(); + } + + public class InternalTarget : Target + { + private GreaterHealSpell m_Owner; + + public InternalTarget( GreaterHealSpell owner ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/4th/Lightning.cs b/Scripts/Spells/4th/Lightning.cs new file mode 100644 index 0000000..c66baf2 --- /dev/null +++ b/Scripts/Spells/4th/Lightning.cs @@ -0,0 +1,82 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Fourth +{ + public class LightningSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Lightning", "Por Ort Grav", + 239, + 9021, + Reagent.MandrakeRoot, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Fourth; } } + + public LightningSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return false; } } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + double damage = Utility.Random( 12, 9 ); + + if ( CheckResisted( m ) ) + { + damage *= 0.75; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + damage *= GetDamageScalar( m ); + + m.BoltEffect( 0 ); + + SpellHelper.Damage( this, m, damage ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private LightningSpell m_Owner; + + public InternalTarget( LightningSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + m_Owner.Target( (Mobile)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/4th/ManaDrain.cs b/Scripts/Spells/4th/ManaDrain.cs new file mode 100644 index 0000000..c0e9262 --- /dev/null +++ b/Scripts/Spells/4th/ManaDrain.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Fourth +{ + public class ManaDrainSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Mana Drain", "Ort Rel", + 215, + 9031, + Reagent.BlackPearl, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Fourth; } } + + public ManaDrainSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + if ( m.Spell != null ) + m.Spell.OnCasterHurt(); + + m.Paralyzed = false; + + if ( CheckResisted( m ) ) + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + else if ( m.Mana >= 100 ) + m.Mana -= Utility.Random( 1, 100 ); + else + m.Mana -= Utility.Random( 1, m.Mana ); + + m.FixedParticles( 0x374A, 10, 15, 5032, EffectLayer.Head ); + m.PlaySound( 0x1F8 ); + + HarmfulSpell( m ); + } + + FinishSequence(); + } + + public override double GetResistPercent( Mobile target ) + { + return 99.0; + } + + private class InternalTarget : Target + { + private ManaDrainSpell m_Owner; + + public InternalTarget( ManaDrainSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + m_Owner.Target( (Mobile)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/4th/Recall.cs b/Scripts/Spells/4th/Recall.cs new file mode 100644 index 0000000..33d559c --- /dev/null +++ b/Scripts/Spells/4th/Recall.cs @@ -0,0 +1,131 @@ +using System; +using Server.Items; +using Server.Multis; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; +using Server.Regions; + +namespace Server.Spells.Fourth +{ + public class RecallSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Recall", "Kal Ort Por", + 239, + 9031, + Reagent.BlackPearl, + Reagent.Bloodmoss, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Fourth; } } + + public RecallSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void GetCastSkills( out double min, out double max ) + { + base.GetCastSkills( out min, out max ); + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool CheckCast() + { + if ( Server.Engines.Harvest.Fishing.IsOnBoat( Caster ) ) + { + Caster.SendMessage( "The waves of the sea are distracting you from casting this spell!" ); + Caster.FixedEffect( 0x3735, 6, 30 ); + Caster.PlaySound( 0x5C ); + return false; + } + else if ( SpellHelper.CheckCombat( Caster ) ) + { + Caster.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle?? + return false; + } + else if ( Server.Misc.WeightOverloading.IsOverloaded( Caster ) ) + { + Caster.SendLocalizedMessage( 502359, "", 0x22 ); // Thou art too encumbered to move. + return false; + } + + return true; + } + + public void Effect( Point3D loc, Map map, bool checkMulti ) + { + if ( SpellHelper.CheckCombat( Caster ) ) + { + Caster.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle?? + } + else if ( Server.Misc.WeightOverloading.IsOverloaded( Caster ) ) + { + Caster.SendLocalizedMessage( 502359, "", 0x22 ); // Thou art too encumbered to move. + } + else if ( !map.CanSpawnMobile( loc.X, loc.Y, loc.Z ) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( (checkMulti && SpellHelper.CheckMulti( loc, map )) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( CheckSequence() ) + { + BaseCreature.TeleportPets( Caster, loc, map, true ); + + Caster.PlaySound( 0x1FC ); + Caster.MoveToWorld( loc, map ); + Caster.PlaySound( 0x1FC ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private RecallSpell m_Owner; + + public InternalTarget( RecallSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + + owner.Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 501029 ); // Select Marked item. + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is MagicRune ) + { + MagicRune rune = (MagicRune)o; + + if ( rune.Marked && rune.Owner != from ) + from.SendMessage( "This rune belongs to someone else." ); + else if ( rune.Marked ) + m_Owner.Effect( rune.Target, rune.TargetMap, true ); + else + from.SendLocalizedMessage( 501805 ); // That rune is not yet marked. + } + else + { + from.Send( new MessageLocalized( from.Serial, from.Body, MessageType.Regular, 0x3B2, 3, 502357, from.Name, "" ) ); // I can not recall from that object. + } + } + + protected override void OnNonlocalTarget( Mobile from, object o ) + { + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/5th/BladeSpirits.cs b/Scripts/Spells/5th/BladeSpirits.cs new file mode 100644 index 0000000..f731b1b --- /dev/null +++ b/Scripts/Spells/5th/BladeSpirits.cs @@ -0,0 +1,102 @@ +using System; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Fifth +{ + public class BladeSpiritsSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Blade Spirits", "In Jux Hur Ylem", + 266, + 9040, + false, + Reagent.BlackPearl, + Reagent.MandrakeRoot, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.Fifth; } } + + public BladeSpiritsSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override TimeSpan GetCastDelay() + { + return base.GetCastDelay() + TimeSpan.FromSeconds( 6.0 ); + } + + public override bool CheckCast() + { + if ( !base.CheckCast() ) + return false; + + if( (Caster.Followers + 1) > Caster.FollowersMax ) + { + Caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + return false; + } + + return true; + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + Map map = Caster.Map; + + SpellHelper.GetSurfaceTop( ref p ); + + if ( map == null || !map.CanSpawnMobile( p.X, p.Y, p.Z ) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + TimeSpan duration = TimeSpan.FromSeconds( Utility.Random( 80, 40 ) + (Caster.Skills.Concentration.Value / 5) ); + + BaseCreature.Summon( new BladeSpirits(), false, Caster, new Point3D( p ), 0x212, duration ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private BladeSpiritsSpell m_Owner; + + public InternalTarget( BladeSpiritsSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is IPoint3D ) + m_Owner.Target( (IPoint3D)o ); + } + + protected override void OnTargetOutOfLOS( Mobile from, object o ) + { + from.SendLocalizedMessage( 501943 ); // Target cannot be seen. Try again. + from.Target = new InternalTarget( m_Owner ); + from.Target.BeginTimeout( from, TimeoutTime - DateTime.Now ); + m_Owner = null; + } + + protected override void OnTargetFinish( Mobile from ) + { + if ( m_Owner != null ) + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/5th/DispelField.cs b/Scripts/Spells/5th/DispelField.cs new file mode 100644 index 0000000..d20121d --- /dev/null +++ b/Scripts/Spells/5th/DispelField.cs @@ -0,0 +1,88 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Items; +using Server.Misc; + +namespace Server.Spells.Fifth +{ + public class DispelFieldSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Dispel Field", "An Grav", + 206, + 9002, + Reagent.BlackPearl, + Reagent.SpidersSilk, + Reagent.SulfurousAsh, + Reagent.Garlic + ); + + public override SpellCircle Circle { get { return SpellCircle.Fifth; } } + + public DispelFieldSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Item item ) + { + Type t = item.GetType(); + + if ( !Caster.CanSee( item ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( !t.IsDefined( typeof( DispellableFieldAttribute ), false ) ) + { + Caster.SendLocalizedMessage( 1005049 ); // That cannot be dispelled. + } + else if ( item is Magicgate && !((Magicgate)item).Dispellable ) + { + Caster.SendLocalizedMessage( 1005047 ); // That magic is too chaotic + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, item ); + + Effects.SendLocationParticles( EffectItem.Create( item.Location, item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 20, 5042 ); + Effects.PlaySound( item.GetWorldLocation(), item.Map, 0x201 ); + + item.Delete(); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private DispelFieldSpell m_Owner; + + public InternalTarget( DispelFieldSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Item ) + { + m_Owner.Target( (Item)o ); + } + else + { + m_Owner.Caster.SendLocalizedMessage( 1005049 ); // That cannot be dispelled. + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/5th/Incognito.cs b/Scripts/Spells/5th/Incognito.cs new file mode 100644 index 0000000..e090311 --- /dev/null +++ b/Scripts/Spells/5th/Incognito.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections; +using Server; +using Server.Mobiles; +using Server.Misc; +using Server.Items; +using Server.Gumps; +using Server.Spells; +using Server.Spells.Seventh; + +namespace Server.Spells.Fifth +{ + public class IncognitoSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Incognito", "Kal In Ex", + 206, + 9002, + Reagent.Bloodmoss, + Reagent.Garlic, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.Fifth; } } + + public IncognitoSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( !Caster.CanBeginAction( typeof( IncognitoSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + return false; + } + + return true; + } + + public override void OnCast() + { + if ( !Caster.CanBeginAction( typeof( IncognitoSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + } + else if ( Caster.BodyMod == 183 || Caster.BodyMod == 184 ) + { + Caster.SendLocalizedMessage( 1042402 ); // You cannot use incognito while wearing body paint + } + else if ( DisguiseTimers.IsDisguised( Caster ) ) + { + Caster.SendLocalizedMessage( 1061631 ); // You can't do that while disguised. + } + else if ( !Caster.CanBeginAction( typeof( PolymorphSpell ) ) || Caster.IsBodyMod ) + { + DoFizzle(); + } + else if ( CheckSequence() ) + { + if ( Caster.BeginAction( typeof( IncognitoSpell ) ) ) + { + DisguiseTimers.StopTimer( Caster ); + + Caster.HueMod = Caster.Race.RandomSkinHue(); + Caster.NameMod = Caster.Female ? NameList.RandomName( "female" ) : NameList.RandomName( "male" ); + + PlayerMobile pm = Caster as PlayerMobile; + + if ( pm != null && pm.Race != null ) + { + pm.SetHairMods( pm.Race.RandomHair( pm.Female ), pm.Race.RandomFacialHair( pm.Female ) ); + pm.HairHue = pm.Race.RandomHairHue(); + pm.FacialHairHue = pm.Race.RandomHairHue(); + } + + Caster.FixedParticles( 0x373A, 10, 15, 5036, EffectLayer.Head ); + Caster.PlaySound( 0x3BD ); + + BaseArmor.ValidateMobile( Caster ); + BaseClothing.ValidateMobile( Caster ); + + StopTimer( Caster ); + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + int timeVal = (int)(((6 * Caster.Skills.Magery.Fixed) / 50) + 1 + (Caster.Skills[SkillName.Concentration].Value/5) ); + + if( timeVal > 144 ) + timeVal = 144; + + TimeSpan length = TimeSpan.FromSeconds( timeVal ); + + Timer t = new InternalTimer( Caster, length ); + + m_Timers[Caster] = t; + + t.Start(); + } + else + { + Caster.SendLocalizedMessage( 1079022 ); // You're already incognitoed! + } + } + + FinishSequence(); + } + + private static Hashtable m_Timers = new Hashtable(); + + public static bool StopTimer( Mobile m ) + { + Timer t = (Timer)m_Timers[m]; + + if ( t != null ) + { + t.Stop(); + m_Timers.Remove( m ); + } + + return ( t != null ); + } + + private static int[] m_HairIDs = new int[] + { + 0x2044, 0x2045, 0x2046, + 0x203C, 0x203B, 0x203D, + 0x2047, 0x2048, 0x2049, + 0x204A, 0x0000 + }; + + private static int[] m_BeardIDs = new int[] + { + 0x203E, 0x203F, 0x2040, + 0x2041, 0x204B, 0x204C, + 0x204D, 0x0000 + }; + + private class InternalTimer : Timer + { + private Mobile m_Owner; + + public InternalTimer( Mobile owner, TimeSpan length ) : base( length ) + { + m_Owner = owner; + + /* + int val = ((6 * owner.Skills.Magery.Fixed) / 50) + 1; + + if ( val > 144 ) + val = 144; + + Delay = TimeSpan.FromSeconds( val ); + * */ + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + if ( !m_Owner.CanBeginAction( typeof( IncognitoSpell ) ) ) + { + if ( m_Owner is PlayerMobile ) + ((PlayerMobile)m_Owner).SetHairMods( -1, -1 ); + + m_Owner.BodyMod = 0; + m_Owner.HueMod = -1; + m_Owner.NameMod = null; + m_Owner.EndAction( typeof( IncognitoSpell ) ); + + BaseArmor.ValidateMobile( m_Owner ); + BaseClothing.ValidateMobile( m_Owner ); + } + } + } + } +} diff --git a/Scripts/Spells/5th/MagicReflect.cs b/Scripts/Spells/5th/MagicReflect.cs new file mode 100644 index 0000000..2496f3b --- /dev/null +++ b/Scripts/Spells/5th/MagicReflect.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Fifth +{ + public class MagicReflectSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Magic Reflection", "In Jux Sanct", + 242, + 9012, + Reagent.Garlic, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Fifth; } } + + public MagicReflectSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( Caster.MagicDamageAbsorb > 0 ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + return false; + } + else if ( !Caster.CanBeginAction( typeof( DefensiveSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + return false; + } + + return true; + } + + private static Hashtable m_Table = new Hashtable(); + + public override void OnCast() + { + if ( Caster.MagicDamageAbsorb > 0 ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + } + else if ( !Caster.CanBeginAction( typeof( DefensiveSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + } + else if ( CheckSequence() ) + { + if ( Caster.BeginAction( typeof( DefensiveSpell ) ) ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + int value = (int)(Caster.Skills[SkillName.Magery].Value + Caster.Skills[SkillName.Concentration].Value); + value = (int)(8 + (value/200)*7.0);//absorb from 8 to 15 "circles" + + Caster.MagicDamageAbsorb = value; + + Caster.FixedParticles( 0x375A, 10, 15, 5037, EffectLayer.Waist ); + Caster.PlaySound( 0x1E9 ); + } + else + { + Caster.SendLocalizedMessage( 1005385 ); // The spell will not adhere to you at this time. + } + } + + FinishSequence(); + } + } +} diff --git a/Scripts/Spells/5th/MindBlast.cs b/Scripts/Spells/5th/MindBlast.cs new file mode 100644 index 0000000..59ea94b --- /dev/null +++ b/Scripts/Spells/5th/MindBlast.cs @@ -0,0 +1,116 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Fifth +{ + public class MindBlastSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Mind Blast", "Por Corp Wis", + 218, + 9032, + Reagent.BlackPearl, + Reagent.MandrakeRoot, + Reagent.Nightshade, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Fifth; } } + + public MindBlastSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return true; } } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + Mobile from = Caster, target = m; + + SpellHelper.Turn( from, target ); + + SpellHelper.CheckReflect( (int)this.Circle, ref from, ref target ); + + // Algorithm: (highestStat - lowestStat) / 2 [- 50% if resisted] + + int highestStat = target.Str, lowestStat = target.Str; + + if ( target.Dex > highestStat ) + highestStat = target.Dex; + + if ( target.Dex < lowestStat ) + lowestStat = target.Dex; + + if ( target.Int > highestStat ) + highestStat = target.Int; + + if ( target.Int < lowestStat ) + lowestStat = target.Int; + + if ( highestStat > 150 ) + highestStat = 150; + + if ( lowestStat > 150 ) + lowestStat = 150; + + double damage = GetDamageScalar(m)*(highestStat - lowestStat) / 4;//less damage + + if ( damage > 45 ) + damage = 45; + + if ( CheckResisted( target ) ) + { + damage /= 2; + target.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + from.FixedParticles( 0x374A, 10, 15, 2038, EffectLayer.Head ); + + target.FixedParticles( 0x374A, 10, 15, 5038, EffectLayer.Head ); + target.PlaySound( 0x213 ); + + SpellHelper.Damage( this, target, damage ); + } + + FinishSequence(); + } + + public override double GetSlayerDamageScalar( Mobile target ) + { + return 1.0; //This spell isn't affected by slayer spellbooks + } + + private class InternalTarget : Target + { + private MindBlastSpell m_Owner; + + public InternalTarget( MindBlastSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + m_Owner.Target( (Mobile)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/5th/Paralyze.cs b/Scripts/Spells/5th/Paralyze.cs new file mode 100644 index 0000000..46dbe9a --- /dev/null +++ b/Scripts/Spells/5th/Paralyze.cs @@ -0,0 +1,85 @@ +using System; +using Server.Mobiles; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Fifth +{ + public class ParalyzeSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Paralyze", "An Ex Por", + 218, + 9012, + Reagent.Garlic, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Fifth; } } + + public ParalyzeSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + double duration; + + // Algorithm: ((20% of magery) + 7) seconds [- 50% if resisted] + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + duration = 7.0 + (Caster.Skills[SkillName.Magery].Value * 0.2) + (Caster.Skills[SkillName.Concentration].Value/10); + + if ( CheckResisted( m ) ) + duration *= 0.75; + + m.Paralyze( TimeSpan.FromSeconds( duration ) ); + + m.PlaySound( 0x204 ); + m.FixedEffect( 0x376A, 6, 1 ); + + HarmfulSpell( m ); + } + + FinishSequence(); + } + + public class InternalTarget : Target + { + private ParalyzeSpell m_Owner; + + public InternalTarget( ParalyzeSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + m_Owner.Target( (Mobile)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/5th/PoisonField.cs b/Scripts/Spells/5th/PoisonField.cs new file mode 100644 index 0000000..a922850 --- /dev/null +++ b/Scripts/Spells/5th/PoisonField.cs @@ -0,0 +1,285 @@ +using System; +using System.Collections; +using Server.Targeting; +using Server.Network; +using Server.Misc; +using Server.Items; +using Server.Mobiles; + +namespace Server.Spells.Fifth +{ + public class PoisonFieldSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Poison Field", "In Nox Grav", + 230, + 9052, + false, + Reagent.BlackPearl, + Reagent.Nightshade, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Fifth; } } + + public PoisonFieldSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + int dx = Caster.Location.X - p.X; + int dy = Caster.Location.Y - p.Y; + int rx = (dx - dy) * 44; + int ry = (dx + dy) * 44; + + bool eastToWest; + + if ( rx >= 0 && ry >= 0 ) + { + eastToWest = false; + } + else if ( rx >= 0 ) + { + eastToWest = true; + } + else if ( ry >= 0 ) + { + eastToWest = true; + } + else + { + eastToWest = false; + } + + Effects.PlaySound( p, Caster.Map, 0x20B ); + + int itemID = eastToWest ? 0x3915 : 0x3922; + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + TimeSpan duration = TimeSpan.FromSeconds( 3 + (Caster.Skills.Magery.Fixed / 25) + (Caster.Skills[SkillName.Concentration].Value/10) ); + + for ( int i = -2; i <= 2; ++i ) + { + Point3D loc = new Point3D( eastToWest ? p.X + i : p.X, eastToWest ? p.Y : p.Y + i, p.Z ); + + new InternalItem( itemID, loc, Caster, Caster.Map, duration, i ); + } + } + + FinishSequence(); + } + + [DispellableField] + public class InternalItem : Item + { + private Timer m_Timer; + private DateTime m_End; + private Mobile m_Caster; + + public override bool BlocksFit{ get{ return true; } } + + public InternalItem( int itemID, Point3D loc, Mobile caster, Map map, TimeSpan duration, int val ) : base( itemID ) + { + bool canFit = SpellHelper.AdjustField( ref loc, map, 12, false ); + + Visible = false; + Movable = false; + Light = LightType.Circle300; + + MoveToWorld( loc, map ); + + m_Caster = caster; + + m_End = DateTime.Now + duration; + + m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( Math.Abs( val ) * 0.2 ), caster.InLOS( this ), canFit ); + m_Timer.Start(); + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Timer != null ) + m_Timer.Stop(); + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + + writer.Write( m_Caster ); + writer.WriteDeltaTime( m_End ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 1: + { + m_Caster = reader.ReadMobile(); + + goto case 0; + } + case 0: + { + m_End = reader.ReadDeltaTime(); + + m_Timer = new InternalTimer( this, TimeSpan.Zero, true, true ); + m_Timer.Start(); + + break; + } + } + } + + public void ApplyPoisonTo( Mobile m ) + { + if ( m_Caster == null ) + return; + + Poison p = Poison.Regular; + + if ( m.ApplyPoison( m_Caster, p ) == ApplyPoisonResult.Poisoned ) + if ( SpellHelper.CanRevealCaster( m ) ) + m_Caster.RevealingAction(); + + if ( m is BaseCreature ) + ( (BaseCreature) m ).OnHarmfulSpell( m_Caster ); + } + + public override bool OnMoveOver( Mobile m ) + { + if ( Visible && m_Caster != null && SpellHelper.ValidIndirectTarget( m_Caster, m ) && m_Caster.CanBeHarmful( m, false ) ) + { + m_Caster.DoHarmful( m ); + + ApplyPoisonTo( m ); + m.PlaySound( 0x474 ); + } + + return true; + } + + private class InternalTimer : Timer + { + private InternalItem m_Item; + private bool m_InLOS, m_CanFit; + + private static Queue m_Queue = new Queue(); + + public InternalTimer( InternalItem item, TimeSpan delay, bool inLOS, bool canFit ) : base( delay, TimeSpan.FromSeconds( 1.5 ) ) + { + m_Item = item; + m_InLOS = inLOS; + m_CanFit = canFit; + + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + if ( m_Item.Deleted ) + return; + + if ( !m_Item.Visible ) + { + if ( m_InLOS && m_CanFit ) + m_Item.Visible = true; + else + m_Item.Delete(); + + if ( !m_Item.Deleted ) + { + m_Item.ProcessDelta(); + Effects.SendLocationParticles( EffectItem.Create( m_Item.Location, m_Item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 5040 ); + } + } + else if ( DateTime.Now > m_Item.m_End ) + { + m_Item.Delete(); + Stop(); + } + else + { + Map map = m_Item.Map; + Mobile caster = m_Item.m_Caster; + + if ( map != null && caster != null ) + { + bool eastToWest = ( m_Item.ItemID == 0x3915 ); + IPooledEnumerable eable = map.GetMobilesInBounds( new Rectangle2D( m_Item.X - (eastToWest ? 0 : 1), m_Item.Y - (eastToWest ? 1 : 0), (eastToWest ? 1 : 2), (eastToWest ? 2 : 1) ) ); + + foreach ( Mobile m in eable ) + { + if ( (m.Z + 16) > m_Item.Z && (m_Item.Z + 12) > m.Z && SpellHelper.ValidIndirectTarget( caster, m ) && caster.CanBeHarmful( m, false ) ) + m_Queue.Enqueue( m ); + } + + eable.Free(); + + while ( m_Queue.Count > 0 ) + { + Mobile m = (Mobile)m_Queue.Dequeue(); + + caster.DoHarmful( m ); + + m_Item.ApplyPoisonTo( m ); + m.PlaySound( 0x474 ); + } + } + } + } + } + } + + private class InternalTarget : Target + { + private PoisonFieldSpell m_Owner; + + public InternalTarget( PoisonFieldSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is IPoint3D ) + m_Owner.Target( (IPoint3D)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/5th/SummonCreature.cs b/Scripts/Spells/5th/SummonCreature.cs new file mode 100644 index 0000000..d6af945 --- /dev/null +++ b/Scripts/Spells/5th/SummonCreature.cs @@ -0,0 +1,90 @@ +using System; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Fifth +{ + public class SummonCreatureSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Summon Creature", "Kal Xen", + 16, + false, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Fifth; } } + + public SummonCreatureSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + // NOTE: Creature list based on 1hr of summon/release on OSI. + + private static Type[] m_Types = new Type[] + { + typeof( PolarBear ), + typeof( GrizzlyBear ), + typeof( BlackBear ), + typeof( Walrus ), + typeof( Chicken ), + typeof( Scorpion ), + typeof( GiantSerpent ), + typeof( Alligator ), + typeof( GreyWolf ), + typeof( Slime ), + typeof( Eagle ), + typeof( Gorilla ), + typeof( SnowLeopard ), + typeof( Pig ), + typeof( Deer ), + typeof( Rabbit ) + }; + + public override bool CheckCast() + { + if ( !base.CheckCast() ) + return false; + + if ( (Caster.Followers + 2) > Caster.FollowersMax ) + { + Caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + return false; + } + + return true; + } + + public override void OnCast() + { + if ( CheckSequence() ) + { + try + { + BaseCreature creature = (BaseCreature)Activator.CreateInstance( m_Types[Utility.Random( m_Types.Length )] ); + + creature.ControlSlots = 2; + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + TimeSpan duration = TimeSpan.FromSeconds( (4.0 * Caster.Skills[SkillName.Magery].Value) + (4.0 * Caster.Skills[SkillName.Concentration].Value) ); + + SpellHelper.Summon( creature, Caster, 0x215, duration, false, false ); + } + catch + { + } + } + + FinishSequence(); + } + + public override TimeSpan GetCastDelay() + { + return base.GetCastDelay() + TimeSpan.FromSeconds( 6.0 ); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/6th/Dispel.cs b/Scripts/Spells/6th/Dispel.cs new file mode 100644 index 0000000..76fbbb8 --- /dev/null +++ b/Scripts/Spells/6th/Dispel.cs @@ -0,0 +1,84 @@ +using System; +using Server.Misc; +using Server.Items; +using Server.Targeting; +using Server.Network; +using Server.Mobiles; + +namespace Server.Spells.Sixth +{ + public class DispelSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Dispel", "An Ort", + 218, + 9002, + Reagent.Garlic, + Reagent.MandrakeRoot, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Sixth; } } + + public DispelSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public class InternalTarget : Target + { + private DispelSpell m_Owner; + + public InternalTarget( DispelSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + Mobile m = (Mobile)o; + BaseCreature bc = m as BaseCreature; + + if ( !from.CanSee( m ) ) + { + from.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( bc == null || !bc.IsDispellable ) + { + from.SendLocalizedMessage( 1005049 ); // That cannot be dispelled. + } + else if ( m_Owner.CheckHSequence( m ) ) + { + SpellHelper.Turn( from, m ); + + double dispelChance = (50.0 + ((100 * (from.Skills.Magery.Value - bc.DispelDifficulty)) / (bc.DispelFocus*2))) / 100; + + if ( dispelChance > Utility.RandomDouble() ) + { + Effects.SendLocationParticles( EffectItem.Create( m.Location, m.Map, EffectItem.DefaultDuration ), 0x3728, 8, 20, 5042 ); + Effects.PlaySound( m, m.Map, 0x201 ); + + m.Delete(); + } + else + { + m.FixedEffect( 0x3779, 10, 20 ); + from.SendLocalizedMessage( 1010084 ); // The creature resisted the attempt to dispel it! + } + } + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/6th/EnergyBolt.cs b/Scripts/Spells/6th/EnergyBolt.cs new file mode 100644 index 0000000..114ef57 --- /dev/null +++ b/Scripts/Spells/6th/EnergyBolt.cs @@ -0,0 +1,88 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Sixth +{ + public class EnergyBoltSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Energy Bolt", "Corp Por", + 230, + 9022, + Reagent.BlackPearl, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.Sixth; } } + + public EnergyBoltSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return true; } } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + Mobile source = Caster; + + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, ref source, ref m ); + + double damage = Utility.Random( 24, 18 ); + + if ( CheckResisted( m ) ) + { + damage *= 0.75; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + // Scale damage based on evalint and resist + damage *= GetDamageScalar( m ); + + // Do the effects + source.MovingParticles( m, 0x379F, 7, 0, false, true, 3043, 4043, 0x211 ); + source.PlaySound( 0x20A ); + + // Deal the damage + SpellHelper.Damage( this, m, damage ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private EnergyBoltSpell m_Owner; + + public InternalTarget( EnergyBoltSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + m_Owner.Target( (Mobile)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/6th/Explosion.cs b/Scripts/Spells/6th/Explosion.cs new file mode 100644 index 0000000..e047c46 --- /dev/null +++ b/Scripts/Spells/6th/Explosion.cs @@ -0,0 +1,121 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Sixth +{ + public class ExplosionSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Explosion", "Vas Ort Flam", + 230, + 9041, + Reagent.Bloodmoss, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Sixth; } } + + public ExplosionSpell( Mobile caster, Item scroll ) + : base( caster, scroll, m_Info ) + { + } + + public override bool DelayedDamageStacking { get { return true; } } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage { get { return false; } } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( Caster.CanBeHarmful( m ) && CheckSequence() ) + { + Mobile attacker = Caster, defender = m; + + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int) this.Circle, Caster, ref m ); + + InternalTimer t = new InternalTimer( this, attacker, defender, m ); + t.Start(); + } + + FinishSequence(); + } + + private class InternalTimer : Timer + { + private MagerySpell m_Spell; + private Mobile m_Target; + private Mobile m_Attacker, m_Defender; + + public InternalTimer( MagerySpell spell, Mobile attacker, Mobile defender, Mobile target ): base( TimeSpan.FromSeconds( 2.5 ) ) + { + m_Spell = spell; + m_Attacker = attacker; + m_Defender = defender; + m_Target = target; + + if ( m_Spell != null ) + m_Spell.StartDelayedDamageContext( attacker, this ); + + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + if ( m_Attacker.HarmfulCheck( m_Defender ) ) + { + double damage = Utility.Random( 23, 22 ); + + if ( m_Spell.CheckResisted( m_Target ) ) + { + damage *= 0.75; + + m_Target.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + damage *= m_Spell.GetDamageScalar( m_Target ); + + m_Target.FixedParticles( 0x36BD, 20, 10, 5044, EffectLayer.Head ); + m_Target.PlaySound( 0x307 ); + + SpellHelper.Damage( m_Spell, m_Target, damage ); + + if ( m_Spell != null ) + m_Spell.RemoveDelayedDamageContext( m_Attacker ); + } + } + } + + private class InternalTarget : Target + { + private ExplosionSpell m_Owner; + + public InternalTarget( ExplosionSpell owner ) + : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + m_Owner.Target( (Mobile) o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/6th/Invisibility.cs b/Scripts/Spells/6th/Invisibility.cs new file mode 100644 index 0000000..ca8970f --- /dev/null +++ b/Scripts/Spells/6th/Invisibility.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections; +using Server; +using Server.Targeting; +using Server.Items; + +namespace Server.Spells.Sixth +{ + public class InvisibilitySpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Invisibility", "An Lor Xen", + 206, + 9002, + Reagent.Bloodmoss, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.Sixth; } } + + public InvisibilitySpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( m is Mobiles.BaseVendor || m is Mobiles.PlayerVendor || m is Mobiles.PlayerBarkeeper || m.AccessLevel > Caster.AccessLevel ) + { + Caster.SendLocalizedMessage( 501857 ); // This spell won't work on that! + } + else if ( CheckBSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + Effects.SendLocationParticles( EffectItem.Create( new Point3D( m.X, m.Y, m.Z + 16 ), Caster.Map, EffectItem.DefaultDuration ), 0x376A, 10, 15, 5045 ); + m.PlaySound( 0x3C4 ); + + m.Hidden = true; + m.Combatant = null; + m.Warmode = false; + + RemoveTimer( m ); + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + TimeSpan duration = TimeSpan.FromSeconds( (( 1.2 * Caster.Skills.Magery.Fixed) / 10 ) + (Caster.Skills[SkillName.Concentration].Value/5) ); + + Timer t = new InternalTimer( m, duration ); + + m_Table[m] = t; + + t.Start(); + } + + FinishSequence(); + } + + private static Hashtable m_Table = new Hashtable(); + + public static bool HasTimer( Mobile m ) + { + return m_Table[m] != null; + } + + public static void RemoveTimer( Mobile m ) + { + Timer t = (Timer)m_Table[m]; + + if ( t != null ) + { + t.Stop(); + m_Table.Remove( m ); + } + } + + private class InternalTimer : Timer + { + private Mobile m_Mobile; + + public InternalTimer( Mobile m, TimeSpan duration ) : base( duration ) + { + Priority = TimerPriority.OneSecond; + m_Mobile = m; + } + + protected override void OnTick() + { + m_Mobile.RevealingAction(); + RemoveTimer( m_Mobile ); + } + } + + public class InternalTarget : Target + { + private InvisibilitySpell m_Owner; + + public InternalTarget( InvisibilitySpell owner ) : base( 12, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/6th/Mark.cs b/Scripts/Spells/6th/Mark.cs new file mode 100644 index 0000000..62f17e7 --- /dev/null +++ b/Scripts/Spells/6th/Mark.cs @@ -0,0 +1,99 @@ +using System; +using Server.Items; +using Server.Targeting; +using Server.Network; +using Server.Regions; + +namespace Server.Spells.Sixth +{ + public class MarkSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Mark", "Kal Por Ylem", + 218, + 9002, + Reagent.BlackPearl, + Reagent.Bloodmoss, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Sixth; } } + + public MarkSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool CheckCast() + { + if ( Server.Engines.Harvest.Fishing.IsOnBoat( Caster ) ) + { + Caster.SendMessage( "The waves of the sea are distracting you from casting this spell!" ); + Caster.FixedEffect( 0x3735, 6, 30 ); + Caster.PlaySound( 0x5C ); + return false; + } + + if ( !base.CheckCast() ) + return false; + + return true; + } + + public void Target( MagicRune rune ) + { + if ( !Caster.CanSee( rune ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckMulti( Caster.Location, Caster.Map, true ) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( !rune.IsChildOf( Caster.Backpack ) ) + { + Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1062422 ); // You must have this rune in your backpack in order to mark it. + } + else if ( CheckSequence() ) + { + rune.Mark( Caster ); + + Caster.PlaySound( 0x1FA ); + Effects.SendLocationEffect( Caster, Caster.Map, 14201, 16 ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private MarkSpell m_Owner; + + public InternalTarget( MarkSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is MagicRune ) + { + m_Owner.Target( (MagicRune) o ); + } + else + { + from.Send( new MessageLocalized( from.Serial, from.Body, MessageType.Regular, 0x3B2, 3, 501797, from.Name, "" ) ); // I cannot mark that object. + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/6th/MassCurse.cs b/Scripts/Spells/6th/MassCurse.cs new file mode 100644 index 0000000..6db808a --- /dev/null +++ b/Scripts/Spells/6th/MassCurse.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Sixth +{ + public class MassCurseSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Mass Curse", "Vas Des Sanct", + 218, + 9031, + false, + Reagent.Garlic, + Reagent.Nightshade, + Reagent.MandrakeRoot, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Sixth; } } + + public MassCurseSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + List targets = new List(); + + Map map = Caster.Map; + + if ( map != null ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + IPooledEnumerable eable = map.GetMobilesInRange( new Point3D( p ), (2+(int)(Caster.Skills[SkillName.Concentration].Value/20)) ); + + foreach ( Mobile m in eable ) + { + if ( SpellHelper.ValidIndirectTarget( Caster, m ) && Caster.CanSee( m ) && Caster.CanBeHarmful( m, false ) ) + targets.Add( m ); + } + + eable.Free(); + } + + for ( int i = 0; i < targets.Count; ++i ) + { + Mobile m = targets[i]; + + Caster.DoHarmful( m ); + + SpellHelper.AddStatCurse( Caster, m, StatType.Str ); SpellHelper.DisableSkillCheck = true; + SpellHelper.AddStatCurse( Caster, m, StatType.Dex ); + SpellHelper.AddStatCurse( Caster, m, StatType.Int ); SpellHelper.DisableSkillCheck = false; + + m.FixedParticles( 0x374A, 10, 15, 5028, EffectLayer.Waist ); + m.PlaySound( 0x1FB ); + + HarmfulSpell( m ); + } + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private MassCurseSpell m_Owner; + + public InternalTarget( MassCurseSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + m_Owner.Target( p ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/6th/ParalyzeField.cs b/Scripts/Spells/6th/ParalyzeField.cs new file mode 100644 index 0000000..484e16b --- /dev/null +++ b/Scripts/Spells/6th/ParalyzeField.cs @@ -0,0 +1,224 @@ +using System; +using Server.Targeting; +using Server.Items; +using Server.Network; +using Server.Misc; +using Server.Mobiles; + +namespace Server.Spells.Sixth +{ + public class ParalyzeFieldSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Paralyze Field", "In Ex Grav", + 230, + 9012, + false, + Reagent.BlackPearl, + Reagent.Ginseng, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Sixth; } } + + public ParalyzeFieldSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + int dx = Caster.Location.X - p.X; + int dy = Caster.Location.Y - p.Y; + int rx = (dx - dy) * 44; + int ry = (dx + dy) * 44; + + bool eastToWest; + + if ( rx >= 0 && ry >= 0 ) + eastToWest = false; + else if ( rx >= 0 ) + eastToWest = true; + else if ( ry >= 0 ) + eastToWest = true; + else + eastToWest = false; + + Effects.PlaySound( p, Caster.Map, 0x20B ); + + int itemID = eastToWest ? 0x3967 : 0x3979; + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + TimeSpan duration = TimeSpan.FromSeconds( 3.0 + (Caster.Skills[SkillName.Magery].Value / 3.0) + (Caster.Skills[SkillName.Concentration].Value / 10.0) ); + + for ( int i = -2; i <= 2; ++i ) + { + Point3D loc = new Point3D( eastToWest ? p.X + i : p.X, eastToWest ? p.Y : p.Y + i, p.Z ); + bool canFit = SpellHelper.AdjustField( ref loc, Caster.Map, 12, false ); + + if ( !canFit ) + continue; + + Item item = new InternalItem( Caster, itemID, loc, Caster.Map, duration ); + item.ProcessDelta(); + + Effects.SendLocationParticles( EffectItem.Create( loc, Caster.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 5048 ); + } + } + + FinishSequence(); + } + + [DispellableField] + public class InternalItem : Item + { + private Timer m_Timer; + private Mobile m_Caster; + private DateTime m_End; + + public override bool BlocksFit{ get{ return true; } } + + public InternalItem( Mobile caster, int itemID, Point3D loc, Map map, TimeSpan duration ) : base( itemID ) + { + Visible = false; + Movable = false; + Light = LightType.Circle300; + + MoveToWorld( loc, map ); + + if ( caster.InLOS( this ) ) + Visible = true; + else + Delete(); + + if ( Deleted ) + return; + + m_Caster = caster; + + m_Timer = new InternalTimer( this, duration ); + m_Timer.Start(); + + m_End = DateTime.Now + duration; + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Timer != null ) + m_Timer.Stop(); + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( m_Caster ); + writer.WriteDeltaTime( m_End ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Caster = reader.ReadMobile(); + m_End = reader.ReadDeltaTime(); + + m_Timer = new InternalTimer( this, m_End - DateTime.Now ); + m_Timer.Start(); + + break; + } + } + } + + public override bool OnMoveOver( Mobile m ) + { + if ( Visible && m_Caster != null && SpellHelper.ValidIndirectTarget( m_Caster, m ) && m_Caster.CanBeHarmful( m, false ) ) + { + if ( SpellHelper.CanRevealCaster( m ) ) + m_Caster.RevealingAction(); + + m_Caster.DoHarmful( m ); + + double duration = 7.0 + (m_Caster.Skills[SkillName.Magery].Value * 0.2); + + m.Paralyze( TimeSpan.FromSeconds( duration ) ); + + m.PlaySound( 0x204 ); + m.FixedEffect( 0x376A, 10, 16 ); + + if ( m is BaseCreature ) + ((BaseCreature) m).OnHarmfulSpell( m_Caster ); + } + + return true; + } + + private class InternalTimer : Timer + { + private Item m_Item; + + public InternalTimer( Item item, TimeSpan duration ) : base( duration ) + { + Priority = TimerPriority.OneSecond; + m_Item = item; + } + + protected override void OnTick() + { + m_Item.Delete(); + } + } + } + + private class InternalTarget : Target + { + private ParalyzeFieldSpell m_Owner; + + public InternalTarget( ParalyzeFieldSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is IPoint3D ) + m_Owner.Target( (IPoint3D)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/6th/Reveal.cs b/Scripts/Spells/6th/Reveal.cs new file mode 100644 index 0000000..da04b62 --- /dev/null +++ b/Scripts/Spells/6th/Reveal.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Misc; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Sixth +{ + public class RevealSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Reveal", "Wis Quas", + 206, + 9002, + Reagent.Bloodmoss, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Sixth; } } + + public RevealSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + List targets = new List(); + + Map map = Caster.Map; + + if ( map != null ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + IPooledEnumerable eable = map.GetMobilesInRange( new Point3D( p ), 1 + (int)(Caster.Skills[SkillName.Magery].Value / 20.0) + (int)(Caster.Skills[SkillName.Concentration].Value / 20.0) ); + + foreach ( Mobile m in eable ) + { + if ( m.Hidden && (m.AccessLevel == AccessLevel.Player || Caster.AccessLevel > m.AccessLevel) && CheckDifficulty( Caster, m ) ) + targets.Add( m ); + } + + eable.Free(); + } + + for ( int i = 0; i < targets.Count; ++i ) + { + Mobile m = targets[i]; + + m.RevealingAction(); + + m.FixedParticles( 0x375A, 9, 20, 5049, EffectLayer.Head ); + m.PlaySound( 0x1FD ); + } + } + + FinishSequence(); + } + + // Reveal uses magery and detect hidden vs. hide and stealth + private static bool CheckDifficulty( Mobile from, Mobile m ) + { + // Reveal always reveals vs. invisibility spell + if ( InvisibilitySpell.HasTimer( m ) ) + return true; + + int magery = from.Skills[SkillName.Magery].Fixed; + int search = from.Skills[SkillName.Searching].Fixed; + + int hiding = m.Skills[SkillName.Hiding].Fixed; + int stealth = m.Skills[SkillName.Stealth].Fixed; + int divisor = hiding + stealth; + + int chance; + if ( divisor > 0 ) + chance = 50 * (magery + search) / divisor; + else + chance = 100; + + return chance > Utility.Random( 100 ); + } + + private class InternalTarget : Target + { + private RevealSpell m_Owner; + + public InternalTarget( RevealSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + m_Owner.Target( p ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/7th/ChainLightning.cs b/Scripts/Spells/7th/ChainLightning.cs new file mode 100644 index 0000000..5017bda --- /dev/null +++ b/Scripts/Spells/7th/ChainLightning.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using Server.Network; +using Server.Items; +using Server.Targeting; + +namespace Server.Spells.Seventh +{ + public class ChainLightningSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Chain Lightning", "Vas Ort Grav", + 209, + 9022, + false, + Reagent.BlackPearl, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Seventh; } } + + public ChainLightningSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return true; } } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + if ( p is Item ) + p = ((Item)p).GetWorldLocation(); + + List targets = new List(); + + Map map = Caster.Map; + + if ( map != null ) + { + IPooledEnumerable eable = map.GetMobilesInRange( new Point3D( p ), 2 ); + + foreach ( Mobile m in eable ) + { + if ( SpellHelper.ValidIndirectTarget( Caster, m ) && Caster.CanBeHarmful( m, false ) ) + { + targets.Add( m ); + } + } + + eable.Free(); + } + + double damage = Utility.Random( 27, 22 ); + + if ( targets.Count > 0 ) + { + damage /= targets.Count; + + double toDeal; + for ( int i = 0; i < targets.Count; ++i ) + { + toDeal = damage; + Mobile m = targets[i]; + toDeal *= GetDamageScalar( m ); + + if ( CheckResisted( m ) ) + { + toDeal *= 0.5; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + toDeal *= GetDamageScalar( m ); + Caster.DoHarmful( m ); + SpellHelper.Damage( this, m, toDeal ); + + m.BoltEffect( 0 ); + } + } + else + { + Caster.PlaySound ( 0x29 ); + } + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private ChainLightningSpell m_Owner; + + public InternalTarget( ChainLightningSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + m_Owner.Target( p ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/7th/EnergyField.cs b/Scripts/Spells/7th/EnergyField.cs new file mode 100644 index 0000000..a93e7ca --- /dev/null +++ b/Scripts/Spells/7th/EnergyField.cs @@ -0,0 +1,193 @@ +using System; +using Server.Targeting; +using Server.Network; +using Server.Misc; +using Server.Items; +using Server.Mobiles; + +namespace Server.Spells.Seventh +{ + public class EnergyFieldSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Energy Field", "In Sanct Grav", + 221, + 9022, + false, + Reagent.BlackPearl, + Reagent.MandrakeRoot, + Reagent.SpidersSilk, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Seventh; } } + + public EnergyFieldSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + int dx = Caster.Location.X - p.X; + int dy = Caster.Location.Y - p.Y; + int rx = (dx - dy) * 44; + int ry = (dx + dy) * 44; + + bool eastToWest; + + if ( rx >= 0 && ry >= 0 ) + { + eastToWest = false; + } + else if ( rx >= 0 ) + { + eastToWest = true; + } + else if ( ry >= 0 ) + { + eastToWest = true; + } + else + { + eastToWest = false; + } + + Effects.PlaySound( p, Caster.Map, 0x20B ); + + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + // (28% of concentration) + (28% of magery) + 2.0 seconds + TimeSpan duration = TimeSpan.FromSeconds( (Caster.Skills[SkillName.Concentration].Value * 0.28) + (Caster.Skills[SkillName.Magery].Value * 0.28) + 2.0 ); + + int itemID = eastToWest ? 0x3946 : 0x3956; + + for ( int i = -2; i <= 2; ++i ) + { + Point3D loc = new Point3D( eastToWest ? p.X + i : p.X, eastToWest ? p.Y : p.Y + i, p.Z ); + bool canFit = SpellHelper.AdjustField( ref loc, Caster.Map, 12, false ); + + if ( !canFit ) + continue; + + Item item = new InternalItem( loc, Caster.Map, duration, itemID, Caster ); + item.ProcessDelta(); + + Effects.SendLocationParticles( EffectItem.Create( loc, Caster.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 5051 ); + } + } + + FinishSequence(); + } + + [DispellableField] + private class InternalItem : Item + { + private Timer m_Timer; + private Mobile m_Caster; + + public override bool BlocksFit{ get{ return true; } } + + public InternalItem( Point3D loc, Map map, TimeSpan duration, int itemID, Mobile caster ) : base( itemID ) + { + Visible = false; + Movable = false; + Light = LightType.Circle300; + + MoveToWorld( loc, map ); + + m_Caster = caster; + + if ( caster.InLOS( this ) ) + Visible = true; + else + Delete(); + + if ( Deleted ) + return; + + m_Timer = new InternalTimer( this, duration ); + m_Timer.Start(); + } + + public InternalItem( Serial serial ) : base( serial ) + { + m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( 5.0 ) ); + m_Timer.Start(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Timer != null ) + m_Timer.Stop(); + } + + private class InternalTimer : Timer + { + private InternalItem m_Item; + + public InternalTimer( InternalItem item, TimeSpan duration ) : base( duration ) + { + Priority = TimerPriority.OneSecond; + m_Item = item; + } + + protected override void OnTick() + { + m_Item.Delete(); + } + } + } + + private class InternalTarget : Target + { + private EnergyFieldSpell m_Owner; + + public InternalTarget( EnergyFieldSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is IPoint3D ) + m_Owner.Target( (IPoint3D)o ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/7th/FlameStrike.cs b/Scripts/Spells/7th/FlameStrike.cs new file mode 100644 index 0000000..8a260e6 --- /dev/null +++ b/Scripts/Spells/7th/FlameStrike.cs @@ -0,0 +1,85 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Seventh +{ + public class FlameStrikeSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Flame Strike", "Kal Vas Flam", + 245, + 9042, + Reagent.SpidersSilk, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Seventh; } } + + public FlameStrikeSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return true; } } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + double damage = Utility.Random( 27, 22 ); + + if ( CheckResisted( m ) ) + { + damage *= 0.6; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + + damage *= GetDamageScalar( m ); + + m.FixedParticles( 0x3709, 10, 30, 5052, EffectLayer.LeftFoot ); + m.PlaySound( 0x208 ); + + SpellHelper.Damage( this, m, damage ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private FlameStrikeSpell m_Owner; + + public InternalTarget( FlameStrikeSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/7th/GateTravel.cs b/Scripts/Spells/7th/GateTravel.cs new file mode 100644 index 0000000..8b68245 --- /dev/null +++ b/Scripts/Spells/7th/GateTravel.cs @@ -0,0 +1,192 @@ +using System; +using Server.Network; +using Server.Multis; +using Server.Items; +using Server.Targeting; +using Server.Misc; +using Server.Regions; +using Server.Mobiles; + +namespace Server.Spells.Seventh +{ + public class GateTravelSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Gate Travel", "Vas Rel Por", + 263, + 9032, + Reagent.BlackPearl, + Reagent.MandrakeRoot, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Seventh; } } + + public GateTravelSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool CheckCast() + { + if ( Server.Engines.Harvest.Fishing.IsOnBoat( Caster ) ) + { + Caster.SendMessage( "The waves of the sea are distracting you from casting this spell!" ); + Caster.FixedEffect( 0x3735, 6, 30 ); + Caster.PlaySound( 0x5C ); + return false; + } + else if ( SpellHelper.CheckCombat( Caster ) ) + { + Caster.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle?? + return false; + } + + return true; + } + + private bool GateExistsAt(Map map, Point3D loc ) + { + bool _gateFound = false; + + IPooledEnumerable eable = map.GetItemsInRange( loc, 0 ); + foreach ( Item item in eable ) + { + if ( item is Magicgate ) + { + _gateFound = true; + break; + } + } + eable.Free(); + + return _gateFound; + } + + public void Effect( Point3D loc, Map map, bool checkMulti ) + { + if ( SpellHelper.CheckCombat( Caster ) ) + { + Caster.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle?? + } + else if ( !map.CanSpawnMobile( loc.X, loc.Y, loc.Z ) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( (checkMulti && SpellHelper.CheckMulti( loc, map )) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( GateExistsAt( Caster.Map, Caster.Location ) ) + { + Caster.SendLocalizedMessage( 1071242 ); // There is already a gate there. + } + else if ( CheckSequence() ) + { + Caster.SendLocalizedMessage( 501024 ); // You open a magical gate to another location + + Effects.PlaySound( Caster.Location, Caster.Map, 0x20E ); + + InternalItem firstGate = new InternalItem( loc, map ); + firstGate.MoveToWorld( Caster.Location, Caster.Map ); + + Effects.PlaySound( loc, map, 0x20E ); + + InternalItem secondGate = new InternalItem( Caster.Location, Caster.Map ); + secondGate.MoveToWorld( loc, map ); + } + + FinishSequence(); + } + + [DispellableField] + private class InternalItem : Magicgate + { + public InternalItem( Point3D target, Map map ) : base( target, map ) + { + Map = map; + + Dispellable = true; + + InternalTimer t = new InternalTimer( this ); + t.Start(); + } + + public InternalItem( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + Delete(); + } + + private class InternalTimer : Timer + { + private Item m_Item; + + public InternalTimer( Item item ) : base( TimeSpan.FromSeconds( 30.0 ) ) + { + Priority = TimerPriority.OneSecond; + m_Item = item; + } + + protected override void OnTick() + { + m_Item.Delete(); + } + } + } + + private class InternalTarget : Target + { + private GateTravelSpell m_Owner; + + public InternalTarget( GateTravelSpell owner ) : base( 12, false, TargetFlags.None ) + { + m_Owner = owner; + + owner.Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 501029 ); // Select Marked item. + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is MagicRune ) + { + MagicRune rune = (MagicRune)o; + + if ( rune.Marked && rune.Owner != from ) + from.SendMessage( "This rune belongs to someone else." ); + else if ( rune.Marked ) + m_Owner.Effect( rune.Target, rune.TargetMap, true ); + else + from.SendLocalizedMessage( 501803 ); // That rune is not yet marked. + } + else + { + from.Send( new MessageLocalized( from.Serial, from.Body, MessageType.Regular, 0x3B2, 3, 501030, from.Name, "" ) ); // I can not gate travel from that object. + } + } + + protected override void OnNonlocalTarget( Mobile from, object o ) + { + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/7th/ManaVampire.cs b/Scripts/Spells/7th/ManaVampire.cs new file mode 100644 index 0000000..00b96a7 --- /dev/null +++ b/Scripts/Spells/7th/ManaVampire.cs @@ -0,0 +1,97 @@ +using System; +using Server.Targeting; +using Server.Network; + +namespace Server.Spells.Seventh +{ + public class ManaVampireSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Mana Vampire", "Ort Sanct", + 221, + 9032, + Reagent.BlackPearl, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Seventh; } } + + public ManaVampireSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckHSequence( m ) ) + { + SpellHelper.Turn( Caster, m ); + + SpellHelper.CheckReflect( (int)this.Circle, Caster, ref m ); + + if ( m.Spell != null ) + m.Spell.OnCasterHurt(); + + m.Paralyzed = false; + + int toDrain = 0; + + if ( CheckResisted( m ) ) + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + else + toDrain = m.Mana; + + if ( toDrain > (Caster.ManaMax - Caster.Mana) ) + toDrain = Caster.ManaMax - Caster.Mana; + + m.Mana -= toDrain; + Caster.Mana += toDrain; + + m.FixedParticles( 0x374A, 10, 15, 5054, EffectLayer.Head ); + m.PlaySound( 0x1F9 ); + + HarmfulSpell( m ); + } + + FinishSequence(); + } + + public override double GetResistPercent( Mobile target ) + { + return 98.0; + } + + private class InternalTarget : Target + { + private ManaVampireSpell m_Owner; + + public InternalTarget( ManaVampireSpell owner ) : base( 12, false, TargetFlags.Harmful ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/7th/MassDispel.cs b/Scripts/Spells/7th/MassDispel.cs new file mode 100644 index 0000000..7725258 --- /dev/null +++ b/Scripts/Spells/7th/MassDispel.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using Server.Misc; +using Server.Network; +using Server.Items; +using Server.Targeting; +using Server.Mobiles; + +namespace Server.Spells.Seventh +{ + public class MassDispelSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Mass Dispel", "Vas An Ort", + 263, + 9002, + Reagent.Garlic, + Reagent.MandrakeRoot, + Reagent.BlackPearl, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Seventh; } } + + public MassDispelSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + SpellHelper.GetSurfaceTop( ref p ); + + List targets = new List(); + + Map map = Caster.Map; + + if ( map != null ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); // PASSIVE CHECK + + IPooledEnumerable eable = map.GetMobilesInRange( new Point3D( p ), (8+(int)(Caster.Skills[SkillName.Concentration].Value/20)) ); + + foreach ( Mobile m in eable ) + if ( m is BaseCreature && (m as BaseCreature).IsDispellable && Caster.CanBeHarmful( m, false ) ) + targets.Add( m ); + + eable.Free(); + } + + for ( int i = 0; i < targets.Count; ++i ) + { + Mobile m = targets[i]; + + BaseCreature bc = m as BaseCreature; + + if ( bc == null ) + continue; + + double dispelChance = (50.0 + ((100 * (Caster.Skills.Magery.Value - bc.DispelDifficulty)) / (bc.DispelFocus*2))) / 100; + + if ( dispelChance > Utility.RandomDouble() ) + { + Effects.SendLocationParticles( EffectItem.Create( m.Location, m.Map, EffectItem.DefaultDuration ), 0x3728, 8, 20, 5042 ); + Effects.PlaySound( m, m.Map, 0x201 ); + + m.Delete(); + } + else + { + Caster.DoHarmful( m ); + + m.FixedEffect( 0x3779, 10, 20 ); + } + } + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private MassDispelSpell m_Owner; + + public InternalTarget( MassDispelSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + m_Owner.Target( p ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/7th/MeteorSwarm.cs b/Scripts/Spells/7th/MeteorSwarm.cs new file mode 100644 index 0000000..6af840b --- /dev/null +++ b/Scripts/Spells/7th/MeteorSwarm.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using Server.Network; +using Server.Items; +using Server.Targeting; + +namespace Server.Spells.Seventh +{ + public class MeteorSwarmSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Meteor Swarm", "Flam Kal Des Ylem", + 233, + 9042, + false, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SulfurousAsh, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Seventh; } } + + public MeteorSwarmSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public override bool DelayedDamage{ get{ return true; } } + + public void Target( IPoint3D p ) + { + if ( !Caster.CanSee( p ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + SpellHelper.Turn( Caster, p ); + + if ( p is Item ) + p = ((Item)p).GetWorldLocation(); + + List targets = new List(); + + Map map = Caster.Map; + + if ( map != null ) + { + IPooledEnumerable eable = map.GetMobilesInRange( new Point3D( p ), 2 ); + + foreach ( Mobile m in eable ) + { + if ( Caster != m && SpellHelper.ValidIndirectTarget( Caster, m ) && Caster.CanBeHarmful( m, false ) ) + { + targets.Add( m ); + } + } + + eable.Free(); + } + + double damage = Utility.Random( 27, 22 ); + + if ( targets.Count > 0 ) + { + Effects.PlaySound( p, Caster.Map, 0x160 ); + + damage /= targets.Count; + + double toDeal; + for ( int i = 0; i < targets.Count; ++i ) + { + Mobile m = targets[i]; + + toDeal = damage; + toDeal *= GetDamageScalar( m ); + + if ( CheckResisted( m ) ) + { + damage *= 0.5; + + m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy. + } + toDeal *= GetDamageScalar( m ); + Caster.DoHarmful( m ); + SpellHelper.Damage( this, m, toDeal ); + + Caster.MovingParticles( m, 0x36D4, 7, 0, false, true, 9501, 1, 0, 0x100 ); + } + } + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private MeteorSwarmSpell m_Owner; + + public InternalTarget( MeteorSwarmSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + m_Owner.Target( p ); + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/7th/Polymorph.cs b/Scripts/Spells/7th/Polymorph.cs new file mode 100644 index 0000000..3ec0a62 --- /dev/null +++ b/Scripts/Spells/7th/Polymorph.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections; +using Server; +using Server.Items; +using Server.Gumps; +using Server.Spells; +using Server.Spells.Fifth; + +namespace Server.Spells.Seventh +{ + public class PolymorphSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Polymorph", "Vas Ylem Rel", + 221, + 9002, + Reagent.Bloodmoss, + Reagent.SpidersSilk, + Reagent.MandrakeRoot + ); + + public override SpellCircle Circle { get { return SpellCircle.Seventh; } } + + private int m_NewBody; + + public PolymorphSpell( Mobile caster, Item scroll, int body ) : base( caster, scroll, m_Info ) + { + m_NewBody = body; + } + + public PolymorphSpell( Mobile caster, Item scroll ) : this(caster,scroll,0) + { + } + + public override bool CheckCast() + { + if( TransformationSpellHelper.UnderTransformation( Caster ) ) + { + Caster.SendLocalizedMessage( 1061633 ); // You cannot polymorph while in that form. + return false; + } + else if ( DisguiseTimers.IsDisguised( Caster ) ) + { + Caster.SendLocalizedMessage( 502167 ); // You cannot polymorph while disguised. + return false; + } + else if ( !Caster.CanBeginAction( typeof( PolymorphSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + return false; + } + else if ( m_NewBody == 0 ) + { + Gump gump = new PolymorphGump( Caster, Scroll ); + + Caster.SendGump( gump ); + return false; + } + + return true; + } + + public override void OnCast() + { + if ( !Caster.CanBeginAction( typeof( PolymorphSpell ) ) ) + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + } + else if( TransformationSpellHelper.UnderTransformation( Caster ) ) + { + Caster.SendLocalizedMessage( 1061633 ); // You cannot polymorph while in that form. + } + else if ( DisguiseTimers.IsDisguised( Caster ) ) + { + Caster.SendLocalizedMessage( 502167 ); // You cannot polymorph while disguised. + } + else if ( Caster.BodyMod == 183 || Caster.BodyMod == 184 ) + { + Caster.SendLocalizedMessage( 1042512 ); // You cannot polymorph while wearing body paint + } + else if ( !Caster.CanBeginAction( typeof( IncognitoSpell ) ) || Caster.IsBodyMod ) + { + DoFizzle(); + } + else if ( CheckSequence() ) + { + if ( Caster.BeginAction( typeof( PolymorphSpell ) ) ) + { + if ( m_NewBody != 0 ) + { + if ( !((Body)m_NewBody).IsHuman ) + { + Mobiles.IMount mt = Caster.Mount; + + if ( mt != null ) + mt.Rider = null; + } + + Caster.BodyMod = m_NewBody; + + if ( m_NewBody == 400 || m_NewBody == 401 ) + Caster.HueMod = Utility.RandomSkinHue(); + else + Caster.HueMod = 0; + + BaseArmor.ValidateMobile( Caster ); + BaseClothing.ValidateMobile( Caster ); + + StopTimer( Caster ); + + Timer t = new InternalTimer( Caster ); + + m_Timers[Caster] = t; + + t.Start(); + } + } + else + { + Caster.SendLocalizedMessage( 1005559 ); // This spell is already in effect. + } + } + + FinishSequence(); + } + + private static Hashtable m_Timers = new Hashtable(); + + public static bool StopTimer( Mobile m ) + { + Timer t = (Timer)m_Timers[m]; + + if ( t != null ) + { + t.Stop(); + m_Timers.Remove( m ); + } + + return ( t != null ); + } + + private static void EndPolymorph( Mobile m ) + { + if( !m.CanBeginAction( typeof( PolymorphSpell ) ) ) + { + m.BodyMod = 0; + m.HueMod = -1; + m.EndAction( typeof( PolymorphSpell ) ); + + BaseArmor.ValidateMobile( m ); + BaseClothing.ValidateMobile( m ); + } + } + + private class InternalTimer : Timer + { + private Mobile m_Owner; + + public InternalTimer( Mobile owner ) : base( TimeSpan.FromSeconds( 0 ) ) + { + m_Owner = owner; + + int val = (int)owner.Skills[SkillName.Magery].Value; + + if ( val > 120 ) + val = 120; + + Delay = TimeSpan.FromSeconds( val ); + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + EndPolymorph( m_Owner ); + } + } + } +} diff --git a/Scripts/Spells/8th/AirElemental.cs b/Scripts/Spells/8th/AirElemental.cs new file mode 100644 index 0000000..73e98a7 --- /dev/null +++ b/Scripts/Spells/8th/AirElemental.cs @@ -0,0 +1,54 @@ +using System; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Eighth +{ + public class AirElementalSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Air Elemental", "Kal Vas Xen Hur", + 269, + 9010, + false, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Eighth; } } + + public AirElementalSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( !base.CheckCast() ) + return false; + + if ( (Caster.Followers + 2) > Caster.FollowersMax ) + { + Caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + return false; + } + + return true; + } + + public override void OnCast() + { + if ( CheckSequence() ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + TimeSpan duration = TimeSpan.FromSeconds( ((2 * Caster.Skills.Magery.Fixed) / 5) + ((2 * Caster.Skills.Concentration.Value) / 5) ); + + SpellHelper.Summon( new AirElemental(), Caster, 0x217, duration, false, false ); + } + + FinishSequence(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/8th/EarthElemental.cs b/Scripts/Spells/8th/EarthElemental.cs new file mode 100644 index 0000000..a4880ba --- /dev/null +++ b/Scripts/Spells/8th/EarthElemental.cs @@ -0,0 +1,54 @@ +using System; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Eighth +{ + public class EarthElementalSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Earth Elemental", "Kal Vas Xen Ylem", + 269, + 9020, + false, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Eighth; } } + + public EarthElementalSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( !base.CheckCast() ) + return false; + + if ( (Caster.Followers + 2) > Caster.FollowersMax ) + { + Caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + return false; + } + + return true; + } + + public override void OnCast() + { + if ( CheckSequence() ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + TimeSpan duration = TimeSpan.FromSeconds( ((2 * Caster.Skills.Magery.Fixed) / 5) + ((2 * Caster.Skills.Concentration.Value) / 5) ); + + SpellHelper.Summon( new EarthElemental(), Caster, 0x217, duration, false, false ); + } + + FinishSequence(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/8th/Earthquake.cs b/Scripts/Spells/8th/Earthquake.cs new file mode 100644 index 0000000..41014c1 --- /dev/null +++ b/Scripts/Spells/8th/Earthquake.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using Server.Network; +using Server.Items; +using Server.Targeting; + +namespace Server.Spells.Eighth +{ + public class EarthquakeSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Earthquake", "In Vas Por", + 233, + 9012, + false, + Reagent.Bloodmoss, + Reagent.Ginseng, + Reagent.MandrakeRoot, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Eighth; } } + + public EarthquakeSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool DelayedDamage{ get{ return true; } } + + public override void OnCast() + { + if ( SpellHelper.CheckTown( Caster, Caster ) && CheckSequence() ) + { + List targets = new List(); + + Map map = Caster.Map; + + if ( map != null ) + foreach ( Mobile m in Caster.GetMobilesInRange( 1 + (int)(Caster.Skills[SkillName.Magery].Value / 15.0) ) ) + if ( Caster != m && SpellHelper.ValidIndirectTarget( Caster, m ) && Caster.CanBeHarmful( m, false ) ) + targets.Add( m ); + + Caster.PlaySound( 0x220 ); + + for ( int i = 0; i < targets.Count; ++i ) + { + Mobile m = targets[i]; + + int damage = (m.Hits * 6) / 10; + + damage = (int)(damage * GetDamageScalar( m ) ); + + if ( !m.Player && damage < 10 ) + damage = 10; + else if ( damage > 75 ) + damage = 75; + + Caster.DoHarmful( m ); + SpellHelper.Damage( TimeSpan.Zero, m, Caster, damage ); + } + } + + FinishSequence(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/8th/EnergyVortex.cs b/Scripts/Spells/8th/EnergyVortex.cs new file mode 100644 index 0000000..03678b6 --- /dev/null +++ b/Scripts/Spells/8th/EnergyVortex.cs @@ -0,0 +1,98 @@ +using System; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Eighth +{ + public class EnergyVortexSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Energy Vortex", "Vas Corp Por", + 260, + 9032, + false, + Reagent.Bloodmoss, + Reagent.BlackPearl, + Reagent.MandrakeRoot, + Reagent.Nightshade + ); + + public override SpellCircle Circle { get { return SpellCircle.Eighth; } } + + public EnergyVortexSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( !base.CheckCast() ) + return false; + + if ( (Caster.Followers + 1) > Caster.FollowersMax ) + { + Caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + return false; + } + + return true; + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( IPoint3D p ) + { + Map map = Caster.Map; + + SpellHelper.GetSurfaceTop( ref p ); + + if ( map == null || !map.CanSpawnMobile( p.X, p.Y, p.Z ) ) + { + Caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + else if ( SpellHelper.CheckTown( p, Caster ) && CheckSequence() ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + TimeSpan duration = TimeSpan.FromSeconds( Utility.Random( 80, 40 ) + (Caster.Skills.Concentration.Value / 5) ); + + BaseCreature.Summon( new EnergyVortex(), false, Caster, new Point3D( p ), 0x212, duration ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private EnergyVortexSpell m_Owner; + + public InternalTarget( EnergyVortexSpell owner ) : base( 12, true, TargetFlags.None ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is IPoint3D ) + m_Owner.Target( (IPoint3D)o ); + } + + protected override void OnTargetOutOfLOS( Mobile from, object o ) + { + from.SendLocalizedMessage( 501943 ); // Target cannot be seen. Try again. + from.Target = new InternalTarget( m_Owner ); + from.Target.BeginTimeout( from, TimeoutTime - DateTime.Now ); + m_Owner = null; + } + + protected override void OnTargetFinish( Mobile from ) + { + if ( m_Owner != null ) + m_Owner.FinishSequence(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/8th/FireElemental.cs b/Scripts/Spells/8th/FireElemental.cs new file mode 100644 index 0000000..1060c59 --- /dev/null +++ b/Scripts/Spells/8th/FireElemental.cs @@ -0,0 +1,55 @@ +using System; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Eighth +{ + public class FireElementalSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Fire Elemental", "Kal Vas Xen Flam", + 269, + 9050, + false, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SpidersSilk, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Eighth; } } + + public FireElementalSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( !base.CheckCast() ) + return false; + + if ( (Caster.Followers + 4) > Caster.FollowersMax ) + { + Caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + return false; + } + + return true; + } + + public override void OnCast() + { + if ( CheckSequence() ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + TimeSpan duration = TimeSpan.FromSeconds( ((2 * Caster.Skills.Magery.Fixed) / 5) + ((2 * Caster.Skills.Concentration.Value) / 5) ); + + SpellHelper.Summon( new FireElemental(), Caster, 0x217, duration, false, false ); + } + + FinishSequence(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/8th/Resurrection.cs b/Scripts/Spells/8th/Resurrection.cs new file mode 100644 index 0000000..a7ca1bf --- /dev/null +++ b/Scripts/Spells/8th/Resurrection.cs @@ -0,0 +1,180 @@ +using System; +using Server; +using Server.Items; +using Server.Mobiles; +using Server.Prompts; +using Server.Targeting; +using Server.Network; +using Server.Gumps; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Spells.Eighth +{ + public class ResurrectionSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Resurrection", "An Corp", + 245, + 9062, + Reagent.Bloodmoss, + Reagent.Garlic, + Reagent.Ginseng + ); + + public override SpellCircle Circle { get { return SpellCircle.Eighth; } } + + public ResurrectionSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override void OnCast() + { + Caster.Target = new InternalTarget( this ); + } + + public void Target( Mobile m ) + { + if ( !Caster.CanSee( m ) ) + { + Caster.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + else if ( !Caster.Alive ) + { + Caster.SendLocalizedMessage( 501040 ); // The resurrecter must be alive. + } + else if ( m == Caster && CheckBSequence( m, true ) ) + { + ArrayList targets = new ArrayList(); + foreach ( Item item in World.Items.Values ) + if ( item is LifeCrystal ) + { + LifeCrystal myOrb = (LifeCrystal)item; + if ( myOrb.m_Owner == m ) + { + targets.Add( item ); + } + } + for ( int i = 0; i < targets.Count; ++i ) + { + Item item = ( Item )targets[ i ]; + item.Delete(); + } + + m.PlaySound( 0x214 ); + m.FixedEffect( 0x376A, 10, 16, 0, 0 ); + m.SendMessage( "You conjure yourself a life crystal." ); + LifeCrystal crystal = new LifeCrystal(); + crystal.m_Owner = m; + m.AddToBackpack( crystal ); + } + else if ( m.Alive ) + { + Caster.SendLocalizedMessage( 501041 ); // Target is not dead. + } + else if ( !Caster.InRange( m, 1 ) ) + { + Caster.SendLocalizedMessage( 501042 ); // Target is not close enough. + } + else if ( !m.Player ) + { + Caster.SendLocalizedMessage( 501043 ); // Target is not a being. + } + else if ( m.Map == null || !m.Map.CanFit( m.Location, 16, false, false ) ) + { + Caster.SendLocalizedMessage( 501042 ); // Target can not be resurrected at that location. + m.SendLocalizedMessage( 502391 ); // Thou can not be resurrected there! + } + else if ( CheckBSequence( m, true ) ) + { + SpellHelper.Turn( Caster, m ); + + m.PlaySound( 0x214 ); + m.FixedEffect( 0x376A, 10, 16 ); + + m.CloseGump( typeof( ResurrectGump ) ); + m.SendGump( new ResurrectGump( m, Caster ) ); + } + + FinishSequence(); + } + + private class InternalTarget : Target + { + private ResurrectionSpell m_Owner; + + public InternalTarget( ResurrectionSpell owner ) : base( 1, false, TargetFlags.Beneficial ) + { + m_Owner = owner; + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( o is Mobile ) + { + m_Owner.Target( (Mobile)o ); + } + } + + protected override void OnTargetFinish( Mobile from ) + { + m_Owner.FinishSequence(); + } + } + } +} + +namespace Server.Items +{ + public class LifeCrystal : Item + { + public override bool DisplayLootType{ get{ return false; } } + + public Mobile m_Owner; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Owner + { + get { return m_Owner; } + set { m_Owner = value; InvalidateProperties(); } + } + + [Constructable] + public LifeCrystal() : base( 0x023F ) + { + Name = "life crystal"; + LootType = LootType.Blessed; + Movable = false; + Weight = 1.0; + } + + public override void OnDoubleClick( Mobile m ) + { + m.SendMessage( "Since you are alive, the crystal vanishes!" ); + this.Delete(); + } + + public override void OnDoubleClickDead( Mobile m ) + { + m.Resurrect(); + m.FixedEffect( 0x376A, 10, 16, 0, 0 ); + this.Delete(); + } + + public LifeCrystal(Serial serial) : base(serial){} + + public override void Serialize(GenericWriter writer) + { + base.Serialize(writer); + writer.Write( (int) 0 ); // version + writer.Write( (Mobile) m_Owner ); + } + + public override void Deserialize(GenericReader reader) + { + base.Deserialize(reader); + int version = reader.ReadInt(); + m_Owner = reader.ReadMobile(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/8th/SummonDaemon.cs b/Scripts/Spells/8th/SummonDaemon.cs new file mode 100644 index 0000000..8d3c3f5 --- /dev/null +++ b/Scripts/Spells/8th/SummonDaemon.cs @@ -0,0 +1,57 @@ +using System; +using Server.Misc; +using Server.Items; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Eighth +{ + public class SummonDaemonSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Summon Daemon", "Kal Vas Xen Corp", + 269, + 9050, + false, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SpidersSilk, + Reagent.SulfurousAsh + ); + + public override SpellCircle Circle { get { return SpellCircle.Eighth; } } + + public SummonDaemonSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( !base.CheckCast() ) + return false; + + if ( (Caster.Followers + 5) > Caster.FollowersMax ) + { + Caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + return false; + } + + return true; + } + + public override void OnCast() + { + if ( CheckSequence() ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + TimeSpan duration = TimeSpan.FromSeconds( ((2 * Caster.Skills.Magery.Fixed) / 5) + ((2 * Caster.Skills.Concentration.Value) / 5) ); + + SpellHelper.Summon( new Daemon(), Caster, 0x216, duration, false, false ); + } + + FinishSequence(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/8th/WaterElemental.cs b/Scripts/Spells/8th/WaterElemental.cs new file mode 100644 index 0000000..40079b9 --- /dev/null +++ b/Scripts/Spells/8th/WaterElemental.cs @@ -0,0 +1,54 @@ +using System; +using Server.Mobiles; +using Server.Network; +using Server.Targeting; + +namespace Server.Spells.Eighth +{ + public class WaterElementalSpell : MagerySpell + { + private static SpellInfo m_Info = new SpellInfo( + "Water Elemental", "Kal Vas Xen An Flam", + 269, + 9070, + false, + Reagent.Bloodmoss, + Reagent.MandrakeRoot, + Reagent.SpidersSilk + ); + + public override SpellCircle Circle { get { return SpellCircle.Eighth; } } + + public WaterElementalSpell( Mobile caster, Item scroll ) : base( caster, scroll, m_Info ) + { + } + + public override bool CheckCast() + { + if ( !base.CheckCast() ) + return false; + + if ( (Caster.Followers + 3) > Caster.FollowersMax ) + { + Caster.SendLocalizedMessage( 1049645 ); // You have too many followers to summon that creature. + return false; + } + + return true; + } + + public override void OnCast() + { + if ( CheckSequence() ) + { + Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ); + + TimeSpan duration = TimeSpan.FromSeconds( ((2 * Caster.Skills.Magery.Fixed) / 5) + ((2 * Caster.Skills.Concentration.Value) / 5) ); + + SpellHelper.Summon( new WaterElemental(), Caster, 0x217, duration, false, false ); + } + + FinishSequence(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/BagOfReagents.cs b/Scripts/Spells/BagOfReagents.cs new file mode 100644 index 0000000..7a4a004 --- /dev/null +++ b/Scripts/Spells/BagOfReagents.cs @@ -0,0 +1,54 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class BagOfReagents : Bag + { + [Constructable] + public BagOfReagents() + { + Weight = 10.0; + } + + public override void Open( Mobile from ) + { + int amount = 50; + if ( this.Weight > 2.0 ) + { + Item i = null; + i = new BlackPearl( amount ); DropItem( i ); + i = new Bloodmoss( amount ); DropItem( i ); + i = new Garlic( amount ); DropItem( i ); + i = new Ginseng( amount ); DropItem( i ); + i = new MandrakeRoot( amount ); DropItem( i ); + i = new Nightshade( amount ); DropItem( i ); + i = new SulfurousAsh( amount ); DropItem( i ); + i = new SpidersSilk( amount ); DropItem( i ); + + this.Weight = 2.0; + } + + base.Open( from ); + } + + public BagOfReagents( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/Base/DisturbType.cs b/Scripts/Spells/Base/DisturbType.cs new file mode 100644 index 0000000..2bfaed0 --- /dev/null +++ b/Scripts/Spells/Base/DisturbType.cs @@ -0,0 +1,15 @@ +using System; +using Server; + +namespace Server.Spells +{ + public enum DisturbType + { + Unspecified, + EquipRequest, + UseRequest, + Hurt, + Kill, + NewCast + } +} \ No newline at end of file diff --git a/Scripts/Spells/Base/Initializer.cs b/Scripts/Spells/Base/Initializer.cs new file mode 100644 index 0000000..b735402 --- /dev/null +++ b/Scripts/Spells/Base/Initializer.cs @@ -0,0 +1,96 @@ +using System; +using Server; + +namespace Server.Spells +{ + public class Initializer + { + public static void Initialize() + { + // First circle + Register( 00, typeof( First.ClumsySpell ) ); + Register( 01, typeof( First.CreateFoodSpell ) ); + Register( 02, typeof( First.FeeblemindSpell ) ); + Register( 03, typeof( First.HealSpell ) ); + Register( 04, typeof( First.MagicArrowSpell ) ); + Register( 05, typeof( First.NightSightSpell ) ); + Register( 06, typeof( First.ReactiveArmorSpell ) ); + Register( 07, typeof( First.WeakenSpell ) ); + + // Second circle + Register( 08, typeof( Second.AgilitySpell ) ); + Register( 09, typeof( Second.CunningSpell ) ); + Register( 10, typeof( Second.CureSpell ) ); + Register( 11, typeof( Second.HarmSpell ) ); + Register( 12, typeof( Second.MagicTrapSpell ) ); + Register( 13, typeof( Second.RemoveTrapSpell ) ); + Register( 14, typeof( Second.ProtectionSpell ) ); + Register( 15, typeof( Second.StrengthSpell ) ); + + // Third circle + Register( 16, typeof( Third.BlessSpell ) ); + Register( 17, typeof( Third.FireballSpell ) ); + Register( 18, typeof( Third.MagicLockSpell ) ); + Register( 19, typeof( Third.PoisonSpell ) ); + Register( 20, typeof( Third.TelekinesisSpell ) ); + Register( 21, typeof( Third.TeleportSpell ) ); + Register( 22, typeof( Third.UnlockSpell ) ); + Register( 23, typeof( Third.WallOfStoneSpell ) ); + + // Fourth circle + Register( 24, typeof( Fourth.ArchCureSpell ) ); + Register( 25, typeof( Fourth.ArchProtectionSpell ) ); + Register( 26, typeof( Fourth.CurseSpell ) ); + Register( 27, typeof( Fourth.FireFieldSpell ) ); + Register( 28, typeof( Fourth.GreaterHealSpell ) ); + Register( 29, typeof( Fourth.LightningSpell ) ); + Register( 30, typeof( Fourth.ManaDrainSpell ) ); + Register( 31, typeof( Fourth.RecallSpell ) ); + + // Fifth circle + Register( 32, typeof( Fifth.BladeSpiritsSpell ) ); + Register( 33, typeof( Fifth.DispelFieldSpell ) ); + Register( 34, typeof( Fifth.IncognitoSpell ) ); + Register( 35, typeof( Fifth.MagicReflectSpell ) ); + Register( 36, typeof( Fifth.MindBlastSpell ) ); + Register( 37, typeof( Fifth.ParalyzeSpell ) ); + Register( 38, typeof( Fifth.PoisonFieldSpell ) ); + Register( 39, typeof( Fifth.SummonCreatureSpell ) ); + + // Sixth circle + Register( 40, typeof( Sixth.DispelSpell ) ); + Register( 41, typeof( Sixth.EnergyBoltSpell ) ); + Register( 42, typeof( Sixth.ExplosionSpell ) ); + Register( 43, typeof( Sixth.InvisibilitySpell ) ); + Register( 44, typeof( Sixth.MarkSpell ) ); + Register( 45, typeof( Sixth.MassCurseSpell ) ); + Register( 46, typeof( Sixth.ParalyzeFieldSpell ) ); + Register( 47, typeof( Sixth.RevealSpell ) ); + + // Seventh circle + Register( 48, typeof( Seventh.ChainLightningSpell ) ); + Register( 49, typeof( Seventh.EnergyFieldSpell ) ); + Register( 50, typeof( Seventh.FlameStrikeSpell ) ); + Register( 51, typeof( Seventh.GateTravelSpell ) ); + Register( 52, typeof( Seventh.ManaVampireSpell ) ); + Register( 53, typeof( Seventh.MassDispelSpell ) ); + Register( 54, typeof( Seventh.MeteorSwarmSpell ) ); + Register( 55, typeof( Seventh.PolymorphSpell ) ); + + // Eighth circle + Register( 56, typeof( Eighth.EarthquakeSpell ) ); + Register( 57, typeof( Eighth.EnergyVortexSpell ) ); + Register( 58, typeof( Eighth.ResurrectionSpell ) ); + Register( 59, typeof( Eighth.AirElementalSpell ) ); + Register( 60, typeof( Eighth.SummonDaemonSpell ) ); + Register( 61, typeof( Eighth.EarthElementalSpell ) ); + Register( 62, typeof( Eighth.FireElementalSpell ) ); + Register( 63, typeof( Eighth.WaterElementalSpell ) ); + } + + public static void Register( int spellID, Type type ) + { + SpellRegistry.Register( spellID, type ); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/Base/MagerySpell.cs b/Scripts/Spells/Base/MagerySpell.cs new file mode 100644 index 0000000..e04c4c7 --- /dev/null +++ b/Scripts/Spells/Base/MagerySpell.cs @@ -0,0 +1,113 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Spells +{ + public abstract class MagerySpell : Spell + { + public MagerySpell( Mobile caster, Item scroll, SpellInfo info ) + : base( caster, scroll, info ) + { + } + + public abstract SpellCircle Circle { get; } + + public override bool ConsumeReagents() + { + if( base.ConsumeReagents() ) + return true; + + if( ArcaneGem.ConsumeCharges( Caster, 1+(int)Circle ) ) + return true; + + return false; + } + + private const double ChanceOffset = 20.0, ChanceLength = 100.0 / 7.0; + + public override void GetCastSkills( out double min, out double max ) + { + int circle = (int)Circle; + + if( Scroll != null ) + circle -= 2; + + double avg = ChanceLength * circle; + + min = avg - ChanceOffset; + max = avg + ChanceOffset; + } + + private static int[] m_ManaTable = new int[] { 4, 6, 9, 11, 14, 20, 40, 50 }; + + public override int GetMana() + { + if( Scroll is BaseWand ) + return 0; + + return m_ManaTable[(int)Circle]; + } + + public override double GetResistSkill( Mobile m ) + { + int maxSkill = (1 + (int)Circle) * 10; + maxSkill += (1 + ((int)Circle / 6)) * 25; + + if( m.Skills[SkillName.MagicResist].Value < maxSkill ) + m.CheckSkill( SkillName.MagicResist, 0.0, m.Skills[SkillName.MagicResist].Cap ); + + return m.Skills[SkillName.MagicResist].Value; + } + + public virtual bool CheckResisted( Mobile target ) + { + double n = GetResistPercent( target ); + + n /= 100.0; + + if( n <= 0.0 ) + return false; + + if( n >= 1.0 ) + return true; + + int maxSkill = (1 + (int)Circle) * 10; + maxSkill += (1 + ((int)Circle / 6)) * 25; + + if( target.Skills[SkillName.MagicResist].Value < maxSkill ) + target.CheckSkill( SkillName.MagicResist, 0.0, target.Skills[SkillName.MagicResist].Cap ); + + return (n >= Utility.RandomDouble()); + } + + public virtual double GetResistPercentForCircle( Mobile target, SpellCircle circle ) + { + double firstPercent = target.Skills[SkillName.MagicResist].Value / 5.0; + double secondPercent = target.Skills[SkillName.MagicResist].Value - (((Caster.Skills[CastSkill].Value - 20.0) / 5.0) + (1 + (int)circle) * 5.0); + + return (firstPercent > secondPercent ? firstPercent : secondPercent) / 2.0; // Seems should be about half of what stratics says. + } + + public virtual double GetResistPercent( Mobile target ) + { + return GetResistPercentForCircle( target, Circle ); + } + + public override TimeSpan GetCastDelay() + { + if( Scroll is BaseWand ) + return TimeSpan.Zero; + + return TimeSpan.FromSeconds( 0.5 + (0.25 * (int)Circle) ); + } + + public override TimeSpan CastDelayBase + { + get + { + return TimeSpan.FromSeconds( (3 + (int)Circle) * CastDelaySecondsPerTick ); + } + } + } +} diff --git a/Scripts/Spells/Base/Spell.cs b/Scripts/Spells/Base/Spell.cs new file mode 100644 index 0000000..f05f69f --- /dev/null +++ b/Scripts/Spells/Base/Spell.cs @@ -0,0 +1,732 @@ +using System; +using Server.Items; +using Server.Misc; +using Server.Network; +using Server.Targeting; +using Server.Mobiles; +using Server.Spells.Second; +using System.Collections.Generic; + +namespace Server.Spells +{ + public abstract class Spell : ISpell + { + private Mobile m_Caster; + private Item m_Scroll; + private SpellInfo m_Info; + private SpellState m_State; + private DateTime m_StartCastTime; + + public SpellState State{ get{ return m_State; } set{ m_State = value; } } + public Mobile Caster{ get{ return m_Caster; } } + public SpellInfo Info{ get{ return m_Info; } } + public string Name{ get{ return m_Info.Name; } } + public string Mantra{ get{ return m_Info.Mantra; } } + public Type[] Reagents{ get{ return m_Info.Reagents; } } + public Item Scroll{ get{ return m_Scroll; } } + public DateTime StartCastTime { get { return m_StartCastTime; } } + + private static TimeSpan NextSpellDelay = TimeSpan.FromSeconds( 0.75 ); + private static TimeSpan AnimateDelay = TimeSpan.FromSeconds( 1.5 ); + + public virtual SkillName CastSkill{ get{ return SkillName.Magery; } } + public virtual SkillName DamageSkill{ get{ return SkillName.Concentration; } } + + public virtual bool RevealOnCast{ get{ return true; } } + public virtual bool ClearHandsOnCast{ get{ return Server.Misc.Settings.CastSpellsHoldingThings(); } } + public virtual bool ShowHandMovement{ get{ return true; } } + + public virtual bool DelayedDamage{ get{ return false; } } + + public virtual bool DelayedDamageStacking { get { return true; } } + //In reality, it's ANY delayed Damage spell that can't stack, but, only + //Expo & Magic Arrow have enough delay and a short enough cast time to bring up + //the possibility of stacking 'em. Note that a MA & an Explosion will stack, but + //of course, two MA's won't. + + private static Dictionary m_ContextTable = new Dictionary(); + + private class DelayedDamageContextWrapper + { + private Dictionary m_Contexts = new Dictionary(); + + public void Add( Mobile m, Timer t ) + { + Timer oldTimer; + if( m_Contexts.TryGetValue( m, out oldTimer ) ) + { + oldTimer.Stop(); + m_Contexts.Remove( m ); + } + + m_Contexts.Add( m, t ); + } + + public void Remove( Mobile m ) + { + m_Contexts.Remove( m ); + } + } + + public void StartDelayedDamageContext( Mobile m, Timer t ) + { + if( DelayedDamageStacking ) + return; //Sanity + + DelayedDamageContextWrapper contexts; + + if( !m_ContextTable.TryGetValue( GetType(), out contexts ) ) + { + contexts = new DelayedDamageContextWrapper(); + m_ContextTable.Add( GetType(), contexts ); + } + + contexts.Add( m, t ); + } + + public void RemoveDelayedDamageContext( Mobile m ) + { + DelayedDamageContextWrapper contexts; + + if( !m_ContextTable.TryGetValue( GetType(), out contexts ) ) + return; + + contexts.Remove( m ); + } + + public void HarmfulSpell( Mobile m ) + { + if ( m is BaseCreature ) + ((BaseCreature)m).OnHarmfulSpell( m_Caster ); + } + + public Spell( Mobile caster, Item scroll, SpellInfo info ) + { + m_Caster = caster; + m_Scroll = scroll; + m_Info = info; + } + + public virtual bool IsCasting{ get{ return m_State == SpellState.Casting; } } + + public virtual void OnCasterHurt() + { + //Confirm: Monsters and pets cannot be disturbed. + if ( !Caster.Player ) + return; + + if ( CheckHandToHand( Caster ) ) + return; + + if ( IsCasting ) + { + object o = ProtectionSpell.Registry[m_Caster]; + bool disturb = true; + + if ( o != null && o is double ) + { + if ( ((double)o) > Utility.RandomDouble()*100.0 ) + disturb = false; + } + + if ( disturb ) + Disturb( DisturbType.Hurt, false, true ); + } + } + + public virtual void OnCasterKilled() + { + Disturb( DisturbType.Kill ); + } + + public virtual void OnConnectionChanged() + { + FinishSequence(); + } + + public virtual bool OnCasterMoving( Direction d ) + { + if ( IsCasting && BlocksMovement ) + { + m_Caster.SendLocalizedMessage( 500111 ); // You are frozen and can not move. + return false; + } + + return true; + } + + public virtual bool OnCasterEquiping( Item item ) + { + if ( IsCasting ) + Disturb( DisturbType.EquipRequest ); + + return true; + } + + public virtual bool OnCasterUsingObject( object o ) + { + if ( m_State == SpellState.Sequencing ) + Disturb( DisturbType.UseRequest ); + + return true; + } + + public virtual bool OnCastInTown( Region r ) + { + return m_Info.AllowTown; + } + + public virtual bool ConsumeReagents() + { + if ( m_Scroll != null || !m_Caster.Player ) + return true; + + Container pack = m_Caster.Backpack; + + if ( pack == null ) + return false; + + if ( pack.ConsumeTotal( m_Info.Reagents, m_Info.Amounts ) == -1 ) + return true; + + return false; + } + + public virtual int GetDamageFixed( Mobile m ) + { + return m.Skills[DamageSkill].Fixed; + } + + public virtual double GetDamageSkill( Mobile m ) + { + return m.Skills[DamageSkill].Value; + } + + public virtual double GetResistSkill( Mobile m ) + { + return m.Skills[SkillName.MagicResist].Value; + } + + public virtual bool CheckHandToHand( Mobile m ) + { + return m.CheckSkill( SkillName.HandToHand, 0.0, 100.0 ); + } + + public virtual double GetDamageScalar( Mobile target ) + { + double scalar = 1.0; + + double casterEI = m_Caster.Skills[DamageSkill].Value; + double targetRS = target.Skills[SkillName.MagicResist].Value; + + if( casterEI > targetRS ) + scalar = (1.0 + ((casterEI - targetRS) / 500.0)); + else + scalar = (1.0 + ((casterEI - targetRS) / 200.0)); + + // magery damage bonus, -25% at 0 skill, +0% at 100 skill, +5% at 120 skill + scalar += (m_Caster.Skills[CastSkill].Value - 100.0) / 400.0; + + if ( m_Caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ) ) + scalar *= ( m_Caster.Skills[SkillName.Concentration].Value / 50 ); + + if ( target is BaseCreature ) + ((BaseCreature)target).AlterDamageScalarFrom( m_Caster, ref scalar ); + + if ( m_Caster is BaseCreature ) + ((BaseCreature)m_Caster).AlterDamageScalarTo( target, ref scalar ); + + target.Region.SpellDamageScalar( m_Caster, target, ref scalar ); + + return scalar; + } + + public virtual double GetSlayerDamageScalar( Mobile defender ) + { + Spellbook atkBook = Spellbook.FindEquippedSpellbook( m_Caster ); + + double scalar = 1.0; + if( atkBook != null ) + { + SlayerEntry atkSlayer = SlayerGroup.GetEntryByName( atkBook.Slayer ); + SlayerEntry atkSlayer2 = SlayerGroup.GetEntryByName( atkBook.Slayer2 ); + + if( atkSlayer != null && atkSlayer.Slays( defender ) || atkSlayer2 != null && atkSlayer2.Slays( defender ) ) + { + defender.FixedEffect( 0x37B9, 10, 5 ); //TODO: Confirm this displays on OSIs + scalar = 2.0; + } + + if( scalar != 1.0 ) + return scalar; + } + + return scalar; + } + + public virtual void DoFizzle() + { + m_Caster.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502632 ); // The spell fizzles. + + if ( m_Caster.Player ) + { + m_Caster.FixedEffect( 0x3735, 6, 30 ); + + m_Caster.PlaySound( 0x5C ); + } + } + + private CastTimer m_CastTimer; + private AnimTimer m_AnimTimer; + + public void Disturb( DisturbType type ) + { + Disturb( type, true, false ); + } + + public virtual bool CheckDisturb( DisturbType type, bool firstCircle, bool resistable ) + { + if ( resistable && m_Scroll is BaseWand ) + return false; + + return true; + } + + public void Disturb( DisturbType type, bool firstCircle, bool resistable ) + { + if ( !CheckDisturb( type, firstCircle, resistable ) ) + return; + + if ( m_State == SpellState.Casting ) + { + if( !firstCircle && this is MagerySpell && ((MagerySpell)this).Circle == SpellCircle.First ) + return; + + if ( CheckHandToHand( m_Caster ) ) + return; + + m_State = SpellState.None; + m_Caster.Spell = null; + + OnDisturb( type, true ); + + if ( m_CastTimer != null ) + m_CastTimer.Stop(); + + if ( m_AnimTimer != null ) + m_AnimTimer.Stop(); + + m_Caster.NextSpellTime = DateTime.Now + GetDisturbRecovery(); + } + else if ( m_State == SpellState.Sequencing ) + { + if( !firstCircle && this is MagerySpell && ((MagerySpell)this).Circle == SpellCircle.First ) + return; + + if ( CheckHandToHand( m_Caster ) ) + return; + + m_State = SpellState.None; + m_Caster.Spell = null; + + OnDisturb( type, false ); + + Targeting.Target.Cancel( m_Caster ); + } + } + + public virtual void DoHurtFizzle() + { + m_Caster.FixedEffect( 0x3735, 6, 30 ); + m_Caster.PlaySound( 0x5C ); + } + + public virtual void OnDisturb( DisturbType type, bool message ) + { + if ( message ) + m_Caster.SendLocalizedMessage( 500641 ); // Your concentration is disturbed, thus ruining thy spell. + } + + public virtual bool CheckCast() + { + return true; + } + + public virtual void SayMantra() + { + if ( m_Scroll is BaseWand ) + return; + + if ( m_Info.Mantra != null && m_Info.Mantra.Length > 0 && m_Caster.Player ) + m_Caster.PublicOverheadMessage( MessageType.Spell, m_Caster.SpeechHue, true, m_Info.Mantra, false ); + } + + public virtual bool BlocksMovement{ get{ return true; } } + + public virtual bool CheckNextSpellTime{ get{ return !(m_Scroll is BaseWand); } } + + public bool Cast() + { + m_StartCastTime = DateTime.Now; + + if ( !m_Caster.CheckAlive() ) + { + return false; + } + else if ( m_Caster.Spell != null && m_Caster.Spell.IsCasting ) + { + m_Caster.SendLocalizedMessage( 502642 ); // You are already casting a spell. + } + else if ( !(m_Scroll is BaseWand) && (m_Caster.Paralyzed || m_Caster.Frozen) ) + { + m_Caster.SendLocalizedMessage( 502643 ); // You can not cast a spell while frozen. + } + else if ( CheckNextSpellTime && DateTime.Now < m_Caster.NextSpellTime ) + { + m_Caster.SendLocalizedMessage( 502644 ); // You have not yet recovered from casting a spell. + } + else if ( m_Caster is PlayerMobile && ( (PlayerMobile) m_Caster ).PeacedUntil > DateTime.Now ) + { + m_Caster.SendLocalizedMessage( 1072060 ); // You cannot cast a spell while calmed. + } + else if ( m_Caster.Mana >= ScaleMana( GetMana() ) ) + { + if ( m_Caster.Spell == null && m_Caster.CheckSpellCast( this ) && CheckCast() && m_Caster.Region.OnBeginSpellCast( m_Caster, this ) ) + { + m_State = SpellState.Casting; + m_Caster.Spell = this; + + if ( RevealOnCast ) + m_Caster.RevealingAction(); + + SayMantra(); + + TimeSpan castDelay = this.GetCastDelay(); + + if ( ShowHandMovement && m_Caster.Body.IsHuman ) + { + int count = (int)Math.Ceiling( castDelay.TotalSeconds / AnimateDelay.TotalSeconds ); + + if ( count != 0 ) + { + m_AnimTimer = new AnimTimer( this, count ); + m_AnimTimer.Start(); + } + + if ( m_Info.LeftHandEffect > 0 ) + Caster.FixedParticles( 0, 10, 5, m_Info.LeftHandEffect, EffectLayer.LeftHand ); + + if ( m_Info.RightHandEffect > 0 ) + Caster.FixedParticles( 0, 10, 5, m_Info.RightHandEffect, EffectLayer.RightHand ); + } + + if ( ClearHandsOnCast ) + m_Caster.ClearHands(); + + m_CastTimer = new CastTimer( this, castDelay ); + m_CastTimer.Start(); + + OnBeginCast(); + + return true; + } + else + { + return false; + } + } + else + { + m_Caster.LocalOverheadMessage( MessageType.Regular, 0x22, 502625 ); // Insufficient mana + } + + return false; + } + + public abstract void OnCast(); + + public virtual void OnBeginCast() + { + } + + public virtual void GetCastSkills( out double min, out double max ) + { + min = max = 0; //Intended but not required for overriding. + } + + public virtual bool CheckFizzle() + { + if ( m_Scroll is BaseWand ) + return true; + + double minSkill, maxSkill; + + GetCastSkills( out minSkill, out maxSkill ); + + if ( DamageSkill != CastSkill ) + Caster.CheckSkill( DamageSkill, 0.0, Caster.Skills[ DamageSkill ].Cap ); + + return Caster.CheckSkill( CastSkill, minSkill, maxSkill ); + } + + public abstract int GetMana(); + + public virtual int ScaleMana( int mana ) + { + double scalar = 1.0; + + // Lower Mana Needed for Concentration is capped at 50% + int lmc = (int)(m_Caster.Skills[SkillName.Concentration].Value/2); + if ( lmc > 50 ) + lmc = 50; + + scalar -= (double)lmc / 100; + + return (int)(mana * scalar); + } + + public virtual TimeSpan GetDisturbRecovery() + { + double delay = 1.0 - Math.Sqrt( (DateTime.Now - m_StartCastTime).TotalSeconds / GetCastDelay().TotalSeconds ); + + if ( delay < 0.2 ) + delay = 0.2; + + return TimeSpan.FromSeconds( delay ); + } + + public virtual int CastRecoveryBase{ get{ return 6; } } + public virtual int CastRecoveryFastScalar{ get{ return 1; } } + public virtual int CastRecoveryPerSecond{ get{ return 4; } } + public virtual int CastRecoveryMinimum{ get{ return 0; } } + + public virtual TimeSpan GetCastRecovery() + { + int fcr = 0; + + if ( m_Caster.CheckSkill( SkillName.HandToHand, 0.0, 100.0 ) ) + { + fcr = (int)(m_Caster.Skills[SkillName.HandToHand].Value / 20); + } + + int fcrDelay = -(CastRecoveryFastScalar * fcr); + + int delay = CastRecoveryBase + fcrDelay; + + if ( delay < CastRecoveryMinimum ) + delay = CastRecoveryMinimum; + + return TimeSpan.FromSeconds( (double)delay / CastRecoveryPerSecond ); + } + + public abstract TimeSpan CastDelayBase { get; } + + public virtual double CastDelayFastScalar { get { return 1; } } + public virtual double CastDelaySecondsPerTick { get { return 0.25; } } + public virtual TimeSpan CastDelayMinimum { get { return TimeSpan.FromSeconds( 0.25 ); } } + + public virtual TimeSpan GetCastDelay() + { + if ( m_Scroll is BaseWand ) + return TimeSpan.Zero; + + // Faster casting cap of 2 (if not using the protection spell) + // Faster casting cap of 0 (if using the protection spell) + int fc = 0; + + if ( m_Caster.CheckSkill( SkillName.HandToHand, 0.0, 100.0 ) ) + { + if ( m_Caster.Skills[SkillName.HandToHand].Value > 50.0 ) + fc = 1; + else + fc = 2; + } + + if ( ProtectionSpell.Registry.Contains( m_Caster ) ) + fc -= 2; + + TimeSpan baseDelay = CastDelayBase; + + TimeSpan fcDelay = TimeSpan.FromSeconds( -(CastDelayFastScalar * fc * CastDelaySecondsPerTick) ); + + //int delay = CastDelayBase + circleDelay + fcDelay; + TimeSpan delay = baseDelay + fcDelay; + + if ( delay < CastDelayMinimum ) + delay = CastDelayMinimum; + + //return TimeSpan.FromSeconds( (double)delay / CastDelayPerSecond ); + return delay; + } + + public virtual void FinishSequence() + { + m_State = SpellState.None; + + if ( m_Caster.Spell == this ) + m_Caster.Spell = null; + } + + public virtual bool CheckSequence() + { + int mana = ScaleMana( GetMana() ); + + if ( m_Caster.Deleted || !m_Caster.Alive || m_Caster.Spell != this || m_State != SpellState.Sequencing ) + { + DoFizzle(); + } + else if ( m_Scroll != null && (m_Scroll.Amount <= 0 || m_Scroll.Deleted || m_Scroll.RootParent != m_Caster || (m_Scroll is BaseWand && (((BaseWand)m_Scroll).Uses <= 0 || m_Scroll.Parent != m_Caster))) ) + { + DoFizzle(); + } + else if ( !ConsumeReagents() ) + { + m_Caster.LocalOverheadMessage( MessageType.Regular, 0x22, 502630 ); // More reagents are needed for this spell. + } + else if ( m_Caster.Mana < mana ) + { + m_Caster.LocalOverheadMessage( MessageType.Regular, 0x22, 502625 ); // Insufficient mana for this spell. + } + else if ( m_Caster is PlayerMobile && ((PlayerMobile) m_Caster).PeacedUntil > DateTime.Now ) + { + m_Caster.SendLocalizedMessage( 1072060 ); // You cannot cast a spell while calmed. + DoFizzle(); + } + else if ( CheckFizzle() ) + { + m_Caster.Mana -= mana; + + if ( m_Scroll is SpellScroll ) + m_Scroll.Consume(); + else if ( m_Scroll is BaseWand ) + ((BaseWand)m_Scroll).ConsumeCharge( m_Caster ); + + if ( m_Scroll is BaseWand ) + { + bool m = m_Scroll.Movable; + + m_Scroll.Movable = false; + + if ( ClearHandsOnCast ) + m_Caster.ClearHands(); + + m_Scroll.Movable = m; + } + else + { + if ( ClearHandsOnCast ) + m_Caster.ClearHands(); + } + + return true; + } + else + { + DoFizzle(); + } + + return false; + } + + public bool CheckBSequence( Mobile target ) + { + return CheckBSequence( target, false ); + } + + public bool CheckBSequence( Mobile target, bool allowDead ) + { + if ( !target.Alive && !allowDead ) + { + m_Caster.SendLocalizedMessage( 501857 ); // This spell won't work on that! + return false; + } + else if ( Caster.CanBeBeneficial( target, true, allowDead ) && CheckSequence() ) + { + Caster.DoBeneficial( target ); + return true; + } + else + { + return false; + } + } + + public bool CheckHSequence( Mobile target ) + { + if ( !target.Alive ) + { + m_Caster.SendLocalizedMessage( 501857 ); // This spell won't work on that! + return false; + } + else if ( Caster.CanBeHarmful( target ) && CheckSequence() ) + { + Caster.DoHarmful( target ); + return true; + } + else + { + return false; + } + } + + private class AnimTimer : Timer + { + private Spell m_Spell; + + public AnimTimer( Spell spell, int count ) : base( TimeSpan.Zero, AnimateDelay, count ) + { + m_Spell = spell; + + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + if ( m_Spell.State != SpellState.Casting || m_Spell.m_Caster.Spell != m_Spell ) + { + Stop(); + return; + } + + if ( !m_Spell.Caster.Mounted && m_Spell.Caster.Body.IsHuman && m_Spell.m_Info.Action >= 0 ) + m_Spell.Caster.Animate( m_Spell.m_Info.Action, 7, 1, true, false, 0 ); + + if ( !Running ) + m_Spell.m_AnimTimer = null; + } + } + + private class CastTimer : Timer + { + private Spell m_Spell; + + public CastTimer( Spell spell, TimeSpan castDelay ) : base( castDelay ) + { + m_Spell = spell; + + Priority = TimerPriority.TwentyFiveMS; + } + + protected override void OnTick() + { + if ( m_Spell.m_State == SpellState.Casting && m_Spell.m_Caster.Spell == m_Spell ) + { + m_Spell.m_State = SpellState.Sequencing; + m_Spell.m_CastTimer = null; + m_Spell.m_Caster.OnSpellCast( m_Spell ); + m_Spell.m_Caster.Region.OnSpellCast( m_Spell.m_Caster, m_Spell ); + m_Spell.m_Caster.NextSpellTime = DateTime.Now + m_Spell.GetCastRecovery();// Spell.NextSpellDelay; + + Target originalTarget = m_Spell.m_Caster.Target; + + m_Spell.OnCast(); + + if ( m_Spell.m_Caster.Player && m_Spell.m_Caster.Target != originalTarget && m_Spell.Caster.Target != null ) + m_Spell.m_Caster.Target.BeginTimeout( m_Spell.m_Caster, TimeSpan.FromSeconds( 30.0 ) ); + + m_Spell.m_CastTimer = null; + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/Base/SpellCircle.cs b/Scripts/Spells/Base/SpellCircle.cs new file mode 100644 index 0000000..a9479b8 --- /dev/null +++ b/Scripts/Spells/Base/SpellCircle.cs @@ -0,0 +1,16 @@ +using System; + +namespace Server.Spells +{ + public enum SpellCircle + { + First, + Second, + Third, + Fourth, + Fifth, + Sixth, + Seventh, + Eighth + } +} \ No newline at end of file diff --git a/Scripts/Spells/Base/SpellHelper.cs b/Scripts/Spells/Base/SpellHelper.cs new file mode 100644 index 0000000..efec998 --- /dev/null +++ b/Scripts/Spells/Base/SpellHelper.cs @@ -0,0 +1,991 @@ +using System; +using Server; +using Server.Items; +using Server.Guilds; +using Server.Multis; +using Server.Regions; +using Server.Mobiles; +using Server.Targeting; +using Server.Engines.PartySystem; +using Server.Misc; +using System.Collections.Generic; +using Server.Spells.Seventh; +using Server.Spells.Fifth; + +namespace Server +{ + public class DefensiveSpell + { + public static void Nullify( Mobile from ) + { + if( !from.CanBeginAction( typeof( DefensiveSpell ) ) ) + new InternalTimer( from ).Start(); + } + + private class InternalTimer : Timer + { + private Mobile m_Mobile; + + public InternalTimer( Mobile m ) + : base( TimeSpan.FromMinutes( 1.0 ) ) + { + m_Mobile = m; + + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + m_Mobile.EndAction( typeof( DefensiveSpell ) ); + } + } + } +} + +namespace Server.Spells +{ + public enum TravelCheckType + { + RecallFrom, + RecallTo, + GateFrom, + GateTo, + Mark, + TeleportFrom, + TeleportTo + } + + public class SpellHelper + { + private static TimeSpan OldDamageDelay = TimeSpan.FromSeconds( 0.5 ); + + public static TimeSpan GetDamageDelayForSpell( Spell sp ) + { + if( !sp.DelayedDamage ) + return TimeSpan.Zero; + + return (OldDamageDelay); + } + + public static bool CheckMulti( Point3D p, Map map ) + { + return CheckMulti( p, map, true, 0); + } + + public static bool CheckMulti(Point3D p, Map map, bool houses) + { + return CheckMulti(p, map, houses, 0); + } + + public static bool CheckMulti( Point3D p, Map map, bool houses, int housingrange ) + { + if( map == null || map == Map.Internal ) + return false; + + Sector sector = map.GetSector( p.X, p.Y ); + + for( int i = 0; i < sector.Multis.Count; ++i ) + { + BaseMulti multi = sector.Multis[i]; + + if( multi is BaseHouse ) + { + BaseHouse bh = (BaseHouse)multi; + + if( ( houses && bh.IsInside( p, 16 ) ) || ( housingrange > 0 && bh.InRange( p, housingrange ) ) ) + return true; + } + else if( multi.Contains( p )) + { + return true; + } + } + + return false; + } + + public static void Turn( Mobile from, object to ) + { + IPoint3D target = to as IPoint3D; + + if( target == null ) + return; + + if( target is Item ) + { + Item item = (Item)target; + + if( item.RootParent != from ) + from.Direction = from.GetDirectionTo( item.GetWorldLocation() ); + } + else if( from != target ) + { + from.Direction = from.GetDirectionTo( target ); + } + } + + private static TimeSpan CombatHeatDelay = TimeSpan.FromSeconds( 30.0 ); + private static bool RestrictTravelCombat = true; + + public static bool CheckCombat( Mobile m ) + { + if( !RestrictTravelCombat ) + return false; + + for( int i = 0; i < m.Aggressed.Count; ++i ) + { + AggressorInfo info = m.Aggressed[i]; + + if( info.Defender.Player && (DateTime.Now - info.LastCombatTime) < CombatHeatDelay ) + return true; + } + + return false; + } + + public static bool AdjustField( ref Point3D p, Map map, int height, bool mobsBlock ) + { + if( map == null ) + return false; + + for( int offset = 0; offset < 10; ++offset ) + { + Point3D loc = new Point3D( p.X, p.Y, p.Z - offset ); + + if( map.CanFit( loc, height, true, mobsBlock ) ) + { + p = loc; + return true; + } + } + + return false; + } + + public static bool CanRevealCaster( Mobile m ) + { + if ( m is BaseCreature ) + { + BaseCreature c = (BaseCreature)m; + + if ( !c.Controlled ) + return true; + } + + return false; + } + + public static void GetSurfaceTop( ref IPoint3D p ) + { + if( p is Item ) + { + p = ((Item)p).GetSurfaceTop(); + } + else if( p is StaticTarget ) + { + StaticTarget t = (StaticTarget)p; + int z = t.Z; + + if( (t.Flags & TileFlag.Surface) == 0 ) + z -= TileData.ItemTable[t.ItemID & TileData.MaxItemValue].CalcHeight; + + p = new Point3D( t.X, t.Y, z ); + } + } + + public static bool AddStatOffset( Mobile m, StatType type, int offset, TimeSpan duration ) + { + if( offset > 0 ) + return AddStatBonus( m, m, type, offset, duration ); + else if( offset < 0 ) + return AddStatCurse( m, m, type, -offset, duration ); + + return true; + } + + public static bool AddStatBonus( Mobile caster, Mobile target, StatType type ) + { + return AddStatBonus( caster, target, type, GetOffset( caster, target, type, false ), GetDuration( caster, target ) ); + } + + public static bool AddStatBonus( Mobile caster, Mobile target, StatType type, int bonus, TimeSpan duration ) + { + int offset = bonus; + string name = String.Format( "[Magic] {0} Offset", type ); + + StatMod mod = target.GetStatMod( name ); + + if( mod != null && mod.Offset < 0 ) + { + target.AddStatMod( new StatMod( type, name, mod.Offset + offset, duration ) ); + return true; + } + else if( mod == null || mod.Offset < offset ) + { + target.AddStatMod( new StatMod( type, name, offset, duration ) ); + return true; + } + + return false; + } + + public static bool AddStatCurse( Mobile caster, Mobile target, StatType type ) + { + return AddStatCurse( caster, target, type, GetOffset( caster, target, type, true ), GetDuration( caster, target ) ); + } + + public static bool AddStatCurse( Mobile caster, Mobile target, StatType type, int curse, TimeSpan duration ) + { + int offset = -curse; + string name = String.Format( "[Magic] {0} Offset", type ); + + StatMod mod = target.GetStatMod( name ); + + if( mod != null && mod.Offset > 0 ) + { + target.AddStatMod( new StatMod( type, name, mod.Offset + offset, duration ) ); + return true; + } + else if( mod == null || mod.Offset > offset ) + { + target.AddStatMod( new StatMod( type, name, offset, duration ) ); + return true; + } + + return false; + } + + public static TimeSpan GetDuration( Mobile caster, Mobile target ) + { + double time = 0.0; + if ( caster.CheckSkill( SkillName.Concentration, 0.0, 100.0 ) ) + time = caster.Skills[SkillName.Concentration].Value / 2; + + return TimeSpan.FromSeconds( time + (caster.Skills[SkillName.Magery].Value * 1.2) ); + } + + private static bool m_DisableSkillCheck; + + public static bool DisableSkillCheck + { + get { return m_DisableSkillCheck; } + set { m_DisableSkillCheck = value; } + } + + public static double GetOffsetScalar( Mobile caster, Mobile target, bool curse ) + { + double percent; + + if( curse ) + percent = 8 + (caster.Skills.Concentration.Fixed / 100) - (target.Skills.MagicResist.Fixed / 100); + else + percent = 1 + (caster.Skills.Concentration.Fixed / 100); + + percent *= 0.01; + + if( percent < 0 ) + percent = 0; + + return percent; + } + + public static int GetOffset( Mobile caster, Mobile target, StatType type, bool curse ) + { + return 1 + (int)(caster.Skills[SkillName.Magery].Value * 0.1); + } + + public static Guild GetGuildFor( Mobile m ) + { + Guild g = m.Guild as Guild; + + if( g == null && m is BaseCreature ) + { + BaseCreature c = (BaseCreature)m; + m = c.ControlMaster; + + if( m != null ) + g = m.Guild as Guild; + + if( g == null ) + { + m = c.SummonMaster; + + if( m != null ) + g = m.Guild as Guild; + } + } + + return g; + } + + public static bool ValidIndirectTarget( Mobile from, Mobile to ) + { + if( from == to ) + return true; + + if( to.Hidden && to.AccessLevel > from.AccessLevel ) + return false; + + Guild fromGuild = GetGuildFor( from ); + Guild toGuild = GetGuildFor( to ); + + if( fromGuild != null && toGuild != null && (fromGuild == toGuild || fromGuild.IsAlly( toGuild )) ) + return false; + + Party p = Party.Get( from ); + + if( p != null && p.Contains( to ) ) + return false; + + if( to is BaseCreature ) + { + BaseCreature c = (BaseCreature)to; + + if( c.Controlled || c.Summoned ) + { + if( c.ControlMaster == from || c.SummonMaster == from ) + return false; + + if( p != null && (p.Contains( c.ControlMaster ) || p.Contains( c.SummonMaster )) ) + return false; + } + } + + if( from is BaseCreature ) + { + BaseCreature c = (BaseCreature)from; + + if( c.Controlled || c.Summoned ) + { + if( c.ControlMaster == to || c.SummonMaster == to ) + return false; + + p = Party.Get( to ); + + if( p != null && (p.Contains( c.ControlMaster ) || p.Contains( c.SummonMaster )) ) + return false; + } + } + + if( to is BaseCreature && !((BaseCreature)to).Controlled && ((BaseCreature)to).InitialInnocent ) + return true; + + int noto = Notoriety.Compute( from, to ); + + return (noto != Notoriety.Innocent || from.Kills >= 5); + } + + private static int[] m_Offsets = new int[] + { + -1, -1, + -1, 0, + -1, 1, + 0, -1, + 0, 1, + 1, -1, + 1, 0, + 1, 1 + }; + + public static void Summon( BaseCreature creature, Mobile caster, int sound, TimeSpan duration, bool scaleDuration, bool scaleStats ) + { + Map map = caster.Map; + + if( map == null ) + return; + + double scale = 1.0 + ((caster.Skills[SkillName.Magery].Value - 100.0) / 200.0); + + if( scaleDuration ) + duration = TimeSpan.FromSeconds( duration.TotalSeconds * scale ); + + if( scaleStats ) + { + creature.RawStr = (int)(creature.RawStr * scale); + creature.Hits = creature.HitsMax; + + creature.RawDex = (int)(creature.RawDex * scale); + creature.Stam = creature.StamMax; + + creature.RawInt = (int)(creature.RawInt * scale); + creature.Mana = creature.ManaMax; + } + + Point3D p = new Point3D( caster ); + + if( SpellHelper.FindValidSpawnLocation( map, ref p, true ) ) + { + BaseCreature.Summon( creature, caster, p, sound, duration ); + return; + } + + + /* + int offset = Utility.Random( 8 ) * 2; + + for( int i = 0; i < m_Offsets.Length; i += 2 ) + { + int x = caster.X + m_Offsets[(offset + i) % m_Offsets.Length]; + int y = caster.Y + m_Offsets[(offset + i + 1) % m_Offsets.Length]; + + if( map.CanSpawnMobile( x, y, caster.Z ) ) + { + BaseCreature.Summon( creature, caster, new Point3D( x, y, caster.Z ), sound, duration ); + return; + } + else + { + int z = map.GetAverageZ( x, y ); + + if( map.CanSpawnMobile( x, y, z ) ) + { + BaseCreature.Summon( creature, caster, new Point3D( x, y, z ), sound, duration ); + return; + } + } + } + * */ + + creature.Delete(); + caster.SendLocalizedMessage( 501942 ); // That location is blocked. + } + + public static bool FindValidSpawnLocation( Map map, ref Point3D p, bool surroundingsOnly ) + { + if( map == null ) //sanity + return false; + + if( !surroundingsOnly ) + { + if( map.CanSpawnMobile( p ) ) //p's fine. + { + p = new Point3D( p ); + return true; + } + + int z = map.GetAverageZ( p.X, p.Y ); + + if( map.CanSpawnMobile( p.X, p.Y, z ) ) + { + p = new Point3D( p.X, p.Y, z ); + return true; + } + } + + int offset = Utility.Random( 8 ) * 2; + + for( int i = 0; i < m_Offsets.Length; i += 2 ) + { + int x = p.X + m_Offsets[(offset + i) % m_Offsets.Length]; + int y = p.Y + m_Offsets[(offset + i + 1) % m_Offsets.Length]; + + if( map.CanSpawnMobile( x, y, p.Z ) ) + { + p = new Point3D( x, y, p.Z ); + return true; + } + else + { + int z = map.GetAverageZ( x, y ); + + if( map.CanSpawnMobile( x, y, z ) ) + { + p = new Point3D( x, y, z ); + return true; + } + } + } + + return false; + } + + public static bool IsInvalid( Map map, Point3D loc ) + { + if( map == null || map == Map.Internal ) + return true; + + int x = loc.X, y = loc.Y; + + return (x < 0 || y < 0 || x >= map.Width || y >= map.Height); + } + + //towns + public static bool IsTown( IPoint3D loc, Mobile caster ) + { + if( loc is Item ) + loc = ((Item)loc).GetWorldLocation(); + + return IsTown( new Point3D( loc ), caster ); + } + + public static bool IsTown( Point3D loc, Mobile caster ) + { + Map map = caster.Map; + + if( map == null ) + return false; + + Region reg = Region.Find( loc, map ); + + if ( reg is TownRegion ) + return true; + else if ( reg is HouseRegion ) + return true; + else if ( reg is GardenRegion ) + return true; + else if ( reg is ShrineRegion ) + return true; + + return false; + } + + public static bool CheckTown( IPoint3D loc, Mobile caster ) + { + if( loc is Item ) + loc = ((Item)loc).GetWorldLocation(); + + return CheckTown( new Point3D( loc ), caster ); + } + + public static bool CheckTown( Point3D loc, Mobile caster ) + { + if( IsTown( loc, caster ) ) + { + caster.SendLocalizedMessage( 500946 ); // You cannot cast this in town! + return false; + } + + return true; + } + + //Misc Spell Blockers + public static bool NoRecall( Point3D loc, Mobile caster ) + { + Map map = caster.Map; + + if( map == null ) + return false; + + Region reg = Region.Find( loc, map ); + + if ( reg is InnRegion ) + return true; + else if ( reg is GateRegion ) + return true; + else if ( reg is GardenRegion ) + return true; + else if ( reg is ShrineRegion ) + return true; + else if ( reg is BuildingRegion ) + return true; + else if ( reg is CaveRegion ) + return true; + else if ( reg is DungeonRegion ) + return true; + else if ( reg is GraveRegion ) + return true; + else if ( reg is PirateRegion ) + return true; + else if ( reg is DangerRegion ) + return true; + else if ( reg is HouseRegion ) + return true; + + return false; + } + + //magic reflection + public static void CheckReflect( int circle, Mobile caster, ref Mobile target ) + { + CheckReflect( circle, ref caster, ref target ); + } + + public static void CheckReflect( int circle, ref Mobile caster, ref Mobile target ) + { + if( target.MagicDamageAbsorb > 0 ) + { + ++circle; + + target.MagicDamageAbsorb -= circle; + + // This order isn't very intuitive, but you have to nullify reflect before target gets switched + + bool reflect = (target.MagicDamageAbsorb >= 0); + + if( target is BaseCreature ) + ((BaseCreature)target).CheckReflect( caster, ref reflect ); + + if( target.MagicDamageAbsorb <= 0 ) + { + target.MagicDamageAbsorb = 0; + DefensiveSpell.Nullify( target ); + } + + if( reflect ) + { + target.FixedEffect( 0x37B9, 10, 5 ); + + Mobile temp = caster; + caster = target; + target = temp; + } + } + else if( target is BaseCreature ) + { + bool reflect = false; + + ((BaseCreature)target).CheckReflect( caster, ref reflect ); + + if( reflect ) + { + target.FixedEffect( 0x37B9, 10, 5 ); + + Mobile temp = caster; + caster = target; + target = temp; + } + } + } + + public static void Damage( Spell spell, Mobile target, double damage ) + { + TimeSpan ts = GetDamageDelayForSpell( spell ); + + Damage( spell, ts, target, spell.Caster, damage ); + } + + public static void Damage( TimeSpan delay, Mobile target, double damage ) + { + Damage( delay, target, null, damage ); + } + + public static void Damage( TimeSpan delay, Mobile target, Mobile from, double damage ) + { + Damage( null, delay, target, from, damage ); + } + + public static void Damage( Spell spell, TimeSpan delay, Mobile target, Mobile from, double damage ) + { + int iDamage = (int)damage; + + if( delay == TimeSpan.Zero ) + { + if( from is BaseCreature ) + ((BaseCreature)from).AlterSpellDamageTo( target, ref iDamage ); + + if( target is BaseCreature ) + ((BaseCreature)target).AlterSpellDamageFrom( from, ref iDamage ); + + target.Damage( iDamage, from ); + } + else + { + new SpellDamageTimer( spell, target, from, iDamage, delay ).Start(); + } + + if( target is BaseCreature && from != null && delay == TimeSpan.Zero ) + { + BaseCreature c = (BaseCreature) target; + + c.OnHarmfulSpell( from ); + c.OnDamagedBySpell( from ); + } + } +/* + public static void Damage( Spell spell, Mobile target, double damage ) + { + TimeSpan ts = GetDamageDelayForSpell( spell ); + + Damage( spell, ts, target, spell.Caster, damage, DFAlgorithm.Standard ); + } +*/ + public static void Damage( Spell spell, Mobile target, double damage, DFAlgorithm dfa ) + { + TimeSpan ts = GetDamageDelayForSpell( spell ); + + Damage( spell, ts, target, spell.Caster, damage, dfa ); + } +/* + public static void Damage( TimeSpan delay, Mobile target, double damage ) + { + Damage( delay, target, null, damage ); + } + + public static void Damage( TimeSpan delay, Mobile target, Mobile from, double damage ) + { + Damage( delay, target, from, damage, DFAlgorithm.Standard ); + } +*/ + public static void Damage( TimeSpan delay, Mobile target, Mobile from, double damage, DFAlgorithm dfa ) + { + Damage( null, delay, target, from, damage, dfa ); + } + + public static void Damage( Spell spell, TimeSpan delay, Mobile target, Mobile from, double damage, DFAlgorithm dfa ) + { + int iDamage = (int)damage; + + if( from is BaseCreature ) + ((BaseCreature)from).AlterSpellDamageTo( target, ref iDamage ); + + if( target is BaseCreature ) + ((BaseCreature)target).AlterSpellDamageFrom( from, ref iDamage ); + + WeightOverloading.DFA = dfa; + + int damageGiven = Ultima.Damage( target, from, iDamage ); + + WeightOverloading.DFA = DFAlgorithm.Standard; + + if( target is BaseCreature && from != null && delay == TimeSpan.Zero ) + { + BaseCreature c = (BaseCreature) target; + + c.OnHarmfulSpell( from ); + c.OnDamagedBySpell( from ); + } + } + + public static void Heal( int amount, Mobile target, Mobile from ) + { + Heal( amount, target, from, true ); + } + + public static void Heal( int amount, Mobile target, Mobile from, bool message ) + { + if ( from.CheckSkill( SkillName.Concentration, 0.0, 100.0 ) ) + amount = amount + (int)( amount * (from.Skills[SkillName.Concentration].Value / 100) ); + + if ( target is PlayerMobile ){ amount = (int)(amount * Server.Misc.Settings.HitPoints()); } + + target.Heal( amount, from, message ); + } + + private class SpellDamageTimer : Timer + { + private Mobile m_Target, m_From; + private int m_Damage; + private Spell m_Spell; + + public SpellDamageTimer( Spell s, Mobile target, Mobile from, int damage, TimeSpan delay ) + : base( delay ) + { + m_Target = target; + m_From = from; + m_Damage = damage; + m_Spell = s; + + if( m_Spell != null && m_Spell.DelayedDamage && !m_Spell.DelayedDamageStacking ) + m_Spell.StartDelayedDamageContext( target, this ); + + Priority = TimerPriority.TwentyFiveMS; + } + + protected override void OnTick() + { + if( m_From is BaseCreature ) + ((BaseCreature)m_From).AlterSpellDamageTo( m_Target, ref m_Damage ); + + if( m_Target is BaseCreature ) + ((BaseCreature)m_Target).AlterSpellDamageFrom( m_From, ref m_Damage ); + + m_Target.Damage( m_Damage ); + if( m_Spell != null ) + m_Spell.RemoveDelayedDamageContext( m_Target ); + } + } + } + + public class TransformationSpellHelper + { + #region Context Stuff + private static Dictionary m_Table = new Dictionary(); + + public static void AddContext( Mobile m, TransformContext context ) + { + m_Table[m] = context; + } + + public static void RemoveContext( Mobile m, bool resetGraphics ) + { + TransformContext context = GetContext( m ); + + if( context != null ) + RemoveContext( m, context, resetGraphics ); + } + + public static void RemoveContext( Mobile m, TransformContext context, bool resetGraphics ) + { + if( m_Table.ContainsKey( m ) ) + { + m_Table.Remove( m ); + + if( resetGraphics ) + { + m.HueMod = -1; + m.BodyMod = 0; + } + + context.Timer.Stop(); + context.Spell.RemoveEffect( m ); + } + } + + public static TransformContext GetContext( Mobile m ) + { + TransformContext context = null; + + m_Table.TryGetValue( m, out context ); + + return context; + } + + public static bool UnderTransformation( Mobile m ) + { + return (GetContext( m ) != null); + } + + public static bool UnderTransformation( Mobile m, Type type ) + { + TransformContext context = GetContext( m ); + + return (context != null && context.Type == type); + } + #endregion + + public static bool CheckCast( Mobile caster, Spell spell ) + { + if( !caster.CanBeginAction( typeof( PolymorphSpell ) ) ) + { + caster.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed. + return false; + } + + return true; + } + + public static bool OnCast( Mobile caster, Spell spell ) + { + ITransformationSpell transformSpell = spell as ITransformationSpell; + + if( transformSpell == null ) + return false; + + if( !caster.CanBeginAction( typeof( PolymorphSpell ) ) ) + { + caster.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed. + } + else if ( DisguiseTimers.IsDisguised( caster ) ) + { + caster.SendLocalizedMessage( 1061631 ); // You can't do that while disguised. + return false; + } + else if( !caster.CanBeginAction( typeof( IncognitoSpell ) ) || (caster.IsBodyMod && GetContext( caster ) == null) ) + { + spell.DoFizzle(); + } + else if( spell.CheckSequence() ) + { + TransformContext context = GetContext( caster ); + Type ourType = spell.GetType(); + + bool wasTransformed = (context != null); + bool ourTransform = (wasTransformed && context.Type == ourType); + + if( wasTransformed ) + { + RemoveContext( caster, context, ourTransform ); + + if( ourTransform ) + { + caster.PlaySound( 0xFA ); + caster.FixedParticles( 0x3728, 1, 13, 5042, EffectLayer.Waist ); + } + } + + if( !ourTransform ) + { + if( !((Body)transformSpell.Body).IsHuman ) + { + Mobiles.IMount mt = caster.Mount; + + if( mt != null ) + mt.Rider = null; + } + + caster.BodyMod = transformSpell.Body; + caster.HueMod = transformSpell.Hue; + + transformSpell.DoEffect( caster ); + + Timer timer = new TransformTimer( caster, transformSpell ); + timer.Start(); + + AddContext( caster, new TransformContext( timer, ourType, transformSpell ) ); + return true; + } + } + + return false; + } + } + + public interface ITransformationSpell + { + int Body { get; } + int Hue { get; } + + double TickRate { get; } + void OnTick( Mobile m ); + + void DoEffect( Mobile m ); + void RemoveEffect( Mobile m ); + } + + + public class TransformContext + { + private Timer m_Timer; + private Type m_Type; + private ITransformationSpell m_Spell; + + public Timer Timer { get { return m_Timer; } } + public Type Type { get { return m_Type; } } + public ITransformationSpell Spell { get { return m_Spell; } } + + public TransformContext( Timer timer, Type type, ITransformationSpell spell ) + { + m_Timer = timer; + m_Type = type; + m_Spell = spell; + } + } + + public class TransformTimer : Timer + { + private Mobile m_Mobile; + private ITransformationSpell m_Spell; + + public TransformTimer( Mobile from, ITransformationSpell spell ) + : base( TimeSpan.FromSeconds( spell.TickRate ), TimeSpan.FromSeconds( spell.TickRate ) ) + { + m_Mobile = from; + m_Spell = spell; + + Priority = TimerPriority.TwoFiftyMS; + } + + protected override void OnTick() + { + if( m_Mobile.Deleted || !m_Mobile.Alive || m_Mobile.Body != m_Spell.Body || m_Mobile.Hue != m_Spell.Hue ) + { + TransformationSpellHelper.RemoveContext( m_Mobile, true ); + Stop(); + } + else + { + m_Spell.OnTick( m_Mobile ); + } + } + } +} diff --git a/Scripts/Spells/Base/SpellInfo.cs b/Scripts/Spells/Base/SpellInfo.cs new file mode 100644 index 0000000..47b2491 --- /dev/null +++ b/Scripts/Spells/Base/SpellInfo.cs @@ -0,0 +1,66 @@ +using System; +using Server; + +namespace Server.Spells +{ + public class SpellInfo + { + private string m_Name; + private string m_Mantra; + private Type[] m_Reagents; + private int[] m_Amounts; + private int m_Action; + private bool m_AllowTown; + private int m_LeftHandEffect, m_RightHandEffect; + + public SpellInfo( string name, string mantra, params Type[] regs ) : this( name, mantra, 16, 0, 0, true, regs ) + { + } + + public SpellInfo( string name, string mantra, bool allowTown, params Type[] regs ) : this( name, mantra, 16, 0, 0, allowTown, regs ) + { + } + + public SpellInfo( string name, string mantra, int action, params Type[] regs ) : this( name, mantra, action, 0, 0, true, regs ) + { + } + + public SpellInfo( string name, string mantra, int action, bool allowTown, params Type[] regs ) : this( name, mantra, action, 0, 0, allowTown, regs ) + { + } + + public SpellInfo( string name, string mantra, int action, int handEffect, params Type[] regs ) : this( name, mantra, action, handEffect, handEffect, true, regs ) + { + } + + public SpellInfo( string name, string mantra, int action, int handEffect, bool allowTown, params Type[] regs ) : this( name, mantra, action, handEffect, handEffect, allowTown, regs ) + { + } + + public SpellInfo( string name, string mantra, int action, int leftHandEffect, int rightHandEffect, bool allowTown, params Type[] regs ) + { + m_Name = name; + m_Mantra = mantra; + m_Action = action; + m_Reagents = regs; + m_AllowTown = allowTown; + + m_LeftHandEffect = leftHandEffect; + m_RightHandEffect = rightHandEffect; + + m_Amounts = new int[regs.Length]; + + for ( int i = 0; i < regs.Length; ++i ) + m_Amounts[i] = 1; + } + + public int Action{ get{ return m_Action; } set{ m_Action = value; } } + public bool AllowTown{ get{ return m_AllowTown; } set{ m_AllowTown = value; } } + public int[] Amounts{ get{ return m_Amounts; } set{ m_Amounts = value; } } + public string Mantra{ get{ return m_Mantra; } set{ m_Mantra = value; } } + public string Name{ get{ return m_Name; } set{ m_Name = value; } } + public Type[] Reagents{ get{ return m_Reagents; } set{ m_Reagents = value; } } + public int LeftHandEffect{ get{ return m_LeftHandEffect; } set{ m_LeftHandEffect = value; } } + public int RightHandEffect{ get{ return m_RightHandEffect; } set{ m_RightHandEffect = value; } } + } +} \ No newline at end of file diff --git a/Scripts/Spells/Base/SpellRegistry.cs b/Scripts/Spells/Base/SpellRegistry.cs new file mode 100644 index 0000000..efc96d0 --- /dev/null +++ b/Scripts/Spells/Base/SpellRegistry.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Server.Items; + +namespace Server.Spells +{ + public class SpellRegistry + { + private static Type[] m_Types = new Type[700]; + private static int m_Count; + + public static Type[] Types + { + get + { + m_Count = -1; + return m_Types; + } + } + + //What IS this used for anyways. + public static int Count + { + get + { + if ( m_Count == -1 ) + { + m_Count = 0; + + for ( int i = 0; i < m_Types.Length; ++i ) + if ( m_Types[i] != null ) + ++m_Count; + } + + return m_Count; + } + } + + private static Dictionary m_IDsFromTypes = new Dictionary( m_Types.Length ); + + public static int GetRegistryNumber( ISpell s ) + { + return GetRegistryNumber( s.GetType() ); + } + + public static int GetRegistryNumber( Type type ) + { + if( m_IDsFromTypes.ContainsKey( type ) ) + return m_IDsFromTypes[type]; + + return -1; + } + + public static void Register( int spellID, Type type ) + { + if ( spellID < 0 || spellID >= m_Types.Length ) + return; + + if ( m_Types[spellID] == null ) + ++m_Count; + + m_Types[spellID] = type; + + if( !m_IDsFromTypes.ContainsKey( type ) ) + m_IDsFromTypes.Add( type, spellID ); + } + + private static object[] m_Params = new object[2]; + + public static Spell NewSpell( int spellID, Mobile caster, Item scroll ) + { + if ( spellID < 0 || spellID >= m_Types.Length ) + return null; + + Type t = m_Types[spellID]; + + if( t != null ) + { + m_Params[0] = caster; + m_Params[1] = scroll; + + try + { + return (Spell)Activator.CreateInstance( t, m_Params ); + } + catch + { + } + } + + return null; + } + + private static string[] m_CircleNames = new string[] + { + "First", + "Second", + "Third", + "Fourth", + "Fifth", + "Sixth", + "Seventh", + "Eighth" + }; + + public static Spell NewSpell( string name, Mobile caster, Item scroll ) + { + for ( int i = 0; i < m_CircleNames.Length; ++i ) + { + Type t = ScriptCompiler.FindTypeByFullName( String.Format( "Server.Spells.{0}.{1}", m_CircleNames[i], name ) ); + + if ( t != null ) + { + m_Params[0] = caster; + m_Params[1] = scroll; + + try + { + return (Spell)Activator.CreateInstance( t, m_Params ); + } + catch + { + } + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/Base/SpellState.cs b/Scripts/Spells/Base/SpellState.cs new file mode 100644 index 0000000..237a99a --- /dev/null +++ b/Scripts/Spells/Base/SpellState.cs @@ -0,0 +1,11 @@ +using System; + +namespace Server.Spells +{ + public enum SpellState + { + None = 0, + Casting = 1, // We are in the process of casting (that is, waiting GetCastTime() and doing animations). Spell casting may be interupted in this state. + Sequencing = 2 // Casting completed, but the full spell sequence isn't. Usually waiting for a target response. Some actions are restricted in this state (using skills for example). + } +} \ No newline at end of file diff --git a/Scripts/Spells/Base/UnsummonTimer.cs b/Scripts/Spells/Base/UnsummonTimer.cs new file mode 100644 index 0000000..b20ed4d --- /dev/null +++ b/Scripts/Spells/Base/UnsummonTimer.cs @@ -0,0 +1,24 @@ +using System; +using Server.Mobiles; + +namespace Server.Spells +{ + class UnsummonTimer : Timer + { + private BaseCreature m_Creature; + private Mobile m_Caster; + + public UnsummonTimer( Mobile caster, BaseCreature creature, TimeSpan delay ) : base( delay ) + { + m_Caster = caster; + m_Creature = creature; + Priority = TimerPriority.OneSecond; + } + + protected override void OnTick() + { + if ( !m_Creature.Deleted ) + m_Creature.Delete(); + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/Reagent.cs b/Scripts/Spells/Reagent.cs new file mode 100644 index 0000000..d5e5450 --- /dev/null +++ b/Scripts/Spells/Reagent.cs @@ -0,0 +1,73 @@ +using System; +using Server.Items; + +namespace Server.Spells +{ + public class Reagent + { + private static Type[] m_Types = new Type[8] + { + typeof( BlackPearl ), + typeof( Bloodmoss ), + typeof( Garlic ), + typeof( Ginseng ), + typeof( MandrakeRoot ), + typeof( Nightshade ), + typeof( SulfurousAsh ), + typeof( SpidersSilk ) + }; + + public Type[] Types + { + get{ return m_Types; } + } + + public static Type BlackPearl + { + get{ return m_Types[0]; } + set{ m_Types[0] = value; } + } + + public static Type Bloodmoss + { + get{ return m_Types[1]; } + set{ m_Types[1] = value; } + } + + public static Type Garlic + { + get{ return m_Types[2]; } + set{ m_Types[2] = value; } + } + + public static Type Ginseng + { + get{ return m_Types[3]; } + set{ m_Types[3] = value; } + } + + public static Type MandrakeRoot + { + get{ return m_Types[4]; } + set{ m_Types[4] = value; } + } + + public static Type Nightshade + { + get{ return m_Types[5]; } + set{ m_Types[5] = value; } + } + + public static Type SulfurousAsh + { + get{ return m_Types[6]; } + set{ m_Types[6] = value; } + } + + public static Type SpidersSilk + { + get{ return m_Types[7]; } + set{ m_Types[7] = value; } + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Eighth Circle/EarthquakeScroll.cs b/Scripts/Spells/Scrolls/Eighth Circle/EarthquakeScroll.cs new file mode 100644 index 0000000..4f2621d --- /dev/null +++ b/Scripts/Spells/Scrolls/Eighth Circle/EarthquakeScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class EarthquakeScroll : SpellScroll + { + [Constructable] + public EarthquakeScroll() : this( 1 ) + { + } + + [Constructable] + public EarthquakeScroll( int amount ) : base( 56, 0x1F65, amount ) + { + } + + public EarthquakeScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Eighth Circle/EnergyVortexScroll.cs b/Scripts/Spells/Scrolls/Eighth Circle/EnergyVortexScroll.cs new file mode 100644 index 0000000..085d948 --- /dev/null +++ b/Scripts/Spells/Scrolls/Eighth Circle/EnergyVortexScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class EnergyVortexScroll : SpellScroll + { + [Constructable] + public EnergyVortexScroll() : this( 1 ) + { + } + + [Constructable] + public EnergyVortexScroll( int amount ) : base( 57, 0x1F66, amount ) + { + } + + public EnergyVortexScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Eighth Circle/ResurrectionScroll.cs b/Scripts/Spells/Scrolls/Eighth Circle/ResurrectionScroll.cs new file mode 100644 index 0000000..ef89ec7 --- /dev/null +++ b/Scripts/Spells/Scrolls/Eighth Circle/ResurrectionScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ResurrectionScroll : SpellScroll + { + [Constructable] + public ResurrectionScroll() : this( 1 ) + { + } + + [Constructable] + public ResurrectionScroll( int amount ) : base( 58, 0x1F67, amount ) + { + } + + public ResurrectionScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Eighth Circle/SummonAirElementalScroll.cs b/Scripts/Spells/Scrolls/Eighth Circle/SummonAirElementalScroll.cs new file mode 100644 index 0000000..99a4830 --- /dev/null +++ b/Scripts/Spells/Scrolls/Eighth Circle/SummonAirElementalScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class SummonAirElementalScroll : SpellScroll + { + [Constructable] + public SummonAirElementalScroll() : this( 1 ) + { + } + + [Constructable] + public SummonAirElementalScroll( int amount ) : base( 59, 0x1F68, amount ) + { + } + + public SummonAirElementalScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Eighth Circle/SummonDaemonScroll.cs b/Scripts/Spells/Scrolls/Eighth Circle/SummonDaemonScroll.cs new file mode 100644 index 0000000..d23f183 --- /dev/null +++ b/Scripts/Spells/Scrolls/Eighth Circle/SummonDaemonScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class SummonDaemonScroll : SpellScroll + { + [Constructable] + public SummonDaemonScroll() : this( 1 ) + { + } + + [Constructable] + public SummonDaemonScroll( int amount ) : base( 60, 0x1F69, amount ) + { + } + + public SummonDaemonScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Eighth Circle/SummonEarthElementalScroll.cs b/Scripts/Spells/Scrolls/Eighth Circle/SummonEarthElementalScroll.cs new file mode 100644 index 0000000..a048757 --- /dev/null +++ b/Scripts/Spells/Scrolls/Eighth Circle/SummonEarthElementalScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class SummonEarthElementalScroll : SpellScroll + { + [Constructable] + public SummonEarthElementalScroll() : this( 1 ) + { + } + + [Constructable] + public SummonEarthElementalScroll( int amount ) : base( 61, 0x1F6A, amount ) + { + } + + public SummonEarthElementalScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Eighth Circle/SummonFireElementalScroll.cs b/Scripts/Spells/Scrolls/Eighth Circle/SummonFireElementalScroll.cs new file mode 100644 index 0000000..197e168 --- /dev/null +++ b/Scripts/Spells/Scrolls/Eighth Circle/SummonFireElementalScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class SummonFireElementalScroll : SpellScroll + { + [Constructable] + public SummonFireElementalScroll() : this( 1 ) + { + } + + [Constructable] + public SummonFireElementalScroll( int amount ) : base( 62, 0x1F6B, amount ) + { + } + + public SummonFireElementalScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Eighth Circle/SummonWaterElementalScroll.cs b/Scripts/Spells/Scrolls/Eighth Circle/SummonWaterElementalScroll.cs new file mode 100644 index 0000000..a096d89 --- /dev/null +++ b/Scripts/Spells/Scrolls/Eighth Circle/SummonWaterElementalScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class SummonWaterElementalScroll : SpellScroll + { + [Constructable] + public SummonWaterElementalScroll() : this( 1 ) + { + } + + [Constructable] + public SummonWaterElementalScroll( int amount ) : base( 63, 0x1F6C, amount ) + { + } + + public SummonWaterElementalScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fifth Circle/BladeSpiritsScroll.cs b/Scripts/Spells/Scrolls/Fifth Circle/BladeSpiritsScroll.cs new file mode 100644 index 0000000..271ef16 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fifth Circle/BladeSpiritsScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class BladeSpiritsScroll : SpellScroll + { + [Constructable] + public BladeSpiritsScroll() : this( 1 ) + { + } + + [Constructable] + public BladeSpiritsScroll( int amount ) : base( 32, 0x1F4D, amount ) + { + } + + public BladeSpiritsScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fifth Circle/DispelFieldScroll.cs b/Scripts/Spells/Scrolls/Fifth Circle/DispelFieldScroll.cs new file mode 100644 index 0000000..1d559f4 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fifth Circle/DispelFieldScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class DispelFieldScroll : SpellScroll + { + [Constructable] + public DispelFieldScroll() : this( 1 ) + { + } + + [Constructable] + public DispelFieldScroll( int amount ) : base( 33, 0x1F4E, amount ) + { + } + + public DispelFieldScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fifth Circle/IncognitoScroll.cs b/Scripts/Spells/Scrolls/Fifth Circle/IncognitoScroll.cs new file mode 100644 index 0000000..388fc9b --- /dev/null +++ b/Scripts/Spells/Scrolls/Fifth Circle/IncognitoScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class IncognitoScroll : SpellScroll + { + [Constructable] + public IncognitoScroll() : this( 1 ) + { + } + + [Constructable] + public IncognitoScroll( int amount ) : base( 34, 0x1F4F, amount ) + { + } + + public IncognitoScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fifth Circle/MagicReflectScroll.cs b/Scripts/Spells/Scrolls/Fifth Circle/MagicReflectScroll.cs new file mode 100644 index 0000000..9d10681 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fifth Circle/MagicReflectScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MagicReflectScroll : SpellScroll + { + [Constructable] + public MagicReflectScroll() : this( 1 ) + { + } + + [Constructable] + public MagicReflectScroll( int amount ) : base( 35, 0x1F50, amount ) + { + } + + public MagicReflectScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fifth Circle/MindBlastScroll.cs b/Scripts/Spells/Scrolls/Fifth Circle/MindBlastScroll.cs new file mode 100644 index 0000000..7b29fb1 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fifth Circle/MindBlastScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MindBlastScroll : SpellScroll + { + [Constructable] + public MindBlastScroll() : this( 1 ) + { + } + + [Constructable] + public MindBlastScroll( int amount ) : base( 36, 0x1F51, amount ) + { + } + + public MindBlastScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fifth Circle/ParalyzeScroll.cs b/Scripts/Spells/Scrolls/Fifth Circle/ParalyzeScroll.cs new file mode 100644 index 0000000..a49d5b6 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fifth Circle/ParalyzeScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ParalyzeScroll : SpellScroll + { + [Constructable] + public ParalyzeScroll() : this( 1 ) + { + } + + [Constructable] + public ParalyzeScroll( int amount ) : base( 37, 0x1F52, amount ) + { + } + + public ParalyzeScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fifth Circle/PoisonFieldScroll.cs b/Scripts/Spells/Scrolls/Fifth Circle/PoisonFieldScroll.cs new file mode 100644 index 0000000..870cfa4 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fifth Circle/PoisonFieldScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class PoisonFieldScroll : SpellScroll + { + [Constructable] + public PoisonFieldScroll() : this( 1 ) + { + } + + [Constructable] + public PoisonFieldScroll( int amount ) : base( 38, 0x1F53, amount ) + { + } + + public PoisonFieldScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fifth Circle/SummonCreatureScroll.cs b/Scripts/Spells/Scrolls/Fifth Circle/SummonCreatureScroll.cs new file mode 100644 index 0000000..ec2de99 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fifth Circle/SummonCreatureScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class SummonCreatureScroll : SpellScroll + { + [Constructable] + public SummonCreatureScroll() : this( 1 ) + { + } + + [Constructable] + public SummonCreatureScroll( int amount ) : base( 39, 0x1F54, amount ) + { + } + + public SummonCreatureScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/First Circle/ClumsyScroll.cs b/Scripts/Spells/Scrolls/First Circle/ClumsyScroll.cs new file mode 100644 index 0000000..6bec262 --- /dev/null +++ b/Scripts/Spells/Scrolls/First Circle/ClumsyScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ClumsyScroll : SpellScroll + { + [Constructable] + public ClumsyScroll() : this( 1 ) + { + } + + [Constructable] + public ClumsyScroll( int amount ) : base( 0, 0x1F2E, amount ) + { + } + + public ClumsyScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/First Circle/CreateFoodScroll.cs b/Scripts/Spells/Scrolls/First Circle/CreateFoodScroll.cs new file mode 100644 index 0000000..b48146b --- /dev/null +++ b/Scripts/Spells/Scrolls/First Circle/CreateFoodScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class CreateFoodScroll : SpellScroll + { + [Constructable] + public CreateFoodScroll() : this( 1 ) + { + } + + [Constructable] + public CreateFoodScroll( int amount ) : base( 1, 0x1F2F, amount ) + { + } + + public CreateFoodScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/First Circle/FeeblemindScroll.cs b/Scripts/Spells/Scrolls/First Circle/FeeblemindScroll.cs new file mode 100644 index 0000000..b4df6a1 --- /dev/null +++ b/Scripts/Spells/Scrolls/First Circle/FeeblemindScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class FeeblemindScroll : SpellScroll + { + [Constructable] + public FeeblemindScroll() : this( 1 ) + { + } + + [Constructable] + public FeeblemindScroll( int amount ) : base( 2, 0x1F30, amount ) + { + } + + public FeeblemindScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/First Circle/HealScroll.cs b/Scripts/Spells/Scrolls/First Circle/HealScroll.cs new file mode 100644 index 0000000..b0ea069 --- /dev/null +++ b/Scripts/Spells/Scrolls/First Circle/HealScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class HealScroll : SpellScroll + { + [Constructable] + public HealScroll() : this( 1 ) + { + } + + [Constructable] + public HealScroll( int amount ) : base( 3, 0x1F31, amount ) + { + } + + public HealScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/First Circle/MagicArrowScroll.cs b/Scripts/Spells/Scrolls/First Circle/MagicArrowScroll.cs new file mode 100644 index 0000000..16e20f3 --- /dev/null +++ b/Scripts/Spells/Scrolls/First Circle/MagicArrowScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MagicArrowScroll : SpellScroll + { + [Constructable] + public MagicArrowScroll() : this( 1 ) + { + } + + [Constructable] + public MagicArrowScroll( int amount ) : base( 4, 0x1F32, amount ) + { + } + + public MagicArrowScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/First Circle/NightSightScroll.cs b/Scripts/Spells/Scrolls/First Circle/NightSightScroll.cs new file mode 100644 index 0000000..001dd4f --- /dev/null +++ b/Scripts/Spells/Scrolls/First Circle/NightSightScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class NightSightScroll : SpellScroll + { + [Constructable] + public NightSightScroll() : this( 1 ) + { + } + + [Constructable] + public NightSightScroll( int amount ) : base( 5, 0x1F33, amount ) + { + } + + public NightSightScroll( Serial ser ) : base(ser) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/First Circle/ReactiveArmorScroll.cs b/Scripts/Spells/Scrolls/First Circle/ReactiveArmorScroll.cs new file mode 100644 index 0000000..c04ffed --- /dev/null +++ b/Scripts/Spells/Scrolls/First Circle/ReactiveArmorScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ReactiveArmorScroll : SpellScroll + { + [Constructable] + public ReactiveArmorScroll() : this( 1 ) + { + } + + [Constructable] + public ReactiveArmorScroll( int amount ) : base( 6, 0x1F2D, amount ) + { + } + + public ReactiveArmorScroll( Serial ser ) : base(ser) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/First Circle/WeakenScroll.cs b/Scripts/Spells/Scrolls/First Circle/WeakenScroll.cs new file mode 100644 index 0000000..2696696 --- /dev/null +++ b/Scripts/Spells/Scrolls/First Circle/WeakenScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class WeakenScroll : SpellScroll + { + [Constructable] + public WeakenScroll() : this( 1 ) + { + } + + [Constructable] + public WeakenScroll( int amount ) : base( 7, 0x1F34, amount ) + { + } + + public WeakenScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fourth Circle/ArchProtectionScroll.cs b/Scripts/Spells/Scrolls/Fourth Circle/ArchProtectionScroll.cs new file mode 100644 index 0000000..2e7c0b6 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fourth Circle/ArchProtectionScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ArchProtectionScroll : SpellScroll + { + [Constructable] + public ArchProtectionScroll() : this( 1 ) + { + } + + [Constructable] + public ArchProtectionScroll( int amount ) : base( 25, 0x1F46, amount ) + { + } + + public ArchProtectionScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fourth Circle/ArchcureScroll.cs b/Scripts/Spells/Scrolls/Fourth Circle/ArchcureScroll.cs new file mode 100644 index 0000000..6d75b50 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fourth Circle/ArchcureScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ArchCureScroll : SpellScroll + { + [Constructable] + public ArchCureScroll() : this( 1 ) + { + } + + [Constructable] + public ArchCureScroll( int amount ) : base( 24, 0x1F45, amount ) + { + } + + public ArchCureScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fourth Circle/CurseScroll.cs b/Scripts/Spells/Scrolls/Fourth Circle/CurseScroll.cs new file mode 100644 index 0000000..51f0da4 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fourth Circle/CurseScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class CurseScroll : SpellScroll + { + [Constructable] + public CurseScroll() : this( 1 ) + { + } + + [Constructable] + public CurseScroll( int amount ) : base( 26, 0x1F47, amount ) + { + } + + public CurseScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fourth Circle/FireFieldScroll.cs b/Scripts/Spells/Scrolls/Fourth Circle/FireFieldScroll.cs new file mode 100644 index 0000000..6fe281e --- /dev/null +++ b/Scripts/Spells/Scrolls/Fourth Circle/FireFieldScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class FireFieldScroll : SpellScroll + { + [Constructable] + public FireFieldScroll() : this( 1 ) + { + } + + [Constructable] + public FireFieldScroll( int amount ) : base( 27, 0x1F48, amount ) + { + } + + public FireFieldScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fourth Circle/GreaterHealScroll.cs b/Scripts/Spells/Scrolls/Fourth Circle/GreaterHealScroll.cs new file mode 100644 index 0000000..23aa37d --- /dev/null +++ b/Scripts/Spells/Scrolls/Fourth Circle/GreaterHealScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class GreaterHealScroll : SpellScroll + { + [Constructable] + public GreaterHealScroll() : this( 1 ) + { + } + + [Constructable] + public GreaterHealScroll( int amount ) : base( 28, 0x1F49, amount ) + { + } + + public GreaterHealScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fourth Circle/LightningScroll.cs b/Scripts/Spells/Scrolls/Fourth Circle/LightningScroll.cs new file mode 100644 index 0000000..c3dd752 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fourth Circle/LightningScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class LightningScroll : SpellScroll + { + [Constructable] + public LightningScroll() : this( 1 ) + { + } + + [Constructable] + public LightningScroll( int amount ) : base( 29, 0x1F4A, amount ) + { + } + + public LightningScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fourth Circle/ManaDrainScroll.cs b/Scripts/Spells/Scrolls/Fourth Circle/ManaDrainScroll.cs new file mode 100644 index 0000000..b21a588 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fourth Circle/ManaDrainScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ManaDrainScroll : SpellScroll + { + [Constructable] + public ManaDrainScroll() : this( 1 ) + { + } + + [Constructable] + public ManaDrainScroll( int amount ) : base( 30, 0x1F4B, amount ) + { + } + + public ManaDrainScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Fourth Circle/RecallScroll.cs b/Scripts/Spells/Scrolls/Fourth Circle/RecallScroll.cs new file mode 100644 index 0000000..90ed072 --- /dev/null +++ b/Scripts/Spells/Scrolls/Fourth Circle/RecallScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class RecallScroll : SpellScroll + { + [Constructable] + public RecallScroll() : this( 1 ) + { + } + + [Constructable] + public RecallScroll( int amount ) : base( 31, 0x1F4C, amount ) + { + } + + public RecallScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Second Circle/AgilityScroll.cs b/Scripts/Spells/Scrolls/Second Circle/AgilityScroll.cs new file mode 100644 index 0000000..e8e5b93 --- /dev/null +++ b/Scripts/Spells/Scrolls/Second Circle/AgilityScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class AgilityScroll : SpellScroll + { + [Constructable] + public AgilityScroll() : this( 1 ) + { + } + + [Constructable] + public AgilityScroll( int amount ) : base( 8, 0x1F35, amount ) + { + } + + public AgilityScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Second Circle/CunningScroll.cs b/Scripts/Spells/Scrolls/Second Circle/CunningScroll.cs new file mode 100644 index 0000000..6ce075e --- /dev/null +++ b/Scripts/Spells/Scrolls/Second Circle/CunningScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class CunningScroll : SpellScroll + { + [Constructable] + public CunningScroll() : this( 1 ) + { + } + + [Constructable] + public CunningScroll( int amount ) : base( 9, 0x1F36, amount ) + { + } + + public CunningScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Second Circle/CureScroll.cs b/Scripts/Spells/Scrolls/Second Circle/CureScroll.cs new file mode 100644 index 0000000..ec21d3c --- /dev/null +++ b/Scripts/Spells/Scrolls/Second Circle/CureScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class CureScroll : SpellScroll + { + [Constructable] + public CureScroll() : this( 1 ) + { + } + + [Constructable] + public CureScroll( int amount ) : base( 10, 0x1F37, amount ) + { + } + + public CureScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Second Circle/HarmScroll.cs b/Scripts/Spells/Scrolls/Second Circle/HarmScroll.cs new file mode 100644 index 0000000..b11dac3 --- /dev/null +++ b/Scripts/Spells/Scrolls/Second Circle/HarmScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class HarmScroll : SpellScroll + { + [Constructable] + public HarmScroll() : this( 1 ) + { + } + + [Constructable] + public HarmScroll( int amount ) : base( 11, 0x1F38, amount ) + { + } + + public HarmScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Second Circle/MagicTrapScroll.cs b/Scripts/Spells/Scrolls/Second Circle/MagicTrapScroll.cs new file mode 100644 index 0000000..0881e64 --- /dev/null +++ b/Scripts/Spells/Scrolls/Second Circle/MagicTrapScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MagicTrapScroll : SpellScroll + { + [Constructable] + public MagicTrapScroll() : this( 1 ) + { + } + + [Constructable] + public MagicTrapScroll( int amount ) : base( 12, 0x1F39, amount ) + { + } + + public MagicTrapScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Second Circle/MagicUnTrapScroll.cs b/Scripts/Spells/Scrolls/Second Circle/MagicUnTrapScroll.cs new file mode 100644 index 0000000..6c5e4c0 --- /dev/null +++ b/Scripts/Spells/Scrolls/Second Circle/MagicUnTrapScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MagicUnTrapScroll : SpellScroll + { + [Constructable] + public MagicUnTrapScroll() : this( 1 ) + { + } + + [Constructable] + public MagicUnTrapScroll( int amount ) : base( 13, 0x1F3A, amount ) + { + } + + public MagicUnTrapScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Second Circle/ProtectionScroll.cs b/Scripts/Spells/Scrolls/Second Circle/ProtectionScroll.cs new file mode 100644 index 0000000..2afbde5 --- /dev/null +++ b/Scripts/Spells/Scrolls/Second Circle/ProtectionScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ProtectionScroll : SpellScroll + { + [Constructable] + public ProtectionScroll() : this( 1 ) + { + } + + [Constructable] + public ProtectionScroll( int amount ) : base( 14, 0x1F3B, amount ) + { + } + + public ProtectionScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Second Circle/StrengthScroll.cs b/Scripts/Spells/Scrolls/Second Circle/StrengthScroll.cs new file mode 100644 index 0000000..11ca302 --- /dev/null +++ b/Scripts/Spells/Scrolls/Second Circle/StrengthScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class StrengthScroll : SpellScroll + { + [Constructable] + public StrengthScroll() : this( 1 ) + { + } + + [Constructable] + public StrengthScroll( int amount ) : base( 15, 0x1F3C, amount ) + { + } + + public StrengthScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Seventh Circle/ChainLightningScroll.cs b/Scripts/Spells/Scrolls/Seventh Circle/ChainLightningScroll.cs new file mode 100644 index 0000000..4995a26 --- /dev/null +++ b/Scripts/Spells/Scrolls/Seventh Circle/ChainLightningScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ChainLightningScroll : SpellScroll + { + [Constructable] + public ChainLightningScroll() : this( 1 ) + { + } + + [Constructable] + public ChainLightningScroll( int amount ) : base( 48, 0x1F5D, amount ) + { + } + + public ChainLightningScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Seventh Circle/EnergyFieldScroll.cs b/Scripts/Spells/Scrolls/Seventh Circle/EnergyFieldScroll.cs new file mode 100644 index 0000000..53daca2 --- /dev/null +++ b/Scripts/Spells/Scrolls/Seventh Circle/EnergyFieldScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class EnergyFieldScroll : SpellScroll + { + [Constructable] + public EnergyFieldScroll() : this( 1 ) + { + } + + [Constructable] + public EnergyFieldScroll( int amount ) : base( 49, 0x1F5E, amount ) + { + } + + public EnergyFieldScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Seventh Circle/FlamestrikeScroll.cs b/Scripts/Spells/Scrolls/Seventh Circle/FlamestrikeScroll.cs new file mode 100644 index 0000000..7233493 --- /dev/null +++ b/Scripts/Spells/Scrolls/Seventh Circle/FlamestrikeScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class FlamestrikeScroll : SpellScroll + { + [Constructable] + public FlamestrikeScroll() : this( 1 ) + { + } + + [Constructable] + public FlamestrikeScroll( int amount ) : base( 50, 0x1F5F, amount ) + { + } + + public FlamestrikeScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Seventh Circle/GateTravelScroll.cs b/Scripts/Spells/Scrolls/Seventh Circle/GateTravelScroll.cs new file mode 100644 index 0000000..f64254f --- /dev/null +++ b/Scripts/Spells/Scrolls/Seventh Circle/GateTravelScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class GateTravelScroll : SpellScroll + { + [Constructable] + public GateTravelScroll() : this( 1 ) + { + } + + [Constructable] + public GateTravelScroll( int amount ) : base( 51, 0x1F60, amount ) + { + } + + public GateTravelScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Seventh Circle/ManaVampireScroll.cs b/Scripts/Spells/Scrolls/Seventh Circle/ManaVampireScroll.cs new file mode 100644 index 0000000..087ea49 --- /dev/null +++ b/Scripts/Spells/Scrolls/Seventh Circle/ManaVampireScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ManaVampireScroll : SpellScroll + { + [Constructable] + public ManaVampireScroll() : this( 1 ) + { + } + + [Constructable] + public ManaVampireScroll( int amount ) : base( 52, 0x1F61, amount ) + { + } + + public ManaVampireScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Seventh Circle/MassDispelScroll.cs b/Scripts/Spells/Scrolls/Seventh Circle/MassDispelScroll.cs new file mode 100644 index 0000000..f4c8f20 --- /dev/null +++ b/Scripts/Spells/Scrolls/Seventh Circle/MassDispelScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MassDispelScroll : SpellScroll + { + [Constructable] + public MassDispelScroll() : this( 1 ) + { + } + + [Constructable] + public MassDispelScroll( int amount ) : base( 53, 0x1F62, amount ) + { + } + + public MassDispelScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Seventh Circle/MeteorStormScroll.cs b/Scripts/Spells/Scrolls/Seventh Circle/MeteorStormScroll.cs new file mode 100644 index 0000000..cab6482 --- /dev/null +++ b/Scripts/Spells/Scrolls/Seventh Circle/MeteorStormScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MeteorSwarmScroll : SpellScroll + { + [Constructable] + public MeteorSwarmScroll() : this( 1 ) + { + } + + [Constructable] + public MeteorSwarmScroll( int amount ) : base( 54, 0x1F63, amount ) + { + } + + public MeteorSwarmScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Seventh Circle/PolymorphScroll.cs b/Scripts/Spells/Scrolls/Seventh Circle/PolymorphScroll.cs new file mode 100644 index 0000000..69cbefb --- /dev/null +++ b/Scripts/Spells/Scrolls/Seventh Circle/PolymorphScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class PolymorphScroll : SpellScroll + { + [Constructable] + public PolymorphScroll() : this( 1 ) + { + } + + [Constructable] + public PolymorphScroll( int amount ) : base( 55, 0x1F64, amount ) + { + } + + public PolymorphScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Sixth Circle/DispelScroll.cs b/Scripts/Spells/Scrolls/Sixth Circle/DispelScroll.cs new file mode 100644 index 0000000..c5e6df4 --- /dev/null +++ b/Scripts/Spells/Scrolls/Sixth Circle/DispelScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class DispelScroll : SpellScroll + { + [Constructable] + public DispelScroll() : this( 1 ) + { + } + + [Constructable] + public DispelScroll( int amount ) : base( 40, 0x1F55, amount ) + { + } + + public DispelScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Sixth Circle/EnergyBoltScroll.cs b/Scripts/Spells/Scrolls/Sixth Circle/EnergyBoltScroll.cs new file mode 100644 index 0000000..1c973f5 --- /dev/null +++ b/Scripts/Spells/Scrolls/Sixth Circle/EnergyBoltScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class EnergyBoltScroll : SpellScroll + { + [Constructable] + public EnergyBoltScroll() : this( 1 ) + { + } + + [Constructable] + public EnergyBoltScroll( int amount ) : base( 41, 0x1F56, amount ) + { + } + + public EnergyBoltScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Sixth Circle/ExplosionScroll.cs b/Scripts/Spells/Scrolls/Sixth Circle/ExplosionScroll.cs new file mode 100644 index 0000000..4671ecd --- /dev/null +++ b/Scripts/Spells/Scrolls/Sixth Circle/ExplosionScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ExplosionScroll : SpellScroll + { + [Constructable] + public ExplosionScroll() : this( 1 ) + { + } + + [Constructable] + public ExplosionScroll( int amount ) : base( 42, 0x1F57, amount ) + { + } + + public ExplosionScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Sixth Circle/InvisibilityScroll.cs b/Scripts/Spells/Scrolls/Sixth Circle/InvisibilityScroll.cs new file mode 100644 index 0000000..ad0f0eb --- /dev/null +++ b/Scripts/Spells/Scrolls/Sixth Circle/InvisibilityScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class InvisibilityScroll : SpellScroll + { + [Constructable] + public InvisibilityScroll() : this( 1 ) + { + } + + [Constructable] + public InvisibilityScroll( int amount ) : base( 43, 0x1F58, amount ) + { + } + + public InvisibilityScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Sixth Circle/MarkScroll.cs b/Scripts/Spells/Scrolls/Sixth Circle/MarkScroll.cs new file mode 100644 index 0000000..3bc2c04 --- /dev/null +++ b/Scripts/Spells/Scrolls/Sixth Circle/MarkScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MarkScroll : SpellScroll + { + [Constructable] + public MarkScroll() : this( 1 ) + { + } + + [Constructable] + public MarkScroll( int amount ) : base( 44, 0x1F59, amount ) + { + } + + public MarkScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Sixth Circle/MassCurseScroll.cs b/Scripts/Spells/Scrolls/Sixth Circle/MassCurseScroll.cs new file mode 100644 index 0000000..4a9d8c0 --- /dev/null +++ b/Scripts/Spells/Scrolls/Sixth Circle/MassCurseScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MassCurseScroll : SpellScroll + { + [Constructable] + public MassCurseScroll() : this( 1 ) + { + } + + [Constructable] + public MassCurseScroll( int amount ) : base( 45, 0x1F5A, amount ) + { + } + + public MassCurseScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Sixth Circle/ParalyzeFieldSpell.cs b/Scripts/Spells/Scrolls/Sixth Circle/ParalyzeFieldSpell.cs new file mode 100644 index 0000000..f8a5f3d --- /dev/null +++ b/Scripts/Spells/Scrolls/Sixth Circle/ParalyzeFieldSpell.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class ParalyzeFieldScroll : SpellScroll + { + [Constructable] + public ParalyzeFieldScroll() : this( 1 ) + { + } + + [Constructable] + public ParalyzeFieldScroll( int amount ) : base( 46, 0x1F5B, amount ) + { + } + + public ParalyzeFieldScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Sixth Circle/RevealScroll.cs b/Scripts/Spells/Scrolls/Sixth Circle/RevealScroll.cs new file mode 100644 index 0000000..c0523bf --- /dev/null +++ b/Scripts/Spells/Scrolls/Sixth Circle/RevealScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class RevealScroll : SpellScroll + { + [Constructable] + public RevealScroll() : this( 1 ) + { + } + + [Constructable] + public RevealScroll( int amount ) : base( 47, 0x1F5C, amount ) + { + } + + public RevealScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/SpellScroll.cs b/Scripts/Spells/Scrolls/SpellScroll.cs new file mode 100644 index 0000000..a3567b1 --- /dev/null +++ b/Scripts/Spells/Scrolls/SpellScroll.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Spells; +using Server.ContextMenus; + +namespace Server.Items +{ + public class SpellScroll : Item + { + private int m_SpellID; + + public int SpellID + { + get + { + return m_SpellID; + } + } + + public SpellScroll( Serial serial ) : base( serial ) + { + } + + [Constructable] + public SpellScroll( int spellID, int itemID ) : this( spellID, itemID, 1 ) + { + } + + [Constructable] + public SpellScroll( int spellID, int itemID, int amount ) : base( itemID ) + { + Stackable = true; + Weight = 1.0; + Amount = amount; + + m_SpellID = spellID; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( (int) m_SpellID ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_SpellID = reader.ReadInt(); + + break; + } + } + } + + public override void GetContextMenuEntries( Mobile from, List list ) + { + base.GetContextMenuEntries( from, list ); + + if ( from.Alive && this.Movable ) + list.Add( new ContextMenus.AddToSpellbookEntry() ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !Multis.DesignContext.Check( from ) ) + return; // They are customizing + + if ( !IsChildOf( from.Backpack ) ) + { + from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. + return; + } + + Spell spell = SpellRegistry.NewSpell( m_SpellID, from, this ); + + if ( spell != null ) + spell.Cast(); + else + from.SendLocalizedMessage( 502345 ); // This spell has been temporarily disabled. + } + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Third Circle/BlessScroll.cs b/Scripts/Spells/Scrolls/Third Circle/BlessScroll.cs new file mode 100644 index 0000000..abafc97 --- /dev/null +++ b/Scripts/Spells/Scrolls/Third Circle/BlessScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class BlessScroll : SpellScroll + { + [Constructable] + public BlessScroll() : this( 1 ) + { + } + + [Constructable] + public BlessScroll( int amount ) : base( 16, 0x1F3D, amount ) + { + } + + public BlessScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Third Circle/FireballScroll.cs b/Scripts/Spells/Scrolls/Third Circle/FireballScroll.cs new file mode 100644 index 0000000..f056314 --- /dev/null +++ b/Scripts/Spells/Scrolls/Third Circle/FireballScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class FireballScroll : SpellScroll + { + [Constructable] + public FireballScroll() : this( 1 ) + { + } + + [Constructable] + public FireballScroll( int amount ) : base( 17, 0x1F3E, amount ) + { + } + + public FireballScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Third Circle/MagicLockScroll.cs b/Scripts/Spells/Scrolls/Third Circle/MagicLockScroll.cs new file mode 100644 index 0000000..78d6779 --- /dev/null +++ b/Scripts/Spells/Scrolls/Third Circle/MagicLockScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class MagicLockScroll : SpellScroll + { + [Constructable] + public MagicLockScroll() : this( 1 ) + { + } + + [Constructable] + public MagicLockScroll( int amount ) : base( 18, 0x1F3F, amount ) + { + } + + public MagicLockScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Third Circle/PoisonScroll.cs b/Scripts/Spells/Scrolls/Third Circle/PoisonScroll.cs new file mode 100644 index 0000000..35bea88 --- /dev/null +++ b/Scripts/Spells/Scrolls/Third Circle/PoisonScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class PoisonScroll : SpellScroll + { + [Constructable] + public PoisonScroll() : this( 1 ) + { + } + + [Constructable] + public PoisonScroll( int amount ) : base( 19, 0x1F40, amount ) + { + } + + public PoisonScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Third Circle/TelekinisisScroll.cs b/Scripts/Spells/Scrolls/Third Circle/TelekinisisScroll.cs new file mode 100644 index 0000000..1e017b0 --- /dev/null +++ b/Scripts/Spells/Scrolls/Third Circle/TelekinisisScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class TelekinisisScroll : SpellScroll + { + [Constructable] + public TelekinisisScroll() : this( 1 ) + { + } + + [Constructable] + public TelekinisisScroll( int amount ) : base( 20, 0x1F41, amount ) + { + } + + public TelekinisisScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Third Circle/TeleportScroll.cs b/Scripts/Spells/Scrolls/Third Circle/TeleportScroll.cs new file mode 100644 index 0000000..576067f --- /dev/null +++ b/Scripts/Spells/Scrolls/Third Circle/TeleportScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class TeleportScroll : SpellScroll + { + [Constructable] + public TeleportScroll() : this( 1 ) + { + } + + [Constructable] + public TeleportScroll( int amount ) : base( 21, 0x1F42, amount ) + { + } + + public TeleportScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Third Circle/UnlockScroll.cs b/Scripts/Spells/Scrolls/Third Circle/UnlockScroll.cs new file mode 100644 index 0000000..d723eba --- /dev/null +++ b/Scripts/Spells/Scrolls/Third Circle/UnlockScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class UnlockScroll : SpellScroll + { + [Constructable] + public UnlockScroll() : this( 1 ) + { + } + + [Constructable] + public UnlockScroll( int amount ) : base( 22, 0x1F43, amount ) + { + } + + public UnlockScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Scrolls/Third Circle/WallOfStoneScroll.cs b/Scripts/Spells/Scrolls/Third Circle/WallOfStoneScroll.cs new file mode 100644 index 0000000..23f564f --- /dev/null +++ b/Scripts/Spells/Scrolls/Third Circle/WallOfStoneScroll.cs @@ -0,0 +1,39 @@ +using System; +using Server; +using Server.Items; + +namespace Server.Items +{ + public class WallOfStoneScroll : SpellScroll + { + [Constructable] + public WallOfStoneScroll() : this( 1 ) + { + } + + [Constructable] + public WallOfStoneScroll( int amount ) : base( 23, 0x1F44, amount ) + { + } + + public WallOfStoneScroll( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + + + } +} \ No newline at end of file diff --git a/Scripts/Spells/Spellbook.cs b/Scripts/Spells/Spellbook.cs new file mode 100644 index 0000000..ac3f822 --- /dev/null +++ b/Scripts/Spells/Spellbook.cs @@ -0,0 +1,523 @@ +using System; +using System.Collections.Generic; +using Server; +using Server.Commands; +using Server.Engines.Craft; +using Server.Network; +using Server.Spells; +using Server.Targeting; + +namespace Server.Items +{ + public enum SpellbookType + { + Invalid = -1, + Regular + } + + public class Spellbook : Item, ICraftable, ISlayer + { + public static void Initialize() + { + EventSink.OpenSpellbookRequest += new OpenSpellbookRequestEventHandler( EventSink_OpenSpellbookRequest ); + EventSink.CastSpellRequest += new CastSpellRequestEventHandler( EventSink_CastSpellRequest ); + + CommandSystem.Register( "AllSpells", AccessLevel.GameMaster, new CommandEventHandler( AllSpells_OnCommand ) ); + } + + [Usage( "AllSpells" )] + [Description( "Completely fills a targeted spellbook with scrolls." )] + private static void AllSpells_OnCommand( CommandEventArgs e ) + { + e.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( AllSpells_OnTarget ) ); + e.Mobile.SendMessage( "Target the spellbook to fill." ); + } + + private static void AllSpells_OnTarget( Mobile from, object obj ) + { + if ( obj is Spellbook ) + { + Spellbook book = (Spellbook)obj; + + if ( book.BookCount == 64 ) + book.Content = ulong.MaxValue; + else + book.Content = (1ul << book.BookCount) - 1; + + from.SendMessage( "The spellbook has been filled." ); + + CommandLogging.WriteLine( from, "{0} {1} filling spellbook {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( book ) ); + } + else + { + from.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( AllSpells_OnTarget ) ); + from.SendMessage( "That is not a spellbook. Try again." ); + } + } + + private static void EventSink_OpenSpellbookRequest( OpenSpellbookRequestEventArgs e ) + { + Mobile from = e.Mobile; + + if ( !Multis.DesignContext.Check( from ) ) + return; // They are customizing + + SpellbookType type = SpellbookType.Regular; + + Spellbook book = Spellbook.Find( from, -1, type ); + + if ( book != null ) + book.DisplayTo( from ); + } + + private static void EventSink_CastSpellRequest( CastSpellRequestEventArgs e ) + { + Mobile from = e.Mobile; + + if ( !Multis.DesignContext.Check( from ) ) + return; // They are customizing + + Spellbook book = e.Spellbook as Spellbook; + int spellID = e.SpellID; + + if ( book == null || !book.HasSpell( spellID ) ) + book = Find( from, spellID ); + + if ( book != null && book.HasSpell( spellID ) ) + { + Spell spell = SpellRegistry.NewSpell( spellID, from, null ); + + if ( spell != null ) + spell.Cast(); + else + from.SendLocalizedMessage( 502345 ); // This spell has been temporarily disabled. + } + else + { + from.SendLocalizedMessage( 500015 ); // You do not have that spell! + } + } + + private static Dictionary> m_Table = new Dictionary>(); + + public static SpellbookType GetTypeForSpell( int spellID ) + { + if ( spellID >= 0 && spellID < 64 ) + return SpellbookType.Regular; + + return SpellbookType.Invalid; + } + + public static Spellbook FindRegular( Mobile from ) + { + return Find( from, -1, SpellbookType.Regular ); + } + + public static Spellbook Find( Mobile from, int spellID ) + { + return Find( from, spellID, GetTypeForSpell( spellID ) ); + } + + public static Spellbook Find( Mobile from, int spellID, SpellbookType type ) + { + if ( from == null ) + return null; + + if ( from.Deleted ) + { + m_Table.Remove( from ); + return null; + } + + List list = null; + + m_Table.TryGetValue( from, out list ); + + bool searchAgain = false; + + if ( list == null ) + m_Table[from] = list = FindAllSpellbooks( from ); + else + searchAgain = true; + + Spellbook book = FindSpellbookInList( list, from, spellID, type ); + + if ( book == null && searchAgain ) + { + m_Table[from] = list = FindAllSpellbooks( from ); + + book = FindSpellbookInList( list, from, spellID, type ); + } + + return book; + } + + public static Spellbook FindSpellbookInList( List list, Mobile from, int spellID, SpellbookType type ) + { + Container pack = from.Backpack; + + for ( int i = list.Count - 1; i >= 0; --i ) + { + if ( i >= list.Count ) + continue; + + Spellbook book = list[i]; + + if ( !book.Deleted && (book.Parent == from || (pack != null && book.Parent == pack)) && ValidateSpellbook( book, spellID, type ) ) + return book; + + list.RemoveAt( i ); + } + + return null; + } + + public static List FindAllSpellbooks( Mobile from ) + { + List list = new List(); + + Item item = from.FindItemOnLayer( Layer.OneHanded ); + + if ( item is Spellbook ) + list.Add( (Spellbook)item ); + + Container pack = from.Backpack; + + if ( pack == null ) + return list; + + for ( int i = 0; i < pack.Items.Count; ++i ) + { + item = pack.Items[i]; + + if ( item is Spellbook ) + list.Add( (Spellbook)item ); + } + + return list; + } + + public static Spellbook FindEquippedSpellbook( Mobile from ) + { + return (from.FindItemOnLayer( Layer.OneHanded ) as Spellbook); + } + + public static bool ValidateSpellbook( Spellbook book, int spellID, SpellbookType type ) + { + return ( book.SpellbookType == type && ( spellID == -1 || book.HasSpell( spellID ) ) ); + } + + public override bool DisplayWeight { get { return false; } } + + public virtual SpellbookType SpellbookType{ get{ return SpellbookType.Regular; } } + public virtual int BookOffset{ get{ return 0; } } + public virtual int BookCount{ get{ return 64; } } + + private ulong m_Content; + private int m_Count; + + public override bool CanEquip( Mobile from ) + { + if ( !from.CanBeginAction( typeof( BaseWeapon ) ) ) + { + return false; + } + + return base.CanEquip( from ); + } + + public override bool AllowEquipedCast( Mobile from ) + { + return true; + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( dropped is SpellScroll && dropped.Amount == 1 ) + { + SpellScroll scroll = (SpellScroll)dropped; + + SpellbookType type = GetTypeForSpell( scroll.SpellID ); + + if ( type != this.SpellbookType ) + { + return false; + } + else if ( HasSpell( scroll.SpellID ) ) + { + from.SendLocalizedMessage( 500179 ); // That spell is already present in that spellbook. + return false; + } + else + { + int val = scroll.SpellID - BookOffset; + + if ( val >= 0 && val < BookCount ) + { + m_Content |= (ulong)1 << val; + ++m_Count; + + InvalidateProperties(); + + scroll.Delete(); + + from.Send( new PlaySound( 0x249, GetWorldLocation() ) ); + return true; + } + + return false; + } + } + else + { + return false; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public ulong Content + { + get + { + return m_Content; + } + set + { + if ( m_Content != value ) + { + m_Content = value; + + m_Count = 0; + + while ( value > 0 ) + { + m_Count += (int)(value & 0x1); + value >>= 1; + } + + InvalidateProperties(); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int SpellCount + { + get + { + return m_Count; + } + } + + [Constructable] + public Spellbook() : this( (ulong)0 ) + { + } + + [Constructable] + public Spellbook( ulong content ) : this( content, 0xEFA ) + { + } + + public Spellbook( ulong content, int itemID ) : base( itemID ) + { + Weight = 3.0; + Layer = Layer.OneHanded; + + Content = content; + } + + public override void OnAfterDuped( Item newItem ) + { + Spellbook book = newItem as Spellbook; + + if ( book == null ) + return; + } + + public override void OnAdded( object parent ) + { + } + + public override void OnRemoved( object parent ) + { + } + + public bool HasSpell( int spellID ) + { + spellID -= BookOffset; + + return ( spellID >= 0 && spellID < BookCount && (m_Content & ((ulong)1 << spellID)) != 0 ); + } + + public Spellbook( Serial serial ) : base( serial ) + { + } + + public void DisplayTo( Mobile to ) + { + // The client must know about the spellbook or it will crash! + + NetState ns = to.NetState; + + if ( ns == null ) + return; + + if ( Parent == null ) + { + to.Send( this.WorldPacket ); + } + else if ( Parent is Item ) + { + // What will happen if the client doesn't know about our parent? + if ( ns.ContainerGridLines ) + to.Send( new ContainerContentUpdate6017( this ) ); + else + to.Send( new ContainerContentUpdate( this ) ); + } + else if ( Parent is Mobile ) + { + // What will happen if the client doesn't know about our parent? + to.Send( new EquipUpdate( this ) ); + } + + to.Send( new DisplaySpellbook( this ) ); + + if ( ns.ContainerGridLines ) { + to.Send( new SpellbookContent6017( m_Count, BookOffset + 1, m_Content, this ) ); + } else { + to.Send( new SpellbookContent( m_Count, BookOffset + 1, m_Content, this ) ); + } + } + + private Mobile m_Crafter; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile Crafter + { + get{ return m_Crafter; } + set{ m_Crafter = value; InvalidateProperties(); } + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + + if ( m_Crafter != null ) + list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~ + + if( m_Slayer != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer ); + if( entry != null ) + list.Add( entry.Title ); + } + + if( m_Slayer2 != SlayerName.None ) + { + SlayerEntry entry = SlayerGroup.GetEntryByName( m_Slayer2 ); + if( entry != null ) + list.Add( entry.Title ); + } + + list.Add( 1042886, m_Count.ToString() ); // ~1_NUMBERS_OF_SPELLS~ Spells + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( m_Crafter != null ) + this.LabelTo( from, 1050043, m_Crafter.Name ); // crafted by ~1_NAME~ + + this.LabelTo( from, 1042886, m_Count.ToString() ); + } + + public override void OnDoubleClick( Mobile from ) + { + Container pack = from.Backpack; + + if ( Parent == from || ( pack != null && Parent == pack ) ) + DisplayTo( from ); + else + from.SendLocalizedMessage( 500207 ); // The spellbook must be in your backpack (and not in a container within) to open. + } + + + private SlayerName m_Slayer; + private SlayerName m_Slayer2; + //Currently though there are no dual slayer spellbooks, OSI has a habit of putting dual slayer stuff in later + + [CommandProperty( AccessLevel.GameMaster )] + public SlayerName Slayer + { + get { return m_Slayer; } + set { m_Slayer = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public SlayerName Slayer2 + { + get { return m_Slayer2; } + set { m_Slayer2 = value; InvalidateProperties(); } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 3 ); // version + writer.Write( m_Crafter ); + + writer.Write( (int)m_Slayer ); + writer.Write( (int)m_Slayer2 ); + + writer.Write( m_Content ); + writer.Write( m_Count ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 3: + { + m_Crafter = reader.ReadMobile(); + goto case 2; + } + case 2: + { + m_Slayer = (SlayerName)reader.ReadInt(); + m_Slayer2 = (SlayerName)reader.ReadInt(); + goto case 1; + } + case 1: + { + goto case 0; + } + case 0: + { + m_Content = reader.ReadULong(); + m_Count = reader.ReadInt(); + + break; + } + } + + if ( Parent is Mobile ) + ((Mobile)Parent).CheckStatTimers(); + } + + public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) + { + if ( makersMark ) + Crafter = from; + + return quality; + } + } +} \ No newline at end of file diff --git a/Scripts/Targets/BladedItemTarget.cs b/Scripts/Targets/BladedItemTarget.cs new file mode 100644 index 0000000..36582e2 --- /dev/null +++ b/Scripts/Targets/BladedItemTarget.cs @@ -0,0 +1,165 @@ +using System; +using Server; +using Server.Targeting; +using Server.Items; +using Server.Engines.Harvest; +using Server.Mobiles; + +namespace Server.Targets +{ + public class BladedItemTarget : Target + { + private Item m_Item; + + public BladedItemTarget( Item item ) : base( 2, false, TargetFlags.None ) + { + m_Item = item; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if ( m_Item.Deleted ) + return; + + if ( targeted is ICarvable ) + { + ((ICarvable)targeted).Carve( from, m_Item ); + } + else + { + HarvestSystem system = Lumberjacking.System; + HarvestDefinition def = Lumberjacking.System.Definition; + + int tileID; + Map map; + Point3D loc; + + if ( !system.GetHarvestDetails( from, m_Item, targeted, out tileID, out map, out loc ) ) + { + from.SendLocalizedMessage( 500494 ); // You can't use a bladed item on that! + } + else if ( !def.Validate( tileID ) ) + { + from.SendLocalizedMessage( 500494 ); // You can't use a bladed item on that! + } + else + { + HarvestBank bank = def.GetBank( map, loc.X, loc.Y ); + + if ( bank == null ) + return; + + if ( bank.Current < 5 ) + { + from.SendLocalizedMessage( 500493 ); // There's not enough wood here to harvest. + } + else + { + bank.Consume( 5, from ); + + if ( tileID == 0x4D96 || tileID == 0x4D9A ) // apples + { + Item item = new Apple(); + + if ( from.PlaceInBackpack( item ) ) + { + from.SendMessage( "You put an apple into your backpack." ); + } + else + { + from.SendMessage( "You can't place any apples into your backpack!" ); + item.Delete(); + } + } + else if ( tileID == 0x4DA6 || tileID == 0x4DAA ) // pears + { + Item item = new Pear(); + + if ( from.PlaceInBackpack( item ) ) + { + from.SendMessage( "You put a pear into your backpack." ); + } + else + { + from.SendMessage( "You can't place any pears into your backpack!" ); + item.Delete(); + } + } + else if ( tileID == 0x4D9E || tileID == 0x4DA2 ) // peaches + { + Item item = new Peach(); + + if ( from.PlaceInBackpack( item ) ) + { + from.SendMessage( "You put a peach into your backpack." ); + } + else + { + from.SendMessage( "You can't place any peaches into your backpack!" ); + item.Delete(); + } + } + else if ( tileID == 0x4CA8 || tileID == 0x4CAA || tileID == 0x4CAB ) // bananas + { + Item item = new Banana(); + + if ( from.PlaceInBackpack( item ) ) + { + from.SendMessage( "You put a banana into your backpack." ); + } + else + { + from.SendMessage( "You can't place any bananas into your backpack!" ); + item.Delete(); + } + } + else if ( tileID == 0x4C95 ) // coconut + { + Item item = new Coconut(); + + if ( from.PlaceInBackpack( item ) ) + { + from.SendMessage( "You put a coconut into your backpack." ); + } + else + { + from.SendMessage( "You can't place any coconuts into your backpack!" ); + item.Delete(); + } + } + else if ( tileID == 0x4C96 ) // dates + { + Item item = new Dates(); + + if ( from.PlaceInBackpack( item ) ) + { + from.SendMessage( "You put some dates into your backpack." ); + } + else + { + from.SendMessage( "You can't place any dates into your backpack!" ); + item.Delete(); + } + } + else + { + Item item = new Kindling(); + + if ( from.PlaceInBackpack( item ) ) + { + from.SendLocalizedMessage( 500491 ); // You put some kindling into your backpack. + from.SendLocalizedMessage( 500492 ); // An axe would probably get you more wood. + } + else + { + from.SendLocalizedMessage( 500490 ); // You can't place any kindling into your backpack! + + item.Delete(); + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Targets/MoveTarget.cs b/Scripts/Targets/MoveTarget.cs new file mode 100644 index 0000000..08d76eb --- /dev/null +++ b/Scripts/Targets/MoveTarget.cs @@ -0,0 +1,52 @@ +using System; +using Server; +using Server.Targeting; +using Server.Commands; +using Server.Commands.Generic; + +namespace Server.Targets +{ + public class MoveTarget : Target + { + private object m_Object; + + public MoveTarget( object o ) : base( -1, true, TargetFlags.None ) + { + m_Object = o; + } + + protected override void OnTarget( Mobile from, object o ) + { + IPoint3D p = o as IPoint3D; + + if ( p != null ) + { + if ( !BaseCommand.IsAccessible( from, m_Object ) ) + { + from.SendMessage( "That is not accessible." ); + return; + } + + if ( p is Item ) + p = ((Item)p).GetWorldTop(); + + CommandLogging.WriteLine( from, "{0} {1} moving {2} to {3}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( m_Object ), new Point3D( p ) ); + + if ( m_Object is Item ) + { + Item item = (Item)m_Object; + + if ( !item.Deleted ) + item.MoveToWorld( new Point3D( p ), from.Map ); + } + else if ( m_Object is Mobile ) + { + Mobile m = (Mobile)m_Object; + + if ( !m.Deleted ) + m.MoveToWorld( new Point3D( p ), from.Map ); + } + } + } + } +} \ No newline at end of file diff --git a/Scripts/Targets/PickMoveTarget.cs b/Scripts/Targets/PickMoveTarget.cs new file mode 100644 index 0000000..0b0441b --- /dev/null +++ b/Scripts/Targets/PickMoveTarget.cs @@ -0,0 +1,27 @@ +using System; +using Server; +using Server.Targeting; +using Server.Commands; +using Server.Commands.Generic; + +namespace Server.Targets +{ + public class PickMoveTarget : Target + { + public PickMoveTarget() : base( -1, false, TargetFlags.None ) + { + } + + protected override void OnTarget( Mobile from, object o ) + { + if ( !BaseCommand.IsAccessible( from, o ) ) + { + from.SendMessage( "That is not accessible." ); + return; + } + + if ( o is Item || o is Mobile ) + from.Target = new MoveTarget( o ); + } + } +} \ No newline at end of file diff --git a/Scripts/_QuestButtonGump.cs b/Scripts/_QuestButtonGump.cs new file mode 100644 index 0000000..9ebde1e --- /dev/null +++ b/Scripts/_QuestButtonGump.cs @@ -0,0 +1,50 @@ +using System; +using Server; +using Server.Gumps; +using Server.Network; +using Server.Mobiles; + +namespace Server.Engines.Quests +{ + public class QuestButton + { + public static void Initialize() + { + EventSink.QuestGumpRequest += new QuestGumpRequestHandler( EventSink_QuestGumpRequest ); + } + + public static void EventSink_QuestGumpRequest( QuestGumpRequestArgs e ) + { + Mobile from = e.Mobile; + from.CloseGump( typeof( TempGump ) ); + from.SendGump( new TempGump( from ) ); + } + } + + public class TempGump : Gump + { + public TempGump( Mobile m ) : base( 10, 10 ) + { + this.Closable=true; + this.Disposable=true; + this.Dragable=true; + this.Resizable=false; + + AddPage(0); + AddImage(30, 5, 12105); + AddImage(0, 0, 12104); + + + AddImage(750, 166, 12106); + AddHtml( 765, 166, 200, 48, @"Covetous", (bool)false, (bool)false); + + + + // divide by 4 or 25% + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + } + } +} \ No newline at end of file diff --git a/Source/AggressorInfo.cs b/Source/AggressorInfo.cs new file mode 100644 index 0000000..0fd7112 --- /dev/null +++ b/Source/AggressorInfo.cs @@ -0,0 +1,212 @@ +/*************************************************************************** + * AggressorInfo.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; + +namespace Server +{ + public class AggressorInfo + { + private Mobile m_Attacker, m_Defender; + private DateTime m_LastCombatTime; + private bool m_CanReportMurder; + private bool m_Reported; + private bool m_CriminalAggression; + + private bool m_Queued; + + private static Queue m_Pool = new Queue(); + + public static AggressorInfo Create( Mobile attacker, Mobile defender, bool criminal ) + { + AggressorInfo info; + + if ( m_Pool.Count > 0 ) + { + info = m_Pool.Dequeue(); + + info.m_Attacker = attacker; + info.m_Defender = defender; + + info.m_CanReportMurder = criminal; + info.m_CriminalAggression = criminal; + + info.m_Queued = false; + + info.Refresh(); + } + else + { + info = new AggressorInfo( attacker, defender, criminal ); + } + + return info; + } + + public void Free() + { + if ( m_Queued ) + return; + + m_Queued = true; + m_Pool.Enqueue( this ); + } + + private AggressorInfo( Mobile attacker, Mobile defender, bool criminal ) + { + m_Attacker = attacker; + m_Defender = defender; + + m_CanReportMurder = criminal; + m_CriminalAggression = criminal; + + Refresh(); + } + + private static TimeSpan m_ExpireDelay = TimeSpan.FromMinutes( 2.0 ); + + public static TimeSpan ExpireDelay + { + get{ return m_ExpireDelay; } + set{ m_ExpireDelay = value; } + } + + public static void DumpAccess() + { + using ( StreamWriter op = new StreamWriter( "warnings.log", true ) ) + { + op.WriteLine( "Warning: Access to queued AggressorInfo:" ); + op.WriteLine( new System.Diagnostics.StackTrace() ); + op.WriteLine(); + op.WriteLine(); + } + } + + public bool Expired + { + get + { + if ( m_Queued ) + DumpAccess(); + + return ( m_Attacker.Deleted || m_Defender.Deleted || DateTime.Now >= (m_LastCombatTime + m_ExpireDelay) ); + } + } + + public bool CriminalAggression + { + get + { + if ( m_Queued ) + DumpAccess(); + + return m_CriminalAggression; + } + set + { + if ( m_Queued ) + DumpAccess(); + + m_CriminalAggression = value; + } + } + + public Mobile Attacker + { + get + { + if ( m_Queued ) + DumpAccess(); + + return m_Attacker; + } + } + + public Mobile Defender + { + get + { + if ( m_Queued ) + DumpAccess(); + + return m_Defender; + } + } + + public DateTime LastCombatTime + { + get + { + if ( m_Queued ) + DumpAccess(); + + return m_LastCombatTime; + } + } + + public bool Reported + { + get + { + if ( m_Queued ) + DumpAccess(); + + return m_Reported; + } + set + { + if ( m_Queued ) + DumpAccess(); + + m_Reported = value; + } + } + + public bool CanReportMurder + { + get + { + if ( m_Queued ) + DumpAccess(); + + return m_CanReportMurder; + } + set + { + if ( m_Queued ) + DumpAccess(); + + m_CanReportMurder = value; + } + } + + public void Refresh() + { + if ( m_Queued ) + DumpAccess(); + + m_LastCombatTime = DateTime.Now; + m_Reported = false; + } + } +} \ No newline at end of file diff --git a/Source/AssemblyInfo.cs b/Source/AssemblyInfo.cs new file mode 100644 index 0000000..a557f36 --- /dev/null +++ b/Source/AssemblyInfo.cs @@ -0,0 +1,81 @@ +/*************************************************************************** + * AssemblyInfo.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("Ultima Server")] //Having just RunUO there is reundant, ie, RunUO.exe with the word 'RunUO' under it +[assembly: AssemblyDescription("World of Adventure")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("2.1.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] + +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/Source/Attributes.cs b/Source/Attributes.cs new file mode 100644 index 0000000..d27d4ce --- /dev/null +++ b/Source/Attributes.cs @@ -0,0 +1,224 @@ +/*************************************************************************** + * Attributes.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace Server +{ + [AttributeUsage( AttributeTargets.Property )] + public class HueAttribute : Attribute + { + public HueAttribute() + { + } + } + + [AttributeUsage( AttributeTargets.Property )] + public class BodyAttribute : Attribute + { + public BodyAttribute() + { + } + } + + [AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct )] + public class PropertyObjectAttribute : Attribute + { + public PropertyObjectAttribute() + { + } + } + + [AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct )] + public class NoSortAttribute : Attribute + { + public NoSortAttribute() + { + } + } + + [AttributeUsage( AttributeTargets.Method )] + public class CallPriorityAttribute : Attribute + { + private int m_Priority; + + public int Priority + { + get{ return m_Priority; } + set{ m_Priority = value; } + } + + public CallPriorityAttribute( int priority ) + { + m_Priority = priority; + } + } + + public class CallPriorityComparer : IComparer + { + public int Compare( MethodInfo x, MethodInfo y ) + { + if ( x == null && y == null ) + return 0; + + if ( x == null ) + return 1; + + if ( y == null ) + return -1; + + return GetPriority( x ) - GetPriority( y ); + } + + private int GetPriority( MethodInfo mi ) + { + object[] objs = mi.GetCustomAttributes( typeof( CallPriorityAttribute ), true ); + + if ( objs == null ) + return 0; + + if ( objs.Length == 0 ) + return 0; + + CallPriorityAttribute attr = objs[0] as CallPriorityAttribute; + + if ( attr == null ) + return 0; + + return attr.Priority; + } + } + + [AttributeUsage( AttributeTargets.Class )] + public class TypeAliasAttribute : Attribute + { + private string[] m_Aliases; + + public string[] Aliases + { + get + { + return m_Aliases; + } + } + + public TypeAliasAttribute( params string[] aliases ) + { + m_Aliases = aliases; + } + } + + [AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct )] + public class ParsableAttribute : Attribute + { + public ParsableAttribute() + { + } + } + + [AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum )] + public class CustomEnumAttribute : Attribute + { + private string[] m_Names; + + public string[] Names + { + get + { + return m_Names; + } + } + + public CustomEnumAttribute( string[] names ) + { + m_Names = names; + } + } + + [AttributeUsage( AttributeTargets.Constructor )] + public class ConstructableAttribute : Attribute + { + private AccessLevel m_AccessLevel; + + public AccessLevel AccessLevel + { + get { return m_AccessLevel; } + set { m_AccessLevel = value; } + } + + public ConstructableAttribute() : this( AccessLevel.Player ) //Lowest accesslevel for current functionality (Level determined by access to [add) + { + } + + public ConstructableAttribute( AccessLevel accessLevel ) + { + m_AccessLevel = accessLevel; + } + } + + [AttributeUsage( AttributeTargets.Property )] + public class CommandPropertyAttribute : Attribute + { + private AccessLevel m_ReadLevel, m_WriteLevel; + private bool m_ReadOnly; + + public AccessLevel ReadLevel + { + get + { + return m_ReadLevel; + } + } + + public AccessLevel WriteLevel + { + get + { + return m_WriteLevel; + } + } + + public bool ReadOnly + { + get + { + return m_ReadOnly; + } + } + + public CommandPropertyAttribute( AccessLevel level, bool readOnly ) + { + m_ReadLevel = level; + m_ReadOnly = readOnly; + } + + public CommandPropertyAttribute( AccessLevel level ) : this( level, level ) + { + } + + public CommandPropertyAttribute( AccessLevel readLevel, AccessLevel writeLevel ) + { + m_ReadLevel = readLevel; + m_WriteLevel = writeLevel; + } + } +} diff --git a/Source/BaseVendor.cs b/Source/BaseVendor.cs new file mode 100644 index 0000000..e85e2a6 --- /dev/null +++ b/Source/BaseVendor.cs @@ -0,0 +1,214 @@ +/*************************************************************************** + * BaseVendor.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using Server.Items; +using Server.Network; +using Server.ContextMenus; +using Server.Mobiles; +using System.Collections.Generic; + +namespace Server.Mobiles +{ + public class BuyItemStateComparer : IComparer + { + public int Compare( BuyItemState l, BuyItemState r ) + { + if ( l == null && r == null ) return 0; + if ( l == null ) return -1; + if ( r == null ) return 1; + + return l.MySerial.CompareTo( r.MySerial ); + } + } + + public class BuyItemResponse + { + private Serial m_Serial; + private int m_Amount; + + public BuyItemResponse( Serial serial, int amount ) + { + m_Serial = serial; + m_Amount = amount; + } + + public Serial Serial + { + get + { + return m_Serial; + } + } + + public int Amount + { + get + { + return m_Amount; + } + } + } + + public class SellItemResponse + { + private Item m_Item; + private int m_Amount; + + public SellItemResponse( Item i, int amount ) + { + m_Item = i; + m_Amount = amount; + } + + public Item Item + { + get + { + return m_Item; + } + } + + public int Amount + { + get + { + return m_Amount; + } + } + } + + public class SellItemState + { + private Item m_Item; + private int m_Price; + private string m_Name; + + public SellItemState( Item item, int price, string name ) + { + m_Item = item; + m_Price = price; + m_Name = name; + } + + public Item Item + { + get + { + return m_Item; + } + } + + public int Price + { + get + { + return m_Price; + } + } + + public string Name + { + get + { + return m_Name; + } + } + } + + public class BuyItemState + { + private Serial m_ContSer; + private Serial m_MySer; + private int m_ItemID; + private int m_Amount; + private int m_Hue; + private int m_Price; + private string m_Desc; + + public BuyItemState( string name, Serial cont, Serial serial, int price, int amount, int itemID, int hue ) + { + m_Desc = name; + m_ContSer = cont; + m_MySer = serial; + m_Price = price; + m_Amount = amount; + m_ItemID = itemID; + m_Hue = hue; + } + + public int Price + { + get + { + return m_Price; + } + } + + public Serial MySerial + { + get + { + return m_MySer; + } + } + + public Serial ContainerSerial + { + get + { + return m_ContSer; + } + } + + public int ItemID + { + get + { + return m_ItemID; + } + } + + public int Amount + { + get + { + return m_Amount; + } + } + + public int Hue + { + get + { + return m_Hue; + } + } + + public string Description + { + get + { + return m_Desc; + } + } + } +} diff --git a/Source/Body.cs b/Source/Body.cs new file mode 100644 index 0000000..c107253 --- /dev/null +++ b/Source/Body.cs @@ -0,0 +1,269 @@ +/*************************************************************************** + * Body.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; + +namespace Server +{ + public enum BodyType : byte + { + Empty, + Monster, + Sea, + Animal, + Human, + Equipment + } + + public struct Body + { + private int m_BodyID; + + private static BodyType[] m_Types; + + static Body() + { + if ( File.Exists( "Data/Config/bodyTable.cfg" ) ) + { + using ( StreamReader ip = new StreamReader( "Data/Config/bodyTable.cfg" ) ) + { + m_Types = new BodyType[1000]; + + string line; + + while ( (line = ip.ReadLine()) != null ) + { + if ( line.Length == 0 || line.StartsWith( "#" ) ) + continue; + + string[] split = line.Split( '\t' ); + + try + { + int bodyID = int.Parse( split[0] ); + BodyType type = (BodyType)Enum.Parse( typeof( BodyType ), split[1], true ); + + if ( bodyID >= 0 && bodyID < m_Types.Length ) + m_Types[bodyID] = type; + } + catch + { + Console.WriteLine( "Warning: Invalid bodyTable entry:" ); + Console.WriteLine( line ); + } + } + } + } + else + { + Console.WriteLine( "Warning: Data/Config/bodyTable.cfg does not exist" ); + + m_Types = new BodyType[0]; + } + } + + public Body( int bodyID ) + { + m_BodyID = bodyID; + } + + public BodyType Type + { + get + { + if ( m_BodyID >= 0 && m_BodyID < m_Types.Length ) + return m_Types[m_BodyID]; + else + return BodyType.Empty; + } + } + + public bool IsHuman + { + get + { + return m_BodyID >= 0 + && m_BodyID < m_Types.Length + && m_Types[m_BodyID] == BodyType.Human + && m_BodyID != 402 + && m_BodyID != 403 + && m_BodyID != 607 + && m_BodyID != 608 + && m_BodyID != 970; + } + } + + public bool IsMale + { + get + { + return m_BodyID == 183 + || m_BodyID == 185 + || m_BodyID == 400 + || m_BodyID == 402 + || m_BodyID == 605 + || m_BodyID == 607 + || m_BodyID == 750; + } + } + + public bool IsFemale + { + get + { + return m_BodyID == 184 + || m_BodyID == 186 + || m_BodyID == 401 + || m_BodyID == 403 + || m_BodyID == 606 + || m_BodyID == 608 + || m_BodyID == 751; + } + } + + public bool IsGhost + { + get + { + return m_BodyID == 402 + || m_BodyID == 403 + || m_BodyID == 607 + || m_BodyID == 608 + || m_BodyID == 970; + } + } + + public bool IsMonster + { + get + { + return m_BodyID >= 0 + && m_BodyID < m_Types.Length + && m_Types[m_BodyID] == BodyType.Monster; + } + } + + public bool IsAnimal + { + get + { + return m_BodyID >= 0 + && m_BodyID < m_Types.Length + && m_Types[m_BodyID] == BodyType.Animal; + } + } + + public bool IsEmpty + { + get + { + return m_BodyID >= 0 + && m_BodyID < m_Types.Length + && m_Types[m_BodyID] == BodyType.Empty; + } + } + + public bool IsSea + { + get + { + return m_BodyID >= 0 + && m_BodyID < m_Types.Length + && m_Types[m_BodyID] == BodyType.Sea; + } + } + + public bool IsEquipment + { + get + { + return m_BodyID >= 0 + && m_BodyID < m_Types.Length + && m_Types[m_BodyID] == BodyType.Equipment; + } + } + + public int BodyID + { + get + { + return m_BodyID; + } + } + + public static implicit operator int( Body a ) + { + return a.m_BodyID; + } + + public static implicit operator Body( int a ) + { + return new Body( a ); + } + + public override string ToString() + { + return string.Format( "0x{0:X}", m_BodyID ); + } + + public override int GetHashCode() + { + return m_BodyID; + } + + public override bool Equals( object o ) + { + if ( o == null || !(o is Body) ) return false; + + return ((Body)o).m_BodyID == m_BodyID; + } + + public static bool operator == ( Body l, Body r ) + { + return l.m_BodyID == r.m_BodyID; + } + + public static bool operator != ( Body l, Body r ) + { + return l.m_BodyID != r.m_BodyID; + } + + public static bool operator > ( Body l, Body r ) + { + return l.m_BodyID > r.m_BodyID; + } + + public static bool operator >= ( Body l, Body r ) + { + return l.m_BodyID >= r.m_BodyID; + } + + public static bool operator < ( Body l, Body r ) + { + return l.m_BodyID < r.m_BodyID; + } + + public static bool operator <= ( Body l, Body r ) + { + return l.m_BodyID <= r.m_BodyID; + } + } +} \ No newline at end of file diff --git a/Source/ClientVersion.cs b/Source/ClientVersion.cs new file mode 100644 index 0000000..d580f77 --- /dev/null +++ b/Source/ClientVersion.cs @@ -0,0 +1,300 @@ +/*************************************************************************** + * ClientVersion.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Text; +using System.Collections; + +namespace Server +{ + public enum ClientType + { + Regular, + UOTD, + God, + SA + } + + public class ClientVersion : IComparable, IComparer + { + private int m_Major, m_Minor, m_Revision, m_Patch; + private ClientType m_Type; + private string m_SourceString; + + public int Major + { + get + { + return m_Major; + } + } + + public int Minor + { + get + { + return m_Minor; + } + } + + public int Revision + { + get + { + return m_Revision; + } + } + + public int Patch + { + get + { + return m_Patch; + } + } + + public ClientType Type + { + get + { + return m_Type; + } + } + + public string SourceString + { + get + { + return m_SourceString; + } + } + + public ClientVersion( int maj, int min, int rev, int pat ) : this( maj, min, rev, pat, ClientType.Regular ) + { + } + + public ClientVersion( int maj, int min, int rev, int pat, ClientType type ) + { + m_Major = maj; + m_Minor = min; + m_Revision = rev; + m_Patch = pat; + m_Type = type; + + m_SourceString = ToString(); + } + + public static bool operator == ( ClientVersion l, ClientVersion r ) + { + return ( Compare( l, r ) == 0 ); + } + + public static bool operator != ( ClientVersion l, ClientVersion r ) + { + return ( Compare( l, r ) != 0 ); + } + + public static bool operator >= ( ClientVersion l, ClientVersion r ) + { + return ( Compare( l, r ) >= 0 ); + } + + public static bool operator > ( ClientVersion l, ClientVersion r ) + { + return ( Compare( l, r ) > 0 ); + } + + public static bool operator <= ( ClientVersion l, ClientVersion r ) + { + return ( Compare( l, r ) <= 0 ); + } + + public static bool operator < ( ClientVersion l, ClientVersion r ) + { + return ( Compare( l, r ) < 0 ); + } + + public override int GetHashCode() + { + return m_Major ^ m_Minor ^ m_Revision ^ m_Patch ^ (int)m_Type; + } + + public override bool Equals( object obj ) + { + if ( obj == null ) + return false; + + ClientVersion v = obj as ClientVersion; + + if ( v == null ) + return false; + + return m_Major == v.m_Major + && m_Minor == v.m_Minor + && m_Revision == v.m_Revision + && m_Patch == v.m_Patch + && m_Type == v.m_Type; + } + + public override string ToString() + { + StringBuilder builder = new StringBuilder( 16 ); + + builder.Append( m_Major ); + builder.Append( '.' ); + builder.Append( m_Minor ); + builder.Append( '.' ); + builder.Append( m_Revision ); + + if( m_Major <= 5 && m_Minor <= 0 && m_Revision <= 6 ) //Anything before 5.0.7 + { + if( m_Patch > 0 ) + builder.Append( (char)('a' + (m_Patch - 1)) ); + } + else + { + builder.Append( '.' ); + builder.Append( m_Patch ); + } + + if ( m_Type != ClientType.Regular ) + { + builder.Append( ' ' ); + builder.Append( m_Type.ToString() ); + } + + return builder.ToString(); + } + + public ClientVersion( string fmt ) + { + m_SourceString = fmt; + + try + { + fmt = fmt.ToLower(); + + int br1 = fmt.IndexOf( '.' ); + int br2 = fmt.IndexOf( '.', br1 + 1 ); + + int br3 = br2 + 1; + while ( br3 < fmt.Length && Char.IsDigit( fmt, br3 ) ) + br3++; + + m_Major = Utility.ToInt32( fmt.Substring( 0, br1 ) ); + m_Minor = Utility.ToInt32( fmt.Substring( br1 + 1, br2 - br1 - 1 ) ); + m_Revision = Utility.ToInt32( fmt.Substring( br2 + 1, br3 - br2 - 1 ) ); + + if( br3 < fmt.Length ) + { + if( m_Major <= 5 && m_Minor <= 0 && m_Revision <= 6 ) //Anything before 5.0.7 + { + if( !Char.IsWhiteSpace( fmt, br3 ) ) + m_Patch = (fmt[br3] - 'a') + 1; + } + else + { + m_Patch = Utility.ToInt32( fmt.Substring( br3+1, fmt.Length - br3 - 1 ) ); + } + } + + if ( fmt.IndexOf( "god" ) >= 0 || fmt.IndexOf( "gq" ) >= 0 ) + m_Type = ClientType.God; + else if ( fmt.IndexOf( "third dawn" ) >= 0 || fmt.IndexOf( "uo:td" ) >= 0 || fmt.IndexOf( "uotd" ) >= 0 || fmt.IndexOf( "uo3d" ) >= 0 || fmt.IndexOf( "uo:3d" ) >= 0 ) + m_Type = ClientType.UOTD; + else + m_Type = ClientType.Regular; + } + catch + { + m_Major = 0; + m_Minor = 0; + m_Revision = 0; + m_Patch = 0; + m_Type = ClientType.Regular; + } + } + + public int CompareTo( object obj ) + { + if ( obj == null ) + return 1; + + ClientVersion o = obj as ClientVersion; + + if ( o == null ) + throw new ArgumentException(); + + if ( m_Major > o.m_Major ) + return 1; + else if ( m_Major < o.m_Major ) + return -1; + else if ( m_Minor > o.m_Minor ) + return 1; + else if ( m_Minor < o.m_Minor ) + return -1; + else if ( m_Revision > o.m_Revision ) + return 1; + else if ( m_Revision < o.m_Revision ) + return -1; + else if ( m_Patch > o.m_Patch ) + return 1; + else if ( m_Patch < o.m_Patch ) + return -1; + else + return 0; + } + + public static bool IsNull( object x ) + { + return Object.ReferenceEquals( x, null ); + } + + public int Compare( object x, object y ) + { + if ( IsNull( x ) && IsNull( y ) ) + return 0; + else if ( IsNull( x ) ) + return -1; + else if ( IsNull( y ) ) + return 1; + + ClientVersion a = x as ClientVersion; + ClientVersion b = y as ClientVersion; + + if ( IsNull( a ) || IsNull( b ) ) + throw new ArgumentException(); + + return a.CompareTo( b ); + } + + public static int Compare( ClientVersion a, ClientVersion b ) + { + if ( IsNull( a ) && IsNull( b ) ) + return 0; + else if ( IsNull( a ) ) + return -1; + else if ( IsNull( b ) ) + return 1; + + return a.CompareTo( b ); + } + } +} \ No newline at end of file diff --git a/Source/Commands.cs b/Source/Commands.cs new file mode 100644 index 0000000..c165098 --- /dev/null +++ b/Source/Commands.cs @@ -0,0 +1,347 @@ +/*************************************************************************** + * Commands.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using Server.Guilds; +using Server.Gumps; +using Server.Menus; +using Server.Menus.ItemLists; +using Server.Menus.Questions; +using Server.Network; +using Server.Items; +using Server.Targeting; + +namespace Server.Commands +{ + public delegate void CommandEventHandler( CommandEventArgs e ); + + public class CommandEventArgs : EventArgs + { + private Mobile m_Mobile; + private string m_Command, m_ArgString; + private string[] m_Arguments; + + public Mobile Mobile + { + get + { + return m_Mobile; + } + } + + public string Command + { + get + { + return m_Command; + } + } + + public string ArgString + { + get + { + return m_ArgString; + } + } + + public string[] Arguments + { + get + { + return m_Arguments; + } + } + + public int Length + { + get + { + return m_Arguments.Length; + } + } + + public string GetString( int index ) + { + if ( index < 0 || index >= m_Arguments.Length ) + return ""; + + return m_Arguments[index]; + } + + public int GetInt32( int index ) + { + if ( index < 0 || index >= m_Arguments.Length ) + return 0; + + return Utility.ToInt32( m_Arguments[index] ); + } + + public bool GetBoolean( int index ) + { + if ( index < 0 || index >= m_Arguments.Length ) + return false; + + return Utility.ToBoolean( m_Arguments[index] ); + } + + public double GetDouble( int index ) + { + if ( index < 0 || index >= m_Arguments.Length ) + return 0.0; + + return Utility.ToDouble( m_Arguments[index] ); + } + + public TimeSpan GetTimeSpan( int index ) + { + if ( index < 0 || index >= m_Arguments.Length ) + return TimeSpan.Zero; + + return Utility.ToTimeSpan( m_Arguments[index] ); + } + + public CommandEventArgs( Mobile mobile, string command, string argString, string[] arguments ) + { + m_Mobile = mobile; + m_Command = command; + m_ArgString = argString; + m_Arguments = arguments; + } + } + + public class CommandEntry : IComparable + { + private string m_Command; + private CommandEventHandler m_Handler; + private AccessLevel m_AccessLevel; + + public string Command + { + get + { + return m_Command; + } + } + + public CommandEventHandler Handler + { + get + { + return m_Handler; + } + } + + public AccessLevel AccessLevel + { + get + { + return m_AccessLevel; + } + } + + public CommandEntry( string command, CommandEventHandler handler, AccessLevel accessLevel ) + { + m_Command = command; + m_Handler = handler; + m_AccessLevel = accessLevel; + } + + public int CompareTo( object obj ) + { + if ( obj == this ) + return 0; + else if ( obj == null ) + return 1; + + CommandEntry e = obj as CommandEntry; + + if ( e == null ) + throw new ArgumentException(); + + return m_Command.CompareTo( e.m_Command ); + } + } + + public static class CommandSystem + { + private static string m_Prefix = "["; + + public static string Prefix + { + get + { + return m_Prefix; + } + set + { + m_Prefix = value; + } + } + + public static string[] Split( string value ) + { + char[] array = value.ToCharArray(); + List list = new List(); + + int start = 0, end = 0; + + while ( start < array.Length ) + { + char c = array[start]; + + if ( c == '"' ) + { + ++start; + end = start; + + while ( end < array.Length ) + { + if ( array[end] != '"' || array[end - 1] == '\\' ) + ++end; + else + break; + } + + list.Add( value.Substring( start, end - start ) ); + + start = end + 2; + } + else if ( c != ' ' ) + { + end = start; + + while ( end < array.Length ) + { + if ( array[end] != ' ' ) + ++end; + else + break; + } + + list.Add( value.Substring( start, end - start ) ); + + start = end + 1; + } + else + { + ++start; + } + } + + return list.ToArray(); + } + + private static Dictionary m_Entries; + + public static Dictionary Entries + { + get + { + return m_Entries; + } + } + + static CommandSystem() + { + m_Entries = new Dictionary( StringComparer.OrdinalIgnoreCase ); + } + + public static void Register( string command, AccessLevel access, CommandEventHandler handler ) + { + m_Entries[command] = new CommandEntry( command, handler, access ); + } + + private static AccessLevel m_BadCommandIngoreLevel = AccessLevel.Player; + + public static AccessLevel BadCommandIgnoreLevel{ get{ return m_BadCommandIngoreLevel; } set{ m_BadCommandIngoreLevel = value; } } + + public static bool Handle( Mobile from, string text ) + { + return Handle( from, text, MessageType.Regular ); + } + + public static bool Handle( Mobile from, string text, MessageType type ) + { + if ( text.StartsWith( m_Prefix ) || type == MessageType.Command ) + { + if( type != MessageType.Command ) + text = text.Substring( m_Prefix.Length ); + + int indexOf = text.IndexOf( ' ' ); + + string command; + string[] args; + string argString; + + if ( indexOf >= 0 ) + { + argString = text.Substring( indexOf + 1 ); + + command = text.Substring( 0, indexOf ); + args = Split( argString ); + } + else + { + argString = ""; + command = text.ToLower(); + args = new string[0]; + } + + CommandEntry entry = null; + m_Entries.TryGetValue( command, out entry ); + + if ( entry != null ) + { + if ( from.AccessLevel >= entry.AccessLevel ) + { + if ( entry.Handler != null ) + { + CommandEventArgs e = new CommandEventArgs( from, command, argString, args ); + entry.Handler( e ); + EventSink.InvokeCommand( e ); + } + } + else + { + if ( from.AccessLevel <= m_BadCommandIngoreLevel ) + return false; + + from.SendMessage( "You do not have access to that command." ); + } + } + else + { + if ( from.AccessLevel <= m_BadCommandIngoreLevel ) + return false; + + from.SendMessage( "That is not a valid command." ); + } + + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Source/ContextMenus/ContextMenu.cs b/Source/ContextMenus/ContextMenu.cs new file mode 100644 index 0000000..1c25554 --- /dev/null +++ b/Source/ContextMenus/ContextMenu.cs @@ -0,0 +1,98 @@ +/*************************************************************************** + * ContextMenu.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Server.ContextMenus +{ + /// + /// Represents the state of an active context menu. This includes who opened the menu, the menu's focus object, and a list of entries that the menu is composed of. + /// + /// + public class ContextMenu + { + private Mobile m_From; + private object m_Target; + private ContextMenuEntry[] m_Entries; + + /// + /// Gets the who opened this ContextMenu. + /// + public Mobile From + { + get{ return m_From; } + } + + /// + /// Gets an object of the or for which this ContextMenu is on. + /// + public object Target + { + get{ return m_Target; } + } + + /// + /// Gets the list of entries contained in this ContextMenu. + /// + public ContextMenuEntry[] Entries + { + get{ return m_Entries; } + } + + /// + /// Instantiates a new ContextMenu instance. + /// + /// + /// The who opened this ContextMenu. + /// + /// + /// + /// The or for which this ContextMenu is on. + /// + /// + public ContextMenu( Mobile from, object target ) + { + m_From = from; + m_Target = target; + + List list = new List(); + + if ( target is Mobile ) + { + ((Mobile)target).GetContextMenuEntries( from, list ); + } + else if ( target is Item ) + { + ((Item)target).GetContextMenuEntries( from, list ); + } + + //m_Entries = (ContextMenuEntry[])list.ToArray( typeof( ContextMenuEntry ) ); + + m_Entries = list.ToArray(); + + for ( int i = 0; i < m_Entries.Length; ++i ) + { + m_Entries[i].Owner = this; + } + } + } +} \ No newline at end of file diff --git a/Source/ContextMenus/ContextMenuEntry.cs b/Source/ContextMenus/ContextMenuEntry.cs new file mode 100644 index 0000000..570cadd --- /dev/null +++ b/Source/ContextMenus/ContextMenuEntry.cs @@ -0,0 +1,139 @@ +/*************************************************************************** + * ContextMenuEntry.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server; +using Server.Network; + +namespace Server.ContextMenus +{ + /// + /// Represents a single entry of a context menu. + /// + /// + public class ContextMenuEntry + { + private int m_Number; + private int m_Color; + private bool m_Enabled; + private int m_Range; + private CMEFlags m_Flags; + private ContextMenu m_Owner; + + /// + /// Gets or sets additional flags used in client communication. + /// + public CMEFlags Flags + { + get{ return m_Flags; } + set{ m_Flags = value; } + } + + /// + /// Gets or sets the that owns this entry. + /// + public ContextMenu Owner + { + get{ return m_Owner; } + set{ m_Owner = value; } + } + + /// + /// Gets or sets the localization number containing the name of this entry. + /// + public int Number + { + get{ return m_Number; } + set{ m_Number = value; } + } + + /// + /// Gets or sets the maximum range at which this entry may be used, in tiles. A value of -1 signifies no maximum range. + /// + public int Range + { + get{ return m_Range; } + set{ m_Range = value; } + } + + /// + /// Gets or sets the color for this entry. Format is A1-R5-G5-B5. + /// + public int Color + { + get{ return m_Color; } + set{ m_Color = value; } + } + + /// + /// Gets or sets whether this entry is enabled. When false, the entry will appear in a gray hue and will never be invoked. + /// + public bool Enabled + { + get{ return m_Enabled; } + set{ m_Enabled = value; } + } + + /// + /// Gets a value indicating if non local use of this entry is permitted. + /// + public virtual bool NonLocalUse + { + get{ return false; } + } + + /// + /// Instantiates a new ContextMenuEntry with a given localization number (). No maximum range is used. + /// + /// + /// The localization number containing the name of this entry. + /// + /// + public ContextMenuEntry( int number ) : this( number, -1 ) + { + } + + /// + /// Instantiates a new ContextMenuEntry with a given localization number () and maximum range (). + /// + /// + /// The localization number containing the name of this entry. + /// + /// + /// + /// The maximum range at which this entry can be used. + /// + /// + public ContextMenuEntry( int number, int range ) + { + m_Number = number; + m_Range = range; + m_Enabled = true; + m_Color = 0xFFFF; + } + + /// + /// Overridable. Virtual event invoked when the entry is clicked. + /// + public virtual void OnClick() + { + } + } +} \ No newline at end of file diff --git a/Source/ContextMenus/OpenBackpackEntry.cs b/Source/ContextMenus/OpenBackpackEntry.cs new file mode 100644 index 0000000..3439576 --- /dev/null +++ b/Source/ContextMenus/OpenBackpackEntry.cs @@ -0,0 +1,40 @@ +/*************************************************************************** + * OpenBackpackEntry.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Items; + +namespace Server.ContextMenus +{ + public class OpenBackpackEntry : ContextMenuEntry + { + private Mobile m_Mobile; + + public OpenBackpackEntry( Mobile m ) : base( 6145 ) + { + m_Mobile = m; + } + + public override void OnClick() + { + m_Mobile.Use( m_Mobile.Backpack ); + } + } +} \ No newline at end of file diff --git a/Source/ContextMenus/PaperdollEntry.cs b/Source/ContextMenus/PaperdollEntry.cs new file mode 100644 index 0000000..f890e9a --- /dev/null +++ b/Source/ContextMenus/PaperdollEntry.cs @@ -0,0 +1,40 @@ +/*************************************************************************** + * PaperdollEntry.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.ContextMenus +{ + public class PaperdollEntry : ContextMenuEntry + { + private Mobile m_Mobile; + + public PaperdollEntry( Mobile m ) : base( 6123, 18 ) + { + m_Mobile = m; + } + + public override void OnClick() + { + if ( m_Mobile.CanPaperdollBeOpenedBy( Owner.From ) ) + m_Mobile.DisplayPaperdollTo( Owner.From ); + } + } +} \ No newline at end of file diff --git a/Source/Diagnostics/BaseProfile.cs b/Source/Diagnostics/BaseProfile.cs new file mode 100644 index 0000000..d40a95f --- /dev/null +++ b/Source/Diagnostics/BaseProfile.cs @@ -0,0 +1,112 @@ +/*************************************************************************** + * PacketProfile.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Diagnostics; + +namespace Server.Diagnostics { + public abstract class BaseProfile { + public static void WriteAll( TextWriter op, IEnumerable profiles ) where T : BaseProfile { + List list = new List( profiles ); + + list.Sort( delegate( T a, T b ) { + return -a.TotalTime.CompareTo( b.TotalTime ); + } ); + + foreach ( T prof in list ) { + prof.WriteTo( op ); + op.WriteLine(); + } + } + + private string _name; + + private long _count; + + private TimeSpan _totalTime; + private TimeSpan _peakTime; + + private Stopwatch _stopwatch; + + public string Name { + get { + return _name; + } + } + + public long Count { + get { + return _count; + } + } + + public TimeSpan AverageTime { + get { + return TimeSpan.FromTicks( _totalTime.Ticks / Math.Max( 1, _count ) ); + } + } + + public TimeSpan PeakTime { + get { + return _peakTime; + } + } + + public TimeSpan TotalTime { + get { + return _totalTime; + } + } + + protected BaseProfile( string name ) { + _name = name; + + _stopwatch = new Stopwatch(); + } + + public virtual void Start() { + if ( _stopwatch.IsRunning ) { + _stopwatch.Reset(); + } + + _stopwatch.Start(); + } + + public virtual void Finish() { + TimeSpan elapsed = _stopwatch.Elapsed; + + _totalTime += elapsed; + + if ( elapsed > _peakTime ) { + _peakTime = elapsed; + } + + _count++; + + _stopwatch.Reset(); + } + + public virtual void WriteTo( TextWriter op ) { + op.Write( "{0,-100} {1,12:N0} {2,12:F5} {3,-12:F5} {4,12:F5}", Name, Count, AverageTime.TotalSeconds, PeakTime.TotalSeconds, TotalTime.TotalSeconds ); + } + } +} \ No newline at end of file diff --git a/Source/Diagnostics/GumpProfile.cs b/Source/Diagnostics/GumpProfile.cs new file mode 100644 index 0000000..dc5bee0 --- /dev/null +++ b/Source/Diagnostics/GumpProfile.cs @@ -0,0 +1,53 @@ +/*************************************************************************** + * PacketProfile.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Server.Diagnostics { + public class GumpProfile : BaseProfile { + private static Dictionary _profiles = new Dictionary(); + + public static IEnumerable Profiles { + get { + return _profiles.Values; + } + } + + public static GumpProfile Acquire( Type type ) { + if ( !Core.Profiling ) { + return null; + } + + GumpProfile prof; + + if ( !_profiles.TryGetValue( type, out prof ) ) { + _profiles.Add( type, prof = new GumpProfile( type ) ); + } + + return prof; + } + + public GumpProfile( Type type ) + : base( type.FullName ) { + } + } +} \ No newline at end of file diff --git a/Source/Diagnostics/PacketProfile.cs b/Source/Diagnostics/PacketProfile.cs new file mode 100644 index 0000000..17f76b8 --- /dev/null +++ b/Source/Diagnostics/PacketProfile.cs @@ -0,0 +1,131 @@ +/*************************************************************************** + * PacketProfile.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace Server.Diagnostics { + public abstract class BasePacketProfile : BaseProfile { + private long _totalLength; + + public long TotalLength { + get { + return _totalLength; + } + } + + public double AverageLength { + get { + return ( double ) _totalLength / Math.Max( 1, this.Count ); + } + } + + protected BasePacketProfile(string name) + : base( name ) { + } + + public void Finish( int length ) { + Finish(); + + _totalLength += length; + } + + public override void WriteTo( TextWriter op ) { + base.WriteTo( op ); + + op.Write( "\t{0,12:F2} {1,-12:N0}", AverageLength, TotalLength ); + } + } + + public class PacketSendProfile : BasePacketProfile { + private static Dictionary _profiles = new Dictionary(); + + public static IEnumerable Profiles { + get { + return _profiles.Values; + } + } + + public static PacketSendProfile Acquire( Type type ) { + if ( !Core.Profiling ) { + return null; + } + + PacketSendProfile prof; + + if ( !_profiles.TryGetValue( type, out prof ) ) { + _profiles.Add( type, prof = new PacketSendProfile( type ) ); + } + + return prof; + } + + private long _created; + + public long Created { + get { + return _created; + } + set { + _created = value; + } + } + + public PacketSendProfile( Type type ) + : base( type.FullName ) { + } + + public override void WriteTo( TextWriter op ) { + base.WriteTo( op ); + + op.Write( "\t{0,12:N0}", Created ); + } + } + + public class PacketReceiveProfile : BasePacketProfile { + private static Dictionary _profiles = new Dictionary(); + + public static IEnumerable Profiles { + get { + return _profiles.Values; + } + } + + public static PacketReceiveProfile Acquire( int packetId ) { + if ( !Core.Profiling ) { + return null; + } + + PacketReceiveProfile prof; + + if ( !_profiles.TryGetValue( packetId, out prof ) ) { + _profiles.Add( packetId, prof = new PacketReceiveProfile( packetId ) ); + } + + return prof; + } + + public PacketReceiveProfile( int packetId ) + : base( String.Format( "0x{0:X2}", packetId ) ) { + } + } +} \ No newline at end of file diff --git a/Source/Diagnostics/TargetProfile.cs b/Source/Diagnostics/TargetProfile.cs new file mode 100644 index 0000000..06af35a --- /dev/null +++ b/Source/Diagnostics/TargetProfile.cs @@ -0,0 +1,53 @@ +/*************************************************************************** + * PacketProfile.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Server.Diagnostics { + public class TargetProfile : BaseProfile { + private static Dictionary _profiles = new Dictionary(); + + public static IEnumerable Profiles { + get { + return _profiles.Values; + } + } + + public static TargetProfile Acquire( Type type ) { + if ( !Core.Profiling ) { + return null; + } + + TargetProfile prof; + + if ( !_profiles.TryGetValue( type, out prof ) ) { + _profiles.Add( type, prof = new TargetProfile( type ) ); + } + + return prof; + } + + public TargetProfile( Type type ) + : base( type.FullName ) { + } + } +} \ No newline at end of file diff --git a/Source/Diagnostics/TimerProfile.cs b/Source/Diagnostics/TimerProfile.cs new file mode 100644 index 0000000..ca1ae62 --- /dev/null +++ b/Source/Diagnostics/TimerProfile.cs @@ -0,0 +1,89 @@ +/*************************************************************************** + * PacketProfile.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace Server.Diagnostics { + public class TimerProfile : BaseProfile { + private static Dictionary _profiles = new Dictionary(); + + public static IEnumerable Profiles { + get { + return _profiles.Values; + } + } + + public static TimerProfile Acquire( string name ) { + if ( !Core.Profiling ) { + return null; + } + + TimerProfile prof; + + if ( !_profiles.TryGetValue( name, out prof ) ) { + _profiles.Add( name, prof = new TimerProfile( name ) ); + } + + return prof; + } + + private long _created, _started, _stopped; + + public long Created { + get { + return _created; + } + set { + _created = value; + } + } + + public long Started { + get { + return _started; + } + set { + _started = value; + } + } + + public long Stopped { + get { + return _stopped; + } + set { + _stopped = value; + } + } + + public TimerProfile( string name ) + : base( name ) { + } + + public override void WriteTo( TextWriter op ) { + base.WriteTo( op ); + + op.Write( "\t{0,12:N0} {1,12:N0} {2,-12:N0}", _created, _started, _stopped ); + } + } +} \ No newline at end of file diff --git a/Source/Effects.cs b/Source/Effects.cs new file mode 100644 index 0000000..bc2ac50 --- /dev/null +++ b/Source/Effects.cs @@ -0,0 +1,405 @@ +/*************************************************************************** + * Effects.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using Server.Network; + +namespace Server +{ + public enum EffectLayer + { + Head = 0, + RightHand = 1, + LeftHand = 2, + Waist = 3, + LeftFoot = 4, + RightFoot = 5, + CenterFeet = 7 + } + + public enum ParticleSupportType + { + Full, + Detect, + None + } + + public static class Effects + { + private static ParticleSupportType m_ParticleSupportType = ParticleSupportType.Detect; + + public static ParticleSupportType ParticleSupportType + { + get{ return m_ParticleSupportType; } + set{ m_ParticleSupportType = value; } + } + + public static bool SendParticlesTo( NetState state ) + { + return ( m_ParticleSupportType == ParticleSupportType.Full || (m_ParticleSupportType == ParticleSupportType.Detect && state.IsUOTDClient) ); + } + + public static void PlaySound( IPoint3D p, Map map, int soundID ) + { + if ( soundID <= -1 ) + return; + + if ( map != null ) + { + Packet playSound = null; + + IPooledEnumerable eable = map.GetClientsInRange( new Point3D( p ) ); + + foreach ( NetState state in eable ) + { + state.Mobile.ProcessDelta(); + + if ( playSound == null ) + playSound = Packet.Acquire( new PlaySound( soundID, p ) ); + + state.Send( playSound ); + } + + Packet.Release( playSound ); + + eable.Free(); + } + } + + public static void SendBoltEffect( IEntity e ) + { + SendBoltEffect( e, true, 0 ); + } + + public static void SendBoltEffect( IEntity e, bool sound ) + { + SendBoltEffect( e, sound, 0 ); + } + + public static void SendBoltEffect( IEntity e, bool sound, int hue ) + { + Map map = e.Map; + + if ( map == null ) + return; + + e.ProcessDelta(); + + Packet preEffect = null, boltEffect = null, playSound = null; + + IPooledEnumerable eable = map.GetClientsInRange( e.Location ); + + foreach ( NetState state in eable ) + { + if ( state.Mobile.CanSee( e ) ) + { + if ( SendParticlesTo( state ) ) + { + if ( preEffect == null ) + preEffect = Packet.Acquire( new TargetParticleEffect( e, 0, 10, 5, 0, 0, 5031, 3, 0 ) ); + + state.Send( preEffect ); + } + + if ( boltEffect == null ) + boltEffect = Packet.Acquire( new BoltEffect( e, hue ) ); + + state.Send( boltEffect ); + + if ( sound ) + { + if ( playSound == null ) + playSound = Packet.Acquire( new PlaySound( 0x29, e ) ); + + state.Send( playSound ); + } + } + } + + Packet.Release( preEffect ); + Packet.Release( boltEffect ); + Packet.Release( playSound ); + + eable.Free(); + } + + public static void SendLocationEffect( IPoint3D p, Map map, int itemID, int duration ) + { + SendLocationEffect( p, map, itemID, duration, 10, 0, 0 ); + } + + public static void SendLocationEffect( IPoint3D p, Map map, int itemID, int duration, int speed ) + { + SendLocationEffect( p, map, itemID, duration, speed, 0, 0 ); + } + + public static void SendLocationEffect( IPoint3D p, Map map, int itemID, int duration, int hue, int renderMode ) + { + SendLocationEffect( p, map, itemID, duration, 10, hue, renderMode ); + } + + public static void SendLocationEffect( IPoint3D p, Map map, int itemID, int duration, int speed, int hue, int renderMode ) + { + SendPacket( p, map, new LocationEffect( p, itemID, speed, duration, hue, renderMode ) ); + } + + public static void SendLocationParticles( IEntity e, int itemID, int speed, int duration, int effect ) + { + SendLocationParticles( e, itemID, speed, duration, 0, 0, effect, 0 ); + } + + public static void SendLocationParticles( IEntity e, int itemID, int speed, int duration, int effect, int unknown ) + { + SendLocationParticles( e, itemID, speed, duration, 0, 0, effect, unknown ); + } + + public static void SendLocationParticles( IEntity e, int itemID, int speed, int duration, int hue, int renderMode, int effect, int unknown ) + { + Map map = e.Map; + + if ( map != null ) + { + Packet particles = null, regular = null; + + IPooledEnumerable eable = map.GetClientsInRange( e.Location ); + + foreach ( NetState state in eable ) + { + state.Mobile.ProcessDelta(); + + if ( SendParticlesTo( state ) ) + { + if ( particles == null ) + particles = Packet.Acquire( new LocationParticleEffect( e, itemID, speed, duration, hue, renderMode, effect, unknown ) ); + + state.Send( particles ); + } + else if ( itemID != 0 ) + { + if ( regular == null ) + regular = Packet.Acquire( new LocationEffect( e, itemID, speed, duration, hue, renderMode ) ); + + state.Send( regular ); + } + } + + Packet.Release( particles ); + Packet.Release( regular ); + + eable.Free(); + } + //SendPacket( e.Location, e.Map, new LocationParticleEffect( e, itemID, speed, duration, hue, renderMode, effect, unknown ) ); + } + + public static void SendTargetEffect( IEntity target, int itemID, int duration ) + { + SendTargetEffect( target, itemID, duration, 0, 0 ); + } + + public static void SendTargetEffect( IEntity target, int itemID, int speed, int duration ) + { + SendTargetEffect( target, itemID, speed, duration, 0, 0 ); + } + + public static void SendTargetEffect( IEntity target, int itemID, int duration, int hue, int renderMode ) + { + SendTargetEffect( target, itemID, 10, duration, hue, renderMode ); + } + + public static void SendTargetEffect( IEntity target, int itemID, int speed, int duration, int hue, int renderMode ) + { + if ( target is Mobile ) + ((Mobile)target).ProcessDelta(); + + SendPacket( target.Location, target.Map, new TargetEffect( target, itemID, speed, duration, hue, renderMode ) ); + } + + public static void SendTargetParticles( IEntity target, int itemID, int speed, int duration, int effect, EffectLayer layer ) + { + SendTargetParticles( target, itemID, speed, duration, 0, 0, effect, layer, 0 ); + } + + public static void SendTargetParticles( IEntity target, int itemID, int speed, int duration, int effect, EffectLayer layer, int unknown ) + { + SendTargetParticles( target, itemID, speed, duration, 0, 0, effect, layer, unknown ); + } + + public static void SendTargetParticles( IEntity target, int itemID, int speed, int duration, int hue, int renderMode, int effect, EffectLayer layer, int unknown ) + { + if ( target is Mobile ) + ((Mobile)target).ProcessDelta(); + + Map map = target.Map; + + if ( map != null ) + { + Packet particles = null, regular = null; + + IPooledEnumerable eable = map.GetClientsInRange( target.Location ); + + foreach ( NetState state in eable ) + { + state.Mobile.ProcessDelta(); + + if ( SendParticlesTo( state ) ) + { + if ( particles == null ) + particles = Packet.Acquire( new TargetParticleEffect( target, itemID, speed, duration, hue, renderMode, effect, (int)layer, unknown ) ); + + state.Send( particles ); + } + else if ( itemID != 0 ) + { + if ( regular == null ) + regular = Packet.Acquire( new TargetEffect( target, itemID, speed, duration, hue, renderMode ) ); + + state.Send( regular ); + } + } + + Packet.Release( particles ); + Packet.Release( regular ); + + eable.Free(); + } + + //SendPacket( target.Location, target.Map, new TargetParticleEffect( target, itemID, speed, duration, hue, renderMode, effect, (int)layer, unknown ) ); + } + + public static void SendMovingEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes ) + { + SendMovingEffect( from, to, itemID, speed, duration, fixedDirection, explodes, 0, 0 ); + } + + public static void SendMovingEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode ) + { + if ( from is Mobile ) + ((Mobile)from).ProcessDelta(); + + if ( to is Mobile ) + ((Mobile)to).ProcessDelta(); + + SendPacket( from.Location, from.Map, new MovingEffect( from, to, itemID, speed, duration, fixedDirection, explodes, hue, renderMode ) ); + } + + public static void SendMovingParticles( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int effect, int explodeEffect, int explodeSound ) + { + SendMovingParticles( from, to, itemID, speed, duration, fixedDirection, explodes, 0, 0, effect, explodeEffect, explodeSound, 0 ); + } + + public static void SendMovingParticles( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int effect, int explodeEffect, int explodeSound, int unknown ) + { + SendMovingParticles( from, to, itemID, speed, duration, fixedDirection, explodes, 0, 0, effect, explodeEffect, explodeSound, unknown ); + } + + public static void SendMovingParticles( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, int unknown ) + { + SendMovingParticles( from, to, itemID, speed, duration, fixedDirection, explodes, hue, renderMode, effect, explodeEffect, explodeSound, (EffectLayer)255, unknown ); + } + + public static void SendMovingParticles( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, EffectLayer layer, int unknown ) + { + if ( from is Mobile ) + ((Mobile)from).ProcessDelta(); + + if ( to is Mobile ) + ((Mobile)to).ProcessDelta(); + + Map map = from.Map; + + if ( map != null ) + { + Packet particles = null, regular = null; + + IPooledEnumerable eable = map.GetClientsInRange( from.Location ); + + foreach ( NetState state in eable ) + { + state.Mobile.ProcessDelta(); + + if ( SendParticlesTo( state ) ) + { + if ( particles == null ) + particles = Packet.Acquire( new MovingParticleEffect( from, to, itemID, speed, duration, fixedDirection, explodes, hue, renderMode, effect, explodeEffect, explodeSound, layer, unknown ) ); + + state.Send( particles ); + } + else if ( itemID > 1 ) + { + if ( regular == null ) + regular = Packet.Acquire( new MovingEffect( from, to, itemID, speed, duration, fixedDirection, explodes, hue, renderMode ) ); + + state.Send( regular ); + } + } + + Packet.Release( particles ); + Packet.Release( regular ); + + eable.Free(); + } + + //SendPacket( from.Location, from.Map, new MovingParticleEffect( from, to, itemID, speed, duration, fixedDirection, explodes, hue, renderMode, effect, explodeEffect, explodeSound, unknown ) ); + } + + public static void SendPacket( Point3D origin, Map map, Packet p ) + { + if ( map != null ) + { + IPooledEnumerable eable = map.GetClientsInRange( origin ); + + p.Acquire(); + + foreach ( NetState state in eable ) + { + state.Mobile.ProcessDelta(); + + state.Send( p ); + } + + p.Release(); + + eable.Free(); + } + } + + public static void SendPacket( IPoint3D origin, Map map, Packet p ) + { + if ( map != null ) + { + IPooledEnumerable eable = map.GetClientsInRange( new Point3D( origin ) ); + + p.Acquire(); + + foreach ( NetState state in eable ) + { + state.Mobile.ProcessDelta(); + + state.Send( p ); + } + + p.Release(); + + eable.Free(); + } + } + } +} \ No newline at end of file diff --git a/Source/EventLog.cs b/Source/EventLog.cs new file mode 100644 index 0000000..c2f1017 --- /dev/null +++ b/Source/EventLog.cs @@ -0,0 +1,67 @@ +/*************************************************************************** + * EventLog.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Diagnostics; +using DiagELog = System.Diagnostics.EventLog; + +namespace Server +{ + public static class EventLog + { + static EventLog() + { + if ( !DiagELog.SourceExists( "Ultima" ) ) + { + DiagELog.CreateEventSource( "Ultima", "Application" ); + } + } + + public static void Error( int eventID, string text ) + { + DiagELog.WriteEntry( "Ultima", text, EventLogEntryType.Error, eventID ); + } + + public static void Error( int eventID, string format, params object[] args ) + { + Error( eventID, String.Format( format, args ) ); + } + + public static void Warning( int eventID, string text ) + { + DiagELog.WriteEntry( "Ultima", text, EventLogEntryType.Warning, eventID ); + } + + public static void Warning( int eventID, string format, params object[] args ) + { + Warning( eventID, String.Format( format, args ) ); + } + + public static void Inform( int eventID, string text ) + { + DiagELog.WriteEntry( "Ultima", text, EventLogEntryType.Information, eventID ); + } + + public static void Inform( int eventID, string format, params object[] args ) + { + Inform( eventID, String.Format( format, args ) ); + } + } +} \ No newline at end of file diff --git a/Source/EventSink.cs b/Source/EventSink.cs new file mode 100644 index 0000000..c0f1146 --- /dev/null +++ b/Source/EventSink.cs @@ -0,0 +1,1059 @@ +/*************************************************************************** + * EventSink.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Net; +using System.Net.Sockets; +using System.Collections; +using System.Collections.Generic; +using Server; +using Server.Items; +using Server.Accounting; +using Server.Network; +using Server.Guilds; +using Server.Commands; + +namespace Server +{ + public delegate void CharacterCreatedEventHandler( CharacterCreatedEventArgs e ); + public delegate void OpenDoorMacroEventHandler( OpenDoorMacroEventArgs e ); + public delegate void SpeechEventHandler( SpeechEventArgs e ); + public delegate void LoginEventHandler( LoginEventArgs e ); + public delegate void ServerListEventHandler( ServerListEventArgs e ); + public delegate void MovementEventHandler( MovementEventArgs e ); + public delegate void HungerChangedEventHandler( HungerChangedEventArgs e ); + public delegate void CrashedEventHandler( CrashedEventArgs e ); + public delegate void ShutdownEventHandler( ShutdownEventArgs e ); + public delegate void HelpRequestEventHandler( HelpRequestEventArgs e ); + public delegate void DisarmRequestEventHandler( DisarmRequestEventArgs e ); + public delegate void StunRequestEventHandler( StunRequestEventArgs e ); + public delegate void OpenSpellbookRequestEventHandler( OpenSpellbookRequestEventArgs e ); + public delegate void CastSpellRequestEventHandler( CastSpellRequestEventArgs e ); + public delegate void AnimateRequestEventHandler( AnimateRequestEventArgs e ); + public delegate void LogoutEventHandler( LogoutEventArgs e ); + public delegate void SocketConnectEventHandler( SocketConnectEventArgs e ); + public delegate void ConnectedEventHandler( ConnectedEventArgs e ); + public delegate void DisconnectedEventHandler( DisconnectedEventArgs e ); + public delegate void RenameRequestEventHandler( RenameRequestEventArgs e ); + public delegate void PlayerDeathEventHandler( PlayerDeathEventArgs e ); + public delegate void ChatRequestEventHandler( ChatRequestEventArgs e ); + public delegate void AccountLoginEventHandler( AccountLoginEventArgs e ); + public delegate void PaperdollRequestEventHandler( PaperdollRequestEventArgs e ); + public delegate void ProfileRequestEventHandler( ProfileRequestEventArgs e ); + public delegate void ChangeProfileRequestEventHandler( ChangeProfileRequestEventArgs e ); + public delegate void AggressiveActionEventHandler( AggressiveActionEventArgs e ); + public delegate void GameLoginEventHandler( GameLoginEventArgs e ); + public delegate void DeleteRequestEventHandler( DeleteRequestEventArgs e ); + public delegate void WorldLoadEventHandler(); + public delegate void WorldSaveEventHandler( WorldSaveEventArgs e ); + public delegate void SetAbilityEventHandler( SetAbilityEventArgs e ); + public delegate void FastWalkEventHandler( FastWalkEventArgs e ); + public delegate void ServerStartedEventHandler(); + public delegate BaseGuild CreateGuildHandler( CreateGuildEventArgs e ); + public delegate void GuildGumpRequestHandler( GuildGumpRequestArgs e ); + public delegate void QuestGumpRequestHandler( QuestGumpRequestArgs e ); + public delegate void ClientVersionReceivedHandler( ClientVersionReceivedArgs e ); + + public class ClientVersionReceivedArgs : EventArgs + { + private NetState m_State; + private ClientVersion m_Version; + + public NetState State { get { return m_State; } } + public ClientVersion Version { get { return m_Version; } } + + public ClientVersionReceivedArgs( NetState state, ClientVersion cv ) + { + m_State = state; + m_Version = cv; + } + } + + public class CreateGuildEventArgs : EventArgs + { + private int m_Id; + public int Id { get { return m_Id; } set { m_Id = value; } } + + public CreateGuildEventArgs( int id ) + { + m_Id = id; + } + } + + public class GuildGumpRequestArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public GuildGumpRequestArgs( Mobile mobile ) + { + m_Mobile = mobile; + } + } + + public class QuestGumpRequestArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile { get { return m_Mobile; } } + + public QuestGumpRequestArgs( Mobile mobile ) + { + m_Mobile = mobile; + } + } + + public class SetAbilityEventArgs : EventArgs + { + private Mobile m_Mobile; + private int m_Index; + + public Mobile Mobile{ get{ return m_Mobile; } } + public int Index{ get{ return m_Index; } } + + public SetAbilityEventArgs( Mobile mobile, int index ) + { + m_Mobile = mobile; + m_Index = index; + } + } + + public class DeleteRequestEventArgs : EventArgs + { + private NetState m_State; + private int m_Index; + + public NetState State{ get{ return m_State; } } + public int Index{ get{ return m_Index; } } + + public DeleteRequestEventArgs( NetState state, int index ) + { + m_State = state; + m_Index = index; + } + } + + public class GameLoginEventArgs : EventArgs + { + private NetState m_State; + private string m_Username; + private string m_Password; + private bool m_Accepted; + private CityInfo[] m_CityInfo; + + public NetState State{ get{ return m_State; } } + public string Username{ get{ return m_Username; } } + public string Password{ get{ return m_Password; } } + public bool Accepted{ get{ return m_Accepted; } set{ m_Accepted = value; } } + public CityInfo[] CityInfo{ get{ return m_CityInfo; } set{ m_CityInfo = value; } } + + public GameLoginEventArgs( NetState state, string un, string pw ) + { + m_State = state; + m_Username = un; + m_Password = pw; + } + } + + public class AggressiveActionEventArgs : EventArgs + { + private Mobile m_Aggressed; + private Mobile m_Aggressor; + private bool m_Criminal; + + public Mobile Aggressed{ get{ return m_Aggressed; } } + public Mobile Aggressor{ get{ return m_Aggressor; } } + public bool Criminal{ get{ return m_Criminal; } } + + private static Queue m_Pool = new Queue(); + + public static AggressiveActionEventArgs Create( Mobile aggressed, Mobile aggressor, bool criminal ) + { + AggressiveActionEventArgs args; + + if ( m_Pool.Count > 0 ) + { + args = m_Pool.Dequeue(); + + args.m_Aggressed = aggressed; + args.m_Aggressor = aggressor; + args.m_Criminal = criminal; + } + else + { + args = new AggressiveActionEventArgs( aggressed, aggressor, criminal ); + } + + return args; + } + + private AggressiveActionEventArgs( Mobile aggressed, Mobile aggressor, bool criminal ) + { + m_Aggressed = aggressed; + m_Aggressor = aggressor; + m_Criminal = criminal; + } + + public void Free() + { + m_Pool.Enqueue( this ); + } + } + + public class ProfileRequestEventArgs : EventArgs + { + private Mobile m_Beholder; + private Mobile m_Beheld; + + public Mobile Beholder{ get{ return m_Beholder; } } + public Mobile Beheld{ get{ return m_Beheld; } } + + public ProfileRequestEventArgs( Mobile beholder, Mobile beheld ) + { + m_Beholder = beholder; + m_Beheld = beheld; + } + } + + public class ChangeProfileRequestEventArgs : EventArgs + { + private Mobile m_Beholder; + private Mobile m_Beheld; + private string m_Text; + + public Mobile Beholder{ get{ return m_Beholder; } } + public Mobile Beheld{ get{ return m_Beheld; } } + public string Text{ get{ return m_Text; } } + + public ChangeProfileRequestEventArgs( Mobile beholder, Mobile beheld, string text ) + { + m_Beholder = beholder; + m_Beheld = beheld; + m_Text = text; + } + } + + public class PaperdollRequestEventArgs : EventArgs + { + private Mobile m_Beholder; + private Mobile m_Beheld; + + public Mobile Beholder{ get{ return m_Beholder; } } + public Mobile Beheld{ get{ return m_Beheld; } } + + public PaperdollRequestEventArgs( Mobile beholder, Mobile beheld ) + { + m_Beholder = beholder; + m_Beheld = beheld; + } + } + + public class AccountLoginEventArgs : EventArgs + { + private NetState m_State; + private string m_Username; + private string m_Password; + + private bool m_Accepted; + private ALRReason m_RejectReason; + + public NetState State{ get{ return m_State; } } + public string Username{ get{ return m_Username; } } + public string Password{ get{ return m_Password; } } + public bool Accepted{ get{ return m_Accepted; } set{ m_Accepted = value; } } + public ALRReason RejectReason{ get{ return m_RejectReason; } set{ m_RejectReason = value; } } + + public AccountLoginEventArgs( NetState state, string username, string password ) + { + m_State = state; + m_Username = username; + m_Password = password; + } + } + + public class ChatRequestEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public ChatRequestEventArgs( Mobile mobile ) + { + m_Mobile = mobile; + } + } + + public class PlayerDeathEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public PlayerDeathEventArgs( Mobile mobile ) + { + m_Mobile = mobile; + } + } + + public class RenameRequestEventArgs : EventArgs + { + private Mobile m_From, m_Target; + private string m_Name; + + public Mobile From{ get{ return m_From; } } + public Mobile Target{ get{ return m_Target; } } + public string Name{ get{ return m_Name; } } + + public RenameRequestEventArgs( Mobile from, Mobile target, string name ) + { + m_From = from; + m_Target = target; + m_Name = name; + } + } + + public class LogoutEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public LogoutEventArgs( Mobile m ) + { + m_Mobile = m; + } + } + + public class SocketConnectEventArgs : EventArgs + { + private Socket m_Socket; + private bool m_AllowConnection; + + public Socket Socket{ get{ return m_Socket; } } + public bool AllowConnection{ get { return m_AllowConnection; } set { m_AllowConnection = value; } } + + public SocketConnectEventArgs( Socket s ) + { + m_Socket = s; + m_AllowConnection = true; + } + } + + public class ConnectedEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public ConnectedEventArgs( Mobile m ) + { + m_Mobile = m; + } + } + + public class DisconnectedEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public DisconnectedEventArgs( Mobile m ) + { + m_Mobile = m; + } + } + + public class AnimateRequestEventArgs : EventArgs + { + private Mobile m_Mobile; + private string m_Action; + + public Mobile Mobile{ get{ return m_Mobile; } } + public string Action{ get{ return m_Action; } } + + public AnimateRequestEventArgs( Mobile m, string action ) + { + m_Mobile = m; + m_Action = action; + } + } + + public class CastSpellRequestEventArgs : EventArgs + { + private Mobile m_Mobile; + private Item m_Spellbook; + private int m_SpellID; + + public Mobile Mobile{ get{ return m_Mobile; } } + public Item Spellbook{ get{ return m_Spellbook; } } + public int SpellID{ get{ return m_SpellID; } } + + public CastSpellRequestEventArgs( Mobile m, int spellID, Item book ) + { + m_Mobile = m; + m_Spellbook = book; + m_SpellID = spellID; + } + } + + public class OpenSpellbookRequestEventArgs : EventArgs + { + private Mobile m_Mobile; + private int m_Type; + + public Mobile Mobile{ get{ return m_Mobile; } } + public int Type{ get{ return m_Type; } } + + public OpenSpellbookRequestEventArgs( Mobile m, int type ) + { + m_Mobile = m; + m_Type = type; + } + } + + public class StunRequestEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public StunRequestEventArgs( Mobile m ) + { + m_Mobile = m; + } + } + + public class DisarmRequestEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public DisarmRequestEventArgs( Mobile m ) + { + m_Mobile = m; + } + } + + public class HelpRequestEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public HelpRequestEventArgs( Mobile m ) + { + m_Mobile = m; + } + } + + public class ShutdownEventArgs : EventArgs + { + public ShutdownEventArgs() + { + } + } + + public class CrashedEventArgs : EventArgs + { + private Exception m_Exception; + private bool m_Close; + + public Exception Exception{ get{ return m_Exception; } } + public bool Close{ get{ return m_Close; } set{ m_Close = value; } } + + public CrashedEventArgs( Exception e ) + { + m_Exception = e; + } + } + + public class HungerChangedEventArgs : EventArgs + { + private Mobile m_Mobile; + private int m_OldValue; + + public Mobile Mobile{ get{ return m_Mobile; } } + public int OldValue{ get{ return m_OldValue; } } + + public HungerChangedEventArgs( Mobile mobile, int oldValue ) + { + m_Mobile = mobile; + m_OldValue = oldValue; + } + } + + public class MovementEventArgs : EventArgs + { + private Mobile m_Mobile; + private Direction m_Direction; + private bool m_Blocked; + + public Mobile Mobile{ get{ return m_Mobile; } } + public Direction Direction{ get{ return m_Direction; } } + public bool Blocked{ get{ return m_Blocked; } set{ m_Blocked = value; } } + + private static Queue m_Pool = new Queue(); + + public static MovementEventArgs Create( Mobile mobile, Direction dir ) + { + MovementEventArgs args; + + if ( m_Pool.Count > 0 ) + { + args = m_Pool.Dequeue(); + + args.m_Mobile = mobile; + args.m_Direction = dir; + args.m_Blocked = false; + } + else + { + args = new MovementEventArgs( mobile, dir ); + } + + return args; + } + + public MovementEventArgs( Mobile mobile, Direction dir ) + { + m_Mobile = mobile; + m_Direction = dir; + } + + public void Free() + { + m_Pool.Enqueue( this ); + } + } + + public class ServerListEventArgs : EventArgs + { + private NetState m_State; + private IAccount m_Account; + private bool m_Rejected; + private List m_Servers; + + public NetState State{ get{ return m_State; } } + public IAccount Account{ get{ return m_Account; } } + public bool Rejected{ get{ return m_Rejected; } set{ m_Rejected = value; } } + public List Servers{ get{ return m_Servers; } } + + public void AddServer( string name, IPEndPoint address ) + { + AddServer( name, 0, TimeZone.CurrentTimeZone, address ); + } + + public void AddServer( string name, int fullPercent, TimeZone tz, IPEndPoint address ) + { + m_Servers.Add( new ServerInfo( name, fullPercent, tz, address ) ); + } + + public ServerListEventArgs( NetState state, IAccount account ) + { + m_State = state; + m_Account = account; + m_Servers = new List(); + } + } + + public struct SkillNameValue + { + private SkillName m_Name; + private int m_Value; + + public SkillName Name{ get{ return m_Name; } } + public int Value{ get{ return m_Value; } } + + public SkillNameValue( SkillName name, int value ) + { + m_Name = name; + m_Value = value; + } + } + + public class CharacterCreatedEventArgs : EventArgs + { + private NetState m_State; + private IAccount m_Account; + private CityInfo m_City; + private SkillNameValue[] m_Skills; + private int m_ShirtHue, m_PantsHue; + private int m_HairID, m_HairHue; + private int m_BeardID, m_BeardHue; + private string m_Name; + private bool m_Female; + private int m_Hue; + private int m_Str, m_Dex, m_Int; + private int m_Profession; + private Mobile m_Mobile; + + private Race m_Race; + + public NetState State{ get{ return m_State; } } + public IAccount Account{ get{ return m_Account; } } + public Mobile Mobile{ get{ return m_Mobile; } set{ m_Mobile = value; } } + public string Name{ get{ return m_Name; } } + public bool Female{ get{ return m_Female; } } + public int Hue{ get{ return m_Hue; } } + public int Str{ get{ return m_Str; } } + public int Dex{ get{ return m_Dex; } } + public int Int{ get{ return m_Int; } } + public CityInfo City{ get{ return m_City; } } + public SkillNameValue[] Skills{ get{ return m_Skills; } } + public int ShirtHue{ get{ return m_ShirtHue; } } + public int PantsHue{ get{ return m_PantsHue; } } + public int HairID{ get{ return m_HairID; } } + public int HairHue{ get{ return m_HairHue; } } + public int BeardID{ get{ return m_BeardID; } } + public int BeardHue{ get{ return m_BeardHue; } } + public int Profession{ get{ return m_Profession; } set{ m_Profession = value; }} + public Race Race { get { return m_Race; } } + + public CharacterCreatedEventArgs( NetState state, IAccount a, string name, bool female, int hue, int str, int dex, int intel, CityInfo city, SkillNameValue[] skills, int shirtHue, int pantsHue, int hairID, int hairHue, int beardID, int beardHue, int profession, Race race ) + { + m_State = state; + m_Account = a; + m_Name = name; + m_Female = female; + m_Hue = hue; + m_Str = str; + m_Dex = dex; + m_Int = intel; + m_City = city; + m_Skills = skills; + m_ShirtHue = shirtHue; + m_PantsHue = pantsHue; + m_HairID = hairID; + m_HairHue = hairHue; + m_BeardID = beardID; + m_BeardHue = beardHue; + m_Profession = profession; + m_Race = race; + } + } + + public class OpenDoorMacroEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public OpenDoorMacroEventArgs( Mobile mobile ) + { + m_Mobile = mobile; + } + } + + public class SpeechEventArgs : EventArgs + { + private Mobile m_Mobile; + private string m_Speech; + private MessageType m_Type; + private int m_Hue; + private int[] m_Keywords; + private bool m_Handled; + private bool m_Blocked; + + public Mobile Mobile{ get{ return m_Mobile; } } + public string Speech{ get{ return m_Speech; } set{ m_Speech = value; } } + public MessageType Type{ get{ return m_Type; } } + public int Hue{ get{ return m_Hue; } } + public int[] Keywords{ get{ return m_Keywords; } } + public bool Handled{ get{ return m_Handled; } set{ m_Handled = value; } } + public bool Blocked{ get{ return m_Blocked; } set{ m_Blocked = value; } } + + public bool HasKeyword( int keyword ) + { + for ( int i = 0; i < m_Keywords.Length; ++i ) + if ( m_Keywords[i] == keyword ) + return true; + + return false; + } + + public SpeechEventArgs( Mobile mobile, string speech, MessageType type, int hue, int[] keywords ) + { + m_Mobile = mobile; + m_Speech = speech; + m_Type = type; + m_Hue = hue; + m_Keywords = keywords; + } + } + + public class LoginEventArgs : EventArgs + { + private Mobile m_Mobile; + + public Mobile Mobile{ get{ return m_Mobile; } } + + public LoginEventArgs( Mobile mobile ) + { + m_Mobile = mobile; + } + } + + public class WorldSaveEventArgs : EventArgs + { + private bool m_Msg; + + public bool Message{ get{ return m_Msg; } } + + public WorldSaveEventArgs( bool msg ) + { + m_Msg = msg; + } + } + + public class FastWalkEventArgs + { + private NetState m_State; + private bool m_Blocked; + + public FastWalkEventArgs( NetState state ) + { + m_State = state; + m_Blocked = false; + } + + public NetState NetState{ get{ return m_State; } } + public bool Blocked{ get{ return m_Blocked; } set{ m_Blocked = value; } } + } + + public static class EventSink + { + public static event CharacterCreatedEventHandler CharacterCreated; + public static event OpenDoorMacroEventHandler OpenDoorMacroUsed; + public static event SpeechEventHandler Speech; + public static event LoginEventHandler Login; + public static event ServerListEventHandler ServerList; + public static event MovementEventHandler Movement; + public static event HungerChangedEventHandler HungerChanged; + public static event CrashedEventHandler Crashed; + public static event ShutdownEventHandler Shutdown; + public static event HelpRequestEventHandler HelpRequest; + public static event DisarmRequestEventHandler DisarmRequest; + public static event StunRequestEventHandler StunRequest; + public static event OpenSpellbookRequestEventHandler OpenSpellbookRequest; + public static event CastSpellRequestEventHandler CastSpellRequest; + public static event AnimateRequestEventHandler AnimateRequest; + public static event LogoutEventHandler Logout; + public static event SocketConnectEventHandler SocketConnect; + public static event ConnectedEventHandler Connected; + public static event DisconnectedEventHandler Disconnected; + public static event RenameRequestEventHandler RenameRequest; + public static event PlayerDeathEventHandler PlayerDeath; + public static event ChatRequestEventHandler ChatRequest; + public static event AccountLoginEventHandler AccountLogin; + public static event PaperdollRequestEventHandler PaperdollRequest; + public static event ProfileRequestEventHandler ProfileRequest; + public static event ChangeProfileRequestEventHandler ChangeProfileRequest; + public static event AggressiveActionEventHandler AggressiveAction; + public static event CommandEventHandler Command; + public static event GameLoginEventHandler GameLogin; + public static event DeleteRequestEventHandler DeleteRequest; + public static event WorldLoadEventHandler WorldLoad; + public static event WorldSaveEventHandler WorldSave; + public static event SetAbilityEventHandler SetAbility; + public static event FastWalkEventHandler FastWalk; + public static event CreateGuildHandler CreateGuild; + public static event ServerStartedEventHandler ServerStarted; + public static event GuildGumpRequestHandler GuildGumpRequest; + public static event QuestGumpRequestHandler QuestGumpRequest; + public static event ClientVersionReceivedHandler ClientVersionReceived; + + public static void InvokeClientVersionReceived( ClientVersionReceivedArgs e ) + { + if( ClientVersionReceived != null ) + ClientVersionReceived( e ); + } + + public static void InvokeServerStarted() + { + if ( ServerStarted != null ) + ServerStarted(); + } + + public static BaseGuild InvokeCreateGuild( CreateGuildEventArgs e ) + { + if ( CreateGuild != null ) + return CreateGuild( e ); + else + return null; + } + + public static void InvokeSetAbility( SetAbilityEventArgs e ) + { + if ( SetAbility != null ) + SetAbility( e ); + } + + public static void InvokeGuildGumpRequest( GuildGumpRequestArgs e ) + { + if( GuildGumpRequest != null ) + GuildGumpRequest( e ); + } + + public static void InvokeQuestGumpRequest( QuestGumpRequestArgs e ) + { + if( QuestGumpRequest != null ) + QuestGumpRequest( e ); + } + + public static void InvokeFastWalk( FastWalkEventArgs e ) + { + if ( FastWalk != null ) + FastWalk( e ); + } + + public static void InvokeDeleteRequest( DeleteRequestEventArgs e ) + { + if ( DeleteRequest != null ) + DeleteRequest( e ); + } + + public static void InvokeGameLogin( GameLoginEventArgs e ) + { + if ( GameLogin != null ) + GameLogin( e ); + } + + public static void InvokeCommand( CommandEventArgs e ) + { + if ( Command != null ) + Command( e ); + } + + public static void InvokeAggressiveAction( AggressiveActionEventArgs e ) + { + if ( AggressiveAction != null ) + AggressiveAction( e ); + } + + public static void InvokeProfileRequest( ProfileRequestEventArgs e ) + { + if ( ProfileRequest != null ) + ProfileRequest( e ); + } + + public static void InvokeChangeProfileRequest( ChangeProfileRequestEventArgs e ) + { + if ( ChangeProfileRequest != null ) + ChangeProfileRequest( e ); + } + + public static void InvokePaperdollRequest( PaperdollRequestEventArgs e ) + { + if ( PaperdollRequest != null ) + PaperdollRequest( e ); + } + + public static void InvokeAccountLogin( AccountLoginEventArgs e ) + { + if ( AccountLogin != null ) + AccountLogin( e ); + } + + public static void InvokeChatRequest( ChatRequestEventArgs e ) + { + if ( ChatRequest != null ) + ChatRequest( e ); + } + + public static void InvokePlayerDeath( PlayerDeathEventArgs e ) + { + if ( PlayerDeath != null ) + PlayerDeath( e ); + } + + public static void InvokeRenameRequest( RenameRequestEventArgs e ) + { + if ( RenameRequest != null ) + RenameRequest( e ); + } + + public static void InvokeLogout( LogoutEventArgs e ) + { + if ( Logout != null ) + Logout( e ); + } + + public static void InvokeSocketConnect( SocketConnectEventArgs e ) + { + if ( SocketConnect != null ) + SocketConnect( e ); + } + + public static void InvokeConnected( ConnectedEventArgs e ) + { + if ( Connected != null ) + Connected( e ); + } + + public static void InvokeDisconnected( DisconnectedEventArgs e ) + { + if ( Disconnected != null ) + Disconnected( e ); + } + + public static void InvokeAnimateRequest( AnimateRequestEventArgs e ) + { + if ( AnimateRequest != null ) + AnimateRequest( e ); + } + + public static void InvokeCastSpellRequest( CastSpellRequestEventArgs e ) + { + if ( CastSpellRequest != null ) + CastSpellRequest( e ); + } + + public static void InvokeOpenSpellbookRequest( OpenSpellbookRequestEventArgs e ) + { + if ( OpenSpellbookRequest != null ) + OpenSpellbookRequest( e ); + } + + public static void InvokeDisarmRequest( DisarmRequestEventArgs e ) + { + if ( DisarmRequest != null ) + DisarmRequest( e ); + } + + public static void InvokeStunRequest( StunRequestEventArgs e ) + { + if ( StunRequest != null ) + StunRequest( e ); + } + + public static void InvokeHelpRequest( HelpRequestEventArgs e ) + { + if ( HelpRequest != null ) + HelpRequest( e ); + } + + public static void InvokeShutdown( ShutdownEventArgs e ) + { + if ( Shutdown != null ) + Shutdown( e ); + } + + public static void InvokeCrashed( CrashedEventArgs e ) + { + if ( Crashed != null ) + Crashed( e ); + } + + public static void InvokeHungerChanged( HungerChangedEventArgs e ) + { + if ( HungerChanged != null ) + HungerChanged( e ); + } + + public static void InvokeMovement( MovementEventArgs e ) + { + if ( Movement != null ) + Movement( e ); + } + + public static void InvokeServerList( ServerListEventArgs e ) + { + if ( ServerList != null ) + ServerList( e ); + } + + public static void InvokeLogin( LoginEventArgs e ) + { + if ( Login != null ) + Login( e ); + } + + public static void InvokeSpeech( SpeechEventArgs e ) + { + if ( Speech != null ) + Speech( e ); + } + + public static void InvokeCharacterCreated( CharacterCreatedEventArgs e ) + { + if ( CharacterCreated != null ) + CharacterCreated( e ); + } + + public static void InvokeOpenDoorMacroUsed( OpenDoorMacroEventArgs e ) + { + if ( OpenDoorMacroUsed != null ) + OpenDoorMacroUsed( e ); + } + + public static void InvokeWorldLoad() + { + if ( WorldLoad != null ) + WorldLoad(); + } + + public static void InvokeWorldSave( WorldSaveEventArgs e ) + { + if ( WorldSave != null ) + WorldSave( e ); + } + + public static void Reset() + { + CharacterCreated = null; + OpenDoorMacroUsed = null; + Speech = null; + Login = null; + ServerList = null; + Movement = null; + HungerChanged = null; + Crashed = null; + Shutdown = null; + HelpRequest = null; + DisarmRequest = null; + StunRequest = null; + OpenSpellbookRequest = null; + CastSpellRequest = null; + AnimateRequest = null; + Logout = null; + SocketConnect = null; + Connected = null; + Disconnected = null; + RenameRequest = null; + PlayerDeath = null; + ChatRequest = null; + AccountLogin = null; + PaperdollRequest = null; + ProfileRequest = null; + ChangeProfileRequest = null; + AggressiveAction = null; + Command = null; + GameLogin = null; + DeleteRequest = null; + WorldLoad = null; + WorldSave = null; + SetAbility = null; + GuildGumpRequest = null; + QuestGumpRequest = null; + } + } +} \ No newline at end of file diff --git a/Source/ExpansionInfo.cs b/Source/ExpansionInfo.cs new file mode 100644 index 0000000..4cc9223 --- /dev/null +++ b/Source/ExpansionInfo.cs @@ -0,0 +1,192 @@ +/*************************************************************************** + * ExpansionInfo.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + public enum Expansion + { + None, + T2A, + UOR, + UOTD, + LBR, + AOS, + SE, + ML, + SA + } + + [Flags] + public enum ClientFlags + { + None = 0x00000000, + Felucca = 0x00000001, + Trammel = 0x00000002, + Ilshenar = 0x00000004, + Malas = 0x00000008, + Tokuno = 0x00000010, + TerMur = 0x00000020, + Unk1 = 0x00000040, + Unk2 = 0x00000080, + UOTD = 0x00000100 + } + + [Flags] + public enum FeatureFlags + { + None = 0x00000000, + T2A = 0x00000001, + UOR = 0x00000002, + UOTD = 0x00000004, + LBR = 0x00000008, + AOS = 0x00000010, + SixthCharacterSlot = 0x00000020, + SE = 0x00000040, + ML = 0x00000080, + Unk1 = 0x00000100, + Unk2 = 0x00000200, + Unk3 = 0x00000400, + Unk4 = 0x00000800, + SeventhCharacterSlot = 0x00001000, + Unk5 = 0x00002000, + Unk6 = 0x00004000, + Unk7 = 0x00008000, + SA = 0x00010000, + + + ExpansionNone = None, + ExpansionT2A = T2A, + ExpansionUOR = ExpansionT2A | UOR, + ExpansionUOTD = ExpansionUOR | UOTD, + ExpansionLBR = ExpansionUOTD | LBR, + ExpansionAOS = ExpansionLBR | AOS | Unk7, + ExpansionSE = ExpansionAOS | SE, + ExpansionML = ExpansionSE | ML | Unk2, + ExpansionSA = ExpansionML | SA + } + + [Flags] + public enum CharacterListFlags + { + None = 0x00000000, + Unk1 = 0x00000001, + Unk2 = 0x00000002, + OneCharacterSlot = 0x00000004, + ContextMenus = 0x00000008, + SlotLimit = 0x00000010, + AOS = 0x00000020, + SixthCharacterSlot = 0x00000040, + SE = 0x00000080, + ML = 0x00000100, + Unk4 = 0x00000200, + Unk5 = 0x00000400, + Unk6 = 0x00000800, + SeventhCharacterSlot = 0x00001000, + Unk7 = 0x00002000, + + ExpansionNone = ContextMenus, // + ExpansionT2A = ContextMenus, // + ExpansionUOR = ContextMenus, // None + ExpansionUOTD = ContextMenus, // + ExpansionLBR = ContextMenus, // + ExpansionAOS = ContextMenus | AOS, + ExpansionSE = ExpansionAOS | SE, + ExpansionML = ExpansionSE | ML, + ExpansionSA = ExpansionML + } + + public class ExpansionInfo + { + public static ExpansionInfo[] Table { get { return m_Table; } } + private static ExpansionInfo[] m_Table = new ExpansionInfo[] + { + new ExpansionInfo( 0, "None", ClientFlags.None, FeatureFlags.ExpansionNone, CharacterListFlags.ExpansionNone, 0x0000 ), + new ExpansionInfo( 1, "The Second Age", ClientFlags.Felucca, FeatureFlags.ExpansionT2A, CharacterListFlags.ExpansionT2A, 0x0000 ), + new ExpansionInfo( 2, "Renaissance", ClientFlags.Trammel, FeatureFlags.ExpansionUOR, CharacterListFlags.ExpansionUOR, 0x0000 ), + new ExpansionInfo( 3, "Third Dawn", ClientFlags.Ilshenar, FeatureFlags.ExpansionUOTD, CharacterListFlags.ExpansionUOTD, 0x0000 ), + new ExpansionInfo( 4, "Blackthorn's Revenge", ClientFlags.Ilshenar, FeatureFlags.ExpansionLBR, CharacterListFlags.ExpansionLBR, 0x0000 ), + new ExpansionInfo( 5, "Age of Shadows", ClientFlags.Malas, FeatureFlags.ExpansionAOS, CharacterListFlags.ExpansionAOS, 0x0000 ), + new ExpansionInfo( 6, "Samurai Empire", ClientFlags.Tokuno, FeatureFlags.ExpansionSE, CharacterListFlags.ExpansionSE, 0x00C0 ), // 0x20 | 0x80 + new ExpansionInfo( 7, "Mondain's Legacy", new ClientVersion( "5.0.0a" ), FeatureFlags.ExpansionML, CharacterListFlags.ExpansionML, 0x02C0 ), // 0x20 | 0x80 | 0x200 + new ExpansionInfo( 8, "Stygian Abyss", ClientFlags.TerMur, FeatureFlags.ExpansionSA, CharacterListFlags.ExpansionSA, 0x102C0 ) // 0x20 | 0x80 | 0x200 | 0x10000 + }; + + private string m_Name; + private int m_ID, m_CustomHousingFlag; + + private ClientFlags m_ClientFlags; + private FeatureFlags m_SupportedFeatures; + private CharacterListFlags m_CharListFlags; + + private ClientVersion m_RequiredClient; // Used as an alternative to the flags + + public string Name{ get{ return m_Name; } } + public int ID{ get{ return m_ID; } } + public ClientFlags ClientFlags{ get{ return m_ClientFlags; } } + public FeatureFlags SupportedFeatures{ get{ return m_SupportedFeatures; } } + public CharacterListFlags CharacterListFlags { get { return m_CharListFlags; } } + public int CustomHousingFlag { get{ return m_CustomHousingFlag; } } + public ClientVersion RequiredClient { get { return m_RequiredClient; } } + + public ExpansionInfo( int id, string name, ClientFlags clientFlags, FeatureFlags supportedFeatures, CharacterListFlags charListFlags, int customHousingFlag ) + { + m_Name = name; + m_ID = id; + m_ClientFlags = clientFlags; + m_SupportedFeatures = supportedFeatures; + m_CharListFlags = charListFlags; + m_CustomHousingFlag = customHousingFlag; + } + + public ExpansionInfo( int id, string name, ClientVersion requiredClient, FeatureFlags supportedFeatures, CharacterListFlags charListFlags, int customHousingFlag ) + { + m_Name = name; + m_ID = id; + m_SupportedFeatures = supportedFeatures; + m_CharListFlags = charListFlags; + m_CustomHousingFlag = customHousingFlag; + m_RequiredClient = requiredClient; + } + + public static ExpansionInfo GetInfo( Expansion ex ) + { + return GetInfo( (int)ex ); + } + + public static ExpansionInfo GetInfo( int ex ) + { + int v = (int)ex; + + if( v < 0 || v >= m_Table.Length ) + v = 0; + + return m_Table[v]; + } + + public static ExpansionInfo CurrentExpansion { get { return GetInfo( Core.Expansion ); } } + + public override string ToString() + { + return m_Name; + } + } +} diff --git a/Source/Geometry.cs b/Source/Geometry.cs new file mode 100644 index 0000000..c3cce6e --- /dev/null +++ b/Source/Geometry.cs @@ -0,0 +1,638 @@ +/*************************************************************************** + * Geometry.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + [Parsable] + public struct Point2D : IPoint2D, IComparable, IComparable + { + internal int m_X; + internal int m_Y; + + public static readonly Point2D Zero = new Point2D( 0, 0 ); + + public Point2D( int x, int y ) + { + m_X = x; + m_Y = y; + } + + public Point2D( IPoint2D p ) : this( p.X, p.Y ) + { + } + + [CommandProperty( AccessLevel.Counselor )] + public int X + { + get + { + return m_X; + } + set + { + m_X = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Y + { + get + { + return m_Y; + } + set + { + m_Y = value; + } + } + + public override string ToString() + { + return String.Format( "({0}, {1})", m_X, m_Y ); + } + + public static Point2D Parse( string value ) + { + int start = value.IndexOf( '(' ); + int end = value.IndexOf( ',', start + 1 ); + + string param1 = value.Substring( start + 1, end - (start + 1) ).Trim(); + + start = end; + end = value.IndexOf( ')', start + 1 ); + + string param2 = value.Substring( start + 1, end - (start + 1) ).Trim(); + + return new Point2D( Convert.ToInt32( param1 ), Convert.ToInt32( param2 ) ); + } + + public int CompareTo( Point2D other ) + { + int v = ( m_X.CompareTo( other.m_X ) ); + + if ( v == 0 ) + v = ( m_Y.CompareTo( other.m_Y ) ); + + return v; + } + + public int CompareTo( object other ) + { + if ( other is Point2D ) + return this.CompareTo( (Point2D) other ); + else if ( other == null ) + return -1; + + throw new ArgumentException(); + } + + public override bool Equals( object o ) + { + if ( o == null || !(o is IPoint2D) ) return false; + + IPoint2D p = (IPoint2D)o; + + return m_X == p.X && m_Y == p.Y; + } + + public override int GetHashCode() + { + return m_X ^ m_Y; + } + + public static bool operator == ( Point2D l, Point2D r ) + { + return l.m_X == r.m_X && l.m_Y == r.m_Y; + } + + public static bool operator != ( Point2D l, Point2D r ) + { + return l.m_X != r.m_X || l.m_Y != r.m_Y; + } + + public static bool operator == ( Point2D l, IPoint2D r ) + { + if ( Object.ReferenceEquals( r, null ) ) + return false; + + return l.m_X == r.X && l.m_Y == r.Y; + } + + public static bool operator != ( Point2D l, IPoint2D r ) + { + if ( Object.ReferenceEquals( r, null ) ) + return false; + + return l.m_X !=r.X || l.m_Y != r.Y; + } + + public static bool operator > ( Point2D l, Point2D r ) + { + return l.m_X > r.m_X && l.m_Y > r.m_Y; + } + + public static bool operator > ( Point2D l, Point3D r ) + { + return l.m_X > r.m_X && l.m_Y > r.m_Y; + } + + public static bool operator > ( Point2D l, IPoint2D r ) + { + if ( Object.ReferenceEquals( r, null ) ) + return false; + + return l.m_X > r.X && l.m_Y > r.Y; + } + + public static bool operator < ( Point2D l, Point2D r ) + { + return l.m_X < r.m_X && l.m_Y < r.m_Y; + } + + public static bool operator < ( Point2D l, Point3D r ) + { + return l.m_X < r.m_X && l.m_Y < r.m_Y; + } + + public static bool operator < ( Point2D l, IPoint2D r ) + { + if ( Object.ReferenceEquals( r, null ) ) + return false; + + return l.m_X < r.X && l.m_Y < r.Y; + } + + public static bool operator >= ( Point2D l, Point2D r ) + { + return l.m_X >= r.m_X && l.m_Y >= r.m_Y; + } + + public static bool operator >= ( Point2D l, Point3D r ) + { + return l.m_X >= r.m_X && l.m_Y >= r.m_Y; + } + + public static bool operator >= ( Point2D l, IPoint2D r ) + { + if ( Object.ReferenceEquals( r, null ) ) + return false; + + return l.m_X >= r.X && l.m_Y >= r.Y; + } + + public static bool operator <= ( Point2D l, Point2D r ) + { + return l.m_X <= r.m_X && l.m_Y <= r.m_Y; + } + + public static bool operator <= ( Point2D l, Point3D r ) + { + return l.m_X <= r.m_X && l.m_Y <= r.m_Y; + } + + public static bool operator <= ( Point2D l, IPoint2D r ) + { + if ( Object.ReferenceEquals( r, null ) ) + return false; + + return l.m_X <= r.X && l.m_Y <= r.Y; + } + } + + [Parsable] + public struct Point3D : IPoint3D, IComparable, IComparable + { + internal int m_X; + internal int m_Y; + internal int m_Z; + + public static readonly Point3D Zero = new Point3D( 0, 0, 0 ); + + public Point3D( int x, int y, int z ) + { + m_X = x; + m_Y = y; + m_Z = z; + } + + public Point3D( IPoint3D p ) + : this( p.X, p.Y, p.Z ) + { + } + + public Point3D( IPoint2D p, int z ) + : this( p.X, p.Y, z ) + { + } + + [CommandProperty( AccessLevel.Counselor )] + public int X + { + get + { + return m_X; + } + set + { + m_X = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Y + { + get + { + return m_Y; + } + set + { + m_Y = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Z + { + get + { + return m_Z; + } + set + { + m_Z = value; + } + } + + public override string ToString() + { + return String.Format( "({0}, {1}, {2})", m_X, m_Y, m_Z ); + } + + public override bool Equals( object o ) + { + if ( o == null || !( o is IPoint3D ) ) + return false; + + IPoint3D p = (IPoint3D) o; + + return m_X == p.X && m_Y == p.Y && m_Z == p.Z; + } + + public override int GetHashCode() + { + return m_X ^ m_Y ^ m_Z; + } + + public static Point3D Parse( string value ) + { + int start = value.IndexOf( '(' ); + int end = value.IndexOf( ',', start + 1 ); + + string param1 = value.Substring( start + 1, end - ( start + 1 ) ).Trim(); + + start = end; + end = value.IndexOf( ',', start + 1 ); + + string param2 = value.Substring( start + 1, end - ( start + 1 ) ).Trim(); + + start = end; + end = value.IndexOf( ')', start + 1 ); + + string param3 = value.Substring( start + 1, end - ( start + 1 ) ).Trim(); + + return new Point3D( Convert.ToInt32( param1 ), Convert.ToInt32( param2 ), Convert.ToInt32( param3 ) ); + } + + public static bool operator ==( Point3D l, Point3D r ) + { + return l.m_X == r.m_X && l.m_Y == r.m_Y && l.m_Z == r.m_Z; + } + + public static bool operator !=( Point3D l, Point3D r ) + { + return l.m_X != r.m_X || l.m_Y != r.m_Y || l.m_Z != r.m_Z; + } + + public static bool operator ==( Point3D l, IPoint3D r ) + { + if ( Object.ReferenceEquals( r, null ) ) + return false; + + return l.m_X == r.X && l.m_Y == r.Y && l.m_Z == r.Z; + } + + public static bool operator !=( Point3D l, IPoint3D r ) + { + if ( Object.ReferenceEquals( r, null ) ) + return false; + + return l.m_X != r.X || l.m_Y != r.Y || l.m_Z != r.Z; + } + + public int CompareTo( Point3D other ) + { + int v = ( m_X.CompareTo( other.m_X ) ); + + if ( v == 0 ) + { + v = ( m_Y.CompareTo( other.m_Y ) ); + + if ( v == 0 ) + v = ( m_Z.CompareTo( other.m_Z ) ); + } + + return v; + } + + public int CompareTo( object other ) + { + if ( other is Point3D ) + return this.CompareTo( (Point3D) other ); + else if ( other == null ) + return -1; + + throw new ArgumentException(); + } + } + + [NoSort] + [Parsable] + [PropertyObject] + public struct Rectangle2D + { + private Point2D m_Start; + private Point2D m_End; + + public Rectangle2D( IPoint2D start, IPoint2D end ) + { + m_Start = new Point2D( start ); + m_End = new Point2D( end ); + } + + public Rectangle2D( int x, int y, int width, int height ) + { + m_Start = new Point2D( x, y ); + m_End = new Point2D( x + width, y + height ); + } + + public void Set( int x, int y, int width, int height ) + { + m_Start = new Point2D( x, y ); + m_End = new Point2D( x + width, y + height ); + } + + public static Rectangle2D Parse( string value ) + { + int start = value.IndexOf( '(' ); + int end = value.IndexOf( ',', start + 1 ); + + string param1 = value.Substring( start + 1, end - (start + 1) ).Trim(); + + start = end; + end = value.IndexOf( ',', start + 1 ); + + string param2 = value.Substring( start + 1, end - (start + 1) ).Trim(); + + start = end; + end = value.IndexOf( ',', start + 1 ); + + string param3 = value.Substring( start + 1, end - (start + 1) ).Trim(); + + start = end; + end = value.IndexOf( ')', start + 1 ); + + string param4 = value.Substring( start + 1, end - (start + 1) ).Trim(); + + return new Rectangle2D( Convert.ToInt32( param1 ), Convert.ToInt32( param2 ), Convert.ToInt32( param3 ), Convert.ToInt32( param4 ) ); + } + + [CommandProperty( AccessLevel.Counselor )] + public Point2D Start + { + get + { + return m_Start; + } + set + { + m_Start = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public Point2D End + { + get + { + return m_End; + } + set + { + m_End = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int X + { + get + { + return m_Start.m_X; + } + set + { + m_Start.m_X = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Y + { + get + { + return m_Start.m_Y; + } + set + { + m_Start.m_Y = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Width + { + get + { + return m_End.m_X - m_Start.m_X; + } + set + { + m_End.m_X = m_Start.m_X + value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Height + { + get + { + return m_End.m_Y - m_Start.m_Y; + } + set + { + m_End.m_Y = m_Start.m_Y + value; + } + } + + public void MakeHold( Rectangle2D r ) + { + if ( r.m_Start.m_X < m_Start.m_X ) + m_Start.m_X = r.m_Start.m_X; + + if ( r.m_Start.m_Y < m_Start.m_Y ) + m_Start.m_Y = r.m_Start.m_Y; + + if ( r.m_End.m_X > m_End.m_X ) + m_End.m_X = r.m_End.m_X; + + if ( r.m_End.m_Y > m_End.m_Y ) + m_End.m_Y = r.m_End.m_Y; + } + + public bool Contains( Point3D p ) + { + return ( m_Start.m_X <= p.m_X && m_Start.m_Y <= p.m_Y && m_End.m_X > p.m_X && m_End.m_Y > p.m_Y ); + //return ( m_Start <= p && m_End > p ); + } + + public bool Contains( Point2D p ) + { + return ( m_Start.m_X <= p.m_X && m_Start.m_Y <= p.m_Y && m_End.m_X > p.m_X && m_End.m_Y > p.m_Y ); + //return ( m_Start <= p && m_End > p ); + } + + public bool Contains( IPoint2D p ) + { + return ( m_Start <= p && m_End > p ); + } + + public override string ToString() + { + return String.Format( "({0}, {1})+({2}, {3})", X, Y, Width, Height ); + } + } + + [NoSort] + [PropertyObject] + public struct Rectangle3D + { + private Point3D m_Start; + private Point3D m_End; + + public Rectangle3D( Point3D start, Point3D end ) + { + m_Start = start; + m_End = end; + } + + public Rectangle3D( int x, int y, int z, int width, int height, int depth ) + { + m_Start = new Point3D( x, y, z ); + m_End = new Point3D( x + width, y + height, z + depth ); + } + + [CommandProperty( AccessLevel.Counselor )] + public Point3D Start + { + get + { + return m_Start; + } + set + { + m_Start = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public Point3D End + { + get + { + return m_End; + } + set + { + m_End = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Width + { + get + { + return m_End.X - m_Start.X; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Height + { + get + { + return m_End.Y - m_Start.Y; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Depth + { + get + { + return m_End.Z - m_Start.Z; + } + } + + public bool Contains( Point3D p ) + { + return ( p.m_X >= m_Start.m_X ) + && ( p.m_X < m_End.m_X ) + && ( p.m_Y >= m_Start.m_Y ) + && ( p.m_Y < m_End.m_Y ) + && ( p.m_Z >= m_Start.m_Z ) + && ( p.m_Z < m_End.m_Z ); + } + + public bool Contains( IPoint3D p ) + { + return ( p.X >= m_Start.m_X ) + && ( p.X < m_End.m_X ) + && ( p.Y >= m_Start.m_Y ) + && ( p.Y < m_End.m_Y ) + && ( p.Z >= m_Start.m_Z ) + && ( p.Z < m_End.m_Z ); + } + } +} \ No newline at end of file diff --git a/Source/Guild.cs b/Source/Guild.cs new file mode 100644 index 0000000..b43086d --- /dev/null +++ b/Source/Guild.cs @@ -0,0 +1,145 @@ +/*************************************************************************** + * Guild.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Items; + +namespace Server.Guilds +{ + public enum GuildType + { + Regular, + Chaos, + Order + } + + public abstract class BaseGuild : ISerializable + { + private int m_Id; + + protected BaseGuild( int Id )//serialization ctor + { + m_Id = Id; + m_GuildList.Add( m_Id, this ); + if ( m_Id+1 > m_NextID ) + m_NextID = m_Id + 1; + } + + protected BaseGuild() + { + m_Id = m_NextID++; + m_GuildList.Add( m_Id, this ); + } + + [CommandProperty( AccessLevel.Counselor )] + public int Id { get { return m_Id; } } + + int ISerializable.TypeReference { + get { return 0; } + } + + int ISerializable.SerialIdentity { + get { return m_Id; } + } + + public abstract void Deserialize( GenericReader reader ); + public abstract void Serialize( GenericWriter writer ); + + public abstract string Abbreviation { get; set; } + public abstract string Name { get; set; } + public abstract GuildType Type { get; set; } + public abstract bool Disbanded{ get; } + public abstract void OnDelete( Mobile mob ); + + private static Dictionary m_GuildList = new Dictionary(); + private static int m_NextID = 1; + + public static Dictionary List + { + get + { + return m_GuildList; + } + } + + public static BaseGuild Find( int id ) + { + BaseGuild g; + + m_GuildList.TryGetValue( id, out g ); + + return g; + } + + public static BaseGuild FindByName( string name ) + { + foreach ( BaseGuild g in m_GuildList.Values ) + { + if ( g.Name == name ) + return g; + } + + return null; + } + + public static BaseGuild FindByAbbrev( string abbr ) + { + foreach ( BaseGuild g in m_GuildList.Values ) + { + if ( g.Abbreviation == abbr ) + return g; + } + + return null; + } + + public static List Search( string find ) + { + string[] words = find.ToLower().Split( ' ' ); + List results = new List(); + + foreach ( BaseGuild g in m_GuildList.Values ) + { + bool match = true; + string name = g.Name.ToLower(); + for (int i=0;i m_Entries; + private List m_Strings; + + internal int m_TextEntries, m_Switches; + + private static int m_NextSerial = 1; + + private int m_Serial; + private int m_TypeID; + private int m_X, m_Y; + + private bool m_Dragable = true; + private bool m_Closable = true; + private bool m_Resizable = true; + private bool m_Disposable = true; + + public static int GetTypeID( Type type ) + { + return type.FullName.GetHashCode(); + } + + public Gump( int x, int y ) + { + do + { + m_Serial = m_NextSerial++; + } while ( m_Serial == 0 ); // standard client apparently doesn't send a gump response packet if serial == 0 + + m_X = x; + m_Y = y; + + m_TypeID = GetTypeID( this.GetType() ); + + m_Entries = new List(); + m_Strings = new List(); + } + + public void Invalidate() + { + //if ( m_Strings.Count > 0 ) + // m_Strings.Clear(); + } + + public int TypeID + { + get + { + return m_TypeID; + } + } + + public List Entries + { + get{ return m_Entries; } + } + + public int Serial + { + get + { + return m_Serial; + } + set + { + if ( m_Serial != value ) + { + m_Serial = value; + Invalidate(); + } + } + } + + public int X + { + get + { + return m_X; + } + set + { + if ( m_X != value ) + { + m_X = value; + Invalidate(); + } + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + if ( m_Y != value ) + { + m_Y = value; + Invalidate(); + } + } + } + + public bool Disposable + { + get + { + return m_Disposable; + } + set + { + if ( m_Disposable != value ) + { + m_Disposable = value; + Invalidate(); + } + } + } + + public bool Resizable + { + get + { + return m_Resizable; + } + set + { + if ( m_Resizable != value ) + { + m_Resizable = value; + Invalidate(); + } + } + } + + public bool Dragable + { + get + { + return m_Dragable; + } + set + { + if ( m_Dragable != value ) + { + m_Dragable = value; + Invalidate(); + } + } + } + + public bool Closable + { + get + { + return m_Closable; + } + set + { + if ( m_Closable != value ) + { + m_Closable = value; + Invalidate(); + } + } + } + + public void AddPage( int page ) + { + Add( new GumpPage( page ) ); + } + + public void AddAlphaRegion( int x, int y, int width, int height ) + { + Add( new GumpAlphaRegion( x, y, width, height ) ); + } + + public void AddBackground( int x, int y, int width, int height, int gumpID ) + { + Add( new GumpBackground( x, y, width, height, gumpID ) ); + } + + public void AddButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param ) + { + Add( new GumpButton( x, y, normalID, pressedID, buttonID, type, param ) ); + } + + public void AddCheck( int x, int y, int inactiveID, int activeID, bool initialState, int switchID ) + { + Add( new GumpCheck( x, y, inactiveID, activeID, initialState, switchID ) ); + } + + public void AddGroup( int group ) + { + Add( new GumpGroup( group ) ); + } + + public void AddTooltip( int number ) + { + Add( new GumpTooltip( number ) ); + } + + public void AddHtml( int x, int y, int width, int height, string text, bool background, bool scrollbar ) + { + Add( new GumpHtml( x, y, width, height, text, background, scrollbar ) ); + } + + public void AddHtmlLocalized( int x, int y, int width, int height, int number, bool background, bool scrollbar ) + { + Add( new GumpHtmlLocalized( x, y, width, height, number, background, scrollbar ) ); + } + + public void AddHtmlLocalized( int x, int y, int width, int height, int number, int color, bool background, bool scrollbar ) + { + Add( new GumpHtmlLocalized( x, y, width, height, number, color, background, scrollbar ) ); + } + + public void AddHtmlLocalized( int x, int y, int width, int height, int number, string args, int color, bool background, bool scrollbar ) + { + Add( new GumpHtmlLocalized( x, y, width, height, number, args, color, background, scrollbar ) ); + } + + public void AddImage( int x, int y, int gumpID ) + { + Add( new GumpImage( x, y, gumpID ) ); + } + + public void AddImage( int x, int y, int gumpID, int hue ) + { + Add( new GumpImage( x, y, gumpID, hue ) ); + } + + public void AddImageTiled( int x, int y, int width, int height, int gumpID ) + { + Add( new GumpImageTiled( x, y, width, height, gumpID ) ); + } + + public void AddImageTiledButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param, int itemID, int hue, int width, int height ) + { + Add( new GumpImageTileButton( x, y, normalID, pressedID, buttonID, type, param, itemID, hue, width, height ) ); + } + public void AddImageTiledButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param, int itemID, int hue, int width, int height, int localizedTooltip ) + { + Add( new GumpImageTileButton( x, y, normalID, pressedID, buttonID, type, param, itemID, hue, width, height, localizedTooltip ) ); + } + + public void AddItem( int x, int y, int itemID ) + { + Add( new GumpItem( x, y, itemID ) ); + } + + public void AddItem( int x, int y, int itemID, int hue ) + { + Add( new GumpItem( x, y, itemID, hue ) ); + } + + public void AddLabel( int x, int y, int hue, string text ) + { + Add( new GumpLabel( x, y, hue, text ) ); + } + + public void AddLabelCropped( int x, int y, int width, int height, int hue, string text ) + { + Add( new GumpLabelCropped( x, y, width, height, hue, text ) ); + } + + public void AddRadio( int x, int y, int inactiveID, int activeID, bool initialState, int switchID ) + { + Add( new GumpRadio( x, y, inactiveID, activeID, initialState, switchID ) ); + } + + public void AddTextEntry( int x, int y, int width, int height, int hue, int entryID, string initialText ) + { + Add( new GumpTextEntry( x, y, width, height, hue, entryID, initialText ) ); + } + + public void AddTextEntry( int x, int y, int width, int height, int hue, int entryID, string initialText, int size ) { + Add( new GumpTextEntryLimited( x, y, width, height, hue, entryID, initialText, size ) ); + } + + public void Add( GumpEntry g ) + { + if ( g.Parent != this ) + { + g.Parent = this; + } + else if ( !m_Entries.Contains( g ) ) + { + Invalidate(); + m_Entries.Add( g ); + } + } + + public void Remove( GumpEntry g ) + { + Invalidate(); + m_Entries.Remove( g ); + g.Parent = null; + } + + public int Intern( string value ) + { + int indexOf = m_Strings.IndexOf( value ); + + if ( indexOf >= 0 ) + { + return indexOf; + } + else + { + Invalidate(); + m_Strings.Add( value ); + return m_Strings.Count - 1; + } + } + + public void SendTo( NetState state ) + { + state.AddGump( this ); + state.Send( Compile( state ) ); + } + + public static byte[] StringToBuffer( string str ) + { + return Encoding.ASCII.GetBytes( str ); + } + + private static byte[] m_BeginLayout = StringToBuffer( "{ " ); + private static byte[] m_EndLayout = StringToBuffer( " }" ); + + private static byte[] m_NoMove = StringToBuffer( "{ nomove }" ); + private static byte[] m_NoClose = StringToBuffer( "{ noclose }" ); + private static byte[] m_NoDispose = StringToBuffer( "{ nodispose }" ); + private static byte[] m_NoResize = StringToBuffer( "{ noresize }" ); + + private Packet Compile() + { + return Compile( null ); + } + + private Packet Compile( NetState ns ) + { + IGumpWriter disp; + + if ( ns != null && ns.Unpack ) + disp = new DisplayGumpPacked( this ); + else + disp = new DisplayGumpFast( this ); + + if ( !m_Dragable ) + disp.AppendLayout( m_NoMove ); + + if ( !m_Closable ) + disp.AppendLayout( m_NoClose ); + + if ( !m_Disposable ) + disp.AppendLayout( m_NoDispose ); + + if ( !m_Resizable ) + disp.AppendLayout( m_NoResize ); + + int count = m_Entries.Count; + GumpEntry e; + + for ( int i = 0; i < count; ++i ) + { + e = m_Entries[i]; + + disp.AppendLayout( m_BeginLayout ); + e.AppendTo( disp ); + disp.AppendLayout( m_EndLayout ); + } + + disp.WriteStrings( m_Strings ); + + disp.Flush(); + + m_TextEntries = disp.TextEntries; + m_Switches = disp.Switches; + + return disp as Packet; + } + + public virtual void OnResponse( NetState sender, RelayInfo info ) + { + } + + public virtual void OnServerClose( NetState owner ) { + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpAlphaRegion.cs b/Source/Gumps/GumpAlphaRegion.cs new file mode 100644 index 0000000..03d826f --- /dev/null +++ b/Source/Gumps/GumpAlphaRegion.cs @@ -0,0 +1,103 @@ +/*************************************************************************** + * GumpAlphaRegion.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpAlphaRegion : GumpEntry + { + private int m_X, m_Y; + private int m_Width, m_Height; + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int Width + { + get + { + return m_Width; + } + set + { + Delta( ref m_Width, value ); + } + } + + public int Height + { + get + { + return m_Height; + } + set + { + Delta( ref m_Height, value ); + } + } + + public GumpAlphaRegion( int x, int y, int width, int height ) + { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + } + + public override string Compile() + { + return String.Format( "{{ checkertrans {0} {1} {2} {3} }}", m_X, m_Y, m_Width, m_Height ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "checkertrans" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpBackground.cs b/Source/Gumps/GumpBackground.cs new file mode 100644 index 0000000..a7d1171 --- /dev/null +++ b/Source/Gumps/GumpBackground.cs @@ -0,0 +1,118 @@ +/*************************************************************************** + * GumpBackground.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpBackground : GumpEntry + { + private int m_X, m_Y; + private int m_Width, m_Height; + private int m_GumpID; + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int Width + { + get + { + return m_Width; + } + set + { + Delta( ref m_Width, value ); + } + } + + public int Height + { + get + { + return m_Height; + } + set + { + Delta( ref m_Height, value ); + } + } + + public int GumpID + { + get + { + return m_GumpID; + } + set + { + Delta( ref m_GumpID, value ); + } + } + + public GumpBackground( int x, int y, int width, int height, int gumpID ) + { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_GumpID = gumpID; + } + + public override string Compile() + { + return String.Format( "{{ resizepic {0} {1} {2} {3} {4} }}", m_X, m_Y, m_GumpID, m_Width, m_Height ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "resizepic" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_GumpID ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpButton.cs b/Source/Gumps/GumpButton.cs new file mode 100644 index 0000000..0d1c46e --- /dev/null +++ b/Source/Gumps/GumpButton.cs @@ -0,0 +1,164 @@ +/*************************************************************************** + * GumpButton.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public enum GumpButtonType + { + Page = 0, + Reply = 1 + } + + public class GumpButton : GumpEntry + { + private int m_X, m_Y; + private int m_ID1, m_ID2; + private int m_ButtonID; + private GumpButtonType m_Type; + private int m_Param; + + public GumpButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param ) + { + m_X = x; + m_Y = y; + m_ID1 = normalID; + m_ID2 = pressedID; + m_ButtonID = buttonID; + m_Type = type; + m_Param = param; + } + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int NormalID + { + get + { + return m_ID1; + } + set + { + Delta( ref m_ID1, value ); + } + } + + public int PressedID + { + get + { + return m_ID2; + } + set + { + Delta( ref m_ID2, value ); + } + } + + public int ButtonID + { + get + { + return m_ButtonID; + } + set + { + Delta( ref m_ButtonID, value ); + } + } + + public GumpButtonType Type + { + get + { + return m_Type; + } + set + { + if ( m_Type != value ) + { + m_Type = value; + + Gump parent = Parent; + + if ( parent != null ) + { + parent.Invalidate(); + } + } + } + } + + public int Param + { + get + { + return m_Param; + } + set + { + Delta( ref m_Param, value ); + } + } + + public override string Compile() + { + return String.Format( "{{ button {0} {1} {2} {3} {4} {5} {6} }}", m_X, m_Y, m_ID1, m_ID2, (int)m_Type, m_Param, m_ButtonID ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "button" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_ID1 ); + disp.AppendLayout( m_ID2 ); + disp.AppendLayout( (int)m_Type ); + disp.AppendLayout( m_Param ); + disp.AppendLayout( m_ButtonID ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpCheck.cs b/Source/Gumps/GumpCheck.cs new file mode 100644 index 0000000..a3a5319 --- /dev/null +++ b/Source/Gumps/GumpCheck.cs @@ -0,0 +1,135 @@ +/*************************************************************************** + * GumpCheck.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpCheck : GumpEntry + { + private int m_X, m_Y; + private int m_ID1, m_ID2; + private bool m_InitialState; + private int m_SwitchID; + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int InactiveID + { + get + { + return m_ID1; + } + set + { + Delta( ref m_ID1, value ); + } + } + + public int ActiveID + { + get + { + return m_ID2; + } + set + { + Delta( ref m_ID2, value ); + } + } + + public bool InitialState + { + get + { + return m_InitialState; + } + set + { + Delta( ref m_InitialState, value ); + } + } + + public int SwitchID + { + get + { + return m_SwitchID; + } + set + { + Delta( ref m_SwitchID, value ); + } + } + + public GumpCheck( int x, int y, int inactiveID, int activeID, bool initialState, int switchID ) + { + m_X = x; + m_Y = y; + m_ID1 = inactiveID; + m_ID2 = activeID; + m_InitialState = initialState; + m_SwitchID = switchID; + } + + public override string Compile() + { + return String.Format( "{{ checkbox {0} {1} {2} {3} {4} {5} }}", m_X, m_Y, m_ID1, m_ID2, m_InitialState ? 1 : 0, m_SwitchID ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "checkbox" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_ID1 ); + disp.AppendLayout( m_ID2 ); + disp.AppendLayout( m_InitialState ); + disp.AppendLayout( m_SwitchID ); + + disp.Switches++; + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpEntry.cs b/Source/Gumps/GumpEntry.cs new file mode 100644 index 0000000..fedd873 --- /dev/null +++ b/Source/Gumps/GumpEntry.cs @@ -0,0 +1,98 @@ +/*************************************************************************** + * GumpEntry.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public abstract class GumpEntry + { + private Gump m_Parent; + + protected GumpEntry() + { + } + + protected void Delta( ref int var, int val ) + { + if ( var != val ) + { + var = val; + + if ( m_Parent != null ) + { + m_Parent.Invalidate(); + } + } + } + + protected void Delta( ref bool var, bool val ) + { + if ( var != val ) + { + var = val; + + if ( m_Parent != null ) + { + m_Parent.Invalidate(); + } + } + } + + protected void Delta( ref string var, string val ) + { + if ( var != val ) + { + var = val; + + if ( m_Parent != null ) + { + m_Parent.Invalidate(); + } + } + } + + public Gump Parent + { + get + { + return m_Parent; + } + set + { + if ( m_Parent != value ) + { + if ( m_Parent != null ) + { + m_Parent.Remove( this ); + } + + m_Parent = value; + + m_Parent.Add( this ); + } + } + } + + public abstract string Compile(); + public abstract void AppendTo( IGumpWriter disp ); + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpGroup.cs b/Source/Gumps/GumpGroup.cs new file mode 100644 index 0000000..17651cb --- /dev/null +++ b/Source/Gumps/GumpGroup.cs @@ -0,0 +1,60 @@ +/*************************************************************************** + * GumpGroup.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpGroup : GumpEntry + { + private int m_Group; + + public GumpGroup( int group ) + { + m_Group = group; + } + + public int Group + { + get + { + return m_Group; + } + set + { + Delta( ref m_Group, value ); + } + } + + public override string Compile() + { + return String.Format( "{{ group {0} }}", m_Group ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "group" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_Group ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpHtml.cs b/Source/Gumps/GumpHtml.cs new file mode 100644 index 0000000..18879a3 --- /dev/null +++ b/Source/Gumps/GumpHtml.cs @@ -0,0 +1,147 @@ +/*************************************************************************** + * GumpHtml.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpHtml : GumpEntry + { + private int m_X, m_Y; + private int m_Width, m_Height; + private string m_Text; + private bool m_Background, m_Scrollbar; + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int Width + { + get + { + return m_Width; + } + set + { + Delta( ref m_Width, value ); + } + } + + public int Height + { + get + { + return m_Height; + } + set + { + Delta( ref m_Height, value ); + } + } + + public string Text + { + get + { + return m_Text; + } + set + { + Delta( ref m_Text, value ); + } + } + + public bool Background + { + get + { + return m_Background; + } + set + { + Delta( ref m_Background, value ); + } + } + + public bool Scrollbar + { + get + { + return m_Scrollbar; + } + set + { + Delta( ref m_Scrollbar, value ); + } + } + + public GumpHtml( int x, int y, int width, int height, string text, bool background, bool scrollbar ) + { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_Text = text; + m_Background = background; + m_Scrollbar = scrollbar; + } + + public override string Compile() + { + return String.Format( "{{ htmlgump {0} {1} {2} {3} {4} {5} {6} }}", m_X, m_Y, m_Width, m_Height, Parent.Intern( m_Text ), m_Background ? 1 : 0, m_Scrollbar ? 1 : 0 ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "htmlgump" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + disp.AppendLayout( Parent.Intern( m_Text ) ); + disp.AppendLayout( m_Background ); + disp.AppendLayout( m_Scrollbar ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpHtmlLocalized.cs b/Source/Gumps/GumpHtmlLocalized.cs new file mode 100644 index 0000000..ac7553d --- /dev/null +++ b/Source/Gumps/GumpHtmlLocalized.cs @@ -0,0 +1,287 @@ +/*************************************************************************** + * GumpHtmlLocalized.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public enum GumpHtmlLocalizedType + { + Plain, + Color, + Args + } + + public class GumpHtmlLocalized : GumpEntry + { + private int m_X, m_Y; + private int m_Width, m_Height; + private int m_Number; + private string m_Args; + private int m_Color; + private bool m_Background, m_Scrollbar; + + private GumpHtmlLocalizedType m_Type; + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int Width + { + get + { + return m_Width; + } + set + { + Delta( ref m_Width, value ); + } + } + + public int Height + { + get + { + return m_Height; + } + set + { + Delta( ref m_Height, value ); + } + } + + public int Number + { + get + { + return m_Number; + } + set + { + Delta( ref m_Number, value ); + } + } + + public string Args + { + get + { + return m_Args; + } + set + { + Delta( ref m_Args, value ); + } + } + + public int Color + { + get + { + return m_Color; + } + set + { + Delta( ref m_Color, value ); + } + } + + public bool Background + { + get + { + return m_Background; + } + set + { + Delta( ref m_Background, value ); + } + } + + public bool Scrollbar + { + get + { + return m_Scrollbar; + } + set + { + Delta( ref m_Scrollbar, value ); + } + } + + public GumpHtmlLocalizedType Type + { + get + { + return m_Type; + } + set + { + if ( m_Type != value ) + { + m_Type = value; + + if ( Parent != null ) + Parent.Invalidate(); + } + } + } + + public GumpHtmlLocalized( int x, int y, int width, int height, int number, bool background, bool scrollbar ) + { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_Number = number; + m_Background = background; + m_Scrollbar = scrollbar; + + m_Type = GumpHtmlLocalizedType.Plain; + } + + public GumpHtmlLocalized( int x, int y, int width, int height, int number, int color, bool background, bool scrollbar ) + { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_Number = number; + m_Color = color; + m_Background = background; + m_Scrollbar = scrollbar; + + m_Type = GumpHtmlLocalizedType.Color; + } + + public GumpHtmlLocalized( int x, int y, int width, int height, int number, string args, int color, bool background, bool scrollbar ) + { + // Are multiple arguments unsupported? And what about non ASCII arguments? + + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_Number = number; + m_Args = args; + m_Color = color; + m_Background = background; + m_Scrollbar = scrollbar; + + m_Type = GumpHtmlLocalizedType.Args; + } + + public override string Compile() + { + switch ( m_Type ) + { + case GumpHtmlLocalizedType.Plain: + return String.Format( "{{ xmfhtmlgump {0} {1} {2} {3} {4} {5} {6} }}", m_X, m_Y, m_Width, m_Height, m_Number, m_Background ? 1 : 0, m_Scrollbar ? 1 : 0 ); + + case GumpHtmlLocalizedType.Color: + return String.Format( "{{ xmfhtmlgumpcolor {0} {1} {2} {3} {4} {5} {6} {7} }}", m_X, m_Y, m_Width, m_Height, m_Number, m_Background ? 1 : 0, m_Scrollbar ? 1 : 0, m_Color ); + + default: // GumpHtmlLocalizedType.Args + return String.Format( "{{ xmfhtmltok {0} {1} {2} {3} {4} {5} {6} {7} @{8}@ }}", m_X, m_Y, m_Width, m_Height, m_Background ? 1 : 0, m_Scrollbar ? 1 : 0, m_Color, m_Number, m_Args ); + } + } + + private static byte[] m_LayoutNamePlain = Gump.StringToBuffer( "xmfhtmlgump" ); + private static byte[] m_LayoutNameColor = Gump.StringToBuffer( "xmfhtmlgumpcolor" ); + private static byte[] m_LayoutNameArgs = Gump.StringToBuffer( "xmfhtmltok" ); + + public override void AppendTo( IGumpWriter disp ) + { + switch ( m_Type ) + { + case GumpHtmlLocalizedType.Plain: + { + disp.AppendLayout( m_LayoutNamePlain ); + + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + disp.AppendLayout( m_Number ); + disp.AppendLayout( m_Background ); + disp.AppendLayout( m_Scrollbar ); + + break; + } + + case GumpHtmlLocalizedType.Color: + { + disp.AppendLayout( m_LayoutNameColor ); + + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + disp.AppendLayout( m_Number ); + disp.AppendLayout( m_Background ); + disp.AppendLayout( m_Scrollbar ); + disp.AppendLayout( m_Color ); + + break; + } + + case GumpHtmlLocalizedType.Args: + { + disp.AppendLayout( m_LayoutNameArgs ); + + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + disp.AppendLayout( m_Background ); + disp.AppendLayout( m_Scrollbar ); + disp.AppendLayout( m_Color ); + disp.AppendLayout( m_Number ); + disp.AppendLayout( m_Args ); + + break; + } + } + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpImage.cs b/Source/Gumps/GumpImage.cs new file mode 100644 index 0000000..905b567 --- /dev/null +++ b/Source/Gumps/GumpImage.cs @@ -0,0 +1,117 @@ +/*************************************************************************** + * GumpImage.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpImage : GumpEntry + { + private int m_X, m_Y; + private int m_GumpID; + private int m_Hue; + + public GumpImage( int x, int y, int gumpID ) : this( x, y, gumpID, 0 ) + { + } + + public GumpImage( int x, int y, int gumpID, int hue ) + { + m_X = x; + m_Y = y; + m_GumpID = gumpID; + m_Hue = hue; + } + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int GumpID + { + get + { + return m_GumpID; + } + set + { + Delta( ref m_GumpID, value ); + } + } + + public int Hue + { + get + { + return m_Hue; + } + set + { + Delta( ref m_Hue, value ); + } + } + + public override string Compile() + { + if ( m_Hue == 0 ) + return String.Format( "{{ gumppic {0} {1} {2} }}", m_X, m_Y, m_GumpID ); + else + return String.Format( "{{ gumppic {0} {1} {2} hue={3} }}", m_X, m_Y, m_GumpID, m_Hue ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "gumppic" ); + private static byte[] m_HueEquals = Gump.StringToBuffer( " hue=" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_GumpID ); + + if ( m_Hue != 0 ) + { + disp.AppendLayout( m_HueEquals ); + disp.AppendLayoutNS( m_Hue ); + } + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpImageTileButton.cs b/Source/Gumps/GumpImageTileButton.cs new file mode 100644 index 0000000..6b3de28 --- /dev/null +++ b/Source/Gumps/GumpImageTileButton.cs @@ -0,0 +1,251 @@ +/*************************************************************************** + * GumpImageTileButton.cs + * ------------------- + * begin : April 26, 2005 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpImageTileButton : GumpEntry + { + //Note, on OSI, The tooltip supports ONLY clilocs as far as I can figure out, and the tooltip ONLY works after the buttonTileArt (as far as I can tell from testing) + private int m_X, m_Y; + private int m_ID1, m_ID2; + private int m_ButtonID; + private GumpButtonType m_Type; + private int m_Param; + + private int m_ItemID; + private int m_Hue; + private int m_Width; + private int m_Height; + + private int m_LocalizedTooltip; + + public GumpImageTileButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param, int itemID, int hue, int width, int height ) : this(x, y, normalID, pressedID, buttonID, type, param, itemID, hue, width, height, -1 ) + { + } + public GumpImageTileButton( int x, int y, int normalID, int pressedID, int buttonID, GumpButtonType type, int param, int itemID, int hue, int width, int height, int localizedTooltip ) + { + m_X = x; + m_Y = y; + m_ID1 = normalID; + m_ID2 = pressedID; + m_ButtonID = buttonID; + m_Type = type; + m_Param = param; + + m_ItemID = itemID; + m_Hue = hue; + m_Width = width; + m_Height = height; + + m_LocalizedTooltip = localizedTooltip; + } + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int NormalID + { + get + { + return m_ID1; + } + set + { + Delta( ref m_ID1, value ); + } + } + + public int PressedID + { + get + { + return m_ID2; + } + set + { + Delta( ref m_ID2, value ); + } + } + + public int ButtonID + { + get + { + return m_ButtonID; + } + set + { + Delta( ref m_ButtonID, value ); + } + } + + public GumpButtonType Type + { + get + { + return m_Type; + } + set + { + if( m_Type != value ) + { + m_Type = value; + + Gump parent = Parent; + + if( parent != null ) + { + parent.Invalidate(); + } + } + } + } + + public int Param + { + get + { + return m_Param; + } + set + { + Delta( ref m_Param, value ); + } + } + + public int ItemID + { + get + { + return m_ItemID; + } + set + { + Delta( ref m_ItemID, value ); + } + } + + public int Hue + { + get + { + return m_Hue; + } + set + { + Delta( ref m_Hue, value ); + } + } + + public int Width + { + get + { + return m_Width; + } + set + { + Delta( ref m_Width, value ); + } + } + + public int Height + { + get + { + return m_Height; + } + set + { + Delta( ref m_Height, value ); + } + } + + public int LocalizedTooltip + { + get + { + return m_LocalizedTooltip; + } + set + { + m_LocalizedTooltip = value; + } + } + + public override string Compile() + { + if( m_LocalizedTooltip > 0 ) + return String.Format( "{{ buttontileart {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} }}{{ tooltip {11} }}", m_X, m_Y, m_ID1, m_ID2, (int)m_Type, m_Param, m_ButtonID, m_ItemID, m_Hue, m_Width, m_Height, m_LocalizedTooltip ); + else + return String.Format( "{{ buttontileart {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} }}", m_X, m_Y, m_ID1, m_ID2, (int)m_Type, m_Param, m_ButtonID, m_ItemID, m_Hue, m_Width, m_Height ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "buttontileart" ); + private static byte[] m_LayoutTooltip = Gump.StringToBuffer( " }{ tooltip" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_ID1 ); + disp.AppendLayout( m_ID2 ); + disp.AppendLayout( (int)m_Type ); + disp.AppendLayout( m_Param ); + disp.AppendLayout( m_ButtonID ); + + disp.AppendLayout( m_ItemID ); + disp.AppendLayout( m_Hue ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + + if( m_LocalizedTooltip > 0 ) + { + disp.AppendLayout( m_LayoutTooltip ); + disp.AppendLayout( m_LocalizedTooltip ); + } + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpImageTiled.cs b/Source/Gumps/GumpImageTiled.cs new file mode 100644 index 0000000..1687e69 --- /dev/null +++ b/Source/Gumps/GumpImageTiled.cs @@ -0,0 +1,118 @@ +/*************************************************************************** + * GumpImageTiled.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpImageTiled : GumpEntry + { + private int m_X, m_Y; + private int m_Width, m_Height; + private int m_GumpID; + + public GumpImageTiled( int x, int y, int width, int height, int gumpID ) + { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_GumpID = gumpID; + } + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int Width + { + get + { + return m_Width; + } + set + { + Delta( ref m_Width, value ); + } + } + + public int Height + { + get + { + return m_Height; + } + set + { + Delta( ref m_Height, value ); + } + } + + public int GumpID + { + get + { + return m_GumpID; + } + set + { + Delta( ref m_GumpID, value ); + } + } + + public override string Compile() + { + return String.Format( "{{ gumppictiled {0} {1} {2} {3} {4} }}", m_X, m_Y, m_Width, m_Height, m_GumpID ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "gumppictiled" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + disp.AppendLayout( m_GumpID ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpItem.cs b/Source/Gumps/GumpItem.cs new file mode 100644 index 0000000..0b74e0d --- /dev/null +++ b/Source/Gumps/GumpItem.cs @@ -0,0 +1,114 @@ +/*************************************************************************** + * GumpItem.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpItem : GumpEntry + { + private int m_X, m_Y; + private int m_ItemID; + private int m_Hue; + + public GumpItem( int x, int y, int itemID ) : this( x, y, itemID, 0 ) + { + } + + public GumpItem( int x, int y, int itemID, int hue ) + { + m_X = x; + m_Y = y; + m_ItemID = itemID; + m_Hue = hue; + } + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int ItemID + { + get + { + return m_ItemID; + } + set + { + Delta( ref m_ItemID, value ); + } + } + + public int Hue + { + get + { + return m_Hue; + } + set + { + Delta( ref m_Hue, value ); + } + } + + public override string Compile() + { + if ( m_Hue == 0 ) + return String.Format( "{{ tilepic {0} {1} {2} }}", m_X, m_Y, m_ItemID ); + else + return String.Format( "{{ tilepichue {0} {1} {2} {3} }}", m_X, m_Y, m_ItemID, m_Hue ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "tilepic" ); + private static byte[] m_LayoutNameHue = Gump.StringToBuffer( "tilepichue" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_Hue == 0 ? m_LayoutName : m_LayoutNameHue ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_ItemID ); + + if ( m_Hue != 0 ) + disp.AppendLayout( m_Hue ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpLabel.cs b/Source/Gumps/GumpLabel.cs new file mode 100644 index 0000000..6c2f5b8 --- /dev/null +++ b/Source/Gumps/GumpLabel.cs @@ -0,0 +1,104 @@ +/*************************************************************************** + * GumpLabel.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpLabel : GumpEntry + { + private int m_X, m_Y; + private int m_Hue; + private string m_Text; + + public GumpLabel( int x, int y, int hue, string text ) + { + m_X = x; + m_Y = y; + m_Hue = hue; + m_Text = text; + } + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int Hue + { + get + { + return m_Hue; + } + set + { + Delta( ref m_Hue, value ); + } + } + + public string Text + { + get + { + return m_Text; + } + set + { + Delta( ref m_Text, value ); + } + } + + public override string Compile() + { + return String.Format( "{{ text {0} {1} {2} {3} }}", m_X, m_Y, m_Hue, Parent.Intern( m_Text ) ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "text" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Hue ); + disp.AppendLayout( Parent.Intern( m_Text ) ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpLabelCropped.cs b/Source/Gumps/GumpLabelCropped.cs new file mode 100644 index 0000000..1a685ae --- /dev/null +++ b/Source/Gumps/GumpLabelCropped.cs @@ -0,0 +1,133 @@ +/*************************************************************************** + * GumpLabelCropped.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpLabelCropped : GumpEntry + { + private int m_X, m_Y; + private int m_Width, m_Height; + private int m_Hue; + private string m_Text; + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int Width + { + get + { + return m_Width; + } + set + { + Delta( ref m_Width, value ); + } + } + + public int Height + { + get + { + return m_Height; + } + set + { + Delta( ref m_Height, value ); + } + } + + public int Hue + { + get + { + return m_Hue; + } + set + { + Delta( ref m_Hue, value ); + } + } + + public string Text + { + get + { + return m_Text; + } + set + { + Delta( ref m_Text, value ); + } + } + + public GumpLabelCropped( int x, int y, int width, int height, int hue, string text ) + { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_Hue = hue; + m_Text = text; + } + + public override string Compile() + { + return String.Format( "{{ croppedtext {0} {1} {2} {3} {4} {5} }}", m_X, m_Y, m_Width, m_Height, m_Hue, Parent.Intern( m_Text ) ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "croppedtext" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + disp.AppendLayout( m_Hue ); + disp.AppendLayout( Parent.Intern( m_Text ) ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpPage.cs b/Source/Gumps/GumpPage.cs new file mode 100644 index 0000000..bde228c --- /dev/null +++ b/Source/Gumps/GumpPage.cs @@ -0,0 +1,60 @@ +/*************************************************************************** + * GumpPage.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpPage : GumpEntry + { + private int m_Page; + + public GumpPage( int page ) + { + m_Page = page; + } + + public int Page + { + get + { + return m_Page; + } + set + { + Delta( ref m_Page, value ); + } + } + + public override string Compile() + { + return String.Format( "{{ page {0} }}", m_Page ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "page" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_Page ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpRadio.cs b/Source/Gumps/GumpRadio.cs new file mode 100644 index 0000000..e2a0212 --- /dev/null +++ b/Source/Gumps/GumpRadio.cs @@ -0,0 +1,135 @@ +/*************************************************************************** + * GumpRadio.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpRadio : GumpEntry + { + private int m_X, m_Y; + private int m_ID1, m_ID2; + private bool m_InitialState; + private int m_SwitchID; + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int InactiveID + { + get + { + return m_ID1; + } + set + { + Delta( ref m_ID1, value ); + } + } + + public int ActiveID + { + get + { + return m_ID2; + } + set + { + Delta( ref m_ID2, value ); + } + } + + public bool InitialState + { + get + { + return m_InitialState; + } + set + { + Delta( ref m_InitialState, value ); + } + } + + public int SwitchID + { + get + { + return m_SwitchID; + } + set + { + Delta( ref m_SwitchID, value ); + } + } + + public GumpRadio( int x, int y, int inactiveID, int activeID, bool initialState, int switchID ) + { + m_X = x; + m_Y = y; + m_ID1 = inactiveID; + m_ID2 = activeID; + m_InitialState = initialState; + m_SwitchID = switchID; + } + + public override string Compile() + { + return String.Format( "{{ radio {0} {1} {2} {3} {4} {5} }}", m_X, m_Y, m_ID1, m_ID2, m_InitialState ? 1 : 0, m_SwitchID ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "radio" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_ID1 ); + disp.AppendLayout( m_ID2 ); + disp.AppendLayout( m_InitialState ); + disp.AppendLayout( m_SwitchID ); + + disp.Switches++; + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpTextEntry.cs b/Source/Gumps/GumpTextEntry.cs new file mode 100644 index 0000000..9594dc8 --- /dev/null +++ b/Source/Gumps/GumpTextEntry.cs @@ -0,0 +1,150 @@ +/*************************************************************************** + * GumpTextEntry.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpTextEntry : GumpEntry + { + private int m_X, m_Y; + private int m_Width, m_Height; + private int m_Hue; + private int m_EntryID; + private string m_InitialText; + + public int X + { + get + { + return m_X; + } + set + { + Delta( ref m_X, value ); + } + } + + public int Y + { + get + { + return m_Y; + } + set + { + Delta( ref m_Y, value ); + } + } + + public int Width + { + get + { + return m_Width; + } + set + { + Delta( ref m_Width, value ); + } + } + + public int Height + { + get + { + return m_Height; + } + set + { + Delta( ref m_Height, value ); + } + } + + public int Hue + { + get + { + return m_Hue; + } + set + { + Delta( ref m_Hue, value ); + } + } + + public int EntryID + { + get + { + return m_EntryID; + } + set + { + Delta( ref m_EntryID, value ); + } + } + + public string InitialText + { + get + { + return m_InitialText; + } + set + { + Delta( ref m_InitialText, value ); + } + } + + public GumpTextEntry( int x, int y, int width, int height, int hue, int entryID, string initialText ) + { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_Hue = hue; + m_EntryID = entryID; + m_InitialText = initialText; + } + + public override string Compile() + { + return String.Format( "{{ textentry {0} {1} {2} {3} {4} {5} {6} }}", m_X, m_Y, m_Width, m_Height, m_Hue, m_EntryID, Parent.Intern( m_InitialText ) ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "textentry" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + disp.AppendLayout( m_Hue ); + disp.AppendLayout( m_EntryID ); + disp.AppendLayout( Parent.Intern( m_InitialText ) ); + + disp.TextEntries++; + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpTextEntryLimited.cs b/Source/Gumps/GumpTextEntryLimited.cs new file mode 100644 index 0000000..356b716 --- /dev/null +++ b/Source/Gumps/GumpTextEntryLimited.cs @@ -0,0 +1,136 @@ +/*************************************************************************** + * GumpTextEntryLimited.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps { + public class GumpTextEntryLimited : GumpEntry { + private int m_X, m_Y; + private int m_Width, m_Height; + private int m_Hue; + private int m_EntryID; + private string m_InitialText; + private int m_Size; + + public int X { + get { + return m_X; + } + set { + Delta( ref m_X, value ); + } + } + + public int Y { + get { + return m_Y; + } + set { + Delta( ref m_Y, value ); + } + } + + public int Width { + get { + return m_Width; + } + set { + Delta( ref m_Width, value ); + } + } + + public int Height { + get { + return m_Height; + } + set { + Delta( ref m_Height, value ); + } + } + + public int Hue { + get { + return m_Hue; + } + set { + Delta( ref m_Hue, value ); + } + } + + public int EntryID { + get { + return m_EntryID; + } + set { + Delta( ref m_EntryID, value ); + } + } + + public string InitialText { + get { + return m_InitialText; + } + set { + Delta( ref m_InitialText, value ); + } + } + + public int Size { + get { + return m_Size; + } + set { + Delta( ref m_Size, value ); + } + } + + public GumpTextEntryLimited( int x, int y, int width, int height, int hue, int entryID, string initialText, int size ) { + m_X = x; + m_Y = y; + m_Width = width; + m_Height = height; + m_Hue = hue; + m_EntryID = entryID; + m_InitialText = initialText; + m_Size = size; + } + + public override string Compile() { + return String.Format( "{{ textentrylimited {0} {1} {2} {3} {4} {5} {6} {7} }}", m_X, m_Y, m_Width, m_Height, m_Hue, m_EntryID, Parent.Intern( m_InitialText ), m_Size ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "textentrylimited" ); + + public override void AppendTo( IGumpWriter disp ) { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_X ); + disp.AppendLayout( m_Y ); + disp.AppendLayout( m_Width ); + disp.AppendLayout( m_Height ); + disp.AppendLayout( m_Hue ); + disp.AppendLayout( m_EntryID ); + disp.AppendLayout( Parent.Intern( m_InitialText ) ); + disp.AppendLayout( m_Size ); + + disp.TextEntries++; + } + } +} \ No newline at end of file diff --git a/Source/Gumps/GumpTooltip.cs b/Source/Gumps/GumpTooltip.cs new file mode 100644 index 0000000..4a663c1 --- /dev/null +++ b/Source/Gumps/GumpTooltip.cs @@ -0,0 +1,60 @@ +/*************************************************************************** + * GumpTooltip.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Gumps +{ + public class GumpTooltip : GumpEntry + { + private int m_Number; + + public GumpTooltip( int number ) + { + m_Number = number; + } + + public int Number + { + get + { + return m_Number; + } + set + { + Delta( ref m_Number, value ); + } + } + + public override string Compile() + { + return String.Format( "{{ tooltip {0} }}", m_Number ); + } + + private static byte[] m_LayoutName = Gump.StringToBuffer( "tooltip" ); + + public override void AppendTo( IGumpWriter disp ) + { + disp.AppendLayout( m_LayoutName ); + disp.AppendLayout( m_Number ); + } + } +} \ No newline at end of file diff --git a/Source/Gumps/RelayInfo.cs b/Source/Gumps/RelayInfo.cs new file mode 100644 index 0000000..4f10cce --- /dev/null +++ b/Source/Gumps/RelayInfo.cs @@ -0,0 +1,116 @@ +/*************************************************************************** + * RelayInfo.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Gumps +{ + public class TextRelay + { + private int m_EntryID; + private string m_Text; + + public TextRelay( int entryID, string text ) + { + m_EntryID = entryID; + m_Text = text; + } + + public int EntryID + { + get + { + return m_EntryID; + } + } + + public string Text + { + get + { + return m_Text; + } + } + } + + public class RelayInfo + { + private int m_ButtonID; + private int[] m_Switches; + private TextRelay[] m_TextEntries; + + public RelayInfo( int buttonID, int[] switches, TextRelay[] textEntries ) + { + m_ButtonID = buttonID; + m_Switches = switches; + m_TextEntries = textEntries; + } + + public int ButtonID + { + get + { + return m_ButtonID; + } + } + + public int[] Switches + { + get + { + return m_Switches; + } + } + + public TextRelay[] TextEntries + { + get + { + return m_TextEntries; + } + } + + public bool IsSwitched( int switchID ) + { + for ( int i = 0; i < m_Switches.Length; ++i ) + { + if ( m_Switches[i] == switchID ) + { + return true; + } + } + + return false; + } + + public TextRelay GetTextEntry( int entryID ) + { + for ( int i = 0; i < m_TextEntries.Length; ++i ) + { + if ( m_TextEntries[i].EntryID == entryID ) + { + return m_TextEntries[i]; + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/Source/HuePicker.cs b/Source/HuePicker.cs new file mode 100644 index 0000000..7ee67ce --- /dev/null +++ b/Source/HuePicker.cs @@ -0,0 +1,69 @@ +/*************************************************************************** + * HuePicker.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.HuePickers +{ + public class HuePicker + { + private static int m_NextSerial = 1; + + private int m_Serial; + private int m_ItemID; + + public int Serial + { + get + { + return m_Serial; + } + } + + public int ItemID + { + get + { + return m_ItemID; + } + } + + public HuePicker( int itemID ) + { + do + { + m_Serial = m_NextSerial++; + } while ( m_Serial == 0 ); + + m_ItemID = itemID; + } + + public virtual void OnResponse( int hue ) + { + } + + public void SendTo( NetState state ) + { + state.Send( new DisplayHuePicker( this ) ); + state.AddHuePicker( this ); + } + } +} \ No newline at end of file diff --git a/Source/IAccount.cs b/Source/IAccount.cs new file mode 100644 index 0000000..27cc15b --- /dev/null +++ b/Source/IAccount.cs @@ -0,0 +1,39 @@ +/*************************************************************************** + * IAccount.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Accounting +{ + public interface IAccount + { + string Username { get; set; } + AccessLevel AccessLevel { get; set; } + + int Length { get; } + int Limit { get; } + int Count { get; } + Mobile this[int index] { get; set; } + + void Delete(); + void SetPassword( string password ); + bool CheckPassword( string password ); + } +} diff --git a/Source/IEntity.cs b/Source/IEntity.cs new file mode 100644 index 0000000..8f7bfe1 --- /dev/null +++ b/Source/IEntity.cs @@ -0,0 +1,113 @@ +/*************************************************************************** + * IEntity.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + public interface IEntity : IPoint3D, IComparable, IComparable + { + Serial Serial{ get; } + Point3D Location{ get; } + Map Map{ get; } + + void Delete(); + void ProcessDelta(); + } + + public class Entity : IEntity, IComparable + { + public int CompareTo( IEntity other ) + { + if ( other == null ) + return -1; + + return m_Serial.CompareTo( other.Serial ); + } + + public int CompareTo( Entity other ) + { + return this.CompareTo( (IEntity) other ); + } + + public int CompareTo( object other ) + { + if ( other == null || other is IEntity ) + return this.CompareTo( (IEntity) other ); + + throw new ArgumentException(); + } + + private Serial m_Serial; + private Point3D m_Location; + private Map m_Map; + + public Entity( Serial serial, Point3D loc, Map map ) + { + m_Serial = serial; + m_Location = loc; + m_Map = map; + } + + public Serial Serial { + get { + return m_Serial; + } + } + + public Point3D Location { + get { + return m_Location; + } + } + + public int X { + get { + return m_Location.X; + } + } + + public int Y { + get { + return m_Location.Y; + } + } + + public int Z { + get { + return m_Location.Z; + } + } + + public Map Map { + get { + return m_Map; + } + } + + public void Delete() + { + } + + public void ProcessDelta() + { + } + } +} \ No newline at end of file diff --git a/Source/Insensitive.cs b/Source/Insensitive.cs new file mode 100644 index 0000000..90b6757 --- /dev/null +++ b/Source/Insensitive.cs @@ -0,0 +1,77 @@ +/*************************************************************************** + * Insensitive.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; + +namespace Server +{ + public static class Insensitive + { + private static IComparer m_Comparer = CaseInsensitiveComparer.Default; + + public static IComparer Comparer + { + get{ return m_Comparer; } + } + + public static int Compare( string a, string b ) + { + return m_Comparer.Compare( a, b ); + } + + public static bool Equals( string a, string b ) + { + if ( a == null && b == null ) + return true; + else if ( a == null || b == null || a.Length != b.Length ) + return false; + + return ( m_Comparer.Compare( a, b ) == 0 ); + } + + public static bool StartsWith( string a, string b ) + { + if ( a == null || b == null || a.Length < b.Length ) + return false; + + return ( m_Comparer.Compare( a.Substring( 0, b.Length ), b ) == 0 ); + } + + public static bool EndsWith( string a, string b ) + { + if ( a == null || b == null || a.Length < b.Length ) + return false; + + return ( m_Comparer.Compare( a.Substring( a.Length - b.Length ), b ) == 0 ); + } + + public static bool Contains( string a, string b ) + { + if ( a == null || b == null || a.Length < b.Length ) + return false; + + a = a.ToLower(); + b = b.ToLower(); + + return ( a.IndexOf( b ) >= 0 ); + } + } +} \ No newline at end of file diff --git a/Source/Interfaces.cs b/Source/Interfaces.cs new file mode 100644 index 0000000..c475b15 --- /dev/null +++ b/Source/Interfaces.cs @@ -0,0 +1,116 @@ +/*************************************************************************** + * Interfaces.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using Server.Mobiles; + +namespace Server.Mobiles +{ + public interface IMount + { + Mobile Rider{ get; set; } + void OnRiderDamaged( int amount, Mobile from, bool willKill ); + } + + public interface IMountItem + { + IMount Mount{ get; } + } +} + +namespace Server +{ + public interface IVendor + { + bool OnBuyItems( Mobile from, List list ); + bool OnSellItems( Mobile from, List list ); + + DateTime LastRestock{ get; set; } + TimeSpan RestockDelay{ get; } + void Restock(); + } + + public interface IPoint2D + { + int X{ get; } + int Y{ get; } + } + + public interface IPoint3D : IPoint2D + { + int Z{ get; } + } + + public interface ICarvable + { + void Carve( Mobile from, Item item ); + } + + public interface IWeapon + { + int MaxRange{ get; } + void OnBeforeSwing( Mobile attacker, Mobile defender ); + TimeSpan OnSwing( Mobile attacker, Mobile defender ); + void GetStatusDamage( Mobile from, out int min, out int max ); + } + + public interface IHued + { + int HuedItemID{ get; } + } + + public interface ISpell + { + bool IsCasting{ get; } + void OnCasterHurt(); + void OnCasterKilled(); + void OnConnectionChanged(); + bool OnCasterMoving( Direction d ); + bool OnCasterEquiping( Item item ); + bool OnCasterUsingObject( object o ); + bool OnCastInTown( Region r ); + } + + public interface IParty + { + void OnStamChanged( Mobile m ); + void OnManaChanged( Mobile m ); + void OnStatsQuery( Mobile beholder, Mobile beheld ); + } + + public interface ISpawner + { + bool UnlinkOnTaming { get; } + Point3D HomeLocation { get; } + int HomeRange { get; } + + void Remove(ISpawnable spawn); + } + + public interface ISpawnable : IEntity + { + void OnBeforeSpawn(Point3D location, Map map); + void MoveToWorld(Point3D location, Map map); + void OnAfterSpawn(); + + ISpawner Spawner { get; set; } + } +} \ No newline at end of file diff --git a/Source/Item.cs b/Source/Item.cs new file mode 100644 index 0000000..fb9f1cc --- /dev/null +++ b/Source/Item.cs @@ -0,0 +1,4770 @@ +/*************************************************************************** + * Item.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using Server.Network; +using Server.Items; +using Server.ContextMenus; + +namespace Server +{ + /// + /// Enumeration of item layer values. + /// + public enum Layer : byte + { + /// + /// Invalid layer. + /// + Invalid = 0x00, + /// + /// First valid layer. Equivalent to Layer.OneHanded. + /// + FirstValid = 0x01, + /// + /// One handed weapon. + /// + OneHanded = 0x01, + /// + /// Two handed weapon or shield. + /// + TwoHanded = 0x02, + /// + /// Shoes. + /// + Shoes = 0x03, + /// + /// Pants. + /// + Pants = 0x04, + /// + /// Shirts. + /// + Shirt = 0x05, + /// + /// Helmets, hats, and masks. + /// + Helm = 0x06, + /// + /// Gloves. + /// + Gloves = 0x07, + /// + /// Rings. + /// + Ring = 0x08, + /// + /// Talismans. + /// + Talisman = 0x09, + /// + /// Gorgets and necklaces. + /// + Neck = 0x0A, + /// + /// Hair. + /// + Hair = 0x0B, + /// + /// Half aprons. + /// + Waist = 0x0C, + /// + /// Torso, inner layer. + /// + InnerTorso = 0x0D, + /// + /// Bracelets. + /// + Bracelet = 0x0E, + /// + /// Unused. + /// + Unused_xF = 0x0F, + /// + /// Beards and mustaches. + /// + FacialHair = 0x10, + /// + /// Torso, outer layer. + /// + MiddleTorso = 0x11, + /// + /// Earings. + /// + Earrings = 0x12, + /// + /// Arms and sleeves. + /// + Arms = 0x13, + /// + /// Cloaks. + /// + Cloak = 0x14, + /// + /// Backpacks. + /// + Backpack = 0x15, + /// + /// Torso, outer layer. + /// + OuterTorso = 0x16, + /// + /// Leggings, outer layer. + /// + OuterLegs = 0x17, + /// + /// Leggings, inner layer. + /// + InnerLegs = 0x18, + /// + /// Last valid non-internal layer. Equivalent to Layer.InnerLegs. + /// + LastUserValid= 0x18, + /// + /// Mount item layer. + /// + Mount = 0x19, + /// + /// Vendor 'buy pack' layer. + /// + ShopBuy = 0x1A, + /// + /// Vendor 'resale pack' layer. + /// + ShopResale = 0x1B, + /// + /// Vendor 'sell pack' layer. + /// + ShopSell = 0x1C, + /// + /// Inn box layer. + /// + Inn = 0x1D, + /// + /// Last valid layer. Equivalent to Layer.Inn. + /// + LastValid = 0x1D + } + + /// + /// Internal flags used to signal how the item should be updated and resent to nearby clients. + /// + [Flags] + public enum ItemDelta + { + /// + /// Nothing. + /// + None = 0x00000000, + /// + /// Resend the item. + /// + Update = 0x00000001, + /// + /// Resend the item only if it is equiped. + /// + EquipOnly = 0x00000002, + /// + /// Resend the item's properties. + /// + Properties = 0x00000004 + } + + /// + /// Enumeration containing possible ways to handle item ownership on death. + /// + public enum DeathMoveResult + { + /// + /// The item should be placed onto the corpse. + /// + MoveToCorpse, + /// + /// The item should remain equiped. + /// + RemainEquiped, + /// + /// The item should be placed into the owners backpack. + /// + MoveToBackpack + } + + /// + /// Enumeration containing all possible light types. These are only applicable to light source items, like lanterns, candles, braziers, etc. + /// + public enum LightType + { + /// + /// Window shape, arched, ray shining east. + /// + ArchedWindowEast, + /// + /// Medium circular shape. + /// + Circle225, + /// + /// Small circular shape. + /// + Circle150, + /// + /// Door shape, shining south. + /// + DoorSouth, + /// + /// Door shape, shining east. + /// + DoorEast, + /// + /// Large semicircular shape (180 degrees), north wall. + /// + NorthBig, + /// + /// Large pie shape (90 degrees), north-east corner. + /// + NorthEastBig, + /// + /// Large semicircular shape (180 degrees), east wall. + /// + EastBig, + /// + /// Large semicircular shape (180 degrees), west wall. + /// + WestBig, + /// + /// Large pie shape (90 degrees), south-west corner. + /// + SouthWestBig, + /// + /// Large semicircular shape (180 degrees), south wall. + /// + SouthBig, + /// + /// Medium semicircular shape (180 degrees), north wall. + /// + NorthSmall, + /// + /// Medium pie shape (90 degrees), north-east corner. + /// + NorthEastSmall, + /// + /// Medium semicircular shape (180 degrees), east wall. + /// + EastSmall, + /// + /// Medium semicircular shape (180 degrees), west wall. + /// + WestSmall, + /// + /// Medium semicircular shape (180 degrees), south wall. + /// + SouthSmall, + /// + /// Shaped like a wall decoration, north wall. + /// + DecorationNorth, + /// + /// Shaped like a wall decoration, north-east corner. + /// + DecorationNorthEast, + /// + /// Small semicircular shape (180 degrees), east wall. + /// + EastTiny, + /// + /// Shaped like a wall decoration, west wall. + /// + DecorationWest, + /// + /// Shaped like a wall decoration, south-west corner. + /// + DecorationSouthWest, + /// + /// Small semicircular shape (180 degrees), south wall. + /// + SouthTiny, + /// + /// Window shape, rectangular, no ray, shining south. + /// + RectWindowSouthNoRay, + /// + /// Window shape, rectangular, no ray, shining east. + /// + RectWindowEastNoRay, + /// + /// Window shape, rectangular, ray shining south. + /// + RectWindowSouth, + /// + /// Window shape, rectangular, ray shining east. + /// + RectWindowEast, + /// + /// Window shape, arched, no ray, shining south. + /// + ArchedWindowSouthNoRay, + /// + /// Window shape, arched, no ray, shining east. + /// + ArchedWindowEastNoRay, + /// + /// Window shape, arched, ray shining south. + /// + ArchedWindowSouth, + /// + /// Large circular shape. + /// + Circle300, + /// + /// Large pie shape (90 degrees), north-west corner. + /// + NorthWestBig, + /// + /// Negative light. Medium pie shape (90 degrees), south-east corner. + /// + DarkSouthEast, + /// + /// Negative light. Medium semicircular shape (180 degrees), south wall. + /// + DarkSouth, + /// + /// Negative light. Medium pie shape (90 degrees), north-west corner. + /// + DarkNorthWest, + /// + /// Negative light. Medium pie shape (90 degrees), south-east corner. Equivalent to LightType.SouthEast. + /// + DarkSouthEast2, + /// + /// Negative light. Medium circular shape (180 degrees), east wall. + /// + DarkEast, + /// + /// Negative light. Large circular shape. + /// + DarkCircle300, + /// + /// Opened door shape, shining south. + /// + DoorOpenSouth, + /// + /// Opened door shape, shining east. + /// + DoorOpenEast, + /// + /// Window shape, square, ray shining east. + /// + SquareWindowEast, + /// + /// Window shape, square, no ray, shining east. + /// + SquareWindowEastNoRay, + /// + /// Window shape, square, ray shining south. + /// + SquareWindowSouth, + /// + /// Window shape, square, no ray, shining south. + /// + SquareWindowSouthNoRay, + /// + /// Empty. + /// + Empty, + /// + /// Window shape, skinny, no ray, shining south. + /// + SkinnyWindowSouthNoRay, + /// + /// Window shape, skinny, ray shining east. + /// + SkinnyWindowEast, + /// + /// Window shape, skinny, no ray, shining east. + /// + SkinnyWindowEastNoRay, + /// + /// Shaped like a hole, shining south. + /// + HoleSouth, + /// + /// Shaped like a hole, shining south. + /// + HoleEast, + /// + /// Large circular shape with a moongate graphic embeded. + /// + Moongate, + /// + /// Unknown usage. Many rows of slightly angled lines. + /// + Strips, + /// + /// Shaped like a small hole, shining south. + /// + SmallHoleSouth, + /// + /// Shaped like a small hole, shining east. + /// + SmallHoleEast, + /// + /// Large semicircular shape (180 degrees), north wall. Identical graphic as LightType.NorthBig, but slightly different positioning. + /// + NorthBig2, + /// + /// Large semicircular shape (180 degrees), west wall. Identical graphic as LightType.WestBig, but slightly different positioning. + /// + WestBig2, + /// + /// Large pie shape (90 degrees), north-west corner. Equivalent to LightType.NorthWestBig. + /// + NorthWestBig2 + } + + /// + /// Enumeration of an item's loot and steal state. + /// + public enum LootType : byte + { + /// + /// Stealable. Lootable. + /// + Regular = 0, + /// + /// Unstealable. Unlootable, always. + /// + Blessed = 1 + } + + public class BounceInfo + { + public Map m_Map; + public Point3D m_Location, m_WorldLoc; + public object m_Parent; + + public BounceInfo( Item item ) + { + m_Map = item.Map; + m_Location = item.Location; + m_WorldLoc = item.GetWorldLocation(); + m_Parent = item.Parent; + } + + private BounceInfo( Map map, Point3D loc, Point3D worldLoc, object parent ) + { + m_Map = map; + m_Location = loc; + m_WorldLoc = worldLoc; + m_Parent = parent; + } + + public static BounceInfo Deserialize( GenericReader reader ) + { + if ( reader.ReadBool() ) + { + Map map = reader.ReadMap(); + Point3D loc = reader.ReadPoint3D(); + Point3D worldLoc = reader.ReadPoint3D(); + + object parent; + + Serial serial = reader.ReadInt(); + + if ( serial.IsItem ) + parent = World.FindItem( serial ); + else if ( serial.IsMobile ) + parent = World.FindMobile( serial ); + else + parent = null; + + return new BounceInfo( map, loc, worldLoc, parent ); + } + else + { + return null; + } + } + + public static void Serialize( BounceInfo info, GenericWriter writer ) + { + if ( info == null ) + { + writer.Write( false ); + } + else + { + writer.Write( true ); + + writer.Write( info.m_Map ); + writer.Write( info.m_Location ); + writer.Write( info.m_WorldLoc ); + + if ( info.m_Parent is Mobile ) + writer.Write( (Mobile) info.m_Parent ); + else if ( info.m_Parent is Item ) + writer.Write( (Item) info.m_Parent ); + else + writer.Write( (Serial) 0 ); + } + } + } + + public enum TotalType + { + Gold, + Items, + Weight, + } + + [Flags] + public enum ExpandFlag + { + None = 0x00, + + Name = 0x01, + Items = 0x02, + Bounce = 0x04, + Holder = 0x08, + Blessed = 0x10, + TempFlag = 0x20, + SaveFlag = 0x40, + Weight = 0x80 + } + + public class Item : IEntity, IHued, IComparable, ISerializable, ISpawnable + { + public static readonly List EmptyItems = new List(); + + public int CompareTo( IEntity other ) + { + if ( other == null ) + return -1; + + return m_Serial.CompareTo( other.Serial ); + } + + public int CompareTo( Item other ) + { + return this.CompareTo( (IEntity) other ); + } + + public int CompareTo( object other ) + { + if ( other == null || other is IEntity ) + return this.CompareTo( (IEntity) other ); + + throw new ArgumentException(); + } + + #region Standard fields + private Serial m_Serial; + private Point3D m_Location; + private int m_ItemID; + private int m_Hue; + private int m_Amount; + private Layer m_Layer; + private object m_Parent; // Mobile, Item, or null=World + private Map m_Map; + private LootType m_LootType; + private DateTime m_LastMovedTime; + private Direction m_Direction; + #endregion + + private ItemDelta m_DeltaFlags; + private ImplFlag m_Flags; + + #region Packet caches + private Packet m_WorldPacket; + private Packet m_RemovePacket; + + private Packet m_OPLPacket; + private ObjectPropertyList m_PropertyList; + #endregion + + public int m_GraphicID; + [CommandProperty(AccessLevel.Owner)] + public int GraphicID { get { return m_GraphicID; } set { m_GraphicID = value; InvalidateProperties(); } } + + public string m_SpecialName; + [CommandProperty(AccessLevel.Owner)] + public string SpecialName { get { return m_SpecialName; } set { m_SpecialName = value; InvalidateProperties(); } } + + public int m_Magical; + [CommandProperty(AccessLevel.Owner)] + public int Magical { get { return m_Magical; } set { m_Magical = value; InvalidateProperties(); } } + + public int m_Uses; + [CommandProperty(AccessLevel.Owner)] + public int Uses { get { return m_Uses; } set { m_Uses = value; InvalidateProperties(); } } + + public int m_UsesMax; + [CommandProperty(AccessLevel.Owner)] + public int UsesMax { get { return m_UsesMax; } set { m_UsesMax = value; InvalidateProperties(); } } + + public int TempFlags + { + get + { + CompactInfo info = LookupCompactInfo(); + + if ( info != null ) + return info.m_TempFlags; + + return 0; + } + set + { + CompactInfo info = AcquireCompactInfo(); + + info.m_TempFlags = value; + + if ( info.m_TempFlags == 0 ) + VerifyCompactInfo(); + } + } + + public int SavedFlags + { + get + { + CompactInfo info = LookupCompactInfo(); + + if ( info != null ) + return info.m_SavedFlags; + + return 0; + } + set + { + CompactInfo info = AcquireCompactInfo(); + + info.m_SavedFlags = value; + + if ( info.m_SavedFlags == 0 ) + VerifyCompactInfo(); + } + } + + /// + /// The who is currently holding this item. + /// + public Mobile HeldBy + { + get + { + CompactInfo info = LookupCompactInfo(); + + if ( info != null ) + return info.m_HeldBy; + + return null; + } + set + { + CompactInfo info = AcquireCompactInfo(); + + info.m_HeldBy = value; + + if ( info.m_HeldBy == null ) + VerifyCompactInfo(); + } + } + + [Flags] + private enum ImplFlag : byte + { + None = 0x00, + Visible = 0x01, + Movable = 0x02, + Deleted = 0x04, + Stackable = 0x08, + InQueue = 0x10 + } + + private class CompactInfo + { + public string m_Name; + + public List m_Items; + public BounceInfo m_Bounce; + + public Mobile m_HeldBy; + public Mobile m_BlessedFor; + + public int m_TempFlags; + public int m_SavedFlags; + + public double m_Weight = -1; + } + + private CompactInfo m_CompactInfo; + + public ExpandFlag GetExpandFlags() + { + CompactInfo info = LookupCompactInfo(); + + ExpandFlag flags = 0; + + if ( info != null ) + { + if ( info.m_BlessedFor != null ) + flags |= ExpandFlag.Blessed; + + if ( info.m_Bounce != null ) + flags |= ExpandFlag.Bounce; + + if ( info.m_HeldBy != null ) + flags |= ExpandFlag.Holder; + + if ( info.m_Items != null ) + flags |= ExpandFlag.Items; + + if ( info.m_Name != null ) + flags |= ExpandFlag.Name; + + if ( info.m_SavedFlags != 0 ) + flags |= ExpandFlag.SaveFlag; + + if ( info.m_TempFlags != 0 ) + flags |= ExpandFlag.TempFlag; + + if ( info.m_Weight != -1 ) + flags |= ExpandFlag.Weight; + } + + return flags; + } + + private CompactInfo LookupCompactInfo() + { + return m_CompactInfo; + } + + private CompactInfo AcquireCompactInfo() + { + if ( m_CompactInfo == null ) + m_CompactInfo = new CompactInfo(); + + return m_CompactInfo; + } + + private void ReleaseCompactInfo() + { + m_CompactInfo = null; + } + + private void VerifyCompactInfo() + { + CompactInfo info = m_CompactInfo; + + if ( info == null ) + return; + + bool isValid = ( info.m_Name != null ) + || ( info.m_Items != null ) + || ( info.m_Bounce != null ) + || ( info.m_HeldBy != null ) + || ( info.m_BlessedFor != null ) + || ( info.m_TempFlags != 0 ) + || ( info.m_SavedFlags != 0 ) + || ( info.m_Weight != -1 ); + + if ( !isValid ) + ReleaseCompactInfo(); + } + + public List LookupItems() + { + if ( this is Container ) + return ( this as Container ).m_Items; + + CompactInfo info = LookupCompactInfo(); + + if ( info != null ) + return info.m_Items; + + return null; + } + + public List AcquireItems() + { + if ( this is Container ) + { + Container cont = this as Container; + + if ( cont.m_Items == null ) { + cont.m_Items = new List(); + } + + return cont.m_Items; + } + + CompactInfo info = AcquireCompactInfo(); + + info.m_Items = new List(); + + return info.m_Items; + } + + private void SetFlag( ImplFlag flag, bool value ) + { + if ( value ) + m_Flags |= flag; + else + m_Flags &= ~flag; + } + + private bool GetFlag( ImplFlag flag ) + { + return ( (m_Flags & flag) != 0 ); + } + + public BounceInfo GetBounce() + { + CompactInfo info = LookupCompactInfo(); + + if ( info != null ) + return info.m_Bounce; + + return null; + } + + public void RecordBounce() + { + CompactInfo info = AcquireCompactInfo(); + + info.m_Bounce = new BounceInfo( this ); + } + + public void ClearBounce() + { + CompactInfo info = LookupCompactInfo(); + + if ( info != null ) + { + BounceInfo bounce = info.m_Bounce; + + if ( bounce != null ) + { + info.m_Bounce = null; + + if ( bounce.m_Parent is Item ) + { + Item parent = (Item) bounce.m_Parent; + + if ( !parent.Deleted ) + parent.OnItemBounceCleared( this ); + } + else if ( bounce.m_Parent is Mobile ) + { + Mobile parent = (Mobile) bounce.m_Parent; + + if ( !parent.Deleted ) + parent.OnItemBounceCleared( this ); + } + + VerifyCompactInfo(); + } + } + } + + /// + /// Overridable. Virtual event invoked when a client, , invokes a 'help request' for the Item. Seemingly no longer functional in newer clients. + /// + public virtual void OnHelpRequest( Mobile from ) + { + } + + /// + /// Overridable. Method checked to see if the item can be traded. + /// + /// True if the trade is allowed, false if not. + public virtual bool AllowSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when a trade has completed, either successfully or not. + /// + public virtual void OnSecureTrade( Mobile from, Mobile to, Mobile newOwner, bool accepted ) + { + } + + /// + /// Overridable. Method checked to see if the elemental resistances of this Item conflict with another Item on the . + /// + /// + /// + /// + /// True + /// There is a confliction. The elemental resistance bonuses of this Item should not be applied to the + /// + /// + /// False + /// There is no confliction. The bonuses should be applied. + /// + /// + /// + public virtual bool CheckPropertyConfliction( Mobile m ) + { + return false; + } + + /// + /// Overridable. Sends the object property list to . + /// + public virtual void SendPropertiesTo( Mobile from ) + { + from.Send( PropertyList ); + } + + /// + /// Overridable. Adds the name of this item to the given . This method should be overriden if the item requires a complex naming format. + /// + public virtual void AddNameProperty( ObjectPropertyList list ) + { + string name = this.Name; + + if ( name == null ) + { + if ( m_Amount <= 1 ) + list.Add( LabelNumber ); + else + list.Add( 1050039, "{0}\t#{1}", m_Amount, LabelNumber ); // ~1_NUMBER~ ~2_ITEMNAME~ + } + else + { + if ( m_Amount <= 1 ) + list.Add( name ); + else + list.Add( 1050039, "{0}\t{1}", m_Amount, Name ); // ~1_NUMBER~ ~2_ITEMNAME~ + } + + if ( !String.IsNullOrEmpty( m_SpecialName ) ) + list.Add( 1062613, m_SpecialName ); + } + + /// + /// Overridable. Adds the loot type of this item to the given . By default, this will be either 'blessed'. + /// + public virtual void AddLootTypeProperty( ObjectPropertyList list ) + { + if ( m_LootType == LootType.Blessed ) + list.Add( 1038021 ); // blessed + } + + /// + /// Overridable. Determines whether the item will show . + /// + public virtual bool DisplayWeight + { + get + { +/* + if ( !Movable && !( IsLockedDown || IsSecure ) && ItemData.Weight == 255 ) + return false; +*/ + return false; + } + } + + /// + /// Overridable. Displays cliloc 1072788-1072789. + /// + public virtual void AddWeightProperty( ObjectPropertyList list ) + { + int weight = this.PileWeight + this.TotalWeight; + + if ( weight == 1 ) { + list.Add( 1072788, weight.ToString() ); //Weight: ~1_WEIGHT~ stone + } else { + list.Add( 1072789, weight.ToString() ); //Weight: ~1_WEIGHT~ stones + } + } + + /// + /// Overridable. Adds header properties. By default, this invokes , (if applicable), and (if ). + /// + public virtual void AddNameProperties( ObjectPropertyList list ) + { + AddNameProperty( list ); + + if ( IsSecure ) + AddSecureProperty( list ); + else if ( IsLockedDown ) + AddLockedDownProperty( list ); + + Mobile blessedFor = this.BlessedFor; + + if ( blessedFor != null && !blessedFor.Deleted ) + AddBlessedForProperty( list, blessedFor ); + + if ( DisplayLootType ) + AddLootTypeProperty( list ); + + if ( DisplayWeight ) + AddWeightProperty( list ); + + AppendChildNameProperties( list ); + } + + /// + /// Overridable. Adds the "Locked Down & Secure" property to the given . + /// + public virtual void AddSecureProperty( ObjectPropertyList list ) + { + list.Add( 501644 ); // locked down & secure + } + + /// + /// Overridable. Adds the "Locked Down" property to the given . + /// + public virtual void AddLockedDownProperty( ObjectPropertyList list ) + { + list.Add( 501643 ); // locked down + } + + /// + /// Overridable. Adds the "Blessed for ~1_NAME~" property to the given . + /// + public virtual void AddBlessedForProperty( ObjectPropertyList list, Mobile m ) + { + list.Add( 1062203, "{0}", m.Name ); // Blessed for ~1_NAME~ + } + + /// + /// Overridable. Fills an with everything applicable. By default, this invokes , then Item.GetChildProperties or Mobile.GetChildProperties. This method should be overriden to add any custom properties. + /// + public virtual void GetProperties( ObjectPropertyList list ) + { + AddNameProperties( list ); + } + + /// + /// Overridable. Event invoked when a child () is building it's . Recursively calls Item.GetChildProperties or Mobile.GetChildProperties. + /// + public virtual void GetChildProperties( ObjectPropertyList list, Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).GetChildProperties( list, item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).GetChildProperties( list, item ); + } + + /// + /// Overridable. Event invoked when a child () is building it's Name . Recursively calls Item.GetChildNameProperties or Mobile.GetChildNameProperties. + /// + public virtual void GetChildNameProperties( ObjectPropertyList list, Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).GetChildNameProperties( list, item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).GetChildNameProperties( list, item ); + } + + public virtual bool IsChildVisibleTo( Mobile m, Item child ) + { + return true; + } + + public void Bounce( Mobile from ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).RemoveItem( this ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).RemoveItem( this ); + + m_Parent = null; + + BounceInfo bounce = this.GetBounce(); + + if ( bounce != null ) + { + object parent = bounce.m_Parent; + + if ( parent is Item && !((Item)parent).Deleted ) + { + Item p = (Item)parent; + object root = p.RootParent; + if ( p.IsAccessibleTo( from ) && ( !(root is Mobile) || ((Mobile)root).CheckNonlocalDrop( from, this, p ) ) ) + { + Location = bounce.m_Location; + p.AddItem( this ); + } + else + { + MoveToWorld( from.Location, from.Map ); + } + } + else if ( parent is Mobile && !((Mobile)parent).Deleted ) + { + if ( !((Mobile)parent).EquipItem( this ) ) + MoveToWorld( bounce.m_WorldLoc, bounce.m_Map ); + } + else + { + MoveToWorld( bounce.m_WorldLoc, bounce.m_Map ); + } + + ClearBounce(); + } + else + { + MoveToWorld( from.Location, from.Map ); + } + } + + /// + /// Overridable. Method checked to see if this item may be equiped while casting a spell. By default, this returns false. It is overriden on spellbook and spell channeling weapons or shields. + /// + /// True if it may, false if not. + /// + /// + /// public override bool AllowEquipedCast( Mobile from ) + /// { + /// if ( from.Int >= 100 ) + /// return true; + /// + /// return base.AllowEquipedCast( from ); + /// } + /// + /// When placed in an Item script, the item may be cast when equiped if the has 100 or more intelligence. Otherwise, it will drop to their backpack. + /// + public virtual bool AllowEquipedCast( Mobile from ) + { + return false; + } + + public virtual bool CheckConflictingLayer( Mobile m, Item item, Layer layer ) + { + return ( m_Layer == layer ); + } + + public virtual bool CanEquip( Mobile m ) + { + return ( m_Layer != Layer.Invalid && m.FindItemOnLayer( m_Layer ) == null ); + } + + public virtual void GetChildContextMenuEntries( Mobile from, List list, Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).GetChildContextMenuEntries( from, list, item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).GetChildContextMenuEntries( from, list, item ); + } + + public virtual void GetContextMenuEntries( Mobile from, List list ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).GetChildContextMenuEntries( from, list, this ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).GetChildContextMenuEntries( from, list, this ); + } + + public virtual bool VerifyMove( Mobile from ) + { + return Movable; + } + + public virtual DeathMoveResult OnParentDeath( Mobile parent ) + { + if ( !Movable ) + return DeathMoveResult.RemainEquiped; + else if ( parent.KeepsItemsOnDeath ) + return DeathMoveResult.MoveToBackpack; + else if ( CheckBlessed( parent ) ) + return DeathMoveResult.MoveToBackpack; + else + return DeathMoveResult.MoveToCorpse; + } + + public virtual DeathMoveResult OnInventoryDeath( Mobile parent ) + { + if ( !Movable ) + return DeathMoveResult.MoveToBackpack; + else if ( parent.KeepsItemsOnDeath ) + return DeathMoveResult.MoveToBackpack; + else if ( CheckBlessed( parent ) ) + return DeathMoveResult.MoveToBackpack; + else + return DeathMoveResult.MoveToCorpse; + } + + /// + /// Moves the Item to . The Item does not change maps. + /// + public virtual void MoveToWorld( Point3D location ) + { + MoveToWorld( location, m_Map ); + } + + public void LabelTo( Mobile to, int number ) + { + to.Send( new MessageLocalized( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, number, "", "" ) ); + } + + public void LabelTo( Mobile to, int number, string args ) + { + to.Send( new MessageLocalized( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, number, "", args ) ); + } + + public void LabelTo( Mobile to, string text ) + { + to.Send( new UnicodeMessage( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, "ENU", "", text ) ); + } + + public void LabelTo( Mobile to, string format, params object[] args ) + { + LabelTo( to, String.Format( format, args ) ); + } + + public void LabelToAffix( Mobile to, int number, AffixType type, string affix ) + { + to.Send( new MessageLocalizedAffix( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, number, "", type, affix, "" ) ); + } + + public void LabelToAffix( Mobile to, int number, AffixType type, string affix, string args ) + { + to.Send( new MessageLocalizedAffix( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, number, "", type, affix, args ) ); + } + + public virtual void LabelLootTypeTo( Mobile to ) + { + if ( m_LootType == LootType.Blessed ) + LabelTo( to, 1041362 ); // (blessed) + } + + public bool AtWorldPoint( int x, int y ) + { + return ( m_Parent == null && m_Location.m_X == x && m_Location.m_Y == y ); + } + + public bool AtPoint( int x, int y ) + { + return ( m_Location.m_X == x && m_Location.m_Y == y ); + } + + /// + /// Moves the Item to a given and . + /// + public void MoveToWorld( Point3D location, Map map ) + { + if ( Deleted ) + return; + + Point3D oldLocation = GetWorldLocation(); + Point3D oldRealLocation = m_Location; + + SetLastMoved(); + + if ( Parent is Mobile ) + ((Mobile)Parent).RemoveItem( this ); + else if ( Parent is Item ) + ((Item)Parent).RemoveItem( this ); + + if ( m_Map != map ) + { + Map old = m_Map; + + if ( m_Map != null ) + { + m_Map.OnLeave( this ); + + if ( oldLocation.m_X != 0 ) + { + Packet remPacket = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( oldLocation, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.InRange( oldLocation, GetUpdateRange( m ) ) ) + { + if ( remPacket == null ) + remPacket = this.RemovePacket; + + state.Send( remPacket ); + } + } + + eable.Free(); + } + } + + m_Location = location; + this.OnLocationChange( oldRealLocation ); + + ReleaseWorldPackets(); + + List items = LookupItems(); + + if ( items != null ) + { + for ( int i = 0; i < items.Count; ++i ) + items[i].Map = map; + } + + m_Map = map; + + if ( m_Map != null ) + m_Map.OnEnter( this ); + + OnMapChange(); + + if ( m_Map != null ) + { + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.CanSee( this ) && m.InRange( m_Location, GetUpdateRange( m ) ) ) + SendInfoTo( state ); + } + + eable.Free(); + } + + RemDelta( ItemDelta.Update ); + + if ( old == null || old == Map.Internal ) + InvalidateProperties(); + } + else if ( m_Map != null ) + { + IPooledEnumerable eable; + + if ( oldLocation.m_X != 0 ) + { + Packet removeThis = null; + + eable = m_Map.GetClientsInRange( oldLocation, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( !m.InRange( location, GetUpdateRange( m ) ) ) + { + if ( removeThis == null ) + removeThis = this.RemovePacket; + + state.Send( removeThis ); + } + } + + eable.Free(); + } + + Point3D oldInternalLocation = m_Location; + + m_Location = location; + this.OnLocationChange( oldRealLocation ); + + ReleaseWorldPackets(); + + eable = m_Map.GetClientsInRange( m_Location, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.CanSee( this ) && m.InRange( m_Location, GetUpdateRange( m ) ) ) + SendInfoTo( state ); + } + + eable.Free(); + + m_Map.OnMove( oldInternalLocation, this ); + + RemDelta( ItemDelta.Update ); + } + else + { + Map = map; + Location = location; + } + } + + /// + /// Has the item been deleted? + /// + public bool Deleted{ get{ return GetFlag( ImplFlag.Deleted ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public LootType LootType + { + get + { + return m_LootType; + } + set + { + if ( m_LootType != value ) + { + m_LootType = value; + + if ( DisplayLootType ) + InvalidateProperties(); + } + } + } + + private static TimeSpan m_DDT = TimeSpan.FromHours( 1.0 ); + + public static TimeSpan DefaultDecayTime{ get{ return m_DDT; } set{ m_DDT = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual TimeSpan DecayTime + { + get + { + return m_DDT; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual bool Decays + { + get + { + return (Movable && Visible); + } + } + + public virtual bool OnDecay() + { + return ( Decays && Parent == null && Map != Map.Internal && Region.Find( Location, Map ).OnDecay( this ) ); + } + + public void SetLastMoved() + { + m_LastMovedTime = DateTime.Now; + } + + public DateTime LastMoved + { + get + { + return m_LastMovedTime; + } + set + { + m_LastMovedTime = value; + } + } + + public bool StackWith( Mobile from, Item dropped ) + { + return StackWith( from, dropped, true ); + } + + public virtual bool StackWith( Mobile from, Item dropped, bool playSound ) + { + if ( dropped.Stackable && Stackable && dropped.GetType() == GetType() && dropped.ItemID == ItemID && dropped.Hue == Hue && dropped.Name == Name && (dropped.Amount + Amount) <= 60000 ) + { + if ( m_LootType != dropped.m_LootType ) + m_LootType = LootType.Regular; + + Amount += dropped.Amount; + dropped.Delete(); + + if ( playSound && from != null ) + { + int soundID = GetDropSound(); + + if ( soundID == -1 ) + soundID = 0x42; + + from.SendSound( soundID, GetWorldLocation() ); + } + + return true; + } + + return false; + } + + public virtual bool OnDragDrop( Mobile from, Item dropped ) + { + if ( Parent is Container ) + return ((Container)Parent).OnStackAttempt( from, this, dropped ); + + return StackWith( from, dropped ); + } + + public Rectangle2D GetGraphicBounds() + { + int itemID = m_ItemID; + bool doubled = m_Amount > 1; + + if ( itemID >= 0xEEA && itemID <= 0xEF2 ) // Are we coins? + { + int coinBase = (itemID - 0xEEA) / 3; + coinBase *= 3; + coinBase += 0xEEA; + + doubled = false; + + if ( m_Amount <= 1 ) + { + // A single coin + itemID = coinBase; + } + else if ( m_Amount <= 5 ) + { + // A stack of coins + itemID = coinBase + 1; + } + else // m_Amount > 5 + { + // A pile of coins + itemID = coinBase + 2; + } + } + + Rectangle2D bounds = ItemBounds.Table[itemID & 0x3FFF]; + + if ( doubled ) + { + bounds.Set( bounds.X, bounds.Y, bounds.Width + 5, bounds.Height + 5 ); + } + + return bounds; + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Stackable + { + get{ return GetFlag( ImplFlag.Stackable ); } + set{ SetFlag( ImplFlag.Stackable, value ); } + } + + public Packet RemovePacket + { + get + { + if ( m_RemovePacket == null ) + { + m_RemovePacket = new RemoveItem( this ); + m_RemovePacket.SetStatic(); + } + + return m_RemovePacket; + } + } + + public Packet OPLPacket + { + get + { + if ( m_OPLPacket == null ) + { + m_OPLPacket = new OPLInfo( PropertyList ); + m_OPLPacket.SetStatic(); + } + + return m_OPLPacket; + } + } + + public ObjectPropertyList PropertyList + { + get + { + if ( m_PropertyList == null ) + { + m_PropertyList = new ObjectPropertyList( this ); + + GetProperties( m_PropertyList ); + AppendChildProperties( m_PropertyList ); + + m_PropertyList.Terminate(); + m_PropertyList.SetStatic(); + } + + return m_PropertyList; + } + } + + public virtual void AppendChildProperties( ObjectPropertyList list ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).GetChildProperties( list, this ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).GetChildProperties( list, this ); + } + + public virtual void AppendChildNameProperties( ObjectPropertyList list ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).GetChildNameProperties( list, this ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).GetChildNameProperties( list, this ); + } + + public void ClearProperties() + { + Packet.Release( ref m_PropertyList ); + Packet.Release( ref m_OPLPacket ); + } + + public void InvalidateProperties() + { + if ( !ObjectPropertyList.Enabled ) + return; + + if ( m_Map != null && m_Map != Map.Internal && !World.Loading ) + { + ObjectPropertyList oldList = m_PropertyList; + m_PropertyList = null; + ObjectPropertyList newList = PropertyList; + + if ( oldList == null || oldList.Hash != newList.Hash ) + { + Packet.Release( ref m_OPLPacket ); + Delta( ItemDelta.Properties ); + } + } + else + { + ClearProperties(); + } + } + + public Packet WorldPacket + { + get + { + // This needs to be invalidated when any of the following changes: + // - ItemID + // - Amount + // - Location + // - Hue + // - Packet Flags + // - Direction + + if ( m_WorldPacket == null ) + { + m_WorldPacket = new WorldItem( this ); + m_WorldPacket.SetStatic(); + } + + return m_WorldPacket; + } + } + + public void ReleaseWorldPackets() + { + Packet.Release( ref m_WorldPacket ); + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Visible + { + get{ return GetFlag( ImplFlag.Visible ); } + set + { + if ( GetFlag( ImplFlag.Visible ) != value ) + { + SetFlag( ImplFlag.Visible, value ); + ReleaseWorldPackets(); + + if ( m_Map != null ) + { + Packet removeThis = null; + Point3D worldLoc = GetWorldLocation(); + + IPooledEnumerable eable = m_Map.GetClientsInRange( worldLoc, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( !m.CanSee( this ) && m.InRange( worldLoc, GetUpdateRange( m ) ) ) + { + if ( removeThis == null ) + removeThis = this.RemovePacket; + + state.Send( removeThis ); + } + } + + eable.Free(); + } + + Delta( ItemDelta.Update ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Movable + { + get{ return GetFlag( ImplFlag.Movable ); } + set + { + if ( GetFlag( ImplFlag.Movable ) != value ) + { + SetFlag( ImplFlag.Movable, value ); + ReleaseWorldPackets(); + Delta( ItemDelta.Update ); + } + } + } + + public virtual bool ForceShowProperties{ get{ return false; } } + + public virtual int GetPacketFlags() + { + int flags = 0; + + if ( !Visible ) + flags |= 0x80; + + if ( Movable || ForceShowProperties ) + flags |= 0x20; + + return flags; + } + + public virtual bool OnMoveOff( Mobile m ) + { + return true; + } + + public virtual bool OnMoveOver( Mobile m ) + { + return true; + } + + public virtual bool HandlesOnMovement{ get{ return false; } } + + public virtual void OnMovement( Mobile m, Point3D oldLocation ) + { + } + + public void Internalize() + { + MoveToWorld( Point3D.Zero, Map.Internal ); + } + + public virtual void OnMapChange() + { + } + + public virtual void OnRemoved( object parent ) + { + } + + public virtual void OnAdded( object parent ) + { + SyncItem(); + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Map Map + { + get + { + return m_Map; + } + set + { + if ( m_Map != value ) + { + Map old = m_Map; + + if ( m_Map != null && m_Parent == null ) + { + m_Map.OnLeave( this ); + SendRemovePacket(); + } + + List items = LookupItems(); + + if ( items != null ) + { + for ( int i = 0; i < items.Count; ++i ) + items[i].Map = value; + } + + m_Map = value; + + if ( m_Map != null && m_Parent == null ) + m_Map.OnEnter( this ); + + Delta( ItemDelta.Update ); + + this.OnMapChange(); + + if ( old == null || old == Map.Internal ) + InvalidateProperties(); + } + } + } + + [Flags] + private enum SaveFlag + { + None = 0x00000000, + Direction = 0x00000001, + Bounce = 0x00000002, + LootType = 0x00000004, + LocationFull = 0x00000008, + ItemID = 0x00000010, + Hue = 0x00000020, + Amount = 0x00000040, + Layer = 0x00000080, + Name = 0x00000100, + Parent = 0x00000200, + Items = 0x00000400, + WeightNot1or0 = 0x00000800, + Map = 0x00001000, + Visible = 0x00002000, + Movable = 0x00004000, + Stackable = 0x00008000, + WeightIs0 = 0x00010000, + LocationSByteZ = 0x00020000, + LocationShortXY = 0x00040000, + LocationByteXY = 0x00080000, + ImplFlags = 0x00100000, + BlessedFor = 0x00200000, + HeldBy = 0x00400000, + IntWeight = 0x00800000, + SavedFlags = 0x01000000, + NullWeight = 0x02000000 + } + + private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf ) + { + if ( setIf ) + flags |= toSet; + } + + private static bool GetSaveFlag( SaveFlag flags, SaveFlag toGet ) + { + return ( (flags & toGet) != 0 ); + } + + int ISerializable.TypeReference { + get { return m_TypeRef; } + } + + int ISerializable.SerialIdentity { + get { return m_Serial; } + } + + public virtual void Serialize( GenericWriter writer ) + { + writer.Write( 9 ); // version + + writer.Write( GraphicID ); + writer.Write( SpecialName ); + writer.Write( Magical ); + writer.Write( Uses ); + writer.Write( UsesMax ); + + SaveFlag flags = SaveFlag.None; + + int x = m_Location.m_X, y = m_Location.m_Y, z = m_Location.m_Z; + + if ( x != 0 || y != 0 || z != 0 ) + { + if ( x >= short.MinValue && x <= short.MaxValue && y >= short.MinValue && y <= short.MaxValue && z >= sbyte.MinValue && z <= sbyte.MaxValue ) + { + if ( x != 0 || y != 0 ) + { + if ( x >= byte.MinValue && x <= byte.MaxValue && y >= byte.MinValue && y <= byte.MaxValue ) + flags |= SaveFlag.LocationByteXY; + else + flags |= SaveFlag.LocationShortXY; + } + + if ( z != 0 ) + flags |= SaveFlag.LocationSByteZ; + } + else + { + flags |= SaveFlag.LocationFull; + } + } + + CompactInfo info = LookupCompactInfo(); + List items = LookupItems(); + + if ( m_Direction != Direction.North ) + flags |= SaveFlag.Direction; + if ( info != null && info.m_Bounce != null ) + flags |= SaveFlag.Bounce; + if ( m_LootType != LootType.Regular ) + flags |= SaveFlag.LootType; + if ( m_ItemID != 0 ) + flags |= SaveFlag.ItemID; + if ( m_Hue != 0 ) + flags |= SaveFlag.Hue; + if ( m_Amount != 1 ) + flags |= SaveFlag.Amount; + if ( m_Layer != Layer.Invalid ) + flags |= SaveFlag.Layer; + if ( info != null && info.m_Name != null ) + flags |= SaveFlag.Name; + if ( m_Parent != null ) + flags |= SaveFlag.Parent; + if ( items != null && items.Count > 0 ) + flags |= SaveFlag.Items; + if ( m_Map != Map.Internal ) + flags |= SaveFlag.Map; + if ( info != null && info.m_BlessedFor != null && !info.m_BlessedFor.Deleted ) + flags |= SaveFlag.BlessedFor; + if ( info != null && info.m_HeldBy != null && !info.m_HeldBy.Deleted ) + flags |= SaveFlag.HeldBy; + if ( info != null && info.m_SavedFlags != 0 ) + flags |= SaveFlag.SavedFlags; + + if ( info == null || info.m_Weight == -1 ) + { + flags |= SaveFlag.NullWeight; + } + else + { + if ( info.m_Weight == 0.0 ) + { + flags |= SaveFlag.WeightIs0; + } + else if ( info.m_Weight != 1.0 ) + { + if ( info.m_Weight == (int) info.m_Weight ) + flags |= SaveFlag.IntWeight; + else + flags |= SaveFlag.WeightNot1or0; + } + } + + ImplFlag implFlags = ( m_Flags & ( ImplFlag.Visible | ImplFlag.Movable | ImplFlag.Stackable ) ); + + if ( implFlags != ( ImplFlag.Visible | ImplFlag.Movable ) ) + flags |= SaveFlag.ImplFlags; + + writer.Write( (int) flags ); + + /* begin last moved time optimization */ + long ticks = m_LastMovedTime.Ticks; + long now = DateTime.Now.Ticks; + + TimeSpan d; + + try { d = new TimeSpan( ticks - now ); } + catch { if ( ticks < now ) d = TimeSpan.MaxValue; else d = TimeSpan.MaxValue; } + + double minutes = -d.TotalMinutes; + + if ( minutes < int.MinValue ) + minutes = int.MinValue; + else if ( minutes > int.MaxValue ) + minutes = int.MaxValue; + + writer.WriteEncodedInt( (int) minutes ); + /* end */ + + if ( GetSaveFlag( flags, SaveFlag.Direction ) ) + writer.Write( (byte) m_Direction ); + + if ( GetSaveFlag( flags, SaveFlag.Bounce ) ) + BounceInfo.Serialize( info.m_Bounce, writer ); + + if ( GetSaveFlag( flags, SaveFlag.LootType ) ) + writer.Write( (byte) m_LootType ); + + if ( GetSaveFlag( flags, SaveFlag.LocationFull ) ) + { + writer.WriteEncodedInt( x ); + writer.WriteEncodedInt( y ); + writer.WriteEncodedInt( z ); + } + else + { + if ( GetSaveFlag( flags, SaveFlag.LocationByteXY ) ) + { + writer.Write( (byte) x ); + writer.Write( (byte) y ); + } + else if ( GetSaveFlag( flags, SaveFlag.LocationShortXY ) ) + { + writer.Write( (short) x ); + writer.Write( (short) y ); + } + + if ( GetSaveFlag( flags, SaveFlag.LocationSByteZ ) ) + writer.Write( (sbyte) z ); + } + + if ( GetSaveFlag( flags, SaveFlag.ItemID ) ) + writer.WriteEncodedInt( (int) m_ItemID ); + + if ( GetSaveFlag( flags, SaveFlag.Hue ) ) + writer.WriteEncodedInt( (int) m_Hue ); + + if ( GetSaveFlag( flags, SaveFlag.Amount ) ) + writer.WriteEncodedInt( (int) m_Amount ); + + if ( GetSaveFlag( flags, SaveFlag.Layer ) ) + writer.Write( (byte) m_Layer ); + + if ( GetSaveFlag( flags, SaveFlag.Name ) ) + writer.Write( (string) info.m_Name ); + + if ( GetSaveFlag( flags, SaveFlag.Parent ) ) + { + if ( m_Parent is Mobile && !( (Mobile) m_Parent ).Deleted ) + writer.Write( ( (Mobile) m_Parent ).Serial ); + else if ( m_Parent is Item && !( (Item) m_Parent ).Deleted ) + writer.Write( ( (Item) m_Parent ).Serial ); + else + writer.Write( (int) Serial.MinusOne ); + } + + if ( GetSaveFlag( flags, SaveFlag.Items ) ) + writer.Write( items, false ); + + if ( GetSaveFlag( flags, SaveFlag.IntWeight ) ) + writer.WriteEncodedInt( (int) info.m_Weight ); + else if ( GetSaveFlag( flags, SaveFlag.WeightNot1or0 ) ) + writer.Write( (double) info.m_Weight ); + + if ( GetSaveFlag( flags, SaveFlag.Map ) ) + writer.Write( (Map) m_Map ); + + if ( GetSaveFlag( flags, SaveFlag.ImplFlags ) ) + writer.WriteEncodedInt( (int) implFlags ); + + if ( GetSaveFlag( flags, SaveFlag.BlessedFor ) ) + writer.Write( info.m_BlessedFor ); + + if ( GetSaveFlag( flags, SaveFlag.HeldBy ) ) + writer.Write( info.m_HeldBy ); + + if ( GetSaveFlag( flags, SaveFlag.SavedFlags ) ) + writer.WriteEncodedInt( info.m_SavedFlags ); + } + + public IPooledEnumerable GetObjectsInRange( int range ) + { + Map map = m_Map; + + if ( map == null ) + return Server.Map.NullEnumerable.Instance; + + if ( m_Parent == null ) + return map.GetObjectsInRange( m_Location, range ); + + return map.GetObjectsInRange( GetWorldLocation(), range ); + } + + public IPooledEnumerable GetItemsInRange( int range ) + { + Map map = m_Map; + + if ( map == null ) + return Server.Map.NullEnumerable.Instance; + + if ( m_Parent == null ) + return map.GetItemsInRange( m_Location, range ); + + return map.GetItemsInRange( GetWorldLocation(), range ); + } + + public IPooledEnumerable GetMobilesInRange( int range ) + { + Map map = m_Map; + + if ( map == null ) + return Server.Map.NullEnumerable.Instance; + + if ( m_Parent == null ) + return map.GetMobilesInRange( m_Location, range ); + + return map.GetMobilesInRange( GetWorldLocation(), range ); + } + + public IPooledEnumerable GetClientsInRange( int range ) + { + Map map = m_Map; + + if ( map == null ) + return Server.Map.NullEnumerable.Instance; + + if ( m_Parent == null ) + return map.GetClientsInRange( m_Location, range ); + + return map.GetClientsInRange( GetWorldLocation(), range ); + } + + private static int m_LockedDownFlag; + private static int m_SecureFlag; + + public static int LockedDownFlag + { + get{ return m_LockedDownFlag; } + set{ m_LockedDownFlag = value; } + } + + public static int SecureFlag + { + get{ return m_SecureFlag; } + set{ m_SecureFlag = value; } + } + + public bool IsLockedDown + { + get{ return GetTempFlag( m_LockedDownFlag ); } + set{ SetTempFlag( m_LockedDownFlag, value ); InvalidateProperties(); } + } + + public bool IsSecure + { + get{ return GetTempFlag( m_SecureFlag ); } + set{ SetTempFlag( m_SecureFlag, value ); InvalidateProperties(); } + } + + public bool GetTempFlag( int flag ) + { + CompactInfo info = LookupCompactInfo(); + + if ( info == null ) + return false; + + return ( (info.m_TempFlags & flag) != 0 ); + } + + public void SetTempFlag( int flag, bool value ) + { + CompactInfo info = AcquireCompactInfo(); + + if ( value ) + info.m_TempFlags |= flag; + else + info.m_TempFlags &= ~flag; + + if ( info.m_TempFlags == 0 ) + VerifyCompactInfo(); + } + + public void ConsumeUses() + { + --m_Uses; + + if ( m_Uses < 0 ) + m_Uses = 0; + + double weight = Weight; + Weight = weight - 0.00000001; + Weight = Weight; + } + + public bool GetSavedFlag( int flag ) + { + CompactInfo info = LookupCompactInfo(); + + if ( info == null ) + return false; + + return ( ( info.m_SavedFlags & flag ) != 0 ); + } + + public void SetSavedFlag( int flag, bool value ) + { + CompactInfo info = AcquireCompactInfo(); + + if ( value ) + info.m_SavedFlags |= flag; + else + info.m_SavedFlags &= ~flag; + + if ( info.m_SavedFlags == 0 ) + VerifyCompactInfo(); + } + + public virtual void Deserialize( GenericReader reader ) + { + int version = reader.ReadInt(); + + SetLastMoved(); + + switch ( version ) + { + case 9: + case 8: + case 7: + case 6: + { + GraphicID = reader.ReadInt(); + SpecialName = reader.ReadString(); + Magical = reader.ReadInt(); + Uses = reader.ReadInt(); + UsesMax = reader.ReadInt(); + + SaveFlag flags = (SaveFlag)reader.ReadInt(); + + if ( version < 7 ) + { + LastMoved = reader.ReadDeltaTime(); + } + else + { + int minutes = reader.ReadEncodedInt(); + + try{ LastMoved = DateTime.Now - TimeSpan.FromMinutes( minutes ); } + catch{ LastMoved = DateTime.Now; } + } + + if ( GetSaveFlag( flags, SaveFlag.Direction ) ) + m_Direction = (Direction)reader.ReadByte(); + + if ( GetSaveFlag( flags, SaveFlag.Bounce ) ) + AcquireCompactInfo().m_Bounce = BounceInfo.Deserialize( reader ); + + if ( GetSaveFlag( flags, SaveFlag.LootType ) ) + m_LootType = (LootType)reader.ReadByte(); + + int x = 0, y = 0, z = 0; + + if ( GetSaveFlag( flags, SaveFlag.LocationFull ) ) + { + x = reader.ReadEncodedInt(); + y = reader.ReadEncodedInt(); + z = reader.ReadEncodedInt(); + } + else + { + if ( GetSaveFlag( flags, SaveFlag.LocationByteXY ) ) + { + x = reader.ReadByte(); + y = reader.ReadByte(); + } + else if ( GetSaveFlag( flags, SaveFlag.LocationShortXY ) ) + { + x = reader.ReadShort(); + y = reader.ReadShort(); + } + + if ( GetSaveFlag( flags, SaveFlag.LocationSByteZ ) ) + z = reader.ReadSByte(); + } + + m_Location = new Point3D( x, y, z ); + + if ( GetSaveFlag( flags, SaveFlag.ItemID ) ) + m_ItemID = reader.ReadEncodedInt(); + + if ( GetSaveFlag( flags, SaveFlag.Hue ) ) + m_Hue = reader.ReadEncodedInt(); + + if ( GetSaveFlag( flags, SaveFlag.Amount ) ) + m_Amount = reader.ReadEncodedInt(); + else + m_Amount = 1; + + if ( GetSaveFlag( flags, SaveFlag.Layer ) ) + m_Layer = (Layer)reader.ReadByte(); + + if ( GetSaveFlag( flags, SaveFlag.Name ) ) + { + string name = reader.ReadString(); + + if ( name != this.DefaultName ) + AcquireCompactInfo().m_Name = name; + } + + if ( GetSaveFlag( flags, SaveFlag.Parent ) ) + { + Serial parent = reader.ReadInt(); + + if ( parent.IsMobile ) + m_Parent = World.FindMobile( parent ); + else if ( parent.IsItem ) + m_Parent = World.FindItem( parent ); + else + m_Parent = null; + + if ( m_Parent == null && (parent.IsMobile || parent.IsItem) ) + Delete(); + } + + if ( GetSaveFlag( flags, SaveFlag.Items ) ) + { + List items = reader.ReadStrongItemList(); + + if ( this is Container ) + ( this as Container ).m_Items = items; + else + AcquireCompactInfo().m_Items = items; + } + + if ( version < 8 || !GetSaveFlag( flags, SaveFlag.NullWeight ) ) + { + double weight; + + if ( GetSaveFlag( flags, SaveFlag.IntWeight ) ) + weight = reader.ReadEncodedInt(); + else if ( GetSaveFlag( flags, SaveFlag.WeightNot1or0 ) ) + weight = reader.ReadDouble(); + else if ( GetSaveFlag( flags, SaveFlag.WeightIs0 ) ) + weight = 0.0; + else + weight = 1.0; + + if ( weight != DefaultWeight ) + AcquireCompactInfo().m_Weight = weight; + } + + if ( GetSaveFlag( flags, SaveFlag.Map ) ) + m_Map = reader.ReadMap(); + else + m_Map = Map.Internal; + + if ( GetSaveFlag( flags, SaveFlag.Visible ) ) + SetFlag( ImplFlag.Visible, reader.ReadBool() ); + else + SetFlag( ImplFlag.Visible, true ); + + if ( GetSaveFlag( flags, SaveFlag.Movable ) ) + SetFlag( ImplFlag.Movable, reader.ReadBool() ); + else + SetFlag( ImplFlag.Movable, true ); + + if ( GetSaveFlag( flags, SaveFlag.Stackable ) ) + SetFlag( ImplFlag.Stackable, reader.ReadBool() ); + + if ( GetSaveFlag( flags, SaveFlag.ImplFlags ) ) + m_Flags = (ImplFlag)reader.ReadEncodedInt(); + + if ( GetSaveFlag( flags, SaveFlag.BlessedFor ) ) + AcquireCompactInfo().m_BlessedFor = reader.ReadMobile(); + + if ( GetSaveFlag( flags, SaveFlag.HeldBy ) ) + AcquireCompactInfo().m_HeldBy = reader.ReadMobile(); + + if ( GetSaveFlag( flags, SaveFlag.SavedFlags ) ) + AcquireCompactInfo().m_SavedFlags = reader.ReadEncodedInt(); + + if ( m_Map != null && m_Parent == null ) + m_Map.OnEnter( this ); + + break; + } + case 5: + { + SaveFlag flags = (SaveFlag)reader.ReadInt(); + + LastMoved = reader.ReadDeltaTime(); + + if ( GetSaveFlag( flags, SaveFlag.Direction ) ) + m_Direction = (Direction)reader.ReadByte(); + + if ( GetSaveFlag( flags, SaveFlag.Bounce ) ) + AcquireCompactInfo().m_Bounce = BounceInfo.Deserialize( reader ); + + if ( GetSaveFlag( flags, SaveFlag.LootType ) ) + m_LootType = (LootType)reader.ReadByte(); + + if ( GetSaveFlag( flags, SaveFlag.LocationFull ) ) + m_Location = reader.ReadPoint3D(); + + if ( GetSaveFlag( flags, SaveFlag.ItemID ) ) + m_ItemID = reader.ReadInt(); + + if ( GetSaveFlag( flags, SaveFlag.Hue ) ) + m_Hue = reader.ReadInt(); + + if ( GetSaveFlag( flags, SaveFlag.Amount ) ) + m_Amount = reader.ReadInt(); + else + m_Amount = 1; + + if ( GetSaveFlag( flags, SaveFlag.Layer ) ) + m_Layer = (Layer)reader.ReadByte(); + + if ( GetSaveFlag( flags, SaveFlag.Name ) ) + { + string name = reader.ReadString(); + + if ( name != this.DefaultName ) + AcquireCompactInfo().m_Name = name; + } + + if ( GetSaveFlag( flags, SaveFlag.Parent ) ) + { + Serial parent = reader.ReadInt(); + + if ( parent.IsMobile ) + m_Parent = World.FindMobile( parent ); + else if ( parent.IsItem ) + m_Parent = World.FindItem( parent ); + else + m_Parent = null; + + if ( m_Parent == null && (parent.IsMobile || parent.IsItem) ) + Delete(); + } + + if ( GetSaveFlag( flags, SaveFlag.Items ) ) + { + List items = reader.ReadStrongItemList(); + + if ( this is Container ) + ( this as Container ).m_Items = items; + else + AcquireCompactInfo().m_Items = items; + } + + double weight; + + if ( GetSaveFlag( flags, SaveFlag.IntWeight ) ) + weight = reader.ReadEncodedInt(); + else if ( GetSaveFlag( flags, SaveFlag.WeightNot1or0 ) ) + weight = reader.ReadDouble(); + else if ( GetSaveFlag( flags, SaveFlag.WeightIs0 ) ) + weight = 0.0; + else + weight = 1.0; + + if ( weight != DefaultWeight ) + AcquireCompactInfo().m_Weight = weight; + + if ( GetSaveFlag( flags, SaveFlag.Map ) ) + m_Map = reader.ReadMap(); + else + m_Map = Map.Internal; + + if ( GetSaveFlag( flags, SaveFlag.Visible ) ) + SetFlag( ImplFlag.Visible, reader.ReadBool() ); + else + SetFlag( ImplFlag.Visible, true ); + + if ( GetSaveFlag( flags, SaveFlag.Movable ) ) + SetFlag( ImplFlag.Movable, reader.ReadBool() ); + else + SetFlag( ImplFlag.Movable, true ); + + if ( GetSaveFlag( flags, SaveFlag.Stackable ) ) + SetFlag( ImplFlag.Stackable, reader.ReadBool() ); + + if ( m_Map != null && m_Parent == null ) + m_Map.OnEnter( this ); + + break; + } + case 4: // Just removed variables + case 3: + { + m_Direction = (Direction)reader.ReadInt(); + + goto case 2; + } + case 2: + { + AcquireCompactInfo().m_Bounce = BounceInfo.Deserialize( reader ); + LastMoved = reader.ReadDeltaTime(); + + goto case 1; + } + case 1: + { + goto case 0; + } + case 0: + { + m_Location = reader.ReadPoint3D(); + m_ItemID = reader.ReadInt(); + m_Hue = reader.ReadInt(); + m_Amount = reader.ReadInt(); + m_Layer = (Layer) reader.ReadByte(); + + string name = reader.ReadString(); + + if ( name != this.DefaultName ) + AcquireCompactInfo().m_Name = name; + + Serial parent = reader.ReadInt(); + + if ( parent.IsMobile ) + m_Parent = World.FindMobile( parent ); + else if ( parent.IsItem ) + m_Parent = World.FindItem( parent ); + else + m_Parent = null; + + if ( m_Parent == null && (parent.IsMobile || parent.IsItem) ) + Delete(); + + int count = reader.ReadInt(); + + if ( count > 0 ) + { + List items = new List( count ); + + for ( int i = 0; i < count; ++i ) + { + Item item = reader.ReadItem(); + + if ( item != null ) + items.Add( item ); + } + + if ( this is Container ) + ( this as Container ).m_Items = items; + else + AcquireCompactInfo().m_Items = items; + } + + double weight = reader.ReadDouble(); + + if ( weight != DefaultWeight ) + AcquireCompactInfo().m_Weight = weight; + + if ( version <= 3 ) + { + reader.ReadInt(); + reader.ReadInt(); + reader.ReadInt(); + } + + m_Map = reader.ReadMap(); + SetFlag( ImplFlag.Visible, reader.ReadBool() ); + SetFlag( ImplFlag.Movable, reader.ReadBool() ); + + if ( version <= 3 ) + /*m_Deleted =*/ reader.ReadBool(); + + Stackable = reader.ReadBool(); + + if ( m_Map != null && m_Parent == null ) + m_Map.OnEnter( this ); + + break; + } + } + + if ( this.HeldBy != null ) + Timer.DelayCall( TimeSpan.Zero, new TimerCallback( FixHolding_Sandbox ) ); + + VerifyCompactInfo(); + + SyncItem(); + } + + public void SyncItem() + { + if ( Layer != Layer.Invalid && ( Name == "" || Name == null ) ){ Name = Utility.AddSpacesToSentence( (this.GetType()).Name ); } + + if ( !isModded( this ) ) + GraphicID = ItemID; + } + + private void FixHolding_Sandbox() + { + Mobile heldBy = this.HeldBy; + + if ( heldBy != null ) + { + if ( this.GetBounce() != null ) + { + Bounce( heldBy ); + } + else + { + heldBy.Holding = null; + heldBy.AddToBackpack( this ); + ClearBounce(); + } + } + } + + public virtual int GetMaxUpdateRange() + { + return 18; + } + + public virtual int GetUpdateRange( Mobile m ) + { + return 18; + } + + public void SendInfoTo( NetState state ) { + SendInfoTo( state, ObjectPropertyList.Enabled ); + } + + public virtual void SendInfoTo( NetState state, bool sendOplPacket ) { + state.Send( GetWorldPacketFor( state ) ); + + if ( sendOplPacket ) { + state.Send( OPLPacket ); + } + } + + protected virtual Packet GetWorldPacketFor( NetState state ) + { + return this.WorldPacket; + } + + public virtual bool IsVirtualItem{ get{ return false; } } + + public virtual int GetTotal( TotalType type ) + { + return 0; + } + + public virtual void UpdateTotal( Item sender, TotalType type, int delta ) + { + if ( !IsVirtualItem ) + { + if ( m_Parent is Item ) + ( m_Parent as Item ).UpdateTotal( sender, type, delta ); + else if ( m_Parent is Mobile ) + ( m_Parent as Mobile ).UpdateTotal( sender, type, delta ); + else if ( this.HeldBy != null ) + ( this.HeldBy as Mobile ).UpdateTotal( sender, type, delta ); + } + } + + public virtual void UpdateTotals() + { + } + + public virtual int LabelNumber + { + get + { + if ( m_ItemID < 0x4000 ) + return 1020000 + m_ItemID; + else + return 1078872 + m_ItemID; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TotalGold + { + get { return GetTotal( TotalType.Gold ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TotalItems + { + get { return GetTotal( TotalType.Items ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TotalWeight + { + get { return GetTotal( TotalType.Weight ); } + } + + public virtual double DefaultWeight + { + get + { + if ( m_ItemID < 0 || m_ItemID > TileData.MaxItemValue || this is BaseMulti ) + return 0; + + int weight = TileData.ItemTable[m_ItemID].Weight; + + if ( weight == 255 || weight == 0 ) + weight = 1; + + return weight; + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public double Weight + { + get + { + CompactInfo info = LookupCompactInfo(); + + if ( info != null && info.m_Weight != -1 ) + return info.m_Weight; + + return this.DefaultWeight; + } + set + { + if ( this.Weight != value ) + { + CompactInfo info = AcquireCompactInfo(); + + int oldPileWeight = this.PileWeight; + + info.m_Weight = value; + + if ( info.m_Weight == -1 ) + VerifyCompactInfo(); + + int newPileWeight = this.PileWeight; + + UpdateTotal( this, TotalType.Weight, newPileWeight - oldPileWeight ); + + InvalidateProperties(); + } + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int PileWeight + { + get + { + return (int)Math.Ceiling( this.Weight * this.Amount ); + } + } + + public virtual int HuedItemID + { + get + { + return m_ItemID; + } + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public virtual int Hue + { + get + { + return m_Hue; + } + set + { + if ( m_Hue != value ) + { + m_Hue = value; + ReleaseWorldPackets(); + + Delta( ItemDelta.Update ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual Layer Layer + { + get + { + return m_Layer; + } + set + { + if ( m_Layer != value ) + { + m_Layer = value; + + Delta( ItemDelta.EquipOnly ); + } + } + } + + public List Items + { + get + { + List items = LookupItems(); + + if( items == null ) + items = EmptyItems; + + return items; + } + } + + public object RootParent + { + get + { + object p = m_Parent; + + while ( p is Item ) + { + Item item = (Item)p; + + if ( item.m_Parent == null ) + { + break; + } + else + { + p = item.m_Parent; + } + } + + return p; + } + } + + public bool ParentsContain() where T : Item + { + object p = m_Parent; + + while( p is Item ) + { + if( p is T ) + return true; + + Item item = (Item)p; + + if( item.m_Parent == null ) + { + break; + } + else + { + p = item.m_Parent; + } + } + + return false; + } + + public static bool isModded( Item item ) + { + if ( item.ItemID >= 0x2A05 && item.ItemID <= 0x2A26 ) + return true; + + return false; + } + + public static int modVal( int id ) + { + if ( id == 0x13be ){ id = 0x2A06; } + else if ( id == 0x13bf ){ id = 0x2A17; } + else if ( id == 0x13c3 ){ id = 0x2A06; } + else if ( id == 0x13c4 ){ id = 0x2A17; } + else if ( id == 0x13c5 ){ id = 0x2A12; } + else if ( id == 0x13cb ){ id = 0x2A09; } + else if ( id == 0x13cc ){ id = 0x2A18; } + else if ( id == 0x13cd ){ id = 0x2A12; } + else if ( id == 0x13d2 ){ id = 0x2A09; } + else if ( id == 0x13d3 ){ id = 0x2A18; } + else if ( id == 0x13d4 ){ id = 0x2A15; } + else if ( id == 0x13da ){ id = 0x2A0C; } + else if ( id == 0x13db ){ id = 0x2A1D; } + else if ( id == 0x13dc ){ id = 0x2A15; } + else if ( id == 0x13e1 ){ id = 0x2A0C; } + else if ( id == 0x13e2 ){ id = 0x2A1D; } + else if ( id == 0x13ec ){ id = 0x2A1C; } + else if ( id == 0x13ed ){ id = 0x2A1C; } + else if ( id == 0x13ee ){ id = 0x2A14; } + else if ( id == 0x13ef ){ id = 0x2A14; } + else if ( id == 0x13f0 ){ id = 0x2A0B; } + else if ( id == 0x13f1 ){ id = 0x2A0B; } + else if ( id == 0x1410 ){ id = 0x2A13; } + else if ( id == 0x1411 ){ id = 0x2A0A; } + else if ( id == 0x1415 ){ id = 0x2A1A; } + else if ( id == 0x1416 ){ id = 0x2A1A; } + else if ( id == 0x1417 ){ id = 0x2A13; } + else if ( id == 0x141a ){ id = 0x2A0A; } + else if ( id == 0x144e ){ id = 0x2A11; } + else if ( id == 0x144f ){ id = 0x2A16; } + else if ( id == 0x1452 ){ id = 0x2A05; } + else if ( id == 0x1453 ){ id = 0x2A11; } + else if ( id == 0x1454 ){ id = 0x2A16; } + else if ( id == 0x1457 ){ id = 0x2A05; } + else if ( id == 0x1516 ){ id = 0x2A0F; } + else if ( id == 0x1517 ){ id = 0x2A22; } + else if ( id == 0x1518 ){ id = 0x2A22; } + else if ( id == 0x152e ){ id = 0x2A0D; } + else if ( id == 0x152f ){ id = 0x2A0D; } + else if ( id == 0x1531 ){ id = 0x2A0F; } + else if ( id == 0x1537 ){ id = 0x2A10; } + else if ( id == 0x1538 ){ id = 0x2A10; } + else if ( id == 0x1539 ){ id = 0x2A0E; } + else if ( id == 0x153a ){ id = 0x2A0E; } + else if ( id == 0x1c00 ){ id = 0x2A08; } + else if ( id == 0x1c01 ){ id = 0x2A08; } + else if ( id == 0x1c02 ){ id = 0x2A1E; } + else if ( id == 0x1c03 ){ id = 0x2A1E; } + else if ( id == 0x1c04 ){ id = 0x2A1B; } + else if ( id == 0x1c05 ){ id = 0x2A1B; } + else if ( id == 0x1c06 ){ id = 0x2A19; } + else if ( id == 0x1c07 ){ id = 0x2A19; } + else if ( id == 0x1c08 ){ id = 0x2A07; } + else if ( id == 0x1c09 ){ id = 0x2A07; } + else if ( id == 0x1c0a ){ id = 0x2A1F; } + else if ( id == 0x1c0b ){ id = 0x2A1F; } + else if ( id == 0x1c0c ){ id = 0x2A20; } + else if ( id == 0x1c0d ){ id = 0x2A20; } + else if ( id == 0x1efd ){ id = 0x2A21; } + else if ( id == 0x1efe ){ id = 0x2A21; } + else if ( id == 0x1f7b ){ id = 0x2A23; } + else if ( id == 0x1f7c ){ id = 0x2A23; } + else if ( id == 0x1f9f ){ id = 0x2A26; } + else if ( id == 0x1fa0 ){ id = 0x2A26; } + else if ( id == 0x1fa1 ){ id = 0x2A25; } + else if ( id == 0x1fa2 ){ id = 0x2A25; } + else if ( id == 0x1ffd ){ id = 0x2A24; } + else if ( id == 0x1ffe ){ id = 0x2A24; } + + return id; + } + + public static void doMod( Item item ) + { + if ( item.GraphicID < 1 ){ item.GraphicID = item.ItemID; } + + if ( !isModded( item ) ) + { + if ( + item.ItemID == 0x144e || // bone arms + item.ItemID == 0x1453 || // bone arms + item.ItemID == 0x1452 || // bone legs + item.ItemID == 0x1457 || // bone legs + item.ItemID == 0x13be || // chain legs + item.ItemID == 0x13c3 || // chain legs + item.ItemID == 0x1f7b || // doublet + item.ItemID == 0x1f7c || // doublet + item.ItemID == 0x1f9f || // jester suit + item.ItemID == 0x1fa0 || // jester suit + item.ItemID == 0x1537 || // kilt + item.ItemID == 0x1538 || // kilt + item.ItemID == 0x13c5 || // leather arms + item.ItemID == 0x13cd || // leather arms + item.ItemID == 0x13cb || // leather legs + item.ItemID == 0x13d2 || // leather legs + item.ItemID == 0x1c00 || // leather shorts + item.ItemID == 0x1c01 || // leather shorts + item.ItemID == 0x1c08 || // leather skirt + item.ItemID == 0x1c09 || // leather skirt + item.ItemID == 0x1539 || // long pants + item.ItemID == 0x153a || // long pants + item.ItemID == 0x1410 || // plate arms + item.ItemID == 0x1417 || // plate arms + item.ItemID == 0x1411 || // plate legs + item.ItemID == 0x141a || // plate legs + item.ItemID == 0x13ee || // ringmail arms + item.ItemID == 0x13ef || // ringmail arms + item.ItemID == 0x13f0 || // ringmail legs + item.ItemID == 0x13f1 || // ringmail legs + item.ItemID == 0x152e || // short pants + item.ItemID == 0x152f || // short pants + item.ItemID == 0x1516 || // skirt + item.ItemID == 0x1531 || // skirt + item.ItemID == 0x13d4 || // studded arms + item.ItemID == 0x13dc || // studded arms + item.ItemID == 0x13da || // studded legs + item.ItemID == 0x13e1 || // studded legs + item.ItemID == 0x1ffd || // surcoat + item.ItemID == 0x1ffe || // surcoat + item.ItemID == 0x1fa1 || // tunic + item.ItemID == 0x1fa2 ) // tunic + + item.ItemID = modVal( item.ItemID ); + } + } + + public static void undoMod( Item item ) + { + if ( isModded( item ) ) + { + item.ItemID = item.GraphicID; + } + } + + public static bool isCoat( Item item ) + { + if ( + item.ItemID == 0x1f7b || + item.ItemID == 0x1f7c || + item.ItemID == 0x1ffd || + item.ItemID == 0x1ffe || + item.ItemID == 0x1fa1 || + item.ItemID == 0x1fa2 || + item.ItemID == 0x1f9f || + item.ItemID == 0x1fa0 ) + return true; + + return false; + } + + public static bool isRobe( Item item ) + { + if ( + item.ItemID == 0x1F00 || + item.ItemID == 0x1EFF || + item.ItemID == 0x1f01 || + item.ItemID == 0x1f02 || + item.ItemID == 0x1F03 || + item.ItemID == 0x1F04 || + item.ItemID == 0x26AE ) + return true; + + return false; + } + + public static bool isPartialHat( Item item ) + { + if ( + item.ItemID == 0x1545 || + item.ItemID == 0x1546 || + item.ItemID == 0x13BB || + item.ItemID == 0x13C0 || + item.ItemID == 0x1547 || + item.ItemID == 0x1548 || + item.ItemID == 0x140A || + item.ItemID == 0x140B || + item.ItemID == 0x141B || + item.ItemID == 0x141C || + item.ItemID == 0x140E || + item.ItemID == 0x140F || + item.ItemID == 0x1F0B || + item.ItemID == 0x1F0C || + item.ItemID == 0x1db9 || + item.ItemID == 0x1dba ) + return true; + + return false; + } + + public static bool isFullHat( Item item ) + { + if ( + item.ItemID == 0x140C || + item.ItemID == 0x140D || + item.ItemID == 0x1451 || + item.ItemID == 0x1456 || + item.ItemID == 0x1408 || + item.ItemID == 0x1409 || + item.ItemID == 0x1412 || + item.ItemID == 0x1419 ) + return true; + + return false; + } + + public static bool isOtherHat( Item item ) + { + if ( + item.ItemID == 0x1719 || + item.ItemID == 0x1715 || + item.ItemID == 0x171A || + item.ItemID == 0x1713 || + item.ItemID == 0x171C || + item.ItemID == 0x1544 || + item.ItemID == 0x1717 || + item.ItemID == 0x1716 || + item.ItemID == 0x171B || + item.ItemID == 0x1714 || + item.ItemID == 0x1718 ) + return true; + + return false; + } + + public static bool isFullLegs( Item item ) + { + if ( + item.ItemID == 0x1411 || + item.ItemID == 0x141A ) + return true; + + return false; + } + + public static bool isArmor( Item item ) + { + if ( // NORMAL + item.ItemID == 0x144f || + item.ItemID == 0x1454 || + item.ItemID == 0x13bf || + item.ItemID == 0x13c4 || + item.ItemID == 0x13cc || + item.ItemID == 0x13d3 || + item.ItemID == 0x1c06 || + item.ItemID == 0x1c07 || + item.ItemID == 0x1415 || + item.ItemID == 0x1416 || + item.ItemID == 0x1c04 || + item.ItemID == 0x1c05 || + item.ItemID == 0x13ec || + item.ItemID == 0x13ed || + item.ItemID == 0x13db || + item.ItemID == 0x13e2 || + item.ItemID == 0x1c02 || + item.ItemID == 0x1c03 ) + return true; + + return false; + } + + public virtual void AddItem( Item item ) + { + if ( item == null || item.Deleted || item.m_Parent == this ) + { + return; + } + else if ( item == this ) + { + Console.WriteLine( "Warning: Adding item to itself: [0x{0:X} {1}].AddItem( [0x{2:X} {3}] )", this.Serial.Value, this.GetType().Name, item.Serial.Value, item.GetType().Name ); + Console.WriteLine( new System.Diagnostics.StackTrace() ); + return; + } + else if ( IsChildOf( item ) ) + { + Console.WriteLine( "Warning: Adding parent item to child: [0x{0:X} {1}].AddItem( [0x{2:X} {3}] )", this.Serial.Value, this.GetType().Name, item.Serial.Value, item.GetType().Name ); + Console.WriteLine( new System.Diagnostics.StackTrace() ); + return; + } + else if ( item.m_Parent is Mobile ) + { + ((Mobile)item.m_Parent).RemoveItem( item ); + } + else if ( item.m_Parent is Item ) + { + ((Item)item.m_Parent).RemoveItem( item ); + } + else + { + item.SendRemovePacket(); + } + + item.Parent = this; + item.Map = m_Map; + + List items = AcquireItems(); + + items.Add( item ); + + if ( !item.IsVirtualItem ) + { + UpdateTotal( item, TotalType.Gold, item.TotalGold ); + UpdateTotal( item, TotalType.Items, item.TotalItems + 1 ); + UpdateTotal( item, TotalType.Weight, item.TotalWeight + item.PileWeight ); + } + + item.Delta( ItemDelta.Update ); + + item.OnAdded( this ); + OnItemAdded( item ); + } + + private static List m_DeltaQueue = new List(); + + public void Delta( ItemDelta flags ) + { + if ( m_Map == null || m_Map == Map.Internal ) + return; + + m_DeltaFlags |= flags; + + if ( !GetFlag( ImplFlag.InQueue ) ) + { + SetFlag( ImplFlag.InQueue, true ); + + m_DeltaQueue.Add( this ); + } + + Core.Set(); + } + + public void RemDelta( ItemDelta flags ) + { + m_DeltaFlags &= ~flags; + + if ( GetFlag( ImplFlag.InQueue ) && m_DeltaFlags == ItemDelta.None ) + { + SetFlag( ImplFlag.InQueue, false ); + + m_DeltaQueue.Remove( this ); + } + } + + public void ProcessDelta() + { + ItemDelta flags = m_DeltaFlags; + + SetFlag( ImplFlag.InQueue, false ); + m_DeltaFlags = ItemDelta.None; + + Map map = m_Map; + + if ( map != null && !Deleted ) + { + bool sendOPLUpdate = ObjectPropertyList.Enabled && (flags & ItemDelta.Properties) != 0; + + Container contParent = m_Parent as Container; + + if ( contParent != null && !contParent.IsPublicContainer ) + { + if ( (flags & ItemDelta.Update) != 0 ) + { + Point3D worldLoc = GetWorldLocation(); + + Mobile rootParent = contParent.RootParent as Mobile; + Mobile tradeRecip = null; + + if ( rootParent != null ) + { + NetState ns = rootParent.NetState; + + if ( ns != null ) + { + if ( rootParent.CanSee( this ) && rootParent.InRange( worldLoc, GetUpdateRange( rootParent ) ) ) + { + if ( ns.ContainerGridLines ) + ns.Send( new ContainerContentUpdate6017( this ) ); + else + ns.Send( new ContainerContentUpdate( this ) ); + + if ( ObjectPropertyList.Enabled ) + ns.Send( OPLPacket ); + } + } + } + + SecureTradeContainer stc = this.GetSecureTradeCont(); + + if ( stc != null ) + { + SecureTrade st = stc.Trade; + + if ( st != null ) + { + Mobile test = st.From.Mobile; + + if ( test != null && test != rootParent ) + tradeRecip = test; + + test = st.To.Mobile; + + if ( test != null && test != rootParent ) + tradeRecip = test; + + if ( tradeRecip != null ) + { + NetState ns = tradeRecip.NetState; + + if ( ns != null ) + { + if ( tradeRecip.CanSee( this ) && tradeRecip.InRange( worldLoc, GetUpdateRange( tradeRecip ) ) ) + { + if ( ns.ContainerGridLines ) + ns.Send( new ContainerContentUpdate6017( this ) ); + else + ns.Send( new ContainerContentUpdate( this ) ); + + if ( ObjectPropertyList.Enabled ) + ns.Send( OPLPacket ); + } + } + } + } + } + + List openers = contParent.Openers; + + if ( openers != null ) + { + for ( int i = 0; i < openers.Count; ++i ) + { + Mobile mob = openers[i]; + + int range = GetUpdateRange( mob ); + + if ( mob.Map != map || !mob.InRange( worldLoc, range ) ) + { + openers.RemoveAt( i-- ); + } + else + { + if ( mob == rootParent || mob == tradeRecip ) + continue; + + NetState ns = mob.NetState; + + if ( ns != null ) + { + if ( mob.CanSee( this ) ) + { + if ( ns.ContainerGridLines ) + ns.Send( new ContainerContentUpdate6017( this ) ); + else + ns.Send( new ContainerContentUpdate( this ) ); + + if ( ObjectPropertyList.Enabled ) + ns.Send( OPLPacket ); + } + } + } + } + + if ( openers.Count == 0 ) + contParent.Openers = null; + } + return; + } + } + + if ( (flags & ItemDelta.Update) != 0 ) + { + Packet p = null; + Point3D worldLoc = GetWorldLocation(); + + IPooledEnumerable eable = map.GetClientsInRange( worldLoc, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) { + Mobile m = state.Mobile; + + if ( m.CanSee( this ) && m.InRange( worldLoc, GetUpdateRange( m ) ) ) { + if ( m_Parent == null ) { + SendInfoTo( state, ObjectPropertyList.Enabled ); + } else { + if ( p == null ) { + if ( m_Parent is Item ) { + if ( state.ContainerGridLines ) + state.Send( new ContainerContentUpdate6017( this ) ); + else + state.Send( new ContainerContentUpdate( this ) ); + } else if ( m_Parent is Mobile ) { + p = new EquipUpdate( this ); + p.Acquire(); + state.Send( p ); + } + } else { + state.Send( p ); + } + + if ( ObjectPropertyList.Enabled ) { + state.Send( OPLPacket ); + } + } + } + } + + if ( p != null ) + Packet.Release( p ); + + eable.Free(); + sendOPLUpdate = false; + } + else if ( (flags & ItemDelta.EquipOnly ) != 0 ) + { + if ( m_Parent is Mobile ) + { + Packet p = null; + Point3D worldLoc = GetWorldLocation(); + + IPooledEnumerable eable = map.GetClientsInRange( worldLoc, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.CanSee( this ) && m.InRange( worldLoc, GetUpdateRange( m ) ) ) + { + //if ( sendOPLUpdate ) + // state.Send( RemovePacket ); + + if ( p == null ) + p = Packet.Acquire( new EquipUpdate( this ) ); + + state.Send( p ); + + if ( ObjectPropertyList.Enabled ) + state.Send( OPLPacket ); + } + } + + Packet.Release( p ); + + eable.Free(); + sendOPLUpdate = false; + } + } + + if ( sendOPLUpdate ) + { + Point3D worldLoc = GetWorldLocation(); + IPooledEnumerable eable = map.GetClientsInRange( worldLoc, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.CanSee( this ) && m.InRange( worldLoc, GetUpdateRange( m ) ) ) + state.Send( OPLPacket ); + } + + eable.Free(); + } + } + } + + public static void ProcessDeltaQueue() + { + int count = m_DeltaQueue.Count; + + for ( int i = 0; i < m_DeltaQueue.Count; ++i ) + { + m_DeltaQueue[i].ProcessDelta(); + + if ( i >= count ) + break; + } + + if ( m_DeltaQueue.Count > 0 ) + m_DeltaQueue.Clear(); + } + + public virtual void OnDelete() + { + if ( m_Spawner != null ) + { + m_Spawner.Remove( this ); + m_Spawner = null; + } + } + + public virtual void OnParentDeleted( object parent ) + { + this.Delete(); + } + + public virtual void FreeCache() + { + ReleaseWorldPackets(); + Packet.Release( ref m_RemovePacket ); + Packet.Release( ref m_OPLPacket ); + Packet.Release( ref m_PropertyList ); + } + + public virtual void Delete() + { + if ( Deleted ) + return; + else if ( !World.OnDelete( this ) ) + return; + + OnDelete(); + + List items = LookupItems(); + + if ( items != null ) + { + for ( int i = items.Count - 1; i >= 0; --i ) + { + if ( i < items.Count ) + items[i].OnParentDeleted( this ); + } + } + + SendRemovePacket(); + + SetFlag( ImplFlag.Deleted, true ); + + if ( Parent is Mobile ) + ((Mobile)Parent).RemoveItem( this ); + else if ( Parent is Item ) + ((Item)Parent).RemoveItem( this ); + + ClearBounce(); + + if ( m_Map != null ) + { + if ( m_Parent == null ) + m_Map.OnLeave( this ); + m_Map = null; + } + + World.RemoveItem( this ); + + OnAfterDelete(); + + FreeCache(); + } + + public void PublicOverheadMessage( MessageType type, int hue, bool ascii, string text ) + { + if ( m_Map != null ) + { + Packet p = null; + Point3D worldLoc = GetWorldLocation(); + + IPooledEnumerable eable = m_Map.GetClientsInRange( worldLoc, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.CanSee( this ) && m.InRange( worldLoc, GetUpdateRange( m ) ) ) + { + if ( p == null ) + { + if ( ascii ) + p = new AsciiMessage( m_Serial, m_ItemID, type, hue, 3, this.Name, text ); + else + p = new UnicodeMessage( m_Serial, m_ItemID, type, hue, 3, "ENU", this.Name, text ); + + p.Acquire(); + } + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + public void PublicOverheadMessage( MessageType type, int hue, int number ) + { + PublicOverheadMessage( type, hue, number, "" ); + } + + public void PublicOverheadMessage( MessageType type, int hue, int number, string args ) + { + if ( m_Map != null ) + { + Packet p = null; + Point3D worldLoc = GetWorldLocation(); + + IPooledEnumerable eable = m_Map.GetClientsInRange( worldLoc, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.CanSee( this ) && m.InRange( worldLoc, GetUpdateRange( m ) ) ) + { + if ( p == null ) + p = Packet.Acquire( new MessageLocalized( m_Serial, m_ItemID, type, hue, 3, number, this.Name, args ) ); + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + public virtual void OnAfterDelete() + { + } + + public virtual void RemoveItem( Item item ) + { + List items = LookupItems(); + + if ( items != null && items.Contains( item ) ) + { + item.SendRemovePacket(); + + items.Remove( item ); + + if ( !item.IsVirtualItem ) + { + UpdateTotal( item, TotalType.Gold, -item.TotalGold ); + UpdateTotal( item, TotalType.Items, -( item.TotalItems + 1 ) ); + UpdateTotal( item, TotalType.Weight, -( item.TotalWeight + item.PileWeight ) ); + } + + item.Parent = null; + + item.OnRemoved( this ); + OnItemRemoved( item ); + } + } + + public virtual void OnAfterDuped( Item newItem ) + { + } + + public virtual bool OnDragLift( Mobile from ) + { + return true; + } + + public virtual bool OnEquip( Mobile from ) + { + from.ProcessClothing(); + from.ProcessHair(); + return true; + } + + //TODO: Move to CompactInfo. + private ISpawner m_Spawner; + + public ISpawner Spawner{ get{ return m_Spawner; } set{ m_Spawner = value; } } + + public virtual void OnBeforeSpawn( Point3D location, Map m ) + { + } + + public virtual void OnAfterSpawn() + { + } + + [CommandProperty( AccessLevel.Counselor )] + public Serial Serial + { + get + { + return m_Serial; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public IEntity ParentEntity + { + get + { + IEntity p = Parent as IEntity; + + return p; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public IEntity RootParentEntity + { + get + { + IEntity p = RootParent as IEntity; + + return p; + } + } + + #region Location Location Location! + + public virtual void OnLocationChange( Point3D oldLocation ) + { + SyncItem(); + Mobile.ShowItem( this ); + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public virtual Point3D Location + { + get + { + return m_Location; + } + set + { + Point3D oldLocation = m_Location; + + if ( oldLocation != value ) + { + if ( m_Map != null ) + { + if ( m_Parent == null ) + { + IPooledEnumerable eable; + + if ( m_Location.m_X != 0 ) + { + Packet removeThis = null; + + eable = m_Map.GetClientsInRange( oldLocation, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( !m.InRange( value, GetUpdateRange( m ) ) ) + { + if ( removeThis == null ) + removeThis = this.RemovePacket; + + state.Send( removeThis ); + } + } + + eable.Free(); + } + + m_Location = value; + ReleaseWorldPackets(); + + SetLastMoved(); + + eable = m_Map.GetClientsInRange( m_Location, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.CanSee( this ) && m.InRange( m_Location, GetUpdateRange( m ) ) ) + SendInfoTo( state ); + } + + eable.Free(); + + RemDelta( ItemDelta.Update ); + } + else if ( m_Parent is Item ) + { + m_Location = value; + ReleaseWorldPackets(); + + Delta( ItemDelta.Update ); + } + else + { + m_Location = value; + ReleaseWorldPackets(); + } + + if ( m_Parent == null ) + m_Map.OnMove( oldLocation, this ); + } + else + { + m_Location = value; + ReleaseWorldPackets(); + } + + this.OnLocationChange( oldLocation ); + } + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int X + { + get{ return m_Location.m_X; } + set{ Location = new Point3D( value, m_Location.m_Y, m_Location.m_Z ); } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Y + { + get{ return m_Location.m_Y; } + set{ Location = new Point3D( m_Location.m_X, value, m_Location.m_Z ); } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Z + { + get{ return m_Location.m_Z; } + set{ Location = new Point3D( m_Location.m_X, m_Location.m_Y, value ); } + } + #endregion + + [CommandProperty( AccessLevel.GameMaster )] + public virtual int ItemID + { + get + { + return m_ItemID; + } + set + { + if ( m_ItemID != value ) + { + int oldPileWeight = this.PileWeight; + + m_ItemID = value; + ReleaseWorldPackets(); + + int newPileWeight = this.PileWeight; + + UpdateTotal( this, TotalType.Weight, newPileWeight - oldPileWeight ); + + InvalidateProperties(); + Delta( ItemDelta.Update ); + } + } + } + + public virtual string DefaultName + { + get { return null; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Name + { + get + { + CompactInfo info = LookupCompactInfo(); + + if ( info != null && info.m_Name != null ) + return info.m_Name; + + return this.DefaultName; + } + set + { + if ( value == null || value != DefaultName ) + { + CompactInfo info = AcquireCompactInfo(); + + info.m_Name = value; + + if ( info.m_Name == null ) + VerifyCompactInfo(); + + InvalidateProperties(); + } + } + } + + public virtual object Parent + { + get + { + return m_Parent; + } + set + { + if ( m_Parent == value ) + return; + + object oldParent = m_Parent; + + m_Parent = value; + + if ( m_Map != null ) + { + if ( oldParent != null && m_Parent == null ) + m_Map.OnEnter( this ); + else if ( m_Parent != null ) + m_Map.OnLeave( this ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public LightType Light + { + get + { + return (LightType)m_Direction; + } + set + { + if ( (LightType)m_Direction != value ) + { + m_Direction = (Direction)value; + ReleaseWorldPackets(); + + Delta( ItemDelta.Update ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Direction Direction + { + get + { + return m_Direction; + } + set + { + if ( m_Direction != value ) + { + m_Direction = value; + ReleaseWorldPackets(); + + Delta( ItemDelta.Update ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Amount + { + get + { + return m_Amount; + } + set + { + int oldValue = m_Amount; + + if ( oldValue != value ) + { + int oldPileWeight = this.PileWeight; + + m_Amount = value; + ReleaseWorldPackets(); + + int newPileWeight = this.PileWeight; + + UpdateTotal( this, TotalType.Weight, newPileWeight - oldPileWeight ); + + OnAmountChange( oldValue ); + + Delta( ItemDelta.Update ); + + if ( oldValue > 1 || value > 1 ) + InvalidateProperties(); + + if ( !Stackable && m_Amount > 1 ) + Console.WriteLine( "Warning: 0x{0:X}: Amount changed for non-stackable item '{2}'. ({1})", m_Serial.Value, m_Amount, GetType().Name ); + } + } + } + + protected virtual void OnAmountChange( int oldValue ) + { + } + + public virtual bool HandlesOnSpeech{ get{ return false; } } + + public virtual void OnSpeech( SpeechEventArgs e ) + { + } + + public virtual bool OnDroppedToMobile( Mobile from, Mobile target ) + { + return true; + } + + public virtual bool DropToMobile( Mobile from, Mobile target, Point3D p ) + { + if ( Deleted || from.Deleted || target.Deleted || from.Map != target.Map || from.Map == null || target.Map == null ) + return false; + else if ( from.AccessLevel < AccessLevel.GameMaster && !from.InRange( target.Location, 2 ) ) + return false; + else if ( !from.CanSee( target ) || !from.InLOS( target ) ) + return false; + else if ( !from.OnDroppedItemToMobile( this, target ) ) + return false; + else if ( !OnDroppedToMobile( from, target ) ) + return false; + else if ( !target.OnDragDrop( from, this ) ) + return false; + else + return true; + } + + public virtual bool OnDroppedInto( Mobile from, Container target, Point3D p ) + { + if( !from.OnDroppedItemInto( this, target, p ) ) + { + return false; + } + + return target.OnDragDropInto( from, this, p ); + } + + public virtual bool OnDroppedOnto( Mobile from, Item target ) + { + if ( Deleted || from.Deleted || target.Deleted || from.Map != target.Map || from.Map == null || target.Map == null ) + return false; + else if ( from.AccessLevel < AccessLevel.GameMaster && !from.InRange( target.GetWorldLocation(), 2 ) ) + return false; + else if ( !from.CanSee( target ) || !from.InLOS( target ) ) + return false; + else if ( !target.IsAccessibleTo( from ) ) + return false; + else if ( !from.OnDroppedItemOnto( this, target ) ) + return false; + else + return target.OnDragDrop( from, this ); + } + + public virtual bool DropToItem( Mobile from, Item target, Point3D p ) + { + if ( Deleted || from.Deleted || target.Deleted || from.Map != target.Map || from.Map == null || target.Map == null ) + return false; + + object root = target.RootParent; + + if ( from.AccessLevel < AccessLevel.GameMaster && !from.InRange( target.GetWorldLocation(), 2 ) ) + return false; + else if ( !from.CanSee( target ) || !from.InLOS( target ) ) + return false; + else if ( !target.IsAccessibleTo( from ) ) + return false; + else if ( root is Mobile && !((Mobile)root).CheckNonlocalDrop( from, this, target ) ) + return false; + else if ( !from.OnDroppedItemToItem( this, target, p ) ) + return false; + else if ( target is Container && p.m_X != -1 && p.m_Y != -1 ) + return OnDroppedInto( from, (Container)target, p ); + else + return OnDroppedOnto( from, target ); + } + + public virtual bool OnDroppedToWorld( Mobile from, Point3D p ) + { + return true; + } + + public virtual int GetLiftSound( Mobile from ) + { + return 0x57; + } + + private static int m_OpenSlots; + + public virtual bool DropToWorld( Mobile from, Point3D p ) + { + if ( Deleted || from.Deleted || from.Map == null ) + return false; + else if ( !from.InRange( p, 2 ) ) + return false; + + Map map = from.Map; + + if ( map == null ) + return false; + + int x = p.m_X, y = p.m_Y; + int z = int.MinValue; + + int maxZ = from.Z + 16; + + LandTile landTile = map.Tiles.GetLandTile( x, y ); + TileFlag landFlags = TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags; + + int landZ = 0, landAvg = 0, landTop = 0; + map.GetAverageZ( x, y, ref landZ, ref landAvg, ref landTop ); + + if ( !landTile.Ignored && (landFlags & TileFlag.Impassable) == 0 ) + { + if ( landAvg <= maxZ ) + z = landAvg; + } + + StaticTile[] tiles = map.Tiles.GetStaticTiles( x, y, true ); + + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + + if ( !id.Surface ) + continue; + + int top = tile.Z + id.CalcHeight; + + if ( top > maxZ || top < z ) + continue; + + z = top; + } + + List items = new List(); + + IPooledEnumerable eable = map.GetItemsInRange( p, 0 ); + + foreach ( Item item in eable ) + { + if ( item is BaseMulti || item.ItemID > TileData.MaxItemValue ) + continue; + + items.Add( item ); + + ItemData id = item.ItemData; + + if ( !id.Surface ) + continue; + + int top = item.Z + id.CalcHeight; + + if ( top > maxZ || top < z ) + continue; + + z = top; + } + + eable.Free(); + + if ( z == int.MinValue ) + return false; + + if ( z > maxZ ) + return false; + + m_OpenSlots = (1<<20)-1; + + int surfaceZ = z; + + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + + int checkZ = tile.Z; + int checkTop = checkZ + id.CalcHeight; + + if ( checkTop == checkZ && !id.Surface ) + ++checkTop; + + int zStart = checkZ - z; + int zEnd = checkTop - z; + + if ( zStart >= 20 || zEnd < 0 ) + continue; + + if ( zStart < 0 ) + zStart = 0; + + if ( zEnd > 19 ) + zEnd = 19; + + int bitCount = zEnd-zStart; + + m_OpenSlots &= ~(((1<= 20 || zEnd < 0 ) + continue; + + if ( zStart < 0 ) + zStart = 0; + + if ( zEnd > 19 ) + zEnd = 19; + + int bitCount = zEnd-zStart; + + m_OpenSlots &= ~(((1< 30 ) + height = 30; + + int match = (1< 20 ) + match >>= 1; + + okay = ((m_OpenSlots>>i)&match) == match; + + if ( okay ) + { + z += i; + break; + } + } + + if ( !okay ) + return false; + + height = ItemData.Height; + + if ( height == 0 ) + ++height; + + if ( landAvg > z && (z + height) > landZ ) + return false; + else if ( (landFlags & TileFlag.Impassable) != 0 && landAvg > surfaceZ && (z + height) > landZ ) + return false; + + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + + int checkZ = tile.Z; + int checkTop = checkZ + id.CalcHeight; + + if ( checkTop > z && (z + height) > checkZ ) + return false; + else if ( (id.Surface || id.Impassable) && checkTop > surfaceZ && (z + height) > checkZ ) + return false; + } + + for ( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + ItemData id = item.ItemData; + + //int checkZ = item.Z; + //int checkTop = checkZ + id.CalcHeight; + + if ( (item.Z + id.CalcHeight) > z && (z + height) > item.Z ) + return false; + } + + p = new Point3D( x, y, z ); + + if ( !from.InLOS( new Point3D( x, y, z + 1 ) ) ) + return false; + else if ( !from.OnDroppedItemToWorld( this, p ) ) + return false; + else if ( !OnDroppedToWorld( from, p ) ) + return false; + + int soundID = GetDropSound(); + + MoveToWorld( p, from.Map ); + + from.SendSound( soundID == -1 ? 0x42 : soundID, GetWorldLocation() ); + + return true; + } + + public void SendRemovePacket() + { + if ( !Deleted && m_Map != null ) + { + Packet p = null; + Point3D worldLoc = GetWorldLocation(); + + IPooledEnumerable eable = m_Map.GetClientsInRange( worldLoc, GetMaxUpdateRange() ); + + foreach ( NetState state in eable ) + { + Mobile m = state.Mobile; + + if ( m.InRange( worldLoc, GetUpdateRange( m ) ) ) + { + if ( p == null ) + p = this.RemovePacket; + + state.Send( p ); + } + } + + eable.Free(); + } + } + + public virtual int GetDropSound() + { + return -1; + } + + public Point3D GetWorldLocation() + { + object root = RootParent; + + if ( root == null ) + return m_Location; + else + return ((IEntity)root).Location; + + //return root == null ? m_Location : new Point3D( (IPoint3D) root ); + } + + public virtual bool BlocksFit{ get{ return false; } } + + public Point3D GetSurfaceTop() + { + object root = RootParent; + + if ( root == null ) + return new Point3D( m_Location.m_X, m_Location.m_Y, m_Location.m_Z + (ItemData.Surface ? ItemData.CalcHeight : 0) ); + else + return ((IEntity)root).Location; + } + + public Point3D GetWorldTop() + { + object root = RootParent; + + if ( root == null ) + return new Point3D( m_Location.m_X, m_Location.m_Y, m_Location.m_Z + ItemData.CalcHeight ); + else + return ((IEntity)root).Location; + } + + public void SendLocalizedMessageTo( Mobile to, int number ) + { + if ( Deleted || !to.CanSee( this ) ) + return; + + to.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", "" ) ); + } + + public void SendLocalizedMessageTo( Mobile to, int number, string args ) + { + if ( Deleted || !to.CanSee( this ) ) + return; + + to.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", args ) ); + } + + public void SendLocalizedMessageTo( Mobile to, int number, AffixType affixType, string affix, string args ) + { + if ( Deleted || !to.CanSee( this ) ) + return; + + to.Send( new MessageLocalizedAffix( Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", affixType, affix, args ) ); + } + + #region OnDoubleClick[...] + + public virtual void OnDoubleClick( Mobile from ) + { + } + + public virtual void OnDoubleClickOutOfRange( Mobile from ) + { + } + + public virtual void OnDoubleClickCantSee( Mobile from ) + { + } + + public virtual void OnDoubleClickDead( Mobile from ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019048 ); // I am dead and cannot do that. + } + + public virtual void OnDoubleClickNotAccessible( Mobile from ) + { + from.SendLocalizedMessage( 500447 ); // That is not accessible. + } + + public virtual void OnDoubleClickSecureTrade( Mobile from ) + { + from.SendLocalizedMessage( 500447 ); // That is not accessible. + } + #endregion + + public virtual void OnSnoop( Mobile from ) + { + } + + public bool InSecureTrade + { + get + { + return ( GetSecureTradeCont() != null ); + } + } + + public SecureTradeContainer GetSecureTradeCont() + { + object p = this; + + while ( p is Item ) + { + if ( p is SecureTradeContainer ) + return (SecureTradeContainer)p; + + p = ((Item)p).m_Parent; + } + + return null; + } + + public virtual void OnItemAdded( Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnSubItemAdded( item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).OnSubItemAdded( item ); + } + + public virtual void OnItemRemoved( Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnSubItemRemoved( item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).OnSubItemRemoved( item ); + } + + public virtual void OnSubItemAdded( Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnSubItemAdded( item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).OnSubItemAdded( item ); + } + + public virtual void OnSubItemRemoved( Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnSubItemRemoved( item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).OnSubItemRemoved( item ); + } + + public virtual void OnItemBounceCleared( Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnSubItemBounceCleared( item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).OnSubItemBounceCleared( item ); + } + + public virtual void OnSubItemBounceCleared( Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnSubItemBounceCleared( item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).OnSubItemBounceCleared( item ); + } + + public virtual bool CheckTarget( Mobile from, Server.Targeting.Target targ, object targeted ) + { + if ( m_Parent is Item ) + return ((Item)m_Parent).CheckTarget( from, targ, targeted ); + else if ( m_Parent is Mobile ) + return ((Mobile)m_Parent).CheckTarget( from, targ, targeted ); + + return true; + } + + public virtual bool IsAccessibleTo( Mobile check ) + { + if ( m_Parent is Item ) + return ((Item)m_Parent).IsAccessibleTo( check ); + + Region reg = Region.Find( GetWorldLocation(), m_Map ); + + return reg.CheckAccessibility( this, check ); + + /*SecureTradeContainer cont = GetSecureTradeCont(); + + if ( cont != null && !cont.IsChildOf( check ) ) + return false; + + return true;*/ + } + + public bool IsChildOf( object o ) + { + return IsChildOf( o, false ); + } + + public bool IsChildOf( object o, bool allowNull ) + { + object p = m_Parent; + + if ( (p == null || o == null) && !allowNull ) + return false; + + if ( p == o ) + return true; + + while ( p is Item ) + { + Item item = (Item)p; + + if ( item.m_Parent == null ) + { + break; + } + else + { + p = item.m_Parent; + + if ( p == o ) + return true; + } + } + + return false; + } + + public ItemData ItemData + { + get + { + return TileData.ItemTable[m_ItemID & TileData.MaxItemValue]; + } + } + + public virtual void OnItemUsed( Mobile from, Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnItemUsed( from, item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).OnItemUsed( from, item ); + } + + public bool CheckItemUse( Mobile from ) + { + return CheckItemUse( from, this ); + } + + public virtual bool CheckItemUse( Mobile from, Item item ) + { + if ( m_Parent is Item ) + return ((Item)m_Parent).CheckItemUse( from, item ); + else if ( m_Parent is Mobile ) + return ((Mobile)m_Parent).CheckItemUse( from, item ); + else + return true; + } + + public virtual void OnItemLifted( Mobile from, Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnItemLifted( from, item ); + else if ( m_Parent is Mobile ) + ((Mobile)m_Parent).OnItemLifted( from, item ); + } + + public bool CheckLift( Mobile from ) + { + LRReason reject = LRReason.Inspecific; + + return CheckLift( from, this, ref reject ); + } + + public virtual bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + if ( m_Parent is Item ) + return ((Item)m_Parent).CheckLift( from, item, ref reject ); + else if ( m_Parent is Mobile ) + return ((Mobile)m_Parent).CheckLift( from, item, ref reject ); + else + return true; + } + + public virtual bool CanTarget{ get{ return true; } } + public virtual bool DisplayLootType{ get{ return true; } } + + public virtual void OnSingleClickContained( Mobile from, Item item ) + { + if ( m_Parent is Item ) + ((Item)m_Parent).OnSingleClickContained( from, item ); + } + + public virtual void OnAosSingleClick( Mobile from ) + { + ObjectPropertyList opl = this.PropertyList; + + if ( opl.Header > 0 ) + from.Send( new MessageLocalized( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, opl.Header, this.Name, opl.HeaderArgs ) ); + } + + public virtual void OnSingleClick( Mobile from ) + { + if ( Deleted || !from.CanSee( this ) ) + return; + + if ( DisplayLootType ) + LabelLootTypeTo( from ); + + NetState ns = from.NetState; + + if ( ns != null ) + { + if ( this.Name == null ) + { + if ( m_Amount <= 1 ) + ns.Send( new MessageLocalized( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, LabelNumber, "", "" ) ); + else + ns.Send( new MessageLocalizedAffix( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, LabelNumber, "", AffixType.Append, String.Format( " : {0}", m_Amount ), "" ) ); + } + else + { + ns.Send( new UnicodeMessage( m_Serial, m_ItemID, MessageType.Label, 0x3B2, 3, "ENU", "", this.Name + ( m_Amount > 1 ? " : " + m_Amount : "" ) ) ); + } + } + } + + private static bool m_ScissorCopyLootType; + + public static bool ScissorCopyLootType + { + get{ return m_ScissorCopyLootType; } + set{ m_ScissorCopyLootType = value; } + } + + public virtual void ScissorHelper( Mobile from, Item newItem, int amountPerOldItem ) + { + ScissorHelper( from, newItem, amountPerOldItem, true ); + } + + public virtual void ScissorHelper( Mobile from, Item newItem, int amountPerOldItem, bool carryHue ) + { + int amount = Amount; + + if ( amount > (60000 / amountPerOldItem) ) // let's not go over 60000 + amount = (60000 / amountPerOldItem); + + Amount -= amount; + + int ourHue = Hue; + Map thisMap = this.Map; + object thisParent = this.m_Parent; + Point3D worldLoc = this.GetWorldLocation(); + LootType type = this.LootType; + + if ( Amount == 0 ) + Delete(); + + newItem.Amount = amount * amountPerOldItem; + + if ( carryHue ) + newItem.Hue = ourHue; + + if ( m_ScissorCopyLootType ) + newItem.LootType = type; + + if ( !(thisParent is Container) || !((Container)thisParent).TryDropItem( from, newItem, false ) ) + newItem.MoveToWorld( worldLoc, thisMap ); + } + + public virtual void Consume() + { + Consume( 1 ); + } + + public virtual void Consume( int amount ) + { + this.Amount -= amount; + + if ( this.Amount <= 0 ) + this.Delete(); + } + + public Mobile BlessedFor + { + get + { + CompactInfo info = LookupCompactInfo(); + + if ( info != null ) + return info.m_BlessedFor; + + return null; + } + set + { + CompactInfo info = AcquireCompactInfo(); + + info.m_BlessedFor = value; + + if ( info.m_BlessedFor == null ) + VerifyCompactInfo(); + + InvalidateProperties(); + } + } + + public virtual bool CheckBlessed( object obj ) + { + return CheckBlessed( obj as Mobile ); + } + + public virtual bool CheckBlessed( Mobile m ) + { + if ( m_LootType == LootType.Blessed ) + return true; + + return ( m != null && m == this.BlessedFor ); + } + + public virtual bool IsStandardLoot() + { + if ( this.BlessedFor != null ) + return false; + + return ( m_LootType == LootType.Regular ); + } + + public override string ToString() + { + return String.Format( "0x{0:X} \"{1}\"", m_Serial.Value, GetType().Name ); + } + + internal int m_TypeRef; + + public Item() + { + m_Serial = Serial.NewItem; + + //m_Items = new ArrayList( 1 ); + Visible = true; + Movable = true; + Amount = 1; + m_Map = Map.Internal; + + SetLastMoved(); + + World.AddItem( this ); + + Type ourType = this.GetType(); + m_TypeRef = World.m_ItemTypes.IndexOf( ourType ); + + if ( m_TypeRef == -1 ) + { + World.m_ItemTypes.Add( ourType ); + m_TypeRef = World.m_ItemTypes.Count - 1; + } + } + + [Constructable] + public Item( int itemID ) : this() + { + m_ItemID = itemID; + SyncItem(); + } + + public Item( Serial serial ) + { + m_Serial = serial; + + Type ourType = this.GetType(); + m_TypeRef = World.m_ItemTypes.IndexOf( ourType ); + + if ( m_TypeRef == -1 ) + { + World.m_ItemTypes.Add( ourType ); + m_TypeRef = World.m_ItemTypes.Count - 1; + } + } + + public virtual void OnSectorActivate() + { + } + + public virtual void OnSectorDeactivate() + { + } + } +} \ No newline at end of file diff --git a/Source/ItemBounds.cs b/Source/ItemBounds.cs new file mode 100644 index 0000000..f361adc --- /dev/null +++ b/Source/ItemBounds.cs @@ -0,0 +1,69 @@ +/*************************************************************************** + * ItemBounds.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; + +namespace Server +{ + public static class ItemBounds + { + private static Rectangle2D[] m_Bounds; + + public static Rectangle2D[] Table + { + get + { + return m_Bounds; + } + } + + static ItemBounds() + { + if ( File.Exists( "Data/Binary/Bounds.bin" ) ) + { + using ( FileStream fs = new FileStream( "Data/Binary/Bounds.bin", FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + BinaryReader bin = new BinaryReader( fs ); + + m_Bounds = new Rectangle2D[0x4000]; + + for ( int i = 0; i < 0x4000; ++i ) + { + int xMin = bin.ReadInt16(); + int yMin = bin.ReadInt16(); + int xMax = bin.ReadInt16(); + int yMax = bin.ReadInt16(); + + m_Bounds[i].Set( xMin, yMin, (xMax - xMin) + 1, (yMax - yMin) + 1 ); + } + + bin.Close(); + } + } + else + { + Console.WriteLine( "Warning: Data/Binary/Bounds.bin does not exist" ); + + m_Bounds = new Rectangle2D[0x4000]; + } + } + } +} \ No newline at end of file diff --git a/Source/Items/BaseMulti.cs b/Source/Items/BaseMulti.cs new file mode 100644 index 0000000..650796f --- /dev/null +++ b/Source/Items/BaseMulti.cs @@ -0,0 +1,174 @@ +/*************************************************************************** + * BaseMulti.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Items +{ + public class BaseMulti : Item + { + [Constructable] + public BaseMulti( int itemID ) : base( itemID ) + { + Movable = false; + } + + public BaseMulti( Serial serial ) : base( serial ) + { + } + + [CommandProperty( AccessLevel.GameMaster )] + public override int ItemID { + get { + return base.ItemID; + } + set { + if ( base.ItemID != value ) { + Map facet = ( this.Parent == null ? this.Map : null ); + + if ( facet != null ) { + facet.OnLeave( this ); + } + + base.ItemID = value; + + if ( facet != null ) { + facet.OnEnter( this ); + } + } + } + } + + [Obsolete( "Replace with calls to OnLeave and OnEnter surrounding component invalidation.", true )] + public virtual void RefreshComponents() + { + if ( this.Parent == null ) { + Map facet = this.Map; + + if ( facet != null ) { + facet.OnLeave( this ); + facet.OnEnter( this ); + } + } + } + + public override int LabelNumber + { + get + { + MultiComponentList mcl = this.Components; + + if ( mcl.List.Length > 0 ) { + int id = mcl.List[0].m_ItemID; + + if ( id < 0x4000 ) + return 1020000 + id; + else + return 1078872 + id; + } + + return base.LabelNumber; + } + } + + public override int GetMaxUpdateRange() + { + return 22; + } + + public override int GetUpdateRange( Mobile m ) + { + return 22; + } + + public virtual MultiComponentList Components + { + get + { + return MultiData.GetComponents( ItemID ); + } + } + + public virtual bool Contains( Point2D p ) + { + return Contains( p.m_X, p.m_Y ); + } + + public virtual bool Contains( Point3D p ) + { + return Contains( p.m_X, p.m_Y ); + } + + public virtual bool Contains( IPoint3D p ) + { + return Contains( p.X, p.Y ); + } + + public virtual bool Contains( int x, int y ) + { + MultiComponentList mcl = this.Components; + + x -= this.X + mcl.Min.m_X; + y -= this.Y + mcl.Min.m_Y; + + return x >= 0 + && x < mcl.Width + && y >= 0 + && y < mcl.Height + && mcl.Tiles[x][y].Length > 0; + } + + public bool Contains( Mobile m ) + { + if ( m.Map == this.Map ) + return Contains( m.X, m.Y ); + else + return false; + } + + public bool Contains( Item item ) + { + if ( item.Map == this.Map ) + return Contains( item.X, item.Y ); + else + return false; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 1 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + if ( version == 0 ) { + if ( ItemID >= 0x4000 ) { + ItemID -= 0x4000; + } + } + } + } +} \ No newline at end of file diff --git a/Source/Items/Container.cs b/Source/Items/Container.cs new file mode 100644 index 0000000..f768469 --- /dev/null +++ b/Source/Items/Container.cs @@ -0,0 +1,1826 @@ +/*************************************************************************** + * Container.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using Server.Network; + +namespace Server.Items +{ + public delegate void OnItemConsumed( Item item, int amount ); + public delegate int CheckItemGroup( Item a, Item b ); + + public delegate void ContainerSnoopHandler( Container cont, Mobile from ); + + public class Container : Item + { + private static ContainerSnoopHandler m_SnoopHandler; + + public static ContainerSnoopHandler SnoopHandler + { + get{ return m_SnoopHandler; } + set{ m_SnoopHandler = value; } + } + + private ContainerData m_ContainerData; + + private int m_DropSound; + private int m_GumpID; + private int m_MaxItems; + + private int m_TotalItems; + private int m_TotalWeight; + private int m_TotalGold; + + private bool m_LiftOverride; + + internal List m_Items; + + public ContainerData ContainerData + { + get + { + if ( m_ContainerData == null ) + UpdateContainerData(); + + return m_ContainerData; + } + set{ m_ContainerData = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public override int ItemID + { + get{ return base.ItemID; } + set + { + int oldID = this.ItemID; + + base.ItemID = value; + + if ( this.ItemID != oldID ) + UpdateContainerData(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int GumpID + { + get{ return ( m_GumpID == -1 ? DefaultGumpID : m_GumpID ); } + set{ m_GumpID = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int DropSound + { + get{ return ( m_DropSound == -1 ? DefaultDropSound : m_DropSound ); } + set{ m_DropSound = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MaxItems + { + get{ return ( m_MaxItems == -1 ? DefaultMaxItems : m_MaxItems ); } + set{ m_MaxItems = value; InvalidateProperties(); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual int MaxWeight + { + get + { + if ( Parent is Container && ((Container)Parent).MaxWeight == 0 ) + { + return 0; + } + else + { + return DefaultMaxWeight; + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool LiftOverride + { + get{ return m_LiftOverride; } + set{ m_LiftOverride = value; } + } + + public virtual void UpdateContainerData() + { + this.ContainerData = ContainerData.GetData( this.ItemID ); + } + + public virtual Rectangle2D Bounds{ get{ return ContainerData.Bounds; } } + public virtual int DefaultGumpID{ get{ return ContainerData.GumpID; } } + public virtual int DefaultDropSound{ get{ return ContainerData.DropSound; } } + + public virtual int DefaultMaxItems{ get{ return m_GlobalMaxItems; } } + public virtual int DefaultMaxWeight{ get{ return m_GlobalMaxWeight; } } + + public virtual bool IsDecoContainer + { + get{ return !Movable && !IsLockedDown && !IsSecure && Parent == null && !m_LiftOverride; } + } + + public virtual int GetDroppedSound( Item item ) + { + int dropSound = item.GetDropSound(); + + return dropSound != -1 ? dropSound : DropSound; + } + + public override void OnSnoop( Mobile from ) + { + if ( m_SnoopHandler != null ) + m_SnoopHandler( this, from ); + } + + public override bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + if ( from.AccessLevel < AccessLevel.GameMaster && IsDecoContainer ) + { + reject = LRReason.CannotLift; + return false; + } + + return base.CheckLift( from, item, ref reject ); + } + + public override bool CheckItemUse( Mobile from, Item item ) + { + if ( item != this && from.AccessLevel < AccessLevel.GameMaster && IsDecoContainer ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return false; + } + + return base.CheckItemUse( from, item ); + } + + public bool CheckHold( Mobile m, Item item, bool message ) + { + return CheckHold( m, item, message, true, 0, 0 ); + } + + public bool CheckHold( Mobile m, Item item, bool message, bool checkItems ) + { + return CheckHold( m, item, message, checkItems, 0, 0 ); + } + + public virtual bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight ) + { + if ( m.AccessLevel < AccessLevel.GameMaster ) + { + if ( IsDecoContainer ) + { + if ( message ) + SendCantStoreMessage( m, item ); + + return false; + } + + int maxItems = this.MaxItems; + + if ( checkItems && maxItems != 0 && (this.TotalItems + plusItems + item.TotalItems + (item.IsVirtualItem ? 0 : 1)) > maxItems ) + { + if ( message ) + SendFullItemsMessage( m, item ); + + return false; + } + else + { + int maxWeight = this.MaxWeight; + + if ( maxWeight != 0 && (this.TotalWeight + plusWeight + item.TotalWeight + item.PileWeight) > maxWeight ) + { + if ( message ) + SendFullWeightMessage( m, item ); + + return false; + } + } + } + + object parent = this.Parent; + + while ( parent != null ) + { + if ( parent is Container ) + return ((Container)parent).CheckHold( m, item, message, checkItems, plusItems, plusWeight ); + else if ( parent is Item ) + parent = ((Item)parent).Parent; + else + break; + } + + return true; + } + + public virtual void SendFullItemsMessage( Mobile to, Item item ) + { + to.SendMessage( "That container cannot hold more items." ); + } + + public virtual void SendFullWeightMessage( Mobile to, Item item ) + { + to.SendMessage( "That container cannot hold more weight." ); + } + + public virtual void SendCantStoreMessage( Mobile to, Item item ) + { + to.SendLocalizedMessage( 500176 ); // That is not your container, you can't store things here. + } + + public virtual bool OnDragDropInto( Mobile from, Item item, Point3D p ) + { + if ( !CheckHold( from, item, true, true ) ) + return false; + + item.Location = new Point3D( p.m_X, p.m_Y, 0 ); + AddItem( item ); + + from.SendSound( GetDroppedSound( item ), GetWorldLocation() ); + + return true; + } + + private class GroupComparer : IComparer + { + private CheckItemGroup m_Grouper; + + public GroupComparer( CheckItemGroup grouper ) + { + m_Grouper = grouper; + } + + public int Compare( object x, object y ) + { + Item a = (Item)x; + Item b = (Item)y; + + return m_Grouper( a, b ); + } + } + + #region Consume[...] + + public bool ConsumeTotalGrouped( Type type, int amount, bool recurse, OnItemConsumed callback, CheckItemGroup grouper ) + { + if ( grouper == null ) + throw new ArgumentNullException(); + + Item[] typedItems = FindItemsByType( type, recurse ); + + List> groups = new List>(); + int idx = 0; + + while ( idx < typedItems.Length ) + { + Item a = typedItems[idx++]; + List group = new List(); + + group.Add( a ); + + while ( idx < typedItems.Length ) + { + Item b = typedItems[idx]; + int v = grouper( a, b ); + + if ( v == 0 ) + group.Add( b ); + else + break; + + ++idx; + } + + groups.Add( group ); + } + + Item[][] items = new Item[groups.Count][]; + int[] totals = new int[groups.Count]; + + bool hasEnough = false; + + for ( int i = 0; i < groups.Count; ++i ) + { + items[i] = groups[i].ToArray(); + //items[i] = (Item[])(((ArrayList)groups[i]).ToArray( typeof( Item ) )); + + for ( int j = 0; j < items[i].Length; ++j ) + totals[i] += items[i][j].Amount; + + if ( totals[i] >= amount ) + hasEnough = true; + } + + if ( !hasEnough ) + return false; + + for ( int i = 0; i < items.Length; ++i ) + { + if ( totals[i] >= amount ) + { + int need = amount; + + for ( int j = 0; j < items[i].Length; ++j ) + { + Item item = items[i][j]; + + int theirAmount = item.Amount; + + if ( theirAmount < need ) + { + if ( callback != null ) + callback( item, theirAmount ); + + item.Delete(); + need -= theirAmount; + } + else + { + if ( callback != null ) + callback( item, need ); + + item.Consume( need ); + break; + } + } + + break; + } + } + + return true; + } + + public int ConsumeTotalGrouped( Type[] types, int[] amounts, bool recurse, OnItemConsumed callback, CheckItemGroup grouper ) + { + if ( types.Length != amounts.Length ) + throw new ArgumentException(); + else if ( grouper == null ) + throw new ArgumentNullException(); + + Item[][][] items = new Item[types.Length][][]; + int[][] totals = new int[types.Length][]; + + for ( int i = 0; i < types.Length; ++i ) + { + Item[] typedItems = FindItemsByType( types[i], recurse ); + + List> groups = new List>(); + int idx = 0; + + while ( idx < typedItems.Length ) + { + Item a = typedItems[idx++]; + List group = new List(); + + group.Add( a ); + + while ( idx < typedItems.Length ) + { + Item b = typedItems[idx]; + int v = grouper( a, b ); + + if ( v == 0 ) + group.Add( b ); + else + break; + + ++idx; + } + + groups.Add( group ); + } + + items[i] = new Item[groups.Count][]; + totals[i] = new int[groups.Count]; + + bool hasEnough = false; + + for ( int j = 0; j < groups.Count; ++j ) + { + items[i][j] = groups[j].ToArray(); + //items[i][j] = (Item[])(((ArrayList)groups[j]).ToArray( typeof( Item ) )); + + for ( int k = 0; k < items[i][j].Length; ++k ) + totals[i][j] += items[i][j][k].Amount; + + if ( totals[i][j] >= amounts[i] ) + hasEnough = true; + } + + if ( !hasEnough ) + return i; + } + + for ( int i = 0; i < items.Length; ++i ) + { + for ( int j = 0; j < items[i].Length; ++j ) + { + if ( totals[i][j] >= amounts[i] ) + { + int need = amounts[i]; + + for ( int k = 0; k < items[i][j].Length; ++k ) + { + Item item = items[i][j][k]; + + int theirAmount = item.Amount; + + if ( theirAmount < need ) + { + if ( callback != null ) + callback( item, theirAmount ); + + item.Delete(); + need -= theirAmount; + } + else + { + if ( callback != null ) + callback( item, need ); + + item.Consume( need ); + break; + } + } + + break; + } + } + } + + return -1; + } + + public int ConsumeTotalGrouped( Type[][] types, int[] amounts, bool recurse, OnItemConsumed callback, CheckItemGroup grouper ) + { + if ( types.Length != amounts.Length ) + throw new ArgumentException(); + else if ( grouper == null ) + throw new ArgumentNullException(); + + Item[][][] items = new Item[types.Length][][]; + int[][] totals = new int[types.Length][]; + + for ( int i = 0; i < types.Length; ++i ) + { + Item[] typedItems = FindItemsByType( types[i], recurse ); + + List> groups = new List>(); + int idx = 0; + + while ( idx < typedItems.Length ) + { + Item a = typedItems[idx++]; + List group = new List(); + + group.Add( a ); + + while ( idx < typedItems.Length ) + { + Item b = typedItems[idx]; + int v = grouper( a, b ); + + if ( v == 0 ) + group.Add( b ); + else + break; + + ++idx; + } + + groups.Add( group ); + } + + items[i] = new Item[groups.Count][]; + totals[i] = new int[groups.Count]; + + bool hasEnough = false; + + for ( int j = 0; j < groups.Count; ++j ) + { + items[i][j] = groups[j].ToArray(); + + for ( int k = 0; k < items[i][j].Length; ++k ) + totals[i][j] += items[i][j][k].Amount; + + if ( totals[i][j] >= amounts[i] ) + hasEnough = true; + } + + if ( !hasEnough ) + return i; + } + + for ( int i = 0; i < items.Length; ++i ) + { + for ( int j = 0; j < items[i].Length; ++j ) + { + if ( totals[i][j] >= amounts[i] ) + { + int need = amounts[i]; + + for ( int k = 0; k < items[i][j].Length; ++k ) + { + Item item = items[i][j][k]; + + int theirAmount = item.Amount; + + if ( theirAmount < need ) + { + if ( callback != null ) + callback( item, theirAmount ); + + item.Delete(); + need -= theirAmount; + } + else + { + if ( callback != null ) + callback( item, need ); + + item.Consume( need ); + break; + } + } + + break; + } + } + } + + return -1; + } + + public int ConsumeTotal( Type[][] types, int[] amounts ) + { + return ConsumeTotal( types, amounts, true, null ); + } + + public int ConsumeTotal( Type[][] types, int[] amounts, bool recurse ) + { + return ConsumeTotal( types, amounts, recurse, null ); + } + + public int ConsumeTotal( Type[][] types, int[] amounts, bool recurse, OnItemConsumed callback ) + { + if ( types.Length != amounts.Length ) + throw new ArgumentException(); + + Item[][] items = new Item[types.Length][]; + int[] totals = new int[types.Length]; + + for ( int i = 0; i < types.Length; ++i ) + { + items[i] = FindItemsByType( types[i], recurse ); + + for ( int j = 0; j < items[i].Length; ++j ) + totals[i] += items[i][j].Amount; + + if ( totals[i] < amounts[i] ) + return i; + } + + for ( int i = 0; i < types.Length; ++i ) + { + int need = amounts[i]; + + for ( int j = 0; j < items[i].Length; ++j ) + { + Item item = items[i][j]; + + int theirAmount = item.Amount; + + if ( theirAmount < need ) + { + if ( callback != null ) + callback( item, theirAmount ); + + item.Delete(); + need -= theirAmount; + } + else + { + if ( callback != null ) + callback( item, need ); + + item.Consume( need ); + break; + } + } + } + + return -1; + } + + public int ConsumeTotal( Type[] types, int[] amounts ) + { + return ConsumeTotal( types, amounts, true, null ); + } + + public int ConsumeTotal( Type[] types, int[] amounts, bool recurse ) + { + return ConsumeTotal( types, amounts, recurse, null ); + } + + public int ConsumeTotal( Type[] types, int[] amounts, bool recurse, OnItemConsumed callback ) + { + if ( types.Length != amounts.Length ) + throw new ArgumentException(); + + Item[][] items = new Item[types.Length][]; + int[] totals = new int[types.Length]; + + for ( int i = 0; i < types.Length; ++i ) + { + items[i] = FindItemsByType( types[i], recurse ); + + for ( int j = 0; j < items[i].Length; ++j ) + totals[i] += items[i][j].Amount; + + if ( totals[i] < amounts[i] ) + return i; + } + + for ( int i = 0; i < types.Length; ++i ) + { + int need = amounts[i]; + + for ( int j = 0; j < items[i].Length; ++j ) + { + Item item = items[i][j]; + + int theirAmount = item.Amount; + + if ( theirAmount < need ) + { + if ( callback != null ) + callback( item, theirAmount ); + + item.Delete(); + need -= theirAmount; + } + else + { + if ( callback != null ) + callback( item, need ); + + item.Consume( need ); + break; + } + } + } + + return -1; + } + + public bool ConsumeTotal( Type type, int amount ) + { + return ConsumeTotal( type, amount, true, null ); + } + + public bool ConsumeTotal( Type type, int amount, bool recurse ) + { + return ConsumeTotal( type, amount, recurse, null ); + } + + public bool ConsumeTotal( Type type, int amount, bool recurse, OnItemConsumed callback ) + { + Item[] items = FindItemsByType( type, recurse ); + + // First pass, compute total + int total = 0; + + for( int i = 0; i < items.Length; ++i ) + total += items[i].Amount; + + if( total >= amount ) + { + // We've enough, so consume it + + int need = amount; + + for( int i = 0; i < items.Length; ++i ) + { + Item item = items[i]; + + int theirAmount = item.Amount; + + if( theirAmount < need ) + { + if( callback != null ) + callback( item, theirAmount ); + + item.Delete(); + need -= theirAmount; + } + else + { + if( callback != null ) + callback( item, need ); + + item.Consume( need ); + + return true; + } + } + } + + return false; + } + + public int ConsumeUpTo( Type type, int amount ) + { + return ConsumeUpTo( type, amount, true ); + } + + public int ConsumeUpTo( Type type, int amount, bool recurse ) + { + int consumed = 0; + + Queue toDelete = new Queue(); + + RecurseConsumeUpTo( this, type, amount, recurse, ref consumed, toDelete ); + + while( toDelete.Count > 0 ) + toDelete.Dequeue().Delete(); + + return consumed; + } + + private static void RecurseConsumeUpTo( Item current, Type type, int amount, bool recurse, ref int consumed, Queue toDelete ) + { + if( current != null && current.Items.Count > 0 ) + { + List list = current.Items; + + for( int i = 0; i < list.Count; ++i ) + { + Item item = list[i]; + + if( type.IsAssignableFrom( item.GetType() ) ) + { + int need = amount - consumed; + int theirAmount = item.Amount; + + if( theirAmount <= need ) + { + toDelete.Enqueue( item ); + consumed += theirAmount; + } + else + { + item.Amount -= need; + consumed += need; + + return; + } + } + else if( recurse && item is Container ) + { + RecurseConsumeUpTo( item, type, amount, recurse, ref consumed, toDelete ); + } + } + } + } + + #endregion + + #region Get[BestGroup]Amount + public int GetBestGroupAmount( Type type, bool recurse, CheckItemGroup grouper ) + { + if( grouper == null ) + throw new ArgumentNullException(); + + int best = 0; + + Item[] typedItems = FindItemsByType( type, recurse ); + + List> groups = new List>(); + int idx = 0; + + while( idx < typedItems.Length ) + { + Item a = typedItems[idx++]; + List group = new List(); + + group.Add( a ); + + while( idx < typedItems.Length ) + { + Item b = typedItems[idx]; + int v = grouper( a, b ); + + if( v == 0 ) + group.Add( b ); + else + break; + + ++idx; + } + + groups.Add( group ); + } + + for( int i = 0; i < groups.Count; ++i ) + { + Item[] items = groups[i].ToArray(); + + //Item[] items = (Item[])(((ArrayList)groups[i]).ToArray( typeof( Item ) )); + int total = 0; + + for( int j = 0; j < items.Length; ++j ) + total += items[j].Amount; + + if( total >= best ) + best = total; + } + + return best; + } + + public int GetBestGroupAmount( Type[] types, bool recurse, CheckItemGroup grouper ) + { + if( grouper == null ) + throw new ArgumentNullException(); + + int best = 0; + + Item[] typedItems = FindItemsByType( types, recurse ); + + List> groups = new List>(); + int idx = 0; + + while( idx < typedItems.Length ) + { + Item a = typedItems[idx++]; + List group = new List(); + + group.Add( a ); + + while( idx < typedItems.Length ) + { + Item b = typedItems[idx]; + int v = grouper( a, b ); + + if( v == 0 ) + group.Add( b ); + else + break; + + ++idx; + } + + groups.Add( group ); + } + + for( int j = 0; j < groups.Count; ++j ) + { + Item[] items = groups[j].ToArray(); + //Item[] items = (Item[])(((ArrayList)groups[j]).ToArray( typeof( Item ) )); + int total = 0; + + for( int k = 0; k < items.Length; ++k ) + total += items[k].Amount; + + if( total >= best ) + best = total; + } + + return best; + } + + public int GetBestGroupAmount( Type[][] types, bool recurse, CheckItemGroup grouper ) + { + if( grouper == null ) + throw new ArgumentNullException(); + + int best = 0; + + for( int i = 0; i < types.Length; ++i ) + { + Item[] typedItems = FindItemsByType( types[i], recurse ); + + List> groups = new List>(); + int idx = 0; + + while( idx < typedItems.Length ) + { + Item a = typedItems[idx++]; + List group = new List(); + + group.Add( a ); + + while( idx < typedItems.Length ) + { + Item b = typedItems[idx]; + int v = grouper( a, b ); + + if( v == 0 ) + group.Add( b ); + else + break; + + ++idx; + } + + groups.Add( group ); + } + + for( int j = 0; j < groups.Count; ++j ) + { + Item[] items = groups[j].ToArray(); + //Item[] items = (Item[])(((ArrayList)groups[j]).ToArray( typeof( Item ) )); + int total = 0; + + for( int k = 0; k < items.Length; ++k ) + total += items[k].Amount; + + if( total >= best ) + best = total; + } + } + + return best; + } + + public int GetAmount( Type type ) + { + return GetAmount( type, true ); + } + + public int GetAmount( Type type, bool recurse ) + { + Item[] items = FindItemsByType( type, recurse ); + + int amount = 0; + + for ( int i = 0; i < items.Length; ++i ) + amount += items[i].Amount; + + return amount; + } + + public int GetAmount( Type[] types ) + { + return GetAmount( types, true ); + } + + public int GetAmount( Type[] types, bool recurse ) + { + Item[] items = FindItemsByType( types, recurse ); + + int amount = 0; + + for ( int i = 0; i < items.Length; ++i ) + amount += items[i].Amount; + + return amount; + } + #endregion + + private static List m_FindItemsList = new List(); + + #region Non-Generic FindItem[s] by Type + public Item[] FindItemsByType( Type type ) + { + return FindItemsByType( type, true ); + } + + public Item[] FindItemsByType( Type type, bool recurse ) + { + if ( m_FindItemsList.Count > 0 ) + m_FindItemsList.Clear(); + + RecurseFindItemsByType( this, type, recurse, m_FindItemsList ); + + return m_FindItemsList.ToArray(); + } + + private static void RecurseFindItemsByType( Item current, Type type, bool recurse, List list ) + { + if ( current != null && current.Items.Count > 0 ) + { + List items = current.Items; + + for ( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + + if ( type.IsAssignableFrom( item.GetType() ) )// item.GetType().IsAssignableFrom( type ) ) + list.Add( item ); + + if ( recurse && item is Container ) + RecurseFindItemsByType( item, type, recurse, list ); + } + } + } + + public Item[] FindItemsByType( Type[] types ) + { + return FindItemsByType( types, true ); + } + + public Item[] FindItemsByType( Type[] types, bool recurse ) + { + if( m_FindItemsList.Count > 0 ) + m_FindItemsList.Clear(); + + RecurseFindItemsByType( this, types, recurse, m_FindItemsList ); + + return m_FindItemsList.ToArray(); + } + + private static void RecurseFindItemsByType( Item current, Type[] types, bool recurse, List list ) + { + if( current != null && current.Items.Count > 0 ) + { + List items = current.Items; + + for( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + + if( InTypeList( item, types ) ) + list.Add( item ); + + if( recurse && item is Container ) + RecurseFindItemsByType( item, types, recurse, list ); + } + } + } + + public Item FindItemByType( Type type ) + { + return FindItemByType( type, true ); + } + + public Item FindItemByType( Type type, bool recurse ) + { + return RecurseFindItemByType( this, type, recurse ); + } + + private static Item RecurseFindItemByType( Item current, Type type, bool recurse ) + { + if( current != null && current.Items.Count > 0 ) + { + List list = current.Items; + + for( int i = 0; i < list.Count; ++i ) + { + Item item = list[i]; + + if( type.IsAssignableFrom( item.GetType() ) ) + { + return item; + } + else if( recurse && item is Container ) + { + Item check = RecurseFindItemByType( item, type, recurse ); + + if( check != null ) + return check; + } + } + } + + return null; + } + + public Item FindItemByType( Type[] types ) + { + return FindItemByType( types, true ); + } + + public Item FindItemByType( Type[] types, bool recurse ) + { + return RecurseFindItemByType( this, types, recurse ); + } + + private static Item RecurseFindItemByType( Item current, Type[] types, bool recurse ) + { + if( current != null && current.Items.Count > 0 ) + { + List list = current.Items; + + for( int i = 0; i < list.Count; ++i ) + { + Item item = list[i]; + + if( InTypeList( item, types ) ) + { + return item; + } + else if( recurse && item is Container ) + { + Item check = RecurseFindItemByType( item, types, recurse ); + + if( check != null ) + return check; + } + } + } + + return null; + } + + #endregion + + #region Generic FindItem[s] by Type + public List FindItemsByType() where T : Item + { + return FindItemsByType( true, null ); + } + + public List FindItemsByType( bool recurse ) where T : Item + { + return FindItemsByType( recurse, null ); + } + + public List FindItemsByType( Predicate predicate ) where T : Item + { + return FindItemsByType( true, predicate ); + } + + public List FindItemsByType( bool recurse, Predicate predicate ) where T : Item + { + if( m_FindItemsList.Count > 0 ) + m_FindItemsList.Clear(); + + List list = new List(); + + RecurseFindItemsByType( this, recurse, list, predicate ); + + return list; + } + + private static void RecurseFindItemsByType( Item current, bool recurse, List list, Predicate predicate ) where T : Item + { + if( current != null && current.Items.Count > 0 ) + { + List items = current.Items; + + for( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + + if( typeof( T ).IsAssignableFrom( item.GetType() ) ) + { + T typedItem = (T)item; + + if( predicate == null || predicate( typedItem ) ) + list.Add( typedItem ); + } + + if( recurse && item is Container ) + RecurseFindItemsByType( item, recurse, list, predicate ); + } + } + } + + public T FindItemByType() where T : Item + { + return FindItemByType( true ); + } + + + public T FindItemByType( Predicate predicate ) where T : Item + { + return FindItemByType( true, predicate ); + } + + public T FindItemByType( bool recurse ) where T : Item + { + return FindItemByType( recurse, null ); + } + + public T FindItemByType( bool recurse, Predicate predicate ) where T : Item + { + return RecurseFindItemByType( this, recurse, predicate ); + } + + private static T RecurseFindItemByType( Item current, bool recurse, Predicate predicate ) where T : Item + { + if( current != null && current.Items.Count > 0 ) + { + List list = current.Items; + + for( int i = 0; i < list.Count; ++i ) + { + Item item = list[i]; + + if( typeof( T ).IsAssignableFrom( item.GetType() ) ) + { + T typedItem = (T)item; + + if( predicate == null || predicate( typedItem ) ) + return typedItem; + } + else if( recurse && item is Container ) + { + T check = RecurseFindItemByType( item, recurse, predicate ); + + if( check != null ) + return check; + } + } + } + + return null; + } + #endregion + + + private static bool InTypeList( Item item, Type[] types ) + { + Type t = item.GetType(); + + for ( int i = 0; i < types.Length; ++i ) + if ( types[i].IsAssignableFrom( t ) ) + return true; + + return false; + } + + private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf ) + { + if ( setIf ) + flags |= toSet; + } + + private static bool GetSaveFlag( SaveFlag flags, SaveFlag toGet ) + { + return ( (flags & toGet) != 0 ); + } + + [Flags] + private enum SaveFlag : byte + { + None = 0x00000000, + MaxItems = 0x00000001, + GumpID = 0x00000002, + DropSound = 0x00000004, + LiftOverride = 0x00000008 + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 2 ); // version + + SaveFlag flags = SaveFlag.None; + + SetSaveFlag( ref flags, SaveFlag.MaxItems, m_MaxItems != -1 ); + SetSaveFlag( ref flags, SaveFlag.GumpID, m_GumpID != -1 ); + SetSaveFlag( ref flags, SaveFlag.DropSound, m_DropSound != -1 ); + SetSaveFlag( ref flags, SaveFlag.LiftOverride, m_LiftOverride ); + + writer.Write( (byte) flags ); + + if ( GetSaveFlag( flags, SaveFlag.MaxItems ) ) + writer.WriteEncodedInt( (int) m_MaxItems ); + + if ( GetSaveFlag( flags, SaveFlag.GumpID ) ) + writer.WriteEncodedInt( (int) m_GumpID ); + + if ( GetSaveFlag( flags, SaveFlag.DropSound ) ) + writer.WriteEncodedInt( (int) m_DropSound ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 2: + { + SaveFlag flags = (SaveFlag)reader.ReadByte(); + + if ( GetSaveFlag( flags, SaveFlag.MaxItems ) ) + m_MaxItems = reader.ReadEncodedInt(); + else + m_MaxItems = -1; + + if ( GetSaveFlag( flags, SaveFlag.GumpID ) ) + m_GumpID = reader.ReadEncodedInt(); + else + m_GumpID = -1; + + if ( GetSaveFlag( flags, SaveFlag.DropSound ) ) + m_DropSound = reader.ReadEncodedInt(); + else + m_DropSound = -1; + + m_LiftOverride = GetSaveFlag( flags, SaveFlag.LiftOverride ); + + break; + } + case 1: + { + m_MaxItems = reader.ReadInt(); + goto case 0; + } + case 0: + { + if ( version < 1 ) + m_MaxItems = m_GlobalMaxItems; + + m_GumpID = reader.ReadInt(); + m_DropSound = reader.ReadInt(); + + if ( m_GumpID == DefaultGumpID ) + m_GumpID = -1; + + if ( m_DropSound == DefaultDropSound ) + m_DropSound = -1; + + if ( m_MaxItems == DefaultMaxItems ) + m_MaxItems = -1; + + //m_Bounds = new Rectangle2D( reader.ReadPoint2D(), reader.ReadPoint2D() ); + reader.ReadPoint2D(); + reader.ReadPoint2D(); + + break; + } + } + + UpdateContainerData(); + } + + private static int m_GlobalMaxItems = 125; + private static int m_GlobalMaxWeight = 400; + + public static int GlobalMaxItems{ get{ return m_GlobalMaxItems; } set{ m_GlobalMaxItems = value; } } + public static int GlobalMaxWeight{ get{ return m_GlobalMaxWeight; } set{ m_GlobalMaxWeight = value; } } + + public Container( int itemID ) : base( itemID ) + { + m_GumpID = -1; + m_DropSound = -1; + m_MaxItems = -1; + + UpdateContainerData(); + } + + public override int GetTotal( TotalType type ) + { + switch ( type ) + { + case TotalType.Gold: + return m_TotalGold; + + case TotalType.Items: + return m_TotalItems; + + case TotalType.Weight: + return m_TotalWeight; + } + + return base.GetTotal( type ); + } + + public override void UpdateTotal( Item sender, TotalType type, int delta ) + { + if ( sender != this && delta != 0 && !sender.IsVirtualItem ) + { + switch ( type ) + { + case TotalType.Gold: + m_TotalGold += delta; + break; + + case TotalType.Items: + m_TotalItems += delta; + InvalidateProperties(); + break; + + case TotalType.Weight: + m_TotalWeight += delta; + InvalidateProperties(); + break; + } + } + + base.UpdateTotal( sender, type, delta ); + } + + public override void UpdateTotals() + { + m_TotalGold = 0; + m_TotalItems = 0; + m_TotalWeight = 0; + + List items = m_Items; + + if ( items == null ) + return; + + for ( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + + item.UpdateTotals(); + + if ( item.IsVirtualItem ) + continue; + + m_TotalGold += item.TotalGold; + m_TotalItems += item.TotalItems + 1; + m_TotalWeight += item.TotalWeight + item.PileWeight; + } + } + + public Container( Serial serial ) : base( serial ) + { + } + + public virtual bool OnStackAttempt( Mobile from, Item stack, Item dropped ) + { + if ( !CheckHold( from, dropped, true, false ) ) + return false; + + return stack.StackWith( from, dropped ); + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( TryDropItem( from, dropped, true ) ) + { + from.SendSound( GetDroppedSound( dropped ), GetWorldLocation() ); + + return true; + } + else + { + return false; + } + } + + public virtual bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage ) + { + if ( !CheckHold( from, dropped, sendFullMessage, true ) ) + return false; + + List list = this.Items; + + for ( int i = 0; i < list.Count; ++i ) + { + Item item = list[i]; + + if ( !(item is Container) && item.StackWith( from, dropped, false ) ) + return true; + } + + DropItem( dropped ); + + return true; + } + + public virtual void Destroy() + { + Point3D loc = GetWorldLocation(); + Map map = Map; + + for ( int i = Items.Count - 1; i >= 0; --i ) + { + if ( i < Items.Count ) + { + Items[i].SetLastMoved(); + Items[i].MoveToWorld( loc, map ); + } + } + + Delete(); + } + + public virtual void DropItem( Item dropped ) + { + if ( dropped == null ) + return; + + AddItem( dropped ); + + Rectangle2D bounds = dropped.GetGraphicBounds(); + Rectangle2D ourBounds = this.Bounds; + + int x, y; + + if ( bounds.Width >= ourBounds.Width ) + x = (ourBounds.Width - bounds.Width) / 2; + else + x = Utility.Random( ourBounds.Width - bounds.Width ); + + if ( bounds.Height >= ourBounds.Height ) + y = (ourBounds.Height - bounds.Height) / 2; + else + y = Utility.Random( ourBounds.Height - bounds.Height ); + + x += ourBounds.X; + x -= bounds.X; + + y += ourBounds.Y; + y -= bounds.Y; + + dropped.Location = new Point3D( x, y, 0 ); + } + + public override void OnDoubleClickSecureTrade( Mobile from ) + { + if ( from.InRange( GetWorldLocation(), 2 ) ) + { + DisplayTo( from ); + + SecureTradeContainer cont = GetSecureTradeCont(); + + if ( cont != null ) + { + SecureTrade trade = cont.Trade; + + if ( trade != null && trade.From.Mobile == from ) + DisplayTo( trade.To.Mobile ); + else if ( trade != null && trade.To.Mobile == from ) + DisplayTo( trade.From.Mobile ); + } + } + else + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + } + + public virtual bool DisplaysContent{ get{ return true; } } + + public virtual bool CheckContentDisplay( Mobile from ) + { + if ( !DisplaysContent ) + return false; + + object root = this.RootParent; + + if ( root == null || root is Item || root == from || from.AccessLevel > AccessLevel.Player ) + return true; + + return false; + } + + public override void OnSingleClick( Mobile from ) + { + base.OnSingleClick( from ); + + if ( CheckContentDisplay( from ) ) + LabelTo( from, "({0} items, {1} stones)", TotalItems, TotalWeight ); + } + + private List m_Openers; + + public List Openers + { + get{ return m_Openers; } + set{ m_Openers = value; } + } + + public virtual bool IsPublicContainer{ get{ return false; } } + + public override void OnDelete() + { + base.OnDelete(); + + m_Openers = null; + } + + public virtual void DisplayTo( Mobile to ) + { + ProcessOpeners( to ); + + NetState ns = to.NetState; + + if ( ns == null ) + return; + + if ( ns.HighSeas ) + to.Send( new ContainerDisplayHS( this ) ); + else + to.Send( new ContainerDisplay( this ) ); + + if ( ns.ContainerGridLines ) + to.Send( new ContainerContent6017( to, this ) ); + else + to.Send( new ContainerContent( to, this ) ); + + if ( ObjectPropertyList.Enabled ) + { + List items = this.Items; + + for ( int i = 0; i < items.Count; ++i ) + to.Send( items[i].OPLPacket ); + } + + to.SendMessage( String.Format( "This container has {0} items, weighing {1} stones", TotalItems, TotalWeight ) ); + } + + public void ProcessOpeners( Mobile opener ) + { + if ( !IsPublicContainer ) + { + bool contains = false; + + if ( m_Openers != null ) + { + Point3D worldLoc = GetWorldLocation(); + Map map = this.Map; + + for ( int i = 0; i < m_Openers.Count; ++i ) + { + Mobile mob = m_Openers[i]; + + if ( mob == opener ) + { + contains = true; + } + else + { + int range = GetUpdateRange( mob ); + + if ( mob.Map != map || !mob.InRange( worldLoc, range ) ) + m_Openers.RemoveAt( i-- ); + } + } + } + + if ( !contains ) + { + if ( m_Openers == null ) + { + m_Openers = new List(); + } + + m_Openers.Add( opener ); + } + else if ( m_Openers != null && m_Openers.Count == 0 ) + { + m_Openers = null; + } + } + } + + public override void GetProperties( ObjectPropertyList list ) + { + base.GetProperties( list ); + } + + public override void OnDoubleClick( Mobile from ) + { + if ( from.AccessLevel > AccessLevel.Player || from.InRange( this.GetWorldLocation(), 2 ) ) + DisplayTo( from ); + else + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + } + + public class ContainerData + { + static ContainerData() + { + m_Table = new Dictionary(); + + string path = Path.Combine( Core.BaseDirectory, "Data/Config/containers.cfg" ); + + if ( !File.Exists( path ) ) + { + m_Default = new ContainerData( 0x3C, new Rectangle2D( 44, 65, 142, 94 ), 0x48 ); + return; + } + + using ( StreamReader reader = new StreamReader( path ) ) + { + string line; + + while ( (line = reader.ReadLine()) != null ) + { + line = line.Trim(); + + if ( line.Length == 0 || line.StartsWith( "#" ) ) + continue; + + try + { + string[] split = line.Split( '\t' ); + + if ( split.Length >= 3 ) + { + int gumpID = Utility.ToInt32( split[0] ); + + string[] aRect = split[1].Split( ' ' ); + if ( aRect.Length < 4 ) + continue; + + int x = Utility.ToInt32( aRect[0] ); + int y = Utility.ToInt32( aRect[1] ); + int width = Utility.ToInt32( aRect[2] ); + int height = Utility.ToInt32( aRect[3] ); + + Rectangle2D bounds = new Rectangle2D( x, y, width, height ); + + int dropSound = Utility.ToInt32( split[2] ); + + ContainerData data = new ContainerData( gumpID, bounds, dropSound ); + + if ( m_Default == null ) + m_Default = data; + + if ( split.Length >= 4 ) + { + string[] aIDs = split[3].Split( ',' ); + + for ( int i = 0; i < aIDs.Length; i++ ) + { + int id = Utility.ToInt32( aIDs[i] ); + + if ( m_Table.ContainsKey( id ) ) + { + Console.WriteLine( @"Warning: double ItemID entry in Data\Config\containers.cfg" ); + } + else + { + m_Table[id] = data; + } + } + } + } + } + catch + { + } + } + } + + if ( m_Default == null ) + m_Default = new ContainerData( 0x3C, new Rectangle2D( 44, 65, 142, 94 ), 0x48 ); + } + + private static ContainerData m_Default; + private static Dictionary m_Table; + + public static ContainerData Default + { + get{ return m_Default; } + set{ m_Default = value; } + } + + public static ContainerData GetData( int itemID ) + { + ContainerData data = null; + m_Table.TryGetValue( itemID, out data ); + + if ( data != null ) + return data; + else + return m_Default; + } + + private int m_GumpID; + private Rectangle2D m_Bounds; + private int m_DropSound; + + public int GumpID{ get{ return m_GumpID; } } + public Rectangle2D Bounds{ get{ return m_Bounds; } } + public int DropSound{ get{ return m_DropSound; } } + + public ContainerData( int gumpID, Rectangle2D bounds, int dropSound ) + { + m_GumpID = gumpID; + m_Bounds = bounds; + m_DropSound = dropSound; + } + } +} \ No newline at end of file diff --git a/Source/Items/Containers.cs b/Source/Items/Containers.cs new file mode 100644 index 0000000..b410a0d --- /dev/null +++ b/Source/Items/Containers.cs @@ -0,0 +1,166 @@ +/*************************************************************************** + * Containers.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Items +{ + public class InnBox : Container + { + private Mobile m_Owner; + private bool m_Open; + + public override int DefaultMaxWeight + { + get + { + return 0; + } + } + + public override bool IsVirtualItem + { + get { return true; } + } + + public InnBox( Serial serial ) : base( serial ) + { + } + + public Mobile Owner + { + get + { + return m_Owner; + } + } + + public bool Opened + { + get + { + return m_Open; + } + } + + public void Open() + { + m_Open = true; + + if ( m_Owner != null ) + { + //m_Owner.PrivateOverheadMessage( MessageType.Regular, 0x3B2, true, String.Format( "Inn Chest has {0} items, {1} stones", TotalItems, TotalWeight ), m_Owner.NetState ); + m_Owner.Send( new EquipUpdate( this ) ); + DisplayTo( m_Owner ); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + + writer.Write( (Mobile) m_Owner ); + writer.Write( (bool) m_Open ); + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + + switch ( version ) + { + case 0: + { + m_Owner = reader.ReadMobile(); + m_Open = reader.ReadBool(); + + if ( m_Owner == null ) + Delete(); + + break; + } + } + + if ( this.ItemID == 0xE41 ) + this.ItemID = 0xE7C; + } + + private static bool m_SendRemovePacket; + + public static bool SendDeleteOnClose{ get{ return m_SendRemovePacket; } set{ m_SendRemovePacket = value; } } + + public void Close() + { + m_Open = false; + + if ( m_Owner != null && m_SendRemovePacket ) + m_Owner.Send( this.RemovePacket ); + } + + public override void OnSingleClick( Mobile from ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + } + + public override DeathMoveResult OnParentDeath( Mobile parent ) + { + return DeathMoveResult.RemainEquiped; + } + + public InnBox( Mobile owner ) : base( 0x0E42 ) + { + Layer = Layer.Inn; + Movable = false; + m_Owner = owner; + } + + public override bool IsAccessibleTo(Mobile check) + { + if ( ( check == m_Owner && m_Open ) || check.AccessLevel >= AccessLevel.GameMaster ) + return base.IsAccessibleTo (check); + else + return false; + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( ( from == m_Owner && m_Open ) || from.AccessLevel >= AccessLevel.GameMaster ) + return base.OnDragDrop( from, dropped ); + else + return false; + } + + public override bool OnDragDropInto(Mobile from, Item item, Point3D p) + { + if ( ( from == m_Owner && m_Open ) || from.AccessLevel >= AccessLevel.GameMaster ) + return base.OnDragDropInto (from, item, p); + else + return false; + } + } +} \ No newline at end of file diff --git a/Source/Items/SecureTradeContainer.cs b/Source/Items/SecureTradeContainer.cs new file mode 100644 index 0000000..a65a796 --- /dev/null +++ b/Source/Items/SecureTradeContainer.cs @@ -0,0 +1,119 @@ +/*************************************************************************** + * SecureTradeContainer.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Items +{ + public class SecureTradeContainer : Container + { + private SecureTrade m_Trade; + + public SecureTrade Trade + { + get + { + return m_Trade; + } + } + + public SecureTradeContainer( SecureTrade trade ) : base( 0x1E5E ) + { + m_Trade = trade; + + Movable = false; + } + + public SecureTradeContainer( Serial serial ) : base( serial ) + { + } + + public override bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight ) + { + Mobile to; + + if ( this.Trade.From.Container != this ) + to = this.Trade.From.Mobile; + else + to = this.Trade.To.Mobile; + + return m.CheckTrade( to, item, this, message, checkItems, plusItems, plusWeight ); + } + + public override bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + reject = LRReason.CannotLift; + return false; + } + + public override bool IsAccessibleTo( Mobile check ) + { + if ( !IsChildOf( check ) ) + return false; + + return base.IsAccessibleTo( check ); + } + + public override void OnItemAdded( Item item ) + { + ClearChecks(); + } + + public override void OnItemRemoved( Item item ) + { + ClearChecks(); + } + + public override void OnSubItemAdded( Item item ) + { + ClearChecks(); + } + + public override void OnSubItemRemoved( Item item ) + { + ClearChecks(); + } + + public void ClearChecks() + { + if ( m_Trade != null ) + { + m_Trade.From.Accepted = false; + m_Trade.To.Accepted = false; + m_Trade.Update(); + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.Write( (int) 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadInt(); + } + } +} \ No newline at end of file diff --git a/Source/Items/VirtualHair.cs b/Source/Items/VirtualHair.cs new file mode 100644 index 0000000..3b01507 --- /dev/null +++ b/Source/Items/VirtualHair.cs @@ -0,0 +1,177 @@ +/*************************************************************************** + * VirtualHair.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server; +using Server.Network; + +namespace Server +{ + public abstract class BaseHairInfo + { + private int m_ItemID; + private int m_Hue; + + [CommandProperty( AccessLevel.GameMaster )] + public int ItemID { get { return m_ItemID; } set { m_ItemID = value; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int Hue { get { return m_Hue; } set { m_Hue = value; } } + + protected BaseHairInfo( int itemid ) + : this( itemid, 0 ) + { + } + + protected BaseHairInfo( int itemid, int hue ) + { + m_ItemID = itemid; + m_Hue = hue; + } + + protected BaseHairInfo( GenericReader reader ) + { + int version = reader.ReadInt(); + + switch( version ) + { + case 0: + { + m_ItemID = reader.ReadInt(); + m_Hue = reader.ReadInt(); + break; + } + } + } + + public virtual void Serialize( GenericWriter writer ) + { + writer.Write( (int)0 ); //version + writer.Write( (int)m_ItemID ); + writer.Write( (int)m_Hue ); + } + } + + public class HairInfo : BaseHairInfo + { + public HairInfo( int itemid ) + : base( itemid, 0 ) + { + } + + public HairInfo( int itemid, int hue ) + : base( itemid, hue ) + { + } + + public HairInfo( GenericReader reader ) + : base( reader ) + { + } + + public static int FakeSerial( Mobile parent ) + { + return (0x7FFFFFFF - 0x400 - (parent.Serial * 4)); + } + } + + public class FacialHairInfo : BaseHairInfo + { + public FacialHairInfo( int itemid ) + : base( itemid, 0 ) + { + } + + public FacialHairInfo( int itemid, int hue ) + : base( itemid, hue ) + { + } + + public FacialHairInfo( GenericReader reader ) + : base( reader ) + { + } + + public static int FakeSerial( Mobile parent ) + { + return (0x7FFFFFFF - 0x400 - 1 - (parent.Serial * 4)); + } + } + + public sealed class HairEquipUpdate : Packet + { + public HairEquipUpdate( Mobile parent ) + : base( 0x2E, 15 ) + { + int hue = parent.HairHue; + + if( parent.SolidHueOverride >= 0 ) + hue = parent.SolidHueOverride; + + int hairSerial = HairInfo.FakeSerial( parent ); + + m_Stream.Write( (int)hairSerial ); + m_Stream.Write( (short)parent.HairItemID ); + m_Stream.Write( (byte)0 ); + m_Stream.Write( (byte)Layer.Hair ); + m_Stream.Write( (int)parent.Serial ); + m_Stream.Write( (short)hue ); + } + } + + public sealed class FacialHairEquipUpdate : Packet + { + public FacialHairEquipUpdate( Mobile parent ) + : base( 0x2E, 15 ) + { + int hue = parent.FacialHairHue; + + if( parent.SolidHueOverride >= 0 ) + hue = parent.SolidHueOverride; + + int hairSerial = FacialHairInfo.FakeSerial( parent ); + + m_Stream.Write( (int)hairSerial ); + m_Stream.Write( (short)parent.FacialHairItemID ); + m_Stream.Write( (byte)0 ); + m_Stream.Write( (byte)Layer.FacialHair ); + m_Stream.Write( (int)parent.Serial ); + m_Stream.Write( (short)hue ); + } + } + + public sealed class RemoveHair : Packet + { + public RemoveHair( Mobile parent ) + : base( 0x1D, 5 ) + { + m_Stream.Write( (int)HairInfo.FakeSerial( parent ) ); + } + } + + public sealed class RemoveFacialHair : Packet + { + public RemoveFacialHair( Mobile parent ) + : base( 0x1D, 5 ) + { + m_Stream.Write( (int)FacialHairInfo.FakeSerial( parent ) ); + } + } +} \ No newline at end of file diff --git a/Source/KeywordList.cs b/Source/KeywordList.cs new file mode 100644 index 0000000..26a8f84 --- /dev/null +++ b/Source/KeywordList.cs @@ -0,0 +1,85 @@ +/*************************************************************************** + * KeywordList.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + public class KeywordList + { + private int[] m_Keywords; + private int m_Count; + + public KeywordList() + { + m_Keywords = new int[8]; + m_Count = 0; + } + + public int Count + { + get + { + return m_Count; + } + } + + public bool Contains( int keyword ) + { + bool contains = false; + + for ( int i = 0; !contains && i < m_Count; ++i ) + contains = ( keyword == m_Keywords[i] ); + + return contains; + } + + public void Add( int keyword ) + { + if ( (m_Count + 1) > m_Keywords.Length ) + { + int[] old = m_Keywords; + m_Keywords = new int[old.Length * 2]; + + for ( int i = 0; i < old.Length; ++i ) + m_Keywords[i] = old[i]; + } + + m_Keywords[m_Count++] = keyword; + } + + private static int[] m_EmptyInts = new int[0]; + + public int[] ToArray() + { + if ( m_Count == 0 ) + return m_EmptyInts; + + int[] keywords = new int[m_Count]; + + for ( int i = 0; i < m_Count; ++i ) + keywords[i] = m_Keywords[i]; + + m_Count = 0; + + return keywords; + } + } +} \ No newline at end of file diff --git a/Source/Main.cs b/Source/Main.cs new file mode 100644 index 0000000..438a7e7 --- /dev/null +++ b/Source/Main.cs @@ -0,0 +1,781 @@ +/*************************************************************************** + * Main.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +#if Framework_4_0 +using System.Threading.Tasks; +#endif + +using Server; +using Server.Accounting; +using Server.Gumps; +using Server.Network; +using System.Runtime; + +namespace Server +{ + public delegate void Slice(); + + public static class Core + { + private static bool m_Crashed; + private static Thread timerThread; + private static string m_BaseDirectory; + private static string m_ExePath; + private static List m_DataDirectories = new List(); + private static Assembly m_Assembly; + private static Process m_Process; + private static Thread m_Thread; + private static bool m_Service; + private static bool m_Debug; + private static bool m_Cache = true; + private static bool m_HaltOnWarning; + private static bool m_VBdotNET; + private static MultiTextWriter m_MultiConOut; + + private static bool m_Profiling; + private static DateTime m_ProfileStart; + private static TimeSpan m_ProfileTime; + + private static MessagePump m_MessagePump; + + public static MessagePump MessagePump + { + get { return m_MessagePump; } + set { m_MessagePump = value; } + } + + public static Slice Slice; + + public static bool Profiling + { + get { return m_Profiling; } + set + { + if( m_Profiling == value ) + return; + + m_Profiling = value; + + if( m_ProfileStart > DateTime.MinValue ) + m_ProfileTime += DateTime.Now - m_ProfileStart; + + m_ProfileStart = (m_Profiling ? DateTime.Now : DateTime.MinValue); + } + } + + public static TimeSpan ProfileTime + { + get + { + if( m_ProfileStart > DateTime.MinValue ) + return m_ProfileTime + (DateTime.Now - m_ProfileStart); + + return m_ProfileTime; + } + } + + public static bool Service { get { return m_Service; } } + public static bool Debug { get { return m_Debug; } } + internal static bool HaltOnWarning { get { return m_HaltOnWarning; } } + internal static bool VBdotNet { get { return m_VBdotNET; } } + public static List DataDirectories { get { return m_DataDirectories; } } + public static Assembly Assembly { get { return m_Assembly; } set { m_Assembly = value; } } + public static Version Version { get { return m_Assembly.GetName().Version; } } + public static Process Process { get { return m_Process; } } + public static Thread Thread { get { return m_Thread; } } + public static MultiTextWriter MultiConsoleOut { get { return m_MultiConOut; } } + +#if Framework_4_0 + public static readonly bool Is64Bit = Environment.Is64BitProcess; +#else + public static readonly bool Is64Bit = (IntPtr.Size == 8); //Returns the size for the current /process/ +#endif + + private static bool m_MultiProcessor; + private static int m_ProcessorCount; + + public static bool MultiProcessor { get { return m_MultiProcessor; } } + public static int ProcessorCount { get { return m_ProcessorCount; } } + + private static bool m_Unix; + + public static bool Unix { get { return m_Unix; } } + + public static string FindDataFile( string path ) + { + if( m_DataDirectories.Count == 0 ) + throw new InvalidOperationException( "Attempted to FindDataFile before DataDirectories list has been filled." ); + + string fullPath = null; + + for( int i = 0; i < m_DataDirectories.Count; ++i ) + { + fullPath = Path.Combine( m_DataDirectories[i], path ); + + if( File.Exists( fullPath ) ) + break; + + fullPath = null; + } + + return fullPath; + } + + public static string FindDataFile( string format, params object[] args ) + { + return FindDataFile( String.Format( format, args ) ); + } + + #region Expansions + + private static Expansion m_Expansion; + public static Expansion Expansion + { + get { return m_Expansion; } + set { m_Expansion = value; } + } + + public static bool T2A + { + get { return m_Expansion >= Expansion.T2A; } + } + + public static bool UOR + { + get { return m_Expansion >= Expansion.UOR; } + } + + public static bool UOTD + { + get { return m_Expansion >= Expansion.UOTD; } + } + + public static bool LBR + { + get { return m_Expansion >= Expansion.LBR; } + } + + public static bool AOS + { + get { return m_Expansion >= Expansion.AOS; } + } + + #endregion + + public static string ExePath + { + get + { + if( m_ExePath == null ) + { + m_ExePath = Assembly.Location; + //m_ExePath = Process.GetCurrentProcess().MainModule.FileName; + } + + return m_ExePath; + } + } + + public static string BaseDirectory + { + get + { + if( m_BaseDirectory == null ) + { + try + { + m_BaseDirectory = ExePath; + + if( m_BaseDirectory.Length > 0 ) + m_BaseDirectory = Path.GetDirectoryName( m_BaseDirectory ); + } + catch + { + m_BaseDirectory = ""; + } + } + + return m_BaseDirectory; + } + } + + private static void CurrentDomain_UnhandledException( object sender, UnhandledExceptionEventArgs e ) + { + Console.WriteLine( e.IsTerminating ? "Error:" : "Warning:" ); + Console.WriteLine( e.ExceptionObject ); + + if( e.IsTerminating ) + { + m_Crashed = true; + + bool close = false; + + try + { + CrashedEventArgs args = new CrashedEventArgs( e.ExceptionObject as Exception ); + + EventSink.InvokeCrashed( args ); + + close = args.Close; + } + catch + { + } + + if( !close && !m_Service ) + { + try + { + for( int i = 0; i < m_MessagePump.Listeners.Length; i++ ) + { + m_MessagePump.Listeners[i].Dispose(); + } + } + catch + { + } + + if ( m_Service ) { + Console.WriteLine( "This exception is fatal." ); + } else { + Console.WriteLine( "This exception is fatal, press return to exit" ); + Console.ReadLine(); + } + } + + m_Closing = true; + } + } + + private enum ConsoleEventType + { + CTRL_C_EVENT, + CTRL_BREAK_EVENT, + CTRL_CLOSE_EVENT, + CTRL_LOGOFF_EVENT=5, + CTRL_SHUTDOWN_EVENT + } + + private delegate bool ConsoleEventHandler( ConsoleEventType type ); + private static ConsoleEventHandler m_ConsoleEventHandler; + + [DllImport( "Kernel32" )] + private static extern bool SetConsoleCtrlHandler( ConsoleEventHandler callback, bool add ); + + private static bool OnConsoleEvent( ConsoleEventType type ) + { + if( World.Saving || ( m_Service && type == ConsoleEventType.CTRL_LOGOFF_EVENT ) ) + return true; + + Kill(); //Kill -> HandleClosed will hadnle waiting for the completion of flushign to disk + + return true; + } + + private static void CurrentDomain_ProcessExit( object sender, EventArgs e ) + { + HandleClosed(); + } + + private static bool m_Closing; + public static bool Closing { get { return m_Closing; } } + + private static long m_CycleIndex = 1; + private static float[] m_CyclesPerSecond = new float[100]; + + public static float CyclesPerSecond + { + get { return m_CyclesPerSecond[(m_CycleIndex - 1) % m_CyclesPerSecond.Length]; } + } + + public static float AverageCPS + { + get + { + float t = 0.0f; + int c = 0; + + for( int i = 0; i < m_CycleIndex && i < m_CyclesPerSecond.Length; ++i ) + { + t += m_CyclesPerSecond[i]; + ++c; + } + + return (t / Math.Max( c, 1 )); + } + } + + public static void Kill() + { + Kill( false ); + } + + public static void Kill( bool restart ) + { + HandleClosed(); + + if ( restart ) + Process.Start( ExePath, Arguments ); + + m_Process.Kill(); + } + + private static void HandleClosed() + { + if( m_Closing ) + return; + + m_Closing = true; + + Console.Write( "Exiting..." ); + + World.WaitForWriteCompletion(); + + if( !m_Crashed ) + EventSink.InvokeShutdown( new ShutdownEventArgs() ); + + Timer.TimerThread.Set(); + + Console.WriteLine( "done" ); + } + + private static AutoResetEvent m_Signal = new AutoResetEvent( true ); + public static void Set() { m_Signal.Set(); } + + public static void Main( string[] args ) + { + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler( CurrentDomain_UnhandledException ); + AppDomain.CurrentDomain.ProcessExit += new EventHandler( CurrentDomain_ProcessExit ); + + for( int i = 0; i < args.Length; ++i ) + { + if ( Insensitive.Equals( args[i], "-debug" ) ) + m_Debug = true; + else if ( Insensitive.Equals( args[i], "-service" ) ) + m_Service = true; + else if ( Insensitive.Equals( args[i], "-profile" ) ) + Profiling = true; + else if ( Insensitive.Equals( args[i], "-nocache" ) ) + m_Cache = false; + else if ( Insensitive.Equals( args[i], "-haltonwarning" ) ) + m_HaltOnWarning = true; + else if ( Insensitive.Equals( args[i], "-vb" ) ) + m_VBdotNET = true; + } + + try + { + if( m_Service ) + { + if( !Directory.Exists( "Data/Logs" ) ) + Directory.CreateDirectory( "Data/Logs" ); + + Console.SetOut( m_MultiConOut = new MultiTextWriter( new FileLogger( "Data/Logs/Console.log" ) ) ); + } + else + { + Console.SetOut( m_MultiConOut = new MultiTextWriter( Console.Out ) ); + } + } + catch + { + } + + m_Thread = Thread.CurrentThread; + m_Process = Process.GetCurrentProcess(); + m_Assembly = Assembly.GetEntryAssembly(); + + if( m_Thread != null ) + m_Thread.Name = "Core Thread"; + + if( BaseDirectory.Length > 0 ) + Directory.SetCurrentDirectory( BaseDirectory ); + + Timer.TimerThread ttObj = new Timer.TimerThread(); + timerThread = new Thread( new ThreadStart( ttObj.TimerMain ) ); + timerThread.Name = "Timer Thread"; + + Version ver = m_Assembly.GetName().Version; + + // Added to help future code support on forums, as a 'check' people can ask for to it see if they recompiled core or not + //Console.WriteLine( "RunUO - [www.runuo.com] Version {0}.{1}, Build {2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision ); + Console.WriteLine( "Ultima Adventure Game", ver.Major, ver.Minor, ver.Build, ver.Revision ); + Console.WriteLine( "Core: Running on .NET Framework Version {0}.{1}.{2}", Environment.Version.Major, Environment.Version.Minor, Environment.Version.Build ); + + string s = Arguments; + + if( s.Length > 0 ) + Console.WriteLine( "Core: Running with arguments: {0}", s ); + + m_ProcessorCount = Environment.ProcessorCount; + + if( m_ProcessorCount > 1 ) + m_MultiProcessor = true; + + if( m_MultiProcessor || Is64Bit ) + Console.WriteLine( "Core: Optimizing for {0} {2}processor{1}", m_ProcessorCount, m_ProcessorCount == 1 ? "" : "s", Is64Bit ? "64-bit " : "" ); + + int platform = (int)Environment.OSVersion.Platform; + if( platform == 4 || platform == 128 ) { // MS 4, MONO 128 + m_Unix = true; + Console.WriteLine( "Core: Unix environment detected" ); + } + else { + m_ConsoleEventHandler = new ConsoleEventHandler( OnConsoleEvent ); + SetConsoleCtrlHandler( m_ConsoleEventHandler, true ); + } + + if ( GCSettings.IsServerGC ) + Console.WriteLine("Core: Server garbage collection mode enabled"); + + while( !ScriptCompiler.Compile( m_Debug, m_Cache ) ) + { + Console.WriteLine( "Scripts: One or more scripts failed to compile or no script files were found." ); + + if( m_Service ) + return; + + Console.WriteLine( " - Press return to exit, or R to try again." ); + + if( Console.ReadKey( true ).Key != ConsoleKey.R ) + return; + } + + ScriptCompiler.Invoke( "Configure" ); + + Region.Load(); + World.Load(); + + ScriptCompiler.Invoke( "Initialize" ); + + MessagePump messagePump = new MessagePump(); + + timerThread.Start(); + + for( int i = 0; i < Map.AllMaps.Count; ++i ) + Map.AllMaps[i].Tiles.Force(); + + NetState.Initialize(); + + EventSink.InvokeServerStarted(); + + try + { + DateTime now, last = DateTime.Now; + + const int sampleInterval = 100; + const float ticksPerSecond = (float)(TimeSpan.TicksPerSecond * sampleInterval); + + long sample = 0; + + while( m_Signal.WaitOne() ) + { + Mobile.ProcessDeltaQueue(); + Item.ProcessDeltaQueue(); + + Timer.Slice(); + messagePump.Slice(); + + NetState.FlushAll(); + NetState.ProcessDisposedQueue(); + + if( Slice != null ) + Slice(); + + if( (++sample % sampleInterval) == 0 ) + { + now = DateTime.Now; + m_CyclesPerSecond[m_CycleIndex++ % m_CyclesPerSecond.Length] = + ticksPerSecond / (now.Ticks - last.Ticks); + last = now; + } + } + } + catch( Exception e ) + { + CurrentDomain_UnhandledException( null, new UnhandledExceptionEventArgs( e, true ) ); + } + } + + public static string Arguments + { + get + { + StringBuilder sb = new StringBuilder(); + + if( Core.Debug ) + Utility.Separate( sb, "-debug", " " ); + + if( Core.Service ) + Utility.Separate( sb, "-service", " " ); + + if( Core.Profiling ) + Utility.Separate( sb, "-profile", " " ); + + if( !m_Cache ) + Utility.Separate( sb, "-nocache", " " ); + + if( m_HaltOnWarning ) + Utility.Separate( sb, "-haltonwarning", " " ); + + if ( m_VBdotNET ) + Utility.Separate( sb, "-vb", " " ); + + return sb.ToString(); + } + } + + private static int m_GlobalMaxUpdateRange = 24; + + public static int GlobalMaxUpdateRange + { + get { return m_GlobalMaxUpdateRange; } + set { m_GlobalMaxUpdateRange = value; } + } + + private static int m_ItemCount, m_MobileCount; + + public static int ScriptItems { get { return m_ItemCount; } } + public static int ScriptMobiles { get { return m_MobileCount; } } + + public static void VerifySerialization() + { + m_ItemCount = 0; + m_MobileCount = 0; + + VerifySerialization( Assembly.GetCallingAssembly() ); + + for( int a = 0; a < ScriptCompiler.Assemblies.Length; ++a ) + VerifySerialization( ScriptCompiler.Assemblies[a] ); + } + + private static readonly Type[] m_SerialTypeArray = new Type[1] { typeof(Serial) }; + + private static void VerifyType( Type t ) + { + bool isItem = t.IsSubclassOf(typeof(Item)); + + if (isItem || t.IsSubclassOf(typeof(Mobile))) + { + if (isItem) + { + //++m_ItemCount; + Interlocked.Increment(ref m_ItemCount); + } + else + { + //++m_MobileCount; + Interlocked.Increment(ref m_MobileCount); + } + + StringBuilder warningSb = null; + + try + { + /* + if( isItem && t.IsPublic && !t.IsAbstract ) + { + ConstructorInfo cInfo = t.GetConstructor( Type.EmptyTypes ); + + if( cInfo == null ) + { + if (warningSb == null) + warningSb = new StringBuilder(); + + warningSb.AppendLine(" - No zero paramater constructor"); + } + }*/ + + if (t.GetConstructor(m_SerialTypeArray) == null) + { + if (warningSb == null) + warningSb = new StringBuilder(); + + warningSb.AppendLine(" - No serialization constructor"); + } + + if (t.GetMethod("Serialize", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly) == null) + { + if (warningSb == null) + warningSb = new StringBuilder(); + + warningSb.AppendLine(" - No Serialize() method"); + } + + if (t.GetMethod("Deserialize", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly) == null) + { + if (warningSb == null) + warningSb = new StringBuilder(); + + warningSb.AppendLine(" - No Deserialize() method"); + } + + if (warningSb != null && warningSb.Length > 0) + { + Console.WriteLine("Warning: {0}\n{1}", t, warningSb.ToString()); + } + } + catch + { + Console.WriteLine("Warning: Exception in serialization verification of type {0}", t); + } + } + } + + private static void VerifySerialization( Assembly a ) + { + if( a == null ) + return; + +#if Framework_4_0 + Parallel.ForEach(a.GetTypes(), t => + { + VerifyType(t); + }); +#else + foreach (Type t in a.GetTypes()) + { + VerifyType(t); + } +#endif + } + } + + public class FileLogger : TextWriter, IDisposable + { + private string m_FileName; + private bool m_NewLine; + public const string DateFormat = "[MMMM dd hh:mm:ss.f tt]: "; + + public string FileName { get { return m_FileName; } } + + public FileLogger( string file ) + : this( file, false ) + { + } + + public FileLogger( string file, bool append ) + { + m_FileName = file; + using( StreamWriter writer = new StreamWriter( new FileStream( m_FileName, append ? FileMode.Append : FileMode.Create, FileAccess.Write, FileShare.Read ) ) ) + { + writer.WriteLine( ">>>Logging started on {0}.", DateTime.Now.ToString( "f" ) ); //f = Tuesday, April 10, 2001 3:51 PM + } + m_NewLine = true; + } + + public override void Write( char ch ) + { + using( StreamWriter writer = new StreamWriter( new FileStream( m_FileName, FileMode.Append, FileAccess.Write, FileShare.Read ) ) ) + { + if( m_NewLine ) + { + writer.Write( DateTime.Now.ToString( DateFormat ) ); + m_NewLine = false; + } + writer.Write( ch ); + } + } + + public override void Write( string str ) + { + using( StreamWriter writer = new StreamWriter( new FileStream( m_FileName, FileMode.Append, FileAccess.Write, FileShare.Read ) ) ) + { + if( m_NewLine ) + { + writer.Write( DateTime.Now.ToString( DateFormat ) ); + m_NewLine = false; + } + writer.Write( str ); + } + } + + public override void WriteLine( string line ) + { + using( StreamWriter writer = new StreamWriter( new FileStream( m_FileName, FileMode.Append, FileAccess.Write, FileShare.Read ) ) ) + { + if( m_NewLine ) + writer.Write( DateTime.Now.ToString( DateFormat ) ); + writer.WriteLine( line ); + m_NewLine = true; + } + } + + public override System.Text.Encoding Encoding + { + get { return System.Text.Encoding.Default; } + } + } + + public class MultiTextWriter : TextWriter + { + private List m_Streams; + + public MultiTextWriter( params TextWriter[] streams ) + { + m_Streams = new List( streams ); + + if( m_Streams.Count < 0 ) + throw new ArgumentException( "You must specify at least one stream." ); + } + + public void Add( TextWriter tw ) + { + m_Streams.Add( tw ); + } + + public void Remove( TextWriter tw ) + { + m_Streams.Remove( tw ); + } + + public override void Write( char ch ) + { + for( int i = 0; i < m_Streams.Count; i++ ) + m_Streams[i].Write( ch ); + } + + public override void WriteLine( string line ) + { + for( int i = 0; i < m_Streams.Count; i++ ) + m_Streams[i].WriteLine( line ); + } + + public override void WriteLine( string line, params object[] args ) + { + WriteLine( String.Format( line, args ) ); + } + + public override Encoding Encoding + { + get { return Encoding.Default; } + } + } +} \ No newline at end of file diff --git a/Source/Map.cs b/Source/Map.cs new file mode 100644 index 0000000..ed91e80 --- /dev/null +++ b/Source/Map.cs @@ -0,0 +1,2090 @@ +/*************************************************************************** + * Map.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Server.Items; +using Server.Network; +using Server.Targeting; + +namespace Server +{ + [Flags] + public enum MapRules + { + None = 0x0000, + Internal = 0x0001, // Internal map (used for dragging, commodity deeds, etc) + FreeMovement = 0x0002, // Anyone can move over anyone else without taking stamina loss + BeneficialRestrictions = 0x0004, // Disallow performing beneficial actions on criminals/murderers + HarmfulRestrictions = 0x0008, // Disallow performing harmful actions on innocents + SafetyRules = FreeMovement | BeneficialRestrictions | HarmfulRestrictions, + DangerRules = None + } + + public interface IPooledEnumerable : IEnumerable + { + void Free(); + } + + public interface IPooledEnumerator : IEnumerator + { + IPooledEnumerable Enumerable{ get; set; } + void Free(); + } + + [Parsable] + public sealed class Map : IComparable, IComparable + { + public const int SectorSize = 16; + public const int SectorShift = 4; + public static int SectorActiveRange = 2; + + private static Map[] m_Maps = new Map[0x100]; + + public static Map[] Maps { get { return m_Maps; } } + + public static Map Britannia { get { return m_Maps[0]; } } + public static Map Underworld { get { return m_Maps[1]; } } + public static Map Darkness { get { return m_Maps[2]; } } + public static Map Ocean { get { return m_Maps[3]; } } + public static Map Grassland { get { return m_Maps[4]; } } + public static Map Internal { get { return m_Maps[0x7F]; } } + + private static List m_AllMaps = new List(); + + public static List AllMaps { get { return m_AllMaps; } } + + private int m_MapID, m_MapIndex, m_FileIndex; + + private int m_Width, m_Height; + private int m_SectorsWidth, m_SectorsHeight; + private int m_Season; + private Dictionary m_Regions; + private Region m_DefaultRegion; + + public int Season { get { return m_Season; } set { m_Season = value; } } + + private string m_Name; + private MapRules m_Rules; + private Sector[][] m_Sectors; + private Sector m_InvalidSector; + + private TileMatrix m_Tiles; + + private static string[] m_MapNames; + private static Map[] m_MapValues; + + public static string[] GetMapNames() + { + CheckNamesAndValues(); + return m_MapNames; + } + + public static Map[] GetMapValues() + { + CheckNamesAndValues(); + return m_MapValues; + } + + public static Map Parse( string value ) + { + CheckNamesAndValues(); + + for ( int i = 0; i < m_MapNames.Length; ++i ) + { + if ( Insensitive.Equals( m_MapNames[i], value ) ) + return m_MapValues[i]; + } + + int index; + + if( int.TryParse( value, out index ) ) + { + if( index >= 0 && index < m_Maps.Length && m_Maps[index] != null ) + return m_Maps[index]; + } + + throw new ArgumentException( "Invalid map name" ); + } + + private static void CheckNamesAndValues() + { + if ( m_MapNames != null && m_MapNames.Length == m_AllMaps.Count ) + return; + + m_MapNames = new string[m_AllMaps.Count]; + m_MapValues = new Map[m_AllMaps.Count]; + + for ( int i = 0; i < m_AllMaps.Count; ++i ) + { + Map map = m_AllMaps[i]; + + m_MapNames[i] = map.Name; + m_MapValues[i] = map; + } + } + + public override string ToString() + { + return m_Name; + } + + public int GetAverageZ( int x, int y ) + { + int z = 0, avg = 0, top = 0; + + GetAverageZ( x, y, ref z, ref avg, ref top ); + + return avg; + } + + public void GetAverageZ( int x, int y, ref int z, ref int avg, ref int top ) + { + int zTop = Tiles.GetLandTile( x, y ).Z; + int zLeft = Tiles.GetLandTile( x, y + 1 ).Z; + int zRight = Tiles.GetLandTile( x + 1, y ).Z; + int zBottom = Tiles.GetLandTile( x + 1, y + 1 ).Z; + + z = zTop; + if ( zLeft < z ) + z = zLeft; + if ( zRight < z ) + z = zRight; + if ( zBottom < z ) + z = zBottom; + + top = zTop; + if ( zLeft > top ) + top = zLeft; + if ( zRight > top ) + top = zRight; + if ( zBottom > top ) + top = zBottom; + + if ( Math.Abs( zTop - zBottom ) > Math.Abs( zLeft - zRight ) ) + avg = FloorAverage( zLeft, zRight ); + else + avg = FloorAverage( zTop, zBottom ); + } + + private static int FloorAverage( int a, int b ) + { + int v = a + b; + + if ( v < 0 ) + --v; + + return ( v / 2 ); + } + + #region Get*InRange/Bounds + public IPooledEnumerable GetObjectsInRange( Point3D p ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( ObjectEnumerator.Instantiate( this, new Rectangle2D( p.m_X - 18, p.m_Y - 18, 37, 37 ) ) ); + } + + public IPooledEnumerable GetObjectsInRange( Point3D p, int range ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( ObjectEnumerator.Instantiate( this, new Rectangle2D( p.m_X - range, p.m_Y - range, range * 2 + 1, range * 2 + 1 ) ) ); + } + + public IPooledEnumerable GetObjectsInBounds( Rectangle2D bounds ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( ObjectEnumerator.Instantiate( this, bounds ) ); + } + + public IPooledEnumerable GetClientsInRange( Point3D p ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, new Rectangle2D( p.m_X - 18, p.m_Y - 18, 37, 37 ), SectorEnumeratorType.Clients ) ); + } + + public IPooledEnumerable GetClientsInRange( Point3D p, int range ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, new Rectangle2D( p.m_X - range, p.m_Y - range, range * 2 + 1, range * 2 + 1 ), SectorEnumeratorType.Clients ) ); + } + + public IPooledEnumerable GetClientsInBounds( Rectangle2D bounds ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, bounds, SectorEnumeratorType.Clients ) ); + } + + public IPooledEnumerable GetItemsInRange( Point3D p ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, new Rectangle2D( p.m_X - 18, p.m_Y - 18, 37, 37 ), SectorEnumeratorType.Items ) ); + } + + public IPooledEnumerable GetItemsInRange( Point3D p, int range ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, new Rectangle2D( p.m_X - range, p.m_Y - range, range * 2 + 1, range * 2 + 1 ), SectorEnumeratorType.Items ) ); + } + + public IPooledEnumerable GetItemsInBounds( Rectangle2D bounds ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, bounds, SectorEnumeratorType.Items ) ); + } + + public IPooledEnumerable GetMobilesInRange( Point3D p ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, new Rectangle2D( p.m_X - 18, p.m_Y - 18, 37, 37 ), SectorEnumeratorType.Mobiles ) ); + } + + public IPooledEnumerable GetMobilesInRange( Point3D p, int range ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, new Rectangle2D( p.m_X - range, p.m_Y - range, range * 2 + 1, range * 2 + 1 ), SectorEnumeratorType.Mobiles ) ); + } + + public IPooledEnumerable GetMobilesInBounds( Rectangle2D bounds ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( TypedEnumerator.Instantiate( this, bounds, SectorEnumeratorType.Mobiles ) ); + } + #endregion + + public IPooledEnumerable GetMultiTilesAt( int x, int y ) + { + if ( this == Map.Internal ) + return NullEnumerable.Instance; + + Sector sector = GetSector( x, y ); + + if ( sector.Multis.Count == 0 ) + return NullEnumerable.Instance; + + return PooledEnumerable.Instantiate( MultiTileEnumerator.Instantiate( sector, new Point2D( x, y ) ) ); + } + + #region CanFit + public bool CanFit( Point3D p, int height, bool checkBlocksFit ) + { + return CanFit( p.m_X, p.m_Y, p.m_Z, height, checkBlocksFit, true, true ); + } + + public bool CanFit( Point3D p, int height, bool checkBlocksFit, bool checkMobiles ) + { + return CanFit( p.m_X, p.m_Y, p.m_Z, height, checkBlocksFit, checkMobiles, true ); + } + + public bool CanFit( Point2D p, int z, int height, bool checkBlocksFit ) + { + return CanFit( p.m_X, p.m_Y, z, height, checkBlocksFit, true, true ); + } + + public bool CanFit( Point3D p, int height ) + { + return CanFit( p.m_X, p.m_Y, p.m_Z, height, false, true, true ); + } + + public bool CanFit( Point2D p, int z, int height ) + { + return CanFit( p.m_X, p.m_Y, z, height, false, true, true ); + } + + public bool CanFit( int x, int y, int z, int height ) + { + return CanFit( x, y, z, height, false, true, true ); + } + + public bool CanFit( int x, int y, int z, int height, bool checksBlocksFit ) + { + return CanFit( x, y, z, height, checksBlocksFit, true, true ); + } + + public bool CanFit( int x, int y, int z, int height, bool checkBlocksFit, bool checkMobiles ) + { + return CanFit( x, y, z, height, checkBlocksFit, checkMobiles, true ); + } + + public bool CanFit( int x, int y, int z, int height, bool checkBlocksFit, bool checkMobiles, bool requireSurface ) + { + if ( this == Map.Internal ) + return false; + + if ( x < 0 || y < 0 || x >= m_Width || y >= m_Height ) + return false; + + bool hasSurface = false; + + LandTile lt = Tiles.GetLandTile( x, y ); + int lowZ = 0, avgZ = 0, topZ = 0; + + GetAverageZ( x, y, ref lowZ, ref avgZ, ref topZ ); + TileFlag landFlags = TileData.LandTable[lt.ID & TileData.MaxLandValue].Flags; + + if ( ( landFlags & TileFlag.Impassable ) != 0 && avgZ > z && ( z + height ) > lowZ ) + return false; + else if ( ( landFlags & TileFlag.Impassable ) == 0 && z == avgZ && !lt.Ignored ) + hasSurface = true; + + StaticTile[] staticTiles = Tiles.GetStaticTiles( x, y, true ); + + bool surface, impassable; + + for ( int i = 0; i < staticTiles.Length; ++i ) + { + ItemData id = TileData.ItemTable[staticTiles[i].ID & TileData.MaxItemValue]; + surface = id.Surface; + impassable = id.Impassable; + + if ( ( surface || impassable ) && ( staticTiles[i].Z + id.CalcHeight ) > z && ( z + height ) > staticTiles[i].Z ) + return false; + else if ( surface && !impassable && z == ( staticTiles[i].Z + id.CalcHeight ) ) + hasSurface = true; + } + + Sector sector = GetSector( x, y ); + List items = sector.Items; + List mobs = sector.Mobiles; + + for ( int i = 0; i < items.Count; ++i ) + { + Item item = items[i]; + + if ( !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue && item.AtWorldPoint( x, y ) ) + { + ItemData id = item.ItemData; + surface = id.Surface; + impassable = id.Impassable; + + if ( ( surface || impassable || ( checkBlocksFit && item.BlocksFit ) ) && ( item.Z + id.CalcHeight ) > z && ( z + height ) > item.Z ) + return false; + else if ( surface && !impassable && !item.Movable && z == ( item.Z + id.CalcHeight ) ) + hasSurface = true; + } + } + + if ( checkMobiles ) + { + for ( int i = 0; i < mobs.Count; ++i ) + { + Mobile m = mobs[i]; + + if ( m.Location.m_X == x && m.Location.m_Y == y && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) ) + if ( ( m.Z + 16 ) > z && ( z + height ) > m.Z ) + return false; + } + } + + return !requireSurface || hasSurface; + } + + #endregion + + #region CanSpawnMobile + public bool CanSpawnMobile( Point3D p ) + { + return CanSpawnMobile( p.m_X, p.m_Y, p.m_Z ); + } + + public bool CanSpawnMobile( Point2D p, int z ) + { + return CanSpawnMobile( p.m_X, p.m_Y, z ); + } + + public bool CanSpawnMobile( int x, int y, int z ) + { + if ( !Region.Find( new Point3D( x, y, z ), this ).AllowSpawn() ) + return false; + + return CanFit( x, y, z, 16 ); + } + #endregion + + private class ZComparer : IComparer + { + public static readonly ZComparer Default = new ZComparer(); + + public int Compare( Item x, Item y ) + { + return x.Z.CompareTo( y.Z ); + } + } + + public void FixColumn( int x, int y ) + { + LandTile landTile = Tiles.GetLandTile( x, y ); + + int landZ = 0, landAvg = 0, landTop = 0; + GetAverageZ( x, y, ref landZ, ref landAvg, ref landTop ); + + StaticTile[] tiles = Tiles.GetStaticTiles( x, y, true ); + + List items = new List(); + + IPooledEnumerable eable = GetItemsInRange( new Point3D( x, y, 0 ), 0 ); + + foreach ( Item item in eable ) + { + if ( !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue ) + { + items.Add( item ); + + if ( items.Count > 100 ) + break; + } + } + + eable.Free(); + + if ( items.Count > 100 ) + return; + + items.Sort( ZComparer.Default ); + + for ( int i = 0; i < items.Count; ++i ) + { + Item toFix = items[i]; + + if ( !toFix.Movable ) + continue; + + int z = int.MinValue; + int currentZ = toFix.Z; + + if ( !landTile.Ignored && landAvg <= currentZ ) + z = landAvg; + + for ( int j = 0; j < tiles.Length; ++j ) + { + StaticTile tile = tiles[j]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + + int checkZ = tile.Z; + int checkTop = checkZ + id.CalcHeight; + + if ( checkTop == checkZ && !id.Surface ) + ++checkTop; + + if ( checkTop > z && checkTop <= currentZ ) + z = checkTop; + } + + for ( int j = 0; j < items.Count; ++j ) + { + if ( j == i ) + continue; + + Item item = items[j]; + ItemData id = item.ItemData; + + int checkZ = item.Z; + int checkTop = checkZ + id.CalcHeight; + + if ( checkTop == checkZ && !id.Surface ) + ++checkTop; + + if ( checkTop > z && checkTop <= currentZ ) + z = checkTop; + } + + if ( z != int.MinValue ) + toFix.Location = new Point3D( toFix.X, toFix.Y, z ); + } + } + + /* This could be probably be re-implemented if necessary (perhaps via an ITile interface?). + public List GetTilesAt( Point2D p, bool items, bool land, bool statics ) + { + List list = new List(); + + if ( this == Map.Internal ) + return list; + + if ( land ) + list.Add( Tiles.GetLandTile( p.m_X, p.m_Y ) ); + + if ( statics ) + list.AddRange( Tiles.GetStaticTiles( p.m_X, p.m_Y, true ) ); + + if ( items ) + { + Sector sector = GetSector( p ); + + foreach ( Item item in sector.Items ) + if ( item.AtWorldPoint( p.m_X, p.m_Y ) ) + list.Add( new StaticTile( (ushort)item.ItemID, (sbyte) item.Z ) ); + } + + return list; + } + */ + + /// + /// Gets the highest surface that is lower than . + /// + /// The reference point. + /// A surface or . + public object GetTopSurface( Point3D p ) + { + if ( this == Map.Internal ) + return null; + + object surface = null; + int surfaceZ = int.MinValue; + + + LandTile lt = Tiles.GetLandTile( p.X, p.Y ); + + if ( !lt.Ignored ) + { + int avgZ = GetAverageZ( p.X, p.Y ); + + if ( avgZ <= p.Z ) + { + surface = lt; + surfaceZ = avgZ; + + if ( surfaceZ == p.Z ) + return surface; + } + } + + + StaticTile[] staticTiles = Tiles.GetStaticTiles( p.X, p.Y, true ); + + for ( int i = 0; i < staticTiles.Length; i++ ) + { + StaticTile tile = staticTiles[i]; + ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue]; + + if ( id.Surface || ( id.Flags & TileFlag.Wet ) != 0 ) + { + int tileZ = tile.Z + id.CalcHeight; + + if ( tileZ > surfaceZ && tileZ <= p.Z ) + { + surface = tile; + surfaceZ = tileZ; + + if ( surfaceZ == p.Z ) + return surface; + } + } + } + + + Sector sector = GetSector( p.X, p.Y ); + + for ( int i = 0; i < sector.Items.Count; i++ ) + { + Item item = sector.Items[i]; + + if ( !(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue && item.AtWorldPoint( p.X, p.Y ) && !item.Movable ) + { + ItemData id = item.ItemData; + + if ( id.Surface || ( id.Flags & TileFlag.Wet ) != 0 ) + { + int itemZ = item.Z + id.CalcHeight; + + if ( itemZ > surfaceZ && itemZ <= p.Z ) + { + surface = item; + surfaceZ = itemZ; + + if ( surfaceZ == p.Z ) + return surface; + } + } + } + } + + + return surface; + } + + public void Bound( int x, int y, out int newX, out int newY ) + { + if ( x < 0 ) + newX = 0; + else if ( x >= m_Width ) + newX = m_Width - 1; + else + newX = x; + + if ( y < 0 ) + newY = 0; + else if ( y >= m_Height ) + newY = m_Height - 1; + else + newY = y; + } + + public Point2D Bound( Point2D p ) + { + int x = p.m_X, y = p.m_Y; + + if ( x < 0 ) + x = 0; + else if ( x >= m_Width ) + x = m_Width - 1; + + if ( y < 0 ) + y = 0; + else if ( y >= m_Height ) + y = m_Height - 1; + + return new Point2D( x, y ); + } + + public Map( int mapID, int mapIndex, int fileIndex, int width, int height, int season, string name, MapRules rules ) + { + m_MapID = mapID; + m_MapIndex = mapIndex; + m_FileIndex = fileIndex; + m_Width = width; + m_Height = height; + m_Season = season; + m_Name = name; + m_Rules = rules; + m_Regions = new Dictionary( StringComparer.OrdinalIgnoreCase ); + m_InvalidSector = new Sector( 0, 0, this ); + m_SectorsWidth = width >> SectorShift; + m_SectorsHeight = height >> SectorShift; + m_Sectors = new Sector[m_SectorsWidth][]; + } + + #region GetSector + public Sector GetSector( Point3D p ) + { + return InternalGetSector( p.m_X >> SectorShift, p.m_Y >> SectorShift ); + } + + public Sector GetSector( Point2D p ) + { + return InternalGetSector( p.m_X >> SectorShift, p.m_Y >> SectorShift ); + } + + public Sector GetSector( IPoint2D p ) + { + return InternalGetSector( p.X >> SectorShift, p.Y >> SectorShift ); + } + + public Sector GetSector( int x, int y ) + { + return InternalGetSector( x >> SectorShift, y >> SectorShift ); + } + + public Sector GetRealSector( int x, int y ) + { + return InternalGetSector( x, y ); + } + + private Sector InternalGetSector( int x, int y ) + { + if ( x >= 0 && x < m_SectorsWidth && y >= 0 && y < m_SectorsHeight ) + { + Sector[] xSectors = m_Sectors[x]; + + if ( xSectors == null ) + m_Sectors[x] = xSectors = new Sector[m_SectorsHeight]; + + Sector sec = xSectors[y]; + + if ( sec == null ) + xSectors[y] = sec = new Sector( x, y, this ); + + return sec; + } + else + { + return m_InvalidSector; + } + } + #endregion + + public void ActivateSectors( int cx, int cy ) + { + for ( int x = cx - SectorActiveRange; x <= cx + SectorActiveRange; ++x ) + { + for ( int y = cy - SectorActiveRange; y <= cy + SectorActiveRange; ++y ) + { + Sector sect = GetRealSector( x, y ); + if ( sect != m_InvalidSector ) + sect.Activate(); + } + } + } + + public void DeactivateSectors( int cx, int cy ) + { + for ( int x = cx - SectorActiveRange; x <= cx + SectorActiveRange; ++x ) + { + for ( int y = cy - SectorActiveRange; y <= cy + SectorActiveRange; ++y ) + { + Sector sect = GetRealSector( x, y ); + if ( sect != m_InvalidSector && !PlayersInRange( sect, SectorActiveRange ) ) + sect.Deactivate(); + } + } + } + + private bool PlayersInRange( Sector sect, int range ) + { + for ( int x = sect.X - range; x <= sect.X + range; ++x ) + { + for ( int y = sect.Y - range; y <= sect.Y + range; ++y ) + { + Sector check = GetRealSector( x, y ); + if ( check != m_InvalidSector && check.Players.Count > 0 ) + return true; + } + } + + return false; + } + + public void OnClientChange( NetState oldState, NetState newState, Mobile m ) + { + if ( this == Map.Internal ) + return; + + GetSector( m ).OnClientChange( oldState, newState ); + } + + public void OnEnter( Mobile m ) + { + if ( this == Map.Internal ) + return; + + Sector sector = GetSector( m ); + + sector.OnEnter( m ); + } + + public void OnEnter( Item item ) + { + if ( this == Map.Internal ) + return; + + GetSector( item ).OnEnter( item ); + + if ( item is BaseMulti ) + { + BaseMulti m = (BaseMulti)item; + MultiComponentList mcl = m.Components; + + Sector start = GetMultiMinSector( item.Location, mcl ); + Sector end = GetMultiMaxSector( item.Location, mcl ); + + AddMulti( m, start, end ); + } + } + + public void OnLeave( Mobile m ) + { + if ( this == Map.Internal ) + return; + + Sector sector = GetSector( m ); + + sector.OnLeave( m ); + } + + public void OnLeave( Item item ) + { + if ( this == Map.Internal ) + return; + + GetSector( item ).OnLeave( item ); + + if ( item is BaseMulti ) + { + BaseMulti m = (BaseMulti)item; + MultiComponentList mcl = m.Components; + + Sector start = GetMultiMinSector( item.Location, mcl ); + Sector end = GetMultiMaxSector( item.Location, mcl ); + + RemoveMulti( m, start, end ); + } + } + + public void RemoveMulti( BaseMulti m, Sector start, Sector end ) + { + if ( this == Map.Internal ) + return; + + for ( int x = start.X; x <= end.X; ++x ) + for ( int y = start.Y; y <= end.Y; ++y ) + InternalGetSector( x, y ).OnMultiLeave( m ); + } + + public void AddMulti( BaseMulti m, Sector start, Sector end ) + { + if ( this == Map.Internal ) + return; + + for ( int x = start.X; x <= end.X; ++x ) + for ( int y = start.Y; y <= end.Y; ++y ) + InternalGetSector( x, y ).OnMultiEnter( m ); + } + + public Sector GetMultiMinSector( Point3D loc, MultiComponentList mcl ) + { + return GetSector( Bound( new Point2D( loc.m_X + mcl.Min.m_X, loc.m_Y + mcl.Min.m_Y ) ) ); + } + + public Sector GetMultiMaxSector( Point3D loc, MultiComponentList mcl ) + { + return GetSector( Bound( new Point2D( loc.m_X + mcl.Max.m_X, loc.m_Y + mcl.Max.m_Y ) ) ); + } + + public void OnMove( Point3D oldLocation, Mobile m ) + { + if ( this == Map.Internal ) + return; + + Sector oldSector = GetSector( oldLocation ); + Sector newSector = GetSector( m.Location ); + + if ( oldSector != newSector ) + { + oldSector.OnLeave( m ); + newSector.OnEnter( m ); + } + } + + public void OnMove( Point3D oldLocation, Item item ) + { + if ( this == Map.Internal ) + return; + + Sector oldSector = GetSector( oldLocation ); + Sector newSector = GetSector( item.Location ); + + if ( oldSector != newSector ) + { + oldSector.OnLeave( item ); + newSector.OnEnter( item ); + } + + if ( item is BaseMulti ) + { + BaseMulti m = (BaseMulti)item; + MultiComponentList mcl = m.Components; + + Sector start = GetMultiMinSector( item.Location, mcl ); + Sector end = GetMultiMaxSector( item.Location, mcl ); + + Sector oldStart = GetMultiMinSector( oldLocation, mcl ); + Sector oldEnd = GetMultiMaxSector( oldLocation, mcl ); + + if ( oldStart != start || oldEnd != end ) + { + RemoveMulti( m, oldStart, oldEnd ); + AddMulti( m, start, end ); + } + } + } + + public TileMatrix Tiles + { + get + { + if ( m_Tiles == null ) + m_Tiles = new TileMatrix( this, m_FileIndex, m_MapID, m_Width, m_Height ); + + return m_Tiles; + } + } + + public int MapID + { + get + { + return m_MapID; + } + } + + public int MapIndex + { + get + { + return m_MapIndex; + } + } + + public int Width + { + get + { + return m_Width; + } + } + + public int Height + { + get + { + return m_Height; + } + } + + public Dictionary Regions + { + get + { + return m_Regions; + } + } + + public void RegisterRegion( Region reg ) + { + string regName = reg.Name; + + if ( regName != null ) + { + if ( m_Regions.ContainsKey( regName ) ) + Console.WriteLine( "Warning: Duplicate region name '{0}' for map '{1}'", regName, this.Name ); + else + m_Regions[regName] = reg; + } + } + + public void UnregisterRegion( Region reg ) + { + string regName = reg.Name; + + if ( regName != null ) + m_Regions.Remove( regName ); + } + + public Region DefaultRegion + { + get + { + if ( m_DefaultRegion == null ) + m_DefaultRegion = new Region( null, this, 0, new Rectangle3D[0] ); + + return m_DefaultRegion; + } + set + { + m_DefaultRegion = value; + } + } + + public MapRules Rules + { + get + { + return m_Rules; + } + set + { + m_Rules = value; + } + } + + public Sector InvalidSector + { + get + { + return m_InvalidSector; + } + } + + public string Name + { + get + { + return m_Name; + } + set + { + m_Name = value; + } + } + + #region Enumerables + public class NullEnumerable : IPooledEnumerable + { + private InternalEnumerator m_Enumerator; + + public static readonly NullEnumerable Instance = new NullEnumerable(); + + private NullEnumerable() + { + m_Enumerator = new InternalEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return m_Enumerator; + } + + public void Free() + { + } + + private class InternalEnumerator : IEnumerator + { + public void Reset() + { + } + + public object Current + { + get + { + return null; + } + } + + public bool MoveNext() + { + return false; + } + } + } + + private class PooledEnumerable : IPooledEnumerable, IDisposable + { + private IPooledEnumerator m_Enumerator; + + private static Queue m_InstancePool = new Queue(); + private static int m_Depth = 0; + + public static PooledEnumerable Instantiate( IPooledEnumerator etor ) + { + ++m_Depth; + + if ( m_Depth >= 5 ) + Console.WriteLine( "Warning: Make sure to call .Free() on pooled enumerables." ); + + PooledEnumerable e; + + if ( m_InstancePool.Count > 0 ) + { + e = m_InstancePool.Dequeue(); + e.m_Enumerator = etor; + } + else + { + e = new PooledEnumerable( etor ); + } + + etor.Enumerable = e; + + return e; + } + + private PooledEnumerable( IPooledEnumerator etor ) + { + m_Enumerator = etor; + } + + public IEnumerator GetEnumerator() + { + if ( m_Enumerator == null ) + throw new ObjectDisposedException( "PooledEnumerable", "GetEnumerator() called after Free()" ); + + return m_Enumerator; + } + + public void Free() + { + if ( m_Enumerator != null ) + { + m_InstancePool.Enqueue( this ); + + m_Enumerator.Free(); + m_Enumerator = null; + + --m_Depth; + } + } + + public void Dispose() + { + Free(); + } + } + #endregion + + #region Enumerators + private enum SectorEnumeratorType + { + Mobiles, + Items, + Clients + } + + private class TypedEnumerator : IPooledEnumerator, IDisposable + { + private IPooledEnumerable m_Enumerable; + + public IPooledEnumerable Enumerable + { + get { return m_Enumerable; } + set { m_Enumerable = value; } + } + + private Map m_Map; + private Rectangle2D m_Bounds; + private SectorEnumerator m_Enumerator; + private SectorEnumeratorType m_Type; + private object m_Current; + + private static Queue m_InstancePool = new Queue(); + + public static TypedEnumerator Instantiate( Map map, Rectangle2D bounds, SectorEnumeratorType type ) + { + TypedEnumerator e; + + if ( m_InstancePool.Count > 0 ) + { + e = m_InstancePool.Dequeue(); + + e.m_Map = map; + e.m_Bounds = bounds; + e.m_Type = type; + + e.Reset(); + } + else + { + e = new TypedEnumerator( map, bounds, type ); + } + + return e; + } + + public void Free() + { + if ( m_Map == null ) + return; + + m_InstancePool.Enqueue( this ); + + m_Map = null; + + if ( m_Enumerator != null ) + { + m_Enumerator.Free(); + m_Enumerator = null; + } + + if ( m_Enumerable != null ) + m_Enumerable.Free(); + } + + public TypedEnumerator( Map map, Rectangle2D bounds, SectorEnumeratorType type ) + { + m_Map = map; + m_Bounds = bounds; + m_Type = type; + + Reset(); + } + + public object Current + { + get + { + return m_Current; + } + } + + public bool MoveNext() + { + while ( true ) + { + if ( m_Enumerator.MoveNext() ) + { + object o; + + try + { + o = m_Enumerator.Current; + } + catch + { + continue; + } + + if ( o is Mobile ) + { + Mobile m = (Mobile) o; + + if ( !m.Deleted && m_Bounds.Contains( m.Location ) ) + { + m_Current = o; + return true; + } + } + else if ( o is Item ) + { + Item item = (Item) o; + + if ( !item.Deleted && item.Parent == null && m_Bounds.Contains( item.Location ) ) + { + m_Current = o; + return true; + } + } + else if ( o is NetState ) + { + Mobile m = ( (NetState) o ).Mobile; + + if ( m != null && !m.Deleted && m_Bounds.Contains( m.Location ) ) + { + m_Current = o; + return true; + } + } + } + else + { + m_Current = null; + + m_Enumerator.Free(); + m_Enumerator = null; + + return false; + } + } + } + + public void Reset() + { + m_Current = null; + + if ( m_Enumerator != null ) + m_Enumerator.Free(); + + m_Enumerator = SectorEnumerator.Instantiate( m_Map, m_Bounds, m_Type );//new SectorEnumerator( m_Map, m_Origin, m_Type, m_Range ); + } + + public void Dispose() + { + Free(); + } + } + + private class MultiTileEnumerator : IPooledEnumerator, IDisposable + { + private IPooledEnumerable m_Enumerable; + + public IPooledEnumerable Enumerable + { + get { return m_Enumerable; } + set { m_Enumerable = value; } + } + + private List m_List; + private Point2D m_Location; + private object m_Current; + private int m_Index; + + private static Queue m_InstancePool = new Queue(); + + public static MultiTileEnumerator Instantiate( Sector sector, Point2D loc ) + { + MultiTileEnumerator e; + + if ( m_InstancePool.Count > 0 ) + { + e = m_InstancePool.Dequeue(); + + e.m_List = sector.Multis; + e.m_Location = loc; + + e.Reset(); + } + else + { + e = new MultiTileEnumerator( sector, loc ); + } + + return e; + } + + private MultiTileEnumerator( Sector sector, Point2D loc ) + { + m_List = sector.Multis; + m_Location = loc; + + Reset(); + } + + public object Current + { + get + { + return m_Current; + } + } + + public bool MoveNext() + { + while ( ++m_Index < m_List.Count ) + { + BaseMulti m = m_List[m_Index]; + + if ( m != null && !m.Deleted ) + { + MultiComponentList list = m.Components; + + int xOffset = m_Location.m_X - ( m.Location.m_X + list.Min.m_X ); + int yOffset = m_Location.m_Y - ( m.Location.m_Y + list.Min.m_Y ); + + if ( xOffset >= 0 && xOffset < list.Width && yOffset >= 0 && yOffset < list.Height ) + { + StaticTile[] tiles = list.Tiles[xOffset][yOffset]; + + if ( tiles.Length > 0 ) + { + // TODO: How to avoid this copy? + StaticTile[] copy = new StaticTile[tiles.Length]; + + for ( int i = 0; i < copy.Length; ++i ) + { + copy[i] = tiles[i]; + copy[i].Z += m.Z; + } + + m_Current = copy; + return true; + } + } + } + } + + return false; + } + + public void Free() + { + if ( m_List == null ) + return; + + m_InstancePool.Enqueue( this ); + + m_List = null; + + if ( m_Enumerable != null ) + m_Enumerable.Free(); + } + + public void Reset() + { + m_Current = null; + m_Index = -1; + } + + public void Dispose() + { + Free(); + } + } + + private class ObjectEnumerator : IPooledEnumerator, IDisposable + { + private IPooledEnumerable m_Enumerable; + + public IPooledEnumerable Enumerable + { + get { return m_Enumerable; } + set { m_Enumerable = value; } + } + + private Map m_Map; + private Rectangle2D m_Bounds; + private SectorEnumerator m_Enumerator; + private int m_Stage; // 0 = items, 1 = mobiles + private object m_Current; + + private static Queue m_InstancePool = new Queue(); + + public static ObjectEnumerator Instantiate( Map map, Rectangle2D bounds ) + { + ObjectEnumerator e; + + if ( m_InstancePool.Count > 0 ) + { + e = m_InstancePool.Dequeue(); + + e.m_Map = map; + e.m_Bounds = bounds; + + e.Reset(); + } + else + { + e = new ObjectEnumerator( map, bounds ); + } + + return e; + } + + public void Free() + { + if ( m_Map == null ) + return; + + m_InstancePool.Enqueue( this ); + + m_Map = null; + + if ( m_Enumerator != null ) + { + m_Enumerator.Free(); + m_Enumerator = null; + } + + if ( m_Enumerable != null ) + m_Enumerable.Free(); + } + + private ObjectEnumerator( Map map, Rectangle2D bounds ) + { + m_Map = map; + m_Bounds = bounds; + + Reset(); + } + + public object Current + { + get + { + return m_Current; + } + } + + public bool MoveNext() + { + while ( true ) + { + if ( m_Enumerator.MoveNext() ) + { + object o; + + try + { + o = m_Enumerator.Current; + } + catch + { + continue; + } + + if ( o is Mobile ) + { + Mobile m = (Mobile) o; + + if ( m_Bounds.Contains( m.Location ) ) + { + m_Current = o; + return true; + } + } + else if ( o is Item ) + { + Item item = (Item) o; + + if ( item.Parent == null && m_Bounds.Contains( item.Location ) ) + { + m_Current = o; + return true; + } + } + } + else if ( m_Stage == 0 ) + { + m_Enumerator.Free(); + m_Enumerator = SectorEnumerator.Instantiate( m_Map, m_Bounds, SectorEnumeratorType.Mobiles ); + + m_Current = null; + m_Stage = 1; + } + else + { + m_Enumerator.Free(); + m_Enumerator = null; + + m_Current = null; + m_Stage = -1; + + return false; + } + } + } + + public void Reset() + { + m_Stage = 0; + + m_Current = null; + + if ( m_Enumerator != null ) + m_Enumerator.Free(); + + m_Enumerator = SectorEnumerator.Instantiate( m_Map, m_Bounds, SectorEnumeratorType.Items ); + } + + public void Dispose() + { + Free(); + } + } + + private class SectorEnumerator : IPooledEnumerator, IDisposable + { + private IPooledEnumerable m_Enumerable; + + public IPooledEnumerable Enumerable + { + get { return m_Enumerable; } + set { m_Enumerable = value; } + } + + private Map m_Map; + private Rectangle2D m_Bounds; + + private int m_xSector, m_ySector; + private int m_xSectorStart, m_ySectorStart; + private int m_xSectorEnd, m_ySectorEnd; + private IList m_CurrentList; + private int m_CurrentIndex; + private SectorEnumeratorType m_Type; + + private static Queue m_InstancePool = new Queue(); + + public static SectorEnumerator Instantiate( Map map, Rectangle2D bounds, SectorEnumeratorType type ) + { + SectorEnumerator e; + + if ( m_InstancePool.Count > 0 ) + { + e = m_InstancePool.Dequeue(); + + e.m_Map = map; + e.m_Bounds = bounds; + e.m_Type = type; + + e.Reset(); + } + else + { + e = new SectorEnumerator( map, bounds, type ); + } + + return e; + } + + public void Free() + { + if ( m_Map == null ) + return; + + m_InstancePool.Enqueue( this ); + + m_Map = null; + + if ( m_Enumerable != null ) + m_Enumerable.Free(); + } + + private SectorEnumerator( Map map, Rectangle2D bounds, SectorEnumeratorType type ) + { + m_Map = map; + m_Bounds = bounds; + m_Type = type; + + Reset(); + } + + private IList GetListForSector( Sector sector ) + { + switch ( m_Type ) + { + case SectorEnumeratorType.Clients: + return sector.Clients; + case SectorEnumeratorType.Mobiles: + return sector.Mobiles; + case SectorEnumeratorType.Items: + return sector.Items; + default: + throw new Exception( "Invalid SectorEnumeratorType" ); + } + } + + public object Current + { + get + { + return m_CurrentList[m_CurrentIndex]; + /*try + { + return m_CurrentList[m_CurrentIndex]; + } + catch + { + Console.WriteLine( "Warning: Object removed during enumeration. May not be recoverable" ); + + m_CurrentIndex = -1; + m_CurrentList = GetListForSector( m_Map.InternalGetSector( m_xSector, m_ySector ) ); + + if ( MoveNext() ) + { + return Current; + } + else + { + throw new Exception( "Object disposed during enumeration. Was not recoverable." ); + } + }*/ + } + } + + public bool MoveNext() + { + while ( true ) + { + ++m_CurrentIndex; + + if ( m_CurrentIndex == m_CurrentList.Count ) + { + ++m_ySector; + + if ( m_ySector > m_ySectorEnd ) + { + m_ySector = m_ySectorStart; + ++m_xSector; + + if ( m_xSector > m_xSectorEnd ) + { + m_CurrentIndex = -1; + m_CurrentList = null; + + return false; + } + } + + m_CurrentIndex = -1; + m_CurrentList = GetListForSector( m_Map.InternalGetSector( m_xSector, m_ySector ) );//m_Map.m_Sectors[m_xSector][m_ySector] ); + } + else + { + return true; + } + } + } + + public void Reset() + { + m_Map.Bound( m_Bounds.Start.m_X, m_Bounds.Start.m_Y, out m_xSectorStart, out m_ySectorStart ); + m_Map.Bound( m_Bounds.End.m_X - 1, m_Bounds.End.m_Y - 1, out m_xSectorEnd, out m_ySectorEnd ); + + m_xSector = m_xSectorStart >>= Map.SectorShift; + m_ySector = m_ySectorStart >>= Map.SectorShift; + + m_xSectorEnd >>= Map.SectorShift; + m_ySectorEnd >>= Map.SectorShift; + + m_CurrentIndex = -1; + m_CurrentList = GetListForSector( m_Map.InternalGetSector( m_xSector, m_ySector ) ); + } + + public void Dispose() + { + Free(); + } + } + #endregion + + public Point3D GetPoint( object o, bool eye ) + { + Point3D p; + + if( o is Mobile ) + { + p = ((Mobile)o).Location; + p.Z += 14;//eye ? 15 : 10; + } + else if( o is Item ) + { + p = ((Item)o).GetWorldLocation(); + p.Z += (((Item)o).ItemData.Height / 2) + 1; + } + else if( o is Point3D ) + { + p = (Point3D)o; + } + else if( o is LandTarget ) + { + p = ((LandTarget)o).Location; + + int low = 0, avg = 0, top = 0; + GetAverageZ( p.X, p.Y, ref low, ref avg, ref top ); + + p.Z = top + 1; + } + else if( o is StaticTarget ) + { + StaticTarget st = (StaticTarget)o; + ItemData id = TileData.ItemTable[st.ItemID & TileData.MaxItemValue]; + + p = new Point3D( st.X, st.Y, st.Z - id.CalcHeight + (id.Height / 2) + 1 ); + } + else if( o is IPoint3D ) + { + p = new Point3D( (IPoint3D)o ); + } + else + { + Console.WriteLine( "Warning: Invalid object ({0}) in line of sight", o ); + p = Point3D.Zero; + } + + return p; + } + + #region Line Of Sight + private static int m_MaxLOSDistance = 25; + + public static int MaxLOSDistance + { + get { return m_MaxLOSDistance; } + set { m_MaxLOSDistance = value; } + } + + public bool LineOfSight( Point3D org, Point3D dest ) + { + if( this == Map.Internal ) + return false; + + if( !Utility.InRange( org, dest, m_MaxLOSDistance ) ) + return false; + + Point3D start = org; + Point3D end = dest; + + if( org.X > dest.X || (org.X == dest.X && org.Y > dest.Y) || (org.X == dest.X && org.Y == dest.Y && org.Z > dest.Z) ) + { + Point3D swap = org; + org = dest; + dest = swap; + } + + double rise, run, zslp; + double sq3d; + double x, y, z; + int xd, yd, zd; + int ix, iy, iz; + int height; + bool found; + Point3D p; + Point3DList path = m_PathList; + TileFlag flags; + + if( org == dest ) + return true; + + if( path.Count > 0 ) + path.Clear(); + + xd = dest.m_X - org.m_X; + yd = dest.m_Y - org.m_Y; + zd = dest.m_Z - org.m_Z; + zslp = Math.Sqrt( xd * xd + yd * yd ); + if( zd != 0 ) + sq3d = Math.Sqrt( zslp * zslp + zd * zd ); + else + sq3d = zslp; + + rise = ((float)yd) / sq3d; + run = ((float)xd) / sq3d; + zslp = ((float)zd) / sq3d; + + y = org.m_Y; + z = org.m_Z; + x = org.m_X; + while( Utility.NumberBetween( x, dest.m_X, org.m_X, 0.5 ) && Utility.NumberBetween( y, dest.m_Y, org.m_Y, 0.5 ) && Utility.NumberBetween( z, dest.m_Z, org.m_Z, 0.5 ) ) + { + ix = (int)Math.Round( x ); + iy = (int)Math.Round( y ); + iz = (int)Math.Round( z ); + if( path.Count > 0 ) + { + p = path.Last; + + if( p.m_X != ix || p.m_Y != iy || p.m_Z != iz ) + path.Add( ix, iy, iz ); + } + else + { + path.Add( ix, iy, iz ); + } + x += run; + y += rise; + z += zslp; + } + + if( path.Count == 0 ) + return true;//<--should never happen, but to be safe. + + p = path.Last; + + if( p != dest ) + path.Add( dest ); + + Point3D pTop = org, pBottom = dest; + Utility.FixPoints( ref pTop, ref pBottom ); + + int pathCount = path.Count; + + for( int i = 0; i < pathCount; ++i ) + { + Point3D point = path[i]; + + LandTile landTile = Tiles.GetLandTile( point.X, point.Y ); + int landZ = 0, landAvg = 0, landTop = 0; + GetAverageZ( point.m_X, point.m_Y, ref landZ, ref landAvg, ref landTop ); + + if( landZ <= point.m_Z && landTop >= point.m_Z && (point.m_X != end.m_X || point.m_Y != end.m_Y || landZ > end.m_Z || landTop < end.m_Z) && !landTile.Ignored ) + return false; + + /* --Do land tiles need to be checked? There is never land between two people, always statics.-- + LandTile landTile = Tiles.GetLandTile( point.X, point.Y ); + if ( landTile.Z-1 >= point.Z && landTile.Z+1 <= point.Z && (TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Impassable) != 0 ) + return false; + */ + + StaticTile[] statics = Tiles.GetStaticTiles( point.m_X, point.m_Y, true ); + + bool contains = false; + int ltID = landTile.ID; + + for( int j = 0; !contains && j < m_InvalidLandTiles.Length; ++j ) + contains = (ltID == m_InvalidLandTiles[j]); + + if( contains && statics.Length == 0 ) + { + IPooledEnumerable eable = GetItemsInRange( point, 0 ); + + foreach( Item item in eable ) + { + if( item.Visible ) + contains = false; + + if( !contains ) + break; + } + + eable.Free(); + + if( contains ) + return false; + } + + for( int j = 0; j < statics.Length; ++j ) + { + StaticTile t = statics[j]; + + ItemData id = TileData.ItemTable[t.ID & TileData.MaxItemValue]; + + flags = id.Flags; + height = id.CalcHeight; + + if( t.Z <= point.Z && t.Z + height >= point.Z && (flags & (TileFlag.Window | TileFlag.NoShoot)) != 0 ) + { + if( point.m_X == end.m_X && point.m_Y == end.m_Y && t.Z <= end.m_Z && t.Z + height >= end.m_Z ) + continue; + + return false; + } + + /*if ( t.Z <= point.Z && t.Z+height >= point.Z && (flags&TileFlag.Window)==0 && (flags&TileFlag.NoShoot)!=0 + && ( (flags&TileFlag.Wall)!=0 || (flags&TileFlag.Roof)!=0 || (((flags&TileFlag.Surface)!=0 && zd != 0)) ) )*/ + /*{ + //Console.WriteLine( "LoS: Blocked by Static \"{0}\" Z:{1} T:{3} P:{2} F:x{4:X}", TileData.ItemTable[t.ID&TileData.MaxItemValue].Name, t.Z, point, t.Z+height, flags ); + //Console.WriteLine( "if ( {0} && {1} && {2} && ( {3} || {4} || {5} || ({6} && {7} && {8}) ) )", t.Z <= point.Z, t.Z+height >= point.Z, (flags&TileFlag.Window)==0, (flags&TileFlag.Impassable)!=0, (flags&TileFlag.Wall)!=0, (flags&TileFlag.Roof)!=0, (flags&TileFlag.Surface)!=0, t.Z != dest.Z, zd != 0 ) ; + return false; + }*/ + } + } + + Rectangle2D rect = new Rectangle2D( pTop.m_X, pTop.m_Y, (pBottom.m_X - pTop.m_X) + 1, (pBottom.m_Y - pTop.m_Y) + 1 ); + + IPooledEnumerable area = GetItemsInBounds( rect ); + + foreach( Item i in area ) + { + if( !i.Visible ) + continue; + + if( i is BaseMulti || i.ItemID > TileData.MaxItemValue ) + continue; + + ItemData id = i.ItemData; + flags = id.Flags; + + if( (flags & (TileFlag.Window | TileFlag.NoShoot)) == 0 ) + continue; + + height = id.CalcHeight; + + found = false; + + int count = path.Count; + + for( int j = 0; j < count; ++j ) + { + Point3D point = path[j]; + Point3D loc = i.Location; + + //if ( t.Z <= point.Z && t.Z+height >= point.Z && ( height != 0 || ( t.Z == dest.Z && zd != 0 ) ) ) + if( loc.m_X == point.m_X && loc.m_Y == point.m_Y && + loc.m_Z <= point.m_Z && loc.m_Z + height >= point.m_Z ) + { + if( loc.m_X == end.m_X && loc.m_Y == end.m_Y && loc.m_Z <= end.m_Z && loc.m_Z + height >= end.m_Z ) + continue; + + found = true; + break; + } + } + + if( !found ) + continue; + + area.Free(); + return false; + + /*if ( (flags & (TileFlag.Impassable | TileFlag.Surface | TileFlag.Roof)) != 0 ) + + //flags = TileData.ItemTable[i.ItemID&TileData.MaxItemValue].Flags; + //if ( (flags&TileFlag.Window)==0 && (flags&TileFlag.NoShoot)!=0 && ( (flags&TileFlag.Wall)!=0 || (flags&TileFlag.Roof)!=0 || (((flags&TileFlag.Surface)!=0 && zd != 0)) ) ) + { + //height = TileData.ItemTable[i.ItemID&TileData.MaxItemValue].Height; + //Console.WriteLine( "LoS: Blocked by ITEM \"{0}\" P:{1} T:{2} F:x{3:X}", TileData.ItemTable[i.ItemID&TileData.MaxItemValue].Name, i.Location, i.Location.Z+height, flags ); + area.Free(); + return false; + }*/ + } + + area.Free(); + + return true; + } + + public bool LineOfSight( object from, object dest ) + { + if ( from == dest || ( from is Mobile && ( (Mobile) from ).AccessLevel > AccessLevel.Player ) ) + return true; + else if ( dest is Item && from is Mobile && ( (Item) dest ).RootParent == from ) + return true; + + return LineOfSight( GetPoint( from, true ), GetPoint( dest, false ) ); + } + + public bool LineOfSight( Mobile from, Point3D target ) + { + if ( from.AccessLevel > AccessLevel.Player ) + return true; + + Point3D eye = from.Location; + + eye.Z += 14; + + return LineOfSight( eye, target ); + } + + public bool LineOfSight( Mobile from, Mobile to ) + { + if ( from == to || from.AccessLevel > AccessLevel.Player ) + return true; + + Point3D eye = from.Location; + Point3D target = to.Location; + + eye.Z += 14; + target.Z += 14;//10; + + return LineOfSight( eye, target ); + } + #endregion + + private static int[] m_InvalidLandTiles = new int[] { 0x244 }; + + public static int[] InvalidLandTiles + { + get { return m_InvalidLandTiles; } + set { m_InvalidLandTiles = value; } + } + + private static Point3DList m_PathList = new Point3DList(); + public int CompareTo( Map other ) + { + if ( other == null ) + return -1; + + return m_MapID.CompareTo( other.m_MapID ); + } + + public int CompareTo( object other ) + { + if ( other == null || other is Map ) + return this.CompareTo( other ); + + throw new ArgumentException(); + } + } +} \ No newline at end of file diff --git a/Source/Menus/IMenu.cs b/Source/Menus/IMenu.cs new file mode 100644 index 0000000..0a7724d --- /dev/null +++ b/Source/Menus/IMenu.cs @@ -0,0 +1,34 @@ +/*************************************************************************** + * IMenu.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Menus +{ + public interface IMenu + { + int Serial{ get; } + int EntryLength{ get; } + void SendTo( NetState state ); + void OnCancel( NetState state ); + void OnResponse( NetState state, int index ); + } +} \ No newline at end of file diff --git a/Source/Menus/ItemListMenu.cs b/Source/Menus/ItemListMenu.cs new file mode 100644 index 0000000..a9089b1 --- /dev/null +++ b/Source/Menus/ItemListMenu.cs @@ -0,0 +1,140 @@ +/*************************************************************************** + * ItemListMenu.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Menus.ItemLists +{ + public class ItemListEntry + { + private string m_Name; + private int m_ItemID; + private int m_Hue; + + public string Name + { + get + { + return m_Name; + } + } + + public int ItemID + { + get + { + return m_ItemID; + } + } + + public int Hue + { + get + { + return m_Hue; + } + } + + public ItemListEntry( string name, int itemID ) : this( name, itemID, 0 ) + { + } + + public ItemListEntry( string name, int itemID, int hue ) + { + m_Name = name; + m_ItemID = itemID; + m_Hue = hue; + } + } + + public class ItemListMenu : IMenu + { + private string m_Question; + private ItemListEntry[] m_Entries; + + private int m_Serial; + private static int m_NextSerial; + + int IMenu.Serial + { + get + { + return m_Serial; + } + } + + int IMenu.EntryLength + { + get + { + return m_Entries.Length; + } + } + + public string Question + { + get + { + return m_Question; + } + } + + public ItemListEntry[] Entries + { + get + { + return m_Entries; + } + set + { + m_Entries = value; + } + } + + public ItemListMenu( string question, ItemListEntry[] entries ) + { + m_Question = question; + m_Entries = entries; + + do + { + m_Serial = m_NextSerial++; + m_Serial &= 0x7FFFFFFF; + } while ( m_Serial == 0 ); + + m_Serial = (int)((uint)m_Serial | 0x80000000); + } + + public virtual void OnCancel( NetState state ) + { + } + + public virtual void OnResponse( NetState state, int index ) + { + } + + public void SendTo( NetState state ) + { + state.AddMenu( this ); + state.Send( new DisplayItemListMenu( this ) ); + } + } +} \ No newline at end of file diff --git a/Source/Menus/QuestionMenu.cs b/Source/Menus/QuestionMenu.cs new file mode 100644 index 0000000..c00abe9 --- /dev/null +++ b/Source/Menus/QuestionMenu.cs @@ -0,0 +1,96 @@ +/*************************************************************************** + * QuestionMenu.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Menus.Questions +{ + public class QuestionMenu : IMenu + { + private string m_Question; + private string[] m_Answers; + + private int m_Serial; + private static int m_NextSerial; + + int IMenu.Serial + { + get + { + return m_Serial; + } + } + + int IMenu.EntryLength + { + get + { + return m_Answers.Length; + } + } + + public string Question + { + get + { + return m_Question; + } + set + { + m_Question = value; + } + } + + public string[] Answers + { + get + { + return m_Answers; + } + } + + public QuestionMenu( string question, string[] answers ) + { + m_Question = question; + m_Answers = answers; + + do + { + m_Serial = ++m_NextSerial; + m_Serial &= 0x7FFFFFFF; + } while ( m_Serial == 0 ); + } + + public virtual void OnCancel( NetState state ) + { + } + + public virtual void OnResponse( NetState state, int index ) + { + } + + public void SendTo( NetState state ) + { + state.AddMenu( this ); + state.Send( new DisplayQuestionMenu( this ) ); + } + } +} \ No newline at end of file diff --git a/Source/Mobile.cs b/Source/Mobile.cs new file mode 100644 index 0000000..4041bfe --- /dev/null +++ b/Source/Mobile.cs @@ -0,0 +1,11247 @@ +/*************************************************************************** + * Mobile.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Server; +using Server.Accounting; +using Server.Commands; +using Server.ContextMenus; +using Server.Guilds; +using Server.Gumps; +using Server.HuePickers; +using Server.Items; +using Server.Menus; +using Server.Mobiles; +using Server.Network; +using Server.Prompts; +using Server.Targeting; + +namespace Server +{ + #region Callbacks + public delegate void TargetCallback( Mobile from, object targeted ); + public delegate void TargetStateCallback( Mobile from, object targeted, object state ); + public delegate void TargetStateCallback( Mobile from, object targeted, T state ); + + public delegate void PromptCallback( Mobile from, string text ); + public delegate void PromptStateCallback( Mobile from, string text, object state ); + public delegate void PromptStateCallback( Mobile from, string text, T state ); + #endregion + + #region [...]Mods + public class TimedSkillMod : SkillMod + { + private DateTime m_Expire; + + public TimedSkillMod( SkillName skill, bool relative, double value, TimeSpan delay ) + : this( skill, relative, value, DateTime.Now + delay ) + { + } + + public TimedSkillMod( SkillName skill, bool relative, double value, DateTime expire ) + : base( skill, relative, value ) + { + m_Expire = expire; + } + + public override bool CheckCondition() + { + return (DateTime.Now < m_Expire); + } + } + + public class EquipedSkillMod : SkillMod + { + private Item m_Item; + private Mobile m_Mobile; + + public EquipedSkillMod( SkillName skill, bool relative, double value, Item item, Mobile mobile ) + : base( skill, relative, value ) + { + m_Item = item; + m_Mobile = mobile; + } + + public override bool CheckCondition() + { + return (!m_Item.Deleted && !m_Mobile.Deleted && m_Item.Parent == m_Mobile); + } + } + + public class DefaultSkillMod : SkillMod + { + public DefaultSkillMod( SkillName skill, bool relative, double value ) + : base( skill, relative, value ) + { + } + + public override bool CheckCondition() + { + return true; + } + } + + public abstract class SkillMod + { + private Mobile m_Owner; + private SkillName m_Skill; + private bool m_Relative; + private double m_Value; + private bool m_ObeyCap; + + protected SkillMod( SkillName skill, bool relative, double value ) + { + m_Skill = skill; + m_Relative = relative; + m_Value = value; + } + + public bool ObeyCap + { + get { return m_ObeyCap; } + set + { + m_ObeyCap = value; + + if( m_Owner != null ) + { + Skill sk = m_Owner.Skills[m_Skill]; + + if( sk != null ) + sk.Update(); + } + } + } + + public Mobile Owner + { + get + { + return m_Owner; + } + set + { + if( m_Owner != value ) + { + if( m_Owner != null ) + m_Owner.RemoveSkillMod( this ); + + m_Owner = value; + + if( m_Owner != value ) + m_Owner.AddSkillMod( this ); + } + } + } + + public void Remove() + { + Owner = null; + } + + public SkillName Skill + { + get + { + return m_Skill; + } + set + { + if( m_Skill != value ) + { + Skill oldUpdate = (m_Owner == null ? m_Owner.Skills[m_Skill] : null); + + m_Skill = value; + + if( m_Owner != null ) + { + Skill sk = m_Owner.Skills[m_Skill]; + + if( sk != null ) + sk.Update(); + } + + if( oldUpdate != null ) + oldUpdate.Update(); + } + } + } + + public bool Relative + { + get + { + return m_Relative; + } + set + { + if( m_Relative != value ) + { + m_Relative = value; + + if( m_Owner != null ) + { + Skill sk = m_Owner.Skills[m_Skill]; + + if( sk != null ) + sk.Update(); + } + } + } + } + + public bool Absolute + { + get + { + return !m_Relative; + } + set + { + if( m_Relative == value ) + { + m_Relative = !value; + + if( m_Owner != null ) + { + Skill sk = m_Owner.Skills[m_Skill]; + + if( sk != null ) + sk.Update(); + } + } + } + } + + public double Value + { + get + { + return m_Value; + } + set + { + if( m_Value != value ) + { + m_Value = value; + + if( m_Owner != null ) + { + Skill sk = m_Owner.Skills[m_Skill]; + + if( sk != null ) + sk.Update(); + } + } + } + } + + public abstract bool CheckCondition(); + } + + public class StatMod + { + private StatType m_Type; + private string m_Name; + private int m_Offset; + private TimeSpan m_Duration; + private DateTime m_Added; + + public StatType Type { get { return m_Type; } } + public string Name { get { return m_Name; } } + public int Offset { get { return m_Offset; } } + + public bool HasElapsed() + { + if( m_Duration == TimeSpan.Zero ) + return false; + + return (DateTime.Now - m_Added) >= m_Duration; + } + + public StatMod( StatType type, string name, int offset, TimeSpan duration ) + { + m_Type = type; + m_Name = name; + m_Offset = offset; + m_Duration = duration; + m_Added = DateTime.Now; + } + } + + #endregion + + public class DamageEntry + { + private Mobile m_Damager; + private int m_DamageGiven; + private DateTime m_LastDamage; + private List m_Responsible; + + public Mobile Damager { get { return m_Damager; } } + public int DamageGiven { get { return m_DamageGiven; } set { m_DamageGiven = value; } } + public DateTime LastDamage { get { return m_LastDamage; } set { m_LastDamage = value; } } + public bool HasExpired { get { return (DateTime.Now > (m_LastDamage + m_ExpireDelay)); } } + public List Responsible { get { return m_Responsible; } set { m_Responsible = value; } } + + private static TimeSpan m_ExpireDelay = TimeSpan.FromMinutes( 2.0 ); + + public static TimeSpan ExpireDelay + { + get { return m_ExpireDelay; } + set { m_ExpireDelay = value; } + } + + public DamageEntry( Mobile damager ) + { + m_Damager = damager; + } + } + + #region Enums + [Flags] + public enum StatType + { + Str=1, + Dex=2, + Int=4, + All=7 + } + + public enum StatLockType : byte + { + Up, + Down, + Locked + } + + [CustomEnum( new string[] { "North", "Right", "East", "Down", "South", "Left", "West", "Up" } )] + public enum Direction : byte + { + North=0x0, + Right=0x1, + East=0x2, + Down=0x3, + South=0x4, + Left=0x5, + West=0x6, + Up=0x7, + + Mask=0x7, + Running=0x80, + ValueMask=0x87 + } + + [Flags] + public enum MobileDelta + { + None= 0x00000000, + Name= 0x00000001, + Flags= 0x00000002, + Hits= 0x00000004, + Mana= 0x00000008, + Stam= 0x00000010, + Stat= 0x00000020, + Noto= 0x00000040, + Gold= 0x00000080, + Weight= 0x00000100, + Direction= 0x00000200, + Hue= 0x00000400, + Body= 0x00000800, + Armor= 0x00001000, + StatCap= 0x00002000, + GhostUpdate= 0x00004000, + Followers= 0x00008000, + Properties= 0x00010000, + NotUsed= 0x00020000, + NoLongerUsed= 0x00040000, + WeaponDamage= 0x00080000, + Hair= 0x00100000, + FacialHair= 0x00200000, + Race= 0x00400000, + HealthbarYellow=0x00800000, + HealthbarPoison=0x01000000, + + Attributes= 0x0000001C + } + + public enum AccessLevel + { + Player, + Counselor, + GameMaster, + Seer, + Administrator, + Developer, + Owner + } + + public enum VisibleDamageType + { + None, + Related, + Everyone + } + + public enum ApplyPoisonResult + { + Poisoned, + Immune, + HigherPoisonActive, + Cured + } + #endregion + + public class MobileNotConnectedException : Exception + { + public MobileNotConnectedException( Mobile source, string message ) + : base( message ) + { + this.Source = source.ToString(); + } + } + + #region Delegates + + public delegate bool SkillCheckTargetHandler( Mobile from, SkillName skill, object target, double minSkill, double maxSkill ); + public delegate bool SkillCheckLocationHandler( Mobile from, SkillName skill, double minSkill, double maxSkill ); + + public delegate bool SkillCheckDirectTargetHandler( Mobile from, SkillName skill, object target, double chance ); + public delegate bool SkillCheckDirectLocationHandler( Mobile from, SkillName skill, double chance ); + + public delegate TimeSpan RegenRateHandler( Mobile from ); + + public delegate bool AllowBeneficialHandler( Mobile from, Mobile target ); + public delegate bool AllowHarmfulHandler( Mobile from, Mobile target ); + + public delegate Container CreateCorpseHandler( Mobile from, HairInfo hair, FacialHairInfo facialhair, List initialContent, List equipedItems ); + + #endregion + + /// + /// Base class representing players, npcs, and creatures. + /// + public class Mobile : IEntity, IHued, IComparable, ISerializable, ISpawnable + { + #region CompareTo(...) + public int CompareTo( IEntity other ) + { + if( other == null ) + return -1; + + return m_Serial.CompareTo( other.Serial ); + } + + public int CompareTo( Mobile other ) + { + return this.CompareTo( (IEntity)other ); + } + + public int CompareTo( object other ) + { + if( other == null || other is IEntity ) + return this.CompareTo( (IEntity)other ); + + throw new ArgumentException(); + } + #endregion + + private static bool m_DragEffects = true; + + public static bool DragEffects + { + get { return m_DragEffects; } + set { m_DragEffects = value; } + } + + #region Handlers + + private static AllowBeneficialHandler m_AllowBeneficialHandler; + private static AllowHarmfulHandler m_AllowHarmfulHandler; + + public static AllowBeneficialHandler AllowBeneficialHandler + { + get { return m_AllowBeneficialHandler; } + set { m_AllowBeneficialHandler = value; } + } + + public static AllowHarmfulHandler AllowHarmfulHandler + { + get { return m_AllowHarmfulHandler; } + set { m_AllowHarmfulHandler = value; } + } + + private static SkillCheckTargetHandler m_SkillCheckTargetHandler; + private static SkillCheckLocationHandler m_SkillCheckLocationHandler; + private static SkillCheckDirectTargetHandler m_SkillCheckDirectTargetHandler; + private static SkillCheckDirectLocationHandler m_SkillCheckDirectLocationHandler; + + public static SkillCheckTargetHandler SkillCheckTargetHandler + { + get { return m_SkillCheckTargetHandler; } + set { m_SkillCheckTargetHandler = value; } + } + + public static SkillCheckLocationHandler SkillCheckLocationHandler + { + get { return m_SkillCheckLocationHandler; } + set { m_SkillCheckLocationHandler = value; } + } + + public static SkillCheckDirectTargetHandler SkillCheckDirectTargetHandler + { + get { return m_SkillCheckDirectTargetHandler; } + set { m_SkillCheckDirectTargetHandler = value; } + } + + public static SkillCheckDirectLocationHandler SkillCheckDirectLocationHandler + { + get { return m_SkillCheckDirectLocationHandler; } + set { m_SkillCheckDirectLocationHandler = value; } + } + + #endregion + + #region Regeneration + + private static RegenRateHandler m_HitsRegenRate, m_StamRegenRate, m_ManaRegenRate; + private static TimeSpan m_DefaultHitsRate, m_DefaultStamRate, m_DefaultManaRate; + + public static RegenRateHandler HitsRegenRateHandler + { + get { return m_HitsRegenRate; } + set { m_HitsRegenRate = value; } + } + + public static TimeSpan DefaultHitsRate + { + get { return m_DefaultHitsRate; } + set { m_DefaultHitsRate = value; } + } + + public static RegenRateHandler StamRegenRateHandler + { + get { return m_StamRegenRate; } + set { m_StamRegenRate = value; } + } + + public static TimeSpan DefaultStamRate + { + get { return m_DefaultStamRate; } + set { m_DefaultStamRate = value; } + } + + public static RegenRateHandler ManaRegenRateHandler + { + get { return m_ManaRegenRate; } + set { m_ManaRegenRate = value; } + } + + public static TimeSpan DefaultManaRate + { + get { return m_DefaultManaRate; } + set { m_DefaultManaRate = value; } + } + + public static TimeSpan GetHitsRegenRate( Mobile m ) + { + if( m_HitsRegenRate == null ) + return m_DefaultHitsRate; + else + return m_HitsRegenRate( m ); + } + + public static TimeSpan GetStamRegenRate( Mobile m ) + { + if( m_StamRegenRate == null ) + return m_DefaultStamRate; + else + return m_StamRegenRate( m ); + } + + public static TimeSpan GetManaRegenRate( Mobile m ) + { + if( m_ManaRegenRate == null ) + return m_DefaultManaRate; + else + return m_ManaRegenRate( m ); + } + + #endregion + + private class MovementRecord + { + public DateTime m_End; + + private static Queue m_InstancePool = new Queue(); + + public static MovementRecord NewInstance( DateTime end ) + { + MovementRecord r; + + if( m_InstancePool.Count > 0 ) + { + r = m_InstancePool.Dequeue(); + + r.m_End = end; + } + else + { + r = new MovementRecord( end ); + } + + return r; + } + + private MovementRecord( DateTime end ) + { + m_End = end; + } + + public bool Expired() + { + bool v = (DateTime.Now >= m_End); + + if( v ) + m_InstancePool.Enqueue( this ); + + return v; + } + } + + #region Var declarations + private Serial m_Serial; + private Map m_Map; + private Point3D m_Location; + private Direction m_Direction; + private Body m_Body; + private int m_Hue; + private Poison m_Poison; + private Timer m_PoisonTimer; + private BaseGuild m_Guild; + private string m_GuildTitle; + private bool m_Criminal; + private string m_Name; + private int m_Kills; + private int m_SpeechHue, m_EmoteHue, m_WhisperHue, m_YellHue; + private string m_Language; + private NetState m_NetState; + private bool m_Female, m_Warmode, m_Hidden, m_Blessed, m_Flying; + private int m_StatCap; + private int m_Str, m_Dex, m_Int; + private int m_Hits, m_Stam, m_Mana; + private int m_Fame, m_Karma; + private AccessLevel m_AccessLevel; + private Skills m_Skills; + private List m_Items; + private bool m_Player; + private string m_Title; + private string m_HiddenTitle; + private string m_Profile; + private bool m_ProfileLocked; + private int m_LightLevel; + private int m_TotalGold, m_TotalItems, m_TotalWeight; + private List m_StatMods; + private ISpell m_Spell; + private Target m_Target; + private Prompt m_Prompt; + private ContextMenu m_ContextMenu; + private List m_Aggressors, m_Aggressed; + private Mobile m_Combatant; + private List m_Stabled; + private bool m_AutoPageNotify; + private bool m_Meditating; + private bool m_CanHearGhosts; + private bool m_CanSwim, m_CantWalk, m_WillSwim, m_WontWalk; + private bool m_DisplayGuildTitle; + private Mobile m_GuildFealty; + private DateTime m_NextSpellTime; + private DateTime[] m_StuckMenuUses; + private Timer m_ExpireCombatant; + private Timer m_ExpireCriminal; + private Timer m_ExpireAggrTimer; + private Timer m_LogoutTimer; + private Timer m_CombatTimer; + private Timer m_ManaTimer, m_HitsTimer, m_StamTimer; + private DateTime m_NextSkillTime; + private DateTime m_NextActionTime; + private DateTime m_NextActionMessage; + private bool m_Paralyzed; + private ParalyzedTimer m_ParaTimer; + private bool m_Frozen; + private FrozenTimer m_FrozenTimer; + private int m_AllowedStealthSteps; + private int m_Hunger; + private int m_NameHue = -1; + private Region m_Region; + private bool m_DisarmReady, m_StunReady; + private int m_BaseSoundID; + private int m_VirtualArmor; + private bool m_Squelched; + private bool m_Invulnerable; + private int m_MeleeDamageAbsorb; + private int m_MagicDamageAbsorb; + private int m_Followers, m_FollowersMax; + private List _actions; // prefer List over ArrayList for more specific profiling information + private Queue m_MoveRecords; + private int m_WarmodeChanges = 0; + private DateTime m_NextWarmodeChange; + private WarmodeTimer m_WarmodeTimer; + private int m_Thirst, m_BAC; + private int m_VirtualArmorMod; + private object m_Party; + private List m_SkillMods; + private Body m_BodyMod; + private DateTime m_LastStrGain; + private DateTime m_LastIntGain; + private DateTime m_LastDexGain; + private Race m_Race; + + #endregion + + private static readonly TimeSpan WarmodeSpamCatch = TimeSpan.FromSeconds( 0.5 ); + private static readonly TimeSpan WarmodeSpamDelay = TimeSpan.FromSeconds( 2.0 ); + private const int WarmodeCatchCount = 4; // Allow four warmode changes in 0.5 seconds, any more will be delay for two seconds + + [CommandProperty( AccessLevel.GameMaster )] + public Race Race + { + get + { + if( m_Race == null ) + m_Race = Race.DefaultRace; + + return m_Race; + } + set + { + Race oldRace = this.Race; + + m_Race = value; + + if( m_Race == null ) + m_Race = Race.DefaultRace; + + this.Body = m_Race.Body( this ); + + Delta( MobileDelta.Race ); + + OnRaceChange( oldRace ); + } + } + + protected virtual void OnRaceChange( Race oldRace ) + { + } + + public virtual double RacialSkillBonus { get { return 0; } } + + public virtual void ComputeLightLevels( out int global, out int personal ) + { + ComputeBaseLightLevels( out global, out personal ); + + if( m_Region != null ) + m_Region.AlterLightLevel( this, ref global, ref personal ); + } + + public virtual void ComputeBaseLightLevels( out int global, out int personal ) + { + global = 0; + personal = m_LightLevel; + } + + public virtual void CheckLightLevels( bool forceResend ) + { + } + + public virtual void SendPropertiesTo( Mobile from ) + { + from.Send( PropertyList ); + } + + public virtual void OnAosSingleClick( Mobile from ) + { + ObjectPropertyList opl = this.PropertyList; + + if( opl.Header > 0 ) + { + int hue; + + if( m_NameHue != -1 ) + hue = m_NameHue; + else if( m_AccessLevel > AccessLevel.Player ) + hue = 11; + else + hue = Notoriety.GetHue( Notoriety.Compute( from, this ) ); + + from.Send( new MessageLocalized( m_Serial, Body, MessageType.Label, hue, 3, opl.Header, Name, opl.HeaderArgs ) ); + } + } + + public virtual string ApplyNameSuffix( string suffix ) + { + return suffix; + } + + public virtual void AddNameProperties( ObjectPropertyList list ) + { + string name = Name; + + if( name == null ) + name = String.Empty; + + string prefix = ""; + + if( ShowFameTitle && (m_Player || m_Body.IsHuman) && m_Fame >= 10000 ) + prefix = m_Female ? "Lady" : "Lord"; + + string suffix = ""; + + if( PropertyTitle && Title != null && Title.Length > 0 ) + suffix = Title; + + BaseGuild guild = m_Guild; + + if( guild != null && (m_Player || m_DisplayGuildTitle) ) + { + if( suffix.Length > 0 ) + suffix = String.Format( "{0} [{1}]", suffix, Utility.FixHtml( guild.Abbreviation ) ); + else + suffix = String.Format( "[{0}]", Utility.FixHtml( guild.Abbreviation ) ); + } + + suffix = ApplyNameSuffix( suffix ); + + list.Add( 1050045, "{0} \t{1}\t {2}", prefix, name, suffix ); // ~1_PREFIX~~2_NAME~~3_SUFFIX~ + + if( guild != null && (m_DisplayGuildTitle || (m_Player && guild.Type != GuildType.Regular)) ) + { + string type; + + if( guild.Type >= 0 && (int)guild.Type < m_GuildTypes.Length ) + type = m_GuildTypes[(int)guild.Type]; + else + type = ""; + + string title = GuildTitle; + + if( title == null ) + title = ""; + else + title = title.Trim(); + + if( NewGuildDisplay && title.Length > 0 ) + { + list.Add( "{0}, {1}", Utility.FixHtml( title ), Utility.FixHtml( guild.Name ) ); + } + else + { + if( title.Length > 0 ) + list.Add( "{0}, {1} Guild{2}", Utility.FixHtml( title ), Utility.FixHtml( guild.Name ), type ); + else + list.Add( Utility.FixHtml( guild.Name ) ); + } + } + } + + public virtual bool NewGuildDisplay { get { return false; } } + + public virtual void GetProperties( ObjectPropertyList list ) + { + AddNameProperties( list ); + } + + public virtual void GetChildProperties( ObjectPropertyList list, Item item ) + { + } + + public virtual void GetChildNameProperties( ObjectPropertyList list, Item item ) + { + } + + private void UpdateAggrExpire() + { + if( m_Deleted || (m_Aggressors.Count == 0 && m_Aggressed.Count == 0) ) + { + StopAggrExpire(); + } + else if( m_ExpireAggrTimer == null ) + { + m_ExpireAggrTimer = new ExpireAggressorsTimer( this ); + m_ExpireAggrTimer.Start(); + } + } + + private void StopAggrExpire() + { + if( m_ExpireAggrTimer != null ) + m_ExpireAggrTimer.Stop(); + + m_ExpireAggrTimer = null; + } + + private void CheckAggrExpire() + { + for( int i = m_Aggressors.Count - 1; i >= 0; --i ) + { + if( i >= m_Aggressors.Count ) + continue; + + AggressorInfo info = m_Aggressors[i]; + + if( info.Expired ) + { + Mobile attacker = info.Attacker; + attacker.RemoveAggressed( this ); + + m_Aggressors.RemoveAt( i ); + info.Free(); + + if( m_NetState != null && this.CanSee( attacker ) && Utility.InUpdateRange( m_Location, attacker.m_Location ) ) { + if ( m_NetState.StygianAbyss ) { + m_NetState.Send( new MobileIncoming( this, attacker ) ); + } else { + m_NetState.Send( new MobileIncomingOld( this, attacker ) ); + } + } + } + } + + for( int i = m_Aggressed.Count - 1; i >= 0; --i ) + { + if( i >= m_Aggressed.Count ) + continue; + + AggressorInfo info = m_Aggressed[i]; + + if( info.Expired ) + { + Mobile defender = info.Defender; + defender.RemoveAggressor( this ); + + m_Aggressed.RemoveAt( i ); + info.Free(); + + if( m_NetState != null && this.CanSee( defender ) && Utility.InUpdateRange( m_Location, defender.m_Location ) ) { + if ( m_NetState.StygianAbyss ) { + m_NetState.Send( new MobileIncoming( this, defender ) ); + } else { + m_NetState.Send( new MobileIncomingOld( this, defender ) ); + } + } + } + } + + UpdateAggrExpire(); + } + + public List Stabled { get { return m_Stabled; } } + + public object Party { get { return m_Party; } set { m_Party = value; } } + public List SkillMods { get { return m_SkillMods; } } + + [CommandProperty( AccessLevel.GameMaster )] + public int VirtualArmorMod + { + get + { + return m_VirtualArmorMod; + } + set + { + if( m_VirtualArmorMod != value ) + { + m_VirtualArmorMod = value; + + Delta( MobileDelta.Armor ); + } + } + } + + /// + /// Overridable. Virtual event invoked when changes in some way. + /// + public virtual void OnSkillInvalidated( Skill skill ) + { + } + + public virtual void UpdateSkillMods() + { + ValidateSkillMods(); + + for( int i = 0; i < m_SkillMods.Count; ++i ) + { + SkillMod mod = m_SkillMods[i]; + + Skill sk = m_Skills[mod.Skill]; + + if( sk != null ) + sk.Update(); + } + } + + public virtual void ValidateSkillMods() + { + for( int i = 0; i < m_SkillMods.Count; ) + { + SkillMod mod = m_SkillMods[i]; + + if( mod.CheckCondition() ) + ++i; + else + InternalRemoveSkillMod( mod ); + } + } + + public virtual void AddSkillMod( SkillMod mod ) + { + if( mod == null ) + return; + + ValidateSkillMods(); + + if( !m_SkillMods.Contains( mod ) ) + { + m_SkillMods.Add( mod ); + mod.Owner = this; + + Skill sk = m_Skills[mod.Skill]; + + if( sk != null ) + sk.Update(); + } + } + + public virtual void RemoveSkillMod( SkillMod mod ) + { + if( mod == null ) + return; + + ValidateSkillMods(); + + InternalRemoveSkillMod( mod ); + } + + private void InternalRemoveSkillMod( SkillMod mod ) + { + if( m_SkillMods.Contains( mod ) ) + { + m_SkillMods.Remove( mod ); + mod.Owner = null; + + Skill sk = m_Skills[mod.Skill]; + + if( sk != null ) + sk.Update(); + } + } + + private class WarmodeTimer : Timer + { + private Mobile m_Mobile; + private bool m_Value; + + public bool Value + { + get + { + return m_Value; + } + set + { + m_Value = value; + } + } + + public WarmodeTimer( Mobile m, bool value ) + : base( WarmodeSpamDelay ) + { + m_Mobile = m; + m_Value = value; + } + + protected override void OnTick() + { + m_Mobile.Warmode = m_Value; + m_Mobile.m_WarmodeChanges = 0; + + m_Mobile.m_WarmodeTimer = null; + } + } + + /// + /// Overridable. Virtual event invoked when a client, , invokes a 'help request' for the Mobile. Seemingly no longer functional in newer clients. + /// + public virtual void OnHelpRequest( Mobile from ) + { + } + + public void DelayChangeWarmode( bool value ) + { + if( m_WarmodeTimer != null ) + { + m_WarmodeTimer.Value = value; + return; + } + + if( m_Warmode == value ) + return; + + DateTime now = DateTime.Now, next = m_NextWarmodeChange; + + if( now > next || m_WarmodeChanges == 0 ) + { + m_WarmodeChanges = 1; + m_NextWarmodeChange = now + WarmodeSpamCatch; + } + else if( m_WarmodeChanges == WarmodeCatchCount ) + { + m_WarmodeTimer = new WarmodeTimer( this, value ); + m_WarmodeTimer.Start(); + + return; + } + else + { + ++m_WarmodeChanges; + } + + Warmode = value; + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MeleeDamageAbsorb + { + get + { + return m_MeleeDamageAbsorb; + } + set + { + m_MeleeDamageAbsorb = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int MagicDamageAbsorb + { + get + { + return m_MagicDamageAbsorb; + } + set + { + m_MagicDamageAbsorb = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int SkillsTotal + { + get + { + return m_Skills == null ? 0 : m_Skills.Total; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int SkillsCap + { + get + { + return m_Skills == null ? 0 : m_Skills.Cap; + } + set + { + if( m_Skills != null ) + m_Skills.Cap = value; + } + } + + public bool InLOS( Mobile target ) + { + if( m_Deleted || m_Map == null ) + return false; + else if( target == this || m_AccessLevel > AccessLevel.Player ) + return true; + + return m_Map.LineOfSight( this, target ); + } + + public bool InLOS( object target ) + { + if( m_Deleted || m_Map == null ) + return false; + else if( target == this || m_AccessLevel > AccessLevel.Player ) + return true; + else if( target is Item && ((Item)target).RootParent == this ) + return true; + + return m_Map.LineOfSight( this, target ); + } + + public bool InLOS( Point3D target ) + { + if( m_Deleted || m_Map == null ) + return false; + else if( m_AccessLevel > AccessLevel.Player ) + return true; + + return m_Map.LineOfSight( this, target ); + } + + [CommandProperty( AccessLevel.GameMaster )] + public int BaseSoundID + { + get + { + return m_BaseSoundID; + } + set + { + m_BaseSoundID = value; + } + } + + public DateTime NextCombatTime + { + get + { + return m_NextCombatTime; + } + set + { + m_NextCombatTime = value; + } + } + + public bool BeginAction( object toLock ) + { + if ( _actions == null ) { + _actions = new List(); + + _actions.Add( toLock ); + + return true; + } else if ( !_actions.Contains( toLock ) ) { + _actions.Add( toLock ); + + return true; + } + + return false; + } + + public bool CanBeginAction( object toLock ) + { + return ( _actions == null || !_actions.Contains( toLock ) ); + } + + public void EndAction( object toLock ) + { + if ( _actions != null ) { + _actions.Remove( toLock ); + + if ( _actions.Count == 0 ) { + _actions = null; + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int NameHue + { + get + { + return m_NameHue; + } + set + { + m_NameHue = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Hunger + { + get + { + return m_Hunger; + } + set + { + int oldValue = m_Hunger; + + if( oldValue != value ) + { + m_Hunger = value; + + EventSink.InvokeHungerChanged( new HungerChangedEventArgs( this, oldValue ) ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Thirst + { + get + { + return m_Thirst; + } + set + { + m_Thirst = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int BAC + { + get + { + return m_BAC; + } + set + { + m_BAC = value; + } + } + + private DateTime m_LastMoveTime; + + /// + /// Gets or sets the number of steps this player may take when hidden before being revealed. + /// + [CommandProperty( AccessLevel.GameMaster )] + public int AllowedStealthSteps + { + get + { + return m_AllowedStealthSteps; + } + set + { + m_AllowedStealthSteps = value; + } + } + + /* Logout: + * + * When a client logs into mobile x + * - if ( x is Internalized ) move x to logout location and map + * + * When a client attached to a mobile disconnects + * - LogoutTimer is started + * - Delay is taken from Region.GetLogoutDelay to allow insta-logout regions. + * - OnTick : Location and map are stored, and mobile is internalized + * + * Some things to consider: + * - An internalized person getting killed (say, by poison). Where does the body go? + * - Regions now have a GetLogoutDelay( Mobile m ); virtual function (see above) + */ + private Point3D m_LogoutLocation; + private Map m_LogoutMap; + + public virtual TimeSpan GetLogoutDelay() + { + return Region.GetLogoutDelay( this ); + } + + private StatLockType m_StrLock, m_DexLock, m_IntLock; + + private Item m_Holding; + + public Item Holding + { + get + { + return m_Holding; + } + set + { + if( m_Holding != value ) + { + if( m_Holding != null ) + { + UpdateTotal( m_Holding, TotalType.Weight, -(m_Holding.TotalWeight + m_Holding.PileWeight) ); + + if( m_Holding.HeldBy == this ) + m_Holding.HeldBy = null; + } + + if( value != null && m_Holding != null ) + DropHolding(); + + m_Holding = value; + + if( m_Holding != null ) + { + UpdateTotal( m_Holding, TotalType.Weight, m_Holding.TotalWeight + m_Holding.PileWeight ); + + if( m_Holding.HeldBy == null ) + m_Holding.HeldBy = this; + } + } + } + } + + public DateTime LastMoveTime + { + get + { + return m_LastMoveTime; + } + set + { + m_LastMoveTime = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual bool Paralyzed + { + get + { + return m_Paralyzed; + } + set + { + if( m_Paralyzed != value ) + { + m_Paralyzed = value; + + this.SendLocalizedMessage( m_Paralyzed ? 502381 : 502382 ); + + if( m_ParaTimer != null ) + { + m_ParaTimer.Stop(); + m_ParaTimer = null; + } + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool DisarmReady + { + get + { + return m_DisarmReady; + } + set + { + m_DisarmReady = value; + //SendLocalizedMessage( value ? 1019013 : 1019014 ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool StunReady + { + get + { + return m_StunReady; + } + set + { + m_StunReady = value; + //SendLocalizedMessage( value ? 1019011 : 1019012 ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Frozen + { + get + { + return m_Frozen; + } + set + { + if( m_Frozen != value ) + { + m_Frozen = value; + + if( m_FrozenTimer != null ) + { + m_FrozenTimer.Stop(); + m_FrozenTimer = null; + } + } + } + } + + public void Paralyze( TimeSpan duration ) + { + if( !m_Paralyzed ) + { + Paralyzed = true; + + m_ParaTimer = new ParalyzedTimer( this, duration ); + m_ParaTimer.Start(); + } + } + + public void Freeze( TimeSpan duration ) + { + if( !m_Frozen ) + { + m_Frozen = true; + + m_FrozenTimer = new FrozenTimer( this, duration ); + m_FrozenTimer.Start(); + } + } + + /// + /// Gets or sets the lock state for the property. + /// + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public StatLockType StrLock + { + get + { + return m_StrLock; + } + set + { + if( m_StrLock != value ) + { + m_StrLock = value; + + if( m_NetState != null ) + m_NetState.Send( new StatLockInfo( this ) ); + } + } + } + + /// + /// Gets or sets the lock state for the property. + /// + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public StatLockType DexLock + { + get + { + return m_DexLock; + } + set + { + if( m_DexLock != value ) + { + m_DexLock = value; + + if( m_NetState != null ) + m_NetState.Send( new StatLockInfo( this ) ); + } + } + } + + /// + /// Gets or sets the lock state for the property. + /// + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public StatLockType IntLock + { + get + { + return m_IntLock; + } + set + { + if( m_IntLock != value ) + { + m_IntLock = value; + + if( m_NetState != null ) + m_NetState.Send( new StatLockInfo( this ) ); + } + } + } + + public override string ToString() + { + return String.Format( "0x{0:X} \"{1}\"", m_Serial.Value, Name ); + } + + public DateTime NextActionTime + { + get + { + return m_NextActionTime; + } + set + { + m_NextActionTime = value; + } + } + + public DateTime NextActionMessage + { + get + { + return m_NextActionMessage; + } + set + { + m_NextActionMessage = value; + } + } + + private static TimeSpan m_ActionMessageDelay = TimeSpan.FromSeconds( 0.125 ); + + public static TimeSpan ActionMessageDelay + { + get { return m_ActionMessageDelay; } + set { m_ActionMessageDelay = value; } + } + + public virtual void SendSkillMessage() + { + if( DateTime.Now < m_NextActionMessage ) + return; + + m_NextActionMessage = DateTime.Now + m_ActionMessageDelay; + + SendLocalizedMessage( 500118 ); // You must wait a few moments to use another skill. + } + + public virtual void SendActionMessage() + { + if( DateTime.Now < m_NextActionMessage ) + return; + + m_NextActionMessage = DateTime.Now + m_ActionMessageDelay; + + SendLocalizedMessage( 500119 ); // You must wait to perform another action. + } + + public virtual void ClearHands() + { + ClearHand( FindItemOnLayer( Layer.OneHanded ) ); + ClearHand( FindItemOnLayer( Layer.TwoHanded ) ); + } + + public virtual void ClearHand( Item item ) + { + if( item != null && item.Movable && !item.AllowEquipedCast( this ) ) + { + Container pack = this.Backpack; + + if( pack == null ) + AddToBackpack( item ); + else + pack.DropItem( item ); + } + } + + + private static bool m_GlobalRegenThroughPoison = true; + + public static bool GlobalRegenThroughPoison + { + get { return m_GlobalRegenThroughPoison; } + set { m_GlobalRegenThroughPoison = value; } + } + + public virtual bool RegenThroughPoison { get { return m_GlobalRegenThroughPoison; } } + + public virtual bool CanRegenHits { get { return this.Alive && (RegenThroughPoison || !this.Poisoned); } } + public virtual bool CanRegenStam { get { return this.Alive; } } + public virtual bool CanRegenMana { get { return this.Alive; } } + + #region Timers + + private class ManaTimer : Timer + { + private Mobile m_Owner; + + public ManaTimer( Mobile m ) + : base( Mobile.GetManaRegenRate( m ), Mobile.GetManaRegenRate( m ) ) + { + this.Priority = TimerPriority.FiftyMS; + m_Owner = m; + } + + protected override void OnTick() + { + if( m_Owner.CanRegenMana )// m_Owner.Alive ) + m_Owner.Mana++; + + Delay = Interval = Mobile.GetManaRegenRate( m_Owner ); + } + } + + private class HitsTimer : Timer + { + private Mobile m_Owner; + + public HitsTimer( Mobile m ): base( Mobile.GetHitsRegenRate( m ), Mobile.GetHitsRegenRate( m ) ) + { + this.Priority = TimerPriority.FiftyMS; + m_Owner = m; + } + + protected override void OnTick() + { + if( m_Owner.CanRegenHits ) + { + m_Owner.Hits++; + } + + Delay = Interval = Mobile.GetHitsRegenRate( m_Owner ); + } + } + + private class StamTimer : Timer + { + private Mobile m_Owner; + + public StamTimer( Mobile m ) + : base( Mobile.GetStamRegenRate( m ), Mobile.GetStamRegenRate( m ) ) + { + this.Priority = TimerPriority.FiftyMS; + m_Owner = m; + } + + protected override void OnTick() + { + if( m_Owner.CanRegenStam )// m_Owner.Alive ) + m_Owner.Stam++; + + Delay = Interval = Mobile.GetStamRegenRate( m_Owner ); + } + } + + private class LogoutTimer : Timer + { + private Mobile m_Mobile; + + public LogoutTimer( Mobile m ) + : base( TimeSpan.FromDays( 1.0 ) ) + { + Priority = TimerPriority.OneSecond; + m_Mobile = m; + } + + protected override void OnTick() + { + if( m_Mobile.m_Map != Map.Internal ) + { + EventSink.InvokeLogout( new LogoutEventArgs( m_Mobile ) ); + + m_Mobile.m_LogoutLocation = m_Mobile.m_Location; + m_Mobile.m_LogoutMap = m_Mobile.m_Map; + + m_Mobile.Internalize(); + } + } + } + + private class ParalyzedTimer : Timer + { + private Mobile m_Mobile; + + public ParalyzedTimer( Mobile m, TimeSpan duration ) + : base( duration ) + { + this.Priority = TimerPriority.TwentyFiveMS; + m_Mobile = m; + } + + protected override void OnTick() + { + m_Mobile.Paralyzed = false; + } + } + + private class FrozenTimer : Timer + { + private Mobile m_Mobile; + + public FrozenTimer( Mobile m, TimeSpan duration ) + : base( duration ) + { + this.Priority = TimerPriority.TwentyFiveMS; + m_Mobile = m; + } + + protected override void OnTick() + { + m_Mobile.Frozen = false; + } + } + + private class CombatTimer : Timer + { + private Mobile m_Mobile; + + public CombatTimer( Mobile m ) + : base( TimeSpan.FromSeconds( 0.0 ), TimeSpan.FromSeconds( 0.01 ), 0 ) + { + m_Mobile = m; + + if( !m_Mobile.m_Player && m_Mobile.m_Dex <= 100 ) + Priority = TimerPriority.FiftyMS; + } + + protected override void OnTick() + { + if( DateTime.Now > m_Mobile.m_NextCombatTime ) + { + Mobile combatant = m_Mobile.Combatant; + + // If no combatant, wrong map, one of us is a ghost, or cannot see, or deleted, then stop combat + if( combatant == null || combatant.m_Deleted || m_Mobile.m_Deleted || combatant.m_Map != m_Mobile.m_Map || !combatant.Alive || !m_Mobile.Alive || !m_Mobile.CanSee( combatant ) || combatant.IsDeadBondedPet || m_Mobile.IsDeadBondedPet ) + { + m_Mobile.Combatant = null; + return; + } + + IWeapon weapon = m_Mobile.Weapon; + + if( !m_Mobile.InRange( combatant, weapon.MaxRange ) ) + return; + + if( m_Mobile.InLOS( combatant ) ) + { + weapon.OnBeforeSwing( m_Mobile, combatant ); //OnBeforeSwing for checking in regards to being hidden and whatnot + m_Mobile.RevealingAction(); + m_Mobile.m_NextCombatTime = DateTime.Now + weapon.OnSwing( m_Mobile, combatant ); + } + } + } + } + + private class ExpireCombatantTimer : Timer + { + private Mobile m_Mobile; + + public ExpireCombatantTimer( Mobile m ) + : base( TimeSpan.FromMinutes( 1.0 ) ) + { + this.Priority = TimerPriority.FiveSeconds; + m_Mobile = m; + } + + protected override void OnTick() + { + m_Mobile.Combatant = null; + } + } + + private static TimeSpan m_ExpireCriminalDelay = TimeSpan.FromMinutes( 2.0 ); + + public static TimeSpan ExpireCriminalDelay + { + get { return m_ExpireCriminalDelay; } + set { m_ExpireCriminalDelay = value; } + } + + private class ExpireCriminalTimer : Timer + { + private Mobile m_Mobile; + + public ExpireCriminalTimer( Mobile m ) + : base( m_ExpireCriminalDelay ) + { + this.Priority = TimerPriority.FiveSeconds; + m_Mobile = m; + } + + protected override void OnTick() + { + m_Mobile.Criminal = false; + } + } + + private class ExpireAggressorsTimer : Timer + { + private Mobile m_Mobile; + + public ExpireAggressorsTimer( Mobile m ) + : base( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromSeconds( 5.0 ) ) + { + m_Mobile = m; + Priority = TimerPriority.FiveSeconds; + } + + protected override void OnTick() + { + if( m_Mobile.Deleted || (m_Mobile.Aggressors.Count == 0 && m_Mobile.Aggressed.Count == 0) ) + m_Mobile.StopAggrExpire(); + else + m_Mobile.CheckAggrExpire(); + } + } + + #endregion + + private DateTime m_NextCombatTime; + + public DateTime NextSkillTime + { + get + { + return m_NextSkillTime; + } + set + { + m_NextSkillTime = value; + } + } + + public List Aggressors + { + get + { + return m_Aggressors; + } + } + + public List Aggressed + { + get + { + return m_Aggressed; + } + } + + private int m_ChangingCombatant; + + public bool ChangingCombatant + { + get { return (m_ChangingCombatant > 0); } + } + + public virtual void Attack( Mobile m ) + { + if( CheckAttack( m ) ) + Combatant = m; + } + + public virtual bool CheckAttack( Mobile m ) + { + return (Utility.InUpdateRange( this, m ) && CanSee( m ) && InLOS( m )); + } + + /// + /// Overridable. Gets or sets which Mobile that this Mobile is currently engaged in combat with. + /// + /// + [CommandProperty( AccessLevel.GameMaster )] + public virtual Mobile Combatant + { + get + { + return m_Combatant; + } + set + { + if( m_Deleted ) + return; + + if( m_Combatant != value && value != this ) + { + Mobile old = m_Combatant; + + ++m_ChangingCombatant; + m_Combatant = value; + + if( (m_Combatant != null && !CanBeHarmful( m_Combatant, false )) || !Region.OnCombatantChange( this, old, m_Combatant ) ) + { + m_Combatant = old; + --m_ChangingCombatant; + return; + } + + if( m_NetState != null ) + m_NetState.Send( new ChangeCombatant( m_Combatant ) ); + + if( m_Combatant == null ) + { + if( m_ExpireCombatant != null ) + m_ExpireCombatant.Stop(); + + if( m_CombatTimer != null ) + m_CombatTimer.Stop(); + + m_ExpireCombatant = null; + m_CombatTimer = null; + } + else + { + if( m_ExpireCombatant == null ) + m_ExpireCombatant = new ExpireCombatantTimer( this ); + + m_ExpireCombatant.Start(); + + if( m_CombatTimer == null ) + m_CombatTimer = new CombatTimer( this ); + + m_CombatTimer.Start(); + } + + if( m_Combatant != null && CanBeHarmful( m_Combatant, false ) ) + { + DoHarmful( m_Combatant ); + + if( m_Combatant != null ) + m_Combatant.PlaySound( m_Combatant.GetAngerSound() ); + } + + OnCombatantChange(); + --m_ChangingCombatant; + } + } + } + + /// + /// Overridable. Virtual event invoked after the property has changed. + /// + /// + public virtual void OnCombatantChange() + { + } + + public double GetDistanceToSqrt( Point3D p ) + { + int xDelta = m_Location.m_X - p.m_X; + int yDelta = m_Location.m_Y - p.m_Y; + + return Math.Sqrt( (xDelta * xDelta) + (yDelta * yDelta) ); + } + + public double GetDistanceToSqrt( Mobile m ) + { + int xDelta = m_Location.m_X - m.m_Location.m_X; + int yDelta = m_Location.m_Y - m.m_Location.m_Y; + + return Math.Sqrt( (xDelta * xDelta) + (yDelta * yDelta) ); + } + + public double GetDistanceToSqrt( IPoint2D p ) + { + int xDelta = m_Location.m_X - p.X; + int yDelta = m_Location.m_Y - p.Y; + + return Math.Sqrt( (xDelta * xDelta) + (yDelta * yDelta) ); + } + + public virtual void AggressiveAction( Mobile aggressor ) + { + AggressiveAction( aggressor, false ); + } + + public virtual void AggressiveAction( Mobile aggressor, bool criminal ) + { + if( aggressor == this ) + return; + + AggressiveActionEventArgs args = AggressiveActionEventArgs.Create( this, aggressor, criminal ); + + EventSink.InvokeAggressiveAction( args ); + + args.Free(); + + if( Combatant == aggressor ) + { + if( m_ExpireCombatant == null ) + m_ExpireCombatant = new ExpireCombatantTimer( this ); + else + m_ExpireCombatant.Stop(); + + m_ExpireCombatant.Start(); + } + + bool addAggressor = true; + + List list = m_Aggressors; + + for( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if( info.Attacker == aggressor ) + { + info.Refresh(); + info.CriminalAggression = criminal; + info.CanReportMurder = criminal; + + addAggressor = false; + } + } + + list = aggressor.m_Aggressors; + + for( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if( info.Attacker == this ) + { + info.Refresh(); + + addAggressor = false; + } + } + + bool addAggressed = true; + + list = m_Aggressed; + + for( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if( info.Defender == aggressor ) + { + info.Refresh(); + + addAggressed = false; + } + } + + list = aggressor.m_Aggressed; + + for( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if( info.Defender == this ) + { + info.Refresh(); + info.CriminalAggression = criminal; + info.CanReportMurder = criminal; + + addAggressed = false; + } + } + + bool setCombatant = false; + + if( addAggressor ) + { + m_Aggressors.Add( AggressorInfo.Create( aggressor, this, criminal ) ); // new AggressorInfo( aggressor, this, criminal, true ) ); + + if( this.CanSee( aggressor ) && m_NetState != null ) { + if ( m_NetState.StygianAbyss ) { + m_NetState.Send( new MobileIncoming( this, aggressor ) ); + } else { + m_NetState.Send( new MobileIncomingOld( this, aggressor ) ); + } + } + + if( Combatant == null ) + setCombatant = true; + + UpdateAggrExpire(); + } + + if( addAggressed ) + { + aggressor.m_Aggressed.Add( AggressorInfo.Create( aggressor, this, criminal ) ); // new AggressorInfo( aggressor, this, criminal, false ) ); + + if( this.CanSee( aggressor ) && m_NetState != null ) { + if ( m_NetState.StygianAbyss ) { + m_NetState.Send( new MobileIncoming( this, aggressor ) ); + } else { + m_NetState.Send( new MobileIncomingOld( this, aggressor ) ); + } + } + + if( Combatant == null ) + setCombatant = true; + + UpdateAggrExpire(); + } + + if( setCombatant ) + Combatant = aggressor; + + Region.OnAggressed( aggressor, this, criminal ); + } + + public void RemoveAggressed( Mobile aggressed ) + { + if( m_Deleted ) + return; + + List list = m_Aggressed; + + for( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if( info.Defender == aggressed ) + { + m_Aggressed.RemoveAt( i ); + info.Free(); + + if( m_NetState != null && this.CanSee( aggressed ) ) { + if ( m_NetState.StygianAbyss ) { + m_NetState.Send( new MobileIncoming( this, aggressed ) ); + } else { + m_NetState.Send( new MobileIncomingOld( this, aggressed ) ); + } + } + + break; + } + } + + UpdateAggrExpire(); + } + + public void RemoveAggressor( Mobile aggressor ) + { + if( m_Deleted ) + return; + + List list = m_Aggressors; + + for( int i = 0; i < list.Count; ++i ) + { + AggressorInfo info = list[i]; + + if( info.Attacker == aggressor ) + { + m_Aggressors.RemoveAt( i ); + info.Free(); + + if( m_NetState != null && this.CanSee( aggressor ) ) { + if ( m_NetState.StygianAbyss ) { + m_NetState.Send( new MobileIncoming( this, aggressor ) ); + } else { + m_NetState.Send( new MobileIncomingOld( this, aggressor ) ); + } + } + + break; + } + } + + UpdateAggrExpire(); + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TotalGold + { + get { return GetTotal( TotalType.Gold ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TotalItems + { + get { return GetTotal( TotalType.Items ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int TotalWeight + { + get { return GetTotal( TotalType.Weight ); } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Followers + { + get + { + return m_Followers; + } + set + { + if( m_Followers != value ) + { + m_Followers = value; + + Delta( MobileDelta.Followers ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int FollowersMax + { + get + { + return m_FollowersMax; + } + set + { + if( m_FollowersMax != value ) + { + m_FollowersMax = value; + + Delta( MobileDelta.Followers ); + } + } + } + + public virtual int GetTotal( TotalType type ) + { + switch( type ) + { + case TotalType.Gold: + return m_TotalGold; + + case TotalType.Items: + return m_TotalItems; + + case TotalType.Weight: + return m_TotalWeight; + } + + return 0; + } + + public virtual void UpdateTotal( Item sender, TotalType type, int delta ) + { + if( delta == 0 || sender.IsVirtualItem ) + return; + + switch( type ) + { + case TotalType.Gold: + m_TotalGold += delta; + Delta( MobileDelta.Gold ); + break; + + case TotalType.Items: + m_TotalItems += delta; + break; + + case TotalType.Weight: + m_TotalWeight += delta; + Delta( MobileDelta.Weight ); + OnWeightChange( m_TotalWeight - delta ); + break; + } + } + + public virtual void UpdateTotals() + { + if( m_Items == null ) + return; + + int oldWeight = m_TotalWeight; + + m_TotalGold = 0; + m_TotalItems = 0; + m_TotalWeight = 0; + + for( int i = 0; i < m_Items.Count; ++i ) + { + Item item = m_Items[i]; + + item.UpdateTotals(); + + if( item.IsVirtualItem ) + continue; + + m_TotalGold += item.TotalGold; + m_TotalItems += item.TotalItems + 1; + m_TotalWeight += item.TotalWeight + item.PileWeight; + } + + if( m_Holding != null ) + m_TotalWeight += m_Holding.TotalWeight + m_Holding.PileWeight; + + if( m_TotalWeight != oldWeight ) + OnWeightChange( oldWeight ); + } + + public void ClearQuestArrow() + { + m_QuestArrow = null; + } + + public void ClearTarget() + { + m_Target = null; + } + + private bool m_TargetLocked; + + public bool TargetLocked + { + get + { + return m_TargetLocked; + } + set + { + m_TargetLocked = value; + } + } + + private class SimpleTarget : Target + { + private TargetCallback m_Callback; + + public SimpleTarget( int range, TargetFlags flags, bool allowGround, TargetCallback callback ) + : base( range, allowGround, flags ) + { + m_Callback = callback; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if( m_Callback != null ) + m_Callback( from, targeted ); + } + } + + public Target BeginTarget( int range, bool allowGround, TargetFlags flags, TargetCallback callback ) + { + Target t = new SimpleTarget( range, flags, allowGround, callback ); + + this.Target = t; + + return t; + } + + private class SimpleStateTarget : Target + { + private TargetStateCallback m_Callback; + private object m_State; + + public SimpleStateTarget( int range, TargetFlags flags, bool allowGround, TargetStateCallback callback, object state ) + : base( range, allowGround, flags ) + { + m_Callback = callback; + m_State = state; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if( m_Callback != null ) + m_Callback( from, targeted, m_State ); + } + } + + public Target BeginTarget( int range, bool allowGround, TargetFlags flags, TargetStateCallback callback, object state ) + { + Target t = new SimpleStateTarget( range, flags, allowGround, callback, state ); + + this.Target = t; + + return t; + } + + private class SimpleStateTarget : Target + { + private TargetStateCallback m_Callback; + private T m_State; + + public SimpleStateTarget(int range, TargetFlags flags, bool allowGround, TargetStateCallback callback, T state) + : base(range, allowGround, flags) + { + m_Callback = callback; + m_State = state; + } + + protected override void OnTarget(Mobile from, object targeted) + { + if (m_Callback != null) + m_Callback(from, targeted, m_State); + } + } + public Target BeginTarget(int range, bool allowGround, TargetFlags flags, TargetStateCallback callback, T state) + { + Target t = new SimpleStateTarget(range, flags, allowGround, callback, state); + + this.Target = t; + + return t; + } + + public Target Target + { + get + { + return m_Target; + } + set + { + Target oldTarget = m_Target; + Target newTarget = value; + + if( oldTarget == newTarget ) + return; + + m_Target = null; + + if( oldTarget != null && newTarget != null ) + oldTarget.Cancel( this, TargetCancelType.Overriden ); + + m_Target = newTarget; + + if( newTarget != null && m_NetState != null && !m_TargetLocked ) + m_NetState.Send( newTarget.GetPacketFor( m_NetState ) ); + + OnTargetChange(); + } + } + + /// + /// Overridable. Virtual event invoked after the Target property has changed. + /// + protected virtual void OnTargetChange() + { + } + + public ContextMenu ContextMenu + { + get + { + return m_ContextMenu; + } + set + { + m_ContextMenu = value; + + if( m_ContextMenu != null ) + Send( new DisplayContextMenu( m_ContextMenu ) ); + } + } + + public virtual bool CheckContextMenuDisplay( IEntity target ) + { + return true; + } + + #region Prompts + private class SimplePrompt : Prompt + { + private PromptCallback m_Callback; + private PromptCallback m_CancelCallback; + private bool m_CallbackHandlesCancel; + + public SimplePrompt( PromptCallback callback, PromptCallback cancelCallback ) + { + m_Callback = callback; + m_CancelCallback = cancelCallback; + } + + public SimplePrompt( PromptCallback callback, bool callbackHandlesCancel ) + { + m_Callback = callback; + m_CallbackHandlesCancel = callbackHandlesCancel; + } + + public SimplePrompt( PromptCallback callback ) + : this( callback, false ) + { + } + + public override void OnResponse( Mobile from, string text ) + { + if( m_Callback != null ) + m_Callback( from, text ); + } + + public override void OnCancel( Mobile from ) + { + if( m_CallbackHandlesCancel && m_Callback != null ) + m_Callback( from, "" ); + else if( m_CancelCallback != null ) + m_CancelCallback( from, "" ); + } + } + public Prompt BeginPrompt( PromptCallback callback, PromptCallback cancelCallback ) + { + Prompt p = new SimplePrompt( callback, cancelCallback ); + + this.Prompt = p; + return p; + } + public Prompt BeginPrompt( PromptCallback callback, bool callbackHandlesCancel ) + { + Prompt p = new SimplePrompt( callback, callbackHandlesCancel ); + + this.Prompt = p; + return p; + } + public Prompt BeginPrompt( PromptCallback callback ) + { + return BeginPrompt( callback, false ); + } + + private class SimpleStatePrompt : Prompt + { + private PromptStateCallback m_Callback; + private PromptStateCallback m_CancelCallback; + + private bool m_CallbackHandlesCancel; + + private object m_State; + + public SimpleStatePrompt( PromptStateCallback callback, PromptStateCallback cancelCallback, object state ) + { + m_Callback = callback; + m_CancelCallback = cancelCallback; + m_State = state; + } + public SimpleStatePrompt( PromptStateCallback callback, bool callbackHandlesCancel, object state ) + { + m_Callback = callback; + m_State = state; + m_CallbackHandlesCancel = callbackHandlesCancel; + } + public SimpleStatePrompt( PromptStateCallback callback, object state ) + : this( callback, false, state ) + { + } + + public override void OnResponse( Mobile from, string text ) + { + if( m_Callback != null ) + m_Callback( from, text, m_State ); + } + + public override void OnCancel( Mobile from ) + { + if( m_CallbackHandlesCancel && m_Callback != null ) + m_Callback( from, "", m_State ); + else if( m_CancelCallback != null ) + m_CancelCallback( from, "", m_State ); + } + } + public Prompt BeginPrompt( PromptStateCallback callback, PromptStateCallback cancelCallback, object state ) + { + Prompt p = new SimpleStatePrompt( callback, cancelCallback, state ); + + this.Prompt = p; + return p; + } + public Prompt BeginPrompt( PromptStateCallback callback, bool callbackHandlesCancel, object state ) + { + Prompt p = new SimpleStatePrompt( callback, callbackHandlesCancel, state ); + + this.Prompt = p; + return p; + } + public Prompt BeginPrompt( PromptStateCallback callback, object state ) + { + return BeginPrompt( callback, false, state ); + } + + private class SimpleStatePrompt : Prompt + { + private PromptStateCallback m_Callback; + private PromptStateCallback m_CancelCallback; + + private bool m_CallbackHandlesCancel; + + private T m_State; + + public SimpleStatePrompt(PromptStateCallback callback, PromptStateCallback cancelCallback, T state) + { + m_Callback = callback; + m_CancelCallback = cancelCallback; + m_State = state; + } + public SimpleStatePrompt(PromptStateCallback callback, bool callbackHandlesCancel, T state) + { + m_Callback = callback; + m_State = state; + m_CallbackHandlesCancel = callbackHandlesCancel; + } + public SimpleStatePrompt(PromptStateCallback callback, T state) + : this(callback, false, state) + { + } + + public override void OnResponse(Mobile from, string text) + { + if (m_Callback != null) + m_Callback(from, text, m_State); + } + + public override void OnCancel(Mobile from) + { + if (m_CallbackHandlesCancel && m_Callback != null) + m_Callback(from, "", m_State); + else if (m_CancelCallback != null) + m_CancelCallback(from, "", m_State); + } + } + public Prompt BeginPrompt(PromptStateCallback callback, PromptStateCallback cancelCallback, T state) + { + Prompt p = new SimpleStatePrompt(callback, cancelCallback, state); + + this.Prompt = p; + return p; + } + public Prompt BeginPrompt(PromptStateCallback callback, bool callbackHandlesCancel, T state) + { + Prompt p = new SimpleStatePrompt(callback, callbackHandlesCancel, state); + + this.Prompt = p; + return p; + } + public Prompt BeginPrompt(PromptStateCallback callback, T state) + { + return BeginPrompt(callback, false, state); + } + + public Prompt Prompt + { + get + { + return m_Prompt; + } + set + { + Prompt oldPrompt = m_Prompt; + Prompt newPrompt = value; + + if( oldPrompt == newPrompt ) + return; + + m_Prompt = null; + + if( oldPrompt != null && newPrompt != null ) + oldPrompt.OnCancel( this ); + + m_Prompt = newPrompt; + + if( newPrompt != null ) + Send( new UnicodePrompt( newPrompt ) ); + } + } + #endregion + + private bool InternalOnMove( Direction d ) + { + if( !OnMove( d ) ) + return false; + + MovementEventArgs e = MovementEventArgs.Create( this, d ); + + EventSink.InvokeMovement( e ); + + bool ret = !e.Blocked; + + e.Free(); + + return ret; + } + + /// + /// Overridable. Event invoked before the Mobile moves. + /// + /// True if the move is allowed, false if not. + protected virtual bool OnMove( Direction d ) + { + if( m_Hidden && m_AccessLevel == AccessLevel.Player ) + { + if( m_AllowedStealthSteps-- <= 0 || (d & Direction.Running) != 0 || this.Mounted ) + RevealingAction(); + } + + return true; + } + + private static Packet[][] m_MovingPacketCache = new Packet[2][] + { + new Packet[8], + new Packet[8] + }; + + private bool m_Pushing; + + public bool Pushing + { + get + { + return m_Pushing; + } + set + { + m_Pushing = value; + } + } + + private static TimeSpan m_WalkFoot = TimeSpan.FromSeconds( 0.4 ); + private static TimeSpan m_RunFoot = TimeSpan.FromSeconds( 0.2 ); + private static TimeSpan m_WalkMount = TimeSpan.FromSeconds( 0.2 ); + private static TimeSpan m_RunMount = TimeSpan.FromSeconds( 0.1 ); + + public static TimeSpan WalkFoot { get { return m_WalkFoot; } } + public static TimeSpan RunFoot { get { return m_RunFoot; } } + public static TimeSpan WalkMount { get { return m_WalkMount; } } + public static TimeSpan RunMount { get { return m_RunMount; } } + + private DateTime m_EndQueue; + + private static ArrayList m_MoveList = new ArrayList(); + + private static AccessLevel m_FwdAccessOverride = AccessLevel.Counselor; + private static bool m_FwdEnabled = true; + private static bool m_FwdUOTDOverride = false; + private static int m_FwdMaxSteps = 4; + + public static AccessLevel FwdAccessOverride { get { return m_FwdAccessOverride; } set { m_FwdAccessOverride = value; } } + public static bool FwdEnabled { get { return m_FwdEnabled; } set { m_FwdEnabled = value; } } + public static bool FwdUOTDOverride { get { return m_FwdUOTDOverride; } set { m_FwdUOTDOverride = value; } } + public static int FwdMaxSteps { get { return m_FwdMaxSteps; } set { m_FwdMaxSteps = value; } } + + public virtual void ClearFastwalkStack() + { + if( m_MoveRecords != null && m_MoveRecords.Count > 0 ) + m_MoveRecords.Clear(); + + m_EndQueue = DateTime.Now; + } + + public virtual bool CheckMovement( Direction d, out int newZ ) + { + return Movement.Movement.CheckMovement( this, d, out newZ ); + } + + public virtual bool Move( Direction d ) + { + if( m_Deleted ) + return false; + + InnBox box = FindInnNoCreate(); + + if( box != null && box.Opened ) + box.Close(); + + Point3D newLocation = m_Location; + Point3D oldLocation = newLocation; + + if( (m_Direction & Direction.Mask) == (d & Direction.Mask) ) + { + // We are actually moving (not just a direction change) + + if( m_Spell != null && !m_Spell.OnCasterMoving( d ) ) + return false; + + if( m_Paralyzed || m_Frozen ) + { + SendLocalizedMessage( 500111 ); // You are frozen and can not move. + + return false; + } + + int newZ; + + if( CheckMovement( d, out newZ ) ) + { + int x = oldLocation.m_X, y = oldLocation.m_Y; + int oldX = x, oldY = y; + int oldZ = oldLocation.m_Z; + + switch( d & Direction.Mask ) + { + case Direction.North: + --y; + break; + case Direction.Right: + ++x; + --y; + break; + case Direction.East: + ++x; + break; + case Direction.Down: + ++x; + ++y; + break; + case Direction.South: + ++y; + break; + case Direction.Left: + --x; + ++y; + break; + case Direction.West: + --x; + break; + case Direction.Up: + --x; + --y; + break; + } + + newLocation.m_X = x; + newLocation.m_Y = y; + newLocation.m_Z = newZ; + + m_Pushing = false; + + Map map = m_Map; + + if( map != null ) + { + Sector oldSector = map.GetSector( oldX, oldY ); + Sector newSector = map.GetSector( x, y ); + + if( oldSector != newSector ) + { + for( int i = 0; i < oldSector.Mobiles.Count; ++i ) + { + Mobile m = oldSector.Mobiles[i]; + + if( m != this && m.X == oldX && m.Y == oldY && (m.Z + 15) > oldZ && (oldZ + 15) > m.Z && !m.OnMoveOff( this ) ) + return false; + } + + for( int i = 0; i < oldSector.Items.Count; ++i ) + { + Item item = oldSector.Items[i]; + + if( item.AtWorldPoint( oldX, oldY ) && (item.Z == oldZ || ((item.Z + item.ItemData.Height) > oldZ && (oldZ + 15) > item.Z)) && !item.OnMoveOff( this ) ) + return false; + } + + for( int i = 0; i < newSector.Mobiles.Count; ++i ) + { + Mobile m = newSector.Mobiles[i]; + + if( m.X == x && m.Y == y && (m.Z + 15) > newZ && (newZ + 15) > m.Z && !m.OnMoveOver( this ) ) + return false; + } + + for( int i = 0; i < newSector.Items.Count; ++i ) + { + Item item = newSector.Items[i]; + + if( item.AtWorldPoint( x, y ) && (item.Z == newZ || ((item.Z + item.ItemData.Height) > newZ && (newZ + 15) > item.Z)) && !item.OnMoveOver( this ) ) + return false; + } + } + else + { + for( int i = 0; i < oldSector.Mobiles.Count; ++i ) + { + Mobile m = oldSector.Mobiles[i]; + + if( m != this && m.X == oldX && m.Y == oldY && (m.Z + 15) > oldZ && (oldZ + 15) > m.Z && !m.OnMoveOff( this ) ) + return false; + else if( m.X == x && m.Y == y && (m.Z + 15) > newZ && (newZ + 15) > m.Z && !m.OnMoveOver( this ) ) + return false; + } + + for( int i = 0; i < oldSector.Items.Count; ++i ) + { + Item item = oldSector.Items[i]; + + if( item.AtWorldPoint( oldX, oldY ) && (item.Z == oldZ || ((item.Z + item.ItemData.Height) > oldZ && (oldZ + 15) > item.Z)) && !item.OnMoveOff( this ) ) + return false; + else if( item.AtWorldPoint( x, y ) && (item.Z == newZ || ((item.Z + item.ItemData.Height) > newZ && (newZ + 15) > item.Z)) && !item.OnMoveOver( this ) ) + return false; + } + } + + if( !Region.CanMove( this, d, newLocation, oldLocation, m_Map ) ) + return false; + } + else + { + return false; + } + + if( !InternalOnMove( d ) ) + return false; + + if( m_FwdEnabled && m_NetState != null && m_AccessLevel < m_FwdAccessOverride && (!m_FwdUOTDOverride || !m_NetState.IsUOTDClient) ) + { + if( m_MoveRecords == null ) + m_MoveRecords = new Queue( 6 ); + + while( m_MoveRecords.Count > 0 ) + { + MovementRecord r = m_MoveRecords.Peek(); + + if( r.Expired() ) + m_MoveRecords.Dequeue(); + else + break; + } + + if( m_MoveRecords.Count >= m_FwdMaxSteps ) + { + FastWalkEventArgs fw = new FastWalkEventArgs( m_NetState ); + EventSink.InvokeFastWalk( fw ); + + if( fw.Blocked ) + return false; + } + + TimeSpan delay = ComputeMovementSpeed( d ); + + DateTime end; + + if( m_MoveRecords.Count > 0 ) + end = m_EndQueue + delay; + else + end = DateTime.Now + delay; + + m_MoveRecords.Enqueue( MovementRecord.NewInstance( end ) ); + + m_EndQueue = end; + } + + m_LastMoveTime = DateTime.Now; + } + else + { + return false; + } + + DisruptiveAction(); + } + + if( m_NetState != null ) + m_NetState.Send( MovementAck.Instantiate( m_NetState.Sequence, this ) );//new MovementAck( m_NetState.Sequence, this ) ); + + SetLocation( newLocation, false ); + SetDirection( d ); + + if( m_Map != null ) + { + IPooledEnumerable eable = m_Map.GetObjectsInRange( m_Location, Core.GlobalMaxUpdateRange ); + + foreach( object o in eable ) + { + if( o == this ) + continue; + + if( o is Mobile ) + { + m_MoveList.Add( o ); + } + else if( o is Item ) + { + Item item = (Item)o; + + if( item.HandlesOnMovement ) + m_MoveList.Add( item ); + } + } + + eable.Free(); + + Packet[][] cache = m_MovingPacketCache; + + for( int i = 0; i < cache.Length; ++i ) + for( int j = 0; j < cache[i].Length; ++j ) + Packet.Release( ref cache[i][j] ); + + for( int i = 0; i < m_MoveList.Count; ++i ) + { + object o = m_MoveList[i]; + + if( o is Mobile ) + { + Mobile m = (Mobile)m_MoveList[i]; + NetState ns = m.NetState; + + if( ns != null && Utility.InUpdateRange( m_Location, m.m_Location ) && m.CanSee( this ) ) + { + Packet p = null; + + if ( ns.StygianAbyss ) { + int noto = Notoriety.Compute( m, this ); + p = cache[0][noto]; + + if( p == null ) + cache[0][noto] = p = Packet.Acquire( new MobileMoving( this, noto ) ); + } else { + int noto = Notoriety.Compute( m, this ); + p = cache[1][noto]; + + if( p == null ) + cache[1][noto] = p = Packet.Acquire( new MobileMovingOld( this, noto ) ); + } + + ns.Send( p ); + } + + m.OnMovement( this, oldLocation ); + } + else if( o is Item ) + { + ((Item)o).OnMovement( this, oldLocation ); + } + } + + for( int i = 0; i < cache.Length; ++i ) + for( int j = 0; j < cache[i].Length; ++j ) + Packet.Release( ref cache[i][j] ); + + if( m_MoveList.Count > 0 ) + m_MoveList.Clear(); + } + + OnAfterMove( oldLocation ); + return true; + } + + public virtual void OnAfterMove( Point3D oldLocation ) + { + } + + public TimeSpan ComputeMovementSpeed() + { + return ComputeMovementSpeed( this.Direction, false ); + } + + public TimeSpan ComputeMovementSpeed( Direction dir ) + { + return ComputeMovementSpeed( dir, true ); + } + + public virtual TimeSpan ComputeMovementSpeed( Direction dir, bool checkTurning ) + { + TimeSpan delay; + + if( Mounted ) + delay = (dir & Direction.Running) != 0 ? m_RunMount : m_WalkMount; + else + delay = (dir & Direction.Running) != 0 ? m_RunFoot : m_WalkFoot; + + return delay; + } + + /// + /// Overridable. Virtual event invoked when a Mobile moves off this Mobile. + /// + /// True if the move is allowed, false if not. + public virtual bool OnMoveOff( Mobile m ) + { + return true; + } + + public virtual bool IsDeadBondedPet { get { return false; } } + + /// + /// Overridable. Event invoked when a Mobile moves over this Mobile. + /// + /// True if the move is allowed, false if not. + public virtual bool OnMoveOver( Mobile m ) + { + if( m_Map == null || m_Deleted ) + return true; + + return m.CheckShove( this ); + } + + public virtual bool CheckShove( Mobile shoved ) + { + if( (m_Map.Rules & MapRules.FreeMovement) == 0 ) + { + if( !shoved.Alive || !Alive || shoved.IsDeadBondedPet || IsDeadBondedPet ) + return true; + else if( shoved.m_Hidden && shoved.m_AccessLevel > AccessLevel.Player ) + return true; + + if( !m_Pushing ) + { + m_Pushing = true; + + int number; + + if( this.AccessLevel > AccessLevel.Player ) + { + number = shoved.m_Hidden ? 1019041 : 1019040; + } + else + { + if( Stam == StamMax ) + { + number = shoved.m_Hidden ? 1019043 : 1019042; + Stam -= 10; + + RevealingAction(); + } + else + { + return false; + } + } + + SendLocalizedMessage( number ); + } + } + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile sees another Mobile, , move. + /// + public virtual void OnMovement( Mobile m, Point3D oldLocation ) + { + } + + public ISpell Spell + { + get + { + return m_Spell; + } + set + { + if( m_Spell != null && value != null ) + Console.WriteLine( "Warning: Spell has been overwritten" ); + + m_Spell = value; + } + } + + [CommandProperty( AccessLevel.Administrator )] + public bool AutoPageNotify + { + get + { + return m_AutoPageNotify; + } + set + { + m_AutoPageNotify = value; + } + } + + public virtual void CriminalAction( bool message ) + { + if( m_Deleted ) + return; + + Criminal = true; + + this.Region.OnCriminalAction( this, message ); + } + + public virtual bool CanUseStuckMenu() + { + if( m_StuckMenuUses == null ) + { + return true; + } + else + { + for( int i = 0; i < m_StuckMenuUses.Length; ++i ) + { + if( (DateTime.Now - m_StuckMenuUses[i]) > TimeSpan.FromDays( 1.0 ) ) + { + return true; + } + } + + return false; + } + } + + public virtual bool IsSnoop( Mobile from ) + { + return (from != this); + } + + /// + /// Overridable. Any call to will silently fail if this method returns false. + /// + /// + public virtual bool CheckResurrect() + { + return true; + } + + /// + /// Overridable. Event invoked before the Mobile is resurrected. + /// + /// + public virtual void OnBeforeResurrect() + { + } + + /// + /// Overridable. Event invoked after the Mobile is resurrected. + /// + /// + public virtual void OnAfterResurrect() + { + } + + public virtual void Resurrect() + { + if( !Alive ) + { + if( !Region.OnResurrect( this ) ) + return; + + if( !CheckResurrect() ) + return; + + OnBeforeResurrect(); + + InnBox box = FindInnNoCreate(); + + if( box != null && box.Opened ) + box.Close(); + + Poison = null; + + Warmode = false; + + Hits = 10; + Stam = StamMax; + Mana = 0; + + BodyMod = 0; + Body = this.Race.AliveBody( this ); + + ProcessDeltaQueue(); + + for( int i = m_Items.Count - 1; i >= 0; --i ) + { + if( i >= m_Items.Count ) + continue; + + Item item = m_Items[i]; + + if( item.ItemID == 0x204E ) + item.Delete(); + } + + this.SendIncomingPacket(); + this.SendIncomingPacket(); + + OnAfterResurrect(); + + //Send( new DeathStatus( false ) ); + } + } + + private IAccount m_Account; + + [CommandProperty( AccessLevel.Counselor, AccessLevel.Owner )] + public IAccount Account + { + get + { + return m_Account; + } + set + { + m_Account = value; + } + } + + private bool m_Deleted; + + public bool Deleted + { + get + { + return m_Deleted; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int VirtualArmor + { + get + { + return m_VirtualArmor; + } + set + { + if( m_VirtualArmor != value ) + { + m_VirtualArmor = value; + + Delta( MobileDelta.Armor ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual double ArmorRating + { + get + { + return 0.0; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual double ArmorValue + { + get + { + return 0.0; + } + } + + public void DropHolding() + { + Item holding = m_Holding; + + if( holding != null ) + { + if ( !holding.Deleted && holding.HeldBy == this && holding.Map == Map.Internal ) + AddToBackpack( holding ); + + Holding = null; + holding.ClearBounce(); + } + } + + public virtual void Delete() + { + if( m_Deleted ) + return; + else if( !World.OnDelete( this ) ) + return; + + if( m_NetState != null ) + m_NetState.CancelAllTrades(); + + if( m_NetState != null ) + m_NetState.Dispose(); + + DropHolding(); + + Region.OnRegionChange( this, m_Region, null ); + + m_Region = null; + //Is the above line REALLY needed? The old Region system did NOT have said line + //and worked fine, because of this a LOT of extra checks have to be done everywhere... + //I guess this should be there for Garbage collection purposes, but, still, is it /really/ needed? + + OnDelete(); + + for( int i = m_Items.Count - 1; i >= 0; --i ) + if( i < m_Items.Count ) + m_Items[i].OnParentDeleted( this ); + + for( int i = 0; i < m_Stabled.Count; i++ ) + m_Stabled[i].Delete(); + + SendRemovePacket(); + + if( m_Guild != null ) + m_Guild.OnDelete( this ); + + m_Deleted = true; + + if( m_Map != null ) + { + m_Map.OnLeave( this ); + m_Map = null; + } + + m_Hair = null; + m_FacialHair = null; + m_MountItem = null; + + World.RemoveMobile( this ); + + OnAfterDelete(); + + FreeCache(); + } + + /// + /// Overridable. Virtual event invoked before the Mobile is deleted. + /// + public virtual void OnDelete() + { + if( m_Spawner != null ) + { + m_Spawner.Remove( this ); + m_Spawner = null; + } + } + + /// + /// Overridable. Returns true if the player is alive, false if otherwise. By default, this is computed by: !Deleted && (!Player || !Body.IsGhost) + /// + [CommandProperty( AccessLevel.Counselor )] + public virtual bool Alive + { + get + { + return !m_Deleted && (!m_Player || !m_Body.IsGhost); + } + } + + public virtual bool CheckSpellCast( ISpell spell ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile casts a . + /// + /// + public virtual void OnSpellCast( ISpell spell ) + { + } + + /// + /// Overridable. Virtual event invoked after changes. + /// + public virtual void OnWeightChange( int oldValue ) + { + } + + /// + /// Overridable. Virtual event invoked when the or property of changes. + /// + public virtual void OnSkillChange( SkillName skill, double oldBase ) + { + } + + /// + /// Overridable. Invoked after the mobile is deleted. When overriden, be sure to call the base method. + /// + public virtual void OnAfterDelete() + { + StopAggrExpire(); + + CheckAggrExpire(); + + if( m_PoisonTimer != null ) + m_PoisonTimer.Stop(); + + if( m_HitsTimer != null ) + m_HitsTimer.Stop(); + + if( m_StamTimer != null ) + m_StamTimer.Stop(); + + if( m_ManaTimer != null ) + m_ManaTimer.Stop(); + + if( m_CombatTimer != null ) + m_CombatTimer.Stop(); + + if( m_ExpireCombatant != null ) + m_ExpireCombatant.Stop(); + + if( m_LogoutTimer != null ) + m_LogoutTimer.Stop(); + + if( m_ExpireCriminal != null ) + m_ExpireCriminal.Stop(); + + if( m_WarmodeTimer != null ) + m_WarmodeTimer.Stop(); + + if( m_ParaTimer != null ) + m_ParaTimer.Stop(); + + if( m_FrozenTimer != null ) + m_FrozenTimer.Stop(); + + if( m_AutoManifestTimer != null ) + m_AutoManifestTimer.Stop(); + } + + public virtual bool AllowSkillUse( SkillName name ) + { + return true; + } + + public virtual bool UseSkill( SkillName name ) + { + return Skills.UseSkill( this, name ); + } + + public virtual bool UseSkill( int skillID ) + { + return Skills.UseSkill( this, skillID ); + } + + private static CreateCorpseHandler m_CreateCorpse; + + public static CreateCorpseHandler CreateCorpseHandler + { + get { return m_CreateCorpse; } + set { m_CreateCorpse = value; } + } + + public virtual DeathMoveResult GetParentMoveResultFor( Item item ) + { + return item.OnParentDeath( this ); + } + + public virtual DeathMoveResult GetInventoryMoveResultFor( Item item ) + { + return item.OnInventoryDeath( this ); + } + + public virtual bool RetainPackLocsOnDeath { get { return false; } } + + public virtual void Kill() + { + if( !CanBeDamaged() ) + return; + else if( !Alive || IsDeadBondedPet ) + return; + else if( m_Deleted ) + return; + else if( !Region.OnBeforeDeath( this ) ) + return; + else if( !OnBeforeDeath() ) + return; + + InnBox box = FindInnNoCreate(); + + if( box != null && box.Opened ) + box.Close(); + + if( m_NetState != null ) + m_NetState.CancelAllTrades(); + + if( m_Spell != null ) + m_Spell.OnCasterKilled(); + //m_Spell.Disturb( DisturbType.Kill ); + + if( m_Target != null ) + m_Target.Cancel( this, TargetCancelType.Canceled ); + + DisruptiveAction(); + + Warmode = false; + + DropHolding(); + + Hits = 0; + Stam = 0; + Mana = 0; + + Poison = null; + Combatant = null; + + if( Paralyzed ) + { + Paralyzed = false; + + if( m_ParaTimer != null ) + m_ParaTimer.Stop(); + } + + if( Frozen ) + { + Frozen = false; + + if( m_FrozenTimer != null ) + m_FrozenTimer.Stop(); + } + + List content = new List(); + List equip = new List(); + List moveToPack = new List(); + + List itemsCopy = new List( m_Items ); + + Container pack = this.Backpack; + + for( int i = 0; i < itemsCopy.Count; ++i ) + { + Item item = itemsCopy[i]; + + if( item == pack ) + continue; + + DeathMoveResult res = GetParentMoveResultFor( item ); + + switch( res ) + { + case DeathMoveResult.MoveToCorpse: + { + content.Add( item ); + equip.Add( item ); + break; + } + case DeathMoveResult.MoveToBackpack: + { + moveToPack.Add( item ); + break; + } + } + } + + if( pack != null ) + { + List packCopy = new List( pack.Items ); + + for( int i = 0; i < packCopy.Count; ++i ) + { + Item item = packCopy[i]; + + DeathMoveResult res = GetInventoryMoveResultFor( item ); + + if( res == DeathMoveResult.MoveToCorpse ) + content.Add( item ); + else + moveToPack.Add( item ); + } + + for( int i = 0; i < moveToPack.Count; ++i ) + { + Item item = moveToPack[i]; + + if( RetainPackLocsOnDeath && item.Parent == pack ) + continue; + + pack.DropItem( item ); + } + } + + HairInfo hair = null; + if( m_Hair != null ) + hair = new HairInfo( m_Hair.ItemID, m_Hair.Hue ); + + FacialHairInfo facialhair = null; + if( m_FacialHair != null ) + facialhair = new FacialHairInfo( m_FacialHair.ItemID, m_FacialHair.Hue ); + + Container c = (m_CreateCorpse == null ? null : m_CreateCorpse( this, hair, facialhair, content, equip )); + + + /*m_Corpse = c; + + for ( int i = 0; c != null && i < content.Count; ++i ) + c.DropItem( (Item)content[i] ); + + if ( c != null ) + c.MoveToWorld( this.Location, this.Map );*/ + + if( m_Map != null ) + { + Packet animPacket = null;//new DeathAnimation( this, c ); + Packet remPacket = null;//this.RemovePacket; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state != m_NetState ) + { + if( animPacket == null ) + animPacket = Packet.Acquire( new DeathAnimation( this, c ) ); + + state.Send( animPacket ); + + if( !state.Mobile.CanSee( this ) ) + { + if( remPacket == null ) + remPacket = this.RemovePacket; + + state.Send( remPacket ); + } + } + } + + Packet.Release( animPacket ); + + eable.Free(); + } + + Region.OnDeath( this ); + OnDeath( c ); + } + + private Container m_Corpse; + + [CommandProperty( AccessLevel.GameMaster )] + public Container Corpse + { + get + { + return m_Corpse; + } + set + { + m_Corpse = value; + } + } + + /// + /// Overridable. Event invoked before the Mobile is killed. + /// + /// + /// + /// True to continue with death, false to override it. + public virtual bool OnBeforeDeath() + { + return true; + } + + /// + /// Overridable. Event invoked after the Mobile is killed. Primarily, this method is responsible for deleting an NPC or turning a PC into a ghost. + /// + /// + /// + public virtual void OnDeath( Container c ) + { + int sound = this.GetDeathSound(); + + if( sound >= 0 ) + Effects.PlaySound( this, this.Map, sound ); + + if( !m_Player ) + { + Delete(); + } + else + { + Send( DeathStatus.Instantiate( true ) ); + + Warmode = false; + + BodyMod = 0; + //Body = this.Female ? 0x193 : 0x192; + Body = this.Race.GhostBody( this ); + + Item deathShroud = new Item( 0x204E ); + + deathShroud.Movable = false; + deathShroud.Layer = Layer.OuterTorso; + + AddItem( deathShroud ); + + m_Items.Remove( deathShroud ); + m_Items.Insert( 0, deathShroud ); + + Poison = null; + Combatant = null; + + Hits = 0; + Stam = 0; + Mana = 0; + + EventSink.InvokePlayerDeath( new PlayerDeathEventArgs( this ) ); + + ProcessDeltaQueue(); + + Send( DeathStatus.Instantiate( false ) ); + + CheckStatTimers(); + } + } + + #region Get*Sound + + public virtual int GetAngerSound() + { + if( m_BaseSoundID != 0 ) + return m_BaseSoundID; + + return -1; + } + + public virtual int GetIdleSound() + { + if( m_BaseSoundID != 0 ) + return m_BaseSoundID + 1; + + return -1; + } + + public virtual int GetAttackSound() + { + if( m_BaseSoundID != 0 ) + return m_BaseSoundID + 2; + + return -1; + } + + public virtual int GetHurtSound() + { + if( m_BaseSoundID != 0 ) + return m_BaseSoundID + 3; + + return -1; + } + + public virtual int GetDeathSound() + { + if( m_BaseSoundID != 0 ) + { + return m_BaseSoundID + 4; + } + else if( m_Body.IsHuman ) + { + return Utility.Random( m_Female ? 0x314 : 0x423, m_Female ? 4 : 5 ); + } + else + { + return -1; + } + } + + #endregion + + private static char[] m_GhostChars = new char[2] { 'o', 'O' }; + + public static char[] GhostChars { get { return m_GhostChars; } set { m_GhostChars = value; } } + + private static bool m_NoSpeechLOS; + + public static bool NoSpeechLOS { get { return m_NoSpeechLOS; } set { m_NoSpeechLOS = value; } } + + private static TimeSpan m_AutoManifestTimeout = TimeSpan.FromSeconds( 5.0 ); + + public static TimeSpan AutoManifestTimeout { get { return m_AutoManifestTimeout; } set { m_AutoManifestTimeout = value; } } + + private Timer m_AutoManifestTimer; + + private class AutoManifestTimer : Timer + { + private Mobile m_Mobile; + + public AutoManifestTimer( Mobile m, TimeSpan delay ) + : base( delay ) + { + m_Mobile = m; + } + + protected override void OnTick() + { + if( !m_Mobile.Alive ) + m_Mobile.Warmode = false; + } + } + + public virtual bool CheckTarget( Mobile from, Target targ, object targeted ) + { + return true; + } + + public virtual void Use( Item item ) + { + if( item == null || item.Deleted || this.Deleted ) + return; + + DisruptiveAction(); + + if( m_Spell != null && !m_Spell.OnCasterUsingObject( item ) ) + return; + + object root = item.RootParent; + bool okay = false; + + if( !Utility.InUpdateRange( this, item.GetWorldLocation() ) ) + item.OnDoubleClickOutOfRange( this ); + else if( !CanSee( item ) ) + item.OnDoubleClickCantSee( this ); + else if( !item.IsAccessibleTo( this ) ) + { + Region reg = Region.Find( item.GetWorldLocation(), item.Map ); + + if( reg == null || !reg.SendInaccessibleMessage( item, this ) ) + item.OnDoubleClickNotAccessible( this ); + } + else if( !CheckAlive( false ) ) + item.OnDoubleClickDead( this ); + else if( item.InSecureTrade ) + item.OnDoubleClickSecureTrade( this ); + else if( !AllowItemUse( item ) ) + okay = false; + else if( !item.CheckItemUse( this, item ) ) + okay = false; + else if( root != null && root is Mobile && ((Mobile)root).IsSnoop( this ) ) + item.OnSnoop( this ); + else if( this.Region.OnDoubleClick( this, item ) ) + okay = true; + + if( okay ) + { + if( !item.Deleted ) + item.OnItemUsed( this, item ); + + if( !item.Deleted ) + item.OnDoubleClick( this ); + } + } + + public virtual void Use( Mobile m ) + { + if( m == null || m.Deleted || this.Deleted ) + return; + + DisruptiveAction(); + + if( m_Spell != null && !m_Spell.OnCasterUsingObject( m ) ) + return; + + if( !Utility.InUpdateRange( this, m ) ) + m.OnDoubleClickOutOfRange( this ); + else if( !CanSee( m ) ) + m.OnDoubleClickCantSee( this ); + else if( !CheckAlive( false ) ) + m.OnDoubleClickDead( this ); + else if( this.Region.OnDoubleClick( this, m ) && !m.Deleted ) + m.OnDoubleClick( this ); + } + + public virtual void Lift( Item item, int amount, out bool rejected, out LRReason reject ) + { + rejected = true; + reject = LRReason.Inspecific; + + if( item == null ) + return; + + Mobile from = this; + NetState state = m_NetState; + + if( from.AccessLevel >= AccessLevel.GameMaster || DateTime.Now >= from.NextActionTime ) + { + if( from.CheckAlive() ) + { + from.DisruptiveAction(); + + if( from.Holding != null ) + { + reject = LRReason.AreHolding; + } + else if( from.AccessLevel < AccessLevel.GameMaster && !from.InRange( item.GetWorldLocation(), 2 ) ) + { + reject = LRReason.OutOfRange; + } + else if( !from.CanSee( item ) || !from.InLOS( item ) ) + { + reject = LRReason.OutOfSight; + } + else if( !item.VerifyMove( from ) ) + { + reject = LRReason.CannotLift; + } + else if( !item.IsAccessibleTo( from ) ) + { + reject = LRReason.CannotLift; + } + else if( !item.CheckLift( from, item, ref reject ) ) + { + } + else + { + object root = item.RootParent; + + if( root != null && root is Mobile && !((Mobile)root).CheckNonlocalLift( from, item ) ) + { + reject = LRReason.TryToSteal; + } + else if( !from.OnDragLift( item ) || !item.OnDragLift( from ) ) + { + reject = LRReason.Inspecific; + } + else if( !from.CheckAlive() ) + { + reject = LRReason.Inspecific; + } + else + { + item.SetLastMoved(); + + if( item.Spawner != null ) + { + item.Spawner.Remove( item ); + item.Spawner = null; + } + + if( amount == 0 ) + amount = 1; + + if( amount > item.Amount ) + amount = item.Amount; + + int oldAmount = item.Amount; + //item.Amount = amount; //Set in LiftItemDupe + + if( amount < oldAmount ) + LiftItemDupe( item, amount ); + //item.Dupe( oldAmount - amount ); + + Map map = from.Map; + + if( Mobile.DragEffects && map != null && (root == null || root is Item) ) + { + IPooledEnumerable eable = map.GetClientsInRange( from.Location ); + Packet p = null; + + foreach( NetState ns in eable ) + { + if( !ns.StygianAbyss && ns.Mobile != from && ns.Mobile.CanSee( from ) ) + { + if( p == null ) + { + IEntity src; + + if( root == null ) + src = new Entity( Serial.Zero, item.Location, map ); + else + src = new Entity( ((Item)root).Serial, ((Item)root).Location, map ); + + p = Packet.Acquire( new DragEffect( src, from, item.ItemID, item.Hue, amount ) ); + } + + ns.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + + Point3D fixLoc = item.Location; + Map fixMap = item.Map; + bool shouldFix = (item.Parent == null); + + item.RecordBounce(); + item.OnItemLifted( from, item ); + item.Internalize(); + + from.Holding = item; + + int liftSound = item.GetLiftSound( from ); + + if( liftSound != -1 ) + from.Send( new PlaySound( liftSound, from ) ); + + from.NextActionTime = DateTime.Now + TimeSpan.FromSeconds( 0.5 ); + + if( fixMap != null && shouldFix ) + fixMap.FixColumn( fixLoc.m_X, fixLoc.m_Y ); + + reject = LRReason.Inspecific; + rejected = false; + } + } + } + else + { + reject = LRReason.Inspecific; + } + } + else + { + SendActionMessage(); + reject = LRReason.Inspecific; + } + + if( rejected && state != null ) + { + state.Send( new LiftRej( reject ) ); + + if( item.Parent is Item ) { + if ( state.ContainerGridLines ) + state.Send( new ContainerContentUpdate6017( item ) ); + else + state.Send( new ContainerContentUpdate( item ) ); + } else if( item.Parent is Mobile ) + state.Send( new EquipUpdate( item ) ); + else + item.SendInfoTo( state ); + + if( ObjectPropertyList.Enabled && item.Parent != null ) + state.Send( item.OPLPacket ); + } + } + + public static Item LiftItemDupe( Item oldItem, int amount ) + { + Item item; + try + { + item = (Item)Activator.CreateInstance( oldItem.GetType() ); + } + catch + { + Console.WriteLine( "Warning: 0x{0:X}: Item must have a zero paramater constructor to be separated from a stack. '{1}'.", oldItem.Serial.Value, oldItem.GetType().Name ); + return null; + } + item.Visible = oldItem.Visible; + item.Movable = oldItem.Movable; + item.LootType = oldItem.LootType; + item.Direction = oldItem.Direction; + item.Hue = oldItem.Hue; + item.ItemID = oldItem.ItemID; + item.Location = oldItem.Location; + item.Layer = oldItem.Layer; + item.Name = oldItem.Name; + item.Weight = oldItem.Weight; + + item.Amount = oldItem.Amount - amount; + item.Map = oldItem.Map; + + oldItem.Amount = amount; + oldItem.OnAfterDuped( item ); + + if( oldItem.Parent is Mobile ) + { + ((Mobile)oldItem.Parent).AddItem( item ); + } + else if( oldItem.Parent is Item ) + { + ((Item)oldItem.Parent).AddItem( item ); + } + + item.Delta( ItemDelta.Update ); + + return item; + } + + public virtual void SendDropEffect( Item item ) + { + if( Mobile.DragEffects ) + { + Map map = m_Map; + object root = item.RootParent; + + if( map != null && (root == null || root is Item) ) + { + IPooledEnumerable eable = map.GetClientsInRange( m_Location ); + Packet p = null; + + foreach( NetState ns in eable ) + { + if( !ns.StygianAbyss && ns.Mobile != this && ns.Mobile.CanSee( this ) ) + { + if( p == null ) + { + IEntity trg; + + if( root == null ) + trg = new Entity( Serial.Zero, item.Location, map ); + else + trg = new Entity( ((Item)root).Serial, ((Item)root).Location, map ); + + p = Packet.Acquire( new DragEffect( this, trg, item.ItemID, item.Hue, item.Amount ) ); + } + + ns.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + } + + public virtual bool Drop( Item to, Point3D loc ) + { + Mobile from = this; + Item item = from.Holding; + + bool valid = ( item != null && item.HeldBy == from && item.Map == Map.Internal ); + + from.Holding = null; + + if ( !valid ) { + return false; + } + + bool bounced = true; + + item.SetLastMoved(); + + if( to == null || !item.DropToItem( from, to, loc ) ) + item.Bounce( from ); + else + bounced = false; + + item.ClearBounce(); + + if( !bounced ) + SendDropEffect( item ); + + return !bounced; + } + + public virtual bool Drop( Point3D loc ) + { + Mobile from = this; + Item item = from.Holding; + + bool valid = ( item != null && item.HeldBy == from && item.Map == Map.Internal ); + + from.Holding = null; + + if ( !valid ) { + return false; + } + + bool bounced = true; + + item.SetLastMoved(); + + if( !item.DropToWorld( from, loc ) ) + item.Bounce( from ); + else + bounced = false; + + item.ClearBounce(); + + if( !bounced ) + SendDropEffect( item ); + + return !bounced; + } + + public virtual bool Drop( Mobile to, Point3D loc ) + { + Mobile from = this; + Item item = from.Holding; + + bool valid = ( item != null && item.HeldBy == from && item.Map == Map.Internal ); + + from.Holding = null; + + if ( !valid ) { + return false; + } + + bool bounced = true; + + item.SetLastMoved(); + + if( to == null || !item.DropToMobile( from, to, loc ) ) + item.Bounce( from ); + else + bounced = false; + + item.ClearBounce(); + + if( !bounced ) + SendDropEffect( item ); + + return !bounced; + } + + private static object m_GhostMutateContext = new object(); + + public virtual bool MutateSpeech( List hears, ref string text, ref object context ) + { + if( Alive ) + return false; + + StringBuilder sb = new StringBuilder( text.Length, text.Length ); + + for( int i = 0; i < text.Length; ++i ) + { + if( text[i] != ' ' ) + sb.Append( m_GhostChars[Utility.Random( m_GhostChars.Length )] ); + else + sb.Append( ' ' ); + } + + text = sb.ToString(); + context = m_GhostMutateContext; + return true; + } + + public virtual void Manifest( TimeSpan delay ) + { + Warmode = true; + + if( m_AutoManifestTimer == null ) + m_AutoManifestTimer = new AutoManifestTimer( this, delay ); + else + m_AutoManifestTimer.Stop(); + + m_AutoManifestTimer.Start(); + } + + public virtual bool CheckSpeechManifest() + { + if( Alive ) + return false; + + TimeSpan delay = m_AutoManifestTimeout; + + if( delay > TimeSpan.Zero && (!Warmode || m_AutoManifestTimer != null) ) + { + Manifest( delay ); + return true; + } + + return false; + } + + public virtual bool CheckHearsMutatedSpeech( Mobile m, object context ) + { + if( context == m_GhostMutateContext ) + return (m.Alive && !m.CanHearGhosts); + + return true; + } + + private void AddSpeechItemsFrom( ArrayList list, Container cont ) + { + for( int i = 0; i < cont.Items.Count; ++i ) + { + Item item = cont.Items[i]; + + if( item.HandlesOnSpeech ) + list.Add( item ); + + if( item is Container ) + AddSpeechItemsFrom( list, (Container)item ); + } + } + + private class LocationComparer : IComparer + { + private static LocationComparer m_Instance; + + public static LocationComparer GetInstance( IPoint3D relativeTo ) + { + if( m_Instance == null ) + m_Instance = new LocationComparer( relativeTo ); + else + m_Instance.m_RelativeTo = relativeTo; + + return m_Instance; + } + + private IPoint3D m_RelativeTo; + + public IPoint3D RelativeTo + { + get { return m_RelativeTo; } + set { m_RelativeTo = value; } + } + + public LocationComparer( IPoint3D relativeTo ) + { + m_RelativeTo = relativeTo; + } + + private int GetDistance( IPoint3D p ) + { + int x = m_RelativeTo.X - p.X; + int y = m_RelativeTo.Y - p.Y; + int z = m_RelativeTo.Z - p.Z; + + x *= 11; + y *= 11; + + return (x * x) + (y * y) + (z * z); + } + + public int Compare( object x, object y ) + { + IPoint3D a = x as IPoint3D; + IPoint3D b = y as IPoint3D; + + return GetDistance( a ) - GetDistance( b ); + } + } + + #region Get*InRange + + public IPooledEnumerable GetItemsInRange( int range ) + { + Map map = m_Map; + + if( map == null ) + return Server.Map.NullEnumerable.Instance; + + return map.GetItemsInRange( m_Location, range ); + } + + public IPooledEnumerable GetObjectsInRange( int range ) + { + Map map = m_Map; + + if( map == null ) + return Server.Map.NullEnumerable.Instance; + + return map.GetObjectsInRange( m_Location, range ); + } + + public IPooledEnumerable GetMobilesInRange( int range ) + { + Map map = m_Map; + + if( map == null ) + return Server.Map.NullEnumerable.Instance; + + return map.GetMobilesInRange( m_Location, range ); + } + + public IPooledEnumerable GetClientsInRange( int range ) + { + Map map = m_Map; + + if( map == null ) + return Server.Map.NullEnumerable.Instance; + + return map.GetClientsInRange( m_Location, range ); + } + + #endregion + + private static List m_Hears; + private static ArrayList m_OnSpeech; + + public virtual void DoSpeech( string text, int[] keywords, MessageType type, int hue ) + { + if( m_Deleted || CommandSystem.Handle( this, text, type ) ) + return; + + int range = 15; + + switch( type ) + { + case MessageType.Regular: + m_SpeechHue = hue; + break; + case MessageType.Emote: + m_EmoteHue = hue; + break; + case MessageType.Whisper: + m_WhisperHue = hue; + range = 1; + break; + case MessageType.Yell: + m_YellHue = hue; + range = 18; + break; + default: + type = MessageType.Regular; + break; + } + + SpeechEventArgs regArgs = new SpeechEventArgs( this, text, type, hue, keywords ); + + EventSink.InvokeSpeech( regArgs ); + this.Region.OnSpeech( regArgs ); + OnSaid( regArgs ); + + if( regArgs.Blocked ) + return; + + text = regArgs.Speech; + + if( string.IsNullOrEmpty( text ) ) + return; + + if( m_Hears == null ) + m_Hears = new List(); + else if( m_Hears.Count > 0 ) + m_Hears.Clear(); + + if( m_OnSpeech == null ) + m_OnSpeech = new ArrayList(); + else if( m_OnSpeech.Count > 0 ) + m_OnSpeech.Clear(); + + List hears = m_Hears; + ArrayList onSpeech = m_OnSpeech; + + if( m_Map != null ) + { + IPooledEnumerable eable = m_Map.GetObjectsInRange( m_Location, range ); + + foreach( object o in eable ) + { + if( o is Mobile ) + { + Mobile heard = (Mobile)o; + + if( heard.CanSee( this ) && (m_NoSpeechLOS || !heard.Player || heard.InLOS( this )) ) + { + if( heard.m_NetState != null ) + hears.Add( heard ); + + if( heard.HandlesOnSpeech( this ) ) + onSpeech.Add( heard ); + + for( int i = 0; i < heard.Items.Count; ++i ) + { + Item item = heard.Items[i]; + + if( item.HandlesOnSpeech ) + onSpeech.Add( item ); + + if( item is Container ) + AddSpeechItemsFrom( onSpeech, (Container)item ); + } + } + } + else if( o is Item ) + { + if( ((Item)o).HandlesOnSpeech ) + onSpeech.Add( o ); + + if( o is Container ) + AddSpeechItemsFrom( onSpeech, (Container)o ); + } + } + + //eable.Free(); + + object mutateContext = null; + string mutatedText = text; + SpeechEventArgs mutatedArgs = null; + + if( MutateSpeech( hears, ref mutatedText, ref mutateContext ) ) + mutatedArgs = new SpeechEventArgs( this, mutatedText, type, hue, new int[0] ); + + CheckSpeechManifest(); + + ProcessDelta(); + + Packet regp = null; + Packet mutp = null; + + for( int i = 0; i < hears.Count; ++i ) + { + Mobile heard = hears[i]; + + if( mutatedArgs == null || !CheckHearsMutatedSpeech( heard, mutateContext ) ) + { + heard.OnSpeech( regArgs ); + + NetState ns = heard.NetState; + + if( ns != null ) + { + if( regp == null ) + regp = Packet.Acquire( new UnicodeMessage( m_Serial, Body, type, hue, 3, m_Language, Name, text ) ); + + ns.Send( regp ); + } + } + else + { + heard.OnSpeech( mutatedArgs ); + + NetState ns = heard.NetState; + + if( ns != null ) + { + if( mutp == null ) + mutp = Packet.Acquire( new UnicodeMessage( m_Serial, Body, type, hue, 3, m_Language, Name, mutatedText ) ); + + ns.Send( mutp ); + } + } + } + + Packet.Release( regp ); + Packet.Release( mutp ); + + if( onSpeech.Count > 1 ) + onSpeech.Sort( LocationComparer.GetInstance( this ) ); + + for( int i = 0; i < onSpeech.Count; ++i ) + { + object obj = onSpeech[i]; + + if( obj is Mobile ) + { + Mobile heard = (Mobile)obj; + + if( mutatedArgs == null || !CheckHearsMutatedSpeech( heard, mutateContext ) ) + heard.OnSpeech( regArgs ); + else + heard.OnSpeech( mutatedArgs ); + } + else + { + Item item = (Item)obj; + + item.OnSpeech( regArgs ); + } + } + } + } + + private static VisibleDamageType m_VisibleDamageType; + + public static VisibleDamageType VisibleDamageType + { + get { return m_VisibleDamageType; } + set { m_VisibleDamageType = value; } + } + + private List m_DamageEntries; + + public List DamageEntries + { + get { return m_DamageEntries; } + } + + public static Mobile GetDamagerFrom( DamageEntry de ) + { + return (de == null ? null : de.Damager); + } + + public Mobile FindMostRecentDamager( bool allowSelf ) + { + return GetDamagerFrom( FindMostRecentDamageEntry( allowSelf ) ); + } + + public DamageEntry FindMostRecentDamageEntry( bool allowSelf ) + { + for( int i = m_DamageEntries.Count - 1; i >= 0; --i ) + { + if( i >= m_DamageEntries.Count ) + continue; + + DamageEntry de = m_DamageEntries[i]; + + if( de.HasExpired ) + m_DamageEntries.RemoveAt( i ); + else if( allowSelf || de.Damager != this ) + return de; + } + + return null; + } + + public Mobile FindLeastRecentDamager( bool allowSelf ) + { + return GetDamagerFrom( FindLeastRecentDamageEntry( allowSelf ) ); + } + + public DamageEntry FindLeastRecentDamageEntry( bool allowSelf ) + { + for( int i = 0; i < m_DamageEntries.Count; ++i ) + { + if( i < 0 ) + continue; + + DamageEntry de = m_DamageEntries[i]; + + if( de.HasExpired ) + { + m_DamageEntries.RemoveAt( i ); + --i; + } + else if( allowSelf || de.Damager != this ) + { + return de; + } + } + + return null; + } + + public Mobile FindMostTotalDamger( bool allowSelf ) + { + return GetDamagerFrom( FindMostTotalDamageEntry( allowSelf ) ); + } + + public DamageEntry FindMostTotalDamageEntry( bool allowSelf ) + { + DamageEntry mostTotal = null; + + for( int i = m_DamageEntries.Count - 1; i >= 0; --i ) + { + if( i >= m_DamageEntries.Count ) + continue; + + DamageEntry de = m_DamageEntries[i]; + + if( de.HasExpired ) + m_DamageEntries.RemoveAt( i ); + else if( (allowSelf || de.Damager != this) && (mostTotal == null || de.DamageGiven > mostTotal.DamageGiven) ) + mostTotal = de; + } + + return mostTotal; + } + + public Mobile FindLeastTotalDamger( bool allowSelf ) + { + return GetDamagerFrom( FindLeastTotalDamageEntry( allowSelf ) ); + } + + public DamageEntry FindLeastTotalDamageEntry( bool allowSelf ) + { + DamageEntry mostTotal = null; + + for( int i = m_DamageEntries.Count - 1; i >= 0; --i ) + { + if( i >= m_DamageEntries.Count ) + continue; + + DamageEntry de = m_DamageEntries[i]; + + if( de.HasExpired ) + m_DamageEntries.RemoveAt( i ); + else if( (allowSelf || de.Damager != this) && (mostTotal == null || de.DamageGiven < mostTotal.DamageGiven) ) + mostTotal = de; + } + + return mostTotal; + } + + public DamageEntry FindDamageEntryFor( Mobile m ) + { + for( int i = m_DamageEntries.Count - 1; i >= 0; --i ) + { + if( i >= m_DamageEntries.Count ) + continue; + + DamageEntry de = m_DamageEntries[i]; + + if( de.HasExpired ) + m_DamageEntries.RemoveAt( i ); + else if( de.Damager == m ) + return de; + } + + return null; + } + + public virtual Mobile GetDamageMaster( Mobile damagee ) + { + return null; + } + + public virtual DamageEntry RegisterDamage( int amount, Mobile from ) + { + DamageEntry de = FindDamageEntryFor( from ); + + if( de == null ) + de = new DamageEntry( from ); + + de.DamageGiven += amount; + de.LastDamage = DateTime.Now; + + m_DamageEntries.Remove( de ); + m_DamageEntries.Add( de ); + + Mobile master = from.GetDamageMaster( this ); + + if( master != null ) + { + List list = de.Responsible; + + if( list == null ) + de.Responsible = list = new List(); + + DamageEntry resp = null; + + for( int i = 0; i < list.Count; ++i ) + { + DamageEntry check = list[i]; + + if( check.Damager == master ) + { + resp = check; + break; + } + } + + if( resp == null ) + list.Add( resp = new DamageEntry( master ) ); + + resp.DamageGiven += amount; + resp.LastDamage = DateTime.Now; + } + + return de; + } + + private Mobile m_LastKiller; + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile LastKiller + { + get { return m_LastKiller; } + set { m_LastKiller = value; } + } + + /// + /// Overridable. Virtual event invoked when the Mobile is damaged. It is called before hit points are lowered or the Mobile is killed. + /// + /// + /// + /// + public virtual void OnDamage( int amount, Mobile from, bool willKill ) + { + } + + public virtual void Damage( int amount ) + { + Damage( amount, null ); + } + + public virtual bool CanBeDamaged() + { + if ( m_Invulnerable || m_Blessed ) + return false; + + return true; + } + + public virtual void Damage( int amount, Mobile from ) + { + Damage( amount, from, true ); + } + + public virtual void Damage( int amount, Mobile from, bool informMount ) + { + if( !CanBeDamaged() || m_Deleted ) + return; + + if( !this.Region.OnDamage( this, ref amount ) ) + return; + + if( amount > 0 ) + { + int oldHits = Hits; + int newHits = oldHits - amount; + + if( m_Spell != null ) + m_Spell.OnCasterHurt(); + + //if ( m_Spell != null && m_Spell.State == SpellState.Casting ) + // m_Spell.Disturb( DisturbType.Hurt, false, true ); + + if( from != null ) + RegisterDamage( amount, from ); + + DisruptiveAction(); + + Paralyzed = false; + + switch( m_VisibleDamageType ) + { + case VisibleDamageType.Related: + { + NetState ourState = m_NetState, theirState = (from == null ? null : from.m_NetState); + + if( ourState == null ) + { + Mobile master = GetDamageMaster( from ); + + if( master != null ) + ourState = master.m_NetState; + } + + if( theirState == null && from != null ) + { + Mobile master = from.GetDamageMaster( this ); + + if( master != null ) + theirState = master.m_NetState; + } + + if( amount > 0 && (ourState != null || theirState != null) ) + { + Packet p = null;// = new DamagePacket( this, amount ); + + if( ourState != null ) + { + if( ourState.DamagePacket ) + p = Packet.Acquire( new DamagePacket( this, amount ) ); + else + p = Packet.Acquire( new DamagePacketOld( this, amount ) ); + + ourState.Send( p ); + } + + if( theirState != null && theirState != ourState ) + { + bool newPacket = theirState.DamagePacket; + + if( newPacket && (p == null || !(p is DamagePacket)) ) + { + Packet.Release( p ); + p = Packet.Acquire( new DamagePacket( this, amount ) ); + } + else if( !newPacket && (p == null || !(p is DamagePacketOld)) ) + { + Packet.Release( p ); + p = Packet.Acquire( new DamagePacketOld( this, amount ) ); + } + + theirState.Send( p ); + } + + Packet.Release( p ); + } + + break; + } + case VisibleDamageType.Everyone: + { + SendDamageToAll( amount ); + break; + } + } + + OnDamage( amount, from, newHits < 0 ); + + IMount m = this.Mount; + if( m != null && informMount ) + m.OnRiderDamaged( amount, from, newHits < 0 ); + + if( newHits < 0 ) + { + m_LastKiller = from; + + Hits = 0; + + if( oldHits >= 0 ) + Kill(); + } + else + { + Hits = newHits; + } + } + } + + public virtual void SendDamageToAll( int amount ) + { + if( amount < 0 ) + return; + + Map map = m_Map; + + if( map == null ) + return; + + IPooledEnumerable eable = map.GetClientsInRange( m_Location ); + + Packet pNew = null; + Packet pOld = null; + + foreach( NetState ns in eable ) + { + if( ns.Mobile.CanSee( this ) ) + { + Packet p; + + if( ns.DamagePacket ) + { + if( pNew == null ) + pNew = Packet.Acquire( new DamagePacket( this, amount ) ); + + p = pNew; + } + else + { + if( pOld == null ) + pOld = Packet.Acquire( new DamagePacketOld( this, amount ) ); + + p = pOld; + } + + ns.Send( p ); + } + } + + Packet.Release( pNew ); + Packet.Release( pOld ); + + eable.Free(); + } + + public void Heal( int amount ) + { + Heal( amount, this, true ); + } + + public void Heal( int amount, Mobile from ) + { + Heal( amount, from, true ); + } + + public void Heal( int amount, Mobile from, bool message ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + + if( !Alive || IsDeadBondedPet ) + return; + + if( !Region.OnHeal( this, ref amount ) ) + return; + + OnHeal( ref amount, from ); + + if( (Hits + amount) > HitsMax ) + { + amount = HitsMax - Hits; + } + + Hits += amount; + + if( message && amount > 0 && m_NetState != null ) + m_NetState.Send( new MessageLocalizedAffix( Serial.MinusOne, -1, MessageType.Label, hue, 3, 1008158, "", AffixType.Append | AffixType.System, amount.ToString(), "" ) ); + } + + public virtual void OnHeal( ref int amount, Mobile from ) + { + } + + public void UsedStuckMenu() + { + if( m_StuckMenuUses == null ) + { + m_StuckMenuUses = new DateTime[2]; + } + + for( int i = 0; i < m_StuckMenuUses.Length; ++i ) + { + if( (DateTime.Now - m_StuckMenuUses[i]) > TimeSpan.FromDays( 1.0 ) ) + { + m_StuckMenuUses[i] = DateTime.Now; + return; + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Squelched + { + get + { + return m_Squelched; + } + set + { + m_Squelched = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Invulnerable + { + get + { + return m_Invulnerable; + } + set + { + m_Invulnerable = value; + } + } + + public virtual void Deserialize( GenericReader reader ) + { + int version = reader.ReadInt(); + + switch( version ) + { + case 31: + { + RecordHair = reader.ReadInt(); + RecordBeard = reader.ReadInt(); + ColoredMsgs = reader.ReadBool(); + AnimationMod = reader.ReadInt(); + m_LastStrGain = reader.ReadDeltaTime(); + m_LastIntGain = reader.ReadDeltaTime(); + m_LastDexGain = reader.ReadDeltaTime(); + + goto case 30; + } + case 30: + { + byte hairflag = reader.ReadByte(); + + if( (hairflag & 0x01) != 0 ) + m_Hair = new HairInfo( reader ); + if( (hairflag & 0x02) != 0 ) + m_FacialHair = new FacialHairInfo( reader ); + + goto case 29; + } + case 29: + { + m_Race = reader.ReadRace(); + goto case 28; + } + case 28: + { + if( version <= 30 ) + LastStatGain = reader.ReadDeltaTime(); + + goto case 27; + } + case 27: + { + goto case 26; + } + case 26: + case 25: + case 24: + { + m_Corpse = reader.ReadItem() as Container; + + goto case 23; + } + case 23: + { + m_CreationTime = reader.ReadDateTime(); + + goto case 22; + } + case 22: // Just removed followers + case 21: + { + m_Stabled = reader.ReadStrongMobileList(); + + goto case 20; + } + case 20: + { + m_CantWalk = reader.ReadBool(); + m_WillSwim = reader.ReadBool(); + m_WontWalk = reader.ReadBool(); + + goto case 19; + } + case 19: // Just removed variables + case 18: + { + goto case 17; + } + case 17: + { + m_Thirst = reader.ReadInt(); + m_BAC = reader.ReadInt(); + + goto case 16; + } + case 16: + { + goto case 15; + } + case 15: + { + if( version < 22 ) + reader.ReadInt(); // followers + + m_FollowersMax = reader.ReadInt(); + + goto case 14; + } + case 14: + { + m_MagicDamageAbsorb = reader.ReadInt(); + + goto case 13; + } + case 13: + { + m_GuildFealty = reader.ReadMobile(); + + goto case 12; + } + case 12: + { + m_Guild = reader.ReadGuild(); + + goto case 11; + } + case 11: + { + m_DisplayGuildTitle = reader.ReadBool(); + + goto case 10; + } + case 10: + { + m_CanSwim = reader.ReadBool(); + + goto case 9; + } + case 9: + { + m_Squelched = reader.ReadBool(); + m_Invulnerable = reader.ReadBool(); + + goto case 8; + } + case 8: + { + m_Holding = reader.ReadItem(); + + goto case 7; + } + case 7: + { + m_VirtualArmor = reader.ReadInt(); + + goto case 6; + } + case 6: + { + m_BaseSoundID = reader.ReadInt(); + + goto case 5; + } + case 5: + { + m_DisarmReady = reader.ReadBool(); + m_StunReady = reader.ReadBool(); + + goto case 4; + } + case 4: + { + if( version <= 25 ) + { + Poison.Deserialize( reader ); + } + + goto case 3; + } + case 3: + { + m_StatCap = reader.ReadInt(); + + goto case 2; + } + case 2: + { + m_NameHue = reader.ReadInt(); + + goto case 1; + } + case 1: + { + m_Hunger = reader.ReadInt(); + + goto case 0; + } + case 0: + { + if( version < 21 ) + m_Stabled = new List(); + + if( version < 11 ) + m_DisplayGuildTitle = true; + + if( version < 3 ) + m_StatCap = 225; + + if( version < 15 ) + { + m_Followers = 0; + m_FollowersMax = 5; + } + + m_Location = reader.ReadPoint3D(); + m_Body = new Body( reader.ReadInt() ); + m_Name = reader.ReadString(); + m_GuildTitle = reader.ReadString(); + m_Criminal = reader.ReadBool(); + m_Kills = reader.ReadInt(); + m_SpeechHue = reader.ReadInt(); + m_EmoteHue = reader.ReadInt(); + m_WhisperHue = reader.ReadInt(); + m_YellHue = reader.ReadInt(); + m_Language = reader.ReadString(); + m_Female = reader.ReadBool(); + m_Warmode = reader.ReadBool(); + m_Hidden = reader.ReadBool(); + m_Direction = (Direction)reader.ReadByte(); + m_Hue = reader.ReadInt(); + m_Str = reader.ReadInt(); + m_Dex = reader.ReadInt(); + m_Int = reader.ReadInt(); + m_Hits = reader.ReadInt(); + m_Stam = reader.ReadInt(); + m_Mana = reader.ReadInt(); + m_Map = reader.ReadMap(); + m_Blessed = reader.ReadBool(); + m_Fame = reader.ReadInt(); + m_Karma = reader.ReadInt(); + m_AccessLevel = (AccessLevel)reader.ReadByte(); + + m_Skills = new Skills( this, reader ); + + m_Items = reader.ReadStrongItemList(); + + m_Player = reader.ReadBool(); + m_Title = reader.ReadString(); + m_HiddenTitle = reader.ReadString(); + m_Profile = reader.ReadString(); + m_ProfileLocked = reader.ReadBool(); + + if( version <= 18 ) + { + reader.ReadInt(); + reader.ReadInt(); + reader.ReadInt(); + } + + m_AutoPageNotify = reader.ReadBool(); + + m_LogoutLocation = reader.ReadPoint3D(); + m_LogoutMap = reader.ReadMap(); + + m_StrLock = (StatLockType)reader.ReadByte(); + m_DexLock = (StatLockType)reader.ReadByte(); + m_IntLock = (StatLockType)reader.ReadByte(); + + m_StatMods = new List(); + m_SkillMods = new List(); + + if( reader.ReadBool() ) + { + m_StuckMenuUses = new DateTime[reader.ReadInt()]; + + for( int i = 0; i < m_StuckMenuUses.Length; ++i ) + { + m_StuckMenuUses[i] = reader.ReadDateTime(); + } + } + else + { + m_StuckMenuUses = null; + } + + if( m_Player && m_Map != Map.Internal ) + { + m_LogoutLocation = m_Location; + m_LogoutMap = m_Map; + + m_Map = Map.Internal; + } + + if( m_Map != null ) + m_Map.OnEnter( this ); + + if( m_Criminal ) + { + if( m_ExpireCriminal == null ) + m_ExpireCriminal = new ExpireCriminalTimer( this ); + + m_ExpireCriminal.Start(); + } + + if( ShouldCheckStatTimers ) + CheckStatTimers(); + + if( !m_Player && m_Dex <= 100 && m_CombatTimer != null ) + m_CombatTimer.Priority = TimerPriority.FiftyMS; + else if( m_CombatTimer != null ) + m_CombatTimer.Priority = TimerPriority.EveryTick; + + UpdateRegion(); + + break; + } + } + + if( !m_Player ) + Utility.Intern( ref m_Name ); + + Utility.Intern( ref m_Title ); + Utility.Intern( ref m_HiddenTitle ); + Utility.Intern( ref m_Language ); + } + + public void ConvertHair() + { + Item hair; + + if( (hair = FindItemOnLayer( Layer.Hair )) != null ) + { + HairItemID = hair.ItemID; + HairHue = hair.Hue; + hair.Delete(); + } + + if( (hair = FindItemOnLayer( Layer.FacialHair )) != null ) + { + FacialHairItemID = hair.ItemID; + FacialHairHue = hair.Hue; + hair.Delete(); + } + } + + public virtual bool ShouldCheckStatTimers { get { return true; } } + + public virtual void CheckStatTimers() + { + if( m_Deleted ) + return; + + if( Hits < HitsMax ) + { + if( CanRegenHits ) + { + if( m_HitsTimer == null ) + m_HitsTimer = new HitsTimer( this ); + + m_HitsTimer.Start(); + } + else if( m_HitsTimer != null ) + { + m_HitsTimer.Stop(); + } + } + else + { + Hits = HitsMax; + } + + if( Stam < StamMax ) + { + if( CanRegenStam ) + { + if( m_StamTimer == null ) + m_StamTimer = new StamTimer( this ); + + m_StamTimer.Start(); + } + else if( m_StamTimer != null ) + { + m_StamTimer.Stop(); + } + } + else + { + Stam = StamMax; + } + + if( Mana < ManaMax ) + { + if( CanRegenMana ) + { + if( m_ManaTimer == null ) + m_ManaTimer = new ManaTimer( this ); + + m_ManaTimer.Start(); + } + else if( m_ManaTimer != null ) + { + m_ManaTimer.Stop(); + } + } + else + { + Mana = ManaMax; + } + } + + private DateTime m_CreationTime; + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime CreationTime + { + get + { + return m_CreationTime; + } + } + + int ISerializable.TypeReference + { + get { return m_TypeRef; } + } + + int ISerializable.SerialIdentity + { + get { return m_Serial; } + } + + public virtual void Serialize( GenericWriter writer ) + { + writer.Write( (int)31 ); // version + + writer.Write( RecordHair ); + writer.Write( RecordBeard ); + writer.Write( ColoredMsgs ); + writer.Write( AnimationMod ); + writer.WriteDeltaTime( m_LastStrGain ); + writer.WriteDeltaTime( m_LastIntGain ); + writer.WriteDeltaTime( m_LastDexGain ); + + byte hairflag = 0x00; + + if( m_Hair != null ) + hairflag |= 0x01; + if( m_FacialHair != null ) + hairflag |= 0x02; + + writer.Write( (byte)hairflag ); + + if( (hairflag & 0x01) != 0 ) + m_Hair.Serialize( writer ); + if( (hairflag & 0x02) != 0 ) + m_FacialHair.Serialize( writer ); + + writer.Write( this.Race ); + + writer.Write( m_Corpse ); + + writer.Write( m_CreationTime ); + + writer.Write( m_Stabled, true ); + + writer.Write( m_CantWalk ); + writer.Write( m_WillSwim ); + writer.Write( m_WontWalk ); + + writer.Write( m_Thirst ); + writer.Write( m_BAC ); + + writer.Write( m_FollowersMax ); + + writer.Write( m_MagicDamageAbsorb ); + + writer.Write( m_GuildFealty ); + + writer.Write( m_Guild ); + + writer.Write( m_DisplayGuildTitle ); + + writer.Write( m_CanSwim ); + + writer.Write( m_Squelched ); + + writer.Write( m_Invulnerable ); + + writer.Write( m_Holding ); + + writer.Write( m_VirtualArmor ); + + writer.Write( m_BaseSoundID ); + + writer.Write( m_DisarmReady ); + writer.Write( m_StunReady ); + + //Poison.Serialize( m_Poison, writer ); + + writer.Write( m_StatCap ); + + writer.Write( m_NameHue ); + + writer.Write( m_Hunger ); + + writer.Write( m_Location ); + writer.Write( (int)m_Body ); + writer.Write( m_Name ); + writer.Write( m_GuildTitle ); + writer.Write( m_Criminal ); + writer.Write( m_Kills ); + writer.Write( m_SpeechHue ); + writer.Write( m_EmoteHue ); + writer.Write( m_WhisperHue ); + writer.Write( m_YellHue ); + writer.Write( m_Language ); + writer.Write( m_Female ); + writer.Write( m_Warmode ); + writer.Write( m_Hidden ); + writer.Write( (byte)m_Direction ); + writer.Write( m_Hue ); + writer.Write( m_Str ); + writer.Write( m_Dex ); + writer.Write( m_Int ); + writer.Write( m_Hits ); + writer.Write( m_Stam ); + writer.Write( m_Mana ); + + writer.Write( m_Map ); + + writer.Write( m_Blessed ); + writer.Write( m_Fame ); + writer.Write( m_Karma ); + writer.Write( (byte)m_AccessLevel ); + m_Skills.Serialize( writer ); + + writer.Write( m_Items ); + + writer.Write( m_Player ); + writer.Write( m_Title ); + writer.Write( m_HiddenTitle ); + writer.Write( m_Profile ); + writer.Write( m_ProfileLocked ); + writer.Write( m_AutoPageNotify ); + + writer.Write( m_LogoutLocation ); + writer.Write( m_LogoutMap ); + + writer.Write( (byte)m_StrLock ); + writer.Write( (byte)m_DexLock ); + writer.Write( (byte)m_IntLock ); + + if( m_StuckMenuUses != null ) + { + writer.Write( true ); + + writer.Write( m_StuckMenuUses.Length ); + + for( int i = 0; i < m_StuckMenuUses.Length; ++i ) + { + writer.Write( m_StuckMenuUses[i] ); + } + } + else + { + writer.Write( false ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int LightLevel + { + get + { + return m_LightLevel; + } + set + { + if( m_LightLevel != value ) + { + m_LightLevel = value; + + CheckLightLevels( false ); + + /*if ( m_NetState != null ) + m_NetState.Send( new PersonalLightLevel( this ) );*/ + } + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public string Profile + { + get + { + return m_Profile; + } + set + { + m_Profile = value; + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public bool ProfileLocked + { + get + { + return m_ProfileLocked; + } + set + { + m_ProfileLocked = value; + } + } + + [CommandProperty( AccessLevel.GameMaster, AccessLevel.Administrator )] + public bool Player + { + get + { + return m_Player; + } + set + { + m_Player = value; + InvalidateProperties(); + + if( !m_Player && m_Dex <= 100 && m_CombatTimer != null ) + m_CombatTimer.Priority = TimerPriority.FiftyMS; + else if( m_CombatTimer != null ) + m_CombatTimer.Priority = TimerPriority.EveryTick; + + CheckStatTimers(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Title + { + get + { + return m_Title; + } + set + { + m_Title = value; + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string HiddenTitle + { + get + { + return m_HiddenTitle; + } + set + { + m_HiddenTitle = value; + InvalidateProperties(); + } + } + + private static string[] m_AccessLevelNames = new string[] + { + "a player", + "a counselor", + "a game master", + "a seer", + "an administrator", + "a developer", + "an owner" + }; + + public static string GetAccessLevelName( AccessLevel level ) + { + return m_AccessLevelNames[(int)level]; + } + + public virtual bool CanPaperdollBeOpenedBy( Mobile from ) + { + return (Body.IsHuman || Body.IsGhost || IsBodyMod); + } + + public virtual void GetChildContextMenuEntries( Mobile from, List list, Item item ) + { + } + + public virtual void GetContextMenuEntries( Mobile from, List list ) + { + if( m_Deleted ) + return; + + if( CanPaperdollBeOpenedBy( from ) ) + list.Add( new PaperdollEntry( this ) ); + + if( from == this && Backpack != null && CanSee( Backpack ) && CheckAlive( false ) ) + list.Add( new OpenBackpackEntry( this ) ); + } + + public void Internalize() + { + Map = Map.Internal; + } + + public List Items + { + get + { + return m_Items; + } + } + + /// + /// Overridable. Virtual event invoked when is added from the Mobile, such as when it is equiped. + /// + /// + /// + public virtual void OnItemAdded( Item item ) + { + } + + /// + /// Overridable. Virtual event invoked when is removed from the Mobile. + /// + /// + /// + public virtual void OnItemRemoved( Item item ) + { + } + + /// + /// Overridable. Virtual event invoked when is becomes a child of the Mobile; it's worn or contained at some level of the Mobile's backpack or inn box + /// + /// + /// + public virtual void OnSubItemAdded( Item item ) + { + } + + /// + /// Overridable. Virtual event invoked when is removed from the Mobile, its backpack, or its inn box. + /// + /// + /// + public virtual void OnSubItemRemoved( Item item ) + { + } + + public virtual void OnItemBounceCleared( Item item ) + { + } + + public virtual void OnSubItemBounceCleared( Item item ) + { + } + + public virtual int MaxWeight { get { return int.MaxValue; } } + + public void AddItem( Item item ) + { + if( item == null || item.Deleted ) + return; + + if( item.Parent == this ) + return; + else if( item.Parent is Mobile ) + ((Mobile)item.Parent).RemoveItem( item ); + else if( item.Parent is Item ) + ((Item)item.Parent).RemoveItem( item ); + else + item.SendRemovePacket(); + + item.Parent = this; + item.Map = m_Map; + + m_Items.Add( item ); + + if( !item.IsVirtualItem ) + { + UpdateTotal( item, TotalType.Gold, item.TotalGold ); + UpdateTotal( item, TotalType.Items, item.TotalItems + 1 ); + UpdateTotal( item, TotalType.Weight, item.TotalWeight + item.PileWeight ); + } + + item.Delta( ItemDelta.Update ); + + item.OnAdded( this ); + OnItemAdded( item ); + + ProcessClothing(); + ProcessHair(); + } + + private static IWeapon m_DefaultWeapon; + + public static IWeapon DefaultWeapon + { + get + { + return m_DefaultWeapon; + } + set + { + m_DefaultWeapon = value; + } + } + + public void RemoveItem( Item item ) + { + if( item == null || m_Items == null ) + return; + + if( m_Items.Contains( item ) ) + { + item.SendRemovePacket(); + + //int oldCount = m_Items.Count; + + m_Items.Remove( item ); + + if( !item.IsVirtualItem ) + { + UpdateTotal( item, TotalType.Gold, -item.TotalGold ); + UpdateTotal( item, TotalType.Items, -(item.TotalItems + 1) ); + UpdateTotal( item, TotalType.Weight, -(item.TotalWeight + item.PileWeight) ); + } + + item.Parent = null; + + item.OnRemoved( this ); + OnItemRemoved( item ); + + ProcessClothing(); + ProcessHair(); + } + } + + public static void HideItem( Item item ) + { + if ( item != null && !Item.isModded(item) ){ Item.doMod( item ); } + } + + public static void ShowItem( Item item ) + { + if ( item != null && Item.isModded(item) ){ Item.undoMod( item ); } + } + + public void HideHair( bool beardToo ) + { + RecordsHair( false ); + HairItemID = RecordHair; + if ( beardToo ) + FacialHairItemID = RecordBeard; + } + + public void RecordFeatures( bool again ) + { + RecordsHair( again ); + } + + public void ShowHair() + { + RecordsHair( false ); + if ( HairItemID >= 80000 ){ HairItemID = RecordHair - 80000; } + if ( FacialHairItemID >= 80000 ){ FacialHairItemID = RecordBeard - 80000; } + } + + public void RecordsHair( bool again ) + { + if ( again ) + { + if ( HairItemID < 80000 ){ RecordHair = HairItemID + 80000; } + if ( FacialHairItemID < 80000 ){ RecordBeard = FacialHairItemID + 80000; } + ProcessHair(); + } + else + { + if ( HairItemID > 0 && HairItemID < 80000 && RecordHair < 80000 ){ RecordHair = HairItemID + 80000; } + if ( FacialHairItemID > 0 && FacialHairItemID < 80000 && RecordBeard < 80000 ){ RecordBeard = FacialHairItemID + 80000; } + } + } + + public void ProcessClothing() + { + ShowItem( FindItemOnLayer( Layer.MiddleTorso ) ); + ShowItem( FindItemOnLayer( Layer.InnerLegs ) ); + ShowItem( FindItemOnLayer( Layer.InnerTorso ) ); + ShowItem( FindItemOnLayer( Layer.OuterLegs ) ); + ShowItem( FindItemOnLayer( Layer.Pants ) ); + ShowItem( FindItemOnLayer( Layer.Shirt ) ); + ShowItem( FindItemOnLayer( Layer.Shoes ) ); + ShowItem( FindItemOnLayer( Layer.Arms ) ); + + bool armored = false; + bool robed = false; + + if ( FindItemOnLayer( Layer.OuterTorso ) != null && Item.isRobe(FindItemOnLayer( Layer.OuterTorso )) ) + { + HideItem( FindItemOnLayer( Layer.MiddleTorso ) ); + HideItem( FindItemOnLayer( Layer.InnerLegs ) ); + HideItem( FindItemOnLayer( Layer.InnerTorso ) ); + HideItem( FindItemOnLayer( Layer.OuterLegs ) ); + HideItem( FindItemOnLayer( Layer.Shirt ) ); + if ( FindItemOnLayer( Layer.Pants ) != null && !Item.isFullLegs(FindItemOnLayer( Layer.Pants )) ){ HideItem( FindItemOnLayer( Layer.Pants ) ); } + HideItem( FindItemOnLayer( Layer.Waist ) ); + robed = true; + } + + if ( !robed ) + { + if ( FindItemOnLayer( Layer.MiddleTorso ) != null && Item.isArmor(FindItemOnLayer( Layer.MiddleTorso )) ) + { + HideItem( FindItemOnLayer( Layer.InnerTorso ) ); + HideItem( FindItemOnLayer( Layer.Shirt ) ); + armored = true; + } + else if ( FindItemOnLayer( Layer.Shirt ) != null && Item.isArmor(FindItemOnLayer( Layer.Shirt )) ) + { + HideItem( FindItemOnLayer( Layer.MiddleTorso ) ); + HideItem( FindItemOnLayer( Layer.InnerTorso ) ); + armored = true; + } + else if ( FindItemOnLayer( Layer.InnerTorso ) != null && Item.isArmor(FindItemOnLayer( Layer.InnerTorso )) ) + { + HideItem( FindItemOnLayer( Layer.MiddleTorso ) ); + HideItem( FindItemOnLayer( Layer.Shirt ) ); + armored = true; + } + } + + if ( FindItemOnLayer( Layer.InnerLegs ) != null && Item.isFullLegs(FindItemOnLayer( Layer.InnerLegs )) ) + { + HideItem( FindItemOnLayer( Layer.Shoes ) ); + } + else if ( FindItemOnLayer( Layer.OuterLegs ) != null && Item.isFullLegs(FindItemOnLayer( Layer.OuterLegs )) ) + { + HideItem( FindItemOnLayer( Layer.Shoes ) ); + } + else if ( FindItemOnLayer( Layer.Pants ) != null && Item.isFullLegs(FindItemOnLayer( Layer.Pants )) ) + { + HideItem( FindItemOnLayer( Layer.Shoes ) ); + } + + if ( !armored && !robed ) + { + if ( FindItemOnLayer( Layer.OuterTorso ) == null && FindItemOnLayer( Layer.MiddleTorso ) != null && Item.isCoat(FindItemOnLayer( Layer.MiddleTorso )) ) + { + HideItem( FindItemOnLayer( Layer.InnerTorso ) ); + HideItem( FindItemOnLayer( Layer.Shirt ) ); + } + + } + } + + public void ProcessHair() + { + ShowHair(); + + if ( FindItemOnLayer( Layer.Helm ) != null ) + { + if ( Item.isPartialHat(FindItemOnLayer( Layer.Helm )) ) + { + HideHair( false ); + } + else if ( Item.isFullHat(FindItemOnLayer( Layer.Helm )) ) + { + HideHair( true ); + } + else if ( ( HairItemID == 8260 || HairItemID == 8263 ) && + ( Item.isFullHat(FindItemOnLayer( Layer.Helm )) || Item.isPartialHat(FindItemOnLayer( Layer.Helm )) || Item.isOtherHat(FindItemOnLayer( Layer.Helm )) ) + ) + { + HideHair( false ); + } + } + } + + public static int AnimateMod( int action, Mobile m ) + { + if ( m.AnimationMod == 1 ) + { + if ( action == 3 ){ action = 6; } + else if ( action == 4 ){ action = 6; } + else if ( action == 7 ){ action = 9; } + else if ( action == 10 ){ action = 9; } + else if ( action == 11 ){ action = 6; } + else if ( action == 12 ){ action = 8; } + } + else if ( m.AnimationMod == 2 ) + { + if ( action == 3 ){ action = 6; } + else if ( action == 4 ){ action = 6; } + else if ( action == 10 ){ action = 9; } + else if ( action == 11 ){ action = 6; } + else if ( action == 12 ){ action = 8; } + } + else if ( m.AnimationMod == 3 ) + { + if ( action == 32 ){ action = 16; } + else if ( action == 22 ){ action = 2; } + else if ( action == 13 ){ action = 11; } + else if ( action == 12 ){ action = 11; } + else if ( action == 31 ){ action = 9; } + else if ( action == 4 ){ action = 9; } + else if ( action == 5 ){ action = 9; } + + if ( action == 6 ){ action = 16; } + else if (action > 25){ action = 18; } + } + else if ( m.AnimationMod == 4 ) + { + if ( action == 10 ){ action = Utility.RandomList( 15, 16 ); } + } + else if ( m.AnimationMod == 5 ) + { + if ( action == 10 ){ action = 15; } + else if ( action > 17 ){ action = 1; } + } + else if ( m.AnimationMod == 6 ) + { + if ( action == 10 ){ action = 15; } + } + else if ( m.AnimationMod == 7 ) + { + if ( action == 10 ){ action = 4; } + else if ( action > 6 ){ action = Utility.RandomList( 1, 17, 18 ); } + } + + return action; + } + + public virtual void Animate( int action, int frameCount, int repeatCount, bool forward, bool repeat, int delay ) + { + Map map = m_Map; + + action = AnimateMod( action, this ); + + if( map != null ) + { + ProcessDelta(); + + Packet p = null; + + IPooledEnumerable eable = map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state.Mobile.CanSee( this ) ) + { + state.Mobile.ProcessDelta(); + if( p == null ) + p = Packet.Acquire( new MobileAnimation( this, action, frameCount, repeatCount, forward, repeat, delay ) ); + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + public void SendSound( int soundID ) + { + if( soundID != -1 && m_NetState != null ) + Send( new PlaySound( soundID, this ) ); + } + + public void SendSound( int soundID, IPoint3D p ) + { + if( soundID != -1 && m_NetState != null ) + Send( new PlaySound( soundID, p ) ); + } + + public void PlaySound( int soundID ) + { + if( soundID == -1 ) + return; + + if( m_Map != null ) + { + Packet p = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state.Mobile.CanSee( this ) ) + { + if( p == null ) + p = Packet.Acquire( new PlaySound( soundID, this ) ); + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + [CommandProperty( AccessLevel.Counselor )] + public Skills Skills + { + get + { + return m_Skills; + } + set + { + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.Administrator )] + public AccessLevel AccessLevel + { + get + { + return m_AccessLevel; + } + set + { + AccessLevel oldValue = m_AccessLevel; + + if( oldValue != value ) + { + m_AccessLevel = value; + Delta( MobileDelta.Noto ); + InvalidateProperties(); + + SendMessage( "Your access level has been changed. You are now {0}.", GetAccessLevelName( value ) ); + + ClearScreen(); + SendEverything(); + + OnAccessLevelChanged( oldValue ); + } + } + } + + public virtual void OnAccessLevelChanged( AccessLevel oldLevel ) + { + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Fame + { + get + { + return m_Fame; + } + set + { + int oldValue = m_Fame; + + if( oldValue != value ) + { + m_Fame = value; + + if( ShowFameTitle && (m_Player || m_Body.IsHuman) && (oldValue >= 10000) != (value >= 10000) ) + InvalidateProperties(); + + OnFameChange( oldValue ); + } + } + } + + public virtual void OnFameChange( int oldValue ) + { + } + + [CommandProperty( AccessLevel.GameMaster )] + public int Karma + { + get + { + return m_Karma; + } + set + { + int old = m_Karma; + + if( old != value ) + { + m_Karma = value; + OnKarmaChange( old ); + } + } + } + + public virtual void OnKarmaChange( int oldValue ) + { + } + + // Mobile did something which should unhide him + public virtual void RevealingAction() + { + if( m_Hidden && m_AccessLevel == AccessLevel.Player ) + Hidden = false; + + DisruptiveAction(); // Anything that unhides you will also distrupt meditation + } + + #region Say/SayTo/Emote/Whisper/Yell + public void SayTo( Mobile to, bool ascii, string text ) + { + PrivateOverheadMessage( MessageType.Regular, m_SpeechHue, ascii, text, to.NetState ); + } + + public void SayTo( Mobile to, string text ) + { + SayTo( to, false, text ); + } + + public void SayTo( Mobile to, string format, params object[] args ) + { + SayTo( to, false, String.Format( format, args ) ); + } + + public void SayTo( Mobile to, bool ascii, string format, params object[] args ) + { + SayTo( to, ascii, String.Format( format, args ) ); + } + + public void SayTo( Mobile to, int number ) + { + to.Send( new MessageLocalized( m_Serial, Body, MessageType.Regular, m_SpeechHue, 3, number, Name, "" ) ); + } + + public void SayTo( Mobile to, int number, string args ) + { + to.Send( new MessageLocalized( m_Serial, Body, MessageType.Regular, m_SpeechHue, 3, number, Name, args ) ); + } + + public void Say( bool ascii, string text ) + { + PublicOverheadMessage( MessageType.Regular, m_SpeechHue, ascii, text ); + } + + public void Say( string text ) + { + PublicOverheadMessage( MessageType.Regular, m_SpeechHue, false, text ); + } + + public void Say( string format, params object[] args ) + { + Say( String.Format( format, args ) ); + } + + public void Say( int number, AffixType type, string affix, string args ) + { + PublicOverheadMessage( MessageType.Regular, m_SpeechHue, number, type, affix, args ); + } + + public void Say( int number ) + { + Say( number, "" ); + } + + public void Say( int number, string args ) + { + PublicOverheadMessage( MessageType.Regular, m_SpeechHue, number, args ); + } + + public void Emote( string text ) + { + PublicOverheadMessage( MessageType.Emote, m_EmoteHue, false, text ); + } + + public void Emote( string format, params object[] args ) + { + Emote( String.Format( format, args ) ); + } + + public void Emote( int number ) + { + Emote( number, "" ); + } + + public void Emote( int number, string args ) + { + PublicOverheadMessage( MessageType.Emote, m_EmoteHue, number, args ); + } + + public void Whisper( string text ) + { + PublicOverheadMessage( MessageType.Whisper, m_WhisperHue, false, text ); + } + + public void Whisper( string format, params object[] args ) + { + Whisper( String.Format( format, args ) ); + } + + public void Whisper( int number ) + { + Whisper( number, "" ); + } + + public void Whisper( int number, string args ) + { + PublicOverheadMessage( MessageType.Whisper, m_WhisperHue, number, args ); + } + + public void Yell( string text ) + { + PublicOverheadMessage( MessageType.Yell, m_YellHue, false, text ); + } + + public void Yell( string format, params object[] args ) + { + Yell( String.Format( format, args ) ); + } + + public void Yell( int number ) + { + Yell( number, "" ); + } + + public void Yell( int number, string args ) + { + PublicOverheadMessage( MessageType.Yell, m_YellHue, number, args ); + } + #endregion + + [CommandProperty( AccessLevel.GameMaster )] + public bool Blessed + { + get + { + return m_Blessed; + } + set + { + if( m_Blessed != value ) + { + m_Blessed = value; + Delta( MobileDelta.HealthbarYellow ); + } + } + } + + public void SendRemovePacket() + { + SendRemovePacket( true ); + } + + public void SendRemovePacket( bool everyone ) + { + if( m_Map != null ) + { + Packet p = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state != m_NetState && (everyone || !state.Mobile.CanSee( this )) ) + { + if( p == null ) + p = this.RemovePacket; + + state.Send( p ); + } + } + + eable.Free(); + } + } + + public void ClearScreen() + { + NetState ns = m_NetState; + + if( m_Map != null && ns != null ) + { + IPooledEnumerable eable = m_Map.GetObjectsInRange( m_Location, Core.GlobalMaxUpdateRange ); + + foreach( object o in eable ) + { + if( o is Mobile ) + { + Mobile m = (Mobile)o; + + if( m != this && Utility.InUpdateRange( m_Location, m.m_Location ) ) + ns.Send( m.RemovePacket ); + } + else if( o is Item ) + { + Item item = (Item)o; + + if( InRange( item.Location, item.GetUpdateRange( this ) ) ) + ns.Send( item.RemovePacket ); + } + } + + eable.Free(); + } + } + + public bool Send( Packet p ) { + return Send( p, false ); + } + + public bool Send( Packet p, bool throwOnOffline ) { + if ( m_NetState != null ) { + m_NetState.Send( p ); + return true; + } else if ( throwOnOffline ) { + throw new MobileNotConnectedException( this, "Packet could not be sent." ); + } else { + return false; + } + } + + #region Gumps/Menus + + public bool SendHuePicker( HuePicker p ) { + return SendHuePicker( p, false ); + } + + public bool SendHuePicker( HuePicker p, bool throwOnOffline ) { + if ( m_NetState != null ) { + p.SendTo( m_NetState ); + return true; + } else if ( throwOnOffline ) { + throw new MobileNotConnectedException( this, "Hue picker could not be sent." ); + } else { + return false; + } + } + + public Gump FindGump( Type type ) { + NetState ns = m_NetState; + + if ( ns != null ) { + foreach ( Gump gump in ns.Gumps ) { + if ( type.IsAssignableFrom( gump.GetType() ) ) { + return gump; + } + } + } + + return null; + } + + public bool CloseGump( Type type ) { + if ( m_NetState != null ) { + Gump gump = FindGump( type ); + + if ( gump != null ) { + m_NetState.Send( new CloseGump( gump.TypeID, 0 ) ); + + m_NetState.RemoveGump( gump ); + + gump.OnServerClose( m_NetState ); + } + + return true; + } else { + return false; + } + } + + [Obsolete( "Use CloseGump( Type ) instead." )] + public bool CloseGump( Type type, int buttonID ) { + return CloseGump( type ); + } + + [Obsolete( "Use CloseGump( Type ) instead." )] + public bool CloseGump( Type type, int buttonID, bool throwOnOffline ) { + return CloseGump( type ); + } + + public bool CloseAllGumps() { + NetState ns = m_NetState; + + if ( ns != null ) { + List gumps = new List( ns.Gumps ); + + ns.ClearGumps(); + + foreach ( Gump gump in gumps ) { + ns.Send( new CloseGump( gump.TypeID, 0 ) ); + + gump.OnServerClose( ns ); + } + + return true; + } else { + return false; + } + } + + [Obsolete( "Use CloseAllGumps() instead.", false )] + public bool CloseAllGumps( bool throwOnOffline ) { + return CloseAllGumps(); + } + + public bool HasGump( Type type ) { + return ( FindGump( type ) != null ); + } + + [Obsolete( "Use HasGump( Type ) instead.", false )] + public bool HasGump( Type type, bool throwOnOffline ) { + return HasGump( type ); + } + + public bool SendGump( Gump g ) { + return SendGump( g, false ); + } + + public bool SendGump( Gump g, bool throwOnOffline ) { + if ( m_NetState != null ) { + g.SendTo( m_NetState ); + return true; + } else if ( throwOnOffline ) { + throw new MobileNotConnectedException( this, "Gump could not be sent." ); + } else { + return false; + } + } + + public bool SendMenu( IMenu m ) { + return SendMenu( m, false ); + } + + public bool SendMenu( IMenu m, bool throwOnOffline ) { + if ( m_NetState != null ) { + m.SendTo( m_NetState ); + return true; + } else if ( throwOnOffline ) { + throw new MobileNotConnectedException( this, "Menu could not be sent." ); + } else { + return false; + } + } + + #endregion + + /// + /// Overridable. Event invoked before the Mobile says something. + /// + /// + public virtual void OnSaid( SpeechEventArgs e ) + { + if( m_Squelched ) + { + this.SendMessage( "You can not say anything, you have been squelched." ); //Cliloc ITSELF changed during ML. + + e.Blocked = true; + } + + if( !e.Blocked ) + RevealingAction(); + } + + public virtual bool HandlesOnSpeech( Mobile from ) + { + return false; + } + + /// + /// Overridable. Virtual event invoked when the Mobile hears speech. This event will only be invoked if returns true. + /// + /// + public virtual void OnSpeech( SpeechEventArgs e ) + { + } + + public void SendEverything() + { + NetState ns = m_NetState; + + if( m_Map != null && ns != null ) + { + IPooledEnumerable eable = m_Map.GetObjectsInRange( m_Location, Core.GlobalMaxUpdateRange ); + + foreach( object o in eable ) + { + if( o is Item ) + { + Item item = (Item)o; + + if( CanSee( item ) && InRange( item.Location, item.GetUpdateRange( this ) ) ) + item.SendInfoTo( ns ); + } + else if( o is Mobile ) + { + Mobile m = (Mobile)o; + + if( CanSee( m ) && Utility.InUpdateRange( m_Location, m.m_Location ) ) + { + if ( ns.StygianAbyss ) { + ns.Send( new MobileIncoming( this, m ) ); + + if ( m.Poisoned ) + ns.Send( new HealthbarPoison( m ) ); + + if ( m.Blessed || m.YellowHealthbar ) + ns.Send( new HealthbarYellow( m ) ); + } else { + ns.Send( new MobileIncomingOld( this, m ) ); + } + + if( m.IsDeadBondedPet ) + ns.Send( new BondedStatus( 0, m.m_Serial, 1 ) ); + + if( ObjectPropertyList.Enabled ) + { + ns.Send( m.OPLPacket ); + + //foreach ( Item item in m.m_Items ) + // ns.Send( item.OPLPacket ); + } + } + } + } + + eable.Free(); + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Map Map + { + get + { + return m_Map; + } + set + { + if( m_Deleted ) + return; + + if( m_Map != value ) + { + if( m_NetState != null ) + m_NetState.ValidateAllTrades(); + + Map oldMap = m_Map; + + if( m_Map != null ) + { + m_Map.OnLeave( this ); + + ClearScreen(); + SendRemovePacket(); + } + + for( int i = 0; i < m_Items.Count; ++i ) + m_Items[i].Map = value; + + m_Map = value; + + UpdateRegion(); + + if( m_Map != null ) + m_Map.OnEnter( this ); + + NetState ns = m_NetState; + + if( ns != null && m_Map != null ) + { + ns.Sequence = 0; + ns.Send( new MapChange( this ) ); + ns.Send( new MapPatches() ); + ns.Send( SeasonChange.Instantiate( GetSeason(), true ) ); + + if ( ns.StygianAbyss ) + ns.Send( new MobileUpdate( this ) ); + else + ns.Send( new MobileUpdateOld( this ) ); + + ClearFastwalkStack(); + } + + if( ns != null ) + { + if( m_Map != null ) + Send( new ServerChange( this, m_Map ) ); + + ns.Sequence = 0; + ClearFastwalkStack(); + + if ( ns.StygianAbyss ) { + Send( new MobileIncoming( this, this ) ); + Send( new MobileUpdate( this ) ); + CheckLightLevels( true ); + Send( new MobileUpdate( this ) ); + } else { + Send( new MobileIncomingOld( this, this ) ); + Send( new MobileUpdateOld( this ) ); + CheckLightLevels( true ); + Send( new MobileUpdateOld( this ) ); + } + } + + SendEverything(); + SendIncomingPacket(); + + if( ns != null ) + { + ns.Sequence = 0; + ClearFastwalkStack(); + + if ( ns.StygianAbyss ) { + Send( new MobileIncoming( this, this ) ); + Send( SupportedFeatures.Instantiate( ns ) ); + Send( new MobileUpdate( this ) ); + Send( new MobileAttributes( this ) ); + } else { + Send( new MobileIncomingOld( this, this ) ); + Send( SupportedFeatures.Instantiate( ns ) ); + Send( new MobileUpdateOld( this ) ); + Send( new MobileAttributes( this ) ); + } + } + + OnMapChange( oldMap ); + } + } + } + + public void UpdateRegion() + { + if( m_Deleted ) + return; + + Region newRegion = Region.Find( m_Location, m_Map ); + + if( newRegion != m_Region ) + { + Region.OnRegionChange( this, m_Region, newRegion ); + + m_Region = newRegion; + OnRegionChange( m_Region, newRegion ); + } + } + + /// + /// Overridable. Virtual event invoked when changes. + /// + protected virtual void OnMapChange( Map oldMap ) + { + } + + #region Beneficial Checks/Actions + + public virtual bool CanBeBeneficial( Mobile target ) + { + return CanBeBeneficial( target, true, false ); + } + + public virtual bool CanBeBeneficial( Mobile target, bool message ) + { + return CanBeBeneficial( target, message, false ); + } + + public virtual bool CanBeBeneficial( Mobile target, bool message, bool allowDead ) + { + if( target == null ) + return false; + + if( m_Deleted || target.m_Deleted || !Alive || IsDeadBondedPet || (!allowDead && (!target.Alive || IsDeadBondedPet)) ) + { + if( message ) + SendLocalizedMessage( 1001017 ); // You can not perform beneficial acts on your target. + + return false; + } + + if( target == this ) + return true; + + if( /*m_Player &&*/ !Region.AllowBeneficial( this, target ) ) + { + // TODO: Pets + //if ( !(target.m_Player || target.Body.IsHuman || target.Body.IsAnimal) ) + //{ + if( message ) + SendLocalizedMessage( 1001017 ); // You can not perform beneficial acts on your target. + + return false; + //} + } + + return true; + } + + public virtual bool IsBeneficialCriminal( Mobile target ) + { + if( this == target ) + return false; + + int n = Notoriety.Compute( this, target ); + + return (n == Notoriety.Criminal || n == Notoriety.Murderer); + } + + /// + /// Overridable. Event invoked when the Mobile does a beneficial action. + /// + public virtual void OnBeneficialAction( Mobile target, bool isCriminal ) + { + if( isCriminal ) + CriminalAction( false ); + } + + public virtual void DoBeneficial( Mobile target ) + { + if( target == null ) + return; + + OnBeneficialAction( target, IsBeneficialCriminal( target ) ); + + Region.OnBeneficialAction( this, target ); + target.Region.OnGotBeneficialAction( this, target ); + } + + public virtual bool BeneficialCheck( Mobile target ) + { + if( CanBeBeneficial( target, true ) ) + { + DoBeneficial( target ); + return true; + } + + return false; + } + + #endregion + + #region Harmful Checks/Actions + + public virtual bool CanBeHarmful( Mobile target ) + { + return CanBeHarmful( target, true ); + } + + public virtual bool CanBeHarmful( Mobile target, bool message ) + { + return CanBeHarmful( target, message, false ); + } + + public virtual bool CanBeHarmful( Mobile target, bool message, bool ignoreOurBlessedness ) + { + if( target == null ) + return false; + + if( m_Deleted || (!ignoreOurBlessedness && m_Blessed) || target.m_Deleted || target.m_Blessed || !Alive || IsDeadBondedPet || !target.Alive || target.IsDeadBondedPet ) + { + if( message ) + SendLocalizedMessage( 1001018 ); // You can not perform negative acts on your target. + + return false; + } + + if( target == this ) + return true; + + // TODO: Pets + if( /*m_Player &&*/ !Region.AllowHarmful( this, target ) )//(target.m_Player || target.Body.IsHuman) && !Region.AllowHarmful( this, target ) ) + { + if( message ) + SendLocalizedMessage( 1001018 ); // You can not perform negative acts on your target. + + return false; + } + + return true; + } + + public virtual bool IsHarmfulCriminal( Mobile target ) + { + if( this == target ) + return false; + + return (Notoriety.Compute( this, target ) == Notoriety.Innocent); + } + + /// + /// Overridable. Event invoked when the Mobile does a harmful action. + /// + public virtual void OnHarmfulAction( Mobile target, bool isCriminal ) + { + if( isCriminal ) + CriminalAction( false ); + } + + public virtual void DoHarmful( Mobile target ) + { + DoHarmful( target, false ); + } + + public virtual void DoHarmful( Mobile target, bool indirect ) + { + if( target == null || m_Deleted ) + return; + + bool isCriminal = IsHarmfulCriminal( target ); + + OnHarmfulAction( target, isCriminal ); + target.AggressiveAction( this, isCriminal ); + + this.Region.OnDidHarmful( this, target ); + target.Region.OnGotHarmful( this, target ); + + if( !indirect ) + Combatant = target; + + if( m_ExpireCombatant == null ) + m_ExpireCombatant = new ExpireCombatantTimer( this ); + else + m_ExpireCombatant.Stop(); + + m_ExpireCombatant.Start(); + } + + public virtual bool HarmfulCheck( Mobile target ) + { + if( CanBeHarmful( target ) ) + { + DoHarmful( target ); + return true; + } + + return false; + } + + #endregion + + #region Stats + + /// + /// Gets a list of all StatMod's currently active for the Mobile. + /// + public List StatMods { get { return m_StatMods; } } + + public bool RemoveStatMod( string name ) + { + for( int i = 0; i < m_StatMods.Count; ++i ) + { + StatMod check = m_StatMods[i]; + + if( check.Name == name ) + { + m_StatMods.RemoveAt( i ); + CheckStatTimers(); + Delta( MobileDelta.Stat | GetStatDelta( check.Type ) ); + return true; + } + } + + return false; + } + + public StatMod GetStatMod( string name ) + { + for( int i = 0; i < m_StatMods.Count; ++i ) + { + StatMod check = m_StatMods[i]; + + if( check.Name == name ) + return check; + } + + return null; + } + + public void AddStatMod( StatMod mod ) + { + for( int i = 0; i < m_StatMods.Count; ++i ) + { + StatMod check = m_StatMods[i]; + + if( check.Name == mod.Name ) + { + Delta( MobileDelta.Stat | GetStatDelta( check.Type ) ); + m_StatMods.RemoveAt( i ); + break; + } + } + + m_StatMods.Add( mod ); + Delta( MobileDelta.Stat | GetStatDelta( mod.Type ) ); + CheckStatTimers(); + } + + private MobileDelta GetStatDelta( StatType type ) + { + MobileDelta delta = 0; + + if( (type & StatType.Str) != 0 ) + delta |= MobileDelta.Hits; + + if( (type & StatType.Dex) != 0 ) + delta |= MobileDelta.Stam; + + if( (type & StatType.Int) != 0 ) + delta |= MobileDelta.Mana; + + return delta; + } + + /// + /// Computes the total modified offset for the specified stat type. Expired instances are removed. + /// + public int GetStatOffset( StatType type ) + { + int offset = 0; + + for( int i = 0; i < m_StatMods.Count; ++i ) + { + StatMod mod = m_StatMods[i]; + + if( mod.HasElapsed() ) + { + m_StatMods.RemoveAt( i ); + Delta( MobileDelta.Stat | GetStatDelta( mod.Type ) ); + CheckStatTimers(); + + --i; + } + else if( (mod.Type & type) != 0 ) + { + offset += mod.Offset; + } + } + + return offset; + } + + /// + /// Overridable. Virtual event invoked when the changes. + /// + /// + /// + public virtual void OnRawStrChange( int oldValue ) + { + } + + /// + /// Overridable. Virtual event invoked when changes. + /// + /// + /// + public virtual void OnRawDexChange( int oldValue ) + { + } + + /// + /// Overridable. Virtual event invoked when the changes. + /// + /// + /// + public virtual void OnRawIntChange( int oldValue ) + { + } + + /// + /// Overridable. Virtual event invoked when the , , or changes. + /// + /// + /// + /// + public virtual void OnRawStatChange( StatType stat, int oldValue ) + { + } + + /// + /// Gets or sets the base, unmodified, strength of the Mobile. Ranges from 1 to 65000, inclusive. + /// + /// + /// + /// + /// + [CommandProperty( AccessLevel.GameMaster )] + public int RawStr + { + get + { + return m_Str; + } + set + { + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + if( m_Str != value ) + { + int oldValue = m_Str; + + m_Str = value; + Delta( MobileDelta.Stat | MobileDelta.Hits ); + + if( Hits < HitsMax ) + { + if( m_HitsTimer == null ) + m_HitsTimer = new HitsTimer( this ); + + m_HitsTimer.Start(); + } + else if( Hits > HitsMax ) + { + Hits = HitsMax; + } + + OnRawStrChange( oldValue ); + OnRawStatChange( StatType.Str, oldValue ); + } + } + } + + /// + /// Gets or sets the effective strength of the Mobile. This is the sum of the plus any additional modifiers. Any attempts to set this value when under the influence of a will result in no change. It ranges from 1 to 65000, inclusive. + /// + /// + /// + [CommandProperty( AccessLevel.GameMaster )] + public virtual int Str + { + get + { + int value = m_Str + GetStatOffset( StatType.Str ); + + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + return value; + } + set + { + if( m_StatMods.Count == 0 ) + RawStr = value; + } + } + + /// + /// Gets or sets the base, unmodified, dexterity of the Mobile. Ranges from 1 to 65000, inclusive. + /// + /// + /// + /// + /// + [CommandProperty( AccessLevel.GameMaster )] + public int RawDex + { + get + { + return m_Dex; + } + set + { + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + if( m_Dex != value ) + { + int oldValue = m_Dex; + + m_Dex = value; + Delta( MobileDelta.Stat | MobileDelta.Stam ); + + if( Stam < StamMax ) + { + if( m_StamTimer == null ) + m_StamTimer = new StamTimer( this ); + + m_StamTimer.Start(); + } + else if( Stam > StamMax ) + { + Stam = StamMax; + } + + OnRawDexChange( oldValue ); + OnRawStatChange( StatType.Dex, oldValue ); + } + } + } + + /// + /// Gets or sets the effective dexterity of the Mobile. This is the sum of the plus any additional modifiers. Any attempts to set this value when under the influence of a will result in no change. It ranges from 1 to 65000, inclusive. + /// + /// + /// + [CommandProperty( AccessLevel.GameMaster )] + public virtual int Dex + { + get + { + int value = m_Dex + GetStatOffset( StatType.Dex ); + + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + return value; + } + set + { + if( m_StatMods.Count == 0 ) + RawDex = value; + } + } + + /// + /// Gets or sets the base, unmodified, intelligence of the Mobile. Ranges from 1 to 65000, inclusive. + /// + /// + /// + /// + /// + [CommandProperty( AccessLevel.GameMaster )] + public int RawInt + { + get + { + return m_Int; + } + set + { + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + if( m_Int != value ) + { + int oldValue = m_Int; + + m_Int = value; + Delta( MobileDelta.Stat | MobileDelta.Mana ); + + if( Mana < ManaMax ) + { + if( m_ManaTimer == null ) + m_ManaTimer = new ManaTimer( this ); + + m_ManaTimer.Start(); + } + else if( Mana > ManaMax ) + { + Mana = ManaMax; + } + + OnRawIntChange( oldValue ); + OnRawStatChange( StatType.Int, oldValue ); + } + } + } + + /// + /// Gets or sets the effective intelligence of the Mobile. This is the sum of the plus any additional modifiers. Any attempts to set this value when under the influence of a will result in no change. It ranges from 1 to 65000, inclusive. + /// + /// + /// + [CommandProperty( AccessLevel.GameMaster )] + public virtual int Int + { + get + { + int value = m_Int + GetStatOffset( StatType.Int ); + + if( value < 1 ) + value = 1; + else if( value > 65000 ) + value = 65000; + + return value; + } + set + { + if( m_StatMods.Count == 0 ) + RawInt = value; + } + } + + public virtual void OnHitsChange( int oldValue ) + { + } + + public virtual void OnStamChange( int oldValue ) + { + } + + public virtual void OnManaChange( int oldValue ) + { + } + + /// + /// Gets or sets the current hit point of the Mobile. This value ranges from 0 to , inclusive. When set to the value of , the CanReportMurder flag of all aggressors is reset to false, and the list of damage entries is cleared. + /// + [CommandProperty( AccessLevel.GameMaster )] + public int Hits + { + get + { + return m_Hits; + } + set + { + if( m_Deleted ) + return; + + if( value < 0 ) + { + value = 0; + } + else if( value >= HitsMax ) + { + value = HitsMax; + + if( m_HitsTimer != null ) + m_HitsTimer.Stop(); + + for( int i = 0; i < m_Aggressors.Count; i++ ) //reset reports on full HP + m_Aggressors[i].CanReportMurder = false; + + if( m_DamageEntries.Count > 0 ) + m_DamageEntries.Clear(); // reset damage entries on full HP + } + + if( value < HitsMax ) + { + if( CanRegenHits ) + { + if( m_HitsTimer == null ) + m_HitsTimer = new HitsTimer( this ); + + m_HitsTimer.Start(); + } + else if( m_HitsTimer != null ) + { + m_HitsTimer.Stop(); + } + } + + if( m_Hits != value ) + { + int oldValue = m_Hits; + m_Hits = value; + Delta( MobileDelta.Hits ); + OnHitsChange( oldValue ); + } + } + } + + /// + /// Overridable. Gets the maximum hit point of the Mobile. By default, this returns: 50 + ( / 2) + /// + [CommandProperty( AccessLevel.GameMaster )] + public virtual int HitsMax + { + get + { + return 50 + (Str / 2); + } + } + + /// + /// Gets or sets the current stamina of the Mobile. This value ranges from 0 to , inclusive. + /// + [CommandProperty( AccessLevel.GameMaster )] + public int Stam + { + get + { + return m_Stam; + } + set + { + if( m_Deleted ) + return; + + if( value < 0 ) + { + value = 0; + } + else if( value >= StamMax ) + { + value = StamMax; + + if( m_StamTimer != null ) + m_StamTimer.Stop(); + } + + if( value < StamMax ) + { + if( CanRegenStam ) + { + if( m_StamTimer == null ) + m_StamTimer = new StamTimer( this ); + + m_StamTimer.Start(); + } + else if( m_StamTimer != null ) + { + m_StamTimer.Stop(); + } + } + + if( m_Stam != value ) + { + int oldValue = m_Stam; + m_Stam = value; + Delta( MobileDelta.Stam ); + OnStamChange( oldValue ); + } + } + } + + /// + /// Overridable. Gets the maximum stamina of the Mobile. By default, this returns: + /// + [CommandProperty( AccessLevel.GameMaster )] + public virtual int StamMax + { + get + { + return Dex; + } + } + + /// + /// Gets or sets the current stamina of the Mobile. This value ranges from 0 to , inclusive. + /// + [CommandProperty( AccessLevel.GameMaster )] + public int Mana + { + get + { + return m_Mana; + } + set + { + if( m_Deleted ) + return; + + if( value < 0 ) + { + value = 0; + } + else if( value >= ManaMax ) + { + value = ManaMax; + + if( m_ManaTimer != null ) + m_ManaTimer.Stop(); + + if( Meditating ) + { + Meditating = false; + SendLocalizedMessage( 501846 ); // You are at peace. + } + } + + if( value < ManaMax ) + { + if( CanRegenMana ) + { + if( m_ManaTimer == null ) + m_ManaTimer = new ManaTimer( this ); + + m_ManaTimer.Start(); + } + else if( m_ManaTimer != null ) + { + m_ManaTimer.Stop(); + } + } + + if( m_Mana != value ) + { + int oldValue = m_Mana; + m_Mana = value; + Delta( MobileDelta.Mana ); + OnManaChange( oldValue ); + } + } + } + + /// + /// Overridable. Gets the maximum mana of the Mobile. By default, this returns: + /// + [CommandProperty( AccessLevel.GameMaster )] + public virtual int ManaMax + { + get + { + return Int; + } + } + + #endregion + + public virtual int HuedItemID + { + get + { + return (m_Female ? 0x2107 : 0x2106); + } + } + + private int m_HueMod = -1; + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public int HueMod + { + get + { + return m_HueMod; + } + set + { + if( m_HueMod != value ) + { + m_HueMod = value; + + Delta( MobileDelta.Hue ); + } + } + } + + [Hue, CommandProperty( AccessLevel.GameMaster )] + public virtual int Hue + { + get + { + if( m_HueMod != -1 ) + return m_HueMod; + + return m_Hue; + } + set + { + int oldHue = m_Hue; + + if( oldHue != value ) + { + m_Hue = value; + + Delta( MobileDelta.Hue ); + } + } + } + + + public void SetDirection( Direction dir ) + { + m_Direction = dir; + } + + [CommandProperty( AccessLevel.GameMaster )] + public Direction Direction + { + get + { + return m_Direction; + } + set + { + if( m_Direction != value ) + { + m_Direction = value; + + Delta( MobileDelta.Direction ); + //ProcessDelta(); + } + } + } + + public virtual int GetSeason() + { + if( m_Map != null ) + return m_Map.Season; + + return 1; + } + + public virtual int GetPacketFlags() + { + int flags = 0x0; + + if( m_Female ) + flags |= 0x02; + + if( m_Flying ) + flags |= 0x04; + + if( m_Blessed || m_YellowHealthbar ) + flags |= 0x08; + + if( m_Warmode ) + flags |= 0x40; + + if( m_Hidden ) + flags |= 0x80; + + return flags; + } + + // Pre-7.0.0.0 Packet Flags + public virtual int GetOldPacketFlags() + { + int flags = 0x0; + + if( m_Female ) + flags |= 0x02; + + if( m_Poison != null ) + flags |= 0x04; + + if( m_Blessed || m_YellowHealthbar ) + flags |= 0x08; + + if( m_Warmode ) + flags |= 0x40; + + if( m_Hidden ) + flags |= 0x80; + + return flags; + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Female + { + get + { + return m_Female; + } + set + { + if( m_Female != value ) + { + m_Female = value; + Delta( MobileDelta.Flags ); + OnGenderChanged( !m_Female ); + } + } + } + + public virtual void OnGenderChanged( bool oldFemale ) + { + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Flying + { + get + { + return m_Flying; + } + set + { + if( m_Flying != value ) + { + m_Flying = value; + Delta( MobileDelta.Flags ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Warmode + { + get + { + return m_Warmode; + } + set + { + if( m_Deleted ) + return; + + if( m_Warmode != value ) + { + if( m_AutoManifestTimer != null ) + { + m_AutoManifestTimer.Stop(); + m_AutoManifestTimer = null; + } + + m_Warmode = value; + Delta( MobileDelta.Flags ); + + if( m_NetState != null ) + Send( SetWarMode.Instantiate( value ) ); + + if( !m_Warmode ) + Combatant = null; + + if( !Alive ) + { + if( value ) + Delta( MobileDelta.GhostUpdate ); + else + SendRemovePacket( false ); + } + + OnWarmodeChanged(); + } + } + } + + /// + /// Overridable. Virtual event invoked after the Warmode property has changed. + /// + public virtual void OnWarmodeChanged() + { + } + + [CommandProperty( AccessLevel.GameMaster )] + public virtual bool Hidden + { + get + { + return m_Hidden; + } + set + { + if( m_Hidden != value ) + { + m_AllowedStealthSteps = 0; + + m_Hidden = value; + //Delta( MobileDelta.Flags ); + + if( m_Map != null ) + { + Packet p = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( !state.Mobile.CanSee( this ) ) + { + if( p == null ) + p = this.RemovePacket; + + state.Send( p ); + } + else + { + if ( state.StygianAbyss ) + state.Send( new MobileIncoming( state.Mobile, this ) ); + else + state.Send( new MobileIncomingOld( state.Mobile, this ) ); + + if( IsDeadBondedPet ) + state.Send( new BondedStatus( 0, m_Serial, 1 ) ); + + if( ObjectPropertyList.Enabled ) + { + state.Send( OPLPacket ); + + //foreach ( Item item in m_Items ) + // state.Send( item.OPLPacket ); + } + } + } + + eable.Free(); + } + } + } + } + + public virtual void OnConnected() + { + } + + public virtual void OnDisconnected() + { + } + + public virtual void OnNetStateChanged() + { + } + + public NetState NetState + { + get + { + if( m_NetState != null && m_NetState.Socket == null ) + NetState = null; + + return m_NetState; + } + set + { + if( m_NetState != value ) + { + if( m_Map != null ) + m_Map.OnClientChange( m_NetState, value, this ); + + if( m_Target != null ) + m_Target.Cancel( this, TargetCancelType.Disconnected ); + + if( m_QuestArrow != null ) + QuestArrow = null; + + if( m_Spell != null ) + m_Spell.OnConnectionChanged(); + + //if ( m_Spell != null ) + // m_Spell.FinishSequence(); + + if( m_NetState != null ) + m_NetState.CancelAllTrades(); + + InnBox box = FindInnNoCreate(); + + if( box != null && box.Opened ) + box.Close(); + + // REMOVED: + //m_Actions.Clear(); + + m_NetState = value; + + if( m_NetState == null ) + { + OnDisconnected(); + EventSink.InvokeDisconnected( new DisconnectedEventArgs( this ) ); + + // Disconnected, start the logout timer + + if( m_LogoutTimer == null ) + m_LogoutTimer = new LogoutTimer( this ); + else + m_LogoutTimer.Stop(); + + m_LogoutTimer.Delay = GetLogoutDelay(); + m_LogoutTimer.Start(); + } + else + { + OnConnected(); + EventSink.InvokeConnected( new ConnectedEventArgs( this ) ); + + // Connected, stop the logout timer and if needed, move to the world + + if( m_LogoutTimer != null ) + m_LogoutTimer.Stop(); + + m_LogoutTimer = null; + + if( m_Map == Map.Internal && m_LogoutMap != null ) + { + Map = m_LogoutMap; + Location = m_LogoutLocation; + } + } + + for( int i = m_Items.Count - 1; i >= 0; --i ) + { + if( i >= m_Items.Count ) + continue; + + Item item = m_Items[i]; + + if( item is SecureTradeContainer ) + { + for( int j = item.Items.Count - 1; j >= 0; --j ) + { + if( j < item.Items.Count ) + { + item.Items[j].OnSecureTrade( this, this, this, false ); + AddToBackpack( item.Items[j] ); + } + } + + item.Delete(); + } + } + + DropHolding(); + OnNetStateChanged(); + } + } + } + + public virtual bool CanSee( object o ) + { + if( o is Item ) + { + return CanSee( (Item)o ); + } + else if( o is Mobile ) + { + return CanSee( (Mobile)o ); + } + else + { + return true; + } + } + + public virtual bool CanSee( Item item ) + { + if( m_Map == Map.Internal ) + return false; + else if( item.Map == Map.Internal ) + return false; + + if( item.Parent != null ) + { + if( item.Parent is Item ) + { + Item parent = item.Parent as Item; + + if ( !(CanSee( parent ) && parent.IsChildVisibleTo( this, item )) ) + return false; + } + else if( item.Parent is Mobile ) + { + if( !CanSee( (Mobile)item.Parent ) ) + return false; + } + } + + if( item is InnBox ) + { + InnBox box = item as InnBox; + + if( box != null && m_AccessLevel <= AccessLevel.Counselor && (box.Owner != this || !box.Opened) ) + return false; + } + else if( item is SecureTradeContainer ) + { + SecureTrade trade = ((SecureTradeContainer)item).Trade; + + if( trade != null && trade.From.Mobile != this && trade.To.Mobile != this ) + return false; + } + + return !item.Deleted && item.Map == m_Map && (item.Visible || m_AccessLevel > AccessLevel.Counselor); + } + + public virtual bool CanSee( Mobile m ) + { + if( m_Deleted || m.m_Deleted || m_Map == Map.Internal || m.m_Map == Map.Internal ) + return false; + + return this == m || ( + m.m_Map == m_Map && + (!m.Hidden || (m_AccessLevel != AccessLevel.Player && (m_AccessLevel >= m.AccessLevel || m_AccessLevel >= AccessLevel.Developer))) && + ((m.Alive) || !Alive || m_AccessLevel > AccessLevel.Player || m.Warmode)); + } + + public virtual bool CanBeRenamedBy( Mobile from ) + { + return (from.AccessLevel >= AccessLevel.GameMaster && from.m_AccessLevel > m_AccessLevel); + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Language + { + get + { + return m_Language; + } + set + { + if( m_Language != value ) + m_Language = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int SpeechHue + { + get + { + return m_SpeechHue; + } + set + { + m_SpeechHue = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int EmoteHue + { + get + { + return m_EmoteHue; + } + set + { + m_EmoteHue = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int WhisperHue + { + get + { + return m_WhisperHue; + } + set + { + m_WhisperHue = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int YellHue + { + get + { + return m_YellHue; + } + set + { + m_YellHue = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string GuildTitle + { + get + { + return m_GuildTitle; + } + set + { + string old = m_GuildTitle; + + if( old != value ) + { + m_GuildTitle = value; + + if( m_Guild != null && !m_Guild.Disbanded && m_GuildTitle != null ) + this.SendLocalizedMessage( 1018026, true, m_GuildTitle ); // Your guild title has changed : + + InvalidateProperties(); + + OnGuildTitleChange( old ); + } + } + } + + public virtual void OnGuildTitleChange( string oldTitle ) + { + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool DisplayGuildTitle + { + get + { + return m_DisplayGuildTitle; + } + set + { + m_DisplayGuildTitle = value; + InvalidateProperties(); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Mobile GuildFealty + { + get + { + return m_GuildFealty; + } + set + { + m_GuildFealty = value; + } + } + + private string m_NameMod; + + [CommandProperty( AccessLevel.GameMaster )] + public string NameMod + { + get + { + return m_NameMod; + } + set + { + if( m_NameMod != value ) + { + m_NameMod = value; + Delta( MobileDelta.Name ); + InvalidateProperties(); + } + } + } + + private bool m_YellowHealthbar; + + [CommandProperty( AccessLevel.GameMaster )] + public bool YellowHealthbar + { + get + { + return m_YellowHealthbar; + } + set + { + m_YellowHealthbar = value; + Delta( MobileDelta.HealthbarYellow ); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string RawName + { + get { return m_Name; } + set { Name = value; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public string Name + { + get + { + if( m_NameMod != null ) + return m_NameMod; + + return m_Name; + } + set + { + if( m_Name != value ) // I'm leaving out the && m_NameMod == null + { + m_Name = value; + Delta( MobileDelta.Name ); + InvalidateProperties(); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime LastStrGain + { + get + { + return m_LastStrGain; + } + set + { + m_LastStrGain = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime LastIntGain + { + get + { + return m_LastIntGain; + } + set + { + m_LastIntGain = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public DateTime LastDexGain + { + get + { + return m_LastDexGain; + } + set + { + m_LastDexGain = value; + } + } + + public DateTime LastStatGain + { + get + { + DateTime d = m_LastStrGain; + + if( m_LastIntGain > d ) + d = m_LastIntGain; + + if( m_LastDexGain > d ) + d = m_LastDexGain; + + return d; + } + set + { + m_LastStrGain = value; + m_LastIntGain = value; + m_LastDexGain = value; + } + } + + public BaseGuild Guild + { + get + { + return m_Guild; + } + set + { + BaseGuild old = m_Guild; + + if( old != value ) + { + if( value == null ) + GuildTitle = null; + + m_Guild = value; + + Delta( MobileDelta.Noto ); + InvalidateProperties(); + + OnGuildChange( old ); + } + } + } + + public virtual void OnGuildChange( BaseGuild oldGuild ) + { + } + + #region Poison/Curing + + public Timer PoisonTimer + { + get { return m_PoisonTimer; } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Poison Poison + { + get + { + return m_Poison; + } + set + { + m_Poison = value; + Delta( MobileDelta.HealthbarPoison ); + + if( m_PoisonTimer != null ) + { + m_PoisonTimer.Stop(); + m_PoisonTimer = null; + } + + if( m_Poison != null ) + { + m_PoisonTimer = m_Poison.ConstructTimer( this ); + + if( m_PoisonTimer != null ) + m_PoisonTimer.Start(); + } + + CheckStatTimers(); + } + } + + /// + /// Overridable. Event invoked when a call to failed because returned false: the Mobile was resistant to the poison. By default, this broadcasts an overhead message: * The poison seems to have no effect. * + /// + /// + /// + /// + public virtual void OnPoisonImmunity( Mobile from, Poison poison ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + this.PublicOverheadMessage( MessageType.Emote, 0x3B2, 1005534 ); // * The poison seems to have no effect. * + } + + /// + /// Overridable. Virtual event invoked when a call to failed because returned false: the Mobile was already poisoned by an equal or greater strength poison. + /// + /// + /// + /// + public virtual void OnHigherPoison( Mobile from, Poison poison ) + { + } + + /// + /// Overridable. Event invoked when a call to succeeded. By default, this broadcasts an overhead message varying by the level of the poison. Example: * Zippy begins to spasm uncontrollably. * + /// + /// + /// + public virtual void OnPoisoned( Mobile from, Poison poison, Poison oldPoison ) + { + if( poison != null ) + { + this.LocalOverheadMessage( MessageType.Regular, 0x21, 1042857 + (poison.Level * 2) ); + this.NonlocalOverheadMessage( MessageType.Regular, 0x21, 1042858 + (poison.Level * 2), Name ); + } + } + + /// + /// Overridable. Called from , this method checks if the Mobile is immune to some . If true, will be invoked and is returned. + /// + /// + /// + /// + public virtual bool CheckPoisonImmunity( Mobile from, Poison poison ) + { + return false; + } + + /// + /// Overridable. Called from , this method checks if the Mobile is already poisoned by some of equal or greater strength. If true, will be invoked and is returned. + /// + /// + /// + /// + public virtual bool CheckHigherPoison( Mobile from, Poison poison ) + { + return (m_Poison != null && m_Poison.Level >= poison.Level); + } + + /// + /// Overridable. Attempts to apply poison to the Mobile. Checks are made such that no higher poison is active and that the Mobile is not immune to the poison. Provided those assertions are true, the is applied and is invoked. + /// + /// + /// + /// One of four possible values: + /// + /// + /// Cured + /// The parameter was null and so was invoked. + /// + /// + /// HigherPoisonActive + /// The call to returned false. + /// + /// + /// Immune + /// The call to returned false. + /// + /// + /// Poisoned + /// The was successfully applied. + /// + /// + /// + public virtual ApplyPoisonResult ApplyPoison( Mobile from, Poison poison ) + { + if( poison == null ) + { + CurePoison( from ); + return ApplyPoisonResult.Cured; + } + + if( CheckHigherPoison( from, poison ) ) + { + OnHigherPoison( from, poison ); + return ApplyPoisonResult.HigherPoisonActive; + } + + if( CheckPoisonImmunity( from, poison ) ) + { + OnPoisonImmunity( from, poison ); + return ApplyPoisonResult.Immune; + } + + Poison oldPoison = m_Poison; + this.Poison = poison; + + OnPoisoned( from, poison, oldPoison ); + + return ApplyPoisonResult.Poisoned; + } + + /// + /// Overridable. Called from , this method checks to see that the Mobile can be cured of + /// + /// + /// + public virtual bool CheckCure( Mobile from ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when a call to succeeded. + /// + /// + /// + /// + public virtual void OnCured( Mobile from, Poison oldPoison ) + { + } + + /// + /// Overridable. Virtual event invoked when a call to failed. + /// + /// + /// + /// + public virtual void OnFailedCure( Mobile from ) + { + } + + /// + /// Overridable. Attempts to cure any poison that is currently active. + /// + /// True if poison was cured, false if otherwise. + public virtual bool CurePoison( Mobile from ) + { + if( CheckCure( from ) ) + { + Poison oldPoison = m_Poison; + this.Poison = null; + + OnCured( from, oldPoison ); + + return true; + } + + OnFailedCure( from ); + + return false; + } + + #endregion + + private ISpawner m_Spawner; + + public ISpawner Spawner { get { return m_Spawner; } set { m_Spawner = value; } } + + private Region m_WalkRegion; + + public Region WalkRegion { get { return m_WalkRegion; } set { m_WalkRegion = value; } } + + public virtual void OnBeforeSpawn( Point3D location, Map m ) + { + } + + public virtual void OnAfterSpawn() + { + ProcessClothing(); + ProcessHair(); + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Poisoned + { + get + { + return (m_Poison != null); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool IsBodyMod + { + get + { + return (m_BodyMod.BodyID != 0); + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public Body BodyMod + { + get + { + return m_BodyMod; + } + set + { + if( m_BodyMod != value ) + { + m_BodyMod = value; + + Delta( MobileDelta.Body ); + InvalidateProperties(); + + CheckStatTimers(); + } + } + } + + private static int[] m_InvalidBodies = new int[] + { + 32, + 95, + 156, + 197, + 198, + }; + + [Body, CommandProperty( AccessLevel.GameMaster )] + public Body Body + { + get + { + if( IsBodyMod ) + return m_BodyMod; + + return m_Body; + } + set + { + if( m_Body != value && !IsBodyMod ) + { + m_Body = SafeBody( value ); + + Delta( MobileDelta.Body ); + InvalidateProperties(); + + CheckStatTimers(); + } + } + } + + public virtual int SafeBody( int body ) + { + int delta = -1; + + for( int i = 0; delta < 0 && i < m_InvalidBodies.Length; ++i ) + delta = (m_InvalidBodies[i] - body); + + if( delta != 0 ) + return body; + + return 0; + } + + [Body, CommandProperty( AccessLevel.GameMaster )] + public int BodyValue + { + get + { + return Body.BodyID; + } + set + { + Body = value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public Serial Serial + { + get + { + return m_Serial; + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Point3D Location + { + get + { + return m_Location; + } + set + { + SetLocation( value, true ); + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Point3D LogoutLocation + { + get + { + return m_LogoutLocation; + } + set + { + m_LogoutLocation = value; + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public Map LogoutMap + { + get + { + return m_LogoutMap; + } + set + { + m_LogoutMap = value; + } + } + + public Region Region + { + get + { + if( m_Region == null ) + if( this.Map == null ) + return Map.Internal.DefaultRegion; + else + return this.Map.DefaultRegion; + else + return m_Region; + } + } + + public void FreeCache() + { + Packet.Release( ref m_RemovePacket ); + Packet.Release( ref m_PropertyList ); + Packet.Release( ref m_OPLPacket ); + } + + private Packet m_RemovePacket; + + public Packet RemovePacket + { + get + { + if( m_RemovePacket == null ) + { + m_RemovePacket = new RemoveMobile( this ); + m_RemovePacket.SetStatic(); + } + + return m_RemovePacket; + } + } + + private Packet m_OPLPacket; + + public Packet OPLPacket + { + get + { + if( m_OPLPacket == null ) + { + m_OPLPacket = new OPLInfo( PropertyList ); + m_OPLPacket.SetStatic(); + } + + return m_OPLPacket; + } + } + + private ObjectPropertyList m_PropertyList; + + public ObjectPropertyList PropertyList + { + get + { + if( m_PropertyList == null ) + { + m_PropertyList = new ObjectPropertyList( this ); + + GetProperties( m_PropertyList ); + + m_PropertyList.Terminate(); + m_PropertyList.SetStatic(); + } + + return m_PropertyList; + } + } + + public void ClearProperties() + { + Packet.Release( ref m_PropertyList ); + Packet.Release( ref m_OPLPacket ); + } + + public void InvalidateProperties() + { + if( !ObjectPropertyList.Enabled ) + return; + + if( m_Map != null && m_Map != Map.Internal && !World.Loading ) + { + ObjectPropertyList oldList = m_PropertyList; + Packet.Release( ref m_PropertyList ); + ObjectPropertyList newList = PropertyList; + + if( oldList == null || oldList.Hash != newList.Hash ) + { + Packet.Release( ref m_OPLPacket ); + Delta( MobileDelta.Properties ); + } + } + else + { + ClearProperties(); + } + } + + private int m_SolidHueOverride = -1; + + [CommandProperty( AccessLevel.GameMaster )] + public int SolidHueOverride + { + get { return m_SolidHueOverride; } + set { if( m_SolidHueOverride == value ) return; m_SolidHueOverride = value; Delta( MobileDelta.Hue | MobileDelta.Body ); } + } + + public virtual void MoveToWorld( Point3D newLocation, Map map ) + { + if( m_Deleted ) + return; + + if( m_Map == map ) + { + SetLocation( newLocation, true ); + return; + } + + InnBox box = FindInnNoCreate(); + + if( box != null && box.Opened ) + box.Close(); + + Point3D oldLocation = m_Location; + Map oldMap = m_Map; + + Region oldRegion = m_Region; + + if( oldMap != null ) + { + oldMap.OnLeave( this ); + + ClearScreen(); + SendRemovePacket(); + } + + for( int i = 0; i < m_Items.Count; ++i ) + m_Items[i].Map = map; + + m_Map = map; + + m_Location = newLocation; + + NetState ns = m_NetState; + + if( m_Map != null ) + { + m_Map.OnEnter( this ); + + UpdateRegion(); + + if( ns != null && m_Map != null ) + { + ns.Sequence = 0; + ns.Send( new MapChange( this ) ); + ns.Send( new MapPatches() ); + ns.Send( SeasonChange.Instantiate( GetSeason(), true ) ); + + if ( ns.StygianAbyss ) + ns.Send( new MobileUpdate( this ) ); + else + ns.Send( new MobileUpdateOld( this ) ); + + ClearFastwalkStack(); + } + } + else + { + UpdateRegion(); + } + + if( ns != null ) + { + if( m_Map != null ) + Send( new ServerChange( this, m_Map ) ); + + ns.Sequence = 0; + ClearFastwalkStack(); + + if ( ns.StygianAbyss ) { + Send( new MobileIncoming( this, this ) ); + Send( new MobileUpdate( this ) ); + CheckLightLevels( true ); + Send( new MobileUpdate( this ) ); + } else { + Send( new MobileIncomingOld( this, this ) ); + Send( new MobileUpdateOld( this ) ); + CheckLightLevels( true ); + Send( new MobileUpdateOld( this ) ); + } + } + + SendEverything(); + SendIncomingPacket(); + + if( ns != null ) + { + ns.Sequence = 0; + ClearFastwalkStack(); + + if ( ns.StygianAbyss ) { + Send( new MobileIncoming( this, this ) ); + Send( SupportedFeatures.Instantiate( ns ) ); + Send( new MobileUpdate( this ) ); + Send( new MobileAttributes( this ) ); + } else { + Send( new MobileIncomingOld( this, this ) ); + Send( SupportedFeatures.Instantiate( ns ) ); + Send( new MobileUpdateOld( this ) ); + Send( new MobileAttributes( this ) ); + } + } + + OnMapChange( oldMap ); + OnLocationChange( oldLocation ); + + if( m_Region != null ) + m_Region.OnLocationChanged( this, oldLocation ); + } + + public virtual void SetLocation( Point3D newLocation, bool isTeleport ) + { + if( m_Deleted ) + return; + + Point3D oldLocation = m_Location; + + if( oldLocation != newLocation ) + { + m_Location = newLocation; + UpdateRegion(); + + InnBox box = FindInnNoCreate(); + + if( box != null && box.Opened ) + box.Close(); + + if( m_NetState != null ) + m_NetState.ValidateAllTrades(); + + if( m_Map != null ) + m_Map.OnMove( oldLocation, this ); + + if( isTeleport && m_NetState != null ) + { + m_NetState.Sequence = 0; + + if ( m_NetState.StygianAbyss ) + m_NetState.Send( new MobileUpdate( this ) ); + else + m_NetState.Send( new MobileUpdateOld( this ) ); + + ClearFastwalkStack(); + } + + Map map = m_Map; + + if( map != null ) + { + // First, send a remove message to everyone who can no longer see us. (inOldRange && !inNewRange) + Packet removeThis = null; + + IPooledEnumerable eable = map.GetClientsInRange( oldLocation ); + + foreach( NetState ns in eable ) + { + if( ns != m_NetState && !Utility.InUpdateRange( newLocation, ns.Mobile.Location ) ) + { + if( removeThis == null ) + removeThis = this.RemovePacket; + + ns.Send( removeThis ); + } + } + + eable.Free(); + + NetState ourState = m_NetState; + + // Check to see if we are attached to a client + if( ourState != null ) + { + eable = map.GetObjectsInRange( newLocation, Core.GlobalMaxUpdateRange ); + + // We are attached to a client, so it's a bit more complex. We need to send new items and people to ourself, and ourself to other clients + foreach( object o in eable ) + { + if( o is Item ) + { + Item item = (Item)o; + + int range = item.GetUpdateRange( this ); + Point3D loc = item.Location; + + if( !Utility.InRange( oldLocation, loc, range ) && Utility.InRange( newLocation, loc, range ) && CanSee( item ) ) + item.SendInfoTo( ourState ); + } + else if( o != this && o is Mobile ) + { + Mobile m = (Mobile)o; + + if( !Utility.InUpdateRange( newLocation, m.m_Location ) ) + continue; + + bool inOldRange = Utility.InUpdateRange( oldLocation, m.m_Location ); + + if( (isTeleport || !inOldRange) && m.m_NetState != null && m.CanSee( this ) ) + { + if ( m.m_NetState.StygianAbyss ) { + m.m_NetState.Send( new MobileIncoming( m, this ) ); + + if ( m_Poison != null ) + m.m_NetState.Send( new HealthbarPoison( this ) ); + + if ( m_Blessed || m_YellowHealthbar ) + m.m_NetState.Send( new HealthbarYellow( this ) ); + } else { + m.m_NetState.Send( new MobileIncomingOld( m, this ) ); + } + + if( IsDeadBondedPet ) + m.m_NetState.Send( new BondedStatus( 0, m_Serial, 1 ) ); + + if( ObjectPropertyList.Enabled ) + { + m.m_NetState.Send( OPLPacket ); + + //foreach ( Item item in m_Items ) + // m.m_NetState.Send( item.OPLPacket ); + } + } + + if( !inOldRange && CanSee( m ) ) + { + if ( ourState.StygianAbyss ) { + ourState.Send( new MobileIncoming( this, m ) ); + + if ( m.Poisoned ) + ourState.Send( new HealthbarPoison( m ) ); + + if ( m.Blessed || m.YellowHealthbar ) + ourState.Send( new HealthbarYellow( m ) ); + } else { + ourState.Send( new MobileIncomingOld( this, m ) ); + } + + if( m.IsDeadBondedPet ) + ourState.Send( new BondedStatus( 0, m.m_Serial, 1 ) ); + + if( ObjectPropertyList.Enabled ) + { + ourState.Send( m.OPLPacket ); + + //foreach ( Item item in m.m_Items ) + // ourState.Send( item.OPLPacket ); + } + } + } + } + + eable.Free(); + } + else + { + eable = map.GetClientsInRange( newLocation ); + + // We're not attached to a client, so simply send an Incoming + foreach( NetState ns in eable ) + { + if( (isTeleport || !Utility.InUpdateRange( oldLocation, ns.Mobile.Location )) && ns.Mobile.CanSee( this ) ) + { + if ( ns.StygianAbyss ) { + ns.Send( new MobileIncoming( ns.Mobile, this ) ); + + if ( m_Poison != null ) + ns.Send( new HealthbarPoison( this ) ); + + if ( m_Blessed || m_YellowHealthbar ) + ns.Send( new HealthbarYellow( this ) ); + } else { + ns.Send( new MobileIncomingOld( ns.Mobile, this ) ); + } + + if( IsDeadBondedPet ) + ns.Send( new BondedStatus( 0, m_Serial, 1 ) ); + + if( ObjectPropertyList.Enabled ) + { + ns.Send( OPLPacket ); + + //foreach ( Item item in m_Items ) + // ns.Send( item.OPLPacket ); + } + } + } + + eable.Free(); + } + } + + OnLocationChange( oldLocation ); + + this.Region.OnLocationChanged( this, oldLocation ); + } + } + + /// + /// Overridable. Virtual event invoked when changes. + /// + protected virtual void OnLocationChange( Point3D oldLocation ) + { + } + + public int AnimationMod; + [CommandProperty(AccessLevel.Owner)] + public int Animation_Mod { get { return AnimationMod; } set { AnimationMod = value; InvalidateProperties(); } } + + #region Hair + + public int RecordHair; + [CommandProperty(AccessLevel.Owner)] + public int Record_Hair { get { return RecordHair; } set { RecordHair = value; InvalidateProperties(); } } + + public int RecordBeard; + [CommandProperty(AccessLevel.Owner)] + public int Record_Beard { get { return RecordBeard; } set { RecordBeard = value; InvalidateProperties(); } } + + public bool ColoredMsgs; + [CommandProperty(AccessLevel.Owner)] + public bool Colored_Msgs { get { return ColoredMsgs; } set { ColoredMsgs = value; InvalidateProperties(); } } + + private HairInfo m_Hair; + private FacialHairInfo m_FacialHair; + + [CommandProperty( AccessLevel.GameMaster )] + public int HairItemID + { + get + { + if( m_Hair == null ) + return 0; + + return m_Hair.ItemID; + } + set + { + if( m_Hair == null && value > 0 ) + m_Hair = new HairInfo( value ); + else if( value <= 0 ) + m_Hair = null; + else + m_Hair.ItemID = value; + + Delta( MobileDelta.Hair ); + } + } + + // [CommandProperty( AccessLevel.GameMaster )] + // public int HairSerial { get { return HairInfo.FakeSerial( this ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public int FacialHairItemID + { + get + { + if( m_FacialHair == null ) + return 0; + + return m_FacialHair.ItemID; + } + set + { + if( m_FacialHair == null && value > 0 ) + m_FacialHair = new FacialHairInfo( value ); + else if( value <= 0 ) + m_FacialHair = null; + else + m_FacialHair.ItemID = value; + + Delta( MobileDelta.FacialHair ); + } + } + + // [CommandProperty( AccessLevel.GameMaster )] + // public int FacialHairSerial { get { return FacialHairInfo.FakeSerial( this ); } } + + [CommandProperty( AccessLevel.GameMaster )] + public int HairHue + { + get + { + if( m_Hair == null ) + return 0; + return m_Hair.Hue; + } + set + { + if( m_Hair != null ) + { + m_Hair.Hue = value; + Delta( MobileDelta.Hair ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int FacialHairHue + { + get + { + if( m_FacialHair == null ) + return 0; + + return m_FacialHair.Hue; + } + set + { + if( m_FacialHair != null ) + { + m_FacialHair.Hue = value; + Delta( MobileDelta.FacialHair ); + } + } + } + + #endregion + + public bool HasFreeHand() + { + return FindItemOnLayer( Layer.TwoHanded ) == null; + } + + private IWeapon m_Weapon; + + [CommandProperty( AccessLevel.GameMaster )] + public virtual IWeapon Weapon + { + get + { + Item item = m_Weapon as Item; + + if( item != null && !item.Deleted && item.Parent == this && CanSee( item ) ) + return m_Weapon; + + m_Weapon = null; + + item = FindItemOnLayer( Layer.OneHanded ); + + if( item == null ) + item = FindItemOnLayer( Layer.TwoHanded ); + + if( item is IWeapon ) + return (m_Weapon = (IWeapon)item); + else + return GetDefaultWeapon(); + } + } + + public virtual IWeapon GetDefaultWeapon() + { + return m_DefaultWeapon; + } + + private InnBox m_InnBox; + + [CommandProperty( AccessLevel.GameMaster )] + public InnBox InnBox + { + get + { + if( m_InnBox != null && !m_InnBox.Deleted && m_InnBox.Parent == this ) + return m_InnBox; + + m_InnBox = FindItemOnLayer( Layer.Inn ) as InnBox; + + if( m_InnBox == null ) + AddItem( m_InnBox = new InnBox( this ) ); + + return m_InnBox; + } + } + + public InnBox FindInnNoCreate() + { + if( m_InnBox != null && !m_InnBox.Deleted && m_InnBox.Parent == this ) + return m_InnBox; + + m_InnBox = FindItemOnLayer( Layer.Inn ) as InnBox; + + return m_InnBox; + } + + private Container m_Backpack; + + [CommandProperty( AccessLevel.GameMaster )] + public Container Backpack + { + get + { + if( m_Backpack != null && !m_Backpack.Deleted && m_Backpack.Parent == this ) + return m_Backpack; + + return (m_Backpack = (FindItemOnLayer( Layer.Backpack ) as Container)); + } + } + + public virtual bool KeepsItemsOnDeath { get { return m_AccessLevel > AccessLevel.Player; } } + + public Item FindItemOnLayer( Layer layer ) + { + List eq = m_Items; + int count = eq.Count; + + for( int i = 0; i < count; ++i ) + { + Item item = eq[i]; + + if( !item.Deleted && item.Layer == layer ) + { + return item; + } + } + + return null; + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int X + { + get { return m_Location.m_X; } + set { Location = new Point3D( value, m_Location.m_Y, m_Location.m_Z ); } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Y + { + get { return m_Location.m_Y; } + set { Location = new Point3D( m_Location.m_X, value, m_Location.m_Z ); } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Z + { + get { return m_Location.m_Z; } + set { Location = new Point3D( m_Location.m_X, m_Location.m_Y, value ); } + } + + #region Effects & Particles + + public void MovingEffect( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode ) + { + Effects.SendMovingEffect( this, to, itemID, speed, duration, fixedDirection, explodes, hue, renderMode ); + } + + public void MovingEffect( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes ) + { + Effects.SendMovingEffect( this, to, itemID, speed, duration, fixedDirection, explodes, 0, 0 ); + } + + public void MovingParticles( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, EffectLayer layer, int unknown ) + { + Effects.SendMovingParticles( this, to, itemID, speed, duration, fixedDirection, explodes, hue, renderMode, effect, explodeEffect, explodeSound, layer, unknown ); + } + + public void MovingParticles( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, int unknown ) + { + Effects.SendMovingParticles( this, to, itemID, speed, duration, fixedDirection, explodes, hue, renderMode, effect, explodeEffect, explodeSound, (EffectLayer)255, unknown ); + } + + public void MovingParticles( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int effect, int explodeEffect, int explodeSound, int unknown ) + { + Effects.SendMovingParticles( this, to, itemID, speed, duration, fixedDirection, explodes, effect, explodeEffect, explodeSound, unknown ); + } + + public void MovingParticles( IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int effect, int explodeEffect, int explodeSound ) + { + Effects.SendMovingParticles( this, to, itemID, speed, duration, fixedDirection, explodes, 0, 0, effect, explodeEffect, explodeSound, 0 ); + } + + public void FixedEffect( int itemID, int speed, int duration, int hue, int renderMode ) + { + Effects.SendTargetEffect( this, itemID, speed, duration, hue, renderMode ); + } + + public void FixedEffect( int itemID, int speed, int duration ) + { + Effects.SendTargetEffect( this, itemID, speed, duration, 0, 0 ); + } + + public void FixedParticles( int itemID, int speed, int duration, int effect, int hue, int renderMode, EffectLayer layer, int unknown ) + { + Effects.SendTargetParticles( this, itemID, speed, duration, hue, renderMode, effect, layer, unknown ); + } + + public void FixedParticles( int itemID, int speed, int duration, int effect, int hue, int renderMode, EffectLayer layer ) + { + Effects.SendTargetParticles( this, itemID, speed, duration, hue, renderMode, effect, layer, 0 ); + } + + public void FixedParticles( int itemID, int speed, int duration, int effect, EffectLayer layer, int unknown ) + { + Effects.SendTargetParticles( this, itemID, speed, duration, 0, 0, effect, layer, unknown ); + } + + public void FixedParticles( int itemID, int speed, int duration, int effect, EffectLayer layer ) + { + Effects.SendTargetParticles( this, itemID, speed, duration, 0, 0, effect, layer, 0 ); + } + + public void BoltEffect( int hue ) + { + Effects.SendBoltEffect( this, true, hue ); + } + + #endregion + + public void SendIncomingPacket() + { + if( m_Map != null ) + { + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state.Mobile.CanSee( this ) ) + { + if ( state.StygianAbyss ) { + state.Send( new MobileIncoming( state.Mobile, this ) ); + + if ( m_Poison != null ) + state.Send( new HealthbarPoison( this ) ); + + if ( m_Blessed || m_YellowHealthbar ) + state.Send( new HealthbarYellow( this ) ); + } else { + state.Send( new MobileIncomingOld( state.Mobile, this ) ); + } + + if( IsDeadBondedPet ) + state.Send( new BondedStatus( 0, m_Serial, 1 ) ); + + if( ObjectPropertyList.Enabled ) + { + state.Send( OPLPacket ); + + //foreach ( Item item in m_Items ) + // state.Send( item.OPLPacket ); + } + } + } + + eable.Free(); + } + } + + public bool PlaceInBackpack( Item item ) + { + if( item.Deleted ) + return false; + + Container pack = this.Backpack; + + return pack != null && pack.TryDropItem( this, item, false ); + } + + public bool AddToBackpack( Item item ) + { + if( item.Deleted ) + return false; + + if( !PlaceInBackpack( item ) ) + { + Point3D loc = m_Location; + Map map = m_Map; + + if( (map == null || map == Map.Internal) && m_LogoutMap != null ) + { + loc = m_LogoutLocation; + map = m_LogoutMap; + } + + item.MoveToWorld( loc, map ); + return false; + } + + return true; + } + + public virtual bool CheckLift( Mobile from, Item item, ref LRReason reject ) + { + return true; + } + + public virtual bool CheckNonlocalLift( Mobile from, Item item ) + { + if( from == this || (from.AccessLevel > this.AccessLevel && from.AccessLevel >= AccessLevel.GameMaster) ) + return true; + + return false; + } + + public bool HasTrade + { + get + { + if( m_NetState != null ) + return m_NetState.Trades.Count > 0; + + return false; + } + } + + public virtual bool CheckTrade( Mobile to, Item item, SecureTradeContainer cont, bool message, bool checkItems, int plusItems, int plusWeight ) + { + return true; + } + + /// + /// Overridable. Event invoked when a Mobile () drops an onto the Mobile. + /// + public virtual bool OnDragDrop( Mobile from, Item dropped ) + { + if( from == this ) + { + Container pack = this.Backpack; + + if( pack != null ) + return dropped.DropToItem( from, pack, new Point3D( -1, -1, 0 ) ); + + return false; + } + else if( from.Player && this.Player && from.Alive && this.Alive && from.InRange( Location, 2 ) ) + { + NetState ourState = m_NetState; + NetState theirState = from.m_NetState; + + if( ourState != null && theirState != null ) + { + SecureTradeContainer cont = theirState.FindTradeContainer( this ); + + if( !from.CheckTrade( this, dropped, cont, true, true, 0, 0 ) ) + return false; + + if( cont == null ) + cont = theirState.AddTrade( ourState ); + + cont.DropItem( dropped ); + + return true; + } + + return false; + } + else + { + return false; + } + } + + public virtual bool CheckEquip( Item item ) + { + for( int i = 0; i < m_Items.Count; ++i ) + if( m_Items[i].CheckConflictingLayer( this, item, item.Layer ) || item.CheckConflictingLayer( this, m_Items[i], m_Items[i].Layer ) ) + return false; + + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile attempts to wear . + /// + /// True if the request is accepted, false if otherwise. + public virtual bool OnEquip( Item item ) + { + ProcessClothing(); + ProcessHair(); + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile attempts to lift . + /// + /// True if the lift is allowed, false if otherwise. + /// + /// The following example demonstrates usage. It will disallow any attempts to pick up a pick axe if the Mobile does not have enough strength. + /// + /// public override bool OnDragLift( Item item ) + /// { + /// if ( item is Pickaxe && this.Str < 60 ) + /// { + /// SendMessage( "That is too heavy for you to lift." ); + /// return false; + /// } + /// + /// return base.OnDragLift( item ); + /// } + /// + public virtual bool OnDragLift( Item item ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile attempts to drop into a . + /// + /// True if the drop is allowed, false if otherwise. + public virtual bool OnDroppedItemInto( Item item, Container container, Point3D loc ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile attempts to drop directly onto another , . This is the case of stacking items. + /// + /// True if the drop is allowed, false if otherwise. + public virtual bool OnDroppedItemOnto( Item item, Item target ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile attempts to drop into another , . The target item is most likely a . + /// + /// True if the drop is allowed, false if otherwise. + public virtual bool OnDroppedItemToItem( Item item, Item target, Point3D loc ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile attempts to give to a Mobile (). + /// + /// True if the drop is allowed, false if otherwise. + public virtual bool OnDroppedItemToMobile( Item item, Mobile target ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when the Mobile attempts to drop to the world at a . + /// + /// True if the drop is allowed, false if otherwise. + public virtual bool OnDroppedItemToWorld( Item item, Point3D location ) + { + return true; + } + + /// + /// Overridable. Virtual event when successfully uses while it's on this Mobile. + /// + /// + public virtual void OnItemUsed( Mobile from, Item item ) + { + } + + public virtual bool CheckNonlocalDrop( Mobile from, Item item, Item target ) + { + if( from == this || (from.AccessLevel > this.AccessLevel && from.AccessLevel >= AccessLevel.GameMaster) ) + return true; + + return false; + } + + public virtual bool CheckItemUse( Mobile from, Item item ) + { + return true; + } + + /// + /// Overridable. Virtual event invoked when successfully lifts from this Mobile. + /// + /// + public virtual void OnItemLifted( Mobile from, Item item ) + { + } + + public virtual bool AllowItemUse( Item item ) + { + return true; + } + + public virtual bool AllowEquipFrom( Mobile mob ) + { + return (mob == this || (mob.AccessLevel >= AccessLevel.GameMaster && mob.AccessLevel > this.AccessLevel)); + } + + public virtual bool EquipItem( Item item ) + { + if( item == null || item.Deleted || !item.CanEquip( this ) ) + return false; + + if( CheckEquip( item ) && OnEquip( item ) && item.OnEquip( this ) ) + { + if( m_Spell != null && !m_Spell.OnCasterEquiping( item ) ) + return false; + + //if ( m_Spell != null && m_Spell.State == SpellState.Casting ) + // m_Spell.Disturb( DisturbType.EquipRequest ); + + AddItem( item ); + return true; + } + + return false; + } + + internal int m_TypeRef; + + public Mobile( Serial serial ) + { + m_Region = Map.Internal.DefaultRegion; + m_Serial = serial; + m_Aggressors = new List(); + m_Aggressed = new List(); + m_NextSkillTime = DateTime.MinValue; + m_DamageEntries = new List(); + + Type ourType = this.GetType(); + m_TypeRef = World.m_MobileTypes.IndexOf( ourType ); + + if( m_TypeRef == -1 ) + { + World.m_MobileTypes.Add( ourType ); + m_TypeRef = World.m_MobileTypes.Count - 1; + } + } + + public Mobile() + { + m_Region = Map.Internal.DefaultRegion; + m_Serial = Server.Serial.NewMobile; + + DefaultMobileInit(); + + World.AddMobile( this ); + + Type ourType = this.GetType(); + m_TypeRef = World.m_MobileTypes.IndexOf( ourType ); + + if( m_TypeRef == -1 ) + { + World.m_MobileTypes.Add( ourType ); + m_TypeRef = World.m_MobileTypes.Count - 1; + } + } + + public void DefaultMobileInit() + { + m_StatCap = 225; + m_FollowersMax = 5; + m_Skills = new Skills( this ); + m_Items = new List(); + m_StatMods = new List(); + m_SkillMods = new List(); + Map = Map.Internal; + m_AutoPageNotify = true; + m_Aggressors = new List(); + m_Aggressed = new List(); + m_Stabled = new List(); + m_DamageEntries = new List(); + + m_NextSkillTime = DateTime.MinValue; + m_CreationTime = DateTime.Now; + } + + private static Queue m_DeltaQueue = new Queue(); + + private bool m_InDeltaQueue; + private MobileDelta m_DeltaFlags; + + public virtual void Delta( MobileDelta flag ) + { + if( m_Map == null || m_Map == Map.Internal || m_Deleted ) + return; + + m_DeltaFlags |= flag; + + if( !m_InDeltaQueue ) + { + m_InDeltaQueue = true; + + m_DeltaQueue.Enqueue( this ); + } + + Core.Set(); + } + + #region GetDirectionTo[..] + + public Direction GetDirectionTo( int x, int y ) + { + int dx = m_Location.m_X - x; + int dy = m_Location.m_Y - y; + + int rx = (dx - dy) * 44; + int ry = (dx + dy) * 44; + + int ax = Math.Abs( rx ); + int ay = Math.Abs( ry ); + + Direction ret; + + if( ((ay >> 1) - ax) >= 0 ) + ret = (ry > 0) ? Direction.Up : Direction.Down; + else if( ((ax >> 1) - ay) >= 0 ) + ret = (rx > 0) ? Direction.Left : Direction.Right; + else if( rx >= 0 && ry >= 0 ) + ret = Direction.West; + else if( rx >= 0 && ry < 0 ) + ret = Direction.South; + else if( rx < 0 && ry < 0 ) + ret = Direction.East; + else + ret = Direction.North; + + return ret; + } + + public Direction GetDirectionTo( Point2D p ) + { + return GetDirectionTo( p.m_X, p.m_Y ); + } + + public Direction GetDirectionTo( Point3D p ) + { + return GetDirectionTo( p.m_X, p.m_Y ); + } + + public Direction GetDirectionTo( IPoint2D p ) + { + if( p == null ) + return Direction.North; + + return GetDirectionTo( p.X, p.Y ); + } + + #endregion + + public virtual void ProcessDelta() + { + Mobile m = this; + MobileDelta delta; + + delta = m.m_DeltaFlags; + + if( delta == MobileDelta.None ) + return; + + MobileDelta attrs = delta & MobileDelta.Attributes; + + m.m_DeltaFlags = MobileDelta.None; + m.m_InDeltaQueue = false; + + bool sendHits = false, sendStam = false, sendMana = false, sendAll = false, sendAny = false; + bool sendIncoming = false, sendNonlocalIncoming = false; + bool sendUpdate = false, sendRemove = false; + bool sendPublicStats = false, sendPrivateStats = false; + bool sendMoving = false, sendNonlocalMoving = false; + bool sendOPLUpdate = ObjectPropertyList.Enabled && (delta & MobileDelta.Properties) != 0; + + bool sendHair = false, sendFacialHair = false, removeHair = false, removeFacialHair = false; + + bool sendHealthbarPoison = false, sendHealthbarYellow = false; + + if( attrs != MobileDelta.None ) + { + sendAny = true; + + if( attrs == MobileDelta.Attributes ) + { + sendAll = true; + } + else + { + sendHits = ((attrs & MobileDelta.Hits) != 0); + sendStam = ((attrs & MobileDelta.Stam) != 0); + sendMana = ((attrs & MobileDelta.Mana) != 0); + } + } + + if( (delta & MobileDelta.GhostUpdate) != 0 ) + { + sendNonlocalIncoming = true; + } + + if( (delta & MobileDelta.Hue) != 0 ) + { + sendNonlocalIncoming = true; + sendUpdate = true; + sendRemove = true; + } + + if( (delta & MobileDelta.Direction) != 0 ) + { + sendNonlocalMoving = true; + sendUpdate = true; + } + + if( (delta & MobileDelta.Body) != 0 ) + { + sendUpdate = true; + sendIncoming = true; + } + + /*if ( (delta & MobileDelta.Hue) != 0 ) + { + sendNonlocalIncoming = true; + sendUpdate = true; + } + else if ( (delta & (MobileDelta.Direction | MobileDelta.Body)) != 0 ) + { + sendNonlocalMoving = true; + sendUpdate = true; + } + else*/ + if( (delta & (MobileDelta.Flags | MobileDelta.Noto)) != 0 ) + { + sendMoving = true; + } + + if( (delta & MobileDelta.HealthbarPoison) != 0 ) + { + sendHealthbarPoison = true; + } + + if( (delta & MobileDelta.HealthbarYellow) != 0 ) + { + sendHealthbarYellow = true; + } + + if( (delta & MobileDelta.Name) != 0 ) + { + sendAll = false; + sendHits = false; + sendAny = sendStam || sendMana; + sendPublicStats = true; + } + + if( (delta & (MobileDelta.WeaponDamage | MobileDelta.Stat | MobileDelta.Weight | MobileDelta.Gold | MobileDelta.Armor | MobileDelta.StatCap | MobileDelta.Followers | MobileDelta.Race)) != 0 ) + { + sendPrivateStats = true; + } + + if( (delta & MobileDelta.Hair) != 0 ) + { + if( m.HairItemID <= 0 ) + removeHair = true; + + sendHair = true; + } + + if( (delta & MobileDelta.FacialHair) != 0 ) + { + if( m.FacialHairItemID <= 0 ) + removeFacialHair = true; + + sendFacialHair = true; + } + + Packet[][] cache = m_MovingPacketCache; + + if( sendMoving || sendNonlocalMoving || sendHealthbarPoison || sendHealthbarYellow ) + { + for( int i = 0; i < cache.Length; ++i ) + for( int j = 0; j < cache[i].Length; ++j ) + Packet.Release( ref cache[i][j] ); + } + + NetState ourState = m.m_NetState; + + if( ourState != null ) + { + if( sendUpdate ) + { + ourState.Sequence = 0; + + if ( ourState.StygianAbyss ) + ourState.Send( new MobileUpdate( m ) ); + else + ourState.Send( new MobileUpdateOld( m ) ); + + ClearFastwalkStack(); + } + + if ( ourState.StygianAbyss ) { + if( sendIncoming ) + ourState.Send( new MobileIncoming( m, m ) ); + + if( sendMoving ) + { + int noto = Notoriety.Compute( m, m ); + ourState.Send( cache[0][noto] = Packet.Acquire( new MobileMoving( m, noto ) ) ); + } + + if ( sendHealthbarPoison ) + ourState.Send( new HealthbarPoison( m ) ); + + if ( sendHealthbarYellow ) + ourState.Send( new HealthbarYellow( m ) ); + } else { + if( sendIncoming ) + ourState.Send( new MobileIncomingOld( m, m ) ); + + if( sendMoving || sendHealthbarPoison || sendHealthbarYellow ) + { + int noto = Notoriety.Compute( m, m ); + ourState.Send( cache[1][noto] = Packet.Acquire( new MobileMovingOld( m, noto ) ) ); + } + } + + if( sendPublicStats || sendPrivateStats ) + { + ourState.Send( new MobileStatusExtended( m, m_NetState ) ); + } + else if( sendAll ) + { + ourState.Send( new MobileAttributes( m ) ); + } + else if( sendAny ) + { + if( sendHits ) + ourState.Send( new MobileHits( m ) ); + + if( sendStam ) + ourState.Send( new MobileStam( m ) ); + + if( sendMana ) + ourState.Send( new MobileMana( m ) ); + } + + if( sendStam || sendMana ) + { + IParty ip = m_Party as IParty; + + if( ip != null && sendStam ) + ip.OnStamChanged( this ); + + if( ip != null && sendMana ) + ip.OnManaChanged( this ); + } + + if( sendHair ) + { + if( removeHair ) + ourState.Send( new RemoveHair( m ) ); + else + ourState.Send( new HairEquipUpdate( m ) ); + } + + if( sendFacialHair ) + { + if( removeFacialHair ) + ourState.Send( new RemoveFacialHair( m ) ); + else + ourState.Send( new FacialHairEquipUpdate( m ) ); + } + + if( sendOPLUpdate ) + ourState.Send( OPLPacket ); + } + + sendMoving = sendMoving || sendNonlocalMoving; + sendIncoming = sendIncoming || sendNonlocalIncoming; + sendHits = sendHits || sendAll; + + if( m.m_Map != null && (sendRemove || sendIncoming || sendPublicStats || sendHits || sendMoving || sendOPLUpdate || sendHair || sendFacialHair || sendHealthbarPoison || sendHealthbarYellow) ) + { + Mobile beholder; + + IPooledEnumerable eable = m.Map.GetClientsInRange( m.m_Location ); + + Packet hitsPacket = null; + Packet statPacketTrue = null, statPacketFalse = null; + Packet deadPacket = null; + Packet hairPacket = null, facialhairPacket = null; + Packet hbpPacket = null, hbyPacket = null; + + foreach( NetState state in eable ) + { + beholder = state.Mobile; + + if( beholder != m && beholder.CanSee( m ) ) + { + if( sendRemove ) + state.Send( m.RemovePacket ); + + if( sendIncoming ) + { + if ( state.StygianAbyss ) { + state.Send( new MobileIncoming( beholder, m ) ); + } else { + state.Send( new MobileIncomingOld( beholder, m ) ); + } + + if( m.IsDeadBondedPet ) + { + if( deadPacket == null ) + deadPacket = Packet.Acquire( new BondedStatus( 0, m.m_Serial, 1 ) ); + + state.Send( deadPacket ); + } + } + + if ( state.StygianAbyss ) { + if( sendMoving ) + { + int noto = Notoriety.Compute( beholder, m ); + + Packet p = cache[0][noto]; + + if( p == null ) + cache[0][noto] = p = Packet.Acquire( new MobileMoving( m, noto ) ); + + state.Send( p ); + } + + if ( sendHealthbarPoison ) { + if ( hbpPacket == null ) + hbpPacket = Packet.Acquire( new HealthbarPoison( m ) ); + + state.Send( hbpPacket ); + } + + if ( sendHealthbarYellow ) { + if ( hbyPacket == null ) + hbyPacket = Packet.Acquire( new HealthbarYellow( m ) ); + state.Send( hbyPacket ); + } + } else { + if( sendMoving || sendHealthbarPoison || sendHealthbarYellow ) + { + int noto = Notoriety.Compute( beholder, m ); + + Packet p = cache[1][noto]; + + if( p == null ) + cache[1][noto] = p = Packet.Acquire( new MobileMovingOld( m, noto ) ); + + state.Send( p ); + } + } + + if( sendPublicStats ) + { + if( m.CanBeRenamedBy( beholder ) ) + { + if( statPacketTrue == null ) + statPacketTrue = Packet.Acquire( new MobileStatusCompact( true, m ) ); + + state.Send( statPacketTrue ); + } + else + { + if( statPacketFalse == null ) + statPacketFalse = Packet.Acquire( new MobileStatusCompact( false, m ) ); + + state.Send( statPacketFalse ); + } + } + else if( sendHits ) + { + if( hitsPacket == null ) + hitsPacket = Packet.Acquire( new MobileHitsN( m ) ); + + state.Send( hitsPacket ); + } + + if( sendHair ) + { + if( hairPacket == null ) + { + if( removeHair ) + hairPacket = Packet.Acquire( new RemoveHair( m ) ); + else + hairPacket = Packet.Acquire( new HairEquipUpdate( m ) ); + } + + state.Send( hairPacket ); + } + + if( sendFacialHair ) + { + if( facialhairPacket == null ) + { + if( removeFacialHair ) + facialhairPacket = Packet.Acquire( new RemoveFacialHair( m ) ); + else + facialhairPacket = Packet.Acquire( new FacialHairEquipUpdate( m ) ); + } + + state.Send( facialhairPacket ); + } + + if( sendOPLUpdate ) + state.Send( OPLPacket ); + } + } + + Packet.Release( hitsPacket ); + Packet.Release( statPacketTrue ); + Packet.Release( statPacketFalse ); + Packet.Release( deadPacket ); + Packet.Release( hairPacket ); + Packet.Release( facialhairPacket ); + Packet.Release( hbpPacket ); + Packet.Release( hbyPacket ); + + eable.Free(); + } + + if( sendMoving || sendNonlocalMoving || sendHealthbarPoison || sendHealthbarYellow ) + { + for( int i = 0; i < cache.Length; ++i ) + for( int j = 0; j < cache.Length; ++j ) + Packet.Release( ref cache[i][j] ); + } + } + + public static void ProcessDeltaQueue() + { + int count = m_DeltaQueue.Count; + int index = 0; + + while( m_DeltaQueue.Count > 0 && index++ < count ) + m_DeltaQueue.Dequeue().ProcessDelta(); + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Kills + { + get + { + return m_Kills; + } + set + { + int oldValue = m_Kills; + + if( m_Kills != value ) + { + m_Kills = value; + + if( m_Kills < 0 ) + m_Kills = 0; + + if( (oldValue >= 5) != (m_Kills >= 5) ) + { + Delta( MobileDelta.Noto ); + InvalidateProperties(); + } + + OnKillsChange( oldValue ); + } + } + } + + public virtual void OnKillsChange( int oldValue ) + { + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public bool Criminal + { + get + { + return m_Criminal; + } + set + { + if( m_Criminal != value ) + { + m_Criminal = value; + Delta( MobileDelta.Noto ); + InvalidateProperties(); + } + + if( m_Criminal ) + { + if( m_ExpireCriminal == null ) + m_ExpireCriminal = new ExpireCriminalTimer( this ); + else + m_ExpireCriminal.Stop(); + + m_ExpireCriminal.Start(); + } + else if( m_ExpireCriminal != null ) + { + m_ExpireCriminal.Stop(); + m_ExpireCriminal = null; + } + } + } + + public bool CheckAlive() + { + return CheckAlive( true ); + } + + public bool CheckAlive( bool message ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + + if( !Alive ) + { + if( message ) + this.LocalOverheadMessage( MessageType.Regular, hue, 1019048 ); // I am dead and cannot do that. + + return false; + } + else + { + return true; + } + } + + #region Overhead messages + + public void PublicOverheadMessage( MessageType type, int hue, bool ascii, string text ) + { + PublicOverheadMessage( type, hue, ascii, text, true ); + } + + public void PublicOverheadMessage( MessageType type, int hue, bool ascii, string text, bool noLineOfSight ) + { + if( m_Map != null ) + { + Packet p = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state.Mobile.CanSee( this ) && (noLineOfSight || state.Mobile.InLOS( this )) ) + { + if( p == null ) + { + if( ascii ) + p = new AsciiMessage( m_Serial, Body, type, hue, 3, Name, text ); + else + p = new UnicodeMessage( m_Serial, Body, type, hue, 3, m_Language, Name, text ); + + p.Acquire(); + } + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + public void PublicOverheadMessage( MessageType type, int hue, int number ) + { + PublicOverheadMessage( type, hue, number, "", true ); + } + + public void PublicOverheadMessage( MessageType type, int hue, int number, string args ) + { + PublicOverheadMessage( type, hue, number, args, true ); + } + + public void PublicOverheadMessage( MessageType type, int hue, int number, string args, bool noLineOfSight ) + { + if( m_Map != null ) + { + Packet p = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state.Mobile.CanSee( this ) && (noLineOfSight || state.Mobile.InLOS( this )) ) + { + if( p == null ) + p = Packet.Acquire( new MessageLocalized( m_Serial, Body, type, hue, 3, number, Name, args ) ); + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + public void PublicOverheadMessage( MessageType type, int hue, int number, AffixType affixType, string affix, string args ) + { + PublicOverheadMessage( type, hue, number, affixType, affix, args, true ); + } + + public void PublicOverheadMessage( MessageType type, int hue, int number, AffixType affixType, string affix, string args, bool noLineOfSight ) + { + if( m_Map != null ) + { + Packet p = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state.Mobile.CanSee( this ) && (noLineOfSight || state.Mobile.InLOS( this )) ) + { + if( p == null ) + p = Packet.Acquire( new MessageLocalizedAffix( m_Serial, Body, type, hue, 3, number, Name, affixType, affix, args ) ); + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + public void PrivateOverheadMessage( MessageType type, int hue, bool ascii, string text, NetState state ) + { + if( state == null ) + return; + + if( ascii ) + state.Send( new AsciiMessage( m_Serial, Body, type, hue, 3, Name, text ) ); + else + state.Send( new UnicodeMessage( m_Serial, Body, type, hue, 3, m_Language, Name, text ) ); + } + + public void PrivateOverheadMessage( MessageType type, int hue, int number, NetState state ) + { + PrivateOverheadMessage( type, hue, number, "", state ); + } + + public void PrivateOverheadMessage( MessageType type, int hue, int number, string args, NetState state ) + { + if( state == null ) + return; + + state.Send( new MessageLocalized( m_Serial, Body, type, hue, 3, number, Name, args ) ); + } + + public void LocalOverheadMessage( MessageType type, int hue, bool ascii, string text ) + { + NetState ns = m_NetState; + + if( ns != null ) + { + if( ascii ) + ns.Send( new AsciiMessage( m_Serial, Body, type, hue, 3, Name, text ) ); + else + ns.Send( new UnicodeMessage( m_Serial, Body, type, hue, 3, m_Language, Name, text ) ); + } + } + + public void LocalOverheadMessage( MessageType type, int hue, int number ) + { + LocalOverheadMessage( type, hue, number, "" ); + } + + public void LocalOverheadMessage( MessageType type, int hue, int number, string args ) + { + NetState ns = m_NetState; + + if( ns != null ) + ns.Send( new MessageLocalized( m_Serial, Body, type, hue, 3, number, Name, args ) ); + } + + public void NonlocalOverheadMessage( MessageType type, int hue, int number ) + { + NonlocalOverheadMessage( type, hue, number, "" ); + } + + public void NonlocalOverheadMessage( MessageType type, int hue, int number, string args ) + { + if( m_Map != null ) + { + Packet p = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state != m_NetState && state.Mobile.CanSee( this ) ) + { + if( p == null ) + p = Packet.Acquire( new MessageLocalized( m_Serial, Body, type, hue, 3, number, Name, args ) ); + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + public void NonlocalOverheadMessage( MessageType type, int hue, bool ascii, string text ) + { + if( m_Map != null ) + { + Packet p = null; + + IPooledEnumerable eable = m_Map.GetClientsInRange( m_Location ); + + foreach( NetState state in eable ) + { + if( state != m_NetState && state.Mobile.CanSee( this ) ) + { + if( p == null ) + { + if( ascii ) + p = new AsciiMessage( m_Serial, Body, type, hue, 3, Name, text ); + else + p = new UnicodeMessage( m_Serial, Body, type, hue, 3, Language, Name, text ); + + p.Acquire(); + } + + state.Send( p ); + } + } + + Packet.Release( p ); + + eable.Free(); + } + } + + #endregion + + #region SendLocalizedMessage + + public void SendLocalizedMessage( int number ) + { + NetState ns = m_NetState; + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + + if( ns != null ) + SendLocalizedMessage( number, null, hue ); + } + + public void SendLocalizedMessage( int number, string args ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + SendLocalizedMessage( number, args, hue ); + } + + public void SendLocalizedMessage( int number, string args, int hue ) + { + if( hue == 0x3B2 && (args == null || args.Length == 0) ) + { + NetState ns = m_NetState; + + if( ns != null ) + ns.Send( MessageLocalized.InstantiateGeneric( number ) ); + } + else + { + NetState ns = m_NetState; + + if( ns != null ) + ns.Send( new MessageLocalized( Serial.MinusOne, -1, MessageType.Regular, hue, 3, number, "System", args ) ); + } + } + + public void SendLocalizedMessage( int number, bool append, string affix ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + SendLocalizedMessage( number, append, affix, "", hue ); + } + + public void SendLocalizedMessage( int number, bool append, string affix, string args ) + { + SendLocalizedMessage( number, append, affix, args ); + } + + public void SendLocalizedMessage( int number, bool append, string affix, string args, int hue ) + { + NetState ns = m_NetState; + + if( ns != null ) + ns.Send( new MessageLocalizedAffix( Serial.MinusOne, -1, MessageType.Regular, hue, 3, number, "System", (append ? AffixType.Append : AffixType.Prepend) | AffixType.System, affix, args ) ); + } + + #endregion + + public void LaunchBrowser( string url ) + { + if( m_NetState != null ) + m_NetState.LaunchBrowser( url ); + } + + #region Send[ASCII]Message + + public void SendMessage( string text ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + SendMessage( hue, text ); + } + + public void SendMessage( string format, params object[] args ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + SendMessage( hue, String.Format( format, args ) ); + } + + public void SendMessage( int hue, string text ) + { + NetState ns = m_NetState; + + if( ns != null ) + ns.Send( new UnicodeMessage( Serial.MinusOne, -1, MessageType.Regular, hue, 3, "ENU", "System", text ) ); + } + + public void SendMessage( int hue, string format, params object[] args ) + { + SendMessage( hue, String.Format( format, args ) ); + } + + public void SendAsciiMessage( string text ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + SendAsciiMessage( hue, text ); + } + + public void SendAsciiMessage( string format, params object[] args ) + { + int hue = 0x3B2; if ( ColoredMsgs ){ hue = Utility.RandomSpeechHue(); } + SendAsciiMessage( hue, String.Format( format, args ) ); + } + + public void SendAsciiMessage( int hue, string text ) + { + NetState ns = m_NetState; + + if( ns != null ) + ns.Send( new AsciiMessage( Serial.MinusOne, -1, MessageType.Regular, hue, 3, "System", text ) ); + } + + public void SendAsciiMessage( int hue, string format, params object[] args ) + { + SendAsciiMessage( hue, String.Format( format, args ) ); + } + + #endregion + + #region InRange + public bool InRange( Point2D p, int range ) + { + return (p.m_X >= (m_Location.m_X - range)) + && (p.m_X <= (m_Location.m_X + range)) + && (p.m_Y >= (m_Location.m_Y - range)) + && (p.m_Y <= (m_Location.m_Y + range)); + } + + public bool InRange( Point3D p, int range ) + { + return (p.m_X >= (m_Location.m_X - range)) + && (p.m_X <= (m_Location.m_X + range)) + && (p.m_Y >= (m_Location.m_Y - range)) + && (p.m_Y <= (m_Location.m_Y + range)); + } + + public bool InRange( IPoint2D p, int range ) + { + return (p.X >= (m_Location.m_X - range)) + && (p.X <= (m_Location.m_X + range)) + && (p.Y >= (m_Location.m_Y - range)) + && (p.Y <= (m_Location.m_Y + range)); + } + #endregion + + public void InitStats( int str, int dex, int intel ) + { + m_Str = str; + m_Dex = dex; + m_Int = intel; + + Hits = HitsMax; + Stam = StamMax; + Mana = ManaMax; + + Delta( MobileDelta.Stat | MobileDelta.Hits | MobileDelta.Stam | MobileDelta.Mana ); + } + + public virtual void DisplayPaperdollTo( Mobile to ) + { + EventSink.InvokePaperdollRequest( new PaperdollRequestEventArgs( to, this ) ); + } + + private static bool m_DisableDismountInWarmode; + + public static bool DisableDismountInWarmode { get { return m_DisableDismountInWarmode; } set { m_DisableDismountInWarmode = value; } } + + #region OnDoubleClick[..] + + /// + /// Overridable. Event invoked when the Mobile is double clicked. By default, this method can either dismount or open the paperdoll. + /// + /// + /// + public virtual void OnDoubleClick( Mobile from ) + { + if( this == from && (!m_DisableDismountInWarmode || !m_Warmode) ) + { + IMount mount = Mount; + + if( mount != null ) + { + mount.Rider = null; + return; + } + } + + if( CanPaperdollBeOpenedBy( from ) ) + DisplayPaperdollTo( from ); + } + + /// + /// Overridable. Virtual event invoked when the Mobile is double clicked by someone who is over 18 tiles away. + /// + /// + public virtual void OnDoubleClickOutOfRange( Mobile from ) + { + } + + /// + /// Overridable. Virtual event invoked when the Mobile is double clicked by someone who can no longer see the Mobile. This may happen, for example, using 'Last Object' after the Mobile has hidden. + /// + /// + public virtual void OnDoubleClickCantSee( Mobile from ) + { + } + + /// + /// Overridable. Event invoked when the Mobile is double clicked by someone who is not alive. Similar to , this method will show the paperdoll. It does not, however, provide any dismount functionality. + /// + /// + public virtual void OnDoubleClickDead( Mobile from ) + { + if( CanPaperdollBeOpenedBy( from ) ) + DisplayPaperdollTo( from ); + } + + #endregion + + /// + /// Overridable. Event invoked when the Mobile requests to open his own paperdoll via the 'Open Paperdoll' macro. + /// + public virtual void OnPaperdollRequest() + { + if( CanPaperdollBeOpenedBy( this ) ) + DisplayPaperdollTo( this ); + } + + private static int m_BodyWeight = 14; + + public static int BodyWeight { get { return m_BodyWeight; } set { m_BodyWeight = value; } } + + /// + /// Overridable. Event invoked when wants to see this Mobile's stats. + /// + /// + public virtual void OnStatsQuery( Mobile from ) + { + if( from.Map == this.Map && Utility.InUpdateRange( this, from ) && from.CanSee( this ) ) + from.Send( new MobileStatus( from, this, m_NetState ) ); + + if( from == this ) + Send( new StatLockInfo( this ) ); + + IParty ip = m_Party as IParty; + + if( ip != null ) + ip.OnStatsQuery( from, this ); + } + + /// + /// Overridable. Event invoked when wants to see this Mobile's skills. + /// + public virtual void OnSkillsQuery( Mobile from ) + { + if( from == this ) + Send( new SkillUpdate( m_Skills ) ); + } + + /// + /// Overridable. Virtual event invoked when changes. + /// + public virtual void OnRegionChange( Region Old, Region New ) + { + } + + private Item m_MountItem; + + [CommandProperty( AccessLevel.GameMaster )] + public IMount Mount + { + get + { + IMountItem mountItem = null; + + if( m_MountItem != null && !m_MountItem.Deleted && m_MountItem.Parent == this ) + mountItem = (IMountItem)m_MountItem; + + if( mountItem == null ) + m_MountItem = (mountItem = (FindItemOnLayer( Layer.Mount ) as IMountItem)) as Item; + + return mountItem == null ? null : mountItem.Mount; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Mounted + { + get + { + return (Mount != null); + } + } + + private QuestArrow m_QuestArrow; + + public QuestArrow QuestArrow + { + get + { + return m_QuestArrow; + } + set + { + if( m_QuestArrow != value ) + { + if( m_QuestArrow != null ) + m_QuestArrow.Stop(); + + m_QuestArrow = value; + } + } + } + + private static string[] m_GuildTypes = new string[] + { + "", + " (Chaos)", + " (Order)" + }; + + public virtual bool CanTarget { get { return true; } } + public virtual bool ClickTitle { get { return true; } } + + public virtual bool PropertyTitle { get { return m_OldPropertyTitles ? ClickTitle : true; } } + + private static bool m_DisableHiddenSelfClick = true; + private static bool m_AsciiClickMessage = true; + private static bool m_GuildClickMessage = true; + private static bool m_OldPropertyTitles; + + public static bool DisableHiddenSelfClick { get { return m_DisableHiddenSelfClick; } set { m_DisableHiddenSelfClick = value; } } + public static bool AsciiClickMessage { get { return m_AsciiClickMessage; } set { m_AsciiClickMessage = value; } } + public static bool GuildClickMessage { get { return m_GuildClickMessage; } set { m_GuildClickMessage = value; } } + public static bool OldPropertyTitles { get { return m_OldPropertyTitles; } set { m_OldPropertyTitles = value; } } + + public virtual bool ShowFameTitle { get { return true; } }//(m_Player || m_Body.IsHuman) && m_Fame >= 10000; } + + /// + /// Overridable. Event invoked when the Mobile is single clicked. + /// + public virtual void OnSingleClick( Mobile from ) + { + if( m_Deleted ) + return; + else if( AccessLevel == AccessLevel.Player && DisableHiddenSelfClick && Hidden && from == this ) + return; + + if( m_GuildClickMessage ) + { + BaseGuild guild = m_Guild; + + if( guild != null && (m_DisplayGuildTitle || (m_Player && guild.Type != GuildType.Regular)) ) + { + string title = GuildTitle; + string type; + + if( title == null ) + title = ""; + else + title = title.Trim(); + + if( guild.Type >= 0 && (int)guild.Type < m_GuildTypes.Length ) + type = m_GuildTypes[(int)guild.Type]; + else + type = ""; + + string text = String.Format( title.Length <= 0 ? "[{1}]{2}" : "[{0}, {1}]{2}", title, guild.Abbreviation, type ); + + PrivateOverheadMessage( MessageType.Regular, SpeechHue, true, text, from.NetState ); + } + } + + int hue; + + if( m_NameHue != -1 ) + hue = m_NameHue; + else if( AccessLevel > AccessLevel.Player ) + hue = 11; + else + hue = Notoriety.GetHue( Notoriety.Compute( from, this ) ); + + string name = Name; + + if( name == null ) + name = String.Empty; + + string prefix = ""; + + if( ShowFameTitle && (m_Player || m_Body.IsHuman) && m_Fame >= 10000 ) + prefix = (m_Female ? "Lady" : "Lord"); + + string suffix = ""; + + if( ClickTitle && Title != null && Title.Length > 0 ) + suffix = Title; + + suffix = ApplyNameSuffix( suffix ); + + string val; + + if( prefix.Length > 0 && suffix.Length > 0 ) + val = String.Concat( prefix, " ", name, " ", suffix ); + else if( prefix.Length > 0 ) + val = String.Concat( prefix, " ", name ); + else if( suffix.Length > 0 ) + val = String.Concat( name, " ", suffix ); + else + val = name; + + PrivateOverheadMessage( MessageType.Label, hue, m_AsciiClickMessage, val, from.NetState ); + } + + public bool CheckSkill( SkillName skill, double minSkill, double maxSkill ) + { + if( m_SkillCheckLocationHandler == null ) + return false; + else + return m_SkillCheckLocationHandler( this, skill, minSkill, maxSkill ); + } + + public bool CheckSkill( SkillName skill, double chance ) + { + if( m_SkillCheckDirectLocationHandler == null ) + return false; + else + return m_SkillCheckDirectLocationHandler( this, skill, chance ); + } + + public bool CheckTargetSkill( SkillName skill, object target, double minSkill, double maxSkill ) + { + if( m_SkillCheckTargetHandler == null ) + return false; + else + return m_SkillCheckTargetHandler( this, skill, target, minSkill, maxSkill ); + } + + public bool CheckTargetSkill( SkillName skill, object target, double chance ) + { + if( m_SkillCheckDirectTargetHandler == null ) + return false; + else + return m_SkillCheckDirectTargetHandler( this, skill, target, chance ); + } + + public virtual void DisruptiveAction() + { + if( Meditating ) + { + Meditating = false; + SendLocalizedMessage( 500134 ); // You stop meditating. + } + } + + #region Armor + public Item ShieldArmor + { + get + { + return FindItemOnLayer( Layer.TwoHanded ) as Item; + } + } + + public Item NeckArmor + { + get + { + return FindItemOnLayer( Layer.Neck ) as Item; + } + } + + public Item HandArmor + { + get + { + return FindItemOnLayer( Layer.Gloves ) as Item; + } + } + + public Item HeadArmor + { + get + { + return FindItemOnLayer( Layer.Helm ) as Item; + } + } + + public Item ArmsArmor + { + get + { + return FindItemOnLayer( Layer.Arms ) as Item; + } + } + + public Item LegsArmor + { + get + { + Item ar = FindItemOnLayer( Layer.InnerLegs ) as Item; + + if( ar == null ) + ar = FindItemOnLayer( Layer.Pants ) as Item; + + return ar; + } + } + + public Item ChestArmor + { + get + { + Item ar = FindItemOnLayer( Layer.InnerTorso ) as Item; + + if( ar == null ) + ar = FindItemOnLayer( Layer.Shirt ) as Item; + + return ar; + } + } + + #endregion + + /// + /// Gets or sets the maximum attainable value for , , and . + /// + [CommandProperty( AccessLevel.GameMaster )] + public int StatCap + { + get + { + return m_StatCap; + } + set + { + if( m_StatCap != value ) + { + m_StatCap = value; + + Delta( MobileDelta.StatCap ); + } + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool Meditating + { + get + { + return m_Meditating; + } + set + { + m_Meditating = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool CanSwim + { + get + { + return m_CanSwim; + } + set + { + m_CanSwim = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool CantWalk + { + get + { + return m_CantWalk; + } + set + { + m_CantWalk = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool WillSwim + { + get + { + return m_WillSwim; + } + set + { + m_WillSwim = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool WontWalk + { + get + { + return m_WontWalk; + } + set + { + m_WontWalk = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public bool CanHearGhosts + { + get + { + return m_CanHearGhosts || AccessLevel >= AccessLevel.Counselor; + } + set + { + m_CanHearGhosts = value; + } + } + + [CommandProperty( AccessLevel.GameMaster )] + public int RawStatTotal + { + get + { + return RawStr + RawDex + RawInt; + } + } + + public DateTime NextSpellTime + { + get + { + return m_NextSpellTime; + } + set + { + m_NextSpellTime = value; + } + } + + /// + /// Overridable. Virtual event invoked when the sector this Mobile is in gets activated. + /// + public virtual void OnSectorActivate() + { + } + + /// + /// Overridable. Virtual event invoked when the sector this Mobile is in gets deactivated. + /// + public virtual void OnSectorDeactivate() + { + } + } +} \ No newline at end of file diff --git a/Source/Movement.cs b/Source/Movement.cs new file mode 100644 index 0000000..29bd3ed --- /dev/null +++ b/Source/Movement.cs @@ -0,0 +1,75 @@ +/*************************************************************************** + * Movement.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; + +namespace Server.Movement +{ + public static class Movement + { + private static IMovementImpl m_Impl; + + public static IMovementImpl Impl + { + get{ return m_Impl; } + set{ m_Impl = value; } + } + + public static bool CheckMovement( Mobile m, Direction d, out int newZ ) + { + if ( m_Impl != null ) + return m_Impl.CheckMovement( m, d, out newZ ); + + newZ = m.Z; + return false; + } + + public static bool CheckMovement( Mobile m, Map map, Point3D loc, Direction d, out int newZ ) + { + if ( m_Impl != null ) + return m_Impl.CheckMovement( m, map, loc, d, out newZ ); + + newZ = m.Z; + return false; + } + + public static void Offset( Direction d, ref int x, ref int y ) + { + switch ( d & Direction.Mask ) + { + case Direction.North: --y; break; + case Direction.South: ++y; break; + case Direction.West: --x; break; + case Direction.East: ++x; break; + case Direction.Right: ++x; --y; break; + case Direction.Left: --x; ++y; break; + case Direction.Down: ++x; ++y; break; + case Direction.Up: --x; --y; break; + } + } + } + + public interface IMovementImpl + { + bool CheckMovement( Mobile m, Direction d, out int newZ ); + bool CheckMovement( Mobile m, Map map, Point3D loc, Direction d, out int newZ ); + } +} \ No newline at end of file diff --git a/Source/MultiData.cs b/Source/MultiData.cs new file mode 100644 index 0000000..f9186b7 --- /dev/null +++ b/Source/MultiData.cs @@ -0,0 +1,596 @@ +/*************************************************************************** + * MultiData.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.IO; + +namespace Server +{ + public static class MultiData + { + private static MultiComponentList[] m_Components; + + private static FileStream m_Index, m_Stream; + private static BinaryReader m_IndexReader, m_StreamReader; + + public static MultiComponentList GetComponents( int multiID ) + { + MultiComponentList mcl; + + if ( multiID >= 0 && multiID < m_Components.Length ) + { + mcl = m_Components[multiID]; + + if ( mcl == null ) + m_Components[multiID] = mcl = Load( multiID ); + } + else + { + mcl = MultiComponentList.Empty; + } + + return mcl; + } + + public static MultiComponentList Load( int multiID ) + { + try + { + m_IndexReader.BaseStream.Seek( multiID * 12, SeekOrigin.Begin ); + + int lookup = m_IndexReader.ReadInt32(); + int length = m_IndexReader.ReadInt32(); + + if ( lookup < 0 || length <= 0 ) + return MultiComponentList.Empty; + + m_StreamReader.BaseStream.Seek( lookup, SeekOrigin.Begin ); + + return new MultiComponentList( m_StreamReader, length / ( MultiComponentList.PostHSFormat ? 16 : 12 ) ); + } + catch + { + return MultiComponentList.Empty; + } + } + + static MultiData() + { + string idxPath = Core.FindDataFile( "multi.idx" ); + string mulPath = Core.FindDataFile( "multi.mul" ); + + if ( File.Exists( idxPath ) && File.Exists( mulPath ) ) + { + m_Index = new FileStream( idxPath, FileMode.Open, FileAccess.Read, FileShare.Read ); + m_IndexReader = new BinaryReader( m_Index ); + + m_Stream = new FileStream( mulPath, FileMode.Open, FileAccess.Read, FileShare.Read ); + m_StreamReader = new BinaryReader( m_Stream ); + + m_Components = new MultiComponentList[(int)(m_Index.Length / 12)]; + + string vdPath = Core.FindDataFile( "verdata.mul" ); + + if ( File.Exists( vdPath ) ) + { + using ( FileStream fs = new FileStream( vdPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + BinaryReader bin = new BinaryReader( fs ); + + int count = bin.ReadInt32(); + + for ( int i = 0; i < count; ++i ) + { + int file = bin.ReadInt32(); + int index = bin.ReadInt32(); + int lookup = bin.ReadInt32(); + int length = bin.ReadInt32(); + int extra = bin.ReadInt32(); + + if ( file == 14 && index >= 0 && index < m_Components.Length && lookup >= 0 && length > 0 ) + { + bin.BaseStream.Seek( lookup, SeekOrigin.Begin ); + + m_Components[index] = new MultiComponentList( bin, length / 12 ); + + bin.BaseStream.Seek( 24 + (i * 20), SeekOrigin.Begin ); + } + } + + bin.Close(); + } + } + } + else + { + Console.WriteLine( "Warning: Multi data files not found" ); + + m_Components = new MultiComponentList[0]; + } + } + } + + public struct MultiTileEntry + { + public ushort m_ItemID; + public short m_OffsetX, m_OffsetY, m_OffsetZ; + public int m_Flags; + + public MultiTileEntry( ushort itemID, short xOffset, short yOffset, short zOffset, int flags ) + { + m_ItemID = itemID; + m_OffsetX = xOffset; + m_OffsetY = yOffset; + m_OffsetZ = zOffset; + m_Flags = flags; + } + } + + public sealed class MultiComponentList + { + public static bool PostHSFormat { + get { return _PostHSFormat; } + set { _PostHSFormat = value; } + } + + private static bool _PostHSFormat = false; + + private Point2D m_Min, m_Max, m_Center; + private int m_Width, m_Height; + private StaticTile[][][] m_Tiles; + private MultiTileEntry[] m_List; + + public static readonly MultiComponentList Empty = new MultiComponentList(); + + public Point2D Min{ get{ return m_Min; } } + public Point2D Max{ get{ return m_Max; } } + + public Point2D Center{ get{ return m_Center; } } + + public int Width{ get{ return m_Width; } } + public int Height{ get{ return m_Height; } } + + public StaticTile[][][] Tiles{ get{ return m_Tiles; } } + public MultiTileEntry[] List{ get{ return m_List; } } + + public void Add( int itemID, int x, int y, int z ) + { + int vx = x + m_Center.m_X; + int vy = y + m_Center.m_Y; + + if ( vx >= 0 && vx < m_Width && vy >= 0 && vy < m_Height ) + { + StaticTile[] oldTiles = m_Tiles[vx][vy]; + + for ( int i = oldTiles.Length - 1; i >= 0; --i ) + { + ItemData data = TileData.ItemTable[itemID & TileData.MaxItemValue]; + + if ( oldTiles[i].Z == z && (oldTiles[i].Height > 0 == data.Height > 0 ) ) + { + bool newIsRoof = ( data.Flags & TileFlag.Roof) != 0; + bool oldIsRoof = (TileData.ItemTable[oldTiles[i].ID & TileData.MaxItemValue].Flags & TileFlag.Roof ) != 0; + + if ( newIsRoof == oldIsRoof ) + Remove( oldTiles[i].ID, x, y, z ); + } + } + + oldTiles = m_Tiles[vx][vy]; + + StaticTile[] newTiles = new StaticTile[oldTiles.Length + 1]; + + for ( int i = 0; i < oldTiles.Length; ++i ) + newTiles[i] = oldTiles[i]; + + newTiles[oldTiles.Length] = new StaticTile( (ushort)itemID, (sbyte)z ); + + m_Tiles[vx][vy] = newTiles; + + MultiTileEntry[] oldList = m_List; + MultiTileEntry[] newList = new MultiTileEntry[oldList.Length + 1]; + + for ( int i = 0; i < oldList.Length; ++i ) + newList[i] = oldList[i]; + + newList[oldList.Length] = new MultiTileEntry( (ushort)itemID, (short)x, (short)y, (short)z, 1 ); + + m_List = newList; + + if ( x < m_Min.m_X ) + m_Min.m_X = x; + + if ( y < m_Min.m_Y ) + m_Min.m_Y = y; + + if ( x > m_Max.m_X ) + m_Max.m_X = x; + + if ( y > m_Max.m_Y ) + m_Max.m_Y = y; + } + } + + public void RemoveXYZH( int x, int y, int z, int minHeight ) + { + int vx = x + m_Center.m_X; + int vy = y + m_Center.m_Y; + + if ( vx >= 0 && vx < m_Width && vy >= 0 && vy < m_Height ) + { + StaticTile[] oldTiles = m_Tiles[vx][vy]; + + for ( int i = 0; i < oldTiles.Length; ++i ) + { + StaticTile tile = oldTiles[i]; + + if ( tile.Z == z && tile.Height >= minHeight ) + { + StaticTile[] newTiles = new StaticTile[oldTiles.Length - 1]; + + for ( int j = 0; j < i; ++j ) + newTiles[j] = oldTiles[j]; + + for ( int j = i + 1; j < oldTiles.Length; ++j ) + newTiles[j - 1] = oldTiles[j]; + + m_Tiles[vx][vy] = newTiles; + + break; + } + } + + MultiTileEntry[] oldList = m_List; + + for ( int i = 0; i < oldList.Length; ++i ) + { + MultiTileEntry tile = oldList[i]; + + if ( tile.m_OffsetX == (short)x && tile.m_OffsetY == (short)y && tile.m_OffsetZ == (short)z && TileData.ItemTable[tile.m_ItemID & TileData.MaxItemValue].Height >= minHeight ) + { + MultiTileEntry[] newList = new MultiTileEntry[oldList.Length - 1]; + + for ( int j = 0; j < i; ++j ) + newList[j] = oldList[j]; + + for ( int j = i + 1; j < oldList.Length; ++j ) + newList[j - 1] = oldList[j]; + + m_List = newList; + + break; + } + } + } + } + + public void Remove( int itemID, int x, int y, int z ) + { + int vx = x + m_Center.m_X; + int vy = y + m_Center.m_Y; + + if ( vx >= 0 && vx < m_Width && vy >= 0 && vy < m_Height ) + { + StaticTile[] oldTiles = m_Tiles[vx][vy]; + + for ( int i = 0; i < oldTiles.Length; ++i ) + { + StaticTile tile = oldTiles[i]; + + if ( tile.ID == itemID && tile.Z == z ) + { + StaticTile[] newTiles = new StaticTile[oldTiles.Length - 1]; + + for ( int j = 0; j < i; ++j ) + newTiles[j] = oldTiles[j]; + + for ( int j = i + 1; j < oldTiles.Length; ++j ) + newTiles[j - 1] = oldTiles[j]; + + m_Tiles[vx][vy] = newTiles; + + break; + } + } + + MultiTileEntry[] oldList = m_List; + + for ( int i = 0; i < oldList.Length; ++i ) + { + MultiTileEntry tile = oldList[i]; + + if ( tile.m_ItemID == itemID && tile.m_OffsetX == (short)x && tile.m_OffsetY == (short)y && tile.m_OffsetZ == (short)z ) + { + MultiTileEntry[] newList = new MultiTileEntry[oldList.Length - 1]; + + for ( int j = 0; j < i; ++j ) + newList[j] = oldList[j]; + + for ( int j = i + 1; j < oldList.Length; ++j ) + newList[j - 1] = oldList[j]; + + m_List = newList; + + break; + } + } + } + } + + public void Resize( int newWidth, int newHeight ) + { + int oldWidth = m_Width, oldHeight = m_Height; + StaticTile[][][] oldTiles = m_Tiles; + + int totalLength = 0; + + StaticTile[][][] newTiles = new StaticTile[newWidth][][]; + + for ( int x = 0; x < newWidth; ++x ) + { + newTiles[x] = new StaticTile[newHeight][]; + + for ( int y = 0; y < newHeight; ++y ) + { + if ( x < oldWidth && y < oldHeight ) + newTiles[x][y] = oldTiles[x][y]; + else + newTiles[x][y] = new StaticTile[0]; + + totalLength += newTiles[x][y].Length; + } + } + + m_Tiles = newTiles; + m_List = new MultiTileEntry[totalLength]; + m_Width = newWidth; + m_Height = newHeight; + + m_Min = Point2D.Zero; + m_Max = Point2D.Zero; + + int index = 0; + + for ( int x = 0; x < newWidth; ++x ) + { + for ( int y = 0; y < newHeight; ++y ) + { + StaticTile[] tiles = newTiles[x][y]; + + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + + int vx = x - m_Center.X; + int vy = y - m_Center.Y; + + if ( vx < m_Min.m_X ) + m_Min.m_X = vx; + + if ( vy < m_Min.m_Y ) + m_Min.m_Y = vy; + + if ( vx > m_Max.m_X ) + m_Max.m_X = vx; + + if ( vy > m_Max.m_Y ) + m_Max.m_Y = vy; + + m_List[index++] = new MultiTileEntry( (ushort)tile.ID, (short)vx, (short)vy, (short)tile.Z, 1 ); + } + } + } + } + + public MultiComponentList( MultiComponentList toCopy ) + { + m_Min = toCopy.m_Min; + m_Max = toCopy.m_Max; + + m_Center = toCopy.m_Center; + + m_Width = toCopy.m_Width; + m_Height = toCopy.m_Height; + + m_Tiles = new StaticTile[m_Width][][]; + + for ( int x = 0; x < m_Width; ++x ) + { + m_Tiles[x] = new StaticTile[m_Height][]; + + for ( int y = 0; y < m_Height; ++y ) + { + m_Tiles[x][y] = new StaticTile[toCopy.m_Tiles[x][y].Length]; + + for ( int i = 0; i < m_Tiles[x][y].Length; ++i ) + m_Tiles[x][y][i] = toCopy.m_Tiles[x][y][i]; + } + } + + m_List = new MultiTileEntry[toCopy.m_List.Length]; + + for ( int i = 0; i < m_List.Length; ++i ) + m_List[i] = toCopy.m_List[i]; + } + + public void Serialize( GenericWriter writer ) + { + writer.Write( (int) 1 ); // version; + + writer.Write( m_Min ); + writer.Write( m_Max ); + writer.Write( m_Center ); + + writer.Write( (int) m_Width ); + writer.Write( (int) m_Height ); + + writer.Write( (int) m_List.Length ); + + for ( int i = 0; i < m_List.Length; ++i ) + { + MultiTileEntry ent = m_List[i]; + + writer.Write( (ushort) ent.m_ItemID ); + writer.Write( (short) ent.m_OffsetX ); + writer.Write( (short) ent.m_OffsetY ); + writer.Write( (short) ent.m_OffsetZ ); + writer.Write( (int) ent.m_Flags ); + } + } + + public MultiComponentList( GenericReader reader ) + { + int version = reader.ReadInt(); + + m_Min = reader.ReadPoint2D(); + m_Max = reader.ReadPoint2D(); + m_Center = reader.ReadPoint2D(); + m_Width = reader.ReadInt(); + m_Height = reader.ReadInt(); + + int length = reader.ReadInt(); + + MultiTileEntry[] allTiles = m_List = new MultiTileEntry[length]; + + if ( version == 0 ) { + for ( int i = 0; i < length; ++i ) + { + int id = reader.ReadShort(); + if ( id >= 0x4000 ) + id -= 0x4000; + + allTiles[i].m_ItemID = (ushort)id; + allTiles[i].m_OffsetX = reader.ReadShort(); + allTiles[i].m_OffsetY = reader.ReadShort(); + allTiles[i].m_OffsetZ = reader.ReadShort(); + allTiles[i].m_Flags = reader.ReadInt(); + } + } else { + for ( int i = 0; i < length; ++i ) + { + allTiles[i].m_ItemID = reader.ReadUShort(); + allTiles[i].m_OffsetX = reader.ReadShort(); + allTiles[i].m_OffsetY = reader.ReadShort(); + allTiles[i].m_OffsetZ = reader.ReadShort(); + allTiles[i].m_Flags = reader.ReadInt(); + } + } + + TileList[][] tiles = new TileList[m_Width][]; + m_Tiles = new StaticTile[m_Width][][]; + + for ( int x = 0; x < m_Width; ++x ) + { + tiles[x] = new TileList[m_Height]; + m_Tiles[x] = new StaticTile[m_Height][]; + + for ( int y = 0; y < m_Height; ++y ) + tiles[x][y] = new TileList(); + } + + for ( int i = 0; i < allTiles.Length; ++i ) + { + if ( i == 0 || allTiles[i].m_Flags != 0 ) + { + int xOffset = allTiles[i].m_OffsetX + m_Center.m_X; + int yOffset = allTiles[i].m_OffsetY + m_Center.m_Y; + + tiles[xOffset][yOffset].Add( (ushort)allTiles[i].m_ItemID, (sbyte)allTiles[i].m_OffsetZ ); + } + } + + for ( int x = 0; x < m_Width; ++x ) + for ( int y = 0; y < m_Height; ++y ) + m_Tiles[x][y] = tiles[x][y].ToArray(); + } + + public MultiComponentList( BinaryReader reader, int count ) + { + MultiTileEntry[] allTiles = m_List = new MultiTileEntry[count]; + + for ( int i = 0; i < count; ++i ) + { + allTiles[i].m_ItemID = reader.ReadUInt16(); + allTiles[i].m_OffsetX = reader.ReadInt16(); + allTiles[i].m_OffsetY = reader.ReadInt16(); + allTiles[i].m_OffsetZ = reader.ReadInt16(); + allTiles[i].m_Flags = reader.ReadInt32(); + + if ( _PostHSFormat ) + reader.ReadInt32(); // ?? + + MultiTileEntry e = allTiles[i]; + + if ( i == 0 || e.m_Flags != 0 ) + { + if ( e.m_OffsetX < m_Min.m_X ) + m_Min.m_X = e.m_OffsetX; + + if ( e.m_OffsetY < m_Min.m_Y ) + m_Min.m_Y = e.m_OffsetY; + + if ( e.m_OffsetX > m_Max.m_X ) + m_Max.m_X = e.m_OffsetX; + + if ( e.m_OffsetY > m_Max.m_Y ) + m_Max.m_Y = e.m_OffsetY; + } + } + + m_Center = new Point2D( -m_Min.m_X, -m_Min.m_Y ); + m_Width = (m_Max.m_X - m_Min.m_X) + 1; + m_Height = (m_Max.m_Y - m_Min.m_Y) + 1; + + TileList[][] tiles = new TileList[m_Width][]; + m_Tiles = new StaticTile[m_Width][][]; + + for ( int x = 0; x < m_Width; ++x ) + { + tiles[x] = new TileList[m_Height]; + m_Tiles[x] = new StaticTile[m_Height][]; + + for ( int y = 0; y < m_Height; ++y ) + tiles[x][y] = new TileList(); + } + + for ( int i = 0; i < allTiles.Length; ++i ) + { + if ( i == 0 || allTiles[i].m_Flags != 0 ) + { + int xOffset = allTiles[i].m_OffsetX + m_Center.m_X; + int yOffset = allTiles[i].m_OffsetY + m_Center.m_Y; + + tiles[xOffset][yOffset].Add( (ushort)allTiles[i].m_ItemID, (sbyte)allTiles[i].m_OffsetZ ); + } + } + + for ( int x = 0; x < m_Width; ++x ) + for ( int y = 0; y < m_Height; ++y ) + m_Tiles[x][y] = tiles[x][y].ToArray(); + } + + private MultiComponentList() + { + m_Tiles = new StaticTile[0][][]; + m_List = new MultiTileEntry[0]; + } + } +} \ No newline at end of file diff --git a/Source/NativeReader.cs b/Source/NativeReader.cs new file mode 100644 index 0000000..c737773 --- /dev/null +++ b/Source/NativeReader.cs @@ -0,0 +1,68 @@ +/*************************************************************************** + * NativeReader.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Runtime.InteropServices; + +namespace Server { + public static class NativeReader { + + private static readonly INativeReader m_NativeReader; + + static NativeReader() { + if ( Core.Unix ) + m_NativeReader = new NativeReaderUnix(); + else + m_NativeReader = new NativeReaderWin32(); + } + + public static unsafe void Read( IntPtr ptr, void *buffer, int length ) { + m_NativeReader.Read( ptr, buffer, length ); + } + } + + public interface INativeReader { + unsafe void Read( IntPtr ptr, void *buffer, int length ); + } + + public sealed class NativeReaderWin32 : INativeReader { + [DllImport( "kernel32" )] + private unsafe static extern int _lread( IntPtr hFile, void *lpBuffer, int wBytes ); + + public NativeReaderWin32() { + } + + public unsafe void Read( IntPtr ptr, void *buffer, int length ) { + _lread( ptr, buffer, length ); + } + } + + public sealed class NativeReaderUnix : INativeReader { + [DllImport( "libc" )] + private unsafe static extern int read( IntPtr ptr, void *buffer, int length ); + + public NativeReaderUnix() { + } + + public unsafe void Read( IntPtr ptr, void *buffer, int length ) { + read( ptr, buffer, length ); + } + } +} \ No newline at end of file diff --git a/Source/Network/BufferPool.cs b/Source/Network/BufferPool.cs new file mode 100644 index 0000000..3f930c1 --- /dev/null +++ b/Source/Network/BufferPool.cs @@ -0,0 +1,102 @@ +/*************************************************************************** + * BufferPool.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Network +{ + public class BufferPool + { + private static List m_Pools = new List(); + + public static List Pools{ get{ return m_Pools; } set{ m_Pools = value; } } + + private string m_Name; + + private int m_InitialCapacity; + private int m_BufferSize; + + private int m_Misses; + + private Queue m_FreeBuffers; + + public void GetInfo( out string name, out int freeCount, out int initialCapacity, out int currentCapacity, out int bufferSize, out int misses ) + { + lock ( this ) + { + name = m_Name; + freeCount = m_FreeBuffers.Count; + initialCapacity = m_InitialCapacity; + currentCapacity = m_InitialCapacity * (1 + m_Misses); + bufferSize = m_BufferSize; + misses = m_Misses; + } + } + + public BufferPool( string name, int initialCapacity, int bufferSize ) + { + m_Name = name; + + m_InitialCapacity = initialCapacity; + m_BufferSize = bufferSize; + + m_FreeBuffers = new Queue( initialCapacity ); + + for ( int i = 0; i < initialCapacity; ++i ) + m_FreeBuffers.Enqueue( new byte[bufferSize] ); + + lock ( m_Pools ) + m_Pools.Add( this ); + } + + public byte[] AcquireBuffer() + { + lock ( this ) + { + if ( m_FreeBuffers.Count > 0 ) + return m_FreeBuffers.Dequeue(); + + ++m_Misses; + + for ( int i = 0; i < m_InitialCapacity; ++i ) + m_FreeBuffers.Enqueue( new byte[m_BufferSize] ); + + return m_FreeBuffers.Dequeue(); + } + } + + public void ReleaseBuffer( byte[] buffer ) + { + if ( buffer == null ) + return; + + lock ( this ) + m_FreeBuffers.Enqueue( buffer ); + } + + public void Free() + { + lock ( m_Pools ) + m_Pools.Remove( this ); + } + } +} \ No newline at end of file diff --git a/Source/Network/ByteQueue.cs b/Source/Network/ByteQueue.cs new file mode 100644 index 0000000..e4fd624 --- /dev/null +++ b/Source/Network/ByteQueue.cs @@ -0,0 +1,153 @@ +/*************************************************************************** + * ByteQueue.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; + +namespace Server.Network +{ + public class ByteQueue + { + private int m_Head; + private int m_Tail; + private int m_Size; + + private byte[] m_Buffer; + + public int Length{ get{ return m_Size; } } + + public ByteQueue() + { + m_Buffer = new byte[2048]; + } + + public void Clear() + { + m_Head = 0; + m_Tail = 0; + m_Size = 0; + } + + private void SetCapacity( int capacity ) + { + byte[] newBuffer = new byte[capacity]; + + if ( m_Size > 0 ) + { + if ( m_Head < m_Tail ) + { + Buffer.BlockCopy( m_Buffer, m_Head, newBuffer, 0, m_Size ); + } + else + { + Buffer.BlockCopy( m_Buffer, m_Head, newBuffer, 0, m_Buffer.Length - m_Head ); + Buffer.BlockCopy( m_Buffer, 0, newBuffer, m_Buffer.Length - m_Head, m_Tail ); + } + } + + m_Head = 0; + m_Tail = m_Size; + m_Buffer = newBuffer; + } + + public byte GetPacketID() + { + if ( m_Size >= 1 ) + return m_Buffer[m_Head]; + + return 0xFF; + } + + public int GetPacketLength() + { + if ( m_Size >= 3 ) + return (m_Buffer[(m_Head + 1) % m_Buffer.Length] << 8) | m_Buffer[(m_Head + 2) % m_Buffer.Length]; + + return 0; + } + + public int Dequeue( byte[] buffer, int offset, int size ) + { + if ( size > m_Size ) + size = m_Size; + + if ( size == 0 ) + return 0; + + if ( m_Head < m_Tail ) + { + Buffer.BlockCopy( m_Buffer, m_Head, buffer, offset, size ); + } + else + { + int rightLength = ( m_Buffer.Length - m_Head ); + + if ( rightLength >= size ) + { + Buffer.BlockCopy( m_Buffer, m_Head, buffer, offset, size ); + } + else + { + Buffer.BlockCopy( m_Buffer, m_Head, buffer, offset, rightLength ); + Buffer.BlockCopy( m_Buffer, 0, buffer, offset + rightLength, size - rightLength ); + } + } + + m_Head = ( m_Head + size ) % m_Buffer.Length; + m_Size -= size; + + if ( m_Size == 0 ) + { + m_Head = 0; + m_Tail = 0; + } + + return size; + } + + public void Enqueue( byte[] buffer, int offset, int size ) + { + if ( (m_Size + size) > m_Buffer.Length ) + SetCapacity( (m_Size + size + 2047) & ~2047 ); + + if ( m_Head < m_Tail ) + { + int rightLength = ( m_Buffer.Length - m_Tail ); + + if ( rightLength >= size ) + { + Buffer.BlockCopy( buffer, offset, m_Buffer, m_Tail, size ); + } + else + { + Buffer.BlockCopy( buffer, offset, m_Buffer, m_Tail, rightLength ); + Buffer.BlockCopy( buffer, offset + rightLength, m_Buffer, 0, size - rightLength ); + } + } + else + { + Buffer.BlockCopy( buffer, offset, m_Buffer, m_Tail, size ); + } + + m_Tail = ( m_Tail + size ) % m_Buffer.Length; + m_Size += size; + } + } +} \ No newline at end of file diff --git a/Source/Network/Compression.cs b/Source/Network/Compression.cs new file mode 100644 index 0000000..6a09627 --- /dev/null +++ b/Source/Network/Compression.cs @@ -0,0 +1,388 @@ +/*************************************************************************** + * Compression.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Runtime.InteropServices; + +namespace Server.Network { + /// + /// Handles outgoing packet compression for the network. + /// + public static class Compression { + private static int[] _huffmanTable = new int[514] + { + 0x2, 0x000, 0x5, 0x01F, 0x6, 0x022, 0x7, 0x034, 0x7, 0x075, 0x6, 0x028, 0x6, 0x03B, 0x7, 0x032, + 0x8, 0x0E0, 0x8, 0x062, 0x7, 0x056, 0x8, 0x079, 0x9, 0x19D, 0x8, 0x097, 0x6, 0x02A, 0x7, 0x057, + 0x8, 0x071, 0x8, 0x05B, 0x9, 0x1CC, 0x8, 0x0A7, 0x7, 0x025, 0x7, 0x04F, 0x8, 0x066, 0x8, 0x07D, + 0x9, 0x191, 0x9, 0x1CE, 0x7, 0x03F, 0x9, 0x090, 0x8, 0x059, 0x8, 0x07B, 0x8, 0x091, 0x8, 0x0C6, + 0x6, 0x02D, 0x9, 0x186, 0x8, 0x06F, 0x9, 0x093, 0xA, 0x1CC, 0x8, 0x05A, 0xA, 0x1AE, 0xA, 0x1C0, + 0x9, 0x148, 0x9, 0x14A, 0x9, 0x082, 0xA, 0x19F, 0x9, 0x171, 0x9, 0x120, 0x9, 0x0E7, 0xA, 0x1F3, + 0x9, 0x14B, 0x9, 0x100, 0x9, 0x190, 0x6, 0x013, 0x9, 0x161, 0x9, 0x125, 0x9, 0x133, 0x9, 0x195, + 0x9, 0x173, 0x9, 0x1CA, 0x9, 0x086, 0x9, 0x1E9, 0x9, 0x0DB, 0x9, 0x1EC, 0x9, 0x08B, 0x9, 0x085, + 0x5, 0x00A, 0x8, 0x096, 0x8, 0x09C, 0x9, 0x1C3, 0x9, 0x19C, 0x9, 0x08F, 0x9, 0x18F, 0x9, 0x091, + 0x9, 0x087, 0x9, 0x0C6, 0x9, 0x177, 0x9, 0x089, 0x9, 0x0D6, 0x9, 0x08C, 0x9, 0x1EE, 0x9, 0x1EB, + 0x9, 0x084, 0x9, 0x164, 0x9, 0x175, 0x9, 0x1CD, 0x8, 0x05E, 0x9, 0x088, 0x9, 0x12B, 0x9, 0x172, + 0x9, 0x10A, 0x9, 0x08D, 0x9, 0x13A, 0x9, 0x11C, 0xA, 0x1E1, 0xA, 0x1E0, 0x9, 0x187, 0xA, 0x1DC, + 0xA, 0x1DF, 0x7, 0x074, 0x9, 0x19F, 0x8, 0x08D, 0x8, 0x0E4, 0x7, 0x079, 0x9, 0x0EA, 0x9, 0x0E1, + 0x8, 0x040, 0x7, 0x041, 0x9, 0x10B, 0x9, 0x0B0, 0x8, 0x06A, 0x8, 0x0C1, 0x7, 0x071, 0x7, 0x078, + 0x8, 0x0B1, 0x9, 0x14C, 0x7, 0x043, 0x8, 0x076, 0x7, 0x066, 0x7, 0x04D, 0x9, 0x08A, 0x6, 0x02F, + 0x8, 0x0C9, 0x9, 0x0CE, 0x9, 0x149, 0x9, 0x160, 0xA, 0x1BA, 0xA, 0x19E, 0xA, 0x39F, 0x9, 0x0E5, + 0x9, 0x194, 0x9, 0x184, 0x9, 0x126, 0x7, 0x030, 0x8, 0x06C, 0x9, 0x121, 0x9, 0x1E8, 0xA, 0x1C1, + 0xA, 0x11D, 0xA, 0x163, 0xA, 0x385, 0xA, 0x3DB, 0xA, 0x17D, 0xA, 0x106, 0xA, 0x397, 0xA, 0x24E, + 0x7, 0x02E, 0x8, 0x098, 0xA, 0x33C, 0xA, 0x32E, 0xA, 0x1E9, 0x9, 0x0BF, 0xA, 0x3DF, 0xA, 0x1DD, + 0xA, 0x32D, 0xA, 0x2ED, 0xA, 0x30B, 0xA, 0x107, 0xA, 0x2E8, 0xA, 0x3DE, 0xA, 0x125, 0xA, 0x1E8, + 0x9, 0x0E9, 0xA, 0x1CD, 0xA, 0x1B5, 0x9, 0x165, 0xA, 0x232, 0xA, 0x2E1, 0xB, 0x3AE, 0xB, 0x3C6, + 0xB, 0x3E2, 0xA, 0x205, 0xA, 0x29A, 0xA, 0x248, 0xA, 0x2CD, 0xA, 0x23B, 0xB, 0x3C5, 0xA, 0x251, + 0xA, 0x2E9, 0xA, 0x252, 0x9, 0x1EA, 0xB, 0x3A0, 0xB, 0x391, 0xA, 0x23C, 0xB, 0x392, 0xB, 0x3D5, + 0xA, 0x233, 0xA, 0x2CC, 0xB, 0x390, 0xA, 0x1BB, 0xB, 0x3A1, 0xB, 0x3C4, 0xA, 0x211, 0xA, 0x203, + 0x9, 0x12A, 0xA, 0x231, 0xB, 0x3E0, 0xA, 0x29B, 0xB, 0x3D7, 0xA, 0x202, 0xB, 0x3AD, 0xA, 0x213, + 0xA, 0x253, 0xA, 0x32C, 0xA, 0x23D, 0xA, 0x23F, 0xA, 0x32F, 0xA, 0x11C, 0xA, 0x384, 0xA, 0x31C, + 0xA, 0x17C, 0xA, 0x30A, 0xA, 0x2E0, 0xA, 0x276, 0xA, 0x250, 0xB, 0x3E3, 0xA, 0x396, 0xA, 0x18F, + 0xA, 0x204, 0xA, 0x206, 0xA, 0x230, 0xA, 0x265, 0xA, 0x212, 0xA, 0x23E, 0xB, 0x3AC, 0xB, 0x393, + 0xB, 0x3E1, 0xA, 0x1DE, 0xB, 0x3D6, 0xA, 0x31D, 0xB, 0x3E5, 0xB, 0x3E4, 0xA, 0x207, 0xB, 0x3C7, + 0xA, 0x277, 0xB, 0x3D4, 0x8, 0x0C0, 0xA, 0x162, 0xA, 0x3DA, 0xA, 0x124, 0xA, 0x1B4, 0xA, 0x264, + 0xA, 0x33D, 0xA, 0x1D1, 0xA, 0x1AF, 0xA, 0x39E, 0xA, 0x24F, 0xB, 0x373, 0xA, 0x249, 0xB, 0x372, + 0x9, 0x167, 0xA, 0x210, 0xA, 0x23A, 0xA, 0x1B8, 0xB, 0x3AF, 0xA, 0x18E, 0xA, 0x2EC, 0x7, 0x062, + 0x4, 0x00D + }; + + private const int CountIndex = 0; + private const int ValueIndex = 1; + + // UO packets may not exceed 64kb in length + private const int BufferSize = 0x10000; + + // Optimal compression ratio is 2 / 8; worst compression ratio is 11 / 8 + private const int MinimalCodeLength = 2; + private const int MaximalCodeLength = 11; + + // Fixed overhead, in bits, per compression call + private const int TerminalCodeLength = 4; + + // If our input exceeds this length, we cannot possibly compress it within the buffer + private const int DefiniteOverflow = ( ( BufferSize * 8 ) - TerminalCodeLength ) / MinimalCodeLength; + + // If our input exceeds this length, we may potentially overflow the buffer + private const int PossibleOverflow = ( ( BufferSize * 8 ) - TerminalCodeLength ) / MaximalCodeLength; + + private static object _syncRoot = new object(); + + private static byte[] _outputBuffer = new byte[BufferSize]; + + [Obsolete( "Use Compress( byte[], int, int, ref int ) instead.", false )] + public static void Compress( byte[] input, int length, out byte[] output, out int outputLength ) { + outputLength = 0; + output = Compress( input, 0, length, ref outputLength ); + } + + public unsafe static byte[] Compress( byte[] input, int offset, int count, ref int length ) { + if ( input == null ) { + throw new ArgumentNullException( "input" ); + } else if ( offset < 0 || offset >= input.Length ) { + throw new ArgumentOutOfRangeException( "offset" ); + } else if ( count < 0 || count > input.Length ) { + throw new ArgumentOutOfRangeException( "count" ); + } else if ( ( input.Length - offset ) < count ) { + throw new ArgumentException(); + } + + length = 0; + + if ( count > DefiniteOverflow ) { + return null; + } + + lock ( _syncRoot ) { + int bitCount = 0; + int bitValue = 0; + + fixed ( int* pTable = _huffmanTable ) { + int* pEntry; + + fixed ( byte* pInputBuffer = input ) { + byte* pInput = pInputBuffer + offset, pInputEnd = pInput + count; + + fixed ( byte* pOutputBuffer = _outputBuffer ) { + byte* pOutput = pOutputBuffer, pOutputEnd = pOutput + BufferSize; + + while ( pInput < pInputEnd ) { + pEntry = &pTable[*pInput++ << 1]; + + bitCount += pEntry[CountIndex]; + + bitValue <<= pEntry[CountIndex]; + bitValue |= pEntry[ValueIndex]; + + while ( bitCount >= 8 ) { + bitCount -= 8; + + if ( pOutput < pOutputEnd ) { + *pOutput++ = ( byte ) ( bitValue >> bitCount ); + } else { + return null; + } + } + } + + // terminal code + pEntry = &pTable[0x200]; + + bitCount += pEntry[CountIndex]; + + bitValue <<= pEntry[CountIndex]; + bitValue |= pEntry[ValueIndex]; + + // align on byte boundary + if ( ( bitCount & 7 ) != 0 ) { + bitValue <<= ( 8 - ( bitCount & 7 ) ); + bitCount += ( 8 - ( bitCount & 7 ) ); + } + + while ( bitCount >= 8 ) { + bitCount -= 8; + + if ( pOutput < pOutputEnd ) { + *pOutput++ = ( byte ) ( bitValue >> bitCount ); + } else { + return null; + } + } + + length = ( int ) ( pOutput - pOutputBuffer ); + return _outputBuffer; + } + } + } + } + } + + public static readonly ICompressor Compressor; + + static Compression() { + if ( Core.Unix ) { + if ( Core.Is64Bit ) { + Compressor = new CompressorUnix64(); + } else { + Compressor = new CompressorUnix32(); + } + } else if ( Core.Is64Bit ) { + Compressor = new Compressor64(); + } else { + Compressor = new Compressor32(); + } + } + + public static ZLibError Pack( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + return Compressor.Compress( dest, ref destLength, source, sourceLength ); + } + + public static ZLibError Pack( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ) { + return Compressor.Compress( dest, ref destLength, source, sourceLength, quality ); + } + + public static ZLibError Unpack( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + return Compressor.Decompress( dest, ref destLength, source, sourceLength ); + } + } + + public interface ICompressor { + string Version { + get; + } + + ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ); + ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ); + + ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength ); + } + + public sealed class Compressor32 : ICompressor { + [DllImport( "zlib32" )] + private static extern string zlibVersion(); + + [DllImport( "zlib32" )] + private static extern ZLibError compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ); + + [DllImport( "zlib32" )] + private static extern ZLibError compress2( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ); + + [DllImport( "zlib32" )] + private static extern ZLibError uncompress( byte[] dest, ref int destLen, byte[] source, int sourceLen ); + + public Compressor32() { + } + + public string Version { + get { + return zlibVersion(); + } + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + return compress( dest, ref destLength, source, sourceLength ); + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ) { + return compress2( dest, ref destLength, source, sourceLength, quality ); + } + + public ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + return uncompress( dest, ref destLength, source, sourceLength ); + } + } + + public sealed class Compressor64 : ICompressor { + [DllImport( "zlib64" )] + private static extern string zlibVersion(); + + [DllImport( "zlib64" )] + private static extern ZLibError compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ); + + [DllImport( "zlib64" )] + private static extern ZLibError compress2( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ); + + [DllImport( "zlib64" )] + private static extern ZLibError uncompress( byte[] dest, ref int destLen, byte[] source, int sourceLen ); + + public Compressor64() { + } + + public string Version { + get { + return zlibVersion(); + } + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + return compress( dest, ref destLength, source, sourceLength ); + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ) { + return compress2( dest, ref destLength, source, sourceLength, quality ); + } + + public ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + return uncompress( dest, ref destLength, source, sourceLength ); + } + } + + public sealed class CompressorUnix32 : ICompressor { + [DllImport( "libz" )] + private static extern string zlibVersion(); + + [DllImport( "libz" )] + private static extern ZLibError compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ); + + [DllImport( "libz" )] + private static extern ZLibError compress2( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ); + + [DllImport( "libz" )] + private static extern ZLibError uncompress( byte[] dest, ref int destLen, byte[] source, int sourceLen ); + + public CompressorUnix32() { + } + + public string Version { + get { + return zlibVersion(); + } + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + return compress( dest, ref destLength, source, sourceLength ); + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ) { + return compress2( dest, ref destLength, source, sourceLength, quality ); + } + + public ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + return uncompress( dest, ref destLength, source, sourceLength ); + } + } + + public sealed class CompressorUnix64 : ICompressor { + [DllImport( "libz" )] + private static extern string zlibVersion(); + + [DllImport( "libz" )] + private static extern ZLibError compress( byte[] dest, ref ulong destLength, byte[] source, int sourceLength ); + + [DllImport( "libz" )] + private static extern ZLibError compress2( byte[] dest, ref ulong destLength, byte[] source, int sourceLength, ZLibQuality quality ); + + [DllImport( "libz" )] + private static extern ZLibError uncompress( byte[] dest, ref ulong destLen, byte[] source, int sourceLen ); + + public CompressorUnix64() { + } + + public string Version { + get { + return zlibVersion(); + } + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + ulong destLengthLong = (ulong)destLength; + ZLibError z = compress( dest, ref destLengthLong, source, sourceLength ); + destLength = (int)destLengthLong; + return z; + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ) { + ulong destLengthLong = (ulong)destLength; + ZLibError z = compress2( dest, ref destLengthLong, source, sourceLength, quality ); + destLength = (int)destLengthLong; + return z; + } + + public ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + ulong destLengthLong = (ulong)destLength; + ZLibError z = uncompress( dest, ref destLengthLong, source, sourceLength ); + destLength = (int)destLengthLong; + return z; + } + } + + public enum ZLibError : int { + VersionError = -6, + BufferError = -5, + MemoryError = -4, + DataError = -3, + StreamError = -2, + FileError = -1, + + Okay = 0, + + StreamEnd = 1, + NeedDictionary = 2 + } + + public enum ZLibQuality : int { + Default = -1, + + None = 0, + + Speed = 1, + Size = 9 + } +} \ No newline at end of file diff --git a/Source/Network/EncodedPacketHandler.cs b/Source/Network/EncodedPacketHandler.cs new file mode 100644 index 0000000..ace28ac --- /dev/null +++ b/Source/Network/EncodedPacketHandler.cs @@ -0,0 +1,64 @@ +/*************************************************************************** + * EncodedPacketHandler.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Network +{ + public delegate void OnEncodedPacketReceive( NetState state, IEntity ent, EncodedReader pvSrc ); + + public class EncodedPacketHandler + { + private int m_PacketID; + private bool m_Ingame; + private OnEncodedPacketReceive m_OnReceive; + + public EncodedPacketHandler( int packetID, bool ingame, OnEncodedPacketReceive onReceive ) + { + m_PacketID = packetID; + m_Ingame = ingame; + m_OnReceive = onReceive; + } + + public int PacketID + { + get + { + return m_PacketID; + } + } + + public OnEncodedPacketReceive OnReceive + { + get + { + return m_OnReceive; + } + } + + public bool Ingame + { + get + { + return m_Ingame; + } + } + } +} \ No newline at end of file diff --git a/Source/Network/EncodedReader.cs b/Source/Network/EncodedReader.cs new file mode 100644 index 0000000..7e17529 --- /dev/null +++ b/Source/Network/EncodedReader.cs @@ -0,0 +1,85 @@ +/*************************************************************************** + * EncodedReader.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Text; +using System.IO; + +namespace Server.Network +{ + public class EncodedReader + { + private PacketReader m_Reader; + + public EncodedReader( PacketReader reader ) + { + m_Reader = reader; + } + + public byte[] Buffer + { + get + { + return m_Reader.Buffer; + } + } + + public void Trace( NetState state ) + { + m_Reader.Trace( state ); + } + + public int ReadInt32() + { + if ( m_Reader.ReadByte() != 0 ) + return 0; + + return m_Reader.ReadInt32(); + } + + public Point3D ReadPoint3D() + { + if ( m_Reader.ReadByte() != 3 ) + return Point3D.Zero; + + return new Point3D( m_Reader.ReadInt16(), m_Reader.ReadInt16(), m_Reader.ReadByte() ); + } + + public string ReadUnicodeStringSafe() + { + if ( m_Reader.ReadByte() != 2 ) + return ""; + + int length = m_Reader.ReadUInt16(); + + return m_Reader.ReadUnicodeStringSafe( length ); + } + + public string ReadUnicodeString() + { + if ( m_Reader.ReadByte() != 2 ) + return ""; + + int length = m_Reader.ReadUInt16(); + + return m_Reader.ReadUnicodeString( length ); + } + } +} \ No newline at end of file diff --git a/Source/Network/Listener.cs b/Source/Network/Listener.cs new file mode 100644 index 0000000..593c948 --- /dev/null +++ b/Source/Network/Listener.cs @@ -0,0 +1,279 @@ +/*************************************************************************** + * Listener.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Threading; +using Server; + +namespace Server.Network +{ + public class Listener : IDisposable + { + private Socket m_Listener; + + private Queue m_Accepted; + private object m_AcceptedSyncRoot; + +#if Framework_4_0 + private SocketAsyncEventArgs m_EventArgs; +#else + private AsyncCallback m_OnAccept; +#endif + + private static Socket[] m_EmptySockets = new Socket[0]; + + private static IPEndPoint[] m_EndPoints; + + public static IPEndPoint[] EndPoints { + get { return m_EndPoints; } + set { m_EndPoints = value; } + } + + public Listener( IPEndPoint ipep ) + { + m_Accepted = new Queue(); + m_AcceptedSyncRoot = ((ICollection)m_Accepted).SyncRoot; + + m_Listener = Bind( ipep ); + + if ( m_Listener == null ) + return; + + DisplayListener(); + +#if Framework_4_0 + m_EventArgs = new SocketAsyncEventArgs(); + m_EventArgs.Completed += new EventHandler( Accept_Completion ); + Accept_Start(); +#else + m_OnAccept = new AsyncCallback( OnAccept ); + try { + IAsyncResult res = m_Listener.BeginAccept( m_OnAccept, m_Listener ); + } catch ( SocketException ex ) { + NetState.TraceException( ex ); + } catch ( ObjectDisposedException ) { + } +#endif + } + + private Socket Bind( IPEndPoint ipep ) + { + Socket s = new Socket( ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp ); + + try + { + s.LingerState.Enabled = false; +#if !MONO + s.ExclusiveAddressUse = false; +#endif + s.Bind( ipep ); + s.Listen( 8 ); + + return s; + } + catch ( Exception e ) + { + if ( e is SocketException ) { + SocketException se = (SocketException)e; + + if ( se.ErrorCode == 10048 ) { // WSAEADDRINUSE + Console.WriteLine( "Listener Failed: {0}:{1} (In Use)", ipep.Address, ipep.Port ); + } + else if ( se.ErrorCode == 10049 ) { // WSAEADDRNOTAVAIL + Console.WriteLine( "Listener Failed: {0}:{1} (Unavailable)", ipep.Address, ipep.Port ); + } + else { + Console.WriteLine( "Listener Exception:" ); + Console.WriteLine( e ); + } + } + + return null; + } + } + + private void DisplayListener() + { + IPEndPoint ipep = m_Listener.LocalEndPoint as IPEndPoint; + + if ( ipep == null ) + return; + + if ( ipep.Address.Equals( IPAddress.Any ) || ipep.Address.Equals( IPAddress.IPv6Any ) ) { + NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); + foreach ( NetworkInterface adapter in adapters ) { + IPInterfaceProperties properties = adapter.GetIPProperties(); + foreach ( IPAddressInformation unicast in properties.UnicastAddresses ) { + if ( ipep.AddressFamily == unicast.Address.AddressFamily ) + Console.WriteLine( "Listening: {0}:{1}", unicast.Address, ipep.Port ); + } + } + /* + try { + Console.WriteLine( "Listening: {0}:{1}", IPAddress.Loopback, ipep.Port ); + IPHostEntry iphe = Dns.GetHostEntry( Dns.GetHostName() ); + IPAddress[] ip = iphe.AddressList; + for ( int i = 0; i < ip.Length; ++i ) + Console.WriteLine( "Listening: {0}:{1}", ip[i], ipep.Port ); + } + catch { } + */ + } + else { + Console.WriteLine( "Listening: {0}:{1}", ipep.Address, ipep.Port ); + } + } + +#if Framework_4_0 + private void Accept_Start() + { + bool result = false; + + do { + try { + result = !m_Listener.AcceptAsync( m_EventArgs ); + } catch ( SocketException ex ) { + NetState.TraceException( ex ); + break; + } catch ( ObjectDisposedException ) { + break; + } + + if ( result ) + Accept_Process( m_EventArgs ); + } while ( result ); + } + + private void Accept_Completion( object sender, SocketAsyncEventArgs e ) + { + Accept_Process( e ); + + Accept_Start(); + } + + private void Accept_Process( SocketAsyncEventArgs e ) + { + if ( e.SocketError == SocketError.Success && VerifySocket( e.AcceptSocket ) ) { + Enqueue( e.AcceptSocket ); + } else { + Release( e.AcceptSocket ); + } + + e.AcceptSocket = null; + } + +#else + + private void OnAccept( IAsyncResult asyncResult ) { + Socket listener = (Socket) asyncResult.AsyncState; + + Socket accepted = null; + + try { + accepted = listener.EndAccept( asyncResult ); + } catch ( SocketException ex ) { + NetState.TraceException( ex ); + } catch ( ObjectDisposedException ) { + return; + } + + if ( accepted != null ) { + if ( VerifySocket( accepted ) ) { + Enqueue( accepted ); + } else { + Release( accepted ); + } + } + + try { + listener.BeginAccept( m_OnAccept, listener ); + } catch ( SocketException ex ) { + NetState.TraceException( ex ); + } catch ( ObjectDisposedException ) { + } + } +#endif + + private bool VerifySocket( Socket socket ) { + try { + SocketConnectEventArgs args = new SocketConnectEventArgs( socket ); + + EventSink.InvokeSocketConnect( args ); + + return args.AllowConnection; + } catch ( Exception ex ) { + NetState.TraceException( ex ); + + return false; + } + } + + private void Enqueue( Socket socket ) { + lock ( m_AcceptedSyncRoot ) { + m_Accepted.Enqueue( socket ); + } + + Core.Set(); + } + + private void Release( Socket socket ) { + try { + socket.Shutdown( SocketShutdown.Both ); + } catch ( SocketException ex ) { + NetState.TraceException( ex ); + } + + try { + socket.Close(); + } catch ( SocketException ex ) { + NetState.TraceException( ex ); + } + } + + public Socket[] Slice() + { + Socket[] array; + + lock ( m_AcceptedSyncRoot ) + { + if ( m_Accepted.Count == 0 ) + return m_EmptySockets; + + array = m_Accepted.ToArray(); + m_Accepted.Clear(); + } + + return array; + } + + public void Dispose() { + Socket socket = Interlocked.Exchange( ref m_Listener, null ); + + if ( socket != null ) { + socket.Close(); + } + } + } +} \ No newline at end of file diff --git a/Source/Network/MessagePump.cs b/Source/Network/MessagePump.cs new file mode 100644 index 0000000..011f899 --- /dev/null +++ b/Source/Network/MessagePump.cs @@ -0,0 +1,282 @@ +/*************************************************************************** + * MessagePump.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using Server; +using Server.Diagnostics; +using Server.Network; + +namespace Server.Network +{ + public class MessagePump + { + private Listener[] m_Listeners; + private Queue m_Queue; + private Queue m_WorkingQueue; + private Queue m_Throttled; + private byte[] m_Peek; + + public MessagePump() + { + IPEndPoint[] ipep = Listener.EndPoints; + + m_Listeners = new Listener[ipep.Length]; + + bool success = false; + + do { + for ( int i = 0; i < ipep.Length; i++ ) { + Listener l = new Listener( ipep[i] ); + if ( !success && l != null ) + success = true; + m_Listeners[i] = l; + } + + if ( !success ) { + Console.WriteLine( "Retrying..." ); + Thread.Sleep( 10000 ); + } + } while ( !success ); + + m_Queue = new Queue(); + m_WorkingQueue = new Queue(); + m_Throttled = new Queue(); + m_Peek = new byte[4]; + } + + public Listener[] Listeners + { + get{ return m_Listeners; } + set{ m_Listeners = value; } + } + + public void AddListener( Listener l ) + { + Listener[] old = m_Listeners; + + m_Listeners = new Listener[old.Length + 1]; + + for ( int i = 0; i < old.Length; ++i ) + m_Listeners[i] = old[i]; + + m_Listeners[old.Length] = l; + } + + private void CheckListener() + { + for ( int j = 0; j < m_Listeners.Length; ++j ) + { + Socket[] accepted = m_Listeners[j].Slice(); + + for ( int i = 0; i < accepted.Length; ++i ) + { + NetState ns = new NetState( accepted[i], this ); + ns.Start(); + + if ( ns.Running ) + Console.WriteLine( "Client: {0}: Connected. [{1} Online]", ns, NetState.Instances.Count ); + } + } + } + + public void OnReceive( NetState ns ) + { + lock ( this ) + m_Queue.Enqueue( ns ); + + Core.Set(); + } + + public void Slice() + { + CheckListener(); + + lock ( this ) + { + Queue temp = m_WorkingQueue; + m_WorkingQueue = m_Queue; + m_Queue = temp; + } + + while ( m_WorkingQueue.Count > 0 ) + { + NetState ns = m_WorkingQueue.Dequeue(); + + if ( ns.Running ) + HandleReceive( ns ); + } + + lock ( this ) + { + while ( m_Throttled.Count > 0 ) + m_Queue.Enqueue( m_Throttled.Dequeue() ); + } + } + + private const int BufferSize = 4096; + private BufferPool m_Buffers = new BufferPool( "Processor", 4, BufferSize ); + + public bool HandleReceive( NetState ns ) + { + ByteQueue buffer = ns.Buffer; + + if ( buffer == null || buffer.Length <= 0 ) + return true; + + lock ( buffer ) + { + int length = buffer.Length; + + if ( !ns.Seeded ) + { + if ( buffer.GetPacketID() == 0xEF ) + { + // new packet in client 6.0.5.0 replaces the traditional seed method with a seed packet + // 0xEF = 239 = multicast IP, so this should never appear in a normal seed. So this is backwards compatible with older clients. + ns.Seeded = true; + } + else if ( buffer.Length >= 4 ) + { + buffer.Dequeue( m_Peek, 0, 4 ); + + int seed = (m_Peek[0] << 24) | (m_Peek[1] << 16) | (m_Peek[2] << 8) | m_Peek[3]; + + if ( seed == 0 ) + { + Console.WriteLine( "Login: {0}: Invalid client detected, disconnecting", ns ); + ns.Dispose(); + return false; + } + + ns.m_Seed = seed; + ns.Seeded = true; + + length = buffer.Length; + } + else + { + return true; + } + } + + while ( length > 0 && ns.Running ) + { + int packetID = buffer.GetPacketID(); + + PacketHandler handler = ns.GetHandler( packetID ); + + if ( handler == null ) + { + byte[] data = new byte[length]; + length = buffer.Dequeue( data, 0, length ); + + new PacketReader( data, length, false ).Trace( ns ); + + break; + } + + int packetLength = handler.Length; + + if ( packetLength <= 0 ) + { + if ( length >= 3 ) + { + packetLength = buffer.GetPacketLength(); + + if ( packetLength < 3 ) + { + ns.Dispose(); + break; + } + } + else + { + break; + } + } + + if ( length >= packetLength ) + { + if ( handler.Ingame && ns.Mobile == null ) + { + Console.WriteLine( "Client: {0}: Sent ingame packet (0x{1:X2}) before having been attached to a mobile", ns, packetID ); + ns.Dispose(); + break; + } + else if ( handler.Ingame && ns.Mobile.Deleted ) + { + ns.Dispose(); + break; + } + else + { + ThrottlePacketCallback throttler = handler.ThrottleCallback; + + if ( throttler != null && !throttler( ns ) ) + { + m_Throttled.Enqueue( ns ); + return false; + } + + PacketReceiveProfile prof = PacketReceiveProfile.Acquire( packetID ); + + if ( prof != null ) { + prof.Start(); + } + + byte[] packetBuffer; + + if ( BufferSize >= packetLength ) + packetBuffer = m_Buffers.AcquireBuffer(); + else + packetBuffer = new byte[packetLength]; + + packetLength = buffer.Dequeue( packetBuffer, 0, packetLength ); + + PacketReader r = new PacketReader( packetBuffer, packetLength, handler.Length != 0 ); + + handler.OnReceive( ns, r ); + length = buffer.Length; + + if ( BufferSize >= packetLength ) + m_Buffers.ReleaseBuffer( packetBuffer ); + + if ( prof != null ) { + prof.Finish( packetLength ); + } + } + } + else + { + break; + } + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/Source/Network/NetState.cs b/Source/Network/NetState.cs new file mode 100644 index 0000000..c829339 --- /dev/null +++ b/Source/Network/NetState.cs @@ -0,0 +1,1221 @@ +/*************************************************************************** + * NetState.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using Server; +using Server.Accounting; +using Server.Network; +using Server.Items; +using Server.Gumps; +using Server.Menus; +using Server.HuePickers; +using Server.Diagnostics; + +namespace Server.Network { + public interface IPacketEncoder { + void EncodeOutgoingPacket( NetState to, ref byte[] buffer, ref int length ); + void DecodeIncomingPacket( NetState from, ref byte[] buffer, ref int length ); + } + + public delegate void NetStateCreatedCallback( NetState ns ); + + public class NetState { + private Socket m_Socket; + private IPAddress m_Address; + private ByteQueue m_Buffer; + private byte[] m_RecvBuffer; + private SendQueue m_SendQueue; + private bool m_Seeded; + private bool m_Running; + +#if Framework_4_0 + private SocketAsyncEventArgs m_ReceiveEventArgs, m_SendEventArgs; +#else + private AsyncCallback m_OnReceive, m_OnSend; +#endif + + private MessagePump m_MessagePump; + private ServerInfo[] m_ServerInfo; + private IAccount m_Account; + private Mobile m_Mobile; + private CityInfo[] m_CityInfo; + private List m_Gumps; + private List m_HuePickers; + private List m_Menus; + private List m_Trades; + private int m_Sequence; + private bool m_CompressionEnabled; + private string m_ToString; + private ClientVersion m_Version; + private bool m_SentFirstPacket; + private bool m_BlockAllPackets; + + private DateTime m_ConnectedOn; + + public DateTime ConnectedOn { + get { + return m_ConnectedOn; + } + } + + public TimeSpan ConnectedFor { + get { + return ( DateTime.Now - m_ConnectedOn ); + } + } + + internal int m_Seed; + internal int m_AuthID; + + public IPAddress Address { + get { + return m_Address; + } + } + + private ClientFlags m_Flags; + + private static bool m_Paused; + + [Flags] + private enum AsyncState { + Pending = 0x01, + Paused = 0x02 + } + + private AsyncState m_AsyncState; + private object m_AsyncLock = new object(); + + private IPacketEncoder m_Encoder = null; + + public IPacketEncoder PacketEncoder { + get { + return m_Encoder; + } + set { + m_Encoder = value; + } + } + + private static NetStateCreatedCallback m_CreatedCallback; + + public static NetStateCreatedCallback CreatedCallback { + get { + return m_CreatedCallback; + } + set { + m_CreatedCallback = value; + } + } + + public bool SentFirstPacket { + get { + return m_SentFirstPacket; + } + set { + m_SentFirstPacket = value; + } + } + + public bool BlockAllPackets { + get { + return m_BlockAllPackets; + } + set { + m_BlockAllPackets = value; + } + } + + public ClientFlags Flags { + get { + return m_Flags; + } + set { + m_Flags = value; + } + } + + public ClientVersion Version { + get { + return m_Version; + } + set { + m_Version = value; + + if ( value >= m_Version70160 ) { + _ProtocolChanges = ProtocolChanges.Version70160; + } else if ( value >= m_Version70130 ) { + _ProtocolChanges = ProtocolChanges.Version70130; + } else if ( value >= m_Version7090 ) { + _ProtocolChanges = ProtocolChanges.Version7090; + } else if ( value >= m_Version7000 ) { + _ProtocolChanges = ProtocolChanges.Version7000; + } else if ( value >= m_Version60142 ) { + _ProtocolChanges = ProtocolChanges.Version60142; + } else if ( value >= m_Version6017 ) { + _ProtocolChanges = ProtocolChanges.Version6017; + } else if ( value >= m_Version6000 ) { + _ProtocolChanges = ProtocolChanges.Version6000; + } else if ( value >= m_Version502b ) { + _ProtocolChanges = ProtocolChanges.Version502b; + } else if ( value >= m_Version500a ) { + _ProtocolChanges = ProtocolChanges.Version500a; + } else if ( value >= m_Version407a ) { + _ProtocolChanges = ProtocolChanges.Version407a; + } else if ( value >= m_Version400a ) { + _ProtocolChanges = ProtocolChanges.Version400a; + } + } + } + + private static ClientVersion m_Version400a = new ClientVersion( "4.0.0a" ); + private static ClientVersion m_Version407a = new ClientVersion( "4.0.7a" ); + private static ClientVersion m_Version500a = new ClientVersion( "5.0.0a" ); + private static ClientVersion m_Version502b = new ClientVersion( "5.0.2b" ); + private static ClientVersion m_Version6000 = new ClientVersion( "6.0.0.0" ); + private static ClientVersion m_Version6017 = new ClientVersion( "6.0.1.7" ); + private static ClientVersion m_Version60142 = new ClientVersion( "6.0.14.2" ); + private static ClientVersion m_Version7000 = new ClientVersion( "7.0.0.0" ); + private static ClientVersion m_Version7090 = new ClientVersion( "7.0.9.0" ); + private static ClientVersion m_Version70130 = new ClientVersion( "7.0.13.0" ); + private static ClientVersion m_Version70160 = new ClientVersion( "7.0.16.0" ); + + private ProtocolChanges _ProtocolChanges; + + private enum ProtocolChanges { + NewSpellbook = 0x00000001, + DamagePacket = 0x00000002, + Unpack = 0x00000004, + BuffIcon = 0x00000008, + NewHaven = 0x00000010, + ContainerGridLines = 0x00000020, + ExtendedSupportedFeatures = 0x00000040, + StygianAbyss = 0x00000080, + HighSeas = 0x00000100, + NewCharacterList = 0x00000200, + NewCharacterCreation = 0x00000400, + + Version400a = NewSpellbook, + Version407a = Version400a | DamagePacket, + Version500a = Version407a | Unpack, + Version502b = Version500a | BuffIcon, + Version6000 = Version502b | NewHaven, + Version6017 = Version6000 | ContainerGridLines, + Version60142 = Version6017 | ExtendedSupportedFeatures, + Version7000 = Version60142 | StygianAbyss, + Version7090 = Version7000 | HighSeas, + Version70130 = Version7090 | NewCharacterList, + Version70160 = Version70130 | NewCharacterCreation + } + + public bool NewSpellbook { get { return ((_ProtocolChanges & ProtocolChanges.NewSpellbook) != 0); } } + public bool DamagePacket { get { return ((_ProtocolChanges & ProtocolChanges.DamagePacket) != 0); } } + public bool Unpack { get { return ((_ProtocolChanges & ProtocolChanges.Unpack) != 0); } } + public bool BuffIcon { get { return ((_ProtocolChanges & ProtocolChanges.BuffIcon) != 0); } } + public bool NewHaven { get { return ((_ProtocolChanges & ProtocolChanges.NewHaven) != 0); } } + public bool ContainerGridLines { get { return ((_ProtocolChanges & ProtocolChanges.ContainerGridLines) != 0); } } + public bool ExtendedSupportedFeatures { get { return ((_ProtocolChanges & ProtocolChanges.ExtendedSupportedFeatures) != 0); } } + public bool StygianAbyss { get { return ((_ProtocolChanges & ProtocolChanges.StygianAbyss) != 0); } } + public bool HighSeas { get { return ((_ProtocolChanges & ProtocolChanges.HighSeas) != 0); } } + public bool NewCharacterList { get { return ((_ProtocolChanges & ProtocolChanges.NewCharacterList) != 0); } } + public bool NewCharacterCreation { get { return ((_ProtocolChanges & ProtocolChanges.NewCharacterCreation) != 0); } } + + public bool IsUOTDClient { + get { + return ( (m_Flags & ClientFlags.UOTD) != 0 || ( m_Version != null && m_Version.Type == ClientType.UOTD ) ); + } + } + + public List Trades { + get { + return m_Trades; + } + } + + public void ValidateAllTrades() { + for ( int i = m_Trades.Count - 1; i >= 0; --i ) { + if ( i >= m_Trades.Count ) { + continue; + } + + SecureTrade trade = m_Trades[i]; + + if ( trade.From.Mobile.Deleted || trade.To.Mobile.Deleted || !trade.From.Mobile.Alive || !trade.To.Mobile.Alive || !trade.From.Mobile.InRange( trade.To.Mobile, 2 ) || trade.From.Mobile.Map != trade.To.Mobile.Map ) { + trade.Cancel(); + } + } + } + + public void CancelAllTrades() { + for ( int i = m_Trades.Count - 1; i >= 0; --i ) { + if ( i < m_Trades.Count ) { + m_Trades[i].Cancel(); + } + } + } + + public void RemoveTrade( SecureTrade trade ) { + m_Trades.Remove( trade ); + } + + public SecureTrade FindTrade( Mobile m ) { + for ( int i = 0; i < m_Trades.Count; ++i ) { + SecureTrade trade = m_Trades[i]; + + if ( trade.From.Mobile == m || trade.To.Mobile == m ) { + return trade; + } + } + + return null; + } + + public SecureTradeContainer FindTradeContainer( Mobile m ) { + for ( int i = 0; i < m_Trades.Count; ++i ) { + SecureTrade trade = m_Trades[i]; + + SecureTradeInfo from = trade.From; + SecureTradeInfo to = trade.To; + + if ( from.Mobile == m_Mobile && to.Mobile == m ) { + return from.Container; + } else if ( from.Mobile == m && to.Mobile == m_Mobile ) { + return to.Container; + } + } + + return null; + } + + public SecureTradeContainer AddTrade( NetState state ) { + SecureTrade newTrade = new SecureTrade( m_Mobile, state.m_Mobile ); + + m_Trades.Add( newTrade ); + state.m_Trades.Add( newTrade ); + + return newTrade.From.Container; + } + + public bool CompressionEnabled { + get { + return m_CompressionEnabled; + } + set { + m_CompressionEnabled = value; + } + } + + public int Sequence { + get { + return m_Sequence; + } + set { + m_Sequence = value; + } + } + + public IEnumerable Gumps { + get { + return m_Gumps; + } + } + + public IEnumerable HuePickers { + get { + return m_HuePickers; + } + } + + public IEnumerable Menus { + get { + return m_Menus; + } + } + + private static int m_GumpCap = 512, m_HuePickerCap = 512, m_MenuCap = 512; + + public static int GumpCap { + get { + return m_GumpCap; + } + set { + m_GumpCap = value; + } + } + + public static int HuePickerCap { + get { + return m_HuePickerCap; + } + set { + m_HuePickerCap = value; + } + } + + public static int MenuCap { + get { + return m_MenuCap; + } + set { + m_MenuCap = value; + } + } + + public void WriteConsole( string text ) { + Console.WriteLine( "Client: {0}: {1}", this, text ); + } + + public void WriteConsole( string format, params object[] args ) { + WriteConsole( String.Format( format, args ) ); + } + + public void AddMenu( IMenu menu ) { + if ( m_Menus == null ) { + m_Menus = new List(); + } + + if ( m_Menus.Count < m_MenuCap ) { + m_Menus.Add( menu ); + } else { + WriteConsole( "Exceeded menu cap, disconnecting..." ); + Dispose(); + } + } + + public void RemoveMenu( IMenu menu ) { + if ( m_Menus != null ) { + m_Menus.Remove( menu ); + } + } + + public void RemoveMenu( int index ) { + if ( m_Menus != null ) { + m_Menus.RemoveAt( index ); + } + } + + public void ClearMenus() { + if ( m_Menus != null ) { + m_Menus.Clear(); + } + } + + public void AddHuePicker( HuePicker huePicker ) { + if ( m_HuePickers == null ) { + m_HuePickers = new List(); + } + + if ( m_HuePickers.Count < m_HuePickerCap ) { + m_HuePickers.Add( huePicker ); + } else { + WriteConsole( "Exceeded hue picker cap, disconnecting..." ); + Dispose(); + } + } + + public void RemoveHuePicker( HuePicker huePicker ) { + if ( m_HuePickers != null ) { + m_HuePickers.Remove( huePicker ); + } + } + + public void RemoveHuePicker( int index ) { + if ( m_HuePickers != null ) { + m_HuePickers.RemoveAt( index ); + } + } + + public void ClearHuePickers() { + if ( m_HuePickers != null ) { + m_HuePickers.Clear(); + } + } + + public void AddGump( Gump gump ) { + if ( m_Gumps == null ) { + m_Gumps = new List(); + } + + if ( m_Gumps.Count < m_GumpCap ) { + m_Gumps.Add( gump ); + } else { + WriteConsole( "Exceeded gump cap, disconnecting..." ); + Dispose(); + } + } + + public void RemoveGump( Gump gump ) { + if ( m_Gumps != null ) { + m_Gumps.Remove( gump ); + } + } + + public void RemoveGump( int index ) { + if ( m_Gumps != null ) { + m_Gumps.RemoveAt( index ); + } + } + + public void ClearGumps() { + if ( m_Gumps != null ) { + m_Gumps.Clear(); + } + } + + public void LaunchBrowser( string url ) { + Send( new MessageLocalized( Serial.MinusOne, -1, MessageType.Label, 0x35, 3, 501231, "", "" ) ); + Send( new LaunchBrowser( url ) ); + } + + public CityInfo[] CityInfo { + get { + return m_CityInfo; + } + set { + m_CityInfo = value; + } + } + + public Mobile Mobile { + get { + return m_Mobile; + } + set { + m_Mobile = value; + } + } + + public ServerInfo[] ServerInfo { + get { + return m_ServerInfo; + } + set { + m_ServerInfo = value; + } + } + + public IAccount Account { + get { + return m_Account; + } + set { + m_Account = value; + } + } + + public override string ToString() { + return m_ToString; + } + + private static List m_Instances = new List(); + + public static List Instances { + get { + return m_Instances; + } + } + + private static BufferPool m_ReceiveBufferPool = new BufferPool( "Receive", 2048, 2048 ); + + public NetState( Socket socket, MessagePump messagePump ) + { + m_Socket = socket; + m_Buffer = new ByteQueue(); + m_Seeded = false; + m_Running = false; + m_RecvBuffer = m_ReceiveBufferPool.AcquireBuffer(); + m_MessagePump = messagePump; + m_Gumps = new List(); + m_HuePickers = new List(); + m_Menus = new List(); + m_Trades = new List(); + + m_SendQueue = new SendQueue(); + + m_NextCheckActivity = DateTime.Now + TimeSpan.FromMinutes( 0.5 ); + + m_Instances.Add( this ); + + try { + m_Address = Utility.Intern( ( ( IPEndPoint ) m_Socket.RemoteEndPoint ).Address ); + m_ToString = m_Address.ToString(); + } catch ( Exception ex ) { + TraceException( ex ); + m_Address = IPAddress.None; + m_ToString = "(error)"; + } + + m_ConnectedOn = DateTime.Now; + + if ( m_CreatedCallback != null ) + { + m_CreatedCallback( this ); + } + } + + public virtual void Send( Packet p ) { + if ( m_Socket == null || m_BlockAllPackets ) { + p.OnSend(); + return; + } + + PacketSendProfile prof = PacketSendProfile.Acquire( p.GetType() ); + + int length; + byte[] buffer = p.Compile( m_CompressionEnabled, out length ); + + if ( buffer != null ) { + if ( buffer.Length <= 0 || length <= 0 ) { + p.OnSend(); + return; + } + + if ( prof != null ) { + prof.Start(); + } + + if ( m_Encoder != null ) { + m_Encoder.EncodeOutgoingPacket( this, ref buffer, ref length ); + } + + try { + SendQueue.Gram gram; + + lock ( m_SendQueue ) { + gram = m_SendQueue.Enqueue( buffer, length ); + } + + if ( gram != null ) { +#if Framework_4_0 + m_SendEventArgs.SetBuffer( gram.Buffer, 0, gram.Length ); + Send_Start(); +#else + try { + m_Socket.BeginSend( gram.Buffer, 0, gram.Length, SocketFlags.None, m_OnSend, m_Socket ); + } catch ( Exception ex ) { + TraceException( ex ); + Dispose( false ); + } +#endif + } + } catch ( CapacityExceededException ) { + Console.WriteLine( "Client: {0}: Too much data pending, disconnecting...", this ); + Dispose( false ); + } + + p.OnSend(); + + if ( prof != null ) { + prof.Finish( length ); + } + } else { + Console.WriteLine( "Client: {0}: null buffer send, disconnecting...", this ); + using ( StreamWriter op = new StreamWriter( "null_send.log", true ) ) + { + op.WriteLine( "{0} Client: {1}: null buffer send, disconnecting...", DateTime.Now, this ); + op.WriteLine( new System.Diagnostics.StackTrace() ); + } + Dispose(); + } + } + +#if Framework_4_0 + public void Start() { + m_ReceiveEventArgs = new SocketAsyncEventArgs(); + m_ReceiveEventArgs.Completed += new EventHandler( Receive_Completion ); + m_ReceiveEventArgs.SetBuffer( m_RecvBuffer, 0, m_RecvBuffer.Length ); + + m_SendEventArgs = new SocketAsyncEventArgs(); + m_SendEventArgs.Completed += new EventHandler( Send_Completion ); + + m_Running = true; + + if ( m_Socket == null || m_Paused ) { + return; + } + + Receive_Start(); + } + + private void Receive_Start() + { + try { + bool result = false; + + do { + lock ( m_AsyncLock ) { + if ( ( m_AsyncState & ( AsyncState.Pending | AsyncState.Paused ) ) == 0 ) { + m_AsyncState |= AsyncState.Pending; + result = !m_Socket.ReceiveAsync( m_ReceiveEventArgs ); + + if ( result ) + Receive_Process( m_ReceiveEventArgs ); + } + } + } while ( result ); + } catch ( Exception ex ) { + TraceException( ex ); + Dispose( false ); + } + } + + private void Receive_Completion( object sender, SocketAsyncEventArgs e ) + { + Receive_Process( e ); + + if ( !m_Disposing ) + Receive_Start(); + } + + private void Receive_Process( SocketAsyncEventArgs e ) + { + int byteCount = e.BytesTransferred; + + if ( e.SocketError != SocketError.Success || byteCount <= 0 ) { + Dispose( false ); + return; + } + + m_NextCheckActivity = DateTime.Now + TimeSpan.FromMinutes( 1.2 ); + + byte[] buffer = m_RecvBuffer; + + if ( m_Encoder != null ) + m_Encoder.DecodeIncomingPacket( this, ref buffer, ref byteCount ); + + lock ( m_Buffer ) + m_Buffer.Enqueue( buffer, 0, byteCount ); + + m_MessagePump.OnReceive( this ); + + lock ( m_AsyncLock ) { + m_AsyncState &= ~AsyncState.Pending; + } + } + + private void Send_Start() + { + try { + bool result = false; + + do { + result = !m_Socket.SendAsync( m_SendEventArgs ); + + if ( result ) + Send_Process( m_SendEventArgs ); + } while ( result ); + } catch ( Exception ex ) { + TraceException( ex ); + Dispose( false ); + } + } + + private void Send_Completion( object sender, SocketAsyncEventArgs e ) + { + Send_Process( e ); + + if ( m_Disposing ) + return; + + if ( m_CoalesceSleep >= 0 ) { + Thread.Sleep( m_CoalesceSleep ); + } + + SendQueue.Gram gram; + + lock ( m_SendQueue ) { + gram = m_SendQueue.Dequeue(); + } + + if ( gram != null ) { + m_SendEventArgs.SetBuffer( gram.Buffer, 0, gram.Length ); + Send_Start(); + } + } + + private void Send_Process( SocketAsyncEventArgs e ) + { + int bytes = e.BytesTransferred; + + if ( e.SocketError != SocketError.Success || bytes <= 0 ) { + Dispose( false ); + return; + } + + m_NextCheckActivity = DateTime.Now + TimeSpan.FromMinutes( 1.2 ); + } + + public static void Pause() { + m_Paused = true; + + for ( int i = 0; i < m_Instances.Count; ++i ) { + NetState ns = m_Instances[i]; + + lock ( ns.m_AsyncLock ) { + ns.m_AsyncState |= AsyncState.Paused; + } + } + } + + public static void Resume() { + m_Paused = false; + + for ( int i = 0; i < m_Instances.Count; ++i ) { + NetState ns = m_Instances[i]; + + if ( ns.m_Socket == null ) { + continue; + } + + lock ( ns.m_AsyncLock ) { + ns.m_AsyncState &= ~AsyncState.Paused; + + if ( ( ns.m_AsyncState & AsyncState.Pending ) == 0 ) + ns.Receive_Start(); + } + } + } + + public bool Flush() { + if ( m_Socket == null || !m_SendQueue.IsFlushReady ) { + return false; + } + + SendQueue.Gram gram; + + lock ( m_SendQueue ) { + gram = m_SendQueue.CheckFlushReady(); + } + + if ( gram != null ) { + m_SendEventArgs.SetBuffer( gram.Buffer, 0, gram.Length ); + Send_Start(); + } + + return false; + } + +#else + + public void Start() { + m_OnReceive = new AsyncCallback( OnReceive ); + m_OnSend = new AsyncCallback( OnSend ); + + m_Running = true; + + if ( m_Socket == null || m_Paused ) { + return; + } + + try { + lock ( m_AsyncLock ) { + if ( ( m_AsyncState & ( AsyncState.Pending | AsyncState.Paused ) ) == 0 ) { + InternalBeginReceive(); + } + } + } catch ( Exception ex ) { + TraceException( ex ); + Dispose( false ); + } + } + + private void InternalBeginReceive() { + m_AsyncState |= AsyncState.Pending; + + m_Socket.BeginReceive( m_RecvBuffer, 0, m_RecvBuffer.Length, SocketFlags.None, m_OnReceive, m_Socket ); + } + + private void OnReceive( IAsyncResult asyncResult ) { + Socket s = (Socket)asyncResult.AsyncState; + + try { + int byteCount = s.EndReceive( asyncResult ); + + if ( byteCount > 0 ) { + m_NextCheckActivity = DateTime.Now + TimeSpan.FromMinutes( 1.2 ); + + byte[] buffer = m_RecvBuffer; + + if ( m_Encoder != null ) + m_Encoder.DecodeIncomingPacket( this, ref buffer, ref byteCount ); + + lock ( m_Buffer ) + m_Buffer.Enqueue( buffer, 0, byteCount ); + + m_MessagePump.OnReceive( this ); + + lock ( m_AsyncLock ) { + m_AsyncState &= ~AsyncState.Pending; + + if ( ( m_AsyncState & AsyncState.Paused ) == 0 ) { + try { + InternalBeginReceive(); + } catch ( Exception ex ) { + TraceException( ex ); + Dispose( false ); + } + } + } + } else { + Dispose( false ); + } + } catch { + Dispose( false ); + } + } + + private void OnSend( IAsyncResult asyncResult ) { + Socket s = (Socket)asyncResult.AsyncState; + + try { + int bytes = s.EndSend( asyncResult ); + + if ( bytes <= 0 ) { + Dispose( false ); + return; + } + + m_NextCheckActivity = DateTime.Now + TimeSpan.FromMinutes( 1.2 ); + + if ( m_CoalesceSleep >= 0 ) { + Thread.Sleep( m_CoalesceSleep ); + } + + SendQueue.Gram gram; + + lock ( m_SendQueue ) { + gram = m_SendQueue.Dequeue(); + } + + if ( gram != null ) { + try { + s.BeginSend( gram.Buffer, 0, gram.Length, SocketFlags.None, m_OnSend, s ); + } catch ( Exception ex ) { + TraceException( ex ); + Dispose( false ); + } + } + } catch ( Exception ){ + Dispose( false ); + } + } + + public static void Pause() { + m_Paused = true; + + for ( int i = 0; i < m_Instances.Count; ++i ) { + NetState ns = m_Instances[i]; + + lock ( ns.m_AsyncLock ) { + ns.m_AsyncState |= AsyncState.Paused; + } + } + } + + public static void Resume() { + m_Paused = false; + + for ( int i = 0; i < m_Instances.Count; ++i ) { + NetState ns = m_Instances[i]; + + if ( ns.m_Socket == null ) { + continue; + } + + lock ( ns.m_AsyncLock ) { + ns.m_AsyncState &= ~AsyncState.Paused; + + try { + if ( ( ns.m_AsyncState & AsyncState.Pending ) == 0 ) + ns.InternalBeginReceive(); + } catch ( Exception ex ) { + TraceException( ex ); + ns.Dispose( false ); + } + } + } + } + + public bool Flush() { + if ( m_Socket == null || !m_SendQueue.IsFlushReady ) { + return false; + } + + SendQueue.Gram gram; + + lock ( m_SendQueue ) { + gram = m_SendQueue.CheckFlushReady(); + } + + if ( gram != null ) { + try { + m_Socket.BeginSend( gram.Buffer, 0, gram.Length, SocketFlags.None, m_OnSend, m_Socket ); + return true; + } catch ( Exception ex ) { + TraceException( ex ); + Dispose( false ); + } + } + + return false; + } +#endif + + public PacketHandler GetHandler( int packetID ) + { + if ( ContainerGridLines ) + return PacketHandlers.Get6017Handler( packetID ); + else + return PacketHandlers.GetHandler( packetID ); + } + + public static void FlushAll() { + for ( int i = 0; i < m_Instances.Count; ++i ) { + NetState ns = m_Instances[i]; + + ns.Flush(); + } + } + + private static int m_CoalesceSleep = -1; + + public static int CoalesceSleep { + get { + return m_CoalesceSleep; + } + set { + m_CoalesceSleep = value; + } + } + + private DateTime m_NextCheckActivity; + + public bool CheckAlive() { + if ( m_Socket == null ) + return false; + + if ( DateTime.Now < m_NextCheckActivity ) { + return true; + } + + Console.WriteLine( "Client: {0}: Disconnecting due to inactivity...", this ); + + Dispose(); + return false; + } + + public static void TraceException( Exception ex ) { + try { + using ( StreamWriter op = new StreamWriter( "network-errors.log", true ) ) { + op.WriteLine( "# {0}", DateTime.Now ); + + op.WriteLine( ex ); + + op.WriteLine(); + op.WriteLine(); + } + } catch { + } + + try { + Console.WriteLine( ex ); + } catch { + } + } + + private bool m_Disposing; + + public void Dispose() { + Dispose( true ); + } + + public virtual void Dispose( bool flush ) { + if ( m_Socket == null || m_Disposing ) { + return; + } + + m_Disposing = true; + + if ( flush ) + flush = Flush(); + + try { + m_Socket.Shutdown( SocketShutdown.Both ); + } catch ( SocketException ex ) { + TraceException( ex ); + } + + try { + m_Socket.Close(); + } catch ( SocketException ex ) { + TraceException( ex ); + } + + if ( m_RecvBuffer != null ) + m_ReceiveBufferPool.ReleaseBuffer( m_RecvBuffer ); + + m_Socket = null; + + m_Buffer = null; + m_RecvBuffer = null; + +#if Framework_4_0 + m_ReceiveEventArgs = null; + m_SendEventArgs = null; +#else + m_OnReceive = null; + m_OnSend = null; +#endif + + m_Running = false; + + m_Disposed.Enqueue( this ); + + if ( /*!flush &&*/ !m_SendQueue.IsEmpty ) { + lock ( m_SendQueue ) + m_SendQueue.Clear(); + } + } + + public static void Initialize() { + Timer.DelayCall( TimeSpan.FromMinutes( 1.0 ), TimeSpan.FromMinutes( 1.5 ), new TimerCallback( CheckAllAlive ) ); + } + + public static void CheckAllAlive() { + try { + for ( int i = 0; i < m_Instances.Count; ++i ) { + m_Instances[i].CheckAlive(); + } + } catch ( Exception ex ) { + TraceException( ex ); + } + } + + private static Queue m_Disposed = Queue.Synchronized( new Queue() ); + + public static void ProcessDisposedQueue() { + int breakout = 0; + + while ( breakout < 200 && m_Disposed.Count > 0 ) { + ++breakout; + + NetState ns = ( NetState ) m_Disposed.Dequeue(); + + Mobile m = ns.m_Mobile; + IAccount a = ns.m_Account; + + if ( m != null ) { + m.NetState = null; + ns.m_Mobile = null; + } + + ns.m_Gumps.Clear(); + ns.m_Menus.Clear(); + ns.m_HuePickers.Clear(); + ns.m_Account = null; + ns.m_ServerInfo = null; + ns.m_CityInfo = null; + + m_Instances.Remove( ns ); + + if ( a != null ) { + ns.WriteConsole( "Disconnected. [{0} Online] [{1}]", m_Instances.Count, a ); + } else { + ns.WriteConsole( "Disconnected. [{0} Online]", m_Instances.Count ); + } + } + } + + public bool Running { + get { + return m_Running; + } + } + + public bool Seeded { + get { + return m_Seeded; + } + set { + m_Seeded = value; + } + } + + public Socket Socket { + get { + return m_Socket; + } + } + + public ByteQueue Buffer { + get { + return m_Buffer; + } + } + + public ExpansionInfo ExpansionInfo { + get { + for ( int i = ExpansionInfo.Table.Length - 1; i >= 0; i-- ) { + ExpansionInfo info = ExpansionInfo.Table[i]; + + if ( ( info.RequiredClient != null && this.Version >= info.RequiredClient ) || ( ( this.Flags & info.ClientFlags ) != 0 ) ) { + return info; + } + } + + return ExpansionInfo.GetInfo( Expansion.None ); + } + } + + public Expansion Expansion { + get { + return ( Expansion ) this.ExpansionInfo.ID; + } + } + + public bool SupportsExpansion( ExpansionInfo info, bool checkCoreExpansion ) { + if ( info == null || ( checkCoreExpansion && ( int ) Core.Expansion < info.ID ) ) + return false; + + if ( info.RequiredClient != null ) + return ( this.Version >= info.RequiredClient ); + + return ( ( this.Flags & info.ClientFlags ) != 0 ); + } + + public bool SupportsExpansion( Expansion ex, bool checkCoreExpansion ) { + return SupportsExpansion( ExpansionInfo.GetInfo( ex ), checkCoreExpansion ); + } + + public bool SupportsExpansion( Expansion ex ) { + return SupportsExpansion( ex, true ); + } + + public bool SupportsExpansion( ExpansionInfo info ) { + return SupportsExpansion( info, true ); + } + } +} \ No newline at end of file diff --git a/Source/Network/PacketHandler.cs b/Source/Network/PacketHandler.cs new file mode 100644 index 0000000..9750014 --- /dev/null +++ b/Source/Network/PacketHandler.cs @@ -0,0 +1,82 @@ +/*************************************************************************** + * PacketHandler.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Network +{ + public delegate void OnPacketReceive( NetState state, PacketReader pvSrc ); + public delegate bool ThrottlePacketCallback( NetState state ); + + public class PacketHandler + { + private int m_PacketID; + private int m_Length; + private bool m_Ingame; + private OnPacketReceive m_OnReceive; + private ThrottlePacketCallback m_ThrottleCallback; + + public PacketHandler( int packetID, int length, bool ingame, OnPacketReceive onReceive ) + { + m_PacketID = packetID; + m_Length = length; + m_Ingame = ingame; + m_OnReceive = onReceive; + } + + public int PacketID + { + get + { + return m_PacketID; + } + } + + public int Length + { + get + { + return m_Length; + } + } + + public OnPacketReceive OnReceive + { + get + { + return m_OnReceive; + } + } + + public ThrottlePacketCallback ThrottleCallback + { + get{ return m_ThrottleCallback; } + set{ m_ThrottleCallback = value; } + } + + public bool Ingame + { + get + { + return m_Ingame; + } + } + } +} \ No newline at end of file diff --git a/Source/Network/PacketHandlers.cs b/Source/Network/PacketHandlers.cs new file mode 100644 index 0000000..d6bf562 --- /dev/null +++ b/Source/Network/PacketHandlers.cs @@ -0,0 +1,2464 @@ +/*************************************************************************** + * PacketHandlers.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; +using Server.Accounting; +using Server.Gumps; +using Server.Targeting; +using Server.Items; +using Server.Menus; +using Server.Mobiles; +using Server.Movement; +using Server.Prompts; +using Server.HuePickers; +using Server.ContextMenus; +using Server.Diagnostics; +using CV = Server.ClientVersion; + +namespace Server.Network +{ + public enum MessageType + { + Regular = 0x00, + System = 0x01, + Emote = 0x02, + Label = 0x06, + Focus = 0x07, + Whisper = 0x08, + Yell = 0x09, + Spell = 0x0A, + + Guild = 0x0D, + Alliance = 0x0E, + Command = 0x0F, + + Encoded = 0xC0 + } + + public static class PacketHandlers + { + private static PacketHandler[] m_Handlers; + private static PacketHandler[] m_6017Handlers; + + private static PacketHandler[] m_ExtendedHandlersLow; + private static Dictionary m_ExtendedHandlersHigh; + + private static EncodedPacketHandler[] m_EncodedHandlersLow; + private static Dictionary m_EncodedHandlersHigh; + + public static PacketHandler[] Handlers + { + get{ return m_Handlers; } + } + + static PacketHandlers() + { + m_Handlers = new PacketHandler[0x100]; + m_6017Handlers = new PacketHandler[0x100]; + + m_ExtendedHandlersLow = new PacketHandler[0x100]; + m_ExtendedHandlersHigh = new Dictionary(); + + m_EncodedHandlersLow = new EncodedPacketHandler[0x100]; + m_EncodedHandlersHigh = new Dictionary(); + + Register( 0x00, 104, false, new OnPacketReceive( CreateCharacter ) ); + Register( 0x01, 5, false, new OnPacketReceive( Disconnect ) ); + Register( 0x02, 7, true, new OnPacketReceive( MovementReq ) ); + Register( 0x03, 0, true, new OnPacketReceive( AsciiSpeech ) ); + Register( 0x04, 2, true, new OnPacketReceive( GodModeRequest ) ); + Register( 0x05, 5, true, new OnPacketReceive( AttackReq ) ); + Register( 0x06, 5, true, new OnPacketReceive( UseReq ) ); + Register( 0x07, 7, true, new OnPacketReceive( LiftReq ) ); + Register( 0x08, 14, true, new OnPacketReceive( DropReq ) ); + Register( 0x09, 5, true, new OnPacketReceive( LookReq ) ); + Register( 0x0A, 11, true, new OnPacketReceive( Edit ) ); + Register( 0x12, 0, true, new OnPacketReceive( TextCommand ) ); + Register( 0x13, 10, true, new OnPacketReceive( EquipReq ) ); + Register( 0x14, 6, true, new OnPacketReceive( ChangeZ ) ); + Register( 0x22, 3, true, new OnPacketReceive( Resynchronize ) ); + Register( 0x2C, 2, true, new OnPacketReceive( DeathStatusResponse ) ); + Register( 0x34, 10, true, new OnPacketReceive( MobileQuery ) ); + Register( 0x3A, 0, true, new OnPacketReceive( ChangeSkillLock ) ); + Register( 0x3B, 0, true, new OnPacketReceive( VendorBuyReply ) ); + Register( 0x47, 11, true, new OnPacketReceive( NewTerrain ) ); + Register( 0x48, 73, true, new OnPacketReceive( NewAnimData ) ); + Register( 0x58, 106, true, new OnPacketReceive( NewRegion ) ); + Register( 0x5D, 73, false, new OnPacketReceive( PlayCharacter ) ); + Register( 0x61, 9, true, new OnPacketReceive( DeleteStatic ) ); + Register( 0x6C, 19, true, new OnPacketReceive( TargetResponse ) ); + Register( 0x6F, 0, true, new OnPacketReceive( SecureTrade ) ); + Register( 0x72, 5, true, new OnPacketReceive( SetWarMode ) ); + Register( 0x73, 2, false, new OnPacketReceive( PingReq ) ); + Register( 0x75, 35, true, new OnPacketReceive( RenameRequest ) ); + Register( 0x79, 9, true, new OnPacketReceive( ResourceQuery ) ); + Register( 0x7E, 2, true, new OnPacketReceive( GodviewQuery ) ); + Register( 0x7D, 13, true, new OnPacketReceive( MenuResponse ) ); + Register( 0x80, 62, false, new OnPacketReceive( AccountLogin ) ); + Register( 0x83, 39, false, new OnPacketReceive( DeleteCharacter ) ); + Register( 0x91, 65, false, new OnPacketReceive( GameLogin ) ); + Register( 0x95, 9, true, new OnPacketReceive( HuePickerResponse ) ); + Register( 0x96, 0, true, new OnPacketReceive( GameCentralMoniter ) ); + Register( 0x98, 0, true, new OnPacketReceive( MobileNameRequest ) ); + Register( 0x9A, 0, true, new OnPacketReceive( AsciiPromptResponse ) ); + Register( 0x9B, 258, true, new OnPacketReceive( HelpRequest ) ); + Register( 0x9D, 51, true, new OnPacketReceive( GMSingle ) ); + Register( 0x9F, 0, true, new OnPacketReceive( VendorSellReply ) ); + Register( 0xA0, 3, false, new OnPacketReceive( PlayServer ) ); + Register( 0xA4, 149, false, new OnPacketReceive( SystemInfo ) ); + Register( 0xA7, 4, true, new OnPacketReceive( RequestScrollWindow ) ); + Register( 0xAD, 0, true, new OnPacketReceive( UnicodeSpeech ) ); + Register( 0xB1, 0, true, new OnPacketReceive( DisplayGumpResponse ) ); + Register( 0xB5, 64, true, new OnPacketReceive( ChatRequest ) ); + Register( 0xB6, 9, true, new OnPacketReceive( ObjectHelpRequest ) ); + Register( 0xB8, 0, true, new OnPacketReceive( ProfileReq ) ); + Register( 0xBB, 9, false, new OnPacketReceive( AccountID ) ); + Register( 0xBD, 0, false, new OnPacketReceive( ClientVersion ) ); + Register( 0xBE, 0, true, new OnPacketReceive( AssistVersion ) ); + Register( 0xBF, 0, true, new OnPacketReceive( ExtendedCommand ) ); + Register( 0xC2, 0, true, new OnPacketReceive( UnicodePromptResponse ) ); + Register( 0xC8, 2, true, new OnPacketReceive( SetUpdateRange ) ); + Register( 0xC9, 6, true, new OnPacketReceive( TripTime ) ); + Register( 0xCA, 6, true, new OnPacketReceive( UTripTime ) ); + Register( 0xCF, 0, false, new OnPacketReceive( AccountLogin ) ); + Register( 0xD0, 0, true, new OnPacketReceive( ConfigurationFile ) ); + Register( 0xD1, 2, true, new OnPacketReceive( LogoutReq ) ); + Register( 0xD6, 0, true, new OnPacketReceive( BatchQueryProperties ) ); + Register( 0xD7, 0, true, new OnPacketReceive( EncodedCommand ) ); + Register( 0xE1, 0, false, new OnPacketReceive( ClientType ) ); + Register( 0xEF, 21, false, new OnPacketReceive( LoginServerSeed ) ); + Register( 0xF8, 106, false, new OnPacketReceive( CreateCharacter70160 ) ); + + Register6017( 0x08, 15, true, new OnPacketReceive( DropReq6017 ) ); + + RegisterExtended( 0x05, false, new OnPacketReceive( ScreenSize ) ); + RegisterExtended( 0x06, true, new OnPacketReceive( PartyMessage ) ); + RegisterExtended( 0x07, true, new OnPacketReceive( QuestArrow ) ); + RegisterExtended( 0x09, true, new OnPacketReceive( DisarmRequest ) ); + RegisterExtended( 0x0A, true, new OnPacketReceive( StunRequest ) ); + RegisterExtended( 0x0B, false, new OnPacketReceive( Language ) ); + RegisterExtended( 0x0C, true, new OnPacketReceive( CloseStatus ) ); + RegisterExtended( 0x0E, true, new OnPacketReceive( Animate ) ); + RegisterExtended( 0x0F, false, new OnPacketReceive( Empty ) ); // What's this? + RegisterExtended( 0x10, true, new OnPacketReceive( QueryProperties ) ); + RegisterExtended( 0x13, true, new OnPacketReceive( ContextMenuRequest ) ); + RegisterExtended( 0x15, true, new OnPacketReceive( ContextMenuResponse ) ); + RegisterExtended( 0x1A, true, new OnPacketReceive( StatLockChange ) ); + RegisterExtended( 0x1C, true, new OnPacketReceive( CastSpell ) ); + RegisterExtended( 0x24, false, new OnPacketReceive( UnhandledBF ) ); + + RegisterEncoded( 0x19, true, new OnEncodedPacketReceive( SetAbility ) ); + RegisterEncoded( 0x28, true, new OnEncodedPacketReceive( GuildGumpRequest ) ); + + RegisterEncoded( 0x32, true, new OnEncodedPacketReceive( QuestGumpRequest ) ); + } + + public static void Register( int packetID, int length, bool ingame, OnPacketReceive onReceive ) + { + m_Handlers[packetID] = new PacketHandler( packetID, length, ingame, onReceive ); + + if ( m_6017Handlers[packetID] == null ) + m_6017Handlers[packetID] = new PacketHandler( packetID, length, ingame, onReceive ); + } + + public static PacketHandler GetHandler( int packetID ) + { + return m_Handlers[packetID]; + } + + public static void Register6017( int packetID, int length, bool ingame, OnPacketReceive onReceive ) + { + m_6017Handlers[packetID] = new PacketHandler( packetID, length, ingame, onReceive ); + } + + public static PacketHandler Get6017Handler( int packetID ) + { + return m_6017Handlers[packetID]; + } + + public static void RegisterExtended( int packetID, bool ingame, OnPacketReceive onReceive ) + { + if ( packetID >= 0 && packetID < 0x100 ) + m_ExtendedHandlersLow[packetID] = new PacketHandler( packetID, 0, ingame, onReceive ); + else + m_ExtendedHandlersHigh[packetID] = new PacketHandler( packetID, 0, ingame, onReceive ); + } + + public static PacketHandler GetExtendedHandler( int packetID ) + { + if ( packetID >= 0 && packetID < 0x100 ) + return m_ExtendedHandlersLow[packetID]; + else + { + PacketHandler handler; + m_ExtendedHandlersHigh.TryGetValue( packetID, out handler ); + return handler; + } + } + + public static void RemoveExtendedHandler( int packetID ) + { + if ( packetID >= 0 && packetID < 0x100 ) + m_ExtendedHandlersLow[packetID] = null; + else + m_ExtendedHandlersHigh.Remove( packetID ); + } + + public static void RegisterEncoded( int packetID, bool ingame, OnEncodedPacketReceive onReceive ) + { + if ( packetID >= 0 && packetID < 0x100 ) + m_EncodedHandlersLow[packetID] = new EncodedPacketHandler( packetID, ingame, onReceive ); + else + m_EncodedHandlersHigh[packetID] = new EncodedPacketHandler( packetID, ingame, onReceive ); + } + + public static EncodedPacketHandler GetEncodedHandler( int packetID ) + { + if ( packetID >= 0 && packetID < 0x100 ) + return m_EncodedHandlersLow[packetID]; + else + { + EncodedPacketHandler handler; + m_EncodedHandlersHigh.TryGetValue( packetID, out handler ); + return handler; + } + } + + public static void RemoveEncodedHandler( int packetID ) + { + if ( packetID >= 0 && packetID < 0x100 ) + m_EncodedHandlersLow[packetID] = null; + else + m_EncodedHandlersHigh.Remove( packetID ); + } + + public static void RegisterThrottler( int packetID, ThrottlePacketCallback t ) + { + PacketHandler ph = GetHandler( packetID ); + + if ( ph != null ) + ph.ThrottleCallback = t; + + ph = Get6017Handler( packetID ); + + if ( ph != null ) + ph.ThrottleCallback = t; + } + + private static void UnhandledBF( NetState state, PacketReader pvSrc ) + { + } + + public static void Empty( NetState state, PacketReader pvSrc ) + { + } + + public static void SetAbility( NetState state, IEntity e, EncodedReader reader ) + { + EventSink.InvokeSetAbility( new SetAbilityEventArgs( state.Mobile, reader.ReadInt32() ) ); + } + + public static void GuildGumpRequest( NetState state, IEntity e, EncodedReader reader ) + { + EventSink.InvokeGuildGumpRequest( new GuildGumpRequestArgs( state.Mobile ) ); + } + + public static void QuestGumpRequest( NetState state, IEntity e, EncodedReader reader ) + { + EventSink.InvokeQuestGumpRequest( new QuestGumpRequestArgs( state.Mobile ) ); + } + + public static void EncodedCommand( NetState state, PacketReader pvSrc ) + { + IEntity e = World.FindEntity( pvSrc.ReadInt32() ); + int packetID = pvSrc.ReadUInt16(); + + EncodedPacketHandler ph = GetEncodedHandler( packetID ); + + if ( ph != null ) + { + if ( ph.Ingame && state.Mobile == null ) + { + Console.WriteLine( "Client: {0}: Sent ingame packet (0xD7x{1:X2}) before having been attached to a mobile", state, packetID ); + state.Dispose(); + } + else if ( ph.Ingame && state.Mobile.Deleted ) + { + state.Dispose(); + } + else + { + ph.OnReceive( state, e, new EncodedReader( pvSrc ) ); + } + } + else + { + pvSrc.Trace( state ); + } + } + + public static void RenameRequest( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + Mobile targ = World.FindMobile( pvSrc.ReadInt32() ); + + if ( targ != null ) + EventSink.InvokeRenameRequest( new RenameRequestEventArgs( from, targ, pvSrc.ReadStringSafe() ) ); + } + + public static void ChatRequest( NetState state, PacketReader pvSrc ) + { + EventSink.InvokeChatRequest( new ChatRequestEventArgs( state.Mobile ) ); + } + + public static void SecureTrade( NetState state, PacketReader pvSrc ) + { + switch ( pvSrc.ReadByte() ) + { + case 1: // Cancel + { + Serial serial = pvSrc.ReadInt32(); + + SecureTradeContainer cont = World.FindItem( serial ) as SecureTradeContainer; + + if ( cont != null && cont.Trade != null && (cont.Trade.From.Mobile == state.Mobile || cont.Trade.To.Mobile == state.Mobile) ) + cont.Trade.Cancel(); + + break; + } + case 2: // Check + { + Serial serial = pvSrc.ReadInt32(); + + SecureTradeContainer cont = World.FindItem( serial ) as SecureTradeContainer; + + if ( cont != null ) + { + SecureTrade trade = cont.Trade; + + bool value = ( pvSrc.ReadInt32() != 0 ); + + if ( trade != null && trade.From.Mobile == state.Mobile ) + { + trade.From.Accepted = value; + trade.Update(); + } + else if ( trade != null && trade.To.Mobile == state.Mobile ) + { + trade.To.Accepted = value; + trade.Update(); + } + } + + break; + } + } + } + + public static void VendorBuyReply( NetState state, PacketReader pvSrc ) + { + pvSrc.Seek( 1, SeekOrigin.Begin ); + + int msgSize = pvSrc.ReadUInt16(); + Mobile vendor = World.FindMobile( pvSrc.ReadInt32() ); + byte flag = pvSrc.ReadByte(); + + if ( vendor == null ) + { + return; + } + else if ( vendor.Deleted || !Utility.RangeCheck( vendor.Location, state.Mobile.Location, 10 ) ) + { + state.Send( new EndVendorBuy( vendor ) ); + return; + } + + if ( flag == 0x02 ) + { + msgSize -= 1+2+4+1; + + if ( (msgSize / 7) > 100 ) + return; + + List buyList = new List( msgSize / 7 ); + for ( ;msgSize>0;msgSize-=7) + { + byte layer = pvSrc.ReadByte(); + Serial serial = pvSrc.ReadInt32(); + int amount = pvSrc.ReadInt16(); + + buyList.Add( new BuyItemResponse( serial, amount ) ); + } + + if ( buyList.Count > 0 ) + { + IVendor v = vendor as IVendor; + + if ( v != null && v.OnBuyItems( state.Mobile, buyList ) ) + state.Send( new EndVendorBuy( vendor ) ); + } + } + else + { + state.Send( new EndVendorBuy( vendor ) ); + } + } + + public static void VendorSellReply( NetState state, PacketReader pvSrc ) + { + Serial serial = pvSrc.ReadInt32(); + Mobile vendor = World.FindMobile( serial ); + + if ( vendor == null ) + { + return; + } + else if ( vendor.Deleted || !Utility.RangeCheck( vendor.Location, state.Mobile.Location, 10 ) ) + { + state.Send( new EndVendorSell( vendor ) ); + return; + } + + int count = pvSrc.ReadUInt16(); + if ( count < 100 && pvSrc.Size == (1+2+4+2+(count*6)) ) + { + List sellList = new List( count ); + + for (int i=0;i 0 ) + sellList.Add( new SellItemResponse( item, Amount ) ); + } + + if ( sellList.Count > 0 ) + { + IVendor v = vendor as IVendor; + + if ( v != null && v.OnSellItems( state.Mobile, sellList ) ) + state.Send( new EndVendorSell( vendor ) ); + } + } + } + + public static void DeleteCharacter( NetState state, PacketReader pvSrc ) + { + pvSrc.Seek( 30, SeekOrigin.Current ); + int index = pvSrc.ReadInt32(); + + EventSink.InvokeDeleteRequest( new DeleteRequestEventArgs( state, index ) ); + } + + public static void ResourceQuery( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + } + } + + public static void GameCentralMoniter( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + int type = pvSrc.ReadByte(); + int num1 = pvSrc.ReadInt32(); + + Console.WriteLine( "God Client: {0}: Game central moniter", state ); + Console.WriteLine( " - Type: {0}", type ); + Console.WriteLine( " - Number: {0}", num1 ); + + pvSrc.Trace( state ); + } + } + + public static void GodviewQuery( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + Console.WriteLine( "God Client: {0}: Godview query 0x{1:X}", state, pvSrc.ReadByte() ); + } + } + + public static void GMSingle( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + pvSrc.Trace( state ); + } + + public static void DeathStatusResponse( NetState state, PacketReader pvSrc ) + { + // Ignored + } + + public static void ObjectHelpRequest( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + Serial serial = pvSrc.ReadInt32(); + int unk = pvSrc.ReadByte(); + string lang = pvSrc.ReadString( 3 ); + + if ( serial.IsItem ) + { + Item item = World.FindItem( serial ); + + if ( item != null && from.Map == item.Map && Utility.InUpdateRange( item.GetWorldLocation(), from.Location ) && from.CanSee( item ) ) + item.OnHelpRequest( from ); + } + else if ( serial.IsMobile ) + { + Mobile m = World.FindMobile( serial ); + + if ( m != null && from.Map == m.Map && Utility.InUpdateRange( m.Location, from.Location ) && from.CanSee( m ) ) + m.OnHelpRequest( m ); + } + } + + public static void MobileNameRequest( NetState state, PacketReader pvSrc ) + { + Mobile m = World.FindMobile( pvSrc.ReadInt32() ); + + if ( m != null && Utility.InUpdateRange( state.Mobile, m ) && state.Mobile.CanSee( m ) ) + state.Send( new MobileName( m ) ); + } + + public static void RequestScrollWindow( NetState state, PacketReader pvSrc ) + { + int lastTip = pvSrc.ReadInt16(); + int type = pvSrc.ReadByte(); + } + + public static void AttackReq( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + Mobile m = World.FindMobile( pvSrc.ReadInt32() ); + + if ( m != null ) + from.Attack( m ); + } + + public static void HuePickerResponse( NetState state, PacketReader pvSrc ) { + int serial = pvSrc.ReadInt32(); + int value = pvSrc.ReadInt16(); + int hue = pvSrc.ReadInt16() & 0x3FFF; + + hue = Utility.ClipDyedHue( hue ); + + foreach ( HuePicker huePicker in state.HuePickers ) { + if ( huePicker.Serial == serial ) { + state.RemoveHuePicker( huePicker ); + + huePicker.OnResponse( hue ); + + break; + } + } + } + + public static void TripTime( NetState state, PacketReader pvSrc ) + { + int unk1 = pvSrc.ReadByte(); + int unk2 = pvSrc.ReadInt32(); + + state.Send( new TripTimeResponse( unk1 ) ); + } + + public static void UTripTime( NetState state, PacketReader pvSrc ) + { + int unk1 = pvSrc.ReadByte(); + int unk2 = pvSrc.ReadInt32(); + + state.Send( new UTripTimeResponse( unk1 ) ); + } + + public static void ChangeZ( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + int x = pvSrc.ReadInt16(); + int y = pvSrc.ReadInt16(); + int z = pvSrc.ReadSByte(); + + Console.WriteLine( "God Client: {0}: Change Z ({1}, {2}, {3})", state, x, y, z ); + } + } + + public static void SystemInfo( NetState state, PacketReader pvSrc ) + { + int v1 = pvSrc.ReadByte(); + int v2 = pvSrc.ReadUInt16(); + int v3 = pvSrc.ReadByte(); + string s1 = pvSrc.ReadString( 32 ); + string s2 = pvSrc.ReadString( 32 ); + string s3 = pvSrc.ReadString( 32 ); + string s4 = pvSrc.ReadString( 32 ); + int v4 = pvSrc.ReadUInt16(); + int v5 = pvSrc.ReadUInt16(); + int v6 = pvSrc.ReadInt32(); + int v7 = pvSrc.ReadInt32(); + int v8 = pvSrc.ReadInt32(); + } + + public static void Edit( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + int type = pvSrc.ReadByte(); // 10 = static, 7 = npc, 4 = dynamic + int x = pvSrc.ReadInt16(); + int y = pvSrc.ReadInt16(); + int id = pvSrc.ReadInt16(); + int z = pvSrc.ReadSByte(); + int hue = pvSrc.ReadUInt16(); + + Console.WriteLine( "God Client: {0}: Edit {6} ({1}, {2}, {3}) 0x{4:X} (0x{5:X})", state, x, y, z, id, hue, type ); + } + } + + public static void DeleteStatic( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + int x = pvSrc.ReadInt16(); + int y = pvSrc.ReadInt16(); + int z = pvSrc.ReadInt16(); + int id = pvSrc.ReadUInt16(); + + Console.WriteLine( "God Client: {0}: Delete Static ({1}, {2}, {3}) 0x{4:X}", state, x, y, z, id ); + } + } + + public static void NewAnimData( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + Console.WriteLine( "God Client: {0}: New tile animation", state ); + + pvSrc.Trace( state ); + } + } + + public static void NewTerrain( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + int x = pvSrc.ReadInt16(); + int y = pvSrc.ReadInt16(); + int id = pvSrc.ReadUInt16(); + int width = pvSrc.ReadInt16(); + int height = pvSrc.ReadInt16(); + + Console.WriteLine( "God Client: {0}: New Terrain ({1}, {2})+({3}, {4}) 0x{5:X4}", state, x, y, width, height, id ); + } + } + + public static void NewRegion( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + string name = pvSrc.ReadString( 40 ); + int unk = pvSrc.ReadInt32(); + int x = pvSrc.ReadInt16(); + int y = pvSrc.ReadInt16(); + int width = pvSrc.ReadInt16(); + int height = pvSrc.ReadInt16(); + int zStart = pvSrc.ReadInt16(); + int zEnd = pvSrc.ReadInt16(); + string desc = pvSrc.ReadString( 40 ); + int soundFX = pvSrc.ReadInt16(); + int music = pvSrc.ReadInt16(); + int nightFX = pvSrc.ReadInt16(); + int dungeon = pvSrc.ReadByte(); + int light = pvSrc.ReadInt16(); + + Console.WriteLine( "God Client: {0}: New Region '{1}' ('{2}')", state, name, desc ); + } + } + + public static void AccountID( NetState state, PacketReader pvSrc ) + { + } + + public static bool VerifyGC( NetState state ) + { + if ( state.Mobile == null || state.Mobile.AccessLevel <= AccessLevel.Counselor ) + { + if ( state.Running ) + Console.WriteLine( "Warning: {0}: Player using godclient, disconnecting", state ); + + state.Dispose(); + return false; + } + else + { + return true; + } + } + + public static void TextCommand( NetState state, PacketReader pvSrc ) + { + int type = pvSrc.ReadByte(); + string command = pvSrc.ReadString(); + + Mobile m = state.Mobile; + + switch ( type ) + { + case 0x00: // Go + { + if ( VerifyGC( state ) ) + { + try + { + string[] split = command.Split( ' ' ); + + int x = Utility.ToInt32( split[0] ); + int y = Utility.ToInt32( split[1] ); + + int z; + + if ( split.Length >= 3 ) + z = Utility.ToInt32( split[2] ); + else if ( m.Map != null ) + z = m.Map.GetAverageZ( x, y ); + else + z = 0; + + m.Location = new Point3D( x, y, z ); + } + catch + { + } + } + + break; + } + case 0xC7: // Animate + { + EventSink.InvokeAnimateRequest( new AnimateRequestEventArgs( m, command ) ); + + break; + } + case 0x24: // Use skill + { + int skillIndex; + + if ( !int.TryParse( command.Split( ' ' )[0], out skillIndex ) ) + break; + + Skills.UseSkill( m, skillIndex ); + + break; + } + case 0x43: // Open spellbook + { + int booktype; + + if ( !int.TryParse( command, out booktype ) ) + booktype = 1; + + EventSink.InvokeOpenSpellbookRequest( new OpenSpellbookRequestEventArgs( m, booktype ) ); + + break; + } + case 0x27: // Cast spell from book + { + string[] split = command.Split( ' ' ); + + if ( split.Length > 0 ) + { + int spellID = Utility.ToInt32( split[0] ) - 1; + int serial = split.Length > 1 ? Utility.ToInt32( split[1] ) : -1; + + EventSink.InvokeCastSpellRequest( new CastSpellRequestEventArgs( m, spellID, World.FindItem( serial ) ) ); + } + + break; + } + case 0x58: // Open door + { + EventSink.InvokeOpenDoorMacroUsed( new OpenDoorMacroEventArgs( m ) ); + + break; + } + case 0x56: // Cast spell from macro + { + int spellID = Utility.ToInt32( command ) - 1; + + EventSink.InvokeCastSpellRequest( new CastSpellRequestEventArgs( m, spellID, null ) ); + + break; + } + default: + { + Console.WriteLine( "Client: {0}: Unknown text-command type 0x{1:X2}: {2}", state, type, command ); + break; + } + } + } + + public static void GodModeRequest( NetState state, PacketReader pvSrc ) + { + if ( VerifyGC( state ) ) + { + state.Send( new GodModeReply( pvSrc.ReadBoolean() ) ); + } + } + + public static void AsciiPromptResponse( NetState state, PacketReader pvSrc ) + { + int serial = pvSrc.ReadInt32(); + int prompt = pvSrc.ReadInt32(); + int type = pvSrc.ReadInt32(); + string text = pvSrc.ReadStringSafe(); + + if ( text.Length > 128 ) + return; + + Mobile from = state.Mobile; + Prompt p = from.Prompt; + + if ( p != null && p.Serial == serial && p.Serial == prompt ) + { + from.Prompt = null; + + if ( type == 0 ) + p.OnCancel( from ); + else + p.OnResponse( from, text ); + } + } + + public static void UnicodePromptResponse( NetState state, PacketReader pvSrc ) + { + int serial = pvSrc.ReadInt32(); + int prompt = pvSrc.ReadInt32(); + int type = pvSrc.ReadInt32(); + string lang = pvSrc.ReadString( 4 ); + string text = pvSrc.ReadUnicodeStringLESafe(); + + if ( text.Length > 128 ) + return; + + Mobile from = state.Mobile; + Prompt p = from.Prompt; + + if ( p != null && p.Serial == serial && p.Serial == prompt ) + { + from.Prompt = null; + + if ( type == 0 ) + p.OnCancel( from ); + else + p.OnResponse( from, text ); + } + } + + public static void MenuResponse( NetState state, PacketReader pvSrc ) { + int serial = pvSrc.ReadInt32(); + int menuID = pvSrc.ReadInt16(); // unused in our implementation + int index = pvSrc.ReadInt16(); + int itemID = pvSrc.ReadInt16(); + int hue = pvSrc.ReadInt16(); + + index -= 1; // convert from 1-based to 0-based + + foreach ( IMenu menu in state.Menus ) { + if ( menu.Serial == serial ) { + state.RemoveMenu( menu ); + + if ( index >= 0 && index < menu.EntryLength ) { + menu.OnResponse( state, index ); + } else { + menu.OnCancel( state ); + } + + break; + } + } + } + + public static void ProfileReq( NetState state, PacketReader pvSrc ) + { + int type = pvSrc.ReadByte(); + Serial serial = pvSrc.ReadInt32(); + + Mobile beholder = state.Mobile; + Mobile beheld = World.FindMobile( serial ); + + if ( beheld == null ) + return; + + switch ( type ) + { + case 0x00: // display request + { + EventSink.InvokeProfileRequest( new ProfileRequestEventArgs( beholder, beheld ) ); + + break; + } + case 0x01: // edit request + { + pvSrc.ReadInt16(); // Skip + int length = pvSrc.ReadUInt16(); + + if ( length > 511 ) + return; + + string text = pvSrc.ReadUnicodeString( length ); + + EventSink.InvokeChangeProfileRequest( new ChangeProfileRequestEventArgs( beholder, beheld, text ) ); + + break; + } + } + } + + public static void Disconnect( NetState state, PacketReader pvSrc ) + { + int minusOne = pvSrc.ReadInt32(); + } + + public static void LiftReq( NetState state, PacketReader pvSrc ) + { + Serial serial = pvSrc.ReadInt32(); + int amount = pvSrc.ReadUInt16(); + Item item = World.FindItem( serial ); + + bool rejected; + LRReason reject; + + state.Mobile.Lift( item, amount, out rejected, out reject ); + } + + public static void EquipReq( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + Item item = from.Holding; + + bool valid = ( item != null && item.HeldBy == from && item.Map == Map.Internal ); + + from.Holding = null; + + if ( !valid ) { + return; + } + + pvSrc.Seek( 5, SeekOrigin.Current ); + Mobile to = World.FindMobile( pvSrc.ReadInt32() ); + + if ( to == null ) + to = from; + + if ( !to.AllowEquipFrom( from ) || !to.EquipItem( item ) ) + item.Bounce( from ); + + item.ClearBounce(); + } + + public static void DropReq( NetState state, PacketReader pvSrc ) + { + pvSrc.ReadInt32(); // serial, ignored + int x = pvSrc.ReadInt16(); + int y = pvSrc.ReadInt16(); + int z = pvSrc.ReadSByte(); + Serial dest = pvSrc.ReadInt32(); + + Point3D loc = new Point3D( x, y, z ); + + Mobile from = state.Mobile; + + if ( dest.IsMobile ) + from.Drop( World.FindMobile( dest ), loc ); + else if ( dest.IsItem ) + from.Drop( World.FindItem( dest ), loc ); + else + from.Drop( loc ); + } + + public static void DropReq6017( NetState state, PacketReader pvSrc ) + { + pvSrc.ReadInt32(); // serial, ignored + int x = pvSrc.ReadInt16(); + int y = pvSrc.ReadInt16(); + int z = pvSrc.ReadSByte(); + pvSrc.ReadByte(); // Grid Location? + Serial dest = pvSrc.ReadInt32(); + + Point3D loc = new Point3D( x, y, z ); + + Mobile from = state.Mobile; + + if ( dest.IsMobile ) + from.Drop( World.FindMobile( dest ), loc ); + else if ( dest.IsItem ) + from.Drop( World.FindItem( dest ), loc ); + else + from.Drop( loc ); + } + + public static void ConfigurationFile( NetState state, PacketReader pvSrc ) + { + } + + public static void LogoutReq( NetState state, PacketReader pvSrc ) + { + state.Send( new LogoutAck() ); + } + + public static void ChangeSkillLock( NetState state, PacketReader pvSrc ) + { + Skill s = state.Mobile.Skills[pvSrc.ReadInt16()]; + + if ( s != null ) + s.SetLockNoRelay( (SkillLock)pvSrc.ReadByte() ); + } + + public static void HelpRequest( NetState state, PacketReader pvSrc ) + { + EventSink.InvokeHelpRequest( new HelpRequestEventArgs( state.Mobile ) ); + } + + public static void TargetResponse( NetState state, PacketReader pvSrc ) + { + int type = pvSrc.ReadByte(); + int targetID = pvSrc.ReadInt32(); + int flags = pvSrc.ReadByte(); + Serial serial = pvSrc.ReadInt32(); + int x = pvSrc.ReadInt16(), y = pvSrc.ReadInt16(), z = pvSrc.ReadInt16(); + int graphic = pvSrc.ReadUInt16(); + + if ( targetID == unchecked( (int) 0xDEADBEEF ) ) + return; + + Mobile from = state.Mobile; + + Target t = from.Target; + + if ( t != null ) + { + TargetProfile prof = TargetProfile.Acquire( t.GetType() ); + + if ( prof != null ) { + prof.Start(); + } + + try { + if ( x == -1 && y == -1 && !serial.IsValid ) + { + // User pressed escape + t.Cancel( from, TargetCancelType.Canceled ); + } + else + { + object toTarget; + + if ( type == 1 ) + { + if ( graphic == 0 ) + { + toTarget = new LandTarget( new Point3D( x, y, z ), from.Map ); + } + else + { + Map map = from.Map; + + if ( map == null || map == Map.Internal ) + { + t.Cancel( from, TargetCancelType.Canceled ); + return; + } + else + { + StaticTile[] tiles = map.Tiles.GetStaticTiles( x, y, !t.DisallowMultis ); + + bool valid = false; + + if ( state.HighSeas ) { + ItemData id = TileData.ItemTable[graphic&TileData.MaxItemValue]; + if ( id.Surface ) { + z -= id.Height; + } + } + + for ( int i = 0; !valid && i < tiles.Length; ++i ) + { + if ( tiles[i].Z == z && tiles[i].ID == graphic ) + valid = true; + } + + if ( !valid ) + { + t.Cancel( from, TargetCancelType.Canceled ); + return; + } + else + { + toTarget = new StaticTarget( new Point3D( x, y, z ), graphic ); + } + } + } + } + else if ( serial.IsMobile ) + { + toTarget = World.FindMobile( serial ); + } + else if ( serial.IsItem ) + { + toTarget = World.FindItem( serial ); + } + else + { + t.Cancel( from, TargetCancelType.Canceled ); + return; + } + + t.Invoke( from, toTarget ); + } + } finally { + if ( prof != null ) { + prof.Finish(); + } + } + } + } + + public static void DisplayGumpResponse( NetState state, PacketReader pvSrc ) { + int serial = pvSrc.ReadInt32(); + int typeID = pvSrc.ReadInt32(); + int buttonID = pvSrc.ReadInt32(); + + foreach ( Gump gump in state.Gumps ) { + if ( gump.Serial == serial && gump.TypeID == typeID ) { + int switchCount = pvSrc.ReadInt32(); + + if ( switchCount < 0 || switchCount > gump.m_Switches ) { + state.WriteConsole( "Invalid gump response, disconnecting..." ); + state.Dispose(); + return; + } + + int[] switches = new int[switchCount]; + + for ( int j = 0; j < switches.Length; ++j ) + switches[j] = pvSrc.ReadInt32(); + + int textCount = pvSrc.ReadInt32(); + + if ( textCount < 0 || textCount > gump.m_TextEntries ) { + state.WriteConsole( "Invalid gump response, disconnecting..." ); + state.Dispose(); + return; + } + + TextRelay[] textEntries = new TextRelay[textCount]; + + for ( int j = 0; j < textEntries.Length; ++j ) { + int entryID = pvSrc.ReadUInt16(); + int textLength = pvSrc.ReadUInt16(); + + if ( textLength > 239 ) { + state.WriteConsole( "Invalid gump response, disconnecting..." ); + state.Dispose(); + return; + } + + string text = pvSrc.ReadUnicodeStringSafe( textLength ); + textEntries[j] = new TextRelay( entryID, text ); + } + + state.RemoveGump( gump ); + + GumpProfile prof = GumpProfile.Acquire( gump.GetType() ); + + if ( prof != null ) { + prof.Start(); + } + + gump.OnResponse( state, new RelayInfo( buttonID, switches, textEntries ) ); + + if ( prof != null ) { + prof.Finish(); + } + + return; + } + } + } + + public static void SetWarMode( NetState state, PacketReader pvSrc ) + { + state.Mobile.DelayChangeWarmode( pvSrc.ReadBoolean() ); + } + + public static void Resynchronize( NetState state, PacketReader pvSrc ) + { + Mobile m = state.Mobile; + + if ( state.StygianAbyss ) { + state.Send( new MobileUpdate( m ) ); + state.Send( new MobileIncoming( m, m ) ); + } else { + state.Send( new MobileUpdateOld( m ) ); + state.Send( new MobileIncomingOld( m, m ) ); + } + + m.SendEverything(); + + state.Sequence = 0; + + m.ClearFastwalkStack(); + } + + private static int[] m_EmptyInts = new int[0]; + + public static void AsciiSpeech( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + MessageType type = (MessageType)pvSrc.ReadByte(); + int hue = pvSrc.ReadInt16(); + pvSrc.ReadInt16(); // font + string text = pvSrc.ReadStringSafe().Trim(); + + if ( text.Length <= 0 || text.Length > 128 ) + return; + + if ( !Enum.IsDefined( typeof( MessageType ), type ) ) + type = MessageType.Regular; + + from.DoSpeech( text, m_EmptyInts, type, Utility.ClipDyedHue( hue ) ); + } + + private static KeywordList m_KeywordList = new KeywordList(); + + public static void UnicodeSpeech( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + MessageType type = (MessageType)pvSrc.ReadByte(); + int hue = pvSrc.ReadInt16(); + pvSrc.ReadInt16(); // font + string lang = pvSrc.ReadString( 4 ); + string text; + + bool isEncoded = (type & MessageType.Encoded) != 0; + int[] keywords; + + if ( isEncoded ) + { + int value = pvSrc.ReadInt16(); + int count = (value & 0xFFF0) >> 4; + int hold = value & 0xF; + + if ( count < 0 || count > 50 ) + return; + + KeywordList keyList = m_KeywordList; + + for ( int i = 0; i < count; ++i ) + { + int speechID; + + if ( (i & 1) == 0 ) + { + hold <<= 8; + hold |= pvSrc.ReadByte(); + speechID = hold; + hold = 0; + } + else + { + value = pvSrc.ReadInt16(); + speechID = (value & 0xFFF0) >> 4; + hold = value & 0xF; + } + + if ( !keyList.Contains( speechID ) ) + keyList.Add( speechID ); + } + + text = pvSrc.ReadUTF8StringSafe(); + + keywords = keyList.ToArray(); + } + else + { + text = pvSrc.ReadUnicodeStringSafe(); + + keywords = m_EmptyInts; + } + + text = text.Trim(); + + if ( text.Length <= 0 || text.Length > 128 ) + return; + + type &= ~MessageType.Encoded; + + if ( !Enum.IsDefined( typeof( MessageType ), type ) ) + type = MessageType.Regular; + + from.Language = lang; + from.DoSpeech( text, keywords, type, Utility.ClipDyedHue( hue ) ); + } + + public static void UseReq( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + if ( from.AccessLevel >= AccessLevel.Counselor || DateTime.Now >= from.NextActionTime ) + { + int value = pvSrc.ReadInt32(); + + if ( (value & ~0x7FFFFFFF) != 0 ) + { + from.OnPaperdollRequest(); + } + else + { + Serial s = value; + + if ( s.IsMobile ) + { + Mobile m = World.FindMobile( s ); + + if ( m != null && !m.Deleted ) + from.Use( m ); + } + else if ( s.IsItem ) + { + Item item = World.FindItem( s ); + + if ( item != null && !item.Deleted ) + from.Use( item ); + } + } + + from.NextActionTime = DateTime.Now + TimeSpan.FromSeconds( 0.5 ); + } + else + { + from.SendActionMessage(); + } + } + + private static bool m_SingleClickProps; + + public static bool SingleClickProps + { + get{ return m_SingleClickProps; } + set{ m_SingleClickProps = value; } + } + + public static void LookReq( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + Serial s = pvSrc.ReadInt32(); + + if ( s.IsMobile ) + { + Mobile m = World.FindMobile( s ); + + if ( m != null && from.CanSee( m ) && Utility.InUpdateRange( from, m ) ) + { + if ( m_SingleClickProps ) + { + m.OnAosSingleClick( from ); + } + else + { + if ( from.Region.OnSingleClick( from, m ) ) + m.OnSingleClick( from ); + } + } + } + else if ( s.IsItem ) + { + Item item = World.FindItem( s ); + + if ( item != null && !item.Deleted && from.CanSee( item ) && Utility.InUpdateRange( from.Location, item.GetWorldLocation() ) ) + { + if ( m_SingleClickProps ) + { + item.OnAosSingleClick( from ); + } + else if ( from.Region.OnSingleClick( from, item ) ) + { + if ( item.Parent is Item ) + ((Item)item.Parent).OnSingleClickContained( from, item ); + + item.OnSingleClick( from ); + } + } + } + } + + public static void PingReq( NetState state, PacketReader pvSrc ) + { + state.Send( PingAck.Instantiate( pvSrc.ReadByte() ) ); + } + + public static void SetUpdateRange( NetState state, PacketReader pvSrc ) + { + state.Send( ChangeUpdateRange.Instantiate( 18 ) ); + } + + private const int BadFood = unchecked( (int)0xBAADF00D ); + private const int BadUOTD = unchecked( (int)0xFFCEFFCE ); + + public static void MovementReq( NetState state, PacketReader pvSrc ) + { + Direction dir = (Direction)pvSrc.ReadByte(); + int seq = pvSrc.ReadByte(); + int key = pvSrc.ReadInt32(); + + Mobile m = state.Mobile; + + if ( (state.Sequence == 0 && seq != 0) || !m.Move( dir ) ) + { + state.Send( new MovementRej( seq, m ) ); + state.Sequence = 0; + + m.ClearFastwalkStack(); + } + else + { + ++seq; + + if ( seq == 256 ) + seq = 1; + + state.Sequence = seq; + } + } + + public static int[] m_ValidAnimations = new int[] + { + 6, 21, 32, 33, + 100, 101, 102, + 103, 104, 105, + 106, 107, 108, + 109, 110, 111, + 112, 113, 114, + 115, 116, 117, + 118, 119, 120, + 121, 123, 124, + 125, 126, 127, + 128 + }; + + public static int[] ValidAnimations{ get{ return m_ValidAnimations; } set{ m_ValidAnimations = value; } } + + public static void Animate( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + int action = pvSrc.ReadInt32(); + + bool ok = false; + + for ( int i = 0; !ok && i < m_ValidAnimations.Length; ++i ) + ok = ( action == m_ValidAnimations[i] ); + + if ( from != null && ok && from.Alive && from.Body.IsHuman && !from.Mounted ) + from.Animate( action, 7, 1, true, false, 0 ); + } + + public static void QuestArrow( NetState state, PacketReader pvSrc ) + { + bool rightClick = pvSrc.ReadBoolean(); + Mobile from = state.Mobile; + + if ( from != null && from.QuestArrow != null ) + from.QuestArrow.OnClick( rightClick ); + } + + public static void ExtendedCommand( NetState state, PacketReader pvSrc ) + { + int packetID = pvSrc.ReadUInt16(); + + PacketHandler ph = GetExtendedHandler( packetID ); + + if ( ph != null ) + { + if ( ph.Ingame && state.Mobile == null ) + { + Console.WriteLine( "Client: {0}: Sent ingame packet (0xBFx{1:X2}) before having been attached to a mobile", state, packetID ); + state.Dispose(); + } + else if ( ph.Ingame && state.Mobile.Deleted ) + { + state.Dispose(); + } + else + { + ph.OnReceive( state, pvSrc ); + } + } + else + { + pvSrc.Trace( state ); + } + } + + public static void CastSpell( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + if ( from == null ) + return; + + Item spellbook = null; + + if ( pvSrc.ReadInt16() == 1 ) + spellbook = World.FindItem( pvSrc.ReadInt32() ); + + int spellID = pvSrc.ReadInt16() - 1; + + EventSink.InvokeCastSpellRequest( new CastSpellRequestEventArgs( from, spellID, spellbook ) ); + } + + public static void BatchQueryProperties( NetState state, PacketReader pvSrc ) + { + if ( !ObjectPropertyList.Enabled ) + return; + + Mobile from = state.Mobile; + + int length = pvSrc.Size-3; + + if ( length < 0 || (length%4) != 0 ) + return; + + int count = length/4; + + for ( int i = 0; i < count; ++i ) + { + Serial s = pvSrc.ReadInt32(); + + if ( s.IsMobile ) + { + Mobile m = World.FindMobile( s ); + + if ( m != null && from.CanSee( m ) && Utility.InUpdateRange( from, m ) ) + m.SendPropertiesTo( from ); + } + else if ( s.IsItem ) + { + Item item = World.FindItem( s ); + + if ( item != null && !item.Deleted && from.CanSee( item ) && Utility.InUpdateRange( from.Location, item.GetWorldLocation() ) ) + item.SendPropertiesTo( from ); + } + } + } + + public static void QueryProperties( NetState state, PacketReader pvSrc ) + { + if ( !ObjectPropertyList.Enabled ) + return; + + Mobile from = state.Mobile; + + Serial s = pvSrc.ReadInt32(); + + if ( s.IsMobile ) + { + Mobile m = World.FindMobile( s ); + + if ( m != null && from.CanSee( m ) && Utility.InUpdateRange( from, m ) ) + m.SendPropertiesTo( from ); + } + else if ( s.IsItem ) + { + Item item = World.FindItem( s ); + + if ( item != null && !item.Deleted && from.CanSee( item ) && Utility.InUpdateRange( from.Location, item.GetWorldLocation() ) ) + item.SendPropertiesTo( from ); + } + } + + public static void PartyMessage( NetState state, PacketReader pvSrc ) + { + if ( state.Mobile == null ) + return; + + switch ( pvSrc.ReadByte() ) + { + case 0x01: PartyMessage_AddMember( state, pvSrc ); break; + case 0x02: PartyMessage_RemoveMember( state, pvSrc ); break; + case 0x03: PartyMessage_PrivateMessage( state, pvSrc ); break; + case 0x04: PartyMessage_PublicMessage( state, pvSrc ); break; + case 0x06: PartyMessage_SetCanLoot( state, pvSrc ); break; + case 0x08: PartyMessage_Accept( state, pvSrc ); break; + case 0x09: PartyMessage_Decline( state, pvSrc ); break; + default: pvSrc.Trace( state ); break; + } + } + + public static void PartyMessage_AddMember( NetState state, PacketReader pvSrc ) + { + if ( PartyCommands.Handler != null ) + PartyCommands.Handler.OnAdd( state.Mobile ); + } + + public static void PartyMessage_RemoveMember( NetState state, PacketReader pvSrc ) + { + if ( PartyCommands.Handler != null ) + PartyCommands.Handler.OnRemove( state.Mobile, World.FindMobile( pvSrc.ReadInt32() ) ); + } + + public static void PartyMessage_PrivateMessage( NetState state, PacketReader pvSrc ) + { + if ( PartyCommands.Handler != null ) + PartyCommands.Handler.OnPrivateMessage( state.Mobile, World.FindMobile( pvSrc.ReadInt32() ), pvSrc.ReadUnicodeStringSafe() ); + } + + public static void PartyMessage_PublicMessage( NetState state, PacketReader pvSrc ) + { + if ( PartyCommands.Handler != null ) + PartyCommands.Handler.OnPublicMessage( state.Mobile, pvSrc.ReadUnicodeStringSafe() ); + } + + public static void PartyMessage_SetCanLoot( NetState state, PacketReader pvSrc ) + { + if ( PartyCommands.Handler != null ) + PartyCommands.Handler.OnSetCanLoot( state.Mobile, pvSrc.ReadBoolean() ); + } + + public static void PartyMessage_Accept( NetState state, PacketReader pvSrc ) + { + if ( PartyCommands.Handler != null ) + PartyCommands.Handler.OnAccept( state.Mobile, World.FindMobile( pvSrc.ReadInt32() ) ); + } + + public static void PartyMessage_Decline( NetState state, PacketReader pvSrc ) + { + if ( PartyCommands.Handler != null ) + PartyCommands.Handler.OnDecline( state.Mobile, World.FindMobile( pvSrc.ReadInt32() ) ); + } + + public static void StunRequest( NetState state, PacketReader pvSrc ) + { + EventSink.InvokeStunRequest( new StunRequestEventArgs( state.Mobile ) ); + } + + public static void DisarmRequest( NetState state, PacketReader pvSrc ) + { + EventSink.InvokeDisarmRequest( new DisarmRequestEventArgs( state.Mobile ) ); + } + + public static void StatLockChange( NetState state, PacketReader pvSrc ) + { + int stat = pvSrc.ReadByte(); + int lockValue = pvSrc.ReadByte(); + + if ( lockValue > 2 ) lockValue = 0; + + Mobile m = state.Mobile; + + if ( m != null ) + { + switch ( stat ) + { + case 0: m.StrLock = (StatLockType)lockValue; break; + case 1: m.DexLock = (StatLockType)lockValue; break; + case 2: m.IntLock = (StatLockType)lockValue; break; + } + } + } + + public static void ScreenSize( NetState state, PacketReader pvSrc ) + { + int width = pvSrc.ReadInt32(); + int unk = pvSrc.ReadInt32(); + } + + public static void ContextMenuResponse( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + if ( from != null ) + { + ContextMenu menu = from.ContextMenu; + + from.ContextMenu = null; + + if ( menu != null && from != null && from == menu.From ) + { + IEntity entity = World.FindEntity( pvSrc.ReadInt32() ); + + if ( entity != null && entity == menu.Target && from.CanSee( entity ) ) + { + Point3D p; + + if ( entity is Mobile ) + p = entity.Location; + else if ( entity is Item ) + p = ((Item)entity).GetWorldLocation(); + else + return; + + int index = pvSrc.ReadUInt16(); + + if ( index >= 0 && index < menu.Entries.Length ) + { + ContextMenuEntry e = menu.Entries[index]; + + int range = e.Range; + + if ( range == -1 ) + range = 18; + + if ( e.Enabled && from.InRange( p, range ) ) + e.OnClick(); + } + } + } + } + } + + public static void ContextMenuRequest( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + IEntity target = World.FindEntity( pvSrc.ReadInt32() ); + + if ( from != null && target != null && from.Map == target.Map && from.CanSee( target ) ) + { + if ( target is Mobile && !Utility.InUpdateRange( from.Location, target.Location ) ) + return; + else if ( target is Item && !Utility.InUpdateRange( from.Location, ((Item)target).GetWorldLocation() ) ) + return; + + if ( !from.CheckContextMenuDisplay( target ) ) + return; + + ContextMenu c = new ContextMenu( from, target ); + + if ( c.Entries.Length > 0 ) + { + if ( target is Item ) + { + object root = ((Item)target).RootParent; + + if ( root is Mobile && root != from && ((Mobile)root).AccessLevel >= from.AccessLevel ) + { + for ( int i = 0; i < c.Entries.Length; ++i ) + { + if ( !c.Entries[i].NonLocalUse ) + c.Entries[i].Enabled = false; + } + } + } + + from.ContextMenu = c; + } + } + } + + public static void CloseStatus( NetState state, PacketReader pvSrc ) + { + Serial serial = pvSrc.ReadInt32(); + } + + public static void Language( NetState state, PacketReader pvSrc ) + { + string lang = pvSrc.ReadString( 4 ); + + if ( state.Mobile != null ) + state.Mobile.Language = lang; + } + + public static void AssistVersion( NetState state, PacketReader pvSrc ) + { + int unk = pvSrc.ReadInt32(); + string av = pvSrc.ReadString(); + } + + public static void ClientVersion( NetState state, PacketReader pvSrc ) + { + CV version = state.Version = new CV( pvSrc.ReadString() ); + + EventSink.InvokeClientVersionReceived( new ClientVersionReceivedArgs( state, version ) ); + } + + public static void ClientType( NetState state, PacketReader pvSrc ) + { + pvSrc.ReadUInt16(); + + int type = pvSrc.ReadUInt16(); + CV version = state.Version = new CV( pvSrc.ReadString() ); + + //EventSink.InvokeClientVersionReceived( new ClientVersionReceivedArgs( state, version ) );//todo + } + + public static void MobileQuery( NetState state, PacketReader pvSrc ) + { + Mobile from = state.Mobile; + + pvSrc.ReadInt32(); // 0xEDEDEDED + int type = pvSrc.ReadByte(); + Mobile m = World.FindMobile( pvSrc.ReadInt32() ); + + if ( m != null ) + { + switch ( type ) + { + case 0x00: // Unknown, sent by godclient + { + if ( VerifyGC( state ) ) + Console.WriteLine( "God Client: {0}: Query 0x{1:X2} on {2} '{3}'", state, type, m.Serial, m.Name ); + + break; + } + case 0x04: // Stats + { + m.OnStatsQuery( from ); + break; + } + case 0x05: + { + m.OnSkillsQuery( from ); + break; + } + default: + { + pvSrc.Trace( state ); + break; + } + } + } + } + + private class LoginTimer : Timer + { + private NetState m_State; + private Mobile m_Mobile; + + public LoginTimer( NetState state, Mobile m ) : base( TimeSpan.FromSeconds( 1.0 ), TimeSpan.FromSeconds( 1.0 ) ) + { + m_State = state; + m_Mobile = m; + } + + protected override void OnTick() + { + if ( m_State == null ) + Stop(); + if ( m_State.Version != null ) + { + m_State.BlockAllPackets = false; + DoLogin( m_State, m_Mobile ); + Stop(); + } + } + } + + public static void PlayCharacter( NetState state, PacketReader pvSrc ) + { + pvSrc.ReadInt32(); // 0xEDEDEDED + + string name = pvSrc.ReadString( 30 ); + + pvSrc.Seek( 2, SeekOrigin.Current ); + int flags = pvSrc.ReadInt32(); + pvSrc.Seek( 24, SeekOrigin.Current ); + + int charSlot = pvSrc.ReadInt32(); + int clientIP = pvSrc.ReadInt32(); + + IAccount a = state.Account; + + if ( a == null || charSlot < 0 || charSlot >= a.Length ) + { + state.Dispose(); + } + else + { + Mobile m = a[charSlot]; + + // Check if anyone is using this account + for ( int i = 0; i < a.Length; ++i ) + { + Mobile check = a[i]; + + if ( check != null && check.Map != Map.Internal && check != m ) + { + Console.WriteLine( "Login: {0}: Account in use", state ); + state.Send( new PopupMessage( PMMessage.CharInWorld ) ); + return; + } + } + + if ( m == null ) + { + state.Dispose(); + } + else + { + if ( m.NetState != null ) + m.NetState.Dispose(); + + NetState.ProcessDisposedQueue(); + + state.Send( new ClientVersionReq() ); + + state.BlockAllPackets = true; + + state.Flags = (ClientFlags)flags; + + state.Mobile = m; + m.NetState = state; + + new LoginTimer( state, m ).Start(); + } + } + } + + public static void DoLogin( NetState state, Mobile m ) + { + state.Send( new LoginConfirm( m ) ); + + if ( m.Map != null ) + state.Send( new MapChange( m ) ); + + state.Send( new MapPatches() ); + + state.Send( SeasonChange.Instantiate( m.GetSeason(), true ) ); + + state.Send( SupportedFeatures.Instantiate( state ) ); + + state.Sequence = 0; + + if ( state.StygianAbyss ) { + state.Send( new MobileUpdate( m ) ); + state.Send( new MobileUpdate( m ) ); + + m.CheckLightLevels( true ); + + state.Send( new MobileUpdate( m ) ); + + state.Send( new MobileIncoming( m, m ) ); + //state.Send( new MobileAttributes( m ) ); + state.Send( new MobileStatus( m, m ) ); + state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) ); + + m.SendEverything(); + + state.Send( SupportedFeatures.Instantiate( state ) ); + state.Send( new MobileUpdate( m ) ); + //state.Send( new MobileAttributes( m ) ); + state.Send( new MobileStatus( m, m ) ); + state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) ); + state.Send( new MobileIncoming( m, m ) ); + } else { + state.Send( new MobileUpdateOld( m ) ); + state.Send( new MobileUpdateOld( m ) ); + + m.CheckLightLevels( true ); + + state.Send( new MobileUpdateOld( m ) ); + + state.Send( new MobileIncomingOld( m, m ) ); + //state.Send( new MobileAttributes( m ) ); + state.Send( new MobileStatus( m, m ) ); + state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) ); + + m.SendEverything(); + + state.Send( SupportedFeatures.Instantiate( state ) ); + state.Send( new MobileUpdateOld( m ) ); + //state.Send( new MobileAttributes( m ) ); + state.Send( new MobileStatus( m, m ) ); + state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) ); + state.Send( new MobileIncomingOld( m, m ) ); + } + + state.Send( LoginComplete.Instance ); + state.Send( new CurrentTime() ); + state.Send( SeasonChange.Instantiate( m.GetSeason(), true ) ); + state.Send( new MapChange( m ) ); + + EventSink.InvokeLogin( new LoginEventArgs( m ) ); + + m.ClearFastwalkStack(); + } + + public static void CreateCharacter( NetState state, PacketReader pvSrc ) + { + int unk1 = pvSrc.ReadInt32(); + int unk2 = pvSrc.ReadInt32(); + int unk3 = pvSrc.ReadByte(); + string name = pvSrc.ReadString( 30 ); + + pvSrc.Seek( 2, SeekOrigin.Current ); + int flags = pvSrc.ReadInt32(); + pvSrc.Seek( 8, SeekOrigin.Current ); + int prof = pvSrc.ReadByte(); + pvSrc.Seek( 15, SeekOrigin.Current ); + + //bool female = pvSrc.ReadBoolean(); + + int genderRace = pvSrc.ReadByte(); + + int str = pvSrc.ReadByte(); + int dex = pvSrc.ReadByte(); + int intl= pvSrc.ReadByte(); + int is1 = pvSrc.ReadByte(); + int vs1 = pvSrc.ReadByte(); + int is2 = pvSrc.ReadByte(); + int vs2 = pvSrc.ReadByte(); + int is3 = pvSrc.ReadByte(); + int vs3 = pvSrc.ReadByte(); + int hue = pvSrc.ReadUInt16(); + int hairVal = pvSrc.ReadInt16(); + int hairHue = pvSrc.ReadInt16(); + int hairValf= pvSrc.ReadInt16(); + int hairHuef= pvSrc.ReadInt16(); + pvSrc.ReadByte(); + int cityIndex = pvSrc.ReadByte(); + int charSlot = pvSrc.ReadInt32(); + int clientIP = pvSrc.ReadInt32(); + int shirtHue = pvSrc.ReadInt16(); + int pantsHue = pvSrc.ReadInt16(); + + /* + Pre-7.0.0.0: + 0x00, 0x01 -> Human Male, Human Female + 0x02, 0x03 -> Orc Male, Orc Female + + Post-7.0.0.0: + 0x00, 0x01 + 0x02, 0x03 -> Human Male, Human Female + 0x04, 0x05 -> Orc Male, Orc Female + */ + + bool female = ((genderRace % 2) != 0); + + Race race = null; + + if ( state.StygianAbyss ) { + byte raceID = (byte)(genderRace < 4 ? 0 : ((genderRace / 2) - 1)); + race = Race.Races[raceID]; + } else { + race = Race.Races[(byte)(genderRace / 2)]; + } + + if( race == null ) + race = Race.DefaultRace; + + CityInfo[] info = state.CityInfo; + IAccount a = state.Account; + + if ( info == null || a == null || cityIndex < 0 || cityIndex >= info.Length ) + { + state.Dispose(); + } + else + { + // Check if anyone is using this account + for ( int i = 0; i < a.Length; ++i ) + { + Mobile check = a[i]; + + if ( check != null && check.Map != Map.Internal ) + { + Console.WriteLine( "Login: {0}: Account in use", state ); + state.Send( new PopupMessage( PMMessage.CharInWorld ) ); + return; + } + } + + state.Flags = (ClientFlags)flags; + + CharacterCreatedEventArgs args = new CharacterCreatedEventArgs( + state, a, + name, female, hue, + str, dex, intl, + info[cityIndex], + new SkillNameValue[3] + { + new SkillNameValue( (SkillName)is1, vs1 ), + new SkillNameValue( (SkillName)is2, vs2 ), + new SkillNameValue( (SkillName)is3, vs3 ), + }, + shirtHue, pantsHue, + hairVal, hairHue, + hairValf, hairHuef, + prof, + race + ); + + state.Send( new ClientVersionReq() ); + + state.BlockAllPackets = true; + + EventSink.InvokeCharacterCreated( args ); + + Mobile m = args.Mobile; + + if ( m != null ) + { + state.Mobile = m; + m.NetState = state; + new LoginTimer( state, m ).Start(); + } + else + { + state.BlockAllPackets = false; + state.Dispose(); + } + } + } + + public static void CreateCharacter70160( NetState state, PacketReader pvSrc ) + { + int unk1 = pvSrc.ReadInt32(); + int unk2 = pvSrc.ReadInt32(); + int unk3 = pvSrc.ReadByte(); + string name = pvSrc.ReadString( 30 ); + + pvSrc.Seek( 2, SeekOrigin.Current ); + int flags = pvSrc.ReadInt32(); + pvSrc.Seek( 8, SeekOrigin.Current ); + int prof = pvSrc.ReadByte(); + pvSrc.Seek( 15, SeekOrigin.Current ); + + int genderRace = pvSrc.ReadByte(); + + int str = pvSrc.ReadByte(); + int dex = pvSrc.ReadByte(); + int intl= pvSrc.ReadByte(); + int is1 = pvSrc.ReadByte(); + int vs1 = pvSrc.ReadByte(); + int is2 = pvSrc.ReadByte(); + int vs2 = pvSrc.ReadByte(); + int is3 = pvSrc.ReadByte(); + int vs3 = pvSrc.ReadByte(); + int is4 = pvSrc.ReadByte(); + int vs4 = pvSrc.ReadByte(); + + int hue = pvSrc.ReadUInt16(); + int hairVal = pvSrc.ReadInt16(); + int hairHue = pvSrc.ReadInt16(); + int hairValf= pvSrc.ReadInt16(); + int hairHuef= pvSrc.ReadInt16(); + pvSrc.ReadByte(); + int cityIndex = pvSrc.ReadByte(); + int charSlot = pvSrc.ReadInt32(); + int clientIP = pvSrc.ReadInt32(); + int shirtHue = pvSrc.ReadInt16(); + int pantsHue = pvSrc.ReadInt16(); + + /* + 0x00, 0x01 + 0x02, 0x03 -> Human Male, Human Female + 0x04, 0x05 -> Orc Male, Orc Female + */ + + bool female = ((genderRace % 2) != 0); + + Race race = null; + + byte raceID = (byte)(genderRace < 4 ? 0 : ((genderRace / 2) - 1)); + race = Race.Races[raceID]; + + if( race == null ) + race = Race.DefaultRace; + + CityInfo[] info = state.CityInfo; + IAccount a = state.Account; + + if ( info == null || a == null || cityIndex < 0 || cityIndex >= info.Length ) + { + state.Dispose(); + } + else + { + // Check if anyone is using this account + for ( int i = 0; i < a.Length; ++i ) + { + Mobile check = a[i]; + + if ( check != null && check.Map != Map.Internal ) + { + Console.WriteLine( "Login: {0}: Account in use", state ); + state.Send( new PopupMessage( PMMessage.CharInWorld ) ); + return; + } + } + + state.Flags = (ClientFlags)flags; + + CharacterCreatedEventArgs args = new CharacterCreatedEventArgs( + state, a, + name, female, hue, + str, dex, intl, + info[cityIndex], + new SkillNameValue[4] + { + new SkillNameValue( (SkillName)is1, vs1 ), + new SkillNameValue( (SkillName)is2, vs2 ), + new SkillNameValue( (SkillName)is3, vs3 ), + new SkillNameValue( (SkillName)is4, vs4 ), + }, + shirtHue, pantsHue, + hairVal, hairHue, + hairValf, hairHuef, + prof, + race + ); + + state.Send( new ClientVersionReq() ); + + state.BlockAllPackets = true; + + EventSink.InvokeCharacterCreated( args ); + + Mobile m = args.Mobile; + + if ( m != null ) + { + state.Mobile = m; + m.NetState = state; + new LoginTimer( state, m ).Start(); + } + else + { + state.BlockAllPackets = false; + state.Dispose(); + } + } + } + + + private static bool m_ClientVerification = true; + + public static bool ClientVerification + { + get{ return m_ClientVerification; } + set{ m_ClientVerification = value; } + } + + internal struct AuthIDPersistence { + public DateTime Age; + public ClientVersion Version; + + public AuthIDPersistence( ClientVersion v ) { + Age = DateTime.Now; + Version = v; + } + } + + private const int m_AuthIDWindowSize = 128; + private static Dictionary m_AuthIDWindow = new Dictionary( m_AuthIDWindowSize ); + + private static int GenerateAuthID( NetState state ) + { + if ( m_AuthIDWindow.Count == m_AuthIDWindowSize ) { + int oldestID = 0; + DateTime oldest = DateTime.MaxValue; + + foreach ( KeyValuePair kvp in m_AuthIDWindow ) { + if ( kvp.Value.Age < oldest ) { + oldestID = kvp.Key; + oldest = kvp.Value.Age; + } + } + + m_AuthIDWindow.Remove( oldestID ); + } + + int authID; + + do { + authID = Utility.Random( 1, int.MaxValue - 1 ); + + if ( Utility.RandomBool() ) + authID |= 1<<31; + } while ( m_AuthIDWindow.ContainsKey( authID ) ); + + m_AuthIDWindow[authID] = new AuthIDPersistence( state.Version ); + + return authID; + } + + public static void GameLogin( NetState state, PacketReader pvSrc ) + { + if ( state.SentFirstPacket ) + { + state.Dispose(); + return; + } + + state.SentFirstPacket = true; + + int authID = pvSrc.ReadInt32(); + + if ( m_AuthIDWindow.ContainsKey( authID ) ) { + AuthIDPersistence ap = m_AuthIDWindow[authID]; + m_AuthIDWindow.Remove( authID ); + + state.Version = ap.Version; + } else if ( m_ClientVerification ) { + Console.WriteLine( "Login: {0}: Invalid client detected, disconnecting", state ); + state.Dispose(); + return; + } + + if ( state.m_AuthID != 0 && authID != state.m_AuthID ) + { + Console.WriteLine( "Login: {0}: Invalid client detected, disconnecting", state ); + state.Dispose(); + return; + } + else if ( state.m_AuthID == 0 && authID != state.m_Seed ) + { + Console.WriteLine( "Login: {0}: Invalid client detected, disconnecting", state ); + state.Dispose(); + return; + } + + string username = pvSrc.ReadString( 30 ); + string password = pvSrc.ReadString( 30 ); + + GameLoginEventArgs e = new GameLoginEventArgs( state, username, password ); + + EventSink.InvokeGameLogin( e ); + + if ( e.Accepted ) + { + state.CityInfo = e.CityInfo; + state.CompressionEnabled = true; + + state.Send( SupportedFeatures.Instantiate( state ) ); + + if ( state.NewCharacterList ) { + state.Send( new CharacterList( state.Account, state.CityInfo ) ); + } else { + state.Send( new CharacterListOld( state.Account, state.CityInfo ) ); + } + } + else + { + state.Dispose(); + } + } + + public static void PlayServer( NetState state, PacketReader pvSrc ) + { + int index = pvSrc.ReadInt16(); + ServerInfo[] info = state.ServerInfo; + IAccount a = state.Account; + + if ( info == null || a == null || index < 0 || index >= info.Length ) + { + state.Dispose(); + } + else + { + ServerInfo si = info[index]; + + state.m_AuthID = PlayServerAck.m_AuthID = GenerateAuthID( state ); + + state.SentFirstPacket = false; + state.Send( new PlayServerAck( si ) ); + } + } + + public static void LoginServerSeed( NetState state, PacketReader pvSrc ) + { + state.m_Seed = pvSrc.ReadInt32(); + state.Seeded = true; + + if ( state.m_Seed == 0 ) + { + Console.WriteLine("Login: {0}: Invalid client detected, disconnecting", state); + state.Dispose(); + return; + } + + int clientMaj = pvSrc.ReadInt32(); + int clientMin = pvSrc.ReadInt32(); + int clientRev = pvSrc.ReadInt32(); + int clientPat = pvSrc.ReadInt32(); + + state.Version = new ClientVersion( clientMaj, clientMin, clientRev, clientPat ); + } + + public static void AccountLogin( NetState state, PacketReader pvSrc ) + { + if ( state.SentFirstPacket ) + { + state.Dispose(); + return; + } + + state.SentFirstPacket = true; + + string username = pvSrc.ReadString( 30 ); + string password = pvSrc.ReadString( 30 ); + + AccountLoginEventArgs e = new AccountLoginEventArgs( state, username, password ); + + EventSink.InvokeAccountLogin( e ); + + if ( e.Accepted ) + AccountLogin_ReplyAck( state ); + else + AccountLogin_ReplyRej( state, e.RejectReason ); + } + + public static void AccountLogin_ReplyAck( NetState state ) + { + ServerListEventArgs e = new ServerListEventArgs( state, state.Account ); + + EventSink.InvokeServerList( e ); + + if ( e.Rejected ) + { + state.Account = null; + state.Send( new AccountLoginRej( ALRReason.BadComm ) ); + state.Dispose(); + } + else + { + ServerInfo[] info = e.Servers.ToArray(); + + state.ServerInfo = info; + + state.Send( new AccountLoginAck( info ) ); + } + } + + public static void AccountLogin_ReplyRej( NetState state, ALRReason reason ) + { + state.Send( new AccountLoginRej( reason ) ); + state.Dispose(); + } + } +} \ No newline at end of file diff --git a/Source/Network/PacketReader.cs b/Source/Network/PacketReader.cs new file mode 100644 index 0000000..8acc8ff --- /dev/null +++ b/Source/Network/PacketReader.cs @@ -0,0 +1,457 @@ +/*************************************************************************** + * PacketReader.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Text; +using System.IO; + +namespace Server.Network +{ + public class PacketReader + { + private byte[] m_Data; + private int m_Size; + private int m_Index; + + public PacketReader( byte[] data, int size, bool fixedSize ) + { + m_Data = data; + m_Size = size; + m_Index = fixedSize ? 1 : 3; + } + + public byte[] Buffer + { + get + { + return m_Data; + } + } + + public int Size + { + get + { + return m_Size; + } + } + + public void Trace( NetState state ) + { + try + { + using ( StreamWriter sw = new StreamWriter( "Packets.log", true ) ) + { + byte[] buffer = m_Data; + + if ( buffer.Length > 0 ) + sw.WriteLine( "Client: {0}: Unhandled packet 0x{1:X2}", state, buffer[0] ); + + using ( MemoryStream ms = new MemoryStream( buffer ) ) + Utility.FormatBuffer( sw, ms, buffer.Length ); + + sw.WriteLine(); + sw.WriteLine(); + } + } + catch + { + } + } + + public int Seek( int offset, SeekOrigin origin ) + { + switch ( origin ) + { + case SeekOrigin.Begin: m_Index = offset; break; + case SeekOrigin.Current: m_Index += offset; break; + case SeekOrigin.End: m_Index = m_Size - offset; break; + } + + return m_Index; + } + + public int ReadInt32() + { + if ( (m_Index + 4) > m_Size ) + return 0; + + return (m_Data[m_Index++] << 24) + | (m_Data[m_Index++] << 16) + | (m_Data[m_Index++] << 8) + | m_Data[m_Index++]; + } + + public short ReadInt16() + { + if ( (m_Index + 2) > m_Size ) + return 0; + + return (short)((m_Data[m_Index++] << 8) | m_Data[m_Index++]); + } + + public byte ReadByte() + { + if ( (m_Index + 1) > m_Size ) + return 0; + + return m_Data[m_Index++]; + } + + public uint ReadUInt32() + { + if ( (m_Index + 4) > m_Size ) + return 0; + + return (uint)((m_Data[m_Index++] << 24) | (m_Data[m_Index++] << 16) | (m_Data[m_Index++] << 8) | m_Data[m_Index++]); + } + + public ushort ReadUInt16() + { + if ( (m_Index + 2) > m_Size ) + return 0; + + return (ushort)((m_Data[m_Index++] << 8) | m_Data[m_Index++]); + } + + public sbyte ReadSByte() + { + if ( (m_Index + 1) > m_Size ) + return 0; + + return (sbyte)m_Data[m_Index++]; + } + + public bool ReadBoolean() + { + if ( (m_Index + 1) > m_Size ) + return false; + + return ( m_Data[m_Index++] != 0 ); + } + + public string ReadUnicodeStringLE() + { + StringBuilder sb = new StringBuilder(); + + int c; + + while ( (m_Index + 1) < m_Size && (c = (m_Data[m_Index++] | (m_Data[m_Index++] << 8))) != 0 ) + sb.Append( (char)c ); + + return sb.ToString(); + } + + public string ReadUnicodeStringLESafe( int fixedLength ) + { + int bound = m_Index + (fixedLength << 1); + int end = bound; + + if ( bound > m_Size ) + bound = m_Size; + + StringBuilder sb = new StringBuilder(); + + int c; + + while ( (m_Index + 1) < bound && (c = (m_Data[m_Index++] | (m_Data[m_Index++] << 8))) != 0 ) + { + if ( IsSafeChar( c ) ) + sb.Append( (char)c ); + } + + m_Index = end; + + return sb.ToString(); + } + + public string ReadUnicodeStringLESafe() + { + StringBuilder sb = new StringBuilder(); + + int c; + + while ( (m_Index + 1) < m_Size && (c = (m_Data[m_Index++] | (m_Data[m_Index++] << 8))) != 0 ) + { + if ( IsSafeChar( c ) ) + sb.Append( (char)c ); + } + + return sb.ToString(); + } + + public string ReadUnicodeStringSafe() + { + StringBuilder sb = new StringBuilder(); + + int c; + + while ( (m_Index + 1) < m_Size && (c = ((m_Data[m_Index++] << 8) | m_Data[m_Index++])) != 0 ) + { + if ( IsSafeChar( c ) ) + sb.Append( (char)c ); + } + + return sb.ToString(); + } + + public string ReadUnicodeString() + { + StringBuilder sb = new StringBuilder(); + + int c; + + while ( (m_Index + 1) < m_Size && (c = ((m_Data[m_Index++] << 8) | m_Data[m_Index++])) != 0 ) + sb.Append( (char)c ); + + return sb.ToString(); + } + + public bool IsSafeChar( int c ) + { + return ( c >= 0x20 && c < 0xFFFE ); + } + + public string ReadUTF8StringSafe( int fixedLength ) + { + if ( m_Index >= m_Size ) + { + m_Index += fixedLength; + return String.Empty; + } + + int bound = m_Index + fixedLength; + //int end = bound; + + if ( bound > m_Size ) + bound = m_Size; + + int count = 0; + int index = m_Index; + int start = m_Index; + + while ( index < bound && m_Data[index++] != 0 ) + ++count; + + index = 0; + + byte[] buffer = new byte[count]; + int value = 0; + + while ( m_Index < bound && (value = m_Data[m_Index++]) != 0 ) + buffer[index++] = (byte)value; + + string s = Utility.UTF8.GetString( buffer ); + + bool isSafe = true; + + for ( int i = 0; isSafe && i < s.Length; ++i ) + isSafe = IsSafeChar( (int) s[i] ); + + m_Index = start + fixedLength; + + if ( isSafe ) + return s; + + StringBuilder sb = new StringBuilder( s.Length ); + + for ( int i = 0; i < s.Length; ++i ) + if ( IsSafeChar( (int) s[i] ) ) + sb.Append( s[i] ); + + return sb.ToString(); + } + + public string ReadUTF8StringSafe() + { + if ( m_Index >= m_Size ) + return String.Empty; + + int count = 0; + int index = m_Index; + + while ( index < m_Size && m_Data[index++] != 0 ) + ++count; + + index = 0; + + byte[] buffer = new byte[count]; + int value = 0; + + while ( m_Index < m_Size && (value = m_Data[m_Index++]) != 0 ) + buffer[index++] = (byte)value; + + string s = Utility.UTF8.GetString( buffer ); + + bool isSafe = true; + + for ( int i = 0; isSafe && i < s.Length; ++i ) + isSafe = IsSafeChar( (int) s[i] ); + + if ( isSafe ) + return s; + + StringBuilder sb = new StringBuilder( s.Length ); + + for ( int i = 0; i < s.Length; ++i ) + { + if ( IsSafeChar( (int) s[i] ) ) + sb.Append( s[i] ); + } + + return sb.ToString(); + } + + public string ReadUTF8String() + { + if ( m_Index >= m_Size ) + return String.Empty; + + int count = 0; + int index = m_Index; + + while ( index < m_Size && m_Data[index++] != 0 ) + ++count; + + index = 0; + + byte[] buffer = new byte[count]; + int value = 0; + + while ( m_Index < m_Size && (value = m_Data[m_Index++]) != 0 ) + buffer[index++] = (byte)value; + + return Utility.UTF8.GetString( buffer ); + } + + public string ReadString() + { + StringBuilder sb = new StringBuilder(); + + int c; + + while ( m_Index < m_Size && (c = m_Data[m_Index++]) != 0 ) + sb.Append( (char)c ); + + return sb.ToString(); + } + + public string ReadStringSafe() + { + StringBuilder sb = new StringBuilder(); + + int c; + + while ( m_Index < m_Size && (c = m_Data[m_Index++]) != 0 ) + { + if ( IsSafeChar( c ) ) + sb.Append( (char)c ); + } + + return sb.ToString(); + } + + public string ReadUnicodeStringSafe( int fixedLength ) + { + int bound = m_Index + (fixedLength << 1); + int end = bound; + + if ( bound > m_Size ) + bound = m_Size; + + StringBuilder sb = new StringBuilder(); + + int c; + + while ( (m_Index + 1) < bound && (c = ((m_Data[m_Index++] << 8) | m_Data[m_Index++])) != 0 ) + { + if ( IsSafeChar( c ) ) + sb.Append( (char)c ); + } + + m_Index = end; + + return sb.ToString(); + } + + public string ReadUnicodeString( int fixedLength ) + { + int bound = m_Index + (fixedLength << 1); + int end = bound; + + if ( bound > m_Size ) + bound = m_Size; + + StringBuilder sb = new StringBuilder(); + + int c; + + while ( (m_Index + 1) < bound && (c = ((m_Data[m_Index++] << 8) | m_Data[m_Index++])) != 0 ) + sb.Append( (char)c ); + + m_Index = end; + + return sb.ToString(); + } + + public string ReadStringSafe( int fixedLength ) + { + int bound = m_Index + fixedLength; + int end = bound; + + if ( bound > m_Size ) + bound = m_Size; + + StringBuilder sb = new StringBuilder(); + + int c; + + while ( m_Index < bound && (c = m_Data[m_Index++]) != 0 ) + { + if ( IsSafeChar( c ) ) + sb.Append( (char)c ); + } + + m_Index = end; + + return sb.ToString(); + } + + public string ReadString( int fixedLength ) + { + int bound = m_Index + fixedLength; + int end = bound; + + if ( bound > m_Size ) + bound = m_Size; + + StringBuilder sb = new StringBuilder(); + + int c; + + while ( m_Index < bound && (c = m_Data[m_Index++]) != 0 ) + sb.Append( (char)c ); + + m_Index = end; + + return sb.ToString(); + } + } +} \ No newline at end of file diff --git a/Source/Network/PacketWriter.cs b/Source/Network/PacketWriter.cs new file mode 100644 index 0000000..b90353c --- /dev/null +++ b/Source/Network/PacketWriter.cs @@ -0,0 +1,470 @@ +/*************************************************************************** + * PacketWriter.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Network +{ + /// + /// Provides functionality for writing primitive binary data. + /// + public class PacketWriter + { + private static Stack m_Pool = new Stack(); + + public static PacketWriter CreateInstance() + { + return CreateInstance( 32 ); + } + + public static PacketWriter CreateInstance( int capacity ) + { + PacketWriter pw = null; + + lock ( m_Pool ) + { + if ( m_Pool.Count > 0 ) + { + pw = m_Pool.Pop(); + + if ( pw != null ) + { + pw.m_Capacity = capacity; + pw.m_Stream.SetLength( 0 ); + } + } + } + + if ( pw == null ) + pw = new PacketWriter( capacity ); + + return pw; + } + + public static void ReleaseInstance( PacketWriter pw ) + { + lock ( m_Pool ) + { + if ( !m_Pool.Contains( pw ) ) + { + m_Pool.Push( pw ); + } + else + { + try + { + using ( StreamWriter op = new StreamWriter( "neterr.log" ) ) + { + op.WriteLine( "{0}\tInstance pool contains writer", DateTime.Now ); + } + } + catch + { + Console.WriteLine( "net error" ); + } + } + } + } + + /// + /// Internal stream which holds the entire packet. + /// + private MemoryStream m_Stream; + + private int m_Capacity; + + /// + /// Internal format buffer. + /// + private static byte[] m_Buffer = new byte[4]; + + /// + /// Instantiates a new PacketWriter instance with the default capacity of 4 bytes. + /// + public PacketWriter() : this( 32 ) + { + } + + /// + /// Instantiates a new PacketWriter instance with a given capacity. + /// + /// Initial capacity for the internal stream. + public PacketWriter( int capacity ) + { + m_Stream = new MemoryStream( capacity ); + m_Capacity = capacity; + } + + /// + /// Writes a 1-byte boolean value to the underlying stream. False is represented by 0, true by 1. + /// + public void Write( bool value ) + { + m_Stream.WriteByte( (byte)(value ? 1 : 0) ); + } + + /// + /// Writes a 1-byte unsigned integer value to the underlying stream. + /// + public void Write( byte value ) + { + m_Stream.WriteByte( value ); + } + + /// + /// Writes a 1-byte signed integer value to the underlying stream. + /// + public void Write( sbyte value ) + { + m_Stream.WriteByte( (byte) value ); + } + + /// + /// Writes a 2-byte signed integer value to the underlying stream. + /// + public void Write( short value ) + { + m_Buffer[0] = (byte)(value >> 8); + m_Buffer[1] = (byte) value; + + m_Stream.Write( m_Buffer, 0, 2 ); + } + + /// + /// Writes a 2-byte unsigned integer value to the underlying stream. + /// + public void Write( ushort value ) + { + m_Buffer[0] = (byte)(value >> 8); + m_Buffer[1] = (byte) value; + + m_Stream.Write( m_Buffer, 0, 2 ); + } + + /// + /// Writes a 4-byte signed integer value to the underlying stream. + /// + public void Write( int value ) + { + m_Buffer[0] = (byte)(value >> 24); + m_Buffer[1] = (byte)(value >> 16); + m_Buffer[2] = (byte)(value >> 8); + m_Buffer[3] = (byte) value; + + m_Stream.Write( m_Buffer, 0, 4 ); + } + + /// + /// Writes a 4-byte unsigned integer value to the underlying stream. + /// + public void Write( uint value ) + { + m_Buffer[0] = (byte)(value >> 24); + m_Buffer[1] = (byte)(value >> 16); + m_Buffer[2] = (byte)(value >> 8); + m_Buffer[3] = (byte) value; + + m_Stream.Write( m_Buffer, 0, 4 ); + } + + /// + /// Writes a sequence of bytes to the underlying stream + /// + public void Write( byte[] buffer, int offset, int size ) + { + m_Stream.Write( buffer, offset, size ); + } + + /// + /// Writes a fixed-length ASCII-encoded string value to the underlying stream. To fit (size), the string content is either truncated or padded with null characters. + /// + public void WriteAsciiFixed( string value, int size ) + { + if ( value == null ) + { + Console.WriteLine( "Network: Attempted to WriteAsciiFixed() with null value" ); + value = String.Empty; + } + + int length = value.Length; + + m_Stream.SetLength( m_Stream.Length + size ); + + if ( length >= size ) + m_Stream.Position += Encoding.ASCII.GetBytes( value, 0, size, m_Stream.GetBuffer(), (int)m_Stream.Position ); + else + { + Encoding.ASCII.GetBytes( value, 0, length, m_Stream.GetBuffer(), (int)m_Stream.Position ); + m_Stream.Position += size; + } + + /*byte[] buffer = Encoding.ASCII.GetBytes( value ); + + if ( buffer.Length >= size ) + { + m_Stream.Write( buffer, 0, size ); + } + else + { + m_Stream.Write( buffer, 0, buffer.Length ); + Fill( size - buffer.Length ); + }*/ + } + + /// + /// Writes a dynamic-length ASCII-encoded string value to the underlying stream, followed by a 1-byte null character. + /// + public void WriteAsciiNull( string value ) + { + if ( value == null ) + { + Console.WriteLine( "Network: Attempted to WriteAsciiNull() with null value" ); + value = String.Empty; + } + + int length = value.Length; + + m_Stream.SetLength( m_Stream.Length + length + 1 ); + + Encoding.ASCII.GetBytes( value, 0, length, m_Stream.GetBuffer(), (int)m_Stream.Position ); + m_Stream.Position += length + 1; + + /*byte[] buffer = Encoding.ASCII.GetBytes( value ); + + m_Stream.Write( buffer, 0, buffer.Length ); + m_Stream.WriteByte( 0 );*/ + } + + /// + /// Writes a dynamic-length little-endian unicode string value to the underlying stream, followed by a 2-byte null character. + /// + public void WriteLittleUniNull( string value ) + { + if ( value == null ) + { + Console.WriteLine( "Network: Attempted to WriteLittleUniNull() with null value" ); + value = String.Empty; + } + + int length = value.Length; + + m_Stream.SetLength( m_Stream.Length + ( ( length + 1 ) * 2 ) ); + + m_Stream.Position += Encoding.Unicode.GetBytes( value, 0, length, m_Stream.GetBuffer(), (int)m_Stream.Position ); + m_Stream.Position += 2; + + /*byte[] buffer = Encoding.Unicode.GetBytes( value ); + + m_Stream.Write( buffer, 0, buffer.Length ); + + m_Buffer[0] = 0; + m_Buffer[1] = 0; + m_Stream.Write( m_Buffer, 0, 2 );*/ + } + + /// + /// Writes a fixed-length little-endian unicode string value to the underlying stream. To fit (size), the string content is either truncated or padded with null characters. + /// + public void WriteLittleUniFixed( string value, int size ) + { + if ( value == null ) + { + Console.WriteLine( "Network: Attempted to WriteLittleUniFixed() with null value" ); + value = String.Empty; + } + + size *= 2; + + int length = value.Length; + + m_Stream.SetLength( m_Stream.Length + size ); + + if ( ( length * 2 ) >= size ) + m_Stream.Position += Encoding.Unicode.GetBytes( value, 0, length, m_Stream.GetBuffer(), (int)m_Stream.Position ); + else + { + Encoding.Unicode.GetBytes( value, 0, length, m_Stream.GetBuffer(), (int)m_Stream.Position ); + m_Stream.Position += size; + } + + /*size *= 2; + + byte[] buffer = Encoding.Unicode.GetBytes( value ); + + if ( buffer.Length >= size ) + { + m_Stream.Write( buffer, 0, size ); + } + else + { + m_Stream.Write( buffer, 0, buffer.Length ); + Fill( size - buffer.Length ); + }*/ + } + + /// + /// Writes a dynamic-length big-endian unicode string value to the underlying stream, followed by a 2-byte null character. + /// + public void WriteBigUniNull( string value ) + { + if ( value == null ) + { + Console.WriteLine( "Network: Attempted to WriteBigUniNull() with null value" ); + value = String.Empty; + } + + int length = value.Length; + + m_Stream.SetLength( m_Stream.Length + ( ( length + 1 ) * 2 ) ); + + m_Stream.Position += Encoding.BigEndianUnicode.GetBytes( value, 0, length, m_Stream.GetBuffer(), (int)m_Stream.Position ); + m_Stream.Position += 2; + + /*byte[] buffer = Encoding.BigEndianUnicode.GetBytes( value ); + + m_Stream.Write( buffer, 0, buffer.Length ); + + m_Buffer[0] = 0; + m_Buffer[1] = 0; + m_Stream.Write( m_Buffer, 0, 2 );*/ + } + + /// + /// Writes a fixed-length big-endian unicode string value to the underlying stream. To fit (size), the string content is either truncated or padded with null characters. + /// + public void WriteBigUniFixed( string value, int size ) + { + if ( value == null ) + { + Console.WriteLine( "Network: Attempted to WriteBigUniFixed() with null value" ); + value = String.Empty; + } + + size *= 2; + + int length = value.Length; + + m_Stream.SetLength( m_Stream.Length + size ); + + if ( ( length * 2 ) >= size ) + m_Stream.Position += Encoding.BigEndianUnicode.GetBytes( value, 0, length, m_Stream.GetBuffer(), (int)m_Stream.Position ); + else + { + Encoding.BigEndianUnicode.GetBytes( value, 0, length, m_Stream.GetBuffer(), (int)m_Stream.Position ); + m_Stream.Position += size; + } + + /*size *= 2; + + byte[] buffer = Encoding.BigEndianUnicode.GetBytes( value ); + + if ( buffer.Length >= size ) + { + m_Stream.Write( buffer, 0, size ); + } + else + { + m_Stream.Write( buffer, 0, buffer.Length ); + Fill( size - buffer.Length ); + }*/ + } + + /// + /// Fills the stream from the current position up to (capacity) with 0x00's + /// + public void Fill() + { + Fill( (int) (m_Capacity - m_Stream.Length) ); + } + + /// + /// Writes a number of 0x00 byte values to the underlying stream. + /// + public void Fill( int length ) + { + if ( m_Stream.Position == m_Stream.Length ) + { + m_Stream.SetLength( m_Stream.Length + length ); + m_Stream.Seek( 0, SeekOrigin.End ); + } + else + { + m_Stream.Write( new byte[length], 0, length ); + } + } + + /// + /// Gets the total stream length. + /// + public long Length + { + get + { + return m_Stream.Length; + } + } + + /// + /// Gets or sets the current stream position. + /// + public long Position + { + get + { + return m_Stream.Position; + } + set + { + m_Stream.Position = value; + } + } + + /// + /// The internal stream used by this PacketWriter instance. + /// + public MemoryStream UnderlyingStream + { + get + { + return m_Stream; + } + } + + /// + /// Offsets the current position from an origin. + /// + public long Seek( long offset, SeekOrigin origin ) + { + return m_Stream.Seek( offset, origin ); + } + + /// + /// Gets the entire stream content as a byte array. + /// + public byte[] ToArray() + { + return m_Stream.ToArray(); + } + } +} \ No newline at end of file diff --git a/Source/Network/Packets.cs b/Source/Network/Packets.cs new file mode 100644 index 0000000..4affefa --- /dev/null +++ b/Source/Network/Packets.cs @@ -0,0 +1,4284 @@ +/*************************************************************************** + * Packets.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; +using Server.Accounting; +using Server.Targeting; +using Server.Items; +using Server.Mobiles; +using Server.Gumps; +using Server.Menus; +using Server.Menus.ItemLists; +using Server.Menus.Questions; +using Server.Prompts; +using Server.HuePickers; +using Server.ContextMenus; +using Server.Diagnostics; + +namespace Server.Network +{ + public enum PMMessage : byte + { + CharNoExist = 1, + CharExists = 2, + CharInWorld = 5, + LoginSyncError = 6, + IdleWarning = 7 + } + + public enum LRReason : byte + { + CannotLift = 0, + OutOfRange = 1, + OutOfSight = 2, + TryToSteal = 3, + AreHolding = 4, + Inspecific = 5 + } + + /*public enum CMEFlags + { + None = 0x00, + Locked = 0x01, + Arrow = 0x02, + x0004 = 0x04, + Color = 0x20, + x0040 = 0x40, + x0080 = 0x80 + }*/ + + public sealed class DamagePacketOld : Packet + { + public DamagePacketOld( Mobile m, int amount ) : base( 0xBF ) + { + EnsureCapacity( 11 ); + + m_Stream.Write( (short) 0x22 ); + m_Stream.Write( (byte) 1 ); + m_Stream.Write( (int) m.Serial ); + + if ( amount > 255 ) + amount = 255; + else if ( amount < 0 ) + amount = 0; + + m_Stream.Write( (byte)amount ); + } + } + + public sealed class DamagePacket : Packet + { + public DamagePacket( Mobile m, int amount ) : base( 0x0B, 7 ) + { + m_Stream.Write( (int) m.Serial ); + + if ( amount > 0xFFFF ) + amount = 0xFFFF; + else if ( amount < 0 ) + amount = 0; + + m_Stream.Write( (ushort) amount ); + } + + /*public DamagePacket( Mobile m, int amount ) : base( 0xBF ) + { + EnsureCapacity( 11 ); + + m_Stream.Write( (short) 0x22 ); + m_Stream.Write( (byte) 1 ); + m_Stream.Write( (int) m.Serial ); + + if ( amount > 255 ) + amount = 255; + else if ( amount < 0 ) + amount = 0; + + m_Stream.Write( (byte)amount ); + }*/ + } + + public sealed class CancelArrow : Packet + { + public CancelArrow() : base( 0xBA, 6 ) + { + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (short) -1 ); + m_Stream.Write( (short) -1 ); + } + } + + public sealed class SetArrow : Packet + { + public SetArrow( int x, int y ) : base( 0xBA, 6 ) + { + m_Stream.Write( (byte) 1 ); + m_Stream.Write( (short) x ); + m_Stream.Write( (short) y ); + } + } + + public sealed class CancelArrowHS : Packet + { + public CancelArrowHS( int x, int y, Serial s ) : base( 0xBA, 10 ) + { + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (short) x ); + m_Stream.Write( (short) y ); + m_Stream.Write( (int) s ); + } + } + + public sealed class SetArrowHS : Packet + { + public SetArrowHS( int x, int y, Serial s ) : base( 0xBA, 10 ) + { + m_Stream.Write( (byte) 1 ); + m_Stream.Write( (short) x ); + m_Stream.Write( (short) y ); + m_Stream.Write( (int) s ); + } + } + + public sealed class DisplaySecureTrade : Packet + { + public DisplaySecureTrade( Mobile them, Container first, Container second, string name ) : base( 0x6F ) + { + if ( name == null ) + name = ""; + + EnsureCapacity( 18 + name.Length ); + + m_Stream.Write( (byte) 0 ); // Display + m_Stream.Write( (int) them.Serial ); + m_Stream.Write( (int) first.Serial ); + m_Stream.Write( (int) second.Serial ); + m_Stream.Write( (bool) true ); + + m_Stream.WriteAsciiFixed( name, 30 ); + } + } + + public sealed class CloseSecureTrade : Packet + { + public CloseSecureTrade( Container cont ) : base( 0x6F ) + { + EnsureCapacity( 8 ); + + m_Stream.Write( (byte) 1 ); // Close + m_Stream.Write( (int) cont.Serial ); + } + } + + public sealed class UpdateSecureTrade : Packet + { + public UpdateSecureTrade( Container cont, bool first, bool second ) : base( 0x6F ) + { + EnsureCapacity( 8 ); + + m_Stream.Write( (byte) 2 ); // Update + m_Stream.Write( (int) cont.Serial ); + m_Stream.Write( (int) (first ? 1 : 0) ); + m_Stream.Write( (int) (second ? 1 : 0) ); + } + } + + public sealed class SecureTradeEquip : Packet + { + public SecureTradeEquip( Item item, Mobile m ) : base( 0x25, 20 ) + { + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (short) item.ItemID ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (short) item.Amount ); + m_Stream.Write( (short) item.X ); + m_Stream.Write( (short) item.Y ); + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) item.Hue ); + } + } + + public sealed class SecureTradeEquip6017 : Packet + { + public SecureTradeEquip6017( Item item, Mobile m ) : base( 0x25, 21 ) + { + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (short) item.ItemID ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (short) item.Amount ); + m_Stream.Write( (short) item.X ); + m_Stream.Write( (short) item.Y ); + m_Stream.Write( (byte) 0 ); // Grid Location? + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) item.Hue ); + } + } + + public sealed class MapPatches : Packet + { + public MapPatches() : base( 0xBF ) + { + EnsureCapacity( 9 + (3 * 8) ); + + m_Stream.Write( (short) 0x0018 ); + + m_Stream.Write( (int) 4 ); + + m_Stream.Write( (int) Map.Britannia.Tiles.Patch.StaticBlocks ); + m_Stream.Write( (int) Map.Britannia.Tiles.Patch.LandBlocks ); + + m_Stream.Write( (int) Map.Underworld.Tiles.Patch.StaticBlocks ); + m_Stream.Write( (int) Map.Underworld.Tiles.Patch.LandBlocks ); + + m_Stream.Write( (int) Map.Darkness.Tiles.Patch.StaticBlocks ); + m_Stream.Write( (int) Map.Darkness.Tiles.Patch.LandBlocks ); + + m_Stream.Write( (int) Map.Ocean.Tiles.Patch.StaticBlocks ); + m_Stream.Write( (int) Map.Ocean.Tiles.Patch.LandBlocks ); + } + } + + public sealed class ObjectHelpResponse : Packet + { + public ObjectHelpResponse( IEntity e, string text ) : base( 0xB7 ) + { + this.EnsureCapacity( 9 + (text.Length * 2) ); + + m_Stream.Write( (int) e.Serial ); + m_Stream.WriteBigUniNull( text ); + } + } + + public sealed class VendorBuyContent : Packet + { + public VendorBuyContent( List list ) + : base( 0x3c ) + { + this.EnsureCapacity( list.Count*19 + 5 ); + + m_Stream.Write( (short)list.Count ); + + //The client sorts these by their X/Y value. + //OSI sends these in wierd order. X/Y highest to lowest and serial loest to highest + //These are already sorted by serial (done by the vendor class) but we have to send them by x/y + //(the x74 packet is sent in 'correct' order.) + for ( int i = list.Count - 1; i >= 0; --i ) + { + BuyItemState bis = (BuyItemState)list[i]; + + m_Stream.Write( (int)bis.MySerial ); + m_Stream.Write( (ushort)bis.ItemID ); + m_Stream.Write( (byte)0 );//itemid offset + m_Stream.Write( (ushort)bis.Amount ); + m_Stream.Write( (short)(i+1) );//x + m_Stream.Write( (short)1 );//y + m_Stream.Write( (int)bis.ContainerSerial ); + m_Stream.Write( (ushort)bis.Hue ); + } + } + } + + public sealed class VendorBuyContent6017 : Packet + { + public VendorBuyContent6017( List list ) : base( 0x3c ) + { + this.EnsureCapacity( list.Count*20 + 5 ); + + m_Stream.Write( (short)list.Count ); + + //The client sorts these by their X/Y value. + //OSI sends these in wierd order. X/Y highest to lowest and serial loest to highest + //These are already sorted by serial (done by the vendor class) but we have to send them by x/y + //(the x74 packet is sent in 'correct' order.) + for ( int i = list.Count - 1; i >= 0; --i ) + { + BuyItemState bis = (BuyItemState)list[i]; + + m_Stream.Write( (int)bis.MySerial ); + m_Stream.Write( (ushort)bis.ItemID ); + m_Stream.Write( (byte)0 );//itemid offset + m_Stream.Write( (ushort)bis.Amount ); + m_Stream.Write( (short)(i+1) );//x + m_Stream.Write( (short)1 );//y + m_Stream.Write( (byte)0 ); // Grid Location? + m_Stream.Write( (int)bis.ContainerSerial ); + m_Stream.Write( (ushort)bis.Hue ); + } + } + } + + public sealed class DisplayBuyList : Packet + { + public DisplayBuyList( Mobile vendor ) : base( 0x24, 7 ) + { + m_Stream.Write( (int)vendor.Serial ); + m_Stream.Write( (short) 0x30 ); // buy window id? + } + } + + public sealed class DisplayBuyListHS : Packet + { + public DisplayBuyListHS( Mobile vendor ) : base( 0x24, 9 ) + { + m_Stream.Write( (int)vendor.Serial ); + m_Stream.Write( (short) 0x30 ); // buy window id? + m_Stream.Write( (short) 0x00 ); + } + } + + public sealed class VendorBuyList : Packet + { + public VendorBuyList( Mobile vendor, List list ) + : base( 0x74 ) + { + this.EnsureCapacity( 256 ); + + Container BuyPack = vendor.FindItemOnLayer( Layer.ShopBuy ) as Container; + m_Stream.Write( (int)(BuyPack == null ? Serial.MinusOne : BuyPack.Serial) ); + + m_Stream.Write( (byte)list.Count ); + + for ( int i = 0; i < list.Count; ++i ) + { + BuyItemState bis = list[i]; + + m_Stream.Write( (int) bis.Price ); + + string desc = bis.Description; + + if ( desc == null ) + desc = ""; + + m_Stream.Write( (byte)(desc.Length + 1) ); + m_Stream.WriteAsciiNull( desc ); + } + } + } + + public sealed class VendorSellList : Packet + { + public VendorSellList( Mobile shopkeeper, Hashtable table ) : base( 0x9E ) + { + this.EnsureCapacity( 256 ); + + m_Stream.Write( (int) shopkeeper.Serial ); + + m_Stream.Write( (ushort) table.Count ); + + foreach ( SellItemState state in table.Values ) + { + m_Stream.Write( (int) state.Item.Serial ); + m_Stream.Write( (ushort) state.Item.ItemID ); + m_Stream.Write( (ushort) state.Item.Hue ); + m_Stream.Write( (ushort) state.Item.Amount ); + m_Stream.Write( (ushort) state.Price ); + + string name = state.Item.Name; + + if ( name == null || (name = name.Trim()).Length <= 0 ) + name = state.Name; + + if ( name == null ) + name = ""; + + m_Stream.Write( (ushort) (name.Length) ); + m_Stream.WriteAsciiFixed( name, (ushort) (name.Length) ); + } + } + } + + public sealed class EndVendorSell : Packet + { + public EndVendorSell( Mobile Vendor ) : base( 0x3B, 8 ) + { + m_Stream.Write( (ushort)8 );//length + m_Stream.Write( (int)Vendor.Serial ); + m_Stream.Write( (byte)0 ); + } + } + + public sealed class EndVendorBuy : Packet + { + public EndVendorBuy( Mobile Vendor ) : base( 0x3B, 8 ) + { + m_Stream.Write( (ushort)8 );//length + m_Stream.Write( (int)Vendor.Serial ); + m_Stream.Write( (byte)0 ); + } + } + + public sealed class DeathAnimation : Packet + { + public DeathAnimation( Mobile killed, Item corpse ) : base( 0xAF, 13 ) + { + m_Stream.Write( (int) killed.Serial ); + m_Stream.Write( (int) (corpse == null ? Serial.Zero : corpse.Serial) ); + m_Stream.Write( (int) 0 ) ; + } + } + + public sealed class StatLockInfo : Packet + { + public StatLockInfo( Mobile m ) : base( 0xBF ) + { + this.EnsureCapacity( 12 ); + + m_Stream.Write( (short) 0x19 ); + m_Stream.Write( (byte) 2 ); + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (byte) 0 ); + + int lockBits = 0; + + lockBits |= (int)m.StrLock << 4; + lockBits |= (int)m.DexLock << 2; + lockBits |= (int)m.IntLock; + + m_Stream.Write( (byte) lockBits ); + } + } + + public class EquipInfoAttribute + { + private int m_Number; + private int m_Charges; + + public int Number + { + get + { + return m_Number; + } + } + + public int Charges + { + get + { + return m_Charges; + } + } + + public EquipInfoAttribute( int number ) : this( number, -1 ) + { + } + + public EquipInfoAttribute( int number, int charges ) + { + m_Number = number; + m_Charges = charges; + } + } + + public class EquipmentInfo + { + private int m_Number; + private Mobile m_Crafter; + private bool m_Unidentified; + private EquipInfoAttribute[] m_Attributes; + + public int Number + { + get + { + return m_Number; + } + } + + public Mobile Crafter + { + get + { + return m_Crafter; + } + } + + public bool Unidentified + { + get + { + return m_Unidentified; + } + } + + public EquipInfoAttribute[] Attributes + { + get + { + return m_Attributes; + } + } + + public EquipmentInfo( int number, Mobile crafter, bool unidentified, EquipInfoAttribute[] attributes ) + { + m_Number = number; + m_Crafter = crafter; + m_Unidentified = unidentified; + m_Attributes = attributes; + } + } + + public sealed class DisplayEquipmentInfo : Packet + { + public DisplayEquipmentInfo( Item item, EquipmentInfo info ) : base( 0xBF ) + { + EquipInfoAttribute[] attrs = info.Attributes; + + this.EnsureCapacity( 17 + (info.Crafter == null ? 0 : 6 + info.Crafter.Name == null ? 0 : info.Crafter.Name.Length) + (info.Unidentified ? 4 : 0) + (attrs.Length * 6) ); + + m_Stream.Write( (short) 0x10 ); + m_Stream.Write( (int) item.Serial ); + + m_Stream.Write( (int) info.Number ); + + if ( info.Crafter != null ) + { + string name = info.Crafter.Name; + + m_Stream.Write( (int) -3 ); + + if ( name == null ) + m_Stream.Write( (ushort) 0 ); + else + { + int length = name.Length; + m_Stream.Write( (ushort) length ); + m_Stream.WriteAsciiFixed( name, length ); + } + } + + if ( info.Unidentified ) + { + m_Stream.Write( (int) -4 ); + } + + for ( int i = 0; i < attrs.Length; ++i ) + { + m_Stream.Write( (int) attrs[i].Number ); + m_Stream.Write( (short) attrs[i].Charges ); + } + + m_Stream.Write( (int) -1 ); + } + } + + public sealed class ChangeUpdateRange : Packet + { + private static ChangeUpdateRange[] m_Cache = new ChangeUpdateRange[0x100]; + + public static ChangeUpdateRange Instantiate( int range ) + { + byte idx = (byte)range; + ChangeUpdateRange p = m_Cache[idx]; + + if ( p == null ) + { + m_Cache[idx] = p = new ChangeUpdateRange( range ); + p.SetStatic(); + } + + return p; + } + + public ChangeUpdateRange( int range ) : base( 0xC8, 2 ) + { + m_Stream.Write( (byte) range ); + } + } + + public sealed class ChangeCombatant : Packet + { + public ChangeCombatant( Mobile combatant ) : base( 0xAA, 5 ) + { + m_Stream.Write( combatant != null ? combatant.Serial : Serial.Zero ); + } + } + + public sealed class DisplayHuePicker : Packet + { + public DisplayHuePicker( HuePicker huePicker ) : base( 0x95, 9 ) + { + m_Stream.Write( (int) huePicker.Serial ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) huePicker.ItemID ); + } + } + + public sealed class TripTimeResponse : Packet + { + public TripTimeResponse( int unk ) : base( 0xC9, 6 ) + { + m_Stream.Write( (byte) unk ); + m_Stream.Write( (int) Environment.TickCount ); + } + } + + public sealed class UTripTimeResponse : Packet + { + public UTripTimeResponse( int unk ) : base( 0xCA, 6 ) + { + m_Stream.Write( (byte) unk ); + m_Stream.Write( (int) Environment.TickCount ); + } + } + + public sealed class UnicodePrompt : Packet + { + public UnicodePrompt( Prompt prompt ) : base( 0xC2 ) + { + this.EnsureCapacity( 21 ); + + m_Stream.Write( (int) prompt.Serial ); + m_Stream.Write( (int) prompt.Serial ); + m_Stream.Write( (int) 0 ); + m_Stream.Write( (int) 0 ); + m_Stream.Write( (short) 0 ); + } + } + + public sealed class ChangeCharacter : Packet + { + public ChangeCharacter( IAccount a ) : base( 0x81 ) + { + this.EnsureCapacity( 305 ); + + int count = 0; + + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] != null ) + ++count; + } + + m_Stream.Write( (byte) count ); + m_Stream.Write( (byte) 0 ); + + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] != null ) + { + string name = a[i].Name; + + if ( name == null ) + name = "-null-"; + else if ( (name = name.Trim()).Length == 0 ) + name = "-empty-"; + + m_Stream.WriteAsciiFixed( name, 30 ); + m_Stream.Fill( 30 ); // password + } + else + { + m_Stream.Fill( 60 ); + } + } + } + } + + public sealed class DeathStatus : Packet + { + public static readonly Packet Dead = Packet.SetStatic( new DeathStatus( true ) ); + public static readonly Packet Alive = Packet.SetStatic( new DeathStatus( false ) ); + + public static Packet Instantiate( bool dead ) + { + return ( dead ? Dead : Alive ); + } + + public DeathStatus( bool dead ) : base( 0x2C, 2 ) + { + m_Stream.Write( (byte) (dead ? 0 : 2) ); + } + } + + public sealed class SpeedControl : Packet + { + public static readonly Packet WalkSpeed = Packet.SetStatic( new SpeedControl( 2 ) ); + public static readonly Packet MountSpeed = Packet.SetStatic( new SpeedControl( 1 ) ); + public static readonly Packet Disable = Packet.SetStatic( new SpeedControl( 0 ) ); + + public SpeedControl( int speedControl ) + : base( 0xBF ) + { + EnsureCapacity( 3 ); + + m_Stream.Write( (short)0x26 ); + m_Stream.Write( (byte)speedControl ); + } + } + + public sealed class InvalidMapEnable : Packet + { + public InvalidMapEnable() : base( 0xC6, 1 ) + { + } + } + + public sealed class BondedStatus : Packet + { + public BondedStatus( int val1, Serial serial, int val2 ) : base( 0xBF ) + { + this.EnsureCapacity( 11 ); + + m_Stream.Write( (short) 0x19 ); + m_Stream.Write( (byte) val1 ); + m_Stream.Write( (int) serial ); + m_Stream.Write( (byte) val2 ); + } + } + + public sealed class ToggleSpecialAbility : Packet + { + public ToggleSpecialAbility( int abilityID, bool active ) + : base( 0xBF ) + { + EnsureCapacity( 7 ); + + m_Stream.Write( (short)0x25 ); + + m_Stream.Write( (short)abilityID ); + m_Stream.Write( (bool)active ); + } + } + + public sealed class DisplayItemListMenu : Packet + { + public DisplayItemListMenu( ItemListMenu menu ) : base( 0x7C ) + { + this.EnsureCapacity( 256 ); + + m_Stream.Write( (int) ((IMenu)menu).Serial ); + m_Stream.Write( (short) 0 ); + + string question = menu.Question; + + if ( question == null ) + m_Stream.Write( (byte) 0 ); + else + { + int questionLength = question.Length; + m_Stream.Write( (byte) questionLength ); + m_Stream.WriteAsciiFixed( question, questionLength ); + } + + ItemListEntry[] entries = menu.Entries; + + int entriesLength = (byte)entries.Length; + + m_Stream.Write( (byte) entriesLength ); + + for ( int i = 0; i < entriesLength; ++i ) + { + ItemListEntry e = entries[i]; + + m_Stream.Write( (ushort) e.ItemID ); + m_Stream.Write( (short) e.Hue ); + + string name = e.Name; + + if ( name == null ) + m_Stream.Write( (byte) 0 ); + else + { + int nameLength = name.Length; + m_Stream.Write( (byte) nameLength ); + m_Stream.WriteAsciiFixed( name, nameLength ); + } + } + } + } + + public sealed class DisplayQuestionMenu : Packet + { + public DisplayQuestionMenu( QuestionMenu menu ) : base( 0x7C ) + { + this.EnsureCapacity( 256 ); + + m_Stream.Write( (int) ((IMenu)menu).Serial ); + m_Stream.Write( (short) 0 ); + + string question = menu.Question; + + if ( question == null ) + m_Stream.Write( (byte) 0 ); + else + { + int questionLength = question.Length; + m_Stream.Write( (byte) questionLength ); + m_Stream.WriteAsciiFixed( question, questionLength ); + } + + string[] answers = menu.Answers; + + int answersLength = (byte)answers.Length; + + m_Stream.Write( (byte) answersLength ); + + for ( int i = 0; i < answersLength; ++i ) + { + m_Stream.Write( (int) 0 ); + + string answer = answers[i]; + + if ( answer == null ) + m_Stream.Write( (byte) 0 ); + else + { + int answerLength = answer.Length; + m_Stream.Write( (byte) answerLength ); + m_Stream.WriteAsciiFixed( answer, answerLength ); + } + } + } + } + + public sealed class GlobalLightLevel : Packet + { + private static GlobalLightLevel[] m_Cache = new GlobalLightLevel[0x100]; + + public static GlobalLightLevel Instantiate( int level ) + { + byte lvl = (byte)level; + GlobalLightLevel p = m_Cache[lvl]; + + if ( p == null ) + { + m_Cache[lvl] = p = new GlobalLightLevel( level ); + p.SetStatic(); + } + + return p; + } + + public GlobalLightLevel( int level ) : base( 0x4F, 2 ) + { + m_Stream.Write( (sbyte) level ); + } + } + + public sealed class PersonalLightLevel : Packet + { + public PersonalLightLevel( Mobile m ) : this( m, m.LightLevel ) + { + } + + public PersonalLightLevel( Mobile m, int level ) : base( 0x4E, 6 ) + { + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (sbyte) level ); + } + } + + public sealed class PersonalLightLevelZero : Packet + { + public PersonalLightLevelZero( Mobile m ) : base( 0x4E, 6 ) + { + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (sbyte) 0 ); + } + } + + public enum CMEFlags + { + None = 0x00, + Disabled = 0x01, + Colored = 0x20 + } + + public sealed class DisplayContextMenu : Packet + { + public DisplayContextMenu( ContextMenu menu ) : base( 0xBF ) + { + ContextMenuEntry[] entries = menu.Entries; + + int length = (byte) entries.Length; + + this.EnsureCapacity( 12 + (length * 8) ); + + m_Stream.Write( (short) 0x14 ); + m_Stream.Write( (short) 0x01 ); + + IEntity target = menu.Target as IEntity; + + m_Stream.Write( (int) ( target == null ? Serial.MinusOne : target.Serial ) ); + + m_Stream.Write( (byte) length ); + + Point3D p; + + if ( target is Mobile ) + p = target.Location; + else if ( target is Item ) + p = ((Item)target).GetWorldLocation(); + else + p = Point3D.Zero; + + for ( int i = 0; i < length; ++i ) + { + ContextMenuEntry e = entries[i]; + + m_Stream.Write( (short) i ); + m_Stream.Write( (ushort) e.Number ); + + int range = e.Range; + + if ( range == -1 ) + range = 18; + + CMEFlags flags = (e.Enabled && menu.From.InRange( p, range )) ? CMEFlags.None : CMEFlags.Disabled; + + int color = e.Color & 0xFFFF; + + if ( color != 0xFFFF ) + flags |= CMEFlags.Colored; + + flags |= e.Flags; + + m_Stream.Write( (short) flags ); + + if ( (flags & CMEFlags.Colored) != 0 ) + m_Stream.Write( (short) color ); + } + } + } + + public sealed class DisplayProfile : Packet + { + public DisplayProfile( bool realSerial, Mobile m, string header, string body, string footer ) : base( 0xB8 ) + { + if ( header == null ) + header = ""; + + if ( body == null ) + body = ""; + + if ( footer == null ) + footer = ""; + + EnsureCapacity( 12 + header.Length + (footer.Length * 2) + (body.Length * 2) ); + + m_Stream.Write( (int) (realSerial ? m.Serial : Serial.Zero) ); + m_Stream.WriteAsciiNull( header ); + m_Stream.WriteBigUniNull( footer ); + m_Stream.WriteBigUniNull( body ); + } + } + + public sealed class CloseGump : Packet + { + public CloseGump( int typeID, int buttonID ) : base( 0xBF ) + { + this.EnsureCapacity( 13 ); + + m_Stream.Write( (short) 0x04 ); + m_Stream.Write( (int) typeID ); + m_Stream.Write( (int) buttonID ); + } + } + + public sealed class EquipUpdate : Packet + { + public EquipUpdate( Item item ) : base( 0x2E, 15 ) + { + Serial parentSerial; + + if ( item.Parent is Mobile ) + { + parentSerial = ((Mobile)item.Parent).Serial; + } + else + { + Console.WriteLine( "Warning: EquipUpdate on item with !(parent is Mobile)" ); + parentSerial = Serial.Zero; + } + + int hue = item.Hue; + + if ( item.Parent is Mobile ) + { + Mobile mob = (Mobile)item.Parent; + + if ( mob.SolidHueOverride >= 0 ) + hue = mob.SolidHueOverride; + } + + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (short) item.ItemID ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) item.Layer ); + m_Stream.Write( (int) parentSerial ); + m_Stream.Write( (short) hue ); + } + } + + public sealed class WorldItem : Packet + { + public WorldItem( Item item ) : base( 0x1A ) + { + this.EnsureCapacity( 20 ); + + // 14 base length + // +2 - Amount + // +2 - Hue + // +1 - Flags + + uint serial = (uint)item.Serial.Value; + int itemID = item.ItemID & 0x3FFF; + int amount = item.Amount; + Point3D loc = item.Location; + int x = loc.m_X; + int y = loc.m_Y; + int hue = item.Hue; + int flags = item.GetPacketFlags(); + int direction = (int)item.Direction; + + if ( amount != 0 ) + { + serial |= 0x80000000; + } + else + { + serial &= 0x7FFFFFFF; + } + + m_Stream.Write( (uint) serial ); + + if ( item is BaseMulti ) + m_Stream.Write( (short) (itemID | 0x4000) ); + else + m_Stream.Write( (short) itemID ); + + if ( amount != 0 ) + { + m_Stream.Write( (short) amount ); + } + + x &= 0x7FFF; + + if ( direction != 0 ) + { + x |= 0x8000; + } + + m_Stream.Write( (short) x ); + + y &= 0x3FFF; + + if ( hue != 0 ) + { + y |= 0x8000; + } + + if ( flags != 0 ) + { + y |= 0x4000; + } + + m_Stream.Write( (short) y ); + + if ( direction != 0 ) + m_Stream.Write( (byte) direction ); + + m_Stream.Write( (sbyte) loc.m_Z ); + + if ( hue != 0 ) + m_Stream.Write( (ushort) hue ); + + if ( flags != 0 ) + m_Stream.Write( (byte) flags ); + } + } + + public sealed class WorldItemSA : Packet + { + public WorldItemSA( Item item ) : base( 0xF3, 24 ) + { + m_Stream.Write( (short) 0x1 ); + + int itemID = item.ItemID; + + if ( item is BaseMulti ) { + m_Stream.Write( (byte) 0x02 ); + + m_Stream.Write( (int) item.Serial ); + + itemID &= 0x3FFF; + + m_Stream.Write( (short) itemID ); + + m_Stream.Write( (byte) 0 ); + /*} else if ( ) { + m_Stream.Write( (byte) 0x01 ); + + m_Stream.Write( (int) item.Serial ); + + m_Stream.Write( (short) itemID ); + + m_Stream.Write( (byte) item.Direction );*/ + } else { + m_Stream.Write( (byte) 0x00 ); + + m_Stream.Write( (int) item.Serial ); + + itemID &= 0x7FFF; + + m_Stream.Write( (short) itemID ); + + m_Stream.Write( (byte) 0 ); + } + + int amount = item.Amount; + m_Stream.Write( (short) amount ); + m_Stream.Write( (short) amount ); + + Point3D loc = item.Location; + int x = loc.m_X & 0x7FFF; + int y = loc.m_Y & 0x3FFF; + m_Stream.Write( (short) x ); + m_Stream.Write( (short) y ); + m_Stream.Write( (sbyte) loc.m_Z ); + + m_Stream.Write( (byte) item.Light ); + m_Stream.Write( (short) item.Hue ); + m_Stream.Write( (byte) item.GetPacketFlags() ); + } + } + + public sealed class WorldItemHS : Packet + { + public WorldItemHS( Item item ) : base( 0xF3, 26 ) + { + m_Stream.Write( (short) 0x1 ); + + int itemID = item.ItemID; + + if ( item is BaseMulti ) { + m_Stream.Write( (byte) 0x02 ); + + m_Stream.Write( (int) item.Serial ); + + itemID &= 0x3FFF; + + m_Stream.Write( (ushort) itemID ); + + m_Stream.Write( (byte) 0 ); + /*} else if ( ) { + m_Stream.Write( (byte) 0x01 ); + + m_Stream.Write( (int) item.Serial ); + + m_Stream.Write( (ushort) itemID ); + + m_Stream.Write( (byte) item.Direction );*/ + } else { + m_Stream.Write( (byte) 0x00 ); + + m_Stream.Write( (int) item.Serial ); + + itemID &= 0xFFFF; + + m_Stream.Write( (ushort) itemID ); + + m_Stream.Write( (byte) 0 ); + } + + int amount = item.Amount; + m_Stream.Write( (short) amount ); + m_Stream.Write( (short) amount ); + + Point3D loc = item.Location; + int x = loc.m_X & 0x7FFF; + int y = loc.m_Y & 0x3FFF; + m_Stream.Write( (short) x ); + m_Stream.Write( (short) y ); + m_Stream.Write( (sbyte) loc.m_Z ); + + m_Stream.Write( (byte) item.Light ); + m_Stream.Write( (short) item.Hue ); + m_Stream.Write( (byte) item.GetPacketFlags() ); + + m_Stream.Write( (short) 0x00 ); // ?? + } + } + + public sealed class LiftRej : Packet + { + public LiftRej( LRReason reason ) : base( 0x27, 2 ) + { + m_Stream.Write( (byte) reason ); + } + } + + public sealed class LogoutAck : Packet + { + public LogoutAck() : base( 0xD1, 2 ) + { + m_Stream.Write( (byte) 0x01 ); + } + } + + public sealed class Weather : Packet + { + public Weather( int v1, int v2, int v3 ) : base( 0x65, 4 ) + { + m_Stream.Write( (byte) v1 ); + m_Stream.Write( (byte) v2 ); + m_Stream.Write( (byte) v3 ); + } + } + + public sealed class UnkD3 : Packet + { + public UnkD3( Mobile beholder, Mobile beheld ) : base( 0xD3 ) + { + this.EnsureCapacity( 256 ); + + //int + //short + //short + //short + //byte + //byte + //short + //byte + //byte + //short + //short + //short + //while ( int != 0 ) + //{ + //short + //byte + //short + //} + + m_Stream.Write( (int) beheld.Serial ); + m_Stream.Write( (short) beheld.Body ); + m_Stream.Write( (short) beheld.X ); + m_Stream.Write( (short) beheld.Y ); + m_Stream.Write( (sbyte) beheld.Z ); + m_Stream.Write( (byte) beheld.Direction ); + m_Stream.Write( (ushort) beheld.Hue ); + m_Stream.Write( (byte) beheld.GetPacketFlags() ); + m_Stream.Write( (byte) Notoriety.Compute( beholder, beheld ) ); + + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) 0 ); + + m_Stream.Write( (int) 0 ); + } + } + + public sealed class GQRequest : Packet + { + public GQRequest() : base( 0xC3 ) + { + this.EnsureCapacity( 256 ); + + m_Stream.Write( (int) 1 ); + m_Stream.Write( (int) 2 ); // ID + m_Stream.Write( (int) 3 ); // Customer ? (this) + m_Stream.Write( (int) 4 ); // Customer this (?) + m_Stream.Write( (int) 0 ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) 6 ); + m_Stream.Write( (byte) 'r' ); + m_Stream.Write( (byte) 'e' ); + m_Stream.Write( (byte) 'g' ); + m_Stream.Write( (byte) 'i' ); + m_Stream.Write( (byte) 'o' ); + m_Stream.Write( (byte) 'n' ); + m_Stream.Write( (int) 7 ); // Call time in seconds + m_Stream.Write( (short) 2 ); // Map (0=fel,1=tram,2=ilsh) + m_Stream.Write( (int) 8 ); // X + m_Stream.Write( (int) 9 ); // Y + m_Stream.Write( (int) 10 ); // Z + m_Stream.Write( (int) 11 ); // Volume + m_Stream.Write( (int) 12 ); // Rank + m_Stream.Write( (int) -1 ); + m_Stream.Write( (int) 1 ); // type + } + } + + /// + /// Causes the client to walk in a given direction. It does not send a movement request. + /// + public sealed class PlayerMove : Packet + { + public PlayerMove( Direction d ) : base( 0x97, 2 ) + { + m_Stream.Write( (byte) d ); + + // @4C63B0 + } + } + + /// + /// Displays a message "There are currently [count] available calls in the global queue.". + /// + public sealed class GQCount : Packet + { + public GQCount( int unk, int count ) : base( 0xCB, 7 ) + { + m_Stream.Write( (short) unk ); + m_Stream.Write( (int) count ); + } + } + + /// + /// Asks the client for it's version + /// + public sealed class ClientVersionReq : Packet + { + public ClientVersionReq() : base( 0xBD ) + { + this.EnsureCapacity( 3 ); + } + } + + /// + /// Asks the client for it's "assist version". (Perhaps for UOAssist?) + /// + public sealed class AssistVersionReq : Packet + { + public AssistVersionReq( int unk ) : base( 0xBE ) + { + this.EnsureCapacity( 7 ); + + m_Stream.Write( (int) unk ); + } + } + + public enum EffectType + { + Moving = 0x00, + Lightning = 0x01, + FixedXYZ = 0x02, + FixedFrom = 0x03 + } + + public class ParticleEffect : Packet + { + public ParticleEffect( EffectType type, Serial from, Serial to, int itemID, Point3D fromPoint, Point3D toPoint, int speed, int duration, bool fixedDirection, bool explode, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, Serial serial, int layer, int unknown ) : base( 0xC7, 49 ) + { + m_Stream.Write( (byte) type ); + m_Stream.Write( (int) from ); + m_Stream.Write( (int) to ); + m_Stream.Write( (short) itemID ); + m_Stream.Write( (short) fromPoint.m_X ); + m_Stream.Write( (short) fromPoint.m_Y ); + m_Stream.Write( (sbyte) fromPoint.m_Z ); + m_Stream.Write( (short) toPoint.m_X ); + m_Stream.Write( (short) toPoint.m_Y ); + m_Stream.Write( (sbyte) toPoint.m_Z ); + m_Stream.Write( (byte) speed ); + m_Stream.Write( (byte) duration ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (bool) fixedDirection ); + m_Stream.Write( (bool) explode ); + m_Stream.Write( (int) hue ); + m_Stream.Write( (int) renderMode ); + m_Stream.Write( (short) effect ); + m_Stream.Write( (short) explodeEffect ); + m_Stream.Write( (short) explodeSound ); + m_Stream.Write( (int) serial ); + m_Stream.Write( (byte) layer ); + m_Stream.Write( (short) unknown ); + } + + public ParticleEffect( EffectType type, Serial from, Serial to, int itemID, IPoint3D fromPoint, IPoint3D toPoint, int speed, int duration, bool fixedDirection, bool explode, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, Serial serial, int layer, int unknown ) : base( 0xC7, 49 ) + { + m_Stream.Write( (byte) type ); + m_Stream.Write( (int) from ); + m_Stream.Write( (int) to ); + m_Stream.Write( (short) itemID ); + m_Stream.Write( (short) fromPoint.X ); + m_Stream.Write( (short) fromPoint.Y ); + m_Stream.Write( (sbyte) fromPoint.Z ); + m_Stream.Write( (short) toPoint.X ); + m_Stream.Write( (short) toPoint.Y ); + m_Stream.Write( (sbyte) toPoint.Z ); + m_Stream.Write( (byte) speed ); + m_Stream.Write( (byte) duration ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (bool) fixedDirection ); + m_Stream.Write( (bool) explode ); + m_Stream.Write( (int) hue ); + m_Stream.Write( (int) renderMode ); + m_Stream.Write( (short) effect ); + m_Stream.Write( (short) explodeEffect ); + m_Stream.Write( (short) explodeSound ); + m_Stream.Write( (int) serial ); + m_Stream.Write( (byte) layer ); + m_Stream.Write( (short) unknown ); + } + } + + public class HuedEffect : Packet + { + public HuedEffect( EffectType type, Serial from, Serial to, int itemID, Point3D fromPoint, Point3D toPoint, int speed, int duration, bool fixedDirection, bool explode, int hue, int renderMode ) : base( 0xC0, 36 ) + { + m_Stream.Write( (byte) type ); + m_Stream.Write( (int) from ); + m_Stream.Write( (int) to ); + m_Stream.Write( (short) itemID ); + m_Stream.Write( (short) fromPoint.m_X ); + m_Stream.Write( (short) fromPoint.m_Y ); + m_Stream.Write( (sbyte) fromPoint.m_Z ); + m_Stream.Write( (short) toPoint.m_X ); + m_Stream.Write( (short) toPoint.m_Y ); + m_Stream.Write( (sbyte) toPoint.m_Z ); + m_Stream.Write( (byte) speed ); + m_Stream.Write( (byte) duration ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (bool) fixedDirection ); + m_Stream.Write( (bool) explode ); + m_Stream.Write( (int) hue ); + m_Stream.Write( (int) renderMode ); + } + + public HuedEffect( EffectType type, Serial from, Serial to, int itemID, IPoint3D fromPoint, IPoint3D toPoint, int speed, int duration, bool fixedDirection, bool explode, int hue, int renderMode ) : base( 0xC0, 36 ) + { + m_Stream.Write( (byte) type ); + m_Stream.Write( (int) from ); + m_Stream.Write( (int) to ); + m_Stream.Write( (short) itemID ); + m_Stream.Write( (short) fromPoint.X ); + m_Stream.Write( (short) fromPoint.Y ); + m_Stream.Write( (sbyte) fromPoint.Z ); + m_Stream.Write( (short) toPoint.X ); + m_Stream.Write( (short) toPoint.Y ); + m_Stream.Write( (sbyte) toPoint.Z ); + m_Stream.Write( (byte) speed ); + m_Stream.Write( (byte) duration ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (bool) fixedDirection ); + m_Stream.Write( (bool) explode ); + m_Stream.Write( (int) hue ); + m_Stream.Write( (int) renderMode ); + } + } + + public sealed class TargetParticleEffect : ParticleEffect + { + public TargetParticleEffect( IEntity e, int itemID, int speed, int duration, int hue, int renderMode, int effect, int layer, int unknown ) : base( EffectType.FixedFrom, e.Serial, Serial.Zero, itemID, e.Location, e.Location, speed, duration, true, false, hue, renderMode, effect, 1, 0, e.Serial, layer, unknown ) + { + } + } + + public sealed class TargetEffect : HuedEffect + { + public TargetEffect( IEntity e, int itemID, int speed, int duration, int hue, int renderMode ) : base( EffectType.FixedFrom, e.Serial, Serial.Zero, itemID, e.Location, e.Location, speed, duration, true, false, hue, renderMode ) + { + } + } + + public sealed class LocationParticleEffect : ParticleEffect + { + public LocationParticleEffect( IEntity e, int itemID, int speed, int duration, int hue, int renderMode, int effect, int unknown ) : base( EffectType.FixedXYZ, e.Serial, Serial.Zero, itemID, e.Location, e.Location, speed, duration, true, false, hue, renderMode, effect, 1, 0, e.Serial, 255, unknown ) + { + } + } + + public sealed class LocationEffect : HuedEffect + { + public LocationEffect( IPoint3D p, int itemID, int speed, int duration, int hue, int renderMode ) : base( EffectType.FixedXYZ, Serial.Zero, Serial.Zero, itemID, p, p, speed, duration, true, false, hue, renderMode ) + { + } + } + + public sealed class MovingParticleEffect : ParticleEffect + { + public MovingParticleEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode, int effect, int explodeEffect, int explodeSound, EffectLayer layer, int unknown ) : base( EffectType.Moving, from.Serial, to.Serial, itemID, from.Location, to.Location, speed, duration, fixedDirection, explodes, hue, renderMode, effect, explodeEffect, explodeSound, Serial.Zero, (int)layer, unknown ) + { + } + } + + public sealed class MovingEffect : HuedEffect + { + public MovingEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool explodes, int hue, int renderMode ) : base( EffectType.Moving, from.Serial, to.Serial, itemID, from.Location, to.Location, speed, duration, fixedDirection, explodes, hue, renderMode ) + { + } + } + + public enum DeleteResultType + { + PasswordInvalid, + CharNotExist, + CharBeingPlayed, + CharTooYoung, + CharQueued, + BadRequest + } + + public sealed class DeleteResult : Packet + { + public DeleteResult( DeleteResultType res ) : base( 0x85, 2 ) + { + m_Stream.Write( (byte) res ); + } + } + + /*public sealed class MovingEffect : Packet + { + public MovingEffect( IEntity from, IEntity to, int itemID, int speed, int duration, bool fixedDirection, bool turn, int hue, int renderMode ) : base( 0xC0, 36 ) + { + m_Stream.Write( (byte) 0x00 ); + m_Stream.Write( (int) from.Serial ); + m_Stream.Write( (int) to.Serial ); + m_Stream.Write( (short) itemID ); + m_Stream.Write( (short) from.Location.m_X ); + m_Stream.Write( (short) from.Location.m_Y ); + m_Stream.Write( (sbyte) from.Location.m_Z ); + m_Stream.Write( (short) to.Location.m_X ); + m_Stream.Write( (short) to.Location.m_Y ); + m_Stream.Write( (sbyte) to.Location.m_Z ); + m_Stream.Write( (byte) speed ); + m_Stream.Write( (byte) duration ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (bool) fixedDirection ); + m_Stream.Write( (bool) turn ); + m_Stream.Write( (int) hue ); + m_Stream.Write( (int) renderMode ); + } + }*/ + + /*public sealed class LocationEffect : Packet + { + public LocationEffect( IPoint3D p, int itemID, int duration, int hue, int renderMode ) : base( 0xC0, 36 ) + { + m_Stream.Write( (byte) 0x02 ); + m_Stream.Write( (int) Serial.Zero ); + m_Stream.Write( (int) Serial.Zero ); + m_Stream.Write( (short) itemID ); + m_Stream.Write( (short) p.X ); + m_Stream.Write( (short) p.Y ); + m_Stream.Write( (sbyte) p.Z ); + m_Stream.Write( (short) p.X ); + m_Stream.Write( (short) p.Y ); + m_Stream.Write( (sbyte) p.Z ); + m_Stream.Write( (byte) 10 ); + m_Stream.Write( (byte) duration ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) 1 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (int) hue ); + m_Stream.Write( (int) renderMode ); + } + }*/ + + public sealed class BoltEffect : Packet + { + public BoltEffect( IEntity target, int hue ) : base( 0xC0, 36 ) + { + m_Stream.Write( (byte) 0x01 ); // type + m_Stream.Write( (int) target.Serial ); + m_Stream.Write( (int) Serial.Zero ); + m_Stream.Write( (short) 0 ); // itemID + m_Stream.Write( (short) target.X ); + m_Stream.Write( (short) target.Y ); + m_Stream.Write( (sbyte) target.Z ); + m_Stream.Write( (short) target.X ); + m_Stream.Write( (short) target.Y ); + m_Stream.Write( (sbyte) target.Z ); + m_Stream.Write( (byte) 0 ); // speed + m_Stream.Write( (byte) 0 ); // duration + m_Stream.Write( (short) 0 ); // unk + m_Stream.Write( false ); // fixed direction + m_Stream.Write( false ); // explode + m_Stream.Write( (int) hue ); + m_Stream.Write( (int) 0 ); // render mode + } + } + + public sealed class DisplaySpellbook : Packet + { + public DisplaySpellbook( Item book ) : base( 0x24, 7 ) + { + m_Stream.Write( (int) book.Serial ); + m_Stream.Write( (short) -1 ); + } + } + + public sealed class DisplaySpellbookHS : Packet + { + public DisplaySpellbookHS( Item book ) : base( 0x24, 9 ) + { + m_Stream.Write( (int) book.Serial ); + m_Stream.Write( (short) -1 ); + m_Stream.Write( (short) 0x7D ); + } + } + + public sealed class NewSpellbookContent : Packet + { + public NewSpellbookContent( Item item, int graphic, int offset, ulong content ) : base( 0xBF ) + { + EnsureCapacity( 23 ); + + m_Stream.Write( (short) 0x1B ); + m_Stream.Write( (short) 0x01 ); + + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (short) graphic ); + m_Stream.Write( (short) offset ); + + for ( int i = 0; i < 8; ++i ) + m_Stream.Write( (byte)(content >> (i * 8)) ); + } + } + + public sealed class SpellbookContent : Packet + { + public SpellbookContent( int count, int offset, ulong content, Item item ) : base( 0x3C ) + { + this.EnsureCapacity( 5 + (count * 19) ); + + int written = 0; + + m_Stream.Write( (ushort) 0 ); + + ulong mask = 1; + + for ( int i = 0; i < 64; ++i, mask <<= 1 ) + { + if ( (content & mask) != 0 ) + { + m_Stream.Write( (int) (0x7FFFFFFF - i) ); + m_Stream.Write( (ushort) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (ushort) (i + offset) ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (short) 0 ); + + ++written; + } + } + + m_Stream.Seek( 3, SeekOrigin.Begin ); + m_Stream.Write( (ushort) written ); + } + } + + public sealed class SpellbookContent6017 : Packet + { + public SpellbookContent6017( int count, int offset, ulong content, Item item ) : base( 0x3C ) + { + this.EnsureCapacity( 5 + (count * 20) ); + + int written = 0; + + m_Stream.Write( (ushort) 0 ); + + ulong mask = 1; + + for ( int i = 0; i < 64; ++i, mask <<= 1 ) + { + if ( (content & mask) != 0 ) + { + m_Stream.Write( (int) (0x7FFFFFFF - i) ); + m_Stream.Write( (ushort) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (ushort) (i + offset) ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (byte) 0 ); // Grid Location? + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (short) 0 ); + + ++written; + } + } + + m_Stream.Seek( 3, SeekOrigin.Begin ); + m_Stream.Write( (ushort) written ); + } + } + + public sealed class ContainerDisplay : Packet + { + public ContainerDisplay( Container c ) : base( 0x24, 7 ) + { + m_Stream.Write( (int) c.Serial ); + m_Stream.Write( (short) c.GumpID ); + } + } + + public sealed class ContainerDisplayHS : Packet + { + public ContainerDisplayHS( Container c ) : base( 0x24, 9 ) + { + m_Stream.Write( (int) c.Serial ); + m_Stream.Write( (short) c.GumpID ); + m_Stream.Write( (short) 0x7D ); + } + } + + public sealed class ContainerContentUpdate : Packet + { + public ContainerContentUpdate( Item item ) : base( 0x25, 20 ) + { + Serial parentSerial; + + if ( item.Parent is Item ) + { + parentSerial = ((Item)item.Parent).Serial; + } + else + { + Console.WriteLine( "Warning: ContainerContentUpdate on item with !(parent is Item)" ); + parentSerial = Serial.Zero; + } + + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (ushort) item.ItemID ); + m_Stream.Write( (byte) 0 ); // signed, itemID offset + m_Stream.Write( (ushort) item.Amount ); + m_Stream.Write( (short) item.X ); + m_Stream.Write( (short) item.Y ); + m_Stream.Write( (int) parentSerial ); + m_Stream.Write( (ushort) item.Hue ); + } + } + + public sealed class ContainerContentUpdate6017 : Packet + { + public ContainerContentUpdate6017( Item item ) : base( 0x25, 21 ) + { + Serial parentSerial; + + if ( item.Parent is Item ) + { + parentSerial = ((Item)item.Parent).Serial; + } + else + { + Console.WriteLine( "Warning: ContainerContentUpdate on item with !(parent is Item)" ); + parentSerial = Serial.Zero; + } + + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (ushort) item.ItemID ); + m_Stream.Write( (byte) 0 ); // signed, itemID offset + m_Stream.Write( (ushort) item.Amount ); + m_Stream.Write( (short) item.X ); + m_Stream.Write( (short) item.Y ); + m_Stream.Write( (byte) 0 ); // Grid Location? + m_Stream.Write( (int) parentSerial ); + m_Stream.Write( (ushort) item.Hue ); + } + } + + public sealed class ContainerContent : Packet + { + public ContainerContent( Mobile beholder, Item beheld ) : base( 0x3C ) + { + List items = beheld.Items; + int count = items.Count; + + this.EnsureCapacity( 5 + (count * 19) ); + + long pos = m_Stream.Position; + + int written = 0; + + m_Stream.Write( (ushort) 0 ); + + for ( int i = 0; i < count; ++i ) + { + Item child = items[i]; + + if ( !child.Deleted && beholder.CanSee( child ) ) + { + Point3D loc = child.Location; + + m_Stream.Write( (int) child.Serial ); + m_Stream.Write( (ushort) child.ItemID ); + m_Stream.Write( (byte) 0 ); // signed, itemID offset + m_Stream.Write( (ushort) child.Amount ); + m_Stream.Write( (short) loc.m_X ); + m_Stream.Write( (short) loc.m_Y ); + m_Stream.Write( (int) beheld.Serial ); + m_Stream.Write( (ushort) child.Hue ); + + ++written; + } + } + + m_Stream.Seek( pos, SeekOrigin.Begin ); + m_Stream.Write( (ushort) written ); + } + } + + public sealed class ContainerContent6017 : Packet + { + public ContainerContent6017( Mobile beholder, Item beheld ) : base( 0x3C ) + { + List items = beheld.Items; + int count = items.Count; + + this.EnsureCapacity( 5 + (count * 20) ); + + long pos = m_Stream.Position; + + int written = 0; + + m_Stream.Write( (ushort) 0 ); + + for ( int i = 0; i < count; ++i ) + { + Item child = items[i]; + + if ( !child.Deleted && beholder.CanSee( child ) ) + { + Point3D loc = child.Location; + + m_Stream.Write( (int) child.Serial ); + m_Stream.Write( (ushort) child.ItemID ); + m_Stream.Write( (byte) 0 ); // signed, itemID offset + m_Stream.Write( (ushort) child.Amount ); + m_Stream.Write( (short) loc.m_X ); + m_Stream.Write( (short) loc.m_Y ); + m_Stream.Write( (byte) 0 ); // Grid Location? + m_Stream.Write( (int) beheld.Serial ); + m_Stream.Write( (ushort) child.Hue ); + + ++written; + } + } + + m_Stream.Seek( pos, SeekOrigin.Begin ); + m_Stream.Write( (ushort) written ); + } + } + + public sealed class SetWarMode : Packet + { + public static readonly Packet InWarMode = Packet.SetStatic( new SetWarMode( true ) ); + public static readonly Packet InPeaceMode = Packet.SetStatic( new SetWarMode( false ) ); + + public static Packet Instantiate( bool mode ) + { + return ( mode ? InWarMode : InPeaceMode ); + } + + public SetWarMode( bool mode ) : base( 0x72, 5 ) + { + m_Stream.Write( mode ); + m_Stream.Write( (byte) 0x00 ); + m_Stream.Write( (byte) 0x32 ); + m_Stream.Write( (byte) 0x00 ); + //m_Stream.Fill(); + } + } + + public sealed class Swing : Packet + { + public Swing( int flag, Mobile attacker, Mobile defender ) : base( 0x2F, 10 ) + { + m_Stream.Write( (byte) flag ); + m_Stream.Write( (int) attacker.Serial ); + m_Stream.Write( (int) defender.Serial ); + } + } + + public sealed class NullFastwalkStack : Packet + { + public NullFastwalkStack() : base( 0xBF ) + { + EnsureCapacity(256); + m_Stream.Write( (short) 0x1 ); + m_Stream.Write( (int) 0x0 ); + m_Stream.Write( (int) 0x0 ); + m_Stream.Write( (int) 0x0 ); + m_Stream.Write( (int) 0x0 ); + m_Stream.Write( (int) 0x0 ); + m_Stream.Write( (int) 0x0 ); + } + } + + public sealed class RemoveItem : Packet + { + public RemoveItem( Item item ) : base( 0x1D, 5 ) + { + m_Stream.Write( (int) item.Serial ); + } + } + + public sealed class RemoveMobile : Packet + { + public RemoveMobile( Mobile m ) : base( 0x1D, 5 ) + { + m_Stream.Write( (int) m.Serial ); + } + } + + public sealed class ServerChange : Packet + { + public ServerChange( Mobile m, Map map ) : base( 0x76, 16 ) + { + m_Stream.Write( (short) m.X ); + m_Stream.Write( (short) m.Y ); + m_Stream.Write( (short) m.Z ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) map.Width ); + m_Stream.Write( (short) map.Height ); + } + } + + public sealed class SkillUpdate : Packet + { + public SkillUpdate( Skills skills ) : base( 0x3A ) + { + this.EnsureCapacity( 6 + (skills.Length * 9) ); + + m_Stream.Write( (byte) 0x02 ); // type: absolute, capped + + for ( int i = 0; i < skills.Length; ++i ) + { + Skill s = skills[i]; + + double v = s.NonRacialValue; + int uv = (int)(v * 10); + + if ( uv < 0 ) + uv = 0; + else if ( uv >= 0x10000 ) + uv = 0xFFFF; + + m_Stream.Write( (ushort) (s.Info.SkillID + 1) ); + m_Stream.Write( (ushort) uv ); + m_Stream.Write( (ushort) s.BaseFixedPoint ); + m_Stream.Write( (byte) s.Lock ); + m_Stream.Write( (ushort) s.CapFixedPoint ); + } + + m_Stream.Write( (short) 0 ); // terminate + } + } + + public sealed class Sequence : Packet + { + public Sequence( int num ) : base( 0x7B, 2 ) + { + m_Stream.Write( (byte)num ); + } + } + + public sealed class SkillChange : Packet + { + public SkillChange( Skill skill ) : base( 0x3A ) + { + this.EnsureCapacity( 13 ); + + double v = skill.NonRacialValue; + int uv = (int)(v * 10); + + if ( uv < 0 ) + uv = 0; + else if ( uv >= 0x10000 ) + uv = 0xFFFF; + + m_Stream.Write( (byte) 0xDF ); // type: delta, capped + m_Stream.Write( (ushort) skill.Info.SkillID ); + m_Stream.Write( (ushort) uv ); + m_Stream.Write( (ushort) skill.BaseFixedPoint ); + m_Stream.Write( (byte) skill.Lock ); + m_Stream.Write( (ushort) skill.CapFixedPoint ); + + /*m_Stream.Write( (short) skill.Info.SkillID ); + m_Stream.Write( (short) (skill.Value * 10.0) ); + m_Stream.Write( (short) (skill.Base * 10.0) ); + m_Stream.Write( (byte) skill.Lock ); + m_Stream.Write( (short) skill.CapFixedPoint );*/ + } + } + + public sealed class LaunchBrowser : Packet + { + public LaunchBrowser( string url ) : base( 0xA5 ) + { + if ( url == null ) url = ""; + + this.EnsureCapacity( 4 + url.Length ); + + m_Stream.WriteAsciiNull( url ); + } + } + + public sealed class MessageLocalized : Packet + { + private static MessageLocalized[] m_Cache_IntLoc = new MessageLocalized[15000]; + private static MessageLocalized[] m_Cache_CliLoc = new MessageLocalized[100000]; + private static MessageLocalized[] m_Cache_CliLocCmp = new MessageLocalized[5000]; + + public static MessageLocalized InstantiateGeneric( int number ) + { + MessageLocalized[] cache = null; + int index = 0; + + if ( number >= 3000000 ) + { + cache = m_Cache_IntLoc; + index = number - 3000000; + } + else if ( number >= 1000000 ) + { + cache = m_Cache_CliLoc; + index = number - 1000000; + } + else if ( number >= 500000 ) + { + cache = m_Cache_CliLocCmp; + index = number - 500000; + } + + MessageLocalized p; + + if ( cache != null && index >= 0 && index < cache.Length ) + { + p = cache[index]; + + if ( p == null ) + { + cache[index] = p = new MessageLocalized( Serial.MinusOne, -1, MessageType.Regular, 0x3B2, 3, number, "System", "" ); + p.SetStatic(); + } + } + else + { + p = new MessageLocalized( Serial.MinusOne, -1, MessageType.Regular, 0x3B2, 3, number, "System", "" ); + } + + return p; + } + + public MessageLocalized( Serial serial, int graphic, MessageType type, int hue, int font, int number, string name, string args ) : base( 0xC1 ) + { + if ( name == null ) name = ""; + if ( args == null ) args = ""; + + if ( hue == 0 ) + hue = 0x3B2; + + this.EnsureCapacity( 50 + (args.Length * 2) ); + + m_Stream.Write( (int) serial ); + m_Stream.Write( (short) graphic ); + m_Stream.Write( (byte) type ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (short) font ); + m_Stream.Write( (int) number ); + m_Stream.WriteAsciiFixed( name, 30 ); + m_Stream.WriteLittleUniNull( args ); + } + } + + public sealed class MobileMoving : Packet + { + public MobileMoving( Mobile m, int noto ) : base( 0x77, 17 ) + { + Point3D loc = m.Location; + + int hue = m.Hue; + + if ( m.SolidHueOverride >= 0 ) + hue = m.SolidHueOverride; + + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) m.Body ); + m_Stream.Write( (short) loc.m_X ); + m_Stream.Write( (short) loc.m_Y ); + m_Stream.Write( (sbyte) loc.m_Z ); + m_Stream.Write( (byte) m.Direction ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (byte) m.GetPacketFlags() ); + m_Stream.Write( (byte) noto ); + } + } + + // Pre-7.0.0.0 Mobile Moving + public sealed class MobileMovingOld : Packet + { + public MobileMovingOld( Mobile m, int noto ) : base( 0x77, 17 ) + { + Point3D loc = m.Location; + + int hue = m.Hue; + + if ( m.SolidHueOverride >= 0 ) + hue = m.SolidHueOverride; + + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) m.Body ); + m_Stream.Write( (short) loc.m_X ); + m_Stream.Write( (short) loc.m_Y ); + m_Stream.Write( (sbyte) loc.m_Z ); + m_Stream.Write( (byte) m.Direction ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (byte) m.GetOldPacketFlags() ); + m_Stream.Write( (byte) noto ); + } + } + + public sealed class MultiTargetReqHS : Packet + { + public MultiTargetReqHS( MultiTarget t ) : base( 0x99, 30 ) + { + m_Stream.Write( (bool) t.AllowGround ); + m_Stream.Write( (int) t.TargetID ); + m_Stream.Write( (byte) t.Flags ); + + m_Stream.Fill(); + + m_Stream.Seek( 18, SeekOrigin.Begin ); + m_Stream.Write( (short) t.MultiID ); + m_Stream.Write( (short) t.Offset.X ); + m_Stream.Write( (short) t.Offset.Y ); + m_Stream.Write( (short) t.Offset.Z ); + } + } + + public sealed class MultiTargetReq : Packet + { + public MultiTargetReq( MultiTarget t ) : base( 0x99, 26 ) + { + m_Stream.Write( (bool) t.AllowGround ); + m_Stream.Write( (int) t.TargetID ); + m_Stream.Write( (byte) t.Flags ); + + m_Stream.Fill(); + + m_Stream.Seek( 18, SeekOrigin.Begin ); + m_Stream.Write( (short) t.MultiID ); + m_Stream.Write( (short) t.Offset.X ); + m_Stream.Write( (short) t.Offset.Y ); + m_Stream.Write( (short) t.Offset.Z ); + } + } + + public sealed class CancelTarget : Packet + { + public static readonly Packet Instance = Packet.SetStatic( new CancelTarget() ); + + public CancelTarget() : base( 0x6C, 19 ) + { + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (int) 0 ); + m_Stream.Write( (byte) 3 ); + m_Stream.Fill(); + } + } + + public sealed class TargetReq : Packet + { + public TargetReq( Target t ) : base( 0x6C, 19 ) + { + m_Stream.Write( (bool) t.AllowGround ); + m_Stream.Write( (int) t.TargetID ); + m_Stream.Write( (byte) t.Flags ); + m_Stream.Fill(); + } + } + + public sealed class DragEffect : Packet + { + public DragEffect( IEntity src, IEntity trg, int itemID, int hue, int amount ) : base( 0x23, 26 ) + { + m_Stream.Write( (short) itemID ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (short) amount ); + m_Stream.Write( (int) src.Serial ); + m_Stream.Write( (short) src.X ); + m_Stream.Write( (short) src.Y ); + m_Stream.Write( (sbyte) src.Z ); + m_Stream.Write( (int) trg.Serial ); + m_Stream.Write( (short) trg.X ); + m_Stream.Write( (short) trg.Y ); + m_Stream.Write( (sbyte) trg.Z ); + } + } + + public interface IGumpWriter + { + int TextEntries { get; set; } + int Switches { get; set; } + + void AppendLayout( bool val ); + void AppendLayout( int val ); + void AppendLayoutNS( int val ); + void AppendLayout( string text ); + void AppendLayout( byte[] buffer ); + void WriteStrings( List strings ); + void Flush(); + } + + public sealed class DisplayGumpPacked : Packet, IGumpWriter + { + private int m_TextEntries, m_Switches; + + public int TextEntries { get { return m_TextEntries; } set { m_TextEntries = value; } } + public int Switches { get { return m_Switches; } set { m_Switches = value; } } + + private Gump m_Gump; + + private PacketWriter m_Layout; + private PacketWriter m_Strings; + + private int m_StringCount; + + public DisplayGumpPacked( Gump gump ) + : base( 0xDD ) + { + m_Gump = gump; + + m_Layout = PacketWriter.CreateInstance( 8192 ); + m_Strings = PacketWriter.CreateInstance( 8192 ); + } + + private static byte[] m_True = Gump.StringToBuffer( " 1" ); + private static byte[] m_False = Gump.StringToBuffer( " 0" ); + + private static byte[] m_BeginTextSeparator = Gump.StringToBuffer( " @" ); + private static byte[] m_EndTextSeparator = Gump.StringToBuffer( "@" ); + + private static byte[] m_Buffer = new byte[48]; + + static DisplayGumpPacked() + { + m_Buffer[0] = (byte)' '; + } + + public void AppendLayout( bool val ) + { + AppendLayout( val ? m_True : m_False ); + } + + public void AppendLayout( int val ) + { + string toString = val.ToString(); + int bytes = System.Text.Encoding.ASCII.GetBytes( toString, 0, toString.Length, m_Buffer, 1 ) + 1; + + m_Layout.Write( m_Buffer, 0, bytes ); + } + + public void AppendLayoutNS( int val ) + { + string toString = val.ToString(); + int bytes = System.Text.Encoding.ASCII.GetBytes( toString, 0, toString.Length, m_Buffer, 1 ); + + m_Layout.Write( m_Buffer, 1, bytes ); + } + + public void AppendLayout( string text ) + { + AppendLayout( m_BeginTextSeparator ); + + m_Layout.WriteAsciiFixed( text, text.Length ); + + AppendLayout( m_EndTextSeparator ); + } + + public void AppendLayout( byte[] buffer ) + { + m_Layout.Write( buffer, 0, buffer.Length ); + } + + public void WriteStrings( List strings ) + { + m_StringCount = strings.Count; + + for ( int i = 0; i < strings.Count; ++i ) + { + string v = strings[i]; + + if ( v == null ) + v = String.Empty; + + m_Strings.Write( (ushort) v.Length ); + m_Strings.WriteBigUniFixed( v, v.Length ); + } + } + + public void Flush() + { + EnsureCapacity( 28 + (int) m_Layout.Length + (int) m_Strings.Length ); + + m_Stream.Write( (int) m_Gump.Serial ); + m_Stream.Write( (int) m_Gump.TypeID ); + m_Stream.Write( (int) m_Gump.X ); + m_Stream.Write( (int) m_Gump.Y ); + + // Note: layout MUST be null terminated (don't listen to krrios) + m_Layout.Write( (byte) 0 ); + WritePacked( m_Layout ); + + m_Stream.Write( (int) m_StringCount ); + + WritePacked( m_Strings ); + + PacketWriter.ReleaseInstance( m_Layout ); + PacketWriter.ReleaseInstance( m_Strings ); + } + + private static byte[] m_PackBuffer; + + private void WritePacked( PacketWriter src ) + { + byte[] buffer = src.UnderlyingStream.GetBuffer(); + int length = (int) src.Length; + + if ( length == 0 ) + { + m_Stream.Write( (int) 0 ); + return; + } + + int wantLength = 1 + ( ( buffer.Length * 1024 ) / 1000 ); + + wantLength += 4095; + wantLength &= ~4095; + + if ( m_PackBuffer == null || m_PackBuffer.Length < wantLength ) + m_PackBuffer = new byte[wantLength]; + + int packLength = m_PackBuffer.Length; + + Compression.Pack( m_PackBuffer, ref packLength, buffer, length, ZLibQuality.Default ); + + m_Stream.Write( (int) ( 4 + packLength ) ); + m_Stream.Write( (int) length ); + m_Stream.Write( m_PackBuffer, 0, packLength ); + } + } + + public sealed class DisplayGumpFast : Packet, IGumpWriter + { + private int m_TextEntries, m_Switches; + + private int m_LayoutLength; + + public int TextEntries{ get{ return m_TextEntries; } set{ m_TextEntries = value; } } + public int Switches{ get{ return m_Switches; } set{ m_Switches = value; } } + + public DisplayGumpFast( Gump g ) : base( 0xB0 ) + { + EnsureCapacity( 4096 ); + + m_Stream.Write( (int) g.Serial ); + m_Stream.Write( (int) g.TypeID ); + m_Stream.Write( (int) g.X ); + m_Stream.Write( (int) g.Y ); + m_Stream.Write( (ushort) 0xFFFF ); + } + + private static byte[] m_True = Gump.StringToBuffer( " 1" ); + private static byte[] m_False = Gump.StringToBuffer( " 0" ); + + private static byte[] m_BeginTextSeparator = Gump.StringToBuffer( " @" ); + private static byte[] m_EndTextSeparator = Gump.StringToBuffer( "@" ); + + private static byte[] m_Buffer = new byte[48]; + + static DisplayGumpFast() + { + m_Buffer[0] = (byte)' '; + } + + public void AppendLayout( bool val ) + { + AppendLayout( val ? m_True : m_False ); + } + + public void AppendLayout( int val ) + { + string toString = val.ToString(); + int bytes = System.Text.Encoding.ASCII.GetBytes( toString, 0, toString.Length, m_Buffer, 1 ) + 1; + + m_Stream.Write( m_Buffer, 0, bytes ); + m_LayoutLength += bytes; + } + + public void AppendLayoutNS( int val ) + { + string toString = val.ToString(); + int bytes = System.Text.Encoding.ASCII.GetBytes( toString, 0, toString.Length, m_Buffer, 1 ); + + m_Stream.Write( m_Buffer, 1, bytes ); + m_LayoutLength += bytes; + } + + public void AppendLayout( string text ) + { + AppendLayout( m_BeginTextSeparator ); + + int length = text.Length; + m_Stream.WriteAsciiFixed( text, length ); + m_LayoutLength += length; + + AppendLayout( m_EndTextSeparator ); + } + + public void AppendLayout( byte[] buffer ) + { + int length = buffer.Length; + m_Stream.Write( buffer, 0, length ); + m_LayoutLength += length; + } + + public void WriteStrings( List text ) + { + m_Stream.Seek( 19, SeekOrigin.Begin ); + m_Stream.Write( (ushort) m_LayoutLength ); + m_Stream.Seek( 0, SeekOrigin.End ); + + m_Stream.Write( (ushort) text.Count ); + + for ( int i = 0; i < text.Count; ++i ) + { + string v = text[i]; + + if ( v == null ) + v = String.Empty; + + int length = (ushort) v.Length; + + m_Stream.Write( (ushort) length ); + m_Stream.WriteBigUniFixed( v, length ); + } + } + + public void Flush() + { + } + } + + public sealed class DisplayGump : Packet + { + public DisplayGump( Gump g, string layout, string[] text ) : base( 0xB0 ) + { + if ( layout == null ) layout = ""; + + this.EnsureCapacity( 256 ); + + m_Stream.Write( (int) g.Serial ); + m_Stream.Write( (int) g.TypeID ); + m_Stream.Write( (int) g.X ); + m_Stream.Write( (int) g.Y ); + m_Stream.Write( (ushort) (layout.Length + 1) ); + m_Stream.WriteAsciiNull( layout ); + + m_Stream.Write( (ushort) text.Length ); + + for ( int i = 0; i < text.Length; ++i ) + { + string v = text[i]; + + if ( v == null ) v = ""; + + int length = (ushort) v.Length; + + m_Stream.Write( (ushort) length ); + m_Stream.WriteBigUniFixed( v, length ); + } + } + } + + public sealed class DisplayPaperdoll : Packet + { + public DisplayPaperdoll( Mobile m, string text, bool canLift ) : base( 0x88, 66 ) + { + byte flags = 0x00; + + if ( m.Warmode ) + flags |= 0x01; + + if ( canLift ) + flags |= 0x02; + + m_Stream.Write( (int) m.Serial ); + m_Stream.WriteAsciiFixed( text, 60 ); + m_Stream.Write( (byte) flags ); + } + } + + public sealed class PopupMessage : Packet + { + public PopupMessage( PMMessage msg ) : base( 0x53, 2 ) + { + m_Stream.Write( (byte)msg ); + } + } + + public sealed class PlaySound : Packet + { + public PlaySound( int soundID, IPoint3D target ) : base( 0x54, 12 ) + { + m_Stream.Write( (byte) 1 ); // flags + m_Stream.Write( (short) soundID ); + m_Stream.Write( (short) 0 ); // volume + m_Stream.Write( (short) target.X ); + m_Stream.Write( (short) target.Y ); + m_Stream.Write( (short) target.Z ); + } + } + + public sealed class PlayMusic : Packet + { + public static readonly Packet InvalidInstance = Packet.SetStatic( new PlayMusic( MusicName.Invalid ) ); + + private static Packet[] m_Instances = new Packet[60]; + + public static Packet GetInstance( MusicName name ) + { + if ( name == MusicName.Invalid ) + return InvalidInstance; + + int v = (int)name; + Packet p; + + if ( v >= 0 && v < m_Instances.Length ) + { + p = m_Instances[v]; + + if ( p == null ) + m_Instances[v] = p = Packet.SetStatic( new PlayMusic( name ) ); + } + else + { + p = new PlayMusic( name ); + } + + return p; + } + + public PlayMusic( MusicName name ) : base( 0x6D, 3 ) + { + m_Stream.Write( (short)name ); + } + } + + public sealed class ScrollMessage : Packet + { + public ScrollMessage( int type, int tip, string text ) : base( 0xA6 ) + { + if ( text == null ) text = ""; + + this.EnsureCapacity( 10 + text.Length ); + + m_Stream.Write( (byte) type ); + m_Stream.Write( (int) tip ); + m_Stream.Write( (ushort) text.Length ); + m_Stream.WriteAsciiFixed( text, text.Length ); + } + } + + public sealed class CurrentTime : Packet + { + public CurrentTime() : base( 0x5B, 4 ) + { + DateTime now = DateTime.Now; + + m_Stream.Write( (byte) now.Hour ); + m_Stream.Write( (byte) now.Minute ); + m_Stream.Write( (byte) now.Second ); + } + } + + public sealed class MapChange : Packet + { + public MapChange( Mobile m ) : base( 0xBF ) + { + this.EnsureCapacity( 6 ); + + m_Stream.Write( (short) 0x08 ); + m_Stream.Write( (byte) (m.Map == null ? 0 : m.Map.MapID) ); + } + } + + public sealed class SeasonChange : Packet + { + private static SeasonChange[][] m_Cache = new SeasonChange[5][] + { + new SeasonChange[2], + new SeasonChange[2], + new SeasonChange[2], + new SeasonChange[2], + new SeasonChange[2] + }; + + public static SeasonChange Instantiate( int season ) + { + return Instantiate( season, true ); + } + + public static SeasonChange Instantiate( int season, bool playSound ) + { + if ( season >= 0 && season < m_Cache.Length ) + { + int idx = playSound ? 1 : 0; + + SeasonChange p = m_Cache[season][idx]; + + if ( p == null ) + { + m_Cache[season][idx] = p = new SeasonChange( season, playSound ); + p.SetStatic(); + } + + return p; + } + else + { + return new SeasonChange( season, playSound ); + } + } + + public SeasonChange( int season ) : this( season, true ) + { + } + + public SeasonChange( int season, bool playSound ) : base( 0xBC, 3 ) + { + m_Stream.Write( (byte) season ); + m_Stream.Write( (bool) playSound ); + } + } + + public sealed class SupportedFeatures : Packet + { + private static FeatureFlags m_AdditionalFlags; + + public static FeatureFlags Value{ get{ return m_AdditionalFlags; } set{ m_AdditionalFlags = value; } } + + public static SupportedFeatures Instantiate( NetState ns ) + { + return new SupportedFeatures( ns ); + } + + public SupportedFeatures( NetState ns ) : base( 0xB9, ns.ExtendedSupportedFeatures ? 5 : 3 ) + { + FeatureFlags flags = ExpansionInfo.CurrentExpansion.SupportedFeatures; + + flags |= m_AdditionalFlags; + + IAccount acct = ns.Account as IAccount; + + if ( acct != null && acct.Limit >= 6 ) + { + flags |= FeatureFlags.Unk7; + flags &= ~FeatureFlags.UOTD; + + if ( acct.Limit > 6 ) + flags |= FeatureFlags.SeventhCharacterSlot; + else + flags |= FeatureFlags.SixthCharacterSlot; + } + + if ( ns.ExtendedSupportedFeatures ) { + m_Stream.Write( (uint) flags ); + } else { + m_Stream.Write( (ushort) flags ); + } + } + } + + public static class AttributeNormalizer + { + private static int m_Maximum = 25; + private static bool m_Enabled = true; + + public static int Maximum + { + get{ return m_Maximum; } + set{ m_Maximum = value; } + } + + public static bool Enabled + { + get{ return m_Enabled; } + set{ m_Enabled = value; } + } + + public static void Write( PacketWriter stream, int cur, int max ) + { + if ( m_Enabled && max != 0 ) + { + stream.Write( (short) m_Maximum ); + stream.Write( (short) ((cur * m_Maximum) / max) ); + } + else + { + stream.Write( (short) max ); + stream.Write( (short) cur ); + } + } + + public static void WriteReverse( PacketWriter stream, int cur, int max ) + { + if ( m_Enabled && max != 0 ) + { + stream.Write( (short) ((cur * m_Maximum) / max) ); + stream.Write( (short) m_Maximum ); + } + else + { + stream.Write( (short) cur ); + stream.Write( (short) max ); + } + } + } + + public sealed class MobileHits : Packet + { + public MobileHits( Mobile m ) : base( 0xA1, 9 ) + { + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) m.HitsMax ); + m_Stream.Write( (short) m.Hits ); + } + } + + public sealed class MobileHitsN : Packet + { + public MobileHitsN( Mobile m ) : base( 0xA1, 9 ) + { + m_Stream.Write( (int) m.Serial ); + AttributeNormalizer.Write( m_Stream, m.Hits, m.HitsMax ); + } + } + + public sealed class MobileMana : Packet + { + public MobileMana( Mobile m ) : base( 0xA2, 9 ) + { + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) m.ManaMax ); + m_Stream.Write( (short) m.Mana ); + } + } + + public sealed class MobileManaN : Packet + { + public MobileManaN( Mobile m ) : base( 0xA2, 9 ) + { + m_Stream.Write( (int) m.Serial ); + AttributeNormalizer.Write( m_Stream, m.Mana, m.ManaMax ); + } + } + + public sealed class MobileStam : Packet + { + public MobileStam( Mobile m ) : base( 0xA3, 9 ) + { + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) m.StamMax ); + m_Stream.Write( (short) m.Stam ); + } + } + + public sealed class MobileStamN : Packet + { + public MobileStamN( Mobile m ) : base( 0xA3, 9 ) + { + m_Stream.Write( (int) m.Serial ); + AttributeNormalizer.Write( m_Stream, m.Stam, m.StamMax ); + } + } + + public sealed class MobileAttributes : Packet + { + public MobileAttributes( Mobile m ) : base( 0x2D, 17 ) + { + m_Stream.Write( m.Serial ); + + m_Stream.Write( (short) m.HitsMax ); + m_Stream.Write( (short) m.Hits ); + + m_Stream.Write( (short) m.ManaMax ); + m_Stream.Write( (short) m.Mana ); + + m_Stream.Write( (short) m.StamMax ); + m_Stream.Write( (short) m.Stam ); + } + } + + public sealed class MobileAttributesN : Packet + { + public MobileAttributesN( Mobile m ) : base( 0x2D, 17 ) + { + m_Stream.Write( m.Serial ); + + AttributeNormalizer.Write( m_Stream, m.Hits, m.HitsMax ); + AttributeNormalizer.Write( m_Stream, m.Mana, m.ManaMax ); + AttributeNormalizer.Write( m_Stream, m.Stam, m.StamMax ); + } + } + + public sealed class PathfindMessage : Packet + { + public PathfindMessage( IPoint3D p ) : base( 0x38, 7 ) + { + m_Stream.Write( (short) p.X ); + m_Stream.Write( (short) p.Y ); + m_Stream.Write( (short) p.Z ); + } + } + + // unsure of proper format, client crashes + public sealed class MobileName : Packet + { + public MobileName( Mobile m ) : base( 0x98 ) + { + string name = m.Name; + + if ( name == null ) name = ""; + + this.EnsureCapacity( 37 ); + + m_Stream.Write( (int) m.Serial ); + m_Stream.WriteAsciiFixed( name, 30 ); + } + } + + public sealed class MobileAnimation : Packet + { + public MobileAnimation( Mobile m, int action, int frameCount, int repeatCount, bool forward, bool repeat, int delay ) : base( 0x6E, 14 ) + { + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) action ); + m_Stream.Write( (short) frameCount ); + m_Stream.Write( (short) repeatCount ); + m_Stream.Write( (bool) !forward ); // protocol has really "reverse" but I find this more intuitive + m_Stream.Write( (bool) repeat ); + m_Stream.Write( (byte) delay ); + } + } + + public sealed class NewMobileAnimation : Packet + { + public NewMobileAnimation( Mobile m, int action, int frameCount, int delay ) : base( 0xE2, 10 ) + { + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) action ); + m_Stream.Write( (short) frameCount ); + m_Stream.Write( (byte) delay ); + } + } + + public sealed class MobileStatusCompact : Packet + { + public MobileStatusCompact( bool canBeRenamed, Mobile m ) : base( 0x11 ) + { + string name = m.Name; + if ( name == null ) name = ""; + + this.EnsureCapacity( 43 ); + + m_Stream.Write( (int) m.Serial ); + m_Stream.WriteAsciiFixed( name, 30 ); + + AttributeNormalizer.WriteReverse( m_Stream, m.Hits, m.HitsMax ); + + m_Stream.Write( canBeRenamed ); + + m_Stream.Write( (byte) 0 ); // type + } + } + + public sealed class MobileStatusExtended : Packet + { + public MobileStatusExtended( Mobile m ) : this( m, m.NetState ) + { + } + + public MobileStatusExtended( Mobile m, NetState ns ) : base( 0x11 ) + { + string name = m.Name; + if ( name == null ) name = ""; + + bool sendMLExtended = false; + + this.EnsureCapacity( sendMLExtended ? 91 : 88 ); + + m_Stream.Write( (int) m.Serial ); + m_Stream.WriteAsciiFixed( name, 30 ); + + m_Stream.Write( (short) m.Hits ); + m_Stream.Write( (short) m.HitsMax ); + + m_Stream.Write( m.CanBeRenamedBy( m ) ); + + m_Stream.Write( (byte)(sendMLExtended ? 0x05 : 0x03) ); // type + + m_Stream.Write( m.Female ); + + m_Stream.Write( (short) m.Str ); + m_Stream.Write( (short) m.Dex ); + m_Stream.Write( (short) m.Int ); + + m_Stream.Write( (short) m.Stam ); + m_Stream.Write( (short) m.StamMax ); + + m_Stream.Write( (short) m.Mana ); + m_Stream.Write( (short) m.ManaMax ); + + m_Stream.Write( (int) m.TotalGold ); + m_Stream.Write( (short) ( ( int )( m.ArmorRating + 0.5 ) ) ); + m_Stream.Write( (short) (Mobile.BodyWeight + m.TotalWeight) ); + + if( sendMLExtended ) + { + m_Stream.Write( (short)m.MaxWeight ); + m_Stream.Write( (byte)(m.Race.RaceID + 1)); // Would be 0x00 if it's a non-ML enabled account but... + } + + m_Stream.Write( (short) m.StatCap ); + + m_Stream.Write( (byte) m.Followers ); + m_Stream.Write( (byte) m.FollowersMax ); + } + } + + public sealed class MobileStatus : Packet + { + public MobileStatus( Mobile beholder, Mobile beheld ) : this( beholder, beheld, beheld.NetState ) + { + } + + public MobileStatus( Mobile beholder, Mobile beheld, NetState ns ) : base( 0x11 ) + { + string name = beheld.Name; + if ( name == null ) name = ""; + + bool sendMLExtended = false; + + this.EnsureCapacity( 43 + (beholder == beheld ? (sendMLExtended ? 48 : 45) : 0) ); + + m_Stream.Write( beheld.Serial ); + + m_Stream.WriteAsciiFixed( name, 30 ); + + if ( beholder == beheld ) + WriteAttr( beheld.Hits, beheld.HitsMax ); + else + WriteAttrNorm( beheld.Hits, beheld.HitsMax ); + + m_Stream.Write( beheld.CanBeRenamedBy( beholder ) ); + + if ( beholder == beheld ) + { + m_Stream.Write( (byte)(sendMLExtended ? 0x05 : 0x03) ); // type + + m_Stream.Write( beheld.Female ); + + m_Stream.Write( (short) beheld.Str ); + m_Stream.Write( (short) beheld.Dex ); + m_Stream.Write( (short) beheld.Int ); + + WriteAttr( beheld.Stam, beheld.StamMax ); + WriteAttr( beheld.Mana, beheld.ManaMax ); + + m_Stream.Write( (int) beheld.TotalGold ); + m_Stream.Write( (short) ( (int)(beheld.ArmorRating + 0.5) ) ); + m_Stream.Write( (short) (Mobile.BodyWeight + beheld.TotalWeight) ); + + if( sendMLExtended ) + { + m_Stream.Write( (short)beheld.MaxWeight ); + m_Stream.Write( (byte)(beheld.Race.RaceID + 1) ); // Would be 0x00 if it's a non-ML enabled account but... + } + + m_Stream.Write( (short) beheld.StatCap ); + + m_Stream.Write( (byte) beheld.Followers ); + m_Stream.Write( (byte) beheld.FollowersMax ); + } + else + { + m_Stream.Write( (byte) 0x00 ); + } + } + + private void WriteAttr( int current, int maximum ) + { + m_Stream.Write( (short) current ); + m_Stream.Write( (short) maximum ); + } + + private void WriteAttrNorm( int current, int maximum ) + { + AttributeNormalizer.WriteReverse( m_Stream, current, maximum ); + } + } + + public sealed class HealthbarPoison : Packet + { + public HealthbarPoison( Mobile m ) : base( 0x17 ) + { + EnsureCapacity( 12 ); + + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) 1 ); + + m_Stream.Write( (short) 1 ); + + Poison p = m.Poison; + + if ( p != null ) { + m_Stream.Write( (byte) (p.Level + 1) ); + } else { + m_Stream.Write( (byte) 0 ); + } + } + } + + public sealed class HealthbarYellow : Packet + { + public HealthbarYellow( Mobile m ) : base( 0x17 ) + { + EnsureCapacity( 12 ); + + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) 1 ); + + m_Stream.Write( (short) 2 ); + + if ( m.Blessed || m.YellowHealthbar ) { + m_Stream.Write( (byte) 1 ); + } else { + m_Stream.Write( (byte) 0 ); + } + } + } + + public sealed class MobileUpdate : Packet + { + public MobileUpdate( Mobile m ) : base( 0x20, 19 ) + { + int hue = m.Hue; + + if ( m.SolidHueOverride >= 0 ) + hue = m.SolidHueOverride; + + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) m.Body ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (byte) m.GetPacketFlags() ); + m_Stream.Write( (short) m.X ); + m_Stream.Write( (short) m.Y ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (byte) m.Direction ); + m_Stream.Write( (sbyte) m.Z ); + } + } + + // Pre-7.0.0.0 Mobile Update + public sealed class MobileUpdateOld : Packet + { + public MobileUpdateOld( Mobile m ) : base( 0x20, 19 ) + { + int hue = m.Hue; + + if ( m.SolidHueOverride >= 0 ) + hue = m.SolidHueOverride; + + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (short) m.Body ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (byte) m.GetOldPacketFlags() ); + m_Stream.Write( (short) m.X ); + m_Stream.Write( (short) m.Y ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (byte) m.Direction ); + m_Stream.Write( (sbyte) m.Z ); + } + } + + public sealed class MobileIncoming : Packet + { + private static int[] m_DupedLayers = new int[256]; + private static int m_Version; + + public Mobile m_Beheld; + + public MobileIncoming( Mobile beholder, Mobile beheld ) : base( 0x78 ) + { + m_Beheld = beheld; + ++m_Version; + + List eq = beheld.Items; + int count = eq.Count; + + if( beheld.HairItemID > 0 ) + count++; + if( beheld.FacialHairItemID > 0 ) + count++; + + this.EnsureCapacity( 23 + (count * 9) ); + + int hue = beheld.Hue; + + if ( beheld.SolidHueOverride >= 0 ) + hue = beheld.SolidHueOverride; + + m_Stream.Write( (int) beheld.Serial ); + m_Stream.Write( (short) beheld.Body ); + m_Stream.Write( (short) beheld.X ); + m_Stream.Write( (short) beheld.Y ); + m_Stream.Write( (sbyte) beheld.Z ); + m_Stream.Write( (byte) beheld.Direction ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (byte) beheld.GetPacketFlags() ); + m_Stream.Write( (byte) Notoriety.Compute( beholder, beheld ) ); + + for ( int i = 0; i < eq.Count; ++i ) + { + Item item = eq[i]; + + byte layer = (byte) item.Layer; + + if ( !item.Deleted && beholder.CanSee( item ) && m_DupedLayers[layer] != m_Version ) + { + m_DupedLayers[layer] = m_Version; + + hue = item.Hue; + + if ( beheld.SolidHueOverride >= 0 ) + hue = beheld.SolidHueOverride; + + int itemID = item.ItemID & 0x7FFF; + bool writeHue = ( hue != 0 ); + + if ( writeHue ) + itemID |= 0x8000; + + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (ushort) itemID ); + m_Stream.Write( (byte) layer ); + + if ( writeHue ) + m_Stream.Write( (short) hue ); + } + } + + if( beheld.HairItemID > 0 ) + { + if( m_DupedLayers[(int)Layer.Hair] != m_Version ) + { + m_DupedLayers[(int)Layer.Hair] = m_Version; + hue = beheld.HairHue; + + if( beheld.SolidHueOverride >= 0 ) + hue = beheld.SolidHueOverride; + + int itemID = beheld.HairItemID & 0x7FFF; + + bool writeHue = (hue != 0); + + if( writeHue ) + itemID |= 0x8000; + + m_Stream.Write( (int)HairInfo.FakeSerial( beheld ) ); + m_Stream.Write( (ushort)itemID ); + m_Stream.Write( (byte)Layer.Hair ); + + if( writeHue ) + m_Stream.Write( (short)hue ); + } + } + + if( beheld.FacialHairItemID > 0 ) + { + if( m_DupedLayers[(int)Layer.FacialHair] != m_Version ) + { + m_DupedLayers[(int)Layer.FacialHair] = m_Version; + hue = beheld.FacialHairHue; + + if( beheld.SolidHueOverride >= 0 ) + hue = beheld.SolidHueOverride; + + int itemID = beheld.FacialHairItemID & 0x7FFF; + + bool writeHue = (hue != 0); + + if( writeHue ) + itemID |= 0x8000; + + m_Stream.Write( (int)FacialHairInfo.FakeSerial( beheld ) ); + m_Stream.Write( (ushort)itemID ); + m_Stream.Write( (byte)Layer.FacialHair ); + + if( writeHue ) + m_Stream.Write( (short)hue ); + } + } + + m_Stream.Write( (int) 0 ); // terminate + } + } + + // Pre-7.0.0.0 Mobile Incoming + public sealed class MobileIncomingOld : Packet + { + private static int[] m_DupedLayers = new int[256]; + private static int m_Version; + + public Mobile m_Beheld; + + public MobileIncomingOld( Mobile beholder, Mobile beheld ) : base( 0x78 ) + { + m_Beheld = beheld; + ++m_Version; + + List eq = beheld.Items; + int count = eq.Count; + + if( beheld.HairItemID > 0 ) + count++; + if( beheld.FacialHairItemID > 0 ) + count++; + + this.EnsureCapacity( 23 + (count * 9) ); + + int hue = beheld.Hue; + + if ( beheld.SolidHueOverride >= 0 ) + hue = beheld.SolidHueOverride; + + m_Stream.Write( (int) beheld.Serial ); + m_Stream.Write( (short) beheld.Body ); + m_Stream.Write( (short) beheld.X ); + m_Stream.Write( (short) beheld.Y ); + m_Stream.Write( (sbyte) beheld.Z ); + m_Stream.Write( (byte) beheld.Direction ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (byte) beheld.GetOldPacketFlags() ); + m_Stream.Write( (byte) Notoriety.Compute( beholder, beheld ) ); + + for ( int i = 0; i < eq.Count; ++i ) + { + Item item = eq[i]; + + byte layer = (byte) item.Layer; + + if ( !item.Deleted && beholder.CanSee( item ) && m_DupedLayers[layer] != m_Version ) + { + m_DupedLayers[layer] = m_Version; + + hue = item.Hue; + + if ( beheld.SolidHueOverride >= 0 ) + hue = beheld.SolidHueOverride; + + int itemID = item.ItemID & 0x7FFF; + bool writeHue = ( hue != 0 ); + + if ( writeHue ) + itemID |= 0x8000; + + m_Stream.Write( (int) item.Serial ); + m_Stream.Write( (ushort) itemID ); + m_Stream.Write( (byte) layer ); + + if ( writeHue ) + m_Stream.Write( (short) hue ); + } + } + + if( beheld.HairItemID > 0 ) + { + if( m_DupedLayers[(int)Layer.Hair] != m_Version ) + { + m_DupedLayers[(int)Layer.Hair] = m_Version; + hue = beheld.HairHue; + + if( beheld.SolidHueOverride >= 0 ) + hue = beheld.SolidHueOverride; + + int itemID = beheld.HairItemID & 0x7FFF; + + bool writeHue = (hue != 0); + + if( writeHue ) + itemID |= 0x8000; + + m_Stream.Write( (int)HairInfo.FakeSerial( beheld ) ); + m_Stream.Write( (ushort)itemID ); + m_Stream.Write( (byte)Layer.Hair ); + + if( writeHue ) + m_Stream.Write( (short)hue ); + } + } + + if( beheld.FacialHairItemID > 0 ) + { + if( m_DupedLayers[(int)Layer.FacialHair] != m_Version ) + { + m_DupedLayers[(int)Layer.FacialHair] = m_Version; + hue = beheld.FacialHairHue; + + if( beheld.SolidHueOverride >= 0 ) + hue = beheld.SolidHueOverride; + + int itemID = beheld.FacialHairItemID & 0x7FFF; + + bool writeHue = (hue != 0); + + if( writeHue ) + itemID |= 0x8000; + + m_Stream.Write( (int)FacialHairInfo.FakeSerial( beheld ) ); + m_Stream.Write( (ushort)itemID ); + m_Stream.Write( (byte)Layer.FacialHair ); + + if( writeHue ) + m_Stream.Write( (short)hue ); + } + } + + m_Stream.Write( (int) 0 ); // terminate + } + } + + public sealed class AsciiMessage : Packet + { + public AsciiMessage( Serial serial, int graphic, MessageType type, int hue, int font, string name, string text ) : base( 0x1C ) + { + if ( name == null ) + name = ""; + + if ( text == null ) + text = ""; + + if ( hue == 0 ) + hue = 0x3B2; + + this.EnsureCapacity( 45 + text.Length ); + + m_Stream.Write( (int) serial ); + m_Stream.Write( (short) graphic ); + m_Stream.Write( (byte) type ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (short) font ); + m_Stream.WriteAsciiFixed( name, 30 ); + m_Stream.WriteAsciiNull( text ); + } + } + + public sealed class UnicodeMessage : Packet + { + public UnicodeMessage( Serial serial, int graphic, MessageType type, int hue, int font, string lang, string name, string text ) : base( 0xAE ) + { + if ( string.IsNullOrEmpty( lang ) ) lang = "ENU"; + if ( name == null ) name = ""; + if ( text == null ) text = ""; + + if ( hue == 0 ) + hue = 0x3B2; + + this.EnsureCapacity( 50 + (text.Length * 2) ); + + m_Stream.Write( (int) serial ); + m_Stream.Write( (short) graphic ); + m_Stream.Write( (byte) type ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (short) font ); + m_Stream.WriteAsciiFixed( lang, 4 ); + m_Stream.WriteAsciiFixed( name, 30 ); + m_Stream.WriteBigUniNull( text ); + } + } + + public sealed class PingAck : Packet + { + private static PingAck[] m_Cache = new PingAck[0x100]; + + public static PingAck Instantiate( byte ping ) + { + PingAck p = m_Cache[ping]; + + if ( p == null ) + { + m_Cache[ping] = p = new PingAck( ping ); + p.SetStatic(); + } + + return p; + } + + public PingAck( byte ping ) : base( 0x73, 2 ) + { + m_Stream.Write( ping ); + } + } + + public sealed class MovementRej : Packet + { + public MovementRej( int seq, Mobile m ) : base( 0x21, 8 ) + { + m_Stream.Write( (byte) seq ); + m_Stream.Write( (short) m.X ); + m_Stream.Write( (short) m.Y ); + m_Stream.Write( (byte) m.Direction ); + m_Stream.Write( (sbyte) m.Z ); + } + } + + public sealed class MovementAck : Packet + { + private static MovementAck[][] m_Cache = new MovementAck[8][] + { + new MovementAck[256], + new MovementAck[256], + new MovementAck[256], + new MovementAck[256], + new MovementAck[256], + new MovementAck[256], + new MovementAck[256], + new MovementAck[256] + }; + + public static MovementAck Instantiate( int seq, Mobile m ) + { + int noto = Notoriety.Compute( m, m ); + + MovementAck p = m_Cache[noto][seq]; + + if ( p == null ) + { + m_Cache[noto][seq] = p = new MovementAck( seq, noto ); + p.SetStatic(); + } + + return p; + } + + private MovementAck( int seq, int noto ) : base( 0x22, 3 ) + { + m_Stream.Write( (byte) seq ); + m_Stream.Write( (byte) noto ); + } + } + + public sealed class LoginConfirm : Packet + { + public LoginConfirm( Mobile m ) : base( 0x1B, 37 ) + { + m_Stream.Write( (int) m.Serial ); + m_Stream.Write( (int) 0 ); + m_Stream.Write( (short) m.Body ); + m_Stream.Write( (short) m.X ); + m_Stream.Write( (short) m.Y ); + m_Stream.Write( (short) m.Z ); + m_Stream.Write( (byte) m.Direction ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (int) -1 ); + + Map map = m.Map; + + if ( map == null || map == Map.Internal ) + map = m.LogoutMap; + + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) 0 ); + m_Stream.Write( (short) (map==null?6144:map.Width) ); + m_Stream.Write( (short) (map==null?4096:map.Height) ); + + m_Stream.Fill(); + } + } + + public sealed class LoginComplete : Packet + { + public static readonly Packet Instance = Packet.SetStatic( new LoginComplete() ); + + public LoginComplete() : base( 0x55, 1 ) + { + } + } + + public sealed class CityInfo + { + private string m_City; + private string m_Building; + private int m_Description; + private Point3D m_Location; + private Map m_Map; + + public CityInfo( string city, string building, int description, int x, int y, int z, Map m ) + { + m_City = city; + m_Building = building; + m_Description = description; + m_Location = new Point3D( x, y, z ); + m_Map = m; + } + + public CityInfo( string city, string building, int x, int y, int z, Map m ) : this( city, building, 0, x, y, z, m ) + { + } + + public CityInfo( string city, string building, int description, int x, int y, int z ) : this( city, building, description, x, y, z, Map.Britannia ) + { + } + + public CityInfo( string city, string building, int x, int y, int z ) : this( city, building, 0, x, y, z, Map.Britannia ) + { + } + + public string City + { + get + { + return m_City; + } + set + { + m_City = value; + } + } + + public string Building + { + get + { + return m_Building; + } + set + { + m_Building = value; + } + } + + public int Description + { + get + { + return m_Description; + } + set + { + m_Description = value; + } + } + + public int X + { + get + { + return m_Location.X; + } + set + { + m_Location.X = value; + } + } + + public int Y + { + get + { + return m_Location.Y; + } + set + { + m_Location.Y = value; + } + } + + public int Z + { + get + { + return m_Location.Z; + } + set + { + m_Location.Z = value; + } + } + + public Point3D Location + { + get + { + return m_Location; + } + set + { + m_Location = value; + } + } + + public Map Map + { + get{ return m_Map; } + set{ m_Map = value; } + } + } + + public sealed class CharacterListUpdate : Packet + { + public CharacterListUpdate( IAccount a ) : base( 0x86 ) + { + this.EnsureCapacity( 4 + (a.Length * 60) ); + + int highSlot = -1; + + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] != null ) + highSlot = i; + } + + int count = Math.Max( Math.Max( highSlot + 1, a.Limit ), 5 ); + + m_Stream.Write( (byte) count ); + + for ( int i = 0; i < count; ++i ) + { + Mobile m = a[i]; + + if ( m != null ) + { + m_Stream.WriteAsciiFixed( m.Name, 30 ); + m_Stream.Fill( 30 ); // password + } + else + { + m_Stream.Fill( 60 ); + } + } + } + } + + public sealed class CharacterList : Packet + { + public CharacterList( IAccount a, CityInfo[] info ) : base( 0xA9 ) + { + this.EnsureCapacity( 11 + (a.Length * 60) + (info.Length * 89) ); + + int highSlot = -1; + + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] != null ) + highSlot = i; + } + + int count = Math.Max( Math.Max( highSlot + 1, a.Limit ), 5 ); + + m_Stream.Write( (byte) count ); + + for ( int i = 0; i < count; ++i ) + { + if ( a[i] != null ) + { + m_Stream.WriteAsciiFixed( a[i].Name, 30 ); + m_Stream.Fill( 30 ); // password + } + else + { + m_Stream.Fill( 60 ); + } + } + + m_Stream.Write( (byte) info.Length ); + + for ( int i = 0; i < info.Length; ++i ) + { + CityInfo ci = info[i]; + + m_Stream.Write( (byte) i ); + m_Stream.WriteAsciiFixed( ci.City, 32 ); + m_Stream.WriteAsciiFixed( ci.Building, 32 ); + m_Stream.Write( (int) ci.X ); + m_Stream.Write( (int) ci.Y ); + m_Stream.Write( (int) ci.Z ); + m_Stream.Write( (int) ci.Map.MapID ); + m_Stream.Write( (int) ci.Description ); + m_Stream.Write( (int) 0 ); + } + + CharacterListFlags flags = ExpansionInfo.CurrentExpansion.CharacterListFlags; + + if ( count > 6 ) + flags |= (CharacterListFlags.SeventhCharacterSlot | CharacterListFlags.SixthCharacterSlot); // 7th Character Slot - TODO: Is SixthCharacterSlot Required? + else if ( count == 6 ) + flags |= CharacterListFlags.SixthCharacterSlot; // 6th Character Slot + else if ( a.Limit == 1 ) + flags |= (CharacterListFlags.SlotLimit & CharacterListFlags.OneCharacterSlot); // Limit Characters & One Character + + m_Stream.Write( (int)(flags | m_AdditionalFlags) ); // Additional Flags + } + + private static CharacterListFlags m_AdditionalFlags; + + public static CharacterListFlags AdditionalFlags + { + get{ return m_AdditionalFlags; } + set{ m_AdditionalFlags = value; } + } + } + + public sealed class CharacterListOld : Packet + { + public CharacterListOld( IAccount a, CityInfo[] info ) : base( 0xA9 ) + { + this.EnsureCapacity( 9 + (a.Length * 60) + (info.Length * 63) ); + + int highSlot = -1; + + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] != null ) + highSlot = i; + } + + int count = Math.Max( Math.Max( highSlot + 1, a.Limit ), 5 ); + + m_Stream.Write( (byte) count ); + + for ( int i = 0; i < count; ++i ) + { + if ( a[i] != null ) + { + m_Stream.WriteAsciiFixed( a[i].Name, 30 ); + m_Stream.Fill( 30 ); // password + } + else + { + m_Stream.Fill( 60 ); + } + } + + m_Stream.Write( (byte) info.Length ); + + for ( int i = 0; i < info.Length; ++i ) + { + CityInfo ci = info[i]; + + m_Stream.Write( (byte) i ); + m_Stream.WriteAsciiFixed( ci.City, 31 ); + m_Stream.WriteAsciiFixed( ci.Building, 31 ); + } + + CharacterListFlags flags = ExpansionInfo.CurrentExpansion.CharacterListFlags; + + if ( count > 6 ) + flags |= (CharacterListFlags.SeventhCharacterSlot | CharacterListFlags.SixthCharacterSlot); // 7th Character Slot - TODO: Is SixthCharacterSlot Required? + else if ( count == 6 ) + flags |= CharacterListFlags.SixthCharacterSlot; // 6th Character Slot + else if ( a.Limit == 1 ) + flags |= (CharacterListFlags.SlotLimit & CharacterListFlags.OneCharacterSlot); // Limit Characters & One Character + + m_Stream.Write( (int)(flags | CharacterList.AdditionalFlags) ); // Additional Flags + } + } + + public sealed class ClearWeaponAbility : Packet + { + public static readonly Packet Instance = Packet.SetStatic( new ClearWeaponAbility() ); + + public ClearWeaponAbility() : base( 0xBF ) + { + EnsureCapacity( 5 ); + + m_Stream.Write( (short) 0x21 ); + } + } + + public enum ALRReason : byte + { + Invalid = 0x00, + InUse = 0x01, + Blocked = 0x02, + BadPass = 0x03, + Idle = 0xFE, + BadComm = 0xFF + } + + public sealed class AccountLoginRej : Packet + { + public AccountLoginRej( ALRReason reason ) : base( 0x82, 2 ) + { + m_Stream.Write( (byte)reason ); + } + } + + public enum AffixType : byte + { + Append = 0x00, + Prepend = 0x01, + System = 0x02 + } + + public sealed class MessageLocalizedAffix : Packet + { + public MessageLocalizedAffix( Serial serial, int graphic, MessageType messageType, int hue, int font, int number, string name, AffixType affixType, string affix, string args ) : base( 0xCC ) + { + if ( name == null ) name = ""; + if ( affix == null ) affix = ""; + if ( args == null ) args = ""; + + if ( hue == 0 ) + hue = 0x3B2; + + this.EnsureCapacity( 52 + affix.Length + (args.Length * 2) ); + + m_Stream.Write( (int) serial ); + m_Stream.Write( (short) graphic ); + m_Stream.Write( (byte) messageType ); + m_Stream.Write( (short) hue ); + m_Stream.Write( (short) font ); + m_Stream.Write( (int) number ); + m_Stream.Write( (byte) affixType ); + m_Stream.WriteAsciiFixed( name, 30 ); + m_Stream.WriteAsciiNull( affix ); + m_Stream.WriteBigUniNull( args ); + } + } + + public sealed class ServerInfo + { + private string m_Name; + private int m_FullPercent; + private int m_TimeZone; + private IPEndPoint m_Address; + + public string Name + { + get + { + return m_Name; + } + set + { + m_Name = value; + } + } + + public int FullPercent + { + get + { + return m_FullPercent; + } + set + { + m_FullPercent = value; + } + } + + public int TimeZone + { + get + { + return m_TimeZone; + } + set + { + m_TimeZone = value; + } + } + + public IPEndPoint Address + { + get + { + return m_Address; + } + set + { + m_Address = value; + } + } + + public ServerInfo( string name, int fullPercent, TimeZone tz, IPEndPoint address ) + { + m_Name = name; + m_FullPercent = fullPercent; + m_TimeZone = tz.GetUtcOffset( DateTime.Now ).Hours; + m_Address = address; + } + } + + public sealed class FollowMessage : Packet + { + public FollowMessage( Serial serial1, Serial serial2 ) : base( 0x15, 9 ) + { + m_Stream.Write( (int) serial1 ); + m_Stream.Write( (int) serial2 ); + } + } + + public sealed class AccountLoginAck : Packet + { + public AccountLoginAck( ServerInfo[] info ) : base( 0xA8 ) + { + this.EnsureCapacity( 6 + (info.Length * 40) ); + + m_Stream.Write( (byte) 0x5D ); // Unknown + + m_Stream.Write( (ushort) info.Length ); + + for ( int i = 0; i < info.Length; ++i ) + { + ServerInfo si = info[i]; + + m_Stream.Write( (ushort) i ); + m_Stream.WriteAsciiFixed( si.Name, 32 ); + m_Stream.Write( (byte) si.FullPercent ); + m_Stream.Write( (sbyte) si.TimeZone ); + m_Stream.Write( (int) Utility.GetAddressValue( si.Address.Address ) ); + } + } + } + + public sealed class DisplaySignGump : Packet + { + public DisplaySignGump( Serial serial, int gumpID, string unknown, string caption ) : base( 0x8B ) + { + if ( unknown == null ) unknown = ""; + if ( caption == null ) caption = ""; + + this.EnsureCapacity( 16 + unknown.Length + caption.Length ); + + m_Stream.Write( (int) serial ); + m_Stream.Write( (short) gumpID ); + m_Stream.Write( (short) (unknown.Length) ); + m_Stream.WriteAsciiFixed( unknown, unknown.Length ); + m_Stream.Write( (short) (caption.Length + 1) ); + m_Stream.WriteAsciiFixed( caption, caption.Length + 1 ); + } + } + + public sealed class GodModeReply : Packet + { + public GodModeReply( bool reply ) : base( 0x2B, 2 ) + { + m_Stream.Write( reply ); + } + } + + public sealed class PlayServerAck : Packet + { + internal static int m_AuthID = -1; + + public PlayServerAck( ServerInfo si ) : base( 0x8C, 11 ) + { + int addr = Utility.GetAddressValue( si.Address.Address ); + + m_Stream.Write( (byte) addr ); + m_Stream.Write( (byte)(addr >> 8) ); + m_Stream.Write( (byte)(addr >> 16) ); + m_Stream.Write( (byte)(addr >> 24) ); + + m_Stream.Write( (short) si.Address.Port ); + m_Stream.Write( (int) m_AuthID ); + } + } + + public abstract class Packet + { + [Flags] + private enum State + { + Inactive = 0x00, + Static = 0x01, + Acquired = 0x02, + Accessed = 0x04, + Buffered = 0x08, + Warned = 0x10 + } + + protected PacketWriter m_Stream; + private int m_PacketID; + private int m_Length; + private State m_State; + + public int PacketID + { + get{ return m_PacketID; } + } + + protected Packet( int packetID ) + { + m_PacketID = packetID; + + PacketSendProfile prof = PacketSendProfile.Acquire( GetType() ); + + if ( prof != null ) { + prof.Created++; + } + } + + public void EnsureCapacity( int length ) + { + m_Stream = PacketWriter.CreateInstance( length );// new PacketWriter( length ); + m_Stream.Write( (byte) m_PacketID ); + m_Stream.Write( (short) 0 ); + } + + protected Packet( int packetID, int length ) + { + m_PacketID = packetID; + m_Length = length; + + m_Stream = PacketWriter.CreateInstance( length );// new PacketWriter( length ); + m_Stream.Write( ( byte ) packetID ); + + PacketSendProfile prof = PacketSendProfile.Acquire( GetType() ); + + if ( prof != null ) { + prof.Created++; + } + } + + public PacketWriter UnderlyingStream + { + get + { + return m_Stream; + } + } + + private const int BufferSize = 4096; + private static BufferPool m_Buffers = new BufferPool( "Compressed", 16, BufferSize ); + + public static Packet SetStatic( Packet p ) + { + p.SetStatic(); + return p; + } + + public static Packet Acquire( Packet p ) + { + p.Acquire(); + return p; + } + + public static void Release( ref ObjectPropertyList p ) + { + if ( p != null ) + p.Release(); + + p = null; + } + + public static void Release( ref RemoveItem p ) + { + if ( p != null ) + p.Release(); + + p = null; + } + + public static void Release( ref RemoveMobile p ) + { + if ( p != null ) + p.Release(); + + p = null; + } + + public static void Release( ref OPLInfo p ) + { + if ( p != null ) + p.Release(); + + p = null; + } + + public static void Release( ref Packet p ) + { + if ( p != null ) + p.Release(); + + p = null; + } + + public static void Release( Packet p ) + { + if ( p != null ) + p.Release(); + } + + public void SetStatic() + { + m_State |= State.Static | State.Acquired; + } + + public void Acquire() + { + m_State |= State.Acquired; + } + + public void OnSend() + { + if ( (m_State & (State.Acquired | State.Static)) == 0 ) + Free(); + } + + private void Free() + { + if ( m_CompiledBuffer == null ) + return; + + if ( (m_State & State.Buffered) != 0 ) + m_Buffers.ReleaseBuffer( m_CompiledBuffer ); + + m_State &= ~(State.Static | State.Acquired | State.Buffered); + + m_CompiledBuffer = null; + } + + public void Release() + { + if ( (m_State & State.Acquired) != 0 ) + Free(); + } + + private byte[] m_CompiledBuffer; + private int m_CompiledLength; + + public byte[] Compile( bool compress, out int length ) + { + if ( m_CompiledBuffer == null ) + { + if ( (m_State & State.Accessed) == 0 ) + { + m_State |= State.Accessed; + } + else + { + if ( (m_State & State.Warned) == 0 ) + { + m_State |= State.Warned; + + try + { + using ( StreamWriter op = new StreamWriter( "net_opt.log", true ) ) + { + op.WriteLine( "Redundant compile for packet {0}, use Acquire() and Release()", this.GetType() ); + op.WriteLine( new System.Diagnostics.StackTrace() ); + } + } + catch + { + } + } + + m_CompiledBuffer = new byte[0]; + m_CompiledLength = 0; + + length = m_CompiledLength; + return m_CompiledBuffer; + } + + InternalCompile( compress ); + } + + length = m_CompiledLength; + return m_CompiledBuffer; + } + + private void InternalCompile( bool compress ) + { + if ( m_Length == 0 ) + { + long streamLen = m_Stream.Length; + + m_Stream.Seek( 1, SeekOrigin.Begin ); + m_Stream.Write( (ushort) streamLen ); + } + else if ( m_Stream.Length != m_Length ) + { + int diff = (int)m_Stream.Length - m_Length; + + Console.WriteLine( "Packet: 0x{0:X2}: Bad packet length! ({1}{2} bytes)", m_PacketID, diff >= 0 ? "+" : "", diff ); + } + + MemoryStream ms = m_Stream.UnderlyingStream; + + m_CompiledBuffer = ms.GetBuffer(); + int length = (int)ms.Length; + + if ( compress ) + { + m_CompiledBuffer = Compression.Compress( + m_CompiledBuffer, 0, length, + ref length + ); + + if ( m_CompiledBuffer == null ) + { + Console.WriteLine( "Warning: Compression buffer overflowed on packet 0x{0:X2} ('{1}') (length={2})", m_PacketID, GetType().Name, length ); + using ( StreamWriter op = new StreamWriter( "compression_overflow.log", true ) ) + { + op.WriteLine( "{0} Warning: Compression buffer overflowed on packet 0x{1:X2} ('{2}') (length={3})", DateTime.Now, m_PacketID, GetType().Name, length ); + op.WriteLine( new System.Diagnostics.StackTrace() ); + } + } + } + + if ( m_CompiledBuffer != null ) + { + m_CompiledLength = length; + + byte[] old = m_CompiledBuffer; + + if ( length > BufferSize || (m_State & State.Static) != 0 ) + { + m_CompiledBuffer = new byte[length]; + } + else + { + m_CompiledBuffer = m_Buffers.AcquireBuffer(); + m_State |= State.Buffered; + } + + Buffer.BlockCopy( old, 0, m_CompiledBuffer, 0, length ); + } + + PacketWriter.ReleaseInstance( m_Stream ); + m_Stream = null; + } + } +} diff --git a/Source/Network/SendQueue.cs b/Source/Network/SendQueue.cs new file mode 100644 index 0000000..b4920b0 --- /dev/null +++ b/Source/Network/SendQueue.cs @@ -0,0 +1,237 @@ +/*************************************************************************** + * SendQueue.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; + +namespace Server.Network { + public class SendQueue { + public class Gram { + private static Stack _pool = new Stack(); + + public static Gram Acquire() { + lock ( _pool ) { + Gram gram; + + if ( _pool.Count > 0 ) { + gram = _pool.Pop(); + } else { + gram = new Gram(); + } + + gram._buffer = AcquireBuffer(); + gram._length = 0; + + return gram; + } + } + + private byte[] _buffer; + private int _length; + + public byte[] Buffer { + get { + return _buffer; + } + } + + public int Length { + get { + return _length; + } + } + + public int Available { + get { + return ( _buffer.Length - _length ); + } + } + + public bool IsFull { + get { + return ( _length == _buffer.Length ); + } + } + + private Gram() { + } + + public int Write( byte[] buffer, int offset, int length ) { + int write = Math.Min( length, this.Available ); + + System.Buffer.BlockCopy( buffer, offset, _buffer, _length, write ); + + _length += write; + + return write; + } + + public void Release() { + lock ( _pool ) { + _pool.Push( this ); + ReleaseBuffer( _buffer ); + } + } + } + + private static int m_CoalesceBufferSize = 512; + private static BufferPool m_UnusedBuffers = new BufferPool( "Coalesced", 2048, m_CoalesceBufferSize ); + + public static int CoalesceBufferSize { + get { + return m_CoalesceBufferSize; + } + set { + if ( m_CoalesceBufferSize == value ) + return; + + if ( m_UnusedBuffers != null ) + m_UnusedBuffers.Free(); + + m_CoalesceBufferSize = value; + m_UnusedBuffers = new BufferPool( "Coalesced", 2048, m_CoalesceBufferSize ); + } + } + + public static byte[] AcquireBuffer() { + return m_UnusedBuffers.AcquireBuffer(); + } + + public static void ReleaseBuffer( byte[] buffer ) { + if ( buffer != null && buffer.Length == m_CoalesceBufferSize ) { + m_UnusedBuffers.ReleaseBuffer( buffer ); + } + } + + private Queue _pending; + + private Gram _buffered; + + public bool IsFlushReady { + get { + return ( _pending.Count == 0 && _buffered != null ); + } + } + + public bool IsEmpty { + get { + return ( _pending.Count == 0 && _buffered == null ); + } + } + + public SendQueue() { + _pending = new Queue(); + } + + public Gram CheckFlushReady() { + Gram gram = null; + + if ( _pending.Count == 0 && _buffered != null ) { + gram = _buffered; + + _pending.Enqueue( _buffered ); + _buffered = null; + } + + return gram; + } + + public Gram Dequeue() { + Gram gram = null; + + if ( _pending.Count > 0 ) { + _pending.Dequeue().Release(); + + if ( _pending.Count > 0 ) { + gram = _pending.Peek(); + } + } + + return gram; + } + + private const int PendingCap = 96 * 1024; + + public Gram Enqueue( byte[] buffer, int length ) { + return Enqueue( buffer, 0, length ); + } + + public Gram Enqueue( byte[] buffer, int offset, int length ) { + if ( buffer == null ) { + throw new ArgumentNullException( "buffer" ); + } else if ( !(offset >= 0 && offset < buffer.Length) ) { + throw new ArgumentOutOfRangeException( "offset", offset, "Offset must be greater than or equal to zero and less than the size of the buffer." ); + } else if ( length < 0 || length > buffer.Length ) { + throw new ArgumentOutOfRangeException( "length", length, "Length cannot be less than zero or greater than the size of the buffer." ); + } else if ( ( buffer.Length - offset ) < length ) { + throw new ArgumentException( "Offset and length do not point to a valid segment within the buffer." ); + } + + int existingBytes = ( _pending.Count * m_CoalesceBufferSize ) + ( _buffered == null ? 0 : _buffered.Length ); + + if ( ( existingBytes + length ) > PendingCap ) { + throw new CapacityExceededException(); + } + + Gram gram = null; + + while ( length > 0 ) { + if ( _buffered == null ) { // nothing yet buffered + _buffered = Gram.Acquire(); + } + + int bytesWritten = _buffered.Write( buffer, offset, length ); + + offset += bytesWritten; + length -= bytesWritten; + + if ( _buffered.IsFull ) { + if ( _pending.Count == 0 ) { + gram = _buffered; + } + + _pending.Enqueue( _buffered ); + _buffered = null; + } + } + + return gram; + } + + public void Clear() { + if ( _buffered != null ) { + _buffered.Release(); + _buffered = null; + } + + while ( _pending.Count > 0 ) { + _pending.Dequeue().Release(); + } + } + } + + public sealed class CapacityExceededException : Exception { + public CapacityExceededException() + : base( "Too much data pending." ) { + } + } +} \ No newline at end of file diff --git a/Source/Notoriety.cs b/Source/Notoriety.cs new file mode 100644 index 0000000..23c7f2e --- /dev/null +++ b/Source/Notoriety.cs @@ -0,0 +1,80 @@ +/*************************************************************************** + * Notoriety.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using Server; +using Server.Guilds; +using Server.Items; + +namespace Server +{ + public delegate int NotorietyHandler( Mobile source, Mobile target ); + + public static class Notoriety + { + public const int Innocent = 1; + public const int Ally = 2; + public const int CanBeAttacked = 3; + public const int Criminal = 4; + public const int Enemy = 5; + public const int Murderer = 6; + public const int Invulnerable = 7; + + private static NotorietyHandler m_Handler; + + public static NotorietyHandler Handler + { + get{ return m_Handler; } + set{ m_Handler = value; } + } + + private static int[] m_Hues = new int[] + { + 0x000, + 0x059, + 0x03F, + 0x3B2, + 0x3B2, + 0x090, + 0x022, + 0x035 + }; + + public static int[] Hues + { + get{ return m_Hues; } + set{ m_Hues = value; } + } + + public static int GetHue( int noto ) + { + if ( noto < 0 || noto >= m_Hues.Length ) + return 0; + + return m_Hues[noto]; + } + + public static int Compute( Mobile source, Mobile target ) + { + return m_Handler == null ? CanBeAttacked : m_Handler( source, target ); + } + } +} \ No newline at end of file diff --git a/Source/ObjectPropertyList.cs b/Source/ObjectPropertyList.cs new file mode 100644 index 0000000..0e10d10 --- /dev/null +++ b/Source/ObjectPropertyList.cs @@ -0,0 +1,198 @@ +/*************************************************************************** + * ObjectPropertyList.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Text; +using Server; +using Server.Network; + +namespace Server +{ + public sealed class ObjectPropertyList : Packet + { + private IEntity m_Entity; + private int m_Hash; + private int m_Header; + private int m_Strings; + private string m_HeaderArgs; + + public IEntity Entity{ get{ return m_Entity; } } + public int Hash{ get{ return 0x40000000 + m_Hash; } } + + public int Header{ get{ return m_Header; } set{ m_Header = value; } } + public string HeaderArgs{ get{ return m_HeaderArgs; } set{ m_HeaderArgs = value; } } + + private static bool m_Enabled = false; + + public static bool Enabled{ get{ return m_Enabled; } set{ m_Enabled = value; } } + + public ObjectPropertyList( IEntity e ) : base( 0xD6 ) + { + EnsureCapacity( 128 ); + + m_Entity = e; + + m_Stream.Write( (short) 1 ); + m_Stream.Write( (int) e.Serial ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (byte) 0 ); + m_Stream.Write( (int) e.Serial ); + } + + public void Add( int number ) + { + if ( number == 0 ) + return; + + AddHash( number ); + + if ( m_Header == 0 ) + { + m_Header = number; + m_HeaderArgs = ""; + } + + m_Stream.Write( number ); + m_Stream.Write( (short) 0 ); + } + + public void Terminate() + { + m_Stream.Write( (int) 0 ); + + m_Stream.Seek( 11, System.IO.SeekOrigin.Begin ); + m_Stream.Write( (int) m_Hash ); + } + + private static byte[] m_Buffer = new byte[1024]; + private static Encoding m_Encoding = Encoding.Unicode; + + public void AddHash( int val ) + { + m_Hash ^= (val & 0x3FFFFFF); + m_Hash ^= (val >> 26) & 0x3F; + } + + public void Add( int number, string arguments ) + { + if ( number == 0 ) + return; + + if ( arguments == null ) + arguments = ""; + + if ( m_Header == 0 ) + { + m_Header = number; + m_HeaderArgs = arguments; + } + + AddHash( number ); + AddHash( arguments.GetHashCode() ); + + m_Stream.Write( number ); + + int byteCount = m_Encoding.GetByteCount( arguments ); + + if ( byteCount > m_Buffer.Length ) + m_Buffer = new byte[byteCount]; + + byteCount = m_Encoding.GetBytes( arguments, 0, arguments.Length, m_Buffer, 0 ); + + m_Stream.Write( (short) byteCount ); + m_Stream.Write( m_Buffer, 0, byteCount ); + } + + public void Add( int number, string format, object arg0 ) + { + Add( number, String.Format( format, arg0 ) ); + } + + public void Add( int number, string format, object arg0, object arg1 ) + { + Add( number, String.Format( format, arg0, arg1 ) ); + } + + public void Add( int number, string format, object arg0, object arg1, object arg2 ) + { + Add( number, String.Format( format, arg0, arg1, arg2 ) ); + } + + public void Add( int number, string format, params object[] args ) + { + Add( number, String.Format( format, args ) ); + } + + // Each of these are localized to "~1_NOTHING~" which allows the string argument to be used + private static int[] m_StringNumbers = new int[] + { + 1042971, + 1070722 + }; + + private int GetStringNumber() + { + return m_StringNumbers[m_Strings++ % m_StringNumbers.Length]; + } + + public void Add( string text ) + { + Add( GetStringNumber(), text ); + } + + public void Add( string format, string arg0 ) + { + Add( GetStringNumber(), String.Format( format, arg0 ) ); + } + + public void Add( string format, string arg0, string arg1 ) + { + Add( GetStringNumber(), String.Format( format, arg0, arg1 ) ); + } + + public void Add( string format, string arg0, string arg1, string arg2 ) + { + Add( GetStringNumber(), String.Format( format, arg0, arg1, arg2 ) ); + } + + public void Add( string format, params object[] args ) + { + Add( GetStringNumber(), String.Format( format, args ) ); + } + } + + public sealed class OPLInfo : Packet + { + /*public OPLInfo( ObjectPropertyList list ) : base( 0xBF ) + { + EnsureCapacity( 13 ); + + m_Stream.Write( (short) 0x10 ); + m_Stream.Write( (int) list.Entity.Serial ); + m_Stream.Write( (int) list.Hash ); + }*/ + + public OPLInfo( ObjectPropertyList list ) : base( 0xDC, 9 ) + { + m_Stream.Write( (int) list.Entity.Serial ); + m_Stream.Write( (int) list.Hash ); + } + } +} \ No newline at end of file diff --git a/Source/Party.cs b/Source/Party.cs new file mode 100644 index 0000000..3cb3447 --- /dev/null +++ b/Source/Party.cs @@ -0,0 +1,39 @@ +/*************************************************************************** + * Party.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + public abstract class PartyCommands + { + private static PartyCommands m_Handler; + + public static PartyCommands Handler{ get{ return m_Handler; } set{ m_Handler = value; } } + + public abstract void OnAdd( Mobile from ); + public abstract void OnRemove( Mobile from, Mobile target ); + public abstract void OnPrivateMessage( Mobile from, Mobile target, string text ); + public abstract void OnPublicMessage( Mobile from, string text ); + public abstract void OnSetCanLoot( Mobile from, bool canLoot ); + public abstract void OnAccept( Mobile from, Mobile leader ); + public abstract void OnDecline( Mobile from, Mobile leader ); + } +} \ No newline at end of file diff --git a/Source/Persistence/BinaryMemoryWriter.cs b/Source/Persistence/BinaryMemoryWriter.cs new file mode 100644 index 0000000..aaffb0c --- /dev/null +++ b/Source/Persistence/BinaryMemoryWriter.cs @@ -0,0 +1,86 @@ +/*************************************************************************** + * BinaryMemoryWriter.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; + +namespace Server { + public sealed class BinaryMemoryWriter : BinaryFileWriter { + private MemoryStream stream; + + protected override int BufferSize { + get { return 512; } + } + + public BinaryMemoryWriter() + : base( new MemoryStream( 512 ), true ) { + this.stream = this.UnderlyingStream as MemoryStream; + } + + private static byte[] indexBuffer; + + public int CommitTo( SequentialFileWriter dataFile, SequentialFileWriter indexFile, int typeCode, int serial ) { + Flush(); + + byte[] buffer = stream.GetBuffer(); + int length = ( int ) stream.Length; + + long position = dataFile.Position; + + dataFile.Write( buffer, 0, length ); + + if ( indexBuffer == null ) { + indexBuffer = new byte[20]; + } + + indexBuffer[0] = ( byte ) ( typeCode ); + indexBuffer[1] = ( byte ) ( typeCode >> 8 ); + indexBuffer[2] = ( byte ) ( typeCode >> 16 ); + indexBuffer[3] = ( byte ) ( typeCode >> 24 ); + + indexBuffer[4] = ( byte ) ( serial ); + indexBuffer[5] = ( byte ) ( serial >> 8 ); + indexBuffer[6] = ( byte ) ( serial >> 16 ); + indexBuffer[7] = ( byte ) ( serial >> 24 ); + + indexBuffer[8] = ( byte ) ( position ); + indexBuffer[9] = ( byte ) ( position >> 8 ); + indexBuffer[10] = ( byte ) ( position >> 16 ); + indexBuffer[11] = ( byte ) ( position >> 24 ); + indexBuffer[12] = ( byte ) ( position >> 32 ); + indexBuffer[13] = ( byte ) ( position >> 40 ); + indexBuffer[14] = ( byte ) ( position >> 48 ); + indexBuffer[15] = ( byte ) ( position >> 56 ); + + indexBuffer[16] = ( byte ) ( length ); + indexBuffer[17] = ( byte ) ( length >> 8 ); + indexBuffer[18] = ( byte ) ( length >> 16 ); + indexBuffer[19] = ( byte ) ( length >> 24 ); + + indexFile.Write( indexBuffer, 0, indexBuffer.Length ); + + stream.SetLength( 0 ); + + return length; + } + } +} \ No newline at end of file diff --git a/Source/Persistence/DualSaveStrategy.cs b/Source/Persistence/DualSaveStrategy.cs new file mode 100644 index 0000000..1cc74e5 --- /dev/null +++ b/Source/Persistence/DualSaveStrategy.cs @@ -0,0 +1,60 @@ +/*************************************************************************** + * DualSaveStrategy.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Threading; +using System.Diagnostics; + +using Server; +using Server.Guilds; + +namespace Server { + public sealed class DualSaveStrategy : StandardSaveStrategy { + public override string Name { + get { return "Dual"; } + } + + public DualSaveStrategy() { + } + + public override void Save( SaveMetrics metrics, bool permitBackgroundWrite ) + { + this.PermitBackgroundWrite = permitBackgroundWrite; + + Thread saveThread = new Thread( delegate() { + SaveItems(metrics); + } ); + + saveThread.Name = "Item Save Subset"; + saveThread.Start(); + + SaveMobiles(metrics); + SaveGuilds(metrics); + + saveThread.Join(); + + if (permitBackgroundWrite && UseSequentialWriters) //If we're permitted to write in the background, but we don't anyways, then notify. + World.NotifyDiskWriteComplete(); + } + } +} \ No newline at end of file diff --git a/Source/Persistence/DynamicSaveStrategy.cs b/Source/Persistence/DynamicSaveStrategy.cs new file mode 100644 index 0000000..c5a9c53 --- /dev/null +++ b/Source/Persistence/DynamicSaveStrategy.cs @@ -0,0 +1,314 @@ +/*************************************************************************** + * DynamicSaveStrategy.cs + * ------------------- + * begin : December 16, 2010 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +#if Framework_4_0 + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using System.Diagnostics; +using System.Collections.Concurrent; +using System.Linq; + +using Server; +using Server.Guilds; + +namespace Server +{ + public sealed class DynamicSaveStrategy : SaveStrategy + { + public override string Name { get { return "Dynamic"; } } + + private SaveMetrics _metrics; + + private SequentialFileWriter _itemData, _itemIndex; + private SequentialFileWriter _mobileData, _mobileIndex; + private SequentialFileWriter _guildData, _guildIndex; + + private ConcurrentBag _decayBag; + + private BlockingCollection _itemThreadWriters; + private BlockingCollection _mobileThreadWriters; + private BlockingCollection _guildThreadWriters; + + public DynamicSaveStrategy() + { + _decayBag = new ConcurrentBag(); + _itemThreadWriters = new BlockingCollection(); + _mobileThreadWriters = new BlockingCollection(); + _guildThreadWriters = new BlockingCollection(); + } + + public override void Save(SaveMetrics metrics, bool permitBackgroundWrite) + { + this._metrics = metrics; + + OpenFiles(); + + Task[] saveTasks = new Task[3]; + + saveTasks[0] = SaveItems(); + saveTasks[1] = SaveMobiles(); + saveTasks[2] = SaveGuilds(); + + SaveTypeDatabases(); + + if (permitBackgroundWrite) + { + //This option makes it finish the writing to disk in the background, continuing even after Save() returns. + Task.Factory.ContinueWhenAll(saveTasks, _ => + { + CloseFiles(); + + World.NotifyDiskWriteComplete(); + }); + } + else + { + Task.WaitAll(saveTasks); //Waits for the completion of all of the tasks(committing to disk) + CloseFiles(); + } + } + + private Task StartCommitTask(BlockingCollection threadWriter, SequentialFileWriter data, SequentialFileWriter index) + { + Task commitTask = Task.Factory.StartNew(() => + { + while (!(threadWriter.IsCompleted)) + { + QueuedMemoryWriter writer; + + try + { + writer = threadWriter.Take(); + } + catch (InvalidOperationException) + { + //Per MSDN, it's fine if we're here, successful completion of adding can rarely put us into this state. + break; + } + + writer.CommitTo(data, index); + } + }); + + return commitTask; + } + + private Task SaveItems() + { + //Start the blocking consumer; this runs in background. + Task commitTask = StartCommitTask(_itemThreadWriters, _itemData, _itemIndex); + + IEnumerable items = World.Items.Values; + + //Start the producer. + Parallel.ForEach(items, () => new QueuedMemoryWriter(), + (Item item, ParallelLoopState state, QueuedMemoryWriter writer) => + { + long startPosition = writer.Position; + + item.Serialize(writer); + + int size = (int)(writer.Position - startPosition); + + writer.QueueForIndex(item, size); + + if (item.Decays && item.Parent == null && item.Map != Map.Internal && DateTime.Now > (item.LastMoved + item.DecayTime)) + { + _decayBag.Add(item); + } + + if (_metrics != null) + { + _metrics.OnItemSaved(size); + } + + return writer; + }, + (writer) => + { + writer.Flush(); + + _itemThreadWriters.Add(writer); + }); + + _itemThreadWriters.CompleteAdding(); //We only get here after the Parallel.ForEach completes. Lets our task + + return commitTask; + } + + + + private Task SaveMobiles() + { + //Start the blocking consumer; this runs in background. + Task commitTask = StartCommitTask( _mobileThreadWriters, _mobileData, _mobileIndex ); + + IEnumerable mobiles = World.Mobiles.Values; + + //Start the producer. + Parallel.ForEach(mobiles, () => new QueuedMemoryWriter(), + (Mobile mobile, ParallelLoopState state, QueuedMemoryWriter writer) => + { + long startPosition = writer.Position; + + mobile.Serialize(writer); + + int size = (int)(writer.Position - startPosition); + + writer.QueueForIndex(mobile, size); + + if (_metrics != null) + { + _metrics.OnMobileSaved(size); + } + + return writer; + }, + (writer) => + { + writer.Flush(); + + _mobileThreadWriters.Add(writer); + }); + + _mobileThreadWriters.CompleteAdding(); //We only get here after the Parallel.ForEach completes. Lets our task tell the consumer that we're done + + return commitTask; + } + + private Task SaveGuilds() + { + //Start the blocking consumer; this runs in background. + Task commitTask = StartCommitTask(_guildThreadWriters, _guildData, _guildIndex); + + IEnumerable guilds = BaseGuild.List.Values; + + //Start the producer. + Parallel.ForEach(guilds, () => new QueuedMemoryWriter(), + (BaseGuild guild, ParallelLoopState state, QueuedMemoryWriter writer) => + { + long startPosition = writer.Position; + + guild.Serialize(writer); + + int size = (int)(writer.Position - startPosition ); + + writer.QueueForIndex(guild, size); + + if (_metrics != null) + { + _metrics.OnGuildSaved(size); + } + + return writer; + }, + (writer) => + { + writer.Flush(); + + _guildThreadWriters.Add(writer); + }); + + _guildThreadWriters.CompleteAdding(); //We only get here after the Parallel.ForEach completes. Lets our task + + return commitTask; + } + + public override void ProcessDecay() + { + Item item; + + while( _decayBag.TryTake( out item ) ) + { + item.Delete(); + } + } + + private void OpenFiles() + { + _itemData = new SequentialFileWriter(World.ItemDataPath, _metrics); + _itemIndex = new SequentialFileWriter(World.ItemIndexPath, _metrics); + + _mobileData = new SequentialFileWriter(World.MobileDataPath, _metrics); + _mobileIndex = new SequentialFileWriter(World.MobileIndexPath, _metrics); + + _guildData = new SequentialFileWriter(World.GuildDataPath, _metrics); + _guildIndex = new SequentialFileWriter(World.GuildIndexPath, _metrics); + + WriteCount(_itemIndex, World.Items.Count); + WriteCount(_mobileIndex, World.Mobiles.Count); + WriteCount(_guildIndex, BaseGuild.List.Count); + } + + private void CloseFiles() + { + _itemData.Close(); + _itemIndex.Close(); + + _mobileData.Close(); + _mobileIndex.Close(); + + _guildData.Close(); + _guildIndex.Close(); + } + + private void WriteCount(SequentialFileWriter indexFile, int count) + { + //Equiv to GenericWriter.Write( (int)count ); + byte[] buffer = new byte[4]; + + buffer[0] = (byte)(count); + buffer[1] = (byte)(count >> 8); + buffer[2] = (byte)(count >> 16); + buffer[3] = (byte)(count >> 24); + + indexFile.Write(buffer, 0, buffer.Length); + } + + private void SaveTypeDatabases() + { + SaveTypeDatabase(World.ItemTypesPath, World.m_ItemTypes); + SaveTypeDatabase(World.MobileTypesPath, World.m_MobileTypes); + } + + private void SaveTypeDatabase(string path, List types) + { + BinaryFileWriter bfw = new BinaryFileWriter(path, false); + + bfw.Write(types.Count); + + foreach (Type type in types) + { + bfw.Write(type.FullName); + } + + bfw.Flush(); + + bfw.Close(); + } + } + +} +#endif \ No newline at end of file diff --git a/Source/Persistence/FileOperations.cs b/Source/Persistence/FileOperations.cs new file mode 100644 index 0000000..ce132ae --- /dev/null +++ b/Source/Persistence/FileOperations.cs @@ -0,0 +1,141 @@ +/*************************************************************************** + * FileOperations.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; + +#if !MONO +using System.Runtime.InteropServices; +using Microsoft.Win32.SafeHandles; +#endif + +namespace Server { + public static class FileOperations { + public const int KB = 1024; + public const int MB = 1024 * KB; + +#if !MONO + private const FileOptions NoBuffering = ( FileOptions ) 0x20000000; + + [DllImport( "Kernel32", CharSet = CharSet.Auto, SetLastError = true )] + private static extern SafeFileHandle CreateFile( string lpFileName, int dwDesiredAccess, FileShare dwShareMode, IntPtr securityAttrs, FileMode dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile ); +#endif + + private static int bufferSize = 1 * MB; + private static int concurrency = 1; + + private static bool unbuffered = true; + + public static int BufferSize { + get { + return bufferSize; + } + set { + bufferSize = value; + } + } + + public static int Concurrency { + get { + return concurrency; + } + set { + concurrency = value; + } + } + + public static bool Unbuffered { + get { + return unbuffered; + } + set { + unbuffered = value; + } + } + + public static bool AreSynchronous { + get { + return ( concurrency < 1 ); + } + } + + public static bool AreAsynchronous { + get { + return ( concurrency > 0 ); + } + } + + public static FileStream OpenSequentialStream( string path, FileMode mode, FileAccess access, FileShare share ) { + FileOptions options = FileOptions.SequentialScan; + + if ( concurrency > 0 ) { + options |= FileOptions.Asynchronous; + } + +#if MONO + return new FileStream( path, mode, access, share, bufferSize, options ); +#else + if ( unbuffered ) { + options |= NoBuffering; + } else { + return new FileStream( path, mode, access, share, bufferSize, options ); + } + + SafeFileHandle fileHandle = CreateFile( path, (int) access, share, IntPtr.Zero, mode, (int) options, IntPtr.Zero ); + + if ( fileHandle.IsInvalid ) { + throw new IOException(); + } + + return new UnbufferedFileStream( fileHandle, access, bufferSize, ( concurrency > 0 ) ); +#endif + } + +#if !MONO + private class UnbufferedFileStream : FileStream { + private SafeFileHandle fileHandle; + + public UnbufferedFileStream( SafeFileHandle fileHandle, FileAccess access, int bufferSize, bool isAsync ) + : base( fileHandle, access, bufferSize, isAsync ) { + this.fileHandle = fileHandle; + } + + public override void Write( byte[] array, int offset, int count ) { + base.Write( array, offset, bufferSize ); + } + + public override IAsyncResult BeginWrite( byte[] array, int offset, int numBytes, AsyncCallback userCallback, object stateObject ) { + return base.BeginWrite( array, offset, bufferSize, userCallback, stateObject ); + } + + protected override void Dispose( bool disposing ) { + if ( !fileHandle.IsClosed ) { + fileHandle.Close(); + } + + base.Dispose( disposing ); + } + } +#endif + } +} diff --git a/Source/Persistence/FileQueue.cs b/Source/Persistence/FileQueue.cs new file mode 100644 index 0000000..60d925a --- /dev/null +++ b/Source/Persistence/FileQueue.cs @@ -0,0 +1,251 @@ +/*************************************************************************** + * FileQueue.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Threading; + +using Server; +using Server.Network; + +namespace Server { + public delegate void FileCommitCallback( FileQueue.Chunk chunk ); + + public sealed class FileQueue : IDisposable { + public sealed class Chunk { + private FileQueue owner; + private int slot; + + private byte[] buffer; + private int offset; + private int size; + + public byte[] Buffer { + get { + return buffer; + } + } + + public int Offset { + get { + return 0; + } + } + + public int Size { + get { + return size; + } + } + + public Chunk( FileQueue owner, int slot, byte[] buffer, int offset, int size ) { + this.owner = owner; + this.slot = slot; + + this.buffer = buffer; + this.offset = offset; + this.size = size; + } + + public void Commit() { + owner.Commit( this, this.slot ); + } + } + + private struct Page { + public byte[] buffer; + public int length; + } + + private static int bufferSize; + private static BufferPool bufferPool; + + static FileQueue() { + bufferSize = FileOperations.BufferSize; + bufferPool = new BufferPool( "File Buffers", 64, bufferSize ); + } + + private object syncRoot; + + private Chunk[] active; + private int activeCount; + + private Queue pending; + private Page buffered; + + private FileCommitCallback callback; + + private ManualResetEvent idle; + + private long position; + + public long Position { + get { + return position; + } + } + + public FileQueue( int concurrentWrites, FileCommitCallback callback ) { + if ( concurrentWrites < 1 ) { + throw new ArgumentOutOfRangeException( "concurrentWrites" ); + } else if ( bufferSize < 1 ) { + throw new ArgumentOutOfRangeException( "bufferSize" ); + } else if ( callback == null ) { + throw new ArgumentNullException( "callback" ); + } + + this.syncRoot = new object(); + + this.active = new Chunk[concurrentWrites]; + this.pending = new Queue(); + + this.callback = callback; + + this.idle = new ManualResetEvent( true ); + } + + private void Append( Page page ) { + lock ( syncRoot ) { + if ( activeCount == 0 ) { + idle.Reset(); + } + + ++activeCount; + + for ( int slot = 0; slot < active.Length; ++slot ) { + if ( active[slot] == null ) { + active[slot] = new Chunk( this, slot, page.buffer, 0, page.length ); + + callback( active[slot] ); + + return; + } + } + + pending.Enqueue( page ); + } + } + + public void Dispose() { + if ( idle != null ) { + idle.Close(); + idle = null; + } + } + + public void Flush() { + if ( buffered.buffer != null ) { + Append( buffered ); + + buffered.buffer = null; + buffered.length = 0; + } + + /*lock ( syncRoot ) { + if ( pending.Count > 0 ) { + idle.Reset(); + } + + for ( int slot = 0; slot < active.Length && pending.Count > 0; ++slot ) { + if ( active[slot] == null ) { + Page page = pending.Dequeue(); + + active[slot] = new Chunk( this, slot, page.buffer, 0, page.length ); + + ++activeCount; + + callback( active[slot] ); + } + } + }*/ + + idle.WaitOne(); + } + + private void Commit( Chunk chunk, int slot ) { + if ( slot < 0 || slot >= active.Length ) { + throw new ArgumentOutOfRangeException( "slot" ); + } + + lock ( syncRoot ) { + if ( active[slot] != chunk ) { + throw new ArgumentException(); + } + + bufferPool.ReleaseBuffer( chunk.Buffer ); + + if ( pending.Count > 0 ) { + Page page = pending.Dequeue(); + + active[slot] = new Chunk( this, slot, page.buffer, 0, page.length ); + + callback( active[slot] ); + } else { + active[slot] = null; + } + + --activeCount; + + if ( activeCount == 0 ) { + idle.Set(); + } + } + } + + public void Enqueue( byte[] buffer, int offset, int size ) { + if ( buffer == null ) { + throw new ArgumentNullException( "buffer" ); + } else if ( offset < 0 ) { + throw new ArgumentOutOfRangeException( "offset" ); + } else if ( size < 0 ) { + throw new ArgumentOutOfRangeException( "size" ); + } else if ( ( buffer.Length - offset ) < size ) { + throw new ArgumentException(); + } + + position += size; + + while ( size > 0 ) { + if ( buffered.buffer == null ) { // nothing yet buffered + buffered.buffer = bufferPool.AcquireBuffer(); + } + + byte[] page = buffered.buffer; // buffer page + int pageSpace = page.Length - buffered.length; // available bytes in page + int byteCount = ( size > pageSpace ? pageSpace : size ); // how many bytes we can copy over + + Buffer.BlockCopy( buffer, offset, page, buffered.length, byteCount ); + + buffered.length += byteCount; + offset += byteCount; + size -= byteCount; + + if ( buffered.length == page.Length ) { // page full + Append( buffered ); + + buffered.buffer = null; + buffered.length = 0; + } + } + } + } +} \ No newline at end of file diff --git a/Source/Persistence/ParallelSaveStrategy.cs b/Source/Persistence/ParallelSaveStrategy.cs new file mode 100644 index 0000000..11b1c25 --- /dev/null +++ b/Source/Persistence/ParallelSaveStrategy.cs @@ -0,0 +1,345 @@ +/*************************************************************************** + * ParallelSaveStrategy.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Threading; +using System.Diagnostics; + +using Server; +using Server.Guilds; + +namespace Server { + public sealed class ParallelSaveStrategy : SaveStrategy { + public override string Name { + get { return "Parallel"; } + } + + private int processorCount; + + public ParallelSaveStrategy( int processorCount ) { + this.processorCount = processorCount; + + _decayQueue = new Queue(); + } + + private int GetThreadCount() { + return processorCount - 1; + } + + private SaveMetrics metrics; + + private SequentialFileWriter itemData, itemIndex; + private SequentialFileWriter mobileData, mobileIndex; + private SequentialFileWriter guildData, guildIndex; + + private Queue _decayQueue; + + private Consumer[] consumers; + private int cycle; + + private bool finished; + + public override void Save(SaveMetrics metrics, bool permitBackgroundWrite) + { + this.metrics = metrics; + + OpenFiles(); + + consumers = new Consumer[GetThreadCount()]; + + for ( int i = 0; i < consumers.Length; ++i ) { + consumers[i] = new Consumer( this, 256 ); + } + + IEnumerable collection = new Producer(); + + foreach ( ISerializable value in collection ) { + while ( !Enqueue( value ) ) { + if ( !Commit() ) { + Thread.Sleep( 0 ); + } + } + } + + finished = true; + + SaveTypeDatabases(); + + WaitHandle.WaitAll( + Array.ConvertAll( + consumers, + delegate( Consumer input ) { + return input.completionEvent; + } + ) + ); + + Commit(); + + CloseFiles(); + } + + public override void ProcessDecay() { + while ( _decayQueue.Count > 0 ) { + Item item = _decayQueue.Dequeue(); + + if ( item.OnDecay() ) { + item.Delete(); + } + } + } + + private void SaveTypeDatabases() { + SaveTypeDatabase( World.ItemTypesPath, World.m_ItemTypes ); + SaveTypeDatabase( World.MobileTypesPath, World.m_MobileTypes ); + } + + private void SaveTypeDatabase( string path, List types ) { + BinaryFileWriter bfw = new BinaryFileWriter( path, false ); + + bfw.Write( types.Count ); + + foreach ( Type type in types ) { + bfw.Write( type.FullName ); + } + + bfw.Flush(); + + bfw.Close(); + } + + private void OpenFiles() { + itemData = new SequentialFileWriter( World.ItemDataPath, metrics ); + itemIndex = new SequentialFileWriter( World.ItemIndexPath, metrics ); + + mobileData = new SequentialFileWriter( World.MobileDataPath, metrics ); + mobileIndex = new SequentialFileWriter( World.MobileIndexPath, metrics ); + + guildData = new SequentialFileWriter( World.GuildDataPath, metrics ); + guildIndex = new SequentialFileWriter( World.GuildIndexPath, metrics ); + + WriteCount( itemIndex, World.Items.Count ); + WriteCount( mobileIndex, World.Mobiles.Count ); + WriteCount( guildIndex, BaseGuild.List.Count ); + } + + private void WriteCount( SequentialFileWriter indexFile, int count ) { + byte[] buffer = new byte[4]; + + buffer[0] = ( byte ) ( count ); + buffer[1] = ( byte ) ( count >> 8 ); + buffer[2] = ( byte ) ( count >> 16 ); + buffer[3] = ( byte ) ( count >> 24 ); + + indexFile.Write( buffer, 0, buffer.Length ); + } + + private void CloseFiles() { + itemData.Close(); + itemIndex.Close(); + + mobileData.Close(); + mobileIndex.Close(); + + guildData.Close(); + guildIndex.Close(); + + World.NotifyDiskWriteComplete(); + } + + private void OnSerialized( ConsumableEntry entry ) { + ISerializable value = entry.value; + BinaryMemoryWriter writer = entry.writer; + + Item item = value as Item; + + if ( item != null ) { + Save( item, writer ); + } else { + Mobile mob = value as Mobile; + + if ( mob != null ) { + Save( mob, writer ); + } else { + BaseGuild guild = value as BaseGuild; + + if ( guild != null ) { + Save( guild, writer ); + } + } + } + } + + private void Save( Item item, BinaryMemoryWriter writer ) { + int length = writer.CommitTo( itemData, itemIndex, item.m_TypeRef, item.Serial ); + + if ( metrics != null ) { + metrics.OnItemSaved( length ); + } + + if ( item.Decays && item.Parent == null && item.Map != Map.Internal && DateTime.Now > ( item.LastMoved + item.DecayTime ) ) { + _decayQueue.Enqueue( item ); + } + } + + private void Save( Mobile mob, BinaryMemoryWriter writer ) { + int length = writer.CommitTo( mobileData, mobileIndex, mob.m_TypeRef, mob.Serial ); + + if ( metrics != null ) { + metrics.OnMobileSaved( length ); + } + } + + private void Save( BaseGuild guild, BinaryMemoryWriter writer ) { + int length = writer.CommitTo( guildData, guildIndex, 0, guild.Id ); + + if ( metrics != null ) { + metrics.OnGuildSaved( length ); + } + } + + private bool Enqueue( ISerializable value ) { + for ( int i = 0; i < consumers.Length; ++i ) { + Consumer consumer = consumers[cycle++ % consumers.Length]; + + if ( ( consumer.tail - consumer.head ) < consumer.buffer.Length ) { + consumer.buffer[consumer.tail % consumer.buffer.Length].value = value; + consumer.tail++; + + return true; + } + } + + return false; + } + + private bool Commit() { + bool committed = false; + + for ( int i = 0; i < consumers.Length; ++i ) { + Consumer consumer = consumers[i]; + + while ( consumer.head < consumer.done ) { + OnSerialized( consumer.buffer[consumer.head % consumer.buffer.Length] ); + consumer.head++; + + committed = true; + } + } + + return committed; + } + + private sealed class Producer : IEnumerable { + private IEnumerable items; + private IEnumerable mobiles; + private IEnumerable guilds; + + public Producer() { + items = World.Items.Values; + mobiles = World.Mobiles.Values; + guilds = BaseGuild.List.Values; + } + + public IEnumerator GetEnumerator() { + foreach ( Item item in items ) { + yield return item; + } + + foreach ( Mobile mob in mobiles ) { + yield return mob; + } + + foreach ( BaseGuild guild in guilds ) { + yield return guild; + } + } + + IEnumerator IEnumerable.GetEnumerator() { + throw new NotImplementedException(); + } + } + + private struct ConsumableEntry { + public ISerializable value; + public BinaryMemoryWriter writer; + } + + private sealed class Consumer { + private ParallelSaveStrategy owner; + + public ManualResetEvent completionEvent; + + public ConsumableEntry[] buffer; + public int head, done, tail; + + private Thread thread; + + public Consumer( ParallelSaveStrategy owner, int bufferSize ) { + this.owner = owner; + + this.buffer = new ConsumableEntry[bufferSize]; + + for ( int i = 0; i < this.buffer.Length; ++i ) { + this.buffer[i].writer = new BinaryMemoryWriter(); + } + + this.completionEvent = new ManualResetEvent( false ); + + thread = new Thread( Processor ); + + thread.Name = "Parallel Serialization Thread"; + + thread.Start(); + } + + private void Processor() { + try { + while ( !owner.finished ) { + Process(); + Thread.Sleep( 0 ); + } + + Process(); + + completionEvent.Set(); + } catch ( Exception ex ) { + Console.WriteLine( ex ); + } + } + + private void Process() { + ConsumableEntry entry; + + while ( done < tail ) { + entry = buffer[done % buffer.Length]; + + entry.value.Serialize( entry.writer ); + + ++done; + } + } + } + } +} \ No newline at end of file diff --git a/Source/Persistence/QueuedMemoryWriter.cs b/Source/Persistence/QueuedMemoryWriter.cs new file mode 100644 index 0000000..857488e --- /dev/null +++ b/Source/Persistence/QueuedMemoryWriter.cs @@ -0,0 +1,126 @@ +/*************************************************************************** + * QueuedMemoryWriter.cs + * ------------------- + * begin : December 16, 2010 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; + +namespace Server +{ + public sealed class QueuedMemoryWriter : BinaryFileWriter + { + private struct IndexInfo + { + public int size; + public int typeCode; + public int serial; + } + + private MemoryStream _memStream; + private List _orderedIndexInfo = new List(); + + protected override int BufferSize + { + get { return 512; } + } + + public QueuedMemoryWriter() + : base(new MemoryStream(1024 * 1024), true) + { + this._memStream = this.UnderlyingStream as MemoryStream; + } + + public void QueueForIndex(ISerializable serializable, int size) + { + IndexInfo info; + + info.size = size; + + info.typeCode = serializable.TypeReference; //For guilds, this will automagically be zero. + info.serial = serializable.SerialIdentity; + + _orderedIndexInfo.Add(info); + } + + public void CommitTo(SequentialFileWriter dataFile, SequentialFileWriter indexFile) + { + this.Flush(); + + int memLength = (int)_memStream.Position; + + if (memLength > 0) + { + byte[] memBuffer = _memStream.GetBuffer(); + + long actualPosition = dataFile.Position; + + dataFile.Write(memBuffer, 0, memLength); //The buffer contains the data from many items. + + //Console.WriteLine("Writing {0} bytes starting at {1}, with {2} things", memLength, actualPosition, _orderedIndexInfo.Count); + + byte[] indexBuffer = new byte[20]; + + //int indexWritten = _orderedIndexInfo.Count * indexBuffer.Length; + //int totalWritten = memLength + indexWritten + + for (int i = 0; i < _orderedIndexInfo.Count; i++) + { + IndexInfo info = _orderedIndexInfo[i]; + + int typeCode = info.typeCode; + int serial = info.serial; + int length = info.size; + + + indexBuffer[0] = (byte)(info.typeCode); + indexBuffer[1] = (byte)(info.typeCode >> 8); + indexBuffer[2] = (byte)(info.typeCode >> 16); + indexBuffer[3] = (byte)(info.typeCode >> 24); + + indexBuffer[4] = (byte)(info.serial); + indexBuffer[5] = (byte)(info.serial >> 8); + indexBuffer[6] = (byte)(info.serial >> 16); + indexBuffer[7] = (byte)(info.serial >> 24); + + indexBuffer[8] = (byte)(actualPosition); + indexBuffer[9] = (byte)(actualPosition >> 8); + indexBuffer[10] = (byte)(actualPosition >> 16); + indexBuffer[11] = (byte)(actualPosition >> 24); + indexBuffer[12] = (byte)(actualPosition >> 32); + indexBuffer[13] = (byte)(actualPosition >> 40); + indexBuffer[14] = (byte)(actualPosition >> 48); + indexBuffer[15] = (byte)(actualPosition >> 56); + + indexBuffer[16] = (byte)(info.size); + indexBuffer[17] = (byte)(info.size >> 8); + indexBuffer[18] = (byte)(info.size >> 16); + indexBuffer[19] = (byte)(info.size >> 24); + + indexFile.Write(indexBuffer, 0, indexBuffer.Length); + + actualPosition += info.size; + } + } + + this.Close(); //We're done with this writer. + } + } +} \ No newline at end of file diff --git a/Source/Persistence/SaveMetrics.cs b/Source/Persistence/SaveMetrics.cs new file mode 100644 index 0000000..71c273f --- /dev/null +++ b/Source/Persistence/SaveMetrics.cs @@ -0,0 +1,131 @@ +/*************************************************************************** + * SaveMetrics.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace Server { + public sealed class SaveMetrics : IDisposable { + private const string PerformanceCategoryName = "Ultima"; + private const string PerformanceCategoryDesc = "Performance counters for Ultima."; + + private PerformanceCounter numberOfWorldSaves; + + private PerformanceCounter itemsPerSecond; + private PerformanceCounter mobilesPerSecond; + + private PerformanceCounter serializedBytesPerSecond; + private PerformanceCounter writtenBytesPerSecond; + + public SaveMetrics() { + if ( !PerformanceCounterCategory.Exists( PerformanceCategoryName ) ) { + CounterCreationDataCollection counters = new CounterCreationDataCollection(); + + counters.Add( new CounterCreationData( + "Save - Count", + "Number of world saves.", + PerformanceCounterType.NumberOfItems32 + ) + ); + + counters.Add( new CounterCreationData( + "Save - Items/sec", + "Number of items saved per second.", + PerformanceCounterType.RateOfCountsPerSecond32 + ) + ); + + counters.Add( new CounterCreationData( + "Save - Mobiles/sec", + "Number of mobiles saved per second.", + PerformanceCounterType.RateOfCountsPerSecond32 + ) + ); + + counters.Add( new CounterCreationData( + "Save - Serialized bytes/sec", + "Amount of world-save bytes serialized per second.", + PerformanceCounterType.RateOfCountsPerSecond32 + ) + ); + + counters.Add( new CounterCreationData( + "Save - Written bytes/sec", + "Amount of world-save bytes written to disk per second.", + PerformanceCounterType.RateOfCountsPerSecond32 + ) + ); + +#if !MONO + PerformanceCounterCategory.Create( PerformanceCategoryName, PerformanceCategoryDesc, PerformanceCounterCategoryType.SingleInstance, counters ); +#endif + } + + numberOfWorldSaves = new PerformanceCounter( PerformanceCategoryName, "Save - Count", false ); + + itemsPerSecond = new PerformanceCounter( PerformanceCategoryName, "Save - Items/sec", false ); + mobilesPerSecond = new PerformanceCounter( PerformanceCategoryName, "Save - Mobiles/sec", false ); + + serializedBytesPerSecond = new PerformanceCounter( PerformanceCategoryName, "Save - Serialized bytes/sec", false ); + writtenBytesPerSecond = new PerformanceCounter( PerformanceCategoryName, "Save - Written bytes/sec", false ); + + // increment number of world saves + numberOfWorldSaves.Increment(); + } + + public void OnItemSaved( int numberOfBytes ) { + itemsPerSecond.Increment(); + + serializedBytesPerSecond.IncrementBy( numberOfBytes ); + } + + public void OnMobileSaved( int numberOfBytes ) { + mobilesPerSecond.Increment(); + + serializedBytesPerSecond.IncrementBy( numberOfBytes ); + } + + public void OnGuildSaved( int numberOfBytes ) { + serializedBytesPerSecond.IncrementBy( numberOfBytes ); + } + + public void OnFileWritten( int numberOfBytes ) { + writtenBytesPerSecond.IncrementBy( numberOfBytes ); + } + + private bool isDisposed; + + public void Dispose() { + if ( !isDisposed ) { + isDisposed = true; + + numberOfWorldSaves.Dispose(); + + itemsPerSecond.Dispose(); + mobilesPerSecond.Dispose(); + + serializedBytesPerSecond.Dispose(); + writtenBytesPerSecond.Dispose(); + } + } + } +} diff --git a/Source/Persistence/SaveStrategy.cs b/Source/Persistence/SaveStrategy.cs new file mode 100644 index 0000000..6d91da9 --- /dev/null +++ b/Source/Persistence/SaveStrategy.cs @@ -0,0 +1,58 @@ +/*************************************************************************** + * SaveStrategy.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server; + +namespace Server +{ + public abstract class SaveStrategy + { + public static SaveStrategy Acquire() + { + if (Core.MultiProcessor) + { + int processorCount = Core.ProcessorCount; + + if (processorCount > 16) + { +#if Framework_4_0 + return new DynamicSaveStrategy(); +#else + return new ParallelSaveStrategy(processorCount); +#endif + } + else + { + return new DualSaveStrategy(); + } + } + else + { + return new StandardSaveStrategy(); + } + } + + public abstract string Name { get; } + public abstract void Save(SaveMetrics metrics, bool permitBackgroundWrite); + + public abstract void ProcessDecay(); + } +} \ No newline at end of file diff --git a/Source/Persistence/SequentialFileWriter.cs b/Source/Persistence/SequentialFileWriter.cs new file mode 100644 index 0000000..2c7b5d5 --- /dev/null +++ b/Source/Persistence/SequentialFileWriter.cs @@ -0,0 +1,141 @@ +/*************************************************************************** + * SequentialFileWriter.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace Server { + public sealed class SequentialFileWriter : Stream { + private FileStream fileStream; + private FileQueue fileQueue; + + private AsyncCallback writeCallback; + + private SaveMetrics metrics; + + public SequentialFileWriter( string path, SaveMetrics metrics ) { + if ( path == null ) { + throw new ArgumentNullException( "path" ); + } + + this.metrics = metrics; + + this.fileStream = FileOperations.OpenSequentialStream( path, FileMode.Create, FileAccess.Write, FileShare.None ); + + fileQueue = new FileQueue( + Math.Max( 1, FileOperations.Concurrency ), + FileCallback + ); + } + + public override long Position { + get { + return fileQueue.Position; + } + set { + throw new InvalidOperationException(); + } + } + + private void FileCallback( FileQueue.Chunk chunk ) { + if ( FileOperations.AreSynchronous ) { + fileStream.Write( chunk.Buffer, chunk.Offset, chunk.Size ); + + if ( metrics != null ) { + metrics.OnFileWritten( chunk.Size ); + } + + chunk.Commit(); + } else { + if ( writeCallback == null ) { + writeCallback = this.OnWrite; + } + + fileStream.BeginWrite( chunk.Buffer, chunk.Offset, chunk.Size, writeCallback, chunk ); + } + } + + private void OnWrite( IAsyncResult asyncResult ) { + FileQueue.Chunk chunk = asyncResult.AsyncState as FileQueue.Chunk; + + fileStream.EndWrite( asyncResult ); + + if ( metrics != null ) { + metrics.OnFileWritten( chunk.Size ); + } + + chunk.Commit(); + } + + public override void Write( byte[] buffer, int offset, int size ) { + fileQueue.Enqueue( buffer, offset, size ); + } + + public override void Flush() { + fileQueue.Flush(); + fileStream.Flush(); + } + + protected override void Dispose( bool disposing ) { + if ( fileStream != null ) { + Flush(); + + fileQueue.Dispose(); + fileQueue = null; + + fileStream.Close(); + fileStream = null; + } + + base.Dispose( disposing ); + } + + public override bool CanRead { + get { return false; } + } + + public override bool CanSeek { + get { return false; } + } + + public override bool CanWrite { + get { return true; } + } + + public override long Length { + get { return this.Position; } + } + + public override int Read( byte[] buffer, int offset, int count ) { + throw new InvalidOperationException(); + } + + public override long Seek( long offset, SeekOrigin origin ) { + throw new InvalidOperationException(); + } + + public override void SetLength( long value ) { + fileStream.SetLength( value ); + } + } +} \ No newline at end of file diff --git a/Source/Persistence/StandardSaveStrategy.cs b/Source/Persistence/StandardSaveStrategy.cs new file mode 100644 index 0000000..a7374a7 --- /dev/null +++ b/Source/Persistence/StandardSaveStrategy.cs @@ -0,0 +1,204 @@ +/*************************************************************************** + * StandardSaveStrategy.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Threading; +using System.Diagnostics; + +using Server; +using Server.Guilds; + +namespace Server { + public class StandardSaveStrategy : SaveStrategy { + public override string Name { + get { return "Standard"; } + } + + private Queue _decayQueue; + private bool _permitBackgroundWrite; + + public StandardSaveStrategy() { + _decayQueue = new Queue(); + } + + protected bool PermitBackgroundWrite { get { return _permitBackgroundWrite; } set { _permitBackgroundWrite = value; } } + + protected bool UseSequentialWriters { get { return (World.SaveType == World.SaveOption.Normal || !_permitBackgroundWrite); } } + + public override void Save(SaveMetrics metrics, bool permitBackgroundWrite) + { + _permitBackgroundWrite = permitBackgroundWrite; + + SaveMobiles(metrics); + SaveItems(metrics); + SaveGuilds(metrics); + + if (permitBackgroundWrite && UseSequentialWriters) //If we're permitted to write in the background, but we don't anyways, then notify. + World.NotifyDiskWriteComplete(); + } + + protected void SaveMobiles(SaveMetrics metrics) + { + Dictionary mobiles = World.Mobiles; + + GenericWriter idx; + GenericWriter tdb; + GenericWriter bin; + + if (UseSequentialWriters) + { + idx = new BinaryFileWriter( World.MobileIndexPath, false ); + tdb = new BinaryFileWriter( World.MobileTypesPath, false ); + bin = new BinaryFileWriter( World.MobileDataPath, true ); + } else { + idx = new AsyncWriter( World.MobileIndexPath, false ); + tdb = new AsyncWriter( World.MobileTypesPath, false ); + bin = new AsyncWriter( World.MobileDataPath, true ); + } + + idx.Write( ( int ) mobiles.Count ); + foreach ( Mobile m in mobiles.Values ) { + long start = bin.Position; + + idx.Write( ( int ) m.m_TypeRef ); + idx.Write( ( int ) m.Serial ); + idx.Write( ( long ) start ); + + m.Serialize( bin ); + + if ( metrics != null ) { + metrics.OnMobileSaved( ( int ) ( bin.Position - start ) ); + } + + idx.Write( ( int ) ( bin.Position - start ) ); + + m.FreeCache(); + } + + tdb.Write( ( int ) World.m_MobileTypes.Count ); + + for ( int i = 0; i < World.m_MobileTypes.Count; ++i ) + tdb.Write( World.m_MobileTypes[i].FullName ); + + idx.Close(); + tdb.Close(); + bin.Close(); + } + + protected void SaveItems(SaveMetrics metrics) + { + Dictionary items = World.Items; + + GenericWriter idx; + GenericWriter tdb; + GenericWriter bin; + + if (UseSequentialWriters) + { + idx = new BinaryFileWriter( World.ItemIndexPath, false ); + tdb = new BinaryFileWriter( World.ItemTypesPath, false ); + bin = new BinaryFileWriter( World.ItemDataPath, true ); + } else { + idx = new AsyncWriter( World.ItemIndexPath, false ); + tdb = new AsyncWriter( World.ItemTypesPath, false ); + bin = new AsyncWriter( World.ItemDataPath, true ); + } + + idx.Write( ( int ) items.Count ); + foreach ( Item item in items.Values ) { + if ( item.Decays && item.Parent == null && item.Map != Map.Internal && ( item.LastMoved + item.DecayTime ) <= DateTime.Now ) { + _decayQueue.Enqueue( item ); + } + + long start = bin.Position; + + idx.Write( ( int ) item.m_TypeRef ); + idx.Write( ( int ) item.Serial ); + idx.Write( ( long ) start ); + + item.Serialize( bin ); + + if ( metrics != null ) { + metrics.OnItemSaved( ( int ) ( bin.Position - start ) ); + } + + idx.Write( ( int ) ( bin.Position - start ) ); + + item.FreeCache(); + } + + tdb.Write( ( int ) World.m_ItemTypes.Count ); + for ( int i = 0; i < World.m_ItemTypes.Count; ++i ) + tdb.Write( World.m_ItemTypes[i].FullName ); + + idx.Close(); + tdb.Close(); + bin.Close(); + } + + protected void SaveGuilds(SaveMetrics metrics) + { + GenericWriter idx; + GenericWriter bin; + + if (UseSequentialWriters) + { + idx = new BinaryFileWriter( World.GuildIndexPath, false ); + bin = new BinaryFileWriter( World.GuildDataPath, true ); + } else { + idx = new AsyncWriter( World.GuildIndexPath, false ); + bin = new AsyncWriter( World.GuildDataPath, true ); + } + + idx.Write( ( int ) BaseGuild.List.Count ); + foreach ( BaseGuild guild in BaseGuild.List.Values ) { + long start = bin.Position; + + idx.Write( ( int ) 0 );//guilds have no typeid + idx.Write( ( int ) guild.Id ); + idx.Write( ( long ) start ); + + guild.Serialize( bin ); + + if ( metrics != null ) { + metrics.OnGuildSaved( ( int ) ( bin.Position - start ) ); + } + + idx.Write( ( int ) ( bin.Position - start ) ); + } + + idx.Close(); + bin.Close(); + } + + public override void ProcessDecay() { + while ( _decayQueue.Count > 0 ) { + Item item = _decayQueue.Dequeue(); + + if ( item.OnDecay() ) { + item.Delete(); + } + } + } + } +} \ No newline at end of file diff --git a/Source/Point3DList.cs b/Source/Point3DList.cs new file mode 100644 index 0000000..3481475 --- /dev/null +++ b/Source/Point3DList.cs @@ -0,0 +1,113 @@ +/*************************************************************************** + * Point3DList.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + public class Point3DList + { + private Point3D[] m_List; + private int m_Count; + + public Point3DList() + { + m_List = new Point3D[8]; + m_Count = 0; + } + + public int Count + { + get + { + return m_Count; + } + } + + public void Clear() + { + m_Count = 0; + } + + public Point3D Last + { + get{ return m_List[m_Count - 1]; } + } + + public Point3D this[int index] + { + get + { + return m_List[index]; + } + } + + public void Add( int x, int y, int z ) + { + if ( (m_Count + 1) > m_List.Length ) + { + Point3D[] old = m_List; + m_List = new Point3D[old.Length * 2]; + + for ( int i = 0; i < old.Length; ++i ) + m_List[i] = old[i]; + } + + m_List[m_Count].m_X = x; + m_List[m_Count].m_Y = y; + m_List[m_Count].m_Z = z; + ++m_Count; + } + + public void Add( Point3D p ) + { + if ( (m_Count + 1) > m_List.Length ) + { + Point3D[] old = m_List; + m_List = new Point3D[old.Length * 2]; + + for ( int i = 0; i < old.Length; ++i ) + m_List[i] = old[i]; + } + + m_List[m_Count].m_X = p.m_X; + m_List[m_Count].m_Y = p.m_Y; + m_List[m_Count].m_Z = p.m_Z; + ++m_Count; + } + + private static Point3D[] m_EmptyList = new Point3D[0]; + + public Point3D[] ToArray() + { + if ( m_Count == 0 ) + return m_EmptyList; + + Point3D[] list = new Point3D[m_Count]; + + for ( int i = 0; i < m_Count; ++i ) + list[i] = m_List[i]; + + m_Count = 0; + + return list; + } + } +} \ No newline at end of file diff --git a/Source/Poison.cs b/Source/Poison.cs new file mode 100644 index 0000000..cf08db1 --- /dev/null +++ b/Source/Poison.cs @@ -0,0 +1,144 @@ +/*************************************************************************** + * Poison.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Server +{ + [Parsable] + public abstract class Poison + { + /*public abstract TimeSpan Interval{ get; } + public abstract TimeSpan Duration{ get; }*/ + public abstract string Name { get; } + public abstract int Level { get; } + public abstract Timer ConstructTimer( Mobile m ); + /*public abstract void OnDamage( Mobile m, ref object state );*/ + + public override string ToString() + { + return this.Name; + } + + + private static List m_Poisons = new List(); + + public static void Register( Poison reg ) + { + string regName = reg.Name.ToLower(); + + for ( int i = 0; i < m_Poisons.Count; i++ ) + { + if ( reg.Level == m_Poisons[i].Level ) + throw new Exception( "A poison with that level already exists." ); + else if ( regName == m_Poisons[i].Name.ToLower() ) + throw new Exception( "A poison with that name already exists." ); + } + + m_Poisons.Add( reg ); + } + + public static Poison Lesser { get { return GetPoison( "Lesser" ); } } + public static Poison Regular { get { return GetPoison( "Regular" ); } } + public static Poison Greater { get { return GetPoison( "Greater" ); } } + public static Poison Deadly { get { return GetPoison( "Deadly" ); } } + public static Poison Lethal { get { return GetPoison( "Lethal" ); } } + + public static List Poisons + { + get + { + return m_Poisons; + } + } + + public static Poison Parse( string value ) + { + Poison p = null; + + int plevel; + + if ( int.TryParse( value, out plevel ) ) + p = GetPoison( plevel ); + + if ( p == null ) + p = GetPoison( value ); + + return p; + } + + public static Poison GetPoison( int level ) + { + for ( int i = 0; i < m_Poisons.Count; ++i ) + { + Poison p = m_Poisons[i]; + + if ( p.Level == level ) + return p; + } + + return null; + } + + public static Poison GetPoison( string name ) + { + for ( int i = 0; i < m_Poisons.Count; ++i ) + { + Poison p = m_Poisons[i]; + + if ( Utility.InsensitiveCompare( p.Name, name ) == 0 ) + return p; + } + + return null; + } + + public static void Serialize( Poison p, GenericWriter writer ) + { + if ( p == null ) + { + writer.Write( (byte)0 ); + } + else + { + writer.Write( (byte)1 ); + writer.Write( (byte)p.Level ); + } + } + + public static Poison Deserialize( GenericReader reader ) + { + switch ( reader.ReadByte() ) + { + case 1: return GetPoison( reader.ReadByte() ); + case 2: + //no longer used, safe to remove? + reader.ReadInt(); + reader.ReadDouble(); + reader.ReadInt(); + reader.ReadTimeSpan(); + break; + } + return null; + } + } +} diff --git a/Source/Prompt.cs b/Source/Prompt.cs new file mode 100644 index 0000000..0b2dd74 --- /dev/null +++ b/Source/Prompt.cs @@ -0,0 +1,55 @@ +/*************************************************************************** + * Prompt.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Prompts +{ + public abstract class Prompt + { + private int m_Serial; + private static int m_Serials; + + public int Serial + { + get + { + return m_Serial; + } + } + + protected Prompt() + { + do + { + m_Serial = ++m_Serials; + } while ( m_Serial == 0 ); + } + + public virtual void OnCancel( Mobile from ) + { + } + + public virtual void OnResponse( Mobile from, string text ) + { + } + } +} \ No newline at end of file diff --git a/Source/QuestArrow.cs b/Source/QuestArrow.cs new file mode 100644 index 0000000..dbaa07a --- /dev/null +++ b/Source/QuestArrow.cs @@ -0,0 +1,123 @@ +/*************************************************************************** + * QuestArrow.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server; +using Server.Network; + +namespace Server +{ + public class QuestArrow + { + private Mobile m_Mobile; + private Mobile m_Target; + private bool m_Running; + + public Mobile Mobile + { + get + { + return m_Mobile; + } + } + + public Mobile Target + { + get + { + return m_Target; + } + } + + public bool Running + { + get + { + return m_Running; + } + } + + public void Update() + { + Update( m_Target.X, m_Target.Y ); + } + + public void Update( int x, int y ) + { + if ( !m_Running ) + return; + + NetState ns = m_Mobile.NetState; + + if ( ns == null ) + return; + + if ( ns.HighSeas ) + ns.Send( new SetArrowHS( x, y, m_Target.Serial ) ); + else + ns.Send( new SetArrow( x, y ) ); + } + + public void Stop() + { + Stop( m_Target.X, m_Target.Y ); + } + + public void Stop( int x, int y ) + { + if ( !m_Running ) + return; + + m_Mobile.ClearQuestArrow(); + + NetState ns = m_Mobile.NetState; + + if ( ns != null ) { + if ( ns.HighSeas ) + ns.Send( new CancelArrowHS( x, y, m_Target.Serial ) ); + else + ns.Send( new CancelArrow() ); + } + + m_Running = false; + OnStop(); + } + + public virtual void OnStop() + { + } + + public virtual void OnClick( bool rightClick ) + { + } + + public QuestArrow( Mobile m, Mobile t ) + { + m_Running = true; + m_Mobile = m; + m_Target = t; + } + + public QuestArrow( Mobile m, Mobile t, int x, int y ) : this( m, t ) + { + Update( x, y ); + } + } +} \ No newline at end of file diff --git a/Source/Race.cs b/Source/Race.cs new file mode 100644 index 0000000..7c26c35 --- /dev/null +++ b/Source/Race.cs @@ -0,0 +1,211 @@ +/*************************************************************************** + * Race.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; +using Server.Network; + +namespace Server +{ + [Parsable] + public abstract class Race + { + public static Race DefaultRace { get { return m_Races[0]; } } + + private static Race[] m_Races = new Race[0x100]; + + public static Race[] Races { get { return m_Races; } } + + public static Race Human { get { return m_Races[0]; } } + public static Race Orc { get { return m_Races[1]; } } + + private static List m_AllRaces = new List(); + + public static List AllRaces { get { return m_AllRaces; } } + + private int m_RaceID, m_RaceIndex; + + private string m_Name, m_PluralName; + + private static string[] m_RaceNames; + private static Race[] m_RaceValues; + + public static string[] GetRaceNames() + { + CheckNamesAndValues(); + return m_RaceNames; + } + + public static Race[] GetRaceValues() + { + CheckNamesAndValues(); + return m_RaceValues; + } + + public static Race Parse( string value ) + { + CheckNamesAndValues(); + + for( int i = 0; i < m_RaceNames.Length; ++i ) + { + if( Insensitive.Equals( m_RaceNames[i], value ) ) + return m_RaceValues[i]; + } + + int index; + if( int.TryParse( value, out index ) ) + { + if( index >= 0 && index < m_Races.Length && m_Races[index] != null ) + return m_Races[index]; + } + + throw new ArgumentException( "Invalid race name" ); + } + + private static void CheckNamesAndValues() + { + if( m_RaceNames != null && m_RaceNames.Length == m_AllRaces.Count ) + return; + + m_RaceNames = new string[m_AllRaces.Count]; + m_RaceValues = new Race[m_AllRaces.Count]; + + for( int i = 0; i < m_AllRaces.Count; ++i ) + { + Race race = m_AllRaces[i]; + + m_RaceNames[i] = race.Name; + m_RaceValues[i] = race; + } + } + + public override string ToString() + { + return m_Name; + } + + private int m_MaleBody, m_FemaleBody, m_MaleGhostBody, m_FemaleGhostBody; + + private Expansion m_RequiredExpansion; + + public Expansion RequiredExpansion { get { return m_RequiredExpansion; } } + + public int MaleBody { get { return m_MaleBody; } } + public int MaleGhostBody { get { return m_MaleGhostBody; } } + + public int FemaleBody { get { return m_FemaleBody; } } + public int FemaleGhostBody { get { return m_FemaleGhostBody; } } + + protected Race( int raceID, int raceIndex, string name, string pluralName, int maleBody, int femaleBody, int maleGhostBody, int femaleGhostBody, Expansion requiredExpansion ) + { + m_RaceID = raceID; + m_RaceIndex = raceIndex; + + m_Name = name; + + m_MaleBody = maleBody; + m_FemaleBody = femaleBody; + m_MaleGhostBody = maleGhostBody; + m_FemaleGhostBody = femaleGhostBody; + + m_RequiredExpansion = requiredExpansion; + m_PluralName = pluralName; + } + + public virtual bool ValidateHair( Mobile m, int itemID ) { return ValidateHair( m.Female, itemID ); } + public abstract bool ValidateHair( bool female, int itemID ); + + public virtual int RandomHair( Mobile m ) { return RandomHair( m.Female ); } + public abstract int RandomHair( bool female ); + + public virtual bool ValidateFacialHair( Mobile m, int itemID ) { return ValidateFacialHair( m.Female, itemID ); } + public abstract bool ValidateFacialHair( bool female, int itemID ); + + public virtual int RandomFacialHair( Mobile m ) { return RandomFacialHair( m.Female ); } + public abstract int RandomFacialHair( bool female ); //For the *ahem* bearded ladies + + public abstract int ClipSkinHue( int hue ); + public abstract int RandomSkinHue(); + + public abstract int ClipHairHue( int hue ); + public abstract int RandomHairHue(); + + public virtual int Body( Mobile m ) + { + if( m.Alive ) + return AliveBody( m.Female ); + + return GhostBody( m.Female ); + } + + public virtual int AliveBody( Mobile m ) { return AliveBody( m.Female ); } + public virtual int AliveBody( bool female ) + { + return (female ? m_FemaleBody : m_MaleBody); + } + + public virtual int GhostBody( Mobile m ) { return GhostBody( m.Female ); } + public virtual int GhostBody( bool female ) + { + return (female ? m_FemaleGhostBody : m_MaleGhostBody); + } + + public int RaceID + { + get + { + return m_RaceID; + } + } + + public int RaceIndex + { + get + { + return m_RaceIndex; + } + } + + public string Name + { + get + { + return m_Name; + } + set + { + m_Name = value; + } + } + + public string PluralName + { + get + { + return m_PluralName; + } + set + { + m_PluralName = value; + } + } + } +} \ No newline at end of file diff --git a/Source/Region.cs b/Source/Region.cs new file mode 100644 index 0000000..ec22a6a --- /dev/null +++ b/Source/Region.cs @@ -0,0 +1,1277 @@ +/*************************************************************************** + * Region.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using Server.Network; +using Server.Targeting; + +namespace Server +{ + public enum MusicName + { + Invalid = -1, + OldUlt01 = 0, + Create1, + DragFlit, + OldUlt02, + OldUlt03, + OldUlt04, + OldUlt05, + OldUlt06, + Stones2, + Britain1, + Britain2, + Bucsden, + Jhelom, + LBCastle, + Linelle, + Magincia, + Minoc, + Ocllo, + Samlethe, + Serpents, + Skarabra, + Trinsic, + Vesper, + Wind, + Yew, + Cave01, + Dungeon9, + Forest_a, + InTown01, + Jungle_a, + Mountn_a, + Plains_a, + Sailing, + Swamp_a, + Tavern01, + Tavern02, + Tavern03, + Tavern04, + Combat1, + Combat2, + Combat3, + Approach, + Death, + Victory, + BTCastle, + Nujelm, + Dungeon2, + Cove, + Moonglow, + Dungeon3, + Tavern05, + Travel + } + + public class Region : IComparable + { + private static List m_Regions = new List(); + + public static List Regions{ get{ return m_Regions; } } + + public static Region Find( Point3D p, Map map ) + { + if ( map == null ) + return Map.Internal.DefaultRegion; + + Sector sector = map.GetSector( p ); + List list = sector.RegionRects; + + for ( int i = 0; i < list.Count; ++i ) + { + RegionRect regRect = list[i]; + + if ( regRect.Contains( p ) ) + return regRect.Region; + } + + return map.DefaultRegion; + } + + private static Type m_DefaultRegionType = typeof( Region ); + public static Type DefaultRegionType{ get{ return m_DefaultRegionType; } set{ m_DefaultRegionType = value; } } + + private static TimeSpan m_StaffLogoutDelay = TimeSpan.FromSeconds( 10.0 ); + private static TimeSpan m_DefaultLogoutDelay = TimeSpan.FromMinutes( 5.0 ); + + public static TimeSpan StaffLogoutDelay{ get{ return m_StaffLogoutDelay; } set{ m_StaffLogoutDelay = value; } } + public static TimeSpan DefaultLogoutDelay{ get{ return m_DefaultLogoutDelay; } set{ m_DefaultLogoutDelay = value; } } + + public static readonly int DefaultPriority = 50; + + public static readonly int MinZ = sbyte.MinValue; + public static readonly int MaxZ = sbyte.MaxValue + 1; + + public static Rectangle3D ConvertTo3D( Rectangle2D rect ) + { + return new Rectangle3D( new Point3D( rect.Start, MinZ ), new Point3D( rect.End, MaxZ ) ); + } + + public static Rectangle3D[] ConvertTo3D( Rectangle2D[] rects ) + { + Rectangle3D[] ret = new Rectangle3D[rects.Length]; + + for ( int i = 0; i < ret.Length; i++ ) + { + ret[i] = ConvertTo3D( rects[i] ); + } + + return ret; + } + + + private string m_Name; + private Map m_Map; + private Region m_Parent; + private List m_Children = new List(); + private Rectangle3D[] m_Area; + private Sector[] m_Sectors; + private bool m_Dynamic; + private int m_Priority; + private int m_ChildLevel; + private bool m_Registered; + + private Point3D m_GoLocation; + private MusicName m_Music; + + public string Name{ get{ return m_Name; } } + public Map Map{ get{ return m_Map; } } + public Region Parent{ get{ return m_Parent; } } + public List Children{ get{ return m_Children; } } + public Rectangle3D[] Area{ get{ return m_Area; } } + public Sector[] Sectors{ get{ return m_Sectors; } } + public bool Dynamic{ get{ return m_Dynamic; } } + public int Priority{ get{ return m_Priority; } } + public int ChildLevel{ get{ return m_ChildLevel; } } + public bool Registered{ get{ return m_Registered; } } + + public Point3D GoLocation{ get{ return m_GoLocation; } set { m_GoLocation = value; } } + public MusicName Music{ get{ return m_Music; } set{ m_Music = value; } } + + public bool IsDefault{ get{ return m_Map.DefaultRegion == this; } } + public virtual MusicName DefaultMusic{ get{ return m_Parent != null ? m_Parent.Music : MusicName.Invalid; } } + + public Region( string name, Map map, int priority, params Rectangle2D[] area ) : this( name, map, priority, ConvertTo3D( area ) ) + { + } + + public Region( string name, Map map, int priority, params Rectangle3D[] area ) : this( name, map, null, area ) + { + m_Priority = priority; + } + + public Region( string name, Map map, Region parent, params Rectangle2D[] area ) : this( name, map, parent, ConvertTo3D( area ) ) + { + } + + public Region( string name, Map map, Region parent, params Rectangle3D[] area ) + { + m_Name = name; + m_Map = map; + m_Parent = parent; + m_Area = area; + m_Dynamic = true; + m_Music = this.DefaultMusic; + + if ( m_Parent == null ) + { + m_ChildLevel = 0; + m_Priority = DefaultPriority; + } + else + { + m_ChildLevel = m_Parent.ChildLevel + 1; + m_Priority = m_Parent.Priority; + } + } + + public void Register() + { + if ( m_Registered ) + return; + + OnRegister(); + + m_Registered = true; + + if ( m_Parent != null ) + { + m_Parent.m_Children.Add( this ); + m_Parent.OnChildAdded( this ); + } + + m_Regions.Add( this ); + + m_Map.RegisterRegion( this ); + + List sectors = new List(); + + for ( int i = 0; i < m_Area.Length; i++ ) + { + Rectangle3D rect = m_Area[i]; + + Point2D start = m_Map.Bound( new Point2D( rect.Start ) ); + Point2D end = m_Map.Bound( new Point2D( rect.End ) ); + + Sector startSector = m_Map.GetSector( start ); + Sector endSector = m_Map.GetSector( end ); + + for ( int x = startSector.X; x <= endSector.X; x++ ) + { + for ( int y = startSector.Y; y <= endSector.Y; y++ ) + { + Sector sector = m_Map.GetRealSector( x, y ); + + sector.OnEnter( this, rect ); + + if ( !sectors.Contains( sector ) ) + sectors.Add( sector ); + } + } + } + + m_Sectors = sectors.ToArray(); + } + + public void Unregister() + { + if ( !m_Registered ) + return; + + OnUnregister(); + + m_Registered = false; + + if ( m_Children.Count > 0 ) + Console.WriteLine( "Warning: Unregistering region '{0}' with children", this ); + + if ( m_Parent != null ) + { + m_Parent.m_Children.Remove( this ); + m_Parent.OnChildRemoved( this ); + } + + m_Regions.Remove( this ); + + m_Map.UnregisterRegion( this ); + + if ( m_Sectors != null ) + { + for ( int i = 0; i < m_Sectors.Length; i++ ) + m_Sectors[i].OnLeave( this ); + } + + m_Sectors = null; + } + + public bool Contains( Point3D p ) + { + for ( int i = 0; i < m_Area.Length; i++ ) + { + Rectangle3D rect = m_Area[i]; + + if ( rect.Contains( p ) ) + return true; + } + + return false; + } + + public bool IsChildOf( Region region ) + { + if ( region == null ) + return false; + + Region p = m_Parent; + + while ( p != null ) + { + if ( p == region ) + return true; + + p = p.m_Parent; + } + + return false; + } + + public Region GetRegion( Type regionType ) + { + if ( regionType == null ) + return null; + + Region r = this; + + do + { + if ( regionType.IsAssignableFrom( r.GetType() ) ) + return r; + + r = r.m_Parent; + } + while ( r != null ); + + return null; + } + + public Region GetRegion( string regionName ) + { + if ( regionName == null ) + return null; + + Region r = this; + + do + { + if ( r.m_Name == regionName ) + return r; + + r = r.m_Parent; + } + while ( r != null ); + + return null; + } + + public bool IsPartOf( Region region ) + { + if ( this == region ) + return true; + + return IsChildOf( region ); + } + + public bool IsPartOf( Type regionType ) + { + return ( GetRegion( regionType ) != null ); + } + + public bool IsPartOf( string regionName ) + { + return ( GetRegion( regionName ) != null ); + } + + public virtual bool AcceptsSpawnsFrom( Region region ) + { + if ( !AllowSpawn() ) + return false; + + if ( region == this ) + return true; + + if ( m_Parent != null ) + return m_Parent.AcceptsSpawnsFrom( region ); + + return false; + } + + public List GetPlayers() + { + List list = new List(); + + if ( m_Sectors != null ) + { + for ( int i = 0; i < m_Sectors.Length; i++ ) + { + Sector sector = m_Sectors[i]; + + foreach ( Mobile player in sector.Players ) + { + if ( player.Region.IsPartOf( this ) ) + list.Add( player ); + } + } + } + + return list; + } + + public int GetPlayerCount() + { + int count = 0; + + if ( m_Sectors != null ) + { + for ( int i = 0; i < m_Sectors.Length; i++ ) + { + Sector sector = m_Sectors[i]; + + foreach ( Mobile player in sector.Players ) + { + if ( player.Region.IsPartOf( this ) ) + count++; + } + } + } + + return count; + } + + public List GetMobiles() + { + List list = new List(); + + if ( m_Sectors != null ) + { + for ( int i = 0; i < m_Sectors.Length; i++ ) + { + Sector sector = m_Sectors[i]; + + foreach ( Mobile mobile in sector.Mobiles ) + { + if ( mobile.Region.IsPartOf( this ) ) + list.Add( mobile ); + } + } + } + + return list; + } + + public int GetMobileCount() + { + int count = 0; + + if ( m_Sectors != null ) + { + for ( int i = 0; i < m_Sectors.Length; i++ ) + { + Sector sector = m_Sectors[i]; + + foreach ( Mobile mobile in sector.Mobiles ) + { + if ( mobile.Region.IsPartOf( this ) ) + count++; + } + } + } + + return count; + } + + int IComparable.CompareTo( object obj ) + { + if ( obj == null ) + return 1; + + Region reg = obj as Region; + + if ( reg == null ) + throw new ArgumentException( "obj is not a Region", "obj" ); + + // Dynamic regions go first + if ( this.Dynamic ) + { + if ( !reg.Dynamic ) + return -1; + } + else if ( reg.Dynamic ) + { + return 1; + } + + int thisPriority = this.Priority; + int regPriority = reg.Priority; + + if ( thisPriority != regPriority ) + return ( regPriority - thisPriority ); + + return ( reg.ChildLevel - this.ChildLevel ); + } + + public override string ToString() + { + if ( m_Name != null ) + return m_Name; + else + return GetType().Name; + } + + + public virtual void OnRegister() + { + } + + public virtual void OnUnregister() + { + } + + public virtual void OnChildAdded( Region child ) + { + } + + public virtual void OnChildRemoved( Region child ) + { + } + + public virtual bool OnMoveInto( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation ) + { + return ( m.WalkRegion == null || AcceptsSpawnsFrom( m.WalkRegion ) ); + } + + public virtual void OnEnter( Mobile m ) + { + } + + public virtual void OnExit( Mobile m ) + { + } + + public virtual void MakeGuard( Mobile focus ) + { + if ( m_Parent != null ) + m_Parent.MakeGuard( focus ); + } + + public virtual Type GetResource( Type type ) + { + if ( m_Parent != null ) + return m_Parent.GetResource( type ); + + return type; + } + + public virtual bool CanUseStuckMenu( Mobile m ) + { + if ( m_Parent != null ) + return m_Parent.CanUseStuckMenu( m ); + + return true; + } + + public virtual void OnAggressed( Mobile aggressor, Mobile aggressed, bool criminal ) + { + if ( m_Parent != null ) + m_Parent.OnAggressed( aggressor, aggressed, criminal ); + } + + public virtual void OnDidHarmful( Mobile harmer, Mobile harmed ) + { + if ( m_Parent != null ) + m_Parent.OnDidHarmful( harmer, harmed ); + } + + public virtual void OnGotHarmful( Mobile harmer, Mobile harmed ) + { + if ( m_Parent != null ) + m_Parent.OnGotHarmful( harmer, harmed ); + } + + public virtual void OnLocationChanged( Mobile m, Point3D oldLocation ) + { + if ( m_Parent != null ) + m_Parent.OnLocationChanged( m, oldLocation ); + } + + public virtual bool OnTarget( Mobile m, Target t, object o ) + { + if ( m_Parent != null ) + return m_Parent.OnTarget( m, t, o ); + + return true; + } + + public virtual bool OnCombatantChange( Mobile m, Mobile Old, Mobile New ) + { + if ( m_Parent != null ) + return m_Parent.OnCombatantChange( m, Old, New ); + + return true; + } + + public virtual bool AllowHousing( Mobile from, Point3D p ) + { + if ( m_Parent != null ) + return m_Parent.AllowHousing( from, p ); + + return true; + } + + public virtual bool NoMounts( Mobile from, Point3D p ) + { + if ( m_Parent != null ) + return m_Parent.NoMounts( from, p ); + + return false; + } + + public virtual bool SendInaccessibleMessage( Item item, Mobile from ) + { + if ( m_Parent != null ) + return m_Parent.SendInaccessibleMessage( item, from ); + + return false; + } + + public virtual bool CheckAccessibility( Item item, Mobile from ) + { + if ( m_Parent != null ) + return m_Parent.CheckAccessibility( item, from ); + + return true; + } + + public virtual bool OnDecay( Item item ) + { + if ( m_Parent != null ) + return m_Parent.OnDecay( item ); + + return true; + } + + public virtual bool AllowHarmful( Mobile from, Mobile target ) + { + if ( m_Parent != null ) + return m_Parent.AllowHarmful( from, target ); + + if ( Mobile.AllowHarmfulHandler != null ) + return Mobile.AllowHarmfulHandler( from, target ); + + return true; + } + + public virtual void OnCriminalAction( Mobile m, bool message ) + { + if ( m_Parent != null ) + m_Parent.OnCriminalAction( m, message ); + else if ( message ) + m.SendLocalizedMessage( 1005040 ); // You've committed a criminal act!! + } + + public virtual bool AllowBeneficial( Mobile from, Mobile target ) + { + if ( m_Parent != null ) + return m_Parent.AllowBeneficial( from, target ); + + if ( Mobile.AllowBeneficialHandler != null ) + return Mobile.AllowBeneficialHandler( from, target ); + + return true; + } + + public virtual void OnBeneficialAction( Mobile helper, Mobile target ) + { + if ( m_Parent != null ) + m_Parent.OnBeneficialAction( helper, target ); + } + + public virtual void OnGotBeneficialAction( Mobile helper, Mobile target ) + { + if ( m_Parent != null ) + m_Parent.OnGotBeneficialAction( helper, target ); + } + + public virtual void SpellDamageScalar( Mobile caster, Mobile target, ref double damage ) + { + if ( m_Parent != null ) + m_Parent.SpellDamageScalar( caster, target, ref damage ); + } + + public virtual void OnSpeech( SpeechEventArgs args ) + { + if ( m_Parent != null ) + m_Parent.OnSpeech( args ); + } + + public virtual bool OnSkillUse( Mobile m, int Skill ) + { + if ( m_Parent != null ) + return m_Parent.OnSkillUse( m, Skill ); + + return true; + } + + public virtual bool OnBeginSpellCast( Mobile m, ISpell s ) + { + if ( m_Parent != null ) + return m_Parent.OnBeginSpellCast( m, s ); + + return true; + } + + public virtual void OnSpellCast( Mobile m, ISpell s ) + { + if ( m_Parent != null ) + m_Parent.OnSpellCast( m, s ); + } + + public virtual bool OnResurrect( Mobile m ) + { + if ( m_Parent != null ) + return m_Parent.OnResurrect( m ); + + return true; + } + + public virtual bool OnBeforeDeath( Mobile m ) + { + if ( m_Parent != null ) + return m_Parent.OnBeforeDeath( m ); + + return true; + } + + public virtual void OnDeath( Mobile m ) + { + if ( m_Parent != null ) + m_Parent.OnDeath( m ); + } + + public virtual bool OnDamage( Mobile m, ref int Damage ) + { + if ( m_Parent != null ) + return m_Parent.OnDamage( m, ref Damage ); + + return true; + } + + public virtual bool OnHeal( Mobile m, ref int Heal ) + { + if ( m_Parent != null ) + return m_Parent.OnHeal( m, ref Heal ); + + return true; + } + + public virtual bool OnDoubleClick( Mobile m, object o ) + { + if ( m_Parent != null ) + return m_Parent.OnDoubleClick( m, o ); + + return true; + } + + public virtual bool OnSingleClick( Mobile m, object o ) + { + if ( m_Parent != null ) + return m_Parent.OnSingleClick( m, o ); + + return true; + } + + public virtual bool AllowSpawn() + { + if ( m_Parent != null ) + return m_Parent.AllowSpawn(); + + return true; + } + + public virtual void AlterLightLevel( Mobile m, ref int global, ref int personal ) + { + if ( m_Parent != null ) + m_Parent.AlterLightLevel( m, ref global, ref personal ); + } + + public virtual TimeSpan GetLogoutDelay( Mobile m ) + { + if ( m_Parent != null ) + return m_Parent.GetLogoutDelay( m ); + else if ( m.AccessLevel > AccessLevel.Player ) + return m_StaffLogoutDelay; + else + return m_DefaultLogoutDelay; + } + + + internal static bool CanMove( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation, Map map ) + { + Region oldRegion = m.Region; + Region newRegion = Find( newLocation, map ); + + while ( oldRegion != newRegion ) + { + if ( !newRegion.OnMoveInto( m, d, newLocation, oldLocation ) ) + return false; + + if ( newRegion.m_Parent == null ) + return true; + + newRegion = newRegion.m_Parent; + } + + return true; + } + + internal static void OnRegionChange( Mobile m, Region oldRegion, Region newRegion ) + { + if ( newRegion != null && m.NetState != null ) + { + m.CheckLightLevels( false ); + + if ( oldRegion == null || oldRegion.Music != newRegion.Music ) + { + m.Send( PlayMusic.GetInstance( newRegion.Music ) ); + } + } + + Region oldR = oldRegion; + Region newR = newRegion; + + while ( oldR != newR ) + { + int oldRChild = ( oldR != null ? oldR.ChildLevel : -1 ); + int newRChild = ( newR != null ? newR.ChildLevel : -1 ); + + if ( oldRChild >= newRChild ) + { + oldR.OnExit( m ); + oldR = oldR.Parent; + } + + if ( newRChild >= oldRChild ) + { + newR.OnEnter( m ); + newR = newR.Parent; + } + } + } + + internal static void Load() + { + if ( !System.IO.File.Exists( "Data/Config/Regions.xml" ) ) + { + Console.WriteLine( "Error: Data/Config/Regions.xml does not exist" ); + return; + } + + Console.Write( "Regions: Loading..." ); + + XmlDocument doc = new XmlDocument(); + doc.Load( System.IO.Path.Combine( Core.BaseDirectory, "Data/Config/Regions.xml" ) ); + + XmlElement root = doc["ServerRegions"]; + + if ( root == null ) + { + Console.WriteLine( "Could not find root element 'ServerRegions' in Regions.xml" ); + } + else + { + foreach ( XmlElement facet in root.SelectNodes( "Facet" ) ) + { + Map map = null; + if ( ReadMap( facet, "name", ref map ) ) + { + if ( map == Map.Internal ) + Console.WriteLine( "Invalid internal map in a facet element" ); + else + LoadRegions( facet, map, null ); + } + } + } + + Console.WriteLine( "done" ); + } + + private static void LoadRegions( XmlElement xml, Map map, Region parent ) + { + foreach ( XmlElement xmlReg in xml.SelectNodes( "region" ) ) + { + Type type = DefaultRegionType; + + ReadType( xmlReg, "type", ref type, false ); + + if ( !typeof( Region ).IsAssignableFrom( type ) ) + { + Console.WriteLine( "Invalid region type '{0}' in regions.xml", type.FullName ); + continue; + } + + Region region = null; + try + { + region = (Region) Activator.CreateInstance( type, new object[] { xmlReg, map, parent } ); + } + catch ( Exception ex ) + { + Console.WriteLine( "Error during the creation of region type '{0}': {1}", type.FullName, ex ); + continue; + } + + region.Register(); + + LoadRegions( xmlReg, map, region ); + } + } + + public Region( XmlElement xml, Map map, Region parent ) + { + m_Map = map; + m_Parent = parent; + m_Dynamic = false; + + if ( m_Parent == null ) + { + m_ChildLevel = 0; + m_Priority = DefaultPriority; + } + else + { + m_ChildLevel = m_Parent.ChildLevel + 1; + m_Priority = m_Parent.Priority; + } + + ReadString( xml, "name", ref m_Name, false ); + + if ( parent == null ) + ReadInt32( xml, "priority", ref m_Priority, false ); + + + int minZ = MinZ; + int maxZ = MaxZ; + + XmlElement zrange = xml["zrange"]; + ReadInt32( zrange, "min", ref minZ, false ); + ReadInt32( zrange, "max", ref maxZ, false ); + + + List area = new List(); + foreach ( XmlElement xmlRect in xml.SelectNodes( "rect" ) ) + { + Rectangle3D rect = new Rectangle3D(); + if ( ReadRectangle3D( xmlRect, minZ, maxZ, ref rect ) ) + area.Add( rect ); + } + + m_Area = area.ToArray(); + + if ( m_Area.Length == 0 ) + Console.WriteLine( "Empty area for region '{0}'", this ); + + + if ( !ReadPoint3D( xml["go"], map, ref m_GoLocation, false ) && m_Area.Length > 0 ) + { + Point3D start = m_Area[0].Start; + Point3D end = m_Area[0].End; + + int x = start.X + (end.X - start.X) / 2; + int y = start.Y + (end.Y - start.Y) / 2; + + m_GoLocation = new Point3D( x, y, m_Map.GetAverageZ( x, y ) ); + } + + + MusicName music = this.DefaultMusic; + + ReadEnum( xml["music"], "name", ref music, false ); + + m_Music = music; + } + + protected static string GetAttribute( XmlElement xml, string attribute, bool mandatory ) + { + if ( xml == null ) + { + if ( mandatory ) + Console.WriteLine( "Missing element for attribute '{0}'", attribute ); + + return null; + } + else if ( xml.HasAttribute( attribute ) ) + { + return xml.GetAttribute( attribute ); + } + else + { + if ( mandatory ) + Console.WriteLine( "Missing attribute '{0}' in element '{1}'", attribute, xml.Name ); + + return null; + } + } + + public static bool ReadString( XmlElement xml, string attribute, ref string value ) + { + return ReadString( xml, attribute, ref value, true ); + } + + public static bool ReadString( XmlElement xml, string attribute, ref string value, bool mandatory ) + { + string s = GetAttribute( xml, attribute, mandatory ); + + if ( s == null ) + return false; + + value = s; + return true; + } + + public static bool ReadInt32( XmlElement xml, string attribute, ref int value ) + { + return ReadInt32( xml, attribute, ref value, true ); + } + + public static bool ReadInt32( XmlElement xml, string attribute, ref int value, bool mandatory ) + { + string s = GetAttribute( xml, attribute, mandatory ); + + if ( s == null ) + return false; + + try + { + value = XmlConvert.ToInt32( s ); + } + catch + { + Console.WriteLine( "Could not parse integer attribute '{0}' in element '{1}'", attribute, xml.Name ); + return false; + } + + return true; + } + + public static bool ReadBoolean( XmlElement xml, string attribute, ref bool value ) + { + return ReadBoolean( xml, attribute, ref value, true ); + } + + public static bool ReadBoolean( XmlElement xml, string attribute, ref bool value, bool mandatory ) + { + string s = GetAttribute( xml, attribute, mandatory ); + + if ( s == null ) + return false; + + try + { + value = XmlConvert.ToBoolean( s ); + } + catch + { + Console.WriteLine( "Could not parse boolean attribute '{0}' in element '{1}'", attribute, xml.Name ); + return false; + } + + return true; + } + + public static bool ReadDateTime( XmlElement xml, string attribute, ref DateTime value ) + { + return ReadDateTime( xml, attribute, ref value, true ); + } + + public static bool ReadDateTime( XmlElement xml, string attribute, ref DateTime value, bool mandatory ) + { + string s = GetAttribute( xml, attribute, mandatory ); + + if ( s == null ) + return false; + + try + { + value = XmlConvert.ToDateTime( s, XmlDateTimeSerializationMode.Local ); + } + catch + { + Console.WriteLine( "Could not parse DateTime attribute '{0}' in element '{1}'", attribute, xml.Name ); + return false; + } + + return true; + } + + public static bool ReadTimeSpan( XmlElement xml, string attribute, ref TimeSpan value ) + { + return ReadTimeSpan( xml, attribute, ref value, true ); + } + + public static bool ReadTimeSpan( XmlElement xml, string attribute, ref TimeSpan value, bool mandatory ) + { + string s = GetAttribute( xml, attribute, mandatory ); + + if ( s == null ) + return false; + + try + { + value = XmlConvert.ToTimeSpan( s ); + } + catch + { + Console.WriteLine( "Could not parse TimeSpan attribute '{0}' in element '{1}'", attribute, xml.Name ); + return false; + } + + return true; + } + + public static bool ReadEnum( XmlElement xml, string attribute, ref T value ) + { + return ReadEnum( xml, attribute, ref value, true ); + } + + public static bool ReadEnum( XmlElement xml, string attribute, ref T value, bool mandatory ) + { + string s = GetAttribute( xml, attribute, mandatory ); + + if ( s == null ) + return false; + + Type type = typeof(T); + + try + { + value = (T)Enum.Parse(type, s, true); + //TODO: On .NET 4.0, use Enum.TryParse + } + catch + { + Console.WriteLine( "Could not parse {0} enum attribute '{1}' in element '{2}'", type, attribute, xml.Name ); + return false; + } + + return true; + } + + public static bool ReadMap( XmlElement xml, string attribute, ref Map value ) + { + return ReadMap( xml, attribute, ref value, true ); + } + + public static bool ReadMap( XmlElement xml, string attribute, ref Map value, bool mandatory ) + { + string s = GetAttribute( xml, attribute, mandatory ); + + if ( s == null ) + return false; + + try + { + value = Map.Parse( s ); + } + catch + { + Console.WriteLine( "Could not parse Map attribute '{0}' in element '{1}'", attribute, xml.Name ); + return false; + } + + return true; + } + + public static bool ReadType( XmlElement xml, string attribute, ref Type value ) + { + return ReadType( xml, attribute, ref value, true ); + } + + public static bool ReadType( XmlElement xml, string attribute, ref Type value, bool mandatory ) + { + string s = GetAttribute( xml, attribute, mandatory ); + + if ( s == null ) + return false; + + Type type; + try + { + type = ScriptCompiler.FindTypeByName( s, false ); + } + catch + { + Console.WriteLine( "Could not parse Type attribute '{0}' in element '{1}'", attribute, xml.Name ); + return false; + } + + if ( type == null ) + { + Console.WriteLine( "Could not find Type '{0}'", s ); + return false; + } + + value = type; + return true; + } + + public static bool ReadPoint3D( XmlElement xml, Map map, ref Point3D value ) + { + return ReadPoint3D( xml, map, ref value, true ); + } + + public static bool ReadPoint3D( XmlElement xml, Map map, ref Point3D value, bool mandatory ) + { + int x = 0, y = 0, z = 0; + + bool xyOk = ReadInt32( xml, "x", ref x, mandatory ) & ReadInt32( xml, "y", ref y, mandatory ); + bool zOk = ReadInt32( xml, "z", ref z, mandatory && map == null ); + + if ( xyOk && ( zOk || map != null ) ) + { + if ( !zOk ) + z = map.GetAverageZ( x, y ); + + value = new Point3D( x, y, z ); + return true; + } + + return false; + } + + public static bool ReadRectangle3D( XmlElement xml, int defaultMinZ, int defaultMaxZ, ref Rectangle3D value ) + { + return ReadRectangle3D( xml, defaultMinZ, defaultMaxZ, ref value, true ); + } + + public static bool ReadRectangle3D( XmlElement xml, int defaultMinZ, int defaultMaxZ, ref Rectangle3D value, bool mandatory ) + { + int x1 = 0, y1 = 0, x2 = 0, y2 = 0; + + if ( xml.HasAttribute( "x" ) ) + { + if ( ReadInt32( xml, "x", ref x1, mandatory ) + & ReadInt32( xml, "y", ref y1, mandatory ) + & ReadInt32( xml, "width", ref x2, mandatory ) + & ReadInt32( xml, "height", ref y2, mandatory ) ) + { + x2 += x1; + y2 += y1; + } + else + { + return false; + } + } + else + { + if ( !ReadInt32( xml, "x1", ref x1, mandatory ) + | !ReadInt32( xml, "y1", ref y1, mandatory ) + | !ReadInt32( xml, "x2", ref x2, mandatory ) + | !ReadInt32( xml, "y2", ref y2, mandatory ) ) + { + return false; + } + } + + int z1 = defaultMinZ; + int z2 = defaultMaxZ; + + ReadInt32( xml, "zmin", ref z1, false ); + ReadInt32( xml, "zmax", ref z2, false ); + + value = new Rectangle3D( new Point3D( x1, y1, z1 ), new Point3D( x2, y2, z2 ) ); + + return true; + } + } +} \ No newline at end of file diff --git a/Source/ScriptCompiler.cs b/Source/ScriptCompiler.cs new file mode 100644 index 0000000..2c60c8b --- /dev/null +++ b/Source/ScriptCompiler.cs @@ -0,0 +1,649 @@ +/*************************************************************************** + * ScriptCompiler.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.CodeDom; +using System.CodeDom.Compiler; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Reflection; +using System.Security.Cryptography; +using Microsoft.CSharp; +using Microsoft.VisualBasic; +using System.Diagnostics; + +namespace Server +{ + public static class ScriptCompiler + { + private static Assembly[] m_Assemblies; + + public static Assembly[] Assemblies + { + get + { + return m_Assemblies; + } + set + { + m_Assemblies = value; + } + } + + private static List m_AdditionalReferences = new List(); + + public static string[] GetReferenceAssemblies() + { + List list = new List(); + + string path = Path.Combine( Core.BaseDirectory, "Data/Config/Assemblies.cfg" ); + + if( File.Exists( path ) ) + { + using( StreamReader ip = new StreamReader( path ) ) + { + string line; + + while( (line = ip.ReadLine()) != null ) + { + if( line.Length > 0 && !line.StartsWith( "#" ) ) + list.Add( line ); + } + } + } + + list.Add( Core.ExePath ); + + list.AddRange( m_AdditionalReferences ); + + return list.ToArray(); + } + + public static string GetDefines() + { + StringBuilder sb = null; + +#if MONO + AppendDefine( ref sb, "/d:MONO" ); +#endif + + //These two defines are legacy, ie, depreciated. + if( Core.Is64Bit ) + AppendDefine( ref sb, "/d:x64" ); + + AppendDefine( ref sb, "/d:Framework_2_0" ); + +#if Framework_4_0 + AppendDefine( ref sb, "/d:Framework_4_0" ); +#endif + + return (sb == null ? null : sb.ToString()); + } + + public static void AppendDefine( ref StringBuilder sb, string define ) + { + if( sb == null ) + sb = new StringBuilder(); + else + sb.Append( ' ' ); + + sb.Append( define ); + } + + private static byte[] GetHashCode( string compiledFile, string[] scriptFiles, bool debug ) + { + using( MemoryStream ms = new MemoryStream() ) + { + using( BinaryWriter bin = new BinaryWriter( ms ) ) + { + FileInfo fileInfo = new FileInfo( compiledFile ); + + bin.Write( fileInfo.LastWriteTimeUtc.Ticks ); + + foreach( string scriptFile in scriptFiles ) + { + fileInfo = new FileInfo( scriptFile ); + + bin.Write( fileInfo.LastWriteTimeUtc.Ticks ); + } + + bin.Write( debug ); + bin.Write( Core.Version.ToString() ); + + ms.Position = 0; + + using( SHA1 sha1 = SHA1.Create() ) + { + return sha1.ComputeHash( ms ); + } + } + } + } + + public static bool CompileCSScripts( out Assembly assembly ) + { + return CompileCSScripts( false, true, out assembly ); + } + + public static bool CompileCSScripts( bool debug, out Assembly assembly ) + { + return CompileCSScripts( debug, true, out assembly ); + } + + public static bool CompileCSScripts( bool debug, bool cache, out Assembly assembly ) + { + Console.Write( "Scripts: Compiling C# scripts..." ); + string[] files = GetScripts( "*.cs" ); + + if( files.Length == 0 ) + { + Console.WriteLine( "no files found." ); + assembly = null; + return true; + } + + if( File.Exists( "Scripts/Output/Scripts.CS.dll" ) ) + { + if( cache && File.Exists( "Scripts/Output/Scripts.CS.hash" ) ) + { + try + { + byte[] hashCode = GetHashCode( "Scripts/Output/Scripts.CS.dll", files, debug ); + + using( FileStream fs = new FileStream( "Scripts/Output/Scripts.CS.hash", FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + using( BinaryReader bin = new BinaryReader( fs ) ) + { + byte[] bytes = bin.ReadBytes( hashCode.Length ); + + if( bytes.Length == hashCode.Length ) + { + bool valid = true; + + for( int i = 0; i < bytes.Length; ++i ) + { + if( bytes[i] != hashCode[i] ) + { + valid = false; + break; + } + } + + if( valid ) + { + assembly = Assembly.LoadFrom( "Scripts/Output/Scripts.CS.dll" ); + + if( !m_AdditionalReferences.Contains( assembly.Location ) ) + { + m_AdditionalReferences.Add( assembly.Location ); + } + + Console.WriteLine( "done (cached)" ); + + return true; + } + } + } + } + } + catch + { + } + } + } + + DeleteFiles( "Scripts.CS*.dll" ); + + using ( CSharpCodeProvider provider = new CSharpCodeProvider() ) + { + string path = GetUnusedPath( "Scripts.CS" ); + + CompilerParameters parms = new CompilerParameters( GetReferenceAssemblies(), path, debug ); + + string defines = GetDefines(); + + if( defines != null ) + parms.CompilerOptions = defines; + + if( Core.HaltOnWarning ) + parms.WarningLevel = 4; + +#if !MONO + CompilerResults results = provider.CompileAssemblyFromFile( parms, files ); +#else + parms.CompilerOptions = String.Format( "{0} /nowarn:169,219,414 /recurse:Scripts/*.cs", parms.CompilerOptions ); + CompilerResults results = provider.CompileAssemblyFromFile( parms, files ); +#endif + m_AdditionalReferences.Add( path ); + + Display( results ); + +#if !MONO + if( results.Errors.Count > 0 ) + { + assembly = null; + return false; + } +#else + if( results.Errors.Count > 0 ) { + foreach( CompilerError err in results.Errors ) { + if ( !err.IsWarning ) { + assembly = null; + return false; + } + } + } +#endif + + + if( cache && Path.GetFileName( path ) == "Scripts.CS.dll" ) + { + try + { + byte[] hashCode = GetHashCode( path, files, debug ); + + using( FileStream fs = new FileStream( "Scripts/Output/Scripts.CS.hash", FileMode.Create, FileAccess.Write, FileShare.None ) ) + { + using( BinaryWriter bin = new BinaryWriter( fs ) ) + { + bin.Write( hashCode, 0, hashCode.Length ); + } + } + } + catch + { + } + } + + assembly = results.CompiledAssembly; + return true; + } + } + + public static void Display( CompilerResults results ) + { + if( results.Errors.Count > 0 ) + { + Dictionary> errors = new Dictionary>( results.Errors.Count, StringComparer.OrdinalIgnoreCase ); + Dictionary> warnings = new Dictionary>( results.Errors.Count, StringComparer.OrdinalIgnoreCase ); + + foreach( CompilerError e in results.Errors ) + { + string file = e.FileName; + + // Ridiculous. FileName is null if the warning/error is internally generated in csc. + if ( string.IsNullOrEmpty( file ) ) { + Console.WriteLine( "ScriptCompiler: {0}: {1}", e.ErrorNumber, e.ErrorText ); + continue; + } + + Dictionary> table = (e.IsWarning ? warnings : errors); + + List list = null; + table.TryGetValue( file, out list ); + + if( list == null ) + table[file] = list = new List(); + + list.Add( e ); + } + + if( errors.Count > 0 ) + Console.WriteLine( "failed ({0} errors, {1} warnings)", errors.Count, warnings.Count ); + else + Console.WriteLine( "done ({0} errors, {1} warnings)", errors.Count, warnings.Count ); + + string scriptRoot = Path.GetFullPath( Path.Combine( Core.BaseDirectory, "Scripts" + Path.DirectorySeparatorChar ) ); + Uri scriptRootUri = new Uri( scriptRoot ); + + Utility.PushColor( ConsoleColor.Yellow ); + + if( warnings.Count > 0 ) + Console.WriteLine( "Warnings:" ); + + foreach( KeyValuePair> kvp in warnings ) + { + string fileName = kvp.Key; + List list = kvp.Value; + + string fullPath = Path.GetFullPath( fileName ); + string usedPath = Uri.UnescapeDataString( scriptRootUri.MakeRelativeUri( new Uri( fullPath ) ).OriginalString ); + + Console.WriteLine( " + {0}:", usedPath ); + + Utility.PushColor( ConsoleColor.DarkYellow ); + + foreach( CompilerError e in list ) + Console.WriteLine( " {0}: Line {1}: {3}", e.ErrorNumber, e.Line, e.Column, e.ErrorText ); + + Utility.PopColor(); + } + + Utility.PopColor(); + + Utility.PushColor( ConsoleColor.Red ); + + if( errors.Count > 0 ) + Console.WriteLine( "Errors:" ); + + foreach( KeyValuePair> kvp in errors ) + { + string fileName = kvp.Key; + List list = kvp.Value; + + string fullPath = Path.GetFullPath( fileName ); + string usedPath = Uri.UnescapeDataString( scriptRootUri.MakeRelativeUri( new Uri( fullPath ) ).OriginalString ); + + Console.WriteLine( " + {0}:", usedPath ); + + Utility.PushColor( ConsoleColor.DarkRed ); + + foreach( CompilerError e in list ) + Console.WriteLine( " {0}: Line {1}: {3}", e.ErrorNumber, e.Line, e.Column, e.ErrorText ); + + Utility.PopColor(); + } + + Utility.PopColor(); + } + else + { + Console.WriteLine( "done (0 errors, 0 warnings)" ); + } + } + + public static string GetUnusedPath( string name ) + { + string path = Path.Combine( Core.BaseDirectory, String.Format( "Scripts/Output/{0}.dll", name ) ); + + for( int i = 2; File.Exists( path ) && i <= 1000; ++i ) + path = Path.Combine( Core.BaseDirectory, String.Format( "Scripts/Output/{0}.{1}.dll", name, i ) ); + + return path; + } + + public static void DeleteFiles( string mask ) + { + try + { + string[] files = Directory.GetFiles( Path.Combine( Core.BaseDirectory, "Scripts/Output" ), mask ); + + foreach( string file in files ) + { + try { File.Delete( file ); } + catch { } + } + } + catch + { + } + } + + private delegate CompilerResults Compiler( bool debug ); + + public static bool Compile() + { + return Compile( false ); + } + + public static bool Compile( bool debug ) + { + return Compile( debug, true ); + } + + public static bool Compile( bool debug, bool cache ) + { + EnsureDirectory( "Scripts/" ); + EnsureDirectory( "Scripts/Output/" ); + + if( m_AdditionalReferences.Count > 0 ) + m_AdditionalReferences.Clear(); + + List assemblies = new List(); + + Assembly assembly; + + if( CompileCSScripts( debug, cache, out assembly ) ) + { + if( assembly != null ) + { + assemblies.Add( assembly ); + } + } + else + { + return false; + } + + if( assemblies.Count == 0 ) + { + return false; + } + + m_Assemblies = assemblies.ToArray(); + + Console.Write( "Scripts: Verifying..." ); + + Stopwatch watch = Stopwatch.StartNew(); + + Core.VerifySerialization(); + + watch.Stop(); + + Console.WriteLine("done ({0} items, {1} mobiles) ({2:F2} seconds)", Core.ScriptItems, Core.ScriptMobiles, watch.Elapsed.TotalSeconds); + + return true; + } + + public static void Invoke( string method ) + { + List invoke = new List(); + + for( int a = 0; a < m_Assemblies.Length; ++a ) + { + Type[] types = m_Assemblies[a].GetTypes(); + + for( int i = 0; i < types.Length; ++i ) + { + MethodInfo m = types[i].GetMethod( method, BindingFlags.Static | BindingFlags.Public ); + + if( m != null ) + invoke.Add( m ); + } + } + + invoke.Sort( new CallPriorityComparer() ); + + for( int i = 0; i < invoke.Count; ++i ) + invoke[i].Invoke( null, null ); + } + + private static Dictionary m_TypeCaches = new Dictionary(); + private static TypeCache m_NullCache; + + public static TypeCache GetTypeCache( Assembly asm ) + { + if( asm == null ) + { + if( m_NullCache == null ) + m_NullCache = new TypeCache( null ); + + return m_NullCache; + } + + TypeCache c = null; + m_TypeCaches.TryGetValue( asm, out c ); + + if( c == null ) + m_TypeCaches[asm] = c = new TypeCache( asm ); + + return c; + } + + public static Type FindTypeByFullName( string fullName ) + { + return FindTypeByFullName( fullName, true ); + } + + public static Type FindTypeByFullName( string fullName, bool ignoreCase ) + { + Type type = null; + + for( int i = 0; type == null && i < m_Assemblies.Length; ++i ) + type = GetTypeCache( m_Assemblies[i] ).GetTypeByFullName( fullName, ignoreCase ); + + if( type == null ) + type = GetTypeCache( Core.Assembly ).GetTypeByFullName( fullName, ignoreCase ); + + return type; + } + + public static Type FindTypeByName( string name ) + { + return FindTypeByName( name, true ); + } + + public static Type FindTypeByName( string name, bool ignoreCase ) + { + Type type = null; + + for( int i = 0; type == null && i < m_Assemblies.Length; ++i ) + type = GetTypeCache( m_Assemblies[i] ).GetTypeByName( name, ignoreCase ); + + if( type == null ) + type = GetTypeCache( Core.Assembly ).GetTypeByName( name, ignoreCase ); + + return type; + } + + public static void EnsureDirectory( string dir ) + { + string path = Path.Combine( Core.BaseDirectory, dir ); + + if( !Directory.Exists( path ) ) + Directory.CreateDirectory( path ); + } + + public static string[] GetScripts( string filter ) + { + List list = new List(); + + GetScripts( list, Path.Combine( Core.BaseDirectory, "Scripts" ), filter ); + + return list.ToArray(); + } + + public static void GetScripts( List list, string path, string filter ) + { + foreach( string dir in Directory.GetDirectories( path ) ) + GetScripts( list, dir, filter ); + + list.AddRange( Directory.GetFiles( path, filter ) ); + } + } + + public class TypeCache + { + private Type[] m_Types; + private TypeTable m_Names, m_FullNames; + + public Type[] Types { get { return m_Types; } } + public TypeTable Names { get { return m_Names; } } + public TypeTable FullNames { get { return m_FullNames; } } + + public Type GetTypeByName( string name, bool ignoreCase ) + { + return m_Names.Get( name, ignoreCase ); + } + + public Type GetTypeByFullName( string fullName, bool ignoreCase ) + { + return m_FullNames.Get( fullName, ignoreCase ); + } + + public TypeCache( Assembly asm ) + { + if( asm == null ) + m_Types = Type.EmptyTypes; + else + m_Types = asm.GetTypes(); + + m_Names = new TypeTable( m_Types.Length ); + m_FullNames = new TypeTable( m_Types.Length ); + + Type typeofTypeAliasAttribute = typeof( TypeAliasAttribute ); + + for( int i = 0; i < m_Types.Length; ++i ) + { + Type type = m_Types[i]; + + m_Names.Add( type.Name, type ); + m_FullNames.Add( type.FullName, type ); + + if( type.IsDefined( typeofTypeAliasAttribute, false ) ) + { + object[] attrs = type.GetCustomAttributes( typeofTypeAliasAttribute, false ); + + if( attrs != null && attrs.Length > 0 ) + { + TypeAliasAttribute attr = attrs[0] as TypeAliasAttribute; + + if( attr != null ) + { + for( int j = 0; j < attr.Aliases.Length; ++j ) + m_FullNames.Add( attr.Aliases[j], type ); + } + } + } + } + } + } + + public class TypeTable + { + private Dictionary m_Sensitive, m_Insensitive; + + public void Add( string key, Type type ) + { + m_Sensitive[key] = type; + m_Insensitive[key] = type; + } + + public Type Get( string key, bool ignoreCase ) + { + Type t = null; + + if( ignoreCase ) + m_Insensitive.TryGetValue( key, out t ); + else + m_Sensitive.TryGetValue( key, out t ); + + return t; + } + + public TypeTable( int capacity ) + { + m_Sensitive = new Dictionary( capacity ); + m_Insensitive = new Dictionary( capacity, StringComparer.OrdinalIgnoreCase ); + } + } +} diff --git a/Source/Sector.cs b/Source/Sector.cs new file mode 100644 index 0000000..4da1bf4 --- /dev/null +++ b/Source/Sector.cs @@ -0,0 +1,319 @@ +/*************************************************************************** + * Sector.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Items; +using Server.Network; + +namespace Server { + public class RegionRect : IComparable { + private Region m_Region; + private Rectangle3D m_Rect; + + public Region Region { get { return m_Region; } } + public Rectangle3D Rect { get { return m_Rect; } } + + public RegionRect( Region region, Rectangle3D rect ) { + m_Region = region; + m_Rect = rect; + } + + public bool Contains( Point3D loc ) { + return m_Rect.Contains( loc ); + } + + int IComparable.CompareTo( object obj ) { + if ( obj == null ) + return 1; + + RegionRect regRect = obj as RegionRect; + + if ( regRect == null ) + throw new ArgumentException( "obj is not a RegionRect", "obj" ); + + return ( ( IComparable ) m_Region ).CompareTo( regRect.m_Region ); + } + } + + + public class Sector { + private int m_X, m_Y; + private Map m_Owner; + private List m_Mobiles; + private List m_Players; + private List m_Items; + private List m_Clients; + private List m_Multis; + private List m_RegionRects; + private bool m_Active; + + // TODO: Can we avoid this? + private static List m_DefaultMobileList = new List(); + private static List m_DefaultItemList = new List(); + private static List m_DefaultClientList = new List(); + private static List m_DefaultMultiList = new List(); + private static List m_DefaultRectList = new List(); + + public Sector( int x, int y, Map owner ) { + m_X = x; + m_Y = y; + m_Owner = owner; + m_Active = false; + } + + private void Add( ref List list, T value ) { + if ( list == null ) { + list = new List(); + } + + list.Add( value ); + } + + private void Remove( ref List list, T value ) { + if ( list != null ) { + list.Remove( value ); + + if ( list.Count == 0 ) { + list = null; + } + } + } + + private void Replace( ref List list, T oldValue, T newValue ) { + if ( oldValue != null && newValue != null ) { + int index = ( list != null ? list.IndexOf( oldValue ) : -1 ); + + if ( index >= 0 ) { + list[index] = newValue; + } else { + Add( ref list, newValue ); + } + } else if ( oldValue != null ) { + Remove( ref list, oldValue ); + } else if ( newValue != null ) { + Add( ref list, newValue ); + } + } + + public void OnClientChange( NetState oldState, NetState newState ) { + Replace( ref m_Clients, oldState, newState ); + } + + public void OnEnter( Item item ) { + Add( ref m_Items, item ); + } + + public void OnLeave( Item item ) { + Remove( ref m_Items, item ); + } + + public void OnEnter( Mobile mob ) { + Add( ref m_Mobiles, mob ); + + if ( mob.NetState != null ) { + Add( ref m_Clients, mob.NetState ); + } + + if ( mob.Player ) { + if ( m_Players == null ) { + m_Owner.ActivateSectors( m_X, m_Y ); + } + + Add( ref m_Players, mob ); + } + } + + public void OnLeave( Mobile mob ) { + Remove( ref m_Mobiles, mob ); + + if ( mob.NetState != null ) { + Remove( ref m_Clients, mob.NetState ); + } + + if ( mob.Player && m_Players != null ) { + Remove( ref m_Players, mob ); + + if ( m_Players == null ) { + m_Owner.DeactivateSectors( m_X, m_Y ); + } + } + } + + public void OnEnter( Region region, Rectangle3D rect ) { + Add( ref m_RegionRects, new RegionRect( region, rect ) ); + + m_RegionRects.Sort(); + + UpdateMobileRegions(); + } + + public void OnLeave( Region region ) { + if ( m_RegionRects != null ) { + for ( int i = m_RegionRects.Count - 1; i >= 0; i-- ) { + RegionRect regRect = m_RegionRects[i]; + + if ( regRect.Region == region ) { + m_RegionRects.RemoveAt( i ); + } + } + + if ( m_RegionRects.Count == 0 ) { + m_RegionRects = null; + } + } + + UpdateMobileRegions(); + } + + private void UpdateMobileRegions() { + if ( m_Mobiles != null ) { + List sandbox = new List( m_Mobiles ); + + foreach ( Mobile mob in sandbox ) { + mob.UpdateRegion(); + } + } + } + + public void OnMultiEnter( BaseMulti multi ) { + Add( ref m_Multis, multi ); + } + + public void OnMultiLeave( BaseMulti multi ) { + Remove( ref m_Multis, multi ); + } + + public void Activate() { + if ( !Active && m_Owner != Map.Internal ) { + if ( m_Items != null ) { + foreach ( Item item in m_Items ) { + item.OnSectorActivate(); + } + } + + if ( m_Mobiles != null ) { + foreach ( Mobile mob in m_Mobiles ) { + mob.OnSectorActivate(); + } + } + + m_Active = true; + } + } + + public void Deactivate() { + if ( Active ) { + if ( m_Items != null ) { + foreach ( Item item in m_Items ) { + item.OnSectorDeactivate(); + } + } + + if ( m_Mobiles != null ) { + foreach ( Mobile mob in m_Mobiles ) { + mob.OnSectorDeactivate(); + } + } + + m_Active = false; + } + } + + public List RegionRects { + get { + if ( m_RegionRects == null ) + return m_DefaultRectList; + + return m_RegionRects; + } + } + + public List Multis { + get { + if ( m_Multis == null ) + return m_DefaultMultiList; + + return m_Multis; + } + } + + public List Mobiles { + get { + if ( m_Mobiles == null ) + return m_DefaultMobileList; + + return m_Mobiles; + } + } + + public List Items { + get { + if ( m_Items == null ) + return m_DefaultItemList; + + return m_Items; + } + } + + public List Clients { + get { + if ( m_Clients == null ) + return m_DefaultClientList; + + return m_Clients; + } + } + + public List Players { + get { + if ( m_Players == null ) + return m_DefaultMobileList; + + return m_Players; + } + } + + public bool Active { + get { + return ( m_Active && m_Owner != Map.Internal ); + } + } + + public Map Owner { + get { + return m_Owner; + } + } + + public int X { + get { + return m_X; + } + } + + public int Y { + get { + return m_Y; + } + } + } +} \ No newline at end of file diff --git a/Source/SecureTrade.cs b/Source/SecureTrade.cs new file mode 100644 index 0000000..598fcaa --- /dev/null +++ b/Source/SecureTrade.cs @@ -0,0 +1,297 @@ +/*************************************************************************** + * SecureTrade.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using Server.Items; +using Server.Network; + +namespace Server +{ + public class SecureTrade + { + private SecureTradeInfo m_From, m_To; + private bool m_Valid; + + public SecureTradeInfo From + { + get + { + return m_From; + } + } + + public SecureTradeInfo To + { + get + { + return m_To; + } + } + + public bool Valid + { + get + { + return m_Valid; + } + } + + public void Cancel() + { + if ( !m_Valid ) + return; + + List list = m_From.Container.Items; + + for ( int i = list.Count - 1; i >= 0; --i ) + { + if ( i < list.Count ) + { + Item item = list[i]; + + item.OnSecureTrade( m_From.Mobile, m_To.Mobile, m_From.Mobile, false ); + + if ( !item.Deleted ) + m_From.Mobile.AddToBackpack( item ); + } + } + + list = m_To.Container.Items; + + for ( int i = list.Count - 1; i >= 0; --i ) + { + if ( i < list.Count ) + { + Item item = list[i]; + + item.OnSecureTrade( m_To.Mobile, m_From.Mobile, m_To.Mobile, false ); + + if ( !item.Deleted ) + m_To.Mobile.AddToBackpack( item ); + } + } + + Close(); + } + + public void Close() + { + if ( !m_Valid ) + return; + + m_From.Mobile.Send( new CloseSecureTrade( m_From.Container ) ); + m_To.Mobile.Send( new CloseSecureTrade( m_To.Container ) ); + + m_Valid = false; + + NetState ns = m_From.Mobile.NetState; + + if ( ns != null ) + ns.RemoveTrade( this ); + + ns = m_To.Mobile.NetState; + + if ( ns != null ) + ns.RemoveTrade( this ); + + Timer.DelayCall( TimeSpan.Zero, delegate{ m_From.Container.Delete(); } ); + Timer.DelayCall( TimeSpan.Zero, delegate{ m_To.Container.Delete(); } ); + } + + public void Update() + { + if ( !m_Valid ) + return; + + if ( m_From.Accepted && m_To.Accepted ) + { + List list = m_From.Container.Items; + + bool allowed = true; + + for ( int i = list.Count - 1; allowed && i >= 0; --i ) + { + if ( i < list.Count ) + { + Item item = list[i]; + + if ( !item.AllowSecureTrade( m_From.Mobile, m_To.Mobile, m_To.Mobile, true ) ) + allowed = false; + } + } + + list = m_To.Container.Items; + + for ( int i = list.Count - 1; allowed && i >= 0; --i ) + { + if ( i < list.Count ) + { + Item item = list[i]; + + if ( !item.AllowSecureTrade( m_To.Mobile, m_From.Mobile, m_From.Mobile, true ) ) + allowed = false; + } + } + + if ( !allowed ) + { + m_From.Accepted = false; + m_To.Accepted = false; + + m_From.Mobile.Send( new UpdateSecureTrade( m_From.Container, m_From.Accepted, m_To.Accepted ) ); + m_To.Mobile.Send( new UpdateSecureTrade( m_To.Container, m_To.Accepted, m_From.Accepted ) ); + + return; + } + + list = m_From.Container.Items; + + for ( int i = list.Count - 1; i >= 0; --i ) + { + if ( i < list.Count ) + { + Item item = list[i]; + + item.OnSecureTrade( m_From.Mobile, m_To.Mobile, m_To.Mobile, true ); + + if ( !item.Deleted ) + m_To.Mobile.AddToBackpack( item ); + } + } + + list = m_To.Container.Items; + + for ( int i = list.Count - 1; i >= 0; --i ) + { + if ( i < list.Count ) + { + Item item = list[i]; + + item.OnSecureTrade( m_To.Mobile, m_From.Mobile, m_From.Mobile, true ); + + if ( !item.Deleted ) + m_From.Mobile.AddToBackpack( item ); + } + } + + Close(); + } + else + { + m_From.Mobile.Send( new UpdateSecureTrade( m_From.Container, m_From.Accepted, m_To.Accepted ) ); + m_To.Mobile.Send( new UpdateSecureTrade( m_To.Container, m_To.Accepted, m_From.Accepted ) ); + } + } + + public SecureTrade( Mobile from, Mobile to ) + { + m_Valid = true; + + m_From = new SecureTradeInfo( this, from, new SecureTradeContainer( this ) ); + m_To = new SecureTradeInfo( this, to, new SecureTradeContainer( this ) ); + + bool from6017 = ( from.NetState == null ? false : from.NetState.ContainerGridLines ); + bool to6017 = ( to.NetState == null ? false : to.NetState.ContainerGridLines ); + + from.Send( new MobileStatus( from, to ) ); + from.Send( new UpdateSecureTrade( m_From.Container, false, false ) ); + if ( from6017 ) + from.Send( new SecureTradeEquip6017( m_To.Container, to ) ); + else + from.Send( new SecureTradeEquip( m_To.Container, to ) ); + from.Send( new UpdateSecureTrade( m_From.Container, false, false ) ); + if ( from6017 ) + from.Send( new SecureTradeEquip6017( m_From.Container, from ) ); + else + from.Send( new SecureTradeEquip( m_From.Container, from ) ); + from.Send( new DisplaySecureTrade( to, m_From.Container, m_To.Container, to.Name ) ); + from.Send( new UpdateSecureTrade( m_From.Container, false, false ) ); + + to.Send( new MobileStatus( to, from ) ); + to.Send( new UpdateSecureTrade( m_To.Container, false, false ) ); + if ( to6017 ) + to.Send( new SecureTradeEquip6017( m_From.Container, from ) ); + else + to.Send( new SecureTradeEquip( m_From.Container, from ) ); + to.Send( new UpdateSecureTrade( m_To.Container, false, false ) ); + if ( to6017 ) + to.Send( new SecureTradeEquip6017( m_To.Container, to ) ); + else + to.Send( new SecureTradeEquip( m_To.Container, to ) ); + to.Send( new DisplaySecureTrade( from, m_To.Container, m_From.Container, from.Name ) ); + to.Send( new UpdateSecureTrade( m_To.Container, false, false ) ); + } + } + + public class SecureTradeInfo + { + private SecureTrade m_Owner; + private Mobile m_Mobile; + private SecureTradeContainer m_Container; + private bool m_Accepted; + + public SecureTradeInfo( SecureTrade owner, Mobile m, SecureTradeContainer c ) + { + m_Owner = owner; + m_Mobile = m; + m_Container = c; + + m_Mobile.AddItem( m_Container ); + } + + public SecureTrade Owner + { + get + { + return m_Owner; + } + } + + public Mobile Mobile + { + get + { + return m_Mobile; + } + } + + public SecureTradeContainer Container + { + get + { + return m_Container; + } + } + + public bool Accepted + { + get + { + return m_Accepted; + } + set + { + m_Accepted = value; + } + } + } +} \ No newline at end of file diff --git a/Source/Serial.cs b/Source/Serial.cs new file mode 100644 index 0000000..5c0ea8d --- /dev/null +++ b/Source/Serial.cs @@ -0,0 +1,172 @@ +/*************************************************************************** + * Serial.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + public struct Serial : IComparable, IComparable + { + private int m_Serial; + + private static Serial m_LastMobile = Zero; + private static Serial m_LastItem = 0x40000000; + + public static Serial LastMobile { get { return m_LastMobile; } } + public static Serial LastItem { get { return m_LastItem; } } + + public static readonly Serial MinusOne = new Serial( -1 ); + public static readonly Serial Zero = new Serial( 0 ); + + public static Serial NewMobile + { + get + { + while ( World.FindMobile( m_LastMobile = (m_LastMobile + 1) ) != null ); + + return m_LastMobile; + } + } + + public static Serial NewItem + { + get + { + while ( World.FindItem( m_LastItem = (m_LastItem + 1) ) != null ); + + return m_LastItem; + } + } + + private Serial( int serial ) + { + m_Serial = serial; + } + + public int Value + { + get + { + return m_Serial; + } + } + + public bool IsMobile + { + get + { + return ( m_Serial > 0 && m_Serial < 0x40000000 ); + } + } + + public bool IsItem + { + get + { + return ( m_Serial >= 0x40000000 && m_Serial <= 0x7FFFFFFF ); + } + } + + public bool IsValid + { + get + { + return ( m_Serial > 0 ); + } + } + + public override int GetHashCode() + { + return m_Serial; + } + + public int CompareTo( Serial other ) + { + return m_Serial.CompareTo( other.m_Serial ); + } + + public int CompareTo( object other ) + { + if ( other is Serial ) + return this.CompareTo( (Serial) other ); + else if ( other == null ) + return -1; + + throw new ArgumentException(); + } + + public override bool Equals( object o ) + { + if ( o == null || !(o is Serial) ) return false; + + return ((Serial)o).m_Serial == m_Serial; + } + + public static bool operator == ( Serial l, Serial r ) + { + return l.m_Serial == r.m_Serial; + } + + public static bool operator != ( Serial l, Serial r ) + { + return l.m_Serial != r.m_Serial; + } + + public static bool operator > ( Serial l, Serial r ) + { + return l.m_Serial > r.m_Serial; + } + + public static bool operator < ( Serial l, Serial r ) + { + return l.m_Serial < r.m_Serial; + } + + public static bool operator >= ( Serial l, Serial r ) + { + return l.m_Serial >= r.m_Serial; + } + + public static bool operator <= ( Serial l, Serial r ) + { + return l.m_Serial <= r.m_Serial; + } + + /*public static Serial operator ++ ( Serial l ) + { + return new Serial( l + 1 ); + }*/ + + public override string ToString() + { + return String.Format( "0x{0:X8}", m_Serial ); + } + + public static implicit operator int( Serial a ) + { + return a.m_Serial; + } + + public static implicit operator Serial( int a ) + { + return new Serial( a ); + } + } +} \ No newline at end of file diff --git a/Source/Serialization.cs b/Source/Serialization.cs new file mode 100644 index 0000000..a88e923 --- /dev/null +++ b/Source/Serialization.cs @@ -0,0 +1,1721 @@ +/*************************************************************************** + * Serialization.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Reflection; +using System.Threading; +using System.Net; + +using Server; +using Server.Guilds; + +namespace Server +{ + public abstract class GenericReader + { + protected GenericReader() { } + + public abstract string ReadString(); + public abstract DateTime ReadDateTime(); + public abstract TimeSpan ReadTimeSpan(); + public abstract DateTime ReadDeltaTime(); + public abstract decimal ReadDecimal(); + public abstract long ReadLong(); + public abstract ulong ReadULong(); + public abstract int ReadInt(); + public abstract uint ReadUInt(); + public abstract short ReadShort(); + public abstract ushort ReadUShort(); + public abstract double ReadDouble(); + public abstract float ReadFloat(); + public abstract char ReadChar(); + public abstract byte ReadByte(); + public abstract sbyte ReadSByte(); + public abstract bool ReadBool(); + public abstract int ReadEncodedInt(); + public abstract IPAddress ReadIPAddress(); + + public abstract Point3D ReadPoint3D(); + public abstract Point2D ReadPoint2D(); + public abstract Rectangle2D ReadRect2D(); + public abstract Rectangle3D ReadRect3D(); + public abstract Map ReadMap(); + + public abstract Item ReadItem(); + public abstract Mobile ReadMobile(); + public abstract BaseGuild ReadGuild(); + + public abstract T ReadItem() where T : Item; + public abstract T ReadMobile() where T : Mobile; + public abstract T ReadGuild() where T : BaseGuild; + + public abstract ArrayList ReadItemList(); + public abstract ArrayList ReadMobileList(); + public abstract ArrayList ReadGuildList(); + + public abstract List ReadStrongItemList(); + public abstract List ReadStrongItemList() where T : Item; + + public abstract List ReadStrongMobileList(); + public abstract List ReadStrongMobileList() where T : Mobile; + + public abstract List ReadStrongGuildList(); + public abstract List ReadStrongGuildList() where T : BaseGuild; + + public abstract Race ReadRace(); + + public abstract bool End(); + } + + public abstract class GenericWriter + { + protected GenericWriter() { } + + public abstract void Close(); + + public abstract long Position { get; } + + public abstract void Write( string value ); + public abstract void Write( DateTime value ); + public abstract void Write( TimeSpan value ); + public abstract void Write( decimal value ); + public abstract void Write( long value ); + public abstract void Write( ulong value ); + public abstract void Write( int value ); + public abstract void Write( uint value ); + public abstract void Write( short value ); + public abstract void Write( ushort value ); + public abstract void Write( double value ); + public abstract void Write( float value ); + public abstract void Write( char value ); + public abstract void Write( byte value ); + public abstract void Write( sbyte value ); + public abstract void Write( bool value ); + public abstract void WriteEncodedInt( int value ); + public abstract void Write( IPAddress value ); + + public abstract void WriteDeltaTime( DateTime value ); + + public abstract void Write( Point3D value ); + public abstract void Write( Point2D value ); + public abstract void Write( Rectangle2D value ); + public abstract void Write( Rectangle3D value ); + public abstract void Write( Map value ); + + public abstract void Write( Item value ); + public abstract void Write( Mobile value ); + public abstract void Write( BaseGuild value ); + + public abstract void WriteItem( T value ) where T : Item; + public abstract void WriteMobile( T value ) where T : Mobile; + public abstract void WriteGuild( T value ) where T : BaseGuild; + + public abstract void Write( Race value ); + + public abstract void WriteItemList( ArrayList list ); + public abstract void WriteItemList( ArrayList list, bool tidy ); + + public abstract void WriteMobileList( ArrayList list ); + public abstract void WriteMobileList( ArrayList list, bool tidy ); + + public abstract void WriteGuildList( ArrayList list ); + public abstract void WriteGuildList( ArrayList list, bool tidy ); + + public abstract void Write( List list ); + public abstract void Write( List list, bool tidy ); + + public abstract void WriteItemList( List list ) where T : Item; + public abstract void WriteItemList( List list, bool tidy ) where T : Item; + + public abstract void Write( List list ); + public abstract void Write( List list, bool tidy ); + + public abstract void WriteMobileList( List list ) where T : Mobile; + public abstract void WriteMobileList( List list, bool tidy ) where T : Mobile; + + public abstract void Write( List list ); + public abstract void Write( List list, bool tidy ); + + public abstract void WriteGuildList( List list ) where T : BaseGuild; + public abstract void WriteGuildList( List list, bool tidy ) where T : BaseGuild; + + //Stupid compiler won't notice there 'where' to differentiate the generic methods. + } + + public class BinaryFileWriter : GenericWriter + { + private bool PrefixStrings; + private Stream m_File; + + protected virtual int BufferSize + { + get + { + return 64 * 1024; + } + } + + private byte[] m_Buffer; + + private int m_Index; + + private Encoding m_Encoding; + + public BinaryFileWriter( Stream strm, bool prefixStr ) + { + PrefixStrings = prefixStr; + m_Encoding = Utility.UTF8; + m_Buffer = new byte[BufferSize]; + m_File = strm; + } + + public BinaryFileWriter( string filename, bool prefixStr ) + { + PrefixStrings = prefixStr; + m_Buffer = new byte[BufferSize]; + m_File = new FileStream( filename, FileMode.Create, FileAccess.Write, FileShare.None ); + m_Encoding = Utility.UTF8WithEncoding; + } + + public void Flush() + { + if( m_Index > 0 ) + { + m_Position += m_Index; + + m_File.Write( m_Buffer, 0, m_Index ); + m_Index = 0; + } + } + + private long m_Position; + + public override long Position + { + get + { + return m_Position + m_Index; + } + } + + public Stream UnderlyingStream + { + get + { + if( m_Index > 0 ) + Flush(); + + return m_File; + } + } + + public override void Close() + { + if( m_Index > 0 ) + Flush(); + + m_File.Close(); + } + + public override void WriteEncodedInt( int value ) + { + uint v = (uint)value; + + while( v >= 0x80 ) + { + if( (m_Index + 1) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index++] = (byte)(v | 0x80); + v >>= 7; + } + + if( (m_Index + 1) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index++] = (byte)v; + } + + private byte[] m_CharacterBuffer; + private int m_MaxBufferChars; + private const int LargeByteBufferSize = 256; + + internal void InternalWriteString( string value ) + { + int length = m_Encoding.GetByteCount( value ); + + WriteEncodedInt( length ); + + if( m_CharacterBuffer == null ) + { + m_CharacterBuffer = new byte[LargeByteBufferSize]; + m_MaxBufferChars = LargeByteBufferSize / m_Encoding.GetMaxByteCount( 1 ); + } + + if( length > LargeByteBufferSize ) + { + int current = 0; + int charsLeft = value.Length; + + while( charsLeft > 0 ) + { + int charCount = (charsLeft > m_MaxBufferChars) ? m_MaxBufferChars : charsLeft; + int byteLength = m_Encoding.GetBytes( value, current, charCount, m_CharacterBuffer, 0 ); + + if( (m_Index + byteLength) > m_Buffer.Length ) + Flush(); + + Buffer.BlockCopy( m_CharacterBuffer, 0, m_Buffer, m_Index, byteLength ); + m_Index += byteLength; + + current += charCount; + charsLeft -= charCount; + } + } + else + { + int byteLength = m_Encoding.GetBytes( value, 0, value.Length, m_CharacterBuffer, 0 ); + + if( (m_Index + byteLength) > m_Buffer.Length ) + Flush(); + + Buffer.BlockCopy( m_CharacterBuffer, 0, m_Buffer, m_Index, byteLength ); + m_Index += byteLength; + } + } + + public override void Write( string value ) + { + if( PrefixStrings ) + { + if( value == null ) + { + if( (m_Index + 1) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index++] = 0; + } + else + { + if( (m_Index + 1) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index++] = 1; + + InternalWriteString( value ); + } + } + else + { + InternalWriteString( value ); + } + } + + public override void Write( DateTime value ) + { + Write( value.Ticks ); + } + + public override void WriteDeltaTime( DateTime value ) + { + long ticks = value.Ticks; + long now = DateTime.Now.Ticks; + + TimeSpan d; + + try { d = new TimeSpan( ticks-now ); } + catch { if( ticks < now ) d = TimeSpan.MaxValue; else d = TimeSpan.MaxValue; } + + Write( d ); + } + + public override void Write( IPAddress value ) + { + Write( Utility.GetLongAddressValue( value ) ); + } + + public override void Write( TimeSpan value ) + { + Write( value.Ticks ); + } + + public override void Write( decimal value ) + { + int[] bits = Decimal.GetBits( value ); + + for( int i = 0; i < bits.Length; ++i ) + Write( bits[i] ); + } + + public override void Write( long value ) + { + if( (m_Index + 8) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index] = (byte)value; + m_Buffer[m_Index + 1] = (byte)(value >> 8); + m_Buffer[m_Index + 2] = (byte)(value >> 16); + m_Buffer[m_Index + 3] = (byte)(value >> 24); + m_Buffer[m_Index + 4] = (byte)(value >> 32); + m_Buffer[m_Index + 5] = (byte)(value >> 40); + m_Buffer[m_Index + 6] = (byte)(value >> 48); + m_Buffer[m_Index + 7] = (byte)(value >> 56); + m_Index += 8; + } + + public override void Write( ulong value ) + { + if( (m_Index + 8) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index] = (byte)value; + m_Buffer[m_Index + 1] = (byte)(value >> 8); + m_Buffer[m_Index + 2] = (byte)(value >> 16); + m_Buffer[m_Index + 3] = (byte)(value >> 24); + m_Buffer[m_Index + 4] = (byte)(value >> 32); + m_Buffer[m_Index + 5] = (byte)(value >> 40); + m_Buffer[m_Index + 6] = (byte)(value >> 48); + m_Buffer[m_Index + 7] = (byte)(value >> 56); + m_Index += 8; + } + + public override void Write( int value ) + { + if( (m_Index + 4) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index] = (byte)value; + m_Buffer[m_Index + 1] = (byte)(value >> 8); + m_Buffer[m_Index + 2] = (byte)(value >> 16); + m_Buffer[m_Index + 3] = (byte)(value >> 24); + m_Index += 4; + } + + public override void Write( uint value ) + { + if( (m_Index + 4) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index] = (byte)value; + m_Buffer[m_Index + 1] = (byte)(value >> 8); + m_Buffer[m_Index + 2] = (byte)(value >> 16); + m_Buffer[m_Index + 3] = (byte)(value >> 24); + m_Index += 4; + } + + public override void Write( short value ) + { + if( (m_Index + 2) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index] = (byte)value; + m_Buffer[m_Index + 1] = (byte)(value >> 8); + m_Index += 2; + } + + public override void Write( ushort value ) + { + if( (m_Index + 2) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index] = (byte)value; + m_Buffer[m_Index + 1] = (byte)(value >> 8); + m_Index += 2; + } + + public unsafe override void Write( double value ) + { + if( (m_Index + 8) > m_Buffer.Length ) + Flush(); + + fixed( byte* pBuffer = m_Buffer ) + *((double*)(pBuffer + m_Index)) = value; + + m_Index += 8; + } + + public unsafe override void Write( float value ) + { + if( (m_Index + 4) > m_Buffer.Length ) + Flush(); + + fixed( byte* pBuffer = m_Buffer ) + *((float*)(pBuffer + m_Index)) = value; + + m_Index += 4; + } + + private char[] m_SingleCharBuffer = new char[1]; + + public override void Write( char value ) + { + if( (m_Index + 8) > m_Buffer.Length ) + Flush(); + + m_SingleCharBuffer[0] = value; + + int byteCount = m_Encoding.GetBytes( m_SingleCharBuffer, 0, 1, m_Buffer, m_Index ); + m_Index += byteCount; + } + + public override void Write( byte value ) + { + if( (m_Index + 1) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index++] = value; + } + + public override void Write( sbyte value ) + { + if( (m_Index + 1) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index++] = (byte)value; + } + + public override void Write( bool value ) + { + if( (m_Index + 1) > m_Buffer.Length ) + Flush(); + + m_Buffer[m_Index++] = (byte)(value ? 1 : 0); + } + + public override void Write( Point3D value ) + { + Write( value.m_X ); + Write( value.m_Y ); + Write( value.m_Z ); + } + + public override void Write( Point2D value ) + { + Write( value.m_X ); + Write( value.m_Y ); + } + + public override void Write( Rectangle2D value ) + { + Write( value.Start ); + Write( value.End ); + } + + public override void Write( Rectangle3D value ) + { + Write( value.Start ); + Write( value.End ); + } + + public override void Write( Map value ) + { + if( value != null ) + Write( (byte)value.MapIndex ); + else + Write( (byte)0xFF ); + } + + public override void Write( Item value ) + { + if( value == null || value.Deleted ) + Write( Serial.MinusOne ); + else + Write( value.Serial ); + } + + public override void Write( Mobile value ) + { + if( value == null || value.Deleted ) + Write( Serial.MinusOne ); + else + Write( value.Serial ); + } + + public override void Write( BaseGuild value ) + { + if( value == null ) + Write( 0 ); + else + Write( value.Id ); + } + + public override void WriteItem( T value ) + { + Write( value ); + } + + public override void WriteMobile( T value ) + { + Write( value ); + } + + public override void WriteGuild( T value ) + { + Write( value ); + } + + public override void WriteMobileList( ArrayList list ) + { + WriteMobileList( list, false ); + } + + public override void WriteMobileList( ArrayList list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( ((Mobile)list[i]).Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( (Mobile)list[i] ); + } + + public override void WriteItemList( ArrayList list ) + { + WriteItemList( list, false ); + } + + public override void WriteItemList( ArrayList list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( ((Item)list[i]).Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( (Item)list[i] ); + } + + public override void WriteGuildList( ArrayList list ) + { + WriteGuildList( list, false ); + } + + public override void WriteGuildList( ArrayList list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( ((BaseGuild)list[i]).Disbanded ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( (BaseGuild)list[i] ); + } + + public override void Write( List list ) + { + Write( list, false ); + } + + public override void Write( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void WriteItemList( List list ) + { + WriteItemList( list, false ); + } + public override void WriteItemList( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void Write( List list ) + { + Write( list, false ); + } + + public override void Write( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void WriteMobileList( List list ) + { + WriteMobileList( list, false ); + } + + public override void WriteMobileList( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void Write( List list ) + { + Write( list, false ); + } + + public override void Write( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Disbanded ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void WriteGuildList( List list ) + { + WriteGuildList( list, false ); + } + + public override void WriteGuildList( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Disbanded ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void Write( Race value ) + { + if( value != null ) + Write( (byte)value.RaceIndex ); + else + Write( (byte)0xFF ); + } + } + + public sealed class BinaryFileReader : GenericReader + { + private BinaryReader m_File; + + public BinaryFileReader( BinaryReader br ) { m_File = br; } + + public void Close() + { + m_File.Close(); + } + + public long Position + { + get + { + return m_File.BaseStream.Position; + } + } + + public long Seek( long offset, SeekOrigin origin ) + { + return m_File.BaseStream.Seek( offset, origin ); + } + + public override string ReadString() + { + if( ReadByte() != 0 ) + return m_File.ReadString(); + else + return null; + } + + public override DateTime ReadDeltaTime() + { + long ticks = m_File.ReadInt64(); + long now = DateTime.Now.Ticks; + + if( ticks > 0 && (ticks+now) < 0 ) + return DateTime.MaxValue; + else if( ticks < 0 && (ticks+now) < 0 ) + return DateTime.MinValue; + + try { return new DateTime( now+ticks ); } + catch { if( ticks > 0 ) return DateTime.MaxValue; else return DateTime.MinValue; } + } + + public override IPAddress ReadIPAddress() + { + return new IPAddress( m_File.ReadInt64() ); + } + + public override int ReadEncodedInt() + { + int v = 0, shift = 0; + byte b; + + do + { + b = m_File.ReadByte(); + v |= (b & 0x7F) << shift; + shift += 7; + } while( b >= 0x80 ); + + return v; + } + + public override DateTime ReadDateTime() + { + return new DateTime( m_File.ReadInt64() ); + } + + public override TimeSpan ReadTimeSpan() + { + return new TimeSpan( m_File.ReadInt64() ); + } + + public override decimal ReadDecimal() + { + return m_File.ReadDecimal(); + } + + public override long ReadLong() + { + return m_File.ReadInt64(); + } + + public override ulong ReadULong() + { + return m_File.ReadUInt64(); + } + + public override int ReadInt() + { + return m_File.ReadInt32(); + } + + public override uint ReadUInt() + { + return m_File.ReadUInt32(); + } + + public override short ReadShort() + { + return m_File.ReadInt16(); + } + + public override ushort ReadUShort() + { + return m_File.ReadUInt16(); + } + + public override double ReadDouble() + { + return m_File.ReadDouble(); + } + + public override float ReadFloat() + { + return m_File.ReadSingle(); + } + + public override char ReadChar() + { + return m_File.ReadChar(); + } + + public override byte ReadByte() + { + return m_File.ReadByte(); + } + + public override sbyte ReadSByte() + { + return m_File.ReadSByte(); + } + + public override bool ReadBool() + { + return m_File.ReadBoolean(); + } + + public override Point3D ReadPoint3D() + { + return new Point3D( ReadInt(), ReadInt(), ReadInt() ); + } + + public override Point2D ReadPoint2D() + { + return new Point2D( ReadInt(), ReadInt() ); + } + + public override Rectangle2D ReadRect2D() + { + return new Rectangle2D( ReadPoint2D(), ReadPoint2D() ); + } + + public override Rectangle3D ReadRect3D() + { + return new Rectangle3D( ReadPoint3D(), ReadPoint3D() ); + } + + public override Map ReadMap() + { + return Map.Maps[ReadByte()]; + } + + public override Item ReadItem() + { + return World.FindItem( ReadInt() ); + } + + public override Mobile ReadMobile() + { + return World.FindMobile( ReadInt() ); + } + + public override BaseGuild ReadGuild() + { + return BaseGuild.Find( ReadInt() ); + } + + public override T ReadItem() + { + return ReadItem() as T; + } + + public override T ReadMobile() + { + return ReadMobile() as T; + } + + public override T ReadGuild() + { + return ReadGuild() as T; + } + + public override ArrayList ReadItemList() + { + int count = ReadInt(); + + if ( count > 0 ) { + ArrayList list = new ArrayList( count ); + + for ( int i = 0; i < count; ++i ) { + Item item = ReadItem(); + + if ( item != null ) { + list.Add( item ); + } + } + + return list; + } else { + return new ArrayList(); + } + } + + public override ArrayList ReadMobileList() + { + int count = ReadInt(); + + if ( count > 0 ) { + ArrayList list = new ArrayList( count ); + + for ( int i = 0; i < count; ++i ) { + Mobile m = ReadMobile(); + + if ( m != null ) { + list.Add( m ); + } + } + + return list; + } else { + return new ArrayList(); + } + } + + public override ArrayList ReadGuildList() + { + int count = ReadInt(); + + if ( count > 0 ) { + ArrayList list = new ArrayList( count ); + + for ( int i = 0; i < count; ++i ) { + BaseGuild g = ReadGuild(); + + if ( g != null ) { + list.Add( g ); + } + } + + return list; + } else { + return new ArrayList(); + } + } + + public override List ReadStrongItemList() + { + return ReadStrongItemList(); + } + + public override List ReadStrongItemList() + { + int count = ReadInt(); + + if ( count > 0 ) { + List list = new List( count ); + + for ( int i = 0; i < count; ++i ) { + T item = ReadItem() as T; + + if ( item != null ) { + list.Add( item ); + } + } + + return list; + } else { + return new List(); + } + } + + public override List ReadStrongMobileList() + { + return ReadStrongMobileList(); + } + + public override List ReadStrongMobileList() + { + int count = ReadInt(); + + if ( count > 0 ) { + List list = new List( count ); + + for ( int i = 0; i < count; ++i ) { + T m = ReadMobile() as T; + + if ( m != null ) { + list.Add( m ); + } + } + + return list; + } else { + return new List(); + } + } + + public override List ReadStrongGuildList() + { + return ReadStrongGuildList(); + } + + public override List ReadStrongGuildList() + { + int count = ReadInt(); + + if ( count > 0 ) { + List list = new List( count ); + + for ( int i = 0; i < count; ++i ) { + T g = ReadGuild() as T; + + if ( g != null ) { + list.Add( g ); + } + } + + return list; + } else { + return new List(); + } + } + + public override bool End() + { + return m_File.PeekChar() == -1; + } + + public override Race ReadRace() + { + return Race.Races[ReadByte()]; + } + } + + public sealed class AsyncWriter : GenericWriter + { + private static int m_ThreadCount = 0; + public static int ThreadCount { get { return m_ThreadCount; } } + + + private int BufferSize; + + private long m_LastPos, m_CurPos; + private bool m_Closed; + private bool PrefixStrings; + + private MemoryStream m_Mem; + private BinaryWriter m_Bin; + private FileStream m_File; + + private Queue m_WriteQueue; + private Thread m_WorkerThread; + + public AsyncWriter( string filename, bool prefix ) + : this( filename, 1048576, prefix )//1 mb buffer + { + } + + public AsyncWriter( string filename, int buffSize, bool prefix ) + { + PrefixStrings = prefix; + m_Closed = false; + m_WriteQueue = Queue.Synchronized( new Queue() ); + BufferSize = buffSize; + + m_File = new FileStream( filename, FileMode.Create, FileAccess.Write, FileShare.None ); + m_Mem = new MemoryStream( BufferSize + 1024 ); + m_Bin = new BinaryWriter( m_Mem, Utility.UTF8WithEncoding ); + } + + private void Enqueue( MemoryStream mem ) + { + m_WriteQueue.Enqueue( mem ); + + if( m_WorkerThread == null || !m_WorkerThread.IsAlive ) + { + m_WorkerThread = new Thread( new ThreadStart( new WorkerThread( this ).Worker ) ); + m_WorkerThread.Priority = ThreadPriority.BelowNormal; + m_WorkerThread.Start(); + } + } + + private class WorkerThread + { + private AsyncWriter m_Owner; + + public WorkerThread( AsyncWriter owner ) + { + m_Owner = owner; + } + + public void Worker() + { + AsyncWriter.m_ThreadCount++; + while( m_Owner.m_WriteQueue.Count > 0 ) + { + MemoryStream mem = (MemoryStream)m_Owner.m_WriteQueue.Dequeue(); + + if( mem != null && mem.Length > 0 ) + mem.WriteTo( m_Owner.m_File ); + } + + if( m_Owner.m_Closed ) + m_Owner.m_File.Close(); + + AsyncWriter.m_ThreadCount--; + + if (AsyncWriter.m_ThreadCount <= 0) + World.NotifyDiskWriteComplete(); + } + } + + private void OnWrite() + { + long curlen = m_Mem.Length; + m_CurPos += curlen - m_LastPos; + m_LastPos = curlen; + if( curlen >= BufferSize ) + { + Enqueue( m_Mem ); + m_Mem = new MemoryStream( BufferSize + 1024 ); + m_Bin = new BinaryWriter( m_Mem, Utility.UTF8WithEncoding ); + m_LastPos = 0; + } + } + + public MemoryStream MemStream + { + get + { + return m_Mem; + } + set + { + if( m_Mem.Length > 0 ) + Enqueue( m_Mem ); + + m_Mem = value; + m_Bin = new BinaryWriter( m_Mem, Utility.UTF8WithEncoding ); + m_LastPos = 0; + m_CurPos = m_Mem.Length; + m_Mem.Seek( 0, SeekOrigin.End ); + } + } + + public override void Close() + { + Enqueue( m_Mem ); + m_Closed = true; + } + + public override long Position + { + get + { + return m_CurPos; + } + } + + public override void Write( IPAddress value ) + { + m_Bin.Write( Utility.GetLongAddressValue( value ) ); + OnWrite(); + } + + public override void Write( string value ) + { + if( PrefixStrings ) + { + if( value == null ) + { + m_Bin.Write( (byte)0 ); + } + else + { + m_Bin.Write( (byte)1 ); + m_Bin.Write( value ); + } + } + else + { + m_Bin.Write( value ); + } + OnWrite(); + } + + public override void WriteDeltaTime( DateTime value ) + { + long ticks = value.Ticks; + long now = DateTime.Now.Ticks; + + TimeSpan d; + + try { d = new TimeSpan( ticks-now ); } + catch { if( ticks < now ) d = TimeSpan.MaxValue; else d = TimeSpan.MaxValue; } + + Write( d ); + } + + public override void Write( DateTime value ) + { + m_Bin.Write( value.Ticks ); + OnWrite(); + } + + public override void Write( TimeSpan value ) + { + m_Bin.Write( value.Ticks ); + OnWrite(); + } + + public override void Write( decimal value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( long value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( ulong value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void WriteEncodedInt( int value ) + { + uint v = (uint)value; + + while( v >= 0x80 ) + { + m_Bin.Write( (byte)(v | 0x80) ); + v >>= 7; + } + + m_Bin.Write( (byte)v ); + OnWrite(); + } + + public override void Write( int value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( uint value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( short value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( ushort value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( double value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( float value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( char value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( byte value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( sbyte value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( bool value ) + { + m_Bin.Write( value ); + OnWrite(); + } + + public override void Write( Point3D value ) + { + Write( value.m_X ); + Write( value.m_Y ); + Write( value.m_Z ); + } + + public override void Write( Point2D value ) + { + Write( value.m_X ); + Write( value.m_Y ); + } + + public override void Write( Rectangle2D value ) + { + Write( value.Start ); + Write( value.End ); + } + + public override void Write( Rectangle3D value ) + { + Write( value.Start ); + Write( value.End ); + } + + public override void Write( Map value ) + { + if( value != null ) + Write( (byte)value.MapIndex ); + else + Write( (byte)0xFF ); + } + + public override void Write( Race value ) + { + if( value != null ) + Write( (byte)value.RaceIndex ); + else + Write( (byte)0xFF ); + } + + public override void Write( Item value ) + { + if( value == null || value.Deleted ) + Write( Serial.MinusOne ); + else + Write( value.Serial ); + } + + public override void Write( Mobile value ) + { + if( value == null || value.Deleted ) + Write( Serial.MinusOne ); + else + Write( value.Serial ); + } + + public override void Write( BaseGuild value ) + { + if( value == null ) + Write( 0 ); + else + Write( value.Id ); + } + + public override void WriteItem( T value ) + { + Write( value ); + } + + public override void WriteMobile( T value ) + { + Write( value ); + } + + public override void WriteGuild( T value ) + { + Write( value ); + } + + public override void WriteMobileList( ArrayList list ) + { + WriteMobileList( list, false ); + } + + public override void WriteMobileList( ArrayList list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( ((Mobile)list[i]).Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( (Mobile)list[i] ); + } + + public override void WriteItemList( ArrayList list ) + { + WriteItemList( list, false ); + } + + public override void WriteItemList( ArrayList list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( ((Item)list[i]).Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( (Item)list[i] ); + } + + public override void WriteGuildList( ArrayList list ) + { + WriteGuildList( list, false ); + } + + public override void WriteGuildList( ArrayList list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( ((BaseGuild)list[i]).Disbanded ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( (BaseGuild)list[i] ); + } + + public override void Write( List list ) + { + Write( list, false ); + } + + public override void Write( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void WriteItemList( List list ) + { + WriteItemList( list, false ); + } + public override void WriteItemList( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void Write( List list ) + { + Write( list, false ); + } + + public override void Write( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void WriteMobileList( List list ) + { + WriteMobileList( list, false ); + } + + public override void WriteMobileList( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Deleted ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void Write( List list ) + { + Write( list, false ); + } + + public override void Write( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Disbanded ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + + public override void WriteGuildList( List list ) + { + WriteGuildList( list, false ); + } + + public override void WriteGuildList( List list, bool tidy ) + { + if( tidy ) + { + for( int i = 0; i < list.Count; ) + { + if( list[i].Disbanded ) + list.RemoveAt( i ); + else + ++i; + } + } + + Write( list.Count ); + + for( int i = 0; i < list.Count; ++i ) + Write( list[i] ); + } + } + + public interface ISerializable + { + int TypeReference { get; } + int SerialIdentity { get; } + void Serialize( GenericWriter writer ); + } +} \ No newline at end of file diff --git a/Source/Skills.cs b/Source/Skills.cs new file mode 100644 index 0000000..5b3d8ea --- /dev/null +++ b/Source/Skills.cs @@ -0,0 +1,946 @@ +/*************************************************************************** + * Skills.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using Server.Network; + +namespace Server +{ + public delegate TimeSpan SkillUseCallback( Mobile user ); + + public enum SkillLock : byte + { + Up = 0, + Down = 1, + Locked = 2 + } + + public enum SkillName + { + Archery = 0, + Bludgeoning = 1, + Fencing = 2, + Swords = 3, + Tactics = 4, + Parry = 5, + Concentration = 6, + Discordance = 7, + Dodging = 8, + HandToHand = 9, + Healing = 10, + Hiding = 11, + Lockpicking = 12, + Magery = 13, + MagicResist = 14, + Meditation = 15, + Musicianship = 16, + Peacemaking = 17, + Poisoning = 18, + Provocation = 19, + RemoveTrap = 20, + Searching = 21, + Stealing = 22, + Stealth = 23, + Tracking = 24 + } + + [PropertyObject] + public class Skill + { + private Skills m_Owner; + private SkillInfo m_Info; + private ushort m_Base; + private ushort m_Cap; + private SkillLock m_Lock; + + public override string ToString() + { + return String.Format( "[{0}: {1}]", Name, Base ); + } + + public Skill( Skills owner, SkillInfo info, GenericReader reader ) + { + m_Owner = owner; + m_Info = info; + + int version = reader.ReadByte(); + + switch ( version ) + { + case 0: + { + m_Base = reader.ReadUShort(); + m_Cap = reader.ReadUShort(); + m_Lock = (SkillLock)reader.ReadByte(); + + break; + } + case 0xFF: + { + m_Base = 0; + m_Cap = 1000; + m_Lock = SkillLock.Up; + + break; + } + default: + { + if ( (version & 0xC0) == 0x00 ) + { + if ( (version & 0x1) != 0 ) + m_Base = reader.ReadUShort(); + + if ( (version & 0x2) != 0 ) + m_Cap = reader.ReadUShort(); + else + m_Cap = 1000; + + if ( (version & 0x4) != 0 ) + m_Lock = (SkillLock)reader.ReadByte(); + } + + break; + } + } + + if ( m_Lock < SkillLock.Up || m_Lock > SkillLock.Locked ) + { + Console.WriteLine( "Bad skill lock -> {0}.{1}", owner.Owner, m_Lock ); + m_Lock = SkillLock.Up; + } + } + + public Skill( Skills owner, SkillInfo info, int baseValue, int cap, SkillLock skillLock ) + { + m_Owner = owner; + m_Info = info; + m_Base = (ushort)baseValue; + m_Cap = (ushort)cap; + m_Lock = skillLock; + } + + public void SetLockNoRelay( SkillLock skillLock ) + { + if ( skillLock < SkillLock.Up || skillLock > SkillLock.Locked ) + return; + + m_Lock = skillLock; + } + + public void Serialize( GenericWriter writer ) + { + if ( m_Base == 0 && m_Cap == 1000 && m_Lock == SkillLock.Up ) + { + writer.Write( (byte) 0xFF ); // default + } + else + { + int flags = 0x0; + + if ( m_Base != 0 ) + flags |= 0x1; + + if ( m_Cap != 1000 ) + flags |= 0x2; + + if ( m_Lock != SkillLock.Up ) + flags |= 0x4; + + writer.Write( (byte) flags ); // version + + if ( m_Base != 0 ) + writer.Write( (short) m_Base ); + + if ( m_Cap != 1000 ) + writer.Write( (short) m_Cap ); + + if ( m_Lock != SkillLock.Up ) + writer.Write( (byte) m_Lock ); + } + } + + public Skills Owner + { + get + { + return m_Owner; + } + } + + public SkillName SkillName + { + get + { + return (SkillName)m_Info.SkillID; + } + } + + public int SkillID + { + get + { + return m_Info.SkillID; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public string Name + { + get + { + return m_Info.Name; + } + } + + public SkillInfo Info + { + get + { + return m_Info; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public SkillLock Lock + { + get + { + return m_Lock; + } + } + + public int BaseFixedPoint + { + get + { + return m_Base; + } + set + { + if ( value < 0 ) + value = 0; + else if ( value >= 0x10000 ) + value = 0xFFFF; + + ushort sv = (ushort)value; + + int oldBase = m_Base; + + if ( m_Base != sv ) + { + m_Owner.Total = (m_Owner.Total - m_Base) + sv; + + m_Base = sv; + + m_Owner.OnSkillChange( this ); + + Mobile m = m_Owner.Owner; + + if ( m != null ) + m.OnSkillChange( SkillName, (double)oldBase / 10 ); + } + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public double Base + { + get + { + return ((double)m_Base / 10.0); + } + set + { + BaseFixedPoint = (int)(value * 10.0); + } + } + + public int CapFixedPoint + { + get + { + return m_Cap; + } + set + { + if ( value < 0 ) + value = 0; + else if ( value >= 0x10000 ) + value = 0xFFFF; + + ushort sv = (ushort)value; + + if ( m_Cap != sv ) + { + m_Cap = sv; + + m_Owner.OnSkillChange( this ); + } + } + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public double Cap + { + get + { + return ((double)m_Cap / 10.0); + } + set + { + CapFixedPoint = (int)(value * 10.0); + } + } + + private static bool m_UseStatMods; + + public static bool UseStatMods{ get{ return m_UseStatMods; } set{ m_UseStatMods = value; } } + + public int Fixed + { + get{ return (int)(Value * 10); } + } + + [CommandProperty( AccessLevel.Counselor )] + public double Value + { + get + { + //There has to be this distinction between the racial values and not to account for gaining skills and these skills aren't displayed nor Totaled up. + double value = this.NonRacialValue; + + double raceBonus = m_Owner.Owner.RacialSkillBonus; + + if( raceBonus > value ) + value = raceBonus; + + return value; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public double NonRacialValue + { + get + { + double baseValue = Base; + double inv = 100.0 - baseValue; + + if( inv < 0.0 ) inv = 0.0; + + inv /= 100.0; + + double statsOffset = ((m_UseStatMods ? m_Owner.Owner.Str : m_Owner.Owner.RawStr) * m_Info.StrScale) + ((m_UseStatMods ? m_Owner.Owner.Dex : m_Owner.Owner.RawDex) * m_Info.DexScale) + ((m_UseStatMods ? m_Owner.Owner.Int : m_Owner.Owner.RawInt) * m_Info.IntScale); + double statTotal = m_Info.StatTotal * inv; + + statsOffset *= inv; + + if( statsOffset > statTotal ) + statsOffset = statTotal; + + double value = baseValue + statsOffset; + + m_Owner.Owner.ValidateSkillMods(); + + List mods = m_Owner.Owner.SkillMods; + + double bonusObey = 0.0, bonusNotObey = 0.0; + + for( int i = 0; i < mods.Count; ++i ) + { + SkillMod mod = mods[i]; + + if( mod.Skill == (SkillName)m_Info.SkillID ) + { + if( mod.Relative ) + { + if( mod.ObeyCap ) + bonusObey += mod.Value; + else + bonusNotObey += mod.Value; + } + else + { + bonusObey = 0.0; + bonusNotObey = 0.0; + value = mod.Value; + } + } + } + + value += bonusNotObey; + + if( value < Cap ) + { + value += bonusObey; + + if( value > Cap ) + value = Cap; + } + + return value; + } + } + + public void Update() + { + m_Owner.OnSkillChange( this ); + } + } + + public class SkillInfo + { + private int m_SkillID; + private string m_Name; + private string m_Title; + private double m_StrScale; + private double m_DexScale; + private double m_IntScale; + private double m_StatTotal; + private SkillUseCallback m_Callback; + private double m_StrGain; + private double m_DexGain; + private double m_IntGain; + private double m_GainFactor; + + public SkillInfo( int skillID, string name, double strScale, double dexScale, double intScale, string title, SkillUseCallback callback, double strGain, double dexGain, double intGain, double gainFactor ) + { + m_Name = name; + m_Title = title; + m_SkillID = skillID; + m_StrScale = strScale / 100.0; + m_DexScale = dexScale / 100.0; + m_IntScale = intScale / 100.0; + m_Callback = callback; + m_StrGain = strGain; + m_DexGain = dexGain; + m_IntGain = intGain; + m_GainFactor = gainFactor; + + m_StatTotal = strScale + dexScale + intScale; + } + + public SkillUseCallback Callback + { + get + { + return m_Callback; + } + set + { + m_Callback = value; + } + } + + public int SkillID + { + get + { + return m_SkillID; + } + } + + public string Name + { + get + { + return m_Name; + } + set + { + m_Name = value; + } + } + + public string Title + { + get + { + return m_Title; + } + set + { + m_Title = value; + } + } + + public double StrScale + { + get + { + return m_StrScale; + } + set + { + m_StrScale = value; + } + } + + public double DexScale + { + get + { + return m_DexScale; + } + set + { + m_DexScale = value; + } + } + + public double IntScale + { + get + { + return m_IntScale; + } + set + { + m_IntScale = value; + } + } + + public double StatTotal + { + get + { + return m_StatTotal; + } + set + { + m_StatTotal = value; + } + } + + public double StrGain + { + get + { + return m_StrGain; + } + set + { + m_StrGain = value; + } + } + + public double DexGain + { + get + { + return m_DexGain; + } + set + { + m_DexGain = value; + } + } + + public double IntGain + { + get + { + return m_IntGain; + } + set + { + m_IntGain = value; + } + } + + public double GainFactor + { + get + { + return m_GainFactor; + } + set + { + m_GainFactor = value; + } + } + + private static SkillInfo[] m_Table = new SkillInfo[25] + { + new SkillInfo( 0, "Archery", 2.5, 7.5, 0.0, "Archer", null, 0.25, 0.75, 0.0, 1.0 ), + new SkillInfo( 1, "Bludgeoning", 9.0, 1.0, 0.0, "Bludgeoner", null, 0.9, 0.1, 0.0, 1.0 ), + new SkillInfo( 2, "Fencing", 4.5, 5.5, 0.0, "Fencer", null, 0.45, 0.55, 0.0, 1.0 ), + new SkillInfo( 3, "Swordsmanship", 7.5, 2.5, 0.0, "Swordsman", null, 0.75, 0.25, 0.0, 1.0 ), + new SkillInfo( 4, "Tactics", 2.0, 2.0, 2.0, "Tactician", null, 0.0, 0.0, 0.0, 1.0 ), + new SkillInfo( 5, "Parrying", 7.5, 2.5, 0.0, "Duelist", null, 0.75, 0.25, 0.0, 1.0 ), + new SkillInfo( 6, "Concentration", 0.0, 0.0, 10.0, "Concentrator", null, 0.0, 0.0, 1.0, 1.0 ), + new SkillInfo( 7, "Discordance", 0.0, 2.5, 2.5, "Demoralizer", null, 0.0, 0.25, 0.25, 1.0 ), + new SkillInfo( 8, "Dodging", 2.5, 7.5, 0.0, "Lightfoot", null, 0.0, 0.0, 0.0, 1.0 ), + new SkillInfo( 9, "Hand-to-Hand", 9.0, 1.0, 0.0, "Pugilist", null, 0.9, 0.1, 0.0, 1.0 ), + new SkillInfo( 10, "Healing", 6.0, 6.0, 8.0, "Healer", null, 0.6, 0.6, 0.8, 1.0 ), + new SkillInfo( 11, "Hiding", 0.0, 10.0, 0.0, "Sneak", null, 0.0, 0.8, 0.2, 1.0 ), + new SkillInfo( 12, "Lockpicking", 0.0, 25.0, 0.0, "Lockpicker", null, 0.0, 2.0, 0.0, 1.0 ), + new SkillInfo( 13, "Magery", 0.0, 0.0, 15.0, "Mage", null, 0.0, 0.0, 1.5, 1.0 ), + new SkillInfo( 14, "Resisting Spells", 0.0, 0.0, 10.0, "Warder", null, 0.25, 0.25, 0.5, 1.0 ), + new SkillInfo( 15, "Meditation", 0.0, 0.0, 10.0, "Meditator", null, 0.0, 0.0, 0.0, 1.0 ), + new SkillInfo( 16, "Musicianship", 0.0, 4.5, 0.5, "Bard", null, 0.0, 0.8, 0.2, 1.0 ), + new SkillInfo( 17, "Peacemaking", 0.0, 4.5, 0.5, "Pacifier", null, 0.0, 0.0, 0.0, 1.0 ), + new SkillInfo( 18, "Poisoning", 0.0, 4.0, 16.0, "Assassin", null, 0.0, 0.4, 1.6, 1.0 ), + new SkillInfo( 19, "Provocation", 0.0, 4.5, 0.5, "Rouser", null, 0.0, 0.45, 0.05, 1.0 ), + new SkillInfo( 20, "Remove Trap", 0.0, 5.0, 0.0, "Trespasser", null, 0.0, 0.0, 0.0, 1.0 ), + new SkillInfo( 21, "Searching", 0.0, 0.0, 5.0, "Scout", null, 0.0, 0.4, 0.6, 1.0 ), + new SkillInfo( 22, "Stealing", 0.0, 10.0, 0.0, "Thief", null, 0.0, 1.0, 0.0, 1.0 ), + new SkillInfo( 23, "Stealth", 0.0, 5.0, 0.0, "Rogue", null, 0.0, 0.0, 0.0, 1.0 ), + new SkillInfo( 24, "Tracking", 0.0, 12.5, 12.5, "Ranger", null, 0.0, 1.25, 1.25, 1.0 ) + }; + + public static SkillInfo[] Table + { + get + { + return m_Table; + } + set + { + m_Table = value; + } + } + } + + [PropertyObject] + public class Skills + { + private Mobile m_Owner; + private Skill[] m_Skills; + private int m_Total, m_Cap; + private Skill m_Highest; + + #region Skill Getters & Setters + [CommandProperty( AccessLevel.Counselor )] + public Skill Archery{ get{ return this[SkillName.Archery]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Bludgeoning{ get{ return this[SkillName.Bludgeoning]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Fencing{ get{ return this[SkillName.Fencing]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Swords{ get{ return this[SkillName.Swords]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Tactics{ get{ return this[SkillName.Tactics]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Parry{ get{ return this[SkillName.Parry]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Concentration{ get{ return this[SkillName.Concentration]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Discordance{ get{ return this[SkillName.Discordance]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Dodging{ get{ return this[SkillName.Dodging]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill HandToHand{ get{ return this[SkillName.HandToHand]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Healing{ get{ return this[SkillName.Healing]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Hiding{ get{ return this[SkillName.Hiding]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Lockpicking{ get{ return this[SkillName.Lockpicking]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Magery{ get{ return this[SkillName.Magery]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill MagicResist{ get{ return this[SkillName.MagicResist]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Meditation{ get{ return this[SkillName.Meditation]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Musicianship{ get{ return this[SkillName.Musicianship]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Peacemaking{ get{ return this[SkillName.Peacemaking]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Poisoning{ get{ return this[SkillName.Poisoning]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Provocation{ get{ return this[SkillName.Provocation]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill RemoveTrap{ get{ return this[SkillName.RemoveTrap]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Searching{ get{ return this[SkillName.Searching]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Stealing{ get{ return this[SkillName.Stealing]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Stealth{ get{ return this[SkillName.Stealth]; } set{} } + + [CommandProperty( AccessLevel.Counselor )] + public Skill Tracking{ get{ return this[SkillName.Tracking]; } set{} } + + #endregion + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Cap + { + get{ return m_Cap; } + set{ m_Cap = value; } + } + + public int Total + { + get{ return m_Total; } + set{ m_Total = value; } + } + + public Mobile Owner + { + get{ return m_Owner; } + } + + public int Length + { + get{ return m_Skills.Length; } + } + + public Skill this[SkillName name] + { + get{ return this[(int)name]; } + } + + public Skill this[int skillID] + { + get + { + if ( skillID < 0 || skillID >= m_Skills.Length ) + return null; + + Skill sk = m_Skills[skillID]; + + if ( sk == null ) + m_Skills[skillID] = sk = new Skill( this, SkillInfo.Table[skillID], 0, 1000, SkillLock.Up ); + + return sk; + } + } + + public override string ToString() + { + return "..."; + } + + public static bool UseSkill( Mobile from, SkillName name ) + { + return UseSkill( from, (int)name ); + } + + public static bool UseSkill( Mobile from, int skillID ) + { + if ( !from.CheckAlive() ) + return false; + else if ( !from.Region.OnSkillUse( from, skillID ) ) + return false; + else if ( !from.AllowSkillUse( (SkillName)skillID ) ) + return false; + + if ( skillID >= 0 && skillID < SkillInfo.Table.Length ) + { + SkillInfo info = SkillInfo.Table[skillID]; + + if ( info.Callback != null ) + { + if ( from.NextSkillTime <= DateTime.Now && from.Spell == null ) + { + from.DisruptiveAction(); + + from.NextSkillTime = DateTime.Now + info.Callback( from ); + + return true; + } + else + { + from.SendSkillMessage(); + } + } + else + { + from.SendLocalizedMessage( 500014 ); // That skill cannot be used directly. + } + } + + return false; + } + + public Skill Highest + { + get + { + if ( m_Highest == null ) + { + Skill highest = null; + int value = int.MinValue; + + for ( int i = 0; i < m_Skills.Length; ++i ) + { + Skill sk = m_Skills[i]; + + if ( sk != null && sk.BaseFixedPoint > value ) + { + value = sk.BaseFixedPoint; + highest = sk; + } + } + + if ( highest == null && m_Skills.Length > 0 ) + highest = this[0]; + + m_Highest = highest; + } + + return m_Highest; + } + } + + public void Serialize( GenericWriter writer ) + { + m_Total = 0; + + writer.Write( (int) 3 ); // version + + writer.Write( (int) m_Cap ); + writer.Write( (int) m_Skills.Length ); + + for ( int i = 0; i < m_Skills.Length; ++i ) + { + Skill sk = m_Skills[i]; + + if ( sk == null ) + { + writer.Write( (byte) 0xFF ); + } + else + { + sk.Serialize( writer ); + m_Total += sk.BaseFixedPoint; + } + } + } + + public Skills( Mobile owner ) + { + m_Owner = owner; + m_Cap = 7000; + + SkillInfo[] info = SkillInfo.Table; + + m_Skills = new Skill[info.Length]; + + //for ( int i = 0; i < info.Length; ++i ) + // m_Skills[i] = new Skill( this, info[i], 0, 1000, SkillLock.Up ); + } + + public Skills( Mobile owner, GenericReader reader ) + { + m_Owner = owner; + + int version = reader.ReadInt(); + + switch ( version ) + { + case 3: + case 2: + { + m_Cap = reader.ReadInt(); + + goto case 1; + } + case 1: + { + if ( version < 2 ) + m_Cap = 7000; + + if ( version < 3 ) + /*m_Total =*/ reader.ReadInt(); + + SkillInfo[] info = SkillInfo.Table; + + m_Skills = new Skill[info.Length]; + + int count = reader.ReadInt(); + + for ( int i = 0; i < count; ++i ) + { + if ( i < info.Length ) + { + Skill sk = new Skill( this, info[i], reader ); + + if ( sk.BaseFixedPoint != 0 || sk.CapFixedPoint != 1000 || sk.Lock != SkillLock.Up ) + { + m_Skills[i] = sk; + m_Total += sk.BaseFixedPoint; + } + } + else + { + new Skill( this, null, reader ); + } + } + + //for ( int i = count; i < info.Length; ++i ) + // m_Skills[i] = new Skill( this, info[i], 0, 1000, SkillLock.Up ); + + break; + } + case 0: + { + reader.ReadInt(); + + goto case 1; + } + } + } + + public void OnSkillChange( Skill skill ) + { + if ( skill == m_Highest ) // could be downgrading the skill, force a recalc + m_Highest = null; + else if ( m_Highest != null && skill.BaseFixedPoint > m_Highest.BaseFixedPoint ) + m_Highest = skill; + + m_Owner.OnSkillInvalidated( skill ); + + NetState ns = m_Owner.NetState; + + if ( ns != null ) + ns.Send( new SkillChange( skill ) ); + } + } +} \ No newline at end of file diff --git a/Source/Targeting/LandTarget.cs b/Source/Targeting/LandTarget.cs new file mode 100644 index 0000000..6902c5c --- /dev/null +++ b/Source/Targeting/LandTarget.cs @@ -0,0 +1,104 @@ +/*************************************************************************** + * LandTarget.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Targeting +{ + public class LandTarget : IPoint3D + { + private Point3D m_Location; + private int m_TileID; + + public LandTarget( Point3D location, Map map ) + { + m_Location = location; + + if ( map != null ) + { + m_Location.Z = map.GetAverageZ( m_Location.X, m_Location.Y ); + m_TileID = map.Tiles.GetLandTile( m_Location.X, m_Location.Y ).ID & TileData.MaxLandValue; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public string Name + { + get + { + return TileData.LandTable[m_TileID].Name; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public TileFlag Flags + { + get + { + return TileData.LandTable[m_TileID].Flags; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int TileID + { + get + { + return m_TileID; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public Point3D Location + { + get + { + return m_Location; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int X + { + get + { + return m_Location.X; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Y + { + get + { + return m_Location.Y; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Z + { + get + { + return m_Location.Z; + } + } + } +} \ No newline at end of file diff --git a/Source/Targeting/MultiTarget.cs b/Source/Targeting/MultiTarget.cs new file mode 100644 index 0000000..0d411b7 --- /dev/null +++ b/Source/Targeting/MultiTarget.cs @@ -0,0 +1,76 @@ +/*************************************************************************** + * MultiTarget.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server; +using Server.Network; + +namespace Server.Targeting +{ + public abstract class MultiTarget : Target + { + private int m_MultiID; + private Point3D m_Offset; + + public int MultiID + { + get + { + return m_MultiID; + } + set + { + m_MultiID = value; + } + } + + public Point3D Offset + { + get + { + return m_Offset; + } + set + { + m_Offset = value; + } + } + + protected MultiTarget( int multiID, Point3D offset ) + : this( multiID, offset, 10, true, TargetFlags.None ) + { + } + + protected MultiTarget( int multiID, Point3D offset, int range, bool allowGround, TargetFlags flags ) + : base( range, allowGround, flags ) + { + m_MultiID = multiID; + m_Offset = offset; + } + + public override Packet GetPacketFor( NetState ns ) + { + if ( ns.HighSeas ) + return new MultiTargetReqHS( this ); + else + return new MultiTargetReq( this ); + } + } +} \ No newline at end of file diff --git a/Source/Targeting/StaticTarget.cs b/Source/Targeting/StaticTarget.cs new file mode 100644 index 0000000..9b0413b --- /dev/null +++ b/Source/Targeting/StaticTarget.cs @@ -0,0 +1,100 @@ +/*************************************************************************** + * StaticTarget.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Targeting +{ + public class StaticTarget : IPoint3D + { + private Point3D m_Location; + private int m_ItemID; + + public StaticTarget( Point3D location, int itemID ) + { + m_Location = location; + m_ItemID = itemID & TileData.MaxItemValue; + m_Location.Z += TileData.ItemTable[m_ItemID].CalcHeight; + } + + [CommandProperty( AccessLevel.Counselor )] + public Point3D Location + { + get + { + return m_Location; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public string Name + { + get + { + return TileData.ItemTable[m_ItemID].Name; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public TileFlag Flags + { + get + { + return TileData.ItemTable[m_ItemID].Flags; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int X + { + get + { + return m_Location.X; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Y + { + get + { + return m_Location.Y; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int Z + { + get + { + return m_Location.Z; + } + } + + [CommandProperty( AccessLevel.Counselor )] + public int ItemID + { + get + { + return m_ItemID; + } + } + } +} \ No newline at end of file diff --git a/Source/Targeting/Target.cs b/Source/Targeting/Target.cs new file mode 100644 index 0000000..c093013 --- /dev/null +++ b/Source/Targeting/Target.cs @@ -0,0 +1,376 @@ +/*************************************************************************** + * Target.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using Server.Network; + +namespace Server.Targeting +{ + public abstract class Target + { + private static int m_NextTargetID; + + private int m_TargetID; + private int m_Range; + private bool m_AllowGround; + private bool m_CheckLOS; + private bool m_AllowNonlocal; + private bool m_DisallowMultis; + private TargetFlags m_Flags; + private DateTime m_TimeoutTime; + + public DateTime TimeoutTime{ get{ return m_TimeoutTime; } } + + protected Target( int range, bool allowGround, TargetFlags flags ) + { + m_TargetID = ++m_NextTargetID; + m_Range = range; + m_AllowGround = allowGround; + m_Flags = flags; + + m_CheckLOS = true; + } + + public static void Cancel( Mobile m ) + { + NetState ns = m.NetState; + + if ( ns != null ) + ns.Send( CancelTarget.Instance ); + + Target targ = m.Target; + + if ( targ != null ) + targ.OnTargetCancel( m, TargetCancelType.Canceled ); + } + + private Timer m_TimeoutTimer; + + public void BeginTimeout( Mobile from, TimeSpan delay ) + { + m_TimeoutTime = DateTime.Now + delay; + + if ( m_TimeoutTimer != null ) + m_TimeoutTimer.Stop(); + + m_TimeoutTimer = new TimeoutTimer( this, from, delay ); + m_TimeoutTimer.Start(); + } + + public void CancelTimeout() + { + if ( m_TimeoutTimer != null ) + m_TimeoutTimer.Stop(); + + m_TimeoutTimer = null; + } + + public void Timeout( Mobile from ) + { + CancelTimeout(); + from.ClearTarget(); + + Cancel( from ); + + OnTargetCancel( from, TargetCancelType.Timeout ); + OnTargetFinish( from ); + } + + private class TimeoutTimer : Timer + { + private Target m_Target; + private Mobile m_Mobile; + + private static TimeSpan ThirtySeconds = TimeSpan.FromSeconds( 30.0 ); + private static TimeSpan TenSeconds = TimeSpan.FromSeconds( 10.0 ); + private static TimeSpan OneSecond = TimeSpan.FromSeconds( 1.0 ); + + public TimeoutTimer( Target target, Mobile m, TimeSpan delay ) : base( delay ) + { + m_Target = target; + m_Mobile = m; + + if ( delay >= ThirtySeconds ) + Priority = TimerPriority.FiveSeconds; + else if ( delay >= TenSeconds ) + Priority = TimerPriority.OneSecond; + else if ( delay >= OneSecond ) + Priority = TimerPriority.TwoFiftyMS; + else + Priority = TimerPriority.TwentyFiveMS; + } + + protected override void OnTick() + { + if ( m_Mobile.Target == m_Target ) + m_Target.Timeout( m_Mobile ); + } + } + + public bool CheckLOS + { + get + { + return m_CheckLOS; + } + set + { + m_CheckLOS = value; + } + } + + public bool DisallowMultis + { + get + { + return m_DisallowMultis; + } + set + { + m_DisallowMultis = value; + } + } + + public bool AllowNonlocal + { + get + { + return m_AllowNonlocal; + } + set + { + m_AllowNonlocal = value; + } + } + + public int TargetID + { + get + { + return m_TargetID; + } + } + + public virtual Packet GetPacketFor( NetState ns ) + { + return new TargetReq( this ); + } + + public void Cancel( Mobile from, TargetCancelType type ) + { + CancelTimeout(); + from.ClearTarget(); + + OnTargetCancel( from, type ); + OnTargetFinish( from ); + } + + public void Invoke( Mobile from, object targeted ) + { + CancelTimeout(); + from.ClearTarget(); + + if ( from.Deleted ) + { + OnTargetCancel( from, TargetCancelType.Canceled ); + OnTargetFinish( from ); + return; + } + + Point3D loc; + Map map; + + if ( targeted is LandTarget ) + { + loc = ((LandTarget)targeted).Location; + map = from.Map; + } + else if ( targeted is StaticTarget ) + { + loc = ((StaticTarget)targeted).Location; + map = from.Map; + } + else if ( targeted is Mobile ) + { + if ( ((Mobile)targeted).Deleted ) + { + OnTargetDeleted( from, targeted ); + OnTargetFinish( from ); + return; + } + else if ( !((Mobile)targeted).CanTarget ) + { + OnTargetUntargetable( from, targeted ); + OnTargetFinish( from ); + return; + } + + loc = ((Mobile)targeted).Location; + map = ((Mobile)targeted).Map; + } + else if ( targeted is Item ) + { + Item item = (Item)targeted; + + if ( item.Deleted ) + { + OnTargetDeleted( from, targeted ); + OnTargetFinish( from ); + return; + } + else if ( !item.CanTarget ) + { + OnTargetUntargetable( from, targeted ); + OnTargetFinish( from ); + return; + } + + object root = item.RootParent; + + if ( !m_AllowNonlocal && root is Mobile && root != from && from.AccessLevel == AccessLevel.Player ) + { + OnNonlocalTarget( from, targeted ); + OnTargetFinish( from ); + return; + } + + loc = item.GetWorldLocation(); + map = item.Map; + } + else + { + OnTargetCancel( from, TargetCancelType.Canceled ); + OnTargetFinish( from ); + return; + } + + if ( map == null || map != from.Map || ( m_Range != -1 && !from.InRange( loc, m_Range ) ) ) + { + OnTargetOutOfRange( from, targeted ); + } + else + { + if ( !from.CanSee( targeted ) ) + OnCantSeeTarget( from, targeted ); + else if ( m_CheckLOS && !from.InLOS( targeted ) ) + OnTargetOutOfLOS( from, targeted ); + else if ( targeted is Item && ((Item)targeted).InSecureTrade ) + OnTargetInSecureTrade( from, targeted ); + else if ( targeted is Item && !((Item)targeted).IsAccessibleTo( from ) ) + OnTargetNotAccessible( from, targeted ); + else if ( targeted is Item && !((Item)targeted).CheckTarget( from, this, targeted ) ) + OnTargetUntargetable( from, targeted ); + else if ( targeted is Mobile && !((Mobile)targeted).CheckTarget( from, this, targeted ) ) + OnTargetUntargetable( from, targeted ); + else if ( from.Region.OnTarget( from, this, targeted ) ) + OnTarget( from, targeted ); + } + + OnTargetFinish( from ); + } + + protected virtual void OnTarget( Mobile from, object targeted ) + { + } + + protected virtual void OnTargetNotAccessible( Mobile from, object targeted ) + { + from.SendLocalizedMessage( 500447 ); // That is not accessible. + } + + protected virtual void OnTargetInSecureTrade( Mobile from, object targeted ) + { + from.SendLocalizedMessage( 500447 ); // That is not accessible. + } + + protected virtual void OnNonlocalTarget( Mobile from, object targeted ) + { + from.SendLocalizedMessage( 500447 ); // That is not accessible. + } + + protected virtual void OnCantSeeTarget( Mobile from, object targeted ) + { + from.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + + protected virtual void OnTargetOutOfLOS( Mobile from, object targeted ) + { + from.SendLocalizedMessage( 500237 ); // Target can not be seen. + } + + protected virtual void OnTargetOutOfRange( Mobile from, object targeted ) + { + from.SendLocalizedMessage( 500446 ); // That is too far away. + } + + protected virtual void OnTargetDeleted( Mobile from, object targeted ) + { + } + + protected virtual void OnTargetUntargetable( Mobile from, object targeted ) + { + from.SendLocalizedMessage( 500447 ); // That is not accessible. + } + + protected virtual void OnTargetCancel( Mobile from, TargetCancelType cancelType ) + { + } + + protected virtual void OnTargetFinish( Mobile from ) + { + } + + public int Range + { + get + { + return m_Range; + } + set + { + m_Range = value; + } + } + + public bool AllowGround + { + get + { + return m_AllowGround; + } + set + { + m_AllowGround = value; + } + } + + public TargetFlags Flags + { + get + { + return m_Flags; + } + set + { + m_Flags = value; + } + } + } +} \ No newline at end of file diff --git a/Source/Targeting/TargetCancelType.cs b/Source/Targeting/TargetCancelType.cs new file mode 100644 index 0000000..957f855 --- /dev/null +++ b/Source/Targeting/TargetCancelType.cs @@ -0,0 +1,32 @@ +/*************************************************************************** + * TargetCancelType.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Targeting +{ + public enum TargetCancelType + { + Overriden, + Canceled, + Disconnected, + Timeout + } +} \ No newline at end of file diff --git a/Source/Targeting/TargetFlags.cs b/Source/Targeting/TargetFlags.cs new file mode 100644 index 0000000..2d768e4 --- /dev/null +++ b/Source/Targeting/TargetFlags.cs @@ -0,0 +1,31 @@ +/*************************************************************************** + * TargetFlags.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server.Targeting +{ + public enum TargetFlags : byte + { + None = 0x00, + Harmful = 0x01, + Beneficial = 0x02, + } +} \ No newline at end of file diff --git a/Source/TileData.cs b/Source/TileData.cs new file mode 100644 index 0000000..c24810e --- /dev/null +++ b/Source/TileData.cs @@ -0,0 +1,372 @@ +/*************************************************************************** + * TileData.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Text; + +namespace Server +{ + public struct LandData + { + private string m_Name; + private TileFlag m_Flags; + + public LandData( string name, TileFlag flags ) + { + m_Name = name; + m_Flags = flags; + } + + public string Name + { + get{ return m_Name; } + set{ m_Name = value; } + } + + public TileFlag Flags + { + get{ return m_Flags; } + set{ m_Flags = value; } + } + } + + public struct ItemData + { + private string m_Name; + private TileFlag m_Flags; + private byte m_Weight; + private byte m_Quality; + private byte m_Quantity; + private byte m_Value; + private byte m_Height; + + public ItemData( string name, TileFlag flags, int weight, int quality, int quantity, int value, int height ) + { + m_Name = name; + m_Flags = flags; + m_Weight = (byte)weight; + m_Quality = (byte)quality; + m_Quantity = (byte)quantity; + m_Value = (byte)value; + m_Height = (byte)height; + } + + public string Name + { + get{ return m_Name; } + set{ m_Name = value; } + } + + public TileFlag Flags + { + get{ return m_Flags; } + set{ m_Flags = value; } + } + + public bool Bridge + { + get{ return (m_Flags & TileFlag.Bridge) != 0; } + set + { + if ( value ) + m_Flags |= TileFlag.Bridge; + else + m_Flags &= ~TileFlag.Bridge; + } + } + + public bool Impassable + { + get{ return (m_Flags & TileFlag.Impassable) != 0; } + set + { + if ( value ) + m_Flags |= TileFlag.Impassable; + else + m_Flags &= ~TileFlag.Impassable; + } + } + + public bool Surface + { + get{ return (m_Flags & TileFlag.Surface) != 0; } + set + { + if ( value ) + m_Flags |= TileFlag.Surface; + else + m_Flags &= ~TileFlag.Surface; + } + } + + public int Weight + { + get{ return m_Weight; } + set{ m_Weight = (byte)value; } + } + + public int Quality + { + get{ return m_Quality; } + set{ m_Quality = (byte)value; } + } + + public int Quantity + { + get{ return m_Quantity; } + set{ m_Quantity = (byte)value; } + } + + public int Value + { + get{ return m_Value; } + set{ m_Value = (byte)value; } + } + + public int Height + { + get{ return m_Height; } + set{ m_Height = (byte)value; } + } + + public int CalcHeight + { + get + { + if ( (m_Flags & TileFlag.Bridge) != 0 ) + return m_Height / 2; + else + return m_Height; + } + } + } + + [Flags] + public enum TileFlag : long + { + None = 0x00000000, + Background = 0x00000001, + Weapon = 0x00000002, + Transparent = 0x00000004, + Translucent = 0x00000008, + Wall = 0x00000010, + Damaging = 0x00000020, + Impassable = 0x00000040, + Wet = 0x00000080, + Unknown1 = 0x00000100, + Surface = 0x00000200, + Bridge = 0x00000400, + Generic = 0x00000800, + Window = 0x00001000, + NoShoot = 0x00002000, + ArticleA = 0x00004000, + ArticleAn = 0x00008000, + Internal = 0x00010000, + Foliage = 0x00020000, + PartialHue = 0x00040000, + Unknown2 = 0x00080000, + Map = 0x00100000, + Container = 0x00200000, + Wearable = 0x00400000, + LightSource = 0x00800000, + Animation = 0x01000000, + NoDiagonal = 0x02000000, + Unknown3 = 0x04000000, + Armor = 0x08000000, + Roof = 0x10000000, + Door = 0x20000000, + StairBack = 0x40000000, + StairRight = 0x80000000 + } + + public static class TileData + { + private static LandData[] m_LandData; + private static ItemData[] m_ItemData; + + public static LandData[] LandTable + { + get + { + return m_LandData; + } + } + + public static ItemData[] ItemTable + { + get + { + return m_ItemData; + } + } + + private static int m_MaxLandValue; + private static int m_MaxItemValue; + + public static int MaxLandValue { + get { return m_MaxLandValue; } + } + + public static int MaxItemValue { + get { return m_MaxItemValue; } + } + + private static byte[] m_StringBuffer = new byte[20]; + + private static string ReadNameString( BinaryReader bin ) + { + bin.Read( m_StringBuffer, 0, 20 ); + + int count; + + for ( count = 0; count < 20 && m_StringBuffer[count] != 0; ++count ); + + return Encoding.ASCII.GetString( m_StringBuffer, 0, count ); + } + + static TileData() + { + string filePath = Core.FindDataFile( "tiledata.mul" ); + + if ( File.Exists( filePath ) ) + { + using ( FileStream fs = new FileStream( filePath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + BinaryReader bin = new BinaryReader( fs ); + + if ( fs.Length == 3188736 ) { // 7.0.9.0 + m_LandData = new LandData[0x4000]; + + for ( int i = 0; i < 0x4000; ++i ) + { + if ( i == 1 || ( i > 0 && (i & 0x1F) == 0 ) ) + { + bin.ReadInt32(); // header + } + + TileFlag flags = (TileFlag)bin.ReadInt64(); + bin.ReadInt16(); // skip 2 bytes -- textureID + + m_LandData[i] = new LandData( ReadNameString( bin ), flags ); + } + + m_ItemData = new ItemData[0x10000]; + + for ( int i = 0; i < 0x10000; ++i ) + { + if ( (i & 0x1F) == 0 ) + { + bin.ReadInt32(); // header + } + + TileFlag flags = (TileFlag)bin.ReadInt64(); + int weight = bin.ReadByte(); + int quality = bin.ReadByte(); + bin.ReadInt16(); + bin.ReadByte(); + int quantity = bin.ReadByte(); + bin.ReadInt32(); + bin.ReadByte(); + int value = bin.ReadByte(); + int height = bin.ReadByte(); + + m_ItemData[i] = new ItemData( ReadNameString( bin ), flags, weight, quality, quantity, value, height ); + } + } else { + m_LandData = new LandData[0x4000]; + + for ( int i = 0; i < 0x4000; ++i ) + { + if ( (i & 0x1F) == 0 ) + { + bin.ReadInt32(); // header + } + + TileFlag flags = (TileFlag)bin.ReadInt32(); + bin.ReadInt16(); // skip 2 bytes -- textureID + + m_LandData[i] = new LandData( ReadNameString( bin ), flags ); + } + + if ( fs.Length == 1644544 ) { // 7.0.0.0 + m_ItemData = new ItemData[0x8000]; + + for ( int i = 0; i < 0x8000; ++i ) + { + if ( (i & 0x1F) == 0 ) + { + bin.ReadInt32(); // header + } + + TileFlag flags = (TileFlag)bin.ReadInt32(); + int weight = bin.ReadByte(); + int quality = bin.ReadByte(); + bin.ReadInt16(); + bin.ReadByte(); + int quantity = bin.ReadByte(); + bin.ReadInt32(); + bin.ReadByte(); + int value = bin.ReadByte(); + int height = bin.ReadByte(); + + m_ItemData[i] = new ItemData( ReadNameString( bin ), flags, weight, quality, quantity, value, height ); + } + } else { + m_ItemData = new ItemData[0x4000]; + + for ( int i = 0; i < 0x4000; ++i ) + { + if ( (i & 0x1F) == 0 ) + { + bin.ReadInt32(); // header + } + + TileFlag flags = (TileFlag)bin.ReadInt32(); + int weight = bin.ReadByte(); + int quality = bin.ReadByte(); + bin.ReadInt16(); + bin.ReadByte(); + int quantity = bin.ReadByte(); + bin.ReadInt32(); + bin.ReadByte(); + int value = bin.ReadByte(); + int height = bin.ReadByte(); + + m_ItemData[i] = new ItemData( ReadNameString( bin ), flags, weight, quality, quantity, value, height ); + } + } + } + } + + m_MaxLandValue = m_LandData.Length - 1; + m_MaxItemValue = m_ItemData.Length - 1; + } + else + { + Console.WriteLine( "tiledata.mul was not found" ); + Console.WriteLine( "Make sure your Data/Scripts/Misc/DataPath.cs is properly configured" ); + Console.WriteLine( "After pressing return an exception will be thrown and the server will terminate" ); + + throw new Exception( String.Format( "TileData: {0} not found", filePath ) ); + } + } + } +} \ No newline at end of file diff --git a/Source/TileList.cs b/Source/TileList.cs new file mode 100644 index 0000000..df15991 --- /dev/null +++ b/Source/TileList.cs @@ -0,0 +1,92 @@ +/*************************************************************************** + * TileList.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + public class TileList + { + private StaticTile[] m_Tiles; + private int m_Count; + + public TileList() + { + m_Tiles = new StaticTile[8]; + m_Count = 0; + } + + public int Count + { + get + { + return m_Count; + } + } + + public void AddRange( StaticTile[] tiles ) + { + if ( (m_Count + tiles.Length) > m_Tiles.Length ) + { + StaticTile[] old = m_Tiles; + m_Tiles = new StaticTile[(m_Count + tiles.Length) * 2]; + + for ( int i = 0; i < old.Length; ++i ) + m_Tiles[i] = old[i]; + } + + for ( int i = 0; i < tiles.Length; ++i ) + m_Tiles[m_Count++] = tiles[i]; + } + + public void Add( ushort id, sbyte z ) + { + if ( (m_Count + 1) > m_Tiles.Length ) + { + StaticTile[] old = m_Tiles; + m_Tiles = new StaticTile[old.Length * 2]; + + for ( int i = 0; i < old.Length; ++i ) + m_Tiles[i] = old[i]; + } + + m_Tiles[m_Count].m_ID = id; + m_Tiles[m_Count].m_Z = z; + ++m_Count; + } + + private static StaticTile[] m_EmptyTiles = new StaticTile[0]; + + public StaticTile[] ToArray() + { + if ( m_Count == 0 ) + return m_EmptyTiles; + + StaticTile[] tiles = new StaticTile[m_Count]; + + for ( int i = 0; i < m_Count; ++i ) + tiles[i] = m_Tiles[i]; + + m_Count = 0; + + return tiles; + } + } +} \ No newline at end of file diff --git a/Source/TileMatrix.cs b/Source/TileMatrix.cs new file mode 100644 index 0000000..76a70e9 --- /dev/null +++ b/Source/TileMatrix.cs @@ -0,0 +1,627 @@ +/*************************************************************************** + * TileMatrix.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; + +namespace Server +{ + public class TileMatrix + { + private StaticTile[][][][][] m_StaticTiles; + private LandTile[][][] m_LandTiles; + + private LandTile[] m_InvalidLandBlock; + private StaticTile[][][] m_EmptyStaticBlock; + + private FileStream m_Map; + + private FileStream m_Index; + private BinaryReader m_IndexReader; + + private FileStream m_Statics; + + private int m_FileIndex; + private int m_BlockWidth, m_BlockHeight; + private int m_Width, m_Height; + + private Map m_Owner; + + private TileMatrixPatch m_Patch; + private int[][] m_StaticPatches; + private int[][] m_LandPatches; + + public Map Owner + { + get + { + return m_Owner; + } + } + + public TileMatrixPatch Patch + { + get + { + return m_Patch; + } + } + + public int BlockWidth + { + get + { + return m_BlockWidth; + } + } + + public int BlockHeight + { + get + { + return m_BlockHeight; + } + } + + public int Width + { + get + { + return m_Width; + } + } + + public int Height + { + get + { + return m_Height; + } + } + + public FileStream MapStream + { + get{ return m_Map; } + set{ m_Map = value; } + } + + public FileStream IndexStream + { + get{ return m_Index; } + set{ m_Index = value; } + } + + public FileStream DataStream + { + get{ return m_Statics; } + set{ m_Statics = value; } + } + + public BinaryReader IndexReader + { + get{ return m_IndexReader; } + set{ m_IndexReader = value; } + } + + public bool Exists + { + get{ return ( m_Map != null && m_Index != null && m_Statics != null ); } + } + + private static List m_Instances = new List(); + private List m_FileShare = new List(); + + public TileMatrix( Map owner, int fileIndex, int mapID, int width, int height ) + { + for ( int i = 0; i < m_Instances.Count; ++i ) + { + TileMatrix tm = m_Instances[i]; + + if ( tm.m_FileIndex == fileIndex ) + { + tm.m_FileShare.Add( this ); + m_FileShare.Add( tm ); + } + } + + m_Instances.Add( this ); + m_FileIndex = fileIndex; + m_Width = width; + m_Height = height; + m_BlockWidth = width >> 3; + m_BlockHeight = height >> 3; + + m_Owner = owner; + + if ( fileIndex != 0x7F ) + { + string mapPath = Core.FindDataFile( "map{0}.mul", fileIndex ); + + if ( File.Exists( mapPath ) ) + m_Map = new FileStream( mapPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ); + + string indexPath = Core.FindDataFile( "staidx{0}.mul", fileIndex ); + + if ( File.Exists( indexPath ) ) + { + m_Index = new FileStream( indexPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ); + m_IndexReader = new BinaryReader( m_Index ); + } + + string staticsPath = Core.FindDataFile( "statics{0}.mul", fileIndex ); + + if ( File.Exists( staticsPath ) ) + m_Statics = new FileStream( staticsPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ); + } + + m_EmptyStaticBlock = new StaticTile[8][][]; + + for ( int i = 0; i < 8; ++i ) + { + m_EmptyStaticBlock[i] = new StaticTile[8][]; + + for ( int j = 0; j < 8; ++j ) + m_EmptyStaticBlock[i][j] = new StaticTile[0]; + } + + m_InvalidLandBlock = new LandTile[196]; + + m_LandTiles = new LandTile[m_BlockWidth][][]; + m_StaticTiles = new StaticTile[m_BlockWidth][][][][]; + m_StaticPatches = new int[m_BlockWidth][]; + m_LandPatches = new int[m_BlockWidth][]; + + m_Patch = new TileMatrixPatch( this, mapID ); + } + + public StaticTile[][][] EmptyStaticBlock + { + get + { + return m_EmptyStaticBlock; + } + } + + public void SetStaticBlock( int x, int y, StaticTile[][][] value ) + { + if ( x < 0 || y < 0 || x >= m_BlockWidth || y >= m_BlockHeight ) + return; + + if ( m_StaticTiles[x] == null ) + m_StaticTiles[x] = new StaticTile[m_BlockHeight][][][]; + + m_StaticTiles[x][y] = value; + + if ( m_StaticPatches[x] == null ) + m_StaticPatches[x] = new int[(m_BlockHeight + 31) >> 5]; + + m_StaticPatches[x][y >> 5] |= 1 << (y & 0x1F); + } + + public StaticTile[][][] GetStaticBlock( int x, int y ) + { + if ( x < 0 || y < 0 || x >= m_BlockWidth || y >= m_BlockHeight || m_Statics == null || m_Index == null ) + return m_EmptyStaticBlock; + + if ( m_StaticTiles[x] == null ) + m_StaticTiles[x] = new StaticTile[m_BlockHeight][][][]; + + StaticTile[][][] tiles = m_StaticTiles[x][y]; + + if ( tiles == null ) + { + for ( int i = 0; tiles == null && i < m_FileShare.Count; ++i ) + { + TileMatrix shared = m_FileShare[i]; + + if ( x >= 0 && x < shared.m_BlockWidth && y >= 0 && y < shared.m_BlockHeight ) + { + StaticTile[][][][] theirTiles = shared.m_StaticTiles[x]; + + if ( theirTiles != null ) + tiles = theirTiles[y]; + + if ( tiles != null ) + { + int[] theirBits = shared.m_StaticPatches[x]; + + if ( theirBits != null && (theirBits[y >> 5] & (1 << (y & 0x1F))) != 0 ) + tiles = null; + } + } + } + + if ( tiles == null ) + tiles = ReadStaticBlock( x, y ); + + m_StaticTiles[x][y] = tiles; + } + + return tiles; + } + + public StaticTile[] GetStaticTiles( int x, int y ) + { + StaticTile[][][] tiles = GetStaticBlock( x >> 3, y >> 3 ); + + return tiles[x & 0x7][y & 0x7]; + } + + private static TileList m_TilesList = new TileList(); + + public StaticTile[] GetStaticTiles( int x, int y, bool multis ) + { + StaticTile[][][] tiles = GetStaticBlock( x >> 3, y >> 3 ); + + if ( multis ) + { + IPooledEnumerable eable = m_Owner.GetMultiTilesAt( x, y ); + + if ( eable == Map.NullEnumerable.Instance ) + return tiles[x & 0x7][y & 0x7]; + + bool any = false; + + foreach ( StaticTile[] multiTiles in eable ) + { + if ( !any ) + any = true; + + m_TilesList.AddRange( multiTiles ); + } + + eable.Free(); + + if ( !any ) + return tiles[x & 0x7][y & 0x7]; + + m_TilesList.AddRange( tiles[x & 0x7][y & 0x7] ); + + return m_TilesList.ToArray(); + } + else + { + return tiles[x & 0x7][y & 0x7]; + } + } + + public void SetLandBlock( int x, int y, LandTile[] value ) + { + if ( x < 0 || y < 0 || x >= m_BlockWidth || y >= m_BlockHeight ) + return; + + if ( m_LandTiles[x] == null ) + m_LandTiles[x] = new LandTile[m_BlockHeight][]; + + m_LandTiles[x][y] = value; + + if ( m_LandPatches[x] == null ) + m_LandPatches[x] = new int[(m_BlockHeight + 31) >> 5]; + + m_LandPatches[x][y >> 5] |= 1 << (y & 0x1F); + } + + public LandTile[] GetLandBlock( int x, int y ) + { + if ( x < 0 || y < 0 || x >= m_BlockWidth || y >= m_BlockHeight || m_Map == null ) + return m_InvalidLandBlock; + + if ( m_LandTiles[x] == null ) + m_LandTiles[x] = new LandTile[m_BlockHeight][]; + + LandTile[] tiles = m_LandTiles[x][y]; + + if ( tiles == null ) + { + for ( int i = 0; tiles == null && i < m_FileShare.Count; ++i ) + { + TileMatrix shared = m_FileShare[i]; + + if ( x >= 0 && x < shared.m_BlockWidth && y >= 0 && y < shared.m_BlockHeight ) + { + LandTile[][] theirTiles = shared.m_LandTiles[x]; + + if ( theirTiles != null ) + tiles = theirTiles[y]; + + if ( tiles != null ) + { + int[] theirBits = shared.m_LandPatches[x]; + + if ( theirBits != null && (theirBits[y >> 5] & (1 << (y & 0x1F))) != 0 ) + tiles = null; + } + } + } + + if ( tiles == null ) + tiles = ReadLandBlock( x, y ); + + m_LandTiles[x][y] = tiles; + } + + return tiles; + } + + public LandTile GetLandTile( int x, int y ) + { + LandTile[] tiles = GetLandBlock( x >> 3, y >> 3 ); + + return tiles[((y & 0x7) << 3) + (x & 0x7)]; + } + + private static TileList[][] m_Lists; + + private static StaticTile[] m_TileBuffer = new StaticTile[128]; + + private unsafe StaticTile[][][] ReadStaticBlock( int x, int y ) + { + try + { + m_IndexReader.BaseStream.Seek( ((x * m_BlockHeight) + y) * 12, SeekOrigin.Begin ); + + int lookup = m_IndexReader.ReadInt32(); + int length = m_IndexReader.ReadInt32(); + + if ( lookup < 0 || length <= 0 ) + { + return m_EmptyStaticBlock; + } + else + { + int count = length / 7; + + m_Statics.Seek( lookup, SeekOrigin.Begin ); + + if ( m_TileBuffer.Length < count ) + m_TileBuffer = new StaticTile[count]; + + StaticTile[] staTiles = m_TileBuffer;//new StaticTile[tileCount]; + + fixed ( StaticTile *pTiles = staTiles ) + { +#if !MONO + NativeReader.Read( m_Statics.SafeFileHandle.DangerousGetHandle(), pTiles, length ); +#else + NativeReader.Read( m_Statics.Handle, pTiles, length ); +#endif + if ( m_Lists == null ) + { + m_Lists = new TileList[8][]; + + for ( int i = 0; i < 8; ++i ) + { + m_Lists[i] = new TileList[8]; + + for ( int j = 0; j < 8; ++j ) + m_Lists[i][j] = new TileList(); + } + } + + TileList[][] lists = m_Lists; + + StaticTile *pCur = pTiles, pEnd = pTiles + count; + + while ( pCur < pEnd ) + { + lists[pCur->m_X & 0x7][pCur->m_Y & 0x7].Add( pCur->m_ID, pCur->m_Z ); + pCur = pCur + 1; + } + + StaticTile[][][] tiles = new StaticTile[8][][]; + + for ( int i = 0; i < 8; ++i ) + { + tiles[i] = new StaticTile[8][]; + + for ( int j = 0; j < 8; ++j ) + tiles[i][j] = lists[i][j].ToArray(); + } + + return tiles; + } + } + } + catch ( EndOfStreamException ) + { + if ( DateTime.Now >= m_NextStaticWarning ) + { + Console.WriteLine( "Warning: Static EOS for {0} ({1}, {2})", m_Owner, x, y ); + m_NextStaticWarning = DateTime.Now + TimeSpan.FromMinutes( 1.0 ); + } + + return m_EmptyStaticBlock; + } + } + + private DateTime m_NextStaticWarning; + private DateTime m_NextLandWarning; + + public void Force() + { + if ( ScriptCompiler.Assemblies == null || ScriptCompiler.Assemblies.Length == 0 ) + throw new Exception(); + } + + private unsafe LandTile[] ReadLandBlock( int x, int y ) + { + try + { + m_Map.Seek( ((x * m_BlockHeight) + y) * 196 + 4, SeekOrigin.Begin ); + + LandTile[] tiles = new LandTile[64]; + + fixed ( LandTile *pTiles = tiles ) + { +#if !MONO + NativeReader.Read( m_Map.SafeFileHandle.DangerousGetHandle(), pTiles, 192 ); +#else + NativeReader.Read( m_Map.Handle, pTiles, 192 ); +#endif + } + + return tiles; + } + catch + { + if ( DateTime.Now >= m_NextLandWarning ) + { + Console.WriteLine( "Warning: Land EOS for {0} ({1}, {2})", m_Owner, x, y ); + m_NextLandWarning = DateTime.Now + TimeSpan.FromMinutes( 1.0 ); + } + + return m_InvalidLandBlock; + } + } + + public void Dispose() + { + if ( m_Map != null ) + m_Map.Close(); + + if ( m_Statics != null ) + m_Statics.Close(); + + if ( m_IndexReader != null ) + m_IndexReader.Close(); + } + } + + [System.Runtime.InteropServices.StructLayout( System.Runtime.InteropServices.LayoutKind.Sequential, Pack=1 )] + public struct LandTile + { + internal short m_ID; + internal sbyte m_Z; + + public int ID + { + get { return m_ID; } + } + + public int Z + { + get { return m_Z; } + set { m_Z = (sbyte)value; } + } + + public int Height + { + get { return 0; } + + } + + public bool Ignored + { + get { return ( m_ID == 2 || m_ID == 0x1DB || ( m_ID >= 0x1AE && m_ID <= 0x1B5 ) ); } + } + + public LandTile( short id, sbyte z ) + { + m_ID = id; + m_Z = z; + } + + public void Set( short id, sbyte z ) + { + m_ID = id; + m_Z = z; + } + } + + [System.Runtime.InteropServices.StructLayout( System.Runtime.InteropServices.LayoutKind.Sequential, Pack=1 )] + public struct StaticTile + { + internal ushort m_ID; + internal byte m_X; + internal byte m_Y; + internal sbyte m_Z; + internal short m_Hue; + + public int ID + { + get { return m_ID; } + } + + public int X + { + get { return m_X; } + set { m_X = (byte)value; } + } + + public int Y + { + get { return m_Y; } + set { m_Y = (byte)value; } + } + + public int Z + { + get { return m_Z; } + set { m_Z = (sbyte)value; } + } + + public int Hue + { + get { return m_Hue; } + set { m_Hue = (short)value; } + } + + public int Height + { + get { return TileData.ItemTable[m_ID & TileData.MaxItemValue].Height; } + } + + public StaticTile( ushort id, sbyte z ) + { + m_ID = id; + m_Z = z; + + m_X = 0; + m_Y = 0; + m_Hue = 0; + } + + public StaticTile( ushort id, byte x, byte y, sbyte z, short hue ) + { + m_ID = id; + m_X = x; + m_Y = y; + m_Z = z; + m_Hue = hue; + } + + public void Set( ushort id, sbyte z ) + { + m_ID = id; + m_Z = z; + } + + public void Set( ushort id, byte x, byte y, sbyte z, short hue ) + { + m_ID = id; + m_X = x; + m_Y = y; + m_Z = z; + m_Hue = hue; + } + } +} diff --git a/Source/TileMatrixPatch.cs b/Source/TileMatrixPatch.cs new file mode 100644 index 0000000..7f4e3e0 --- /dev/null +++ b/Source/TileMatrixPatch.cs @@ -0,0 +1,207 @@ +/*************************************************************************** + * TileMatrixPatch.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Runtime.InteropServices; + +namespace Server +{ + public class TileMatrixPatch + { + private int m_LandBlocks, m_StaticBlocks; + + private static bool m_Enabled = true; + + public static bool Enabled + { + get + { + return m_Enabled; + } + set + { + m_Enabled = value; + } + } + + public int LandBlocks + { + get + { + return m_LandBlocks; + } + } + + public int StaticBlocks + { + get + { + return m_StaticBlocks; + } + } + + public TileMatrixPatch( TileMatrix matrix, int index ) + { + if ( !m_Enabled ) + return; + + string mapDataPath = Core.FindDataFile( "mapdif{0}.mul", index ); + string mapIndexPath = Core.FindDataFile( "mapdifl{0}.mul", index ); + + if ( File.Exists( mapDataPath ) && File.Exists( mapIndexPath ) ) + m_LandBlocks = PatchLand( matrix, mapDataPath, mapIndexPath ); + + string staDataPath = Core.FindDataFile( "stadif{0}.mul", index ); + string staIndexPath = Core.FindDataFile( "stadifl{0}.mul", index ); + string staLookupPath = Core.FindDataFile( "stadifi{0}.mul", index ); + + if ( File.Exists( staDataPath ) && File.Exists( staIndexPath ) && File.Exists( staLookupPath ) ) + m_StaticBlocks = PatchStatics( matrix, staDataPath, staIndexPath, staLookupPath ); + } + + private unsafe int PatchLand( TileMatrix matrix, string dataPath, string indexPath ) + { + using ( FileStream fsData = new FileStream( dataPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + using ( FileStream fsIndex = new FileStream( indexPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + BinaryReader indexReader = new BinaryReader( fsIndex ); + + int count = (int)(indexReader.BaseStream.Length / 4); + + for ( int i = 0; i < count; ++i ) + { + int blockID = indexReader.ReadInt32(); + int x = blockID / matrix.BlockHeight; + int y = blockID % matrix.BlockHeight; + + fsData.Seek( 4, SeekOrigin.Current ); + + LandTile[] tiles = new LandTile[64]; + + fixed ( LandTile *pTiles = tiles ) + { +#if !MONO + NativeReader.Read( fsData.SafeFileHandle.DangerousGetHandle(), pTiles, 192 ); +#else + NativeReader.Read( fsData.Handle, pTiles, 192 ); +#endif + } + + matrix.SetLandBlock( x, y, tiles ); + } + + indexReader.Close(); + + return count; + } + } + } + + private static StaticTile[] m_TileBuffer = new StaticTile[128]; + + private unsafe int PatchStatics( TileMatrix matrix, string dataPath, string indexPath, string lookupPath ) + { + using ( FileStream fsData = new FileStream( dataPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + using ( FileStream fsIndex = new FileStream( indexPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + using ( FileStream fsLookup = new FileStream( lookupPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) + { + BinaryReader indexReader = new BinaryReader( fsIndex ); + BinaryReader lookupReader = new BinaryReader( fsLookup ); + + int count = (int)(indexReader.BaseStream.Length / 4); + + TileList[][] lists = new TileList[8][]; + + for ( int x = 0; x < 8; ++x ) + { + lists[x] = new TileList[8]; + + for ( int y = 0; y < 8; ++y ) + lists[x][y] = new TileList(); + } + + for ( int i = 0; i < count; ++i ) + { + int blockID = indexReader.ReadInt32(); + int blockX = blockID / matrix.BlockHeight; + int blockY = blockID % matrix.BlockHeight; + + int offset = lookupReader.ReadInt32(); + int length = lookupReader.ReadInt32(); + lookupReader.ReadInt32(); // Extra + + if ( offset < 0 || length <= 0 ) + { + matrix.SetStaticBlock( blockX, blockY, matrix.EmptyStaticBlock ); + continue; + } + + fsData.Seek( offset, SeekOrigin.Begin ); + + int tileCount = length / 7; + + if ( m_TileBuffer.Length < tileCount ) + m_TileBuffer = new StaticTile[tileCount]; + + StaticTile[] staTiles = m_TileBuffer; + + fixed ( StaticTile *pTiles = staTiles ) + { +#if !MONO + NativeReader.Read( fsData.SafeFileHandle.DangerousGetHandle(), pTiles, length ); +#else + NativeReader.Read( fsData.Handle, pTiles, length ); +#endif + StaticTile *pCur = pTiles, pEnd = pTiles + tileCount; + + while ( pCur < pEnd ) + { + lists[pCur->m_X & 0x7][pCur->m_Y & 0x7].Add( (ushort)pCur->m_ID, pCur->m_Z ); + pCur = pCur + 1; + } + + StaticTile[][][] tiles = new StaticTile[8][][]; + + for ( int x = 0; x < 8; ++x ) + { + tiles[x] = new StaticTile[8][]; + + for ( int y = 0; y < 8; ++y ) + tiles[x][y] = lists[x][y].ToArray(); + } + + matrix.SetStaticBlock( blockX, blockY, tiles ); + } + } + + indexReader.Close(); + lookupReader.Close(); + + return count; + } + } + } + } + } +} \ No newline at end of file diff --git a/Source/Timer.cs b/Source/Timer.cs new file mode 100644 index 0000000..ae2d97c --- /dev/null +++ b/Source/Timer.cs @@ -0,0 +1,664 @@ +/*************************************************************************** + * Timer.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Threading; +using Server.Diagnostics; + +namespace Server +{ + public enum TimerPriority + { + EveryTick, + TenMS, + TwentyFiveMS, + FiftyMS, + TwoFiftyMS, + OneSecond, + FiveSeconds, + OneMinute + } + + public delegate void TimerCallback(); + public delegate void TimerStateCallback( object state ); + public delegate void TimerStateCallback( T state ); + + public class Timer + { + private DateTime m_Next; + private TimeSpan m_Delay; + private TimeSpan m_Interval; + private bool m_Running; + private int m_Index, m_Count; + private TimerPriority m_Priority; + private List m_List; + private bool m_PrioritySet; + + private static string FormatDelegate( Delegate callback ) + { + if ( callback == null ) + return "null"; + + return String.Format( "{0}.{1}", callback.Method.DeclaringType.FullName, callback.Method.Name ); + } + + public static void DumpInfo( TextWriter tw ) + { + TimerThread.DumpInfo( tw ); + } + + public TimerPriority Priority + { + get + { + return m_Priority; + } + set + { + if ( !m_PrioritySet ) + m_PrioritySet = true; + + if ( m_Priority != value ) + { + m_Priority = value; + + if ( m_Running ) + TimerThread.PriorityChange( this, (int)m_Priority ); + } + } + } + + public DateTime Next + { + get { return m_Next; } + } + + public TimeSpan Delay + { + get { return m_Delay; } + set { m_Delay = value; } + } + + public TimeSpan Interval + { + get { return m_Interval; } + set { m_Interval = value; } + } + + public bool Running + { + get { return m_Running; } + set { + if ( value ) { + Start(); + } else { + Stop(); + } + } + } + + public TimerProfile GetProfile() + { + if ( !Core.Profiling ) { + return null; + } + + string name = ToString(); + + if ( name == null ) { + name = "null"; + } + + return TimerProfile.Acquire( name ); + } + + public class TimerThread + { + private static Queue m_ChangeQueue = Queue.Synchronized( new Queue() ); + + private static DateTime[] m_NextPriorities = new DateTime[8]; + private static TimeSpan[] m_PriorityDelays = new TimeSpan[8] + { + TimeSpan.Zero, + TimeSpan.FromMilliseconds( 10.0 ), + TimeSpan.FromMilliseconds( 25.0 ), + TimeSpan.FromMilliseconds( 50.0 ), + TimeSpan.FromMilliseconds( 250.0 ), + TimeSpan.FromSeconds( 1.0 ), + TimeSpan.FromSeconds( 5.0 ), + TimeSpan.FromMinutes( 1.0 ) + }; + + private static List[] m_Timers = new List[8] + { + new List(), + new List(), + new List(), + new List(), + new List(), + new List(), + new List(), + new List(), + }; + + public static void DumpInfo( TextWriter tw ) + { + for ( int i = 0; i < 8; ++i ) + { + tw.WriteLine( "Priority: {0}", (TimerPriority)i ); + tw.WriteLine(); + + Dictionary> hash = new Dictionary>(); + + for ( int j = 0; j < m_Timers[i].Count; ++j ) + { + Timer t = m_Timers[i][j]; + + string key = t.ToString(); + + List list; + hash.TryGetValue( key, out list ); + + if ( list == null ) + hash[key] = list = new List(); + + list.Add( t ); + } + + foreach ( KeyValuePair> kv in hash ) + { + string key = kv.Key; + List list = kv.Value; + + tw.WriteLine( "Type: {0}; Count: {1}; Percent: {2}%", key, list.Count, (int)(100 * (list.Count / (double)m_Timers[i].Count)) ); + } + + tw.WriteLine(); + tw.WriteLine(); + } + } + + private class TimerChangeEntry + { + public Timer m_Timer; + public int m_NewIndex; + public bool m_IsAdd; + + private TimerChangeEntry( Timer t, int newIndex, bool isAdd ) + { + m_Timer = t; + m_NewIndex = newIndex; + m_IsAdd = isAdd; + } + + public void Free() + { + //m_InstancePool.Enqueue( this ); + } + + private static Queue m_InstancePool = new Queue(); + + public static TimerChangeEntry GetInstance( Timer t, int newIndex, bool isAdd ) + { + TimerChangeEntry e; + + if ( m_InstancePool.Count > 0 ) + { + e = m_InstancePool.Dequeue(); + + if ( e == null ) + e = new TimerChangeEntry( t, newIndex, isAdd ); + else + { + e.m_Timer = t; + e.m_NewIndex = newIndex; + e.m_IsAdd = isAdd; + } + } + else + { + e = new TimerChangeEntry( t, newIndex, isAdd ); + } + + return e; + } + } + + public TimerThread() + { + } + + public static void Change( Timer t, int newIndex, bool isAdd ) + { + m_ChangeQueue.Enqueue( TimerChangeEntry.GetInstance( t, newIndex, isAdd ) ); + m_Signal.Set(); + } + + public static void AddTimer( Timer t ) + { + Change( t, (int)t.Priority, true ); + } + + public static void PriorityChange( Timer t, int newPrio ) + { + Change( t, newPrio, false ); + } + + public static void RemoveTimer( Timer t ) + { + Change( t, -1, false ); + } + + private static void ProcessChangeQueue() + { + while ( m_ChangeQueue.Count > 0 ) + { + TimerChangeEntry tce = (TimerChangeEntry)m_ChangeQueue.Dequeue(); + Timer timer = tce.m_Timer; + int newIndex = tce.m_NewIndex; + + if ( timer.m_List != null ) + timer.m_List.Remove( timer ); + + if ( tce.m_IsAdd ) + { + timer.m_Next = DateTime.Now + timer.m_Delay; + timer.m_Index = 0; + } + + if ( newIndex >= 0 ) + { + timer.m_List = m_Timers[newIndex]; + timer.m_List.Add( timer ); + } + else + { + timer.m_List = null; + } + + tce.Free(); + } + } + + private static AutoResetEvent m_Signal = new AutoResetEvent( false ); + public static void Set() { m_Signal.Set(); } + + public void TimerMain() + { + DateTime now; + int i, j; + bool loaded; + + while ( !Core.Closing ) + { + ProcessChangeQueue(); + + loaded = false; + + for ( i = 0; i < m_Timers.Length; i++) + { + now = DateTime.Now; + if ( now < m_NextPriorities[i] ) + break; + + m_NextPriorities[i] = now + m_PriorityDelays[i]; + + for ( j = 0; j < m_Timers[i].Count; j++) + { + Timer t = m_Timers[i][j]; + + if ( !t.m_Queued && now > t.m_Next ) + { + t.m_Queued = true; + + lock ( m_Queue ) + m_Queue.Enqueue( t ); + + loaded = true; + + if ( t.m_Count != 0 && (++t.m_Index >= t.m_Count) ) + { + t.Stop(); + } + else + { + t.m_Next = now + t.m_Interval; + } + } + } + } + + if ( loaded ) + Core.Set(); + + m_Signal.WaitOne( 10, false ); + } + } + } + + private static Queue m_Queue = new Queue(); + private static int m_BreakCount = 20000; + + public static int BreakCount{ get{ return m_BreakCount; } set{ m_BreakCount = value; } } + + private static int m_QueueCountAtSlice; + + private bool m_Queued; + + public static void Slice() + { + lock ( m_Queue ) + { + m_QueueCountAtSlice = m_Queue.Count; + + int index = 0; + + while ( index < m_BreakCount && m_Queue.Count != 0 ) + { + Timer t = m_Queue.Dequeue(); + TimerProfile prof = t.GetProfile(); + + if ( prof != null ) { + prof.Start(); + } + + t.OnTick(); + t.m_Queued = false; + ++index; + + if ( prof != null ) { + prof.Finish(); + } + } + } + } + + public Timer( TimeSpan delay ) : this( delay, TimeSpan.Zero, 1 ) + { + } + + public Timer( TimeSpan delay, TimeSpan interval ) : this( delay, interval, 0 ) + { + } + + public virtual bool DefRegCreation + { + get{ return true; } + } + + public virtual void RegCreation() + { + TimerProfile prof = GetProfile(); + + if ( prof != null ) { + prof.Created++; + } + } + + public Timer( TimeSpan delay, TimeSpan interval, int count ) + { + m_Delay = delay; + m_Interval = interval; + m_Count = count; + + if ( !m_PrioritySet ) { + if ( count == 1 ) { + m_Priority = ComputePriority( delay ); + } else { + m_Priority = ComputePriority( interval ); + } + m_PrioritySet = true; + } + + if ( DefRegCreation ) + RegCreation(); + } + + public override string ToString() + { + return GetType().FullName; + } + + public static TimerPriority ComputePriority( TimeSpan ts ) + { + if ( ts >= TimeSpan.FromMinutes( 1.0 ) ) + return TimerPriority.FiveSeconds; + + if ( ts >= TimeSpan.FromSeconds( 10.0 ) ) + return TimerPriority.OneSecond; + + if ( ts >= TimeSpan.FromSeconds( 5.0 ) ) + return TimerPriority.TwoFiftyMS; + + if ( ts >= TimeSpan.FromSeconds( 2.5 ) ) + return TimerPriority.FiftyMS; + + if ( ts >= TimeSpan.FromSeconds( 1.0 ) ) + return TimerPriority.TwentyFiveMS; + + if ( ts >= TimeSpan.FromSeconds( 0.5 ) ) + return TimerPriority.TenMS; + + return TimerPriority.EveryTick; + } + + #region DelayCall(..) + + public static Timer DelayCall( TimeSpan delay, TimerCallback callback ) + { + return DelayCall( delay, TimeSpan.Zero, 1, callback ); + } + + public static Timer DelayCall( TimeSpan delay, TimeSpan interval, TimerCallback callback ) + { + return DelayCall( delay, interval, 0, callback ); + } + + public static Timer DelayCall( TimeSpan delay, TimeSpan interval, int count, TimerCallback callback ) + { + Timer t = new DelayCallTimer( delay, interval, count, callback ); + + if ( count == 1 ) + t.Priority = ComputePriority( delay ); + else + t.Priority = ComputePriority( interval ); + + t.Start(); + + return t; + } + + public static Timer DelayCall( TimeSpan delay, TimerStateCallback callback, object state ) + { + return DelayCall( delay, TimeSpan.Zero, 1, callback, state ); + } + + public static Timer DelayCall( TimeSpan delay, TimeSpan interval, TimerStateCallback callback, object state ) + { + return DelayCall( delay, interval, 0, callback, state ); + } + + public static Timer DelayCall( TimeSpan delay, TimeSpan interval, int count, TimerStateCallback callback, object state ) + { + Timer t = new DelayStateCallTimer( delay, interval, count, callback, state ); + + if ( count == 1 ) + t.Priority = ComputePriority( delay ); + else + t.Priority = ComputePriority( interval ); + + t.Start(); + + return t; + } + #endregion + + #region DelayCall(..) + public static Timer DelayCall( TimeSpan delay, TimerStateCallback callback, T state ) + { + return DelayCall( delay, TimeSpan.Zero, 1, callback, state ); + } + + public static Timer DelayCall( TimeSpan delay, TimeSpan interval, TimerStateCallback callback, T state ) + { + return DelayCall( delay, interval, 0, callback, state ); + } + + public static Timer DelayCall( TimeSpan delay, TimeSpan interval, int count, TimerStateCallback callback, T state ) + { + Timer t = new DelayStateCallTimer( delay, interval, count, callback, state ); + + if( count == 1 ) + t.Priority = ComputePriority( delay ); + else + t.Priority = ComputePriority( interval ); + + t.Start(); + + return t; + } + #endregion + + #region DelayCall Timers + private class DelayCallTimer : Timer + { + private TimerCallback m_Callback; + + public TimerCallback Callback{ get{ return m_Callback; } } + + public override bool DefRegCreation{ get{ return false; } } + + public DelayCallTimer( TimeSpan delay, TimeSpan interval, int count, TimerCallback callback ) : base( delay, interval, count ) + { + m_Callback = callback; + RegCreation(); + } + + protected override void OnTick() + { + if ( m_Callback != null ) + m_Callback(); + } + + public override string ToString() + { + return String.Format( "DelayCallTimer[{0}]", FormatDelegate( m_Callback ) ); + } + } + + private class DelayStateCallTimer : Timer + { + private TimerStateCallback m_Callback; + private object m_State; + + public TimerStateCallback Callback{ get{ return m_Callback; } } + + public override bool DefRegCreation{ get{ return false; } } + + public DelayStateCallTimer( TimeSpan delay, TimeSpan interval, int count, TimerStateCallback callback, object state ) : base( delay, interval, count ) + { + m_Callback = callback; + m_State = state; + + RegCreation(); + } + + protected override void OnTick() + { + if ( m_Callback != null ) + m_Callback( m_State ); + } + + public override string ToString() + { + return String.Format( "DelayStateCall[{0}]", FormatDelegate( m_Callback ) ); + } + } + + private class DelayStateCallTimer : Timer + { + private TimerStateCallback m_Callback; + private T m_State; + + public TimerStateCallback Callback { get { return m_Callback; } } + + public override bool DefRegCreation { get { return false; } } + + public DelayStateCallTimer( TimeSpan delay, TimeSpan interval, int count, TimerStateCallback callback, T state ) + : base( delay, interval, count ) + { + m_Callback = callback; + m_State = state; + + RegCreation(); + } + + protected override void OnTick() + { + if( m_Callback != null ) + m_Callback( m_State ); + } + + public override string ToString() + { + return String.Format( "DelayStateCall[{0}]", FormatDelegate( m_Callback ) ); + } + } + #endregion + + public void Start() + { + if ( !m_Running ) + { + m_Running = true; + TimerThread.AddTimer( this ); + + TimerProfile prof = GetProfile(); + + if ( prof != null ) { + prof.Started++; + } + } + } + + public void Stop() + { + if ( m_Running ) + { + m_Running = false; + TimerThread.RemoveTimer( this ); + + TimerProfile prof = GetProfile(); + + if ( prof != null ) { + prof.Stopped++; + } + } + } + + protected virtual void OnTick() + { + } + } +} \ No newline at end of file diff --git a/Source/Utility.cs b/Source/Utility.cs new file mode 100644 index 0000000..7bb87ef --- /dev/null +++ b/Source/Utility.cs @@ -0,0 +1,1283 @@ +/*************************************************************************** + * Utility.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Reflection; +using System.Text; +using System.Xml; +using Microsoft.Win32; +using Server.Network; + +namespace Server +{ + public static class Utility + { + private static Random m_Random = new Random(); + private static Encoding m_UTF8, m_UTF8WithEncoding; + + public static Encoding UTF8 + { + get + { + if ( m_UTF8 == null ) + m_UTF8 = new UTF8Encoding( false, false ); + + return m_UTF8; + } + } + + public static Encoding UTF8WithEncoding + { + get + { + if ( m_UTF8WithEncoding == null ) + m_UTF8WithEncoding = new UTF8Encoding( true, false ); + + return m_UTF8WithEncoding; + } + } + + public static void Separate( StringBuilder sb, string value, string separator ) + { + if ( sb.Length > 0 ) + sb.Append( separator ); + + sb.Append( value ); + } + + public static string Intern( string str ) + { + if ( str == null ) + return null; + else if ( str.Length == 0 ) + return String.Empty; + + return String.Intern( str ); + } + + public static void Intern( ref string str ) + { + str = Intern( str ); + } + + private static Dictionary _ipAddressTable; + + public static IPAddress Intern( IPAddress ipAddress ) { + if ( _ipAddressTable == null ) { + _ipAddressTable = new Dictionary(); + } + + IPAddress interned; + + if ( !_ipAddressTable.TryGetValue( ipAddress, out interned ) ) { + interned = ipAddress; + _ipAddressTable[ipAddress] = interned; + } + + return interned; + } + + public static void Intern( ref IPAddress ipAddress ) { + ipAddress = Intern( ipAddress ); + } + + public static bool IsValidIP( string text ) + { + bool valid = true; + + IPMatch( text, IPAddress.None, ref valid ); + + return valid; + } + + public static bool IPMatch( string val, IPAddress ip ) + { + bool valid = true; + + return IPMatch( val, ip, ref valid ); + } + + public static string FixHtml( string str ) + { + if( str == null ) + return ""; + + bool hasOpen = ( str.IndexOf( '<' ) >= 0 ); + bool hasClose = ( str.IndexOf( '>' ) >= 0 ); + bool hasPound = ( str.IndexOf( '#' ) >= 0 ); + + if ( !hasOpen && !hasClose && !hasPound ) + return str; + + StringBuilder sb = new StringBuilder( str ); + + if ( hasOpen ) + sb.Replace( '<', '(' ); + + if ( hasClose ) + sb.Replace( '>', ')' ); + + if ( hasPound ) + sb.Replace( '#', '-' ); + + return sb.ToString(); + } + + public static bool IPMatchCIDR( string cidr, IPAddress ip ) + { + if ( ip == null || ip.AddressFamily == AddressFamily.InterNetworkV6 ) + return false; //Just worry about IPv4 for now + + + /* + string[] str = cidr.Split( '/' ); + + if ( str.Length != 2 ) + return false; + + /* ************************************************** + IPAddress cidrPrefix; + + if ( !IPAddress.TryParse( str[0], out cidrPrefix ) ) + return false; + * */ + + /* + string[] dotSplit = str[0].Split( '.' ); + + if ( dotSplit.Length != 4 ) //At this point and time, and for speed sake, we'll only worry about IPv4 + return false; + + byte[] bytes = new byte[4]; + + for ( int i = 0; i < 4; i++ ) + { + byte.TryParse( dotSplit[i], out bytes[i] ); + } + + uint cidrPrefix = OrderedAddressValue( bytes ); + + int cidrLength = Utility.ToInt32( str[1] ); + //The below solution is the fastest solution of the three + + */ + + byte[] bytes = new byte[4]; + string[] split = cidr.Split( '.' ); + bool cidrBits = false; + int cidrLength = 0; + + for ( int i = 0; i < 4; i++ ) + { + int part = 0; + + int partBase = 10; + + string pattern = split[i]; + + for ( int j = 0; j < pattern.Length; j++ ) + { + char c = (char)pattern[j]; + + + if ( c == 'x' || c == 'X' ) + { + partBase = 16; + } + else if ( c >= '0' && c <= '9' ) + { + int offset = c - '0'; + + if ( cidrBits ) + { + cidrLength *= partBase; + cidrLength += offset; + } + else + { + part *= partBase; + part += offset; + } + } + else if ( c >= 'a' && c <= 'f' ) + { + int offset = 10 + ( c - 'a' ); + + if ( cidrBits ) + { + cidrLength *= partBase; + cidrLength += offset; + } + else + { + part *= partBase; + part += offset; + } + } + else if ( c >= 'A' && c <= 'F' ) + { + int offset = 10 + ( c - 'A' ); + + if ( cidrBits ) + { + cidrLength *= partBase; + cidrLength += offset; + } + else + { + part *= partBase; + part += offset; + } + } + else if ( c == '/' ) + { + if ( cidrBits || i != 3 ) //If there's two '/' or the '/' isn't in the last byte + { + return false; + } + + partBase = 10; + cidrBits = true; + } + else + { + return false; + } + } + + bytes[i] = (byte)part; + } + + uint cidrPrefix = OrderedAddressValue( bytes ); + + return IPMatchCIDR( cidrPrefix, ip, cidrLength ); + } + + public static bool IPMatchCIDR( IPAddress cidrPrefix, IPAddress ip, int cidrLength ) + { + if ( cidrPrefix == null || ip == null || cidrPrefix.AddressFamily == AddressFamily.InterNetworkV6 ) //Ignore IPv6 for now + return false; + + uint cidrValue = SwapUnsignedInt( (uint)GetLongAddressValue( cidrPrefix ) ); + uint ipValue = SwapUnsignedInt( (uint)GetLongAddressValue( ip ) ); + + return IPMatchCIDR( cidrValue, ipValue, cidrLength ); + } + + public static bool IPMatchCIDR( uint cidrPrefixValue, IPAddress ip, int cidrLength ) + { + if ( ip == null || ip.AddressFamily == AddressFamily.InterNetworkV6) + return false; + + uint ipValue = SwapUnsignedInt( (uint)GetLongAddressValue( ip ) ); + + return IPMatchCIDR( cidrPrefixValue, ipValue, cidrLength ); + } + + public static bool IPMatchCIDR( uint cidrPrefixValue, uint ipValue, int cidrLength ) + { + if ( cidrLength <= 0 || cidrLength >= 32 ) //if invalid cidr Length, just compare IPs + return cidrPrefixValue == ipValue; + + uint mask = uint.MaxValue << 32-cidrLength; + + return ( ( cidrPrefixValue & mask ) == ( ipValue & mask ) ); + } + + private static uint OrderedAddressValue( byte[] bytes ) + { + if ( bytes.Length != 4 ) + return 0; + + return (uint)(((( bytes[0] << 0x18 ) | (bytes[1] << 0x10)) | (bytes[2] << 8)) | bytes[3]) & ((uint)0xffffffff); + } + + private static uint SwapUnsignedInt( uint source ) + { + return (uint)( ( ( ( source & 0x000000FF ) << 0x18 ) + | ( ( source & 0x0000FF00 ) << 8 ) + | ( ( source & 0x00FF0000 ) >> 8 ) + | ( ( source & 0xFF000000 ) >> 0x18 ) ) ); + } + + public static bool TryConvertIPv6toIPv4( ref IPAddress address ) + { + if ( !Socket.OSSupportsIPv6 || address.AddressFamily == AddressFamily.InterNetwork ) + return true; + + byte[] addr = address.GetAddressBytes(); + if ( addr.Length == 16 ) //sanity 0 - 15 //10 11 //12 13 14 15 + { + if ( addr[10] != 0xFF || addr[11] != 0xFF ) + return false; + + for ( int i = 0; i < 10; i++ ) + { + if ( addr[i] != 0 ) + return false; + } + + byte[] v4Addr = new byte[4]; + + for ( int i = 0; i < 4; i++ ) + { + v4Addr[i] = addr[12 + i]; + } + + address = new IPAddress( v4Addr ); + return true; + } + + return false; + } + + public static bool IPMatch( string val, IPAddress ip, ref bool valid ) + { + valid = true; + + string[] split = val.Split( '.' ); + + for ( int i = 0; i < 4; ++i ) + { + int lowPart, highPart; + + if ( i >= split.Length ) + { + lowPart = 0; + highPart = 255; + } + else + { + string pattern = split[i]; + + if ( pattern == "*" ) + { + lowPart = 0; + highPart = 255; + } + else + { + lowPart = 0; + highPart = 0; + + bool highOnly = false; + int lowBase = 10; + int highBase = 10; + + for ( int j = 0; j < pattern.Length; ++j ) + { + char c = (char)pattern[j]; + + if ( c == '?' ) + { + if ( !highOnly ) + { + lowPart *= lowBase; + lowPart += 0; + } + + highPart *= highBase; + highPart += highBase - 1; + } + else if ( c == '-' ) + { + highOnly = true; + highPart = 0; + } + else if ( c == 'x' || c == 'X' ) + { + lowBase = 16; + highBase = 16; + } + else if ( c >= '0' && c <= '9' ) + { + int offset = c - '0'; + + if ( !highOnly ) + { + lowPart *= lowBase; + lowPart += offset; + } + + highPart *= highBase; + highPart += offset; + } + else if ( c >= 'a' && c <= 'f' ) + { + int offset = 10 + (c - 'a'); + + if ( !highOnly ) + { + lowPart *= lowBase; + lowPart += offset; + } + + highPart *= highBase; + highPart += offset; + } + else if ( c >= 'A' && c <= 'F' ) + { + int offset = 10 + (c - 'A'); + + if ( !highOnly ) + { + lowPart *= lowBase; + lowPart += offset; + } + + highPart *= highBase; + highPart += offset; + } + else + { + valid = false; //high & lowpart would be 0 if it got to here. + } + } + } + } + + int b = (byte)(Utility.GetAddressValue( ip ) >> (i * 8)); + + if ( b < lowPart || b > highPart ) + return false; + } + + return true; + } + + public static bool IPMatchClassC( IPAddress ip1, IPAddress ip2 ) + { + return ( (Utility.GetAddressValue( ip1 ) & 0xFFFFFF) == (Utility.GetAddressValue( ip2 ) & 0xFFFFFF) ); + } + + public static int InsensitiveCompare( string first, string second ) + { + return Insensitive.Compare( first, second ); + } + + public static bool InsensitiveStartsWith( string first, string second ) + { + return Insensitive.StartsWith( first, second ); + } + + #region To[Something] + public static bool ToBoolean( string value ) + { + bool b; + bool.TryParse( value, out b ); + + return b; + } + + public static double ToDouble( string value ) + { + double d; + double.TryParse( value, out d ); + + return d; + } + + public static TimeSpan ToTimeSpan( string value ) + { + TimeSpan t; + TimeSpan.TryParse( value, out t ); + + return t; + } + + public static int ToInt32( string value ) + { + int i; + + if( value.StartsWith( "0x" ) ) + int.TryParse( value.Substring( 2 ), NumberStyles.HexNumber, null, out i ); + else + int.TryParse( value, out i ); + + return i; + } + #endregion + + #region Get[Something] + public static int GetXMLInt32( string intString, int defaultValue ) + { + try + { + return XmlConvert.ToInt32( intString ); + } + catch + { + int val; + if ( int.TryParse( intString, out val ) ) + return val; + + return defaultValue; + } + } + + public static DateTime GetXMLDateTime( string dateTimeString, DateTime defaultValue ) + { + try + { + return XmlConvert.ToDateTime( dateTimeString, XmlDateTimeSerializationMode.Local ); + } + catch + { + DateTime d; + + if( DateTime.TryParse( dateTimeString, out d ) ) + return d; + + return defaultValue; + } + } + + public static TimeSpan GetXMLTimeSpan( string timeSpanString, TimeSpan defaultValue ) + { + try + { + return XmlConvert.ToTimeSpan( timeSpanString ); + } + catch + { + return defaultValue; + } + } + + public static string GetAttribute( XmlElement node, string attributeName ) + { + return GetAttribute( node, attributeName, null ); + } + + public static string GetAttribute( XmlElement node, string attributeName, string defaultValue ) + { + if ( node == null ) + return defaultValue; + + XmlAttribute attr = node.Attributes[attributeName]; + + if ( attr == null ) + return defaultValue; + + return attr.Value; + } + + public static string GetText( XmlElement node, string defaultValue ) + { + if ( node == null ) + return defaultValue; + + return node.InnerText; + } + + public static int GetAddressValue( IPAddress address ) + { +#pragma warning disable 618 + return (int)address.Address; +#pragma warning restore 618 + } + + public static long GetLongAddressValue( IPAddress address ) + { +#pragma warning disable 618 + return address.Address; +#pragma warning restore 618 + } + #endregion + + public static double RandomDouble() + { + return m_Random.NextDouble(); + } + #region In[...]Range + public static bool InRange( Point3D p1, Point3D p2, int range ) + { + return ( p1.m_X >= (p2.m_X - range) ) + && ( p1.m_X <= (p2.m_X + range) ) + && ( p1.m_Y >= (p2.m_Y - range) ) + && ( p1.m_Y <= (p2.m_Y + range) ); + } + + public static bool InUpdateRange( Point3D p1, Point3D p2 ) + { + return ( p1.m_X >= (p2.m_X - 18) ) + && ( p1.m_X <= (p2.m_X + 18) ) + && ( p1.m_Y >= (p2.m_Y - 18) ) + && ( p1.m_Y <= (p2.m_Y + 18) ); + } + + public static bool InUpdateRange( Point2D p1, Point2D p2 ) + { + return ( p1.m_X >= (p2.m_X - 18) ) + && ( p1.m_X <= (p2.m_X + 18) ) + && ( p1.m_Y >= (p2.m_Y - 18) ) + && ( p1.m_Y <= (p2.m_Y + 18) ); + } + + public static bool InUpdateRange( IPoint2D p1, IPoint2D p2 ) + { + return ( p1.X >= (p2.X - 18) ) + && ( p1.X <= (p2.X + 18) ) + && ( p1.Y >= (p2.Y - 18) ) + && ( p1.Y <= (p2.Y + 18) ); + } + + #endregion + public static Direction GetDirection( IPoint2D from, IPoint2D to ) + { + int dx = to.X - from.X; + int dy = to.Y - from.Y; + + int adx = Math.Abs( dx ); + int ady = Math.Abs( dy ); + + if ( adx >= ady * 3 ) + { + if ( dx > 0 ) + return Direction.East; + else + return Direction.West; + } + else if ( ady >= adx * 3 ) + { + if ( dy > 0 ) + return Direction.South; + else + return Direction.North; + } + else if ( dx > 0 ) + { + if ( dy > 0 ) + return Direction.Down; + else + return Direction.Right; + } + else + { + if ( dy > 0 ) + return Direction.Left; + else + return Direction.Up; + } + } + + /* Should probably be rewritten to use an ITile interface + + public static bool CanMobileFit( int z, StaticTile[] tiles ) + { + int checkHeight = 15; + int checkZ = z; + + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + + if ( ((checkZ + checkHeight) > tile.Z && checkZ < (tile.Z + tile.Height))*//* || (tile.Z < (checkZ + checkHeight) && (tile.Z + tile.Height) > checkZ)*//* ) + { + return false; + } + else if ( checkHeight == 0 && tile.Height == 0 && checkZ == tile.Z ) + { + return false; + } + } + + return true; + } + + public static bool IsInContact( StaticTile check, StaticTile[] tiles ) + { + int checkHeight = check.Height; + int checkZ = check.Z; + + for ( int i = 0; i < tiles.Length; ++i ) + { + StaticTile tile = tiles[i]; + + if ( ((checkZ + checkHeight) > tile.Z && checkZ < (tile.Z + tile.Height))*//* || (tile.Z < (checkZ + checkHeight) && (tile.Z + tile.Height) > checkZ)*//* ) + { + return true; + } + else if ( checkHeight == 0 && tile.Height == 0 && checkZ == tile.Z ) + { + return true; + } + } + + return false; + } + */ + + public static object GetArrayCap( Array array, int index ) + { + return GetArrayCap( array, index, null ); + } + + public static object GetArrayCap( Array array, int index, object emptyValue ) + { + if ( array.Length > 0 ) + { + if ( index < 0 ) + { + index = 0; + } + else if ( index >= array.Length ) + { + index = array.Length - 1; + } + + return array.GetValue( index ); + } + else + { + return emptyValue; + } + } + + //4d6+8 would be: Utility.Dice( 4, 6, 8 ) + public static int Dice( int numDice, int numSides, int bonus ) + { + int total = 0; + for (int i=0;i max ) + { + int copy = min; + min = max; + max = copy; + } + else if ( min == max ) + { + return min; + } + + return min + m_Random.Next( (max - min) + 1 ); + } + + public static int Random( int from, int count ) + { + if ( count == 0 ) + { + return from; + } + else if ( count > 0 ) + { + return from + m_Random.Next( count ); + } + else + { + return from - m_Random.Next( -count ); + } + } + + public static int Random( int count ) + { + return m_Random.Next( count ); + } + + #region Random Hues + + public static int RandomNondyedHue() + { + switch ( Random( 6 ) ) + { + case 0: return RandomPinkHue(); + case 1: return RandomBlueHue(); + case 2: return RandomGreenHue(); + case 3: return RandomOrangeHue(); + case 4: return RandomRedHue(); + case 5: return RandomYellowHue(); + } + + return 0; + } + + public static int RandomPinkHue() + { + return Random( 1201, 54 ); + } + + public static int RandomBlueHue() + { + return Random( 1301, 54 ); + } + + public static int RandomGreenHue() + { + return Random( 1401, 54 ); + } + + public static int RandomOrangeHue() + { + return Random( 1501, 54 ); + } + + public static int RandomRedHue() + { + return Random( 1601, 54 ); + } + + public static int RandomYellowHue() + { + return Random( 1701, 54 ); + } + + public static int RandomNeutralHue() + { + return Random( 1801, 108 ); + } + + public static int RandomSnakeHue() + { + return Random( 2001, 18 ); + } + + public static int RandomLizardHue() + { + return RandomList( Utility.RandomMinMax( 2001, 2006), Utility.RandomMinMax( 2126, 2130), Utility.RandomMinMax( 2207, 2212) ); + } + + public static int RandomBirdHue() + { + return Random( 2101, 30 ); + } + + public static int RandomSlimeHue() + { + return Random( 2201, 24 ); + } + + public static int RandomAnimalHue() + { + return Random( 2301, 18 ); + } + + public static int RandomMetalHue() + { + return Random( 2401, 30 ); + } + + public static int RandomEvilHue() + { + return RandomList( RandomDarkHue(), RandomRedHue() , RandomBlueHue(), RandomMetalHue() ); + } + + public static int RandomDarkHue() + { + return RandomList( 1175, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2431, 2432 ); + } + + public static int RandomPainting() + { + return RandomList( 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 0x121C, 0x1229, 0x1236, 0xC0F, 0xC2C, 0xE9F, 0xEA0, 0xEA1, 0xEA2, 0xEA3, 0xEA4, 0xEA5, 0xEA7, 0xEA8, 0xEA9, 0xEC8 ); + } + + public static int ClipDyedHue( int hue ) + { + if ( hue < 2 ) + return 2; + else if ( hue > 1001 ) + return 1001; + else + return hue; + } + + public static int RandomBrightHue() + { + if ( 0.1 > Utility.RandomDouble() ) + return Utility.RandomList( 0x62, 0x71 ); + + return Utility.RandomList( 0x03, 0x0D, 0x13, 0x1C, 0x21, 0x30, 0x37, 0x3A, 0x44, 0x59 ); + } + + public static int RandomSpeechHue() + { + return Utility.RandomMinMax( 1059, 1076 ); + } + + public static int RandomHue() + { + switch ( Utility.Random( 5 ) ) + { + default: + case 0: return Utility.RandomBlueHue(); + case 1: return Utility.RandomGreenHue(); + case 2: return Utility.RandomRedHue(); + case 3: return Utility.RandomYellowHue(); + case 4: return Utility.RandomNeutralHue(); + } + } + + public static int RandomDyedHue() + { + return Random( 2, 1000 ); + } + + //[Obsolete( "Depreciated, use the methods for the Mobile's race", false )] + public static int ClipSkinHue( int hue ) + { + if ( hue < 1002 ) + return 1002; + else if ( hue > 1058 ) + return 1058; + else + return hue; + } + + //[Obsolete( "Depreciated, use the methods for the Mobile's race", false )] + public static int RandomSkinHue() + { + return Random( 1002, 57 ) | 0x8000; + } + + //[Obsolete( "Depreciated, use the methods for the Mobile's race", false )] + public static int ClipHairHue( int hue ) + { + if ( hue < 1102 ) + return 1102; + else if ( hue > 1149 ) + return 1149; + else + return hue; + } + + //[Obsolete( "Depreciated, use the methods for the Mobile's race", false )] + public static int RandomHairHue() + { + return Random( 1102, 48 ); + } + + public static string AddSpacesToSentence( string text ) + { + StringBuilder newText = new StringBuilder(text.Length * 2); + newText.Append(text[0]); + for (int i = 1; i < text.Length; i++) + { + if (char.IsUpper(text[i]) && text[i - 1] != ' ') + newText.Append(' '); + newText.Append(text[i]); + } + return (newText.ToString()).ToLower(); + } + + #endregion + + private static SkillName[] m_AllSkills = new SkillName[] + { + SkillName.Tactics, + SkillName.Parry, + SkillName.Concentration, + SkillName.Discordance, + SkillName.Dodging, + SkillName.Healing, + SkillName.Hiding, + SkillName.Lockpicking, + SkillName.Magery, + SkillName.MagicResist, + SkillName.Meditation, + SkillName.Musicianship, + SkillName.Peacemaking, + SkillName.Poisoning, + SkillName.Provocation, + SkillName.RemoveTrap, + SkillName.Searching, + SkillName.Stealing, + SkillName.Stealth, + SkillName.Tracking + }; + + private static SkillName[] m_CombatSkills = new SkillName[] + { + SkillName.Archery, + SkillName.Bludgeoning, + SkillName.Fencing, + SkillName.Swords, + SkillName.HandToHand + }; + + public static SkillName RandomSkill() + { + return m_AllSkills[Utility.Random(m_AllSkills.Length)]; + } + + public static SkillName RandomCombatSkill() + { + return m_CombatSkills[Utility.Random(m_CombatSkills.Length)]; + } + + public static void FixPoints( ref Point3D top, ref Point3D bottom ) + { + if ( bottom.m_X < top.m_X ) + { + int swap = top.m_X; + top.m_X = bottom.m_X; + bottom.m_X = swap; + } + + if ( bottom.m_Y < top.m_Y ) + { + int swap = top.m_Y; + top.m_Y = bottom.m_Y; + bottom.m_Y = swap; + } + + if ( bottom.m_Z < top.m_Z ) + { + int swap = top.m_Z; + top.m_Z = bottom.m_Z; + bottom.m_Z = swap; + } + } + + public static ArrayList BuildArrayList( IEnumerable enumerable ) + { + IEnumerator e = enumerable.GetEnumerator(); + + ArrayList list = new ArrayList(); + + while ( e.MoveNext() ) + { + list.Add( e.Current ); + } + + return list; + } + + public static bool RangeCheck( IPoint2D p1, IPoint2D p2, int range ) + { + return ( p1.X >= (p2.X - range) ) + && ( p1.X <= (p2.X + range) ) + && ( p1.Y >= (p2.Y - range) ) + && ( p2.Y <= (p2.Y + range) ); + } + + public static void FormatBuffer( TextWriter output, Stream input, int length ) + { + output.WriteLine( " 0 1 2 3 4 5 6 7 8 9 A B C D E F" ); + output.WriteLine( " -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --" ); + + int byteIndex = 0; + + int whole = length >> 4; + int rem = length & 0xF; + + for ( int i = 0; i < whole; ++i, byteIndex += 16 ) + { + StringBuilder bytes = new StringBuilder( 49 ); + StringBuilder chars = new StringBuilder( 16 ); + + for ( int j = 0; j < 16; ++j ) + { + int c = input.ReadByte(); + + bytes.Append( c.ToString( "X2" ) ); + + if ( j != 7 ) + { + bytes.Append( ' ' ); + } + else + { + bytes.Append( " " ); + } + + if ( c >= 0x20 && c < 0x80 ) + { + chars.Append( (char)c ); + } + else + { + chars.Append( '.' ); + } + } + + output.Write( byteIndex.ToString( "X4" ) ); + output.Write( " " ); + output.Write( bytes.ToString() ); + output.Write( " " ); + output.WriteLine( chars.ToString() ); + } + + if ( rem != 0 ) + { + StringBuilder bytes = new StringBuilder( 49 ); + StringBuilder chars = new StringBuilder( rem ); + + for ( int j = 0; j < 16; ++j ) + { + if ( j < rem ) + { + int c = input.ReadByte(); + + bytes.Append( c.ToString( "X2" ) ); + + if ( j != 7 ) + { + bytes.Append( ' ' ); + } + else + { + bytes.Append( " " ); + } + + if ( c >= 0x20 && c < 0x80 ) + { + chars.Append( (char)c ); + } + else + { + chars.Append( '.' ); + } + } + else + { + bytes.Append( " " ); + } + } + + output.Write( byteIndex.ToString( "X4" ) ); + output.Write( " " ); + output.Write( bytes.ToString() ); + output.Write( " " ); + output.WriteLine( chars.ToString() ); + } + } + + private static Stack m_ConsoleColors = new Stack(); + + public static void PushColor( ConsoleColor color ) + { + try + { + m_ConsoleColors.Push( Console.ForegroundColor ); + Console.ForegroundColor = color; + } + catch + { + } + } + + public static void PopColor() + { + try + { + Console.ForegroundColor = m_ConsoleColors.Pop(); + } + catch + { + } + } + + public static bool NumberBetween( double num, int bound1, int bound2, double allowance ) + { + if ( bound1 > bound2 ) + { + int i = bound1; + bound1 = bound2; + bound2 = i; + } + + return ( numbound1-allowance ); + } + + public static void AssignRandomHair( Mobile m ) + { + AssignRandomHair( m, true ); + } + public static void AssignRandomHair( Mobile m, int hue ) + { + m.HairItemID = m.Race.RandomHair( m ); + m.HairHue = hue; + } + public static void AssignRandomHair( Mobile m, bool randomHue ) + { + m.HairItemID = m.Race.RandomHair( m ); + + if( randomHue ) + m.HairHue = m.Race.RandomHairHue(); + } + + public static void AssignRandomFacialHair( Mobile m ) + { + AssignRandomFacialHair( m, true ); + } + public static void AssignRandomFacialHair( Mobile m, int hue ) + { + m.FacialHairHue = m.Race.RandomFacialHair( m ); + m.FacialHairHue = hue; + } + public static void AssignRandomFacialHair( Mobile m, bool randomHue ) + { + m.FacialHairItemID = m.Race.RandomFacialHair( m ); + + if( randomHue ) + m.FacialHairHue = m.Race.RandomHairHue(); + } + +#if MONO + public static List CastConvertList( List list ) where TInput : class where TOutput : class + { + return list.ConvertAll( new Converter( delegate( TInput value ) { return value as TOutput; } ) ); + } +#else + public static List CastConvertList( List list ) where TOutput : TInput + { + return list.ConvertAll( new Converter( delegate( TInput value ) { return (TOutput)value; } ) ); + } +#endif + + public static List SafeConvertList( List list ) where TOutput : class + { + List output = new List( list.Capacity ); + + for( int i = 0; i < list.Count; i++ ) + { + TOutput t = list[i] as TOutput; + + if( t != null ) + output.Add( t ); + } + + return output; + } + } +} \ No newline at end of file diff --git a/Source/VirtueInfo.txt b/Source/VirtueInfo.txt new file mode 100644 index 0000000..104063e --- /dev/null +++ b/Source/VirtueInfo.txt @@ -0,0 +1,147 @@ +/*************************************************************************** + * VirtueInfo.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; + +namespace Server +{ + [PropertyObject] + public class VirtueInfo + { + private int[] m_Values; + + public int[] Values + { + get + { + return m_Values; + } + } + + public int GetValue( int index ) + { + if ( m_Values == null ) + return 0; + else + return m_Values[index]; + } + + public void SetValue( int index, int value ) + { + if ( m_Values == null ) + m_Values = new int[8]; + + m_Values[index] = value; + } + + public override string ToString() + { + return "..."; + } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Humility{ get{ return GetValue( 0 ); } set{ SetValue( 0, value ); } } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Sacrifice{ get{ return GetValue( 1 ); } set{ SetValue( 1, value ); } } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Compassion{ get{ return GetValue( 2 ); } set{ SetValue( 2, value ); } } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Spirituality{ get{ return GetValue( 3 ); } set{ SetValue( 3, value ); } } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Valor{ get{ return GetValue( 4 ); } set{ SetValue( 4, value ); } } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Honor{ get{ return GetValue( 5 ); } set{ SetValue( 5, value ); } } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Justice{ get{ return GetValue( 6 ); } set{ SetValue( 6, value ); } } + + [CommandProperty( AccessLevel.Counselor, AccessLevel.GameMaster )] + public int Honesty{ get{ return GetValue( 7 ); } set{ SetValue( 7, value ); } } + + public VirtueInfo() + { + } + + public VirtueInfo( GenericReader reader ) + { + int version = reader.ReadByte(); + + switch ( version ) + { + case 1: //Changed the values throughout the virtue system + case 0: + { + int mask = reader.ReadByte(); + + if ( mask != 0 ) + { + m_Values = new int[8]; + + for ( int i = 0; i < 8; ++i ) + if ( (mask & (1 << i)) != 0 ) + m_Values[i] = reader.ReadInt(); + } + + break; + } + } + + if( version == 0 ) + { + Compassion *= 200; + Sacrifice *= 250; //Even though 40 (the max) only gives 10k, It's because it was formerly too easy + + //No direct conversion factor for Justice, this is just an approximation + Justice *= 500; + + //All the other virtues haven't been defined at 'version 0' point in time in the scripts. + } + } + + public static void Serialize( GenericWriter writer, VirtueInfo info ) + { + writer.Write( (byte) 1 ); // version + + if ( info.m_Values == null ) + { + writer.Write( (byte) 0 ); + } + else + { + int mask = 0; + + for ( int i = 0; i < 8; ++i ) + if ( info.m_Values[i] != 0 ) + mask |= 1 << i; + + writer.Write( (byte) mask ); + + for ( int i = 0; i < 8; ++i ) + if ( info.m_Values[i] != 0 ) + writer.Write( (int) info.m_Values[i] ); + } + } + } +} \ No newline at end of file diff --git a/Source/World.cs b/Source/World.cs new file mode 100644 index 0000000..f3f69ef --- /dev/null +++ b/Source/World.cs @@ -0,0 +1,877 @@ +/*************************************************************************** + * World.cs + * ------------------- + * begin : May 1, 2002 + * copyright : (C) The RunUO Software Team + * email : info@runuo.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Threading; +using System.Diagnostics; +using Server; +using Server.Mobiles; +using Server.Accounting; +using Server.Network; +using Server.Guilds; + +namespace Server { + public static class World { + public enum SaveOption { + Normal, + Threaded + } + + public static SaveOption SaveType = SaveOption.Normal; + + private static Dictionary m_Mobiles; + private static Dictionary m_Items; + + private static bool m_Loading; + private static bool m_Loaded; + + private static bool m_Saving; + private static ManualResetEvent m_DiskWriteHandle = new ManualResetEvent(true); + + private static Queue _addQueue, _deleteQueue; + + public static bool Saving { get { return m_Saving; } } + public static bool Loaded { get { return m_Loaded; } } + public static bool Loading { get { return m_Loading; } } + + public readonly static string MobileIndexPath = Path.Combine( "Saves/Mobiles/", "Mobiles.idx" ); + public readonly static string MobileTypesPath = Path.Combine( "Saves/Mobiles/", "Mobiles.tdb" ); + public readonly static string MobileDataPath = Path.Combine( "Saves/Mobiles/", "Mobiles.bin" ); + + public readonly static string ItemIndexPath = Path.Combine( "Saves/Items/", "Items.idx" ); + public readonly static string ItemTypesPath = Path.Combine( "Saves/Items/", "Items.tdb" ); + public readonly static string ItemDataPath = Path.Combine( "Saves/Items/", "Items.bin" ); + + public readonly static string GuildIndexPath = Path.Combine( "Saves/Guilds/", "Guilds.idx" ); + public readonly static string GuildDataPath = Path.Combine( "Saves/Guilds/", "Guilds.bin" ); + + public static void NotifyDiskWriteComplete() + { + if( m_DiskWriteHandle.Set()) + { + Console.WriteLine("Closing Save Files..."); + } + } + + public static void WaitForWriteCompletion() + { + m_DiskWriteHandle.WaitOne(); + } + + public static Dictionary Mobiles { + get { return m_Mobiles; } + } + + public static Dictionary Items { + get { return m_Items; } + } + + public static bool OnDelete( IEntity entity ) { + if ( m_Saving || m_Loading ) { + if ( m_Saving ) { + AppendSafetyLog( "delete", entity ); + } + + _deleteQueue.Enqueue( entity ); + + return false; + } + + return true; + } + + public static void Broadcast( int hue, bool ascii, string text ) { + Packet p; + + if ( ascii ) + p = new AsciiMessage( Serial.MinusOne, -1, MessageType.Regular, hue, 3, "System", text ); + else + p = new UnicodeMessage( Serial.MinusOne, -1, MessageType.Regular, hue, 3, "ENU", "System", text ); + + List list = NetState.Instances; + + p.Acquire(); + + for ( int i = 0; i < list.Count; ++i ) { + if ( list[i].Mobile != null ) + list[i].Send( p ); + } + + p.Release(); + + NetState.FlushAll(); + } + + public static void Broadcast( int hue, bool ascii, string format, params object[] args ) { + Broadcast( hue, ascii, String.Format( format, args ) ); + } + + private interface IEntityEntry { + Serial Serial { get; } + int TypeID { get; } + long Position { get; } + int Length { get; } + } + + private sealed class GuildEntry : IEntityEntry { + private BaseGuild m_Guild; + private long m_Position; + private int m_Length; + + public BaseGuild Guild { + get { + return m_Guild; + } + } + + public Serial Serial { + get { + return m_Guild == null ? 0 : m_Guild.Id; + } + } + + public int TypeID { + get { + return 0; + } + } + + public long Position { + get { + return m_Position; + } + } + + public int Length { + get { + return m_Length; + } + } + + public GuildEntry( BaseGuild g, long pos, int length ) { + m_Guild = g; + m_Position = pos; + m_Length = length; + } + } + + private sealed class ItemEntry : IEntityEntry { + private Item m_Item; + private int m_TypeID; + private string m_TypeName; + private long m_Position; + private int m_Length; + + public Item Item { + get { + return m_Item; + } + } + + public Serial Serial { + get { + return m_Item == null ? Serial.MinusOne : m_Item.Serial; + } + } + + public int TypeID { + get { + return m_TypeID; + } + } + + public string TypeName { + get { + return m_TypeName; + } + } + + public long Position { + get { + return m_Position; + } + } + + public int Length { + get { + return m_Length; + } + } + + public ItemEntry( Item item, int typeID, string typeName, long pos, int length ) { + m_Item = item; + m_TypeID = typeID; + m_TypeName = typeName; + m_Position = pos; + m_Length = length; + } + } + + private sealed class MobileEntry : IEntityEntry { + private Mobile m_Mobile; + private int m_TypeID; + private string m_TypeName; + private long m_Position; + private int m_Length; + + public Mobile Mobile { + get { + return m_Mobile; + } + } + + public Serial Serial { + get { + return m_Mobile == null ? Serial.MinusOne : m_Mobile.Serial; + } + } + + public int TypeID { + get { + return m_TypeID; + } + } + + public string TypeName { + get { + return m_TypeName; + } + } + + public long Position { + get { + return m_Position; + } + } + + public int Length { + get { + return m_Length; + } + } + + public MobileEntry( Mobile mobile, int typeID, string typeName, long pos, int length ) { + m_Mobile = mobile; + m_TypeID = typeID; + m_TypeName = typeName; + m_Position = pos; + m_Length = length; + } + } + + private static string m_LoadingType; + + public static string LoadingType { + get { return m_LoadingType; } + } + + private static readonly Type[] m_SerialTypeArray = new Type[1] { typeof(Serial) }; + + //TODO, when fully migrated to .NET 4.0: + //private static List> ReadTypes( BinaryReader tdbReader ) + private static List ReadTypes( BinaryReader tdbReader ) + { + int count = tdbReader.ReadInt32(); + + List types = new List(count); + + for (int i = 0; i < count; ++i) + { + string typeName = tdbReader.ReadString(); + + Type t = ScriptCompiler.FindTypeByFullName(typeName); + + if (t == null) + { + Console.WriteLine("failed"); + + if (!Core.Service) + { + Console.WriteLine("Error: Type '{0}' was not found. Delete all of those types? (y/n)", typeName); + + if (Console.ReadKey(true).Key == ConsoleKey.Y) + { + types.Add(null); + Console.Write("World: Loading..."); + continue; + } + + Console.WriteLine("Types will not be deleted. An exception will be thrown."); + } + else + { + Console.WriteLine("Error: Type '{0}' was not found.", typeName); + } + + throw new Exception(String.Format("Bad type '{0}'", typeName)); + } + + ConstructorInfo ctor = t.GetConstructor(m_SerialTypeArray); + + if (ctor != null) + { + types.Add(new object[] { ctor, typeName }); + } + else + { + throw new Exception(String.Format("Type '{0}' does not have a serialization constructor", t)); + } + } + + return types; + } + + public static void Load() { + if ( m_Loaded ) + return; + + m_Loaded = true; + m_LoadingType = null; + + Console.Write( "World: Loading..." ); + + Stopwatch watch = Stopwatch.StartNew(); + + m_Loading = true; + + _addQueue = new Queue(); + _deleteQueue = new Queue(); + + int mobileCount = 0, itemCount = 0, guildCount = 0; + + object[] ctorArgs = new object[1]; + + List items = new List(); + List mobiles = new List(); + List guilds = new List(); + + if ( File.Exists( MobileIndexPath ) && File.Exists( MobileTypesPath ) ) { + using ( FileStream idx = new FileStream( MobileIndexPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { + BinaryReader idxReader = new BinaryReader( idx ); + + using ( FileStream tdb = new FileStream( MobileTypesPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { + BinaryReader tdbReader = new BinaryReader( tdb ); + + List types = ReadTypes( tdbReader ); + + mobileCount = idxReader.ReadInt32(); + + m_Mobiles = new Dictionary( mobileCount ); + + for ( int i = 0; i < mobileCount; ++i ) { + int typeID = idxReader.ReadInt32(); + int serial = idxReader.ReadInt32(); + long pos = idxReader.ReadInt64(); + int length = idxReader.ReadInt32(); + + object[] objs = types[typeID]; + + if ( objs == null ) + continue; + + Mobile m = null; + ConstructorInfo ctor = ( ConstructorInfo ) objs[0]; + string typeName = ( string ) objs[1]; + + try { + ctorArgs[0] = ( Serial ) serial; + m = ( Mobile ) ( ctor.Invoke( ctorArgs ) ); + } catch { + } + + if ( m != null ) { + mobiles.Add( new MobileEntry( m, typeID, typeName, pos, length ) ); + AddMobile( m ); + } + } + + tdbReader.Close(); + } + + idxReader.Close(); + } + } else { + m_Mobiles = new Dictionary(); + } + + if ( File.Exists( ItemIndexPath ) && File.Exists( ItemTypesPath ) ) { + using ( FileStream idx = new FileStream( ItemIndexPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { + BinaryReader idxReader = new BinaryReader( idx ); + + using ( FileStream tdb = new FileStream( ItemTypesPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { + BinaryReader tdbReader = new BinaryReader( tdb ); + + List types = ReadTypes( tdbReader ); + + itemCount = idxReader.ReadInt32(); + + m_Items = new Dictionary( itemCount ); + + for ( int i = 0; i < itemCount; ++i ) { + int typeID = idxReader.ReadInt32(); + int serial = idxReader.ReadInt32(); + long pos = idxReader.ReadInt64(); + int length = idxReader.ReadInt32(); + + object[] objs = types[typeID]; + + if ( objs == null ) + continue; + + Item item = null; + ConstructorInfo ctor = ( ConstructorInfo ) objs[0]; + string typeName = ( string ) objs[1]; + + try { + ctorArgs[0] = ( Serial ) serial; + item = ( Item ) ( ctor.Invoke( ctorArgs ) ); + } catch { + } + + if ( item != null ) { + items.Add( new ItemEntry( item, typeID, typeName, pos, length ) ); + AddItem( item ); + } + } + + tdbReader.Close(); + } + + idxReader.Close(); + } + } else { + m_Items = new Dictionary(); + } + + if ( File.Exists( GuildIndexPath ) ) { + using ( FileStream idx = new FileStream( GuildIndexPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { + BinaryReader idxReader = new BinaryReader( idx ); + + guildCount = idxReader.ReadInt32(); + + CreateGuildEventArgs createEventArgs = new CreateGuildEventArgs( -1 ); + for ( int i = 0; i < guildCount; ++i ) { + idxReader.ReadInt32();//no typeid for guilds + int id = idxReader.ReadInt32(); + long pos = idxReader.ReadInt64(); + int length = idxReader.ReadInt32(); + + createEventArgs.Id = id; + BaseGuild guild = EventSink.InvokeCreateGuild( createEventArgs ); + if ( guild != null ) + guilds.Add( new GuildEntry( guild, pos, length ) ); + } + + idxReader.Close(); + } + } + + bool failedMobiles = false, failedItems = false, failedGuilds = false; + Type failedType = null; + Serial failedSerial = Serial.Zero; + Exception failed = null; + int failedTypeID = 0; + + if ( File.Exists( MobileDataPath ) ) { + using ( FileStream bin = new FileStream( MobileDataPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { + BinaryFileReader reader = new BinaryFileReader( new BinaryReader( bin ) ); + + for ( int i = 0; i < mobiles.Count; ++i ) { + MobileEntry entry = mobiles[i]; + Mobile m = entry.Mobile; + + if ( m != null ) { + reader.Seek( entry.Position, SeekOrigin.Begin ); + + try { + m_LoadingType = entry.TypeName; + m.Deserialize( reader ); + + if ( reader.Position != ( entry.Position + entry.Length ) ) + throw new Exception( String.Format( "***** Bad serialize on {0} *****", m.GetType() ) ); + } catch ( Exception e ) { + mobiles.RemoveAt( i ); + + failed = e; + failedMobiles = true; + failedType = m.GetType(); + failedTypeID = entry.TypeID; + failedSerial = m.Serial; + + break; + } + } + } + + reader.Close(); + } + } + + if ( !failedMobiles && File.Exists( ItemDataPath ) ) { + using ( FileStream bin = new FileStream( ItemDataPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { + BinaryFileReader reader = new BinaryFileReader( new BinaryReader( bin ) ); + + for ( int i = 0; i < items.Count; ++i ) { + ItemEntry entry = items[i]; + Item item = entry.Item; + + if ( item != null ) { + reader.Seek( entry.Position, SeekOrigin.Begin ); + + try { + m_LoadingType = entry.TypeName; + item.Deserialize( reader ); + + if ( reader.Position != ( entry.Position + entry.Length ) ) + throw new Exception( String.Format( "***** Bad serialize on {0} *****", item.GetType() ) ); + } catch ( Exception e ) { + items.RemoveAt( i ); + + failed = e; + failedItems = true; + failedType = item.GetType(); + failedTypeID = entry.TypeID; + failedSerial = item.Serial; + + break; + } + } + } + + reader.Close(); + } + } + + m_LoadingType = null; + + if ( !failedMobiles && !failedItems && File.Exists( GuildDataPath ) ) { + using ( FileStream bin = new FileStream( GuildDataPath, FileMode.Open, FileAccess.Read, FileShare.Read ) ) { + BinaryFileReader reader = new BinaryFileReader( new BinaryReader( bin ) ); + + for ( int i = 0; i < guilds.Count; ++i ) { + GuildEntry entry = guilds[i]; + BaseGuild g = entry.Guild; + + if ( g != null ) { + reader.Seek( entry.Position, SeekOrigin.Begin ); + + try { + g.Deserialize( reader ); + + if ( reader.Position != ( entry.Position + entry.Length ) ) + throw new Exception( String.Format( "***** Bad serialize on Guild {0} *****", g.Id ) ); + } catch ( Exception e ) { + guilds.RemoveAt( i ); + + failed = e; + failedGuilds = true; + failedType = typeof( BaseGuild ); + failedTypeID = g.Id; + failedSerial = g.Id; + + break; + } + } + } + + reader.Close(); + } + } + + if ( failedItems || failedMobiles || failedGuilds ) { + Console.WriteLine( "An error was encountered while loading a saved object" ); + + Console.WriteLine( " - Type: {0}", failedType ); + Console.WriteLine( " - Serial: {0}", failedSerial ); + + if ( !Core.Service ) { + Console.WriteLine( "Delete the object? (y/n)" ); + + if ( Console.ReadKey( true ).Key == ConsoleKey.Y ) { + if ( failedType != typeof( BaseGuild ) ) { + Console.WriteLine( "Delete all objects of that type? (y/n)" ); + + if ( Console.ReadKey( true ).Key == ConsoleKey.Y ) { + if ( failedMobiles ) { + for ( int i = 0; i < mobiles.Count; ) { + if ( mobiles[i].TypeID == failedTypeID ) + mobiles.RemoveAt( i ); + else + ++i; + } + } else if ( failedItems ) { + for ( int i = 0; i < items.Count; ) { + if ( items[i].TypeID == failedTypeID ) + items.RemoveAt( i ); + else + ++i; + } + } + } + } + + SaveIndex( mobiles, MobileIndexPath ); + SaveIndex( items, ItemIndexPath ); + SaveIndex( guilds, GuildIndexPath ); + } + + Console.WriteLine( "After pressing return an exception will be thrown and the server will terminate." ); + Console.ReadLine(); + } else { + Console.WriteLine( "An exception will be thrown and the server will terminate." ); + } + + throw new Exception( String.Format( "Load failed (items={0}, mobiles={1}, guilds={2}, type={3}, serial={4})", failedItems, failedMobiles, failedGuilds, failedType, failedSerial ), failed ); + } + + EventSink.InvokeWorldLoad(); + + m_Loading = false; + + ProcessSafetyQueues(); + + foreach ( Item item in m_Items.Values ) { + if ( item.Parent == null ) + item.UpdateTotals(); + + item.ClearProperties(); + } + + foreach ( Mobile m in m_Mobiles.Values ) { + m.UpdateRegion(); // Is this really needed? + m.UpdateTotals(); + + m.ClearProperties(); + } + + watch.Stop(); + + Console.WriteLine( "done ({1} items, {2} mobiles) ({0:F2} seconds)", watch.Elapsed.TotalSeconds, m_Items.Count, m_Mobiles.Count ); + } + + private static void ProcessSafetyQueues() { + while ( _addQueue.Count > 0 ) { + IEntity entity = _addQueue.Dequeue(); + + Item item = entity as Item; + + if ( item != null ) { + AddItem( item ); + } else { + Mobile mob = entity as Mobile; + + if ( mob != null ) { + AddMobile( mob ); + } + } + } + + while ( _deleteQueue.Count > 0 ) { + IEntity entity = _deleteQueue.Dequeue(); + + Item item = entity as Item; + + if ( item != null ) { + item.Delete(); + } else { + Mobile mob = entity as Mobile; + + if ( mob != null ) { + mob.Delete(); + } + } + } + } + + private static void AppendSafetyLog( string action, IEntity entity ) { + string message = String.Format( "Warning: Attempted to {1} {2} during world save." + + "{0}This action could cause inconsistent state." + + "{0}It is strongly advised that the offending scripts be corrected.", + Environment.NewLine, + action, entity + ); + + Console.WriteLine( message ); + + try { + using ( StreamWriter op = new StreamWriter( "world-save-errors.log", true ) ) { + op.WriteLine( "{0}\t{1}", DateTime.Now, message ); + op.WriteLine( new StackTrace( 2 ).ToString() ); + op.WriteLine(); + } + } catch { + } + } + + private static void SaveIndex( List list, string path ) where T : IEntityEntry { + if ( !Directory.Exists( "Saves/Mobiles/" ) ) + Directory.CreateDirectory( "Saves/Mobiles/" ); + + if ( !Directory.Exists( "Saves/Items/" ) ) + Directory.CreateDirectory( "Saves/Items/" ); + + if ( !Directory.Exists( "Saves/Guilds/" ) ) + Directory.CreateDirectory( "Saves/Guilds/" ); + + using ( FileStream idx = new FileStream( path, FileMode.Create, FileAccess.Write, FileShare.None ) ) { + BinaryWriter idxWriter = new BinaryWriter( idx ); + + idxWriter.Write( list.Count ); + + for ( int i = 0; i < list.Count; ++i ) { + T e = list[i]; + + idxWriter.Write( e.TypeID ); + idxWriter.Write( e.Serial ); + idxWriter.Write( e.Position ); + idxWriter.Write( e.Length ); + } + + idxWriter.Close(); + } + } + + internal static int m_Saves; + + public static void Save() { + Save( true, false ); + } + + public static void Save( bool message, bool permitBackgroundWrite ) { + if ( m_Saving ) + return; + + ++m_Saves; + + NetState.FlushAll(); + NetState.Pause(); + + World.WaitForWriteCompletion();//Blocks Save until current disk flush is done. + + m_Saving = true; + + m_DiskWriteHandle.Reset(); + + if ( message ) + Broadcast( 0x35, true, "The world is saving, please wait." ); + + SaveStrategy strategy = SaveStrategy.Acquire(); + Console.WriteLine( "Core: Using {0} save strategy", strategy.Name.ToLowerInvariant() ); + + Console.Write( "World: Saving..." ); + + Stopwatch watch = Stopwatch.StartNew(); + + if ( !Directory.Exists( "Saves/Mobiles/" ) ) + Directory.CreateDirectory( "Saves/Mobiles/" ); + if ( !Directory.Exists( "Saves/Items/" ) ) + Directory.CreateDirectory( "Saves/Items/" ); + if ( !Directory.Exists( "Saves/Guilds/" ) ) + Directory.CreateDirectory( "Saves/Guilds/" ); + + + /*using ( SaveMetrics metrics = new SaveMetrics() ) {*/ + strategy.Save( null, permitBackgroundWrite ); + /*}*/ + + try { + EventSink.InvokeWorldSave( new WorldSaveEventArgs( message ) ); + } catch ( Exception e ) { + throw new Exception( "World Save event threw an exception. Save failed!", e ); + } + + watch.Stop(); + + m_Saving = false; + + if (!permitBackgroundWrite) + World.NotifyDiskWriteComplete(); //Sets the DiskWriteHandle. If we allow background writes, we leave this upto the individual save strategies. + + ProcessSafetyQueues(); + + strategy.ProcessDecay(); + + Console.WriteLine( "Save done in {0:F2} seconds.", watch.Elapsed.TotalSeconds ); + + if ( message ) + Broadcast( 0x35, true, "World save complete. The entire process took {0:F1} seconds.", watch.Elapsed.TotalSeconds ); + + NetState.Resume(); + } + + internal static List m_ItemTypes = new List(); + internal static List m_MobileTypes = new List(); + + public static IEntity FindEntity( Serial serial ) { + if ( serial.IsItem ) + return FindItem( serial ); + else if ( serial.IsMobile ) + return FindMobile( serial ); + + return null; + } + + public static Mobile FindMobile( Serial serial ) { + Mobile mob; + + m_Mobiles.TryGetValue( serial, out mob ); + + return mob; + } + + public static void AddMobile( Mobile m ) { + if ( m_Saving ) { + AppendSafetyLog( "add", m ); + _addQueue.Enqueue( m ); + } else { + m_Mobiles[m.Serial] = m; + } + } + + public static Item FindItem( Serial serial ) { + Item item; + + m_Items.TryGetValue( serial, out item ); + + return item; + } + + public static void AddItem( Item item ) { + if ( m_Saving ) { + AppendSafetyLog( "add", item ); + _addQueue.Enqueue( item ); + } else { + m_Items[item.Serial] = item; + } + } + + public static void RemoveMobile( Mobile m ) { + m_Mobiles.Remove( m.Serial ); + } + + public static void RemoveItem( Item item ) { + m_Items.Remove( item.Serial ); + } + } +} \ No newline at end of file diff --git a/Source/icon.ico b/Source/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1300125b7cd31f1c6d7b4f68e1e73add9c52515c GIT binary patch literal 4286 zcmd5FLjvYIOqeqXTzrP=yot@aRV+XRbvJe>=36XO+9EggFLP0?Rnwy)kfB$|hKQJ(W z0|yRZ_Uzeut?BTKtle%$P*4zRYirTa(12aLc46bjjk=wfn5gw2{Gub#Np^NN8XFt2 zdGlty50A%#va&Mx`ug70)pYk@v)QyxlarINcI{fdUR70<)~&27{30Xmq@*NNS65@r znl&gdFGqBAG=hVJ|0mm$wM7TQUsqRmR}ZPFsd`_+@8jd6+sl?M!|vU?QD0xL_bPWH zx}WZu@0AzZ@%Q(~!i5V_Q&WRYn>JzZ-o03|Boh%4VR!F8B4R#@idLh$yBixeY(QmY zB|<|(_1t^cn{HdqCv#-2;^JcJzntsW@xGhc{~Y=MMBBc?b{i5Bw&TesYbjTX!oot{ zi9g2_?Nm_@|DBIp{Bn;gR;Y&{z+J&OMDEgs^>FB`X7hjBtiQ&4-;qg?H|1dd6$o+4gaf0nP5F5LX=dZ+~MOoS( zBO~pcqp)g~qQ9DYaJfu97{;UZA>4BR5^Dki0<q+X&&i!sCw{aJv=bf#RJh+JvIaqxt3Bf`o(wq^GCT)|c>ZWA&PW zfs3fqTKe25->*>jKM>!t{YN;RCn#4zeMM^7;$j2q*DJKQD{SAcux_2AA3d7ivX6?2 z3eH)l?LI9nL$7HVd3^qgI7{3hejvUlz9Ytor-(R0(H6b1bEm@d&zpOYc3PUrFMeV1 zSWnB=B(_VelNcuPQ{s9`N{W_`ib_UKP8rAdFxDPqeE&Uj!rP2Xhf!ME%otqEyARc} zH8loWS`;o^P#7Fkj2)&82;WrvlE-9B{JgELO`l!jshjWV8H@B-e0(DBaTT^~*+RWO zi_@py#L&r=RWTj7Hb z6nc6TmM(p;{w0sf9$H&lF*-VmbLY+Y9P-P8l0xK22Ni{#E*p7 z|7D_&D1)~n72f{AXz#F5HwqII3YRV^=48bfX7Wocy8qs#b`W1Xe*8E-|NINQ(%*-D z2VO=|>ljjtUZ?zvFuY#mvxoRCagqS>S7LyB>gTfuzA@c!X6?h_{s8>$9fhyHGVsYK z3S(mmB_%)QxAZRlCOPKRsZ+Rq{Zp*3uS0%81rl-x5u4G=nAQZRtBV{*spI$gyiR;g z+#;^APkf>eVGDP0jt8%ubmG1D6mH)1#)ltz@h%P8^n>~H^73%#&>`ym96tN(CUcJD zZeQXs<5mmfP9nm?JNQ0EE;+ND{qMv#x@{O=@Hv8%q(&63T#SnseW^#qvnX7A|!s2a;3jk+-aYzSP8ABKm)ec50 z{)m0z|EK8#o!GX0BkQ!q*t#_xD_1rUCCptZ+`n0mSiUa27Jn6e{>s&>7#teHkt0WR z%(vTZoR`acsX}jW2lI&7*f6=?pbmzZhZJLR4EsjeC-yMH7~G4lu04$TrHub;*msQB zLlhCwgq+>D^E6|;^htg5hcCY*PcOD@+r}I-OUu~p4#t!a=CwFJ8`(F=82cD`BUl%u zBQ7qDdYH#Lw31^d7~_i>=i)f-WSsc@Ud13+`tZ^mw zNzS$891cIO8$_NG_U+@j<7gi)=9r~eyf~9>U-C(8-p{ct=KCP>+3(J`)|u+*L%)~) z9qsLqKR0V9d6(RGzr1yCl9NhH%XB?1HJ`_`fx0$hq~%YOb4Aya`kw4J&oA|(LB1_5 zE%+z-3rggSw2O!EOFf#KD|S(%YrUePB3&cOJZq2l^E~KX_{9dBSi9f8bqgz&FE{z` z_{CK7q~4cr92pZmNn5^urjmVBpQYzA*6o)rUq%*nD|0NrxOcvFHi=d8z2SDd=^v}< zUn_NeCbE{yz4IQ{ws>TXGiT1|nnUD&dXJN9=j7yQ8|~`qLPtjjBxhx2X6k)UHSb~k p)_z?sm%c-(_e9?6pK7kih`jYZ8W5)rAv3|JwGn^88) zF*})gZrwZ8Ii2nSrWpguc&k9lOLj`_oEjw4vZJU+=l^-v-UEYK=kopj{{QFsKRs6{oQu`rct=>e50gHh=kE^XS5eGr^Vzx;fgFOZoz=6X0(fEjFmUJ_dACRP2t+DVy{~4P-{=Q_q&b` zuCwKVr4dU{e(gOhur}`jowZHtD+<^(BX^E<*v zT`#?EnSlm-wVqp5Leog?cA=>d?eM!sxoefXPPvCE_i*JNq1^S#JyN+xDfc1D-Jslu zD)(W^U7)-6l-OYu{c6GO3IqajuMVPD_wEuPT(#Q=`l;lc7LTBC5(>|9?-%NcpMW!A z*%~~scCTNz`v24Zh`q*vE>!@^3y$T#(@!=qpgRZs1N|97DB%&hGCE z$7mlDH|xc7YUdaaI-cv_JdDce+$UPj0PoIGtfOd#xH+jEfSBn!yL7StX}OI2LV=jL zmT-!4`m%r>NkeX)-G3b_5jUIKcOpZ_wz5ud&oJ*{gLbPYEo#U>Z+Gr&S%e;iWE8UR z-6u|VI>&pS=PLVzSL+-tG!0MatUCmZsl0xDg6?tpNc5`3Z`H2P#d9(F4q@3B;7E4P zdo(OTEqZlm@GzvwXYxnP^!TFZRmKF<9~Ql&GP1o_@S1v~DTCLfOE9??y+U>B5_0?K z`!=uN$cr(Zo4ysAK2OlepMR=Ag71-|d=HqE?YmOL~fYuw zp75%jngmT(kJzSjZ*v_RD3w2rm0Jvj4t9*4wVvA$L%UCnPTDwi`i>dh@ zoT)3cd+IGKQOLg(O?X!F=Uluo`WGOBy=^g}3UE8uSCAO`yx<2poJ(~l+SN`Y`_Qw- zLdKi_Qu^vx*BR$kC`UPVRA%u1VxaI)6h=M%qZkw_>3W%UB-HaB6b0c9$_GdnU`U(L zN}|L-;-Dw`pMgM7;6Zi(gWMvR2CSVC>OV(|>;bd;gizm2kL8wV_YtAqN6+ceVxLB+ z-+*VaPwk2lYjsx%?pKg>w>n3#$?^Hq?Ec@J1XNj;7;&>fnj9~l(F)5%{&8H`X#i~7 zTNTdwtY2t*Sz(f6TAqK!V$@ui#ImPLwdGRnOrc35rDt{@5Spf{6TIWn3s6zQE@X+m zv#VKACJM6jB%vwIsA2O{yT4@FX$kEp#)=YAsD$YzkNdPlN}Hu(*_kXotwb_qifwA! zo~m|?dP3_Ay0rk10EvA<2w=a2rJ8Xwii@H(t|&mSmom-3880_LUH#>+78jXS&RAwQ z^RkT_N1_j@=68u$x(|WG#{tP5Toccvs=x$jSwG<7hHn)pj~i9=J`*Z zB3+=9dr`<1>K$y6iFJ7o>l;irvPJq$1hjggiP=pJhKYD64&geeW0r1a*{~NEnQW)3 zH0+c+;Jl8d8dh~#**P-VuziM1w`E1VVTr9vas z3mU7j7~BD&erp6itmbs~9zCM(;whc5;&mj%B?gsH|0F%#qym{O(WwOYBUCC~H|e*S zint=Fth0 zM+rv>c8q(wi$Ia-fEz( z%8jL)#YINIX>wlPm`Y>PpyMdWHaFfnVo-w^zCyG3P@Kw1 z7@$c7biq%c>RF3FEIVH8(R&XX>bxpF=wdmceeqcKDvgQFUo%2H8@^b_+Ixp3?82k) zc$>DZSCi1{JrF)*t5{pEa%#nGF)eQ6&H9rEt=qeLwA;NsI_(bT^&SkfZe<b0ZuTCd!Dng6Nx%;%3oWAZm_t8+ZQVtGbZ6w_$BjLpYr$MTt+ zI^Cp3Bk5+L*=|ZMjH&ny2LebPOW&de3;{Kg5wGonwfO{>FuVnfU15wZ*W?;Dfa+TT zIQnzzdol~Y80?f8JpLFZ3W?L?Ze*Lq2hon%)`muM;;n7GCv6zSYX=(f`RBn(R=UyY zyqsmnup%>?0g^Ni(S9Hy38FOX)$>iz=+E_P*k1>Afa=cHqi*eX=7`VD^Y88p;vMCq zq@oy%*$f%#8G`$TAix#?{OG?8a9w|;!28=E!G3^$5d_#m0K)z0Q{&3soAJHKRD86=D~X8dIid*X6dE7SobZ z;u)QDB$v&zW`sy*D$*~?FQt#1m$IQG!ci<|K#1do>r%1Ssd8OR^W~?|M=t(_dOl<3 z(#2y+WxB^(T2;pU!ayg@s`@m}FtJa|(L%}sGP-^uXph@2*Wkgn#pSU5)itEhe`Eo& zH|u(DkQuPhpTaYYuv%Q>SaudGOe^uFO+80!NC{7t>RfJ_D$l>yNgo=3ice`IfC{1h zJF=0_KrL~*EIr!Yx+H>Ob_u;lO}m!?d>QQ|n`A5xV7@4fvr`t#C}=cS|0 zOAiT6_nJufunzxmj4c;Ghsj*?`7cH{VBfi0Yr{_NmC~bODJ7?yW)ur+_^_gX?r8K6 zy-`M-hWnY)pw=aOip&Ob3hBvq+(dkm4x>t_e+!Q=A9P~iD(84HFvV#R1GhTIih&u< z%f!GvuvY>PIE{4y8Y`#1xJ9murRrgk4Q1IDh=5popbJAw^6KWa3umWZI6LWr+3B&U zH&3oKp%v{z0it7OK&mQ&M@KwxR<`{@Od)PE=fgq4-CjcdL!@irNh8XfPtWtsWGLT_ zN5^_h)m7}w@fX-FvFx^((pK1kWoooX^L_*2=UNow+0zQ8O0$1i1$}|KV zWuzw!&dHL}QwQa&{XOcI($kbo9sjTo7P7cG#oa2^>V^9E0E}3h3KFHE5Np%$^fI2v z410zEEsSHgCuw)(<=XwHU`J4TN-E1vMHVFQS3E0=O-X~PEoXJ}ECZXOhs>ZdZIm(1 zXq`qGY&pTC?Sjq6Iz5KTU5DWf+#K&QIi$7E6SS+=;jd?TLnQvLC06#Vs)>R>Mp|we zg4b)K>F=s|{FN>CeE;)jNfhbGbcY6m=^kRk2j?<$hg5N}zM!G%g56ZyZuLp&I?y6Z z#q>pu8Qw5f81I1CKYBP2=)DNM>AIMO!ww*Ob_Z0jlpasKJrc&c-U0pg_k}Q!Z&cUn zImZ_dnh&JM$zsBxZI#kf5&|Vs&D3)t!orc~e+8d2Syt&%wXH()O4XYXSNLGnQuJMD zUi~_f(ps7V2+a*|Q(_g_{&>@b1UCrLv^+hMYMoMTsZ^UO71l`Ui=_0~p#X{Bm{?8? zbChEuykJowYo>bOzB00$BngDes^dIQ(lkuF-PT<-%(}a-EgY0cKCNCorn%85uCl$x zL1`)&A807B3=^76<2`R^Pz))dBFtNE!PLv)OonA$r6c>AIg%P@S_Expk{RiKNhk zH8e3MG%-9hp|gEhv4(X~pQ$spPduy60TZ>C+0X?kV<9`dIIeMKRG`rm)d29Rv&@k= zu9Ib?3e7sZ4cMs~BBJvEJ_Lxu8trO$6o7zymH(#97r9A8`xdL3Up(_^p;&6CfGJsMkkh0fYe zhBIczC6e0pHOon5-5$doKUn}Cf*W8rs+{>CHm#$aeV}zD<@qm#08nQ*kq3bwp4L{x zaKMs0iF(8xSk81QgL@CM$$OAdfK=USqVY-tyF`45W|9*~S;-C{c|OWA44Zf$r1gxg zqf&!8Z-x`1qT1;HC%TFRsj(+9VroLcOt6{aD-2&R|7YbIC97N zyC9;2Nk9@^$?bq8iUC%OJIJo$R+f>8F#;s4IoWsOZTIVpf z#qWpZ+iOC~b&;*zHEbF?>7ND~0`*84v&AK|;h;(a=6StV$HK;p*{qq=l+e7LJ@GUi zN+d%edxCTpYo>IZwn2BT`YC!8np%aX)&9S#j3w&dKd}xobWc6M)p?1aO6pFj)RhJV zHiV|7{{1Rr?@*z6o3|%IXsYvn#y?s?T97?K8Z)8Q+MUc>gw;hvID0%q%!;Mx5X*5^ zm!S(4^Tby8DQ5SE%keOEaXF!qu$UI5VG9Vi-G2un6Sjc%*@DDzhk-l=t3YVk&mdIH zm>qDv+Oq=95uFpMCwWYI)ac8YjZAb_gPJh!S9c#sXp?!Xw@5D7sME{HVvi8+N_@Ip zK>Y~eNJd?QE-Hw!PQn#e`}O?BR`A|$v$iL%;7DEL6*HUx_8odhw$c+sS?AF-dJXpC z#2j6MHbU4d^GJ}r1oupQs<{2mui?jB@zK1&6$QSbie#=B9^?whda@4(_+r)!&KYEV z?A)2FFi13XsgZETC%r+os2u12Gfl%3rU93jWiFYaaETt_apIEO|0S0|BTXK60WQ%^ zWjUG5k%p+0QE1Kpry$3%kmbyl9CP74G`e?fKw~N?XOUDq+xYd;z*BXnX;DIz z7EQ8@MR*}BTL_j*&X_H%xMzU(=5iRE>?tB4k5hlPF=J7Q^^;IW%vTtZb00C{W$M?? zXT(?j8%BI3gb@Lw^^=7CGB2_Zgf;Eft?C@7*m_RNSfpM+EN9zYoudrWf(y$rK0?HO z=ds;|Mu=01n6W6}dIr_I_X7{U49IA>sxoHNa0&G-!~~9+?p@FgIZ4{>&<)$b0dS2t z{3GuM;f833bQrcl?Xa|;1Ma}|yc9JN=W#?QHKyqU7vNf1)N$S=u2t|0u6^alTx;DT z^Q`Mv=kr$xhgRJ+n6duYLyU!<5}T7A>?wc_Q_|9c(w-e8p8>2Bvcg;G(hfA5_T8k=?g zg~v(O$q^1diAI0}9FIAWdzV9~f0r73$V`(yvc!4JM?4dl=8D*WfV8T2I3}_y$?zA? zL<*1akPTu#;#pnwL+lZ9h8B7fXJ}7&47W0ahx{$t6Sh@!cN&v#);ouksq_4!ficX} zlb@pU&Ko3t7n;|;NpqSfmLgMVUiCU99+77|Yx!*F37VzgO%uJzsVS1U1c9%iebx-# zlVW)`Ufhl;nK@yb%{xtYCf4hK#-&Nu2<|hGB4Uljk|el~;gN?KY^Pj`J7HFPa!w39 zORgwiM$ECtsg>B|91C1T85ZMO1fFXw#(;|^Kt{p^;l^y+w>UiE$jSY^L&Y;ft^Pe4 zFszUO1ToOTVxL}Eu~=?2S}(XO@aVa%PdpVNtSFJQO_9P1TBt%`A+TYm$1{3Y*aj$k z*vhdiBc@RC4CDnm`#l3=P)@2gOY@`I4&KY|ze`2&fXKp~v!2@nQg))}wutTnQnnrQ z2ZT7%v&bq)FKGGmpZ@fxlLxyFE3OP_ew=RBc{1Qw#6|2{;a zxH%?tilg|eoViPDXI8sz6KmnqgkLn3rDx`rs#3YvMoKpXM(Cdgm25UnqC6)Yu1RPw z;7d1Bn$#-VGUV9{{fxtJD7vuwXs1}4qH@`3R^!SKj4+{6nk|zgfWIZpt~8k&7-5v# zg9j&F2UlcaYMw7W1(cx*j4<$56t)b)A#M${Bh)E{vv4t87iiRDLMep{O+{cX0C_&};jc4=;g$eNOGL>=Y8dGsJ^u zi>2(OBG4E{8wDyoS;%w|8nU@O8^fl*JwK}9H9!JaUpBIBzoFx zz$y~twI{SH52TM9A(qP2SoejcS`BFylfPLmOU_9!E#9^hL(_1P{?@a$LeE0AJm2H2 zUBAtB(%M1d4I;qMT?74R8CoQwkK>87bU5MHD2b$@CR82{UgC0#mnnh>hzFzG~W4abR3%NU&Zvk z4ui)!_!_Ed_CU9|S?~Q;PlD<&8J_JhH;?&W#1ss|^l99S_vmNNF!Q=uNR{6(mN^X}YSe;%FzjsG+> z??8RT^m=sBc(2@bZzlau_S7ihN^aUKQk+P&?#=O9YM2>15 z>+99Bhohme!j@tIh!NjvTeYq0XCF`*5mHZPw?NK1qaZLz($bjSQsA+xu^xDUKiXI) z^AY0=WOaB7j9Ro3FMk9Ha*N#+$<2$RVnBFX0qbm3H^3=N&glA9*Y{`$mQ`aWd1%3P zCra4RBtTvw=^IB(#6yE!!+h+cMkBr7MD`7+4?q_=Wn*q04OTLj9$<7nV8Yu99V`vmF=elcBrv^YankmWnKxIY>om z(io{IQz|k@MMj7SsVG${N|K6Fq@uY}QK>Y)+`nNT#Y3_%oQojNq$0aiG##ksNS(L? za;Obm$3Q4J#Y85(K&anNRGVcf55?!icGvd}MKj;1ND^GyhU}S*5h>M9UCJDnt|NVB zHB#|4hLq$bdSR1aJQCk~LrMv(b;xs4xV__3O63$O>)uf*d2$Nw5>@X|2uTx0txZj_ z2%vjnyE6)6xRe4Eu1BGJkzs@WO-C<`Wl4M$uN_w5cV+r%h5nZ@ZQ^zp>kD?nVmpJS zWU%{OI(Q5x`bQ!-T2xGn$HdLk+j(KRs8U(kcZD#TAybZAN+QGriM1oSD9wqrAKXBc zDO`$1`wMOD7`5o!#RT<25Mw5WxHkeAOyg9kCk&=KS8_(Yrfdkt3;)XWr3_sy8(W$J zszc#aUKs0HW+QF}0RiYZY~b6-6JS!xtFbnSM@C0Elo;oYkTks6C#I{`~UB~-0=(dksVX|L43x>qDY0Qrik+O}>xa7ie z=Pw(x%Nz8x?yL~&&Pv7Fg(^>}S}H7;$}J{m(B4u8xKkieLOVO1O8FZ8!!KBX)q3PTNmm1^JxXg1HgwwTZ%xWgcq zdmm7ALT@Q%2+;7hJ}mF+a|fzMBlMYWpvY%$K1DvUrcZkmpp1v!oNqu$cWV{&aB8l- zOg)VwWjsta%*?H1CXmer27t!l^OYI1FbHS~Ee6i-XwfIsQ34ZhV$p)l>ly(&K|FUB zmisx($niDTxwu=Q>G?Ca6%>_|O9m~BsWeLjY`#^T{0wAB!NZ+ISl)r>m6F?uYw5T@YdW99e%f1o2hb*_;Ft{ z$zf2A-40@UsT!Ck9#-1qQ(N>CYZPk74enGXI`sn9fALP$8hD4WzN-`+l4&K>NCREz z%G6~*)LpWfJV?56`DDZ#j&vq1^Wv_g-{S#3n`pR_9>t?fGPdImXAQ!-W?Qe*NrdCc z=o9-Qs!Nkeo04NGU3M%L#U>Y#V=0|GmRNQy7Q~gtUqPM(I8TVi+g(wx-IR3<64oVr zBrUS=rNhPDhl-@qL}_}wG(B#XFV&=43MAWO2d`S@z7Azx=S$6+4N2@vErj)S)26MP}PM2x2@+3!{AzSY-i!lTNCRV|v?%STYN$ zb%wE09X!lOSVkf|KM>u~2tE3T!1CxbqJT+Q@st5o1rYpl=BtbW%j45=<14vL>_hQj zM0c~f6_aS~ zMohdzj}24WPw_DzFjlm&cJY9^t5?dvdQ9SN~q2YSlkV09pO@61bU?szt!}7 zk8WXE(`OiUo_~>&|0(i$2F=>2;5I6lWr_1mjyCK7?jlCv1xnDnztB7CjrF_kUTk!! zyph9?%|0+Mj96(C3jd#|@K3-Wqrks|wV&*|f+B<1!UU^tB#eMK-_6nAY!9~FlZM z9y`YEu2WSCPbG@EWe09F&4K!_38Zs1tR;ZbLlvYb+HFKAP1%b8j6 z==zH>fXO+fm1E`gx(@nu8hwg|g^q<3YAwam!4b+nw-8n!#XY_zRXRbD9w$fptej_UCjZnse zgGB zpf}Dk7Mya~z8IVv32z*Qlnit%4z$=P*CTncR zi1aHnf2Ql(F$x1+r*8A^qd96GOL<6C0fLR3fig;|aauR>DB2X7(=z50E@ZjYN=rLP zzkw~mgtbfiJ*IDF^pGf$IZ8p4+D==Su!3B@Am2+k zq8z25l@ck-!AA&&BZS>tZN}{6j8b9Q?PP-8G)kx+2Vj1ZLwqVyeh5G3+BuJ?{jS&` zkKBw#NVdN{z$1IWXG-q6fm|=;%F;L__s^8;C?~db*!!7sx*aSf{m1a>QXq76&Uxpb;Wd9X2$ZPb=}FS#c7pPJu=Ru|4gk|lxuIMeWY~U={IF_PP+wnI-@Qv!{0E{SSThNN53B!J57zJj2QM8H-0u@E z6d?qlE$B&%(6m*%T@h4(pEM{WiIMhJb$1`uVpU#Ni0Hy1B8x=}308Ig&xnwS0g$=a z0?R2$x>exVr>gSJzk#X1GfZCF70VfACw?r1J%6iLRP zNxs#$N;#>n>_J)?1Dj%pW0ATDO$z-SqLnM)%m6;48*@?{D1d{Nh9;7*Fwux;dSdYY zr5NWBMbi$aWNNYhUshSh2|1Yd)9~x+TkSduT9E2SEAXRc6{Se)3{;%l9enGma_*eR8 zJ7^;WSD?xNjCj!Oze7BHOl7?uJ20l>sBx|~F|d4@T*%m7m_IKY3@=fXVo(3{*rxHZ z!j%8U>@_&#-pVqT9+SAk?JY zZf)xghhG=ZST190BmRIZqRrYl9$AtjwQ)Fo(=Z&4S-guz!a_b;Kcy_LgR&L+0O=o^ zq+p67EWaCGy-nnPMy(`QNtR-BiLn@dFj!CR&r)Q|+4+`S`jt(jRC`}gwkl9{Md>QzwHYeo+)S0xeY?sSjrmAAt|NJf|Aec< zHR0jfaQUAu40!tt<&WSB!#5*w$=->6f4mc$PiQMAcEVYpDM#dD9+}H`we%!oHXb6^Q*hN8a*whH4D41TRzVk73NU}t?)I#_CICF) zT@tg$0-hc0El|i(Ay}BNW*J|G1ugq}_{5NM0(h-Ah>z`Qu=m zJ{n|un2;dOQ|?{PTTZkYUALWROBLK15Q2P%HUKJM+cC}s-G_o&0y+Xhc7WNp^;h9~ z58fOUYY6Y5)m8MtAp!6eIIp&yuEchze)tC93F-z}3R3@it*4dlOr!45SL`D^z_6w+ zbsx}vI`DaxB_7aO#_eFHM%w!it9Pr=)J9!;i7;e#-9-MIm(ZzsBpA2CWVDP4BA5uC z6d$@|dh~*yJGbD(1xS5cA5~TvCp2-O00u$B;rP_nM}6zhmoxE}V~};Rt=)&LeY_ox zO0yPOtOLxD)ZJ_Aq4gpJ+jHRzI{VN><+0Up_aa{7Ba^EW$59 zgNc=?5Df*)e|~-JLo4KR?=OO_S4LA!7bvwIFcx6dLe-5P`&oJ2%prET>j)o60Ew@( zGNcXRShKG@jue^(cc2?Cp#rQ#j_xlbo>e!DtkP4H9q1z78!_-E+hIX$2O?}R-2`zx z@d((W=Nl{+0g562WP4m_;<2WNY&EUj2bxG~qe3O0o`<3T1!9jDo<*Yi>Yb1ie^6HX z39DbCsv zM)P-RGWRP;xjJc43cO&_^d!VBQu@7es9%S8SeNs5b~E;}I@7TaUz%!?rs}1s(Y~AG zNw`SZoUfBI4N_)|lo=~QT4lz|aWhW?&7p&Sv&?b{(ke4+(EfS&!yr&6%lq#qqGNi@ z1PhmpXZ93NVibHl)nnx7L-*HgyRg@S0a&I8za?*cnfP|lWRk~g|sg%=q=>C(+mj7>x;Or z5R2ckV3U0WkKy77X_5ZqzTS(mjsLU`fiLk?ykyre)`|xO4-QZ{9Z`Kzp_FNn7A5-s z#QmPSB77dYl}@TP%RzT6t)sP5$|fS}4%#KihV@&rT zeU7Ja2w1HeqGUOWdFa z=Eu|8we(o)!&rL|YwN4{1-lI!!V~S*t=PC#U;`zlQ^25@N~Xtg7rZq+p80J@VL2R? z3u_DGr&&Kjc?-&uzv`^>7wi_ymJ%ISAHoGgshUEnMyic3mI~!+)bp_bES_53N^abE zj2hxpakj0MVYIh6Zjiqp_=0~m4y%5I`m7NsxQH*XoQy|t5glT113e|tAqI1|`yC5UFOaqT&d-V9G; zG(nkg!WTgt+Vdr5ELd~sZuMnwD+})Y)OZk50PU!S`WI0Ko--^~fM>4u z(aF)NRMdf@iUyT?Bsom}({BRqEK3&ZG<$pXC%eTjHR6s)>cQlAX)JZeAorzbH1(pu zk_rcHEb1dDdbG$R~kNerEeriTg%LiAJJ zH=WmhkQy=JSJAh)JLl85aZEf5qP!p`LP3#=Q?VXny6FNYqgdPJPUEFx7w;z70cwWdlO}5_*vn1D&1$I~|+KVC*JkfKj_Op|x?YYFZ+=v=L5ny*zN}7TnSCD~K$Rv(% z)C~9?C$K1D31dUY%7o+eGrT1sbr-=#(ggaS#L4Dscwb^LC!-J{g$fgu;o(xHr&|dN za?H~n{|mxDEQomo_z>``^YVyayOc8&SD3`X0qV~fZ8s16<^ROggZ(TcBsGMI6GxbIIO8p1QIEIvH(&KP1A z7!efq>#3B(m1I1Sd%x#yr2D%KjSDRkjHZZ5kS7;*`pdreZMF|-gsaj>+SH<=Aa?MP zY&dH725tGAEEthoTPTsfpkG|Bqk5z4twfN|(f{VV%B!emOGwQj_9#h5#KCOeaVpr2 zMR1hSvc}_`N;;gAq{quNa3M4suSTj z+SM26MMV^oi(>)8kM1X{iuh4g6l{~LifEw#oYkv6Mu@~bf$I`bs&=bP0@O#_R$;|& z&vaP`=oB{eYgm9I37=^1TPK}UQuE&8um|70V z`Hzyk?I+trl6IhEvg9cm*V97bE18rj;@0yLrDci8)9WbxZ^z!2p|Qby5)^q9gX_5s zl_}A;(}=#!0}|?LEM^{io1s8POCMq-I~n@$DbPF^r@O+zptH;IH~*8guQCnC!=en{ z$FfwN9B>0USt#g6-@~y?sAio#e}&06z;E1f2!|TQts44yB81}%0I{ED{|kP%^dO1S0=c&+W*QLt?%N%!VNpY2(a| z;5n|5evQ|`?u1Ar#J{+l`0T%rltojESk)HDh__h#x$r92Uz7FCpI3_vv zP>h8Hje?T(e?Gnh;Lnb49p-L9gkTK+oAE^(b^pQmzLZKMOhem0a^#ond5m<{pum?e z0zMRF1aA(GU?++N0sgl}kVm>WpXS6_Vc>u>;*xXHu&z~>K;$Rw8Hrkb5m;7B0+Wub zyO*FrN&13iq`@jm!FvCkcpRhxnyoTYB2mj1%$clPdksigw`z0ZiK00LV=jae9-6k{`&a}J zpvRP;@tt^7VE+pqsfLjFvRO?ZC`EroMd3#h>d8+{M*dZ@K62v41#n9?DWo~!uwpMN zj(4VL+6G07d|s+od*6tc}1)nwS@E(L{O4!y|j#&ft{dvhT5)GM@F+eT{Xs$CCpa ztVKrkd^+P(U2LYocP8S@cRmRD&f!>tj*+wOfVc1M7cpc4Ej7uBwzk9J^VU<`H%Nm9 zx2r>U^3zc`Z!{Ih``k1Hr^i4RUa=HyYdf`$6!#JMRdNIQGdvz=4C8 zV{nJLWlN8CMo~$kA=-Ck^p{{;KHxJJ&+>(Hicl6GbJu#+l~z9hPt+bo9jC_uifry# zp9NpHFWo>i$qyBP_uXOL!#zwNqZEyNZ5(P0DH4P(7>$nBfKRMwf)9!*%WCA++_n z!Vs719bUf+TMoDNM$(EToC$-~JFRL23Jn!rMEr&R*b+e{pASyUjklvLn`Nfc``*W+ zxLBuhyibl7*RbS=Qz|2iXK|{;CNzGSL@BFkM zLp?=5eu_>FKRvcoZq|u6>6}s6))O4Y#inWg&;Q0hln@e<7Mp;3EvC{y;EeX*iPm5& zif@gQ@of^5hPn*2E729)l^BX_;3HQ)u);*ALd0RH5vz(O5{#keB95IA^q3A`zEB^9 zN3qrdDN1LfgHERPuWaw6b=(F-LQ}+t6G@oSlw0LYX17^DWx+Uhb_`C5kONy>KNzvE zoU;j?O#n8*UJ;oz?`Y>W=ktRUryYO6Kj(5ZcuSUtQG^dI*}N6kdmf9sf*cjqan|+; zl<)1+cb>UwzoDUD~1hv!eTvs=p1OXI*N?h~Gs@<+FqJEIBUTM`w3 zX-EIpF}y(#ZM5V{l`AZ z>ctK%);@RWl7Zn$orJ#}ldMg#e=)sI%hc|&b}b^OvDhb69l_xwY@=m0z^ENVJ3i4L z=Lm#`v5f?*li1uDqfL=lN6jF$Vjq z5&-WMkfKFsE|@~|`+{-|(erpsXCv`UAiSU)OJoYl3E}M(AK+L4zX}l*{1nF|s50kB zw45083G_Y`*KFKj`NZ`mw>*t_%>)gMLJUk|%Yk4DrQ(P~5TLE+EzxVrq`3#4PS1=JpU0O+G%8cD$wi#M3@OnM!(Er<)q4DGMk(g@N7Nuz_| zWD8ui1M!*RLNfvciwzicBRZO9xu|zS?O3@)ytcK`K(pM$5~eevF!`oXfES)kSf;=i zRf@)~JA%x+gPrX@itHE^PV*!_j=re0eICPl+Q6iYhqcZ6Avil3=O|z)foEz!>6m*9 zwq!z{clq60T&E$ShF~B4xDVi)=%H;UC3R^9S#%&RZe-YMO0W<(21~@uLj4zL29=?A z8n)8HjkRXeWZ)y3mXHa{=?q8oK6Ttbu(pB@xy%&m42Vfh5qv`PjaDBH!5vOPbuWBI8f`0;sQ3y^1Q$ZWy%{UYBufT# zifb5L39<6fd`!^p?q}Er!)i9H5mtRe+M{Y5z5(o6w|cR10|O0OU9IW4iNN2;$)U0B zs&@Ag8nINI3ou+62*;NSIUU^f=1eHx&9bbMIV5y-<20nCzy^G&Zc{6`Z=RB)CYkavZi zWi%q|Y3D`435MfO;AvhMX-S5*2#*8!6TgYUBE5We zDZ5oqB#p#0HXctFmWz$E4;T}+NewAzO=?Kxf7AHiO#U~E|F!eK1^n-H`b!_LE8P0%s%EjvHqxsR;_0X*kw~>tDgqCi@jzgqc9Y9607ma+Sh{3b51*zCR&Ue*xENcb zZahE|+zZhUxz`3_3+z?QpC&YyX|Q9_eZ;~0YNoyd&n8|0KM_Oe@B4Cpg_R!y31S=X zD3}PHjo~L}u>ceR#)G!anY91lp#}0WnSgEMV!f?fsCVN_EY9*g3pn|BZ(LoA99Rwtp{iBq=EA83LKv{Z&aMA61;m*7E}fNjw)7 zLPo+PKk(sdX#;RXQ~h`#R{Hng`ASTE?l`~C zBsKoe^qFe@ai9Moo{CiZZ2$M#{pqnkIjGOQ7lm{HJ2aDUo*Nz{87HWZG1=)i&3>rFoa@&poh?friAl6y15Dfg$}Vrkb#c zLe`#{gUFNKfIfqiL0U8@c~?O4mN3&>11Qjb)Kh^>p=m80%MJbbSU7ZizbYq_7OIM3 z7pB^~@%jlJUb8(vsn&Vp7u4(YMkZF878^YUQOD!~B6Fie;>xyn3^XNgVvtb6PnRm( zlk)h}@F&2m1OGW6vL-(6{~SwAIT;P0FZXB6j(>@^AX|r^t#?Sj&tPrQe5kjlGsR5^M`9+dSO8MaM)Xun5HlH-w#8VvEf{~K_kCDQ;dgEHtc z2p3BUOWag40QzOqspZCOJqs`kAE+T^;<6*mJ;KE(~kK+dA6i5I`g5>vC4U4--U`eJZgo-`Hl zGfI(raBv13e1kKz=Vt)6UDLPxShXlkGlqz}ZURJ^ahJcmsF zqm1lneSTr>r1Jp?3P=0EZ#HHU<>EIR6Sfs8)yc5T!1;r=uG)(k{jQ@vNKe;N>*p5? zX&vzq94NSteeZWdaUfP_RQZ+?K~P+TpUH*5S5P#o$wJ~{I%POL+x62xs*O8NbTt^R zq72Zj9Si(Vb~VIN8b5gr-xdGD`UUBL#xa1M#5!JTPr_Yys2E2<4gzN<KMGTjkLDVw=52SO-TEeCE+O+PbJba8XIXDVcxea z*r%QpoG2XHBK$Fhh}489Y~zkg>uyit%_Yp4s4LNaSE4;3G=B&;N1Bckr%-zcM&ACK z@eqs6n8G_R72v7RxQR+?7Uzj)G>aqP7GUx(vRt4Z{D8v>wW>k(dx^`* zjS;XNb`C)o-J0>s$xEZuR`Vvo2%#M<-JxT=s^3`K7=8}~Tj6Rho`#dk(h(qsexaz= zS@q&0H0D8jf|qA&mJ{skRr1==QPw=SOpUY8)>4)~3>C2D{O$IDdM$Tut)jouE4HB^S|S;qYFx>^evNCc=FY#aiZC2I(yPVNsHI+Y!^$y~D>U!G=&sP< z&ubd#NotN@0G|Byy*%=!bXoAE5r6Oj0bCp$4k*Wh(wPqbSb`e3@vJ3h7(ZW+AJZ3d z#2)>=>MAqddX}#N4Hx={e2Z^Z#qt~??n3`5kf>)l5xm|10jW;y7B&OMb>EP(&KZrGCNkBke{8f!L-PzmN#vWFQOiUwmN*s#Bbxi(=z=G1{-E!1pc~3BT0~fu|G{PYvbauiB~S z%U#IVpy&+>KgF@LklO_O1nH9Qqx~=jZNJC?fVhT8*fn6NpNg!__)iVvD($6L2qYywzp6{#o? zBYom==xXy=8%`w2hWBncsW74GNxHFgXnwVbUus1LHx2nO7bA~7$t%Dc%uV3GJ1n*z zmv~-@w3a@F#{!dh{z&x6+ao0;iygL>#1T}69rLe5Ma*^5j z9d*Uj)A%E(Gc>h&nuC5zXA0D1qJ<3 zmoCIlDwQ6CC<8c?IXHR@( z#xW3ycuwuS#)GQt{;vI0PA8tzI8EZYGcH>DWT4$nIILCNoP;y4X@L%Z1W0D8Do+yp zzm-3e%j|4fh_gyVY@(KF03jqz^2}p!6JYPoK7iAayO<{AHOV`@@EQhp;E3MP*Ze(R znb8WuQh_T}cnDmf!(Z?Y+ldX9lT?`LRT%4f=q^U8CeXdN2g~^)Rctdm$n;nR9XNn* zm%&Iz~d|qqdjba>TqeX6b7PT3$ z{Og-Sc`rJ1;WtBFLxYXbuYqR}rD6Sr#x*S9G8W>fRR2yV|9tYM`o$lAdRgz^{(67zJ0Jhxb9ak{>&h=~ed)fr z51qQ}>^IxyHRjAzoA#B5-+lKa;q*U->OEUy=G%&l_h$WV^6XD49=PY(uD@whGCtPb zcGf*~*M09qy>R-acdjd6_vX#Jw{6&;dTQeWlJVZx?lf9`P@gQUYw^vfKZg@1JHdwrh0r}?78Et^4s`}=5ZLUC5qpSINu{cFktVfH^w*8I|F9I|P7jA7dq@02>;axaL9{J3QOQ-7QD z;jmMm7p>d2Z~QOTb-w=gOM85mOnU2%x}k4hZJYUC^Iyu}ZH*CIjx@dX{%;M3nzX;& z^@cM!UNq$HFY9e{*W6fk|InB2EPH6kN5lU1hd|_GzkF2{ z^~RGCi_;zxj_rC*zoPVe^_X*Q;rGsR+;wutJ@b}6aDDluUx(i}ziQOS=MGrAr8^(` z)VOo%U+-D)#rjjHj&53Y%ckZ_K3VnpZ2xn+ch^4F^~~nBy-9iBf06UuJsZ02acunK zU&G(I>9*_N%>2|kbZ^$EsMk(R)m}gQA>HKmqqD!5_QgFf9bGm5ng=)Co4)d`IXf;B zOEx~eYrz%QA1cjzyxOo+n=xd=`jMJn{OZcEX`5{CZiyZ8-kZO^^KGlH?5&wE2KKaF z^HJwJ?8$v`qhI}e#_Mf!e|P2gcYpKy=gM4BkKM0%IXv?BH(fuh*L_b!#l;R)*s`hb zKW=)c< zhWuAIzP#nh4WBRh=*^6tz&r8g@85f`vF+XM@sGWg|HtRvwuD{Z`R-%kdp;QN_`Kl# zd-jdH`k|7yTBgp~tQl20YmIfmRX1!J^7b>U4DF-72)omBR5O7@z~pO2UApY9>#uFk zpJ3H(DW5y#hw8=4U%a!>w{~)lzH#5yTQ{_IHTsX9-m&k8FAX{GymEW(tM9CuAU^q# zdEJWKi`u3d$L-7SUiibJUr#P?BW76MzaZdHioBnvv|J~P}$Nd)Z z^Y(dfZu#_2ug;p)`&4>b?9TfZ+!^z`UZD?w{=2_RHW-0OMh}CB{K6S~vp88=Ae*W?mNk`vI2|Reba#NY1Kqdr{gxj0g_b7tl>d#13vPS4+-f3Uh>)`oXSlt2C4?wdRfPYhf8sD0g@&xgOf z)3@vN!EYYharz%K_uN%6`l|=;`~01P)Tiom?wEeju#uOJ8zFqUFv;?}$>S!yc;DH1 zU)}jt%@vV59CMR8v!8qQQT3sx8lx}Y`C`KCvm38^?V#l^-*(>g_5|^wr^?@qT>fWE z=C;El@;k?;*Pbb@o_FZPgE#%EIn#2zb5!K$>#n*;_x;BF+urhI<}Lhu-hE z%$aqxcv$%l=^xy*@BWp;+MKssbm#H^r@c3Us;T||{`YAW@_1V`x*S^lN<5Dz#b1jT@Ex|md$*Pf&#n+{lcC(Z?nv^78F(Jh~e0jNR zKz4V`+~#JM>m)lhX^(h@(0(=f>CY7i6A2>wqN7G)-gfW8tq&bbcZ|Q;|J=F1_r|XL zs@^A=&0l*e_zRDxDqIL|)!47ntFrNZZ1CMv)?xK*dG~?YDwZ7`j8?xq{+sK3oVuN+ zGW!<3>MP+oQdJ=DpOHjY&dZ%yR(P{>Ft>Hs;9g(D>f!F%ir|8TVb_v9Ce+-Lb$UrB zi>V6d9wzf373U`b%A~10&HgE~doYXHnx&jc8ZLqkE;b(i$5@L}tv%w)5vMaEiY=6uV@7jkoROn|kY4 z^ebi`$QL>LEK~Y~JmK`pRm1Mb9&hi)Cdb$ZGIkv{OXG*^cdIq7eyniMTQVh8ZE<;~ zc1CykRGFsYow50uN3AQ;{p2%_ zOjk*{++I=h`Cw|@TkqE4tBSo{&6hhWq<+-p3!5gUD94v%m|j$>3mcHG2{g3qniCf@ zyu37+`K;eH{-!R~@xw|z>u<${)UuDc5(l;JnWjVxEA1r5zivF;_p(Y$u4l)o z{BNsj_)6BK@@yP$$6MwgDUyzN!!~Tp67J|-BIG+bf$F%kNno5>&NyQ$H^H#O$_iH1 zof9X;9GX0HqUWSjg6i`7yxvc!YC9?Wr8H3P&SxEoU)kRzk0}?6XV^xHNx2$HE7E^T z#if;vU)UKZ({8y?uW?qoe%g*|!;1rg21Xw&Oa+sYO%@wmHDcOx8N0}=V6fNj*JWI9 z(V-N`YA0QB);RlQH~md;z2%szccSN&@0-mq`4UBU~OO^V#3 z^(;bR+RhkNJBO7KpJbxu?Ryfv>e-ffyYmayjTaDJJH@+p&5@{t*qxK+th$@W6E}SK z*6O0!6|7Ab@gc24dhDLiD=;jh&Md~)*V(pq9t5$#NExUh8F)d9!y z69$W4NUgDd5?|@it^dNc&5^b|`Muw=;!Q_fv@_nibAO-d<~onPB1HYPM}oXg$A$23 z?H_83Uo;<$eCc-9s4KYn=W9*>vRAyqah-bem3u{LogbFw9D3)~@A%@Uh1Bp=uGea?-X!RSJ_0qY*3Z(U;5XJzB0 zkK)djpLUs3`wy$ud>PuE`tANNyRV+^tD2p4FExp5`O%{P(&TBym+;oDxo6uRP5JWt z)dJmTO+vwqy?zA^=bL&TuP;%1!gIvCPU}J5!=SLPdiM!RkHmhixH)~-{u}WsEw^mU zWN+VF>Rk2RX!rF)8|ts^?iRm#{LI3d+?(m}RP~)t;)2yt{1*4-h9uvgP=B>n?IPC$ zv&=IYF+W1K&z_^YLvBXT&iy9GGEX}BW_^A$b@$DL_FV(FD{^a3$LC~9>g_)mJ9I#a zU79V)8?$GAxyHV=5Bv7gb+)APdo0+tqC+?>aBFS)y8{U+PruFCy1|BLOR3_m&6|Dq zCSDP7+0a!qDdAzuv-M8*b|(28bJ%DgE3-*B;z@E|-HU>(OSIz;c>GQbh8{V&X4Tum z1rjsQNStDyo_6c>DcSX(^3~sJ9b361`iQydg`+oS4&?RCH8^-;c+KGhS(S(CB5#zw zmg75DnQwM}%l!=(gr43nF)S86>n&`HR{GyN;dw%(zh_;99F!a2)3UGrnB?lX_zX&3bx5A@DBcQeIKV6AWa zWj19KrLpWv!~Ew>L7%l^+S-?j`MBgd%h?ank9JGtiVcMioSJjz>gu-B`M3S&3PeOJ zvme|KTX%Z5w5+(=_X|f%bLwO_P4BLqFeg3o&?(xjqH3!+0h2SDdCTvl$(H&Xj;kX! zl?3Y9s|$I&%X;x~*~U#-uZ$mVN@kvGH+b%9mtJc+Ln|g(tnJetseLY{#}&_SpQus)?ckQ6+LcnG$M2r%;9pmncV*q#s{D574oI@mhq`XN!_n%e=zkuz`ec-iKaHGj!wTWtST z|0CYs?}NN<%hH9@FN(}C<2`??x9G^>%|Z$jik_}t*XXaGvFed(|K!k}+~1T9{kHE- z+-$0z@!nDarr9Y42}&9?NH+2_O+HvL_>^~dm5b=zus z!r;>-ujl#f&od1kyq#Dt6Tr9@A(|3fqwC&TXy4&x_RDF}wCwJ$k(;*`j_=hSKVY_j z=fHH63Z=k25FH@#J8O!;g;onFlGX$ov+ouVR;#nd|=flj190 zx!{GK@r_^79(uoid%o3UaT>Ksx2H6&*^&sTm{L*qMx$+W`cfad*I>g`o}8e)myccM zZ@Nag!U#Qg+L0#9uQX92HMqeIcsjw&?w4u^q=NPpMdn%jqeuJem;gcdJQ^ z66g7|ur^{}b>!WtpN=?NWygE;=dyXzk9C z2zTEWGrmLn!E8psNt+b$d0nR5wDpPQD>K?(N`7@)KD?~QCfj7mrzw0JSQcI;k54?< zdaJfTH(t+tU4y&w_0Y3hR<3FIaQ6ngVdAoJ#Roe&CrS0Kk3GJiF|bCmL?q^<+rg@f z`nTdK2|o+=zuF_MB*@5PggPjs<&XDEt_p84nbpdkWplB9*T?ld)ZJZW#j9+;!S=o{HCq0w09yM>Kp0`zvFJ5!`b(tFf_A3)JCSDNp z4Jx92?z?2{@W{KYVocE>hQY{e5#^Ug#5;SomMoevlAJhplyym9#GxYA&q(&IyOO0ro` z%c~nsRScSGHnCpLYjcZ!)*xJa@}coERt@t&si6_tdsTr?)X1<;BG@LK{5v`*4 ziI_@w@y0ED=SwH&UgvU663OK!~wghA%6t%g2op z9PH4q!1D6m$fP%Y_9hmw_;$aSryO0qL7@NI7ttHe%%bL75*K>xw^o+D`Ehac8t>;5 z+oW66Y_`>}>HGfJmbtLR%f+D7;lbewBIC zX!DQL{+lgZJj?1Vc+?`bxF^0kG0xWGx$v55d){!P>0IU~Dh0*Fs)cCD&H<&g~qk=a!u{mYID{c>RUTZiZJcu};4)OQh|+a`rs; z`4>V_#gF#Bd19r1;8DyOo~O#vkOs4TrlAKHM3v*Hm@GuI=;UhvojCj#W7Oo0jrDw=Q8U zXcAU!IWtb)mcc#$t2s}cXPam5_2d3+OEf~$dMyJhV{5$5ZmaN1oG^|3C~tAV3&uU6 znBC=qR@_s$#$Q~*tE_(Wl3``ZWx*M$=UjKVoekotYW$U7T34$vt2t-u^47wM`+Td4 z-uZl1jt)A!pDSeNxcyYVg0~_J(+Gb5jl6`jvw0*Ch zR0^+o)_XzlY1@?K`bUpHJ$^AK;Q85s$t{VY>nq3K|9Vk*IlCyPL-vAI%w_@Cu3w@- zVSapucf~1!Zt2XNUjyESfnLGC>c_Kc=jDxiv8qw{(T7DmiB9_5XRGr4mA&db$A7a4 zv|4Bq8uPU9VbJ{M2G?h1ZGwKfO@ej3vYmP6?K{mW0uQUoZH9WgQ(pEr*PJS~ z6Dlo?Uzn4qmbNKdp>}?igo9(VqS&hbuzIgv^BuDb8<*&oc1bB@mp1YyCS`7r&tA5V zD3C2u8+uy6sM*^U^8#Zq`|ZrXO=RU~J3lG34VxzaE5ODt)X1unO#!uco7K~QE5dvCB3i~V@30Q%;DhtHCO;}uAxp_RHx@l$tXN5o09uN zEC1dUm5O1{(@Gs@&Y9MI$dyP`OQx2vs;!ky);UVQ`5tdM^93^|K;1O&H2#+rLIdB%w;jG?_5{N=?JPOFaR zGxZG9tl8|*>uzV+&k_k~HoYHJC9DvH+uV>d#mzyeQnNsQpjJ?b3q~X_uJUssUEbL=WG#_U_;+M zgWB%l)d>Z`6?;lthf8v)CMT2h*3D8-D$?PX{xnI&Qj=dJCek{rt3qTqqNusccR=3BTG-7P2RvG_HlO>fK)5!vW( zmpv!msepS)?9f$P@0#`N^=?kiR_tGKRwVzx3F*vdubc?^A9fn9jo#jS9>h8}*>u>+ z*bl`oUEQd*+xwovW3|*2N$t$?#gogsGx+kF>sG|~y|ZFgon~2Qgho5&sT)Wzx)rJX z1p-P=LE@%N)y(|Z&h!fFqen92{Vu1dO#fU{(f+nB_2AXvR`2GnUPY;jj?2RNbw89- z5=~7rO5(%nlr9F=NDs{EvNT*i925798C-fZ-nIXOBUSgCwcg4yYGLs~iQJDVruVdV zDh)@Fav4AM_%ptms<%9;Yf5liln;kZ?5wt$d?;qpB+rR6<<$jGO?dCMPxfS6m0V!y7YUuu zcO<`M{}L}&J|-4vn;~uFDkb%kt~kCdElwt`bD`cs%Xa*REe=S?5qW41Esd>{^)4KLdoubqyt+MLe4Ao1mlV|?$w47lwE?g~Kp?}udmDgu~ zxwBVY_t5FEy{T8jU0#2SoV2Vk;+fW-n4QxURyx?JM#+4Nh<>tfUi_A4tJW+myy47EF_PpO*|Mny!v02}n z;^YT&Zp;~QD~#?VdaOTJC9eCJWUTzj(pkKpYQF1Bjq2fVsk?{1+WorUyvp6P>5{H< z%a1K0PfcFxw}yYIXgiy`_4$`6kDlo+c-0sz)YMSm*Za7)>HHJ5lJ#}oM|d9QJ=mGjbj*LNFzzgEBD&{gs7-8Bo(9KV}>GxtvQ z>RZ)<;-BtW@JHQG4w+kfwSK|_u8V3JXEM#Uhx~}yp*m;w&Yl@^na51_XZbpv+&%Tp z=UwdyH*+g)59Gw3uHCOEnR#F+_F#4?TWL=WujD?B^7(uF9aV z2;qVkb$Q2Wm$FXy@jN(rBy_Ow?W#3rW=bqL%|0b@>h!H?`JdLy9@BcOek6Ly%A*%d z&GQCk-Z*G5x9{+p;S+}{vksKrh^#xuC-?fiS$^e(4fnT{+#rDr~*duKW8 zwtm!{7VPotK%?Hpo9AZqt`)FLVP9_dZNvh={Dv!KpM#p7x3|S;x%h}JwU=|w?LJB$ z8WPKunsaI(ylwT>JN~!xPe(@x%)S4Bt-Sm6x-d0yS!vTF7rt+jt;?BE+dchIWcr+< zTeMRGaaPrNnrBR8)9x%EXXsyAvWciux7Q2IdgmduaoNWg#;>wAF_Skvd~VQwt~TAy zHAZWO>6=cmLY1m4R%bd1GtUrCnaqI4H`=nfq6_1;`XiVIGe#^mc z^-?QqgHGK&E?T*czk~0(XVQwiut!}AG8g&_%9hzmw;4UGdc83)KB0Yejk?J780+8~ zVbMd8#R0dycy7;ZF3YpEU}t~%QU7cE2S5Axr7gPhA{VDGJkM)3<495OEd`;?hu1$X znxOCBxK8!as*IhXllu*ozi}t--R_s6Zn}BqPM7!REIgfr2KY55Ej-?K>{IQfpF7&# zS2gqF?Xio_HHhVYO_sq~6i&c^#IPwqeHmoX6W828%azF7+^Q(J;tQrzTF;3hfe3 zz9vv=a4h7qS;rCHAIaBbY-XyT`Lbxf=G2vaDLLYq*{YSRXj#n@SM^sfxN2QE`_VAv zYLL0#(Qlb66zo*=W8HHzvtB8F`n)h$j`vGryyt80hiM+I=igRQ(-y~-_UHx>md$lo z0NC87@rLfRG<|Brpx54@93Flw09>J5YdU={lp!rZb(|QnXz$SnGk;xJoh&YTyCZ6c zSo3|AQT}y5$$`8AlO|s4e_?H?n%4^N~+edu21NhEMAk%oAU6Z{@-d zd=EZt@p)#Uoa#GZ-aV)u>tMcflD4CAam(Ai4Oh+%-s%yYcW|5BM-lIXwt@Uc`y48h zrZb*q?%1OO zM*J4UW)fmN_|FRhz)XeQ=f$sV1UUPA1P$BhaUL8OBRuglB>^aTd~82~NZ{<#ut!kH zBluM!39ffykr z5J^bzqXdC4Kqm<5RlIx(ztR=(1T@%rP%?c2FoWHWc>ITH0T&<(dpjY?kH1kMunOqG zt|P?x@lIEP05Ah~5flXoYzEe_@jD}a9_%{-DMDJ{CGx9cKMLT-Yt%c)FN}R(palCk zluVxlEMRvdKUtm|P=K9HNbx&je+@8#-GuYOD;EV=U>58$s1Vo&Y+(-|KmMn9p``%zG>?2SvumQ}0-HH6@Kmk{PccM{uq5iqpj{^p=wD04~a?|D$2+ApS1L|4i7^V4r}J{k0LygZ&2iN&n+Dp8|Nh6?HGi z|7&3z!*1dDKLoZK>`PGcdP)TgVGkic>3{N?k;M65=lDMoHvB-n#qmGcr;4zTLCN%q zU@q(~MGhHVJDf#d&R*to8#=b_~Fv=uCX{T2Di^Kk|;zxh7~wl3ly zaQyENdphhwC|TboU(;$WQwJzm5ND zj{kj;MhWQ)pk(?aU;!Jy@%+p9-^20$*!XYe_@9OJvylEGR0wPXwy+10pY-Q{8~-;s z{`W?jsYrhm$^|xnIj~%j{oCe8^C_T@qZ9(71*Uvay+Gg`LMqrKk5Jf zHvaE({O^Y}%1D12O7?d$u!Q{{`APq;0Fz)J;P^itwh8R#9RG*Ho(=mlR0O1fMX-ne zVfnuZ3+4`zgo&A+Xh8mqUd?Dp&~n zJMxqM|8L{}Hpl-yNTZ1K`A{-_BA5&NHS&}GUk>D9XL0<$8nz+qMvni3VXMNv02KsV z!2;Odke@uC|2F<>IsW%Yn(0V?21?eq30T4IMSikB$Hspy$NyvFzm4O6Hqxjg{S~Mv zNC$SXf8h`MQ3x4c3PqAvoRH_Gh>7#^5^}s09%){4Vj?faOpKSCkmaRtN%2l06nH5# z30^8OftMmMo_9TAhNg@0av}eE+HsgC31ZG9L~s+r_yaN`_#eJ#F%cNL(u)=7OY;qk zjPeTgVbY@5Y?_}}1kKyaC-{FA@5A-{byT=V;Ec^B^0*$v9TzA7w^H zu_KtiG;bE$CwMFks{A8)YcmDS8{O#ZQ+yCDD&4(Qk!SwlKw&WAQBqwfxp<~B=y`sEmoTK=^ zJxniOW(3VA!iN?T7#ZRf;F zGBA$$M>#(1kgy15WMm*alorB_3Sj#Z1T8T1pVs{rdPM}&%zasC9^NO5xhgN_t^An5 zQZaiK#H>{mb6QD4hL9&F6N-c?p+y)Ha|uVnhlnH+iNnNo;w8C;HxkITzuz};DgYPxE)U zVE+zgZ)pFY;As#&`X_kAK>z*;b_p?Y2|NZ-`Nr`I@(6JYbBR#MCxpL-u{y`<8mnWh z?6ETO^a}40@ZTtSnjBf;z*80alYmD@!KjCC2|SmKf~QFI_WwMP?IYVp)=vf@)V>Ya zf_q>VI0abX9Z&%Kfg5-Rj6elg1AYK5umQ{gRbVPO1iZlufSx0EfW_bu&;%tQ0(=JJ zKnj=-?gABX0tA6KU;@|+TtN#k0GB`<7y^7C8CZf_Kp7kZexM7C2bo|gXaEdw9;^gk zfe1(gi@*ag8x(?2@BvH$Iba271ty>p#DkxJ0@ed_a1BfW2Z0yp0OBA6IDm&h0~CXB z@Ci`C7GMLa!Awv90znUu1AD+S&f}NF$8r1Q||{{acXx zTbS?+b(B|DpRQ{8RUnpZ(;VWo$k`&Qr)a%Glh59GT=?gq(k1 z1s`J+Zwv$Y)&=8|!2JU64FmYr7WV=I_Yl1L1bBilkO1<)RnQK84}Y(htdp#dtc$FN ztb+!~vdw@eNB~y>+31A-jRMGde@K{DRG>GDNn6Q`ASdBuao*8>ewbJ@BO=%lq#YO< zi6enNfy~e-OwvQx5wXO`lL9A2WK;yxE9B4get{_OZ*if%1QE)_imGp*PZa9$LK)WW zc)15K#8+H&C=EyfbdK0ZyoRv}kZ~35WGhBPcLy{N{Z1+;sJtKum%K6Sulj%L-33Jy zbc|0}EJ2izdm{_f>nVOQ5m@sk@ac>W9qG+g6hCy9FXomWI1WoG#PAb@1bhudH$y#8PuO{=xNZ*WLyN?4TudKn zKoJOo-Hv!qG7evVf3!e43}$xY!Ohg2;JTc5tBu1XA$>&`18JB#%C7*34VjeS@pyA13 zDrQGYn87P!);WWiiDw~IJddg2nM57;LJd4SX<=TagJ&3BxJjRgV+DGTTzy{T;((SW z!BG#~>bwI(nZ($F!yh}Ef9%a+N8>hyp9kd#?zukjSwp`-s30=9saVN!~d)ML05}EdIP({&~=PWL;(~l~Xj%%AXnK zfhK!IdEs78_{aTm3m|vNn~Q&(Zy>q!L+*?Wd;d5l+Yi?0UBf?a^d93Mhmw477!nEL zB<0*7{NqOMJ0n8Ij@-#eAy;-_kKCO|i3%G%MgO>w+mC--bSS6X(HkOXfd`)~BMUuq z$nOt-+b6s6HrXqzN_g{07mL4}g$gvvbh$r=>ShZPuN1<4&u!OR(7Gwj<4{HbbD{mud==dC= z;}e8bCLpker-Qt6ktPHi6X~PKk90iS+hU_(KN|D;FvLe7hKBXMSo~`~QhFp}y^zBf zacms5f#rj}Fq9L8EfB|)fz?QB$o53ST8b1bY-CPME)aY%x+s6N*eyqMpKhz zYv9vX6KG*y8&5!#k-m!>Nf(MzSn!e8NDuwl4l<7~Vlb7&x+wXF?QD_We+dFm*kQV9L|8=`n2y!jO9(ma)F&h0D_1l^LnFra? zQnC;Kn)dHK`FlTFAP)upCfhvLnm?~d0&^Y=8mt|?r%$Lnon(UlGXZyb zH`HXRC9Z9$y-ItX_IB;P+UK+@wd=H7w7+Qo&=%H_(wU*7sbitDK*vWXNN2Uq2Axcu zJe^ZI7j^1&T6Es(e9;kNjAu+`s56!^d>CxTYQ{lEGv?WF7tR&)O!|I$6Wva86Y?F_ zDbiVLxW;g+VVeoBsgx-?7gq`HA)5A@F`7x58JanoJX(@krP}&BX*vZuH*^FUY78@m zpKh-1Dcv=CCi*f4l?K{|hYh2QHXCIc`OBv5GUSNF2_@nVMluI*RV7l0J zmFW)CeWuq;@0h+fCCtd{1#@k>J^dG*S7WKhc`Z}z4chKHESyD$jw8dB(Zrajo26^3 zze)dz{-BYl@igNw<6+}wQ}RKd%zIkHMAJpfP0LfuS1Uk^r4^>NS!*YFJG@; z@3X-vqnXA}O)SV8T^M;);Qz(YE9h70H|Tfh_vm%>$LPCf^mckDy_^1y{*m5KAE5uh z^q5COKto7FOhZaTRzpF9rlF)ULt~Z(T|-+#Ps2#pLf1~$T^EHVjQW73^PaIw_pt5^ zJ%(PB-g~_kqc=wVM)jtzOuv~D+efbfD!o?wvGz2bVzlpvjtqmwP-eI>Sd0jGbQ>cZ zUM*r=VccOnVZ32{XNc%Z>MH8a&{fmb(>2z0&~?@I(PimI>u%QFuA2>SUD2I@=PKgr z==w<+&ZiFN(T(;KXtyldOSF&1xzOF{o^)S&0G&k-qeszK(bv%N_V$tW7lO`1m!iwk PXVFpCzv2J)9{B$NMkPT% literal 0 HcmV?d00001 diff --git a/zlib64.dll b/zlib64.dll new file mode 100644 index 0000000000000000000000000000000000000000..a43d73dcc285c2c8f5c7efcd20166c64d2e92287 GIT binary patch literal 74240 zcmeFa3w%`7wLdK#L5W61i6vTas7)JflMZN3awa)LCJ@AGs#IfxF)9^IW+0ST z!kIBSZbxbL`e?nC+uGJ%z18;T<)OA_5@2{rLaKt^YCx+q3@E-JfH42>+UJ~kgkZhb z-rwi*`+WX<$eg|R*=O&y*Is+=wbxpE@7fzyo2(|2$%el~!em;HC;cnuzhC@w7_Y}p zd||BV`J9~>uQz*lUVLry?X86iTNd2ba?6hk8*jPmt_8lrAKhBm;=il#_PYwDS#t`1 zykOp~mya1Ux=1hjzW*@QZrO3yMaJKUqw_D?j`)Y8O&4wB&$IdSFSGOcbIXne7aiy6 z){EZa&+!*+<1&0#7Q4yx2c#_2 zQrp+!>EPkiuSLTXrDmBBp??i#EpfS7PtmgL-y*~CxRz3vZ#LPoOeU|xY??;pl$%Xc z5jPc^P4fUs@?V|VG&dRfZv?tcrZoWVO#d$T-P-2E%d4Kj4}nN+Cn8AuSBTbK-ZJkN z-z_H7wKw2JH~t8iKjAO!Upb(^T+3!E9fcQ#sF=_*HWL8k>%M%UmXWs+Z8eQXKHwnz zAM%x7-qPCAh(wMP;KoGdoI(`w^S6xLcjO0OBkQ*lan!hdjhJ?rmo z&u$lw?hhXj?%XYiA=_EuL5G+dMxh-;&*f9~XQPMLKl}T;ZW50Uh7aVjH~`_!KHgW9B01l1 zTi=kJZ-Q_sUKt9UN6$s)iXGj2>}ctWFvNI#`u>F3v?wdJ%v zAAD1g_ORZ#gGoix_&YT_`d@e}GwoZMy;RhNGUSep1Yj?rR8|g_Mx>%be4mJ3jUQRr zSjyjM2xno|AC8UqE~|5k9N=2A>MJThSAlzpM|aDi zD;>z_yHq^VYxNaku;+p!5vviuy)7KI3v2r&HvVC$q)+Kh_}@@Y6bh>@2NRRkWkrST zgdF}bi>S(7ayCAb!%>H@whtkR1sugedQ7yU%7>K9XTP|i5JNS^Pb=AYi-&EGK98a5 zQMzpem#CJ1?tc#hcXICznQa9BnT#ohkHmV1tS&5&)wV(mMD{T|CItS7@;2bTiH3cl zvi^|F!m09AZ=g_Cy3N+DvNBY-?64fV7R)DfU(p(T5xt2RMCc(N(YTKnDcaYX43U}t za=bm#Yxa#ZN?@-?kDp2;*iioo-;~UfXnv%;V|l^I*so{wKV5Q4X3rOqlu4|t6i*f* zW+qcg$3|+cfn^eKtR>yOu~x7|AQk*=vK-t>JgHb#=NFX{S1Ko_B74<&MTKrQD6%1$ zeJrz>5U}tnet<9D6at^2#VAe)97KRsPF031LSPVK62V3*OYN5l!G0b!`Er@Z8?8H% zNT_bFlCTP^p6B04S=3tB(4x`KA&CtFYAg7EO`RLP#9oW;eS}(6S;tsAvPvTf?>@#kU=MEC`CfT?L~M6H7>-)4Jt)Q<@|tpe6O2Zjt+dI4 zA5Cc!{Ml??Q9U3n%&oNP9d#jf!@o@_SJ9}~e3W=~F0 z9{UN(_{cRRR1XCczG|6W15A5RW`yXpl)W8&`CmX8=9?TctC}pE>kG{*CQMm@QV>HQ zlul{GbLM2iq2Es6$f}s$S)3Jcl+*mK(?6(wK6(?RU(XK6#0nmzX_D#W&JaR)ZE-IyT$P6P3!z=2VnrM(q^!vdZGxAZGTO$wKfk&;fnw?kX~;<(2-sQKryR zoJvrJa?62{x7if{LgV!}ay+**EOP@z7?RO(j>;urc zhm{x0NB4-VeA@ZD+xI(;?m5KD-`~v+tNp^0>No@ z%pv>~W6VP^Dz|mnM)S62q-KqnI!aHa&+%zCqi<>)Nd2F;ST8FtRTe=*sot^%(0S!# z-({!^1YLs`*m$SWTjWRbd3ycy4dtabQdz?^pCGe24mQghJ?A(l3Q27&1va5FGR4+# zv|}A&5AVzC2$KY8^v)&hLEd%8Ez8bVj*nWNy`H#Cd>q0e+Xz%D-Ill&!SLXy+$~ZW zXTv_LvbAu1&{1L6`|IdF=eGWswO?l2!v}2Ot9S067(Ikp#`xeYVcqpJqi-Sw0dI6S z0tOL(=P-vCbB0?8zJ|&TR0x4EV#2!e0tsy|t1NA81?{+M3jE(ow)#TRwQW&>=-ei< z-LiEK&=)2goOO(sDYISCM^Kga8N_bzR>BvnDMdz^)q#fq$--LOI0Ms4Whw6qVVzu1 zR#Vy%N>+6dq1)~1S(J|&P@UV^Lp4T!3m%9;NckB5#y?)iy@xQF4HQuT?eh?qs}q6{ zX^ch|3IPcICbSPz7F8g*DhvFj$x6?YP~mt~C^>ty7Dm5g)VC}8BD&i6$iw=4m!V63tjbtCf`KDDS$0kA~n8|HJXDzfd+Y0>OjZ~IHz(|yIlZ;X9#SDQVe)?R2%y$21 z(RFBLmU7bOcO)mC0(#>+3-irAZ=-|NYHhxWKgYkAfbsY^YWANUJR}5uix8i#gupKl zlp8r0$Eth#UqF(t%GPd-XE8Cp8ywu1r3_j9M9eh5k*cO16vV~8Sv+9&-{6Y+N8^jA z)CDs69>g*}#3|)xoydFA>c525_<-Q%lHE`gLAWZC(cMU?X%?YPtF?AVqah;8UC}{M z1z|)8906!(qY(TQ0ai0LxOJsHQS*NAs zot84@w3M-@rGNt`Ymes>!=t9ZkG|(T?=1wVWuvHN?8d3?;F~M5#iMUZ>Wx#05=7yl zjo`B}E80aZCuHli5c`m?;j(`5H|kQca2Q2!VRD#mf&`p2`Mz9cdxgMu>SYqrsQ=K% zC=4g;d2N!l9iCPSx=VPEFf#E%%Vti2!Z$LwX(7SlIWXSuo=NV3R3Sz z5Mb4k%&x1GLN-(M-h07sv;f{ntC`Y%q@@)g4U^+6M|3t4AX^u* z2M8?LS>^Dun;jl&FYy*EkLCWT9Fp7swQ~p=JRw_+Y~3PG4`RB5b0%I9E&7BW#{v(X28t=&pb zLKW))LUU8ZR!1Es;)RDZ$CBODJzK$Ay^X&hkxdSbxnP6IRBL?`t5#{RMOB_cDy?Am zstPUpc(P4ZXtBq`qaw;0goz$iMOzC-6cnhZ&;nak0{oXI2~}B5zm*FCa3R#U+W6wi z0=Abg*dRzr?2lBExADO>cxe1&1C<20>%>q8t?|7Odmx$p9|FXMwf-C4kWE;WD>{#L zL`Gp8#w{fY$@L(?%=He{!rFNjd^NwQ0KusiFSwN5%a%5HLaRv&(P9mMV38OjAbDrI zT_3rH>W@Sg_cTH%+bNY!wF|*l@LDRJXNN_i7eR=5rc&s`)@k8#bE$~f?-BE0nuof{ zBCHk72%E)HlYbr}79(;!BCz~uZ)P9@)shyOj!2dffs7)KG9r@@$u=VAAYw-qb|WFn z>*{HF079J@YNsZ7L#s{!Q}Uytt7k=l=-Mo)zj&13XMM{rt-5!fDN%LrRLp)}dD2d| zux`RE$@TW4G0JAlC^e8MNk8NTNdrqjHAxKxXVg)+UHxvM3IcODNr>9;fqq`BlbA}q z2SY-wbxWc6hpce z`ys`ELM=9nV!)vm6DbBHYOxZE0gGDf5{dzhTI^hk0f#;K(^9f(UE5na-OlYW^KlrJ zW7cKkSqG=zpK=VkU_7e|_i{FzR6Qj5g*Iq^0B%hTf%9;7j1za$YW4`Bf-SBG-*m2{ zB189CiJ+YyyZT#}6G!%9J_?OLFX{{u&Z;q5tDC1hLG?~~f|Ek77UlWO+AXZ=KG0;wH* zE$k5jjCE?gwpq6J$=2)ZqKC0GFn7``i9J9M5twPYT+1i3>+9G9?er3B9|vezQmYqI zP#l2zx?7r54Ru)cLKrt`e6~XR$yVA($q^$W9mYG8iZ4T-lc`Tsx=;Ltyfa*zHSTag zs5o4LLiVm^3IPU<;bLgXwnu-Avb7|dzz*OQV}w1k!n=Y0VlMlZ`XYVi%K~?AsTG~w z!L5?YU#h&kwj2`6t#j()R++snIl~Y{srbv=2^YVhvSgNv@kM1v+YZslxj-yiTHw1` zt50HDg_ROM{stjHa&-%Tg6d2g_r zsz4_i4bY&G*e(dckP*X@6SLR$=*=V6`TK*(=J*9p@+3M-Lo5WH>)XoHT5j$kX3pmXlA{WwiwFUilz$H=0UplJ)5&o zp0ou8HVEsc$>4>}!aCl0q{D^!5ZYr-JC%}i7w<{emc`SULW(IYU3}*P9^YB)b%K2& zsSNmR7(btuI{91#(B8d6Di!`td6DKz=&;v-EExL~;tb5Iyh@oVBmgx@PKCz5u=YX9 zibal1)-oaki9hWJtWB_(CK9BbQm6zotZ)^=+CbqThDnnWfawB>$TVa!w+b-bcH`}R zg@Y$CRgR-5%u(4|(kT#gV_0IZ(Pt!MnVCXzni4ga@v<2Q8+6k%g^vywmlA}|CkX|7 zAfYjjP^4RLVv+%^R(QKe9rAyrzZ4E?!r!IW8+!s^r4N2+xO8)X`hN(woOuyt&}2L? zNc@X4FHM&pZ!~C(z<*6xJKmh^2i{TY6`38A>JK3E!I!A=VaOyjDjbao9Y#0VKtAPU zPwZsa;C)SJB^sN+z>WTX=}4U7lc+vwTMICyqBL#!UwB4NJ0hzvYLnP2nXKZ95i4Dh zsx+Nd9A=y2t4?DTKPFZ|_A^qMtM!nvo0HbF5{POILteG{uvc9emDqkMw7?Qt0J_=B zj(S5^et!qdU}Ta>XAPIqm|F_9M|xt8JNT{;$kiDJnXdmg8O9Z-F^nVHXpz*XiM&)U zEi*ovRpmaU2!RLj%lHr~<8K9}gHn=Q<`sj>{8-~MqHB}EWw1!x9^LS%!Aauh5tkY7 z+6m?M0^NnP$)xLi@#p>H1R550p&ekn+Y`bGMyaX7G>+8G7bzf39F8RF_rOR zgw8l;QrhfEb0&Dw8a$-XwdRvLyCUZhVp-HYZFmrWlAN1PXIvN`=BJ5Y>FlbQvn$TZ zn#|8|rZt>r6`#(tiU$pz^)`J)Jc}`cN*im=O*-G&gu&M944e6I3yG(+-T)bCwp4nW zpQff6W6agF_!eSS;1ZZqWSUd*PM=e@@HwRha|-NWHQeAggXR=*#5v_O5>Ys!6aIi! zH*`39_3DeXSkk*g2#mveb;LmmfuviP8vb?hNW9?vcat-?5ZtEo0$))fR|RsVAaMmO z5}~aeW9X{Yf%t#8pMob_e)hF?5GV>FUX@wcsuMrza9 zXp_vW8qRbETGj?$cL2)y*ahG%8L!l*374^*c&RnXSM^n!qjk?0HUbissC=F-Vtwu( zsWDaWBs<72XkSPtStNEH#MkvCT~V4KMcJlUC6dwvtTcTbm?&33KtDwesWMvvwNyd~ z{DvaRl47u$pKHNV1Rp>!BFeOI=S!24BkJ7~)VuR!^=`}&)ed#>WYWg4>Z!r*C0R%J zsMS;1tf}is$Na)&_<{Dz-2?4~T5b1_HS8`QybYa3o)LTQHE^FwC{TB)i_4?Ce@rm# zir(-cbsTgSNzoMsR=#Z1rzS*GS{U9wP58$r?2VG$+`5W}itI2f+d|-VYJt(#ZHOo* z5-=CuFe*L{UIkt2c}kA(08ud90AX{055Fpb%PjHjtcM zPdY{-2GVz+dA_1zksD`3c8p8hZuWr?xB-3NUivK|I2!@wr6K~oUIazLx@;MOJC5{n&u zI}VaQCalO2|4h`TeCQyAmy-qtR_T|xo1GY{PAEfmp_9NwFG1DvJVK%BA!R6A=zI!c zOnFr(lhp!A zZJsJe%8T)ZNo@mNy4fq5+Eg6aCx&KW7L+A1Bqr3EZE6*4bDIYSp_5Rnd?eIXEnENe zzyJHcAKlk~Kz+C!MQ{jMKdEG|OR8k6z)VS5jkKgnwyHr-Lmi_ug{(O6o~%|iOX^y# z4W+iQ*9dB5MV-mZ_TZ(1-9zs}c~A)e-kAlyHoR>x`R>M}+2p&U7M@bKlE%0{s{VoK z5<1gLN&PL+*5;~dkge`X*QBcVbEPSShnK(*Io~IWEGK;r+@U}(G&Pj!G)V-7Rb>MP zX>)I+id$=747z(0wR<}dS{VI1l$n|?^-r8iWAKD8)BHxeNxngj!{|DSBq68Ykh45Wy z&{giHa_aCJMq}U3Mo%BJN#+vvb)by>& zlDR;|UjIzepZIS`5L+>{y@=vWIxn8Zb`@fEahDhaHP^Kx7{{c@= zLb#s51X7?Wg%r{(tI$4Jl}czI*Fy8xZAJpuxN%LY#uE&FS;~HZP6y=52@Cn2aG4TB z0{t zX*I{C`DQztWhYG)rUY5dZp~L8pb0m{(sd4>-CjCT2$H*cdz+aF!5oB?YCCjN(3i4Z z_>|8^(I+v@Atw?JAznG) zPlx1j!;&q&vtP9EHtvdk#;KP;VAXT^>~?g|1zVMUC)HUPJDh-wSuRptkIdQ>IP4Yo zHHvf+;)ou!w}xgvvwy*UQ7Uv^WWL$!KMTw{S(s)GkeS*}g`lyc68S!a<+7!deU}Jp z`4W8EVn1kMd(;UziVelbPHWK&trt{-BGC6BReX6tBEJG(0vqEJ`Q-?0Ad*x{FBIIz zSS6ZP(+oX~Jfzn$mTDnCH?7hH^huBjyG%(i4)K)jiTrnY0A@B8$!I3o?yA~fAR)ZP zKV3PN@RcerkYXX>|E98P4Fw=xC_kx(7ecr2P`7$7y~J2rMbnqhCaD$m_?rs{GCq2S zv6D0K6Yh^l3$+{*eRx3;4dNrBaI3k<5lA6WYjQ?u2vH&J@ z2rO*7w&Gxw1!gYmM_=0uq}SM|aB~BzDNrlxr|<;}T+qjsfh{~r27NxVSWO%Gslj{k zrx2%{OYLf9n}IWuqBzaygX@bJl`b;K>a|ejgBKTg!IcZ=tS@$e`5tKl*v>&P^|@pY zF4-unfucgZ0d09%j~D)^brd7d_!nrExH(WX5f8AevsYkVs!PBq1J=HHLi;J?>(Ev6p$!Ip|#XAqV7Foi}7 zKK;HdgDGkjy7KG6@vxBDN`)VnBVnS?kN+Sa?e}8xhO|cP^X6CmGA zAc)L^Uuwy_AX+XQiR@F&{+T2LZuL=b(HQE>#2uYb?S4b&=L^w4oP#Fvzq1@V>4*>{ z;Tjx!p+3c6igdt6cr6G3E)YZxYmgz@_c~EQf!^~FmFwZ-H*~@eB5tgQ1eU8Ttv5p_ z%|6wAYcS$S>-iHJf>$oF(SYe3nwNc}I2HARYb>cZgJmF;MsLXPF!E=!j@76zJ%d3nX~M_L z&>@-F8}KN_d?Bpej62gN8)=cJ!I`sb3W`!J@6?o6-r0k!<-6f+(paTG_ zxq!`SBZNoKAwqhP)HytwO&y5YpFWM<3ng|Ey(#|58~2g_+=vBqgWOryyhvYDGR;^_ z1gXLb1yA&>rN2mjgLV)CO8sX;-dO@n+7tP|#S_9s9BSw_v%}yiTo&(PaLazgurSD zFuEQ9yCJ}B+c1LKK=o}9V=1^0e-5>+Ky3qCZEH~5>eaTn>UyF)?Fefc7jO;i>|#4T>=bA8iTnjd#pq5=O&PGGeh+&E<8yd_NnO7t=>oVXd9VGd z7Jv3;E)lf|Ye!96?6Xa~#YkB!tR35atazED{aD$`T;VTaC0Z=8X#Dc_V@-a$_!0?e z@r&D!HB*E{!T9+0W7kjwh=EsQS1r0@69Cw34v@$h3KS8xWH_~T>S9=++t)B{u@HO# z>F|=PMN6IU-0%@b7GF1E#dNO7rw$2|)nwX9Vn>eXDd%4L}UJ0dbyCr!fX_2TQuR|Z=URGH28YoTV z{{*E+xPpE(j++kajEXU1GzwkW0v&IFx@Q0OfKQ@X)FUCGuE% zJz9uDlY0!YQKy~5>xB*%-J{%!%(P(7gePtOF6Pn?#}agDGR^8jzQ{L?x@U9bOo2RI$KUt8CyhyblU=E+WX-hu8%N z8PQ=@#DavEt?y7DRg4ztcEBYFr{C7n!hdWr=f_gu8;OvV2 z+k_-bjRsKwzNB|!sf9UZ3!wT=fc!Em`XTbM>kC{TBeM`(3s~8#dga(jUk;X5Lhv_8 z&?PAdi@NNXzKYOxA7ROgQI?4RT3@@yf6f-z(Lh&JsE)$T;9~fz0d)?EZDN0mw*CnC zGEbbcpulT=XUYP*SG~=F%veLhfoN8Pmv!@w@UR_;{Li3Io>E=lTwGx0&M@Y6YXA~t zqFq`Y{#@)eC&HgL+P_D3eX`kV@{dAh zOUV%#22#E}O0_FPcu$StwDHT?8YG`%>`n^x29j zq%XO?*+}0dy7owdw>SC-$d(o=U&m+8J;66u?qz&TB&C{iE~NlovwxKJu{AmnG?geD zX#ARduo|Q*P{7C};A7!w_~?W#6y$LM$Hm_mFKQTwsi;Qbh7?z_8{6m18S7WM)>waO zOIXZa9(eG=GJaeL>_?l#_A+SoX&zUW6)l8HeB#kNJIj}V-H?HQ_Kwu>@{({j71!&twC8A zhpJAH{0uenydunL08#f_)w)E6r*GwCwkuLT-qa3V<9jML*s0B>lG<h}cZVfQUFh3lG4Hg+x~2BRtrUJ|%K32v>^8(1+Od zvjl)FGMzM&>7;=S74@|ch1mh@5f%d98Ansp-IHs{=X(kwazrddEhaHCii8g_Qf1Sk zRmJr5vT?*O+G>Nlz0kfug~68C$v;(OqugxfRO6@t54#D1@iRq4ma_VMQ9GVWG?ymR zg(XM$-aQ9jI+8xUSm^XSkS~-!-)N{mA1l?aa9*pKgcV_JG8257vx2@0DH#QuZuAyo#kO}Yvu@Quo#)prMchkS1OnM`B; zN9c?>=nOG@(4uTUSWz4uT5qlA(2>IVm0ezejd*N6YA$a@U7K^@pywP#xE1=T~o_@6lzlnKaV) zDHo^QB}>ko&XZ!w)GmoKLY940l^pHaqLKV z1Szk4inji41X*M$n?F_tCuW&3gMf~FM(W^1^2<`I+O!0lGAO`FMC@4MyGYBqQ0Od% zWdMZVc9GC|34+QHjmTv{j!C%Z9{du?*Kh=3%!~;CwP+sCfOCJ?E41E+@lU6Gkb#x> zMQO`MK)myJ1aZ|e@!lQE=99v@Kt+3;{OvHr!Uy4#r`}gZ!&y|SmO)`%wNNapS|+R_ z1s)(=c6RF|`Z)QS7zyy~#s`$8)BZE*@*MlRFYYeL&0M};VPPA6} zgn%2>@t*xN&`oP-mdiE`42ERtH@HoLO6!@e3mXKbqARdpTUfi*^~$1~M#S=Q)NmS= zaLRxyt#y!X0?L8+NaBl2U;Hb!B^+}!DaRbGON6y^i>}m;CUJe#DxRT#?;EM+WCsgt zdpQ)Y!!2Q9omBK4==eCp6xqyW=+eN!#h}d6)`SCRDCvlL3f$ijbrQnT2DAe*M)ipSE8<5>tT^yhjEX=W`#XHlxK2n6FO-?LzeYjrq6%$zR8_2?0_(T zRBLLe*&NT}q{~SgBuxXd^}95vVzeJ<#PK0RBt4CtZ^gKx&-7s#FB$REF(Z9?KR(sq zQLef`2>cjPH>>g`$2lL!BaLwkZhn#oNdXwyB;iDtLdH1b$i54r&}onhs842Ys+-y49v~vFtibe2b*k9Go-b3}a3x z_F!e=wG(bNf0$b4@GyLgEz}}5B=S+^X84pX!rlx_d|Z%iBp0n_ap08YrpF?;hq2r6xPiz z`i?$+(2$D^Sp+i0Q+Tb3gFgi((i(%KPr&!Jg*@g*H0EB7Ytq0J)^Xmw9~;HNzHzjO zIO(qg2dsVC?65isg|*N1+TxHl9)-0#z3drYA!oLFCe8{z;v7EEO_Gz}56_h1;35AN z5S$x%<4DA2P(PE!2(7P@4I<&1sLF)0DMO;<&W9XAIHSTl>rBxuFCL-Ekt8 zKx2*YCu!mL5$5%29EVgeMz$Sk;qJ8X^J!t?wnlzZWEo)y5y>zyY&|``)CjZ~f!mEh zgAusi2+T|Y7O%kEKh^Ep(pu(W*CiRK+Zj$SBYk;k+0W+Tc;27M_6z|E%Wo_WwMmvV zJPYZ#uyz1uoP0<|J*a5fysCqNDQh~7xN*=G)G6d+*g!sp&Boz~n15cm)?_NW)nwZH zeeHSK_1crtmi;glrugu`_ve{R7a~2~{_TU(3CBReqi7 znEY;S2{jOxoO|7Y-M;S~>2dg_BR%Cpa0ccAI*aQ7dUjyYxoJ|bXg%|n{>@(NCd%yY za>P!6MNwGUFZggM%^R)bWb0>uDFug}Z8J(m-PS&w7y9L(hv(oVFp6m^i&|s4iG4ILV(2Rutdkp>U40~}z zFP1n;F9=m~_VWg;_F8uWqu76eUNVbaCjSR4Qp>h@om*n?vcRs=eXY${ibEiF?y#a5 zqmUI^AtQY6cI~HHTW=QG4!85KI-U&vdgl7#m-BkG3R*Ab5H^iaz5$=89Jeg`o*0^O zGU+=VngPcpzCk`rTj8x@SNSPQfO4egr0m>@c(R?Z@ojPUp&9%WAVG4y3Iu369ZIvn zXpPAU3>X7|$gay2qd1FTVSsr=_umj{vPf2E)JD)zbsAO|??G)o926j$lNBxcW_lgG z_&8=q)TP%OzbGT-Fp{(NfX8*DbxtkjIh^5wVHukTv(S;ALUKjLu#H$qcO3sNRwDHs zv^RP-^5BMSJC97|+ru&P4|X07*>>U+ z5YZm5^N1X(f)T|BrmbdsLgjEGu6B4rRglf#FApmyz8mzXCZ^XDC#do#Ns3#O8 zRUC2bdbPTMn0vE&L%G54B^6vy+1LjCI~;RvFxc*FIC51?P(}R5z7nx8B6?AXNwugI zHnjpt6@_ZWRJEd5t++z1C|4^aIkbv&U9!5W9T}0K0e|%+-H{4zC^-FmLDc8Q*}N_< z^FSfL)%R`XxMSrv+&BQk9U70*yN?$xp2)UwYn)r1ErIo6O+vD9FM?(fn@}>#B>NgH zBqTpT84p~-sgRDjAtSKJcT0RqA>|m%DhCKe_~~Uh-*U%sm^a`E1-o9^-Nm$_hHsn@ z-PEGH%gLOA7n(U`8c)>BDY|_+Wk-R363&UKz&SD8+e)`-X*F<9kI752)rEHKusEAV z!b3LbMwJARXEbP8#k%9d9P3g#g5PEXe9qE-PbHS|Mx_LP|xd|c~p17X82Q0#7`L$S#3dd z267Oi#xY@NfQSrk_MXU25e!6Tv0kXpJGnnB!F00& zvma!P@IJeB3qQ8-=sp&9_Vh=sJ>jVB&hCk>Et(%N@)Zfw?7nfe>di27xlP2rV>h7^ zXi{xT1gA0YQ1%Hp$VGJ3PF{pl#8MG{yB1N|k>gfxg|_d#SPT|36mK71d_U3&>qS^!0`Cj*zX&NIrWN69gD@aYIc$ShV)QII7P|g{MrLg5K>QCxRxK=k{J0`F3djNu0 z$}0po+IFliPzv4vk^(5zD1!@0$PC&Udm0p0f?_lw@9SK?ApD(uW>7%41`fu9h&EzZ z0f7b*fF4Gb^S&H1I)6JH8PE=aDABCZt#>8I&vH=B8BoIEAQHb-HqcV=WKHON^(L;EmRaLZUAg)?1aFwl(T2oL2DM-Zn`qrr5E8ykH6pzpBs%t)pvu8I%NXy(&oAL=VbQvgU`(qCRy&$Zq2CVl z!@_NVw)L?u0!=xQB?J~jKEjvq#W)up762NPq)GR~I2OAGh2aqM)=RMVA}T0F?lX*A zE5XlQETC5>7Yn!HVsR6sTHkc~DIyn(>%oE#`%x>oPDJ2hkv5y`hZsQV1PBRkcprNO zY4E9zPQ!^2`Zx3%gT)m46Xiz)U>fDceu*^9%W$bU2CXNdKE?lTLuZ@;evbc*ppK-! z1kDv+2cQ`cmQ#&tt(=;fQ6xylFS~T;o}f{engy@ zcc_d+9nA2Ymfg}ZU;r}#DDg^Mwu+W{Q(gM zmxkT~PR;-grwTWBLWpoDgoe*DoeMrO)F z4hXd{a|UT)RvQYnqbQGR_NZ?79|V*B2N5$dGj1j<+3E@X3)Luv#IvJsU>1UVEq4F< zzL(-F==E`}!+L!N1{l(pvORv;W$5|pbT4ev+rCK-DrVdqw9E$|p~P`-$+_UsIk0TCXentxAuTxWQ9E zF!v*vgQ~n#)od%Onxyfki@&(Ct(wOGW}uSNuE|nlOrZF$&)I! zF!~OLu}=1LGsymp1;faD4yxoiK>L3i{_;C%FT01oJP$8DjDrT4Va%_EG2h*Q#_7g< z4iz7h#=s3d#0R)$$-g=Uaa|HN8Pg^{JThR=moEp_K8&{!`(Y{5l zRcFCqe?7J{d{a~xL!Sh@?=DE1<)XS=iaw1aqH5tQ?uJ{shka9Ii*dgX-tpz8v8;?; zjrwRD*0LYg4$yhVrm1TGvCY2gZC6Ga4rLG;6*) zWzDCG+`N*-zea`JQ|Xw29?nlVYa-)$t?WNH)y*{3oQtN$2C#U5d3)F^a4b`d4h)6~ zGm|(r%pXR;KSM6ESfW7idQ9BzI+1<94kPetVj9%s$1r!K^-qdFiLT{!Eq~KBbQxxA zx9mJlMPe~Uq%a?((C`mPp-RK==*-IKV^nx%ex6~c-nIB8B7#4o)_*n;G-^aZ_-F&l zz9I>v4B`Kn1WxP2zuhsc4`0CqdinqdjiU#k4lu#PjvJ-XwQ4PN3z^;92_E_1?Ords zm${2YoL6gw(b?_gs*j@KfL#f|2ngtcU?tHv9io1~(2Z|heT$}&wak45LSxa@h&i`; zthJ?aJFYj_LLt0`0eO*w^~LijOuNFJ+gP9I+Kn@ucT3LQfI)R@LLm$QbPz1<$;3<{ zc8PQ$W7+p{ln$5^PST^P6X0;c_%TE{Ot%t{K!D88kk!BA3Nrp#@`GmjT3L=$PXq6w zJ;@czczi!1{*a^PE!+y>Hdjw@o81%0)$MAO;K0%8Xe^dZ-5#7w3LRwY!!XUBm6`U< z(1RM6^i46>nsesx9E_x`o39HTX2>>pE)j zd5A$Ds@;W`OvpA8G&H<}OuRipU{5+mvd=_O8b(~VP7nhBh7T}j_TQaJ%j9N)zCusK z_jiKO*^Q!b(Hft&Q2C?y3M+ExC>_gyp3sF;(2Ur;IHsk{iEBMN1wy$tZ|P=k*tAo& zZcTTpo3go4o9x-BVhsV-v61Ar-qaF?9PqVcm|}F%o`DCxean(@TusmJ$0wMyw_yHa#Qu z&5YQ^8L_i7Vp+ViW!QveU82HLneLo~?z$R!tL0OZL<&VZq}YPxmx`{N3w(ua0D@Qa z=kL+xBi~sx0wL-!%H`YuSR#}=AQ z&w&Aa2ZQ)U{8eF5*^j>#pUG4JwZe<|D_mqU&Bosi_?x=eWO^Kb);5!=6Mw(QNdQ;E zd8`^ntB3J-X@|-5ulW1cDwF9)^oRbxBLM#s{O!MIn19K1xRt=aq}vB2gIEf)q0b4` zAskKgyDLO^n&1`@!@BlmoKDjA_rY>FY`-B)VOSj=_Knvs5%b}M5cJd}#WmVDDcxpw zx@`$r{FfLSt8+VPpC~CU;W0ZJ5!^oG%jV0r_@5z{({9tocRAUNiCB|F6aP0D$y|pQ zp^J-ZKdmy{;|(Q6i@F_;_r@$B5b<&)onK%p^LuN+ey=i4Hxuk*}|% z+pW??sWI1tdlsc7eyt{AbcMYeh%3A%1X)JIzD+h8?2}F6>aTP zuD;NBEvuH$Ba!S2@d2#T`?3daD|d!*_?=oUwS0{>eHX*Ot-4&PmWIL$%I#fTDiO)b zO9j6xhh{A!+eLANkZy_|hW%AyRd$)dIRLN7h8?9VZMfCeT$MMa$}X{)dGLlXk5yJK zv*G#`nrhMvk^~!yfPwUt=(h$@oH{d4QmZCJvS~e#VY{TPsV@x=D(zIB6wWgHQz;$e z&r{kYY<%USJe{<{zf5k)1AZ}n_}&$6|E(t*B#gr_d+rkgt!OAlmk=Ni8kw&3qXRB~ z$RibG4Hg1*6j6RcM_jsjI-OJq&j#AhH(BJKR@zoYoTq@{2~$5ijN>A!K985tc#}&G z$z=;leKXjs$;jb`I}(h|{1iW)H|hs4D3VU-D-F3}n#VWPuXW@b0rxNtErbE?WQe{l z?ZrlC@=N9y!$hyU1VqQTN@52;VcCrY+rzrhp2Ll&Gb!FLMbz`zEXb+)6>#RerLx>ZuYI_8 z4D9LpQgPt#*r|-xM*p)2U#WNT%aftf;3ugLYn9R0bZ@bCzDSg+Vp$U(#6vqgYBf@D zz6j11X^oP^RDiy4vp({}B(*1w8`*;$jS!x3-bf$yF*;}-`~vaQK>fwt*b3=-6_}aJ zaf~FLg8|h-V>>zXZS%0*+))Yl8PK4xG%1o)htL7D{}36?2MHiJ!EM1)WTjpNpF;3O zfzm@#(Ou%pAbdJPS}H5_=ZV(0WhH9CPW{#oTqlI;6SV8j!*Vv;ippU*Hk)yB@jSST z*@~d}RLnRnK1U0P5pFXE8ym2qrWesPUj8+_+_CTy15n*C!k!Qo9TZ(BxQmAun>(K) zz=Vnu66=ANgH3A;ep!#(+KsbBr8-;`AapH6sbEaXabeNl!Q)n(ZoB71>!szyzNz5EfbDC(bA)vks%Ie`$~+Sh zLg7MqAmUg-T)crx=~`Y#WiYWTC(ZDEhn#&IK>iD%%}b|iV$T^8KSv^ki{llDUCy%* zN+`=WED&LhjB_YsGNm{UpHhBACuTX2nfMpd9I#zn7%n+9@E+9)ctcfik^Czm-(Jfu zM$SCcRp6h}aq2k?mX?b-7m3Y6Jsg9;A4evscC|mO%6i$h^2;`Lp&Ox7vCY6mD9dxv zu_hp<$P)h+;@Gc`BU|BQjdtL~ce%?3zaO*@*<~#kebCT^Lqbp!vlYQdO5|M$A2kMn z=oN8bKii2d4zM!d62EPtYJ154DZDHbJQw^ngMGeSf~o%ig8pNW5b{D52@xkohiteE z5%U0S70{LSqPLqmK+HJb0SW$zk_%Vk(!MV8!G+Ta_Iwhs*FcvrLDoF#;g|TfaL-xj z7_`1XoHQi5z!g6R;}0HkvjGl*Ak8nb)rN|mmz=MPY+F^xn{OJ}FS)k2UVwXiyxuxz ze{lB-9MpCw zhWW%Sb&X$-2lWPryP|8^dU&1Xc-ThS8J5AUa6q=S!4jK`Z>f)Hr0MuYXMxnIzkENS zm0TgH@I15|E$bFt5#Jb4LdhYCy1Lh4=qFLUSQ@a?bFq!+EA4B1^hENbS@h9a$&X3{x%ADV zQcq)VZR1|I6<4xob!spJ65)QjL!d&{fF@xCfEu@fbKyjbqXhMF4ld2gj%4FCc@Cm% z1w5g!Cx8nI5_}W9jr9erg*!rFn*AP^9Y~j6=w+~thv`Is0x!0dK_F5)y3l+)R%?$( zwZ|GfK$MLgYY4rK_wm}rKTik$kkq`QCiU6}V6u3W-qIY=*z0j^5<=^MVJ`4^ozdFR zlkJ3I(fT(om;gXq(`rxS)FLm0>ClA#Kwe_^E(^wQr-cTtYx{~(U`-gmt`C}2ugkKs z7B_idKV_4s1j-3cvukS6vRrRtUQw;HznbMe0yZ+kb!Wx0dXJFh5$$-_tiKm+N6-c~=V|Q2h?O23g&Q5a)*#)Z^p5i4$PZ)wLTAd2 zucJ*a$q=6c*c<*_4vRZ9!x}Gey^bhM697#<8P8dttp@=SdOeC>*A{eql%bV; z7(rggFu|Y_^+u!ng>@|!5v`?4j^JocPvahx=(qE_LNl#sw$Sw|rVgTO?29NW@`f7W zhfJr0gzgxXoV%&d_|mNLl(5bZ*3-A#?m8s|R^U^~)h~p$0zw^6M*m`4^y3?TizbRp zrAyA&JCH|oVga~fA>IWx5XwYs? zNFVtqo&A(b<*zqT(G?--{KJ=F!tbE;CTzEawUL(+pNJ~7`cRKiM@7hXo}O6*Q3=5s zkVuqWs^-`$edNS9J!oYlNX38@pmY z2P{-^@}C4$sN&-hNg?(t5>V0KR^0Rp8rg4+ABvthfFgfOb0h6DMjLCZ7N5>?N*Ek)Mr8@pT_+tDK6a2q~KdR~<;4f#z z?K&lX_D=#TRB?1f{KYRI=BU1`8DKf|7e3#$Io${LX0K_niK4NPCy8TX-o+R z!M^6=Xe%!(!g@(R7ieTjVwqYCQVt8$Q~qKOxI^~79Fbi z?6PgDqVwkiSnobaU&qf2t)d#JZ?s}VVwRSTF4kSBK!!G%RF5Q2BW}4s03@AY2LeKZ}m{hQ|Ev2hiBC0h(hC)Qkbi z!c+?MK!OY?e8&CCIKr4u_EQQ%%%f|~km-0OA<^12uwT!W!#k2}t{y&@-i*0ag33S+ z@%x78%+9$uNm0V(B1ocz6_QdqOCnOfwL2LxYLSi8{haU8XrvDM(toE=~bnym^s~%;O zr3#|@o-JYqZyZ^zfuCbi7aq?VsixuSyCY&#hKXfCp>(uV|zEWC)=0Old8 zO5;~N4FXG!sPe2aIvW(1)IZ~*Te@^$wT)pUMf*A}aL3*Zc$@#J@P?#sj|^`7ykW57 zB2OJuHw!$w@F=EIQVG+#RfpE?eEiu#tc_VOF8Ktc^K_*4qQxHe)sSk*fHDrG{+#of zbAdwKyg2YqlRJl}=rCd}oPZ96v}LWiKg_NPT@4KU@}ET*XGZk-l~hj}RirRo%>qvx9s$$U&ikHdz@EY3m=6EbF&zV@@6EvU zK46-s7}VhU6~AL{)m<USDrBJ3F4kuZLb1z+O@}lJ^%0oNPcIlBM*RI{doTq?REarAwyRlG@_eYaoFuqR0q7a8I_$6FMj=7sJm#}BlLD-{( z7hj%f>n`lq=NycZu~6n&(Xa?F20)v7VJ}{aFyWWjGjkv1TA*|ajc1?h)7DA4QNtn`_;Lg|uN7(c<(ASav(-PNh zZ#vqao*f4GuknR6?2Xx4d0dj>Wywm!j7xL;@9HxrDay$B$J?PRGe>AARAS{&yud2( z6zuGg4x$SGRCbxCB2X~V}$#bpuq80lwdZ5Q@ z+}-wVBR?45wah{q7R<-j7KTK!r(9bYwZU-ORH@n+NguVYZ7Xo!CQe%hCm|UL%n%`g?dd>!=VyQ_*93Dl;(E=D2mpYjT|CC2 zA$xGYwxWZ|Q#m$f#Z9_!@)f6jeIbVhLdJ9{AhwT|1jc;NJ+;vm4~{6&h1Q>Ag{lLG z2l3k^jGR0HCFi{_lR9rjGr`NR^*i1g>FiBcy)W4=#w?h@HYn0Gi0N@eOZ^p$=O)zFH$SirymikX!*+2YTNUWn~^ zSjzH=6|37{Vq*-Vd_;?^6CE zn)NyoPFQ>n<-`epwgO!r?%HF$@pCn&L2^f(#&fFK(Y>z`oVpjZZaz1>q3L|~+W|sy zJ+S^(fS!!)*l~0(#0@z#=F>XDi!Ge?ijN>zBm1y9JaNfVxbhG`=aGjINnFy$f9Wg| zeX!Ac@O#*9N^4m^&MARo0&UybH}sUvcNP=v-bT@ObdT5CgWILNlftk}&t!R+3o9H< zwtK8Iu*FEUJ|*~Yb3?Z>cvyZ^#vzs^kkPkACjoBmeUjcAM!kmg2zkaeCg(29q~qjp z*wJ(p*VFkepY+P%t&Z3&SjFl0b#0)M6K=Fi`{7xumfv@NBh|;bpgzI4+iSqmw;AbsiRlx1HuICj?(bEi7x^k7+xbaDO*qqH~j)H3tbL-G{xxAHOjOzgyo$ z+WKKb6ksLtFC3G6+k?0MD9id2p17dGCv1Q_gefY5J;ts@vt>5sS-eW*=kOMH%edCn zgT$Zl#7|L>9I79ZU2nIXL-HZBlEbY9u6qiuTXVhLdI(ZkBL5-e!@a85BMVerk5BQa z$D`y;^}@$}28X|xyPitBeP#?b#0%e)* zi05I4*>O+-_h`fWLN$Lj3WgEf;bGp#+-mE3H02$EP z6MeW6M}q&(n?87ZZDy|n%;-``o<_2E3wiQYIa;N?QW9qWmEcU@!n=~)^jQ(!B_rQO z8D4gw0~OK5$GOG}F)$UzRL&G%}+oy9REYpn-d9)&TKeKnXpM2AKhEe3X_m zk~Q}Z&=mgBl7%n?6v~9my8o}eF9D~jd*9xNb8yUaggPN92`On18Vscnm6VLfkYk7= zQAyFHR2rm_Ml{HfQlyebilop$O48e)qDjejuVX9q`@P@qy8i#~y1xJSUGF~EeeUO3 z^Ip%|Yp=c5I%kt=bwL$k1Ej@F)F4N2!@gs)ZkjIH^dz=!ns!SNnWMqg=k|LK_A~r7 zR%bwW^1p>5{S|7Hn1o&;AuA(-w+-5^|AG;~RHTc)Eh2B0xlP|F1hZH@Q`vf0(&*`i zNdJeuTI8)3GmV^*lDS|eoMj3#lI?jec+MpIh|xamv|U=r?*WN38VSyo;#=BW z!_5TokpMPH5ih(!YZ59164?Xz1t&se4%w}R%0Y_cKgm3dZ?vpHTCX&1*2fF}nGM%u zDGFedNUL!d@f^%@Bu?vDM+vQCsgcAGely8$9ZMaq*H|C?DT>XcE?#53hJ;RoM96_i zvPIiwouK7VyuV8f8_Zerkc{AApydfVB;y-hN(+8^CwZH@K%Vl>L3o8qFW1|G_ z++9kikJ9+R&)BXJp@U#7O2dW@}dbd*2{#pi+&IvCtzWBKo z`##`LPxg@Z1b@1}AcK@dvtzbMAyMNHA@s%yy*ud3q=ODa2i-F={w*m%h5k!=f!*o( z{1?;1eB_GJ(_AC^*mygRTQN@DVKT9>?~0}3DiT6?`DaP*!2wEu5x_XXoN1LE+3Ix0 zLJ_O)E+Sa{nv!Tosqp)+ca*dnTNNgb(SmS^9eyBy`CY-!19c~3hh!r*u-o8W!-8`m zU*voQd;FwwCwFzVko{@sWcu6bUBdr*wrnI73teWth4!VE{+}x`ODcHr)6XjYX&-bX z#y3`&qT9o3jxXUKaW2tz>KZ798%5VZalyB`;JcsTn}ctXKl%^+b5)#Kt2Jrfc=@w6 zQu&*)ilF}2v$$MDB|VMJh2aMp^mpnJYhEK4KDjUA$A&haE79JpNHBplNr45wP!Kc* zye}462nMHJO5}$Xco~|l@xv~q{9bYn=~wWh2K;MUw`T?%?9j8C+L0SC>0t$1FT1d~ zWT#bYQ(#P&#BOYZAX7V;Nws$CG|u|qhWGg{q%)8NO{#0)P~_h=aG2oRQ1Crm@J-6q zHE=$1>Kf>P?`}i&8lT0z##VDhZ98gu24|K%ExR3dj5iu$D3&CN8I z)0|E79-3Fu989w-&Esh1&@4&w7lrP0-_fi|=hstbSLM6?D`|c}^HZ9?&@4{JSD{&( z=HWCK)8U+H-HYaEnm5pVfaa?-SJGThb2H7kbb3c<-b3>?nm5qAl4d^5Jes{|cA?pU zW-FS<(L9{y33R@?wBA!cf5)M@6uDCW2WV?q2GZ!O~T`>tC>?fS4mX`=8GTh$jBebOUa#Z|3=|M zi?2n;pYdvkN6c%OTp@M;(Hyfo$BrA;>5QT39b+A9t}A<1UdV4hH9)I0Z`RK3=PG0l zpD)-~Afzj{mgSyXCwW!-r9{q}r6C4#cK$BMG(0bv>HD7EZ24%B$ijz=B2HDx5ZQaJ z>sI9~?4N&Hu3hyv7th>jw;l7x@TsDMPYnyJEe|(Lso7p@7F2rY(6{#ccNe@2nE1Ue zc!bqjzY~=O9uLCxnUkJt2phZGi66bORO<1#g)E1omO_JMWhIJNb0lvJ%=e$2wtmKTXNA zIr~JHP1-8+uIixJ8vhTBem_b?0^DYMeJ=Ck#x6ABslE^i3|^#G{o{$=-F2?f4`j=y zJoXD|IQ#W$Yw^a3#b^55+nDXqa`68Bn5}pAmzLC;&iK$^|K6|gj^FH}BacP$&8M2= z+C0#csOW(9 zq-43UwM5}rWg$%i9oEd^vFEPnN}SK#;(AJtxgc*|dRI+}QAK6``h9gnHL~jGW|#Qv z*7@N5de6ZH5#n2egfd0gd(2IwU#;>J4O5s+u~tsGuw5~_;Axg#&Jt6#(~`S4R&9|g zzW4l0>!YOu8XihiSKVDb;c4~zFL{ssgX13bzolHfVy@2FPmPh;A(7T+RGMAI)`l*S z>AE>q#CM(qL#}HdcT+%?*O$9pfu55qc*={Pil@D;lB#izV@@y06CUlUzyz7)oBfj_RTAp;#n%B=I^#mFJ#E5Vu@4xH%eYsYhbx1 zwhHN!uE5erO?9Q0$?(fg`g+VOJfF$!k;_)6yUx0nY-ul+Pc{P?P)}LoC|@!~R;$kGZfN`BEtajGGi$PjDK_Vis>x4LPmYgc%}G&P zsggwtFr_Ge0|8#q?E>7J39#YY-j-oL19 zYtfFYzs$|O^5AHeo7<~Yt4X@$fgu5%p^LHtjYhY+4&e-Ci%JBUs>`>TST*E|x?Nr9 z9QwwP8`%E2ZAjti5~BkVN$TrHq=|0+R+QT3Tw=U*RDI?^)7IQ^T~Te}#WpPqmZ@E_ z95cb%QgD;C0Es*A2Je@wpkQPC&smC9Vw|Zy&!cZ&D5^FaKNVYWbxa{ zi3)70e4dR_4gSx*BlxCMW2CcN;W;H<+QIwgiEDRACnq_i)YQvmmS3ytXnei3tmEUn z8m};o=BU8>d}oW)c>6gn^3uwxT1qkxLQS=ITWXo52X=CsU7MEj(hAJewE@t2ZQm8j~F&&H5X!%HWdm1N7T#}WnOmuub8fw->#LiH(fgKQL@reHOl$9tC9WponBrw zwN6pD``9Qh@_Un{*`rUBCp$G=AS6xS_dcD@C?$N zB3ex3$7G7KwHDx~V|rY3xu&S}an|#%h4hYlnJ#4>m!K1qn`C}gyE62PQdz)QtL6#Ok)3n%1G$gdU1P3{VmrNEWNPy{CyQP1 zE>(WNak+UySf@7G3Pz1uP{IhVju)O&Y$fz4gDv{1q)a4tX(Dr#vOTN7Q9*hW);R93 z+9B20I#bf;YhSk0)><)f{e9wQ*7GDn59+8}-)Pe47kQxnU=5Fc$0ZEZc6+|*Thee$ zh%vJ<-1ZoD;&|ukxQ}*msNBfr=(^0Los?|f%3Gb=sr)ZrkU0Z-86dRmK$Tw zevue6?(HOViTKsyXN0f_N&&uQb;DzGj zb=%b!>R(=zH+0wakHbzJ7-euVaaZW)7cL94=JX5SY5XWmec;weJ$uJRVek9!C-1%& zvG~!t82i&xmn(}&EgRrfvGfo>Hfn3X35##0F{3+gUR{zstcbT}QcO^NhiS;m%^ktK z)%k&QUq>zwnqlNW(zGo=Z23tqbEP0}-(z~7j+b6~RM#BgK0EK@b52;(H!NVDw(jScH3I{3eL_7gImIld@jHv9gWSsN~XaVk7IX2w&+r4ILEiXB@=zB#&=H6nnNxll3uw9e;Yi{b#lo3AcGU`v1%h5&n*1>k40&+X)6> zOWRxIE@qsZR+f5Y6D)P(`g=Kv8+_483|eaQ-@d-g|l?9~p*Pf=h+?wnF+w0qf| zwq1rJ*CmR&Pu(!TQEFqr`if1j_r@kX{5)a(N?Yc-e66c%*ZS;=yCChdvN^k7?41XX zRydb$jrTs{xN3|_pEXip_g1G>KF!>5j+1el>3j5R@S$T%7r)AyDnIz7{PB*;5JiMR8Bm&p(*&dg0B8lwxxI zbN!0&e~s*;Z%^jS&)(s+Y52SPQIFgM2c9*p+1sjn>PmvW*fO6d=R+847&QeK?oWAK zyWoRyWW$qLvfeJKvsE2B3=g*`rpk6K{BnH4^@~dyPNZM+nC{puWwYz_Zur-Nv+8ZFm*7Hbbr0$ z>AN|r*6et0c4y6M?x`nZ9=qCasxa3zj$AF<^w+aUml;yEZ!G*TIDXmxMeki{>JFPB zhMKPSv-dsy6k@x4tJueD%hE0Gsa*UXG`%u)q}~~=#49SvscFlH3{ti3Jhzl%DYRu% zyX@x{n+!7-#oaFE8Cs_|YZ%@Ayno$-ibaYt88?qNiY_mX_qZ%l6`D5xOds{;IR%;R z;~JFgR=p^>^CUJVK-!>eNuW*S$`bZ+*)&kq&F^G z2RnOAI%OpKMY17dTEBA@?~lB0*z#jt!7wYoKD(WTLI=Grw0XC%-oWmLVeHq3Gha;h z-jik?`1M-c-9G*%m%?NcqRK|OHDx(8&a>!po<1<8i? z|H}cEi)ZdUS%Y`tWzRDndwR~B`FEbr%#LxezNh-Si#K4b7u#yhgBLG{UthU#V`%lh zH@Z1r9XGqrYFatQ$Yo3%dsBLIuyKE}ORJ@Vj*Q7a)M#=3((3OlgTc0arcD2MvTc#( z@MO7t35$#MQZ(vzaHig9Upy?!=Hf+0XVqa}%LVH5lRrm|9%8>EIo0jMd#&dz)xc>U zF*P4I-tl_z>U6#PjE(G)Q7`kO>#QjMq5(yfe;GBb-89SF(DUnkP3FD@yUrguFIszv zals_`)CniHn9{E4VH#b7Zy%Ohz2pqP@tVx7I@v85#m9$O$*G!ZEjk<<;d`}KmJ#jo zBda28_l@wIn(q(IwoX=Q%^ZEAvwXhXWRbVi7J09Ge>+iU(xVp3FFuY@246??+iLkB zN5|>H{avqKUj3T4VgFvkh8>A>R`WN zIchfJt0wBt3I2BZ)5DiXlKdR|XJ(g2-QTX=C-+|V+fh}wmVMezFD7T{`4G)RZ^=u4~ypqj?B;Kn2?*o zdsukm{_&!(7Q<_K&n7p_i+FTjs^ZukvpG6-hQ}T2sWI1U9Aht3dMXb%)t)~quT-nz z-1eOX=MT&13Ki^gXRQ^xDp{ACBk@w(AY|zp7k@jsOP(6XPW$ScEqY|RnelL;NJ2OOywee!n8wX^luOpJ#85oe?>)QU6b=Z(F1j(6fsK^$k- zg}l?kr=LplbEj3(&{iLLCe zz2a2Xpk<=_a^A^oowP>mU{ycH2mb((k{_SFX1m35{mN8%CJTcDMPB@J=+knvAFeXpEJc1J+e36yMO;+%lYZ}kGB0ldv!tdgJ-@QTXlUKO^>gd9 zGSywBAKtGP0YhY{Z_H4*$Ue)Oj-G~AX;%rj$W4JX*JU= zRU3CdzgH}^^ik^>iH8jXR^P3veqa4`g8$>ZFa00H1+OSpzV+#>&fJjf$VQbj){$$) zT${UO7KHkWjJ+wxkeIiLyRYkuS5|;$VAow`Ud7}z@u!Pxq^jOdXT~{?7S1b4_tWvL z^ick68(=+cd~oE$tUC*))ZKS|WYHkuJF0fTMe~O9XxWb(u8%ZMr5mV{p`V7b$%D}e4~ezdQK^D^H&oZ5~8>5ltl5U%aR-S zyRsV8^o3dz$@Q(ETP9z-UY8(tr=-xfqqQaB zS$kdC@qBy9{H&O1`{MLBu1Qg^m{KC|=v1dAySP2{u4k*|mSI^nGe_k&E2^jD*WjHO z$t%@T=Io|2RkHOv9%h=9?P`v6bL-;q)T=Gc8*aHu@7o@)ePBbX(zEnjD^77{r04sV z#v?6ll`k&W$7w&flFM~-%Q`yAD)m)JV7cz1(9VF-MuAzJA+D_wqU@pa>ZU;rRwiv% z-9&TWggP&559Asa4r%**z^LT(I`yQ8&7x@|`lJ?pla5b3H!!n4YFuusX?R;y*Mb(C zV#_OP%UtS*jC&Vl&wA+ghP!)twHqtnfEg>KFV(|Ag26V2}@B}?z9uSs#ZR-P&My0N3` zV@KK6Ft3_@xPi>6NBF zjHIlCDha7ijnm5q3@PgLIHBEm@|1by+f?~D{nhMT-VGb=W0g)ye|?Lw8vK+S>2F{j z^~prr=8Ohgjn9-HGIFX@(T5o}iFr}n`cRLUR-+fqZ9jf=mRz`3nY6ULEX^z~!K7nX zl4xO0k@Mn=bnfV}aVb+ZQ!>Tb`5iZ8v&z=Gx4PL|wezHd>dbHPOQbinxyn!c%Ti0| z5-;>pZKP%F4wD+|jrz?ZhpGH4MQZW!3oR4+`nwj+ofz4Y;>xS5Q_{EZCutJnK1fY} z&v;7x@!1qgJ}u73X?>R0<}LY7cOJK2Q7&z5pWRxLzU@<8^1Uq4qL*jX6EpT0)d#M^ z1i;O}s5f^*ZH|9&QwwRd8Zykc-lTE)711<2{(Dbr<7x`!wmnzNEIDKtpX4_)K=5vaF+KdR1ey%vVeRJgJFKJee#%<#eK!#NM>f>+yw_>x8x3tooYr zM2(cpOLe8CSNYkeOo(yL6rLH?ana7JY{d%GEB#Zn+UMsF$qGo|+3-pIAa z%WLQDD5qN6M*BVv9Wk?()aY;bDp#-8PfSo4kz6>Ve_>0KNLpRx{Ft`a*4&a4Je#E8 z2&XiIG4duYT5QowF>U7sa^_sU>C1#>tFd!CBcmU21M{!MxVFD_VvqW4W4fq- zot3j+KJ{IKdAadc?N03I!Ty1g1*3%HtAmBCisy*3GaiYQmAqmmF3n}xE3cAPa4e9y zGj@~Ij#c+1XSO!7`+oHitKI4(zE59VVxF~`y3WB+jiwvc{SQR;>*t{{Sj|Ae&`-89W~n$?rhn}*hm zy|HEE7>O@u%_qGbH-2@z#JG!NW|#>%a82g-aT&E|S;)u-mrX{fWHO9qUx+u{elKtM z-N3($AIY7HjX~^PJx_am8`w#x^ zVWm4>e4+kA_4c88i!KlQczu__r~@ZLcO_n2=a#VkWH#G3}@i z?%4b?Fn={~LFDVX{zfx|0@_SRdYxP@<{hMD?x}ao*W=|SNA8iDY9F8T&wMq7&-pzG zNVKUb8=!Ok#{F2TTK5nX{Gih z%Ui=IS;)AAPq1wsGI9L|4d?g%4l|8~{ANcKjh}VqKHKTb#SJsY94&NMs`%8gIOd+~ z)6p$+IZh38eBZ2gIkYCn?N!oVCo?sBxrP?32$6&pgekc>65;a9#7b zym>Ev)CE2-@EhI~EyZfpnPU33i6is+z`j{;JlZ{544yWFdW z?)#mpYd?1I_I1q^$?WJWJM>#^wA$Bwr4zo)%Zg~DUfO&piCg|I-c0Ac)oi(Tw&k{u zWqJocCvNZfWZ!kGZn2w3?YU92AADaY{c!xV(e(>I7B%Fhu7CV-K-HsBQ=iuaO4i=b z^lhzftv!8DKX*l?*CFPewA;pan?n~=Y4>%zGXIBc>7H$au09wNb4|syq-WEEmpL889wosles z-A08|cD3DEmbh-D;fAU1q8p_e=WnW5ACM5c_x1V-pC7Jc+OAxCRVzPkm(SXjF47lb z`(-z;c=X^-{MK^kRgOoz*Yr^tv-)0`ROZvlv<%L<9Y=kcw~rkP{+jh_@zRrn<)@wq zIWB+v#MOc6?^mcCF@9xmC}QTK!)MGb)4mKY-9Khx+rg!sM-LS5*qdJ(UU^DH^~Gt6 z^x`usZ>`I{^-wZTCTDDpt&CUpdhX1^8cqLmN;d8VPM<{1ChajQs!up|Uj0ej1=slx zic?0sA=iIFkstRc`}%tM{F84tdF_}zs{Y;Zfr0Li_STr5y>d#ob(xrbLdf|iJ~fyC zm~#I@!G{I4kDoL|8oPMQ&T>$lo!WBPu%kmZRdK@cFAE!%T)gggE&W79nApTyw?lNc zpI9EMFQ=kpe(21%H7b?+`c||IIuO2TLiSb8aj|IY8)?H&j#t@ueXjUezx>=aRHcD~ zX~2%x?vktKynAZ)e8(E@>NR&Bk9l&cVw1gVq_M8~Urn;BXShT@vv^Z0^~Ldm|2w@e z`)zilmbz*h4tct7w*7M3kWbe>ifz4Tk-jYG`$d(Jsg=_cwa)0JCaYW-G-P?&xlU_U zAxq9u+4fCaGHhBt?^bj%)5UR9S|dvL|W?7pM@YL@F&El%1R+`oOS&S&AcU7LNA z49wRK-s%v@>l zrD*)1y#rqM*WNi3Z((^-bJBQT_RTkQPLG}W{LXx9hnVcH*Q)ot#tz^;SYyS$KK$j2 z(2W~c>b}`mz1i_=&dR1)?qghx#-wjz$MrW3ZkAeoNi2WNk)ZPyjfYs@S6}L5JJ{gl z$LUjsYc6U_*e92qqF20_v!hO9ar=#_7j3eJRdq5hF0k}H{5g5Py8V#RQEsWpJDzL3 z|1d33mG!YE#^Z(8osI7Gr(cz@H_nL8e>uvZvZ|}Z1i;z`qrVKjXKm8F|J8HXf_+R; zOaNS9T&g{BD%eCxjP0ZmHhtIO+k?B#ELkllbFGoTMYitNkmJP}rmAvQv4Et|kwd?+cysuYZN=)9rLG_)q*M7SI(Q&&Si{l5GJWSrQbL6mLKOA(N&+gpU zQvZE}+d}yfjmnXkCc|#aCD7`KA+>`Bt1x${0L*uI?8`F`g36y8da0oCI@ zCtY2C`)JIl%!>QVElq$ojlv@Wmo=G*&oH13Bq?#~f#Q|#9?H6v<;LRmn~u}JCM zvnBiIF=DQc-jn$wR$FQ3bCWa^iH+)x!K;0h)5kwpSTZ!Ee(1KlXKmTc74LEinztX6 zvR$HZd4uCABC>Bo1iy|elP{0sdFfUTF zqT-M}01ostFbN+ESU`UQe{4b%a{*MKZ>AJP$3k8Vm_o0lphzi+JwtqKMHAx#BjA4>@ueX90NT(qz$AP;FbR4K;*<2|0qW3GC`C~x z$V-87&}(r%`00`u4;Tu)04xb?0PLWDL45496q^CaBmaZQUkfsZjbg*$UyA%CAbSCt z&<}yJgHmiIFadfK;-dn^Tmk&uJ9``Qp9nb`7z4c;`71!irdF{b&`*I$eI@`?ptmDF zHmr%w0+cBWoQi@dcCUyn0!-jvj{NcS1~Fei2l{a^sqfW*74+AL&xSl7=m&id^7n=u z1Hi`YN5~(qpA-uQhCwd^W7oadMqoPh?^L(_9ihwN{Nrf*V`sUT5&TP#J}Iv!FaY`i zFauZtSVDgae^MU&Ux=70^ewdgqo9w5UPaqK0Qz9)xnNS>b$~7O4~S3fITKK#WW|IS z-S)?yc#DmM|4rKdT<8O#9|e>8S_Mpo{ukmC`?~@7S7r7t+WyO+n?Zj-+dl}pKJ;^7 z(w-85Y0x_mpV*(Y83mmGW!nDX&|wGmRoecfPPL#P0h91?z(nZHh)?W47eGC;lWF@e zfj$=cecJwk(9y2hr@^E>tp}z;|AhGDd}afEdf7h``Y8C{rtR+seGv34Fv)KXU=95( z;*!K6KH0_>sxpzZ&6*Z(D?Pwejja1ee!m;zz} z3+RpTC-!#%RG=r(_FoL$6#5<7{{GN)q33{!z19LY(BC6IvH#y)|2Js+`yh-q!e@d> z_;_Fv^p}WF(whgUL*Gf;e<}2F(CcXX^PmrfeikeVYyj+_e?@#^&%e9=uh91QLKsbi zKMWQERss{CKSz9G4_BZs^zF3$qoI$1evh{Q0_a1a=YvUoCIC~Qe?)v@|G&HbZ_)Pm zMHn4~KLIB7y&ABB{s!@h{pSPypzo#a9|L_n^vAUQgP{+DejY3hYy_r5@B9zf|7E04 z%IgUXK=^}T2CxFKg#HZvq&#x~Rp?v)xc=|b_78ynVEE^ONqN@+w$R%UpV;&7uKzOH z{#=9^i15e2q`p=GlcB#td}4n$Km+=2+WyO+n?Zj_+dl}pKJ-Gc6p#o^gZ>TiiT(fX z`oBio-y31H5I!AD!p8va*wiPo?eObNx5a_76cA1BAZ-mH{>a_Rza1 zS-gp`4~xN2V98NxEQYKci$$rj7)&LWC8fb)Sje)3DHRq&NRc&wQfDzZ@+>yhm&FiM zX04#e?{{QbLWsWt@l{ED6*-nDi7%qW@+9#+WLZoSUs#c4MB*FDv!qCTNoCfh?)a3P z;N3c6lqg=NCPIl*EJ_07D@jTi@1GQ+r19$yl$Z(#UgXIO@ZtCbg!4Uvy}2BINC?N* zGmPWq=^gm*{JlebxV_wY0eo(lC(nS#4ff;vb7)`ebVo8lp21NZ+9M?FR~F$>L0%y| z+zWc8)02NVC!C8>%FlBBo_>$-FMqE9eoq!*+)%D3iA#>2^CAVJ1N@5I%RihS62|r6 zc=1BK1AD^tj^FLUj|wFx-Rt;gd`GU=zw6)s8Q=ZhzaKzd_3q#Q8Q=ZhzyCA7`~CUu zpYh%A&v*Zf@BSIz{WHG%uZ{1#L&Czi-aki4-u_%NunP$8arg1$dva)3it^`r`f$TI z-eKOHpn&ioPrkRmVAK;492guD8O)*mG56>9$9SqIy`B_$^64I5Mg|1?ghX<}1ERYJ zQa$N;hXjR&al^v{LV`I#T)uyZPxl~;6A=8L<`<`Vh6QpgeRwD?-b045EeqpZQ9MYq zG1`^DC|3q!UY(xUVzV`?llk#eHEsc2~!9nH{dw=8*mwe>u zj{;I6A4U43gtvK;k1TbADn$wmjH$cJK*rlrh^a~qpo}O>%9C0_U7{F_6%0%;3Nx4t z5r!B;k|E1bVQ?6R3=4(_DL_x&J$d%zMe&QW*$rI%uqlP-mu}!`6Se$*?jYqPWhCVwhpe1D9tqhZ;w%ZKq_C8bG=n@X{W>I3 z$_;=WP!0?Qjsra4HJ}dc0pMkOnpa(}CN-Fdz#E2HpbwfPKJxpdJ_x6az894}bxz04#w^zyM%B z;0ZJWazGN`2;2dTfE-{U@E%|T>i}Ee1~3@N1OkAUfGV&Pm;=-Sqk*$P6z~;b0jq$? zz!hL1a2VhM&jBT1J1`Tt2aE*rfe7FuAO$1>(|}umK5zmE0^R@`z+S)&cnp{U=YeHF zC!l~cP++jBt>CR-C$JOvF8D6k7;FsA1LuLm!QtRGa2r?xECF5*UJsrMo(e7lmx1-b zdf;Q=W8gq=Aovyd6<7_d2Hp+c4W0|03w{WG2p$U_3oZl~f|r1ofWLvifk`hX3SI+V z1GWZRgRgOUOP|II_@zj+Am5b_ENia3;TDAPwD`cV1fQ2pcR`yURq|8S`PHxG^f=0OqrvqWHb zHd|a=LV}o+n2eZ(RIMz1$kB&9eJIceskhz-sl(n!Pkr`qPrdf=AJzLW>L1npFY14& z{=WaI`pI=b#yCCW1~RT8S4YoShFqa!>_WyXSQ)^zO5qyEyL17psG#4V&^J)%FDUd0 z6#5bh{Rf4)ukL1MxNFEk|2M`Nf1W4gy{|gC_ z=Z2tAPkw+GkIPxa4I=}0lAKqBuP+AT+_12aFro(phr=bnJAfO^$G|=)BrJ+JQ-Y_B zpP}%N?ffvVXV9;Bz5z)0-}ndn2%=NLT+G(`1bFk2uP2=*@o^DikW;2?XugXnHlmx- zx-QKsG-Kc|@PEhX=31J2;*q%I*v#qnHyqH--L8NCO*Rn-p~8E30D@*Kz%DTUP+j5l2^EWq!EcQV72qQhA z?syXrUKL{>{$NVUN0*WtF$if6q!=6tic`v@)c9;l*#~1QXHiOWgb2k%c#_XWEU~l# zsd!PaF$0;tIe5#4^@rUUn)ZV?%o|Hhl93G!jW_E5f{Y! z=_byk#1WVEM_h)oD5cDoKv~%+EApl5gfkHT<_~NT6X zpSEQ5m!SG1Efx4FAf7bh{fZ+)4Qygk15no*sOvtcTLsuc#u?*C)UPOAzuD-F+JRcE zUv=9{jOy(sI9H@EIimZVNc-758tn&=6+s+gPn3a$ynDMd`ifG05lM4_;jbk~N zizU5NBra)3?W7$c&)?k9v(fGp%KW<@u9M%wcBgj}Y3?Cu(ru39@zafz5$Uo1$cLdT zLFqP$P+HZZR6mqe*%|F`ge1i*f$h*%m@C18c1hcnu7e)C3a%wA53j@)fuW-0e1vfE zicuGPy9vtkyIW74vU}2##yAc6vq`(3@bB|fH4vsWkg+WKno2DHb7biYz z$wZ3Mn1pM)r#wjaceg*n(Cxc-7={X)Qh`nXrA^W8ndHNnjJ_9;#X3iKUxjP1ms{^^ z5Svjbg`aJKzBc|m=bve#O&~0Vy5V4HmJ2KReE7#Ac`uQoc$X zyxZOu-4uyS>@q^@54S(UFoh`QA7NC@WGS4;oDmAjYFEzAOjnd_-Q`$Zn6vw$A z`r7^iTVx|YRSt{dpifsHfhU8KZW}qkU0@Szk(i8S^2KaY7MvgImh?YQesk{*lYwwP zBpk5|!jO2sxgl=vc)z#L?mk}7c1gQX!!sZ1>|go~(tp8S(9hEKm4>Cg&%pQIW%LoD zesdqoq{hOHg);PZ?=Azm%fSZn)H`eunB|OlM{!aY z)bF~bIAw`AqY>T+;Rhl-3-No$Vd#ocy6qB_R+A*vuUd*yCihUf?J%axQPbPm)Wjxn z%Dh^F8dWMu8S|y6p+3@-uCoHAg7hSxcH0CKHgb@r=&M4jQhey=wrDi$NIw?HLH4|Vpt{$Gfr zFHY$rA8pjN8tPX8^)2T7dp-<~7{x(7tC2b$p@_K$xnK4CckPNE3z0H%5-6$+FqEY0 zU<9t`UT#0@jlOmT=d~W!E096rkdZa+U8Mh~oY_?DZ+_k3zQb*EPx=T$;{J5&8D}7V z@3?}tiu<7)U!uFMdUdx4!$f4Y5q%>`kBr%xl&Riss#&sBR=W~)kgrPZ9-&T6uI@vP zEmc8Z&=-Ay8u|haL0_;L=gt@;f_poY>W{IS1jcHDcD|LOl(u24FV$^BBCiCTiLQcs zILc4PM8CN!L2nnP#G7z`MP0n>l?Fpo6k|vUN*?DYMUR&lGE7Pa`Lad`3-UDFK~X_K z5y?Ydgp%ju`M(s;EzZJJZ$E}2i&FGqq8*|S#HGMc7p2tEKD+PTzwY}~8ea1Nm`Zn_ z1Cd7p9HPr&M=oqBiS{gpaSjvXoZtKnwqK5bqv$boXfvbom`r1@~l(;rQaP3q4lA z`JFn~{Y=^)OQuY0i!=lXt3nqCdjRD4{XRk8gC&J1$zRvCgB;zDk~A5J<5z&L2zUaJ zCFSeeON!StDIO5KHsV^sHEv73?C5`X~2qF*%ZZ_wgG4V;6f7?<|!4 z{KUlMfOjY+2Reu(*!*>#=^Gh_ePtB2kBLbI!Hhx< z(-#v3K9m{59WKEk7~L~{y?G(w2$f6xz~#d3i^79L!vcc&z7&!M504X+=!rA&Kb`nU&2ASHc?(P%a!$Y~= z0hniT_xB7YOQDzvA?~4}F5aPhs{kG;!3ww_ZzSgx;pfK3o^G5au>M15OSwo<_SCTxZF_8 zRXF3+0)p|=5Qnf3Z>;QM9Luog@+U@M89JEX2(A=~gt^qDwd=@^Mp^+GfFyjcNZ{0L9p%wV$COi?w&%?@W85o#3?ESNBw9Ly(E zMwP^8qGu>SB8)pR1Sh+gPi>?o1%!KIQp?$&v@^Q^uP{t6O+-5hr&5I+Be-Ev4%{%` zkT7g&^hT@*fo&VfnK=h|2MQeUce=gKv^ybNl*Fo+D}DZOE+?)|QQ>@UkaIu~*D@TZ z&m|Hyb@GhqlkJR$3mR0fPHmBAIiBWl|L%i(9C!?k#pwS$lo^x_+{vt$tOELZ#qN2h zSg@fgpn|y?%-1+zo`=j`kU5iVB;bJUyyQ8(vM+Q~ghALe$g&8RhPY{XZn|iNartDV zX$Kihp2OZv!hOIV;T(_#+@GMIjz#IR0rEUTp8e9`x0$4m=ZIKKxC3OYO2+ROx$r0M z7^894g4f|>(Bcd+PRmAwM7M@tBPGw6iUG%Hi(4wV#TEXBhgz9xsP5a^29e zW}r{t_bBK|CjFW%rbEEdMzGJNCzNvp&dQI=M>py1&L`afBzYNXZ+{pl}c!l)hQ`MGNjh0wTVGyBZ-uujLmlxKk10 zhjyQ$U$o#>X;`bUoZzm#v><*@vy$sdo7Ht ziP-@va3?$u5QFRiUIdtu@Zg>`Fv13XFdl$A;md#pqjA0f-CS#c$ z7|U#c+3&G9YF5A9!1uw;(^5oPZ&30$_FxG8NeBG@3kbdF0}%vg*)LFgD_TtO!yO!0hzG4 zE=8q~xZon-JLHSt;K3*-)^0+9c03`zzE2M$(U6eGU1g#C1f(r)WbSUEo4J*0q`1f z@3j}QF5_i^_J*|(!pi_AWWvcnJHn?CcT4=98}4MhT0H?}ATl@-V_Of%WSn~(;6oWPE=Wh=<&Jjl{&3 zqME1R9NgZT-0jOCeQ?T!k>Uj z$b|did8P<5;bFjW$i3(O$-00yo{3a2mrr;pAO^YjoIaWB9~F!2&s38j6J7)~K_<^ri}0NF8ge#R9?w=x%x{xtte&}f!mWTh+zC%uk9keV zz30q(&#RO9^^qG;ZiFH11n?jeR!W4eArl@3SU~PQhfe0#Ww*daa3|~m6hVFme!dm? zVxGG99Cz=za57gudONODgdywz424YCG#TZGYylp+1NMU4dw!eDflt_rHV1dYj=*Nf z9^j5tlm{}EhW;5KbK8VR0%TsB@TY?mHub>1V3k97o<(@V=YS`WLyw>@O2_quFxgdryGFCgK;H9#q3GB^AcD1wX)x0DLd1epW&23|uB1?K_ZAzPfIs3m|R z=5xtB@P0rN@xQ2y+39XD|=Lpe7<laCiR2fA9K!^$!r@Os zbLfy^2or`9qhF>(dgU<-p~Fy`?$9J{Bg{?>2aF+)pu`cD)E!?CE*PosU?WdK4gD$y ziQ@ww9^x!T4tT0Sct1gCQlp{BnOMXREsC6}F6wzO%4P%$j7GidBS%AlEjajH1sCyx z;l@KuQs<=JJQ16uPwJf1XZkA+qNAjw4u22(XHE95$4Q98fW1kXdrI@GMPf`XxEh_|OU^tT zWhPerWfL~Di8;?+;BcUjbo;1G|W(Qyp%YHGtLJ;*$?)?f=QG>@8!a`r1POY;MJ3} zEh6v(_)#3PZega0c{AhTnjErpVWv5)rv$@hO~i`K#2L<-J-bxRG);#Y4jXA`VhGmc zgm$k^goIg!dHZ9r$(yVOm}zg<)lfr)2&@xXyN|{ow|toINDpmetbQ_ zcnqX_!1RF40ha^*2NoY#dm!aN#({zZq(ySz7YesnxNe4f8ho